From fefb61152ea94433d3298d506ac12c803a69bc70 Mon Sep 17 00:00:00 2001 From: Paolo Tricerri Date: Wed, 9 Apr 2025 15:01:59 +0000 Subject: [PATCH 1/2] OpenRNG 25.04 See CHANGELOG.md for a detailed list of new available features, bug fixes, and performance improvements. The IMPLEMENTATION_STATUS.md file has been updated to reflect the current list of implemented and non-implemented functions. Documentation on how to build and install OpenRNG is available in README.md --- CHANGELOG.md | 33 +- CMakeLists.txt | 2 +- IMPLEMENTATION_STATUS.md | 121 +- SECURITY.md | 80 + THIRD_PARTY.md | 231 +- bench/include/bench.hpp | 5 +- bench/include/defines.hpp | 3 + bench/scripts/benchmarks.py | 12 +- bench/scripts/distributions.json | 7 + bench/scripts/generate_bench.py | 26 +- docs/Doxyfile.in | 2 +- docs/frontmatter.md | 9 +- docs/rng-introduction.md | 318 +- include/openrng.h | 770 ++- src/CMakeLists.txt | 4 +- src/aarch64.cmake | 10 + src/generic/distributions/gaussianmv.hpp | 49 + .../distributions/kernels/gaussianmv.hpp | 98 + src/generic/distributions/uniform.hpp | 4 +- src/generic/generator/ars5.cpp | 44 + src/generic/generator/ars5.hpp | 34 + src/generic/generator/copyable_generator.hpp | 2 +- src/generic/generator/generator.cpp | 28 +- src/generic/generator/generator.hpp | 14 +- src/generic/generator/mcg31m1.hpp | 4 +- src/generic/generator/mcg59.cpp | 5 - src/generic/generator/mcg59.hpp | 7 +- src/generic/generator/mrg32k3a.hpp | 4 +- src/generic/generator/mt19937.cpp | 49 +- src/generic/generator/mt19937.hpp | 6 +- src/generic/generator/mt2203.cpp | 82 + src/generic/generator/mt2203.hpp | 46 + src/generic/generator/mt2203_params.cpp | 6038 +++++++++++++++++ src/generic/generator/mt2203_params.hpp | 25 + src/generic/generator/mt_initialization.hpp | 55 + src/generic/generator/nondeterministic.hpp | 4 +- src/generic/generator/philox4x3210.cpp | 108 +- src/generic/generator/philox4x3210.hpp | 44 +- .../quad_counter_based_generator.hpp | 110 + src/generic/generator/r250.hpp | 6 +- src/generic/generator/sfmt19937.cpp | 79 +- src/generic/generator/sfmt19937.hpp | 6 +- src/generic/generator/sobol.hpp | 4 +- src/math/util.hpp | 10 +- src/refng/c_api.cpp | 61 +- src/utils/ars.hpp | 149 + src/utils/mt_skip_ahead.hpp | 198 +- src/utils/mt_skip_ahead_data.hpp | 6013 ++++++++++++++-- src/utils/ring_buffer.hpp | 12 + src/utils/uint128.hpp | 14 + src/vsl.cmake | 9 +- src/vsl/aarch64/cpu_features.cpp | 5 + .../distributions/kernels/neon/box_muller.hpp | 55 + .../distributions/kernels/neon/gaussianmv.hpp | 106 + .../distributions/kernels/neon/laplace.hpp | 2 +- .../kernels/optimised_kernels.hpp | 2 + .../kernels/sve/gaussian_icdf.cpp | 8 +- src/vsl/aarch64/generator/aes/ars5_aes.cpp | 48 + src/vsl/aarch64/generator/neon/ars5_neon.cpp | 17 + src/vsl/aarch64/generator/neon/ars5_neon.hpp | 32 + .../aarch64/generator/neon/ars5_neon_impl.hpp | 47 + .../aarch64/generator/neon/mcg31m1_neon.hpp | 4 +- src/vsl/aarch64/generator/neon/mcg59_neon.cpp | 5 - src/vsl/aarch64/generator/neon/mcg59_neon.hpp | 5 +- .../aarch64/generator/neon/mrg32k3a_neon.hpp | 4 +- .../aarch64/generator/neon/mt19937_neon.hpp | 14 +- .../generator/neon/mt19937_neon_impl.hpp | 89 +- .../aarch64/generator/neon/mt2203_neon.cpp | 12 + .../aarch64/generator/neon/mt2203_neon.hpp | 45 + .../generator/neon/mt2203_neon_impl.hpp | 347 + .../generator/neon/philox4x3210_neon.hpp | 36 +- .../generator/neon/philox4x3210_neon_impl.hpp | 176 +- .../quad_counter_based_generator_neon.hpp | 167 + .../aarch64/generator/neon/sfmt19937_neon.hpp | 12 +- .../generator/neon/sfmt19937_neon_impl.hpp | 138 +- .../generator/optimised_generators.hpp | 4 +- .../aarch64/generator/sha3/mt2203_sha3.cpp | 12 + .../generator/trng/nondeterministic_trng.cpp | 5 - .../generator/trng/nondeterministic_trng.hpp | 7 +- src/vsl/aarch64/utils/choose_generator.hpp | 4 + src/vsl/aarch64/utils/cpu_features.hpp | 6 +- src/vsl/c_api.cpp | 59 +- .../generator/trng/nondeterministic_trng.cpp | 5 - .../generator/trng/nondeterministic_trng.hpp | 1 - test/CMakeLists.txt | 7 + test/distributions/gaussian.cpp | 7 +- test/distributions/gaussianmv.cpp | 374 + test/distributions/uniform.cpp | 118 +- test/services/copy_stream_state.cpp | 2 +- test/services/mt2203.cpp | 118 + test/services/new_stream.cpp | 7 +- test/services/skip_ahead.cpp | 6 - test/services/sobol.cpp | 220 +- test/utils/distribution_templates.hpp | 16 + test/utils/names_map.hpp | 8 +- tools/copyright_header/copyright_header.py | 33 +- tools/create_api/create_api_from_header.py | 137 + tools/create_api/create_link_test.py | 12 +- tools/create_api/openrng.h.json | 1511 +++++ .../create_support_defines.py | 12 +- tools/create_support_defines/generators.json | 52 +- 101 files changed, 17238 insertions(+), 1935 deletions(-) create mode 100644 SECURITY.md create mode 100644 src/generic/distributions/gaussianmv.hpp create mode 100644 src/generic/distributions/kernels/gaussianmv.hpp create mode 100644 src/generic/generator/ars5.cpp create mode 100644 src/generic/generator/ars5.hpp create mode 100644 src/generic/generator/mt2203.cpp create mode 100644 src/generic/generator/mt2203.hpp create mode 100644 src/generic/generator/mt2203_params.cpp create mode 100644 src/generic/generator/mt2203_params.hpp create mode 100644 src/generic/generator/mt_initialization.hpp create mode 100644 src/generic/generator/quad_counter_based_generator.hpp create mode 100644 src/utils/ars.hpp create mode 100644 src/vsl/aarch64/distributions/kernels/neon/box_muller.hpp create mode 100644 src/vsl/aarch64/distributions/kernels/neon/gaussianmv.hpp create mode 100644 src/vsl/aarch64/generator/aes/ars5_aes.cpp create mode 100644 src/vsl/aarch64/generator/neon/ars5_neon.cpp create mode 100644 src/vsl/aarch64/generator/neon/ars5_neon.hpp create mode 100644 src/vsl/aarch64/generator/neon/ars5_neon_impl.hpp create mode 100644 src/vsl/aarch64/generator/neon/mt2203_neon.cpp create mode 100644 src/vsl/aarch64/generator/neon/mt2203_neon.hpp create mode 100644 src/vsl/aarch64/generator/neon/mt2203_neon_impl.hpp create mode 100644 src/vsl/aarch64/generator/neon/quad_counter_based_generator_neon.hpp create mode 100644 src/vsl/aarch64/generator/sha3/mt2203_sha3.cpp create mode 100644 test/distributions/gaussianmv.cpp create mode 100644 test/services/mt2203.cpp create mode 100755 tools/create_api/create_api_from_header.py create mode 100644 tools/create_api/openrng.h.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 7593f16..102b2aa 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,6 @@ All notable changes to this project will be documented in this file. - ## Unreleased ### Added @@ -20,6 +19,38 @@ All notable changes to this project will be documented in this file. ### Security +## 25.04 + +### Added + +#### Generators: + - ARS5, MT2203. + Both generators have a reference implementation and Neon-optimized versions. + +#### Distributions: + - GaussianMV, both reference implementation and Neon-optimized version. + +### Performance + - The performance of the SFMT19937 generator has been improved. + +### Changed + - [SOVERSION](https://cmake.org/cmake/help/latest/prop_tgt/VERSION.html) has + been changed as a consequence of introducing the MT2203 generator. + +### Fixed + +#### Generators: + - Double precision PHILOX4X32X10. + +#### Distributions + - Discrete uniform distribution over an interval `[a,b)`, with both `a` and + `b` integer values and `a< 0`. + +### Security + - Added an explicit note to explain that our generators should not be used for + cryptographic purposes as they are not cryptographically secure. + + ## 24.10 ### Added diff --git a/CMakeLists.txt b/CMakeLists.txt index c9727f3..52d7419 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,5 +1,5 @@ cmake_minimum_required(VERSION 3.15) -project(rng VERSION 24.04 LANGUAGES C CXX) +project(rng VERSION 25.04 LANGUAGES C CXX) include(CTest) # Set build type to Release if not specified. diff --git a/IMPLEMENTATION_STATUS.md b/IMPLEMENTATION_STATUS.md index 310c020..8c215b2 100644 --- a/IMPLEMENTATION_STATUS.md +++ b/IMPLEMENTATION_STATUS.md @@ -3,68 +3,59 @@ This file lists the current implementation status of each generator and distribution defined in the API. -### Implemented - -#### Generators - -The following generators are implemented in this version of OpenRNG: - - - MCG31 - - MCG59 - - MRG32K3A - - MT19937 - - NONDETERM - - PHILOX4X32X10 - - R250 - - SFMT19937 - - SOBOL - -#### Distributions - -The following distributions are implemented in this version of OpenRNG: - - - Bernoulli - - Binomial - - Cauchy - - Exponential - - Gaussian - - Geometric - - Gumbel - - Laplace - - Lognormal - - Poisson - - Rayleigh - - Uniform - - Uniform - - UniformBits - - UniformBits32 - - UniformBits64 - - Weibull - - -### Not Implemented - -#### Generators - -The following generators are _not_ implemented in this version of OpenRNG: - - - WH - - NIEDERR - - MT2203 - - IABSTRACT - - DABSTRACT - - SABSTRACT - - ARS5 - -#### Distributions - -The following distributions are _not_ implemented in this version of OpenRNG: - - - Beta - - ChiSquare - - Gamma - - GaussianMV - - Hypergeometric - - Multinomial - - Negbinomial - - PoissonV \ No newline at end of file +### Generators + +The list of available generators in the API is: + +| Generator | Implementation status | +| :--------------- | :---------------------- | +| MCG31m1 | Implemented | +| MCG59 | Implemented | +| MRG32K3A | Implemented | +| MT19937 | Implemented | +| SFMT19937 | Implemented | +| MT2203 | Implemented | +| R250 | Implemented | +| PHILOX4x32x10 | Implemented | +| ARS5 | Implemented | +| SOBOL | Implemented | +| Nondeterministic | Implemented | +| WH | Not implemented | +| NIEDERR | Not implemented | +| ABSTRACT | Not implemented | + +All generators can produce random number in both single and double precision. + +### Distributions + +The available distributions in the API, both continuous and discrete, are: + +| Distribution | Implementation status | +| :-----------------| :---------------------- | +| Uniform | Implemented | +| Gaussian | Implemented | +| GaussianMV | Implemented | +| Exponential | Implemented | +| Laplace | Implemented | +| Weibull | Implemented | +| Cauchy | Implemented | +| Rayleigh | Implemented | +| Lognormal | Implemented | +| Gumbel | Implemented | +| Uniform (int) | Implemented | +| UniformBits32 | Implemented | +| UniformBits64 | Implemented | +| Bernoulli | Implemented | +| Geometric | Implemented | +| Binomial | Implemented | +| Poisson | Implemented | +| Beta | Not Implemented | +| Chi-Square | Not Implemented | +| Gamma | Not Implemented | +| Hypergeometric | Not Implemented | +| Multinomial | Not Implemented | +| Negative binomial | Not Implemented | +| PoissonV | Not Implemented | + +All continuous distributions can produce values in single or double precisions +while the discrete distributions can only return integer values. \ No newline at end of file diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000..c50c8ec --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,80 @@ +# Reporting vulnerabilities + +Arm takes security issues seriously and welcomes feedback from researchers and +the security community in order to improve the security of its products and +services. We operate a coordinated disclosure policy for disclosing +vulnerabilities and other security issues. + +Security issues can be complex and one single timescale doesn't fit all +circumstances. We will make best endeavours to inform you when we expect +security notifications and fixes to be available and facilitate coordinated +disclosure when notifications and patches/mitigations are available. + +## Report + +For all security issues, contact Arm by email at [psirt@arm.com](mailto:psirt@arm.com). + +## Secure submission using PGP + +We support and encourage secure submission of vulnerability reports using PGP, +using the key below. If you would like replies to be encrypted, please provide +your own public key through a secure mechanism. + +``` +-----BEGIN PGP PUBLIC KEY BLOCK----- +Comment: CB33 9CE6 994B C71F 2430 9E59 6223 980B 410D E67E +Comment: Arm PSIRT + +xsFNBGXKO/4BEADR0bGtT8vZwLM+8b5bgCI7lf4hMctfVNFR4SuMd792GVUb/iwc +PXAbyuHkY1Qi8PzSmrkTEop+p+lXloI9G6jT2+OpVJ7d38b6LpMVZ4rhaQQEAp6p +sChTZfv4f1I/10kGpYQGOQB71GORwbPKr7QUv3XWCNNjkBFFTrXO1XdqkkVrlGo6 +27RP3r5LjYfEgd9eO7rfgYiuRfozTNrxyJPM96Miq1N/PISPmxk4v/5/dkUX43dW +UeUajOxrYqakABImiP4RNWicKBR8wJpFxKtxG/29KB1SHOaYxmNaPtED9uAWyHUL +WYYgh0p1XhfRX48tnGS41RZEvnXvZdbakfvbK78TVJdiLzPstjeTV664zH4EOHvM +mi8YlIH16+uk4RqQ163eVvA52bCVU1YUDg1AhwrSDBse+brJ6qIEa7W8oqsM+dc3 +tw8eZn3K/ClAvYjEcfXpa8rQYa09VaIgCSMi61VGl2oPmO1AuMx7Osqe8Pb6fV3P ++lWgLRR10GciIlsYm9m0+D8Hotr9JEsmzXfJhw02LLzvRQUDMWY7/1X+arSboL+R +z95uEf8EUzh330NveTHwYA4KCvJvO5vSPj/0R+7bs/4dfXieWWMwQqEZC/WBOhyR +756rzN/JdQpFRl5Z5hwWByRndSbqCuSFyTw2rXK2ju34eCwveUo94CDQ8wARAQAB +zRlBcm0gUFNJUlQgPHBzaXJ0QGFybS5jb20+wsGUBBMBCAA+FiEEyzOc5plLxx8k +MJ5ZYiOYC0EN5n4FAmXKO/4CGwMFCQeGH1wFCwkIBwIGFQoJCAsCBBYCAwECHgEC +F4AACgkQYiOYC0EN5n5VUA//QU8Gs+AywtWV5T0iin9uN5crs/MvEDkDSBOEcc9A +g9tevjw13Ix8eyiG7dfgbzNOhhAiFiYxzyi7o6guPl1K1o1Mcfs9r/f8e3w56XDP +7C9zqE+eid0cEDOvYzclMaNxwKnRntMKsmF2SG9p4OQxSRxO2RzXNFP7yVCotkDS +TYS3ib9mdCrZCTcwEmYEWoJemS2AzV3+8XUR14m0WS66Pry3FICl6y7p8RslStd8 +BQJW7PQJTdAkZTcs5zPyjWq9+FBM/NGNExAqYwNzscKj+p1SHgaLT/xKSbetIKgN +6zRbfiFA+nZazr3OQNeecYImbUQUkPfWj2qwkFgyOG9pmM8UQ0CksvDHlKeHlMh2 +KPVkSrkavADrz1/PpqF10a5Kcip8ye0puv///rZfbysW3h2WGb6ZuiY5+uevpuox +ngCDojHfx3QeOUn5YTRs2M9LSQ6wfG0BtQjEP+cEo9r0+pY50spq1FouyKCFe2hT +gHZZ3QBP3m5Cywyz0Oj+C1XRuzI/lxTNPTFz8VjBQkotQZpSSPjyN3dvksbHdxpa +rR0KWVLZdvTFKBJpDr5weC5MUyC7mGvE/NNcxGIbGFfbDVhNyE9g6mUgmWIyV142 +SQzOARf/V1CK3La2ECFMOe5j3hMlrvRgCihqYFqrtKKOhVL71ipWLqfvGMXVn+uv +/G3OwU0EZco7/gEQAL7DbxhUWcosRQ0e9D03PJx38ybkRlP3dqxYZzB+MBANrHX6 +1V4tcDOXqTuqt3DPA0VDybQBuG0G8qoim8Ibs0Hu4kjI3sNl83v45jv4kGNRPoeo +26kOucgi21Mki5pe12vuAl4PfT5WfPvW5ADwPNKnMuEH6SaeDYcojMB2h6wIBZKi +GkCGPNZsN1+bv7QUJfEAJvbWaqMAm0/AEacqEq3UBbq/JX+i30Yi0bBHzn1rKaeH +5rzjSqmlv4NQcdlOaUkc79B0U/FhuF9gQdxtS6FRgfvljP9RgWQan0qW+4mL0MQz ++kwIlbYVb00bNxXEs7xrkAvbA3+y1Kxn35vWTdD8N8uRYLdCzEJ0KtMSKWHzgOiM +7Q1G0eTfyZ1LYg2MlEMwffkSbxnTgKy2QQ9MUH9FrKcICoGK+2x0t9h5lAZ/6Mu/ +BLORIn/wvkL4alNJ0xCzWgX8VaAzzbscaOBMlLjTzEpYpzpAlZpNBwU7SfQ5Go+n +lVkeWlgD4nrB9nSQxK8uxsOigEz7cDLTS3zHXLwvFmIdl6AvbUsohhorN5JgKVjm +2O/TsPtB2EVZF1m0Ep6uRuuCNmUk2+062KIrWiezOFzds/CUpi1yi+zj4SmbGwVK +xCoVqsinKXhi4QzGWyWdgE77qCFLeJWeohxGO16WJWE3t2+I/Uz+Pdsu2DQ3ABEB +AAHCwXwEGAEIACYWIQTLM5zmmUvHHyQwnlliI5gLQQ3mfgUCZco7/gIbDAUJB4Yf +XAAKCRBiI5gLQQ3mflnMEADIKeO5EjDPjAN7Gp4TFtoRz3NMe/37HrVIVdS+llBi +n5x2s7wQ3EIBTEuANFpXDDuRP+EwerIlBShI6lr/52X7DCtJy7tb1KcwWXsmuYG/ +wncSUjNSmI+E0SFd4WJWyBJ6nqsACgvHw8aOC4mYa82LBbr7fd5a9zXLvELwwJQW +pvsevCXA3P+Jo8Rb7Xx5mNW55Y1dzXAnGm5GhVvsRHyv2vyDrI4sC3a2xxGvypqq +D2J6ysZkzk8+sRLr0Ur1JFBFb1zl3TLB5QbTev+GRg/0tCM6IrS9CH0UHgA+AXSg +XBKt9IkIKhv23EPTh4tAq3ENAM56Wenyi8bs0NsM8aT7c0WlHCpj6az6SNpi3X5t +5r1hgGOFH5R9Sw/ICNATSRo7ME59v0mDMn2ph7W9qHA/S8OrsVW44Xf3MiqeiYtf +5BESTOyr48xKOCAbEABt40IJxsZkhREtf+6wywQ5gRQGK6LphsPNS0qsHG9nFaFE +kvl2L7ER+qJMjzrvkYH98FJVeClzmZun+6pgbpk5sBSHqzi3WTd/Pb37oS/SRSNJ +thstK7gKyYdzHEHFVt/OAWkiPlysZZcfRawivSpoIfHcA04ZvT87tDstXPWfG252 +HieKA5hpCmpUd2NuSNhcYXjpMNOUEVUq27wcdXc6JWFRJ8oTEfGxcKrT3s0WcPmJ +9g== +=tP9E +-----END PGP PUBLIC KEY BLOCK----- +``` + +For more information visit diff --git a/THIRD_PARTY.md b/THIRD_PARTY.md index bd2acbd..6945024 100644 --- a/THIRD_PARTY.md +++ b/THIRD_PARTY.md @@ -42,7 +42,7 @@ Copyright(s): Refer to Sources: ### oneMKL RNG API Name: oneMKL RNG API - 2024-1\ -Summary: The RNG component of Intel's Vector Statistics Library.\ +Summary: The API for the RNG component of Intel's Vector Statistics Library.\ Home-page: https://www.intel.com/content/www/us/en/docs/onemkl/developer-reference-c/2024-0\ License(s): CC-BY-4.0 (https://creativecommons.org/licenses/by/4.0/). Copyright(s): 2024 Intel Corporation @@ -52,8 +52,10 @@ Copyright(s): 2024 Intel Corporation ### Optimized Routines ``` -Copyright (c) 1999-2019, Arm Limited. (for optimized-routines) -Copyright (c) 2013-2018 Niels Lohmann. (for JSON for Modern C++ ) +MIT License +----------- + +Copyright (c) 1999-2022, Arm Limited. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -72,6 +74,229 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + + +Apache-2.0 WITH LLVM-exception +------------------------------ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- LLVM Exceptions to the Apache 2.0 License ---- + +As an exception, if, as a result of your compiling your source code, portions +of this Software are embedded into an Object form of such source code, you +may redistribute such embedded portions in such Object form without complying +with the conditions of Sections 4(a), 4(b) and 4(d) of the License. + +In addition, if you combine or link compiled forms of this Software with +software that is licensed under the GPLv2 ("Combined Software") and if a +court of competent jurisdiction determines that the patent provision (Section +3), the indemnity provision (Section 9) or other Section of the License +conflicts with the conditions of the GPLv2, you may retroactively and +prospectively choose to deem waived or otherwise exclude such Section(s) of +the License, but only in their entirety and only with respect to the Combined +Software. ``` ### Mersenne Twister diff --git a/bench/include/bench.hpp b/bench/include/bench.hpp index 4514f36..9335651 100644 --- a/bench/include/bench.hpp +++ b/bench/include/bench.hpp @@ -25,7 +25,7 @@ template auto distribution(int (*func)(openrng_int_t, VSLStreamStatePtr, openrng_int_t, BufType *, Params...), uint64_t niters, int brng, int method, int nelems, - Args &&...args) { + int elemSize, Args &&...args) { VSLStreamStatePtr stream; VSLBRngProperties brngProperties; @@ -44,7 +44,8 @@ auto distribution(int (*func)(openrng_int_t, VSLStreamStatePtr, openrng_int_t, we probably want to update distributions.json and generate_bench.py to adjust the bufferSize specifically only when uniformbits is used. */ - const int bufferSize = brngProperties.WordSize / sizeof(uint32_t) * nelems; + const int bufferSize = + brngProperties.WordSize / sizeof(uint32_t) * nelems * elemSize; std::vector buffer(bufferSize); diff --git a/bench/include/defines.hpp b/bench/include/defines.hpp index 908ec9a..3a90666 100644 --- a/bench/include/defines.hpp +++ b/bench/include/defines.hpp @@ -40,6 +40,9 @@ const std::unordered_map defines = { {"GAUSSIAN_BOXMULLER", VSL_RNG_METHOD_GAUSSIAN_BOXMULLER }, {"GAUSSIAN_BOXMULLER2", VSL_RNG_METHOD_GAUSSIAN_BOXMULLER2 }, {"GAUSSIAN_ICDF", VSL_RNG_METHOD_GAUSSIAN_ICDF }, + {"GAUSSIANMV_BOXMULLER", VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER }, + {"GAUSSIANMV_BOXMULLER2", VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2 }, + {"GAUSSIANMV_ICDF", VSL_RNG_METHOD_GAUSSIANMV_ICDF }, {"EXPONENTIAL_ICDF", VSL_RNG_METHOD_EXPONENTIAL_ICDF }, {"EXPONENTIAL_ICDF_ACCURATE", VSL_RNG_METHOD_EXPONENTIAL_ICDF_ACCURATE}, {"LAPLACE_ICDF", VSL_RNG_METHOD_LAPLACE_ICDF }, diff --git a/bench/scripts/benchmarks.py b/bench/scripts/benchmarks.py index 0d5266b..24663de 100644 --- a/bench/scripts/benchmarks.py +++ b/bench/scripts/benchmarks.py @@ -21,8 +21,10 @@ class DistBenchmark: name: str, dtype: Optional[str], params: List[str], + params_type: List[str] = [], methods: List[str] = [], defaults: list = [], + elem_size: str = "1", ): prefix = {"float": "vs", "double": "vd"}.get(dtype or "", "vi") @@ -30,8 +32,10 @@ class DistBenchmark: self.func = f"{prefix}Rng{name}" self.dtype = dtype self.params = params + self.params_type = dict(zip(params, params_type)) self.methods = methods self.defaults = dict(zip(params, defaults)) + self.elem_size = elem_size @property def fname(self) -> str: @@ -42,13 +46,15 @@ class DistBenchmark: def _discover_benchmarks(dist_json: Path) -> Iterable[DistBenchmark]: dists = json.loads(dist_json.read_text()) for dist_name, dist in dists.items(): + params_type = dist.get("params_type", []) methods = dist.get("supported_methods", []) defaults = dist.get("default_args", []) + elem_size = dist.get("elem_size", "1") if dist["type"] == "continuous": - yield DistBenchmark(dist_name, "float", dist["params"], methods, defaults) - yield DistBenchmark(dist_name, "double", dist["params"], methods, defaults) + yield DistBenchmark(dist_name, "float", dist["params"], params_type, methods, defaults, elem_size) + yield DistBenchmark(dist_name, "double", dist["params"], params_type, methods, defaults, elem_size) else: - yield DistBenchmark(dist_name, None, dist["params"], methods, defaults) + yield DistBenchmark(dist_name, None, dist["params"], params_type, methods, defaults, elem_size) dist_benchmarks = list(_discover_benchmarks(DIST_JSON)) diff --git a/bench/scripts/distributions.json b/bench/scripts/distributions.json index 6489312..b8089b6 100644 --- a/bench/scripts/distributions.json +++ b/bench/scripts/distributions.json @@ -54,6 +54,13 @@ "params": ["a", "sigma"], "supported_methods": ["boxmuller", "boxmuller2", "icdf"] }, + "GaussianMV": { + "type": "continuous", + "params": ["dimen", "mstorage", "a[dimen]", "t[dimen*dimen]"], + "params_type": ["const int", "const int", "dtype", "dtype"], + "supported_methods": ["boxmuller", "boxmuller2", "icdf"], + "elem_size": "dimen" + }, "Exponential": { "type": "continuous", "params": ["alpha", "beta"], diff --git a/bench/scripts/generate_bench.py b/bench/scripts/generate_bench.py index ae3dd26..62ee691 100755 --- a/bench/scripts/generate_bench.py +++ b/bench/scripts/generate_bench.py @@ -9,6 +9,7 @@ import argparse import json +import re import textwrap from pathlib import Path @@ -24,14 +25,23 @@ def generate_cpp(bench): # Parsing of any extra arguments that the distribution expects # NOTE: we currently read these in as doubles, this _may_ change - parse_args = ("\n" + " " * 16).join( - f"const auto {p} = std::stod(argv[{i + common_params}]);" - for i, p in enumerate(bench.params) - ) + param_args = [] + for i, p in enumerate(bench.params): + ptype = bench.params_type.get(p, "const auto") + pval = f"std::stod(argv[{i + common_params}])" + + if re.match("^\w+\[.+\]$", p): + pname, psize = p[:-1].split("[") + param_args.append(f"std::vector<{ptype}> {pname}_vec({psize}, {pval});") + param_args.append(f"{ptype} *{pname} = {pname}_vec.data();") + else: + param_args.append(f"{ptype} {p} = {pval};") + + parse_args = ("\n" + " " * 16).join(param_args) if bench.params: - help_args = " " + " ".join(bench.params) - func_args = ", " + ", ".join(bench.params) + help_args = " " + " ".join(p.split("[")[0] for p in bench.params) + func_args = ", " + ", ".join(p.split("[")[0] for p in bench.params) else: help_args, func_args = "", "" @@ -45,18 +55,20 @@ def generate_cpp(bench): #include #include #include + #include int main(int argc, char* argv[]) {{ if (argc != {num_params}) {{ std::cerr << "usage: " << argv[0] << " brng method niters nelems{help_args}" << std::endl; return EXIT_FAILURE; }} + typedef {bench.dtype or "double"} dtype; const auto brng = openrng::bench::get_define(argv[1]); const auto method = openrng::bench::get_define(argv[2]); const auto niters = std::stoll(argv[3]); const auto nelems = std::stoi(argv[4]); {parse_args} - const auto result = openrng::bench::distribution({bench.func}, niters, brng, method, nelems{func_args}); + const auto result = openrng::bench::distribution({bench.func}, niters, brng, method, nelems, {bench.elem_size}{func_args}); std::cout << result << std::endl; return EXIT_SUCCESS; }} diff --git a/docs/Doxyfile.in b/docs/Doxyfile.in index 5456313..7134ec8 100644 --- a/docs/Doxyfile.in +++ b/docs/Doxyfile.in @@ -38,7 +38,7 @@ PROJECT_NAME = "OpenRNG Library Reference Guide" # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = "24.04" +PROJECT_NUMBER = "0.0" # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a diff --git a/docs/frontmatter.md b/docs/frontmatter.md index 64df1dc..76fbc4a 100644 --- a/docs/frontmatter.md +++ b/docs/frontmatter.md @@ -1,8 +1,9 @@ -# Open Random Number Generation (OpenRNG) Reference Guide +# Open Random Number Generation Reference Guide -Copyright © 2024 Arm Limited (or its affiliates). All rights reserved. +Copyright © 2024-2025 Arm Limited (or its affiliates). All rights reserved. # About this book -The following documentation describes OpenRNG, the random number generator (RNG) -interface provided in \armplref. +The following documentation describes Open Random Number Generation +(OpenRNG), the Random Number Generator (RNG) interface provided in +\armplref. diff --git a/docs/rng-introduction.md b/docs/rng-introduction.md index 9137438..982c527 100644 --- a/docs/rng-introduction.md +++ b/docs/rng-introduction.md @@ -1,179 +1,227 @@ -# An Overview of OpenRNG - -# Introduction to OpenRNG - -OpenRNG is the random number generator (RNG) interface provided in \armplref. -OpenRNG includes the interface to the random number generation part of the -Vector Statistics library (VSL) library developed by Intel(R) and shipped for -x86 processors as part of oneMKL. We are grateful to Intel(R) for having -released this interface, along with their documentation, to us under the CC BY -4.0 license (https://creativecommons.org/licenses/by/4.0/deed.en), allowing us -to develop our own implementation of this functionality for users of Arm-based -systems, enabling software portability between architectures with no code -changes. - -We have endeavoured to ensure that the same generators and initializations are -used as documented in the oneMKL documentation. This means that functions which -return bit sequences are bitwise reproducible between Arm and x86 systems. If an -integer or floating point answer is requested answers may differ as the -precision of various operations is different between the two libraries. - -Note that in this release not all of the random number functions from VSL have -been included. These functions are listed in the documentation as not -implemented. We are intending to fill out this coverage in future releases, and -we are very keen to hear from users who find missing functionality that they -would like us to prioritize, see \feedback. +# An overview of OpenRNG + +\armplref provides a Random Number Generator (RNG) interface called OpenRNG. +OpenRNG includes the interface to the RNG part of the Vector Statistics Library +(VSL) developed by Intel and shipped for x86 processors as part of oneMKL. +Intel have released this interface, with their documentation, to us under the +CC BY 4.0 license (https://creativecommons.org/licenses/by/4.0/deed.en). This +has allowed us to develop our own implementation of this functionality for +Arm-based systems which enables software portability between architectures with +no code changes. + +We try to use the same generators and initializations as documented in the +oneMKL documentation. This means that functions which return bit sequences are +bitwise reproducible between Arm and x86 systems. Functions that return integer +or floating point values might give different answers between Arm and x86 +systems because the accuracy of various operations is different between the +two libraries. + +This release does not include all of the random number functions from VSL. The +documentation lists both the implemented and missing functionalities in the +tables in the next sections. We will improve coverage of the missing functions +in future releases. # Basic Random Number Generators -A basic random number generator (BRNG) is any source of randomness capable of +A Basic Random Number Generator (BRNG) is any source of randomness capable of producing a uniform distribution in the range [0, 1). The inclusion of 0 in the range depends on the generator. Some BRNGs can also generate uniformly -distributed bit streams. OpenRNG supports three types of BRNGs: +distributed bitstreams. OpenRNG supports different types of BRNGs: * Pseudorandom number generators * Quasirandom number generators * Nondeterministic random number generators -See \ref groupBrng for a list of all BRNGs supported by the API. Note that not -all BRNGs supported by the API have been implemented at this time. All -generators that have not been implemented will have a banner in their respective -documentation which says "Not implemented in \armplref". +See \ref groupBrng for a list of all BRNGs supported by the API. This release +does not include all BRNGs supported by the API. All generators that have not +been implemented have a banner in their documentation which says "Not +implemented in \armplref". -# Pseudorandom Number Generators +# Pseudorandom number generators -Pseudorandom number generators (PRNG) are algorithms that generate sequences -which approximate randomness from an initial seed. PRNG sequences are periodic, -but the quality of a PRNG sequence is determined by how closely a subsequence -approximates a nondeterministic source of randomness. There are numerous -statistical tests for PRNGs, and several test suites that implement these tests. -See, for example, https://github.com/umontreal-simul/TestU01-2009. +Pseudorandom Number Generators (PRNG) are algorithms that generate sequences +which approximate randomness from an initial seed. PRNG sequences are periodic. +The quality of a PRNG sequence is determined by how closely a subsequence +approximates a nondeterministic source of randomness. See, for example, the +testsuite https://github.com/umontreal-simul/TestU01-2009 for some statistical +tests for PRNGs. -The following is a list of all PRNGs that have been implemented in \armplref. +The following is a list of all PRNGs that \armplref implements. - * \ref VSL_BRNG_MCG31 - * \ref VSL_BRNG_R250 - * \ref VSL_BRNG_MRG32K3A - * \ref VSL_BRNG_MCG59 - * \ref VSL_BRNG_MT19937 - * \ref VSL_BRNG_SFMT19937 - * \ref VSL_BRNG_NONDETERM - * \ref VSL_BRNG_PHILOX4X32X10 +| Generator | Description | +| :------------ | :------------------------------------------------ | +| MCG31m1 | A 31-bit multiplicative congruential generator | +| MCG59 | A 59-bit multiplicative congruential generator | +| MRG32K3A | Combined multiple recursive generator | +| MT19937 | Mersenne-Twiser generator | +| SFMT19937 | SIMD oriented Fast Mersenne-Twister generator | +| MT2203 | Set of 6024 Mersenne-Twister generators | +| R250 | Generalized feedback shift register generator | +| PHILOX4x32x10 | A Philox counter-based generator | +| ARS5 | An ARS5 counter-based generator | + +All generators produce random number in single or double precision. The following is a list of all PRNGs that exist in the API but have _not_ been -implemented in \armplref. If any of these values are used, the API will return -\ref VSL_ERROR_FEATURE_NOT_IMPLEMENTED. +implemented in \armplref. The API will returns \ref +VSL_ERROR_FEATURE_NOT_IMPLEMENTED is any of these are selected. - * \ref VSL_BRNG_WH - * \ref VSL_BRNG_MT2203 - * \ref VSL_BRNG_IABSTRACT - * \ref VSL_BRNG_DABSTRACT - * \ref VSL_BRNG_SABSTRACT - * \ref VSL_BRNG_ARS5 +| Generator | Description | +| :------------ | :----------------------------------------------------------------- | +| WH | Set of 273 Wichmann-Hill generators | +| ABSTRACT | Abstract source of randomness based on the user-provided settings | -# Quasirandom Number Generators +# Quasirandom number generators -Quasirandom number generators (QRNG) are algorithms that generate sequences of +Quasirandom Number Generators (QRNG) are algorithms that generate sequences of n-dimensional vectors uniformly distributed on n-dimensional hypercubes. For all QRNGs in the API, the seed determines the number of dimensions. Each element of the sequence consists of n-dimensional vectors represented by n consecutive values in the returned buffer. -The following is a list of all QRNGs that have been implemented in \armplref. +The following is a list of all QRNGs that have been implemented in +\armplref. - * \ref VSL_BRNG_SOBOL +| Generator | Description | +| :------------ | :------------------------------------------------------- | +| SOBOL | Up to 40-dimensional low-discrepancy sequences generator | -The following is a list of all QRNGs that exist in the API but have _not_ been -implemented in \armplref. If any of these values are used, the API will return -\ref VSL_ERROR_FEATURE_NOT_IMPLEMENTED. +It returns random numbers in single or double precision. The other +QRNG that exist in the API but has _not_ been implemented in \armplref +is - * \ref VSL_BRNG_NIEDERR +| Generator | Description | +| :------------ | :-------------------------------------------------------- | +| NIEDERR | Up to 318-dimensional low-discrepancy sequences generator | +The API returns \ref VSL_ERROR_FEATURE_NOT_IMPLEMENTED if it is selected. -# Nondeterministic Random Number Generators +# Nondeterministic random number generators -Nondeterministic random number generators are generators that take entropy from -an external source to generate random numbers. Nondeterministic generators are -typically slower than PRNGs and the sequences are not reproducible. +Nondeterministic random number generators take entropy from an external source +to generate random numbers. Nondeterministic generators are typically slower +than PRNGs and the sequences are not reproducible. \armplref implements the only value for nondeterministic generators: - * \ref VSL_BRNG_NONDETERM +| Generator | Description | +| :------------ | :-----------------------------------------------------| +| Nondeterministic | Random generator based on hardware entropy sources | + +It returns random numbers in single or double precision. -# Random Streams +# Random streams -An instance of a BRNG is referred to as a stream. OpenRNG provides service +An instance of a BRNG is referred to as a stream. \armplref provides service functions for creating, initializing, copying, modifying and deleting streams, -see \ref groupService. For example, a stream with the PHILOX4X32X10 generator -and a single seed can be created as follows: +see \ref groupService. For example, you create a stream with the PHILOX4X32X10 +generator and a single seed as follows: VSLStreamStatePtr stream; - int errcode = vslNewStream(&stream, VSL_BRNG_PHILOX4X32X10, 42); + int seed = 42; + int errcode = vslNewStream(&stream, VSL_BRNG_PHILOX4X32X10, seed); -See the \ref pi.c example, for a complete example of creating and using a +See the \ref pi.c example for a complete example of creating and using a stream. # Distributions -OpenRNG can generate random numbers with many common probability distributions, -both discrete and continuous. To access random numbers from the stream, you must -request numbers with a specific distribution, and OpenRNG will advance your -stream in the background. For example, a uniform distribution on [0, 1) can be -generated as follows: +\armplref can generate random numbers with many common probability +distributions, both discrete and continuous. To access random numbers from the +stream, you must request numbers with a specific distribution, and \armplref +advances your stream in the background. For example, you create a uniform +distribution over the interval [0, 1) as follows: float randomNumbers[nRandomNumbers]; + const float a = 0.0f; + const float b = 1.0f; int errcode = vsRngUniform(VSL_RNG_METHOD_UNIFORM_STD, stream, nRandomNumbers, - &randomNumbers, 0, 1); + &randomNumbers, a, b); -This snippet will fill the buffer, `randomNumbers`, with random numbers from a -uniform distribution. On return, the amount your stream has advanced by will be -dependent on the distribution method used. See the \ref pi.c example for a -complete example of generating random numbers with a specified probability -distribution. +This snippet fills the buffer, `randomNumbers`, with random numbers from a +uniform distribution. On return, the amount your stream has advanced by depends +on the distribution method used. See the \ref pi.c example for a complete +example of generating random numbers with a specified probability distribution. # Continuous distributions A continuous distribution is any probability distribution over the reals. All -continuous distributions fill pre-allocated buffers. Continuous distributions -can be requested as either single-precision floating point, `float,` or -double-precision floating point, `double`. The single-precision floating point -version can be identified by the `vsRng` prefix, and the double-precision -floating point version can be identified by the `vdRng` prefix. +continuous distributions fill pre-allocated buffers. You can request continuous +distributions as either single-precision floating point, `float`, or +double-precision floating point, `double`. The `vsRng` prefix identifies the +single-precision floating point version, while the `vdRng` prefix identifies the +double-precision floating point version. + +The following is a list of all continuous distributions available in \armplref. + +| Distribution | Description | +| :----------- | :----------------------------------------- | +| Uniform | Uniform distribution on the interval [a,b) | +| Gaussian | Single variable Gaussian distribution | +| GaussianMV | Multivariate Gaussian distribution | +| Exponential | Exponential distribution | +| Laplace | Laplace distribution | +| Weibull | Weibull distribution | +| Cauchy | Cauchy distribution | +| Rayleigh | Rayleigh distribution | +| Lognormal | Lognormal distribution | +| Gumbel | Gumbel distribution | + +The available continuous distributions are invoked through the following API +functions: -The following is a list of all continuous distributions that have been -implemented in \armplref. - - * \ref vsRngCauchy, \ref vdRngCauchy - * \ref vsRngExponential, \ref vdRngExponential + * \ref vsRngUniform, \ref vdRngUniform * \ref vsRngGaussian, \ref vdRngGaussian - * \ref vsRngGumbel, \ref vdRngGumbel + * \ref vsRngGaussianMV, \ref vdRngGaussianMV + * \ref vsRngExponential, \ref vdRngExponential * \ref vsRngLaplace, \ref vdRngLaplace - * \ref vsRngLognormal, \ref vdRngLognormal - * \ref vsRngRayleigh, \ref vdRngRayleigh - * \ref vsRngUniform, \ref vdRngUniform * \ref vsRngWeibull, \ref vdRngWeibull + * \ref vsRngCauchy, \ref vdRngCauchy + * \ref vsRngRayleigh, \ref vdRngRayleigh + * \ref vsRngLognormal, \ref vdRngLognormal + * \ref vsRngGumbel, \ref vdRngGumbel + +The following is a list of all continuous distributions that exist in +the API but have _not_ been implemented in \armplref. + +| Distribution | Description | +| :---------------- | :------------------------------ | +| Beta | Beta distribution | +| Chi-Square | Chi-Square distribution | +| Gamma | Gamma distribution | -The following is a list of all continuous distributions that exist in the API -but have _not_ been implemented in \armplref. If any of these methods are used, -they will return \ref VSL_ERROR_FEATURE_NOT_IMPLEMENTED. +They correspond to the following API functions: * \ref vsRngBeta, \ref vdRngBeta * \ref vsRngChiSquare, \ref vdRngChiSquare * \ref vsRngGamma, \ref vdRngGamma - * \ref vsRngGaussianMV, \ref vdRngGaussianMV + +These methods return \ref VSL_ERROR_FEATURE_NOT_IMPLEMENTED. # Discrete distributions -A discrete distribution is any probability distribution that's confined to the -integers. All discrete distributions fill pre-allocated buffers of type `int` -and their methods can be identified by the `viRng` prefix. +A discrete distribution is any probability distribution that is confined to the +integers. The `viRng` prefix identifies all methods for discrete distributions +which fill pre-allocated buffers of type `int`. -The following is a list of all discrete distributions that have been implemented +The following is a list of all discrete distributions that are available in \armplref. +| Distribution | Description | +| :----------- | :------------------------------------------ | +| Bernoulli | Bernoulli distribution | +| Binomial | Binomial distribution | +| Geometric | Geometric distribution | +| Poisson | Poisson distribution | +| Uniform (int)| Uniform distribution on the interval [a,b) | +| UniformBits32| Uniformly distributed bits in 32-bit chunks | +| UniformBits64| Uniformly distributed bits in 64-bit chunks | + +These distributions correspond to the following API functions: + * \ref viRngBernoulli * \ref viRngBinomial * \ref viRngGeometric @@ -184,31 +232,44 @@ in \armplref. * \ref viRngUniformBits64 The following is a list of all discrete distributions that exist in the API but -have _not_ been implemented in \armplref. If any of these methods are used, they -will return \ref VSL_ERROR_FEATURE_NOT_IMPLEMENTED. +have _not_ been implemented in \armplref. + +| Distribution | Description | +| :---------------- | :------------------------------------- | +| Hypergeometric | Hypergeometric distribution | +| Multinomial | Multinomial distribution | +| Negative binomial | Negative binomial distribution | +| PoissonV | Poisson distribution with varying mean | + +These distributions correspond to the following API functions: * \ref viRngHypergeometric * \ref viRngMultinomial * \ref viRngNegbinomial * \ref viRngPoissonV -# Bit streams +The API returns \ref VSL_ERROR_FEATURE_NOT_IMPLEMENTED if any of these functions +is selected. + +# Bitstreams -OpenRNG supports 3 methods for generating bit streams: \ref viRngUniformBits, -\ref viRngUniformBits32 and \ref viRngUniformBits64. +\armplref supports the following methods for generating bitstreams: + + * \ref viRngUniformBits + * \ref viRngUniformBits32 + * \ref viRngUniformBits64 \ref viRngUniformBits makes no guarantee of the uniformity of the bit sequences -returned; it reinterprets the integer sequence of each generator as a bit -sequence. For some generators, the integer sequence can contain bits that will -always be 0, or a collection of bits may exhibit periodic behavior over very +returned. It reinterprets the integer sequence of each generator as a bit +sequence. For some generators, the integer sequence can contain bits that are +always 0, or a collection of bits might exhibit periodic behavior over very short intervals. The length of the buffer returned is dependent on the generator's word size (\ref vslGetBrngProperties). -\ref viRngUniformBits32 and \ref viRngUniformBits64 guarantee that the bits will -have a uniform distribution. In the 32 bit variant, each element needs to be -able to hold 32 bits, and in the 64 bit variant, every element needs to be able -to hold 64 bits. They have almost identical output, there are very few reasons -to chose one over the other. +\ref viRngUniformBits32 and \ref viRngUniformBits64 guarantee that the bits have +a uniform distribution. In the 32-bit variant, each element of the buffer needs +to be able to hold 32 bits, and in the 64-bit variant, every element of the +buffer needs to be able to hold 64 bits. # Error handling @@ -217,17 +278,22 @@ All methods return a negative value on failure. See \ref groupError for a list of error code values and what each one means. -# Thread Safety +# Thread safety -OpenRNG is thread-safe, provided multiple threads don't try to access the same -stream concurrently. In order to scale to multiple threads, OpenRNG provides +\armplref is thread-safe, provided multiple threads do not try to access the +same stream concurrently. To scale to multiple threads, \armplref provides convenience methods for copying streams and generating disjoint subsequences. See \ref vslCopyStream, \ref vslLeapfrogStream and \ref vslSkipAheadStream. See the \ref skipahead.c example for an example of generating disjoint sequences. -# API Access +# API access The API definitions are exposed via `openrng.h`. For convenience `armpl.h` also -includes `openrng.h`. See \accesspl for -instructions on how to build and link with \armplref. \ No newline at end of file +includes `openrng.h`. See \accesspl for instructions on how to build and link +with \armplref. + +# Cryptographic purposes + +The random number generators implemented in OpenRNG should not be used for +cryptographic purposes as they are not cryptographically secure. diff --git a/include/openrng.h b/include/openrng.h index 4bd90be..fe28c65 100644 --- a/include/openrng.h +++ b/include/openrng.h @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -18,7 +18,7 @@ extern "C" { * * This example demonstrates usage of OpenRNG to fill a buffer with uniformly * distributed random numbers. It uses \ref vslNewStream, \ref vsRngUniform and - * \ref vslDeleteStream. The behaviour of the example is documented inline. + * \ref vslDeleteStream. The behavior of the example is documented inline. * * Example output: * \code @@ -30,7 +30,7 @@ extern "C" { /** * \example skipahead.c * - * This example demonstrates how to use the 'block-skipping' method to improve + * This example shows how to use the block-skipping method to improve * performance when parallelism is available. * * Example output: @@ -44,11 +44,14 @@ extern "C" { /** * \example sobol_joe_kuo.cpp * - * This example demonstrates how to process the direction numbers supplied by S. + * This example shows how to process the direction numbers supplied by S. * Joe and F. Y. Kuo (available at https://web.maths.unsw.edu.au/~fkuo/sobol/), - * and organise the input array such that they can be used with \ref - * VSL_BRNG_SOBOL. It expects three arguments: a path to the list of numbers, - * the number of dimensions and the number of elements to generate. + * and organise the input array so that they can be used with \ref + * VSL_BRNG_SOBOL. The code expects three arguments: + * + * - a path to the list of numbers + * - the number of dimensions + * - the number of elements to generate * * Example output: * \code{.sh} @@ -69,8 +72,8 @@ extern "C" { /** * \defgroup groupService Service functions * - * This section documents all service function. The service functions are used - * for creating, copying, querying, modifying and deleting instances of basic + * This section lists all service functions. The service functions are used for + * creating, copying, querying, modifying, and deleting instances of basic * random number generators. */ @@ -93,9 +96,9 @@ extern "C" { * (BRNG) available in OpenRNG. A BRNG is any source of randomness that can * produce uniform distributions on `[0, 1)`. OpenRNG supports 3 types of BRNG * - * * Pseudorandom number generators - * * Quasirandom number generators - * * Nondeterministic random number generators + * - Pseudorandom number generators + * - Quasirandom number generators + * - Nondeterministic random number generators * * Each BRNG is identified by a preprocessor define, of the form * `VSL_BRNG_` and set as a unique integer value. To use a BRNG, you need @@ -114,24 +117,33 @@ extern "C" { /** * \defgroup groupDistMethods Distribution methods * - * When a distribution is selected, one can further specify which method will be + * When a distribution is selected, you can further specify which method is * used to generate the particular distribution. * - * The distribution methods can be divided into two categories; fast, and - * accurate mode. Accurate mode can be identified by the `_ACCURATE` suffix; - * fast mode has no suffix. + * The distribution methods can be divided into two categories: + * + * - accurate mode, identified by the `_ACCURATE` suffix + * - fast mode, which does not require any suffix * - * Most distributions support an inverse cumulative distribution method (ICDF). - * The ICDF works by generating a number in the range [0, 1) and mapping it on - * to the cumulative distribution function. In some cases, the ICDF method can't - * be computed efficiently, in these cases accept-reject methods can be applied, - * or a method more specific to the distribution is used. + * Most distributions support an Inverse Cumulative Distribution Function + * (ICDF) method. The ICDF method generates a number in the range [0, 1) and + * maps it on to the cumulative distribution function for that distribution. + * In some cases, the ICDF method cannot be computed efficiently. In these + * cases accept-reject methods are applied, or a method more specific to the + * distribution is used. + */ + +/** + * \defgroup groupMatrixStorage Matrix storage schemes + * + * The matrix storage scheme used for the lower triangle matrix \f$T\f$ in the + * multivariate Gaussian distribution. */ /** * \defgroup groupTypes Data types. * - * The following section documents all data types provided by OpenRNG. + * The following section describes all data types provided by OpenRNG. */ /** @@ -283,52 +295,56 @@ extern "C" { /** * \ingroup groupQRNG * - * Second element of `params` argument to \ref vslNewStreamEx to indicate custom - * direction numbers and/or primitive polynomials will be used. + * Second element of `params` argument to \ref vslNewStreamEx indicates custom + * direction numbers and/or primitive polynomials. */ #define VSL_USER_QRNG_INITIAL_VALUES 0x1 /** * \ingroup groupQRNG * - * Pass (possibly combined with other flags using `|`) as third element of - * `params` array to \ref vslNewStreamEx to indicate user-defined primitive - * polynomials will be used. If \ref VSL_USER_INIT_DIRECTION_NUMBERS is not also - * set, the number of dimensions must be less than 41. + * \ref VSL_USER_PRIMITIVE_POLYMS can be passed, possibly combined with other + * flags using `|`, as third element of `params` array to \ref vslNewStreamEx to + * indicate the user-defined primitive polynomials to use. If \ref + * VSL_USER_INIT_DIRECTION_NUMBERS is not also set, the number of dimensions + * must be less than 41. */ #define VSL_USER_PRIMITIVE_POLYMS 0x1 /** * \ingroup groupQRNG * - * Pass (possibly combined with other flags using `|`) as third element of - * `params` array to \ref vslNewStreamEx to indicate user-defined initial - * direction numbers will be used. If \ref VSL_USER_PRIMITIVE_POLYMS is not also - * set, the number of dimensions must be less than 41. Use \ref - * VSL_USER_DIRECTION_NUMBERS to pass the full set of 32 direction numbers per - * dimension instead of relying on polynomials to generate them. + * \ref VSL_USER_INIT_DIRECTION_NUMBERS can be passed, possibly combined with + * other flags using `|`, as third element of `params` array to \ref + * vslNewStreamEx to indicate the user-defined initial direction numbers to use. + * If \ref VSL_USER_PRIMITIVE_POLYMS is not also set, the number of dimensions + * must be less than 41. Use \ref VSL_USER_DIRECTION_NUMBERS to pass the full + * set of 32 direction numbers per dimension instead of relying on polynomials + * to generate them. */ #define VSL_USER_INIT_DIRECTION_NUMBERS 0x2 /** * \ingroup groupQRNG * - * Pass (possibly combined with other flags using `|`) as third element of - * `params` array to \ref vslNewStreamEx to indicate user-defined direction - * numbers will be used. \ref VSL_USER_PRIMITIVE_POLYMS will be ignored if set - - * params array must contain the full set of 32 direction numbers per dimension. + * \ref VSL_USER_DIRECTION_NUMBERS can be passed, possibly combined with other + * flags using `|`, as third element of `params` array to \ref vslNewStreamEx to + * indicate the user-defined direction numbers to use. \ref + * VSL_USER_PRIMITIVE_POLYMS is ignored if set - params array must contain the + * full set of 32 direction numbers per dimension. */ #define VSL_USER_DIRECTION_NUMBERS 0x4 /** * \ingroup groupQRNG * - * Pass (possibly combined with other flags using `|`) as third element of - * `params` array to \ref vslNewStreamEx to indicate that the default values for - * dimension 0 should be overridden by the custom settings. Direction numbers - * for dimension 0 are ordinarily set to the special-case from Bratley & Fox - * 1988. This option is ignored unless both `VSL_USER_INIT_DIRECTION_NUMBERS` - * and `VSL_USER_PRIMITIVE_POLYMS` are set, and is implicit for + * \ref VSL_QRNG_OVERRIDE_1ST_DIM_INIT can be passed, possibly combined with + * other flags using `|`, as third element of `params` array to \ref + * vslNewStreamEx to indicate that the default values for dimension 0 must be + * overridden by the custom settings. Direction numbers for dimension 0 are + * ordinarily set to the special-case from Bratley & Fox 1988. This option is + * ignored unless both `VSL_USER_INIT_DIRECTION_NUMBERS` and + * `VSL_USER_PRIMITIVE_POLYMS` are set, and is implicit for * `VSL_USER_DIRECTION_NUMBERS`. */ #define VSL_QRNG_OVERRIDE_1ST_DIM_INIT 0x8 @@ -438,7 +454,9 @@ extern "C" { * != 0`, otherwise `x[0] = 1`. The subsequent 249 elements are then initialized * according to recurrence relation: * - * \code{.cpp} x[n] = 69069 * x[n - 1]; \endcode + * \code{.cpp} + * x[n] = 69069 * x[n - 1]; + * \endcode * * The elements `x[7 * k + 3]` for `k == 0, 1, ... , 31` are concatenated and * treated as rows in a 32x32 binary matrix. The the under-diagonal bits are set @@ -449,11 +467,11 @@ extern "C" { * * R250 is initialized with vslNewStreamEx using the following scheme: * - * * If `n >= 250`, use the first 250 elements of `params` to initialize the + * - If `n >= 250`, use the first 250 elements of `params` to initialize the * sequence, ignoring any subsequent elements. - * * Otherwise, if n > 0, initialize as for \ref vslNewStream, ignoring all but + * - Otherwise, if n > 0, initialize as for \ref vslNewStream, ignoring all but * the first element of `params`. - * * If n == 0, `x[0]` is set to 1. + * - If n == 0, `x[0]` is set to 1. * * Recurrence relation * =================== @@ -461,7 +479,9 @@ extern "C" { * The first 250 elements are used to seed the generator, but are not included * in the output. Subsequent samples are generated by: * - * \code{.cpp} x[n] = x[n - 147] ^ x[n - 250]; \endcode + * \code{.cpp} + * x[n] = x[n - 147] ^ x[n - 250]; + * \endcode * * Where `^` denotes the XOR operator. * @@ -823,8 +843,8 @@ extern "C" { * * where `v` is a direction number and `Ji` is the index of the * right-most zero bit in `n - 1`, or equivalently the number of - * trailing zeroes in `n`. Note that the sequence is - * multi-dimensional, so `x[n]` may be a vector rather than a single + * trailing zeroes in `n`. The sequence is + * multi-dimensional, so `x[n]` might be a vector rather than a single * integer. In this case, each dimension should have it its own set of * direction numbers. * @@ -860,7 +880,7 @@ extern "C" { * Note that skip-ahead of `n` skips `n` elements, not vectors, i.e. to skip `m` * full vectors it is required to pass `m * d` to \ref vslSkipAheadStream, where * `d` is the number of dimensions. If the number of skips is not a multiple of - * `d`, a subsequent sample will begin part-way through the vector. + * `d`, a subsequent sample begins part-way through the vector. * * Leapfrog is used to select a single dimension of the output * vector. The `nstreams` parameter is ignored. `k` indicates the selected @@ -982,7 +1002,7 @@ extern "C" { * References * ========== * - * [1] Matsumoto, M., and Nishimura, T., Mersenne twister: a + * [1] Matsumoto, M., and Nishimura, T., Mersenne Twister: a * 623-dimensionally equidistributed uniform pseudo-random number generator., * ACM Trans. Model. Comput. Simul. 8 (1998) * @@ -995,11 +1015,138 @@ extern "C" { /** * \ingroup groupBrng * - * A set of 6024 Mersenne Twister pseudorandom number generators. + * A set of 6024 Mersenne Twister Pseudorandom Number Generators ([1]) that can + * be used in large-scale Monte Carlo simulations performed on distributed + * multi-processor systems. Every generator has a period length equal to + * \f$2^{2203}-1\f$ and the parameters for the generators have been obtained + * following the procedure described in [3]. Each generator in the set is + * described by three parameters * - * \warning Not implemented in \armplref. + * - \f$a_j\f$ + * - \f$b_j\f$ + * - \f$c_j\f$ + * + * where \f$a_j\f$ is the 32-bit vector used in the recurrence relation for the + * Mersenne Twister generator and \f$b_j\f$ and \f$c_j\f$ are tempering + * parameters, see [1]. When the user selects a Mersenne Twister generator, it + * is initialized following [2] using the corresponding set of parameters. + * + * Recurrence relation + * =================== + * + * In our implementation, `k=69`, `m=34`, and `j` is the index of the `j`-th + * generator, with \f$j in \{0, 1, 2, \ldots, 6023\}\f$. Below, we omit the + * index of the generator `j` in the notation used to indicate the `n`-th + * element of the sequence generated by a MT2203 generator. Each element will be + * indicated by `x[n]`, instead of `x_j[n]`. Successive elements of the sequence + * are calculated by: + * + * \code{.cpp} + * x[n] = x[n - k-m] ^ ((x[n - k] & 0xFFFFFFE0) | (x[n - k + 1] & 0x1F)A_j); + * \endcode + * + * where `^` denotes the XOR operator. `A_j` is a (32x32) binary matrix with a + * 32-bit vector `a_j` on the last row and the only non-zero diagonal is the + * superdiagonal, that is the diagonal of elements directly above the elements + * comprising the main diagonal, see [1]. + * + * Integer output + * ============== + * + * Integer output element `y[n]` is calculated from the corresponding element + * `x[n]` by a tempering step: + * + * \code{.cpp} + * y[n] = x[n]; + * y[n] = y[n] ^ (y[n] >> 12); + * y[n] = y[n] ^ ((y[n] << 7) & b_j); + * y[n] = y[n] ^ ((y[n] << 15) & c_j); + * y[n] = y[n] ^ (y[n] >> 18); + * \endcode + * + * Floating point output + * ===================== + * + * Floating point element `r[n]` is defined as `r[n] = y[n] / pow(2, 32)`. + * + * Initialization with vslNewStream + * ================================ + * + * A MT2203 generator is initialized by specifying the 32-bit unsigned integer + * parameter `seed`. The stream state, composed of 69 32-bit integers, is + * initialized following the initialization-by-array procedure from [2]. Note + * that initialization-by-array procedure is always used regardless of whether + * multiple seed values were provided. To select the `j`-th MT2203 generator, + * add the offset `j-1` to the named constant \ref VSL_BRNG_MT2203, for example + * `VSL_BRNG_MT2203 + 1` to select the second generator in the set. + * + * Initialization with vslNewStreamEx + * ================================== + * + * Follow the initialization-by-array procedure as described in [2] using the + * `params` array. If `n == 0`, initialize as though `n` was 1 and the seed + * was 1. + * + * Subsequences + * ============ + * + * The following table lists which methods are supported with the BRNG for + * generating subsequences: + * + * Method | Supported? + * ------------- | ------------- + * \ref vslLeapfrogStream | No + * \ref vslSkipAheadStream | No + * \ref vslSkipAheadStreamEx | No + * + * Example + * ======= + * + * An example of initializing a stream using the 11th MT2203 generator + * in the set and a seed of 42: + * + * \code + * VSLStreamStatePtr stream; + * const int seed = 42; + * int errcode = vslNewStream(&stream, VSL_BRNG_MT12203 + 10, seed); + * \endcode + * + * Parameter generation + * =============================== + * + * The parameters \f$a_j\f$, \f$b_j\f$, and \f$c_j\f$ have been produced + * following the procedure discussed in [3]. We used version 0.6.2, seeded the + * parameter generator with 0, and called the function `get_mt_parameters_st` to + * collect 6024 constitutive parameters for MT generators of period 2203. + * + * Note on the generated sequences + * =============================== + * + * The set of 6024 generators of MT2203 do not return sequences which are + * bitwise reproducible between VSL implementations for the same set of + * generators. However, we tested the quality of the sequences for a subset of + * generators using the BigCrush battery of tests of the TestU01 testsuite. For + * the set of tests we run, we only reported failures in one BirthSpacing test + * and RandomWalk1 with p-values of 0.9992 and 0.9993, respectively. In TestU01, + * a test is considered to have passed if the p-value is between 0.001 and + * 0.999. + * + * References + * ========== + * + * [1] Matsumoto, M., and Nishimura, T., Mersenne Twister: a + * 623-dimensionally equidistributed uniform pseudo-random number generator., + * ACM Trans. Model. Comput. Simul. 8 (1998) + * + * [2] Matsumoto, M., and Nishimura, T., Mersenne Twister with improved + * initialization, + * http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/MT2002/emt19937ar.html + * + * [3] Matsumoto, M., and Nishimura, T., Dynamic Creation of + * Pseudorandom Number Generators, + * http://www.math.sci.hiroshima-u.ac.jp/%7Em-mat/MT/DC/dc.html */ -#define VSL_BRNG_MT2203 0x1008 +#define VSL_BRNG_MT2203 0x10000 /** * \ingroup groupBrng @@ -1097,7 +1244,7 @@ extern "C" { * =================================================== * * All initialization parameters are ignored. If nondeterminism is not - * supported by the architecture, initialization will return + * supported by the architecture, initialization returns * \ref VSL_RNG_ERROR_NONDETERM_NOT_SUPPORTED. * * Integers @@ -1142,9 +1289,124 @@ extern "C" { /** * \ingroup groupBrng * - * An ARS-5 counter-based pseudorandom number generator. + * The ARS5 pseudorandom random generator is a keyed counter-based BRNG. Its + * state consists of a 128-bit counter `c` and a 128-bit 'key', `k`. This BRNG + * is based on the AES encryption algorithm [1]. + * + * Initialization with vslNewStream + * ================================ + * + * Initialize the counter and the key from parameter `seed` according to: + * + * \code{.cpp} + * k = seed; + * c = 0; + * \endcode + * + * Initialization with vslNewStreamEx + * ================================== + * + * The table below describes how `c` and `k` are initialized based on the array + * parameter `params` of `n` 32-bit integers (referred to as `p` for brevity). + * Given `n` parameters in `params`, the initialization of `k` is expressed as + * `sum_{i=0}^n(p[i]*2^(32*i))`. For instance for `n = 2`, `k = sum_{i=0}^2( + * p[i]*2^(32*i)) = p[0] + p[1]*2^32 + p[2]*2^64`. The same notation is used for + * the initialization of `c`, when `n>=6`, that is, for instance for `n=7`, `c = + * sum_{i=4}^5(p[i]*2^(32*(i-4))) = p[4] + p[5]*2^32`. + * + * n | `k` | `c` + * - | ---- | ------ + * 0 | 0 | 0 + * 1 | `p[0]` | 0 + * 2 | sum_{i=0}^1( p[i]*2^(32*i)) | 0 + * 3 | sum_{i=0}^2( p[i]*2^(32*i)) | 0 + * 4 | sum_{i=0}^3( p[i]*2^(32*i)) | 0 + * 5 | sum_{i=0}^3( p[i]*2^(32*i)) | `p[4]` + * 6 | sum_{i=0}^3( p[i]*2^(32*i)) | sum_{i=4}^5( p[i]*2^(32*(i-4))) + * 7 | sum_{i=0}^3( p[i]*2^(32*i)) | sum_{i=4}^6( p[i]*2^(32*(i-4))) + * >=8 | sum_{i=0}^3( p[i]*2^(32*i)) | sum_{i=4}^7( p[i]*2^(32*(i-4))) + * + * Recurrence relation + * =================== + * + * State is advanced every fourth 32-bit sample by: + * + * \code{.cpp} + * c = c + 1; + * \endcode + * + * Integer output + * ============== + * + * The integer output is calculated by passing the parameters `c` and key `k` to + * a function `f` that takes two 128-bit integer values and, starting from the + * initialization + * + * \code{.cpp} + * c0 = c ^ k; k_i = k; + * \endcode + * + * calculates the following recurrence 5 times: + * + * \code{.cpp} + * c_i = c0 + * for (int i = 1; i < 6; i++) { + * c_i = SubBytes(c_i); + * c_i = ShiftRows(c_i); + * if ( i != 5 ) { + * c_i = MixColumns(c_i); + * } + * k_0 = NextRoundKey(k0) + * c_i = AddRoundKey(c_i, k_0) + * } + * + * return c_i + * \endcode + * + * Where the functions `SubBytes`, `ShiftRows`, `MixColumns`, `NextRoundKey`, + * and `AddRoundKey` are described in [1]. + * + * Output `y[i]` of the integer sequence is hence element `i % 4` of `f(i/4)`, + * with `f` being the function that contains the loop presented above. + * + * Float output + * ============ + * + * Output `r[i]` of the floating point sequence is defined by + * + * \code{.py} + * r[i] = (int)y[i] / pow(2, 32) + 0.5 + * \endcode + * + * Subsequences + * ============ + * + * The following table lists which methods are supported with the BRNG for + * generating subsequences: + * + * Method | Supported? + * ------------- | ------------- + * \ref vslLeapfrogStream | No + * \ref vslSkipAheadStream | Yes + * \ref vslSkipAheadStreamEx | Yes + * + * Example + * ======= + * + * An example of initializing a stream using ARS5 and a seed of 42: + * + * \code + * VSLStreamStatePtr stream; + * const int seed = 42; + * int errcode = vslNewStream(&stream, VSL_BRNG_ARS4, seed); + * \endcode + * + * References + * ========== + * + * [1] Federal Information Processing Standards Publication 197 (FIPS 197), + * "Advanced Encryption Standard (AES)", 2001, * - * \warning Not implemented in \armplref. */ #define VSL_BRNG_ARS5 0x100e @@ -1173,7 +1435,7 @@ extern "C" { * (referred to as `p` for brevity). * * n | `k0` | `k1` | `c[0]` | `c[1]` | `c[2]` | `c[3]` - * --|------|------|--------|--------|--------|------- + * - | ---- | ---- | ------ | ------ | ------ | ------ * 0 | 0 | 0 | 0 | 0 | 0 | 0 * 1 | `p[0]` | 0 | 0 | 0 | 0 | 0 * 2 | `p[0]` | `p[1]` | 0 | 0 | 0 | 0 @@ -1277,20 +1539,20 @@ extern "C" { /** * \ingroup groupDistMethods * - * This will initially invoke the generation of a sequence of uniformly - * distributed numbers within the interval \f$[0, 1)\f$ through the chosen - * generator, see \ref groupBrng. + * \ref VSL_RNG_METHOD_UNIFORM_STD initially invokes the generation of a + * sequence of uniformly distributed numbers within the interval \f$[0, 1)\f$ + * through the chosen generator, see \ref groupBrng. * * In the case of single or double precision floating point uniform - * distribution, this will transform the generated floating point numbers into - * numbers within the domain \f$[a, b)\f$, with \f$a\f$ and \f$b\f$ both in - * \f$\mathbb{R}\f$. For some particular values of the lower and upper bounds of - * the domain, the generated values might be outside the interval \f$[a, b)\f$. - * To prevent this from happening, and in case where it is very important that - * every generated value is within the domain, the `ACCURATE` version of this + * distribution, this transforms the generated floating point numbers into + * numbers within the interval \f$[a, b)\f$, with \f$a\f$ and \f$b\f$ both + * real numbers. For some values of the lower and upper bounds of + * the interval, the generated values might be outside the interval \f$[a, + * b)\f$. To prevent this from happening, and in case where it is very important + * that every generated value is in \f$[a, b)\f$, the `ACCURATE` version of this * method has to be used. * - * For the integer uniform distribution, this method will invoke the floor + * For the integer uniform distribution, this method invokes the floor * operation on the generated, possibly scaled and translated, random number * \f$u\in[a, b)\f$. */ @@ -1299,15 +1561,15 @@ extern "C" { /** * \ingroup groupDistMethods * - * This will initially invoke the generation of a sequence of uniformly - * distributed numbers within the interval \f$[0, 1)\f$ through the chosen - * generator, see \ref groupBrng. + * \ref VSL_RNG_METHOD_UNIFORM_STD_ACCURATE initially invokes the generation of + * a sequence of uniformly distributed numbers within the interval \f$[0, 1)\f$ + * through the chosen generator. * * In the case of single or double precision floating point uniform - * distribution, this will transform the generated floating point numbers into - * numbers within the domain \f$[a, b)\f$, with \f$a\f$ and \f$b\f$ both in - * \f$\mathbb{R}\f$. This method will guarantee that every generated value is - * within the domain \f$[a, b)\f$. + * distribution, this transforms the generated floating point numbers into + * numbers within the interval \f$[a, b)\f$, with \f$a\f$ and \f$b\f$ both real + * numbers. This method guarantees that every generated value is in + * \f$[a, b)\f$. * * For the integer uniform distribution, this method is not supported. */ @@ -1316,21 +1578,21 @@ extern "C" { /** * \ingroup groupDistMethods * - * As part of the generation of a uniformly distributed sequence of - * numbers within the \f$[0, 1)\f$ domain, each BRNG (see \ref groupBrng) - * produces a sequence of integer numbers, which then get normalized - * to return a floating point number between \f$[0, 1)\f$. Using this - * method will return the interpretation of each integer value as 32-bit - * integer output using the integer recurrence relation of each BRNG. + * As part of the generation of a uniformly distributed sequence of numbers + * within the \f$[0, 1)\f$ interval, each BRNG produces a sequence of integer + * numbers, which then get normalized to return a floating point number in the + * interval \f$[0, 1)\f$. \ref VSL_RNG_METHOD_UNIFORMBITS_STD returns the + * interpretation of each integer value as 32-bit integer output using the + * integer recurrence relation of each BRNG. */ #define VSL_RNG_METHOD_UNIFORMBITS_STD 0 /** * \ingroup groupDistMethods * - * Given a BRNG (see \ref groupBrng), for which this method is - * supported, this method transforms the underlying BRNG integer - * recurrence so that all bits in 32-bit chunks are uniformly + * Given a BRNG for which this method is + * supported, \ref VSL_RNG_METHOD_UNIFORMBITS32_STD transforms the underlying + * BRNG integer recurrence so that all bits in 32-bit chunks are uniformly * distributed. * * This method is not supported by the following BRNGs: @@ -1344,8 +1606,8 @@ extern "C" { /** * \ingroup groupDistMethods * - * Similarly to the \ref VSL_RNG_METHOD_UNIFORMBITS32_STD, the use of - * this method transforms the underlying BRNG (see \ref groupBrng) integer + * Similar to the \ref VSL_RNG_METHOD_UNIFORMBITS32_STD, + * \ref VSL_RNG_METHOD_UNIFORMBITS64_STD transforms the underlying BRNG integer * recurrence so that all bits in 64-bit chunks are uniformly distributed. * * This method is not supported by the following BRNGs: @@ -1359,10 +1621,10 @@ extern "C" { /** * \ingroup groupDistMethods * - * This invokes the BoxMuller method to generate a normally distributed - * random number \f$x\f$ from a pair of uniformly distributed numbers - * \f$u_1\f$ \f$u_2\f$, with \f$u_1\f$ and \f$u_2\f$ in \f$[0, 1)\f$, - * according to the formulas: + * \ref VSL_RNG_METHOD_GAUSSIAN_BOXMULLER invokes the BoxMuller method to + * generate a normally distributed random number \f$x\f$ from a pair of + * uniformly distributed numbers \f$u_1\f$ \f$u_2\f$, with \f$u_1\f$ and + * \f$u_2\f$ in the interval \f$[0, 1)\f$, according to the formulas: * \f[ * x = \sqrt{(-2\ln{u_1})} \sin(2\pi u_2) * \f] @@ -1372,12 +1634,10 @@ extern "C" { /** * \ingroup groupDistMethods * - * This invokes the BoxMuller2 method to generate normally distributed - * random numbers \f$x_1\f$ and \f$x_2\f$ from a pair of uniformly - * distributed numbers \f$u_1\f$ \f$u_2\f$, with \f$u_1\f$ and \f$u_2\f$ - * in \f$[0, 1)\f$, according to the formulas: - * \f[ - * \begin{array}{ll} + * \ref VSL_RNG_METHOD_GAUSSIAN_BOXMULLER2 invokes the BoxMuller2 method to + * generate normally distributed random numbers \f$x_1\f$ and \f$x_2\f$ from a + * pair of uniformly distributed numbers \f$u_1\f$ \f$u_2\f$, with \f$u_1\f$ and + * \f$u_2\f$ in \f$[0, 1)\f$, according to the formulas: \f[ \begin{array}{ll} * x_1 = \sqrt{(-2\ln{u_1})} \sin(2\pi u_2) \\ * x_2 = \sqrt{(-2\ln{u_1})} \cos(2\pi u_2) \\ * \end{array} @@ -1388,26 +1648,53 @@ extern "C" { /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method - * to calculate the Gaussian distribution from a set of uniformly - * distributed numbers in the interval \f$[0, 1)\f$. + * \ref VSL_RNG_METHOD_GAUSSIAN_ICDF invokes the ICDF method to calculate the + * Gaussian distribution from a set of uniformly distributed numbers in the + * interval \f$[0, 1)\f$. */ #define VSL_RNG_METHOD_GAUSSIAN_ICDF 2 /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method - * to calculate the Laplace distribution from a set of uniformly - * distributed numbers in the interval \f$[0, 1)\f$. + * \ref VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER generates numbers from the + * multivariate Gaussian distribution by transforming numbers from standard + * normal distribution generated using \ref VSL_RNG_METHOD_GAUSSIAN_BOXMULLER. + */ +#define VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER 0 + +/** + * \ingroup groupDistMethods + * + * \ref VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2 generates numbers from the + * multivariate Gaussian distribution by transforming numbers from standard + * normal distribution generated using \ref VSL_RNG_METHOD_GAUSSIAN_BOXMULLER2. + */ +#define VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2 1 + +/** + * \ingroup groupDistMethods + * + * \ref VSL_RNG_METHOD_GAUSSIANMV_ICDF generates numbers from the multivariate + * Gaussian distribution by transforming numbers from standard normal + * distribution generated using \ref VSL_RNG_METHOD_GAUSSIAN_ICDF. + */ +#define VSL_RNG_METHOD_GAUSSIANMV_ICDF 2 + +/** + * \ingroup groupDistMethods + * + * \ref VSL_RNG_METHOD_LAPLACE_ICDF invokes the ICDF to calculate the Laplace + * distribution from a set of uniformly distributed numbers in the interval + * \f$[0, 1)\f$. */ #define VSL_RNG_METHOD_LAPLACE_ICDF 0 /** * \ingroup groupDistMethods * - * This invokes the generation of Gaussian distributed numbers through the - * Inverse Cumulative Distribution Function method, from a set of uniformly + * \ref VSL_RNG_METHOD_LOGNORMAL_ICDF invokes the generation of Gaussian + * distributed numbers through the ICDF method, from a set of uniformly * distributed numbers in the interval \f$[0, 1)\f$, and then applies an * appropriate transformation to produce random numbers in a lognormal * distribution. @@ -1417,19 +1704,20 @@ extern "C" { /** * \ingroup groupDistMethods * - * This invokes the generation of Gaussian distributed numbers through the - * BoxMuller2 method, from a set of uniformly distributed numbers in the - * interval \f$[0, 1)\f$, and then applies an appropriate transformation to - * produce random numbers in a lognormal distribution. + * \ref VSL_RNG_METHOD_LOGNORMAL_BOXMULLER2 invokes the generation of Gaussian + * distributed numbers through the BoxMuller2 method, from a set of uniformly + * distributed numbers in the interval \f$[0, 1)\f$, and then applies an + * appropriate transformation to produce random numbers in a lognormal + * distribution. */ #define VSL_RNG_METHOD_LOGNORMAL_BOXMULLER2 2 /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method to calculate + * \ref VSL_RNG_METHOD_EXPONENTIAL_ICDF invokes the ICDF method to calculate * the exponential distribution from a set of uniformly distributed numbers in - * the interval \f$[0, 1)\f$. It may happen that for certain values of the + * the interval \f$[0, 1)\f$. It might happen that for certain values of the * displacement quantity and scale factor for the exponential distribution, the * generated values are outside the domain. To fix this issue, use the * `ACCURATE` version of this method. @@ -1439,37 +1727,38 @@ extern "C" { /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method to calculate - * the exponential distribution from a set of uniformly distributed numbers in - * the interval \f$[0, 1)\f$. It may happen that for certain values of the - * displacement quantity and scale factor for the exponential distribution, the - * generated values are outside the domain. Using this method will invoke the - * ICDF method to generate values that follow an exponential distribution and - * will enforce that all returned values are within the domain. + * \ref VSL_RNG_METHOD_EXPONENTIAL_ICDF_ACCURATE invokes the ICDF method to + * calculate the exponential distribution from a set of uniformly distributed + * numbers in the interval \f$[0, 1)\f$. It might happen that for certain + * values of the displacement quantity and scale factor for the exponential + * distribution, the generated values are outside the domain. + * `VSL_RNG_METHOD_EXPONENTIAL_ICDF_ACCURATE` invokes the ICDF method to + * generate values that follow an exponential distribution and enforces that all + * returned values are within the domain. */ #define VSL_RNG_METHOD_EXPONENTIAL_ICDF_ACCURATE 1 /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method to calculate - * the Rayleigh distribution from a set of uniformly distributed numbers in the - * interval \f$[0, 1)\f$. It may happen that for certain values of the shape + * \ref VSL_RNG_METHOD_RAYLEIGH_ICDF invokes the ICDF method to calculate the + * Rayleigh distribution from a set of uniformly distributed numbers in the + * interval \f$[0, 1)\f$. It might happen that for certain values of the shape * parameter, displacement quantity, and scale factor for the Rayleigh - * distribution, the generated values are outside the domain. To fix this issue, - * use the `ACCURATE` version of this method. + * distribution, the generated values are outside the domain. To fix this + * issue, use the `ACCURATE` version of this method. */ #define VSL_RNG_METHOD_RAYLEIGH_ICDF 0 /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method to calculate - * the Rayleigh distribution from a set of uniformly distributed numbers in the - * interval \f$[0, 1)\f$. It may happen that, for certain values of the - * distribution parameters, the generated values are outside the domain. Using - * this method will invoke the ICDF method to generate values that follow a - * Rayleigh distribution and will enforce that all returned values are within + * \ref VSL_RNG_METHOD_RAYLEIGH_ICDF_ACCURATE invokes the ICDF method to + * calculate the Rayleigh distribution from a set of uniformly distributed + * numbers in the interval \f$[0, 1)\f$. It might happen that, for certain + * values of the distribution parameters, the generated values are outside the + * domain. This method invokes the ICDF method to generate values that follow a + * Rayleigh distribution and enforces that all returned values are within * the domain. */ #define VSL_RNG_METHOD_RAYLEIGH_ICDF_ACCURATE 1 @@ -1477,24 +1766,24 @@ extern "C" { /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method to calculate - * the Weibull distribution from a set of uniformly distributed numbers in the - * interval \f$[0, 1)\f$. It may happen that for certain values of the shape + * \ref VSL_RNG_METHOD_WEIBULL_ICDF invokes the ICDF method to calculate the + * Weibull distribution from a set of uniformly distributed numbers in the + * interval \f$[0, 1)\f$. It might happen that for certain values of the shape * parameter, displacement quantity, and scale factor for the Weibull - * distribution, the generated values are outside the domain. To fix this issue, - * use the `ACCURATE` version of this method. + * distribution, the generated values are outside the domain. To fix this + * issue, use the `ACCURATE` version of this method. */ #define VSL_RNG_METHOD_WEIBULL_ICDF 0 /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method to calculate - * the Weibull distribution from a set of uniformly distributed numbers in the - * interval \f$[0, 1)\f$. It may happen that, for certain values of the - * distribution parameters, the generated values are outside the domain. Using - * this method will invoke the ICDF method to generate values that follow a - * Weibull distribution and will enforce that all returned values are within the + * \ref VSL_RNG_METHOD_WEIBULL_ICDF_ACCURATE invokes the ICDF method to + * calculate the Weibull distribution from a set of uniformly distributed + * numbers in the interval \f$[0, 1)\f$. It might happen that, for certain + * values of the distribution parameters, the generated values are outside the + * domain. This method invokes the ICDF method to generate values that follow a + * Weibull distribution and enforces that all returned values are within the * domain. */ #define VSL_RNG_METHOD_WEIBULL_ICDF_ACCURATE 1 @@ -1502,27 +1791,27 @@ extern "C" { /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method - * to calculate the Gumbel distribution from a set of uniformly - * distributed numbers in the interval \f$[0, 1)\f$. + * \ref VSL_RNG_METHOD_GUMBEL_ICDF invokes the ICDF method to calculate the + * Gumbel distribution from a set of uniformly distributed numbers in the + * interval \f$[0, 1)\f$. */ #define VSL_RNG_METHOD_GUMBEL_ICDF 0 /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method - * to calculate the Bernoulli distribution from a set of uniformly - * distributed numbers in the interval \f$[0, 1)\f$. + * \ref VSL_RNG_METHOD_BERNOULLI_ICDF invokes the ICDF method to calculate the + * Bernoulli distribution from a set of uniformly distributed numbers in the + * interval \f$[0, 1)\f$. */ #define VSL_RNG_METHOD_BERNOULLI_ICDF 0 /** * \ingroup groupDistMethods * - * This will invoke the BTPE (Binomial, Triangle, Parallelogram, - * Exponential) method, see [1], using accept/reject approach, to - * transform a sequence of uniformly distributed numbers between + * \ref VSL_RNG_METHOD_BINOMIAL_BTPE invokes the BTPE (Binomial, Triangle, + * Parallelogram, Exponential) method, see [1], using accept/reject approach, to + * transform a sequence of uniformly distributed numbers in the interval * \f$[0, 1)\f$ into a sequence following a binomial distribution. * * References @@ -1538,44 +1827,70 @@ extern "C" { /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method - * to calculate the geometric distribution from a set of uniformly - * distributed numbers in the interval \f$[0, 1)\f$. + * \ref VSL_RNG_METHOD_GEOMETRIC_ICDF invokes the ICDF method to calculate the + * geometric distribution from a set of uniformly distributed numbers in the + * interval \f$[0, 1)\f$. */ #define VSL_RNG_METHOD_GEOMETRIC_ICDF 0 /** * \ingroup groupDistMethods * - * This invokes the Inverse Cumulative Distribution Function method - * to calculate the Cauchy distribution from a set of uniformly - * distributed numbers in the interval \f$[0, 1)\f$. + * \ref VSL_RNG_METHOD_CAUCHY_ICDF invokes the ICDF method to calculate the + * Cauchy distribution from a set of uniformly distributed numbers in the + * interval \f$[0, 1)\f$. */ #define VSL_RNG_METHOD_CAUCHY_ICDF 0 /** * \ingroup groupDistMethods * - * Poisson PTPE algorithm + * \ref VSL_RNG_METHOD_POISSON_PTPE invokes the Poisson PTPE algorithm to + * calculate a Poisson distribution. */ #define VSL_RNG_METHOD_POISSON_PTPE 0 /** * \ingroup groupDistMethods * - * Poisson from normally distributed random numbers + * \ref VSL_RNG_METHOD_POISSON_POISNORM invokes the Poisson POISNORM algorithm + * to calculate a Poisson distribution from normally distributed random + * numbers. */ #define VSL_RNG_METHOD_POISSON_POISNORM 1 +/** + * \ingroup groupMatrixStorage + * + * All \f$d\times d\f$ elements of the matrix \f$T\f$ are passed, but only the + * lower triangle will be used in the routine. + */ +#define VSL_MATRIX_STORAGE_FULL 0 + +/** + * \ingroup groupMatrixStorage + * + * The lower triangle of the matrix \f$T\f$ are packed into a one-dimensional + * array by omitting the elements outside of the lower triangle. + */ +#define VSL_MATRIX_STORAGE_PACKED 1 + +/** + * \ingroup groupMatrixStorage + * + * Only the diagonal elements of matrix \f$T\f$ are passed. + */ +#define VSL_MATRIX_STORAGE_DIAGONAL 2 + /** * \ingroup groupTypes * * \typedef openrng_int_t * - * Generalized signed integer type. + * Generalized signed integer type: * - * * 32 bits if built in LP64 mode. - * * 64 bits if built in ILP64 mode. + * - 32 bits if built in LP64 mode + * - 64 bits if built in ILP64 mode * * The following syntax section assumes LP64. See \int64libs for the different * integer modes in \armplref. @@ -1586,10 +1901,10 @@ extern "C" { * * \typedef openrng_uint_t * - * Generalized unsigned integer type. + * Generalized unsigned integer type: * - * * 32 bits if built in LP64 mode. - * * 64 bits if built in ILP64 mode. + * - 32 bits if built in LP64 mode + * - 64 bits if built in ILP64 mode * * The following syntax section assumes LP64. See \int64libs for the different * integer modes in \armplref. @@ -1606,7 +1921,7 @@ typedef uint32_t openrng_uint_t; /** * \ingroup groupTypes * - * 64 bit unsigned integer type. + * 64-bit unsigned integer type. */ typedef unsigned long long openrng_uint64_t; @@ -1676,9 +1991,10 @@ typedef int (*sUpdateFuncPtr)(VSLStreamStatePtr stream, int *n, float sbuf[], /** * \ingroup groupTypes * - * Struct returned by \ref vslGetBrngProperties. It contains runtime information - * about the BRNG. As of \armplref, the only field with a reliable value is - * `WordSize`, which is needed for the correct usage of \ref viRngUniformBits. + * Struct returned by \ref vslGetBrngProperties. It contains runtime + * information about the BRNG. As of \armplref, the only field with a reliable + * value is `WordSize`, which is needed for the correct usage of \ref + * viRngUniformBits. */ typedef struct { int StreamStateSize; ///< Not used. @@ -1919,8 +2235,6 @@ int vdRngGaussian(const openrng_int_t method, VSLStreamStatePtr stream, * Generates double-precision random numbers distributed according to the * multivariate Gaussian distribution of dimension \f$d\f$. * - * \warning Not implemented in \armplref. - * * The parameters of this distribution are a vector \f$a\f$ of * length \f$d\f$ of mean values, a variance-covariance matrix * \f$C\f$, of dimension \f$d\times d\f$. The matrix \f$C\f$ is @@ -1951,7 +2265,7 @@ int vdRngGaussian(const openrng_int_t method, VSLStreamStatePtr stream, * \param[in] t Elements of the lower triangular part of the * variance-covariance matrix. Elements are store according to the * storage scheme in `mstorage`. - * \return \ref VSL_ERROR_FEATURE_NOT_IMPLEMENTED + * \return See \ref groupError. */ int vdRngGaussianMV(const openrng_int_t method, VSLStreamStatePtr stream, const openrng_int_t n, double r[], @@ -2115,7 +2429,7 @@ int vdRngRayleigh(const openrng_int_t method, VSLStreamStatePtr stream, * * Generates double-precision random numbers distributed according to the * uniform distribution in the interval \f$[a, b)\f$. The lower and upper bound - * of the domain have to satisfy \f$a < b\f$. + * of the interval have to satisfy \f$a < b\f$. * * The probability distribution is given by: * @@ -2721,8 +3035,6 @@ int vsRngGaussian(const openrng_int_t method, VSLStreamStatePtr stream, * Generates single-precision random numbers distributed according to the * multivariate Gaussian distribution of dimension \f$d\f$. * - * \warning Not implemented in \armplref. - * * The parameters of this distribution are: a vector \f$a\f$ of length \f$d\f$ * of mean values, a variance-covariance matrix \f$C\f$, of dimension * \f$d\times d\f$. The matrix \f$C\f$ is symmetric and positive-definite. @@ -2752,7 +3064,7 @@ int vsRngGaussian(const openrng_int_t method, VSLStreamStatePtr stream, * \param[in] t Elements of the lower triangular part of the * variance-covariance matrix. Elements are store according to the * storage scheme in `mstorage`. - * \return \ref VSL_ERROR_FEATURE_NOT_IMPLEMENTED + * \return See \ref groupError. */ int vsRngGaussianMV(const openrng_int_t method, VSLStreamStatePtr stream, const openrng_int_t n, float r[], const openrng_int_t dimen, @@ -2989,10 +3301,10 @@ int vsRngWeibull(const openrng_int_t method, VSLStreamStatePtr stream, /** * \ingroup groupService * - * Creates a stream using the same BRNG and state as `srcstream`. On output, - * `newStream` will point to a newly allocated and initialized stream. See \ref - * vslCopyStreamState if you want to copy the state into a stream that has - * previously been created with the same BRNG. Any resources can be later + * The function creates a stream using the same BRNG and state as `srcstream`. + * On output, `newStream` points to a newly allocated and initialized stream. + * See \ref vslCopyStreamState if you want to copy the state into a stream that + * has previously been created with the same BRNG. Any resources can be later * released with \ref vslDeleteStream. * * \param[out] newstream On output, pointer to a newly created stream. @@ -3005,9 +3317,9 @@ int vslCopyStream(VSLStreamStatePtr *newstream, /** * \ingroup groupService * - * Copies the state of `srcstream` into the state of `dststream`. `dststream` - * should have been previously created with the same BRNG as `srcstream`. See - * \ref vslCopyStream if you also want to create a new stream. + * This function copies the state of `srcstream` into the state of `dststream`. + * `dststream` should have been previously created with the same BRNG as + * `srcstream`. See \ref vslCopyStream if you also want to create a new stream. * * \param[in, out] dststream On input, a pre-existing stream with the same BRNG * as `srcstream`. On output, a copy of `srcstream`. @@ -3020,7 +3332,7 @@ int vslCopyStreamState(VSLStreamStatePtr dststream, /** * \ingroup groupService * - * Deletes a stream and releases all associated resources. + * This function deletes a stream and releases all associated resources. * * \param[in, out] stream On input, a valid stream. On output, a pointer to * `NULL`. @@ -3031,9 +3343,9 @@ int vslDeleteStream(VSLStreamStatePtr *stream); /** * \ingroup groupService * - * Retrieves the properties of a given basic generator. + * This function retrieves the properties of a given basic generator. * - * Note that only some properties are currently implemented. See + * Only some properties are currently implemented. See * \ref VSLBRngProperties for the available properties. * * \param[in] brngId See \ref groupBrng for the list of supported BRNGs. @@ -3055,7 +3367,7 @@ int vslGetNumRegBrngs(void); /** * \ingroup groupService * - * This function is used to compute the minimum buffer size needed for storing + * This function computes the minimum buffer size needed for storing * the state of a stream in a memory buffer, see \ref vslSaveStreamM. * * \param[in] stream An initialized random stream. @@ -3067,7 +3379,7 @@ int vslGetStreamSize(const VSLStreamStatePtr stream); /** * \ingroup groupService * - * Retrieve the index of the BRNG associated with a given stream. + * This function retrieves the index of the BRNG associated with a given stream. * * \param[in] stream An initialized random stream. * \return On success, the index of the stream's BRNG. On failure, a negative @@ -3078,18 +3390,22 @@ int vslGetStreamStateBrng(const VSLStreamStatePtr stream); /** * \ingroup groupService * - * Initializes the leapfrog method on a stream. The leapfrog method allows for - * the splitting of a random stream into multiple interleaving subsequences. It - * works by specifying a non-unit stride, `nstreams`, into the sequence, - * alongside an initial index, `k`. + * This function initializes the leapfrog method on a stream. The leapfrog + * method allows for the splitting of a random stream into multiple interleaving + * subsequences. It works by specifying a non-unit stride, `nstreams`, into the + * sequence, alongside an initial index, `k`. * * If the sequence returned by a stream without leapfrog is: * - * \code x[0], x[1], x[2], ... \endcode + * \code + * x[0], x[1], x[2], ... + * \endcode * - * The sequence returned by a stream after leapfrog is enabled, would be: + * then the sequence returned by a stream after leapfrog is enabled is: * - * \code x[k], x[k + nstreams], x[k + 2 * nstreams], ... \endcode + * \code + * x[k], x[k + nstreams], x[k + 2 * nstreams], ... + * \endcode * * Leapfrog is only supported by a subset of BRNGs. See the corresponding * subsequence table of each BRNG in \ref groupBrng. @@ -3105,9 +3421,9 @@ int vslLeapfrogStream(VSLStreamStatePtr stream, const openrng_int_t k, /** * \ingroup groupService * - * Creates a `stream` with data from a file. The file should have been created - * by the \ref vslSaveStreamF function from the same version of OpenRNG. Any - * resources can be later released with \ref vslDeleteStream. + * This function creates a `stream` with data from a file. The file should have + * been created by the \ref vslSaveStreamF function from the same version of + * OpenRNG. Any resources can be later released with \ref vslDeleteStream. * * \param[out] stream On output, a pointer to a random stream. * \param[in] fname File containing stream data. @@ -3118,9 +3434,10 @@ int vslLoadStreamF(VSLStreamStatePtr *stream, const char *fname); /** * \ingroup groupService * - * Creates a `stream` with data from a memory buffer. The buffer should have - * been filled using the \ref vslSaveStreamM function from the same version of - * OpenRNG. Any resources can be later released with \ref vslDeleteStream. + * This function creates a `stream` with data from a memory buffer. The buffer + * should have been filled using the \ref vslSaveStreamM function from the same + * version of OpenRNG. Any resources can be later released with \ref + * vslDeleteStream. * * \param[out] stream On output, a pointer to a random stream. * \param[in] memptr Memory buffer containing stream data. @@ -3131,10 +3448,11 @@ int vslLoadStreamM(VSLStreamStatePtr *stream, const char *memptr); /** * \ingroup groupService * - * Creates a stream of type `brng` with initial seed of `seed`. For the list of - * BRNGs and the meaning of their seed, see \ref groupBrng. For more complex - * initialization involving multiple seeds/parameters, see \ref vslNewStreamEx. - * Any resources can be later released with \ref vslDeleteStream. + * This function creates a stream of type `brng` with initial seed of `seed`. + * For the list of BRNGs and the meaning of their seed, see \ref groupBrng. For + * more complex initialization involving multiple seeds/parameters, see \ref + * vslNewStreamEx. Any resources can be later released with \ref + * vslDeleteStream. * * \param[out] stream On output, an initialized random stream. * \param[in] brng See \ref groupBrng for the list of BRNGs supported. @@ -3147,11 +3465,11 @@ int vslNewStream(VSLStreamStatePtr *stream, const openrng_int_t brng, /** * \ingroup groupService * - * Creates a stream of type `brng` with an array of `n` parameters, `params`. - * For the list of BRNGs and the meaning of `params`, see \ref groupBrng. In - * general, `params` is used to store multiple seed values when more data is - * required than is permitted by \ref vslNewStream. Any resources can be later - * released with \ref vslDeleteStream. + * This function creates a stream of type `brng` with an array of `n` + * parameters, `params`. For the list of BRNGs and the meaning of `params`, see + * \ref groupBrng. In general, `params` is used to store multiple seed values + * when more data is required than is permitted by \ref vslNewStream. Any + * resources can be later released with \ref vslDeleteStream. * * \param[out] stream On output, an initialized random stream. * \param[in] brng See \ref groupBrng for the list of BRNGs supported. @@ -3176,8 +3494,8 @@ int vslRegisterBrng(const VSLBRngProperties *properties); /** * \ingroup groupService * - * Saves `stream` and its corresponding state to the file path specified by - * `fname`. + * This function saves `stream` and its corresponding state to the file path + * specified by `fname`. * * \param[in] stream An initialized random stream. * \param[in] fname Path of output file. @@ -3188,8 +3506,8 @@ int vslSaveStreamF(const VSLStreamStatePtr stream, const char *fname); /** * \ingroup groupService * - * Saves `stream` and its associated state to a memory buffer. The size of the - * buffer must be at least the number of bytes reported by \ref + * This function saves `stream` and its associated state to a memory buffer. The + * size of the buffer must be at least the number of bytes reported by \ref * vslGetStreamSize. * * \param[in] stream An initialized random stream. @@ -3203,15 +3521,15 @@ int vslSaveStreamM(const VSLStreamStatePtr stream, char *memptr); /** * \ingroup groupService * - * Skips `nskip` elements of the provided stream. This can be used to form - * non-overlapping sequences per stream, by passing in a value of `nskip` larger - * than the amount of elements required by any other stream, provided the period - * of the generator has not been exceeded. By extension, this can be used to - * guarantee non-overlapping sequences per thread, if each thread skips ahead a - * unique amount. Skip ahead is only supported by a subset of BRNGs, see the - * subsequence support tables in \ref groupBrng. If you need to skip ahead by - * more than \f$2^{63}\f$ elements, see \ref vslSkipAheadStreamEx. See \ref - * skipahead.c for an example use of this method. + * This function skips `nskip` elements of the provided stream. This can be used + * to form non-overlapping sequences per stream, by passing in a value of + * `nskip` larger than the amount of elements required by any other stream, + * provided the period of the generator has not been exceeded. By extension, + * this can be used to guarantee non-overlapping sequences per thread, if each + * thread skips ahead a unique amount. Skip ahead is only supported by a subset + * of BRNGs, see the subsequence support tables in \ref groupBrng. If you need + * to skip ahead by more than \f$2^{63}\f$ elements, see \ref + * vslSkipAheadStreamEx. See \ref skipahead.c for an example use of this method. * * \param[in] stream An initialized stream. * \param[in] nskip The number of elements to skip. @@ -3222,10 +3540,10 @@ int vslSkipAheadStream(VSLStreamStatePtr stream, const long long int nskip); /** * \ingroup groupService * - * Skips a stream by the number of elements specified by the `nskip` array. See - * \ref vslSkipAheadStream for a description of how skip ahead works. This - * function is useful for skipping ahead in a stream by more than \f$2^{63}\f$ - * elements. + * This function skips a stream by the number of elements specified by the + * `nskip` array. See \ref vslSkipAheadStream for a description of how skip + * ahead works. This function is useful for skipping ahead in a stream by more + * than \f$2^{63}\f$ elements. * * The nskip array is interpreted as follows: * diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 8bcda1a..2fc7bc2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -1,15 +1,17 @@ set(VSL_GENERIC_SOURCES generic/generator/generator.cpp + generic/generator/ars5.cpp generic/generator/mcg31m1.cpp generic/generator/mcg59.cpp generic/generator/mrg32k3a.cpp generic/generator/mt19937.cpp + generic/generator/mt2203.cpp + generic/generator/mt2203_params.cpp generic/generator/nondeterministic.cpp generic/generator/philox4x3210.cpp generic/generator/r250.cpp generic/generator/sobol.cpp generic/generator/sfmt19937.cpp - utils/mt_skip_ahead.cpp ) if (NOT OPENRNG_TEST_TARGET) diff --git a/src/aarch64.cmake b/src/aarch64.cmake index b4a1495..67d811a 100644 --- a/src/aarch64.cmake +++ b/src/aarch64.cmake @@ -5,22 +5,31 @@ set(TRNG_GENERATORS set_source_files_properties(${TRNG_GENERATORS} PROPERTIES COMPILE_OPTIONS -march=armv8.5-a+rng) set(NEON_GENERATORS + vsl/aarch64/generator/neon/ars5_neon.cpp vsl/aarch64/generator/neon/mcg31m1_neon.cpp vsl/aarch64/generator/neon/mcg59_neon.cpp vsl/aarch64/generator/neon/mrg32k3a_neon.cpp vsl/aarch64/generator/neon/mt19937_neon.cpp + vsl/aarch64/generator/neon/mt2203_neon.cpp vsl/aarch64/generator/neon/philox4x3210_neon.cpp vsl/aarch64/generator/neon/sfmt19937_neon.cpp ) set(SHA3_GENERATORS vsl/aarch64/generator/sha3/mt19937_sha3.cpp + vsl/aarch64/generator/sha3/mt2203_sha3.cpp vsl/aarch64/generator/sha3/philox4x3210_sha3.cpp vsl/aarch64/generator/sha3/sfmt19937_sha3.cpp ) set_source_files_properties(${SHA3_GENERATORS} PROPERTIES COMPILE_OPTIONS -march=armv8.2-a+sha3) +set(AES_GENERATORS + vsl/aarch64/generator/aes/ars5_aes.cpp +) + +set_source_files_properties(${AES_GENERATORS} PROPERTIES COMPILE_OPTIONS -march=armv8-a+crypto) + # SVE support on Windows & macOS is poor, so skip building. if(NOT (WIN32 OR APPLE)) set(SVE_DISTRIBUTION_KERNELS @@ -43,4 +52,5 @@ target_sources(openrng PRIVATE ${NEON_GENERATORS} ${TRNG_GENERATORS} ${SHA3_GENERATORS} + ${AES_GENERATORS} ) diff --git a/src/generic/distributions/gaussianmv.hpp b/src/generic/distributions/gaussianmv.hpp new file mode 100644 index 0000000..6168bd3 --- /dev/null +++ b/src/generic/distributions/gaussianmv.hpp @@ -0,0 +1,49 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace openrng::distribution::gaussianmv { + +template +int fill(const int64_t method, Generator *generator, const int64_t n, + const int64_t dimen, const int64_t mstorage, T r[], const T *a, + const T *t) { + if (n < 0 || dimen < 1 || generator == nullptr) { + return VSL_ERROR_BADARGS; + } + + if (r == nullptr || a == nullptr || t == nullptr) { + return VSL_ERROR_BADARGS; + } + + if (mstorage != VSL_MATRIX_STORAGE_FULL && + mstorage != VSL_MATRIX_STORAGE_PACKED && + mstorage != VSL_MATRIX_STORAGE_DIAGONAL) { + return VSL_ERROR_BADARGS; + } + + if (method != VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER && + method != VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2 && + method != VSL_RNG_METHOD_GAUSSIANMV_ICDF) { + return VSL_ERROR_BADARGS; + } + + if (n == 0) { + return VSL_ERROR_OK; + } + + return choose(method, generator, n, r, dimen, mstorage, a, t); +} + +} // namespace openrng::distribution::gaussianmv diff --git a/src/generic/distributions/kernels/gaussianmv.hpp b/src/generic/distributions/kernels/gaussianmv.hpp new file mode 100644 index 0000000..eebe04c --- /dev/null +++ b/src/generic/distributions/kernels/gaussianmv.hpp @@ -0,0 +1,98 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +namespace openrng::distribution::gaussianmv { + +template struct GaussianMV {}; + +/** + * Creates a multivariate Gaussian sequence using the specified method. + * + * The multivariate Gaussian method applies transformations on + * the one-dimensional gaussian distribution generated by the corresponding + * gaussian method. + */ +template <> struct GaussianMV { + /** + * Returns the element in the lower triangle matrix T according to the matrix + * storage scheme. + */ + template + static inline T getMatrixElement(const int64_t dimen, const int64_t mstorage, + const T *t, const int64_t row, + const int64_t col) { + assert(row < dimen && col < dimen); + + switch (mstorage) { + case VSL_MATRIX_STORAGE_PACKED: + if (col <= row) { + return t[col * (2 * dimen - col - 1) / 2 + row]; + } + return 0; + case VSL_MATRIX_STORAGE_DIAGONAL: + if (col == row) { + return t[row]; + } + return 0; + default: + return t[row * dimen + col]; + } + } + + template + static int fill(const int64_t method, Generator *generator, const int64_t n, + T r[], const int64_t dimen, const int64_t mstorage, + const T *a, const T *t) { + assert(n > 0); + assert(generator != nullptr); + + switch (method) { + case VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER: + gaussian::BoxMuller::fill(generator, n * dimen, + r, 0, 1); + break; + case VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2: + gaussian::BoxMuller2::fill(generator, n * dimen, + r, 0, 1); + break; + case VSL_RNG_METHOD_GAUSSIANMV_ICDF: + gaussian::ICDF::fill(generator, n * dimen, r, 0, + 1); + break; + default: + return VSL_ERROR_BADARGS; + } + + for (int64_t i = 0; i < n; i++) { + + for (int64_t j = dimen - 1; j >= 0; j--) { + T u = 0; + for (int64_t k = 0; k <= j; k++) { + u += r[i * dimen + k] * getMatrixElement(dimen, mstorage, t, j, k); + } + r[i * dimen + j] = u + a[j]; + } + } + + return VSL_ERROR_OK; + } +}; + +} // namespace openrng::distribution::gaussianmv diff --git a/src/generic/distributions/uniform.hpp b/src/generic/distributions/uniform.hpp index 70bab84..4e5e311 100644 --- a/src/generic/distributions/uniform.hpp +++ b/src/generic/distributions/uniform.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -113,7 +113,7 @@ int stdFill(Generator *generator, const int64_t n, int32_t r[], const int32_t a, generator->fill(n, reinterpret_cast(r)); for (int64_t i = 0; i < n; i++) { - r[i] = reinterpret_cast(r[i]) * (b - a) + a; + r[i] = int32_t(reinterpret_cast(r[i]) * (b - a)) + a; } return VSL_ERROR_OK; diff --git a/src/generic/generator/ars5.cpp b/src/generic/generator/ars5.cpp new file mode 100644 index 0000000..ee58afb --- /dev/null +++ b/src/generic/generator/ars5.cpp @@ -0,0 +1,44 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include +#include + +namespace openrng { + +namespace { +inline uint128_t do_bijection(const QuadCounterBasedState &state) { + return compute_ars5(state.c, state.k); +} +} // namespace + +int ARS5Generator::initialise( + const int64_t n, const unsigned int params[]) { + for (int i = 0; i < 4; ++i) + state.k.data.u32[i] = n > i ? params[i] : 0; + for (int i = 0; i < 4; ++i) + state.c.data.u32[i] = n > i + 4 ? params[i + 4] : 0; + state.off = 0; + return VSL_ERROR_OK; +} + +int ARS5Generator::fillBits(int64_t n, uint32_t dst[]) { + fill_array(n, dst); + return VSL_ERROR_OK; +} + +int ARS5Generator::fill(int64_t n, float dst[]) { + fill_array(n, dst); + return VSL_ERROR_OK; +} + +int ARS5Generator::fill(int64_t n, double dst[]) { + fill_array(n, dst); + return VSL_ERROR_OK; +} + +} // namespace openrng diff --git a/src/generic/generator/ars5.hpp b/src/generic/generator/ars5.hpp new file mode 100644 index 0000000..1aaed5d --- /dev/null +++ b/src/generic/generator/ars5.hpp @@ -0,0 +1,34 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include +#include + +namespace openrng { + +template class ARS5Generator {}; + +template <> +class ARS5Generator + : public QuadCounterBasedGenerator { +public: + ARS5Generator(int64_t brng) : QuadCounterBasedGenerator{brng} {} + + using QuadCounterBasedGenerator::initialise; + int initialise(const int64_t n, const unsigned int params[]); + + int fillBits(int64_t n, uint32_t dst[]); + + int fill(int64_t n, float dst[]); + + int fill(int64_t n, double dst[]); +}; + +} // namespace openrng diff --git a/src/generic/generator/copyable_generator.hpp b/src/generic/generator/copyable_generator.hpp index 39db7d4..fc3393f 100644 --- a/src/generic/generator/copyable_generator.hpp +++ b/src/generic/generator/copyable_generator.hpp @@ -57,4 +57,4 @@ public: return VSL_ERROR_OK; } }; -} // namespace openrng \ No newline at end of file +} // namespace openrng diff --git a/src/generic/generator/generator.cpp b/src/generic/generator/generator.cpp index 8a61acf..74fe07c 100644 --- a/src/generic/generator/generator.cpp +++ b/src/generic/generator/generator.cpp @@ -1,15 +1,17 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ +#include #include #include #include #include #include +#include #include #include #include @@ -24,26 +26,26 @@ namespace openrng { template Expected Generator::create(const int64_t brng, Args &&...args) { + if (brng >= VSL_BRNG_MT2203 && brng < VSL_BRNG_MT2203 + 6024) + return Generator::choose(brng, args...); switch (brng) { case VSL_BRNG_MCG31: - return Generator::choose(args...); + return Generator::choose(brng, args...); case VSL_BRNG_MRG32K3A: - return Generator::choose(args...); + return Generator::choose(brng, args...); case VSL_BRNG_MT19937: - return Generator::choose(args...); + return Generator::choose(brng, args...); case VSL_BRNG_R250: - return Generator::create(args...); + return Generator::create(brng, args...); case VSL_BRNG_MCG59: - return Generator::choose(args...); + return Generator::choose(brng, args...); case VSL_BRNG_WH: return {nullptr, VSL_ERROR_FEATURE_NOT_IMPLEMENTED}; case VSL_BRNG_SOBOL: - return Generator::create(args...); + return Generator::create(brng, args...); case VSL_BRNG_NIEDERR: return {nullptr, VSL_ERROR_FEATURE_NOT_IMPLEMENTED}; - case VSL_BRNG_MT2203: - return {nullptr, VSL_ERROR_FEATURE_NOT_IMPLEMENTED}; case VSL_BRNG_IABSTRACT: return {nullptr, VSL_ERROR_FEATURE_NOT_IMPLEMENTED}; case VSL_BRNG_DABSTRACT: @@ -51,13 +53,13 @@ Expected Generator::create(const int64_t brng, Args &&...args) { case VSL_BRNG_SABSTRACT: return {nullptr, VSL_ERROR_FEATURE_NOT_IMPLEMENTED}; case VSL_BRNG_SFMT19937: - return Generator::choose(args...); + return Generator::choose(brng, args...); case VSL_BRNG_NONDETERM: - return Generator::choose(args...); + return Generator::choose(brng, args...); case VSL_BRNG_ARS5: - return {nullptr, VSL_ERROR_FEATURE_NOT_IMPLEMENTED}; + return Generator::choose(brng, args...); case VSL_BRNG_PHILOX4X32X10: - return Generator::choose(args...); + return Generator::choose(brng, args...); default: return {nullptr, VSL_RNG_ERROR_INVALID_BRNG_INDEX}; } diff --git a/src/generic/generator/generator.hpp b/src/generic/generator/generator.hpp index ab68edc..02f18e5 100644 --- a/src/generic/generator/generator.hpp +++ b/src/generic/generator/generator.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -88,15 +88,13 @@ public: /** * Fills r with n * 32 bits, uniformly distributed bits. */ - virtual int fillBits32(int64_t, uint32_t[]) { - return VSL_ERROR_FEATURE_NOT_IMPLEMENTED; - } + virtual int fillBits32(int64_t n, uint32_t dst[]) { return fillBits(n, dst); } /** * Fills r with n * 64 bits, uniformly distributed bits. */ - virtual int fillBits64(int64_t, uint64_t[]) { - return VSL_ERROR_FEATURE_NOT_IMPLEMENTED; + virtual int fillBits64(int64_t n, uint64_t dst[]) { + return fillBits32(2 * n, reinterpret_cast(dst)); } /** @@ -265,7 +263,7 @@ public: * initialised with operator new without the C++ runtime. */ template - static Expected create(Args &&...args) { + static Expected create(int64_t brngId, Args &&...args) { // Due to the lack of the C++ runtime, the memory is allocated with malloc // and then the buffer is passed into placement new which knows how to @@ -276,7 +274,7 @@ public: return {nullptr, VSL_ERROR_MEM_FAILURE}; } - auto generator = new (buffer) DerivedGenerator; + auto generator = new (buffer) DerivedGenerator(brngId); const int error = generator->initialise(args...); if (error) { diff --git a/src/generic/generator/mcg31m1.hpp b/src/generic/generator/mcg31m1.hpp index 1b7e97e..d90a264 100644 --- a/src/generic/generator/mcg31m1.hpp +++ b/src/generic/generator/mcg31m1.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -27,7 +27,7 @@ class Mcg31m1Generator void advance(); public: - Mcg31m1Generator() : CopyableGenerator{VSL_BRNG_MCG31} {} + Mcg31m1Generator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t n, const unsigned int params[]); diff --git a/src/generic/generator/mcg59.cpp b/src/generic/generator/mcg59.cpp index e9043b1..e24746a 100644 --- a/src/generic/generator/mcg59.cpp +++ b/src/generic/generator/mcg59.cpp @@ -54,11 +54,6 @@ int Mcg59Generator::fillBits32(int64_t n, return VSL_ERROR_OK; } -int Mcg59Generator::fillBits64(int64_t n, - uint64_t buffer[]) { - return fillBits32(2 * n, reinterpret_cast(buffer)); -} - int Mcg59Generator::fill(int64_t n, float buffer[]) { for (int64_t i = 0; i < n; i++) { buffer[i] = (float)state.x / (float)m; diff --git a/src/generic/generator/mcg59.hpp b/src/generic/generator/mcg59.hpp index 9c11773..e0bfb74 100644 --- a/src/generic/generator/mcg59.hpp +++ b/src/generic/generator/mcg59.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -29,18 +29,17 @@ class Mcg59Generator void advance(); public: - Mcg59Generator() : CopyableGenerator{VSL_BRNG_MCG59} {} + Mcg59Generator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t n, const unsigned int params[]); int fillBits(int64_t n, uint32_t[]) final; int fillBits32(int64_t n, uint32_t[]) final; - int fillBits64(int64_t n, uint64_t[]) final; int fill(int64_t n, float[]) final; int fill(int64_t n, double[]) final; int skipAhead(uint64_t n, const uint64_t nskip[]) final; int setStride(uint64_t stride) final; }; -} // namespace openrng \ No newline at end of file +} // namespace openrng diff --git a/src/generic/generator/mrg32k3a.hpp b/src/generic/generator/mrg32k3a.hpp index 6e15965..54db45d 100644 --- a/src/generic/generator/mrg32k3a.hpp +++ b/src/generic/generator/mrg32k3a.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -79,7 +79,7 @@ class MRG32k3aGenerator uint32_t advance(); public: - MRG32k3aGenerator() : CopyableGenerator{VSL_BRNG_MRG32K3A} {} + MRG32k3aGenerator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t n, const unsigned int params[]); diff --git a/src/generic/generator/mt19937.cpp b/src/generic/generator/mt19937.cpp index 0a39b5f..e4da5d5 100644 --- a/src/generic/generator/mt19937.cpp +++ b/src/generic/generator/mt19937.cpp @@ -1,11 +1,12 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ #include +#include #include namespace openrng { @@ -23,34 +24,7 @@ namespace openrng { */ int MT19937Generator::initialise( const int64_t n, const unsigned int params[]) { - const auto data = state.x.data(); - data[0] = 19650218; - for (int i = 1; i < N; i++) { - data[i] = 1812433253ULL * (data[i - 1] ^ (data[i - 1] >> 30)) + i; - } - - int i = 1; - for (int j = 0, k = 0; k < std::max(n, N); k++) { - data[i] ^= 1664525ULL * (data[i - 1] ^ (data[i - 1] >> 30)); - data[i] += params[j] + j; - i = i == N - 1 ? 1 : i + 1; - j = j == n - 1 ? 0 : j + 1; - if (i == 1) { - data[0] = data[N - 1]; - } - } - - for (int k = 0; k < N - 1; k++) { - data[i] ^= 1566083941ULL * (data[i - 1] ^ (data[i - 1] >> 30)); - data[i] -= i; - i = i == N - 1 ? 1 : i + 1; - if (i == 1) { - data[0] = data[N - 1]; - } - } - - data[0] = 1 << 31; - return VSL_ERROR_OK; + return mt_initialise_by_array(n, params, state.x.data()); } uint32_t MT19937Generator::advance() { @@ -79,17 +53,6 @@ int MT19937Generator::fillBits(int64_t n, return VSL_ERROR_OK; } -int MT19937Generator::fillBits32(int64_t n, - uint32_t buffer[]) { - // MT19937 already generates uniformly distributed integers in [0, 2^32] - return fillBits(n, buffer); -} - -int MT19937Generator::fillBits64(int64_t n, - uint64_t buffer[]) { - return fillBits32(2 * n, reinterpret_cast(buffer)); -} - int MT19937Generator::fill(int64_t n, float buffer[]) { for (int i = 0; i < n; i++) { buffer[i] = (float)advance() / (float)(1ULL << 32); @@ -128,6 +91,12 @@ int deg(const DynamicArray &a) { static DynamicArray fromBits(auto indeces) { const auto size = indeces.size() * 64; DynamicArray result(size, 0); + + // Seems unnecessary, but clang-tidy insists on it. + if (result.size() == 0) { + return result; + } + for (size_t j = 0; j < indeces.size(); j++) { for (size_t i = 0; i < 64; i++) if (1 & (indeces[j] >> i)) diff --git a/src/generic/generator/mt19937.hpp b/src/generic/generator/mt19937.hpp index dfff965..b996ce0 100644 --- a/src/generic/generator/mt19937.hpp +++ b/src/generic/generator/mt19937.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -31,14 +31,12 @@ class MT19937Generator uint32_t advance(); public: - MT19937Generator() : CopyableGenerator{VSL_BRNG_MT19937} {} + MT19937Generator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t, const unsigned int[]); int fillBits(int64_t n, uint32_t[]) final; - int fillBits32(int64_t n, uint32_t[]) final; - int fillBits64(int64_t n, uint64_t[]) final; int fill(int64_t n, float[]) final; int fill(int64_t n, double[]) final; int skipAhead(uint64_t n, const uint64_t[]) final; diff --git a/src/generic/generator/mt2203.cpp b/src/generic/generator/mt2203.cpp new file mode 100644 index 0000000..e79f42a --- /dev/null +++ b/src/generic/generator/mt2203.cpp @@ -0,0 +1,82 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include +#include +#include +#include + +namespace openrng { + +/** + * Initialize MT2203 generator. + * + * This initialization scheme operates according to the procedure + * described in: + * M. Matsumoto and T. Nishimura, + * "Mersenne Twister with improved initialization" + * http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/MT2002/emt2203ar.html + * Note that we always adopt the 'initialization by array' approach + * regardless of whether we have multiple seed values. + */ +int MT2203Generator::initialise( + const int64_t n, const unsigned int params[]) { + state.a = MT2203_PARAMS[brngId - VSL_BRNG_MT2203].a; + state.b = MT2203_PARAMS[brngId - VSL_BRNG_MT2203].b; + state.c = MT2203_PARAMS[brngId - VSL_BRNG_MT2203].c; + return mt_initialise_by_array(n, params, state.x.data()); +} + +uint32_t MT2203Generator::advance() { + // Step 1: compute next element of x + auto x = (state.x[N] & 0xffffffe0) | (state.x[N - 1] & 0x1f); + x = state.x[N - M] ^ ((x & 0x1) ? (x >> 1) ^ state.a : x >> 1); + + // Update x buffer + state.x.push_back(x); + + // Step 2: compute next element of y + auto y = x; + y ^= y >> 12; + y ^= (y << 7) & state.b; + y ^= (y << 15) & state.c; + y ^= y >> 18; + + return y; +} + +int MT2203Generator::fillBits(int64_t n, + uint32_t buffer[]) { + for (int i = 0; i < n; i++) { + buffer[i] = advance(); + } + return VSL_ERROR_OK; +} + +int MT2203Generator::fill(int64_t n, float buffer[]) { + for (int i = 0; i < n; i++) { + buffer[i] = (float)advance() / (float)(1ULL << 32); + } + return VSL_ERROR_OK; +} + +int MT2203Generator::fill(int64_t n, double buffer[]) { + for (int i = 0; i < n; i++) { + buffer[i] = (double)advance() / (double)(1ULL << 32); + } + return VSL_ERROR_OK; +} + +int MT2203Generator::setStride(uint64_t) { + return VSL_RNG_ERROR_LEAPFROG_UNSUPPORTED; +} + +int MT2203Generator::skipAhead(uint64_t, + const uint64_t[]) { + return VSL_RNG_ERROR_SKIPAHEADEX_UNSUPPORTED; +} +} // namespace openrng diff --git a/src/generic/generator/mt2203.hpp b/src/generic/generator/mt2203.hpp new file mode 100644 index 0000000..ff80021 --- /dev/null +++ b/src/generic/generator/mt2203.hpp @@ -0,0 +1,46 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include +#include + +namespace openrng { + +struct MT2203State { + constexpr static int64_t N = 69; + ring_buffer x = {}; + uint32_t a, b, c; +}; + +template class MT2203Generator {}; + +template <> +class MT2203Generator + : public CopyableGenerator { + + constexpr static int64_t N = MT2203State::N; + constexpr static int64_t M = 34; + + uint32_t advance(); + +public: + MT2203Generator(int64_t brng) : CopyableGenerator{brng} {} + + using CopyableGenerator::initialise; + int initialise(const int64_t, const unsigned int[]); + + int fillBits(int64_t n, uint32_t[]) final; + int fill(int64_t n, float[]) final; + int fill(int64_t n, double[]) final; + int setStride(uint64_t) final; + int skipAhead(uint64_t, const uint64_t[]) final; +}; + +} // namespace openrng diff --git a/src/generic/generator/mt2203_params.cpp b/src/generic/generator/mt2203_params.cpp new file mode 100644 index 0000000..60364de --- /dev/null +++ b/src/generic/generator/mt2203_params.cpp @@ -0,0 +1,6038 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include "mt2203_params.hpp" + +namespace openrng { + +const mt2203_param MT2203_PARAMS[6024] = { + {.a = 0xe0c30000, .b = 0x996ebf80, .c = 0xf7f78000}, + {.a = 0x96630001, .b = 0x3daaee80, .c = 0xefc50000}, + {.a = 0x8aaa0002, .b = 0x31d2ff80, .c = 0xeb750000}, + {.a = 0xc5a30003, .b = 0xbb6eef80, .c = 0xefd40000}, + {.a = 0xa6020004, .b = 0xb9d55e80, .c = 0x77d58000}, + {.a = 0x84b10005, .b = 0x4dae7780, .c = 0xeecb8000}, + {.a = 0xdf350006, .b = 0x66e97780, .c = 0xefc48000}, + {.a = 0x9a820007, .b = 0xbaacef80, .c = 0xefd58000}, + {.a = 0x93830008, .b = 0xddbedf80, .c = 0xf7ef8000}, + {.a = 0xa4360009, .b = 0xa6b4f780, .c = 0xefd58000}, + {.a = 0x84e2000a, .b = 0x5cb26e80, .c = 0xefdd8000}, + {.a = 0xc83e000b, .b = 0x36ff7b80, .c = 0xefd70000}, + {.a = 0xa742000c, .b = 0x5ad67680, .c = 0xefd58000}, + {.a = 0xff6d000d, .b = 0xd574ef80, .c = 0xeee58000}, + {.a = 0xc655000e, .b = 0xbad86e80, .c = 0xefd58000}, + {.a = 0xd6dd000f, .b = 0x32ad7780, .c = 0xefd78000}, + {.a = 0xa7740010, .b = 0x73655f80, .c = 0xf7cc8000}, + {.a = 0x99ec0011, .b = 0xdd5f7780, .c = 0xef6b0000}, + {.a = 0x9b6d0012, .b = 0x9b75bd80, .c = 0x77d50000}, + {.a = 0xc0770013, .b = 0x25577780, .c = 0xefd78000}, + {.a = 0xff0b0014, .b = 0x36b77780, .c = 0xefd58000}, + {.a = 0xeca60015, .b = 0xb9b45b80, .c = 0xf7d58000}, + {.a = 0x85ab0016, .b = 0x3dd55f80, .c = 0xf7b48000}, + {.a = 0xb5120017, .b = 0x9aac7780, .c = 0xefc78000}, + {.a = 0x886d0018, .b = 0x4d6fbd80, .c = 0xf7cb0000}, + {.a = 0xb91d0019, .b = 0xcd757f80, .c = 0xebd58000}, + {.a = 0xe263001a, .b = 0xd968f780, .c = 0xefc50000}, + {.a = 0xe480001b, .b = 0xdd537780, .c = 0x77ad8000}, + {.a = 0xa638001c, .b = 0xad64f780, .c = 0xf7d18000}, + {.a = 0xefb5001d, .b = 0x36b77f80, .c = 0xefdd8000}, + {.a = 0xd773001e, .b = 0x9cd45f80, .c = 0x77d50000}, + {.a = 0x8325001f, .b = 0x9aae7780, .c = 0xefc50000}, + {.a = 0xf1890020, .b = 0xcddbaf00, .c = 0x7bd58000}, + {.a = 0x99870021, .b = 0x6ea57f80, .c = 0xf7f48000}, + {.a = 0x9ffd0022, .b = 0xcd6cf780, .c = 0xefc58000}, + {.a = 0xc5d20023, .b = 0x32d6ff80, .c = 0xeb750000}, + {.a = 0xeae10024, .b = 0xccd35d80, .c = 0x77b68000}, + {.a = 0xcd1d0025, .b = 0xcd54b780, .c = 0x77958000}, + {.a = 0x9fd90026, .b = 0xe574ef80, .c = 0xded68000}, + {.a = 0xdfd40027, .b = 0xedff7780, .c = 0x77538000}, + {.a = 0xbfb50028, .b = 0x25eef780, .c = 0xef6b8000}, + {.a = 0x914b0029, .b = 0xdd577780, .c = 0xef7d0000}, + {.a = 0xa408002a, .b = 0x9d757700, .c = 0x77d78000}, + {.a = 0xda2a002b, .b = 0xcd757780, .c = 0xefdd8000}, + {.a = 0xdb85002c, .b = 0xd8bb7680, .c = 0xf7db8000}, + {.a = 0xf8c1002d, .b = 0xd4d16f80, .c = 0x7b4b8000}, + {.a = 0xf2ac002e, .b = 0x9aed7b80, .c = 0x77c58000}, + {.a = 0xd747002f, .b = 0xed5f6f00, .c = 0x7bcb8000}, + {.a = 0xa2610030, .b = 0xb2eeef80, .c = 0xef758000}, + {.a = 0xf79c0031, .b = 0x66ad7780, .c = 0xefce8000}, + {.a = 0xebc50032, .b = 0xa6a2ff80, .c = 0xebe90000}, + {.a = 0x96170033, .b = 0x33755d80, .c = 0xf7ee8000}, + {.a = 0xbd640034, .b = 0x5dd67780, .c = 0xefdc8000}, + {.a = 0xdc1b0035, .b = 0x35b6f780, .c = 0xefd58000}, + {.a = 0xdedf0036, .b = 0xa56ef780, .c = 0xefef8000}, + {.a = 0xbeb00037, .b = 0xb9d25e80, .c = 0x77f50000}, + {.a = 0xd9e20038, .b = 0xceaf7f80, .c = 0xebed0000}, + {.a = 0xd4600039, .b = 0xa56a7780, .c = 0x77d18000}, + {.a = 0x9a59003a, .b = 0x9c546d80, .c = 0xefd58000}, + {.a = 0x8ec8003b, .b = 0xdbb4f680, .c = 0xf7d58000}, + {.a = 0xe78e003c, .b = 0xcd277f80, .c = 0xe7d50000}, + {.a = 0xaabc003d, .b = 0x9b6f7780, .c = 0x77f58000}, + {.a = 0xcd86003e, .b = 0xcd757780, .c = 0xef650000}, + {.a = 0xc035003f, .b = 0xeb2d5d80, .c = 0x77f68000}, + {.a = 0xd3050040, .b = 0xcd56f780, .c = 0xeffb0000}, + {.a = 0xef690041, .b = 0x66a97780, .c = 0xefd58000}, + {.a = 0xe33f0042, .b = 0x5bd67680, .c = 0xefd58000}, + {.a = 0x908d0043, .b = 0xa6d76f00, .c = 0x7bcd8000}, + {.a = 0xd32b0044, .b = 0x3ba2ef80, .c = 0xeed58000}, + {.a = 0xe6640045, .b = 0x35bd7780, .c = 0xefe88000}, + {.a = 0xbee30046, .b = 0xea245d80, .c = 0x77ed8000}, + {.a = 0xf4a30047, .b = 0x26957780, .c = 0xefd68000}, + {.a = 0xca930048, .b = 0xb9b4df80, .c = 0xf7d50000}, + {.a = 0xdf0b0049, .b = 0x75d77f00, .c = 0xefeb8000}, + {.a = 0xb1ce004a, .b = 0xbaf45e80, .c = 0xf7d58000}, + {.a = 0xd941004b, .b = 0x5a95bf80, .c = 0xefdd8000}, + {.a = 0xfb32004c, .b = 0x2a776f80, .c = 0xeed28000}, + {.a = 0x89ce004d, .b = 0xbad35780, .c = 0x77978000}, + {.a = 0x8625004e, .b = 0xe7555f80, .c = 0x7b958000}, + {.a = 0x9342004f, .b = 0x25357780, .c = 0xef558000}, + {.a = 0xf6cd0050, .b = 0xb9dbb780, .c = 0x77958000}, + {.a = 0xf2b80051, .b = 0x736f5f80, .c = 0xf7d58000}, + {.a = 0x823c0052, .b = 0xa2bcef80, .c = 0xefd78000}, + {.a = 0xd6cc0053, .b = 0x76b57780, .c = 0xefe50000}, + {.a = 0x9e780054, .b = 0x66617780, .c = 0xf7cd8000}, + {.a = 0xb04c0055, .b = 0x755b7f80, .c = 0xeff78000}, + {.a = 0xc68f0056, .b = 0xb57eff80, .c = 0xf3eb8000}, + {.a = 0x897a0057, .b = 0x3256f780, .c = 0xeff50000}, + {.a = 0xcc1f0058, .b = 0xcd6ebf80, .c = 0xf7c58000}, + {.a = 0xb1db0059, .b = 0x347aef80, .c = 0xefed8000}, + {.a = 0xbd23005a, .b = 0x99a46780, .c = 0xeffd8000}, + {.a = 0xcfd5005b, .b = 0xbaaeef80, .c = 0xefc48000}, + {.a = 0x8ce5005c, .b = 0x926a7780, .c = 0x7fd68000}, + {.a = 0xa60d005d, .b = 0x9d975f80, .c = 0x77d58000}, + {.a = 0xe7f9005e, .b = 0x9c8d6d80, .c = 0x6fd58000}, + {.a = 0xc1d7005f, .b = 0x6db77f80, .c = 0xe7d68000}, + {.a = 0x81140060, .b = 0xbcbdb780, .c = 0xefd48000}, + {.a = 0xb1e40061, .b = 0xad76f780, .c = 0xf7db8000}, + {.a = 0xe23c0062, .b = 0x49ee7680, .c = 0xefcb8000}, + {.a = 0xc83d0063, .b = 0x33daf680, .c = 0xefe90000}, + {.a = 0xb8440064, .b = 0x9d656f80, .c = 0x7bd70000}, + {.a = 0x94750065, .b = 0x5dd67680, .c = 0xefcf0000}, + {.a = 0x858d0066, .b = 0x9ad7af80, .c = 0xefe50000}, + {.a = 0xddc20067, .b = 0xecfd6f80, .c = 0x7bd58000}, + {.a = 0x8dbf0068, .b = 0x6db77f80, .c = 0xe7e78000}, + {.a = 0xd4a10069, .b = 0xbbda6f80, .c = 0xef570000}, + {.a = 0xb910006a, .b = 0xbabf5e80, .c = 0x77d58000}, + {.a = 0xf38e006b, .b = 0x99777780, .c = 0x77d78000}, + {.a = 0xfa57006c, .b = 0xe66d6f00, .c = 0x7bd48000}, + {.a = 0xf13a006d, .b = 0x95de6e80, .c = 0xefd68000}, + {.a = 0xf380006e, .b = 0xa4e47b80, .c = 0xefb58000}, + {.a = 0xc03f006f, .b = 0xaabef780, .c = 0xe7e88000}, + {.a = 0xe2ac0070, .b = 0x29776f80, .c = 0xefd28000}, + {.a = 0xa30d0071, .b = 0xcaacdf80, .c = 0xf7c70000}, + {.a = 0xd38e0072, .b = 0xcd757f80, .c = 0xebed0000}, + {.a = 0xc2c20073, .b = 0xab74ef80, .c = 0xefe18000}, + {.a = 0xf8cd0074, .b = 0xbcba6e80, .c = 0xefd78000}, + {.a = 0xb6340075, .b = 0x22d6f680, .c = 0xeff50000}, + {.a = 0xa7770076, .b = 0x3562fe80, .c = 0xebf58000}, + {.a = 0xd61c0077, .b = 0xcd2f7f80, .c = 0xe7fb0000}, + {.a = 0xa8790078, .b = 0xdb777b80, .c = 0xf7e78000}, + {.a = 0xe6950079, .b = 0xecb4ef80, .c = 0xdfd50000}, + {.a = 0xa13c007a, .b = 0x55b26e80, .c = 0xefd58000}, + {.a = 0x8037007b, .b = 0xdd74ef80, .c = 0xefd78000}, + {.a = 0xd81c007c, .b = 0xd3277f80, .c = 0xe7b58000}, + {.a = 0x819e007d, .b = 0xdadd7780, .c = 0x77b58000}, + {.a = 0xb8ea007e, .b = 0x6aa57780, .c = 0xf7f78000}, + {.a = 0xdf79007f, .b = 0x6d6d7f80, .c = 0xe7d40000}, + {.a = 0x8c570080, .b = 0xcd6abd80, .c = 0x77c28000}, + {.a = 0x8e360081, .b = 0xcab6df80, .c = 0xf7d58000}, + {.a = 0xc6970082, .b = 0xdaa4ef80, .c = 0xefc58000}, + {.a = 0xf6430083, .b = 0x2ad56f80, .c = 0xef450000}, + {.a = 0xf63f0084, .b = 0x32bef780, .c = 0xefd58000}, + {.a = 0xa7e60085, .b = 0xc7c56f80, .c = 0xee928000}, + {.a = 0x89ac0086, .b = 0x6a746f80, .c = 0xefe58000}, + {.a = 0xfd8f0087, .b = 0xcdacdd80, .c = 0xf7f50000}, + {.a = 0xfc860088, .b = 0xce74df80, .c = 0xfbe58000}, + {.a = 0xb40a0089, .b = 0xb6955f80, .c = 0x7bce8000}, + {.a = 0x9c66008a, .b = 0x22557700, .c = 0xefcb8000}, + {.a = 0xd05c008b, .b = 0x736d6d80, .c = 0xeff58000}, + {.a = 0xc1fb008c, .b = 0x26c6e780, .c = 0xefad8000}, + {.a = 0xaeee008d, .b = 0xbcaaef80, .c = 0xeff48000}, + {.a = 0xdfd6008e, .b = 0xa6b4ff80, .c = 0xebd58000}, + {.a = 0xa7b3008f, .b = 0x65557780, .c = 0xefed8000}, + {.a = 0xc8230090, .b = 0x76b1bf80, .c = 0xfbd50000}, + {.a = 0xcc7d0091, .b = 0x6d677f80, .c = 0xf7f58000}, + {.a = 0xeb8b0092, .b = 0xccd35f80, .c = 0x77b58000}, + {.a = 0xeee80093, .b = 0x97d56f80, .c = 0x7b4b8000}, + {.a = 0xf5b80094, .b = 0xb4b4f780, .c = 0xefe48000}, + {.a = 0xda900095, .b = 0xbaa6ee80, .c = 0xefc58000}, + {.a = 0xfb700096, .b = 0x3ae2ef80, .c = 0xef558000}, + {.a = 0xedd80097, .b = 0x73765e80, .c = 0xf7d58000}, + {.a = 0xc5db0098, .b = 0xcd64f780, .c = 0xeff58000}, + {.a = 0xfb7b0099, .b = 0xaab6f780, .c = 0xe7fc8000}, + {.a = 0xc706009a, .b = 0xad746f80, .c = 0x7bd58000}, + {.a = 0xae03009b, .b = 0xd55cdf80, .c = 0xf7c70000}, + {.a = 0xf997009c, .b = 0x46d66e80, .c = 0xefc78000}, + {.a = 0xf48c009d, .b = 0x226d7780, .c = 0xefb58000}, + {.a = 0xfaa3009e, .b = 0xb2747780, .c = 0xefdb8000}, + {.a = 0x90ba009f, .b = 0xbbe6df80, .c = 0xf6cf8000}, + {.a = 0xe77500a0, .b = 0x326eff80, .c = 0xebdb8000}, + {.a = 0xcaae00a1, .b = 0xdeb77780, .c = 0xeffd8000}, + {.a = 0x968200a2, .b = 0xc5e6ef80, .c = 0xef478000}, + {.a = 0xfd0b00a3, .b = 0x66af7f80, .c = 0xebcd8000}, + {.a = 0xffab00a4, .b = 0x3972ef80, .c = 0xefd58000}, + {.a = 0xcae400a5, .b = 0x22bcef80, .c = 0xeedb8000}, + {.a = 0x8a9900a6, .b = 0xe5eced80, .c = 0xdfc48000}, + {.a = 0xf4e000a7, .b = 0xcd76f780, .c = 0xefe78000}, + {.a = 0xf0d700a8, .b = 0x35b6ef80, .c = 0xef758000}, + {.a = 0x9dd000a9, .b = 0x33b57380, .c = 0xefd88000}, + {.a = 0x9ee600aa, .b = 0xbaaedf80, .c = 0xf7cc8000}, + {.a = 0x9fc200ab, .b = 0x256b7780, .c = 0xf7d28000}, + {.a = 0x8bcd00ac, .b = 0xa6ec7780, .c = 0xef6f0000}, + {.a = 0xe37b00ad, .b = 0x72567780, .c = 0xeff70000}, + {.a = 0xe1ba00ae, .b = 0xb6b4f780, .c = 0xefd58000}, + {.a = 0xd3bd00af, .b = 0x4d747780, .c = 0xefd98000}, + {.a = 0xeefe00b0, .b = 0xb91ab780, .c = 0x77cc8000}, + {.a = 0xd5e900b1, .b = 0xcaa6df80, .c = 0xf7f58000}, + {.a = 0xb54600b2, .b = 0xb2acdf80, .c = 0xf7ec8000}, + {.a = 0x8fc200b3, .b = 0xbae4ef80, .c = 0xef858000}, + {.a = 0x83e900b4, .b = 0xdceb7780, .c = 0xef790000}, + {.a = 0x887600b5, .b = 0x724a6f80, .c = 0xefd58000}, + {.a = 0x9a9500b6, .b = 0xb7765f80, .c = 0x7be58000}, + {.a = 0x800f00b7, .b = 0x9d65af80, .c = 0x7bd50000}, + {.a = 0x944b00b8, .b = 0xcd757f80, .c = 0xebed0000}, + {.a = 0xd80000b9, .b = 0xdceb7780, .c = 0xefd10000}, + {.a = 0xa38200ba, .b = 0x2ab6ee80, .c = 0xefd50000}, + {.a = 0xb79600bb, .b = 0xdcbf7780, .c = 0xefd58000}, + {.a = 0xaa1600bc, .b = 0x37aaf780, .c = 0xef758000}, + {.a = 0xf86300bd, .b = 0x89547780, .c = 0xefd70000}, + {.a = 0x883600be, .b = 0xd96b7780, .c = 0xefc90000}, + {.a = 0xf52d00bf, .b = 0xeb655b80, .c = 0x77b58000}, + {.a = 0xc49a00c0, .b = 0xa75baf80, .c = 0x7b978000}, + {.a = 0x8f2100c1, .b = 0x6ebf7f80, .c = 0xf7d58000}, + {.a = 0xd04600c2, .b = 0x2afd7700, .c = 0xf7d58000}, + {.a = 0xbf9700c3, .b = 0x66957f80, .c = 0xebef8000}, + {.a = 0xece600c4, .b = 0xd9b37780, .c = 0xf7ee8000}, + {.a = 0xe65100c5, .b = 0x9d555d80, .c = 0x77cd0000}, + {.a = 0xb56d00c6, .b = 0x666d7b80, .c = 0xefd40000}, + {.a = 0xff3100c7, .b = 0x2b7cef80, .c = 0xeeee8000}, + {.a = 0x880e00c8, .b = 0xd6b6eb80, .c = 0xefd48000}, + {.a = 0xd06400c9, .b = 0x36b77780, .c = 0xefe58000}, + {.a = 0x9a4d00ca, .b = 0xbcdc6e80, .c = 0xefb58000}, + {.a = 0xa60200cb, .b = 0x9c755d80, .c = 0x77d50000}, + {.a = 0xae9800cc, .b = 0x76d57780, .c = 0xefd70000}, + {.a = 0x969e00cd, .b = 0x3256f780, .c = 0xeff50000}, + {.a = 0xc1e500ce, .b = 0xc546ef80, .c = 0xefd78000}, + {.a = 0xa66500cf, .b = 0xe7e55f80, .c = 0x7b558000}, + {.a = 0xbe9d00d0, .b = 0xd96b7f80, .c = 0xefdd0000}, + {.a = 0xde7700d1, .b = 0xbb74ef80, .c = 0xeed38000}, + {.a = 0xc6ef00d2, .b = 0x22eef780, .c = 0xef7b8000}, + {.a = 0x971300d3, .b = 0x25a57780, .c = 0xf7c88000}, + {.a = 0x87b500d4, .b = 0x3956ef00, .c = 0xefc58000}, + {.a = 0xf32500d5, .b = 0xbab4df00, .c = 0xf7d58000}, + {.a = 0xbfd300d6, .b = 0x26eaf780, .c = 0xef5d8000}, + {.a = 0xc42500d7, .b = 0x2a6d7780, .c = 0xf7e98000}, + {.a = 0x862800d8, .b = 0xeb1eb780, .c = 0x77d58000}, + {.a = 0x8e6c00d9, .b = 0x6d757f80, .c = 0xe7e08000}, + {.a = 0xed0b00da, .b = 0xb6eef700, .c = 0xefcc8000}, + {.a = 0xe7e500db, .b = 0xb9f55f80, .c = 0x77570000}, + {.a = 0xdb8d00dc, .b = 0xedf67780, .c = 0x77558000}, + {.a = 0xc78200dd, .b = 0x7a556f80, .c = 0xefcd8000}, + {.a = 0x959000de, .b = 0xcd757f80, .c = 0xe7ed8000}, + {.a = 0xd80f00df, .b = 0x9b555d80, .c = 0x77d50000}, + {.a = 0xeea900e0, .b = 0x5d5db780, .c = 0xefdb8000}, + {.a = 0xb77500e1, .b = 0xcd356f80, .c = 0xefd50000}, + {.a = 0xc74a00e2, .b = 0xceaedf80, .c = 0xf7f58000}, + {.a = 0x8a1500e3, .b = 0x6aa17780, .c = 0xf7f58000}, + {.a = 0xbbb500e4, .b = 0x99657780, .c = 0x77d78000}, + {.a = 0xfcc300e5, .b = 0x75697f80, .c = 0xeffd8000}, + {.a = 0xab0c00e6, .b = 0x316eff80, .c = 0xebc48000}, + {.a = 0xdef100e7, .b = 0xb56c7780, .c = 0xefcb8000}, + {.a = 0xfc9a00e8, .b = 0xe9b4e780, .c = 0xdfed8000}, + {.a = 0x962b00e9, .b = 0xd5757380, .c = 0x77d58000}, + {.a = 0xc05e00ea, .b = 0x73555f80, .c = 0xf7d48000}, + {.a = 0x846b00eb, .b = 0xd5737f80, .c = 0xe7d50000}, + {.a = 0xd9c100ec, .b = 0x266ef780, .c = 0xefed8000}, + {.a = 0xc5fb00ed, .b = 0x6d777f80, .c = 0xe7d58000}, + {.a = 0xf07100ee, .b = 0xb2d67700, .c = 0xefd78000}, + {.a = 0xab1500ef, .b = 0xb2b6ef80, .c = 0xefd50000}, + {.a = 0xdc8900f0, .b = 0xd9757780, .c = 0xefd78000}, + {.a = 0xdf0d00f1, .b = 0x256eff80, .c = 0xebc50000}, + {.a = 0xec4700f2, .b = 0xed74bf80, .c = 0x7bd50000}, + {.a = 0xc8f400f3, .b = 0x7b595f80, .c = 0xf7c58000}, + {.a = 0xc2a600f4, .b = 0xeafd7680, .c = 0x77d58000}, + {.a = 0x989800f5, .b = 0x2b956f80, .c = 0xeecf8000}, + {.a = 0xfaa000f6, .b = 0x9d135d80, .c = 0x77c98000}, + {.a = 0xa8df00f7, .b = 0x9b73bf80, .c = 0xf7d58000}, + {.a = 0xf82900f8, .b = 0xbae6df80, .c = 0xf7558000}, + {.a = 0xfa5e00f9, .b = 0xad64f780, .c = 0xf7c98000}, + {.a = 0x9a3a00fa, .b = 0x9b726e80, .c = 0xefd70000}, + {.a = 0xe11600fb, .b = 0xb9555f80, .c = 0x76eb0000}, + {.a = 0x921300fc, .b = 0x9c986e80, .c = 0xefdd0000}, + {.a = 0xe45c00fd, .b = 0xd9b77f80, .c = 0xf3d58000}, + {.a = 0xcea900fe, .b = 0xcdaaef80, .c = 0xeee58000}, + {.a = 0xbaea00ff, .b = 0x2686f700, .c = 0xefd58000}, + {.a = 0xaa100100, .b = 0x6eb57f80, .c = 0xf7d08000}, + {.a = 0xcb3b0101, .b = 0x76957780, .c = 0xefd48000}, + {.a = 0x990a0102, .b = 0xa6e76e80, .c = 0x7bc98000}, + {.a = 0xf2de0103, .b = 0xdaed7780, .c = 0x77578000}, + {.a = 0xe07d0104, .b = 0xdabcf780, .c = 0xefeb0000}, + {.a = 0x88ef0105, .b = 0xa66d6f80, .c = 0x7bf40000}, + {.a = 0xd3b20106, .b = 0x33b55f80, .c = 0xf5d70000}, + {.a = 0xa5eb0107, .b = 0xb9b45e80, .c = 0xf7d78000}, + {.a = 0xbda70108, .b = 0xc5a56f80, .c = 0xee858000}, + {.a = 0xda8f0109, .b = 0x2654f680, .c = 0xefd50000}, + {.a = 0xee0a010a, .b = 0xb2aedf80, .c = 0xf7d48000}, + {.a = 0x8a64010b, .b = 0x65677f80, .c = 0xebd78000}, + {.a = 0xac76010c, .b = 0xbbb55d80, .c = 0x77958000}, + {.a = 0xa6d5010d, .b = 0xf2376f00, .c = 0x6fd58000}, + {.a = 0xbc09010e, .b = 0xdcad6f80, .c = 0xefd48000}, + {.a = 0xd975010f, .b = 0xcd717f80, .c = 0xebef8000}, + {.a = 0xbc330110, .b = 0xbb5cef80, .c = 0xef958000}, + {.a = 0xc4980111, .b = 0x3ddeef80, .c = 0xef758000}, + {.a = 0xdcc80112, .b = 0x29f56e80, .c = 0xefd58000}, + {.a = 0x8d430113, .b = 0x626a7680, .c = 0xeff98000}, + {.a = 0xba280114, .b = 0x26957f80, .c = 0xeffd8000}, + {.a = 0xf78e0115, .b = 0x3656f780, .c = 0xef9d8000}, + {.a = 0xd28f0116, .b = 0x99697780, .c = 0x77f70000}, + {.a = 0xee450117, .b = 0x256d7780, .c = 0xf7d58000}, + {.a = 0xdde80118, .b = 0xca94f780, .c = 0xefc58000}, + {.a = 0x82370119, .b = 0x7b657f80, .c = 0xf7d58000}, + {.a = 0xe8c0011a, .b = 0x26f6f680, .c = 0xefd50000}, + {.a = 0xe371011b, .b = 0xd7776f80, .c = 0x7bad8000}, + {.a = 0xbe76011c, .b = 0xdd937780, .c = 0xefca8000}, + {.a = 0xe255011d, .b = 0x95b35f80, .c = 0x77e58000}, + {.a = 0xa67f011e, .b = 0xdbed7780, .c = 0x775f8000}, + {.a = 0xa923011f, .b = 0x36ad7780, .c = 0xefce8000}, + {.a = 0xbecd0120, .b = 0xeeb4bf80, .c = 0x77d58000}, + {.a = 0x9f900121, .b = 0x8e55af80, .c = 0x7bd50000}, + {.a = 0xdf8a0122, .b = 0x9d3e6e80, .c = 0xefd78000}, + {.a = 0x84ef0123, .b = 0xbaaeef80, .c = 0xefd48000}, + {.a = 0xd0e00124, .b = 0xdd64f780, .c = 0xf7d58000}, + {.a = 0x95da0125, .b = 0xdd6f7780, .c = 0xefd70000}, + {.a = 0xfd1c0126, .b = 0xdab4f780, .c = 0xf7d58000}, + {.a = 0x85220127, .b = 0x749e7680, .c = 0xefcb0000}, + {.a = 0xb0e20128, .b = 0x26a2ff00, .c = 0xebef8000}, + {.a = 0xc2960129, .b = 0x2ab77780, .c = 0xf7eb0000}, + {.a = 0x9d53012a, .b = 0xd2b4ef80, .c = 0xeff30000}, + {.a = 0xdfe4012b, .b = 0xcd56f780, .c = 0xefea8000}, + {.a = 0xdb84012c, .b = 0xeafd7780, .c = 0x77d58000}, + {.a = 0xbd7f012d, .b = 0xa76c6f80, .c = 0x7bd58000}, + {.a = 0xf40c012e, .b = 0xbbdc5d80, .c = 0xf7d68000}, + {.a = 0xe422012f, .b = 0x29f56e80, .c = 0xefd58000}, + {.a = 0x981f0130, .b = 0xed37bf80, .c = 0xbbd50000}, + {.a = 0xcd940131, .b = 0x3d76ee80, .c = 0xefdd0000}, + {.a = 0xa2730132, .b = 0x76d57780, .c = 0xefe58000}, + {.a = 0xb09e0133, .b = 0xed74bf80, .c = 0x77d70000}, + {.a = 0xaf870134, .b = 0xb4b35b80, .c = 0x7bd58000}, + {.a = 0xeada0135, .b = 0x2666f700, .c = 0xefd58000}, + {.a = 0x98000136, .b = 0x75557780, .c = 0xefc78000}, + {.a = 0xaeda0137, .b = 0x75ae7780, .c = 0xefcd0000}, + {.a = 0xce3f0138, .b = 0x9bacbb80, .c = 0xf7c48000}, + {.a = 0xa1fc0139, .b = 0xd574ef80, .c = 0xefe58000}, + {.a = 0xce9f013a, .b = 0xdaf6df80, .c = 0xf7d48000}, + {.a = 0xb93b013b, .b = 0xaa747780, .c = 0x77ad8000}, + {.a = 0xe75d013c, .b = 0xbb9c6e80, .c = 0xefd58000}, + {.a = 0xb6c6013d, .b = 0xad74f780, .c = 0xf7d58000}, + {.a = 0xde21013e, .b = 0x73556f80, .c = 0xefd58000}, + {.a = 0xdcb2013f, .b = 0x75b67780, .c = 0xefd50000}, + {.a = 0xb4ff0140, .b = 0xcdb7bf80, .c = 0x77d58000}, + {.a = 0xf1830141, .b = 0xb953b780, .c = 0x77978000}, + {.a = 0xb0c90142, .b = 0x66b57780, .c = 0xefe58000}, + {.a = 0xd2bd0143, .b = 0x26eef680, .c = 0xefed8000}, + {.a = 0xf34e0144, .b = 0xdd54f780, .c = 0xefff0000}, + {.a = 0xf6a80145, .b = 0x8dac6f80, .c = 0xefd68000}, + {.a = 0xa9c40146, .b = 0xb9d55f80, .c = 0x77570000}, + {.a = 0xfa680147, .b = 0xceb57f80, .c = 0xebd40000}, + {.a = 0xf84c0148, .b = 0x73555f00, .c = 0xf7d48000}, + {.a = 0xf4e90149, .b = 0xcd74f780, .c = 0xefd58000}, + {.a = 0xf57e014a, .b = 0x9d7a7780, .c = 0x77d28000}, + {.a = 0xf03f014b, .b = 0x97756f80, .c = 0x7be50000}, + {.a = 0x9c41014c, .b = 0xacbd7b80, .c = 0x77e58000}, + {.a = 0xb91c014d, .b = 0xb5a45f80, .c = 0x7bca0000}, + {.a = 0xc039014e, .b = 0xcb455f80, .c = 0x77958000}, + {.a = 0xdb8d014f, .b = 0xec757580, .c = 0x77d58000}, + {.a = 0x88b70150, .b = 0xb57eff80, .c = 0xf3eb8000}, + {.a = 0xebed0151, .b = 0xcd76f780, .c = 0xefdd8000}, + {.a = 0xa3430152, .b = 0xbb54df00, .c = 0xf7d48000}, + {.a = 0xb4250153, .b = 0xeafe7780, .c = 0x77558000}, + {.a = 0xf47c0154, .b = 0xaf74f780, .c = 0xf7ad8000}, + {.a = 0xcba20155, .b = 0x6dad7f80, .c = 0xf7cc8000}, + {.a = 0xa3ec0156, .b = 0xbb94dd80, .c = 0xf7d78000}, + {.a = 0xac890157, .b = 0xdd6d7780, .c = 0xf7da8000}, + {.a = 0xc26d0158, .b = 0x35757780, .c = 0xefe50000}, + {.a = 0x97cd0159, .b = 0xd57b6f80, .c = 0x7fe58000}, + {.a = 0xe2a5015a, .b = 0xdcb2df80, .c = 0xf7ec8000}, + {.a = 0xf928015b, .b = 0x2a7b6f80, .c = 0xeed68000}, + {.a = 0xf42a015c, .b = 0xddaf7780, .c = 0xefca8000}, + {.a = 0xe24d015d, .b = 0x355d7780, .c = 0xefce8000}, + {.a = 0xc22f015e, .b = 0xcfd57700, .c = 0xeddd8000}, + {.a = 0xc5e0015f, .b = 0xaa7d7700, .c = 0x77d78000}, + {.a = 0xc5a80160, .b = 0x36b97780, .c = 0xefd28000}, + {.a = 0xab830161, .b = 0x23f4ef80, .c = 0xeda78000}, + {.a = 0xcfa00162, .b = 0x33755f80, .c = 0xf6d38000}, + {.a = 0x81200163, .b = 0xd6b6f780, .c = 0xefd58000}, + {.a = 0xf9480164, .b = 0xccaf7780, .c = 0xeeee8000}, + {.a = 0xb4790165, .b = 0xcd74f780, .c = 0xefdd8000}, + {.a = 0xf66d0166, .b = 0x2aef7780, .c = 0xe7db0000}, + {.a = 0x839b0167, .b = 0x33657f80, .c = 0xe7d50000}, + {.a = 0xa2f80168, .b = 0x6a957f80, .c = 0xe7f58000}, + {.a = 0xd1690169, .b = 0x26997780, .c = 0xefd58000}, + {.a = 0x9d20016a, .b = 0xcb777780, .c = 0xef528000}, + {.a = 0x8089016b, .b = 0xdeb2f780, .c = 0xeffe8000}, + {.a = 0xc0e2016c, .b = 0x36b6f780, .c = 0xefd50000}, + {.a = 0xed16016d, .b = 0x5d8e7680, .c = 0xefcb8000}, + {.a = 0xebc8016e, .b = 0xb956ef80, .c = 0xefb78000}, + {.a = 0xe5ef016f, .b = 0xa2aef780, .c = 0xeff88000}, + {.a = 0x9c5c0170, .b = 0x76b57780, .c = 0xefd50000}, + {.a = 0x8c710171, .b = 0x76bd7f80, .c = 0xefd60000}, + {.a = 0xb3870172, .b = 0xdd577780, .c = 0xefd58000}, + {.a = 0xc7cf0173, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0xf5ae0174, .b = 0x6f7d7780, .c = 0xf7d18000}, + {.a = 0xd4f50175, .b = 0x26af7780, .c = 0xf7cf8000}, + {.a = 0xc5ce0176, .b = 0x755b7f80, .c = 0xeff78000}, + {.a = 0x99c80177, .b = 0x9d656b80, .c = 0x7bd78000}, + {.a = 0xb1cc0178, .b = 0xcd777f80, .c = 0xebef0000}, + {.a = 0xec1f0179, .b = 0xd6b4f780, .c = 0xefd58000}, + {.a = 0xf7b4017a, .b = 0x36bf7b80, .c = 0xefd70000}, + {.a = 0xb776017b, .b = 0x3596ff80, .c = 0xeb758000}, + {.a = 0xdfc6017c, .b = 0x72b57780, .c = 0xefd50000}, + {.a = 0xa280017d, .b = 0x66a97780, .c = 0xefe48000}, + {.a = 0xc943017e, .b = 0xa6a6ff80, .c = 0xebec8000}, + {.a = 0xb7a1017f, .b = 0xd28d6f80, .c = 0xefda8000}, + {.a = 0xe07b0180, .b = 0x25557780, .c = 0xefdf8000}, + {.a = 0xed520181, .b = 0x66b57f80, .c = 0xebd58000}, + {.a = 0xa4510182, .b = 0xceeeaf80, .c = 0x7bca8000}, + {.a = 0xaf8c0183, .b = 0x99777780, .c = 0x77d78000}, + {.a = 0xc3770184, .b = 0xbab4ef00, .c = 0xefd38000}, + {.a = 0x9dcd0185, .b = 0xd56aef80, .c = 0xefe58000}, + {.a = 0xbdc40186, .b = 0xddab7780, .c = 0xefda0000}, + {.a = 0xb3f80187, .b = 0xcbacdd80, .c = 0xf7d50000}, + {.a = 0x8e530188, .b = 0x2cd37f00, .c = 0xf7f78000}, + {.a = 0xa1720189, .b = 0xced4b700, .c = 0xf7db8000}, + {.a = 0xf110018a, .b = 0xbaa6df80, .c = 0xf7cf0000}, + {.a = 0xe8fd018b, .b = 0x66f67680, .c = 0xefd50000}, + {.a = 0x8caa018c, .b = 0x755e7780, .c = 0xefcd0000}, + {.a = 0xfafa018d, .b = 0xdd577780, .c = 0xef6f0000}, + {.a = 0xf5dc018e, .b = 0xa96d7780, .c = 0x77f10000}, + {.a = 0xc39a018f, .b = 0xbcd55d80, .c = 0x77d58000}, + {.a = 0xe7fb0190, .b = 0x9d6f9f80, .c = 0x7bce8000}, + {.a = 0xf3f30191, .b = 0xdeb77780, .c = 0xeffd8000}, + {.a = 0x86b50192, .b = 0xccaabf80, .c = 0xf7e58000}, + {.a = 0xb6620193, .b = 0xd4f56f80, .c = 0x7baf8000}, + {.a = 0xcc290194, .b = 0xda5d7780, .c = 0x77b78000}, + {.a = 0xbc690195, .b = 0xbba4dd80, .c = 0xf7d70000}, + {.a = 0xebcc0196, .b = 0xe7645e80, .c = 0x7bd58000}, + {.a = 0x830f0197, .b = 0xcef4d700, .c = 0xf7df8000}, + {.a = 0x93340198, .b = 0x34baf780, .c = 0xef510000}, + {.a = 0xd5ad0199, .b = 0xdd76f780, .c = 0xf7d68000}, + {.a = 0x8469019a, .b = 0x32f77680, .c = 0xefd58000}, + {.a = 0xb28e019b, .b = 0x37657f80, .c = 0xeedd8000}, + {.a = 0xee40019c, .b = 0xdcb2df80, .c = 0xf7ed0000}, + {.a = 0xbe69019d, .b = 0x325ef780, .c = 0xeff50000}, + {.a = 0xe2b2019e, .b = 0x992a7580, .c = 0x6fc10000}, + {.a = 0x8f18019f, .b = 0x32b75f80, .c = 0xf7d58000}, + {.a = 0xf51d01a0, .b = 0xbad5bf80, .c = 0x77b78000}, + {.a = 0xa1c701a1, .b = 0x2b7aef80, .c = 0xeeec8000}, + {.a = 0xf55f01a2, .b = 0x4dd67e80, .c = 0xebf38000}, + {.a = 0xa13401a3, .b = 0xcdbd7780, .c = 0xeeea8000}, + {.a = 0x96e101a4, .b = 0x3286f780, .c = 0xefe58000}, + {.a = 0xc73d01a5, .b = 0x31d2ff00, .c = 0xebd58000}, + {.a = 0x9fd001a6, .b = 0x76bd7b80, .c = 0xeff58000}, + {.a = 0x8d8c01a7, .b = 0xdd72f780, .c = 0xf7d68000}, + {.a = 0xacff01a8, .b = 0x6d2f7f80, .c = 0xf7e60000}, + {.a = 0xe8bd01a9, .b = 0xcd677f80, .c = 0xebd58000}, + {.a = 0x935301aa, .b = 0x65697f80, .c = 0xebfd8000}, + {.a = 0xef7301ab, .b = 0x256d7700, .c = 0xf7d78000}, + {.a = 0xa99101ac, .b = 0xd26f7f80, .c = 0xe7d50000}, + {.a = 0xb39001ad, .b = 0xdadd7780, .c = 0x77b48000}, + {.a = 0xa67901ae, .b = 0x3656f700, .c = 0xefd68000}, + {.a = 0xe52001af, .b = 0xbc545e80, .c = 0xf7f50000}, + {.a = 0xcd0001b0, .b = 0x3246f780, .c = 0xefe50000}, + {.a = 0x9d5101b1, .b = 0xc976f700, .c = 0xefd28000}, + {.a = 0x989401b2, .b = 0x66e97f80, .c = 0xf3f58000}, + {.a = 0x97d901b3, .b = 0x669d7f80, .c = 0xebed8000}, + {.a = 0xcfcd01b4, .b = 0xedfd6f80, .c = 0x7bd58000}, + {.a = 0xb1af01b5, .b = 0xbb4eef00, .c = 0xefd48000}, + {.a = 0x871901b6, .b = 0xde44f780, .c = 0xefee8000}, + {.a = 0x82fb01b7, .b = 0x55dc6f80, .c = 0xef978000}, + {.a = 0xac0601b8, .b = 0x66ad7780, .c = 0xefca8000}, + {.a = 0xcd1d01b9, .b = 0x66ad7f80, .c = 0xefd48000}, + {.a = 0x87d801ba, .b = 0x24a57780, .c = 0xf7c88000}, + {.a = 0xa7f701bb, .b = 0x9df45d80, .c = 0xf7d50000}, + {.a = 0x96d601bc, .b = 0x72567700, .c = 0xefd48000}, + {.a = 0xb58c01bd, .b = 0xd5776f80, .c = 0xefd60000}, + {.a = 0x864101be, .b = 0x668d7f80, .c = 0xebff8000}, + {.a = 0x82bd01bf, .b = 0x32b77780, .c = 0xefd58000}, + {.a = 0x9b8c01c0, .b = 0x9de3b680, .c = 0xf7c88000}, + {.a = 0xd39801c1, .b = 0xdba4f680, .c = 0xf7c90000}, + {.a = 0xd82a01c2, .b = 0x72357f80, .c = 0xe7770000}, + {.a = 0xdd8601c3, .b = 0xd9d77780, .c = 0x774d8000}, + {.a = 0xfaeb01c4, .b = 0xbaa4df80, .c = 0xf7d50000}, + {.a = 0xc44201c5, .b = 0xd5756f80, .c = 0xeed70000}, + {.a = 0xbf8301c6, .b = 0x62be6f80, .c = 0xef958000}, + {.a = 0xda2901c7, .b = 0x65ae7780, .c = 0xefcb8000}, + {.a = 0xda0c01c8, .b = 0xbaf6af80, .c = 0xdf758000}, + {.a = 0x81e501c9, .b = 0x33b55f80, .c = 0xf5d48000}, + {.a = 0x811801ca, .b = 0x72b57780, .c = 0xefd50000}, + {.a = 0xd8de01cb, .b = 0x4dd67e80, .c = 0xebd30000}, + {.a = 0xcb2701cc, .b = 0xb3547700, .c = 0xefdd8000}, + {.a = 0xcd1a01cd, .b = 0x2624f700, .c = 0xefd78000}, + {.a = 0x946f01ce, .b = 0x49fa7680, .c = 0xefed0000}, + {.a = 0xb0e601cf, .b = 0xaf72f780, .c = 0xf7d78000}, + {.a = 0xd3ad01d0, .b = 0xc96af780, .c = 0xefc58000}, + {.a = 0xa10b01d1, .b = 0x2bb2dd80, .c = 0xf7d58000}, + {.a = 0x8f9b01d2, .b = 0x7b555f80, .c = 0xf7d48000}, + {.a = 0xce5d01d3, .b = 0x9965b780, .c = 0x77d70000}, + {.a = 0xf3e001d4, .b = 0x32555f80, .c = 0xf7d58000}, + {.a = 0xc8a201d5, .b = 0xd6f56f80, .c = 0x7bd58000}, + {.a = 0xaf0a01d6, .b = 0x97756f80, .c = 0x7bd78000}, + {.a = 0xfdc801d7, .b = 0xd5577780, .c = 0xf7f58000}, + {.a = 0x811b01d8, .b = 0xeed5bf80, .c = 0xb7958000}, + {.a = 0xaa8b01d9, .b = 0x2ba0ef80, .c = 0xedcb8000}, + {.a = 0xe1d601da, .b = 0x3dbeee80, .c = 0xefd70000}, + {.a = 0x9b7a01db, .b = 0xd67d6f80, .c = 0x7bd58000}, + {.a = 0xd59501dc, .b = 0x31b57780, .c = 0xefd10000}, + {.a = 0xff8301dd, .b = 0xcba57780, .c = 0xeec68000}, + {.a = 0xd07301de, .b = 0x6ea17780, .c = 0xf7d58000}, + {.a = 0xaa4301df, .b = 0xbc546e80, .c = 0xefd58000}, + {.a = 0xceaf01e0, .b = 0x9aacbf80, .c = 0xf7f78000}, + {.a = 0xee5601e1, .b = 0x25f77f80, .c = 0xf7558000}, + {.a = 0xe1da01e2, .b = 0x6d757f80, .c = 0xe7e08000}, + {.a = 0xe7f501e3, .b = 0xa6eb6f00, .c = 0x7bd78000}, + {.a = 0xece601e4, .b = 0x66bd7f80, .c = 0xebd48000}, + {.a = 0xedbd01e5, .b = 0x72867680, .c = 0xefeb0000}, + {.a = 0xf02501e6, .b = 0x94bf6f80, .c = 0x7bd50000}, + {.a = 0xf91601e7, .b = 0xb775bd80, .c = 0x7bd78000}, + {.a = 0x962801e8, .b = 0xcd74ef80, .c = 0xefd78000}, + {.a = 0x82aa01e9, .b = 0x355eef00, .c = 0xefd58000}, + {.a = 0xa1bc01ea, .b = 0x34f57b80, .c = 0xe7a58000}, + {.a = 0xa8f801eb, .b = 0xdd74ed80, .c = 0xefd58000}, + {.a = 0xbf6501ec, .b = 0xdd6f7780, .c = 0xefcb0000}, + {.a = 0xfd1501ed, .b = 0x72b67780, .c = 0xefed8000}, + {.a = 0xd9dc01ee, .b = 0xa52ef780, .c = 0xefcf0000}, + {.a = 0xc5bb01ef, .b = 0xbd72ef80, .c = 0xefd58000}, + {.a = 0xa18e01f0, .b = 0x2676ee80, .c = 0xefd50000}, + {.a = 0xb8e601f1, .b = 0xbb68ef80, .c = 0xefcd8000}, + {.a = 0xe06801f2, .b = 0xcd64df80, .c = 0xf7ed8000}, + {.a = 0x846f01f3, .b = 0x35d6f700, .c = 0xef558000}, + {.a = 0x817e01f4, .b = 0x2a356f80, .c = 0xeed58000}, + {.a = 0x987f01f5, .b = 0xcd777780, .c = 0xefed8000}, + {.a = 0xa60a01f6, .b = 0x9a757700, .c = 0x77d18000}, + {.a = 0xee1d01f7, .b = 0x9dd65f80, .c = 0x7bd48000}, + {.a = 0x918701f8, .b = 0x736d7f80, .c = 0xe77d0000}, + {.a = 0xd79101f9, .b = 0x66957780, .c = 0xeff58000}, + {.a = 0xe40701fa, .b = 0x22ef7780, .c = 0xeff78000}, + {.a = 0xdc8401fb, .b = 0x35f6f780, .c = 0xef558000}, + {.a = 0x9e5e01fc, .b = 0xdceb7700, .c = 0xefd18000}, + {.a = 0xab3601fd, .b = 0xaafc7780, .c = 0xf7578000}, + {.a = 0xe98101fe, .b = 0xdd6b7780, .c = 0xefd38000}, + {.a = 0xd03a01ff, .b = 0x63ac7780, .c = 0xedf68000}, + {.a = 0xf0da0200, .b = 0xaef5bf80, .c = 0x7b578000}, + {.a = 0xaf480201, .b = 0xdd577780, .c = 0xef750000}, + {.a = 0x85970202, .b = 0x6d677f80, .c = 0xf7f58000}, + {.a = 0x8d290203, .b = 0x4bfa7780, .c = 0xedee8000}, + {.a = 0xabfb0204, .b = 0xadd4f780, .c = 0xf7a98000}, + {.a = 0xbc3f0205, .b = 0xdd577700, .c = 0xefd78000}, + {.a = 0xce590206, .b = 0xd6f46f80, .c = 0x6f638000}, + {.a = 0xba4d0207, .b = 0x6d757f80, .c = 0xebd48000}, + {.a = 0xec330208, .b = 0xb574ff80, .c = 0xf3ed8000}, + {.a = 0xe9ed0209, .b = 0x59547780, .c = 0xedd68000}, + {.a = 0xf71f020a, .b = 0x26957780, .c = 0xefd68000}, + {.a = 0x8a96020b, .b = 0x5d967680, .c = 0xefdb8000}, + {.a = 0xeefe020c, .b = 0xeeff7700, .c = 0x77d38000}, + {.a = 0xe351020d, .b = 0x2a956f80, .c = 0xefd38000}, + {.a = 0xc029020e, .b = 0x752f7780, .c = 0xefc68000}, + {.a = 0xcd30020f, .b = 0xdaaf7f80, .c = 0xf7ce8000}, + {.a = 0xa2e50210, .b = 0xea5ce700, .c = 0xdfd48000}, + {.a = 0xe7090211, .b = 0xdd72ef80, .c = 0xefdf0000}, + {.a = 0xfe600212, .b = 0xea557780, .c = 0x77ab8000}, + {.a = 0xc7170213, .b = 0xbda6dd80, .c = 0xf7f70000}, + {.a = 0x890c0214, .b = 0xa6aef780, .c = 0xefed8000}, + {.a = 0xbb460215, .b = 0x3adeef80, .c = 0xefb58000}, + {.a = 0xb6e60216, .b = 0xceb57f80, .c = 0xe7e20000}, + {.a = 0xe1b30217, .b = 0xbb56ef80, .c = 0xedc58000}, + {.a = 0x81d50218, .b = 0x65ad7f80, .c = 0xebcd8000}, + {.a = 0xcaf90219, .b = 0xc4aaef80, .c = 0xefd18000}, + {.a = 0xd8f1021a, .b = 0xce555f80, .c = 0x77958000}, + {.a = 0xf1e8021b, .b = 0x3696f780, .c = 0xef658000}, + {.a = 0xadfc021c, .b = 0xcceb7780, .c = 0xefc30000}, + {.a = 0xc2ce021d, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0x9e7e021e, .b = 0xa6a8f780, .c = 0xefc58000}, + {.a = 0xf28b021f, .b = 0xbbb45e80, .c = 0xf7d58000}, + {.a = 0x87a10220, .b = 0xdcbcdf80, .c = 0xf7ed8000}, + {.a = 0xecf10221, .b = 0x29b6ef80, .c = 0xeeeb8000}, + {.a = 0x80090222, .b = 0x32af7f80, .c = 0xe7f58000}, + {.a = 0xef360223, .b = 0x75966e80, .c = 0xefcd0000}, + {.a = 0xb2610224, .b = 0x36957780, .c = 0xefc68000}, + {.a = 0xe0ad0225, .b = 0x9b7c7580, .c = 0xefe98000}, + {.a = 0xed610226, .b = 0x2abd6f80, .c = 0xefd58000}, + {.a = 0xd1500227, .b = 0x2576f680, .c = 0xefd50000}, + {.a = 0xdd990228, .b = 0xbaa4ef80, .c = 0xefc58000}, + {.a = 0xb52f0229, .b = 0xcd737f80, .c = 0xebe50000}, + {.a = 0xb73d022a, .b = 0x34b57f80, .c = 0xe7d28000}, + {.a = 0xbc6a022b, .b = 0xe66d6f00, .c = 0x7bd78000}, + {.a = 0xbd19022c, .b = 0xeb545d80, .c = 0x77d58000}, + {.a = 0xad20022d, .b = 0x22fcf700, .c = 0xefd78000}, + {.a = 0xd72a022e, .b = 0xe65d6f80, .c = 0x7bb58000}, + {.a = 0xad93022f, .b = 0x9ae56f80, .c = 0x6fd78000}, + {.a = 0x958f0230, .b = 0xa76cff80, .c = 0xebfd8000}, + {.a = 0xa9520231, .b = 0x35557f80, .c = 0xe7e68000}, + {.a = 0xe2640232, .b = 0xd4b56f80, .c = 0xeed48000}, + {.a = 0xb7130233, .b = 0xdae77e80, .c = 0xf7f58000}, + {.a = 0xbdb80234, .b = 0x99377780, .c = 0x6ee58000}, + {.a = 0xf2680235, .b = 0xcabcf780, .c = 0xefcf8000}, + {.a = 0xccee0236, .b = 0x759e7780, .c = 0xefcb8000}, + {.a = 0xf0060237, .b = 0xd9e57780, .c = 0x77778000}, + {.a = 0xdd580238, .b = 0xd574f780, .c = 0xf7ed8000}, + {.a = 0xda790239, .b = 0x349aee80, .c = 0xefd50000}, + {.a = 0x9bf6023a, .b = 0x65757780, .c = 0xf7d58000}, + {.a = 0xdaa8023b, .b = 0xcda57f80, .c = 0xebd68000}, + {.a = 0xf173023c, .b = 0xed777b80, .c = 0x77b78000}, + {.a = 0xf6a6023d, .b = 0xa56c7780, .c = 0xefc58000}, + {.a = 0x85e2023e, .b = 0x66a67700, .c = 0xefd58000}, + {.a = 0xcb15023f, .b = 0x32a57780, .c = 0xefd78000}, + {.a = 0xb78b0240, .b = 0xf55f7780, .c = 0xdfed8000}, + {.a = 0xdec40241, .b = 0x676b7780, .c = 0xf7d78000}, + {.a = 0xa0f60242, .b = 0xdd6f7780, .c = 0xefd58000}, + {.a = 0x97cc0243, .b = 0xddecdf80, .c = 0xf7458000}, + {.a = 0xfbdb0244, .b = 0xbcaaef80, .c = 0xdb988000}, + {.a = 0xce4c0245, .b = 0xcdbcdd80, .c = 0xf7d58000}, + {.a = 0xe8a70246, .b = 0x35d6f700, .c = 0xefd58000}, + {.a = 0xee0c0247, .b = 0x75557f80, .c = 0xe7f50000}, + {.a = 0x905f0248, .b = 0x32d6ff80, .c = 0xeb778000}, + {.a = 0xcc830249, .b = 0x326d7700, .c = 0xefd98000}, + {.a = 0xc727024a, .b = 0xcd777f80, .c = 0xe7e68000}, + {.a = 0xd44f024b, .b = 0x95776f80, .c = 0x7bed0000}, + {.a = 0xbb38024c, .b = 0xbb96de80, .c = 0xf7d58000}, + {.a = 0x9cc8024d, .b = 0x754b7f80, .c = 0xe7e78000}, + {.a = 0xe590024e, .b = 0xdd52f780, .c = 0xf7b78000}, + {.a = 0x8d0d024f, .b = 0xb9a4d780, .c = 0xf76d8000}, + {.a = 0xaeba0250, .b = 0x7ad5bf80, .c = 0xf7b78000}, + {.a = 0xcaad0251, .b = 0xdd76f780, .c = 0xf7d68000}, + {.a = 0xbb8d0252, .b = 0xd5f77f80, .c = 0xe7650000}, + {.a = 0xde120253, .b = 0x9dd47700, .c = 0x77fa8000}, + {.a = 0xe5f70254, .b = 0x9ab47780, .c = 0x77d78000}, + {.a = 0xa5820255, .b = 0xf2b76b80, .c = 0x6fd48000}, + {.a = 0x824d0256, .b = 0xdd557780, .c = 0xeed58000}, + {.a = 0xa1370257, .b = 0x76ad7f80, .c = 0xefd78000}, + {.a = 0xfb800258, .b = 0xd97b7700, .c = 0xefcf8000}, + {.a = 0xee6c0259, .b = 0x379ef680, .c = 0xefed0000}, + {.a = 0xed40025a, .b = 0x67bb7f80, .c = 0xeed78000}, + {.a = 0xdba4025b, .b = 0x76b57f80, .c = 0xe7d40000}, + {.a = 0xbc2b025c, .b = 0xdcfb7780, .c = 0xef690000}, + {.a = 0xc5c5025d, .b = 0x366af780, .c = 0xefc50000}, + {.a = 0xf509025e, .b = 0xba64df80, .c = 0xf7d58000}, + {.a = 0x90db025f, .b = 0xaa7f7700, .c = 0x77d58000}, + {.a = 0x9b9a0260, .b = 0xaf64f780, .c = 0xf7d58000}, + {.a = 0xe7fe0261, .b = 0x3236f680, .c = 0xefe50000}, + {.a = 0xb8950262, .b = 0xdd74df80, .c = 0xf7e78000}, + {.a = 0xad720263, .b = 0xde8b7780, .c = 0xeff28000}, + {.a = 0xefb90264, .b = 0xbdf46f80, .c = 0xefa28000}, + {.a = 0xf98e0265, .b = 0xccf55d80, .c = 0x77d58000}, + {.a = 0xd8090266, .b = 0x32b57780, .c = 0xefe10000}, + {.a = 0xee880267, .b = 0x9ced5f80, .c = 0x7bfb8000}, + {.a = 0xd6550268, .b = 0xcd377f80, .c = 0xe7d58000}, + {.a = 0xf6830269, .b = 0x226ef680, .c = 0xeffb0000}, + {.a = 0xd9f2026a, .b = 0xdab2f780, .c = 0xf7d68000}, + {.a = 0x9fca026b, .b = 0xc6daef80, .c = 0xef878000}, + {.a = 0xfe51026c, .b = 0x9a8d7780, .c = 0x6feb8000}, + {.a = 0xc1b5026d, .b = 0xdd6f7780, .c = 0xefb58000}, + {.a = 0xafc3026e, .b = 0x76b77f80, .c = 0xebe50000}, + {.a = 0xbc63026f, .b = 0xda5d7780, .c = 0x77b58000}, + {.a = 0x992f0270, .b = 0xdab6f780, .c = 0xf7d28000}, + {.a = 0xd4070271, .b = 0xd974f700, .c = 0xf7de8000}, + {.a = 0xd9b20272, .b = 0xcdb4f780, .c = 0xefe10000}, + {.a = 0xadd70273, .b = 0xaff36f80, .c = 0x7b538000}, + {.a = 0xe59a0274, .b = 0x3256f780, .c = 0xeff50000}, + {.a = 0xaaa20275, .b = 0x7bbd6f80, .c = 0xef550000}, + {.a = 0xf4f80276, .b = 0xed56bd80, .c = 0x77d58000}, + {.a = 0xe5aa0277, .b = 0xcdaf7780, .c = 0xefda8000}, + {.a = 0x97460278, .b = 0xed76ef80, .c = 0xdfe58000}, + {.a = 0xc27f0279, .b = 0x36af5f80, .c = 0xf3f70000}, + {.a = 0xd32b027a, .b = 0x6da57f80, .c = 0xf7f48000}, + {.a = 0xf575027b, .b = 0x257d7780, .c = 0xefcb8000}, + {.a = 0xe391027c, .b = 0x22a97780, .c = 0xefd28000}, + {.a = 0xbdb1027d, .b = 0x2ab77f80, .c = 0xe7d58000}, + {.a = 0xe9ad027e, .b = 0x3b52ef80, .c = 0xdf750000}, + {.a = 0xc0c0027f, .b = 0xa6b6f780, .c = 0xeff48000}, + {.a = 0xe9b30280, .b = 0x8dd7bf00, .c = 0xebd58000}, + {.a = 0xe3040281, .b = 0xddaf7780, .c = 0xefca0000}, + {.a = 0x80b90282, .b = 0xcda57780, .c = 0xeef58000}, + {.a = 0xc53f0283, .b = 0xb2d47780, .c = 0xef948000}, + {.a = 0xc5b00284, .b = 0xcd2fbd80, .c = 0x77cd8000}, + {.a = 0x840b0285, .b = 0xd3757f80, .c = 0xe7df0000}, + {.a = 0xa5d10286, .b = 0xcead5f80, .c = 0x77d40000}, + {.a = 0xa2360287, .b = 0x72b57780, .c = 0xeff78000}, + {.a = 0x83690288, .b = 0x26957780, .c = 0xefc68000}, + {.a = 0xfee60289, .b = 0xcd757f80, .c = 0xebd58000}, + {.a = 0xda85028a, .b = 0x25557f80, .c = 0xf7b58000}, + {.a = 0x9498028b, .b = 0x3676f780, .c = 0xefd58000}, + {.a = 0xd977028c, .b = 0xdd6f7780, .c = 0xefd58000}, + {.a = 0xc435028d, .b = 0xaa7e7780, .c = 0x77d78000}, + {.a = 0x8801028e, .b = 0x657f7f80, .c = 0xebd68000}, + {.a = 0xdaa7028f, .b = 0xdaa77b80, .c = 0xf7f68000}, + {.a = 0xb02c0290, .b = 0x4da5bf80, .c = 0xf7cf8000}, + {.a = 0xa15b0291, .b = 0xce557780, .c = 0xeddb8000}, + {.a = 0xdbae0292, .b = 0xdd6cf780, .c = 0xeffd0000}, + {.a = 0xec410293, .b = 0x75557780, .c = 0xefc50000}, + {.a = 0xa3500294, .b = 0x6cad7f80, .c = 0xf7cc8000}, + {.a = 0xbb2b0295, .b = 0xbaeeef80, .c = 0xef458000}, + {.a = 0xc1720296, .b = 0x32b57780, .c = 0xefde8000}, + {.a = 0xaf0a0297, .b = 0x22ed7780, .c = 0xef7b8000}, + {.a = 0xa8610298, .b = 0x27eaf680, .c = 0xefe38000}, + {.a = 0xb00e0299, .b = 0xd5677780, .c = 0xf7d38000}, + {.a = 0xdb44029a, .b = 0xd968f780, .c = 0xefc50000}, + {.a = 0xb462029b, .b = 0xcd777780, .c = 0xefe78000}, + {.a = 0xd9cd029c, .b = 0x32757f80, .c = 0xe7d58000}, + {.a = 0xa9aa029d, .b = 0x65477f80, .c = 0xebee8000}, + {.a = 0xaa59029e, .b = 0xcc557700, .c = 0xeed78000}, + {.a = 0xbdd6029f, .b = 0x9aae7780, .c = 0xefc58000}, + {.a = 0xb3e502a0, .b = 0x33b55f80, .c = 0xf5d50000}, + {.a = 0xed6002a1, .b = 0x36a97780, .c = 0xefc68000}, + {.a = 0x8e5b02a2, .b = 0xdd5b7700, .c = 0xf7e98000}, + {.a = 0xd36802a3, .b = 0x8ab47780, .c = 0xefd48000}, + {.a = 0xd26202a4, .b = 0xddeb7780, .c = 0xef7d8000}, + {.a = 0x9d6302a5, .b = 0xb9276f80, .c = 0x6e858000}, + {.a = 0xf3e802a6, .b = 0x9cea5f80, .c = 0x7bf38000}, + {.a = 0xb58a02a7, .b = 0xa2b46f80, .c = 0xef968000}, + {.a = 0x88cd02a8, .b = 0xcd757780, .c = 0xefdd8000}, + {.a = 0xba7e02a9, .b = 0x66b57780, .c = 0xf7ef0000}, + {.a = 0x97b002aa, .b = 0x76c57780, .c = 0xefe58000}, + {.a = 0xede602ab, .b = 0x33d2f680, .c = 0xefe90000}, + {.a = 0xfdda02ac, .b = 0xdd5d6f80, .c = 0x7bb58000}, + {.a = 0xebea02ad, .b = 0x34ab7f80, .c = 0xefff8000}, + {.a = 0xa54f02ae, .b = 0xbb6eef80, .c = 0xeecb8000}, + {.a = 0xa60202af, .b = 0xeb735f00, .c = 0x77d78000}, + {.a = 0xfa5a02b0, .b = 0xeef7bf80, .c = 0xbbdd0000}, + {.a = 0xbbd402b1, .b = 0xdd62f780, .c = 0xf7d68000}, + {.a = 0x8af302b2, .b = 0x356f7780, .c = 0xefc78000}, + {.a = 0x90c902b3, .b = 0x9a5c7700, .c = 0xf7d68000}, + {.a = 0x837a02b4, .b = 0x25557780, .c = 0xefdf8000}, + {.a = 0x996302b5, .b = 0xaaf47680, .c = 0xf7d98000}, + {.a = 0xe92c02b6, .b = 0x2abb6f80, .c = 0xefd78000}, + {.a = 0xef2d02b7, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0x9cd302b8, .b = 0xdd4cf780, .c = 0xeffb0000}, + {.a = 0x849e02b9, .b = 0x3aa6ef80, .c = 0xeed58000}, + {.a = 0x885802ba, .b = 0x9d365f80, .c = 0x77d50000}, + {.a = 0xf8dc02bb, .b = 0xcd555f80, .c = 0x77b78000}, + {.a = 0x90e802bc, .b = 0xcd56ef80, .c = 0xeff50000}, + {.a = 0xb2fa02bd, .b = 0x6d757f80, .c = 0xe7ef8000}, + {.a = 0x8d8002be, .b = 0x72567780, .c = 0xefff0000}, + {.a = 0xf14202bf, .b = 0xdded7780, .c = 0xeeb48000}, + {.a = 0xe69902c0, .b = 0xd9bcd780, .c = 0xf7ed0000}, + {.a = 0xd57e02c1, .b = 0xda577780, .c = 0xefc20000}, + {.a = 0xbcc002c2, .b = 0x2656f680, .c = 0xefd50000}, + {.a = 0xeb4702c3, .b = 0x35b6f680, .c = 0xefd50000}, + {.a = 0x88bb02c4, .b = 0x9db66f80, .c = 0x6fdd8000}, + {.a = 0xe3db02c5, .b = 0xddb57780, .c = 0xeeb58000}, + {.a = 0xe55802c6, .b = 0xadf67780, .c = 0x77558000}, + {.a = 0xd7ff02c7, .b = 0x9df47780, .c = 0x77d58000}, + {.a = 0xfda102c8, .b = 0xcca4df80, .c = 0xf7cb0000}, + {.a = 0x85e802c9, .b = 0xdd6b7780, .c = 0xefcb8000}, + {.a = 0x905902ca, .b = 0xedf27780, .c = 0x776f8000}, + {.a = 0xfb4602cb, .b = 0x32d55f80, .c = 0xf7550000}, + {.a = 0x9df002cc, .b = 0xb5b6fe80, .c = 0xf3df8000}, + {.a = 0xfbac02cd, .b = 0x35557f80, .c = 0xe7e68000}, + {.a = 0xdf2402ce, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0x80e002cf, .b = 0x75757780, .c = 0xefd58000}, + {.a = 0xff5402d0, .b = 0xcd56f780, .c = 0xeffb0000}, + {.a = 0xb41902d1, .b = 0xbb6eef80, .c = 0xeec78000}, + {.a = 0xeeac02d2, .b = 0xddd37780, .c = 0x77758000}, + {.a = 0xa24902d3, .b = 0x22757780, .c = 0xefbb8000}, + {.a = 0xac0802d4, .b = 0xc6a4f780, .c = 0xf7ef0000}, + {.a = 0xd24b02d5, .b = 0xdd6cdf80, .c = 0xfbed8000}, + {.a = 0xfeef02d6, .b = 0xe65b6f00, .c = 0x7bd68000}, + {.a = 0xb0c302d7, .b = 0xa5aaf780, .c = 0xefc48000}, + {.a = 0xb54c02d8, .b = 0x26997780, .c = 0xefc58000}, + {.a = 0xbb0f02d9, .b = 0xbaaeef80, .c = 0xefc48000}, + {.a = 0x9ee202da, .b = 0x26aef680, .c = 0xefed8000}, + {.a = 0xe5d002db, .b = 0x89547780, .c = 0xefd68000}, + {.a = 0xeca102dc, .b = 0x3656f700, .c = 0xefd48000}, + {.a = 0xdb2702dd, .b = 0x33caf680, .c = 0xefe10000}, + {.a = 0xa55902de, .b = 0xbaacef80, .c = 0xef458000}, + {.a = 0xba3802df, .b = 0x252ef680, .c = 0xefeb8000}, + {.a = 0xbaf102e0, .b = 0xcd76bf80, .c = 0xf7dd8000}, + {.a = 0xa94a02e1, .b = 0x9b75bd80, .c = 0x77d48000}, + {.a = 0x994a02e2, .b = 0xb2a4df80, .c = 0xf7cf0000}, + {.a = 0xcef902e3, .b = 0x3596ff80, .c = 0xeb758000}, + {.a = 0xcffd02e4, .b = 0xcd777f80, .c = 0xe7db0000}, + {.a = 0xeee302e5, .b = 0xdaa4d780, .c = 0xf7e98000}, + {.a = 0xc5f802e6, .b = 0x9a5c6f80, .c = 0xef8a8000}, + {.a = 0xa6cf02e7, .b = 0x9d935d80, .c = 0x77db0000}, + {.a = 0xad8702e8, .b = 0xdcaf7780, .c = 0xeff58000}, + {.a = 0x99c802e9, .b = 0xacf56b80, .c = 0x7bbf8000}, + {.a = 0x9d1902ea, .b = 0x72667680, .c = 0xeffb0000}, + {.a = 0x9ad702eb, .b = 0xb6d67780, .c = 0x6f550000}, + {.a = 0xd3d002ec, .b = 0xcdb4f780, .c = 0xefe68000}, + {.a = 0x8ca702ed, .b = 0x256af780, .c = 0xefed8000}, + {.a = 0x917602ee, .b = 0xcdb4dd80, .c = 0xf7ed0000}, + {.a = 0xf5fb02ef, .b = 0x8d347780, .c = 0xefd70000}, + {.a = 0xeced02f0, .b = 0x9dd3b780, .c = 0x77550000}, + {.a = 0xc71e02f1, .b = 0x6eb57f80, .c = 0xf7d28000}, + {.a = 0xb60b02f2, .b = 0xe56d6f80, .c = 0x7bf58000}, + {.a = 0xdb5902f3, .b = 0xddaf7780, .c = 0xefdc8000}, + {.a = 0xdfc702f4, .b = 0xcd64f780, .c = 0xeffd8000}, + {.a = 0xb8a302f5, .b = 0xdd557f80, .c = 0xebdd0000}, + {.a = 0xc89802f6, .b = 0x9cec6f80, .c = 0x7bd50000}, + {.a = 0xcafc02f7, .b = 0x32b77780, .c = 0xefe58000}, + {.a = 0xf24902f8, .b = 0x266afe80, .c = 0xebfd0000}, + {.a = 0xe88802f9, .b = 0xdcef7780, .c = 0xeff48000}, + {.a = 0x95f702fa, .b = 0x66d47680, .c = 0xefd50000}, + {.a = 0xa7a002fb, .b = 0xd354ed80, .c = 0xeff58000}, + {.a = 0xdd2902fc, .b = 0xceb77f80, .c = 0xebed0000}, + {.a = 0xa9c402fd, .b = 0xdb6d7780, .c = 0xeecc8000}, + {.a = 0xf83602fe, .b = 0xcd375f80, .c = 0x7bed0000}, + {.a = 0xcb0402ff, .b = 0x73557f00, .c = 0xf7ed8000}, + {.a = 0xb6af0300, .b = 0x36d6f780, .c = 0xef758000}, + {.a = 0xb5640301, .b = 0xdce4df80, .c = 0xf7b58000}, + {.a = 0xb0ea0302, .b = 0x76957f80, .c = 0xe7f68000}, + {.a = 0xc8630303, .b = 0xaabeef80, .c = 0xefec8000}, + {.a = 0xd26e0304, .b = 0x6d55bf80, .c = 0xf7948000}, + {.a = 0xa2620305, .b = 0x72de6e80, .c = 0xefd58000}, + {.a = 0xadb80306, .b = 0x5af67680, .c = 0xf7d58000}, + {.a = 0xd92a0307, .b = 0x266af680, .c = 0xefc50000}, + {.a = 0x99430308, .b = 0x73755f80, .c = 0xf7e58000}, + {.a = 0x9e760309, .b = 0x3a96df80, .c = 0xf7e58000}, + {.a = 0x980a030a, .b = 0xbbf26f80, .c = 0xef570000}, + {.a = 0xdd8b030b, .b = 0xdadd7780, .c = 0x77b58000}, + {.a = 0xaea3030c, .b = 0xd5776f80, .c = 0x6ed48000}, + {.a = 0x842d030d, .b = 0x9d555d80, .c = 0x77d50000}, + {.a = 0xb106030e, .b = 0x36757780, .c = 0xefd78000}, + {.a = 0xd6d3030f, .b = 0x9d555f80, .c = 0x77d50000}, + {.a = 0xbbb20310, .b = 0xba9dbf80, .c = 0x77978000}, + {.a = 0xca9d0311, .b = 0x65777f80, .c = 0xebd78000}, + {.a = 0xbeb10312, .b = 0x35def780, .c = 0xedd50000}, + {.a = 0xf6ef0313, .b = 0x226ef680, .c = 0xeff50000}, + {.a = 0xc3630314, .b = 0x636a7680, .c = 0xeff98000}, + {.a = 0x91740315, .b = 0x6d697f80, .c = 0xe7d50000}, + {.a = 0xa7240316, .b = 0x7a546f80, .c = 0xefc58000}, + {.a = 0xae7c0317, .b = 0xb3b4df80, .c = 0xf6d58000}, + {.a = 0x9ae60318, .b = 0x2b737f80, .c = 0xe7e78000}, + {.a = 0xdd300319, .b = 0xdd6f7780, .c = 0xefc58000}, + {.a = 0xd7de031a, .b = 0xdd76f780, .c = 0xf7d28000}, + {.a = 0x8ac6031b, .b = 0x2ad56f80, .c = 0xef978000}, + {.a = 0xa74a031c, .b = 0xdc977780, .c = 0xefc28000}, + {.a = 0xd0c5031d, .b = 0xa25aef80, .c = 0xee9f8000}, + {.a = 0xdc38031e, .b = 0xea777780, .c = 0x77ad8000}, + {.a = 0xfb15031f, .b = 0x356ef780, .c = 0xefc78000}, + {.a = 0xa0230320, .b = 0x55353f80, .c = 0xbbd68000}, + {.a = 0xd2e40321, .b = 0x32b57f80, .c = 0xe7e28000}, + {.a = 0xb0b20322, .b = 0xcd74f700, .c = 0xefd68000}, + {.a = 0xd1d90323, .b = 0x2676f680, .c = 0xefd50000}, + {.a = 0xa9f80324, .b = 0xb3f57780, .c = 0x6edb8000}, + {.a = 0xfbd60325, .b = 0xd5776f80, .c = 0xeed30000}, + {.a = 0xa6320326, .b = 0xbb6cef80, .c = 0xefcd8000}, + {.a = 0x8bc70327, .b = 0xad6eef80, .c = 0xeff58000}, + {.a = 0xf5500328, .b = 0x36b6f700, .c = 0xefd48000}, + {.a = 0xfaca0329, .b = 0xa56ef780, .c = 0xefd78000}, + {.a = 0xee0b032a, .b = 0x35d57f00, .c = 0xe7f58000}, + {.a = 0xcf74032b, .b = 0xd96b7780, .c = 0xefc18000}, + {.a = 0x9864032c, .b = 0x72957f80, .c = 0xe7e48000}, + {.a = 0xd1d3032d, .b = 0xddd77700, .c = 0xefd58000}, + {.a = 0xe24a032e, .b = 0x75557780, .c = 0xefc50000}, + {.a = 0x8513032f, .b = 0xdde4df80, .c = 0xf7b58000}, + {.a = 0xb5c20330, .b = 0xcce4b780, .c = 0xf7c88000}, + {.a = 0xc0850331, .b = 0xdab57f80, .c = 0xf7d68000}, + {.a = 0x97080332, .b = 0x32b77780, .c = 0xefe58000}, + {.a = 0xffcf0333, .b = 0x3bd2ef00, .c = 0xddd78000}, + {.a = 0xf67d0334, .b = 0xccaadf80, .c = 0xf7ed0000}, + {.a = 0xfafe0335, .b = 0x2b956f80, .c = 0xeecf8000}, + {.a = 0xbeed0336, .b = 0x36557780, .c = 0xef958000}, + {.a = 0xd4c00337, .b = 0xccd35f80, .c = 0x77b58000}, + {.a = 0x9fb90338, .b = 0x25b4f700, .c = 0xefd58000}, + {.a = 0xf3030339, .b = 0xcd757f80, .c = 0xe7ec8000}, + {.a = 0xa9e2033a, .b = 0x74bc6f80, .c = 0xef968000}, + {.a = 0xd16a033b, .b = 0xacf47780, .c = 0x775b8000}, + {.a = 0xaabf033c, .b = 0xb3157780, .c = 0x6ec78000}, + {.a = 0xef8f033d, .b = 0x22ed7780, .c = 0xef690000}, + {.a = 0xe0a2033e, .b = 0xdcb4ef80, .c = 0xefd58000}, + {.a = 0xd8c4033f, .b = 0x3b66ef80, .c = 0xeec78000}, + {.a = 0x89f00340, .b = 0x66ad7780, .c = 0xefee8000}, + {.a = 0xc8e00341, .b = 0xb9c4ef80, .c = 0xee978000}, + {.a = 0xd0d60342, .b = 0x9cea7780, .c = 0xf7cb8000}, + {.a = 0xd2110343, .b = 0x31b55d80, .c = 0xf7d48000}, + {.a = 0xf7340344, .b = 0xbabcef80, .c = 0xefd58000}, + {.a = 0x9c790345, .b = 0x756d7780, .c = 0xefc48000}, + {.a = 0xe86d0346, .b = 0x32d55f00, .c = 0xf7f78000}, + {.a = 0xd5df0347, .b = 0x2e557f80, .c = 0xf7b48000}, + {.a = 0x92fa0348, .b = 0xc56cff80, .c = 0xf3ff8000}, + {.a = 0xe5d90349, .b = 0xbbd46d80, .c = 0xef968000}, + {.a = 0xf952034a, .b = 0xbab6ee80, .c = 0xefd58000}, + {.a = 0xc1c8034b, .b = 0xd574ef80, .c = 0xefe50000}, + {.a = 0xae10034c, .b = 0xddd77780, .c = 0xefb58000}, + {.a = 0xfc2d034d, .b = 0x3366f680, .c = 0xeffb0000}, + {.a = 0xca9c034e, .b = 0x2554f680, .c = 0xefd50000}, + {.a = 0xb1d1034f, .b = 0x26aaf680, .c = 0xefed8000}, + {.a = 0xb17b0350, .b = 0xb4b4ef80, .c = 0xefe58000}, + {.a = 0xe93e0351, .b = 0x336d5f80, .c = 0xf7e98000}, + {.a = 0xf28b0352, .b = 0xeb735d80, .c = 0x77d68000}, + {.a = 0xb4bb0353, .b = 0xaa757780, .c = 0x77ec0000}, + {.a = 0xacb00354, .b = 0x9d7c7780, .c = 0x77d38000}, + {.a = 0xd3f80355, .b = 0xcd6d7f80, .c = 0xe7f58000}, + {.a = 0xc6410356, .b = 0xd5f76f80, .c = 0x7bad8000}, + {.a = 0xcff20357, .b = 0xe6fc6f80, .c = 0x7bf78000}, + {.a = 0xf4c60358, .b = 0xdd6ef780, .c = 0xf7cf8000}, + {.a = 0xd01e0359, .b = 0x2536fe80, .c = 0xebeb8000}, + {.a = 0xa97f035a, .b = 0xb56cf780, .c = 0xefc48000}, + {.a = 0xc507035b, .b = 0xbba2dd80, .c = 0xf7d58000}, + {.a = 0x83df035c, .b = 0xdb64dd80, .c = 0xf7d48000}, + {.a = 0x8456035d, .b = 0x9c5b5d80, .c = 0x77c58000}, + {.a = 0xaea4035e, .b = 0x35b57780, .c = 0xefe70000}, + {.a = 0xd853035f, .b = 0xf7377780, .c = 0x6ed48000}, + {.a = 0xd2ad0360, .b = 0x256f7780, .c = 0xf7fd8000}, + {.a = 0xc4a30361, .b = 0x2bf6de80, .c = 0xf7d50000}, + {.a = 0xb24c0362, .b = 0x72977e80, .c = 0xe7f50000}, + {.a = 0xdb070363, .b = 0x9bafbf80, .c = 0x76cd8000}, + {.a = 0xacfc0364, .b = 0x29b6ef80, .c = 0xefe50000}, + {.a = 0xd76c0365, .b = 0xdadd7780, .c = 0x77b58000}, + {.a = 0xe5330366, .b = 0xd5b4df80, .c = 0xf7e60000}, + {.a = 0xe7990367, .b = 0x656f7f80, .c = 0xebd58000}, + {.a = 0xeb7d0368, .b = 0x36b57780, .c = 0xefd68000}, + {.a = 0xb48a0369, .b = 0xdd74df80, .c = 0xf7ed0000}, + {.a = 0xe74d036a, .b = 0xed777680, .c = 0x77d58000}, + {.a = 0xaea4036b, .b = 0x3266f680, .c = 0xeffb0000}, + {.a = 0xc36c036c, .b = 0xce575d80, .c = 0x77b58000}, + {.a = 0xb96c036d, .b = 0xceab7f80, .c = 0xebcd0000}, + {.a = 0xb6fc036e, .b = 0xd56ced80, .c = 0xefe58000}, + {.a = 0xd8ee036f, .b = 0xd5e76f80, .c = 0x6ed58000}, + {.a = 0xfc350370, .b = 0xcd677f80, .c = 0xebd50000}, + {.a = 0xf4480371, .b = 0xda64ef80, .c = 0xefce8000}, + {.a = 0xe63a0372, .b = 0xdd557780, .c = 0xefdf8000}, + {.a = 0x80330373, .b = 0x9b657f80, .c = 0x77d70000}, + {.a = 0xd2310374, .b = 0x26997780, .c = 0xefd68000}, + {.a = 0xf0be0375, .b = 0xef7d6f00, .c = 0x7bd58000}, + {.a = 0xadb40376, .b = 0x76d57780, .c = 0xefd48000}, + {.a = 0x82ab0377, .b = 0x9d965e80, .c = 0x77d58000}, + {.a = 0xc8480378, .b = 0xb2f4df80, .c = 0xf7d28000}, + {.a = 0xdd7c0379, .b = 0xdab2f780, .c = 0xf7d68000}, + {.a = 0xc1e1037a, .b = 0x2a76ee80, .c = 0xefd50000}, + {.a = 0xc891037b, .b = 0xaf6d6f80, .c = 0x7bc58000}, + {.a = 0xa2ba037c, .b = 0xb944e780, .c = 0xeff58000}, + {.a = 0x975d037d, .b = 0x5a567780, .c = 0xefc58000}, + {.a = 0xe25b037e, .b = 0xda6cd780, .c = 0xf7bb8000}, + {.a = 0xb4bc037f, .b = 0x25d6f700, .c = 0xefd58000}, + {.a = 0xeb0f0380, .b = 0xed55bd80, .c = 0x77d58000}, + {.a = 0xe72e0381, .b = 0x3a456f00, .c = 0xefd58000}, + {.a = 0xd0d30382, .b = 0xd5b4ed80, .c = 0xefe58000}, + {.a = 0xcf090383, .b = 0x33aeef80, .c = 0xeef58000}, + {.a = 0xb0f80384, .b = 0x656d7780, .c = 0xefc50000}, + {.a = 0xbc090385, .b = 0xf6656780, .c = 0x6fac8000}, + {.a = 0xf80b0386, .b = 0x65717f80, .c = 0xebec8000}, + {.a = 0xece40387, .b = 0x76547700, .c = 0xefd68000}, + {.a = 0xfe4a0388, .b = 0xdab4f780, .c = 0xefd78000}, + {.a = 0xf35e0389, .b = 0x9ef56f80, .c = 0x7b778000}, + {.a = 0xa7bd038a, .b = 0x7b557f00, .c = 0xf7d58000}, + {.a = 0xdc72038b, .b = 0x953e6f80, .c = 0x7bd58000}, + {.a = 0xd24e038c, .b = 0xee577780, .c = 0x77ad8000}, + {.a = 0xca17038d, .b = 0x75957f80, .c = 0xe7f48000}, + {.a = 0xd6b5038e, .b = 0x632a7680, .c = 0xeff98000}, + {.a = 0x92e5038f, .b = 0x2976ef80, .c = 0xefd48000}, + {.a = 0xe0ff0390, .b = 0xcd74ab80, .c = 0x7bd58000}, + {.a = 0xa38e0391, .b = 0x29d76d80, .c = 0xefb38000}, + {.a = 0x92960392, .b = 0x329ef680, .c = 0xefeb0000}, + {.a = 0xffa70393, .b = 0xdde56f80, .c = 0x7b778000}, + {.a = 0xd2020394, .b = 0x9a2d5d80, .c = 0x77c98000}, + {.a = 0xa3b50395, .b = 0xd2acef80, .c = 0xeff58000}, + {.a = 0xd7cf0396, .b = 0x3576ef80, .c = 0xefe58000}, + {.a = 0xae310397, .b = 0x356d7780, .c = 0xefcb8000}, + {.a = 0xcc7b0398, .b = 0xc594ef80, .c = 0xefc58000}, + {.a = 0xb5f80399, .b = 0x22eb7780, .c = 0xef7b8000}, + {.a = 0xe40f039a, .b = 0xbbdd6f80, .c = 0x6e978000}, + {.a = 0x8de3039b, .b = 0xc968f780, .c = 0xefc58000}, + {.a = 0x8fd3039c, .b = 0x2296f680, .c = 0xeff50000}, + {.a = 0x9cdc039d, .b = 0xa6ae7b80, .c = 0xefd40000}, + {.a = 0xf084039e, .b = 0xb9a46e80, .c = 0xefc58000}, + {.a = 0xa9e5039f, .b = 0xc5a4ed80, .c = 0xefc58000}, + {.a = 0xa8ec03a0, .b = 0xad6af780, .c = 0xdfb98000}, + {.a = 0xac0e03a1, .b = 0x7b6d7d80, .c = 0xf7c78000}, + {.a = 0x8a2303a2, .b = 0x66e97780, .c = 0xefc48000}, + {.a = 0xc7c003a3, .b = 0x66bd7f80, .c = 0xefd58000}, + {.a = 0xff9a03a4, .b = 0xbd7ef700, .c = 0xefda8000}, + {.a = 0x982203a5, .b = 0x9a7c7780, .c = 0xf7da8000}, + {.a = 0xeb2b03a6, .b = 0x32d6ef00, .c = 0xdfdd8000}, + {.a = 0xc9a803a7, .b = 0x656a7780, .c = 0xefc10000}, + {.a = 0x896103a8, .b = 0x257f7780, .c = 0xf7db8000}, + {.a = 0xfaa803a9, .b = 0x9ae67780, .c = 0x77558000}, + {.a = 0xe4e503aa, .b = 0x9cf27680, .c = 0xf7d78000}, + {.a = 0xd6b103ab, .b = 0xdf6f7780, .c = 0xefdb8000}, + {.a = 0xaf2703ac, .b = 0xda7d7f80, .c = 0xebcb8000}, + {.a = 0x80b603ad, .b = 0xd6a77f80, .c = 0xf3dd8000}, + {.a = 0xcd0a03ae, .b = 0x6a957f80, .c = 0xe7e58000}, + {.a = 0xdd5a03af, .b = 0x9b57bf00, .c = 0xf7d68000}, + {.a = 0x8d8d03b0, .b = 0x2aad7780, .c = 0xf7c88000}, + {.a = 0xb73a03b1, .b = 0xa6aaf780, .c = 0xefd08000}, + {.a = 0xbd6e03b2, .b = 0xccdd7700, .c = 0xefe78000}, + {.a = 0xf0f603b3, .b = 0xeff16f80, .c = 0x7b558000}, + {.a = 0xf8d203b4, .b = 0xdc54eb80, .c = 0xefa58000}, + {.a = 0xc11d03b5, .b = 0x9d56b780, .c = 0xefdb8000}, + {.a = 0x824c03b6, .b = 0x656d7780, .c = 0xefec8000}, + {.a = 0xb0d703b7, .b = 0x9d555d80, .c = 0x77d78000}, + {.a = 0xf77b03b8, .b = 0x656d7780, .c = 0xefc48000}, + {.a = 0xfacf03b9, .b = 0xbb9ede80, .c = 0xf7cd8000}, + {.a = 0xd6de03ba, .b = 0x6aa77780, .c = 0xf7cb8000}, + {.a = 0x848203bb, .b = 0x71657f00, .c = 0xe7f58000}, + {.a = 0xeb6803bc, .b = 0x6db57f80, .c = 0xf7ec0000}, + {.a = 0xf76603bd, .b = 0x654d7f80, .c = 0xefed8000}, + {.a = 0xdf7603be, .b = 0xcaef7780, .c = 0xefc48000}, + {.a = 0xb6de03bf, .b = 0x656d7780, .c = 0xefed8000}, + {.a = 0x8ff803c0, .b = 0x7b657f80, .c = 0xf7d58000}, + {.a = 0xee5403c1, .b = 0x32def680, .c = 0xefe50000}, + {.a = 0x91d803c2, .b = 0xcd777f80, .c = 0xe7e78000}, + {.a = 0xa6ef03c3, .b = 0xdd5b7780, .c = 0x77b18000}, + {.a = 0xdd2b03c4, .b = 0xca757780, .c = 0xef548000}, + {.a = 0xa52a03c5, .b = 0x6a556f80, .c = 0xefe58000}, + {.a = 0x8b9703c6, .b = 0xa56ef780, .c = 0xefe98000}, + {.a = 0x889e03c7, .b = 0xab7d7700, .c = 0x77d78000}, + {.a = 0xfd7903c8, .b = 0x2cb57f80, .c = 0xe7dd8000}, + {.a = 0xde9b03c9, .b = 0xd6b6ef80, .c = 0xeff28000}, + {.a = 0xd2d303ca, .b = 0xa56a7780, .c = 0x77cb8000}, + {.a = 0xce0c03cb, .b = 0x655d7f80, .c = 0xeff58000}, + {.a = 0xd24f03cc, .b = 0xd356ef80, .c = 0xeff50000}, + {.a = 0xde5203cd, .b = 0xccd55f80, .c = 0x77b08000}, + {.a = 0x956b03ce, .b = 0xaf74f700, .c = 0xf7dd8000}, + {.a = 0x9d0a03cf, .b = 0xbbd46d80, .c = 0xefd58000}, + {.a = 0x8dc403d0, .b = 0x22faef80, .c = 0xef558000}, + {.a = 0xb2eb03d1, .b = 0x6de57e80, .c = 0xf7f58000}, + {.a = 0xe34803d2, .b = 0x2636fe80, .c = 0xebed8000}, + {.a = 0xa2d203d3, .b = 0x9db45d80, .c = 0xf7d58000}, + {.a = 0xf9fd03d4, .b = 0x27377780, .c = 0xf7eb0000}, + {.a = 0xefde03d5, .b = 0x755b7f80, .c = 0xeff78000}, + {.a = 0xa16d03d6, .b = 0x9cf45d80, .c = 0xf7d50000}, + {.a = 0xadda03d7, .b = 0x3aa6ef80, .c = 0xeed58000}, + {.a = 0x960103d8, .b = 0x2676f700, .c = 0xefd58000}, + {.a = 0xa1f903d9, .b = 0xdd64dd80, .c = 0xf7cc8000}, + {.a = 0xd8d503da, .b = 0xb374df80, .c = 0xf7e58000}, + {.a = 0xd42103db, .b = 0x6d557f80, .c = 0xe7f58000}, + {.a = 0xf43f03dc, .b = 0x95546f80, .c = 0xef968000}, + {.a = 0x94a903dd, .b = 0x6ad57780, .c = 0xf7ab8000}, + {.a = 0x87b203de, .b = 0xddb57780, .c = 0xeeb58000}, + {.a = 0xc01b03df, .b = 0x66767680, .c = 0xefd50000}, + {.a = 0x989703e0, .b = 0xed54ef80, .c = 0xdfd78000}, + {.a = 0xa74403e1, .b = 0x3b52ef80, .c = 0xdef68000}, + {.a = 0xbffd03e2, .b = 0x63aa7780, .c = 0xedff0000}, + {.a = 0xeb3403e3, .b = 0x76967680, .c = 0xefd50000}, + {.a = 0x8ed203e4, .b = 0xeb725f80, .c = 0x77e98000}, + {.a = 0xb1e003e5, .b = 0xcaaef780, .c = 0xefd58000}, + {.a = 0xee3303e6, .b = 0xd968f780, .c = 0xefc50000}, + {.a = 0xef7003e7, .b = 0x27f4fe80, .c = 0xebd58000}, + {.a = 0xc40303e8, .b = 0x32f6be80, .c = 0xf7ed8000}, + {.a = 0x924803e9, .b = 0xdd6ef700, .c = 0xf7d88000}, + {.a = 0x845c03ea, .b = 0xcd637f80, .c = 0xe7d50000}, + {.a = 0x96e103eb, .b = 0x4df67e80, .c = 0xebe78000}, + {.a = 0xdce303ec, .b = 0x2ab77f80, .c = 0xe7e78000}, + {.a = 0xe83c03ed, .b = 0xb9b55f80, .c = 0x77958000}, + {.a = 0xbbf003ee, .b = 0xdde56f80, .c = 0xeed58000}, + {.a = 0xe4f203ef, .b = 0xcdcf5f80, .c = 0x77958000}, + {.a = 0xa54503f0, .b = 0xbb9cef80, .c = 0xdef68000}, + {.a = 0xf5af03f1, .b = 0x66b57780, .c = 0xefd58000}, + {.a = 0xf41503f2, .b = 0x74766e80, .c = 0xefd50000}, + {.a = 0xa86803f3, .b = 0xdd6d6e80, .c = 0x7bd58000}, + {.a = 0xe23a03f4, .b = 0xad74f700, .c = 0xf7da8000}, + {.a = 0xfd1e03f5, .b = 0xd34eef80, .c = 0xeff50000}, + {.a = 0xf2f703f6, .b = 0x65be7f80, .c = 0xebd58000}, + {.a = 0xfbc503f7, .b = 0x36b6f780, .c = 0xefd48000}, + {.a = 0xfbe903f8, .b = 0xb56cdf80, .c = 0xfbcd8000}, + {.a = 0xd12d03f9, .b = 0x655d7780, .c = 0xefed8000}, + {.a = 0x9c6803fa, .b = 0x66e97780, .c = 0xefc48000}, + {.a = 0xa8d103fb, .b = 0x76bd7f80, .c = 0xefd40000}, + {.a = 0x881f03fc, .b = 0x3376f680, .c = 0xefd58000}, + {.a = 0xefbf03fd, .b = 0xa668f780, .c = 0xefe48000}, + {.a = 0xfccf03fe, .b = 0x63766e80, .c = 0xefdd0000}, + {.a = 0xe2d703ff, .b = 0xcd757f80, .c = 0xe7d68000}, + {.a = 0xe3880400, .b = 0x2bfadb80, .c = 0xf7a58000}, + {.a = 0x80120401, .b = 0xdb7eef80, .c = 0xefd58000}, + {.a = 0x935a0402, .b = 0xcaa5b780, .c = 0x77e98000}, + {.a = 0x92be0403, .b = 0x2ab6ee80, .c = 0xefd58000}, + {.a = 0xfa790404, .b = 0xdaa4f780, .c = 0xf7ef0000}, + {.a = 0xc3220405, .b = 0x36bd7780, .c = 0xefee8000}, + {.a = 0x94ae0406, .b = 0x94b66f80, .c = 0x7bd78000}, + {.a = 0xe0c50407, .b = 0x3deb5f80, .c = 0xf7ee8000}, + {.a = 0x9cfb0408, .b = 0xdd64f780, .c = 0xf7cb8000}, + {.a = 0x974b0409, .b = 0xa964ef80, .c = 0xefed8000}, + {.a = 0xd2ef040a, .b = 0xcd54ff80, .c = 0xebe70000}, + {.a = 0x8563040b, .b = 0xc9677780, .c = 0xefd58000}, + {.a = 0x84c7040c, .b = 0xcc777780, .c = 0xefd20000}, + {.a = 0xb6b2040d, .b = 0xa6aaf780, .c = 0xefd08000}, + {.a = 0xae54040e, .b = 0x75757780, .c = 0xefd58000}, + {.a = 0xb850040f, .b = 0x8d567780, .c = 0xefd50000}, + {.a = 0xfc7e0410, .b = 0x66a97780, .c = 0xefc58000}, + {.a = 0xad290411, .b = 0x6d95bf80, .c = 0xf7d78000}, + {.a = 0x9a250412, .b = 0x9d755f80, .c = 0x77d70000}, + {.a = 0xfd6e0413, .b = 0xb674f700, .c = 0xefd58000}, + {.a = 0xaaf10414, .b = 0xa2ac7780, .c = 0xeff48000}, + {.a = 0x9a340415, .b = 0x9cd46f00, .c = 0x7bd58000}, + {.a = 0xce120416, .b = 0x76d57780, .c = 0xefd68000}, + {.a = 0xde630417, .b = 0xead57700, .c = 0x77e98000}, + {.a = 0xb84a0418, .b = 0xdd74f700, .c = 0xf7da8000}, + {.a = 0xa1910419, .b = 0xddd4df80, .c = 0xf7538000}, + {.a = 0xb334041a, .b = 0x23577780, .c = 0xeddd8000}, + {.a = 0xae82041b, .b = 0xdcd57700, .c = 0xefd88000}, + {.a = 0xe3f1041c, .b = 0xa6a76f80, .c = 0x7bed8000}, + {.a = 0xa492041d, .b = 0xeb7d5b00, .c = 0x77d48000}, + {.a = 0xb6d6041e, .b = 0x3676f700, .c = 0xefd38000}, + {.a = 0xdb2f041f, .b = 0xd2acef80, .c = 0xeff58000}, + {.a = 0xc08d0420, .b = 0x6ab5b780, .c = 0xf7eb8000}, + {.a = 0xb7a00421, .b = 0x33755f80, .c = 0xf5d68000}, + {.a = 0xb3930422, .b = 0xbb6cef80, .c = 0xefcd8000}, + {.a = 0xa2da0423, .b = 0xdd5f6f80, .c = 0x7bb38000}, + {.a = 0x878c0424, .b = 0xddaadf80, .c = 0xf7c98000}, + {.a = 0xa2460425, .b = 0xd5b6ed80, .c = 0xefe58000}, + {.a = 0xd2fe0426, .b = 0x8db46f80, .c = 0xefd50000}, + {.a = 0x8e510427, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0xc40a0428, .b = 0x256d7780, .c = 0xf7d78000}, + {.a = 0xc1d40429, .b = 0x66ab7780, .c = 0xefe58000}, + {.a = 0x8abc042a, .b = 0x755d7f00, .c = 0xefd58000}, + {.a = 0x9147042b, .b = 0x66d57780, .c = 0xefc50000}, + {.a = 0xb4be042c, .b = 0x9ca35f80, .c = 0x77f58000}, + {.a = 0x94b6042d, .b = 0x66a97780, .c = 0xefc58000}, + {.a = 0xdb8a042e, .b = 0x89347b00, .c = 0xefed8000}, + {.a = 0xf429042f, .b = 0x6e957f80, .c = 0xe7f58000}, + {.a = 0xe6520430, .b = 0xb95bbf00, .c = 0xf7d18000}, + {.a = 0xe9600431, .b = 0xdd72f780, .c = 0xf7d68000}, + {.a = 0x83e60432, .b = 0xa52ef780, .c = 0xefc78000}, + {.a = 0x9a2b0433, .b = 0xdd577700, .c = 0xefd78000}, + {.a = 0xcf9e0434, .b = 0xbbaeee80, .c = 0xefd58000}, + {.a = 0xab550435, .b = 0xd27b7f80, .c = 0xe7d50000}, + {.a = 0x972f0436, .b = 0x33b4ef80, .c = 0xded78000}, + {.a = 0x8c880437, .b = 0x35557f80, .c = 0xe7f68000}, + {.a = 0xce6c0438, .b = 0xd4b4f780, .c = 0xf7ed8000}, + {.a = 0xeeb10439, .b = 0x35b6f680, .c = 0xefd58000}, + {.a = 0xdfa9043a, .b = 0x72b57780, .c = 0xefe68000}, + {.a = 0xef60043b, .b = 0x5bca7e80, .c = 0xeff58000}, + {.a = 0xe88a043c, .b = 0x366d7f80, .c = 0xefd58000}, + {.a = 0xd5ce043d, .b = 0x32d57f00, .c = 0xe7f38000}, + {.a = 0xb18f043e, .b = 0xddfadd80, .c = 0xf7eb8000}, + {.a = 0xe7af043f, .b = 0x96f46f00, .c = 0x7bd58000}, + {.a = 0x9c470440, .b = 0x32a55f80, .c = 0xf7d68000}, + {.a = 0xbe870441, .b = 0x256d7780, .c = 0xf7d68000}, + {.a = 0xebf50442, .b = 0x659e7e80, .c = 0xebf50000}, + {.a = 0xe08c0443, .b = 0xabb77780, .c = 0x76ef0000}, + {.a = 0x9c690444, .b = 0x36b6f780, .c = 0xefd48000}, + {.a = 0x97e30445, .b = 0xcd277f80, .c = 0xe7d58000}, + {.a = 0xc9da0446, .b = 0xcde55f80, .c = 0x77778000}, + {.a = 0xab480447, .b = 0x256d7700, .c = 0xf7d78000}, + {.a = 0xf3ab0448, .b = 0x256d7780, .c = 0xf7da8000}, + {.a = 0x87e20449, .b = 0xdd6f7780, .c = 0xefd58000}, + {.a = 0x93bf044a, .b = 0x3ba55e80, .c = 0xf7d50000}, + {.a = 0xac29044b, .b = 0x4ab67680, .c = 0xefe58000}, + {.a = 0xecbf044c, .b = 0xccaadf80, .c = 0xf7e50000}, + {.a = 0xa1e0044d, .b = 0xcdb55d80, .c = 0x77d08000}, + {.a = 0xa48a044e, .b = 0x2ab56f80, .c = 0xeed48000}, + {.a = 0xc263044f, .b = 0xbad55f80, .c = 0x77570000}, + {.a = 0x9eb10450, .b = 0xd574ed80, .c = 0xefd58000}, + {.a = 0x8e150451, .b = 0x256d7780, .c = 0xf7d58000}, + {.a = 0xc9ad0452, .b = 0x7a766e80, .c = 0xefd50000}, + {.a = 0xfda50453, .b = 0x656b7780, .c = 0xefef8000}, + {.a = 0xfa9c0454, .b = 0xedff7780, .c = 0x77538000}, + {.a = 0xc42e0455, .b = 0xad647780, .c = 0xf7cb8000}, + {.a = 0x91930456, .b = 0x6aa57f80, .c = 0xf3f58000}, + {.a = 0xf8770457, .b = 0xddad7780, .c = 0xeeb48000}, + {.a = 0xcb4c0458, .b = 0xc8557780, .c = 0xef968000}, + {.a = 0xe2740459, .b = 0xdc92df80, .c = 0xf7cd8000}, + {.a = 0xaade045a, .b = 0xcba6de80, .c = 0xf7cd8000}, + {.a = 0xaf68045b, .b = 0xbaacdf80, .c = 0xf7cd0000}, + {.a = 0x88ad045c, .b = 0x99747780, .c = 0x77d38000}, + {.a = 0xe906045d, .b = 0x335cef00, .c = 0xeed78000}, + {.a = 0xa0bf045e, .b = 0xb4e15f80, .c = 0x7bcb8000}, + {.a = 0x9cfd045f, .b = 0xccd55f80, .c = 0x77b18000}, + {.a = 0x90460460, .b = 0x67497f80, .c = 0xebe58000}, + {.a = 0xe5da0461, .b = 0xcdbdbd80, .c = 0x77e98000}, + {.a = 0x99970462, .b = 0xddf4df80, .c = 0xf7558000}, + {.a = 0xeb190463, .b = 0xe4bcef80, .c = 0xdfd78000}, + {.a = 0xa8e80464, .b = 0xbbac6e80, .c = 0xefd58000}, + {.a = 0xf6c90465, .b = 0x35b6f780, .c = 0xefd10000}, + {.a = 0xfbb80466, .b = 0xd574ed80, .c = 0xefe58000}, + {.a = 0xa6f70467, .b = 0xcdd55f80, .c = 0x7b918000}, + {.a = 0xe83b0468, .b = 0xad76f780, .c = 0xf7d98000}, + {.a = 0xea8f0469, .b = 0xcd737f80, .c = 0xebed8000}, + {.a = 0xbec4046a, .b = 0x2bf6ef00, .c = 0xedd58000}, + {.a = 0x931e046b, .b = 0xcd617f80, .c = 0xebd70000}, + {.a = 0xe65a046c, .b = 0x72d55f00, .c = 0xf7d68000}, + {.a = 0xac81046d, .b = 0xe6576f00, .c = 0x7bcd8000}, + {.a = 0xa6d4046e, .b = 0x9d155d80, .c = 0x77c98000}, + {.a = 0xdd2c046f, .b = 0xdb76f780, .c = 0xefd58000}, + {.a = 0x8b960470, .b = 0xc4eabf80, .c = 0xefb48000}, + {.a = 0xe4f80471, .b = 0xdd6f7780, .c = 0xefc50000}, + {.a = 0xca540472, .b = 0x3ab6ee80, .c = 0xefd50000}, + {.a = 0xd5ec0473, .b = 0x8adc7780, .c = 0xefcc8000}, + {.a = 0xc00e0474, .b = 0xaab66f80, .c = 0xefd58000}, + {.a = 0xd3cd0475, .b = 0x756d7f80, .c = 0xeff58000}, + {.a = 0xa0d40476, .b = 0x36b57780, .c = 0xefe08000}, + {.a = 0xbf130477, .b = 0xcd677f80, .c = 0xebd58000}, + {.a = 0xe97c0478, .b = 0x76bd7f80, .c = 0xefd40000}, + {.a = 0x80d30479, .b = 0x3a66ee80, .c = 0xefd50000}, + {.a = 0xed87047a, .b = 0x73757f80, .c = 0xe7e58000}, + {.a = 0xd62c047b, .b = 0xaed67b00, .c = 0xf7f68000}, + {.a = 0x9e62047c, .b = 0x6aad7780, .c = 0xe7fa8000}, + {.a = 0xc7cb047d, .b = 0x22377780, .c = 0xefbb8000}, + {.a = 0xf214047e, .b = 0xd6a6ef80, .c = 0xefe28000}, + {.a = 0x88b2047f, .b = 0x2eb36f80, .c = 0xedd68000}, + {.a = 0xb1fb0480, .b = 0xcd64f780, .c = 0xefdf8000}, + {.a = 0xf66b0481, .b = 0xb566f780, .c = 0xefd78000}, + {.a = 0xa2010482, .b = 0xbbbdbd80, .c = 0x77f78000}, + {.a = 0xba4d0483, .b = 0x66a77780, .c = 0xf7cd8000}, + {.a = 0xba4c0484, .b = 0x226ef680, .c = 0xeffb8000}, + {.a = 0xac730485, .b = 0xcd757f80, .c = 0xebee8000}, + {.a = 0xd7660486, .b = 0x65777780, .c = 0xefc38000}, + {.a = 0xde4b0487, .b = 0xdc54eb80, .c = 0xefa58000}, + {.a = 0xc2c20488, .b = 0xceaf7f80, .c = 0xebcd0000}, + {.a = 0xe8040489, .b = 0xcd777f80, .c = 0xebed8000}, + {.a = 0xb2eb048a, .b = 0x6ad66e80, .c = 0xefcd0000}, + {.a = 0x8784048b, .b = 0x26eaf780, .c = 0xef5d8000}, + {.a = 0xb640048c, .b = 0xeb767780, .c = 0x77ed8000}, + {.a = 0xae75048d, .b = 0xd6756f80, .c = 0x7baf8000}, + {.a = 0xbbde048e, .b = 0xa4aa7780, .c = 0xefe88000}, + {.a = 0xeba0048f, .b = 0xd8277780, .c = 0xef558000}, + {.a = 0xa9bf0490, .b = 0xdbd4dd80, .c = 0xf7ce0000}, + {.a = 0xd55b0491, .b = 0x2cb37f80, .c = 0xf7ef0000}, + {.a = 0xc68b0492, .b = 0xc9f77780, .c = 0xef578000}, + {.a = 0xd9730493, .b = 0x3cbaee80, .c = 0xefd50000}, + {.a = 0xc6c80494, .b = 0x9d685f80, .c = 0x7bf78000}, + {.a = 0x8d050495, .b = 0xd5f56f80, .c = 0x7bed8000}, + {.a = 0xf38a0496, .b = 0x26a57780, .c = 0xefd78000}, + {.a = 0xfc610497, .b = 0x9b657780, .c = 0x77d38000}, + {.a = 0xa9df0498, .b = 0x26997780, .c = 0xefd28000}, + {.a = 0xb08f0499, .b = 0xae54f780, .c = 0xf7ed8000}, + {.a = 0xd3ea049a, .b = 0xdd66f780, .c = 0xf7d28000}, + {.a = 0xab61049b, .b = 0xd97cf780, .c = 0xefef8000}, + {.a = 0xd567049c, .b = 0xb9a6ef00, .c = 0xefd28000}, + {.a = 0xd831049d, .b = 0xeb735f00, .c = 0x77d58000}, + {.a = 0xc749049e, .b = 0xdd777780, .c = 0xef7b0000}, + {.a = 0xd601049f, .b = 0x32d77780, .c = 0xefbb8000}, + {.a = 0x88e004a0, .b = 0xd6b6b780, .c = 0xefd28000}, + {.a = 0xe47e04a1, .b = 0x66997f80, .c = 0xebf58000}, + {.a = 0xfd5804a2, .b = 0x2bb2ef80, .c = 0xeee48000}, + {.a = 0xd27f04a3, .b = 0x25ecf680, .c = 0xefc50000}, + {.a = 0xfdc104a4, .b = 0xc5b2df80, .c = 0xf7d78000}, + {.a = 0x86d104a5, .b = 0x9cf35f80, .c = 0x7bfb8000}, + {.a = 0xb64204a6, .b = 0x9ae47680, .c = 0x77d58000}, + {.a = 0x9e6f04a7, .b = 0x356d7780, .c = 0xefcb8000}, + {.a = 0xa7b504a8, .b = 0x6d657780, .c = 0xf7cd8000}, + {.a = 0x899404a9, .b = 0xd574ef80, .c = 0xefe50000}, + {.a = 0xb0de04aa, .b = 0x9f635f80, .c = 0x7bd10000}, + {.a = 0xeafb04ab, .b = 0x2ab57780, .c = 0xf7ea8000}, + {.a = 0xbcbc04ac, .b = 0xb5bea780, .c = 0xdfea0000}, + {.a = 0xa11804ad, .b = 0xbd54f780, .c = 0xeff58000}, + {.a = 0xafb404ae, .b = 0xa2d46f80, .c = 0xef5f0000}, + {.a = 0x90dd04af, .b = 0x99b57580, .c = 0x6fd58000}, + {.a = 0xfcfd04b0, .b = 0xccb4bf80, .c = 0x7bda8000}, + {.a = 0x965004b1, .b = 0xa678f780, .c = 0xefe58000}, + {.a = 0x8f0e04b2, .b = 0x9cf45d80, .c = 0xf7d58000}, + {.a = 0x92ef04b3, .b = 0x2566f680, .c = 0xefd30000}, + {.a = 0x89ab04b4, .b = 0xbcb8ef80, .c = 0xefdd8000}, + {.a = 0x875e04b5, .b = 0x66997f80, .c = 0xebf58000}, + {.a = 0xa75004b6, .b = 0x5db67680, .c = 0xefd38000}, + {.a = 0x937704b7, .b = 0xeab3b780, .c = 0x77d58000}, + {.a = 0x8fd404b8, .b = 0x35577780, .c = 0xefc70000}, + {.a = 0x8ba704b9, .b = 0xd92b7780, .c = 0xef6f8000}, + {.a = 0xdaf604ba, .b = 0xd5bb7f80, .c = 0xe7d68000}, + {.a = 0x9f8204bb, .b = 0xd4b77f80, .c = 0xe7d48000}, + {.a = 0xe0c704bc, .b = 0x3bb2ef80, .c = 0xeed58000}, + {.a = 0x93a104bd, .b = 0x657f7780, .c = 0xefcb8000}, + {.a = 0x910f04be, .b = 0x2ab36f80, .c = 0xefd68000}, + {.a = 0xfd0704bf, .b = 0xb6f6f780, .c = 0xefd48000}, + {.a = 0xccfd04c0, .b = 0x6d7dbf80, .c = 0xf7d50000}, + {.a = 0xdbc604c1, .b = 0x6ab57780, .c = 0xf7ee8000}, + {.a = 0xfe2004c2, .b = 0x995b7700, .c = 0x77d58000}, + {.a = 0xb2fe04c3, .b = 0xcd66bf80, .c = 0xf7f78000}, + {.a = 0x8f1b04c4, .b = 0x76567780, .c = 0xefd50000}, + {.a = 0x8baf04c5, .b = 0x3a6eef80, .c = 0xeec58000}, + {.a = 0xb48504c6, .b = 0x35d57700, .c = 0xefc38000}, + {.a = 0x92dd04c7, .b = 0xa56c7780, .c = 0xefdf8000}, + {.a = 0xbe7204c8, .b = 0x6eb37f80, .c = 0xf7d58000}, + {.a = 0x9c2e04c9, .b = 0xed757700, .c = 0x77d78000}, + {.a = 0xea8904ca, .b = 0x3354ef00, .c = 0xddc78000}, + {.a = 0x875e04cb, .b = 0x2a777780, .c = 0xf7eb8000}, + {.a = 0xedcc04cc, .b = 0x73975e80, .c = 0xf7d50000}, + {.a = 0x923704cd, .b = 0x3b64ef80, .c = 0xeec78000}, + {.a = 0x88b504ce, .b = 0x73d57f80, .c = 0xf7558000}, + {.a = 0xc94404cf, .b = 0xa5a8af80, .c = 0x7ec60000}, + {.a = 0x9f3f04d0, .b = 0x32b6ee80, .c = 0xefd48000}, + {.a = 0xda9804d1, .b = 0xddb4ee80, .c = 0xefdd0000}, + {.a = 0xc8ce04d2, .b = 0xba646d80, .c = 0xefcb8000}, + {.a = 0xb71304d3, .b = 0x35ad7780, .c = 0xefc50000}, + {.a = 0xa64504d4, .b = 0xad7bbf80, .c = 0xf7b58000}, + {.a = 0xf7e204d5, .b = 0x222d7780, .c = 0xefb78000}, + {.a = 0xdec704d6, .b = 0x8a747780, .c = 0xefe68000}, + {.a = 0xe0e904d7, .b = 0x94ba6f80, .c = 0xefef8000}, + {.a = 0xb2cb04d8, .b = 0xa6aef780, .c = 0xefef8000}, + {.a = 0xb9f004d9, .b = 0xbdbaef80, .c = 0xefd68000}, + {.a = 0xd13c04da, .b = 0xd5b56f80, .c = 0x6ed78000}, + {.a = 0xab9a04db, .b = 0xbad4df80, .c = 0xf7578000}, + {.a = 0x85cb04dc, .b = 0xdebd7780, .c = 0xf7ee0000}, + {.a = 0xbc9004dd, .b = 0x22957780, .c = 0xefd68000}, + {.a = 0xdc7004de, .b = 0x67737f80, .c = 0xebea8000}, + {.a = 0x809804df, .b = 0xaab6ef80, .c = 0xefe58000}, + {.a = 0xf83b04e0, .b = 0x9a6cbf80, .c = 0xf7e98000}, + {.a = 0xa0d404e1, .b = 0xceb77f80, .c = 0xebd70000}, + {.a = 0xc78004e2, .b = 0x72956f80, .c = 0xefd58000}, + {.a = 0xfb3104e3, .b = 0xeab4b780, .c = 0x77d78000}, + {.a = 0xcfa904e4, .b = 0xbbb05e80, .c = 0xf7d58000}, + {.a = 0xdd2e04e5, .b = 0x76bd7f80, .c = 0xefd40000}, + {.a = 0xd07504e6, .b = 0xce54d780, .c = 0xf7d68000}, + {.a = 0x956c04e7, .b = 0x3acd6f80, .c = 0xef550000}, + {.a = 0xa7bb04e8, .b = 0xd954dd00, .c = 0xf7d48000}, + {.a = 0xde3804e9, .b = 0x6d757f80, .c = 0xf7ec8000}, + {.a = 0xf05004ea, .b = 0x9d7c5d80, .c = 0xf7e58000}, + {.a = 0xd03304eb, .b = 0x67627e80, .c = 0xebeb8000}, + {.a = 0x920004ec, .b = 0xb6aaf780, .c = 0xefc08000}, + {.a = 0xb5fd04ed, .b = 0x32dd7700, .c = 0xeff78000}, + {.a = 0xd4ca04ee, .b = 0xb2547700, .c = 0xeff58000}, + {.a = 0xcafd04ef, .b = 0x24557f80, .c = 0xf7b58000}, + {.a = 0x8ffc04f0, .b = 0x4ca3bf80, .c = 0xf7f68000}, + {.a = 0xd73004f1, .b = 0x36b77780, .c = 0xefe58000}, + {.a = 0xdd3404f2, .b = 0x6df57f80, .c = 0xf7558000}, + {.a = 0xdf5f04f3, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0xad6104f4, .b = 0x72b66f80, .c = 0xef958000}, + {.a = 0xd74204f5, .b = 0x32b57f80, .c = 0xe7e28000}, + {.a = 0xebf704f6, .b = 0xcaa77f80, .c = 0xe7f70000}, + {.a = 0xc8d104f7, .b = 0xcd6b7f80, .c = 0xebe18000}, + {.a = 0xc30704f8, .b = 0xd966d780, .c = 0xf7b78000}, + {.a = 0xb5c704f9, .b = 0xd9f4dd80, .c = 0xf7d50000}, + {.a = 0xc5d104fa, .b = 0x6d777f80, .c = 0xe7eb8000}, + {.a = 0xbe0604fb, .b = 0xdd76f780, .c = 0xefff8000}, + {.a = 0xe00a04fc, .b = 0xd6756f80, .c = 0x7bad8000}, + {.a = 0xba7d04fd, .b = 0xdd777780, .c = 0xeff58000}, + {.a = 0xcf1304fe, .b = 0xbae4df80, .c = 0xf7d48000}, + {.a = 0xce5b04ff, .b = 0xaef77b80, .c = 0x77d78000}, + {.a = 0x8d4f0500, .b = 0x7b657f80, .c = 0xf7d58000}, + {.a = 0xedc20501, .b = 0xbaaedf80, .c = 0xf7c48000}, + {.a = 0xc2e30502, .b = 0xd96d7780, .c = 0xf7df8000}, + {.a = 0x90e70503, .b = 0xd974f780, .c = 0xefef8000}, + {.a = 0xf2840504, .b = 0x756d7780, .c = 0xefc58000}, + {.a = 0xee950505, .b = 0xce66df80, .c = 0xf7d48000}, + {.a = 0x9d4b0506, .b = 0xa6a67780, .c = 0xf7ce8000}, + {.a = 0x94900507, .b = 0xbbd6dd80, .c = 0xf7d70000}, + {.a = 0xa1b50508, .b = 0xde6cf780, .c = 0xeffd8000}, + {.a = 0x85260509, .b = 0xdd54df80, .c = 0xf7d50000}, + {.a = 0x9dba050a, .b = 0x72b57780, .c = 0xefd50000}, + {.a = 0xf536050b, .b = 0x65757f80, .c = 0xebec8000}, + {.a = 0xe059050c, .b = 0xed757700, .c = 0x77cb8000}, + {.a = 0xf0a9050d, .b = 0xbbd35f80, .c = 0x77570000}, + {.a = 0xe330050e, .b = 0xd4f46f80, .c = 0x6f510000}, + {.a = 0xf7bd050f, .b = 0x357f7780, .c = 0xefd78000}, + {.a = 0xcd850510, .b = 0x66ad7780, .c = 0xefee8000}, + {.a = 0x90620511, .b = 0x225aee80, .c = 0xefa58000}, + {.a = 0xd8f60512, .b = 0xdcd4df80, .c = 0xf7918000}, + {.a = 0xdae90513, .b = 0xa56cf780, .c = 0xefe98000}, + {.a = 0xb2510514, .b = 0xedf57f80, .c = 0x7b558000}, + {.a = 0xf4e00515, .b = 0x656f7780, .c = 0xefdb8000}, + {.a = 0xee6e0516, .b = 0xad647780, .c = 0x77cb8000}, + {.a = 0xa21d0517, .b = 0x3976b700, .c = 0xefd58000}, + {.a = 0x91180518, .b = 0xcd6b7780, .c = 0xefc10000}, + {.a = 0xccfd0519, .b = 0xb696f780, .c = 0xefe48000}, + {.a = 0xc5a2051a, .b = 0x7b55bf00, .c = 0xf7f48000}, + {.a = 0x8ea6051b, .b = 0xdd777780, .c = 0xf7d38000}, + {.a = 0xdb7e051c, .b = 0x2ac56f80, .c = 0xef978000}, + {.a = 0xb156051d, .b = 0xcd64dd80, .c = 0xf7f58000}, + {.a = 0xd916051e, .b = 0xb6f4f780, .c = 0xefd48000}, + {.a = 0xeb52051f, .b = 0x5d746e80, .c = 0xefd58000}, + {.a = 0xed9b0520, .b = 0x3baeee80, .c = 0xefd50000}, + {.a = 0xaf910521, .b = 0xccad7780, .c = 0xefda8000}, + {.a = 0xbc280522, .b = 0x622e7680, .c = 0xefeb8000}, + {.a = 0xf2030523, .b = 0x36d6f780, .c = 0xef758000}, + {.a = 0xf6f90524, .b = 0x9d747780, .c = 0x77d78000}, + {.a = 0xd1dd0525, .b = 0xaef36f80, .c = 0x7bdf8000}, + {.a = 0xfd910526, .b = 0x34b2ee80, .c = 0xefd58000}, + {.a = 0xa66f0527, .b = 0xbaa6ef80, .c = 0xefcc8000}, + {.a = 0x9aca0528, .b = 0xd6c7b780, .c = 0x6f558000}, + {.a = 0xe7450529, .b = 0xd572ef80, .c = 0xefe58000}, + {.a = 0xb387052a, .b = 0x66a57f80, .c = 0xebcc8000}, + {.a = 0xb2cc052b, .b = 0xccad7780, .c = 0xefe50000}, + {.a = 0xab48052c, .b = 0x967c6f80, .c = 0x7bd78000}, + {.a = 0xb6fa052d, .b = 0x26957780, .c = 0xefc28000}, + {.a = 0x883d052e, .b = 0x2b72ef80, .c = 0xeee68000}, + {.a = 0xe3b2052f, .b = 0xb6b4f780, .c = 0xefd58000}, + {.a = 0xf4cc0530, .b = 0x9b67b780, .c = 0x77d50000}, + {.a = 0xa9490531, .b = 0xd4aaf780, .c = 0xf7f90000}, + {.a = 0xb4030532, .b = 0x66a77780, .c = 0xf7ed0000}, + {.a = 0xae2b0533, .b = 0x9b6a7780, .c = 0xf7cb8000}, + {.a = 0x8e610534, .b = 0x32b77780, .c = 0xefe58000}, + {.a = 0xdf6f0535, .b = 0xa564ff80, .c = 0xebd58000}, + {.a = 0x83900536, .b = 0xddf57780, .c = 0xeeb58000}, + {.a = 0xe7fe0537, .b = 0xab7d7780, .c = 0x77d78000}, + {.a = 0xff090538, .b = 0xaed4f780, .c = 0xf7bd8000}, + {.a = 0xe66f0539, .b = 0xdceb7780, .c = 0xefd18000}, + {.a = 0xcbf4053a, .b = 0xdd5d7780, .c = 0x77b38000}, + {.a = 0x9843053b, .b = 0x52f66e80, .c = 0xefd50000}, + {.a = 0xbefe053c, .b = 0xcd6d7f80, .c = 0xe7f58000}, + {.a = 0xcd3b053d, .b = 0x33775f80, .c = 0xf7db8000}, + {.a = 0xbf06053e, .b = 0xdadd7680, .c = 0x77e98000}, + {.a = 0xfd50053f, .b = 0x8ab67780, .c = 0xefd58000}, + {.a = 0xdd500540, .b = 0x4cb5bb80, .c = 0xf7d68000}, + {.a = 0xbc3f0541, .b = 0x6d757f80, .c = 0xf7e48000}, + {.a = 0xaea30542, .b = 0xd2f77f80, .c = 0xe7e58000}, + {.a = 0xa6270543, .b = 0xeafb7680, .c = 0x77d18000}, + {.a = 0xbb1c0544, .b = 0xcd6d7780, .c = 0xefcc8000}, + {.a = 0x973c0545, .b = 0xcd72f780, .c = 0xefdf8000}, + {.a = 0xa46d0546, .b = 0x36e6f700, .c = 0xefd38000}, + {.a = 0xedf50547, .b = 0xd7776f80, .c = 0x7bad8000}, + {.a = 0xe5660548, .b = 0x72755f80, .c = 0xf7d58000}, + {.a = 0x946c0549, .b = 0xa756f780, .c = 0xef958000}, + {.a = 0xf109054a, .b = 0x657f7f80, .c = 0xebeb8000}, + {.a = 0xa6de054b, .b = 0x9dd77780, .c = 0x77758000}, + {.a = 0xc465054c, .b = 0x6d6d7f80, .c = 0xf7cd8000}, + {.a = 0xe0fd054d, .b = 0xed735f80, .c = 0x77d78000}, + {.a = 0xbd62054e, .b = 0xcd2af780, .c = 0xefc18000}, + {.a = 0xbeb5054f, .b = 0xb7565f80, .c = 0x7b958000}, + {.a = 0xbd590550, .b = 0xda2f7f80, .c = 0xef758000}, + {.a = 0xb7d70551, .b = 0xbbaede80, .c = 0xf7cd8000}, + {.a = 0x9aff0552, .b = 0xcd677f80, .c = 0xe7f78000}, + {.a = 0xfd240553, .b = 0xd6aab780, .c = 0xefcc8000}, + {.a = 0xe0480554, .b = 0x22557780, .c = 0xefdb8000}, + {.a = 0xb0eb0555, .b = 0x9ab46f80, .c = 0xefd78000}, + {.a = 0xa2a60556, .b = 0xdab4f780, .c = 0xf7d58000}, + {.a = 0x99820557, .b = 0x9eb75f80, .c = 0x77d50000}, + {.a = 0xe0190558, .b = 0xcef77f80, .c = 0xebd68000}, + {.a = 0xf8390559, .b = 0xccb4df80, .c = 0xf7ed0000}, + {.a = 0xd553055a, .b = 0x34a57f80, .c = 0xeff58000}, + {.a = 0x8781055b, .b = 0xeb7f7780, .c = 0x76d58000}, + {.a = 0xad32055c, .b = 0xb6f4f780, .c = 0xefd58000}, + {.a = 0xa50b055d, .b = 0xdaa6ef80, .c = 0xefcf8000}, + {.a = 0xfe44055e, .b = 0x66e97780, .c = 0xefeb8000}, + {.a = 0xee73055f, .b = 0x73517f80, .c = 0xe7f40000}, + {.a = 0x9ae80560, .b = 0xccb2df80, .c = 0xf7d48000}, + {.a = 0xba850561, .b = 0xd5f4df80, .c = 0xf7578000}, + {.a = 0x80570562, .b = 0x6d777f80, .c = 0xe7d70000}, + {.a = 0xb4540563, .b = 0xeee56f80, .c = 0x7b778000}, + {.a = 0xffb20564, .b = 0xba94ef80, .c = 0xdf758000}, + {.a = 0xe24d0565, .b = 0xcabf7f80, .c = 0xe7ed0000}, + {.a = 0x93070566, .b = 0x2da37780, .c = 0xf7d78000}, + {.a = 0xac7e0567, .b = 0x35577f00, .c = 0xe7f78000}, + {.a = 0xda550568, .b = 0x36b77b80, .c = 0xe7d28000}, + {.a = 0xcb710569, .b = 0x66957f80, .c = 0xebee8000}, + {.a = 0xbebb056a, .b = 0x9a966e80, .c = 0xefd50000}, + {.a = 0xa9b8056b, .b = 0x53ee6f80, .c = 0xefb48000}, + {.a = 0x8b3d056c, .b = 0x26aaf700, .c = 0xefc58000}, + {.a = 0xbc38056d, .b = 0x25ad7780, .c = 0xf7d68000}, + {.a = 0xdf53056e, .b = 0x269b7780, .c = 0xefce8000}, + {.a = 0xf166056f, .b = 0xb2b67680, .c = 0xefdb8000}, + {.a = 0x8d8a0570, .b = 0x269d7780, .c = 0xefce8000}, + {.a = 0xfe2a0571, .b = 0x3676f680, .c = 0xefe50000}, + {.a = 0xd81b0572, .b = 0x26957780, .c = 0xefc68000}, + {.a = 0xae430573, .b = 0x53ea6e80, .c = 0xefdb0000}, + {.a = 0xa20e0574, .b = 0xddb4ef80, .c = 0xefd28000}, + {.a = 0xa3f30575, .b = 0x9968bf80, .c = 0xf7cc0000}, + {.a = 0xafa90576, .b = 0x9cdd6f80, .c = 0x6f558000}, + {.a = 0xc0960577, .b = 0xbcf55d80, .c = 0x77d58000}, + {.a = 0xc6c20578, .b = 0xaab6ef80, .c = 0xefe48000}, + {.a = 0xd7f40579, .b = 0xc96af780, .c = 0xefe58000}, + {.a = 0xc4ca057a, .b = 0xdaaaf780, .c = 0xf7cb8000}, + {.a = 0xecae057b, .b = 0xbcb2ef80, .c = 0xefe48000}, + {.a = 0x886e057c, .b = 0xde977780, .c = 0xefe58000}, + {.a = 0xf709057d, .b = 0xa6aaf780, .c = 0xefd08000}, + {.a = 0xd3aa057e, .b = 0x22357780, .c = 0xefbb8000}, + {.a = 0xeafd057f, .b = 0x76b57780, .c = 0xefe48000}, + {.a = 0xdab60580, .b = 0xd244ef80, .c = 0xefe68000}, + {.a = 0xcc2b0581, .b = 0xdcd2f780, .c = 0xf7b38000}, + {.a = 0xc5fb0582, .b = 0x2dd57f00, .c = 0xf7f78000}, + {.a = 0xf78a0583, .b = 0x329d6f80, .c = 0xefdb8000}, + {.a = 0xbb950584, .b = 0x96936f80, .c = 0x6fe70000}, + {.a = 0xd9d70585, .b = 0xd264ef80, .c = 0xefe68000}, + {.a = 0xf68b0586, .b = 0xcab77f80, .c = 0xefee8000}, + {.a = 0xa00d0587, .b = 0x35b6ef80, .c = 0xefd48000}, + {.a = 0xd2af0588, .b = 0xc954f780, .c = 0xefc78000}, + {.a = 0xe65e0589, .b = 0x25b57780, .c = 0xf7d18000}, + {.a = 0xbaa5058a, .b = 0xcd74af80, .c = 0x7bd58000}, + {.a = 0xbf72058b, .b = 0xa56cf780, .c = 0xefc48000}, + {.a = 0xfe9d058c, .b = 0x66957f80, .c = 0xebed8000}, + {.a = 0xbca4058d, .b = 0x9b566e80, .c = 0xefd48000}, + {.a = 0xeddf058e, .b = 0xdd577780, .c = 0xefc58000}, + {.a = 0xe4dc058f, .b = 0x76567780, .c = 0xefd78000}, + {.a = 0xb11f0590, .b = 0x9abfbf80, .c = 0xf7e58000}, + {.a = 0xe4520591, .b = 0x256d7780, .c = 0xf7d78000}, + {.a = 0xb5630592, .b = 0xe557a780, .c = 0x7fd58000}, + {.a = 0xb9620593, .b = 0x9d677780, .c = 0x77d78000}, + {.a = 0xb3c60594, .b = 0x32ad5f80, .c = 0xf5f50000}, + {.a = 0xe1de0595, .b = 0xc4a8ff80, .c = 0xf3fd0000}, + {.a = 0x9ff80596, .b = 0xbaac6e80, .c = 0xef958000}, + {.a = 0x93e60597, .b = 0x65ad7f80, .c = 0xeff58000}, + {.a = 0xea320598, .b = 0xdcb2ef80, .c = 0xefd58000}, + {.a = 0xbf070599, .b = 0xa9b46f80, .c = 0xefd68000}, + {.a = 0x82bd059a, .b = 0x32f57f80, .c = 0xe7a78000}, + {.a = 0xdd4e059b, .b = 0xba94df80, .c = 0xf7d48000}, + {.a = 0xe338059c, .b = 0xdcb4df80, .c = 0xf7658000}, + {.a = 0xc5fe059d, .b = 0xcea37f80, .c = 0xebed0000}, + {.a = 0xb33a059e, .b = 0xbaa4df80, .c = 0xf7cc8000}, + {.a = 0xd5fa059f, .b = 0x27d6ff00, .c = 0xebd58000}, + {.a = 0xc3e505a0, .b = 0xaabaef80, .c = 0xefec8000}, + {.a = 0xae1b05a1, .b = 0x4d77bd80, .c = 0xf7ee8000}, + {.a = 0xf31605a2, .b = 0xcaf77f80, .c = 0xe7d68000}, + {.a = 0xb85405a3, .b = 0x75766e80, .c = 0xefd70000}, + {.a = 0x952005a4, .b = 0x6f757780, .c = 0xf7d58000}, + {.a = 0x8a6f05a5, .b = 0x625e6e80, .c = 0xefd50000}, + {.a = 0x927605a6, .b = 0x65757f80, .c = 0xebd58000}, + {.a = 0xf18505a7, .b = 0x72b67780, .c = 0xefef8000}, + {.a = 0xd1ca05a8, .b = 0x66a97780, .c = 0xefc48000}, + {.a = 0xd9eb05a9, .b = 0x45ae6e80, .c = 0xefc58000}, + {.a = 0xa94705aa, .b = 0xdd72f780, .c = 0xf7d68000}, + {.a = 0xe47c05ab, .b = 0xd2aeef00, .c = 0xeff48000}, + {.a = 0xd5c905ac, .b = 0x65ac7780, .c = 0xefe98000}, + {.a = 0xbe7705ad, .b = 0x6d6d7f80, .c = 0xf7cf8000}, + {.a = 0xa00f05ae, .b = 0xe76d6e80, .c = 0x7bd58000}, + {.a = 0xaabf05af, .b = 0xccd55f80, .c = 0x77958000}, + {.a = 0xd15b05b0, .b = 0x4d75bf80, .c = 0xf7d78000}, + {.a = 0xb5d705b1, .b = 0x77377780, .c = 0xefe58000}, + {.a = 0xc79505b2, .b = 0x3c7ede80, .c = 0xf7d50000}, + {.a = 0xdba305b3, .b = 0x65777780, .c = 0xefd38000}, + {.a = 0xb3f205b4, .b = 0x75557780, .c = 0xefe58000}, + {.a = 0xaa9e05b5, .b = 0x25b77780, .c = 0xf7ea8000}, + {.a = 0xac2205b6, .b = 0xcdad7780, .c = 0xeeda8000}, + {.a = 0xdafc05b7, .b = 0x226af680, .c = 0xeff98000}, + {.a = 0xfc6705b8, .b = 0x3ba4ef80, .c = 0xeec78000}, + {.a = 0xc74205b9, .b = 0x99757580, .c = 0x77fd8000}, + {.a = 0xfc4c05ba, .b = 0x32d55f00, .c = 0xf7d58000}, + {.a = 0xf34705bb, .b = 0x9b767b80, .c = 0xefd58000}, + {.a = 0x97df05bc, .b = 0xcd8ef780, .c = 0xefeb8000}, + {.a = 0x95b605bd, .b = 0x356d7780, .c = 0xefca8000}, + {.a = 0xfe1005be, .b = 0xb56cf780, .c = 0xefc58000}, + {.a = 0xc58005bf, .b = 0x6b5d6f80, .c = 0xefed8000}, + {.a = 0xdeee05c0, .b = 0xcd36bf80, .c = 0x77ed8000}, + {.a = 0xe45e05c1, .b = 0xdb44ef80, .c = 0xee978000}, + {.a = 0x83b705c2, .b = 0x37baf680, .c = 0xefd58000}, + {.a = 0x977e05c3, .b = 0x72b57780, .c = 0xefe48000}, + {.a = 0x83a705c4, .b = 0xcb6cdd80, .c = 0xf7d58000}, + {.a = 0xb35a05c5, .b = 0xad4ef780, .c = 0xdf9b8000}, + {.a = 0x926705c6, .b = 0x3bb2ef80, .c = 0xeed58000}, + {.a = 0x9f2305c7, .b = 0x3676ff80, .c = 0xebd58000}, + {.a = 0xb01305c8, .b = 0xcd775f80, .c = 0xf7ef8000}, + {.a = 0xf5a805c9, .b = 0x2db57f80, .c = 0xe7dd8000}, + {.a = 0xd2d805ca, .b = 0xdadb7780, .c = 0x77b78000}, + {.a = 0xa00d05cb, .b = 0x9c555d80, .c = 0x77d50000}, + {.a = 0xb36405cc, .b = 0x76597780, .c = 0xe7f48000}, + {.a = 0xdd8305cd, .b = 0xcff45f80, .c = 0x77538000}, + {.a = 0xc8d105ce, .b = 0xed74ef80, .c = 0xdfd58000}, + {.a = 0x992805cf, .b = 0x4db67f80, .c = 0xebd68000}, + {.a = 0x8b0505d0, .b = 0xb4acef80, .c = 0xefed8000}, + {.a = 0xa3a405d1, .b = 0xbad0ef80, .c = 0xdf958000}, + {.a = 0xb70c05d2, .b = 0xcd777f80, .c = 0xebd58000}, + {.a = 0xbb5f05d3, .b = 0x656d7780, .c = 0xf7f48000}, + {.a = 0xae0805d4, .b = 0x7a555f80, .c = 0xf7d68000}, + {.a = 0xd4d705d5, .b = 0x9cda6e80, .c = 0xefdd8000}, + {.a = 0xc60605d6, .b = 0x3baaef80, .c = 0xef418000}, + {.a = 0xdb1f05d7, .b = 0x32b6f780, .c = 0xefec8000}, + {.a = 0x91b205d8, .b = 0xd574f780, .c = 0xf7ed8000}, + {.a = 0xa74205d9, .b = 0xcd54ef80, .c = 0xefe70000}, + {.a = 0x8d4005da, .b = 0x9cf55b80, .c = 0x77d50000}, + {.a = 0x893805db, .b = 0x9cbd5b80, .c = 0x77e78000}, + {.a = 0xe00a05dc, .b = 0xdd757780, .c = 0x77a88000}, + {.a = 0x8fc705dd, .b = 0xdd7cef80, .c = 0xefd78000}, + {.a = 0x8c0905de, .b = 0xc956f780, .c = 0xefc50000}, + {.a = 0xb84a05df, .b = 0xb5757780, .c = 0x6ed78000}, + {.a = 0x8d8005e0, .b = 0x26ad7f80, .c = 0xefd68000}, + {.a = 0x95f505e1, .b = 0x23a8f780, .c = 0xedfd8000}, + {.a = 0xbed405e2, .b = 0xdd757780, .c = 0x77aa8000}, + {.a = 0xa42405e3, .b = 0xddb2ef80, .c = 0xeed58000}, + {.a = 0xc92605e4, .b = 0x29776f80, .c = 0xefd38000}, + {.a = 0x91c705e5, .b = 0x2eab7780, .c = 0xf7df8000}, + {.a = 0xe54405e6, .b = 0xf2756d80, .c = 0x6fd48000}, + {.a = 0xb50f05e7, .b = 0x49d67680, .c = 0xefd78000}, + {.a = 0xfd5305e8, .b = 0xad7fbf80, .c = 0xf7b78000}, + {.a = 0xacdf05e9, .b = 0xab746f80, .c = 0xefd20000}, + {.a = 0x816005ea, .b = 0x4d6dbf80, .c = 0xf7e68000}, + {.a = 0xcac405eb, .b = 0xe6d55f00, .c = 0x7bd38000}, + {.a = 0x98a105ec, .b = 0x339aef80, .c = 0xeed58000}, + {.a = 0xb58605ed, .b = 0xdcb4df80, .c = 0xf7d58000}, + {.a = 0x9fb205ee, .b = 0x64957780, .c = 0xefe58000}, + {.a = 0xc37805ef, .b = 0x9ae47700, .c = 0x77d58000}, + {.a = 0x990505f0, .b = 0xd9e4d780, .c = 0xf7bf8000}, + {.a = 0xde2805f1, .b = 0x2bb2dd80, .c = 0xf7e78000}, + {.a = 0xefc805f2, .b = 0xceab7f80, .c = 0xebce8000}, + {.a = 0xa3e805f3, .b = 0x37daf780, .c = 0xef758000}, + {.a = 0xb6cc05f4, .b = 0xcd6f7f80, .c = 0xe7f58000}, + {.a = 0x90e505f5, .b = 0xba54df00, .c = 0xf7d58000}, + {.a = 0xc4d905f6, .b = 0x2676f680, .c = 0xefd50000}, + {.a = 0xc40905f7, .b = 0x9c155d80, .c = 0x77d58000}, + {.a = 0x99c305f8, .b = 0xdd6f7700, .c = 0xefd78000}, + {.a = 0xc69b05f9, .b = 0xdcb4df80, .c = 0xf7658000}, + {.a = 0xafa705fa, .b = 0x957f6d80, .c = 0x7bd58000}, + {.a = 0xf35a05fb, .b = 0x9d726e80, .c = 0xefd70000}, + {.a = 0xd2b205fc, .b = 0xdd6f7780, .c = 0xefc68000}, + {.a = 0xaa5205fd, .b = 0xa66c6f80, .c = 0x7bd58000}, + {.a = 0xf48805fe, .b = 0xbddc6f80, .c = 0xef570000}, + {.a = 0xc8f505ff, .b = 0xdcab7780, .c = 0xf7da8000}, + {.a = 0x90f70600, .b = 0xf5b7be80, .c = 0x7bd58000}, + {.a = 0x8f680601, .b = 0x256d7780, .c = 0xf7d58000}, + {.a = 0xf4760602, .b = 0x33e6ff80, .c = 0xeb758000}, + {.a = 0xcec10603, .b = 0xad647780, .c = 0x77cb8000}, + {.a = 0x9fec0604, .b = 0x396eef80, .c = 0xeec58000}, + {.a = 0xd52b0605, .b = 0xd4b56f80, .c = 0x7bed0000}, + {.a = 0x9b160606, .b = 0xdd54f780, .c = 0xefff0000}, + {.a = 0xe9360607, .b = 0x35555f00, .c = 0xf7f78000}, + {.a = 0xa2f60608, .b = 0xbb92de80, .c = 0xf7d18000}, + {.a = 0x92880609, .b = 0x6d777f80, .c = 0xe7ed8000}, + {.a = 0xf6f6060a, .b = 0x9d966e80, .c = 0xefd70000}, + {.a = 0x851e060b, .b = 0x75967680, .c = 0xefeb0000}, + {.a = 0xb714060c, .b = 0xb6a8f780, .c = 0xefc48000}, + {.a = 0xe9ab060d, .b = 0xd2acef80, .c = 0xefd58000}, + {.a = 0x9abd060e, .b = 0xdd957780, .c = 0xeed68000}, + {.a = 0x97e8060f, .b = 0x7b555f00, .c = 0xf7d58000}, + {.a = 0xceb30610, .b = 0x2ddd7f00, .c = 0xf7fb8000}, + {.a = 0xfcca0611, .b = 0x75557780, .c = 0xefc50000}, + {.a = 0x8ebf0612, .b = 0xbab5b780, .c = 0x779f8000}, + {.a = 0xd4a90613, .b = 0x25b77f80, .c = 0xebd68000}, + {.a = 0xac070614, .b = 0x6d757f80, .c = 0xf7e48000}, + {.a = 0x93630615, .b = 0x756d7780, .c = 0xe7f58000}, + {.a = 0x91750616, .b = 0x32557700, .c = 0xefdf8000}, + {.a = 0xfa480617, .b = 0xdd577780, .c = 0xefd50000}, + {.a = 0xf8c90618, .b = 0x29b57780, .c = 0xf7dd8000}, + {.a = 0xe9c10619, .b = 0x6a7d7780, .c = 0xf7d58000}, + {.a = 0xabb3061a, .b = 0xa670f780, .c = 0xefed8000}, + {.a = 0x97b8061b, .b = 0xd4957780, .c = 0xf7e98000}, + {.a = 0xad6f061c, .b = 0x9d656f80, .c = 0x7bd78000}, + {.a = 0xfa3a061d, .b = 0x95b76f80, .c = 0x7bed0000}, + {.a = 0xbafe061e, .b = 0x34baef80, .c = 0xef6d0000}, + {.a = 0xb570061f, .b = 0xa6dc7780, .c = 0xefcf0000}, + {.a = 0xc7da0620, .b = 0xed56ef00, .c = 0xdfd48000}, + {.a = 0xe6860621, .b = 0x2cad7f80, .c = 0xe7f68000}, + {.a = 0xc5700622, .b = 0x356d7780, .c = 0xefca8000}, + {.a = 0xd6da0623, .b = 0x9d576e80, .c = 0x6fdd0000}, + {.a = 0xe5000624, .b = 0x2976ef80, .c = 0xefd48000}, + {.a = 0xc8a10625, .b = 0x9d6fb700, .c = 0x77d98000}, + {.a = 0xb9d10626, .b = 0x35a6ef80, .c = 0xefc50000}, + {.a = 0xdf9b0627, .b = 0x3576ef80, .c = 0xefd48000}, + {.a = 0xdd9a0628, .b = 0x22bef680, .c = 0xefeb0000}, + {.a = 0x93f50629, .b = 0xa6acf780, .c = 0xefef8000}, + {.a = 0xec0a062a, .b = 0x36557700, .c = 0xefd38000}, + {.a = 0xa0df062b, .b = 0xedf77700, .c = 0x77ca8000}, + {.a = 0xc9a4062c, .b = 0xe66d6f00, .c = 0x7bd58000}, + {.a = 0xdc5e062d, .b = 0x325ef780, .c = 0xeff50000}, + {.a = 0xe7c1062e, .b = 0x9d946e80, .c = 0xefdf0000}, + {.a = 0x8538062f, .b = 0xdd7af700, .c = 0xf7d28000}, + {.a = 0xdf910630, .b = 0x336d5f80, .c = 0xf5f58000}, + {.a = 0xf6610631, .b = 0xcdeb7e80, .c = 0xe7ff8000}, + {.a = 0xdb360632, .b = 0xeafcb700, .c = 0x77d58000}, + {.a = 0x9b710633, .b = 0xb55e7780, .c = 0xefd78000}, + {.a = 0x80510634, .b = 0x6d6f7f80, .c = 0xf7cd8000}, + {.a = 0xc20c0635, .b = 0x32b57780, .c = 0xefde8000}, + {.a = 0xd91e0636, .b = 0xcd777f80, .c = 0xe7d78000}, + {.a = 0xadd00637, .b = 0xb564f780, .c = 0xefd58000}, + {.a = 0xbe760638, .b = 0x72755f80, .c = 0xf7d58000}, + {.a = 0x93e10639, .b = 0xdcd4df00, .c = 0xf7d58000}, + {.a = 0xbf08063a, .b = 0x9ab67780, .c = 0xf7d68000}, + {.a = 0xbfdc063b, .b = 0xbae95f80, .c = 0x77c58000}, + {.a = 0xf30c063c, .b = 0x6a957f80, .c = 0xe7e58000}, + {.a = 0xed72063d, .b = 0xdcb4dd80, .c = 0xf7e58000}, + {.a = 0xf133063e, .b = 0xaaf57680, .c = 0x77e98000}, + {.a = 0xe27c063f, .b = 0xa4aa7780, .c = 0xef6b0000}, + {.a = 0xac5b0640, .b = 0xcab57f80, .c = 0xefee8000}, + {.a = 0xab6f0641, .b = 0x6eb17700, .c = 0xf7da8000}, + {.a = 0xd3040642, .b = 0x9e6f7780, .c = 0x77dd8000}, + {.a = 0xcef90643, .b = 0x25577700, .c = 0xefd78000}, + {.a = 0x855f0644, .b = 0x3576ef80, .c = 0xefe58000}, + {.a = 0xfcdd0645, .b = 0xaabc7780, .c = 0xf7d68000}, + {.a = 0xeb320646, .b = 0x66ed7780, .c = 0xf7fe8000}, + {.a = 0xbda50647, .b = 0x85946e80, .c = 0xefc50000}, + {.a = 0xe0550648, .b = 0x3caf6f80, .c = 0xefdb8000}, + {.a = 0xcf0e0649, .b = 0xc6acff80, .c = 0xf3ff0000}, + {.a = 0x8c24064a, .b = 0x3596ff80, .c = 0xeb758000}, + {.a = 0xd0ff064b, .b = 0x222af680, .c = 0xeff98000}, + {.a = 0x8a75064c, .b = 0x86766e80, .c = 0xefd50000}, + {.a = 0xfdc4064d, .b = 0x22eef780, .c = 0xef7b8000}, + {.a = 0xe555064e, .b = 0x36d6f780, .c = 0xef758000}, + {.a = 0xedc9064f, .b = 0xae74f700, .c = 0xf7de8000}, + {.a = 0xd0370650, .b = 0x76bf7f80, .c = 0xefd50000}, + {.a = 0x83f30651, .b = 0x39955e80, .c = 0xf7d78000}, + {.a = 0xdeac0652, .b = 0x62967680, .c = 0xeff50000}, + {.a = 0xe2210653, .b = 0x26ad7f80, .c = 0xeff48000}, + {.a = 0xcef80654, .b = 0x26a57f80, .c = 0xebd68000}, + {.a = 0xabfd0655, .b = 0x75d57f80, .c = 0xefa98000}, + {.a = 0xba3c0656, .b = 0xe65b6f00, .c = 0x7bd68000}, + {.a = 0xa1bb0657, .b = 0xbdb46f80, .c = 0xef968000}, + {.a = 0xdc150658, .b = 0x2cb57f80, .c = 0xf7558000}, + {.a = 0xbfe40659, .b = 0x227eee80, .c = 0xefd50000}, + {.a = 0x8232065a, .b = 0x2db77780, .c = 0xf7da8000}, + {.a = 0xfb79065b, .b = 0x3b64ef80, .c = 0xeec58000}, + {.a = 0xa59f065c, .b = 0xc974e780, .c = 0xefec8000}, + {.a = 0x9234065d, .b = 0xdd52f700, .c = 0xf7f68000}, + {.a = 0xf212065e, .b = 0xd87b7f80, .c = 0xef770000}, + {.a = 0xa387065f, .b = 0xbaac6d80, .c = 0xef958000}, + {.a = 0x84650660, .b = 0xf4f1bb80, .c = 0x7b778000}, + {.a = 0xe9a20661, .b = 0xdd66f780, .c = 0xf7d68000}, + {.a = 0x86140662, .b = 0x67297780, .c = 0xefc48000}, + {.a = 0x8b7b0663, .b = 0x9d236f80, .c = 0x6fd78000}, + {.a = 0x9f2c0664, .b = 0xeef67780, .c = 0x77558000}, + {.a = 0xa0830665, .b = 0xda6cf700, .c = 0xf7d48000}, + {.a = 0xa37e0666, .b = 0xd968f780, .c = 0xefc50000}, + {.a = 0xa1d20667, .b = 0xd572ef80, .c = 0xeff78000}, + {.a = 0x94e80668, .b = 0xd6beee80, .c = 0xfbd78000}, + {.a = 0xc62f0669, .b = 0x9c586e80, .c = 0xefdd0000}, + {.a = 0x8175066a, .b = 0x76ad7f80, .c = 0xefdb8000}, + {.a = 0x959b066b, .b = 0xb57ef700, .c = 0xefce8000}, + {.a = 0xa334066c, .b = 0x32b4ef80, .c = 0xeee58000}, + {.a = 0xbf40066d, .b = 0xa6b47780, .c = 0xefd58000}, + {.a = 0xf6ba066e, .b = 0xcd355f80, .c = 0x77ec8000}, + {.a = 0xc243066f, .b = 0x31555700, .c = 0xf7f18000}, + {.a = 0xc60a0670, .b = 0xbb66ef80, .c = 0xedcd8000}, + {.a = 0xf6150671, .b = 0x36b57780, .c = 0xefe68000}, + {.a = 0x944f0672, .b = 0xd344ed80, .c = 0xefed8000}, + {.a = 0xb79b0673, .b = 0xd9577780, .c = 0xefc58000}, + {.a = 0xf7440674, .b = 0xbda4dd80, .c = 0xf7d58000}, + {.a = 0x82bf0675, .b = 0xbaacef80, .c = 0xefd58000}, + {.a = 0xc8290676, .b = 0x2a76ef00, .c = 0xedd48000}, + {.a = 0xec830677, .b = 0xbad6ef80, .c = 0xdf948000}, + {.a = 0xa52f0678, .b = 0xd5b77f80, .c = 0xe7d58000}, + {.a = 0xd2980679, .b = 0xdd577780, .c = 0xef7d0000}, + {.a = 0xca62067a, .b = 0x99d57780, .c = 0x6f570000}, + {.a = 0xaaaf067b, .b = 0x9cd55f80, .c = 0x77d70000}, + {.a = 0x8f5e067c, .b = 0x32b57780, .c = 0xefd68000}, + {.a = 0x9dfe067d, .b = 0x33757780, .c = 0xefd58000}, + {.a = 0xac65067e, .b = 0xdd54df80, .c = 0xf7978000}, + {.a = 0xb44a067f, .b = 0x29756f80, .c = 0xef978000}, + {.a = 0xdd3c0680, .b = 0x3d555f00, .c = 0xf7d78000}, + {.a = 0xb1c10681, .b = 0x2656ff80, .c = 0xeb958000}, + {.a = 0xe7660682, .b = 0xd6756f80, .c = 0x7bad8000}, + {.a = 0x9c3e0683, .b = 0x3ba4ef80, .c = 0xeecf8000}, + {.a = 0xfa0f0684, .b = 0xd6a2ee80, .c = 0xfbce8000}, + {.a = 0xd6430685, .b = 0xb9d55f80, .c = 0x77958000}, + {.a = 0xb0780686, .b = 0xc9ab7780, .c = 0xefc28000}, + {.a = 0x88db0687, .b = 0xeb7f7780, .c = 0x76d58000}, + {.a = 0xe4640688, .b = 0xdb54dd80, .c = 0xf7d58000}, + {.a = 0xa6f60689, .b = 0xa972ef80, .c = 0xefe78000}, + {.a = 0xab35068a, .b = 0xd8d77780, .c = 0xed530000}, + {.a = 0xdfe7068b, .b = 0xdd6f7780, .c = 0xefd68000}, + {.a = 0xf24c068c, .b = 0xd99b7780, .c = 0xefce8000}, + {.a = 0xfa4e068d, .b = 0xd5277f80, .c = 0xe7f58000}, + {.a = 0xad51068e, .b = 0xcd7f7f80, .c = 0xebd58000}, + {.a = 0xdab2068f, .b = 0x59d67680, .c = 0xefd58000}, + {.a = 0x94cd0690, .b = 0xcd6b7780, .c = 0xefc38000}, + {.a = 0xf8120691, .b = 0xd5577780, .c = 0xf7fd8000}, + {.a = 0xc3e50692, .b = 0xbaa6de80, .c = 0xf7d58000}, + {.a = 0xb6340693, .b = 0x6ea57f80, .c = 0xf7d78000}, + {.a = 0xc52d0694, .b = 0x89547780, .c = 0xefc58000}, + {.a = 0xef000695, .b = 0x6df57f80, .c = 0xf77d8000}, + {.a = 0x9a210696, .b = 0xbda4dd80, .c = 0xf7f58000}, + {.a = 0x9fe90697, .b = 0x2ed77b80, .c = 0xf7b58000}, + {.a = 0xc4130698, .b = 0x9d73af80, .c = 0x7bdb0000}, + {.a = 0x9f590699, .b = 0x26eaf780, .c = 0xef5d8000}, + {.a = 0x8f05069a, .b = 0xd9a4dd80, .c = 0xf7cb8000}, + {.a = 0x8f06069b, .b = 0xcd7d5f80, .c = 0x77978000}, + {.a = 0xb03b069c, .b = 0xccb37f80, .c = 0xe7ed0000}, + {.a = 0x99ba069d, .b = 0xd5b77780, .c = 0xf7d58000}, + {.a = 0xcec4069e, .b = 0xd2737f80, .c = 0xe7de8000}, + {.a = 0xf3f1069f, .b = 0x9ced5f80, .c = 0x7bf78000}, + {.a = 0xd0a206a0, .b = 0xd32f7f80, .c = 0xe7b58000}, + {.a = 0x9a3c06a1, .b = 0xcd74b780, .c = 0x7ff58000}, + {.a = 0xab4506a2, .b = 0xd96b7780, .c = 0xefc38000}, + {.a = 0xf60806a3, .b = 0xaab77680, .c = 0x77ed8000}, + {.a = 0xfb2306a4, .b = 0x2b74ef80, .c = 0xeee68000}, + {.a = 0xdda606a5, .b = 0xedf27780, .c = 0x776f8000}, + {.a = 0xd9a306a6, .b = 0xeef57f00, .c = 0x77d38000}, + {.a = 0xdf2e06a7, .b = 0xdd54f780, .c = 0xefff0000}, + {.a = 0x880406a8, .b = 0xbb5db780, .c = 0x77948000}, + {.a = 0xa12006a9, .b = 0xb917b780, .c = 0x778d8000}, + {.a = 0x925e06aa, .b = 0x9ae67780, .c = 0x77558000}, + {.a = 0x894c06ab, .b = 0xdda4df80, .c = 0xf7d58000}, + {.a = 0xf57606ac, .b = 0xea757780, .c = 0x77ad8000}, + {.a = 0xc45706ad, .b = 0xe75f6f00, .c = 0x7bcd8000}, + {.a = 0x860206ae, .b = 0x99667780, .c = 0xefd78000}, + {.a = 0xb7fa06af, .b = 0x734d7b80, .c = 0xe7e58000}, + {.a = 0xe3b106b0, .b = 0xcd6f7f80, .c = 0xebcd8000}, + {.a = 0xc01406b1, .b = 0xdce2f780, .c = 0xf7b78000}, + {.a = 0xe8b606b2, .b = 0xd9257780, .c = 0x77ec8000}, + {.a = 0xadb406b3, .b = 0x25e6f680, .c = 0xefd50000}, + {.a = 0xfe0406b4, .b = 0xdb757f80, .c = 0xf7d58000}, + {.a = 0xa40206b5, .b = 0xd5a4ed80, .c = 0xefe18000}, + {.a = 0xb37b06b6, .b = 0x76d57780, .c = 0xefd68000}, + {.a = 0xeb7606b7, .b = 0x3aa6ef80, .c = 0xef558000}, + {.a = 0xbf3c06b8, .b = 0x22ef7780, .c = 0xef7b8000}, + {.a = 0xb14806b9, .b = 0xc974f780, .c = 0xefd78000}, + {.a = 0xe4ef06ba, .b = 0x2374ef80, .c = 0xeed58000}, + {.a = 0xb76806bb, .b = 0x7b557f00, .c = 0xf7f58000}, + {.a = 0xf8e506bc, .b = 0xdd557780, .c = 0x77ab8000}, + {.a = 0xce4506bd, .b = 0xd9bb7780, .c = 0xefe18000}, + {.a = 0x9a1f06be, .b = 0x9b646e80, .c = 0xefc58000}, + {.a = 0xda7c06bf, .b = 0xe998e780, .c = 0xdfd58000}, + {.a = 0xe78906c0, .b = 0x77697780, .c = 0xefe48000}, + {.a = 0xfe2b06c1, .b = 0xa6b6ff80, .c = 0xebe88000}, + {.a = 0xf7c406c2, .b = 0x2d777b00, .c = 0xf7d78000}, + {.a = 0x851706c3, .b = 0x33256f80, .c = 0xeed58000}, + {.a = 0xd57306c4, .b = 0x73757d80, .c = 0xf7df8000}, + {.a = 0xe34506c5, .b = 0xa7656f80, .c = 0x7bd58000}, + {.a = 0x954d06c6, .b = 0xca6cdf80, .c = 0xf7e68000}, + {.a = 0x942f06c7, .b = 0x367d7f80, .c = 0xefab8000}, + {.a = 0xb2f506c8, .b = 0xcddf7780, .c = 0xef650000}, + {.a = 0xa87906c9, .b = 0xd2f57f80, .c = 0xe7f08000}, + {.a = 0xd46b06ca, .b = 0x45ae6e80, .c = 0xefcb8000}, + {.a = 0xe17906cb, .b = 0x9d6f7780, .c = 0x77cf8000}, + {.a = 0xd8ba06cc, .b = 0x9cec6f80, .c = 0x7bd58000}, + {.a = 0xaf0f06cd, .b = 0xeb775e80, .c = 0x77d38000}, + {.a = 0xcacb06ce, .b = 0xf6757580, .c = 0x6fd58000}, + {.a = 0xfbb806cf, .b = 0x9aafbf80, .c = 0x77c58000}, + {.a = 0xe33506d0, .b = 0x3a96b780, .c = 0xef558000}, + {.a = 0xdc2d06d1, .b = 0x22ad7780, .c = 0xedb68000}, + {.a = 0xd98a06d2, .b = 0x75457f80, .c = 0xeff58000}, + {.a = 0xbc7006d3, .b = 0x77697780, .c = 0xefc58000}, + {.a = 0xf0b206d4, .b = 0x33755f80, .c = 0xf7db8000}, + {.a = 0xeaaf06d5, .b = 0x36b57780, .c = 0xefef8000}, + {.a = 0xcf1f06d6, .b = 0xd5b4ed80, .c = 0xefe58000}, + {.a = 0xaa7906d7, .b = 0xd6a77f80, .c = 0xe7f68000}, + {.a = 0xb65006d8, .b = 0xccb77f80, .c = 0xe7da8000}, + {.a = 0xa6ae06d9, .b = 0x9bad7780, .c = 0x77d58000}, + {.a = 0xff7f06da, .b = 0x32b6ff80, .c = 0xebd58000}, + {.a = 0xc7ac06db, .b = 0x2cdd7f00, .c = 0xf7f58000}, + {.a = 0xbf5306dc, .b = 0x66a97780, .c = 0xefc58000}, + {.a = 0xb22c06dd, .b = 0x255f7780, .c = 0xefd70000}, + {.a = 0xda1a06de, .b = 0xd2b6ef80, .c = 0xeff28000}, + {.a = 0x9b6806df, .b = 0xda5d7f80, .c = 0xefd58000}, + {.a = 0x80ed06e0, .b = 0x66697780, .c = 0xefc70000}, + {.a = 0xca5306e1, .b = 0x32557700, .c = 0xefcb8000}, + {.a = 0x95b706e2, .b = 0x25557780, .c = 0xefc78000}, + {.a = 0xf47006e3, .b = 0xcd76df80, .c = 0xf7cf8000}, + {.a = 0xa5f006e4, .b = 0xba96df80, .c = 0xf7d58000}, + {.a = 0xc76306e5, .b = 0x66a97780, .c = 0xefc58000}, + {.a = 0xe87806e6, .b = 0x22b6ee80, .c = 0xefdd0000}, + {.a = 0xa36106e7, .b = 0xdceb7780, .c = 0xefd88000}, + {.a = 0xbc3706e8, .b = 0xb6b4f780, .c = 0xefd50000}, + {.a = 0xf33206e9, .b = 0xcd757f80, .c = 0xe7ed8000}, + {.a = 0xc24606ea, .b = 0xcdb77780, .c = 0xefe20000}, + {.a = 0xbe4e06eb, .b = 0x2ab57780, .c = 0xf7ee8000}, + {.a = 0x878006ec, .b = 0x6a556f80, .c = 0xefcd8000}, + {.a = 0xc14906ed, .b = 0xd9337f80, .c = 0xebb58000}, + {.a = 0xa60906ee, .b = 0x9d345f80, .c = 0x77958000}, + {.a = 0x951a06ef, .b = 0x6d6f7f80, .c = 0xf7cd8000}, + {.a = 0x9fc306f0, .b = 0x33d2ff80, .c = 0xeb778000}, + {.a = 0xaf3f06f1, .b = 0xbb66ef80, .c = 0xefcd8000}, + {.a = 0x891f06f2, .b = 0xdd72ee80, .c = 0xefd70000}, + {.a = 0xe87306f3, .b = 0xa6b6f780, .c = 0xeff48000}, + {.a = 0xab8806f4, .b = 0x36a97780, .c = 0xefe28000}, + {.a = 0xb69f06f5, .b = 0x66ad7780, .c = 0xefc58000}, + {.a = 0xb60e06f6, .b = 0x2e757780, .c = 0xe7bf8000}, + {.a = 0xf38006f7, .b = 0x35557f00, .c = 0xe7f38000}, + {.a = 0xdc8a06f8, .b = 0x255d7780, .c = 0xefcd8000}, + {.a = 0xf1b706f9, .b = 0x35557780, .c = 0xefc78000}, + {.a = 0xdc4106fa, .b = 0xb3766f80, .c = 0xefdd8000}, + {.a = 0xf17b06fb, .b = 0xcd757f80, .c = 0xebed8000}, + {.a = 0xa72706fc, .b = 0x66b57f80, .c = 0xebd48000}, + {.a = 0xecd206fd, .b = 0xb6a35f80, .c = 0x7bcd0000}, + {.a = 0xe05e06fe, .b = 0x8ad67b00, .c = 0xeff78000}, + {.a = 0xdbb606ff, .b = 0x9cd45e80, .c = 0xf7d58000}, + {.a = 0xd0d40700, .b = 0xbaa4df80, .c = 0xf7cc8000}, + {.a = 0xab5a0701, .b = 0x35577700, .c = 0xefd78000}, + {.a = 0xdaa40702, .b = 0xaef4f780, .c = 0xf7558000}, + {.a = 0xba500703, .b = 0x66e97780, .c = 0xefee8000}, + {.a = 0x830e0704, .b = 0x25bd7780, .c = 0xf7e90000}, + {.a = 0x9c670705, .b = 0x65ac7780, .c = 0xefcb8000}, + {.a = 0xd4c70706, .b = 0x25557780, .c = 0xefd38000}, + {.a = 0xff040707, .b = 0x76b57b80, .c = 0xefd58000}, + {.a = 0xaf0c0708, .b = 0xcab6f780, .c = 0xefd50000}, + {.a = 0xe45e0709, .b = 0xd574ef80, .c = 0xefe58000}, + {.a = 0x8283070a, .b = 0xa6576f00, .c = 0x7bcd8000}, + {.a = 0xec0f070b, .b = 0x6ab56f80, .c = 0xefef8000}, + {.a = 0xfadf070c, .b = 0x9d6d5f80, .c = 0x7bf70000}, + {.a = 0xc0ea070d, .b = 0x255d7780, .c = 0xefcf8000}, + {.a = 0xa4d0070e, .b = 0xea345d80, .c = 0x77d18000}, + {.a = 0xc963070f, .b = 0x67297780, .c = 0xefec8000}, + {.a = 0x926e0710, .b = 0x366af780, .c = 0xefc58000}, + {.a = 0xb6e40711, .b = 0xdd576f80, .c = 0xefd58000}, + {.a = 0xa1060712, .b = 0x3b64ef80, .c = 0xeec78000}, + {.a = 0xc1140713, .b = 0xad776f80, .c = 0x7bda0000}, + {.a = 0xa35e0714, .b = 0x6a956f80, .c = 0xefd58000}, + {.a = 0xc13b0715, .b = 0xf2b76f00, .c = 0x6fd78000}, + {.a = 0xf87a0716, .b = 0xaeeb7780, .c = 0x77c98000}, + {.a = 0xb2ba0717, .b = 0x66b57780, .c = 0xefd78000}, + {.a = 0x9f410718, .b = 0x36f6f780, .c = 0xef558000}, + {.a = 0xb1c40719, .b = 0xddb4df80, .c = 0xf7d58000}, + {.a = 0xf92c071a, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0xe8a2071b, .b = 0x49d67680, .c = 0xefd78000}, + {.a = 0xbba7071c, .b = 0xacf56f80, .c = 0x7bd58000}, + {.a = 0xdc7b071d, .b = 0x9d6f5f80, .c = 0x7bc50000}, + {.a = 0x95a6071e, .b = 0xc554ef80, .c = 0xefc58000}, + {.a = 0xb9c4071f, .b = 0x66b57f80, .c = 0xebd48000}, + {.a = 0xf4fc0720, .b = 0x9d77b780, .c = 0x77d50000}, + {.a = 0x9d800721, .b = 0xb7f6f780, .c = 0xef538000}, + {.a = 0xd0c80722, .b = 0x6d75bf80, .c = 0xf7e58000}, + {.a = 0x82680723, .b = 0xb3747780, .c = 0xefda8000}, + {.a = 0xb6df0724, .b = 0xd26cef80, .c = 0xeff58000}, + {.a = 0xba170725, .b = 0x64ad7780, .c = 0xeec58000}, + {.a = 0xc8610726, .b = 0xd566ef80, .c = 0xefc30000}, + {.a = 0xbb2d0727, .b = 0x9aae7780, .c = 0xefc58000}, + {.a = 0xec9f0728, .b = 0x7b657f80, .c = 0xf7d58000}, + {.a = 0xa0900729, .b = 0xacf56f80, .c = 0x7bd58000}, + {.a = 0xb773072a, .b = 0x32b77780, .c = 0xefe58000}, + {.a = 0x95ec072b, .b = 0x326d6f80, .c = 0xefd78000}, + {.a = 0xf5f1072c, .b = 0x95736f80, .c = 0x7bd78000}, + {.a = 0xdd69072d, .b = 0x3ba4ef80, .c = 0xeecb8000}, + {.a = 0xbdfc072e, .b = 0x897c7780, .c = 0xefdf8000}, + {.a = 0x8541072f, .b = 0x34dd7b00, .c = 0xeff58000}, + {.a = 0xbc440730, .b = 0x7ad7bf80, .c = 0xf7750000}, + {.a = 0x91b70731, .b = 0xc9a4f780, .c = 0xefc68000}, + {.a = 0xcb700732, .b = 0x227eee80, .c = 0xefd50000}, + {.a = 0x9b010733, .b = 0xedf67780, .c = 0x77558000}, + {.a = 0xa83d0734, .b = 0x2db6bf80, .c = 0xebd58000}, + {.a = 0xf6e60735, .b = 0xf3b4ed80, .c = 0xdfd48000}, + {.a = 0xc1330736, .b = 0x6d757f80, .c = 0xf7d38000}, + {.a = 0xd5390737, .b = 0x66b57780, .c = 0xefd78000}, + {.a = 0x9f540738, .b = 0x32555f80, .c = 0xf7d78000}, + {.a = 0x89d50739, .b = 0x3676f680, .c = 0xefd50000}, + {.a = 0xbfb3073a, .b = 0x7ab55f00, .c = 0xf7d48000}, + {.a = 0xd618073b, .b = 0xbbe6df80, .c = 0xf7558000}, + {.a = 0xb8bc073c, .b = 0x2656ee80, .c = 0xef958000}, + {.a = 0x8c13073d, .b = 0xbbacdd80, .c = 0xf7d58000}, + {.a = 0xaf71073e, .b = 0x94b56f80, .c = 0x7bed0000}, + {.a = 0xd32c073f, .b = 0xdd557780, .c = 0xeec98000}, + {.a = 0xb00e0740, .b = 0x76957780, .c = 0xefd58000}, + {.a = 0xbfb60741, .b = 0x8c8dbf80, .c = 0xe7e58000}, + {.a = 0xe2180742, .b = 0xe7e56f80, .c = 0x7b738000}, + {.a = 0xec9a0743, .b = 0x6aa57780, .c = 0xf7e88000}, + {.a = 0xcaee0744, .b = 0x32df7700, .c = 0xefeb8000}, + {.a = 0x92ed0745, .b = 0x32bd7780, .c = 0xefdb8000}, + {.a = 0xebb80746, .b = 0xced75f80, .c = 0x77958000}, + {.a = 0x8c880747, .b = 0x3354ef00, .c = 0xddc78000}, + {.a = 0xabeb0748, .b = 0x66ed7f80, .c = 0xebc60000}, + {.a = 0xbc0f0749, .b = 0x54fa6e80, .c = 0xefd58000}, + {.a = 0xd2da074a, .b = 0xccf77f80, .c = 0xebd50000}, + {.a = 0xedd8074b, .b = 0xcdf55f80, .c = 0x7b568000}, + {.a = 0xb2db074c, .b = 0x957d6f80, .c = 0x7bd70000}, + {.a = 0xb746074d, .b = 0x367d7780, .c = 0xefef0000}, + {.a = 0x9491074e, .b = 0x9cb86e80, .c = 0xefd50000}, + {.a = 0xd093074f, .b = 0xa6b4f780, .c = 0xefd78000}, + {.a = 0xe06f0750, .b = 0x9d75b780, .c = 0x77d58000}, + {.a = 0xabc00751, .b = 0xad7bbf80, .c = 0xf7b58000}, + {.a = 0xa2960752, .b = 0x36d6f700, .c = 0xefd58000}, + {.a = 0xea930753, .b = 0x66b57780, .c = 0xf7ee8000}, + {.a = 0x96e20754, .b = 0xdcb4df80, .c = 0xf7d58000}, + {.a = 0xdab10755, .b = 0x66567700, .c = 0xefd48000}, + {.a = 0xcd250756, .b = 0xd5a4df80, .c = 0xf7ed8000}, + {.a = 0xf24a0757, .b = 0x257d7780, .c = 0xefe98000}, + {.a = 0xa3130758, .b = 0xddad7780, .c = 0xf7fb0000}, + {.a = 0xe4fc0759, .b = 0x6d6d7f80, .c = 0xf7cc8000}, + {.a = 0xb750075a, .b = 0x34bb7b80, .c = 0xefd28000}, + {.a = 0x992c075b, .b = 0x9b6f7780, .c = 0x77f50000}, + {.a = 0xcb47075c, .b = 0xdd72f780, .c = 0xf7d68000}, + {.a = 0xf639075d, .b = 0x9cb55d80, .c = 0x77d50000}, + {.a = 0xb1c1075e, .b = 0xdadf7780, .c = 0x77b58000}, + {.a = 0xe40b075f, .b = 0x2a756f80, .c = 0xefd58000}, + {.a = 0xb4160760, .b = 0xed54ef00, .c = 0xdfd48000}, + {.a = 0xabd70761, .b = 0xd576ed80, .c = 0xefe48000}, + {.a = 0x85990762, .b = 0xdcb4f780, .c = 0xefd38000}, + {.a = 0xfd320763, .b = 0xcd74f780, .c = 0xefd58000}, + {.a = 0xb5d50764, .b = 0xb6acf780, .c = 0xefc78000}, + {.a = 0xd7c60765, .b = 0x7add6f80, .c = 0xefd58000}, + {.a = 0xc1df0766, .b = 0x32b57780, .c = 0xefd10000}, + {.a = 0xb8e80767, .b = 0xcef55b80, .c = 0x77d50000}, + {.a = 0xa3650768, .b = 0xee95bb80, .c = 0x77958000}, + {.a = 0xcb6f0769, .b = 0x3b54bb80, .c = 0xf7f68000}, + {.a = 0xbeef076a, .b = 0x9c9c6d80, .c = 0xefd58000}, + {.a = 0xf9c5076b, .b = 0xf5556f00, .c = 0x6ff58000}, + {.a = 0xcb10076c, .b = 0x36b6f780, .c = 0xefe48000}, + {.a = 0xc120076d, .b = 0xcd757f80, .c = 0xe7d50000}, + {.a = 0xa5e6076e, .b = 0xce677f80, .c = 0xebd58000}, + {.a = 0x938c076f, .b = 0xb964eb80, .c = 0xefd58000}, + {.a = 0xdb450770, .b = 0x3236f680, .c = 0xefe48000}, + {.a = 0xe30b0771, .b = 0xdb7eef00, .c = 0xefd48000}, + {.a = 0xd15a0772, .b = 0x5a5e7700, .c = 0xefd58000}, + {.a = 0xdfd30773, .b = 0x26eaf780, .c = 0xef5d8000}, + {.a = 0xdd100774, .b = 0xd5b4ed80, .c = 0xefe48000}, + {.a = 0xf5780775, .b = 0x96956f80, .c = 0x6fd70000}, + {.a = 0x87fa0776, .b = 0x73737d80, .c = 0xf7d78000}, + {.a = 0xed260777, .b = 0xbca4f780, .c = 0xf7f58000}, + {.a = 0xb8200778, .b = 0xd6f6ef00, .c = 0xfbd68000}, + {.a = 0xf1050779, .b = 0xdd72f780, .c = 0xf7d68000}, + {.a = 0xafb1077a, .b = 0x8d547780, .c = 0xefe70000}, + {.a = 0x906a077b, .b = 0xad76f780, .c = 0xf7d98000}, + {.a = 0xba0e077c, .b = 0xc566bd80, .c = 0xf7f68000}, + {.a = 0xbbd3077d, .b = 0xade57780, .c = 0x77c98000}, + {.a = 0xab85077e, .b = 0x8d75bf80, .c = 0x7bd58000}, + {.a = 0xbc4c077f, .b = 0xaafa6e80, .c = 0xefd30000}, + {.a = 0xf48e0780, .b = 0xba57bf80, .c = 0xf7f58000}, + {.a = 0x96b20781, .b = 0x76457b80, .c = 0xefed8000}, + {.a = 0xb8c40782, .b = 0x235cf780, .c = 0xeee78000}, + {.a = 0x83b00783, .b = 0x66b57f80, .c = 0xebd58000}, + {.a = 0xbd690784, .b = 0x99a45780, .c = 0xf7fd8000}, + {.a = 0x9a100785, .b = 0x2bb6ef80, .c = 0xedd48000}, + {.a = 0xeebc0786, .b = 0xa6576f00, .c = 0x7bcd8000}, + {.a = 0xb9c10787, .b = 0xcd6eff80, .c = 0xebcd8000}, + {.a = 0x9ccd0788, .b = 0x356ef780, .c = 0xefc58000}, + {.a = 0xa6e30789, .b = 0x33b6ee80, .c = 0xefd50000}, + {.a = 0x9138078a, .b = 0xd36d6f80, .c = 0xefd58000}, + {.a = 0xaaae078b, .b = 0xcd155f80, .c = 0x7bcf0000}, + {.a = 0x8ff6078c, .b = 0x2214f700, .c = 0xefd78000}, + {.a = 0xc826078d, .b = 0x66a97780, .c = 0xefd58000}, + {.a = 0x8a56078e, .b = 0x45546e80, .c = 0xefc58000}, + {.a = 0x9959078f, .b = 0x89547b80, .c = 0xeff50000}, + {.a = 0xaecb0790, .b = 0x6d7d7f80, .c = 0xf7d58000}, + {.a = 0xa8f70791, .b = 0x2a556f80, .c = 0xefc78000}, + {.a = 0x875b0792, .b = 0xbbbcef80, .c = 0xef558000}, + {.a = 0xcdf30793, .b = 0xdd76f700, .c = 0xf7d68000}, + {.a = 0xed030794, .b = 0x2676f780, .c = 0xeff58000}, + {.a = 0xed500795, .b = 0xcd357780, .c = 0xefd58000}, + {.a = 0x91460796, .b = 0xb6b4f780, .c = 0xefd48000}, + {.a = 0xa6890797, .b = 0x6d757f80, .c = 0xf7ec8000}, + {.a = 0xecff0798, .b = 0x3556f600, .c = 0xefd58000}, + {.a = 0xfec20799, .b = 0xbaaedf80, .c = 0xf7cf0000}, + {.a = 0xca3a079a, .b = 0x36d77700, .c = 0xefdb8000}, + {.a = 0x9982079b, .b = 0x9a646e80, .c = 0xefc50000}, + {.a = 0xd17a079c, .b = 0x34daef80, .c = 0xef858000}, + {.a = 0x9f84079d, .b = 0x9d966e80, .c = 0xefd70000}, + {.a = 0xb9a6079e, .b = 0x2b756f80, .c = 0xeed28000}, + {.a = 0xba3b079f, .b = 0xcd74dd80, .c = 0xf7d58000}, + {.a = 0xf1c707a0, .b = 0xccfaae80, .c = 0x7be98000}, + {.a = 0xaab807a1, .b = 0xc5c56f80, .c = 0xee968000}, + {.a = 0xc95807a2, .b = 0x36f6f780, .c = 0xef658000}, + {.a = 0x85cf07a3, .b = 0x99347780, .c = 0xefd70000}, + {.a = 0xb81f07a4, .b = 0xcd6cdf80, .c = 0xf7d68000}, + {.a = 0xb0e007a5, .b = 0x9aaebf80, .c = 0x77c58000}, + {.a = 0xdba207a6, .b = 0xd526df80, .c = 0xf7cf8000}, + {.a = 0x967607a7, .b = 0xa29cf780, .c = 0xefe58000}, + {.a = 0xc69c07a8, .b = 0xd6aaef80, .c = 0xefe68000}, + {.a = 0xb63f07a9, .b = 0x9a966e80, .c = 0xefd50000}, + {.a = 0xdef807aa, .b = 0x66ad7f80, .c = 0xf3f40000}, + {.a = 0x8a4107ab, .b = 0xdca4df80, .c = 0xf7cd8000}, + {.a = 0xda9d07ac, .b = 0xbad46e80, .c = 0xefad8000}, + {.a = 0x848007ad, .b = 0x256af780, .c = 0xefed8000}, + {.a = 0xb2c207ae, .b = 0xbb66ed80, .c = 0xefc78000}, + {.a = 0xd66307af, .b = 0xcb7cf780, .c = 0xefcd8000}, + {.a = 0xc0e107b0, .b = 0x9dd7b700, .c = 0x77ca8000}, + {.a = 0x831107b1, .b = 0xa6aaf780, .c = 0xefe48000}, + {.a = 0x898207b2, .b = 0xd9b77780, .c = 0xefe58000}, + {.a = 0xeafe07b3, .b = 0xba9a6e80, .c = 0xefaf8000}, + {.a = 0xd6fc07b4, .b = 0xd4a77f80, .c = 0xe7f58000}, + {.a = 0x9d7807b5, .b = 0x256d7780, .c = 0xf7d98000}, + {.a = 0xa73a07b6, .b = 0x2354ef80, .c = 0xed978000}, + {.a = 0xfab407b7, .b = 0xbbeb5d80, .c = 0x77c58000}, + {.a = 0xf00a07b8, .b = 0x2d777b80, .c = 0xf7d78000}, + {.a = 0x94ec07b9, .b = 0x33daee80, .c = 0xefb58000}, + {.a = 0xe8d607ba, .b = 0xb77edf80, .c = 0xfbed8000}, + {.a = 0xff4207bb, .b = 0xdd62df80, .c = 0xf7c98000}, + {.a = 0xceea07bc, .b = 0xa6ab6f80, .c = 0x7bd58000}, + {.a = 0xc15207bd, .b = 0xcd74df80, .c = 0xf7ed8000}, + {.a = 0xa8d207be, .b = 0x6d757f80, .c = 0xe7e48000}, + {.a = 0xc6db07bf, .b = 0xdcacef80, .c = 0xefd58000}, + {.a = 0xfbd807c0, .b = 0xf5577f00, .c = 0xdbf28000}, + {.a = 0x92e407c1, .b = 0xddad7780, .c = 0xefda0000}, + {.a = 0xb4bb07c2, .b = 0x6eb57f80, .c = 0xe7ed8000}, + {.a = 0xb5a607c3, .b = 0x2aad7780, .c = 0xf7db8000}, + {.a = 0xd94c07c4, .b = 0xcaaef780, .c = 0xefc58000}, + {.a = 0x9f5407c5, .b = 0xdda4ef80, .c = 0xefc58000}, + {.a = 0xb7c607c6, .b = 0x72b77780, .c = 0xefd50000}, + {.a = 0xdf2e07c7, .b = 0x369b7780, .c = 0xefcf8000}, + {.a = 0x9a8507c8, .b = 0x2cb57b80, .c = 0xf7d28000}, + {.a = 0x802b07c9, .b = 0x3af2ef80, .c = 0xef558000}, + {.a = 0x98a107ca, .b = 0xdeaaf780, .c = 0xefc48000}, + {.a = 0xaf7307cb, .b = 0x32ad6f80, .c = 0xefd68000}, + {.a = 0xa4ab07cc, .b = 0x66ad7780, .c = 0xf7da8000}, + {.a = 0x9feb07cd, .b = 0xdcf77780, .c = 0xefd58000}, + {.a = 0xe3fb07ce, .b = 0xb6f4f780, .c = 0xefd48000}, + {.a = 0xc9eb07cf, .b = 0xea575d80, .c = 0x77d38000}, + {.a = 0xfe3a07d0, .b = 0x33b2ef80, .c = 0xddd58000}, + {.a = 0xe03107d1, .b = 0x2d757780, .c = 0xf7d58000}, + {.a = 0xa48607d2, .b = 0x66f57780, .c = 0xf7ef8000}, + {.a = 0x934a07d3, .b = 0xddbcde80, .c = 0xf7e58000}, + {.a = 0xf42c07d4, .b = 0x656f7780, .c = 0xefdb8000}, + {.a = 0x9ab307d5, .b = 0x72977f80, .c = 0xe7f58000}, + {.a = 0x857407d6, .b = 0xb57eff80, .c = 0xf3eb8000}, + {.a = 0xaf6d07d7, .b = 0xccd55f80, .c = 0x7b958000}, + {.a = 0xce1e07d8, .b = 0x4d75bf80, .c = 0xf7e58000}, + {.a = 0xfdfa07d9, .b = 0x32557780, .c = 0xefd38000}, + {.a = 0xb6e907da, .b = 0xddf4df80, .c = 0xf7d50000}, + {.a = 0xaadd07db, .b = 0xdcd77780, .c = 0xefd50000}, + {.a = 0xfc2607dc, .b = 0xaff56f80, .c = 0x7b558000}, + {.a = 0xf6e207dd, .b = 0x99b47780, .c = 0xefe50000}, + {.a = 0x947807de, .b = 0xcd677f80, .c = 0xebf68000}, + {.a = 0xe5c607df, .b = 0xd356ef80, .c = 0xeff50000}, + {.a = 0x866f07e0, .b = 0x33f6ff80, .c = 0xeb758000}, + {.a = 0xb1bf07e1, .b = 0x76977f80, .c = 0xebd58000}, + {.a = 0x899e07e2, .b = 0xcd777f80, .c = 0xebd30000}, + {.a = 0xf38707e3, .b = 0x7b7e6e80, .c = 0xefd50000}, + {.a = 0xdd0e07e4, .b = 0xedd4ee80, .c = 0xdfd68000}, + {.a = 0xf7aa07e5, .b = 0xbaacdf80, .c = 0xf7d48000}, + {.a = 0x90b107e6, .b = 0xc6ad7f80, .c = 0xebdc0000}, + {.a = 0xe47407e7, .b = 0xdb677b80, .c = 0xf7f58000}, + {.a = 0xa85607e8, .b = 0x255d7780, .c = 0xefc78000}, + {.a = 0xbc2e07e9, .b = 0x2a757780, .c = 0xf7ed8000}, + {.a = 0xb31d07ea, .b = 0x257b7f80, .c = 0xefd78000}, + {.a = 0xb2ba07eb, .b = 0xcdb77f80, .c = 0xebec8000}, + {.a = 0xe21507ec, .b = 0x6d2d7f80, .c = 0xf7e40000}, + {.a = 0xa89c07ed, .b = 0x656f7780, .c = 0xefdb8000}, + {.a = 0x9ba507ee, .b = 0xdd6f7780, .c = 0xefd78000}, + {.a = 0xc75107ef, .b = 0xddb57780, .c = 0xeeb58000}, + {.a = 0x8e0707f0, .b = 0x6d2dbf80, .c = 0xf7ce8000}, + {.a = 0xffa907f1, .b = 0x2ce57f00, .c = 0xf7d58000}, + {.a = 0xc15a07f2, .b = 0xdab6f780, .c = 0xf7e90000}, + {.a = 0xdc4607f3, .b = 0x328d7780, .c = 0xefdb8000}, + {.a = 0xbcd807f4, .b = 0x36a95f80, .c = 0xfbc68000}, + {.a = 0xdbdf07f5, .b = 0xdd74f780, .c = 0xf7d58000}, + {.a = 0xf44407f6, .b = 0xabbc7680, .c = 0xf7f58000}, + {.a = 0xcc4b07f7, .b = 0x2cfcdf00, .c = 0xf7d78000}, + {.a = 0xb19507f8, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0xb1cb07f9, .b = 0xbb56df00, .c = 0xf7d48000}, + {.a = 0x97ed07fa, .b = 0xa694f780, .c = 0xefe58000}, + {.a = 0xc80f07fb, .b = 0xbaaeef80, .c = 0xefc48000}, + {.a = 0x90cd07fc, .b = 0xda5d7780, .c = 0x77b78000}, + {.a = 0xa1ce07fd, .b = 0xe76d6f00, .c = 0x7bd58000}, + {.a = 0xb6a907fe, .b = 0xdced6f80, .c = 0x7b738000}, + {.a = 0xd8c207ff, .b = 0xeaf35f00, .c = 0x77d58000}, + {.a = 0xadc80800, .b = 0xa4dbaf80, .c = 0x7b918000}, + {.a = 0xafaf0801, .b = 0xcdb57780, .c = 0xef640000}, + {.a = 0xbcee0802, .b = 0x256afe80, .c = 0xebeb8000}, + {.a = 0x88040803, .b = 0x9ab77780, .c = 0x77d78000}, + {.a = 0xa0e90804, .b = 0xed57bf80, .c = 0x76d50000}, + {.a = 0xfe950805, .b = 0x2b557700, .c = 0xf7e98000}, + {.a = 0xa8760806, .b = 0x766a7780, .c = 0xefcd8000}, + {.a = 0x83970807, .b = 0x9ca45d80, .c = 0xf7c58000}, + {.a = 0xfcd60808, .b = 0xcabf7f80, .c = 0xe7ea8000}, + {.a = 0xfdcc0809, .b = 0xcaa0df80, .c = 0xf7cf8000}, + {.a = 0xc190080a, .b = 0x32557700, .c = 0xefd78000}, + {.a = 0xa040080b, .b = 0x32b4ee80, .c = 0xefd50000}, + {.a = 0x98d9080c, .b = 0xcb74df80, .c = 0xf7ed8000}, + {.a = 0xb172080d, .b = 0x65797f80, .c = 0xefed8000}, + {.a = 0x9e44080e, .b = 0xb9b75e80, .c = 0x77d50000}, + {.a = 0x8076080f, .b = 0x2576f680, .c = 0xefd50000}, + {.a = 0x94bb0810, .b = 0x4d7d3f80, .c = 0xbbd58000}, + {.a = 0x8ba50811, .b = 0x2e72d780, .c = 0xf7d50000}, + {.a = 0xc57f0812, .b = 0x76b57780, .c = 0xefd48000}, + {.a = 0xaf400813, .b = 0xa56c7780, .c = 0x77de8000}, + {.a = 0x9d8f0814, .b = 0x9db59f80, .c = 0xf6e70000}, + {.a = 0xedd60815, .b = 0x5d9a6e80, .c = 0xefd58000}, + {.a = 0xa49e0816, .b = 0x9ce55f80, .c = 0x77d70000}, + {.a = 0xd05f0817, .b = 0x39555f00, .c = 0xf7d78000}, + {.a = 0xf8610818, .b = 0x35d6ff80, .c = 0xeb770000}, + {.a = 0xfd3f0819, .b = 0x25af7780, .c = 0xf7da8000}, + {.a = 0xc042081a, .b = 0x25577780, .c = 0xefd28000}, + {.a = 0xfddf081b, .b = 0x36f6f780, .c = 0xef558000}, + {.a = 0xde1b081c, .b = 0x67557f80, .c = 0xebec8000}, + {.a = 0xe085081d, .b = 0x3d56ef00, .c = 0xefdd8000}, + {.a = 0x9cc7081e, .b = 0x9ce55f80, .c = 0x7bd58000}, + {.a = 0xbcc6081f, .b = 0x2bcafe80, .c = 0xe7ed0000}, + {.a = 0x81730820, .b = 0xbb2bbf80, .c = 0x77868000}, + {.a = 0x9ccf0821, .b = 0x7a975f80, .c = 0xf7d58000}, + {.a = 0xa4f20822, .b = 0xbbf45d80, .c = 0xf7d58000}, + {.a = 0xf6780823, .b = 0xdb2d7780, .c = 0x6ecb0000}, + {.a = 0xa8370824, .b = 0xcd74df80, .c = 0xf7d78000}, + {.a = 0xfcd90825, .b = 0x66a97780, .c = 0xefeb8000}, + {.a = 0xbc270826, .b = 0xeef57780, .c = 0x776f8000}, + {.a = 0xc7f50827, .b = 0x9dd57780, .c = 0x77ba8000}, + {.a = 0x8b740828, .b = 0x32d6ff80, .c = 0xeb758000}, + {.a = 0xc73c0829, .b = 0xbab5bf80, .c = 0x77b78000}, + {.a = 0xbdf9082a, .b = 0x26957780, .c = 0xefd68000}, + {.a = 0xbf00082b, .b = 0x33aaf780, .c = 0xef458000}, + {.a = 0x8cc3082c, .b = 0xad74f780, .c = 0xf7d58000}, + {.a = 0xa707082d, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0xe629082e, .b = 0x9b726e80, .c = 0xefd70000}, + {.a = 0xa13d082f, .b = 0x3dbd6f80, .c = 0xef958000}, + {.a = 0xf06d0830, .b = 0x25657780, .c = 0xf7c98000}, + {.a = 0xbb8c0831, .b = 0xca9f7f80, .c = 0xef778000}, + {.a = 0xa5720832, .b = 0x25f6f680, .c = 0xefd78000}, + {.a = 0xe5e80833, .b = 0xcdf6ef80, .c = 0xef678000}, + {.a = 0x8d840834, .b = 0x2da37f80, .c = 0xe7d68000}, + {.a = 0xaa8a0835, .b = 0x95776f80, .c = 0x7bd70000}, + {.a = 0xe1e00836, .b = 0xbbac6e80, .c = 0xefd58000}, + {.a = 0xf9370837, .b = 0xdda4ef80, .c = 0xefc58000}, + {.a = 0x80c40838, .b = 0xdd6ef780, .c = 0xf7cf8000}, + {.a = 0xa57d0839, .b = 0x359aef80, .c = 0xef558000}, + {.a = 0xca05083a, .b = 0xb6f75f80, .c = 0x7bed0000}, + {.a = 0x8f68083b, .b = 0x2576f680, .c = 0xefd50000}, + {.a = 0xc2d5083c, .b = 0xdd5cdf80, .c = 0xf7c70000}, + {.a = 0xe8ce083d, .b = 0xacad7b80, .c = 0x77c58000}, + {.a = 0x92a0083e, .b = 0xdcd4df80, .c = 0xf7918000}, + {.a = 0xca32083f, .b = 0x95b96f80, .c = 0x7bd58000}, + {.a = 0x82380840, .b = 0xbcdcef80, .c = 0xefb58000}, + {.a = 0xb4170841, .b = 0x256d7780, .c = 0xf7c98000}, + {.a = 0xe7a30842, .b = 0x32b77780, .c = 0xefd58000}, + {.a = 0xf9bc0843, .b = 0x45ae6e80, .c = 0xefcb8000}, + {.a = 0xe46b0844, .b = 0xf3746d80, .c = 0x6fd58000}, + {.a = 0xff570845, .b = 0x73657780, .c = 0xefd58000}, + {.a = 0xda950846, .b = 0x256f7780, .c = 0xf7d68000}, + {.a = 0xd4780847, .b = 0xcd535f80, .c = 0x77b58000}, + {.a = 0xe8d30848, .b = 0xcd76df80, .c = 0xfbec8000}, + {.a = 0xeb2c0849, .b = 0x77597780, .c = 0xefe58000}, + {.a = 0xe806084a, .b = 0xa6b6f780, .c = 0xede58000}, + {.a = 0xd23b084b, .b = 0xa2b4f700, .c = 0xeffb8000}, + {.a = 0x844c084c, .b = 0x3b956f80, .c = 0xeec58000}, + {.a = 0xabee084d, .b = 0xd96b7780, .c = 0xefc50000}, + {.a = 0x9ea5084e, .b = 0x5a6e7780, .c = 0xf7fb8000}, + {.a = 0xcab7084f, .b = 0xcd7d5f80, .c = 0x77978000}, + {.a = 0xe63c0850, .b = 0xda9d7780, .c = 0xefc88000}, + {.a = 0xfd9a0851, .b = 0xcd677f80, .c = 0xebcb0000}, + {.a = 0xa7ac0852, .b = 0xddd4df80, .c = 0xf7578000}, + {.a = 0xea130853, .b = 0x75757f80, .c = 0xe6d48000}, + {.a = 0xb87c0854, .b = 0x72747780, .c = 0xefea8000}, + {.a = 0xa9500855, .b = 0xd5b4ed80, .c = 0xefe58000}, + {.a = 0xd7740856, .b = 0x24d57780, .c = 0xef548000}, + {.a = 0xb8960857, .b = 0xb6ec5f80, .c = 0x7bc68000}, + {.a = 0x8cc40858, .b = 0x36957780, .c = 0xefd58000}, + {.a = 0xad9e0859, .b = 0x2b5aef80, .c = 0xedc50000}, + {.a = 0xafa9085a, .b = 0xaabd7780, .c = 0x77db8000}, + {.a = 0xf975085b, .b = 0x336cef80, .c = 0xeef58000}, + {.a = 0xf66e085c, .b = 0xdd557780, .c = 0x77a88000}, + {.a = 0x8cb5085d, .b = 0xbd72ef80, .c = 0xeed58000}, + {.a = 0x96be085e, .b = 0xd96b7700, .c = 0xefc98000}, + {.a = 0xcb1a085f, .b = 0xc6ad7f80, .c = 0xebcc0000}, + {.a = 0xc1dc0860, .b = 0xd574ef80, .c = 0xeee58000}, + {.a = 0xedd90861, .b = 0xcd757f80, .c = 0xebdd8000}, + {.a = 0xdc020862, .b = 0xbb64ef80, .c = 0xefc58000}, + {.a = 0xce6c0863, .b = 0xb776f780, .c = 0xefc58000}, + {.a = 0xc7730864, .b = 0x35657f80, .c = 0xe7f58000}, + {.a = 0xe41a0865, .b = 0xdcab7780, .c = 0xefd18000}, + {.a = 0xdb0b0866, .b = 0x26aaf780, .c = 0xefed8000}, + {.a = 0xd6810867, .b = 0x66ad7f80, .c = 0xebd48000}, + {.a = 0xe01f0868, .b = 0x73755f80, .c = 0xf7d58000}, + {.a = 0xa9e60869, .b = 0xceb77f80, .c = 0xebed0000}, + {.a = 0x9d8f086a, .b = 0x75b66f80, .c = 0xefd50000}, + {.a = 0xc58f086b, .b = 0xa76af780, .c = 0xeec50000}, + {.a = 0x8a23086c, .b = 0xcbe4dd80, .c = 0xf7f68000}, + {.a = 0xdf72086d, .b = 0xc4acff80, .c = 0xf3ff0000}, + {.a = 0x9eb8086e, .b = 0x36a97780, .c = 0xefc28000}, + {.a = 0xb3ab086f, .b = 0xdd6d7780, .c = 0xf7d58000}, + {.a = 0xda4d0870, .b = 0x36d6f780, .c = 0xef758000}, + {.a = 0xc94d0871, .b = 0xed74bd80, .c = 0x77d58000}, + {.a = 0xa5360872, .b = 0xcd777f80, .c = 0xe7e58000}, + {.a = 0xe9200873, .b = 0x32d57700, .c = 0xefd18000}, + {.a = 0xd5c90874, .b = 0x725e7780, .c = 0xefe70000}, + {.a = 0xd8e20875, .b = 0xdd557780, .c = 0xf7bb8000}, + {.a = 0xce0d0876, .b = 0xaef26f80, .c = 0x7bda8000}, + {.a = 0xf8990877, .b = 0x66eb7780, .c = 0xefc50000}, + {.a = 0xce4d0878, .b = 0x65ad7780, .c = 0xefec8000}, + {.a = 0xcd2d0879, .b = 0xe656ef00, .c = 0xdfd48000}, + {.a = 0xd3a9087a, .b = 0xdd56ef80, .c = 0xefd78000}, + {.a = 0xdebb087b, .b = 0x25eef680, .c = 0xefeb8000}, + {.a = 0x911a087c, .b = 0x3a555f80, .c = 0xf7c18000}, + {.a = 0xc95e087d, .b = 0x726d7f80, .c = 0xe7d48000}, + {.a = 0xbf01087e, .b = 0x9b546f80, .c = 0xefc50000}, + {.a = 0xb972087f, .b = 0xcd575f80, .c = 0x7b958000}, + {.a = 0x9d4e0880, .b = 0x35b6f780, .c = 0xef558000}, + {.a = 0xef950881, .b = 0x6ebd7f80, .c = 0xf7d68000}, + {.a = 0x8ae30882, .b = 0x66ab7780, .c = 0xf7d58000}, + {.a = 0xea9a0883, .b = 0xc296ee80, .c = 0xefff0000}, + {.a = 0xb9340884, .b = 0x73757d80, .c = 0xf7df8000}, + {.a = 0x8d540885, .b = 0x4a767f80, .c = 0xefed0000}, + {.a = 0xfbf20886, .b = 0x33557f00, .c = 0xe7f18000}, + {.a = 0xee590887, .b = 0xbd72ef80, .c = 0xeed58000}, + {.a = 0xa2a50888, .b = 0x7b657f80, .c = 0xf7d58000}, + {.a = 0xf4640889, .b = 0xb2b4df80, .c = 0xf7ec8000}, + {.a = 0xf72e088a, .b = 0x257b7780, .c = 0xf7eb0000}, + {.a = 0x8a61088b, .b = 0xb99edf80, .c = 0xf74b8000}, + {.a = 0x8927088c, .b = 0xecf37f00, .c = 0x77d58000}, + {.a = 0xade8088d, .b = 0xdd7b7700, .c = 0xefdb8000}, + {.a = 0xc68e088e, .b = 0x325ef780, .c = 0xeff50000}, + {.a = 0xca54088f, .b = 0xab3c7780, .c = 0x77ea0000}, + {.a = 0x9a300890, .b = 0x256b7780, .c = 0xefc30000}, + {.a = 0xa0cf0891, .b = 0xea5db700, .c = 0x77d58000}, + {.a = 0xf3f70892, .b = 0x32757780, .c = 0xefe78000}, + {.a = 0xf1870893, .b = 0x33b75f80, .c = 0xf6d58000}, + {.a = 0xc3910894, .b = 0x25ad7f80, .c = 0xefd48000}, + {.a = 0xf5320895, .b = 0xbadc6d80, .c = 0xef958000}, + {.a = 0xcd980896, .b = 0xdd6f7780, .c = 0xefd50000}, + {.a = 0xdc8c0897, .b = 0xbad4df80, .c = 0xf7d70000}, + {.a = 0xbb490898, .b = 0x3236f680, .c = 0xefe50000}, + {.a = 0xde3f0899, .b = 0xdd74ef80, .c = 0xeed58000}, + {.a = 0xcce2089a, .b = 0xaabb7680, .c = 0x77e98000}, + {.a = 0xcfb1089b, .b = 0xccd35f80, .c = 0x77938000}, + {.a = 0xf560089c, .b = 0x99747780, .c = 0x77d38000}, + {.a = 0xeb9e089d, .b = 0x6d2b7f80, .c = 0xf7c58000}, + {.a = 0xbe1d089e, .b = 0xaae37780, .c = 0x77b38000}, + {.a = 0xcdf5089f, .b = 0xdd676f80, .c = 0xeed38000}, + {.a = 0xfd6f08a0, .b = 0x3296ef80, .c = 0xef658000}, + {.a = 0xc6cd08a1, .b = 0xb75edf00, .c = 0xfbda8000}, + {.a = 0xbc8d08a2, .b = 0x66f57780, .c = 0xefe58000}, + {.a = 0xbf0a08a3, .b = 0x66ad7f80, .c = 0xebd58000}, + {.a = 0x80da08a4, .b = 0x3caeef80, .c = 0xeff50000}, + {.a = 0xfba108a5, .b = 0xd5bd7780, .c = 0xf7d48000}, + {.a = 0x854e08a6, .b = 0x356d7780, .c = 0xefcf8000}, + {.a = 0x9f6008a7, .b = 0xc592ef80, .c = 0xefd78000}, + {.a = 0xb18908a8, .b = 0x2db56f80, .c = 0xef948000}, + {.a = 0xe9de08a9, .b = 0xc968f780, .c = 0xefc58000}, + {.a = 0xfd6508aa, .b = 0xcd66ef80, .c = 0xefd68000}, + {.a = 0xd10c08ab, .b = 0x65ae7780, .c = 0xefcb8000}, + {.a = 0x8bf908ac, .b = 0x2dd57700, .c = 0xf7eb8000}, + {.a = 0xcf6908ad, .b = 0x75377f00, .c = 0xefeb8000}, + {.a = 0xe1a508ae, .b = 0xe6acef80, .c = 0xdbfd8000}, + {.a = 0x879308af, .b = 0xd2a0ef80, .c = 0xefd68000}, + {.a = 0xb7be08b0, .b = 0x29996e80, .c = 0xefc58000}, + {.a = 0x82cd08b1, .b = 0xb6b4f780, .c = 0xefc78000}, + {.a = 0xad8c08b2, .b = 0x59ea7680, .c = 0xefc50000}, + {.a = 0x917708b3, .b = 0x4d75bf80, .c = 0xf7d68000}, + {.a = 0xe01d08b4, .b = 0xcd777780, .c = 0xefe38000}, + {.a = 0xa9ad08b5, .b = 0xa65c7780, .c = 0xedca8000}, + {.a = 0x919f08b6, .b = 0xdd696f80, .c = 0xefd78000}, + {.a = 0xa88b08b7, .b = 0xb6ea5f80, .c = 0x7bc70000}, + {.a = 0x9e4f08b8, .b = 0x66ad7780, .c = 0xefef8000}, + {.a = 0xb34608b9, .b = 0xdcb2ef80, .c = 0xefd48000}, + {.a = 0x8a4f08ba, .b = 0xbd546e80, .c = 0xefd58000}, + {.a = 0xcbbd08bb, .b = 0x36757f80, .c = 0xe7b38000}, + {.a = 0xdf4f08bc, .b = 0x34dcf700, .c = 0xefd78000}, + {.a = 0x928c08bd, .b = 0x99747780, .c = 0x77d38000}, + {.a = 0x9bcc08be, .b = 0xcab57f80, .c = 0xe7ea0000}, + {.a = 0xebf408bf, .b = 0xa6b4f780, .c = 0xefd78000}, + {.a = 0xdaff08c0, .b = 0x392ab780, .c = 0xef458000}, + {.a = 0x9f5308c1, .b = 0x32557780, .c = 0xefab8000}, + {.a = 0xacdc08c2, .b = 0x32bf7780, .c = 0xe7ea8000}, + {.a = 0xee0f08c3, .b = 0xeaff7780, .c = 0x77548000}, + {.a = 0xb72008c4, .b = 0xdeed7780, .c = 0xefdf0000}, + {.a = 0xc00508c5, .b = 0xbd64ef80, .c = 0xeed58000}, + {.a = 0xd10308c6, .b = 0xbabc6d80, .c = 0xef958000}, + {.a = 0x9f8f08c7, .b = 0xdcbcef80, .c = 0xefd58000}, + {.a = 0xa75b08c8, .b = 0xdaaf7f80, .c = 0xefd48000}, + {.a = 0x9d8208c9, .b = 0x316d7b80, .c = 0xe7d58000}, + {.a = 0xfcfe08ca, .b = 0xecfd6f00, .c = 0x7bd58000}, + {.a = 0xfa5708cb, .b = 0xa2dcef80, .c = 0xefa58000}, + {.a = 0xeec508cc, .b = 0xcd677f80, .c = 0xebcf8000}, + {.a = 0xcc5b08cd, .b = 0xdb677f80, .c = 0xeff58000}, + {.a = 0x8bd608ce, .b = 0xdd74ef80, .c = 0xefd78000}, + {.a = 0xb84d08cf, .b = 0xbbeb5d80, .c = 0x77c58000}, + {.a = 0xcbc608d0, .b = 0x7b55bb00, .c = 0xf7f48000}, + {.a = 0xe41b08d1, .b = 0x9b6bbd80, .c = 0x77ef8000}, + {.a = 0xa6e908d2, .b = 0x7ad56f80, .c = 0xefcd8000}, + {.a = 0xa15808d3, .b = 0x25ad7780, .c = 0xf7d48000}, + {.a = 0xea1408d4, .b = 0x9a747780, .c = 0xefe98000}, + {.a = 0x875708d5, .b = 0x22ed7780, .c = 0xef7b8000}, + {.a = 0x8f3008d6, .b = 0x73557f80, .c = 0xe7f50000}, + {.a = 0xd1cb08d7, .b = 0x99bc7580, .c = 0xefed8000}, + {.a = 0xce1d08d8, .b = 0xda6cf700, .c = 0xf7d48000}, + {.a = 0xd7c408d9, .b = 0x36b6f780, .c = 0xef758000}, + {.a = 0xdf6c08da, .b = 0xcd6f7f80, .c = 0xebd58000}, + {.a = 0xf27908db, .b = 0xcd737f80, .c = 0xebdd8000}, + {.a = 0x97bc08dc, .b = 0xe8d57780, .c = 0x77ad8000}, + {.a = 0xfd9908dd, .b = 0xbba6ef80, .c = 0xeeca8000}, + {.a = 0xa8b508de, .b = 0x75757f80, .c = 0xe7d58000}, + {.a = 0x9e6708df, .b = 0x256eee80, .c = 0xefd50000}, + {.a = 0xe93d08e0, .b = 0xcdd6b780, .c = 0x77498000}, + {.a = 0xf3d208e1, .b = 0xcd777f80, .c = 0xe7ef8000}, + {.a = 0xbc1508e2, .b = 0xad64f780, .c = 0xf7d58000}, + {.a = 0xd98608e3, .b = 0x24eb7700, .c = 0xf7d38000}, + {.a = 0xeaeb08e4, .b = 0xedf57700, .c = 0x77d58000}, + {.a = 0xcb0708e5, .b = 0x9d786e80, .c = 0xefd50000}, + {.a = 0xc3e008e6, .b = 0x226eee80, .c = 0xefd50000}, + {.a = 0xd26c08e7, .b = 0x255d7780, .c = 0xefd78000}, + {.a = 0x8d5108e8, .b = 0x2abd7780, .c = 0xf7ee8000}, + {.a = 0xee7b08e9, .b = 0x2a956f80, .c = 0xefd38000}, + {.a = 0xd70c08ea, .b = 0x256b7700, .c = 0xf7d38000}, + {.a = 0x81c708eb, .b = 0xb2f46f00, .c = 0xefd78000}, + {.a = 0xdc0908ec, .b = 0xbdbd6f80, .c = 0x6e978000}, + {.a = 0xb39908ed, .b = 0x22b57780, .c = 0xedb58000}, + {.a = 0x9cea08ee, .b = 0xea655f80, .c = 0x77b48000}, + {.a = 0xa2e208ef, .b = 0x35b6ef80, .c = 0xefd50000}, + {.a = 0xffbd08f0, .b = 0xcd777780, .c = 0xefdd8000}, + {.a = 0xd5ef08f1, .b = 0x3b555f80, .c = 0xf7d68000}, + {.a = 0xf53308f2, .b = 0x2b72ef80, .c = 0xeee58000}, + {.a = 0xa45408f3, .b = 0x9d7e7780, .c = 0xefeb8000}, + {.a = 0xf3a508f4, .b = 0x9d6c7780, .c = 0xefff8000}, + {.a = 0x9d1b08f5, .b = 0x7b975e80, .c = 0xf7d50000}, + {.a = 0xf42d08f6, .b = 0xcd6cf780, .c = 0xefe78000}, + {.a = 0x9b5808f7, .b = 0x73b46f80, .c = 0xeed70000}, + {.a = 0xa32208f8, .b = 0xdd6f7780, .c = 0xefc58000}, + {.a = 0x896508f9, .b = 0x7aad5f00, .c = 0xf7d58000}, + {.a = 0xa9bc08fa, .b = 0xb6ed5f80, .c = 0x7bc78000}, + {.a = 0xdb7008fb, .b = 0xdce4df80, .c = 0xf7b78000}, + {.a = 0xeb3e08fc, .b = 0x3676f780, .c = 0xefd58000}, + {.a = 0xc37b08fd, .b = 0x656b7f80, .c = 0xeff58000}, + {.a = 0xcd0d08fe, .b = 0x239aef80, .c = 0xeed58000}, + {.a = 0xeb6408ff, .b = 0x36af7780, .c = 0xefcf0000}, + {.a = 0xe2c30900, .b = 0x9aecbe80, .c = 0xf7eb8000}, + {.a = 0xfb0d0901, .b = 0x2a657780, .c = 0xf7d58000}, + {.a = 0xf41c0902, .b = 0xdadf7780, .c = 0x77b68000}, + {.a = 0xa05f0903, .b = 0x996c7580, .c = 0x77cd8000}, + {.a = 0x91790904, .b = 0x3296f780, .c = 0xefe58000}, + {.a = 0x91f50905, .b = 0x264eff80, .c = 0xebed0000}, + {.a = 0xe9b30906, .b = 0xd5776f80, .c = 0xefc78000}, + {.a = 0xc0d50907, .b = 0xeaf77680, .c = 0x77ed8000}, + {.a = 0xfead0908, .b = 0xba94df80, .c = 0xf7c58000}, + {.a = 0x902a0909, .b = 0xdd7ef780, .c = 0xf7d28000}, + {.a = 0x9911090a, .b = 0xceb55f80, .c = 0x77d48000}, + {.a = 0x95e1090b, .b = 0x33f6f680, .c = 0xefd58000}, + {.a = 0xbf1a090c, .b = 0xb2b47780, .c = 0xefe60000}, + {.a = 0xdb62090d, .b = 0x35757f80, .c = 0xe7e68000}, + {.a = 0xe598090e, .b = 0x266eff80, .c = 0xebd50000}, + {.a = 0x9269090f, .b = 0xcdb57780, .c = 0xeedc8000}, + {.a = 0xd2d00910, .b = 0xf577a780, .c = 0xbfdd8000}, + {.a = 0xf03f0911, .b = 0x3576f780, .c = 0xefd50000}, + {.a = 0xc1780912, .b = 0xba9f6f80, .c = 0x6f458000}, + {.a = 0xd80b0913, .b = 0x6d6f7f80, .c = 0xf7cd8000}, + {.a = 0x96550914, .b = 0x54fa6e80, .c = 0xefd50000}, + {.a = 0xada10915, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0xcbf90916, .b = 0xbb64ef80, .c = 0xefc58000}, + {.a = 0xaac10917, .b = 0xcd4d5f80, .c = 0x77958000}, + {.a = 0xa89c0918, .b = 0x6ebd7780, .c = 0xf7d18000}, + {.a = 0xcdfb0919, .b = 0xbd62ef80, .c = 0xefd58000}, + {.a = 0xb12f091a, .b = 0x28faef00, .c = 0xefd58000}, + {.a = 0xbec7091b, .b = 0xe65d6f80, .c = 0x7bb78000}, + {.a = 0xe08a091c, .b = 0xa6a8f780, .c = 0xefc58000}, + {.a = 0x857a091d, .b = 0xde977780, .c = 0xefd68000}, + {.a = 0xd13c091e, .b = 0xcd74f780, .c = 0xefe58000}, + {.a = 0xa4ab091f, .b = 0x72567700, .c = 0xefd48000}, + {.a = 0xbca90920, .b = 0x3b5cef00, .c = 0xddd78000}, + {.a = 0x8d270921, .b = 0xbb5cdf80, .c = 0xf7cc8000}, + {.a = 0xab5b0922, .b = 0x74ad7780, .c = 0xedc50000}, + {.a = 0xdc910923, .b = 0x22ed7780, .c = 0xef7b8000}, + {.a = 0xd9800924, .b = 0xbb54ef80, .c = 0xdef78000}, + {.a = 0xe65c0925, .b = 0x2a556f80, .c = 0xeec58000}, + {.a = 0x9f140926, .b = 0x3246f780, .c = 0xefe50000}, + {.a = 0xe2d30927, .b = 0x2d9d6f80, .c = 0xefd58000}, + {.a = 0xcf2e0928, .b = 0x73557f80, .c = 0xe7e40000}, + {.a = 0xb5630929, .b = 0xcd74f780, .c = 0xefd78000}, + {.a = 0x8992092a, .b = 0x5dd47780, .c = 0xf7ea8000}, + {.a = 0xfca3092b, .b = 0x975b6f00, .c = 0x7bd18000}, + {.a = 0xa84c092c, .b = 0xdb68ef80, .c = 0xefc50000}, + {.a = 0xa47f092d, .b = 0x33755f80, .c = 0xf7e58000}, + {.a = 0x90db092e, .b = 0x9dac5f80, .c = 0x7bd58000}, + {.a = 0xb871092f, .b = 0x9ff55e80, .c = 0x7bd50000}, + {.a = 0x98f40930, .b = 0x35b6ee80, .c = 0xefd50000}, + {.a = 0xe1270931, .b = 0xdd5cdf80, .c = 0xf7d68000}, + {.a = 0xbe490932, .b = 0x9d6c7780, .c = 0xefff0000}, + {.a = 0xa6960933, .b = 0x99af7780, .c = 0x77dd0000}, + {.a = 0x89f20934, .b = 0x6ab57f80, .c = 0xe7d68000}, + {.a = 0xca770935, .b = 0xd5af7780, .c = 0xf7c58000}, + {.a = 0xac190936, .b = 0x65757780, .c = 0xf7d58000}, + {.a = 0xc8820937, .b = 0xd574ef80, .c = 0xefd50000}, + {.a = 0xfc940938, .b = 0xcd56f780, .c = 0xeffb0000}, + {.a = 0x98630939, .b = 0xd4a56f80, .c = 0xefc08000}, + {.a = 0xd1e8093a, .b = 0x6aa57780, .c = 0xf7db8000}, + {.a = 0x9a06093b, .b = 0xdd5b7780, .c = 0x77b18000}, + {.a = 0xa817093c, .b = 0x756d7780, .c = 0xefc48000}, + {.a = 0xcb60093d, .b = 0xdd4f7780, .c = 0xef7f0000}, + {.a = 0x92b8093e, .b = 0xddf6dd80, .c = 0xf7ef0000}, + {.a = 0x8c07093f, .b = 0x36bf7b80, .c = 0xefd68000}, + {.a = 0xcee30940, .b = 0x31b6fe80, .c = 0xebd50000}, + {.a = 0x87230941, .b = 0xddd4df80, .c = 0xf7578000}, + {.a = 0x948b0942, .b = 0x36957780, .c = 0xefc68000}, + {.a = 0xfa9d0943, .b = 0x26557780, .c = 0xefc50000}, + {.a = 0xda550944, .b = 0xaabf7780, .c = 0x77d58000}, + {.a = 0xef930945, .b = 0x7a9e6e80, .c = 0xefd50000}, + {.a = 0xce580946, .b = 0xa76b6f80, .c = 0x7bf50000}, + {.a = 0xa0eb0947, .b = 0xdabd7f80, .c = 0xf7d78000}, + {.a = 0x8d900948, .b = 0xa6aaf780, .c = 0xefc08000}, + {.a = 0x853a0949, .b = 0x55f66e80, .c = 0xefd58000}, + {.a = 0xfa03094a, .b = 0xccb77780, .c = 0xefd20000}, + {.a = 0xdcec094b, .b = 0xa56ef780, .c = 0xefd78000}, + {.a = 0xcecd094c, .b = 0x95bf6f80, .c = 0x7bd58000}, + {.a = 0xbcaa094d, .b = 0xd2b4ef80, .c = 0xeff30000}, + {.a = 0xedac094e, .b = 0xcd555f80, .c = 0x77f48000}, + {.a = 0xdc1d094f, .b = 0x76bd7f80, .c = 0xeff78000}, + {.a = 0xde550950, .b = 0xad4ef780, .c = 0xdf7b8000}, + {.a = 0xe8980951, .b = 0x32757780, .c = 0xefe58000}, + {.a = 0xe40d0952, .b = 0xbaa4ef80, .c = 0xefc58000}, + {.a = 0xea300953, .b = 0x769e7680, .c = 0xefed0000}, + {.a = 0xdf3e0954, .b = 0x5577bd80, .c = 0xefeb8000}, + {.a = 0xce230955, .b = 0x756d7f80, .c = 0xeff58000}, + {.a = 0xa28f0956, .b = 0xeb655f80, .c = 0x77b58000}, + {.a = 0xd3200957, .b = 0xaf74f700, .c = 0xf7dc8000}, + {.a = 0x8bd80958, .b = 0x2d657780, .c = 0xf7ca8000}, + {.a = 0xf3f20959, .b = 0xdd577700, .c = 0xefd78000}, + {.a = 0xeeee095a, .b = 0xf2d56d80, .c = 0x6fd58000}, + {.a = 0x9094095b, .b = 0xcd365f80, .c = 0x76d58000}, + {.a = 0xb45c095c, .b = 0xde6b7780, .c = 0xeff18000}, + {.a = 0xdb4c095d, .b = 0xbab3bb80, .c = 0x77b78000}, + {.a = 0xb713095e, .b = 0x2d557f80, .c = 0xe7f78000}, + {.a = 0xf350095f, .b = 0xaef76f80, .c = 0x7bdb8000}, + {.a = 0xccc60960, .b = 0x32b77780, .c = 0xefdd8000}, + {.a = 0x9bb90961, .b = 0xcdaf7780, .c = 0xefc60000}, + {.a = 0xf9640962, .b = 0xd68ce780, .c = 0xefff8000}, + {.a = 0x9e970963, .b = 0xcd777f80, .c = 0xe7d68000}, + {.a = 0xabf00964, .b = 0xa66a6f80, .c = 0x7bd58000}, + {.a = 0xf3760965, .b = 0x5d567780, .c = 0xef550000}, + {.a = 0xb91b0966, .b = 0x67297780, .c = 0xefc48000}, + {.a = 0xb4bd0967, .b = 0x65ae7780, .c = 0xefcb8000}, + {.a = 0xcbf40968, .b = 0x36f6f780, .c = 0xef558000}, + {.a = 0x82ab0969, .b = 0xdd76f780, .c = 0xf7d68000}, + {.a = 0x886d096a, .b = 0x59d67680, .c = 0xefd78000}, + {.a = 0xab87096b, .b = 0xd4b4ef80, .c = 0xeff30000}, + {.a = 0xc9d8096c, .b = 0x267af780, .c = 0xefe58000}, + {.a = 0x8efa096d, .b = 0x9d535f80, .c = 0x77cf0000}, + {.a = 0xe39b096e, .b = 0xb6d75f80, .c = 0x7bc50000}, + {.a = 0xb9e4096f, .b = 0xa56cff80, .c = 0xebcd8000}, + {.a = 0xf5540970, .b = 0x6a957f80, .c = 0xe7f58000}, + {.a = 0xdb9b0971, .b = 0xccb9bf80, .c = 0x7bd58000}, + {.a = 0x8bc30972, .b = 0x2b7aef80, .c = 0xeeef8000}, + {.a = 0xddac0973, .b = 0xcd6f7f80, .c = 0xebd58000}, + {.a = 0xe0100974, .b = 0x26ad7780, .c = 0xefca8000}, + {.a = 0xa9420975, .b = 0xdde4df80, .c = 0xf7b58000}, + {.a = 0xe4060976, .b = 0x997f7780, .c = 0x77d78000}, + {.a = 0x9e910977, .b = 0xbd72ef80, .c = 0xeed58000}, + {.a = 0xa3e50978, .b = 0xcd76df80, .c = 0xf7e58000}, + {.a = 0x825b0979, .b = 0xedb5b780, .c = 0x7fd58000}, + {.a = 0x928f097a, .b = 0xcd34df80, .c = 0xf7d70000}, + {.a = 0xcc17097b, .b = 0xb6f6f780, .c = 0xefd48000}, + {.a = 0xdecf097c, .b = 0xed557780, .c = 0x77eb8000}, + {.a = 0x811c097d, .b = 0x755f7780, .c = 0xefeb8000}, + {.a = 0xa0d0097e, .b = 0xddef7680, .c = 0xefd50000}, + {.a = 0x8100097f, .b = 0x66af7f80, .c = 0xebcd8000}, + {.a = 0xe90f0980, .b = 0xccab7f80, .c = 0xe7f70000}, + {.a = 0x97a30981, .b = 0x33f6bf80, .c = 0xf7650000}, + {.a = 0xc02d0982, .b = 0x77767680, .c = 0xefd50000}, + {.a = 0xc64d0983, .b = 0x777b7b80, .c = 0xeff78000}, + {.a = 0x90040984, .b = 0xcd5ef780, .c = 0xeffb0000}, + {.a = 0xe4b00985, .b = 0xdddcf780, .c = 0xf7b78000}, + {.a = 0xbafa0986, .b = 0xdd577700, .c = 0xef558000}, + {.a = 0xb7ce0987, .b = 0x32f75f00, .c = 0xf7d38000}, + {.a = 0x815d0988, .b = 0xdd64f780, .c = 0xf7d38000}, + {.a = 0x87760989, .b = 0x55f66e80, .c = 0xefd58000}, + {.a = 0xcd8c098a, .b = 0x66ef7780, .c = 0xefed8000}, + {.a = 0x8913098b, .b = 0xd9b57780, .c = 0xefec8000}, + {.a = 0xaa79098c, .b = 0x2b5d6f80, .c = 0xefcf8000}, + {.a = 0x8cd2098d, .b = 0x725e7780, .c = 0xeffb0000}, + {.a = 0xb108098e, .b = 0xcdb4f780, .c = 0xefd10000}, + {.a = 0xb674098f, .b = 0xcd777f80, .c = 0xebd78000}, + {.a = 0xce560990, .b = 0xcd6edf80, .c = 0xf7d58000}, + {.a = 0xb1ce0991, .b = 0x6d757f80, .c = 0xf7ec8000}, + {.a = 0xffcf0992, .b = 0x33775f80, .c = 0xf6d38000}, + {.a = 0xb8db0993, .b = 0x9ae27700, .c = 0x77d78000}, + {.a = 0xf4eb0994, .b = 0xddb4ed80, .c = 0xefd18000}, + {.a = 0xd8380995, .b = 0x66b57780, .c = 0xeff78000}, + {.a = 0x8a680996, .b = 0x9cac5b80, .c = 0xf7c58000}, + {.a = 0xe9650997, .b = 0x9c946e80, .c = 0xefdd0000}, + {.a = 0xa1900998, .b = 0xbbabbe80, .c = 0xf7e58000}, + {.a = 0xd55f0999, .b = 0x226af680, .c = 0xeff90000}, + {.a = 0x9d8f099a, .b = 0x71d67680, .c = 0xefe70000}, + {.a = 0xe996099b, .b = 0xd9557780, .c = 0x77bd8000}, + {.a = 0xf49c099c, .b = 0x32b57780, .c = 0xefd90000}, + {.a = 0xd1fd099d, .b = 0x2614f700, .c = 0xefd78000}, + {.a = 0xe6be099e, .b = 0xa2acf780, .c = 0xefea8000}, + {.a = 0xa5f9099f, .b = 0x76567680, .c = 0xefd50000}, + {.a = 0xe81909a0, .b = 0x96f7bf80, .c = 0x7be50000}, + {.a = 0xb04009a1, .b = 0x356ef780, .c = 0xefc58000}, + {.a = 0xddab09a2, .b = 0xbad4df80, .c = 0xf7d70000}, + {.a = 0xabcf09a3, .b = 0xc4aaef80, .c = 0xefd58000}, + {.a = 0xf6c009a4, .b = 0x9ab26e80, .c = 0xefd70000}, + {.a = 0x86ef09a5, .b = 0x77557f80, .c = 0xe7f40000}, + {.a = 0x8f7209a6, .b = 0xde516f80, .c = 0x7bea8000}, + {.a = 0xf33a09a7, .b = 0xddbd7780, .c = 0xefda8000}, + {.a = 0xa88609a8, .b = 0x8ebcbf80, .c = 0xebdb8000}, + {.a = 0xd8aa09a9, .b = 0x22aaf680, .c = 0xeff98000}, + {.a = 0x85bd09aa, .b = 0xbba2de80, .c = 0xf7cb8000}, + {.a = 0xb89409ab, .b = 0xbb54e780, .c = 0xeff58000}, + {.a = 0xcba609ac, .b = 0x22556f80, .c = 0xef5d0000}, + {.a = 0xe06209ad, .b = 0xbbb6ed80, .c = 0xefd78000}, + {.a = 0xd77609ae, .b = 0xcd737f80, .c = 0xe7d50000}, + {.a = 0xed4509af, .b = 0xd574ed80, .c = 0xefe48000}, + {.a = 0xc26a09b0, .b = 0xced2b700, .c = 0xf7de8000}, + {.a = 0x9cfa09b1, .b = 0xcd757f80, .c = 0xe7e78000}, + {.a = 0xc55309b2, .b = 0x33d2ff80, .c = 0xeb778000}, + {.a = 0xdff809b3, .b = 0x35717780, .c = 0xedd58000}, + {.a = 0xdbd909b4, .b = 0xcd6f7780, .c = 0xefed8000}, + {.a = 0xe6ee09b5, .b = 0x32757d80, .c = 0xe7d58000}, + {.a = 0xbaef09b6, .b = 0xcdf55f80, .c = 0x7b570000}, + {.a = 0xbd9009b7, .b = 0x26d6f680, .c = 0xefd50000}, + {.a = 0xd90a09b8, .b = 0x9ab4bf80, .c = 0xf7e58000}, + {.a = 0xce7009b9, .b = 0x73ca7680, .c = 0xefe10000}, + {.a = 0xf91909ba, .b = 0x6d797780, .c = 0xf7d58000}, + {.a = 0xc6f009bb, .b = 0xcd72ef80, .c = 0xeff78000}, + {.a = 0xf58e09bc, .b = 0x99747780, .c = 0x77d78000}, + {.a = 0xd01009bd, .b = 0x22697780, .c = 0xefd38000}, + {.a = 0xb68809be, .b = 0x6b617780, .c = 0xf7f58000}, + {.a = 0xf8ca09bf, .b = 0x6d757f80, .c = 0xe7ef8000}, + {.a = 0xe87a09c0, .b = 0x2bb57780, .c = 0xf7558000}, + {.a = 0xf7ea09c1, .b = 0xbba4df80, .c = 0xf3d58000}, + {.a = 0xd68309c2, .b = 0xbae6ef80, .c = 0xef458000}, + {.a = 0xf21409c3, .b = 0x2b76ee80, .c = 0xefd50000}, + {.a = 0xf05409c4, .b = 0x6abb7f80, .c = 0xe7ef8000}, + {.a = 0x8c5009c5, .b = 0xed757700, .c = 0x77d78000}, + {.a = 0xf9e709c6, .b = 0xdadd7680, .c = 0x77e98000}, + {.a = 0xf8d409c7, .b = 0xd5b2df80, .c = 0xf6e58000}, + {.a = 0xadf609c8, .b = 0x35557f80, .c = 0xe7ee8000}, + {.a = 0xbad309c9, .b = 0x656d7780, .c = 0xf7d48000}, + {.a = 0x98ba09ca, .b = 0x2656ee80, .c = 0xef958000}, + {.a = 0xa3d609cb, .b = 0x755b7f80, .c = 0xeff78000}, + {.a = 0xaa7009cc, .b = 0xeafd7780, .c = 0x77d48000}, + {.a = 0xad8209cd, .b = 0xb5b4f780, .c = 0xefd58000}, + {.a = 0x9b9409ce, .b = 0xde577700, .c = 0xefd68000}, + {.a = 0xacc409cf, .b = 0xcd3f5f80, .c = 0x77958000}, + {.a = 0xb65709d0, .b = 0xd5f6ee80, .c = 0xefd78000}, + {.a = 0xc7a009d1, .b = 0x355d7700, .c = 0xefdf8000}, + {.a = 0xc64009d2, .b = 0xe7e55e80, .c = 0x7bd50000}, + {.a = 0xfe5009d3, .b = 0xcff55f80, .c = 0x76d78000}, + {.a = 0x8b3009d4, .b = 0xcd555f80, .c = 0x7bcf8000}, + {.a = 0xe91009d5, .b = 0x33757780, .c = 0xefdb8000}, + {.a = 0xd31309d6, .b = 0x89747780, .c = 0xefd30000}, + {.a = 0xb1e509d7, .b = 0x22eef780, .c = 0xef750000}, + {.a = 0xedd209d8, .b = 0x266d7780, .c = 0xf7df8000}, + {.a = 0xb3a509d9, .b = 0x6ea57f80, .c = 0xf7ef8000}, + {.a = 0x91bf09da, .b = 0xc5b56f80, .c = 0xee968000}, + {.a = 0xb9f209db, .b = 0xb6b4f780, .c = 0xefd48000}, + {.a = 0xfb7a09dc, .b = 0x75577780, .c = 0xefe38000}, + {.a = 0xc3da09dd, .b = 0x3ab6df80, .c = 0xf7d50000}, + {.a = 0xd45a09de, .b = 0x99777780, .c = 0x77d78000}, + {.a = 0x827e09df, .b = 0x36957780, .c = 0xefd28000}, + {.a = 0x8c1c09e0, .b = 0x257d7780, .c = 0xf7d78000}, + {.a = 0xfc9b09e1, .b = 0x32b77780, .c = 0xefe58000}, + {.a = 0x97c009e2, .b = 0x25557700, .c = 0xefd58000}, + {.a = 0xe20c09e3, .b = 0x99967580, .c = 0x6feb8000}, + {.a = 0xf50609e4, .b = 0x322ef700, .c = 0xeffb8000}, + {.a = 0xc66409e5, .b = 0x626e7680, .c = 0xeff50000}, + {.a = 0xaf9c09e6, .b = 0x2976ee80, .c = 0xefd50000}, + {.a = 0xe82709e7, .b = 0x6af77f80, .c = 0xe7d50000}, + {.a = 0xe61309e8, .b = 0x2aa77780, .c = 0xf7ea8000}, + {.a = 0xa4a809e9, .b = 0x66b57f80, .c = 0xebd38000}, + {.a = 0xaea409ea, .b = 0x3256ee80, .c = 0xefb58000}, + {.a = 0x836709eb, .b = 0x75577f80, .c = 0xe7f58000}, + {.a = 0xd2a909ec, .b = 0xc56cff80, .c = 0xf3ff8000}, + {.a = 0xd0e509ed, .b = 0x33f6bf80, .c = 0xf7650000}, + {.a = 0xb72e09ee, .b = 0x66e97780, .c = 0xefed8000}, + {.a = 0xa0ea09ef, .b = 0x69946e80, .c = 0xefc58000}, + {.a = 0xc8d909f0, .b = 0x656f7780, .c = 0xefc70000}, + {.a = 0xcb1909f1, .b = 0xddb4ef80, .c = 0xefde8000}, + {.a = 0xacbe09f2, .b = 0xaaa57780, .c = 0x77ea0000}, + {.a = 0xa87909f3, .b = 0x348eef80, .c = 0xef558000}, + {.a = 0x8aa709f4, .b = 0xa3da6f80, .c = 0xef968000}, + {.a = 0xc34009f5, .b = 0x9abc7780, .c = 0xefeb0000}, + {.a = 0x829809f6, .b = 0xdd7eef80, .c = 0xefd78000}, + {.a = 0xc35509f7, .b = 0xbb56dd80, .c = 0xf7cf8000}, + {.a = 0xe69709f8, .b = 0xbac4ef80, .c = 0xef958000}, + {.a = 0xb0b809f9, .b = 0x65757780, .c = 0xf7eb8000}, + {.a = 0xc0af09fa, .b = 0x2ad56f80, .c = 0xef858000}, + {.a = 0xb9ab09fb, .b = 0x9abc7780, .c = 0xefeb0000}, + {.a = 0xf38a09fc, .b = 0x6d677f80, .c = 0xf7d78000}, + {.a = 0x867509fd, .b = 0xbba6ed80, .c = 0xefcf8000}, + {.a = 0x800209fe, .b = 0x3aa6ee80, .c = 0xefc50000}, + {.a = 0x95be09ff, .b = 0xa374ef80, .c = 0xeed78000}, + {.a = 0x84c40a00, .b = 0xcdacf780, .c = 0xefe70000}, + {.a = 0xe58f0a01, .b = 0xccf2dd80, .c = 0xf7e70000}, + {.a = 0xa8fe0a02, .b = 0xcd6d7780, .c = 0xefd78000}, + {.a = 0xcd700a03, .b = 0xbb7cef00, .c = 0xefd58000}, + {.a = 0xcce60a04, .b = 0x72555f80, .c = 0xf7d48000}, + {.a = 0xb2780a05, .b = 0x2afeee80, .c = 0xefd50000}, + {.a = 0x97db0a06, .b = 0xdc957780, .c = 0xefdf8000}, + {.a = 0xcf9c0a07, .b = 0xcd555f80, .c = 0x7b958000}, + {.a = 0x9e4a0a08, .b = 0x6ab57780, .c = 0xf7d58000}, + {.a = 0x8ba10a09, .b = 0x33baf780, .c = 0xef598000}, + {.a = 0xaf420a0a, .b = 0x9cda6e80, .c = 0xefd48000}, + {.a = 0xe2f10a0b, .b = 0xcd637f80, .c = 0xe7f50000}, + {.a = 0x99ca0a0c, .b = 0x3276f700, .c = 0xefd38000}, + {.a = 0x90670a0d, .b = 0xeb735d80, .c = 0x77d58000}, + {.a = 0x8c7f0a0e, .b = 0xbb64ef80, .c = 0xeec58000}, + {.a = 0xf1d00a0f, .b = 0xde54f780, .c = 0xefe68000}, + {.a = 0xee060a10, .b = 0xaef6d780, .c = 0xdf658000}, + {.a = 0xf52d0a11, .b = 0xb6d4f780, .c = 0xef958000}, + {.a = 0xd12c0a12, .b = 0xcdad7780, .c = 0xefce0000}, + {.a = 0x869a0a13, .b = 0xcb6cdd80, .c = 0xf7f58000}, + {.a = 0xeb6c0a14, .b = 0x356eef80, .c = 0xefe58000}, + {.a = 0x89090a15, .b = 0x6dad7f80, .c = 0xe7d50000}, + {.a = 0xe3ef0a16, .b = 0xdceb7780, .c = 0xefb28000}, + {.a = 0xcd7c0a17, .b = 0xbaa4df80, .c = 0xf7d58000}, + {.a = 0x90c70a18, .b = 0x3236f680, .c = 0xefe50000}, + {.a = 0xb9330a19, .b = 0xddd4df80, .c = 0xf7458000}, + {.a = 0x839f0a1a, .b = 0xdab4d780, .c = 0xf7e90000}, + {.a = 0xd6040a1b, .b = 0xab7d7700, .c = 0x77d48000}, + {.a = 0xbd8b0a1c, .b = 0x757d7f80, .c = 0xeff58000}, + {.a = 0xd0330a1d, .b = 0x32f6ef80, .c = 0xef958000}, + {.a = 0xf3560a1e, .b = 0xbd7cef80, .c = 0xefd58000}, + {.a = 0xcdc10a1f, .b = 0xcd757f80, .c = 0xe7d50000}, + {.a = 0xba740a20, .b = 0x25657780, .c = 0xf7c98000}, + {.a = 0x9c360a21, .b = 0x26a77780, .c = 0xf7df8000}, + {.a = 0xbac30a22, .b = 0x7a666e80, .c = 0xefd50000}, + {.a = 0xe6fe0a23, .b = 0x6ab67780, .c = 0xf7db8000}, + {.a = 0xd8280a24, .b = 0x33d55f80, .c = 0xf7550000}, + {.a = 0xe1700a25, .b = 0xddb4df80, .c = 0xf7d58000}, + {.a = 0xa2010a26, .b = 0xbb56ef80, .c = 0xdf958000}, + {.a = 0xf4d10a27, .b = 0xda577f80, .c = 0x77b38000}, + {.a = 0x8f7f0a28, .b = 0x2376ee80, .c = 0xefdd0000}, + {.a = 0xbc170a29, .b = 0xb674f780, .c = 0xefd58000}, + {.a = 0xc5190a2a, .b = 0xbbdd6f80, .c = 0x6e978000}, + {.a = 0xeed10a2b, .b = 0xbcacf780, .c = 0xeff50000}, + {.a = 0xf5260a2c, .b = 0x9dae5f80, .c = 0x7bed8000}, + {.a = 0xbcf80a2d, .b = 0x8d966e80, .c = 0xefd70000}, + {.a = 0x80290a2e, .b = 0xcd677f80, .c = 0xebf50000}, + {.a = 0x84930a2f, .b = 0xcd6d7f80, .c = 0xe7f58000}, + {.a = 0xaf7c0a30, .b = 0xdcab7780, .c = 0xefc28000}, + {.a = 0xb8310a31, .b = 0xdab4f780, .c = 0xf7d78000}, + {.a = 0xeae70a32, .b = 0xceab7f80, .c = 0xebc48000}, + {.a = 0xa4540a33, .b = 0x2cd57f00, .c = 0xf7f78000}, + {.a = 0xdebd0a34, .b = 0xcd6f7f80, .c = 0xebe78000}, + {.a = 0xef9f0a35, .b = 0xd56ced80, .c = 0xefc98000}, + {.a = 0xa6990a36, .b = 0x3236f680, .c = 0xefe48000}, + {.a = 0xecc90a37, .b = 0xdb7d7f80, .c = 0xf7d78000}, + {.a = 0xec1d0a38, .b = 0xccb4df80, .c = 0xf7d50000}, + {.a = 0xf9010a39, .b = 0xbab1b780, .c = 0x779b8000}, + {.a = 0xc3320a3a, .b = 0xb3557780, .c = 0x6ed70000}, + {.a = 0xa3f50a3b, .b = 0xa36ced80, .c = 0xefc78000}, + {.a = 0xce090a3c, .b = 0xcda57f80, .c = 0xebec8000}, + {.a = 0xe2fc0a3d, .b = 0xcd737f80, .c = 0xe7d68000}, + {.a = 0xbb410a3e, .b = 0x6ab57780, .c = 0xf7d58000}, + {.a = 0x9cba0a3f, .b = 0xcaa4f780, .c = 0xf7eb0000}, + {.a = 0x8c590a40, .b = 0x4ebdbf80, .c = 0xf7d48000}, + {.a = 0xe4320a41, .b = 0xdd74ef80, .c = 0xefd78000}, + {.a = 0xe7a90a42, .b = 0x22697780, .c = 0xeec38000}, + {.a = 0xe2770a43, .b = 0xdadf7780, .c = 0x77b58000}, + {.a = 0xc26b0a44, .b = 0xccb77f80, .c = 0xebd48000}, + {.a = 0xdb4f0a45, .b = 0xdd6f7780, .c = 0xefc78000}, + {.a = 0xd9ec0a46, .b = 0xa6aaf780, .c = 0xefec8000}, + {.a = 0x9c200a47, .b = 0x637e6e80, .c = 0xefd50000}, + {.a = 0xfe3e0a48, .b = 0xccb2df80, .c = 0xfbd50000}, + {.a = 0xa30f0a49, .b = 0xbae6df80, .c = 0xf7d68000}, + {.a = 0x97420a4a, .b = 0xbad4ef80, .c = 0xef4d8000}, + {.a = 0xdb250a4b, .b = 0x3d5d6f00, .c = 0xeffb8000}, + {.a = 0xbd740a4c, .b = 0xb2a4df80, .c = 0xf7cd0000}, + {.a = 0x8e120a4d, .b = 0xaab47780, .c = 0xf7ee0000}, + {.a = 0xc5470a4e, .b = 0xd5f66f80, .c = 0x6ed58000}, + {.a = 0xff7d0a4f, .b = 0x66e97780, .c = 0xefec8000}, + {.a = 0xb53e0a50, .b = 0x356d7780, .c = 0xd7cb8000}, + {.a = 0xd4650a51, .b = 0xa6b4f700, .c = 0xefd58000}, + {.a = 0x8a3f0a52, .b = 0xded77780, .c = 0xefce8000}, + {.a = 0x874e0a53, .b = 0x36b6f780, .c = 0xefd30000}, + {.a = 0x87a80a54, .b = 0x2234f700, .c = 0xefd78000}, + {.a = 0xe5450a55, .b = 0xdded7780, .c = 0xeeb48000}, + {.a = 0xf7310a56, .b = 0x6d746e80, .c = 0xffd78000}, + {.a = 0xe7710a57, .b = 0x9dec6f80, .c = 0x7bd78000}, + {.a = 0xa3b40a58, .b = 0xbaacdf80, .c = 0xf7cf0000}, + {.a = 0xe0660a59, .b = 0x6d477f00, .c = 0xf7ee8000}, + {.a = 0xf1e90a5a, .b = 0x2536ff00, .c = 0xebeb8000}, + {.a = 0xab8a0a5b, .b = 0x75767680, .c = 0xefd58000}, + {.a = 0xd75d0a5c, .b = 0x23aaf780, .c = 0xef718000}, + {.a = 0xe87f0a5d, .b = 0x256d7780, .c = 0xf7da8000}, + {.a = 0xde540a5e, .b = 0xb9d36f80, .c = 0x6ea78000}, + {.a = 0xdf860a5f, .b = 0x66b57b80, .c = 0xefdd8000}, + {.a = 0xb5920a60, .b = 0x56a5bf80, .c = 0xebce8000}, + {.a = 0xb14e0a61, .b = 0x3dd55f00, .c = 0xf7f58000}, + {.a = 0x8aad0a62, .b = 0xad74f780, .c = 0xf7db8000}, + {.a = 0xa0af0a63, .b = 0x5df67680, .c = 0xefdb8000}, + {.a = 0xaffe0a64, .b = 0x32a6ef80, .c = 0xeef58000}, + {.a = 0xba3f0a65, .b = 0xa6b8ff80, .c = 0xebed0000}, + {.a = 0xbd9d0a66, .b = 0xdd677780, .c = 0xefd58000}, + {.a = 0xb8a50a67, .b = 0xba9f6f80, .c = 0x6f458000}, + {.a = 0xdef20a68, .b = 0x6aad7780, .c = 0xf7d58000}, + {.a = 0x921c0a69, .b = 0xbcbceb80, .c = 0xefd58000}, + {.a = 0xd7480a6a, .b = 0x656d7780, .c = 0xefc48000}, + {.a = 0xebf30a6b, .b = 0xcb6edf80, .c = 0xf7cd8000}, + {.a = 0xc1ee0a6c, .b = 0xbad6ef80, .c = 0xdf968000}, + {.a = 0xedb50a6d, .b = 0xdeacf680, .c = 0xefed0000}, + {.a = 0xa2b40a6e, .b = 0xcdacef80, .c = 0xeef58000}, + {.a = 0xbc4e0a6f, .b = 0x5dae7780, .c = 0xeff58000}, + {.a = 0xe8da0a70, .b = 0xd2b4ef80, .c = 0xeff30000}, + {.a = 0xf29c0a71, .b = 0x76b57780, .c = 0xefd48000}, + {.a = 0xda850a72, .b = 0xab72f780, .c = 0xe7e98000}, + {.a = 0xdadd0a73, .b = 0x36baf780, .c = 0xefd50000}, + {.a = 0xfff40a74, .b = 0xcdb57f80, .c = 0xe7d70000}, + {.a = 0x9cdb0a75, .b = 0x25557780, .c = 0xefc78000}, + {.a = 0xcf0a0a76, .b = 0x9bb5bd80, .c = 0x77d50000}, + {.a = 0xdade0a77, .b = 0xd2b77f80, .c = 0xe7d28000}, + {.a = 0xf8e10a78, .b = 0xd772ef80, .c = 0xede58000}, + {.a = 0x8cd50a79, .b = 0xcd677f00, .c = 0xebf58000}, + {.a = 0xed120a7a, .b = 0xddcf7780, .c = 0xef7d0000}, + {.a = 0xcc750a7b, .b = 0xcdb6ed80, .c = 0xefe50000}, + {.a = 0xde390a7c, .b = 0xd5b77f80, .c = 0xf3de8000}, + {.a = 0x84ac0a7d, .b = 0x73d57f80, .c = 0xf7558000}, + {.a = 0xdb670a7e, .b = 0x3b66ef80, .c = 0xeec78000}, + {.a = 0x811f0a7f, .b = 0x24db7700, .c = 0xefd38000}, + {.a = 0xf7160a80, .b = 0xed377680, .c = 0xdfdb8000}, + {.a = 0xa3b50a81, .b = 0xcaa6df80, .c = 0xf7d50000}, + {.a = 0x9b6d0a82, .b = 0x3baaef80, .c = 0xef418000}, + {.a = 0xfa990a83, .b = 0x65777780, .c = 0xefd38000}, + {.a = 0xbb710a84, .b = 0x6b4d7f80, .c = 0xe7e58000}, + {.a = 0xef260a85, .b = 0xdaf4f700, .c = 0xf7d78000}, + {.a = 0xedaa0a86, .b = 0xdae67780, .c = 0x77558000}, + {.a = 0xeab40a87, .b = 0x76857f80, .c = 0xefeb8000}, + {.a = 0x9bcf0a88, .b = 0x75577780, .c = 0xefe38000}, + {.a = 0xb9ed0a89, .b = 0x25b57780, .c = 0xf7d18000}, + {.a = 0xb2fc0a8a, .b = 0xcd74df80, .c = 0xf7e58000}, + {.a = 0xd21a0a8b, .b = 0x9d755d80, .c = 0x77d50000}, + {.a = 0x837e0a8c, .b = 0x6e957f80, .c = 0xe7f58000}, + {.a = 0xc8c30a8d, .b = 0xdb76df80, .c = 0xf7d48000}, + {.a = 0x8a5b0a8e, .b = 0xbab6df00, .c = 0xf7d48000}, + {.a = 0xc4410a8f, .b = 0xba7cef80, .c = 0xefd58000}, + {.a = 0xdbda0a90, .b = 0x66bd7780, .c = 0xf7d18000}, + {.a = 0xe5ee0a91, .b = 0x33f6ff80, .c = 0xeb758000}, + {.a = 0xc5d00a92, .b = 0x3236f680, .c = 0xefe50000}, + {.a = 0xdc5d0a93, .b = 0x3af4ef80, .c = 0xef458000}, + {.a = 0x845e0a94, .b = 0x73da7680, .c = 0xefe90000}, + {.a = 0xab600a95, .b = 0x2b6f7f80, .c = 0xe7f58000}, + {.a = 0xb82d0a96, .b = 0x2566f680, .c = 0xefd30000}, + {.a = 0xcbc80a97, .b = 0x2a776f80, .c = 0xeed68000}, + {.a = 0xfc0f0a98, .b = 0xcd56ff80, .c = 0xe7e48000}, + {.a = 0x8d900a99, .b = 0x29556f80, .c = 0xefd58000}, + {.a = 0x88c50a9a, .b = 0x36db7700, .c = 0xefcf8000}, + {.a = 0xc8f30a9b, .b = 0xc974f780, .c = 0xef978000}, + {.a = 0x962e0a9c, .b = 0x95b57780, .c = 0x77ed8000}, + {.a = 0xb23e0a9d, .b = 0x32b57780, .c = 0xefde8000}, + {.a = 0x9a560a9e, .b = 0xbad26e80, .c = 0xefa78000}, + {.a = 0xc7030a9f, .b = 0x2a36ee80, .c = 0xefd58000}, + {.a = 0x84540aa0, .b = 0x36757780, .c = 0xefe38000}, + {.a = 0xd9330aa1, .b = 0xa6aeff80, .c = 0xebce8000}, + {.a = 0xbb920aa2, .b = 0x76df7f00, .c = 0xe7f58000}, + {.a = 0x85820aa3, .b = 0xdded7780, .c = 0xeeb48000}, + {.a = 0xf2360aa4, .b = 0x9a6c7780, .c = 0xefea8000}, + {.a = 0x83530aa5, .b = 0x36697780, .c = 0xefc38000}, + {.a = 0x94b10aa6, .b = 0xcaa4f780, .c = 0xf7eb0000}, + {.a = 0xebf30aa7, .b = 0xd5756f80, .c = 0x7bec8000}, + {.a = 0xb6d80aa8, .b = 0xa574f780, .c = 0xefed8000}, + {.a = 0xdea60aa9, .b = 0xbad55f80, .c = 0x77570000}, + {.a = 0xcfe00aaa, .b = 0x637e6e80, .c = 0xedd50000}, + {.a = 0xba140aab, .b = 0xed7b7700, .c = 0x77d18000}, + {.a = 0xa5bc0aac, .b = 0xf5377680, .c = 0x6fd50000}, + {.a = 0xd50c0aad, .b = 0x4db67780, .c = 0xefdb0000}, + {.a = 0xd6700aae, .b = 0x9dad7780, .c = 0x6ff58000}, + {.a = 0x8c210aaf, .b = 0x76567780, .c = 0xefd50000}, + {.a = 0xd45a0ab0, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0x89190ab1, .b = 0xd5777f80, .c = 0xe7d58000}, + {.a = 0xd6700ab2, .b = 0xbaa4ef80, .c = 0xefc58000}, + {.a = 0x89ab0ab3, .b = 0x2d7d7780, .c = 0xf7d58000}, + {.a = 0x9ba70ab4, .b = 0xca94f780, .c = 0xefc58000}, + {.a = 0xe6b50ab5, .b = 0xdb5d7780, .c = 0x77b58000}, + {.a = 0x909e0ab6, .b = 0xade57780, .c = 0x77c98000}, + {.a = 0xda2f0ab7, .b = 0x8aae7780, .c = 0xefc70000}, + {.a = 0xb2590ab8, .b = 0xdeeb7780, .c = 0xefd50000}, + {.a = 0x83f00ab9, .b = 0xccc55f80, .c = 0x77918000}, + {.a = 0x9d9c0aba, .b = 0xb2dc6f80, .c = 0xef968000}, + {.a = 0xbf040abb, .b = 0x9c6b6e80, .c = 0x7bd58000}, + {.a = 0xee420abc, .b = 0xddab7780, .c = 0xef6b8000}, + {.a = 0x95880abd, .b = 0xd95b7780, .c = 0x77b18000}, + {.a = 0xa4ed0abe, .b = 0x36b6f780, .c = 0xefd58000}, + {.a = 0xc7180abf, .b = 0xd572ef80, .c = 0xeff78000}, + {.a = 0x82270ac0, .b = 0xaef4bf80, .c = 0x7b558000}, + {.a = 0x92f70ac1, .b = 0xcdb4df80, .c = 0xf7578000}, + {.a = 0xc10b0ac2, .b = 0xbaa4ef80, .c = 0xefef8000}, + {.a = 0xc7dc0ac3, .b = 0x3bbaef80, .c = 0xef558000}, + {.a = 0xf18c0ac4, .b = 0x72555f80, .c = 0xf7d68000}, + {.a = 0xbbfa0ac5, .b = 0x9d946f80, .c = 0x6fd68000}, + {.a = 0x80cf0ac6, .b = 0xd5f4de80, .c = 0xf7e50000}, + {.a = 0x89e50ac7, .b = 0xcdb4ef80, .c = 0xeed78000}, + {.a = 0xf72c0ac8, .b = 0x25aef780, .c = 0xefed0000}, + {.a = 0xd9a30ac9, .b = 0x36757780, .c = 0xefd78000}, + {.a = 0xecf60aca, .b = 0x62967680, .c = 0xeff50000}, + {.a = 0xc68a0acb, .b = 0x3276f680, .c = 0xefe58000}, + {.a = 0xdaa70acc, .b = 0x23acf780, .c = 0xeddf8000}, + {.a = 0xb3e50acd, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0xa1cc0ace, .b = 0xd2a77b80, .c = 0xe7f48000}, + {.a = 0xa63b0acf, .b = 0xcd575f80, .c = 0x77b78000}, + {.a = 0xd0e40ad0, .b = 0xc6677f80, .c = 0xebcc8000}, + {.a = 0x8a300ad1, .b = 0x269ef680, .c = 0xefed0000}, + {.a = 0x8b110ad2, .b = 0xe6626f80, .c = 0x7bf58000}, + {.a = 0xd8830ad3, .b = 0xdcd2df80, .c = 0xf7cd0000}, + {.a = 0xd9b60ad4, .b = 0x67797f80, .c = 0xebec8000}, + {.a = 0x83bd0ad5, .b = 0x55746f80, .c = 0xeed78000}, + {.a = 0x840c0ad6, .b = 0x35737780, .c = 0xefd78000}, + {.a = 0xa3cc0ad7, .b = 0x656f7780, .c = 0xefef8000}, + {.a = 0xe43a0ad8, .b = 0xbad6ef80, .c = 0xdf968000}, + {.a = 0xafda0ad9, .b = 0xad757780, .c = 0x77d58000}, + {.a = 0xf3c30ada, .b = 0xa4dc7b00, .c = 0xefd58000}, + {.a = 0xfe380adb, .b = 0xaafb7700, .c = 0x77d78000}, + {.a = 0xf7eb0adc, .b = 0x4bac7680, .c = 0xefc98000}, + {.a = 0x8fc60add, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0xed910ade, .b = 0x76a57f80, .c = 0xeff78000}, + {.a = 0xa1710adf, .b = 0xd966f780, .c = 0xefd78000}, + {.a = 0xe4830ae0, .b = 0x6eb5bf80, .c = 0xf7e78000}, + {.a = 0x92930ae1, .b = 0x32d6ff80, .c = 0xeb738000}, + {.a = 0xc7ad0ae2, .b = 0x9ab7bf80, .c = 0x77d58000}, + {.a = 0xcd8e0ae3, .b = 0x6ea57b80, .c = 0xf7f50000}, + {.a = 0xc7790ae4, .b = 0x32ad7780, .c = 0xefc90000}, + {.a = 0xf56e0ae5, .b = 0x656d7780, .c = 0xefec8000}, + {.a = 0xd9150ae6, .b = 0xd534ed80, .c = 0xefe58000}, + {.a = 0xabe10ae7, .b = 0x3236f700, .c = 0xefdd8000}, + {.a = 0xcf200ae8, .b = 0xcd7abf80, .c = 0x77e98000}, + {.a = 0xa3ca0ae9, .b = 0x6aaf7780, .c = 0xe7fb8000}, + {.a = 0xf6690aea, .b = 0xdb2d7780, .c = 0x6ec70000}, + {.a = 0xeac40aeb, .b = 0x29f6ee80, .c = 0xefd48000}, + {.a = 0xa85c0aec, .b = 0x66a97780, .c = 0xeff58000}, + {.a = 0xd7b40aed, .b = 0x89547780, .c = 0xefd58000}, + {.a = 0xdb3a0aee, .b = 0xdd6b7780, .c = 0xefd10000}, + {.a = 0xe09d0aef, .b = 0x95746e80, .c = 0xefd48000}, + {.a = 0xb4250af0, .b = 0xcaad7780, .c = 0xefc48000}, + {.a = 0x80340af1, .b = 0xddaf7780, .c = 0xefd58000}, + {.a = 0xf9960af2, .b = 0x7b8e6e80, .c = 0xefd50000}, + {.a = 0xe2b00af3, .b = 0xcdb6ed80, .c = 0xeff30000}, + {.a = 0xfd010af4, .b = 0x3362f380, .c = 0xeffd8000}, + {.a = 0xd74f0af5, .b = 0xd564ef80, .c = 0xeee58000}, + {.a = 0xe0ec0af6, .b = 0x9d786e80, .c = 0xefd50000}, + {.a = 0x97630af7, .b = 0x66857f80, .c = 0xebed8000}, + {.a = 0xe7b30af8, .b = 0xdb6d7f80, .c = 0xf7d48000}, + {.a = 0x84840af9, .b = 0x66997f80, .c = 0xebf58000}, + {.a = 0xe6480afa, .b = 0xdbe4ef80, .c = 0xeec58000}, + {.a = 0xc3c50afb, .b = 0x3b66ef80, .c = 0xeec78000}, + {.a = 0xdd850afc, .b = 0x3256f780, .c = 0xeff50000}, + {.a = 0xc1890afd, .b = 0x6d7f7f80, .c = 0xf7d58000}, + {.a = 0xd1e20afe, .b = 0x3376f680, .c = 0xefd58000}, + {.a = 0xb0d00aff, .b = 0x236cf780, .c = 0xedff8000}, + {.a = 0xd8390b00, .b = 0x6d75bf80, .c = 0xf7b38000}, + {.a = 0xc7870b01, .b = 0xcdb76f80, .c = 0xefee8000}, + {.a = 0x83f40b02, .b = 0x6d757f80, .c = 0xe7ed8000}, + {.a = 0x80970b03, .b = 0xdd7f7780, .c = 0xf7d38000}, + {.a = 0xbbcf0b04, .b = 0x25577780, .c = 0xefc28000}, + {.a = 0xc26b0b05, .b = 0xdd6cdf80, .c = 0xfbed0000}, + {.a = 0xd73a0b06, .b = 0x795d6f80, .c = 0xefc58000}, + {.a = 0xb3600b07, .b = 0x26f6f680, .c = 0xefc50000}, + {.a = 0x96d20b08, .b = 0x32557780, .c = 0xefcf8000}, + {.a = 0xd69f0b09, .b = 0xbb6eef80, .c = 0xefc58000}, + {.a = 0xe0f20b0a, .b = 0x9d675f80, .c = 0x7bd70000}, + {.a = 0xc8710b0b, .b = 0x676f7f80, .c = 0xeff78000}, + {.a = 0xe3390b0c, .b = 0x3aeaef80, .c = 0xef458000}, + {.a = 0x90240b0d, .b = 0x2cf2df80, .c = 0xf7558000}, + {.a = 0xcd050b0e, .b = 0x6eb37f80, .c = 0xf7d58000}, + {.a = 0xc3ce0b0f, .b = 0x9ceb5f80, .c = 0x7bd18000}, + {.a = 0xf6d40b10, .b = 0x316eef80, .c = 0xddc58000}, + {.a = 0xc7ee0b11, .b = 0x6d6d7780, .c = 0xe7f58000}, + {.a = 0xb88b0b12, .b = 0xd576ef80, .c = 0xefe58000}, + {.a = 0xa7890b13, .b = 0xed7b7680, .c = 0x77d58000}, + {.a = 0xf8c00b14, .b = 0x32a6f780, .c = 0xef758000}, + {.a = 0xb6700b15, .b = 0x72d57f00, .c = 0xe7f68000}, + {.a = 0x95130b16, .b = 0x26f57780, .c = 0xf7558000}, + {.a = 0xe0610b17, .b = 0x72b57780, .c = 0xefd48000}, + {.a = 0x9fa40b18, .b = 0xbaa4df80, .c = 0xf7ce8000}, + {.a = 0x87890b19, .b = 0xed7b6e80, .c = 0x7bd58000}, + {.a = 0xbb0a0b1a, .b = 0x99c45700, .c = 0xf7de8000}, + {.a = 0xa2d90b1b, .b = 0x3ab6ee80, .c = 0xefd50000}, + {.a = 0x89730b1c, .b = 0x64a97780, .c = 0xefc28000}, + {.a = 0xa5730b1d, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0xbc370b1e, .b = 0x2e36ef00, .c = 0xedd58000}, + {.a = 0xe75c0b1f, .b = 0xacf56f80, .c = 0x7b6a8000}, + {.a = 0x99b90b20, .b = 0xd97af700, .c = 0xf7d68000}, + {.a = 0x81780b21, .b = 0xdd577780, .c = 0xefc50000}, + {.a = 0x98250b22, .b = 0xced55f80, .c = 0x77b38000}, + {.a = 0x9eff0b23, .b = 0xa726f780, .c = 0xefd58000}, + {.a = 0x9d710b24, .b = 0x227aef80, .c = 0xefd58000}, + {.a = 0x94e70b25, .b = 0xd55ced80, .c = 0xefd58000}, + {.a = 0xec570b26, .b = 0xb57eff80, .c = 0xf3eb8000}, + {.a = 0xa2ec0b27, .b = 0xdb777b80, .c = 0xf7e58000}, + {.a = 0x8db60b28, .b = 0x256d7780, .c = 0xefc68000}, + {.a = 0xbc190b29, .b = 0xbaaedf80, .c = 0xf7d50000}, + {.a = 0xfc350b2a, .b = 0xdd76f780, .c = 0xefef8000}, + {.a = 0x8fa20b2b, .b = 0xcd6d7f80, .c = 0xe7d48000}, + {.a = 0xc1130b2c, .b = 0x6d657f80, .c = 0xf7f48000}, + {.a = 0xf4af0b2d, .b = 0x656d7780, .c = 0xefe98000}, + {.a = 0x9b5c0b2e, .b = 0x2bb56f80, .c = 0xeed28000}, + {.a = 0xdb990b2f, .b = 0x256cf680, .c = 0xefc50000}, + {.a = 0xf67a0b30, .b = 0xf5b5bf80, .c = 0x7b550000}, + {.a = 0xb9a40b31, .b = 0x24ad7780, .c = 0xf7f68000}, + {.a = 0xb4450b32, .b = 0x655d7780, .c = 0xefe58000}, + {.a = 0xd34c0b33, .b = 0x26957780, .c = 0xefc68000}, + {.a = 0x84e50b34, .b = 0x6db57f80, .c = 0xf7d18000}, + {.a = 0xb1cf0b35, .b = 0x4d547780, .c = 0xefa78000}, + {.a = 0x9d530b36, .b = 0xdd76dd80, .c = 0xf7ee8000}, + {.a = 0xde870b37, .b = 0xbbf75f80, .c = 0x77558000}, + {.a = 0x90aa0b38, .b = 0xda9d7780, .c = 0xefc88000}, + {.a = 0xbff40b39, .b = 0xcd6b7780, .c = 0xefe18000}, + {.a = 0xaf6f0b3a, .b = 0x256d7780, .c = 0xf7ca8000}, + {.a = 0xcf910b3b, .b = 0x66d57780, .c = 0xefc48000}, + {.a = 0xd09a0b3c, .b = 0xdaa57f80, .c = 0xf7d78000}, + {.a = 0x810a0b3d, .b = 0xbd64ef80, .c = 0xefdd8000}, + {.a = 0xdc920b3e, .b = 0xbb6eef80, .c = 0xedc58000}, + {.a = 0xdd180b3f, .b = 0xdd56f780, .c = 0xeffb0000}, + {.a = 0x9a240b40, .b = 0x32b75b80, .c = 0xf7e68000}, + {.a = 0xe66a0b41, .b = 0x6ea57f80, .c = 0xf7f50000}, + {.a = 0xac690b42, .b = 0xddd57780, .c = 0x77e98000}, + {.a = 0xd4970b43, .b = 0xbad4ef80, .c = 0xef958000}, + {.a = 0x9a970b44, .b = 0x3c7eee80, .c = 0xefd50000}, + {.a = 0x839a0b45, .b = 0xcdaadf80, .c = 0xf7f40000}, + {.a = 0xd9c00b46, .b = 0x9aac7780, .c = 0xefc78000}, + {.a = 0xd95f0b47, .b = 0xcd6f7f80, .c = 0xebcc8000}, + {.a = 0xcdfb0b48, .b = 0x2b5aef80, .c = 0xedc50000}, + {.a = 0xd5090b49, .b = 0xdd5b7780, .c = 0x77b18000}, + {.a = 0x96d10b4a, .b = 0xd4b4ef80, .c = 0xefe58000}, + {.a = 0xa5210b4b, .b = 0x3bb6de80, .c = 0xf7d50000}, + {.a = 0xb80e0b4c, .b = 0x35557f00, .c = 0xefef8000}, + {.a = 0xcf790b4d, .b = 0xaab4ef80, .c = 0xefe08000}, + {.a = 0xd4010b4e, .b = 0xea745d80, .c = 0x77ed8000}, + {.a = 0xd0db0b4f, .b = 0x5dee7680, .c = 0xeff58000}, + {.a = 0xa17e0b50, .b = 0xbd6eef80, .c = 0xefd78000}, + {.a = 0x8cb80b51, .b = 0x75557780, .c = 0xefc48000}, + {.a = 0xcc730b52, .b = 0xdd557680, .c = 0x77e98000}, + {.a = 0xf1390b53, .b = 0x9bb4bd80, .c = 0xf7d58000}, + {.a = 0x96700b54, .b = 0x2adb6e80, .c = 0xefb78000}, + {.a = 0x97540b55, .b = 0x259f7780, .c = 0xefca8000}, + {.a = 0x83990b56, .b = 0xced75f80, .c = 0x77958000}, + {.a = 0x9f890b57, .b = 0x9ddbb700, .c = 0x77d68000}, + {.a = 0xbbf70b58, .b = 0x266afe80, .c = 0xebfd8000}, + {.a = 0xae050b59, .b = 0x22757780, .c = 0xefbb8000}, + {.a = 0xb0a30b5a, .b = 0xb6b55f80, .c = 0x7bdf8000}, + {.a = 0xfb070b5b, .b = 0xbb56df00, .c = 0xf7d58000}, + {.a = 0x89f30b5c, .b = 0xcd677f80, .c = 0xebd58000}, + {.a = 0xc25d0b5d, .b = 0xcd757780, .c = 0xeed78000}, + {.a = 0x85370b5e, .b = 0xa976ef80, .c = 0xefe78000}, + {.a = 0xfc630b5f, .b = 0x9dda6e80, .c = 0xefdd8000}, + {.a = 0xe9d50b60, .b = 0x32457780, .c = 0xefd18000}, + {.a = 0xe6730b61, .b = 0x2d657b80, .c = 0xf7e58000}, + {.a = 0x909d0b62, .b = 0x99d77680, .c = 0x77cd8000}, + {.a = 0xfdea0b63, .b = 0x27b6fe80, .c = 0xebd58000}, + {.a = 0xd5520b64, .b = 0xa56ef780, .c = 0xefdb0000}, + {.a = 0xc50c0b65, .b = 0x45fa6e80, .c = 0xefd58000}, + {.a = 0xa1c40b66, .b = 0x65d67700, .c = 0xefd68000}, + {.a = 0xb98c0b67, .b = 0xbb5eef00, .c = 0xefea8000}, + {.a = 0xeda10b68, .b = 0x3adeb780, .c = 0xef8b8000}, + {.a = 0x8ee50b69, .b = 0x36b57780, .c = 0xefe68000}, + {.a = 0xf4f50b6a, .b = 0x6d237f80, .c = 0xf7f68000}, + {.a = 0x83e60b6b, .b = 0xcd6d7f80, .c = 0xebcc8000}, + {.a = 0x83560b6c, .b = 0xd8eb7f80, .c = 0xef710000}, + {.a = 0x84af0b6d, .b = 0xcdfd5d80, .c = 0x77d98000}, + {.a = 0xa0b70b6e, .b = 0x9e756e80, .c = 0x7bf50000}, + {.a = 0xa43f0b6f, .b = 0xd2b6ef80, .c = 0xeff28000}, + {.a = 0xcba80b70, .b = 0xc8157780, .c = 0xef518000}, + {.a = 0x83580b71, .b = 0xdd5cf780, .c = 0xefef0000}, + {.a = 0xf43b0b72, .b = 0xdeeb7780, .c = 0xefd58000}, + {.a = 0xbeaa0b73, .b = 0x2d757780, .c = 0xf7db8000}, + {.a = 0x872b0b74, .b = 0xdd6f7780, .c = 0xefc58000}, + {.a = 0xd2e00b75, .b = 0xba9eee80, .c = 0xefe50000}, + {.a = 0xfdcd0b76, .b = 0x3286f680, .c = 0xefeb0000}, + {.a = 0xc4940b77, .b = 0xddb4f780, .c = 0xefd58000}, + {.a = 0xddb50b78, .b = 0xcd6eb780, .c = 0x7ffa8000}, + {.a = 0xe34f0b79, .b = 0xda5f7780, .c = 0xefcb8000}, + {.a = 0x9f4c0b7a, .b = 0xaad57780, .c = 0x77a98000}, + {.a = 0xe70d0b7b, .b = 0xf26d6e80, .c = 0x6ff58000}, + {.a = 0xb17c0b7c, .b = 0x26aef780, .c = 0xefed0000}, + {.a = 0xf6c40b7d, .b = 0x9aa67f80, .c = 0x77f48000}, + {.a = 0xd9d40b7e, .b = 0xcd555f80, .c = 0x77be8000}, + {.a = 0xa29f0b7f, .b = 0x72ad5f80, .c = 0xf7cb0000}, + {.a = 0xe7330b80, .b = 0xcd77bf80, .c = 0x77d58000}, + {.a = 0xa1950b81, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0x92820b82, .b = 0x33655f80, .c = 0xf6c78000}, + {.a = 0xee1f0b83, .b = 0xdb557380, .c = 0x77b98000}, + {.a = 0xff600b84, .b = 0xce757f80, .c = 0xebd58000}, + {.a = 0x80f50b85, .b = 0xccad7f80, .c = 0xebca0000}, + {.a = 0x92470b86, .b = 0xab5eef80, .c = 0xef858000}, + {.a = 0xb8c20b87, .b = 0x9aac7780, .c = 0xefc78000}, + {.a = 0x835f0b88, .b = 0xddacdf80, .c = 0xf7cd8000}, + {.a = 0xa1e90b89, .b = 0xbb25b780, .c = 0x779f8000}, + {.a = 0x91450b8a, .b = 0x32d6ff80, .c = 0xeb758000}, + {.a = 0x848b0b8b, .b = 0xcd777780, .c = 0xefe78000}, + {.a = 0xa05f0b8c, .b = 0xaaa47780, .c = 0x77ca8000}, + {.a = 0xef870b8d, .b = 0xb366ed80, .c = 0xeff78000}, + {.a = 0x91ef0b8e, .b = 0x3464ef80, .c = 0xefe58000}, + {.a = 0x8f720b8f, .b = 0xe7555f00, .c = 0x7bd78000}, + {.a = 0xc4a00b90, .b = 0x33557f80, .c = 0xe6f48000}, + {.a = 0x8fe20b91, .b = 0x36b77780, .c = 0xefe58000}, + {.a = 0xe9290b92, .b = 0x26d57780, .c = 0xefd68000}, + {.a = 0x946c0b93, .b = 0x25eef680, .c = 0xefc50000}, + {.a = 0xd2b60b94, .b = 0xaeed6f80, .c = 0x7bc58000}, + {.a = 0x82200b95, .b = 0x75a66f80, .c = 0xefc70000}, + {.a = 0xceef0b96, .b = 0xcd56f780, .c = 0xefeb0000}, + {.a = 0x8fd10b97, .b = 0x3aaeef80, .c = 0xddc58000}, + {.a = 0x8d540b98, .b = 0xd2d57f80, .c = 0xf7ef0000}, + {.a = 0xfbce0b99, .b = 0xb6b4f780, .c = 0xefc78000}, + {.a = 0xafcd0b9a, .b = 0x2b777f80, .c = 0xe7b38000}, + {.a = 0xc7e60b9b, .b = 0x5db26e80, .c = 0xefd58000}, + {.a = 0xbffa0b9c, .b = 0xb674f780, .c = 0xefd58000}, + {.a = 0xd19b0b9d, .b = 0xbcbd6b80, .c = 0x6f958000}, + {.a = 0xbfe00b9e, .b = 0xb9b55e80, .c = 0x77d70000}, + {.a = 0xbceb0b9f, .b = 0x73555f80, .c = 0xf7c58000}, + {.a = 0xf6560ba0, .b = 0xdcb4df80, .c = 0xf7d58000}, + {.a = 0xb6ab0ba1, .b = 0xdd74df80, .c = 0xfbd70000}, + {.a = 0xdd3f0ba2, .b = 0x32757780, .c = 0xefe78000}, + {.a = 0xbb440ba3, .b = 0x721c7700, .c = 0xefd78000}, + {.a = 0x98090ba4, .b = 0xaa767780, .c = 0xf7da8000}, + {.a = 0xf26c0ba5, .b = 0xcd5cf780, .c = 0xefef0000}, + {.a = 0xe8270ba6, .b = 0x6abdb780, .c = 0xf7d78000}, + {.a = 0xa8640ba7, .b = 0x65757f80, .c = 0xebed8000}, + {.a = 0xcce90ba8, .b = 0xb6b4f780, .c = 0xefd50000}, + {.a = 0xb64f0ba9, .b = 0xa558ff80, .c = 0xf3f58000}, + {.a = 0xe82a0baa, .b = 0xd9b77780, .c = 0xefe58000}, + {.a = 0xade10bab, .b = 0x9c745d80, .c = 0x77d48000}, + {.a = 0x80df0bac, .b = 0x66ad7f80, .c = 0xefd48000}, + {.a = 0xf8ba0bad, .b = 0x99747780, .c = 0x77d78000}, + {.a = 0xbc220bae, .b = 0xdaacf780, .c = 0xefc58000}, + {.a = 0xe4790baf, .b = 0xb5b65f80, .c = 0x7bd70000}, + {.a = 0x82230bb0, .b = 0x3ad6de80, .c = 0xf7d50000}, + {.a = 0xbea90bb1, .b = 0x2b86df80, .c = 0xf7558000}, + {.a = 0xb0410bb2, .b = 0x757b7f80, .c = 0xeff78000}, + {.a = 0xe7aa0bb3, .b = 0x76957b80, .c = 0xefed8000}, + {.a = 0xd94f0bb4, .b = 0x32757780, .c = 0xefe78000}, + {.a = 0x93440bb5, .b = 0x6d6f7f80, .c = 0xf7cd8000}, + {.a = 0xb6850bb6, .b = 0xbcb46d80, .c = 0xef968000}, + {.a = 0xf63a0bb7, .b = 0xbbeb5d80, .c = 0x77c58000}, + {.a = 0xdf110bb8, .b = 0xd5b77f80, .c = 0xe7658000}, + {.a = 0xb36f0bb9, .b = 0xcd777f80, .c = 0xebed0000}, + {.a = 0xed400bba, .b = 0xad74f780, .c = 0xf7db8000}, + {.a = 0xb73b0bbb, .b = 0x49ea7680, .c = 0xefcd8000}, + {.a = 0xc5a00bbc, .b = 0x256eee80, .c = 0xefd50000}, + {.a = 0x91c90bbd, .b = 0xdd6d7780, .c = 0xf7d58000}, + {.a = 0x8f3b0bbe, .b = 0xdd4d7780, .c = 0xefd78000}, + {.a = 0x87860bbf, .b = 0x26d6f700, .c = 0xefd58000}, + {.a = 0xd2c90bc0, .b = 0xf2b4ef80, .c = 0xdf550000}, + {.a = 0xf3e10bc1, .b = 0xbbd2df80, .c = 0xf7578000}, + {.a = 0xc2420bc2, .b = 0xbabc6d80, .c = 0xef958000}, + {.a = 0xafa60bc3, .b = 0x655d7f80, .c = 0xeff58000}, + {.a = 0xe95f0bc4, .b = 0xd5777f80, .c = 0xe7d78000}, + {.a = 0x8f030bc5, .b = 0xde6b7780, .c = 0xefd68000}, + {.a = 0xab8b0bc6, .b = 0x29756f80, .c = 0xefd50000}, + {.a = 0x94ea0bc7, .b = 0xd2b4ef80, .c = 0xeff30000}, + {.a = 0xa7890bc8, .b = 0x3b5d6f80, .c = 0xefd78000}, + {.a = 0x9d4c0bc9, .b = 0xcd2f7f80, .c = 0xe7d70000}, + {.a = 0xb79f0bca, .b = 0xcd74f700, .c = 0xefd68000}, + {.a = 0xbcec0bcb, .b = 0xe6d75f00, .c = 0x7bd58000}, + {.a = 0x8fdc0bcc, .b = 0xb766df80, .c = 0xfbcd8000}, + {.a = 0xbbae0bcd, .b = 0x8dac7780, .c = 0xefe68000}, + {.a = 0xdc800bce, .b = 0x656d7780, .c = 0xefec8000}, + {.a = 0x99bf0bcf, .b = 0x95966e80, .c = 0xefd70000}, + {.a = 0xf4ff0bd0, .b = 0x2d657f80, .c = 0xf7f58000}, + {.a = 0xca0a0bd1, .b = 0x656d7780, .c = 0xf7f48000}, + {.a = 0xf5c90bd2, .b = 0xa56cf780, .c = 0xefc58000}, + {.a = 0x8ed60bd3, .b = 0xdd5b7780, .c = 0x77b18000}, + {.a = 0xa6210bd4, .b = 0xaa757780, .c = 0x77ed0000}, + {.a = 0xc0500bd5, .b = 0xddb2ef80, .c = 0xeed58000}, + {.a = 0xa29c0bd6, .b = 0xddb4df80, .c = 0xf7e98000}, + {.a = 0x81620bd7, .b = 0x657f7f80, .c = 0xebea8000}, + {.a = 0x87100bd8, .b = 0xe937b780, .c = 0x77ed8000}, + {.a = 0xd08a0bd9, .b = 0xad627780, .c = 0x77cb8000}, + {.a = 0xacbc0bda, .b = 0xcd757780, .c = 0xefd50000}, + {.a = 0x8bdf0bdb, .b = 0xb6d75f80, .c = 0x7bc50000}, + {.a = 0x9b5b0bdc, .b = 0x75567f80, .c = 0xe7e50000}, + {.a = 0x8f090bdd, .b = 0x6a757780, .c = 0xf7d18000}, + {.a = 0xa36f0bde, .b = 0xbad26e80, .c = 0xefa78000}, + {.a = 0xf94d0bdf, .b = 0xa958e780, .c = 0xeff58000}, + {.a = 0xa4230be0, .b = 0xecf3bf80, .c = 0x7bd58000}, + {.a = 0xb2e30be1, .b = 0x256d7780, .c = 0xf7d58000}, + {.a = 0xe3b80be2, .b = 0xdd6f7780, .c = 0xefd50000}, + {.a = 0xc0d80be3, .b = 0x2b356f80, .c = 0xef968000}, + {.a = 0xc5ea0be4, .b = 0xd36ced80, .c = 0xeff58000}, + {.a = 0xd18e0be5, .b = 0xcd6cf780, .c = 0xefc58000}, + {.a = 0xd0260be6, .b = 0xcae2de80, .c = 0xf7d78000}, + {.a = 0xe6150be7, .b = 0xbd8c6e80, .c = 0xefdb8000}, + {.a = 0xa7530be8, .b = 0x72d55e80, .c = 0xf7d50000}, + {.a = 0xc7390be9, .b = 0x9b6cbf80, .c = 0xf7cc0000}, + {.a = 0xda360bea, .b = 0x237b7700, .c = 0xeddf8000}, + {.a = 0xcaac0beb, .b = 0xb954e780, .c = 0xefbd8000}, + {.a = 0xa2480bec, .b = 0xb2746f80, .c = 0xefdf8000}, + {.a = 0xb0b90bed, .b = 0x29756f80, .c = 0xef548000}, + {.a = 0xec2e0bee, .b = 0xddd4ef80, .c = 0xefa78000}, + {.a = 0x9bd70bef, .b = 0x46d66e80, .c = 0xedc58000}, + {.a = 0x897b0bf0, .b = 0x4d3dbf80, .c = 0xf7eb8000}, + {.a = 0xf4590bf1, .b = 0x66ed7700, .c = 0xf7df8000}, + {.a = 0x84f40bf2, .b = 0x32d2ff80, .c = 0xeb750000}, + {.a = 0xd6030bf3, .b = 0xdb5b7780, .c = 0x77b98000}, + {.a = 0xa6010bf4, .b = 0xbd62ef80, .c = 0xefe78000}, + {.a = 0x89410bf5, .b = 0xdbe4dd80, .c = 0xf7ee8000}, + {.a = 0xf1ee0bf6, .b = 0xcd66f780, .c = 0xefdb8000}, + {.a = 0x9fb40bf7, .b = 0x3514f700, .c = 0xefd78000}, + {.a = 0x83830bf8, .b = 0xd2b6ef80, .c = 0xeff28000}, + {.a = 0x9ec10bf9, .b = 0x76567780, .c = 0xefd50000}, + {.a = 0xc3390bfa, .b = 0x9c986e80, .c = 0xefdd0000}, + {.a = 0xb25c0bfb, .b = 0xa56d7300, .c = 0x77d98000}, + {.a = 0xa2810bfc, .b = 0xecf5bf80, .c = 0x7bd70000}, + {.a = 0xa2570bfd, .b = 0x2ab77f80, .c = 0xe7d58000}, + {.a = 0x9c050bfe, .b = 0xcd2f7f80, .c = 0xebf58000}, + {.a = 0xe7ec0bff, .b = 0x7a9e6e80, .c = 0xefd50000}, + {.a = 0xc7390c00, .b = 0xd5456f80, .c = 0xefd78000}, + {.a = 0xc1b40c01, .b = 0x2d757780, .c = 0xf7db8000}, + {.a = 0xdac80c02, .b = 0xba9cef80, .c = 0xefd78000}, + {.a = 0x9de90c03, .b = 0xb36ced80, .c = 0xeff58000}, + {.a = 0x80060c04, .b = 0xdd74f780, .c = 0xeffb8000}, + {.a = 0xc8b60c05, .b = 0xddf6de80, .c = 0xf7d50000}, + {.a = 0xc18c0c06, .b = 0x35b6ef80, .c = 0xefe48000}, + {.a = 0x81f60c07, .b = 0xeaf75f80, .c = 0x77550000}, + {.a = 0xc2bf0c08, .b = 0x2b96ef80, .c = 0xef758000}, + {.a = 0xfa130c09, .b = 0x256d7780, .c = 0xefce8000}, + {.a = 0xb2b90c0a, .b = 0x9d355d80, .c = 0x77d58000}, + {.a = 0xd1030c0b, .b = 0xd5756f80, .c = 0x7baf8000}, + {.a = 0xb1670c0c, .b = 0x3cbaef80, .c = 0xef558000}, + {.a = 0x800f0c0d, .b = 0x9deb6f80, .c = 0x7bdd8000}, + {.a = 0x80430c0e, .b = 0x65697f80, .c = 0xeff58000}, + {.a = 0xcb1c0c0f, .b = 0xbb54df80, .c = 0xf7d58000}, + {.a = 0x8d810c10, .b = 0xdce4df80, .c = 0xf7b58000}, + {.a = 0xbd360c11, .b = 0x6d777f80, .c = 0xe7d58000}, + {.a = 0xdde40c12, .b = 0x31e57780, .c = 0xeda58000}, + {.a = 0x8b120c13, .b = 0xdced7780, .c = 0xf7d48000}, + {.a = 0xd2f10c14, .b = 0x9ce75f80, .c = 0x7bd58000}, + {.a = 0xb22d0c15, .b = 0x2656f700, .c = 0xefd48000}, + {.a = 0x9f400c16, .b = 0x49b67e80, .c = 0xefef8000}, + {.a = 0xfdf20c17, .b = 0x3676f780, .c = 0xefd58000}, + {.a = 0xc1730c18, .b = 0xdab6f780, .c = 0xf7d68000}, + {.a = 0xee0c0c19, .b = 0xcea37f80, .c = 0xebc90000}, + {.a = 0xec960c1a, .b = 0xbae4ef80, .c = 0xef858000}, + {.a = 0xe51c0c1b, .b = 0xd2b6ef80, .c = 0xefd58000}, + {.a = 0xb7d60c1c, .b = 0xad747780, .c = 0xf7db8000}, + {.a = 0x9a890c1d, .b = 0x996a7780, .c = 0xefc58000}, + {.a = 0xc6d00c1e, .b = 0xcbab7780, .c = 0xefe28000}, + {.a = 0xd8490c1f, .b = 0xbdb8ef80, .c = 0xefd58000}, + {.a = 0xe8c00c20, .b = 0x9edbb780, .c = 0x77978000}, + {.a = 0xded90c21, .b = 0x256d7780, .c = 0xf79f8000}, + {.a = 0xf8b00c22, .b = 0xed54ef80, .c = 0xdfd78000}, + {.a = 0xda4a0c23, .b = 0xc954f700, .c = 0xefd48000}, + {.a = 0xabc20c24, .b = 0x5dd67680, .c = 0xefdb8000}, + {.a = 0xe6c80c25, .b = 0xa6696f80, .c = 0x7bf50000}, + {.a = 0xa0bb0c26, .b = 0x36697780, .c = 0xefc38000}, + {.a = 0xe45e0c27, .b = 0xddef7780, .c = 0xef7e8000}, + {.a = 0x8b8e0c28, .b = 0x2abd7780, .c = 0xf7ea8000}, + {.a = 0xdbe10c29, .b = 0xf31b6d80, .c = 0x6fd58000}, + {.a = 0xbd990c2a, .b = 0xb6a4df80, .c = 0xfbcd8000}, + {.a = 0xca170c2b, .b = 0xb6765f80, .c = 0x7bd50000}, + {.a = 0xf4200c2c, .b = 0xcfd57700, .c = 0xedcf8000}, + {.a = 0xf6070c2d, .b = 0x44da6e80, .c = 0xefc58000}, + {.a = 0xe7620c2e, .b = 0xcdb35f80, .c = 0x77978000}, + {.a = 0xbee70c2f, .b = 0x9c886e80, .c = 0xefd50000}, + {.a = 0xf5aa0c30, .b = 0xa668f780, .c = 0xefc78000}, + {.a = 0xe8930c31, .b = 0x29756f80, .c = 0xef550000}, + {.a = 0xc2b10c32, .b = 0xb7b77780, .c = 0x6ed18000}, + {.a = 0x92620c33, .b = 0x9c545d80, .c = 0x77d50000}, + {.a = 0xbb720c34, .b = 0x4cea7e80, .c = 0xebc58000}, + {.a = 0xa4f00c35, .b = 0x3286f780, .c = 0xefe58000}, + {.a = 0xd9900c36, .b = 0xeb735d80, .c = 0x77d48000}, + {.a = 0xb01b0c37, .b = 0x26f57f80, .c = 0xefd58000}, + {.a = 0xe32b0c38, .b = 0x66ad7780, .c = 0xf7dd8000}, + {.a = 0xf5750c39, .b = 0xbd56f780, .c = 0xefe78000}, + {.a = 0xea480c3a, .b = 0xd574ef80, .c = 0xefe50000}, + {.a = 0xdfaf0c3b, .b = 0xed557b80, .c = 0x77b58000}, + {.a = 0x8e2f0c3c, .b = 0xa2ec7780, .c = 0xef6b8000}, + {.a = 0x9ff90c3d, .b = 0xccb77f80, .c = 0xebec8000}, + {.a = 0xb52c0c3e, .b = 0xd9777780, .c = 0xeff78000}, + {.a = 0xd7530c3f, .b = 0xed757700, .c = 0x77d18000}, + {.a = 0x9aa10c40, .b = 0x2b4eee80, .c = 0xefd50000}, + {.a = 0xa55c0c41, .b = 0xcdf4d700, .c = 0xf7ea8000}, + {.a = 0x89700c42, .b = 0xbbacef80, .c = 0xef458000}, + {.a = 0xe3c40c43, .b = 0x35ad7780, .c = 0xefc90000}, + {.a = 0xe0600c44, .b = 0x4ab67680, .c = 0xefd50000}, + {.a = 0xffc60c45, .b = 0x242d7f80, .c = 0xef758000}, + {.a = 0xa69b0c46, .b = 0xf4fc6680, .c = 0x6fd50000}, + {.a = 0xd3540c47, .b = 0xb6da7780, .c = 0xefd68000}, + {.a = 0xef9e0c48, .b = 0xd5677780, .c = 0xf7f58000}, + {.a = 0xb53e0c49, .b = 0xb356ef80, .c = 0xeef50000}, + {.a = 0xedce0c4a, .b = 0xedfd6f00, .c = 0x7bd68000}, + {.a = 0xe2560c4b, .b = 0x35537700, .c = 0xefd78000}, + {.a = 0xcb920c4c, .b = 0xdcb36f80, .c = 0xefd58000}, + {.a = 0xb5e80c4d, .b = 0xa9c46d80, .c = 0xef968000}, + {.a = 0xdeab0c4e, .b = 0xcb74ef80, .c = 0xefe58000}, + {.a = 0xd4160c4f, .b = 0x9cb26d80, .c = 0xefd68000}, + {.a = 0xcf0c0c50, .b = 0x3176ef80, .c = 0xdde58000}, + {.a = 0xafe40c51, .b = 0xbdbaef80, .c = 0xefd68000}, + {.a = 0xec570c52, .b = 0xdd7ef780, .c = 0xf7d28000}, + {.a = 0xd9c70c53, .b = 0x26b6f680, .c = 0xefd50000}, + {.a = 0xc7960c54, .b = 0x9da75e80, .c = 0x77f78000}, + {.a = 0xe4860c55, .b = 0xcd575f80, .c = 0x7bcf8000}, + {.a = 0xb3890c56, .b = 0xd3357f80, .c = 0xf7d58000}, + {.a = 0xffe30c57, .b = 0xe6eb5f80, .c = 0x7be18000}, + {.a = 0x91600c58, .b = 0xd9a8f780, .c = 0xf7f50000}, + {.a = 0x99bc0c59, .b = 0x2bb57f80, .c = 0xe7750000}, + {.a = 0x99f10c5a, .b = 0x3a96b780, .c = 0xefc58000}, + {.a = 0xe5090c5b, .b = 0xcd7edf80, .c = 0xf7ed8000}, + {.a = 0x997f0c5c, .b = 0x64f57780, .c = 0xf75d8000}, + {.a = 0xe7380c5d, .b = 0xd2acef80, .c = 0xeff58000}, + {.a = 0xe86b0c5e, .b = 0x65757780, .c = 0xefe98000}, + {.a = 0xd51f0c5f, .b = 0xbadd6f80, .c = 0x6f470000}, + {.a = 0xacbf0c60, .b = 0xfb94ef80, .c = 0xdf750000}, + {.a = 0xf1d40c61, .b = 0x352d7780, .c = 0xe7fb8000}, + {.a = 0xf3560c62, .b = 0x89747780, .c = 0xefe70000}, + {.a = 0xc57b0c63, .b = 0x25dd7700, .c = 0xefd78000}, + {.a = 0xa1ba0c64, .b = 0xada9bf80, .c = 0x7b770000}, + {.a = 0xc7300c65, .b = 0xb2747780, .c = 0xefea8000}, + {.a = 0xb9890c66, .b = 0xbadf6f80, .c = 0x6f550000}, + {.a = 0xbba70c67, .b = 0x9d747780, .c = 0xefe58000}, + {.a = 0xb4370c68, .b = 0x3ba4ef80, .c = 0xeecb8000}, + {.a = 0xaef10c69, .b = 0x7a755f80, .c = 0xf7d70000}, + {.a = 0xc86b0c6a, .b = 0xdc957780, .c = 0xefdf8000}, + {.a = 0xbab70c6b, .b = 0x77557b80, .c = 0xefed8000}, + {.a = 0x8cf30c6c, .b = 0xcbb77b80, .c = 0xe7e60000}, + {.a = 0xb3e00c6d, .b = 0xdcfb7780, .c = 0xef690000}, + {.a = 0xdeb00c6e, .b = 0x335aef00, .c = 0xeedd8000}, + {.a = 0xcf650c6f, .b = 0xb2746f80, .c = 0xefa68000}, + {.a = 0xb2a90c70, .b = 0x259efe80, .c = 0xebf50000}, + {.a = 0xe06c0c71, .b = 0x26a77780, .c = 0xf7df8000}, + {.a = 0xc4d50c72, .b = 0xdb6cef80, .c = 0xefcd0000}, + {.a = 0xa07a0c73, .b = 0xbb6eef80, .c = 0xeec78000}, + {.a = 0x85e60c74, .b = 0xdd74ef80, .c = 0xefd78000}, + {.a = 0x83220c75, .b = 0x36aef780, .c = 0xefc50000}, + {.a = 0xd8ea0c76, .b = 0x996d7780, .c = 0x77f70000}, + {.a = 0xf75f0c77, .b = 0x35baf780, .c = 0xefd18000}, + {.a = 0xe4180c78, .b = 0xc5a4ef80, .c = 0xefc58000}, + {.a = 0x94ea0c79, .b = 0xb174df80, .c = 0xf7ec8000}, + {.a = 0xba8b0c7a, .b = 0x6d6b7f80, .c = 0xe7e78000}, + {.a = 0xce080c7b, .b = 0xbdfc6e80, .c = 0xefd78000}, + {.a = 0x85580c7c, .b = 0x2976ef80, .c = 0xeee48000}, + {.a = 0x9bce0c7d, .b = 0x3336f680, .c = 0xefd50000}, + {.a = 0xa0720c7e, .b = 0x72467780, .c = 0xefe70000}, + {.a = 0x98570c7f, .b = 0xdd5b7780, .c = 0x77b18000}, + {.a = 0x9d410c80, .b = 0xbb7eef80, .c = 0xefd58000}, + {.a = 0xcaba0c81, .b = 0xbaa4d780, .c = 0xf7f38000}, + {.a = 0x9ad70c82, .b = 0x76d57780, .c = 0xefc70000}, + {.a = 0x9bbb0c83, .b = 0xcd2d7780, .c = 0xefe90000}, + {.a = 0x99470c84, .b = 0x97776f80, .c = 0x7bd78000}, + {.a = 0x8ac50c85, .b = 0xad7bbf80, .c = 0xf7b78000}, + {.a = 0xcec80c86, .b = 0xe65b6f00, .c = 0x7bd68000}, + {.a = 0xa81f0c87, .b = 0xdcad7780, .c = 0xefcc8000}, + {.a = 0xb9730c88, .b = 0xa57ef780, .c = 0xefcf0000}, + {.a = 0xfc3f0c89, .b = 0xd7756f80, .c = 0x7bad8000}, + {.a = 0xcc4c0c8a, .b = 0xdd757700, .c = 0xefd58000}, + {.a = 0xbf000c8b, .b = 0xcd7f7f80, .c = 0xebd50000}, + {.a = 0xa6e30c8c, .b = 0xccb2df80, .c = 0xf7d68000}, + {.a = 0x987b0c8d, .b = 0xd356ef80, .c = 0xeff50000}, + {.a = 0x86330c8e, .b = 0x2aa57780, .c = 0xf7ca8000}, + {.a = 0x90370c8f, .b = 0x3a6ee780, .c = 0xeff58000}, + {.a = 0x89f90c90, .b = 0x759d7780, .c = 0xe7f48000}, + {.a = 0xaf240c91, .b = 0xbbd4ee80, .c = 0xdfd58000}, + {.a = 0xbcfd0c92, .b = 0x4caa7680, .c = 0xefc10000}, + {.a = 0xc62d0c93, .b = 0x33daff80, .c = 0xeb718000}, + {.a = 0xd1a00c94, .b = 0x256ef780, .c = 0xefed8000}, + {.a = 0xcc2b0c95, .b = 0x6aa57780, .c = 0xf7c88000}, + {.a = 0xc29d0c96, .b = 0x3d76ee80, .c = 0xefd50000}, + {.a = 0xea300c97, .b = 0x23aaf680, .c = 0xeff90000}, + {.a = 0xa4250c98, .b = 0x9dd7b700, .c = 0x77da8000}, + {.a = 0xa9760c99, .b = 0xb6b4f780, .c = 0xefc78000}, + {.a = 0xb3e50c9a, .b = 0xdd6f7780, .c = 0xef798000}, + {.a = 0xe1610c9b, .b = 0xe65b6f00, .c = 0x7bd68000}, + {.a = 0xed340c9c, .b = 0xdd577780, .c = 0xefd20000}, + {.a = 0xb4520c9d, .b = 0x3ae2ef80, .c = 0xef558000}, + {.a = 0xd04f0c9e, .b = 0x2c956b80, .c = 0xefd58000}, + {.a = 0x8e700c9f, .b = 0x5a6e7780, .c = 0xefc70000}, + {.a = 0xcc1e0ca0, .b = 0x67737f80, .c = 0xebea8000}, + {.a = 0xc2be0ca1, .b = 0x32ad7f80, .c = 0xe7d68000}, + {.a = 0xb6760ca2, .b = 0x6da77f80, .c = 0xf7f50000}, + {.a = 0xe2c40ca3, .b = 0x9cb46d80, .c = 0xefdd8000}, + {.a = 0xa9390ca4, .b = 0x9d747780, .c = 0xefd78000}, + {.a = 0xe90f0ca5, .b = 0x22957780, .c = 0xefda8000}, + {.a = 0xab670ca6, .b = 0xbcbcef00, .c = 0xefd58000}, + {.a = 0xacad0ca7, .b = 0xbbdd5d00, .c = 0x77f78000}, + {.a = 0x80370ca8, .b = 0xdd677780, .c = 0xefd58000}, + {.a = 0xdd740ca9, .b = 0xdbacf680, .c = 0xf7cd8000}, + {.a = 0xa5d20caa, .b = 0x6b6d7780, .c = 0xf7d58000}, + {.a = 0xf9ec0cab, .b = 0xd1f57f80, .c = 0xe7b68000}, + {.a = 0x9e1f0cac, .b = 0xcce37f80, .c = 0xe7d58000}, + {.a = 0x87500cad, .b = 0x66a97780, .c = 0xefc68000}, + {.a = 0x95fb0cae, .b = 0xdadf7780, .c = 0x77b58000}, + {.a = 0xd74c0caf, .b = 0x32b57780, .c = 0xefd68000}, + {.a = 0xc76a0cb0, .b = 0x3276f680, .c = 0xeffb0000}, + {.a = 0x9bf00cb1, .b = 0xdb6eef80, .c = 0xeec58000}, + {.a = 0xa5570cb2, .b = 0xad72f700, .c = 0xf7de8000}, + {.a = 0xee650cb3, .b = 0x9cf56f80, .c = 0x7bdb8000}, + {.a = 0x87060cb4, .b = 0x457dbf80, .c = 0xefb58000}, + {.a = 0x82470cb5, .b = 0xcd595f80, .c = 0x7b948000}, + {.a = 0xdfed0cb6, .b = 0xdca16f80, .c = 0x7bea8000}, + {.a = 0x979f0cb7, .b = 0xb4bcdf80, .c = 0xfbd50000}, + {.a = 0xe9870cb8, .b = 0x9b75bf80, .c = 0xf7d70000}, + {.a = 0xc53a0cb9, .b = 0xdcb4df80, .c = 0xf7d58000}, + {.a = 0xb5780cba, .b = 0xcab6f780, .c = 0xefe48000}, + {.a = 0xd4820cbb, .b = 0xd9e57780, .c = 0x77738000}, + {.a = 0xa2150cbc, .b = 0x9d555d80, .c = 0x77d50000}, + {.a = 0xda580cbd, .b = 0x72555f80, .c = 0xf7d68000}, + {.a = 0xb5e50cbe, .b = 0xcea57780, .c = 0xedd68000}, + {.a = 0xf47f0cbf, .b = 0x73555f00, .c = 0xf7d58000}, + {.a = 0xd5d00cc0, .b = 0xb6b4f780, .c = 0xefe48000}, + {.a = 0x9cdf0cc1, .b = 0x4d59b780, .c = 0xf7d78000}, + {.a = 0x93ff0cc2, .b = 0xbabeef80, .c = 0xefd48000}, + {.a = 0xc5290cc3, .b = 0x32a57780, .c = 0xefef8000}, + {.a = 0xc57e0cc4, .b = 0x627e6e80, .c = 0xefd50000}, + {.a = 0xf8d10cc5, .b = 0xdabcf780, .c = 0xefeb0000}, + {.a = 0xd4dc0cc6, .b = 0x8d7c6f80, .c = 0xefd68000}, + {.a = 0xad210cc7, .b = 0xdc72ef80, .c = 0xeed58000}, + {.a = 0xe0c10cc8, .b = 0x3b66ef80, .c = 0xefe58000}, + {.a = 0xbc940cc9, .b = 0xa6a8f780, .c = 0xefc48000}, + {.a = 0xb2c70cca, .b = 0xd2757f80, .c = 0xe7550000}, + {.a = 0x820c0ccb, .b = 0x92757f80, .c = 0x77d78000}, + {.a = 0xd2100ccc, .b = 0xdd6f7780, .c = 0xefd60000}, + {.a = 0xb6f90ccd, .b = 0xccb57780, .c = 0xefed0000}, + {.a = 0x9ab90cce, .b = 0xeafe7780, .c = 0x77558000}, + {.a = 0xcb7f0ccf, .b = 0x36f6f700, .c = 0xefd38000}, + {.a = 0xd4270cd0, .b = 0xcef6f780, .c = 0xedd50000}, + {.a = 0x9c7b0cd1, .b = 0x66ad7780, .c = 0xf7cd8000}, + {.a = 0xe3210cd2, .b = 0xd2e77f80, .c = 0xe7d60000}, + {.a = 0x8f310cd3, .b = 0x7b6d7d80, .c = 0xf7c78000}, + {.a = 0xa9240cd4, .b = 0x967c6f80, .c = 0x7bd58000}, + {.a = 0x8ee00cd5, .b = 0x2696f700, .c = 0xefc58000}, + {.a = 0xae610cd6, .b = 0xb954ef00, .c = 0xded78000}, + {.a = 0xde280cd7, .b = 0xddb4df80, .c = 0xf7d68000}, + {.a = 0xf8950cd8, .b = 0xbaa4ef80, .c = 0xefc58000}, + {.a = 0xcd9b0cd9, .b = 0xd4b2ef80, .c = 0xefe58000}, + {.a = 0xebeb0cda, .b = 0xd56b6f80, .c = 0xeec68000}, + {.a = 0xe9f60cdb, .b = 0xbba6ef80, .c = 0xeeca8000}, + {.a = 0xb2ee0cdc, .b = 0xdd577780, .c = 0xef7f0000}, + {.a = 0x8a340cdd, .b = 0xdaad7f80, .c = 0xefd68000}, + {.a = 0xcbf80cde, .b = 0x3576ef80, .c = 0xefe58000}, + {.a = 0x91f80cdf, .b = 0x72b57780, .c = 0xefd50000}, + {.a = 0xec660ce0, .b = 0xadaabf80, .c = 0x7b738000}, + {.a = 0xfc4b0ce1, .b = 0xed64bf80, .c = 0x7bfb8000}, + {.a = 0xa49f0ce2, .b = 0xb96ed780, .c = 0xf7f38000}, + {.a = 0xe3f00ce3, .b = 0x328d6f80, .c = 0xefdb8000}, + {.a = 0xe59f0ce4, .b = 0xb6b4f780, .c = 0xefd48000}, + {.a = 0x92670ce5, .b = 0xbaaedf80, .c = 0xf7c48000}, + {.a = 0xd93d0ce6, .b = 0x23aaf680, .c = 0xefe98000}, + {.a = 0xb5130ce7, .b = 0xdd6d7780, .c = 0xefdd0000}, + {.a = 0x82640ce8, .b = 0xb56cf780, .c = 0xefc58000}, + {.a = 0xeb430ce9, .b = 0x36b6ee80, .c = 0xefd48000}, + {.a = 0xae490cea, .b = 0xd2b76f80, .c = 0xefd58000}, + {.a = 0xab710ceb, .b = 0xceab7f80, .c = 0xebcd0000}, + {.a = 0xd2fb0cec, .b = 0x24ad7f80, .c = 0xefd48000}, + {.a = 0xef1f0ced, .b = 0x3bb6de80, .c = 0xf7d58000}, + {.a = 0xd9550cee, .b = 0xdd6b7780, .c = 0xefc38000}, + {.a = 0xde1f0cef, .b = 0x63ac7780, .c = 0xedf58000}, + {.a = 0xeb330cf0, .b = 0x9babbd80, .c = 0xf7e78000}, + {.a = 0xc9b90cf1, .b = 0xdcacdb80, .c = 0xf7c58000}, + {.a = 0xbd290cf2, .b = 0xc96af780, .c = 0xefc58000}, + {.a = 0xc9590cf3, .b = 0xdd64f780, .c = 0xf7d78000}, + {.a = 0xa0e90cf4, .b = 0x66ab7780, .c = 0xf7f50000}, + {.a = 0xd1870cf5, .b = 0xbbbc6e80, .c = 0xefd58000}, + {.a = 0x94410cf6, .b = 0x66a97780, .c = 0xefed8000}, + {.a = 0xc1a50cf7, .b = 0x6eb57f80, .c = 0xe7d58000}, + {.a = 0xda930cf8, .b = 0x32ad7780, .c = 0xefc90000}, + {.a = 0xe6130cf9, .b = 0x242d7f80, .c = 0xef750000}, + {.a = 0x9a340cfa, .b = 0x6d6d7f80, .c = 0xf7cd8000}, + {.a = 0xf4360cfb, .b = 0x6ab57780, .c = 0xf7d58000}, + {.a = 0xcacc0cfc, .b = 0xb2b47780, .c = 0xefde0000}, + {.a = 0xbdab0cfd, .b = 0x3ab6ef80, .c = 0xeed58000}, + {.a = 0xd5cc0cfe, .b = 0x226af680, .c = 0xeff90000}, + {.a = 0xf7d60cff, .b = 0xd366ef80, .c = 0xeed58000}, + {.a = 0xfcba0d00, .b = 0xcd2d7780, .c = 0xefca8000}, + {.a = 0xf5c90d01, .b = 0xc4aaef80, .c = 0xefcc8000}, + {.a = 0xd7470d02, .b = 0xb9e45d80, .c = 0xf7ca8000}, + {.a = 0x90820d03, .b = 0x3b64ef80, .c = 0xeec78000}, + {.a = 0xfc920d04, .b = 0xd576ef80, .c = 0xefe58000}, + {.a = 0xb8c30d05, .b = 0xbbf6ef80, .c = 0xef6b8000}, + {.a = 0xf75e0d06, .b = 0xba9ad780, .c = 0xf7798000}, + {.a = 0xa7ed0d07, .b = 0xb16cdf80, .c = 0xf7d48000}, + {.a = 0xb9300d08, .b = 0x6da57f80, .c = 0xf7d58000}, + {.a = 0xb9630d09, .b = 0x26957780, .c = 0xefc58000}, + {.a = 0xb60b0d0a, .b = 0xd576ed80, .c = 0xefe08000}, + {.a = 0xde980d0b, .b = 0x66b57f80, .c = 0xebd48000}, + {.a = 0xb5ff0d0c, .b = 0x6d257f80, .c = 0xf7d58000}, + {.a = 0x93b10d0d, .b = 0xd7f76f80, .c = 0x7b558000}, + {.a = 0xc5120d0e, .b = 0xcd74f780, .c = 0xefd58000}, + {.a = 0xc6410d0f, .b = 0x5dd67680, .c = 0xefd70000}, + {.a = 0xea9d0d10, .b = 0x73557780, .c = 0xefa18000}, + {.a = 0x92760d11, .b = 0xeca5bf80, .c = 0x7bd58000}, + {.a = 0x84e70d12, .b = 0x6ebd7f80, .c = 0xf7d68000}, + {.a = 0xcfaf0d13, .b = 0xca84f780, .c = 0xefeb8000}, + {.a = 0x87a10d14, .b = 0xcd575f80, .c = 0x7b958000}, + {.a = 0xb0930d15, .b = 0xa6aaf780, .c = 0xefd08000}, + {.a = 0xebd50d16, .b = 0x728d7f80, .c = 0xe7f78000}, + {.a = 0xfc7e0d17, .b = 0x252d7f80, .c = 0xeff58000}, + {.a = 0x81c80d18, .b = 0xbb96de80, .c = 0xf7d50000}, + {.a = 0x96590d19, .b = 0xcd777f80, .c = 0xebd58000}, + {.a = 0xf56e0d1a, .b = 0xdd74ef80, .c = 0xefd58000}, + {.a = 0xfb150d1b, .b = 0x36f6f780, .c = 0xef558000}, + {.a = 0xe3dd0d1c, .b = 0x6a5d6f80, .c = 0xefc58000}, + {.a = 0x84050d1d, .b = 0x3156ef00, .c = 0xedd58000}, + {.a = 0xa9d30d1e, .b = 0xd5f77f80, .c = 0xe7658000}, + {.a = 0x94d90d1f, .b = 0x66e97780, .c = 0xefc50000}, + {.a = 0xa1c60d20, .b = 0x66f57780, .c = 0xf7d18000}, + {.a = 0xb2b30d21, .b = 0xeab7b780, .c = 0x77ef8000}, + {.a = 0xaa050d22, .b = 0xdc54ed80, .c = 0xef978000}, + {.a = 0xcdc20d23, .b = 0xdae57780, .c = 0x77d18000}, + {.a = 0xa36a0d24, .b = 0xceacbf80, .c = 0xf7e78000}, + {.a = 0xf0ab0d25, .b = 0xa4aaf780, .c = 0xefc08000}, + {.a = 0xaaf70d26, .b = 0xbcacf780, .c = 0xeff48000}, + {.a = 0xc8360d27, .b = 0xbadc6e80, .c = 0xefb58000}, + {.a = 0xa5ce0d28, .b = 0x4eebbf80, .c = 0xf7c70000}, + {.a = 0xf59d0d29, .b = 0x32757780, .c = 0xefd38000}, + {.a = 0xa0720d2a, .b = 0xbba45d80, .c = 0xf7d58000}, + {.a = 0xa0d60d2b, .b = 0xaaf67780, .c = 0x77558000}, + {.a = 0xca120d2c, .b = 0xbab6ef80, .c = 0xefd48000}, + {.a = 0xe75b0d2d, .b = 0xb9d56f80, .c = 0x6e968000}, + {.a = 0xd1940d2e, .b = 0x8a927780, .c = 0xefd68000}, + {.a = 0x8f060d2f, .b = 0xcd737f80, .c = 0xe7ef8000}, + {.a = 0xd2d00d30, .b = 0x3196f680, .c = 0xefed0000}, + {.a = 0xc3720d31, .b = 0x2b757780, .c = 0xf7eb8000}, + {.a = 0xcf4f0d32, .b = 0xdd62f780, .c = 0xf7d68000}, + {.a = 0xa9500d33, .b = 0xd534ed80, .c = 0xefed8000}, + {.a = 0xa8e00d34, .b = 0xad74f780, .c = 0xf7d58000}, + {.a = 0xea490d35, .b = 0xeb755d80, .c = 0x77d18000}, + {.a = 0xfecc0d36, .b = 0xb574f780, .c = 0xefd48000}, + {.a = 0xee1e0d37, .b = 0xcd34ef80, .c = 0xeed60000}, + {.a = 0xdce30d38, .b = 0x349aee80, .c = 0xefd50000}, + {.a = 0xf5040d39, .b = 0x9c1b6d80, .c = 0x6fdd8000}, + {.a = 0xdcb90d3a, .b = 0xd4b4ef80, .c = 0xefe58000}, + {.a = 0x9b4c0d3b, .b = 0x75766e80, .c = 0xefd50000}, + {.a = 0xaa8e0d3c, .b = 0xdcbcef80, .c = 0xefd58000}, + {.a = 0x89120d3d, .b = 0xddaf7780, .c = 0xefda8000}, + {.a = 0xc1fe0d3e, .b = 0x5ade7680, .c = 0xefd50000}, + {.a = 0xc08e0d3f, .b = 0x75bd7f80, .c = 0xefd50000}, + {.a = 0xc3720d40, .b = 0xbb5bb780, .c = 0x77918000}, + {.a = 0x87770d41, .b = 0xc9b4f780, .c = 0xefd68000}, + {.a = 0xcceb0d42, .b = 0x33655d80, .c = 0xf7f78000}, + {.a = 0xb5330d43, .b = 0xe6b4ef80, .c = 0xdfd78000}, + {.a = 0xf3100d44, .b = 0x9c946b80, .c = 0x6fd58000}, + {.a = 0x99840d45, .b = 0xa6aaf780, .c = 0xefd08000}, + {.a = 0xe9840d46, .b = 0x66b57f80, .c = 0xebd48000}, + {.a = 0x95370d47, .b = 0xdd656f80, .c = 0xeec18000}, + {.a = 0xcb840d48, .b = 0x66ad7780, .c = 0xf7dc8000}, + {.a = 0x8b7b0d49, .b = 0xbb5edf80, .c = 0xf7ca8000}, + {.a = 0xd4ad0d4a, .b = 0xb6b4f780, .c = 0xefd58000}, + {.a = 0x83560d4b, .b = 0x73766e80, .c = 0xefd58000}, + {.a = 0xff220d4c, .b = 0xc56cff80, .c = 0xf3ff8000}, + {.a = 0xf1050d4d, .b = 0xdcb4df80, .c = 0xf7d58000}, + {.a = 0xb1eb0d4e, .b = 0x236f7380, .c = 0xefd70000}, + {.a = 0xb98c0d4f, .b = 0xbcaaef80, .c = 0xeff48000}, + {.a = 0x98df0d50, .b = 0xbb64df80, .c = 0xf7cd8000}, + {.a = 0xe09d0d51, .b = 0x3d56ef80, .c = 0xefbd8000}, + {.a = 0x99460d52, .b = 0x22957780, .c = 0xefd28000}, + {.a = 0xdbc00d53, .b = 0xda5d7780, .c = 0x77b58000}, + {.a = 0xbcf70d54, .b = 0xea7d7700, .c = 0x77d58000}, + {.a = 0x99580d55, .b = 0x335d5f80, .c = 0xf7d58000}, + {.a = 0xc8490d56, .b = 0xcb6f7780, .c = 0xefc58000}, + {.a = 0xbf260d57, .b = 0x9ded7780, .c = 0x77d98000}, + {.a = 0x81a70d58, .b = 0x36b57780, .c = 0xefd08000}, + {.a = 0xe1120d59, .b = 0x6eb97780, .c = 0xf7d58000}, + {.a = 0xee310d5a, .b = 0xdcab7780, .c = 0xefc18000}, + {.a = 0xe3550d5b, .b = 0x76557700, .c = 0xefcf8000}, + {.a = 0x8fcb0d5c, .b = 0x9d946f80, .c = 0x6fd68000}, + {.a = 0xab800d5d, .b = 0x2ab57780, .c = 0xf7da8000}, + {.a = 0xdd6c0d5e, .b = 0xd36ced80, .c = 0xeff48000}, + {.a = 0x9c5b0d5f, .b = 0xccb37f80, .c = 0xe7e70000}, + {.a = 0xeefd0d60, .b = 0x64ad7780, .c = 0xf7dc8000}, + {.a = 0xa90e0d61, .b = 0x73757f80, .c = 0xe7e58000}, + {.a = 0xa7320d62, .b = 0x3532ff80, .c = 0xebd50000}, + {.a = 0xdda50d63, .b = 0x26eaf680, .c = 0xefef0000}, + {.a = 0xd5740d64, .b = 0xedff7f00, .c = 0x77d58000}, + {.a = 0xd0100d65, .b = 0xba8cef00, .c = 0xefd78000}, + {.a = 0xdc260d66, .b = 0xcef75f80, .c = 0x7bd58000}, + {.a = 0xc24d0d67, .b = 0x26a57780, .c = 0xf7ca8000}, + {.a = 0xa43e0d68, .b = 0x25657780, .c = 0xf7cb8000}, + {.a = 0x97510d69, .b = 0xb6bcf780, .c = 0xdfe98000}, + {.a = 0xf54c0d6a, .b = 0xccb57780, .c = 0xefec0000}, + {.a = 0xf91b0d6b, .b = 0x73517f80, .c = 0xe7e50000}, + {.a = 0xacef0d6c, .b = 0xd7776f80, .c = 0x7bad8000}, + {.a = 0xf9ed0d6d, .b = 0x3676f780, .c = 0xefd50000}, + {.a = 0x9a5f0d6e, .b = 0xb756f780, .c = 0xefe58000}, + {.a = 0xc01b0d6f, .b = 0xeb735d80, .c = 0x77d48000}, + {.a = 0xd9eb0d70, .b = 0xdddcdf80, .c = 0xf7570000}, + {.a = 0xe4a00d71, .b = 0x5b7dbf80, .c = 0xeff58000}, + {.a = 0xbdc10d72, .b = 0xadd77780, .c = 0x77ea0000}, + {.a = 0xa3980d73, .b = 0x2ab6ee80, .c = 0xefd50000}, + {.a = 0xbe020d74, .b = 0xbdf55f80, .c = 0x77570000}, + {.a = 0x89830d75, .b = 0xcaacff80, .c = 0xe7f58000}, + {.a = 0xbb8e0d76, .b = 0x2adb6e80, .c = 0xefa78000}, + {.a = 0x990f0d77, .b = 0x32b77780, .c = 0xefd58000}, + {.a = 0xcba60d78, .b = 0xbbe6de80, .c = 0xf7d50000}, + {.a = 0xc0050d79, .b = 0x75517f80, .c = 0xefb58000}, + {.a = 0xb7130d7a, .b = 0x32c57780, .c = 0xefa78000}, + {.a = 0xb5840d7b, .b = 0xee735f00, .c = 0x77d68000}, + {.a = 0xf56c0d7c, .b = 0xdb44ef80, .c = 0xef958000}, + {.a = 0xfd4f0d7d, .b = 0x3cd55f00, .c = 0xf7d78000}, + {.a = 0xc8060d7e, .b = 0x66ed7f80, .c = 0xebc40000}, + {.a = 0xc55b0d7f, .b = 0x9cb25b80, .c = 0xf7e68000}, + {.a = 0xe9af0d80, .b = 0x76ad3f80, .c = 0xbbd58000}, + {.a = 0xcddf0d81, .b = 0xe234df80, .c = 0xdbb58000}, + {.a = 0xd9c90d82, .b = 0x2a756f80, .c = 0xeed58000}, + {.a = 0xce700d83, .b = 0x99d47700, .c = 0xefd68000}, + {.a = 0xc51d0d84, .b = 0x35ccef00, .c = 0xefd78000}, + {.a = 0x96ec0d85, .b = 0x65777f80, .c = 0xebd38000}, + {.a = 0xb6300d86, .b = 0xdabcf780, .c = 0xefe50000}, + {.a = 0xcbad0d87, .b = 0x9cb26d80, .c = 0xefd68000}, + {.a = 0xb51a0d88, .b = 0xddbcef80, .c = 0xefd68000}, + {.a = 0xa9210d89, .b = 0xbca5b780, .c = 0xefd48000}, + {.a = 0x9d8d0d8a, .b = 0xbaac6e80, .c = 0xefc58000}, + {.a = 0xa7c30d8b, .b = 0xbb54dd80, .c = 0xf7d78000}, + {.a = 0x8e410d8c, .b = 0xdd577f80, .c = 0xebd58000}, + {.a = 0xd8a50d8d, .b = 0xda6f7780, .c = 0xf7ff8000}, + {.a = 0xeb2d0d8e, .b = 0xb6f6f780, .c = 0xefd48000}, + {.a = 0xd93f0d8f, .b = 0x32b6f780, .c = 0xefed0000}, + {.a = 0xd9da0d90, .b = 0x6d737f80, .c = 0xf7d78000}, + {.a = 0xbea70d91, .b = 0xb696f780, .c = 0xefe48000}, + {.a = 0x9cdf0d92, .b = 0x66b77780, .c = 0xf7ed0000}, + {.a = 0xbd3a0d93, .b = 0xdd6f7780, .c = 0xefc58000}, + {.a = 0xeae00d94, .b = 0x26aaff80, .c = 0xebff8000}, + {.a = 0x8eae0d95, .b = 0x2ab4ef80, .c = 0xeee68000}, + {.a = 0xcb340d96, .b = 0x73737d80, .c = 0xf7d78000}, + {.a = 0xfdb80d97, .b = 0xa66e7780, .c = 0xefcb0000}, + {.a = 0xa98e0d98, .b = 0xdab2f780, .c = 0xf7ee8000}, + {.a = 0xa58a0d99, .b = 0x9d72b780, .c = 0xf7d50000}, + {.a = 0xf90a0d9a, .b = 0xdb757f80, .c = 0xf7d68000}, + {.a = 0xeba10d9b, .b = 0xb376df80, .c = 0xf7f38000}, + {.a = 0xe1740d9c, .b = 0xa6a8f780, .c = 0xefc58000}, + {.a = 0xca1f0d9d, .b = 0xb6ad5f80, .c = 0x7bc70000}, + {.a = 0x86470d9e, .b = 0x36797780, .c = 0xefd38000}, + {.a = 0xa8660d9f, .b = 0xd9657700, .c = 0xefd58000}, + {.a = 0x81ad0da0, .b = 0xd6b4f780, .c = 0xefd58000}, + {.a = 0xa8520da1, .b = 0xc5a4ef80, .c = 0xeec70000}, + {.a = 0xa2700da2, .b = 0x9b555d80, .c = 0x77d50000}, + {.a = 0xd0050da3, .b = 0x65ab7780, .c = 0xefef8000}, + {.a = 0xfc180da4, .b = 0xf36c6d80, .c = 0x6fd58000}, + {.a = 0xf5a30da5, .b = 0x26997780, .c = 0xefd68000}, + {.a = 0x9f160da6, .b = 0xe76f6f80, .c = 0x7bf58000}, + {.a = 0xf86a0da7, .b = 0xdd64ef80, .c = 0xefb78000}, + {.a = 0xb8db0da8, .b = 0x3a6eee80, .c = 0xdfd50000}, + {.a = 0xf8a80da9, .b = 0xaabeef80, .c = 0xefed8000}, + {.a = 0xba650daa, .b = 0x76d57780, .c = 0xefe58000}, + {.a = 0x9e8a0dab, .b = 0xd3a0ed80, .c = 0xefd68000}, + {.a = 0xe11a0dac, .b = 0xd7776f80, .c = 0x6ed58000}, + {.a = 0x9f930dad, .b = 0x75766e80, .c = 0xefd70000}, + {.a = 0xbb350dae, .b = 0x35577700, .c = 0xefd78000}, + {.a = 0xd73d0daf, .b = 0xcd255f80, .c = 0x77fc8000}, + {.a = 0x93c70db0, .b = 0x8e66bf80, .c = 0x7bf58000}, + {.a = 0xb1e80db1, .b = 0xbab4df00, .c = 0xf7d48000}, + {.a = 0xce890db2, .b = 0xdd7aef80, .c = 0xefd48000}, + {.a = 0xeef70db3, .b = 0xead77700, .c = 0x77cb8000}, + {.a = 0xd1910db4, .b = 0x256d7780, .c = 0xf7dd8000}, + {.a = 0xe2010db5, .b = 0x9ae47700, .c = 0x77d58000}, + {.a = 0xedd30db6, .b = 0x7aa66d80, .c = 0xefd58000}, + {.a = 0xe4130db7, .b = 0x721c7700, .c = 0xefd78000}, + {.a = 0xaa240db8, .b = 0x3caaef80, .c = 0xef558000}, + {.a = 0xbc170db9, .b = 0x3cdaef00, .c = 0xef7d8000}, + {.a = 0x8c770dba, .b = 0x7a5e6e80, .c = 0xefc50000}, + {.a = 0xb8400dbb, .b = 0xedf25d80, .c = 0x77d58000}, + {.a = 0x91c00dbc, .b = 0xd9577780, .c = 0xefc58000}, + {.a = 0x82f40dbd, .b = 0x66b57780, .c = 0xeff78000}, + {.a = 0xbf990dbe, .b = 0x76d57780, .c = 0xefd48000}, + {.a = 0xc81b0dbf, .b = 0xe66d6f00, .c = 0x7bd58000}, + {.a = 0xf3cd0dc0, .b = 0x8d57b780, .c = 0xf7d90000}, + {.a = 0x83f10dc1, .b = 0xa6aaf780, .c = 0xefd08000}, + {.a = 0xaf230dc2, .b = 0xe66c6f80, .c = 0x7bf68000}, + {.a = 0xf5f30dc3, .b = 0xbcba6e80, .c = 0xefd78000}, + {.a = 0xa8620dc4, .b = 0x3256f780, .c = 0xefe30000}, + {.a = 0xda930dc5, .b = 0xbbb6ef80, .c = 0xeed58000}, + {.a = 0xda9b0dc6, .b = 0xbadc6e80, .c = 0xefb58000}, + {.a = 0xbcb50dc7, .b = 0x32b57780, .c = 0xefd68000}, + {.a = 0x89d90dc8, .b = 0xcd377f80, .c = 0xebef0000}, + {.a = 0xf8250dc9, .b = 0x66a57f80, .c = 0xf7f68000}, + {.a = 0xb86c0dca, .b = 0x66ad7780, .c = 0xefc78000}, + {.a = 0xea950dcb, .b = 0x5ed67680, .c = 0xefd50000}, + {.a = 0xcca70dcc, .b = 0x76bd7b80, .c = 0xefd50000}, + {.a = 0x84670dcd, .b = 0x26697780, .c = 0xefc50000}, + {.a = 0xd0370dce, .b = 0x26957780, .c = 0xefd68000}, + {.a = 0xa9ce0dcf, .b = 0x34d57f00, .c = 0xe7f58000}, + {.a = 0x81b10dd0, .b = 0xd9577780, .c = 0xefc38000}, + {.a = 0x8cdd0dd1, .b = 0x2a777780, .c = 0xf7ea8000}, + {.a = 0xa7250dd2, .b = 0x27b6f680, .c = 0xefd50000}, + {.a = 0xb9d90dd3, .b = 0x6d557f80, .c = 0xe7f58000}, + {.a = 0x86d30dd4, .b = 0x31755f80, .c = 0xf7d68000}, + {.a = 0xe1a40dd5, .b = 0x72366e80, .c = 0xefd50000}, + {.a = 0xebfa0dd6, .b = 0x62966e80, .c = 0xefdd0000}, + {.a = 0xbed60dd7, .b = 0xd4b4ef80, .c = 0xeee78000}, + {.a = 0xa9ab0dd8, .b = 0xbb96de80, .c = 0xf7d58000}, + {.a = 0xbe260dd9, .b = 0x3b64ef80, .c = 0xeec78000}, + {.a = 0xd5490dda, .b = 0xaad86e80, .c = 0xefd58000}, + {.a = 0xf1180ddb, .b = 0xbaaeef80, .c = 0xefc48000}, + {.a = 0xa76e0ddc, .b = 0xda54df00, .c = 0xf7d68000}, + {.a = 0xf2010ddd, .b = 0xdd7f7780, .c = 0xeedb8000}, + {.a = 0xb8950dde, .b = 0xce555f80, .c = 0x77958000}, + {.a = 0xb57f0ddf, .b = 0x65757780, .c = 0xefe18000}, + {.a = 0xf2910de0, .b = 0xbdd6de80, .c = 0xdbb78000}, + {.a = 0xfe030de1, .b = 0x6d257f80, .c = 0xf7f48000}, + {.a = 0x80650de2, .b = 0xcd777f80, .c = 0xe7d58000}, + {.a = 0xd3c90de3, .b = 0xbaaeee80, .c = 0xefd58000}, + {.a = 0xfd990de4, .b = 0xdaa4ef80, .c = 0xefcd8000}, + {.a = 0xa4d50de5, .b = 0x9a6f7780, .c = 0x77d50000}, + {.a = 0xabe90de6, .b = 0x72ad7780, .c = 0xefc48000}, + {.a = 0xc8c80de7, .b = 0xbcaa6e80, .c = 0xefd78000}, + {.a = 0xcdc90de8, .b = 0x66a57780, .c = 0xf7ed0000}, + {.a = 0xa5de0de9, .b = 0x25977780, .c = 0xefc28000}, + {.a = 0xa1440dea, .b = 0xbba4ef80, .c = 0xef458000}, + {.a = 0xa8fe0deb, .b = 0xd354ed80, .c = 0xeff58000}, + {.a = 0xf4c10dec, .b = 0x36aaf780, .c = 0xefc50000}, + {.a = 0xa2650ded, .b = 0xdaa4f780, .c = 0xefd58000}, + {.a = 0xdda30dee, .b = 0x76957f80, .c = 0xe7e48000}, + {.a = 0xc1b80def, .b = 0xb6b4f780, .c = 0xefc78000}, + {.a = 0x93090df0, .b = 0xe932e780, .c = 0xdfed8000}, + {.a = 0x83d80df1, .b = 0x3a76ee80, .c = 0xefd50000}, + {.a = 0xb1190df2, .b = 0x26ad7f80, .c = 0xefd68000}, + {.a = 0xd9820df3, .b = 0x75757780, .c = 0xefd48000}, + {.a = 0x9ae10df4, .b = 0x58f67680, .c = 0xefc58000}, + {.a = 0x88170df5, .b = 0xb55c7780, .c = 0xefcb8000}, + {.a = 0xe4e90df6, .b = 0x6d777f80, .c = 0xe7fb8000}, + {.a = 0xcbbc0df7, .b = 0x31d6f680, .c = 0xeff70000}, + {.a = 0x8fd80df8, .b = 0x2ab77780, .c = 0xf7eb0000}, + {.a = 0xf2f70df9, .b = 0x65ae7780, .c = 0xefcb8000}, + {.a = 0xc1480dfa, .b = 0x996f7780, .c = 0x77cf8000}, + {.a = 0xd6860dfb, .b = 0xd57aef80, .c = 0xeff18000}, + {.a = 0xb9740dfc, .b = 0x2ab57780, .c = 0xf7da8000}, + {.a = 0x93450dfd, .b = 0xbbd4df80, .c = 0xf7958000}, + {.a = 0xde750dfe, .b = 0xbcd55b80, .c = 0x77570000}, + {.a = 0xb8ac0dff, .b = 0xb25c7780, .c = 0xefba8000}, + {.a = 0xf89a0e00, .b = 0xd95b7f80, .c = 0xefd58000}, + {.a = 0xdaf40e01, .b = 0xedb5bf80, .c = 0x7bd58000}, + {.a = 0xf2cd0e02, .b = 0x31f2be80, .c = 0xf7d58000}, + {.a = 0xc7850e03, .b = 0xb694f780, .c = 0xefc48000}, + {.a = 0xd11e0e04, .b = 0xcd64df80, .c = 0xf7d48000}, + {.a = 0xa46d0e05, .b = 0x9d675d80, .c = 0x77f58000}, + {.a = 0x9e670e06, .b = 0xdaa4ef80, .c = 0xefc58000}, + {.a = 0xcd090e07, .b = 0x29657f80, .c = 0xe7d78000}, + {.a = 0xa62d0e08, .b = 0xdaf4f700, .c = 0xf7d78000}, + {.a = 0x9c140e09, .b = 0xbaaeef80, .c = 0xefc48000}, + {.a = 0xa7300e0a, .b = 0x238eee80, .c = 0xefd50000}, + {.a = 0xf3b40e0b, .b = 0x36f6f780, .c = 0xef558000}, + {.a = 0xe2020e0c, .b = 0x75477780, .c = 0xefe38000}, + {.a = 0xfd6a0e0d, .b = 0xcf557780, .c = 0xeddd8000}, + {.a = 0xa0810e0e, .b = 0x3376ef80, .c = 0xeee58000}, + {.a = 0xa10c0e0f, .b = 0xc9777780, .c = 0xefe58000}, + {.a = 0xb3540e10, .b = 0xced3b780, .c = 0x77cf8000}, + {.a = 0xfe2e0e11, .b = 0x728d7f80, .c = 0xe7f78000}, + {.a = 0x8e300e12, .b = 0x9d726e80, .c = 0xefd70000}, + {.a = 0xa4510e13, .b = 0xb96cd780, .c = 0xf7f58000}, + {.a = 0xb97e0e14, .b = 0x5ad67680, .c = 0xefd50000}, + {.a = 0xfa1f0e15, .b = 0xc4a8ff80, .c = 0xf3fd0000}, + {.a = 0xc79e0e16, .b = 0x74766e80, .c = 0xefd58000}, + {.a = 0xfe2a0e17, .b = 0xd3377f80, .c = 0xe7d58000}, + {.a = 0x88cb0e18, .b = 0xdde4de80, .c = 0xf7cd8000}, + {.a = 0xb9880e19, .b = 0x6eedbb80, .c = 0xf7c50000}, + {.a = 0xde000e1a, .b = 0xd2b4ef80, .c = 0xeff30000}, + {.a = 0xed0a0e1b, .b = 0xce6d7f80, .c = 0xebcf8000}, + {.a = 0xe1eb0e1c, .b = 0xce657780, .c = 0xedd58000}, + {.a = 0xeafb0e1d, .b = 0x36d6f700, .c = 0xefd68000}, + {.a = 0xfbb90e1e, .b = 0xcdbd7f80, .c = 0xebec8000}, + {.a = 0xc4950e1f, .b = 0xcc757780, .c = 0xefdc8000}, + {.a = 0xd0530e20, .b = 0xd9577780, .c = 0xefc50000}, + {.a = 0xcf180e21, .b = 0xb576df80, .c = 0xf7d58000}, + {.a = 0x89280e22, .b = 0x36b77780, .c = 0xefe58000}, + {.a = 0xd03f0e23, .b = 0xd7b56f80, .c = 0x6ed78000}, + {.a = 0xa8a20e24, .b = 0xaaaaf780, .c = 0xe7f08000}, + {.a = 0xf90c0e25, .b = 0xa574f780, .c = 0xefed8000}, + {.a = 0xbd9c0e26, .b = 0xc976f780, .c = 0xefd58000}, + {.a = 0xadd50e27, .b = 0x2a756f80, .c = 0xeed48000}, + {.a = 0xc5c20e28, .b = 0xad76f780, .c = 0xf7df8000}, + {.a = 0xea2b0e29, .b = 0xbaaeef80, .c = 0xefc48000}, + {.a = 0xa3f90e2a, .b = 0x369ef780, .c = 0xef4d8000}, + {.a = 0xa2ee0e2b, .b = 0xb974e780, .c = 0xeff58000}, + {.a = 0xc5090e2c, .b = 0x65357780, .c = 0xf7e88000}, + {.a = 0xcad20e2d, .b = 0xdd557780, .c = 0xefd48000}, + {.a = 0xb1730e2e, .b = 0xae70f700, .c = 0xf7dd8000}, + {.a = 0xee9e0e2f, .b = 0x6d557f00, .c = 0xf7ec8000}, + {.a = 0xa70c0e30, .b = 0x25557780, .c = 0xefef8000}, + {.a = 0xd4e20e31, .b = 0xab56f700, .c = 0xf7ea8000}, + {.a = 0xc0e20e32, .b = 0xab74ef80, .c = 0xefe18000}, + {.a = 0xba4d0e33, .b = 0x666a7680, .c = 0xefed0000}, + {.a = 0x87160e34, .b = 0x725a6f80, .c = 0xefd58000}, + {.a = 0xaf5f0e35, .b = 0xed7d6f00, .c = 0x7bd78000}, + {.a = 0xa9690e36, .b = 0x3336f680, .c = 0xefe50000}, + {.a = 0x8d8d0e37, .b = 0xb36d7780, .c = 0x6ec78000}, + {.a = 0xc0c80e38, .b = 0xad4ef780, .c = 0xdf9b8000}, + {.a = 0xfeee0e39, .b = 0xd55d7780, .c = 0xf7fd8000}, + {.a = 0xab110e3a, .b = 0xad757780, .c = 0x77d58000}, + {.a = 0x9e1b0e3b, .b = 0xb6f6f780, .c = 0xef558000}, + {.a = 0xbb410e3c, .b = 0xdb657f80, .c = 0x77d58000}, + {.a = 0x82a00e3d, .b = 0x9cad5f80, .c = 0x7bd58000}, + {.a = 0xf8e40e3e, .b = 0xdb737f80, .c = 0xf7d58000}, + {.a = 0x98210e3f, .b = 0xd376ef80, .c = 0xeef58000}, + {.a = 0xc9730e40, .b = 0x3ad53f80, .c = 0xf7558000}, + {.a = 0xd17a0e41, .b = 0xed57bf80, .c = 0x77d50000}, + {.a = 0xf68b0e42, .b = 0x6a957f80, .c = 0xe7e58000}, + {.a = 0x89c90e43, .b = 0xc9d77780, .c = 0xef550000}, + {.a = 0xa5b00e44, .b = 0xcd737f80, .c = 0xe7e60000}, + {.a = 0xad590e45, .b = 0xbbc46d80, .c = 0xef968000}, + {.a = 0xea0d0e46, .b = 0x76d57780, .c = 0xefd48000}, + {.a = 0xaf2f0e47, .b = 0x9b757780, .c = 0x77d78000}, + {.a = 0xd11c0e48, .b = 0xd574f780, .c = 0xf7ed8000}, + {.a = 0xf3600e49, .b = 0x6d957f80, .c = 0xe7f58000}, + {.a = 0xf8790e4a, .b = 0x356b7780, .c = 0xefe38000}, + {.a = 0x9bcc0e4b, .b = 0xa56d7780, .c = 0x77db8000}, + {.a = 0xbfb90e4c, .b = 0xa6a8f780, .c = 0xefd58000}, + {.a = 0x81f70e4d, .b = 0xb2aedf80, .c = 0xf7cf0000}, + {.a = 0xfb1f0e4e, .b = 0x36d6f700, .c = 0xefd58000}, + {.a = 0xd7fb0e4f, .b = 0xca64f700, .c = 0xefd68000}, + {.a = 0xca750e50, .b = 0xbb5eef80, .c = 0xeec58000}, + {.a = 0xf4930e51, .b = 0x31555b00, .c = 0xf7d58000}, + {.a = 0xadff0e52, .b = 0x36d77700, .c = 0xefdb8000}, + {.a = 0xf1430e53, .b = 0x3362f780, .c = 0xeef98000}, + {.a = 0x986c0e54, .b = 0xd294ef80, .c = 0xefd78000}, + {.a = 0xc92b0e55, .b = 0xd2b4ef80, .c = 0xefd50000}, + {.a = 0xe6920e56, .b = 0xbaa4ef80, .c = 0xefc58000}, + {.a = 0xf47a0e57, .b = 0x32b77780, .c = 0xefd70000}, + {.a = 0xcad00e58, .b = 0xdceb7700, .c = 0xefd28000}, + {.a = 0xeb690e59, .b = 0x734d7f80, .c = 0xe7e58000}, + {.a = 0x987e0e5a, .b = 0x99ac7780, .c = 0xf7df8000}, + {.a = 0xd7e00e5b, .b = 0xa6b4f780, .c = 0xefc78000}, + {.a = 0xde1b0e5c, .b = 0x9d656f80, .c = 0x7bf50000}, + {.a = 0x99250e5d, .b = 0x33757f80, .c = 0xe7db8000}, + {.a = 0x81e00e5e, .b = 0xd6356f80, .c = 0x6f958000}, + {.a = 0xd5930e5f, .b = 0x4cf67680, .c = 0xefd58000}, + {.a = 0xf3a80e60, .b = 0x266ef680, .c = 0xefef8000}, + {.a = 0xbcca0e61, .b = 0xcd7d7780, .c = 0xefab8000}, + {.a = 0x9b010e62, .b = 0x4df5bf80, .c = 0xf7678000}, + {.a = 0xd6df0e63, .b = 0x6d757f80, .c = 0xe7e58000}, + {.a = 0x86060e64, .b = 0xd36b7f00, .c = 0xe7d58000}, + {.a = 0xaa590e65, .b = 0xd6776f80, .c = 0x7bef8000}, + {.a = 0xc62a0e66, .b = 0x6aa57f80, .c = 0xf3d58000}, + {.a = 0xbdf30e67, .b = 0x8a547700, .c = 0xefd68000}, + {.a = 0x9c7d0e68, .b = 0x226ef680, .c = 0xeff58000}, + {.a = 0xe66b0e69, .b = 0xba96df80, .c = 0xf7d58000}, + {.a = 0xdfa10e6a, .b = 0xdeed7780, .c = 0xefce8000}, + {.a = 0xefc20e6b, .b = 0xdd54f780, .c = 0xf7f30000}, + {.a = 0xe1270e6c, .b = 0x26af7b80, .c = 0xf7c68000}, + {.a = 0xd2950e6d, .b = 0x36b6f780, .c = 0xefd50000}, + {.a = 0xb9340e6e, .b = 0xad627780, .c = 0x77c98000}, + {.a = 0xd9340e6f, .b = 0xdd876f80, .c = 0xeed28000}, + {.a = 0xcfb90e70, .b = 0x6d657f80, .c = 0xf7d48000}, + {.a = 0xf0640e71, .b = 0x3da6df80, .c = 0xf7d58000}, + {.a = 0x96a50e72, .b = 0xbabc6d80, .c = 0xef958000}, + {.a = 0xcd860e73, .b = 0xdd9cef80, .c = 0xeed78000}, + {.a = 0xc7be0e74, .b = 0x3236f680, .c = 0xefe50000}, + {.a = 0xb0ce0e75, .b = 0x656b7f80, .c = 0xeff78000}, + {.a = 0x910a0e76, .b = 0x24ad7b80, .c = 0xeff58000}, + {.a = 0x83c60e77, .b = 0xdddf7780, .c = 0x6ed58000}, + {.a = 0xcb530e78, .b = 0xd964bf80, .c = 0xebd58000}, + {.a = 0xa4bd0e79, .b = 0xcdaf7f80, .c = 0xe7d48000}, + {.a = 0xcfec0e7a, .b = 0xddd4df80, .c = 0xf6d70000}, + {.a = 0xc1d10e7b, .b = 0x26a77780, .c = 0xf7df8000}, + {.a = 0xe78a0e7c, .b = 0x32b57780, .c = 0xefd08000}, + {.a = 0xc3c20e7d, .b = 0xdcf37780, .c = 0xef690000}, + {.a = 0xebef0e7e, .b = 0xd354ed80, .c = 0xefe58000}, + {.a = 0xdb780e7f, .b = 0xcaa4f780, .c = 0xf7eb0000}, + {.a = 0x92710e80, .b = 0xdddcdf80, .c = 0xf7458000}, + {.a = 0xd6640e81, .b = 0x6ea57f80, .c = 0xf7db8000}, + {.a = 0xf6a60e82, .b = 0x76d57780, .c = 0xefd50000}, + {.a = 0xcc8c0e83, .b = 0x2ea76f80, .c = 0xedd78000}, + {.a = 0xf8a90e84, .b = 0x3596ff80, .c = 0xeb758000}, + {.a = 0xe5e00e85, .b = 0x9dec7780, .c = 0xf7db8000}, + {.a = 0xa9560e86, .b = 0xe76d6f00, .c = 0x7bd58000}, + {.a = 0xc4ff0e87, .b = 0xaefb7700, .c = 0x77d78000}, + {.a = 0x8ea30e88, .b = 0x25757780, .c = 0xf7d78000}, + {.a = 0xb9710e89, .b = 0x656d7f80, .c = 0xefd50000}, + {.a = 0xa3c10e8a, .b = 0x73555f00, .c = 0xf7d58000}, + {.a = 0x91010e8b, .b = 0x2354ef80, .c = 0xed9b8000}, + {.a = 0xe3e20e8c, .b = 0xa668f780, .c = 0xefef8000}, + {.a = 0xdbe50e8d, .b = 0xdba6ef80, .c = 0xeecf8000}, + {.a = 0xc9c70e8e, .b = 0xccad7f80, .c = 0xebda8000}, + {.a = 0xdbd20e8f, .b = 0xde556f80, .c = 0xefd58000}, + {.a = 0xcba20e90, .b = 0x269efe80, .c = 0xebf50000}, + {.a = 0xc7d70e91, .b = 0x359aef80, .c = 0xef558000}, + {.a = 0xa0d80e92, .b = 0xe56d7700, .c = 0x77d58000}, + {.a = 0xe7a30e93, .b = 0xb2da6f00, .c = 0xefd78000}, + {.a = 0xb1540e94, .b = 0x66b57780, .c = 0xefe78000}, + {.a = 0xc5750e95, .b = 0x72557780, .c = 0xefe58000}, + {.a = 0xa99a0e96, .b = 0xadf56f80, .c = 0x7bd58000}, + {.a = 0xa1a70e97, .b = 0xdd757780, .c = 0xf7d78000}, + {.a = 0xe1460e98, .b = 0xdd74f700, .c = 0xf7d68000}, + {.a = 0xbab10e99, .b = 0xcdecaf80, .c = 0x7b8a8000}, + {.a = 0xa3730e9a, .b = 0xc9577780, .c = 0xefc58000}, + {.a = 0x87890e9b, .b = 0xba54df80, .c = 0xf7d38000}, + {.a = 0x98480e9c, .b = 0xd6a2ef80, .c = 0xfb6f8000}, + {.a = 0x8bc70e9d, .b = 0xa668f780, .c = 0xefc58000}, + {.a = 0xc99b0e9e, .b = 0xc6fd7f80, .c = 0xeba68000}, + {.a = 0xf6b50e9f, .b = 0xdb7af700, .c = 0xf7d28000}, + {.a = 0x9ff30ea0, .b = 0xbd72ef80, .c = 0xefd78000}, + {.a = 0xafbe0ea1, .b = 0x2cad7f80, .c = 0xe7f58000}, + {.a = 0xa4ad0ea2, .b = 0x9d7e6b80, .c = 0x6fdb8000}, + {.a = 0xc9740ea3, .b = 0xdd6f7780, .c = 0xefc58000}, + {.a = 0xd3a50ea4, .b = 0xc9577780, .c = 0xefc68000}, + {.a = 0x99cf0ea5, .b = 0x959c6e80, .c = 0xefd70000}, + {.a = 0xed490ea6, .b = 0xbad6ef00, .c = 0xdfd48000}, + {.a = 0xcedb0ea7, .b = 0xad74f780, .c = 0xf7d58000}, + {.a = 0xcd700ea8, .b = 0x2224f700, .c = 0xefd78000}, + {.a = 0x95b80ea9, .b = 0x6d737f80, .c = 0xf7d68000}, + {.a = 0xf1110eaa, .b = 0xaafc7700, .c = 0xf7d68000}, + {.a = 0xdf900eab, .b = 0x25157780, .c = 0xefc50000}, + {.a = 0x97ea0eac, .b = 0x656f7780, .c = 0xefef8000}, + {.a = 0xe6a70ead, .b = 0xb26c6f80, .c = 0xeffe8000}, + {.a = 0xb56e0eae, .b = 0x76d57780, .c = 0xefc48000}, + {.a = 0xb6a00eaf, .b = 0xddd4ef80, .c = 0xef958000}, + {.a = 0xbb5c0eb0, .b = 0x6d75bf80, .c = 0xf7b38000}, + {.a = 0xa3de0eb1, .b = 0x3dd55e80, .c = 0xf7f58000}, + {.a = 0xf1ac0eb2, .b = 0xa6acf780, .c = 0xefc78000}, + {.a = 0xb7e40eb3, .b = 0x76b57b80, .c = 0xefec0000}, + {.a = 0xf1c70eb4, .b = 0x77457780, .c = 0xefe58000}, + {.a = 0xfebf0eb5, .b = 0xcb6f7f80, .c = 0xe7d58000}, + {.a = 0xbef10eb6, .b = 0xda6f7780, .c = 0xefc58000}, + {.a = 0xa1500eb7, .b = 0xbd54f780, .c = 0xeff58000}, + {.a = 0x8f210eb8, .b = 0x67b57b80, .c = 0xf7e58000}, + {.a = 0xc3c80eb9, .b = 0xaac86e80, .c = 0xefd58000}, + {.a = 0xf5ff0eba, .b = 0x26a57780, .c = 0xefd78000}, + {.a = 0xfea30ebb, .b = 0x32b4ee80, .c = 0xefd50000}, + {.a = 0xe32c0ebc, .b = 0xad7d7780, .c = 0x77d18000}, + {.a = 0xe5d90ebd, .b = 0xade57780, .c = 0x77c90000}, + {.a = 0xa35c0ebe, .b = 0xbb52df00, .c = 0xf7d68000}, + {.a = 0xac170ebf, .b = 0x26957780, .c = 0xefc28000}, + {.a = 0xc8400ec0, .b = 0xbbaaef80, .c = 0xeecb8000}, + {.a = 0xe1110ec1, .b = 0xa742ff80, .c = 0xebe98000}, + {.a = 0xd87b0ec2, .b = 0x3354ef00, .c = 0xedd78000}, + {.a = 0x837d0ec3, .b = 0x66b57780, .c = 0xf7ee8000}, + {.a = 0xa9800ec4, .b = 0x6abdb780, .c = 0xf7d78000}, + {.a = 0xe6fd0ec5, .b = 0x36bd7780, .c = 0xefee8000}, + {.a = 0xbfce0ec6, .b = 0xb9f36f80, .c = 0x6f550000}, + {.a = 0xa4fd0ec7, .b = 0xd7976f80, .c = 0x6ee58000}, + {.a = 0xf6050ec8, .b = 0x255ef780, .c = 0xef958000}, + {.a = 0x8d230ec9, .b = 0xd5557780, .c = 0xf7fd8000}, + {.a = 0xcf870eca, .b = 0xd9d77780, .c = 0x774d8000}, + {.a = 0x8b640ecb, .b = 0xd2b77f80, .c = 0xe7d68000}, + {.a = 0x87b10ecc, .b = 0x32fcf700, .c = 0xefdb8000}, + {.a = 0xa93f0ecd, .b = 0x64ab7780, .c = 0xf7d38000}, + {.a = 0xc7df0ece, .b = 0xb6f4f780, .c = 0xefd48000}, + {.a = 0x90aa0ecf, .b = 0xcd76dd80, .c = 0xf7f28000}, + {.a = 0xc4940ed0, .b = 0xcd6cbf80, .c = 0xf7c68000}, + {.a = 0x9ce20ed1, .b = 0xa954e780, .c = 0xefed8000}, + {.a = 0xe5cb0ed2, .b = 0xb6b4f780, .c = 0xefd48000}, + {.a = 0xb29f0ed3, .b = 0x67357780, .c = 0xefe18000}, + {.a = 0xa2f60ed4, .b = 0xcd74df80, .c = 0xfbd58000}, + {.a = 0xc1a30ed5, .b = 0xb26c7780, .c = 0xefda8000}, + {.a = 0xdc450ed6, .b = 0x4d6a7f80, .c = 0xebcf0000}, + {.a = 0xb1000ed7, .b = 0x32b77780, .c = 0xefe58000}, + {.a = 0xf21c0ed8, .b = 0x66657f80, .c = 0xebd58000}, + {.a = 0xf93a0ed9, .b = 0x2aa37780, .c = 0xf7cb8000}, + {.a = 0x85d90eda, .b = 0xab747700, .c = 0xf7df8000}, + {.a = 0x938b0edb, .b = 0xd96f7f80, .c = 0xf7d68000}, + {.a = 0xd1190edc, .b = 0x4da47f80, .c = 0xebd58000}, + {.a = 0x9fb00edd, .b = 0xbbb45e80, .c = 0xf7d50000}, + {.a = 0xbaa40ede, .b = 0xa6aaf780, .c = 0xefee8000}, + {.a = 0x983d0edf, .b = 0xb4a4f780, .c = 0xefd78000}, + {.a = 0x81ea0ee0, .b = 0xeca5bf80, .c = 0x77f58000}, + {.a = 0xe4910ee1, .b = 0xddd77700, .c = 0xefd58000}, + {.a = 0x80840ee2, .b = 0xdde67780, .c = 0x77558000}, + {.a = 0xc32b0ee3, .b = 0xdd74f780, .c = 0xf7d78000}, + {.a = 0xb9850ee4, .b = 0xccef7f80, .c = 0xebf48000}, + {.a = 0xd9c30ee5, .b = 0x72b57780, .c = 0xefd50000}, + {.a = 0xc9a10ee6, .b = 0x66857780, .c = 0xefe58000}, + {.a = 0x80470ee7, .b = 0xbdf55f80, .c = 0x77e50000}, + {.a = 0xde400ee8, .b = 0xdd64f780, .c = 0xf7d38000}, + {.a = 0xbe310ee9, .b = 0xb8d35d00, .c = 0x77f68000}, + {.a = 0xee800eea, .b = 0x9de55f80, .c = 0x7b558000}, + {.a = 0xc6050eeb, .b = 0xdd6f7700, .c = 0xefd78000}, + {.a = 0xc5790eec, .b = 0x9b7d7b80, .c = 0x77e50000}, + {.a = 0xffc20eed, .b = 0x657c7780, .c = 0xefcb8000}, + {.a = 0xf4d70eee, .b = 0x25557780, .c = 0xefd78000}, + {.a = 0xbf050eef, .b = 0x72b67780, .c = 0xefe68000}, + {.a = 0xbcc40ef0, .b = 0x76fd7f80, .c = 0xefd68000}, + {.a = 0xbf900ef1, .b = 0xcd737f80, .c = 0xe7d58000}, + {.a = 0x8cd40ef2, .b = 0x2b735f00, .c = 0xf7d78000}, + {.a = 0xc2460ef3, .b = 0x72755f80, .c = 0xf7550000}, + {.a = 0xb5ca0ef4, .b = 0xbae4df80, .c = 0xf7578000}, + {.a = 0x95b70ef5, .b = 0xe9d35d80, .c = 0x77d38000}, + {.a = 0xf0070ef6, .b = 0xbae6df80, .c = 0xf7d58000}, + {.a = 0x83c90ef7, .b = 0x9c7c6e80, .c = 0xefd70000}, + {.a = 0xd2710ef8, .b = 0x2a6f7780, .c = 0xf7d78000}, + {.a = 0x97550ef9, .b = 0xdd76f780, .c = 0xefff8000}, + {.a = 0xf37a0efa, .b = 0x256d7780, .c = 0xf7ca8000}, + {.a = 0x87e70efb, .b = 0x757b7f80, .c = 0xeff78000}, + {.a = 0xd6e90efc, .b = 0xddad7780, .c = 0xefdd8000}, + {.a = 0xc9950efd, .b = 0xe7575f80, .c = 0x7bd58000}, + {.a = 0xe3050efe, .b = 0x3c62ee80, .c = 0xefd50000}, + {.a = 0xc8570eff, .b = 0x32b77780, .c = 0xefe58000}, + {.a = 0xa0780f00, .b = 0x336d5f80, .c = 0xf5f58000}, + {.a = 0xc3b60f01, .b = 0x2c3aee80, .c = 0xefd58000}, + {.a = 0xe0010f02, .b = 0x22ad7780, .c = 0xefd68000}, + {.a = 0xd8e30f03, .b = 0x3ba2ef80, .c = 0xeed58000}, + {.a = 0xa79d0f04, .b = 0xcd777f80, .c = 0xe7d58000}, + {.a = 0x8bf90f05, .b = 0xb6aef780, .c = 0xefc48000}, + {.a = 0x8e6f0f06, .b = 0x65f67680, .c = 0xefc78000}, + {.a = 0xbccb0f07, .b = 0x26997780, .c = 0xefca8000}, + {.a = 0xb8520f08, .b = 0xba96ef80, .c = 0xefd48000}, + {.a = 0xc76a0f09, .b = 0x9b547b80, .c = 0xf7f58000}, + {.a = 0xeee40f0a, .b = 0xa76b6f00, .c = 0x7bd18000}, + {.a = 0xe3be0f0b, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0x92a30f0c, .b = 0x6a956f80, .c = 0xefd58000}, + {.a = 0xbb310f0d, .b = 0xaabd7780, .c = 0x77db8000}, + {.a = 0xe42c0f0e, .b = 0xcd637f80, .c = 0xebc98000}, + {.a = 0x93b60f0f, .b = 0x76ca7e80, .c = 0xefe90000}, + {.a = 0xb8510f10, .b = 0xed74ee80, .c = 0xdfd58000}, + {.a = 0xbbf10f11, .b = 0x79556f80, .c = 0xefd58000}, + {.a = 0xb0360f12, .b = 0xd5b4ed80, .c = 0xefe48000}, + {.a = 0xaa520f13, .b = 0xe6dd6f00, .c = 0x7bd78000}, + {.a = 0xc1780f14, .b = 0x3ba4ef80, .c = 0xeecb8000}, + {.a = 0xf47d0f15, .b = 0x2234f700, .c = 0xefd78000}, + {.a = 0xab200f16, .b = 0xe6d55f00, .c = 0x7bd58000}, + {.a = 0xc25d0f17, .b = 0xedd57780, .c = 0x77a98000}, + {.a = 0xe58b0f18, .b = 0xcdb4f780, .c = 0xefe68000}, + {.a = 0xdf020f19, .b = 0x66ab7780, .c = 0xf7d58000}, + {.a = 0xa1650f1a, .b = 0xd9757f80, .c = 0xf7d68000}, + {.a = 0x84310f1b, .b = 0xba845f80, .c = 0x77578000}, + {.a = 0xf7220f1c, .b = 0x2a456f80, .c = 0xefd78000}, + {.a = 0xee970f1d, .b = 0xecf56f80, .c = 0x7b5b8000}, + {.a = 0xc3030f1e, .b = 0x76567780, .c = 0xef550000}, + {.a = 0xab320f1f, .b = 0x3576ef80, .c = 0xefe48000}, + {.a = 0xb9360f20, .b = 0xdb777f80, .c = 0xf7ed8000}, + {.a = 0xe0bd0f21, .b = 0xb9a4df80, .c = 0xf7550000}, + {.a = 0xf24c0f22, .b = 0x656b7780, .c = 0xefef8000}, + {.a = 0xfd330f23, .b = 0x23aaf780, .c = 0xedfd8000}, + {.a = 0xde240f24, .b = 0xae756f80, .c = 0x7bdd8000}, + {.a = 0x99380f25, .b = 0x66ad7f80, .c = 0xefd48000}, + {.a = 0xeec00f26, .b = 0xcd575f80, .c = 0x7b958000}, + {.a = 0xe8e20f27, .b = 0x5ade7700, .c = 0xefcd8000}, + {.a = 0xae3e0f28, .b = 0xeea7bb80, .c = 0x77b78000}, + {.a = 0xe5130f29, .b = 0x2b556f80, .c = 0xee978000}, + {.a = 0xdc240f2a, .b = 0xbbe45d80, .c = 0x77cc8000}, + {.a = 0xf5fb0f2b, .b = 0x24ed7700, .c = 0xf7d78000}, + {.a = 0x80600f2c, .b = 0xb5b6fe80, .c = 0xf3df8000}, + {.a = 0x9da70f2d, .b = 0x75dc6f80, .c = 0xef978000}, + {.a = 0xe1720f2e, .b = 0x76757b80, .c = 0xefd58000}, + {.a = 0xc67f0f2f, .b = 0x9d755f80, .c = 0x7bd70000}, + {.a = 0x94590f30, .b = 0x9cdfaf00, .c = 0x7bd58000}, + {.a = 0xb2470f31, .b = 0xa56cf780, .c = 0xefeb8000}, + {.a = 0x9fdb0f32, .b = 0xddef7780, .c = 0xef7b0000}, + {.a = 0x86710f33, .b = 0xaaf67780, .c = 0x77558000}, + {.a = 0xfbb60f34, .b = 0x33acef80, .c = 0xeef68000}, + {.a = 0x85400f35, .b = 0xa4e3bf80, .c = 0xf7b48000}, + {.a = 0xc4680f36, .b = 0xde44f780, .c = 0xefee8000}, + {.a = 0xdb7a0f37, .b = 0xbaa4df80, .c = 0xf7558000}, + {.a = 0xab970f38, .b = 0xcc757f80, .c = 0xe7dd8000}, + {.a = 0xbe160f39, .b = 0x356d7780, .c = 0xefc58000}, + {.a = 0x935c0f3a, .b = 0xaab6ef80, .c = 0xefd48000}, + {.a = 0xbc6f0f3b, .b = 0xead77700, .c = 0x77cb8000}, + {.a = 0x9a0a0f3c, .b = 0x3596ff80, .c = 0xeb758000}, + {.a = 0xcb460f3d, .b = 0x7b555f80, .c = 0xf7948000}, + {.a = 0xa2390f3e, .b = 0xe6ab6f80, .c = 0x7be78000}, + {.a = 0xbad00f3f, .b = 0xccb4f780, .c = 0xefd70000}, + {.a = 0xe42e0f40, .b = 0xed56f700, .c = 0xdfd68000}, + {.a = 0xba500f41, .b = 0x2b756f80, .c = 0xeed48000}, + {.a = 0xdba80f42, .b = 0xdcb4df80, .c = 0xf7ed8000}, + {.a = 0xbe6e0f43, .b = 0xccb57780, .c = 0xeee48000}, + {.a = 0x8e880f44, .b = 0xeb355d80, .c = 0x77eb8000}, + {.a = 0xd4af0f45, .b = 0x9d946e80, .c = 0xefdf0000}, + {.a = 0xed240f46, .b = 0x2ddcef00, .c = 0xefd78000}, + {.a = 0xfce40f47, .b = 0xbbe6df80, .c = 0xf6d50000}, + {.a = 0xb0a70f48, .b = 0xcae6df80, .c = 0xf7558000}, + {.a = 0xa1570f49, .b = 0x656f7f80, .c = 0xebd58000}, + {.a = 0xadda0f4a, .b = 0x356d7780, .c = 0xefcf8000}, + {.a = 0xabf20f4b, .b = 0xdd74f780, .c = 0xefd78000}, + {.a = 0xfc7b0f4c, .b = 0x24faf680, .c = 0xefc90000}, + {.a = 0xdfcf0f4d, .b = 0x595a7780, .c = 0xefcf0000}, + {.a = 0xeb920f4e, .b = 0xcd555f80, .c = 0x77b78000}, + {.a = 0xd8ad0f4f, .b = 0x4db67680, .c = 0xefe38000}, + {.a = 0xd8890f50, .b = 0xed69bf80, .c = 0x7bf58000}, + {.a = 0xb14e0f51, .b = 0x4d75af80, .c = 0xbfff8000}, + {.a = 0xd9340f52, .b = 0xceab7f80, .c = 0xebc48000}, + {.a = 0xbc5b0f53, .b = 0x9cf45d80, .c = 0xf7d58000}, + {.a = 0xad170f54, .b = 0xd5b4ed80, .c = 0xefe48000}, + {.a = 0xcef10f55, .b = 0x754f7780, .c = 0xe7fb8000}, + {.a = 0xf9340f56, .b = 0x3d76ee80, .c = 0xefd50000}, + {.a = 0xb2100f57, .b = 0xb6aef780, .c = 0xefc48000}, + {.a = 0xac700f58, .b = 0xa76ef700, .c = 0xefdc8000}, + {.a = 0x83950f59, .b = 0xdd52df00, .c = 0xfbfe8000}, + {.a = 0xd4680f5a, .b = 0x2ce56b80, .c = 0xefb58000}, + {.a = 0x94020f5b, .b = 0x23557780, .c = 0xedde8000}, + {.a = 0xc0bb0f5c, .b = 0x32755f80, .c = 0xf7e78000}, + {.a = 0x9f6a0f5d, .b = 0xb6b6f780, .c = 0xefc48000}, + {.a = 0xea3c0f5e, .b = 0xd5777f80, .c = 0xe7d50000}, + {.a = 0xab430f5f, .b = 0x6ab57780, .c = 0xf7d18000}, + {.a = 0xc0a20f60, .b = 0x256f7780, .c = 0xeff78000}, + {.a = 0xdf740f61, .b = 0xb574f780, .c = 0xefd58000}, + {.a = 0x857d0f62, .b = 0x32577f80, .c = 0xe7b78000}, + {.a = 0xedf60f63, .b = 0xcb555b80, .c = 0x77b58000}, + {.a = 0xb1610f64, .b = 0x3cbaef80, .c = 0xef558000}, + {.a = 0xd3b60f65, .b = 0xa6a87780, .c = 0xefd58000}, + {.a = 0x95b50f66, .b = 0x65757780, .c = 0xefe58000}, + {.a = 0xf58d0f67, .b = 0xa5acf780, .c = 0xefc58000}, + {.a = 0xf8d70f68, .b = 0x6db5bf80, .c = 0xf7d50000}, + {.a = 0x84520f69, .b = 0x5caa6e80, .c = 0xefd58000}, + {.a = 0x89f20f6a, .b = 0x3654f680, .c = 0xefd50000}, + {.a = 0xa64a0f6b, .b = 0xdd6f7780, .c = 0xefd68000}, + {.a = 0x9ce40f6c, .b = 0xad647780, .c = 0x77cb8000}, + {.a = 0x829b0f6d, .b = 0xbaa6de80, .c = 0xf7cf8000}, + {.a = 0xd7f00f6e, .b = 0xa56c7780, .c = 0xefe98000}, + {.a = 0xc2a10f6f, .b = 0x34af7780, .c = 0xeecb0000}, + {.a = 0x9b4a0f70, .b = 0x6d757f80, .c = 0xf7ec8000}, + {.a = 0xc2080f71, .b = 0xb6b4f780, .c = 0xefd50000}, + {.a = 0x850c0f72, .b = 0x52f66e80, .c = 0xefd58000}, + {.a = 0x9d4b0f73, .b = 0x9b347780, .c = 0xf7d78000}, + {.a = 0xc84f0f74, .b = 0xb65cdf80, .c = 0xfbd50000}, + {.a = 0xe3bd0f75, .b = 0xcb70df80, .c = 0xf7d58000}, + {.a = 0xa38a0f76, .b = 0xd6776f80, .c = 0x7bac8000}, + {.a = 0x887b0f77, .b = 0xbadc6e80, .c = 0xefb58000}, + {.a = 0xb3b80f78, .b = 0x64a57780, .c = 0xf7c88000}, + {.a = 0xe4850f79, .b = 0xb76bbf80, .c = 0x7bcb8000}, + {.a = 0xa37f0f7a, .b = 0x2b94ef80, .c = 0xeeef8000}, + {.a = 0xd9170f7b, .b = 0xdd777700, .c = 0xf7d38000}, + {.a = 0x986d0f7c, .b = 0xd96d7780, .c = 0x77cd8000}, + {.a = 0xe6440f7d, .b = 0xe6576f00, .c = 0x7bcd8000}, + {.a = 0x86240f7e, .b = 0xb9dc6e80, .c = 0xefa78000}, + {.a = 0xfd9c0f7f, .b = 0x22a57780, .c = 0xefb78000}, + {.a = 0x8b630f80, .b = 0xb957bf80, .c = 0x77958000}, + {.a = 0xf3f00f81, .b = 0x3156ff80, .c = 0xebf30000}, + {.a = 0xd0c40f82, .b = 0xccb57f80, .c = 0xe7d70000}, + {.a = 0xb46e0f83, .b = 0xcaaef780, .c = 0xefc58000}, + {.a = 0xddc30f84, .b = 0xcd6b7f80, .c = 0xebcd8000}, + {.a = 0xf7720f85, .b = 0xa6b4ff80, .c = 0xebf58000}, + {.a = 0x95670f86, .b = 0xbb66ef80, .c = 0xeec58000}, + {.a = 0xf09a0f87, .b = 0xdcb4ef80, .c = 0xefdd8000}, + {.a = 0xa5570f88, .b = 0x26d57780, .c = 0xf79f8000}, + {.a = 0x89350f89, .b = 0x26d6f680, .c = 0xeff50000}, + {.a = 0x8e730f8a, .b = 0x9dd55d80, .c = 0x77d50000}, + {.a = 0xc48b0f8b, .b = 0x669d7f80, .c = 0xeff58000}, + {.a = 0xe39e0f8c, .b = 0x2ad37700, .c = 0xf7eb8000}, + {.a = 0x959e0f8d, .b = 0x6a366e80, .c = 0xefd58000}, + {.a = 0xe6000f8e, .b = 0x657d7780, .c = 0xefe98000}, + {.a = 0xfc1b0f8f, .b = 0xea3d5d80, .c = 0x77d58000}, + {.a = 0xffbc0f90, .b = 0xbda7b780, .c = 0x6e9b8000}, + {.a = 0xbbc20f91, .b = 0xdd7af700, .c = 0xf7d28000}, + {.a = 0xd29f0f92, .b = 0x24ed7700, .c = 0xf7d78000}, + {.a = 0xc62b0f93, .b = 0x72755f80, .c = 0xf7550000}, + {.a = 0xa7b60f94, .b = 0x734d7b80, .c = 0xe7e58000}, + {.a = 0xe3860f95, .b = 0x33695f80, .c = 0xf7d58000}, + {.a = 0x914b0f96, .b = 0x75a66f80, .c = 0xefcf0000}, + {.a = 0xb7f70f97, .b = 0xdd34ed80, .c = 0xefd18000}, + {.a = 0xc6df0f98, .b = 0x2a7d7780, .c = 0xf7d58000}, + {.a = 0xda750f99, .b = 0xcda55f80, .c = 0xf6f60000}, + {.a = 0x87220f9a, .b = 0x33deff80, .c = 0xeb758000}, + {.a = 0xb7a90f9b, .b = 0x66f57780, .c = 0xefef8000}, + {.a = 0xbd800f9c, .b = 0xd32cef80, .c = 0xefd50000}, + {.a = 0x9d880f9d, .b = 0xcd6f7f80, .c = 0xe7d78000}, + {.a = 0xece40f9e, .b = 0xcd555f80, .c = 0x77958000}, + {.a = 0xa60f0f9f, .b = 0x9db55f80, .c = 0x77570000}, + {.a = 0xa0f50fa0, .b = 0x6f797780, .c = 0xf7d58000}, + {.a = 0xe74d0fa1, .b = 0x33555f80, .c = 0xf7d68000}, + {.a = 0xc9810fa2, .b = 0xccd15f80, .c = 0x7b558000}, + {.a = 0x93d80fa3, .b = 0x9d647780, .c = 0xf7d78000}, + {.a = 0xa9b70fa4, .b = 0xa2dcef80, .c = 0xef958000}, + {.a = 0xab880fa5, .b = 0xa668f700, .c = 0xefcb8000}, + {.a = 0x90890fa6, .b = 0xcb5f7780, .c = 0xefcb0000}, + {.a = 0xc5bf0fa7, .b = 0xb6b6df80, .c = 0xfbd48000}, + {.a = 0x88d70fa8, .b = 0x6d6f7f80, .c = 0xf7cd8000}, + {.a = 0xba110fa9, .b = 0x6d657f80, .c = 0xf7d78000}, + {.a = 0x97310faa, .b = 0x3a9d6f80, .c = 0xefd58000}, + {.a = 0xa9c10fab, .b = 0x9d5fb780, .c = 0x6fde8000}, + {.a = 0xf7290fac, .b = 0x2a76ee80, .c = 0xefd50000}, + {.a = 0xb4d10fad, .b = 0xcbad7780, .c = 0xeeec8000}, + {.a = 0xba8d0fae, .b = 0x62be6f80, .c = 0xefd58000}, + {.a = 0xe2450faf, .b = 0x37baf780, .c = 0xef558000}, + {.a = 0xf7a70fb0, .b = 0xef57b780, .c = 0x77dd8000}, + {.a = 0x97650fb1, .b = 0x24557b80, .c = 0xf7e10000}, + {.a = 0xc5ab0fb2, .b = 0xdcbcdf80, .c = 0xf7ef8000}, + {.a = 0xfa8e0fb3, .b = 0xbaacdf80, .c = 0xf7d50000}, + {.a = 0xdc360fb4, .b = 0x9aacbf80, .c = 0xf7e88000}, + {.a = 0xc4940fb5, .b = 0x26af7780, .c = 0xf7db8000}, + {.a = 0xdf380fb6, .b = 0x2b6d7780, .c = 0xf7e98000}, + {.a = 0xc5d30fb7, .b = 0x949a6e80, .c = 0xefd50000}, + {.a = 0xf7730fb8, .b = 0xcd64df80, .c = 0xf7d58000}, + {.a = 0xfe7e0fb9, .b = 0xdb5b7780, .c = 0x77b18000}, + {.a = 0xdd350fba, .b = 0xbdbcb780, .c = 0x6f558000}, + {.a = 0xd90c0fbb, .b = 0x3abb5e80, .c = 0xf7d70000}, + {.a = 0xbf210fbc, .b = 0x34baf780, .c = 0xef518000}, + {.a = 0xb6990fbd, .b = 0xbdd86e80, .c = 0xefd58000}, + {.a = 0xea460fbe, .b = 0x2a5d6d80, .c = 0xefd78000}, + {.a = 0xff650fbf, .b = 0xcd777f80, .c = 0xebed8000}, + {.a = 0xf6fc0fc0, .b = 0xb57eff80, .c = 0xf3eb8000}, + {.a = 0x85660fc1, .b = 0x9ce6af80, .c = 0x7bd50000}, + {.a = 0x8a040fc2, .b = 0x2a756f80, .c = 0xeed58000}, + {.a = 0xcfda0fc3, .b = 0xdcdd7780, .c = 0x77b38000}, + {.a = 0xabcd0fc4, .b = 0x31557f00, .c = 0xe7f18000}, + {.a = 0xe91c0fc5, .b = 0xcea7bf80, .c = 0x77cb0000}, + {.a = 0xbecc0fc6, .b = 0x9ae27680, .c = 0xf7d78000}, + {.a = 0x89630fc7, .b = 0xcab4f780, .c = 0xefd70000}, + {.a = 0xd0c70fc8, .b = 0xbad4df80, .c = 0xf7578000}, + {.a = 0xa76a0fc9, .b = 0xd564ef80, .c = 0xefe58000}, + {.a = 0x91af0fca, .b = 0x3af6ee80, .c = 0xdff58000}, + {.a = 0x8f800fcb, .b = 0x9b966e80, .c = 0xefd50000}, + {.a = 0xadb60fcc, .b = 0xcd2b6f80, .c = 0xeff78000}, + {.a = 0xc12e0fcd, .b = 0x9d755b80, .c = 0x77d50000}, + {.a = 0xcb9c0fce, .b = 0xdd7cdf80, .c = 0xf7d50000}, + {.a = 0xa54a0fcf, .b = 0xdd577780, .c = 0xefd58000}, + {.a = 0xd2e20fd0, .b = 0xb9cbbf80, .c = 0xefb58000}, + {.a = 0xd0050fd1, .b = 0x75557780, .c = 0xefc50000}, + {.a = 0x95b50fd2, .b = 0xccb37f80, .c = 0xe7d50000}, + {.a = 0x82d10fd3, .b = 0xdd777780, .c = 0xefd58000}, + {.a = 0xed7e0fd4, .b = 0x5ae7bf80, .c = 0xf7b68000}, + {.a = 0xbcf90fd5, .b = 0x35aef780, .c = 0xefe50000}, + {.a = 0xbaea0fd6, .b = 0xbbad6f80, .c = 0x6e978000}, + {.a = 0xb9390fd7, .b = 0x75577f80, .c = 0xe7e58000}, + {.a = 0xd6ec0fd8, .b = 0xd9677780, .c = 0xf7d38000}, + {.a = 0x9eae0fd9, .b = 0x66a97780, .c = 0xefc48000}, + {.a = 0xedaf0fda, .b = 0x6d6d7f80, .c = 0xf7e48000}, + {.a = 0xc8bb0fdb, .b = 0xcdf77780, .c = 0xefa58000}, + {.a = 0x84f80fdc, .b = 0x32b77780, .c = 0xefe58000}, + {.a = 0xf15c0fdd, .b = 0xb154df80, .c = 0xf7958000}, + {.a = 0xa2d50fde, .b = 0x22d57700, .c = 0xefdf8000}, + {.a = 0xa5c70fdf, .b = 0xee557780, .c = 0x77ad8000}, + {.a = 0x9e0d0fe0, .b = 0x2634f700, .c = 0xefc78000}, + {.a = 0x9b460fe1, .b = 0x6d757700, .c = 0xf7db8000}, + {.a = 0xe47d0fe2, .b = 0x26aef780, .c = 0xef4d8000}, + {.a = 0xf0cf0fe3, .b = 0xccacf780, .c = 0xefc70000}, + {.a = 0xc3fa0fe4, .b = 0xa6a8f780, .c = 0xefc58000}, + {.a = 0xa8780fe5, .b = 0x6cbd7f80, .c = 0xf7d48000}, + {.a = 0x97d40fe6, .b = 0xbb64df80, .c = 0xf7d48000}, + {.a = 0xd6a30fe7, .b = 0xd9eb7f80, .c = 0xf3b58000}, + {.a = 0xff020fe8, .b = 0xcd4cf780, .c = 0xefef0000}, + {.a = 0xfc500fe9, .b = 0xcd64df80, .c = 0xf7d58000}, + {.a = 0xdf660fea, .b = 0xdd7cef80, .c = 0xefd78000}, + {.a = 0xfb550feb, .b = 0xbaaeef80, .c = 0xefc48000}, + {.a = 0xc0030fec, .b = 0xd534ef80, .c = 0xefd70000}, + {.a = 0xcf850fed, .b = 0x3dfaef80, .c = 0xef558000}, + {.a = 0xbb2b0fee, .b = 0x22f57780, .c = 0xefb78000}, + {.a = 0xc1930fef, .b = 0x65777780, .c = 0xefd38000}, + {.a = 0xa2a90ff0, .b = 0x5777bf80, .c = 0xbbd38000}, + {.a = 0xe7d70ff1, .b = 0xbaa6df80, .c = 0xf7d48000}, + {.a = 0xc21c0ff2, .b = 0x59f27680, .c = 0xf7dd8000}, + {.a = 0xe4f80ff3, .b = 0xd7f76f80, .c = 0x6ec58000}, + {.a = 0xbe820ff4, .b = 0x9c745d80, .c = 0x77d50000}, + {.a = 0x881d0ff5, .b = 0xd2ed7f80, .c = 0xf7e50000}, + {.a = 0xd57a0ff6, .b = 0xc974f780, .c = 0xefd78000}, + {.a = 0xda850ff7, .b = 0x26a57780, .c = 0xefd78000}, + {.a = 0x859f0ff8, .b = 0x33557f80, .c = 0xe7b58000}, + {.a = 0xcc460ff9, .b = 0x66bd7780, .c = 0xf7d58000}, + {.a = 0x834b0ffa, .b = 0xbaac6e80, .c = 0xef958000}, + {.a = 0x9ae50ffb, .b = 0xcdb77780, .c = 0xefd60000}, + {.a = 0x93970ffc, .b = 0x29d56f80, .c = 0xef450000}, + {.a = 0xee920ffd, .b = 0xd2b57f80, .c = 0xe7d08000}, + {.a = 0xfd260ffe, .b = 0x32b6ee80, .c = 0xefd50000}, + {.a = 0xcd8a0fff, .b = 0x66eb7780, .c = 0xefc70000}, + {.a = 0xa9781000, .b = 0x356d7780, .c = 0xefcf8000}, + {.a = 0x91691001, .b = 0x3b72ef80, .c = 0xeed58000}, + {.a = 0x985a1002, .b = 0x3dd55f80, .c = 0xf7958000}, + {.a = 0xba6c1003, .b = 0xbaa6df80, .c = 0xf7cd0000}, + {.a = 0xfdb11004, .b = 0xb2f6df80, .c = 0xf7558000}, + {.a = 0xfac51005, .b = 0xdaaf7780, .c = 0xefcd8000}, + {.a = 0xe58c1006, .b = 0x3354ef80, .c = 0xedb58000}, + {.a = 0x8a951007, .b = 0x29776f80, .c = 0xefd78000}, + {.a = 0xb6331008, .b = 0x33b4ef80, .c = 0xddd58000}, + {.a = 0xe8fc1009, .b = 0x32b77380, .c = 0xefee8000}, + {.a = 0x84c0100a, .b = 0xec756e80, .c = 0x7bdd8000}, + {.a = 0x818d100b, .b = 0xd3577b80, .c = 0xe7f58000}, + {.a = 0x8fd4100c, .b = 0x72b67780, .c = 0xefe28000}, + {.a = 0x82e8100d, .b = 0x95bc7780, .c = 0x77d58000}, + {.a = 0xa416100e, .b = 0x9ce86f80, .c = 0x7bd58000}, + {.a = 0xf2d0100f, .b = 0x72957f80, .c = 0xe7e68000}, + {.a = 0xa2631010, .b = 0xcd6d7f80, .c = 0xe7d50000}, + {.a = 0xf7c51011, .b = 0x6aad7780, .c = 0xf7d18000}, + {.a = 0xb52d1012, .b = 0x652d7780, .c = 0xefc58000}, + {.a = 0xa33e1013, .b = 0xb9a4df80, .c = 0xf7558000}, + {.a = 0x89721014, .b = 0xdadd7780, .c = 0x77b58000}, + {.a = 0x815d1015, .b = 0xa5667780, .c = 0xf7cb8000}, + {.a = 0x99431016, .b = 0xd9577780, .c = 0xefc78000}, + {.a = 0xfbd61017, .b = 0xcd6edf80, .c = 0xf7cb8000}, + {.a = 0xfb7c1018, .b = 0x36f6f780, .c = 0xef558000}, + {.a = 0xd34d1019, .b = 0x26eebf80, .c = 0xf7658000}, + {.a = 0xe3f1101a, .b = 0xcd66f780, .c = 0xefe38000}, + {.a = 0xa6e6101b, .b = 0xcd6eed80, .c = 0xefe68000}, + {.a = 0x9e0b101c, .b = 0xb76cdf80, .c = 0xfbc58000}, + {.a = 0x9427101d, .b = 0x6d777f80, .c = 0xe7eb8000}, + {.a = 0xd7ac101e, .b = 0x7b5d5f80, .c = 0xf7d48000}, + {.a = 0xd98e101f, .b = 0xdab4f780, .c = 0xeff50000}, + {.a = 0x8da31020, .b = 0x32ad7780, .c = 0xefdf8000}, + {.a = 0xae9c1021, .b = 0x2a956f80, .c = 0xefd38000}, + {.a = 0x954b1022, .b = 0x5eea7680, .c = 0xefd58000}, + {.a = 0xf1341023, .b = 0xdddd6f80, .c = 0xeeda8000}, + {.a = 0x86b51024, .b = 0xcd777780, .c = 0xefdf8000}, + {.a = 0xd32c1025, .b = 0x26957780, .c = 0xefd48000}, + {.a = 0xa82b1026, .b = 0xbb7ced80, .c = 0xefd78000}, + {.a = 0xb2231027, .b = 0x32b2ff80, .c = 0xebd58000}, + {.a = 0x97081028, .b = 0x7595bf80, .c = 0xefd78000}, + {.a = 0x8d311029, .b = 0x76a57f80, .c = 0xefd58000}, + {.a = 0xc11f102a, .b = 0xe6db6f00, .c = 0x7bd78000}, + {.a = 0x8648102b, .b = 0xddb4ef80, .c = 0xeedf8000}, + {.a = 0x8727102c, .b = 0x6d777f80, .c = 0xe7ed8000}, + {.a = 0xf1fc102d, .b = 0xb6b4f780, .c = 0xefd48000}, + {.a = 0x8f8f102e, .b = 0xbad45d80, .c = 0xf7d48000}, + {.a = 0x8bbe102f, .b = 0xa66ef780, .c = 0xefcc8000}, + {.a = 0x86261030, .b = 0xccb4df80, .c = 0xf7ed0000}, + {.a = 0x97241031, .b = 0x6ab77f80, .c = 0xe7d58000}, + {.a = 0xcfbc1032, .b = 0xeed55f80, .c = 0x77978000}, + {.a = 0x9e831033, .b = 0xddeced80, .c = 0xefb58000}, + {.a = 0xf7f21034, .b = 0x734d7f80, .c = 0xe7f58000}, + {.a = 0xf29a1035, .b = 0x9c9d6d80, .c = 0x6fd58000}, + {.a = 0x9aef1036, .b = 0x9dfc6e80, .c = 0x7bd58000}, + {.a = 0xc4a71037, .b = 0xae7cf780, .c = 0xf7d18000}, + {.a = 0xc2621038, .b = 0x66d57f80, .c = 0xebaf8000}, + {.a = 0xf4f81039, .b = 0xea9bb780, .c = 0x77d78000}, + {.a = 0xc2d8103a, .b = 0x35b6ef80, .c = 0xef758000}, + {.a = 0x847b103b, .b = 0x9d655f80, .c = 0x7bd70000}, + {.a = 0xad97103c, .b = 0xdceb7700, .c = 0xefc18000}, + {.a = 0xcf32103d, .b = 0xb6b4f780, .c = 0xefd58000}, + {.a = 0x9733103e, .b = 0x69657f80, .c = 0xf3dd8000}, + {.a = 0x9c5e103f, .b = 0x4caa7680, .c = 0xefc30000}, + {.a = 0xe5fa1040, .b = 0xcee5b780, .c = 0x77ce8000}, + {.a = 0x82f91041, .b = 0x32a2ff80, .c = 0xebd78000}, + {.a = 0xebc31042, .b = 0x66bd7f80, .c = 0xebd78000}, + {.a = 0xb8501043, .b = 0xdae57780, .c = 0x77d18000}, + {.a = 0xdf871044, .b = 0x52746f80, .c = 0xefdb8000}, + {.a = 0xecdf1045, .b = 0xc6556f80, .c = 0xefb58000}, + {.a = 0xe9fe1046, .b = 0xb36cef80, .c = 0xeff58000}, + {.a = 0xaf961047, .b = 0x8d527b80, .c = 0xebee0000}, + {.a = 0xed9c1048, .b = 0x26eef680, .c = 0xefed0000}, + {.a = 0x8fba1049, .b = 0x9defb780, .c = 0xf7490000}, + {.a = 0xa266104a, .b = 0x2abeee80, .c = 0xefd58000}, + {.a = 0xc864104b, .b = 0x2b7b6f80, .c = 0xeed78000}, + {.a = 0xc7f3104c, .b = 0xcd777f80, .c = 0xe7d70000}, + {.a = 0xe45a104d, .b = 0x6eab7f80, .c = 0xf7cd8000}, + {.a = 0xb83c104e, .b = 0x9d746e80, .c = 0xefd10000}, + {.a = 0xeb71104f, .b = 0x256b7780, .c = 0xf7d28000}, + {.a = 0xc12a1050, .b = 0xad76f700, .c = 0xf7d88000}, + {.a = 0xe2b81051, .b = 0xc6aaeb80, .c = 0xefcc8000}, + {.a = 0x95571052, .b = 0xd564df80, .c = 0xf7d58000}, + {.a = 0xe52f1053, .b = 0x9a746e80, .c = 0xefd70000}, + {.a = 0x9fcc1054, .b = 0x9c5c6d80, .c = 0xefd58000}, + {.a = 0xc1711055, .b = 0xb564f780, .c = 0xefd58000}, + {.a = 0xa5091056, .b = 0xdd74f780, .c = 0xf7d58000}, + {.a = 0xf9fc1057, .b = 0xd4f57f80, .c = 0xe7d68000}, + {.a = 0xeddf1058, .b = 0x6abdb780, .c = 0xf7d78000}, + {.a = 0xd4461059, .b = 0x5ad67680, .c = 0xefd50000}, + {.a = 0xba4d105a, .b = 0xdd74f700, .c = 0xf7d68000}, + {.a = 0x8d9f105b, .b = 0xc974f700, .c = 0xefe68000}, + {.a = 0xb439105c, .b = 0xcdb4f780, .c = 0xefd68000}, + {.a = 0xdf7e105d, .b = 0xdd64ef80, .c = 0xefbd8000}, + {.a = 0x9718105e, .b = 0x9d4e7780, .c = 0xefff0000}, + {.a = 0xb560105f, .b = 0x8c946e80, .c = 0xefc50000}, + {.a = 0xb5911060, .b = 0x9c9baf80, .c = 0xefe58000}, + {.a = 0x869e1061, .b = 0xdca4dd80, .c = 0xf7cd8000}, + {.a = 0xaad41062, .b = 0xed537700, .c = 0x77e98000}, + {.a = 0xd2781063, .b = 0xed75bf80, .c = 0x77e58000}, + {.a = 0xfe431064, .b = 0x9d9c6e80, .c = 0xefd70000}, + {.a = 0xc7611065, .b = 0xceb77f80, .c = 0xebea0000}, + {.a = 0xf5df1066, .b = 0xdcdb6f80, .c = 0xef968000}, + {.a = 0xc1861067, .b = 0xaaa6ef80, .c = 0xede48000}, + {.a = 0xb9091068, .b = 0x3a96ef80, .c = 0xdf558000}, + {.a = 0xe9f21069, .b = 0xdab0ef80, .c = 0xefd78000}, + {.a = 0x8d9a106a, .b = 0x94756e80, .c = 0x6fd50000}, + {.a = 0xb65d106b, .b = 0x8b9c7780, .c = 0xedd78000}, + {.a = 0xeb58106c, .b = 0xcce8df80, .c = 0xf7ed0000}, + {.a = 0xd956106d, .b = 0x23caf780, .c = 0xef718000}, + {.a = 0xf4f3106e, .b = 0x9a966e80, .c = 0xefd50000}, + {.a = 0xce6f106f, .b = 0x669d7f80, .c = 0xebec8000}, + {.a = 0xcebe1070, .b = 0x75957e80, .c = 0xe7e70000}, + {.a = 0xc0cc1071, .b = 0xced6db00, .c = 0xf7d68000}, + {.a = 0xe6491072, .b = 0x656b7780, .c = 0xefef8000}, + {.a = 0xa68a1073, .b = 0x9d545d80, .c = 0x77d50000}, + {.a = 0xe2d51074, .b = 0x36a97780, .c = 0xefea8000}, + {.a = 0xdd561075, .b = 0x2256df80, .c = 0xf7958000}, + {.a = 0xf1aa1076, .b = 0x76d57780, .c = 0xefd50000}, + {.a = 0xe3791077, .b = 0x9d6c5f80, .c = 0x7be58000}, + {.a = 0xcbc01078, .b = 0xbd62df80, .c = 0xf7e78000}, + {.a = 0xef871079, .b = 0xdadb7780, .c = 0x77b78000}, + {.a = 0xd1c4107a, .b = 0x72d57e80, .c = 0xe7e58000}, + {.a = 0xc8b8107b, .b = 0xb374df80, .c = 0xf7ed8000}, + {.a = 0xaab7107c, .b = 0xeafd7680, .c = 0x77d58000}, + {.a = 0xeb98107d, .b = 0xdbef7780, .c = 0x77758000}, + {.a = 0xd07b107e, .b = 0xdadd7780, .c = 0x77b48000}, + {.a = 0xa68d107f, .b = 0x36ad7580, .c = 0xefef0000}, + {.a = 0xcc351080, .b = 0x8c94bf80, .c = 0xebac8000}, + {.a = 0xa4ba1081, .b = 0xdd76f780, .c = 0xf7d68000}, + {.a = 0xbfd41082, .b = 0xcd6b7f80, .c = 0xebcd8000}, + {.a = 0xb08a1083, .b = 0xdd7cf780, .c = 0xf7d38000}, + {.a = 0xf3ba1084, .b = 0xddb4dd80, .c = 0xf7d48000}, + {.a = 0x9ca41085, .b = 0xdd6f7780, .c = 0xefdd0000}, + {.a = 0x9d501086, .b = 0xb956ef80, .c = 0xefb78000}, + {.a = 0xaec91087, .b = 0xdb5d7780, .c = 0x77b48000}, + {.a = 0xfebd1088, .b = 0x72957f00, .c = 0xe7d78000}, + {.a = 0x9ea61089, .b = 0xc9777780, .c = 0xefd58000}, + {.a = 0xe901108a, .b = 0xdca4ef80, .c = 0xefc38000}, + {.a = 0xb942108b, .b = 0xdd6f7780, .c = 0xefd58000}, + {.a = 0xd660108c, .b = 0x76967680, .c = 0xefd30000}, + {.a = 0x8cfc108d, .b = 0x2a796f80, .c = 0xeed68000}, + {.a = 0xb4db108e, .b = 0xccb37f80, .c = 0xebed0000}, + {.a = 0xaf33108f, .b = 0x4a567780, .c = 0xef550000}, + {.a = 0xe9981090, .b = 0xd5a4ed80, .c = 0xefed8000}, + {.a = 0x83d11091, .b = 0xd2acef80, .c = 0xeff58000}, + {.a = 0x91401092, .b = 0xdd72f700, .c = 0xf7d68000}, + {.a = 0xfc3f1093, .b = 0xcd74f780, .c = 0xefd58000}, + {.a = 0x85441094, .b = 0xaaa6f780, .c = 0xf7e88000}, + {.a = 0xb88e1095, .b = 0xeb757580, .c = 0x77d18000}, + {.a = 0x80991096, .b = 0xa6af6f80, .c = 0x7bdc8000}, + {.a = 0x88061097, .b = 0xceb77780, .c = 0xef550000}, + {.a = 0xb3a91098, .b = 0xc976f780, .c = 0xefd68000}, + {.a = 0x993b1099, .b = 0x9a6c7780, .c = 0xf7f90000}, + {.a = 0xa561109a, .b = 0xcd6cef80, .c = 0xeff58000}, + {.a = 0x9136109b, .b = 0xab76ef80, .c = 0xefe58000}, + {.a = 0xbe6d109c, .b = 0xdda4ef80, .c = 0xefd28000}, + {.a = 0x9a4a109d, .b = 0xbbacef80, .c = 0xefc58000}, + {.a = 0xd658109e, .b = 0x73557b80, .c = 0xe7e50000}, + {.a = 0xd74a109f, .b = 0xccfb5d80, .c = 0x77dd8000}, + {.a = 0xe1b910a0, .b = 0xd6a9b780, .c = 0x6fc58000}, + {.a = 0xc70610a1, .b = 0xbaa6df80, .c = 0xf7d50000}, + {.a = 0xf01910a2, .b = 0x9d686f80, .c = 0x7bd78000}, + {.a = 0xaa5d10a3, .b = 0xdba4ef80, .c = 0xefc58000}, + {.a = 0xc55c10a4, .b = 0x73757d80, .c = 0xf7df8000}, + {.a = 0xcb4610a5, .b = 0x36f37780, .c = 0xe7ee8000}, + {.a = 0x89a710a6, .b = 0xaee57780, .c = 0x77cf8000}, + {.a = 0xcd3810a7, .b = 0x75b66f80, .c = 0xefd70000}, + {.a = 0xc48110a8, .b = 0x3b7edf80, .c = 0xf7d58000}, + {.a = 0xcb3310a9, .b = 0x656f7780, .c = 0xefdb8000}, + {.a = 0xbfce10aa, .b = 0xc954f780, .c = 0xefc78000}, + {.a = 0xfc1b10ab, .b = 0x32f77680, .c = 0xefe58000}, + {.a = 0xa2c710ac, .b = 0xcd637f80, .c = 0xebd38000}, + {.a = 0xe50410ad, .b = 0xad647780, .c = 0xf7ca8000}, + {.a = 0x9dc110ae, .b = 0x44be6e80, .c = 0xefd58000}, + {.a = 0xec0510af, .b = 0x9ce55f80, .c = 0x7bd50000}, + {.a = 0xafa110b0, .b = 0xaf74f780, .c = 0xf7ec8000}, + {.a = 0x921210b1, .b = 0x356d7780, .c = 0xe7f50000}, + {.a = 0x817010b2, .b = 0xcd777f80, .c = 0xebdb8000}, + {.a = 0xb31810b3, .b = 0x656d7780, .c = 0xefc48000}, + {.a = 0xcb2910b4, .b = 0xaaa6df80, .c = 0xf7ce8000}, + {.a = 0x854410b5, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0xa8e510b6, .b = 0xb6a8f780, .c = 0xefc48000}, + {.a = 0x830510b7, .b = 0xbddc6e80, .c = 0xefdb8000}, + {.a = 0xaa6b10b8, .b = 0x6b757780, .c = 0xf7dc8000}, + {.a = 0xd35f10b9, .b = 0xcd737f80, .c = 0xebe78000}, + {.a = 0xa27f10ba, .b = 0xb4acf780, .c = 0xefc48000}, + {.a = 0x907510bb, .b = 0xd934f780, .c = 0xefd70000}, + {.a = 0xf96b10bc, .b = 0xcaa4b780, .c = 0xf7e98000}, + {.a = 0xe5c710bd, .b = 0x2ab56f80, .c = 0xefd28000}, + {.a = 0x935e10be, .b = 0x72ad7780, .c = 0xeff78000}, + {.a = 0xf4e510bf, .b = 0xba96de80, .c = 0xf7d50000}, + {.a = 0xeb8a10c0, .b = 0x326d5f80, .c = 0xf5fe8000}, + {.a = 0xde1e10c1, .b = 0xded4df80, .c = 0xf7978000}, + {.a = 0xbf2910c2, .b = 0x7b535f00, .c = 0xf7d68000}, + {.a = 0xeb5610c3, .b = 0xad76f700, .c = 0xf7d88000}, + {.a = 0xe89d10c4, .b = 0xbddcef80, .c = 0xef658000}, + {.a = 0xd2a410c5, .b = 0x76757780, .c = 0xefd48000}, + {.a = 0x83fe10c6, .b = 0x26957780, .c = 0xefd28000}, + {.a = 0xc28f10c7, .b = 0xed73bf80, .c = 0x7bd58000}, + {.a = 0xddbe10c8, .b = 0x6d737f80, .c = 0xf7d58000}, + {.a = 0xfa6210c9, .b = 0x2376ee80, .c = 0xefdd0000}, + {.a = 0xe24310ca, .b = 0xb955bf80, .c = 0x77b58000}, + {.a = 0xdc5810cb, .b = 0xecf56f80, .c = 0x7b558000}, + {.a = 0xf52510cc, .b = 0x9d116f80, .c = 0x6fc58000}, + {.a = 0xe19e10cd, .b = 0x22fcf700, .c = 0xefd78000}, + {.a = 0xc0b610ce, .b = 0xad557780, .c = 0x77a98000}, + {.a = 0x977610cf, .b = 0x2a657f80, .c = 0xe7f78000}, + {.a = 0xc5a410d0, .b = 0xccbd7780, .c = 0xeee98000}, + {.a = 0xff8b10d1, .b = 0x2a756f80, .c = 0xeed68000}, + {.a = 0xea9b10d2, .b = 0xddf4ef80, .c = 0xef5d8000}, + {.a = 0xa9f210d3, .b = 0x36e57f80, .c = 0xefaf8000}, + {.a = 0xc4b210d4, .b = 0xd9df7700, .c = 0x77ed8000}, + {.a = 0x824e10d5, .b = 0xbbb4ed80, .c = 0xefc58000}, + {.a = 0xe37110d6, .b = 0xe6d55f00, .c = 0x7bd58000}, + {.a = 0x839610d7, .b = 0xdd74ef80, .c = 0xeed68000}, + {.a = 0xe29110d8, .b = 0xcd76bf80, .c = 0xf7ef0000}, + {.a = 0xa5d110d9, .b = 0x66adbf80, .c = 0xf3fe8000}, + {.a = 0xee3210da, .b = 0xbd576f80, .c = 0x6e958000}, + {.a = 0xb69210db, .b = 0x335cef00, .c = 0xeed78000}, + {.a = 0x8a8b10dc, .b = 0x3a56d780, .c = 0xdfb78000}, + {.a = 0xdee810dd, .b = 0xd32d7f80, .c = 0xf7e68000}, + {.a = 0xfa7b10de, .b = 0x3256f780, .c = 0xefe50000}, + {.a = 0xa95510df, .b = 0xd2b77f80, .c = 0xe7da8000}, + {.a = 0xd76b10e0, .b = 0x226ef680, .c = 0xeff58000}, + {.a = 0xbde810e1, .b = 0xcd36f780, .c = 0xefd50000}, + {.a = 0xddae10e2, .b = 0xbdaaef80, .c = 0xefd68000}, + {.a = 0xd72610e3, .b = 0x6d757f80, .c = 0xe7ec8000}, + {.a = 0xfc6310e4, .b = 0xd564ed80, .c = 0xefe58000}, + {.a = 0xbce410e5, .b = 0xca74f700, .c = 0xefd68000}, + {.a = 0xa1ed10e6, .b = 0xc4baef00, .c = 0xefee8000}, + {.a = 0x919110e7, .b = 0x36bef780, .c = 0xefed0000}, + {.a = 0xf64210e8, .b = 0xdaf4df80, .c = 0xf7d50000}, + {.a = 0xff8610e9, .b = 0xbaacdf80, .c = 0xf7d50000}, + {.a = 0xd5ce10ea, .b = 0xdcd4ef80, .c = 0xefb58000}, + {.a = 0xf18510eb, .b = 0x2976ee80, .c = 0xefd50000}, + {.a = 0x9be410ec, .b = 0x99b45680, .c = 0xf7ed8000}, + {.a = 0xc30810ed, .b = 0x9cb46d80, .c = 0xefd58000}, + {.a = 0xf86610ee, .b = 0xdcad7780, .c = 0xf7d88000}, + {.a = 0x994610ef, .b = 0x26af7b80, .c = 0xefd78000}, + {.a = 0xcae310f0, .b = 0xaef4bf80, .c = 0x7b550000}, + {.a = 0xb05710f1, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0xe04710f2, .b = 0x59ea7680, .c = 0xefc58000}, + {.a = 0xea2010f3, .b = 0xb566f780, .c = 0xefd78000}, + {.a = 0xea6010f4, .b = 0x2a556f80, .c = 0xeec58000}, + {.a = 0xa14210f5, .b = 0xb6f4f700, .c = 0xefd58000}, + {.a = 0xb41910f6, .b = 0x5b5c7700, .c = 0xefd58000}, + {.a = 0xe0d810f7, .b = 0x755c7780, .c = 0xefcb0000}, + {.a = 0x866810f8, .b = 0xdcab7780, .c = 0xefd38000}, + {.a = 0x86e510f9, .b = 0xd36d7f80, .c = 0xe7b68000}, + {.a = 0xba8110fa, .b = 0x75b5bf80, .c = 0xfbd70000}, + {.a = 0xa51410fb, .b = 0xd574ef80, .c = 0xefe58000}, + {.a = 0xb23910fc, .b = 0x2676f700, .c = 0xefd58000}, + {.a = 0xe73f10fd, .b = 0xed757700, .c = 0x77d38000}, + {.a = 0xbf7510fe, .b = 0xd5b4ed80, .c = 0xefe58000}, + {.a = 0x87c310ff, .b = 0xcdb6ef80, .c = 0xefe48000}, + {.a = 0xa60d1100, .b = 0xadb5bf80, .c = 0x7b550000}, + {.a = 0xd9da1101, .b = 0xba54df80, .c = 0xf7d38000}, + {.a = 0xaafc1102, .b = 0x9f635f80, .c = 0x7bd10000}, + {.a = 0xcdc31103, .b = 0xbaa6df80, .c = 0xf7cd0000}, + {.a = 0xefb21104, .b = 0x66997780, .c = 0xefe58000}, + {.a = 0xf03f1105, .b = 0xcd777f80, .c = 0xe7d38000}, + {.a = 0xc57e1106, .b = 0x5db26e80, .c = 0xefdd8000}, + {.a = 0x97d81107, .b = 0xcdb57f80, .c = 0xebd40000}, + {.a = 0xdc841108, .b = 0xdceb7700, .c = 0xefd28000}, + {.a = 0x815c1109, .b = 0xdab4d780, .c = 0xf7e98000}, + {.a = 0xe3ec110a, .b = 0xa2d4ef80, .c = 0xef958000}, + {.a = 0xfe93110b, .b = 0xa35cf780, .c = 0xefad8000}, + {.a = 0xc1ff110c, .b = 0xcd76ef80, .c = 0xefd58000}, + {.a = 0xb296110d, .b = 0xea735f00, .c = 0x77d68000}, + {.a = 0xbe60110e, .b = 0xbad4ef80, .c = 0xef958000}, + {.a = 0xdaed110f, .b = 0x72b57780, .c = 0xefd48000}, + {.a = 0xdd491110, .b = 0xea5db780, .c = 0x77958000}, + {.a = 0x9aae1111, .b = 0x26b57780, .c = 0xf7d58000}, + {.a = 0xe5e21112, .b = 0xdd74df80, .c = 0xf7e78000}, + {.a = 0xed501113, .b = 0xbaa4d780, .c = 0xf7f58000}, + {.a = 0xf7951114, .b = 0x9a526f80, .c = 0xef968000}, + {.a = 0xaa6a1115, .b = 0xb574f780, .c = 0xefc58000}, + {.a = 0xfed71116, .b = 0x3bbeee80, .c = 0xefd50000}, + {.a = 0x8b4e1117, .b = 0x35777780, .c = 0xefd78000}, + {.a = 0xe7f71118, .b = 0x32b6ff80, .c = 0xeb558000}, + {.a = 0xda5c1119, .b = 0xbbe5bf80, .c = 0xeeaf8000}, + {.a = 0xf691111a, .b = 0x9d3e6f80, .c = 0x6fd50000}, + {.a = 0xf715111b, .b = 0xd964f780, .c = 0xefd70000}, + {.a = 0xb3ff111c, .b = 0xe76f6f00, .c = 0x7bd58000}, + {.a = 0x90a0111d, .b = 0xddd77780, .c = 0xeecd8000}, + {.a = 0xe21a111e, .b = 0x23b4ef80, .c = 0xeed58000}, + {.a = 0xf060111f, .b = 0x9df55e80, .c = 0x7bd50000}, + {.a = 0xa6401120, .b = 0x6d67bf80, .c = 0xf7b58000}, + {.a = 0xfb0e1121, .b = 0xbaafb780, .c = 0x77958000}, + {.a = 0xa8681122, .b = 0x232af780, .c = 0xeddd0000}, + {.a = 0xe16d1123, .b = 0x23def780, .c = 0xeded0000}, + {.a = 0xf1871124, .b = 0xdd6f7700, .c = 0xefde8000}, + {.a = 0x8fe11125, .b = 0x9edbb700, .c = 0x77d78000}, + {.a = 0xc9ff1126, .b = 0x35577780, .c = 0xefd70000}, + {.a = 0xf47c1127, .b = 0x29756f80, .c = 0xefd10000}, + {.a = 0xeae51128, .b = 0xbab4df80, .c = 0xf7d50000}, + {.a = 0xcca81129, .b = 0xa6a8f780, .c = 0xefc58000}, + {.a = 0xa2a3112a, .b = 0x6d317f80, .c = 0xf7e40000}, + {.a = 0xd298112b, .b = 0x76b57780, .c = 0xefe50000}, + {.a = 0xa844112c, .b = 0xadd67780, .c = 0x774b0000}, + {.a = 0x9efd112d, .b = 0x36b6f780, .c = 0xefd10000}, + {.a = 0xd65b112e, .b = 0xd96cef80, .c = 0xefc70000}, + {.a = 0xd2ed112f, .b = 0x9de55e80, .c = 0x7bd58000}, + {.a = 0xdeca1130, .b = 0x9ae7be80, .c = 0x6ff58000}, + {.a = 0xac291131, .b = 0x32b77780, .c = 0xefd58000}, + {.a = 0xbd891132, .b = 0xcd357780, .c = 0xefe58000}, + {.a = 0x86321133, .b = 0xcb777f80, .c = 0xe7eb8000}, + {.a = 0xf02c1134, .b = 0xa4bc7780, .c = 0xefd58000}, + {.a = 0xcfb01135, .b = 0xddb57780, .c = 0xeeb58000}, + {.a = 0xbcf91136, .b = 0x32b57780, .c = 0xefde8000}, + {.a = 0xc7961137, .b = 0x9d555f80, .c = 0x7bd70000}, + {.a = 0xc04f1138, .b = 0x9ab5bf80, .c = 0x77ef8000}, + {.a = 0xbef71139, .b = 0xdd4ef780, .c = 0xeffb0000}, + {.a = 0xa1f8113a, .b = 0x33557f80, .c = 0xe7f68000}, + {.a = 0x85a4113b, .b = 0xccb2df80, .c = 0xf7f70000}, + {.a = 0xdec8113c, .b = 0x99a57b80, .c = 0x77d50000}, + {.a = 0xd64e113d, .b = 0xd95b7780, .c = 0x77b38000}, + {.a = 0xb858113e, .b = 0xbcb55d80, .c = 0x77958000}, + {.a = 0xa542113f, .b = 0x236d7780, .c = 0xee7b0000}, + {.a = 0xe86b1140, .b = 0xcd6f7f80, .c = 0xebe70000}, + {.a = 0xf8201141, .b = 0x32557f80, .c = 0xe7f78000}, + {.a = 0xdb8b1142, .b = 0xa668f780, .c = 0xefc58000}, + {.a = 0xf4a41143, .b = 0x269d7780, .c = 0xefce8000}, + {.a = 0xe5281144, .b = 0x72747780, .c = 0xefdb8000}, + {.a = 0xdb811145, .b = 0x66a97780, .c = 0xefc78000}, + {.a = 0x9ffe1146, .b = 0xaab66d80, .c = 0xef948000}, + {.a = 0xc7d91147, .b = 0xbbaeef80, .c = 0xeec58000}, + {.a = 0xce201148, .b = 0x2b737f80, .c = 0xe7d78000}, + {.a = 0xb1221149, .b = 0x26aaf780, .c = 0xef758000}, + {.a = 0xf07f114a, .b = 0xd5b76f80, .c = 0x6f558000}, + {.a = 0xf9f9114b, .b = 0x639a6e80, .c = 0xefdd0000}, + {.a = 0xaabf114c, .b = 0xa76a6f80, .c = 0x7bd18000}, + {.a = 0x8a2a114d, .b = 0xb66cf780, .c = 0xefc78000}, + {.a = 0xe109114e, .b = 0xbcb4ef80, .c = 0xefe58000}, + {.a = 0xe4e3114f, .b = 0x72a57780, .c = 0xefd78000}, + {.a = 0x99741150, .b = 0xbaabbf80, .c = 0xf7c68000}, + {.a = 0xc8361151, .b = 0xdca4df80, .c = 0xf7cd8000}, + {.a = 0x978f1152, .b = 0xdcf57780, .c = 0x776b8000}, + {.a = 0xb7111153, .b = 0x775b7b80, .c = 0xeff78000}, + {.a = 0xc92a1154, .b = 0xdf7eef80, .c = 0xeed58000}, + {.a = 0xcdbf1155, .b = 0xbd62dd80, .c = 0xf7f58000}, + {.a = 0xa2401156, .b = 0x35aaf780, .c = 0xefc08000}, + {.a = 0xbc221157, .b = 0x66af7f80, .c = 0xebcd8000}, + {.a = 0xef231158, .b = 0x329aef80, .c = 0xef5d8000}, + {.a = 0xe3c91159, .b = 0x72b56f80, .c = 0xefd40000}, + {.a = 0x9f66115a, .b = 0x45ca6e80, .c = 0xefd58000}, + {.a = 0xa0b5115b, .b = 0x59d67680, .c = 0xefd30000}, + {.a = 0xf556115c, .b = 0xa6a56f80, .c = 0x7bf78000}, + {.a = 0xd918115d, .b = 0x27d2ff00, .c = 0xebe98000}, + {.a = 0x9677115e, .b = 0xbbd55f80, .c = 0x77570000}, + {.a = 0xd609115f, .b = 0x76d57780, .c = 0xefc50000}, + {.a = 0xcb3a1160, .b = 0x5aadbf80, .c = 0xb7f78000}, + {.a = 0x8ff21161, .b = 0x256d7780, .c = 0xf7c98000}, + {.a = 0xa4ae1162, .b = 0xd4b2ef80, .c = 0xefe58000}, + {.a = 0xab5d1163, .b = 0x6d257f80, .c = 0xf7ef8000}, + {.a = 0xeceb1164, .b = 0xed757700, .c = 0x77d58000}, + {.a = 0xa2be1165, .b = 0xae74f700, .c = 0xf7dd8000}, + {.a = 0x9d461166, .b = 0xf3756d80, .c = 0x6fd58000}, + {.a = 0xdd881167, .b = 0xcddb7f80, .c = 0xe7b58000}, + {.a = 0xd1661168, .b = 0x26a97780, .c = 0xefd58000}, + {.a = 0xe60b1169, .b = 0xdeeb7780, .c = 0xef6d8000}, + {.a = 0xbacc116a, .b = 0x65777f80, .c = 0xefdb8000}, + {.a = 0xe07e116b, .b = 0xe6dd6f00, .c = 0x7bd78000}, + {.a = 0xf577116c, .b = 0xa2ac7780, .c = 0xefdb8000}, + {.a = 0x8e53116d, .b = 0xad64f780, .c = 0xf7c88000}, + {.a = 0xd41d116e, .b = 0xb5525f80, .c = 0x7bd68000}, + {.a = 0xf4a1116f, .b = 0x2ac56f80, .c = 0xef978000}, + {.a = 0xb9181170, .b = 0xbaa4df80, .c = 0xf7cd0000}, + {.a = 0x90e41171, .b = 0xbd46ef80, .c = 0xefe38000}, + {.a = 0xbe4f1172, .b = 0x55fe6e80, .c = 0xefd78000}, + {.a = 0xb3031173, .b = 0x6d277f80, .c = 0xf7ed8000}, + {.a = 0xe8c71174, .b = 0x49d67780, .c = 0xef550000}, + {.a = 0x9bc31175, .b = 0x36b6f780, .c = 0xefd48000}, + {.a = 0x82251176, .b = 0xcdf55f80, .c = 0x7bed8000}, + {.a = 0x84691177, .b = 0x9db45d80, .c = 0x77d58000}, + {.a = 0xd2cb1178, .b = 0x25cef780, .c = 0xef6b8000}, + {.a = 0x89491179, .b = 0xbdb46e80, .c = 0xefd58000}, + {.a = 0xf13e117a, .b = 0xea745e80, .c = 0x77e38000}, + {.a = 0xf2b8117b, .b = 0xbcdc6b80, .c = 0xef958000}, + {.a = 0xce4f117c, .b = 0xad74f780, .c = 0xf7d58000}, + {.a = 0xebc6117d, .b = 0xccd35f80, .c = 0x77b78000}, + {.a = 0xff5f117e, .b = 0x3656f780, .c = 0xef958000}, + {.a = 0xdb6f117f, .b = 0xdd6f7780, .c = 0xefd58000}, + {.a = 0x8e491180, .b = 0x4afd3f80, .c = 0xf3d78000}, + {.a = 0xc9191181, .b = 0xb77af780, .c = 0xefcb8000}, + {.a = 0xe8461182, .b = 0xdad77780, .c = 0x774b8000}, + {.a = 0xd8ce1183, .b = 0xaee57780, .c = 0x77cb8000}, + {.a = 0xa6e31184, .b = 0xbaacdf80, .c = 0xf7d50000}, + {.a = 0x926a1185, .b = 0xed7d7f00, .c = 0x77d48000}, + {.a = 0xda2b1186, .b = 0x59ea7680, .c = 0xefc50000}, + {.a = 0xedab1187, .b = 0xaa7c6f80, .c = 0xefd60000}, + {.a = 0x94251188, .b = 0x35b6f680, .c = 0xefd58000}, + {.a = 0xef1e1189, .b = 0x3d556f80, .c = 0xef978000}, + {.a = 0xf337118a, .b = 0x25757f80, .c = 0xebd78000}, + {.a = 0x97cc118b, .b = 0xa6acff80, .c = 0xebcd8000}, + {.a = 0x9487118c, .b = 0x325eef00, .c = 0xeed58000}, + {.a = 0xb45e118d, .b = 0xea7d7700, .c = 0x77d48000}, + {.a = 0xc090118e, .b = 0xca715e80, .c = 0x77d58000}, + {.a = 0x9233118f, .b = 0xddb57780, .c = 0xeeb58000}, + {.a = 0xec871190, .b = 0x9775bf80, .c = 0x7be58000}, + {.a = 0xba331191, .b = 0x9e99b780, .c = 0x6fd50000}, + {.a = 0xa3cc1192, .b = 0x22b6ee80, .c = 0xefdd0000}, + {.a = 0x89131193, .b = 0xcee77780, .c = 0xef7f0000}, + {.a = 0xf79f1194, .b = 0x6daf7f80, .c = 0xf7cf8000}, + {.a = 0x93e31195, .b = 0xcd74dd80, .c = 0xf7e58000}, + {.a = 0x812c1196, .b = 0x3676f780, .c = 0xefd58000}, + {.a = 0xef191197, .b = 0x99ac7780, .c = 0xefce8000}, + {.a = 0xdd431198, .b = 0xb95bb780, .c = 0x77918000}, + {.a = 0xf2541199, .b = 0x6db57f80, .c = 0xe7d58000}, + {.a = 0xe6e4119a, .b = 0x22f57780, .c = 0xef790000}, + {.a = 0xfa69119b, .b = 0x3a6eef80, .c = 0xefc58000}, + {.a = 0x852d119c, .b = 0x29b4ef80, .c = 0xeee68000}, + {.a = 0x9717119d, .b = 0x35ad7780, .c = 0xefc88000}, + {.a = 0x965a119e, .b = 0xdd76f780, .c = 0xefff8000}, + {.a = 0xabd0119f, .b = 0x6aa57780, .c = 0xf7f78000}, + {.a = 0xedd011a0, .b = 0xdc74dd80, .c = 0xf7d50000}, + {.a = 0xd07811a1, .b = 0x3576ed80, .c = 0xef958000}, + {.a = 0x86b911a2, .b = 0x36fd7780, .c = 0xefee8000}, + {.a = 0x902d11a3, .b = 0xbd44ef80, .c = 0xef958000}, + {.a = 0x8c8b11a4, .b = 0x3bb2ef80, .c = 0xeed58000}, + {.a = 0xc97f11a5, .b = 0x32fcf700, .c = 0xefdb8000}, + {.a = 0x866011a6, .b = 0x73557b00, .c = 0xe7f48000}, + {.a = 0x9f4111a7, .b = 0xb674f780, .c = 0xe7ed8000}, + {.a = 0xa89811a8, .b = 0x3376f680, .c = 0xefe58000}, + {.a = 0x954d11a9, .b = 0x66997f80, .c = 0xebf58000}, + {.a = 0xd68411aa, .b = 0x35d6f700, .c = 0xef558000}, + {.a = 0xae1d11ab, .b = 0xcba4dd80, .c = 0xf7cf0000}, + {.a = 0x9f3e11ac, .b = 0xdde56f80, .c = 0x7b778000}, + {.a = 0xda8a11ad, .b = 0xbd72ef80, .c = 0xeed58000}, + {.a = 0xe58611ae, .b = 0xaed4f780, .c = 0xf7bd8000}, + {.a = 0x803211af, .b = 0xbbb45d80, .c = 0xf7d68000}, + {.a = 0x90aa11b0, .b = 0xb6f4de80, .c = 0xfbd78000}, + {.a = 0xa9dc11b1, .b = 0xa4b4f780, .c = 0xf7ea8000}, + {.a = 0xbbe611b2, .b = 0xbbf65f80, .c = 0x77558000}, + {.a = 0xdc8f11b3, .b = 0xab7c6f80, .c = 0xefd60000}, + {.a = 0x9aa511b4, .b = 0x5dd67780, .c = 0xefd50000}, + {.a = 0x863311b5, .b = 0xb9d35e80, .c = 0x77f58000}, + {.a = 0xd87a11b6, .b = 0x656d7780, .c = 0xefe98000}, + {.a = 0xb57611b7, .b = 0xd4dd7f80, .c = 0xe7750000}, + {.a = 0xf45811b8, .b = 0xcdaf7f80, .c = 0xe7d60000}, + {.a = 0x9ab311b9, .b = 0xba96df80, .c = 0xf7ce8000}, + {.a = 0xdba211ba, .b = 0xcd6f7f80, .c = 0xebcd0000}, + {.a = 0xb5ff11bb, .b = 0xcd4d5f80, .c = 0x77958000}, + {.a = 0xbf0811bc, .b = 0xcd377f80, .c = 0xe7d58000}, + {.a = 0xa6b211bd, .b = 0x9b745e80, .c = 0xf7d50000}, + {.a = 0xa97011be, .b = 0x72ae7780, .c = 0xefe78000}, + {.a = 0xa51611bf, .b = 0xd6b6ef80, .c = 0xfbd68000}, + {.a = 0xc8b311c0, .b = 0x6eb7bf80, .c = 0xf7d50000}, + {.a = 0x94dd11c1, .b = 0x32d6f680, .c = 0xefe50000}, + {.a = 0xba4211c2, .b = 0xadd7bf80, .c = 0x7b558000}, + {.a = 0x9d7d11c3, .b = 0xad76f700, .c = 0xf7d88000}, + {.a = 0x8d5611c4, .b = 0xcd7b7f80, .c = 0xebed8000}, + {.a = 0xe16411c5, .b = 0xba646d80, .c = 0xefcb8000}, + {.a = 0xf27111c6, .b = 0x2b5b6f80, .c = 0xedd78000}, + {.a = 0xf06611c7, .b = 0xea745d80, .c = 0x77d30000}, + {.a = 0xd2a711c8, .b = 0xdcd2f780, .c = 0xf7b78000}, + {.a = 0xb77911c9, .b = 0x4df67680, .c = 0xefe58000}, + {.a = 0xb1f611ca, .b = 0xcdf4f700, .c = 0xefd68000}, + {.a = 0x97bf11cb, .b = 0x22d57780, .c = 0xedda8000}, + {.a = 0xd94611cc, .b = 0xcd757780, .c = 0xeed78000}, + {.a = 0x847511cd, .b = 0x267d7780, .c = 0xef6d0000}, + {.a = 0x8d6511ce, .b = 0xa6a8f780, .c = 0xefed8000}, + {.a = 0xa66111cf, .b = 0xbba4dd80, .c = 0xf7d58000}, + {.a = 0xb6c911d0, .b = 0xbb64ef80, .c = 0xefc58000}, + {.a = 0x9d6711d1, .b = 0xdb737f80, .c = 0xf7d58000}, + {.a = 0xfdc611d2, .b = 0xceb77f80, .c = 0xebd28000}, + {.a = 0xc37911d3, .b = 0x99f67680, .c = 0xf7de8000}, + {.a = 0xeae811d4, .b = 0xbbd55e80, .c = 0x77cd0000}, + {.a = 0xab0d11d5, .b = 0x666d7f80, .c = 0xf3f58000}, + {.a = 0xd5e411d6, .b = 0xb6b4f780, .c = 0xefd48000}, + {.a = 0xa47c11d7, .b = 0x35577780, .c = 0xefc70000}, + {.a = 0xfc9711d8, .b = 0x73755f80, .c = 0xf7d58000}, + {.a = 0xa47a11d9, .b = 0x36b57780, .c = 0xefd68000}, + {.a = 0xb3a911da, .b = 0xeaf67780, .c = 0x77558000}, + {.a = 0xc6f011db, .b = 0x226ef680, .c = 0xeff50000}, + {.a = 0xa6e611dc, .b = 0x4abc7f80, .c = 0xefd68000}, + {.a = 0xc59e11dd, .b = 0x9d6e6f80, .c = 0x7bd58000}, + {.a = 0x844511de, .b = 0x25d2ff80, .c = 0xebab8000}, + {.a = 0x802b11df, .b = 0xb2acdf80, .c = 0xf7d48000}, + {.a = 0x901b11e0, .b = 0x9efdb780, .c = 0x77d58000}, + {.a = 0xb9ba11e1, .b = 0x3676f680, .c = 0xefd50000}, + {.a = 0xa04c11e2, .b = 0x2ef37700, .c = 0xf7df8000}, + {.a = 0xa92411e3, .b = 0x9b5d7780, .c = 0x77b58000}, + {.a = 0xd6e211e4, .b = 0x3b72ef80, .c = 0xeed58000}, + {.a = 0xabc411e5, .b = 0x2ba57f80, .c = 0xe7f48000}, + {.a = 0x953c11e6, .b = 0x9df45e80, .c = 0xf7d48000}, + {.a = 0xa66a11e7, .b = 0x72b57780, .c = 0xeff78000}, + {.a = 0xbfed11e8, .b = 0x6d6b7f80, .c = 0xe7ff8000}, + {.a = 0xf0a411e9, .b = 0x32b77780, .c = 0xefd58000}, + {.a = 0xcf3711ea, .b = 0xbb56ef00, .c = 0xefc48000}, + {.a = 0x939d11eb, .b = 0xdae57780, .c = 0x77d58000}, + {.a = 0x885711ec, .b = 0x2ab6df80, .c = 0xf7558000}, + {.a = 0xd07411ed, .b = 0x66a97780, .c = 0xefc58000}, + {.a = 0xf10f11ee, .b = 0xbae55d80, .c = 0x77ed8000}, + {.a = 0xbb6e11ef, .b = 0xb2766f80, .c = 0xefe58000}, + {.a = 0xe56611f0, .b = 0x656f7780, .c = 0xefc70000}, + {.a = 0x9d9011f1, .b = 0x2cad7780, .c = 0xf7c98000}, + {.a = 0xc27911f2, .b = 0xdd6f7780, .c = 0xefd50000}, + {.a = 0xd7de11f3, .b = 0xb2df6f80, .c = 0x6f550000}, + {.a = 0x887011f4, .b = 0x376efe80, .c = 0xebf58000}, + {.a = 0xfe8211f5, .b = 0x3bd6de80, .c = 0xf7d50000}, + {.a = 0xd97111f6, .b = 0x2656f700, .c = 0xefd48000}, + {.a = 0xb4d111f7, .b = 0x7b755f80, .c = 0xf7d58000}, + {.a = 0x901c11f8, .b = 0xeab4b780, .c = 0x77d38000}, + {.a = 0xcbcf11f9, .b = 0x9cb45d80, .c = 0xf7d48000}, + {.a = 0xfb0311fa, .b = 0xdd4cf780, .c = 0xefeb0000}, + {.a = 0xf18011fb, .b = 0xcd777f80, .c = 0xe7d78000}, + {.a = 0xbc3411fc, .b = 0xd4f4ef00, .c = 0xefd58000}, + {.a = 0xa20411fd, .b = 0x35bd7780, .c = 0xefdb8000}, + {.a = 0xa73911fe, .b = 0x9af27680, .c = 0xf7f98000}, + {.a = 0xd08b11ff, .b = 0x7b555f00, .c = 0xf7d58000}, + {.a = 0xb6521200, .b = 0xccb77780, .c = 0xefe28000}, + {.a = 0xd7931201, .b = 0xddb77680, .c = 0xf7d38000}, + {.a = 0xfbb21202, .b = 0x3bbeee80, .c = 0xefd50000}, + {.a = 0xc8fc1203, .b = 0xb9a4df80, .c = 0xf7d50000}, + {.a = 0x96751204, .b = 0xd3777f80, .c = 0xf7ed0000}, + {.a = 0xff1d1205, .b = 0x25aaf780, .c = 0xefed8000}, + {.a = 0xc5c41206, .b = 0x99777780, .c = 0x77d78000}, + {.a = 0x9c121207, .b = 0x2aad7780, .c = 0xf7c88000}, + {.a = 0xdd2f1208, .b = 0x736d6f80, .c = 0xeef58000}, + {.a = 0xae031209, .b = 0xdd6cdf80, .c = 0xf7cb0000}, + {.a = 0x8b13120a, .b = 0xbabc6e80, .c = 0xef958000}, + {.a = 0xd0f8120b, .b = 0xea555f80, .c = 0x77968000}, + {.a = 0xe206120c, .b = 0xd9257780, .c = 0x77cd8000}, + {.a = 0xf43d120d, .b = 0x2ceade80, .c = 0xf7fd8000}, + {.a = 0xbc91120e, .b = 0xa544ff80, .c = 0xebed8000}, + {.a = 0x8f08120f, .b = 0x65777f80, .c = 0xeffb8000}, + {.a = 0x8e2f1210, .b = 0x4dbdbf80, .c = 0xf7ec8000}, + {.a = 0xaed71211, .b = 0x66b57780, .c = 0xeff78000}, + {.a = 0x80491212, .b = 0x2b6b7780, .c = 0xf7d38000}, + {.a = 0xa0ce1213, .b = 0xdd757780, .c = 0xefd58000}, + {.a = 0x9dcf1214, .b = 0x66b57780, .c = 0xefe58000}, + {.a = 0xf74f1215, .b = 0xbb96de80, .c = 0xf7d58000}, + {.a = 0x83e91216, .b = 0x9c346d80, .c = 0xefd58000}, + {.a = 0xea7b1217, .b = 0x669d7f80, .c = 0xebe58000}, + {.a = 0xe4381218, .b = 0x25657780, .c = 0xf7c98000}, + {.a = 0xef241219, .b = 0x56b5bb80, .c = 0xefed8000}, + {.a = 0x90af121a, .b = 0x25ab7f80, .c = 0xefd68000}, + {.a = 0xb45f121b, .b = 0xdd637780, .c = 0xf7c98000}, + {.a = 0x893e121c, .b = 0x226d7780, .c = 0xefb58000}, + {.a = 0x8764121d, .b = 0x5aee7700, .c = 0xefc58000}, + {.a = 0xc098121e, .b = 0xcd6cdd80, .c = 0xf7d58000}, + {.a = 0xf0a5121f, .b = 0x9a545d80, .c = 0x77d50000}, + {.a = 0xed401220, .b = 0xc9f57780, .c = 0xef648000}, + {.a = 0xd7e61221, .b = 0x222af680, .c = 0xeffb8000}, + {.a = 0xf74a1222, .b = 0xbba4df80, .c = 0xf7558000}, + {.a = 0xb4ed1223, .b = 0xd9d57780, .c = 0x6f570000}, + {.a = 0xbc5e1224, .b = 0x32757780, .c = 0xefe78000}, + {.a = 0xe1e01225, .b = 0xb674f780, .c = 0xefd58000}, + {.a = 0xb3101226, .b = 0x65537f80, .c = 0xebee8000}, + {.a = 0xb1841227, .b = 0x65757780, .c = 0xeff18000}, + {.a = 0xf9b31228, .b = 0xcd34df80, .c = 0xf7d50000}, + {.a = 0xb2461229, .b = 0xeff16f80, .c = 0x7b558000}, + {.a = 0xf0da122a, .b = 0xdad4ef80, .c = 0xef978000}, + {.a = 0x82f7122b, .b = 0xcd635f80, .c = 0x7bca8000}, + {.a = 0xd12c122c, .b = 0x89ac7780, .c = 0xefed0000}, + {.a = 0xf393122d, .b = 0xbbacdd80, .c = 0xf7d78000}, + {.a = 0x96c5122e, .b = 0xeeb57780, .c = 0x77538000}, + {.a = 0xf6d1122f, .b = 0x7abd6f80, .c = 0xefd58000}, + {.a = 0xb24e1230, .b = 0x26957780, .c = 0xefd68000}, + {.a = 0x84901231, .b = 0x24eb7700, .c = 0xf7d38000}, + {.a = 0x9af31232, .b = 0xd5756f80, .c = 0x7bef8000}, + {.a = 0xaab51233, .b = 0x9cac7580, .c = 0xeffc8000}, + {.a = 0xbe8e1234, .b = 0x9d656f80, .c = 0x7bd78000}, + {.a = 0xb5b51235, .b = 0xb2acdf80, .c = 0xf7ef0000}, + {.a = 0xecc51236, .b = 0xb5b4f780, .c = 0xefd50000}, + {.a = 0xd6e51237, .b = 0xdcbcef80, .c = 0xefd58000}, + {.a = 0x9d881238, .b = 0x66557780, .c = 0xefe58000}, + {.a = 0xbd721239, .b = 0x32b57780, .c = 0xefde8000}, + {.a = 0xdd57123a, .b = 0xdba0ee80, .c = 0xefc50000}, + {.a = 0xf162123b, .b = 0xdcd57780, .c = 0xefd40000}, + {.a = 0xadfd123c, .b = 0xd2acef80, .c = 0xeff50000}, + {.a = 0xfc0c123d, .b = 0xccacef80, .c = 0xeff78000}, + {.a = 0xcc25123e, .b = 0x256ef700, .c = 0xefc68000}, + {.a = 0x9732123f, .b = 0x32557700, .c = 0xefd58000}, + {.a = 0xa43f1240, .b = 0xba96de80, .c = 0xf7d50000}, + {.a = 0xa34e1241, .b = 0xdd577700, .c = 0xefd78000}, + {.a = 0xd4cc1242, .b = 0x75577780, .c = 0xefc58000}, + {.a = 0xa68c1243, .b = 0xdd6cdf80, .c = 0xfbd70000}, + {.a = 0x87c71244, .b = 0xceaf7f80, .c = 0xebd58000}, + {.a = 0xfb7d1245, .b = 0x49fa7680, .c = 0xefed0000}, + {.a = 0xfe561246, .b = 0xb6f6f780, .c = 0xefd48000}, + {.a = 0x83c21247, .b = 0x656f7780, .c = 0xefeb8000}, + {.a = 0xd9611248, .b = 0x76b77f80, .c = 0xebe50000}, + {.a = 0xc7681249, .b = 0x35bb7f80, .c = 0xefd58000}, + {.a = 0xb85a124a, .b = 0xdceb7700, .c = 0xefd18000}, + {.a = 0xa8da124b, .b = 0xab74ef80, .c = 0xefe18000}, + {.a = 0x802e124c, .b = 0x999c5680, .c = 0xf7df0000}, + {.a = 0x8add124d, .b = 0x64ad7780, .c = 0xefcc8000}, + {.a = 0xbf7c124e, .b = 0xb7625f80, .c = 0x7bca0000}, + {.a = 0x89d3124f, .b = 0xbd64ef80, .c = 0xefc58000}, + {.a = 0x9bf41250, .b = 0xdd56df80, .c = 0xf7c30000}, + {.a = 0xed3f1251, .b = 0xbaacdf80, .c = 0xf7cc8000}, + {.a = 0xae331252, .b = 0x29257f80, .c = 0xe7f58000}, + {.a = 0xf5c51253, .b = 0xa56ef780, .c = 0xefd78000}, + {.a = 0x93c91254, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0xa1b11255, .b = 0xddd4df00, .c = 0xf7d68000}, + {.a = 0xb31a1256, .b = 0xa5547780, .c = 0xefd58000}, + {.a = 0x9d441257, .b = 0xccaf7f80, .c = 0xebcd8000}, + {.a = 0x8ab61258, .b = 0x226af680, .c = 0xeffb0000}, + {.a = 0xae821259, .b = 0x2d757f80, .c = 0xe7de8000}, + {.a = 0xd8d8125a, .b = 0x9d547700, .c = 0x77fb8000}, + {.a = 0xe691125b, .b = 0xcda4dd80, .c = 0xf7ec8000}, + {.a = 0xadb4125c, .b = 0x5af66e80, .c = 0xffd58000}, + {.a = 0xec63125d, .b = 0x32b57780, .c = 0xefe10000}, + {.a = 0x92f4125e, .b = 0x3296ff80, .c = 0xeb758000}, + {.a = 0x9f16125f, .b = 0xba94ef80, .c = 0xefc58000}, + {.a = 0xfc0d1260, .b = 0xd4a4df80, .c = 0xf7cd8000}, + {.a = 0xc7911261, .b = 0x66b57780, .c = 0xeff78000}, + {.a = 0xd3901262, .b = 0x65357f80, .c = 0xebd58000}, + {.a = 0xfa7f1263, .b = 0x26f97f80, .c = 0xebe78000}, + {.a = 0xbfc61264, .b = 0x26b57f80, .c = 0xeffd8000}, + {.a = 0xcd6a1265, .b = 0x5dee7780, .c = 0xf7b58000}, + {.a = 0xe9371266, .b = 0x66b57b80, .c = 0xf7e58000}, + {.a = 0xbafa1267, .b = 0x226ef680, .c = 0xeffb0000}, + {.a = 0xa6ce1268, .b = 0x656d7780, .c = 0xefc50000}, + {.a = 0xa68f1269, .b = 0xced55f80, .c = 0x7b958000}, + {.a = 0xa4a4126a, .b = 0xe6576f00, .c = 0x7bcd8000}, + {.a = 0xb1b5126b, .b = 0xf3757780, .c = 0x6ed30000}, + {.a = 0xabcd126c, .b = 0x35b6ee80, .c = 0xefe50000}, + {.a = 0xbca6126d, .b = 0x247af680, .c = 0xefd10000}, + {.a = 0x8839126e, .b = 0xce7b5d80, .c = 0x77e88000}, + {.a = 0xd44f126f, .b = 0x6d557f80, .c = 0xe7f58000}, + {.a = 0xff5d1270, .b = 0xad6bb780, .c = 0x7fb18000}, + {.a = 0x95a01271, .b = 0x226eee80, .c = 0xefc50000}, + {.a = 0xb3161272, .b = 0xda84ef80, .c = 0xefd78000}, + {.a = 0xc5b11273, .b = 0xcd637f80, .c = 0xe7d78000}, + {.a = 0xd2bb1274, .b = 0xcad75b80, .c = 0x77b58000}, + {.a = 0x89a71275, .b = 0xaa8a6e80, .c = 0xefd78000}, + {.a = 0xdff21276, .b = 0x8b2c7b00, .c = 0xeff78000}, + {.a = 0xbaf01277, .b = 0xcceaef80, .c = 0xef758000}, + {.a = 0xe2ed1278, .b = 0x6d657f80, .c = 0xf7f48000}, + {.a = 0x974a1279, .b = 0x2ab56f80, .c = 0xefc58000}, + {.a = 0xb44b127a, .b = 0xf3756d80, .c = 0x6fd58000}, + {.a = 0xfadb127b, .b = 0xeb3d5d80, .c = 0x77e58000}, + {.a = 0x83ea127c, .b = 0xd4a4df80, .c = 0xf7ed8000}, + {.a = 0x8a12127d, .b = 0x3aecef00, .c = 0xefd78000}, + {.a = 0x8a7c127e, .b = 0xbb64ef80, .c = 0xefc58000}, + {.a = 0xe1a6127f, .b = 0x36b77780, .c = 0xefe58000}, + {.a = 0xbc851280, .b = 0xdd6f7780, .c = 0xefd60000}, + {.a = 0xcd9d1281, .b = 0x22f57380, .c = 0xeffd8000}, + {.a = 0xceff1282, .b = 0xd4b2dd80, .c = 0xf7e68000}, + {.a = 0xe48b1283, .b = 0x9d737700, .c = 0x77d78000}, + {.a = 0xa0621284, .b = 0xd574df80, .c = 0xf7e78000}, + {.a = 0x93231285, .b = 0xd36cef80, .c = 0xeff58000}, + {.a = 0xff3e1286, .b = 0xcaa4f780, .c = 0xf7eb0000}, + {.a = 0xf4071287, .b = 0x6d757f80, .c = 0xf7d38000}, + {.a = 0xc9b31288, .b = 0x6a956f80, .c = 0xefc58000}, + {.a = 0x83531289, .b = 0x326d7780, .c = 0xefc98000}, + {.a = 0xb16a128a, .b = 0xcd757f80, .c = 0xe7e08000}, + {.a = 0x8c85128b, .b = 0xb7545f80, .c = 0x7b948000}, + {.a = 0xd212128c, .b = 0x66a57f80, .c = 0xebd48000}, + {.a = 0xa713128d, .b = 0xbcfc6b80, .c = 0xefa58000}, + {.a = 0xcd35128e, .b = 0xb6f6f780, .c = 0xefd48000}, + {.a = 0xb8d2128f, .b = 0xd9677780, .c = 0x6ed58000}, + {.a = 0xb44e1290, .b = 0xb9d4ef80, .c = 0xebad8000}, + {.a = 0xb98c1291, .b = 0x2d757b80, .c = 0xf7d58000}, + {.a = 0xa3021292, .b = 0xdd517700, .c = 0xefd78000}, + {.a = 0xe8061293, .b = 0xbad5bf80, .c = 0x77b48000}, + {.a = 0xb72d1294, .b = 0x2296f680, .c = 0xefeb0000}, + {.a = 0xafe31295, .b = 0x9d9a6e80, .c = 0xefdd0000}, + {.a = 0xb05d1296, .b = 0x9cbc6d80, .c = 0xefd58000}, + {.a = 0xdf5f1297, .b = 0x32b6ef80, .c = 0xef550000}, + {.a = 0x83111298, .b = 0xd96b7780, .c = 0xefc50000}, + {.a = 0xec0d1299, .b = 0x33f57780, .c = 0xef650000}, + {.a = 0xdfaa129a, .b = 0xcd777f80, .c = 0xe7eb8000}, + {.a = 0xd7e2129b, .b = 0x66ad7f80, .c = 0xebd58000}, + {.a = 0x9c2c129c, .b = 0xcd377f80, .c = 0xe7ed0000}, + {.a = 0xefe1129d, .b = 0xeb775e80, .c = 0x77d38000}, + {.a = 0xddef129e, .b = 0xee7d6f80, .c = 0x7bd58000}, + {.a = 0xf205129f, .b = 0xaaa57780, .c = 0x77cb8000}, + {.a = 0xce6d12a0, .b = 0xcdaebf80, .c = 0x7bf58000}, + {.a = 0xbec212a1, .b = 0xcd76ef80, .c = 0xefe48000}, + {.a = 0xdb7812a2, .b = 0xd574ef80, .c = 0xefe50000}, + {.a = 0xad5712a3, .b = 0x29756f80, .c = 0xefd68000}, + {.a = 0x9d9012a4, .b = 0xa7a96f80, .c = 0x7bdd8000}, + {.a = 0xec2c12a5, .b = 0x656d7780, .c = 0xefc50000}, + {.a = 0x8e3f12a6, .b = 0xcd22df80, .c = 0xf7cf0000}, + {.a = 0xef9112a7, .b = 0xa59cf780, .c = 0xf7f58000}, + {.a = 0xc73c12a8, .b = 0x3ad6df80, .c = 0xf7558000}, + {.a = 0xb9ee12a9, .b = 0x36bb7780, .c = 0xefd30000}, + {.a = 0xab0312aa, .b = 0xaa547780, .c = 0x77a98000}, + {.a = 0xfb3812ab, .b = 0x24db7b00, .c = 0xefd78000}, + {.a = 0xaf8112ac, .b = 0xcd577700, .c = 0xefca8000}, + {.a = 0xea8912ad, .b = 0x3266f700, .c = 0xefd38000}, + {.a = 0xa96712ae, .b = 0xdae37780, .c = 0x77d58000}, + {.a = 0xd5f312af, .b = 0x2cbd7b80, .c = 0xf7d68000}, + {.a = 0xb90612b0, .b = 0xdcecdd80, .c = 0xf7cc8000}, + {.a = 0x922b12b1, .b = 0x35537700, .c = 0xefd78000}, + {.a = 0xb14612b2, .b = 0x236cef80, .c = 0xeec78000}, + {.a = 0xae5a12b3, .b = 0x75457f80, .c = 0xeff58000}, + {.a = 0xe75c12b4, .b = 0x9dac5d80, .c = 0xf7e58000}, + {.a = 0x82ea12b5, .b = 0x2ab36f80, .c = 0xedd68000}, + {.a = 0x94a212b6, .b = 0x977e6f80, .c = 0x7bd48000}, + {.a = 0xaceb12b7, .b = 0xaef56f80, .c = 0x7bd58000}, + {.a = 0xc32d12b8, .b = 0x32d6ff80, .c = 0xeb958000}, + {.a = 0xdfc012b9, .b = 0x5dee7680, .c = 0xefd70000}, + {.a = 0x984512ba, .b = 0xd5a77f80, .c = 0xe7d48000}, + {.a = 0xcabb12bb, .b = 0xce535f80, .c = 0x77b58000}, + {.a = 0x9a4612bc, .b = 0x6d217f80, .c = 0xf7f48000}, + {.a = 0xf0b612bd, .b = 0x99747780, .c = 0x77d78000}, + {.a = 0xccd212be, .b = 0xcd777f80, .c = 0xebe58000}, + {.a = 0xa86912bf, .b = 0xb3ac6f80, .c = 0xef778000}, + {.a = 0xbcfd12c0, .b = 0x2a856f80, .c = 0xefd38000}, + {.a = 0x93b912c1, .b = 0x22b57780, .c = 0xefdb8000}, + {.a = 0xf2d012c2, .b = 0x22557700, .c = 0xefd38000}, + {.a = 0xcf1b12c3, .b = 0xddb6df80, .c = 0xf7ef8000}, + {.a = 0x957112c4, .b = 0xbd74f780, .c = 0xefd58000}, + {.a = 0x974712c5, .b = 0xa56cf780, .c = 0xefc58000}, + {.a = 0x8eb212c6, .b = 0xe6d75f00, .c = 0x7bd58000}, + {.a = 0xb02c12c7, .b = 0xea735f00, .c = 0x77d78000}, + {.a = 0xf6cd12c8, .b = 0x65757780, .c = 0xefed8000}, + {.a = 0x841812c9, .b = 0xbb6eef80, .c = 0xefd40000}, + {.a = 0xaf9912ca, .b = 0xa6b4ff80, .c = 0xebd48000}, + {.a = 0xeb3512cb, .b = 0xcd6f7780, .c = 0xeff58000}, + {.a = 0xac6512cc, .b = 0x99647780, .c = 0xf7d38000}, + {.a = 0xb72e12cd, .b = 0xcab6f780, .c = 0xefd48000}, + {.a = 0xb17d12ce, .b = 0xa5acf780, .c = 0xefc58000}, + {.a = 0xa73712cf, .b = 0x76d57780, .c = 0xefd50000}, + {.a = 0x872912d0, .b = 0xf777bf00, .c = 0x7bd58000}, + {.a = 0xfc6512d1, .b = 0x656b7780, .c = 0xefc78000}, + {.a = 0xd41d12d2, .b = 0xcb74f780, .c = 0xefd58000}, + {.a = 0xa82412d3, .b = 0x9c5b6d80, .c = 0x6fdd8000}, + {.a = 0xcf1112d4, .b = 0xd26cef80, .c = 0xeff58000}, + {.a = 0xd02012d5, .b = 0x36b57780, .c = 0xefd08000}, + {.a = 0xcff012d6, .b = 0x65677780, .c = 0xefd38000}, + {.a = 0xbf8012d7, .b = 0xcdb37f80, .c = 0xe7d50000}, + {.a = 0xfcc012d8, .b = 0xca64df80, .c = 0xf7ce8000}, + {.a = 0x848712d9, .b = 0x7245af80, .c = 0xefe50000}, + {.a = 0x839612da, .b = 0x66e97780, .c = 0xf7f48000}, + {.a = 0x84bb12db, .b = 0x9c545d80, .c = 0x77d50000}, + {.a = 0xd5ec12dc, .b = 0x257f7780, .c = 0xf7db8000}, + {.a = 0xb75d12dd, .b = 0xb2a6ef80, .c = 0xeff48000}, + {.a = 0xdd8f12de, .b = 0xc8bb7f80, .c = 0xef6d0000}, + {.a = 0xd4f912df, .b = 0xcdb57f80, .c = 0xebd48000}, + {.a = 0xc34a12e0, .b = 0xdee75f80, .c = 0xf7b48000}, + {.a = 0xc7f712e1, .b = 0xb7e6f780, .c = 0xef538000}, + {.a = 0x9e3f12e2, .b = 0xdb62d780, .c = 0xf7b78000}, + {.a = 0xaf6012e3, .b = 0xbaa4df80, .c = 0xf7cd0000}, + {.a = 0xf30612e4, .b = 0xc6a4ef80, .c = 0xefc70000}, + {.a = 0xbe3412e5, .b = 0xcb557b80, .c = 0xe7e68000}, + {.a = 0x87f612e6, .b = 0x3236ef80, .c = 0xdeda8000}, + {.a = 0x827512e7, .b = 0xccf2f680, .c = 0xefd58000}, + {.a = 0xbc9112e8, .b = 0xdafcf700, .c = 0xf7d78000}, + {.a = 0xcdf312e9, .b = 0x2ab56f80, .c = 0xefc58000}, + {.a = 0xd1a712ea, .b = 0x25d57e80, .c = 0xf7f70000}, + {.a = 0x935712eb, .b = 0x9d5faf00, .c = 0x7bd48000}, + {.a = 0x808912ec, .b = 0xd16cd780, .c = 0xf7d70000}, + {.a = 0xb8d512ed, .b = 0xa6ae6f80, .c = 0x7bdd8000}, + {.a = 0xe61612ee, .b = 0x9ab36f80, .c = 0x6fe70000}, + {.a = 0xad2012ef, .b = 0xd96b7780, .c = 0xefc90000}, + {.a = 0xe92e12f0, .b = 0x6d6d7f80, .c = 0xf7e58000}, + {.a = 0xa71212f1, .b = 0xa5acf780, .c = 0xefe98000}, + {.a = 0xba6912f2, .b = 0xcef75f80, .c = 0x7bd58000}, + {.a = 0x9e2812f3, .b = 0x99745e80, .c = 0xf7d50000}, + {.a = 0x936012f4, .b = 0xd96b7780, .c = 0xefc50000}, + {.a = 0xdb7d12f5, .b = 0x3ba4ef80, .c = 0xeec58000}, + {.a = 0xcda712f6, .b = 0xd9577780, .c = 0xefc28000}, + {.a = 0xa8cd12f7, .b = 0x66e97780, .c = 0xefc50000}, + {.a = 0xdd8912f8, .b = 0xdd6d7780, .c = 0xf7da8000}, + {.a = 0xe34b12f9, .b = 0xa97aef80, .c = 0xefef8000}, + {.a = 0x87bf12fa, .b = 0xeb245d80, .c = 0x77f58000}, + {.a = 0xadef12fb, .b = 0xbb7eef00, .c = 0xefd48000}, + {.a = 0xec3f12fc, .b = 0x3d96ee80, .c = 0xefe50000}, + {.a = 0xdfc012fd, .b = 0x9b626e80, .c = 0xefd70000}, + {.a = 0x974712fe, .b = 0xcd72bf80, .c = 0x77d58000}, + {.a = 0xa7e712ff, .b = 0xbdb2ef80, .c = 0xeedd8000}, + {.a = 0xed2f1300, .b = 0xed77bf80, .c = 0x77d50000}, + {.a = 0xcc781301, .b = 0xbd66dd80, .c = 0xf7d78000}, + {.a = 0x8a441302, .b = 0xcd7cdf80, .c = 0xf7d68000}, + {.a = 0xa4ee1303, .b = 0xaaba7680, .c = 0xf7eb8000}, + {.a = 0xd9a41304, .b = 0xd36ced80, .c = 0xefd50000}, + {.a = 0xd4881305, .b = 0xed7b7700, .c = 0x77d18000}, + {.a = 0xa67c1306, .b = 0xceacdf80, .c = 0xf7e90000}, + {.a = 0xd8041307, .b = 0xd562ef80, .c = 0xefe78000}, + {.a = 0xd88d1308, .b = 0xcce4df80, .c = 0xf7ed0000}, + {.a = 0x84f11309, .b = 0xdc74f680, .c = 0xeff90000}, + {.a = 0x9102130a, .b = 0x2bb6ee80, .c = 0xefd50000}, + {.a = 0xa7a1130b, .b = 0x99b46b80, .c = 0xef958000}, + {.a = 0xc982130c, .b = 0xbba4de80, .c = 0xf7d58000}, + {.a = 0xa239130d, .b = 0x3baeef80, .c = 0xddc48000}, + {.a = 0xaf97130e, .b = 0xbb24ed80, .c = 0xefc78000}, + {.a = 0x9770130f, .b = 0xbadc6e80, .c = 0xefa58000}, + {.a = 0xc0731310, .b = 0x5575bf80, .c = 0xeeae8000}, + {.a = 0xac301311, .b = 0xddf4df80, .c = 0xf7578000}, + {.a = 0xcbee1312, .b = 0x9aaebf80, .c = 0xf7f58000}, + {.a = 0xd4e11313, .b = 0xdadd7680, .c = 0x77e98000}, + {.a = 0xf7b01314, .b = 0xdd6b7700, .c = 0xefd18000}, + {.a = 0xc5e01315, .b = 0x32aef780, .c = 0xefc48000}, + {.a = 0xd1a21316, .b = 0x32b57780, .c = 0xefde8000}, + {.a = 0x9ac01317, .b = 0x2a717f80, .c = 0xe6eb8000}, + {.a = 0xa50a1318, .b = 0xb56cf780, .c = 0xefc58000}, + {.a = 0xb1f21319, .b = 0xb6b4f780, .c = 0xefc78000}, + {.a = 0xa390131a, .b = 0xdd6f7780, .c = 0xefd58000}, + {.a = 0xbcbb131b, .b = 0xad7ef780, .c = 0xf7d38000}, + {.a = 0xaddb131c, .b = 0xcd757f80, .c = 0xebee8000}, + {.a = 0xf04e131d, .b = 0xea6d5d80, .c = 0x77f58000}, + {.a = 0x89ac131e, .b = 0x66ad7b80, .c = 0xefd58000}, + {.a = 0xcc17131f, .b = 0x2576f680, .c = 0xefd50000}, + {.a = 0xa1141320, .b = 0xed57bf80, .c = 0x77d58000}, + {.a = 0xd73c1321, .b = 0x2b776f80, .c = 0xeed30000}, + {.a = 0xa1291322, .b = 0x356d7780, .c = 0xefca8000}, + {.a = 0xd2cb1323, .b = 0x22def780, .c = 0xef6b8000}, + {.a = 0xafb81324, .b = 0x22caef80, .c = 0xee978000}, + {.a = 0xaabc1325, .b = 0x26eaf780, .c = 0xef5d8000}, + {.a = 0xa8f11326, .b = 0x26957780, .c = 0xefd68000}, + {.a = 0xc4cd1327, .b = 0x66ad7f80, .c = 0xefd48000}, + {.a = 0xf3091328, .b = 0x2d5d6f80, .c = 0xefdb8000}, + {.a = 0x933a1329, .b = 0xcc976f80, .c = 0xefd58000}, + {.a = 0xb1e5132a, .b = 0xcd6d7f80, .c = 0xe7f58000}, + {.a = 0x869d132b, .b = 0xddf4dd80, .c = 0xf7b58000}, + {.a = 0xc6c5132c, .b = 0xbad46e80, .c = 0xefad8000}, + {.a = 0xeb8e132d, .b = 0xdae57780, .c = 0x77d58000}, + {.a = 0xc645132e, .b = 0x9c5c6d80, .c = 0xefd58000}, + {.a = 0x894a132f, .b = 0xb2ac7780, .c = 0xeff58000}, + {.a = 0xb1721330, .b = 0xd54ce780, .c = 0xefff0000}, + {.a = 0xb8a51331, .b = 0x2ab77780, .c = 0xf7da8000}, + {.a = 0xd22e1332, .b = 0x5bda7680, .c = 0xefd10000}, + {.a = 0xe2b81333, .b = 0x26a57780, .c = 0xefd78000}, + {.a = 0xf8621334, .b = 0xaf62f780, .c = 0xf7d78000}, + {.a = 0x9aff1335, .b = 0x52766f80, .c = 0xefd48000}, + {.a = 0x90d31336, .b = 0xdd76dd80, .c = 0xf7ec8000}, + {.a = 0xe62d1337, .b = 0xd56ce780, .c = 0xeffd8000}, + {.a = 0x87071338, .b = 0x23b6ee80, .c = 0xefdd0000}, + {.a = 0xf7cc1339, .b = 0xcd6b7f80, .c = 0xebc98000}, + {.a = 0x8e40133a, .b = 0xeb955d80, .c = 0x77d78000}, + {.a = 0x9b40133b, .b = 0xbba6dd80, .c = 0xf7d58000}, + {.a = 0x8e42133c, .b = 0xccd55f80, .c = 0x77b78000}, + {.a = 0xba74133d, .b = 0xe6d55f80, .c = 0x7bd38000}, + {.a = 0xa7b8133e, .b = 0xddd77780, .c = 0xefb58000}, + {.a = 0xf16a133f, .b = 0x36ed7b80, .c = 0xe7d48000}, + {.a = 0xc6ad1340, .b = 0x36957780, .c = 0xefc58000}, + {.a = 0xe5581341, .b = 0x2354ef80, .c = 0xed978000}, + {.a = 0x81aa1342, .b = 0xa56cf780, .c = 0xefc58000}, + {.a = 0xbe1c1343, .b = 0xcd355f80, .c = 0x77d48000}, + {.a = 0x876e1344, .b = 0x5dd47780, .c = 0xefd58000}, + {.a = 0xf7d71345, .b = 0x65757780, .c = 0xefed8000}, + {.a = 0xce391346, .b = 0xd5776f80, .c = 0x7bae8000}, + {.a = 0xc9221347, .b = 0x75b67f80, .c = 0xefef0000}, + {.a = 0xd6ab1348, .b = 0xbb64ef80, .c = 0xefc58000}, + {.a = 0x80c21349, .b = 0xd4b4ef80, .c = 0xeff30000}, + {.a = 0xc348134a, .b = 0xd5756f80, .c = 0xeed78000}, + {.a = 0xe5c0134b, .b = 0xdd557780, .c = 0xefdc8000}, + {.a = 0xc11a134c, .b = 0xdd6d7780, .c = 0xf7d58000}, + {.a = 0x91d9134d, .b = 0xcd555f80, .c = 0x77b78000}, + {.a = 0xb5c0134e, .b = 0x32557700, .c = 0xeff58000}, + {.a = 0x9401134f, .b = 0x2a756f80, .c = 0xef550000}, + {.a = 0xc78c1350, .b = 0xce75b780, .c = 0x7fe48000}, + {.a = 0x918f1351, .b = 0xd9577700, .c = 0xefd68000}, + {.a = 0xe1c81352, .b = 0x76d57780, .c = 0xefd50000}, + {.a = 0xf74b1353, .b = 0xadfa7780, .c = 0x77558000}, + {.a = 0x9cd51354, .b = 0xd9b77780, .c = 0xefe58000}, + {.a = 0xeac81355, .b = 0xbbac6e80, .c = 0xefc58000}, + {.a = 0xa9a81356, .b = 0x22e57780, .c = 0xefb78000}, + {.a = 0xb93d1357, .b = 0xa576f780, .c = 0xeff78000}, + {.a = 0xbfc51358, .b = 0x37daf780, .c = 0xef658000}, + {.a = 0xbda71359, .b = 0xb9d55d80, .c = 0x77d58000}, + {.a = 0x8322135a, .b = 0x59567700, .c = 0xefd78000}, + {.a = 0xe023135b, .b = 0x9d6f5f80, .c = 0x7bf50000}, + {.a = 0xbcea135c, .b = 0xdd537780, .c = 0x77a98000}, + {.a = 0x8f2e135d, .b = 0x32b57780, .c = 0xefe10000}, + {.a = 0xd471135e, .b = 0xd36cef80, .c = 0xeef58000}, + {.a = 0xddb9135f, .b = 0xe75f5f00, .c = 0x7bd58000}, + {.a = 0xe1401360, .b = 0x4d6fbd80, .c = 0xf7ef8000}, + {.a = 0xc5fe1361, .b = 0x728d7f80, .c = 0xe7f78000}, + {.a = 0x9fd11362, .b = 0x25577780, .c = 0xefd78000}, + {.a = 0x88501363, .b = 0xbbd46d80, .c = 0xef968000}, + {.a = 0xd3ae1364, .b = 0x65757f80, .c = 0xefd58000}, + {.a = 0x906c1365, .b = 0xe9775e80, .c = 0x77d58000}, + {.a = 0xc3141366, .b = 0x91757f80, .c = 0x77e78000}, + {.a = 0xe2f21367, .b = 0x33d6ff80, .c = 0xeb750000}, + {.a = 0xdcd91368, .b = 0x3676f780, .c = 0xefd58000}, + {.a = 0xedfa1369, .b = 0x72d67680, .c = 0xefe50000}, + {.a = 0xb1db136a, .b = 0xcff2ae80, .c = 0x7beb8000}, + {.a = 0x9dc6136b, .b = 0xcea57f80, .c = 0xebea0000}, + {.a = 0xa612136c, .b = 0xccd55f80, .c = 0x7bcb8000}, + {.a = 0xc8ea136d, .b = 0xbbe55d80, .c = 0x77cd8000}, + {.a = 0xb342136e, .b = 0x2af56e80, .c = 0xefd18000}, + {.a = 0xc1cb136f, .b = 0xd976f780, .c = 0xefd78000}, + {.a = 0x815c1370, .b = 0xa5adaf80, .c = 0x7ec68000}, + {.a = 0x834a1371, .b = 0xbba4df80, .c = 0xf6d58000}, + {.a = 0xd17a1372, .b = 0x65757780, .c = 0xefe18000}, + {.a = 0x881a1373, .b = 0xde6cf780, .c = 0xeffe8000}, + {.a = 0xbafb1374, .b = 0x9b8e6e80, .c = 0xefd50000}, + {.a = 0x81231375, .b = 0xd2b77f80, .c = 0xe7d28000}, + {.a = 0x91591376, .b = 0x6ef5bb80, .c = 0xf7d50000}, + {.a = 0xf7321377, .b = 0x5dd67680, .c = 0xefd78000}, + {.a = 0xf4551378, .b = 0xdd54f780, .c = 0xf7ef0000}, + {.a = 0xe7151379, .b = 0xadf06f80, .c = 0x7bda8000}, + {.a = 0xafe3137a, .b = 0x9a966e80, .c = 0xefd50000}, + {.a = 0xaf76137b, .b = 0x33daf680, .c = 0xefe10000}, + {.a = 0xca4a137c, .b = 0xee6bbb80, .c = 0x77e58000}, + {.a = 0xe5e5137d, .b = 0xddbcdf80, .c = 0xf7e58000}, + {.a = 0xcf8f137e, .b = 0xdda4df80, .c = 0xf7d58000}, + {.a = 0x8ba3137f, .b = 0xd564ed80, .c = 0xefe58000}, + {.a = 0xf0e31380, .b = 0xcd57af80, .c = 0x7bda8000}, + {.a = 0xa8ee1381, .b = 0xcd2d7780, .c = 0xefcb8000}, + {.a = 0xafa51382, .b = 0xc5a77f80, .c = 0xeb768000}, + {.a = 0x8aa71383, .b = 0xb6b6f780, .c = 0xefc48000}, + {.a = 0xbccc1384, .b = 0xcd5ef780, .c = 0xeffb0000}, + {.a = 0x8f8e1385, .b = 0x545a6f80, .c = 0xef978000}, + {.a = 0xbbdb1386, .b = 0x32bd7780, .c = 0xefdb8000}, + {.a = 0xd4171387, .b = 0xb6ac7780, .c = 0xefcd8000}, + {.a = 0x8ee61388, .b = 0xb6acf780, .c = 0xefc78000}, + {.a = 0xd2f51389, .b = 0xca7f7f80, .c = 0xe7ed8000}, + {.a = 0xd806138a, .b = 0x3452ef00, .c = 0xeff48000}, + {.a = 0xed21138b, .b = 0x31b55d80, .c = 0xf7e28000}, + {.a = 0x9c2c138c, .b = 0x996d7780, .c = 0x77f70000}, + {.a = 0xe13e138d, .b = 0xb6def700, .c = 0xefcc8000}, + {.a = 0xc5c6138e, .b = 0x226af680, .c = 0xeff98000}, + {.a = 0x9b0f138f, .b = 0x9d5c6f80, .c = 0xefd78000}, + {.a = 0x9c101390, .b = 0xecf33f80, .c = 0xb7578000}, + {.a = 0xbb561391, .b = 0x65ab7780, .c = 0xf7d38000}, + {.a = 0xf6521392, .b = 0xab757780, .c = 0x77ed0000}, + {.a = 0xef7c1393, .b = 0xb6a6f780, .c = 0xefd48000}, + {.a = 0xd10e1394, .b = 0xccd35f80, .c = 0x77958000}, + {.a = 0xa1a31395, .b = 0xdcbcef80, .c = 0xefd58000}, + {.a = 0xe84c1396, .b = 0x75b66f80, .c = 0xefd78000}, + {.a = 0xa8281397, .b = 0xacfd6f80, .c = 0x7b558000}, + {.a = 0x84f41398, .b = 0x2a556f80, .c = 0xefc58000}, + {.a = 0xd2131399, .b = 0x36d6f780, .c = 0xef758000}, + {.a = 0xc455139a, .b = 0xaf766f80, .c = 0x7bdd8000}, + {.a = 0x8d0f139b, .b = 0xa5567780, .c = 0xefd78000}, + {.a = 0xf7ba139c, .b = 0xdd7eef80, .c = 0xefd78000}, + {.a = 0x847a139d, .b = 0xbb6eef80, .c = 0xefc58000}, + {.a = 0xbefe139e, .b = 0x75ab7f80, .c = 0xeff78000}, + {.a = 0x96d4139f, .b = 0x73557f00, .c = 0xf7ed8000}, + {.a = 0x85fd13a0, .b = 0xb994ef80, .c = 0xdf750000}, + {.a = 0x97b113a1, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0xa0d413a2, .b = 0x25557780, .c = 0xefc68000}, + {.a = 0xd65d13a3, .b = 0x9f756f00, .c = 0x7bdb8000}, + {.a = 0xd4aa13a4, .b = 0xb2ac6f80, .c = 0xefd70000}, + {.a = 0xb6af13a5, .b = 0xaad37780, .c = 0x77b38000}, + {.a = 0x8ef213a6, .b = 0xcd677f80, .c = 0xebd50000}, + {.a = 0x9fd113a7, .b = 0x75577780, .c = 0xeff38000}, + {.a = 0x827813a8, .b = 0xe55faf80, .c = 0x7b958000}, + {.a = 0xbb6513a9, .b = 0xdcf37780, .c = 0xf7d58000}, + {.a = 0x864613aa, .b = 0xd2acef80, .c = 0xefd78000}, + {.a = 0xf92d13ab, .b = 0x2a6d7780, .c = 0xf7cb8000}, + {.a = 0xc1a513ac, .b = 0xaef4f780, .c = 0xf7bd8000}, + {.a = 0xf8eb13ad, .b = 0x9abc7780, .c = 0xefeb0000}, + {.a = 0xca4813ae, .b = 0xde5aef80, .c = 0xed938000}, + {.a = 0xbf1113af, .b = 0x32b77780, .c = 0xefda8000}, + {.a = 0xa1eb13b0, .b = 0x9ab7bf80, .c = 0x77d58000}, + {.a = 0xa4bb13b1, .b = 0xda5eef80, .c = 0xed858000}, + {.a = 0xcfc313b2, .b = 0xcb66df80, .c = 0xf7ed0000}, + {.a = 0xcb5a13b3, .b = 0xb674f700, .c = 0xefd58000}, + {.a = 0x984d13b4, .b = 0x9ca45d80, .c = 0x77cd8000}, + {.a = 0xf22913b5, .b = 0x66a97780, .c = 0xefe58000}, + {.a = 0xb75613b6, .b = 0xedd4ed80, .c = 0xdfd78000}, + {.a = 0xedfb13b7, .b = 0x36b6f780, .c = 0xefe48000}, + {.a = 0xcc7313b8, .b = 0xbdb6de80, .c = 0xf7f78000}, + {.a = 0xc64f13b9, .b = 0xdd6f7780, .c = 0xefd78000}, + {.a = 0xc17913ba, .b = 0xb6acf780, .c = 0xefc78000}, + {.a = 0x8a3b13bb, .b = 0xb6aef780, .c = 0xefc48000}, + {.a = 0xdb5e13bc, .b = 0x66a97780, .c = 0xefc28000}, + {.a = 0xfc7113bd, .b = 0xd356ef80, .c = 0xeff50000}, + {.a = 0xbd4813be, .b = 0x92f45780, .c = 0x77db0000}, + {.a = 0x9ba013bf, .b = 0xbcf55d80, .c = 0x77d58000}, + {.a = 0xe44d13c0, .b = 0xaa7fbf80, .c = 0xefd58000}, + {.a = 0xa96113c1, .b = 0xdd6f7780, .c = 0xefdb8000}, + {.a = 0x965413c2, .b = 0xeb735d80, .c = 0x77d58000}, + {.a = 0xecd813c3, .b = 0xd6756f80, .c = 0x7baf8000}, + {.a = 0xda0b13c4, .b = 0x4db5bf80, .c = 0xf7ed8000}, + {.a = 0xc6f313c5, .b = 0x73d57f80, .c = 0xf75d8000}, + {.a = 0xdd5f13c6, .b = 0xccb57780, .c = 0xefdd0000}, + {.a = 0xadf513c7, .b = 0x99727780, .c = 0x77d38000}, + {.a = 0xa01d13c8, .b = 0xcd6cef80, .c = 0xeff58000}, + {.a = 0xdc7c13c9, .b = 0xded47780, .c = 0x77738000}, + {.a = 0xd28a13ca, .b = 0x9ace6e80, .c = 0xefd48000}, + {.a = 0xaf2b13cb, .b = 0xbbb46d80, .c = 0xef968000}, + {.a = 0xaa7013cc, .b = 0xddef7780, .c = 0xefb58000}, + {.a = 0xea2013cd, .b = 0xc6d4ef80, .c = 0xef958000}, + {.a = 0x806c13ce, .b = 0x54be6f80, .c = 0xef948000}, + {.a = 0x9f9f13cf, .b = 0x8ce5bf80, .c = 0x7b758000}, + {.a = 0xa12013d0, .b = 0xc568ff80, .c = 0xf3ff8000}, + {.a = 0xae0813d1, .b = 0xce70b780, .c = 0xf7d58000}, + {.a = 0xe9fb13d2, .b = 0xcd6cdf80, .c = 0xf7e78000}, + {.a = 0x813313d3, .b = 0xcdaced80, .c = 0xeff68000}, + {.a = 0xb2c713d4, .b = 0x65757780, .c = 0xefed8000}, + {.a = 0xfb0813d5, .b = 0xc4ed6f80, .c = 0xef450000}, + {.a = 0x861d13d6, .b = 0x6abf7780, .c = 0xf7d58000}, + {.a = 0xb24513d7, .b = 0x8a547780, .c = 0xefd58000}, + {.a = 0xc3bf13d8, .b = 0x6d6b7f80, .c = 0xf7ce8000}, + {.a = 0xfc5d13d9, .b = 0xbd76dd80, .c = 0xf7d58000}, + {.a = 0xee3113da, .b = 0x256d7780, .c = 0xefc78000}, + {.a = 0xd8b813db, .b = 0xcaa4f780, .c = 0xefd78000}, + {.a = 0xd80e13dc, .b = 0xed577b00, .c = 0x77f58000}, + {.a = 0xfb7313dd, .b = 0x3aa6ee80, .c = 0xefc50000}, + {.a = 0xb53b13de, .b = 0x26957780, .c = 0xefd68000}, + {.a = 0xa02513df, .b = 0xdcb2f780, .c = 0xf7698000}, + {.a = 0xb9bc13e0, .b = 0x2d773f80, .c = 0xf7e78000}, + {.a = 0xbc8e13e1, .b = 0xd36f7f80, .c = 0xe7f58000}, + {.a = 0x88d013e2, .b = 0x6d7e6e80, .c = 0xfbd48000}, + {.a = 0xd3c213e3, .b = 0xbbbd5f80, .c = 0x77550000}, + {.a = 0x957c13e4, .b = 0x2ab56f80, .c = 0xefc58000}, + {.a = 0xe27313e5, .b = 0xeaf57700, .c = 0x77d78000}, + {.a = 0xee8013e6, .b = 0xcabf7f80, .c = 0xefd48000}, + {.a = 0xfa6a13e7, .b = 0xb4f55f80, .c = 0x7b578000}, + {.a = 0xb09a13e8, .b = 0xcd257f80, .c = 0xebd78000}, + {.a = 0xa90813e9, .b = 0x45fa6e80, .c = 0xefd58000}, + {.a = 0xa1e813ea, .b = 0xbad4ef80, .c = 0xef958000}, + {.a = 0x9bfe13eb, .b = 0x32def780, .c = 0xef758000}, + {.a = 0xf7fe13ec, .b = 0x3d96ee80, .c = 0xefe50000}, + {.a = 0xaf3e13ed, .b = 0x2b54df00, .c = 0xf7d68000}, + {.a = 0xf3d613ee, .b = 0xdd66ef80, .c = 0xefc30000}, + {.a = 0xf8e013ef, .b = 0xad657780, .c = 0x77c98000}, + {.a = 0xc35e13f0, .b = 0xcdd77780, .c = 0xef650000}, + {.a = 0xffa713f1, .b = 0xccb57f80, .c = 0xe7e68000}, + {.a = 0xe6ab13f2, .b = 0xd2a4ef80, .c = 0xef658000}, + {.a = 0xc13b13f3, .b = 0x6ea57f80, .c = 0xf7f68000}, + {.a = 0xbc0a13f4, .b = 0xd5677f80, .c = 0xe7b78000}, + {.a = 0x99a113f5, .b = 0x76757780, .c = 0xefd78000}, + {.a = 0xa26a13f6, .b = 0xcd737f80, .c = 0xebe90000}, + {.a = 0x879d13f7, .b = 0xd3777f80, .c = 0xf7ed8000}, + {.a = 0x82fd13f8, .b = 0x26757780, .c = 0xeff18000}, + {.a = 0xbecd13f9, .b = 0x72955f80, .c = 0xf7cb8000}, + {.a = 0xf65d13fa, .b = 0x3b72ef80, .c = 0xeed58000}, + {.a = 0xb00513fb, .b = 0xbcb4ef80, .c = 0xefd58000}, + {.a = 0xf61713fc, .b = 0xd9f57700, .c = 0xefd58000}, + {.a = 0xec3c13fd, .b = 0x656f7780, .c = 0xefdb8000}, + {.a = 0x9e0813fe, .b = 0x23faef80, .c = 0xeda58000}, + {.a = 0x918813ff, .b = 0x6eb57f80, .c = 0xe7d58000}, + {.a = 0xe07b1400, .b = 0x35a6ef80, .c = 0xef758000}, + {.a = 0x92221401, .b = 0x6d6f7f80, .c = 0xe7f58000}, + {.a = 0x919f1402, .b = 0x6d657780, .c = 0xf7c88000}, + {.a = 0xd68f1403, .b = 0xd7776f80, .c = 0x7bad8000}, + {.a = 0xacd21404, .b = 0x5df66e80, .c = 0xefd58000}, + {.a = 0x98211405, .b = 0x29b56d80, .c = 0xef948000}, + {.a = 0xc6811406, .b = 0xecf74f80, .c = 0x7b558000}, + {.a = 0xb57d1407, .b = 0x5eb67680, .c = 0xeff58000}, + {.a = 0xa0271408, .b = 0x3ba6ef80, .c = 0xefc50000}, + {.a = 0xb5991409, .b = 0xd4b56f80, .c = 0x6f538000}, + {.a = 0xa66a140a, .b = 0xd2876f80, .c = 0xefd58000}, + {.a = 0xeee4140b, .b = 0x94fe6f00, .c = 0x7bd58000}, + {.a = 0x93a1140c, .b = 0xedf56f00, .c = 0x7bda8000}, + {.a = 0x97c0140d, .b = 0xc6a4e780, .c = 0xeffd0000}, + {.a = 0x9a44140e, .b = 0x9dec7780, .c = 0xf7d98000}, + {.a = 0xfd51140f, .b = 0x26af7b80, .c = 0xefd78000}, + {.a = 0xf9e41410, .b = 0x376d7780, .c = 0xefca8000}, + {.a = 0xbe801411, .b = 0x3b52ef80, .c = 0xddf58000}, + {.a = 0x85901412, .b = 0xdbd77780, .c = 0x6ec58000}, + {.a = 0xc4dd1413, .b = 0xab5d7700, .c = 0x77e98000}, + {.a = 0xba431414, .b = 0x872bbf80, .c = 0xf3b58000}, + {.a = 0xa8281415, .b = 0x32a57f80, .c = 0xe7f68000}, + {.a = 0xdd471416, .b = 0xcd76ef80, .c = 0xefe58000}, + {.a = 0x91961417, .b = 0x6d6d7f80, .c = 0xf7cf8000}, + {.a = 0x99821418, .b = 0x22bef780, .c = 0xef6b8000}, + {.a = 0xdded1419, .b = 0xa55eff80, .c = 0xebea8000}, + {.a = 0xa92e141a, .b = 0xbd4aef80, .c = 0xefe58000}, + {.a = 0xf942141b, .b = 0x8ed7bf00, .c = 0x7bf58000}, + {.a = 0xaac9141c, .b = 0x32b57780, .c = 0xefe68000}, + {.a = 0x8447141d, .b = 0xd95d7780, .c = 0x77b78000}, + {.a = 0xdcf6141e, .b = 0x32a57780, .c = 0xefd78000}, + {.a = 0xe0cc141f, .b = 0xcd55af80, .c = 0x7bdd8000}, + {.a = 0x835e1420, .b = 0x3ab6de80, .c = 0xf7d50000}, + {.a = 0xfaa11421, .b = 0x676d7780, .c = 0xf7d98000}, + {.a = 0xb2a31422, .b = 0x448e6e80, .c = 0xefd58000}, + {.a = 0x801f1423, .b = 0x6dbd7f80, .c = 0xf7ed0000}, + {.a = 0xef7b1424, .b = 0xcb64db80, .c = 0xf7d58000}, + {.a = 0xa9f61425, .b = 0xdb657780, .c = 0xeed58000}, + {.a = 0xdfd61426, .b = 0xb2d47700, .c = 0xefdf8000}, + {.a = 0x9d071427, .b = 0x5a967f80, .c = 0xebed8000}, + {.a = 0xa5781428, .b = 0xcd6d7f80, .c = 0xe7d58000}, + {.a = 0x85f51429, .b = 0x3ba55f80, .c = 0xf7e88000}, + {.a = 0xf410142a, .b = 0x7b726e80, .c = 0xefd50000}, + {.a = 0xa276142b, .b = 0x35b4ee80, .c = 0xefd50000}, + {.a = 0xb49f142c, .b = 0x2abf6f80, .c = 0xeeeb8000}, + {.a = 0xadeb142d, .b = 0x9b757780, .c = 0x77d78000}, + {.a = 0xd1d4142e, .b = 0xaed27780, .c = 0x77ef0000}, + {.a = 0xde6b142f, .b = 0xbaaeef80, .c = 0xefc48000}, + {.a = 0xcbac1430, .b = 0x2a56ef80, .c = 0xedc50000}, + {.a = 0x9aa81431, .b = 0xdceb7780, .c = 0xefd10000}, + {.a = 0xe7101432, .b = 0x3aaee780, .c = 0xddf58000}, + {.a = 0xe8e41433, .b = 0x2edaef00, .c = 0xedd78000}, + {.a = 0xdf421434, .b = 0x4dabbf80, .c = 0xf7ee8000}, + {.a = 0x84501435, .b = 0x2a757780, .c = 0xf7d58000}, + {.a = 0xd5b01436, .b = 0x756d7780, .c = 0xe7f58000}, + {.a = 0xe4fa1437, .b = 0xaad57780, .c = 0x77b58000}, + {.a = 0xcd8f1438, .b = 0x76557780, .c = 0xefc68000}, + {.a = 0xb5231439, .b = 0x26aef680, .c = 0xefc50000}, + {.a = 0xbe43143a, .b = 0x99757580, .c = 0x77d58000}, + {.a = 0xaad7143b, .b = 0xda5f7780, .c = 0x77b78000}, + {.a = 0xcd84143c, .b = 0x8d55af80, .c = 0x7bd50000}, + {.a = 0xef90143d, .b = 0x32a77f80, .c = 0xe7f68000}, + {.a = 0xb39f143e, .b = 0xbb64dd80, .c = 0xf7d58000}, + {.a = 0x8b88143f, .b = 0x9c6b6d80, .c = 0x6fd70000}, + {.a = 0xc4f81440, .b = 0x32b57780, .c = 0xefde8000}, + {.a = 0xb73b1441, .b = 0x2aad7780, .c = 0xf7c98000}, + {.a = 0xabd81442, .b = 0xa56ef780, .c = 0xefdb0000}, + {.a = 0x95011443, .b = 0xb4b4f780, .c = 0xefd58000}, + {.a = 0x96a51444, .b = 0xe9d77780, .c = 0x776d0000}, + {.a = 0x806a1445, .b = 0xa49ef780, .c = 0xf7e88000}, + {.a = 0xf57b1446, .b = 0x76d57780, .c = 0xefd50000}, + {.a = 0x88ef1447, .b = 0xcd755f80, .c = 0x7bd78000}, + {.a = 0xa0f31448, .b = 0xccabbf80, .c = 0x77c18000}, + {.a = 0xb0ae1449, .b = 0xcb74df80, .c = 0xf7e58000}, + {.a = 0xa651144a, .b = 0xcd575f80, .c = 0x77b78000}, + {.a = 0xbe05144b, .b = 0x9cbd6d80, .c = 0x6fd58000}, + {.a = 0xa5d4144c, .b = 0xd5f16f80, .c = 0x7bab8000}, + {.a = 0x96d8144d, .b = 0x259b7f80, .c = 0xf7f68000}, + {.a = 0x81e4144e, .b = 0x297eef80, .c = 0xeeeb8000}, + {.a = 0xf950144f, .b = 0xb3da6f80, .c = 0xef570000}, + {.a = 0xca751450, .b = 0xdc94db80, .c = 0xf7c58000}, + {.a = 0xa8a51451, .b = 0x34a37f80, .c = 0xe7d68000}, + {.a = 0xcdf41452, .b = 0xccf45b80, .c = 0x77d58000}, + {.a = 0x9db71453, .b = 0x656d7780, .c = 0xefe98000}, + {.a = 0xb5721454, .b = 0x66697780, .c = 0xefc48000}, + {.a = 0xfc551455, .b = 0x725e7780, .c = 0xeff70000}, + {.a = 0xd2b81456, .b = 0x26957780, .c = 0xefd28000}, + {.a = 0x93421457, .b = 0x9b9e6e80, .c = 0xefd50000}, + {.a = 0x9c4b1458, .b = 0xb696f780, .c = 0xefe48000}, + {.a = 0x8ee81459, .b = 0xcd64f780, .c = 0xefdf8000}, + {.a = 0xc7f1145a, .b = 0xad70ef00, .c = 0xfbdc8000}, + {.a = 0xd05e145b, .b = 0xccfaf700, .c = 0xefd18000}, + {.a = 0xa9c8145c, .b = 0xbad7bb80, .c = 0x77b58000}, + {.a = 0xf412145d, .b = 0xaafe7700, .c = 0xf7d78000}, + {.a = 0x8350145e, .b = 0x55bc6f80, .c = 0xefd68000}, + {.a = 0xccf1145f, .b = 0xb4a4f780, .c = 0xefd78000}, + {.a = 0xa3721460, .b = 0x6d95bf80, .c = 0xf7d58000}, + {.a = 0xaa001461, .b = 0x32c6f680, .c = 0xefe70000}, + {.a = 0x92c21462, .b = 0xb2a6df80, .c = 0xf7ed0000}, + {.a = 0x82ec1463, .b = 0xccf55f80, .c = 0x7b658000}, + {.a = 0xb80f1464, .b = 0x4d6c7780, .c = 0xefeb8000}, + {.a = 0xedd81465, .b = 0xcc757780, .c = 0xef658000}, + {.a = 0x8c9a1466, .b = 0x2976ee80, .c = 0xefd50000}, + {.a = 0xf7171467, .b = 0x7b756f80, .c = 0xeed18000}, + {.a = 0xfcb01468, .b = 0xbbb6df80, .c = 0xf7558000}, + {.a = 0xdc791469, .b = 0x33775f80, .c = 0xf5d78000}, + {.a = 0xffba146a, .b = 0xcd677f80, .c = 0xe7d50000}, + {.a = 0x9ab2146b, .b = 0x9a866e80, .c = 0xefd50000}, + {.a = 0x8df6146c, .b = 0x29d56e80, .c = 0xefc58000}, + {.a = 0x95b9146d, .b = 0xcd575f80, .c = 0x7b958000}, + {.a = 0x819e146e, .b = 0xdd7eef80, .c = 0xeed68000}, + {.a = 0xc682146f, .b = 0xcd757780, .c = 0xeed38000}, + {.a = 0x84ff1470, .b = 0x52d53f80, .c = 0xf7958000}, + {.a = 0x94931471, .b = 0xbb53bf80, .c = 0x77b68000}, + {.a = 0x86151472, .b = 0xd6b6ef80, .c = 0xefe58000}, + {.a = 0xcc121473, .b = 0x3bb2ef80, .c = 0xeed58000}, + {.a = 0xa1501474, .b = 0x73757d80, .c = 0xf7df8000}, + {.a = 0x82b61475, .b = 0x2396f680, .c = 0xeff50000}, + {.a = 0x895c1476, .b = 0x4ade7680, .c = 0xefcf8000}, + {.a = 0xbac41477, .b = 0xccb4f780, .c = 0xefc78000}, + {.a = 0x9d7d1478, .b = 0x32757780, .c = 0xefd78000}, + {.a = 0xa1821479, .b = 0xad56f780, .c = 0xe7fb8000}, + {.a = 0xa41c147a, .b = 0x32756f80, .c = 0xef550000}, + {.a = 0xd527147b, .b = 0xd3557f80, .c = 0xf7ed8000}, + {.a = 0x9fb3147c, .b = 0x34bb7f80, .c = 0xefee8000}, + {.a = 0xc2c3147d, .b = 0x36b6f780, .c = 0xefd10000}, + {.a = 0xbb49147e, .b = 0x9cb25b80, .c = 0xf7e68000}, + {.a = 0xdd0f147f, .b = 0xb95fb780, .c = 0x77978000}, + {.a = 0xa2fc1480, .b = 0x65757f80, .c = 0xebeb8000}, + {.a = 0xbdb41481, .b = 0xcd7edf80, .c = 0xf7ed8000}, + {.a = 0x96041482, .b = 0x95556f80, .c = 0x7b9f8000}, + {.a = 0xa0f31483, .b = 0xd5ab7780, .c = 0xe7f28000}, + {.a = 0xa3061484, .b = 0x336d7580, .c = 0xefeb8000}, + {.a = 0x9b3c1485, .b = 0x656d7780, .c = 0xf7d58000}, + {.a = 0xa4ef1486, .b = 0x9d476d80, .c = 0x6fd38000}, + {.a = 0xc20c1487, .b = 0xdd757780, .c = 0xf7c98000}, + {.a = 0x86a41488, .b = 0x2634f700, .c = 0xefd78000}, + {.a = 0xd0c61489, .b = 0x2676ff80, .c = 0xebeb8000}, + {.a = 0xc9df148a, .b = 0x24dd7700, .c = 0xefd58000}, + {.a = 0xb24b148b, .b = 0x26f6f680, .c = 0xefc50000}, + {.a = 0xb4bd148c, .b = 0xcd677f80, .c = 0xebd50000}, + {.a = 0xbcfe148d, .b = 0xb9d55f80, .c = 0x77958000}, + {.a = 0xb3d9148e, .b = 0xd56aef80, .c = 0xefc70000}, + {.a = 0xb8e7148f, .b = 0xeb357580, .c = 0x77d58000}, + {.a = 0x8e521490, .b = 0x33695f80, .c = 0xf7f48000}, + {.a = 0xd4411491, .b = 0x2a756f80, .c = 0xeed08000}, + {.a = 0xb2b21492, .b = 0x6d757f80, .c = 0xf7ec8000}, + {.a = 0xa7fc1493, .b = 0x72655f80, .c = 0xf7d68000}, + {.a = 0x88e11494, .b = 0xd5f56f80, .c = 0x7b558000}, + {.a = 0xadab1495, .b = 0x6d6d7f80, .c = 0xe7f48000}, + {.a = 0xa2a61496, .b = 0xbb546f80, .c = 0xef458000}, + {.a = 0xa47b1497, .b = 0xbaacef80, .c = 0xefd58000}, + {.a = 0xcec61498, .b = 0xdc92df80, .c = 0xf7d58000}, + {.a = 0x9cc11499, .b = 0xddd2de80, .c = 0xf7c98000}, + {.a = 0x90c9149a, .b = 0xd24d6f80, .c = 0xefd78000}, + {.a = 0xf907149b, .b = 0x2af57f80, .c = 0xe7e68000}, + {.a = 0x90c1149c, .b = 0xa254ef80, .c = 0xefad8000}, + {.a = 0xc1c8149d, .b = 0xb6b4e780, .c = 0xefed8000}, + {.a = 0xb268149e, .b = 0xb1565f00, .c = 0x77e58000}, + {.a = 0x82dd149f, .b = 0xbaa6ef80, .c = 0xefd48000}, + {.a = 0xb4f514a0, .b = 0xccad7780, .c = 0xefe80000}, + {.a = 0xa17414a1, .b = 0x6ea57f80, .c = 0xf7f68000}, + {.a = 0xf61914a2, .b = 0x2b7d7f80, .c = 0xe7b78000}, + {.a = 0xdc6b14a3, .b = 0xb25c7700, .c = 0xefeb8000}, + {.a = 0x85df14a4, .b = 0xbb58ed80, .c = 0xefcf8000}, + {.a = 0xe1da14a5, .b = 0xbddc6e80, .c = 0xefb58000}, + {.a = 0x874b14a6, .b = 0xbaa4df80, .c = 0xf7cc8000}, + {.a = 0xc19214a7, .b = 0x3cbaee80, .c = 0xefd50000}, + {.a = 0xcdcb14a8, .b = 0xdcbcef80, .c = 0xefd78000}, + {.a = 0xe59e14a9, .b = 0x26957780, .c = 0xefd58000}, + {.a = 0xafd114aa, .b = 0xced5b780, .c = 0x77978000}, + {.a = 0x96be14ab, .b = 0x559a6e80, .c = 0xefd58000}, + {.a = 0xe75b14ac, .b = 0x99b75b80, .c = 0x77578000}, + {.a = 0xd13114ad, .b = 0xdd957780, .c = 0xefca8000}, + {.a = 0x993b14ae, .b = 0x65ae7780, .c = 0xefcb8000}, + {.a = 0xe71114af, .b = 0xbba6ef80, .c = 0xeec58000}, + {.a = 0x981014b0, .b = 0xd6beee80, .c = 0xfbd78000}, + {.a = 0xcc5714b1, .b = 0xa694f780, .c = 0xf7ec8000}, + {.a = 0xcfcf14b2, .b = 0x9da45d80, .c = 0xf7c98000}, + {.a = 0xad1b14b3, .b = 0xb5b75f80, .c = 0x7b558000}, + {.a = 0xcdfd14b4, .b = 0xcccd7780, .c = 0xef550000}, + {.a = 0xe8ed14b5, .b = 0x639e6e80, .c = 0xefdb0000}, + {.a = 0xc99014b6, .b = 0x35757f80, .c = 0xe7e78000}, + {.a = 0xa5bf14b7, .b = 0x4df26e80, .c = 0xefd58000}, + {.a = 0xce9814b8, .b = 0xdab6f780, .c = 0xf7d68000}, + {.a = 0xd45a14b9, .b = 0xcd6f7f80, .c = 0xebe60000}, + {.a = 0xbcdf14ba, .b = 0x25aeee80, .c = 0xefcd0000}, + {.a = 0xcc6514bb, .b = 0xa56cf780, .c = 0xf7d58000}, + {.a = 0xee2e14bc, .b = 0x35b6ef80, .c = 0xeff50000}, + {.a = 0xf86a14bd, .b = 0xa4aaf780, .c = 0xefc48000}, + {.a = 0xfd1614be, .b = 0xb6f4f780, .c = 0xefd48000}, + {.a = 0x937214bf, .b = 0xceed7780, .c = 0xedc70000}, + {.a = 0xc8b214c0, .b = 0x9aedbf80, .c = 0x77cf0000}, + {.a = 0x975e14c1, .b = 0xda6cef80, .c = 0xefc68000}, + {.a = 0xe9e014c2, .b = 0x76957780, .c = 0xefd58000}, + {.a = 0xc51514c3, .b = 0xbaaedf80, .c = 0xf7d48000}, + {.a = 0xda4314c4, .b = 0x2656f700, .c = 0xefd48000}, + {.a = 0xdadd14c5, .b = 0x2eb57f80, .c = 0xe7d68000}, + {.a = 0x873d14c6, .b = 0xbaacef80, .c = 0xefc58000}, + {.a = 0xa5fc14c7, .b = 0x66a97f80, .c = 0xebcc8000}, + {.a = 0xa37814c8, .b = 0xbd6eef80, .c = 0xefd78000}, + {.a = 0x9d7414c9, .b = 0xd96b7780, .c = 0xefc58000}, + {.a = 0x8fb314ca, .b = 0x8dac7780, .c = 0xef7b0000}, + {.a = 0x9aef14cb, .b = 0x72ad7780, .c = 0xefe68000}, + {.a = 0x866a14cc, .b = 0xaa757700, .c = 0x77d98000}, + {.a = 0xeb7914cd, .b = 0x66557f80, .c = 0xebee8000}, + {.a = 0x9cc014ce, .b = 0x89347780, .c = 0xefd70000}, + {.a = 0xc9d414cf, .b = 0x357d7780, .c = 0xefd50000}, + {.a = 0xa8ab14d0, .b = 0xdddade80, .c = 0xf7c50000}, + {.a = 0xc95d14d1, .b = 0xd4a4ef80, .c = 0xefe58000}, + {.a = 0xe72c14d2, .b = 0x94ab6f80, .c = 0x7be90000}, + {.a = 0xc8c214d3, .b = 0x3ba2ef80, .c = 0xedc50000}, + {.a = 0xd56c14d4, .b = 0xd95b7780, .c = 0x77b18000}, + {.a = 0xb5d214d5, .b = 0x66a97780, .c = 0xefd58000}, + {.a = 0x9c3614d6, .b = 0x5bda7680, .c = 0xefd10000}, + {.a = 0xe93214d7, .b = 0x23d6de80, .c = 0xf7d58000}, + {.a = 0xd20814d8, .b = 0x6d6d7f80, .c = 0xf7e78000}, + {.a = 0xa5ea14d9, .b = 0xdabd7f80, .c = 0xf7d78000}, + {.a = 0xaa9614da, .b = 0xd674df80, .c = 0xf3ea0000}, + {.a = 0xf9f214db, .b = 0x63aa7680, .c = 0xeff90000}, + {.a = 0xcfa214dc, .b = 0x694d7f80, .c = 0xe7f58000}, + {.a = 0xaa0a14dd, .b = 0xddd4df00, .c = 0xf7d58000}, + {.a = 0x904614de, .b = 0x9db37780, .c = 0x77558000}, + {.a = 0x8dcb14df, .b = 0x8a547780, .c = 0xefd58000}, + {.a = 0xf58f14e0, .b = 0xbcedb780, .c = 0xefd50000}, + {.a = 0xba6414e1, .b = 0x6cb97f80, .c = 0xf7d58000}, + {.a = 0xf36214e2, .b = 0xcd357780, .c = 0xeeea0000}, + {.a = 0xf92314e3, .b = 0x396aee80, .c = 0xdfd50000}, + {.a = 0x9a1114e4, .b = 0xcb70df80, .c = 0xf7d58000}, + {.a = 0xc01114e5, .b = 0xcde45f80, .c = 0x77770000}, + {.a = 0x841414e6, .b = 0x9ad25700, .c = 0x77c98000}, + {.a = 0xb2a914e7, .b = 0xccfd5d80, .c = 0x77d48000}, + {.a = 0xb96f14e8, .b = 0x6d657f80, .c = 0xf7d78000}, + {.a = 0xf97b14e9, .b = 0x73867680, .c = 0xefeb0000}, + {.a = 0xf4c814ea, .b = 0xb364ef80, .c = 0xefe58000}, + {.a = 0xf63214eb, .b = 0x94fd6f80, .c = 0x7bd78000}, + {.a = 0x830e14ec, .b = 0x5a9c7780, .c = 0xefca8000}, + {.a = 0x937514ed, .b = 0xdd6aef80, .c = 0xefcf0000}, + {.a = 0xb1f414ee, .b = 0xb2b4df80, .c = 0xf7ec8000}, + {.a = 0xf7d114ef, .b = 0xd3b4ed80, .c = 0xefe58000}, + {.a = 0xcb7214f0, .b = 0xf6b7df80, .c = 0xbbd78000}, + {.a = 0xb9a914f1, .b = 0xaed4f780, .c = 0xf7bd8000}, + {.a = 0xfe2c14f2, .b = 0x67557700, .c = 0xefd58000}, + {.a = 0xe3aa14f3, .b = 0x656f7780, .c = 0xf7d68000}, + {.a = 0xbca414f4, .b = 0xdd577700, .c = 0xefd68000}, + {.a = 0xf88014f5, .b = 0xcd76bf80, .c = 0x77d58000}, + {.a = 0x926414f6, .b = 0x9d757700, .c = 0x77d58000}, + {.a = 0x887614f7, .b = 0xbbaeed80, .c = 0xefc78000}, + {.a = 0xda5b14f8, .b = 0xdd74f780, .c = 0xf7d38000}, + {.a = 0xdbe614f9, .b = 0xcd677f80, .c = 0xebcd8000}, + {.a = 0x8ceb14fa, .b = 0x65757780, .c = 0xf7d58000}, + {.a = 0xb01314fb, .b = 0xdd777780, .c = 0xeff58000}, + {.a = 0xea2814fc, .b = 0xddad7780, .c = 0xefd40000}, + {.a = 0xffac14fd, .b = 0xea7f7380, .c = 0x77d58000}, + {.a = 0xd9fd14fe, .b = 0xbba4dd80, .c = 0xf7d58000}, + {.a = 0x984d14ff, .b = 0x35577700, .c = 0xefd78000}, + {.a = 0xdc0e1500, .b = 0x9b76bf80, .c = 0xf7d48000}, + {.a = 0xd17a1501, .b = 0x33756f80, .c = 0xefdd0000}, + {.a = 0x83c31502, .b = 0x55f66e80, .c = 0xefd58000}, + {.a = 0xab011503, .b = 0xcdaf7780, .c = 0xefda8000}, + {.a = 0xb83c1504, .b = 0xcdd77e80, .c = 0xe7fb0000}, + {.a = 0x98d11505, .b = 0x4db67f80, .c = 0xebd48000}, + {.a = 0xfbf91506, .b = 0xb57eff80, .c = 0xf3eb8000}, + {.a = 0xbdd11507, .b = 0xa4a47b80, .c = 0xefd58000}, + {.a = 0xbec21508, .b = 0xddbcef80, .c = 0xefd68000}, + {.a = 0x8b7c1509, .b = 0xd6d4ef00, .c = 0xefd78000}, + {.a = 0xab41150a, .b = 0xaad67680, .c = 0xf7eb0000}, + {.a = 0xef4b150b, .b = 0xaad47700, .c = 0xf7cb8000}, + {.a = 0xb1e2150c, .b = 0x2cd37f80, .c = 0xf7b58000}, + {.a = 0x9dd5150d, .b = 0xbba6ef80, .c = 0xeeca8000}, + {.a = 0xc878150e, .b = 0xeff56f80, .c = 0x7b558000}, + {.a = 0xe70d150f, .b = 0x76ba7780, .c = 0xefed0000}, + {.a = 0xc6621510, .b = 0x9edbb700, .c = 0x77d78000}, + {.a = 0x9c4b1511, .b = 0x75577780, .c = 0xefc70000}, + {.a = 0xbf201512, .b = 0xdd757780, .c = 0xefd78000}, + {.a = 0xc2371513, .b = 0x55fa6e80, .c = 0xefd58000}, + {.a = 0x8ca61514, .b = 0x26957780, .c = 0xefc68000}, + {.a = 0x9a441515, .b = 0x9d755d80, .c = 0x77d50000}, + {.a = 0xeb7d1516, .b = 0x75757f80, .c = 0xefed0000}, + {.a = 0x81a31517, .b = 0x76bd7f80, .c = 0xeff78000}, + {.a = 0x98c31518, .b = 0xdaa4f780, .c = 0xf7c98000}, + {.a = 0xff861519, .b = 0xcd74f780, .c = 0xefd70000}, + {.a = 0x8680151a, .b = 0xcd757f80, .c = 0xebed8000}, + {.a = 0xb360151b, .b = 0xba94df80, .c = 0xf7d48000}, + {.a = 0x85cb151c, .b = 0xb59cf780, .c = 0xdfe98000}, + {.a = 0xc75f151d, .b = 0x65757780, .c = 0xefe98000}, + {.a = 0xe880151e, .b = 0xcd535f80, .c = 0x77b58000}, + {.a = 0xc5e7151f, .b = 0x9b646e80, .c = 0xefc10000}, + {.a = 0x9c581520, .b = 0x2ab57780, .c = 0xf7da8000}, + {.a = 0xe7de1521, .b = 0x2a6d7780, .c = 0xf7cb8000}, + {.a = 0xe6ee1522, .b = 0xdb72f700, .c = 0xf7d68000}, + {.a = 0xbff51523, .b = 0x2554f680, .c = 0xefd50000}, + {.a = 0xabc91524, .b = 0xcbd77780, .c = 0xef548000}, + {.a = 0x88b41525, .b = 0xc974ef80, .c = 0xefd50000}, + {.a = 0xb14c1526, .b = 0xa6a8f780, .c = 0xefc48000}, + {.a = 0xef031527, .b = 0xcd74f780, .c = 0xefd70000}, + {.a = 0xd3151528, .b = 0x76957780, .c = 0xefd78000}, + {.a = 0xa5eb1529, .b = 0x6eadbf80, .c = 0xf7cf8000}, + {.a = 0xd153152a, .b = 0x22a57780, .c = 0xefd78000}, + {.a = 0xe579152b, .b = 0xd3aaef80, .c = 0xeee18000}, + {.a = 0xbccc152c, .b = 0xcceaf680, .c = 0xefc48000}, + {.a = 0xaedd152d, .b = 0xdcb4ed80, .c = 0xefd58000}, + {.a = 0xc98d152e, .b = 0x2e56ef00, .c = 0xedd58000}, + {.a = 0xda90152f, .b = 0x769d7780, .c = 0xe7f78000}, + {.a = 0x9ed51530, .b = 0xdaacf680, .c = 0xf7cb8000}, + {.a = 0x8c2d1531, .b = 0x6b6d7780, .c = 0xf7d58000}, + {.a = 0xa00d1532, .b = 0xade47780, .c = 0x77ca8000}, + {.a = 0x88ee1533, .b = 0x9d6d6f80, .c = 0x7bd78000}, + {.a = 0xfff91534, .b = 0xcd677f80, .c = 0xebd38000}, + {.a = 0xa2b81535, .b = 0xcd777f80, .c = 0xebed8000}, + {.a = 0xa4911536, .b = 0xcd777780, .c = 0xefe70000}, + {.a = 0x9dd11537, .b = 0xbaf6df80, .c = 0xf6d58000}, + {.a = 0xcb9e1538, .b = 0xc5536f80, .c = 0xefa78000}, + {.a = 0xa8471539, .b = 0xcd5cf780, .c = 0xefef0000}, + {.a = 0xec46153a, .b = 0xaafe7780, .c = 0xf7578000}, + {.a = 0xd530153b, .b = 0xccdf5f80, .c = 0x7b978000}, + {.a = 0xff17153c, .b = 0x72b57780, .c = 0xefd50000}, + {.a = 0x8ea0153d, .b = 0xcd74f780, .c = 0xefdd8000}, + {.a = 0xdc70153e, .b = 0xcd2d6f80, .c = 0xeff98000}, + {.a = 0x86cf153f, .b = 0xcd777780, .c = 0xefd70000}, + {.a = 0x8b3c1540, .b = 0x4e77bf80, .c = 0xf7d78000}, + {.a = 0x82851541, .b = 0x25d6ff80, .c = 0xebb58000}, + {.a = 0xf5451542, .b = 0xe7ab6e80, .c = 0x7bd18000}, + {.a = 0xb0e31543, .b = 0xd4b4df80, .c = 0xf7d58000}, + {.a = 0xd5951544, .b = 0x33acef80, .c = 0xeef58000}, + {.a = 0xa4f61545, .b = 0xad6cef80, .c = 0xeff58000}, + {.a = 0xc5a61546, .b = 0x9cf55d80, .c = 0x77d50000}, + {.a = 0xabba1547, .b = 0xec94ef80, .c = 0xdfd70000}, + {.a = 0xff781548, .b = 0xb6b4f780, .c = 0xefd48000}, + {.a = 0xe4941549, .b = 0x9ded7780, .c = 0x77d98000}, + {.a = 0xa7cb154a, .b = 0xf2b77700, .c = 0x6fd78000}, + {.a = 0x89a0154b, .b = 0x257d7f80, .c = 0xefdb8000}, + {.a = 0xd07a154c, .b = 0x9ded7780, .c = 0x77da8000}, + {.a = 0xa4ce154d, .b = 0x6aa57780, .c = 0xf7d58000}, + {.a = 0xeb74154e, .b = 0xd4957f80, .c = 0xe7e28000}, + {.a = 0xd743154f, .b = 0xbbac6e80, .c = 0xefc58000}, + {.a = 0xd9a91550, .b = 0xcad6de80, .c = 0xf7d50000}, + {.a = 0xba581551, .b = 0x25ed7700, .c = 0xf7d78000}, + {.a = 0xbd201552, .b = 0xeb777780, .c = 0x77ed8000}, + {.a = 0x8b611553, .b = 0x33f6ff80, .c = 0xeb538000}, + {.a = 0xac551554, .b = 0x9af47700, .c = 0xf7d38000}, + {.a = 0xfb871555, .b = 0xb274df80, .c = 0xf7e68000}, + {.a = 0xb8231556, .b = 0xcb755b80, .c = 0x77d58000}, + {.a = 0xc64b1557, .b = 0xa96edf80, .c = 0xf7f78000}, + {.a = 0xde7a1558, .b = 0xbad4df80, .c = 0xf7570000}, + {.a = 0xbc391559, .b = 0xf35b6d80, .c = 0x6fdd8000}, + {.a = 0xa5bb155a, .b = 0x2aef7700, .c = 0xf7db8000}, + {.a = 0xac6f155b, .b = 0xb9d56f80, .c = 0x6e968000}, + {.a = 0xf383155c, .b = 0xa5567780, .c = 0xefc70000}, + {.a = 0xa04f155d, .b = 0xcd77af80, .c = 0x7ef58000}, + {.a = 0xfd00155e, .b = 0xcaaef780, .c = 0xefc50000}, + {.a = 0xe099155f, .b = 0xbcacf780, .c = 0xf7fb8000}, + {.a = 0xe21a1560, .b = 0x4d73bb80, .c = 0xf7e58000}, + {.a = 0xc73f1561, .b = 0x2db57f80, .c = 0xf7d78000}, + {.a = 0xbd7c1562, .b = 0x2636f680, .c = 0xefd58000}, + {.a = 0xd0e31563, .b = 0xa6b4f780, .c = 0xefd78000}, + {.a = 0xe0721564, .b = 0xdd92df80, .c = 0xf7cd8000}, + {.a = 0xec8f1565, .b = 0xd2ed7f80, .c = 0xe7b48000}, + {.a = 0xcbf41566, .b = 0xdcf37780, .c = 0xf7558000}, + {.a = 0xed721567, .b = 0xbbdcef80, .c = 0xef458000}, + {.a = 0xf9031568, .b = 0xcd64df80, .c = 0xf7e78000}, + {.a = 0xe57f1569, .b = 0xd6b6ef80, .c = 0xeff28000}, + {.a = 0x8a8a156a, .b = 0x757b7f80, .c = 0xeff78000}, + {.a = 0xcb69156b, .b = 0xb2d47700, .c = 0xefda8000}, + {.a = 0xa772156c, .b = 0x6ab57f80, .c = 0xe7d58000}, + {.a = 0xba69156d, .b = 0x49ba7680, .c = 0xefd50000}, + {.a = 0xe8ec156e, .b = 0x3276f700, .c = 0xefd38000}, + {.a = 0xf9be156f, .b = 0xd95d7700, .c = 0x77ed8000}, + {.a = 0x85801570, .b = 0xccb6ff80, .c = 0xebd48000}, + {.a = 0x8a861571, .b = 0x2d757f80, .c = 0xe7d78000}, + {.a = 0x96e91572, .b = 0x64aa7680, .c = 0xefe90000}, + {.a = 0x80d31573, .b = 0x67757f80, .c = 0xebeb8000}, + {.a = 0x85b91574, .b = 0xacd47700, .c = 0xf7ea8000}, + {.a = 0xb1561575, .b = 0xa5beff80, .c = 0xebd78000}, + {.a = 0x97bd1576, .b = 0xcd6cf780, .c = 0xefc58000}, + {.a = 0xd38f1577, .b = 0xdd6b7780, .c = 0xefd10000}, + {.a = 0xe1931578, .b = 0xdeed7780, .c = 0xefca8000}, + {.a = 0xb1551579, .b = 0x269d7780, .c = 0xefce8000}, + {.a = 0xf465157a, .b = 0x9c486e80, .c = 0xefd50000}, + {.a = 0x8df1157b, .b = 0xdbaeef80, .c = 0xeec78000}, + {.a = 0xcd40157c, .b = 0x31b77780, .c = 0xefd68000}, + {.a = 0xbcd7157d, .b = 0xa6aaf780, .c = 0xefd08000}, + {.a = 0xd84e157e, .b = 0xddef7680, .c = 0xefc58000}, + {.a = 0x8fec157f, .b = 0x65737f80, .c = 0xebeb8000}, + {.a = 0xf5de1580, .b = 0xdb6cef80, .c = 0xefc50000}, + {.a = 0xb3cc1581, .b = 0xccbcdf80, .c = 0xf7ef0000}, + {.a = 0x999c1582, .b = 0xdad4ef80, .c = 0xef978000}, + {.a = 0xddc91583, .b = 0xcd777f80, .c = 0xebed0000}, + {.a = 0xe2c21584, .b = 0x2996ef80, .c = 0xeee58000}, + {.a = 0xe7a91585, .b = 0xa6b4f780, .c = 0xefd58000}, + {.a = 0xd4171586, .b = 0xb5d67780, .c = 0xef550000}, + {.a = 0x821b1587, .b = 0xa7ed5f80, .c = 0x7b7b0000}, + {.a = 0x9c501588, .b = 0xba84ef80, .c = 0xefe78000}, + {.a = 0xd0bf1589, .b = 0xaeacf780, .c = 0xe7fa8000}, + {.a = 0xa451158a, .b = 0xeb1db780, .c = 0x76d78000}, + {.a = 0xc205158b, .b = 0xbda6ef80, .c = 0xeef28000}, + {.a = 0xa9ae158c, .b = 0xaf76f700, .c = 0xf7d88000}, + {.a = 0xbd1f158d, .b = 0x9dee6f80, .c = 0x7bd48000}, + {.a = 0xe737158e, .b = 0xa2f67780, .c = 0xefb48000}, + {.a = 0xc7de158f, .b = 0xb7f75f80, .c = 0x7b558000}, + {.a = 0xd9301590, .b = 0x2576f680, .c = 0xefd50000}, + {.a = 0x8a361591, .b = 0x256af780, .c = 0xefed8000}, + {.a = 0xca2a1592, .b = 0x3536ff80, .c = 0xebe58000}, + {.a = 0xb22d1593, .b = 0xdd6d7780, .c = 0xefc88000}, + {.a = 0xf0f91594, .b = 0xb5b47780, .c = 0xefd28000}, + {.a = 0xb7a31595, .b = 0xed576b00, .c = 0x7bcd8000}, + {.a = 0xda551596, .b = 0xd96af780, .c = 0xefc58000}, + {.a = 0x9cc21597, .b = 0x356d7780, .c = 0xefcb8000}, + {.a = 0xb1c81598, .b = 0xd9577700, .c = 0xefd68000}, + {.a = 0xd40e1599, .b = 0x37baf780, .c = 0xef518000}, + {.a = 0xe67f159a, .b = 0xdd52f780, .c = 0xf7f70000}, + {.a = 0xe83c159b, .b = 0xd6f4df80, .c = 0xf5e60000}, + {.a = 0xdda9159c, .b = 0x624e7780, .c = 0xefeb0000}, + {.a = 0x802d159d, .b = 0x3a5eef00, .c = 0xefd58000}, + {.a = 0xecd5159e, .b = 0xddb2df80, .c = 0xf7d58000}, + {.a = 0xe729159f, .b = 0x95546f00, .c = 0xefd68000}, + {.a = 0xd63315a0, .b = 0x4d6dbf80, .c = 0xf7ec8000}, + {.a = 0xa65a15a1, .b = 0x2b72ef80, .c = 0xeee68000}, + {.a = 0xc84515a2, .b = 0x26aafb80, .c = 0xefd18000}, + {.a = 0xcf3015a3, .b = 0x36f6f780, .c = 0xef658000}, + {.a = 0xd04215a4, .b = 0x33a57580, .c = 0xefd78000}, + {.a = 0xf00a15a5, .b = 0x9c9c5d80, .c = 0x77d58000}, + {.a = 0xc0a715a6, .b = 0xad647f80, .c = 0x77b58000}, + {.a = 0xa68815a7, .b = 0x32a57f80, .c = 0xebf48000}, + {.a = 0xaf6b15a8, .b = 0x36957780, .c = 0xefd28000}, + {.a = 0xa11915a9, .b = 0x34b97f80, .c = 0xefd28000}, + {.a = 0xb5ae15aa, .b = 0x65257780, .c = 0xf7c88000}, + {.a = 0xf73515ab, .b = 0xbba45d80, .c = 0xf7c58000}, + {.a = 0xb50315ac, .b = 0x227cf780, .c = 0xefeb8000}, + {.a = 0xfa0215ad, .b = 0x65657f80, .c = 0xebd48000}, + {.a = 0xe15415ae, .b = 0x76d57780, .c = 0xefc70000}, + {.a = 0xf16915af, .b = 0xb5ac7780, .c = 0xefed8000}, + {.a = 0xf3df15b0, .b = 0xa6e3bf80, .c = 0xf7b58000}, + {.a = 0xf26315b1, .b = 0x8b57bf80, .c = 0xefad8000}, + {.a = 0xc24915b2, .b = 0x669d7f80, .c = 0xebe58000}, + {.a = 0xe45215b3, .b = 0xb65cf700, .c = 0xefce8000}, + {.a = 0x958715b4, .b = 0x355d7f00, .c = 0xefd78000}, + {.a = 0xf3a715b5, .b = 0x256b7780, .c = 0xefc30000}, + {.a = 0x864a15b6, .b = 0xcd62ff80, .c = 0xebcf8000}, + {.a = 0xd4dd15b7, .b = 0xa6b4ff80, .c = 0xebd58000}, + {.a = 0x811c15b8, .b = 0x3386f680, .c = 0xefeb0000}, + {.a = 0x830715b9, .b = 0x257d7780, .c = 0xf7e90000}, + {.a = 0xd5e515ba, .b = 0xa56c7780, .c = 0xefe98000}, + {.a = 0xb64215bb, .b = 0xbbd6dd80, .c = 0xf7d78000}, + {.a = 0xa05215bc, .b = 0xeb7d7780, .c = 0x77d48000}, + {.a = 0xb73415bd, .b = 0xbaa4ef80, .c = 0xefc58000}, + {.a = 0xa06215be, .b = 0xbdd4df00, .c = 0xf7d58000}, + {.a = 0xd0ff15bf, .b = 0xb4b4f780, .c = 0xefd58000}, + {.a = 0xa3ac15c0, .b = 0x6ea9bf80, .c = 0xf7cf8000}, + {.a = 0xdd9e15c1, .b = 0xdd62f780, .c = 0xf7d68000}, + {.a = 0xe5d415c2, .b = 0x2a7cee80, .c = 0xefd50000}, + {.a = 0x9cd015c3, .b = 0xa76c6f80, .c = 0x7bd58000}, + {.a = 0x804115c4, .b = 0xbbe6df80, .c = 0xf7558000}, + {.a = 0xb24315c5, .b = 0x9dd47780, .c = 0xf7b18000}, + {.a = 0xba7915c6, .b = 0xcaaef780, .c = 0xefc48000}, + {.a = 0xcaa815c7, .b = 0xd35eef80, .c = 0xefe50000}, + {.a = 0x9ace15c8, .b = 0x2db57f80, .c = 0xe7e48000}, + {.a = 0x869015c9, .b = 0x2296f680, .c = 0xeff50000}, + {.a = 0xe68515ca, .b = 0xda5d7780, .c = 0x77b58000}, + {.a = 0xe1e115cb, .b = 0xbbbc6e80, .c = 0xefa58000}, + {.a = 0xa6b515cc, .b = 0x65567700, .c = 0xefd48000}, + {.a = 0x8a5915cd, .b = 0x2a856f80, .c = 0xefd38000}, + {.a = 0xc77f15ce, .b = 0x325ef680, .c = 0xeff50000}, + {.a = 0xf76215cf, .b = 0xb6e8f780, .c = 0xefc58000}, + {.a = 0xa79915d0, .b = 0xccb2df80, .c = 0xf7d50000}, + {.a = 0xd0f115d1, .b = 0x37757f80, .c = 0xefda8000}, + {.a = 0xa06a15d2, .b = 0xbb64ef80, .c = 0xefc58000}, + {.a = 0xc66c15d3, .b = 0xbbd45d80, .c = 0xf7d68000}, + {.a = 0xec5915d4, .b = 0x36b57780, .c = 0xefd28000}, + {.a = 0xeb4a15d5, .b = 0x756b7f80, .c = 0xe7e78000}, + {.a = 0x99d915d6, .b = 0x6b7b7f80, .c = 0xe7d60000}, + {.a = 0xeacb15d7, .b = 0xddd57780, .c = 0xeed28000}, + {.a = 0x915f15d8, .b = 0xbd66dd80, .c = 0xf7d58000}, + {.a = 0x9b3515d9, .b = 0xb2b6df80, .c = 0xf7d50000}, + {.a = 0x8cf215da, .b = 0x75477780, .c = 0xefeb8000}, + {.a = 0xdce115db, .b = 0xcd74f780, .c = 0xefd58000}, + {.a = 0xfe7615dc, .b = 0x9d345d80, .c = 0x77d50000}, + {.a = 0xc93115dd, .b = 0xba94df80, .c = 0xf7c58000}, + {.a = 0xa53b15de, .b = 0xcaa4f780, .c = 0xf7e90000}, + {.a = 0xeb7815df, .b = 0x8eafb780, .c = 0xf7cf0000}, + {.a = 0xde5015e0, .b = 0x39935f80, .c = 0xf7578000}, + {.a = 0xa9ed15e1, .b = 0x26997780, .c = 0xefd58000}, + {.a = 0x88c215e2, .b = 0xcd277f80, .c = 0xe7f58000}, + {.a = 0x8dd015e3, .b = 0x8aac7780, .c = 0xefc50000}, + {.a = 0xd4c315e4, .b = 0x9d5c6f80, .c = 0x6fdf8000}, + {.a = 0xba1615e5, .b = 0x6ea57f80, .c = 0xf7f50000}, + {.a = 0x997415e6, .b = 0x36b77f80, .c = 0xe7e58000}, + {.a = 0xbfa915e7, .b = 0xcaa4f780, .c = 0xf7e90000}, + {.a = 0xf8b415e8, .b = 0xdb7cdd80, .c = 0xf7d48000}, + {.a = 0x8a7315e9, .b = 0xa56e6f80, .c = 0x7bc98000}, + {.a = 0x925a15ea, .b = 0xbabeef00, .c = 0xefe48000}, + {.a = 0xcfbd15eb, .b = 0xeb735d80, .c = 0x77d58000}, + {.a = 0xb03715ec, .b = 0xbaa4ef80, .c = 0xefc58000}, + {.a = 0xc79315ed, .b = 0xdb66ef80, .c = 0xefcd0000}, + {.a = 0xb5e615ee, .b = 0x8ab47780, .c = 0xefe70000}, + {.a = 0xccef15ef, .b = 0xaab77780, .c = 0x77eb0000}, + {.a = 0xb5d315f0, .b = 0x6d2fbf80, .c = 0xf7ee8000}, + {.a = 0xce4f15f1, .b = 0x66ad7f80, .c = 0xf7f70000}, + {.a = 0xb0be15f2, .b = 0xd3aced80, .c = 0xeff58000}, + {.a = 0xfc3215f3, .b = 0xbb5cef80, .c = 0xef958000}, + {.a = 0xd3f615f4, .b = 0x656d7f80, .c = 0xebd48000}, + {.a = 0x86f815f5, .b = 0xd95b7f80, .c = 0xefd18000}, + {.a = 0xec5315f6, .b = 0xdeab7780, .c = 0xeff58000}, + {.a = 0x9fa115f7, .b = 0xbcdc6e80, .c = 0xefdd8000}, + {.a = 0xa9e915f8, .b = 0x75bd7f80, .c = 0xefd40000}, + {.a = 0xa83e15f9, .b = 0x73615f80, .c = 0xf7ec8000}, + {.a = 0xcbaf15fa, .b = 0x36bef780, .c = 0xef558000}, + {.a = 0x859015fb, .b = 0xdd7b6f80, .c = 0xefd58000}, + {.a = 0x87df15fc, .b = 0x997c7780, .c = 0xefef8000}, + {.a = 0xa13315fd, .b = 0xdb54df00, .c = 0xf7d58000}, + {.a = 0xeaf315fe, .b = 0xaed57780, .c = 0x77ef0000}, + {.a = 0xcc0715ff, .b = 0xbba4dd80, .c = 0xf7d58000}, + {.a = 0xb2d41600, .b = 0xe8d4b700, .c = 0x77d78000}, + {.a = 0xfa311601, .b = 0xd9ad7780, .c = 0xefcd8000}, + {.a = 0xd0551602, .b = 0x3686f700, .c = 0xefd58000}, + {.a = 0xd0b91603, .b = 0xd34f7b80, .c = 0xe7f58000}, + {.a = 0x80641604, .b = 0xbab65e80, .c = 0xf7d70000}, + {.a = 0xb1d11605, .b = 0xcd677f80, .c = 0xebca0000}, + {.a = 0x9d8d1606, .b = 0x9d956f80, .c = 0x6ecf8000}, + {.a = 0x9c9c1607, .b = 0xcd575f80, .c = 0x7b958000}, + {.a = 0x804f1608, .b = 0x2cb57b80, .c = 0xf7d48000}, + {.a = 0xeab11609, .b = 0xedf27780, .c = 0x776f8000}, + {.a = 0xffc6160a, .b = 0xba5c6d80, .c = 0xefd78000}, + {.a = 0xeaec160b, .b = 0x2b556f80, .c = 0xedd78000}, + {.a = 0xdf07160c, .b = 0x548e6e80, .c = 0xefd58000}, + {.a = 0x9f48160d, .b = 0x34bd7f80, .c = 0xefd68000}, + {.a = 0x8fad160e, .b = 0x325d5f80, .c = 0xf7d78000}, + {.a = 0xaf2c160f, .b = 0xb9e46f80, .c = 0xef570000}, + {.a = 0xc19e1610, .b = 0xddf57680, .c = 0xefd18000}, + {.a = 0xd8341611, .b = 0xcd74b780, .c = 0x7ff58000}, + {.a = 0xce781612, .b = 0xdd7ef780, .c = 0xf7d28000}, + {.a = 0x9b591613, .b = 0x99e67780, .c = 0x77558000}, + {.a = 0xa2ea1614, .b = 0xbadc6e80, .c = 0xefb58000}, + {.a = 0xf3951615, .b = 0xa56c7780, .c = 0xefc70000}, + {.a = 0x87131616, .b = 0xba9cef80, .c = 0xefc58000}, + {.a = 0x8f441617, .b = 0xe66d5e80, .c = 0x7bfd8000}, + {.a = 0xac1c1618, .b = 0x2b757780, .c = 0xf7da8000}, + {.a = 0xbc0f1619, .b = 0x66ab7780, .c = 0xf7d78000}, + {.a = 0x8cf0161a, .b = 0x37657f80, .c = 0xeef78000}, + {.a = 0x8087161b, .b = 0x72d67680, .c = 0xefe50000}, + {.a = 0xb165161c, .b = 0x32956f80, .c = 0xefd38000}, + {.a = 0xaaff161d, .b = 0x2762fe80, .c = 0xebeb8000}, + {.a = 0xdee6161e, .b = 0x736d6d80, .c = 0xefd58000}, + {.a = 0xe048161f, .b = 0x36b6f780, .c = 0xefd50000}, + {.a = 0xf3651620, .b = 0xccb6ff80, .c = 0xebd48000}, + {.a = 0xe6ee1621, .b = 0x25ad7780, .c = 0xf7d58000}, + {.a = 0xc9281622, .b = 0xed5b3f80, .c = 0xb7958000}, + {.a = 0xd6f21623, .b = 0x9d75b780, .c = 0x77d28000}, + {.a = 0xa9201624, .b = 0x2aa57780, .c = 0xf7ca8000}, + {.a = 0xc1211625, .b = 0x9cf47700, .c = 0xf7d78000}, + {.a = 0xa16c1626, .b = 0x2374ef80, .c = 0xeed58000}, + {.a = 0xd45e1627, .b = 0x32def780, .c = 0xefbb8000}, + {.a = 0xd46d1628, .b = 0xbad7bf80, .c = 0x77958000}, + {.a = 0x90731629, .b = 0xdccb7780, .c = 0xefb28000}, + {.a = 0xe27d162a, .b = 0x626e7680, .c = 0xefeb0000}, + {.a = 0x8ebf162b, .b = 0x9b4c6f80, .c = 0xefd58000}, + {.a = 0xcf19162c, .b = 0x4d57bf80, .c = 0xf7958000}, + {.a = 0xc3b8162d, .b = 0x55f66e80, .c = 0xefd50000}, + {.a = 0xcccc162e, .b = 0x2af57780, .c = 0xf7558000}, + {.a = 0xdaa9162f, .b = 0xb9986d80, .c = 0xefa28000}, + {.a = 0x877a1630, .b = 0x65777f80, .c = 0xebed8000}, + {.a = 0xbc511631, .b = 0xb576f780, .c = 0xefc78000}, + {.a = 0xdc3e1632, .b = 0x9d77b780, .c = 0x6fd50000}, + {.a = 0xaf3c1633, .b = 0xcd757780, .c = 0xefd48000}, + {.a = 0x8e8d1634, .b = 0xad757f80, .c = 0x77e58000}, + {.a = 0xf0d51635, .b = 0xa6b4f780, .c = 0xefc58000}, + {.a = 0xcd561636, .b = 0xd544ef80, .c = 0xefe70000}, + {.a = 0xdcf41637, .b = 0xcd757700, .c = 0xefd58000}, + {.a = 0xa1c11638, .b = 0xaf74f700, .c = 0xf7dc8000}, + {.a = 0xec7d1639, .b = 0xb6a4f780, .c = 0xefd78000}, + {.a = 0x894a163a, .b = 0xbad26e80, .c = 0xefa78000}, + {.a = 0xb5fc163b, .b = 0xd354ed80, .c = 0xefe58000}, + {.a = 0xdf93163c, .b = 0xddb4ed80, .c = 0xefdd8000}, + {.a = 0x90ef163d, .b = 0x656f7780, .c = 0xefdb8000}, + {.a = 0xcd45163e, .b = 0xaedcf780, .c = 0xf7bd8000}, + {.a = 0xeb8f163f, .b = 0xe7e75f80, .c = 0x7b558000}, + {.a = 0x875c1640, .b = 0xb574f780, .c = 0xefd58000}, + {.a = 0xae6d1641, .b = 0x77597780, .c = 0xefe58000}, + {.a = 0xe5021642, .b = 0xbd56f780, .c = 0xf7fb8000}, + {.a = 0xdf311643, .b = 0xbd62ef80, .c = 0xefe78000}, + {.a = 0xae9a1644, .b = 0x33755d80, .c = 0xf7ff8000}, + {.a = 0xa72a1645, .b = 0x36b57780, .c = 0xefef8000}, + {.a = 0xc1471646, .b = 0x75457f80, .c = 0xeff58000}, + {.a = 0xcf841647, .b = 0xa6b0ff80, .c = 0xebed0000}, + {.a = 0xa0c01648, .b = 0x656d7780, .c = 0xefc50000}, + {.a = 0xc8191649, .b = 0x756d7780, .c = 0xefc48000}, + {.a = 0xdbd5164a, .b = 0x3376f680, .c = 0xefe58000}, + {.a = 0xade4164b, .b = 0xbb66ed80, .c = 0xefc78000}, + {.a = 0x8b81164c, .b = 0x35557780, .c = 0xefd18000}, + {.a = 0x98d6164d, .b = 0xd9577780, .c = 0xefd30000}, + {.a = 0xf16a164e, .b = 0xb9556f80, .c = 0x6e858000}, + {.a = 0x80ea164f, .b = 0x6d757f80, .c = 0xf7ed8000}, + {.a = 0xa64e1650, .b = 0xccb57780, .c = 0xefdd0000}, + {.a = 0x8f5c1651, .b = 0x656f7780, .c = 0xefdb8000}, + {.a = 0x885a1652, .b = 0x4bda7680, .c = 0xefd38000}, + {.a = 0x90e61653, .b = 0x46c66e80, .c = 0xef958000}, + {.a = 0xe8c11654, .b = 0xd95b7780, .c = 0x77b58000}, + {.a = 0xa08b1655, .b = 0xbad55f80, .c = 0x77568000}, + {.a = 0xc2021656, .b = 0x33b4ef80, .c = 0xeee58000}, + {.a = 0xdf5e1657, .b = 0x25557780, .c = 0xef550000}, + {.a = 0x97a11658, .b = 0x2a656f80, .c = 0xefc58000}, + {.a = 0xbd331659, .b = 0x6d777f80, .c = 0xe7ed8000}, + {.a = 0x8be9165a, .b = 0xdb777f80, .c = 0xf7eb8000}, + {.a = 0xc951165b, .b = 0x6abd7f80, .c = 0xf3d58000}, + {.a = 0xe3c5165c, .b = 0xdd757780, .c = 0xf7d38000}, + {.a = 0xe960165d, .b = 0x6dadbd80, .c = 0xf7e18000}, + {.a = 0xfcc5165e, .b = 0x4dae7f80, .c = 0xebca8000}, + {.a = 0x97f2165f, .b = 0xc96af780, .c = 0xe7f58000}, + {.a = 0xdcf11660, .b = 0xcab6f700, .c = 0xefd48000}, + {.a = 0xcb521661, .b = 0x7b755f80, .c = 0xf7d48000}, + {.a = 0x85a11662, .b = 0x2b756f80, .c = 0xeed30000}, + {.a = 0xe9171663, .b = 0x33b4ef80, .c = 0xeee68000}, + {.a = 0xba2e1664, .b = 0xcd74f780, .c = 0xefe58000}, + {.a = 0x8ce01665, .b = 0xa6b6f780, .c = 0xeff48000}, + {.a = 0xde6c1666, .b = 0x336ef680, .c = 0xeffb0000}, + {.a = 0xf9711667, .b = 0x5d947780, .c = 0xefd98000}, + {.a = 0xbef31668, .b = 0xddd4df80, .c = 0xf7458000}, + {.a = 0x91391669, .b = 0xc5a4ef80, .c = 0xefc58000}, + {.a = 0xd7f4166a, .b = 0xc4d4bd80, .c = 0xefad8000}, + {.a = 0xd4cb166b, .b = 0xbaac6e80, .c = 0xef958000}, + {.a = 0xfa02166c, .b = 0x2aa57780, .c = 0xf7f78000}, + {.a = 0x9a1f166d, .b = 0xc4aaef80, .c = 0xefd18000}, + {.a = 0xf1e3166e, .b = 0x5bea7680, .c = 0xefc30000}, + {.a = 0xe78c166f, .b = 0x3296f780, .c = 0xef6b8000}, + {.a = 0xea161670, .b = 0x92acbf80, .c = 0xf7e58000}, + {.a = 0xdfdd1671, .b = 0x2af77780, .c = 0xf77b0000}, + {.a = 0xc6821672, .b = 0xd4acef80, .c = 0xefe50000}, + {.a = 0x876a1673, .b = 0x2a56ef00, .c = 0xedcd8000}, + {.a = 0xecd41674, .b = 0x6b746e80, .c = 0xedd50000}, + {.a = 0xb00c1675, .b = 0xbab55f80, .c = 0x77958000}, + {.a = 0x9f781676, .b = 0xc6b4ef80, .c = 0xefd78000}, + {.a = 0xba711677, .b = 0x66a57780, .c = 0xf7ed0000}, + {.a = 0xd49b1678, .b = 0x316eff80, .c = 0xebfd8000}, + {.a = 0xec5a1679, .b = 0x3ab6ee80, .c = 0xefd50000}, + {.a = 0xa078167a, .b = 0xd5b4ef80, .c = 0xeee58000}, + {.a = 0x86c9167b, .b = 0x59f67b80, .c = 0xebac8000}, + {.a = 0xa067167c, .b = 0xd92cf780, .c = 0xefee8000}, + {.a = 0x8fa8167d, .b = 0x9d557780, .c = 0x6ff70000}, + {.a = 0xba4e167e, .b = 0x2cb57f80, .c = 0xf7e28000}, + {.a = 0xed57167f, .b = 0xd4b4ef80, .c = 0xeff30000}, + {.a = 0xf08c1680, .b = 0xddd4df80, .c = 0xf7570000}, + {.a = 0xedaa1681, .b = 0xcd737f80, .c = 0xebd68000}, + {.a = 0x93e11682, .b = 0x3aa6ee80, .c = 0xefc50000}, + {.a = 0xe0bc1683, .b = 0xbb5cef80, .c = 0xef958000}, + {.a = 0xc7bd1684, .b = 0xb6f6f780, .c = 0xefd48000}, + {.a = 0xcec21685, .b = 0x2566f680, .c = 0xefd30000}, + {.a = 0xd8181686, .b = 0xed755f00, .c = 0x77d18000}, + {.a = 0x9daf1687, .b = 0x26b6f680, .c = 0xefd50000}, + {.a = 0xb32e1688, .b = 0xb95bb780, .c = 0x77918000}, + {.a = 0xe2f11689, .b = 0xd5b6ed80, .c = 0xefe58000}, + {.a = 0xf780168a, .b = 0xb756f780, .c = 0xefe58000}, + {.a = 0xfd92168b, .b = 0xddd2df00, .c = 0xfbdf8000}, + {.a = 0xde7a168c, .b = 0xcd577f80, .c = 0xe7b48000}, + {.a = 0xaf04168d, .b = 0xdae57780, .c = 0x77d18000}, + {.a = 0xc71e168e, .b = 0x76657f80, .c = 0xeff78000}, + {.a = 0xf2a2168f, .b = 0x3aa6df80, .c = 0xf7cd0000}, + {.a = 0xcf6c1690, .b = 0xad94ef80, .c = 0xde968000}, + {.a = 0xcba81691, .b = 0xd6977f80, .c = 0xe7f58000}, + {.a = 0xac6b1692, .b = 0xaafa6e80, .c = 0xefd78000}, + {.a = 0xb98a1693, .b = 0x656b7780, .c = 0xf7d28000}, + {.a = 0x91df1694, .b = 0x65757780, .c = 0xefed8000}, + {.a = 0xdb0b1695, .b = 0xdd6b6f80, .c = 0xeec58000}, + {.a = 0x8b051696, .b = 0xccad7f80, .c = 0xebca8000}, + {.a = 0x84361697, .b = 0x65757780, .c = 0xefe58000}, + {.a = 0xc8811698, .b = 0xb6b4f780, .c = 0xefd50000}, + {.a = 0xb78d1699, .b = 0xc9757780, .c = 0xef550000}, + {.a = 0xc32d169a, .b = 0x6b7dbf80, .c = 0xf3d70000}, + {.a = 0x8006169b, .b = 0xb5547780, .c = 0xefd50000}, + {.a = 0xbc4b169c, .b = 0xdacd7f80, .c = 0xeff48000}, + {.a = 0xd7b4169d, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0xc390169e, .b = 0x3b72ef80, .c = 0xeed58000}, + {.a = 0x8201169f, .b = 0xb4da5f00, .c = 0x7bc98000}, + {.a = 0xf96e16a0, .b = 0xcdaedf80, .c = 0xf7f50000}, + {.a = 0xff2116a1, .b = 0xdcf4f780, .c = 0xf7558000}, + {.a = 0xc88b16a2, .b = 0xdce4df80, .c = 0xf74d8000}, + {.a = 0xa11d16a3, .b = 0xdd74f780, .c = 0xf7d38000}, + {.a = 0xa69316a4, .b = 0xdbad7780, .c = 0x6d868000}, + {.a = 0xf31a16a5, .b = 0xb3757780, .c = 0x6eeb8000}, + {.a = 0xd2f816a6, .b = 0x73757f80, .c = 0xe7d58000}, + {.a = 0xbf0216a7, .b = 0x65777780, .c = 0xefc38000}, + {.a = 0xae4416a8, .b = 0x2bb4ef80, .c = 0xeee68000}, + {.a = 0xd72416a9, .b = 0xc6acff80, .c = 0xf3ff0000}, + {.a = 0xd46216aa, .b = 0xed757700, .c = 0x77d78000}, + {.a = 0xdf8116ab, .b = 0x72b57b80, .c = 0xe7d40000}, + {.a = 0x90bb16ac, .b = 0xb6b6f780, .c = 0xefd50000}, + {.a = 0x942716ad, .b = 0xe7d55f80, .c = 0x7b578000}, + {.a = 0xdf6b16ae, .b = 0x37f6f680, .c = 0xefd58000}, + {.a = 0xf0f216af, .b = 0xb6f4f780, .c = 0xefd48000}, + {.a = 0xd95c16b0, .b = 0x9d6d9f80, .c = 0x7bc58000}, + {.a = 0x9cc316b1, .b = 0xdcbced80, .c = 0xefd58000}, + {.a = 0xc5ca16b2, .b = 0xbbd55f80, .c = 0x77570000}, + {.a = 0x8e9616b3, .b = 0xbb64dd80, .c = 0xf7d78000}, + {.a = 0xd2c716b4, .b = 0xdd557700, .c = 0xefd48000}, + {.a = 0x987d16b5, .b = 0xa7a56f80, .c = 0x7bc98000}, + {.a = 0x8b1b16b6, .b = 0xb2f6df80, .c = 0xf7e78000}, + {.a = 0x926216b7, .b = 0xb9d35e80, .c = 0x77f58000}, + {.a = 0xdafd16b8, .b = 0x22d77700, .c = 0xefdf8000}, + {.a = 0x83b416b9, .b = 0xcd64df80, .c = 0xf7e78000}, + {.a = 0x8dab16ba, .b = 0xbbd4df80, .c = 0xf7458000}, + {.a = 0xedb116bb, .b = 0xddd4ef80, .c = 0xef458000}, + {.a = 0xd45516bc, .b = 0xcd757780, .c = 0xefd50000}, + {.a = 0xf9d016bd, .b = 0xccf55f80, .c = 0x77d48000}, + {.a = 0x92a516be, .b = 0x2986ef80, .c = 0xeed58000}, + {.a = 0x87cb16bf, .b = 0xccf55d80, .c = 0x77d58000}, + {.a = 0xd24016c0, .b = 0xcd6cbf80, .c = 0xf7e78000}, + {.a = 0xd6d816c1, .b = 0xd5757f80, .c = 0xf3de8000}, + {.a = 0xf00816c2, .b = 0xcca37f80, .c = 0xe7f60000}, + {.a = 0xfdf416c3, .b = 0x75567700, .c = 0xefd48000}, + {.a = 0xc2fd16c4, .b = 0x66a97780, .c = 0xefc48000}, + {.a = 0x9b0b16c5, .b = 0xedf76f80, .c = 0x7b558000}, + {.a = 0xca4c16c6, .b = 0x66757780, .c = 0xf7ef8000}, + {.a = 0xfdae16c7, .b = 0xaabcdf80, .c = 0xf7f78000}, + {.a = 0xb93d16c8, .b = 0x656f7780, .c = 0xefc38000}, + {.a = 0xe19716c9, .b = 0x76b57f80, .c = 0xebe40000}, + {.a = 0x82c216ca, .b = 0x9db45d80, .c = 0xf7e58000}, + {.a = 0xb41e16cb, .b = 0x9d777780, .c = 0x77d78000}, + {.a = 0xde6d16cc, .b = 0xb2b67780, .c = 0xefd60000}, + {.a = 0xeca916cd, .b = 0x72de7680, .c = 0xefe50000}, + {.a = 0xa89116ce, .b = 0xcd57bf00, .c = 0x77d68000}, + {.a = 0x919216cf, .b = 0x5cfa6e80, .c = 0xefd58000}, + {.a = 0x821f16d0, .b = 0xccab7780, .c = 0xefc18000}, + {.a = 0xd3cc16d1, .b = 0x6c7dbb80, .c = 0xf7b78000}, + {.a = 0xc21b16d2, .b = 0xcefdb780, .c = 0x77ed8000}, + {.a = 0x8a1216d3, .b = 0xdd64df80, .c = 0xfbcd0000}, + {.a = 0xed1916d4, .b = 0xd4b4ef80, .c = 0xefe78000}, + {.a = 0xf94116d5, .b = 0x2d797f80, .c = 0xe7df8000}, + {.a = 0xd26b16d6, .b = 0xcca37f80, .c = 0xe7f50000}, + {.a = 0xb43516d7, .b = 0xa6b4f780, .c = 0xefc78000}, + {.a = 0xf2fb16d8, .b = 0xd596ef80, .c = 0xef478000}, + {.a = 0xa3ef16d9, .b = 0x459a6e80, .c = 0xefd58000}, + {.a = 0xb3f416da, .b = 0x3bd55e80, .c = 0xf7d50000}, + {.a = 0x847f16db, .b = 0xde9b7780, .c = 0xefe28000}, + {.a = 0x935e16dc, .b = 0xba6cef80, .c = 0xefc58000}, + {.a = 0xf35e16dd, .b = 0x4e6a7780, .c = 0xedcd0000}, + {.a = 0xb37e16de, .b = 0x35f4f700, .c = 0xefd78000}, + {.a = 0x8c3116df, .b = 0x9cd45d00, .c = 0x77d58000}, + {.a = 0xc44216e0, .b = 0x292f6780, .c = 0xefb78000}, + {.a = 0xf41216e1, .b = 0x256d7780, .c = 0xf7de8000}, + {.a = 0xf0d816e2, .b = 0xcd677f80, .c = 0xe7d68000}, + {.a = 0x862a16e3, .b = 0x7b555f80, .c = 0xf7958000}, + {.a = 0xa67a16e4, .b = 0xa4aaf780, .c = 0xefc48000}, + {.a = 0xba1c16e5, .b = 0xbbbc6e80, .c = 0xefd58000}, + {.a = 0x850116e6, .b = 0xcaa4f780, .c = 0xf7eb0000}, + {.a = 0x834616e7, .b = 0x3ab6df80, .c = 0xf7d58000}, + {.a = 0x90d016e8, .b = 0xeb2bb780, .c = 0x77c98000}, + {.a = 0xaa0516e9, .b = 0xb6fcdf80, .c = 0xfbed8000}, + {.a = 0xc88616ea, .b = 0x6af57f80, .c = 0xe7d60000}, + {.a = 0x810a16eb, .b = 0x27377780, .c = 0xf7eb8000}, + {.a = 0xa0f316ec, .b = 0x3db55f80, .c = 0xf7d50000}, + {.a = 0xecc816ed, .b = 0xd96af780, .c = 0xefc50000}, + {.a = 0x9f3816ee, .b = 0x3a556f00, .c = 0xefd58000}, + {.a = 0xb05716ef, .b = 0x9cb26d80, .c = 0xefd68000}, + {.a = 0xff2416f0, .b = 0xbadcef80, .c = 0xef458000}, + {.a = 0xc67d16f1, .b = 0xcad77780, .c = 0xef550000}, + {.a = 0xb4a716f2, .b = 0xcdf4de80, .c = 0xf7d58000}, + {.a = 0xb1fe16f3, .b = 0xaefa7700, .c = 0xf7df8000}, + {.a = 0xc45516f4, .b = 0xad757780, .c = 0x77d98000}, + {.a = 0x825216f5, .b = 0xb9d55e80, .c = 0x77f58000}, + {.a = 0xe47016f6, .b = 0xdd6d7780, .c = 0x77b78000}, + {.a = 0xbe1216f7, .b = 0x66b57f80, .c = 0xebd78000}, + {.a = 0xe3d816f8, .b = 0x2b7edf80, .c = 0xf7d58000}, + {.a = 0xdd0316f9, .b = 0xdda6ef80, .c = 0xef478000}, + {.a = 0xa3b916fa, .b = 0x3d576f00, .c = 0xeffb8000}, + {.a = 0xf69516fb, .b = 0x73367680, .c = 0xefd50000}, + {.a = 0xe70716fc, .b = 0x89547780, .c = 0xefc58000}, + {.a = 0xddbe16fd, .b = 0xd572ef80, .c = 0xeff78000}, + {.a = 0xdfc816fe, .b = 0xcd5cb780, .c = 0x77d78000}, + {.a = 0x867716ff, .b = 0x99577780, .c = 0x779d8000}, + {.a = 0xa9131700, .b = 0x36b77f80, .c = 0xe7d58000}, + {.a = 0x93ff1701, .b = 0x31b6ff80, .c = 0xeb578000}, + {.a = 0xba0e1702, .b = 0xaef77780, .c = 0x77dd8000}, + {.a = 0xdad81703, .b = 0xed7f6e80, .c = 0x7bd58000}, + {.a = 0xa71a1704, .b = 0x75497f80, .c = 0xebe58000}, + {.a = 0xa6b61705, .b = 0xeb725d80, .c = 0x77d58000}, + {.a = 0xf8b61706, .b = 0xb6b75f80, .c = 0x7bd58000}, + {.a = 0xa6ea1707, .b = 0x33f6ee80, .c = 0xefd58000}, + {.a = 0x83051708, .b = 0xbab6ee80, .c = 0xefd58000}, + {.a = 0xf62c1709, .b = 0x3376f680, .c = 0xefd50000}, + {.a = 0xdf5b170a, .b = 0xadf4ff80, .c = 0xeb658000}, + {.a = 0xab2c170b, .b = 0xc8937780, .c = 0xef578000}, + {.a = 0x9709170c, .b = 0x2af56e80, .c = 0xefd58000}, + {.a = 0xcb80170d, .b = 0x5b6a7b80, .c = 0xf7e50000}, + {.a = 0xe1ad170e, .b = 0x9a946e80, .c = 0xefcd0000}, + {.a = 0xcd53170f, .b = 0xcd74f780, .c = 0xefe78000}, + {.a = 0x9fef1710, .b = 0xccacff80, .c = 0xebe50000}, + {.a = 0xe4ed1711, .b = 0xcb6cdb80, .c = 0xf7e58000}, + {.a = 0xe47a1712, .b = 0x36b77f80, .c = 0xefed8000}, + {.a = 0x848c1713, .b = 0xbaa4df80, .c = 0xf7ed0000}, + {.a = 0xc72f1714, .b = 0x73546f80, .c = 0xeffe8000}, + {.a = 0xfb261715, .b = 0xcd6f7f80, .c = 0xebcd8000}, + {.a = 0xbe331716, .b = 0xdde57780, .c = 0x76c98000}, + {.a = 0xf1841717, .b = 0x26b77b80, .c = 0xf7d68000}, + {.a = 0x9c311718, .b = 0xbd86ee80, .c = 0xefe38000}, + {.a = 0xc7fc1719, .b = 0x59da7680, .c = 0xefcf8000}, + {.a = 0xc43b171a, .b = 0xe6dd6f80, .c = 0x7bb58000}, + {.a = 0x99de171b, .b = 0xad666f80, .c = 0x7bc98000}, + {.a = 0xe7ed171c, .b = 0xcdb77780, .c = 0xefd50000}, + {.a = 0x8951171d, .b = 0x25717f80, .c = 0xebd78000}, + {.a = 0xb9b6171e, .b = 0xdd6d7780, .c = 0xefdd8000}, + {.a = 0xbd56171f, .b = 0x65777780, .c = 0xefc38000}, + {.a = 0xd27a1720, .b = 0x31755f80, .c = 0xf7d78000}, + {.a = 0xbc4e1721, .b = 0x9d53b700, .c = 0x77d78000}, + {.a = 0xc2db1722, .b = 0xdd577780, .c = 0xefd70000}, + {.a = 0xe1141723, .b = 0xcd64dd80, .c = 0xf7f58000}, + {.a = 0xb7c21724, .b = 0x36a77f80, .c = 0xe7f70000}, + {.a = 0x80131725, .b = 0x33ed7780, .c = 0xef790000}, + {.a = 0xbbcd1726, .b = 0xbaacef80, .c = 0xefc58000}, + {.a = 0xb54a1727, .b = 0x73537f00, .c = 0xf7ef8000}, + {.a = 0xbd161728, .b = 0x9b77bf80, .c = 0xf7d70000}, + {.a = 0xca7f1729, .b = 0xb698f780, .c = 0xdff48000}, + {.a = 0xaf07172a, .b = 0xdaa77780, .c = 0xefe58000}, + {.a = 0xa85d172b, .b = 0xccf55f80, .c = 0x7bed8000}, + {.a = 0xc5ef172c, .b = 0x9d076f80, .c = 0x6ed58000}, + {.a = 0xc8b6172d, .b = 0x325ef780, .c = 0xeff50000}, + {.a = 0x872a172e, .b = 0x549e6e80, .c = 0xefd58000}, + {.a = 0x9b4b172f, .b = 0xa76f6f80, .c = 0x7bfd0000}, + {.a = 0xd6bc1730, .b = 0xbaa6de80, .c = 0xf7d58000}, + {.a = 0xd10e1731, .b = 0x65797f80, .c = 0xefed8000}, + {.a = 0xc2421732, .b = 0x2af77780, .c = 0xf77b0000}, + {.a = 0xdb251733, .b = 0x6d757f80, .c = 0xf7e48000}, + {.a = 0xcd8e1734, .b = 0x4d6dbf80, .c = 0xf7cd0000}, + {.a = 0xed0d1735, .b = 0x2a36ee80, .c = 0xefd50000}, + {.a = 0xeb131736, .b = 0xbb96de80, .c = 0xf7d58000}, + {.a = 0xe2591737, .b = 0x347aef00, .c = 0xefd58000}, + {.a = 0xfc4f1738, .b = 0xdb64ef80, .c = 0xef858000}, + {.a = 0xcd6a1739, .b = 0x32af7b80, .c = 0xe7d58000}, + {.a = 0x9fda173a, .b = 0xb774f780, .c = 0xefd58000}, + {.a = 0xf501173b, .b = 0x77297780, .c = 0xefc50000}, + {.a = 0xfc83173c, .b = 0xb6b4f780, .c = 0xefd50000}, + {.a = 0x8b49173d, .b = 0xbbd46d80, .c = 0xef968000}, + {.a = 0xf65d173e, .b = 0xddfd6f80, .c = 0x7b558000}, + {.a = 0xcdd3173f, .b = 0xaca4f780, .c = 0xf7d58000}, + {.a = 0xe18a1740, .b = 0x8d57b700, .c = 0xefd58000}, + {.a = 0x8cb11741, .b = 0xea9fb780, .c = 0x77d58000}, + {.a = 0xb3971742, .b = 0x76d57780, .c = 0xefc68000}, + {.a = 0xc3501743, .b = 0xdd74f780, .c = 0xf7d78000}, + {.a = 0x8c281744, .b = 0xba54df80, .c = 0xf7958000}, + {.a = 0xb6d41745, .b = 0xaa757780, .c = 0x77da0000}, + {.a = 0xfce51746, .b = 0xadf77780, .c = 0x77690000}, + {.a = 0x87c41747, .b = 0xcd555f80, .c = 0x77958000}, + {.a = 0xd8c01748, .b = 0x73955f80, .c = 0xf74d8000}, + {.a = 0xce2a1749, .b = 0x25d57f80, .c = 0xf7b48000}, + {.a = 0xb66b174a, .b = 0x26f6f680, .c = 0xefd50000}, + {.a = 0xe038174b, .b = 0x229d7780, .c = 0xefd78000}, + {.a = 0xba4b174c, .b = 0xcdf55d80, .c = 0x77d48000}, + {.a = 0xa880174d, .b = 0x22957780, .c = 0xefd48000}, + {.a = 0xb0d3174e, .b = 0xdd577700, .c = 0xefdd8000}, + {.a = 0xe9a2174f, .b = 0xdd66f780, .c = 0xefd78000}, + {.a = 0xfc661750, .b = 0x35d6ff80, .c = 0xeb738000}, + {.a = 0xd68f1751, .b = 0xd554e780, .c = 0xefff0000}, + {.a = 0xe3f01752, .b = 0xc974f780, .c = 0xefd58000}, + {.a = 0xb4d31753, .b = 0xbbd46e80, .c = 0xefad8000}, + {.a = 0xfc9e1754, .b = 0xba74df80, .c = 0xf7d48000}, + {.a = 0xbeeb1755, .b = 0x2376df80, .c = 0xf7d58000}, + {.a = 0xc1281756, .b = 0x2d657700, .c = 0xf7db8000}, + {.a = 0x85651757, .b = 0x35aef780, .c = 0xefc50000}, + {.a = 0xde331758, .b = 0x73d55f80, .c = 0xf7550000}, + {.a = 0xbc1c1759, .b = 0xcd6f7f80, .c = 0xebcd0000}, + {.a = 0xc6c9175a, .b = 0xbdd86e80, .c = 0xefd58000}, + {.a = 0xc6d2175b, .b = 0xcd74f780, .c = 0xefd58000}, + {.a = 0xae06175c, .b = 0x9a747b80, .c = 0xf7e58000}, + {.a = 0xef55175d, .b = 0xb56cf780, .c = 0xefc58000}, + {.a = 0xf23c175e, .b = 0xdcd4df80, .c = 0xf7958000}, + {.a = 0x91e2175f, .b = 0xddb57780, .c = 0xeeb58000}, + {.a = 0xbefa1760, .b = 0x2e657f80, .c = 0xf7f58000}, + {.a = 0x88d51761, .b = 0x36f6f780, .c = 0xef658000}, + {.a = 0xa5861762, .b = 0xad2dbf80, .c = 0xebcb8000}, + {.a = 0xf5e81763, .b = 0xb65cf780, .c = 0xefef8000}, + {.a = 0xc6da1764, .b = 0x66b57f80, .c = 0xebd68000}, + {.a = 0x98d11765, .b = 0xcab6f780, .c = 0xefd50000}, + {.a = 0xff191766, .b = 0x22e97780, .c = 0xefd28000}, + {.a = 0xc1f91767, .b = 0x9cd46f00, .c = 0x7bd58000}, + {.a = 0xa2381768, .b = 0x355f7f00, .c = 0xe7f78000}, + {.a = 0xe6a21769, .b = 0x957d6f00, .c = 0x7bd78000}, + {.a = 0xca38176a, .b = 0xdd6f7780, .c = 0xefd58000}, + {.a = 0xe7e4176b, .b = 0x335d7700, .c = 0xeffb8000}, + {.a = 0xc0e3176c, .b = 0x255d7780, .c = 0xefdf8000}, + {.a = 0xaba0176d, .b = 0x9b4c6f80, .c = 0xefd58000}, + {.a = 0x9229176e, .b = 0x39b55e80, .c = 0xf7d70000}, + {.a = 0x9369176f, .b = 0xcf6f7780, .c = 0xe6f78000}, + {.a = 0xe58c1770, .b = 0x26af7780, .c = 0xf7de8000}, + {.a = 0xef3b1771, .b = 0xcd777f80, .c = 0xe7ef8000}, + {.a = 0xd8c91772, .b = 0x6b677780, .c = 0xf7f38000}, + {.a = 0xcbfe1773, .b = 0xcca4ff80, .c = 0xe7d70000}, + {.a = 0xd3c71774, .b = 0x76b67780, .c = 0xefe30000}, + {.a = 0xc0531775, .b = 0x26b57f80, .c = 0xefdb8000}, + {.a = 0xd7361776, .b = 0x55b66e80, .c = 0xefd50000}, + {.a = 0xd2011777, .b = 0xdd78ee80, .c = 0xefd50000}, + {.a = 0xacf31778, .b = 0x7b555f80, .c = 0xf7d48000}, + {.a = 0xf1b71779, .b = 0x2a7d7780, .c = 0xf7ef8000}, + {.a = 0xd073177a, .b = 0x89b47780, .c = 0xefe68000}, + {.a = 0xd735177b, .b = 0xd574ef80, .c = 0xefd50000}, + {.a = 0xef7a177c, .b = 0x66957780, .c = 0xefe58000}, + {.a = 0x8e2e177d, .b = 0x9cb45f80, .c = 0xf7d78000}, + {.a = 0xfc87177e, .b = 0x66567700, .c = 0xefd48000}, + {.a = 0x910b177f, .b = 0x32695f80, .c = 0xf7ff0000}, + {.a = 0x9a7f1780, .b = 0x256b7780, .c = 0xf7d28000}, + {.a = 0x957d1781, .b = 0x26aaf780, .c = 0xeffd8000}, + {.a = 0xe8401782, .b = 0x3ca35f80, .c = 0xf7f68000}, + {.a = 0xee731783, .b = 0xccb57f80, .c = 0xe6d48000}, + {.a = 0xc8df1784, .b = 0xda64d780, .c = 0xf7bb8000}, + {.a = 0xbac81785, .b = 0x757d7f80, .c = 0xeff58000}, + {.a = 0xcab11786, .b = 0xbba4ed80, .c = 0xefc78000}, + {.a = 0xe3c41787, .b = 0x97746f80, .c = 0x7bed8000} +}; +} \ No newline at end of file diff --git a/src/generic/generator/mt2203_params.hpp b/src/generic/generator/mt2203_params.hpp new file mode 100644 index 0000000..750fda0 --- /dev/null +++ b/src/generic/generator/mt2203_params.hpp @@ -0,0 +1,25 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include + +namespace openrng { + +struct mt2203_param { + /* + a: The value a_n which forms the bottom row of the A matrix + b: First mask used in tempering + c: Second mask used in tempering + */ + uint32_t a, b, c; +}; + +const extern mt2203_param MT2203_PARAMS[6024]; + +} // namespace openrng diff --git a/src/generic/generator/mt_initialization.hpp b/src/generic/generator/mt_initialization.hpp new file mode 100644 index 0000000..8ee317e --- /dev/null +++ b/src/generic/generator/mt_initialization.hpp @@ -0,0 +1,55 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include + +#include + +namespace openrng { + +/* + * Initialize state array according to the 'initialization by array' procedure + * described in: + * M. Matsumoto and T. Nishimura, "Mersenne Twister with improved + * initialization" + * http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/MT2002/emt19937ar.html + */ +template +int mt_initialise_by_array(int64_t n, const unsigned int params[], + uint32_t *data) { + data[0] = 19650218; + for (int i = 1; i < N; i++) { + data[i] = 1812433253ULL * (data[i - 1] ^ (data[i - 1] >> 30)) + i; + } + + int i = 1; + for (int j = 0, k = 0; k < std::max(n, N); k++) { + data[i] ^= 1664525ULL * (data[i - 1] ^ (data[i - 1] >> 30)); + data[i] += params[j] + j; + i = i == N - 1 ? 1 : i + 1; + j = j == n - 1 ? 0 : j + 1; + if (i == 1) { + data[0] = data[N - 1]; + } + } + + for (int k = 0; k < N - 1; k++) { + data[i] ^= 1566083941ULL * (data[i - 1] ^ (data[i - 1] >> 30)); + data[i] -= i; + i = i == N - 1 ? 1 : i + 1; + if (i == 1) { + data[0] = data[N - 1]; + } + } + + data[0] = 1 << 31; + return VSL_ERROR_OK; +} +} // namespace openrng diff --git a/src/generic/generator/nondeterministic.hpp b/src/generic/generator/nondeterministic.hpp index 4ea59e0..a3ce53d 100644 --- a/src/generic/generator/nondeterministic.hpp +++ b/src/generic/generator/nondeterministic.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -20,7 +20,7 @@ template <> class NondeterministicGenerator : public CopyableGenerator { public: - NondeterministicGenerator() : CopyableGenerator{VSL_BRNG_NONDETERM} {} + NondeterministicGenerator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t, const unsigned int[]); diff --git a/src/generic/generator/philox4x3210.cpp b/src/generic/generator/philox4x3210.cpp index dc3662c..202aaeb 100644 --- a/src/generic/generator/philox4x3210.cpp +++ b/src/generic/generator/philox4x3210.cpp @@ -12,17 +12,10 @@ namespace openrng { namespace { - -void write_elems(uint32_t *dst, const uint32_t *src, size_t n) { - memcpy(dst, src, n * sizeof(uint32_t)); -} - -template -void write_elems(T *dst, const uint32_t *src, size_t n) { - for (unsigned i = 0; i < n; i++) - dst[i] = (int)src[i] / 0x1p32 + 0.5; +inline uint128_t +do_bijection(const QuadCounterBasedState> &state) { + return philox_10(state.k[0], state.k[1], state.c); } - } // namespace int Philox4x3210Generator::initialise( @@ -30,113 +23,28 @@ int Philox4x3210Generator::initialise( for (int i = 0; i < 4; i++) state.c.data.u32[i] = n > i + 2 ? params[i + 2] : 0; - state.k0 = n == 0 ? 0 : params[0]; - state.k1 = n > 1 ? params[1] : 0; + state.k[0] = n == 0 ? 0 : params[0]; + state.k[1] = n > 1 ? params[1] : 0; state.off = 0; return VSL_ERROR_OK; } -void Philox4x3210Generator::advance(uint64_t by) { - /* Every 4 advances, c is incremented. If by is a multiple of 4 then we can - * just bump c and be done. If not, bump c by the number of full quadwords - * that this advance would skip over, and adjust offset such that when we - * write to the array we begin from the correct subelement of philox(c). */ - state.c.data.u128 += (state.off + by) / 4; - state.off = (state.off + by) % 4; -} - -uint128_t Philox4x3210Generator::get_philox() const { - return philox_10(state.k0, state.k1, state.c); -} - -template -void Philox4x3210Generator::fill_array(int64_t n, - T *dst) { - /* Walking over the array has at most 3 stages: head, body and tail. */ - int64_t i = 0; - uint128_t c = get_philox(); - - /* Head: exhaust the current value of c. Starting from current offset into - * c, write either the remainder of the quadword or n elements (whichever is - * less). If offset is already zero then this will be a no-op. */ - const int64_t chunksize = std::min(static_cast(4) - state.off, n); - write_elems(dst, c.data.u32 + state.off, chunksize); - advance(chunksize); - i += chunksize; - - /* Body: while there are at least 4 remaining elements to write, deal with the - * entire quadword. Destination pointer is offset by the length of the head, - * and offset is 0 since the previous quad was exhausted when writing the - * head. */ - for (; i + 4 < n; i += 4) { - c = get_philox(); - write_elems(dst + i, c.data.u32, 4); - advance(4); - } - - /* Tail: if there are between 1 and 3 elements left to write. advance will - * update offset but not bump c so that subsequent takes will use the current - * value of c, but index into it from further on. */ - if (i < n) { - c = get_philox(); - const int64_t ntail = n - i; - write_elems(dst + i, c.data.u32, ntail); - advance(ntail); - } -} - int Philox4x3210Generator::fillBits(int64_t n, uint32_t dst[]) { - fill_array(n, dst); + fill_array(n, dst); return VSL_ERROR_OK; } -int Philox4x3210Generator::fillBits32(int64_t n, - uint32_t dst[]) { - return fillBits(n, dst); -} - -int Philox4x3210Generator::fillBits64(int64_t n, - uint64_t dst[]) { - return fillBits(n * 2, (uint32_t *)dst); -} - int Philox4x3210Generator::fill(int64_t n, float dst[]) { - fill_array(n, dst); + fill_array(n, dst); return VSL_ERROR_OK; } int Philox4x3210Generator::fill(int64_t n, double dst[]) { - fill_array(n, dst); + fill_array(n, dst); return VSL_ERROR_OK; } -int Philox4x3210Generator::skipAhead( - uint64_t n, const uint64_t nskip[]) { - /* Period of Philox4x32 is 2^130 (get 4 words for each value of the 128-bit - * counter, so all but the first 3 elements of nskip can be ignored. */ - - /* 2^0 part. */ - advance(nskip[0]); - - /* 2^64 part - no need to mess with offset as j * 2^64 is a multiple of 4. - * Just bump c by j * 2^62. */ - if (n > 1) - state.c.data.u128 += ((__uint128_t)nskip[1]) << 62; - - /* 2^128 part - we only care about first 2 bits, since any values > 4 mean - * advancing by a multiple of 2^130, which is circular. Similar to 2^64 part, - * advancing by j * 2^128 means bumping c by j * 2^126. */ - if (n > 2) - state.c.data.u128 += ((__uint128_t)nskip[2]) << 126; - - return VSL_ERROR_OK; -} - -int Philox4x3210Generator::setStride(uint64_t) { - return VSL_RNG_ERROR_LEAPFROG_UNSUPPORTED; -} - } // namespace openrng diff --git a/src/generic/generator/philox4x3210.hpp b/src/generic/generator/philox4x3210.hpp index 4759e6f..f5fd5e1 100644 --- a/src/generic/generator/philox4x3210.hpp +++ b/src/generic/generator/philox4x3210.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -7,44 +7,28 @@ #pragma once -#include +#include #include -#include namespace openrng { -struct Philox4x3210State { - uint128_t c; - /* k0 and k1 are keys - they cannot be marked const because they are set at - * initialization, but should not be changed afterwards. */ - uint32_t k0{}, k1{}; - /* Offset used when filling array begins in the middle of a value of c. */ - uint32_t off{}; -}; - template class Philox4x3210Generator {}; template <> class Philox4x3210Generator - : public CopyableGenerator { -private: - void advance(uint64_t); - uint128_t get_philox() const; - template void fill_array(int64_t, T *); - + : public QuadCounterBasedGenerator> { public: - Philox4x3210Generator() : CopyableGenerator{VSL_BRNG_PHILOX4X32X10} {} - - using CopyableGenerator::initialise; - int initialise(const int64_t, const unsigned int[]); - - int fillBits(int64_t n, uint32_t[]) final; - int fillBits32(int64_t n, uint32_t[]) final; - int fillBits64(int64_t n, uint64_t[]) final; - int fill(int64_t n, float[]) final; - int fill(int64_t n, double[]) final; - int skipAhead(uint64_t n, const uint64_t nskip[]) final; - int setStride(uint64_t stride) final; + Philox4x3210Generator(int64_t brng) : QuadCounterBasedGenerator{brng} {} + + using QuadCounterBasedGenerator::initialise; + int initialise(const int64_t n, const unsigned int params[]); + + int fillBits(int64_t n, uint32_t dst[]); + + int fill(int64_t n, float dst[]); + + int fill(int64_t n, double dst[]); }; } // namespace openrng diff --git a/src/generic/generator/quad_counter_based_generator.hpp b/src/generic/generator/quad_counter_based_generator.hpp new file mode 100644 index 0000000..8c69015 --- /dev/null +++ b/src/generic/generator/quad_counter_based_generator.hpp @@ -0,0 +1,110 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include +#include + +namespace openrng { + +template struct QuadCounterBasedState { + // Counter state. + uint128_t c = 0; + // Encryption keys specified by the type `Key` + // They cannot be marked const because they are set at initialisation, but + // they should not be changed afterwards. + Key k = {}; + // Offset used when filling array begins in the middle of a value of c. + uint32_t off = 0; +}; + +namespace { + +inline void write_elems(uint32_t *dst, const uint32_t *src, size_t n) { + memcpy(dst, src, n * sizeof(uint32_t)); +} + +template +void write_elems(T *dst, const uint32_t *src, size_t n) { + for (unsigned i = 0; i < n; ++i) + dst[i] = (int)src[i] / 0x1p32 + 0.5; +} + +} // namespace + +template class QuadCounterBasedGenerator {}; + +template +class QuadCounterBasedGenerator + : public CopyableGenerator> { + +private: + inline void advance(uint64_t by) { + // Increment c every 4 advances. + this->state.c += (this->state.off + by) / 4; + // Adjust offset of the next subelement to be outputted. + this->state.off = (this->state.off + by) % 4; + } + +protected: + template &)> + void fill_array(int64_t n, T *dst) { + int64_t i = 0; + + // Exhaust remaining elements + uint128_t c = do_bijection(this->state); + const int64_t nhead = + std::min(static_cast(4) - this->state.off, n); + write_elems(dst, c.data.u32 + this->state.off, nhead); + advance(nhead); + i += nhead; + + // Process 4 elements as a quadword at a time + for (; i + 4 < n; i += 4) { + c = do_bijection(this->state); + write_elems(dst + i, c.data.u32, 4); + advance(4); + } + + // Handle remaining elements left + if (i < n) { + c = do_bijection(this->state); + const int64_t ntail = n - i; + write_elems(dst + i, c.data.u32, ntail); + advance(ntail); + } + } + +public: + QuadCounterBasedGenerator(int64_t _brngId) + : CopyableGenerator>{_brngId} {} + + int setStride(uint64_t) final { return VSL_RNG_ERROR_LEAPFROG_UNSUPPORTED; } + + int skipAhead(uint64_t n, const uint64_t nskip[]) final { + // Period is 2^130, so all but the first 3 elements of nskip can be ignored. + + // 2^0 part + advance(nskip[0]); + + // 2^64 part - no need to mess with offset as j * 2^64 is a multiple of 4. + if (n > 1) + this->state.c += uint128_t{nskip[1]} << 62; + + // 2^128 part - we only care about first 2 bits, since any values > 4 mean + // advancing by a multiple of 2^130, which is circular. + if (n > 2) + this->state.c += uint128_t{nskip[2]} << 126; + + return VSL_ERROR_OK; + } +}; + +} // namespace openrng diff --git a/src/generic/generator/r250.hpp b/src/generic/generator/r250.hpp index 7ce6c2c..e001375 100644 --- a/src/generic/generator/r250.hpp +++ b/src/generic/generator/r250.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -30,7 +30,7 @@ class R250Generator : public CopyableGenerator { uint32_t advance(); public: - R250Generator() : CopyableGenerator{VSL_BRNG_R250} {} + R250Generator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t n, const unsigned int params[]); @@ -44,4 +44,4 @@ public: int skipAhead(uint64_t n, const uint64_t nskip[]) final; }; -} // namespace openrng \ No newline at end of file +} // namespace openrng diff --git a/src/generic/generator/sfmt19937.cpp b/src/generic/generator/sfmt19937.cpp index f581226..24b7490 100644 --- a/src/generic/generator/sfmt19937.cpp +++ b/src/generic/generator/sfmt19937.cpp @@ -6,7 +6,7 @@ */ #include -#include +#include #include @@ -142,17 +142,6 @@ int SFMT19937Generator::fillBits(int64_t n, return VSL_ERROR_OK; } -int SFMT19937Generator::fillBits32(int64_t n, - uint32_t buffer[]) { - // SFMT19937 already generates uniformly distributed integers in [0, 2^32] - return fillBits(n, buffer); -} - -int SFMT19937Generator::fillBits64(int64_t n, - uint64_t buffer[]) { - return fillBits32(2 * n, reinterpret_cast(buffer)); -} - int SFMT19937Generator::fill(int64_t n, float buffer[]) { for (int i = 0; i < n; i++) { buffer[i] = 0.5 + (float)(int32_t)advance() / (float)(1ULL << 32); @@ -179,6 +168,35 @@ xorStatesInPlace(ring_buffer &result, } } +namespace { +int deg(const DynamicArray &a) { + for (int i = a.size() - 1; i >= 0; i--) { + if (a[i]) { + return i; + } + } + return -1; +} + +static DynamicArray fromBits(auto indeces) { + const auto size = indeces.size() * 64; + DynamicArray result(size, 0); + + // Seems unnecessary, but clang-tidy insists on it. + if (result.size() == 0) { + return result; + } + + for (size_t j = 0; j < indeces.size(); j++) { + for (size_t i = 0; i < 64; i++) + if (1 & (indeces[j] >> i)) + result[j * 64 + i] = 1; + } + result.resize(deg(result) + 1); + return result; +} +} // namespace + int SFMT19937Generator::skipAhead( uint64_t n, const uint64_t nskip[]) { if (n > 1) { @@ -188,24 +206,33 @@ int SFMT19937Generator::skipAhead( const auto newIdx = 1 + ((state.current_idx + nskip[0] - 1) % 4); const auto nStateUpdates = (state.current_idx + nskip[0] - 1) / 4; - DynamicArray g = sfmt19937SkipAheadPolynomial(nStateUpdates); + uint64_t skip = nStateUpdates; - // - // Taking the skip ahead polynomial g, get the sum (xor) of each i'th state.x - // where the i'th coefficient of g is non-zero. - // - decltype(state.x) resultState = {}; - for (size_t i = 0; i < g.size(); i++) { - if (g[i]) { - xorStatesInPlace(resultState, state.x); + for (int j = 0; skip; j++, skip >>= 1) { + if ((skip & 1) == 0) { + continue; } - advance(); - advance(); - advance(); - advance(); + + DynamicArray g = fromBits(skipahead::data::sfmt19937_cache[j]); + + // + // Taking the skip ahead polynomial g, get the sum (xor) of each i'th + // state.x where the i'th coefficient of g is non-zero. + // + decltype(state.x) resultState = {}; + for (size_t i = 0; i < g.size(); i++) { + if (g[i]) { + xorStatesInPlace(resultState, state.x); + } + advance(); + advance(); + advance(); + advance(); + } + + state.x = resultState; } - state.x = resultState; state.current_idx = newIdx; return VSL_ERROR_OK; diff --git a/src/generic/generator/sfmt19937.hpp b/src/generic/generator/sfmt19937.hpp index c2e8a56..9f80b7f 100644 --- a/src/generic/generator/sfmt19937.hpp +++ b/src/generic/generator/sfmt19937.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -34,14 +34,12 @@ class SFMT19937Generator uint32_t advance(); public: - SFMT19937Generator() : CopyableGenerator{VSL_BRNG_SFMT19937} {} + SFMT19937Generator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t, const unsigned int[]); int fillBits(int64_t n, uint32_t[]) final; - int fillBits32(int64_t n, uint32_t[]) final; - int fillBits64(int64_t n, uint64_t[]) final; int fill(int64_t n, float[]) final; int fill(int64_t n, double[]) final; int skipAhead(uint64_t n, const uint64_t[]) final; diff --git a/src/generic/generator/sobol.hpp b/src/generic/generator/sobol.hpp index 8652224..bdf28a2 100644 --- a/src/generic/generator/sobol.hpp +++ b/src/generic/generator/sobol.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -49,7 +49,7 @@ class SobolGenerator : public Generator { direction_numbers{}; public: - SobolGenerator() : Generator{VSL_BRNG_SOBOL}, state{} {} + SobolGenerator(int64_t brng) : Generator{brng}, state{} {} using Generator::initialise; int initialise(const int64_t n, const unsigned int params[]); diff --git a/src/math/util.hpp b/src/math/util.hpp index 711282d..52aa01c 100644 --- a/src/math/util.hpp +++ b/src/math/util.hpp @@ -7,17 +7,13 @@ #pragma once -#include +#include namespace openrng::math { namespace { -template - requires(sizeof(ToType) == sizeof(FromType)) -inline ToType as(FromType x) { - ToType y; - memcpy(&y, &x, sizeof(FromType)); - return y; +template inline ToType as(FromType x) { + return std::bit_cast(x); } template inline T horner(T x, const T poly[]) { diff --git a/src/refng/c_api.cpp b/src/refng/c_api.cpp index af500ee..7b6efc8 100644 --- a/src/refng/c_api.cpp +++ b/src/refng/c_api.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -77,10 +78,17 @@ int rdRngGaussian(const refng_int_t method, VSLStreamStatePtr stream, return refng::distribution::gaussian::fill(method, generator, n, r, a, sigma); } -int rdRngGaussianMV(const refng_int_t, VSLStreamStatePtr, const refng_int_t, - double[], const refng_int_t, const refng_int_t, - const double *, const double *) { - return VSL_ERROR_FEATURE_NOT_IMPLEMENTED; +int rdRngGaussianMV(const refng_int_t method, VSLStreamStatePtr stream, + const refng_int_t n, double r[], const refng_int_t dimen, + const refng_int_t mstorage, const double *a, + const double *t) { + auto [generator, error] = refng::Generator::extract(stream); + if (error) { + return error; + } + + return refng::distribution::gaussianmv::fill(method, generator, n, dimen, + mstorage, r, a, t); } int rdRngGumbel(const refng_int_t method, VSLStreamStatePtr stream, @@ -306,10 +314,17 @@ int rsRngGaussian(const refng_int_t method, VSLStreamStatePtr stream, return refng::distribution::gaussian::fill(method, generator, n, r, a, sigma); } -int rsRngGaussianMV(const refng_int_t, VSLStreamStatePtr, const refng_int_t, - float[], const refng_int_t, const refng_int_t, - const float *, const float *) { - return VSL_ERROR_FEATURE_NOT_IMPLEMENTED; +int rsRngGaussianMV(const refng_int_t method, VSLStreamStatePtr stream, + const refng_int_t n, float r[], const refng_int_t dimen, + const refng_int_t mstorage, const float *a, + const float *t) { + auto [generator, error] = refng::Generator::extract(stream); + if (error) { + return error; + } + + return refng::distribution::gaussianmv::fill(method, generator, n, dimen, + mstorage, r, a, t); } int rsRngGumbel(const refng_int_t method, VSLStreamStatePtr stream, @@ -430,6 +445,18 @@ int refDeleteStream(VSLStreamStatePtr *ptr) { int refGetBrngProperties(const int brngId, VSLBRngProperties *const properties) { + if (brngId >= VSL_BRNG_MT2203 && brngId < VSL_BRNG_MT2203 + 6024) { + properties->StreamStateSize = 0; + properties->InitStream = nullptr; + properties->sBRng = nullptr; + properties->dBRng = nullptr; + properties->iBRng = nullptr; + properties->NSeeds = 70; + properties->IncludesZero = 1; + properties->WordSize = 4; + properties->NBits = 32; + return VSL_ERROR_OK; + } switch (brngId) { case VSL_BRNG_MCG31: @@ -516,6 +543,7 @@ int refGetBrngProperties(const int brngId, properties->WordSize = 8; properties->NBits = 59; break; + case VSL_BRNG_SOBOL: properties->StreamStateSize = 0; properties->InitStream = nullptr; @@ -527,13 +555,24 @@ int refGetBrngProperties(const int brngId, properties->WordSize = 4; properties->NBits = 32; break; + + case VSL_BRNG_ARS5: + properties->StreamStateSize = 0; + properties->InitStream = nullptr; + properties->sBRng = nullptr; + properties->dBRng = nullptr; + properties->iBRng = nullptr; + properties->NSeeds = 8; + properties->IncludesZero = 1; + properties->WordSize = 4; + properties->NBits = 32; + break; + case VSL_BRNG_WH: case VSL_BRNG_NIEDERR: - case VSL_BRNG_MT2203: case VSL_BRNG_IABSTRACT: case VSL_BRNG_DABSTRACT: case VSL_BRNG_SABSTRACT: - case VSL_BRNG_ARS5: return VSL_ERROR_FEATURE_NOT_IMPLEMENTED; default: diff --git a/src/utils/ars.hpp b/src/utils/ars.hpp new file mode 100644 index 0000000..6b14d5a --- /dev/null +++ b/src/utils/ars.hpp @@ -0,0 +1,149 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include + +namespace openrng { + +namespace { + +const std::array sub_box = { + 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, + 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, + 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, + 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, + 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, + 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, + 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, + 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, + 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, + 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, + 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, + 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, + 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, + 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, + 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, + 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, + 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, + 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, + 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, + 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, + 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, + 0xb0, 0x54, 0xbb, 0x16}; + +inline uint128_t sub_bytes(const uint128_t &c) { + uint128_t result = {0}; + for (int i = 0; i < 16; ++i) + result.data.u8[i] = sub_box[c.data.u8[i]]; + return result; +} + +inline uint128_t shift_rows(const uint128_t &c) { + uint128_t result = {c}; + // Left-shift row 1 by 1 + result.data.u8[1] = c.data.u8[5]; + result.data.u8[5] = c.data.u8[9]; + result.data.u8[9] = c.data.u8[13]; + result.data.u8[13] = c.data.u8[1]; + // Left-shift row 2 by 2 + result.data.u8[2] = c.data.u8[10]; + result.data.u8[6] = c.data.u8[14]; + result.data.u8[10] = c.data.u8[2]; + result.data.u8[14] = c.data.u8[6]; + // Left-shift row 3 by 3 + result.data.u8[3] = c.data.u8[15]; + result.data.u8[7] = c.data.u8[3]; + result.data.u8[11] = c.data.u8[7]; + result.data.u8[15] = c.data.u8[11]; + return result; +} + +inline uint8_t gf_mul(const uint8_t a, const uint8_t b) { + // Multiply polynomials a and b + uint32_t temp = 0; + for (int i = 0; i < 8; ++i) { + if (b >> i & 1) { + temp ^= a << i; + } + } + + // Take modulo of 0x11b + const uint32_t m = 0x11b; + while (temp >= 0x100) { + uint32_t i = 0; + while (temp >> i) + i++; + temp ^= m << (i - 9); + } + return temp; +} + +inline uint128_t mix_columns(const uint128_t &c) { + const std::array mix_matrix = { + 0x02, 0x03, 0x01, 0x01, 0x01, 0x02, 0x03, 0x01, + 0x01, 0x01, 0x02, 0x03, 0x03, 0x01, 0x01, 0x02}; + + uint128_t result = {0}; + for (int j = 0; j < 4; ++j) { + for (int i = 0; i < 4; ++i) { + uint8_t temp = 0; + for (int k = 0; k < 4; ++k) { + temp ^= gf_mul(c.data.u8[k + j * 4], mix_matrix[i * 4 + k]); + } + result.data.u8[i + j * 4] = temp; + } + } + return result; +} + +inline uint128_t next_round_key(const uint128_t &k) { + uint128_t ki = {k}; + ki.data.u64[0] += 0x9E3779B97F4A7C15; + ki.data.u64[1] += 0xBB67AE8584CAA73B; + return ki; +} + +inline uint128_t add_round_key(const uint128_t &c, const uint128_t &k) { + return c ^ k; +} + +} // namespace + +/** + * Perform AES rounds on the counter c with seed k for 5 times. + * + * The AES operations used are based on: + * Federal Information Processing Standards Publication 197 (FIPS 197), + * "Advanced Encryption Standard (AES)", 2001, + * + * while the ARS random number generator is described in: + * Salmon, J., Moraes, M., Dror, R., and Shaw, D., + * "Parallel Random Numbers: As Easy as 1, 2, 3", 2011. + * + * Reuse of this code may be subject to restrictions inherited from FIPS 197. + */ +static inline uint128_t compute_ars5(const uint128_t c, const uint128_t k) { + uint128_t ci = c ^ k; + uint128_t ki = k; + for (uint64_t i = 1; i < 5; ++i) { + ci = sub_bytes(ci); + ci = shift_rows(ci); + ci = mix_columns(ci); + ki = next_round_key(ki); + ci = add_round_key(ci, ki); + } + ci = sub_bytes(ci); + ci = shift_rows(ci); + ki = next_round_key(ki); + ci = add_round_key(ci, ki); + return ci; +} + +} // namespace openrng diff --git a/src/utils/mt_skip_ahead.hpp b/src/utils/mt_skip_ahead.hpp index 763cc09..625b2fa 100644 --- a/src/utils/mt_skip_ahead.hpp +++ b/src/utils/mt_skip_ahead.hpp @@ -5,31 +5,201 @@ * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ -#pragma once +#include -#include - -#include +#include namespace openrng { +namespace { + +template +static void copyStates(std::array &result, ring_buffer &state) { + const T *buffer = state.data(); + const size_t pos = state.get_position(); + for (size_t i = pos; i < N; i++) { + result[i - pos] = buffer[i]; + } + for (size_t i = 0; i < pos; i++) { + result[N - pos + i] = buffer[i]; + } +} + +template +static void xorStatesInPlace(std::array &result, + const std::array &other) { + for (size_t i = 0; i < N; i++) { + result[i] ^= other[i]; + } +} + +template +static void xorStatesInPlace(ring_buffer &result, + const std::array &other) { + T *buffer = result.data(); + const size_t pos = result.get_position(); + for (size_t i = pos; i < N; i++) { + buffer[i] ^= other[i - pos]; + } + for (size_t i = 0; i < pos; i++) { + buffer[i] ^= other[N - pos + i]; + } +} + +static inline bool get_coefficient(const DynamicArray &g, + const uint64_t i) { + return 1 & g[i / 64] >> (i % 64); +} + +/** + * Extract a window of size q from g: g[i - 1], ..., g[i - q]. + */ +static inline uint64_t get_window(const DynamicArray &g, + const int64_t i, const int64_t q) { + uint64_t window = 0; + for (int j = 1; j <= q; ++j) { + window = (window << 1) ^ get_coefficient(g, i - j); + } + return window; +} + /** - * Determine the skip ahead polynomial to skip n iterations. + * Compute jump indices d_j and polynomial decompositions h_j(z) from a list of + * coefficients g. * - * The skip ahead polynomial is the polynomial described in equation 4 of + * Returns m, the number of windows that can fit within the coefficients. * - * Hiroshi Haramoto, Makoto Matsumoto, Takuji Nishimura, François Panneton, - * and Pierre L'Ecuyer. 2008. Efficient Jump Ahead for F2-Linear Random - * Number Generators. INFORMS J. on Computing 20, 3 (Summer 2008), 385–390. - * https://doi.org/10.1287/ijoc.1070.0251 + * Reference: + * H. Haramoto and M. Matsumoto, + * "Efficient Jump Ahead for F2-Linear Random Number Generators" + * http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/ARTICLES/jumpf2-printed.pdf + */ +template +int64_t slidingWindowSetup(const DynamicArray &g, + std::array &h, + std::array &d) { + int64_t m = 0; + int64_t i = g.size() * 64 - 1; + + // i >= q + for (; i >= q; --i) { + if (get_coefficient(g, i)) { + m++; + d[m] = i - q; + h[m] = get_window(g, i, q); + i -= q; + } + } + + // i < q + h[m + 1] = get_window(g, i + 1, i + 1); + + return m; +} + +/** + * Returns the ith Gray code. */ -DynamicArray mt19937SkipAheadPolynomial(uint64_t n); +static inline uint64_t graycode(const uint64_t i) { return i ^ (i >> 1); } /** - * Determine the skip ahead polynomial to skip n iterations. + * Compute 2^q vectors h(A)x, where h(z) are the decomposed polynomials each of + * degree q as defined in the paper. + * + * This returns the resulting states from advancing the state x by a window of + * coefficients of size q. The vectors are enumerated by using Gray codes to be + * efficient, as this step needs to be recomputed for each initial state x. * - * See mt19937SkipAheadPolynomial. + * Reference: + * H. Haramoto and M. Matsumoto, + * "Efficient Jump Ahead for F2-Linear Random Number Generators" + * http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/ARTICLES/jumpf2-printed.pdf */ -DynamicArray sfmt19937SkipAheadPolynomial(uint64_t n); +template +std::array, 1 << q> +computeWindowSkips(const std::array &x, + void (*advanceOnceInPlace)(ring_buffer &)) { + std::array, 1 << q> y; + std::array, q> Aqx; // Aqx[i] = A^i * x + + ring_buffer temp = {x}; + for (int i = 0; i < q; ++i) { + copyStates(Aqx[i], temp); + advanceOnceInPlace(temp); + } + copyStates(y[0], temp); + + for (int i = 1; i < (1 << q); ++i) { + auto diff = graycode(i) ^ graycode(i - 1); + int k = 0; + while (diff >>= 1) + k++; + y[graycode(i)] = y[graycode(i - 1)]; + xorStatesInPlace(y[graycode(i)], Aqx[k]); + } + return y; +} + +} // namespace + +/** + * Skip ahead for MT19937 and SFMT19937 using the sliding window algorithm. + * + * Updates the state `x` after skipping ahead for `nSkips`. Takes in the cached + * coefficients and function pointer for `advanceOnceInPlace`. + */ +template +void mt_skip_ahead(std::array &x, + void (*advanceOnceInPlace)(ring_buffer &), + const uint64_t nSkips, + const std::array, 64> &coeffs) { + uint64_t skip = nSkips; + + for (int k = 0; skip; ++k, skip >>= 1) { + if ((skip & 1) == 0) { + continue; + } + + ring_buffer resultState = {}; + + // The code below follows the sliding window algorithm as described in: + // H. Haramoto and M. Matsumoto, + // "Efficient Jump Ahead for F2-Linear Random Number Generators" + // http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/ARTICLES/jumpf2-printed.pdf + + // Window Size + constexpr int64_t q = 5; + // max_m is the upper bound of the number of windows m, + // where m <= ceil(19937 / (q + 1)) + constexpr int64_t max_m = 1 + (19936 / (q + 1)); + // h holds the polynomial decompositions of each window + // d holds the index offsets at the end of each window + std::array h = {}; + std::array d = {}; + + const auto m = slidingWindowSetup(coeffs[k], h, d); + const auto y = computeWindowSkips(x, advanceOnceInPlace); + + xorStatesInPlace(resultState, y[h[1]]); + for (int j = 2; j <= m; ++j) { + for (uint64_t i = 0; i < d[j - 1] - d[j]; ++i) { + advanceOnceInPlace(resultState); + } + xorStatesInPlace(resultState, y[h[j]]); + } + + // y[h[1]] is already added if m = 0 + if (m > 0) { + for (uint64_t i = 0; i < d[m]; ++i) { + advanceOnceInPlace(resultState); + } + xorStatesInPlace(resultState, y[h[m + 1]]); + } + // Cancel out the first term for the last window where size < q + xorStatesInPlace(resultState, y[0]); + + copyStates(x, resultState); + } +} } // namespace openrng diff --git a/src/utils/mt_skip_ahead_data.hpp b/src/utils/mt_skip_ahead_data.hpp index 665ce7a..ac32fcf 100644 --- a/src/utils/mt_skip_ahead_data.hpp +++ b/src/utils/mt_skip_ahead_data.hpp @@ -14,680 +14,6 @@ namespace openrng::skipahead::data { namespace { -constexpr std::array sfmt19937CharacteristicPolynomialIndices = - {0, 1041, 1195, 1197, 1232, 1260, 1349, 1351, 1414, 1416, - 1505, 1507, 1570, 1572, 1592, 1596, 1657, 1663, 1685, 1728, - 1746, 1748, 1750, 1811, 1813, 1819, 1839, 1902, 1904, 1908, - 1967, 1973, 1975, 2030, 2054, 2082, 2123, 2129, 2131, 2147, - 2151, 2184, 2186, 2210, 2214, 2236, 2249, 2277, 2279, 2287, - 2309, 2338, 2340, 2362, 2366, 2372, 2390, 2394, 2405, 2435, - 2443, 2459, 2464, 2479, 2483, 2492, 2494, 2496, 2516, 2518, - 2520, 2522, 2528, 2548, 2561, 2581, 2585, 2589, 2591, 2597, - 2599, 2609, 2633, 2639, 2648, 2652, 2672, 2678, 2682, 2698, - 2704, 2711, 2717, 2726, 2735, 2737, 2747, 2753, 2755, 2771, - 2787, 2791, 2800, 2804, 2808, 2824, 2830, 2832, 2834, 2840, - 2858, 2865, 2867, 2880, 2882, 2891, 2897, 2901, 2903, 2905, - 2911, 2933, 2941, 2945, 2947, 2954, 2956, 2960, 2962, 2964, - 2980, 2982, 2990, 3006, 3010, 3019, 3021, 3036, 3043, 3061, - 3067, 3071, 3075, 3083, 3087, 3095, 3099, 3107, 3108, 3110, - 3112, 3118, 3120, 3123, 3144, 3146, 3152, 3170, 3173, 3175, - 3177, 3184, 3197, 3199, 3201, 3203, 3205, 3213, 3221, 3223, - 3229, 3231, 3255, 3257, 3262, 3263, 3264, 3268, 3276, 3278, - 3279, 3281, 3298, 3302, 3306, 3314, 3329, 3333, 3335, 3338, - 3342, 3346, 3348, 3350, 3351, 3353, 3355, 3361, 3377, 3383, - 3385, 3387, 3399, 3407, 3409, 3416, 3418, 3420, 3424, 3434, - 3440, 3444, 3448, 3456, 3458, 3464, 3472, 3474, 3481, 3482, - 3485, 3491, 3496, 3497, 3498, 3500, 3506, 3507, 3511, 3513, - 3525, 3535, 3537, 3543, 3563, 3565, 3569, 3572, 3576, 3578, - 3580, 3585, 3591, 3593, 3596, 3602, 3604, 3610, 3614, 3622, - 3626, 3628, 3637, 3641, 3646, 3653, 3658, 3659, 3667, 3671, - 3674, 3678, 3693, 3699, 3711, 3715, 3721, 3724, 3727, 3728, - 3734, 3736, 3739, 3741, 3748, 3756, 3758, 3764, 3766, 3767, - 3770, 3786, 3789, 3794, 3796, 3797, 3800, 3809, 3813, 3815, - 3816, 3819, 3821, 3823, 3829, 3830, 3833, 3837, 3845, 3847, - 3853, 3855, 3865, 3871, 3879, 3880, 3884, 3892, 3893, 3895, - 3897, 3902, 3904, 3905, 3906, 3910, 3920, 3921, 3922, 3926, - 3930, 3934, 3943, 3945, 3946, 3949, 3950, 3952, 3953, 3958, - 3965, 3966, 3969, 3974, 3977, 3979, 3983, 3985, 3999, 4001, - 4009, 4011, 4023, 4025, 4035, 4040, 4047, 4048, 4049, 4056, - 4058, 4059, 4066, 4071, 4075, 4078, 4082, 4084, 4092, 4096, - 4097, 4098, 4099, 4109, 4112, 4114, 4121, 4122, 4127, 4128, - 4130, 4135, 4136, 4139, 4142, 4145, 4153, 4155, 4159, 4167, - 4173, 4179, 4181, 4186, 4190, 4192, 4196, 4201, 4202, 4203, - 4204, 4205, 4207, 4210, 4212, 4217, 4218, 4225, 4226, 4227, - 4235, 4238, 4242, 4244, 4246, 4251, 4252, 4253, 4254, 4257, - 4258, 4265, 4266, 4270, 4275, 4277, 4283, 4284, 4287, 4290, - 4292, 4294, 4295, 4302, 4309, 4311, 4319, 4322, 4333, 4335, - 4337, 4339, 4340, 4342, 4352, 4356, 4357, 4358, 4360, 4365, - 4366, 4368, 4370, 4374, 4376, 4381, 4382, 4383, 4394, 4396, - 4398, 4400, 4404, 4407, 4410, 4413, 4417, 4420, 4421, 4422, - 4424, 4429, 4431, 4432, 4437, 4439, 4440, 4446, 4451, 4453, - 4467, 4469, 4471, 4472, 4478, 4485, 4495, 4496, 4498, 4501, - 4502, 4503, 4508, 4509, 4510, 4512, 4513, 4515, 4516, 4517, - 4521, 4522, 4529, 4530, 4532, 4533, 4537, 4543, 4545, 4546, - 4547, 4550, 4552, 4558, 4559, 4561, 4566, 4567, 4569, 4576, - 4577, 4582, 4585, 4586, 4587, 4593, 4595, 4596, 4598, 4602, - 4609, 4610, 4611, 4617, 4625, 4627, 4631, 4634, 4635, 4645, - 4647, 4648, 4655, 4657, 4660, 4665, 4666, 4667, 4668, 4675, - 4678, 4680, 4683, 4687, 4689, 4691, 4692, 4693, 4695, 4699, - 4700, 4704, 4706, 4710, 4712, 4717, 4720, 4721, 4722, 4723, - 4724, 4725, 4729, 4730, 4732, 4733, 4737, 4738, 4743, 4744, - 4751, 4752, 4754, 4758, 4760, 4765, 4766, 4769, 4773, 4776, - 4783, 4784, 4788, 4789, 4790, 4793, 4804, 4805, 4808, 4811, - 4813, 4817, 4821, 4824, 4834, 4838, 4841, 4842, 4843, 4854, - 4855, 4858, 4859, 4860, 4867, 4868, 4869, 4870, 4873, 4876, - 4877, 4881, 4882, 4885, 4888, 4889, 4890, 4893, 4895, 4907, - 4908, 4910, 4911, 4914, 4916, 4918, 4923, 4925, 4928, 4930, - 4932, 4934, 4939, 4940, 4943, 4946, 4947, 4949, 4957, 4959, - 4966, 4969, 4971, 4973, 4975, 4979, 4980, 4981, 4983, 4987, - 4989, 4990, 4994, 4995, 4996, 4998, 4999, 5000, 5001, 5003, - 5004, 5008, 5012, 5018, 5024, 5027, 5032, 5034, 5038, 5040, - 5041, 5044, 5045, 5046, 5048, 5049, 5061, 5063, 5068, 5070, - 5072, 5073, 5077, 5085, 5086, 5093, 5095, 5096, 5097, 5100, - 5101, 5102, 5103, 5113, 5114, 5117, 5120, 5122, 5125, 5127, - 5135, 5136, 5137, 5139, 5140, 5141, 5143, 5148, 5149, 5151, - 5152, 5156, 5157, 5162, 5163, 5166, 5168, 5169, 5170, 5171, - 5174, 5178, 5181, 5182, 5189, 5190, 5192, 5194, 5197, 5200, - 5201, 5202, 5203, 5205, 5206, 5207, 5211, 5217, 5218, 5222, - 5224, 5226, 5227, 5228, 5233, 5235, 5241, 5244, 5246, 5247, - 5249, 5250, 5258, 5261, 5264, 5268, 5269, 5272, 5276, 5281, - 5284, 5287, 5288, 5289, 5291, 5294, 5296, 5297, 5299, 5305, - 5307, 5311, 5313, 5319, 5320, 5323, 5324, 5327, 5328, 5329, - 5330, 5331, 5332, 5335, 5344, 5345, 5346, 5348, 5352, 5354, - 5356, 5357, 5358, 5361, 5362, 5363, 5365, 5367, 5369, 5375, - 5378, 5380, 5381, 5382, 5397, 5401, 5403, 5404, 5407, 5408, - 5409, 5412, 5414, 5417, 5418, 5420, 5422, 5424, 5425, 5426, - 5428, 5437, 5438, 5442, 5443, 5444, 5445, 5446, 5449, 5450, - 5455, 5457, 5458, 5460, 5461, 5466, 5469, 5473, 5476, 5484, - 5485, 5486, 5489, 5491, 5498, 5501, 5502, 5504, 5506, 5508, - 5512, 5513, 5514, 5517, 5519, 5521, 5525, 5526, 5531, 5534, - 5535, 5536, 5538, 5539, 5542, 5547, 5550, 5557, 5567, 5570, - 5573, 5578, 5580, 5581, 5583, 5587, 5588, 5590, 5591, 5595, - 5598, 5600, 5601, 5603, 5604, 5611, 5613, 5614, 5615, 5617, - 5621, 5622, 5623, 5625, 5629, 5630, 5631, 5635, 5636, 5637, - 5642, 5643, 5645, 5647, 5651, 5654, 5656, 5658, 5664, 5665, - 5670, 5671, 5673, 5677, 5680, 5684, 5685, 5687, 5689, 5692, - 5693, 5694, 5697, 5700, 5708, 5715, 5716, 5717, 5724, 5727, - 5728, 5729, 5730, 5736, 5737, 5738, 5743, 5744, 5745, 5749, - 5751, 5753, 5756, 5758, 5759, 5760, 5761, 5762, 5764, 5765, - 5767, 5772, 5773, 5774, 5778, 5779, 5780, 5785, 5786, 5787, - 5790, 5791, 5793, 5794, 5795, 5797, 5798, 5799, 5805, 5806, - 5807, 5809, 5810, 5812, 5814, 5816, 5817, 5819, 5822, 5823, - 5825, 5831, 5833, 5834, 5840, 5841, 5842, 5846, 5848, 5849, - 5850, 5854, 5856, 5857, 5864, 5867, 5868, 5871, 5873, 5880, - 5882, 5884, 5885, 5888, 5893, 5894, 5895, 5896, 5900, 5906, - 5908, 5909, 5910, 5914, 5915, 5916, 5918, 5920, 5921, 5923, - 5927, 5928, 5929, 5930, 5931, 5932, 5941, 5942, 5947, 5949, - 5951, 5952, 5954, 5956, 5957, 5959, 5964, 5965, 5969, 5971, - 5972, 5973, 5976, 5977, 5983, 5985, 5987, 5989, 5992, 5997, - 5999, 6000, 6002, 6004, 6005, 6006, 6008, 6009, 6010, 6012, - 6013, 6018, 6022, 6025, 6027, 6028, 6031, 6032, 6033, 6034, - 6035, 6037, 6038, 6040, 6053, 6055, 6056, 6057, 6062, 6064, - 6069, 6072, 6074, 6081, 6085, 6090, 6091, 6099, 6100, 6101, - 6102, 6105, 6108, 6113, 6116, 6121, 6123, 6125, 6126, 6128, - 6129, 6131, 6132, 6133, 6137, 6138, 6139, 6142, 6143, 6145, - 6146, 6147, 6150, 6152, 6154, 6156, 6159, 6160, 6161, 6163, - 6164, 6168, 6174, 6175, 6180, 6181, 6182, 6188, 6190, 6194, - 6195, 6196, 6198, 6206, 6207, 6216, 6218, 6219, 6223, 6226, - 6227, 6228, 6229, 6231, 6232, 6233, 6237, 6241, 6244, 6245, - 6248, 6252, 6253, 6255, 6260, 6261, 6263, 6265, 6266, 6269, - 6271, 6278, 6279, 6283, 6284, 6287, 6288, 6291, 6292, 6294, - 6295, 6296, 6297, 6298, 6300, 6302, 6303, 6304, 6308, 6311, - 6313, 6320, 6324, 6329, 6330, 6333, 6340, 6342, 6344, 6346, - 6347, 6349, 6350, 6354, 6357, 6360, 6365, 6366, 6368, 6373, - 6375, 6376, 6377, 6378, 6381, 6382, 6383, 6384, 6385, 6386, - 6388, 6391, 6397, 6402, 6403, 6404, 6406, 6408, 6409, 6410, - 6414, 6416, 6418, 6419, 6422, 6424, 6425, 6426, 6428, 6430, - 6434, 6438, 6439, 6440, 6442, 6445, 6448, 6450, 6451, 6454, - 6456, 6458, 6459, 6463, 6464, 6465, 6467, 6469, 6470, 6473, - 6474, 6475, 6476, 6480, 6481, 6483, 6487, 6490, 6491, 6492, - 6493, 6494, 6499, 6500, 6506, 6508, 6513, 6514, 6515, 6517, - 6520, 6522, 6524, 6528, 6529, 6530, 6532, 6533, 6536, 6538, - 6541, 6542, 6543, 6547, 6551, 6552, 6553, 6555, 6558, 6559, - 6560, 6561, 6562, 6563, 6564, 6565, 6568, 6569, 6571, 6576, - 6578, 6580, 6583, 6585, 6587, 6588, 6590, 6591, 6592, 6597, - 6600, 6602, 6604, 6606, 6607, 6609, 6610, 6612, 6613, 6619, - 6620, 6624, 6626, 6628, 6629, 6630, 6634, 6638, 6640, 6643, - 6644, 6646, 6648, 6649, 6655, 6662, 6665, 6669, 6680, 6681, - 6684, 6686, 6689, 6698, 6701, 6703, 6705, 6706, 6708, 6709, - 6713, 6714, 6717, 6720, 6722, 6725, 6727, 6729, 6732, 6736, - 6739, 6742, 6745, 6746, 6748, 6751, 6752, 6756, 6758, 6762, - 6763, 6764, 6767, 6768, 6769, 6770, 6771, 6773, 6774, 6775, - 6776, 6777, 6778, 6779, 6780, 6781, 6782, 6783, 6786, 6787, - 6791, 6796, 6797, 6800, 6801, 6805, 6808, 6810, 6814, 6815, - 6816, 6818, 6819, 6821, 6823, 6826, 6829, 6830, 6832, 6835, - 6838, 6840, 6842, 6843, 6844, 6845, 6846, 6848, 6851, 6852, - 6853, 6855, 6857, 6859, 6861, 6862, 6865, 6868, 6869, 6870, - 6873, 6875, 6877, 6879, 6881, 6884, 6885, 6888, 6889, 6890, - 6891, 6895, 6896, 6899, 6900, 6901, 6902, 6903, 6904, 6907, - 6909, 6910, 6912, 6914, 6915, 6916, 6918, 6919, 6920, 6924, - 6927, 6932, 6934, 6937, 6942, 6944, 6945, 6946, 6948, 6949, - 6952, 6953, 6955, 6960, 6961, 6964, 6968, 6969, 6970, 6974, - 6976, 6981, 6982, 6988, 6993, 6997, 6998, 6999, 7002, 7005, - 7008, 7009, 7010, 7011, 7012, 7013, 7014, 7015, 7020, 7021, - 7023, 7025, 7027, 7028, 7038, 7040, 7041, 7043, 7046, 7048, - 7050, 7051, 7054, 7055, 7060, 7062, 7069, 7070, 7071, 7073, - 7076, 7080, 7082, 7086, 7087, 7088, 7089, 7092, 7094, 7098, - 7100, 7103, 7104, 7105, 7106, 7107, 7108, 7110, 7113, 7115, - 7116, 7117, 7118, 7119, 7123, 7127, 7128, 7130, 7131, 7136, - 7140, 7142, 7146, 7151, 7153, 7154, 7158, 7159, 7161, 7163, - 7164, 7168, 7169, 7170, 7172, 7180, 7181, 7184, 7185, 7188, - 7191, 7193, 7196, 7197, 7199, 7203, 7204, 7209, 7213, 7215, - 7218, 7219, 7221, 7222, 7224, 7229, 7231, 7233, 7235, 7236, - 7237, 7239, 7240, 7241, 7242, 7243, 7245, 7247, 7248, 7249, - 7257, 7259, 7261, 7262, 7263, 7266, 7267, 7269, 7270, 7272, - 7274, 7275, 7278, 7279, 7282, 7285, 7290, 7292, 7294, 7296, - 7298, 7300, 7301, 7302, 7304, 7305, 7307, 7309, 7310, 7315, - 7317, 7320, 7321, 7323, 7324, 7325, 7328, 7329, 7331, 7332, - 7333, 7336, 7339, 7341, 7343, 7347, 7348, 7349, 7350, 7351, - 7352, 7354, 7355, 7356, 7357, 7360, 7367, 7369, 7370, 7374, - 7375, 7376, 7377, 7379, 7380, 7384, 7385, 7386, 7390, 7392, - 7393, 7397, 7399, 7400, 7401, 7403, 7404, 7405, 7408, 7409, - 7410, 7415, 7417, 7420, 7421, 7424, 7426, 7430, 7432, 7439, - 7442, 7444, 7446, 7447, 7450, 7451, 7453, 7454, 7455, 7456, - 7458, 7460, 7464, 7465, 7471, 7472, 7475, 7476, 7477, 7478, - 7480, 7481, 7483, 7484, 7486, 7489, 7490, 7491, 7492, 7495, - 7496, 7497, 7499, 7500, 7501, 7505, 7506, 7507, 7509, 7513, - 7515, 7516, 7517, 7519, 7523, 7525, 7526, 7530, 7532, 7535, - 7537, 7539, 7540, 7542, 7546, 7548, 7549, 7551, 7553, 7556, - 7557, 7559, 7562, 7565, 7566, 7567, 7569, 7571, 7574, 7575, - 7577, 7578, 7579, 7580, 7581, 7582, 7584, 7586, 7590, 7594, - 7596, 7598, 7599, 7600, 7604, 7605, 7606, 7608, 7610, 7612, - 7614, 7615, 7616, 7617, 7622, 7625, 7627, 7628, 7629, 7630, - 7631, 7632, 7633, 7635, 7636, 7637, 7639, 7640, 7641, 7644, - 7646, 7647, 7648, 7649, 7651, 7652, 7653, 7657, 7658, 7659, - 7660, 7661, 7665, 7666, 7668, 7670, 7671, 7672, 7675, 7678, - 7679, 7681, 7685, 7686, 7687, 7690, 7691, 7692, 7698, 7702, - 7704, 7707, 7709, 7711, 7712, 7713, 7714, 7715, 7716, 7717, - 7718, 7721, 7723, 7725, 7726, 7727, 7728, 7729, 7731, 7733, - 7736, 7739, 7740, 7744, 7746, 7752, 7753, 7754, 7757, 7759, - 7760, 7761, 7762, 7763, 7766, 7767, 7769, 7770, 7774, 7775, - 7778, 7779, 7780, 7781, 7783, 7784, 7788, 7790, 7791, 7793, - 7794, 7796, 7797, 7799, 7800, 7803, 7804, 7805, 7806, 7808, - 7809, 7811, 7817, 7819, 7822, 7823, 7825, 7831, 7833, 7835, - 7836, 7837, 7838, 7839, 7841, 7842, 7843, 7844, 7845, 7846, - 7848, 7850, 7854, 7855, 7856, 7857, 7858, 7859, 7860, 7861, - 7865, 7866, 7868, 7870, 7871, 7872, 7874, 7876, 7877, 7880, - 7881, 7882, 7883, 7884, 7885, 7886, 7888, 7890, 7891, 7894, - 7897, 7898, 7901, 7903, 7906, 7907, 7910, 7912, 7913, 7914, - 7916, 7918, 7920, 7923, 7924, 7925, 7931, 7934, 7935, 7939, - 7940, 7942, 7948, 7951, 7953, 7954, 7955, 7957, 7958, 7959, - 7964, 7965, 7966, 7968, 7970, 7971, 7975, 7977, 7978, 7983, - 7984, 7986, 7988, 7989, 7990, 7991, 7994, 7995, 7997, 7998, - 7999, 8000, 8001, 8003, 8004, 8006, 8007, 8008, 8010, 8012, - 8015, 8016, 8017, 8018, 8019, 8022, 8023, 8027, 8029, 8030, - 8032, 8034, 8036, 8038, 8040, 8041, 8042, 8045, 8047, 8050, - 8052, 8053, 8054, 8055, 8056, 8059, 8061, 8064, 8065, 8066, - 8069, 8072, 8078, 8079, 8081, 8083, 8085, 8086, 8087, 8088, - 8089, 8092, 8095, 8098, 8101, 8107, 8108, 8109, 8113, 8114, - 8117, 8119, 8120, 8121, 8122, 8125, 8126, 8128, 8129, 8131, - 8134, 8135, 8136, 8140, 8141, 8142, 8145, 8147, 8150, 8152, - 8153, 8154, 8155, 8156, 8159, 8160, 8161, 8162, 8163, 8164, - 8165, 8166, 8168, 8169, 8174, 8177, 8178, 8180, 8183, 8184, - 8188, 8190, 8191, 8192, 8193, 8194, 8195, 8196, 8197, 8198, - 8202, 8203, 8204, 8209, 8210, 8214, 8216, 8218, 8219, 8220, - 8221, 8222, 8225, 8230, 8231, 8233, 8237, 8244, 8245, 8248, - 8249, 8251, 8252, 8258, 8259, 8260, 8261, 8263, 8268, 8270, - 8271, 8272, 8274, 8279, 8286, 8289, 8290, 8291, 8294, 8295, - 8296, 8297, 8298, 8301, 8302, 8304, 8306, 8309, 8311, 8313, - 8314, 8317, 8319, 8321, 8322, 8323, 8324, 8329, 8331, 8335, - 8336, 8337, 8338, 8341, 8344, 8345, 8346, 8348, 8349, 8351, - 8352, 8353, 8354, 8356, 8357, 8358, 8359, 8361, 8363, 8364, - 8368, 8372, 8373, 8377, 8378, 8379, 8381, 8383, 8386, 8387, - 8388, 8389, 8390, 8391, 8392, 8393, 8395, 8398, 8400, 8403, - 8405, 8407, 8410, 8412, 8415, 8417, 8429, 8430, 8434, 8435, - 8439, 8442, 8445, 8447, 8449, 8450, 8452, 8454, 8457, 8460, - 8461, 8463, 8464, 8466, 8468, 8471, 8472, 8473, 8474, 8475, - 8477, 8481, 8483, 8484, 8485, 8486, 8489, 8491, 8494, 8495, - 8498, 8501, 8505, 8506, 8508, 8510, 8511, 8515, 8516, 8520, - 8521, 8522, 8523, 8524, 8525, 8526, 8530, 8535, 8536, 8538, - 8539, 8540, 8542, 8544, 8549, 8550, 8552, 8558, 8561, 8569, - 8570, 8572, 8574, 8578, 8579, 8581, 8586, 8588, 8590, 8591, - 8597, 8600, 8602, 8605, 8607, 8608, 8611, 8612, 8613, 8614, - 8619, 8620, 8624, 8625, 8626, 8628, 8629, 8633, 8634, 8638, - 8639, 8640, 8642, 8643, 8644, 8645, 8647, 8649, 8651, 8652, - 8653, 8657, 8658, 8659, 8660, 8661, 8662, 8664, 8668, 8670, - 8671, 8672, 8673, 8674, 8680, 8681, 8682, 8683, 8684, 8686, - 8688, 8690, 8691, 8695, 8700, 8702, 8703, 8706, 8709, 8712, - 8716, 8717, 8720, 8721, 8722, 8724, 8726, 8727, 8729, 8731, - 8732, 8733, 8734, 8737, 8738, 8739, 8740, 8741, 8743, 8744, - 8745, 8748, 8750, 8751, 8752, 8755, 8756, 8757, 8758, 8759, - 8760, 8762, 8763, 8764, 8765, 8769, 8771, 8772, 8773, 8774, - 8775, 8776, 8777, 8779, 8782, 8783, 8786, 8788, 8789, 8791, - 8794, 8795, 8797, 8800, 8805, 8806, 8809, 8810, 8815, 8817, - 8818, 8820, 8821, 8824, 8825, 8830, 8831, 8838, 8839, 8844, - 8847, 8855, 8857, 8858, 8859, 8866, 8868, 8869, 8870, 8872, - 8875, 8876, 8877, 8878, 8881, 8882, 8883, 8884, 8885, 8887, - 8888, 8890, 8891, 8893, 8898, 8899, 8901, 8902, 8903, 8904, - 8907, 8908, 8909, 8910, 8914, 8915, 8918, 8920, 8922, 8923, - 8925, 8926, 8928, 8929, 8930, 8931, 8939, 8941, 8943, 8946, - 8949, 8951, 8956, 8957, 8960, 8962, 8964, 8965, 8970, 8972, - 8973, 8974, 8975, 8976, 8977, 8978, 8981, 8982, 8983, 8986, - 8987, 8989, 8992, 8996, 8999, 9000, 9001, 9002, 9004, 9006, - 9007, 9008, 9011, 9012, 9016, 9018, 9020, 9022, 9027, 9031, - 9033, 9034, 9037, 9040, 9041, 9043, 9048, 9050, 9051, 9052, - 9055, 9060, 9063, 9065, 9067, 9068, 9069, 9070, 9071, 9074, - 9077, 9078, 9080, 9081, 9082, 9086, 9087, 9088, 9089, 9090, - 9092, 9093, 9094, 9095, 9096, 9097, 9100, 9101, 9105, 9110, - 9111, 9114, 9115, 9117, 9118, 9119, 9120, 9121, 9122, 9123, - 9126, 9127, 9128, 9130, 9132, 9134, 9137, 9138, 9142, 9143, - 9144, 9145, 9146, 9149, 9152, 9155, 9156, 9157, 9158, 9159, - 9160, 9162, 9165, 9167, 9173, 9176, 9177, 9178, 9179, 9181, - 9183, 9187, 9189, 9191, 9192, 9193, 9194, 9199, 9200, 9203, - 9204, 9206, 9211, 9213, 9214, 9215, 9218, 9219, 9220, 9222, - 9223, 9224, 9226, 9228, 9230, 9231, 9235, 9238, 9239, 9242, - 9244, 9248, 9249, 9252, 9253, 9254, 9258, 9259, 9260, 9261, - 9263, 9264, 9268, 9274, 9276, 9278, 9279, 9284, 9285, 9286, - 9287, 9288, 9289, 9293, 9295, 9296, 9298, 9302, 9304, 9305, - 9307, 9309, 9310, 9312, 9320, 9321, 9323, 9324, 9327, 9328, - 9331, 9335, 9336, 9337, 9340, 9343, 9348, 9349, 9350, 9351, - 9352, 9354, 9355, 9360, 9361, 9363, 9369, 9374, 9375, 9376, - 9377, 9380, 9384, 9388, 9390, 9391, 9392, 9394, 9396, 9397, - 9398, 9399, 9400, 9405, 9406, 9408, 9409, 9416, 9419, 9421, - 9422, 9424, 9427, 9433, 9435, 9438, 9441, 9442, 9443, 9444, - 9449, 9450, 9453, 9455, 9456, 9458, 9459, 9460, 9462, 9465, - 9468, 9469, 9471, 9472, 9473, 9474, 9475, 9477, 9479, 9480, - 9481, 9482, 9485, 9486, 9488, 9490, 9492, 9493, 9496, 9498, - 9499, 9501, 9502, 9504, 9506, 9507, 9511, 9513, 9521, 9522, - 9523, 9524, 9525, 9527, 9528, 9530, 9531, 9536, 9537, 9539, - 9543, 9545, 9547, 9550, 9552, 9555, 9557, 9558, 9562, 9563, - 9568, 9571, 9573, 9574, 9575, 9576, 9577, 9578, 9579, 9580, - 9581, 9582, 9583, 9585, 9589, 9591, 9592, 9593, 9594, 9595, - 9596, 9599, 9600, 9601, 9603, 9604, 9616, 9617, 9619, 9620, - 9621, 9623, 9624, 9625, 9626, 9627, 9628, 9629, 9632, 9638, - 9639, 9640, 9641, 9642, 9643, 9647, 9650, 9651, 9652, 9653, - 9655, 9656, 9658, 9659, 9660, 9662, 9663, 9664, 9668, 9669, - 9671, 9672, 9674, 9676, 9677, 9678, 9681, 9682, 9684, 9685, - 9686, 9696, 9697, 9699, 9702, 9704, 9707, 9708, 9709, 9716, - 9717, 9718, 9719, 9722, 9724, 9726, 9727, 9728, 9730, 9734, - 9735, 9738, 9740, 9741, 9743, 9744, 9747, 9748, 9749, 9754, - 9756, 9763, 9764, 9765, 9767, 9768, 9770, 9771, 9772, 9773, - 9774, 9776, 9777, 9778, 9781, 9783, 9785, 9791, 9793, 9800, - 9801, 9803, 9804, 9806, 9808, 9813, 9815, 9816, 9817, 9819, - 9822, 9823, 9824, 9825, 9826, 9828, 9832, 9833, 9835, 9837, - 9838, 9841, 9844, 9847, 9848, 9849, 9853, 9854, 9855, 9856, - 9858, 9861, 9862, 9872, 9875, 9876, 9877, 9878, 9879, 9882, - 9884, 9885, 9886, 9888, 9889, 9890, 9894, 9895, 9896, 9899, - 9900, 9902, 9906, 9908, 9911, 9914, 9915, 9919, 9920, 9922, - 9923, 9931, 9933, 9936, 9937, 9938, 9941, 9943, 9944, 9945, - 9946, 9948, 9951, 9952, 9954, 9955, 9956, 9957, 9959, 9960, - 9964, 9966, 9968, 9971, 9973, 9974, 9976, 9979, 9982, 9983, - 9986, 9988, 9991, 9992, 9993, 9994, 9995, 9996, 9997, 9998, - 10001, 10003, 10006, 10007, 10008, 10009, 10011, 10013, 10016, 10020, - 10023, 10025, 10026, 10027, 10028, 10029, 10031, 10033, 10035, 10036, - 10038, 10044, 10046, 10047, 10048, 10049, 10050, 10052, 10054, 10058, - 10059, 10060, 10064, 10065, 10066, 10067, 10068, 10070, 10072, 10079, - 10081, 10083, 10084, 10088, 10090, 10091, 10092, 10096, 10100, 10101, - 10102, 10109, 10110, 10113, 10114, 10117, 10118, 10120, 10122, 10123, - 10124, 10125, 10126, 10127, 10130, 10131, 10133, 10134, 10136, 10138, - 10139, 10145, 10146, 10147, 10150, 10151, 10152, 10154, 10157, 10160, - 10162, 10163, 10165, 10170, 10176, 10177, 10178, 10179, 10182, 10186, - 10187, 10191, 10192, 10193, 10194, 10196, 10200, 10201, 10205, 10206, - 10210, 10211, 10212, 10213, 10214, 10215, 10216, 10217, 10218, 10227, - 10229, 10230, 10233, 10237, 10238, 10239, 10240, 10241, 10244, 10247, - 10248, 10251, 10254, 10255, 10256, 10258, 10260, 10261, 10262, 10264, - 10266, 10268, 10269, 10271, 10272, 10273, 10274, 10276, 10279, 10280, - 10285, 10287, 10291, 10293, 10294, 10295, 10298, 10299, 10300, 10301, - 10302, 10305, 10306, 10307, 10309, 10310, 10313, 10314, 10315, 10318, - 10322, 10323, 10327, 10330, 10332, 10333, 10336, 10337, 10338, 10340, - 10343, 10344, 10346, 10347, 10350, 10351, 10352, 10353, 10354, 10356, - 10357, 10359, 10366, 10369, 10370, 10372, 10373, 10374, 10375, 10377, - 10379, 10380, 10381, 10382, 10383, 10386, 10390, 10392, 10393, 10395, - 10401, 10403, 10406, 10407, 10408, 10409, 10411, 10413, 10415, 10416, - 10421, 10424, 10430, 10434, 10435, 10436, 10437, 10438, 10441, 10442, - 10443, 10445, 10446, 10448, 10449, 10454, 10457, 10458, 10459, 10460, - 10461, 10462, 10464, 10466, 10475, 10476, 10485, 10488, 10490, 10493, - 10494, 10495, 10501, 10507, 10508, 10509, 10510, 10511, 10512, 10513, - 10514, 10515, 10519, 10522, 10524, 10525, 10528, 10532, 10533, 10534, - 10536, 10538, 10539, 10540, 10543, 10545, 10549, 10550, 10551, 10553, - 10554, 10555, 10557, 10558, 10559, 10560, 10564, 10570, 10572, 10575, - 10578, 10585, 10586, 10587, 10588, 10589, 10591, 10592, 10593, 10596, - 10597, 10598, 10600, 10601, 10602, 10603, 10605, 10607, 10608, 10609, - 10610, 10612, 10615, 10619, 10620, 10622, 10624, 10633, 10634, 10637, - 10638, 10639, 10640, 10641, 10642, 10643, 10644, 10645, 10647, 10649, - 10651, 10653, 10657, 10659, 10663, 10666, 10667, 10668, 10670, 10671, - 10672, 10673, 10674, 10675, 10677, 10678, 10681, 10683, 10688, 10691, - 10692, 10693, 10695, 10698, 10699, 10701, 10703, 10704, 10707, 10709, - 10710, 10711, 10713, 10714, 10720, 10721, 10722, 10723, 10724, 10727, - 10731, 10734, 10736, 10737, 10738, 10741, 10744, 10747, 10748, 10751, - 10752, 10754, 10756, 10758, 10760, 10762, 10764, 10765, 10768, 10769, - 10771, 10773, 10776, 10778, 10779, 10782, 10789, 10793, 10794, 10795, - 10796, 10799, 10801, 10803, 10805, 10808, 10813, 10816, 10817, 10819, - 10820, 10821, 10825, 10829, 10830, 10831, 10832, 10833, 10834, 10838, - 10839, 10841, 10844, 10846, 10848, 10852, 10853, 10855, 10858, 10860, - 10861, 10864, 10865, 10866, 10867, 10869, 10870, 10873, 10876, 10877, - 10878, 10880, 10881, 10882, 10887, 10888, 10889, 10890, 10893, 10894, - 10895, 10896, 10903, 10908, 10911, 10912, 10913, 10915, 10917, 10920, - 10921, 10931, 10932, 10937, 10939, 10940, 10941, 10943, 10945, 10946, - 10947, 10950, 10951, 10952, 10953, 10954, 10955, 10958, 10960, 10962, - 10963, 10967, 10968, 10969, 10970, 10971, 10972, 10977, 10981, 10982, - 10984, 10985, 10986, 10988, 10990, 10991, 10992, 10993, 10994, 10995, - 10997, 10998, 11001, 11002, 11003, 11004, 11009, 11012, 11013, 11014, - 11015, 11018, 11020, 11021, 11022, 11024, 11025, 11027, 11035, 11037, - 11038, 11041, 11043, 11049, 11051, 11054, 11055, 11056, 11062, 11063, - 11064, 11066, 11067, 11068, 11070, 11071, 11075, 11076, 11077, 11078, - 11080, 11081, 11083, 11084, 11085, 11086, 11087, 11089, 11090, 11093, - 11096, 11099, 11100, 11101, 11104, 11105, 11107, 11108, 11109, 11111, - 11112, 11113, 11115, 11116, 11117, 11118, 11119, 11120, 11121, 11124, - 11125, 11126, 11128, 11129, 11131, 11138, 11139, 11143, 11146, 11147, - 11148, 11149, 11150, 11152, 11153, 11155, 11158, 11159, 11160, 11161, - 11163, 11164, 11165, 11166, 11167, 11168, 11170, 11172, 11173, 11174, - 11175, 11176, 11177, 11179, 11180, 11184, 11188, 11189, 11190, 11191, - 11192, 11195, 11196, 11199, 11203, 11207, 11208, 11209, 11211, 11212, - 11214, 11216, 11218, 11221, 11222, 11223, 11225, 11228, 11229, 11232, - 11234, 11235, 11240, 11242, 11244, 11245, 11247, 11248, 11250, 11252, - 11255, 11257, 11259, 11260, 11261, 11262, 11263, 11264, 11265, 11266, - 11267, 11268, 11271, 11272, 11273, 11275, 11277, 11278, 11279, 11280, - 11281, 11282, 11283, 11285, 11288, 11289, 11292, 11293, 11294, 11295, - 11296, 11297, 11302, 11303, 11304, 11311, 11314, 11319, 11320, 11323, - 11327, 11329, 11334, 11336, 11341, 11343, 11344, 11346, 11347, 11353, - 11355, 11356, 11367, 11372, 11373, 11376, 11378, 11380, 11382, 11386, - 11387, 11396, 11397, 11398, 11400, 11401, 11402, 11404, 11405, 11406, - 11407, 11408, 11410, 11411, 11412, 11413, 11414, 11416, 11419, 11420, - 11421, 11422, 11423, 11424, 11425, 11426, 11428, 11432, 11435, 11437, - 11439, 11440, 11441, 11442, 11444, 11446, 11447, 11451, 11453, 11454, - 11455, 11457, 11458, 11460, 11463, 11464, 11466, 11468, 11469, 11473, - 11478, 11483, 11485, 11487, 11489, 11490, 11492, 11499, 11500, 11501, - 11502, 11503, 11504, 11506, 11508, 11509, 11510, 11515, 11518, 11520, - 11523, 11525, 11527, 11529, 11531, 11536, 11538, 11541, 11543, 11548, - 11549, 11556, 11557, 11559, 11563, 11565, 11570, 11572, 11573, 11575, - 11576, 11577, 11579, 11580, 11582, 11583, 11584, 11588, 11589, 11593, - 11596, 11598, 11602, 11603, 11605, 11608, 11613, 11614, 11618, 11621, - 11623, 11628, 11630, 11632, 11635, 11636, 11637, 11641, 11642, 11643, - 11648, 11650, 11651, 11652, 11656, 11658, 11659, 11662, 11670, 11671, - 11672, 11673, 11677, 11680, 11681, 11685, 11691, 11692, 11699, 11701, - 11702, 11703, 11704, 11705, 11709, 11710, 11711, 11712, 11713, 11715, - 11717, 11718, 11719, 11720, 11721, 11722, 11723, 11724, 11728, 11729, - 11733, 11735, 11740, 11741, 11742, 11744, 11746, 11747, 11748, 11750, - 11751, 11752, 11754, 11757, 11758, 11760, 11761, 11762, 11763, 11764, - 11768, 11771, 11772, 11773, 11777, 11782, 11783, 11785, 11786, 11788, - 11789, 11796, 11797, 11798, 11803, 11805, 11807, 11809, 11810, 11811, - 11813, 11816, 11818, 11819, 11820, 11821, 11822, 11824, 11825, 11836, - 11838, 11839, 11840, 11842, 11844, 11848, 11854, 11857, 11864, 11866, - 11867, 11871, 11873, 11874, 11877, 11879, 11881, 11884, 11885, 11887, - 11890, 11891, 11892, 11894, 11899, 11900, 11902, 11905, 11907, 11908, - 11910, 11911, 11915, 11921, 11922, 11923, 11925, 11931, 11932, 11933, - 11935, 11937, 11940, 11942, 11945, 11946, 11955, 11957, 11959, 11962, - 11963, 11964, 11965, 11971, 11976, 11981, 11983, 11986, 11988, 11991, - 11992, 11995, 11999, 12000, 12001, 12003, 12004, 12007, 12009, 12010, - 12013, 12015, 12017, 12021, 12025, 12028, 12034, 12035, 12036, 12037, - 12039, 12040, 12041, 12042, 12045, 12046, 12049, 12050, 12051, 12053, - 12055, 12057, 12058, 12059, 12062, 12063, 12064, 12066, 12067, 12070, - 12071, 12072, 12075, 12076, 12078, 12079, 12081, 12082, 12085, 12086, - 12087, 12088, 12090, 12091, 12094, 12099, 12100, 12102, 12104, 12105, - 12106, 12107, 12108, 12109, 12111, 12112, 12114, 12116, 12118, 12120, - 12122, 12123, 12124, 12125, 12127, 12129, 12131, 12132, 12134, 12135, - 12137, 12138, 12139, 12143, 12145, 12147, 12150, 12151, 12152, 12154, - 12155, 12156, 12158, 12159, 12161, 12162, 12163, 12167, 12170, 12173, - 12174, 12175, 12176, 12177, 12178, 12181, 12182, 12185, 12186, 12190, - 12193, 12194, 12195, 12196, 12197, 12198, 12200, 12202, 12204, 12205, - 12206, 12213, 12215, 12217, 12218, 12220, 12221, 12222, 12223, 12224, - 12225, 12226, 12229, 12230, 12231, 12232, 12233, 12234, 12237, 12241, - 12243, 12244, 12248, 12249, 12250, 12252, 12253, 12255, 12256, 12259, - 12260, 12261, 12262, 12263, 12264, 12267, 12268, 12270, 12271, 12273, - 12276, 12277, 12280, 12281, 12283, 12284, 12287, 12291, 12292, 12293, - 12294, 12295, 12299, 12300, 12301, 12302, 12303, 12309, 12312, 12313, - 12314, 12315, 12319, 12320, 12321, 12322, 12323, 12324, 12327, 12329, - 12330, 12332, 12333, 12334, 12337, 12340, 12341, 12342, 12343, 12350, - 12352, 12353, 12354, 12355, 12356, 12357, 12358, 12360, 12361, 12364, - 12365, 12366, 12371, 12375, 12378, 12379, 12380, 12381, 12382, 12391, - 12393, 12394, 12395, 12396, 12397, 12402, 12408, 12410, 12414, 12416, - 12417, 12418, 12419, 12421, 12423, 12426, 12428, 12429, 12430, 12431, - 12433, 12434, 12436, 12437, 12438, 12439, 12443, 12444, 12445, 12452, - 12454, 12455, 12456, 12458, 12459, 12465, 12466, 12467, 12469, 12470, - 12471, 12475, 12476, 12477, 12479, 12480, 12482, 12484, 12485, 12490, - 12494, 12495, 12497, 12501, 12502, 12504, 12506, 12507, 12508, 12509, - 12510, 12512, 12513, 12514, 12517, 12518, 12519, 12520, 12522, 12526, - 12527, 12530, 12535, 12538, 12540, 12544, 12548, 12549, 12552, 12556, - 12559, 12560, 12562, 12563, 12566, 12569, 12571, 12572, 12573, 12574, - 12575, 12576, 12578, 12579, 12580, 12583, 12585, 12586, 12588, 12590, - 12593, 12596, 12598, 12599, 12600, 12602, 12603, 12607, 12608, 12613, - 12614, 12619, 12620, 12621, 12624, 12625, 12627, 12628, 12630, 12631, - 12632, 12635, 12636, 12639, 12640, 12643, 12646, 12647, 12649, 12650, - 12651, 12652, 12653, 12657, 12660, 12662, 12664, 12665, 12666, 12667, - 12668, 12670, 12672, 12674, 12675, 12684, 12685, 12687, 12691, 12693, - 12694, 12695, 12696, 12697, 12698, 12700, 12701, 12704, 12705, 12706, - 12709, 12710, 12713, 12715, 12716, 12717, 12718, 12719, 12723, 12724, - 12730, 12732, 12733, 12736, 12738, 12741, 12743, 12744, 12747, 12748, - 12749, 12750, 12751, 12752, 12753, 12754, 12755, 12758, 12760, 12761, - 12762, 12765, 12766, 12768, 12779, 12780, 12782, 12784, 12785, 12786, - 12787, 12788, 12791, 12793, 12794, 12797, 12803, 12805, 12806, 12811, - 12812, 12813, 12814, 12815, 12816, 12818, 12821, 12824, 12827, 12830, - 12832, 12834, 12836, 12837, 12839, 12840, 12841, 12842, 12844, 12845, - 12846, 12848, 12851, 12852, 12854, 12855, 12858, 12859, 12864, 12865, - 12868, 12874, 12875, 12877, 12879, 12881, 12883, 12884, 12886, 12888, - 12889, 12890, 12891, 12893, 12897, 12899, 12902, 12903, 12905, 12907, - 12909, 12913, 12914, 12915, 12916, 12917, 12918, 12919, 12921, 12922, - 12923, 12930, 12934, 12935, 12939, 12940, 12941, 12943, 12945, 12946, - 12948, 12949, 12950, 12951, 12953, 12957, 12959, 12961, 12962, 12965, - 12967, 12968, 12970, 12971, 12972, 12973, 12974, 12976, 12980, 12981, - 12985, 12986, 12988, 12990, 12992, 12994, 12995, 12996, 12998, 12999, - 13002, 13005, 13009, 13011, 13012, 13013, 13014, 13015, 13020, 13022, - 13025, 13031, 13032, 13033, 13036, 13038, 13039, 13042, 13044, 13045, - 13048, 13050, 13053, 13054, 13055, 13058, 13061, 13064, 13066, 13068, - 13071, 13072, 13073, 13076, 13077, 13079, 13081, 13082, 13083, 13084, - 13085, 13086, 13087, 13089, 13091, 13092, 13095, 13098, 13099, 13100, - 13102, 13103, 13107, 13109, 13111, 13112, 13113, 13114, 13115, 13116, - 13118, 13119, 13120, 13121, 13122, 13123, 13125, 13126, 13129, 13130, - 13132, 13133, 13134, 13135, 13136, 13139, 13141, 13142, 13143, 13144, - 13145, 13146, 13147, 13148, 13149, 13151, 13152, 13154, 13155, 13156, - 13157, 13159, 13160, 13162, 13164, 13167, 13168, 13169, 13171, 13175, - 13177, 13178, 13180, 13181, 13182, 13183, 13184, 13185, 13186, 13188, - 13190, 13191, 13192, 13193, 13195, 13197, 13200, 13201, 13204, 13209, - 13212, 13213, 13214, 13216, 13217, 13218, 13221, 13222, 13226, 13227, - 13230, 13231, 13232, 13235, 13237, 13238, 13240, 13242, 13243, 13246, - 13247, 13250, 13254, 13256, 13258, 13263, 13265, 13266, 13267, 13271, - 13272, 13275, 13276, 13278, 13279, 13281, 13282, 13283, 13284, 13286, - 13287, 13288, 13289, 13290, 13291, 13292, 13294, 13295, 13298, 13300, - 13301, 13303, 13304, 13306, 13308, 13309, 13311, 13312, 13313, 13314, - 13316, 13318, 13319, 13323, 13324, 13326, 13327, 13328, 13329, 13330, - 13335, 13336, 13337, 13339, 13342, 13343, 13344, 13346, 13347, 13348, - 13351, 13358, 13360, 13361, 13362, 13367, 13368, 13369, 13376, 13377, - 13378, 13382, 13384, 13388, 13389, 13391, 13394, 13395, 13396, 13397, - 13398, 13399, 13400, 13401, 13402, 13403, 13405, 13408, 13409, 13415, - 13416, 13417, 13421, 13432, 13433, 13434, 13435, 13439, 13440, 13441, - 13442, 13443, 13450, 13452, 13458, 13462, 13463, 13464, 13465, 13466, - 13467, 13469, 13471, 13473, 13475, 13476, 13480, 13488, 13490, 13493, - 13494, 13496, 13497, 13498, 13501, 13504, 13506, 13507, 13508, 13510, - 13511, 13512, 13513, 13515, 13517, 13521, 13523, 13526, 13527, 13529, - 13530, 13531, 13533, 13536, 13538, 13541, 13542, 13544, 13545, 13547, - 13548, 13555, 13560, 13561, 13567, 13568, 13569, 13574, 13575, 13577, - 13579, 13584, 13585, 13587, 13588, 13590, 13592, 13593, 13595, 13598, - 13601, 13602, 13603, 13608, 13613, 13615, 13618, 13620, 13624, 13626, - 13627, 13630, 13632, 13635, 13638, 13639, 13641, 13646, 13647, 13649, - 13650, 13651, 13652, 13655, 13656, 13663, 13665, 13666, 13667, 13669, - 13670, 13672, 13673, 13674, 13675, 13677, 13679, 13683, 13687, 13690, - 13691, 13692, 13693, 13694, 13700, 13703, 13711, 13714, 13716, 13717, - 13718, 13720, 13722, 13725, 13728, 13729, 13730, 13731, 13733, 13734, - 13737, 13738, 13739, 13740, 13744, 13747, 13748, 13753, 13754, 13755, - 13762, 13764, 13765, 13766, 13767, 13769, 13773, 13777, 13779, 13784, - 13788, 13792, 13794, 13795, 13796, 13797, 13799, 13801, 13802, 13803, - 13804, 13806, 13808, 13811, 13814, 13817, 13818, 13820, 13822, 13823, - 13824, 13825, 13826, 13827, 13828, 13830, 13831, 13834, 13835, 13836, - 13837, 13839, 13842, 13843, 13844, 13845, 13848, 13849, 13851, 13852, - 13853, 13854, 13855, 13857, 13858, 13859, 13862, 13863, 13864, 13865, - 13868, 13869, 13870, 13871, 13872, 13876, 13877, 13878, 13879, 13880, - 13881, 13883, 13884, 13886, 13887, 13889, 13891, 13894, 13895, 13897, - 13900, 13903, 13905, 13910, 13911, 13912, 13915, 13916, 13918, 13920, - 13921, 13922, 13924, 13925, 13926, 13927, 13929, 13930, 13931, 13932, - 13933, 13935, 13939, 13942, 13946, 13948, 13951, 13952, 13953, 13955, - 13956, 13957, 13958, 13959, 13962, 13963, 13965, 13967, 13970, 13972, - 13974, 13975, 13978, 13981, 13982, 13983, 13985, 13987, 13988, 13989, - 13993, 13995, 13998, 14000, 14001, 14005, 14006, 14008, 14010, 14013, - 14015, 14018, 14021, 14023, 14025, 14026, 14028, 14030, 14031, 14033, - 14035, 14037, 14038, 14041, 14046, 14047, 14051, 14054, 14055, 14059, - 14061, 14063, 14066, 14069, 14070, 14072, 14076, 14077, 14078, 14086, - 14089, 14090, 14094, 14095, 14096, 14098, 14100, 14102, 14104, 14105, - 14107, 14108, 14109, 14110, 14111, 14114, 14115, 14116, 14117, 14118, - 14121, 14123, 14124, 14126, 14129, 14130, 14131, 14132, 14134, 14137, - 14138, 14140, 14143, 14145, 14146, 14147, 14150, 14153, 14158, 14161, - 14162, 14163, 14165, 14168, 14171, 14172, 14175, 14181, 14183, 14184, - 14187, 14188, 14192, 14194, 14196, 14197, 14198, 14199, 14202, 14203, - 14204, 14206, 14207, 14208, 14213, 14215, 14216, 14218, 14219, 14221, - 14226, 14228, 14229, 14232, 14233, 14234, 14235, 14236, 14237, 14238, - 14239, 14240, 14242, 14243, 14244, 14245, 14246, 14247, 14249, 14250, - 14251, 14256, 14261, 14262, 14264, 14265, 14266, 14267, 14271, 14275, - 14276, 14278, 14279, 14280, 14282, 14284, 14290, 14293, 14296, 14297, - 14298, 14299, 14301, 14303, 14307, 14310, 14313, 14317, 14322, 14325, - 14328, 14331, 14332, 14333, 14334, 14335, 14339, 14340, 14341, 14343, - 14344, 14345, 14353, 14354, 14358, 14361, 14362, 14364, 14368, 14370, - 14372, 14375, 14377, 14378, 14380, 14381, 14383, 14386, 14390, 14391, - 14396, 14400, 14401, 14403, 14404, 14405, 14406, 14408, 14410, 14412, - 14413, 14414, 14416, 14421, 14423, 14424, 14425, 14426, 14427, 14429, - 14435, 14441, 14442, 14444, 14446, 14447, 14448, 14449, 14450, 14455, - 14457, 14458, 14459, 14460, 14466, 14467, 14468, 14469, 14470, 14475, - 14476, 14477, 14480, 14482, 14484, 14492, 14495, 14496, 14499, 14501, - 14503, 14504, 14505, 14506, 14509, 14511, 14512, 14513, 14514, 14516, - 14518, 14521, 14523, 14524, 14525, 14526, 14530, 14534, 14535, 14536, - 14537, 14538, 14540, 14543, 14544, 14551, 14552, 14556, 14558, 14559, - 14560, 14561, 14562, 14563, 14568, 14569, 14572, 14573, 14574, 14577, - 14579, 14581, 14582, 14587, 14589, 14592, 14593, 14594, 14596, 14598, - 14599, 14600, 14602, 14604, 14606, 14607, 14608, 14609, 14612, 14613, - 14615, 14616, 14618, 14619, 14623, 14624, 14627, 14628, 14630, 14632, - 14633, 14640, 14641, 14644, 14645, 14646, 14648, 14649, 14652, 14653, - 14656, 14657, 14664, 14665, 14667, 14670, 14671, 14673, 14674, 14677, - 14679, 14680, 14681, 14682, 14683, 14684, 14685, 14686, 14687, 14693, - 14696, 14697, 14699, 14705, 14710, 14711, 14713, 14714, 14715, 14716, - 14717, 14718, 14719, 14721, 14724, 14725, 14728, 14731, 14733, 14736, - 14737, 14738, 14739, 14741, 14744, 14748, 14752, 14755, 14757, 14760, - 14761, 14762, 14763, 14764, 14765, 14767, 14769, 14770, 14771, 14777, - 14782, 14789, 14790, 14793, 14796, 14799, 14800, 14801, 14804, 14807, - 14808, 14809, 14812, 14814, 14816, 14817, 14819, 14823, 14824, 14826, - 14827, 14828, 14830, 14833, 14835, 14838, 14840, 14842, 14847, 14849, - 14853, 14855, 14856, 14858, 14860, 14863, 14865, 14866, 14868, 14869, - 14870, 14873, 14876, 14877, 14878, 14879, 14880, 14883, 14884, 14886, - 14887, 14890, 14892, 14897, 14899, 14900, 14904, 14905, 14907, 14910, - 14911, 14913, 14914, 14915, 14919, 14921, 14922, 14925, 14926, 14930, - 14931, 14933, 14935, 14937, 14938, 14941, 14944, 14945, 14946, 14949, - 14951, 14952, 14953, 14957, 14959, 14960, 14964, 14966, 14967, 14972, - 14973, 14974, 14976, 14977, 14978, 14981, 14983, 14984, 14985, 14986, - 14998, 14999, 15002, 15007, 15009, 15014, 15017, 15019, 15020, 15022, - 15023, 15025, 15026, 15028, 15029, 15031, 15032, 15036, 15037, 15038, - 15039, 15041, 15042, 15043, 15046, 15048, 15049, 15052, 15056, 15057, - 15060, 15061, 15063, 15066, 15067, 15068, 15070, 15074, 15075, 15076, - 15078, 15079, 15080, 15081, 15082, 15083, 15086, 15093, 15095, 15097, - 15100, 15101, 15102, 15107, 15112, 15113, 15115, 15117, 15118, 15120, - 15122, 15123, 15124, 15128, 15130, 15133, 15134, 15135, 15136, 15137, - 15138, 15139, 15140, 15141, 15142, 15146, 15151, 15152, 15154, 15155, - 15156, 15157, 15161, 15163, 15165, 15168, 15169, 15170, 15173, 15174, - 15176, 15181, 15183, 15185, 15186, 15187, 15190, 15191, 15192, 15196, - 15199, 15201, 15203, 15206, 15215, 15216, 15217, 15219, 15220, 15221, - 15224, 15225, 15227, 15228, 15229, 15232, 15233, 15235, 15236, 15237, - 15242, 15243, 15245, 15247, 15250, 15251, 15252, 15253, 15257, 15258, - 15260, 15261, 15265, 15267, 15269, 15271, 15272, 15273, 15277, 15278, - 15281, 15284, 15287, 15288, 15290, 15294, 15295, 15296, 15298, 15303, - 15307, 15312, 15313, 15314, 15315, 15317, 15319, 15323, 15330, 15332, - 15335, 15336, 15339, 15340, 15341, 15342, 15345, 15346, 15347, 15350, - 15352, 15353, 15361, 15362, 15365, 15369, 15371, 15372, 15373, 15374, - 15375, 15377, 15378, 15381, 15383, 15385, 15388, 15390, 15392, 15394, - 15395, 15397, 15398, 15399, 15401, 15405, 15406, 15409, 15413, 15414, - 15427, 15429, 15430, 15431, 15432, 15436, 15441, 15443, 15447, 15448, - 15449, 15450, 15452, 15453, 15454, 15458, 15461, 15470, 15471, 15474, - 15475, 15477, 15479, 15485, 15486, 15487, 15489, 15491, 15494, 15495, - 15496, 15497, 15498, 15499, 15501, 15503, 15504, 15505, 15506, 15510, - 15514, 15519, 15520, 15524, 15525, 15527, 15529, 15531, 15534, 15536, - 15538, 15539, 15542, 15544, 15546, 15547, 15550, 15551, 15554, 15555, - 15560, 15561, 15562, 15566, 15567, 15569, 15570, 15573, 15575, 15576, - 15577, 15581, 15586, 15593, 15594, 15596, 15600, 15601, 15602, 15603, - 15605, 15606, 15608, 15609, 15610, 15612, 15614, 15622, 15636, 15638, - 15642, 15645, 15649, 15650, 15655, 15657, 15658, 15659, 15660, 15664, - 15665, 15669, 15670, 15676, 15681, 15682, 15683, 15684, 15685, 15686, - 15687, 15688, 15689, 15690, 15702, 15703, 15706, 15707, 15711, 15713, - 15714, 15717, 15718, 15720, 15721, 15722, 15723, 15724, 15729, 15733, - 15737, 15744, 15746, 15750, 15752, 15753, 15754, 15761, 15764, 15768, - 15770, 15776, 15786, 15787, 15788, 15793, 15794, 15800, 15801, 15803, - 15806, 15813, 15814, 15817, 15825, 15828, 15830, 15832, 15833, 15835, - 15838, 15840, 15842, 15843, 15844, 15845, 15846, 15848, 15850, 15851, - 15853, 15854, 15855, 15856, 15858, 15860, 15864, 15865, 15867, 15869, - 15872, 15876, 15878, 15879, 15880, 15881, 15887, 15891, 15892, 15893, - 15897, 15898, 15900, 15902, 15903, 15904, 15907, 15908, 15911, 15912, - 15914, 15915, 15920, 15926, 15933, 15941, 15944, 15945, 15947, 15950, - 15952, 15954, 15956, 15957, 15959, 15960, 15961, 15966, 15967, 15971, - 15974, 15977, 15978, 15979, 15980, 15982, 15984, 15985, 15986, 15988, - 15989, 15992, 15993, 15997, 15998, 15999, 16001, 16002, 16005, 16007, - 16009, 16010, 16011, 16012, 16014, 16015, 16018, 16019, 16021, 16022, - 16023, 16026, 16028, 16029, 16036, 16038, 16045, 16047, 16049, 16050, - 16055, 16058, 16059, 16062, 16063, 16064, 16069, 16071, 16074, 16076, - 16084, 16088, 16091, 16093, 16094, 16095, 16097, 16099, 16101, 16106, - 16108, 16110, 16112, 16116, 16118, 16119, 16121, 16122, 16123, 16126, - 16127, 16129, 16130, 16131, 16133, 16134, 16138, 16141, 16144, 16149, - 16150, 16152, 16153, 16154, 16155, 16158, 16161, 16175, 16176, 16179, - 16181, 16185, 16189, 16190, 16193, 16194, 16203, 16204, 16205, 16206, - 16207, 16211, 16213, 16214, 16218, 16219, 16220, 16223, 16224, 16226, - 16229, 16230, 16232, 16233, 16236, 16244, 16245, 16247, 16251, 16257, - 16262, 16265, 16268, 16269, 16271, 16275, 16277, 16280, 16284, 16285, - 16286, 16287, 16289, 16300, 16303, 16308, 16311, 16312, 16314, 16316, - 16317, 16318, 16319, 16321, 16322, 16323, 16324, 16325, 16327, 16331, - 16332, 16334, 16338, 16343, 16345, 16347, 16348, 16349, 16350, 16353, - 16355, 16358, 16360, 16361, 16365, 16368, 16369, 16372, 16374, 16375, - 16376, 16377, 16378, 16381, 16382, 16385, 16386, 16388, 16389, 16390, - 16392, 16396, 16399, 16401, 16403, 16405, 16407, 16409, 16410, 16411, - 16413, 16414, 16415, 16416, 16417, 16420, 16423, 16425, 16430, 16431, - 16433, 16435, 16436, 16445, 16454, 16456, 16461, 16463, 16464, 16465, - 16466, 16467, 16468, 16470, 16472, 16474, 16475, 16477, 16478, 16481, - 16491, 16494, 16499, 16500, 16501, 16503, 16506, 16507, 16513, 16514, - 16516, 16523, 16526, 16528, 16532, 16536, 16540, 16544, 16545, 16546, - 16548, 16549, 16555, 16559, 16561, 16570, 16571, 16572, 16574, 16577, - 16579, 16580, 16581, 16586, 16587, 16589, 16590, 16591, 16592, 16596, - 16597, 16601, 16602, 16606, 16610, 16611, 16612, 16613, 16614, 16617, - 16619, 16623, 16624, 16628, 16630, 16634, 16635, 16636, 16644, 16645, - 16648, 16653, 16654, 16657, 16658, 16659, 16660, 16661, 16662, 16670, - 16672, 16674, 16679, 16684, 16685, 16687, 16689, 16691, 16694, 16697, - 16698, 16700, 16704, 16707, 16711, 16712, 16719, 16723, 16725, 16728, - 16732, 16733, 16735, 16737, 16741, 16747, 16748, 16751, 16757, 16758, - 16769, 16775, 16779, 16784, 16786, 16787, 16789, 16791, 16793, 16795, - 16799, 16803, 16804, 16806, 16808, 16809, 16817, 16818, 16819, 16825, - 16830, 16840, 16843, 16845, 16847, 16850, 16854, 16856, 16861, 16863, - 16870, 16879, 16880, 16882, 16884, 16886, 16893, 16895, 16899, 16902, - 16907, 16909, 16913, 16924, 16925, 16927, 16931, 16933, 16935, 16936, - 16940, 16941, 16943, 16946, 16948, 16950, 16962, 16965, 16966, 16970, - 16972, 16974, 16978, 16979, 16981, 16982, 16987, 16990, 16996, 17003, - 17006, 17008, 17009, 17010, 17012, 17015, 17017, 17019, 17031, 17035, - 17038, 17041, 17043, 17045, 17049, 17054, 17060, 17063, 17064, 17067, - 17069, 17070, 17078, 17085, 17091, 17096, 17097, 17098, 17099, 17102, - 17105, 17106, 17111, 17114, 17115, 17121, 17123, 17124, 17126, 17128, - 17130, 17131, 17132, 17141, 17146, 17152, 17153, 17155, 17159, 17160, - 17164, 17166, 17168, 17169, 17171, 17175, 17181, 17191, 17192, 17194, - 17198, 17200, 17205, 17207, 17216, 17218, 17220, 17234, 17236, 17237, - 17238, 17247, 17252, 17253, 17255, 17260, 17262, 17263, 17269, 17277, - 17290, 17293, 17295, 17308, 17309, 17313, 17316, 17317, 17320, 17321, - 17324, 17325, 17327, 17342, 17343, 17347, 17350, 17352, 17355, 17356, - 17359, 17361, 17363, 17374, 17376, 17379, 17382, 17388, 17392, 17400, - 17401, 17404, 17408, 17411, 17414, 17418, 17419, 17422, 17427, 17431, - 17433, 17435, 17437, 17438, 17442, 17443, 17449, 17453, 17459, 17462, - 17464, 17465, 17471, 17472, 17478, 17480, 17483, 17491, 17496, 17503, - 17504, 17505, 17506, 17508, 17510, 17513, 17515, 17524, 17526, 17528, - 17532, 17535, 17542, 17544, 17549, 17561, 17564, 17567, 17570, 17572, - 17573, 17575, 17576, 17589, 17591, 17593, 17594, 17596, 17602, 17611, - 17613, 17615, 17616, 17620, 17622, 17628, 17629, 17633, 17636, 17639, - 17647, 17650, 17653, 17655, 17664, 17671, 17678, 17680, 17682, 17687, - 17693, 17694, 17698, 17700, 17712, 17716, 17720, 17721, 17723, 17724, - 17729, 17731, 17736, 17743, 17749, 17754, 17755, 17756, 17769, 17774, - 17778, 17784, 17792, 17793, 17803, 17808, 17809, 17813, 17815, 17816, - 17824, 17831, 17832, 17834, 17835, 17838, 17841, 17843, 17844, 17856, - 17861, 17869, 17872, 17873, 17876, 17877, 17879, 17881, 17887, 17888, - 17892, 17905, 17908, 17910, 17912, 17914, 17918, 17925, 17927, 17940, - 17945, 17946, 17948, 17949, 17951, 17955, 17958, 17959, 17980, 17983, - 17986, 17988, 17989, 17990, 17997, 18006, 18012, 18023, 18032, 18036, - 18037, 18043, 18046, 18051, 18059, 18067, 18068, 18081, 18083, 18096, - 18100, 18102, 18103, 18104, 18107, 18109, 18111, 18115, 18120, 18127, - 18128, 18129, 18137, 18142, 18146, 18147, 18153, 18166, 18173, 18177, - 18181, 18184, 18188, 18189, 18197, 18199, 18205, 18207, 18214, 18230, - 18239, 18245, 18252, 18256, 18260, 18265, 18267, 18271, 18274, 18283, - 18291, 18295, 18298, 18302, 18309, 18311, 18318, 18322, 18324, 18340, - 18344, 18348, 18353, 18355, 18359, 18361, 18362, 18363, 18370, 18379, - 18387, 18401, 18412, 18416, 18419, 18423, 18427, 18432, 18440, 18454, - 18456, 18458, 18467, 18473, 18476, 18480, 18489, 18493, 18500, 18501, - 18511, 18515, 18519, 18526, 18557, 18568, 18570, 18572, 18578, 18583, - 18587, 18590, 18603, 18607, 18612, 18614, 18618, 18627, 18629, 18647, - 18656, 18660, 18671, 18675, 18682, 18691, 18699, 18704, 18713, 18726, - 18728, 18734, 18739, 18741, 18743, 18752, 18761, 18769, 18770, 18772, - 18774, 18783, 18785, 18792, 18805, 18809, 18813, 18818, 18827, 18829, - 18831, 18849, 18884, 18886, 18897, 18899, 18919, 18928, 18930, 18941, - 18985, 18987, 19000, 19011, 19042, 19055, 19064, 19068, 19077, 19086, - 19121, 19125, 19143, 19156, 19202, 19323, 19358, 19380, 19393, 19437, - 19968}; - const std::array, 64> mt19937_cache = { DynamicArray{0x0000000000000002ull}, DynamicArray{0x0000000000000004ull}, @@ -6025,5 +5351,5342 @@ const std::array, 64> mt19937_cache = { 0x4b9a782e25df1932ull, 0x26637da4527d4979ull, 0x00000000db3e27b9ull} }; +const std::array, 64> sfmt19937_cache = { + DynamicArray{0x0000000000000002ull}, + DynamicArray{0x0000000000000004ull}, + DynamicArray{0x0000000000000010ull}, + DynamicArray{0x0000000000000100ull}, + DynamicArray{0x0000000000010000ull}, + DynamicArray{0x0000000100000000ull}, + DynamicArray{0x0000000000000000ull, 0x0000000000000001ull}, + DynamicArray{0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000001ull}, + DynamicArray{0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000001ull}, + DynamicArray{ + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000001ull}, + DynamicArray{ + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000001ull}, + DynamicArray{ + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000001ull}, + DynamicArray{ + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000001ull}, + DynamicArray{ + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000001ull}, + DynamicArray{ + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000000ull, 0x0000000000000000ull, + 0x0000000000000000ull, 0x0000000000000001ull}, + DynamicArray{ + 0x8940fa643019ef79ull, 0x2f9c2d2102fd4b25ull, 0x8a52d07505185834ull, + 0xd7b3967fbf05ff9eull, 0xc0fb1418b62bf05bull, 0xd9874942b375f1f1ull, + 0x45bdc27da087ce01ull, 0x254b9f2f2a454a18ull, 0xe431ae7bd4358adbull, + 0x75f3284f6eb82d54ull, 0x9de2e3c2a134b78cull, 0xdae08313bbd085ebull, + 0x5c4779fcc7729a26ull, 0xa3224818a8254a65ull, 0x3de8414e69c2c09full, + 0xcf828ba8a083e667ull, 0x539808cdc7c8f671ull, 0xa36d5b5fbbd48f16ull, + 0xfa54603430e2defcull, 0x6df742344c4ac9a2ull, 0x945db2823ebb178bull, + 0xc209bebfdf6e18c8ull, 0x1588e6dfe42cc922ull, 0xdb6280f180e1bd94ull, + 0x3db78ddfde1b3178ull, 0x68e4962f28b56d49ull, 0x21e5bf2da906ec8eull, + 0xe06b6dd66d5e84a7ull, 0x30eeee62b07c33dcull, 0xe617f64b1ade4324ull, + 0x3be72252238da628ull, 0x439557d8cf5e85bcull, 0x4a0638b151239f67ull, + 0x57e5e4523e0a7dcaull, 0x919321a94cfa650cull, 0x0993fe995cca6b30ull, + 0xfc5404ef4a7e3f44ull, 0x41fd9ad8d1dec166ull, 0x52d604ee037725f3ull, + 0x4ee07d835084bdd3ull, 0x076a22d529cd1d8aull, 0xfa904be1cd0c90f4ull, + 0x862c9a86b67b0bdbull, 0x1e37e8d22eb321a9ull, 0x7efd7bc5aa496775ull, + 0x64218b73c6b38382ull, 0x8e10bc3bb57c91e1ull, 0xf7d00358d420355bull, + 0x262c9fd186ef3439ull, 0xf17f316f903d1eebull, 0xc57149f37e9c7532ull, + 0xd0399c5747354c6dull, 0x2002ea01841719e8ull, 0xd97952d2e3feae85ull, + 0x73b72afcb964ea2full, 0x21d85b511a5b9219ull, 0x9a2c1fc7a9bb9970ull, + 0xe86c28e89196ed68ull, 0xd25256227e748a18ull, 0x24b9444aa8c985d0ull, + 0x813b2e66f4d89064ull, 0x2e9d9fd849275011ull, 0x0c251f34467ddf94ull, + 0x5ee1029874d45ef7ull, 0x0b8a51976f5f04cfull, 0x73365d618728ffcaull, + 0x3e6cd15d4649a5d7ull, 0x1cf9ff690ddda621ull, 0x175dbafe26611597ull, + 0x4e10efe27966c3eeull, 0x3cb652a03ed83b72ull, 0x853a7c5f842bae41ull, + 0x6159463a18af88bdull, 0x85f311c56e1712faull, 0x51fbbf6010fb6c67ull, + 0x0bd454fc8120951eull, 0x7250752a9ab0fc97ull, 0x5426cecd4c9e8e07ull, + 0xe7d85a193974b59bull, 0xce77e3513454e61eull, 0x9ca6beda43eae907ull, + 0x24a9d334717e1d19ull, 0x0ff7cadb06f95d5full, 0x23939e9c4e11c397ull, + 0xb4d544654719850cull, 0xa743ca3e87b93527ull, 0xdc27c12fbcb74a0aull, + 0x82f9f15c1465b5c9ull, 0x7f717aaa622d91b6ull, 0x04cd56fd9e68f0a4ull, + 0xbb6a46ae88ca81f1ull, 0x5d23d0464c106751ull, 0x6c05641702375dfcull, + 0x21c2075906507494ull, 0x50b90712959365abull, 0x4782f7c842635ae7ull, + 0x009ad19543beb949ull, 0x55721b1001d0a48full, 0x2b35853c26cc75bdull, + 0xb4fe1b50ab21da45ull, 0x491374e6b011188aull, 0xd581add4c88b3343ull, + 0x20a96dc0a898e688ull, 0x59fabb8e2e5f6055ull, 0x2f9073ed068aadb2ull, + 0xf64253a8b97c4c17ull, 0x6056c35f7ef4e71cull, 0xa9246cf0179914a1ull, + 0x0b45748612ad4037ull, 0xfd3b7661eccd3858ull, 0x4f43b1e51520d640ull, + 0xb10966149e7f276cull, 0xe0223419dc54651cull, 0xa4044a476b335046ull, + 0x9349363b3ab08febull, 0xae6abd883e593b87ull, 0x801dc19f518ca8a9ull, + 0xff4f7e65c9a10f5full, 0x59d7e19287a2b173ull, 0xd17f4263618bd3e5ull, + 0x572ecdd5ccfe41f6ull, 0xde2f7b820b244a6aull, 0x8e499e0bac1dd113ull, + 0xa33d9f41ab7e28feull, 0x5f620cd6c8091a7cull, 0x75ed64a934eb3865ull, + 0xc616baf524fc5009ull, 0x01c49e0a38bf976cull, 0x9f78c0f897edb36cull, + 0x213a4295915a5528ull, 0x4cc06e94ab2af779ull, 0xe3f148524d2017b5ull, + 0x0c75d3386ac34916ull, 0xf2c8116e4a7763c4ull, 0xcbbb25f45d9a3e75ull, + 0x23ae735d66b3bff1ull, 0x5f3a2e7966f8fd02ull, 0x8036303abe3686b8ull, + 0xf4e6852ef57b1d7bull, 0xe9241d2c79d4ce55ull, 0x1fec23221346ce3bull, + 0x20fda44eb6ce7d49ull, 0xf3c22672eb11ca47ull, 0x06ccab2f8007141full, + 0x6a2ffbabf0888319ull, 0x328599b47a3bc1bfull, 0xd178798af8f1643aull, + 0x80f9c5d87b174092ull, 0x0a1f46f34159dfafull, 0x01ac0150cdc10ef4ull, + 0x12ceac05d4dd5b90ull, 0xd4aa1ab13b7fee4dull, 0x0bb84db0e200224dull, + 0xfbd01c41a2f2fcdcull, 0x7d94e1e3ee249864ull, 0x1c81aca0025bff03ull, + 0xfc777d27c45a7184ull, 0xe3d3316e2809b9f0ull, 0x493a73338ccc5130ull, + 0xb581a41003d70b53ull, 0xbe8c4dc59b4e4c68ull, 0x4f54d7cc22805c58ull, + 0xb2a272f6f1f14a12ull, 0x59401625b95d0299ull, 0x1540fa1fed4445e2ull, + 0x9fe0717debb1b3caull, 0x6955d8f2977ec177ull, 0x0431d4824d92a012ull, + 0x9b93aa6d2c21e8e3ull, 0xa4f4f1e76c9d7675ull, 0x5df3fbb8f40dffadull, + 0xea74f5ec1276b2a9ull, 0xeaa46f851adde730ull, 0x30a827562e50dd89ull, + 0x378ef38f53c42cc8ull, 0xa914e709f9b4e33cull, 0x9054a8cb26b42747ull, + 0x669700e81fec3906ull, 0xed76a21ec313ececull, 0x515b1c8cf1935f5eull, + 0xf8312e9d23ad59ecull, 0x4e0e5624e6f47190ull, 0x41afe37da39f7db7ull, + 0x8147aa93e2f5ac3dull, 0xff47c22cf14d35b5ull, 0x7bf795fd79e897e9ull, + 0xa294d5fb1aeb5b9cull, 0xeecc65c587f6240bull, 0x39e58f2c29d600f4ull, + 0xb01b4cc0e4fda572ull, 0x2840c3f046f7615dull, 0x27f02c4e5ebdf5fdull, + 0xd98ec7be6b4c5815ull, 0x18147309c078916dull, 0x29f786d2ee31c1f7ull, + 0xcf7752cf1a1c7d85ull, 0x26798d72ffdd68f2ull, 0x730918c081949b5eull, + 0x46837ea2386f9302ull, 0xd57c0ac039adcea7ull, 0x3a8321cf98a4c7bbull, + 0x2d9411ab9f579f44ull, 0xe7b612e1628c4800ull, 0xac766a4a9ab707a8ull, + 0x492000ec4d335ff9ull, 0x5865b0c7518c80d5ull, 0x771b4226aca5dbb6ull, + 0x3688aee8321b9a8bull, 0x448174ce7ed77fdbull, 0xba5a3919a2d8ef63ull, + 0x233a77d2dbe42d3full, 0xff70e3a719517ecfull, 0xca4a6eec7582e618ull, + 0x30ded2218b3f690aull, 0x8a4736d46e110586ull, 0xc6ab2d08d668c672ull, + 0xd64ddd57f82aee28ull, 0x5b9dae8ff60a8abbull, 0x2a0a8185da719d53ull, + 0x6d34724c0fb8c16bull, 0x5ebea9d2248005bcull, 0x35220e332336e317ull, + 0xf0e7c7db7b7b5ff4ull, 0x9a828415e70f1aa9ull, 0x6447f8d7caa6085bull, + 0xc7b93766022f8828ull, 0x5d7527a5b0ca9b0cull, 0xcf72766fa8702ec8ull, + 0x4d6f116626355940ull, 0xe53339bd21a364fdull, 0xd0493c4f1e3d103full, + 0xdee123528c94645cull, 0xdd17565802dee6b1ull, 0xf7bd31f1c82441caull, + 0xddc384a6699ad35bull, 0x0ed1abb62165ce34ull, 0xdcaa53bafd3c7044ull, + 0x4ab72f5559d1db3eull, 0x62566b96820807bcull, 0x97514b1cd934943cull, + 0x615eaef97d43a3c4ull, 0x879b79292a26f71bull, 0xdd74197645f68ca0ull, + 0xa031fbfb089b814aull, 0xd9bc529dcad64802ull, 0xfb437effaffa5497ull, + 0x40e62b7929acfc44ull, 0x664d028044f7a162ull, 0xef2057d8e0342c76ull, + 0x0453f98e3b18f6faull, 0xa9c4215c566541e6ull, 0x01678d4ab80ba1c7ull, + 0x840c5b7b0117e0a0ull, 0x0937811153d9ac26ull, 0x6045f8c2131d5db8ull, + 0x9824c91c2a21190full, 0x277d2c167f467cf6ull, 0x0475c5118aa72834ull, + 0x6b519cc5554ba217ull, 0xd0712e4be475103cull, 0x3b3dad23e3acbfbdull, + 0x007326238d9c7341ull, 0x6f661b79db9ab4c4ull, 0x8ff7176c3230de64ull, + 0x491671179c4c0116ull, 0x720d068e66ac846dull, 0xabad38ee96e33c67ull, + 0x0c86bac7c4f9cc2cull, 0x2ed369054ffb4355ull, 0xc7f5d3a47cdd1fbfull, + 0xc693f9f1d53e9969ull, 0x12136ea4332fd84bull, 0x831cccaaf0cb0e08ull, + 0x26cba46988e031ebull, 0x04b7c70554066039ull, 0x3061a612c6c64c3bull, + 0xc6dfbbc2fad86798ull, 0xfe5361880af6a7acull, 0xdc55f811181692f0ull, + 0x7a7262cbeab2c7c0ull, 0x9d52382ed9280344ull, 0x7203b91d6dad60b6ull, + 0x0eafed4e7190fde5ull, 0x035adfcc62923d18ull, 0x46a8e91f3d0e0726ull, + 0xa23c60b0ae8352f5ull, 0x06c4bcd58b2f1a31ull, 0x3be607f3451e7c99ull, + 0xaffeb164db106f48ull, 0x0a0bd26dfe33c1a5ull, 0x35c9f9cb8190d65eull, + 0x08a7868b374a3049ull, 0x8154675d5c7d69a2ull, 0x36d761e23574bae1ull, + 0xc3c172565830b87bull, 0xd13cd0f2d0075d38ull, 0x13de663fda7a162dull, + 0xb09b199f9273cef9ull, 0xc9239bc7629e5c94ull, 0x56ab2af7910bd2b9ull, + 0xf6113ba809cddfc0ull, 0x287252d2cd3c7c06ull, 0x70613097d1cd2cd2ull, + 0x0ac86b7d5965d358ull, 0xe3397b94e9b74c18ull, 0xf48a6a18fbf05c22ull, + 0x8e95acd3bcf988b5ull, 0x46e2c8728132e64aull, 0xa8b0f01628deda24ull, + 0x4cf0c842cb6a3461ull, 0x28fcb8c0486257e7ull, 0xd2cf552fd911c75cull}, + DynamicArray{ + 0x0f8661c9fc8d51f3ull, 0x27e875c8f4797951ull, 0x92d29d28c6d7dbadull, + 0xfa2e1cec15a50d03ull, 0x68441087d1d4d279ull, 0x8f9c0a1c1afd76f4ull, + 0xeddfc939beb48d06ull, 0xbe9343d8e0ee1e93ull, 0x3a07666e6c7be4ebull, + 0xfc93387e840d327aull, 0x41f8f78b8cac8a56ull, 0x9600bb7f89bc2a0eull, + 0x8cbec0283697cefbull, 0xd8a26e1f98cc94a6ull, 0xd1d85cf1b081bef1ull, + 0x48b9795080ce20a4ull, 0xbf2bd0b026ae85f0ull, 0xb7cfc8496430ad53ull, + 0xd618760f57668ee4ull, 0xe650b4a279f23fb6ull, 0xcef46e7fe3479a9full, + 0xac199cc8e52cc1eeull, 0x5508fb3f92240e71ull, 0x9d754c869dd68461ull, + 0x26dd310735641497ull, 0x08d38d695e2a383bull, 0xa3e4104d673c4033ull, + 0xf9e371d1d1bc7aa1ull, 0x369a023bb1cba5f1ull, 0x2b7aa260f3137dfbull, + 0x49f26b9c26d836a0ull, 0x103067f90b535319ull, 0x9d4373e21a9e65aaull, + 0x533e367ce9a20171ull, 0x392d05325bc575e7ull, 0xa46b45ecb596d1aeull, + 0xb7e29a7999042144ull, 0x3303e38c9825ccc4ull, 0x4ad7fd6b102796ecull, + 0x852d5b0f9056b7d1ull, 0x21a5a36ef0b4a42eull, 0x3ded0f0be8b1595aull, + 0x7b38a32d34d2db70ull, 0xc1a5c2b462e5b332ull, 0x0657e950db04d57dull, + 0x2eaa32701d21c604ull, 0x8f19b3d1125c5321ull, 0x9e22080178510525ull, + 0x7a688408d2910ca2ull, 0x778c7dad24cd2b10ull, 0xa78de6d98ca30565ull, + 0x5ac312172872b095ull, 0x89da4fa908ecfca0ull, 0x8db6b24aee0b75e0ull, + 0xb10fc25b0f1f20a4ull, 0x30cf669b79a79fbcull, 0xc91f31d442177634ull, + 0x61942d5ef765a262ull, 0xfd4e961a2389cc3dull, 0x6feb1c718c312808ull, + 0x177a9ae91fb64afbull, 0x9fead561e5ef7876ull, 0x3fc3ba4da33b2a84ull, + 0x3e00c47db954ab97ull, 0x5fcfc7a4eb90f805ull, 0x900815bbce9110c0ull, + 0xed8bad8de270acf0ull, 0x77f0ca353d994df6ull, 0xb351fabf9984f71bull, + 0xeeeb40d5f44f95a0ull, 0x4a97192d41f167c6ull, 0x17c0c9ebc850d0a4ull, + 0x4a7fcc0013158a7cull, 0xf8b140c38a0531d7ull, 0xa4d45d432dcf949dull, + 0xf3eb73c4f47ded1dull, 0x2a4d307a52237ebcull, 0xa44bdb0095d4131cull, + 0x8f25a2ca7f977e41ull, 0x140e7571b34b3a70ull, 0xc747dfbca5c805a5ull, + 0x0cddd14b43546c00ull, 0x950d2a9ae780d38full, 0x2ab42c9b3613d598ull, + 0x9be621d1c8bfd8fcull, 0xf4dc1f90b3e8208dull, 0xf4aedce6bcf050c4ull, + 0x6c28f10c1c3377e6ull, 0xb5a69f7b9c6c5251ull, 0xeba70d61da30cdbbull, + 0x1d2f13c0a61954c3ull, 0xc2afc4372699d83dull, 0x088fd41a715a424dull, + 0xdf3655c85a32018full, 0xc1eff37c98c92df4ull, 0xe055eacc6d762fd1ull, + 0x01e2233c7281cb40ull, 0xbb1afd7847b73b35ull, 0x0169fc0b3a9629eeull, + 0x285344d9ae7c4012ull, 0x489ca4b82c7f8aeeull, 0x2ee5835c29db9764ull, + 0xf6dc83601cba30afull, 0x9d7803ef3766cde8ull, 0x3be975121ae64b02ull, + 0x3b4bbc03fa75f9f4ull, 0x396609805ade95b1ull, 0x07ad0dcddf78fcd1ull, + 0xbdee69d88cb02dfeull, 0x09b6132a33c2fcd7ull, 0x1b099d5771d113b5ull, + 0x87e80eade52e67fcull, 0x8e1092e356d479c4ull, 0x0803aee23ad82593ull, + 0x203b651853688613ull, 0x4371139b7f3bdd7aull, 0x72432383de80ae88ull, + 0x2db24b00b80d9593ull, 0x5d06a809bdd0cddfull, 0x749fe17e43f545e2ull, + 0xd148febc7175e16cull, 0xd582aebdb7a529e8ull, 0x06a9386353669625ull, + 0xfc260e8df7b7978full, 0xdc88804c7a760618ull, 0xd4760e94fb1e6815ull, + 0xeece0d106f53b6c7ull, 0x50f724d7c56c6d77ull, 0x8cb1fd27e2179d4bull, + 0x9a18f2aa9dabb0caull, 0x9118a91eb04b85e3ull, 0x0dfe02387ed446bcull, + 0x25383db4811d15a2ull, 0xd465056b18c67f83ull, 0x49c9e7a0a07ff154ull, + 0x5c11d3ff8e41d4e6ull, 0xbe1cc0b75f788232ull, 0x7c284ec5456a7bfeull, + 0x4d4c4dc175afa004ull, 0xa579f0e7fdcaeefbull, 0x56b5acd34bc08608ull, + 0x219513733775929cull, 0x329dbd9e08bd8bf0ull, 0x8c1c20defe8bf7ebull, + 0xbca3a1ce98166ffcull, 0xba891a25d7032fe2ull, 0x54680994fcc844d7ull, + 0x85bebbc56c0fb26dull, 0xc27040be5461b500ull, 0xff5aa3d75d7dcbe9ull, + 0x83cbb6f1e4ca9bcfull, 0x1dd18c4efca89bacull, 0xd5a0282a83e5f2ebull, + 0x7e48b4c627fb7b51ull, 0x0cc4953c6efdf3e9ull, 0x89affbcc3138bab3ull, + 0x41a89481477bea5eull, 0x4ff90ccfecb3507dull, 0x27277ca66dd7902dull, + 0x3e281d8535758f4bull, 0xfba1b94882dfcbe1ull, 0x67c02a0087dc127eull, + 0x0d5dd2de014b98cfull, 0x030470f81f5befa5ull, 0x4890eb410ee755d8ull, + 0x804aae5b41c97bb7ull, 0x662e500a4bbc3f23ull, 0x6754d1e6a85d25d1ull, + 0x34967bcdfc52e340ull, 0xfb41f61ddb3f3a31ull, 0x49efb55c4212ee51ull, + 0x1866a1ca6b74d17aull, 0x236f89d83476f026ull, 0x2d94c680e2124d06ull, + 0xbfee7609c5dfee17ull, 0xc2ab9dd7f197a34full, 0xea0b592914165da0ull, + 0x05a53568da69a22aull, 0x9c4b94c3375a4456ull, 0x0fa1777ae4aac0ebull, + 0x6b99c0d483ac9e48ull, 0x38a35b87ee6a10fbull, 0x50a083ef1b6edb04ull, + 0x5d231c9fbc513065ull, 0x3046fb7e5c471600ull, 0x2743418d963f322dull, + 0x458312bd503fa50eull, 0x0cd62cdf5f589872ull, 0x0393d884053adbd4ull, + 0x16d5225b9abd5b06ull, 0xc9947f1019c76641ull, 0x07f3782dc4decf66ull, + 0xb7fb548a0cf9575full, 0x57abd78ab98f7198ull, 0x4cdaa0fe90b39642ull, + 0x7e0469e7fc39a18full, 0x2bb6a7268f18f58full, 0xb412964af43de730ull, + 0x2fd887902549eb47ull, 0xa5bbe60065f195fcull, 0x19f47e269953554cull, + 0xb791ab8499d0c80cull, 0x184bf9e0b6f6cd4full, 0x51e540b0b3314795ull, + 0x84585fceda1591e1ull, 0x2cb848e6f615bc50ull, 0xa9011ef7a453beb2ull, + 0x157f5f2eb25a18d4ull, 0x777cf2b3782c780eull, 0x530a33fa76583541ull, + 0xae8cd0694d0c0d7cull, 0x87c2f954b7aea6e5ull, 0x0c9e3d0444e94b62ull, + 0x6d5d6232b5e68811ull, 0x3937869df53a900cull, 0xe31f48e9bc70fa23ull, + 0xf23d2593f7ae02cfull, 0x132188e7a3e99c6eull, 0xf44892cf9cc0a3acull, + 0x1d583f40dd9c2479ull, 0xa35bb38bb3e4f7fbull, 0x0dcf8efb78d0154bull, + 0xa648743c2cba8cb7ull, 0x8dd282b22f232c0bull, 0x9ce37611da887b95ull, + 0xf9c878e93928a397ull, 0x1961ec4c9f293ce7ull, 0xb862e5b55e5dd5a1ull, + 0xa9d0170d39e05294ull, 0xf6ab47a2b30894dfull, 0xeb97ec4506784473ull, + 0xa87cef11dcce8b6aull, 0x28de8f2060ee6fbaull, 0xb3cc22228a198f50ull, + 0x0dc95e5a329e72eeull, 0x7d2b413aed96f8cdull, 0x560c9983509c2c8aull, + 0xa2ba020e0b8dc940ull, 0xd69a576bfa23e95bull, 0x2eae45fc82520a64ull, + 0x36cb2a18f82375d4ull, 0x5238774bea5deb52ull, 0x7197da9a590ed9a3ull, + 0xe7e3023a7dd869e6ull, 0x3bdc6b583b02443dull, 0xf63b71321311126cull, + 0x07c4867b630556aaull, 0x1b3b9686a3acd74eull, 0xd613ef8d390bc76eull, + 0x6992fa1f343f995dull, 0x46a91d5810eae1adull, 0xd53036edcd41113cull, + 0x5f03d718509b0e9bull, 0x57d7d0eb93e781f5ull, 0xa9ddb15a0b71dadaull, + 0xb11a1535cc19c626ull, 0x047f7fdfa5bd64d4ull, 0x0ddd6b80439fa0e7ull, + 0xa77ee5a8369b8cf7ull, 0x12924c495084713bull, 0x3d9380fb9a9cf06bull, + 0x75fdf82fde05f011ull, 0x7ab706f6b6b8f202ull, 0x3b75d0a3713ea5c5ull, + 0x13ec0c42c6ddb626ull, 0x0b44e0fc788ac2b4ull, 0x9d133302614c7a06ull, + 0x72df9645f324602aull, 0xa4430531abd435e8ull, 0x02840f6608c8ea2dull, + 0xc7a16655b3184497ull, 0x640467435ddf0717ull, 0x2a982afeb69d0caeull, + 0xa71170caf48f1b7cull, 0x9ce8d8075afc1623ull, 0x8f2e7ff03eb39756ull, + 0x597d29db26140e72ull, 0x47013df94ded244aull, 0xb8a7a51b80e231b8ull, + 0x38ed810eee0e3a14ull, 0x8af9cbd173561155ull, 0x76cbc35bd650151full, + 0x77925a82aa06bf4aull, 0xa020eeac85144d33ull, 0x6799bb8eafd56f5bull, + 0x99b49129b8ac03c3ull, 0x259394bf1c64cb36ull, 0xf366f8373829c2dbull, + 0x35c489922f6a996aull, 0x3fe0232012e8719cull, 0xe8b42131b645fb80ull, + 0xdb10f6489d1a7904ull, 0xa70624c62831264aull, 0x7b7375d76499d830ull, + 0x4bdd75771d43f08bull, 0x1862603dc791b332ull, 0x9e4f4e27d166e81dull, + 0xcd53826e4eb75b0dull, 0x1aa85c7cdc6e76ccull, 0xef07189f4541db1bull, + 0x429ebd389712877eull, 0xf844f5d8c9cf2ea3ull, 0x5aafff9f3f4bb387ull, + 0xbe4f08c5c5077041ull, 0xd8acc1deebeb4a81ull, 0x600cb503be878b7full, + 0xab6a6f8c3a1821feull, 0xb3135b3dabf401b5ull, 0x813aa1921e9760e2ull, + 0x0f6d2b9343a03718ull, 0x33c84befd7757b93ull, 0xe6c3e6ec73bbc892ull}, + DynamicArray{ + 0x0b763162f4850d94ull, 0xf22043f447a7c5b3ull, 0x12ffdf2264c770ffull, + 0x76a1ed5f19cd0f9full, 0x37de1919c56730c1ull, 0xac6855c958c67392ull, + 0x528cc8d0ceb6acf7ull, 0x3970d3e45cf1e05aull, 0xba30004047020402ull, + 0xea79730d9fff5636ull, 0x8c21046f9bbd6422ull, 0x2724517bf5490391ull, + 0x3942cf2cf82d1800ull, 0xacc62f38439ce1abull, 0xc7cb22a842aa025aull, + 0xdf1660401841433dull, 0x1a06e86f7ba1705bull, 0x36b99098fc9cfdc1ull, + 0x9aa75805c8661b87ull, 0x7072bddfb678a827ull, 0x8ed48d7aa4e4e4d9ull, + 0xa3ba56cdabfa0f13ull, 0xef0de8999e55cfb9ull, 0xc16624df5d58a969ull, + 0x862b01c1dbfcffe4ull, 0x35109a7516ec4ca8ull, 0x32c4a5fc3db9d511ull, + 0xa2c2fa8259bc5ebdull, 0x5ae193fb73051f6dull, 0x83869bc99e17de1aull, + 0xfc634c7d082d35f9ull, 0x26382437ae0deabbull, 0x00f6327fb19a5e01ull, + 0xf3dde68ccb1131a2ull, 0x19d2943aaba5f3dbull, 0x7b132d293564ec75ull, + 0x614e7e027ae5b5e7ull, 0x50d84413d2e6a343ull, 0xf8577fd07539b368ull, + 0x13583900fc793edcull, 0x4e78052093023110ull, 0xe5d0836723493356ull, + 0x9f409306ea25f1b9ull, 0xfc5bc191858f4228ull, 0xd29be1f33667da6full, + 0xf8f8352c7655a7edull, 0xd71be4a20e3b573bull, 0x484852c03dfd0e12ull, + 0x5467ae08d6781b75ull, 0xa0e6572d20d9b135ull, 0xf3f3e85dbe0d86c6ull, + 0x18f0f1a8ad93829eull, 0xc60232f0050826a6ull, 0x44e860d209d957feull, + 0x72b6a40d724c69ffull, 0x31f1d676c247c84full, 0xc9f2fc02df3cc79full, + 0x682344819cb74124ull, 0xab163eb3fd58085dull, 0x760dc81c69912655ull, + 0x235e1a471d288309ull, 0x9b7a1bfbb5997651ull, 0x05d5f118676b7ad5ull, + 0xfe2dfc551c95521eull, 0x8326727d2b3d76b4ull, 0xfb653730222545c0ull, + 0x0c11ffaa9c140ec1ull, 0x43531cc9122286e1ull, 0xe2672d0cb5a3f873ull, + 0xf4506ca87d9edb2aull, 0x4087148387129beeull, 0xdd758006a3cc6a89ull, + 0xbbfce9d5da09d3c9ull, 0x00eb9d65d9c0ad88ull, 0x7b98de8ccdcc1ff6ull, + 0x08d76965221c2eeaull, 0xa9d329c1d6ddf049ull, 0x60d94d73b5a40997ull, + 0xa2705fba540c9a5full, 0xa96b6549c20b21aeull, 0x45965a2cc9c3541eull, + 0xda74e1490ea629e8ull, 0xbfd1640effafc181ull, 0xa0bf7a0fbaf063c4ull, + 0xf43125ceacfbf88eull, 0x7df9f0a8467fbd97ull, 0x927ab3c5c9cfec64ull, + 0x8d4998856a709e10ull, 0xd18e85fa84a9554eull, 0xc958b8888cd6eff6ull, + 0x83e0b16de4d00698ull, 0xfb02e7aabf4617efull, 0xd0271214abe3dd89ull, + 0x0eb58a2f09b6bcf4ull, 0xbd337b74a3fafb03ull, 0xa118f28fa53580a2ull, + 0x8af17417c5c62e8aull, 0x21923ee5b4b50db0ull, 0xf2a906d9b8091085ull, + 0xffb843c4c9d05adeull, 0x7fca89023c02ccd9ull, 0x497a4fac7b6d74acull, + 0xb70729190b3ba470ull, 0x67e381f5d670266dull, 0x1779f287e6a16f72ull, + 0x5ebd9214b3184fa6ull, 0x6bc776e448a2c119ull, 0xb944a818a3c3d7dbull, + 0x9d0a545b516858e0ull, 0x39ad85bf79039a0eull, 0x3f220209792516deull, + 0x0a3c50bbdeefe940ull, 0x6ec2c6ff40f91433ull, 0xe10a4e12ba5d4f2dull, + 0xcc90b6c68c925a18ull, 0x951cc67c0702d0d3ull, 0x201164755485de0bull, + 0x976917feef482c26ull, 0x5c0d4a43b8659d69ull, 0x7a512341218dfcaaull, + 0xc58e5d491639df6eull, 0x37a3da61b974b1f1ull, 0x6f7776a83765fd5dull, + 0x7335a179cc7a2b99ull, 0xb0fc03642314c1f3ull, 0x9d92821a4f3cf569ull, + 0xcf040b14f49affa3ull, 0x628f0d2afc6401dbull, 0x2a4fda833a0fabb1ull, + 0x3db4ec1749f176faull, 0x89030678170d1c9dull, 0xde3a37856dd11912ull, + 0x56f8729bfe849cd6ull, 0x534c8d3a93d95a5eull, 0xf0cb5e3b5f79f97aull, + 0x32323f8a4f507b64ull, 0x53c0c5460b25b3afull, 0x2f742cc419dd9203ull, + 0xe0818eb4ae5be92dull, 0xdc1143662987206bull, 0x9890153c099dc80aull, + 0x3ea0b264af3a321dull, 0xb48784cb8da12cfdull, 0xdaddd8e7883c5563ull, + 0x8090ad2efbce9918ull, 0x0ad2a67dc30d81b4ull, 0x4dafec3aeac0270cull, + 0x2f12099f5abd7ebaull, 0x34d210e571a354dfull, 0xf48819cb7edef73eull, + 0xc16a54686521f2bcull, 0xb55993c2f1370c15ull, 0xc14bc5ceb3a45f08ull, + 0x942c90bb1aa9748cull, 0x6712ad4d3e3f1cebull, 0xfef395b04c45c82aull, + 0xe6d595bd89b0d2e3ull, 0x185f4a28e2cfe479ull, 0xdc3cb5a0a990dc7aull, + 0xe6f62843010fff88ull, 0x112153a5e35866c8ull, 0x25111442bfc79a51ull, + 0xd004d6062afe3a71ull, 0xaa556f015988ce18ull, 0xd6ada856fb75147bull, + 0x3617d40d063fcccfull, 0xb6964d91bfcae919ull, 0x2b21e8891727fb21ull, + 0xc3d981fd8c7bb619ull, 0xc67d9e51a65137baull, 0xf90952f01b052b24ull, + 0xe629f49838de6e2aull, 0x21508c58ca1dd8faull, 0x6e5e3d4db888d8f3ull, + 0x54b239a518d6b230ull, 0xfd53d8f54ec1308eull, 0x19d45d9e1ec1c852ull, + 0x5b9ae6168c3ec164ull, 0xd735d400c1485e9cull, 0xba353275ae32fc86ull, + 0x0c59ef61063cad49ull, 0xffbe097975834e22ull, 0x2078534b952bb285ull, + 0x2d9a680c4d8c2998ull, 0xfd9fedba8651cf8dull, 0xe99c50f72a5dd411ull, + 0x1179eb1ff8bd4bc3ull, 0x6d5155fe06336771ull, 0x502d53472730c1e2ull, + 0xe9e37c0ee66738eeull, 0x1eb18678d72c1a57ull, 0xac3716034bc87a40ull, + 0x27778470da1a07d5ull, 0x8e32467e685403daull, 0xf6afd27b663803ccull, + 0x346607a0e2064d8bull, 0x9e675259f6beefadull, 0x9e5f20457c00f3a7ull, + 0x1b8a7f97cb921760ull, 0xbaeb4f069832f8b8ull, 0xbb23a5705adb743cull, + 0x35e1eb6841c82faeull, 0x7faa0c274fa7911full, 0x281f0183df83f50eull, + 0x227b9c3ba2ad407eull, 0x714a94b29cbf0847ull, 0x8fbfffce5c6e2c59ull, + 0x5573fa2aae1f77c1ull, 0x7abf9e50a987644full, 0x9a270392155e7197ull, + 0xab1569cb8d043e81ull, 0x4f7c6ffeaf4600a8ull, 0x64d9dfaeee61a7f2ull, + 0xd8b03c2ab33f3171ull, 0xf11961e9e93bf19full, 0xf0838e7f5ae09bc8ull, + 0x4d96be8521c84e16ull, 0xd50ebfc3e83982aaull, 0x2313b4e83879f4e0ull, + 0xa54350c339f2e8b4ull, 0x734e5c5dd5231a94ull, 0x24efa7ab1e4cf40dull, + 0xb6ac8e2200ffec60ull, 0xa006757b95a01ce3ull, 0xe4f5b5726f7e9a77ull, + 0xc25319ac29bb76b1ull, 0xeb01a7b5cbcb04bfull, 0xced330be32ab8e3dull, + 0x38b6266dd8243845ull, 0x6584396d1b111b26ull, 0x47bf88cfb3ef34b1ull, + 0xb5b04c81e22ff67full, 0x87f39060af1bb7c9ull, 0xc9ed57c60ecb014cull, + 0xa92f0dcf84e6a7e5ull, 0xe85b6572c14c8800ull, 0x57b97bc72f0acc30ull, + 0x99bbd0f2ad1b9e34ull, 0x031dcf3d6b3fa7aeull, 0xeb434be528ce462full, + 0x09672d8a7643e6b5ull, 0xbb5c03c2fa4d7209ull, 0xc7ea06233f1b85c5ull, + 0x1a6c67fed1d4fde7ull, 0xca408c42630828d8ull, 0x52f241d39f15eb1eull, + 0x589712508f38b03aull, 0xcabd11ecb01bd05dull, 0x8dda7365e44e3aabull, + 0xa0092a11abd2ea01ull, 0xbcaa14c336aa5dffull, 0x266ba32f6708191bull, + 0x307de3538feb46e1ull, 0x8e300af0dffd309dull, 0x65904528b15f3972ull, + 0xbe9076fa8aa66ea6ull, 0x91c6f58e811c31fcull, 0x86f2c720a89b6214ull, + 0x5bf7e1812f65aea7ull, 0x419b6dbee7543affull, 0x2ce3d4ff2d873b6aull, + 0xc6068a4047dbf4a5ull, 0x5913ae2d5a17d503ull, 0x8c94837fc0ad746dull, + 0xff5a1dec8b47b756ull, 0x7a3a2bf7fa0ffe48ull, 0x21dcf127a47ba8beull, + 0xd9e3efe5a7df9a40ull, 0x5ef616ed834d3e23ull, 0x0fb58cec7b28eb24ull, + 0xb06d004d7f19afd5ull, 0x69673d861322d085ull, 0x4913c7bc4b8bf7beull, + 0x69e56e9e87428aceull, 0x3af79625827d2d3full, 0x962f494402c695c1ull, + 0x9c95e7193bcbb055ull, 0x3155bbb5c6742292ull, 0x3847db4aa6420db3ull, + 0x62579d83331c0748ull, 0xdd2d7925e9b8d44eull, 0x859618ead02165faull, + 0x1dab673ae35ad785ull, 0x5ff0d253fa841ccbull, 0x22e4a14e3a286a14ull, + 0x5ed09176f92b3f2dull, 0xb3bab47bf7dda1caull, 0x9fdcc83a1ccd4df2ull, + 0x5b0cf354a693f2feull, 0x9b3088d0ffae65deull, 0xef3543484ef6da60ull, + 0x34a8f307f045fd34ull, 0xb0150a6866b1b175ull, 0xf7d2f1394a75929bull, + 0xd8415246e62efabfull, 0x3e1b768cb800d881ull, 0xf597d2f689acc765ull, + 0x1f87f0b3627f84caull, 0x92264c836a025519ull, 0x9c3556682241ad4dull, + 0x66aa536b73e8db19ull, 0xaaba6d0042ffe0e5ull, 0x67b9aa7d74e229f5ull, + 0x04e742e3224b74bdull, 0xba839ec63094190eull, 0x508902f068425ea7ull, + 0x715d6d4abf6d8608ull, 0x9918564a216fc7e1ull, 0x744b6babcccbf970ull, + 0x45cfc360b00feb1eull, 0xabbc8ee2e8889938ull, 0x555ac48f85f88a83ull}, + DynamicArray{ + 0x86d88d1d7f3b93c3ull, 0xe8f79c36bb9070a1ull, 0xbb98447aee02842bull, + 0x69326a12f24f542dull, 0x5010e42d262a7d9aull, 0xfde76f34df8a7040ull, + 0xc8c351a3aa83bcc4ull, 0x6d77d3021618db93ull, 0x309720047d538a1full, + 0xc95aaa66d894a533ull, 0x7b51288dc2bf1c37ull, 0x57e66f7055ba88baull, + 0xb597ca3f5734aebaull, 0x7cdd66668837e2f9ull, 0x43a226683df076e8ull, + 0xa8695a54f47533a4ull, 0xc253d1543006a8d2ull, 0x6c61eb4254b38c6full, + 0x6878a1483c415451ull, 0x6a2d4069c0642a0dull, 0x6d76ea2c2e82de7aull, + 0x87d6eacddf530a02ull, 0x55846b6cb0dc8c1eull, 0xd255b7fc3068f4f3ull, + 0xd531d39c64e9f2efull, 0xf62ea63bc48bb504ull, 0x32ed0a737d29b52dull, + 0x4bfa3e1ae0867d35ull, 0x6d21acf56af4976full, 0x07db12b279f1a923ull, + 0x1c68e7e33c76fc4aull, 0x7bf7f56fcbea39feull, 0x678990f0a9badc90ull, + 0x2922acf253497dffull, 0xeadd0eafbb59a0b4ull, 0x5084ccc458fad661ull, + 0xd8d0324b174b057eull, 0x6d7e86a4735cd4c8ull, 0x4fb1b17bf506af9full, + 0x1f341720902c651full, 0xcf87e2f4a06784f8ull, 0x30577fbc49fc9cd6ull, + 0xbc77dbefa63b1846ull, 0x02da6dbe8a7f2b7bull, 0x5a8e41505fc3fe6cull, + 0xf12a4a364530da91ull, 0x3ed0289d7e445c90ull, 0xecd065c72367cc60ull, + 0xcbc9c4284a568415ull, 0x1e27251c49d2252cull, 0xca962b0ccf11a2deull, + 0x63f1a11ad3cd28a4ull, 0x3bf21a4a6db5a5bcull, 0x3a7816131418f063ull, + 0xe362cc1e48438c8full, 0x763c4ba8ca03ca64ull, 0xe65306a2e990dd1aull, + 0x26d8a222944a207dull, 0xd03e184875dbf33aull, 0x86b024b49e23567cull, + 0x3877f415b49406e9ull, 0xb4f960a08fc4f3b6ull, 0x4cabf6a0729344f8ull, + 0x94301799dd7c566cull, 0x182577a54203ec8bull, 0x63a455c570f6803bull, + 0xd96ba10dc35f9655ull, 0x6df9df9d4c0dfc68ull, 0xacef6b8f8371de46ull, + 0xe00f5bc914e09c82ull, 0x6452363ad8aa3027ull, 0x63a7083eaf9dee85ull, + 0xba85ea9ab975aa69ull, 0x554148dac2e0bbf6ull, 0x9f5787a25c956749ull, + 0x74bfa9b021e3aa44ull, 0xfcacda96ffbc0a0aull, 0x20575730986ac92dull, + 0xbc7cdb7de604cebbull, 0xcc04fb2bf22e6465ull, 0x0b13be4bf30f55beull, + 0xf942d1b5e5e92b32ull, 0xdf458a277b221711ull, 0x1ca537104e98295cull, + 0x7d157d0840627de1ull, 0x703b890fa8822341ull, 0x328fed35b016aa8bull, + 0x5767947c76289ac5ull, 0x78c8b99750aa0ecfull, 0xe15ab98629239b07ull, + 0x2fccac23dad17dcdull, 0x09a0f68cbfac5f47ull, 0x2be14312bfa5c8f7ull, + 0x9a4ff742eed696d7ull, 0x885590fa048d4bb1ull, 0x7f0f4c34bfb2f60full, + 0x5693b4c09d67e959ull, 0x4d1ca42e2cdebd62ull, 0xfb8504b2fd136127ull, + 0xd8fd8d4381c2af06ull, 0xa8b006e65f74ee08ull, 0xfdb59ab039a7a41eull, + 0x318fb2f7bab695daull, 0x169e7339ae6474e0ull, 0xb7fcf7aa4ace1e33ull, + 0x3d5667065031e55full, 0x8d080cc943a148caull, 0xf71e82d13c5f4a14ull, + 0x1ee10e5045a4d095ull, 0xac93b0da97261594ull, 0xe64e3e398fd63bf7ull, + 0x7825486f9c101579ull, 0x7464700cf4415986ull, 0x270e02739566aaafull, + 0x4119a46a6b70276aull, 0x6535bc6bd2321046ull, 0xdedd2e68e72f8ca0ull, + 0x3e307d6d08aacdd0ull, 0x499bbb514140373full, 0xe8fd1baa692b8cffull, + 0x906ad21b1640428cull, 0xa1f57cef4109f908ull, 0x7108d65e352606b2ull, + 0x7169871e46f99c26ull, 0xae110d5bc3f100a9ull, 0xdaa5df36070a331cull, + 0x8802e1a803e026b4ull, 0x38f585062d1f6112ull, 0x86852688b056a9e9ull, + 0xf153b6792ea72323ull, 0xa0fa7990c41ff0a9ull, 0x05aec8fe489a6fbdull, + 0x422c95bea4b5767bull, 0x700611665c761535ull, 0x819bb39b68fc2340ull, + 0x7d3f5ddf4e388beaull, 0x3b9748d614cb0a14ull, 0xa711151bf86d6dbdull, + 0xb17095844f30f8f3ull, 0x78a78cc10ed4e112ull, 0xd78385d7297771b5ull, + 0x07d7d7e64a4ab049ull, 0xae367e95e55aab2eull, 0x5113e2cf48a6f4ddull, + 0x35885c5daf22a20cull, 0x604aaedb86a94a40ull, 0x5627c9790c232176ull, + 0x6652e2a948a2bcb4ull, 0x46dd3b96e88ea317ull, 0x367e90053feb22e9ull, + 0xeaea5b520e45a6bfull, 0x995dc15cd4f67616ull, 0xde9f660626a9ab16ull, + 0x9dd158dca77dab62ull, 0x150895865304a410ull, 0x25a6ff49ca69ec44ull, + 0x36926fddfcd5d637ull, 0x34e7150cff1efa34ull, 0xa953899eb64d6483ull, + 0xbeb4679d46d23085ull, 0x238eb6d22577d4acull, 0xbc1773b263f3a91full, + 0x4ae9955af3c06243ull, 0x22ed2338397f15ceull, 0x3a0aca9b5b4c5e04ull, + 0x9ddc1ae3d7f44099ull, 0xeb48a1ad9006e87cull, 0xe0551a76c883ad4dull, + 0xd0363fcb3a606ec0ull, 0x80556454c665bf1cull, 0x7e8c5212494bc122ull, + 0x37f29c52fdd456d0ull, 0x50513ce9d8fc2b77ull, 0xb2c1c14c7ae950c7ull, + 0x366cc67577ce0f9eull, 0x8e3cd2e98e358d4full, 0xa73cb75ad50fc712ull, + 0x3b12ccbd241427c9ull, 0x22d00374d7e6fb1eull, 0xc78adcda8b83d84aull, + 0xfee49f26db2bee8dull, 0x9478bbded5e7bd92ull, 0x805d41223dcaeb99ull, + 0x81d6a0d284f275b9ull, 0x3801d2157dd8a9eaull, 0xe8b6eba8191eaf00ull, + 0x27f85d5a8f06921bull, 0x83a9d64a85e4b050ull, 0xecc5dd77f5081016ull, + 0x7081dbbbd1d0880bull, 0x089fe60cdc8e0ea0ull, 0x61b2f86cf2cde230ull, + 0x1f731d77ee2602c9ull, 0xdd690bdccb2aef27ull, 0x2f4638f8a9930ed2ull, + 0x04f61e1a423859f5ull, 0x662726ae8daa9d1bull, 0xd1e2e4fabcb6a0a9ull, + 0x3c242871a7d30010ull, 0x669a272e929bcb00ull, 0x9e748a5a9b222d22ull, + 0x8d36d5cb7c73b3a7ull, 0xcdf56a93723e8a5full, 0x2b730e5ebd14faa2ull, + 0xaac68ed1c408507aull, 0xb6ecc9827639398dull, 0x72f7659fceabc4ddull, + 0xe8820a42456050d6ull, 0xe2d358ebc354b50aull, 0xb6eda4dd4b4182abull, + 0x0faa85d14b858a86ull, 0x2cf6fa5d4a8e8e80ull, 0xb65c889b17398fb6ull, + 0xd10c02ddfd08b46full, 0x5e1d1c10ff0ab2e8ull, 0x797b7ac9cef8e7cfull, + 0x2697b496b2c8a0d4ull, 0xc5b47cddc646b0b8ull, 0x1d9e18af9a1058a0ull, + 0x234c9e6bf36237daull, 0xdce7ad0f4979a11full, 0xe8d90c01b2052503ull, + 0xab5b7b20508a3e4eull, 0x6402d33598c97b22ull, 0xcc8806fa7b8f6e12ull, + 0x7e23978af7cca604ull, 0x107dcdd1806845a8ull, 0x894c995124aa5ab0ull, + 0x50f974c13d8b880aull, 0xe97ec4704fdb6d3cull, 0x9fb48e0cdbb56817ull, + 0x8d1f85d3603b0ed7ull, 0x1fc060e1ab65d25dull, 0xa1efa14fc57f2ec4ull, + 0x99e581d76876d18dull, 0x20d2e3badfe64751ull, 0x34ffa80a23f4e1b9ull, + 0x0e988e04eabc8d1eull, 0xf8e79f8371224353ull, 0x192807c9aac56745ull, + 0x8e75dc9599556c79ull, 0x7e40ae36adb6571cull, 0x2041e0c7008e2808ull, + 0x23a4d4563c427171ull, 0xe4f7ca90bb9eaa93ull, 0x0041e706b074c8c7ull, + 0xf0f917a42528f818ull, 0xa2ae219b3eaba1dcull, 0x1fbefe5c4f4b6c39ull, + 0xc3227b7c3d4bc8fcull, 0xc9a28038e180f68full, 0x62d2ef73c8ecfad5ull, + 0x70e104c53e62df30ull, 0x5cb35c311f2cf34eull, 0x88717efed9df1cebull, + 0xe69e524ece57557full, 0x402f60524f9135fcull, 0xb7d3b1c402d166edull, + 0xaf95fa5a1fd70fb3ull, 0xd2e4f75a0e0c7c08ull, 0xed2672a954ced051ull, + 0xd86284fb83d45429ull, 0x93789454e0f98cc7ull, 0x6701b1b75193fecbull, + 0x3c28ba371ea1ba34ull, 0xa2807626901621cbull, 0x82e8fbfeea5d62adull, + 0x0e926d6bca09e62eull, 0xcda52df8c149fa7dull, 0x199255441501254aull, + 0xbc3ae886da35548bull, 0x4ac16c9fedf7f6fcull, 0x1e424875724131eeull, + 0x787660fb70cdd934ull, 0x903015dcd0251a71ull, 0x53b3c81e3ab29f82ull, + 0x19c22f32cee0ffd9ull, 0x47da8d69e372fbd0ull, 0x3f93dd3d366b3164ull, + 0x4ce46a7de28d2d40ull, 0xfaa34e0ea7c87f5cull, 0xb5b4409154dbfca0ull, + 0x809341952f07afe1ull, 0x9e703f4655227cd6ull, 0x8c553cc524a1fe13ull, + 0xfb599165d07995a4ull, 0xbd5589b6e9399a51ull, 0x941a9ccc8c183260ull, + 0x4661f6138a552365ull, 0xf828392927f896d4ull, 0x0911a004e5d0eb5aull, + 0xd453fb9f0948d4d2ull, 0xaef43f3bb5537a3dull, 0x7510a185b42e8a73ull, + 0x62bc0c7ac4891314ull, 0xd3d99ab7154965b3ull, 0xa8a46fd42c13b4ffull, + 0xe77dd26e328a2005ull, 0x3188ca05b6539af7ull, 0x2b6d5ce1a815034cull, + 0xa36ed3445465ae4dull, 0x2fdafccbf55177caull, 0x4afe14235105a42cull, + 0xe64cace9571784e7ull, 0xd3b147af64649c7bull, 0xdec20c731a32ebafull, + 0xe25e0b2fcdc8a1dcull, 0x7e96afc9a22f459aull, 0x2c2762cf5db9bbb1ull, + 0x2f2909caa27eb376ull, 0xb23b2baf3634946aull, 0xef0392c860c76ec9ull}, + DynamicArray{ + 0x730d040df2373ed5ull, 0x7c1ce5edc00a258aull, 0x040f7f6ca01ea1d0ull, + 0xd7aca9a399633ff1ull, 0xe779b62e76578c39ull, 0x5758ac040b1c511full, + 0x96612b39b3eb0599ull, 0xc8b2a7413551dc1full, 0x24b8cc893f088fccull, + 0x74f3f515f065444bull, 0xd4397f456808ba5aull, 0x168548de95ee892cull, + 0x25d3bba1244cb6cdull, 0x9e910334275f7f2cull, 0xeb3917acf992d719ull, + 0x9cf06db16a6592b1ull, 0x23a0f364a50801a9ull, 0xfe05687e23f2fcbeull, + 0xd0f150f9ec45e345ull, 0x8831ea48d5802e69ull, 0x17b9f090366216d1ull, + 0x21034bc8665366efull, 0x3eed3391ab9a6675ull, 0x78662bc1b743ca0cull, + 0xd5792d003c9ba6cdull, 0x015f206ea24cf1a1ull, 0x0141527041fa557eull, + 0xcba1c37a56cbd3aaull, 0x31e5af69c9cd13f5ull, 0x7adf893848dcd94bull, + 0x7eb58112678785ebull, 0x18a3f78aa519bb91ull, 0xc7bb8ca30603cbfaull, + 0xbd9a630ea853f778ull, 0xdf2b5a6c72dddb98ull, 0x7de7bec862884264ull, + 0x9734f4f97646c2e2ull, 0x6b9a88e567c4dc63ull, 0xcdab1cfafea0293aull, + 0x348826762d975db9ull, 0x74660dae6af898adull, 0x928c20d7f9ea9cfcull, + 0x9e8f44ad4e6485f9ull, 0x39236b937ee8c307ull, 0x580129aa1c702bd3ull, + 0x26a543c10aaefcb0ull, 0xf88cffdca641fbdbull, 0x0f38e40a9c967804ull, + 0x4a32f8c62d63c219ull, 0x2c963f08dd0d98bdull, 0x0ed8740ece4ea3ceull, + 0xf98cf071ecd92b2bull, 0x833bb81233fe438cull, 0x3d63fd6744b5f320ull, + 0x108db5faf88854a5ull, 0x906230fda44c5ae5ull, 0x8aeb82db16151ffdull, + 0x8c2b2ce37b40c959ull, 0xc69e763e2705ab23ull, 0xa6a499390c8a7aa6ull, + 0x07154ddc22b30ad3ull, 0x6a6b9e5566bd1934ull, 0xb6fb430c72ae1719ull, + 0x92082ce0494ba524ull, 0xdc1c0b7020bbd586ull, 0xcdfcaff9643cc04eull, + 0x37f08cec2b99c290ull, 0xf4016c779ce39023ull, 0x58a5589d5490dec1ull, + 0x72305e7cf164f996ull, 0x2751ad7e3104d3abull, 0xdc5e9e2c7fe088c0ull, + 0xe2b1750ada851837ull, 0xeb64e2702cee8134ull, 0x31bd2876ca580649ull, + 0x09ac4da632e5ede4ull, 0xefc6df37f5b7f68eull, 0xc8a9109dd56182c4ull, + 0xe3cd47cf5f92b24aull, 0x6e2fba35abdfc5ffull, 0xb71ae1399371b2e9ull, + 0x752828f19a0b46eaull, 0xf5300e3139539fbeull, 0xb66adb423f56c19eull, + 0x5ed51deebf6b1fa9ull, 0x0012f3ce4e7b7273ull, 0x8049d5be028fa251ull, + 0x0cefe45dd4011112ull, 0x54ec7a151f93bb3bull, 0xb3d3b4f4f8c7e341ull, + 0x48b1e05231658536ull, 0x55b5c7df0f424d3full, 0xa9a779a16b248508ull, + 0xed7e1147d92d98baull, 0xca6769867248b1f7ull, 0x8b9cb10cebb219baull, + 0x6e603d488d7ee4f7ull, 0x126d1aacdbddab14ull, 0x10315d9708f80511ull, + 0x5ae71338013a94d9ull, 0x225eebbfe83874b9ull, 0x2d634b6b4a40ed50ull, + 0x56b9534a339c9e8eull, 0x4b1424aaa585d004ull, 0x1f6cd7e2fa187282ull, + 0x49c5d6d4566d607eull, 0xdf3c25e34e70a36cull, 0x02f47a72b44061eaull, + 0x484fa53ee590ba5eull, 0x4c0970aa9447cfa1ull, 0x3aab863a22e34aaaull, + 0x656e2dd382b423ecull, 0x24a7a259651e5e34ull, 0x143111de9b0d8585ull, + 0xd5ca617a9e530af8ull, 0x775589f057c6d4abull, 0x261f1d99096e2a86ull, + 0xb18d10b6b2c3ec90ull, 0x152495faad158750ull, 0x595c7c8dedb4c163ull, + 0xadda33979d1d690cull, 0x7f03607f1703197cull, 0xe5d6b7859734a309ull, + 0xab591f8f5703e580ull, 0x972b1089a4f74e28ull, 0x7b17ce25b570a57eull, + 0x0d9ec959a17c9ee4ull, 0x8e4b4a642b3110e3ull, 0x4a55cc0ddea7d782ull, + 0xd1bf7e3e5336e377ull, 0xd1ac8901d6e9b24cull, 0x96d5d40e611b5de3ull, + 0xadd5980ada5b1c96ull, 0x6f56ae802cc0a4c4ull, 0x9a079f81cf6aca5cull, + 0xab5286e21c466844ull, 0xb92ec8a5b3c2f1a1ull, 0xb2352c84a62b86c2ull, + 0xcd23c925b2637b2eull, 0x94b389a92cba03e8ull, 0xaedceb667d1f8b56ull, + 0x501a8cd57f741877ull, 0x2c316071ec45aad4ull, 0x7c5bac890f5d498bull, + 0xc1510531dc4f5fd4ull, 0x89ae1bb943f65730ull, 0x056c6ffc58ee77d2ull, + 0x65a74b7426f9a3c8ull, 0x5234ffaa25e80f40ull, 0x411c09e30a7cc9f9ull, + 0x7b716469420f12fcull, 0xd9524becc5b38612ull, 0xa8da2ee2d68ef780ull, + 0xa5218aec44b77df0ull, 0x0113a04703062357ull, 0xd0bf370a1382459full, + 0xa792b67dfe410adaull, 0xbeb0cc1306031f95ull, 0x33df647a0c7adf21ull, + 0x2709e1987f62df59ull, 0x0865cda5c76d5905ull, 0xe57ce4a1e16d3dddull, + 0xecd52a335f4a6aacull, 0xdc3b2e7e85f7909aull, 0xbe1f73cf6b8ec802ull, + 0xa4f41cf0314c294full, 0x56baeaf9e60bfbf4ull, 0x9eb1b94395281e5cull, + 0x9a219769ff578773ull, 0xec038c5c4adde6f2ull, 0xb54f7ec5a2e10dafull, + 0x878d6e580584dee4ull, 0x5d89faccdd307efdull, 0x34ccd865d5e1bfa2ull, + 0xf88a2bd49f7baf42ull, 0x8e1a5547dd4e4405ull, 0x39afe45106f6e483ull, + 0xac97082ed4bf0658ull, 0x922e1e5649bdff56ull, 0x229f6c482f8f6f33ull, + 0x60cddcc9a02ca355ull, 0x9c51a1b7039d0ee9ull, 0x5a6000661a2510e9ull, + 0xd0c6632abd2c88bbull, 0x65a15d5cb7b2e19bull, 0x993d082596852e4aull, + 0x9ad1073dde1a0f30ull, 0x790ceed7fe9f75b0ull, 0x6d5860fc4192eda3ull, + 0x7b31a9c59baae522ull, 0x55a11692493351f2ull, 0xd597795d79843bc2ull, + 0xb715edc8de0d1f1dull, 0xad4e56a0af8258abull, 0x4c280bf76d2b7e29ull, + 0x4db8c26330237e8full, 0xbabb18cd0e852753ull, 0x3a99d149ee37302full, + 0x212e05933b29b525ull, 0xdaa270e2d76d5da2ull, 0xa6fed4dea18655dfull, + 0x1a346811e1084609ull, 0x384ac6b5085b8995ull, 0x8e5faf2791d427d6ull, + 0xc233933754631da6ull, 0x6f4782187fce4ec9ull, 0x78289179eb963154ull, + 0xa0f8f1692cfec76full, 0x6609c08a18e9b44dull, 0xbebe831991f8523full, + 0x2c046a895f524044ull, 0xea32028a56a9a670ull, 0x046cf1464025fe9dull, + 0x66f2d825fac841aaull, 0xf60c0c007d344b7cull, 0xa3200d033237353aull, + 0x678f102ea3eadc0aull, 0x524589be69ed5c70ull, 0xb8c32766fcbd38a1ull, + 0x5d69c79f4ba3c214ull, 0xef89fedc341d1f4cull, 0x9e0af9c9ec1e7815ull, + 0x3a8e82602de22ef5ull, 0x0a2b61f0bbf107e3ull, 0xd6e3a16855ff0b30ull, + 0x139b297c1388d5d8ull, 0xe26834986833720dull, 0x82c56fd50f07a17bull, + 0x0bb1368963673866ull, 0xa5655d8021481367ull, 0x056ae98e1739f6b0ull, + 0x5f84e1ad5650fc2eull, 0xbc9809686d386fdaull, 0xb5046aebb42b6502ull, + 0xdf98df64ba2fe6b7ull, 0xfcd81ff780270e61ull, 0x645dfa83a31ae28dull, + 0xbde5aa6aec8f0a49ull, 0x91f4e709b99bae41ull, 0x8f20535f286c7726ull, + 0x02557e789397a9c0ull, 0x8a7062a1d8c8da0aull, 0x2d983a1a3db120e7ull, + 0x2ed3df2cce2068cdull, 0x96ca137fff2ba816ull, 0x88c0c116c5a1067dull, + 0x76a1791de6f40c0aull, 0xa1792cf19f576ba8ull, 0xfeaf8c70d887d8dbull, + 0xfe0755c27e1192f0ull, 0x5a84f1a751ba896cull, 0x424cf78afd2052d7ull, + 0x17aeccf2f73e0837ull, 0x347b8bbc546951caull, 0xcc2ae05549a49a6eull, + 0x8b3dd8faa7be223dull, 0xa8020f3963a7b6ddull, 0xbaf274a284d2fb7cull, + 0x88bc15ff20f7298full, 0xb0905956f4cfaa9cull, 0xb1c6b00eb7024d72ull, + 0xf78e0a15bdeb832cull, 0x855d926509a2f007ull, 0xc9be5702d004670aull, + 0xacefadd7e82da3b2ull, 0xc7d0ae451b5e1c33ull, 0x6b9e7019e81d2787ull, + 0xca6c4a18330f249bull, 0x5d827327d29971ceull, 0xaeb01dd2960762a4ull, + 0xc617e98804ea7ab8ull, 0xdbb6e6a3c8842923ull, 0x1dcd57428c574c2aull, + 0x0d4d9fe6fad0fae1ull, 0x5a30bfcb606ff186ull, 0x000d887b6cf26b64ull, + 0xd198a76481b6786dull, 0x61ce36a819eba622ull, 0xe5bf71e4cb89ba01ull, + 0x3d6925f2afb34819ull, 0x892807338ce392f9ull, 0x9e36aecd58080d98ull, + 0x18e1daf0d4d3bc11ull, 0x52953a69b5fe5921ull, 0xaf46e2c6e878d3b2ull, + 0x08f138b3b7901e8eull, 0x08f040c6936187bdull, 0xc9fcb240844bf43cull, + 0x246c047275e2ec72ull, 0xd76d3e2cb93b7326ull, 0x7f00bcc0557c3aefull, + 0x85c281f03242e5d5ull, 0xbe215b53882956e9ull, 0x73c8f306770ea1f3ull, + 0x77c8856a56c97e12ull, 0xe6a35471a3e0a509ull, 0x3a1e1a040324d47aull, + 0xf6217ee692849782ull, 0xb176b1dc2c91fe86ull, 0xc66b4b6d0fe83b81ull, + 0x44b2dd6da16291a4ull, 0x3ebeee3dcdfb9445ull, 0x915cada2661b499full, + 0x311a5770e99e15d8ull, 0xf079bc8df792aaaeull, 0x26a04f6d8e098f29ull, + 0xb9328685c94ac37eull, 0x2afe94973d4e3f92ull, 0x82fb03709d432b66ull, + 0x79eda1bbf67797b0ull, 0xb817f5fc78831053ull, 0x844b2ef59397a1b7ull}, + DynamicArray{ + 0xc45b8a31f1212be5ull, 0x733c8f5fa7c94536ull, 0x8c3e108353b4ebfaull, + 0xef50d7a7a871d148ull, 0x6896df7e9a763f2aull, 0xe992125025953a21ull, + 0x0e0eaeeec79b1052ull, 0x2afb9f3a4113b20cull, 0xcc4a622a8b158a7cull, + 0x94750adf7ae260ddull, 0x54c9378cef9d7089ull, 0x1f88a7ba3652db0dull, + 0x436675cb6def49eaull, 0x625bac888f38e5bfull, 0x6fda51af69d39898ull, + 0xcc97f55daa073ef6ull, 0xdff8488ba84566a5ull, 0xb6a8d5cad92ab527ull, + 0x0ec02ab511fe1cb9ull, 0xd3e60459a57b816eull, 0x01e65c0d9e9a7430ull, + 0xcc911fdefbee1e8cull, 0x7713d9f79e1b168eull, 0xf0dad9f1783ba2e5ull, + 0x12548cdd39c0daaeull, 0x972530160baf31f7ull, 0x13c899c1f2ddfd68ull, + 0x4a4eef438c22bb78ull, 0x634caa5aa3fd02b1ull, 0x53e058fd3d4ca45cull, + 0xa27a649fbbdda2c9ull, 0x00891935d4c125d9ull, 0x2105bac93289c2e3ull, + 0x2031d0c05bdc83bfull, 0x1aca5470ef1ac45bull, 0xdf6baa0759c012b2ull, + 0x09558850112a2a96ull, 0xf92ce64d1ace9d93ull, 0xb47d5a6bd2e47d8aull, + 0x494a36a734469144ull, 0xb4835674e6ccd2b8ull, 0x993f144b05bc0d9bull, + 0x240982cadab2de8aull, 0xfc738aa7510db4ffull, 0x4cacf00fedddf8abull, + 0x84c8fa59b037fcc9ull, 0x1d0a1094432431f5ull, 0x521b3e35d3810ed4ull, + 0x2d8f2e8312f41c52ull, 0x0ff3a40acfec0297ull, 0x9a2225ade2160705ull, + 0x055c5f1541c2a014ull, 0x843448f4c846db8eull, 0x7ae1dfe30fba3fe8ull, + 0xed7a0bd515a44210ull, 0x4d3c6678d1796199ull, 0x0cb72df73f9f3a92ull, + 0xdfc29965ad92e827ull, 0xfbd2ff33df3cf6f7ull, 0x89b8d5f6dbe3789eull, + 0x40427372824bbbabull, 0xfa307cad79885775ull, 0x599b2064a87e973dull, + 0xf0e8d56d8a03e633ull, 0x7fe1860b577989ceull, 0x4b19f61a0b9b10c5ull, + 0x37a368fc5d5c2cbfull, 0xbe7a3b5e6ae5d523ull, 0x5c827e61388c088dull, + 0x307b3683302ad337ull, 0xa1e16b6e10101420ull, 0x2462b61894a6aa3eull, + 0x43af2a5587e43c4eull, 0xe516f762e8c8fe50ull, 0xbbcf993b222e7428ull, + 0xaf85b5e87584da76ull, 0xbb4532341484ed60ull, 0x6d20dbcf13a1dae0ull, + 0x209bc9daf43b6733ull, 0x3f784dff801fa4feull, 0xb3b1e22e7d5c5aa4ull, + 0x3a36a6daba90f869ull, 0x3d285395289a4723ull, 0x9dde670d9b175f8cull, + 0xac1bd8ea18698deaull, 0xbad4e9f302fd1faaull, 0xe1284baa326c39a5ull, + 0x40f84730e2e62101ull, 0xba25f33460e08321ull, 0xa6b5641c969e9030ull, + 0xa4e31bc72e590facull, 0xa200d8b8f135a27eull, 0x3b31439ff47ccaabull, + 0xcc02b92491f43958ull, 0x6547de5d19112530ull, 0xc2c3bc34096f66d8ull, + 0x8e4fb7a14a9f17f8ull, 0x6c2112611ce3498dull, 0x8a45b5e6bfa186aeull, + 0xa4da235892462101ull, 0x90e666dbb05e1188ull, 0x416f508759308effull, + 0x17001b0fba941c1eull, 0xf21d5e8185ae81b5ull, 0x1466bcbef2de9de8ull, + 0x320e63277028ef36ull, 0x3714bf48ba337ce6ull, 0x392e4d16fb516599ull, + 0xd1555f83dd15d4b9ull, 0xa92297b36bac4147ull, 0x9513995f3a5320dbull, + 0xc5654dea91344d54ull, 0x0d79ae50199b253full, 0xa306ce8a35e5a26bull, + 0x02a8da78e0c13589ull, 0x3b9dff30e200d5c3ull, 0xa1960a41c6ad8335ull, + 0x076bb76a5a847c09ull, 0x9d7809375c91b2e7ull, 0x4b5d070161f88608ull, + 0xdcbd7848fb88d99aull, 0x10d7c60f0e3d3e08ull, 0x7da54991d0fd05a9ull, + 0xb3ed778964443b13ull, 0x076b7ca42ea39d4eull, 0x3603c5d034b0a566ull, + 0xab7e0dce52479734ull, 0xfab96130b2db1668ull, 0xea48b4b8867ccaa7ull, + 0xae2774d3d0142688ull, 0x172075050b357ef3ull, 0xabd4530addcb2e46ull, + 0x7272af7d27770008ull, 0x7bd9a56286a0df75ull, 0x23026ecda52474caull, + 0x911a8f95f20f1d08ull, 0x5185de8744490388ull, 0x740b438a4e13f011ull, + 0x952ec936008e1a78ull, 0x99caac8ee20758dbull, 0x6af5752a8979792eull, + 0xa41681365a6bfea7ull, 0x6bbd51785450f73aull, 0x658e5b772df0e08aull, + 0x21c2d760e574f06eull, 0x40cb8738941bc117ull, 0x23a26bf5791eab7dull, + 0xb1bc6fb55c250358ull, 0x4afa3cc1e62bd277ull, 0x0c9c8a8291cbc10dull, + 0xe387720f4284eab7ull, 0x38aec0f1ebea40f1ull, 0x24141d76798e84bcull, + 0xdc7f5398c0c126d9ull, 0xe3b7d3447a118ad1ull, 0x8c44e707248d5bbbull, + 0x97f0a3ee09fc7fd7ull, 0x7e86644e1ffa3573ull, 0x510bdcb7ca84bc61ull, + 0xfe50542690d0e83bull, 0x4b6664d9ded76b0bull, 0x9db31bc01c0664f9ull, + 0xe895405f76532105ull, 0xdfd49a7649761f28ull, 0x505fd26ecb64582eull, + 0xe1bfd4ae807dd919ull, 0x64f3493574e9dd1dull, 0xb82f8358308a1b4cull, + 0x1d4c7cb97d091a5full, 0x731b164b240a16a0ull, 0x2beb9dd1fa9ac249ull, + 0x07cd0a40d295caf3ull, 0x767e7b153bfad47dull, 0xa270f2230c5accbcull, + 0x16b53b58a647b2e8ull, 0x1916d03264f4d5d9ull, 0x5bb390c6a5035488ull, + 0x09d41c80338db79aull, 0x7166f67ffe422629ull, 0x95365edd3577958cull, + 0xeb05721fc01afa9dull, 0x4e1464df0fbc95dcull, 0x0a2f71484afdb3d1ull, + 0xbcc098398ca34947ull, 0x47a1005d491e1ec2ull, 0x9bc0c3f9b31ebfd9ull, + 0xa6a2987732f9ed60ull, 0x3a3b160adbcfe83dull, 0x5198b712e17a1d39ull, + 0xa40ca91069901bdbull, 0x7ecce8476e0d3c9aull, 0x4000a4c0bcf5b044ull, + 0xcba0357f9b7dfef2ull, 0xa0a15c128168c580ull, 0x341fd36cd386a4f7ull, + 0x2e004ab42f357dc9ull, 0xd710fbb518ce7f25ull, 0xab7b82ffb0afff1bull, + 0xc321532b21c27718ull, 0x57af69ebb7046f1cull, 0x0f48fb4aa005344dull, + 0xf2c5016c534fb9d8ull, 0xdc17310d8d181b8eull, 0xbf143d1a3a16d7f0ull, + 0xf6e6052e2c1fc669ull, 0x7bca46f5181af91cull, 0x9fe9d9f6423ee816ull, + 0xf821fca397b20ad9ull, 0xcc6e9f740ce80642ull, 0x2cb7c10d22240042ull, + 0xf0465f8c56263442ull, 0x42b495242dd3c6d0ull, 0x3ce9c20e5a978d62ull, + 0x61f8c31357e4d3b0ull, 0x3baf7cba39178ca6ull, 0x963081f5c71a5d79ull, + 0x7496d38997fe9b19ull, 0x51f9f2491fed8e03ull, 0x64b058b92a30ad1full, + 0x20a98fec8f061066ull, 0x57ffa43d1d64c62dull, 0x9df03cb2cab948e1ull, + 0x0cc1d5b943867e3full, 0x7cb6acc2d18a754aull, 0x872a7f3737729250ull, + 0x99f30a9af7775ee6ull, 0xca0eaa22b36253d3ull, 0x537d838fbb92f57full, + 0x9bab0262dad5fee7ull, 0x5ad7a30ff1833451ull, 0x0d7728e171745e3eull, + 0x04e242b39de6dc0full, 0x57795aaf1246920aull, 0xb2b43b4d700fa6b6ull, + 0xd86ff00b1be24fb8ull, 0x944216712d2e796bull, 0x819c598070842e79ull, + 0x7af9b982af8aabafull, 0xf9b90c905ebed2a2ull, 0x890543ed408c1637ull, + 0x5a22640d8e5e3a84ull, 0x57e796747b238a06ull, 0x24535de67d9afa4cull, + 0x5e1ea7938e7ff71aull, 0xfaaf68f8f27f7ffbull, 0x989a371abc7c0af9ull, + 0xf9c614e2e93d26b6ull, 0x45214a15fbc6853cull, 0x81384f7c17473ad4ull, + 0xbe0e59156cc05014ull, 0x4d5b58fd15e7f24aull, 0x515361676b15f866ull, + 0xcffc657693a09b69ull, 0xd902eea446698ee8ull, 0xd2ae90ebae2228acull, + 0xa68864cb683a3159ull, 0x2cad8b435b42cce0ull, 0x8450bddc664a89c3ull, + 0x7048ef7aaadc2dbeull, 0x4f1109d8490ea5d6ull, 0xb86f090df9c1acfcull, + 0x542eaf601aaaa796ull, 0x2b2bd9774aa70fdaull, 0x15db5df33bf7a419ull, + 0xc356e743b60ceeddull, 0x2ddd049395b46ed6ull, 0x071421a77a7ddfc5ull, + 0x1f2e7455173150f9ull, 0x055d4c7788a23c92ull, 0x9ea57bb365bf9a1cull, + 0xcd150a03f2ecf7f6ull, 0x19ab021f4aa1425aull, 0x09138ee687b55819ull, + 0x200d474118aa39e1ull, 0x815bc82aa5cb3a5full, 0xd3e00c8706cc0a83ull, + 0xcc92cb917dbe9ddfull, 0x1afa15f815c29e3aull, 0xb9ebdaf2eb329c52ull, + 0x97e1e0a4a0146f95ull, 0x2b60a4d2d75728ddull, 0x7f31b5fd72f148eeull, + 0xa84bbae3e87cc4e8ull, 0x9b257ab10777d846ull, 0x33b25c0ff062fbafull, + 0xcd1434c62d719121ull, 0x4f0ac4b9fd6721eeull, 0x786daf692319f723ull, + 0xe1dc73e97b546564ull, 0xb106a3a713388b0cull, 0x07e4afa548c18276ull, + 0xbe776e95f78be078ull, 0xc6ba417196be518dull, 0xd882fc6a77750998ull, + 0x79e587ce95e3d00dull, 0x00bd4cad37fd5605ull, 0x411cf97bfb44b351ull, + 0x7f3c6790ca4f85d1ull, 0x41e62a833a36b143ull, 0x1710ee00d58409c1ull, + 0xa583d949dd7b8451ull, 0xfe93d372b02b59cfull, 0xbad52b86f567c755ull, + 0xc9e4819bbb51c62eull, 0x932f122cccbc4ae4ull, 0xf29a611169e722caull, + 0x35ec7a39b13fd74full, 0xe4717eeb2a1af3ccull, 0x9115ca90bb2faaf5ull, + 0xc50848c4dd009f96ull, 0xd98b5323f5a970a1ull, 0x1e36385f6db8c276ull}, + DynamicArray{ + 0xe30f3544faf0b93full, 0xc792f4c099d0f6f2ull, 0x3165d654fac5058aull, + 0xf44e4158bc402150ull, 0x64f3f5b63d0c1524ull, 0x52f6de60658e7a04ull, + 0xdc4115220dbd9768ull, 0x6d12d78b9ac5e94bull, 0xc22ad2302ec0c561ull, + 0x533d2acb602a9ac9ull, 0x78a85c4cbb10b297ull, 0x072aa1b1241cf665ull, + 0x1aa5454796198e6eull, 0x6d2b1c646a35eb7dull, 0x86ad6113713c27f6ull, + 0x1eaac4e739415d19ull, 0xbc1b4334695f7439ull, 0x94d162ea78b30717ull, + 0x63a66f59a2ba3890ull, 0x615cbb54e450bac0ull, 0x975f66398a1b08e7ull, + 0xa30001ace77201b3ull, 0x2a227b81a2c0bdaeull, 0x5ced3b3aef60d8fcull, + 0xf84efc51e7155a7aull, 0x0e381770e9658ccaull, 0x819f3e06a8c9d581ull, + 0x53bf144800d0d0efull, 0xd61df1f08ec9f8d2ull, 0x59cbe20bad002a1dull, + 0xaef66edd869294c4ull, 0x5f90e71539613f32ull, 0xfd3609834d99ae12ull, + 0xc0bf96c452cca26full, 0x5ccffe4515e1545aull, 0xf68a214704c9da29ull, + 0x8f74b464b7b502adull, 0x0ba179bb1c13f2b7ull, 0xcb02d76012140962ull, + 0x7800feb18e95d628ull, 0x107c3bbd42926697ull, 0x95938cd63574b5f8ull, + 0xdbabfdcf96657fd6ull, 0xb5cd0dee85f104c6ull, 0x0d403c8de649a08dull, + 0x636c4b762d74b35dull, 0xf558b37eb3f61e0eull, 0x5f3741ac4711fd61ull, + 0xe7df708848646ef5ull, 0x01f337e8cb62061aull, 0xfb8927501eaf1c82ull, + 0x80e2c6c6c703b2abull, 0xf2d1c4392b5a519dull, 0xebf1b79ed75677caull, + 0x313d1cdfb956eed7ull, 0xda7c2f12e1561d96ull, 0xbf200a79923d7bafull, + 0x3f135dc638c757efull, 0xc2d69fe46b8c279cull, 0x0b7080edbd35969aull, + 0x1021702f7adf3e8bull, 0xffae6dea617bf993ull, 0x7965b5810754b107ull, + 0x8b1f2ac3c1d0ce8aull, 0x59f0054def69f808ull, 0x8f3630d93795b798ull, + 0x8cb25aa9cd99b0f1ull, 0xebfe909abc13ea8full, 0xfa60ce64c119a645ull, + 0xd8e9882d4c82cc25ull, 0x460aa3f4cedcbf04ull, 0xf98e652f8d51518bull, + 0xfa55d6bb4b0393bdull, 0x759413d8eaa68156ull, 0xbf425c5828c2ce30ull, + 0x7d6020bb31211546ull, 0x0a0957319193d71cull, 0xba7c0dcc310d3406ull, + 0xe26ada9ccec2cb2cull, 0x3c025c9b020012dcull, 0x57e401740867145full, + 0x7bb3166ff4e6305cull, 0x859a5d1e9cfa6488ull, 0xb33004bc24db5f1bull, + 0xe42db2a2327444d3ull, 0x115e2bf0e0cf0c67ull, 0xffd9a772be7aae02ull, + 0x4b28acb696ed6d1full, 0xd355adbdeecf3967ull, 0x3894212c0b1ffca4ull, + 0x7911b1b5a97c0daeull, 0xdde275e672092d56ull, 0xde2cb3324b336369ull, + 0x97f8c608a1cb11b8ull, 0x6180d271f3203447ull, 0x28b3eae0403e96c7ull, + 0xda558eb07eaa784eull, 0x1d2dd478c6717e92ull, 0x8f972fbebb2ee9afull, + 0xe662f94b0f3b3f96ull, 0x6d3db357f7cff8bdull, 0xd5ec33793539ac88ull, + 0x50b5c6f5370e18f1ull, 0x7a916a8b605969fbull, 0x2d0d5c67e5b5a331ull, + 0x603b7782ffcdb27aull, 0xe65d3db4239cf5f6ull, 0x4ee83b669558fdceull, + 0x47acd7cab2baf8f6ull, 0x5cf0f77d8ac97b0dull, 0x63458f5f2ae6fa2full, + 0xb8082c9ec31a3446ull, 0x2febcf5612c6518full, 0xe20a28a732db8b1dull, + 0xf7f50ca642168943ull, 0x3d1c5e63c4014ddbull, 0x4afd9484e181e1aeull, + 0x885dbf23bf26c189ull, 0x716f1e03b0394bcaull, 0xf48f5ec8830ccde3ull, + 0x4ab0c3c211b3bab7ull, 0x8e747899001e8f8eull, 0xdb3e2ffa02a716daull, + 0x0e16769ec3b746c0ull, 0xf19d6f58d78af75aull, 0x25ead3c1e5799376ull, + 0x3a9c6c69bef444cdull, 0x50c1bce5dfaa8112ull, 0xdf317622ce9a239aull, + 0xbd92dbc452f1df4dull, 0x759d8ac512c17eb3ull, 0xb778636dbb467e12ull, + 0xb734983cc154ac62ull, 0x07af7593134d2cceull, 0x6a97ba29c7f86962ull, + 0xdde58c5e186948afull, 0xc5637fffe2088804ull, 0xadf934273851e8e4ull, + 0xdaa0665455c8a478ull, 0x0ea59efe2ef04918ull, 0x1e28bd65ade32833ull, + 0x10cc14ef4e9fdd77ull, 0x905491cafba87755ull, 0x6e52bd5cc7516414ull, + 0x89d93a1ceb0f9e4bull, 0x7ac10fa6c4e4d2afull, 0x5a83d68584142907ull, + 0xd9b1dd6be6349f16ull, 0xb1b3ec4038e2e529ull, 0x3bd12728a7e451daull, + 0x122c89f28d3a4102ull, 0x6464bd0ca9afe2d5ull, 0x4256c91368eeccf5ull, + 0x45c6a1c78eece092ull, 0xdbe98e45c99c4dc9ull, 0x72a33b1878158a88ull, + 0x340b399f03b8f8feull, 0xc996836330e2ab5cull, 0xd127c28c41525cc7ull, + 0x28fe0a4dbc27d802ull, 0xc0492d5e07f46986ull, 0xca721ac8f64d0fc6ull, + 0x87add662cbc3f0a7ull, 0x644aba01bad93441ull, 0x9a1d9acc08cb1776ull, + 0x73a959428e47794bull, 0xc7c34bdafdcfe924ull, 0x35608ad88156a0e8ull, + 0x20612d4faa5afc91ull, 0xfd978af0cf09dc00ull, 0x14e70c79411048eeull, + 0xd0139707fb85d6d0ull, 0xa3ef01b5a0e224a6ull, 0x84e2c7684f0fe021ull, + 0x2ba46e5d1d863350ull, 0xd115240ff8b4ffccull, 0xb3849d3227c436b6ull, + 0x2a268aa0a62f0281ull, 0x03608753e52613afull, 0xfbcb2966cbff1105ull, + 0xb34f20538be22acfull, 0xf21930ee75791878ull, 0xef302306e10d01d7ull, + 0x3789d28bd7935413ull, 0xca80e0028c4b7247ull, 0x40e554a780e3aaf3ull, + 0x6d088f89d3ae798aull, 0xb29e06bbc13a686cull, 0x6ea082a8fe999cbfull, + 0x6f4ff607de9f90b9ull, 0x0aff9a97b6c25b7aull, 0xb9d4b383019a4f80ull, + 0xb38e88298221e599ull, 0xc6dc218764acb75cull, 0xafb1dc01f6605317ull, + 0xa7aeaf81576e800cull, 0x14dfa0c060510fc7ull, 0x0f0998fb373c86c4ull, + 0x1615c30fd47119daull, 0x049fc3c8794c06e0ull, 0x63bb69e831f9a2a8ull, + 0x71ec0af4f5521a1full, 0xecea4e9f1495eae4ull, 0x91d64a400c51335aull, + 0x03d77f7aa63f34d9ull, 0x880668555f6e87b9ull, 0x13980b15f4a959c7ull, + 0xaaff61f5de3ff50dull, 0x44d9e15ad45dc833ull, 0x3eeadb08fc69fb95ull, + 0x251c5bafd03c230eull, 0xd3aeb9268a91ad1aull, 0x464a7e0808ec2e76ull, + 0xdecaf82138d126e6ull, 0xbefa84404560b147ull, 0x57ddbcfda33b12b2ull, + 0xe50fb5dc4a2a2089ull, 0x1a58144fe9d109c2ull, 0x38a6df27b32c9e14ull, + 0x29d4db10c76ed736ull, 0xcb7a071ee5563ea9ull, 0x0156a143046e0eedull, + 0xaffe7a21a25f06c5ull, 0x9bbb794eecc22d19ull, 0xad0255fdd5d0583bull, + 0xa2f8d780fa1051fcull, 0x9e04f8e000b3a3c0ull, 0x40d7e011aebd82dbull, + 0xc7e7f64ab140952bull, 0x9ae6f64abc45db55ull, 0xecbc9ed8e1bc2695ull, + 0xbe10dba7d8bb4944ull, 0xe193bac64b34d56bull, 0x7cca4983b4278e30ull, + 0x5fc745a09010f144ull, 0x39028f411454b904ull, 0x27d149080ed9203aull, + 0xd22327bd2647063eull, 0x0a04ecc1fe4c3d13ull, 0x381e95c1e39e7b4aull, + 0x4f02cdd0cac88a74ull, 0x4989ebd26725c762ull, 0xba60eb72bf49ceebull, + 0x04de815b221e044bull, 0x61ac8dfd394b9076ull, 0x3070582c97e6b5ccull, + 0xb8c053cddda14b53ull, 0xad58e342d7644fbfull, 0x38d9c389ee429cdbull, + 0x5024bcbff331faa8ull, 0xde13ec9022a9ff77ull, 0x0835e527d65d5e24ull, + 0x7fa9b13745c2376dull, 0xcddc0668289734abull, 0xe20d8a4fa85c32f1ull, + 0xa5bdd5e70313ad83ull, 0xb23aa2b1a098d984ull, 0xda5e92deefe67dc6ull, + 0x694d8ebf5166278full, 0x7e5694992a6c5de5ull, 0x29bf040b9f679929ull, + 0xa81eacb5630f31dfull, 0x628f9f63f48559efull, 0xa40411d26f8c062bull, + 0x2499ee65d4b33d59ull, 0xb745fbc219f69cc1ull, 0x1343ce31dee0e7e6ull, + 0x08a972fa9052024eull, 0x13608856b1f5af31ull, 0x0c4349dac99085fcull, + 0xf4e9731d55d06750ull, 0x20ec86845b3fd1cbull, 0x8640437f9665728bull, + 0xb8c672227849e017ull, 0x3820fa786cbd0aa2ull, 0x647a5b2876f0aae2ull, + 0x38e9ef76e0ee15b5ull, 0xb6c505f85a838141ull, 0x915a9fd292a316f9ull, + 0xbbccf89b7f1da6fbull, 0x0bc1d50f4861fce2ull, 0xc7084ad83c7c7dfbull, + 0x3c80a41f4e75d006ull, 0xd2e7c625ed3f3fdfull, 0x3bcc16cf61c2175dull, + 0x15fbed128fdd0775ull, 0x9635ef27c0991f4full, 0x008b53e6802f8737ull, + 0x8501771b4f0408a2ull, 0xc76d2c01ac5d6af8ull, 0x14092717c1ffd912ull, + 0x15affd7c2139b7c4ull, 0x97fa38fecc31a991ull, 0x6522053baafbff94ull, + 0xde6b8c2a21a87102ull, 0x312c90a91859391eull, 0x6967f27b3e82e8e4ull, + 0x5f21644d02757bb1ull, 0xf52e1bda70b9a947ull, 0x2cd3867303025499ull, + 0x86d8218e03d8d6ffull, 0x567687f9045657d4ull, 0x3ff2729f142493d7ull, + 0x590636854ca3bd8eull, 0xf2472b8b788edd2full, 0x20f7498a5e75da09ull, + 0x5728e7700b5258b1ull, 0x58ada46af2599594ull, 0xb7a95893c02fc257ull, + 0x0f449a2d4318d418ull, 0xf014b82f2f8d1949ull, 0x58f74f434258a905ull}, + DynamicArray{ + 0x8e95e838f40464d3ull, 0x7f7886add9ad1840ull, 0xd53d2e92a54f2000ull, + 0xd671be7b04f1faafull, 0x1b8c0d70992793d1ull, 0xf7917261fb99968full, + 0x7a976d028bf45922ull, 0x9a219fbfc31f1269ull, 0x74c2a4dc0d743e1eull, + 0xea0f9f5730b7d024ull, 0xa14b79f28c2dade2ull, 0x704349de30c67c79ull, + 0x7214cc7ea70e3ca0ull, 0xdf27c5bd8a5cde28ull, 0x89c966afdb726f7full, + 0x8ea23e6d1862ad17ull, 0x3498299cde40655bull, 0x58b59251dc458769ull, + 0x00065ee7d8b8c940ull, 0x53353a63bff4502bull, 0xbca1406027be9af1ull, + 0x5c197b494588f303ull, 0x050459d62326a685ull, 0xd56d25f7eab965f2ull, + 0xaea8322b6f7e75b3ull, 0x709924aea81a21c1ull, 0x8237b7293d2952edull, + 0xef0e35c37b3f309full, 0x6242c67ac3f6e48eull, 0x1216a509be360617ull, + 0xdfd7ef8e402e868bull, 0xaadb676a26aa1894ull, 0xc507f0717a27c3ebull, + 0x78c02629c05f1c77ull, 0xd83f6e8b3f25a682ull, 0xc7587a562347da5aull, + 0x107b0abe37716233ull, 0xcab1a1a5eb199e12ull, 0x3bd09ec69c425034ull, + 0xb44d6e766098fd4dull, 0x268fae8af309c666ull, 0x8b9fd5bd0d20677eull, + 0x1f54e04cde0dfd45ull, 0x5abacac0b22fc68cull, 0x6b296cf10383abeaull, + 0x66ea215d5c9447baull, 0xa1ad35daa521c5b3ull, 0x1a671daaeff57b1bull, + 0x563bb5a15eb3d940ull, 0x988f8afbe55c306aull, 0x11c41dae13729c84ull, + 0xecddaa43ce59f741ull, 0x6358787cdd9ef0c6ull, 0x48f2ace30f8a229bull, + 0xcba7563fefd7c408ull, 0xedc647863b90720dull, 0x6dec09be01a2f1c5ull, + 0xe0a0eb450620a36bull, 0x4de3b8cc64054745ull, 0xe00cc23ad0558949ull, + 0x354992285c8cceb2ull, 0x6a6366327dab2d90ull, 0x94c4b4df5c46bb5dull, + 0x48eae8fecd520603ull, 0xabd995a8b7b31b0aull, 0x39882c1a2ea3927dull, + 0xf8a0935f8d0cf428ull, 0x622662ea4fea467full, 0xbc53c47bb7e5a315ull, + 0xec9a26bcdec779eeull, 0x0b1259b8d803f85bull, 0x233ac9a1a922ee90ull, + 0x0a59a8c05f25d5faull, 0xa6017584227fa2aaull, 0x9a6508de1ac50e5cull, + 0x8c30d6ee0784c30full, 0x3750d788f6a52c22ull, 0x4eaf6c10242002bbull, + 0x08e1ed3a6f0aaf89ull, 0xf4a4defce2f2cfefull, 0x0a8f03909ffd293dull, + 0xb8d8739e7ae6d291ull, 0xfd0d83ff00292f21ull, 0x0d1f436ed07919c4ull, + 0x9ba405fb81826cebull, 0xf5855ebe27c478adull, 0x158f03bf75d63534ull, + 0x123e847881db9da6ull, 0xa6092e5727429233ull, 0x04195dbb87b8faa1ull, + 0x9a6a355ee214e88dull, 0xf31e91c875a5dd94ull, 0x40cb436bb06b6de1ull, + 0x53b27917742c493dull, 0x27c0770dd0735431ull, 0x1eab958a01ea0ffeull, + 0x893b91ab17327425ull, 0x064f33cddd80c4cdull, 0x4ca3c244cfc95257ull, + 0xcaed3d4ac6387673ull, 0xf7cbf0cf1ced1642ull, 0x4f7c673fe265d1b4ull, + 0x6a4f887256a317e3ull, 0x960008b093be9636ull, 0xf4626f32a95ff144ull, + 0x015962ca84b0d7adull, 0xf5e2eb51125bffabull, 0x2536368e3fc91f33ull, + 0xd77152cc54b11329ull, 0x036c68a60f9b33ecull, 0x9d625a294435c3a3ull, + 0xa511e50c507d7cd0ull, 0x72c827cdd3d7f17full, 0x578fde7e7b3cd2b1ull, + 0x9929566fbc693db1ull, 0x7cc3a550480bdf38ull, 0x1d440e86b2daf7f3ull, + 0xe8330037d92924d3ull, 0x39de01cbfce7d2c0ull, 0x89dec5baff1b4bc7ull, + 0xb4b57f08b079d51eull, 0x74c832a9775fa113ull, 0xb691057db1b2b588ull, + 0x02645ea92a350b76ull, 0xa21c4a50041bb5a0ull, 0x57580fbe24f3d13bull, + 0x6305eaf07bd0d1d0ull, 0x551dc71a2b9f8d4aull, 0xa8f74b67af16067eull, + 0xed54c3e7c806ed26ull, 0xccbcc26b9a117edbull, 0xa40e9d1c7f57a2dbull, + 0xc84a98d5fed7c6b9ull, 0x71c4e3c9821834f4ull, 0x028e769e69d7d068ull, + 0x34950bf9fa92a2b9ull, 0x7d836c252317dc3dull, 0x28df7d70d6abe7caull, + 0x28618ea11b19dd3full, 0x162663b31bc5b4c1ull, 0xbe955affba05e146ull, + 0x7bd1029c4e783dd1ull, 0x3a44bf50bba29858ull, 0xe83a14cd26f88892ull, + 0x9a9418f23f1db2f0ull, 0x9cb007cf44af6657ull, 0xf07e5718a5a1d34full, + 0xffdc156207ec7d9bull, 0x17df26b47564f1ceull, 0xebfeadcfa042bd93ull, + 0x1d0060580ea32467ull, 0x1df18ebd8a20c637ull, 0x1b4113ae295aaa2dull, + 0x41c88cedc21efd95ull, 0x0b6449346ef64159ull, 0xa53efd4030b48e41ull, + 0x6f888f19118ab2d5ull, 0x1729ecb81ccdd566ull, 0xe9180ce5f0f10fa1ull, + 0x74bf1d8432cd0286ull, 0x4d5c32d54d79f595ull, 0xb8a7b35f5a1c1498ull, + 0x8a022175c2a1a573ull, 0x30e8946fae72b3deull, 0xaaff764596063ebaull, + 0xa96757867eb3d762ull, 0x551ac0b9e70f4289ull, 0xe331e9cbfa1c8c81ull, + 0x345da1b7f41d9de3ull, 0x69b80b8ec398706eull, 0xe958695ccc8fcef8ull, + 0xcaeb155be2e0e23full, 0xb13849cbccf983dfull, 0x8c79eb34fbe14c9cull, + 0xf9a68a921db5de90ull, 0x089fb063c24bb770ull, 0xc3ea6dc62e210e59ull, + 0xd54561d2a7094b21ull, 0x8c92ab801dd20d33ull, 0x1d1a023e59f782f0ull, + 0x264b8db938eb3931ull, 0x3c40afaf31a53007ull, 0xcc75d2316a1bfb54ull, + 0x93cc75af250e6860ull, 0x3c40b5e04a667ceeull, 0x626ccad2060a843eull, + 0xb4cb78e4573a5328ull, 0x70e4f39dff837531ull, 0x901c68f12bbfb222ull, + 0x0eb8531bde354354ull, 0x56b360b990bdbc35ull, 0x827246b9a89ef2dfull, + 0x13a91943e687574aull, 0x733a68a7e49316ceull, 0xd815cc288e3bcc12ull, + 0x02914f87c1ceac7bull, 0x4d256a32c2cd4c27ull, 0xbef66b382fdbead7ull, + 0x15f99f4e183e00d0ull, 0x3025fdb4e41a4e8bull, 0xaaaa55b1c17f105cull, + 0x640ee9b597319e1aull, 0x604b3388566e21faull, 0x94ce18d35e866d98ull, + 0x0a6e3a4153eaf92cull, 0x07e1377db6218064ull, 0xb4e6ac859a186550ull, + 0xd619123cc14074ecull, 0x936a3f7135a074ddull, 0x3505ce2c5c3d5385ull, + 0xd4b7217487c16424ull, 0x294a6bb86ddf8dc8ull, 0x25d12a8ed6ebe326ull, + 0xa9b8756502e4aa3cull, 0x251b803e75e1479cull, 0x676274b2d9ecf466ull, + 0x1f1a6907ccdce6dfull, 0x5a30b1257eb69b23ull, 0x5733ad1669311e8bull, + 0xd9b0144c7d1b8d78ull, 0x28714467034b2bc6ull, 0x11cdf4df32946721ull, + 0x89912437b21f77b5ull, 0xebc8c20a926d2870ull, 0xc81b1fe0e2064519ull, + 0x702376efecdb991bull, 0x31771d07b22caba8ull, 0xcf46fb7cedc604e1ull, + 0x7ca0fd270c73bab1ull, 0xef4a289daf11aa6cull, 0x82f232e205fe3127ull, + 0x91f6179e023fce60ull, 0x85da8ada02e17430ull, 0xf55530e8d95ff32aull, + 0x49a0d40ae61f9324ull, 0xbd4f81116d122ea5ull, 0xdc8c035c641a397aull, + 0xfef236877c09ec65ull, 0x8c7eded7621ff7d7ull, 0xf2b30fb7f88b724full, + 0x329e469e99b920fcull, 0x16aaef5a9c6aba84ull, 0xa0d3de8b7b35946bull, + 0xbac6887404a25a35ull, 0x26ae6cdf5343dc82ull, 0x845839874d84ac63ull, + 0x0edcc455ec80f5feull, 0x229cddd2c0afb3b3ull, 0x517b22b1c5d14f3aull, + 0x7fe5f569e5e5939full, 0xa424a070b8290d09ull, 0x19b80b7eeb19dcf6ull, + 0x77d2c631be7b485eull, 0xcbf5eb46418cbe28ull, 0x37b294bf66afd02aull, + 0xbbdaae0ef47f3dffull, 0x4083e1dda6c3127eull, 0x9d0fcd9cb9e6d716ull, + 0xdb2a2d599f733b19ull, 0x12cf382142f81428ull, 0x3790b698927e80ceull, + 0x5586e99cc5207d39ull, 0xb90076021ebc17c0ull, 0x1f98665c6ca5b1fdull, + 0xf15936c2f5cd537dull, 0xa49066183c391891ull, 0xe6cb5fd96c07ee6dull, + 0x05cab0af875f5877ull, 0x79794b4bbfc56691ull, 0x812c2eb9e42a8bb8ull, + 0x5a1118069d5d4d1cull, 0x8b0cb30c5155e484ull, 0x40bf052ed303512dull, + 0x60f6e58cbd0cbb51ull, 0x0059483ecda39ebfull, 0xc0e8d33b51775ad2ull, + 0xafcaa4320fed4b10ull, 0x69773f581c669e93ull, 0xc23e0210edb4120dull, + 0x2a33f6613108cba3ull, 0x6a32afb3080ef5edull, 0xd79f5ef888166d90ull, + 0x260870c87b2b353eull, 0x7935d58c3684124aull, 0x809e94589ce78722ull, + 0x552e389703022361ull, 0xd56cf8c1e0e59285ull, 0x6e62a90eb06c20bfull, + 0x8cfa6018e77c0b5aull, 0x49da30bf16082c21ull, 0x9f00b111c756a502ull, + 0xeffa191d424eb10dull, 0x068b97fbf40fe11full, 0xa3c5a67c78d15446ull, + 0x91e6c83e498ececbull, 0x19f28408462e1bd1ull, 0xeb0d5444207ab944ull, + 0x8246e346e4d7f1f6ull, 0x099f432ce39e0a71ull, 0x0991b2563348c7bbull, + 0x53f7aaf50fafea70ull, 0x7dec98a919669473ull, 0xa739bf21eca23123ull, + 0x774f9ef888b4a3b9ull, 0x483bace314030b5dull, 0x84af622d86953daaull, + 0x6d0e82b5f258156aull, 0x8abac7ece9667a19ull, 0x3d2fd556ec95dcdbull, + 0x06521954dcb939cdull, 0x92ed6350d7550f6aull, 0xb9e57e357dc7ed7full}, + DynamicArray{ + 0x4143ae6f795f2981ull, 0x206f1cb8a3586127ull, 0xc9d62b6156ef360eull, + 0xc36b13074b870e00ull, 0x32df79baa4beecbaull, 0xc5e64378830456baull, + 0x8f9c6911366a8b90ull, 0x756c0b1abbba084dull, 0x200ef6dabef7ddabull, + 0x57c09439948957b8ull, 0x486b632216ec3044ull, 0x618e20325c5e6b6full, + 0x723c4ce734764620ull, 0x3b6a7919071a56e2ull, 0xabad83fec4727b33ull, + 0xa5fe063aa55e1e3cull, 0x39005f936c75c927ull, 0xef302b81b416954bull, + 0x991f7f9e791418c9ull, 0x2f81ed1772eff8e2ull, 0x5ce556c1c1fa49f1ull, + 0x8a712fcec56e956full, 0xd2f4395ac7e1fb95ull, 0x16e500be3e2b28f6ull, + 0x72fe8bc4fddc8defull, 0xfbeb09d2e73fb32cull, 0x7b547b0e8e98c818ull, + 0xbb4400d398853b6full, 0x2c2ce86bca585836ull, 0xf0a7868c13fcaa80ull, + 0x8fff97db60889a8dull, 0x42e25afa0df2459full, 0xcafef87e0e541035ull, + 0x7ce45b1cfe219b66ull, 0x93df43c62a1123a3ull, 0xd2d3f662f97d1255ull, + 0x707b2df9c4d803a2ull, 0x69992a814ca2be88ull, 0xdf0f53d766fb3063ull, + 0x2a82be65da6a905cull, 0xd2fcb74ff14efedfull, 0x489ea485a0ee5ddfull, + 0xc46fd199d2681115ull, 0x55d18e5db230f64dull, 0x0fa9c27ab37f411full, + 0xbff9c39925cead43ull, 0xbf8762078d2cece1ull, 0x2b9de96ce8e5fbd6ull, + 0x191e24e7aa72e672ull, 0x10789b7916b150e9ull, 0x4dedd8d7348bfe48ull, + 0x718b1b5555cd33efull, 0x8ce74535dd374433ull, 0x0945b73cc600d4e9ull, + 0x3f3848e35d9b157eull, 0x2ca46c7da336b2e2ull, 0x6e140217f038f968ull, + 0xc94a3909ad44949full, 0xbb4a2ec42f81a0c3ull, 0xde651238f3c5085aull, + 0xbe340149d0d302f6ull, 0xfcc04e0a68f68304ull, 0x039c1c2420dae0b7ull, + 0x37f49ebdac03f4ccull, 0x493fc86f860821aaull, 0xb3cb8b7071c0161full, + 0x07d95940219dce2full, 0x45c7f5e8ae790485ull, 0xea6168f5ad51e91bull, + 0x0071af1aac8829efull, 0x5d23c50325048ff3ull, 0xa6290512fa7adf3cull, + 0x662b5ee97469689eull, 0x48fdc3f07b1f0263ull, 0x417b4845e2be3c44ull, + 0x8fff9255bc7f59e3ull, 0xde4b0e851e53bf41ull, 0xf1fed8d017f7afd4ull, + 0xfc026e3b2dcbd811ull, 0xf6db0439cf347f45ull, 0xb843e3d3c2f11bd8ull, + 0x712c2f01771e4f5full, 0x110cece343bf2342ull, 0x961c768fb1f1d9f8ull, + 0xb042126848fd382dull, 0xd7999a42ea3aaff9ull, 0x0237fc96a39b24e0ull, + 0x253c17dcc5117934ull, 0xe67962dec4dff139ull, 0xda511bfca2ccf545ull, + 0xaaa6449b4907e1baull, 0x35d4c72cac050d60ull, 0x918351fde84d0f98ull, + 0xd0ca06b7e54564b5ull, 0x7c72d8022fdd0133ull, 0x6d9991fed03219b0ull, + 0x4fd58fdff2baa5afull, 0x00ec3a53b608c998ull, 0xb3fff83a842de50aull, + 0x591d066937c567e4ull, 0xdab27e7d93c68f13ull, 0xc37f3b33d747076dull, + 0x97998b5c3a3f39d3ull, 0xc21ba3fced109786ull, 0x8a9ba65c5c6949bdull, + 0x73ab9cdee6ab6caaull, 0xc16695f36aae6c81ull, 0xb1323dc40ae3303bull, + 0x8ae3957d3b3b5dd8ull, 0x9412ed376e31394dull, 0x0d07cfef3c5ff56cull, + 0x3beb8c931804ee6cull, 0x76307010a6dd92e4ull, 0x9bc97080fbe3f5f5ull, + 0xb353673502bd141dull, 0xbbf7f532f1bdf4daull, 0x00c5efb386c9ce7bull, + 0x4fbe6eaa85c4e461ull, 0xe674fed52aef09a6ull, 0xe66b3db663594b38ull, + 0x6d0ce652c9b70759ull, 0x22f2ceeb86a1765aull, 0x1c20fcd3db57d776ull, + 0x327a3c34f0963ac8ull, 0x87ef1e4e6b0f94beull, 0x005b1f3025d2754dull, + 0x1f2c48685b780a24ull, 0xe2ad4145a79233d7ull, 0xc631300ace5d158full, + 0xfe551ff9dd21dc02ull, 0xea8dbe1e4a0440e3ull, 0xd1a7101dc2ae49ebull, + 0x4ca4d2096f02ea75ull, 0x0406a755eab8bea9ull, 0xdc33a714d0902bb7ull, + 0xe010b2fe4acfd119ull, 0xc0ab44bbaf0a8335ull, 0xcbfe851eaeba668bull, + 0x4e1003429104d96aull, 0x70aa91da5b2f80cfull, 0x24a2e0b1dd4bcd75ull, + 0x28b2612989f94c2eull, 0x18abafc23198e397ull, 0x19bda4e460dd1296ull, + 0xe8eb33c2e16307bbull, 0x84ce59b3883fb799ull, 0x5b181d7c2d6aca5bull, + 0x5c989ebb82f1cbaeull, 0xc6e05a3344daa5e5ull, 0x1486ad0e35b5d217ull, + 0x854b9ff01f31a5e4ull, 0x175e184d0f7acffdull, 0xc064f0904ed68636ull, + 0x4fa0d5b22270e8edull, 0xfda7d3642cb92be7ull, 0x773eb01da1a8db2eull, + 0x67e4ecaefa01bae0ull, 0xe338ee7303b9ee31ull, 0xc8d3179b8d0e3c46ull, + 0xf1b827a7d3e139fbull, 0xfbb7594286e14d8dull, 0x1db905b2f106c1a9ull, + 0x65cde766930a26ccull, 0x4b67c2de3d642901ull, 0x32171ccb6b6cd54cull, + 0xe90fd9e777b67f58ull, 0x51ce75bfa9a253a2ull, 0xfa8d041183243876ull, + 0x2ffd955187f71190ull, 0x26cda718f3015204ull, 0xa65aef1e7e09b0dbull, + 0x306a8be506ca4942ull, 0x369e635396fec87bull, 0x3bbc469eeb3f4f15ull, + 0xa40b88c300240949ull, 0x0c47dcd33cd0a20eull, 0x07501cfa9544f3cdull, + 0x182bf2cc207eab4aull, 0x292dc7410cab20e8ull, 0xb2f1d48eeced0845ull, + 0x8ac40a06b749e42bull, 0x7338997e98136ed4ull, 0x66369d16ac9e09c5ull, + 0x96345306976fe1aeull, 0xc602b3ca9da4b064ull, 0x6519b71fc965967dull, + 0xaa419eb9a61254a2ull, 0xf6ee0426ec1c056eull, 0xd0c9df8ef2e4b7d4ull, + 0x3f7a7085e884c439ull, 0x94c6c2cd5efa39a1ull, 0x3d4a0cdf19190ae7ull, + 0xe230ee767afd5589ull, 0x6fe448ecd7e331f4ull, 0x5486cb1063807ef6ull, + 0xb1eb4d2d8387e6c0ull, 0xbe8b8a4d098bb17aull, 0x18d3473fcae224f5ull, + 0x8e0c63059802bceeull, 0xa4d27fb77e85a7f0ull, 0x09e68aaad1d08be5ull, + 0xd624b459ac810583ull, 0x964e7d50476c7faaull, 0xf64f7b0c43e53d05ull, + 0x8fc61add58efbe6aull, 0x18826b7300efb84full, 0x23e2763cfc2c4c95ull, + 0xf9ec22adaad733ecull, 0x6937625eec994956ull, 0xb70531450e64c7ffull, + 0x5901143a572a96ebull, 0xe5cc1ef771bb79e4ull, 0xa24f7b084507a98bull, + 0xd66e99cf13e8fd91ull, 0x249b7f02af2d31b7ull, 0xb3bb2d2e8233e682ull, + 0x962ffeda1981f70bull, 0x5597ff8ab1eeeeddull, 0x6d32601fabc232e0ull, + 0xdf6225319daf8533ull, 0x9d00fde4b7910019ull, 0xada0d8831eab2c4bull, + 0x0cbad3708651ca1dull, 0x402e4eb9b84027cdull, 0x34309433dee4de92ull, + 0x6f78695d3869faa4ull, 0x45b8e47367c053a4ull, 0x33845672ac315a35ull, + 0xf3a84e75b445356bull, 0x84650f6a81c67940ull, 0xe8a426ab5260c460ull, + 0xedc493a7c67e925aull, 0x966740e51fbea2a7ull, 0x1770052c2a95251bull, + 0x8fc14562d8f16c48ull, 0x596c74d07a013f0dull, 0xe02d9acf519c82faull, + 0xcf33e763b7e6e365ull, 0x224d681a43cef346ull, 0xff0ed31c512cf9deull, + 0x7083ca8dfcec63afull, 0x71d218ba962c9e61ull, 0xa750ff703c6b88d8ull, + 0x210b7b223184700bull, 0x63cecd507b9c5649ull, 0x5690ecd795562c93ull, + 0xb4ea2ed3f9f481dfull, 0x67edcb09ad41df2bull, 0x411c243112f3107cull, + 0xba2227ba3e2bd407ull, 0x1a1fd9b4e110c360ull, 0xe196195935d53c73ull, + 0x014860320805c122ull, 0x5d076687e5ed3b05ull, 0x82539f67306f0158ull, + 0xd1b71fd7bc3e8ae4ull, 0x12eacdd1d05ceefeull, 0x2878d9c4d3e85451ull, + 0x0197d79a553d6c15ull, 0xa1e08ce4d5907ed8ull, 0x51a531cb402f0b38ull, + 0x4910cba7ffb7a875ull, 0x0b61d81caf81ad88ull, 0x4cbffb6b89c91719ull, + 0x9b1ae54abd2b8a38ull, 0x3e6dd7e4782fec08ull, 0xc5a47576e8f1447bull, + 0xc56b548091be31a4ull, 0x45448732579e711aull, 0x972ef3505d25ae38ull, + 0xa620f9c47f5736f8ull, 0x4d445b1d729d01e3ull, 0x094030b235af94aeull, + 0xcb922f8668700ff9ull, 0xc652e97797a9e87aull, 0xacfda50c91ea052aull, + 0x63fec8b1d75948d4ull, 0xa479bd7beee5cb08ull, 0x0bc24ca5c0a28726ull, + 0x3d57a258faf9e535ull, 0x6ad63e6b6514bd02ull, 0x9bca667ed9f98548ull, + 0x5d7f382d19bc9be0ull, 0x585579a0889a2b49ull, 0x91e2333d64c6b3dcull, + 0x576bf9fe1c8a4441ull, 0xb9c381fce56ba922ull, 0xdcdf7f54bfef50f5ull, + 0xa9e6e6def985d2a8ull, 0x092839efaf84ea9bull, 0x9a2cd031abe87a7dull, + 0x37139760127bec7bull, 0x0dfabb465dc7ab3full, 0xe402c2355e163c20ull, + 0x492448e208aeed1bull, 0x0b3506851dc20ef2ull, 0xde5a320b52416b55ull, + 0x9298a787bce967feull, 0x1b6866aadfb9ea4eull, 0xc4dff89e6a3b27dcull, + 0xc9532dd9640560aaull, 0x4d6efa71804aaa48ull, 0xdbe906dba7a2ef87ull, + 0x1b297125f77e03d8ull, 0xceae11674faf5dbfull, 0xa88f4a4778a3f6ceull, + 0xe063043c69daacf1ull, 0x7da3e5f939434c5bull, 0x64caf836856e780cull, + 0xfd219c2c293c699dull, 0x236e475886e42ac9ull, 0xf9f493d8bf98e510ull}, + DynamicArray{ + 0x0b86f5fb84f2cd17ull, 0xb6d294e734b7294bull, 0xd9522bd5c48eee9full, + 0x340f1f11be817f09ull, 0xb021f360f477b910ull, 0x7e30d2ad92d136cdull, + 0x6beee88501106d6eull, 0x72796b4fcfd3ebf0ull, 0xc94ceb4b14916b64ull, + 0x07600cccae7fb863ull, 0xf1aa44205ec5676aull, 0xac2b0daeaf5f35c6ull, + 0xbfcc284e848a9e11ull, 0x8f8beef3cc679949ull, 0xa0f982b72f1175a3ull, + 0x4b5c6b7fd436a003ull, 0xf32774beacb6b8ebull, 0xe2d32224e7cb2d5bull, + 0x38b2bff6f59d98b1ull, 0xe05b163434e378f4ull, 0xdbe49113348894d0ull, + 0x1cfd63b2b30c89d6ull, 0x7a77081e96da994dull, 0xecf30b8766af8856ull, + 0xfc97423cd8dd2efbull, 0x7d235c68e6806294ull, 0x9197d4764f559e2full, + 0x673c196001ff75ebull, 0xb30392be06476d61ull, 0xa0a63b6e1f570541ull, + 0xa7d71d8ed2a40cfcull, 0x9be12fde05845cd5ull, 0x6dcec2d7de2451c5ull, + 0xd6bc40798780444cull, 0x0cf5aec431a156ecull, 0x4b262806a6b37fb9ull, + 0x825026435ec414cbull, 0x6c12628f93f713b5ull, 0x0025ce7f6375ffacull, + 0xe387dea4e3d320caull, 0x589250dc8c873f07ull, 0xd188c27dca0c2365ull, + 0x79834e92eab7af73ull, 0xf7e29cf3beca38a5ull, 0x362bdaa4d440cc32ull, + 0x4d6c4d1936693146ull, 0xfbd78100cda1bf4eull, 0x2b156b2090a3b61full, + 0xe0a534ef29c5723aull, 0x7fbd742be6116d62ull, 0x18573e03dc27a0c0ull, + 0xfebe3ed1060328f9ull, 0x43243ca576c3adb9ull, 0x3b450745f1eab67bull, + 0xd94c11ac900ce49dull, 0x14b02c9f21a2e777ull, 0x1a5568d8440f787eull, + 0x0dcdea9e5912d6dcull, 0x0184dc6925c175cbull, 0x2507566704729e43ull, + 0x497a1bc4bc8e6a7cull, 0xc310796b1a982dd1ull, 0x7d75f92050cd584dull, + 0x836c218549609240ull, 0xd2000a909be01af5ull, 0xdba8e33f4fb5e18dull, + 0x320a31df519624a4ull, 0xe2848232702f75f9ull, 0x842bf89d5e19e186ull, + 0x24c6ab2ec0a9686bull, 0x5396652ac8fee3e7ull, 0xf33ed9bca7b98d8aull, + 0x8205cb1bcd30e044ull, 0xeef7649739afffb3ull, 0x55f779417c90f59eull, + 0xa47df53e0c173bedull, 0x6ceba2224e97abc8ull, 0xd58d19906bfdbeddull, + 0x75d37e4e0d2a97f1ull, 0x02806b121bf020c3ull, 0xa2795bc98f0cf61full, + 0x6886d86a7db7752bull, 0x3e0874067eaa4b82ull, 0xb40ad2e35a263540ull, + 0xf6968977f4d5dd05ull, 0xa09e64424280cbacull, 0x9bb593fd5f08b166ull, + 0xa7ac88960ae622adull, 0xe7028e692f6befa7ull, 0x89e5749a56a21eedull, + 0xd0d83e993f626096ull, 0x597788fff323dbb9ull, 0x0482cf4dbf2ffa68ull, + 0x9c8816f297278d3cull, 0x816ddb2d4dba6ceeull, 0x8110cd79f4a8fa9aull, + 0xcd5eb0f4a8b2c837ull, 0x421bf88717af41f9ull, 0x2e296a62148f1ee9ull, + 0xb994a7b2fa8b5ba1ull, 0xfdf4e975dee01a15ull, 0x4201aa8d1f6c1695ull, + 0x4ca7294c5f1f6ba3ull, 0x4587d700c7eeff6cull, 0xd582a19672322f54ull, + 0x1b4de0d3a124973dull, 0xb7cc07170d818850ull, 0x6a0d80d84cf738f6ull, + 0x3b79a338f553190full, 0x9d70d7d251df2ba4ull, 0xa85f3d314cf2cfd6ull, + 0x1cdfb04a37a0451eull, 0x202573fa4f9d7ebfull, 0xd63a322fe414ba1full, + 0x5343a0309f0accfeull, 0x4c2e0d8e0b81d21dull, 0xe2522eadf0252f9dull, + 0x142fb152147a35ffull, 0xe3b5be33da84fcd2ull, 0xc7ee25c217c9ffa1ull, + 0x43280a81bb8c4e99ull, 0x4d63da89b9472114ull, 0x4fc9d181290d8e46ull, + 0xd72a62b21b2b228dull, 0x66acd9178d6cd969ull, 0x01fa551f831bca74ull, + 0x43215cdfd0ef752aull, 0xdc8c4b117aa478baull, 0x71471df51ce23913ull, + 0xf0c4ff216df4c395ull, 0x2740651bdbf25221ull, 0x3da2a2ffe35c9019ull, + 0x510a9befb68be82bull, 0xcbcb9a7128ac857eull, 0x42b6026d2acc02bfull, + 0x378ea4980b348623ull, 0xed3ac0e8c47468a9ull, 0xc5e93f9478d5be4aull, + 0x026996edabbe4d45ull, 0xe2af42b2550ac498ull, 0x89dddce67369a728ull, + 0xd3cd0fe72eafea80ull, 0x7137f3f8766319dfull, 0xb893060ecf9cd258ull, + 0x2f3cebc3da8b3e36ull, 0x00581eeb55d00752ull, 0x36346270a9fd162full, + 0x920114e41265ea8aull, 0x7899e2bad8434dceull, 0x4a7bddff2018263aull, + 0x4bebf3957722635aull, 0x8dace08ec04e5c36ull, 0xc483e229a80c97b6ull, + 0x9968ab0f3ef32cf2ull, 0xefdcbc0c69e8e1c7ull, 0x4f7c7fd9ef41087bull, + 0xd7e38506373ec292ull, 0x6a560cab9d646badull, 0x488e4c0863e2a278ull, + 0xfafbd04a088d1481ull, 0x02a66e1cd6c4d49dull, 0xf8b8d181f6e1c84aull, + 0x5e5861b3571048f9ull, 0xafebea96fc90da84ull, 0xed95ce3a2208756cull, + 0x9f683905832e2924ull, 0x1e858a01e41b7220ull, 0xf3be0e16b40e89b6ull, + 0x60e71a74d20ae6e3ull, 0xa535aeb3c7e9d31bull, 0xa9584013dfe1a67eull, + 0x8d6f59d3b02430f6ull, 0x0a74e7614a062df3ull, 0x26068d9d787cea33ull, + 0xf42a57cace6806cfull, 0x12e7f3c2fc3cee9bull, 0x46629131b1b06c0bull, + 0xb38340db766e4e96ull, 0x22f3d8d77403255aull, 0x3a21a6801a9cc36bull, + 0x5df8b4e74e9b1667ull, 0x26b2ad7ebe2c7605ull, 0xd145d18e5bcc9201ull, + 0x102b35130802740dull, 0xb67858eb553d122full, 0x584020521e911cc2ull, + 0xac7a2937580a3ca3ull, 0xd7b7eaac66462aceull, 0xd57426c5efc065e7ull, + 0x7b6dddb0d13d2793ull, 0xa1bd47b8d223251aull, 0x5617282ce0126307ull, + 0xb866472f3c816d08ull, 0xe885d6d624324114ull, 0x72244db8acdbcddeull, + 0xf105a417a9454044ull, 0x87074dbe2666da6dull, 0x3dc6ef258a06f740ull, + 0x5843f5e62e99aba6ull, 0x6bbf8d33ae76968dull, 0xacbc58328ea94603ull, + 0x4422ecbf916d7027ull, 0xf0f2e7db0f60017dull, 0x3a313d4f7cf1893bull, + 0xbee077d195b0e41aull, 0x54f8719b53d5d18bull, 0xb4451a133ec3973dull, + 0xd5f7e993ed7bf377ull, 0xa1b8eaa8b5a47186ull, 0xd1d95d0bea342afeull, + 0xee968742f6572c0eull, 0x38be75ec9bbd376cull, 0xcf8b408dae8bb0f2ull, + 0x3f1d27c407edda49ull, 0x21c89a20f98831f4ull, 0xe2c47c560be890cdull, + 0x8f6736a15e7c8431ull, 0xa54e3c1ab99965f1ull, 0xe07cb84ffb85ac8dull, + 0xff0d991e60b8858full, 0xa7d8d6dc84ed92e0ull, 0xd089a93cc2faed09ull, + 0x88a466d15b62e5d2ull, 0x684073056ef8ff83ull, 0xf9daa88a096223ccull, + 0x5b87cd25804b4c13ull, 0xfe6db359197afbe2ull, 0x4b6b0763168cbb54ull, + 0x70221dda058a8da5ull, 0x533d763fa1a4a423ull, 0xd8c33b0d53904fc5ull, + 0xaaeee287a0fbdf40ull, 0x53e9952ecb586423ull, 0xe4155d502b3add3eull, + 0x83056b0e8f2008aaull, 0x48826cff8fbf84a9ull, 0x256d7e34f4a47141ull, + 0x649ad35abd95390bull, 0x4d93ae5bd310a28full, 0xd6a01eabda557b9full, + 0x4727f63876dd9fc5ull, 0x9ceab7a7d928b5ddull, 0x453c239a0537c4ddull, + 0x80d4792ae5de4674ull, 0x2e2f22be124c7b95ull, 0xf96e0cb97c4dd8eaull, + 0x461efb458803df1aull, 0xca50ad32648dbda4ull, 0xd1aa447dfcbc6544ull, + 0x159ee40649f33f49ull, 0x0c458e9a5bef2588ull, 0x7f947a5de18b1bd9ull, + 0x77793ae0e172ef7cull, 0xcd53ff9f2ea5dbfdull, 0x24053a8d223bef76ull, + 0x6843a121a25df1acull, 0xa81f885785def096ull, 0xe696620add8b4d81ull, + 0xa7ace6e7c03c5457ull, 0x2cb817be1c0c26c3ull, 0xcc9735e0a00e7044ull, + 0x11bb11ada408ae6dull, 0x209fea9ab8060b95ull, 0x0a78307497d55fc7ull, + 0xe750e6f406044249ull, 0xd6d99e4e4f8bb2d2ull, 0xd22886e5b6b972cfull, + 0x09eaa56d28b364bbull, 0x25757a9c321ac7dfull, 0x3222d9a19232525dull, + 0xbd82cda9fa9187efull, 0x31d29dbe6e2f1631ull, 0x1b05e323ad05cf61ull, + 0xa49fa2152800c9baull, 0x4db56956efa6cde7ull, 0x58e8a96f1a66cfcbull, + 0x54c87e9f7e87add4ull, 0x5c0e38c51aad0374ull, 0xf8a9862a3cfb7ef1ull, + 0x89d77d02f6bd95ecull, 0x71b356af41c48097ull, 0xdae3ee5f2b2b8021ull, + 0x0c53ee08cc79ffdcull, 0xdf06a338805d9d7full, 0x37150f7831f477ddull, + 0x1d501ee3e89174f1ull, 0x3fbeccd5f309f03dull, 0x0e8adb48b61e296dull, + 0x08429023184c2ba3ull, 0xc27d714defd2bbf3ull, 0x07e102ae126a5d51ull, + 0xa2ba8f0e8f87213dull, 0xfe8386c36ad073b7ull, 0x2808f82ec75c5507ull, + 0x841d5e3651d86c4aull, 0x2cd00e3596a0c7d3ull, 0x149b835c00e8d082ull, + 0x2adc4128040f8b96ull, 0xb5d5e238cdfda155ull, 0x83957e0dd3507a99ull, + 0x21f88c9fff75b91dull, 0x5cdfd4b55be57618ull, 0xf3439f032c57f8f5ull, + 0x8da595a4bd494c12ull, 0xc944d8736df98bf9ull, 0xa0d8d766dc9dd9c8ull, + 0xe5022082fe14237full, 0x13dd8edbd468b91eull, 0x3153386e4815296dull, + 0xfa0f1ef59c08546bull, 0x9ee9c17ed649e988ull, 0x84d62fdf7af5542dull}, + DynamicArray{ + 0x9832eada069e49e4ull, 0x7ba6fad85e8789e6ull, 0xce8b2c6ffd360d16ull, + 0x2542d95e370554efull, 0xfe560f8cedd5fcdfull, 0x666719e9fde0ec6aull, + 0x67894431d1c29b15ull, 0xcf312c11f4b44d04ull, 0x52db135156e6f07cull, + 0xa67ed64334b05ba6ull, 0x45584284825a3ef1ull, 0xc4c8a1a8870d924bull, + 0xc5c813208185844eull, 0xe8bf62e05bf1257full, 0x1c8c15ecaad8da47ull, + 0x4602661a8661ae56ull, 0x9b3cc9147735c3adull, 0x09b06e538309df1full, + 0x977d706e99f74b88ull, 0x89781697f5790831ull, 0x582cb69b8ac10e72ull, + 0x51414004b579f71full, 0xe00dfed03f02f27cull, 0x6f17ab00b144e702ull, + 0x3485aed10d277fafull, 0x2e1667181d3644ddull, 0x172527e8074ddb5cull, + 0x52310543486fd0caull, 0x55c95364a3824fc4ull, 0x0ab450b566887527ull, + 0xa2fe380684e7cab8ull, 0x2afce4802dee8ea2ull, 0x113460ca5487755aull, + 0x35ab5b42a7b8f420ull, 0xafcd0abf18330484ull, 0x3ab953ce0c72388dull, + 0x018f42b48a1236b2ull, 0x411566282bd136a5ull, 0xfc505b0ca2a303b9ull, + 0xdbae398e7a8885daull, 0xb59515c764530635ull, 0xf91e6e72fa6f0777ull, + 0xc3910c9af9a626b8ull, 0xeebb3fabdc95d0d4ull, 0x26cdcac764194e6bull, + 0x8b704478cd0e2c7eull, 0xb8c9f4ee0d14b8d8ull, 0xd23ffce6eef793eaull, + 0x3f427c716ad9c68full, 0xef9b7a9280881524ull, 0xd4193ea1c16cfd1aull, + 0xb2931c65e70b37f4ull, 0x0cbe52528b11097aull, 0xdc3b6663cca9106eull, + 0x728ecb3a315b337bull, 0x49de58815326a0d3ull, 0x9cfd4aed79b1527dull, + 0x839dca47a491126full, 0x652693b1a7e387ecull, 0x4b046c63ec816eb7ull, + 0xd11f79b51e7d7fb3ull, 0x947cb2cb5c2ed86full, 0xe078b89379c052cfull, + 0x6982c4c0d3ce0d93ull, 0x6213730d3516bc0bull, 0x70ea76159a3d4edcull, + 0x927d89c16ac45c6bull, 0x56a008bc991d29a0ull, 0x59e3606c6d448e20ull, + 0xed0046f14e4f578aull, 0xba9d5770300f86beull, 0x4197ce7b2c6c8be5ull, + 0x41487749e97eacf5ull, 0x10d3dabb93f4fa6bull, 0x8192292aed058501ull, + 0x02f66283dc615056ull, 0xcd6d44fd9349af10ull, 0x1d20ab661f27f365ull, + 0x6d11a1cf4c105ff1ull, 0xb2075fa8d10a1c86ull, 0x0b54b0b8a6808a8dull, + 0x3374e338e518bb23ull, 0xa1756a45afc98efbull, 0xa7085db11f6bb338ull, + 0xcd4d609ca34090a1ull, 0x480775ee7a22577dull, 0x950930d5fb1d2480ull, + 0x26056863d853c9efull, 0x532cd9accba43efcull, 0x0ad0b6bc1debf3b3ull, + 0x5eab411a7bd7cc22ull, 0x01db26e9522a5e46ull, 0x377c5a1267281669ull, + 0x0dcc0c2f55d71780ull, 0x719d970d2a960915ull, 0xec9e5306ce7a1dd6ull, + 0x8b8b1b007db17c47ull, 0x2a016f454d0843d3ull, 0xcd76c2f442150fdaull, + 0xb898e0ef227ea6ffull, 0x41bcd0411a9178b8ull, 0x64509942f3271320ull, + 0x76246db8aeb9ba53ull, 0xefb1f0b2d859fb2eull, 0xc98744989f0f38c5ull, + 0x4fee18691539a53aull, 0x0adf12b4f6fb893bull, 0xcba815ac102c6946ull, + 0xfae67de8f014699aull, 0x79b9b6654c14cac0ull, 0x7a60401232ccd005ull, + 0xa96a0245fb396ff2ull, 0x65a238fdc9397eb7ull, 0x9d5283950113906full, + 0x293055bdfc55ff2full, 0x213446fd084ce501ull, 0xe132576be58a16b2ull, + 0x3084eeb0d2a327a2ull, 0x294313d9bbfcec90ull, 0xaf61f3b9232ddf06ull, + 0xacbf8aac30f99dc7ull, 0x7fa216cae0add0a2ull, 0x3ba3098d25350a84ull, + 0x03ea802f75754666ull, 0xf62469a20e689debull, 0xa792bdec5a9d122eull, + 0x43d4eb86f4bfb23cull, 0x76f07220c99fee82ull, 0x9f4ee96e254550dfull, + 0x4db65126e402792bull, 0xc999803c926617c4ull, 0xe8e11f820b53c405ull, + 0xa2b4a8b924c3515bull, 0x53c85e8c830941afull, 0x73d9576e2a0d0df5ull, + 0xdfd8fcd103ec0b0bull, 0x2d58a27b15f05d3aull, 0x56e52942656e2124ull, + 0x9d5013d2bd0d93f1ull, 0x4f3c5416401e3a4aull, 0xdbd55ce46e5f4db7ull, + 0xc5b0aeb89f594d6bull, 0xb2f02c66f71d1d02ull, 0x3d3f03b7306d8f0full, + 0x413d8906a313dd57ull, 0xa9d77336588c2e77ull, 0xcac349dd86aafe4aull, + 0xa49dd72af4b5b98eull, 0xe61d0fff21a42f59ull, 0xec2f0893c8f55ebeull, + 0xa4d4d21c6472988full, 0x78aee9851c40599cull, 0xbaa571fe60303dbcull, + 0x3e1687a9ea359f37ull, 0x97bef2d3e79088a1ull, 0x4c8677730478c713ull, + 0x5a2d53b7469d6e9cull, 0x4e3e6475141ad1e5ull, 0xf26b105798408692ull, + 0xd27891af5ec7e25aull, 0xa445e88b8b7c0315ull, 0x389a3c30b74ab14eull, + 0x0a0523ffc5fa06dbull, 0xa4aae832af39d8d0ull, 0x98789d087186ffafull, + 0x7166ab6757611be9ull, 0x593c490656768944ull, 0xafe35ed83f4a4fa0ull, + 0xed38a443d7b191c3ull, 0x5907d8b64b12f952ull, 0x17f7937f30d19ec1ull, + 0xf45860bd9259e872ull, 0xfd3de74b2e7ea6d0ull, 0x1f30dabf1d3b9625ull, + 0x3cfda76f920df33bull, 0x848c1deac06c386full, 0xaf332c8504550867ull, + 0x99181bd56e0c17a6ull, 0x2324d251dfc40710ull, 0xeb4a1bd278b23898ull, + 0x18efcbe54275bbbeull, 0xde61551026342906ull, 0xa1885c3ddd396c86ull, + 0x619eb81968b4e2aaull, 0x18778c94fe9b9305ull, 0x6eadd4fd5d570092ull, + 0x6a5d0c0bafdb2d8cull, 0x75ff08247dec8eb2ull, 0x58601fbadede37a7ull, + 0x3bc4bf85a81b0dc0ull, 0xa06723aced067622ull, 0x9c039077c16f3fcdull, + 0x555147c32173236bull, 0x0aed104b6e5e7976ull, 0x5026b3ba14072766ull, + 0x40e7fbb960e4abbdull, 0x942a90046caff090ull, 0xabfed93b9156acfcull, + 0x5c5e660d95fdbd4aull, 0xaffd1131fb2ac67cull, 0x2f88be1549b86797ull, + 0xc58bad09567fc7a0ull, 0x513b762d7ab3f6aaull, 0xe752917f6f004859ull, + 0xfb056797afcc8714ull, 0x1d89c620eb8f8f13ull, 0xdfecb290a0393bf3ull, + 0xfbd7ce482aacaa9aull, 0x72b9c98a49526733ull, 0xc6fce39cf0de5b21ull, + 0xdec8ccc12488e34aull, 0x06a22afcc6663511ull, 0xac4c0dc96b277305ull, + 0x17287bad0bb5d2a1ull, 0x5558ca812be2de14ull, 0xc336cb3e833eff97ull, + 0xc27174a57c57d4eeull, 0x07883dcdc3b84d14ull, 0x1e2880737b682e3eull, + 0xea3c24f7cce65fa1ull, 0xf7a79b2c36378741ull, 0x509a427d8f6eaa35ull, + 0xa75b92d85dcc44b5ull, 0xcd92c8e707952543ull, 0x394a885a2578d984ull, + 0x7c10b51bc8c3f87cull, 0x4a9ccf30874d8a0aull, 0x20d35c070f8dc411ull, + 0x9be5b5a947ce28cfull, 0x3d3815b46a363382ull, 0x96d0a91334762da6ull, + 0xda0abc01ac97bb82ull, 0xf6fdf5cc6cf13038ull, 0x5f50cf158253d008ull, + 0x90227d468b458266ull, 0x8e20f1e78d8a9270ull, 0xa118c4112721ba40ull, + 0xff03807e1f04cfdaull, 0x8f4ddbb1368b09b4ull, 0x16875b21eb4df687ull, + 0x9a67fa94adf9b3e4ull, 0x2d62d1af46e10647ull, 0xf16ac52d3277cc14ull, + 0x498af5278399ce94ull, 0x7c8331d77f0ea378ull, 0x88aba0ce3ae860b6ull, + 0x9eb89e6067eda676ull, 0x9ea7d678648c4b51ull, 0xf75ecb316639d82aull, + 0x702e812e41b3dcd7ull, 0x51e331420e0603f3ull, 0x2e68c150bbe7cbb2ull, + 0x9563e111efc4bb56ull, 0x18e3d536cc403785ull, 0x23c4cb7ffb4eda96ull, + 0xcd67699ec42718beull, 0x5f2edf1c19d96f8dull, 0x5476548f2ae9355bull, + 0x0c73582c763b41bfull, 0xc8fbc00d8f1cce24ull, 0x67d53e7b99b46972ull, + 0xfb9cb0a1a1daf959ull, 0xac88bb81d26ec952ull, 0xddd68f2fcba4dff5ull, + 0x54fdf0d11b449ea9ull, 0x909b59645f948884ull, 0x7f87e2752cc1a843ull, + 0xad5918b8ebeb98c3ull, 0x3d37b711325454dcull, 0x7dd4b3d101937d3cull, + 0x0e0bb3c1a27a4043ull, 0x914747e02cd6b474ull, 0xb9e0bf3fc540ceddull, + 0xff77364ebe60e228ull, 0x85a596b8af8a928bull, 0x09ffe166c084323dull, + 0x67d057a4e1c8c720ull, 0xdc5bdba6858118ecull, 0x44873d296dc112f5ull, + 0xba981d45308acdefull, 0xf934db2476d3352aull, 0x2c0a8967efbca2dcull, + 0xe6d14e39724a4f70ull, 0x2ce336e44bf7eb9dull, 0xd2982e9051b95dccull, + 0xcf0b5b622dac9ee2ull, 0xa264849c906b08d6ull, 0xa7f7e19ca1c9a91eull, + 0xc30b9bea8881b400ull, 0xb708e15e10849fd6ull, 0xa155d76187cb26baull, + 0x8b36e6f0372cb54aull, 0x3dbc8c5db0376501ull, 0xe7c5f606cdd17516ull, + 0xdb4c7f9bf14d1b21ull, 0xb49c817829da5754ull, 0x40b80b8654bec2faull, + 0xb4dfc9b412e506bbull, 0x81f1adfcff9e8e18ull, 0xf9ed1bc4605c4f8cull, + 0xf4061961eb703e45ull, 0xd5e18f16653c6310ull, 0x061b90e488b99b40ull, + 0xc4dec286d84a087full, 0x8ddad10dbfffff64ull, 0x5c11062f4f54220aull, + 0x9741152cf5008e7cull, 0x0cf74728317ff725ull, 0x86935b7cf22f3319ull, + 0x724fb34447e7c8b2ull, 0x018fa15a991acdfbull, 0x2e1f818853f570c1ull}, + DynamicArray{ + 0x54663a370d7de1d8ull, 0xb470842ddc0a0e7cull, 0xff2aa30c858386f4ull, + 0x22bea9975832d466ull, 0xa84a1a09df27baacull, 0xe65ce1a7adccb4e6ull, + 0x2daa54e33c418dc3ull, 0xba18ef5cb60961e8ull, 0xf3c29b90856692a4ull, + 0x7d05962327161722ull, 0x2ca0be55e2f53866ull, 0xf54ec945406004a8ull, + 0xc5aad167f1a8e3e4ull, 0x1415e802eb9160b1ull, 0x430b4e563f2b70bdull, + 0x012fe50691f3bff3ull, 0xc0b1c67fa5082e75ull, 0x36a3d318dc0105daull, + 0xb83f8a5a944f4389ull, 0x9c58cbf63d263215ull, 0x7df31469494d16a9ull, + 0x334167cd5affc83dull, 0x0f20c3f0b0effc5bull, 0xa8f544820dd24c7bull, + 0x900e3f0a574b193dull, 0xad0fffa5d3120492ull, 0x7c465c05fa8de677ull, + 0x6be903a784f39d6dull, 0xc847c4d1d52131dbull, 0xd58eb9e8dba57f70ull, + 0x8672974449b840daull, 0xee9b68e69164d316ull, 0x1c1c07eb889e7572ull, + 0xa36cd67c633bdfc5ull, 0xd8e7151b0a2cb3e6ull, 0x3c59f7d80e1cc8ecull, + 0x12501790e4083336ull, 0x02bccb0f8d086375ull, 0xf8a08627788c93e6ull, + 0xee023887cffc33e2ull, 0x2ee460fb4810aea7ull, 0x859ba9c9c08923cbull, + 0xe88c821b8d6c35daull, 0x8d2e2ef2911d81b8ull, 0x1406e343b74fc214ull, + 0x377673ea4222f5c4ull, 0x226daf28094035ceull, 0x1ad7f699246ce805ull, + 0xfb96b830fac0ab01ull, 0x21ae2e151a9928c8ull, 0x0fd3b0fb21775c61ull, + 0xb419bc7afb23c019ull, 0xb12fd0b1a4e94c44ull, 0x1d7d9918107cc4cfull, + 0x037cf61e0c0fafe6ull, 0x4f411dc35cbf0002ull, 0xa4161c4bf35856f0ull, + 0x9097dcf9e0915fb1ull, 0x04ed2c2c0f4bd140ull, 0xfde804f9222e02fdull, + 0x5da99bbb2939968bull, 0xf932b2028a94c309ull, 0x506a0f98780af3beull, + 0x2e22220e880724adull, 0x31f72eb40634617dull, 0x8343ee344ea0bae6ull, + 0xce1bd18b397364caull, 0xf2a4b96f17f14ea5ull, 0xfe33a44508b6327full, + 0xd09bce965cc9158cull, 0x6648ee9e2629b102ull, 0xdcc88f28b8b84e95ull, + 0xa28be6263420fbe6ull, 0x4d8e7eb416b10691ull, 0x1fd22859961f3754ull, + 0xc0d8bcaea342c30aull, 0x5807d9678609fff5ull, 0x3afb035209f0775dull, + 0x6f7614bc845bd67cull, 0x0f5509014917092aull, 0xa5de51c2e45cd221ull, + 0xf3a8c0607d42fbe6ull, 0x44d952bf328c6008ull, 0x4168da2c3f62bc5aull, + 0x629ef3cc4f42eb08ull, 0xb2f27c921db603b5ull, 0xa6317972606ce86cull, + 0x09462e0ac8fb07a0ull, 0x00cb76f6b78c7306ull, 0x7f788b255715376cull, + 0x77de3f4437db2cb1ull, 0x706adab63b0cb335ull, 0x10771d1537a05958ull, + 0xc946a36733d7065bull, 0x9f16b8aaf3b0d15dull, 0x686c07f52c9cf3e6ull, + 0x092c26b06ed62515ull, 0x917d8fef313bbf20ull, 0x6531279e4d394f81ull, + 0xb39a26b795fa1640ull, 0x1f7b25f4b131ec91ull, 0xd0dbef59c3d34305ull, + 0x2c39d1bbea1b459aull, 0xaf915f0b3bdcb9d6ull, 0xf440fe7a74f23d8eull, + 0xfb8163e0f902cd85ull, 0xdff28642147df281ull, 0x149d4fe0f815464full, + 0x79ee12ecdafb4857ull, 0x5a9a4c6cd99c8f80ull, 0x89456fd30cce7e24ull, + 0x840c415d52485420ull, 0xa2eea7140546eb15ull, 0x67e3816e093548a0ull, + 0x26aefc811db1c739ull, 0x5c45c36d7b0b1c7full, 0xcfe531bc3bd0d01dull, + 0x5340c8169fcf298full, 0x7c7eaf562075e0b5ull, 0xb38eda9fd0e3e471ull, + 0xe579b5bb1827e2d4ull, 0x3ef5a5e88f3a5c49ull, 0x621719bc0d2c411bull, + 0xcb081b06cd2eb0c9ull, 0x9c327bf02f280e1eull, 0x6f28dcbe194c0435ull, + 0x0d40a2e79173efc6ull, 0xc2d3cfd0122c4e22ull, 0x9524e694b9ff7fd4ull, + 0x3a9d79f5a33aad04ull, 0x7ec8846455a2c55full, 0x9c73956512de5d62ull, + 0x79f29f7878eb9b26ull, 0xa58c685a1c91f628ull, 0x9dafc559dc86d3b1ull, + 0x7ae04f742f03442eull, 0x4d7637e3698377a9ull, 0x9aa44b9c34939b62ull, + 0x6271ece54ef2407dull, 0x89e982424c6317e4ull, 0xb107b679e5517564ull, + 0x553c804d13880eb4ull, 0x72476e88f7dd15c5ull, 0x5fccc333fe509b3aull, + 0x41c8f5e4efc02cf2ull, 0x4345a04bbda92b2eull, 0x5b7bc23f4be4db68ull, + 0x021baa5235d76758ull, 0x251fa5fb1dd95a98ull, 0xad639c9fb2f9c1e7ull, + 0x3c2f6fd8e77ee2daull, 0x53bb95be69650e0dull, 0x7b806538744cb208ull, + 0x83aaec99615585f9ull, 0xd4aff1cf0df59c25ull, 0x1328a2d342e1f878ull, + 0x97beed22bf065b0bull, 0xcf5687010bf75d02ull, 0xceba0424e909cfebull, + 0x196aebc0ac319cd2ull, 0xd921dfc80a2bb038ull, 0x1e22d7967fa92dbbull, + 0xebed49adef43e1a4ull, 0x46c9c62434cf239cull, 0x2e5bb18851f8e8f6ull, + 0x5a31be547c787d92ull, 0x77c0cac1529889c0ull, 0xdf2ab2ad73619a3dull, + 0x1244f3c4094036b5ull, 0x0acb4ae0a46145d3ull, 0x11365ac0e28d3869ull, + 0x81e636f79699e293ull, 0xa20a7dd2d9bdd0afull, 0xc367c5d54cd5d88eull, + 0x2593c0b834c722c5ull, 0x5e90bdd58ede0592ull, 0xb1cdcd5e2f74561eull, + 0x69556ec1416eb3a3ull, 0x65ff9cbc2a3278a4ull, 0x46126aa633add5d9ull, + 0x43ace2c3087d5eedull, 0x2666aed02343d155ull, 0x0c73695ccab3c9f9ull, + 0xc62af0ac9e028bafull, 0x00e4138ebe8da85dull, 0x97609f5041e9e5ffull, + 0xce1a4f4b765677a1ull, 0x000fb390d786a735ull, 0xd61b5cfb7fa132a5ull, + 0xa454316d668328f5ull, 0x944b6f1549054106ull, 0x8b4f3946132920ffull, + 0xf0a551a4c5ce4754ull, 0xd19aeffa0d06ec7eull, 0xcf54b310077c91e8ull, + 0x2860f7804e2877e9ull, 0xd4960bca414907deull, 0x8b4a8da69f0fab59ull, + 0xe4138253ba67da46ull, 0x09309f110367d2feull, 0x3a73a6c696e0d017ull, + 0x0c46bacb30b489b6ull, 0xaacb60e17305f8f6ull, 0xe47d29948fbc57e5ull, + 0x7ef17c4bbc6ffe3full, 0x14a1a5c9515fed5cull, 0x1f076f00000b0ccfull, + 0x57ffd39e56ed6e25ull, 0xa4baa0e1185cbda8ull, 0x511b87e1c59a708aull, + 0xb5567c8040434b41ull, 0x1db1b414d9250000ull, 0xf77821129be3a516ull, + 0x969aa93d2b48f487ull, 0x0aaa0e13b43755caull, 0x65e5c3aaa0ba502aull, + 0x16d48cd4b5acc42full, 0xecf121db0be557a1ull, 0xc225e8f4e2ff34d7ull, + 0x09cecb8f5e4ac474ull, 0x783f12325b552c3dull, 0x87d9fbb0cf0491b1ull, + 0xeb6b46b9f13ffd27ull, 0xe340dd37e8f4b15eull, 0x3ab1be5814dacedfull, + 0x325adde0d1a3f5c9ull, 0x64db03501034b8eaull, 0x5d7d6c32baf0519dull, + 0xf5b6ce328f05fd50ull, 0x77cc3a77a1e82cddull, 0xd666027fcb839fbaull, + 0x3c09943edd6f63b2ull, 0xa9a041655e65997dull, 0x3efc03dd37eec25dull, + 0x94aa6ebaaab87758ull, 0x536e6f2156f8fff4ull, 0x20f5aad639ea5fbeull, + 0xfed48b1bec07a0b0ull, 0x9d3d7d0b8131c6e0ull, 0x7794c8769832a94dull, + 0xc89dda96e98e4ea6ull, 0x1a8315a1b5bacc18ull, 0xb6f192595d8380e3ull, + 0x6da3273e70342380ull, 0xd3626ac736f5b906ull, 0xba2eb99ea331322cull, + 0x50edd2d563ae9758ull, 0x5f6d92f9841f9aa3ull, 0x94bf870dddf8af55ull, + 0x4ea120c326145d7bull, 0x5a7a8703c84751beull, 0xa625cf88f493f951ull, + 0x2ff3743863b6e7b7ull, 0xfbb530f0ff48e258ull, 0xbe1fa48e37aae894ull, + 0x4e84e71e7f286a0full, 0x63880f0ca2ffa61dull, 0x674b5c28978c09abull, + 0x9abdc771c3922378ull, 0x7152eba8e8af3dddull, 0x5bd552d661e6fd6bull, + 0xd8d368e880880f45ull, 0x71c9ba0a3d0fa462ull, 0x9b1fec6a42018718ull, + 0xe51e25e41ca02338ull, 0x690a8ebbf3ea0039ull, 0xd473dab4499550b1ull, + 0x5f9ce6ef892c9516ull, 0xa30bdb53340d8239ull, 0x6b0d67dff0ef5b98ull, + 0x0ed90e8b33b05fb4ull, 0x2f3b8c9dc2d2ec50ull, 0x5c5a5012698a4172ull, + 0x2191d5f9999c4a20ull, 0xafd6696dd3094df6ull, 0xa97e38ec29fb6cbfull, + 0x3d2c89f61f106f28ull, 0x8fd7d1ea38535903ull, 0xcd16189cfd4227aaull, + 0x9b6097b38608bd16ull, 0xe6d00d3656bdf0c6ull, 0x6ae041e671917b7dull, + 0x61c5bd9e51cd2098ull, 0x70c3d622ee1e11caull, 0x771516629bc6756eull, + 0x65fa78d6f41e2e0aull, 0x1a2a15f786a00df8ull, 0x552511064eaa75e2ull, + 0xd00956b6f0fa226cull, 0x29a2ed085fbefd7aull, 0xb3dccc57bc0dd621ull, + 0xb4f865f15d984baaull, 0x00f4145d93fa8bb4ull, 0x6944ffc3bfd7ed74ull, + 0x7a60c6eb1e75110bull, 0xed435566368bdf31ull, 0x9b7b5d3ba0134273ull, + 0x228ed2d9dd285628ull, 0x2117b3f7083f2491ull, 0x047c96f67e832c31ull, + 0x99cb5846919590fdull, 0x988cfa6c5517ea50ull, 0xa61d8acb8cac7d65ull, + 0x11858f38896cac24ull, 0xaa23a62c41e1d856ull, 0xad96e467fc57d8f7ull, + 0x0dac4d4b17e928a2ull, 0x81324e9eca705491ull, 0xb198f6ef0cea2dd6ull, + 0x73900847ef269405ull, 0x8e8ccedfa6b22747ull, 0xcdd1f6c86a95f9b6ull}, + DynamicArray{ + 0x3eb9e0c0f49a4e6dull, 0x3dde9d069b5c63ccull, 0x5437a6d2f154a004ull, + 0x9cde72e188e427f5ull, 0x3900830354b076d6ull, 0x547c98ddc7c525dbull, + 0xaa8db6755c40243full, 0x47a506179510c9d7ull, 0x9fd0d5a7aa0e8864ull, + 0x63e71ea334b2900full, 0x115f85867194e7cbull, 0xa9839a60ef6397acull, + 0x4c3344ac961d683cull, 0x1bcb5b8c3ea310f8ull, 0xfd5a36ff38662aefull, + 0x9e1842e58193352bull, 0x3a5347bd27725fe6ull, 0xa48d1c18109e95acull, + 0x6e7bfa668a3ed6b4ull, 0x5b29e426c3d22fa6ull, 0x8b91a0b11b172814ull, + 0x0d8b4c13e9b85f57ull, 0x002dc697c439ef16ull, 0xe2280ed0c874981full, + 0x608535eec91e2327ull, 0x79c8a37092aa4c99ull, 0x456d75a1b8d6e07cull, + 0xf323d8bc83a9be06ull, 0x4e7dc4f858fd96dbull, 0xba52b88c75232b54ull, + 0xf1791cf97d081816ull, 0x12b1bed38f83c163ull, 0xfa233c95f99d5691ull, + 0x4c428b9547c6804cull, 0x9999a0b33a5b3945ull, 0xeecb5a63b656e41dull, + 0x844c7f51df2563b5ull, 0xc62e50574d147c0full, 0xb3226f7cddf3d3c3ull, + 0xf4f4fab40da6b56dull, 0x13ec71de1b9046f9ull, 0x2b9444cd915569b6ull, + 0xe9df3145f8493a8cull, 0x99d985f8fce60d1bull, 0xaa8759df72677f65ull, + 0xa2efc5614c858aa0ull, 0xe1480af1c9aa7022ull, 0xbc8c7e04934146b6ull, + 0x23f4d46e939ba24cull, 0x799df37fce9b3b0dull, 0x3d69b8f8e07fe238ull, + 0x21e4b7bdef8ccf81ull, 0x0a40d43e05fd44ddull, 0xada904f1e4afe1c4ull, + 0xbac10dabb05a02c1ull, 0x6274aa59b4490331ull, 0x9bd5cb55ec32974cull, + 0xab4ce6ae81501007ull, 0x6edf59b6b5a8ebf6ull, 0x9517f94522c44e42ull, + 0xacde22b36750bf49ull, 0x4d92e91009b09ac6ull, 0x30b62fc6c524c3c9ull, + 0xfa3eb5099ec5d5feull, 0xcf969ef31e5656c9ull, 0xcf9e62fa173d22e3ull, + 0x2ac456981c29e4faull, 0xfcea49f892299b7eull, 0x0bca13406d1f9784ull, + 0x8953f4015a67215dull, 0x9194be69b837d16cull, 0x106b5b03afb67acaull, + 0x98c47ba2ec678b4eull, 0x524229ddb5bfcd13ull, 0x8a0f2c21be788332ull, + 0xf59c0169b0199920ull, 0xd569050d6505e562ull, 0x21bc3dad759a392dull, + 0x0dba913801ead05eull, 0x57822905922882cbull, 0x23d5d4d4c49e0bb6ull, + 0xc37d7551f2272c68ull, 0x74a397cb4dd6e46cull, 0x5a640048c20db188ull, + 0xcf453850cdfac6fbull, 0xdd95a25a97cc3b5aull, 0xf5454d68dac340aaull, + 0x66ac944dc0a51a52ull, 0x41ebf1ef0fd100c7ull, 0xe498247e02013554ull, + 0x7644e6a751c41fd5ull, 0xb93044ab8bbace1dull, 0x4a49c87a4f791440ull, + 0x7388dffc0decf38dull, 0x811019ef11d027dcull, 0x4db7d531942a72c3ull, + 0xfdcd8a488846b120ull, 0xef863c8787e22a6cull, 0xb92dba8ea9ba2cf5ull, + 0x54ff63053afe74a8ull, 0x673d7e352318e48cull, 0xf98f4fc834f4948cull, + 0xac97470866a69343ull, 0x32cfb9c9a53fb702ull, 0x9abd26dd046769aeull, + 0xfae5abc29de637d1ull, 0x11ef5d3b9e32a10aull, 0x69fc7bcb607a3e40ull, + 0x57a61b2ffd47fa38ull, 0x56b2e3f787144ed9ull, 0xc713118a04bc35d1ull, + 0x3e7bc11a28eed96cull, 0x6aa8efb1596698a3ull, 0x30feb410eb8c919aull, + 0x5fe34210661484c3ull, 0x96353dfe9944c443ull, 0xc8e23332cf9f98ddull, + 0x4f555b02075f8b1cull, 0xf5cc6107a99e9fb7ull, 0xf2d8596301f625e8ull, + 0x4b29371ef37f3dc8ull, 0xa9a98420b4852b73ull, 0x786b95e177fee513ull, + 0x70072042a3bb2f4full, 0x955669a5f5a76dc8ull, 0xf732dd6f5257d645ull, + 0xd3fbb9a72f7140e1ull, 0xc6664c915df5701bull, 0x1538df0b83780d2eull, + 0x99b49af7d4b34e80ull, 0xe2f3898ccb5706d1ull, 0xc815455c91bad838ull, + 0x14c0be638054c639ull, 0x4161dda626854008ull, 0xdd6a71499b59fd41ull, + 0x9dedd05aba731f9dull, 0x249d03ad327dedb3ull, 0x1b72d4f33d297fc2ull, + 0xdd1361d95e4c1095ull, 0xa1d1a700c469901dull, 0x05c7659cd0cbc579ull, + 0xebfb892ea4496265ull, 0xace78d8786c94ed8ull, 0x725b06f7e088f448ull, + 0x0d46c8f82bb5a99dull, 0x7e4e69a819f14d5aull, 0x377d945ce4ee131cull, + 0x09f9b8c562ffc8d5ull, 0x598f533e876eddb1ull, 0x2e0448df421f203full, + 0xa2fc28bfe03f7a5bull, 0xc3f4fe0f8be48813ull, 0x680ccd88c7d47026ull, + 0xf07739444a557323ull, 0xd9448f7d86032d65ull, 0xc290f26c8bdbca68ull, + 0x90d30a53b119abfcull, 0xd00095d60a0b5350ull, 0x6924798606dc196bull, + 0x8f1d502515f139e2ull, 0x20e101a65f71f4fbull, 0xe768097c60393e96ull, + 0x1200f86d9a155d31ull, 0x5f785072bb4af9f0ull, 0xa1c80bca24da9ecfull, + 0x0fb62d2f76f174dfull, 0xa760ad19f081d646ull, 0x5a11dcf283888992ull, + 0x3aab6a6725297f51ull, 0x6a5d5875328819beull, 0xf612eab37f0adc87ull, + 0xe210e4ead9824d2dull, 0xd560a81330cf7399ull, 0x934b82b4d758be5dull, + 0x293b0603e6988432ull, 0x51efb072a006de3aull, 0xd82233fe7cfff690ull, + 0xdebdc4808f8f8d6full, 0x630ea6a8613aaeb7ull, 0x2b0fc64eac8075cbull, + 0x07858b1a6ffed76bull, 0x96be628251bc5e4cull, 0x5d27576c1298db6dull, + 0x406f7a112757346dull, 0x4b4394477ef33d3eull, 0x8909b7926231a2abull, + 0xdea021e019a79a45ull, 0xfbe60a067454b6f2ull, 0x22b02554ed956bfdull, + 0xf0c8ad0f7f858b24ull, 0xd30f5018e79debdaull, 0x35c47d1902ff956dull, + 0x8194aa54309d09fbull, 0xce4c9e3980e1633aull, 0xb2df2ac3e4618c99ull, + 0xba989265d96612a2ull, 0x8fc4f3a8b65fea7eull, 0xb5adc45e1c2fa7f2ull, + 0x801b022ada478bf8ull, 0x20df1dbec56fe270ull, 0x900bf012c3d4207aull, + 0xf7025bc941e99858ull, 0x47e44feebe63f689ull, 0xa787c4d11e5e3aceull, + 0xcfb9b3826cc62d55ull, 0xb6a2a5b4aa90b1bbull, 0x7bc9244a8818303eull, + 0x10a08aabcce7202eull, 0x075d39a8ba044392ull, 0x987574d4b93d0ee0ull, + 0x6e17be3e4eaa879bull, 0xd8e88d4f36976e09ull, 0xb3a6745dc5948de3ull, + 0x58d50e6a3fb9cfd8ull, 0x40ef06fd96a8724cull, 0x55ca7007079e2bc8ull, + 0xaaa1b1b84626f063ull, 0xd844d4c6cc3f1b23ull, 0x3410c9d355d677f0ull, + 0x99293e2223ef55adull, 0xdc52cf1a19ce3397ull, 0x9e8a72b5320fee48ull, + 0xf18318c466387e76ull, 0x36f1a94841151bb0ull, 0x13d9bca91addbb0cull, + 0x515d246501e655bcull, 0x51bec2b8c29bab4bull, 0xcfe5db92253385fcull, + 0x9653825b48867c9full, 0x2d45994fc399e1b3ull, 0x084141051754c383ull, + 0x8b4b2d87cff7ccb6ull, 0xe2464a5b0bb81aa9ull, 0x18e50d5bb7fcfb57ull, + 0x2ca8a7d328dca316ull, 0xcf50d4731d8860d8ull, 0xecf98d8088be3424ull, + 0x1f268b0cf09a0af6ull, 0xde22387eff51b667ull, 0xf9dc2a8a79632835ull, + 0x94f98fc8ff0b4270ull, 0x0def4a4e21938a48ull, 0x766cb513b4b88b2dull, + 0x9348f2afe6424910ull, 0xfdd16975dbdd3252ull, 0x31c3a3635c2caf3dull, + 0xb94bcd4db651d466ull, 0xb0b7cee677ba40adull, 0x323433ae128aff9bull, + 0x703f5f397881634aull, 0x805c07bc6ed20543ull, 0x467d1e850635b127ull, + 0x404a1eabf5bbd34full, 0x68829c028962cd9eull, 0xbd2fc52791670235ull, + 0xa1fcfa6796b36f32ull, 0xf1ae401f0def29afull, 0x825be6d0d3a95e07ull, + 0x2aea91538aa7b9b9ull, 0x1b70a98400cd66f0ull, 0x02c827730480fe89ull, + 0xe5e6b55a647f6a8aull, 0x2b4c0f04080538aeull, 0xcacf1461a0c5bbe0ull, + 0x32b2622e37a61a57ull, 0xb579e6a700e134cfull, 0xa31969e8ba096728ull, + 0x36e985cd053e2f23ull, 0x13e9c11e04cb2aa4ull, 0x78573962e1b7a27eull, + 0x4c70124f51e99970ull, 0x7b72e7d16454ba25ull, 0x6bb0d496b01eabe0ull, + 0x20c3e3a9ac8e6f2aull, 0xd1b3fe7776e9f6abull, 0xac545248e91571deull, + 0xfcf37879d1804a88ull, 0xfafff01b2ed9c848ull, 0xf71645638a664ee1ull, + 0x3c48344218070f36ull, 0xee6fa69f81ee44d2ull, 0x6cb88f4a1e7c34d5ull, + 0x3dda450d750ba673ull, 0xa021fa4588e68167ull, 0x89fb69f7f4c118bbull, + 0x992c80a356331fddull, 0x6e849aa80f138cd3ull, 0xadcb62d18e183d72ull, + 0x12c9c55ed0828d08ull, 0x324cd6fcf2cad1f3ull, 0x7c936b610b2b3167ull, + 0xad226ff629c55593ull, 0x26d93a372a83abdfull, 0x3c8596b900572d0cull, + 0x6bf19dce7f43489eull, 0x6538f05b88fd8eadull, 0xf83c8df7786b3ccfull, + 0x190d62b24b493c14ull, 0x2eb13e1a94caba8aull, 0x0bfa6ae8f5f3ede0ull, + 0xed049c0aa3e3d7b8ull, 0xa52d4cd1dd83a6a3ull, 0x9b8d235283f1d1a7ull, + 0x99b7259f0bbb5d0eull, 0x001c5ef567b99441ull, 0xd22298adb03d63d3ull, + 0x3d5a0ebce8422209ull, 0x4a6a75bdc9bd2982ull, 0x3bddabce9226e750ull, + 0x34a4112b53dd6773ull, 0xbd2592b5ba67b4baull, 0x8379a3602a81b4eeull}, + DynamicArray{ + 0x884f948fbf561602ull, 0x86728d801e511e86ull, 0x57157c66c26c85a6ull, + 0x5e81e555082a9a82ull, 0x80c6408abfa5f535ull, 0x97d3a46a218c13c4ull, + 0x4a230e36caae2d27ull, 0x4868aafa18affddfull, 0xa6805ae23a6ef1a6ull, + 0xa8bd87e9ae585c87ull, 0xd495bb44e31c7139ull, 0xef60c36c4480a2edull, + 0x1d68b3547ecbf49dull, 0x6f24ccbc34ec3c9eull, 0xf1f7473ea9e2658full, + 0x3779a6ead9258125ull, 0x777df07db39fb6bbull, 0x25e8fbbdce4232e7ull, + 0x18bac7c41d7c68f1ull, 0x6873f3b528b23938ull, 0x72fd2cf053bc2519ull, + 0xf3804845d64cb253ull, 0x0c2d7cf5424c2361ull, 0xa6f5e9fb6ce3a931ull, + 0x3d13650a73ef8733ull, 0xe5e9dde82bc298a5ull, 0x15318034f6e99127ull, + 0xc877aad5eb33b86bull, 0x8541cd3a445c264bull, 0x32dc7381a91b5636ull, + 0xc88a0c66e0b4ad03ull, 0x87ec75c60ae23438ull, 0x120bfab5df8f4632ull, + 0xd6fa5da9c3caf169ull, 0xb26a5d20f2fe0b2eull, 0x49eeda9227097387ull, + 0xfc59867897ca85f3ull, 0xe9ec420230999ab1ull, 0xf7a17d9ae8a19643ull, + 0x9360043d6e02310eull, 0x30bab6b392f4b613ull, 0xf7990d61d4323f47ull, + 0xc2f984096c545652ull, 0x12e382a1e2ddf14eull, 0xce0b4ad88a4b816eull, + 0x4c227d95e94d8097ull, 0xe09e91c573c09155ull, 0x9a2e7ba617e5b349ull, + 0x319bf5de589d876dull, 0x561aafd7e808c8d9ull, 0x12c10a9e769ffc0aull, + 0xf27d11ad4abadce2ull, 0xb4bba5fbc79720b8ull, 0x66408a578d8a1ab8ull, + 0x23bc67001fa306ceull, 0xfd502c2cdaa0a121ull, 0xda721305affa5d58ull, + 0xe1dcf936a060e5a9ull, 0x6a1ab749f9bbc95dull, 0xcbe449e9c865f60eull, + 0x7e7dae5754d2688dull, 0xe72687de905ce357ull, 0xe7016779b041daa5ull, + 0xf52f9a637ce5e854ull, 0x36a887758650a25aull, 0x59d8063bc0b3ecb9ull, + 0x4e38f0065450c667ull, 0x75bac3c5cd84f5deull, 0xe6150187a2b81a57ull, + 0x63f527eb48327ccfull, 0x934e6627ed498597ull, 0x948ec7bd07c73366ull, + 0xdb254f6845db4c6eull, 0x93820e413b721d0cull, 0x97367d0c8bf7c973ull, + 0x22e00bb7667ef903ull, 0xd495f62387ee6795ull, 0x8bbce995bd25777eull, + 0x4c3bb86a36407499ull, 0xc96a7d8d2278f81cull, 0x19252c1ad544b35bull, + 0xaf51969887c04f2bull, 0x2cb817e867708a1dull, 0xa0b6ed698ce46e08ull, + 0xfe5ad69356949ca3ull, 0x9c1f0ea20f3a479aull, 0x93feaa014cb3d42eull, + 0xd2a3963e92daa7cfull, 0x513694a6c0d92775ull, 0xdfb1418af8c5d8a2ull, + 0x23426bb6a2e6bc7bull, 0x625b7a099fb05874ull, 0xfb9963902d2e833cull, + 0xfe2e78496a991e31ull, 0x62c43fdf077b0797ull, 0x66d1cd86afc1e3f5ull, + 0xde95965f5a7d5007ull, 0xba31f27e03a41745ull, 0x6515fcb488de65d4ull, + 0xbb77f3172c492529ull, 0x53f257e624513878ull, 0x63de18d562930373ull, + 0xd36b57053efee347ull, 0x49934a501b4e3545ull, 0x343cfe88df9f45d7ull, + 0x84a945867b8ff9d7ull, 0x547437afc7b16552ull, 0xcb402c63cbe5fd47ull, + 0xe8be8ef464381d1full, 0x0fbabf42bf6b7c0bull, 0xa9462d9af432c3c8ull, + 0x6af342204d629d86ull, 0x3cd1b1695a4ef66cull, 0xf79eb3b8fcbe6a7aull, + 0x17f9e166cd86c7faull, 0x925fad3b602506a6ull, 0x773f851db89b2d37ull, + 0xc128969d2e94c0f2ull, 0xe2ec4db34bb9c2e7ull, 0xc36e63b06f62d238ull, + 0xe00f8ea1d95dae14ull, 0x1cc3f167e92929eeull, 0x5b56450c07dfc1b2ull, + 0xb41f16c6075f7f35ull, 0xb7b8e252206d25bdull, 0xdfad5112953be26full, + 0xcb1f539b4f905bceull, 0x269dd1d6b09f8f71ull, 0xe6257261580ecc54ull, + 0x16c52613d57e412bull, 0xc8152e61ed166bd3ull, 0xa05bb76c6d31327dull, + 0xaf3615d8fd27f25dull, 0x0f3d61d48578f27full, 0xaffc47bfc6e9e76eull, + 0x575b5097a1b34ba1ull, 0x00f01d2221013fe1ull, 0x6ec77d08dcdf261cull, + 0x11bf81154792be68ull, 0x85f8f72151287413ull, 0x060e231f88bc0343ull, + 0xbdac1a1729b93a7dull, 0x581e3bce5b2a7510ull, 0x9b2c7e9f92990298ull, + 0x986c53d3b17c2816ull, 0x83025cdec8174189ull, 0x92a1a0a5e8bcd883ull, + 0xb079a24aaa2a62fbull, 0xe8eb68b51f107395ull, 0x507e7d2cc2cbbd76ull, + 0x76262a191e50eee0ull, 0x74d77171d65916eeull, 0x196fdfaa1b518e07ull, + 0x1e95349b49420182ull, 0x6fb2e26c46b3a378ull, 0x4c9aa0c007b1ad46ull, + 0xeba0ad1acd5e027full, 0xe319afe1c863f0f7ull, 0x9dbe3cb29c4d1bf7ull, + 0x65734e00ee4a3e93ull, 0x9a7e83faec34f1a4ull, 0xecaf2c36932c89d3ull, + 0x47ad0058dbb7b717ull, 0x4e2a0696fdc44e7bull, 0x06e67259a5f67664ull, + 0x7afb19b44152ff50ull, 0x669dbfc0ae483ff5ull, 0x55951202edb57fd3ull, + 0x4ff0a2063544c277ull, 0x2cca61c8e8608545ull, 0xf5bf6e0625b5d681ull, + 0x99cc5066a30bea27ull, 0x2a34166a713e04ceull, 0x7032e2f637f3645dull, + 0xd945a395183bbc84ull, 0x2f25ca4407e7c588ull, 0xbb88ea7b6e439f00ull, + 0xaff476b82711d1f5ull, 0x90167b92df27adc0ull, 0x077fe6356184e675ull, + 0x979b121df52606fdull, 0x3fbdb72997806737ull, 0xef0d6ff267c4f778ull, + 0x65923db874c58fb2ull, 0x68826a891bf29db7ull, 0x4ecc5b6b135dfa05ull, + 0xee9d26c0f86b9148ull, 0x02a7423720b1d69eull, 0x2f011fdee0e13950ull, + 0x0b631ec703a60723ull, 0x118096bc3bfa152full, 0x9f2d152be2cf66d0ull, + 0x81174266d9272bfaull, 0xaf2f7d9def67179aull, 0x8a5c963fbbf76f9cull, + 0x972dd1383699d073ull, 0x59701b5f6e3bc8c7ull, 0xc7107245102481a4ull, + 0xa980693dce8d0dfeull, 0xf81aa5c66d143fdaull, 0xf7b21e13161be0d4ull, + 0x44bbf53096a741caull, 0xa4b73568a2e3b66eull, 0x2a0ab72b3753df4cull, + 0x677545af626f25bcull, 0x66602b840c7555b5ull, 0xf347fdaf41f238e2ull, + 0xdbd36586118e2b1cull, 0x3e4131a69f964cfaull, 0xe9942fb58e53051dull, + 0x37d2592c7da2c902ull, 0x97c3c1901572da52ull, 0x5d87e3defb949449ull, + 0x389a0d63b8bce535ull, 0xb737059ab81abba4ull, 0x57a758978132a4e7ull, + 0x101f62ca9109ff2bull, 0xa890ac3c869fa720ull, 0x91d1dbafcd6d3351ull, + 0x0241892ae1614036ull, 0xa28291f323f1a904ull, 0x9cbbdf13d7f33aceull, + 0xb1e232b62880dbe4ull, 0x2b048d7e78db9d44ull, 0x1644ebf180db8cfeull, + 0x9ce6dbda3b6dc219ull, 0x792bf70e52af22b5ull, 0xaab3d25068026182ull, + 0x201d313c5b75c615ull, 0xfb2ee741b5db2935ull, 0xf67fbe238f4f9a53ull, + 0x5ea0da0a50aa1631ull, 0x100a581b33240326ull, 0x9fe93a3cbccbd91cull, + 0xa36418b03854f8e7ull, 0xb50e391d035b9af8ull, 0x93d9780acd54e515ull, + 0xa2a97ace3ea712e7ull, 0x8ae3689bf59c6816ull, 0xe97e46ed4900e464ull, + 0x5a0c16766036d5b4ull, 0xcb15a5c3784f771cull, 0x1f7cb3ab43e343efull, + 0xd4f3febc9c865fefull, 0xdc63d70e82f13478ull, 0x1c7ff5caac7827daull, + 0x171b93b8677bdc2dull, 0x754cd1d8efd44e27ull, 0xda2763fbf57a0112ull, + 0x2f00f3fe05676262ull, 0x6cd25ddd81b15af2ull, 0x35bc360e921a4207ull, + 0x68b43515014e9a42ull, 0xcf762c93e5ce0102ull, 0xb2128b0141106a8dull, + 0x0152555986ca5a37ull, 0x8875e8a836a91d38ull, 0xd7d1da514b35e836ull, + 0xf46c292402f15debull, 0x44e8ab011e996241ull, 0x84f27fff2a614061ull, + 0x54e8babaeada1c15ull, 0xa28f021f82096d10ull, 0xaedeaaa67b151711ull, + 0x9554dd230fcd6e57ull, 0xed450a339808d287ull, 0x8e0c359657bf13c0ull, + 0x06c621cab794343full, 0xae1a8296eba04fa5ull, 0xbd7b6db26b666123ull, + 0x85d9ac60a39650c7ull, 0x61913a253a7631a4ull, 0x12bd6e0b63bda20full, + 0xd96dc1d840d1a017ull, 0x079baadf5f3d038full, 0x68bdb0a2b4b29c55ull, + 0x9141b9b51f6f27bbull, 0x8827f4a3bf093c97ull, 0x873b71f6c7ade943ull, + 0x8547eac91943c14dull, 0x4d60cb23adca72feull, 0xaefbc6eafbcc1890ull, + 0xa953e4beef7b7243ull, 0x8fa59bb4aeaa47a2ull, 0x1f31d818e803686bull, + 0x1625ddbde7b81db9ull, 0xbc6c2495adfc5742ull, 0x4033473e149f6f3dull, + 0x31d9a40b7ac7ab30ull, 0xc8f4ae8ff82294c0ull, 0x9a42242279632600ull, + 0xfa21b4a47f3c2189ull, 0xc051836e132d65e8ull, 0x09611538198ed105ull, + 0xf52d3131c57c2d5full, 0x8d6782d13237eefbull, 0x6f0bd839ff345f75ull, + 0x77084b40da5edd10ull, 0xffaf970a6ac47cfaull, 0x73a69e944fa056dbull, + 0x40d51546ec3921d9ull, 0x2122b74ab688aab9ull, 0x10177bc9adb2d1e6ull, + 0x2abd51380de56e9cull, 0xd230c315be4f699full, 0x611a67b63e6536c9ull, + 0x49877530177bbce1ull, 0xaef64a3fed98a16eull, 0xd3c7c0f600b0ad87ull, + 0xd8341900df41ce30ull, 0xd2caacf9ed1eda97ull, 0xb4453dafd5470afcull}, + DynamicArray{ + 0x85d13b523bae74d1ull, 0x9227c437dc2e0208ull, 0xe71acf4e6f66ccb0ull, + 0xbb599c4e2a094192ull, 0x26731ea93b4336caull, 0xabc211dba93f4d84ull, + 0x8212ba8e161096edull, 0x52481b36a3fa3393ull, 0x0be20d7c8b67f9a5ull, + 0x005c2efc0d58670bull, 0xfd5c1dc0a44aea77ull, 0x8a13ca68ddc6eb3cull, + 0xfe079dcdc6394adeull, 0xa218407ec70b7a31ull, 0x4e1bab2a2be4dff2ull, + 0x01f5b7c5d19a0e34ull, 0xcd2d96276843a9d1ull, 0xdceb85eba4d4cddeull, + 0x6774046b70109114ull, 0xf8ea04b5a3c66133ull, 0x0b6d4d81b0b3620bull, + 0x610ec95b743f6a6cull, 0x3d0afa9ea0d67a7aull, 0xc0ecbb3a1e6462e1ull, + 0xa20f7cf165fccd27ull, 0x143126276f7e81acull, 0x193ff0a464326fc2ull, + 0x82597f25731e820dull, 0xeb002180008afa13ull, 0xff9dc927dd9105b7ull, + 0x28721da6cb29eca3ull, 0x8c644d3a33484376ull, 0xbc1d87f54eb5ac3dull, + 0xf7f45fd7ab3fc091ull, 0x09abd6584afd80c3ull, 0x568b017cc18b680cull, + 0x3d29acd6fc8e69cfull, 0x25722fe1a6b3ce31ull, 0xaa406367186483fcull, + 0x4530648d981a26f0ull, 0x88eff3beab45a782ull, 0xbec1400ade4952ceull, + 0x80af7d35d5cb579cull, 0xa87aaa419568e9efull, 0x13ab0ca9e3f470abull, + 0x8bed340ad661f0dcull, 0xb6a2053ac1f73b00ull, 0xa59db5deed53810cull, + 0xdffc50fa7d2c2762ull, 0xa89692af9f37f01eull, 0x137917305fb8dd77ull, + 0x0d1fd2c2674235dbull, 0x67d64686eed8e5d4ull, 0x784d9c436ad57b47ull, + 0xc0bae81a68a0225dull, 0x1a1863f28a6cae05ull, 0x0b980e5ee8ff1b3full, + 0xe6044ea1a0991a26ull, 0xbff9104c9408d28dull, 0xe43d640a1f66e7daull, + 0x5b59dda70a83e797ull, 0xd2f7c17c1086cc9full, 0x2770263a6d416629ull, + 0x26a3b38850f5034dull, 0x60d42b5b5caff141ull, 0xaa4f15140f7a260aull, + 0x633570901653f254ull, 0x8d81d458f6b7067eull, 0x4de136d5d2322aafull, + 0xd7df5710d4f17672ull, 0x8fc52199bdbae0f0ull, 0xa9faf259b13ac1acull, + 0xcf86b35b5f848710ull, 0x2a25be31432344a7ull, 0x8fe7f45fb6ad8d41ull, + 0x3ac744f2c38ae787ull, 0x6f04b1c4ddbb4acaull, 0x680fd2295c2ae719ull, + 0xbabc4913dec33626ull, 0xcbf74e1eb98d9e5dull, 0xe43989d5aa12ffebull, + 0x711118921cfb86a1ull, 0x1f41c99d64c4d287ull, 0x4f262194c1c33e4cull, + 0x46478af8a53e9b3bull, 0x9040666a64b8df69ull, 0xa6edaa0c16b65081ull, + 0x7c776df412037356ull, 0x99e1bfe1ec984e06ull, 0xbb77fdb4986a3c5bull, + 0xc2208bdcf08372baull, 0x42fc379e305db4e3ull, 0xfd81255c0bc7eca7ull, + 0xaf2a672c8c143823ull, 0xb592f425670470d9ull, 0x207ada0601baa9f6ull, + 0xe18411a0456b34d7ull, 0xee213161de7fa48bull, 0x967d2409894f97f4ull, + 0x84db7852b9cefdafull, 0xdf787c074b845db6ull, 0x2d39baeef036a841ull, + 0x32e4eaeff20b1f11ull, 0xdc642a6fe0a1f2caull, 0xdd11be34f9f88601ull, + 0xd28fc8409d5b09b9ull, 0xc63a7aaa7d184bf4ull, 0xfa5a4fd1be1c4bb1ull, + 0xff55025d2cceb308ull, 0xc3a7e0c630fa441cull, 0xa444ca5bbd6b780cull, + 0x1ba416e5acf327adull, 0x62c8957242e38567ull, 0xe9affee28a8bfd71ull, + 0x968c0ccc19e9be7full, 0xe4cab60fd0d99f94ull, 0x2d17e0ecdfff674aull, + 0xcfccba21748f8c31ull, 0x5f246ae16cae3cd7ull, 0xe5be3ef942294af2ull, + 0x1ed1d1d31e4a34fbull, 0x7c778224a84679e0ull, 0xee4e211e0641be25ull, + 0xca33bee9ae4f2e13ull, 0xf9f6869ee903bc55ull, 0xed655d940ce97e1aull, + 0xb1a4be968c4c3454ull, 0xbe9743a57624e571ull, 0xd3f4bf3d7d7da001ull, + 0x021941a21603f110ull, 0x36197750800e7b8aull, 0xd1019a91525a5551ull, + 0x089b4b35e0d2daa3ull, 0x34c472b9344346baull, 0xc07bb924b180c808ull, + 0x1870190051a4104eull, 0x701f98b32de5280dull, 0x752813b239c0b59cull, + 0x0d9aeb86fa9759b1ull, 0x2ec12966006893c3ull, 0xf84a472f9867ce60ull, + 0x513ef087dacc1d0cull, 0x661ab4cf35919bf3ull, 0x202b090bce852d8bull, + 0x61b0b245647919c1ull, 0x98afac986aeff4b4ull, 0x27794d669633d227ull, + 0xf5c87c6d0fc2a166ull, 0x8f5756b6f103f0baull, 0x8345dd6e7f9cfb98ull, + 0x03ed3c540d6eee86ull, 0xd82c26d6aeff2bb1ull, 0x5f18b54213248b8dull, + 0xbaf856301e3dcd93ull, 0x3e8cb692ce28a09dull, 0xdc386bd5e7ff3e20ull, + 0x65e58e7da691c9c8ull, 0xb7771431a1cf4df0ull, 0x867750c6251a2fccull, + 0xafb38963770e1593ull, 0xf1c6f05baaf94cb9ull, 0x2653fb3957bafed4ull, + 0x7e213ed8ae266228ull, 0xe2273108545dac2full, 0xdde11287a055bc13ull, + 0x6a7335b87ff9ddb7ull, 0xa4ddbbf10f79fc2dull, 0xc9595f22cf8e4b43ull, + 0x8e737c4613677da5ull, 0x0aee2d4181b58566ull, 0x492ded6ec078272eull, + 0x1def11e9383bc2abull, 0x6d2ba742386ff344ull, 0xaeaf7a622f676bd0ull, + 0xcd988c0f7d5c557cull, 0x9e7a519209bb4422ull, 0xecd6d9fd4aa0f045ull, + 0xb5da94efa222e702ull, 0x6478723b5667e466ull, 0x9f0884f5803eaafbull, + 0xea50d60d84c60381ull, 0x31954b27671526f4ull, 0xd2cef89c5fe9f478ull, + 0xca31fc21989dcc9aull, 0x63f3a55593d2d9f9ull, 0x18376d7c137426cdull, + 0xe984fcb76c7d961bull, 0x43e8fac5bae1fd85ull, 0x0e3854db79b919b6ull, + 0xe1f78bd0b34526f7ull, 0x72509fb5bd31bc74ull, 0x0c25104479d8aa60ull, + 0xf2bb34ab29baf75cull, 0xf700d12d2c6fe613ull, 0x3c1a1563a3d5e17bull, + 0xb01a90c6762c07a8ull, 0x395da43737ed9622ull, 0xe69887ac646ef78cull, + 0x528fdf42b4bb0269ull, 0x274d8a969918ca07ull, 0x3458c342951eb1d5ull, + 0x07112b051764e663ull, 0x3b70fc18c922484bull, 0xe24ed3121a5dce0bull, + 0x641fed56afc93066ull, 0x2633a3bc2c770a56ull, 0x56d5dbd4f30e35dfull, + 0xa4617460dc3c9035ull, 0x650383d9b7e2b3baull, 0x2700676afdbdcb45ull, + 0x3b296012b001cb4full, 0xda4370d01ba2e664ull, 0x92e5ae1bd7c1d697ull, + 0x8c7386d05d0dce09ull, 0xd5c7ef66d25a6b37ull, 0xe7a7911054ea1904ull, + 0xd3235f08139f100aull, 0x1924296d91fc1f57ull, 0xab9d0f92806a2c5eull, + 0xcf7472d104ca3935ull, 0x47407c9d086dad9cull, 0x4618b6ff1ba99ed4ull, + 0xfe74455e822aea4full, 0xf547248d1ddd0d70ull, 0x482cac6f03c8d643ull, + 0x2479b7a2db0a0c79ull, 0x97e3e92cde39f6ccull, 0x617407a0cb2ac937ull, + 0xca822a23272901c2ull, 0xc3c1af5b31f722feull, 0x729a30eb095ffcddull, + 0x3ae2039106337312ull, 0x28bc43db675f237eull, 0x693fc8f13af6a840ull, + 0xaf05146c8f8af18eull, 0x03aa11b1736580c3ull, 0x2f7868f3d5373271ull, + 0xa257063438dbb93bull, 0x7ee5dce458063743ull, 0xe6318a84f590c4a6ull, + 0x59ae8dda87407f15ull, 0x5918d677a3dcddffull, 0x3518dad7ecc92f6aull, + 0xb40d312abde2052full, 0x1a313058cac74df4ull, 0xbd1108a642eef2efull, + 0x50d2bfd977714955ull, 0x5ae56c37fe67fee0ull, 0xfcec6e4e675c864bull, + 0x50bc022d5d952653ull, 0xb9028c26e0a69067ull, 0xa56c13270ca9be97ull, + 0x1017369d7ea172faull, 0x7d810357d19b58f2ull, 0x3d30e96d9a7069e5ull, + 0x6b39c661628e3880ull, 0x1a294ee0b7b783b6ull, 0x056da7cba55b133cull, + 0xa181ea938bbd5bf1ull, 0x53f88943a4f0d400ull, 0x340f0107f41c7541ull, + 0x2af74b1e0be739a9ull, 0xc7ace194a1c67bf8ull, 0x286c511994329abaull, + 0x574d509b99fa22f3ull, 0xd2936e5c2d385c6bull, 0xdf0b1cae2ae4fec2ull, + 0x04a1bc62cc81b5c8ull, 0x5b6840b0db5664b7ull, 0x04b9caa62d93cf81ull, + 0x2089dfef3195061full, 0x44111d7948b257beull, 0xfd07a4a3c7f823d8ull, + 0x3726ee51ee58918bull, 0xc775531335c1f836ull, 0x859c9812fb5f7d7aull, + 0xc234d1e9ea520c32ull, 0x95d09c9ff2ba274dull, 0x140d2bb88f5d52f5ull, + 0xaa19c953ce4cc2d1ull, 0x3c379a80c71292a1ull, 0x563f4d72bb59c63bull, + 0xe33cbbfc8a490828ull, 0x8480f261a52befb7ull, 0xcc7562d13348b936ull, + 0xb5be13eb1eb3ceb2ull, 0x8e20915c7673fe0bull, 0x38852e17fb152268ull, + 0x693b7b68b82818ddull, 0x78610bd9e3fafa00ull, 0x227eb330ea7861baull, + 0x946c10875ff4fc69ull, 0xd2c28c54980b187dull, 0xb1d39d3ea28dc1d2ull, + 0xdaf2a060d1c69392ull, 0x765b399ca8d2ed53ull, 0x4ae45f302e606d34ull, + 0x7443efb5032e6e51ull, 0x3e1f0003e8193cbfull, 0x9a9ecbd2359a662aull, + 0x2cfbff7efd0720d7ull, 0xfa2e8c13bdd8e85dull, 0xe4d0ac3b81efd043ull, + 0x100d1cea10f460ceull, 0x7fa04319df029c9dull, 0x62e62abdcbccc914ull, + 0x215830f51dde4786ull, 0x9fc2bc567f372765ull, 0x7648e50a9e233c3eull, + 0xa89ee0d883d9c99aull, 0xc9f63a6e4f81de5eull, 0x1b58b8dc89baf2a5ull}, + DynamicArray{ + 0x31edd67c952c56b2ull, 0xe5a0cc239e7b37a6ull, 0x7e7580bd69aec825ull, + 0x2600d726336bc51aull, 0xd78d33c6ee410f5dull, 0x705dc954108f76d4ull, + 0x6ebb77ecabc23836ull, 0x8047a824005cce43ull, 0x29b21ecbd0a18fa1ull, + 0xde2bb3c9781176ccull, 0x7af2c448a5a85f3full, 0xdf1ca5f825b9ea18ull, + 0x2351301d624dfe0aull, 0xb823abba8a4cdef7ull, 0xeffe13b11c660b53ull, + 0x21f25016e3a82598ull, 0xcfc1b5034b81123bull, 0x1a0d02290254ba03ull, + 0x3d494eeafc97741cull, 0xf27d3d6113be8685ull, 0x2b45cc50f4b582aaull, + 0x26697f99e7c0aa97ull, 0xe1894f450548e7b3ull, 0xa1d0822ffac716ffull, + 0x1e3812e709839327ull, 0xf51118a3408bd7cfull, 0xc9cd9fd799d19921ull, + 0x2bb279b55b7bf304ull, 0xfa2ee251affcc968ull, 0x2a6c12fcb2e611f3ull, + 0x02dc0d93f3841f8dull, 0x04753f969606be2cull, 0xac35247553bf5895ull, + 0x3faa980a2e114020ull, 0x0bf5f24d20f40a42ull, 0x927949055afb9fd7ull, + 0xcbf3a7f805d033cfull, 0x6f9684b10d03bc1full, 0x2580978b1ab43c10ull, + 0x458647d0b49d4170ull, 0xace17d04a29cc643ull, 0xa410cdcdcd89420dull, + 0x783dae06d9eeb824ull, 0xf0c8e008bdf5af77ull, 0xa7410930149c111full, + 0x0687c49a5300f551ull, 0x65bf5482f96b6ffdull, 0x9e7a9374c41f8d53ull, + 0x80b9662dab7942f2ull, 0xf6c5e35aef413691ull, 0xb8568bd7d063b23aull, + 0xbdc07870f7b6770cull, 0xc9accc736145fa11ull, 0x16c64b301621be3dull, + 0xf6402c606d1cc915ull, 0x249c2f05e69ea04full, 0x03ff42aee6a18db9ull, + 0x2053d220ca9e0a7eull, 0xeb466e8662e6fab2ull, 0xf9f1a9f713a78cf5ull, + 0xf9cc4dedf3c225e2ull, 0x142f98894044a771ull, 0xd5a8c1d2754446aeull, + 0x175c61ccf998a88eull, 0x6ae2acb0e3cd192eull, 0xc206eae9eb352a08ull, + 0x7a4f73843d6c3f58ull, 0xfbaa3b15b658b86bull, 0x5586d7fb0c18f75aull, + 0x0e605f9e99a5b600ull, 0x5932be7ff8cdf95aull, 0xbd2ebb9782d63302ull, + 0xc9ee00aa71df578bull, 0x4aa13b1cc31ab884ull, 0xc57f1bdba1c68de7ull, + 0x560ca165286799aeull, 0x5325b86fe5ec7b61ull, 0xe9890d10b5945ebaull, + 0xbe1cd68b923ba9faull, 0x4a376c327f52e5acull, 0x56f260633d3e12f2ull, + 0x9a0eae6d576ded28ull, 0x280090049de66325ull, 0x481b17ff03a8f309ull, + 0x29a20608513697a6ull, 0xaf0b0482b6ee7a90ull, 0xb8a86d0518e50dcaull, + 0xb12ca9cf7c327a62ull, 0x2f379a79a2e15458ull, 0x5b9c2ecbb6cde0a3ull, + 0x8c998b92145f0adfull, 0x7bf5d18b9497c06eull, 0x9d6ef4f96904dc2cull, + 0x078cd1c5bea5962bull, 0xd524efa4c5edf046ull, 0x89488b51f816aea3ull, + 0x9f873af17790b9bdull, 0xcf451d9fcf6fb7bfull, 0x0f0142283d99448full, + 0xb9c8efa5875d40fdull, 0x666d0453ec902cb3ull, 0x88e6f8cf8ec887dbull, + 0x1fdd6fa6b23a2a16ull, 0xdcac8de0bfee069aull, 0x2eedb24877af872full, + 0xf792901f7c3d9923ull, 0x1062839007a13cb5ull, 0x15c027b47a150ce8ull, + 0x0a7101d7cd59a595ull, 0x1aaf1917305e7293ull, 0x98dfcff49bc40840ull, + 0xf67110993e655d0eull, 0xd61041f079887e39ull, 0xa0671cc318b4858dull, + 0x9bf61c107660e454ull, 0xb85bd85b311c50a6ull, 0xcd3a63c3586f3a3full, + 0xc2e43a11faf63324ull, 0x082a8bca4726e58eull, 0xcf3e27b4792cc74full, + 0xcaf420acaee2d27aull, 0x691298bee69c2ae4ull, 0xec6ad9754b685001ull, + 0xbc61999f07a6be7dull, 0x3274f346c00b26ebull, 0xa2b7106fa909c806ull, + 0x6dbc3f37a22e091bull, 0xa4283401f4a66a7eull, 0x52552dc81f1497f9ull, + 0x52d3b2fe38eb93e1ull, 0x7224eb92c9e3e496ull, 0xa9360de3be7ccfb8ull, + 0x9a93512429543309ull, 0xa385a8438cddaa9eull, 0xeb773fb198a849eeull, + 0x72b429a68b8eeb9bull, 0x7623677bfa1cb660ull, 0x55a6cf1d5ca116ffull, + 0x9412f62cc5914aa0ull, 0x749d2b7f78b6bd4full, 0xb2c45c20bebb1ef3ull, + 0x0a1693e82e59c80cull, 0x13d36a302c1b91fdull, 0x0d22959f2000e04bull, + 0x81d0fb299c3e540dull, 0x2d2cf664ae15a40cull, 0x7a21b359462afa7eull, + 0x9f266d7542a4b70dull, 0xe46c6e493fb9aa36ull, 0xf54e0e4e359bccc5ull, + 0x8f42d6868507ae05ull, 0x1a85de21706243b8ull, 0xf550c393b93c5acaull, + 0x14e38e51c7264fdcull, 0xf0894f54269cf580ull, 0x7d6adad9aef987d7ull, + 0xa0b262a1d6e6ded6ull, 0x3baec4f531da5cbeull, 0x47605f95f8076642ull, + 0x3eb41c16d8968e7cull, 0xf766f66351674a15ull, 0x879c5edf23178a35ull, + 0x536c689e9d7f4b44ull, 0xbac4cc5ab27ea649ull, 0x60c903b00dbeb511ull, + 0xcef59b92421ef83dull, 0xa0fd6b8aa7c8397cull, 0x85ca914b53444b0bull, + 0x1a750665ad3a3b91ull, 0x17138393e6ec7bd6ull, 0x30532b4840bb1497ull, + 0x71bb9d1d826a4440ull, 0x9a6359be5293ed3cull, 0xab9fb07db92278efull, + 0xc04806851951dc85ull, 0x56560028a60d230cull, 0x9c6662271dce9f06ull, + 0xb8c70936ef52b857ull, 0xac2bd7aeacbddcadull, 0x9f906b1f53236881ull, + 0x6be8af0a7d3a2ab1ull, 0xcac6d9fd83cf8360ull, 0xce62a743b9199945ull, + 0x88cb5b6bbfa21bdbull, 0x6197fdde234fc18bull, 0x3e59b4e59be07b7aull, + 0x241b98388d6e9325ull, 0xe61ab1be9447ded6ull, 0x71dc0fefab253485ull, + 0x7f1f8323682d32feull, 0xf1b5ee8bfa52eab3ull, 0x376bfd18afd8f2cbull, + 0xca9fbff6a937e5f7ull, 0x00a3da9c23369149ull, 0xcd944cd244dcaff8ull, + 0xb4fc64ac59236e13ull, 0xbbaddba5ba7119a4ull, 0x21267eae71915e98ull, + 0xb05977421a9ffd3eull, 0x3f0daeab81465a8full, 0xb084977b054c3814ull, + 0xca24cebe5401a452ull, 0x9d6981c3d1ad89b1ull, 0xbdb5f48edc1e1e32ull, + 0xcfaf21f1672de674ull, 0xf6ce87b7a3f2d290ull, 0x6f4a2edeaf5b25b5ull, + 0x91652a4bb25b46b9ull, 0x8496a5edfed2176cull, 0x5ca9d03dec0fad44ull, + 0xefe727aac8694e25ull, 0x182f32fdcd7b6a51ull, 0xbbfcad1196f84213ull, + 0xacc6bdc09259ce99ull, 0x33e4e78a0d55ff81ull, 0x83219afe5fcb46d2ull, + 0x5196a97b5997298full, 0x122658aa3c6a5544ull, 0xe791be84aa5de99cull, + 0x75dae65c7394c384ull, 0xb0e1dcee36a0c5dfull, 0xa0d0de603d698512ull, + 0xfc8ef1275f61e29full, 0x6fa76c1e6c6fd5eeull, 0xcc0c1bcd5996a5a0ull, + 0x6dd3b3925c1e9441ull, 0x13d5650bbc623a2full, 0xea1b65f9b4ffc193ull, + 0x8c0540d25d0e33b3ull, 0x48005f761b7a3edbull, 0xe2cb40fc011b61f2ull, + 0x2160f2e2b7339d3full, 0xd0fb234b45e94879ull, 0x1d97cbe89bf0ccc9ull, + 0xb0612e71b94a3d15ull, 0x227b7aee40c57710ull, 0xc6a3e99377c72ff2ull, + 0xadfca6bbe5586647ull, 0x9823f92b60a64213ull, 0x4f157b1139742f89ull, + 0xb92e54ccd140840aull, 0x6f6629d97547dc12ull, 0x67a7f2fc32d1c790ull, + 0x000cbc81ae69d491ull, 0x86e51d38452c3e24ull, 0x60e2e2ab924cd203ull, + 0xb4166c49bffc0ac7ull, 0xcaf02c4317a0e208ull, 0xb08c6b54d81c100eull, + 0xf58bf546d5d15857ull, 0x788bc03ff828d364ull, 0x4dfe6e2cf158a0f4ull, + 0xc3b94312abb30742ull, 0xf2fa816179f0dc9bull, 0xa00dcc4c0c0ebed7ull, + 0x966505b8715ae5b0ull, 0xff65e7abda802eafull, 0x9ff90faaec8770c4ull, + 0x33a4a04ef803672aull, 0x67fd0e434ffba8edull, 0x619fb4134ab27f07ull, + 0x3203880099458c62ull, 0x99b34ef393184f01ull, 0xf68dc9143999981aull, + 0x75289df6028746e0ull, 0x1a6a29b631dd60d8ull, 0x68c77a41ab3fd7b4ull, + 0xe25239e4377db75aull, 0xca2e7c55b36b66c9ull, 0xce0f39474f75a16cull, + 0x678fef1489e02527ull, 0x15139d80c6d593caull, 0x5e04c2c925124b0eull, + 0x6cf793902b584574ull, 0xf360d23290c8e851ull, 0x31a05e3a7d74b6f4ull, + 0xdea1e9649d166080ull, 0x283b6c47205987a3ull, 0x62c028d24a663247ull, + 0xef6954e1db0bf2c0ull, 0x6f22e83baa0bc142ull, 0x2dfb013ffa95e888ull, + 0xb8571e5b22a350a4ull, 0xb4345ab55b50261eull, 0x3e0ac1c775ebca3dull, + 0x027162745048acd6ull, 0xfbc11259b399bc7dull, 0x9ac3a71039d548b0ull, + 0x91f654a9466fe445ull, 0x8ab7b37b88b32283ull, 0x2025e1e86e211c86ull, + 0xee87f21880970432ull, 0x52458203b077ce16ull, 0x307cac6f055bcbb6ull, + 0xdd75946682b8791aull, 0xd1b41dfde45817ddull, 0x299186f32e63e83dull, + 0x348bae297534f38aull, 0x838b83df03bf87fcull, 0xaa9231d3e5b25e57ull, + 0x3bc1bb33aabc4e5aull, 0xf0aee0702646df20ull, 0xa9b6341c2cd59f78ull, + 0x6b523e8b05d31527ull, 0x4c29456c9024c6f8ull, 0xf3577bbe75e337a6ull, + 0xbdbfd58e3c034031ull, 0x0b941cff0490e161ull, 0x5eade3c720844d26ull, + 0x5199131a9f91d25cull, 0x744ace4ef8840065ull, 0xb68c2dfc55513597ull}, + DynamicArray{ + 0xd9e719a66307a957ull, 0x2c8737b554b54a06ull, 0xb48c7bc3b57d2948ull, + 0x770b7642fd85a9bbull, 0x16c9396a46e1f197ull, 0x6ff58b1683b42a7dull, + 0x2613fe4653766c50ull, 0x82b02b47842feb74ull, 0x358cff05547ae772ull, + 0xda8fcb0d4b84b68bull, 0x419e6d349bff1f4bull, 0x827a32cd61d504a3ull, + 0x85c3db6e07b75351ull, 0xccbc671825990855ull, 0x4a1c9b6ac99cd4e2ull, + 0x76bb56279ecda425ull, 0xdfa2d230b35c4a5aull, 0xdb7acec4dda60796ull, + 0x404b918ce9714735ull, 0x51f13035f6130ae2ull, 0x44fa29df65913841ull, + 0x57cd7ad0458abaffull, 0x3ce65100bdc4b9d9ull, 0xb24fbf65560790b2ull, + 0xeff55580cdf12b1full, 0x6da8a683a8841b80ull, 0x08ce31e39ce48c60ull, + 0x545254f01cc1acbeull, 0xe57323de13052d82ull, 0x98960c30b166b693ull, + 0xbfccf7d5e43baf8bull, 0xa0d0f38ff8810c1dull, 0x54aadf7da1096863ull, + 0xddfe227a44b3ac1aull, 0x61e56bbfb112f57aull, 0x70d251eae16bcd79ull, + 0x3dc6182206dfddfbull, 0xeb99ba5459778546ull, 0x5c828bf8311ad43cull, + 0xb3ab6f530ec53c18ull, 0x10d79c805e75b316ull, 0x60715a072c280332ull, + 0x403fcf0485288277ull, 0xd8091acd994afbecull, 0x7fde57636c07abdbull, + 0xd34071c832b2d313ull, 0x8514ec8f85c23c00ull, 0xe99f0b4b0a4d8661ull, + 0x4ef5f6901c54543eull, 0x15e72f7d240ff45aull, 0xb6ef59b54f8aab98ull, + 0xa8fac300a0198ed4ull, 0xc354af47c9ef24e8ull, 0x4e4464eb48466cefull, + 0x002fc57833749316ull, 0xc6d2b7344ee21e64ull, 0x43648f2adaec639dull, + 0xaa3979dca9553c8eull, 0x8661a6eed36fecfeull, 0xa7cc8f80b9b158c1ull, + 0xb3b686b8f5e0997bull, 0x181cd42a54a52e99ull, 0x026615d58f02c20eull, + 0xc536024627337ff3ull, 0x9ab2042f0433ebe4ull, 0xfa050272e16cc68dull, + 0x3222159a331c1a4dull, 0x64d4a823525095efull, 0x4e39b9810b587c45ull, + 0x20e05f47f9961babull, 0x21aaa7fd230f1068ull, 0x9f6ac6a44eb137fbull, + 0xc9b7123e97b5db29ull, 0x07a2d75346680f8aull, 0x762280e9a7452249ull, + 0xbab82034a09a3e21ull, 0x3856937c574a5a9aull, 0xda5595fab506957dull, + 0x6cb1d54ff2cc4fbcull, 0x8c317fa9453011aaull, 0x5d0c9e99fe75221aull, + 0xeeab7042bf4a3e32ull, 0x1293e32f6ceeb55bull, 0x321b7bd84a1bd2d7ull, + 0x85e6e57c239935aaull, 0x503eefdc13bf2504ull, 0x997419a58ed98a0bull, + 0x45e0d9c9e69aaab6ull, 0x16960dd916efe768ull, 0x1967b6db92e50787ull, + 0x658fc4bba913e8bdull, 0xf749d72b5a21fa5dull, 0x07ab3075b772dd26ull, + 0x360ebe78179834b5ull, 0xb9e5d2e122dec3e5ull, 0x12606baa7297c5f1ull, + 0x7737906b061d1222ull, 0xec4e783e8147f334ull, 0x386494697f0e8897ull, + 0xcc04ffe366205c21ull, 0xe183048eb86acf33ull, 0x17efe9f97acfdeefull, + 0x9c85926cc87969ceull, 0x107d046c328f6e8full, 0x86e768418254cd78ull, + 0xf35c2dd848e7f609ull, 0x3f750796eb431eb0ull, 0xe24a12d5cc8e67acull, + 0xfa4566396024536dull, 0x5e5a24c27c144780ull, 0xabde93b5d6d82192ull, + 0x4ebf981c0961a976ull, 0x255a98949fedc91full, 0x07e11a5502ef24e6ull, + 0x5ea92b77e0ab5802ull, 0x834825004d763147ull, 0x5ebe188d2af1325aull, + 0x4497bd3066e7c628ull, 0x43c28f97dff6617aull, 0xff484ec10959a984ull, + 0xd296369de08d289bull, 0x3b992aad73edeba2ull, 0xc9cc0f4b183a4764ull, + 0x4dbe7955cbb25238ull, 0xb6e56094b1ae771bull, 0x630458fa51fd85bdull, + 0xcf41e553b97eeb9dull, 0xc881bc76e34a3467ull, 0xd706951a0f5e3fd4ull, + 0x40067758a133bf74ull, 0x7d54a480d72a4c6eull, 0x57acc6f6cdf04175ull, + 0x45c91edb2b0e7225ull, 0x272e802c6ada3531ull, 0xda48c514617c0ef8ull, + 0xc974e8566f258907ull, 0xa66d010316730ab8ull, 0x2ce6a9696d2c5885ull, + 0xf301d7798744182cull, 0xed0628580a5f233aull, 0x4cd866fe4c2017e6ull, + 0x82977f154e74933cull, 0xfa1fe9e100c62671ull, 0x5425e1198ea62066ull, + 0xac2243a39720f7abull, 0x621181c96d5d090eull, 0x0dbac0248c442adcull, + 0x99f4ff9f160744a1ull, 0x51dbc628f89e0266ull, 0xa850cf6f32c09779ull, + 0xa91c03ee2bee58d2ull, 0x6c7234dc27434a63ull, 0x8d07b8801eb3a07aull, + 0xb7232b326ff6e2a8ull, 0x87b7eb096c943bf6ull, 0xbafab8044c85b45full, + 0xbbf638c0edad5d33ull, 0xea57eb58d73e6a5full, 0xd96883ee0abb360eull, + 0x38e3bd14812a33adull, 0x74dc52ac16e41c84ull, 0x11b4ef863b9d8b2bull, + 0xeb1ff5cb281d738cull, 0xc32d89c8e1d17920ull, 0x1bf0476fd6218ca6ull, + 0x921691b2c8ee7c65ull, 0x46f8d4c654ac2265ull, 0xabfd1e0a30170258ull, + 0xa22da598c4991120ull, 0x29568c10aa972409ull, 0x417521d402ff65bfull, + 0x2ea734a86195716eull, 0xad74b566b7e8e778ull, 0x7e02e4fdf5ab7448ull, + 0xbafd0d620073d8a5ull, 0x899c0615001cd75aull, 0xa39c8dc4d32cb726ull, + 0xe024ea086be9a499ull, 0xecbad9e171308a4eull, 0x6acab3a70bc3b6b4ull, + 0x14776cfd6505573full, 0xdeb374bba8dd3ff3ull, 0x938eb7dec00a1f7bull, + 0x2944ab165efbaf03ull, 0x3de281951c1fd5bfull, 0xc104dcb29df39b5full, + 0x106ab16c2da631deull, 0x8eed4f0381f37022ull, 0x06569fb5fea8c8e5ull, + 0x6e5133f5108663b0ull, 0x7b1503f4c3c203d6ull, 0x81a4d75c35b8dc6dull, + 0x8e8d28c3f8dbc581ull, 0x19701c22008ced2full, 0xdcb875c6f7f968a1ull, + 0xd631a7473bdf562full, 0x745e4483f97a9920ull, 0x81b1ee9a0701a10bull, + 0xcb6f96076d56f0ebull, 0xbd7ae5e50d16074full, 0x3197648b9fc82319ull, + 0x0325bf7aad167c50ull, 0xa040a3dd772121eeull, 0x414d1224149b09e2ull, + 0xb086222e8da35399ull, 0x89303a20c56d77c8ull, 0x5b2f4cfec2205a64ull, + 0x9206378df6fde6f5ull, 0xf3774504720c9f49ull, 0x614d2c375dcbc58eull, + 0xebe0eff9cc7f3ba2ull, 0xf2f4e3fb676e13a4ull, 0xd82e35ed764d8390ull, + 0xaba364738ffc1f66ull, 0x018d3ba21b493439ull, 0xf84bf6055d8d57a0ull, + 0xba0143547a700b69ull, 0x33a70ab0eba90c4full, 0xc159959f986c34d0ull, + 0x164a6cefb8033dafull, 0x1686fbfd855d7153ull, 0x37d95c27bd52f718ull, + 0xca20f8f1e6ae1f13ull, 0x556a4660dd042618ull, 0x81016c1d7a2f836aull, + 0x5f23b5b8a369d068ull, 0xf839b6e35ce0f0f3ull, 0xef1041bf931e78c0ull, + 0x7e521a30e7477822ull, 0x9e2494602c358db1ull, 0x8837018d18b35d94ull, + 0x10089cb73a382c34ull, 0xfa0593b2a61c15daull, 0xd04165872d78f11full, + 0x8748bde642b1d41full, 0xaa335dbdbc008ad4ull, 0xd8682364a26bfd48ull, + 0x942bf31d8e1a2a8eull, 0x9ccce55c50f3710cull, 0x035cde220fb3f642ull, + 0xccd9c4c3eae2de9cull, 0x9f6c0668f357591dull, 0xeedbcaf1a2361212ull, + 0xa338cdf9ff73b2bdull, 0x9de483ff0c3cf3a7ull, 0x408d064cc51486aeull, + 0x78bc816cb207c325ull, 0xd0a3f93159c020afull, 0x008458c0ce0abefdull, + 0xd3975a19b147755aull, 0x45ed646efe4e0eedull, 0x62789cb475e65aedull, + 0x09f638af6389590dull, 0x8a1802846d8b0ff5ull, 0x6f673e37b635dd14ull, + 0xd08b8f2bc9f2a477ull, 0xaa9b0d9ceb3fe114ull, 0xacc6b81a9d588d5aull, + 0xad321761f035ea5cull, 0x4a05312459144c78ull, 0xcd38a990b8b203acull, + 0x4e44cbc9c7d22404ull, 0xd1f79c20512ffb81ull, 0xa096563aefc93b8eull, + 0xfc4fe64d74a66b6dull, 0x0f2fac517ca43b87ull, 0xbfd5cd584c631b88ull, + 0x788915604fcc56aaull, 0x35ea69a4574e10d4ull, 0x0f7f8fd5f40054a3ull, + 0x5219e7c9939831c4ull, 0x4f3dcc1704512cb7ull, 0xfa4d052524471c1bull, + 0x5d02c76e48b91755ull, 0xe655c922d5ae92abull, 0xfd7bfe73ed51fa68ull, + 0x0a5da2cae2430979ull, 0x7d92ca45eda28bb7ull, 0xc0edac8f37306514ull, + 0xe1e9ec19f227d977ull, 0x7cec90f14708eb33ull, 0x3fe690492b3de2cbull, + 0xc63e993ca1122700ull, 0x614a89e3fcc47848ull, 0x0929b208672e939dull, + 0x00e14f68b9b9bd6aull, 0xd4ad9fa133d85ee4ull, 0xaef5cd01ddfcdd78ull, + 0x80f96e7122c6478bull, 0xe2181f9071eddad6ull, 0x5d64570ea4c0a048ull, + 0x0eb04fc31a4ae440ull, 0xfff325beb2639fffull, 0x63ba6873c719769eull, + 0xbc0afc13424387ccull, 0xccf75a41ee715d3eull, 0xca1e39e3ff90de74ull, + 0xdaed760b83957dfcull, 0x8a12580023e319d3ull, 0xe3948fb79af6d607ull, + 0x4ed85e96c54ac428ull, 0x72100da892e4fb76ull, 0x2f00b6c77a7e7ca2ull, + 0xd02e443c1b3ebf20ull, 0xf69758be6c776843ull, 0x9343ef23d0d94b79ull, + 0x0ec2714981a5c45dull, 0xe5416aa493141654ull, 0xaf4b5241572fccecull, + 0x14d31a0a52666dbcull, 0xead9f088bbdb6701ull, 0x7b1e6bbc171c8b90ull}, + DynamicArray{ + 0xa2e13e10cdcbfd7dull, 0x17ae66fe8cfb193cull, 0x3d549190126a09efull, + 0xb41dab6f5ea1cf21ull, 0x6ca8831f2eacc4e6ull, 0x26797a936b43af99ull, + 0x478a72cdb93b255full, 0x1cf2be25b8439980ull, 0x242c3445db5a26deull, + 0xeeea6e370fd0cb11ull, 0xe273c93456495fcdull, 0x80ecb91b7ac3a86eull, + 0xff32edb4d4422393ull, 0xa26879d6f806a051ull, 0x68bdc32e7cb462bfull, + 0x8b491513c160a16full, 0xaee2fa0fe0ad63e3ull, 0x488a4fecd337e391ull, + 0x70dd80825b43b512ull, 0xc2b83b07e4abd3b6ull, 0x1de9f06f1e6b8d16ull, + 0x066d533c10cd13c1ull, 0x1b91687f065c3943ull, 0x17eb32d375c1eaa3ull, + 0xb47518ff7339fed7ull, 0xedb3b06fc39facb1ull, 0x1c5e8bc9b82af4bbull, + 0x71286520b631ddbfull, 0x2c43221eb09cabdbull, 0x0003d87ad8ff8e89ull, + 0x0f0680c66d98ff40ull, 0x874e021eed7c34c1ull, 0x41514f25fc06cc42ull, + 0x34ef3e84c9c60aa8ull, 0xa5651ba4c8de27adull, 0x78633c28f89599c3ull, + 0xea4a6488bd876dd5ull, 0xaef321ff3988830eull, 0xc2b59224bfa43483ull, + 0xde0b030b60ae0918ull, 0xc18d4e48fa6c81e7ull, 0xaa1de1f5d1a9aeebull, + 0x791b9e1a9cfeefd2ull, 0x60c804f3a8eaf486ull, 0x92aba51e8bfc92f7ull, + 0x5db6ac94e0ffec48ull, 0x542dff3867dfe7b1ull, 0xdc362944a07f2be4ull, + 0x0156452f3508c340ull, 0x43d58ba25f55801cull, 0xd80fb7346e85a308ull, + 0xca80fc826764b191ull, 0xf193f9487e63613eull, 0x3a4f3d68f5d83dc5ull, + 0xd883328ba5ed32feull, 0xf524b82aed5c06ceull, 0xe12a5342568bca7bull, + 0x32fa61570997f396ull, 0xc76b1b1d3cbbd281ull, 0xe52b54f90ed34b20ull, + 0x27ba2115ef228115ull, 0x9c158df3dca7ba6full, 0xb040241d01619643ull, + 0x3845fb34660d75efull, 0x7b74a5dfa54bf8f5ull, 0x2e6392ab76827521ull, + 0x6b3c1e9c51fc08e3ull, 0x1a4a00c046adc7ccull, 0xa955178ba023a88bull, + 0x3a2815b000c9ee4bull, 0x157d96ca3f3cee11ull, 0xc7bf814c1ce63b91ull, + 0x1cb83eb29b3145d7ull, 0x35cf311ddf314bc1ull, 0xea7f112b7455e4d5ull, + 0x6ebc6461826adc88ull, 0x7be8c8bdd1e9add1ull, 0x5cd0c27efc490e63ull, + 0xd9a5990b6fc58b23ull, 0x4f6e89ad7d1426feull, 0x2b6db3d88fe0afdfull, + 0x8a6117ab7a92ae70ull, 0x6522784719c141d2ull, 0xde46cea37d46a87bull, + 0xeac56466a14d2023ull, 0x88cca6c62c9f9b81ull, 0x9a6e096f83980945ull, + 0xf0742be9dfa2f8c9ull, 0x55ac530a51671c45ull, 0xcf702c9b7b7c1a6aull, + 0x3de592279d4fd5e9ull, 0x688375907d6197acull, 0x43cfc8faab610fe4ull, + 0x385b33b5aeb3af68ull, 0xd120380b8450a3abull, 0xa9d7cc56d79b98b3ull, + 0x2997d1f6ce6ac3a3ull, 0x40394731a6221e1eull, 0xa5cb12413653becdull, + 0x206059cc63e06141ull, 0xae7edd9a28660ea1ull, 0xdc253c3a31f43b87ull, + 0x804ca2fb4b95b0f1ull, 0xcaa8cfc7804308a9ull, 0xa4b9ac1097129be6ull, + 0xeb727a5f1bcdd28dull, 0xf5ca80f24f159244ull, 0x951bc44d067551ccull, + 0xcd1e828b06d690afull, 0xdb97c90db92cf288ull, 0xf9aa19c25a830253ull, + 0xd3d68cb856013eaaull, 0xda4202bc51f08a11ull, 0x908945ae1b2c2aefull, + 0x7566b602f3439e8eull, 0x5b1caca591f20836ull, 0xbe720ae3ba3a18aeull, + 0x0f033664a8f0a383ull, 0xc8974854a29ab63bull, 0x029fabd71c83403dull, + 0x6bb945f188bce8bfull, 0x87a17454dc79c049ull, 0x26fac2080dd833f4ull, + 0x4c05e9cb1a941a75ull, 0xf332d210a580255cull, 0xb6a473a2aec579b6ull, + 0x773888729a449ec7ull, 0xc8836a0cc9f357c9ull, 0x94e9ddf12d206c81ull, + 0xfceb0922440a3319ull, 0x7c4987be85c10145ull, 0x7fb45e6c2e0c1432ull, + 0xedeeda34f06c100full, 0x8c0644a717a60d81ull, 0xe4cb5de1abc89cebull, + 0xeb6c0cd574f0fb23ull, 0x8be9507445ab1db4ull, 0x25a0d0cfb4390ee5ull, + 0x7675c0ad8b819d72ull, 0x8ef395ba05e46cc8ull, 0x587eac1c6b576ce3ull, + 0xf16e557f8bf36509ull, 0x1bb126f05b711737ull, 0x898d3baa864b5cbdull, + 0x758a3fc64d4d7af3ull, 0x6fcf5ad8868250ebull, 0x667921b912c921c2ull, + 0x52ead8cf31e11ffdull, 0x025148c7e981847eull, 0x3b138a1d2835c5deull, + 0x5ee0f411c42fbd4bull, 0x05a5fbf2e06e7026ull, 0x7655b010c91a63bbull, + 0x9200bda55979c980ull, 0x1fe2c7fd56f25de7ull, 0xff9fdc2556c6b597ull, + 0x1fb9aecb90fd9a62ull, 0xded8665c9e3364abull, 0xe5aaf06fd5b6a68full, + 0x4a5178ba70f3db78ull, 0xcc4364a8c1c5715bull, 0xb44a8139b16db539ull, + 0x3e7b9565a217c560ull, 0xa9be52d950885035ull, 0x7ad39c2697b52271ull, + 0xb08dd2b8c8801066ull, 0x545e1e0eccef7c04ull, 0x051f2e6f6cf6a6faull, + 0x63e041b9e5e84c74ull, 0x1c4f0f11a5d73073ull, 0xfa31be223bb2c76full, + 0x973ed628c3071a50ull, 0x42c2bc002f7eb53cull, 0x046fa02a8209258full, + 0xfb79f5b68b55ce99ull, 0xf2af295c525a09e5ull, 0x76b656221703e7b7ull, + 0x8560a95702739539ull, 0xf7430c80503df14cull, 0x55435fa5da205008ull, + 0x0aed11976d761c80ull, 0x52b9057b746c1556ull, 0x3e9922c77f4791a8ull, + 0x74ac3e4981b6509bull, 0x35ceb35f24bb3b6aull, 0x413389dfe1798415ull, + 0x206103cf3c12f685ull, 0x03960ea58b7e9582ull, 0x050d695af2b06841ull, + 0x0ab73802ec1a3587ull, 0xe403c8e11ddc79ebull, 0x01d1c8c42c6c33cfull, + 0x777faa497a62d31cull, 0x3a3496eb20bfbc4dull, 0xb449403d927e013eull, + 0xdd0e675e232339e7ull, 0x58c78a0722ef4130ull, 0xe79aeeae86334e53ull, + 0xf1294c89dec880d6ull, 0xfb815b8b53e43d4bull, 0x1f335a46387835a1ull, + 0xe8b7793b8c2bd4acull, 0xdffeb7a84d761e4aull, 0x2a309dda8827034dull, + 0x936276fff4b2f5a3ull, 0x976a2c39165a2d14ull, 0xd6858619f401972aull, + 0xc9490aa2feb67e0eull, 0x6046d839b44a246bull, 0x7b20c4dec5b660ddull, + 0xff624fa72cc279abull, 0x4ddb64d5b93f9580ull, 0x876b48adff16e307ull, + 0xfaf857d126866e5dull, 0xb51a249d87fb41d7ull, 0x05b57474036d0e02ull, + 0xc640d45385fa577eull, 0x8cd86aa9c3f3fe6cull, 0xabc47d7b774e995dull, + 0x6d3cf060eabe4789ull, 0xe0bfa376c3e53a1bull, 0x17d273c59af35b4aull, + 0x918b42185682af3cull, 0x8883647a3a31b76full, 0x8334e68e41a4bab7ull, + 0xc2331abdc8cf42ddull, 0xe14d6d778731d999ull, 0x01ab8a82b29055b5ull, + 0xa80f6b2b2adb31beull, 0xeda33a0a85e43026ull, 0xeebf315e0ff35a24ull, + 0x450e0bc0cad55e76ull, 0x06779e692265dcceull, 0x7fcda6913dbee88eull, + 0x697cf31df2ae60d3ull, 0xde29fe8b6dba5432ull, 0x093341e698ad8c84ull, + 0xb207bda2ed87aa9bull, 0x96b21709a469f7dfull, 0xfb1d247086b6067dull, + 0xa12142e24644b763ull, 0x76fea168c470a859ull, 0x10904d48b814df9bull, + 0x91b193496437b4fbull, 0x40ff202d3225b741ull, 0xbec89a90e2f01004ull, + 0x7ee16d0a994857dfull, 0x51febf77370d47fdull, 0xd26c28cae0c78036ull, + 0x0efaa82931222fe3ull, 0x06eb3aecb154c143ull, 0x06584203d556e9abull, + 0x66b806dca65ae47cull, 0x5e518f2b3d0561e4ull, 0x8efa6fac206f5d93ull, + 0xaf713a145ada3735ull, 0x872a5e20bacf4beeull, 0xfeeda7d9d804474full, + 0x4cd90221af140014ull, 0xae2ed65baa692e52ull, 0x9e9a6d98d6d39308ull, + 0x26ac66f8a1dd1c65ull, 0xbf61bdf3260b9083ull, 0x1cee114eadb07ed3ull, + 0x4c04a9d0a5047dd5ull, 0xf5eecbbf4bcfb378ull, 0x0d7a02a20c6e9caaull, + 0x362b2b0a1b5cfa88ull, 0x144117bfb0c56b9eull, 0x70d6e4ca73c28aa0ull, + 0x20985662cca730faull, 0xaf9fa5f72af3b15eull, 0x878d230a0e252499ull, + 0x7704fa61d375093bull, 0x77569fc44b9ae933ull, 0x65527ab900dd90c0ull, + 0xdd6bc8786752d45full, 0x21e3d4c32e29dda3ull, 0x68a1055fa54e28ceull, + 0xc2a15bfdcdc60090ull, 0x2accd51ded7bdc3dull, 0xcbab098e0b8323bdull, + 0xd009929d230d106aull, 0x6b24956e32b55580ull, 0xb7e4bff0f053c471ull, + 0xb314413baee0d2d7ull, 0xa43dc44eed70cba4ull, 0x9967f0bdfe14d147ull, + 0x44e8fc4ef188b3d7ull, 0x2b80a8a8de591b8dull, 0x4f2f403133c0ee5dull, + 0x5d27c507551e4432ull, 0x7031615c06357b47ull, 0xcb39d52f4fd31c22ull, + 0x5f1fd3e8d8819b9dull, 0x34b45cc1af27dfb8ull, 0xca88f23b2a634a21ull, + 0xb41bd0a3bba43869ull, 0xa402d4f2889795f2ull, 0x21df8070edc5deabull, + 0xe9d226e59acd0c8dull, 0xf4110898699a8d5aull, 0x4b23236d4c619c97ull, + 0x0950a504c955bdfbull, 0x87294a57ccd4332full, 0x8fb3754865d18ccdull, + 0xb4edc36718428041ull, 0x692c556f7ea8845aull, 0x5eaba74fb10bf9bcull, + 0x65813b73afb3fef6ull, 0x6c77397e05c10b60ull, 0xdbca8eabbc8c559dull}, + DynamicArray{ + 0x1854d69752b092eaull, 0x3cff128fff93ebb7ull, 0xeefdf82cc83a2b8bull, + 0x960043d1863acbb4ull, 0x1bdc5a67898f3d1bull, 0x6878c798a15aae2eull, + 0x9e0d52f2c85d25d5ull, 0x1da88d056b4666a1ull, 0xd9d1e07f737cb4eeull, + 0x0a71ba7dbdbfaaf6ull, 0x75772f6f30244c41ull, 0x8d30afc993dac61full, + 0xe748a4ebdab21775ull, 0xbe456edb5dc798f1ull, 0x9f5ad1a6c4e6dd38ull, + 0x6e7f323d2d157664ull, 0xdd59e30be4e3b13aull, 0x1170442eed30737dull, + 0x86ca1a9951603cfcull, 0xf279bfa99b5e66f1ull, 0xe702c3fa5c798bb7ull, + 0x2cc2dd0708603c36ull, 0x40a70aa4d40c4592ull, 0x60853d720f28ae55ull, + 0xc2b7aa39aa75b139ull, 0x3aeb872d7a679dfaull, 0x1e17a8b6819c8a79ull, + 0xf0f9918999fad9cfull, 0xd75d603d2cbad56aull, 0x9440a2ecb6652454ull, + 0x0c5c0c68580c1b66ull, 0xf0c3287b23429df3ull, 0x34976cd369bfb5c7ull, + 0xcb4ab54def175a31ull, 0x119a18f1febe5eddull, 0x9c37b4c4ab67d18eull, + 0x2f1cda0f69e29fecull, 0x63caaeb72636aa7dull, 0xed9818560c180935ull, + 0x50d0cebe17557fc0ull, 0x62cddf99b17bdbc8ull, 0x49dca3332f6605daull, + 0xb53c570e657519bbull, 0x1d83a55c70c33942ull, 0xbf1392cd9762aa53ull, + 0xd98dc024f7eab082ull, 0x81c903d46f78ed9bull, 0x3b55a9deeb2eb568ull, + 0x8c15b0e371d81cd3ull, 0x6faad595c7f1e204ull, 0x41c1749cdb6559e6ull, + 0x3114b91a4741bc6cull, 0xa15b6d87969fd864ull, 0xf4a5552d2112cd63ull, + 0x85246d8f686c4dbdull, 0x5ead6ae7f76fe7a3ull, 0x6427fb3b0ae2ee56ull, + 0x5cc878a5864206e9ull, 0x2088b2680f5481caull, 0xbd41f68e28a9247full, + 0xcfefd328c6692f68ull, 0xe55887e78d786aaeull, 0xb81691c3569c8057ull, + 0xe0fe5407809eb65full, 0xe9356e05264fadb1ull, 0x907b4ffb6c19439cull, + 0x80ba35b76d2e4d61ull, 0x53c95bc6baac4e4full, 0x3b9486698ade5f59ull, + 0x4246c2de719b2864ull, 0x4664b10c18090f3cull, 0xf7dda328556aea53ull, + 0xa262b56b56b0fb8full, 0x7874fac817e9da1dull, 0x0ac3cae4efa95ee9ull, + 0x27fc4d030f79d258ull, 0x5c2efde7c43ab377ull, 0x30d1cf87deb23decull, + 0x711c5cda32a5d21bull, 0xceb0de70120df8b2ull, 0x95bb3402802e81ceull, + 0xf5cdb531a9cb4bdeull, 0x90ccf04881e108a4ull, 0x4c53125126e6083dull, + 0x94ba220629b36edfull, 0xb8a7e0ad230c4569ull, 0x8c85f706ee0f87ebull, + 0x4283e0579f4acf1bull, 0x36203b0be44e72faull, 0x05106fe71360b542ull, + 0xca454f762740e178ull, 0x22c2ed45e23700faull, 0xe84d034615dbc229ull, + 0x564147e1dcf3924bull, 0xf2f09f933a85ede9ull, 0xd35a7aa8a9d3ce73ull, + 0xb365edff86d80234ull, 0x72dd0fb1ff72ef42ull, 0xb80878191dffbf45ull, + 0x4d3a02f02493fb3dull, 0x5b626743ec0ef006ull, 0x1b6e3bf00a51b177ull, + 0x402ac94edcc36cf3ull, 0x8e7c0c92dfa0c879ull, 0x2ab27ddceca32ef1ull, + 0x13f39db38d456de3ull, 0xe8a8ea9ccd80e969ull, 0x5bce256b3d193872ull, + 0x723a73508d0fe45dull, 0x3d3d783e687f290full, 0x2c1d5363d80e3baeull, + 0x7173b76d4afa7a5eull, 0x53e430822d6b0263ull, 0x3415a5deaea32c75ull, + 0x442f1acd0f3e79b0ull, 0x3f0debed407a7821ull, 0xea1fb884a1abb2e0ull, + 0x6ca6b725e19f7708ull, 0x1f1f700c7b928641ull, 0x1aa9904075ed2bbaull, + 0x59a3431d98efe4eeull, 0xeb0a5a4e8e668c31ull, 0x193156d83ec95ddaull, + 0xfdc29211c899ad02ull, 0x94082ed7988b115full, 0x14063186dce37325ull, + 0x2825031785cc2c88ull, 0x86305cb468bcdda6ull, 0x9af8dd041ed0d9e9ull, + 0xa939ab6d7e02370full, 0x57e0803c9fd393c0ull, 0x82da421c0a60be97ull, + 0xd76e6fd8053bda7aull, 0x7ecf62af1f68fc69ull, 0xef670542e1986e50ull, + 0xa08b384f0fc37d6bull, 0x7806330656cee1caull, 0xb110581fcad1c0cbull, + 0x77c7f5bb6b8d722aull, 0xc46e2e65bb8347acull, 0x9e3a2af30e9dcadeull, + 0x16ea564f344fab8cull, 0x4d112ed4a29d9a66ull, 0x264f55400e01b4f5ull, + 0x2e69b990415e5428ull, 0xc4f9cd5fb55e74a7ull, 0xda721327c033f299ull, + 0x23e058c69d08671cull, 0x14bed0f6afdce8c3ull, 0x600b5beae7c68185ull, + 0xc161a62cc831820aull, 0xc2b5fe75616208d7ull, 0xfb7e7a3c890d8a1eull, + 0x1ac0810b7d666c32ull, 0x0c71315185b72a3bull, 0xb5271eaebfd5cf03ull, + 0x542f4e45c1de0ba0ull, 0x57f8abc1d401eaf1ull, 0xc0e019c55a4c9612ull, + 0x2b93c4167051bf2bull, 0xe0aefa83c1b66ebdull, 0x9e44ed5543fd8f4aull, + 0x7b314233fb266049ull, 0xd3a6301b3512fde5ull, 0xe080a5013c59c7d9ull, + 0x639c07a5cb8c373aull, 0xbdb2f041dc0dd673ull, 0xfbece0e6239d2ed1ull, + 0xa6cb7ea52fbbe15aull, 0x57b14923de0b91eaull, 0x085df06396418eddull, + 0x86dfadbca3fafb6bull, 0x26098f4355a69f58ull, 0xa0a165a58ef17976ull, + 0x1547120f02690a96ull, 0xea1c56b4891007a8ull, 0xd4c1eb541b4d4538ull, + 0xcc772fe103ab5ef8ull, 0xa1b7269fc0160978ull, 0x67578c478804b70aull, + 0x122527682323a69cull, 0x398fc240c5fd964bull, 0xda0a99e4712e161dull, + 0xd6be322bfd771ee1ull, 0x8e31375b1958a8ffull, 0xba4c9fbe519e3072ull, + 0xcd48a4c3166a1fd2ull, 0x13fa9fd5ab88b9deull, 0x4414890fbe77e30aull, + 0x22f0ac8721adab4aull, 0xe147fc11353eeb7aull, 0x71322d864d19c646ull, + 0x23b3e20e51f8f465ull, 0xeb29417f02458d8full, 0x7414f07a33d9d4deull, + 0x3c12fdac88e4b516ull, 0x656f61e5a45d453aull, 0x917a6cea9802d6e7ull, + 0xac5e9049e642c904ull, 0xb8b596825e94b0c0ull, 0xfe83d305620ba7beull, + 0x4d7a0b620afbf5fbull, 0x0609a5472315d028ull, 0xd8fafe90fd36d58aull, + 0x145513adbfda04f5ull, 0x4e0fd437b84f1564ull, 0x29174346db8cb87dull, + 0x90333411a88516a5ull, 0xdd405ffcb7528581ull, 0x28ce29237e121997ull, + 0xd672aea294bf417eull, 0x0a3ca6e6dd1516f2ull, 0xa4be9e57abb39a31ull, + 0xdd11ee56dd0869c1ull, 0xf33e4e900d114f1bull, 0xfeb00b6fb861e985ull, + 0x8d4b115fd34e91d7ull, 0xc0aa07ed9446e844ull, 0x9e93bc9558c95358ull, + 0xa5054faeeba480c4ull, 0xe8f8e6ba296e3ff4ull, 0xc0ee4f5a242ed4f4ull, + 0xe399c46b9436828aull, 0x7a0ffe818130e622ull, 0x6f81234e855012e8ull, + 0x3f46511512798c60ull, 0x05cc95dacc5d1006ull, 0xf4b57e178db69831ull, + 0x737b4b6faa6ac25bull, 0xfe6574c4f08fa74bull, 0x2fc5b771561edae3ull, + 0x7882d556b391cd28ull, 0x205faee702b24f70ull, 0xe609a5c8cdc5ba5full, + 0xf740c287653247e3ull, 0xd6b0c83a0fe32696ull, 0x23a68823f16d0f44ull, + 0x12ced300ea4eb9daull, 0x09eebdf0b315d770ull, 0x06512f4e951f73b6ull, + 0x87c15016006d78ceull, 0xef9e30ba46db5c9eull, 0x702e7804eb39f259ull, + 0xc0296fa6665aff06ull, 0x4cab8223051c1f72ull, 0x6a9c792a72ac7fa1ull, + 0x6d58a44b76611b70ull, 0x4bed41d8b66b51dcull, 0x2cef7c3623174fddull, + 0xbfa48c1fd0637659ull, 0x01e1f9e714aded16ull, 0x707cf47f6758d1aaull, + 0xec5b167caa83fb47ull, 0x13b3f4b64381e0d8ull, 0x4d08aab9eee4cf19ull, + 0xdc5da0fd4a13f163ull, 0xfd1a22b2cff0898bull, 0x1a89aba22dfdeebcull, + 0x0c8f2cbfa97c3361ull, 0x7fd8997b8a2ceec2ull, 0x031410b2d5aa6063ull, + 0xba76daf3bac3b750ull, 0xa10c12aec155081eull, 0x220f32d8d5e738dbull, + 0xcbb7fe6b52091e9bull, 0xccf8667872a8cedfull, 0xcbfc9af8b79ed6cfull, + 0xbfc042cf5dc4410dull, 0xaa6fec21b7e65899ull, 0x03df162936ea33ebull, + 0xc6a51f5d69017067ull, 0x6cc0930c19732963ull, 0x8597b9c472ad26ddull, + 0x5e0f6037685d1734ull, 0x76d2ed26ba3ecbfcull, 0x0be09d86b7eba642ull, + 0x140f6c88f6e82c1aull, 0x4a2e181c6d6f927aull, 0xaee83733fcab0887ull, + 0x28cd5866de47461full, 0x837a32ca91d0e940ull, 0x2dde0cc50c2791e8ull, + 0x4155079f1dc16896ull, 0x2c85508dd189c056ull, 0x9568b79477d33c9eull, + 0xb867cd350d2086fcull, 0x783f3dc58e65674dull, 0x62e95ee38d3f7bb6ull, + 0xc8edd24f46cdeed0ull, 0xfc51d3bf9753a531ull, 0xae6418f16b12f81dull, + 0x421015edcff155e8ull, 0xde6a56d128907636ull, 0xdc73ca0e133d1ac7ull, + 0x6c3f02dfe5d3ba44ull, 0xf79d987735393367ull, 0xa4715dc2c242419cull, + 0xfbd2125596b7c963ull, 0x96f88238317c68a8ull, 0xd7479271324011a6ull, + 0x6158088a084f2d9full, 0xe42c63e56b31aa12ull, 0x6fbdf45cf60652baull, + 0xfc153d084cc887cdull, 0xcee166ea03baa526ull, 0x239ae14129a84497ull, + 0xf359ff5bf58346bbull, 0xc933cb67dd44838aull, 0x4c4b401b6ad68390ull, + 0x575c264fc1186177ull, 0xe44c3946035d0d2bull, 0xfadf1c12f7d168cfull}, + DynamicArray{ + 0xd787fdbbdbc6487dull, 0x191d5b689e8ec879ull, 0x9073052e4f32057dull, + 0x465bdd7df18678e8ull, 0xf838cd7f610f126cull, 0xfdee765cf2c2557full, + 0x94f98517c2e95880ull, 0x4912cb6528422c71ull, 0x7ad2968ba8274d81ull, + 0xa9a7611b4fd4f7f5ull, 0x441d8d67478e23ccull, 0xef64a6695bf795bdull, + 0x3c26d412cdcdd702ull, 0xef6032640b3525b7ull, 0x01808f794935707bull, + 0x24c2878063b6f344ull, 0xc6a7e38efd08111bull, 0x038c2e7c51f45ad1ull, + 0x270d00debbb81f82ull, 0x66103d93f5057f05ull, 0x098efb24209191d0ull, + 0xd13c832dc8b5eb25ull, 0x0c647db759e46fe8ull, 0x53b04631dbb4a3ffull, + 0x61bbb03cab42f202ull, 0x6dac66cb229eaac3ull, 0xb1fce20f8fbe4f8aull, + 0xc451672cbf254be6ull, 0x29e2d160273562beull, 0x5209ca8936f8675dull, + 0xc20bcb18c779a1bdull, 0x73dbb20fcf94e703ull, 0x7d9f6765c128c226ull, + 0x49dd85bfa8c7d8c7ull, 0x87b742aa31f69152ull, 0xdfe7ccf59f385413ull, + 0x7afaaf68000ea3b2ull, 0x4bec54eba4d3cd93ull, 0x49c38e4e3434768eull, + 0xdf32f1a54168b36dull, 0xaf8e5e63ee22db65ull, 0xddf1c9956b4e1b5dull, + 0x85c0b28ca752a5a7ull, 0xa2a41048a4af0e12ull, 0xdef7c3d5c202080full, + 0x079a36fba789e1e4ull, 0xc99cc1472ab63da3ull, 0xabca7186f3470723ull, + 0x6972d1ccf4e4238full, 0x3c4f38ba69ce5270ull, 0xf407f3a921f87a41ull, + 0xb0b6bc70d7fec1ccull, 0xa44d99e1b1a189f3ull, 0xc68ddb0e1c663daeull, + 0x38e8ac12adc70c70ull, 0x14cf1ef9e95c5e06ull, 0xda6849f783441f0full, + 0x8d758ec6cf4667c8ull, 0x2fe1219cae0055cfull, 0x8f68207ae6f208c1ull, + 0x8e9906d929b03cfeull, 0x63efef34f2119a54ull, 0x7c4392cbe621b7e4ull, + 0xbfe7221602bfc554ull, 0x5fb753204626ceceull, 0xa7b8b59344b684aeull, + 0x26ef615ed8aaa4ccull, 0xdbab03a414ed9fe1ull, 0x10001ef2507743cfull, + 0xfdaf34d0cdd39e61ull, 0xe407ad1c0a1b2322ull, 0xbfd755851333ac55ull, + 0xf5cfdf119d755292ull, 0x91911772130ece96ull, 0x13ccbb9146c6b0d3ull, + 0xa7c5ddb2546162d8ull, 0xf736d11a65b6466aull, 0xe9e3bd970bbb1f04ull, + 0xd60b5f8eea4f5f1aull, 0x42ef9e51d97eff6cull, 0x7485dace3686a947ull, + 0xb2e902cdc33b5de0ull, 0x7d4f51487a504a0eull, 0xc9eb26e8e2424d82ull, + 0x4312f21b03c5f78full, 0xb7c82af28d83c156ull, 0x9cfda701f2079447ull, + 0x929474a15530991aull, 0x9f5c88e4808193a0ull, 0xdc915336bb5df1d0ull, + 0x2a292ee09d90d487ull, 0xbdfcbee3324732f8ull, 0xce68a00132fd1b63ull, + 0x081310d32966dc14ull, 0x54850a9a0a7ea147ull, 0x21da0cf09ddd5d0dull, + 0xd73307d60f2917a8ull, 0x180bad0356f6c0d3ull, 0x6b25f9a28bfe4c37ull, + 0xa2ff1ff7f6d744c0ull, 0x6abb5d5a65834a12ull, 0xba6e8707a04c62c8ull, + 0xbc5987d22b9979e5ull, 0xb69553123173bde0ull, 0x93323c3b50ad2c8eull, + 0x104c9c43000f31d0ull, 0xd589be0d6101c404ull, 0x6025a51b476987dfull, + 0xa8fb9b2d1ff81487ull, 0xce43f9de6d23d642ull, 0x98fdf27b658568d6ull, + 0x16765f334a78a982ull, 0x7efcdc98698ff7d9ull, 0xeb10495bb3b6be29ull, + 0x6e14465555fbdc09ull, 0x805c0a29ee21bb98ull, 0x47bbdcaab5be9731ull, + 0x27ce26f17145f61eull, 0x4e05a2e40fef97b2ull, 0x42388c5643c92d20ull, + 0xed167775486080c9ull, 0xb6c026700685c0f5ull, 0x4392c23e47b88f20ull, + 0xa706e1ffe7312d5cull, 0x42b2ec599c1efa69ull, 0x6c1eeec8a8904c71ull, + 0x916c6cb291ce17e7ull, 0xe2ab0373f8c6e70eull, 0x4fb662fdc5786ae9ull, + 0x2cfb9fa9998563c6ull, 0xe4d567dd3e224dd6ull, 0xf1d0d35c09fb2544ull, + 0x0f46c5cf66d39136ull, 0xba30ddb6b49ed15eull, 0xa7d46e17cc4300b5ull, + 0x17a1934c7e486d75ull, 0x1e705d54f9e115a7ull, 0x4fb2c3ccb8495170ull, + 0x8cdb392d6a0b1086ull, 0xc926b29a6e92876aull, 0x38de5d1e6ce8c736ull, + 0xdc46bb9287e95f41ull, 0x194b6e9c2f4f4f8full, 0xd5c3e3091deb2209ull, + 0x73d97599f703fc4dull, 0x323a8cdda92b559bull, 0xb90d706d87371652ull, + 0xdbad77b65d84ec1cull, 0xa670e081aabcf081ull, 0xe9d6a77baabb45cbull, + 0x7b5085eef1dc69a4ull, 0x3e229a2f3442e1a3ull, 0xbfca1a5345399298ull, + 0x696b91a5aa95053full, 0x89ee41591e0566adull, 0x558e4ce389a357fbull, + 0xcae038bcc6dcfeceull, 0x44f2df3d4a36851full, 0x6e8f89f12a3da7afull, + 0x087ca43bc84dde5full, 0xa75e5a20eab6e32bull, 0x16d4d23697d0400dull, + 0x8c2fd6f02c75415eull, 0xe19ea1abc3e6a2f1ull, 0x7d8a80b81cdd905aull, + 0x2d1b3f3355527b78ull, 0xb4c39b81676a5c96ull, 0xa5af63e2779c710eull, + 0x90c0447485e62745ull, 0xbf436c0d3dbb8643ull, 0xb7b446844f7c6e4dull, + 0xbdb942b903e6c600ull, 0x251982c2bf05504cull, 0xa9814dc13d4bb28cull, + 0x2359eac9c4b5a151ull, 0x772a81319249dc78ull, 0x2ccb8d47d26c8908ull, + 0xa06ca0de1f4831f5ull, 0xbf9b1a4df67bdaccull, 0x52f51eb80b27bc4bull, + 0x91f552c7fbe2b7acull, 0x8d57f2de2e1bba5aull, 0x29d234eb083f471aull, + 0x191788fc1f01bb54ull, 0x43069a59fab639d0ull, 0x9aaca095cac6b149ull, + 0xd660385bdf2e714aull, 0x3ac68e2382957837ull, 0xa34e7af7606847b4ull, + 0x97ab81e56a14d2fcull, 0xabf013d9dd11dca9ull, 0x7128c306f46c9136ull, + 0x29683bdad8bdbc51ull, 0x95c65c1e137c7fbcull, 0x5e18b0eb70720a29ull, + 0xb762e23fb1635e7bull, 0x2d5c08d703449614ull, 0x158418d1937b214dull, + 0x812b64c394503b70ull, 0x714705b906d75687ull, 0xd565fb39cf5e877eull, + 0xc00960a22a0f27dfull, 0x2242015f12682055ull, 0x8e06cd7e02188509ull, + 0x01c4b41fd4e4e2aaull, 0x4525aede6cc9edeeull, 0x011a27456d54d45aull, + 0x257f3ffca489d174ull, 0x8f25f5035a5a2db2ull, 0x3dffa95b8fd54850ull, + 0x4ab24b1d370db50eull, 0x2889040b210e896full, 0xbc2b803f74c18895ull, + 0xa4b121bf78160a60ull, 0x07f3e063baa7a985ull, 0x2932fc803ba9bb6full, + 0x2d814eca74905ffbull, 0x8cbd8fdd7e77a368ull, 0x158a55823f60c538ull, + 0x36a1409d4d1415c7ull, 0x5fedc75c86812a01ull, 0x311e36ab05bb1264ull, + 0xcffa117817fbc63bull, 0x8b814f1d2dbf5d42ull, 0xaae9ce1dadfbb3f3ull, + 0x9e679e85ea7b5ea2ull, 0x3debc023dd7ef851ull, 0xcf560e89bbd0b8fdull, + 0x27f3a9a91c389416ull, 0x192f4a7d11338ea3ull, 0xc4da433263a6f93aull, + 0x03df0afda072d00full, 0xac0994183bf85853ull, 0x191afc10345afec1ull, + 0x8ff2ef15cf8153ceull, 0xbad400dd966e0c1eull, 0xe0598faf38a3e334ull, + 0xbcaf19608d210e6aull, 0xd578057bd4ea2ef3ull, 0xa2399641302972f9ull, + 0xc3191a87508a10e9ull, 0xe71641c426feafcbull, 0x03b7acbd32a11e1eull, + 0x6cef641a977889f4ull, 0xe1646579522f49fcull, 0xb5d7b5458e549545ull, + 0x340615826180a08bull, 0x38100fc91ae0f282ull, 0x7c9277ddb04011c3ull, + 0xe001b675e055332eull, 0x8eb2435ff0e2b54eull, 0x9d810a919965aa05ull, + 0x263a77e5abb97ba2ull, 0x4f31f50a86d4c9a1ull, 0x8ae69836ab18778dull, + 0x75b264d691d35208ull, 0x64b84a898941c171ull, 0x9fcb566ccf3924f7ull, + 0x297a2187a71d8f0cull, 0xa2b8553caa1268afull, 0xca4bacc8eada1b89ull, + 0xf1e1bc411e7fe25eull, 0xbc1abc29f160e390ull, 0x89fe75ec69e0f412ull, + 0xb9fdababd9112251ull, 0x9cdec869cf36ed9aull, 0x70165eb314b46589ull, + 0xc3d47b7776f47840ull, 0x86d5f374cb24fd23ull, 0x7a99312fd1a8d325ull, + 0x772a52face61fa06ull, 0x52232d71bb48306dull, 0xd4f868a8ec176009ull, + 0x632d301d636e914eull, 0x723f5f9a11f7a1aaull, 0x60c19bcc54f476d5ull, + 0x1c88d13ef3e7a9f0ull, 0xbb36fa4f693952eaull, 0x2454392d66a8318bull, + 0xbcf3d583630c60beull, 0x9487c18419ef5bf0ull, 0x9d9f764ffc5d26c0ull, + 0xde1ee83d14f9f4a9ull, 0x3f257a16eee40d64ull, 0x27c87d06103efffaull, + 0xead7731e7b1e5cdfull, 0x14444bec9ebdfddaull, 0x82cbccf2366d4e2full, + 0x3f97e0ad4f5d5acdull, 0x79119f7d2ca17ae1ull, 0xc0c6bf188b8be751ull, + 0x492368bc87b382eaull, 0x1dfe86f61a47f52aull, 0x74ae15677246125cull, + 0x1bbe639ca8b6e2ceull, 0x308bce67f6ca2a1bull, 0x0e83895ffc472c22ull, + 0x4bc6209a5e8001beull, 0xb4680eb615bdcdc8ull, 0xbe6bab517da442bdull, + 0x85823e2450788976ull, 0x4f796e7b3e146560ull, 0x845fff563e86573dull, + 0xa9f86c35d168e097ull, 0xc67aa4aad955b6d2ull, 0x3f1b4e5f5f5a37f6ull, + 0x2150b2e55fcc9a0eull, 0x1f59c3fcb3d0c3ccull, 0xd33c0a534bef8a94ull, + 0x8dfd60777aca5dbdull, 0x59cd7490763df86bull, 0x08963a5222230860ull}, + DynamicArray{ + 0xcf3280d647da21a9ull, 0x679a17d3e6acf495ull, 0x720c1c4d381a1d94ull, + 0x9c57d04f29960f99ull, 0x3f6dca5d065f8615ull, 0xc8f271a5e512dfe6ull, + 0x3bcb1979fbd71cb6ull, 0xbcfe3f12172077d3ull, 0xcd18029802a007deull, + 0x4a234b3d1f2b9446ull, 0x8c978840d414a198ull, 0x61fba859f20c34baull, + 0xfadd1be5a60421c0ull, 0x9810317fa957c36eull, 0xfe53f7831c74700dull, + 0x172223afbd195476ull, 0xb17a841bdd61b778ull, 0xe9d501a65132e287ull, + 0x8b9ce36d91609584ull, 0xd32a8a6be12b0508ull, 0x1c148adec1826ab9ull, + 0x78e6c199c539b99bull, 0x2ce2e2195b6ee8eaull, 0x87e1139dcb176013ull, + 0xd682cfac37988390ull, 0x8854429a29a336daull, 0x24bdb0e26af226c4ull, + 0x5a9a7de2e8997348ull, 0x1e308ffe357ac13dull, 0x17d8ef2d1efb09bfull, + 0xfa572c4bab2df3b5ull, 0x9acb98b9e5a723eaull, 0x108a482e9d3c2528ull, + 0x5ef39ce435543f5dull, 0xe9fff7594d4b8e80ull, 0x90739ab291fb71e6ull, + 0xb80e2f7fa1a56649ull, 0x8f22df314e27dfa2ull, 0xde714bc6dfca4906ull, + 0xb7e166753b6022b0ull, 0x8a58aa9dcd47994bull, 0x21e60845d5cd2450ull, + 0x3be2d02ce5eb30dbull, 0xb792873c7a97b216ull, 0x41243af51f423d68ull, + 0x5b9202e08ad73917ull, 0x2b6e9a23a09ff151ull, 0xc571c62cc65b76c9ull, + 0x012b9140d6ece58aull, 0xb8487ef57ac44f5full, 0x45e3a7d372f4ab1cull, + 0x996fed56f44d9185ull, 0xd064122f293252fbull, 0x0f755e51b89401daull, + 0xac6e4ad5109412d3ull, 0x03b6d6b868b72a99ull, 0xc33348e34df6679bull, + 0x5f3d78918303c3a9ull, 0x5910c63ce1f84e78ull, 0xaa62bcefe098cf10ull, + 0x59719d8ac6d38b2eull, 0x20e1f33718c32145ull, 0x29afda4300a7bdbbull, + 0x42ae72250de7196dull, 0x1ddeae4a82413500ull, 0x835e5153031dabf7ull, + 0x7009d75768b84cd2ull, 0x7640e5c2f55143b4ull, 0xfd915e61840e4f27ull, + 0xdbce2ed74b016515ull, 0x60fb11c1aa3f179dull, 0x3b4021ddb8be8971ull, + 0xc4fffa670428d3edull, 0xbba28852265c236aull, 0xaffff7e18a4b7d77ull, + 0xa9a4bcbf5f524918ull, 0x4338947c433ced88ull, 0x2dcb3c3357fa802aull, + 0x574f22b976271751ull, 0xef239f62792de08eull, 0x91ce251feeb66897ull, + 0x080c1f3937974e9dull, 0x729ca5b238886c36ull, 0x813e13332ae07aa6ull, + 0xdbfe8b4611af25f8ull, 0xff1b838e6108693bull, 0x9911cedc00962658ull, + 0xbf458f37d369a287ull, 0x4f8d39c1c594d2b9ull, 0x6cd4e8cef81df3d8ull, + 0xfb50de404b9e3245ull, 0x723ac55da4c241cdull, 0xa51f7329c9a774a1ull, + 0xf17ef5b5e806037eull, 0x234a1451ea286274ull, 0x5f1f3a3b738a7ee4ull, + 0x968d3b15ae7b7a3aull, 0xd97c7790e2c29948ull, 0x1a323e969329edb4ull, + 0x185a000d2edcef14ull, 0xfb5bcfc7597079d4ull, 0x884141cc6ec5df72ull, + 0x1d2e5a864822b5dbull, 0x75c898eae8d560e4ull, 0x0d5868d5138fa009ull, + 0x409078a210082efcull, 0x52efd218c27e1a6bull, 0x706ff41b099a7aaeull, + 0xec1e15fed87bf321ull, 0xa2cc11f819197df2ull, 0x883ad5993ba46338ull, + 0x8a900c82f7bc8ba4ull, 0xdf57a168c8623ae0ull, 0xc0aab015fc8bda61ull, + 0xd0ad0badc8c3a57dull, 0x7b7865dd1bd5143aull, 0xaf7dca64e3f532a1ull, + 0xf8c0583166cca823ull, 0x2e2540dc1fa17cb2ull, 0x8296fc28de9304f4ull, + 0xf6615fc60127ba7dull, 0x5d9eb5607a73eab7ull, 0x44327480e8823f8eull, + 0x13c637a22f98abc6ull, 0xfe7cb054fd194372ull, 0xcb7c47554f7ab304ull, + 0x831261fff9c550a6ull, 0x6c2c5627ab87be47ull, 0xd4e39e12b3317532ull, + 0x1c9f57331c8d3c43ull, 0x12319dd551880d47ull, 0x61531f57039b498eull, + 0xf2c3438d5d2a4ee7ull, 0xf9657f84711a8472ull, 0x16f900d08b79af5full, + 0xe1f5fee835c1aa2aull, 0x382f6425161bd730ull, 0x6cfb001bae2d0960ull, + 0x3bf2f050c37e7705ull, 0xc4a2a552c1453dfaull, 0x83f037ae261f14bcull, + 0xbaf6441af5e2a25cull, 0x281b308c33c94eadull, 0xd11b6c9040b4300aull, + 0x2008369dffea0b5eull, 0xe934758f9bc35646ull, 0xe069ae0495ff9968ull, + 0xeb56ac1d80245edcull, 0x9b706a1e85c91641ull, 0x000df381bc8915f1ull, + 0xc15807cbaee43ae2ull, 0xf98132e4542934a1ull, 0x9be89fc7dd63be4eull, + 0x1e4528981100a5aaull, 0x07788699fc508d8dull, 0x7406113da168845bull, + 0xbf29d96e18c1ee28ull, 0xb92e5cb8824392beull, 0xa35041b6b13b8e71ull, + 0xd18e760b2c93982aull, 0x3adaa074e9beeef9ull, 0x23c5e3300bce4adcull, + 0x52f17ccdefcf1d6aull, 0x4673195fe0f28f2dull, 0xac167bd023f45df0ull, + 0xe7f012195692181eull, 0x84df63a82dd614f4ull, 0x5306bcac8941a8f8ull, + 0xae6732e02219d8aaull, 0x7a3753a237f56067ull, 0x83cd1e33c08c02c9ull, + 0x9e330e225665804bull, 0xe050a39ea9bdf9dfull, 0xbc7aee39cbc3d731ull, + 0x0d63fd106241da75ull, 0x9dff608ecb14bdcaull, 0x49fbde137d193882ull, + 0xcf2b88af95ddc380ull, 0x71733a517be37bb4ull, 0x101df8a41af28eabull, + 0xa30b38e5d1df07bdull, 0x2e3f3bbbd1b02e6aull, 0x01f0af2f500b27e9ull, + 0x85736034172f6640ull, 0x8520132d03efa2c7ull, 0x50994f5b482f078dull, + 0xeecc2e0e1ef509efull, 0x4c556790eed546d7ull, 0x6011e0d69c65cc4dull, + 0xd8770acca91968c7ull, 0x96a18838e3c3fbdaull, 0x357032e0f532cc3aull, + 0xb340441e6f66005aull, 0xded7ec72ed901b5aull, 0x25ac4c5e806be452ull, + 0x783a1ce459c6ebe3ull, 0x6aa675211144e2ecull, 0xb17bf411bbb0ecbaull, + 0xc7b570979c18369full, 0xc298b7130a773c4dull, 0x972cc677053b34cbull, + 0x335febd14c643e6full, 0x8e883c3c9e0a000bull, 0x1dfe352e53cd5dafull, + 0xdf4b89087b23d814ull, 0x1624a7a1296742e9ull, 0x4bd4a9b669bf9088ull, + 0xfcc1514f7d981c71ull, 0x42a678d9c827401cull, 0xc10989359bbce25dull, + 0x4ad515feb9aba6b9ull, 0xc14da0b13216515aull, 0xbf62a7558dee8005ull, + 0x0f0ebe8fba5878e2ull, 0x8f37160286774b6eull, 0x1dbf29e1b92a3153ull, + 0x708d610e42ce5328ull, 0x5d5e18e75948cbf9ull, 0x93f2f7b6b5554abdull, + 0x192be14f084ebd79ull, 0xc0a2af31b7525b43ull, 0x95854c288b9fe5c6ull, + 0x040c3674c603b625ull, 0x672cd2cc46be1530ull, 0xa272cf04b4cbdc90ull, + 0x3618187878b7da3bull, 0x5319f6cb947de235ull, 0x8a9e58609c1b7fa9ull, + 0xede50c00f9259b5cull, 0x1655e47dac7f7bdeull, 0x8f2e62952c09004eull, + 0x41755abcc3f67065ull, 0xe5bde23eaebfde56ull, 0x6169d87dfd2501a2ull, + 0xebdeaa3617bc379bull, 0x32dc07a2330ccde7ull, 0x975aef62668f34c2ull, + 0x98d51ce0fd685b58ull, 0xf41362cf6e58c0f8ull, 0x3a1a62ee2ae9dbb3ull, + 0x87e72234864f7530ull, 0xb0fb22c8b29e464eull, 0xf62fcef5aa2bdc5aull, + 0x12fc68308d1d9043ull, 0x337072598dabba65ull, 0xb2c57620b1a3e281ull, + 0x9c6f7f66e850f2a8ull, 0x0bee97a3186cfd08ull, 0x22a5e1dbc7422164ull, + 0x8af0c24026131a52ull, 0x2b053bb6c66411deull, 0x1206e06ef4be2dcbull, + 0xf6e2e8a38d5f0af9ull, 0xbf219adbecbde9feull, 0x5455132c15d71b9dull, + 0x485706f81dae54dcull, 0xb5371a102b4c88f8ull, 0xd18781172686d080ull, + 0xdd09546a77f073a7ull, 0x7eff6d22df724336ull, 0xf40a187ee45693cdull, + 0x2b5d62f4333f4d62ull, 0x90439af246b75291ull, 0xc5e98ac8dbf92e18ull, + 0x04ab583596c8eaf6ull, 0xb217c8a45d16180bull, 0x5fb2c1dce3050a31ull, + 0x102cac5d45446fb3ull, 0x8b1758f486b1d7e9ull, 0x3b9b93d62b82f217ull, + 0x7ac2118c5b3f8dd4ull, 0x8af504df98d8b320ull, 0x921529321b58f586ull, + 0xd4694297ed464ce4ull, 0xd908d2e3115db040ull, 0x93d66d4075836d92ull, + 0x91956903308056c6ull, 0xf75b4401b8568bfeull, 0xada3c58b32bf37ecull, + 0x0a05308afc468d59ull, 0xfbb6eddfcdabc554ull, 0xcee2d050914b5c8full, + 0x06413e5a03f2cc17ull, 0x373b2f45a737f7fbull, 0xa7afec0e506d48d8ull, + 0x7b146540cb3ff8a6ull, 0x20c828c1ae8d99ddull, 0x45192946cedfaecfull, + 0xa9fd4192588f3b96ull, 0xeee80cb5aa695a2bull, 0xb46322964165cba4ull, + 0x4cde40f57081607aull, 0x1d26dac5b11f701eull, 0xa8767d88c1df6eaeull, + 0xc16e72a817407d93ull, 0x7fba24413ea2263aull, 0x8ec7b719dea8c8a2ull, + 0x398229ad7f5e0a23ull, 0x25ed82ebda65bffaull, 0xeecf8d42084135e2ull, + 0x53cd9f397868e5efull, 0x28783f6c7d6b92b0ull, 0x2ad6092046a6b7a8ull, + 0x1e85adf61a5262b7ull, 0x8d2d1abea022ea75ull, 0xd5743d54345e9997ull, + 0x620eff0fbc1f7df0ull, 0x6747f4f4405f345cull, 0xbe0fec83b484dc34ull, + 0x759731dd5611042dull, 0x3e46019e14905857ull, 0x433699d84513cd89ull}, + DynamicArray{ + 0x7971e71bd93b1c51ull, 0xfbf3b9d17d4e0cb6ull, 0xc61e549738de9cb3ull, + 0x9c88b41b77272bedull, 0x4628b27482ecbad8ull, 0x51bd78b240299e50ull, + 0xb187f76cd3bc774full, 0x1f0ea2089c4cacd7ull, 0xa51d1e21a7839f21ull, + 0x941b1b73a092a7e0ull, 0x73851aea12fd1994ull, 0x26acd46abc663a6dull, + 0xe33cc9c5b318615bull, 0x697c45f9ec5b5a86ull, 0x1db70c9a6c08f93bull, + 0x338f7ff0abb5cad7ull, 0x1df1521d21f50035ull, 0x7c44475ca53a2722ull, + 0x4a65e11456ef6505ull, 0x7e1fd899b9cd5592ull, 0x1b7c51d1fdb43400ull, + 0x917c2653f78b7471ull, 0xb49fff926eab28c1ull, 0xf0718c75ad38195dull, + 0x0ec6253fe0143197ull, 0xf659bb0ed0e29d13ull, 0x55e8d3ad765c4894ull, + 0xa381b91400493bd6ull, 0xbd46e5cbfce8c638ull, 0x9e557b4e04eb7ecbull, + 0xc332118349f96b8eull, 0xd26e03bb62274562ull, 0x9b1b93a8d49c1a4cull, + 0xa020d01155bbc587ull, 0x29d1ab15b0b97a75ull, 0xce61144b3c0c1403ull, + 0x1fab33f7914df3c4ull, 0x8edadefb95f94d89ull, 0xb79881210938f852ull, + 0xdca163e90b3867efull, 0x19c46e42865ae4b9ull, 0xb68efe922bdd26d2ull, + 0xfe95a4f4a43a551dull, 0x68e1b9b50b9e68f2ull, 0xd04b330ccb5550b6ull, + 0xd8daa7f58580f58cull, 0x4d0738f2414c8ffcull, 0xde2ef12218f6b92bull, + 0x4ee8b68f88195cdeull, 0x945f1343b082257aull, 0xad359edcc6ee71e9ull, + 0x65969f142cf77f27ull, 0x70a810f9aa2da95bull, 0x1e9bf70e9bf2f218ull, + 0xcea5ba9580168e3full, 0x5b0fba29e2ffd60full, 0xf0d12b65edb57d44ull, + 0x6e1413164b98d0a8ull, 0x2adfd9d1fdde5f53ull, 0xb0e2f3f5cb3ebe87ull, + 0x6fe979792f4e746cull, 0x299c7aa36db977efull, 0x2ea5b42b366e2fcdull, + 0x82c5a6f6a4c92597ull, 0x6f36700fbdc9a03eull, 0x3c81e68eb760062dull, + 0x6162d37d3ccc913bull, 0x7a0d66f27a172e80ull, 0x97b032aaf0554cdcull, + 0xede01ea6e7d0c0faull, 0xfa1edd0ed8aee6b2ull, 0x56902cd5171394e2ull, + 0xd3fac3fe3e10cadcull, 0x78d1e749a77c8c07ull, 0x3ee3ff150d02fc2dull, + 0xe89c7754b771f02dull, 0x41ae3f4fc11b1014ull, 0x3dffb40f3e95d79full, + 0xe67bfeea458ad5b3ull, 0x6fd3f2734565996full, 0x7b324910d258510dull, + 0x1ab1e4fd0882a562ull, 0x2f69e5df6cbb3031ull, 0x65b786b931f4179aull, + 0x5b2f67f1b46ed2abull, 0xd09b997e5009ee7eull, 0xe247bb0c98d21c86ull, + 0x60085faeb07f7b75ull, 0x51c4d2fe1a97fea7ull, 0x4050c3b0070bced5ull, + 0xac63a060bd1bc875ull, 0xd9b220cfbb8f8252ull, 0x4e0c500be6607e03ull, + 0x02918a2f17ebc147ull, 0xbe927e1c06032370ull, 0x19d1a74fb12724b1ull, + 0x8c0a9081764f6977ull, 0x1667379af282c8feull, 0x2cac511cc28ea2e1ull, + 0x8a4c142f68a76f91ull, 0x157001b9c3e8455full, 0xccdec8f8d5e13fd9ull, + 0x7130b372184b95abull, 0x19d8d380aeb9bbbbull, 0x2f1b84eb89a5482aull, + 0x3d3fbc43e8ae63edull, 0xdbaea2fa7e6771e0ull, 0x83107f8ec83ccabfull, + 0xb31937cf3fac0a0eull, 0x84a4a0155f250cd0ull, 0xe3c8fba6c74ed0deull, + 0x3db868596c03c4c8ull, 0xacbc3bc801a96368ull, 0x6a48c665d60ff7bdull, + 0xc532b5c0ea4daa19ull, 0x38cce976a6131acfull, 0xb5a62e22f8e95173ull, + 0x3bc21b6698d85e6dull, 0x17199bc5863a9624ull, 0xdedcec21a6a3d622ull, + 0x3dd342560b7baaacull, 0xb9998bba84ba1c32ull, 0xad86bf35d7ba9e16ull, + 0x43a20605174604cdull, 0x7e1ba06cc6e98a7dull, 0xf1bf5c3285243a9eull, + 0x5a37295a00dbd639ull, 0x7c78405e8e47f417ull, 0xe58603cde6028595ull, + 0x176f0cef59cef131ull, 0x8ec5381afab4ac10ull, 0x9a31b2124c233512ull, + 0x64496ac1aa34e0daull, 0xcf530b3b16b5480cull, 0xd6ee270753e14ae9ull, + 0xcd0148a05af4f82cull, 0xdf03b0070ffa0b64ull, 0xd79f788cd3f71900ull, + 0x402133f6a336f3f7ull, 0xc215a0e760ec4bd7ull, 0xfe78037a2cbed0eeull, + 0xd96af43f68245b96ull, 0xa50120867f6dbfb4ull, 0x26bc11f15bd2bf61ull, + 0x5fcbd5d6a3a01ea2ull, 0xaae50a20d542ee9bull, 0xa4fe0642747fc0f7ull, + 0x417aa62c9fc24f5aull, 0xa18e2fbc2f6d08e3ull, 0xd24ffa3b3a45244cull, + 0x57d2b627c0998f91ull, 0x5d49ba79f8fa06b0ull, 0xc15a0eede8fbc24full, + 0x0c244eb43d70200aull, 0xee582d2bd6b39f66ull, 0xfbc525b2e6fd0986ull, + 0xef190019bc1477c0ull, 0xce2088548f3b923cull, 0x441dd0070c31b6fcull, + 0x19730ad0b4e67d60ull, 0x3def630d2a30bf09ull, 0x0718d9df50eacba8ull, + 0x8492f8803f5663b4ull, 0x77ddcc592bdefb9bull, 0x373607717808c13bull, + 0x01fe127a0755710dull, 0xe4ae930b4924b8e6ull, 0x5f87ea1ae7d36efbull, + 0x3ff952a7b062ce6aull, 0xe16c3b1d3c7ae499ull, 0x5cd3b894f0bcd1fdull, + 0xeae65cac2cd42cbaull, 0x600c3df21180d869ull, 0x9779806f685c8258ull, + 0x4e1829bce40440ddull, 0xca630dc9f3bd7945ull, 0xf7c2f83fe079065bull, + 0x0aefc0c733ea73f9ull, 0xeb5159d79c427027ull, 0xcde55778c46b8125ull, + 0x87dc1f6ad5046919ull, 0x257f828fb4c8013aull, 0xa92bfcae88842af4ull, + 0xe4102918f0bc1c84ull, 0x72053d7e1ec11b93ull, 0x62897d98f23c9e2aull, + 0x522fda8b0b927266ull, 0x52bb313f63cdefd2ull, 0xd2ea3bec14024ad0ull, + 0x76b99473c0c45958ull, 0xbe5d121f4c66c45dull, 0xb629b88feab3ba23ull, + 0x1166807146b7a4d2ull, 0x954cdd763db08194ull, 0x9f30070574a4bd4bull, + 0x07106404ab54f1d8ull, 0x24b4093d0aac054bull, 0x36e0425f942db090ull, + 0x0e95526ad14b8e2cull, 0x87b7d6afd4a2ecc9ull, 0x58d6715d15e1c3abull, + 0x76eb8a229f00cae9ull, 0x0cb1f9c4dd3e651full, 0x5cf77732d059470dull, + 0xac784c1ec2a016d1ull, 0x8541f488d4e021f3ull, 0xec02726f2b605caeull, + 0x260056f054dbbfd3ull, 0x135e1bbf1c650216ull, 0xc1700d954e2883aaull, + 0xb571a80c5fc43c35ull, 0x03ff67b0dc0b0789ull, 0xdd7d10ec103cee6full, + 0x4044ed53d52f8143ull, 0x9cf234a8d14bbad5ull, 0xedb18f1bee5eb34aull, + 0x183ccea483629e7cull, 0xb71ae5aea75543b9ull, 0x6d8651110250abd3ull, + 0x35cde4dbf6e548a8ull, 0x4256e68e529b5429ull, 0xf96f4eb86402770dull, + 0x8f1ddc39c1c6b845ull, 0xd8d7d79bd80b4768ull, 0x551ff28a1e4835faull, + 0x823254ae361b590bull, 0xcc24e74d95688b2aull, 0x71519a3a92ce8721ull, + 0x547cbbdc3cfbbc32ull, 0x364af995eb5f9e55ull, 0x6dbe6ae35e44ba54ull, + 0x631040f0b7b70c3bull, 0x2fae16402ad9d3ccull, 0x3b1574dfd68bd5d7ull, + 0x994f097b3e582244ull, 0xebdf52151a2254faull, 0x1bfdf3fb9180a66bull, + 0xecc43804f0b40c1eull, 0x61693a18b761aac5ull, 0x5539078b8961716full, + 0x2bf6d8b9e731d0e9ull, 0xccc8583b8eb811f8ull, 0xe4053799afe799cfull, + 0x3f93565dd6385e17ull, 0x02a24b750eecd3d9ull, 0x6750c0a90f0d2635ull, + 0xa69937a83e441d21ull, 0x9d59ed3ea39ec6e5ull, 0xb0e3940d3e143d6bull, + 0x414f8991f42eb5feull, 0xeb853375918012d0ull, 0x393952f0ba3b1cd4ull, + 0x4116169a13fbbf2dull, 0xe075d49a5e48f806ull, 0xb98d44a4c0f8f8e6ull, + 0xe8e8dcd9a831a5b5ull, 0xc104d92633a2e6a7ull, 0xe403f2d618961633ull, + 0x3c71d53da955ecdcull, 0x74f239f65950574dull, 0xd08f0f6a8b47b882ull, + 0x71d18b9579fae76bull, 0x135b8df8c03c8cb7ull, 0xf1e8ff713d3c5d00ull, + 0x4aa110b630e264b4ull, 0xd0f18ca43f754baaull, 0x4ed91d24cdd35a36ull, + 0xc1068203122ee7bbull, 0x55c7d14216d30931ull, 0x27c433e8c727eaccull, + 0xe08f51dc667d481eull, 0x5bd864ca35c237aeull, 0x75191f7c92542007ull, + 0x5edb07c7a3b3c4e8ull, 0xc977da516706f31bull, 0x4fbff8eef0925706ull, + 0xe712dc4392d64744ull, 0x0d6294d1912b578full, 0x28407cd9616670f7ull, + 0x8fdd0d746720e28cull, 0xfd096c28cabb2176ull, 0xd0f3c623ee9b4649ull, + 0xd21a3691572e51f8ull, 0x9eecb853b93863beull, 0x9ef2435465f59398ull, + 0xcda1417cabd157b0ull, 0x91605012e5c4baf5ull, 0xa21fd98039348ec9ull, + 0x9c6901a247be9cf0ull, 0x66f84fe318af5eadull, 0x6937df600c91e558ull, + 0x6b5891223bcee1deull, 0x88f1475fc7e1fa91ull, 0xd250bbc69e275269ull, + 0x49ba6b61390139d8ull, 0x0e33cc98193f4a35ull, 0xad6414eccc5864edull, + 0xe955ead77b24b78dull, 0x065de4778a493433ull, 0x956f7eb28400407eull, + 0x40541a79c071dabaull, 0xdf22c0292361353dull, 0xeed7e18a2d1b6ae6ull, + 0x496d9241a34429deull, 0xfa78d0eb7df39bafull, 0x590725032dc2e16aull, + 0xd5dff2afbec7ea15ull, 0x649c82df0388c636ull, 0x6dc5a8169ae7de52ull, + 0x957a87a2e103e4eeull, 0xb8f740b35fef67d2ull, 0xe1de4b014fc5feafull}, + DynamicArray{ + 0x5786a6cb1d496844ull, 0xe2c9687c86d34845ull, 0x484d284c7ce94b86ull, + 0xbed74978da2a1017ull, 0x30b3123e07c95738ull, 0x43f0ab673c0b35d6ull, + 0x14543f682f9092d2ull, 0xf6d09368b3788e73ull, 0xe9d76f0a8fa240e5ull, + 0xf107b6cd9e6669adull, 0x3d5609c489f6808bull, 0xda5f1898dfc91061ull, + 0x7dc5dd6d5c7a22b5ull, 0xfc75bbd229462b94ull, 0xdec9ca7f9bdd8cc2ull, + 0x7493f644c4297f95ull, 0x88f0dee8c54206acull, 0x8201acbbcd7078d7ull, + 0xeb36e12eeacbfe4aull, 0x12bb517851a64401ull, 0x08d080fc190e4268ull, + 0x3f526a5d61ea4897ull, 0xc2824326a8def4edull, 0x96a15af2811d6808ull, + 0x92729c6148efd22aull, 0xda117534fcf75175ull, 0x835c727bad152813ull, + 0xc20c0380547aed23ull, 0x0a85f96a49a69e44ull, 0xe6eb884248324816ull, + 0x340f5aaa6695691full, 0xfa83aae765046cd8ull, 0x8130fe751e1baa81ull, + 0xf5a6711c7a261f9cull, 0xaa16f0a583973e1cull, 0x54d2e76dd06836bfull, + 0x6dbf41eefe5be71dull, 0xbf5546491f0a695dull, 0x48e01700e689d685ull, + 0xccad865d309f7296ull, 0x0e9fe9ed99aaafe5ull, 0xdca1f76b5bd25b8aull, + 0xe9cc44574bbe03f8ull, 0x771958c64729311aull, 0x6a6e83e0b5e03748ull, + 0x181ad13d1988a50full, 0xbb2b48be048f0c74ull, 0x2357e44017ff6f72ull, + 0x9d28219f682df271ull, 0x011e43b7dcbe0880ull, 0x70edfb6961628c2aull, + 0xb40fb6a0d5a15357ull, 0x20c8ab77b61ce348ull, 0x6ed8e86531c4b879ull, + 0xb7a346ab33fbeb64ull, 0xcbeca7dae0b81152ull, 0x353d4eeb3663afddull, + 0xf34c33a84ef09e63ull, 0x7c25fc9f87bd934bull, 0x3a5e2a006f4dc701ull, + 0x16720008269e9cc0ull, 0xdd340ee3274fde0eull, 0x5991fbf8d51da88aull, + 0x8f552d0b301cf5f5ull, 0x49310f9321255257ull, 0xa6cd7a3410ecc937ull, + 0x622e2ed081694f92ull, 0x6051fffc227310fcull, 0xec77eb62094f22fbull, + 0xc4a113f5fda1a749ull, 0x98b8ae8c5a09c3cfull, 0x71dba3aee1fdcf7cull, + 0x6c9a7e21690fbc41ull, 0xa2d7ce9f6a3054e1ull, 0x75d715363b9e49ddull, + 0xe46011c94cd17393ull, 0xbaa900fbfd6c7b28ull, 0x07078fc28b0a1c51ull, + 0x5a1d049a4cf373b1ull, 0x1fb539d80055936dull, 0x74ca50459f04c499ull, + 0xa75bbe3e9f5d3045ull, 0x32010b40b0a964c0ull, 0x7870d50664a5abceull, + 0x3664f8bde7c0fa17ull, 0x76395f5efb351ae4ull, 0xba6e137bacdad496ull, + 0xb076031c2998eb06ull, 0x336bcbb70e750152ull, 0x291f8bf5e8041a1eull, + 0x2414b41a533f9445ull, 0xc2ee5210f9517a3eull, 0xd4c514b679e5ba25ull, + 0x01f066c9ee3b5b84ull, 0xf48f45af5e8f439cull, 0x74ab1242d9af041cull, + 0x8a5e93e064f9cedfull, 0x784b897da225b698ull, 0x79144c5b983fd363ull, + 0xbf910bcd77aa5e22ull, 0x329072af539a334aull, 0xf09ee7ff993d18d4ull, + 0x05e987203a024bafull, 0x745fa2d6e6fa6100ull, 0x1222d1ec015b1947ull, + 0x8b5e83c23c68a239ull, 0x90f52329868b2fabull, 0x668dd62565b28386ull, + 0x405384923e7576aaull, 0x3d085a244fd2dc53ull, 0xa0221073e8c991d2ull, + 0xadc83acefcff62eeull, 0x96e5e7453825f81cull, 0x796e766db7fc415full, + 0xe7da1bfcbf620bb7ull, 0x5f2fdcfb67cb5e15ull, 0x5f5aba31835925ccull, + 0xa49fb444f12380b9ull, 0x34c7eef1cd8f47faull, 0xa4d77d944c5aeec4ull, + 0xcdd6286133d60e68ull, 0x62a49d5a0c5def37ull, 0x1d062692008328b0ull, + 0xff21771156321c95ull, 0x5479b31090812e7bull, 0x2b2bf07bcc9421e4ull, + 0x3bb107c2588256e8ull, 0x9bcf1d8014c331e8ull, 0x1fff31eb2e5636a7ull, + 0xf41590da135fcdfdull, 0xa6292fda21c384a0ull, 0x49f15655fca3a6a2ull, + 0x1d9837db97bc05efull, 0x4ff0d785ce44ac4dull, 0x06e9daac7cb5d2b2ull, + 0x5a1a3821281ecd70ull, 0x890fe5c050ed0277ull, 0x6c90aa96285dd388ull, + 0x59b7f70e4af5e06full, 0xcff2150e62fe72b9ull, 0x28c408337de57b08ull, + 0x1a14117a172445b3ull, 0xbb9220c8b60dbc0aull, 0x4f34e4c7ed97863dull, + 0x801c30067007d079ull, 0xd62931fe21602ea3ull, 0x830dc5f77c7ccd0full, + 0xba48011ddda70ad5ull, 0x00e17a2ba91d6986ull, 0x241960e7e45cb673ull, + 0x2ba496d2e8acce2full, 0xaa4dc48417d6a590ull, 0x2e045dabe86dfe66ull, + 0xc08e77c6fa75af0dull, 0x2f948aae8bb08a78ull, 0xc60767b2fbea2da5ull, + 0x0790b288469f4697ull, 0x5d513719c8f4dec1ull, 0xb68ae7d892c1eea6ull, + 0x9c33e7e16f4a6902ull, 0x730396f559f07c9dull, 0xa56b1a223290bd3bull, + 0xe9bd1c4547ae26d5ull, 0x4a7d24dddb04fd49ull, 0xe9d741daab9d9a85ull, + 0x2ed456a9aae63e3full, 0x4e9f86bef56c9311ull, 0x2cc3131b26a4f956ull, + 0x41134710119a1447ull, 0xe04a91ab5ceea0aeull, 0x99a915455d26c520ull, + 0x68bda32d195d6a90ull, 0x1e347b15948117e9ull, 0x46349634ae106bcaull, + 0x33f5dbe1a5489f57ull, 0xe57dbef238f4143eull, 0x0961960d08779e38ull, + 0x59a080e20e61c4b1ull, 0x417b336056e2df58ull, 0x5e34ef304fc34d68ull, + 0xc2cbb3350a965cf0ull, 0x5efb3ddb7ee59836ull, 0x191ab5a525ebba5eull, + 0xde69bd754487f208ull, 0x192363e82b1a0f64ull, 0xc2b87193565dcde9ull, + 0x9aa5bd0a99b27c76ull, 0x7a614af95fbb7931ull, 0xcf5abeaed5f99474ull, + 0xda05d500e7f716bbull, 0xd05d35511def270cull, 0x9e394c06c59520deull, + 0xec3598c953acc710ull, 0xa43baec6dcf563a8ull, 0x35ee6f3e5ecd7afbull, + 0x0bca00d09549ea4bull, 0xa711358fcca0b894ull, 0x1e692401f2f2f14cull, + 0x7f049a94730ccd3dull, 0xed42dd3be8823904ull, 0xe29122f5a509ddf3ull, + 0x6ad8f65ecf89a4bfull, 0xabd12b915221d8bdull, 0xaabfcead934ef836ull, + 0x91f077970a90cb0eull, 0x4224a55557ae7a94ull, 0x6fdb800f05f09d7cull, + 0x1bb5ab281ae7e488ull, 0x13e7763ecc6845ebull, 0xc503680114528d0aull, + 0x08d2483fa6245fe8ull, 0x4e769221b58fe374ull, 0x53ee623ce8cbcdd2ull, + 0x3e7c3191e6c43246ull, 0x6c47ece485aef03eull, 0xc75a75157e4a274dull, + 0x2a2f6af1c44ea587ull, 0xa2d59964e7db772eull, 0x9397b9246272c056ull, + 0x80c8ef287fbb99ccull, 0xf5d9a7833c415aaaull, 0xe919baa633973dfeull, + 0xb4968db7568c7de1ull, 0xe5bf2282dff55d13ull, 0x5e5f6758bc200c60ull, + 0x85809f1c74788382ull, 0x78b1060797fa17edull, 0x2a3a708273f4be4eull, + 0xc67ceaecce73259eull, 0x8b89c5687c22f8edull, 0x181766f42adc999bull, + 0xb80e57b88ba89a41ull, 0x43fb11dd05868772ull, 0x101ff3b6cde8a9fcull, + 0x251654f000a7757dull, 0xcea93e525718df32ull, 0x0f0f5d5ef871bc5dull, + 0x22ac7fcc5c1ae928ull, 0xb8a20686b64a87e2ull, 0x7613188af3fe0ef7ull, + 0xa140aa721d8f74c7ull, 0x47d813e4d4d72b8cull, 0xac85c80030eb3389ull, + 0xdac17efff9eb8821ull, 0x50e9224b0c1df158ull, 0xa74cb8879bbf63deull, + 0xcc392451644323f9ull, 0xbdbe03cc99a1c8e3ull, 0x01df40ed47b46204ull, + 0xee6c766bb7b29f80ull, 0x651bf14d0224b67aull, 0xa2814dadf065a7ddull, + 0xb95f852e55f1d3ecull, 0xc0d56758f78dffaeull, 0xb4673cc4b189807bull, + 0xa36e9615d9c9e5b7ull, 0xfd49d06737d0a7b4ull, 0x89373137247a95caull, + 0xbd2271a9ff4fb30dull, 0xd0822715c1a62416ull, 0xdd22bfed655c37acull, + 0xef8d2b856c0d3db7ull, 0x315540b48060728aull, 0x922fda5f45dbb72aull, + 0xd829c8aa2ffd0755ull, 0xc049d821d2b167c8ull, 0x636c117e3a31f308ull, + 0x488943a08f8a0916ull, 0x68e907d98ad35257ull, 0xa54662897de0b374ull, + 0x7195d81b1ab6e947ull, 0x1b66c844727fdddaull, 0x52a6b658b3f1d25aull, + 0x413ceb571f984342ull, 0x87f5ee772fdb2d1full, 0x344940259564e22cull, + 0x9e2badaa93449354ull, 0x958488000dd34bddull, 0x5902a2993fb8eb64ull, + 0x449968fb0a0bb6e8ull, 0xdd10bda021fc06f2ull, 0x4df89807b708a1c5ull, + 0x30cf875ef5ea45a6ull, 0x1f2f4c5436a7f96bull, 0x25314d0be94926feull, + 0x312b9756927d396bull, 0x930191ccca506a96ull, 0xeb67a025913f6dd9ull, + 0x0d0ce24a4c42b5efull, 0x34ba6666db8e6355ull, 0x06466420ba71e603ull, + 0x3ce76ede3058ceb5ull, 0x19866ff5019c38b9ull, 0x9b1dfce49f82c275ull, + 0x9a3c6478179ff437ull, 0xe779ebd8251b2603ull, 0x322ba22a45682cb6ull, + 0xe6a5ec1bd7eb45f3ull, 0xe3b674acbc8c341dull, 0xde0dbd661131da97ull, + 0xbe7b18e9a211c493ull, 0x8c0af55f5849a98dull, 0x67e06bc9de2cabeaull, + 0xba6a218421aeafe0ull, 0xe6ecd0e90a535a4full, 0x7afe05a9a90b7f6full, + 0x08c49e275ec0cbc6ull, 0xe721d50822dac3daull, 0x9a0bd403ec8945ddull, + 0xd0330f5be9a103e5ull, 0xf89c514394f880bdull, 0xbfe90f4554ad4c66ull}, + DynamicArray{ + 0x493a29fa4349dc15ull, 0xf510776736a6de38ull, 0x78943e492125f662ull, + 0x23ad034b71878b13ull, 0x0b6667a62767b613ull, 0xa1b2e3ded5341f6eull, + 0xd9ce442af7b00428ull, 0xadcead815ee30459ull, 0xc1172a9e6cc5bf8full, + 0xd4268f49a03d2f9eull, 0xbfd5b0b84452155dull, 0x82aa28ef0613c8a5ull, + 0x02189fa3e3df7a3bull, 0x5ba3f3e296991986ull, 0x28d99ebf2882e1feull, + 0x37a45c1de57e6e7aull, 0x5eaf9de557fdac5aull, 0x7940890608154aa0ull, + 0x447a64670c9e9f61ull, 0x3da43b441bc73cefull, 0x50f638450df7ee9bull, + 0xa3b27f0547dc284dull, 0x789e350da72df459ull, 0x9fed984435fd80b4ull, + 0x4f9a74b92087cf2bull, 0xbf38cc43d194ffd6ull, 0x1a9ca623d2bd7ebdull, + 0xf5496df4eda96449ull, 0x3f77b537f1e0b001ull, 0x7688efdceb09ed0bull, + 0x08282f416b2ce182ull, 0x73960c3551ad4b2aull, 0x87b467ba21483540ull, + 0xd1ca264f96244119ull, 0x5c06a264da609728ull, 0x11cf4284680a7a73ull, + 0x7a98330e43d6707full, 0xd798e0dac4862f75ull, 0x5fb33f009b1b87f1ull, + 0xdfbb237e277863afull, 0x49f402fd7cbe8945ull, 0x55dc1041d4810a8aull, + 0x1d412ed54be86c1bull, 0x2c67cb35f47cb9f1ull, 0x812b6b0993e52f3full, + 0xa6e51249648f7c23ull, 0xdb6efd4e5bd2006dull, 0x4725a679b6b4ab8full, + 0x52f265ad9499bf5cull, 0xfd9b427432f39680ull, 0xdf0df2a44deb5d07ull, + 0x05774ad1ad5bc331ull, 0x5ec051b42a551dc8ull, 0xd25123b2cb792025ull, + 0x36dc5f50d86fdf31ull, 0x738c808c2317716bull, 0x1e037061f9c2502cull, + 0x38e87578d6a7156cull, 0x8d32f0281638bef2ull, 0x3f2ebff9cd901fb9ull, + 0xebfa5e50d28c3051ull, 0x21978bf5dca112f4ull, 0x6cf6b0f64fce5cacull, + 0x550e75cc97b48421ull, 0xaff93ab51a59d354ull, 0x6ae5ffb02fe3adacull, + 0x3d5099fcdcff986eull, 0x0fcc1c408713ddedull, 0x5a47622cc8c7a2fdull, + 0x816f9b7d23fa2a3cull, 0x3acfad2ce4597ba4ull, 0xa23921df9b1b70e1ull, + 0xf6f8df4a6fb925d3ull, 0x131b661b5e53f7d6ull, 0xa6be38dd536d38e8ull, + 0xcf0a836e557cf53cull, 0xcccdcc35ec88ef22ull, 0xe106be19c8292ca2ull, + 0x2b426f07a0a07f91ull, 0x559a68d3c5d26b54ull, 0xfcbda2fa3c666585ull, + 0x7ac4fe3e2419817bull, 0xa87f3328612ef0afull, 0x48974d9f5e9bead9ull, + 0x462fe46193934ba0ull, 0x08b7f4e56f073426ull, 0x410b813fa638590cull, + 0x3345485ce77100b0ull, 0x6a7ce8a2bc78ce41ull, 0xed730148fa017675ull, + 0x706ec4a5c284525full, 0x07bbe66e96ee2801ull, 0x8c39629baf685515ull, + 0x8685272e749abb5eull, 0x67b9c17c21a22f91ull, 0xaf92d5c045fb8e81ull, + 0xf37fc1d78f2f191eull, 0x5f89604fb8d7b720ull, 0xb3680f7666b53ce2ull, + 0x0e1620c8f5654936ull, 0x3703e64ecfbb93c2ull, 0x828cc54cb538d815ull, + 0xe359cb6629500dc7ull, 0xaeb8d7a912e28126ull, 0x2b452eee6adecf96ull, + 0x7f5af34143613a49ull, 0x6f8d0452c70aee25ull, 0xa546c1d43ebda4a2ull, + 0xdfcca07a69b0d1e9ull, 0x2afff5bd618f061full, 0xfc8d94d4813f7453ull, + 0x04a6ae5df47373e6ull, 0x0d6ea4ffadc7ac0aull, 0x27a6068d348e7936ull, + 0x8cdd4284daa08764ull, 0xc68caeb57fd75298ull, 0x685eedf5f269bea0ull, + 0x8cb7e5674834338dull, 0x02203634a194fb2aull, 0x370f2fe200b2f80aull, + 0xcef4b9fa9cf8cc7aull, 0x2a8a3ba6e4118e46ull, 0x7469b33fad5208baull, + 0xf1e6807fc011dcd2ull, 0x4bc7c38427df4052ull, 0xf03b9b791aea7802ull, + 0x9889ea33c63f60deull, 0xa1d56fb564069427ull, 0xb47b1864ee8f9905ull, + 0xb19f2c20edd31699ull, 0x4b07c41a8bd8a138ull, 0xb0d64be159cdf7fcull, + 0x4262464bfc8eee32ull, 0xc878bf62a528f585ull, 0xfab114175c8836e7ull, + 0xcda4a5775c5b77b1ull, 0x8c1211a1962e3aa6ull, 0x7045bf7e6b1980abull, + 0x7bc01be27665004eull, 0x103371062529996bull, 0xc98c694ce5e42048ull, + 0xe307fa6b20379868ull, 0xf7b1e2b8ad3b41a7ull, 0xba41364882bb3a50ull, + 0x4d6004870add3df7ull, 0x09cae1c0427a5322ull, 0x17d8bce3a5ce369dull, + 0xec4b882ad2fcadf8ull, 0x7675fda0d036dfc8ull, 0x14bc4de5dcff8c86ull, + 0x34a948ddd3b2e49dull, 0x21120524d8f5df8cull, 0xefd3c9b574b6531eull, + 0xc508f9ca7d558653ull, 0xb544b0d8c91615adull, 0xb37272d6b4e0d7bcull, + 0xfe7bde0cf0a7482eull, 0xbf0c68dcbf49251dull, 0x052b5205641421bbull, + 0x0427658b2e600b19ull, 0x082c6ebb35a2b7acull, 0x75b11678d6c4865dull, + 0x460c50901ee1189aull, 0x8b1216946dd9cdcdull, 0x625653199c404f1bull, + 0x7c28c3fd753550fcull, 0x96dd43b4338c1c9bull, 0x8ef40ad2bb8d8f55ull, + 0x7e1bfd3977e34b2cull, 0x4a032b59867ad394ull, 0xb29e421146193c9bull, + 0xb8c8b7cac384f1eeull, 0x58f8ed009d7d236eull, 0x2ad63436986cb204ull, + 0x8d175ec0e6ce719bull, 0x3bba3bff1fd0d245ull, 0x37c2b8a1a4d8bd73ull, + 0xd434c9434e868c92ull, 0xe688b1a29de8d93dull, 0x74bb68cb7afad758ull, + 0x7066e20ca7679db2ull, 0x21d4c04cb772ca8aull, 0x88712fee76542183ull, + 0x634bebb8059cdbd6ull, 0x0d59d1c8164ef1f0ull, 0xe12e72130fee11a4ull, + 0x7883089d40400a4bull, 0x7ad9e2c175fa26a6ull, 0x4b026edfa0dcdd3eull, + 0x52a67db465f0f52cull, 0x802be91fd6ae643aull, 0x9ced90d06fa30ba6ull, + 0x5e47e8c6a475b1b8ull, 0x6615577e5c606c18ull, 0xedc2781ff22d44e9ull, + 0xe8f091f3c5dd6651ull, 0x2056b210a931d2fcull, 0xa2d46030f2c8cf6eull, + 0x9a63b416424ee9d6ull, 0x1a3758b8ece2f5d9ull, 0xc5aa83e8b5aa3b28ull, + 0xab999146db0b07dcull, 0xf24d951412aeec2full, 0x017e815c0a42c5a4ull, + 0x13397772f0772f1eull, 0x94f7bd791efbbcecull, 0xd65b3fa91fa9a35bull, + 0x0c42391c31399002ull, 0xa7bf83fadb6941c1ull, 0x57f126f626a48060ull, + 0xc9f5e0fced6d20f3ull, 0xbc18795bc5db0ab1ull, 0x9b013dd9b83b2ae7ull, + 0xfd8f2d6dd32d71b0ull, 0x6312c3b44e62fd1dull, 0xad0f57c91155b09cull, + 0xd418bbd74ce31995ull, 0x3db3ac7bfca9952dull, 0x1e113bcb52c0697full, + 0x3e9a6087161bcbb7ull, 0xcc75d4fea61fa6caull, 0x51a1e2292de9bd6cull, + 0x9b5cfce18aa9e351ull, 0xf670ce3c3c1891d7ull, 0x356cb8ab85151a79ull, + 0x0f8317ae77e313e6ull, 0xf0a426be6a828a36ull, 0xde0c0652d55fae8eull, + 0x8a7dd8bcda922272ull, 0x791651764d8aa85full, 0x9d2e7f3982e41bd7ull, + 0xd37b7f38c806d83full, 0xdc3d849ec03d059aull, 0x06bb57ca4433e18full, + 0xe7c382d5d26f67a0ull, 0xd4ae1f56503e4eaaull, 0xdf70b9bd8e112482ull, + 0x7948a391684195bfull, 0x19c57e9b5b17d6eaull, 0x3166d473503177d7ull, + 0xb9e4909cdfc660c3ull, 0xb387192e4d24b16full, 0x69cf6061d44b68a0ull, + 0x90334ff516f939dcull, 0x3e95cb0d6738e438ull, 0x3220e1875c4354daull, + 0x03016e52161d8566ull, 0x514a3465de5f193eull, 0x77baf7e6643036d6ull, + 0x4400f241853b3098ull, 0xd49fbecfdd32ba4full, 0xb2f3a56c09e26fb7ull, + 0x764adb377d12a227ull, 0x0239fdd6d86593a4ull, 0xadb61530fa401cb4ull, + 0xfd2c098446a41944ull, 0x1e08e2160a6e0f30ull, 0xbdfbee56ed16bde8ull, + 0x9b71aa8efc18bb4eull, 0x2389170caa1e21d3ull, 0xa299c73abbf23f08ull, + 0x6d9aa29275d8cb0bull, 0x2a3c214fb5fc288full, 0x2bae95e883f21c42ull, + 0x93fa4220ba734c39ull, 0xfa7fda66a9318132ull, 0x4e456d8a3e72201aull, + 0x8cfef82f63697f22ull, 0xaf68875bd3532626ull, 0x3a33451d923573d1ull, + 0x6d0ddb5acd38be99ull, 0x4fbe00c9da3c5058ull, 0x6132a98d516995c7ull, + 0xd0ec8372a2ac048aull, 0x11a34f6659437c6dull, 0x3b6e9838508a7269ull, + 0x4367d43016fe1c05ull, 0x07caa32e43fd293cull, 0x09592089a7669f37ull, + 0x388a723a83e97a9full, 0xac6f5aada2082c59ull, 0x0f7869eca805c754ull, + 0xab12bad543679456ull, 0x70cce639eb9193a0ull, 0x50a859792bb1536cull, + 0x1abcfa56294725e4ull, 0xa9bcb82f53a820ccull, 0xc603ef0721e0b7d0ull, + 0xa6eb37c8f02f8163ull, 0x8c26f2a9f8002f62ull, 0xd8eeb0bd2162afc5ull, + 0x6ae908af7380226aull, 0xd7cf873408faebecull, 0x891216724cc2e6ddull, + 0x79dd8a26431e7da6ull, 0x13ea37eb88fbb9e9ull, 0x482efa2d76faeb06ull, + 0x060c7788d101ecb9ull, 0x519b1d0d196b0126ull, 0x81153e0988aa06d8ull, + 0xef1fbe9bf3c9ba0aull, 0xf9fb14c82904739eull, 0xb9614f2dcef7cad6ull, + 0x0306112d5215d8caull, 0xb96c9d714f996085ull, 0xde0e470cad7e5112ull, + 0xc403325e305a7609ull, 0xbf2730147d198ce1ull, 0x920aa4ef675f2b66ull, + 0x2065fb6129ec7d18ull, 0x0e42f22295c388f3ull, 0x3ff72e82d7342defull}, + DynamicArray{ + 0xdafa15cc266c7dbeull, 0x41860f77a10fadd5ull, 0x4417792339ca35a1ull, + 0x074ec759b0260d01ull, 0x707cf1d4474c1b0full, 0x4bfa3c6f6293524bull, + 0xf5ab1133bb5f6982ull, 0xf9b384b4fd99bbb0ull, 0x3faefe7f853f8b02ull, + 0x551eb926ae339e9eull, 0xb798e0f5e2fd82b8ull, 0x1f38c703c6470e3dull, + 0xce7b279b1d8def40ull, 0x850b0f088f4d1cd7ull, 0x99f2116c141e5c12ull, + 0x03a7516128b319d7ull, 0x026ed69e3dca816dull, 0x7659d8d07b438c56ull, + 0xcbf11dfb78491182ull, 0xb4b250a6fbe639a4ull, 0xa6710b4c4cdb5d53ull, + 0x8343fe93fde3faebull, 0x96a7b0b8973be4c8ull, 0xdfd1678856a9a3c2ull, + 0x94f5d02f11c0830bull, 0x554f31788ef7b166ull, 0x9eaf95444e54b26aull, + 0xfedcbb3fe716d849ull, 0xae520b9cf39c75e3ull, 0x5b2e8be416d5458eull, + 0x786e4ca3aea87f56ull, 0xb48a39116412b07dull, 0xb1688905d873f158ull, + 0x0a4db5d97e9074a8ull, 0x8a52b569a3a269d4ull, 0xc4a4ca81b81d8b90ull, + 0xa2b373f05839d477ull, 0xea52fc75ce30a67cull, 0x917257abcb678174ull, + 0xb2d1446f591d0f09ull, 0xeef21dbc2d08cb2dull, 0xd9adbe4fb7918ed4ull, + 0x5615fac79140f8b8ull, 0x22ff5f3030cf1297ull, 0x5f09d37647484f41ull, + 0x95b91f9c845a257cull, 0xe1af22736908d0b2ull, 0x2609e8713976703bull, + 0xf6edf7dc6b2c3508ull, 0x2a4c122e8cd0fcd4ull, 0x1372e5d1cd808b1bull, + 0x662f80d2db19a040ull, 0x06eee7f522c53942ull, 0x9d2e11f69cd3281bull, + 0x5f664f9954c1a937ull, 0x09efb17f89ecaa8full, 0x733ed3dc320c40c1ull, + 0xfbc84d3a73e06125ull, 0xce9d20d01dcdfca5ull, 0xbb377e03f9a202a6ull, + 0x7d205a1e9b50ab1aull, 0xa5f7b42b5795ecddull, 0x3af95a5ff9f96c66ull, + 0xe7c398652c28e50eull, 0x343cc15fc5a0d48bull, 0x06966ee1c49127e5ull, + 0x9255924492c065c5ull, 0x56a921d07bf0ad72ull, 0x68d0fb05975192c6ull, + 0xf69b44799b206973ull, 0xdea7620b081066b1ull, 0xb6c94b1c293c73bfull, + 0xb0a3ccd13043a7ecull, 0xe5987b6a4a8db857ull, 0x1f22fc494dd7cfe4ull, + 0x33a4859eddc571b1ull, 0x8ced49cd0b1323d8ull, 0xb0f7882c4f790905ull, + 0x6446cd9c2b8fc7c8ull, 0x017626ed660fbb63ull, 0x058de108c7159a8aull, + 0x1454c3d2e2c0b90aull, 0xf5924bdcc29a98f1ull, 0xc9bebcb55473de21ull, + 0xee0e3e456db2739cull, 0xc657f4a3720e0841ull, 0x439160622250b172ull, + 0x443cc15b119d5fcbull, 0x3e3a7f3db02d679aull, 0x143c715ed99572b5ull, + 0xf4ade735c4a8c5dbull, 0x1cce234d45f86997ull, 0xbe94ffd7cb7b25a1ull, + 0x013dc7940c933af3ull, 0xaed00183f3772246ull, 0x1039b22b087dc2a6ull, + 0x7f3953eafa840556ull, 0xa9be9dc2d836a0ceull, 0x4595a3954416a281ull, + 0xd5dbc9efd5846666ull, 0xb9a89fcc2ed86608ull, 0x3fd5ced358d217baull, + 0xef34dc27e7595699ull, 0xea48fc85e9b0e047ull, 0x33f6120503e41938ull, + 0x1cc357484cba1fa5ull, 0xef055070e961b294ull, 0x7aea77fb7d84a731ull, + 0x53ad0b617e81db91ull, 0x0299c80dfaca6cc4ull, 0x91b69cdd4db879fcull, + 0x8ba3b02d2c225646ull, 0x498d5585336eef11ull, 0xc99a5ff267a492beull, + 0x29f32199ed884ac4ull, 0xef3809b5a1dff3aaull, 0xb02e79d9bbb9edc0ull, + 0xfb92b14922182b8cull, 0xf1ebbe664b7cc671ull, 0x607d909390a1bed6ull, + 0xd60ec7a704f0e2a0ull, 0x250de80b26c88e94ull, 0x21adb137b799c210ull, + 0xf1ea8bfa0abcb78full, 0xa681ecd18d2b9571ull, 0xcafdd4d119fae4a3ull, + 0x21f41c1fdf215205ull, 0xa2669b9ed413aa75ull, 0xa5ef9cbd7b145a4eull, + 0x97cab71944f1da0full, 0x28ed2df0eb651916ull, 0x3ad6ee62137a1c41ull, + 0x1ca369f68dc0ad1full, 0x63a155ddf3216460ull, 0x299668983b43ea82ull, + 0xd893162d96cf6a3aull, 0x69d3cb9da0771f9dull, 0x5dceb92a755b81eeull, + 0x016296834bf6ec69ull, 0xde4845cd3499a539ull, 0xc66c4fb9ebbbb3ebull, + 0xffbf1e90188770f4ull, 0x99f440012e9c2b67ull, 0xb6ced0e943e67264ull, + 0xca9e65ece7110559ull, 0x81a9e66b6d93d5ecull, 0x2b3c806bbd80d5caull, + 0x35c0a42a9acec1abull, 0x254418b8f7d622d1ull, 0xf7e13e50d4b71925ull, + 0x3a01f6198f8ba4c8ull, 0x2b1ff74eabd106b4ull, 0xd097fe5777343638ull, + 0xc636019e36822a61ull, 0x9a5d2bbbd0392564ull, 0x8960ff2ad8757dadull, + 0x3405c4acb1272d8aull, 0x2c7fc4f741017278ull, 0xcb525b890003a7e9ull, + 0xb7b19ff07594db43ull, 0xd9a18be4fb189dfcull, 0xe7950e26ea3ede08ull, + 0xc4aae786986fe3daull, 0xb196d5e6411258d5ull, 0xcc7ea41c6f90bab6ull, + 0xa39e3029a095b2dcull, 0x0d241a2b88b8faffull, 0xfbda9ed27c661137ull, + 0x2b7de9e5003cb488ull, 0x3d27e6187a9149d0ull, 0xab6074c3f6f11eecull, + 0x37916a26ae5d706bull, 0xa1315e758d19f691ull, 0x71b050a39b3e21f7ull, + 0xb600d29aecbed88eull, 0x9e477a703641e9cdull, 0xc9f02d5601ab307bull, + 0x9fd8648b70185971ull, 0x10e3e8a4c8449681ull, 0xe895e39d16dc6db7ull, + 0x1acf213f5a41ec5cull, 0x141aca66b0b594bfull, 0x92ee1195408f1d10ull, + 0x79efeadc8561b219ull, 0x927053c775251a53ull, 0xbad605417b89929cull, + 0x402fca6ef7c9dd91ull, 0xd8b072dc569fde35ull, 0x503dee585870e47bull, + 0x4db9d3e09595a009ull, 0xe5860f9865ec56f7ull, 0xb9ee8f5a1887ac86ull, + 0x2334767b3931a0edull, 0xc80920fbfc9416ddull, 0x92c7fb7f4591bce0ull, + 0x4a4e936df5d8128eull, 0x2c5de256df19566dull, 0x97cc2e10ed0e6263ull, + 0x4ba9499e8d1ac7efull, 0xa45c7b1e704bba7aull, 0xe037675a7cec2deaull, + 0x9da9c7e60e7fe3d9ull, 0xa4e108a12b839e1cull, 0xef5fdcd2c8b8247eull, + 0x9a627c44206eeb73ull, 0x896124812f7f3ca0ull, 0x1bbf1d8ebe205aaaull, + 0x2026787798fd2289ull, 0x4cab5d10f7ea98f3ull, 0x8c24535d126571efull, + 0xd1cf7363fb25d5a3ull, 0xd253d78e6ebf9ca5ull, 0x760c0cf839519b7dull, + 0x33a3adbd5bb5a8c3ull, 0xa4004496e42dcdedull, 0xa6b6b1dd1b434e17ull, + 0xef26bff9e975f2fcull, 0x0167ead1787e8fcbull, 0x84bfff49ea199544ull, + 0x867cadf4a6dd38d2ull, 0xfe614d9f42c83446ull, 0x6edb28a4ec0fe09cull, + 0x59a5911f6165be21ull, 0x3cbf86fd4e46aa71ull, 0x54b39eb506a11e19ull, + 0xab076633151c7c5full, 0x350d937badec38cdull, 0x6157f0c7c095e2b6ull, + 0x03f8530cdc1d3486ull, 0x891a6ab5e07d47eeull, 0x624726c5e87a5d5full, + 0xe97abe319ca332baull, 0x3a550da7d0974636ull, 0x4c8659d9364eeea8ull, + 0xeb24a01214656b37ull, 0xa75204ac321ccf00ull, 0x365ffa3787544b00ull, + 0x774fb44b19138daaull, 0x389b6eb0cffc433aull, 0xe91fc052f25cf087ull, + 0x4e7fa2a8a519977aull, 0x80acd146a372b2b6ull, 0x95c88f808f6a5e1dull, + 0xb058c39726f4a411ull, 0xd8be331ba36757d5ull, 0xea465620871b7a62ull, + 0xdb8ab6b0a73b07c6ull, 0x3cb8e17e139b779eull, 0x020251caa752dc15ull, + 0x3fe6a8d731247c6cull, 0x7f14d3b43dc8bee1ull, 0x579e0f2b57113202ull, + 0xb1de3804597e96e4ull, 0xb94bd21f9571b6a4ull, 0xb8463154261b0eefull, + 0x005c3351db8c7f53ull, 0xe4d8ff781cf0e3c9ull, 0x544ce0bfbbdfc879ull, + 0x8247fc698b5ea2ecull, 0x3b322eeba4c9b69aull, 0xab4393532c324e10ull, + 0xc51c22a53c1b720dull, 0x996e2ff9e8e58cf2ull, 0x0989a2f711a0e7cbull, + 0xabd0202506b2af04ull, 0xa4bff70963f95451ull, 0x01fd9aee0c5d97d4ull, + 0x14336347f6570614ull, 0x341ddaca87a4a58cull, 0x57662a2e9e22a223ull, + 0x1966e0599a29e390ull, 0x94494381e2c0d1a3ull, 0x88f6a03ab2b588b9ull, + 0x40fe10fb1964e3c5ull, 0x35349a368963651dull, 0x94a2c2b5aadb50feull, + 0xfbcaa1ee1bc374b6ull, 0x5fae285393257ecbull, 0xe09dac50ec2d10fbull, + 0x297a33a92436276cull, 0x765fc2358d1ee1d8ull, 0x4463c0a5c362a4c4ull, + 0xea1d6e8c68c6b40bull, 0x1f70ea01f6bec5abull, 0xe3d6eacc8c5db92dull, + 0x88fbe0f1f8459b1aull, 0xcefc3d0ab3a1a592ull, 0x720ccb5c86836590ull, + 0xb575517878e7b76aull, 0xcdfae0f2d7d0f0b7ull, 0xd54f918031242b79ull, + 0x85a376c9de4b4fcaull, 0x071038073b62f6e3ull, 0xeba23589685dc106ull, + 0x0b7dbd69839ae742ull, 0x920372748dafec92ull, 0xb075fd5b3ff12708ull, + 0x6abd5cb54bd6ca3bull, 0xdaa1c11d4b9212afull, 0x694932ff3ad03b9dull, + 0x0d4019c0022a12ecull, 0x7e732e293d5f6c94ull, 0x2108f9873194c638ull, + 0x373fde2fc4b26cc4ull, 0x8ce408146eae8a64ull, 0x5d75a97d082ff3b1ull, + 0x62744b2d98b66014ull, 0xaf52f1c409ebf0afull, 0x90bfd417897eaef8ull, + 0x6ee0c8337e2419d5ull, 0xb54deee6fb32f4d8ull, 0xdd76e3cde6049d7dull}, + DynamicArray{ + 0xb9a6c7edad4d5d4aull, 0xe4b9505e5b9a9bbfull, 0xabd8ebb19cc1d5a9ull, + 0x0f1ffcd2b80eb9aeull, 0x7810e74ff633010full, 0xc06e6be5a29bee8bull, + 0x2bf6364ece17548dull, 0xdaf9715017938148ull, 0x0cc7cf75e9837ea2ull, + 0x25a87a27e1c18574ull, 0xf4e7d5b9bf84d0cbull, 0x44095a1e21864a3full, + 0x34483aaf6daaa111ull, 0x70c4b4c62666fe27ull, 0x1fae720a2fb4e63dull, + 0xf8635dbf5932a59cull, 0xdbda739075b252f8ull, 0x69155e3cc123c241ull, + 0xd67db65582eeb54dull, 0xb02e5e1af01ed109ull, 0x3603799fcc47fccfull, + 0x080d8432fe8e0865ull, 0xa261a3ec89744eadull, 0x14e6d36f56e86babull, + 0x2d9755e138f069a6ull, 0x73377268e2be03cbull, 0x0c1ced105d9b286aull, + 0xc48be0fe0450c7d3ull, 0x2daebcb154e1bb23ull, 0x342b47464f2213d6ull, + 0x65360ff6dd28a598ull, 0x5c0fd747949cf518ull, 0x10fff343b65cc678ull, + 0x83797bcac7931868ull, 0x3a1c3295a9e55a2eull, 0x84815f9e766f1d1eull, + 0x21360d4372f4949aull, 0xd317a73ac48f0c16ull, 0x292a035b82d44d03ull, + 0x772d230a5e9631f7ull, 0xfbf5f3bd992f3f41ull, 0x0b0bf89d0732552dull, + 0xbefb72b5ee351c56ull, 0x9d76db71a4095520ull, 0xd251a6530c75afd2ull, + 0x490a539b3e31775cull, 0xe4a3a2364df65adcull, 0x24a3677cf4e6fb06ull, + 0xe77897365f8c1c48ull, 0xf80c509efbcac2e4ull, 0xe3f7245191e2f9a8ull, + 0xd1e25942d7ecd8e5ull, 0xad408d3fd57494d1ull, 0x791c96dbcfcedc39ull, + 0x4d8e98bf0211e18bull, 0x531263113b90b179ull, 0x4a09c71bac644a8eull, + 0x8273d877cf440884ull, 0x42f0586e93c0eed6ull, 0x90df1d18241bb1f6ull, + 0x42972fc81bd69612ull, 0xf70481fd6a460d6aull, 0x4fd9073e5823e857ull, + 0xc3f2798fa8ab9f3bull, 0xb17b8a9c7d16e9d2ull, 0xabf8d3a6ecd640b0ull, + 0xf8e0cb4c8bab530cull, 0x0e513fcbb0e458f5ull, 0xcf60308bef5971a7ull, + 0x4d828efe2ada5694ull, 0x72690a9bc9a206aaull, 0xc6d039d758e16d61ull, + 0x725b97f69b2d35b8ull, 0x526c0e123519ff03ull, 0x28b65f023fb427e9ull, + 0x84135866834d7f5aull, 0x235facb3b222b790ull, 0x7296ab10bb87dd75ull, + 0x101724391be43346ull, 0xcaef0ccc98f7720cull, 0xa80f14d6f5e8e6abull, + 0x74503b8f8e2f1232ull, 0x5678fdf0d5acea1eull, 0x5467150b261b5fb1ull, + 0xb52ca271d11946e5ull, 0x6c66575f0a3a0dddull, 0x569d223e60b396e8ull, + 0x56bf03f08f5dfad1ull, 0x818f7957f51eff0bull, 0x4d102654aa92da82ull, + 0x1b26fcbf43167c2dull, 0xf54a452a8a359885ull, 0xd5e1c8877da38bffull, + 0x14a67bac89b6261aull, 0xf5cb755ffae3efa3ull, 0x7ff73a0e8980be24ull, + 0x44f464a448384af3ull, 0x481484f5c3a84ce2ull, 0xf3a923de437029dbull, + 0x01fabc30e59117e8ull, 0x8a325c54f412859eull, 0xae0846b6c431da03ull, + 0x1b71d491d9ea5b62ull, 0x226c8201ee79db45ull, 0x929a3eef81a9a7c8ull, + 0x6f6db9ab04927875ull, 0x299ecb6ec6fad994ull, 0x8182fe081bb62cafull, + 0x3488b56d9bba77baull, 0x0350f3d5aa0f7c3full, 0xbaa8d52da725edb9ull, + 0xc6cf6fefd1713fb0ull, 0xcea5ce5dd0e174f4ull, 0x4fe98b661eae6ec0ull, + 0x91c99f8e8dcb5c6full, 0xc64cbfc9e6e71e98ull, 0x65c9fac53f185fb5ull, + 0xe65701dff2d4b62cull, 0x98838cb59dccaf36ull, 0xcef147a34c5293ecull, + 0x17804ec7e5af521aull, 0x4c23010bf2694c0dull, 0xe6a1276d8230942eull, + 0x1a2ed4d6490424eaull, 0xa86b0c881918a175ull, 0x0b3150929851d11dull, + 0x02d23f975bfae8acull, 0x36a9a7e9f8005464ull, 0xe7262d7dafd2d5fcull, + 0x7006e040e77a92b2ull, 0xc347e6c0aa4f7412ull, 0x4b92a35ea8030b22ull, + 0xdf77eca7d9714b1full, 0xec9ad07828c1efd0ull, 0x0518ea680a36cb9eull, + 0xafcd89aa6b92f2f8ull, 0x880e261be9f3a845ull, 0x0a670ecb21ce4674ull, + 0x628e2291c66cf8cdull, 0x8339ce52cf9ba012ull, 0x54fc6a28291e58c5ull, + 0x93b635a828a5fc41ull, 0xe88e2243ba93f78aull, 0x43a2165f2e380845ull, + 0x44c75a296298ba25ull, 0x1af21f27e71c5e32ull, 0xfdc5feb67941d9f1ull, + 0xae2d0362118e6edaull, 0xef99ac449dd2ffc3ull, 0xf90e9b93d445dba7ull, + 0xa6c456f2d2790bdcull, 0xd419a4258c339563ull, 0x433b2f86fb423390ull, + 0x9f8bd16a8810ca62ull, 0x880b50fbdb23b2ecull, 0x274748d1ff914d8aull, + 0x9c2cd848e650156bull, 0xda4bf431db439761ull, 0xbe1f9b96ae9d566dull, + 0x782df22c3d08c768ull, 0x6aac35f6bc190bf1ull, 0x94989ba2e01185f9ull, + 0x4eaa912bbcdc5a5aull, 0x0acdfa235259f896ull, 0x38e86ea54563faedull, + 0xcce2fcd6fe818a19ull, 0xb77497fb252f0ff6ull, 0x01574f3b32266ad9ull, + 0xac3f63772016dc7aull, 0x358c352af0c69875ull, 0x72fe8563d0f77c4full, + 0xea94ef06c8f62e2eull, 0x173686853eea0f83ull, 0x9c7cc774ff4eb80eull, + 0x36e3c22e4537cb60ull, 0x22bde54dc52e8153ull, 0x881b98f86381e77cull, + 0x519d94a053912149ull, 0x07c107040af20865ull, 0x9a96352e83cf58c5ull, + 0xaa81546ad62c682bull, 0xd0c28332e699efd3ull, 0x7af8e0fd029971a8ull, + 0xca1a414c4f2d2a9cull, 0x2d4eb82e50ba80f3ull, 0x8f6960cff3022bd2ull, + 0xbce219b1ea14cba9ull, 0xbc7072b4d791cd1eull, 0x34fa072d6756477aull, + 0x1636c0cb5ade9487ull, 0x1fa22373ee348c83ull, 0x561504896bc9df4cull, + 0x1997739153615999ull, 0xe3c51c68fac9a0bfull, 0xead398600236f935ull, + 0xbdf4a9ef4e6d48e9ull, 0x0837ae1f978e92fbull, 0x7ddc4b744e0de020ull, + 0x12321347cf010de8ull, 0x07c12d63375f9841ull, 0x2a54443724616b17ull, + 0x0c6706bd4a652812ull, 0x049b5a5759175793ull, 0xda64abb8b495b12aull, + 0x77e42034480b8bdfull, 0x3ee60152d491b964ull, 0x5d9ae3f906271755ull, + 0x5c6973bcacc293ccull, 0x8799e6a2ddaaae59ull, 0x05e3691ca8b0c57cull, + 0xc6881df4e7b92100ull, 0x8f1cb78c0bcb21d5ull, 0x3d4b0d3120309eccull, + 0x09b953fb092d16f9ull, 0x969b89ae52127b56ull, 0xc854213fa50bdb14ull, + 0x0f012c4330faf64dull, 0x9193f9597829f613ull, 0xe8fd7c11df921a17ull, + 0xadfde58aae6238ceull, 0xf414263dc742c858ull, 0x673baba9f169174bull, + 0x4cba27d775dc22b7ull, 0x5a4d31a9a557a62eull, 0xf5aadf56bcdfc42bull, + 0xba32e04eafbf0fb6ull, 0x545cc8b5e15947f1ull, 0xf44a5f7a04e2a9d5ull, + 0x8f564c39b20995eaull, 0x0a7a406860c391baull, 0x4761375372301df1ull, + 0xe5aa396862ab240cull, 0x0738ac181a4a0e14ull, 0x62967b33ba26b214ull, + 0x1517d28f050d9bffull, 0xd0dfef047e42335aull, 0xd7cc7b6599b00146ull, + 0x33be216c9e3b93e8ull, 0x8348614e559d6b33ull, 0x60e51490d959d8dfull, + 0x6e834f8a5d6d7b57ull, 0x2425c4e0f7b71a96ull, 0xf39e1dfbdacc31e5ull, + 0x5fc14f6497345f37ull, 0x9fc121023704dd99ull, 0x8eb4acb3cbe6c225ull, + 0x81db219a9cda131eull, 0xf277de3c5928cf13ull, 0x66ed705eacf89433ull, + 0xeb5102fe65e6c3edull, 0x00333d102aaa7fc6ull, 0x098292073377f79aull, + 0x08d220c7cc6d674dull, 0xdc043222eb65a936ull, 0x1d52a789ab6cb760ull, + 0x14e6a617edc31c7eull, 0x3d916ec0dacb8dc5ull, 0xd346840e3acecf7full, + 0xd3d5f654ef1f74a0ull, 0xf7b7d6e1a657a98cull, 0x5f4a94f0ca94e042ull, + 0xcc03b04b3c286d60ull, 0x91f7d41a46bfc49dull, 0x684a4a0524809cb1ull, + 0xfd9b18c57370cf70ull, 0x89936b6840c0314full, 0x196681fbec8eb404ull, + 0x08ef533bc314871cull, 0x14db88d0d81dff7cull, 0x349957e4dae000b4ull, + 0x200bfb9c542407b5ull, 0x428b90bc7ad35263ull, 0xc13d0b08eb98b7c3ull, + 0x6da886bf2dd558f5ull, 0x959fec1ce3e405cdull, 0x5345747554a049acull, + 0xbef21e4f3b4ecb70ull, 0x1e4e3a3ffcf0f7d2ull, 0x0e10bf26e83bd1e3ull, + 0xaf2ca16c500fc836ull, 0x608f6d4d40e8955bull, 0x14ff1584c88de033ull, + 0x44c5bee2f89d725aull, 0x8687ce863fce8ec9ull, 0x829094d95260277dull, + 0xd8f896a34b16cedbull, 0x922ae68e686db5ebull, 0xf860f0d31b5b6523ull, + 0x869ad17e558a0ec1ull, 0x5bbc780b6b710d39ull, 0x151fc2fc96bf0ea5ull, + 0xdf155e937a7ca397ull, 0x43c5891675d62db4ull, 0xb23f828b863b1b5cull, + 0x96c5c852284271dbull, 0x82dc6da64060e80eull, 0x3b27b99754575648ull, + 0xdf950e38d5a75d35ull, 0x3917454aff4989deull, 0xe6ab3cbb1608fdbbull, + 0x0b1bfbcca374359dull, 0x12f451a673e3d417ull, 0x167adbdb69b97af2ull, + 0x635c9f0b9b5532dfull, 0x2c081c12d3de622dull, 0xacbdbd39f05ed22aull, + 0xa538f9a0bed64dcaull, 0x68538c7ac0a96467ull, 0xc197f7770262cef3ull, + 0x63a64693f8082923ull, 0x6a243da74b32c0d1ull, 0x4d450fa855e9fd30ull}, + DynamicArray{ + 0x9414f9dbc266c879ull, 0xf1a21c581e423a3eull, 0xad4531489543fdeeull, + 0xec9e452af1d1b2a1ull, 0xc7800fc0cd2d80b1ull, 0x7e6101f69a3af4a9ull, + 0xfaa327baf85a28bfull, 0x9efb1a5a62ba1086ull, 0xe1db837f5326394cull, + 0xcd458132d3b0aa25ull, 0x5bc3a28fedb0ece1ull, 0xd647828c7397a501ull, + 0x3b9fcc90a0b866edull, 0x51cebd18182d572aull, 0xcbd4f463be48e9f6ull, + 0x7d52158c3ca50542ull, 0xc40f5199260d6c5cull, 0xcaaa9e4f37459f4full, + 0x6b66e582b4cb9134ull, 0x710a1ac4da39f821ull, 0xfaf1c820f6772791ull, + 0x0a47f4a50f5ef047ull, 0xb3ee46c4bea631bcull, 0xe20ba0e0defbd107ull, + 0xf8c2a46c0c4d6274ull, 0xa0bb4002fcb18492ull, 0xcfa1481e5326835bull, + 0x97aaecd730bf93c3ull, 0x245ee4b076a9fed6ull, 0x20fd05ff9028e5f7ull, + 0x6d1f548299df4b73ull, 0x2f0a9f30c3e14304ull, 0x5c32827065421c3aull, + 0x56c1df23b83c1c41ull, 0xb22eb6d2d55bcf53ull, 0x0ab3f7016643b837ull, + 0x6049d15179537be6ull, 0x87aead42551a8d12ull, 0x52cfeccf81b0fb18ull, + 0x486b0fa097f21a07ull, 0xfc719cff57694377ull, 0x7ea7942c63d39648ull, + 0x34df986171c0b013ull, 0xc3710d2a47f8ce20ull, 0x3275d53c304421bdull, + 0x612d07b6af624485ull, 0x7a75ca58e9ce2c5full, 0x2dc99ba70c575296ull, + 0x8c4339aa47316422ull, 0x3fdb9e0a88cee7fcull, 0xec9de40d37a988ebull, + 0x2e776dd0375371cbull, 0x062d4163e8ea57adull, 0x1ddb6523a0f77268ull, + 0x9d4b031b8f7a97c5ull, 0xe5dd242d08265790ull, 0x7b214ca1a5495e28ull, + 0x2f8425d773dd76ddull, 0xc8ed3c2aae69a28eull, 0x809889067b28e254ull, + 0xfd4397a7931d228eull, 0xc51a1a8d05b6aa5dull, 0x88cb96da5a87ed00ull, + 0xbe70d6cfb44a8ff6ull, 0x132f43b6d1199b29ull, 0x53b11db7904fcde8ull, + 0x15af1caeca6cce1dull, 0x17907375cdb41292ull, 0xf8657d84773d9cdfull, + 0xd9f0e181b82fec5cull, 0x8db67ecd57176541ull, 0x95fab9acc21499ceull, + 0x116f4c8430b6025aull, 0xcc7a64d6d2988904ull, 0x6790d83fc55bb2fdull, + 0xa5c03ddae5f5d691ull, 0xa83ac89c8bf85b01ull, 0xa577281979e9b452ull, + 0xcde408824e255ac2ull, 0x2b5ac88585a12cdaull, 0x4792d4e03b777e73ull, + 0x25d157a5c0f28c59ull, 0xce7f719e23027de5ull, 0x02b7641d6ea04ec8ull, + 0x367c498c3708ed15ull, 0xc52f1155c8126ce5ull, 0x9be8ebcc2ca28d04ull, + 0x7fe047f0a2cd4583ull, 0x616325fe622924b9ull, 0x5f72364b259f808aull, + 0x14aa8849a6b28210ull, 0x8502c218049681c3ull, 0x2482cab85a35fe06ull, + 0xf1b8291c91bdb6fcull, 0x7c6f1167f6a79513ull, 0x0f927cf9f1d23a3aull, + 0x02c43f3be273f589ull, 0x13602a5f449f8021ull, 0xfc5dd2a36e86dbdcull, + 0x843c44efbb0b46b9ull, 0x59e13e83dfdd52feull, 0xcd392e5a1052a194ull, + 0x1aa82cbccf2dd87eull, 0x47620b745ced50d3ull, 0x14527429e134b517ull, + 0x23a08e449752caf1ull, 0xb5339a1d355019a6ull, 0x38e39152063dabe0ull, + 0x3f7e8309c987eb17ull, 0x2515cdc935684054ull, 0xcb112adbf6f31c68ull, + 0xb94ad1fcf9fe8348ull, 0x92d8e516703ac264ull, 0x8b8be5b8e4749e83ull, + 0x98bafd8a8ef74ef3ull, 0xc59756a8d7d38dcaull, 0x8a553b261931b575ull, + 0xafd7d062c43815a6ull, 0x3f02080f9fea9545ull, 0x1468af812c59aef6ull, + 0xa73f13eccfbb2758ull, 0xc82fd51fd7a2aa68ull, 0x88f81eade6a9cdbfull, + 0x43948e87dae8cb63ull, 0x3ed7a7145457c88eull, 0x30d94161208d58b3ull, + 0x887ec04fb682fb57ull, 0x01aa2b607ebd351full, 0xde32c546d2d04ea9ull, + 0x4f9d621bd3b11ea2ull, 0xf087c86560d72769ull, 0x07efc595d7363754ull, + 0xc29bfd0cdf1c3d6dull, 0xef30bc70cdb288a5ull, 0x0baecb0cedc92930ull, + 0xf2dd86d11256c10aull, 0x0b8bac489663ba10ull, 0xb65a174efdea2e75ull, + 0xe5739cf99f786169ull, 0x4e718a3def79b9e8ull, 0x0e3e0db8e26b6d3full, + 0x59c70e9ab49ea32bull, 0xb26b34b62ae45016ull, 0x61566b38976d1d0eull, + 0x2d5d64bfd6513134ull, 0xa4579dd7526b80d5ull, 0xd64c9b6f7ba2c104ull, + 0x6f8800005cec21d8ull, 0x57235dbcc0f084c2ull, 0xc2a9a32decc31d79ull, + 0xb977dd79dd115720ull, 0x7e1e08d8baa8ff04ull, 0x1c4a2f6e9231bf98ull, + 0x7d3424126a7ce1b5ull, 0x66a6dcce83075ca7ull, 0x01f095a67349f312ull, + 0x5db471219799fddfull, 0x425fea93099fdf31ull, 0xde2fdb8da9e638bbull, + 0xaed760bf90d92f04ull, 0xd2b82de6b44c89b9ull, 0x28d99d3d99e6c5ddull, + 0x0b44188db37e414cull, 0x6ce059035bfe899aull, 0xf9545d97d81b48caull, + 0x898fb9f20b9a5ffdull, 0x2b03a1c22c3def18ull, 0xa276f5c8dd6a897aull, + 0xb159ece214b2f365ull, 0xacc2d8f2884923dbull, 0xbbded3f1d4547ff6ull, + 0x9db8e6cafa43fe94ull, 0x5aa80ecccd3d48efull, 0x289926c2c10bf0beull, + 0xc0b794f4511b6ce8ull, 0x33ca7bae2637f255ull, 0x6e5b06f281650f74ull, + 0xbe82698c38783a22ull, 0x3574b8155cec1a86ull, 0x93dfe4dab3d71720ull, + 0x1a822eca3f84808full, 0xa6ddc2f12db86d41ull, 0xc438ae4b94471b45ull, + 0x20b7204473926ce2ull, 0x4b519fbccb4c928aull, 0xe9c8ef386b2e02adull, + 0x751fb9356ba365eaull, 0x3b6337c15aee81a6ull, 0x9e26ad370c57f1e6ull, + 0x280d01a54bb4cfe5ull, 0x7739270734401483ull, 0x5f7476759a140844ull, + 0xccdc9194fb46659cull, 0xff80dae3bd024c9eull, 0x36b9c4a489c6802full, + 0xec4b3f366d82d697ull, 0x2411aca5030e0c1full, 0xe5490df00495c877ull, + 0x136e972cfdaa83b9ull, 0x41e2f70940704eb6ull, 0xaecf8fcddba0febaull, + 0xc9f8f1b3d1e68302ull, 0xd7e508d5d0a10b83ull, 0x0245e74e4bf75d90ull, + 0x2a19188f2da7bb68ull, 0x3df3736b3872a17bull, 0xa22f9866374844abull, + 0x430a0a34c569f706ull, 0x853eaaf97d323a74ull, 0x4ce756953e579d23ull, + 0x50c0729ce6523d00ull, 0x0212c0cc5a00e433ull, 0xab99a1a2604aae6full, + 0x01be08310a03a49bull, 0xe5c1e87747e1b26dull, 0x7b8661225134fac7ull, + 0x98b10f93e4de1157ull, 0xb3e56749b8eccd0eull, 0x4d03ef06e6c3b478ull, + 0xcdee7339df434c1bull, 0xff9c9e562ea2da6bull, 0xfac2d29ebc032737ull, + 0xc689ba54472a0e92ull, 0xbc014ce37614ba57ull, 0xccc89ca83644a8feull, + 0x3bf0bf65d8d9e3c6ull, 0x4c0fb6cf87277e15ull, 0xb046b8a27b8eb06cull, + 0x7d39fc9e427d8880ull, 0xdda0b236f9981c00ull, 0xd1ab88677019a982ull, + 0xd0ab493659d77f5cull, 0xc9c25b4c27d25733ull, 0xd466ec1a69a439cdull, + 0x216238fff2ebb55bull, 0xd01c68a3eff86ff0ull, 0xd2dece56aec8b4bdull, + 0x88a03310e2e43a5aull, 0x52f1a52e4b248ee6ull, 0xd9851e49b926ff28ull, + 0x61bf55aa95539a48ull, 0x3aa9d4068a6817d2ull, 0x8b5cc296ec80ee93ull, + 0xaa2ac589a4b14d3bull, 0xd03b752b9a5a7351ull, 0xa89cf02e5708fd1eull, + 0x56b8943d8b237a61ull, 0xd7b7109ed0198488ull, 0xce6019dcbb254505ull, + 0x449666b7d023aff3ull, 0xb7d13a13ae8f619bull, 0x661ce616261351f9ull, + 0x679381ed8143cc96ull, 0x237a440228b82c5cull, 0x1a450fcb298bee62ull, + 0x6deea43d9f23fa06ull, 0x122021cb469d42abull, 0x94bbcb90a8899e15ull, + 0x130ecb997520cb96ull, 0x7e9d723774c37fddull, 0x221aafdb21c3b3bcull, + 0xc7ad25ba081b6c7full, 0x76c1a8ae5e93bb38ull, 0x0628902de541d20aull, + 0xa88723e81a20522aull, 0x9273e36b0e266249ull, 0xa8300003d724c6a3ull, + 0xc2112176a7b80fcbull, 0x8fe9f12047c8a745ull, 0x5f1b33797437f44aull, + 0x47c2dc1c435c35f6ull, 0x98424f622b4890b6ull, 0x06d1aeba5c651901ull, + 0xfca0acd34b02b0d8ull, 0xbb60c302a55df13aull, 0x8e819e68759fb245ull, + 0x1b5e7b903802bdafull, 0x3e1f3cfa414f2911ull, 0xa6da8fd12c0b6403ull, + 0x45295f89ca247666ull, 0xe83492e647195ab2ull, 0xd7e9cf5b90906418ull, + 0x973ef31402e4ad0aull, 0xf1655ab31906fd64ull, 0xcbd3b5d9cff73a5bull, + 0xeadff33da0204f3cull, 0xd28839c220137e24ull, 0xf47a2e0ca916dfafull, + 0xf8ffa99d58ac1289ull, 0x36463d967befcedaull, 0xfd0392bcf4b8ab95ull, + 0x679c8ba28dc45d82ull, 0x7c9caf54e48ea764ull, 0xa1a160138580b032ull, + 0xfbd554b0efdbb456ull, 0x4e688fa54c3efb29ull, 0xe521eb9d37b5e64dull, + 0x325c02149b85ec06ull, 0x666000e156cf95daull, 0xa0dcd972c07ad7fdull, + 0x92414e4f00886ba5ull, 0x69a2f287e5234ddbull, 0xd6f038c3b9308a91ull, + 0x1262b580d89148baull, 0x99276c3b743d232cull, 0x6e40366e00b1e38bull, + 0x52d968a1271bb36dull, 0xe522c7e018267693ull, 0x60549c9307b499dfull, + 0x58d72a5cb29450e6ull, 0xf0ccf7bd1864295eull, 0xaa2fcb583b1f9b3dull}, + DynamicArray{ + 0x5d18b8a631902761ull, 0x9102c1ae48420b1full, 0x50bf662d0753c63full, + 0x900cbe40bfd578f6ull, 0xc85d3a95a73aa143ull, 0xa1129e85c004f624ull, + 0xcfba0a9f45a11f33ull, 0x1dde8c031f9424a8ull, 0x2f7e2b15ae6c8639ull, + 0xaf064fb8a7b49efeull, 0x846b271ecb4b3925ull, 0x9ebc2ea3dcdd3f6bull, + 0xb3035be630d1e0d3ull, 0xb999f67d39b6e618ull, 0x5c08358f729606daull, + 0x590f1537270f41d5ull, 0x20da290a04323b15ull, 0x999f6dc7b7fa8fc9ull, + 0x1d6f01fa36a32863ull, 0xfed10ae35dfeb324ull, 0xacf918c0f63889c9ull, + 0x0367ca3ad4ac1d11ull, 0x53ebddf8931412c6ull, 0xc4ef43863980347dull, + 0x187378bab1bd283eull, 0x092da8a992731c46ull, 0x3498bc4aff92fecdull, + 0xf8a74c6eaef203daull, 0x3401aac0d8d5cb0full, 0x33fa7e1e59088776ull, + 0x4873193eddb5505eull, 0xfd2344ee665e0258ull, 0x8aaaa4da194f75c2ull, + 0x9b475be7310406d9ull, 0xa54e567038867d16ull, 0x5dfbb85cadb50420ull, + 0xe696f43cdd8fef96ull, 0x1a527e2915916afdull, 0x99f5944031a7b876ull, + 0x34815cf3a98e8becull, 0x426d758cd4a3eee1ull, 0xf4531f1a00c39a91ull, + 0xf16cedfe49daafd8ull, 0xbc0ec2efa0d2b737ull, 0x85ba11c41304faacull, + 0x73ae268ced308047ull, 0xc5f05946bf71c4d6ull, 0x2fa5f5b61e6ecc2dull, + 0x9fa0ce6918cf161aull, 0x6833c8a7bf401678ull, 0xd1a7e15dcca0a354ull, + 0x57f9a514d6e1aba3ull, 0x403dd88278dd48e0ull, 0xfef6f61f683de588ull, + 0xa483105391c2f407ull, 0x4b84aa9fe298cf34ull, 0xbff0676b3e623cdbull, + 0xbf68d6444898fcc2ull, 0xd564ba74d3dce88dull, 0xe8c43befd665bd80ull, + 0x3d8fc1894258ca98ull, 0xae1a946a95b8dc0dull, 0x7ae5f5073bdffda3ull, + 0xf8229d68767adf48ull, 0x3718ea775eebb6ffull, 0x5764db0af323d80eull, + 0x53f40ee3974a9685ull, 0xcadb40fae82224baull, 0xb7556609a357d018ull, + 0xe6ae17f547f3454cull, 0x0238f71817ce053cull, 0x8e9bc34b7cf2ac8bull, + 0x5eaef1d8536ceeeeull, 0x92dcacf1def1f990ull, 0xcd60c57b2ffcf3d0ull, + 0x0694112b857fed48ull, 0xbf1ca08a84417c6bull, 0xe145f969ab23c632ull, + 0x5ae9edd23377d5e5ull, 0xd435fdc8471b0fe7ull, 0xeac5289488975682ull, + 0x57051128672a1e92ull, 0x436a1ec1a160f428ull, 0xdd803ac21792dd3bull, + 0xef0346d9564cc4ccull, 0x58f315f2e8b2c1ceull, 0xbefdfae8db654869ull, + 0xf469a180f3453b22ull, 0xb150c43db006b47eull, 0x7d9e5e20e8f03068ull, + 0x40cce11cbdac92e2ull, 0xa94c91a25c805210ull, 0x6f42731cd5d85809ull, + 0xdca31e98a8a58f95ull, 0xb6dc758cf2659df8ull, 0x8f3e7fc3f3592377ull, + 0xd059253e097e6b12ull, 0x6280084f349f2a63ull, 0xb0df83ad62b28417ull, + 0xaf8d67226c0fecccull, 0x34417ed3f56b0ef1ull, 0xc8c1107556bfb6a6ull, + 0xd1179829fedfda83ull, 0x0855ffc2fae09edfull, 0x08e76113c592e3dcull, + 0xfbb7fd97108e5949ull, 0x503279ac8533fa0dull, 0x135b658dda6748e4ull, + 0xf0d6e8cf90d8ee8bull, 0x0bbad67e17a649efull, 0xba8b0c245a2c6d3eull, + 0xa9a25d019c35aa41ull, 0xeab44c067910219cull, 0xeb59fd46ebf84e5eull, + 0xe61012babf1ce518ull, 0x613cba137935984dull, 0xf7686fbf9aa26d89ull, + 0x333614c5d6b5f8eeull, 0x7a39a2b5e70593d1ull, 0x668689469dbdf767ull, + 0xf3db716dbfab9dbeull, 0x142b831a45211d56ull, 0x188bb47e234df589ull, + 0x0d6eb23cf2eade79ull, 0x0c4e06452f9abc4bull, 0x3ccd8f11368b32baull, + 0xaa26d0cd429f41edull, 0x59b54dd4c5708de0ull, 0x028e9f60eaaeb0c6ull, + 0xfa17197c496c0573ull, 0x73bf84796ce1517eull, 0x7cb83e706f7ba78cull, + 0xf87943e5e3fa637aull, 0x0c7c3b09cf0bf0c2ull, 0x9c410c6058b56822ull, + 0x83781e48ac648efeull, 0x321a8466d9238c91ull, 0x2d60c7d63469f78eull, + 0xc80a08d7456582caull, 0xad431e0511c38201ull, 0x465280ad9f2e64c0ull, + 0x7068cdfe0bc988c4ull, 0x63cd1e4a5b18c265ull, 0x9c15450c4926bf49ull, + 0xca63535656f95cd8ull, 0x94fd034e70497880ull, 0x66a79160c8c51b46ull, + 0xa80b562bd6627f94ull, 0x79d45d395ebcbff9ull, 0x716815ecfdc58f47ull, + 0x289283cc39a08f8aull, 0xabd1ce16e26d3008ull, 0x4cd376000677fc41ull, + 0xe4bc66997a53f35eull, 0x4d2c4a1e4afb526aull, 0x2b8aab9c77ff9a7bull, + 0x9bf5d929844e0cf8ull, 0x4ea990ab4dcbcc03ull, 0x67d8fcf2cb6ad641ull, + 0x60eac2cbc95c381full, 0xda7b483fe2e289a9ull, 0xcabbff4f8329ef07ull, + 0x0de8a7afaaac5413ull, 0xa96bf96906e2e024ull, 0xf0fdae9fb05d1f72ull, + 0x0f4f3326cd07608dull, 0x4ccc45d0490369faull, 0xcf4c6fec414e6a77ull, + 0x3bcda0dc7eef71cdull, 0x1f9f485d109d8295ull, 0x9dbb487d52de1e2aull, + 0x10c3ed740fb13a91ull, 0x51896ae5746cb4e3ull, 0x5625ad8549ffb932ull, + 0x90ff3784294348caull, 0x3bf49d85b75bb887ull, 0xadae4c00b0206317ull, + 0x8c70d912c3cff2aeull, 0x0da8c94bd1cd64a8ull, 0x14cdd2748c6198c9ull, + 0xd3423bd1881f2297ull, 0x7f6c1bf321cf91cfull, 0xb7f207c88a5bc9d2ull, + 0x94228d0c963b6498ull, 0x82250d08ad3747efull, 0x34e4754bbb71ab95ull, + 0x825be6668b3201d7ull, 0x9117f17692b0a338ull, 0x0726d6aa9caedab2ull, + 0x54a85279af008748ull, 0xc14e76ed6d0410ceull, 0x5645dc51518f323aull, + 0xe3f2406b8b1aeeafull, 0xd14c8edfece5736aull, 0x731a46caedb67b1cull, + 0xa54b280065632e1cull, 0xec1e0215fdb9f1c3ull, 0x963096ebbbdf52aeull, + 0x0583225304fa8b47ull, 0x69a01645ae2d599aull, 0x0f381fdcbbe59b12ull, + 0x28ae5587263b91efull, 0xd1a1b366d7d1fbd9ull, 0x2493f622a0e1712bull, + 0xe159e73e2eb575ffull, 0x7a13e65ff5f9b0c2ull, 0x775ec98746ba51b5ull, + 0x45f90369b122c360ull, 0x5aa0222ce7d2b1acull, 0xd855bdf56d5ed569ull, + 0x8180c500dfa7959cull, 0xf6bd2d867d558144ull, 0x5ed50edab4cabcf0ull, + 0x7b4352d189beaad2ull, 0xb770522165750b56ull, 0xf201a12f29921629ull, + 0xbc5d898260597c6eull, 0x6f52aa05e91580daull, 0x89451f1cba3e290cull, + 0x0c552b0ba51ef7b5ull, 0x349a4338acd5472full, 0x50e270b205e8ee0eull, + 0x7f8c81e21a27c234ull, 0xf3acefaefdb15e8dull, 0x270b252461125cb5ull, + 0xb3d62557834a9adcull, 0xad964a95b79eed79ull, 0xaa2ca59a3ecdfe91ull, + 0x3815e8d1844f3cb5ull, 0xdf680b939d14cb92ull, 0x76a201fa185e0191ull, + 0xc5a3acdb25d5747aull, 0xa6d8a5807e1fcda0ull, 0x63f0c9865a237976ull, + 0xb78d21cedbf1848eull, 0xb19ad4918d8ea3e9ull, 0x240b9d456da038a7ull, + 0x7ca0c7bc4cc96a82ull, 0x23d76d5937c997a3ull, 0xeef17a138b1bc19bull, + 0x6279d4b8e6f2d164ull, 0x6d4c5e2160c3def5ull, 0x9113982d839c992full, + 0xc34176afcf24f295ull, 0x07ee445245c76d83ull, 0x7aa84845cd7ba1edull, + 0xdf5989bfe867c305ull, 0xafbf86d84f1c38caull, 0x88d082a48d709327ull, + 0x1dd91d4348b0c031ull, 0x7673c17cbd0e8288ull, 0xff09222d15008324ull, + 0x3addd52cc2aa4ffeull, 0xb7deaa30efe07190ull, 0xd70a860b8b02614full, + 0xa063c5e9bd070180ull, 0x9fd72d521c94ec63ull, 0x2c78795fd5faa1a0ull, + 0xc6bbecea50c53a55ull, 0xd75941db09be0dbaull, 0x634b2bf7f48753b8ull, + 0x599c483e4b5abd5eull, 0x3f2eccc4e9f2d709ull, 0x13c32b1334953e02ull, + 0x35055a1bc822f213ull, 0x9a90dc2cb06e919dull, 0x1ebd1645402aa4e0ull, + 0x8114413268b65d97ull, 0xaca058a0a4259f8cull, 0xfa96fdb703e78b23ull, + 0x221a432be7e8d40cull, 0xd1bf56b782977a1full, 0x487a1abbfe3bb5c7ull, + 0xd7998ce7b1fc7aecull, 0xf9d6e3d6e31a3515ull, 0x4150b9bec43f2dcfull, + 0xc37e9a989a20f01bull, 0x9cf5addbd475864cull, 0xb708bc8dc52fb877ull, + 0xb4475f990797771cull, 0x11ceb666b1284090ull, 0xe9b8e9831ed15639ull, + 0xb10f96adb2a77cf0ull, 0xfebe5310535346c5ull, 0x9c34adffd2bfd79cull, + 0x0a6a56d6c007d1ccull, 0x9981273840f10b11ull, 0xff7d59eace1cf964ull, + 0xef158b5cf7f71ed6ull, 0xd0932d1bdfa5562bull, 0xe34a21ae51ff89fdull, + 0xa987e43368096bf3ull, 0x0561e232ad06491cull, 0x86b75501e8e6a71cull, + 0xa4a6010e13f31854ull, 0x799cf25fe988a788ull, 0x60bebedc3ea1e56dull, + 0x15b06bade6dd7bd8ull, 0x6f69d7b4d26a5ccbull, 0x2c08c8d3d4271879ull, + 0x82208de52abbd361ull, 0x4eff7d3dbb7c422dull, 0xfe1f3d5ea469d58eull, + 0xea684c7c95c859f3ull, 0x0285cfec0897c870ull, 0x9d07a03baabc1c41ull, + 0xc58c5cca55ebda34ull, 0x5fa30da8b952c428ull, 0x22ca6615d4855775ull, + 0xa3c3bdadabf25e27ull, 0x02dbea900627067bull, 0x19c2cfba014e7263ull}, + DynamicArray{ + 0x4d74b0ad35584730ull, 0x1dbbd5b0efc8cc2eull, 0xa04f379e2c2e1d3bull, + 0x18535ab57f0dd69dull, 0x583b81194cad1136ull, 0xe509cf5839bf399eull, + 0xc92d7aa925209f9bull, 0xef8741807d6a6308ull, 0xf4fadc76cd28d756ull, + 0x18534ff11aaff924ull, 0x9fbc8d01a0240ac1ull, 0x10a5982ddcd5756aull, + 0x94f6933cbaca820aull, 0x7348899cb6a8f33aull, 0xa28c7f80771b6c50ull, + 0xff5c1a6287f5b155ull, 0xe32d96c2796828a9ull, 0x06de2db61ca22c5bull, + 0x77d2568ee609f2f9ull, 0x89fe0de343f4071cull, 0x4da8b58d4ba3b620ull, + 0x904b25d7396117c9ull, 0xa540482213f46ff6ull, 0x806945f7a22c2a92ull, + 0xa81c811699ebff9full, 0xa3e470ee4f5c87a5ull, 0x18453ff54bfccfaeull, + 0x64c271c04dfdf00cull, 0xc4c1c0d7e7d1a67bull, 0x790874ac36223eafull, + 0x63079f5e8d8210a4ull, 0x00560e1cf5f6320aull, 0x453f2c55eb59517eull, + 0x23c871181045780dull, 0xc0caca686f686214ull, 0xe23b802486047027ull, + 0x4445773f8f8b66d7ull, 0x95344b13cd13527dull, 0x5731d1184ef986d2ull, + 0x6739b2fedd8f0851ull, 0xf582c4991c5b145dull, 0xa24a662eee4ccc12ull, + 0xe8b15088aa2c0cc4ull, 0x957e5125b0e1ad9dull, 0x5063e04146b0ba6aull, + 0x8d5aa2071e743b05ull, 0x6403e40c383d5a95ull, 0x63acab29925b14d4ull, + 0xf2bd53dea0f4e158ull, 0x7f39f6652f768c22ull, 0xeb08ce388258440aull, + 0x288245b11a51acb4ull, 0x44a574ccc2991620ull, 0x210073aa96820888ull, + 0xfa886949693da51cull, 0xc2851d62a3ff1d5cull, 0x2dd6f5e22a0c5806ull, + 0x564ed803d31368ebull, 0xe0c6c101b56d618dull, 0x94f825b6a73ac0d5ull, + 0x7305b259e67decf9ull, 0x901ff8de6959b364ull, 0x1fc7a4939e866ea0ull, + 0x058c730f883e2d5bull, 0x307208c93a4ee09cull, 0xc168a8ad63d13f88ull, + 0x8c335df3f796843aull, 0xeaf817be03d41f6cull, 0xcb9d0bb43bf2abe9ull, + 0xd63c27bdc83f2196ull, 0x4b0bad91a3dc6838ull, 0xc34bfd250a8e808cull, + 0x96675a9c36424ea5ull, 0x88e3bde03c8d8b08ull, 0xfdd094588ebb8b31ull, + 0x5d500cd83000daa1ull, 0x67e612c687d5be78ull, 0xa5bfe6848d23593aull, + 0xa6720cb15e78d481ull, 0xc1d521ff684dae3bull, 0xfad4e8f3ab74ad61ull, + 0xbbcfe54bd008f4d8ull, 0xcf0ec2ac2122f7acull, 0xaa2513eb9034d7c0ull, + 0x79159a91453acfccull, 0x651fbe14d77e349full, 0x706ceddf7e6ddb1eull, + 0xbb7671500dbe44caull, 0xccc8e5e4f54d1d07ull, 0x7a94ac20114e3346ull, + 0xac0130c4d15c8859ull, 0xb54f7576add6f02bull, 0x24cb7f833867e948ull, + 0x6cb81e7fee311afbull, 0xf37f3427db49ccc2ull, 0x34e4f2d0e633f992ull, + 0x6ff43ead202b9b4full, 0x412a3aaa78f389f1ull, 0xa96b9223d0536cc1ull, + 0xf32baf1e5d810c4full, 0x90b5f2602473952full, 0xb70a117ee927ca7full, + 0x467427418fdc5677ull, 0x0d0fda31680b4a98ull, 0xc1a4d5e6e60ce0bbull, + 0x46208a3700015cdeull, 0x04dda6408373f0c4ull, 0xc2c7e1811a908886ull, + 0xf7e9a1256a4b7a14ull, 0xf9ae2d2204ccc5a0ull, 0xddaae4a73a4f0fc4ull, + 0x15928e3df90da468ull, 0x99892280e6d47ed0ull, 0xbf49dc2dd3013a70ull, + 0x36f88c0c942864ecull, 0x5805138a7e970c20ull, 0x4f34b636cfb6018bull, + 0x68acf64d287d10f7ull, 0x5b98ae4b10c9a2f4ull, 0xaae8fbde5104a364ull, + 0x092a63984e1080e4ull, 0xdeee1aa2c805a065ull, 0xb5ef46f32c4daa37ull, + 0xa2ef19e98f421596ull, 0xf7e6d2259336e16dull, 0x0ad43a1e1062bc83ull, + 0xdae4b61d2e5cdeaaull, 0x16883d1a98dfb7cdull, 0x48464aa7390b485bull, + 0x186557ca6b57e493ull, 0x3f2090032adc8785ull, 0xe3602a4743ba5509ull, + 0x6166a54ac78006a0ull, 0x04ad29de65347d9bull, 0x4db7269dc5e86f3full, + 0xf0f42285fd7f2911ull, 0x8d951deeae584301ull, 0xefb7f2a6604071e9ull, + 0xbccdc44210fb2e1dull, 0xc171ea808588e349ull, 0x46830f8bf72bf558ull, + 0x65daf206ebd24e88ull, 0x45cfac4fe4e8a27dull, 0x835da7adde471867ull, + 0x4427716cca302d42ull, 0x7935041ae18edde3ull, 0x769f1a2a13bf2bc4ull, + 0xcadb3fe3ae5ce58dull, 0x4d2ae9a50fec40c8ull, 0x5a6fcbe6522afcf1ull, + 0x6f3896ccdd137292ull, 0x37fb20220ef8a243ull, 0xed70d8ebe0897bf9ull, + 0x94c205f3bec8cb9cull, 0x334c5dc8cb7a7065ull, 0xbe12da2ffbd1acdcull, + 0x382064c588088011ull, 0x3928cfbc82eb6d41ull, 0xf874619433fa101aull, + 0xb48cc6084414a165ull, 0x31c36c7136a08258ull, 0x46d313d4af91132aull, + 0xb6307ea5ce63cb6bull, 0x045d23413529426cull, 0x589da909003fe116ull, + 0xdc8e2a7208169c02ull, 0x0128248e1a70cd40ull, 0xa93561e5eb4d74a9ull, + 0xa762a1551d6529eaull, 0x08b70bb3ee7a0e10ull, 0xe4a75cf9b5d8fc52ull, + 0x4fc1ba89152519ccull, 0xb466b0851a24ab94ull, 0x0cdbc7c53014f33cull, + 0x3bbe21135c9ebf79ull, 0x69204089c3a9fc82ull, 0x1f6d8423698a4ea9ull, + 0x8a211d06e0b56506ull, 0xfe0d2f9943673379ull, 0x9a98a2a36295dbd9ull, + 0x9aef725e7d0f7c24ull, 0xbcc02b8047f8df87ull, 0x01644a30563ef387ull, + 0xd54839919f7b4555ull, 0xb451b0acbee6c3eaull, 0x7d8f9019c8ad40b6ull, + 0xd606afbff9aebb26ull, 0xda258ffd7c043950ull, 0x4660082cbb0ed3aeull, + 0x545e14b40bd043e5ull, 0xbf2aeda788d99698ull, 0xc2fee7dd6f81ad0cull, + 0x8eb74ee464a4056full, 0x6e867d6a6bac97c5ull, 0x61d5ef592b656284ull, + 0x05e2b1536769ecc1ull, 0x1c45b68d12dd7f06ull, 0xe0d94564b3284aa6ull, + 0xb851b421ac0afb61ull, 0x5994d13c0fca3d63ull, 0x3b6ab2e244c7199cull, + 0x244a203980bcc3bcull, 0x68fd936adb6bdddbull, 0xa57bc0f1c736e022ull, + 0x1f6eb82f6efc9956ull, 0x4c65230d5f6d036aull, 0x6f2bcba4faf8719full, + 0x5332aef5f26f4094ull, 0x44be53f862b19334ull, 0xc1d4e075497e3412ull, + 0x7a3fd2d4ae255254ull, 0xb05e3f1bf91d5b10ull, 0x17b7cf302999242bull, + 0x2d2225a41f49b407ull, 0xb4d68b4599bfaa15ull, 0x79c0bdcbc8703fbbull, + 0x544a6029aa5f4520ull, 0xd32ed30dad06a19aull, 0x0ce8b8e4c9f48f28ull, + 0xc8d7aa983107c232ull, 0xc0cd1de6eba96496ull, 0x9377093c36701080ull, + 0x6c43bf2f6ede715eull, 0x8b671ed3f462d287ull, 0xcc136887302c9c8cull, + 0xf36a8ba7d6e71418ull, 0xbcdb03bd696036a3ull, 0x3f89cf26d0fe9e0full, + 0x7b370f9b7660fd7full, 0xafd67252dd85bd58ull, 0xcea478db50fb2056ull, + 0xebf0badb4858ec97ull, 0x70e0673a84517d72ull, 0x7dd2abea347abf5aull, + 0x71152f69b09767c6ull, 0xc8b4707afe6d8832ull, 0xc9a78ba494ed8c8cull, + 0xcedad5295a28049full, 0xcb3c1d145043187dull, 0x446ff45dbd75ab07ull, + 0x9255a56228124123ull, 0xda311fb020ce58a1ull, 0x301f8bc44852e607ull, + 0x3bec0157c24f9ba7ull, 0x2d36b4f021059c17ull, 0xe9c55043c54bf050ull, + 0xa9d7ba1cc0634ee9ull, 0x24e21e66a143af60ull, 0x94d1767db23b2fb2ull, + 0xcd6c57fdbf65952full, 0x1cf8d60b83bf6570ull, 0x80f0ebe6fec45b20ull, + 0xddd230b42609daf1ull, 0x2fc16eb63a86c3dcull, 0x5856049e1b79d992ull, + 0x403369908abf6f39ull, 0x2d17bbf9eda43746ull, 0xf610cedd0e8111f9ull, + 0x2dbf3f2367a20872ull, 0x0bae1854431f416full, 0xee95841ba9f48b13ull, + 0xa7fdacf8c251f630ull, 0xf5910a75443be5afull, 0x8671f9baf2589898ull, + 0xe1c9c9ae03f7559aull, 0x113219e476828d0dull, 0x0a63cef1f86d4ca4ull, + 0x72fe125a642cb055ull, 0xef02a969dac6bd87ull, 0x29d41a59f2477bbdull, + 0xceb5545529f19226ull, 0xb4763cdd4e56125aull, 0x6c485c07cb91fe21ull, + 0x1d49b57596717463ull, 0x2a008393fe502860ull, 0xd49999ea3ee0548full, + 0x3e59b99352a8c677ull, 0xe241a46d4d7660f1ull, 0x51400cc7baff9b80ull, + 0xdc842c98bf683dceull, 0xa829461f8bf24e95ull, 0xf5ffe32cd3ef2d30ull, + 0xd71565d40e991b8aull, 0x1519ccd20fa4e158ull, 0x21f45109c7649218ull, + 0xab742d83d5c594d6ull, 0x196f40e265caabdfull, 0x97f469ec4129f1c2ull, + 0xe0c1fa50afddcea0ull, 0x1964501d4156f5ddull, 0xcb81203545a2da6bull, + 0x3a607e2b1849159cull, 0x4ba722515034bae5ull, 0x0333f8997641f9dbull, + 0xcd45208ee14e8884ull, 0xe43b40603c96993dull, 0xd0936a08b6758f6bull, + 0xc70894e7730bfb02ull, 0xf8c86d50facb8aabull, 0x1ab290ecf800cac0ull, + 0xe71039b877c266c9ull, 0xf8491b030a67fe99ull, 0xe0f7f8130ecedea1ull, + 0x4a4abe0a93e89cfaull, 0xecebc1841adbd54aull, 0x2da480d1dc9fa965ull, + 0xab9337146b9aa43dull, 0x4990d0ad0c4cf487ull, 0xc7a5e8292de101e2ull, + 0x782eaed24f53e0b8ull, 0xd2b295f860249bccull, 0x745af9c68c39ff85ull}, + DynamicArray{ + 0x7f02c6111ab22ac3ull, 0x219a63bc13601910ull, 0xa2257a80f7b2e693ull, + 0xd26eb62800380831ull, 0x569112d12957385bull, 0x4a20f758cade2830ull, + 0x0176ef4aeb303b66ull, 0x5be7181ce2b8619bull, 0xcf95e20f455eb457ull, + 0x34aa62c75791a5a9ull, 0x1bc63a98cc6464b9ull, 0x3ce441f6afa61ddfull, + 0x5fb849ad1c211dedull, 0x0efef3189b665374ull, 0x75ea21fa78904001ull, + 0xbfd829c64fad44b5ull, 0xf2392d40aa377452ull, 0x886a38a15082ed68ull, + 0xa93688870e0c03f3ull, 0xe4ab81db2c22eac4ull, 0x8cf16af5302c954dull, + 0xd2eb5ec492433853ull, 0x372e80868cfb900dull, 0xac279a004514fe1cull, + 0x9b35d5ea8f38c3bbull, 0xb18d2573a97e45e7ull, 0xf06cdf39daa7686full, + 0xe8d6500f98a16cfbull, 0x8be2afea4da25bc2ull, 0xe9040423e2fdeda2ull, + 0x6328f2f4213e45e2ull, 0x652b85319fb3828dull, 0xd803d22d615a93c4ull, + 0xd17ab4551eaf5c5full, 0xba81c29c6688a8e5ull, 0x2ef4048d39d52774ull, + 0xcd7c514e61b66be7ull, 0x0aca61b74385d04dull, 0x13d0e5e455474a3cull, + 0x1976ba30625bb438ull, 0xa5b38b3a601a5228ull, 0xf5e73dae51901d11ull, + 0x7ebb1f5be64ec260ull, 0x39dd112716c8b9f6ull, 0x1f8772dc169a405eull, + 0xf2581ce8445b5fc9ull, 0xb2662a4647fd6797ull, 0xc5e5fcc862b6ad94ull, + 0x6bebb5f30cb4e6eaull, 0xe9bb981df625e43dull, 0xd416ba4c66bcfaccull, + 0xe66aa82c68b41ea5ull, 0xc3c5b59b8ef396fdull, 0xa00dc2e9d7ea96ceull, + 0x560690a2013a50c7ull, 0x22b6e873aee77878ull, 0xfefe37078992056eull, + 0x2391c566c8a66145ull, 0xfc200dfa42d77cfeull, 0x72247831cd82111full, + 0xc3512289468f0ea2ull, 0x0d69c4347e71e4adull, 0x51b14149d6a95be8ull, + 0x732d959c53abaad7ull, 0x2a902a769311ca2bull, 0x97fa88bee02bb794ull, + 0xf10b9aa2ff31a7f6ull, 0x354bc9c6b8781ed1ull, 0xd99be17743bfb997ull, + 0x5e0aac71157a7924ull, 0xc935a03a6256c2bbull, 0x68b374fae07f429aull, + 0xd6ce3ea110809175ull, 0x470d1cf39ed8fbefull, 0x796231048b60db7cull, + 0x82684814864731daull, 0x60f7d7072887aca3ull, 0x34d80efc48acd51eull, + 0x3aecdc9faf5b1f37ull, 0x4f0cf31e9e19e3c4ull, 0xa4fa7fd549cec3dcull, + 0x0821c4b41e4ffb11ull, 0x29627b3733dbd2e1ull, 0x49e7155035d72c74ull, + 0xf3e9f78895c1abeeull, 0x786b635782b88ab8ull, 0x8e9de00fbce5e5d8ull, + 0xea9070d641726339ull, 0xd1b29e7d707649f7ull, 0xe6e03c00c923b180ull, + 0xb510f31c511010abull, 0x0ba48d8f925e5110ull, 0x326d56a6680a3063ull, + 0x77830ce0c65b5baaull, 0x2669bde64d62ca97ull, 0xbfb02b1bb5ec0e9aull, + 0x120a1de9d53ae58dull, 0x8dd3b8b0f4bf755full, 0xa142681eb5d98e4bull, + 0xc9a56f9f29606ce5ull, 0x04c66d289d9db980ull, 0x9497387a882c4d01ull, + 0x9181bf914edb549bull, 0xbd4c2796b242761cull, 0x9d5818fea5e123a6ull, + 0xadce36010e770c7bull, 0x1df3770a3e24fc93ull, 0xf917dec76ad8b57cull, + 0x5ef2e13e5de41c9aull, 0x42defd1f166c8517ull, 0x6662e997285efe17ull, + 0x790883af77aa601dull, 0x379d253fb294c017ull, 0x9f5f677d302c557cull, + 0x9f17d5873253db5full, 0xddf660eedd5ed91cull, 0x58702cd20fc325a5ull, + 0xe06eb6050008fc1aull, 0xbb14b33f04c8214bull, 0x6c6f3c0d79449170ull, + 0x7ab3224fac2727efull, 0xbde859749ef53d4cull, 0x45af9376344aabccull, + 0x3e1c9a0b0b40e987ull, 0x340187962791f884ull, 0xb00be039f0da4b61ull, + 0x8ebd7ed787dadc55ull, 0x7a493482b81a67d0ull, 0x28619666bea23a10ull, + 0xd456ffb62d40385full, 0xf94da3d635a1a1ceull, 0x747a939e74330a5dull, + 0x7bc5d1602d9a944aull, 0x91bba283c516b64full, 0x6f0a93ae99e23546ull, + 0xe0d772e266df0ef7ull, 0x27fa980889bb48aeull, 0x136560cc6b403df6ull, + 0x3acba23eb1021807ull, 0xef3e8301ea569a2cull, 0x2f819913bc1672abull, + 0x2bfb6aa1d656ebc8ull, 0x613b4928dbe7e7f2ull, 0x71d11683cf7ab673ull, + 0x140e0526569d10f6ull, 0x559d2b0725884b07ull, 0xf14634b902453385ull, + 0xc54873a1c1946e8full, 0x9ea8f03449f99b76ull, 0x72550971a0a0af66ull, + 0x7d38202633ab3013ull, 0x379fce65ee08a7c6ull, 0xb47beb5eb715c9fbull, + 0xa42479ad5d8ea4c0ull, 0x9428121e80f7e783ull, 0x97749e91f25f08ddull, + 0x6424878ed9c000bdull, 0xc0f30ff3a92a7f26ull, 0x4d56106f0d980903ull, + 0x0592c848d9a22136ull, 0xcab09f82ed0a8f1cull, 0xcc0e7e37afc728deull, + 0x6aec962a07d294d5ull, 0x2338caabdc08ecfdull, 0x792981e0f562e90dull, + 0x42a98bb40073379eull, 0x7d2052f307fabb6full, 0x87a3fd33973d3c4full, + 0x129d372b2972b6efull, 0x5ddd4571d5f8c0b1ull, 0xce8ddbcd67d39804ull, + 0x6f4a71151c6f1c64ull, 0x82fa08e2fa0a4bfeull, 0x538cd97f58b120e7ull, + 0xcfa6d41f8dd4dc86ull, 0x9a97ff1dc8634a73ull, 0xcb2541b556634fc2ull, + 0xd97f3bfad3008eecull, 0x1a6675d163c34ea0ull, 0x0d8ee9500f85643dull, + 0x51cac1ded8223b1bull, 0xf2771922fc2f0845ull, 0x15cd1e7fff1ea080ull, + 0xbb195a54845f9c93ull, 0xd47cd1257ef98bb9ull, 0x4cd8356593a5444cull, + 0x2a7ff61317a69e30ull, 0xb649271f0c5ffd62ull, 0x2b87cae299a8a03eull, + 0xb4da9eac2c04e4eaull, 0x940b3fb38b571bcbull, 0xa02d248292a77f33ull, + 0x8ceb799ebbf83f9bull, 0x6fcf58731e1c0295ull, 0x54e4f0279125c0ddull, + 0x92d70a36c59ea964ull, 0x55b55c52d90d51bfull, 0xca1b52dce1186178ull, + 0x0902e419b311d7b3ull, 0xabe512f830f8fd30ull, 0x45f6fad656e13605ull, + 0x8dfd11788144517cull, 0x5d3b220153b4a51bull, 0x9e9e0399cc454ab9ull, + 0xb3adade67b5db7d8ull, 0x00cdfb4583e8c472ull, 0xc27d007684d0b87dull, + 0xf02b7aa7a5d7b465ull, 0x0615047184dac720ull, 0x1b8f267c35e823a7ull, + 0xaaa4bb4e43677660ull, 0x46e9922629bbff59ull, 0xd132d6136526e60bull, + 0x50198c1788941bf7ull, 0x1c610dffd1d963daull, 0xce46d1d1ef77ec47ull, + 0x57bf54df80976c3dull, 0x89f6a9166ff87400ull, 0xda4473781f4122e2ull, + 0x2be2774e292314faull, 0x6e889a3dc26c166aull, 0xc824481ece313113ull, + 0x8933bcf8aaa90125ull, 0xa2db973d65759863ull, 0xbd0be564962bece9ull, + 0xbb3506cafa49b0c6ull, 0xcf3beab3d2a7518full, 0x557090d4e3d76255ull, + 0xe3ce986cea9a15c5ull, 0x21d56e8225df3f68ull, 0x51fe9bf2ea0a0ca2ull, + 0x791ec53ad028f542ull, 0xb77fa96a982d3ea7ull, 0x89ce021ddf174019ull, + 0x215c1b7fc8a70ee0ull, 0xc7123711a46dbccaull, 0xbe1d5f3aab094e19ull, + 0xafd53882fe1384d5ull, 0x823b2acba0253f94ull, 0x9dadd43410cfde01ull, + 0x48afcfeea5831092ull, 0x93835bc3ab5f0180ull, 0x44aad49600f33979ull, + 0x051205342cde23ddull, 0x3109790a59234914ull, 0x743d53d7d131e2e5ull, + 0x169d48cae27dfa4full, 0xe22e04be881d1348ull, 0x71c7f9a075027ed4ull, + 0x68a619aed14fcc9dull, 0xe3a40e34c8ae5ad0ull, 0xc88d11321c369c04ull, + 0xdf82a067d1ee7b74ull, 0xf40eb1d7cd08e457ull, 0x105bbb7d695ec5bcull, + 0x3e64626fe6af6123ull, 0xa4a1a426f8ad2216ull, 0xd900ec529054e1ffull, + 0xc366d005b1a71adeull, 0xdfae0cc26bc73941ull, 0xf4fb2e38f6e246f3ull, + 0x837468a093b5dcf9ull, 0xa4687867ae81e3ffull, 0x36918568580c7d94ull, + 0x270b2c3256d28131ull, 0x4944a41088f454b1ull, 0xa9eb29c594aa0bd3ull, + 0x023be4ad9f805748ull, 0x5a71003a56f148d9ull, 0x2f0f3b74306c6c70ull, + 0x0530e462768821d1ull, 0x0fecf065dc31aef7ull, 0xb7c541294776df7eull, + 0x392a5180f285787dull, 0x992c46153699302cull, 0xf6c9eeaafa6702fcull, + 0xd1d110462043f8ceull, 0x7099eeae9a5f92bdull, 0x6cd819ae3ec43391ull, + 0xe2ea9dac720fe263ull, 0x4e6e718914300f50ull, 0x4ad3f871c46eccedull, + 0x49528c261ba3943cull, 0x0aa40f1adb0fbd4cull, 0x99a7051d26e19211ull, + 0xb46e4478faf99556ull, 0xdce681a20129d45aull, 0x294a6da44620da30ull, + 0xf0ee7847a1a705e6ull, 0x6f2cea23ba62783dull, 0x6b60077eeb20d9ccull, + 0x8506122cf334d5ffull, 0x1707a727058257b7ull, 0x63c2dab894341ee2ull, + 0xeed9767f03fb0e62ull, 0xb7ae7556be2344a3ull, 0x38f95ace6710fd9bull, + 0x3a116c1dda4b9c53ull, 0x29f97b5664848a61ull, 0x22dbb870ad9a9b59ull, + 0x094c2135321def44ull, 0x231bec0d322ea8d9ull, 0x67969ba1ee2977eeull, + 0xf0ca8b5255e82207ull, 0x8f0bf570d1780950ull, 0xe33daf85184f7d67ull, + 0xc4a509d840fd41e2ull, 0xb8730eb699a9a38dull, 0xb0d9aef86aaf34aeull, + 0x81e9a8fb8391cf56ull, 0x5d7b09ca452ab506ull, 0x7911ccf966b8dde7ull}, + DynamicArray{ + 0x8557a7c842a80d2aull, 0xfd39ac9e8a51d861ull, 0xb48d840471354fffull, + 0x169f643ec4d00ee3ull, 0x556079a81672a2f7ull, 0x76a372bbb45dc372ull, + 0x8c94609c5975ecddull, 0xba846740d7c7da86ull, 0x5814b5e6f29a3450ull, + 0x4b20cf232eb11206ull, 0x2c37ba1a6d493658ull, 0xe2cb546493a0a992ull, + 0xae7b189ad5487924ull, 0x8466039647867b17ull, 0x67ea6a844e55f642ull, + 0x6e54acdf03c1bb43ull, 0xc0ad00a68d30221aull, 0x29f615c132620450ull, + 0x88b0d9e601486fceull, 0x826e2a678e39cdbfull, 0x0905d668d38ed08aull, + 0xa01a0e9e92a4a3c3ull, 0x15c421157d5eda8aull, 0x84c0a715f5909419ull, + 0x4b8d4ac5abc1a77bull, 0xb89fc1b1a56b7a4full, 0xf41de72c3965924full, + 0x73bf87ce15371670ull, 0x3c2907357430da77ull, 0xf41c3aec829afda0ull, + 0xceb9b5a9c5789713ull, 0x1f870bfeab85a3d2ull, 0x9a8a7d1dec54668bull, + 0x662364971f0a8b10ull, 0xd71a97842a5748d0ull, 0x8c08019625cd2658ull, + 0xdacb8d05167a5e3cull, 0x7f03c9fb9bb38b1aull, 0x66b97ebe96548ac6ull, + 0x8a9ad43911ef7c18ull, 0x8693da2756daf991ull, 0xafd047fabab1f0b1ull, + 0x7a36d9d39e62d1c2ull, 0xa159bb57abe509a2ull, 0x5471a510dd348aefull, + 0x6b4708122f16ac4bull, 0x21bba71867748230ull, 0xb95215c012505407ull, + 0x220341d86c7b86dbull, 0xc01b868362bb293dull, 0x3e09409f65cf292bull, + 0x66f36b2092b8e695ull, 0x9939fd3c4b7fa5aaull, 0x3a894051f12247e8ull, + 0xe7e8bbf9d28277e1ull, 0xadef9dc601a45b7dull, 0xfab44fd48ced1215ull, + 0x6edfe9fb4ed459caull, 0xe0697428c8a5fbb8ull, 0x95cd084d53f174cfull, + 0xb83316e2d43488b6ull, 0x5216839a08dc8b7full, 0x4fea0ea1fa976e24ull, + 0x04fd5763d4511514ull, 0xf99e649d7366181dull, 0x0b384fff56c7c95full, + 0x9b2833ad90063e50ull, 0x06023cb6473d9fa5ull, 0xc10a61e6272acbdeull, + 0xfc434e982262a9b6ull, 0xace3f4ca0d044306ull, 0x779b4b68b3f6df24ull, + 0x10c5d3580107254aull, 0xd8fdd8d96839c4e6ull, 0xfc86a879c166a89eull, + 0xf3a2bca024758564ull, 0x7acae4eec7e04102ull, 0xdc8fbbcea3d14c54ull, + 0x0e214f818b5d3c31ull, 0x7fc606019e921cb4ull, 0x550a16266e4fe9dbull, + 0x1c2a3453683c32ceull, 0x7726b84c9f36e397ull, 0x65675ba7323aad40ull, + 0x5565290d439484b8ull, 0xa791dee3a4904913ull, 0x0781e7c21fb8ab70ull, + 0x43f7ac2663e648ddull, 0xa2152545c557c126ull, 0x5723d17365ca1678ull, + 0xde78b1f13d066a23ull, 0xefac75e83512e258ull, 0xc4cae0d60217ae07ull, + 0xd18b8bfc0be4bf31ull, 0x280a7e01225aec29ull, 0x2901b04c736c4309ull, + 0xd33c56ecd97caf88ull, 0x9322868338479d0bull, 0xaa545a699dc58f67ull, + 0x6891dc55a44fa5cdull, 0xb143840217840b62ull, 0x713dc5e32cdc8685ull, + 0xccbdac2ebd0e9f6aull, 0xf54a523aee7d60fbull, 0xe101aa6defc49296ull, + 0x0785d262a247a544ull, 0x07bc404b30f2c477ull, 0xb83a905b5222d703ull, + 0xd050a48d551517e1ull, 0x27d055758b792bd1ull, 0xf11e192fc320d01eull, + 0xba1e4eaa83e3e5abull, 0x4ed25c57c4ad0efbull, 0xa071869313fff319ull, + 0xe8ae4d49c98c15d9ull, 0x9def61fd25018b81ull, 0xf03c633c698d0722ull, + 0x80313bf352cce094ull, 0xa2b983744dfbae3cull, 0xc81a18d335aff3bcull, + 0x35eeb3ea9127029aull, 0x897d6efd71144b2cull, 0xd1c3b4e0df82c2b9ull, + 0x8309d0d57ce53942ull, 0x708ef3ea2c0aa29dull, 0x963e39678d8be0e8ull, + 0x4f871c5daa619baaull, 0x9ed6f2019687b53dull, 0xe69b1af15d351a61ull, + 0xa5df84e7f22ef9a6ull, 0x785df2615dcad792ull, 0x0496a583f3f53566ull, + 0xe42351b566b72a48ull, 0x06079f446eb6eeedull, 0xd59c5e9c3e0ea1f4ull, + 0xdd4084b0a9fff2eaull, 0x0f36163cb56412f6ull, 0x4153188c039eb68bull, + 0x4541d8c367ad3daaull, 0x43df398e48ddb8dfull, 0x26d454eed9c17df4ull, + 0xa8023ab00b495b94ull, 0x0291b7b650d7ff84ull, 0xe498bc184f23d1e0ull, + 0x825d147104701e7dull, 0x576be68139e87209ull, 0xc9a9bbaaff67429aull, + 0x6e57a21351de1e1cull, 0x302a67bcc95d43c9ull, 0xfea72d52c5ed592dull, + 0x0f8732d52b9c197eull, 0x934bf41011c25886ull, 0x52a36307bac4fff8ull, + 0x8e75221058f312b1ull, 0x61cb06c9de2a4a44ull, 0x8942740adf59afa1ull, + 0x68c6728fdef8b221ull, 0x0eb2ee530e444addull, 0x8a8ed5f4a75ab7ebull, + 0x383cb46181a8d5faull, 0x8941b9744a94a4e2ull, 0x8a5aaa019b97aaacull, + 0x7fe230dddd3c8e56ull, 0xd3390ae6438a6076ull, 0xb9740a8d6727c954ull, + 0xa2113a8f63b34573ull, 0x28cbc56f3da993adull, 0xd41e73fa69f41d54ull, + 0xe80db08a93dd358eull, 0x275688d2c41f038bull, 0x8d5ca30608b1a672ull, + 0x54c9ee713afc0a96ull, 0x2b109d74cfe2925eull, 0xab2761a2f0ce2dadull, + 0x0ec523c6ab639dfdull, 0x6e7c4dc2a930d2aaull, 0x486c6cf1f46fe1fbull, + 0xfd68d5376a712473ull, 0x61258da13348293dull, 0x41e3a5869ba4763full, + 0x00985ee7a8c1b831ull, 0x069ab268ff4870abull, 0xdb5068c125100bb4ull, + 0xc12acde3f44fa747ull, 0x99565c27fd3d844cull, 0xed87fa01fa652c74ull, + 0x26c418d39b3a9a59ull, 0xd4211957f2158d18ull, 0x5b4d8fa2cfd12107ull, + 0x40f2a46cc2437b64ull, 0x13d6a89649d4f53cull, 0xdfc3d749f53d0268ull, + 0x56bc26b1c6da3459ull, 0x4abce5e5c54effb3ull, 0xc63fa0ff606c0d19ull, + 0xdc63f318b613600full, 0x0233128c0cece0e5ull, 0x6fbe861e551d3ea4ull, + 0x32625181bdabda08ull, 0x56c0adb6b26b53ceull, 0x0345f8cb49d3a0b8ull, + 0xd05f308c32fbbaecull, 0xd339723873a33471ull, 0x88195c96f32bab45ull, + 0x875cf8f72ac83e3cull, 0xfdcef29e36a5ec14ull, 0xe7273b4553ed1713ull, + 0x19faf8e9bb4fdf70ull, 0x2f0c0b4c4da5efd3ull, 0xc7cbee59bee9abf2ull, + 0xa1e9226ed71c3133ull, 0x86ff5e676d533964ull, 0x3195af6396e0c1c3ull, + 0x8b82f80ee48143f6ull, 0x21fc0b3ed0e02793ull, 0x9dc1ee988164f655ull, + 0x5a9cec875a7427daull, 0xa058635ab40060f6ull, 0x79369aba9eff7c1cull, + 0x134025e76c809badull, 0x451268adddeac078ull, 0xceb2cf0e0f7aa01aull, + 0x4b7567d8cc5a2d38ull, 0x67c06cd47613f5bfull, 0xe47ce1ec2af9ff62ull, + 0x9985f2d9da4beb8bull, 0x4d492367bf07e1b5ull, 0x5f79051c51c9b2fcull, + 0x4671c4ccc4c70d58ull, 0xfa66c01f9aa964ceull, 0xa68b6a0d9e3d4e22ull, + 0x1d049cadd829a056ull, 0xdb17679d1afbc51eull, 0xeddd0a0b850d49cfull, + 0x5cb5dba49a987ea4ull, 0xd9d0a50b62b7f37eull, 0x21826a3013dd25c6ull, + 0xa02d337ef7f0dab3ull, 0x600346d891f5e7f6ull, 0x1d0b7019d44e5f2eull, + 0xa1f5b907aac95f78ull, 0xa5d7d85432372d78ull, 0xe7375d316f8b8ee6ull, + 0x3256d39d3ccd3419ull, 0x187a8c80a3ab9178ull, 0x29d0aacc7318daacull, + 0xe331942a413d1e05ull, 0xea286139d0ace150ull, 0xe0aa86d4f7c2e00cull, + 0xbd8c90f14cdc133dull, 0x3ff683035458b1abull, 0x2d8ee88e8d80f75full, + 0x440e255d5d30ba6bull, 0x2dc20a1bfad4f233ull, 0xc1d7cc5d96be2a99ull, + 0xfdc5d532b89b6228ull, 0xa969c207f0405869ull, 0xa82857bd5a35b829ull, + 0x63e4e32a0df16580ull, 0xa89cac8c0c095a90ull, 0x2bf25e0e37438751ull, + 0x5c8aac6e1993d587ull, 0x05ceccfc0a158be1ull, 0xa3567c3f4f4b2d98ull, + 0x621a7b6a9c000b9bull, 0x7b3fc3969a2bd47cull, 0xff31d06ed2f630abull, + 0x921a1d96497e0d86ull, 0xad07a8f66dd7d5b3ull, 0x968ba44760297c12ull, + 0x8aced3475c3b2535ull, 0x271ff7916049a373ull, 0x01826e4faa1ef238ull, + 0x0300eeb4015be4faull, 0x3036595333435cfeull, 0x8b7a4cfffbe52cdaull, + 0x39b279998c9a2af3ull, 0x119a0fc6d7bd683eull, 0x0f782fb0bcc40bc5ull, + 0x0b7115307515f8baull, 0x471cbef73cc701efull, 0xe29405663393dff5ull, + 0x3b10458e79874aafull, 0x1bd7deecbc7f091aull, 0x097e8c997821590eull, + 0x15b5c7b8dad118acull, 0x4365ab59ebca4247ull, 0x115fc9bf4585acafull, + 0x4dc0fee340b2fb60ull, 0x11f890daf05d13dbull, 0xb975c4c835778b67ull, + 0x2444ea722e9180e5ull, 0x7c38ba0725771521ull, 0x0a7fb3dac58ff7e0ull, + 0x91c4190c049c5dc3ull, 0x87245a77dde34507ull, 0xbc7da5ea6f3faeb7ull, + 0x32dae0806375ed1aull, 0x20816125f48c202eull, 0x6d2c59b2ffb3f423ull, + 0x3b58856e16001775ull, 0x0bf2edce94c984e8ull, 0xfce43b43a37b91a8ull, + 0x168f30c2bd6d623dull, 0xaffb30ccc7e172c1ull, 0x5a23106802abd3dfull, + 0x06ec621f6dd7e4b0ull, 0x9eb1d01ad1d098d2ull, 0xa228af3f4afa8a7dull, + 0xf0ffe275cf456c1full, 0x457be47d280143efull, 0xbc533e53fed02f57ull}, + DynamicArray{ + 0xe0bc3494d786061full, 0xe66298fd4ed92cd0ull, 0xcea7e7863489c3b9ull, + 0xaf70fc9f6b5ac26dull, 0xfe00427ba74740baull, 0x3b2448a598d924d6ull, + 0xb3394ca0bc646fccull, 0xf9f2166e6da79cc8ull, 0xa0beb0aa5dba9811ull, + 0x772e8dcca7e42041ull, 0x36ee9d4e6a4d26e5ull, 0xf0ff46bcea8c9404ull, + 0xd4eb16ff2cfe3678ull, 0xb0f7073d01b8a4d9ull, 0xd141aba3d5a1feacull, + 0x010addf360d85158ull, 0x4906d8b32abb487bull, 0xd45ab646f4351d4aull, + 0x62d79c6f9ec0f5d1ull, 0x5a7aa27d4e7d00adull, 0xf97f2b7b2c91a811ull, + 0x353fd8a045cd5d24ull, 0xc32a5a61d4405a89ull, 0xdab24206ffb79b86ull, + 0x9928c0b9229c11d9ull, 0xa05f3a35d9095fd6ull, 0xc42364b7100495d2ull, + 0x3478c971fe7972daull, 0x2688a3e1b940babdull, 0xfe9db6a50452253cull, + 0xf9969703d442a428ull, 0x406dc220ed2161d6ull, 0x27a207b377c6b975ull, + 0x08fe1e32781e075dull, 0xe45f61632423f105ull, 0x0f50fceec0833ea6ull, + 0x0c2ae5dc019dfea3ull, 0xc3415cf6eb9388dbull, 0xf10b0b32bba7b588ull, + 0x004ead7e98afcee2ull, 0x2e9ab79f981c7a07ull, 0x1679628679e28172ull, + 0x1c538d03a9261129ull, 0x21691f39c008560cull, 0x679ed5f83f15fffbull, + 0xa549b394eab598c4ull, 0xaaadd112e027ffe5ull, 0xaf1e5c2706f138f6ull, + 0xd19b98f3197b2bfbull, 0x506ae0f3cfca95a2ull, 0x29f25d15db98e303ull, + 0xebd02af9659b7445ull, 0x8986f7988761ad05ull, 0xe0f89706ff63dc03ull, + 0x960b419f2255ebccull, 0x51147f2dd64ce4faull, 0x0a699998961a7eefull, + 0xd1a2af3ab9a9a408ull, 0xff1ea70260169b83ull, 0xf7bc866cfd65aca5ull, + 0x7a5383058d746596ull, 0x356656e904d86d90ull, 0x712f6b97ac8ea9c9ull, + 0x93cbe209a45b2a17ull, 0x6f8ad9580168166bull, 0x499187fc9091ed2aull, + 0x77f8a5acab5f2116ull, 0x7fbf14b9bea12f83ull, 0x314b93253678bc4aull, + 0xc29245c6ad387c78ull, 0x08818e6fae137c32ull, 0x4cf6f561c5caa21dull, + 0x07c34e124e28c23dull, 0x9c9b7e28f29150d3ull, 0x26646cebfa0fabbfull, + 0x31eaca76b0bbe6d7ull, 0x0c9a2264b7508d88ull, 0x13d174c493acba99ull, + 0x0222d915e6f0f75aull, 0x0c9b94ebb3ec92a6ull, 0x8d9e4c168fe00c2eull, + 0xf5c5dec1310b2172ull, 0x03a468e21bf05da9ull, 0x982c94aefe64118bull, + 0xfdc625f4c2dbf490ull, 0x3fcb82a3a413ea54ull, 0xc73c654291d05fdcull, + 0x6fce53c578547364ull, 0xbb247f4638ed7d50ull, 0x4cb790f9331e72efull, + 0x859e248d1f1b6704ull, 0x2ec9e9e27841f8cfull, 0x49d87d50c5144c5eull, + 0x01faef8d78da195eull, 0x9cfe6e5f88f3145cull, 0x4b4e3d50fbb6b46bull, + 0x04b8dd4a3af6503bull, 0x5215584bc2ab21aaull, 0x07133d374a76463bull, + 0x52a80f3fdd43d89full, 0x668c9292348fb9a0ull, 0x4052c886d8777b25ull, + 0xbc56779961952e06ull, 0x79c7a365e0be75c9ull, 0xe6dfdca72506b572ull, + 0x90440ffc96ade489ull, 0x02b5c2e649dd94cfull, 0xd98b3bf6b7b88c6bull, + 0x72146b4912941e61ull, 0xb3a7ea5b0f9e2e20ull, 0x06c795dc7df8f7fcull, + 0xac2a1b550d38d0adull, 0xbf571b8273de634aull, 0x52d484c780fd3afdull, + 0x4ebe3c944166c80eull, 0x8ed654555bfeef65ull, 0xca4b0af0f1fcac92ull, + 0xcb22ec20003d25e2ull, 0xeddaf69a6507f7edull, 0x9f10e300bd3a5de2ull, + 0xe851b4cf663bf85full, 0x9df9a3f6cda6e467ull, 0xf78dfa9b8ba469cdull, + 0xe1fe84738503dafcull, 0x594068c4af326f7full, 0xf1858c94d9be898full, + 0xb29bfc98dafe86ffull, 0x66181384d4bc7452ull, 0xff4958e373e71880ull, + 0x4ccefde9d1d75c59ull, 0x7197d777c250c777ull, 0x77e8793fa6f0197full, + 0x15fd27cf90abab07ull, 0x95683f2508e02f49ull, 0x184d1d47796d8b67ull, + 0x3b1e1339e117e6e2ull, 0xef61ee31a311f2c5ull, 0xdfb4077db13df838ull, + 0xba247c9bfb73b5cfull, 0xecc488cf011ad4c8ull, 0x24678bf0b1cc593bull, + 0xcf80297396ac8dbdull, 0x743e58f624462865ull, 0xa397c94e8d7ccea5ull, + 0xecdcb4fd91af0d21ull, 0xf284c66c085145a3ull, 0x0b2b1e905ddf292aull, + 0xc6af51063a89555aull, 0x62028cac03e702c5ull, 0x3f9ef1f67b4e837bull, + 0x25a7f263af59f042ull, 0x08e7104745c09630ull, 0x554eb7932e4757d8ull, + 0xf5f4943d81b5cdcdull, 0x82bef5a818824877ull, 0xacda175b8e4b4c32ull, + 0x349f9d893c398027ull, 0x9d249207d1182dc3ull, 0xf3aafaea6fa2df43ull, + 0x541963429c9d6395ull, 0x26bc3b89aa4a3a32ull, 0x904de7f05b0184fdull, + 0x11d80efb0c46af5cull, 0x244f64f93d093d75ull, 0xc98c71507318eb68ull, + 0xd8db246e01d8488dull, 0xe7b802452cca2ab7ull, 0xa8c291e50103026aull, + 0xdcf29bf491fa5cafull, 0xb92251194052ac30ull, 0xa5e4ee5ae0395bc6ull, + 0xa1deb33e0992726cull, 0xa13fd3a386149616ull, 0x7ba4d5b510783527ull, + 0xe385785d1aaac66eull, 0xcd4f3ee8e6d11d69ull, 0xd07e6fb5aa993194ull, + 0xabe4703fabe34646ull, 0x984971c351d001ceull, 0x353ce414673df85cull, + 0x37b7dd5237d17598ull, 0x57dc48be3f6f9407ull, 0x730253979a912965ull, + 0xad358a26749747fcull, 0xb99c5c4a2c7add21ull, 0x35e027b974c81e99ull, + 0xdcea03dec7ff3ad1ull, 0x7e8bdc381593911bull, 0x38f1f9e5c7bd3118ull, + 0xe944192af671bfd9ull, 0x08136da21e1a6a81ull, 0x7644cd8dccb82d54ull, + 0xeb323bddb9b387b1ull, 0xb8440224b0527d76ull, 0xa6598932c3c12b1full, + 0x231a89d9d29409fdull, 0x653b3826a3ae2021ull, 0x0199e770f9d90fadull, + 0xd0e5a5786dff444bull, 0x3184c629f8475dd3ull, 0x521c6310e2b15d5aull, + 0x8a87051f199ade7cull, 0xce078ace79173528ull, 0xc48251458cdfa4b7ull, + 0x22d4223642663409ull, 0x29256e5375395536ull, 0x48684aeba3a8247dull, + 0x838e27e651b6df73ull, 0x821153f887cde2e4ull, 0xd524b16763e0a465ull, + 0xce5e60f21cd01b72ull, 0x72dded9d27976c0cull, 0x0bd27b0ead9d00c6ull, + 0x8123612c56c075a5ull, 0xd50fb9bb4dc90fdeull, 0x56a8d95845848009ull, + 0x3647faabac19f0e1ull, 0xe494375a07250a5cull, 0xb521fb4aa826bd0cull, + 0x2188b63a1631469eull, 0xc7ee3c4cbcce51a0ull, 0x2f73bb9e443946b5ull, + 0x012e19746ba3c81aull, 0x767bd5670bb5e0e5ull, 0xc72890f5cb6fb6c9ull, + 0x2373f7f801714e9aull, 0xccb2992df067cf9bull, 0xf1c782bf5343c9f0ull, + 0xb7404b4f3b923891ull, 0xa5996291eeb98926ull, 0x9b7f5ae4518af1a3ull, + 0xd687dc662265bbc4ull, 0x704c6818e1283e84ull, 0xb1f1d0b14621a818ull, + 0xf6a037d80df30101ull, 0x1b4b4682c6ab810cull, 0xa542e4f7090adb40ull, + 0x74298d213bc32da4ull, 0x580451f311986256ull, 0x1882478ba3722054ull, + 0x5061ceea702c1af4ull, 0x42a07472eb6121f8ull, 0x1cb789b76d2d42a5ull, + 0x1a0f863a00add59aull, 0x51a18815d197a534ull, 0xbf3852261ee8d16dull, + 0xf5eba8daaacbe30cull, 0x4d3d3fd056e7fe96ull, 0x1df4772ac6f6a5a6ull, + 0x5707c6ed97fbdb8aull, 0x6917215ab7984bdeull, 0x37c75a8253139461ull, + 0xfb37a667d3b0e28cull, 0x63e5d71c18e8cf5aull, 0xf521be240ce3d402ull, + 0x0226bc252667836cull, 0x738631a9b2872a8eull, 0x4e95b0b12fe2b3d2ull, + 0xa55bc2197295e3d0ull, 0x00fa01316de9d8f5ull, 0x377e43a83716710eull, + 0x125681eda8d291d4ull, 0xdcd14feab6f2d04eull, 0x1b8f907591cec524ull, + 0x67567b53268a38d0ull, 0x5e61d9965c4e8451ull, 0x2951867d70556e7full, + 0x05dc05893fd27d48ull, 0x644200f6300265c2ull, 0x81c67c251a5cf697ull, + 0xaa9731e966282a40ull, 0x798a744c1bd95b53ull, 0x8d407038c4995aa0ull, + 0x97c67be1023d793eull, 0x16fa6f657d47d1f4ull, 0xf4d40e5d6206f872ull, + 0xa744ab34922c0db3ull, 0x2e2522a0366a2da8ull, 0xdb1d70af7bf62c90ull, + 0x94c2c3d4236bba09ull, 0x12fe9c7d13501b79ull, 0xd1a011fe51a4ae0bull, + 0xa95ae0e36ce00f72ull, 0xb80a9da76fa1c338ull, 0xb5d5c217c3ce60c9ull, + 0x72c7e310b061cfcfull, 0x8c098fa884ae59cfull, 0x6891f06ca2e7d2d4ull, + 0xe8e7f468dc6fc56eull, 0xc8319a2b2d8cae59ull, 0xc803b5c59ea07902ull, + 0x43ee7b535c3c3194ull, 0x83e05d08b5ad17a3ull, 0xab46774697f54546ull, + 0xfd9548ef51087a3dull, 0xa90810a8e97f33b4ull, 0x0e588bdbe940587full, + 0xdf4b3ab3824f06daull, 0xf4e51752e01e0e03ull, 0x40c3e3d132877064ull, + 0x7670f808181ea807ull, 0x74e05ffd63bcf725ull, 0xb54e181eb2822b61ull, + 0xece6c94150ac873bull, 0x58e7c05a291450c5ull, 0xfd86ee29967026ebull, + 0x0dba50399ac9ed81ull, 0xc5df19d79bd7742bull, 0xfdc8f517adebb20aull, + 0xba93f6d695419158ull, 0xc710c96ed48ffcd5ull, 0x7e7645e984479b9aull}, + DynamicArray{ + 0xb78d7c3decb50958ull, 0x780ecaeeaaf484f3ull, 0xb16421217561e258ull, + 0x4fed607dfe594995ull, 0xb2b48da9049e9aa1ull, 0xf6e34f561fc0ae85ull, + 0xaba23e9b92aa9fbcull, 0x860f95ab019b7cb4ull, 0x6ca43547ae000009ull, + 0x4d10b9fc4e5c78feull, 0x72b81a68b33f07baull, 0x1722e8425df4cd0dull, + 0x71ca95cfc0d04781ull, 0xdfde4a5b6bc3aac2ull, 0xb854f2c217d35bd6ull, + 0x800a3d9c7dc9905cull, 0x0f83958256a04d13ull, 0xaf2d7f90f857234bull, + 0x3ee83851440cd2c3ull, 0x90a8bb6c27468137ull, 0x619ffa60f1374d61ull, + 0xb05fbf47cffd36feull, 0x1070d629e8f403d7ull, 0x791163cb48154da0ull, + 0x617d59276a06ef55ull, 0x8cba24fed2a3d6b2ull, 0xdb509b75e8253ec4ull, + 0xd5cd1fb76d85bbfaull, 0x591fe842b1407cc5ull, 0x318b89821998435dull, + 0xf61966703310a991ull, 0xc84d24c0cc0f3b38ull, 0xb828e5b724bebd24ull, + 0x8041e9453703c7c0ull, 0xe1e3c155aceaa7b0ull, 0x1653943ef144c319ull, + 0xee6fe543e0226d0bull, 0xd1ec34e87ddc7ef3ull, 0xf8869ce9f8c3d796ull, + 0x7b54709c0c612e9bull, 0x124393651ee16f82ull, 0x38c49a81937d4b97ull, + 0x70c196369cfaffdeull, 0x374cbee22050a40bull, 0x1769a336ce6fabb4ull, + 0x49d701f1bcc6a84full, 0xfceba8509e503ff9ull, 0xf0a2658ff4f87551ull, + 0xb855c6d4edc42958ull, 0xe775d28ef8ffbf3cull, 0x425248f9d726393dull, + 0xbde5f34c61ff7284ull, 0x2aeb28eac86293f9ull, 0xbfebb9032211c608ull, + 0xaf964a026d49a097ull, 0x4216ca77b105baf7ull, 0x1ba6f720dd8efb9full, + 0x35bd39fbc2f88048ull, 0x696a136f394f354bull, 0x4f007156656a7d2eull, + 0x91688dcee3637debull, 0x489fd93695099b96ull, 0xc61ea25c3916bcf5ull, + 0xc443ba9cd0c46de7ull, 0x636b5970df80db73ull, 0xfcec4cd70a553220ull, + 0x6b6f5dc1cbfb1058ull, 0xe48c7eb21feb409aull, 0x86ffb9a4edb9e1edull, + 0x8bb069ef68ca1143ull, 0xc60145b9ace95a8full, 0x9278ee0fdff08db4ull, + 0x6c5300d8529934faull, 0x082654c455e24932ull, 0x6beaf9d62be59bb9ull, + 0x90ed9c01ed24deb7ull, 0xb6e5c55f298d4713ull, 0x96e3786fb25e61ecull, + 0x2add5d7fb7f98627ull, 0xfc09513afe08bfe9ull, 0x71ad05c0378ebb4cull, + 0xf987dbf37efaf145ull, 0x2b0692b682381294ull, 0x80758094a954ab1full, + 0xe745ceb7b828abc5ull, 0x4ae4724d17f69762ull, 0xaef9635e86b8f2f1ull, + 0xb94a5288170b6e13ull, 0x62a4a35e6bb2eb86ull, 0x071f1d5feac6a257ull, + 0x313c96e15a3ad3a4ull, 0x5a76b04b3bfbe97cull, 0x2ca3a8f4cae077e8ull, + 0xae26cbaa33945b5aull, 0xe3c35a42c7591317ull, 0x6ddaceea2fc8799aull, + 0x056482cd4c0d5e7aull, 0xbae871a9617681f8ull, 0x7473009c8cf44653ull, + 0x9bdc70d0eaae5244ull, 0x66899b1669ffc987ull, 0xd96d69a92a49490eull, + 0x988bf183a9e59621ull, 0x63bef13ca1799757ull, 0xe7db5445d6df2dddull, + 0x4a470e4bc64c330aull, 0x7bf26e6918b3cb60ull, 0x1129b187be1fae53ull, + 0x7ca2689203a40de8ull, 0xa99812dafd8c5deaull, 0x1083af6aa2faba44ull, + 0x9eb9ba1d5db03e1bull, 0x0214a44e1858bc6cull, 0x1f10aa9baba2daa4ull, + 0x8856620a192a4c67ull, 0x1866a514a7b4a0d0ull, 0x2274de77685ce776ull, + 0x79b27ddd1319e5d2ull, 0xeaf09342d04a653aull, 0xac35ee9132c7122full, + 0xedb1277a6342b050ull, 0x7b4991868b269fa1ull, 0xaa5eb919d5a1daf5ull, + 0xfb6c38ffe3a24105ull, 0x81351bcccf62be19ull, 0x53201d530cd62d7full, + 0x4987a224f55409afull, 0x9a2d9e833734ad46ull, 0x72f3d5ef97ddc722ull, + 0xa1606676c0e1f624ull, 0x4be363ed752f37d9ull, 0x964f5959cb103aafull, + 0x4baacd95abdf634dull, 0xc354a4906ac0286bull, 0x6fdc1dad779dd345ull, + 0xcc2109959fe509b7ull, 0x88cb5bd6a141d000ull, 0xe919f3653b29ada9ull, + 0x9a669275d413c25aull, 0xf2d54fe9560fec4full, 0x518066652fec85a7ull, + 0x7010d292e860bba7ull, 0xe63a81c5b74f7616ull, 0x4bc079e948777e7cull, + 0xfe6dfa0fef828187ull, 0x404d380cc169af34ull, 0xe8739bb2e9913957ull, + 0x8c4c07384eb1ba7bull, 0x726fd2614d49c23aull, 0xaf10ba7f4da80d58ull, + 0x982baadeb9753a56ull, 0x69a80dd587b95155ull, 0x7d26464920a8f02cull, + 0x1f94c4adff5e30bdull, 0x512c8e9f5a550f88ull, 0x42660c88daa037f2ull, + 0x3993755c2f7b1f31ull, 0xa3d31b7cf65e3ed8ull, 0x44930d27e7dc38b6ull, + 0x090d0a19c7daf58eull, 0x658325f7a21ee3b3ull, 0x4693d1ab48fd7d70ull, + 0x5254fe474374c9f4ull, 0x37a0350096ac4de0ull, 0x0bcdaa7849f532d5ull, + 0xc1323141c2ad56a6ull, 0x85568106527399ceull, 0x0ba90f9f96f3cfc4ull, + 0x47f4eadea6f62a3eull, 0x89c8e513c69945b7ull, 0x702c5926d7a69244ull, + 0x205ed480030687f8ull, 0xa53468eca17793b5ull, 0xe2eaf25830876a1full, + 0x7f8b78c08dc84c1cull, 0x34352cfe69f629e8ull, 0x82c202823b295d62ull, + 0x9c19e64069265e80ull, 0xc784090992c421b1ull, 0xfb5fe1724095c994ull, + 0x36385339e3de4f8cull, 0x8110164eafbc2ddcull, 0x0ae3558654e510bcull, + 0x0828156690886f6full, 0x45d3f7a8f9c758d9ull, 0x38b574fac77a59b0ull, + 0x9db96b59e110adf8ull, 0x9b56c0814b6afce7ull, 0xf2b5246612dc436eull, + 0x91920f88c2dad7acull, 0xe11a92a188cdb19eull, 0x2f3a756249cfc967ull, + 0x59e56efa9d653df5ull, 0xc0a396e40b71837full, 0x635f9703fb432330ull, + 0x8b2fc28b5c73365bull, 0x991c0807e3404f4bull, 0xbf56aab445b19946ull, + 0xfb379331435115afull, 0x420b682c6037975cull, 0x7fbccffb38e41671ull, + 0x2d432abc18d95db9ull, 0xaed71543341d8b15ull, 0x0eed36fecfaf35f6ull, + 0xbda900ef5243207eull, 0x2d830f1f567c955cull, 0x33f2729b5dbabb5full, + 0x7e10da90dbb8b3ffull, 0x442ef277d55a317full, 0x07f3af0585dff38aull, + 0x79756cb9ad74cd9eull, 0xd11e5b79bcacd031ull, 0x5198cb9fa41166f5ull, + 0x61ee7f51ddaa9977ull, 0x1d973eee03879a4bull, 0xe8f69cce04c2c371ull, + 0x720e4948bf7f4716ull, 0x2751f6a711331bbfull, 0x650fb12591806c5full, + 0x84c00923a609469full, 0x2f097d76e2756714ull, 0x9d8812bffe52e055ull, + 0xc571ee9f5533bf59ull, 0x4abdecf7e6ad9f7cull, 0xc1027a3424c9f0e3ull, + 0x6864a251803cf055ull, 0xdfe18677058bec1dull, 0x1a9f80834148fe63ull, + 0x6d7b9d1310a73d50ull, 0x2d18ee1bf6208926ull, 0x3b2decf4565bd4e3ull, + 0x87fa1613f6ffb102ull, 0x5083f430a76e4770ull, 0xac99159c2d91486bull, + 0x6236f3bebce25664ull, 0x756abee8fd6fa3faull, 0x8f0f63fcd9870b18ull, + 0x020dba25d61af17full, 0xf15b0bd5611a1f3aull, 0xa1185fe356270000ull, + 0xfb4bf17a32097cafull, 0x917dcf1d13cf790cull, 0x503ee1bce46c4992ull, + 0xd33406990c04a589ull, 0x4d27953cb5e18caaull, 0x2b0bf0f47556ac07ull, + 0x8310b3805240da6eull, 0xcb7f8a15dab8180dull, 0x8e753b28b0f2d4ddull, + 0x1dd924cce301cc3full, 0x47c5a290a6d6996cull, 0xb271cb5c32290712ull, + 0x617be7ff842e24f1ull, 0xe95efde1d19a520eull, 0xf8604df30a4a5c75ull, + 0x6d71241a2f156217ull, 0x6ec91aa0a61751a3ull, 0x95b592374aa19c07ull, + 0x880ab369a6452237ull, 0xa3fc3ea46cd89f00ull, 0x9e84f3082cf9c133ull, + 0x3bc3b1d899e96cd9ull, 0x62aa404f2b88f073ull, 0x03415cd56419aacdull, + 0xe19768530eb28cbcull, 0xb5bdb173d31699a1ull, 0x1ea37348d59e22ceull, + 0x703f7f2f7b0b4528ull, 0x8ed31e93bebb6f3cull, 0xe18620b8a9233d84ull, + 0x29536e0e15675989ull, 0x7312a0bf94f1a4c3ull, 0x4d5f303cf9855490ull, + 0x194f166b11451e22ull, 0x04aa14cc3a0a0e48ull, 0xf3510f38ad4e6fe4ull, + 0x175f604fafcf02e8ull, 0xf8cbd3c3d3903ebcull, 0x2b1d9032b11b996aull, + 0x8c2cd2b1f68cea1bull, 0xa29321d06d04800full, 0xb655019e1b876b9dull, + 0xb873cf2a8d163d66ull, 0x82d5c11ca6a8fc9full, 0xa688d18c9f67106full, + 0x2b003bbc61467a12ull, 0xcfb9185393b46119ull, 0xc32772ef7e88d37dull, + 0xcefe1fa19a1d0144ull, 0x275782c5a3c6a4a8ull, 0xcf01700fbc7bcc2bull, + 0x072ebbf90604e8f7ull, 0x39f6d223bb2a9853ull, 0xaacfb2926b8d54a7ull, + 0x2be4f3cd4428b14aull, 0xaf1b52b99a8ee7f2ull, 0x22795bae06f3c55eull, + 0x455c9032d64afff0ull, 0xfdb473d39a197bc7ull, 0x9bccc5e4ba61a4a1ull, + 0x9b466e8227f6ec43ull, 0xbdaf42d3d3a622c8ull, 0x92d9466efe8c6c1dull, + 0xa075f65050d530c8ull, 0x2af57f5f1910d133ull, 0x0a741c4c006bf353ull, + 0x7ca70820746add75ull, 0x16cc92bcb6b23057ull, 0x98f35430d892b72full, + 0x81966f07e6c4e83eull, 0x2bf2ed00f702e1a1ull, 0xa7be1fc444e34779ull}, + DynamicArray{ + 0x58f9b16ba8eae2c2ull, 0x9e7e06a9f9b38806ull, 0xbd9d3cae469e647eull, + 0xdc8db1e487891febull, 0x9aaa4c907ffd4349ull, 0xf2185a94fd6102a8ull, + 0x4f948df035de447eull, 0x43883e874762f914ull, 0xfd552056e441ac4bull, + 0x7b602e8563a05681ull, 0x0d1e7ab2359dffceull, 0x54760b54e7c1d06aull, + 0x70fd212980acec07ull, 0xcc5912f73e60599dull, 0x9532d56132363de8ull, + 0xfa62487afeeb478bull, 0x020491ce85e9d466ull, 0x4ab0cbcd3bda49b6ull, + 0xa9e8b3445eef39f1ull, 0x84137454c4bd677aull, 0xb3a8965efac13e34ull, + 0xcde6cec0db5b3fa5ull, 0x405d379253893fbdull, 0xabca68a59057e594ull, + 0xedbc6c55a953b35eull, 0xb0848243e9c31829ull, 0xb147df3edbc07dd7ull, + 0xc87df627eac162f4ull, 0xe11dbc1b4f0cf53cull, 0x453c28d8458a8e28ull, + 0xa3c236b70772bae2ull, 0x9e6081082f9274c6ull, 0xf89c4fc1587a228full, + 0x5c655e3231fc51e4ull, 0xcbab970cdb8c1f52ull, 0x23e48ee506ba96b3ull, + 0x4af8f28c339cf2dcull, 0x86f998105e32fc82ull, 0xb3ff6396e2c66ba2ull, + 0xda1a758580abd1abull, 0x3b7fae2a76b5afbeull, 0x2361383bc1be6183ull, + 0xbc160de7ef557465ull, 0x4061d7efe0c59018ull, 0x56f7678bf0543f5eull, + 0x5854ea2527605adfull, 0xa14a2484a449f2eeull, 0xfecd0e2f387c2212ull, + 0xe8bbeff0f5333161ull, 0xbe10e757ccd956c8ull, 0xdd642bcf127e1b0bull, + 0x1ce095ecec3abfafull, 0x42f7a12656e481e3ull, 0x04b73326721f71b0ull, + 0x8971c3419978794cull, 0x21ffd81293adab7cull, 0x544ff350e8f444a0ull, + 0x0dc63c4792c29cb9ull, 0x7d645fa096816f5cull, 0x48ff2c6a560ed458ull, + 0x749420b49dfc16deull, 0x201d75185137ca0bull, 0xe6edfa0b44214ceeull, + 0xa6566b2a5f850421ull, 0xf001f43a7992419cull, 0xe26922b47e102cb3ull, + 0x85ce089bef2aae46ull, 0xfa99a7cc75f62125ull, 0xce94590b8852ddf1ull, + 0xae111520d06a504full, 0x15e7b3c8343d19cfull, 0xd2e5c8e24b74f1baull, + 0x78f6835bc8ea8260ull, 0x169fc53b464a26baull, 0x00462a766a1a12f2ull, + 0xbb7b86c3347f366aull, 0x4224e619b42940c8ull, 0x10d2b843e28836ffull, + 0xcaf5bc4ddc481fd5ull, 0x7aef4b471072cdfbull, 0xf438e757a434c151ull, + 0x4ac40accde51c77aull, 0x3b428e1e9efb7e3dull, 0x37ec4649ec4c0e54ull, + 0x175ae6a22c149ae1ull, 0x25669eb5f6e40549ull, 0xc858e0c47ffa3456ull, + 0x3d4347e6f4fc873bull, 0x8fa06f1e6f4bacc3ull, 0x7447e698ed4b3c4full, + 0x5b62853e8be9a07cull, 0x1d0abdfade6e95caull, 0x2e91c645a24a8e2aull, + 0x40572679ca3803acull, 0xa5ef4a4bca402ed8ull, 0xa50e370cdbfd4ad0ull, + 0x998ababdf4383aeaull, 0x5be7b3b12d26f6beull, 0x2f53285a938265c1ull, + 0xecbddf234a015885ull, 0x1aa2f6b36323a175ull, 0x3be3d34ec1f4fbceull, + 0x738442a8c6f2c72full, 0x46a82b977bac3b7bull, 0xf453446e968d5e51ull, + 0xd574c5941e1ff522ull, 0xca95729acf488fe0ull, 0x0a32cfd2bb3a6bc3ull, + 0xceee0003195f46b2ull, 0x9369fd0842bc4706ull, 0x51111a3aa6584c8dull, + 0xea5ae9bac8024a3cull, 0xc2044e4f4a4e24a0ull, 0xb2dcf58f8d382c73ull, + 0xc9b64e7f52e597ccull, 0x7879fc943affcdd0ull, 0x0c787756a9ed6aefull, + 0x511bc9c450967258ull, 0x2a5bc32c1e9edaddull, 0x8a8639e8a02f4928ull, + 0xe95ff58caafb56feull, 0x09d10724645a63caull, 0xd19f54dbacb6e6b3ull, + 0x258bca7bc5ec16e7ull, 0x163958e424f59dbcull, 0xb8d356d4a9fd3cf0ull, + 0x35d542d8d516c1a8ull, 0x81198bc8be87af42ull, 0xc0c6951d35eca805ull, + 0xdb446ab1442189feull, 0x965461edca58fd42ull, 0x76403cb89e7558beull, + 0x39f2e152f45b4ef2ull, 0x0d0594e7b16ac6a2ull, 0x6711a0fa791119c0ull, + 0xdb6b1b61f68c67cdull, 0x8a3b8da62407e065ull, 0xa597713af7fdfab6ull, + 0x10e619304f2cc730ull, 0x78417100e69b60b6ull, 0x86eab55f5998ecabull, + 0x179d89aee715f45cull, 0xa6b2403007c3731cull, 0xed5f1cec725c6277ull, + 0xa52eefd522c92126ull, 0x81899eb62527c039ull, 0x25ed14f13383d018ull, + 0xd8d1d88457cfd2b9ull, 0xf867241cb3dbac1dull, 0x254721e6275a567dull, + 0x4145bb4c2a87086cull, 0xa15d6194c123c653ull, 0xfd28ba69142a580dull, + 0x269443b35f2eb1d0ull, 0x3eba2a05b8335a7aull, 0xdf946f0c510ab894ull, + 0x505a93581d3b3354ull, 0x00c8c25e49fc9995ull, 0x69314d6fff1537acull, + 0x98eb2eb287e5cd12ull, 0x77bfc244708cfa52ull, 0xab51b843617f1b74ull, + 0xbb20e58edfdc3665ull, 0x44eceb991d44e86aull, 0x07594ab352c705a5ull, + 0x66b5c58180c4eeb2ull, 0x690fa613e66cb435ull, 0x228741ee6c988436ull, + 0xec2bbf16b785756full, 0x78d0682667ba50b8ull, 0x077c6dc1fc820794ull, + 0x88b03e7b9f4e9777ull, 0x35321c2715f06019ull, 0x9a5f0676a3645ebaull, + 0x4ffa8a5046ef532eull, 0x5e407059dc61499eull, 0x475b2966ec217892ull, + 0xb6bdaeff45c241fcull, 0xfc5e507db57a604aull, 0x92e0f6ba0fc5b176ull, + 0x50838172f1fb762full, 0x7355856c48b152a1ull, 0xe867762e4b5ef161ull, + 0x4b5c831f6c7298edull, 0x65d01b46efed0178ull, 0x205fc7b7cf8cef0cull, + 0xfcd747a661c64b28ull, 0x9da392f4ba803e7eull, 0x66c300e36c1eaea4ull, + 0xb6961e97c8b893e0ull, 0x41571c8b13caf417ull, 0x86d730f1429c61caull, + 0xea5fa0c36b93d685ull, 0x401c930d70f4e4fcull, 0xb28818489ef7f6dcull, + 0xbc91671e94df18f5ull, 0x8c663f836d4dc8bcull, 0xe6c992cf3c6c5ea3ull, + 0x92a024e8b238984cull, 0xee8bb619b05eec07ull, 0x86bedb12733f74b8ull, + 0xdc88cb6cb121f9d4ull, 0xf425ef359a789770ull, 0xb8f916844d169848ull, + 0xa7f75d26ec1f3767ull, 0xdf69ea095cb41734ull, 0xe265b4d0c5889f02ull, + 0xed6f2fd000fac3a4ull, 0x027b87ce2fd9d375ull, 0x8957bc7cdb26b3d1ull, + 0xb482d530be8e687dull, 0x2a00da017dc0c4a9ull, 0x0bef1a3c8a347c5eull, + 0x35a03837699a9ae9ull, 0x7ae18c5e0d0d74ebull, 0xec4eff9e9c448d01ull, + 0x592b788556378da7ull, 0x78ad8ec7d7633501ull, 0x816d96568560e034ull, + 0xc8d2eca2650cd242ull, 0x3a217f5d711b1b40ull, 0x6373dda55eed78f3ull, + 0xc4dc175a284fefe5ull, 0x6ad8c43164801028ull, 0xfa44d4e1f4d88b24ull, + 0xa058d44038eafe6eull, 0xe53c4b753e6b719full, 0x33dde09bab6c89e1ull, + 0x14b99f2923664da2ull, 0xd6d27d3dcff8a576ull, 0x81c7e2e6c9cee992ull, + 0x3b267a4f98aabf6dull, 0x4ea4859e0f5b9840ull, 0x04283224ed4551a7ull, + 0xcfb3a2532a4d145bull, 0x7fcca9f0382e5295ull, 0xf7edab549cbaa577ull, + 0x62b6cc6b699de849ull, 0x1cf1a432eff1d89full, 0xa137c14e1e99b377ull, + 0x56ad43d668d100c8ull, 0x7c129c11740ab030ull, 0xc224427cd5a2c9d1ull, + 0x0713f1748665262dull, 0x87f6f71e99d81f82ull, 0x4c076305f75c8104ull, + 0x5ae6fa191b00cd78ull, 0x049c153be314bf2bull, 0xff9eca5b900d3485ull, + 0x3adbcaad81eddab1ull, 0xdcafd71b03b36c78ull, 0x20c047506e8a5419ull, + 0x5f11e1e8839cff12ull, 0x2a11c8f28243e12cull, 0xae5eb45a3298f5f8ull, + 0xf23bea87bf43916cull, 0x97973df600211832ull, 0xb5b60d7557edbca2ull, + 0x21969916f40de9b1ull, 0x13b1337eff900123ull, 0x4422155c2b94aa40ull, + 0xc3af5cec45a95feeull, 0xb8228dbb19186083ull, 0xbb7917aff683cfb3ull, + 0xfa6f09863e556afbull, 0x88f87ad56d40d7e9ull, 0xe153f919d036f1c5ull, + 0xa23f22c36e18d6b3ull, 0x012f0213932d0374ull, 0x3d3a3c97bf574e79ull, + 0x66116cfe71833cb2ull, 0xb498b5937a322566ull, 0x17c50396bfd13ef2ull, + 0x9166e9177ded9c10ull, 0xdccd344710991f55ull, 0x5bbe5b5c508401e4ull, + 0xe2d9dbf56cbc68ccull, 0xc71caa57b7a28ae6ull, 0xf1c4d88d9f652229ull, + 0x7936adc5f5561b7full, 0xb8b811ba18bd3aa9ull, 0x55d2b4811170dfe7ull, + 0x1cd389556f0930c7ull, 0xe1df128ba495d2eeull, 0xe85b3f0574c6853cull, + 0x8a361927ea74d003ull, 0x9853286a03fdb781ull, 0x65056692d2c0f7ecull, + 0xad11e4b87816c173ull, 0x9183d9534fa91032ull, 0xa599af33bdd7cb5cull, + 0x937ab6496bd8d7bfull, 0x21d6491122e7c54eull, 0xf1b3892ec9f833d9ull, + 0x3612d80adaf3b04aull, 0x5c332c13e342d93bull, 0x51df0beec14891b4ull, + 0x5a7931d811231975ull, 0x854af51707abe009ull, 0x8e75030ca5ea4359ull, + 0xd6886eee2577caf3ull, 0x4384b590dd47a51eull, 0xd5d76c15f3a914e7ull, + 0x503d2482a80f7cfcull, 0x6a57db8908e4a5b1ull, 0x1eda5165b9900789ull, + 0x7b33f02e30fcbd7bull, 0x780312963272fae8ull, 0x4a2224659bbbdcc2ull, + 0xdc5d70f758b516d6ull, 0x77feaf2318a7461cull, 0xea42e6cb6e32204full}, + DynamicArray{ + 0xe24afb210885c518ull, 0xe4bc69868589e6adull, 0x0cf97a477ada9ebcull, + 0x6a1e53ec94a33f45ull, 0x7a7380d5bb05d49eull, 0x5c4110d02218c733ull, + 0x23c9f45c908f47cdull, 0xf11a3b7aa145bf51ull, 0x209e05d55fcfe9f6ull, + 0x0e2452f308c29d9bull, 0x543b41a14c083999ull, 0xa06fe061240a3d57ull, + 0x1d04fe20385f71fcull, 0x71938f51d1d978d4ull, 0xc10bd82dec7126d1ull, + 0x36b99c29108660dfull, 0xa73c90644b58c1a6ull, 0xba3f221d4053bfebull, + 0x690dbdea27adadbaull, 0x329fb6e19b9ed664ull, 0xf202347431ca75a3ull, + 0x25f13ab897e55345ull, 0x9effb4535e741f4aull, 0x1fa6fbd0bced03c6ull, + 0x49d4d0af739c3a2full, 0x3063db5dc3c2a6cbull, 0x0c6af1efd5849da4ull, + 0xc3e0dcfbba59ded6ull, 0xa4de540be156829cull, 0x8c87a098bb617d4cull, + 0x12b1002635533afbull, 0xc120a33ead450617ull, 0xbe145e97a115dff9ull, + 0x06b10e886a7c51feull, 0xb83cf99e6e2fc829ull, 0xe8a8ef09fc7b696full, + 0x3121c351df14cf5dull, 0x2daba7bf7c3899e7ull, 0xd310211b429dad9eull, + 0x8c8d66d55cf63818ull, 0x098a0515c589eccfull, 0x33059b05833f3698ull, + 0x8d35bc6c52148af7ull, 0xd6ab9a18e44c82bfull, 0x1fe270766fbf286dull, + 0x27b45ff5a8231320ull, 0xa53b2c16bfbe5602ull, 0x6e49b10d2c83916dull, + 0xc7912ba6e3db7a13ull, 0xcf632508cf3b41efull, 0x4cb384ad5ebd2c29ull, + 0x87665a5bf5257327ull, 0xd0240f59cde486baull, 0x2670f3865007423dull, + 0x02094c82be777b40ull, 0xd4530fde8f795455ull, 0xebcff36cd493ce47ull, + 0x15fda6a840b6c769ull, 0x07a190a9afdcefeaull, 0xbbefa324d863d3f8ull, + 0xf79e9d4c983a8343ull, 0x55f909addd79e1fbull, 0xd673fcf007dc2442ull, + 0xa8cc973b4b9467a0ull, 0x137b733711fab8bfull, 0x7bf0f50a4629134cull, + 0x27af668e2443abcbull, 0xb8659359eef00f3cull, 0x3f38c94b09d99ce0ull, + 0x6375414d1fcb66cfull, 0x72ed9eae007fcef4ull, 0x3aea535a38534583ull, + 0xfffd40ebd716fe9bull, 0xf34625e9889f34c5ull, 0x96fd1b83a78db4dcull, + 0x7c3e91071d52a493ull, 0xeae5e5fcd22e16dbull, 0x4b4bda03c78b22b4ull, + 0x9a7e903e10461599ull, 0x7740da12b39d0299ull, 0xf611b48366001d7full, + 0xf1ed97c831551434ull, 0x177ea2f90528c498ull, 0x131754e65f47b953ull, + 0x847f6b86be9b9f4eull, 0x67cddf8a5899226eull, 0x2643d17ab87855a9ull, + 0x8d5e69514e0cb89full, 0x31b44e269bd79121ull, 0x4c284d12dfc18cdfull, + 0x85f6b7c73e727b6eull, 0x6bc7de0db7d1636full, 0x4f63bada7c96f7b3ull, + 0x32cf7ab743d5651full, 0x90db32cabd33b18aull, 0xf4719d9363da3e29ull, + 0x8981aa2f5c6d1158ull, 0x904322395f1d4677ull, 0x001a29c2d0bd8120ull, + 0xcf34785a98a12baeull, 0x194249aff43dbccaull, 0xb228c5108b46a751ull, + 0x1aa1295068ac86b8ull, 0xa41f187a0da5f805ull, 0x631b93ab59f3a86aull, + 0x3f73cf14a45dc841ull, 0xc5f3282bcfdb6a31ull, 0xb648cd7a7f0de76full, + 0x509da798f9064a96ull, 0xddf9cab09eafe4feull, 0x24ec042060a5ec1bull, + 0xcc4279f84714709full, 0x46f064941f9e2e8dull, 0x7bebab17e47ef72cull, + 0x1ed8611d77beaf2cull, 0x97d5ef4420921be3ull, 0x5a5b8b4f4f360cc5ull, + 0x7de8771c1e008bb1ull, 0x71cb13c64dc8a474ull, 0xbca2f9704454ddfbull, + 0xfac417f9774e1ec3ull, 0x0e5290cb3ad52fddull, 0xe1196fc83b118e66ull, + 0xb8eee1334ff0150cull, 0x0198c792fb4818f9ull, 0x91692a5c4c732b1eull, + 0xdc5527ce524586a3ull, 0x5f36d53968b6198dull, 0x38fec3c8352d3137ull, + 0xfb4d81b9214b238cull, 0x5bc85729bc732a1bull, 0x1b8e79ef621974a9ull, + 0x74fba7af57ff6233ull, 0xae397f62716bd2f5ull, 0xf4c037c51a760565ull, + 0xbd04369a17768decull, 0x7c2f03a94725a979ull, 0xb18a77e45c87bf80ull, + 0x123ca8a91a2b5989ull, 0xedaf051a0a19fd33ull, 0xc5c049b85707ff01ull, + 0xb3271ca40c95ae1cull, 0x2506fe348f9ff119ull, 0x42713fb7ac60949aull, + 0xf280d5ef1bb0d0c2ull, 0x328cafcadf143e6full, 0xb7f15a729381a609ull, + 0xd809d5af84b97073ull, 0xb03fec59245d04d5ull, 0x16fe62df0fed8856ull, + 0x5976e3efab867272ull, 0x0b41eae9cd91072aull, 0x2e39d4ee66cc68e5ull, + 0x4ac524cd807d640bull, 0x15a82e268015254full, 0x5b0d7a86b3212f76ull, + 0xc1c7c72603e6c6e0ull, 0x032f688ecb275355ull, 0xd262cf623b516fa3ull, + 0x7d51c5e4ba5f0c3aull, 0x00f5d207ad986628ull, 0x4c7b36bf32375248ull, + 0xeee7d8f27f4e2575ull, 0xc491d01a85df8fc4ull, 0x489906497321b69dull, + 0x707d19d284bb04ceull, 0xaa767aa1d03d2a6aull, 0xf8a8f574c10b16f1ull, + 0x65f404532887f08aull, 0xd9b5e7c4255e656bull, 0x307e184fb86ffefcull, + 0x65826a784d2caa60ull, 0x2b3e48e18dd09097ull, 0x8861a15fbb817b59ull, + 0xce96fa006d192ae6ull, 0x1533203de826d712ull, 0x92b0afd4041aa8c8ull, + 0xfd23b9bfcd583099ull, 0x2ad3a3c1684c887cull, 0xe13bba66b3fe7341ull, + 0x58dad4baca3f7ea7ull, 0x500e212511e9214cull, 0x197a5863824f3fe5ull, + 0xa1b9dccba8d9224eull, 0x9ce0f8084e1f91f6ull, 0x4065f467013c52c3ull, + 0xe587bdf621d44a66ull, 0xd422a2331384cea5ull, 0x59facae14175dfc9ull, + 0xb385862f679686d7ull, 0x54ba1596cefaecb7ull, 0x06428e8f97deb214ull, + 0x1a72c561f8ab2f99ull, 0xa0b1a66b442dc684ull, 0x3e0794ee2bff2b2eull, + 0xe50f94ca45ea5faeull, 0x91f5b993a5d689daull, 0x2f274b7427e14e34ull, + 0x703721bbe1a755c0ull, 0x9c3b64aaf882176aull, 0x5f1389e240810502ull, + 0xc70113a986f79583ull, 0x07867ea8ea32b0c2ull, 0xde6560eeec09cbd3ull, + 0x3b8b5ff0f1feea9aull, 0x46c346fc8522b069ull, 0x1a9974d7d12d5c50ull, + 0x842673939b3b7186ull, 0x546ee75257b869fdull, 0xec1e2ee1e60d7b1dull, + 0xef2a0ba732b87becull, 0x9dbd7c939926d496ull, 0x3b284575fb0a12aeull, + 0x08a0821da67b2f2aull, 0x9c54e8d8ce5052f6ull, 0xabc7307c3e926db3ull, + 0xabfd00ec877aa47dull, 0x8f3c5c892ed19c59ull, 0xcd9e8cb55f613f5full, + 0x4da34041c3c6e1faull, 0x5dfb0677363c1cb8ull, 0x41139a19b99555deull, + 0x3e998e1eda8dee9cull, 0x8bd015dc49196124ull, 0x805d186d609aefa8ull, + 0xb621d9248499e0caull, 0xef347d8526c45c03ull, 0xf3027fe4f5bceb2bull, + 0xff86f252f1ffc1d7ull, 0xbd2b9988372a622full, 0x6d9502f4bc8cce41ull, + 0x482f93353ce51050ull, 0x3c9cf21c1c2eceb2ull, 0x6efbc4d14fe20a31ull, + 0x83aec792f3ed7b22ull, 0x29468cb75f20ca82ull, 0xe902a482ea1b9037ull, + 0x8981557aff499cc9ull, 0x6de3a0225a72985dull, 0x07e51f06af26cd6dull, + 0x09dee9686e3d8648ull, 0x82e570d6bf2504faull, 0x4863dd48f8d7c087ull, + 0xe408f3f9c97d7984ull, 0xc7fa610e5fe19a58ull, 0x2d3dc11e03473748ull, + 0xe9ffd8bbc9e42220ull, 0xc2f20523052633efull, 0x8a41200dba467ba1ull, + 0x55c5120b3ce68db8ull, 0x8dd54252cd71792cull, 0x115e4af17a942cd2ull, + 0x602ae3a7472d912cull, 0x4379174dec2bd5e1ull, 0x60208b5965aa117cull, + 0xd9ae01cc2bcf920full, 0x44ab630c3fab3eb6ull, 0x92ee2eb1283b0414ull, + 0xb33c378fa7874678ull, 0x491a9c5375a09a69ull, 0x9a66e6e02d05070eull, + 0x1909c996163c3671ull, 0x4502a296d864898full, 0x5b0bfa1bc55e1420ull, + 0xae3c1423f088d9c3ull, 0xf0dd898a6a88713bull, 0xddb234dd9e42212cull, + 0xd8859f24b86d8cceull, 0xb8e1a86483694f9aull, 0x24dbc7a5456e3abaull, + 0x2b66a481e8d914c7ull, 0x12f7137ffd74f80aull, 0x31e677d031690110ull, + 0xe6645e03c182230bull, 0xa7430312e79780acull, 0x5889f5e390f2fd7cull, + 0x3647331214306f79ull, 0x96a9bb905492af76ull, 0xeb00551ef5b238f5ull, + 0xf29d1ad1d965ac02ull, 0xe56b99bba2883a1eull, 0x88742f38ebe865ebull, + 0x5d6e938a6f5153eeull, 0xb971d829161e9a75ull, 0xf88d6a92fcf3399dull, + 0x83f5bf96e896988aull, 0xde8f35ed12188569ull, 0xa67f3b24b39cc9dcull, + 0x6befafadc63949d5ull, 0x74888888a4f7420cull, 0x0dec8db91659a26dull, + 0xb4f8827470df4425ull, 0x6d42e5da23c413e3ull, 0x922f4dcb977e2a3eull, + 0x426a02a01da37e8aull, 0x30eb94e0b194e2beull, 0x4b7600f40e76c1c8ull, + 0x72c02c6bebafdc57ull, 0x9178467692f16ef2ull, 0x73bba8f7c8ab5aa7ull, + 0x78658cbf8059d0a1ull, 0xfb1c6e45847cd590ull, 0x657e8ae7734a596aull, + 0x7b73ead95cb3cc5bull, 0xb22db6a7a97ba7f7ull, 0x4d5ce68e013c5ce8ull, + 0x266f6ee097c4bee6ull, 0x12d4dd3f0c2c2358ull, 0x44662419377f0336ull, + 0x748b587a23018c7aull, 0xcca38db1f30fdceaull, 0x19bd34eabe3f6e02ull}, + DynamicArray{ + 0x3372185cfffa2f55ull, 0x049897eb034d5ecdull, 0x385e60b521ee757aull, + 0x2ee0618ecf69bc60ull, 0xc47284265028256aull, 0xb1d520baec3b353full, + 0x4dedd4bd471b5f30ull, 0x4e1aff7483ebed99ull, 0xf836b90390def8fcull, + 0xd65f26f4a1e7b292ull, 0x2885ba8f847c6c1bull, 0x1a880109d4e2cb46ull, + 0x0cd0994cb11cefc7ull, 0x437fd0e28df54625ull, 0x64fc8720c4ebe7b7ull, + 0x7b5edb5e8aa4d457ull, 0x75a0dfafceb8e7c4ull, 0x9fefa601380b748full, + 0x5b59e22a9e4c57a6ull, 0xf3b88686c4d6a052ull, 0x8cd93966ddffd3aaull, + 0xf2e14837e94debefull, 0xb0413746326f0bb2ull, 0xf5ec8156c31b2f8eull, + 0x21707efa7f2e4eafull, 0xb87fc46d61098205ull, 0xf2c36c6e18e39888ull, + 0xd988ba04d12229b3ull, 0xe3b23fd4efcd3789ull, 0x726fd18d7bc4628full, + 0x5990a2d2a6ea90ddull, 0x0024f67f44c501e6ull, 0xea2957de8f6ac826ull, + 0x919c297fac3bcb95ull, 0x4a5c55b6e5821048ull, 0x1b2b8f9b2322cae2ull, + 0xc4f74091649d1df1ull, 0xc7b23fc9990332bdull, 0x5a02608650a35359ull, + 0x819b8a4262a0f98dull, 0x3f975e418fa07d0full, 0xa39ddac3b2499b10ull, + 0x2ca1793be92730b0ull, 0x57c74de15a718613ull, 0x0d3adbc8e27c7374ull, + 0x1add26ad0fa3f2ecull, 0x17c80e39c3bc84d3ull, 0xd41996632c0958bdull, + 0xfc50baf70bdaaff0ull, 0xe2d4074af59d7d3eull, 0x35361e8daaa346b5ull, + 0xd95230cce9c0dfccull, 0x820c0017ca56f8dfull, 0x188d2ce547251080ull, + 0x4313ef58d328764aull, 0xadb7558a85dff878ull, 0xcf71b838b379d912ull, + 0x1039cc0a2ba610c2ull, 0xb7a397ab0e76f847ull, 0x6f6f9a73282ea484ull, + 0x904ded75bf964866ull, 0x2d4570246485123aull, 0xb47b36dc05481e65ull, + 0x82ed894b9f5c5638ull, 0xc2ef95f554a50585ull, 0x3468e06015f4ba7full, + 0xd38af3b1f9078ac2ull, 0xede94d1fb4a2290aull, 0xea6562c6be57e0acull, + 0xe60c5d5c218fc39cull, 0x15ea49cbe61e393dull, 0x0fbcff2b7e5b6534ull, + 0x0baf34c6c2d7a054ull, 0x6f3cc666523a9c30ull, 0x8785726711ffff69ull, + 0xcc6c8c0107169d0cull, 0x5db194d9eebe4ca2ull, 0x0425d7ac44437771ull, + 0xc87399bef61b4ffdull, 0xef6ddc61d10c1aedull, 0xb980b02e6dbc865cull, + 0x43f06c29f14fcb64ull, 0x5dc51734de120969ull, 0x5577f050e9bec762ull, + 0x8424ef898e5e7684ull, 0xe5f658ba70a32bdaull, 0xe686f91ed3c4344bull, + 0x143bc526e86fd438ull, 0x80d47ec8a1474c27ull, 0x86d69c15df6ef2a1ull, + 0x98f8d6910943664dull, 0xd207e3ef0c12cf1dull, 0x7e7c616386cb1c48ull, + 0x3e96ea538b44be00ull, 0x44adfd67655f7a84ull, 0xdeb0fdd337527d2full, + 0xec29bc66af028227ull, 0x209fc31dd1f45902ull, 0xf6a6c8a6fb45a65eull, + 0xda788a91b40156f1ull, 0xfb340c098c3a66daull, 0x825376c7258f4a71ull, + 0x378c965b5e2b4c33ull, 0x503ea72dd39125e2ull, 0xe69416357520a26full, + 0xcbc6534bda9562bbull, 0x63cfcc6e70b0bca6ull, 0x0f237cbaebf9c8e6ull, + 0x784c5c98a6e5cef3ull, 0x9569e7d9a006e761ull, 0x852191e197f87943ull, + 0x51425a3ab0a762b6ull, 0xe1708c3cd35e37a8ull, 0x9aa1ccfb7a698236ull, + 0xc22ff870d04f7370ull, 0x11db93e25cd598a0ull, 0xb0db9b37cbdbeebfull, + 0x0774adf3d6a0e552ull, 0x68e32e9ab57d8e5cull, 0x4a681bdb6d6b1fddull, + 0x06e30a7c3221430full, 0x202e9a83036393e3ull, 0xd2462b62c98b7373ull, + 0x3a4bf4ccf21c95adull, 0x7bdbf57ad4504afcull, 0x85de35f8e4e53943ull, + 0x2908740929fd22bdull, 0x144768098f7a8ea5ull, 0x635c201afc58d823ull, + 0xd72f1a68710ce7b0ull, 0xf58d4122eb0ebcf8ull, 0x3bb26c363d57884full, + 0xfd06205e70181dbeull, 0x1141349aacaffc8cull, 0x9cbefc016ef2d1edull, + 0x9d441ff134e68e73ull, 0x981a2cb5d679c60cull, 0xaadaf139491bd066ull, + 0x58ca0a870a96af70ull, 0xa9b8f2b77fb523b0ull, 0x4387882d9e990166ull, + 0xb70ed13f5a889ba4ull, 0x212addcb87a37c86ull, 0xf2cffaf5355f69d1ull, + 0x35379305f18c5835ull, 0x9a0b931d1a80102cull, 0x1e271acffaf8098bull, + 0xa79cea8d61ad7b8aull, 0x18a67498c80cc973ull, 0xfda358fc530c048bull, + 0xbde513d0a390f15dull, 0xc70059960e6dddd3ull, 0x5e982b283f1c865cull, + 0x6ab48388dc5e4783ull, 0x10d6474455b30938ull, 0x810b9325a77630faull, + 0xda2bfa635ef8ee13ull, 0x7ea9fdf047fd97e6ull, 0x39542fc4b9f744b9ull, + 0x8a067471e6b16fe7ull, 0x90ed81cea6fc6a5cull, 0x589bde6bee581b4cull, + 0x57ad11c5fd88f736ull, 0xda4815611e911df4ull, 0x4e59c00c7d2975a0ull, + 0x12a5f8e1b523fb98ull, 0xc7e804ec28889c15ull, 0x3c2524296c8bc6c6ull, + 0x478b2cb3d9c77a38ull, 0x496f67418642b56cull, 0x91337265285e9f9aull, + 0x93bb3ecb5c6648eeull, 0xf3fc30c194eeeec8ull, 0x32916b894442c046ull, + 0xb398cff507c3c572ull, 0x22391aa1d2f4303dull, 0xb3d934a2a0e87c7full, + 0x10c9ee95edcfea49ull, 0xbfdd6307355b2a95ull, 0x297905de031293c4ull, + 0x1ca2b2e6d47f40d8ull, 0x35a7c0f85893227eull, 0x2bacd443bf06c497ull, + 0x90c8a1f131c357feull, 0xcb2e19cd6be2eb8cull, 0x572d1f3bfb32e1c7ull, + 0x27b5a6a4fbe74244ull, 0xc0cd66c83e7e521cull, 0xb1a09a1f8ed581e5ull, + 0xfc32d179e3caacffull, 0xae3f6d631883c405ull, 0x6ce5d45e7ba104b0ull, + 0x4f35df2c2e1cd971ull, 0xd3e0eeddfd036964ull, 0xea42398db7586340ull, + 0xa63f447556ecd2c6ull, 0x08fb9d9c0d21b146ull, 0x3f1c65701cf3e1f5ull, + 0xf5998a4a512984e7ull, 0x698dc44dba4c5b9aull, 0x7d32ea9ab5c8fc52ull, + 0x87d5664c608b34a3ull, 0x58185ba6f7174906ull, 0xfa8e9f65f26ed32bull, + 0xbb47714fcef2a83eull, 0x039a577b07b1593full, 0x3c4af58646d2cf0dull, + 0x93878814b0831e21ull, 0x297cc1b22ae8a0dfull, 0x06e95297895d328eull, + 0x865017f841e808e7ull, 0xd00772d121804c3eull, 0x1c5df845cc36ede7ull, + 0xa6b6f04ba6087f76ull, 0x773e92f6dc30b3d8ull, 0xed8ed1c58ef7ffa6ull, + 0x3e0da13da53eea4eull, 0x7baa15528ca86b82ull, 0xfc24614f58f8c537ull, + 0x15d9cffee18e5bfaull, 0x6c1bbd10f166ed93ull, 0xc79eff2f094b3052ull, + 0x9bb5b5f718f57eeaull, 0x3c2c8eb8a550a13eull, 0xcc18042552176493ull, + 0xed854022413bf09bull, 0x83c5c748768bccffull, 0x458985ed6019036dull, + 0x99b9bdd12943054cull, 0xe4d011a2285191a2ull, 0x57277dd445c4b499ull, + 0x9d917eeab59aaae1ull, 0x8421a209e1fd85a0ull, 0xdbf63953e270b750ull, + 0x43e8cfc9ce875bb6ull, 0xf15ee4a263c98f34ull, 0x1e3a7f6bd1a6374eull, + 0xdeddabd4ecc267edull, 0xbe4036722a97dc68ull, 0x4feb33b162f4d6d7ull, + 0x21107e9a9335828eull, 0x5a42f09ec3b57740ull, 0xbb9889e32ec24f04ull, + 0x160855f12913072aull, 0xec99a16515b08c15ull, 0x0665fd47d21e9ff0ull, + 0xad4e2244cccd25efull, 0xa5dcfd86984d6baeull, 0x68e2d1728660c7b9ull, + 0xf54054f9530dd15aull, 0x5054cdce44688f87ull, 0x31750baed4fcf942ull, + 0x4a1c5141c176ca1aull, 0x44a3bc85bccc691bull, 0x433e598d56cb9870ull, + 0x38ba77556c65ca29ull, 0xa9db038cfd7a49e2ull, 0x64227c4cd2901fd6ull, + 0x545fb8c66ec03e83ull, 0x91caa2556f14eef1ull, 0x63b16ecc5a27e6d5ull, + 0x099f0c4a12944e39ull, 0x57f667db10385b31ull, 0x67a4954ce04db4a2ull, + 0xf93c596285da42d2ull, 0x37fa55845b5d71f5ull, 0x6931fb71ad216699ull, + 0x3f8a71cce4548102ull, 0x64f9bd5d796ed93dull, 0xac25dccc7eb6344bull, + 0x1b8f15fc52dde8dbull, 0xa2250fba3c53c479ull, 0xe1455afaa3b399e5ull, + 0xbebe8231ee329859ull, 0x65f5d0654943ccfbull, 0xc47bf073bc9e68d0ull, + 0x329a384ead57982full, 0xae6d07ce8525d7a9ull, 0xc3a7719f293d1057ull, + 0xd566dd31c4ee764dull, 0xab7c8d6561cd0c9aull, 0xdf01981166251730ull, + 0xfeed94db501fd42bull, 0x7680eb50f69e68c5ull, 0x23e2c334e7097fedull, + 0x5684bb1c80e8ccebull, 0x680f8f01767268b3ull, 0x749d642c7b5c1722ull, + 0xed46a03d86e12062ull, 0x0320928ecff32c79ull, 0x18bd12abc4cdaadbull, + 0x7c95167c8374acfdull, 0x59e0c6de554d4c72ull, 0xbe01e16ffb6cdf82ull, + 0x28f75a08f647532bull, 0x404e867c3b6a4633ull, 0xcd1d1c051b0f472bull, + 0x5c5d076113d6dff1ull, 0x27ac7075ad22b68cull, 0x46dc948e0c2911dbull, + 0xb9cb42a4ada85bd0ull, 0xbc6910e0a7619d1eull, 0x64c79c4dc217981eull, + 0x2428cc86ce84f44dull, 0xc9560e1a6d4ff4e0ull, 0x676b1b64f05b33dbull, + 0x0161a061c8b96ccbull, 0xf64543e3bf5b1f6cull, 0xf696001ac39d2b3eull, + 0xdec21f2a4d4d42ccull, 0xdd00f0625473d986ull, 0x8ec051400a7210c4ull}, + DynamicArray{ + 0xdb9ab4ae59f5cb11ull, 0xec59f50710b1365eull, 0x12c24b401a08efd3ull, + 0xd3b8c1572a40a95eull, 0xba3545521acaf122ull, 0x51fd3b1200484610ull, + 0xbd9562b2460e8eaeull, 0x04a0fd913181aa31ull, 0x43dff4d1994e6b22ull, + 0x7f68b748c69805eaull, 0xdc1936e6dbdd059eull, 0xc1a024007219eda6ull, + 0x41e28ba85afd74ddull, 0x33b13b6913ada97dull, 0xe79da70d99ed3758ull, + 0xff358203526c6dfbull, 0x2dbd343e7ff50b15ull, 0xa3c48b2dc3f39b51ull, + 0x9001ac4acb587564ull, 0xba0a819fbe999a5bull, 0xffd45f8f67956222ull, + 0x6fafdb6be5a850efull, 0x61dc77df66325a09ull, 0x5db5070063d76b89ull, + 0x4c9d338c6985f25full, 0x36aa1ac489583d1cull, 0x7831f539f53d82beull, + 0x8d11f24df3db7901ull, 0x91e95a99a0b3b9b6ull, 0x8deaa0cafca579e2ull, + 0xdb032b9c1117a6b9ull, 0x0048a97264d2b9bdull, 0x1a22eaa84c8c2933ull, + 0x07c637de90965f3dull, 0x81cdc09289b8a363ull, 0xc17c773e9b6a46b5ull, + 0x7c4e61c5056a1fabull, 0x3ba7408a12710db6ull, 0x26d63c5349bf7c15ull, + 0xde8459da693c88b1ull, 0x29294b88cc9e2b8dull, 0x2524e06fb3bd1855ull, + 0x65324954faf3c49bull, 0x1906abdc124cd849ull, 0xaf44b76712478f4full, + 0xd3a079648b38c951ull, 0x564d4974409fe561ull, 0xf88e74ed5ef30291ull, + 0xa80d48edc8cb0eedull, 0x9ebe66c2435548c2ull, 0xc89e7b22ccafdb05ull, + 0xc3434ff9fecca3f2ull, 0xa1d7fe43db4ecedbull, 0x8b2c9dba2c1cf502ull, + 0x0e191826b170abb1ull, 0xa3457a7799e05cc0ull, 0xcac2345b9d015ecdull, + 0x2e8878ff6464aec0ull, 0xfbda71a34868e483ull, 0xf553fe189c3decadull, + 0x8c58f592de454fe6ull, 0xbae834a9ddf8b530ull, 0x6ad8bf8f36ea5317ull, + 0x6e8bf6c8fb4fc065ull, 0xff6ce0105777f272ull, 0x2ff9c975cf785661ull, + 0x58ed652a4734d9e9ull, 0xf18141ffb186b22eull, 0xbf78501db46e7e66ull, + 0x3943e8574dd1adb3ull, 0x10377ec6dc4f54eaull, 0x16f4bf86d348a9ebull, + 0x6763e33c9f37c032ull, 0xefe33008220ccb67ull, 0xf331f13ef5dd7db9ull, + 0xee8d4721af51d433ull, 0xc5cfb737b89f78cbull, 0xcb09671295314a7aull, + 0x032a348309e0afefull, 0xa9d5d9a276bc7c39ull, 0x365bde318e04629full, + 0x2de7dedcc0ad8d49ull, 0x57725352bcb30ae0ull, 0x14024acf8f25a14aull, + 0xc7e322a2c5623de6ull, 0xa01fdbcb86658d00ull, 0xe40890788034e907ull, + 0x4d0a1e5971ce952eull, 0xc5227e73ab0b6b1bull, 0xf8dab9663d3bc1e6ull, + 0xcb733d613f14e4ffull, 0x833f69791d8e1273ull, 0x4212ec9b37a7d28full, + 0xc5307d4879563e44ull, 0x8ba479abd43f5aa7ull, 0x60483f61e7e61057ull, + 0xb341eb140e223fe3ull, 0xdebcdd81d039eb74ull, 0xd9ffa7231b6167e8ull, + 0x6d5bdf18ca3804e5ull, 0x6f3eb6d8b7e33462ull, 0xb62cbed95709a928ull, + 0xe3baa66f35a62911ull, 0x20ec79420dfd3654ull, 0x71db24b0d3111a4full, + 0x33179d82b93e8e1bull, 0xc5fb7500829e3a4full, 0xb71b540e365931e9ull, + 0xce5eb9a0d657c2aaull, 0x06c6944b2ea98d5bull, 0x384bee9c7eb2e98eull, + 0xa223dd3c916f068cull, 0x10ece520c9861a4dull, 0x31ed76a48f995b0full, + 0x85d6925914089e2dull, 0x9c1f63f0194341e0ull, 0xb99772fc670ea281ull, + 0x2abd7b922115fe98ull, 0x62b48b2e1875f1a4ull, 0x693f4b48c5803a9cull, + 0xff7d892794391a28ull, 0x206da14f469568a2ull, 0x672138a324c7abc7ull, + 0x9fea1bae5223b65cull, 0x6af84e4761eccf41ull, 0x864b634c5f35a18full, + 0xbafc9a75bfad10d9ull, 0x6fcdb455b8ea3d31ull, 0x79def9661cbb3d06ull, + 0xaf31e6d1a8c6e834ull, 0x94876f751472ea8bull, 0x756f0ef421370070ull, + 0x4abcd4b77b0ea062ull, 0x513497a5b52e93a2ull, 0x14d78208c952e463ull, + 0x21ba0b4e27b464fbull, 0x87f329520dd0ea73ull, 0xbff70700912eb1f6ull, + 0xf509b832522984a8ull, 0xab9375c256e1dba7ull, 0x09fcdb961ccdb2abull, + 0xf75a52de43899f4dull, 0x4c3c924b9b65af3eull, 0xc5f3d981c553cd11ull, + 0x0040fd8f2b40041bull, 0x9df37a7896621d02ull, 0x51aac0f37d74d387ull, + 0xf81529b2f39613deull, 0x104ca506a888a16full, 0xfa0f858f520ef129ull, + 0x8b90a52bf86692fdull, 0x12394aa6b4dc7437ull, 0x260ced8a4b717645ull, + 0xfbfd0a25222a3842ull, 0x3964d8d04975f0a9ull, 0x88ae491fb5d61efbull, + 0x3df71dea128c7dccull, 0xecba02869a9327a2ull, 0xa18c5eb16274a3c5ull, + 0x01887c172c895420ull, 0x1816f0a12b700ff4ull, 0xc3ca903d93467238ull, + 0x58a9df97b1870ff2ull, 0x7f7ba3744003efafull, 0x354d623a8c809830ull, + 0xdbd46399459be44cull, 0xa20b7c9592394604ull, 0x69e1aac755007b62ull, + 0x94c8d34242106492ull, 0x0b946beeed1456f0ull, 0xfba7510b7c5984baull, + 0x6b21cbfe645018ceull, 0x58ac33e140d5c87full, 0x8c8b5a7e73391d48ull, + 0x5c2b25b947970ba0ull, 0xe3cad2bc6184fabbull, 0x26f59decd7ceb985ull, + 0x2bd1a02aa8de49d2ull, 0xea5fbf6d1c659634ull, 0x0dfeead536a65bc5ull, + 0x0b468f893eff9106ull, 0xf228d0d3d0b0a198ull, 0x0a70aae6eca32227ull, + 0x3caa63465d7f413eull, 0xdfc7a3cc3db7d059ull, 0x3ed84923db01f384ull, + 0x3a8c79fe05edf139ull, 0x621eb1160f18b240ull, 0x682ab99d8dabd316ull, + 0x323e0f69ae814197ull, 0x192fa77e9e4fdde2ull, 0x63098b063365a34full, + 0xc1c310a00ef856ccull, 0x4bfe22ef93111a70ull, 0x5b9cc2f9b3c08f78ull, + 0xb0ff84216afac972ull, 0x77fd1feffabb0bf9ull, 0x997b6093cf853823ull, + 0xe0adeee0d7949857ull, 0xb0bb0140879265bbull, 0xbf00508f1220053aull, + 0xd96ddae6067fb57eull, 0x748831969a31fd1dull, 0x1751ee9c3143eee3ull, + 0xdf87f00274d78ea5ull, 0x9007f2001aec9f37ull, 0xd7103e98594689b9ull, + 0x998f9639a95b08e8ull, 0x8ce6034e6b3efe9bull, 0x4e4aaeddd027ab53ull, + 0xccd073c6805d1e9aull, 0x8a673e9555ef7a64ull, 0x571fd8bd23a620cfull, + 0xee7c66b805f94646ull, 0xfc4b54e3f88283d7ull, 0xdb8f41c2eed5d06dull, + 0x21a8607aeeef4d6cull, 0xb03042af30c0f74full, 0x70b75f758d423656ull, + 0x837ef62111e3b25eull, 0x4b85b83560b022d0ull, 0xba2f1a740fdd81fbull, + 0x798d146f01774943ull, 0x5c4d54450c56b2a6ull, 0x2abb550e387c3c8bull, + 0xb0b1c9c8497c02f8ull, 0xaa7ca8681d18591dull, 0xaf96752feb427ae9ull, + 0xe6a61feb5d060978ull, 0xb7c7f75c678ddfe1ull, 0x1e26d6f97a4a9fbbull, + 0xb4135ac8f2298917ull, 0xb0f320d1dadc8f09ull, 0x5f3e170aac2a6f22ull, + 0x3c3f796f36b6397aull, 0x77964f478ba948e0ull, 0x002e1c544f08a5a1ull, + 0x89cf6ecbe7e08056ull, 0x1b96ae4757293cb2ull, 0x74cc31a1447703a7ull, + 0x681aa7ac0990678dull, 0x12d60147dcd9bc47ull, 0xc5460333a355c29cull, + 0x0f5bafdcdf6b433aull, 0xaaf91f69905a8f8eull, 0xade4780876276404ull, + 0xa52ec198e51523d2ull, 0x6c13b14f61b7937bull, 0x11fc2adad86da0c8ull, + 0x8cdd03b10f1aee91ull, 0xb95215ed243cd8cbull, 0x076e5c01a9c50eaaull, + 0xc1baa6620300e526ull, 0x482ea3e1fff59c52ull, 0xdd7386774a0e25c6ull, + 0x1ad41e9e70a372cbull, 0xe477499992d5e257ull, 0xf8785cafa5dc8e3full, + 0xd3ca9e1ccb2c7d81ull, 0xc26ea0f2978c8fa7ull, 0xd2bd0f7d7cf2b528ull, + 0x1d0a9b84bfcc2d6bull, 0x95e8655473cc5c3eull, 0x0a0092f872b6c6fdull, + 0x14ff5b99c4ed8605ull, 0x0e32d671d25e304eull, 0x4f8cdcf7c54fdd03ull, + 0x25fc11b46a29f971ull, 0x525f73e1aac0e961ull, 0xd514b86417bb7128ull, + 0x358d1c7239853328ull, 0xe9bfab62e7588277ull, 0x1e7c58308426e39cull, + 0x55b848844d4cd9fbull, 0x2bd0b4f38ae12f42ull, 0x15a54e16b5ec5c1eull, + 0x210298dca9df989cull, 0xccf80efc00dd5adaull, 0x96caa502969b8857ull, + 0x84534179d9b2142cull, 0xf42f9ec02af29231ull, 0xfbdb313b6b859204ull, + 0xc1ed61b894211443ull, 0x0c511d81168fbf55ull, 0x96b06e17f6b4eacfull, + 0xa533a96bde9ea900ull, 0x70278c87eabb7b1full, 0x4388dc7b29141413ull, + 0xbbb3d1e39102336cull, 0x7b169cc52aafaf50ull, 0xa9fec9bf3a4caa82ull, + 0x4d8bc6815e3b76b1ull, 0x04af469596218b78ull, 0x0249293e4fd2745full, + 0x310a54eba129ac3dull, 0xbb9318ce1fc71048ull, 0xbe4093186af2aa24ull, + 0x7fb46b83e49a05a4ull, 0x467eb97841b5bdceull, 0x6d14936cc735389aull, + 0xb9efe653e234d233ull, 0x14a07597a6f81347ull, 0xa627cc67bfcd1032ull, + 0xdde0ab3431588870ull, 0x3302e44253967a54ull, 0x66aae6dba3763a57ull, + 0x8e18f831bdce5bb4ull, 0x719e277948a69997ull, 0x8411cb34ac982488ull, + 0x38924c0f27bcaadeull, 0xb4ce15274e025728ull, 0xd9693caf114a2189ull}, + DynamicArray{ + 0xf32cf23a0b5baee4ull, 0x29d65f9b51e24771ull, 0x797e58b436422218ull, + 0x25afe4fc0b405b58ull, 0x61e6ac08ad0001beull, 0xec0ea47ecd302172ull, + 0xb077160744d862fdull, 0x65e623b6f732a424ull, 0xfff2ed88829df34bull, + 0xf0f345a00ef117c6ull, 0x7806ec16829522b7ull, 0xceb58246b3648a6cull, + 0xe9839e9b71bb2638ull, 0x7fe0006c7f1db72eull, 0x11f21317bccbcf0dull, + 0xccd259e6fedd4902ull, 0x93797cbde3a01775ull, 0xaf4c87dd8060e9aeull, + 0xcbc1d7c3dc9e9742ull, 0xaad16bcb1304fd8bull, 0x2346ef7a8f1862b9ull, + 0x4926b74af2c5af86ull, 0x7e9b2252c4968becull, 0x7a8120a391955185ull, + 0xeb0d4f67cc4e7b1aull, 0xc1d8a0d87bb1fe66ull, 0x1b6703bedf52bae3ull, + 0x84ac73fe4aaaf891ull, 0xab5b7b4073f5c27eull, 0x506622a302c361c2ull, + 0xb2e311f01aa1ee34ull, 0xfebed7111c371e23ull, 0x08e588b218ff1c65ull, + 0x6c99c20a6c5fe134ull, 0xdc8063e6c91775a3ull, 0xbf07bf7f6851e2b1ull, + 0xbd056b122b600fd3ull, 0x93361fda3586c8aaull, 0x94e67f1340e70484ull, + 0x8b88657d47967456ull, 0x8623f1f8879c31dcull, 0xf761f977c18de9e8ull, + 0x9f239cbfaa3bb13eull, 0xe8c03610edd1236cull, 0xa8959d8d224f9520ull, + 0x13daf7f6b4f2ba6eull, 0x034fbaa4b0be5841ull, 0xabc919dd269cea72ull, + 0xea475dadd9af2c4aull, 0x4d87685081b32dd9ull, 0x2468a11417b14580ull, + 0xaca7e943fe3c0c41ull, 0x6336060248cd0925ull, 0xacead0461c82730bull, + 0xe13b04046b4555e3ull, 0xc908a5b12d851f37ull, 0xb5efaead1c99311cull, + 0x4c66dd94306b4295ull, 0x48093d92fe2f5fc3ull, 0x78d92f1b99ed00b7ull, + 0xb25ad6eab819a24aull, 0x1602b4aa54ebb006ull, 0xf6527d5978789adfull, + 0x545666be72ff3c5cull, 0x1511ce00c499bcedull, 0xc94397ba4f943de7ull, + 0xe93b182f3e5411adull, 0x02bcdbe86870502eull, 0x514300301ebcfbfdull, + 0x580ab4d9baf9d379ull, 0xe21098c2a50abda1ull, 0x5c4ba846dd340a91ull, + 0x2aa2096ebf4a495cull, 0xfaf598fa9abd479eull, 0xe6221d2f28dff0a6ull, + 0x8ef2bda96e56aa5full, 0xe74c17de34f5ebafull, 0xe2e6bf3760349c48ull, + 0x15e568e8fd031427ull, 0xa5c0c76ac2d9ac57ull, 0x238b96b49eb05030ull, + 0x66368824f345f71full, 0x41dff76c7c4bc9adull, 0xd27ce726a68a1722ull, + 0x0d9514f5beed3b1full, 0x53cf377e605d447full, 0x88595b00f33609b0ull, + 0x74b4552ef9f3cd55ull, 0x448f529fa0bbf9a8ull, 0x9c9f41c7b09f4795ull, + 0x373602d6f6626291ull, 0x73b271e28205b6b9ull, 0x0a90b5c64b76c9eeull, + 0x2535a3537e48c77dull, 0x66008a299a9dc804ull, 0x3063c2966d67b0ddull, + 0x8a73ab673753cc44ull, 0x1d76bcd856850369ull, 0x83d9f64235a4a0b4ull, + 0x72615ea80c38962cull, 0xd8e62771db53036full, 0x1b5dde717c5a9a3eull, + 0xabb67a201736d971ull, 0xaf42f758d49b455aull, 0xd76a7c9aebca10fcull, + 0xcb78a7d345e4d239ull, 0x321e9c8d3df017a4ull, 0xa9f7135b2cdb07b5ull, + 0x32056f2d93e0fa3full, 0x951798d3095ece61ull, 0x09bf0ca4c84d356full, + 0x5d5dc50219e369abull, 0x0ba965d2414aa86aull, 0xdd79ebf0478382b1ull, + 0xb4c62970cc3adccdull, 0x81e0dfbff360de0dull, 0x36efa8fbd4b3fdb0ull, + 0xf0b00b84f90bfa4dull, 0xfd0b5f0cd206b69bull, 0x9dbc41cdcd285221ull, + 0xeca922b50146d787ull, 0x4def77109ad56d62ull, 0x49906f2fd333c795ull, + 0x0313bc31e1ce143aull, 0xed5f19ad7e7c11e7ull, 0xb0ac2e1c4a8e6bf2ull, + 0x827f8858c126f357ull, 0x0ae02777bea0946eull, 0x07bad90187788ea6ull, + 0x3591449b30017e30ull, 0x0643d1f510aa2a27ull, 0xfe99bf0bee57c543ull, + 0x02e13e8d8767946cull, 0x037ae676c73cdb17ull, 0xf46846466643212dull, + 0xfc5c8f69b5f2c489ull, 0xc0bb40ceeaab49a0ull, 0xed01eb597bce3679ull, + 0x324a569b27a1e321ull, 0xac15028dabce3e80ull, 0x29b683fbb9d54637ull, + 0x801f5be741f3493bull, 0xea08e88621edea47ull, 0x01419972cf772db9ull, + 0x044326fb53351df0ull, 0xfbe747a62184ac64ull, 0x4da2006fa20ec396ull, + 0x4da5bfdd4d9be280ull, 0x32c9202083a50c52ull, 0x423232f8c0fb308eull, + 0x7b13de2d4991727aull, 0x254381d8ec852fe1ull, 0xe463a297531a1a6aull, + 0x045879abe19d4093ull, 0xbdfb81e98b782b11ull, 0x407aa93c68d2ba2cull, + 0x6e12b6d96b8d2abaull, 0x799bd8d1d93279f0ull, 0x2cb8b197c0f3c24bull, + 0x7b88817f9b20dae6ull, 0x03032bfe11f16e75ull, 0xc64a3379e9e0e520ull, + 0xecae143f47bfaf2eull, 0xc751a2d4c2f02d7cull, 0x85fab5197339c1f4ull, + 0x16b310b60c4cb411ull, 0x2bb9de349fd7b508ull, 0xb28fa98ce1c96df6ull, + 0x10edf28947d15e82ull, 0x02cc8cb03d60d5cdull, 0x9802fbb20282a143ull, + 0x4724887df4a0294aull, 0x3f99b16e819506bfull, 0x89ac540da7fc4f01ull, + 0x48dc9e3d1324d93full, 0x28be3cd7225b587eull, 0x5cdf87e613f9b461ull, + 0x037e3df61d744a94ull, 0x44be23f1024ac935ull, 0x6d6821d2a22da508ull, + 0xa50b9b15534dfb40ull, 0x45b7128e87d14b3full, 0x7bc8a22421f0f665ull, + 0x8585da128f199119ull, 0x6160eae746274d32ull, 0x4fef85cb1fe349c8ull, + 0x063632a4a39d9f64ull, 0x3d7a96c8f98c681aull, 0x96788f2aff7994baull, + 0xf895f25bd175265aull, 0x78443cd99f4eeaacull, 0x6e1cbe09993e82ceull, + 0xc9471afd1346f85dull, 0x187235f687e28e7full, 0xa89e023840fa913eull, + 0x54f6dc6c2162908cull, 0xb0484d435798ba90ull, 0x569efd8834bcd77dull, + 0xe4a4f226caa11dd9ull, 0xde7579f077146b56ull, 0xecfb669d2ddb92edull, + 0xb852e524eec5e6daull, 0x2514f501c7c5d7a4ull, 0x49ab9d482c4af323ull, + 0xcb0aa65edf3b9008ull, 0xdee9dbe7a7a7b9baull, 0xc01fdd90bd1c0856ull, + 0x5535740ed7cde1d6ull, 0x438f3db6ad36d55eull, 0x9462754368a8c9a9ull, + 0x27d3afb0aa949939ull, 0xc602adbf7ced2e8aull, 0xeff3fd7cad8fb9deull, + 0x4343570f2b19bf2dull, 0x91ade8eb8bd68ae7ull, 0x20908844ce12dd39ull, + 0x24866453e324efc5ull, 0x4c2e3e5a467a055full, 0xd1bdb6e659e60aebull, + 0x6c4d6dcefefe693eull, 0x6fc863bb622e40efull, 0x6fc8518595236958ull, + 0xbdf8845438105cdfull, 0x567db809b14bab2eull, 0x42c590abb379654aull, + 0x27c91f249cb27500ull, 0x3f98efd9fd4f99c2ull, 0xa868560274b3e81eull, + 0x9cbdaaf5d4572ef2ull, 0x06c1657b96474ca5ull, 0x263b79cba4426d59ull, + 0x1dc995e84a097d32ull, 0xcf2d2d7234dfa723ull, 0x12074cc7788dc24full, + 0x2c8f1ad62a1a179eull, 0xceb48972be67f549ull, 0xeeb8bbf624d35070ull, + 0x3a145a56735bbbd1ull, 0xcf09d29961b3bdc4ull, 0xec2a29c4540162c3ull, + 0xe7bd9830dab9141dull, 0x02c09786290bf496ull, 0xcdb41f0fa708cdb7ull, + 0x7267e4bdbf8e7885ull, 0x03ba8fe1245a0d45ull, 0x366ecf1b2585d50eull, + 0xe37d63f8154ccd4full, 0xef47e5f9f518e42bull, 0xc3395e4a23744af6ull, + 0xf0818dd7c8c9f44cull, 0x38379963fbf9a0dbull, 0xd6a26244dc7978daull, + 0xe379ddc14ac30431ull, 0x306aa7136a0fa395ull, 0x922aba66045ce03eull, + 0x635ea0b1e9ab9edcull, 0x63505446579fc32bull, 0xa9fbb9bbddc40686ull, + 0x4b4ff5a0c59b6cabull, 0x555eef838fcc0f01ull, 0x286dc920a99beb74ull, + 0x6c4f66b6647b931cull, 0x317f6605211d63a0ull, 0xdd279d9081b40fabull, + 0xb3e6ac8db3aed18full, 0x15ac8d3cde43fee0ull, 0x0c36682414ef606cull, + 0x21017fe165503ac2ull, 0x7c4cc634927dd402ull, 0xc8f4315d0bc98be9ull, + 0x25271466a55db29cull, 0xac357f8694a5c699ull, 0x49a55b4dbc9460afull, + 0x9b3d654346ce2548ull, 0x85e893206febacd6ull, 0xb38c62bfdbed62f5ull, + 0xdb82453e0f92eb65ull, 0x419111722b579718ull, 0x919f7bc3e6bde5e8ull, + 0x9eb78f0bc116bbdfull, 0x3f7ab65eccf4623bull, 0x566ca11ceaf3b8f1ull, + 0x70840c1873e90e05ull, 0x32b9b613bb98e59full, 0x8af29d90a06e7cb8ull, + 0xaa395f0b92cd4f3cull, 0xff4c67017495b4a9ull, 0x03e06b9426f3c2b4ull, + 0x912d587f0140e074ull, 0x822308873212c400ull, 0xc7cebb2965d48816ull, + 0xd1accb329d30de16ull, 0x6575fbf38156ef5aull, 0x8dcb8d97c8db63e4ull, + 0x5a179a5515708545ull, 0xfee07e0cc56cd226ull, 0xca1366e7340d0d87ull, + 0x2857e2476da3605dull, 0x9823db6427fb33a4ull, 0x204148142e56fa2aull, + 0xe1459f830d783496ull, 0x5879e42d8f362735ull, 0xef3c445d8fd0f614ull, + 0x2f13b1e2a9b44154ull, 0x973dddfe2e0cff11ull, 0xfd5961cc1bedd97cull, + 0x89918df331b3b70dull, 0x31bf6abf795a67efull, 0x09ffa20096099b50ull, + 0x45bee1f2ab250ec0ull, 0x84a84705305d1ceaull, 0xb07c8432deeee044ull}, + DynamicArray{ + 0x21dfdca2c78d8a58ull, 0x90fd87111374d89eull, 0x92bb1d0e0a1d1b34ull, + 0x4384fc11408b3769ull, 0x7b233150d8c673a4ull, 0x58d84dcae6e79982ull, + 0x7088d9c5ac5089b2ull, 0x9947c0f9fd4e9f53ull, 0xc1d1dd96b522500eull, + 0x9c4799af23945918ull, 0x28fcdbcd57ec94e1ull, 0x8b33d5a045acc0afull, + 0xf1f83f5fcf988008ull, 0x2c7e02be708aa6b6ull, 0x79cd720cc2f023faull, + 0x4b84c4d115d44617ull, 0xf5fa7ae9a9ffc71eull, 0xe2f16b111b6b2816ull, + 0x568bc710f70b38d8ull, 0x1db7e8af4818c269ull, 0x9adf5a709b970955ull, + 0xbc9abcb78654ca23ull, 0xe461de53b4d7a1beull, 0xdfcd20e362d2890aull, + 0x14016294b8dafa27ull, 0x2582dd92599494e3ull, 0x629946991feb411full, + 0xae27c094754fb175ull, 0xc7a1d0b588cd5a79ull, 0x995ef99769d0eb49ull, + 0xd0ac38ea89239890ull, 0xd4b596b76c9c9120ull, 0xf5fb5b00c0f5748bull, + 0xd5fc8b0f21a0a289ull, 0xfe550fe2aab828d8ull, 0xf1324b6b09c58205ull, + 0x0bcb12dcd9049d63ull, 0xe57650572ff2be91ull, 0x17eda367d7993b12ull, + 0x01aff613599c112dull, 0xcdc2695114a84294ull, 0xd7bfc43f73ca469full, + 0x8368f3f26e2f6275ull, 0xc2e6d0ee99bcf704ull, 0x6ecace9351bc9706ull, + 0xd314a353f316ee45ull, 0xef904298fcf7e128ull, 0xf8946159b2bdb3e5ull, + 0xe616600a6af631feull, 0x7cadb41daeaf7a2eull, 0x8d1f954866d99e4dull, + 0xebc2d2a0e5f32252ull, 0x26e06423af4828baull, 0x02913232c5ff8896ull, + 0xd8d16d44ace0bea9ull, 0xd5322cf846936bccull, 0xb877f5c18801740aull, + 0x2a704bc828fe2954ull, 0x7c3a07a0bd7f60c1ull, 0xdf456360ecd5d15dull, + 0xce306b11d41de2c1ull, 0x4b4109ae6393d26aull, 0xf562c3d856bca13aull, + 0xf8eedf145b2d68efull, 0xdd7afbc0cfac21bbull, 0x2252eb77eb121c04ull, + 0x5ba44c4beeb5c048ull, 0xe1a75ef95eb21863ull, 0xd9e8b33736b2c71aull, + 0xb600cea8f5374a50ull, 0x805e46a6810e97d5ull, 0x7f55a8595eb60ba8ull, + 0x710486905f8bcd3dull, 0xc0626d6b28e23617ull, 0x28cd3fa368c88e1dull, + 0x13eb61ee075fd5edull, 0x82da0059e68d756eull, 0xdf367a2d32177e8full, + 0x11d5d35a407926eaull, 0xe00222d92dacdaeaull, 0xb87074c2dd23053full, + 0x244710f08eebf80aull, 0x8688e4c101dfdcacull, 0x8ac340efe7a4b2f3ull, + 0xa1bc57ef9903171dull, 0xdfb28ada334b6f2aull, 0x69e22f8916790635ull, + 0xb4b8bdfd2347a651ull, 0x98086bd08f45a08full, 0xe9dd33aada566ddbull, + 0x6c536fee2d22acadull, 0x598d650d71997d0dull, 0x7535f18482293ee3ull, + 0x7bbb60f4cffdfa5aull, 0xd5323ea6590b63baull, 0xb80248352582fe5aull, + 0xf3fda0cdd7029556ull, 0xfb641866c7b5b2b3ull, 0x41c34a3618157e29ull, + 0xe88fbcc9f3fc8097ull, 0xf466e465422d9da2ull, 0x3f2d8062dfb245caull, + 0xa47680dbf942a185ull, 0x709f6aad6ec47f9dull, 0x1d99ead6901f6242ull, + 0x5c5bd9b6e5e2454bull, 0x654562e640cb56ffull, 0x1979e9b61ecfda0dull, + 0x350d757414b0684dull, 0x182b362ab053e7bfull, 0x9cbd5faf4d640c2cull, + 0x486f9b1d7cd301d5ull, 0xa3df7bedc1ffacd2ull, 0x7623f151c952571eull, + 0xab7b89f8b7ac371dull, 0x131a06ddd9d0a240ull, 0xacf924bd5d487c25ull, + 0x678d84b10abee723ull, 0x6c026c9b4ea3d3cdull, 0x4fa8890265a8716eull, + 0x9f634b4f939619c1ull, 0x709ca554aacce4a5ull, 0x3399c9b720cf0e95ull, + 0x646e28174c66c27dull, 0xd4f1580c3d56f1a5ull, 0xa60bb9adb6540908ull, + 0xf9d0289b3031108aull, 0x7a984ab116923e15ull, 0x08bcd4fc9d42a92full, + 0xc8d40478f878a812ull, 0x7c2cf32089619d13ull, 0xeec8d776901ba188ull, + 0x3d57dc4f32f69f28ull, 0x368a24180d13dc45ull, 0xae0e8683e5d8538full, + 0xe48ab67f36408114ull, 0x56220bdea401f11dull, 0x57347d1bfb0bb622ull, + 0xa929e3eb6940754eull, 0xfd0f8a5385c45b49ull, 0xe8929ba3556f825cull, + 0x504f835883840061ull, 0x6309159f11d92a33ull, 0x001cda7fca68b39bull, + 0x0bd44784e4776113ull, 0xf3b675dab3ad8da4ull, 0xfcb75e292a42b6f6ull, + 0x570c866dd8426dc6ull, 0x4be98a128c7e380aull, 0xead840773be60bd6ull, + 0x979b0660edbd45b1ull, 0xc71a100f43b6d221ull, 0x71b0df6006491274ull, + 0x4bcb316779dc849eull, 0x29e7ad6de6dbd195ull, 0x5bf30047032e06ceull, + 0xc30046a511606c60ull, 0x3b3f2ae8d76511dbull, 0xe55b9ca7ca3bb136ull, + 0xeecad82c3d4a8385ull, 0xe96ef46a31af4415ull, 0xb350ef98a4821380ull, + 0x3e844b4d902dfa98ull, 0x18387aab9b664816ull, 0x5051d57eaadab1d6ull, + 0x48499ba6a8af242cull, 0x5ba4f91307923043ull, 0x71e00bbb90b1e3aaull, + 0xd55fd1c89f4952d7ull, 0x44c82cfdc5e613b5ull, 0x354b5f220520745full, + 0xdbc22c7c29ab960cull, 0x29e58ae40b43d78cull, 0xbe156a072a7ee89aull, + 0xcd0342b95facdff4ull, 0x6c547a12d838e2d7ull, 0xc0fabb332435308bull, + 0x8487b004ff8a0799ull, 0xc436577496e0a5cdull, 0x821507fdd3c66e83ull, + 0x48670a8fd5e69645ull, 0xbacdaf9aecf8ab8aull, 0x7ec0ddaab7b2bb1cull, + 0x73c84515997eeac7ull, 0x24d99358227dda05ull, 0x748593cb7feffccbull, + 0x3ec0d078159f09f4ull, 0x17901ced832ebacaull, 0xd053f59f930b5812ull, + 0x080fc92e6103a309ull, 0xb20885129e67af3full, 0x5a379738a44a60eeull, + 0x07947ff36139e7f8ull, 0x780c00d12feeea66ull, 0xd3bd3af4ddca3b96ull, + 0x8611fc6ba1009898ull, 0x51fbdc1705efe5b5ull, 0xdc3a504a308cbd46ull, + 0x3123c6e07d60fa07ull, 0x49a4d6667eea272dull, 0x5711505f7da708d1ull, + 0x32d68812a4c29998ull, 0x5883b39393ec2fa1ull, 0x9047061365a70153ull, + 0xfa74c6e3cf14e8a1ull, 0xf2b4d281d2b9d57bull, 0x540b980cdea269aaull, + 0xb4d23973fc3239b6ull, 0x06315adefb89d064ull, 0x87770993f3bcfdafull, + 0x68857b519c1ce824ull, 0x0681e9a04c8da775ull, 0x9146d6e3399494e5ull, + 0x8f711fc5ed3f7359ull, 0xaeecbb6ca323ee3full, 0xbb03b2520a03c50dull, + 0xdb38924d0509b422ull, 0x95ac345d018d5957ull, 0x375b3db7868899ddull, + 0xb3f1eb7e4313e94bull, 0xe67aa1e7552e8440ull, 0xefce39ec5118e092ull, + 0x9af4dce864de4777ull, 0xde70e6b69d93af2cull, 0x56dcd9bb481266bdull, + 0x7ae7de5287f2a327ull, 0x0a7d2f60f04ca10cull, 0x3fe23d3e5723d990ull, + 0x7fd7e68108abfff1ull, 0xf885cd83758edd98ull, 0x47689f048b78bb02ull, + 0x07edbf5fd45eef66ull, 0x92e6eca0290a9846ull, 0xc3cc62cd453c975dull, + 0xdc33e5077c01e384ull, 0x379bccac16037140ull, 0x0bfecf2522bbcb32ull, + 0xf896bb7b5cdbd49cull, 0xdef1c4f7d0a93043ull, 0x668e32d3b7490526ull, + 0xf6cb35f7a072d3d1ull, 0x803da67fa040307eull, 0xe6fc4d824024107bull, + 0x8ffc18d825fdf482ull, 0x09b41773028bb5b6ull, 0xa3abace66bed67e4ull, + 0x6d5f7013e9ee1110ull, 0x10e6f4e2238e449dull, 0x827de0629948d607ull, + 0x7a5263f1184604fbull, 0x894835c198a373a8ull, 0x55a7a9c995166569ull, + 0xc07bee09f6994be2ull, 0x57fe027e9a94beedull, 0x64405287233f188eull, + 0x86e0eb8fcec2599bull, 0x8038569365ecb614ull, 0xa614f88de012de4bull, + 0x7fa6b0a2aeee0fceull, 0x20108b63903be96eull, 0xbbe4a27eda71f5edull, + 0x0e8133bdb2080bf2ull, 0x985183e6f164c383ull, 0xd11536fb0453aa89ull, + 0xf80f1bc75d783d00ull, 0xd89c36c07a28b942ull, 0x5cbcfc20bef4b77dull, + 0x2ab8a6d515f3e51aull, 0xaa08ec0217fc9878ull, 0xd9c75ca4f7d9e425ull, + 0xae7ee61a3e5decd8ull, 0x85272f565fcaf7beull, 0xe5c1398a28ae61e9ull, + 0x890bccff2be23b23ull, 0xee074eefc41d22abull, 0x186db44d185895e0ull, + 0x082240a101f9d62dull, 0xf68e59afa89b751eull, 0x2f9732de341c20b2ull, + 0x32bb0787a2483414ull, 0x98e9b877d782d310ull, 0x4f866d447054615full, + 0x4974fa632f857517ull, 0xbd18aed7e0ae4a4cull, 0xb6bdccd2992a50f2ull, + 0x3e7dcd9ecc2d02abull, 0x78cf885927d7b103ull, 0xd7accdc168b194b9ull, + 0x7e2521f74d548b84ull, 0x5519bb46db726a3dull, 0xeb9b97f168868eb5ull, + 0xb5ab2b16517e2355ull, 0x232c8c026763e5d7ull, 0x81d7d338ceaa196dull, + 0xcdfc292158344c42ull, 0x845bf8d0ef3db0d1ull, 0x05f044329e429951ull, + 0x00e21ab2c2cef58aull, 0x63d88bbe874a9f4full, 0x7654bccfe307ec98ull, + 0x5548c5f8dd81d681ull, 0xce182373b15e8fe8ull, 0xa545a7d6749c5381ull, + 0x5a7b2829d24be0d6ull, 0xd75d2e10c00fea7aull, 0x43137a1ff95d650bull, + 0x9da5db8179ca76dcull, 0xd6beb1d707014f1bull, 0x19eafa62576456fdull, + 0xff7f482947409044ull, 0xad0d4043ea1ed1a1ull, 0x5fed881844d795aeull}, + DynamicArray{ + 0x639e6d67088b00d9ull, 0x6578b5cfe7f92db4ull, 0x8767e09a4ff97b69ull, + 0xcee8d2897680b10eull, 0x7774a04ff9a8b6cfull, 0xf200b871ec677c7cull, + 0x21057e1a54ba8cecull, 0xb215c5b2d9b7628dull, 0x39dc22fa567b4868ull, + 0x42482e029d76c2b4ull, 0x0c1f4de348200a63ull, 0x9832c1f8cb2c4df1ull, + 0x749e943acf3b5994ull, 0xf6941e71eadc6973ull, 0xfadf864fc7b86a8cull, + 0xd3ec14933a1b74dbull, 0xdd1b93fe35b77f3eull, 0xd93f2afa02cffb5dull, + 0xb9dee58e91e1f761ull, 0x254c38a9dd950794ull, 0x2254de0074ea1e6bull, + 0xe86274e8a198cd86ull, 0x4c9626730d308c16ull, 0x3b641c8db80d2522ull, + 0x3a512ba36f0b4a38ull, 0x762ad3edf1a37cafull, 0x06db98414cbca72bull, + 0x9b81c9396bf4408full, 0x82653c955db8954cull, 0x8ee4aac65b738d0eull, + 0x68a9719798435894ull, 0x73a4d3a31be6c0ebull, 0xe7e486ad026ec4d6ull, + 0x26ba669c172df16dull, 0x3d2fc04df1755b78ull, 0x5b7a54faf654adb2ull, + 0xbfe6060a8790cbbeull, 0x19a7be1b04ea5849ull, 0x2c565dd24745ba04ull, + 0x05bb969c9d50c356ull, 0x70812afe33de3956ull, 0x010d2804ef45a9b8ull, + 0x4d7f96d835d1cdd9ull, 0x7e3cddf6eb4c58b5ull, 0x0e9b89f32f159ff6ull, + 0x549e2c4ce8d2b9fbull, 0xe84b46d941006378ull, 0x2fec2e4ef2ad8f76ull, + 0xa06ce3cf0aec2f90ull, 0xcf5d274ab9306c3aull, 0xc7260c22948e0ac4ull, + 0xd4400554a5414e7full, 0x53f5ec02158908daull, 0xf8624cb2d63089bcull, + 0x238ec52c08add2acull, 0xac5a67eb0f3a1a49ull, 0x482b7f635d71751dull, + 0x77fae65afe2552c7ull, 0xb725176da9285991ull, 0xb404cbb4f6f365d6ull, + 0x62e449079091c814ull, 0x1d2ea4411f0a6f99ull, 0xbf549db87eaaf73aull, + 0x02413e5356c197bfull, 0xec80b9d92ee735e9ull, 0xa717ec5e206b6030ull, + 0xa1d0aa90a67b964cull, 0x344f23604d1ec0cfull, 0x46bcf075aa9ee6a9ull, + 0xdf3b76c8c8906f85ull, 0x7208e1e8370bf745ull, 0x7581f536603891eaull, + 0x7bd973e8248017c2ull, 0xf0edfe8d0ca3f0a7ull, 0x79d1ff05b9d2ee9eull, + 0x1e7316d8f52c53d2ull, 0x508ef891ead0149eull, 0xd00cbc1d2b951838ull, + 0xa3bb7b1695547b8full, 0x3fb3ead8be079978ull, 0x0a0269b3b0cb5249ull, + 0x4fb60f903babfcadull, 0xd30966f83dda4616ull, 0x1cbac1c5e91817d3ull, + 0xfb12b107d74c57b7ull, 0x78cd7d62022cf9fbull, 0xcdf4eed7b633df31ull, + 0x9ae66e441931b32full, 0xb373cc57af1d4aafull, 0xab33bbc0dcb4bf4cull, + 0x00f8dffbbdbc047cull, 0x4cb1dd0549bd19f8ull, 0xba9bb6fef4020b80ull, + 0xfe4c5cef67167504ull, 0x32ee4fdc06cb1a44ull, 0x3604927c972a12b4ull, + 0xfb7227d6561602c8ull, 0x66f6325b24e0c8b8ull, 0x1b8b70bbb74c1666ull, + 0xb22d3bb3fd2bde2cull, 0x88e3a1b3b12bec0bull, 0x47012139927d8826ull, + 0xe2c15e66ba791f3bull, 0xc8951a6522f9a4b6ull, 0xf66ad26340c8db09ull, + 0xe7ca56ab5a260604ull, 0xcd0e9eaf5767c118ull, 0xed7a5e6ef8c33b80ull, + 0xce2748e615dc3fdeull, 0xd3d74ec2e96080bbull, 0x458912ca3541befeull, + 0xe945f4888a75d2d5ull, 0x81ed51aff484566dull, 0x16fcaa783b9224dfull, + 0x26a3439b5e2d2089ull, 0x3b78a53f8a5135f7ull, 0xbe461a3b964ec7e1ull, + 0xdba1741174875529ull, 0x7bed20be60c31dc9ull, 0xbd40ecfe60571f58ull, + 0xcb46dafeb0351c40ull, 0x0cb90810cb4c894eull, 0xd33363832bbf8f99ull, + 0x200d1d4f0acbe0a4ull, 0x188e08e4cc50c3c8ull, 0x295603bc997c3bccull, + 0x64da2995a887a0f4ull, 0x3c395fb7b765e83full, 0xc542bda74fe507baull, + 0xb8cfeb9cbbb14e43ull, 0x50e036036d539d8bull, 0x2b48343e74c528f8ull, + 0xaeefa15bd9464e05ull, 0x61d3bd48853e990aull, 0xc0648eaac3db4f14ull, + 0x62f41be7ebc64b7eull, 0x58c7de41e04f4d09ull, 0x52e18f35916efd69ull, + 0x22bc3149b9e27374ull, 0x18951402c5f0a7c0ull, 0x2b6dd1a83658e60bull, + 0x4ce8b604be5891b3ull, 0x28c441a1f8736b43ull, 0x27f192a1535bd531ull, + 0x79620b954568e186ull, 0xa811e9d600183ae7ull, 0xc3a602d4a15451feull, + 0x8a0376da5b7590c6ull, 0xa5bff0b252865d02ull, 0x2781b47ba0b3acb9ull, + 0xa8806f14857b6a28ull, 0x0ac179a486a60a11ull, 0xa8d8061ca46d79d3ull, + 0x27250b406d9ea4edull, 0x527b598438699920ull, 0xe254c9168cda0d69ull, + 0x5d13cf3ae7d4e897ull, 0xf913f8f2fcbfa4fbull, 0x6ec55a1a876e3dc0ull, + 0xf0cbecf0c4610ae6ull, 0xcb9f036c1f38ac3bull, 0x5df65f6d572ea901ull, + 0xe68be31abab696e0ull, 0x5505067575ebd633ull, 0x0211b54ee9c3b1f0ull, + 0x6fda61072552e258ull, 0x8c7d04d4a29dac5full, 0x03a02f2b47b97699ull, + 0x80390c6f2c4d2b94ull, 0xd505abb9064ca66aull, 0x631bebb669a268d6ull, + 0x7c928872be70d3c4ull, 0xe58e21a86dfb94b1ull, 0xebd2383077f1befcull, + 0xeb9543879b0ad439ull, 0xd74eb84546860233ull, 0x3c7e94fab4c6cf94ull, + 0xe4c99cccd4742baaull, 0xb0c11b26535365bfull, 0x5692c648fabb73b0ull, + 0x86198fe41069b635ull, 0xc341d306782ae6c3ull, 0xb8326bb5c3e12acfull, + 0xc5af3247308cd475ull, 0x98ce4a3efbf2f90eull, 0x884710d9af036640ull, + 0xc61203a713357ebaull, 0x29da1de70ca22da8ull, 0x4f4883b213a1ffc6ull, + 0x3193d2eb66bcdb4bull, 0x6b68d71ec0ff274aull, 0x6db60dc4f94b7828ull, + 0x53f9522c7322aaacull, 0x3f21a477625de0afull, 0x0664bd8f80a95e1aull, + 0xe79091e16755e8ffull, 0x85d9c7de23c5f8b2ull, 0x72896298d27bd4f7ull, + 0x050921728e025ba6ull, 0xfbf530e7c375dd77ull, 0xe63697bf6196195dull, + 0x2a76a3b96e87df2full, 0x959b22b9fe098dd9ull, 0x160a9de18da06682ull, + 0xa60e6e9729b7d9d8ull, 0x56370745f30ec61full, 0xc0e02ce7736ba677ull, + 0x1041c399eac7f6fbull, 0xc6ab4714e92941ccull, 0x377a1f767f2af63aull, + 0x7b54925c211b062eull, 0x84f5389a278cd4c4ull, 0xe2608e5ff220e319ull, + 0xb29139be1306b3f9ull, 0x8a7a8685bd5035f9ull, 0x5118758930731412ull, + 0xa9a9a778af2286dcull, 0x748fb9d9bf9cfc6cull, 0x1b311d1b8feaa5b1ull, + 0x3dded25c0404ed84ull, 0xaa1fb4c7f603660bull, 0xb1e9aa231fc9d4cbull, + 0xb3723ac5f045f055ull, 0x016ac3b15904d60aull, 0xbd9d485bdf5a93aaull, + 0xb7a150c76017fa25ull, 0x1f07a6dcd4a37374ull, 0x7459c90016712fe5ull, + 0xe1f0956597089e9full, 0x23dca9bf7408c575ull, 0x58afef830c7c6056ull, + 0xff00b63adf8fba0full, 0x19543c2b7dc73212ull, 0x907967843dcbf318ull, + 0xbb0d5d107df4d603ull, 0xfb00c0812e2d2bf4ull, 0x3d24ed08e2fb0a6eull, + 0xf3d19bb3027db760ull, 0x849f94261ed8fc9dull, 0x32e67472cfdcee8aull, + 0xa4e2763670fef146ull, 0x743c88e7670bf20aull, 0xe80d23bb42f0e87eull, + 0xb49cb2a46b0c7748ull, 0x5d2bcd7ec907269bull, 0x2337ba0d7504f7ddull, + 0xd664621f445d61a8ull, 0x78638088377fead2ull, 0x9be65efec8212f95ull, + 0xb71d4313e3fb8520ull, 0x2ff0e03d1e447232ull, 0xeab97cdd089edd3cull, + 0xfd0f75d2ef2b8874ull, 0xb7f78e12978e7617ull, 0x4567d300f8b031d7ull, + 0xdcd847c0900ce7c2ull, 0xa3887eb1a5a86712ull, 0x9c24d78b9f3585f6ull, + 0x502357390191431eull, 0xace0ebc16d9f50eeull, 0xeca84135d17da594ull, + 0xd0dfb1aad48f0070ull, 0x5074bcb76bf9b05cull, 0xbb4c5c52a158e6c7ull, + 0x3afca8f9aa9075d3ull, 0xb71289a9fc57a233ull, 0x546fb79b60c7640dull, + 0x7b47384c533fa90cull, 0x38a7cd23d2366041ull, 0xa37a77295c01b6f0ull, + 0x19c9d5cf4d28d820ull, 0x82569ade03e51516ull, 0x65a49a19d77c06bbull, + 0xfe463bfe0861a1e7ull, 0x02a81c3f1df9400full, 0x15a9d844116823f5ull, + 0xfb34226f8cfca684ull, 0xe2d1f33e35e8b3d2ull, 0x274772133d02a274ull, + 0x6e71d4513208e1afull, 0x62971ab25f5d9824ull, 0x10bb739c3ff2b632ull, + 0xe2190a370b792307ull, 0xa9dff00d4d7778faull, 0xf20cb1f21d178373ull, + 0x35f64ff3efef06edull, 0xdccc9128b245a2d0ull, 0xf5b7dcc532a4509bull, + 0x009c2f31fa64e45bull, 0xa682391ab760c5f2ull, 0x9cb2e91a2d67c207ull, + 0x21c3c6b629cf2ea3ull, 0xde238d3027c4184aull, 0xa4898c6d201e2e15ull, + 0xf1fa75e3aba89262ull, 0xf6c40248e391ca6dull, 0xa3d05451a8b5300full, + 0xfe1e41e88372d3afull, 0x3061a1b2c09fecd5ull, 0x27407f7a7af80de9ull, + 0xc7f4724a303a7b8full, 0x53ad550e780cececull, 0xb51630b4de1f0a55ull, + 0x5b17ac2d5f4be5d2ull, 0x056283158f73c34eull, 0xdc42fd11518536deull, + 0x918ef732a80c3e94ull, 0xb3e67bfef98b3461ull, 0xe84da7fa51b5036cull, + 0x611714956955bfe8ull, 0x4828c1320c7bb14full, 0xe45257e85d2f0082ull}, + DynamicArray{ + 0x0173e78833c8d807ull, 0xa8ceaf3c08bc4bbdull, 0x53d96c7a7f48b8cbull, + 0x8a6e2ee572d83f7aull, 0x3155f8dbaf01a22aull, 0xcc9f339c3f0b65cfull, + 0xf89be241d5664645ull, 0xbffbc9ff7ff9ecfcull, 0x580d4718a1a03c81ull, + 0xacb98cbaee2cd2e1ull, 0x4344b2183a15ffe6ull, 0xe6f93c916bb75d19ull, + 0xf290c2095ae3efc4ull, 0xedfa13b8d4a25659ull, 0x297aacbba15f2876ull, + 0x6b4c441a6b1211c7ull, 0xfc90077fcc2bfffdull, 0x89d00e0e31dd70ceull, + 0xfd5d979363b51554ull, 0x77a477c66309564aull, 0x9b1bdc4c4809de49ull, + 0x03dde0cc7097479full, 0x9b10671139afe4ffull, 0x7fc3d30976f0deb1ull, + 0x4d1b4fdab74b0c98ull, 0x0c64a0a02ae90f9cull, 0x350d572d5e65b720ull, + 0x3d9d49f79b4460d9ull, 0x7458591f81970f05ull, 0x79b4a5f0881da437ull, + 0x0326433a84bc3a94ull, 0xb5275c0acb8b1c9bull, 0x5116f096eb91069cull, + 0xc7c66722aeb96063ull, 0xba73313c8b4f09fdull, 0x7123e5ba9593985eull, + 0x9b6f089c09afaa7eull, 0xa0e0be51fbc01c33ull, 0xd9b7edabf702f917ull, + 0x57e502d0ea2f18f8ull, 0x618aa2cbaa7339abull, 0x8b427089dbbc5c24ull, + 0x0e72706d668982dfull, 0xb1237122a25aa3c2ull, 0x1489f514ca29150dull, + 0x3d31b305da3349caull, 0xa1fb637f12a51a68ull, 0x63b119adaa83df73ull, + 0xdd3ef473907b8a73ull, 0xd2e4c4170361b646ull, 0xe4b3ec68d465a838ull, + 0x55fe657b5c550fedull, 0xa35fd7613fc54ef7ull, 0x7668a14418b15af9ull, + 0xe97136d843330ed6ull, 0x608274661edd445cull, 0x3ae031a7941544c0ull, + 0x5df8ecc72a4c3ae0ull, 0xc92a5299a11db51cull, 0x57463642cba35565ull, + 0x86a0c8ddcfb6109aull, 0x2c6ee387e13beb09ull, 0x8368d65a572ad174ull, + 0x383a44a902b4fa02ull, 0x6ad26131e5c88f0eull, 0x6c2509b2272d25cdull, + 0xcbbf2f1a058b4680ull, 0xe422568131036ec5ull, 0x27d4595f31737512ull, + 0xf97b236add37be7dull, 0xfdec43f6c998301eull, 0xba0783aa5320ed88ull, + 0xefe250a073ddd560ull, 0xef1fd0df89563ac8ull, 0xab60c83107ac164full, + 0xf7f3826b197b0301ull, 0xa66f51a7e9504054ull, 0x7b42132ea2463e11ull, + 0xb173599bf48e264cull, 0xab3d76bb478bd22aull, 0x88d560c01cb8b521ull, + 0x7c76f18f4510e07cull, 0x6ce064f3aa6757aaull, 0xda8cfbfa289b9e62ull, + 0x8f3309d14df71c80ull, 0xae1f864c693942c2ull, 0xaeda30ac2a74da28ull, + 0xae0428534b47c98aull, 0x39e19709571f1437ull, 0x3f174217adf817a3ull, + 0x40a84452be34d7e1ull, 0xaedfdc544161c742ull, 0xeffcbaa8d5827375ull, + 0x58eb11babbdf8973ull, 0xe2a9629c6f1a8857ull, 0xc1e3ce4a881f2b5dull, + 0x55de0502cd9e448full, 0x41e7b6ec61c24aecull, 0x8e49ea5283b5dba1ull, + 0xe0d33212d8c4defcull, 0xf605e18c2b43e696ull, 0x1e5ade0aa1b69729ull, + 0x1ae9cb6e4f93c878ull, 0xc26bee728f366b18ull, 0xa80105119b091ebeull, + 0x5fecfa5b0e40a2fdull, 0xdad52536534681afull, 0xc0de855908c29e75ull, + 0x846c8d2a691dfdbaull, 0xa805b0dd9bc22323ull, 0xfe88ded8ca6af5eaull, + 0x049931a59dc424d6ull, 0xef91aa389a6bead0ull, 0xfb2a77a35aa36ab0ull, + 0x88c64dfc8bb5edc0ull, 0x207d0bdf7751afccull, 0xdcf8fe38e4e28cc9ull, + 0x7d4b751896c66954ull, 0xa0695da12d309359ull, 0xb026bffe5bc5998bull, + 0xcaacc1cfe1567101ull, 0x0cfc76ea71d3d2fdull, 0x9f53afccb0f678dcull, + 0x6807a9d14b7fdf91ull, 0x2a7bb4f66dcbc544ull, 0xc419c1dd625b6089ull, + 0x1167a18a54602315ull, 0xe80a0c6a0b37e47full, 0x87847c567a21dc13ull, + 0x48a25b130a7fd838ull, 0xe861afdc9e4953efull, 0x0f5d48a2b1de684cull, + 0xd961fee114079dc9ull, 0x8df0498884a1152dull, 0x8e8468c97883a344ull, + 0x9e940ce66ffbd16dull, 0xba3accd460da77d8ull, 0xcf1cfe73a3131a16ull, + 0x23de027696b2091eull, 0x7dc7ebbeedd6a37bull, 0x5c3b4ef5f9aa2846ull, + 0xc31bbbfaec1e4c8bull, 0xf0c233c8d2037466ull, 0x64aef44abf23ccdaull, + 0xd5737453faca07dcull, 0x0af50b4081bf53ffull, 0xea1a5855b7915499ull, + 0xa5f09a544d044324ull, 0x3333f0291d9287e5ull, 0xdb3f0af72d7e9f4full, + 0x1a2f2a35990b750dull, 0x88ab345e6e488e65ull, 0x26eeaacd6396aa9cull, + 0x055a0cee7c15c3e7ull, 0x545b31f7095e1709ull, 0x064f6d57bda7a490ull, + 0xd7d229f220216d4eull, 0xa312e6f70e8c4b19ull, 0x6b05dab441cb2046ull, + 0xde74863ad3e7acf8ull, 0xff8e42c90a8fa7e5ull, 0xdd1d3fee98035075ull, + 0x33e2e3ca0df847eeull, 0xf1694b6a48c336a8ull, 0xe0d401570cc36f43ull, + 0x54650ef7a9d34e1aull, 0x7455f8661a5b60e0ull, 0x39660dba8621b14cull, + 0x30f06be08b59b602ull, 0xf07fcf8fcc734e2full, 0x306f68b8e425a009ull, + 0x3e50fdc65b9a657cull, 0xa179b6cadb1b9ee2ull, 0xe2a957b9a14ec8beull, + 0x57a1ebaf4f6e17afull, 0x7b613ddcd5fe8711ull, 0x14d4b40ab3ecf96eull, + 0x745001d022191c44ull, 0xe16da352353ff5a3ull, 0x33b7c775ab239e25ull, + 0x42328d95949509b1ull, 0x3b1892e6d463428full, 0x377c126f36468a40ull, + 0x6b1845019d4525cdull, 0x807ee7099a81b084ull, 0x9a1eeb93911ab634ull, + 0x3b5e0c300aa148e7ull, 0x60011db7df5bcda9ull, 0x4b2c77b6be9bf7a3ull, + 0x6bd73674c5719a59ull, 0xef4634d347d88ac1ull, 0x443aa64328262be5ull, + 0x1fd3f4e7ff6bdc6cull, 0x16be28e70a461098ull, 0x53824d2e7306bb6cull, + 0x5d7055011331a872ull, 0xc917ea7c1e3f93bdull, 0x3a4d12d202d9b2feull, + 0x50f3204bac705f62ull, 0x492075d98af47ce6ull, 0xdad366de1c8425c0ull, + 0x74ba37c3eaac9578ull, 0xdc14581ad2d396aaull, 0x068b54ebc481389eull, + 0x64b1396799b1437aull, 0x8c4887d896a38aedull, 0xdccd32fcee7ead51ull, + 0xdfb299279435e598ull, 0x6e3fae4cfdc2d295ull, 0xec14b9f2c077c058ull, + 0x62dbf6c2108d4622ull, 0x3ea1cb2124fa822bull, 0x5d4a4832348dc2d8ull, + 0xf8d6e843654c93dfull, 0x1255cc2164d1659eull, 0x49b5c55d4b936225ull, + 0x9cc4419368bfd77eull, 0x26b021931c4b0d1cull, 0xcac0e463a2696dfdull, + 0x577554453717daa5ull, 0x0383ac2fca16da29ull, 0x43fcbdc27242ce6full, + 0xbdd877dee884f2e3ull, 0x705780c3aa79f4beull, 0xe0ae88ffe2b44f70ull, + 0x41d4520ded829038ull, 0x26fd3a99ece58070ull, 0xfd3c30136a8b0335ull, + 0xc835c395b2025f01ull, 0x7e0a2589a7924524ull, 0x01937fa56438fd8dull, + 0x8986698db090b7e6ull, 0x44a54c49921566b2ull, 0x4835db7b10d002deull, + 0x4ffb327794f4c276ull, 0xd46c53f9d76b00cfull, 0xb415cf5e1f790c33ull, + 0x15f07d7115b43d1full, 0x39fc43cfab2ce790ull, 0x846e03d89246f4b4ull, + 0x55be02a88bbecd5dull, 0x43a901b6887952ecull, 0x12e4cfc0d98ea7f9ull, + 0xaf0ad25c7cc7f33eull, 0x9fa9bd2415ab7ef4ull, 0xc0db2646452829daull, + 0x7a6a0e79dda595acull, 0x3879588b5adc495bull, 0xf39d524cee46e85aull, + 0x3a5714ac7b2ad99full, 0x5e2922350b62e300ull, 0x63419e94c373f60dull, + 0x220974d5ee1534bcull, 0x3e3c2b18ab9e6ea2ull, 0x95af2141d1bb0e0cull, + 0xb0f32610a122677cull, 0xb136c8e61dfd5725ull, 0x216c23aeef08adc0ull, + 0xc59e8c5adae98811ull, 0x34beeb74940aa58aull, 0xcad3e5c1f2a94839ull, + 0x2189f0853a368068ull, 0x4414071c60a8096eull, 0x4bf72fbb385b5e40ull, + 0x4ca99080f3ff90ecull, 0x8eb46650a59a32daull, 0xd960ec8c812ae5d4ull, + 0xaace4d20ff0cf5ffull, 0xb8c5feb00680f0abull, 0x033911cb442450bfull, + 0x2c0a02b694ba138eull, 0x005a3d133a9f7a77ull, 0x47a9cf9363e4ce53ull, + 0x2e2b7400f732d9cbull, 0xd0c519069f2be7c5ull, 0x3b7f4c89f0fb848cull, + 0xfa768320f1ad0cbfull, 0xe94010a893ae2c6eull, 0x6246389d2f17b586ull, + 0x59e56015c3304f53ull, 0x1745f35b72edd61eull, 0x8bb5d440fde74bbeull, + 0x40a9c77cd4806dc4ull, 0x1f15076386672b72ull, 0x5d906963161b96b8ull, + 0x188dae526285b4daull, 0x2225182ded9f2d18ull, 0x3f1ec59f4c804a15ull, + 0xcc72c6b537fd7b4aull, 0xf3fc7e9c499ea0e3ull, 0xb23ec34c9268aa9bull, + 0xc25f5fc0310f813aull, 0xe2a86804dd60aa99ull, 0x9d9b6084aecd7087ull, + 0xe9813e32cc87a288ull, 0x453d546bc9816c6eull, 0x6cbf1cc4f959200eull, + 0xde583b45a393c54full, 0xd451811d400aa41eull, 0x50ec90751909576dull, + 0xa417de27d6e2a517ull, 0x5933c98208e72906ull, 0x9afd1231e9b76cfbull, + 0x17409ef20747e48bull, 0x345282b0668d51cfull, 0x1924eaf391ab1ceeull, + 0xe9b8edec76ec7285ull, 0x0c0393bf2b2c7ec6ull, 0x2482eb674a9242e9ull, + 0xa829c86b6f9c6604ull, 0xee58f52b0687913full, 0x4457c50ce5ad1209ull}, + DynamicArray{ + 0x94c40be5c3e2665cull, 0xc5c77b7a0a95acfdull, 0x6d2f1676b1436e52ull, + 0xbe0eba7dc11353c0ull, 0xd92904380f5c617full, 0x1e308342ae32431full, + 0x42eefd3204cdad7bull, 0x4e142c3913fcb5d0ull, 0x6c4e30a3228c75ffull, + 0xd20ab3c23dd6cc32ull, 0xcf9203b82b956f34ull, 0x1e191461f6bbbff5ull, + 0xce1046a5564f5d11ull, 0x49682387bff05e0bull, 0x0deac3eeb6c5b2feull, + 0x1eb7cd127b21faf6ull, 0x9289c6f55ecf9099ull, 0x716883d63ead71b8ull, + 0x7d8321715b96e45full, 0x06f2bc5dd6c0a792ull, 0x062f74440f6ed764ull, + 0x6e64d78f7a855558ull, 0x33ad0ac9263d6781ull, 0xe21598f813576ad1ull, + 0xc67fe4a934dd5b08ull, 0x14981befee98b557ull, 0x2575696c325d31c8ull, + 0xf52293585d149098ull, 0xe27681575d68ebf8ull, 0x3ac4b92c2c7638a3ull, + 0xb0cefd8110e9cad2ull, 0x45785f1362710636ull, 0x524c390cb4ff2ea9ull, + 0xe3612329545d8ddcull, 0x491fb5e3f7bd8b7dull, 0xd8b70ff0348827e7ull, + 0x20ec37e5b600655bull, 0xbf8ebd47947f16d1ull, 0x894b9c7f691b2b18ull, + 0x7ffefa4b9b702b4bull, 0x7e41c23f38a5ff3eull, 0x95eaeb8ae9572bf4ull, + 0x10b406cd60ecf8edull, 0x9e640dd1b0bc87daull, 0x6d8f826eb1b4d388ull, + 0x7471b127142d60fcull, 0x565f19055b31bb75ull, 0x894e0c42cc1137e3ull, + 0xf5ea7566254e1b91ull, 0xa82b54fe90bf62cbull, 0x130da5895de895b9ull, + 0xef6bd440f8506042ull, 0x49deba97b2883c59ull, 0xc210b8875ba4d415ull, + 0x7c68c9dc9a85a330ull, 0xf02a5598596f10feull, 0x632b3f80e7233749ull, + 0x21edd903d8e60be3ull, 0xbdcd269eba439948ull, 0x4be39094ce902d85ull, + 0x7dc93392b025f2bcull, 0x63366ff590512f3bull, 0x13cb57cd3bdbe7d9ull, + 0x375af516b64ef641ull, 0xc524796d9debed72ull, 0x6f28cc09335df409ull, + 0xa239356baca2682dull, 0x8d99303e27119676ull, 0x7dddf8059ccc6168ull, + 0x5f632c5892f09122ull, 0xb824609d8c0f6e15ull, 0x215efe58a3f09b34ull, + 0x89418cd499b95c94ull, 0xad3d71d43aa51443ull, 0x0c3dc8da90e81b69ull, + 0xebec230949b8ed62ull, 0xbc882c6c6780e78dull, 0x2123ddb1d5c785d1ull, + 0x87c1bd380c3380f5ull, 0x1623ef299702b074ull, 0x34f680cae5e1fe2cull, + 0xefea0d5c1d238619ull, 0x58ad362a33450d57ull, 0xc2713b4bd393a4b2ull, + 0x2e3ceaad3c8275bbull, 0xd50584fe9b32b020ull, 0x2079162b076d726full, + 0x15801d67ee3bc2b6ull, 0xa2785874c057ac95ull, 0xa6ce424ea8f3a850ull, + 0xf37605510b3c92e5ull, 0xded6b21ac44c22baull, 0x9aee1d161de875c3ull, + 0xcdae03816e4877e2ull, 0xc7a5e2764f4ec3cfull, 0x05d5946416837affull, + 0xbf4c4d5555ff4262ull, 0xd5e1ee816e9e7cd5ull, 0x8711de33b6b86ce2ull, + 0xd772bd80101ca58full, 0xc97555421b14901cull, 0xd19691abed1bd4b5ull, + 0xf841806db25dc433ull, 0xd1c7c5b5bc8226fbull, 0x47f7e8c0f28718ecull, + 0x3666e0d99c8a3df7ull, 0x3d17dcd90dfae870ull, 0x102409c894905e28ull, + 0x44ef66314e4be78bull, 0xa9afeb666053c13full, 0x1f3808afb474db23ull, + 0x97dadbcc3510ad03ull, 0xa98e07fa03228fdaull, 0x7627ee4dc717d63eull, + 0x01c5bcfccd645b63ull, 0x9c9c357fecd6af47ull, 0x183a0eb698440fb9ull, + 0x5c4866fa80e19b51ull, 0xb7c532ea3ba52c76ull, 0x079b10381748e80eull, + 0xc7abea52dd84bfc2ull, 0x939c71f8a510870bull, 0x58f39fa94ff06716ull, + 0x6e6b34391f77542bull, 0x17cc674b829db65eull, 0x3147d4b96b0ee105ull, + 0x6a1a2a136ddd4cc5ull, 0xbd7477b9b2b1d9eeull, 0xbc2a27db55d5c52bull, + 0xd22f2512ebc40169ull, 0xf2c36b371d03d96cull, 0x3de2225f2c65b6a8ull, + 0x5b411861c9c35bf5ull, 0xc6688076473998eaull, 0x0ca92b961b4e8284ull, + 0x3b8a005dbec57824ull, 0xdf181c964b970d12ull, 0x40e58f065a3af053ull, + 0x80e5413cdcf5d504ull, 0xb72ea733d7f24274ull, 0x404f0c15a905f51bull, + 0xe3c93d38e87ee8b7ull, 0xd952ba5860e82777ull, 0x2de237f25b63f6adull, + 0xe104f615a672c9ddull, 0x5c97a86fb84b32dcull, 0xae02fb784fe93538ull, + 0xbea5ea3e14759ff1ull, 0xe35e6e6d2eca8a73ull, 0x267a904218e9faa5ull, + 0x1a7982b74c55c9a9ull, 0x717929997a5f2cc4ull, 0xf2254380bad229b0ull, + 0x2402dff8cb4a7975ull, 0x41fa8e5287e9c9aeull, 0x8e23bf6df7891d72ull, + 0xd84afc7835225f05ull, 0xdbe5daf5ca43c495ull, 0x7e0cb22337d6a997ull, + 0x5db49a61a6321166ull, 0x2f12f44c02dccdd9ull, 0x7eb7f28b2189f610ull, + 0xb56a214a38cbf4afull, 0x337f38cb78de9d55ull, 0xec14c221db5d193eull, + 0x9950aaea3608ca48ull, 0x923f17b89f24a14aull, 0x7a7dda8815656598ull, + 0x6599bda04538f0eeull, 0x8414d53875df6a4dull, 0x63476716f7f14b23ull, + 0x52bb0195604c466cull, 0xe3a2484a4e6f4044ull, 0x17e610c9d1ac9465ull, + 0x97eb3189c43539b2ull, 0x239d1c557cda6987ull, 0x0e85e060f096a8e7ull, + 0xa101e1338e2bc9a2ull, 0x8537d601e390c8bcull, 0xc030f44697e79c6dull, + 0x1b8814a85ce85599ull, 0x87bf7d2f1166914cull, 0x071a0eab84b687d9ull, + 0x87a8552cf89476b4ull, 0x5b90da72171a88caull, 0x5238ea724b381f4aull, + 0x72a1adf89ed0970bull, 0xe869dc591f851153ull, 0x18ed23f22297b8b9ull, + 0x55ce6c595dd47c4dull, 0xa919d954274f6ed0ull, 0xb19b1a9cf665b8cbull, + 0x7cddacd46b30fa8aull, 0x6adfa935f48b7d81ull, 0xab93a9d3f0531adaull, + 0x5db94e337c132e75ull, 0x1854877f149c9ad3ull, 0xcbb82e6646292837ull, + 0x1d21f4f15f13ffd5ull, 0x882cb48c3e3c7649ull, 0xdb28faf71e99c041ull, + 0xdbeb27a544beca9cull, 0x63da2e35ff2fba8bull, 0xd0a603bb1cd70ca4ull, + 0xe8637d0673592776ull, 0x9ea2dd7e8b7d85a3ull, 0xef3f7e00c21ca01full, + 0x61268ef39739c496ull, 0x3c62d89ad16e0379ull, 0xd2bf8b64273dab20ull, + 0x8eeb86520a643502ull, 0x34ee9e79b68be20aull, 0x81d544cccf277c6full, + 0xe5ad0fbe140ea630ull, 0xc49b474b9cb5781dull, 0xf43a09066a8cafe3ull, + 0xfe09596b0dd11514ull, 0xe0b4788c68c56b6eull, 0xd144f1892e06a7cdull, + 0x964b1e25fee21358ull, 0x46a40ef64d4d3054ull, 0x16c7b8f1a44dbf8dull, + 0x68786298c4d53014ull, 0xe0aa40e718d8f616ull, 0x9371fbd19500a981ull, + 0x0bd203dfc705f8b6ull, 0xbc7f8cff0953b149ull, 0x368b04a59c792593ull, + 0x753d433f0f1a76c3ull, 0xb8bf71aad24f070full, 0xefa2ac6414d646c7ull, + 0x325afdccb39eec21ull, 0xa362daa44024cac8ull, 0xc349de25f7e7ebb7ull, + 0x16a070d9447c3ba1ull, 0xaf00c7fa47b897f8ull, 0x86013452bec81ee0ull, + 0x4276f4914a25daa8ull, 0x17cb3d11441c84fdull, 0x3b6eeb812acbcae7ull, + 0x2ed91e8c81978c8dull, 0x61f6a70b4ae68ee0ull, 0xf7fdfc0cad99f726ull, + 0x424004af9126eeb3ull, 0xc9a7354e8ab40dd2ull, 0xb2f311844bd61449ull, + 0x1d65796df4ecf2f9ull, 0x86160c9ac17cff77ull, 0xbacbec5962eddcf0ull, + 0xdc99ddd086d980feull, 0xf88b37971fead1d5ull, 0x203864c2e99b85d8ull, + 0xffde3d88ba1c1008ull, 0xb694e3ec3bb864b4ull, 0x6eb73ff4b2a4e6c9ull, + 0x1b77ffb396d6c4ceull, 0x1e7420cea80d478aull, 0x842c54be2cd2d49cull, + 0x9735185537e64af1ull, 0x2af0a1c936920652ull, 0xd8d4110563415789ull, + 0xdd16ca2b28e89707ull, 0xa62f5f0607adbd33ull, 0x8c26ea8712ca76e9ull, + 0xd610455b2a323e57ull, 0x56a52706c293cddaull, 0x8481ccd125940045ull, + 0x514cc897b59e741eull, 0xfad449bf80be0797ull, 0xd3bfbbb15b8e758cull, + 0xb106e1cbabd48c78ull, 0x6e30a2c5010c60a2ull, 0x87dc45c4c1288496ull, + 0xb93f8f78ef0610a2ull, 0x02ee67834793808dull, 0x3d1de3e547560dd2ull, + 0x20b8dea9ba228fbcull, 0x5b2026e233495e8eull, 0x8c662aa03edf24b7ull, + 0xd98e6b29f8946a68ull, 0xebd5360ac3e26712ull, 0x2bd15d2e75347c1bull, + 0x22eaaf81b67b636eull, 0x0c1caf106fa7c038ull, 0xfe06863666b82a65ull, + 0xc774fa5860705e28ull, 0x863dbe6f32bd2578ull, 0x842affdf26340b42ull, + 0x2516a3055566836cull, 0x6b5b549c706c19c1ull, 0xd159a0be82bde629ull, + 0x70ead14b136bf0acull, 0x819023ca09e2316dull, 0x6191de5ac6768d5aull, + 0x389b409d6f476a7dull, 0x2e59568f5e0a5ac0ull, 0x9032869514feb6e3ull, + 0x8257af21f4401a76ull, 0x68e6416d9930d6f1ull, 0xccb80accfa66a690ull, + 0x9254233cfd6d07e2ull, 0xadc3a0e8e9511d8aull, 0xd7545fdda79f8e15ull, + 0xb231e0acfc7d2036ull, 0xd90ddd84fa38a050ull, 0x6e4fec6e35657c7full, + 0x56d9a38c84e54ba7ull, 0x12360e735a786698ull, 0x7d4475496b5cc2f4ull, + 0xdee27b49a1d5420cull, 0xba21ae573308490full, 0xf55667cf34ec10aeull}, + DynamicArray{ + 0x692e01d3200a859full, 0x5da13cdbbf7adebeull, 0x25f2618cc9a05280ull, + 0xc649f9910d712a49ull, 0x651b13681da5d0a8ull, 0x586dca6999b014d6ull, + 0xabbf13e683bcab61ull, 0x9d0725fb2f09b663ull, 0x727bc6137241a820ull, + 0x1c3bf628beb3eee1ull, 0x3fad0a906a37eaa1ull, 0x8f4a8fe3c5f5e2ddull, + 0x76cc71d8b05b1a28ull, 0x71e937b2eee0de98ull, 0xff73ada440bafe4cull, + 0x1abc859851c6480bull, 0xcefe964f652604fdull, 0xef82afadd74c6be7ull, + 0xf4b496610e04cb24ull, 0xd1dfb0c69e7e32bfull, 0xc6043262d9911ed0ull, + 0x91e5c5b6c0089680ull, 0x224f335a694d5d24ull, 0x677ad4e4f7eba7dbull, + 0x2dbf66ed146ad7d9ull, 0x80a22ec51c658f7bull, 0xf8926d09096f6f31ull, + 0x4faacc531c3d9f9full, 0xaa231fb8d218c758ull, 0x8f85412d850a2d00ull, + 0x1684fdec0a53c493ull, 0xba49e607ffd0603eull, 0xc0af0e362e252ec5ull, + 0x2fbb74121d0fb19aull, 0xd8a5b818c8920156ull, 0xcae998ce60442d5eull, + 0x73989cd2f490f141ull, 0xc639d09fd9bdcee7ull, 0x5b4976f8533b0c72ull, + 0xf1a1cef74224be89ull, 0x007e09ccb1572d48ull, 0x709af92e4c5db610ull, + 0x6e97a2e1839c59d8ull, 0xd95361b88b6353cdull, 0x286cc51388a179c2ull, + 0x860543e99da498f0ull, 0x7d4e0080d1c6923full, 0x229a946d5b7b8917ull, + 0xad61228c3d262ad6ull, 0x0063fffe417664bcull, 0xf5b8da272e6b5f2dull, + 0x57b975e19220eb62ull, 0x665591b6cc9667a5ull, 0x43fc0b8edf88e4bfull, + 0xf49b3b560f51785dull, 0x02faefe36ab8f96bull, 0xd16f06fd470d7fcfull, + 0x7b4b0287077eb04dull, 0x5915d4a6bba9b054ull, 0xad646093e3fce4f3ull, + 0xea87bd223440fe13ull, 0x0db962b4b8aae05bull, 0x73848821dd48955aull, + 0x23c274360c17af4bull, 0x87758821628db616ull, 0x833d4b2b0de48ff0ull, + 0xbf0a33589c1204afull, 0x11ae922673dda0acull, 0xbcfc3ea44125270full, + 0x666118886cbbdcb8ull, 0xdf04e8679dd7785dull, 0x2e8d4aeea6fbed1bull, + 0x599e35b225ebf7c6ull, 0x98c6f09e3a938b23ull, 0x0ed5dcb298abc1f4ull, + 0xbadaa19cf1368f4eull, 0x4412a0173c3e7d29ull, 0xb4e3b3bd5140e578ull, + 0xccffc1fd4f9cd3faull, 0x745eb9d9f599c185ull, 0x18af89af527451f4ull, + 0xd2ad826b6b09355cull, 0x6380d15a415639d8ull, 0x93416ae8cf559d6dull, + 0xef4e0930a1ebd6adull, 0x39cb96931516f188ull, 0xe20785dc0178ef78ull, + 0xe26ee9ec9f64422eull, 0x66f9d8755ffd49ebull, 0x26e97158f0af20cfull, + 0xacbe1b6d88ec03c8ull, 0xf3b4d2bf6f2c7670ull, 0x9acb3bec96517e11ull, + 0xcaf32b3b0fd119fbull, 0x8351c188c1746a52ull, 0x933ae1b93ccc3ef7ull, + 0x45edac195a5ed905ull, 0x852b1cf88d64e633ull, 0xfc85ac8cd42635c1ull, + 0x90991be13d00e2f6ull, 0x004cf43a2876d19full, 0xf10525932e9eb282ull, + 0x4a87c409fda5ce62ull, 0x782d3d132324a4c7ull, 0xa3ad635692c6d525ull, + 0x87c9d927b4043b46ull, 0x61fdc47c1c005a7dull, 0x8a7234278367ae77ull, + 0xd5c210525ffdb9c7ull, 0xda8c9ce4fa040e2eull, 0x0a81b02db3b6cc2dull, + 0x611aa403135141ebull, 0x8a6cd45fc2f49eebull, 0x1f7abc4f83800caaull, + 0xa53b5c79232c3cb7ull, 0x59c979be58ca0ec7ull, 0x85dc069e144864d8ull, + 0x28cd6157c7a7a4d4ull, 0xe63fa4550a9ba744ull, 0x5b2030dcdeea4f44ull, + 0xa14749df1bc623dbull, 0x3a46f5d39909e55aull, 0xc3bf2191a30d340full, + 0x1033de4f07f0587eull, 0xdc75f4621777654aull, 0xbd7b3f2e88585c9full, + 0x37244343940de240ull, 0xd9eaa22bb0951cf7ull, 0x959e5fff4c80f46dull, + 0xbb7782fd489de3fdull, 0xfb27c78a933694aaull, 0x67be1ed58736c806ull, + 0xfb900cae8cdfa039ull, 0x36318d7085c84bf7ull, 0xb41fcd070eaae25cull, + 0xc7ab9b7db73ea04bull, 0x0b2ea8aac307d549ull, 0xbddb4e8bc83450dfull, + 0x78016c51ed3536f4ull, 0xaac0aacbb44c54e7ull, 0xc895c401290196deull, + 0xeb693bc49c5862a8ull, 0x2227d50ed8da89beull, 0x8a49a1e7973affafull, + 0x26c2ee63ec7064fbull, 0x1b2296e56cf5b4fdull, 0x0490e830ad6fd034ull, + 0xe17b6fd53a360970ull, 0xf8aaf8c15e222db3ull, 0x87ad45e26e6501d9ull, + 0x83abeea436019880ull, 0x7582f50a319bdf78ull, 0x6f6197b398e88539ull, + 0xaf613c768f309f96ull, 0x931dff132c0a135bull, 0x367afe094723fdb6ull, + 0x5ba3cffbe4a16542ull, 0x33b988a097bde8aeull, 0xc380554da4d8cbf6ull, + 0x0029728c8c0022b0ull, 0xb7216dab58a9d620ull, 0x09ba2f6e71e629bdull, + 0x0ccebcdf7ffbc472ull, 0xf6a8dca444b30056ull, 0x409a2ce4972f439aull, + 0x28fa934f9de07ee0ull, 0xe62dd95c392f6da2ull, 0xa16e148324364f20ull, + 0x7985375034fcab65ull, 0x65e329dd8c1eda04ull, 0xbab8c72dfccabd5full, + 0x1219793d50bc6469ull, 0xc7ede440dcb469acull, 0x4506263b981b5e72ull, + 0xef0064f4e0e868d5ull, 0xfa1531b5f2ecdf4eull, 0x302ab6e45a8274d6ull, + 0xf2e0c62773a7f0b2ull, 0x0b58da791c6fe7b5ull, 0x059f975be5c33a86ull, + 0x984b2bd7339d1b2aull, 0x27d19923440c0553ull, 0x947cdd0c18f1aca2ull, + 0xf0e4b850f017e73bull, 0x9a10b6bab435e359ull, 0xf6eacec6cda991d2ull, + 0x0bd9458c4a3ec3abull, 0x68d78ed316ec48c2ull, 0x310fda3fae51a4ebull, + 0xc327736630553930ull, 0xa26c4e6de052406aull, 0xf4b69d8b526ccd50ull, + 0x39a3c6efff24f21eull, 0xc8a25170a66634b5ull, 0xd0205f4b164430c7ull, + 0x725f326afbb1f895ull, 0x0a9ede5b7c8e4da5ull, 0x45fd21480b230172ull, + 0xee8e5f6e1d1ca7b5ull, 0x9482d44f35349f85ull, 0xc42d0951e438271cull, + 0x79c890ac022ec3bbull, 0x83a55365bc16955aull, 0xdaab90c701387851ull, + 0xdeba356013548564ull, 0x647f6a2e4a6a420dull, 0x5e828fb663376a16ull, + 0x5c9d805e5c442223ull, 0xcb174cc645b40b72ull, 0x55642ef89b9fb97cull, + 0x3bfdeacb5dbaf9f8ull, 0xeed31111dc94222aull, 0x1a41e5c29701f369ull, + 0xe4c647185feaebf2ull, 0x9d82ff7aa215e819ull, 0xe893eeac7ea886d6ull, + 0xade9c86c63032c5aull, 0x340c09c9f0071471ull, 0x101b7ce2c2b6914eull, + 0x5cdf6c76f02423d6ull, 0x48661a6362d3971cull, 0x4d7dafa00962f7abull, + 0xbd88eb6bdd1127d2ull, 0x336b8e7b5d297297ull, 0x1ea7d2be5c2ef09aull, + 0xb0f0895b0e78afd4ull, 0x742d46ffdc281622ull, 0x2c68c963a7994937ull, + 0xa1d87017a4a3c257ull, 0xa5b4a3ed34f17e53ull, 0x170354ed225ca859ull, + 0xda3885e24b0fe491ull, 0x829435503f5b1ef3ull, 0x60f2d8740b34e0ceull, + 0x3811a6580d7a459cull, 0xf303bf78d4917abfull, 0x9fe5aab94ca55cdaull, + 0xd2655d5268467ea3ull, 0x111a9cd56cf0861dull, 0x347e669f6a35d08full, + 0xa87a7cd5946819f2ull, 0xe817d50bc78ca8aeull, 0x823077f8e5ba669full, + 0xf1ee64705bda8da3ull, 0xb336e8690cd3f3c7ull, 0x17d53716f1d02a17ull, + 0x01ef1ec86fcf7c88ull, 0x4c7d1ba7573cc5a9ull, 0x0af6fc6dbee11855ull, + 0xd70ee8ba3bd93161ull, 0x761be8ac065ebddaull, 0x1ecc4d5b47e241d0ull, + 0x9fc75d21cc13cc9aull, 0xc46b41f012492e87ull, 0xbe3da41d3a5d92ebull, + 0xa7c826dc8425b6d7ull, 0x2839795e7e20c132ull, 0xbb20958d13a5b73aull, + 0x26c9704c8224f5a8ull, 0x3cf7269d368b0443ull, 0xd022af9de3a2e5efull, + 0x94bd72db723922c9ull, 0x8964bfab2110b0ecull, 0x83cebfce33734859ull, + 0x20253809e1f86b7eull, 0x2454201fdc8a371aull, 0x7e0cd5f09a8ef036ull, + 0x1d11856a6ebe7132ull, 0x954e4096ba48e857ull, 0xbfe35c190114df30ull, + 0x51152777bc1c9ffeull, 0x69601ba0a4b724acull, 0x4271142cc2f5732eull, + 0xa58e01630e9c9af9ull, 0xe8a01b2e448756f1ull, 0x2f42c790aba36546ull, + 0x34b26ce7f65e571cull, 0x0bff61026d4f28f0ull, 0xa89937bddef5c1dfull, + 0x57fd10b469505f59ull, 0x65c64831bdef6aa8ull, 0x44cc9da20cedb233ull, + 0x8b734355dc9bcd7aull, 0x08476f9f267843b3ull, 0xd83757d0ccb743dcull, + 0x985776d163250f99ull, 0x92b8998338582cbaull, 0xbba7a0e1d5426d15ull, + 0x0fc2abd205cca127ull, 0x892142455608056dull, 0x48a91825a0e25347ull, + 0x8921cc0b6e6313c4ull, 0x199aa8b886108d2eull, 0x923b6ae41f95627aull, + 0x214b5d9b5a638518ull, 0xfebb6a8da2c33e32ull, 0x5c117e8864a775b9ull, + 0x306cf90954e3338eull, 0xec60530a232baa7bull, 0x1709d5b30a9472dbull, + 0x0d9473b1e5973637ull, 0x5e8dbef4527604f5ull, 0x327868383947d182ull, + 0x4ad244d4edabd1c6ull, 0xfbcea6074d95d4feull, 0x423c362335b65b18ull, + 0x2cb7e14ae152b34cull, 0xf474d8156769d8c8ull, 0x2874290f98e4d56bull, + 0xfc1de1eb6dfa08efull, 0xa578b111102ec941ull, 0xf2419d2f52ba6fc5ull}, + DynamicArray{ + 0x85eb0978a8769bb3ull, 0xd20a956e162ec4b0ull, 0xb1cf91a6b9965ab3ull, + 0x1de63ac1b220ce35ull, 0x573dac2d55feba97ull, 0xfbb2dc74a56a1760ull, + 0xdb8eb41ebe8ae2deull, 0xf60f4790856cb0a6ull, 0xc2ab3a56c9a4a401ull, + 0x1a1706a32f54e391ull, 0xb989e34f68bb8883ull, 0x1072483111856ca8ull, + 0xd7814a5235ddb908ull, 0xc8b5d8d0ffb36ad5ull, 0x4700e7a6196dfa3eull, + 0x9e256cd8393ddd0dull, 0x0014af44e2687070ull, 0xca3f0006c0aa8c23ull, + 0xa6c1f174b6fb719dull, 0xff73761e95790ee2ull, 0x61e7cb2d5d0755d5ull, + 0x61e4dbdb24da3478ull, 0xfe43a3f9fcbcde71ull, 0x7934348337e79b64ull, + 0x53c2918e2c8aef62ull, 0x9147e32ac3836f8eull, 0x3474b1dff122dc1full, + 0x2598595d04774035ull, 0xa5cc0ecbd3716fc3ull, 0x2368fa1966863e84ull, + 0x2879a73683c433fbull, 0x33748fb04105d731ull, 0x860d0533fe99aeb0ull, + 0x4555d0a428b14aa0ull, 0x29b22cc4a526c106ull, 0xed724fdeadf930c9ull, + 0x89d1ad255ee583efull, 0xace41364dee6fc6eull, 0xd5ad3c660328d655ull, + 0xcfc7a3a58def4665ull, 0xc4326e57ab4f551dull, 0xf0423406d8a38332ull, + 0xd9e25ce0c074b7f5ull, 0xd6183e70920cfd96ull, 0xa767248b17c123a3ull, + 0x73fa85b7c3b71ff8ull, 0x24f83abd44b7d130ull, 0x7c5275da0f8899eeull, + 0x5896754df00305f7ull, 0x24ed4a2a02e176c7ull, 0x7a61d29a9e712b63ull, + 0x5a9063d30957e877ull, 0x5f30df67ebde3467ull, 0xfb21b80890f18e6cull, + 0x98792b6b572d83c0ull, 0x9c299e47e7e07754ull, 0x878dff3f7e934696ull, + 0xfaba2b496b1dd0e3ull, 0x1e9e50e741a96929ull, 0x9675b98636647ef8ull, + 0x660b421c6da5cdfcull, 0xe606d71abd0373d7ull, 0xce2d6dbc4f211483ull, + 0xd7c2c6da3ef8b8b0ull, 0x74925303f3b451a0ull, 0xa5f990d3971e6b71ull, + 0xc10a8f6aa634443aull, 0xab37aed840039d87ull, 0x5f0d58c56bfca04aull, + 0xf93b885f3aae66cdull, 0x93803152fc1fac74ull, 0x63f84cd209b2a765ull, + 0x73b853b26594f799ull, 0x8a84493c9271e9f9ull, 0x66fcdecfd9b8165cull, + 0x58a54cc3150d4087ull, 0xd688894af44ee238ull, 0x5958629023f6a49bull, + 0x1a0b98edc34814f1ull, 0x23fb6128af3529d8ull, 0x3518ec99894a304bull, + 0xb73b6dab570cb201ull, 0xaf75780ee53c2dadull, 0xfca0cdf8d8706e58ull, + 0x73dfff1479c47ba7ull, 0xb8df615120d3e5ffull, 0xdb575abfece7d11eull, + 0x2c702df82efbc086ull, 0xca593cd12240fb04ull, 0x631dcbd11ea94c1dull, + 0x2448de7ee0905c58ull, 0xab081067c364fb87ull, 0xebed68c81a4ea93eull, + 0x57fbc2093101f931ull, 0x52a04c048b3ecdcfull, 0x361f60368f39b81cull, + 0x9dc896e810ce1698ull, 0xa7180a0eafb3ba6eull, 0x9ca632154779ac47ull, + 0xe91d2dac973ca930ull, 0x47eecce71ffcf9d4ull, 0xcf25801a95202564ull, + 0xf5ac73d64640fc7dull, 0x01efd6f396c94ebdull, 0xa222c6322a4f1008ull, + 0x6c5d511e706a6a43ull, 0xf19e3403b5c7b393ull, 0x2f97682515edd23eull, + 0xae9791e6cbbab01eull, 0xa8ad1a965f4c29d8ull, 0x9ac7c9911bf1846aull, + 0x4c3abd73260e3e91ull, 0xf707e4a2e39f8320ull, 0x7a07e55152fbbc45ull, + 0x261c34766e0b99fdull, 0xa4d10d2928326947ull, 0xd35187867bfe9535ull, + 0x7b7d93afe3fe08d0ull, 0x64c7c3c0b4188cb1ull, 0xe1cd8ac19b622468ull, + 0x5573233c25e04352ull, 0xe11239799a332bdcull, 0x6619243207895dfbull, + 0x1a51496d827e4d23ull, 0x80fb85d2b9363bc5ull, 0xd2e57ed4f57f6e21ull, + 0x8b7847f18b3fcc4cull, 0xf69ad298e54739c4ull, 0xe6bc1268355d0a0eull, + 0xa2b9bc89855668a6ull, 0x46991ea5575ae195ull, 0xfb084ba0cbb7e8ebull, + 0x163bf93dbb337cdfull, 0x734492b5d42a3aabull, 0x161e347927ddb5c0ull, + 0x2198e92831e0c046ull, 0x7f44faf630795d06ull, 0x131c46a9fa3d20c8ull, + 0xab603d187a1d3853ull, 0x0d6cc5f981f94137ull, 0x86c65a60d40887c2ull, + 0x516bb1a80616351eull, 0x81f00bb3bc8a0568ull, 0x09859c3d86c25dbdull, + 0xf4361cc8c61f11f0ull, 0xca63a361652909b0ull, 0xc89ea2668024ccbfull, + 0x43cfa13d69294784ull, 0x83f04ca320634c1aull, 0xea3ff1a5a67ea51dull, + 0x0c6006db2fd23f8eull, 0x57bbeba90091b31eull, 0xebdc36de4c1ae8adull, + 0xbcef1c7166dd8112ull, 0xdde122fbf73afa52ull, 0x538a9f41863ddd41ull, + 0x1b2f370205b4c027ull, 0x70cc6b2802095589ull, 0x73196ba313ad1101ull, + 0xe738e5d211e33c87ull, 0x4ee30631aec51cfdull, 0x2fdc24273a9aa816ull, + 0xd4f57ebb2f9a1b53ull, 0x0477ab016485a498ull, 0x3342b33224125f1dull, + 0xa5f22341ad70da2eull, 0x8758b42011cc715cull, 0x5dba9ab66c273d32ull, + 0x055654256422d24dull, 0x9c1a12475d5c28bfull, 0x15eab666311f93e0ull, + 0xddc7c4b9d790a924ull, 0xd39c58c477c409bdull, 0xf0b94ce6a0635299ull, + 0xf65e15154a4dd3cdull, 0xe9ebc64b72c98200ull, 0x80d30e7e80d99b29ull, + 0x6c83733f8f75e577ull, 0x57f7f307c27d88adull, 0x5ca239d0eec92179ull, + 0xfcf2486cf088f2a6ull, 0x5a63d0937fa9a572ull, 0xb8742b07e435cdddull, + 0xae426348d85db1c2ull, 0x9d05e7378c27c9ceull, 0xc7eb79826f9e83deull, + 0x428ab6e5cb8facdaull, 0xfca44c46c4cc65a5ull, 0xecf15f4202abf365ull, + 0x33ebd060612484ddull, 0xb0d9ed2ffd478f66ull, 0xfe3143d81f87e258ull, + 0xcd3e7746d8d83bffull, 0x1b945e9c90c6df24ull, 0xb9c9adb758fc61f3ull, + 0x5e91180132dddb40ull, 0x7f9ea444128f12ebull, 0xa73fff1d2e3cefbdull, + 0x5375dbb1f3b10c19ull, 0x81427d8f5715c484ull, 0xd211a871992a9103ull, + 0x698a68d4c6c03a90ull, 0xf485ceaec4611ea8ull, 0x0fdd063ec8aa9faeull, + 0x18f631508866813cull, 0xa38e1cf24ca386f3ull, 0xea24f1deb4774f97ull, + 0x4e746d77f9e07294ull, 0x1e9f269ab06f9f34ull, 0x25835963d7454a5cull, + 0x77cc5ca188fdd992ull, 0xb2533fbc6b92abc8ull, 0xac80c9dab530a0d9ull, + 0x6a250993fd8c5c23ull, 0x432ee43cfdef3f68ull, 0xce7b9df6883efb81ull, + 0x7408c95c76a81132ull, 0xee5f00ab683415feull, 0x5b1ccd4802cbcb56ull, + 0x17c30e2d7503ed25ull, 0x4d94ac04c5338d36ull, 0xef59c6a8e0925c68ull, + 0x362e0b39ff68bd60ull, 0xbe3525f0eb83283cull, 0x812c0f1f967599b0ull, + 0xe0a0e830c815867full, 0x8f7bfb529560b404ull, 0xe70932c629b103bcull, + 0x245e18b08a8e01bfull, 0x86f6a926b794a43eull, 0x8d8171b09b6b7af2ull, + 0x2463482315ea9228ull, 0xdb51473a4aa12eceull, 0x060d4a2993041a41ull, + 0x2030fc56a2b0cc96ull, 0x732a40599c3ecb6cull, 0xdb7585c8d3fe9a32ull, + 0x74a35dad6c11169dull, 0x37121f4571e6ea83ull, 0x06247c736b4256d5ull, + 0xfd1484637a777416ull, 0x919663e93059e66dull, 0x399e2998a9f210ffull, + 0x6ee36ea246b59414ull, 0x8225fde88fdecc1full, 0xa3b4787da8959709ull, + 0xa5cfc2255545b306ull, 0xe6fe3873ca1a1eafull, 0x9ed2503555e9da71ull, + 0x7b194f7260c376aaull, 0xd6f761ea4f60d00dull, 0x2919042b48f8a8e3ull, + 0x8b79da678e667851ull, 0x50afdb389f00de33ull, 0x4215434cfc38491eull, + 0x9151d3e92030ccebull, 0xf198a96da7788da0ull, 0x5b65ad2772cbd121ull, + 0x55153a618e9118edull, 0x7229dcb4ef802cbcull, 0x13b7c5ae82bee50eull, + 0x7f5e0da085db8a9full, 0x438ababd87f4dc15ull, 0xb237ea1236192352ull, + 0x315b7ad7e83ded9eull, 0x8bfc8f56530cecfdull, 0x53a73b274c1e3688ull, + 0xcac6fa0f1d067b83ull, 0x83ca5d525c5535dfull, 0xa871afcb8fb27441ull, + 0xf0c91a915e1c1918ull, 0x1a566855c09eb887ull, 0x0cdc51207bf62053ull, + 0x472fbf0296c4ac49ull, 0xcae7eb6c0ce54e4full, 0x481e97ff99cff608ull, + 0x50c2cdf25e7f73d0ull, 0xab867bc3e83441a3ull, 0xfc3c3830313417b4ull, + 0xbbc730fe47171bc9ull, 0xc6b6761547dd2495ull, 0xfa66596d7b6fcc77ull, + 0xd0262ec967edb64bull, 0x68ac65418e626864ull, 0xe8c1f168463d9e7dull, + 0x90d18acbcc64b9adull, 0xf840f6fa925780e0ull, 0xe28134ac7701a68eull, + 0xb3c294e905602f69ull, 0x77385806dde98e1cull, 0x2a36064dbecef044ull, + 0x6dcf4b8007e7aad6ull, 0xc821e267691ac232ull, 0x3de58bca6c503e8dull, + 0xd8607ebd778eda89ull, 0xa83201eb1d4e9a61ull, 0xaa9e7fa69573c60cull, + 0x04915a0c7f7b21adull, 0xe11b0f4ad1d710e4ull, 0x8ab8be26b874ebcbull, + 0x9f0e38913c6631d6ull, 0x7656508b1188ed56ull, 0x8e380a39b9db5460ull, + 0xcaa362decf3aa3ecull, 0x0c9dd82b4509e602ull, 0x111c102a97bf73b2ull, + 0x2ff493f7778b731eull, 0x86294d87a19ac455ull, 0x7d9f3d43ca1491b1ull, + 0x52c1e45311bedf3bull, 0x71d2aa559f0476f1ull, 0x450d874bf2887c72ull}, + DynamicArray{ + 0x691b878545df1df5ull, 0x06d59774ad2d9addull, 0x87d10e7f5dac0196ull, + 0xbac6eab1c2edcbb0ull, 0x095aa3192b79b346ull, 0xece4851135af3e5cull, + 0xbd38b503c943e726ull, 0x4781bc44b866b154ull, 0x2df255be26637f64ull, + 0xc9e00ed5ef3e5fe9ull, 0x37cb4e2a21de58cfull, 0xf93ee582e1ef16caull, + 0x9c0bc0410c5721f8ull, 0xbfaa106d14f6e752ull, 0x48f4c232b29eecd1ull, + 0x066942ba704517bbull, 0xa37cb88315f1d213ull, 0xbe23fc7556cc5329ull, + 0x642cf645f5eb0fe9ull, 0xe3ae9f2f524d3d64ull, 0xa37cc074ae979a85ull, + 0x332913497b6fe3adull, 0x2b2197126a20a966ull, 0x0e3705e40d62de83ull, + 0x1adb54bb080558bdull, 0x390646be2d880987ull, 0x430849af32f898baull, + 0x2548cc84e0c3bd60ull, 0x369f3e1690e649e3ull, 0x071492f0d4382b78ull, + 0x73135d0d4c1c61d3ull, 0x8fb3460bbd6800bfull, 0x1e7592724f6870b8ull, + 0x4b7a26a24f0131a7ull, 0xeedd353693045200ull, 0x90fa91dfbf0a9ec1ull, + 0x94b064bb01ee9de6ull, 0x600f621b52958cf4ull, 0xcff49ab3ff3a7158ull, + 0x1370404a6566afb1ull, 0xe1c6c1f7149495e8ull, 0x29cde13cd08c9a19ull, + 0x09b2dd57e22cd936ull, 0x7f2df0f9f8f0c61dull, 0x3d5d01e25a6df036ull, + 0x9a67b2f786465accull, 0x00368919eb3d80e9ull, 0x4e85ecc16b6a3d61ull, + 0xac238e381c306862ull, 0x38f44f0432cbe41eull, 0x8e53430eb66c4b7dull, + 0x1185b8fe88c3ff21ull, 0x015da191c4cc70b7ull, 0xfa26eff83b8dc4ceull, + 0x08673a26fabcc5eaull, 0xb35a538f4b1bd2adull, 0xddfa96de94fcd62bull, + 0xef5e6d186631ac7eull, 0xeca09ef1f759be4cull, 0x5336bf4a79d28d96ull, + 0x625f56dec01e9263ull, 0x0d2fe1a4fdc3d64bull, 0x52ab435a3db0d615ull, + 0x49e0376810ecb48bull, 0xb17e66ca215433bfull, 0xea4a7922a099a0ddull, + 0x477a1de56daa8b3cull, 0xd3e5d200b1f6c408ull, 0xdc966e659fc3da6aull, + 0x78bff999adce2659ull, 0xe7fdb2c9a6b8aab8ull, 0x741cc69283aa4006ull, + 0x7029882be71036a0ull, 0x8f52fff8040be012ull, 0x58dc2bf55817a844ull, + 0x5690390e6be8e4fcull, 0x5facec72a2b8acccull, 0x33f42761e2d0d042ull, + 0x56c07c72e2b27b17ull, 0xcfca72211a127f86ull, 0x038ee02c9c744ab5ull, + 0xbcee2d6594b31c32ull, 0xd54514dae2451623ull, 0x5510c0d6c39527ecull, + 0xc9f8d939ae4e863dull, 0xb97922d420face73ull, 0x8d72137e244fb847ull, + 0xcfd198e92feeac87ull, 0xec81d08bb49d6d4dull, 0xdc5eaedd0c782bb3ull, + 0x17af6e822ba6714bull, 0x74c4eed982afcbb1ull, 0xc77a833288fe6b84ull, + 0xf6773bdef92f23f0ull, 0x31a8fcf2852c85ddull, 0xd301f88e47796fb8ull, + 0x624d496b071fbc90ull, 0x5824f54c70c78232ull, 0x34114c3d6f8f8aeaull, + 0xf4d5daaee3f80080ull, 0xba9b58aff699b503ull, 0x613e78ee703ed884ull, + 0xa5a88264323339fcull, 0x59c84f194d16b7efull, 0x78c8ab93638e4c79ull, + 0x8f6fed7ece25fc53ull, 0x6efcf5d23139b57eull, 0x55df0e8d1e409a84ull, + 0xf773d33804aa8d3bull, 0x562faf1d7f4fb005ull, 0xccb300ab50e59f70ull, + 0x2a28e2ebb5d1ff48ull, 0xb31be1741a3a6ab4ull, 0x628736a7fbad63c2ull, + 0xd1e55a3e8394a5c3ull, 0xf12c89fa7e29f29full, 0x35afcb9a322bcc27ull, + 0xa6d5bd58f4a9905eull, 0x7dd7b00a04e4c837ull, 0x617c452d93dfabf6ull, + 0xc18510e45ca25d9cull, 0xf8f366e468ba88c8ull, 0xef1a18580b34a7e9ull, + 0xb3800ced002e8cd3ull, 0x9e4a1b9f8c7e4addull, 0xf438735e308b6a6full, + 0x584ece066d07fe0full, 0x6e6ee122cea916f2ull, 0xf719ac507f4d9589ull, + 0x61b0377e91b377afull, 0x56f81ad37fbbb082ull, 0x7338d194d386fc9bull, + 0x29e5809224d03804ull, 0x3e27fad3ca35625aull, 0xa6f8fb52c7f45c38ull, + 0x9f1b9cac75da8b7cull, 0xe8c587d13160a809ull, 0x73a28a64c5a791cbull, + 0xfc23e178c23ab564ull, 0x5fe1f2162f1703d0ull, 0xddfeaf591a48fbacull, + 0x3363fa79ee372728ull, 0xbe6860b4f971d70cull, 0x7916037925263d7aull, + 0x1f26b291299420b7ull, 0x525ef64ce8976e24ull, 0x06bfff1f4636892dull, + 0x262cc2d05b59f593ull, 0xc299ed5ad337b285ull, 0xf38f898979fa41a1ull, + 0x95e0d10a7965705aull, 0x8528f1b78d19dbc6ull, 0xb021060f84ab9699ull, + 0x500d57a3f5fc7908ull, 0x533c6f91534938b6ull, 0x1de8dad868b17c42ull, + 0x1e10d99996d1ac8full, 0x0275ab1b6e513631ull, 0xfc1d1c56ebf49cd3ull, + 0x02c84c4c29e8a731ull, 0x4cb1ca6305f87b3cull, 0x8f88e2cb2900ec19ull, + 0x942194a12b8ccf5cull, 0x52960a364a703aedull, 0x546ad0bd8e27fa80ull, + 0x6363619aa15e947eull, 0x6ab667ae57396aaaull, 0x5b768c6bbaca429aull, + 0x7205d88eaa073c6dull, 0x6dde7dba75109a3cull, 0x3799faefa3a3af28ull, + 0xe13ed1dc988910a3ull, 0x364ed5cd5ebc0ea4ull, 0xc5af4b88c67703ffull, + 0xbbff39a953601dd0ull, 0xba50537db0634f9full, 0xc783ea85b061fb8full, + 0xa1df2a36cff59a27ull, 0xbc018eaf525c9ba9ull, 0x1bf920135f4dbe62ull, + 0x34719edb8be7f53bull, 0x158fd2367417c771ull, 0xc1c4bec5289e6637ull, + 0x2931a2d676c23366ull, 0x593ff0eb176d28dfull, 0x0bf3a12296eb4551ull, + 0x997150692b4a9386ull, 0x5b84219f7054f511ull, 0x655f24e1688b5ad5ull, + 0x77de75582f172df1ull, 0x5dd46f7c3c178b70ull, 0x5e3001b51bc62cfeull, + 0xa102fcedd8304407ull, 0xcd269235defa7045ull, 0x39e0f8537b26c2f8ull, + 0xeec5f1334ad95453ull, 0xaaeb53e26092ebcdull, 0x2899d4a9f9574877ull, + 0x1c8cf660a118f8abull, 0xd5b1168e43390b93ull, 0x59af73e351feeb8cull, + 0x6a1dc0cf79d07a65ull, 0x3dcbcd5844a90ad1ull, 0x697efc8c9da9d5dbull, + 0xc2adbc3b913849d5ull, 0x8e98efd74e86520cull, 0x6f4801f05eff4105ull, + 0x7db6ff11f2fdd425ull, 0x30e7a457b29d12e7ull, 0x3e8ea6cc2d33a72cull, + 0xa33ab0af984e5f9cull, 0x023fab15dfdfce55ull, 0x4a34e94c455b75d3ull, + 0xf3291d88cf483d16ull, 0xd7aaa89f0d8764a3ull, 0x182f22e700a9b096ull, + 0xac81e56df90212b5ull, 0xcdf50b38d59e2b21ull, 0x8358878546a4f754ull, + 0x5fc7df6d49c80ca2ull, 0xe0886b328705d5f2ull, 0x52d36e12dbb7641dull, + 0x335e24560a6a9abfull, 0x42678921ce45c70dull, 0x0c401f32109c23a8ull, + 0xdfbc0df154d33867ull, 0x9e3a75feea92caadull, 0x902b57d6e79671dbull, + 0x571925c850824d46ull, 0xa365a2a739848702ull, 0x54c59dcfa11cb5f8ull, + 0x4e01ef91e5356c0eull, 0x7b8b04818819bf8cull, 0x96dff3befa5bd7c3ull, + 0x9f816431f2dead80ull, 0x5ce4ef3bcdd86de2ull, 0x97d853df5fcca33eull, + 0xab5de483d1689309ull, 0x73fcb2d09ff4d9c2ull, 0x622be291c532a02cull, + 0x034af99c06975b90ull, 0x3be5e71f424f4f58ull, 0xfcefdd0c157ec4a1ull, + 0x6475db1f481534b8ull, 0x21a242633729f019ull, 0x72c62599257207beull, + 0xc8a555f44a9ede0cull, 0xeba727d669aee30bull, 0x8804b7f5802b0b16ull, + 0x29688728cb6e00f6ull, 0xc6db65c0e8a78d52ull, 0x4cec7b6f59f99722ull, + 0xae7dcac4fe0000b3ull, 0xf458598f7a654560ull, 0xb950fb4a3de57c2bull, + 0x75d9ddd8a18a3b84ull, 0x6e6507d0675c4e85ull, 0x71c31f96315374f0ull, + 0x1b11384a5b153a6aull, 0x51e8e2f5f3d35c0bull, 0x5d2a4576f06e293full, + 0x488c935823765df4ull, 0x708e05c11408e978ull, 0x2c3721d44977b624ull, + 0xefec87e4e5757f1dull, 0x5820b69b53b90982ull, 0xfcbd7343295ab64dull, + 0x00757009eccb055cull, 0x8337be04056b0397ull, 0x271bd8d360a8f88eull, + 0xed53b87f61d58599ull, 0xc9d6504297f5f940ull, 0x25dfaa4e657113a7ull, + 0x96a2fba436f488a1ull, 0x2de11570f0a6219eull, 0xe33fb9d287ee6b6eull, + 0xca471cd8dc1e33f6ull, 0x13023966d3ed5e23ull, 0xe938f63e8e8427e7ull, + 0xa93f3ebd1613a793ull, 0x3aaba22d6bd977f8ull, 0xc2d38acc2bcccbd6ull, + 0x21adfe9abd44a116ull, 0x0925f1d7bb6a6e84ull, 0x6cbbcfd8cf59b234ull, + 0xc453ef1c6ca20569ull, 0xbbdb28f8729ea0d5ull, 0x504801c8a05b75c8ull, + 0xdb2484e01726dd6aull, 0xf4efea93df8e0fc7ull, 0xba484a1aa2627bc5ull, + 0xf851284ac633de92ull, 0xdf572188a2b93676ull, 0x6733996d0cd9d719ull, + 0x93e3334f3a626133ull, 0x77da9a36dedcace9ull, 0x704e7f46a2d16c5eull, + 0xf715ba9af0b6cb44ull, 0xf9d4ba9682129dd4ull, 0x1093bc1d6b4cbdfcull, + 0x335ac0b876d0daf4ull, 0xd069df124d5e1952ull, 0xce70f9719a838b47ull, + 0x3e6241baaf6450e4ull, 0x6568845cdb241cd6ull, 0x6a98d96808f61d64ull, + 0x87e85c806ee29efbull, 0x060f1efda86cd776ull, 0xc31e8678a3822780ull, + 0x9ecf7376c02129c4ull, 0x7d449f4906f06889ull, 0x1f723a10515c6a8dull}, + DynamicArray{ + 0xd4efaf1fb42bee6bull, 0xed180fdfed2b0dccull, 0xa2672432b4ecc146ull, + 0xc50125763735a2d3ull, 0xfcc914518527dd8eull, 0x1ee6907c06029e9eull, + 0x8c29201e1a7bf3cfull, 0x120956d799373c7bull, 0x1b4c580a43f2df6eull, + 0x2c686186b0473ed4ull, 0x3a63fa42c4fba5e4ull, 0x476d8f56334da2c8ull, + 0xa403716cd0fe64eeull, 0x70b353fe2fc08d84ull, 0x3b22ab8088b1fb39ull, + 0x23be79143f41d68dull, 0x9eec54409fff089full, 0x5ca8e43876d0442cull, + 0x3c3f4092fef1007dull, 0xf54fab22346fd4b8ull, 0x47275f3f9ac461b1ull, + 0x35b7159468014b24ull, 0x977e64278815d725ull, 0xf822069d03460c43ull, + 0x0aabdb7d97fa4fafull, 0x87cf6051e1af3f01ull, 0x1e81819d9098aeb5ull, + 0xa765dee7f47139b5ull, 0xeae806fe37fe36c5ull, 0x81fdbb4b60468e3eull, + 0x0303f3493d9da52dull, 0x2a5524bf9d30cdf8ull, 0x00addcd5faabd81dull, + 0x8f4b75762e17f195ull, 0xfd57edbecf6d3cb6ull, 0xc25c4a532b688f27ull, + 0xf19c5448445ac655ull, 0x6461974a4c8eb7a2ull, 0x1006abb3c324d418ull, + 0x33bb55dc6735fb8full, 0xdfb6dffbeebda716ull, 0xfe0cff43a7682a07ull, + 0xe6f3b04e3b5a9f25ull, 0xcc344dabcd2e0fe5ull, 0x572952ee2fa195a3ull, + 0x9eae85a68c23c087ull, 0xe8366d6016d8dffaull, 0x8e6617958712d688ull, + 0x683b7d0e7255065bull, 0x03fc313299483bbaull, 0xdb95dc44f39f5cc0ull, + 0x26b57db3543f7599ull, 0xd7b09e194b322d79ull, 0xf399cbb9853fd158ull, + 0x9b024b7d40e4020eull, 0x3bee05a417570e43ull, 0x07726be1c6d22490ull, + 0xea3e54dbba9a06d2ull, 0x51e2a3e6ac8c4588ull, 0xdc50115d4cfcf5e1ull, + 0x6b95211cc0f9b9acull, 0x9d8af647a0d931d9ull, 0x53f1c9d819878252ull, + 0xd091e4892cfc9ccfull, 0xf9cdaa728b6b6b58ull, 0x213bd0c61efd1a70ull, + 0x7667fa9bb59a0929ull, 0x87bfa2620e296937ull, 0xca752291108ccbf2ull, + 0xbc39c623632c3055ull, 0x237cba4bb2accafeull, 0x127a7c41a96642cfull, + 0xe771c2519bf6b141ull, 0xe5527f4ef1888c03ull, 0x275156f843eed292ull, + 0x54c72b9e673d73ccull, 0x5c8575c7ab54b0e8ull, 0x33fa9267b2b5badeull, + 0x55b65339425e099cull, 0xf3df4c5a1efa98e7ull, 0xd82c1985e96149c4ull, + 0x010016d6d86d11ecull, 0x5360071a0886807dull, 0xbc6a2c1494cee41full, + 0xf3f5d220b2e9e805ull, 0x7214e7b06e1e22ddull, 0xf09f55d5ec00312cull, + 0x0f06d6eda0a28a6aull, 0x81201cb2dbf03b35ull, 0x6a644ca96d253c45ull, + 0xc2ab8c5d5deb529full, 0x98da466528737905ull, 0x1815cd776f9d4099ull, + 0x55f9d4b6149206e5ull, 0xf3cab0898970b10dull, 0xbdb6e59de78b2cdaull, + 0x2a8e634f0c2e82b6ull, 0xc2872c02e2ce8e6full, 0xcbf5d547eeac4ff1ull, + 0xce8df15fec167850ull, 0x43ddaf1dc9a7fd15ull, 0xcd346493ddba05f2ull, + 0x970a852f64e8b8b4ull, 0x6cf9e0e47297f395ull, 0xd2740dbdb3059bedull, + 0xfbd5288dcec0c511ull, 0xd5f64989f3edf847ull, 0x51404a3207cc4c59ull, + 0x8c78d76a69848c3bull, 0x1fb669df43e06de9ull, 0xf480520ef56f78c5ull, + 0xd846184a39812533ull, 0x56d9aac00561264eull, 0x84966ee95948fda1ull, + 0xdd8f3e385574f7dbull, 0xa4d86131f8eee716ull, 0x4fe51413eb8bb986ull, + 0x22c7b302bf46fd73ull, 0xcbd346ca19fb920bull, 0x66a5ea2333f2eb15ull, + 0x1f433dd0ed38587full, 0xbc5b7c8d3ccae31full, 0x050fa2c63b4315acull, + 0x2badf3a76c0ccffeull, 0x1ab2f34f35cd579eull, 0xe52d9e024749dc01ull, + 0x137d8048614981eeull, 0x6b74decd0dcf5decull, 0x4d3bf256e12d6926ull, + 0x04d31ff87ceca418ull, 0x3effdebd18c29ae0ull, 0xb4e630bf0fa455d1ull, + 0x60afb8f61fa43de2ull, 0x2507b03d9e24fb4dull, 0x293185b186763a67ull, + 0xfd6b1121e9c5b5cbull, 0xed00c43453187f18ull, 0x9bc422752a3c1d06ull, + 0xb7cd845d80a6db32ull, 0xeca61fbfc9482b9full, 0x21356ec60bbecc89ull, + 0x89c2e77999d310c3ull, 0xc61351ef04fe10b7ull, 0x4515a8502cf7578aull, + 0x3de1c84111c1785dull, 0xc7d92a712be23de4ull, 0xf90757924ab9cae2ull, + 0xe3e826acacfe3392ull, 0x90f4fa2f2c842541ull, 0xefbcf85292ca1956ull, + 0x6f6f41d3eb1a15f4ull, 0xe9da714191c3c4feull, 0x57532ce233411ab2ull, + 0x4faab107aed651d5ull, 0xd85df00c960db0e8ull, 0x45079b971131fcccull, + 0x244946fc7c8b2b2aull, 0xaf7cb9df0aadba20ull, 0xfdc9e243538333b6ull, + 0x6245d5b06243c6f3ull, 0x9d35b3f9fbb900f7ull, 0xf08d1ce91a032865ull, + 0x2ca0cc9ab8e8b641ull, 0x05e1116362d8a799ull, 0x3f2e495e32e572e1ull, + 0xffd485e27d5e858eull, 0x173ef96996f506d3ull, 0x45609ac96e0ea1f5ull, + 0xd328923f94909d33ull, 0x05d30e1f02b39201ull, 0xb12aec709e8034bdull, + 0x3929a29dd21d9a4cull, 0x9f4af36523ba8f9aull, 0x3a3bdd3375230701ull, + 0x3dccb3f2cd39cd59ull, 0x534fe97081a05383ull, 0x13cfb13856804959ull, + 0x8c0ce59c0bca7459ull, 0x0fa30fc20aab9ed3ull, 0x428bd4a9480378b1ull, + 0xd1b15404c1169f3bull, 0x7ec696f2ea57514aull, 0xd51fec060c0e37f1ull, + 0x654b852f2eef72f8ull, 0xc3db3b52c394358bull, 0x2e6663f854a0324eull, + 0xad426bea6481f596ull, 0xd37d52c87aa80611ull, 0x9433c06978cd6e84ull, + 0x660dadf684af7d92ull, 0xaa59ec52a1f8d600ull, 0xfc367b96d6e03267ull, + 0x0484cf8ac01ce99dull, 0x06e07a960278adf3ull, 0xfbf3485e8291d813ull, + 0x86f714be497d5105ull, 0xe8a4dc886ecd67ebull, 0xa3941492368b035aull, + 0x90aa3ba688d222bcull, 0x21b5c48116678362ull, 0x6cfb42fc37116975ull, + 0x8b6b640d15ef0589ull, 0x202f29f75458a28bull, 0xd93199dd2572902dull, + 0x74c72707e5bf460dull, 0xce273ba51a1af36aull, 0x76f4ff68bbc42824ull, + 0xf5ad71fa4a281bb5ull, 0x960b3409be8bb7e3ull, 0xc18fe704f6c9006cull, + 0x6aabd0a16d056182ull, 0xd6dcec0225daaaedull, 0x620717b25680ae65ull, + 0xeaa2a6339850970cull, 0x4bd50f757afcd964ull, 0x1cb4fc5a0a6aadd3ull, + 0x96bfcf5ffa2981c9ull, 0x0238ed65135ac711ull, 0x484403d6ace742b6ull, + 0x6ac5c1d98b47f53bull, 0x1528250f0f8795efull, 0xc0aa2136783f7e46ull, + 0xe36d6982ac7317ffull, 0x46f80efaa06d12dbull, 0xc758a8db34d7ddcdull, + 0x3f596d5aca548bcfull, 0xaf623ea5b477309full, 0x63ddbc89eacde5e0ull, + 0x6a5e6d5ed09bb5baull, 0xae75641b5ee7a4a0ull, 0x17d082df6ca1e862ull, + 0x61120c0fbe532311ull, 0x88542289f8a22989ull, 0xe59060d904e14415ull, + 0x96041e319b8818c1ull, 0x7a4edeccd5eb4b63ull, 0xa207cc8dd669b89cull, + 0x97aec889add37657ull, 0x1b85dd05a848da9aull, 0x163da482520542caull, + 0x21099cedca72d7f3ull, 0x7a35a1ebdac19b26ull, 0x818e3d2d78cfde4eull, + 0x5fb13f96a63dc718ull, 0xf17ef0c44a8abbeaull, 0x3d8b1aa057d025e4ull, + 0xf6913a6aa3368b5eull, 0xffbfcc40b3bdeee8ull, 0xf3960728ae900f22ull, + 0x53fa3b21bb60cc2bull, 0x966586bcde6b3e34ull, 0x9bec3d9957a64930ull, + 0x84d49cd69704174eull, 0x87db34ba3a268c33ull, 0x95b9831c41e8c32aull, + 0xdffcfd382701780eull, 0x84b75693f7d337edull, 0x6170975a4d80a5b5ull, + 0x1ffbe734b6a0a200ull, 0x9e77321ffc945771ull, 0x68e62fc152c8f894ull, + 0xa69a5433a4b6b9f1ull, 0xfad1dc268909357eull, 0xbfc392d89d495e4full, + 0x4caaf8b29f1f08ddull, 0xa086d4a3c5f7d517ull, 0xb1cf2fda339c4a55ull, + 0x40f2b0c795815c83ull, 0x0bf2af461f2af3ecull, 0x9cde0dd0211440b7ull, + 0xce4b7d706eb9d64aull, 0x42a07c941bd962deull, 0xe81522b90982d19cull, + 0x7ed45fc399ece4a8ull, 0x53aa2a5980a37bcbull, 0x6afbd5f919bbf2a0ull, + 0x8563d0a79e3c8324ull, 0x9175d2317ac81fb9ull, 0xda26c5456f59536eull, + 0x5dae1332ee81dfa0ull, 0x93bd465b9deac83full, 0x2caa4074ab120c71ull, + 0x0cfd0e7c38112f5eull, 0x2707e03ffcf9c6b5ull, 0xb11bff2e2c5ff826ull, + 0xeea1aa667c4e2d44ull, 0x8acda5abde7f6bdeull, 0xb145070d1b6cf75dull, + 0x5ac1d704f54a122cull, 0x5f7f4fc051f93278ull, 0x040d95cdfee1a049ull, + 0x94bbfa2f6164e223ull, 0xe77402e746026d7cull, 0xef512ccca98e511dull, + 0x41e6875db3484226ull, 0xbf74171a30f58379ull, 0x1784efc47cddaaddull, + 0x46edeb01e2350800ull, 0x8dadd1eb9a791d2full, 0xd90f510e3ddc878cull, + 0xeabb4254e9de04acull, 0xf7b96136a85564c6ull, 0x449dfada17c411eaull, + 0x972329b3e5cd9748ull, 0x29a39cca3c666ddfull, 0x7b9c4f318e318a38ull, + 0xdd5cdec129fefa97ull, 0x262ffb42bb0ca321ull, 0x9acbd817d8a758c6ull, + 0x754dfaa7ae293481ull, 0x7992ecc70ec86fc5ull, 0x60c9c473de1ccb45ull}, + DynamicArray{ + 0x2b96ef8acbb6fbbdull, 0x8efe946bee2f2e07ull, 0xdb5be781b78c5df6ull, + 0x53811cb6aa054c90ull, 0x3fbd721bcccd1f2aull, 0x22adf7cebe4bf6f0ull, + 0xe9598b36e45be038ull, 0x489e1b4dddcb67deull, 0x49de2b7ab77d7e0eull, + 0xaef1d2614d0ea994ull, 0x8c9a21534b750a3aull, 0x2fe52034d79c49d3ull, + 0xa3c02bfe5c591aabull, 0xb8a2a2924f752363ull, 0x3308c25e1b364de8ull, + 0x14919b2dda30fc32ull, 0x08434041f607be02ull, 0xba019bc9369ea30cull, + 0xd1e4b488371ef09full, 0xc56b96017e9f17c3ull, 0x1d63124c70173becull, + 0x65ef9aabfa32dfb8ull, 0x7575b6e78b05fe60ull, 0x5d6985f372fd9674ull, + 0xdb11dd1416541ebeull, 0xbc50135d8408cccbull, 0x7d8ce36977963165ull, + 0x5f44df04f8b4e87bull, 0x3c9f0fd18cb59f77ull, 0x3282bd4635a11b4eull, + 0x4995f63ec0857f0dull, 0x9273cf8bcb883406ull, 0x38b57ef702eff74aull, + 0x36d9f1f78ea282e6ull, 0xacda3f27993f7bb9ull, 0xb048d50401d08aa5ull, + 0x144a8bc6b4851ad4ull, 0xc6432c5f8a8b156aull, 0xd9afc58dfbb3b129ull, + 0x308ae069dac77ea6ull, 0xbd7f68f3168f7366ull, 0x561d5e8fe9dc754bull, + 0xca4f3cf3f149a8deull, 0xc0be2c021fa7dd94ull, 0x096d727f9dbf814dull, + 0x904f4ff0264b7c79ull, 0x34843b7c91c094c6ull, 0xbdd811d430438858ull, + 0x6b3b7088f97af1e2ull, 0x882c1ebe83457f9dull, 0xe0cc27a6c5b54a22ull, + 0x81c697d00f432ff3ull, 0x2df37b3c9dc51b74ull, 0x18214d7e6f853b20ull, + 0x27ace046552d766eull, 0x73657dcfd31c70dcull, 0x4a0d5335f0c640aaull, + 0x4cf7e547a41be8eaull, 0x59d7a23c8437357cull, 0xb5c01e90de70d836ull, + 0xb9ed20b15d941a47ull, 0x11c10c6cac3c4520ull, 0x24b914e720d805b8ull, + 0x3562ad55f543656cull, 0x6c80f1344d02a7a6ull, 0x6dcc465625363ad4ull, + 0x9f6584e48885c982ull, 0xe68993d9cd82c369ull, 0x9862a520811b5ef1ull, + 0x9b159f53280fcb91ull, 0x9af87eaf4f7e0245ull, 0x4b9ec0156ea2c31cull, + 0xf3d166171fcfeba0ull, 0x0fcd82dba4be9f5bull, 0x8427dae79961f749ull, + 0x4625b94fedc862c8ull, 0xa712e7a5264fea17ull, 0x3b05fcde52e365e5ull, + 0x774d7f1e957098adull, 0xa91cdd2fdca2a6d9ull, 0x3dda281759ba3800ull, + 0xd7eb225b7758f406ull, 0x2cdf5d103fd8548bull, 0x03a29f49754e77a9ull, + 0x23070a82061bf488ull, 0x032543563e7a337aull, 0x16ee76ad8ac0d8bcull, + 0xc43fa91c1c32918eull, 0x83e8997fe2c4ee4eull, 0x5c14b717329fabb0ull, + 0x4875cb1400e285c5ull, 0x8e4caf0cc74398edull, 0x7efa1f6567b5d7fdull, + 0x6a81ab2638a7b7bdull, 0xe533ec8483af1ba0ull, 0xd7cd39122ba810aeull, + 0xb73c8cc96b6d7dc0ull, 0x817c9ab9c71c4f36ull, 0x03434532c6c17712ull, + 0xdc7eeb7825ff8e39ull, 0xa1d52aa4392121a6ull, 0x61537f11a7f2c6cfull, + 0xb398af2f1b30819aull, 0x2e606ad7a840d0b5ull, 0x51ae7c326ad899eaull, + 0x0befd64e6c8366f8ull, 0x057b651addafe65bull, 0x19a58dd45f3f9f24ull, + 0xe11222ee50c1299full, 0x7939d62670bbc68aull, 0xe5da02600036d226ull, + 0xbcbabeded65bde3cull, 0xa3a7040e5806d4e1ull, 0x7eae654122f486ddull, + 0x210893db7a2553f3ull, 0xdc643ce78fb64595ull, 0xc228f9461930ecc1ull, + 0x0f9a39d699b0a892ull, 0xd8c8fcac57cbbb04ull, 0xd6c7c6bf52cf4717ull, + 0xd77f5419c64591e3ull, 0x3ebfb61ef4c4d014ull, 0x806e14a2f6748371ull, + 0x221ecd7f398cbd86ull, 0x3615261951f0e19bull, 0xe90e6121fc719148ull, + 0xd906e6f38e535fceull, 0xb20a9a3950345bd7ull, 0xebdea51ea2f2b152ull, + 0x0a5361b47d39e595ull, 0xe1a96c960b4bb249ull, 0xa36f52d7f71d0adaull, + 0xad46206a1de7d7c8ull, 0xf26f47107536b03eull, 0x971b4ebd04b59bf5ull, + 0x0f41dc2051c56104ull, 0xb9aef24a896877d4ull, 0xd40de7d8054b77c2ull, + 0xcbcc13a6f634632dull, 0x727f2345bb44ea0eull, 0x99f178c68848b46cull, + 0x6f3d09807578cc2bull, 0xc2b4cd5649843ebaull, 0x3a46908980a6109eull, + 0x39617dceaeaac0a5ull, 0x47739d07b9ee819dull, 0x3dd124ff6d078a1aull, + 0x3b74d2f6d7e7fef9ull, 0x10956392041f3bdcull, 0xda3157a6969e7588ull, + 0x0a6ec61f9551ad6full, 0x8d5120498329b95cull, 0xc6ec690eda8732bbull, + 0xbdc7d545fbd9f8deull, 0xa6982f4beba192deull, 0x1ed97f5955900b7cull, + 0xeac899f0890409c0ull, 0xed6c325f27d08dedull, 0x75aedd4dd4be3fbcull, + 0x308c1b200b62877cull, 0x2d0bc4afb458bc59ull, 0x4ba35855466a82c2ull, + 0xf582e74e5fdd1b9eull, 0xd0328f28cee7d354ull, 0xbd1c7cf93867daf8ull, + 0xefc0b0762275a688ull, 0x3507da99dae317b4ull, 0x58d67902a41b459dull, + 0x40c03cae5025f2baull, 0x69c792749aaed82full, 0x0b36d48c36bfd498ull, + 0xfea2b6a9f5d31814ull, 0xc95486dcbccfabe2ull, 0x427498eba74bed54ull, + 0xbc3f0f28dc34b3ebull, 0xe27f5e36113b0cf8ull, 0xf00e7f9e1081a799ull, + 0xb7b53c3bfb3aca03ull, 0x351045959ca9a012ull, 0xc9e2df176fe62bd9ull, + 0xeb3305a3213a35c0ull, 0x05212e86b71b6b9dull, 0x65f0a782673895beull, + 0x745374b74bcd8aaeull, 0xba2ec0981bf2c74aull, 0x4852761c031bd4cfull, + 0x9bd1f4a4b914cd7full, 0x2d10e23540dbecf1ull, 0xc7eec4527ded1f3full, + 0x66fa9de815bfd333ull, 0xf6f227d98d516d02ull, 0x5cde2d4a48d60fceull, + 0xc70e84c31c3a363full, 0xc8d1f339906cb237ull, 0x550b4bdcd7a2ac63ull, + 0xc069e835f3cb3a99ull, 0xe3430f657275997cull, 0x4811aec378154dc6ull, + 0x1d11e08878319fc1ull, 0xfc5a16cd4890209bull, 0xbcd063c33b791440ull, + 0xa6b0ab8659356d1bull, 0xddf99c9f6ba76978ull, 0x49258a59f642a746ull, + 0x65a4963e116f490aull, 0x1e979932ef99a7e2ull, 0x0ab1471e0e9ecf7full, + 0x34abec3a1515b340ull, 0xb52df3ade1b2f7d5ull, 0x1889449704d4c271ull, + 0x2ce9c0c827094317ull, 0x147ca8923d0a56c3ull, 0x280579ad5e424fb2ull, + 0x8600c6d2dd10232dull, 0x664ccdd2a3e17dd1ull, 0x35e1b387b066758full, + 0x94d51172a6171871ull, 0x02446aaaf6821c51ull, 0x5d135ad9b9574f45ull, + 0x803e574d7f9dd55dull, 0xf850c90ad12690d7ull, 0xbf6607043b752d04ull, + 0x0b2c316b154e1f12ull, 0xbde55a718ecd4e44ull, 0xb75c1faa210aab8aull, + 0x52d2ef6f9a775f54ull, 0xe696568643406f15ull, 0xb39f616d324eef72ull, + 0x9b07adbaa2a3c951ull, 0x78ac4bc9bb5fc7efull, 0xad0c116cd4a9d215ull, + 0xbc50f50892df22bdull, 0x6f6cde2e01ee9358ull, 0x8a435f934a2b5648ull, + 0x162697f9b8c0af4dull, 0x5202f6e76e2b7241ull, 0xeddc309fa8e16865ull, + 0x736a30f9d58a62deull, 0x972f876118a2094cull, 0x650b80cb01f3bc99ull, + 0x7da2ccc6e2b6faf9ull, 0x69736da657d68a52ull, 0xec8bcd6a6ac7987cull, + 0x17f549138852dbf3ull, 0xa37524dbb7f38c06ull, 0x98a9f178b074b14dull, + 0x0e2b49088e999923ull, 0x039e12929899d6adull, 0xde27dedad242b772ull, + 0xfc8d199db98b3240ull, 0xffc45c23276afb73ull, 0xa328b2d6a99e0af6ull, + 0x71bc5982f4c77cb3ull, 0xf50c727bd910a15bull, 0xcf75545486d21b80ull, + 0x5e7abe200768c852ull, 0x6393fe2a8b853982ull, 0x9b6285217bf1b62bull, + 0x5ad5ae4d71ba6763ull, 0x2a713e096cd276b5ull, 0x68bdf7da1ca410e8ull, + 0xc2799415b68ccaa7ull, 0xcee893856f960a6bull, 0x3f854cb5b0de77f5ull, + 0x65c95900b52aaf69ull, 0x5adc47a8f34c839aull, 0xe0f39e134b61b098ull, + 0x1f876cd84cd0e942ull, 0x68f699727f6755bfull, 0x6c6c055f3ba81a90ull, + 0x11706d7f478d620bull, 0x1aa26b501958d2e1ull, 0xbf5b39e8a1728ea3ull, + 0x2db1538dd363fd7aull, 0x537475c32e8987b7ull, 0x02cf7314f997065cull, + 0xfa2b82d92fb8bc96ull, 0x21b9f86cb5e6c63full, 0x9ae619c89229574cull, + 0x069b96914a65f481ull, 0x15670b05175a85a8ull, 0x58b76a3aad403e2eull, + 0x74bbc41488390138ull, 0xa668e6d01f1a0ec3ull, 0x739ca03d8b4b5a78ull, + 0xa169ffacdbbfc1caull, 0xfc9688896062d605ull, 0x03038917f5564b4dull, + 0xc7e5e3b77afa913full, 0x030859405656102aull, 0xb3de1e9af1847827ull, + 0x9f8d85d5a75a862eull, 0xd4616fe81fcdb709ull, 0x8daecf12f31003f5ull, + 0xdc1dcd43b7766a4cull, 0x532b134cb37b45c5ull, 0x6ddad5aea4b3d68cull, + 0xb1825aa36a96f4acull, 0x65787940fb843833ull, 0xa635da593d1bf5f4ull, + 0xdb23a980f1956d96ull, 0x431666e999deb849ull, 0x46a0e5e31197e298ull, + 0xaf646818df6b19a9ull, 0xe97bf24fea95f25dull, 0x9930682b5223bbb9ull, + 0xd40a3ab60d1553acull, 0xaa943d8d66f1cb28ull, 0xf3e092a1596f1994ull, + 0x22db03b836cf1a69ull, 0x638a9055fc2e741eull, 0x131a0838c7847d2eull}, + DynamicArray{ + 0x98603a12fdaff38full, 0xa9a2b191a54b9f21ull, 0x555a654eaf073b98ull, + 0xba1e2dbe2259b321ull, 0x73b304c5c29cd3faull, 0x618c3c3f993256d7ull, + 0x8be70ab09d3ddd81ull, 0xfe145905ed30a3a4ull, 0xd1cad591d4571febull, + 0x44ac5f45ab872251ull, 0x7099a9ec2f0c4d78ull, 0x730b46ea203d1fe9ull, + 0xbbd61eb0f568a5e8ull, 0xcbee0e9e9d5d7ed7ull, 0xab1297129dc79b79ull, + 0x4637933b48514677ull, 0x489b489f098053a4ull, 0x0c4e31fdc06e5d8bull, + 0x11dcc34cf53b6063ull, 0x2633fa13970a6d37ull, 0x7cc952f13a4be7bfull, + 0xf673f840860254e2ull, 0x02f492aae9e4278full, 0x1123fe477c1a289dull, + 0x0b52e2bd6fc58b82ull, 0x2185f93e65660dc8ull, 0x5a454be6c9e10e33ull, + 0xdb7a4c012359a6d9ull, 0x6d430d183ba80056ull, 0x94b4dc87743bb11cull, + 0xe8d53b354ff69c2cull, 0xfb22b489fc609dc9ull, 0xab6d5f222bbdc6c1ull, + 0x4b4cd71db9771288ull, 0xb34ab7f1595f673eull, 0xc7cf8072568527eeull, + 0x916a49d2580d0057ull, 0xc538655670eb7710ull, 0x6d811d2c6b5a774full, + 0x556c0c3b939e8991ull, 0x6cd8dd02a92b304cull, 0xf56d607d0b09b96bull, + 0x466abc0fe837906aull, 0xdff4a113a701f326ull, 0x4a214245f9849f47ull, + 0xbd1020ac7ed8a2fdull, 0x90c8491c8a9ef812ull, 0x0713e995aff175f7ull, + 0x2c537a1a1027ab57ull, 0x9cbc1ed2e2ab19a9ull, 0x74c62fe8f0e8bb39ull, + 0x1a62f8d6de3c0809ull, 0x0d7fb22e15859e30ull, 0x25d819f6d6705945ull, + 0x9625825ac7ddf1fcull, 0x376d0928b73eb876ull, 0x1d841a03a6e215f4ull, + 0xff1160d9f57389c6ull, 0x1ded8069773bfe91ull, 0x1b2fedad1141a0ceull, + 0x4e1c54c143aad902ull, 0xce94d0585c2303f1ull, 0xbe30d7e44ad1e2b2ull, + 0xe9d3aa75a2b22f9aull, 0x5ce1a4e4fdd08529ull, 0xfb0666603982cc4bull, + 0xdc821fed6e906db6ull, 0xd18dad1666d57888ull, 0x8a5c5d19487bea86ull, + 0xd394994f236899b1ull, 0x0384852d43c1dca4ull, 0x1e93c801121d2266ull, + 0x1d85cbb33abda5f0ull, 0x9275fdcf8cff3bdaull, 0x3a1bde9abd58f270ull, + 0xe34c4067baf445f6ull, 0xdcbe475e690c48adull, 0x6ca1eab72857d42bull, + 0x81368f60f46768b4ull, 0x8d10ebaed27181fcull, 0x4977f113daa549a0ull, + 0xa0e78eb22f3284faull, 0x05289062575fba16ull, 0xdefcb033d283ddf1ull, + 0xf8336a834e36475eull, 0xbe19403841c7b44eull, 0xb4b4585c14e379b3ull, + 0x1a1b4547c2d2c27bull, 0x1fb6109fcafb6839ull, 0xd5e17b244e590ee2ull, + 0x9cf264637e3a77a7ull, 0xf3c95436ab0ecb94ull, 0xb748ffdacacd9ecdull, + 0x37bdb92f1a87ee4eull, 0xd9278fcc06672464ull, 0xe2c07e5e3403dee6ull, + 0x3c8aa5bbc45a2c72ull, 0x1abac9c2c1609227ull, 0x1f2d3cb21d19203bull, + 0xf811c970e60dbaabull, 0x6eb26af91c6494f8ull, 0x344d864f9dfcf534ull, + 0x3dd03ff0f90cb82aull, 0x386b8603ca8b9765ull, 0x92e7cd97f4c8302eull, + 0xdf57c9f4610bbb48ull, 0x9564ffd86b765854ull, 0x8d9959352e936aafull, + 0x839bde2a607f218full, 0xd0ef317fd3954a08ull, 0x01fe4e976b3eea12ull, + 0x77392e2b1ad9c813ull, 0x6ed4728647ef93ceull, 0x7e8f7ea1d832b460ull, + 0x7c616a0d31f6228dull, 0x53a14a90e0e1e611ull, 0xf8a4c6a339127b0eull, + 0xe0bfc8a5a52536c4ull, 0xf2c95b19171d412cull, 0xa2197ee3ebbcedf0ull, + 0xe77a6d84954b0eefull, 0x0eab0858a75b47b8ull, 0xf6a3a0e3d3d5167aull, + 0xeec1f74c9b64efa1ull, 0xc4a023cc91a2d20full, 0x5680d0a0fcb47c9dull, + 0x9577dd90a56cd31bull, 0x6510f798f32d473eull, 0xef1bf29f902246deull, + 0x34506871abaed100ull, 0xb347b7b952ef79beull, 0xab35615b27455c27ull, + 0xc32615099894c187ull, 0xd8ddf06ba7e191a2ull, 0x433b5611bdde3709ull, + 0x683ffacedfcae4fdull, 0x06cfe8eecb943b03ull, 0x589c97e830e80bd6ull, + 0xd38ff8b32059ac3aull, 0xaeca511dbcb3143eull, 0x26e5a751ee3d8a03ull, + 0x39db170d5156756bull, 0xf0b93f0f12292c1full, 0x28afa348a5e03a2eull, + 0x58eb7b1abdf764aaull, 0x2f9843b803364259ull, 0x5d8c0a93324ee59cull, + 0x9e3c1449f7a3a574ull, 0xe72a3454f75eb195ull, 0x1e5deb688d64ea16ull, + 0x3bb7d371235a5414ull, 0xad0546915728d650ull, 0x76b954d5adf6e5c2ull, + 0x02796c74b0cc4397ull, 0x4cf9697355c09923ull, 0x319f2b2496c93d6bull, + 0x1e0ab04a50763bdeull, 0x3e37411199846a34ull, 0x5dc0e6dfe29b8149ull, + 0x4a36c3980838421eull, 0xcf51154e75b866b8ull, 0x573961579d3864f0ull, + 0xc9adfeaafce35ce8ull, 0xd087aeb4ce373d3dull, 0xeee29325d690090dull, + 0xe7e7993867c02772ull, 0x70d21337e2aee98eull, 0x7acfefe2cb118afeull, + 0x1d4751dc15fe0d17ull, 0xfdbaee5c2540a4f8ull, 0xafd5b4508c50a79bull, + 0x3b616589df0f50f1ull, 0xee4b1f67c75c20aeull, 0xd154a3145f90123dull, + 0x885fdda3f8c4e4cdull, 0x405c2989ea6383c6ull, 0xcff42c08b32e8507ull, + 0x69ba15dd2e385a25ull, 0x6ba5b1581992abebull, 0x5151fe4a59756466ull, + 0xd0bf443490eb14ceull, 0x7b5d207154572754ull, 0x2d4796df461509e3ull, + 0x53dd44ab5ba05744ull, 0x68ce01514ba6a926ull, 0x6acff6aacb52a135ull, + 0xf88a669099312aaaull, 0x3e1e9ec55b9b493eull, 0x381260136253d220ull, + 0x99eef930904c7d29ull, 0x2a290a3982ddba8aull, 0x1bf55c0a8add1969ull, + 0x82c201da1dc1b6a8ull, 0x182928593acfed71ull, 0x37b88e2bcd1cc76full, + 0xb4111a20e2aa6733ull, 0x39f6975faa41d668ull, 0x053ea1aeba7f521eull, + 0xf200e08787ef54acull, 0x83100fec77f81170ull, 0xb1276996f0d4567full, + 0xe4131cfadddf8b02ull, 0x1466bc7d6a5e7961ull, 0x44d642e43ce63464ull, + 0xcc07b45a6d1d927bull, 0x325a79349a05fa5bull, 0x336563eb82cdf373ull, + 0x8213c880fe19de8full, 0x910b503b5d5573b6ull, 0xadee6e5e728e62f6ull, + 0x75eafcd96132f8b8ull, 0x2e4887be854a81c7ull, 0xd31d062f55e248d5ull, + 0x5b940498bf35d69cull, 0x47ef7a049525dbedull, 0x4f528feb9f9fe7e2ull, + 0x1b3692172ee519dcull, 0x95d67e1fc776cce1ull, 0x06583ee5a0032ea6ull, + 0x281fa51243164f00ull, 0x08cb983c1dc3c673ull, 0x6a1740b271cd4eecull, + 0xb238d0a5e355786dull, 0x0bcbeeb237514412ull, 0x57c8ecc5bce04f13ull, + 0xc684730988e26331ull, 0xd1e5dd37ed3063f1ull, 0xbdfd46eb68c2966cull, + 0x5ca5286e1ebdf8f4ull, 0xd194271f68c2efd6ull, 0x78906b0de6924eaaull, + 0xb603e3418f1fbceaull, 0x373feaa65b8a4b4bull, 0x01c874fe456e8882ull, + 0xbc3eb120cb7c844aull, 0xf0559fd19fe60aeeull, 0x76df5b9a31df7e0dull, + 0x8bfebe043fae8aecull, 0x9202de81b5510ff0ull, 0x6cb3930500db5d47ull, + 0xee0244224a462e6aull, 0x83cb28592c747d0eull, 0x20f5c1cd75450fd8ull, + 0x7e2a06131613e3ccull, 0xac9e890b6e28e682ull, 0x20e65e6e15af1cd1ull, + 0x843b1b3810f558c5ull, 0x1aecdeb5fec3851bull, 0x1da77f06f27c625full, + 0x6f4672e522fd448cull, 0xc5f5b94c67ffe4b8ull, 0x9142173895f841e7ull, + 0xf2caee614c1e2689ull, 0x691d8ec17ce24582ull, 0x48342bf5fa0706e2ull, + 0xa0a9ec093dc4b407ull, 0x801877d173a9e9aaull, 0xf838bbf62bef8433ull, + 0x611215f96ce68c1aull, 0x5f81b35fa4f94215ull, 0xa4607f59627f617aull, + 0xaa67fb396cb6cf66ull, 0xa6585bcfe16c6098ull, 0x1506c990ea3d60ceull, + 0x162da73a93ba6505ull, 0xd0ff10699055ee37ull, 0x441bf6405f49b8e3ull, + 0x95336bdc9cf40616ull, 0x4d9ee1b2d8f2eda2ull, 0x8e69d340b80fbf98ull, + 0x349cb6c41d5bdc0bull, 0x0d496d3793d28edfull, 0x7c89788c707cb5e7ull, + 0x168bbd423431eca8ull, 0xda7a5d56b1ff8fc4ull, 0x6a8b753704b24189ull, + 0x14ad7a012ceb8b5bull, 0x8483c6a16c16ebd8ull, 0xee12f3c8712a2b2eull, + 0x02f93dd7bfc7da06ull, 0x6d4cd00ba93b13e5ull, 0x37bb19269489832cull, + 0x62fd73069cc458f9ull, 0x057b800752921d23ull, 0xe89a5856562cad29ull, + 0xde3ccee2bcc77799ull, 0x891a4db079327857ull, 0x978e6da5dbf32a48ull, + 0x2aeb3b6c701db27full, 0xffa1f5b92d86b6a6ull, 0xd5be1419326ccbefull, + 0x2470703591292089ull, 0x2c6ea0153604c96full, 0xedac4ca56303ed42ull, + 0x7cb89a296543aaeeull, 0xfb835b5dd4f5e89aull, 0x8fe63802d48e1d7dull, + 0xace5eea23041f3feull, 0x83e8ee60295d22b9ull, 0xe180afbefdfb9df6ull, + 0xf8c996eb09c77c98ull, 0x5061beba6159a51bull, 0xa77305151f01a0b4ull, + 0x254b6bfe320c4de5ull, 0x7da0ca97f6dd1afdull, 0xc5057b03703e4c05ull, + 0x3abdf1eeb6c2b793ull, 0xd61bac07f01b7a2aull, 0xb9ca12d9030d5b15ull, + 0x1384ec1a9894c414ull, 0xd29959e38841494full, 0x37b72874c8250cb5ull}, + DynamicArray{ + 0xd8b1602737368029ull, 0xb433db50aa554d4aull, 0xe2805759f0fe33b0ull, + 0x2f304ee2196717e1ull, 0x4af323c55b5bad85ull, 0xbf0086a20f3669e0ull, + 0xd2809f1c6a2abd86ull, 0x2879d6610b42cc34ull, 0x5af09223cc8dbabeull, + 0x3881f54414c69b39ull, 0x61c7362491c55823ull, 0xef7bb86a6da9403dull, + 0x18e96f9ba3ab82a3ull, 0x577b8b71fa2f4b59ull, 0x160ce69d073305c6ull, + 0xa247d25351861f8full, 0x3a155da5e35a0546ull, 0x3c535db43f5f09dfull, + 0xd3f2022c9afc5524ull, 0x6c55a8e25c0a836cull, 0x7a0fd0cfd194e9f9ull, + 0x89573824642ab0f4ull, 0x5b7442d523438d40ull, 0xcd421a1104d9f81eull, + 0xefe1d4dd80b756a3ull, 0x2810d2bce60147a9ull, 0x8b8ca90a4d0711afull, + 0x8c82336cda2c9df0ull, 0x6e60068ecc361555ull, 0xbb79a0bcce897a20ull, + 0x8afbe5ed11d70ba1ull, 0x8de0e44ad98b4bd0ull, 0x4b0287a18408a079ull, + 0x55770b9674a60b1eull, 0x475fbdfc8e655f81ull, 0xcc0438f4c46d0f39ull, + 0xb3d1a49c81a3ab71ull, 0x1952bbe8339c8918ull, 0x098c29cde482d177ull, + 0x618414bb67f77833ull, 0x8fbf68ee9b4a798eull, 0x8851c14a64565abcull, + 0x5e3dea765214f263ull, 0xb268c10dd36ab0c3ull, 0xa42bbd1f63fb41a0ull, + 0xc8e67d45ba2bfd22ull, 0x864a4aa007e880abull, 0x4f730db6bce6beffull, + 0x2507dcb19fd3fb6dull, 0xfc98bf6967c3432aull, 0x8a037f716d475c11ull, + 0x6504d66c4f3e2355ull, 0xcb9fb4607960db8cull, 0xabe5d51ff74b6429ull, + 0x6909f05831314104ull, 0xb11246549ef6f816ull, 0x97d560926ab85730ull, + 0xd078c8c00225bfc6ull, 0xbe73ffe75b4f38cfull, 0x9414640536bffaceull, + 0xbd09251952086218ull, 0x86452b87330d2e11ull, 0xfa8548401dca6944ull, + 0x2339704c06101a22ull, 0x7de2064668033c3aull, 0x9655850b8c2fcb9cull, + 0x8f587b7533321c5bull, 0x75adf1e8828d4ff4ull, 0x5104059c856787c2ull, + 0x80d112f1441b7678ull, 0xc668992e8bdb9bc7ull, 0xed55700cfeac06c7ull, + 0xec9bb1b01f5779dbull, 0xce1107aa1fd2bf89ull, 0x3e7400baf2d9e7e0ull, + 0x40c6f2e6d3096104ull, 0xd9ce08e236509944ull, 0xf0eac1d45d324721ull, + 0x50d60b63176014aaull, 0x791a4b8d479f3040ull, 0xd88104013195d041ull, + 0x0e136176db3281b3ull, 0xa79259ad8a0a0041ull, 0x0bc83cb861010b2full, + 0xf147c2f8e0a1949cull, 0x659b238ecef5246eull, 0x3523264fed3a5eb8ull, + 0x788dcdbc8df240adull, 0xd3effaabbbc51c34ull, 0x134cbe56c94ee93cull, + 0xe75f6d171d5dd2ccull, 0xc87a2fa34058873dull, 0xd73ef1b5d789737cull, + 0x5c30971067650874ull, 0x1ed00fafb4f205a9ull, 0x5b98e43a9de27374ull, + 0x9d2732e563809851ull, 0x45800656cf731938ull, 0x72550fbcd23bdc4cull, + 0x8e1b8c75812842fdull, 0xa493a3321bd9d533ull, 0xb0dedba8b8d6c9e2ull, + 0x55caf645e01148c4ull, 0x28c3048ef76d2d86ull, 0xabf6a163e2b24b23ull, + 0xe9e7597acaece9bdull, 0x734edc9f4ede42c6ull, 0x10e0ccd05f887283ull, + 0x81466664d4971abeull, 0xe50b14f0f3c3d139ull, 0x4b6193ae4844ee11ull, + 0xf5a141c1bae3c6aaull, 0x14eff0f3261e5f3aull, 0xa46c8170d58c330aull, + 0xe02baa28e7552e33ull, 0xdfb7451ba03670e2ull, 0xe5ab61f2975833d4ull, + 0x27a35e4697e1caf6ull, 0x5e692dbebbf71801ull, 0xedbdac89f677d4cbull, + 0x3088698c507c54ffull, 0x1d18da7a937d17dfull, 0x65fa934fb3be106full, + 0xf895a0e0f97137feull, 0x637a60c5be44c136ull, 0x7431543bdce25cadull, + 0x3621793cac4e075cull, 0x046b217c0103fb96ull, 0xce8017c5a1584ae4ull, + 0x0f7335422ef662b2ull, 0x2dffc0c6c1f2acceull, 0xd24ed125bb402d7cull, + 0x29acd29e22656ccfull, 0x6ac7992662c196d7ull, 0x836db38956c2b2a0ull, + 0xb2f0e880a006c624ull, 0xe20c9c415d293df7ull, 0xaf7f80a6da25f13bull, + 0xd13e2f0f264bebacull, 0x3ce217c0115e7453ull, 0x408ab7bd25bd68b5ull, + 0x775f2b7ee6065993ull, 0xdfa6e69e44d50f9eull, 0x66b0d3d8d4e5e7e8ull, + 0xcb2dce226fdd87cbull, 0x79abb600e271af3cull, 0x8ca4ab3a7d746205ull, + 0xa1a1e581db19cf01ull, 0xbdaa833925bfeeb3ull, 0x10fd91ed30e78d96ull, + 0x1912edc4850a023cull, 0x6fea20daa3f729dbull, 0xb82424fc9bbc17c0ull, + 0x0ba2870ee4456da6ull, 0x80296a1d2954e95full, 0x1d4bb4cd324a2836ull, + 0x57b14a9b9d6d2f9aull, 0xdeb9a9d067be1141ull, 0x684a060c4c5f3469ull, + 0x5b29d33022a7fe3cull, 0xde09051df6bffa21ull, 0x9ec5ea59df01f11aull, + 0x15278b00c9fbecbcull, 0x27b8355d1f1aead2ull, 0xf6d9ebb6c90c5633ull, + 0x2b37fb227eba544bull, 0x9a5155bd2254a8f0ull, 0xe2f3ff2afed53ce1ull, + 0xf3d209188f7ef0ecull, 0x7edc7b099b954124ull, 0x663f6ffbd63e52bcull, + 0x11da2c320bb3c5caull, 0x5c8b041283d27883ull, 0xa299593d8146c9c9ull, + 0x002fe890ff84fbbdull, 0xf787135cb15cf69aull, 0x3773cb12f87241c2ull, + 0x5140e869fda8a08dull, 0xee7c518bff618958ull, 0xc686840084607983ull, + 0xba435b90ff4c9c99ull, 0xb08f318f54042f0aull, 0xf6e0a2ea0d48e35bull, + 0x1fcae3eba51f6ed8ull, 0x51be23e54c1ae48eull, 0x4445ae25845a230aull, + 0xe03fee821fcaede6ull, 0xf05b52ee47ddd901ull, 0x214ccf4209ed1d76ull, + 0x74228b9421f03b29ull, 0x91264c024adbde7cull, 0x452e6ac498a865f6ull, + 0x51cd682ee3c6271cull, 0x0d9f14479fd33806ull, 0x9ef496fdcf5ef5aaull, + 0x7f1082999b35461dull, 0x6f6f04a189a53d36ull, 0xfdb1e521d15385b5ull, + 0x67269712462ca406ull, 0x2667bc90e199adcaull, 0xa737431f865adf2dull, + 0x8eeba857ad00985aull, 0x63b4de095a85e5c4ull, 0xa4f431d688be9030ull, + 0x3b222f9973f52197ull, 0xaea0da9dff0c1a0aull, 0xcce12e47229f009eull, + 0x743f847c73cbccd2ull, 0x341dbbb8e4a6fc46ull, 0x251ddd3539b804a9ull, + 0x52cb195404b40ebcull, 0xdfd280ec3bec5a07ull, 0x157ee8ed7757d7bbull, + 0x232de2eace30d98dull, 0xe8ef3a6203ed4385ull, 0xbb4087758bc22bb3ull, + 0xc4abc6c966cb3d77ull, 0xd3c89d89e1fc7f3eull, 0xa8dac61b369884bbull, + 0xb837febabb81fe21ull, 0xb1d37973152da472ull, 0xffb516dbda3657f5ull, + 0x9ad5c1d20d77690dull, 0x614dcb228aa9d7c9ull, 0x1fe5bee7c98d7b0aull, + 0xa69342971c9b50c5ull, 0x23e85da68cc80daaull, 0xa5c38d2a70d52710ull, + 0x55d62a309b1bd971ull, 0xc3b256caa035837cull, 0x9ca98695273196a8ull, + 0x7731e03a44aba258ull, 0x36c3ba62e246e82cull, 0x0cbf62279a446e37ull, + 0xad2577240bc36509ull, 0xe07b27c2cce3d03dull, 0xc6d5b7a7fe232f1dull, + 0xa74850265cf07909ull, 0x21be5017b6dbed6full, 0xb6786b589bc30e81ull, + 0x4e112a441b8d613eull, 0x068db645b083f4eaull, 0xead31660c4fabbdfull, + 0xff5230fdce36b8c2ull, 0xc65b6e318826de9eull, 0x809ab210aff52a1aull, + 0xa4709542839180a1ull, 0xe2aaefd45f034f5eull, 0x94621c32d23347a5ull, + 0x8c90b771bfd557ccull, 0xe4773c8cfeecc1b5ull, 0x14fb8089fdd2ef35ull, + 0x592be0ca26267c17ull, 0x326ba71ac6cb7bc9ull, 0x28b15c621476d605ull, + 0xf376fed407978051ull, 0x9dd27905ffde006full, 0x971aec8a5ab9e187ull, + 0x8eb4ad520742aad4ull, 0xa8c869d2bacaac59ull, 0xd86d55ec148a8db1ull, + 0x57fd2e6ffe272cffull, 0x176862ae02674e1cull, 0x8ffb7753a685fecaull, + 0x8eebdfe68f909f36ull, 0xfff303c7169aa166ull, 0xbe01252d413b5a94ull, + 0x3fb3f6f33eb25132ull, 0xff48e4ed6798fb9bull, 0x9fb6a26308aacd25ull, + 0x6e0588a9ddc508beull, 0xef0b24edec12d386ull, 0x8ed2eb8036dbf126ull, + 0x4d4df8452fb7fd25ull, 0xe27f36020c70a3a7ull, 0x361a15a2d495be1eull, + 0x7cc46191b591d752ull, 0x38e662490469f749ull, 0xbf0590b952e2f714ull, + 0xe6cf8f3109c2feebull, 0xcedf8e8ceaafff6aull, 0xc7d735b63e277f33ull, + 0x3d5d61142f6f08eeull, 0xf36815b8ed927c16ull, 0x81a1397d31600f4dull, + 0x70a0f64343501a83ull, 0x3bbb78014bff20edull, 0xa3e40e10919c31e3ull, + 0xd1c61b3dcfd72a7full, 0x3f77c8d241a7324bull, 0x389c3f585fd28f71ull, + 0x1e990e7be85c1e21ull, 0x6b6a648ce5e11bb2ull, 0x879b04cee57e1ed1ull, + 0xfae0abc9eac69bfdull, 0xfbbf68c17581588eull, 0x71872f1482b850eaull, + 0xc82c4c1ad5641457ull, 0x99cd6da97c49c0a2ull, 0x8c172c11e8bf902bull, + 0x8634da264bbf3dbaull, 0x915f2fb0a86aa7e4ull, 0x3774de2295f1fe82ull, + 0x3a11d8dea09ec74dull, 0x4ae44702739c0943ull, 0x1ab55f0ed7f10c19ull, + 0x5f01f065061d5791ull, 0x234cf728772dc8eeull, 0xf85d2425d12959faull, + 0x26142bc3622b7739ull, 0x18115fde65470da9ull, 0xfcb25e1841bf3b79ull}, +}; + } // namespace -} // namespace openrng::skipahead::data \ No newline at end of file +} // namespace openrng::skipahead::data diff --git a/src/utils/ring_buffer.hpp b/src/utils/ring_buffer.hpp index 57732f6..f89f3a6 100644 --- a/src/utils/ring_buffer.hpp +++ b/src/utils/ring_buffer.hpp @@ -23,6 +23,13 @@ template class ring_buffer { size_t position = {0}; public: + ring_buffer() = default; + + /** + * Initialise the buffer with the elements of a std::array. + */ + ring_buffer(const std::array arr) { buffer = arr; } + /** * Access the element located `i` elements prior to the buffer end. */ @@ -44,6 +51,11 @@ public: */ T *data() { return buffer.data(); } + /** + * Return the position of the first element in the underlying data. + */ + size_t get_position() { return position; } + /** * Insert an element at the end of the buffer. */ diff --git a/src/utils/uint128.hpp b/src/utils/uint128.hpp index c2ad0d5..4d8f5b8 100644 --- a/src/utils/uint128.hpp +++ b/src/utils/uint128.hpp @@ -14,21 +14,35 @@ namespace openrng { class uint128_t { public: union data { + uint8_t u8[16]; uint32_t u32[4]; + uint64_t u64[2]; __uint128_t u128; } data; constexpr uint128_t(){}; + constexpr uint128_t(const std::array data_in) { + for (int i = 0; i < 16; ++i) + this->data.u8[i] = data_in[i]; + }; constexpr uint128_t(const std::array data_in) : data{ .u32 = {data_in[0], data_in[1], data_in[2], data_in[3]} } {}; + constexpr uint128_t(const std::array data_in) + : data{ + .u64 = {data_in[0], data_in[1]} + } {}; constexpr uint128_t(const __uint128_t data_in) : data{.u128 = data_in} {}; uint128_t operator&(uint128_t rhs) const { return data.u128 & rhs.data.u128; } uint128_t operator^(uint128_t rhs) const { return data.u128 ^ rhs.data.u128; } + uint128_t operator+(uint128_t rhs) const { return data.u128 + rhs.data.u128; } uint128_t operator>>(int n) const { return data.u128 >> n; } uint128_t operator<<(int n) const { return data.u128 << n; } + uint128_t &operator+=(const uint128_t &other) { + return *this = *this + other; + } /** * Interpret the 128-bit integer as a group of 32-bit uints diff --git a/src/vsl.cmake b/src/vsl.cmake index 1270997..449be80 100644 --- a/src/vsl.cmake +++ b/src/vsl.cmake @@ -30,7 +30,7 @@ endif() # SOVERSION: If the ABI has changed since the previous release, this number # needs to be bumped. # -set_target_properties(openrng PROPERTIES VERSION 24.04 SOVERSION 1) +set_target_properties(openrng PROPERTIES VERSION 25.04 SOVERSION 2) # CMAKE_SYSTEM_PROCESSOR is the target processor, if not set, it will default to # the host platform. If you want to change CMAKE_SYSTEM_PROCESSOR, you will also @@ -86,12 +86,17 @@ if(${BUILD_SHARED_LIBS}) target_link_options(openrng PRIVATE "-nodefaultlibs") endif() +# Copy openrng.h.json file to location. +set(interface_json openrng.h.json) +configure_file(${OPENRNG_ROOT}/tools/create_api/openrng.h.json ${CMAKE_CURRENT_BINARY_DIR}/openrng.h.json ) + + # Create a C source file that makes a call to every routine in the interface. set(link_src_file linking_with_c.c) add_custom_command( OUTPUT ${link_src_file} COMMAND ${OPENRNG_ROOT}/tools/create_api/create_link_test.py ${link_src_file} - DEPENDS ${OPENRNG_ROOT}/tools/create_api/create_link_test.py) + DEPENDS ${OPENRNG_ROOT}/tools/create_api/create_link_test.py ${CMAKE_CURRENT_BINARY_DIR}/${interface_json}) # Test linking a C executable by disabling implicit c++ libraries and forcing the linker language. add_executable(test_linking_with_c_compiler ${link_src_file}) diff --git a/src/vsl/aarch64/cpu_features.cpp b/src/vsl/aarch64/cpu_features.cpp index fbf31cf..c36ebfe 100644 --- a/src/vsl/aarch64/cpu_features.cpp +++ b/src/vsl/aarch64/cpu_features.cpp @@ -30,6 +30,8 @@ static inline CPUFeatures getMaxAllowedISA() { return CPUFeatures::neon; if (strcmp(maxISAEnvVar, "sha3") == 0) return CPUFeatures::sha3; + if (strcmp(maxISAEnvVar, "aes") == 0) + return CPUFeatures::aes; } assert(maxISAEnvVar == NULL || strcmp(maxISAEnvVar, "sve") == 0); /* Either the environment variable was not set or it was set to SVE. Either @@ -54,6 +56,8 @@ const bool SupportedFeatures::hasNeon = is_enabled(AT_HWCAP, HWCAP_ASIMD, CPUFeatures::neon); const bool SupportedFeatures::hasSha3 = is_enabled(AT_HWCAP, HWCAP_SHA3, CPUFeatures::sha3); +const bool SupportedFeatures::hasAes = + is_enabled(AT_HWCAP, HWCAP_AES, CPUFeatures::aes); const bool SupportedFeatures::hasSve = is_enabled(AT_HWCAP, HWCAP_SVE, CPUFeatures::sve); @@ -67,6 +71,7 @@ const bool SupportedFeatures::hasSve = const bool SupportedFeatures::hasTrng = false; const bool SupportedFeatures::hasNeon = true; const bool SupportedFeatures::hasSha3 = false; +const bool SupportedFeatures::hasAes = false; const bool SupportedFeatures::hasSve = false; #endif diff --git a/src/vsl/aarch64/distributions/kernels/neon/box_muller.hpp b/src/vsl/aarch64/distributions/kernels/neon/box_muller.hpp new file mode 100644 index 0000000..3237952 --- /dev/null +++ b/src/vsl/aarch64/distributions/kernels/neon/box_muller.hpp @@ -0,0 +1,55 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include +#include + +namespace openrng::distribution::gaussian { +template <> struct BoxMuller { + template + static int fill(Generator *generator, const int64_t n, T r[], const T a, + const T sigma) { + assert(n > 0); + assert(generator != nullptr); + + const uint64_t size = 2 * n; + + // uniforms[] is an array that stores all the u1 and u2s given by the chosen + // generator that are used in the Box-Muller formula + DynamicArray uniforms(size); + if (uniforms.data() == nullptr) { + return VSL_ERROR_MEM_FAILURE; + } + + auto ok = generator->fill(size, uniforms.data()); + if (ok != VSL_ERROR_OK) { + return ok; + } + + for (int64_t i = 0; i < n; i++) { + const T u1 = uniforms[2 * i]; + const T u2 = uniforms[2 * i + 1]; + + // Box-muller uses x an y for generating the numbers of the distribution + // as follows: x = sqrt(-2 * log(u1)) * sin(2 * std::numbers::pi * u2), + // and then by using the parameters a and sigma to generate the random + // number y = sigma * x + a + const auto x = sqrt(-2 * math::log(u1)) * math::sinpi(2 * u2); + const auto y = sigma * x + a; + + // r[] is an array given as a parameter that stores the random numbers + // generated by this distribution + r[i] = y; + } + + return VSL_ERROR_OK; + } +}; +} // namespace openrng::distribution::gaussian diff --git a/src/vsl/aarch64/distributions/kernels/neon/gaussianmv.hpp b/src/vsl/aarch64/distributions/kernels/neon/gaussianmv.hpp new file mode 100644 index 0000000..c45b0df --- /dev/null +++ b/src/vsl/aarch64/distributions/kernels/neon/gaussianmv.hpp @@ -0,0 +1,106 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include +#include +#include + +namespace openrng::distribution::gaussianmv { + +template <> struct GaussianMV { + + template + static inline void packed_to_full(T *tt, const T *t, const int64_t dimen) { + for (int64_t i = 0; i < dimen; i++) + for (int64_t j = i; j < dimen; j++) + tt[j * dimen + i] = t[i * (2 * dimen - i - 1) / 2 + j]; + } + + template + static inline void run_diagonal(const int64_t n, T *r, const int64_t dimen, + const T *a, const T *t) { + for (int64_t i = 0; i < n; i++) { + for (int64_t j = 0; j < dimen; j++) { + r[i * dimen + j] = r[i * dimen + j] * t[j] + a[j]; + } + } + } + + template + static inline void run_full(const int64_t n, T *r, const int64_t dimen, + const T *a, const T *t) { + int64_t i = 0; + for (; i + 4 <= n; i += 4) { + for (int64_t j = dimen - 1; j >= 0; j--) { + T u[4] = {0}; + for (int64_t k = 0; k <= j; k++) { + u[0] += r[i * dimen + k] * t[j * dimen + k]; + u[1] += r[(i + 1) * dimen + k] * t[j * dimen + k]; + u[2] += r[(i + 2) * dimen + k] * t[j * dimen + k]; + u[3] += r[(i + 3) * dimen + k] * t[j * dimen + k]; + } + r[i * dimen + j] = u[0] + a[j]; + r[(i + 1) * dimen + j] = u[1] + a[j]; + r[(i + 2) * dimen + j] = u[2] + a[j]; + r[(i + 3) * dimen + j] = u[3] + a[j]; + } + } + for (; i < n; i++) { + for (int64_t j = dimen - 1; j >= 0; j--) { + T u = 0; + for (int64_t k = 0; k <= j; k++) { + u += r[i * dimen + k] * t[j * dimen + k]; + } + r[i * dimen + j] = u + a[j]; + } + } + } + + template + static int fill(const int64_t method, Generator *generator, const int64_t n, + T r[], const int64_t dimen, const int64_t mstorage, + const T *a, const T *t) { + assert(n > 0); + assert(generator != nullptr); + + switch (method) { + case VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER: + gaussian::BoxMuller::fill(generator, n * dimen, r, + 0, 1); + break; + case VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2: + gaussian::BoxMuller2::fill(generator, n * dimen, r, + 0, 1); + break; + case VSL_RNG_METHOD_GAUSSIANMV_ICDF: + gaussian::ICDF::fill(generator, n * dimen, r, 0, 1); + break; + default: + return VSL_ERROR_BADARGS; + } + + switch (mstorage) { + case VSL_MATRIX_STORAGE_PACKED: { + DynamicArray tt(dimen * dimen); + packed_to_full(tt.data(), t, dimen); + run_full(n, r, dimen, a, tt.data()); + return VSL_ERROR_OK; + } + case VSL_MATRIX_STORAGE_DIAGONAL: + run_diagonal(n, r, dimen, a, t); + return VSL_ERROR_OK; + default: + run_full(n, r, dimen, a, t); + return VSL_ERROR_OK; + } + } +}; + +} // namespace openrng::distribution::gaussianmv diff --git a/src/vsl/aarch64/distributions/kernels/neon/laplace.hpp b/src/vsl/aarch64/distributions/kernels/neon/laplace.hpp index f3a8805..3512d01 100644 --- a/src/vsl/aarch64/distributions/kernels/neon/laplace.hpp +++ b/src/vsl/aarch64/distributions/kernels/neon/laplace.hpp @@ -25,7 +25,7 @@ template <> struct ICDF { DynamicArray uniforms(size); if (uniforms.data() == nullptr) { - return VSL_ERROR_NULL_PTR; + return VSL_ERROR_MEM_FAILURE; } auto ok = generator->fill(size, uniforms.data()); diff --git a/src/vsl/aarch64/distributions/kernels/optimised_kernels.hpp b/src/vsl/aarch64/distributions/kernels/optimised_kernels.hpp index 38da128..a7659c7 100644 --- a/src/vsl/aarch64/distributions/kernels/optimised_kernels.hpp +++ b/src/vsl/aarch64/distributions/kernels/optimised_kernels.hpp @@ -7,9 +7,11 @@ #pragma once #include +#include #include #include #include +#include #include #include #include diff --git a/src/vsl/aarch64/distributions/kernels/sve/gaussian_icdf.cpp b/src/vsl/aarch64/distributions/kernels/sve/gaussian_icdf.cpp index fdc4ed0..a102f61 100644 --- a/src/vsl/aarch64/distributions/kernels/sve/gaussian_icdf.cpp +++ b/src/vsl/aarch64/distributions/kernels/sve/gaussian_icdf.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -17,7 +17,7 @@ inline void icdf(int64_t n, T *r, T a, T sigma); template <> inline void icdf(int64_t n, float *r, float a, float sigma) { for (int64_t i = 0; i < n; i += svcntw()) { const auto pg = svwhilelt_b32(i, n); - auto u = svmad_x(svptrue_b32(), svld1(pg, &r[i]), svdup_f32(2.0f), -1.0f); + auto u = svld1(pg, &r[i]); u = math::sve::erfinv(u, svptrue_b32()); u = svmla_x(svptrue_b32(), svdup_f32(a), u, std::sqrt(2.0f) * sigma); svst1(pg, &r[i], u); @@ -27,7 +27,7 @@ template <> inline void icdf(int64_t n, float *r, float a, float sigma) { template <> inline void icdf(int64_t n, double *r, double a, double sigma) { for (int64_t i = 0; i < n; i += svcntd()) { const auto pg = svwhilelt_b64(i, n); - auto u = svmad_x(svptrue_b64(), svld1(pg, &r[i]), svdup_f64(2.0), -1.0); + auto u = svld1(pg, &r[i]); u = math::sve::erfinv(u, svptrue_b64()); u = svmla_x(svptrue_b64(), svdup_f64(a), u, std::sqrt(2.0) * sigma); svst1(pg, &r[i], u); @@ -42,7 +42,7 @@ template <> struct ICDF { assert(n > 0); assert(generator != nullptr); - generator->fill(n, r); + generator->fill(n, r, T{-1}, T{1}); icdf(n, r, a, sigma); return VSL_ERROR_OK; diff --git a/src/vsl/aarch64/generator/aes/ars5_aes.cpp b/src/vsl/aarch64/generator/aes/ars5_aes.cpp new file mode 100644 index 0000000..5aab0f6 --- /dev/null +++ b/src/vsl/aarch64/generator/aes/ars5_aes.cpp @@ -0,0 +1,48 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include + +#include + +namespace openrng { +template class ARS5Generator; + +namespace { +inline uint8x16_t next_round_key(const uint8x16_t k) { + uint64x2_t temp = vreinterpretq_u64_u8(k); + const uint64_t key_const[2] = {0x9E3779B97F4A7C15llu, 0xBB67AE8584CAA73Bllu}; + temp = vaddq_u64(temp, vld1q_u64(key_const)); + return vreinterpretq_u8_u64(temp); +} + +inline uint128_t compute_ars5_aes(const uint128_t c, const uint128_t k) { + uint8x16_t ci = vld1q_u8(c.data.u8); + uint8x16_t ki = vld1q_u8(k.data.u8); + for (int64_t i = 1; i < 5; ++i) { + // Compute AES round + // The key is added (xor) in the AESE instruction internally, before + // shifting rows and substituting bytes. + ci = vaesmcq_u8(vaeseq_u8(ci, ki)); + // Get next round key, which will be added in the next AESE instruction + ki = next_round_key(ki); + } + // Last round without mix column + ci = vaeseq_u8(ci, ki); + // Add the key for the last time + ki = next_round_key(ki); + ci = veorq_u8(ci, ki); + uint128_t result; + vst1q_u8(result.data.u8, ci); + return result; +} +} // namespace + +inline uint128_t do_bijection(const QuadCounterBasedState &state) { + return compute_ars5_aes(state.c, state.k); +} +} // namespace openrng diff --git a/src/vsl/aarch64/generator/neon/ars5_neon.cpp b/src/vsl/aarch64/generator/neon/ars5_neon.cpp new file mode 100644 index 0000000..ae4d64b --- /dev/null +++ b/src/vsl/aarch64/generator/neon/ars5_neon.cpp @@ -0,0 +1,17 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include +#include + +namespace openrng { +template class ARS5Generator; + +inline uint128_t do_bijection(const QuadCounterBasedState &state) { + return compute_ars5(state.c, state.k); +} +} // namespace openrng diff --git a/src/vsl/aarch64/generator/neon/ars5_neon.hpp b/src/vsl/aarch64/generator/neon/ars5_neon.hpp new file mode 100644 index 0000000..2f4a7a2 --- /dev/null +++ b/src/vsl/aarch64/generator/neon/ars5_neon.hpp @@ -0,0 +1,32 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include + +namespace openrng { + +template + requires(NeonOrAes) +class ARS5Generator + : public QuadCounterBasedGenerator { +public: + ARS5Generator(int64_t brng) : QuadCounterBasedGenerator{brng} {} + + using QuadCounterBasedGenerator::initialise; + int initialise(const int64_t n, const unsigned int params[]); + + int fillBits(int64_t n, uint32_t dst[]); + + int fill(int64_t n, float dst[]); + + int fill(int64_t n, double dst[]); +}; + +} // namespace openrng diff --git a/src/vsl/aarch64/generator/neon/ars5_neon_impl.hpp b/src/vsl/aarch64/generator/neon/ars5_neon_impl.hpp new file mode 100644 index 0000000..d8681d3 --- /dev/null +++ b/src/vsl/aarch64/generator/neon/ars5_neon_impl.hpp @@ -0,0 +1,47 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include + +namespace openrng { + +inline uint128_t do_bijection(const QuadCounterBasedState &state); + +template + requires(NeonOrAes) +int ARS5Generator::initialise(const int64_t n, + const unsigned int params[]) { + for (int i = 0; i < 4; ++i) + state.k.data.u32[i] = n > i ? params[i] : 0; + for (int i = 0; i < 4; ++i) + state.c.data.u32[i] = n > i + 4 ? params[i + 4] : 0; + state.off = 0; + return VSL_ERROR_OK; +} + +template + requires(NeonOrAes) +int ARS5Generator::fillBits(int64_t n, uint32_t dst[]) { + fill_array(n, dst); + return VSL_ERROR_OK; +} + +template + requires(NeonOrAes) +int ARS5Generator::fill(int64_t n, float dst[]) { + fill_array(n, dst); + return VSL_ERROR_OK; +} + +template + requires(NeonOrAes) +int ARS5Generator::fill(int64_t n, double dst[]) { + fill_array(n, dst); + return VSL_ERROR_OK; +} + +} // namespace openrng diff --git a/src/vsl/aarch64/generator/neon/mcg31m1_neon.hpp b/src/vsl/aarch64/generator/neon/mcg31m1_neon.hpp index cb835a9..e549839 100644 --- a/src/vsl/aarch64/generator/neon/mcg31m1_neon.hpp +++ b/src/vsl/aarch64/generator/neon/mcg31m1_neon.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -15,7 +15,7 @@ template <> class Mcg31m1Generator : public CopyableGenerator { public: - Mcg31m1Generator() : CopyableGenerator{VSL_BRNG_MCG31} {} + Mcg31m1Generator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t n, const unsigned int params[]); diff --git a/src/vsl/aarch64/generator/neon/mcg59_neon.cpp b/src/vsl/aarch64/generator/neon/mcg59_neon.cpp index ba7cc24..61a04e3 100644 --- a/src/vsl/aarch64/generator/neon/mcg59_neon.cpp +++ b/src/vsl/aarch64/generator/neon/mcg59_neon.cpp @@ -160,11 +160,6 @@ int Mcg59Generator::fillBits32(int64_t n, uint32_t buffer[]) return VSL_ERROR_OK; } -int Mcg59Generator::fillBits64(int64_t n, - uint64_t buffer[]) { - return fillBits32(2 * n, reinterpret_cast(buffer)); -} - int Mcg59Generator::fill(int64_t n, float buffer[]) { int i = 0; for (; i + unroll_count < n; i += unroll_count) diff --git a/src/vsl/aarch64/generator/neon/mcg59_neon.hpp b/src/vsl/aarch64/generator/neon/mcg59_neon.hpp index 5f58f6b..cf93c08 100644 --- a/src/vsl/aarch64/generator/neon/mcg59_neon.hpp +++ b/src/vsl/aarch64/generator/neon/mcg59_neon.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -14,14 +14,13 @@ namespace openrng { template <> class Mcg59Generator : public CopyableGenerator { public: - Mcg59Generator() : CopyableGenerator{VSL_BRNG_MCG59} {} + Mcg59Generator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t n, const unsigned int params[]); int fillBits(int64_t n, uint32_t[]) final; int fillBits32(int64_t n, uint32_t[]) final; - int fillBits64(int64_t n, uint64_t[]) final; int fill(int64_t n, float[]) final; int fill(int64_t n, double[]) final; int skipAhead(uint64_t n, const uint64_t nskip[]) final; diff --git a/src/vsl/aarch64/generator/neon/mrg32k3a_neon.hpp b/src/vsl/aarch64/generator/neon/mrg32k3a_neon.hpp index 95507a7..263773c 100644 --- a/src/vsl/aarch64/generator/neon/mrg32k3a_neon.hpp +++ b/src/vsl/aarch64/generator/neon/mrg32k3a_neon.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -79,7 +79,7 @@ class MRG32k3aGenerator const std::array, 3> &y); public: - MRG32k3aGenerator() : CopyableGenerator{VSL_BRNG_MRG32K3A} {} + MRG32k3aGenerator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t n, const unsigned int params[]); diff --git a/src/vsl/aarch64/generator/neon/mt19937_neon.hpp b/src/vsl/aarch64/generator/neon/mt19937_neon.hpp index 50d8785..88953c2 100644 --- a/src/vsl/aarch64/generator/neon/mt19937_neon.hpp +++ b/src/vsl/aarch64/generator/neon/mt19937_neon.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -28,24 +28,18 @@ class MT19937Generator : public CopyableGenerator { constexpr static int64_t M = 397; constexpr static uint32_t a = 0x9908B0DF; - void refresh_state(); - void advanceOnceInPlace(std::array &x); template uint32_t advance(int64_t n, T buffer[], const T l, const T u); - - template - void transform(T buffer[], uint32_t source[], const size_t length, const T l, - const T u); + static void advanceOnceInPlace(ring_buffer &x); + void refresh_state(); public: - MT19937Generator() : CopyableGenerator{VSL_BRNG_MT19937} {} + MT19937Generator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t, const unsigned int[]); int fillBits(int64_t n, uint32_t[]) final; - int fillBits32(int64_t n, uint32_t[]) final; - int fillBits64(int64_t n, uint64_t[]) final; int fill(int64_t n, float[]) final; int fill(int64_t n, double[]) final; int fill(int64_t n, float buffer[], const float l, const float u) final; diff --git a/src/vsl/aarch64/generator/neon/mt19937_neon_impl.hpp b/src/vsl/aarch64/generator/neon/mt19937_neon_impl.hpp index e83fd25..9ad958a 100644 --- a/src/vsl/aarch64/generator/neon/mt19937_neon_impl.hpp +++ b/src/vsl/aarch64/generator/neon/mt19937_neon_impl.hpp @@ -1,10 +1,11 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ +#include #include #include #include @@ -63,34 +64,7 @@ template requires(NeonOrSha3) int MT19937Generator::initialise(const int64_t n, const unsigned int params[]) { - const auto data = state.x.data(); - data[0] = 19650218; - for (int i = 1; i < N; i++) { - data[i] = 1812433253ULL * (data[i - 1] ^ (data[i - 1] >> 30)) + i; - } - - int i = 1; - for (int j = 0, k = 0; k < std::max(n, N); k++) { - data[i] ^= 1664525ULL * (data[i - 1] ^ (data[i - 1] >> 30)); - data[i] += params[j] + j; - i = i == N - 1 ? 1 : i + 1; - j = j == n - 1 ? 0 : j + 1; - if (i == 1) { - data[0] = data[N - 1]; - } - } - - for (int k = 0; k < N - 1; k++) { - data[i] ^= 1566083941ULL * (data[i - 1] ^ (data[i - 1] >> 30)); - data[i] -= i; - i = i == N - 1 ? 1 : i + 1; - if (i == 1) { - data[0] = data[N - 1]; - } - } - - data[0] = 1 << 31; - return VSL_ERROR_OK; + return mt_initialise_by_array(n, params, state.x.data()); } /** @@ -223,19 +197,6 @@ int MT19937Generator::fillBits(int64_t n, uint32_t buffer[]) { return advance(n, buffer, 0u, 1u); } -template - requires(NeonOrSha3) -int MT19937Generator::fillBits32(int64_t n, uint32_t buffer[]) { - // MT19937 already generates uniformly distributed integers in [0, 2^32] - return fillBits(n, buffer); -} - -template - requires(NeonOrSha3) -int MT19937Generator::fillBits64(int64_t n, uint64_t buffer[]) { - return fillBits32(2 * n, reinterpret_cast(buffer)); -} - template requires(NeonOrSha3) int MT19937Generator::fill(int64_t n, float buffer[]) { @@ -274,19 +235,9 @@ int MT19937Generator::setStride(uint64_t) { template requires(NeonOrSha3) void MT19937Generator::advanceOnceInPlace( - std::array &x) { - auto tmp = (x[0] & 0x80000000) | (x[1] & 0x7FFFFFFF); - x[0] = x[M] ^ ((tmp & 0x1) ? (tmp >> 1) ^ a : tmp >> 1); - std::rotate(x.begin(), x.begin() + 1, x.end()); -} - -template - requires(NeonOrSha3) -void xorStatesInPlace(std::array &result, - const std::array &other) { - for (size_t i = 0; i < MT19937State::N; i++) { - result[i] ^= other[i]; - } + ring_buffer &x) { + auto tmp = (x[N] & 0x80000000) | (x[N - 1] & 0x7FFFFFFF); + x.push_back(x[N - M] ^ ((tmp & 0x1) ? (tmp >> 1) ^ a : tmp >> 1)); } template @@ -296,32 +247,8 @@ int MT19937Generator::skipAhead(uint64_t n, const uint64_t nskip[]) { return VSL_RNG_ERROR_SKIPAHEADEX_UNSUPPORTED; } - auto skip = nskip[0]; - - DynamicArray *> q(64); - int howmany_nnz = 0; - for (int j = 0; skip; ++j, skip >>= 1) { - if ((skip & 1) != 0) { - q[howmany_nnz] = &skipahead::data::mt19937_cache[j]; - howmany_nnz += 1; - } - } - - for (int hm = 0; hm < howmany_nnz; ++hm) { - auto stateCopy = state.x; - decltype(state.x) resultState = {}; - auto coefficient = *q[hm]; - for (size_t c_bit = 0; c_bit < coefficient.size(); ++c_bit) { - const uint64_t b = coefficient[c_bit]; - for (int i = 0; i < 64; ++i) { - if (1 & b >> i) { - xorStatesInPlace(resultState, stateCopy); - } - advanceOnceInPlace(stateCopy); - } - } - state.x = resultState; - } + mt_skip_ahead(state.x, &advanceOnceInPlace, nskip[0], + skipahead::data::mt19937_cache); // // We need to recompute any cached state. diff --git a/src/vsl/aarch64/generator/neon/mt2203_neon.cpp b/src/vsl/aarch64/generator/neon/mt2203_neon.cpp new file mode 100644 index 0000000..07df7eb --- /dev/null +++ b/src/vsl/aarch64/generator/neon/mt2203_neon.cpp @@ -0,0 +1,12 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include + +namespace openrng { +template class MT2203Generator; +} diff --git a/src/vsl/aarch64/generator/neon/mt2203_neon.hpp b/src/vsl/aarch64/generator/neon/mt2203_neon.hpp new file mode 100644 index 0000000..4440fb0 --- /dev/null +++ b/src/vsl/aarch64/generator/neon/mt2203_neon.hpp @@ -0,0 +1,45 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include + +namespace openrng { + +struct MT2203StateNeon { + constexpr static int64_t N = 69; + std::array x, tempered = {}; + uint32_t a, b, c, index = 0; +}; + +template + requires(NeonOrSha3) +class MT2203Generator : public CopyableGenerator { + + constexpr static int64_t N = MT2203State::N; + constexpr static int64_t M = 34; + + template uint32_t advance(int64_t n, T buffer[], T, T); + template void refresh_state(T[], T, T); + +public: + MT2203Generator(int64_t brng) : CopyableGenerator{brng} {} + + using CopyableGenerator::initialise; + int initialise(const int64_t, const unsigned int[]); + + int fillBits(int64_t n, uint32_t[]) final; + int fill(int64_t n, float[]) final; + int fill(int64_t n, double[]) final; + int setStride(uint64_t) final; + int skipAhead(uint64_t, const uint64_t[]) final; + int fill(int64_t n, float buffer[], const float l, const float u) final; + int fill(int64_t n, double buffer[], const double l, const double u) final; +}; + +} // namespace openrng diff --git a/src/vsl/aarch64/generator/neon/mt2203_neon_impl.hpp b/src/vsl/aarch64/generator/neon/mt2203_neon_impl.hpp new file mode 100644 index 0000000..10de23a --- /dev/null +++ b/src/vsl/aarch64/generator/neon/mt2203_neon_impl.hpp @@ -0,0 +1,347 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include +#include +#include + +#include +#include + +namespace openrng { + +/** + * Initialize MT2203 generator. + * + * This initialization scheme operates according to the procedure + * described in: + * M. Matsumoto and T. Nishimura, + * "Mersenne Twister with improved initialization" + * http://www.math.sci.hiroshima-u.ac.jp/m-mat/MT/MT2002/emt2203ar.html + * Note that we always adopt the 'initialization by array' approach + * regardless of whether we have multiple seed values. + */ +template + requires(NeonOrSha3) +int MT2203Generator::initialise(const int64_t n, + const unsigned int params[]) { + state.a = MT2203_PARAMS[brngId - VSL_BRNG_MT2203].a; + /* Invert b and c so they can be used with BCAX. */ + state.b = ~MT2203_PARAMS[brngId - VSL_BRNG_MT2203].b; + state.c = ~MT2203_PARAMS[brngId - VSL_BRNG_MT2203].c; + return mt_initialise_by_array(n, params, state.x.data()); +} + +namespace { +template +void update(uint32_t *x_0, uint32_t *x_1, uint32_t *x_nm, uint32_t a, + uint32_t b, uint32_t c, T *buf, T l, T u) { + auto x = (*x_0 & 0xffffffe0) | (*x_1 & 0x1f); + x = *x_nm ^ ((x & 0x1) ? (x >> 1) ^ a : x >> 1); + + // Update x buffer + *x_0 = x; + + uint32_t y = x; + y ^= y >> 12; + y ^= (y << 7) & ~b; + y ^= (y << 15) & ~c; + y ^= y >> 18; + + if constexpr (std::is_same_v) { + /* If we are in the uint32_t version, we are either doing a uint32_t + distribution or this is the tail portion of the refresh loop, where the + tempered output has to be stored to state.tempered and then transformed + separately (could still be here in the uint32_t version as well). */ + *buf = y; + } else { + const T scale = u - l; + /* We are doing an in-place floating-point refresh. */ + *buf = ((T)y / (1ULL << 32)) * scale + l; + } +} + +template +void update_16(uint32_t *x_0_ptr, uint32_t *x_1_ptr, uint32_t *x_nm_ptr, + uint32_t a, uint32_t b, uint32_t c, T *buf, T l, T u) { + const uint32x4_t x_0_0 = vld1q_u32(x_0_ptr); + const uint32x4_t x_0_1 = vld1q_u32(x_0_ptr + 4); + const uint32x4_t x_0_2 = vld1q_u32(x_0_ptr + 8); + const uint32x4_t x_0_3 = vld1q_u32(x_0_ptr + 12); + + const uint32x4_t x_1_0 = vld1q_u32(x_1_ptr); + const uint32x4_t x_1_1 = vld1q_u32(x_1_ptr + 4); + const uint32x4_t x_1_2 = vld1q_u32(x_1_ptr + 8); + const uint32x4_t x_1_3 = vld1q_u32(x_1_ptr + 12); + + const uint32x4_t x_nm_0 = vld1q_u32(x_nm_ptr); + const uint32x4_t x_nm_1 = vld1q_u32(x_nm_ptr + 4); + const uint32x4_t x_nm_2 = vld1q_u32(x_nm_ptr + 8); + const uint32x4_t x_nm_3 = vld1q_u32(x_nm_ptr + 12); + + uint32x4_t x_0 = vbslq_u32(vdupq_n_u32(0xffffffe0), x_0_0, x_1_0); + uint32x4_t x_1 = vbslq_u32(vdupq_n_u32(0xffffffe0), x_0_1, x_1_1); + uint32x4_t x_2 = vbslq_u32(vdupq_n_u32(0xffffffe0), x_0_2, x_1_2); + uint32x4_t x_3 = vbslq_u32(vdupq_n_u32(0xffffffe0), x_0_3, x_1_3); + + uint32x4_t arg_0 = vshrq_n_u32(x_0, 1); + uint32x4_t arg_1 = vshrq_n_u32(x_1, 1); + uint32x4_t arg_2 = vshrq_n_u32(x_2, 1); + uint32x4_t arg_3 = vshrq_n_u32(x_3, 1); + + const uint32x4_t arg_xor_0 = veorq_u32(arg_0, vdupq_n_u32(a)); + const uint32x4_t arg_xor_1 = veorq_u32(arg_1, vdupq_n_u32(a)); + const uint32x4_t arg_xor_2 = veorq_u32(arg_2, vdupq_n_u32(a)); + const uint32x4_t arg_xor_3 = veorq_u32(arg_3, vdupq_n_u32(a)); + + const uint32x4_t cmp_0 = vtstq_u32(x_1_0, vdupq_n_u32(0x1)); + const uint32x4_t cmp_1 = vtstq_u32(x_1_1, vdupq_n_u32(0x1)); + const uint32x4_t cmp_2 = vtstq_u32(x_1_2, vdupq_n_u32(0x1)); + const uint32x4_t cmp_3 = vtstq_u32(x_1_3, vdupq_n_u32(0x1)); + + arg_0 = vbslq_u32(cmp_0, arg_xor_0, arg_0); + arg_1 = vbslq_u32(cmp_1, arg_xor_1, arg_1); + arg_2 = vbslq_u32(cmp_2, arg_xor_2, arg_2); + arg_3 = vbslq_u32(cmp_3, arg_xor_3, arg_3); + + x_0 = veorq_u32(x_nm_0, arg_0); + x_1 = veorq_u32(x_nm_1, arg_1); + x_2 = veorq_u32(x_nm_2, arg_2); + x_3 = veorq_u32(x_nm_3, arg_3); + + vst1q_u32(x_0_ptr + 0, x_0); + vst1q_u32(x_0_ptr + 4, x_1); + vst1q_u32(x_0_ptr + 8, x_2); + vst1q_u32(x_0_ptr + 12, x_3); + + uint32x4_t y_0 = x_0; + uint32x4_t y_1 = x_1; + uint32x4_t y_2 = x_2; + uint32x4_t y_3 = x_3; + + y_0 = veorq_u32(y_0, vshrq_n_u32(y_0, 12)); + y_1 = veorq_u32(y_1, vshrq_n_u32(y_1, 12)); + y_2 = veorq_u32(y_2, vshrq_n_u32(y_2, 12)); + y_3 = veorq_u32(y_3, vshrq_n_u32(y_3, 12)); + + if constexpr (CF == CPUFeatures::neon) { + y_0 = veorq_u32(y_0, vbicq_u32(vshlq_n_u32(y_0, 7), vdupq_n_u32(b))); + y_1 = veorq_u32(y_1, vbicq_u32(vshlq_n_u32(y_1, 7), vdupq_n_u32(b))); + y_2 = veorq_u32(y_2, vbicq_u32(vshlq_n_u32(y_2, 7), vdupq_n_u32(b))); + y_3 = veorq_u32(y_3, vbicq_u32(vshlq_n_u32(y_3, 7), vdupq_n_u32(b))); + + y_0 = veorq_u32(y_0, vbicq_u32(vshlq_n_u32(y_0, 15), vdupq_n_u32(c))); + y_1 = veorq_u32(y_1, vbicq_u32(vshlq_n_u32(y_1, 15), vdupq_n_u32(c))); + y_2 = veorq_u32(y_2, vbicq_u32(vshlq_n_u32(y_2, 15), vdupq_n_u32(c))); + y_3 = veorq_u32(y_3, vbicq_u32(vshlq_n_u32(y_3, 15), vdupq_n_u32(c))); + } else { + y_0 = vbcaxq_u32(y_0, vshlq_n_u32(y_0, 7), vdupq_n_u32(b)); + y_1 = vbcaxq_u32(y_1, vshlq_n_u32(y_1, 7), vdupq_n_u32(b)); + y_2 = vbcaxq_u32(y_2, vshlq_n_u32(y_2, 7), vdupq_n_u32(b)); + y_3 = vbcaxq_u32(y_3, vshlq_n_u32(y_3, 7), vdupq_n_u32(b)); + + y_0 = vbcaxq_u32(y_0, vshlq_n_u32(y_0, 15), vdupq_n_u32(c)); + y_1 = vbcaxq_u32(y_1, vshlq_n_u32(y_1, 15), vdupq_n_u32(c)); + y_2 = vbcaxq_u32(y_2, vshlq_n_u32(y_2, 15), vdupq_n_u32(c)); + y_3 = vbcaxq_u32(y_3, vshlq_n_u32(y_3, 15), vdupq_n_u32(c)); + } + + y_0 = veorq_u32(y_0, vshrq_n_u32(y_0, 18)); + y_1 = veorq_u32(y_1, vshrq_n_u32(y_1, 18)); + y_2 = veorq_u32(y_2, vshrq_n_u32(y_2, 18)); + y_3 = veorq_u32(y_3, vshrq_n_u32(y_3, 18)); + + if constexpr (std::is_same_v) { + vst1q_u32(buf + 0, y_0); + vst1q_u32(buf + 4, y_1); + vst1q_u32(buf + 8, y_2); + vst1q_u32(buf + 12, y_3); + } else if constexpr (std::is_same_v) { + float32x4_t z_0 = vcvtq_f32_u32(y_0), z_1 = vcvtq_f32_u32(y_1), + z_2 = vcvtq_f32_u32(y_2), z_3 = vcvtq_f32_u32(y_3); + const float32x4_t scale = vdupq_n_f32((u - l) * 0x1p-32); + const float32x4_t lv = vdupq_n_f32(l); + z_0 = vfmaq_f32(lv, z_0, scale); + z_1 = vfmaq_f32(lv, z_1, scale); + z_2 = vfmaq_f32(lv, z_2, scale); + z_3 = vfmaq_f32(lv, z_3, scale); + + vst1q_f32(buf + 0, z_0); + vst1q_f32(buf + 4, z_1); + vst1q_f32(buf + 8, z_2); + vst1q_f32(buf + 12, z_3); + } else if constexpr (std::is_same_v) { + const float64x2_t scale = vdupq_n_f64((u - l) * 0x1p-32); + const float64x2_t lv = vdupq_n_f64(l); + + float64x2_t val_0_l = vcvtq_f64_u64(vmovl_u32(vget_low_u32(y_0))); + float64x2_t val_0_h = vcvtq_f64_u64(vmovl_u32(vget_high_u32(y_0))); + + float64x2_t val_1_l = vcvtq_f64_u64(vmovl_u32(vget_low_u32(y_1))); + float64x2_t val_1_h = vcvtq_f64_u64(vmovl_u32(vget_high_u32(y_1))); + + float64x2_t val_2_l = vcvtq_f64_u64(vmovl_u32(vget_low_u32(y_2))); + float64x2_t val_2_h = vcvtq_f64_u64(vmovl_u32(vget_high_u32(y_2))); + + float64x2_t val_3_l = vcvtq_f64_u64(vmovl_u32(vget_low_u32(y_3))); + float64x2_t val_3_h = vcvtq_f64_u64(vmovl_u32(vget_high_u32(y_3))); + + val_0_l = vfmaq_f64(lv, val_0_l, scale); + val_0_h = vfmaq_f64(lv, val_0_h, scale); + + val_1_l = vfmaq_f64(lv, val_1_l, scale); + val_1_h = vfmaq_f64(lv, val_1_h, scale); + + val_2_l = vfmaq_f64(lv, val_2_l, scale); + val_2_h = vfmaq_f64(lv, val_2_h, scale); + + val_3_l = vfmaq_f64(lv, val_3_l, scale); + val_3_h = vfmaq_f64(lv, val_3_h, scale); + + vst1q_f64(buf + 0, val_0_l); + vst1q_f64(buf + 2, val_0_h); + vst1q_f64(buf + 4, val_1_l); + vst1q_f64(buf + 6, val_1_h); + vst1q_f64(buf + 8, val_2_l); + vst1q_f64(buf + 10, val_2_h); + vst1q_f64(buf + 12, val_3_l); + vst1q_f64(buf + 14, val_3_h); + } +} + +} // namespace + +template + requires(NeonOrSha3) +template +void MT2203Generator::refresh_state(T buf[], T l, T u) { + if constexpr (std::is_same_v) { + assert(l == 0); + assert(u == 1); + } + + int i = 0; + for (; i + 16 <= N - M; i += 16) { + update_16(&state.x[i], &state.x[i + 1], &state.x[i + M], state.a, + state.b, state.c, &buf[i], l, u); + } + for (; i < N - M; i++) { + update(&state.x[i], &state.x[i + 1], &state.x[i + M], state.a, state.b, + state.c, &buf[i], l, u); + } + for (; i + 16 <= N - 1; i += 16) { + update_16(&state.x[i], &state.x[i + 1], &state.x[i + M - N], state.a, + state.b, state.c, &buf[i], l, u); + } + for (; i < N - 1; i++) { + update(&state.x[i], &state.x[i + 1], &state.x[i + M - N], state.a, state.b, + state.c, &buf[i], l, u); + } + update(&state.x[i], &state.x[0], &state.x[M - 1], state.a, state.b, state.c, + &buf[i], l, u); +} + +namespace { + +void transform_mt2203(uint32_t buffer[], uint32_t source[], const size_t length, + uint32_t, uint32_t) { + std::memcpy(buffer, source, length * sizeof(uint32_t)); +} + +template +void transform_mt2203(T buffer[], uint32_t source[], const size_t length, T l, + T u) { + const T scale = u - l; + const T norm = scale * (T)(0x1p-32); + for (size_t j = 0; j < length; j += 1) { + buffer[j] = ((T)source[j] * norm) + l; + } +} +} // namespace + +template + requires(NeonOrSha3) +template +uint32_t MT2203Generator::advance(int64_t n, T buffer[], T l, T u) { + int i = 0; + while (i != n) { + // Copy up until we need to do a state update + const size_t copy_length = std::min(static_cast(N - state.index), + static_cast(n - i)); + + if (copy_length == N) { + /* If copy length is the entire state, do the refresh directly into the + buffer rather than using the intermediate cache. */ + assert(state.index == 0); + refresh_state(&buffer[i], l, u); + } else { + /* This is either the head (previous sample left us with a nonzero + index) or tail (less than N elements remaining to copy after a + refresh). */ + if (state.index == 0) { + /* Refresh into the cache, rather than the buffer, as we will need + some of these values again next sample. */ + refresh_state(&state.tempered[0], 0u, 1u); + } + /* Copy from the cache into buffer. */ + transform_mt2203(&buffer[i], &state.tempered[state.index], copy_length, l, + u); + } + + state.index = (state.index + copy_length) % N; + i += copy_length; + } + return VSL_ERROR_OK; +} + +template + requires(NeonOrSha3) +int MT2203Generator::fillBits(int64_t n, uint32_t buffer[]) { + return advance(n, buffer, 0u, 1u); +} + +template + requires(NeonOrSha3) +int MT2203Generator::fill(int64_t n, float buffer[]) { + return fill(n, buffer, 0.f, 1.f); +} + +template + requires(NeonOrSha3) +int MT2203Generator::fill(int64_t n, double buffer[]) { + return fill(n, buffer, 0., 1.); +} + +template + requires(NeonOrSha3) +int MT2203Generator::fill(int64_t n, float buffer[], const float l, + const float u) { + static_assert(sizeof(float) == sizeof(uint32_t)); + advance(n, buffer, l, u); + return VSL_ERROR_OK; +} + +template + requires(NeonOrSha3) +int MT2203Generator::fill(int64_t n, double buffer[], const double l, + const double u) { + advance(n, buffer, l, u); + return VSL_ERROR_OK; +} + +template + requires(NeonOrSha3) +int MT2203Generator::setStride(uint64_t) { + return VSL_RNG_ERROR_LEAPFROG_UNSUPPORTED; +} + +template + requires(NeonOrSha3) +int MT2203Generator::skipAhead(uint64_t, const uint64_t[]) { + return VSL_RNG_ERROR_SKIPAHEADEX_UNSUPPORTED; +} +} // namespace openrng diff --git a/src/vsl/aarch64/generator/neon/philox4x3210_neon.hpp b/src/vsl/aarch64/generator/neon/philox4x3210_neon.hpp index fd22483..23b29c0 100644 --- a/src/vsl/aarch64/generator/neon/philox4x3210_neon.hpp +++ b/src/vsl/aarch64/generator/neon/philox4x3210_neon.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -7,33 +7,27 @@ #pragma once -#include +#include #include -#include namespace openrng { template requires(NeonOrSha3) -class Philox4x3210Generator : public CopyableGenerator { +class Philox4x3210Generator + : public QuadCounterBasedGenerator> { public: - Philox4x3210Generator() : CopyableGenerator{VSL_BRNG_PHILOX4X32X10} {} - - using CopyableGenerator::initialise; - int initialise(const int64_t, const unsigned int[]); - - int fillBits(int64_t n, uint32_t[]) final; - int fillBits32(int64_t n, uint32_t[]) final; - int fillBits64(int64_t n, uint64_t[]) final; - int fill(int64_t n, float[]) final; - int fill(int64_t n, double[]) final; - int skipAhead(uint64_t n, const uint64_t nskip[]) final; - int setStride(uint64_t stride) final; - -private: - template void fill_array(int64_t, T *); - void advance(uint64_t); - uint128_t get_philox() const; + Philox4x3210Generator(int64_t brng) + : QuadCounterBasedGenerator>{brng} {} + + using QuadCounterBasedGenerator>::initialise; + int initialise(const int64_t n, const unsigned int params[]); + + int fillBits(int64_t n, uint32_t dst[]); + + int fill(int64_t n, float dst[]); + + int fill(int64_t n, double dst[]); }; } // namespace openrng diff --git a/src/vsl/aarch64/generator/neon/philox4x3210_neon_impl.hpp b/src/vsl/aarch64/generator/neon/philox4x3210_neon_impl.hpp index dce6c05..01132ca 100644 --- a/src/vsl/aarch64/generator/neon/philox4x3210_neon_impl.hpp +++ b/src/vsl/aarch64/generator/neon/philox4x3210_neon_impl.hpp @@ -17,7 +17,6 @@ namespace openrng { namespace { - inline void philox_oneround(uint32x4x4_t &c, uint32x4_t k0, uint32x4_t k1) { auto &[R0, L0, R1, L1] = c.val; @@ -39,9 +38,15 @@ inline void philox_oneround(uint32x4x4_t &c, uint32x4_t k0, uint32x4_t k1) { L1 = lo_0; } -inline void philox_10(uint32x4x4_t &c0, uint32x4x4_t &c1, uint32x4x4_t &c2, - uint32_t k0_, uint32_t k1_) { - uint32x4_t k0 = vdupq_n_u32(k0_), k1 = vdupq_n_u32(k1_); +inline uint128_t +do_bijection(const QuadCounterBasedState> &state) { + return philox_10(state.k[0], state.k[1], state.c); +} + +inline void +do_bijection_12(const QuadCounterBasedState> &state, + uint32x4x4_t &c0, uint32x4x4_t &c1, uint32x4x4_t &c2) { + uint32x4_t k0 = vdupq_n_u32(state.k[0]), k1 = vdupq_n_u32(state.k[1]); const uint32x4_t k0_inc = vdupq_n_u32(0x9E3779B9), k1_inc = vdupq_n_u32(0xBB67AE85); @@ -53,44 +58,6 @@ inline void philox_10(uint32x4x4_t &c0, uint32x4x4_t &c1, uint32x4x4_t &c2, k1 += k1_inc; } } - -void write_elems(uint32_t *dst, const uint32_t *src, size_t n) { - memcpy(dst, src, n * sizeof(uint32_t)); -} - -template -void write_elems(T *dst, const uint32_t *src, size_t n) { - for (unsigned i = 0; i < n; i++) - dst[i] = (int)src[i] / 0x1p32 + 0.5; -} - -float32x4_t transform_to_float(uint32x4_t x) { - return vfmaq_f32(vdupq_n_f32(0.5), vcvtq_f32_s32(vreinterpretq_s32_u32(x)), - vdupq_n_f32(0x1p-32)); -} - -float32x4x4_t transform_to_float(uint32x4x4_t x) { - float32x4x4_t f; - for (int i = 0; i < 4; i++) - f.val[i] = transform_to_float(x.val[i]); - return f; -} - -void st4(uint32_t *dst, uint32x4x4_t x) { vst4q_u32(dst, x); } - -void st4(float *dst, uint32x4x4_t x) { vst4q_f32(dst, transform_to_float(x)); } - -void st4(double *dst, uint32x4x4_t x) { - const float32x4x4_t f = transform_to_float(x); - float64x2x4_t lo, hi; - for (int i = 0; i < 4; i++) { - lo.val[i] = vcvt_f64_f32(vget_low_f32(f.val[i])); - hi.val[i] = vcvt_high_f64_f32(f.val[i]); - } - vst4q_f64(dst, lo); - vst4q_f64(dst + 8, hi); -} - } // namespace template @@ -98,146 +65,35 @@ template int Philox4x3210Generator::initialise(const int64_t n, const unsigned int params[]) { for (int i = 0; i < 4; i++) - state.c.data.u32[i] = n > i + 2 ? params[i + 2] : 0; + this->state.c.data.u32[i] = n > i + 2 ? params[i + 2] : 0; - state.k0 = n == 0 ? 0 : params[0]; - state.k1 = n > 1 ? params[1] : 0; + this->state.k[0] = n == 0 ? 0 : params[0]; + this->state.k[1] = n > 1 ? params[1] : 0; - state.off = 0; + this->state.off = 0; return VSL_ERROR_OK; } -template - requires(NeonOrSha3) -void Philox4x3210Generator::advance(uint64_t by) { - /* Every 4 advances, c is incremented. If by is a multiple of 4 then we can - * just bump c and be done. If not, bump c by the number of full quadwords - * that this advance would skip over, and adjust offset such that when we - * write to the array we begin from the correct subelement of philox(c). */ - state.c.data.u128 += (state.off + by) / 4; - state.off = (state.off + by) % 4; -} - -template - requires(NeonOrSha3) -uint128_t Philox4x3210Generator::get_philox() const { - return philox_10(state.k0, state.k1, state.c); -} - -template - requires(NeonOrSha3) -template -void Philox4x3210Generator::fill_array(int64_t n, T *dst) { - /* Walking over the array has at most 3 stages: head, body and tail. */ - int64_t i = 0; - uint128_t c = get_philox(); - - /* Head: exhaust the current value of c. Starting from current offset into - * c, write either the remainder of the quadword or n elements (whichever is - * less). If offset is already zero then this will be a no-op. */ - const int64_t chunksize = std::min(static_cast(4) - state.off, n); - write_elems(dst, c.data.u32 + state.off, chunksize); - advance(chunksize); - i += chunksize; - - /* Unrolled body - unroll by a factor of 12. */ - for (; i + 48 < n; i += 48) { - __uint128_t x[12]; - for (int j = 0; j < 12; j++) - x[j] = state.c.data.u128 + j; - - uint32x4x4_t x0 = vld4q_u32((uint32_t *)&x[0]), - x1 = vld4q_u32((uint32_t *)&x[4]), - x2 = vld4q_u32((uint32_t *)&x[8]); - philox_10(x0, x1, x2, state.k0, state.k1); - st4(dst + i, x0); - st4(dst + i + 16, x1); - st4(dst + i + 32, x2); - advance(48); - } - - /* Body: while there are at least 4 remaining elements to write, deal with the - * entire quadword. Destination pointer is offset by the length of the head, - * and offset is 0 since the previous quad was exhausted when writing the - * head. */ - for (; i + 4 < n; i += 4) { - c = get_philox(); - write_elems(dst + i, c.data.u32, 4); - advance(4); - } - - /* Tail: if there are between 1 and 3 elements left to write. advance will - * update offset but not bump c so that subsequent takes will use the current - * value of c, but index into it from further on. */ - if (i < n) { - c = get_philox(); - const int64_t ntail = n - i; - write_elems(dst + i, c.data.u32, ntail); - advance(ntail); - } -} - template requires(NeonOrSha3) int Philox4x3210Generator::fillBits(int64_t n, uint32_t dst[]) { - fill_array(n, dst); + this->template fill_array(n, dst); return VSL_ERROR_OK; } -template - requires(NeonOrSha3) -int Philox4x3210Generator::fillBits32(int64_t n, uint32_t dst[]) { - return fillBits(n, dst); -} - -template - requires(NeonOrSha3) -int Philox4x3210Generator::fillBits64(int64_t n, uint64_t dst[]) { - return fillBits(n * 2, (uint32_t *)dst); -} - template requires(NeonOrSha3) int Philox4x3210Generator::fill(int64_t n, float dst[]) { - fill_array(n, dst); + this->template fill_array(n, dst); return VSL_ERROR_OK; } template requires(NeonOrSha3) int Philox4x3210Generator::fill(int64_t n, double dst[]) { - fill_array(n, dst); - return VSL_ERROR_OK; -} - -template - requires(NeonOrSha3) -int Philox4x3210Generator::skipAhead(uint64_t n, const uint64_t nskip[]) { - /* Period of Philox4x32 is 2^130 (get 4 words for each value of the 128-bit - * counter, so all but the first 3 elements of nskip can be ignored. */ - - /* 2^0 part. */ - advance(nskip[0]); - - /* 2^64 part - no need to mess with offset as j * 2^64 is a multiple of 4. - * Just bump c by j * 2^62. */ - if (n > 1) - state.c.data.u128 += ((__uint128_t)nskip[1]) << 62; - - /* 2^128 part - we only care about first 2 bits, since any values > 4 mean - * advancing by a multiple of 2^130, which is circular. Similar to 2^64 part, - * advancing by j * 2^128 means bumping c by j * 2^126. */ - if (n > 2) - state.c.data.u128 += ((__uint128_t)nskip[2]) << 126; - + this->template fill_array(n, dst); return VSL_ERROR_OK; } -template - requires(NeonOrSha3) -int Philox4x3210Generator::setStride(uint64_t) { - return VSL_RNG_ERROR_LEAPFROG_UNSUPPORTED; -} - } // namespace openrng diff --git a/src/vsl/aarch64/generator/neon/quad_counter_based_generator_neon.hpp b/src/vsl/aarch64/generator/neon/quad_counter_based_generator_neon.hpp new file mode 100644 index 0000000..11f3489 --- /dev/null +++ b/src/vsl/aarch64/generator/neon/quad_counter_based_generator_neon.hpp @@ -0,0 +1,167 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#pragma once + +#include +#include + +#include + +namespace openrng { + +namespace { + +float32x4_t transform_to_float(uint32x4_t x) { + return vfmaq_f32(vdupq_n_f32(0.5), vcvtq_f32_s32(vreinterpretq_s32_u32(x)), + vdupq_n_f32(0x1p-32)); +} + +float32x4x4_t transform_to_float(uint32x4x4_t x) { + float32x4x4_t f; + for (int i = 0; i < 4; i++) + f.val[i] = transform_to_float(x.val[i]); + return f; +} + +[[maybe_unused]] void st4(uint32_t *dst, uint32x4x4_t x) { vst4q_u32(dst, x); } + +[[maybe_unused]] void st4(float *dst, uint32x4x4_t x) { + vst4q_f32(dst, transform_to_float(x)); +} + +[[maybe_unused]] void st4(double *dst, uint32x4x4_t x) { + const float64x2_t delta = vdupq_n_f64(0.5); + const float64x2_t scale = vdupq_n_f64(0x1p-32); + + const int32x4x4_t signed_x{ + vreinterpretq_s32_u32(x.val[0]), vreinterpretq_s32_u32(x.val[1]), + vreinterpretq_s32_u32(x.val[2]), vreinterpretq_s32_u32(x.val[3])}; + + float64x2_t val_0_l = vcvtq_f64_s64(vmovl_s32(vget_low_s32(signed_x.val[0]))); + float64x2_t val_0_h = + vcvtq_f64_s64(vmovl_s32(vget_high_s32(signed_x.val[0]))); + + float64x2_t val_1_l = vcvtq_f64_s64(vmovl_s32(vget_low_s32(signed_x.val[1]))); + float64x2_t val_1_h = + vcvtq_f64_s64(vmovl_s32(vget_high_s32(signed_x.val[1]))); + + float64x2_t val_2_l = vcvtq_f64_s64(vmovl_s32(vget_low_s32(signed_x.val[2]))); + float64x2_t val_2_h = + vcvtq_f64_s64(vmovl_s32(vget_high_s32(signed_x.val[2]))); + + float64x2_t val_3_l = vcvtq_f64_s64(vmovl_s32(vget_low_s32(signed_x.val[3]))); + float64x2_t val_3_h = + vcvtq_f64_s64(vmovl_s32(vget_high_s32(signed_x.val[3]))); + + val_0_l = vfmaq_f64(delta, val_0_l, scale); + val_0_h = vfmaq_f64(delta, val_0_h, scale); + + val_1_l = vfmaq_f64(delta, val_1_l, scale); + val_1_h = vfmaq_f64(delta, val_1_h, scale); + + val_2_l = vfmaq_f64(delta, val_2_l, scale); + val_2_h = vfmaq_f64(delta, val_2_h, scale); + + val_3_l = vfmaq_f64(delta, val_3_l, scale); + val_3_h = vfmaq_f64(delta, val_3_h, scale); + + const float64x2x4_t lows = {val_0_l, val_1_l, val_2_l, val_3_l}; + const float64x2x4_t highs = {val_0_h, val_1_h, val_2_h, val_3_h}; + + vst4q_f64(dst, lows); + vst4q_f64(dst + 8, highs); +} + +} // namespace + +template + requires(NeonOrSha3) +class QuadCounterBasedGenerator + : public CopyableGenerator> { + +private: + inline void advance(uint64_t by) { + // Increment c every 4 advances. + this->state.c += (this->state.off + by) / 4; + // Adjust offset of the next subelement to be outputted. + this->state.off = (this->state.off + by) % 4; + } + +protected: + template < + typename T, uint128_t (*do_bijection)(const QuadCounterBasedState &), + void (*do_bijection_12)(const QuadCounterBasedState &, + uint32x4x4_t &, uint32x4x4_t &, uint32x4x4_t &)> + void fill_array(int64_t n, T *dst) { + int64_t i = 0; + + // Exhaust remaining elements + uint128_t c = do_bijection(this->state); + const int64_t nhead = + std::min(static_cast(4) - this->state.off, n); + write_elems(dst, c.data.u32 + this->state.off, nhead); + advance(nhead); + i += nhead; + + // Unrolled body - unroll by a factor of 12. + for (; i + 48 < n; i += 48) { + uint128_t x[12]; + for (int j = 0; j < 12; j++) + x[j] = this->state.c + j; + + uint32x4x4_t x0 = vld4q_u32(x[0].data.u32), x1 = vld4q_u32(x[4].data.u32), + x2 = vld4q_u32(x[8].data.u32); + do_bijection_12(this->state, x0, x1, x2); + st4(dst + i, x0); + st4(dst + i + 16, x1); + st4(dst + i + 32, x2); + advance(48); + } + + // Process 4 elements as a quadword at a time + for (; i + 4 < n; i += 4) { + c = do_bijection(this->state); + write_elems(dst + i, c.data.u32, 4); + advance(4); + } + + // Handle remaining elements left + if (i < n) { + c = do_bijection(this->state); + const int64_t ntail = n - i; + write_elems(dst + i, c.data.u32, ntail); + advance(ntail); + } + } + +public: + QuadCounterBasedGenerator(int64_t _brngId) + : CopyableGenerator>{_brngId} {} + + int setStride(uint64_t) final { return VSL_RNG_ERROR_LEAPFROG_UNSUPPORTED; } + + int skipAhead(uint64_t n, const uint64_t nskip[]) final { + // Period is 2^130, so all but the first 3 elements of nskip can be ignored. + + // 2^0 part + advance(nskip[0]); + + // 2^64 part - no need to mess with offset as j * 2^64 is a multiple of 4. + if (n > 1) + this->state.c += uint128_t{nskip[1]} << 62; + + // 2^128 part - we only care about first 2 bits, since any values > 4 mean + // advancing by a multiple of 2^130, which is circular. + if (n > 2) + this->state.c += uint128_t{nskip[2]} << 126; + + return VSL_ERROR_OK; + } +}; + +} // namespace openrng diff --git a/src/vsl/aarch64/generator/neon/sfmt19937_neon.hpp b/src/vsl/aarch64/generator/neon/sfmt19937_neon.hpp index 902a41e..7e8ca5e 100644 --- a/src/vsl/aarch64/generator/neon/sfmt19937_neon.hpp +++ b/src/vsl/aarch64/generator/neon/sfmt19937_neon.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -8,6 +8,8 @@ #pragma once #include +#include +#include #include @@ -28,20 +30,18 @@ class SFMT19937Generator : public CopyableGenerator { constexpr static int64_t N = SFMT19937StateNeon::N; constexpr static int64_t M = 122; - void advanceOnceInPlace(std::array &x); template int advance(int64_t n, T buffer[], const T l, const T u); - void refresh_state(); + static void advanceOnceInPlace(ring_buffer &x); + template void refresh_state(TransformFunc transform); public: - SFMT19937Generator() : CopyableGenerator{VSL_BRNG_SFMT19937} {} + SFMT19937Generator(int64_t brng) : CopyableGenerator{brng} {} using CopyableGenerator::initialise; int initialise(const int64_t, const unsigned int[]); int fillBits(int64_t n, uint32_t[]) final; - int fillBits32(int64_t n, uint32_t[]) final; - int fillBits64(int64_t n, uint64_t[]) final; int fill(int64_t n, float[]) final; int fill(int64_t n, double[]) final; int fill(int64_t n, float buffer[], const float l, const float u) final; diff --git a/src/vsl/aarch64/generator/neon/sfmt19937_neon_impl.hpp b/src/vsl/aarch64/generator/neon/sfmt19937_neon_impl.hpp index 070eb28..e37c210 100644 --- a/src/vsl/aarch64/generator/neon/sfmt19937_neon_impl.hpp +++ b/src/vsl/aarch64/generator/neon/sfmt19937_neon_impl.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -7,14 +7,15 @@ #include #include +#include #include namespace openrng { /** - * Helper function that to transfer values from - * a source, the state vector, to the values buffer + * Helper function that transforms values from a source, the state vector, to + * the values buffer. */ template void transform_sfmt19937(T buffer[], uint32_t source[], const size_t length, @@ -25,24 +26,48 @@ void transform_sfmt19937(T buffer[], uint32_t source[], const size_t length, assert(u == 1); std::memcpy(buffer, source, length * sizeof(uint32_t)); } else { - constexpr T norm = (T)1.0 / (T)(1ULL << 32); - constexpr T translation = (T)0.5; const T scale = u - l; + const T norm = scale / (1ULL << 32); + const T translation = l + scale / 2; size_t j = 0; constexpr size_t unroll = 24; for (; j + unroll <= length; j += unroll) { for (size_t k = 0; k < unroll; k += 1) { - buffer[j + k] = - (translation + (T)(int32_t)source[j + k] * norm) * scale + l; + buffer[j + k] = translation + (T)(int32_t)source[j + k] * norm; } } for (; j < length; j += 1) { - buffer[j] = (translation + (T)(int32_t)source[j] * norm) * scale + l; + buffer[j] = translation + (T)(int32_t)source[j] * norm; } } } +/** + * Helper function that transforms a unit32x4_t to the desired distribution. + */ +template +void transform_vector_sfmt19937(const uint32x4_t in, T *out, const T l, + const T u) { + if constexpr (std::is_same::value) { + assert(l == 0); + assert(u == 1); + vst1q_u32(out, in); + } else { + // + // Widening to double is a bit messy to do with intrinsics, but fortunately + // we can rely on autovectorisation to handle this. + // + const T scale = u - l; + const T norm = scale / (1ULL << 32); + const T translation = l + scale / 2; + out[0] = translation + (T)(int32_t)in[0] * norm; + out[1] = translation + (T)(int32_t)in[1] * norm; + out[2] = translation + (T)(int32_t)in[2] * norm; + out[3] = translation + (T)(int32_t)in[3] * norm; + } +} + /** * Helper for SFMT19937 initialization scheme. */ @@ -145,13 +170,20 @@ int SFMT19937Generator::initialise(const int64_t key_length, return VSL_ERROR_OK; } +/** + * Refresh the state and pass the old state into TransformFunc as a uint32x4_t. + * + * The TransformFunc enables transforming old state while generating new state. + * This enables better use of a CPU's vector throughput. + */ template requires(NeonOrSha3) -void SFMT19937Generator::refresh_state() { +template +void SFMT19937Generator::refresh_state(TransformFunc transform) { auto x_2 = vld1q_u32((uint32_t *)&state.x[N - 2]); auto x_1 = vld1q_u32((uint32_t *)&state.x[N - 1]); - auto update = [&x_1, &x_2](auto x_n_ptr, auto x_nm_ptr) { + auto update = [&x_1, &x_2, &transform](auto x_n_ptr, auto x_nm_ptr) { const auto x_n = vld1q_u8((uint8_t *)x_n_ptr); const auto x_nm = vld1q_u32((uint32_t *)x_nm_ptr); @@ -163,16 +195,26 @@ void SFMT19937Generator::refresh_state() { const auto x = x_a ^ x_b ^ x_c ^ x_d; vst1q_u8((uint8_t *)x_n_ptr, x); + transform(vreinterpretq_u32_u8(x_n)); x_2 = x_1; x_1 = vreinterpretq_u32_u8(x); }; int i = 0; + const int unroll = 2; + for (; i <= N - M - unroll; i += unroll) { + for (int j = 0; j < unroll; j++) + update(&state.x[i + j], &state.x[i + j + M]); + } for (; i < N - M; i++) { update(&state.x[i], &state.x[i + M]); } + for (; i <= N - unroll; i += unroll) { + for (int j = 0; j < unroll; j++) + update(&state.x[i + j], &state.x[i + j + M - N]); + } for (; i < N; i++) { update(&state.x[i], &state.x[i + M - N]); } @@ -189,16 +231,29 @@ int SFMT19937Generator::advance(int64_t n, T buffer[], const T l, int i = 0; while (i != n) { if (state.current_idx == N * 4) { - refresh_state(); + // TransformFunc is a nop, the state has already been used. + refresh_state([](uint32x4_t) {}); state.current_idx = 0; } + // Copy up until we need to do a state update const size_t copy_length = std::min(N * 4 - state.current_idx, n - i); - transform_sfmt19937(&buffer[i], &state_u32[state.current_idx], copy_length, - l, u); - - state.current_idx += copy_length; + if (copy_length == N * 4) { + // + // If we're consuming a whole buffer of state, we can refresh while + // transforming. + // + auto curr_buffer = buffer + i; + refresh_state([l, u, &curr_buffer](uint32x4_t in) { + transform_vector_sfmt19937(in, curr_buffer, l, u); + curr_buffer += 4; + }); + } else { + transform_sfmt19937(&buffer[i], &state_u32[state.current_idx], + copy_length, l, u); + state.current_idx += copy_length; + } i += copy_length; } @@ -211,19 +266,6 @@ int SFMT19937Generator::fillBits(int64_t n, uint32_t buffer[]) { return advance(n, buffer, (uint32_t)0, (uint32_t)1); } -template - requires(NeonOrSha3) -int SFMT19937Generator::fillBits32(int64_t n, uint32_t buffer[]) { - // SFMT19937 already generates uniformly distributed integers in [0, 2^32] - return fillBits(n, buffer); -} - -template - requires(NeonOrSha3) -int SFMT19937Generator::fillBits64(int64_t n, uint64_t buffer[]) { - return fillBits32(2 * n, reinterpret_cast(buffer)); -} - template requires(NeonOrSha3) int SFMT19937Generator::fill(int64_t n, float buffer[]) { @@ -259,33 +301,26 @@ int SFMT19937Generator::setStride(uint64_t) { return VSL_RNG_ERROR_LEAPFROG_UNSUPPORTED; } -static void -xorStatesInPlace(std::array &result, - const std::array &other) { - for (size_t i = 0; i < SFMT19937State::N; i++) { - result[i] = result[i] ^ other[i]; - } -} - template requires(NeonOrSha3) void SFMT19937Generator::advanceOnceInPlace( - std::array &x) { + ring_buffer &x) { - auto x_2 = vld1q_u32((uint32_t *)&x[N - 2]); - auto x_1 = vld1q_u32((uint32_t *)&x[N - 1]); + auto x_2 = vld1q_u32((uint32_t *)&x[2]); + auto x_1 = vld1q_u32((uint32_t *)&x[1]); - const auto x_n = vld1q_u8((uint8_t *)&x[0]); - const auto x_nm = vld1q_u32((uint32_t *)&x[M]); + const auto x_n = vld1q_u8((uint8_t *)&x[N]); + const auto x_nm = vld1q_u32((uint32_t *)&x[N - M]); const auto x_a = veorq_u8(vextq_u8(vdupq_n_u8(0), x_n, 15), x_n); const auto x_b = vreinterpretq_u8_u32(vandq_u32(vshrq_n_u32(x_nm, 11), mask)); const auto x_c = vextq_u8(vreinterpretq_u8_u32(x_2), vdupq_n_u8(0), 1); const auto x_d = vreinterpretq_u8_u32(vshlq_n_u32(x_1, 18)); - vst1q_u8((uint8_t *)&x[0], x_a ^ x_b ^ x_c ^ x_d); + poly128_t x_0; + vst1q_u8((uint8_t *)&x_0, x_a ^ x_b ^ x_c ^ x_d); - std::rotate(x.begin(), x.begin() + 1, x.end()); + x.push_back(x_0); } template @@ -298,22 +333,9 @@ int SFMT19937Generator::skipAhead(uint64_t n, const uint64_t nskip[]) { const auto newIdx = 1 + ((state.current_idx + nskip[0] - 1) % 4); const auto nStateUpdates = (state.current_idx + nskip[0] - 1) / 4; - DynamicArray g = sfmt19937SkipAheadPolynomial(nStateUpdates); - - // - // Taking the skip ahead polynomial g, get the sum (xor) of each i'th state.x - // where the i'th coefficient of g is non-zero. - // - auto stateCopy = state.x; - decltype(state.x) resultState = {}; - for (size_t i = 0; i < g.size(); i++) { - if (g[i]) { - xorStatesInPlace(resultState, stateCopy); - } - advanceOnceInPlace(stateCopy); - } + mt_skip_ahead(state.x, &advanceOnceInPlace, nStateUpdates, + skipahead::data::sfmt19937_cache); - state.x = resultState; state.current_idx = newIdx; return VSL_ERROR_OK; diff --git a/src/vsl/aarch64/generator/optimised_generators.hpp b/src/vsl/aarch64/generator/optimised_generators.hpp index 9c8dd22..0a75546 100644 --- a/src/vsl/aarch64/generator/optimised_generators.hpp +++ b/src/vsl/aarch64/generator/optimised_generators.hpp @@ -1,15 +1,17 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ #pragma once +#include #include #include #include #include +#include #include #include #include diff --git a/src/vsl/aarch64/generator/sha3/mt2203_sha3.cpp b/src/vsl/aarch64/generator/sha3/mt2203_sha3.cpp new file mode 100644 index 0000000..f9e9531 --- /dev/null +++ b/src/vsl/aarch64/generator/sha3/mt2203_sha3.cpp @@ -0,0 +1,12 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include + +namespace openrng { +template class MT2203Generator; +} diff --git a/src/vsl/aarch64/generator/trng/nondeterministic_trng.cpp b/src/vsl/aarch64/generator/trng/nondeterministic_trng.cpp index fc24c03..84c1004 100644 --- a/src/vsl/aarch64/generator/trng/nondeterministic_trng.cpp +++ b/src/vsl/aarch64/generator/trng/nondeterministic_trng.cpp @@ -28,11 +28,6 @@ int NondeterministicGenerator::fillBits(int64_t n, return err; } -int NondeterministicGenerator::fillBits32(int64_t n, - uint32_t dst[]) { - return fillBits(n, dst); -} - int NondeterministicGenerator::fillBits64(int64_t n, uint64_t dst[]) { for (int i = 0; i < n; i++) diff --git a/src/vsl/aarch64/generator/trng/nondeterministic_trng.hpp b/src/vsl/aarch64/generator/trng/nondeterministic_trng.hpp index 63f3536..3d7f4b2 100644 --- a/src/vsl/aarch64/generator/trng/nondeterministic_trng.hpp +++ b/src/vsl/aarch64/generator/trng/nondeterministic_trng.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -15,14 +15,13 @@ template <> class NondeterministicGenerator : public NondeterministicGenerator { public: - NondeterministicGenerator() - : NondeterministicGenerator() {} + NondeterministicGenerator(int64_t brng) + : NondeterministicGenerator(brng) {} using CopyableGenerator::initialise; int initialise(const int64_t, const unsigned int[]); int fillBits(int64_t, uint32_t[]) final; - int fillBits32(int64_t, uint32_t[]) final; int fillBits64(int64_t, uint64_t[]) final; int fill(int64_t, float[]) final; int fill(int64_t, double[]) final; diff --git a/src/vsl/aarch64/utils/choose_generator.hpp b/src/vsl/aarch64/utils/choose_generator.hpp index e481cea..ffa26a0 100644 --- a/src/vsl/aarch64/utils/choose_generator.hpp +++ b/src/vsl/aarch64/utils/choose_generator.hpp @@ -37,6 +37,10 @@ Expected Generator::choose(Args &&...args) { if (SupportedFeatures::hasSha3) return create>(args...); + if constexpr (IsCompleteGenerator>) + if (SupportedFeatures::hasAes) + return create>(args...); + if constexpr (IsCompleteGenerator>) if (SupportedFeatures::hasNeon) return create>(args...); diff --git a/src/vsl/aarch64/utils/cpu_features.hpp b/src/vsl/aarch64/utils/cpu_features.hpp index 6642c4a..98a32dd 100644 --- a/src/vsl/aarch64/utils/cpu_features.hpp +++ b/src/vsl/aarch64/utils/cpu_features.hpp @@ -14,7 +14,7 @@ namespace openrng { * * When adding to this list, keep in mind that CPUFeatures is ordered. */ -enum class CPUFeatures { generic, trng, neon, sha3, sve }; +enum class CPUFeatures { generic, trng, neon, sha3, aes, sve }; inline bool operator<=(CPUFeatures a, CPUFeatures b) { return static_cast(a) <= static_cast(b); @@ -24,10 +24,14 @@ struct SupportedFeatures { const static bool hasTrng; const static bool hasNeon; const static bool hasSha3; + const static bool hasAes; const static bool hasSve; }; template concept NeonOrSha3 = CF == CPUFeatures::neon || CF == CPUFeatures::sha3; +template +concept NeonOrAes = CF == CPUFeatures::neon || CF == CPUFeatures::aes; + } // namespace openrng diff --git a/src/vsl/c_api.cpp b/src/vsl/c_api.cpp index f2355e1..c3f3c8e 100644 --- a/src/vsl/c_api.cpp +++ b/src/vsl/c_api.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -79,10 +80,17 @@ int vdRngGaussian(const openrng_int_t method, VSLStreamStatePtr stream, sigma); } -int vdRngGaussianMV(const openrng_int_t, VSLStreamStatePtr, const openrng_int_t, - double[], const openrng_int_t, const openrng_int_t, - const double *, const double *) { - return VSL_ERROR_FEATURE_NOT_IMPLEMENTED; +int vdRngGaussianMV(const openrng_int_t method, VSLStreamStatePtr stream, + const openrng_int_t n, double r[], + const openrng_int_t dimen, const openrng_int_t mstorage, + const double *a, const double *t) { + auto [generator, error] = openrng::Generator::extract(stream); + if (error) { + return error; + } + + return openrng::distribution::gaussianmv::fill(method, generator, n, dimen, + mstorage, r, a, t); } int vdRngGumbel(const openrng_int_t method, VSLStreamStatePtr stream, @@ -312,10 +320,17 @@ int vsRngGaussian(const openrng_int_t method, VSLStreamStatePtr stream, sigma); } -int vsRngGaussianMV(const openrng_int_t, VSLStreamStatePtr, const openrng_int_t, - float[], const openrng_int_t, const openrng_int_t, - const float *, const float *) { - return VSL_ERROR_FEATURE_NOT_IMPLEMENTED; +int vsRngGaussianMV(const openrng_int_t method, VSLStreamStatePtr stream, + const openrng_int_t n, float r[], const openrng_int_t dimen, + const openrng_int_t mstorage, const float *a, + const float *t) { + auto [generator, error] = openrng::Generator::extract(stream); + if (error) { + return error; + } + + return openrng::distribution::gaussianmv::fill(method, generator, n, dimen, + mstorage, r, a, t); } int vsRngGumbel(const openrng_int_t method, VSLStreamStatePtr stream, @@ -439,6 +454,18 @@ int vslDeleteStream(VSLStreamStatePtr *ptr) { int vslGetBrngProperties(const int brngId, VSLBRngProperties *const properties) { + if (brngId >= VSL_BRNG_MT2203 && brngId < VSL_BRNG_MT2203 + 6024) { + properties->StreamStateSize = 0; + properties->InitStream = nullptr; + properties->sBRng = nullptr; + properties->dBRng = nullptr; + properties->iBRng = nullptr; + properties->NSeeds = 70; + properties->IncludesZero = 1; + properties->WordSize = 4; + properties->NBits = 32; + return VSL_ERROR_OK; + } switch (brngId) { case VSL_BRNG_MCG31: @@ -538,13 +565,23 @@ int vslGetBrngProperties(const int brngId, properties->NBits = 32; break; + case VSL_BRNG_ARS5: + properties->StreamStateSize = 0; + properties->InitStream = nullptr; + properties->sBRng = nullptr; + properties->dBRng = nullptr; + properties->iBRng = nullptr; + properties->NSeeds = 8; + properties->IncludesZero = 1; + properties->WordSize = 4; + properties->NBits = 32; + break; + case VSL_BRNG_WH: case VSL_BRNG_NIEDERR: - case VSL_BRNG_MT2203: case VSL_BRNG_IABSTRACT: case VSL_BRNG_DABSTRACT: case VSL_BRNG_SABSTRACT: - case VSL_BRNG_ARS5: return VSL_ERROR_FEATURE_NOT_IMPLEMENTED; default: diff --git a/src/vsl/x86_64/generator/trng/nondeterministic_trng.cpp b/src/vsl/x86_64/generator/trng/nondeterministic_trng.cpp index e1fca71..bd7efaa 100644 --- a/src/vsl/x86_64/generator/trng/nondeterministic_trng.cpp +++ b/src/vsl/x86_64/generator/trng/nondeterministic_trng.cpp @@ -28,11 +28,6 @@ int NondeterministicGenerator::fillBits(int64_t n, return err; } -int NondeterministicGenerator::fillBits32(int64_t n, - uint32_t dst[]) { - return fillBits(n, dst); -} - int NondeterministicGenerator::fillBits64(int64_t n, uint64_t dst[]) { for (int i = 0; i < n; i++) diff --git a/src/vsl/x86_64/generator/trng/nondeterministic_trng.hpp b/src/vsl/x86_64/generator/trng/nondeterministic_trng.hpp index 63f3536..4f99fba 100644 --- a/src/vsl/x86_64/generator/trng/nondeterministic_trng.hpp +++ b/src/vsl/x86_64/generator/trng/nondeterministic_trng.hpp @@ -22,7 +22,6 @@ public: int initialise(const int64_t, const unsigned int[]); int fillBits(int64_t, uint32_t[]) final; - int fillBits32(int64_t, uint32_t[]) final; int fillBits64(int64_t, uint64_t[]) final; int fill(int64_t, float[]) final; int fill(int64_t, double[]) final; diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b2498c4..73ab44d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -46,6 +46,7 @@ add_executable(tests distributions/cauchy.cpp distributions/exponential.cpp distributions/gaussian.cpp + distributions/gaussianmv.cpp distributions/geometric.cpp distributions/gumbel.cpp distributions/laplace.cpp @@ -61,6 +62,7 @@ add_executable(tests services/get_stream_state_brng.cpp services/leapfrog.cpp services/leapfrog_quasi.cpp + services/mt2203.cpp services/new_stream_ex.cpp services/new_stream.cpp services/nondeterm.cpp @@ -116,6 +118,11 @@ catch_discover_tests( PROPERTIES ENVIRONMENT "ASAN_OPTIONS=detect_stack_use_after_return=0" ) +add_test(NAME check-json-interface + COMMAND python3 ${OPENRNG_ROOT}/tools/create_api/create_api_from_header.py ${OPENRNG_ROOT}/include/openrng.h + WORKING_DIRECTORY ${OPENRNG_ROOT}/tools/create_api +) + # check-copyright-headers relies on being in a git repository if (GIT_HASH) add_test(NAME check-copyright-headers diff --git a/test/distributions/gaussian.cpp b/test/distributions/gaussian.cpp index 4e42141..83b2776 100644 --- a/test/distributions/gaussian.cpp +++ b/test/distributions/gaussian.cpp @@ -5,7 +5,6 @@ * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ -#include #include #include #include @@ -13,7 +12,6 @@ #include #include #include -#include #include #include #include @@ -67,9 +65,8 @@ void check(auto method, T vsl, T ref, T mean, T sigma, T tol) { // optimized implementation handles this differently to our reference, and we // accept relaxing our tests to just basic checks in these cases. if (method == VSL_RNG_METHOD_GAUSSIAN_ICDF) { - const auto cdf = - std::erf((ref - mean) * (std::sqrt(2) / 2) * std::sqrt(sigma)); - const bool isExtreme = 1 - std::abs(cdf) < tol; + const auto cdf = std::erf((ref - mean) / (std::sqrt(2) * sigma)); + const bool isExtreme = 1 - std::abs(cdf) < normalisedAbsErrorBound; if (isExtreme) return; } diff --git a/test/distributions/gaussianmv.cpp b/test/distributions/gaussianmv.cpp new file mode 100644 index 0000000..e4c5501 --- /dev/null +++ b/test/distributions/gaussianmv.cpp @@ -0,0 +1,374 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +using Catch::Matchers::WithinAbs; +using Catch::Matchers::WithinULP; + +namespace { + +template const T normalisedAbsErrorBound; +template <> const auto normalisedAbsErrorBound = pow(10, -7); +template <> const auto normalisedAbsErrorBound = powf(10, -4); + +template +T getMatrixElement(const int dimen, const int mstorage, const T *t, + const int row, const int col) { + assert(row < dimen && col < dimen); + + switch (mstorage) { + case VSL_MATRIX_STORAGE_PACKED: + if (col <= row) { + return t[col * (2 * dimen - col - 1) / 2 + row]; + } + return 0; + case VSL_MATRIX_STORAGE_DIAGONAL: + if (col == row) { + return t[row]; + } + return 0; + default: + return t[row * dimen + col]; + } +} + +template struct test_data { + const int dimen; + const int mstorage; + std::vector a; + std::vector t; +}; + +/** + * Check whether a vector of multivariate Gaussian-distributed value matches a + * reference output, within an absolute error bound. + */ +template +void check(auto method, const T *vslBuffer, const T *refBuffer, auto dimen, + auto mstorage, const T *a, const T *t) { + T z[dimen]; + for (int i = 0; i < dimen; i++) { + auto vsl = vslBuffer[i]; + auto ref = refBuffer[i]; + + // Basic checks: finite output, sign bits match + REQUIRE(std::isfinite(vsl)); + REQUIRE(std::isfinite(ref)); + REQUIRE(std::signbit(vsl) == std::signbit(ref)); + + T mean = a[i]; + T scale = 0; + for (int j = 0; j <= i; j++) { + scale += getMatrixElement(dimen, mstorage, t, i, j); + } + T tol = std::abs(scale * normalisedAbsErrorBound); + + // For the ICDF case, we ensure that we always return a finite value by + // special casing inputs where erfinv(x) == +/- inf, i.e. x is +/- 1. Our + // optimized implementation handles this differently to our reference, and + // we accept relaxing our tests to just basic checks in these cases. + if (method == VSL_RNG_METHOD_GAUSSIANMV_ICDF) { + // The values in the reference buffer are generated by applying a + // transformation on a 1D normal distribution z: + // + // x = T * z + a + // + // Since T is a lower triangular matrix, z can be recovered using forward + // substitution. + T tt = 0; + for (int j = 0; j < i; j++) { + tt += z[j] * getMatrixElement(dimen, mstorage, t, i, j); + } + z[i] = (ref - mean - tt) / getMatrixElement(dimen, mstorage, t, i, i); + T cdf = std::erf(z[i] / std::sqrt(2)); + + const bool isExtreme = 1 - std::abs(cdf) < normalisedAbsErrorBound; + if (isExtreme) + // If the value in the current dimension is an extreme value, all + // subsequent dimensions will also be affected. + return; + } + + REQUIRE_THAT(vsl, WithinAbs(ref, tol)); + } +} + +} // namespace + +TEMPLATE_TEST_CASE("GaussianMV returns the same series when called iteratively", + "[gaussmv]", float, double) { + + const auto n = 100; + const auto method = GENERATE(VSL_RNG_METHOD_GAUSSIANMV_ICDF, + VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER, + VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2); + const auto mstorage = + GENERATE(VSL_MATRIX_STORAGE_FULL, VSL_MATRIX_STORAGE_PACKED, + VSL_MATRIX_STORAGE_DIAGONAL); + + const std::vector> data = { + {1, VSL_MATRIX_STORAGE_FULL, {0}, {3} }, + {2, VSL_MATRIX_STORAGE_FULL, {0, 1}, {1, 0, 2, 1} }, + {2, VSL_MATRIX_STORAGE_PACKED, {0, 1}, {1, 1, 2} }, + {2, VSL_MATRIX_STORAGE_DIAGONAL, {0, 1}, {1, 2} }, + {2, VSL_MATRIX_STORAGE_FULL, {-123.2, 234.3}, {1.23, 3.21, 0, 2}}, + {3, + VSL_MATRIX_STORAGE_FULL, {1.23, 4.56, 7.89}, + {1, 0, 0, 2, 3, 0, 4, 5, 6} }, + {3, VSL_MATRIX_STORAGE_PACKED, {1.23, 4.56, 7.89}, {1, 2, 3, 4, 5, 6}}, + {4, + VSL_MATRIX_STORAGE_FULL, {123.2, -123.2, -1, 1}, + {1, 0, 0, 0, 123, 321, 0, 0, 1, 10, 20, 0, 0.5, 0.1, 2, 1} }, + {4, + VSL_MATRIX_STORAGE_PACKED, {0, 1, -1, 2}, + {1, 2, 123.2, 1, 1, 3, 2, 1, 1.23, 1} }, + {4, VSL_MATRIX_STORAGE_DIAGONAL, {0, 1, -1, 2}, {1, 2, 3, 4} }, + {5, VSL_MATRIX_STORAGE_DIAGONAL, {0, 1, 2, 3, 4}, {1, 2, 3, 4, 5} }, + }; + + for (const auto &[dimen, mstorage, a, t] : data) { + VSLStreamStatePtr streamVector; + VSLStreamStatePtr streamScalar; + auto errcode = VSL_ERROR_OK; + + errcode = vslNewStream(&streamVector, VSL_BRNG_MCG31, 0); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = vslNewStream(&streamScalar, VSL_BRNG_MCG31, 0); + REQUIRE(errcode == VSL_ERROR_OK); + + TestType buffer[n * dimen]; + errcode = vRngGaussianMV(method, streamVector, n, buffer, dimen, + mstorage, a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + for (int i = 0; i < n; i++) { + TestType scalar[dimen]; + errcode = vRngGaussianMV(method, streamScalar, 1, scalar, dimen, + mstorage, a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + check(method, &buffer[i * dimen], scalar, dimen, mstorage, a.data(), + t.data()); + } + + errcode = vslDeleteStream(&streamVector); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = vslDeleteStream(&streamScalar); + REQUIRE(errcode == VSL_ERROR_OK); + } +} + +TEMPLATE_TEST_CASE("GaussianMV is approximately comparable to refng", + "[gaussmv]", float, double) { + const int valuesToGenerate = 600; + const auto method = GENERATE(VSL_RNG_METHOD_GAUSSIANMV_ICDF, + VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER, + VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2); + const auto skipAhead = GENERATE(0, 1, 2, 3, 100, 1000); + const auto bufferSize = GENERATE_COPY(1, 2, 3, 100, valuesToGenerate); + + // One advantage of using the MCG31 generator is the first output is always + // the seed, so we can test the generators extreme outputs by using them as + // seeds, 0 and 2^31-2. This is particular useful for ICDF because it has + // special casing for handling the singularities at the extremes. + const int seed = GENERATE(0, 1, 0x1234, 0x7ffffffe); + + const std::vector> data = { + {1, VSL_MATRIX_STORAGE_FULL, {0}, {3} }, + {2, VSL_MATRIX_STORAGE_FULL, {0, 1}, {1, 0, 2, 1} }, + {2, VSL_MATRIX_STORAGE_PACKED, {0, 1}, {1, 1, 2} }, + {2, VSL_MATRIX_STORAGE_DIAGONAL, {0, 1}, {1, 2} }, + {2, VSL_MATRIX_STORAGE_FULL, {-123.2, 234.3}, {1.23, 3.21, 0, 2}}, + {3, + VSL_MATRIX_STORAGE_FULL, {1.23, 4.56, 7.89}, + {1, 0, 0, 2, 3, 0, 4, 5, 6} }, + {3, VSL_MATRIX_STORAGE_PACKED, {1.23, 4.56, 7.89}, {1, 2, 3, 4, 5, 6}}, + {4, + VSL_MATRIX_STORAGE_FULL, {123.2, -123.2, -1, 1}, + {1, 0, 0, 0, 123, 321, 0, 0, 1, 10, 20, 0, 0.5, 0.1, 2, 1} }, + {4, + VSL_MATRIX_STORAGE_PACKED, {0, 1, -1, 2}, + {1, 2, 123.2, 1, 1, 3, 2, 1, 1.23, 1} }, + {4, VSL_MATRIX_STORAGE_DIAGONAL, {0, 1, -1, 2}, {1, 2, 3, 4} }, + {5, VSL_MATRIX_STORAGE_DIAGONAL, {0, 1, 2, 3, 4}, {1, 2, 3, 4, 5} }, + }; + + for (const auto &[dimen, mstorage, a, t] : data) { + CAPTURE(method, valuesToGenerate, skipAhead, a, t, bufferSize, seed); + + VSLStreamStatePtr vStream, rStream; + int errcode; + errcode = vslNewStream(&vStream, VSL_BRNG_MCG31, seed); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = refNewStream(&rStream, VSL_BRNG_MCG31, seed); + REQUIRE(errcode == VSL_ERROR_OK); + + // We test generation of valuesToGenerate numbers, either by filling a + // buffer of size valuesToGenerate or smaller. To keep the testing simple, + // we require valuesToGenerate to be divisible by bufferSize. + REQUIRE((valuesToGenerate / bufferSize) * bufferSize == valuesToGenerate); + + errcode = vslSkipAheadStream(vStream, skipAhead); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = refSkipAheadStream(rStream, skipAhead); + REQUIRE(errcode == VSL_ERROR_OK); + + for (int i = 0; i < valuesToGenerate; i += bufferSize) { + std::vector vslBuffer(bufferSize * dimen); + errcode = vRngGaussianMV(method, vStream, bufferSize, + vslBuffer.data(), dimen, mstorage, + a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + std::vector refBuffer(bufferSize * dimen); + errcode = rRngGaussianMV(method, rStream, bufferSize, + refBuffer.data(), dimen, mstorage, + a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + for (int i = 0; i < bufferSize; i++) { + check(method, &vslBuffer[i * dimen], &refBuffer[i * dimen], dimen, + mstorage, a.data(), t.data()); + } + } + + errcode = vslDeleteStream(&vStream); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = refDeleteStream(&rStream); + REQUIRE(errcode == VSL_ERROR_OK); + } +} + +TEMPLATE_TEST_CASE("GaussianMV bad arguments", "[gaussmv]", float, double) { + + auto n = 100; + const auto method = GENERATE(VSL_RNG_METHOD_GAUSSIANMV_ICDF, + VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER, + VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2); + CAPTURE(method); + + const auto dimen = 1; + const auto mstorage = + GENERATE(VSL_MATRIX_STORAGE_FULL, VSL_MATRIX_STORAGE_PACKED, + VSL_MATRIX_STORAGE_DIAGONAL); + + std::vector a = {0}; + std::vector t = {1}; + + TestType buffer[n * dimen]; + + VSLStreamStatePtr stream; + auto errcode = VSL_ERROR_OK; + + errcode = vslNewStream(&stream, VSL_BRNG_R250, 0); + REQUIRE(errcode == VSL_ERROR_OK); + + SECTION("Testing the first parameter (method)") { + errcode = vRngGaussianMV(0xffff, stream, n, buffer, dimen, + mstorage, a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_BADARGS); + } + + SECTION("Testing the second parameter (stream address)") { + errcode = vRngGaussianMV(method, nullptr, n, buffer, dimen, + mstorage, a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_NULL_PTR); + } + + SECTION("Testing the third parameter (the size)") { + errcode = vRngGaussianMV(method, stream, -1, buffer, dimen, + mstorage, a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_BADARGS); + } + + SECTION("Testing the fourth parameter (the buffer)") { + errcode = vRngGaussianMV(method, stream, n, nullptr, dimen, + mstorage, a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_BADARGS); + } + + SECTION("Testing the five parameter (dimension)") { + errcode = vRngGaussianMV(method, stream, n, buffer, 0, mstorage, + a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_BADARGS); + } + + SECTION("Testing the sixth parameter (matrix storage)") { + errcode = vRngGaussianMV(method, stream, n, buffer, dimen, -1, + a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_BADARGS); + } + + errcode = vslDeleteStream(&stream); + REQUIRE(errcode == VSL_ERROR_OK); +} + +TEMPLATE_TEST_CASE("GaussianMV returns same values as Gaussian when dimen = 1", + "[gaussmv]", float, double) { + + const auto n = 100; + const auto dimen = 1; + const auto mstorage = VSL_MATRIX_STORAGE_FULL; + const auto method = + GENERATE(std::make_pair(VSL_RNG_METHOD_GAUSSIAN_ICDF, + VSL_RNG_METHOD_GAUSSIANMV_ICDF), + std::make_pair(VSL_RNG_METHOD_GAUSSIAN_BOXMULLER, + VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER), + std::make_pair(VSL_RNG_METHOD_GAUSSIAN_BOXMULLER2, + VSL_RNG_METHOD_GAUSSIANMV_BOXMULLER2)); + + TestType mean = GENERATE(as{}, 0, 1, -1, 2, -2, 123.2); + TestType sigma = GENERATE(as{}, 1, 2, 123.2); + + std::vector a = {mean}; + std::vector t = {sigma}; + + VSLStreamStatePtr stream, streamMV; + TestType buffer[n], bufferMV[n]; + auto errcode = VSL_ERROR_OK; + + errcode = vslNewStream(&stream, VSL_BRNG_MCG31, 0); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = vslNewStream(&streamMV, VSL_BRNG_MCG31, 0); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = + vRngGaussian(method.first, stream, n, buffer, mean, sigma); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = vRngGaussianMV(method.second, streamMV, n, bufferMV, + dimen, mstorage, a.data(), t.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + for (int i = 0; i < n; i++) { + check(method.first, buffer + i, bufferMV + i, dimen, mstorage, a.data(), + t.data()); + } + + errcode = vslDeleteStream(&stream); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = vslDeleteStream(&streamMV); + REQUIRE(errcode == VSL_ERROR_OK); +} diff --git a/test/distributions/uniform.cpp b/test/distributions/uniform.cpp index 9751ec7..47927eb 100644 --- a/test/distributions/uniform.cpp +++ b/test/distributions/uniform.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -18,8 +18,9 @@ #include #include -#include -#include +#include +#include +#include #include using Catch::Matchers::WithinAbs; @@ -65,6 +66,18 @@ template <> std::pair getBoundsForType() { return {-(1LL << 61), -1.0}; } +/** + * Get the empirical absolute error of a Uniform distribution. + */ +template T getAbsErrorBound(T l, T u) { + // + // Error analysis is difficult, but this seems like a reasonable tight bound. + // Feel free to loosen it a small bit if the bound is too tight. + // + const T scale = 2 * std::max(std::abs(u), std::abs(l)); + return scale * std::numeric_limits::epsilon(); +} + } // namespace TEMPLATE_TEST_CASE("Uniform expected data", "[uniform]", float, double, int) { @@ -94,10 +107,65 @@ TEMPLATE_TEST_CASE("Uniform expected data", "[uniform]", float, double, int) { } TEMPLATE_TEST_CASE("Uniform is approximately comparable to refng", "[uniform]", - float, double, int) { + float, double) { + + using range = std::tuple; + auto [lower, upper] = GENERATE(table({ + range{0, 1 }, + range{0.5, 0.6 }, + range{-1, 1 }, + range{3, 7 }, + range{-5, -3 }, + range{90, 100 }, + range{9999, 10000 }, + range{-0xf'ff'ff'ff, 0xf'ff'ff'ff}, + range{0xf'ff'ff'f0, 0xf'ff'ff'ff}, + })); + + const int n = GENERATE(1, 2, 3, 4, 5, 10, 100, 1000, 4567); + const TestType tolerance = getAbsErrorBound(lower, upper); + + VSLStreamStatePtr vstream, rstream; + int errcode; + + const auto brngId = GENERATE(NEWSTREAM_SUPPORTED); + CAPTURE(brngToString(brngId)); + + errcode = vslNewStream(&vstream, brngId, 0); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = refNewStream(&rstream, brngId, 0); + REQUIRE(errcode == VSL_ERROR_OK); + + std::vector vslbuffer(n); + errcode = vRngUniform(VSL_RNG_METHOD_UNIFORM_STD, vstream, n, + vslbuffer.data(), lower, upper); + REQUIRE(errcode == VSL_ERROR_OK); + + std::vector refbuffer(n); + errcode = rRngUniform(VSL_RNG_METHOD_UNIFORM_STD, rstream, n, + refbuffer.data(), lower, upper); + REQUIRE(errcode == VSL_ERROR_OK); + + for (int i = 0; i < vslbuffer.size(); i++) { + CAPTURE(i); + CAPTURE(tolerance); + REQUIRE_THAT(vslbuffer[i], WithinAbs(refbuffer[i], tolerance)); + } + errcode = vslDeleteStream(&vstream); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = refDeleteStream(&rstream); + REQUIRE(errcode == VSL_ERROR_OK); +} + +TEST_CASE("Uniform is approximately comparable to refng - int", "[uniform]") { + + using TestType = int; const int lower = 1000; const int upper = 10000; + const int n = GENERATE(1, 2, 3, 4, 5, 10, 100, 1000, 4567); VSLStreamStatePtr vstream, rstream; int errcode; @@ -111,7 +179,6 @@ TEMPLATE_TEST_CASE("Uniform is approximately comparable to refng", "[uniform]", errcode = refNewStream(&rstream, brngId, 0); REQUIRE(errcode == VSL_ERROR_OK); - const int n = 100; std::vector vslbuffer(n); errcode = vRngUniform(VSL_RNG_METHOD_UNIFORM_STD, vstream, n, vslbuffer.data(), lower, upper); @@ -175,6 +242,45 @@ TEMPLATE_TEST_CASE("Accurate uniform is approximately comparable to refng", REQUIRE(errcode == VSL_ERROR_OK); } +TEST_CASE("Uniform distribution generates lower bound for integers", + "[uniform]") { + using range = std::tuple; + auto [lower, upper] = GENERATE(table({ + range{-10, -1}, + range{-30, 20}, + range{1, 30}, + })); + + const int n = 100; + + VSLStreamStatePtr vstream; + int errcode; + + const auto brngId = GENERATE(NEWSTREAM_SUPPORTED); + CAPTURE(brngToString(brngId)); + + errcode = vslNewStream(&vstream, brngId, 777); + REQUIRE(errcode == VSL_ERROR_OK); + + std::vector vslbuffer(n); + errcode = viRngUniform(VSL_RNG_METHOD_UNIFORM_STD, vstream, n, + vslbuffer.data(), lower, upper); + REQUIRE(errcode == VSL_ERROR_OK); + + bool generated_lower_bound = false; + for (int i = 0; i < vslbuffer.size(); i++) { + CAPTURE(i); + REQUIRE((vslbuffer[i] >= lower && vslbuffer[i] < upper)); + if (vslbuffer[i] == lower) { + generated_lower_bound = true; + } + } + REQUIRE(generated_lower_bound == true); + + errcode = vslDeleteStream(&vstream); + REQUIRE(errcode == VSL_ERROR_OK); +} + TEMPLATE_TEST_CASE("Uniform bad arguments", "[uniform]", float, double, int) { const auto n = 100; const TestType a = 0; @@ -286,4 +392,4 @@ TEMPLATE_TEST_CASE("Accurate uniform is clamped to domain", "[uniform]", float, errcode = vslDeleteStream(&stream); REQUIRE(errcode == VSL_ERROR_OK); -} +} \ No newline at end of file diff --git a/test/services/copy_stream_state.cpp b/test/services/copy_stream_state.cpp index f012166..37fb0f8 100644 --- a/test/services/copy_stream_state.cpp +++ b/test/services/copy_stream_state.cpp @@ -56,7 +56,7 @@ TEST_CASE("Copy stream state basic") { REQUIRE(errcode == VSL_ERROR_OK); } -TEST_CASE("Copy stream state skip ahead") { +TEST_CASE("Copy stream state skip ahead", "[openrng_only]") { VSLStreamStatePtr oldStream, newStream; VSLBRngProperties brngProperties; const int n = 1000; diff --git a/test/services/mt2203.cpp b/test/services/mt2203.cpp new file mode 100644 index 0000000..1ba376b --- /dev/null +++ b/test/services/mt2203.cpp @@ -0,0 +1,118 @@ +/* + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its + * affiliates + * + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#include +#include +#include +#include +#include + +#include +#include + +TEST_CASE("MT2203 new stream reference test", "[openrng_only]") { + const auto brngId = GENERATE(range(VSL_BRNG_MT2203, VSL_BRNG_MT2203 + 6024)); + const auto seed = GENERATE(0, 1, 0xfff); + + VSLStreamStatePtr vstream, rstream; + int errcode; + + errcode = vslNewStream(&vstream, brngId, seed); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = refNewStream(&rstream, brngId, seed); + REQUIRE(errcode == VSL_ERROR_OK); + + constexpr size_t nelems = 1000; + std::array vbuf, rbuf; + + errcode = viRngUniformBits(VSL_RNG_METHOD_UNIFORMBITS_STD, vstream, nelems, + vbuf.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = riRngUniformBits(VSL_RNG_METHOD_UNIFORMBITS_STD, rstream, nelems, + rbuf.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + REQUIRE(vbuf == rbuf); + + errcode = vslDeleteStream(&vstream); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = refDeleteStream(&rstream); + REQUIRE(errcode == VSL_ERROR_OK); +} + +TEST_CASE("MT2203 new stream ex reference test", "[openrng_only]") { + const auto brngId = GENERATE(range(VSL_BRNG_MT2203, VSL_BRNG_MT2203 + 6024)); + const auto params = + GENERATE(std::vector{0}, std::vector{0, 0}, + std::vector{1, 2, 3, 4, 5, 6, 7}, + std::vector(10000, 42)); + + VSLStreamStatePtr vstream, rstream; + int errcode; + + errcode = vslNewStreamEx(&vstream, brngId, params.size(), params.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = refNewStreamEx(&rstream, brngId, params.size(), params.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + constexpr size_t nelems = 1000; + std::array vbuf, rbuf; + + errcode = viRngUniformBits(VSL_RNG_METHOD_UNIFORMBITS_STD, vstream, nelems, + vbuf.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = riRngUniformBits(VSL_RNG_METHOD_UNIFORMBITS_STD, rstream, nelems, + rbuf.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + REQUIRE(vbuf == rbuf); + + errcode = vslDeleteStream(&vstream); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = refDeleteStream(&rstream); + REQUIRE(errcode == VSL_ERROR_OK); +} + +TEST_CASE("MT2203 copy stream basic") { + VSLStreamStatePtr oldStream, newStream; + const int n = 100; + int errcode; + + const auto brngId = GENERATE(range(VSL_BRNG_MT2203, VSL_BRNG_MT2203 + 6024)); + const auto seed = GENERATE(0, 1, 0xfff); + + errcode = vslNewStream(&oldStream, brngId, seed); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = vslCopyStream(&newStream, oldStream); + REQUIRE(errcode == VSL_ERROR_OK); + + std::vector oldBuffer(n); + std::vector newBuffer(n); + + errcode = viRngUniformBits(VSL_RNG_METHOD_UNIFORMBITS_STD, oldStream, n, + oldBuffer.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = viRngUniformBits(VSL_RNG_METHOD_UNIFORMBITS_STD, newStream, n, + newBuffer.data()); + REQUIRE(errcode == VSL_ERROR_OK); + + REQUIRE(oldBuffer == newBuffer); + + errcode = vslDeleteStream(&oldStream); + REQUIRE(errcode == VSL_ERROR_OK); + + errcode = vslDeleteStream(&newStream); + REQUIRE(errcode == VSL_ERROR_OK); +} diff --git a/test/services/new_stream.cpp b/test/services/new_stream.cpp index aff0c36..32df7df 100644 --- a/test/services/new_stream.cpp +++ b/test/services/new_stream.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -26,9 +26,14 @@ ExpectedDataMap<2> expectedData = { {VSL_BRNG_MRG32K3A, {0x0022a011, 0x8e4e3264}}, {VSL_BRNG_R250, {0x3abafa6c, 0x97e10ec4}}, {VSL_BRNG_MT19937, {0xd82c07cd, 0x629f6fbe}}, + {VSL_BRNG_MT2203, {0x39406633, 0x1713b68c}}, {VSL_BRNG_SFMT19937, {0x5b889b2f, 0xda3af938}}, {VSL_BRNG_PHILOX4X32X10, {0x6627e8d5, 0xe169c58d}}, {VSL_BRNG_SOBOL, {0x80000000, 0xc0000000}}, + {VSL_BRNG_ARS5, {0x7ecce06f, 0x7cdc3bca}}, + {VSL_BRNG_MT2203 + 1, {0x6733ca2e, 0xc9f4ebb4}}, + {VSL_BRNG_MT2203 + 1000, {0xe258aa1d, 0x6c9b5386}}, + {VSL_BRNG_MT2203 + 3142, {0x8ac91017, 0xe4180188}} }; } // namespace diff --git a/test/services/skip_ahead.cpp b/test/services/skip_ahead.cpp index 82e02f8..a950379 100644 --- a/test/services/skip_ahead.cpp +++ b/test/services/skip_ahead.cpp @@ -110,12 +110,6 @@ TEST_CASE("Skip ahead reference test") { const auto brngId = GENERATE(SKIPAHEAD_SUPPORTED); CAPTURE(seed, skipAhead, brngToString(brngId)); - if (skipAhead >= INT_MAX && brngId == VSL_BRNG_SFMT19937) { - SKIP( - "The current implementation of SFMT19937 is too slow to unittest large " - "skip aheads"); - } - if (brngId == VSL_BRNG_SOBOL && skipAhead >= INT_MAX) { SKIP("Skipping past the end of SOBOL is not supported."); } diff --git a/test/services/sobol.cpp b/test/services/sobol.cpp index bb45d01..bbbb5e5 100644 --- a/test/services/sobol.cpp +++ b/test/services/sobol.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -102,111 +102,111 @@ TEST_CASE("SOBOL reference test, Joe and Kuo, 50 dimensions") { VSL_USER_INIT_DIRECTION_NUMBERS | VSL_USER_PRIMITIVE_POLYMS | override_first_dim, /* Polynomials, post-processed to add x^0 and x^d term as above. */ - 3, 7, 11, 13, 19, 25, 37, 41, 47, 55, 59, 61, 67, 91, 97, 103, 109, 115, - 131, 137, 143, 145, 157, 167, 171, 185, 191, 193, 203, 211, 213, 229, 239, - 241, 247, 253, 285, 299, 301, 333, 351, 355, 357, 361, 369, 391, 397, 425, - 451, + 3u, 7u, 11u, 13u, 19u, 25u, 37u, 41u, 47u, 55u, 59u, 61u, 67u, 91u, 97u, + 103u, 109u, 115u, 131u, 137u, 143u, 145u, 157u, 167u, 171u, 185u, 191u, + 193u, 203u, 211u, 213u, 229u, 239u, 241u, 247u, 253u, 285u, 299u, 301u, + 333u, 351u, 355u, 357u, 361u, 369u, 391u, 397u, 425u, 451u, /* Max degree of any dimension. */ - 8, + 8u, /* Zero-padded initial direction numbers. */ /* Dimension 1. */ - 1, 0, 0, 0, 0, 0, 0, 0, + 1u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, /* Dimension 2. */ - 1, 3, 0, 0, 0, 0, 0, 0, + 1u, 3u, 0u, 0u, 0u, 0u, 0u, 0u, /* Dimension 3. */ - 1, 3, 1, 0, 0, 0, 0, 0, + 1u, 3u, 1u, 0u, 0u, 0u, 0u, 0u, /* Dimension 4. */ - 1, 1, 1, 0, 0, 0, 0, 0, + 1u, 1u, 1u, 0u, 0u, 0u, 0u, 0u, /* Dimension 5. */ - 1, 1, 3, 3, 0, 0, 0, 0, + 1u, 1u, 3u, 3u, 0u, 0u, 0u, 0u, /* Dimension 6. */ - 1, 3, 5, 13, 0, 0, 0, 0, + 1u, 3u, 5u, 13u, 0u, 0u, 0u, 0u, /* Dimension 7. */ - 1, 1, 5, 5, 17, 0, 0, 0, + 1u, 1u, 5u, 5u, 17u, 0u, 0u, 0u, /* Dimension 8. */ - 1, 1, 5, 5, 5, 0, 0, 0, + 1u, 1u, 5u, 5u, 5u, 0u, 0u, 0u, /* Dimension 9. */ - 1, 1, 7, 11, 19, 0, 0, 0, + 1u, 1u, 7u, 11u, 19u, 0u, 0u, 0u, /* Dimension 10. */ - 1, 1, 5, 1, 1, 0, 0, 0, + 1u, 1u, 5u, 1u, 1u, 0u, 0u, 0u, /* Dimension 11. */ - 1, 1, 1, 3, 11, 0, 0, 0, + 1u, 1u, 1u, 3u, 11u, 0u, 0u, 0u, /* Dimension 12. */ - 1, 3, 5, 5, 31, 0, 0, 0, + 1u, 3u, 5u, 5u, 31u, 0u, 0u, 0u, /* Dimension 13. */ - 1, 3, 3, 9, 7, 49, 0, 0, + 1u, 3u, 3u, 9u, 7u, 49u, 0u, 0u, /* Dimension 14. */ - 1, 1, 1, 15, 21, 21, 0, 0, + 1u, 1u, 1u, 15u, 21u, 21u, 0u, 0u, /* Dimension 15. */ - 1, 3, 1, 13, 27, 49, 0, 0, + 1u, 3u, 1u, 13u, 27u, 49u, 0u, 0u, /* Dimension 16. */ - 1, 1, 1, 15, 7, 5, 0, 0, + 1u, 1u, 1u, 15u, 7u, 5u, 0u, 0u, /* Dimension 17. */ - 1, 3, 1, 15, 13, 25, 0, 0, + 1u, 3u, 1u, 15u, 13u, 25u, 0u, 0u, /* Dimension 18. */ - 1, 1, 5, 5, 19, 61, 0, 0, + 1u, 1u, 5u, 5u, 19u, 61u, 0u, 0u, /* Dimension 19. */ - 1, 3, 7, 11, 23, 15, 103, 0, + 1u, 3u, 7u, 11u, 23u, 15u, 103u, 0u, /* Dimension 20. */ - 1, 3, 7, 13, 13, 15, 69, 0, + 1u, 3u, 7u, 13u, 13u, 15u, 69u, 0u, /* Dimension 21. */ - 1, 1, 3, 13, 7, 35, 63, 0, + 1u, 1u, 3u, 13u, 7u, 35u, 63u, 0u, /* Dimension 22. */ - 1, 3, 5, 9, 1, 25, 53, 0, + 1u, 3u, 5u, 9u, 1u, 25u, 53u, 0u, /* Dimension 23. */ - 1, 3, 1, 13, 9, 35, 107, 0, + 1u, 3u, 1u, 13u, 9u, 35u, 107u, 0u, /* Dimension 24. */ - 1, 3, 1, 5, 27, 61, 31, 0, + 1u, 3u, 1u, 5u, 27u, 61u, 31u, 0u, /* Dimension 25. */ - 1, 1, 5, 11, 19, 41, 61, 0, + 1u, 1u, 5u, 11u, 19u, 41u, 61u, 0u, /* Dimension 26. */ - 1, 3, 5, 3, 3, 13, 69, 0, + 1u, 3u, 5u, 3u, 3u, 13u, 69u, 0u, /* Dimension 27. */ - 1, 1, 7, 13, 1, 19, 1, 0, + 1u, 1u, 7u, 13u, 1u, 19u, 1u, 0u, /* Dimension 28. */ - 1, 3, 7, 5, 13, 19, 59, 0, + 1u, 3u, 7u, 5u, 13u, 19u, 59u, 0u, /* Dimension 29. */ - 1, 1, 3, 9, 25, 29, 41, 0, + 1u, 1u, 3u, 9u, 25u, 29u, 41u, 0u, /* Dimension 30. */ - 1, 3, 5, 13, 23, 1, 55, 0, + 1u, 3u, 5u, 13u, 23u, 1u, 55u, 0u, /* Dimension 31. */ - 1, 3, 7, 3, 13, 59, 17, 0, + 1u, 3u, 7u, 3u, 13u, 59u, 17u, 0u, /* Dimension 32. */ - 1, 3, 1, 3, 5, 53, 69, 0, + 1u, 3u, 1u, 3u, 5u, 53u, 69u, 0u, /* Dimension 33. */ - 1, 1, 5, 5, 23, 33, 13, 0, + 1u, 1u, 5u, 5u, 23u, 33u, 13u, 0u, /* Dimension 34. */ - 1, 1, 7, 7, 1, 61, 123, 0, + 1u, 1u, 7u, 7u, 1u, 61u, 123u, 0u, /* Dimension 35. */ - 1, 1, 7, 9, 13, 61, 49, 0, + 1u, 1u, 7u, 9u, 13u, 61u, 49u, 0u, /* Dimension 36. */ - 1, 3, 3, 5, 3, 55, 33, 0, + 1u, 3u, 3u, 5u, 3u, 55u, 33u, 0u, /* Dimension 37. */ - 1, 3, 1, 15, 31, 13, 49, 245, + 1u, 3u, 1u, 15u, 31u, 13u, 49u, 245u, /* Dimension 38. */ - 1, 3, 5, 15, 31, 59, 63, 97, + 1u, 3u, 5u, 15u, 31u, 59u, 63u, 97u, /* Dimension 39. */ - 1, 3, 1, 11, 11, 11, 77, 249, + 1u, 3u, 1u, 11u, 11u, 11u, 77u, 249u, /* Dimension 40. */ - 1, 3, 1, 11, 27, 43, 71, 9, + 1u, 3u, 1u, 11u, 27u, 43u, 71u, 9u, /* Dimension 41. */ - 1, 1, 7, 15, 21, 11, 81, 45, + 1u, 1u, 7u, 15u, 21u, 11u, 81u, 45u, /* Dimension 42. */ - 1, 3, 7, 3, 25, 31, 65, 79, + 1u, 3u, 7u, 3u, 25u, 31u, 65u, 79u, /* Dimension 43. */ - 1, 3, 1, 1, 19, 11, 3, 205, + 1u, 3u, 1u, 1u, 19u, 11u, 3u, 205u, /* Dimension 44. */ - 1, 1, 5, 9, 19, 21, 29, 157, + 1u, 1u, 5u, 9u, 19u, 21u, 29u, 157u, /* Dimension 45. */ - 1, 3, 7, 11, 1, 33, 89, 185, + 1u, 3u, 7u, 11u, 1u, 33u, 89u, 185u, /* Dimension 46. */ - 1, 3, 3, 3, 15, 9, 79, 71, + 1u, 3u, 3u, 3u, 15u, 9u, 79u, 71u, /* Dimension 47. */ - 1, 3, 7, 11, 15, 39, 119, 27, + 1u, 3u, 7u, 11u, 15u, 39u, 119u, 27u, /* Dimension 48. */ - 1, 1, 3, 1, 11, 31, 97, 225, + 1u, 1u, 3u, 1u, 11u, 31u, 97u, 225u, /* Dimension 49. */ - 1, 1, 1, 3, 23, 43, 57, 177}; + 1u, 1u, 1u, 3u, 23u, 43u, 57u, 177u}; VSLStreamStatePtr vsl_stream, ref_stream; int errcode; @@ -484,116 +484,116 @@ TEST_CASE("SOBOL VSL_QRNG_OVERRIDE_1ST_DIM_INIT, Joe and Kuo, 50 dimensions") { S. Joe and F. Y. Kuo, Constructing Sobol sequences with better two-dimensional projections, SIAM J. Sci. Comput. 30, 2635-2654 (2008). */ const std::vector params_no_override{ - 50, + 50u, /* Special flags. */ VSL_USER_QRNG_INITIAL_VALUES, VSL_USER_INIT_DIRECTION_NUMBERS | VSL_USER_PRIMITIVE_POLYMS, /* Polynomials, post-processed to add x^0 and x^d term as above. */ - 3, 7, 11, 13, 19, 25, 37, 41, 47, 55, 59, 61, 67, 91, 97, 103, 109, 115, - 131, 137, 143, 145, 157, 167, 171, 185, 191, 193, 203, 211, 213, 229, 239, - 241, 247, 253, 285, 299, 301, 333, 351, 355, 357, 361, 369, 391, 397, 425, - 451, + 3u, 7u, 11u, 13u, 19u, 25u, 37u, 41u, 47u, 55u, 59u, 61u, 67u, 91u, 97u, + 103u, 109u, 115u, 131u, 137u, 143u, 145u, 157u, 167u, 171u, 185u, 191u, + 193u, 203u, 211u, 213u, 229u, 239u, 241u, 247u, 253u, 285u, 299u, 301u, + 333u, 351u, 355u, 357u, 361u, 369u, 391u, 397u, 425u, 451u, /* Max degree of any dimension. */ - 8, + 8u, /* Zero-padded initial direction numbers. */ /* Dimension 1. */ - 1, 0, 0, 0, 0, 0, 0, 0, + 1u, 0u, 0u, 0u, 0u, 0u, 0u, 0u, /* Dimension 2. */ - 1, 3, 0, 0, 0, 0, 0, 0, + 1u, 3u, 0u, 0u, 0u, 0u, 0u, 0u, /* Dimension 3. */ - 1, 3, 1, 0, 0, 0, 0, 0, + 1u, 3u, 1u, 0u, 0u, 0u, 0u, 0u, /* Dimension 4. */ - 1, 1, 1, 0, 0, 0, 0, 0, + 1u, 1u, 1u, 0u, 0u, 0u, 0u, 0u, /* Dimension 5. */ - 1, 1, 3, 3, 0, 0, 0, 0, + 1u, 1u, 3u, 3u, 0u, 0u, 0u, 0u, /* Dimension 6. */ - 1, 3, 5, 13, 0, 0, 0, 0, + 1u, 3u, 5u, 13u, 0u, 0u, 0u, 0u, /* Dimension 7. */ - 1, 1, 5, 5, 17, 0, 0, 0, + 1u, 1u, 5u, 5u, 17u, 0u, 0u, 0u, /* Dimension 8. */ - 1, 1, 5, 5, 5, 0, 0, 0, + 1u, 1u, 5u, 5u, 5u, 0u, 0u, 0u, /* Dimension 9. */ - 1, 1, 7, 11, 19, 0, 0, 0, + 1u, 1u, 7u, 11u, 19u, 0u, 0u, 0u, /* Dimension 10. */ - 1, 1, 5, 1, 1, 0, 0, 0, + 1u, 1u, 5u, 1u, 1u, 0u, 0u, 0u, /* Dimension 11. */ - 1, 1, 1, 3, 11, 0, 0, 0, + 1u, 1u, 1u, 3u, 11u, 0u, 0u, 0u, /* Dimension 12. */ - 1, 3, 5, 5, 31, 0, 0, 0, + 1u, 3u, 5u, 5u, 31u, 0u, 0u, 0u, /* Dimension 13. */ - 1, 3, 3, 9, 7, 49, 0, 0, + 1u, 3u, 3u, 9u, 7u, 49u, 0u, 0u, /* Dimension 14. */ - 1, 1, 1, 15, 21, 21, 0, 0, + 1u, 1u, 1u, 15u, 21u, 21u, 0u, 0u, /* Dimension 15. */ - 1, 3, 1, 13, 27, 49, 0, 0, + 1u, 3u, 1u, 13u, 27u, 49u, 0u, 0u, /* Dimension 16. */ - 1, 1, 1, 15, 7, 5, 0, 0, + 1u, 1u, 1u, 15u, 7u, 5u, 0u, 0u, /* Dimension 17. */ - 1, 3, 1, 15, 13, 25, 0, 0, + 1u, 3u, 1u, 15u, 13u, 25u, 0u, 0u, /* Dimension 18. */ - 1, 1, 5, 5, 19, 61, 0, 0, + 1u, 1u, 5u, 5u, 19u, 61u, 0u, 0u, /* Dimension 19. */ - 1, 3, 7, 11, 23, 15, 103, 0, + 1u, 3u, 7u, 11u, 23u, 15u, 103u, 0u, /* Dimension 20. */ - 1, 3, 7, 13, 13, 15, 69, 0, + 1u, 3u, 7u, 13u, 13u, 15u, 69u, 0u, /* Dimension 21. */ - 1, 1, 3, 13, 7, 35, 63, 0, + 1u, 1u, 3u, 13u, 7u, 35u, 63u, 0u, /* Dimension 22. */ - 1, 3, 5, 9, 1, 25, 53, 0, + 1u, 3u, 5u, 9u, 1u, 25u, 53u, 0u, /* Dimension 23. */ - 1, 3, 1, 13, 9, 35, 107, 0, + 1u, 3u, 1u, 13u, 9u, 35u, 107u, 0u, /* Dimension 24. */ - 1, 3, 1, 5, 27, 61, 31, 0, + 1u, 3u, 1u, 5u, 27u, 61u, 31u, 0u, /* Dimension 25. */ - 1, 1, 5, 11, 19, 41, 61, 0, + 1u, 1u, 5u, 11u, 19u, 41u, 61u, 0u, /* Dimension 26. */ - 1, 3, 5, 3, 3, 13, 69, 0, + 1u, 3u, 5u, 3u, 3u, 13u, 69u, 0u, /* Dimension 27. */ - 1, 1, 7, 13, 1, 19, 1, 0, + 1u, 1u, 7u, 13u, 1u, 19u, 1u, 0u, /* Dimension 28. */ - 1, 3, 7, 5, 13, 19, 59, 0, + 1u, 3u, 7u, 5u, 13u, 19u, 59u, 0u, /* Dimension 29. */ - 1, 1, 3, 9, 25, 29, 41, 0, + 1u, 1u, 3u, 9u, 25u, 29u, 41u, 0u, /* Dimension 30. */ - 1, 3, 5, 13, 23, 1, 55, 0, + 1u, 3u, 5u, 13u, 23u, 1u, 55u, 0u, /* Dimension 31. */ - 1, 3, 7, 3, 13, 59, 17, 0, + 1u, 3u, 7u, 3u, 13u, 59u, 17u, 0u, /* Dimension 32. */ - 1, 3, 1, 3, 5, 53, 69, 0, + 1u, 3u, 1u, 3u, 5u, 53u, 69u, 0u, /* Dimension 33. */ - 1, 1, 5, 5, 23, 33, 13, 0, + 1u, 1u, 5u, 5u, 23u, 33u, 13u, 0u, /* Dimension 34. */ - 1, 1, 7, 7, 1, 61, 123, 0, + 1u, 1u, 7u, 7u, 1u, 61u, 123u, 0u, /* Dimension 35. */ - 1, 1, 7, 9, 13, 61, 49, 0, + 1u, 1u, 7u, 9u, 13u, 61u, 49u, 0u, /* Dimension 36. */ - 1, 3, 3, 5, 3, 55, 33, 0, + 1u, 3u, 3u, 5u, 3u, 55u, 33u, 0u, /* Dimension 37. */ - 1, 3, 1, 15, 31, 13, 49, 245, + 1u, 3u, 1u, 15u, 31u, 13u, 49u, 245u, /* Dimension 38. */ - 1, 3, 5, 15, 31, 59, 63, 97, + 1u, 3u, 5u, 15u, 31u, 59u, 63u, 97u, /* Dimension 39. */ - 1, 3, 1, 11, 11, 11, 77, 249, + 1u, 3u, 1u, 11u, 11u, 11u, 77u, 249u, /* Dimension 40. */ - 1, 3, 1, 11, 27, 43, 71, 9, + 1u, 3u, 1u, 11u, 27u, 43u, 71u, 9u, /* Dimension 41. */ - 1, 1, 7, 15, 21, 11, 81, 45, + 1u, 1u, 7u, 15u, 21u, 11u, 81u, 45u, /* Dimension 42. */ - 1, 3, 7, 3, 25, 31, 65, 79, + 1u, 3u, 7u, 3u, 25u, 31u, 65u, 79u, /* Dimension 43. */ - 1, 3, 1, 1, 19, 11, 3, 205, + 1u, 3u, 1u, 1u, 19u, 11u, 3u, 205u, /* Dimension 44. */ - 1, 1, 5, 9, 19, 21, 29, 157, + 1u, 1u, 5u, 9u, 19u, 21u, 29u, 157u, /* Dimension 45. */ - 1, 3, 7, 11, 1, 33, 89, 185, + 1u, 3u, 7u, 11u, 1u, 33u, 89u, 185u, /* Dimension 46. */ - 1, 3, 3, 3, 15, 9, 79, 71, + 1u, 3u, 3u, 3u, 15u, 9u, 79u, 71u, /* Dimension 47. */ - 1, 3, 7, 11, 15, 39, 119, 27, + 1u, 3u, 7u, 11u, 15u, 39u, 119u, 27u, /* Dimension 48. */ - 1, 1, 3, 1, 11, 31, 97, 225, + 1u, 1u, 3u, 1u, 11u, 31u, 97u, 225u, /* Dimension 49. */ - 1, 1, 1, 3, 23, 43, 57, 177}; + 1u, 1u, 1u, 3u, 23u, 43u, 57u, 177u}; int errcode; constexpr int num_vectors = 20; diff --git a/test/utils/distribution_templates.hpp b/test/utils/distribution_templates.hpp index 05fc204..35d4ee4 100644 --- a/test/utils/distribution_templates.hpp +++ b/test/utils/distribution_templates.hpp @@ -52,6 +52,22 @@ template rngGaussianFunction *rRngGaussian; template <> const auto rRngGaussian = rsRngGaussian; template <> const auto rRngGaussian = rdRngGaussian; +template +using rngGaussianMVFunction = int(const openrng_int_t method, + VSLStreamStatePtr stream, + const openrng_int_t n, T r[], + const openrng_int_t dimen, + const openrng_int_t mstorage, const T *a, + const T *t); + +template rngGaussianMVFunction *vRngGaussianMV; +template <> const auto vRngGaussianMV = vsRngGaussianMV; +template <> const auto vRngGaussianMV = vdRngGaussianMV; + +template rngGaussianMVFunction *rRngGaussianMV; +template <> const auto rRngGaussianMV = rsRngGaussianMV; +template <> const auto rRngGaussianMV = rdRngGaussianMV; + template using rngGumbelFunction = int(const openrng_int_t method, VSLStreamStatePtr stream, const openrng_int_t n, diff --git a/test/utils/names_map.hpp b/test/utils/names_map.hpp index 9d35b4e..74ea00c 100644 --- a/test/utils/names_map.hpp +++ b/test/utils/names_map.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -11,6 +11,10 @@ #include static std::string brngToString(openrng_int_t method) { + if (method >= VSL_BRNG_MT2203 && method < VSL_BRNG_MT2203 + 6024) { + return "MT2203 + " + std::to_string(method - VSL_BRNG_MT2203); + } + switch (method) { case VSL_BRNG_MCG31: return "MCG31"; @@ -28,8 +32,6 @@ static std::string brngToString(openrng_int_t method) { return "NIEDERR"; case VSL_BRNG_MT19937: return "MT19937"; - case VSL_BRNG_MT2203: - return "MT2203"; case VSL_BRNG_IABSTRACT: return "IABSTRACT"; case VSL_BRNG_DABSTRACT: diff --git a/tools/copyright_header/copyright_header.py b/tools/copyright_header/copyright_header.py index c2105d4..78def6b 100755 --- a/tools/copyright_header/copyright_header.py +++ b/tools/copyright_header/copyright_header.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +# SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates # # # SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -10,29 +10,32 @@ import os import sys from subprocess import run, PIPE from pathlib import Path +import re cc_header = """\ -/* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its - * affiliates - * - * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception - */ +/\* + \* SPDX-FileCopyrightText: Copyright ([0-9,-]+) Arm Limited and/or its + \* affiliates + \* + \* SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + \*/ """ py_header= """\ #!/usr/bin/env python3 # -# SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +# SPDX-FileCopyrightText: Copyright ([0-9,-]+) Arm Limited and/or its affiliates # # # SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception # """ -def contents_has_valid_licence(contents, prefix): - n_lines_header = prefix.count('\n') - return ''.join(contents[:n_lines_header]) == prefix +def contents_has_valid_licence(contents, prefix, expected_year): + n_lines_header = prefix.count('\n') + header_re = re.compile(prefix, re.MULTILINE) + match = header_re.match(''.join(contents[:n_lines_header])) + return match and expected_year in match.group(1) def get_files_with_extension(extension): @@ -47,10 +50,14 @@ def main(): invalid = [] for filename in get_files_with_extension(CODE_FILES): header = py_header if filename.suffix == ".py" else cc_header + cmd = f"git log -1 --format=%cd --date=short {filename}" + output = run(cmd, shell=True, stdout = PIPE, check=True) + # The date will be in format YYYY-MM-DD + yyyy_change = output.stdout.decode().strip()[0:4] with open(filename, encoding="utf8") as f: contents = f.readlines() - if not contents_has_valid_licence(contents, header): - invalid.append(filename) + if not contents_has_valid_licence(contents, header, yyyy_change): + invalid.append((filename, yyyy_change)) if len(invalid) > 0: print(f"Files with invalid copyright header:") diff --git a/tools/create_api/create_api_from_header.py b/tools/create_api/create_api_from_header.py new file mode 100755 index 0000000..c144df3 --- /dev/null +++ b/tools/create_api/create_api_from_header.py @@ -0,0 +1,137 @@ +#!/usr/bin/env python3 +# +# SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates +# +# +# SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception +# + +from argparse import ArgumentParser +import json +from pathlib import Path +import re +from subprocess import run +import sys + +def separate_arguments(arguments_str: str) -> list: + arguments = [] + parameters = arguments_str.split(',') + for parameter in parameters: + parameter = parameter.strip() + words = parameter.split(' ') + + ## Let's transform arrays passed as [] into pointers + if words[-1].endswith('[]'): + words[-1] = '*' + words[-1][:-2] + + if words[-1].startswith('*'): + words[-1] = words[-1][1:] + words[-2] = words[-2] + '*' + + arguments.append({'name':words[-1],'type':' '.join(words[:-1])}) + return arguments + +def create_api_from_header(include_file: Path) -> list: + + # We know the function declaration in OpenRNG returns an int and + # they are all of the form `int *`. Therefore this script does not + # support functions that return anything apart from int. + re_fct = '^int\s+([a-zA-Z0-9]+)\(([a-zA-Z\*\[\],\s]+)\);\n$' + re_fct = re.compile(re_fct) + + re_multiline_fct = '^int\s+([a-zA-Z0-9]+)\(([a-zA-Z0-9*_\[\],\s]+),\n$' + re_multiline_fct = re.compile(re_multiline_fct) + + otherlines_fct = '\s+([a-zA-Z0-9*_\[\],\s]+)(,|\);)\n' + otherlines_fct = re.compile(otherlines_fct) + + lines = [] + with open(include_file, "r") as f: + lines = f.readlines() + + functions = [] + + l_c = 0 + while l_c < len(lines) : + one_line_fct = re_fct.match(lines[l_c]) + more_than_one_line = re_multiline_fct.match(lines[l_c]) + if one_line_fct: + details = {} + details['returnType' ] = 'int' + details['name'] = one_line_fct.group(1) + + arguments = [] + if one_line_fct.group(2) != "void": + arguments = separate_arguments(one_line_fct.group(2)) + + details['parameters'] = arguments + functions.append(details) + if more_than_one_line: + details = {} + details['returnType' ] = 'int' + details['name'] = more_than_one_line.group(1) + + assert more_than_one_line.group(2) != "void", f"{more_than_one_line.group(2)}" + arguments = separate_arguments(more_than_one_line.group(2)) + + next_line = l_c + 1 + done_at_least_once = False + finished_def = False + while( finished_def == False and otherlines_fct.match(lines[next_line])): + matched = otherlines_fct.match(lines[next_line]) + extra_args =separate_arguments(matched.group(1)) + arguments.extend(extra_args) + if matched.group(2) == ');': + finished_def=True + done_at_least_once = True + next_line += 1 + + l_c = next_line - 1 + assert done_at_least_once, f"{lines[next_line]}" + + details['parameters'] = arguments + functions.append(details) + l_c +=1 + + return functions + +def print_differences(ref_fcts, gen_fcts): + def rigenerate_declaration(d: dict)->str: + pars = ', '.join([f"{arg['type']} {arg['name']}" for arg in d['parameters']]) + return f"{d['returnType']} {d['name']}({pars});" + + + s_rf = set(map(rigenerate_declaration,ref_fcts)) + s_gf = set(map(rigenerate_declaration,gen_fcts)) + + print("Functions in static json but not generated from header") + print( s_rf.difference(s_gf) ) + + print("Functions from header but not in static json") + print( s_gf.difference(s_rf) ) + +if __name__ == "__main__": + parser = ArgumentParser() + + parser.add_argument("includefile", type=Path, help='Path to include file for openrng') + parser.add_argument("--output", type=Path) + + args = parser.parse_args() + + input_file: Path = args.includefile.resolve() + + fcts = create_api_from_header(input_file) + + # Check against the static openrng.h.json file + if args.output: + output_file = output / f'{input_file.name}.json' + output_file.write_text(json.dumps(fcts, indent=2)) + else: + ref_path = Path('./openrng.h.json') + ref_fcts = json.loads(ref_path.read_text()) + + if fcts != ref_fcts: + print_differences(ref_fcts, fcts) + sys.exit(1) + + sys.exit(0) \ No newline at end of file diff --git a/tools/create_api/create_link_test.py b/tools/create_api/create_link_test.py index f38d7c9..f831615 100755 --- a/tools/create_api/create_link_test.py +++ b/tools/create_api/create_link_test.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +# SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates # # # SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -12,10 +12,6 @@ import json from pathlib import Path -# If running via a REPL, you will need to define __file__. -script_dir = Path(__file__).parent.resolve() - - source_template = """\ // This file was created by {script_name} @@ -32,7 +28,7 @@ int main() {{ def to_source(data): methods = '\n '.join( - f'{d["method"]}({", ".join("0" for _ in d["parameters"])});' + f'{d["name"]}({", ".join("0" for _ in d["parameters"])});' for d in data ) return source_template.format(script_name=__file__, methods=methods) @@ -43,7 +39,9 @@ if __name__ == '__main__': parser.add_argument('output', type=Path) args = parser.parse_args() - data = json.loads((script_dir / 'api.json').read_text()) + input_path = Path('./').resolve() + + data = json.loads(( input_path / 'openrng.h.json').read_text()) output: Path = args.output output.write_text(to_source(data)) diff --git a/tools/create_api/openrng.h.json b/tools/create_api/openrng.h.json new file mode 100644 index 0000000..2daccd2 --- /dev/null +++ b/tools/create_api/openrng.h.json @@ -0,0 +1,1511 @@ +[ + { + "returnType": "int", + "name": "vdRngBeta", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "p", + "type": "const double" + }, + { + "name": "q", + "type": "const double" + }, + { + "name": "alpha", + "type": "const double" + }, + { + "name": "beta", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "vdRngCauchy", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "beta", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "vdRngChiSquare", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "v", + "type": "const int" + } + ] + }, + { + "returnType": "int", + "name": "vdRngExponential", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "beta", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "vdRngGamma", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "alpha", + "type": "const double" + }, + { + "name": "beta", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "vdRngGaussian", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "sigma", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "vdRngGaussianMV", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "dimen", + "type": "const openrng_int_t" + }, + { + "name": "mstorage", + "type": "const openrng_int_t" + }, + { + "name": "a", + "type": "const double*" + }, + { + "name": "t", + "type": "const double*" + } + ] + }, + { + "returnType": "int", + "name": "vdRngGumbel", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "beta", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "vdRngLaplace", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "beta", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "vdRngLognormal", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "alpha", + "type": "const double" + }, + { + "name": "sigma", + "type": "const double" + }, + { + "name": "b", + "type": "const double" + }, + { + "name": "beta", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "vdRngRayleigh", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "beta", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "vdRngUniform", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "b", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "vdRngWeibull", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "double*" + }, + { + "name": "alpha", + "type": "const double" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "beta", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "viRngBernoulli", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "int*" + }, + { + "name": "p", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "viRngBinomial", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "int*" + }, + { + "name": "ntrial", + "type": "const int" + }, + { + "name": "p", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "viRngGeometric", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "int*" + }, + { + "name": "p", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "viRngHypergeometric", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "int*" + }, + { + "name": "l", + "type": "const int" + }, + { + "name": "s", + "type": "const int" + }, + { + "name": "m", + "type": "const int" + } + ] + }, + { + "returnType": "int", + "name": "viRngMultinomial", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "int*" + }, + { + "name": "ntrial", + "type": "const int" + }, + { + "name": "k", + "type": "const int" + }, + { + "name": "p", + "type": "const double*" + } + ] + }, + { + "returnType": "int", + "name": "viRngNegBinomial", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "int*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "p", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "viRngNegbinomial", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "int*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "p", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "viRngPoisson", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "int*" + }, + { + "name": "lambda", + "type": "const double" + } + ] + }, + { + "returnType": "int", + "name": "viRngPoissonV", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "int*" + }, + { + "name": "lambda", + "type": "const double*" + } + ] + }, + { + "returnType": "int", + "name": "viRngUniform", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "int*" + }, + { + "name": "a", + "type": "const int" + }, + { + "name": "b", + "type": "const int" + } + ] + }, + { + "returnType": "int", + "name": "viRngUniformBits", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "buffer", + "type": "unsigned int*" + } + ] + }, + { + "returnType": "int", + "name": "viRngUniformBits32", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "buffer", + "type": "unsigned int*" + } + ] + }, + { + "returnType": "int", + "name": "viRngUniformBits64", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "buffer", + "type": "openrng_uint64_t*" + } + ] + }, + { + "returnType": "int", + "name": "vsRngBeta", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "p", + "type": "const float" + }, + { + "name": "q", + "type": "const float" + }, + { + "name": "alpha", + "type": "const float" + }, + { + "name": "beta", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vsRngCauchy", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "a", + "type": "const float" + }, + { + "name": "beta", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vsRngChiSquare", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "v", + "type": "const int" + } + ] + }, + { + "returnType": "int", + "name": "vsRngExponential", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "a", + "type": "const float" + }, + { + "name": "beta", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vsRngGamma", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "a", + "type": "const float" + }, + { + "name": "alpha", + "type": "const float" + }, + { + "name": "beta", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vsRngGaussian", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "a", + "type": "const float" + }, + { + "name": "sigma", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vsRngGaussianMV", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "dimen", + "type": "const openrng_int_t" + }, + { + "name": "mstorage", + "type": "const openrng_int_t" + }, + { + "name": "a", + "type": "const float*" + }, + { + "name": "t", + "type": "const float*" + } + ] + }, + { + "returnType": "int", + "name": "vsRngGumbel", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "a", + "type": "const float" + }, + { + "name": "beta", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vsRngLaplace", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "a", + "type": "const float" + }, + { + "name": "beta", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vsRngLognormal", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "alpha", + "type": "const float" + }, + { + "name": "sigma", + "type": "const float" + }, + { + "name": "b", + "type": "const float" + }, + { + "name": "beta", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vsRngRayleigh", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "a", + "type": "const float" + }, + { + "name": "beta", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vsRngUniform", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "a", + "type": "const float" + }, + { + "name": "b", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vsRngWeibull", + "parameters": [ + { + "name": "method", + "type": "const openrng_int_t" + }, + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "r", + "type": "float*" + }, + { + "name": "alpha", + "type": "const float" + }, + { + "name": "a", + "type": "const float" + }, + { + "name": "beta", + "type": "const float" + } + ] + }, + { + "returnType": "int", + "name": "vslCopyStream", + "parameters": [ + { + "name": "newstream", + "type": "VSLStreamStatePtr*" + }, + { + "name": "srcstream", + "type": "const VSLStreamStatePtr" + } + ] + }, + { + "returnType": "int", + "name": "vslCopyStreamState", + "parameters": [ + { + "name": "dststream", + "type": "VSLStreamStatePtr" + }, + { + "name": "srcstream", + "type": "const VSLStreamStatePtr" + } + ] + }, + { + "returnType": "int", + "name": "vslDeleteStream", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr*" + } + ] + }, + { + "returnType": "int", + "name": "vslGetBrngProperties", + "parameters": [ + { + "name": "brngId", + "type": "const int" + }, + { + "name": "properties", + "type": "VSLBRngProperties *const" + } + ] + }, + { + "returnType": "int", + "name": "vslGetNumRegBrngs", + "parameters": [] + }, + { + "returnType": "int", + "name": "vslGetStreamSize", + "parameters": [ + { + "name": "stream", + "type": "const VSLStreamStatePtr" + } + ] + }, + { + "returnType": "int", + "name": "vslGetStreamStateBrng", + "parameters": [ + { + "name": "stream", + "type": "const VSLStreamStatePtr" + } + ] + }, + { + "returnType": "int", + "name": "vslLeapfrogStream", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "k", + "type": "const openrng_int_t" + }, + { + "name": "nstreams", + "type": "const openrng_int_t" + } + ] + }, + { + "returnType": "int", + "name": "vslLoadStreamF", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr*" + }, + { + "name": "fname", + "type": "const char*" + } + ] + }, + { + "returnType": "int", + "name": "vslLoadStreamM", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr*" + }, + { + "name": "memptr", + "type": "const char*" + } + ] + }, + { + "returnType": "int", + "name": "vslNewStream", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr*" + }, + { + "name": "brng", + "type": "const openrng_int_t" + }, + { + "name": "seed", + "type": "const openrng_uint_t" + } + ] + }, + { + "returnType": "int", + "name": "vslNewStreamEx", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr*" + }, + { + "name": "brng", + "type": "const openrng_int_t" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "params", + "type": "const unsigned int*" + } + ] + }, + { + "returnType": "int", + "name": "vslRegisterBrng", + "parameters": [ + { + "name": "properties", + "type": "const VSLBRngProperties*" + } + ] + }, + { + "returnType": "int", + "name": "vslSaveStreamF", + "parameters": [ + { + "name": "stream", + "type": "const VSLStreamStatePtr" + }, + { + "name": "fname", + "type": "const char*" + } + ] + }, + { + "returnType": "int", + "name": "vslSaveStreamM", + "parameters": [ + { + "name": "stream", + "type": "const VSLStreamStatePtr" + }, + { + "name": "memptr", + "type": "char*" + } + ] + }, + { + "returnType": "int", + "name": "vslSkipAheadStream", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "nskip", + "type": "const long long int" + } + ] + }, + { + "returnType": "int", + "name": "vslSkipAheadStreamEx", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "nskip", + "type": "const openrng_uint64_t*" + } + ] + }, + { + "returnType": "int", + "name": "vsldNewAbstractStream", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr*" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "dbuf", + "type": "const double*" + }, + { + "name": "a", + "type": "const double" + }, + { + "name": "b", + "type": "const double" + }, + { + "name": "dcallback", + "type": "const dUpdateFuncPtr" + } + ] + }, + { + "returnType": "int", + "name": "vsliNewAbstractStream", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr*" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "ibuf", + "type": "const unsigned int*" + }, + { + "name": "a", + "type": "const iUpdateFuncPtr" + } + ] + }, + { + "returnType": "int", + "name": "vslsNewAbstractStream", + "parameters": [ + { + "name": "stream", + "type": "VSLStreamStatePtr*" + }, + { + "name": "n", + "type": "const openrng_int_t" + }, + { + "name": "sbuf", + "type": "const float*" + }, + { + "name": "a", + "type": "const float" + }, + { + "name": "b", + "type": "const float" + }, + { + "name": "scallback", + "type": "const sUpdateFuncPtr" + } + ] + } +] \ No newline at end of file diff --git a/tools/create_support_defines/create_support_defines.py b/tools/create_support_defines/create_support_defines.py index 63ed994..b721bd1 100755 --- a/tools/create_support_defines/create_support_defines.py +++ b/tools/create_support_defines/create_support_defines.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +# SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates # # # SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -28,11 +28,11 @@ be #define UNIFORMBITS32_UNSUPPORTED VSL_BRNG_MCG31, VSL_BRNG_MRG32K3A, VSL_BRNG_R250 #define UNIFORMBITS64_SUPPORTED VSL_BRNG_MT19937 #define UNIFORMBITS64_UNSUPPORTED VSL_BRNG_MCG31, VSL_BRNG_MRG32K3A, VSL_BRNG_R250 - """ import json from pathlib import Path +import platform SCRIPTS_DIR = Path(__file__).resolve().parent @@ -82,12 +82,18 @@ def transformData(data): statuses = data['statuses'] generatorDataList = data['generators'] + # Because the MT2203 does not satisfy bitwise reproducibility with any + # other VSL library and we rely on its separate statistical testing, + # unless on aarch64, MT2203 is not tested against refng. + include_mt2203 = platform.machine() == "aarch64" + return { feature: { status: [ f'VSL_BRNG_{gen["method"]}' for gen in generatorDataList - if gen["featureStatus"].get(feature) == status + if gen["featureStatus"].get(feature) == status and + (include_mt2203 or not gen["method"].startswith("MT2203")) ] for status in statuses } diff --git a/tools/create_support_defines/generators.json b/tools/create_support_defines/generators.json index 0e74b07..12c6806 100644 --- a/tools/create_support_defines/generators.json +++ b/tools/create_support_defines/generators.json @@ -103,7 +103,49 @@ { "method": "MT2203", "featureStatus": { - "newStream": "notImplemented" + "newStream": "supported", + "newStreamEx": "supported", + "leapfrog": "unsupported", + "skipAhead": "unsupported", + "skipAheadEx": "unsupported", + "uniformBits32": "supported", + "uniformBits64": "supported" + } + }, + { + "method": "MT2203 + 1", + "featureStatus": { + "newStream": "supported", + "newStreamEx": "supported", + "leapfrog": "unsupported", + "skipAhead": "unsupported", + "skipAheadEx": "unsupported", + "uniformBits32": "supported", + "uniformBits64": "supported" + } + }, + { + "method": "MT2203 + 1000", + "featureStatus": { + "newStream": "supported", + "newStreamEx": "supported", + "leapfrog": "unsupported", + "skipAhead": "unsupported", + "skipAheadEx": "unsupported", + "uniformBits32": "supported", + "uniformBits64": "supported" + } + }, + { + "method": "MT2203 + 3142", + "featureStatus": { + "newStream": "supported", + "newStreamEx": "supported", + "leapfrog": "unsupported", + "skipAhead": "unsupported", + "skipAheadEx": "unsupported", + "uniformBits32": "supported", + "uniformBits64": "supported" } }, { @@ -150,7 +192,13 @@ { "method": "ARS5", "featureStatus": { - "newStream": "notImplemented" + "newStream": "supported", + "newStreamEx": "supported", + "leapfrog": "unsupported", + "skipAhead": "supported", + "skipAheadEx": "supported", + "uniformBits32": "supported", + "uniformBits64": "supported" } }, { -- GitLab From ad42487b6a572be86761c37be40efcbc726bc18f Mon Sep 17 00:00:00 2001 From: Paolo Tricerri Date: Mon, 14 Apr 2025 20:46:24 +0000 Subject: [PATCH 2/2] Update copyright headers related to OpenRNG 25.04 Patch also contain the addition of a json field for our benchmarks. --- bench/include/bench.hpp | 2 +- bench/include/defines.hpp | 2 +- bench/scripts/benchmarks.py | 2 +- bench/scripts/generate_bench.py | 2 +- src/generic/distributions/gaussianmv.hpp | 2 +- src/generic/distributions/kernels/gaussianmv.hpp | 2 +- src/generic/generator/ars5.cpp | 2 +- src/generic/generator/copyable_generator.hpp | 2 +- src/generic/generator/mcg59.cpp | 2 +- src/generic/generator/philox4x3210.cpp | 2 +- src/generic/generator/quad_counter_based_generator.hpp | 2 +- src/generic/generator/sfmt19937.cpp | 2 +- src/math/util.hpp | 2 +- src/utils/mt_skip_ahead.hpp | 2 +- src/utils/mt_skip_ahead_data.hpp | 2 +- src/utils/ring_buffer.hpp | 2 +- src/utils/uint128.hpp | 2 +- src/vsl/aarch64/cpu_features.cpp | 2 +- src/vsl/aarch64/distributions/kernels/neon/box_muller.hpp | 2 +- src/vsl/aarch64/distributions/kernels/neon/gaussianmv.hpp | 2 +- src/vsl/aarch64/distributions/kernels/neon/laplace.hpp | 2 +- src/vsl/aarch64/distributions/kernels/optimised_kernels.hpp | 2 +- src/vsl/aarch64/generator/aes/ars5_aes.cpp | 2 +- src/vsl/aarch64/generator/neon/ars5_neon.cpp | 2 +- src/vsl/aarch64/generator/neon/ars5_neon_impl.hpp | 2 +- src/vsl/aarch64/generator/neon/mcg59_neon.cpp | 2 +- src/vsl/aarch64/generator/neon/philox4x3210_neon_impl.hpp | 2 +- src/vsl/aarch64/generator/trng/nondeterministic_trng.cpp | 2 +- src/vsl/aarch64/utils/choose_generator.hpp | 2 +- src/vsl/aarch64/utils/cpu_features.hpp | 2 +- src/vsl/x86_64/generator/trng/nondeterministic_trng.cpp | 2 +- src/vsl/x86_64/generator/trng/nondeterministic_trng.hpp | 2 +- test/distributions/gaussian.cpp | 2 +- test/distributions/gaussianmv.cpp | 2 +- test/services/copy_stream_state.cpp | 2 +- test/services/skip_ahead.cpp | 2 +- test/utils/distribution_templates.hpp | 2 +- tools/create_support_defines/generators.json | 3 +++ tools/create_support_defines/generators.py | 6 ++++-- 39 files changed, 44 insertions(+), 39 deletions(-) diff --git a/bench/include/bench.hpp b/bench/include/bench.hpp index 9335651..90873e8 100644 --- a/bench/include/bench.hpp +++ b/bench/include/bench.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/bench/include/defines.hpp b/bench/include/defines.hpp index 3a90666..6b1c2b8 100644 --- a/bench/include/defines.hpp +++ b/bench/include/defines.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/bench/scripts/benchmarks.py b/bench/scripts/benchmarks.py index 24663de..bf89e8e 100644 --- a/bench/scripts/benchmarks.py +++ b/bench/scripts/benchmarks.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +# SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates # # # SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/bench/scripts/generate_bench.py b/bench/scripts/generate_bench.py index 62ee691..e4c9e19 100755 --- a/bench/scripts/generate_bench.py +++ b/bench/scripts/generate_bench.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +# SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates # # # SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/generic/distributions/gaussianmv.hpp b/src/generic/distributions/gaussianmv.hpp index 6168bd3..b994345 100644 --- a/src/generic/distributions/gaussianmv.hpp +++ b/src/generic/distributions/gaussianmv.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/generic/distributions/kernels/gaussianmv.hpp b/src/generic/distributions/kernels/gaussianmv.hpp index eebe04c..3ed6dd2 100644 --- a/src/generic/distributions/kernels/gaussianmv.hpp +++ b/src/generic/distributions/kernels/gaussianmv.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/generic/generator/ars5.cpp b/src/generic/generator/ars5.cpp index ee58afb..d98d723 100644 --- a/src/generic/generator/ars5.cpp +++ b/src/generic/generator/ars5.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/generic/generator/copyable_generator.hpp b/src/generic/generator/copyable_generator.hpp index fc3393f..2b3594c 100644 --- a/src/generic/generator/copyable_generator.hpp +++ b/src/generic/generator/copyable_generator.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/generic/generator/mcg59.cpp b/src/generic/generator/mcg59.cpp index e24746a..be2666b 100644 --- a/src/generic/generator/mcg59.cpp +++ b/src/generic/generator/mcg59.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/generic/generator/philox4x3210.cpp b/src/generic/generator/philox4x3210.cpp index 202aaeb..61de833 100644 --- a/src/generic/generator/philox4x3210.cpp +++ b/src/generic/generator/philox4x3210.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/generic/generator/quad_counter_based_generator.hpp b/src/generic/generator/quad_counter_based_generator.hpp index 8c69015..23cd15b 100644 --- a/src/generic/generator/quad_counter_based_generator.hpp +++ b/src/generic/generator/quad_counter_based_generator.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/generic/generator/sfmt19937.cpp b/src/generic/generator/sfmt19937.cpp index 24b7490..572c938 100644 --- a/src/generic/generator/sfmt19937.cpp +++ b/src/generic/generator/sfmt19937.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/math/util.hpp b/src/math/util.hpp index 52aa01c..64ef4d7 100644 --- a/src/math/util.hpp +++ b/src/math/util.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/utils/mt_skip_ahead.hpp b/src/utils/mt_skip_ahead.hpp index 625b2fa..afbabb5 100644 --- a/src/utils/mt_skip_ahead.hpp +++ b/src/utils/mt_skip_ahead.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/utils/mt_skip_ahead_data.hpp b/src/utils/mt_skip_ahead_data.hpp index ac32fcf..9e27317 100644 --- a/src/utils/mt_skip_ahead_data.hpp +++ b/src/utils/mt_skip_ahead_data.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/utils/ring_buffer.hpp b/src/utils/ring_buffer.hpp index f89f3a6..d14d288 100644 --- a/src/utils/ring_buffer.hpp +++ b/src/utils/ring_buffer.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/utils/uint128.hpp b/src/utils/uint128.hpp index 4d8f5b8..0db98d8 100644 --- a/src/utils/uint128.hpp +++ b/src/utils/uint128.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/cpu_features.cpp b/src/vsl/aarch64/cpu_features.cpp index c36ebfe..6196421 100644 --- a/src/vsl/aarch64/cpu_features.cpp +++ b/src/vsl/aarch64/cpu_features.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/distributions/kernels/neon/box_muller.hpp b/src/vsl/aarch64/distributions/kernels/neon/box_muller.hpp index 3237952..eb65707 100644 --- a/src/vsl/aarch64/distributions/kernels/neon/box_muller.hpp +++ b/src/vsl/aarch64/distributions/kernels/neon/box_muller.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/distributions/kernels/neon/gaussianmv.hpp b/src/vsl/aarch64/distributions/kernels/neon/gaussianmv.hpp index c45b0df..c7019f7 100644 --- a/src/vsl/aarch64/distributions/kernels/neon/gaussianmv.hpp +++ b/src/vsl/aarch64/distributions/kernels/neon/gaussianmv.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/distributions/kernels/neon/laplace.hpp b/src/vsl/aarch64/distributions/kernels/neon/laplace.hpp index 3512d01..a601eb7 100644 --- a/src/vsl/aarch64/distributions/kernels/neon/laplace.hpp +++ b/src/vsl/aarch64/distributions/kernels/neon/laplace.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/distributions/kernels/optimised_kernels.hpp b/src/vsl/aarch64/distributions/kernels/optimised_kernels.hpp index a7659c7..8f1c5ff 100644 --- a/src/vsl/aarch64/distributions/kernels/optimised_kernels.hpp +++ b/src/vsl/aarch64/distributions/kernels/optimised_kernels.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/generator/aes/ars5_aes.cpp b/src/vsl/aarch64/generator/aes/ars5_aes.cpp index 5aab0f6..c336787 100644 --- a/src/vsl/aarch64/generator/aes/ars5_aes.cpp +++ b/src/vsl/aarch64/generator/aes/ars5_aes.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/generator/neon/ars5_neon.cpp b/src/vsl/aarch64/generator/neon/ars5_neon.cpp index ae4d64b..1bf346b 100644 --- a/src/vsl/aarch64/generator/neon/ars5_neon.cpp +++ b/src/vsl/aarch64/generator/neon/ars5_neon.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/generator/neon/ars5_neon_impl.hpp b/src/vsl/aarch64/generator/neon/ars5_neon_impl.hpp index d8681d3..1749e93 100644 --- a/src/vsl/aarch64/generator/neon/ars5_neon_impl.hpp +++ b/src/vsl/aarch64/generator/neon/ars5_neon_impl.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/generator/neon/mcg59_neon.cpp b/src/vsl/aarch64/generator/neon/mcg59_neon.cpp index 61a04e3..fdc9ea8 100644 --- a/src/vsl/aarch64/generator/neon/mcg59_neon.cpp +++ b/src/vsl/aarch64/generator/neon/mcg59_neon.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/generator/neon/philox4x3210_neon_impl.hpp b/src/vsl/aarch64/generator/neon/philox4x3210_neon_impl.hpp index 01132ca..54a7021 100644 --- a/src/vsl/aarch64/generator/neon/philox4x3210_neon_impl.hpp +++ b/src/vsl/aarch64/generator/neon/philox4x3210_neon_impl.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/generator/trng/nondeterministic_trng.cpp b/src/vsl/aarch64/generator/trng/nondeterministic_trng.cpp index 84c1004..871c1e6 100644 --- a/src/vsl/aarch64/generator/trng/nondeterministic_trng.cpp +++ b/src/vsl/aarch64/generator/trng/nondeterministic_trng.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/utils/choose_generator.hpp b/src/vsl/aarch64/utils/choose_generator.hpp index ffa26a0..d433ea7 100644 --- a/src/vsl/aarch64/utils/choose_generator.hpp +++ b/src/vsl/aarch64/utils/choose_generator.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/aarch64/utils/cpu_features.hpp b/src/vsl/aarch64/utils/cpu_features.hpp index 98a32dd..5182bdf 100644 --- a/src/vsl/aarch64/utils/cpu_features.hpp +++ b/src/vsl/aarch64/utils/cpu_features.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/x86_64/generator/trng/nondeterministic_trng.cpp b/src/vsl/x86_64/generator/trng/nondeterministic_trng.cpp index bd7efaa..1c0d05a 100644 --- a/src/vsl/x86_64/generator/trng/nondeterministic_trng.cpp +++ b/src/vsl/x86_64/generator/trng/nondeterministic_trng.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/src/vsl/x86_64/generator/trng/nondeterministic_trng.hpp b/src/vsl/x86_64/generator/trng/nondeterministic_trng.hpp index 4f99fba..ee43712 100644 --- a/src/vsl/x86_64/generator/trng/nondeterministic_trng.hpp +++ b/src/vsl/x86_64/generator/trng/nondeterministic_trng.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/test/distributions/gaussian.cpp b/test/distributions/gaussian.cpp index 83b2776..eb06559 100644 --- a/test/distributions/gaussian.cpp +++ b/test/distributions/gaussian.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/test/distributions/gaussianmv.cpp b/test/distributions/gaussianmv.cpp index e4c5501..a880dc8 100644 --- a/test/distributions/gaussianmv.cpp +++ b/test/distributions/gaussianmv.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/test/services/copy_stream_state.cpp b/test/services/copy_stream_state.cpp index 37fb0f8..0d8b603 100644 --- a/test/services/copy_stream_state.cpp +++ b/test/services/copy_stream_state.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/test/services/skip_ahead.cpp b/test/services/skip_ahead.cpp index a950379..9312eca 100644 --- a/test/services/skip_ahead.cpp +++ b/test/services/skip_ahead.cpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/test/utils/distribution_templates.hpp b/test/utils/distribution_templates.hpp index 35d4ee4..ae42678 100644 --- a/test/utils/distribution_templates.hpp +++ b/test/utils/distribution_templates.hpp @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its + * SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its * affiliates * * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception diff --git a/tools/create_support_defines/generators.json b/tools/create_support_defines/generators.json index 12c6806..df07e53 100644 --- a/tools/create_support_defines/generators.json +++ b/tools/create_support_defines/generators.json @@ -114,6 +114,7 @@ }, { "method": "MT2203 + 1", + "to_benchmark": false, "featureStatus": { "newStream": "supported", "newStreamEx": "supported", @@ -126,6 +127,7 @@ }, { "method": "MT2203 + 1000", + "to_benchmark": false, "featureStatus": { "newStream": "supported", "newStreamEx": "supported", @@ -138,6 +140,7 @@ }, { "method": "MT2203 + 3142", + "to_benchmark": false, "featureStatus": { "newStream": "supported", "newStreamEx": "supported", diff --git a/tools/create_support_defines/generators.py b/tools/create_support_defines/generators.py index d6388cc..ea58ac5 100644 --- a/tools/create_support_defines/generators.py +++ b/tools/create_support_defines/generators.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# SPDX-FileCopyrightText: Copyright 2024 Arm Limited and/or its affiliates +# SPDX-FileCopyrightText: Copyright 2024-2025 Arm Limited and/or its affiliates # # # SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception @@ -18,6 +18,7 @@ GEN_JSON = Path(__file__).parent / "generators.json" @dataclass class Generator: name: str + to_benchmark: bool newStream: str = "unsupported" newStreamEx: str = "unsupported" leapfrog: str = "unsupported" @@ -35,7 +36,8 @@ def _discover(gen_json: Path) -> Iterable[Generator]: """ data = json.loads(gen_json.read_text()) for gen in data["generators"]: - yield Generator(gen["method"].lower(), **gen["featureStatus"]) + to_benchmark = gen.get("to_benchmark", True) + yield Generator(gen["method"].lower(), to_benchmark, **gen["featureStatus"]) generators = list(_discover(GEN_JSON)) -- GitLab