From bb2292289f363527f33f870663b0083cc0ded388 Mon Sep 17 00:00:00 2001 From: Boog900 <54e72d8a-345f-4599-bd90-c6b9bc7d0ec5@aleeas.com> Date: Fri, 19 Jan 2024 00:34:30 +0000 Subject: [PATCH] consensus: organize tests --- Cargo.lock | 331 ++++++++---------- consensus/src/context.rs | 10 +- consensus/src/context/difficulty.rs | 19 +- consensus/src/context/hardforks.rs | 15 +- consensus/src/context/weight.rs | 3 - consensus/src/lib.rs | 2 +- consensus/src/{test_utils.rs => tests.rs} | 1 + .../{context/tests.rs => tests/context.rs} | 18 +- consensus/src/tests/context/data.rs | 9 + .../tests.rs => tests/context/difficulty.rs} | 7 +- .../tests.rs => tests/context/hardforks.rs} | 36 +- .../tests.rs => tests/context/weight.rs} | 17 +- .../src/{test_utils => tests}/mock_db.rs | 35 +- 13 files changed, 270 insertions(+), 233 deletions(-) rename consensus/src/{test_utils.rs => tests.rs} (56%) rename consensus/src/{context/tests.rs => tests/context.rs} (87%) create mode 100644 consensus/src/tests/context/data.rs rename consensus/src/{context/difficulty/tests.rs => tests/context/difficulty.rs} (96%) rename consensus/src/{context/hardforks/tests.rs => tests/context/hardforks.rs} (59%) rename consensus/src/{context/weight/tests.rs => tests/context/weight.rs} (85%) rename consensus/src/{test_utils => tests}/mock_db.rs (82%) diff --git a/Cargo.lock b/Cargo.lock index 1139d85..b88daf7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -19,9 +19,9 @@ checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" [[package]] name = "ahash" -version = "0.8.6" +version = "0.8.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "91429305e9f0a25f6205c5b8e0d2db09e0708a7a6df0f42212bb56c32c8ac97a" +checksum = "77c3a9648d43b9cd48db467b3f87fdd6e146bcc88ab0180006cef2179fe11d01" dependencies = [ "cfg-if", "once_cell", @@ -46,9 +46,9 @@ dependencies = [ [[package]] name = "anstream" -version = "0.6.5" +version = "0.6.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d664a92ecae85fd0a7392615844904654d1d5f5514837f471ddef4a057aba1b6" +checksum = "6e2e1ebcb11de5c03c67de28a7df593d32191b44939c482e97702baaaa6ab6a5" dependencies = [ "anstyle", "anstyle-parse", @@ -94,9 +94,9 @@ dependencies = [ [[package]] name = "async-lock" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7125e42787d53db9dd54261812ef17e937c95a51e4d291373b670342fa44310c" +checksum = "d034b430882f8381900d3fe6f0aaa3ad94f2cb4ac519b429692a1bc2dda4ae7b" dependencies = [ "event-listener", "event-listener-strategy", @@ -105,13 +105,13 @@ dependencies = [ [[package]] name = "async-trait" -version = "0.1.74" +version = "0.1.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a66537f1bb974b254c98ed142ff995236e81b9d0fe4db0575f46612cb15eb0f9" +checksum = "c980ee35e870bd1a4d2c8294d4c04d0499e67bca1e4b5cefcc693c2fa00caea9" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -147,9 +147,9 @@ dependencies = [ [[package]] name = "base64" -version = "0.21.5" +version = "0.21.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35636a1494ede3b646cc98f74f8e62c773a38a659ebc777a2cf26b9b74171df9" +checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" [[package]] name = "base64ct" @@ -180,9 +180,9 @@ checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" [[package]] name = "bitflags" -version = "2.4.1" +version = "2.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" +checksum = "ed570934406eb16438a4e976b1b4500774099c13b8cb96eec99f620f05090ddf" [[package]] name = "bitvec" @@ -216,9 +216,9 @@ dependencies = [ [[package]] name = "borsh" -version = "1.2.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9897ef0f1bd2362169de6d7e436ea2237dc1085d7d1e4db75f4be34d86f309d1" +checksum = "f58b559fd6448c6e2fd0adb5720cd98a2506594cafa4737ff98c396f3e82f667" dependencies = [ "borsh-derive", "cfg_aliases", @@ -226,15 +226,15 @@ dependencies = [ [[package]] name = "borsh-derive" -version = "1.2.1" +version = "1.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "478b41ff04256c5c8330f3dfdaaae2a5cc976a8e75088bafa4625b0d0208de8c" +checksum = "7aadb5b6ccbd078890f6d7003694e33816e6b784358f18e15e7e6d9f065a57cd" dependencies = [ "once_cell", "proc-macro-crate", "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", "syn_derive", ] @@ -293,9 +293,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.4.11" +version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "bfaff671f6b22ca62406885ece523383b9b64022e341e53e009a62ebc47a45f2" +checksum = "1e578d6ec4194633722ccf9544794b71b1385c3c027efe0c55db226fc880865c" dependencies = [ "clap_builder", "clap_derive", @@ -303,9 +303,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.4.11" +version = "4.4.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a216b506622bb1d316cd51328dce24e07bdff4a6128a47c7e7fad11878d5adbb" +checksum = "4df4df40ec50c46000231c914968278b1eb05098cf8f1b3a518a95030e71d1c7" dependencies = [ "anstream", "anstyle", @@ -322,7 +322,7 @@ dependencies = [ "heck", "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -364,44 +364,37 @@ checksum = "06ea2b9bc92be3c2baa9334a323ebca2d6f074ff852cd1d7b11064035cd3868f" [[package]] name = "cpufeatures" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ce420fe07aecd3e67c5f910618fe65e94158f6dcc0adf44e00d69ce2bdfe0fd0" +checksum = "53fe5e26ff1b7aef8bca9c6080520cfb8d9333c7568e1829cef191a9723e5504" dependencies = [ "libc", ] [[package]] name = "crossbeam-deque" -version = "0.8.4" +version = "0.8.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca89a0e215bab21874660c67903c5f143333cab1da83d041c7ded6053774751" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" dependencies = [ - "cfg-if", "crossbeam-epoch", "crossbeam-utils", ] [[package]] name = "crossbeam-epoch" -version = "0.9.16" +version = "0.9.18" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d2fe95351b870527a5d09bf563ed3c97c0cffb87cf1c78a591bf48bb218d9aa" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" dependencies = [ - "autocfg", - "cfg-if", "crossbeam-utils", - "memoffset", ] [[package]] name = "crossbeam-utils" -version = "0.8.17" +version = "0.8.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c06d96137f14f244c37f989d9fff8f95e6c18b918e71f36638f8c49112e4c78f" -dependencies = [ - "cfg-if", -] +checksum = "248e3bacc7dc6baa3b21e405ee045c3047101a49145e7e9eca583ab4c2ca5345" [[package]] name = "crunchy" @@ -473,7 +466,7 @@ dependencies = [ "rayon", "serde", "serde_json", - "syn 2.0.41", + "syn 2.0.48", "thiserror", "thread_local", "tokio", @@ -521,7 +514,7 @@ checksum = "f46882e17999c6cc590af592290432be3bce0428cb0d5f8b6715e4dc7b383eb3" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -624,9 +617,9 @@ dependencies = [ [[package]] name = "event-listener" -version = "4.0.0" +version = "4.0.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "770d968249b5d99410d61f5bf89057f3199a077a04d087092f58e7d10692baae" +checksum = "67b215c49b2b248c855fb73579eb1f4f26c38ffdc12973e20e07b91d78d5646e" dependencies = [ "concurrent-queue", "parking", @@ -702,9 +695,9 @@ checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" [[package]] name = "futures" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da0290714b38af9b4a7b094b8a37086d1b4e61f2df9122c3cad2577669145335" +checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0" dependencies = [ "futures-channel", "futures-core", @@ -717,9 +710,9 @@ dependencies = [ [[package]] name = "futures-channel" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ff4dd66668b557604244583e3e1e1eada8c5c2e96a6d0d6653ede395b78bbacb" +checksum = "eac8f7d7865dcb88bd4373ab671c8cf4508703796caa2b1985a9ca867b3fcb78" dependencies = [ "futures-core", "futures-sink", @@ -727,15 +720,15 @@ dependencies = [ [[package]] name = "futures-core" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eb1d22c66e66d9d72e1758f0bd7d4fd0bee04cad842ee34587d68c07e45d088c" +checksum = "dfc6580bb841c5a68e9ef15c77ccc837b40a7504914d52e47b8b0e9bbda25a1d" [[package]] name = "futures-executor" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0f4fb8693db0cf099eadcca0efe2a5a22e4550f98ed16aba6c48700da29597bc" +checksum = "a576fc72ae164fca6b9db127eaa9a9dda0d61316034f33a0a0d4eda41f02b01d" dependencies = [ "futures-core", "futures-task", @@ -744,38 +737,38 @@ dependencies = [ [[package]] name = "futures-io" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8bf34a163b5c4c52d0478a4d757da8fb65cabef42ba90515efee0f6f9fa45aaa" +checksum = "a44623e20b9681a318efdd71c299b6b222ed6f231972bfe2f224ebad6311f0c1" [[package]] name = "futures-macro" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "53b153fd91e4b0147f4aced87be237c98248656bb01050b96bf3ee89220a8ddb" +checksum = "87750cf4b7a4c0625b1529e4c543c2182106e4dedc60a2a6455e00d212c489ac" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] name = "futures-sink" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e36d3378ee38c2a36ad710c5d30c2911d752cb941c00c72dbabfb786a7970817" +checksum = "9fb8e00e87438d937621c1c6269e53f536c14d3fbd6a042bb24879e57d474fb5" [[package]] name = "futures-task" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "efd193069b0ddadc69c46389b740bbccdd97203899b48d09c5f7969591d6bae2" +checksum = "38d84fa142264698cdce1a9f9172cf383a0c82de1bddcf3092901442c4097004" [[package]] name = "futures-util" -version = "0.3.29" +version = "0.3.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a19526d624e703a3179b3d322efec918b6246ea0fa51d41124525f00f1cc8104" +checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48" dependencies = [ "futures-channel", "futures-core", @@ -801,9 +794,9 @@ dependencies = [ [[package]] name = "getrandom" -version = "0.2.11" +version = "0.2.12" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fe9006bed769170c11f845cf00c7c1e9092aeb3f268e007c3e760ac68008070f" +checksum = "190092ea657667030ac6a35e305e62fc4dd69fd98ac98631e5d3a2b1575a12b5" dependencies = [ "cfg-if", "libc", @@ -850,9 +843,9 @@ checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" [[package]] name = "hermit-abi" -version = "0.3.3" +version = "0.3.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d77f7ec81a6d05a3abb01ab6eb7590f6083d08449fe5a1c8b1e620283546ccb7" +checksum = "5d3d0e0f38255e7fa3cf31335b3a56f05febd18025f4db5ef7a0cfb4f8da651f" [[package]] name = "hex" @@ -911,9 +904,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" [[package]] name = "hyper" -version = "0.14.27" +version = "0.14.28" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ffb1cfd654a8219eaef89881fdb3bb3b1cdc5fa75ded05d6933b2b382e395468" +checksum = "bf96e135eb83a2a8ddf766e426a841d8ddd7449d5f00d34ea02b41d2f19eef80" dependencies = [ "bytes", "futures-channel", @@ -925,7 +918,7 @@ dependencies = [ "httpdate", "itoa", "pin-project-lite", - "socket2 0.4.10", + "socket2", "tokio", "tower-service", "tracing", @@ -949,9 +942,9 @@ dependencies = [ [[package]] name = "iana-time-zone" -version = "0.1.58" +version = "0.1.59" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8326b86b6cff230b97d0d312a6c40a60726df3332e721f72a1b035f451663b20" +checksum = "b6a67363e2aa4443928ce15e57ebae94fd8949958fd1223c4cfc0cd473ad7539" dependencies = [ "android_system_properties", "core-foundation-sys", @@ -998,18 +991,18 @@ checksum = "b1a46d1a171d865aa5f83f92695765caa047a9b4cbae2cbf37dbd613a793fd4c" [[package]] name = "js-sys" -version = "0.3.66" +version = "0.3.67" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cee9c64da59eae3b50095c18d3e74f8b73c0b86d2792824ff01bbce68ba229ca" +checksum = "9a1d36f1235bc969acba30b7f5990b864423a6068a10f7c90ae8f0112e3a59d1" dependencies = [ "wasm-bindgen", ] [[package]] name = "keccak" -version = "0.1.4" +version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8f6d5ed8676d904364de097082f4e7d240b571b67989ced0240f08b7f966f940" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" dependencies = [ "cpufeatures", ] @@ -1031,9 +1024,9 @@ dependencies = [ [[package]] name = "libc" -version = "0.2.151" +version = "0.2.152" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "302d7ab3130588088d277783b1e2d2e10c9e9e4a16dd9050e6ec93fb3e7048f4" +checksum = "13e3bf6590cbc649f4d1a3eefc9d5d6eb746f5200ffb04e5e142700b8faa56e7" [[package]] name = "libm" @@ -1047,16 +1040,16 @@ version = "0.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "85c833ca1e66078851dba29046874e38f08b2c883700aa29a03ddd3b23814ee8" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "libc", "redox_syscall", ] [[package]] name = "linux-raw-sys" -version = "0.4.12" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c4cd1a83af159aa67994778be9070f0ae1bd732942279cabb14f86f986a21456" +checksum = "01cda141df6706de531b6c46c3a33ecca755538219bd484262fa09410c13539c" [[package]] name = "log" @@ -1076,18 +1069,9 @@ dependencies = [ [[package]] name = "memchr" -version = "2.6.4" +version = "2.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" - -[[package]] -name = "memoffset" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c" -dependencies = [ - "autocfg", -] +checksum = "523dc4f511e55ab87b694dc30d0f820d60906ef06413f93d4d7a1385599cc149" [[package]] name = "merlin" @@ -1306,9 +1290,9 @@ dependencies = [ [[package]] name = "object" -version = "0.32.1" +version = "0.32.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0" +checksum = "a6a622008b6e321afc04970976f62ee297fdbaa6f95318ca343e3eebb9648441" dependencies = [ "memchr", ] @@ -1383,7 +1367,7 @@ checksum = "4359fd9c9171ec6e8c62926d6faaf553a8dc3f64e1507e76da7911b4f6a04405" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -1400,9 +1384,9 @@ checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] name = "platforms" -version = "3.2.0" +version = "3.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "14e6ab3f592e6fb464fc9712d8d6e6912de6473954635fd76a589d832cffcbb0" +checksum = "626dec3cac7cc0e1577a2ec3fc496277ec2baa084bebad95bb6fdbfae235f84c" [[package]] name = "ppv-lite86" @@ -1422,11 +1406,10 @@ dependencies = [ [[package]] name = "proc-macro-crate" -version = "2.0.1" +version = "3.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "97dc5fea232fc28d2f597b37c4876b348a40e33f3b02cc975c8d006d78d94b1a" +checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284" dependencies = [ - "toml_datetime", "toml_edit", ] @@ -1455,9 +1438,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.70" +version = "1.0.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39278fbbf5fb4f646ce651690877f89d1c5811a3d4acb27700c1cb3cdb78fd3b" +checksum = "95fc56cda0b5c3325f5fbbd7ff9fda9e02bb00bb3dac51252d2f1bfa1cb8cc8c" dependencies = [ "unicode-ident", ] @@ -1470,7 +1453,7 @@ checksum = "31b476131c3c86cb68032fdc5cb6d5a1045e3e42d96b69fa599fd77701e1f5bf" dependencies = [ "bit-set", "bit-vec", - "bitflags 2.4.1", + "bitflags 2.4.2", "lazy_static", "num-traits", "rand", @@ -1501,9 +1484,9 @@ checksum = "a1d01941d82fa2ab50be1e79e6714289dd7cde78eba4c074bc5a4374f650dfe0" [[package]] name = "quote" -version = "1.0.33" +version = "1.0.35" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5267fca4496028628a95160fc423a33e8b2e6af8a5302579e322e4b520293cae" +checksum = "291ec9ab5efd934aaf503a6466c5d5251535d108ee747472c3977cc5acc868ef" dependencies = [ "proc-macro2", ] @@ -1575,9 +1558,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.8.0" +version = "1.8.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c27db03db7734835b3f53954b534c91069375ce6ccaa2e065441e07d9b6cdb1" +checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" dependencies = [ "either", "rayon-core", @@ -1585,9 +1568,9 @@ dependencies = [ [[package]] name = "rayon-core" -version = "1.12.0" +version = "1.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5ce3fb6ad83f861aac485e76e1985cd109d9a3713802152be56c3b1f0e0658ed" +checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2" dependencies = [ "crossbeam-deque", "crossbeam-utils", @@ -1650,11 +1633,11 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.28" +version = "0.38.30" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "72e572a5e8ca657d7366229cdde4bd14c4eb5499a9573d4d366fe1b599daa316" +checksum = "322394588aaf33c24007e8bb3238ee3e4c5c09c084ab32bc73890b99ff326bca" dependencies = [ - "bitflags 2.4.1", + "bitflags 2.4.2", "errno", "libc", "linux-raw-sys", @@ -1729,11 +1712,11 @@ checksum = "f98d2aa92eebf49b69786be48e4477826b256916e84a57ff2a4f21923b48eb4c" [[package]] name = "schannel" -version = "0.1.22" +version = "0.1.23" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c3733bf4cf7ea0880754e19cb5a462007c4a8c1914bff372ccc95b464f1df88" +checksum = "fbc91545643bcf3a0bbb6569265615222618bdf33ce4ffbbd13c4bbd4c093534" dependencies = [ - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] @@ -1771,44 +1754,44 @@ dependencies = [ [[package]] name = "semver" -version = "1.0.20" +version = "1.0.21" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "836fa6a3e1e547f9a2c4040802ec865b5d85f4014efe00555d7090a3dcaa1090" +checksum = "b97ed7a9823b74f99c7742f5336af7be5ecd3eeafcb1507d1fa93347b1d589b0" [[package]] name = "serde" -version = "1.0.193" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "25dd9975e68d0cb5aa1120c288333fc98731bd1dd12f561e468ea4728c042b89" +checksum = "63261df402c67811e9ac6def069e4786148c4563f4b50fd4bf30aa370d626b02" dependencies = [ "serde_derive", ] [[package]] name = "serde_bytes" -version = "0.11.12" +version = "0.11.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +checksum = "8b8497c313fd43ab992087548117643f6fcd935cbf36f176ffda0aacf9591734" dependencies = [ "serde", ] [[package]] name = "serde_derive" -version = "1.0.193" +version = "1.0.195" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43576ca501357b9b071ac53cdc7da8ef0cbd9493d8df094cd821777ea6e894d3" +checksum = "46fe8f8603d81ba86327b23a2e9cdf49e1255fb94a4c5f297f6ee0547178ea2c" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] name = "serde_json" -version = "1.0.108" +version = "1.0.111" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d1c7e3eac408d115102c4c24ad393e0821bb3a5df4d506a80f85f7a742a526b" +checksum = "176e46fa42316f18edd598015a5166857fc835ec732f5215eac6b7bdbf0a84f4" dependencies = [ "itoa", "ryu", @@ -1866,19 +1849,9 @@ dependencies = [ [[package]] name = "smallvec" -version = "1.11.2" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4dccd0940a2dcdf68d092b8cbab7dc0ad8fa938bf95787e1b916b0e3d0e8e970" - -[[package]] -name = "socket2" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9f7916fc008ca5542385b89a3d3ce689953c143e9304a9bf8beec1de48994c0d" -dependencies = [ - "libc", - "winapi", -] +checksum = "2593d31f82ead8df961d8bd23a64c2ccf2eb5dd34b0a34bfb4dd54011c72009e" [[package]] name = "socket2" @@ -1936,9 +1909,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.41" +version = "2.0.48" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "44c8b28c477cc3bf0e7966561e3460130e1255f7a1cf71931075f1c5e7a7e269" +checksum = "0f3531638e407dfc0814761abb7c00a5b54992b849452a0646b7f65c9f770f3f" dependencies = [ "proc-macro2", "quote", @@ -1954,7 +1927,7 @@ dependencies = [ "proc-macro-error", "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -1965,35 +1938,35 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.8.1" +version = "3.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef1adac450ad7f4b3c28589471ade84f25f731a7a0fe30d71dfa9f60fd808e5" +checksum = "01ce4141aa927a6d1bd34a041795abd0db1cccba5d5f24b009f694bdf3a1f3fa" dependencies = [ "cfg-if", "fastrand", "redox_syscall", "rustix", - "windows-sys 0.48.0", + "windows-sys 0.52.0", ] [[package]] name = "thiserror" -version = "1.0.51" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f11c217e1416d6f036b870f14e0413d480dbf28edbee1f877abaf0206af43bb7" +checksum = "d54378c645627613241d077a3a79db965db602882668f9136ac42af9ecb730ad" dependencies = [ "thiserror-impl", ] [[package]] name = "thiserror-impl" -version = "1.0.51" +version = "1.0.56" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "01742297787513b79cf8e29d1056ede1313e2420b7b3b15d0a768b4921f549df" +checksum = "fa0faa943b50f3db30a20aa7e265dbc66076993efed8463e8de414e5d06d3471" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -2017,16 +1990,16 @@ dependencies = [ [[package]] name = "tokio" -version = "1.35.0" +version = "1.35.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "841d45b238a16291a4e1584e61820b8ae57d696cc5015c459c229ccc6990cc1c" +checksum = "c89b4efa943be685f629b149f53829423f8f5531ea21249408e8e2f8671ec104" dependencies = [ "backtrace", "libc", "mio", "num_cpus", "pin-project-lite", - "socket2 0.5.5", + "socket2", "tokio-macros", "windows-sys 0.48.0", ] @@ -2039,7 +2012,7 @@ checksum = "5b8a1e28f2deaa14e508979454cb3a223b10b938b45af148bc0986de36f1923b" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -2080,15 +2053,15 @@ dependencies = [ [[package]] name = "toml_datetime" -version = "0.6.3" +version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7cda73e2f1397b1262d6dfdcef8aafae14d1de7748d66822d3bfeeb6d03e5e4b" +checksum = "3550f4e9685620ac18a50ed434eb3aec30db8ba93b0287467bca5826ea25baf1" [[package]] name = "toml_edit" -version = "0.20.2" +version = "0.21.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "396e4d48bbb2b7554c944bde63101b5ae446cff6ec4a24227428f15eb72ef338" +checksum = "d34d383cd00a163b4a5b85053df514d45bc330f6de7737edfe0a93311d1eaa03" dependencies = [ "indexmap 2.1.0", "toml_datetime", @@ -2147,7 +2120,7 @@ checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -2271,9 +2244,9 @@ checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" [[package]] name = "wasm-bindgen" -version = "0.2.89" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0ed0d4f68a3015cc185aff4db9506a015f4b96f95303897bfa23f846db54064e" +checksum = "b1223296a201415c7fad14792dbefaace9bd52b62d33453ade1c5b5f07555406" dependencies = [ "cfg-if", "wasm-bindgen-macro", @@ -2281,24 +2254,24 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.89" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b56f625e64f3a1084ded111c4d5f477df9f8c92df113852fa5a374dbda78826" +checksum = "fcdc935b63408d58a32f8cc9738a0bffd8f05cc7c002086c6ef20b7312ad9dcd" dependencies = [ "bumpalo", "log", "once_cell", "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-macro" -version = "0.2.89" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0162dbf37223cd2afce98f3d0785506dcb8d266223983e4b5b525859e6e182b2" +checksum = "3e4c238561b2d428924c49815533a8b9121c664599558a5d9ec51f8a1740a999" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2306,22 +2279,22 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.89" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f0eb82fcb7930ae6219a7ecfd55b217f5f0893484b7a13022ebb2b2bf20b5283" +checksum = "bae1abb6806dc1ad9e560ed242107c0f6c84335f1749dd4e8ddb012ebd5e25a7" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.89" +version = "0.2.90" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ab9b36309365056cd639da3134bf87fa8f3d86008abf99e612384a6eecd459f" +checksum = "4d91413b1c31d7539ba5ef2451af3f0b833a005eb27a631cec32bc0635a8602b" [[package]] name = "winapi" @@ -2347,11 +2320,11 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" [[package]] name = "windows-core" -version = "0.51.1" +version = "0.52.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1f8cf84f35d2db49a46868f947758c7a1138116f7fac3bc844f43ade1292e64" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" dependencies = [ - "windows-targets 0.48.5", + "windows-targets 0.52.0", ] [[package]] @@ -2488,9 +2461,9 @@ checksum = "dff9641d1cd4be8d1a070daf9e3773c5f67e78b4d9d42263020c057706765c04" [[package]] name = "winnow" -version = "0.5.28" +version = "0.5.34" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6c830786f7720c2fd27a1a0e27a709dbd3c4d009b56d098fc742d4f4eab91fe2" +checksum = "b7cf47b659b318dccbd69cc4797a39ae128f533dce7902a1096044d1967b9c16" dependencies = [ "memchr", ] @@ -2506,22 +2479,22 @@ dependencies = [ [[package]] name = "zerocopy" -version = "0.7.31" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1c4061bedbb353041c12f413700357bec76df2c7e2ca8e4df8bac24c6bf68e3d" +checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be" dependencies = [ "zerocopy-derive", ] [[package]] name = "zerocopy-derive" -version = "0.7.31" +version = "0.7.32" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3c129550b3e6de3fd0ba67ba5c81818f9805e58b8d7fee80a3a59d2c9fc601a" +checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] [[package]] @@ -2541,5 +2514,5 @@ checksum = "ce36e65b0d2999d2aafac989fb249189a141aee1f53c612c1f37d72631959f69" dependencies = [ "proc-macro2", "quote", - "syn 2.0.41", + "syn 2.0.48", ] diff --git a/consensus/src/context.rs b/consensus/src/context.rs index 2e48ac3..5b2a059 100644 --- a/consensus/src/context.rs +++ b/consensus/src/context.rs @@ -24,13 +24,11 @@ use monero_consensus::{blocks::ContextToVerifyBlock, current_unix_timestamp, Har use crate::{Database, DatabaseRequest, DatabaseResponse, ExtendedConsensusError}; -mod difficulty; -mod hardforks; -mod weight; +pub(crate) mod difficulty; +pub(crate) mod hardforks; +pub(crate) mod rx_seed; +pub(crate) mod weight; -mod rx_seed; -#[cfg(test)] -mod tests; mod tokens; pub use difficulty::DifficultyCacheConfig; diff --git a/consensus/src/context/difficulty.rs b/consensus/src/context/difficulty.rs index 075a3cc..b98f058 100644 --- a/consensus/src/context/difficulty.rs +++ b/consensus/src/context/difficulty.rs @@ -7,9 +7,6 @@ use crate::{ helper::median, Database, DatabaseRequest, DatabaseResponse, ExtendedConsensusError, HardFork, }; -#[cfg(test)] -pub(super) mod tests; - /// The amount of blocks we account for to calculate difficulty const DIFFICULTY_WINDOW: usize = 720; /// The proportion of blocks we remove from the [`DIFFICULTY_WINDOW`]. When the window @@ -24,9 +21,9 @@ const DIFFICULTY_LAG: usize = 15; /// #[derive(Debug, Clone)] pub struct DifficultyCacheConfig { - window: usize, - cut: usize, - lag: usize, + pub(crate) window: usize, + pub(crate) cut: usize, + pub(crate) lag: usize, } impl DifficultyCacheConfig { @@ -56,16 +53,16 @@ impl DifficultyCacheConfig { /// This struct is able to calculate difficulties from blockchain information. /// #[derive(Debug, Clone)] -pub struct DifficultyCache { +pub(crate) struct DifficultyCache { /// The list of timestamps in the window. /// len <= [`DIFFICULTY_BLOCKS_COUNT`] - timestamps: VecDeque, + pub(crate) timestamps: VecDeque, /// The current cumulative difficulty of the chain. - cumulative_difficulties: VecDeque, + pub(crate) cumulative_difficulties: VecDeque, /// The last height we accounted for. - last_accounted_height: u64, + pub(crate) last_accounted_height: u64, /// The config - config: DifficultyCacheConfig, + pub(crate) config: DifficultyCacheConfig, } impl DifficultyCache { diff --git a/consensus/src/context/hardforks.rs b/consensus/src/context/hardforks.rs index 7d107d3..caf7c82 100644 --- a/consensus/src/context/hardforks.rs +++ b/consensus/src/context/hardforks.rs @@ -7,9 +7,6 @@ use monero_consensus::{HFVotes, HFsInfo, HardFork}; use crate::{Database, DatabaseRequest, DatabaseResponse, ExtendedConsensusError}; -#[cfg(test)] -pub(super) mod tests; - // https://cuprate.github.io/monero-docs/consensus_rules/hardforks.html#accepting-a-fork const DEFAULT_WINDOW_SIZE: u64 = 10080; // supermajority window check length - a week @@ -18,9 +15,9 @@ const DEFAULT_WINDOW_SIZE: u64 = 10080; // supermajority window check length - a #[derive(Debug, Clone)] pub struct HardForkConfig { /// The network we are on. - info: HFsInfo, + pub(crate) info: HFsInfo, /// The amount of votes we are taking into account to decide on a fork activation. - window: u64, + pub(crate) window: u64, } impl HardForkConfig { @@ -49,12 +46,12 @@ impl HardForkConfig { /// A struct that keeps track of the current hard-fork and current votes. #[derive(Debug, Clone)] pub struct HardForkState { - current_hardfork: HardFork, + pub(crate) current_hardfork: HardFork, - config: HardForkConfig, - votes: HFVotes, + pub(crate) config: HardForkConfig, + pub(crate) votes: HFVotes, - last_height: u64, + pub(crate) last_height: u64, } impl HardForkState { diff --git a/consensus/src/context/weight.rs b/consensus/src/context/weight.rs index 1545fa3..bc39ad4 100644 --- a/consensus/src/context/weight.rs +++ b/consensus/src/context/weight.rs @@ -23,9 +23,6 @@ use crate::{ Database, DatabaseRequest, DatabaseResponse, ExtendedConsensusError, HardFork, }; -#[cfg(test)] -pub(super) mod tests; - const SHORT_TERM_WINDOW: u64 = 100; const LONG_TERM_WINDOW: u64 = 100000; diff --git a/consensus/src/lib.rs b/consensus/src/lib.rs index 936d30f..c30afad 100644 --- a/consensus/src/lib.rs +++ b/consensus/src/lib.rs @@ -15,7 +15,7 @@ pub mod randomx; #[cfg(feature = "binaries")] pub mod rpc; #[cfg(test)] -mod test_utils; +mod tests; pub mod transactions; pub use block::{ diff --git a/consensus/src/test_utils.rs b/consensus/src/tests.rs similarity index 56% rename from consensus/src/test_utils.rs rename to consensus/src/tests.rs index 7929eb4..13598be 100644 --- a/consensus/src/test_utils.rs +++ b/consensus/src/tests.rs @@ -1 +1,2 @@ +mod context; pub mod mock_db; diff --git a/consensus/src/context/tests.rs b/consensus/src/tests/context.rs similarity index 87% rename from consensus/src/context/tests.rs rename to consensus/src/tests/context.rs index 5eb6dfc..3fd1030 100644 --- a/consensus/src/context/tests.rs +++ b/consensus/src/tests/context.rs @@ -2,12 +2,20 @@ use proptest::strategy::ValueTree; use proptest::{strategy::Strategy, test_runner::TestRunner}; use tower::ServiceExt; -use super::{ - difficulty::tests::TEST_DIFFICULTY_CONFIG, hardforks::tests::TEST_HARD_FORK_CONFIG, - initialize_blockchain_context, weight::tests::TEST_WEIGHT_CONFIG, BlockChainContextRequest, - BlockChainContextResponse, ContextConfig, UpdateBlockchainCacheData, +use crate::context::{ + initialize_blockchain_context, BlockChainContextRequest, BlockChainContextResponse, + ContextConfig, UpdateBlockchainCacheData, }; -use crate::{test_utils::mock_db::*, HardFork}; +use crate::{tests::mock_db::*, HardFork}; + +pub(crate) mod data; +mod difficulty; +mod hardforks; +mod weight; + +use difficulty::*; +use hardforks::*; +use weight::*; const TEST_CONTEXT_CONFIG: ContextConfig = ContextConfig { hard_fork_cfg: TEST_HARD_FORK_CONFIG, diff --git a/consensus/src/tests/context/data.rs b/consensus/src/tests/context/data.rs new file mode 100644 index 0000000..9e5faac --- /dev/null +++ b/consensus/src/tests/context/data.rs @@ -0,0 +1,9 @@ +pub mod hfs { + use monero_consensus::HardFork::{self, *}; + + #[rustfmt::skip] + pub const HFS_2688888_2689608: [(HardFork, HardFork); 720] = [(V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16), (V15, V16)]; + + #[rustfmt::skip] + pub const HFS_2678808_2688888: [(HardFork, HardFork); 10080] = [(V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V14), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16), (V14, V16)]; +} diff --git a/consensus/src/context/difficulty/tests.rs b/consensus/src/tests/context/difficulty.rs similarity index 96% rename from consensus/src/context/difficulty/tests.rs rename to consensus/src/tests/context/difficulty.rs index 71e59e1..b0a11b5 100644 --- a/consensus/src/context/difficulty/tests.rs +++ b/consensus/src/tests/context/difficulty.rs @@ -2,8 +2,7 @@ use std::collections::VecDeque; use proptest::{arbitrary::any, prop_assert_eq, prop_compose, proptest}; -use super::{DifficultyCache, DifficultyCacheConfig}; -use crate::{helper::median, test_utils::mock_db::*, HardFork}; +use crate::{context::difficulty::*, helper::median, tests::mock_db::*, HardFork}; const TEST_WINDOW: usize = 72; const TEST_CUT: usize = 6; @@ -21,7 +20,7 @@ async fn first_3_blocks_fixed_difficulty() -> Result<(), tower::BoxError> { db_builder.add_block(genesis); let mut difficulty_cache = - DifficultyCache::init_from_chain_height(1, TEST_DIFFICULTY_CONFIG, db_builder.finish()) + DifficultyCache::init_from_chain_height(1, TEST_DIFFICULTY_CONFIG, db_builder.finish(None)) .await?; for height in 1..3 { @@ -37,7 +36,7 @@ async fn genesis_block_skipped() -> Result<(), tower::BoxError> { let genesis = DummyBlockExtendedHeader::default().with_difficulty_info(0, 1); db_builder.add_block(genesis); let diff_cache = - DifficultyCache::init_from_chain_height(1, TEST_DIFFICULTY_CONFIG, db_builder.finish()) + DifficultyCache::init_from_chain_height(1, TEST_DIFFICULTY_CONFIG, db_builder.finish(None)) .await?; assert!(diff_cache.cumulative_difficulties.is_empty()); assert!(diff_cache.timestamps.is_empty()); diff --git a/consensus/src/context/hardforks/tests.rs b/consensus/src/tests/context/hardforks.rs similarity index 59% rename from consensus/src/context/hardforks/tests.rs rename to consensus/src/tests/context/hardforks.rs index 7390bec..06e8fd8 100644 --- a/consensus/src/context/hardforks/tests.rs +++ b/consensus/src/tests/context/hardforks.rs @@ -1,8 +1,13 @@ use monero_consensus::hard_forks::{HFInfo, HardFork, NUMB_OF_HARD_FORKS}; use monero_consensus::HFsInfo; -use super::{HardForkConfig, HardForkState}; -use crate::test_utils::mock_db::*; +use crate::{ + context::{hardforks::HardForkState, HardForkConfig}, + tests::{ + context::data::hfs::{HFS_2678808_2688888, HFS_2688888_2689608}, + mock_db::*, + }, +}; const TEST_WINDOW_SIZE: u64 = 25; @@ -46,10 +51,35 @@ async fn hard_fork_set_depends_on_top_block() { let state = HardForkState::init_from_chain_height( TEST_WINDOW_SIZE + 1, TEST_HARD_FORK_CONFIG, - db_builder.finish(), + db_builder.finish(None), ) .await .unwrap(); assert_eq!(state.current_hardfork, HardFork::V14); } + +#[tokio::test] +async fn hf_v15_v16_correct() { + let mut db_builder = DummyDatabaseBuilder::default(); + + for (version, vote) in HFS_2678808_2688888 { + db_builder + .add_block(DummyBlockExtendedHeader::default().with_hard_fork_info(version, vote)); + } + + let mut state = HardForkState::init_from_chain_height( + 2688888, + HardForkConfig::main_net(), + db_builder.finish(Some(2688888)), + ) + .await + .unwrap(); + + for (i, (_, vote)) in HFS_2688888_2689608.into_iter().enumerate() { + assert_eq!(state.current_hardfork, HardFork::V15); + state.new_block(vote, (2688888 + i) as u64); + } + + assert_eq!(state.current_hardfork, HardFork::V16); +} diff --git a/consensus/src/context/weight/tests.rs b/consensus/src/tests/context/weight.rs similarity index 85% rename from consensus/src/context/weight/tests.rs rename to consensus/src/tests/context/weight.rs index 73e9c26..d1093b0 100644 --- a/consensus/src/context/weight/tests.rs +++ b/consensus/src/tests/context/weight.rs @@ -1,5 +1,7 @@ -use super::{BlockWeightsCache, BlockWeightsCacheConfig}; -use crate::test_utils::mock_db::*; +use crate::{ + context::{weight::BlockWeightsCache, BlockWeightsCacheConfig}, + tests::mock_db::*, +}; pub const TEST_WEIGHT_CONFIG: BlockWeightsCacheConfig = BlockWeightsCacheConfig::new(100, 5000); @@ -11,9 +13,12 @@ async fn blocks_out_of_window_not_counted() -> Result<(), tower::BoxError> { db_builder.add_block(block); } - let mut weight_cache = - BlockWeightsCache::init_from_chain_height(5000, TEST_WEIGHT_CONFIG, db_builder.finish()) - .await?; + let mut weight_cache = BlockWeightsCache::init_from_chain_height( + 5000, + TEST_WEIGHT_CONFIG, + db_builder.finish(None), + ) + .await?; assert_eq!(weight_cache.median_long_term_weight(), 2500); assert_eq!(weight_cache.median_short_term_weight(), 4950); @@ -36,7 +41,7 @@ async fn weight_cache_calculates_correct_median() -> Result<(), tower::BoxError> db_builder.add_block(block); let mut weight_cache = - BlockWeightsCache::init_from_chain_height(1, TEST_WEIGHT_CONFIG, db_builder.finish()) + BlockWeightsCache::init_from_chain_height(1, TEST_WEIGHT_CONFIG, db_builder.finish(None)) .await?; for height in 1..=100 { diff --git a/consensus/src/test_utils/mock_db.rs b/consensus/src/tests/mock_db.rs similarity index 82% rename from consensus/src/test_utils/mock_db.rs rename to consensus/src/tests/mock_db.rs index 6ca33e1..d9f8d95 100644 --- a/consensus/src/test_utils/mock_db.rs +++ b/consensus/src/tests/mock_db.rs @@ -33,7 +33,7 @@ prop_compose! { for block in blocks { builder.add_block(block); } - builder.finish() + builder.finish(None) } } @@ -110,9 +110,10 @@ impl DummyDatabaseBuilder { self.blocks.push(block); } - pub fn finish(self) -> DummyDatabase { + pub fn finish(self, dummy_height: Option) -> DummyDatabase { DummyDatabase { blocks: Arc::new(self.blocks.into()), + dummy_height, } } } @@ -120,6 +121,7 @@ impl DummyDatabaseBuilder { #[derive(Clone, Debug)] pub struct DummyDatabase { blocks: Arc>>, + dummy_height: Option, } impl Service for DummyDatabase { @@ -134,15 +136,23 @@ impl Service for DummyDatabase { fn call(&mut self, req: DatabaseRequest) -> Self::Future { let blocks = self.blocks.clone(); + let dummy_height = self.dummy_height.clone(); async move { Ok(match req { DatabaseRequest::BlockExtendedHeader(BlockID::Height(id)) => { + let mut id = usize::try_from(id).unwrap(); + if let Some(dummy_height) = dummy_height { + let block_len = blocks.read().unwrap().len(); + + id -= dummy_height - block_len; + } + DatabaseResponse::BlockExtendedHeader( blocks .read() .unwrap() - .get(usize::try_from(id).unwrap()) + .get(id) .copied() .map(Into::into) .ok_or("block not in database!")?, @@ -154,20 +164,33 @@ impl Service for DummyDatabase { DatabaseResponse::BlockHash(hash) } DatabaseRequest::BlockExtendedHeaderInRange(range) => { + let mut end = usize::try_from(range.end).unwrap(); + let mut start = usize::try_from(range.start).unwrap(); + + if let Some(dummy_height) = dummy_height { + let block_len = blocks.read().unwrap().len(); + + end -= dummy_height - block_len; + start -= dummy_height - block_len; + } + DatabaseResponse::BlockExtendedHeaderInRange( blocks .read() .unwrap() .iter() - .take(usize::try_from(range.end).unwrap()) - .skip(usize::try_from(range.start).unwrap()) + .take(end) + .skip(start) .copied() .map(Into::into) .collect(), ) } DatabaseRequest::ChainHeight => { - let height = u64::try_from(blocks.read().unwrap().len()).unwrap(); + let height: u64 = dummy_height + .unwrap_or(blocks.read().unwrap().len()) + .try_into() + .unwrap(); let mut top_hash = [0; 32]; top_hash[0..8].copy_from_slice(&height.to_le_bytes());