pax_global_header00006660000000000000000000000064144607076500014523gustar00rootroot0000000000000052 comment=2a8a5e0ecaa3e3d6f4ec722a49aa72476755c2b7 libengine-gost-openssl-3.0.2/000077500000000000000000000000001446070765000161145ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/.cirrus.yml000066400000000000000000000014301446070765000202220ustar00rootroot00000000000000FreeBSD_task: freebsd_instance: image_family: freebsd-13-1 env: PREFIX: ${HOME}/opt PATH: ${PREFIX}/bin:${PATH} OPENSSL_BRANCH: master install_script: - pkg install -y git cmake p5-App-cpanminus gdb pkgconf - sudo cpanm --notest Test2::V0 update_git_script: - git submodule update --recursive --init script: - git clone --depth 1 -b ${OPENSSL_BRANCH} https://github.com/openssl/openssl.git - cd openssl - ./config shared -d --prefix=${PREFIX} --openssldir=${PREFIX} -Wl,-rpath=${PREFIX}/lib && make all install_sw > build.log 2>&1 || (cat build.log && exit 1) - cd .. - mkdir build - cd build - cmake -DOPENSSL_ROOT_DIR=${PREFIX} -DOPENSSL_ENGINES_DIR=${PREFIX}/engines .. - make - make test CTEST_OUTPUT_ON_FAILURE=1 libengine-gost-openssl-3.0.2/.editorconfig000066400000000000000000000005221446070765000205700ustar00rootroot00000000000000# https://editorconfig.org root = true [*] end_of_line = lf insert_final_newline = true tab_width = 8 [*.[ch]] indent_size = 4 indent_style = space [{CMakeLists.txt,*.cmake}] indent_size = 2 indent_style = space [*.yml] indent_size = 4 indent_style = space [COMMIT_EDITMSG] indent_size = 2 indent_style = space max_line_length = 80 libengine-gost-openssl-3.0.2/.github/000077500000000000000000000000001446070765000174545ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/.github/before_script.sh000077500000000000000000000012241446070765000226400ustar00rootroot00000000000000#!/bin/bash -efux # Download cpanm and make it executable as a standalone script curl -L https://cpanmin.us -o cpanm chmod 0755 cpanm sudo ./cpanm --notest Test2::V0 > build.log 2>&1 \ || (cat build.log && exit 1) if [ "${APT_INSTALL-}" ]; then sudo apt-get install -y $APT_INSTALL fi git clone --depth 1 -b $OPENSSL_BRANCH https://github.com/openssl/openssl.git cd openssl git describe --always --long PREFIX=$HOME/opt ${SETARCH-} ./config shared -d --prefix=$PREFIX --libdir=lib --openssldir=$PREFIX ${USE_RPATH:+-Wl,-rpath=$PREFIX/lib} ${SETARCH-} make -s -j$(nproc) build_libs ${SETARCH-} make -s -j$(nproc) build_programs make -s install_sw libengine-gost-openssl-3.0.2/.github/script.sh000077500000000000000000000003761446070765000213250ustar00rootroot00000000000000#!/bin/bash -efux PREFIX=$HOME/opt PATH=$PREFIX/bin:$PATH mkdir build cd build cmake -DOPENSSL_ROOT_DIR=$PREFIX -DOPENSSL_ENGINES_DIR=$PREFIX/engines ${ASAN-} .. make make test CTEST_OUTPUT_ON_FAILURE=1 if [ -z "${ASAN-}" ]; then make tcl_tests fi libengine-gost-openssl-3.0.2/.github/workflows/000077500000000000000000000000001446070765000215115ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/.github/workflows/ci.yml000066400000000000000000000050251446070765000226310ustar00rootroot00000000000000name: CI on: [push, pull_request] env: OPENSSL_BRANCH: openssl-3.0 USE_RPATH: yes jobs: gcc-openssl-stable: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v2 with: submodules: true - run: .github/before_script.sh - run: .github/script.sh clang-openssl-stable: runs-on: ubuntu-20.04 env: CC: clang steps: - uses: actions/checkout@v2 with: submodules: true - run: .github/before_script.sh - run: .github/script.sh macos-openssl-stable: runs-on: macos-11 env: USE_RPATH: steps: - uses: actions/checkout@v2 with: submodules: true - run: .github/before_script.sh - run: .github/script.sh gcc-openssl-master: runs-on: ubuntu-20.04 env: OPENSSL_BRANCH: master steps: - uses: actions/checkout@v2 with: submodules: true - run: .github/before_script.sh - run: .github/script.sh macos-openssl-master: runs-on: macos-11 env: OPENSSL_BRANCH: master USE_RPATH: steps: - uses: actions/checkout@v2 with: submodules: true - run: .github/before_script.sh - run: .github/script.sh gcc-asan-openssl-master: runs-on: ubuntu-20.04 env: OPENSSL_BRANCH: master ASAN: -DASAN=1 steps: - uses: actions/checkout@v2 with: submodules: true - run: .github/before_script.sh - run: .github/script.sh macos-asan-openssl-master: runs-on: macos-latest env: OPENSSL_BRANCH: master ASAN: -DASAN=1 USE_RPATH: steps: - uses: actions/checkout@v2 with: submodules: true - run: .github/before_script.sh - run: .github/script.sh gcc-openssl-stable-x86: runs-on: ubuntu-20.04 env: CFLAGS: -m32 LDFLAGS: -m32 SETARCH: "setarch i386" APT_INSTALL: gcc-multilib steps: - uses: actions/checkout@v2 with: submodules: true - run: .github/before_script.sh - run: .github/script.sh libengine-gost-openssl-3.0.2/.github/workflows/codeql-analysis.yml000066400000000000000000000050111446070765000253210ustar00rootroot00000000000000name: "CodeQL" env: OPENSSL_BRANCH: openssl-3.0 #RPATH: "-Wl,-rpath=${PREFIX}/lib" #PREFIX: ${HOME}/opt #PATH: ${PREFIX}/bin:${PATH} on: push: branches: [master, ] pull_request: # The branches below must be a subset of the branches above branches: [master] schedule: - cron: '0 2 * * 0' jobs: analyse: name: Analyse runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v2 with: # We must fetch at least the immediate parents so that if this is # a pull request then we can checkout the head. fetch-depth: 2 # gost-engine has submodules submodules: true # If this run was triggered by a pull request event, then checkout # the head of the pull request instead of the merge commit. - run: git checkout HEAD^2 if: ${{ github.event_name == 'pull_request' }} # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v1 # languages: cpp # Override language selection by uncommenting this and choosing your languages # with: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) #- name: Autobuild # uses: github/codeql-action/autobuild@v1 # â„šī¸ Command-line programs to run using the OS shell. # 📚 https://git.io/JvXDl # âœī¸ If the Autobuild fails above, remove it and uncomment the following three lines # and modify them (or add more) to build your code if your project # uses a compiled language - run: | curl -L https://cpanmin.us | sudo perl - --sudo App::cpanminus sudo cpanm --notest Test2::V0 > build.log 2>&1 || (cat build.log && exit 1) if [ "$APT_INSTALL" ]; then sudo apt-get install -y $APT_INSTALL; fi git clone --depth 1 -b ${OPENSSL_BRANCH} https://github.com/openssl/openssl.git export PREFIX=`pwd`/opt export RPATH="-Wl,-rpath=${PREFIX}/lib" cd openssl git describe --always --long ./config shared -d --prefix=${PREFIX} --openssldir=${PREFIX} --libdir=lib ${RPATH} make -s build_libs make -s build_programs make -s install_sw cd .. set -e mkdir build cd build cmake -DOPENSSL_ROOT_DIR=${PREFIX} -DOPENSSL_ENGINES_DIR=${PREFIX}/engines ${ASAN} .. make - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v1 libengine-gost-openssl-3.0.2/.github/workflows/coverity.yml000066400000000000000000000014331446070765000241010ustar00rootroot00000000000000name: Coverity on: schedule: - cron: "0 0 * * *" jobs: scan: runs-on: ubuntu-20.04 if: ${{ github.repository_owner == 'gost-engine' }} env: COVERITY_SCAN_PROJECT_NAME: 'gost-engine' COVERITY_SCAN_BRANCH_PATTERN: '*' COVERITY_SCAN_NOTIFICATION_EMAIL: 'chipitsine@gmail.com' COVERITY_SCAN_BUILD_COMMAND_PREPEND: ".github/before_script.sh" COVERITY_SCAN_BUILD_COMMAND: ".github/script.sh" OPENSSL_BRANCH: openssl-3.0 USE_RPATH: yes steps: - uses: actions/checkout@v2 with: submodules: true - name: Run Coverity Scan env: COVERITY_SCAN_TOKEN: ${{ secrets.COVERITY_SCAN_TOKEN }} run: | curl -fsSL "https://scan.coverity.com/scripts/travisci_build_coverity_scan.sh" | bash || true libengine-gost-openssl-3.0.2/.github/workflows/windows.yml000066400000000000000000000034311446070765000237270ustar00rootroot00000000000000name: CI (windows) on: [push, pull_request] jobs: msvc-openssl: runs-on: windows-latest outputs: openssl-head: ${{ steps.openssl.outputs.head }} steps: - uses: actions/checkout@v2 with: repository: openssl/openssl fetch-depth: 0 - run: echo "::set-output name=head::$(git describe --always --long)" id: openssl - uses: actions/cache@v2 id: cache with: path: _dest key: ${{ runner.os }}-openssl-${{ steps.openssl.outputs.head }} - uses: ilammy/msvc-dev-cmd@v1 - name: Build OpenSSL if: steps.cache.outputs.cache-hit != 'true' run: | perl Configure no-makedepend no-tests no-asm VC-WIN64A perl configdata.pm --dump nmake /S build_libs build_programs nmake /S install_sw DESTDIR=_dest msvc-engine: needs: msvc-openssl runs-on: windows-latest steps: - uses: actions/checkout@v2 with: submodules: true - uses: actions/cache@v2 with: path: _dest key: ${{ runner.os }}-openssl-${{ needs.msvc-openssl.outputs.openssl-head }} - run: cmake -DOPENSSL_ROOT_DIR="_dest\Program Files\OpenSSL" -DOPENSSL_ENGINES_DIR=bin . - run: cmake --build . - name: Run tests run: | $env:PATH = "$env:PATH;$pwd\_dest\Program Files\OpenSSL\bin" $env:OPENSSL_ENGINES = "$pwd\bin\Debug" $env:OPENSSL_MODULES = "$pwd\bin\Debug" ctest -C Debug --output-on-failure libengine-gost-openssl-3.0.2/.gitignore000066400000000000000000000000071446070765000201010ustar00rootroot00000000000000build/ libengine-gost-openssl-3.0.2/.gitmodules000066400000000000000000000001341446070765000202670ustar00rootroot00000000000000[submodule "libprov"] path = libprov url = https://github.com/provider-corner/libprov.git libengine-gost-openssl-3.0.2/CMakeLists.txt000066400000000000000000000362461446070765000206670ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.18 FATAL_ERROR) project(gost-engine LANGUAGES C) include(GNUInstallDirs) include(CheckLibraryExists) include(CheckFunctionExists) include(CheckCSourceRuns) enable_testing() find_package(OpenSSL 3.0 REQUIRED) if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) message(STATUS "Setting build type to 'RelWithDebInfo' as none was specified.") set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING "Choose the type of build." FORCE) endif() if (NOT DEFINED OPENSSL_ROOT_DIR) get_filename_component(OPENSSL_ROOT_DIR ${OPENSSL_INCLUDE_DIR} DIRECTORY) message(STATUS "Setting OpenSSL root: ${OPENSSL_ROOT_DIR}") endif() find_program(OPENSSL_PROGRAM openssl PATHS ${OPENSSL_ROOT_DIR} PATH_SUFFIXES apps bin NO_DEFAULT_PATH) message(STATUS "Found OpenSSL application: ${OPENSSL_PROGRAM}") include_directories(${OPENSSL_INCLUDE_DIR}) set(OPENSSL_MODULES_DIR ${CMAKE_INSTALL_LIBDIR}/ossl-modules) if (CMAKE_C_COMPILER_ID MATCHES "Clang") set(CMAKE_C_FLAGS_RELEASE -O2) set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb") set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -ggdb") add_compile_options(-Werror -Wall -Wno-unused-parameter -Wno-unused-function -Wno-missing-braces -Qunused-arguments -Wno-deprecated-declarations) elseif(CMAKE_C_COMPILER_ID MATCHES "GNU") set(CMAKE_C_FLAGS_RELEASE -O2) set(CMAKE_C_FLAGS_DEBUG "-O0 -ggdb") set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -ggdb") add_compile_options(-Werror -Wall -Wno-unused-parameter -Wno-unused-function -Wno-missing-braces -Wno-error=unknown-pragmas -Wno-error=pragmas -Wno-deprecated-declarations) elseif(CMAKE_C_COMPILER_ID MATCHES "MSVC") add_definitions(-D_CRT_SECURE_NO_WARNINGS) add_definitions(-D_CRT_DEPRECATED_NO_WARNINGS) add_definitions(-D_CRT_NONSTDC_NO_WARNINGS) add_compile_options(/MP /WX /W4 /wd4100 /wd4267 /wd4206 /wd4706 /wd4244 /wd4115 /wd4996) endif() if (ASAN) message(STATUS "address sanitizer enabled") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -g3 -fno-omit-frame-pointer") set(SKIP_PERL_TESTS 1) endif() set(CMAKE_C_STANDARD 90) CHECK_FUNCTION_EXISTS(clock_gettime HAVE_CLOCK_GETTIME_C) CHECK_LIBRARY_EXISTS(rt clock_gettime "" HAVE_CLOCK_GETTIME_RT) if(HAVE_CLOCK_GETTIME_RT AND NOT HAVE_CLOCK_GETTIME_C) set(CLOCK_GETTIME_LIB rt) endif() include (TestBigEndian) TEST_BIG_ENDIAN(IS_BIG_ENDIAN) if(IS_BIG_ENDIAN) message(STATUS "BIG_ENDIAN") else() message(STATUS "LITTLE_ENDIAN") add_definitions(-DL_ENDIAN) endif() check_c_source_runs(" #ifdef _MSC_VER # include #else # include #endif int main(void) { unsigned long long x = -1, y = 1, r; unsigned char cf; cf = _addcarry_u64(1, x, y, &r); return !(cf == 1 && r == 1); } " ADDCARRY_U64) if (ADDCARRY_U64) add_definitions(-DHAVE_ADDCARRY_U64) endif() check_c_source_runs(" int main(void) { char buf[16] = { 0, 1, 2 }; int *p = (int *)(buf + 1); int *q = (int *)(buf + 2); return (*p == *q); } " RELAXED_ALIGNMENT) if (NOT RELAXED_ALIGNMENT) add_definitions(-DSTRICT_ALIGNMENT) endif() if(MSVC) set(BIN_DIRECTORY bin/$/) else() set(BIN_DIRECTORY bin) endif() set(OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/${BIN_DIRECTORY}) #set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${OUTPUT_DIRECTORY}) # Remove when https://gitlab.kitware.com/cmake/cmake/issues/18525 is addressed set(OPENSSL_ENGINES_DIR "" CACHE PATH "OpenSSL Engines Directory") if ("${OPENSSL_ENGINES_DIR}" STREQUAL "") include(FindPkgConfig) pkg_get_variable(OPENSSL_ENGINES_DIR libcrypto enginesdir) if ("${OPENSSL_ENGINES_DIR}" STREQUAL "") message( FATAL_ERROR "Unable to discover the OpenSSL engines directory. Provide the path using -DOPENSSL_ENGINES_DIR" ) endif() endif() set(GOST_89_SOURCE_FILES gost89.c gost89.h ) set(GOST_HASH_SOURCE_FILES gosthash.c gosthash.h ) set(GOST_HASH_2012_SOURCE_FILES gosthash2012.c gosthash2012.h gosthash2012_const.h gosthash2012_precalc.h gosthash2012_ref.h gosthash2012_sse2.h ) set(GOST_GRASSHOPPER_SOURCE_FILES gost_grasshopper.h gost_grasshopper_core.h gost_grasshopper_core.c gost_grasshopper_defines.h gost_grasshopper_defines.c gost_grasshopper_math.h gost_grasshopper_galois_precompiled.c gost_grasshopper_precompiled.c gost_grasshopper_cipher.h gost_grasshopper_cipher.c ) set(GOST_ERR_SOURCE_FILES e_gost_err.c e_gost_err.h ) set(GOST_CORE_SOURCE_FILES gost_ameth.c gost_pmeth.c gost_ctl.c gost_asn1.c gost_crypt.c gost_keywrap.c gost_keywrap.h gost_md.c gost_md2012.c gost_omac.c gost_omac_acpkm.c gost_gost2015.c gost_lcl.h gost_params.c gost_keyexpimp.c ) set(GOST_EC_SOURCE_FILES gost_ec_keyx.c gost_ec_sign.c ecp_id_GostR3410_2001_CryptoPro_A_ParamSet.c ecp_id_GostR3410_2001_CryptoPro_B_ParamSet.c ecp_id_GostR3410_2001_CryptoPro_C_ParamSet.c ecp_id_GostR3410_2001_TestParamSet.c ecp_id_tc26_gost_3410_2012_256_paramSetA.c ecp_id_tc26_gost_3410_2012_512_paramSetA.c ecp_id_tc26_gost_3410_2012_512_paramSetB.c ecp_id_tc26_gost_3410_2012_512_paramSetC.c ) set (GOST_OMAC_SOURCE_FILES gost_omac.c gost_omac_acpkm.c ) set(GOST_LIB_SOURCE_FILES ${GOST_CORE_SOURCE_FILES} ${GOST_89_SOURCE_FILES} ${GOST_HASH_SOURCE_FILES} ${GOST_HASH_2012_SOURCE_FILES} ${GOST_GRASSHOPPER_SOURCE_FILES} ${GOST_EC_SOURCE_FILES} ${GOST_OMAC_SOURCE_FILES} ) set(GOST_ENGINE_SOURCE_FILES gost_eng.c ) set(GOST_PROV_SOURCE_FILES gost_prov.c gost_prov_cipher.c gost_prov_digest.c gost_prov_mac.c ) set(TEST_ENVIRONMENT_COMMON CMAKE_CURRENT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} PERL5LIB=${CMAKE_CURRENT_SOURCE_DIR}/test OPENSSL_PROGRAM=${OPENSSL_PROGRAM} OPENSSL_CRYPTO_LIBRARY=${OPENSSL_CRYPTO_LIBRARY} ) set(TEST_ENVIRONMENT_ENGINE ${TEST_ENVIRONMENT_COMMON} OPENSSL_ENGINES=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} OPENSSL_CONF=${CMAKE_CURRENT_SOURCE_DIR}/test/engine.cnf ) set(TEST_ENVIRONMENT_PROVIDER ${TEST_ENVIRONMENT_COMMON} OPENSSL_MODULES=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} OPENSSL_CONF=${CMAKE_CURRENT_SOURCE_DIR}/test/provider.cnf ) add_executable(test_digest test_digest.c) target_link_libraries(test_digest OpenSSL::Crypto) add_test(NAME digest-with-engine COMMAND test_digest) set_tests_properties(digest-with-engine PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_ENGINE}") add_test(NAME digest-with-provider COMMAND test_digest) set_tests_properties(digest-with-provider PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_PROVIDER}") add_executable(test_ciphers test_ciphers.c) target_link_libraries(test_ciphers OpenSSL::Crypto) add_test(NAME ciphers-with-engine COMMAND test_ciphers) set_tests_properties(ciphers-with-engine PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_ENGINE}") add_test(NAME ciphers-with-provider COMMAND test_ciphers) set_tests_properties(ciphers-with-provider PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_PROVIDER}") # test_curves is an internals testing program, it doesn't need a test env add_executable(test_curves test_curves.c) target_link_libraries(test_curves gost_core gost_err) add_test(NAME curves COMMAND test_curves) add_executable(test_params test_params.c) target_link_libraries(test_params OpenSSL::Crypto) add_test(NAME parameters-with-engine COMMAND test_params) set_tests_properties(parameters-with-engine PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_ENGINE}") add_executable(test_derive test_derive.c) target_link_libraries(test_derive OpenSSL::Crypto) add_test(NAME derive-with-engine COMMAND test_derive) set_tests_properties(derive-with-engine PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_ENGINE}") add_executable(test_sign test_sign.c) target_link_libraries(test_sign OpenSSL::Crypto) add_test(NAME sign/verify-with-engine COMMAND test_sign) set_tests_properties(sign/verify-with-engine PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_ENGINE}") add_executable(test_tls test_tls.c) target_link_libraries(test_tls OpenSSL::SSL) add_test(NAME TLS-with-engine COMMAND test_tls) set_tests_properties(TLS-with-engine PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_ENGINE}") add_executable(test_context test_context.c) target_link_libraries(test_context OpenSSL::Crypto) add_test(NAME context-with-engine COMMAND test_context) set_tests_properties(context-with-engine PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_ENGINE}") add_test(NAME context-with-provider COMMAND test_context) set_tests_properties(context-with-provider PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_PROVIDER}") # test_keyexpimp is an internals testing program, it doesn't need a test env add_executable(test_keyexpimp test_keyexpimp.c) #target_compile_definitions(test_keyexpimp PUBLIC -DOPENSSL_LOAD_CONF) target_link_libraries(test_keyexpimp gost_core gost_err) add_test(NAME keyexpimp COMMAND test_keyexpimp) # test_gost89 is an internals testing program, it doesn't need a test env add_executable(test_gost89 test_gost89.c) target_link_libraries(test_gost89 gost_core gost_err) add_test(NAME gost89 COMMAND test_gost89) add_executable(test_mgm test_mgm.c) target_link_libraries(test_mgm OpenSSL::Crypto) add_test(NAME mgm-with-engine COMMAND test_mgm) set_tests_properties(mgm-with-engine PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_ENGINE}") add_test(NAME mgm-with-provider COMMAND test_mgm) set_tests_properties(mgm-with-provider PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_PROVIDER}") if(NOT SKIP_PERL_TESTS) execute_process(COMMAND perl -MTest2::V0 -e "" ERROR_QUIET RESULT_VARIABLE MISSING_TEST2_V0) find_program(HAVE_PROVE NAMES prove) if(NOT MISSING_TEST2_V0 AND HAVE_PROVE) add_test(NAME engine COMMAND prove --merge -PWrapOpenSSL ${CMAKE_CURRENT_SOURCE_DIR}/test :: engine) set_tests_properties(engine PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_ENGINE}") add_test(NAME provider COMMAND prove --merge -PWrapOpenSSL ${CMAKE_CURRENT_SOURCE_DIR}/test :: provider) set_tests_properties(provider PROPERTIES ENVIRONMENT "${TEST_ENVIRONMENT_PROVIDER}") else() message(STATUS "No Test2::V0 perl module (engine and provider tests skipped)") endif() endif() if(NOT MSVC) add_executable(sign benchmark/sign.c) target_link_libraries(sign gost_core gost_err ${CLOCK_GETTIME_LIB}) endif() # All that may need to load just built engine will have path to it defined. set(BINARY_TESTS_TARGETS test_digest test_ciphers test_curves test_params test_derive test_sign test_context test_keyexpimp test_gost89 test_tls test_mgm ) set_property(TARGET ${BINARY_TESTS_TARGETS} APPEND PROPERTY COMPILE_DEFINITIONS ENGINE_DIR="${OUTPUT_DIRECTORY}") add_library(gost_core STATIC ${GOST_LIB_SOURCE_FILES}) set_target_properties(gost_core PROPERTIES POSITION_INDEPENDENT_CODE ON) target_link_libraries(gost_core PRIVATE OpenSSL::Crypto) add_library(gost_err STATIC ${GOST_ERR_SOURCE_FILES}) set_target_properties(gost_err PROPERTIES POSITION_INDEPENDENT_CODE ON) target_link_libraries(gost_err PRIVATE OpenSSL::Crypto) # The GOST engine in module form add_library(gost_engine MODULE ${GOST_ENGINE_SOURCE_FILES}) # Set the suffix explicitly to adapt to OpenSSL's idea of what a # module suffix should be set_target_properties(gost_engine PROPERTIES PREFIX "" OUTPUT_NAME "gost" SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX}) target_link_libraries(gost_engine PRIVATE gost_core gost_err) if (NOT MSVC) # The GOST engine in library form add_library(lib_gost_engine SHARED ${GOST_ENGINE_SOURCE_FILES}) set_target_properties(lib_gost_engine PROPERTIES COMPILE_DEFINITIONS "BUILDING_ENGINE_AS_LIBRARY" PUBLIC_HEADER gost-engine.h OUTPUT_NAME "gost") target_link_libraries(lib_gost_engine PRIVATE gost_core gost_err) endif() # The GOST provider uses this add_subdirectory(libprov) # The GOST provider in module form add_library(gost_prov MODULE ${GOST_PROV_SOURCE_FILES} ${GOST_ENGINE_SOURCE_FILES} ) set_target_properties(gost_prov PROPERTIES PREFIX "" OUTPUT_NAME "gostprov" SUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX} COMPILE_DEFINITIONS "BUILDING_GOST_PROVIDER;OPENSSL_NO_DYNAMIC_ENGINE" ) target_link_libraries(gost_prov PRIVATE gost_core libprov) if (NOT MSVC) # The GOST provider in library form add_library(lib_gost_prov SHARED ${GOST_PROV_SOURCE_FILES} ${GOST_ENGINE_SOURCE_FILES} ) set_target_properties(lib_gost_prov PROPERTIES OUTPUT_NAME "gostprov" COMPILE_DEFINITIONS "BUILDING_GOST_PROVIDER;BUILDING_PROVIDER_AS_LIBRARY;OPENSSL_NO_DYNAMIC_ENGINE" ) target_link_libraries(lib_gost_prov PRIVATE gost_core libprov) endif() set(GOST_SUM_SOURCE_FILES gostsum.c ) add_executable(gostsum ${GOST_SUM_SOURCE_FILES}) target_link_libraries(gostsum gost_core gost_err) set(GOST_12_SUM_SOURCE_FILES gost12sum.c ) add_executable(gost12sum ${GOST_12_SUM_SOURCE_FILES}) target_link_libraries(gost12sum gost_core gost_err) set_source_files_properties(tags PROPERTIES GENERATED true) add_custom_target(tags COMMAND ctags -R . ${OPENSSL_ROOT_DIR} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) add_custom_target(tcl_tests COMMAND OPENSSL_LIBCRYPTO=${OPENSSL_CRYPTO_LIBRARY} OPENSSL_APP=${OPENSSL_PROGRAM} TESTSRC=${CMAKE_SOURCE_DIR}/tcl_tests TESTDIR=${CMAKE_BINARY_DIR}/tcl_tests ENGINE_DIR=${CMAKE_RUNTIME_OUTPUT_DIRECTORY} sh ./runtest.sh WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tcl_tests) add_executable(test_tlstree test_tlstree.c) target_link_libraries(test_tlstree PUBLIC OpenSSL::Crypto) # install programs and manuals install(TARGETS gostsum gost12sum RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(FILES gostsum.1 gost12sum.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) # install engine and provider in module form install(TARGETS gost_engine EXPORT GostEngineConfig LIBRARY DESTINATION ${OPENSSL_ENGINES_DIR} RUNTIME DESTINATION ${OPENSSL_ENGINES_DIR}) install(TARGETS gost_prov EXPORT GostProviderConfig LIBRARY DESTINATION ${OPENSSL_MODULES_DIR} RUNTIME DESTINATION ${OPENSSL_MODULES_DIR}) if (NOT MSVC) # install engine and provider in library form install(TARGETS lib_gost_engine EXPORT GostEngineConfig LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(TARGETS lib_gost_prov EXPORT GostProviderConfig LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() if (MSVC) install(FILES $ $ EXPORT GostEngineConfig DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL) install(FILES $ EXPORT GostEngineConfig DESTINATION ${OPENSSL_ENGINES_DIR} OPTIONAL) install(FILES $ EXPORT GostProviderConfig DESTINATION ${OPENSSL_MODULES_DIR} OPTIONAL) endif() install(EXPORT GostEngineConfig DESTINATION share/cmake/GostEngine) install(EXPORT GostProviderConfig DESTINATION share/cmake/GostProvider) libengine-gost-openssl-3.0.2/INSTALL.md000066400000000000000000000105771446070765000175560ustar00rootroot00000000000000Building and Installation ========================= How to Build ------------ To build and install OpenSSL GOST Engine, you will need * OpenSSL 3.0 development version * an ANSI C compiler * CMake (3.0 or newer, 3.18 recommended) Here is a quick build guide: $ git clone https://github.com/gost-engine/engine $ cd engine $ git submodule update --init $ mkdir build $ cd build $ cmake -DCMAKE_BUILD_TYPE=Release .. $ cmake --build . --config Release Instead of `Release` you can use `Debug`, `RelWithDebInfo` or `MinSizeRel` configuration. See [cmake docs](https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html) for details. You will find built binaries in `../bin` directory. If you want to build against a specific OpenSSL instance (you will need it if you have more than one OpenSSL instance for example), you can use the `cmake` variable `OPENSSL_ROOT_DIR` to specify absolute path of the desirable OpenSSL instance: $ cmake -DOPENSSL_ROOT_DIR=/PATH/TO/OPENSSL/ .. Building against OpenSSL 3.0 requires openssl detection module (FindOpenSSL.cmake) from CMake 3.18 or higher. More earlier versions may have problems with it. If you use Visual Studio, you can also set `CMAKE_INSTALL_PREFIX` variable to set install path, like this: > cmake -G "Visual Studio 15 Win64" -DCMAKE_PREFIX_PATH=c:\OpenSSL\vc-win64a\ -DCMAKE_INSTALL_PREFIX=c:\OpenSSL\vc-win64a\ .. Also instead of `cmake --build` tool you can just open `gost-engine.sln` in Visual Studio, select configuration and call `Build Solution` manually. Instructions how to build OpenSSL 1.1.0 with Microsoft Visual Studio you can find [there](https://gist.github.com/terrillmoore/995421ea6171a9aa50552f6aa4be0998). How to Install -------------- To install GOST Engine you can call: # cmake --build . --target install --config Release or old plain and Unix only: # make install The engine library `gost.so` should be installed into OpenSSL engine directory. To ensure that it is installed propery call: $ openssl version -e ENGINESDIR: "/usr/lib/i386-linux-gnu/engines-1.1" Then check that `gost.so` there # ls /usr/lib/i386-linux-gnu/engines-1.1 Finally, to start using GOST Engine through OpenSSL, you should edit `openssl.cnf` configuration file as specified below. How to Configure ---------------- The very minimal example of the configuration file is provided in this distribution and named `example.conf`. Configuration file should include following statement in the global section, i.e. before first bracketed section header (see config(5) for details) openssl_conf = openssl_def where `openssl_def` is name of the section in configuration file which describes global defaults. This section should contain following statement: [openssl_def] engines = engine_section which points to the section which describes list of the engines to be loaded. This section should contain: [engine_section] gost = gost_section And section which describes configuration of the engine should contain [gost_section] engine_id = gost dynamic_path = /usr/lib/ssl/engines/libgost.so default_algorithms = ALL Various cryptoproviders (e.g. BouncyCastle) has some problems with private key parsing from PrivateKeyInfo, so if you want to use old private key representation format, which supported by BC, you will have to add: GOST_PK_FORMAT = LEGACY_PK_WRAP to `[gost_section]`. Where `engine_id` parameter specifies name of engine (should be `gost`). `dynamic_path is` a location of the loadable shared library implementing the engine. If the engine is compiled statically or is located in the OpenSSL engines directory, this line can be omitted. `default_algorithms` parameter specifies that all algorithms, provided by engine, should be used. The `CRYPT_PARAMS` parameter is engine-specific. It allows the user to choose between different parameter sets of symmetric cipher algorithm. [RFC 4357][1] specifies several parameters for the GOST 28147-89 algorithm, but OpenSSL doesn't provide user interface to choose one when encrypting. So use engine configuration parameter instead. It SHOULD NOT be used nowadays because all the parameters except the default one are deprecated now. Value of this parameter can be either short name, defined in OpenSSL `obj_dat.h` header file or numeric representation of OID, defined in [RFC 4357][1]. [1]:https://tools.ietf.org/html/rfc4357 "RFC 4357" libengine-gost-openssl-3.0.2/LICENSE000066400000000000000000000236771446070765000171400ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 https://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 libengine-gost-openssl-3.0.2/README.gost000066400000000000000000000254371446070765000177620ustar00rootroot00000000000000OPENSSL GOST ENGINE An implementation of Russian cryptography standards for OpenSSL. Since v.0.9.6 OpenSSL provides facilities for creating external dynamically loaded cryptographic engines (OpenSSL should be built with dynamic engine support to be able to use it). Since v 1.0 it became possible to provide digital signature algorithms via engines. This engine provides an implementation of various Russian cryptographic algorithms, known generally as GOST cryptographic algorithms (see detailed list below). These algorithms can be used both via OpenSSL command line tools and via high-level libopenssl calls. OpenSSL GOST Engine also includes 'gostsum' and 'gost12sum' command line tools for generating and checking GOST R34.11-94 and GOST R34.11-2012 hashsums. They have the same purposes and behavior as the well-known sha1sum and md5sum utilities. These utilities can be used independently from OpenSSL. ALGORITHMS SUPPORTED GOST R 34.10-2001 and GOST R 34.10-2012 - digital signature algorithms. Also support key exchange based on public keys. See RFC 4357 for details of VKO key exchange algorithm. These algorithms use 256 bit private keys for GOST 2001, 256/512 bits for GOST 2012. Public keys are 512 bit for GOST 2001 and 512/1024 for GOST 2012. Key exchange algorithms (VKO R 34.10) are supported on these keys too. GOST R 34.11-94 Message digest algorithm. 256-bit hash value. GOST R 34.11-2012 Message digest algorithm. 256- and 512-bit hash values. GOST 28147-89 - Symmetric cipher with 256-bit key. Various modes are defined in the standard, but only CBC, CFB and CNT modes are implemented in the engine. To make statistical analysis more difficult, key meshing is supported (see RFC 4357). GOST 28147-89 MAC mode. Message authentication code. While a lot of MAC algorithms out there are based on hash functions using HMAC algorithm, this algoritm is based on symmetric cipher. It has 256-bit symmetric key and 8-64 (default 32) bits of MAC value (while HMAC has same key size and value size). It is implemented as combination of EVP_PKEY type and EVP_MD type. GOST R 34.13–2015 - Symmetric cypher Grasshopper ("Kuznechik") USAGE OF GOST ALGORITHMS This engine is designed to allow usage of this algorithms in the high-level openssl functions, such as PKI, S/MIME and TLS. All the necessary constants are added to the main source tree of OpenSSL. See RFC 4490 for S/MIME with GOST algorithms and RFC 4491 for PKI. TLS support is implemented according IETF draft-chudov-cryptopro-cptls-03.txt and is compatible with CryptoPro CSP 3.0+. To use the engine you have to load it via openssl configuration file. Applications should read openssl configuration file or provide their own means to load engines. Also, applications which operate with private keys, should use generic EVP_PKEY API instead of using RSA or other algorithm-specific API. USAGE WITH COMMAND LINE openssl UTILITY 1. Generation of private key openssl genpkey -algorithm gost2001 -pkeyopt paramset:A -out seckey.pem Use -algorithm option to specify algorithm. Use -pkeyopt option to pass paramset to algorithm. The following paramsets are supported by gost2001: 0,A,B,C,XA,XB gost2012_256: 0,A,B,C,XA,XB,TCA,TCB,TCC,TCD gost2012_512: A,B,C You can also use numeric representation of OID as to destinate paramset. Paramsets starting with X are intended to use for key exchange keys. Paramsets without X are for digital signature keys. Paramset for both algorithms 0 is the test paramset which should be used only for test purposes. There are no algorithm-specific things with generation of certificate request once you have a private key. 2. Generation of certificate request along with private/public keypar openssl req -newkey gost2001 -pkeyopt paramset:A Syntax of -pkeyopt parameter is identical with genpkey command. You can also use oldstyle syntax -newkey gost2001:paramfile, but in this case you should create parameter file first. It can be created with openssl genpkey -genparam -algorithm gost2001 -pkeyopt paramset:A\ -out paramfile. 3. S/MIME operations If you want to send encrypted mail using GOST algorithms, don't forget to specify -gost89 as encryption algorithm for OpenSSL smime command. While OpenSSL is clever enough to find out that GOST R 34.11-94 digest must be used for digital signing with GOST private key, it have no way to derive symmetric encryption algorithm from key exchange keys. 4. TLS operations OpenSSL supports all four ciphersuites defined in the IETF draft. Once you've loaded GOST key and certificate into your TLS server, ciphersuites which use GOST 28147-89 encryption are enabled. Ciphersuites with NULL encryption should be enabled explicitely if needed. GOST2001-GOST89-GOST89 Uses GOST R 34.10-2001 for auth and key exchange, GOST 28147-89 for encryption and GOST 28147-89 MAC GOST2001-NULL-GOST94 Uses GOST R 34.10-2001 for auth and key exchange, no encryption and HMAC, based on GOST R 34.11-94 GOST2012-GOST8912-GOST8912 Uses GOST R 34.10-2001 or 2012 for auth and key exchange, GOST 28147-89 with paramset Z for encryption and GOST 28147-89 MAC with paramset Z GOST2012-NULL-GOST1 Uses GOST R 34.10-2001 or 2012 for auth and key exchange, no encryption and HMAC, based on GOST R 34.11-2012 256-bit. RSA, DSA and EC keys can be used simultaneously with GOST keys, if server implementation supports loading more than two private key/certificate pairs. In this case ciphersuites which use any of loaded keys would be supported and clients can negotiate ones they wish. This allows creation of TLS servers which use GOST ciphersuites for Russian clients and RSA/DSA ciphersuites for foreign clients. 5. Calculation of digests and symmetric encryption OpenSSL provides specific commands (like sha1, aes etc) for calculation of digests and symmetric encryption. Since such commands cannot be added dynamically, no such commands are provided for GOST algorithms. Use generic commands 'dgst' and 'enc'. Calculation of GOST R 34.11-94 message digest openssl dgst -md_gost94 datafile Note that GOST R 34.11-94 specifies that digest value should be interpreted as little-endian number, but OpenSSL outputs just hex dump of digest value. So, to obtain correct digest value, such as produced by gostsum utility included in the engine distribution, bytes of output should be reversed. Calculation of HMAC based on GOST R 34.11-94 openssl dgst -md_gost94 -hmac <32 bytes of key> datafile (or use hexkey if key contain NUL bytes) Calculation of GOST 28147 MAC openssl dgst -mac gost-mac -macopt key:<32 bytes of key> datafile Note absence of an option that specifies digest algorithm. gost-mac algorithm supports only one digest (which is actually part of implementation of this mac) and OpenSSL is clever enough to find out this. Following mac options are supported: key:(32 bytes of key) hexkey:(64 hexadecimal digits of key) Engine support calculation of mac with size different from default 32 bits. You can set mac size to any value from 1 to 8 bytes using -sigopt size:(number from 1 to 8 - mac size in bytes) (dgst command uses different EVP_PKEY_CTX for initialization and for finalization of MAC. Option of first are set via -macopt, and for second via -sigopt. Key should be set during initialization and size during finalization. If you use API functions EVP_DigestSignInit/EVP_DigestSignFinal, you can set both options at the same time). Encryption with GOST 28147 CFB mode openssl enc -gost89 -out encrypted-file -in plain-text-file -k Encryption with GOST 28147 CNT mode openssl enc -gost89-cnt -out encrypted-file -in plain-text-file -k Encryption with GOST 28147 CBC mode openssl enc -gost89-cbc -out encrypted-file -in plain-text-file -k 6. Encrypting private keys and PKCS12 To produce PKCS12 files compatible with MagPro CSP, you need to use GOST algorithm for encryption of PKCS12 file and also GOST R 34.11-94 hash to derive key from password. openssl pksc12 -export -inkey gost.pem -in gost_cert.pem -keypbe gost89\ -certpbe gost89 -macalg md_gost94 7. Testing speed of symmetric ciphers. To test performance of GOST symmetric ciphers you should use -evp switch of the openssl speed command. Engine-provided ciphers couldn't be accessed by cipher-specific functions, only via generic evp interface openssl speed -evp gost89 openssl speed -evp gost89-cnt openssl speed -evp gost89-cbc PROGRAMMING INTERFACES DETAILS Applications never should access engine directly. They only use provided EVP_PKEY API. But there are some details, which should be taken into account. EVP provides two kinds of API for key exchange: 1. EVP_PKEY_encrypt/EVP_PKEY_decrypt functions, intended to use with RSA-like public key encryption algorithms 2. EVP_PKEY_derive, intended to use with Diffie-Hellman-like shared key computing algorithms. Although VKO R 34.10 algorithms, described in the RFC 4357 are definitely second case, engine provides BOTH API for GOST R 34.10 keys. EVP_PKEY_derive just invokes appropriate VKO algorithm and computes 256 bit shared key. VKO R 34.10-2001 requires 64 bits of random user key material (UKM). This UKM should be transmitted to other party, so it is not generated inside derive function. It should be set by EVP_PKEY_CTX_ctrl function using EVP_PKEY_CTRL_SET_IV command after call of EVP_PKEY_derive_init, but before EVP_PKEY_derive. unsigned char ukm[8]; RAND_bytes(ukm,8); EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_DERIVE, 8, ukm) EVP_PKEY_encrypt encrypts provided session key with VKO shared key and packs it into GOST key transport structure, described in the RFC 4490. It typically uses ephemeral key pair to compute shared key and packs its public part along with encrypted key. So, for most cases use of EVP_PKEY_encrypt/EVP_PKEY_decrypt with GOST keys is almost same as with RSA. However, if peerkey field in the EVP_PKEY_CTX structure is set (using EVP_PKEY_derive_set_peerkey function) to EVP_PKEY structure which has private key and uses same parameters as the public key from which this EVP_PKEY_CTX is created, EVP_PKEY_encrypt will use this private key to compute shared key and set ephemeral key in the GOST_key_transport structure to NULL. In this case pkey and peerkey fields in the EVP_PKEY_CTX are used upside-down. If EVP_PKEY_decrypt encounters GOST_key_transport structure with NULL public key field, it tries to use peerkey field from the context to compute shared key. In this case peerkey field should really contain peer public key. Encrypt operation supports EVP_PKEY_CTRL_SET_IV operation as well. It can be used when some specific restriction on UKM are imposed by higher level protocol. For instance, description of GOST ciphersuites requires UKM to be derived from shared secret. If UKM is not set by this control command, encrypt operation would generate random UKM. libengine-gost-openssl-3.0.2/README.md000066400000000000000000000012351446070765000173740ustar00rootroot00000000000000# engine A reference implementation of the Russian GOST crypto algorithms for OpenSSL Compatibility: OpenSSL 3.0 License: same as the corresponding version of OpenSSL. Mailing list: http://www.wagner.pp.ru/list-archives/openssl-gost/ Some useful links: https://www.altlinux.org/OSS-GOST-Crypto DO NOT TRY BUILDING MASTER BRANCH AGAINST openssl 1.1.1! Use 1_1_1 branch instead! # provider A reference implementation in the same spirit as the engine, specified above. This is currently work in progress, with only a subset of all intended functionality implemented: symmetric ciphers, hashes and MACs. For more information, see [README.prov.md](README.prov.md) libengine-gost-openssl-3.0.2/README.prov.md000066400000000000000000000026641446070765000203700ustar00rootroot00000000000000# GOST provider The GOST provider is currently built in parallell with the GOST engine, and is implemented like a wrapper around the engine code. ## Currently implemented Symmetric ciphers: - gost89 - gost89-cnt - gost89-cnt-12 - gost89-cbc - kuznyechik-ecb - kuznyechik-cbc - kuznyechik-cfb - kuznyechik-ofb - kuznyechik-ctr - magma-cbc - magma-ctr - magma-ctr-acpkm - magma-ctr-acpkm-omac - kuznyechik-ctr-acpkm - kuznyechik-ctr-acpkm-omac Hashes: - id-tc26-gost3411-12-256 (md_gost12_256) - id-tc26-gost3411-12-512 (md_gost12_512) - id-GostR3411-94 (md_gost94) MACs: - gost-mac - gost-mac-12 - magma-mac - kuznyechik-mac - kuznyechik-ctr-acpkm-omac ## TODO, not requiring additional OpenSSL support - Basic support for GOST keys, i.e. implementations of KEYMGMT (including key generation), DECODER and DECODER. - Support for these operations using GOST keys: - ASYM_CIPHER (encryption and decryption using GOST keys) - SIGNATURE (signing and verifying using GOST keys) ## TODO, which requires additional OpenSSL support - TLSTREE support. This may require additional changes in libssl. Needs investigation. - PKCS7 and CMS support. This requires OpenSSL PKCS7 and CMS code to change for better interfacing with providers. ## TODO, far future - Refactor the code into being just a provider. This is to be done when engines aren't supported any more. libengine-gost-openssl-3.0.2/benchmark/000077500000000000000000000000001446070765000200465ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/benchmark/sign.c000066400000000000000000000111531446070765000211530ustar00rootroot00000000000000/********************************************************************** * Simple benchmarking for gost-engine * * * * Copyright (c) 2018 Cryptocom LTD * * Copyright (c) 2018 . * * This file is distributed under the same license as OpenSSL * **********************************************************************/ #define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include const char *tests[] = { "md_gost12_256", "gost2012_256", "A", "md_gost12_256", "gost2012_256", "B", "md_gost12_256", "gost2012_256", "C", "md_gost12_256", "gost2012_256", "TCA", "md_gost12_256", "gost2012_256", "TCB", "md_gost12_256", "gost2012_256", "TCC", "md_gost12_256", "gost2012_256", "TCD", "md_gost12_512", "gost2012_512", "A", "md_gost12_512", "gost2012_512", "B", "md_gost12_512", "gost2012_512", "C", NULL, }; static EVP_PKEY *create_key(const char *algname, const char *param) { EVP_PKEY *key1 = EVP_PKEY_new(), *newkey = NULL; EVP_PKEY_CTX *ctx = NULL; if (EVP_PKEY_set_type_str(key1, algname, strlen(algname)) <= 0) goto err; if (!(ctx = EVP_PKEY_CTX_new(key1, NULL))) goto err; if (EVP_PKEY_keygen_init(ctx) == 0) goto err; if (ERR_peek_last_error()) goto err; if (EVP_PKEY_CTX_ctrl_str(ctx, "paramset", param) <= 0) goto err; if (EVP_PKEY_keygen(ctx, &newkey) <= 0) goto err; err: if(ctx) EVP_PKEY_CTX_free(ctx); EVP_PKEY_free(key1); return newkey; } void usage(char *name) { fprintf(stderr, "usage: %s [-l data_len] [-c cycles]\n", name); exit(1); } int main(int argc, char **argv) { unsigned int data_len = 1; unsigned int cycles = 100; int option; clockid_t clock_type = CLOCK_MONOTONIC; int test, test_count = 0; opterr = 0; while((option = getopt(argc, argv, "l:c:C")) >= 0) { switch (option) { case 'l': data_len = atoi(optarg); break; case 'c': cycles = atoi(optarg); break; case 'C': clock_type = CLOCK_PROCESS_CPUTIME_ID; break; default: usage(argv[0]); break; } } if (optind < argc) usage(argv[0]); if (cycles < 100) { printf("cycles too low\n"); exit(1); } OPENSSL_add_all_algorithms_conf(); ERR_load_crypto_strings(); for (test = 0; tests[test]; test += 3) { double diff[2]; /* sign, verify */ const char *digest = tests[test]; const char *algo = tests[test + 1]; const char *param = tests[test + 2]; const EVP_MD *mdtype; EVP_MD_CTX *md_ctx; unsigned int siglen; unsigned char *sigbuf; EVP_PKEY *pkey; unsigned char *data; int pass; md_ctx = EVP_MD_CTX_new(); mdtype = EVP_get_digestbyname(digest); if (!mdtype) continue; pkey = create_key(algo, param); data = (unsigned char *) malloc(data_len); if (!pkey) continue; test_count++; printf("wait..."); fflush(stdout); siglen = EVP_PKEY_size(pkey); sigbuf = malloc(siglen * cycles); if (!sigbuf) { fprintf(stderr, "No tests were run, malloc failure.\n"); exit(1); } for (pass = 0; pass < 2; pass++) { struct timespec ts; struct timeval debut, fin, delta; int err; unsigned int i; clock_gettime(clock_type, &ts); TIMESPEC_TO_TIMEVAL(&debut, &ts); if (pass == 0) { /* sign */ for (i = 0; i < cycles; i++) { EVP_SignInit(md_ctx, mdtype); err = EVP_SignUpdate(md_ctx, data, data_len) && EVP_SignFinal(md_ctx, &sigbuf[siglen * i], (unsigned int *)&siglen, pkey); if (err != 1) printf("!"); EVP_MD_CTX_reset(md_ctx); } } else { /* verify */ for (i = 0; i < cycles; i++) { EVP_VerifyInit(md_ctx, mdtype); err = EVP_VerifyUpdate(md_ctx, data, data_len) && EVP_VerifyFinal(md_ctx, &sigbuf[siglen * i], siglen, pkey); EVP_MD_CTX_reset(md_ctx); if (err != 1) printf("!"); } } clock_gettime(clock_type, &ts); TIMESPEC_TO_TIMEVAL(&fin, &ts); timersub(&fin, &debut, &delta); diff[pass] = (double)delta.tv_sec + (double)delta.tv_usec / 1000000; } printf("\r%s %s: sign: %.1f/s, verify: %.1f/s\n", algo, param, (double)cycles / diff[0], (double)cycles / diff[1]); EVP_PKEY_free(pkey); free(sigbuf); free(data); } if (!test_count) { fprintf(stderr, "No tests were run, something is wrong.\n"); exit(1); } exit(0); } libengine-gost-openssl-3.0.2/e_gost_err.c000066400000000000000000000253541446070765000204210ustar00rootroot00000000000000/* * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #include #include "e_gost_err.h" #ifdef OPENSSL_VERSION_MAJOR /* * OpenSSL 3.0 or higher: * Function codes are no more, and ERR_raise() + ERR_set_debug is preferred * to ERR_PUT_error(). */ # define OPENSSL_ERR_NEW_WORLD_ORDER #endif #ifndef OPENSSL_NO_ERR # ifndef OPENSSL_ERR_NEW_WORLD_ORDER static ERR_STRING_DATA GOST_str_functs[] = { {ERR_PACK(0, GOST_F_DECODE_GOST_ALGOR_PARAMS, 0), "decode_gost_algor_params"}, {ERR_PACK(0, GOST_F_ENCODE_GOST_ALGOR_PARAMS, 0), "encode_gost_algor_params"}, {ERR_PACK(0, GOST_F_FILL_GOST_EC_PARAMS, 0), "fill_GOST_EC_params"}, {ERR_PACK(0, GOST_F_GET_ENCRYPTION_PARAMS, 0), "get_encryption_params"}, {ERR_PACK(0, GOST_F_GOST2015_GET_ASN1_PARAMS, 0), "gost2015_get_asn1_params"}, {ERR_PACK(0, GOST_F_GOST2015_SET_ASN1_PARAMS, 0), "gost2015_set_asn1_params"}, {ERR_PACK(0, GOST_F_GOST89_GET_ASN1_PARAMETERS, 0), "gost89_get_asn1_parameters"}, {ERR_PACK(0, GOST_F_GOST89_SET_ASN1_PARAMETERS, 0), "gost89_set_asn1_parameters"}, {ERR_PACK(0, GOST_F_GOST_CIPHER_CTL, 0), "gost_cipher_ctl"}, {ERR_PACK(0, GOST_F_GOST_CMS_SET_KARI_SHARED_INFO, 0), "gost_cms_set_kari_shared_info"}, {ERR_PACK(0, GOST_F_GOST_CMS_SET_KTRI_SHARED_INFO, 0), "gost_cms_set_ktri_shared_info"}, {ERR_PACK(0, GOST_F_GOST_CMS_SET_SHARED_INFO, 0), "gost_cms_set_shared_info"}, {ERR_PACK(0, GOST_F_GOST_EC_COMPUTE_PUBLIC, 0), "gost_ec_compute_public"}, {ERR_PACK(0, GOST_F_GOST_EC_KEYGEN, 0), "gost_ec_keygen"}, {ERR_PACK(0, GOST_F_GOST_EC_SIGN, 0), "gost_ec_sign"}, {ERR_PACK(0, GOST_F_GOST_EC_VERIFY, 0), "gost_ec_verify"}, {ERR_PACK(0, GOST_F_GOST_ENCODE_CMS_PARAMS, 0), "gost_encode_cms_params"}, {ERR_PACK(0, GOST_F_GOST_GRASSHOPPER_CIPHER_CTL, 0), "gost_grasshopper_cipher_ctl"}, {ERR_PACK(0, GOST_F_GOST_GRASSHOPPER_CIPHER_DO_CTRACPKM_OMAC, 0), "gost_grasshopper_cipher_do_ctracpkm_omac"}, {ERR_PACK(0, GOST_F_GOST_GRASSHOPPER_CIPHER_DO_MGM, 0), "gost_grasshopper_cipher_do_mgm"}, {ERR_PACK(0, GOST_F_GOST_GRASSHOPPER_CIPHER_INIT_CTRACPKM_OMAC, 0), "gost_grasshopper_cipher_init_ctracpkm_omac"}, {ERR_PACK(0, GOST_F_GOST_GRASSHOPPER_MGM_CTRL, 0), "gost_grasshopper_mgm_ctrl"}, {ERR_PACK(0, GOST_F_GOST_GRASSHOPPER_SET_ASN1_PARAMETERS, 0), "gost_grasshopper_set_asn1_parameters"}, {ERR_PACK(0, GOST_F_GOST_IMIT_CTRL, 0), "gost_imit_ctrl"}, {ERR_PACK(0, GOST_F_GOST_IMIT_FINAL, 0), "gost_imit_final"}, {ERR_PACK(0, GOST_F_GOST_IMIT_UPDATE, 0), "gost_imit_update"}, {ERR_PACK(0, GOST_F_GOST_KDFTREE2012_256, 0), "gost_kdftree2012_256"}, {ERR_PACK(0, GOST_F_GOST_KEXP15, 0), "gost_kexp15"}, {ERR_PACK(0, GOST_F_GOST_KIMP15, 0), "gost_kimp15"}, {ERR_PACK(0, GOST_F_GOST_MAGMA_CIPHER_DO_MGM, 0), "gost_magma_cipher_do_mgm"}, {ERR_PACK(0, GOST_F_GOST_MAGMA_MGM_CTRL, 0), "gost_magma_mgm_ctrl"}, {ERR_PACK(0, GOST_F_GOST_MGM128_AAD, 0), "gost_mgm128_aad"}, {ERR_PACK(0, GOST_F_GOST_MGM128_DECRYPT, 0), "gost_mgm128_decrypt"}, {ERR_PACK(0, GOST_F_GOST_MGM128_ENCRYPT, 0), "gost_mgm128_encrypt"}, {ERR_PACK(0, GOST_F_MAGMA_CIPHER_CTL, 0), "magma_cipher_ctl"}, {ERR_PACK(0, GOST_F_MAGMA_CIPHER_CTL_ACPKM_OMAC, 0), "magma_cipher_ctl_acpkm_omac"}, {ERR_PACK(0, GOST_F_MAGMA_CIPHER_INIT_CTR_ACPKM_OMAC, 0), "magma_cipher_init_ctr_acpkm_omac"}, {ERR_PACK(0, GOST_F_OMAC_ACPKM_IMIT_CTRL, 0), "omac_acpkm_imit_ctrl"}, {ERR_PACK(0, GOST_F_OMAC_ACPKM_IMIT_FINAL, 0), "omac_acpkm_imit_final"}, {ERR_PACK(0, GOST_F_OMAC_ACPKM_IMIT_UPDATE, 0), "omac_acpkm_imit_update"}, {ERR_PACK(0, GOST_F_OMAC_ACPKM_KEY, 0), "omac_acpkm_key"}, {ERR_PACK(0, GOST_F_OMAC_IMIT_CTRL, 0), "omac_imit_ctrl"}, {ERR_PACK(0, GOST_F_OMAC_IMIT_FINAL, 0), "omac_imit_final"}, {ERR_PACK(0, GOST_F_OMAC_IMIT_UPDATE, 0), "omac_imit_update"}, {ERR_PACK(0, GOST_F_OMAC_KEY, 0), "omac_key"}, {ERR_PACK(0, GOST_F_PARAM_COPY_GOST_EC, 0), "param_copy_gost_ec"}, {ERR_PACK(0, GOST_F_PKEY_GOST2001_PARAMGEN, 0), "pkey_gost2001_paramgen"}, {ERR_PACK(0, GOST_F_PKEY_GOST2012_PARAMGEN, 0), "pkey_gost2012_paramgen"}, {ERR_PACK(0, GOST_F_PKEY_GOST2018_DECRYPT, 0), "pkey_gost2018_decrypt"}, {ERR_PACK(0, GOST_F_PKEY_GOST2018_ENCRYPT, 0), "pkey_gost2018_encrypt"}, {ERR_PACK(0, GOST_F_PKEY_GOST_CTRL, 0), "pkey_gost_ctrl"}, {ERR_PACK(0, GOST_F_PKEY_GOST_DECRYPT, 0), "pkey_gost_decrypt"}, {ERR_PACK(0, GOST_F_PKEY_GOST_ECCP_DECRYPT, 0), "pkey_GOST_ECcp_decrypt"}, {ERR_PACK(0, GOST_F_PKEY_GOST_ECCP_ENCRYPT, 0), "pkey_GOST_ECcp_encrypt"}, {ERR_PACK(0, GOST_F_PKEY_GOST_EC_CTRL_STR_256, 0), "pkey_gost_ec_ctrl_str_256"}, {ERR_PACK(0, GOST_F_PKEY_GOST_EC_CTRL_STR_512, 0), "pkey_gost_ec_ctrl_str_512"}, {ERR_PACK(0, GOST_F_PKEY_GOST_EC_CTRL_STR_COMMON, 0), "pkey_gost_ec_ctrl_str_common"}, {ERR_PACK(0, GOST_F_PKEY_GOST_EC_DERIVE, 0), "pkey_gost_ec_derive"}, {ERR_PACK(0, GOST_F_PKEY_GOST_ENCRYPT, 0), "pkey_gost_encrypt"}, {ERR_PACK(0, GOST_F_PKEY_GOST_GRASSHOPPER_MAC_SIGNCTX_INIT, 0), "pkey_gost_grasshopper_mac_signctx_init"}, {ERR_PACK(0, GOST_F_PKEY_GOST_MAC_CTRL, 0), "pkey_gost_mac_ctrl"}, {ERR_PACK(0, GOST_F_PKEY_GOST_MAC_CTRL_STR, 0), "pkey_gost_mac_ctrl_str"}, {ERR_PACK(0, GOST_F_PKEY_GOST_MAC_KEYGEN_BASE, 0), "pkey_gost_mac_keygen_base"}, {ERR_PACK(0, GOST_F_PKEY_GOST_MAC_SIGNCTX_INIT, 0), "pkey_gost_mac_signctx_init"}, {ERR_PACK(0, GOST_F_PKEY_GOST_MAGMA_MAC_SIGNCTX_INIT, 0), "pkey_gost_magma_mac_signctx_init"}, {ERR_PACK(0, GOST_F_PKEY_GOST_OMAC_CTRL, 0), "pkey_gost_omac_ctrl"}, {ERR_PACK(0, GOST_F_PKEY_GOST_OMAC_CTRL_STR, 0), "pkey_gost_omac_ctrl_str"}, {ERR_PACK(0, GOST_F_PRINT_GOST_EC_PUB, 0), "print_gost_ec_pub"}, {ERR_PACK(0, GOST_F_PRIV_DECODE_GOST, 0), "priv_decode_gost"}, {ERR_PACK(0, GOST_F_PUB_DECODE_GOST_EC, 0), "pub_decode_gost_ec"}, {ERR_PACK(0, GOST_F_PUB_ENCODE_GOST_EC, 0), "pub_encode_gost_ec"}, {ERR_PACK(0, GOST_F_UNPACK_CP_SIGNATURE, 0), "unpack_cp_signature"}, {ERR_PACK(0, GOST_F_VKO_COMPUTE_KEY, 0), "VKO_compute_key"}, {0, NULL} }; # endif static ERR_STRING_DATA GOST_str_reasons[] = { {ERR_PACK(0, 0, GOST_R_BAD_KEY_PARAMETERS_FORMAT), "bad key parameters format"}, {ERR_PACK(0, 0, GOST_R_BAD_MAC), "bad mac"}, {ERR_PACK(0, 0, GOST_R_BAD_ORDER), "bad order"}, {ERR_PACK(0, 0, GOST_R_BAD_PKEY_PARAMETERS_FORMAT), "bad pkey parameters format"}, {ERR_PACK(0, 0, GOST_R_CANNOT_PACK_EPHEMERAL_KEY), "cannot pack ephemeral key"}, {ERR_PACK(0, 0, GOST_R_CANNOT_UNPACK_EPHEMERAL_KEY), "cannot unpack ephemeral key"}, {ERR_PACK(0, 0, GOST_R_CIPHER_NOT_FOUND), "cipher not found"}, {ERR_PACK(0, 0, GOST_R_CTRL_CALL_FAILED), "ctrl call failed"}, {ERR_PACK(0, 0, GOST_R_DATA_TOO_LARGE), "data too large"}, {ERR_PACK(0, 0, GOST_R_ERROR_COMPUTING_EXPORT_KEYS), "error computing export keys"}, {ERR_PACK(0, 0, GOST_R_ERROR_COMPUTING_SHARED_KEY), "error computing shared key"}, {ERR_PACK(0, 0, GOST_R_ERROR_DECODING_PUBLIC_KEY), "error decoding public key"}, {ERR_PACK(0, 0, GOST_R_ERROR_PARSING_KEY_TRANSPORT_INFO), "error parsing key transport info"}, {ERR_PACK(0, 0, GOST_R_ERROR_POINT_MUL), "error point mul"}, {ERR_PACK(0, 0, GOST_R_ERROR_SETTING_PEER_KEY), "error setting peer key"}, {ERR_PACK(0, 0, GOST_R_INCOMPATIBLE_ALGORITHMS), "incompatible algorithms"}, {ERR_PACK(0, 0, GOST_R_INCOMPATIBLE_PEER_KEY), "incompatible peer key"}, {ERR_PACK(0, 0, GOST_R_INVALID_BUFFER_SIZE), "invalid buffer size"}, {ERR_PACK(0, 0, GOST_R_INVALID_CIPHER), "invalid cipher"}, {ERR_PACK(0, 0, GOST_R_INVALID_CIPHER_PARAMS), "invalid cipher params"}, {ERR_PACK(0, 0, GOST_R_INVALID_CIPHER_PARAM_OID), "invalid cipher param oid"}, {ERR_PACK(0, 0, GOST_R_INVALID_DIGEST_TYPE), "invalid digest type"}, {ERR_PACK(0, 0, GOST_R_INVALID_IV_LENGTH), "invalid iv length"}, {ERR_PACK(0, 0, GOST_R_INVALID_MAC_KEY_LENGTH), "invalid mac key length"}, {ERR_PACK(0, 0, GOST_R_INVALID_MAC_KEY_SIZE), "invalid mac key size"}, {ERR_PACK(0, 0, GOST_R_INVALID_MAC_PARAMS), "invalid mac params"}, {ERR_PACK(0, 0, GOST_R_INVALID_MAC_SIZE), "invalid mac size"}, {ERR_PACK(0, 0, GOST_R_INVALID_PARAMSET), "invalid paramset"}, {ERR_PACK(0, 0, GOST_R_INVALID_TAG_LENGTH), "invalid tag length"}, {ERR_PACK(0, 0, GOST_R_KEY_IS_NOT_INITIALIZED), "key is not initialized"}, {ERR_PACK(0, 0, GOST_R_KEY_PARAMETERS_MISSING), "key parameters missing"}, {ERR_PACK(0, 0, GOST_R_MAC_KEY_NOT_SET), "mac key not set"}, {ERR_PACK(0, 0, GOST_R_NO_PARAMETERS_SET), "no parameters set"}, {ERR_PACK(0, 0, GOST_R_NO_PEER_KEY), "no peer key"}, {ERR_PACK(0, 0, GOST_R_NO_PRIVATE_PART_OF_NON_EPHEMERAL_KEYPAIR), "no private part of non ephemeral keypair"}, {ERR_PACK(0, 0, GOST_R_PUBLIC_KEY_UNDEFINED), "public key undefined"}, {ERR_PACK(0, 0, GOST_R_RNG_ERROR), "rng error"}, {ERR_PACK(0, 0, GOST_R_SIGNATURE_MISMATCH), "signature mismatch"}, {ERR_PACK(0, 0, GOST_R_SIGNATURE_PARTS_GREATER_THAN_Q), "signature parts greater than q"}, {ERR_PACK(0, 0, GOST_R_UKM_NOT_SET), "ukm not set"}, {ERR_PACK(0, 0, GOST_R_UNSUPPORTED_CIPHER_CTL_COMMAND), "unsupported cipher ctl command"}, {ERR_PACK(0, 0, GOST_R_UNSUPPORTED_PARAMETER_SET), "unsupported parameter set"}, {ERR_PACK(0, 0, GOST_R_UNSUPPORTED_RECIPIENT_INFO), "unsupported recipient info"}, {0, NULL} }; #endif #ifndef GOST_PROV static int lib_code = 0; static int error_loaded = 0; int ERR_load_GOST_strings(void) { if (lib_code == 0) lib_code = ERR_get_next_error_library(); if (!error_loaded) { #ifndef OPENSSL_NO_ERR # ifndef OPENSSL_ERR_NEW_WORLD_ORDER ERR_load_strings(lib_code, GOST_str_functs); # endif ERR_load_strings(lib_code, GOST_str_reasons); #endif error_loaded = 1; } return 1; } void ERR_unload_GOST_strings(void) { if (error_loaded) { #ifndef OPENSSL_NO_ERR # ifndef OPENSSL_ERR_NEW_WORLD_ORDER ERR_unload_strings(lib_code, GOST_str_functs); # endif ERR_unload_strings(lib_code, GOST_str_reasons); #endif error_loaded = 0; } } void ERR_GOST_error(int function, int reason, char *file, int line) { if (lib_code == 0) lib_code = ERR_get_next_error_library(); #ifndef OPENSSL_ERR_NEW_WORLD_ORDER ERR_PUT_error(lib_code, function, reason, file, line); #else ERR_raise(lib_code, reason); ERR_set_debug(file, line, NULL); #endif } #endif libengine-gost-openssl-3.0.2/e_gost_err.h000066400000000000000000000175141446070765000204250ustar00rootroot00000000000000/* * Generated by util/mkerr.pl DO NOT EDIT * Copyright 1995-2020 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy * in the file LICENSE in the source distribution or at * https://www.openssl.org/source/license.html */ #ifndef HEADER_GOSTERR_H # define HEADER_GOSTERR_H # include # define GOSTerr(f, r) ERR_GOST_error((f), (r), OPENSSL_FILE, OPENSSL_LINE) # ifdef __cplusplus extern "C" { # endif int ERR_load_GOST_strings(void); void ERR_unload_GOST_strings(void); void ERR_GOST_error(int function, int reason, char *file, int line); # ifdef __cplusplus } # endif /* * GOST function codes. */ # define GOST_F_DECODE_GOST_ALGOR_PARAMS 100 # define GOST_F_ENCODE_GOST_ALGOR_PARAMS 101 # define GOST_F_FILL_GOST_EC_PARAMS 102 # define GOST_F_GET_ENCRYPTION_PARAMS 103 # define GOST_F_GOST2015_GET_ASN1_PARAMS 158 # define GOST_F_GOST2015_SET_ASN1_PARAMS 159 # define GOST_F_GOST89_GET_ASN1_PARAMETERS 104 # define GOST_F_GOST89_SET_ASN1_PARAMETERS 105 # define GOST_F_GOST_CIPHER_CTL 106 # define GOST_F_GOST_CMS_SET_KARI_SHARED_INFO 156 # define GOST_F_GOST_CMS_SET_KTRI_SHARED_INFO 157 # define GOST_F_GOST_CMS_SET_SHARED_INFO 155 # define GOST_F_GOST_EC_COMPUTE_PUBLIC 107 # define GOST_F_GOST_EC_KEYGEN 108 # define GOST_F_GOST_EC_SIGN 109 # define GOST_F_GOST_EC_VERIFY 110 # define GOST_F_GOST_ENCODE_CMS_PARAMS 161 # define GOST_F_GOST_GRASSHOPPER_CIPHER_CTL 111 # define GOST_F_GOST_GRASSHOPPER_CIPHER_DO_CTRACPKM_OMAC 160 # define GOST_F_GOST_GRASSHOPPER_CIPHER_DO_MGM 166 # define GOST_F_GOST_GRASSHOPPER_CIPHER_INIT_CTRACPKM_OMAC 162 # define GOST_F_GOST_GRASSHOPPER_MGM_CTRL 167 # define GOST_F_GOST_GRASSHOPPER_SET_ASN1_PARAMETERS 112 # define GOST_F_GOST_IMIT_CTRL 113 # define GOST_F_GOST_IMIT_FINAL 114 # define GOST_F_GOST_IMIT_UPDATE 115 # define GOST_F_GOST_KDFTREE2012_256 149 # define GOST_F_GOST_KEXP15 143 # define GOST_F_GOST_KIMP15 148 # define GOST_F_GOST_MAGMA_CIPHER_DO_MGM 168 # define GOST_F_GOST_MAGMA_MGM_CTRL 169 # define GOST_F_GOST_MGM128_AAD 170 # define GOST_F_GOST_MGM128_DECRYPT 171 # define GOST_F_GOST_MGM128_ENCRYPT 172 # define GOST_F_MAGMA_CIPHER_CTL 163 # define GOST_F_MAGMA_CIPHER_CTL_ACPKM_OMAC 164 # define GOST_F_MAGMA_CIPHER_INIT_CTR_ACPKM_OMAC 165 # define GOST_F_OMAC_ACPKM_IMIT_CTRL 144 # define GOST_F_OMAC_ACPKM_IMIT_FINAL 145 # define GOST_F_OMAC_ACPKM_IMIT_UPDATE 146 # define GOST_F_OMAC_ACPKM_KEY 147 # define GOST_F_OMAC_IMIT_CTRL 116 # define GOST_F_OMAC_IMIT_FINAL 117 # define GOST_F_OMAC_IMIT_UPDATE 118 # define GOST_F_OMAC_KEY 138 # define GOST_F_PARAM_COPY_GOST_EC 119 # define GOST_F_PKEY_GOST2001_PARAMGEN 120 # define GOST_F_PKEY_GOST2012_PARAMGEN 121 # define GOST_F_PKEY_GOST2018_DECRYPT 150 # define GOST_F_PKEY_GOST2018_ENCRYPT 151 # define GOST_F_PKEY_GOST_CTRL 122 # define GOST_F_PKEY_GOST_DECRYPT 153 # define GOST_F_PKEY_GOST_ECCP_DECRYPT 123 # define GOST_F_PKEY_GOST_ECCP_ENCRYPT 124 # define GOST_F_PKEY_GOST_EC_CTRL_STR_256 125 # define GOST_F_PKEY_GOST_EC_CTRL_STR_512 126 # define GOST_F_PKEY_GOST_EC_CTRL_STR_COMMON 154 # define GOST_F_PKEY_GOST_EC_DERIVE 127 # define GOST_F_PKEY_GOST_ENCRYPT 152 # define GOST_F_PKEY_GOST_GRASSHOPPER_MAC_SIGNCTX_INIT 141 # define GOST_F_PKEY_GOST_MAC_CTRL 128 # define GOST_F_PKEY_GOST_MAC_CTRL_STR 129 # define GOST_F_PKEY_GOST_MAC_KEYGEN_BASE 130 # define GOST_F_PKEY_GOST_MAC_SIGNCTX_INIT 131 # define GOST_F_PKEY_GOST_MAGMA_MAC_SIGNCTX_INIT 142 # define GOST_F_PKEY_GOST_OMAC_CTRL 139 # define GOST_F_PKEY_GOST_OMAC_CTRL_STR 140 # define GOST_F_PRINT_GOST_EC_PUB 132 # define GOST_F_PRIV_DECODE_GOST 133 # define GOST_F_PUB_DECODE_GOST_EC 134 # define GOST_F_PUB_ENCODE_GOST_EC 135 # define GOST_F_UNPACK_CP_SIGNATURE 136 # define GOST_F_VKO_COMPUTE_KEY 137 /* * GOST reason codes. */ # define GOST_R_BAD_KEY_PARAMETERS_FORMAT 100 # define GOST_R_BAD_MAC 133 # define GOST_R_BAD_ORDER 132 # define GOST_R_BAD_PKEY_PARAMETERS_FORMAT 101 # define GOST_R_CANNOT_PACK_EPHEMERAL_KEY 102 # define GOST_R_CANNOT_UNPACK_EPHEMERAL_KEY 136 # define GOST_R_CIPHER_NOT_FOUND 103 # define GOST_R_CTRL_CALL_FAILED 104 # define GOST_R_DATA_TOO_LARGE 141 # define GOST_R_ERROR_COMPUTING_EXPORT_KEYS 135 # define GOST_R_ERROR_COMPUTING_SHARED_KEY 105 # define GOST_R_ERROR_DECODING_PUBLIC_KEY 138 # define GOST_R_ERROR_PARSING_KEY_TRANSPORT_INFO 106 # define GOST_R_ERROR_POINT_MUL 107 # define GOST_R_ERROR_SETTING_PEER_KEY 139 # define GOST_R_INCOMPATIBLE_ALGORITHMS 108 # define GOST_R_INCOMPATIBLE_PEER_KEY 109 # define GOST_R_INVALID_BUFFER_SIZE 140 # define GOST_R_INVALID_CIPHER 134 # define GOST_R_INVALID_CIPHER_PARAMS 110 # define GOST_R_INVALID_CIPHER_PARAM_OID 111 # define GOST_R_INVALID_DIGEST_TYPE 112 # define GOST_R_INVALID_IV_LENGTH 113 # define GOST_R_INVALID_MAC_KEY_LENGTH 114 # define GOST_R_INVALID_MAC_KEY_SIZE 115 # define GOST_R_INVALID_MAC_PARAMS 116 # define GOST_R_INVALID_MAC_SIZE 117 # define GOST_R_INVALID_PARAMSET 118 # define GOST_R_INVALID_TAG_LENGTH 142 # define GOST_R_KEY_IS_NOT_INITIALIZED 119 # define GOST_R_KEY_PARAMETERS_MISSING 120 # define GOST_R_MAC_KEY_NOT_SET 121 # define GOST_R_NO_PARAMETERS_SET 122 # define GOST_R_NO_PEER_KEY 123 # define GOST_R_NO_PRIVATE_PART_OF_NON_EPHEMERAL_KEYPAIR 124 # define GOST_R_PUBLIC_KEY_UNDEFINED 125 # define GOST_R_RNG_ERROR 126 # define GOST_R_SIGNATURE_MISMATCH 127 # define GOST_R_SIGNATURE_PARTS_GREATER_THAN_Q 128 # define GOST_R_UKM_NOT_SET 129 # define GOST_R_UNSUPPORTED_CIPHER_CTL_COMMAND 130 # define GOST_R_UNSUPPORTED_PARAMETER_SET 131 # define GOST_R_UNSUPPORTED_RECIPIENT_INFO 137 #endif libengine-gost-openssl-3.0.2/e_gost_err.proto000066400000000000000000000053141446070765000213340ustar00rootroot00000000000000/* ==================================================================== * Copyright (c) 2001-2005 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ #ifndef HEADER_GOST_ERR_H #define HEADER_GOST_ERR_H #define GOST_LIB_NAME "GOST engine" #ifdef __cplusplus extern "C" { #endif libengine-gost-openssl-3.0.2/ecp_id_GostR3410_2001_CryptoPro_A_ParamSet.c000066400000000000000000015511771446070765000256710ustar00rootroot00000000000000/* Autogenerated: ECCKiila https://gitlab.com/nisec/ecckiila */ /*- * MIT License * * Copyright (c) 2020 Luis Rivera-Zamarripa, JesÃēs-Javier Chi-Domínguez, Billy Bob Brumley * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ #if defined(__SIZEOF_INT128__) && !defined(PEDANTIC) #include #include #define LIMB_BITS 64 #define LIMB_CNT 5 /* Field elements */ typedef uint64_t fe_t[LIMB_CNT]; typedef uint64_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_GOSTR3410_2001_CRYPTOPRO_A_PARAMSET_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) #define fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(c, a, b) \ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_add(c, a, b); \ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry(c, c) #define fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(c, a, b) \ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_sub(c, a, b); \ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry(c, c) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: unsaturated_solinas --static --use-value-barrier id_GostR3410_2001_CryptoPro_A_ParamSet 64 5 '2^256 - 617' */ /* curve description: id_GostR3410_2001_CryptoPro_A_ParamSet */ /* machine_wordsize = 64 (from "64") */ /* requested operations: (all) */ /* n = 5 (from "5") */ /* s-c = 2^256 - [(1, 617)] (from "2^256 - 617") */ /* tight_bounds_multiplier = 1 (from "") */ /* */ /* Computed values: */ /* carry_chain = [0, 1, 2, 3, 4, 0, 1] */ /* eval z = z[0] + (z[1] << 52) + (z[2] << 103) + (z[3] << 154) + (z[4] << 205) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ /* balance = [0x1ffffffffffb2e, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe] */ #include typedef unsigned char fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1; typedef signed char fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1; typedef signed __int128 fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int128; typedef unsigned __int128 fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_GOSTR3410_2001_CRYPTOPRO_A_PARAMSET_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint64_t fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_value_barrier_u64(uint64_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_value_barrier_u64(x) (x) #endif /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u52 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^52 * out2 = ⌊(arg1 + arg2 + arg3) / 2^52⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xfffffffffffff] * arg3: [0x0 ~> 0xfffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xfffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u52( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { uint64_t x1; uint64_t x2; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT64_C(0xfffffffffffff)); x3 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x1 >> 52); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u52 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^52 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^52⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xfffffffffffff] * arg3: [0x0 ~> 0xfffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xfffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u52( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { int64_t x1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1 x2; uint64_t x3; x1 = ((int64_t)(arg2 - (int64_t)arg1) - (int64_t)arg3); x2 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1)(x1 >> 52); x3 = (x1 & UINT64_C(0xfffffffffffff)); *out1 = x3; *out2 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(0x0 - x2); } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u51 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^51 * out2 = ⌊(arg1 + arg2 + arg3) / 2^51⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7ffffffffffff] * arg3: [0x0 ~> 0x7ffffffffffff] * Output Bounds: * out1: [0x0 ~> 0x7ffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u51( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { uint64_t x1; uint64_t x2; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT64_C(0x7ffffffffffff)); x3 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x1 >> 51); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u51 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^51 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^51⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7ffffffffffff] * arg3: [0x0 ~> 0x7ffffffffffff] * Output Bounds: * out1: [0x0 ~> 0x7ffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u51( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { int64_t x1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1 x2; uint64_t x3; x1 = ((int64_t)(arg2 - (int64_t)arg1) - (int64_t)arg3); x2 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1)(x1 >> 51); x3 = (x1 & UINT64_C(0x7ffffffffffff)); *out1 = x3; *out2 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(0x0 - x2); } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u64 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u64( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x1; uint64_t x2; uint64_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); x3 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_value_barrier_u64(x2) & arg3) | (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_value_barrier_u64((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul multiplies two field elements and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * arg2: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul( uint64_t out1[5], const uint64_t arg1[5], const uint64_t arg2[5]) { fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x2; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x3; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x4; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x5; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x6; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x7; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x8; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x9; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x10; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x11; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x12; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x13; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x14; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x15; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x16; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x17; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x18; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x19; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x20; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x21; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x22; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x23; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x24; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x25; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x26; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x27; uint64_t x28; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x29; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x30; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x31; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x32; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x33; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x34; uint64_t x35; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x36; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x37; uint64_t x38; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x39; uint64_t x40; uint64_t x41; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x42; uint64_t x43; uint64_t x44; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x45; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x46; uint64_t x47; uint64_t x48; uint64_t x49; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x50; uint64_t x51; uint64_t x52; x1 = (UINT16_C(0x269) * ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[4]) * (arg2[4]))); x2 = (UINT16_C(0x269) * ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[4]) * (arg2[3]))); x3 = (UINT16_C(0x269) * ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[4]) * (arg2[2]))); x4 = (UINT16_C(0x269) * (((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[4]) * (arg2[1])) * 0x2)); x5 = (UINT16_C(0x269) * ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[3]) * (arg2[4]))); x6 = (UINT16_C(0x269) * ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[3]) * (arg2[3]))); x7 = (UINT16_C(0x269) * (((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[3]) * (arg2[2])) * 0x2)); x8 = (UINT16_C(0x269) * ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[2]) * (arg2[4]))); x9 = (UINT16_C(0x269) * (((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[2]) * (arg2[3])) * 0x2)); x10 = (UINT16_C(0x269) * (((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[1]) * (arg2[4])) * 0x2)); x11 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[4]) * (arg2[0])); x12 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[3]) * ((arg2[1]) * 0x2)); x13 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[3]) * (arg2[0])); x14 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[2]) * ((arg2[2]) * 0x2)); x15 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[2]) * ((arg2[1]) * 0x2)); x16 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[2]) * (arg2[0])); x17 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[1]) * ((arg2[3]) * 0x2)); x18 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[1]) * ((arg2[2]) * 0x2)); x19 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[1]) * ((arg2[1]) * 0x2)); x20 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[1]) * (arg2[0])); x21 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[0]) * (arg2[4])); x22 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[0]) * (arg2[3])); x23 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[0]) * (arg2[2])); x24 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[0]) * (arg2[1])); x25 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[0]) * (arg2[0])); x26 = (x25 + (x10 + (x9 + (x7 + x4)))); x27 = (x26 >> 52); x28 = (uint64_t)(x26 & UINT64_C(0xfffffffffffff)); x29 = (x21 + (x17 + (x14 + (x12 + x11)))); x30 = (x22 + (x18 + (x15 + (x13 + x1)))); x31 = (x23 + (x19 + (x16 + (x5 + x2)))); x32 = (x24 + (x20 + (x8 + (x6 + x3)))); x33 = (x27 + x32); x34 = (x33 >> 51); x35 = (uint64_t)(x33 & UINT64_C(0x7ffffffffffff)); x36 = (x34 + x31); x37 = (x36 >> 51); x38 = (uint64_t)(x36 & UINT64_C(0x7ffffffffffff)); x39 = (x37 + x30); x40 = (uint64_t)(x39 >> 51); x41 = (uint64_t)(x39 & UINT64_C(0x7ffffffffffff)); x42 = (x40 + x29); x43 = (uint64_t)(x42 >> 51); x44 = (uint64_t)(x42 & UINT64_C(0x7ffffffffffff)); x45 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)UINT16_C(0x269) * x43); x46 = (x28 + x45); x47 = (uint64_t)(x46 >> 52); x48 = (uint64_t)(x46 & UINT64_C(0xfffffffffffff)); x49 = (x47 + x35); x50 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x49 >> 51); x51 = (x49 & UINT64_C(0x7ffffffffffff)); x52 = (x50 + x38); out1[0] = x48; out1[1] = x51; out1[2] = x52; out1[3] = x41; out1[4] = x44; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square squares a field element and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg1) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square( uint64_t out1[5], const uint64_t arg1[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x9; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x10; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x11; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x12; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x13; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x14; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x15; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x16; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x17; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x18; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x19; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x20; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x21; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x22; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x23; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x24; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x25; uint64_t x26; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x27; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x28; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x29; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x30; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x31; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x32; uint64_t x33; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x34; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x35; uint64_t x36; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x37; uint64_t x38; uint64_t x39; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x40; uint64_t x41; uint64_t x42; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x43; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128 x44; uint64_t x45; uint64_t x46; uint64_t x47; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x48; uint64_t x49; uint64_t x50; x1 = ((arg1[4]) * UINT16_C(0x269)); x2 = (x1 * 0x2); x3 = ((arg1[4]) * 0x2); x4 = ((arg1[3]) * UINT16_C(0x269)); x5 = (x4 * 0x2); x6 = ((arg1[3]) * 0x2); x7 = ((arg1[2]) * 0x2); x8 = ((arg1[1]) * 0x2); x9 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[4]) * x1); x10 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[3]) * x2); x11 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[3]) * x4); x12 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[2]) * x2); x13 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[2]) * (x5 * 0x2)); x14 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[2]) * ((arg1[2]) * 0x2)); x15 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[1]) * (x2 * 0x2)); x16 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[1]) * (x6 * 0x2)); x17 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[1]) * (x7 * 0x2)); x18 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[1]) * ((arg1[1]) * 0x2)); x19 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[0]) * x3); x20 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[0]) * x6); x21 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[0]) * x7); x22 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[0]) * x8); x23 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)(arg1[0]) * (arg1[0])); x24 = (x23 + (x15 + x13)); x25 = (x24 >> 52); x26 = (uint64_t)(x24 & UINT64_C(0xfffffffffffff)); x27 = (x19 + (x16 + x14)); x28 = (x20 + (x17 + x9)); x29 = (x21 + (x18 + x10)); x30 = (x22 + (x12 + x11)); x31 = (x25 + x30); x32 = (x31 >> 51); x33 = (uint64_t)(x31 & UINT64_C(0x7ffffffffffff)); x34 = (x32 + x29); x35 = (x34 >> 51); x36 = (uint64_t)(x34 & UINT64_C(0x7ffffffffffff)); x37 = (x35 + x28); x38 = (uint64_t)(x37 >> 51); x39 = (uint64_t)(x37 & UINT64_C(0x7ffffffffffff)); x40 = (x38 + x27); x41 = (uint64_t)(x40 >> 51); x42 = (uint64_t)(x40 & UINT64_C(0x7ffffffffffff)); x43 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint128)UINT16_C(0x269) * x41); x44 = (x26 + x43); x45 = (uint64_t)(x44 >> 52); x46 = (uint64_t)(x44 & UINT64_C(0xfffffffffffff)); x47 = (x45 + x33); x48 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x47 >> 51); x49 = (x47 & UINT64_C(0x7ffffffffffff)); x50 = (x48 + x36); out1[0] = x46; out1[1] = x49; out1[2] = x50; out1[3] = x39; out1[4] = x42; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry reduces a field element. * Postconditions: * eval out1 mod m = eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry( uint64_t out1[5], const uint64_t arg1[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; x1 = (arg1[0]); x2 = ((x1 >> 52) + (arg1[1])); x3 = ((x2 >> 51) + (arg1[2])); x4 = ((x3 >> 51) + (arg1[3])); x5 = ((x4 >> 51) + (arg1[4])); x6 = ((x1 & UINT64_C(0xfffffffffffff)) + (UINT16_C(0x269) * (x5 >> 51))); x7 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x6 >> 52) + (x2 & UINT64_C(0x7ffffffffffff))); x8 = (x6 & UINT64_C(0xfffffffffffff)); x9 = (x7 & UINT64_C(0x7ffffffffffff)); x10 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x7 >> 51) + (x3 & UINT64_C(0x7ffffffffffff))); x11 = (x4 & UINT64_C(0x7ffffffffffff)); x12 = (x5 & UINT64_C(0x7ffffffffffff)); out1[0] = x8; out1[1] = x9; out1[2] = x10; out1[3] = x11; out1[4] = x12; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_add adds two field elements. * Postconditions: * eval out1 mod m = (eval arg1 + eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * arg2: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_add( uint64_t out1[5], const uint64_t arg1[5], const uint64_t arg2[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; x1 = ((arg1[0]) + (arg2[0])); x2 = ((arg1[1]) + (arg2[1])); x3 = ((arg1[2]) + (arg2[2])); x4 = ((arg1[3]) + (arg2[3])); x5 = ((arg1[4]) + (arg2[4])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_sub subtracts two field elements. * Postconditions: * eval out1 mod m = (eval arg1 - eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * arg2: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_sub( uint64_t out1[5], const uint64_t arg1[5], const uint64_t arg2[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; x1 = ((UINT64_C(0x1ffffffffffb2e) + (arg1[0])) - (arg2[0])); x2 = ((UINT64_C(0xffffffffffffe) + (arg1[1])) - (arg2[1])); x3 = ((UINT64_C(0xffffffffffffe) + (arg1[2])) - (arg2[2])); x4 = ((UINT64_C(0xffffffffffffe) + (arg1[3])) - (arg2[3])); x5 = ((UINT64_C(0xffffffffffffe) + (arg1[4])) - (arg2[4])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp negates a field element. * Postconditions: * eval out1 mod m = -eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp( uint64_t out1[5], const uint64_t arg1[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; x1 = (UINT64_C(0x1ffffffffffb2e) - (arg1[0])); x2 = (UINT64_C(0xffffffffffffe) - (arg1[1])); x3 = (UINT64_C(0xffffffffffffe) - (arg1[2])); x4 = (UINT64_C(0xffffffffffffe) - (arg1[3])); x5 = (UINT64_C(0xffffffffffffe) - (arg1[4])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( uint64_t out1[5], fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, const uint64_t arg2[5], const uint64_t arg3[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u64( &x1, arg1, (arg2[0]), (arg3[0])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u64( &x2, arg1, (arg2[1]), (arg3[1])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u64( &x3, arg1, (arg2[2]), (arg3[2])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u64( &x4, arg1, (arg2[3]), (arg3[3])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u64( &x5, arg1, (arg2[4]), (arg3[4])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes serializes a field element to bytes in little-endian order. * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes( uint8_t out1[32], const uint64_t arg1[5]) { uint64_t x1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x2; uint64_t x3; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x4; uint64_t x5; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x6; uint64_t x7; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x8; uint64_t x9; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x10; uint64_t x11; uint64_t x12; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x13; uint64_t x14; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x15; uint64_t x16; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x17; uint64_t x18; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x19; uint64_t x20; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint8_t x26; uint64_t x27; uint8_t x28; uint64_t x29; uint8_t x30; uint64_t x31; uint8_t x32; uint64_t x33; uint8_t x34; uint64_t x35; uint8_t x36; uint8_t x37; uint64_t x38; uint8_t x39; uint64_t x40; uint8_t x41; uint64_t x42; uint8_t x43; uint64_t x44; uint8_t x45; uint64_t x46; uint8_t x47; uint64_t x48; uint8_t x49; uint8_t x50; uint64_t x51; uint8_t x52; uint64_t x53; uint8_t x54; uint64_t x55; uint8_t x56; uint64_t x57; uint8_t x58; uint64_t x59; uint8_t x60; uint64_t x61; uint8_t x62; uint64_t x63; uint8_t x64; uint8_t x65; uint64_t x66; uint8_t x67; uint64_t x68; uint8_t x69; uint64_t x70; uint8_t x71; uint64_t x72; uint8_t x73; uint64_t x74; uint8_t x75; uint64_t x76; uint8_t x77; uint8_t x78; uint64_t x79; uint8_t x80; uint64_t x81; uint8_t x82; uint64_t x83; uint8_t x84; uint64_t x85; uint8_t x86; uint64_t x87; uint8_t x88; uint64_t x89; uint8_t x90; uint8_t x91; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u52( &x1, &x2, 0x0, (arg1[0]), UINT64_C(0xffffffffffd97)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u51( &x3, &x4, x2, (arg1[1]), UINT64_C(0x7ffffffffffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u51( &x5, &x6, x4, (arg1[2]), UINT64_C(0x7ffffffffffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u51( &x7, &x8, x6, (arg1[3]), UINT64_C(0x7ffffffffffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u51( &x9, &x10, x8, (arg1[4]), UINT64_C(0x7ffffffffffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u64( &x11, x10, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u52( &x12, &x13, 0x0, x1, (x11 & UINT64_C(0xffffffffffd97))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u51( &x14, &x15, x13, x3, (x11 & UINT64_C(0x7ffffffffffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u51( &x16, &x17, x15, x5, (x11 & UINT64_C(0x7ffffffffffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u51( &x18, &x19, x17, x7, (x11 & UINT64_C(0x7ffffffffffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u51( &x20, &x21, x19, x9, (x11 & UINT64_C(0x7ffffffffffff))); x22 = (x20 << 5); x23 = (x18 << 2); x24 = (x16 << 7); x25 = (x14 << 4); x26 = (uint8_t)(x12 & UINT8_C(0xff)); x27 = (x12 >> 8); x28 = (uint8_t)(x27 & UINT8_C(0xff)); x29 = (x27 >> 8); x30 = (uint8_t)(x29 & UINT8_C(0xff)); x31 = (x29 >> 8); x32 = (uint8_t)(x31 & UINT8_C(0xff)); x33 = (x31 >> 8); x34 = (uint8_t)(x33 & UINT8_C(0xff)); x35 = (x33 >> 8); x36 = (uint8_t)(x35 & UINT8_C(0xff)); x37 = (uint8_t)(x35 >> 8); x38 = (x25 + (uint64_t)x37); x39 = (uint8_t)(x38 & UINT8_C(0xff)); x40 = (x38 >> 8); x41 = (uint8_t)(x40 & UINT8_C(0xff)); x42 = (x40 >> 8); x43 = (uint8_t)(x42 & UINT8_C(0xff)); x44 = (x42 >> 8); x45 = (uint8_t)(x44 & UINT8_C(0xff)); x46 = (x44 >> 8); x47 = (uint8_t)(x46 & UINT8_C(0xff)); x48 = (x46 >> 8); x49 = (uint8_t)(x48 & UINT8_C(0xff)); x50 = (uint8_t)(x48 >> 8); x51 = (x24 + (uint64_t)x50); x52 = (uint8_t)(x51 & UINT8_C(0xff)); x53 = (x51 >> 8); x54 = (uint8_t)(x53 & UINT8_C(0xff)); x55 = (x53 >> 8); x56 = (uint8_t)(x55 & UINT8_C(0xff)); x57 = (x55 >> 8); x58 = (uint8_t)(x57 & UINT8_C(0xff)); x59 = (x57 >> 8); x60 = (uint8_t)(x59 & UINT8_C(0xff)); x61 = (x59 >> 8); x62 = (uint8_t)(x61 & UINT8_C(0xff)); x63 = (x61 >> 8); x64 = (uint8_t)(x63 & UINT8_C(0xff)); x65 = (uint8_t)(x63 >> 8); x66 = (x23 + (uint64_t)x65); x67 = (uint8_t)(x66 & UINT8_C(0xff)); x68 = (x66 >> 8); x69 = (uint8_t)(x68 & UINT8_C(0xff)); x70 = (x68 >> 8); x71 = (uint8_t)(x70 & UINT8_C(0xff)); x72 = (x70 >> 8); x73 = (uint8_t)(x72 & UINT8_C(0xff)); x74 = (x72 >> 8); x75 = (uint8_t)(x74 & UINT8_C(0xff)); x76 = (x74 >> 8); x77 = (uint8_t)(x76 & UINT8_C(0xff)); x78 = (uint8_t)(x76 >> 8); x79 = (x22 + (uint64_t)x78); x80 = (uint8_t)(x79 & UINT8_C(0xff)); x81 = (x79 >> 8); x82 = (uint8_t)(x81 & UINT8_C(0xff)); x83 = (x81 >> 8); x84 = (uint8_t)(x83 & UINT8_C(0xff)); x85 = (x83 >> 8); x86 = (uint8_t)(x85 & UINT8_C(0xff)); x87 = (x85 >> 8); x88 = (uint8_t)(x87 & UINT8_C(0xff)); x89 = (x87 >> 8); x90 = (uint8_t)(x89 & UINT8_C(0xff)); x91 = (uint8_t)(x89 >> 8); out1[0] = x26; out1[1] = x28; out1[2] = x30; out1[3] = x32; out1[4] = x34; out1[5] = x36; out1[6] = x39; out1[7] = x41; out1[8] = x43; out1[9] = x45; out1[10] = x47; out1[11] = x49; out1[12] = x52; out1[13] = x54; out1[14] = x56; out1[15] = x58; out1[16] = x60; out1[17] = x62; out1[18] = x64; out1[19] = x67; out1[20] = x69; out1[21] = x71; out1[22] = x73; out1[23] = x75; out1[24] = x77; out1[25] = x80; out1[26] = x82; out1[27] = x84; out1[28] = x86; out1[29] = x88; out1[30] = x90; out1[31] = x91; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes deserializes a field element from bytes in little-endian order. * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes( uint64_t out1[5], const uint8_t arg1[32]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint8_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint8_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint8_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint8_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; x1 = ((uint64_t)(arg1[31]) << 43); x2 = ((uint64_t)(arg1[30]) << 35); x3 = ((uint64_t)(arg1[29]) << 27); x4 = ((uint64_t)(arg1[28]) << 19); x5 = ((uint64_t)(arg1[27]) << 11); x6 = ((uint64_t)(arg1[26]) << 3); x7 = ((uint64_t)(arg1[25]) << 46); x8 = ((uint64_t)(arg1[24]) << 38); x9 = ((uint64_t)(arg1[23]) << 30); x10 = ((uint64_t)(arg1[22]) << 22); x11 = ((uint64_t)(arg1[21]) << 14); x12 = ((uint64_t)(arg1[20]) << 6); x13 = ((uint64_t)(arg1[19]) << 49); x14 = ((uint64_t)(arg1[18]) << 41); x15 = ((uint64_t)(arg1[17]) << 33); x16 = ((uint64_t)(arg1[16]) << 25); x17 = ((uint64_t)(arg1[15]) << 17); x18 = ((uint64_t)(arg1[14]) << 9); x19 = ((uint64_t)(arg1[13]) * 0x2); x20 = ((uint64_t)(arg1[12]) << 44); x21 = ((uint64_t)(arg1[11]) << 36); x22 = ((uint64_t)(arg1[10]) << 28); x23 = ((uint64_t)(arg1[9]) << 20); x24 = ((uint64_t)(arg1[8]) << 12); x25 = ((uint64_t)(arg1[7]) << 4); x26 = ((uint64_t)(arg1[6]) << 48); x27 = ((uint64_t)(arg1[5]) << 40); x28 = ((uint64_t)(arg1[4]) << 32); x29 = ((uint64_t)(arg1[3]) << 24); x30 = ((uint64_t)(arg1[2]) << 16); x31 = ((uint64_t)(arg1[1]) << 8); x32 = (arg1[0]); x33 = (x31 + (uint64_t)x32); x34 = (x30 + x33); x35 = (x29 + x34); x36 = (x28 + x35); x37 = (x27 + x36); x38 = (x26 + x37); x39 = (x38 & UINT64_C(0xfffffffffffff)); x40 = (uint8_t)(x38 >> 52); x41 = (x25 + (uint64_t)x40); x42 = (x24 + x41); x43 = (x23 + x42); x44 = (x22 + x43); x45 = (x21 + x44); x46 = (x20 + x45); x47 = (x46 & UINT64_C(0x7ffffffffffff)); x48 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x46 >> 51); x49 = (x19 + (uint64_t)x48); x50 = (x18 + x49); x51 = (x17 + x50); x52 = (x16 + x51); x53 = (x15 + x52); x54 = (x14 + x53); x55 = (x13 + x54); x56 = (x55 & UINT64_C(0x7ffffffffffff)); x57 = (uint8_t)(x55 >> 51); x58 = (x12 + (uint64_t)x57); x59 = (x11 + x58); x60 = (x10 + x59); x61 = (x9 + x60); x62 = (x8 + x61); x63 = (x7 + x62); x64 = (x63 & UINT64_C(0x7ffffffffffff)); x65 = (uint8_t)(x63 >> 51); x66 = (x6 + (uint64_t)x65); x67 = (x5 + x66); x68 = (x4 + x67); x69 = (x3 + x68); x70 = (x2 + x69); x71 = (x1 + x70); out1[0] = x39; out1[1] = x47; out1[2] = x56; out1[3] = x64; out1[4] = x71; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_GostR3410_2001_CryptoPro_A_ParamSet/fe_inv.op3 * custom repunit addition chain */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t16, t164, t2, t246, t32, t4, t64, t8, t80, t82; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t2, acc, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t4, acc, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t4); for (i = 0; i < 3; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t8, acc, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t8); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t16, acc, t8); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t16); for (i = 0; i < 15; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t32, acc, t16); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t32); for (i = 0; i < 31; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t64, acc, t32); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t64); for (i = 0; i < 15; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t80, acc, t16); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t80); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t82, acc, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t82); for (i = 0; i < 81; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t164, acc, t82); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t164); for (i = 0; i < 81; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t246, acc, t82); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t246); for (i = 0; i < 2; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(acc, acc, t2); for (i = 0; i < 3; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(output, acc, t1); } /* curve coefficient constants */ static const limb_t const_one[5] = { UINT64_C(0x0000000000000001), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000)}; static const limb_t const_b[5] = { UINT64_C(0x00000000000000A6), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[19][16] = { { {{UINT64_C(0x0000000000000001), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000)}, {UINT64_C(0x000CC99C9E9F1E14), UINT64_C(0x0002DDF23E3B122A), UINT64_C(0x00027E56EC6A529E), UINT64_C(0x00073689F7D41691), UINT64_C(0x00046C8F238F04C4)}}, {{UINT64_C(0x0008E38E38E38D2C), UINT64_C(0x00038E38E38E38E3), UINT64_C(0x000471C71C71C71C), UINT64_C(0x00038E38E38E38E3), UINT64_C(0x000471C71C71C71C)}, {UINT64_C(0x000117796B788A51), UINT64_C(0x0004C838768E8486), UINT64_C(0x00074D9B0424CF52), UINT64_C(0x00041075366EBD41), UINT64_C(0x0003B5E68E54D11D)}}, {{UINT64_C(0x00001C387172C029), UINT64_C(0x0004279B488F6F02), UINT64_C(0x0004F05E34B15AD6), UINT64_C(0x000258F0DA65A32D), UINT64_C(0x000483B001F0C3C7)}, {UINT64_C(0x0004823B068D7CC0), UINT64_C(0x0000C7FD37B58763), UINT64_C(0x00067ED904B1D771), UINT64_C(0x0001D38686A8A56B), UINT64_C(0x000484B93D728EA1)}}, {{UINT64_C(0x0008EA01E4196EE1), UINT64_C(0x00034905BF5B297A), UINT64_C(0x0007447C611BEF5E), UINT64_C(0x00001829AE7D7ADB), UINT64_C(0x00017EEC8CA66B06)}, {UINT64_C(0x0000C10C4D0125FB), UINT64_C(0x000020A9F3F3A624), UINT64_C(0x00027103CEF472D6), UINT64_C(0x0000B8216E293D29), UINT64_C(0x0000E3FA5A98C242)}}, {{UINT64_C(0x0007A462275ECDA3), UINT64_C(0x00018C170DFCB702), UINT64_C(0x000241E756E56216), UINT64_C(0x000771F4F24A295D), UINT64_C(0x0005B7CB06F71A0F)}, {UINT64_C(0x000328AD395ED26A), UINT64_C(0x0001CAF70A8E7168), UINT64_C(0x0000FF8BE664695F), UINT64_C(0x0007E4184137AE67), UINT64_C(0x00069DFB4A32D69E)}}, {{UINT64_C(0x00022F3D1A834086), UINT64_C(0x00041ECA3623B485), UINT64_C(0x000674297E63115C), UINT64_C(0x000406C9C5D3F28F), UINT64_C(0x00031EE39C279CEE)}, {UINT64_C(0x00053F08BBC2FF84), UINT64_C(0x000468767960B588), UINT64_C(0x000495E5AD5F0D51), UINT64_C(0x0007102439DB689C), UINT64_C(0x00064070B2980D03)}}, {{UINT64_C(0x00062E8F3CBBCCCD), UINT64_C(0x0004BFF4EEFAA5B5), UINT64_C(0x0006C21A84538998), UINT64_C(0x0007A46150B4D83D), UINT64_C(0x00028C30C35CB4DC)}, {UINT64_C(0x0009EBBD29C26CB2), UINT64_C(0x0007BAF9C97927A1), UINT64_C(0x0000F1391B4F0F65), UINT64_C(0x0001A44160EE4057), UINT64_C(0x0001EADEA8B087CC)}}, {{UINT64_C(0x000BD2800F7C58E2), UINT64_C(0x0006AA0FC8C17CF8), UINT64_C(0x00012B72E124E103), UINT64_C(0x0007A22A20C37ACD), UINT64_C(0x00051583FBF07955)}, {UINT64_C(0x000A705E55B12811), UINT64_C(0x00077F24806A4501), UINT64_C(0x00016CDB1FF83072), UINT64_C(0x0001FE2D523F7B40), UINT64_C(0x00002B561CD86E47)}}, {{UINT64_C(0x000DD0548C39A634), UINT64_C(0x0007E5C8D222E7F3), UINT64_C(0x00077AFB529FB66D), UINT64_C(0x0007FE6BB0F0E041), UINT64_C(0x0001D44AD8E8E1BB)}, {UINT64_C(0x000800FACA51071C), UINT64_C(0x0001B75CB6825594), UINT64_C(0x000524055248074A), UINT64_C(0x0001FEC05998A037), UINT64_C(0x000418509ED45EDE)}}, {{UINT64_C(0x0004116786EF5595), UINT64_C(0x0002FDC9F0A70AF6), UINT64_C(0x0001393C9E2010EB), UINT64_C(0x000159CE63616097), UINT64_C(0x0002C31D8791CB8B)}, {UINT64_C(0x0008485469328440), UINT64_C(0x00010DBB94FF5733), UINT64_C(0x000187E16B5054CE), UINT64_C(0x0007A1C20E552236), UINT64_C(0x00074B00D96EDD39)}}, {{UINT64_C(0x00021E11C9041497), UINT64_C(0x000484A9E464D228), UINT64_C(0x00038D73E99FC3A5), UINT64_C(0x00037B99E592B813), UINT64_C(0x0005F3E5DF4C9D8E)}, {UINT64_C(0x000369BDE19C53EC), UINT64_C(0x0006C90BB44FF031), UINT64_C(0x0002730C7A423157), UINT64_C(0x0004733CD7C2CEF1), UINT64_C(0x00001779F421C860)}}, {{UINT64_C(0x0006444B2FC84A66), UINT64_C(0x00045CDBBBD00846), UINT64_C(0x0003B7859658B40F), UINT64_C(0x0006F9C075FA8F30), UINT64_C(0x0004C55A76F5ABEE)}, {UINT64_C(0x0009AE065EC53CD0), UINT64_C(0x00026684080415BE), UINT64_C(0x0005AA8D964E4BA5), UINT64_C(0x000230B8100D807C), UINT64_C(0x000415674003896E)}}, {{UINT64_C(0x000F7D10028B07C5), UINT64_C(0x0001CCB108309571), UINT64_C(0x00058D8CE498E384), UINT64_C(0x00054AA65A376DB0), UINT64_C(0x00007F4C660D79DC)}, {UINT64_C(0x000FF278A9B6438D), UINT64_C(0x0004E340FE2BB231), UINT64_C(0x000699E71D615994), UINT64_C(0x000655479DBE2221), UINT64_C(0x0005C130AB3BD570)}}, {{UINT64_C(0x000C6388B4B53E9C), UINT64_C(0x0000402286282147), UINT64_C(0x0002516CD8798759), UINT64_C(0x0007B179435AC419), UINT64_C(0x00018CEE31A89C76)}, {UINT64_C(0x0000AB9AD0EC3379), UINT64_C(0x00065281151DE966), UINT64_C(0x00071CA903B27001), UINT64_C(0x0000E28FBCB94233), UINT64_C(0x00060976D76A3184)}}, {{UINT64_C(0x0006D77EB1685C39), UINT64_C(0x0003CF8EE0115505), UINT64_C(0x00078D2B24AB1841), UINT64_C(0x00061B46CB0C6A81), UINT64_C(0x0002AF8490D4D499)}, {UINT64_C(0x00056E3A3305760A), UINT64_C(0x00043B60E22B14EE), UINT64_C(0x000020C4845CFE0F), UINT64_C(0x0003D68AC0F06CA8), UINT64_C(0x000722A37E92E49C)}}, {{UINT64_C(0x000A5F6FECDB7020), UINT64_C(0x00042B43E7540E44), UINT64_C(0x0002BD2B2059E2FE), UINT64_C(0x000631E18BEC8A26), UINT64_C(0x000580E22EFE7168)}, {UINT64_C(0x0003035DF13C5516), UINT64_C(0x000682989776C95E), UINT64_C(0x000049780CDE914A), UINT64_C(0x000182478A356286), UINT64_C(0x0002945A3EE07E65)}}, }, { {{UINT64_C(0x0005A339F915A14B), UINT64_C(0x000715D733BA9825), UINT64_C(0x00023A52A2A78CA6), UINT64_C(0x0005B164EB92A51B), UINT64_C(0x00045D9A30B0E65F)}, {UINT64_C(0x000ADD23F0E6BE0F), UINT64_C(0x0004271FA00AECFF), UINT64_C(0x0006F2881FB40864), UINT64_C(0x00034A01B35FC99B), UINT64_C(0x00058D1D8F643FFF)}}, {{UINT64_C(0x000A0A4C877DD1B7), UINT64_C(0x00002B58C866A837), UINT64_C(0x0004B11FDE6972BD), UINT64_C(0x000525D5FEF644F2), UINT64_C(0x00028801D60D33EB)}, {UINT64_C(0x000B74AA40171DE8), UINT64_C(0x0001482D80E7BB1C), UINT64_C(0x0006C7B54BF123BD), UINT64_C(0x00044EE83E8AAB32), UINT64_C(0x0001F0E12809FA9D)}}, {{UINT64_C(0x00066A9CFB2131C9), UINT64_C(0x0001579B4E7D1E27), UINT64_C(0x0004032CBC5CCC2F), UINT64_C(0x000212394FCE5D79), UINT64_C(0x0002B5D4452CFFBB)}, {UINT64_C(0x0006A4C542C01BA9), UINT64_C(0x00025184A46BB2DA), UINT64_C(0x00005344AC81105B), UINT64_C(0x0000FA6310182DB0), UINT64_C(0x00005AC302692942)}}, {{UINT64_C(0x00019D20E0248E22), UINT64_C(0x0005CA354C3BCB85), UINT64_C(0x0002894DADACB4EC), UINT64_C(0x000276F52507A08E), UINT64_C(0x00061243F4DB4E50)}, {UINT64_C(0x000FDF4AF08FAB34), UINT64_C(0x0004350560FCCBAC), UINT64_C(0x0005B2D27BD7791E), UINT64_C(0x00038BE1B282CEDF), UINT64_C(0x000645850A8CE169)}}, {{UINT64_C(0x000568A7C178486C), UINT64_C(0x0001F2D08012728C), UINT64_C(0x0000402DE36CAB91), UINT64_C(0x000709B6DD2BAFBB), UINT64_C(0x00068F1171227D8D)}, {UINT64_C(0x00068279A889EA5B), UINT64_C(0x0006E2F73FBCFF46), UINT64_C(0x0006DA5825DC94E7), UINT64_C(0x000250F1787A7A74), UINT64_C(0x0000104623421C27)}}, {{UINT64_C(0x000B4A1DF4B52308), UINT64_C(0x00037F70383BCE58), UINT64_C(0x0005B4B440F91C99), UINT64_C(0x0004DFE0E63344A6), UINT64_C(0x0003F78ADB1149D0)}, {UINT64_C(0x0005EE5A5CF1B775), UINT64_C(0x0006E82328650CFE), UINT64_C(0x00053DBD7CEC0ECD), UINT64_C(0x0006AD64013C83E3), UINT64_C(0x0003BAECE58084AC)}}, {{UINT64_C(0x0003535E55FD3BB1), UINT64_C(0x00021AA38BD04D1A), UINT64_C(0x00030BBC74A0B7B2), UINT64_C(0x0000D651469A30EA), UINT64_C(0x0002BEEBF0135D98)}, {UINT64_C(0x000BE47EA63780DD), UINT64_C(0x0007996630E63D8F), UINT64_C(0x0003D71B02D21DFE), UINT64_C(0x00072EE70BB7F048), UINT64_C(0x00003A0C52A51F7B)}}, {{UINT64_C(0x000E522DB194B350), UINT64_C(0x0001362A59882C6C), UINT64_C(0x0005B09E052C570C), UINT64_C(0x0002D26AB280800D), UINT64_C(0x0001E221931BDDDC)}, {UINT64_C(0x0004772E6A06F259), UINT64_C(0x0007D07B179D230C), UINT64_C(0x00071E03FC15549C), UINT64_C(0x0004F77A7EDB5E65), UINT64_C(0x000510C0C34DF5E2)}}, {{UINT64_C(0x0004F224FF48904F), UINT64_C(0x00048434D5472DD5), UINT64_C(0x0004EDEE682D26D3), UINT64_C(0x000209BB373C40AF), UINT64_C(0x00024DAA1D2897A9)}, {UINT64_C(0x00021D4977542F7C), UINT64_C(0x00074599CAF0ABB5), UINT64_C(0x00058BE88021C3ED), UINT64_C(0x0004208DC3B55B12), UINT64_C(0x00052C47E8541E68)}}, {{UINT64_C(0x00040C5256AA4EC9), UINT64_C(0x000415F8F060E908), UINT64_C(0x0002805A8B76EBE6), UINT64_C(0x0001873A8DE991C3), UINT64_C(0x000386C4A0579BDC)}, {UINT64_C(0x00017774AE596D94), UINT64_C(0x00076ED22CE59EC5), UINT64_C(0x00035ED29CE7AADA), UINT64_C(0x0006B0362F90D780), UINT64_C(0x0002F704527505EC)}}, {{UINT64_C(0x000FCF13CEEA0CB5), UINT64_C(0x00018312ABDF7C32), UINT64_C(0x0000757802E622B3), UINT64_C(0x000490DC4FAFA5E7), UINT64_C(0x0002F574211FD5E9)}, {UINT64_C(0x000FE0FD3DB8102B), UINT64_C(0x000250E79DF56839), UINT64_C(0x000279E546ADD6E1), UINT64_C(0x000145A2755E6C50), UINT64_C(0x0001190CE5089C0D)}}, {{UINT64_C(0x000E3D775DED50BF), UINT64_C(0x0002D12CB77299E9), UINT64_C(0x0000BB582E43FB17), UINT64_C(0x00000C592B860CC1), UINT64_C(0x0006580719B67251)}, {UINT64_C(0x0000FAE99B30AE7B), UINT64_C(0x00040F36F14B66A3), UINT64_C(0x0001B1A66B1DFF10), UINT64_C(0x0007E66D7F84E375), UINT64_C(0x000247DD6C1DBF6D)}}, {{UINT64_C(0x000DE16D4416BAED), UINT64_C(0x0007F25B557A5F90), UINT64_C(0x000174197A990092), UINT64_C(0x00064E76B1B0E5AD), UINT64_C(0x0007C3B0A8276891)}, {UINT64_C(0x000FF3F0D753BB34), UINT64_C(0x0004BC7095E070BA), UINT64_C(0x0005AE24B0B13E9D), UINT64_C(0x00033D3593791BC1), UINT64_C(0x0004A5C64A628512)}}, {{UINT64_C(0x000679BA1D37863B), UINT64_C(0x0007E88BAD3CE7BA), UINT64_C(0x0007E856BFB2DCD0), UINT64_C(0x0001298B3D7E0A07), UINT64_C(0x000648DA87B47E6C)}, {UINT64_C(0x0004116614706E8B), UINT64_C(0x00038083A1633124), UINT64_C(0x00040275662A5821), UINT64_C(0x0005AF932DE19F46), UINT64_C(0x000325815252F969)}}, {{UINT64_C(0x0007431F85A6A2F2), UINT64_C(0x0003E366F4DF51AC), UINT64_C(0x000007E3FCF91EED), UINT64_C(0x00019A60A1F6A15A), UINT64_C(0x0005D281D485553A)}, {UINT64_C(0x000AEE657D07C121), UINT64_C(0x0005B6E017CC1FF3), UINT64_C(0x000087D40E6AE64B), UINT64_C(0x000110B3E1403845), UINT64_C(0x0007B4C48BE20679)}}, {{UINT64_C(0x0002EDBF68793170), UINT64_C(0x000433C366D3E8F9), UINT64_C(0x0005954AEAA0ACE5), UINT64_C(0x00017404AB74C945), UINT64_C(0x0005D492DD30DC05)}, {UINT64_C(0x000664322925053F), UINT64_C(0x000443FCBBEB949A), UINT64_C(0x0004BC23B86D7ADE), UINT64_C(0x0002B04916F727D6), UINT64_C(0x000762FF85E51567)}}, }, { {{UINT64_C(0x000956A68246367E), UINT64_C(0x00021897DE9A1875), UINT64_C(0x0005C9CCFFBCB16F), UINT64_C(0x00070E4257F8B255), UINT64_C(0x00000C9A877C9B00)}, {UINT64_C(0x000CE0B185E2541C), UINT64_C(0x0006D5D853109264), UINT64_C(0x00056CC68AD4E64D), UINT64_C(0x0002AF2B66927356), UINT64_C(0x00037EE9E95C855D)}}, {{UINT64_C(0x000053A329418B8A), UINT64_C(0x0006646D7C973FB6), UINT64_C(0x0005395E69EEA7AB), UINT64_C(0x00010000B1282007), UINT64_C(0x00068CC15F88CFED)}, {UINT64_C(0x000E8B128FBFD773), UINT64_C(0x0007FB20DB05AF31), UINT64_C(0x0007739B3F5C4BDE), UINT64_C(0x0004039AAFD5F2DC), UINT64_C(0x000721C85E9A29EA)}}, {{UINT64_C(0x000B0D23A656BC62), UINT64_C(0x0005AC669CF7C7F3), UINT64_C(0x000209617182C48D), UINT64_C(0x000218B4CB496794), UINT64_C(0x0007180815D1B6B7)}, {UINT64_C(0x000EEC1FDDEF69D9), UINT64_C(0x0003AEF0ADEF2D2B), UINT64_C(0x00030326BF4476DB), UINT64_C(0x000047E91D24E181), UINT64_C(0x000598190A0CFD77)}}, {{UINT64_C(0x0006D10C22EF9F96), UINT64_C(0x000080EC0F94F2F7), UINT64_C(0x0007AA4F0AEDAE30), UINT64_C(0x0002516F4D4FE6D7), UINT64_C(0x00049EFAA3C8BD00)}, {UINT64_C(0x000098EA4E6E0992), UINT64_C(0x0005BF3F949C023B), UINT64_C(0x000380A5EEBA5CD8), UINT64_C(0x00026413305ED75F), UINT64_C(0x0000F418433F8A27)}}, {{UINT64_C(0x00089ECDDD1EBCA4), UINT64_C(0x000359E16F504E76), UINT64_C(0x0004CF9626CD6FBA), UINT64_C(0x0001174C74344098), UINT64_C(0x00057564D0F17F65)}, {UINT64_C(0x0001195CBB8FB356), UINT64_C(0x0005A8577B21D169), UINT64_C(0x0006489F105E543F), UINT64_C(0x0007B3A20275D3E2), UINT64_C(0x0007AAB2BB22DFB3)}}, {{UINT64_C(0x0002CA70745AE235), UINT64_C(0x00023A96DDE369C5), UINT64_C(0x0005012A48800C95), UINT64_C(0x00066B4F8BF4154D), UINT64_C(0x0006B8F21F53603C)}, {UINT64_C(0x000F5462CCFC9D22), UINT64_C(0x00030A858C108F13), UINT64_C(0x000689819655D129), UINT64_C(0x0000E720A0FCEA3E), UINT64_C(0x00011F9DC5101E53)}}, {{UINT64_C(0x0001DE0F018982F2), UINT64_C(0x0000EADE77ECC8D4), UINT64_C(0x0003B956FFEE4A79), UINT64_C(0x0004B8BBFBD7479E), UINT64_C(0x00005F99662FE03E)}, {UINT64_C(0x0004D7EA312F393C), UINT64_C(0x0000BD83AE160FCB), UINT64_C(0x0001EC8D3FC68C3B), UINT64_C(0x000437ABD0A447B9), UINT64_C(0x000735FC8AD2BB1C)}}, {{UINT64_C(0x000B9EE6D50FF37D), UINT64_C(0x00004D648636CDB2), UINT64_C(0x00039C45B71D2EBA), UINT64_C(0x00000F0D22EDF891), UINT64_C(0x00014C417247C2C5)}, {UINT64_C(0x0006CAB42B8C5660), UINT64_C(0x00018D3158E77BC4), UINT64_C(0x00039A7DAB63293E), UINT64_C(0x0004410B20B68C38), UINT64_C(0x0005143C90B7948D)}}, {{UINT64_C(0x0004B03CF603CB83), UINT64_C(0x0000D1179A1254F5), UINT64_C(0x0000FC1EF688A885), UINT64_C(0x0002CDCC95C8E925), UINT64_C(0x0002791D839354A1)}, {UINT64_C(0x000642016F8D0BF2), UINT64_C(0x00066E650A9B34E8), UINT64_C(0x00041DBF68CBB4A7), UINT64_C(0x000512CF961BC16F), UINT64_C(0x0003B3E68158737A)}}, {{UINT64_C(0x0008CF645460D714), UINT64_C(0x0007670AA8B430E8), UINT64_C(0x000574F16D3AC934), UINT64_C(0x00051A943821A714), UINT64_C(0x0006DE69E5DF9951)}, {UINT64_C(0x0007DE4AADCCB9AA), UINT64_C(0x000135145C55A55A), UINT64_C(0x000238B53DDFBA15), UINT64_C(0x00068D2109040438), UINT64_C(0x000063397853B65B)}}, {{UINT64_C(0x00078630F0E679A9), UINT64_C(0x000648A3915EA099), UINT64_C(0x0001B46B606FA986), UINT64_C(0x0005DE57BB1E25B5), UINT64_C(0x0004F4E27D03AF36)}, {UINT64_C(0x000CE066A9452CC5), UINT64_C(0x00045772A10AC378), UINT64_C(0x000305FFC4931F9C), UINT64_C(0x0006B3AE4651216A), UINT64_C(0x0001EBD44A8A3E39)}}, {{UINT64_C(0x0004B0B22DFA4A07), UINT64_C(0x00035F7907812083), UINT64_C(0x0006F74B674F2672), UINT64_C(0x000388F7301DAC59), UINT64_C(0x000159AD55DA44EC)}, {UINT64_C(0x000DE4AFBA89C1F3), UINT64_C(0x0007E80CAB614F22), UINT64_C(0x00059A999E84955B), UINT64_C(0x0000FA70D936DB5E), UINT64_C(0x00026F2DA8417650)}}, {{UINT64_C(0x000E186902C85447), UINT64_C(0x000464F8386F8A64), UINT64_C(0x00053B0F937B7CD3), UINT64_C(0x00003B7187584567), UINT64_C(0x000308946F3D80A4)}, {UINT64_C(0x000D1B1C9720BFE2), UINT64_C(0x0002400C63A10347), UINT64_C(0x00052C5C71281FD2), UINT64_C(0x00064118DAD42634), UINT64_C(0x0002FB1EB2D89702)}}, {{UINT64_C(0x00080BE5600FDDD3), UINT64_C(0x0002732F61BAFB7A), UINT64_C(0x0002E5DE598D6FBC), UINT64_C(0x000041E2FDE427CD), UINT64_C(0x000506CBA13B20AF)}, {UINT64_C(0x000FD470BC53488D), UINT64_C(0x0005F2E4B029AB6D), UINT64_C(0x0000096963502BB6), UINT64_C(0x0005FD18C530903B), UINT64_C(0x0005F0ED95E0A6DB)}}, {{UINT64_C(0x000A16408A941AAB), UINT64_C(0x00021F45EB4DC5BD), UINT64_C(0x0000F60F2631C101), UINT64_C(0x0005AE7748F7EDC4), UINT64_C(0x0002D03801D3B95D)}, {UINT64_C(0x0000E8545F3E14DB), UINT64_C(0x0001650799114990), UINT64_C(0x000686592FD11BE6), UINT64_C(0x000434D0445B2D2A), UINT64_C(0x00000759D194E76A)}}, {{UINT64_C(0x0008B92FABB27EE6), UINT64_C(0x0007CF7A4E4368A8), UINT64_C(0x00005ACFDBBB69ED), UINT64_C(0x0006891A54C2CC5E), UINT64_C(0x0007007C79A1E753)}, {UINT64_C(0x000FB2099EDFE6F7), UINT64_C(0x0004967D75BF94F0), UINT64_C(0x0007F61375A45D1E), UINT64_C(0x0003B22D99BD3A83), UINT64_C(0x000240E6DA8B843D)}}, }, { {{UINT64_C(0x0002B047D234E1E6), UINT64_C(0x000051F630DB7224), UINT64_C(0x000101E259F37AB2), UINT64_C(0x0007C1F58C65113B), UINT64_C(0x000263DCEE305FFC)}, {UINT64_C(0x000D1B3A99462779), UINT64_C(0x0005034BF259BEDD), UINT64_C(0x0006E55CD8E9F25D), UINT64_C(0x00000FF1B23C08C9), UINT64_C(0x000193E0F15E9D84)}}, {{UINT64_C(0x0005E42789FDE1B6), UINT64_C(0x0001894F4E480D11), UINT64_C(0x0002FA3C0071679A), UINT64_C(0x0005A18A5FED0EDD), UINT64_C(0x00032E050C320BCA)}, {UINT64_C(0x000129644B586CC6), UINT64_C(0x00046490AB54EE67), UINT64_C(0x00014EDFB7E99D26), UINT64_C(0x0005F72BBB17A488), UINT64_C(0x00016D460CA476AE)}}, {{UINT64_C(0x000ED9FF353B3EBD), UINT64_C(0x0000607194AF236F), UINT64_C(0x0004B55C55B42B97), UINT64_C(0x00007DF4B19150C4), UINT64_C(0x000071DD14E1914E)}, {UINT64_C(0x0006D2391EE57097), UINT64_C(0x0006B5C7EAFAC50A), UINT64_C(0x000743B60C540A6E), UINT64_C(0x0002052C67ED83B9), UINT64_C(0x0007218AF829BCD2)}}, {{UINT64_C(0x000B925893F33C1F), UINT64_C(0x00067B1285BA7F1E), UINT64_C(0x000653712C1B3339), UINT64_C(0x0005676C8172A410), UINT64_C(0x00070EFC597208AE)}, {UINT64_C(0x000960B5F604A33D), UINT64_C(0x0007921F9338E496), UINT64_C(0x000049FA1FFAFC93), UINT64_C(0x000161F6DCEE43A1), UINT64_C(0x000066EEA7D1AFAB)}}, {{UINT64_C(0x000AF49590893929), UINT64_C(0x000070D65CE0014B), UINT64_C(0x000140DF3289D3DC), UINT64_C(0x000345791D5EA109), UINT64_C(0x00005255A323DD85)}, {UINT64_C(0x000401F6DCF0F1DA), UINT64_C(0x000074049990B1B6), UINT64_C(0x000618D750975313), UINT64_C(0x000287BCB87A0714), UINT64_C(0x0001F72793687C35)}}, {{UINT64_C(0x000168DAE873F26A), UINT64_C(0x0001E0AAFF1790B1), UINT64_C(0x000459C70C5F4D75), UINT64_C(0x0002A897AEB60F5E), UINT64_C(0x0004FE8D9CCEFE84)}, {UINT64_C(0x000C5FA352BD1939), UINT64_C(0x0000D8AE757A71AF), UINT64_C(0x00049805C7DBD1B7), UINT64_C(0x00052A2EB32E9871), UINT64_C(0x0002C5844141B0C6)}}, {{UINT64_C(0x00005696DA8028D2), UINT64_C(0x00071FFFC7289A23), UINT64_C(0x0006341DC5E55F0B), UINT64_C(0x00033AE49FFDF4DC), UINT64_C(0x00015F09ED39A715)}, {UINT64_C(0x000674750BC4C3AD), UINT64_C(0x00041954C18CE813), UINT64_C(0x000694204D31CC9C), UINT64_C(0x0007E21A93A0C726), UINT64_C(0x000300024CEC65AE)}}, {{UINT64_C(0x000EBD07C0D77453), UINT64_C(0x0007BF58C754CC24), UINT64_C(0x0000F87F9B37B295), UINT64_C(0x00024B9A92A35036), UINT64_C(0x000289648E3611DD)}, {UINT64_C(0x00040BB7D1FD0ECE), UINT64_C(0x0001A131BEAD6492), UINT64_C(0x00069423BE245B95), UINT64_C(0x0000669C14214A82), UINT64_C(0x000379EBC399963B)}}, {{UINT64_C(0x0007DDA0CDD635C8), UINT64_C(0x00035E41D7F8650E), UINT64_C(0x0003F70DD4244C32), UINT64_C(0x00067C3E0F50B486), UINT64_C(0x000247B2A722631B)}, {UINT64_C(0x000BFFD05202D9FB), UINT64_C(0x00060A9C44DD611B), UINT64_C(0x00036DCF6E5FD0D6), UINT64_C(0x000054F5818F5DF8), UINT64_C(0x0004E905149BD33D)}}, {{UINT64_C(0x0001A02B8DDADBAE), UINT64_C(0x0004B904A0731902), UINT64_C(0x0002BCFC886A4F5E), UINT64_C(0x00050E5A1340E58E), UINT64_C(0x000538853D4322BB)}, {UINT64_C(0x0004FA19E1071C4B), UINT64_C(0x00020DFF018FE134), UINT64_C(0x000747F9F7B44E41), UINT64_C(0x0001A6855EE03199), UINT64_C(0x00023B78B0C2DA8E)}}, {{UINT64_C(0x000A78F96C2693D0), UINT64_C(0x0004E852C54AB8B2), UINT64_C(0x00050BD1203E05C7), UINT64_C(0x0007EBCB440E392A), UINT64_C(0x0002902087BF3096)}, {UINT64_C(0x0003CE5F90574625), UINT64_C(0x0003386306A925F7), UINT64_C(0x0006406D4F228721), UINT64_C(0x00077FA1131F3503), UINT64_C(0x0004E5E2E878636F)}}, {{UINT64_C(0x000931F13967D25A), UINT64_C(0x00039563F11ADEC1), UINT64_C(0x000148DC8BDD5189), UINT64_C(0x000143E419A5E6C0), UINT64_C(0x0005DAD68377E37C)}, {UINT64_C(0x00068A723527F5D0), UINT64_C(0x0000F1F89C72A873), UINT64_C(0x0000CB4FD5169F8D), UINT64_C(0x0001C570DC05123D), UINT64_C(0x0007DE29900ACC22)}}, {{UINT64_C(0x0009281B46548202), UINT64_C(0x00014A3F78CE6431), UINT64_C(0x00075ADDA3C012A7), UINT64_C(0x0000EA845B0B8C70), UINT64_C(0x00079B908BEB53C6)}, {UINT64_C(0x00019FE799C7C809), UINT64_C(0x0007B93B993A157B), UINT64_C(0x00077F3826FC8939), UINT64_C(0x00023CE645BC7C8A), UINT64_C(0x00007E8659F8E036)}}, {{UINT64_C(0x00033DC53F98B574), UINT64_C(0x0007432F5C3CCD27), UINT64_C(0x0001E8355E71A3DC), UINT64_C(0x000536F3A5B8A0D5), UINT64_C(0x00066FBA2484854C)}, {UINT64_C(0x000BC9ABA085FC08), UINT64_C(0x0006CD471084166A), UINT64_C(0x00077299B5B548AE), UINT64_C(0x0000A08F4C0976C0), UINT64_C(0x0007ED9BF62B1BFA)}}, {{UINT64_C(0x000940ECF52AFA23), UINT64_C(0x000448C9B9325795), UINT64_C(0x0006DAFB14422BE9), UINT64_C(0x000331906DED74E7), UINT64_C(0x00034AA18796A795)}, {UINT64_C(0x00017A1089CF42AB), UINT64_C(0x0004BBA8E1B7CC68), UINT64_C(0x00072F74CCB808A3), UINT64_C(0x00018BD75A6C68E2), UINT64_C(0x00001B9BDB7DACA2)}}, {{UINT64_C(0x000018F0E8761113), UINT64_C(0x00014856FBD5FE7E), UINT64_C(0x00052B8E5AA39575), UINT64_C(0x00061A72375DBF30), UINT64_C(0x0002A1B12B4FD1A0)}, {UINT64_C(0x000CCCFE4B5CE5E2), UINT64_C(0x00013D03A9E9851C), UINT64_C(0x000547736DB57F8B), UINT64_C(0x0002C281B74401A1), UINT64_C(0x0006AD41C9A8F14A)}}, }, { {{UINT64_C(0x000FAA572EB89E8E), UINT64_C(0x000167953742D9F0), UINT64_C(0x00019869F9FB4B12), UINT64_C(0x0007CBE7B69E4D6D), UINT64_C(0x000555F44F93253E)}, {UINT64_C(0x000652D610CFD61D), UINT64_C(0x000450DD0FD70202), UINT64_C(0x0000FA8099F542AA), UINT64_C(0x00028CDD184A6382), UINT64_C(0x0005C334A78F9954)}}, {{UINT64_C(0x00089F7423E24828), UINT64_C(0x0006ECC59417EC04), UINT64_C(0x0005923FCD743CE4), UINT64_C(0x00058E47C67B3854), UINT64_C(0x0001FEDFDB0EED94)}, {UINT64_C(0x0007EEE7E104E1B6), UINT64_C(0x0002BAC9B4C39633), UINT64_C(0x000719482E22B7DB), UINT64_C(0x000289C779B2B427), UINT64_C(0x0005A26A1E0E5EC6)}}, {{UINT64_C(0x000239DE0DF21E4A), UINT64_C(0x0003990AE0816058), UINT64_C(0x0007B031A49D9306), UINT64_C(0x0003AA82A7C3C63B), UINT64_C(0x00024190E64F1DA4)}, {UINT64_C(0x00044CF3369C86A2), UINT64_C(0x00003ECD2B5B335C), UINT64_C(0x0000C07180F70933), UINT64_C(0x00065C0B6A34AA71), UINT64_C(0x0002462A8EC2EB00)}}, {{UINT64_C(0x0005C2BDA6A8C3D3), UINT64_C(0x0004167C033B9C4C), UINT64_C(0x0001CB7DF36DB648), UINT64_C(0x000694122F8ABCB3), UINT64_C(0x00025F3E2C20B169)}, {UINT64_C(0x0007E143BB0C3DB3), UINT64_C(0x00001781BBE98778), UINT64_C(0x00037A2A4A306DA9), UINT64_C(0x0005470297B20C04), UINT64_C(0x000141CF4B717BAF)}}, {{UINT64_C(0x00070EB500B9F037), UINT64_C(0x0005727999C118FA), UINT64_C(0x0006027735DBD10A), UINT64_C(0x0007F78C3C18F3DD), UINT64_C(0x0004111344448D53)}, {UINT64_C(0x000B19D3D6D2A8D9), UINT64_C(0x000516FF15756C60), UINT64_C(0x0002EE628F2DE048), UINT64_C(0x00048114031C65C1), UINT64_C(0x000585C81048736A)}}, {{UINT64_C(0x000AB501B01B067A), UINT64_C(0x00067899A4477FAE), UINT64_C(0x000274F338EBAB9E), UINT64_C(0x00047234930DA1EF), UINT64_C(0x0007A996A9C60A6D)}, {UINT64_C(0x0007B7E042371080), UINT64_C(0x00076E9E7CA96E5C), UINT64_C(0x00014EDEE2498639), UINT64_C(0x00020537E3A2932F), UINT64_C(0x0006743F9AFE0CF6)}}, {{UINT64_C(0x0000BB8FB7939BAE), UINT64_C(0x000595F428F1564B), UINT64_C(0x00073AA57A8B8892), UINT64_C(0x000443C7156AD97C), UINT64_C(0x000394DCDE01C803)}, {UINT64_C(0x00010277303A2295), UINT64_C(0x00036E65529E463B), UINT64_C(0x00002050CC0BBF19), UINT64_C(0x0007AF642321CFD0), UINT64_C(0x0007A578DB9DCA09)}}, {{UINT64_C(0x000ECA0FD78BBA28), UINT64_C(0x000140DC5DBBD618), UINT64_C(0x0002BEF02AD1BB50), UINT64_C(0x00031A4817C3357E), UINT64_C(0x0000A1117B528B02)}, {UINT64_C(0x000A242C41E7EE0C), UINT64_C(0x00024C715E851E5F), UINT64_C(0x000711A22BB49D60), UINT64_C(0x0002824BD92ABEC0), UINT64_C(0x00043A69559D6B3C)}}, {{UINT64_C(0x000E68D7A078C305), UINT64_C(0x000734955FCFC798), UINT64_C(0x0000E1E3F52E8AA5), UINT64_C(0x0004E9D3FA7AD926), UINT64_C(0x000712628E743D52)}, {UINT64_C(0x00073814D797A50E), UINT64_C(0x000153715FFCA99D), UINT64_C(0x000558A8FDE19C66), UINT64_C(0x0002204AA778B5D7), UINT64_C(0x0007BAA676A5FF03)}}, {{UINT64_C(0x000DF4BDB34B5256), UINT64_C(0x0001D965B241D3BD), UINT64_C(0x0001271A0805AF80), UINT64_C(0x0000B84BD41CE836), UINT64_C(0x0007F967C3AC88CE)}, {UINT64_C(0x000FDB1299F7351C), UINT64_C(0x00003C874EE7BCAC), UINT64_C(0x00039993680976FC), UINT64_C(0x00047FE73F6F2145), UINT64_C(0x000625098EDAEF41)}}, {{UINT64_C(0x000D83AF4F7F1E6E), UINT64_C(0x0000FDC16634A3DE), UINT64_C(0x00015FB28A735369), UINT64_C(0x0007AF0B085A2FF6), UINT64_C(0x0001B48F17A9E049)}, {UINT64_C(0x0003C8EA301DD7E4), UINT64_C(0x00040B69DE358F2C), UINT64_C(0x00050BA0AC83C141), UINT64_C(0x0000E0D532814AB2), UINT64_C(0x00065E5F74F8CAB4)}}, {{UINT64_C(0x0000F47568339162), UINT64_C(0x000606AFE5A96F3B), UINT64_C(0x0002BA3A04C6A76C), UINT64_C(0x0002488944DE85DD), UINT64_C(0x000374DF90B6C521)}, {UINT64_C(0x000382B073CF14E5), UINT64_C(0x0007C67C95A17E79), UINT64_C(0x00015C33E721463B), UINT64_C(0x00073EF909CF6359), UINT64_C(0x00050141FF3ED74B)}}, {{UINT64_C(0x000EEEEA5F5DDB32), UINT64_C(0x0003ACDE25B0D36D), UINT64_C(0x0002CF889155A989), UINT64_C(0x00021FD9C628076E), UINT64_C(0x00056A5EB7356DC8)}, {UINT64_C(0x0006C202D420A6E2), UINT64_C(0x00031BABD32E4E48), UINT64_C(0x00044C3D05F2D30C), UINT64_C(0x0007670E334C2F98), UINT64_C(0x0004F79A1917FFEC)}}, {{UINT64_C(0x00051F5BDD58277B), UINT64_C(0x000003D523F21BB6), UINT64_C(0x00021806DD8F5937), UINT64_C(0x0000FD12EFB4623F), UINT64_C(0x0007A4AF6F3F8526)}, {UINT64_C(0x0004669EB76FE0E1), UINT64_C(0x00043FDD719D5F7A), UINT64_C(0x00003CA28B366FB6), UINT64_C(0x000248847E6F73B9), UINT64_C(0x00065DA146D053AB)}}, {{UINT64_C(0x000AC0CBD84326A2), UINT64_C(0x0004C03CAD532948), UINT64_C(0x0005E030FE480B61), UINT64_C(0x0003DB7F18BA70C2), UINT64_C(0x00035CE1592DE363)}, {UINT64_C(0x000203476A5CD536), UINT64_C(0x00079198612CA2C7), UINT64_C(0x0005BB48D8AC89B9), UINT64_C(0x000295999FBC011E), UINT64_C(0x0003AAA59B60FE8A)}}, {{UINT64_C(0x000DD31F74351DCE), UINT64_C(0x0005B15757FF87F4), UINT64_C(0x0002E2B1C4F1048F), UINT64_C(0x00069BB62674CD0F), UINT64_C(0x0001544612843FE9)}, {UINT64_C(0x00039BD2752EE3C1), UINT64_C(0x00017A2616FD02E5), UINT64_C(0x000447AD0B0A32FC), UINT64_C(0x0005CE5C96F64A93), UINT64_C(0x00029642594BA9AA)}}, }, { {{UINT64_C(0x000DEE95CA3BB6FE), UINT64_C(0x00056F0ACB87E096), UINT64_C(0x00036182366ABC67), UINT64_C(0x0005217F2CD26751), UINT64_C(0x00021E6D524F4A17)}, {UINT64_C(0x0000BCE9C99BB07D), UINT64_C(0x0000C27581F2BA83), UINT64_C(0x00020CF33CBD1603), UINT64_C(0x00010678FB67FFF1), UINT64_C(0x0005C6CD7703A25E)}}, {{UINT64_C(0x0005BBA8048392C8), UINT64_C(0x0002542A96821BD7), UINT64_C(0x00075648B3E12141), UINT64_C(0x0006D7FBCF181560), UINT64_C(0x0002C576A6815E41)}, {UINT64_C(0x000518AAF86E6DE1), UINT64_C(0x0001C518693DD84F), UINT64_C(0x0006675DCF58B296), UINT64_C(0x000644D5F602501F), UINT64_C(0x00077A80CA4E57C8)}}, {{UINT64_C(0x000159EE8D243A23), UINT64_C(0x0006E29DBC72D5E0), UINT64_C(0x0000DA0A1E2F2981), UINT64_C(0x000651B05EAE7237), UINT64_C(0x000582761CC33610)}, {UINT64_C(0x0004C0AF035DD89C), UINT64_C(0x0004D1937B5F3230), UINT64_C(0x00068AF1E665190F), UINT64_C(0x00076067020738A8), UINT64_C(0x0003815147C9AEE7)}}, {{UINT64_C(0x000115871847A6CB), UINT64_C(0x00020F85C36D0499), UINT64_C(0x0004733334C55205), UINT64_C(0x0004D650B5CCA6A3), UINT64_C(0x0002C404C377C0C1)}, {UINT64_C(0x000A12DF826A93D6), UINT64_C(0x0007B4188D135AA7), UINT64_C(0x0002D01F76CA5FE4), UINT64_C(0x000155326D392240), UINT64_C(0x0000E516B40BA9FD)}}, {{UINT64_C(0x000F5546A732C66D), UINT64_C(0x00018E15DB635DC6), UINT64_C(0x00074C7913432090), UINT64_C(0x0005F678885345A4), UINT64_C(0x00061829FB56D48A)}, {UINT64_C(0x000677B5BB743208), UINT64_C(0x000238E1E35F0380), UINT64_C(0x00024F21B26421F5), UINT64_C(0x000405586E33386B), UINT64_C(0x0000200A7DCD0CE5)}}, {{UINT64_C(0x000E70BA7605C9B6), UINT64_C(0x00057F5CC0B99049), UINT64_C(0x00042F0C89079EE3), UINT64_C(0x0000AF253B6AB483), UINT64_C(0x00004DBD3447DEE4)}, {UINT64_C(0x0005CDCCDF6731CF), UINT64_C(0x0003ACA58F2B6389), UINT64_C(0x0002874A4632D9E3), UINT64_C(0x0006EAB51A6C6508), UINT64_C(0x0004974444B06711)}}, {{UINT64_C(0x000083E23DACB58A), UINT64_C(0x0003D224DBA9AFFC), UINT64_C(0x0000AD693FF2352E), UINT64_C(0x0000EE821C843787), UINT64_C(0x0006599DDD43FF17)}, {UINT64_C(0x0001129BD5E19FA2), UINT64_C(0x0001DDF5DE008359), UINT64_C(0x0004F3504C03BF84), UINT64_C(0x000064EFD7D15539), UINT64_C(0x000427DB9DD33F27)}}, {{UINT64_C(0x000B147505184DFD), UINT64_C(0x0005A25B9C7E076D), UINT64_C(0x00075CFCA22E44B6), UINT64_C(0x0002A4BF3C7632E7), UINT64_C(0x00032E9918544496)}, {UINT64_C(0x000455D9704D3074), UINT64_C(0x00037C549C367FB6), UINT64_C(0x0004A270B27EFBB8), UINT64_C(0x0001428CFA018772), UINT64_C(0x0007A9637BAE976C)}}, {{UINT64_C(0x000311ADC83DB0DD), UINT64_C(0x0000B4BCB0670913), UINT64_C(0x0005D30A2C0F96FC), UINT64_C(0x0001F1A1FF4D0BB0), UINT64_C(0x0007D2975772506E)}, {UINT64_C(0x000EFF5E207D306E), UINT64_C(0x00068BE603FE3D2A), UINT64_C(0x0005C11F5D2A4998), UINT64_C(0x00006F76D4F8557F), UINT64_C(0x0006F3CFD87A769F)}}, {{UINT64_C(0x00065185A90EC696), UINT64_C(0x0005E67E616805F1), UINT64_C(0x0000BBF738A1A711), UINT64_C(0x0005428B0D45A57C), UINT64_C(0x0004C8EE45621C1C)}, {UINT64_C(0x000FAA46B5E985B8), UINT64_C(0x00029F0A5A957DDD), UINT64_C(0x000236B91A401AEE), UINT64_C(0x00064166423D44F1), UINT64_C(0x0000A4FE9BC04A82)}}, {{UINT64_C(0x000F394FC786A4E4), UINT64_C(0x0005D5C301931568), UINT64_C(0x00016E5A4E0F86A1), UINT64_C(0x0003E462D1C459B7), UINT64_C(0x0005C99260A907B9)}, {UINT64_C(0x00094616BF27C9BA), UINT64_C(0x0003838C1FBFC98B), UINT64_C(0x0001AEFD5463CE2C), UINT64_C(0x0002298F2DAA2DC1), UINT64_C(0x00002F8398AA1EC1)}}, {{UINT64_C(0x000B0B54E83EB3CB), UINT64_C(0x00046C11CF2C5D85), UINT64_C(0x000562C687A5BD26), UINT64_C(0x00008CB654C9579D), UINT64_C(0x00032A6EC6175F00)}, {UINT64_C(0x0003D94A727B903F), UINT64_C(0x00033404D23AB3CE), UINT64_C(0x00047CFD855EC24D), UINT64_C(0x000499392AD55820), UINT64_C(0x000184705D6FA8F5)}}, {{UINT64_C(0x000FC2C43A582997), UINT64_C(0x00009B163600D952), UINT64_C(0x0007D1FD9FDFC13A), UINT64_C(0x0006DDB423ABD0A7), UINT64_C(0x0006DA6449C5CF57)}, {UINT64_C(0x000FFEB9DF5F3E5D), UINT64_C(0x000104479DCFA27F), UINT64_C(0x00021D3A7738DB2D), UINT64_C(0x0004045B51B58564), UINT64_C(0x0002B174ED65C2FD)}}, {{UINT64_C(0x000BD918AF2D1DE7), UINT64_C(0x000797FE89E388BD), UINT64_C(0x000354F756AF6F61), UINT64_C(0x0002658B66C8F102), UINT64_C(0x000481C3A259A692)}, {UINT64_C(0x00028B2886FDA782), UINT64_C(0x0001ACB2E8319AE1), UINT64_C(0x0005E65B509E18EA), UINT64_C(0x0000602680E0D288), UINT64_C(0x0001F8B6C2704BE0)}}, {{UINT64_C(0x0004DE9DC251E4F5), UINT64_C(0x000398DC76312C40), UINT64_C(0x00060221101717D7), UINT64_C(0x00036E5F8512F680), UINT64_C(0x0006AECBBC4FAED1)}, {UINT64_C(0x0006BCF81AD0F404), UINT64_C(0x00056B0D20017CFA), UINT64_C(0x000051B33CAE4F06), UINT64_C(0x00079BA25FD11B60), UINT64_C(0x0006C66B1B94906E)}}, {{UINT64_C(0x000F2EB0A212B2F8), UINT64_C(0x0001291549D895DF), UINT64_C(0x0007EA3FDC6E23D8), UINT64_C(0x0003A5FB22527356), UINT64_C(0x00044827B3CCBCB7)}, {UINT64_C(0x000569B9A0749338), UINT64_C(0x00017A1416DD273B), UINT64_C(0x0001E3D333FDA47A), UINT64_C(0x0000F6320D57AF46), UINT64_C(0x0001618E7F9E3803)}}, }, { {{UINT64_C(0x0006E8A84D02A6B0), UINT64_C(0x0002A5CE4DBC212A), UINT64_C(0x00009BCAB85DD325), UINT64_C(0x00033808F9E31F44), UINT64_C(0x0000711ABE8635FB)}, {UINT64_C(0x00073EA3098D5496), UINT64_C(0x000696F79EEC27AE), UINT64_C(0x0007B6463961BEF1), UINT64_C(0x00021DAC69DE5F30), UINT64_C(0x00033F193BEA04AC)}}, {{UINT64_C(0x0004886B6B478D87), UINT64_C(0x00026385B4323759), UINT64_C(0x00013A2BB416CDED), UINT64_C(0x000717B3988CF8DE), UINT64_C(0x000414C09B6B85C5)}, {UINT64_C(0x0003390639FE52FF), UINT64_C(0x00006CA38DEF7FD7), UINT64_C(0x000431C5BCF60FD8), UINT64_C(0x000027BCB334EEFB), UINT64_C(0x00028319296C6513)}}, {{UINT64_C(0x0004CB3C06E1AB70), UINT64_C(0x00057948510101D5), UINT64_C(0x0001C38A22A0693D), UINT64_C(0x00002914500B3EA3), UINT64_C(0x000578C8D8DD9DD3)}, {UINT64_C(0x00016C80C1DBD2FF), UINT64_C(0x00033044253FB30D), UINT64_C(0x0007941DD6AECD7D), UINT64_C(0x0004F200061FECF3), UINT64_C(0x000546D982BEE1F4)}}, {{UINT64_C(0x000EDBC39AE757A2), UINT64_C(0x00034FE0BAD67FE3), UINT64_C(0x0001971E008F362D), UINT64_C(0x0006C12B96F5D1A1), UINT64_C(0x0001FF6E4EB688F7)}, {UINT64_C(0x00070C4B4E036FA0), UINT64_C(0x0000611BA94D0E52), UINT64_C(0x0007BFC428F0E251), UINT64_C(0x00042A78CA211CAC), UINT64_C(0x00078AAB5035F959)}}, {{UINT64_C(0x00039F022DA3A297), UINT64_C(0x0001DA11C9EE4589), UINT64_C(0x000007BC8D152059), UINT64_C(0x0005CA88E041209D), UINT64_C(0x000396B7E030B90E)}, {UINT64_C(0x0006A3AFDE54F823), UINT64_C(0x0002A38ABA40380D), UINT64_C(0x000394F10EC351B1), UINT64_C(0x0007BFA890FF374E), UINT64_C(0x0003ED6D3C141924)}}, {{UINT64_C(0x0007B3B2AB41AFA6), UINT64_C(0x0005EDB0895870A2), UINT64_C(0x0004AE56B08A37D7), UINT64_C(0x0002E4BCFE71C4CA), UINT64_C(0x0002D43D757D8A3B)}, {UINT64_C(0x00061C756483A39E), UINT64_C(0x0003AC62981046BD), UINT64_C(0x0001AFB8EAD77A64), UINT64_C(0x0002EA1E8FD302B3), UINT64_C(0x0004DB0FB226BB28)}}, {{UINT64_C(0x000E7B1BDB64BA6C), UINT64_C(0x00054E041D4FE699), UINT64_C(0x0004AC1DEB24137D), UINT64_C(0x00074A0697964817), UINT64_C(0x000312BDC2D7A256)}, {UINT64_C(0x000D14A56072B4CC), UINT64_C(0x0001382886183F9C), UINT64_C(0x000690EC6A92CA38), UINT64_C(0x0003B6BD7E019DD0), UINT64_C(0x00069DAC1921760B)}}, {{UINT64_C(0x000CEDF14C9EEC7F), UINT64_C(0x0001AD446C451FAB), UINT64_C(0x0000A7B94D1D1824), UINT64_C(0x0003D360209777BD), UINT64_C(0x0003312FC6A60827)}, {UINT64_C(0x0006925365A89852), UINT64_C(0x000532B69C2AC275), UINT64_C(0x00008D2BFA9C57DF), UINT64_C(0x0006B372357986F8), UINT64_C(0x0000BC6738808C01)}}, {{UINT64_C(0x000BA8848894762E), UINT64_C(0x0007C52B109B74BA), UINT64_C(0x00055F874E82108D), UINT64_C(0x0006BC4B1AB5D607), UINT64_C(0x0004F79A87A0F4BC)}, {UINT64_C(0x00000F22EC08DE0D), UINT64_C(0x00019BBD488532BC), UINT64_C(0x0001F7CC6A46142B), UINT64_C(0x00047951401B8854), UINT64_C(0x0000EEFD5F254172)}}, {{UINT64_C(0x00085C1F80C878D8), UINT64_C(0x0006E57903F7CB79), UINT64_C(0x0007C43EE3AD7648), UINT64_C(0x000397051C967FD8), UINT64_C(0x000117C19679F176)}, {UINT64_C(0x00002C5D30697DD3), UINT64_C(0x0000D3ECE67318BD), UINT64_C(0x0001F44996A833CC), UINT64_C(0x00015C569BF7DFFB), UINT64_C(0x0001E2F38CD9EB4E)}}, {{UINT64_C(0x0001E36DB36EC447), UINT64_C(0x00014967CF4A822B), UINT64_C(0x00000401B78E38EB), UINT64_C(0x0005DAB9A907F31E), UINT64_C(0x0002DACF3F0F0C42)}, {UINT64_C(0x000D33C908C6C4F7), UINT64_C(0x00066AA9CCCC7F70), UINT64_C(0x000060C3FCBC4FD7), UINT64_C(0x0001581BF7C89F6C), UINT64_C(0x000611050B8C54AC)}}, {{UINT64_C(0x000D068F3D4C0908), UINT64_C(0x0001A02E029F619E), UINT64_C(0x0002B45FEC96D2D8), UINT64_C(0x0005A2871779F131), UINT64_C(0x00023F7AD0C44BA1)}, {UINT64_C(0x0004D3B86980DEAF), UINT64_C(0x000711D8166CA500), UINT64_C(0x00030B3ED70C5899), UINT64_C(0x0001D50F687549AF), UINT64_C(0x00008B4B9B39707D)}}, {{UINT64_C(0x000466DD9C839775), UINT64_C(0x00027B5FC46C6C6B), UINT64_C(0x000212095C5E5D6E), UINT64_C(0x0000A30F03686D71), UINT64_C(0x0006E778BB41401B)}, {UINT64_C(0x000A1B7784E9C0BD), UINT64_C(0x00028B25CB77EDC9), UINT64_C(0x00075141ABC6098A), UINT64_C(0x00051285E7389DBD), UINT64_C(0x000786BB0ADC137B)}}, {{UINT64_C(0x0002B5755D306294), UINT64_C(0x00025D99F2BAD0F6), UINT64_C(0x0006E9490307FE67), UINT64_C(0x00020FBAA40EBE93), UINT64_C(0x000621CE633E61AE)}, {UINT64_C(0x000063301845BDB1), UINT64_C(0x000488A25D032E0B), UINT64_C(0x000245B64B6BCF17), UINT64_C(0x0005288C9BE6908E), UINT64_C(0x00039074BE491684)}}, {{UINT64_C(0x0009D726AEAA4BC7), UINT64_C(0x00006D9CA435F290), UINT64_C(0x000399BB955171B4), UINT64_C(0x000707C3166A8265), UINT64_C(0x0002EB12AACC834B)}, {UINT64_C(0x0002B20ADA6782ED), UINT64_C(0x0002F055CE8BB68D), UINT64_C(0x0007C0EB8CC8170C), UINT64_C(0x000082AD8CCDBB94), UINT64_C(0x00069541FF4BC978)}}, {{UINT64_C(0x00065D167D224872), UINT64_C(0x0002581C711887F8), UINT64_C(0x00074BAF45B86A47), UINT64_C(0x00005E9E6ABE67A2), UINT64_C(0x0007213BD0895F3B)}, {UINT64_C(0x00072AFCA61A0254), UINT64_C(0x00011742392A0ED5), UINT64_C(0x000010832281B6C9), UINT64_C(0x0005A0949297A0F6), UINT64_C(0x0000F164D77E14A3)}}, }, { {{UINT64_C(0x000ED5760B459019), UINT64_C(0x0002228AEA32C7DB), UINT64_C(0x000728A39BB925A7), UINT64_C(0x000203FA2F13E567), UINT64_C(0x00038462A9F1BA7C)}, {UINT64_C(0x0004BD4EC1ABD7B1), UINT64_C(0x0000B5AE953DC16B), UINT64_C(0x00033E07D29EA8C5), UINT64_C(0x00054599995A7CB0), UINT64_C(0x000156E38D3AC76E)}}, {{UINT64_C(0x00020D2F2D61CF6A), UINT64_C(0x000773029C680360), UINT64_C(0x0005052970E628E8), UINT64_C(0x0001743A89EE6C31), UINT64_C(0x000086CD11F0DC5D)}, {UINT64_C(0x0005C5977FD6C080), UINT64_C(0x00027FE3AE450F63), UINT64_C(0x00021F4ED6717373), UINT64_C(0x00022A3B606C8A66), UINT64_C(0x00052EAC1F03F5E2)}}, {{UINT64_C(0x000F339A2B5CE371), UINT64_C(0x00065E19D41D0666), UINT64_C(0x0007287E48FAD9EA), UINT64_C(0x000471066E33BE31), UINT64_C(0x000679F03495F090)}, {UINT64_C(0x00074B03158B9D31), UINT64_C(0x0005EA499F4A04EB), UINT64_C(0x0005FEEB553C1808), UINT64_C(0x000397D697ED49B1), UINT64_C(0x0000B67F077DD63D)}}, {{UINT64_C(0x0003C03AE2687F73), UINT64_C(0x00079CC5B29E02D3), UINT64_C(0x00072367F9DA54CC), UINT64_C(0x0007DF9A3AD9529A), UINT64_C(0x0001CFAFB9504592)}, {UINT64_C(0x00068ACC89A8EE8B), UINT64_C(0x0004AFC769D61DA5), UINT64_C(0x0006F0E9603608BC), UINT64_C(0x0006792F936B1E02), UINT64_C(0x0000F1398ED3BF93)}}, {{UINT64_C(0x000671CA92F0E827), UINT64_C(0x0006525CA7C69927), UINT64_C(0x000171200FBFEAFC), UINT64_C(0x0007372EE50A7A5F), UINT64_C(0x0006B675F2E394EC)}, {UINT64_C(0x00007DAA7D3D0D62), UINT64_C(0x00016FD73FAB54B1), UINT64_C(0x00067F158C5CC197), UINT64_C(0x000283CEF99745BD), UINT64_C(0x0003348A74E2E770)}}, {{UINT64_C(0x00066F8CDCF522E3), UINT64_C(0x0006982F90C04FE6), UINT64_C(0x0007F81A0CED981E), UINT64_C(0x00043551059F8155), UINT64_C(0x0001AFA647940834)}, {UINT64_C(0x0007CED8C2304313), UINT64_C(0x0005AE6CE56CC0C8), UINT64_C(0x000137FF230DA040), UINT64_C(0x000568D65C179394), UINT64_C(0x000283CD25568788)}}, {{UINT64_C(0x0002AAC2440B7F74), UINT64_C(0x0001F509834690FE), UINT64_C(0x00045D2233CE00BE), UINT64_C(0x000222595A3D079C), UINT64_C(0x00027C0FF58F688E)}, {UINT64_C(0x0001D4B3F39E60B3), UINT64_C(0x0004CC3A253B5201), UINT64_C(0x0002333A105146C0), UINT64_C(0x00069062190DB8DD), UINT64_C(0x0005D0790291AD5A)}}, {{UINT64_C(0x000F2D0FB16FC7F9), UINT64_C(0x000619F0C8B78C4A), UINT64_C(0x0005A8CCA7C6916F), UINT64_C(0x0001916D4D36752A), UINT64_C(0x0001023EF9FD86D6)}, {UINT64_C(0x000168AAB3670612), UINT64_C(0x0005D8B15486E18B), UINT64_C(0x00063DD0999E8E18), UINT64_C(0x0006162366202858), UINT64_C(0x0001A4A2C4870979)}}, {{UINT64_C(0x000CEFE4409994EE), UINT64_C(0x00055DA9B44A7A13), UINT64_C(0x000106DF8096A1CD), UINT64_C(0x00032D3E8584E2B6), UINT64_C(0x0005DD046ADEB104)}, {UINT64_C(0x000B9B4FF6F4202A), UINT64_C(0x0004ACB4DBC87A7B), UINT64_C(0x0004A78645C47D53), UINT64_C(0x0007903BE0C0CBED), UINT64_C(0x0006FAA43697CCE6)}}, {{UINT64_C(0x0005A494E4501DAE), UINT64_C(0x0000463C338F2697), UINT64_C(0x000412F90982A2D3), UINT64_C(0x0004A9D3F24715D7), UINT64_C(0x00072482CA04194D)}, {UINT64_C(0x00035900B4AF93E8), UINT64_C(0x000492FB85261015), UINT64_C(0x0002523C6C2876BB), UINT64_C(0x0000406C75A05701), UINT64_C(0x0000BA73DF37C857)}}, {{UINT64_C(0x000ACB525BB4074B), UINT64_C(0x00044377012C6937), UINT64_C(0x0000AC6E54E5EE1E), UINT64_C(0x00075073183EEEE0), UINT64_C(0x0000ED70C9270A43)}, {UINT64_C(0x0001C2882CD5040F), UINT64_C(0x0006F51F4C4C0E11), UINT64_C(0x0005792A7C9CEA96), UINT64_C(0x0005AE0379BAEF75), UINT64_C(0x0003DEBB57FC40B0)}}, {{UINT64_C(0x00014FFB15BBCF14), UINT64_C(0x00039E25E41EAB98), UINT64_C(0x0007FF955A848443), UINT64_C(0x00020BC48CD89492), UINT64_C(0x0007196CDE655F9B)}, {UINT64_C(0x0007849F69377955), UINT64_C(0x0003C18A2D36539D), UINT64_C(0x00027E1E94033F9C), UINT64_C(0x0000DE30941EF01B), UINT64_C(0x00008B8E3FC11EC7)}}, {{UINT64_C(0x000B06E3EEF0F157), UINT64_C(0x0004007F2ABB1B66), UINT64_C(0x0007DFEC2C450329), UINT64_C(0x00064D8A2197B0C0), UINT64_C(0x000190C79FC2CD88)}, {UINT64_C(0x0006B06B6D6D97E1), UINT64_C(0x0001CA489187DECE), UINT64_C(0x0002C0A5779B1894), UINT64_C(0x0004B2CA6FE0E365), UINT64_C(0x00043EC85DD748E5)}}, {{UINT64_C(0x00066D07404CC6B4), UINT64_C(0x0000A577C566F3FB), UINT64_C(0x0007AB67D3AD570A), UINT64_C(0x0001F1E9C9856550), UINT64_C(0x00003FA767C56FD6)}, {UINT64_C(0x0002CA0442245C81), UINT64_C(0x0005F36D42201ED8), UINT64_C(0x000002F30D51F27E), UINT64_C(0x0004E5D7DA6C00D3), UINT64_C(0x000114C4C91AB28A)}}, {{UINT64_C(0x000CEE008612CF1A), UINT64_C(0x0002CF14346EA4C4), UINT64_C(0x0006F8B9D96AE467), UINT64_C(0x0003F33F3E39A186), UINT64_C(0x0004B642581414E2)}, {UINT64_C(0x000A079B869D7477), UINT64_C(0x00030DA90A235CA3), UINT64_C(0x0006AD614FDCB2C3), UINT64_C(0x0004852A604A706D), UINT64_C(0x0000157A3839DED1)}}, {{UINT64_C(0x000B59E444C4EB0D), UINT64_C(0x00011676B4ECD851), UINT64_C(0x0003D31CB1B12DF9), UINT64_C(0x00027C08F496EEA1), UINT64_C(0x0000BE08415158FA)}, {UINT64_C(0x000A04AEF0929EB4), UINT64_C(0x0002CE3EB2563B82), UINT64_C(0x00020C0E6F08D318), UINT64_C(0x0006285C2F629C66), UINT64_C(0x00021EDBA60C1ABB)}}, }, { {{UINT64_C(0x000FBF96E6D13256), UINT64_C(0x0000B68470D1AAB9), UINT64_C(0x0000BC465046AA9B), UINT64_C(0x0003D5203520917C), UINT64_C(0x0004B417116FA14F)}, {UINT64_C(0x0009A3647E0FAC1A), UINT64_C(0x00071A016007859E), UINT64_C(0x0000A7B31060BC87), UINT64_C(0x000128F617FE1085), UINT64_C(0x00006EB4B51971C6)}}, {{UINT64_C(0x00056FA126BE097D), UINT64_C(0x0000CA15EBCCDD85), UINT64_C(0x00049ED9E3DC0A72), UINT64_C(0x0000534A6F2D34FF), UINT64_C(0x000727D2633CD1B3)}, {UINT64_C(0x000077AEFB30F457), UINT64_C(0x00024BD5A728DA2D), UINT64_C(0x0002C9AF355CE67C), UINT64_C(0x00073999222C6A81), UINT64_C(0x0005ABF888781842)}}, {{UINT64_C(0x0007E2B53855E82E), UINT64_C(0x00036F75F5B38D7D), UINT64_C(0x0001FC3826F69222), UINT64_C(0x000551148FF627FA), UINT64_C(0x0000E21BFC642276)}, {UINT64_C(0x000CD49503E4AE88), UINT64_C(0x00047C1EF9736822), UINT64_C(0x0002AEC417D9DE9E), UINT64_C(0x000564FF1CD1C7C3), UINT64_C(0x000102F631F03439)}}, {{UINT64_C(0x000A9896A4813696), UINT64_C(0x0003523D6EEBE38D), UINT64_C(0x0001F9CAD687DDF8), UINT64_C(0x00071E17B9265FA2), UINT64_C(0x0003DC4E4A6526C5)}, {UINT64_C(0x000380987DFF3364), UINT64_C(0x00031775ED80285C), UINT64_C(0x0003F94142B2664D), UINT64_C(0x00019B13FD7656C1), UINT64_C(0x0003839548BAC133)}}, {{UINT64_C(0x0009059C15C5F8C7), UINT64_C(0x0005DCE55CE2EB32), UINT64_C(0x00064F44509419F0), UINT64_C(0x0005813AAEBDF343), UINT64_C(0x00066F8F9B0F508F)}, {UINT64_C(0x0004D3AC3084DCF0), UINT64_C(0x00046DB6042359EF), UINT64_C(0x0000707D3EFD6F04), UINT64_C(0x00039BE123FBD3E7), UINT64_C(0x000374429C7AA556)}}, {{UINT64_C(0x0009049F51AC9B9F), UINT64_C(0x00069F045B69DBA5), UINT64_C(0x0003599C0A66FE14), UINT64_C(0x0007E37C062CF77A), UINT64_C(0x0004EE7A09B3E7EA)}, {UINT64_C(0x000BBEBF02917C14), UINT64_C(0x00000A62E0342107), UINT64_C(0x00018B2A672798B2), UINT64_C(0x0005D31A994A35E2), UINT64_C(0x00025FE7CA47E56C)}}, {{UINT64_C(0x000C0FA78FD24FB4), UINT64_C(0x00014B8508F3AF59), UINT64_C(0x0001D75539AA97B4), UINT64_C(0x00030FD522CD0AED), UINT64_C(0x0001AEF85FCB95C2)}, {UINT64_C(0x000CE2C59DBEBDCB), UINT64_C(0x0002F12AEBAFF60C), UINT64_C(0x0004DE71444F1374), UINT64_C(0x00053A44DD8A0024), UINT64_C(0x000043DEE537DC07)}}, {{UINT64_C(0x000F9CB8CD409462), UINT64_C(0x00007A5EA9DCFC77), UINT64_C(0x00015B9C5672DDAC), UINT64_C(0x0002DEC06E0CD7B9), UINT64_C(0x0003829D7DBD8C4B)}, {UINT64_C(0x000148A317174A3E), UINT64_C(0x0006C135D451348E), UINT64_C(0x000614DB1EF72449), UINT64_C(0x0005EA3039A699C9), UINT64_C(0x0005F393C9921CFD)}}, {{UINT64_C(0x000BD8E78399A837), UINT64_C(0x000326AC044CB6BE), UINT64_C(0x000421B7FF19FDFB), UINT64_C(0x0004F2CE100BD03E), UINT64_C(0x00064D848DAF30F8)}, {UINT64_C(0x0009B499ED1FE2E3), UINT64_C(0x0006841BA92C3FA2), UINT64_C(0x00061A84C7C8363B), UINT64_C(0x00014616602672A2), UINT64_C(0x00056FFF0F1EB104)}}, {{UINT64_C(0x0006C40BEAC31BB5), UINT64_C(0x00018E17F67F79D1), UINT64_C(0x000226CDC803E440), UINT64_C(0x0001B07C6F9AA066), UINT64_C(0x0000F7F08F44D7E2)}, {UINT64_C(0x000A2B8B71A878F2), UINT64_C(0x00005451E156E406), UINT64_C(0x0003F11116E5324A), UINT64_C(0x0007F48FABEB6CE3), UINT64_C(0x00041EA4652B5893)}}, {{UINT64_C(0x00080127877EB48E), UINT64_C(0x0004F352E0372300), UINT64_C(0x0004B4EA89740CB2), UINT64_C(0x0002DA8620AA1FD0), UINT64_C(0x0003DD845928A4A7)}, {UINT64_C(0x0003B8912897B9CF), UINT64_C(0x00024BFED91B1D58), UINT64_C(0x0002574ECC3E424D), UINT64_C(0x00037D04B7723902), UINT64_C(0x00006D7693B13AD1)}}, {{UINT64_C(0x00059E9FDEA9C944), UINT64_C(0x000428DEC2AC2842), UINT64_C(0x000497AAFFA03EFC), UINT64_C(0x0005FB9332E47452), UINT64_C(0x00056C69D8A0C638)}, {UINT64_C(0x0009A23A2C6E31BC), UINT64_C(0x00003ED95E52136D), UINT64_C(0x00034F2DF9A2277A), UINT64_C(0x0006E2B8948FCBBB), UINT64_C(0x0002E56F673B687E)}}, {{UINT64_C(0x00011F6068178EE8), UINT64_C(0x000571D59E914ACF), UINT64_C(0x00053B116D7B9565), UINT64_C(0x0000819A7CA2F5C6), UINT64_C(0x00005D54B6D9C418)}, {UINT64_C(0x000117E6E5F4423F), UINT64_C(0x0007BB7D377A5DF8), UINT64_C(0x00046F1DCCE6741F), UINT64_C(0x000624C8A21373BD), UINT64_C(0x00023E4D22A016DF)}}, {{UINT64_C(0x0003C0EAC69D0DE5), UINT64_C(0x0006CF31DC831402), UINT64_C(0x00002BAD0A426ACA), UINT64_C(0x00007864FD5F0E1A), UINT64_C(0x00013C70B1A51E7D)}, {UINT64_C(0x000E7A74CF7DE7B7), UINT64_C(0x00059198080C0E1F), UINT64_C(0x0002341CEA45F848), UINT64_C(0x000640334A0B0BD2), UINT64_C(0x00073CF34A927A18)}}, {{UINT64_C(0x00078BB4A9FDF621), UINT64_C(0x000042F21FD366CA), UINT64_C(0x00039E15CF3E8543), UINT64_C(0x000371C9BC5AD61E), UINT64_C(0x0004B624E18568CB)}, {UINT64_C(0x00078D62B4ADE692), UINT64_C(0x0004A079DD8E7902), UINT64_C(0x00029FA46937F35F), UINT64_C(0x0001C7744CC75169), UINT64_C(0x0007C882CBF3BBAA)}}, {{UINT64_C(0x0005C23B09112390), UINT64_C(0x0001091F52EA9318), UINT64_C(0x00047D031BDBD618), UINT64_C(0x00042176E850AF62), UINT64_C(0x000255756EBA373D)}, {UINT64_C(0x0008E197B7FDF0D5), UINT64_C(0x0001277E4F639650), UINT64_C(0x00002E5B807E9012), UINT64_C(0x0005C7BCAB505A9F), UINT64_C(0x0001A25FDD4D5CF9)}}, }, { {{UINT64_C(0x0005828E38661C25), UINT64_C(0x00014BC3733F569B), UINT64_C(0x0003412CB1C71958), UINT64_C(0x00004DC731462284), UINT64_C(0x0001245D94326762)}, {UINT64_C(0x000EBD2384BE5F68), UINT64_C(0x000697E3904C2BC5), UINT64_C(0x0005D783FCBC6030), UINT64_C(0x0004CB401C37BE4C), UINT64_C(0x00011FFCCA4123CC)}}, {{UINT64_C(0x00010495DBB211E9), UINT64_C(0x00025442F7CC4E5C), UINT64_C(0x000561DB7856A6B7), UINT64_C(0x00052325F162CCFC), UINT64_C(0x00054EF209D81AB5)}, {UINT64_C(0x000C391A115200C4), UINT64_C(0x000138919D37F23E), UINT64_C(0x00038909464B887E), UINT64_C(0x0005167B307E5774), UINT64_C(0x00032242323F9935)}}, {{UINT64_C(0x0007ED46EC46A583), UINT64_C(0x000392288DCC4F7A), UINT64_C(0x0007FD2EB94B33B0), UINT64_C(0x000432CF9FE955B4), UINT64_C(0x0002450E4D8A038A)}, {UINT64_C(0x0007AFF478477329), UINT64_C(0x0004D48903D3CD08), UINT64_C(0x000708276A425531), UINT64_C(0x000606FD71DB1D37), UINT64_C(0x000142BEBD75DEB9)}}, {{UINT64_C(0x000B1FA45676391E), UINT64_C(0x00069692EEDD270E), UINT64_C(0x000498670EBF7399), UINT64_C(0x00045C7632B7CFC2), UINT64_C(0x00019A09AE2A79FB)}, {UINT64_C(0x0002CA58A8153BB1), UINT64_C(0x00031337FF678477), UINT64_C(0x000418997426A417), UINT64_C(0x000655A7996C5020), UINT64_C(0x0001936EB94D8E93)}}, {{UINT64_C(0x0009A2630289A595), UINT64_C(0x0000CA8CFCDBA537), UINT64_C(0x00056FF9F6E6FE48), UINT64_C(0x0005B53BE7E2FC07), UINT64_C(0x0000C8AA9E431C96)}, {UINT64_C(0x0008F62B7EC7F8B4), UINT64_C(0x000759CD5D73D9A2), UINT64_C(0x00015AB8E3A25009), UINT64_C(0x0004CC8936067C91), UINT64_C(0x00054FC0E3CFD648)}}, {{UINT64_C(0x0006FA9F5E920FA0), UINT64_C(0x0000B770A49D3EEC), UINT64_C(0x000582B079BCD64F), UINT64_C(0x0001C35560408E28), UINT64_C(0x000044A7950A6FFB)}, {UINT64_C(0x000B3A87FED1B513), UINT64_C(0x00067CE537DA0A6A), UINT64_C(0x000707594DB6F3AF), UINT64_C(0x00057EC75ED66C23), UINT64_C(0x00069E23F2649E30)}}, {{UINT64_C(0x000AA072D6126519), UINT64_C(0x0001BE00610679A4), UINT64_C(0x0006C412907F1A7D), UINT64_C(0x000163773E6AAA30), UINT64_C(0x0003BC5F3E291E74)}, {UINT64_C(0x000809166205E3BB), UINT64_C(0x000785499CE64078), UINT64_C(0x0000E3D8FC7F29B8), UINT64_C(0x0007E0EF22E29934), UINT64_C(0x00030E9A8D252A88)}}, {{UINT64_C(0x0003A829DCC73EE8), UINT64_C(0x000699D7B9BF4EAD), UINT64_C(0x0007D4B17CC3C7C2), UINT64_C(0x0002905BEE0EE901), UINT64_C(0x000547FF8275C891)}, {UINT64_C(0x00052B2910F7F25A), UINT64_C(0x00068F778D2E5A27), UINT64_C(0x0001B85563815942), UINT64_C(0x00013DF08225311A), UINT64_C(0x0007609FDFF08594)}}, {{UINT64_C(0x000B2E2EC305F2D5), UINT64_C(0x0000996BBC6E4FA9), UINT64_C(0x00030B4CB4168F67), UINT64_C(0x0007426FB602045D), UINT64_C(0x0000943C5ADFF99F)}, {UINT64_C(0x000E48A53EA42C24), UINT64_C(0x00057678B9589CBD), UINT64_C(0x00052006DCF8D83F), UINT64_C(0x00053D7E245AD4FD), UINT64_C(0x00077A9E12D48B9D)}}, {{UINT64_C(0x0007CAC10865F9CF), UINT64_C(0x000578B7D35B3A19), UINT64_C(0x000708EEEBB1E6E7), UINT64_C(0x0002ABFEA46C5555), UINT64_C(0x0004CA5DC5AE086E)}, {UINT64_C(0x000A36376B7A93D2), UINT64_C(0x000188095575D2D0), UINT64_C(0x0000393EF6F8634C), UINT64_C(0x0007C039388938C2), UINT64_C(0x00031010E90AC0B1)}}, {{UINT64_C(0x0007DF172B9EB768), UINT64_C(0x000178D003BB4489), UINT64_C(0x000783A956E76079), UINT64_C(0x00025ACCD6C14EC3), UINT64_C(0x00046178A9DC6279)}, {UINT64_C(0x00015D4ECB7BD0F4), UINT64_C(0x0006C0DC296E2C56), UINT64_C(0x00053C51B36422FB), UINT64_C(0x000549E0F4E67DE5), UINT64_C(0x000389CCC23186D0)}}, {{UINT64_C(0x000C532F03C27F78), UINT64_C(0x00014A6C28ABF4C3), UINT64_C(0x0003F90A141B9A5B), UINT64_C(0x00069B2DDF5CD3B9), UINT64_C(0x0002CA851CF01E00)}, {UINT64_C(0x00059440324910F2), UINT64_C(0x000729FD333620F7), UINT64_C(0x00003CD70BDC8C7B), UINT64_C(0x00040C73BD640FDD), UINT64_C(0x0004332FAA2FFBA1)}}, {{UINT64_C(0x0006664ABFD5681D), UINT64_C(0x000074E8C029237E), UINT64_C(0x0006201249B2B7BD), UINT64_C(0x000529E03D66B256), UINT64_C(0x000107D890CE2D92)}, {UINT64_C(0x000F2B9FEE1231EC), UINT64_C(0x00037A3DA4060374), UINT64_C(0x0000D270F3481DAF), UINT64_C(0x000748DD10EC51C1), UINT64_C(0x000313AA5B16B013)}}, {{UINT64_C(0x000DF0E13A34CBFC), UINT64_C(0x0003631767D8B18E), UINT64_C(0x00006B84D66D0E80), UINT64_C(0x0003C82463233CE9), UINT64_C(0x00000EC0876ED459)}, {UINT64_C(0x000BFA9BFE16F36E), UINT64_C(0x0002B16C346CBE77), UINT64_C(0x0001F03779578316), UINT64_C(0x0005B6D0ECC3F5EA), UINT64_C(0x000392C5DC949B1E)}}, {{UINT64_C(0x0003CA709674F552), UINT64_C(0x0004286A064869F6), UINT64_C(0x0000E2BB1ED6DF2A), UINT64_C(0x0004B163E6232515), UINT64_C(0x0007FC5BBC23EE21)}, {UINT64_C(0x00048D96D1562488), UINT64_C(0x0004D9D561FE91F5), UINT64_C(0x0005807F49D14F0C), UINT64_C(0x0000A483741FDC4B), UINT64_C(0x0002562EC3A9714B)}}, {{UINT64_C(0x00077D2D04C4F8B3), UINT64_C(0x0003A4D092998582), UINT64_C(0x00036F34A3156092), UINT64_C(0x00036043316B80D2), UINT64_C(0x000387899C0D0389)}, {UINT64_C(0x0001D232B890C1FF), UINT64_C(0x0002BB8E2A3A7B1E), UINT64_C(0x000674044C311F30), UINT64_C(0x00042AABC2D14B2F), UINT64_C(0x0005FA4E41857301)}}, }, { {{UINT64_C(0x000B8C87FBE21CA1), UINT64_C(0x0004654DD4516E9E), UINT64_C(0x0004D4C04111E84C), UINT64_C(0x00052F54D6883A97), UINT64_C(0x00058FBFACC04077)}, {UINT64_C(0x0008B1B2BD6C47E6), UINT64_C(0x000406C2B52FDDD1), UINT64_C(0x0005CD0AC07AFC39), UINT64_C(0x00025702B023D878), UINT64_C(0x0000457D9E01D39B)}}, {{UINT64_C(0x000357AC0E5357E1), UINT64_C(0x000603BB8F446D94), UINT64_C(0x000526C39B423BF6), UINT64_C(0x000652EC95741E38), UINT64_C(0x0003AE110F98F0B7)}, {UINT64_C(0x00062637EE945699), UINT64_C(0x00049EF673613CC9), UINT64_C(0x00016CE0E4F9387C), UINT64_C(0x000651CEC355D9BE), UINT64_C(0x000268F9AB67FA18)}}, {{UINT64_C(0x00093F3302F7A85C), UINT64_C(0x00045C7103A537C2), UINT64_C(0x000019C168EFCF12), UINT64_C(0x0000FCE8AC30255C), UINT64_C(0x00007B9C2CD636AF)}, {UINT64_C(0x000C7C15BA124E6A), UINT64_C(0x0006096943B520B1), UINT64_C(0x00062EFD361E552A), UINT64_C(0x0001B396CD943BA3), UINT64_C(0x000246C5ECE49CB6)}}, {{UINT64_C(0x000C8B07844D0432), UINT64_C(0x000193AA51F64178), UINT64_C(0x000652032368D613), UINT64_C(0x0000584636777EBD), UINT64_C(0x00076EBD45AE24F8)}, {UINT64_C(0x00083A8832371D4D), UINT64_C(0x00031C19F58C6C5D), UINT64_C(0x0006B31CAFC81A4C), UINT64_C(0x0000F4FB72B9C793), UINT64_C(0x00051077AABFF976)}}, {{UINT64_C(0x000AFF8E199C7745), UINT64_C(0x00000B6C8E8C41D7), UINT64_C(0x0000E037DBA37A3B), UINT64_C(0x0005BFBB2E8C259E), UINT64_C(0x0003066835FD1B75)}, {UINT64_C(0x000612167989FFA4), UINT64_C(0x0007902FB713C890), UINT64_C(0x0000A6D25B2214DB), UINT64_C(0x00060B1391B6BBD8), UINT64_C(0x0004E350B3BCA4E4)}}, {{UINT64_C(0x000F3F02AF47CC2D), UINT64_C(0x00060388DA43D42C), UINT64_C(0x000632F6353FB249), UINT64_C(0x0005F31E07849F64), UINT64_C(0x0005CE122608D9A5)}, {UINT64_C(0x0006007E5350D389), UINT64_C(0x0007742ACF4259FE), UINT64_C(0x000701EBC914081D), UINT64_C(0x000531138485C0D1), UINT64_C(0x00076919B7CB5969)}}, {{UINT64_C(0x000EC0DD3F0BB75C), UINT64_C(0x000517421A5944B2), UINT64_C(0x00064E3D5BDAF79C), UINT64_C(0x00077DAC3841BA0D), UINT64_C(0x000274CFC101EC2D)}, {UINT64_C(0x0008CD42DD1C1CFE), UINT64_C(0x0000572F81FDFD0F), UINT64_C(0x0007BBC498B713BC), UINT64_C(0x00034B4691EB371D), UINT64_C(0x00064FF50BFB9339)}}, {{UINT64_C(0x000A74289BD66C07), UINT64_C(0x00041AE49E4EF440), UINT64_C(0x00016BD641D76BFB), UINT64_C(0x0006217734484D42), UINT64_C(0x0007801CB15FA7FF)}, {UINT64_C(0x0006A7999951B22E), UINT64_C(0x00073B7132140BC1), UINT64_C(0x0001CB156A92521C), UINT64_C(0x00047DAE07D429C2), UINT64_C(0x00034176AE2F6DD1)}}, {{UINT64_C(0x000F38AE8B585B7C), UINT64_C(0x0007D0F5E5336093), UINT64_C(0x000634B7780008CA), UINT64_C(0x0006CBB99339E01D), UINT64_C(0x000048FD2054F121)}, {UINT64_C(0x000DA75057482FC7), UINT64_C(0x000659E2C0AC4ADB), UINT64_C(0x0002839CEE7F858A), UINT64_C(0x0005F0AC5233F317), UINT64_C(0x0007DB0CE3A922D5)}}, {{UINT64_C(0x00026BED2D1D7FC7), UINT64_C(0x000040FD51645942), UINT64_C(0x0001C6893567FE50), UINT64_C(0x0007BEAA7D726BFC), UINT64_C(0x0004207CB6F8125B)}, {UINT64_C(0x000C744046E92E4A), UINT64_C(0x0004889DCCE9C25F), UINT64_C(0x000298D4EBD978FD), UINT64_C(0x000538378F3B449E), UINT64_C(0x000103ECF3526132)}}, {{UINT64_C(0x00070E6E240ACD3F), UINT64_C(0x0002D0E910C2C5C5), UINT64_C(0x00047C4B7A150503), UINT64_C(0x0007E03610CFC713), UINT64_C(0x000012B1D48802DF)}, {UINT64_C(0x0005F52F4DB5F186), UINT64_C(0x000214FE444DAC5B), UINT64_C(0x00040B88A70B4E77), UINT64_C(0x00028DB30B535336), UINT64_C(0x000269074FCBDB43)}}, {{UINT64_C(0x0007D8A7FAA53FDE), UINT64_C(0x00073B94B3141959), UINT64_C(0x000479FD2A22E7BB), UINT64_C(0x00023433E0E79ABC), UINT64_C(0x0007443BEA34A6F6)}, {UINT64_C(0x000FEF139C8576CC), UINT64_C(0x00050FBF061F5893), UINT64_C(0x0004558E31BB1220), UINT64_C(0x000315C237E0227E), UINT64_C(0x0000B5335F077DD7)}}, {{UINT64_C(0x00045CB3299CB9CB), UINT64_C(0x0006C0467C3B394D), UINT64_C(0x0004E14A26B6171B), UINT64_C(0x00038CC5A50E5AA7), UINT64_C(0x00005EDE90305A8E)}, {UINT64_C(0x0007D811A19C3957), UINT64_C(0x0004D84D2FDD61E8), UINT64_C(0x0003F360AB0C2427), UINT64_C(0x0006D66D2AB4A909), UINT64_C(0x0007376DB64F64BE)}}, {{UINT64_C(0x00051348CBF420A8), UINT64_C(0x0003D930ED834A4F), UINT64_C(0x000189403BF27676), UINT64_C(0x000181B04E39E3D0), UINT64_C(0x00005C72602F7C87)}, {UINT64_C(0x000FF27D92F3F8A6), UINT64_C(0x00057F1C3BE718B0), UINT64_C(0x0007DB5FE00D8AC2), UINT64_C(0x0006508234B8F600), UINT64_C(0x00068F5AC550C57D)}}, {{UINT64_C(0x000B437344372511), UINT64_C(0x0002CC307D9DF3CA), UINT64_C(0x000065755E585F5C), UINT64_C(0x0004484FE311448A), UINT64_C(0x00045D0A928F957F)}, {UINT64_C(0x0009DC33DF29CABF), UINT64_C(0x00058AABC130136B), UINT64_C(0x0006DD896642EBED), UINT64_C(0x0003DD5E6A93CDB6), UINT64_C(0x00058BBD544A9587)}}, {{UINT64_C(0x00023F2F46B77A44), UINT64_C(0x00022E0E5444326D), UINT64_C(0x0000C682DDCB6C24), UINT64_C(0x000174710E87D9FD), UINT64_C(0x00062440C79CB254)}, {UINT64_C(0x000C0B15406C928C), UINT64_C(0x0004D56FB1459CB2), UINT64_C(0x00012D1E88446D8A), UINT64_C(0x0000D1CDDEF21AA8), UINT64_C(0x0002C8A130076C5D)}}, }, { {{UINT64_C(0x000A20A5A11AEE99), UINT64_C(0x000658F7C4C596BF), UINT64_C(0x00031596DD0E0F0C), UINT64_C(0x0007FC75CBADE15C), UINT64_C(0x00024BB69877DB99)}, {UINT64_C(0x000F47EE95A31E2E), UINT64_C(0x0006090BCAD2326F), UINT64_C(0x0003F84B5AAC8FE6), UINT64_C(0x00028823088CE92F), UINT64_C(0x0002532BF86570CF)}}, {{UINT64_C(0x0005E2861D5F12F9), UINT64_C(0x000537E8118D77D5), UINT64_C(0x000631B8799698AE), UINT64_C(0x0003CC1412721F76), UINT64_C(0x000624DB7CBC35F6)}, {UINT64_C(0x0007E4CF1383E30F), UINT64_C(0x0000ACF29C3392AB), UINT64_C(0x00027424E45CBECE), UINT64_C(0x000531D9F8ABB684), UINT64_C(0x00076C6093C294A1)}}, {{UINT64_C(0x000536AC6395662A), UINT64_C(0x000239188AAD2807), UINT64_C(0x00031EADFE0E7BEB), UINT64_C(0x00036455A85285DD), UINT64_C(0x0000DFA70C45530F)}, {UINT64_C(0x000AA7B94BEC12BF), UINT64_C(0x000127AF29368714), UINT64_C(0x0005B0B1FF2913B2), UINT64_C(0x0005B474E2A2BCDF), UINT64_C(0x0005B2B977212BD9)}}, {{UINT64_C(0x000FFD50E811BC89), UINT64_C(0x0003FA8AA1288DF8), UINT64_C(0x0004CE42359D496A), UINT64_C(0x0005AD22EC8B66B0), UINT64_C(0x00035AD636E886A1)}, {UINT64_C(0x00036AEC1F03E773), UINT64_C(0x0004DB5A8BCA9BB7), UINT64_C(0x000378BD3B9E00D0), UINT64_C(0x0002F9A1B2588A18), UINT64_C(0x00059374C4B84DCE)}}, {{UINT64_C(0x000A5C78C0A09501), UINT64_C(0x000438418122FEF3), UINT64_C(0x00036F391A493F51), UINT64_C(0x0001C1581DA10D11), UINT64_C(0x0004D380EFB19759)}, {UINT64_C(0x0007AE14448E2F04), UINT64_C(0x0003E5E01CA7FD7A), UINT64_C(0x00014C4162795998), UINT64_C(0x0007BBA0161739BC), UINT64_C(0x0001CC54400F1EC4)}}, {{UINT64_C(0x000B4104835823A8), UINT64_C(0x000049050C8FF31A), UINT64_C(0x00078137F3671127), UINT64_C(0x000291A0D2FD7BCD), UINT64_C(0x0000C5045563A528)}, {UINT64_C(0x000216E06610C3FE), UINT64_C(0x0006D4EB6BA949C6), UINT64_C(0x0005980545DD7A0A), UINT64_C(0x0003C47D2617FCCA), UINT64_C(0x0004E4B15E594DAD)}}, {{UINT64_C(0x000F8BABBDF00F70), UINT64_C(0x00063DF37D0B03B9), UINT64_C(0x0003D691146AF8DE), UINT64_C(0x00002891C5C93DC5), UINT64_C(0x0001CD90615B01A9)}, {UINT64_C(0x000D5D595EBCBD12), UINT64_C(0x000179C70C411F6B), UINT64_C(0x000470395C25F3BB), UINT64_C(0x00005F2DBD08ADC8), UINT64_C(0x000177CA728981CA)}}, {{UINT64_C(0x0000E456B1F71055), UINT64_C(0x0007362E63D73807), UINT64_C(0x00040975D13C6956), UINT64_C(0x00077C8546A0DDEC), UINT64_C(0x000255C05FCBFFB8)}, {UINT64_C(0x0009D08BF388FA6C), UINT64_C(0x0005479123177C4E), UINT64_C(0x0006EF2CA17DD9CC), UINT64_C(0x0000A28B766E8543), UINT64_C(0x000725EF11C998DB)}}, {{UINT64_C(0x000AFD776D46AE2B), UINT64_C(0x0003A2987F39DE71), UINT64_C(0x00004318A4AD86B8), UINT64_C(0x00029CB17C4E8BA2), UINT64_C(0x00068C1611368562)}, {UINT64_C(0x00072BB4043C69E3), UINT64_C(0x000355B0D908C97C), UINT64_C(0x0001D84483454BEA), UINT64_C(0x0001086B129DA054), UINT64_C(0x00077E8521E8B03C)}}, {{UINT64_C(0x000483BAE3E96C40), UINT64_C(0x0001033C465DCD03), UINT64_C(0x000144124D4C7602), UINT64_C(0x0000F90A0A3F2373), UINT64_C(0x00021D2DDA9344D1)}, {UINT64_C(0x000BCC16AC03E55C), UINT64_C(0x0007907B7596D0A7), UINT64_C(0x0001FA7957776F16), UINT64_C(0x000330182BCE6E91), UINT64_C(0x00044B0FCEC99956)}}, {{UINT64_C(0x00057F6C0E0F3BFB), UINT64_C(0x000162B3C9264F2C), UINT64_C(0x00041C4E863CD2BE), UINT64_C(0x00044D72FE16345A), UINT64_C(0x000666FAA55BBB69)}, {UINT64_C(0x000E5AD6ED951F40), UINT64_C(0x000420A55FD6D09E), UINT64_C(0x00045DEBB67E01E4), UINT64_C(0x00057700CDA6B2E2), UINT64_C(0x0002385BC90BA9CD)}}, {{UINT64_C(0x000D7FBDBC6992BF), UINT64_C(0x000326A5E14A7861), UINT64_C(0x000542159B191B29), UINT64_C(0x00078DF87B779043), UINT64_C(0x0007D91072D769FC)}, {UINT64_C(0x000F81B25D9A6F04), UINT64_C(0x0004F3DE069B4E88), UINT64_C(0x0003D1D943A8CBC1), UINT64_C(0x00003F1FE40D629B), UINT64_C(0x0003EC7B27C110AE)}}, {{UINT64_C(0x000A3FB03B6CC730), UINT64_C(0x00023C7A1AE1D095), UINT64_C(0x0004D884FC7D66EE), UINT64_C(0x0006892EDA82276A), UINT64_C(0x0007E14DAC6F262A)}, {UINT64_C(0x000078183982428A), UINT64_C(0x0000F555B51769F7), UINT64_C(0x0002C306A05F265D), UINT64_C(0x0007359935B2E81E), UINT64_C(0x00017E43ECD283C0)}}, {{UINT64_C(0x00003A82E91E17BF), UINT64_C(0x0002819AB5CB8AC3), UINT64_C(0x0004CCB84250F825), UINT64_C(0x0005B7B331D46BB5), UINT64_C(0x0001D3BA6D0D999A)}, {UINT64_C(0x000FED56D79EE4F6), UINT64_C(0x000159B4CD69EF9F), UINT64_C(0x0001BFFE18B5C9B0), UINT64_C(0x0004736AD2A4D805), UINT64_C(0x00034F5F044BA570)}}, {{UINT64_C(0x0001343287CDEBA0), UINT64_C(0x00013D882BADAB71), UINT64_C(0x0005CAD7B607FCC4), UINT64_C(0x00023E01BF809A99), UINT64_C(0x0003312CA1620AC9)}, {UINT64_C(0x000282755193459D), UINT64_C(0x0004995E4E82E3E5), UINT64_C(0x0000CBCB85F02225), UINT64_C(0x0000D409BC19F795), UINT64_C(0x00002E6EDB143CE9)}}, {{UINT64_C(0x0004F31CB2D9BCCB), UINT64_C(0x000628A63902A713), UINT64_C(0x0004F007BD385C5E), UINT64_C(0x0001F74B1F93394D), UINT64_C(0x0003086A647FCB5C)}, {UINT64_C(0x000398B0975F65D4), UINT64_C(0x0004AA9FDC040688), UINT64_C(0x000332D91719B6C9), UINT64_C(0x00040BC443E8E4C7), UINT64_C(0x00020AA4BACC6B0F)}}, }, { {{UINT64_C(0x00082C1376036494), UINT64_C(0x000381809A5DC13F), UINT64_C(0x0007A768F09F3FDD), UINT64_C(0x000024F9AD059DDF), UINT64_C(0x000434FAA3001A00)}, {UINT64_C(0x000F6C7E5397CE18), UINT64_C(0x000473965DA5203F), UINT64_C(0x000022D664316484), UINT64_C(0x00017D08DDE3B42A), UINT64_C(0x000032E15813D1D4)}}, {{UINT64_C(0x000A24C7658BA0CB), UINT64_C(0x0004DAFAE0752E4D), UINT64_C(0x00057FEE62416FAC), UINT64_C(0x0007CE89A50A1C66), UINT64_C(0x0005B3A87DDA42C5)}, {UINT64_C(0x00015A6DCD0D9750), UINT64_C(0x0000DC64FF4D1D60), UINT64_C(0x00062BE62D48588D), UINT64_C(0x00044CED6F7DC105), UINT64_C(0x00051FD1713A7272)}}, {{UINT64_C(0x00031C0A4FBA8CD3), UINT64_C(0x00004D85D27BFFBD), UINT64_C(0x00073687DDD1897B), UINT64_C(0x0003C18CABEB4462), UINT64_C(0x000252009593038E)}, {UINT64_C(0x0006A4B0F43B1F03), UINT64_C(0x0003596CEF096CE4), UINT64_C(0x000370A6BA70C9EC), UINT64_C(0x000504FA8F22F8D9), UINT64_C(0x00042EF23D58A32E)}}, {{UINT64_C(0x00018C743658227A), UINT64_C(0x00059EB06D4851E7), UINT64_C(0x000765C0B448C135), UINT64_C(0x0002B1CDBE044E7F), UINT64_C(0x0003BDF03C33FC4C)}, {UINT64_C(0x0000B8DD5FB4A505), UINT64_C(0x00042CD448FC94EE), UINT64_C(0x00041528FB2A0C40), UINT64_C(0x0006016CCFD12E3D), UINT64_C(0x00050D6616BCB42A)}}, {{UINT64_C(0x00040B651D6D68FC), UINT64_C(0x0004F96B3665F295), UINT64_C(0x00032453022450B6), UINT64_C(0x00062498B1682588), UINT64_C(0x0000FAB72B2FCCDF)}, {UINT64_C(0x000274624DFAF9A7), UINT64_C(0x0004DA952FBAD71D), UINT64_C(0x0000C06372160275), UINT64_C(0x00065F4951C1680C), UINT64_C(0x00020B63127A4A88)}}, {{UINT64_C(0x000050A3603E9997), UINT64_C(0x0003A6ADCDF25D68), UINT64_C(0x0001ADDCEB37FF27), UINT64_C(0x0004AE1B473A39F1), UINT64_C(0x00008E1D46706170)}, {UINT64_C(0x000BDEA888583D12), UINT64_C(0x00058B06E62135F6), UINT64_C(0x0006B07EE1CF9CF1), UINT64_C(0x0007166BD7374570), UINT64_C(0x0001B932B291A438)}}, {{UINT64_C(0x0005AF929B2B37C3), UINT64_C(0x0007549202796660), UINT64_C(0x000513E2660DE7FC), UINT64_C(0x00006B6381885392), UINT64_C(0x000331EBF4C330BC)}, {UINT64_C(0x0005604DFD132A81), UINT64_C(0x00018FFB2CF41F7A), UINT64_C(0x0005BE1FFDB10454), UINT64_C(0x000789C57A8EB47D), UINT64_C(0x0003C7003C3CC193)}}, {{UINT64_C(0x000FF74CFBD82392), UINT64_C(0x000381F44F448A49), UINT64_C(0x00037DADAB5742D4), UINT64_C(0x0003385CD8013C8C), UINT64_C(0x00077C42B4529B16)}, {UINT64_C(0x0009C56F0944379A), UINT64_C(0x000383BFA2B1C2B2), UINT64_C(0x0003E4ADF6856612), UINT64_C(0x0004D8EDC69A18AE), UINT64_C(0x000782A2F6102155)}}, {{UINT64_C(0x000C8496202AE6A8), UINT64_C(0x000433B75E48A25B), UINT64_C(0x0005141D4B503E98), UINT64_C(0x0005226A88155633), UINT64_C(0x000022CA7649B49E)}, {UINT64_C(0x000DDE29F41E7545), UINT64_C(0x00051980467DCE98), UINT64_C(0x0005452CD2F2E90B), UINT64_C(0x00044681E5A6B9BC), UINT64_C(0x0000B18699C70658)}}, {{UINT64_C(0x000454DCDC35F98E), UINT64_C(0x0004D3A9A9B829BD), UINT64_C(0x0005C82A6F53D23D), UINT64_C(0x00054F2336A35986), UINT64_C(0x0004F050EAA88BC5)}, {UINT64_C(0x00091AE73A0DC4CB), UINT64_C(0x0006739166A25EC5), UINT64_C(0x0000F8DCFD062057), UINT64_C(0x000680C6E9553F2E), UINT64_C(0x00016C70FF5900AB)}}, {{UINT64_C(0x000C54EBAD62EAB1), UINT64_C(0x0006A7C01E68F92A), UINT64_C(0x0004C8F6FC7D7E91), UINT64_C(0x00071F7B41EA0338), UINT64_C(0x000441A714BEC729)}, {UINT64_C(0x0004B4DAD4F8A724), UINT64_C(0x00033ED22AE26116), UINT64_C(0x00079F365BF781AB), UINT64_C(0x00002CA67E4CAEC5), UINT64_C(0x00055A4A1A0081CE)}}, {{UINT64_C(0x000856B7CDEDE34B), UINT64_C(0x00046FA048E577A5), UINT64_C(0x00038378B91B299E), UINT64_C(0x0004C31EAC28396A), UINT64_C(0x0001440CEEBF654F)}, {UINT64_C(0x000DE3FD4ACED2B3), UINT64_C(0x0007A22FF45E43F3), UINT64_C(0x00007CC601E3B097), UINT64_C(0x0002A04F943FBC69), UINT64_C(0x0005C5F64D0D7533)}}, {{UINT64_C(0x000DBE80786B794B), UINT64_C(0x00034C0F990B92EF), UINT64_C(0x000330FBBBF05942), UINT64_C(0x00027E782DC51868), UINT64_C(0x000287A147D07324)}, {UINT64_C(0x000213F588BDAF78), UINT64_C(0x0000435D0191F486), UINT64_C(0x0006F097D291A15C), UINT64_C(0x000339AFB6E98B50), UINT64_C(0x00055B5A4EA63E71)}}, {{UINT64_C(0x00012AEEC81A34E7), UINT64_C(0x0003DBAAF67991EA), UINT64_C(0x000737806F56C38C), UINT64_C(0x00043D356C504230), UINT64_C(0x000311DCD3F757D5)}, {UINT64_C(0x00073E6854BEEAE4), UINT64_C(0x0005FB95F72D5723), UINT64_C(0x000411187F7CE78E), UINT64_C(0x00077E7ED750A498), UINT64_C(0x0005993AA33720F3)}}, {{UINT64_C(0x00028A5A432F3F67), UINT64_C(0x00075D0A5CAB6768), UINT64_C(0x0006396B9CAB93D8), UINT64_C(0x000546258D80855A), UINT64_C(0x0003C09404670F46)}, {UINT64_C(0x00000D1A71F0C8DC), UINT64_C(0x0001CA62AD6C1C14), UINT64_C(0x000494E0150B4553), UINT64_C(0x0000B039392E5564), UINT64_C(0x0002EF65688DCB46)}}, {{UINT64_C(0x00082CA0145F254D), UINT64_C(0x0001317C70253A1C), UINT64_C(0x0006973D40E8D54D), UINT64_C(0x00010E78CCE403C7), UINT64_C(0x000265A013FD1B69)}, {UINT64_C(0x00000339C480223D), UINT64_C(0x00055E9E7BB6DB26), UINT64_C(0x00058F178B4BACE4), UINT64_C(0x00071F32575FDCD2), UINT64_C(0x0001C71C69B2119D)}}, }, { {{UINT64_C(0x000AF8DFD07525D6), UINT64_C(0x0005ABDDBE90D603), UINT64_C(0x0004A248FDF2D0CF), UINT64_C(0x0005172B1CA46E8D), UINT64_C(0x0007BC8CE3E6B3DD)}, {UINT64_C(0x000F6A2BEB2B44FC), UINT64_C(0x00000D349B42C8CF), UINT64_C(0x0004B7CD7C88C973), UINT64_C(0x0005ECA8F4485D17), UINT64_C(0x0007D62C28C79894)}}, {{UINT64_C(0x000B55207F725350), UINT64_C(0x000155DFEC40CDAB), UINT64_C(0x00027B783F369EDB), UINT64_C(0x00011A983C2841D6), UINT64_C(0x00012B6224AE4C25)}, {UINT64_C(0x0009BF92AE68CF96), UINT64_C(0x0001147BF976A441), UINT64_C(0x0002CCF3203AAF22), UINT64_C(0x000069BD39DE1693), UINT64_C(0x00032BC9448C60DE)}}, {{UINT64_C(0x0006D373DED15DFB), UINT64_C(0x0006BAD3E5311A3A), UINT64_C(0x00012CCBC4FCB6F2), UINT64_C(0x0002A5A3B3908623), UINT64_C(0x000542CFC756FE18)}, {UINT64_C(0x000657D935ECDC3F), UINT64_C(0x0000A8A6A301FE80), UINT64_C(0x000394A934538AE2), UINT64_C(0x0001DB171CCFA8F2), UINT64_C(0x000490705EEEAB8C)}}, {{UINT64_C(0x0008239926A0236C), UINT64_C(0x0004072433544306), UINT64_C(0x0007BB7A8ED39FBB), UINT64_C(0x0001F54925C1C4E3), UINT64_C(0x000664E83A948559)}, {UINT64_C(0x000F11625DBAE781), UINT64_C(0x000692D219D5FF95), UINT64_C(0x00073D91B99DD9EA), UINT64_C(0x00050FBE7DF80371), UINT64_C(0x00057654A7F31CC1)}}, {{UINT64_C(0x000AEE343C7C9D05), UINT64_C(0x000090117343650E), UINT64_C(0x0006CC575AEDA322), UINT64_C(0x0004F1E2F2B51775), UINT64_C(0x00076F6DB85D5F21)}, {UINT64_C(0x000B8CF913A709D2), UINT64_C(0x0007FB116D7DC97E), UINT64_C(0x0001529FD6EEF6A5), UINT64_C(0x00056A6B91E47DF0), UINT64_C(0x0002E9B775561208)}}, {{UINT64_C(0x000575D0571791A0), UINT64_C(0x000578E1DBFBEA77), UINT64_C(0x0003A703A52790E7), UINT64_C(0x0000C97F49B37153), UINT64_C(0x0004278132554EB7)}, {UINT64_C(0x000157EE9EA2F134), UINT64_C(0x0003BB0E79C3342D), UINT64_C(0x0002C36A38226E01), UINT64_C(0x0007C88322ACB85B), UINT64_C(0x0004FB186883785F)}}, {{UINT64_C(0x0002044FEB9F9253), UINT64_C(0x00022FA260775335), UINT64_C(0x000039F6E84F28A2), UINT64_C(0x0001836DD1BAB756), UINT64_C(0x00008E7A67948E3E)}, {UINT64_C(0x00054204D45393E2), UINT64_C(0x0003CECF402108D1), UINT64_C(0x0000C701A3210E7D), UINT64_C(0x0000BEADB8DF7D41), UINT64_C(0x00017AC9DF9C5498)}}, {{UINT64_C(0x0002F2E0A3E75974), UINT64_C(0x0002A9F168A74A87), UINT64_C(0x00029F4A8513C289), UINT64_C(0x00018E556097BC48), UINT64_C(0x000200FEB5BAD923)}, {UINT64_C(0x0001B9CE667358CA), UINT64_C(0x00055AE551A801F4), UINT64_C(0x00042DE696A62306), UINT64_C(0x0002C75B9C6C564B), UINT64_C(0x0000164A218F9F79)}}, {{UINT64_C(0x000F29F428A74C0C), UINT64_C(0x00063F194651B933), UINT64_C(0x000528FA6E64E1E3), UINT64_C(0x00068143117910EA), UINT64_C(0x0001B40977C6BA02)}, {UINT64_C(0x0007F5D2BC286354), UINT64_C(0x000402F53D46EBF9), UINT64_C(0x00003B2C2080B52C), UINT64_C(0x00063D348A76083A), UINT64_C(0x0000FD0D6C7223FA)}}, {{UINT64_C(0x000147D6E66EFE04), UINT64_C(0x0005E90EE23C1075), UINT64_C(0x0006E84476D5B541), UINT64_C(0x00052A8100787130), UINT64_C(0x0002D2188343EDC6)}, {UINT64_C(0x0001F9FAD89722F0), UINT64_C(0x0004A9F2401F68AE), UINT64_C(0x000293427A23D1F0), UINT64_C(0x0001D52B70F2E2E3), UINT64_C(0x0003C937077DA4B5)}}, {{UINT64_C(0x000874B69E730AAD), UINT64_C(0x000646B3E1A4C500), UINT64_C(0x0007077863F9D016), UINT64_C(0x00060558644A040D), UINT64_C(0x00036900BEB6A2F1)}, {UINT64_C(0x0005C370223FB20A), UINT64_C(0x000447FB93D1E921), UINT64_C(0x00064D502A1F13B6), UINT64_C(0x0004251BECD4B787), UINT64_C(0x0007D125955B235D)}}, {{UINT64_C(0x000FF3E0247628C3), UINT64_C(0x0005612C7EF51C2A), UINT64_C(0x0002EF572E567422), UINT64_C(0x0003F06B0469AB7B), UINT64_C(0x000209BA13287307)}, {UINT64_C(0x0008994050632779), UINT64_C(0x00009A3E92F3709F), UINT64_C(0x00016204EE7B6320), UINT64_C(0x0002F94D7B3DCAF7), UINT64_C(0x0000B4460F41EE3D)}}, {{UINT64_C(0x000C5F26F312D2C5), UINT64_C(0x00071E7C34CDFED2), UINT64_C(0x0002A8304ADF0D4F), UINT64_C(0x0005133E4EAA736F), UINT64_C(0x0004ABE07C40CFA9)}, {UINT64_C(0x000A08F9029290FF), UINT64_C(0x0003EAF403C6D98B), UINT64_C(0x00060DBC0EDB37B6), UINT64_C(0x00007CEC6635832C), UINT64_C(0x0000C81F88E255BC)}}, {{UINT64_C(0x000C0F4508FE693D), UINT64_C(0x00057782552C17E7), UINT64_C(0x000167570039C207), UINT64_C(0x0006114C8419F3C0), UINT64_C(0x0001712CE2C1CBEA)}, {UINT64_C(0x0006787A0AA1DBED), UINT64_C(0x0002B18B64E45E6A), UINT64_C(0x0005FCE592027594), UINT64_C(0x0002E88EBA3ECFFD), UINT64_C(0x000476FD0C587C15)}}, {{UINT64_C(0x000CBD80AAB36FBF), UINT64_C(0x0006ABA6598D0A0A), UINT64_C(0x0000D1C530FCAC66), UINT64_C(0x0002286C6B68E8F6), UINT64_C(0x0006AAF0D091C807)}, {UINT64_C(0x00005BDF3CD0E8D0), UINT64_C(0x0006960A3E5D2C66), UINT64_C(0x000638B2EBDA0973), UINT64_C(0x0004EE54544D3339), UINT64_C(0x00040BDB62E2C15A)}}, {{UINT64_C(0x000BECCC002BCD28), UINT64_C(0x0007346E8C2A60E7), UINT64_C(0x0003B9F742D1704B), UINT64_C(0x0001370F879A06B2), UINT64_C(0x0005A0A68F92C852)}, {UINT64_C(0x000BD4FD9CD7C516), UINT64_C(0x00004D3D2354F933), UINT64_C(0x0003175E3418C5B6), UINT64_C(0x000415E970F01D4A), UINT64_C(0x0000277440ED12C8)}}, }, { {{UINT64_C(0x0004F80B29259121), UINT64_C(0x0004C7AD79241CBB), UINT64_C(0x00031A2024B0C285), UINT64_C(0x0002905F7DC32728), UINT64_C(0x00018F4173185CE8)}, {UINT64_C(0x0008D35E043B3193), UINT64_C(0x000294DB8F82806B), UINT64_C(0x0006E11FA9EFB7F8), UINT64_C(0x0007EC8CC6030101), UINT64_C(0x0007CE956AED6CFE)}}, {{UINT64_C(0x000CE55CC1171587), UINT64_C(0x00054B3932A64433), UINT64_C(0x0005BA7C98FD8209), UINT64_C(0x00056CCE0ED96A42), UINT64_C(0x00079534ED8A0FAF)}, {UINT64_C(0x000AB036181F5C5D), UINT64_C(0x0002C036C8A43EDE), UINT64_C(0x0001D4508E4C7ED0), UINT64_C(0x0000E128F1A3971F), UINT64_C(0x000417208F6464E5)}}, {{UINT64_C(0x000633C1FF9DFEFF), UINT64_C(0x0005208BBFBDE89E), UINT64_C(0x000256F7BBEE3FF4), UINT64_C(0x000577F9D2D9026B), UINT64_C(0x000745C594B0BDC9)}, {UINT64_C(0x000021489A9DCD65), UINT64_C(0x00077418195C0224), UINT64_C(0x00043817466CDB80), UINT64_C(0x0001F3BC7125C1D7), UINT64_C(0x00022C79F6BB84F9)}}, {{UINT64_C(0x000175240458C6F2), UINT64_C(0x0003FF9B00DB6449), UINT64_C(0x0001764BB4C86102), UINT64_C(0x0004BCC4DB3AF4F4), UINT64_C(0x0007EF78D9E386BB)}, {UINT64_C(0x0002DFBA149190F7), UINT64_C(0x0003DA9B88D643CF), UINT64_C(0x0001C3155190EEEC), UINT64_C(0x0005D430C2250A24), UINT64_C(0x0002593ACE56A866)}}, {{UINT64_C(0x000A92165B59C268), UINT64_C(0x0007B4FD61C8ACFF), UINT64_C(0x00025086FD2DA482), UINT64_C(0x000694EDA01406D5), UINT64_C(0x0005DDE8F63674A6)}, {UINT64_C(0x00070F2A7161678D), UINT64_C(0x0005D1DAA454FEEB), UINT64_C(0x0003E403685BEC15), UINT64_C(0x0003DA80C68EC0D1), UINT64_C(0x000190B8FD47B2F4)}}, {{UINT64_C(0x000D2F2403EECAB3), UINT64_C(0x0006EA952EBF1B65), UINT64_C(0x0007D581FECF7ECC), UINT64_C(0x000306921DE856F0), UINT64_C(0x0000F2F865D32B26)}, {UINT64_C(0x0006463217B9D5F6), UINT64_C(0x0005BC460EE03A7D), UINT64_C(0x0002C7357E245644), UINT64_C(0x000336E4E5BEB241), UINT64_C(0x0004EAA60FB21263)}}, {{UINT64_C(0x00031B08269F9703), UINT64_C(0x00005209A523B7D2), UINT64_C(0x000039942D5F26A4), UINT64_C(0x0002779B510C5171), UINT64_C(0x000554D0A38E2ED7)}, {UINT64_C(0x0009D61A3EB63C62), UINT64_C(0x0006B3C74DDABF3E), UINT64_C(0x000180175FCCD722), UINT64_C(0x0005DDF5EF9271A6), UINT64_C(0x0005D1B2EB83F58D)}}, {{UINT64_C(0x000269380CF53650), UINT64_C(0x000478CBA29C961B), UINT64_C(0x0003DCE7E460A8AF), UINT64_C(0x0005DC0399EB13A3), UINT64_C(0x00078777353BF27D)}, {UINT64_C(0x000ED3B71CB3DDF7), UINT64_C(0x0004937FD2AC37C7), UINT64_C(0x0007A97F8A99835C), UINT64_C(0x0007E9175E349529), UINT64_C(0x00049AD7788A8375)}}, {{UINT64_C(0x000AFB12685F6754), UINT64_C(0x0001CC137990650F), UINT64_C(0x0006EC6C0DB127EC), UINT64_C(0x000002F3F9C92B06), UINT64_C(0x00068ED61BED7B48)}, {UINT64_C(0x00048477FEC95FCE), UINT64_C(0x000516ED0BB6C079), UINT64_C(0x00058AC37081FA80), UINT64_C(0x00052743D6E32AAF), UINT64_C(0x000135B867D60FA5)}}, {{UINT64_C(0x000017A14A66889B), UINT64_C(0x0005B0AEEAE56F98), UINT64_C(0x0002236BACAE8AF2), UINT64_C(0x0003C2257520A874), UINT64_C(0x000436DD2F42BB1A)}, {UINT64_C(0x000E73DEE8E27B51), UINT64_C(0x00026156FABFD33E), UINT64_C(0x0002E3A732B167EF), UINT64_C(0x000593856E3BA35D), UINT64_C(0x000572BAFD316337)}}, {{UINT64_C(0x0004CCCD1BFE2F09), UINT64_C(0x0001EB388A46DB63), UINT64_C(0x00052EC6A89BDB63), UINT64_C(0x0003F464068D9320), UINT64_C(0x00066681DD5542FC)}, {UINT64_C(0x000ADA67B76DEDEE), UINT64_C(0x00020BC1E48F374E), UINT64_C(0x00010A381907FB3D), UINT64_C(0x0002A188EFB7D771), UINT64_C(0x000204A6CB902379)}}, {{UINT64_C(0x00017228A8F41270), UINT64_C(0x0003861FA7811FF1), UINT64_C(0x0005C24BAA43480B), UINT64_C(0x0000D91805B4EAEF), UINT64_C(0x000161DF51FF7C92)}, {UINT64_C(0x0002E8C34073031B), UINT64_C(0x0004FC9FC002E034), UINT64_C(0x0000C517474BD432), UINT64_C(0x0005B028CC00B4FC), UINT64_C(0x00032CEE00379E56)}}, {{UINT64_C(0x0004483DBEADB2E0), UINT64_C(0x0006513EDE13135B), UINT64_C(0x00016DAD5C521A87), UINT64_C(0x0005A3E8526657FC), UINT64_C(0x00071D76B3E6D02E)}, {UINT64_C(0x0006473D1426BAF9), UINT64_C(0x0004AA50405810D9), UINT64_C(0x000775BF4EA667B2), UINT64_C(0x00028F630F480B2A), UINT64_C(0x000541E49B3C2921)}}, {{UINT64_C(0x0000C2316D694346), UINT64_C(0x0006BB5D8DD7AC20), UINT64_C(0x000544BA02C52F67), UINT64_C(0x0001A8380E0C329B), UINT64_C(0x00006254291B6D56)}, {UINT64_C(0x00023469E53DE6A0), UINT64_C(0x00067B362FC9815B), UINT64_C(0x00078587A6ABE2A0), UINT64_C(0x0001E2DDC24C52FB), UINT64_C(0x0002969D891424B8)}}, {{UINT64_C(0x000DD3BE38C271BD), UINT64_C(0x00008AADD395B9D4), UINT64_C(0x00041097DCD173B3), UINT64_C(0x000377212B3119E9), UINT64_C(0x0000E67BF82272D5)}, {UINT64_C(0x0006E0BB94CF58AC), UINT64_C(0x000408F1A38E35FD), UINT64_C(0x00029EF91D563A40), UINT64_C(0x00056766929B4B6C), UINT64_C(0x0005C011DCB741EA)}}, {{UINT64_C(0x0004D1781BD13FD0), UINT64_C(0x00004CE399554755), UINT64_C(0x0003A691DA00B124), UINT64_C(0x0007283232CCD5CF), UINT64_C(0x00052A1AF5A0D851)}, {UINT64_C(0x0007BEE24A3684D7), UINT64_C(0x0005652266B2A4B5), UINT64_C(0x0000289E5435AFE4), UINT64_C(0x00015FEFBEE25260), UINT64_C(0x0007347EAFAF74A5)}}, }, { {{UINT64_C(0x000C05E66D978880), UINT64_C(0x00025A3CB58DEACC), UINT64_C(0x000220AB73235F4C), UINT64_C(0x000490D8F0DF59E2), UINT64_C(0x0007C69489BD76E1)}, {UINT64_C(0x000DBD924D1922F1), UINT64_C(0x0005833BE28C2F2F), UINT64_C(0x00035B00E5DE675F), UINT64_C(0x0002F1B35D5A7675), UINT64_C(0x0004858F6235F10C)}}, {{UINT64_C(0x0002A925A417EA11), UINT64_C(0x00056E31BC4D175E), UINT64_C(0x00038E61D9A3B411), UINT64_C(0x0003812AC6AEFFE2), UINT64_C(0x000228B12A98C126)}, {UINT64_C(0x000A7B3E73B423B7), UINT64_C(0x00066CCB2668379B), UINT64_C(0x00065B91202BD9C8), UINT64_C(0x00029ED3BE98ABF3), UINT64_C(0x000273C6405F5146)}}, {{UINT64_C(0x0005C609D0B22D03), UINT64_C(0x0000E2D4E998729A), UINT64_C(0x0004FCCD77C349D1), UINT64_C(0x00061B1D24B06088), UINT64_C(0x0004891488BBB2D2)}, {UINT64_C(0x000D2AE5BCA0967E), UINT64_C(0x00050335CABFCB67), UINT64_C(0x0000DDE04AEEADB4), UINT64_C(0x00028AEBB9AD957F), UINT64_C(0x0004D067C74CCBC3)}}, {{UINT64_C(0x000DA73F6F1AECD9), UINT64_C(0x00079BFF45612FC1), UINT64_C(0x00051867E472C99F), UINT64_C(0x0001A560565247F0), UINT64_C(0x0005BED5F4CEB10A)}, {UINT64_C(0x000C2D41FFEE613B), UINT64_C(0x00048CDF00CF0891), UINT64_C(0x0005E4502AA3852C), UINT64_C(0x000656DF596B0089), UINT64_C(0x000058D53AE7B7AC)}}, {{UINT64_C(0x0005633B9B0B6527), UINT64_C(0x0002F32BC7DCAE54), UINT64_C(0x00050DF012CC4A7F), UINT64_C(0x0001DC2DC80CAF77), UINT64_C(0x0001CC28BCE8B4B0)}, {UINT64_C(0x000352FCCCD0A46D), UINT64_C(0x00020A7D1A52DB7F), UINT64_C(0x0003E924D7CB5F73), UINT64_C(0x0005E0F520791FAC), UINT64_C(0x0006FBACACFAA219)}}, {{UINT64_C(0x0007DD39E4996ED6), UINT64_C(0x000285231A44D102), UINT64_C(0x0002FEC0C9BAA76E), UINT64_C(0x0001D126BB5F5562), UINT64_C(0x000720EC42A4351F)}, {UINT64_C(0x0002C4D634B2D745), UINT64_C(0x0007FFF3E43B229C), UINT64_C(0x0003A4E652046B82), UINT64_C(0x00007FDDB53AF519), UINT64_C(0x0003FD6A967B2866)}}, {{UINT64_C(0x000DF55AD8667E0F), UINT64_C(0x000473081C72AAFB), UINT64_C(0x0002E3E9DD231D51), UINT64_C(0x0000638B70AA3F97), UINT64_C(0x00019AE4400E8136)}, {UINT64_C(0x000E28055BC46447), UINT64_C(0x0000760478B05575), UINT64_C(0x0005AA7505F4850B), UINT64_C(0x0005BA7632BE614C), UINT64_C(0x0004C7DEAF3BFA9E)}}, {{UINT64_C(0x000F0AA2A3AA87C8), UINT64_C(0x000019FBB01D0DFF), UINT64_C(0x0006DE474AD0CB2C), UINT64_C(0x0001B2D3AFEE81F5), UINT64_C(0x0004B057E9DF9F8F)}, {UINT64_C(0x0008A62F51812859), UINT64_C(0x000096944166A90E), UINT64_C(0x0006E95AB6851BA6), UINT64_C(0x00055E80DE3635DA), UINT64_C(0x0007F910349B50D7)}}, {{UINT64_C(0x000024BD4E9A47A8), UINT64_C(0x00044E53AC4823A9), UINT64_C(0x00060A0B2A2844E1), UINT64_C(0x0006CA7FA0EC1AB9), UINT64_C(0x00079DBC726A893E)}, {UINT64_C(0x0002ECBD617D4BFD), UINT64_C(0x0000ED06A79CD79B), UINT64_C(0x0001128125B8C751), UINT64_C(0x0001A3CDAF24D9F6), UINT64_C(0x00076D2644374FB2)}}, {{UINT64_C(0x000BB495334D6735), UINT64_C(0x00048E4E318D35A5), UINT64_C(0x00065CCC9FD612CE), UINT64_C(0x00048647BF9AD225), UINT64_C(0x0001F308CFFC4D92)}, {UINT64_C(0x000993066FB5CA15), UINT64_C(0x0001024A9DBAAA76), UINT64_C(0x0001D8206F56BB3E), UINT64_C(0x000791789CB797FC), UINT64_C(0x00028DAF3708084C)}}, {{UINT64_C(0x0005F4D6A2BB2865), UINT64_C(0x000411783ABFEAA9), UINT64_C(0x000285FE4D07FDEA), UINT64_C(0x00012C2888BBAB91), UINT64_C(0x0002F0D1613CBFEA)}, {UINT64_C(0x000761DD1F118DE4), UINT64_C(0x00077D77CAB21417), UINT64_C(0x000104DF213824A8), UINT64_C(0x00019BDCA8BF3BBE), UINT64_C(0x000228E1468298F4)}}, {{UINT64_C(0x000AD4D25721FB0D), UINT64_C(0x0005BBEC9D9B8FCB), UINT64_C(0x00006F18917A24A9), UINT64_C(0x0001AF194E249824), UINT64_C(0x0001C1D002C78C5F)}, {UINT64_C(0x0005FCEA6541A6D3), UINT64_C(0x00012B0A3891C25A), UINT64_C(0x0001CA915EF579A4), UINT64_C(0x0006A1530D0CA296), UINT64_C(0x000405353E349C62)}}, {{UINT64_C(0x0007DD87797327CF), UINT64_C(0x00049A24A1519C3D), UINT64_C(0x0007E2D3194C7738), UINT64_C(0x0004ADE201A4F2B4), UINT64_C(0x0005F03F2024D796)}, {UINT64_C(0x0003A8A2BF24065F), UINT64_C(0x00028B98E4E34848), UINT64_C(0x0006CCE4BE857549), UINT64_C(0x0001BFEA602C4AB8), UINT64_C(0x00057C821F831EFA)}}, {{UINT64_C(0x0000117A2CF6FB17), UINT64_C(0x0003D763A3738149), UINT64_C(0x00074936049CAC1E), UINT64_C(0x0007F5A417605453), UINT64_C(0x0003C597E1AF5EA2)}, {UINT64_C(0x0003FBDD76DC1695), UINT64_C(0x0003C1FDAC636FA3), UINT64_C(0x0002045F1403CA79), UINT64_C(0x00034AEC03F7A823), UINT64_C(0x0000862068283073)}}, {{UINT64_C(0x00078F961971E1BB), UINT64_C(0x0007027C711936C2), UINT64_C(0x00069D7EBBB0EDBC), UINT64_C(0x0002680D032F1C61), UINT64_C(0x000615B3503A9F8A)}, {UINT64_C(0x000BC2A332182D40), UINT64_C(0x000706CF8E7CBE3C), UINT64_C(0x0004537D7373214F), UINT64_C(0x0002F1C7690B885E), UINT64_C(0x00022B7364CF32E1)}}, {{UINT64_C(0x00062087435B3F31), UINT64_C(0x0007EA9C3772E730), UINT64_C(0x0006CBD6A025839C), UINT64_C(0x0002E4060C1FA411), UINT64_C(0x00013A216F147ECC)}, {UINT64_C(0x0008E787A8F7310F), UINT64_C(0x0007C9628A16653F), UINT64_C(0x0004B18B674CF1D2), UINT64_C(0x00042C9C4340922B), UINT64_C(0x00012DD24A757E97)}}, }, { {{UINT64_C(0x000D0DAB38BAC990), UINT64_C(0x00014AB1DE778BDD), UINT64_C(0x00044AAC030B8EE5), UINT64_C(0x00035662B41D1CA8), UINT64_C(0x0003E1B41627AA05)}, {UINT64_C(0x00093D56AB528772), UINT64_C(0x00056A1F801B8BDD), UINT64_C(0x00002395FB846157), UINT64_C(0x00055F0166143AAB), UINT64_C(0x000138392048CE38)}}, {{UINT64_C(0x000629076955EF18), UINT64_C(0x0001F5903EDC6036), UINT64_C(0x0003B60DF38E1955), UINT64_C(0x0007D3533D1A0956), UINT64_C(0x000616E9E879B346)}, {UINT64_C(0x000CC4D2E5A62590), UINT64_C(0x00008DF009361C78), UINT64_C(0x00060924BE5F5C3F), UINT64_C(0x0005698777D3EB64), UINT64_C(0x0000BD31C925896B)}}, {{UINT64_C(0x000CAF98364436A6), UINT64_C(0x0001984F8F41D0B8), UINT64_C(0x0006839D748040E7), UINT64_C(0x000003647A88D1C1), UINT64_C(0x0004C9A82C439698)}, {UINT64_C(0x0009F1BB2D35D65D), UINT64_C(0x000656D1E3913D0B), UINT64_C(0x00025D8A8DB01F82), UINT64_C(0x000716C168BA26FC), UINT64_C(0x0005F7EAE6DA00DF)}}, {{UINT64_C(0x0006900AF557123B), UINT64_C(0x00048AD482A31C95), UINT64_C(0x000224E02FA0D5A3), UINT64_C(0x00049F121BC5BB9C), UINT64_C(0x0002819539DBCC91)}, {UINT64_C(0x00052AA36806E6D3), UINT64_C(0x00075D00DA560416), UINT64_C(0x00020C8D5835B70C), UINT64_C(0x00042F7FCE2FDE3F), UINT64_C(0x00018D1671FEA942)}}, {{UINT64_C(0x000126788DAF932F), UINT64_C(0x0001A2486598E1EB), UINT64_C(0x0001FA9390F89087), UINT64_C(0x000465B8FBA99789), UINT64_C(0x0001391087EBF066)}, {UINT64_C(0x000D560B9EBE0A12), UINT64_C(0x00045DF4FD156260), UINT64_C(0x0004C0F5BB97F89C), UINT64_C(0x00000C02D902AD41), UINT64_C(0x0006D6ABD8B710CB)}}, {{UINT64_C(0x000240C819BE997B), UINT64_C(0x00079702659A3FCC), UINT64_C(0x00038FF0842940FF), UINT64_C(0x0003BE2FC37F5DD7), UINT64_C(0x00055903D1BF4D50)}, {UINT64_C(0x000F7788BBCF7C69), UINT64_C(0x000314F86B17508B), UINT64_C(0x000759BA40AAA5DE), UINT64_C(0x00008F55D89B53DA), UINT64_C(0x000040CD6FEF17AC)}}, {{UINT64_C(0x000BCF2803B34AFC), UINT64_C(0x00015BCEC54183DB), UINT64_C(0x0000E63B583C38D3), UINT64_C(0x000543CEC0DD9AC8), UINT64_C(0x0006DCA0EDABDF99)}, {UINT64_C(0x0006AD8FCA4B7A84), UINT64_C(0x00000ECF4C9B4756), UINT64_C(0x0002EA049D3C90F8), UINT64_C(0x000434F3AFA9C904), UINT64_C(0x0005BB44FDA046A9)}}, {{UINT64_C(0x000456FFF38CE9AA), UINT64_C(0x0007628838C3FB34), UINT64_C(0x00047DEFE5F449AB), UINT64_C(0x0002EBE6BAC977B1), UINT64_C(0x00002629151FD158)}, {UINT64_C(0x00056D1807A2F107), UINT64_C(0x00037D8DA4EE56AD), UINT64_C(0x00064130E6C56675), UINT64_C(0x000059823CCD4BAE), UINT64_C(0x000351D4561A3074)}}, {{UINT64_C(0x000D0D5151460DBA), UINT64_C(0x00041AAD3DC6D3F7), UINT64_C(0x00030392B1D25432), UINT64_C(0x0000EC685A8F63C0), UINT64_C(0x00041E76ED18C1CB)}, {UINT64_C(0x000DC86815DBE186), UINT64_C(0x0001744C18B22C78), UINT64_C(0x0007FFF9EFE95AD9), UINT64_C(0x0005EE221F3A7F26), UINT64_C(0x0002ED76DDD0673C)}}, {{UINT64_C(0x000BE8E0AEDD873D), UINT64_C(0x0005C21AD1208B00), UINT64_C(0x00000C2B71802C36), UINT64_C(0x0003CEE802954BF7), UINT64_C(0x000212A13C9706C1)}, {UINT64_C(0x000C1F2261D59FF3), UINT64_C(0x0005FE776BC7F5CB), UINT64_C(0x00052FBD0C5EC34E), UINT64_C(0x000431CC02ACD223), UINT64_C(0x00024D9DB51E1E1F)}}, {{UINT64_C(0x0002C7CAE989C78A), UINT64_C(0x00053B83FF5723A2), UINT64_C(0x00008A8E6302E842), UINT64_C(0x00028299A28F9921), UINT64_C(0x0004216EE9364122)}, {UINT64_C(0x000C023A772C47B9), UINT64_C(0x000773C2D287BB4D), UINT64_C(0x0006DA1F1AA10221), UINT64_C(0x0003A3241B2B09FC), UINT64_C(0x00008CDE7A649B22)}}, {{UINT64_C(0x0007450C29EBCF74), UINT64_C(0x0004439DBEEB77A6), UINT64_C(0x000343C10D713C0F), UINT64_C(0x00059B68D7FEB70F), UINT64_C(0x00034672B08F9529)}, {UINT64_C(0x000EB776F7FE244B), UINT64_C(0x0000A1574415007C), UINT64_C(0x0002E545671DDCC2), UINT64_C(0x0000C8F00787B92C), UINT64_C(0x0004CCFCC6C1C843)}}, {{UINT64_C(0x000752C74FA6089E), UINT64_C(0x00043769AF9D8146), UINT64_C(0x00076A2097C10ACD), UINT64_C(0x00021E5FD7934DFC), UINT64_C(0x00044CD453C591F0)}, {UINT64_C(0x0005D742FEFE529A), UINT64_C(0x00052812A2132236), UINT64_C(0x00063A0FF82BAAA3), UINT64_C(0x0003821492FA5799), UINT64_C(0x0006C3D3D91E5995)}}, {{UINT64_C(0x0007F5965BB5061A), UINT64_C(0x00033DD3B61A3ACD), UINT64_C(0x0000ED9A94EAF477), UINT64_C(0x00005E2154735C2D), UINT64_C(0x000310C8E2DC1FA9)}, {UINT64_C(0x0009C12CA0FAB3FE), UINT64_C(0x000645039E999A55), UINT64_C(0x00027E092D9877A3), UINT64_C(0x000234C26B632A1C), UINT64_C(0x0001112B3978BBB5)}}, {{UINT64_C(0x000643EF08EEDFDA), UINT64_C(0x00041557FC7F909E), UINT64_C(0x0007D194BE89C579), UINT64_C(0x00013E7D0EB4169D), UINT64_C(0x00068C97C0B130AB)}, {UINT64_C(0x0005670E75F30FC3), UINT64_C(0x00012ABE1F6F59DB), UINT64_C(0x00031C4929892E23), UINT64_C(0x00067C5926EE61D5), UINT64_C(0x0005EA09499EB737)}}, {{UINT64_C(0x00068E5711D3CC63), UINT64_C(0x000355284FF4EE0B), UINT64_C(0x0002ED6C094527F4), UINT64_C(0x00018FD4F583BBBD), UINT64_C(0x0007E732542EB790)}, {UINT64_C(0x000FBD7D6A2B1252), UINT64_C(0x0000D8B42A24E7BC), UINT64_C(0x00064FE14876840C), UINT64_C(0x000128C33F1AE9C6), UINT64_C(0x00047654D530ABA4)}}, }, { {{UINT64_C(0x0003BD937849F59D), UINT64_C(0x000063606C7698D1), UINT64_C(0x00054B2A0FD2FD04), UINT64_C(0x00029E53F79F11A6), UINT64_C(0x000555BAED07F9C6)}, {UINT64_C(0x0002D0A2306D73CE), UINT64_C(0x00029DFF85DCB561), UINT64_C(0x0000C1C9000DBCD2), UINT64_C(0x00021A0F680519E0), UINT64_C(0x00001BC10E993DB9)}}, {{UINT64_C(0x00010A2BB8D581B9), UINT64_C(0x00043123D8B4D328), UINT64_C(0x0003D3F6518C92CF), UINT64_C(0x0005EF4037756EF4), UINT64_C(0x00023620C43DD673)}, {UINT64_C(0x000758B33A3A641C), UINT64_C(0x000201801C92394E), UINT64_C(0x0007381BD7F0EF26), UINT64_C(0x0007C1BDA98CF272), UINT64_C(0x000446E3CF2318B9)}}, {{UINT64_C(0x000CAA4017FCF7B6), UINT64_C(0x0005167AEA33B820), UINT64_C(0x000455C15B6B0603), UINT64_C(0x0003795DAA8317AF), UINT64_C(0x0000A7CFFBD6A356)}, {UINT64_C(0x000CDF21A7146CD4), UINT64_C(0x0005D9C22C0B9910), UINT64_C(0x00021D488F79ACFF), UINT64_C(0x0005857D2A8817A3), UINT64_C(0x000418B1F899B332)}}, {{UINT64_C(0x000F3021477826E7), UINT64_C(0x0001E04BD00E11CF), UINT64_C(0x0006EA82EE2CF354), UINT64_C(0x000576E72ADFAF95), UINT64_C(0x0001D0D5496B0BCA)}, {UINT64_C(0x000D490F0DD8482A), UINT64_C(0x00049D8CFF1AC3F4), UINT64_C(0x0003460BFA5563D1), UINT64_C(0x00055034532A88B0), UINT64_C(0x0006A47213652104)}}, {{UINT64_C(0x00011F911810E70C), UINT64_C(0x0002D6B48D33D172), UINT64_C(0x00034AB16D9AF3D1), UINT64_C(0x000561679C3033DD), UINT64_C(0x000357CCE137A82D)}, {UINT64_C(0x000B31F0EF17F79E), UINT64_C(0x0006EA6CD3094B9C), UINT64_C(0x0000B35F3599DBB1), UINT64_C(0x0007F52CCB68649E), UINT64_C(0x0005046AE5A46633)}}, {{UINT64_C(0x0006B212836316B9), UINT64_C(0x00055299B1C49A9A), UINT64_C(0x000705EEFD2620E8), UINT64_C(0x00046DC053B6EE87), UINT64_C(0x0007030884C7FF32)}, {UINT64_C(0x0006B7B8E9DC79C4), UINT64_C(0x00013A8B2116229F), UINT64_C(0x0004292D01383268), UINT64_C(0x000265411FE1DFD7), UINT64_C(0x00051B40396F7F2D)}}, {{UINT64_C(0x00046D30B8D0B765), UINT64_C(0x000447051A08754C), UINT64_C(0x00002C393E136A77), UINT64_C(0x000092C51BEF8B5B), UINT64_C(0x00072A82D90D0C54)}, {UINT64_C(0x000E14BC9577FA35), UINT64_C(0x0002613D84E90001), UINT64_C(0x0007DCD817FC6B73), UINT64_C(0x0004CCB07A61114E), UINT64_C(0x000128DDAE580395)}}, {{UINT64_C(0x0000A65F62B5B469), UINT64_C(0x0001449CDF3BA068), UINT64_C(0x0002B322E44F8B5C), UINT64_C(0x000637CD9DAA7CD9), UINT64_C(0x0002826D20F6B6E0)}, {UINT64_C(0x000935F7AE7CE72C), UINT64_C(0x000427C2F3C89114), UINT64_C(0x0002BC82197EEC1E), UINT64_C(0x0001D3AD81C2BB09), UINT64_C(0x000113864CB480E5)}}, {{UINT64_C(0x000DF31256D0FA32), UINT64_C(0x000658162F4C433B), UINT64_C(0x000357078BBD48E7), UINT64_C(0x0005D6C0B50101C9), UINT64_C(0x0007F2F4FDFD19FA)}, {UINT64_C(0x0008F60FFAC3108A), UINT64_C(0x000301C7448AFA71), UINT64_C(0x00015EB2F2A78BEF), UINT64_C(0x00017F839739C650), UINT64_C(0x0000C63A5C9B4465)}}, {{UINT64_C(0x000D2864DE66EFDB), UINT64_C(0x00019367AA93908D), UINT64_C(0x00042D4DF0EA2C9B), UINT64_C(0x00063DABB09387B7), UINT64_C(0x00041D7E1B815D0C)}, {UINT64_C(0x00094DF2A88CE7E3), UINT64_C(0x0003E4681539CE25), UINT64_C(0x00065386E54F328E), UINT64_C(0x00045204F7EB68FF), UINT64_C(0x000152316128558C)}}, {{UINT64_C(0x00085DD706DFBF1A), UINT64_C(0x0001CD3A8A2F3283), UINT64_C(0x000389177C3B129F), UINT64_C(0x000266A3AF43485D), UINT64_C(0x0004343000537F1E)}, {UINT64_C(0x0004EDE550CB3A82), UINT64_C(0x0007920ADCB60EE2), UINT64_C(0x000508D86EC186E3), UINT64_C(0x000459BB98AE049A), UINT64_C(0x0003C8621E0C7957)}}, {{UINT64_C(0x0003F7B355181E78), UINT64_C(0x00034B66A3DA0C48), UINT64_C(0x000075B38F80B96F), UINT64_C(0x0001E51DE76B5138), UINT64_C(0x00024C9C3D9E4494)}, {UINT64_C(0x0003623DEB850A90), UINT64_C(0x0004C35B7E8127CD), UINT64_C(0x000657A5BF58646C), UINT64_C(0x0005C440DB594283), UINT64_C(0x00049678D88DAA4E)}}, {{UINT64_C(0x000F586E6CF04B0C), UINT64_C(0x000056B294784ED4), UINT64_C(0x0006ACFA4C41FBCA), UINT64_C(0x0000F85BA1E98BC9), UINT64_C(0x0007BE95FD49B8CB)}, {UINT64_C(0x000C7F0AEF19999C), UINT64_C(0x000710B40227E43B), UINT64_C(0x0005D2D5948B666C), UINT64_C(0x0007C2DEF57822E5), UINT64_C(0x0005E9DD0BCA2B4C)}}, {{UINT64_C(0x0004CD7C5A1F0474), UINT64_C(0x000703184E03D953), UINT64_C(0x00008847256A3A0A), UINT64_C(0x00023256A8F362CE), UINT64_C(0x0006FA0A053C19F6)}, {UINT64_C(0x0004FDA4EC4F6E5A), UINT64_C(0x0000EAAF716D7474), UINT64_C(0x00031B1D9BEEA00A), UINT64_C(0x0006E77CC7B43BEA), UINT64_C(0x00068B7FE52A5418)}}, {{UINT64_C(0x000182C3893C913F), UINT64_C(0x0005BD035564DDCE), UINT64_C(0x0000EFB789EEEA1D), UINT64_C(0x0002FD7231BCE945), UINT64_C(0x0001E172F821BFD8)}, {UINT64_C(0x000B79C4B183EE97), UINT64_C(0x0005AA4E66EB8680), UINT64_C(0x0003F0999EA39964), UINT64_C(0x0004CCC4C10842F5), UINT64_C(0x0001D9639116EB1B)}}, {{UINT64_C(0x0001F4CFF4A6524D), UINT64_C(0x00077A87CA5D36AB), UINT64_C(0x00079C9CFA901FD4), UINT64_C(0x0007141692444638), UINT64_C(0x00050A52B8F11178)}, {UINT64_C(0x000606812D21A754), UINT64_C(0x000006CCE87ECEFD), UINT64_C(0x00070CF16EA53DB0), UINT64_C(0x00064231A76B8461), UINT64_C(0x0001CE749122C65F)}}, }, { {{UINT64_C(0x0007BB82D3C5B684), UINT64_C(0x000665B3553FDD82), UINT64_C(0x000622B712414BE5), UINT64_C(0x00068A66023FD004), UINT64_C(0x0002C4F1C507E8E9)}, {UINT64_C(0x00067B5C49251A27), UINT64_C(0x000767A5FEFDECEA), UINT64_C(0x0006D5127E924F9E), UINT64_C(0x0001FAEF3DFFBBB1), UINT64_C(0x00043D69E32FAD1C)}}, {{UINT64_C(0x00034E704BF54825), UINT64_C(0x00049BDB19E6DC0E), UINT64_C(0x0007F28264FB6501), UINT64_C(0x00038880B959C688), UINT64_C(0x0004F0A3D37E757E)}, {UINT64_C(0x0003CAC81F94C40C), UINT64_C(0x00058393688FFF80), UINT64_C(0x000347B9E5A5C961), UINT64_C(0x0007E8D8D772B424), UINT64_C(0x0006C42A57B3ABF7)}}, {{UINT64_C(0x00097FC2E68C8CCF), UINT64_C(0x000475CEE29F1E8F), UINT64_C(0x000298E28356667E), UINT64_C(0x0000949DE8DE0D9F), UINT64_C(0x00011BD78F109CE1)}, {UINT64_C(0x0009593D9CE46006), UINT64_C(0x00057E6F9033002A), UINT64_C(0x0005DEF40003F782), UINT64_C(0x00018A1E90F301F2), UINT64_C(0x0001C9DF45910326)}}, {{UINT64_C(0x000C11204B142486), UINT64_C(0x0001DE83CFF6A309), UINT64_C(0x00028E98BD4FBE39), UINT64_C(0x0007FF81C2722301), UINT64_C(0x0004E8EC07E39C5C)}, {UINT64_C(0x0001EACFEACEA3A2), UINT64_C(0x000121B16B6B2243), UINT64_C(0x00028A37B9BD6CDB), UINT64_C(0x00021A158458C7AE), UINT64_C(0x000633B208185C49)}}, {{UINT64_C(0x0000EFDE020DF8D9), UINT64_C(0x0003D774591FDE3B), UINT64_C(0x0007A513E2E25CA3), UINT64_C(0x0005E307A27F1A86), UINT64_C(0x000526839795FF69)}, {UINT64_C(0x0005D1C8482D8549), UINT64_C(0x0006DFD24C6F2ED5), UINT64_C(0x0003185AD6610EDB), UINT64_C(0x00011600733CB20B), UINT64_C(0x0000561D0593758D)}}, {{UINT64_C(0x000E7303812E9251), UINT64_C(0x00060FAA9640AC68), UINT64_C(0x0006990E9E84EAAB), UINT64_C(0x00013205597A21E0), UINT64_C(0x0001B36994783E3B)}, {UINT64_C(0x0005F117AC96FFD5), UINT64_C(0x000726340518125B), UINT64_C(0x0000B4C646458726), UINT64_C(0x00030611FCE4A03F), UINT64_C(0x00024DA1C03F5846)}}, {{UINT64_C(0x000A7E110A8A2315), UINT64_C(0x0007B5EFABE2F3DF), UINT64_C(0x0006DCE7CEBCDB02), UINT64_C(0x00058F4E8DC9C7E1), UINT64_C(0x0007EF25DE94461B)}, {UINT64_C(0x000A9AD49C0F6E54), UINT64_C(0x0003CBF884AA9599), UINT64_C(0x0006A88C60115D4E), UINT64_C(0x0002C8D6CB6A4B63), UINT64_C(0x0005526619B4F14F)}}, {{UINT64_C(0x000A7E10BA3F6E66), UINT64_C(0x0004F52AE281A0EC), UINT64_C(0x0003476B97096769), UINT64_C(0x00011AD428A9FA42), UINT64_C(0x0002B4544F28575F)}, {UINT64_C(0x0006446F85BE14E9), UINT64_C(0x0001E6FBEEDFAD52), UINT64_C(0x000581F0641BDAA7), UINT64_C(0x0006637991AE7F02), UINT64_C(0x00027E73BCC450A7)}}, {{UINT64_C(0x0004837DF05B910E), UINT64_C(0x0002779AC207231D), UINT64_C(0x0005394BB62F9685), UINT64_C(0x0006AC7DB912D183), UINT64_C(0x0006DB2D56A1A285)}, {UINT64_C(0x00050EB1AA8E171C), UINT64_C(0x0006CB734D7871D7), UINT64_C(0x0003489E3A49926A), UINT64_C(0x0007A7AF3C7269B9), UINT64_C(0x000506FB61E5D9D0)}}, {{UINT64_C(0x000D3E9FBCB8E76E), UINT64_C(0x0006BC0CE3973127), UINT64_C(0x0003FEA5962A9166), UINT64_C(0x00010E5CB8B98D3B), UINT64_C(0x0003D71F40DFE3FD)}, {UINT64_C(0x00066B6980E59640), UINT64_C(0x0004772E1BF69616), UINT64_C(0x000382F325F1D096), UINT64_C(0x0000E79B55D3B181), UINT64_C(0x0000E77D96C328F4)}}, {{UINT64_C(0x000349B94216387D), UINT64_C(0x0004B7A80220D9FD), UINT64_C(0x0006912F408CE0C6), UINT64_C(0x000539E83F596047), UINT64_C(0x0004834100723280)}, {UINT64_C(0x000C9832C2F9A7EC), UINT64_C(0x00048534033E2CC1), UINT64_C(0x00052157F1129FA5), UINT64_C(0x00032B2C4930BA32), UINT64_C(0x0007D34399534663)}}, {{UINT64_C(0x000C589FC644CABA), UINT64_C(0x0003362B2512BAEF), UINT64_C(0x0000746159FCE3F0), UINT64_C(0x00040AAF0341039E), UINT64_C(0x0006BAFD459922FC)}, {UINT64_C(0x000A089C7902EF38), UINT64_C(0x0007C692F2F9CE42), UINT64_C(0x00026F314BA444B4), UINT64_C(0x00070534A8C26791), UINT64_C(0x0006A5CF6D52A467)}}, {{UINT64_C(0x00015CB92041529B), UINT64_C(0x00049F22868AF3D0), UINT64_C(0x0005F3105D324FC9), UINT64_C(0x0001AB468A5313F8), UINT64_C(0x00073BCEBFF704D3)}, {UINT64_C(0x000CFCBCD02F5CBC), UINT64_C(0x000766C24804981A), UINT64_C(0x000181E80B278C77), UINT64_C(0x0006CB8FBE114DA9), UINT64_C(0x00057C201DD17423)}}, {{UINT64_C(0x00047BCA3EF2D278), UINT64_C(0x00009EAE1A7C039D), UINT64_C(0x0001EEDA0A098A7E), UINT64_C(0x0003B5B1C05F89EE), UINT64_C(0x0005D3332A3A6013)}, {UINT64_C(0x0006490FECA06CF9), UINT64_C(0x0003EE7D19213955), UINT64_C(0x0000A5B59824F8E4), UINT64_C(0x0004F3FDCFB627E2), UINT64_C(0x00056F87225E3ED3)}}, {{UINT64_C(0x00001B52B2B0F1BD), UINT64_C(0x0001AAD95A0BF6D7), UINT64_C(0x000529216F79E19E), UINT64_C(0x00014CF4A2BF207B), UINT64_C(0x000236F709D78288)}, {UINT64_C(0x000EED40ABFA1D8C), UINT64_C(0x0006115A9FA586E3), UINT64_C(0x0005AE4248864CF2), UINT64_C(0x000343CBDCFD5D69), UINT64_C(0x000055F0CDAC28BE)}}, {{UINT64_C(0x000094B3C9C54CAB), UINT64_C(0x00034BE83CF2DCAA), UINT64_C(0x000798965804267E), UINT64_C(0x0001968C2A055D56), UINT64_C(0x000729AD776CB05C)}, {UINT64_C(0x0008022B51AE8A66), UINT64_C(0x0004CB32422B0432), UINT64_C(0x00069790787ABB62), UINT64_C(0x0002F124051391FC), UINT64_C(0x0003C38C28CBE53C)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 6 * ASSERT: a = -3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(t0, X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(t1, Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(t2, Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t3, X, Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, t3, t3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t4, Y, Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, X, Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, b, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(X3, X3, t3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, t2, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t2, t2, t3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, b, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Z3, Z3, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Z3, Z3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, t3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, t0, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t0, t3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t0, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t0, t4, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, t0, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, Z3); } /*- * out1 = (arg1 == 0) ? 0 : nz * NB: this is not a "mod p equiv" 0, but literal 0 * NB: this is not a real Fiat function, just named that way for consistency. */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_nonzero( limb_t *out1, const fe_t arg1) { limb_t x1 = 0; int i; for (i = 0; i < LIMB_CNT; i++) x1 |= arg1[i]; *out1 = x1; } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed.op3 * https://eprint.iacr.org/2015/1060 Alg 5 * ASSERT: a = -3 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t4, Y2, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, t4, Y1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, X2, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, Y3, X1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, b, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, Z1, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t2, t1, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, t1); /* if P is inf, throw all that away and take Q */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(R->X, nz, Q->X, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 4 * ASSERT: a = -3 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t2, Z1, Z2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, Y1, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t5, Y2, Z2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t5, t1, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, X1, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, X2, Z2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(X3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, t0, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, b, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, t2, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t2, t1, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, t1); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[32], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 32) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[52], const unsigned char in[32]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 51; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[257], const unsigned char in[32]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 257; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[32], const unsigned char b[32], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[257] = {0}; int8_t bnaf[257] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 256; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[51] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 50; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[32]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 2; i >= 0; i--) { for (j = 0; i != 2 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 19; j++) { if (j * 3 + i > 51) continue; d = rnaf[j * 3 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[32], unsigned char outy[32], const unsigned char a[32], const unsigned char b[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes(P.Y, iny); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes(P.Y, iny); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[32] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_GostR3410_2001_CryptoPro_A_ParamSet( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(n, b_n, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_GostR3410_2001_CryptoPro_A_ParamSet(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_GostR3410_2001_CryptoPro_A_ParamSet(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 32) != 32) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #else /* __SIZEOF_INT128__ */ #include #include #define LIMB_BITS 32 #define LIMB_CNT 11 /* Field elements */ typedef uint32_t fe_t[LIMB_CNT]; typedef uint32_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_GOSTR3410_2001_CRYPTOPRO_A_PARAMSET_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) #define fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(c, a, b) \ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_add(c, a, b); \ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry(c, c) #define fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(c, a, b) \ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_sub(c, a, b); \ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry(c, c) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: unsaturated_solinas --static --use-value-barrier id_GostR3410_2001_CryptoPro_A_ParamSet 32 '(auto)' '2^256 - 617' */ /* curve description: id_GostR3410_2001_CryptoPro_A_ParamSet */ /* machine_wordsize = 32 (from "32") */ /* requested operations: (all) */ /* n = 11 (from "(auto)") */ /* s-c = 2^256 - [(1, 617)] (from "2^256 - 617") */ /* tight_bounds_multiplier = 1 (from "") */ /* */ /* Computed values: */ /* carry_chain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1] */ /* eval z = z[0] + (z[1] << 24) + (z[2] << 47) + (z[3] << 70) + (z[4] << 94) + (z[5] << 117) + (z[6] << 140) + (z[7] << 163) + (z[8] << 187) + (z[9] << 210) + (z[10] << 233) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ /* balance = [0x1fffb2e, 0xfffffe, 0xfffffe, 0x1fffffe, 0xfffffe, 0xfffffe, 0xfffffe, 0x1fffffe, 0xfffffe, 0xfffffe, 0xfffffe] */ #include typedef unsigned char fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1; typedef signed char fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_GOSTR3410_2001_CRYPTOPRO_A_PARAMSET_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint32_t fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_value_barrier_u32(uint32_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_value_barrier_u32(x) (x) #endif /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u24 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^24 * out2 = ⌊(arg1 + arg2 + arg3) / 2^24⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffff] * arg3: [0x0 ~> 0xffffff] * Output Bounds: * out1: [0x0 ~> 0xffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u24( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint32_t x1; uint32_t x2; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT32_C(0xffffff)); x3 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x1 >> 24); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u24 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^24 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^24⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffff] * arg3: [0x0 ~> 0xffffff] * Output Bounds: * out1: [0x0 ~> 0xffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u24( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { int32_t x1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1 x2; uint32_t x3; x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); x2 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1)(x1 >> 24); x3 = (x1 & UINT32_C(0xffffff)); *out1 = x3; *out2 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(0x0 - x2); } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u23 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^23 * out2 = ⌊(arg1 + arg2 + arg3) / 2^23⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7fffff] * arg3: [0x0 ~> 0x7fffff] * Output Bounds: * out1: [0x0 ~> 0x7fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u23( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint32_t x1; uint32_t x2; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT32_C(0x7fffff)); x3 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x1 >> 23); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u23 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^23 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^23⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7fffff] * arg3: [0x0 ~> 0x7fffff] * Output Bounds: * out1: [0x0 ~> 0x7fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u23( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { int32_t x1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1 x2; uint32_t x3; x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); x2 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1)(x1 >> 23); x3 = (x1 & UINT32_C(0x7fffff)); *out1 = x3; *out2 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(0x0 - x2); } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x1; uint32_t x2; uint32_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_int1)(0x0 - x1) & UINT32_C(0xffffffff)); x3 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_value_barrier_u32(x2) & arg3) | (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_value_barrier_u32((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul multiplies two field elements and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] * arg2: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] * Output Bounds: * out1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul( uint32_t out1[11], const uint32_t arg1[11], const uint32_t arg2[11]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint64_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint64_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; uint64_t x110; uint64_t x111; uint64_t x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint32_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; uint64_t x129; uint64_t x130; uint64_t x131; uint64_t x132; uint64_t x133; uint64_t x134; uint64_t x135; uint64_t x136; uint32_t x137; uint64_t x138; uint64_t x139; uint32_t x140; uint64_t x141; uint64_t x142; uint32_t x143; uint64_t x144; uint64_t x145; uint32_t x146; uint64_t x147; uint64_t x148; uint32_t x149; uint64_t x150; uint64_t x151; uint32_t x152; uint64_t x153; uint64_t x154; uint32_t x155; uint64_t x156; uint64_t x157; uint32_t x158; uint64_t x159; uint64_t x160; uint32_t x161; uint64_t x162; uint32_t x163; uint32_t x164; uint64_t x165; uint64_t x166; uint32_t x167; uint32_t x168; uint32_t x169; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x170; uint32_t x171; uint32_t x172; x1 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[10]))); x2 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[9]))); x3 = (UINT16_C(0x269) * (((uint64_t)(arg1[10]) * (arg2[8])) * 0x2)); x4 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[7]))); x5 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[6]))); x6 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[5]))); x7 = (UINT16_C(0x269) * (((uint64_t)(arg1[10]) * (arg2[4])) * 0x2)); x8 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[3]))); x9 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[2]))); x10 = (UINT16_C(0x269) * (((uint64_t)(arg1[10]) * (arg2[1])) * 0x2)); x11 = (UINT16_C(0x269) * ((uint64_t)(arg1[9]) * (arg2[10]))); x12 = (UINT16_C(0x269) * (((uint64_t)(arg1[9]) * (arg2[9])) * 0x2)); x13 = (UINT16_C(0x269) * (((uint64_t)(arg1[9]) * (arg2[8])) * 0x2)); x14 = (UINT16_C(0x269) * ((uint64_t)(arg1[9]) * (arg2[7]))); x15 = (UINT16_C(0x269) * ((uint64_t)(arg1[9]) * (arg2[6]))); x16 = (UINT16_C(0x269) * (((uint64_t)(arg1[9]) * (arg2[5])) * 0x2)); x17 = (UINT16_C(0x269) * (((uint64_t)(arg1[9]) * (arg2[4])) * 0x2)); x18 = (UINT16_C(0x269) * ((uint64_t)(arg1[9]) * (arg2[3]))); x19 = (UINT16_C(0x269) * (((uint64_t)(arg1[9]) * (arg2[2])) * 0x2)); x20 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[10])) * 0x2)); x21 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[9])) * 0x2)); x22 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[8])) * 0x2)); x23 = (UINT16_C(0x269) * ((uint64_t)(arg1[8]) * (arg2[7]))); x24 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[6])) * 0x2)); x25 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[5])) * 0x2)); x26 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[4])) * 0x2)); x27 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[3])) * 0x2)); x28 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[10]))); x29 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[9]))); x30 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[8]))); x31 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[7]))); x32 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[6]))); x33 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[5]))); x34 = (UINT16_C(0x269) * (((uint64_t)(arg1[7]) * (arg2[4])) * 0x2)); x35 = (UINT16_C(0x269) * ((uint64_t)(arg1[6]) * (arg2[10]))); x36 = (UINT16_C(0x269) * ((uint64_t)(arg1[6]) * (arg2[9]))); x37 = (UINT16_C(0x269) * (((uint64_t)(arg1[6]) * (arg2[8])) * 0x2)); x38 = (UINT16_C(0x269) * ((uint64_t)(arg1[6]) * (arg2[7]))); x39 = (UINT16_C(0x269) * ((uint64_t)(arg1[6]) * (arg2[6]))); x40 = (UINT16_C(0x269) * (((uint64_t)(arg1[6]) * (arg2[5])) * 0x2)); x41 = (UINT16_C(0x269) * ((uint64_t)(arg1[5]) * (arg2[10]))); x42 = (UINT16_C(0x269) * (((uint64_t)(arg1[5]) * (arg2[9])) * 0x2)); x43 = (UINT16_C(0x269) * (((uint64_t)(arg1[5]) * (arg2[8])) * 0x2)); x44 = (UINT16_C(0x269) * ((uint64_t)(arg1[5]) * (arg2[7]))); x45 = (UINT16_C(0x269) * (((uint64_t)(arg1[5]) * (arg2[6])) * 0x2)); x46 = (UINT16_C(0x269) * (((uint64_t)(arg1[4]) * (arg2[10])) * 0x2)); x47 = (UINT16_C(0x269) * (((uint64_t)(arg1[4]) * (arg2[9])) * 0x2)); x48 = (UINT16_C(0x269) * (((uint64_t)(arg1[4]) * (arg2[8])) * 0x2)); x49 = (UINT16_C(0x269) * (((uint64_t)(arg1[4]) * (arg2[7])) * 0x2)); x50 = (UINT16_C(0x269) * ((uint64_t)(arg1[3]) * (arg2[10]))); x51 = (UINT16_C(0x269) * ((uint64_t)(arg1[3]) * (arg2[9]))); x52 = (UINT16_C(0x269) * (((uint64_t)(arg1[3]) * (arg2[8])) * 0x2)); x53 = (UINT16_C(0x269) * ((uint64_t)(arg1[2]) * (arg2[10]))); x54 = (UINT16_C(0x269) * (((uint64_t)(arg1[2]) * (arg2[9])) * 0x2)); x55 = (UINT16_C(0x269) * (((uint64_t)(arg1[1]) * (arg2[10])) * 0x2)); x56 = ((uint64_t)(arg1[10]) * (arg2[0])); x57 = ((uint64_t)(arg1[9]) * ((arg2[1]) * 0x2)); x58 = ((uint64_t)(arg1[9]) * (arg2[0])); x59 = ((uint64_t)(arg1[8]) * ((arg2[2]) * 0x2)); x60 = ((uint64_t)(arg1[8]) * ((arg2[1]) * 0x2)); x61 = ((uint64_t)(arg1[8]) * (arg2[0])); x62 = ((uint64_t)(arg1[7]) * (arg2[3])); x63 = ((uint64_t)(arg1[7]) * (arg2[2])); x64 = ((uint64_t)(arg1[7]) * (arg2[1])); x65 = ((uint64_t)(arg1[7]) * (arg2[0])); x66 = ((uint64_t)(arg1[6]) * ((arg2[4]) * 0x2)); x67 = ((uint64_t)(arg1[6]) * (arg2[3])); x68 = ((uint64_t)(arg1[6]) * (arg2[2])); x69 = ((uint64_t)(arg1[6]) * ((arg2[1]) * 0x2)); x70 = ((uint64_t)(arg1[6]) * (arg2[0])); x71 = ((uint64_t)(arg1[5]) * ((arg2[5]) * 0x2)); x72 = ((uint64_t)(arg1[5]) * ((arg2[4]) * 0x2)); x73 = ((uint64_t)(arg1[5]) * (arg2[3])); x74 = ((uint64_t)(arg1[5]) * ((arg2[2]) * 0x2)); x75 = ((uint64_t)(arg1[5]) * ((arg2[1]) * 0x2)); x76 = ((uint64_t)(arg1[5]) * (arg2[0])); x77 = ((uint64_t)(arg1[4]) * ((arg2[6]) * 0x2)); x78 = ((uint64_t)(arg1[4]) * ((arg2[5]) * 0x2)); x79 = ((uint64_t)(arg1[4]) * ((arg2[4]) * 0x2)); x80 = ((uint64_t)(arg1[4]) * ((arg2[3]) * 0x2)); x81 = ((uint64_t)(arg1[4]) * ((arg2[2]) * 0x2)); x82 = ((uint64_t)(arg1[4]) * ((arg2[1]) * 0x2)); x83 = ((uint64_t)(arg1[4]) * (arg2[0])); x84 = ((uint64_t)(arg1[3]) * (arg2[7])); x85 = ((uint64_t)(arg1[3]) * (arg2[6])); x86 = ((uint64_t)(arg1[3]) * (arg2[5])); x87 = ((uint64_t)(arg1[3]) * ((arg2[4]) * 0x2)); x88 = ((uint64_t)(arg1[3]) * (arg2[3])); x89 = ((uint64_t)(arg1[3]) * (arg2[2])); x90 = ((uint64_t)(arg1[3]) * (arg2[1])); x91 = ((uint64_t)(arg1[3]) * (arg2[0])); x92 = ((uint64_t)(arg1[2]) * ((arg2[8]) * 0x2)); x93 = ((uint64_t)(arg1[2]) * (arg2[7])); x94 = ((uint64_t)(arg1[2]) * (arg2[6])); x95 = ((uint64_t)(arg1[2]) * ((arg2[5]) * 0x2)); x96 = ((uint64_t)(arg1[2]) * ((arg2[4]) * 0x2)); x97 = ((uint64_t)(arg1[2]) * (arg2[3])); x98 = ((uint64_t)(arg1[2]) * (arg2[2])); x99 = ((uint64_t)(arg1[2]) * ((arg2[1]) * 0x2)); x100 = ((uint64_t)(arg1[2]) * (arg2[0])); x101 = ((uint64_t)(arg1[1]) * ((arg2[9]) * 0x2)); x102 = ((uint64_t)(arg1[1]) * ((arg2[8]) * 0x2)); x103 = ((uint64_t)(arg1[1]) * (arg2[7])); x104 = ((uint64_t)(arg1[1]) * ((arg2[6]) * 0x2)); x105 = ((uint64_t)(arg1[1]) * ((arg2[5]) * 0x2)); x106 = ((uint64_t)(arg1[1]) * ((arg2[4]) * 0x2)); x107 = ((uint64_t)(arg1[1]) * (arg2[3])); x108 = ((uint64_t)(arg1[1]) * ((arg2[2]) * 0x2)); x109 = ((uint64_t)(arg1[1]) * ((arg2[1]) * 0x2)); x110 = ((uint64_t)(arg1[1]) * (arg2[0])); x111 = ((uint64_t)(arg1[0]) * (arg2[10])); x112 = ((uint64_t)(arg1[0]) * (arg2[9])); x113 = ((uint64_t)(arg1[0]) * (arg2[8])); x114 = ((uint64_t)(arg1[0]) * (arg2[7])); x115 = ((uint64_t)(arg1[0]) * (arg2[6])); x116 = ((uint64_t)(arg1[0]) * (arg2[5])); x117 = ((uint64_t)(arg1[0]) * (arg2[4])); x118 = ((uint64_t)(arg1[0]) * (arg2[3])); x119 = ((uint64_t)(arg1[0]) * (arg2[2])); x120 = ((uint64_t)(arg1[0]) * (arg2[1])); x121 = ((uint64_t)(arg1[0]) * (arg2[0])); x122 = (x121 + (x55 + (x54 + (x52 + (x49 + (x45 + (x40 + (x34 + (x27 + (x19 + x10)))))))))); x123 = (x122 >> 24); x124 = (uint32_t)(x122 & UINT32_C(0xffffff)); x125 = (x111 + (x101 + (x92 + (x84 + (x77 + (x71 + (x66 + (x62 + (x59 + (x57 + x56)))))))))); x126 = (x112 + (x102 + (x93 + (x85 + (x78 + (x72 + (x67 + (x63 + (x60 + (x58 + x1)))))))))); x127 = (x113 + (x103 + (x94 + (x86 + (x79 + (x73 + (x68 + (x64 + (x61 + (x11 + x2)))))))))); x128 = (x114 + (x104 + (x95 + (x87 + (x80 + (x74 + (x69 + (x65 + (x20 + (x12 + x3)))))))))); x129 = (x115 + (x105 + (x96 + (x88 + (x81 + (x75 + (x70 + (x28 + (x21 + (x13 + x4)))))))))); x130 = (x116 + (x106 + (x97 + (x89 + (x82 + (x76 + (x35 + (x29 + (x22 + (x14 + x5)))))))))); x131 = (x117 + (x107 + (x98 + (x90 + (x83 + (x41 + (x36 + (x30 + (x23 + (x15 + x6)))))))))); x132 = (x118 + (x108 + (x99 + (x91 + (x46 + (x42 + (x37 + (x31 + (x24 + (x16 + x7)))))))))); x133 = (x119 + (x109 + (x100 + (x50 + (x47 + (x43 + (x38 + (x32 + (x25 + (x17 + x8)))))))))); x134 = (x120 + (x110 + (x53 + (x51 + (x48 + (x44 + (x39 + (x33 + (x26 + (x18 + x9)))))))))); x135 = (x123 + x134); x136 = (x135 >> 23); x137 = (uint32_t)(x135 & UINT32_C(0x7fffff)); x138 = (x136 + x133); x139 = (x138 >> 23); x140 = (uint32_t)(x138 & UINT32_C(0x7fffff)); x141 = (x139 + x132); x142 = (x141 >> 24); x143 = (uint32_t)(x141 & UINT32_C(0xffffff)); x144 = (x142 + x131); x145 = (x144 >> 23); x146 = (uint32_t)(x144 & UINT32_C(0x7fffff)); x147 = (x145 + x130); x148 = (x147 >> 23); x149 = (uint32_t)(x147 & UINT32_C(0x7fffff)); x150 = (x148 + x129); x151 = (x150 >> 23); x152 = (uint32_t)(x150 & UINT32_C(0x7fffff)); x153 = (x151 + x128); x154 = (x153 >> 24); x155 = (uint32_t)(x153 & UINT32_C(0xffffff)); x156 = (x154 + x127); x157 = (x156 >> 23); x158 = (uint32_t)(x156 & UINT32_C(0x7fffff)); x159 = (x157 + x126); x160 = (x159 >> 23); x161 = (uint32_t)(x159 & UINT32_C(0x7fffff)); x162 = (x160 + x125); x163 = (uint32_t)(x162 >> 23); x164 = (uint32_t)(x162 & UINT32_C(0x7fffff)); x165 = ((uint64_t)UINT16_C(0x269) * x163); x166 = (x124 + x165); x167 = (uint32_t)(x166 >> 24); x168 = (uint32_t)(x166 & UINT32_C(0xffffff)); x169 = (x167 + x137); x170 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x169 >> 23); x171 = (x169 & UINT32_C(0x7fffff)); x172 = (x170 + x140); out1[0] = x168; out1[1] = x171; out1[2] = x172; out1[3] = x143; out1[4] = x146; out1[5] = x149; out1[6] = x152; out1[7] = x155; out1[8] = x158; out1[9] = x161; out1[10] = x164; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square squares a field element and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg1) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] * Output Bounds: * out1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square( uint32_t out1[11], const uint32_t arg1[11]) { uint64_t x1; uint64_t x2; uint32_t x3; uint64_t x4; uint64_t x5; uint32_t x6; uint64_t x7; uint64_t x8; uint32_t x9; uint64_t x10; uint64_t x11; uint32_t x12; uint64_t x13; uint64_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint64_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint32_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint32_t x102; uint64_t x103; uint64_t x104; uint32_t x105; uint64_t x106; uint64_t x107; uint32_t x108; uint64_t x109; uint64_t x110; uint32_t x111; uint64_t x112; uint64_t x113; uint32_t x114; uint64_t x115; uint64_t x116; uint32_t x117; uint64_t x118; uint64_t x119; uint32_t x120; uint64_t x121; uint64_t x122; uint32_t x123; uint64_t x124; uint64_t x125; uint32_t x126; uint64_t x127; uint32_t x128; uint32_t x129; uint64_t x130; uint64_t x131; uint32_t x132; uint32_t x133; uint32_t x134; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x135; uint32_t x136; uint32_t x137; x1 = ((uint64_t)(arg1[10]) * UINT16_C(0x269)); x2 = (x1 * 0x2); x3 = ((arg1[10]) * 0x2); x4 = ((uint64_t)(arg1[9]) * UINT16_C(0x269)); x5 = (x4 * 0x2); x6 = ((arg1[9]) * 0x2); x7 = ((uint64_t)(arg1[8]) * UINT16_C(0x269)); x8 = (x7 * 0x2); x9 = ((arg1[8]) * 0x2); x10 = ((uint64_t)(arg1[7]) * UINT16_C(0x269)); x11 = (x10 * 0x2); x12 = ((arg1[7]) * 0x2); x13 = ((uint64_t)(arg1[6]) * UINT16_C(0x269)); x14 = (x13 * 0x2); x15 = ((arg1[6]) * 0x2); x16 = ((arg1[5]) * 0x2); x17 = ((arg1[4]) * 0x2); x18 = ((arg1[3]) * 0x2); x19 = ((arg1[2]) * 0x2); x20 = ((arg1[1]) * 0x2); x21 = ((arg1[10]) * x1); x22 = ((arg1[9]) * x2); x23 = ((arg1[9]) * (x4 * 0x2)); x24 = ((arg1[8]) * (x2 * 0x2)); x25 = ((arg1[8]) * (x5 * 0x2)); x26 = ((arg1[8]) * (x7 * 0x2)); x27 = ((arg1[7]) * x2); x28 = ((arg1[7]) * x5); x29 = ((arg1[7]) * x8); x30 = ((arg1[7]) * x10); x31 = ((arg1[6]) * x2); x32 = ((arg1[6]) * x5); x33 = ((arg1[6]) * (x8 * 0x2)); x34 = ((arg1[6]) * x11); x35 = ((arg1[6]) * x13); x36 = ((arg1[5]) * x2); x37 = ((arg1[5]) * (x5 * 0x2)); x38 = ((arg1[5]) * (x8 * 0x2)); x39 = ((arg1[5]) * x11); x40 = ((arg1[5]) * (x14 * 0x2)); x41 = ((uint64_t)(arg1[5]) * ((arg1[5]) * 0x2)); x42 = ((arg1[4]) * (x2 * 0x2)); x43 = ((arg1[4]) * (x5 * 0x2)); x44 = ((arg1[4]) * (x8 * 0x2)); x45 = ((arg1[4]) * (x11 * 0x2)); x46 = ((uint64_t)(arg1[4]) * (x15 * 0x2)); x47 = ((uint64_t)(arg1[4]) * (x16 * 0x2)); x48 = ((uint64_t)(arg1[4]) * ((arg1[4]) * 0x2)); x49 = ((arg1[3]) * x2); x50 = ((arg1[3]) * x5); x51 = ((arg1[3]) * (x8 * 0x2)); x52 = ((uint64_t)(arg1[3]) * x12); x53 = ((uint64_t)(arg1[3]) * x15); x54 = ((uint64_t)(arg1[3]) * x16); x55 = ((uint64_t)(arg1[3]) * (x17 * 0x2)); x56 = ((uint64_t)(arg1[3]) * (arg1[3])); x57 = ((arg1[2]) * x2); x58 = ((arg1[2]) * (x5 * 0x2)); x59 = ((uint64_t)(arg1[2]) * (x9 * 0x2)); x60 = ((uint64_t)(arg1[2]) * x12); x61 = ((uint64_t)(arg1[2]) * x15); x62 = ((uint64_t)(arg1[2]) * (x16 * 0x2)); x63 = ((uint64_t)(arg1[2]) * (x17 * 0x2)); x64 = ((uint64_t)(arg1[2]) * x18); x65 = ((uint64_t)(arg1[2]) * (arg1[2])); x66 = ((arg1[1]) * (x2 * 0x2)); x67 = ((uint64_t)(arg1[1]) * (x6 * 0x2)); x68 = ((uint64_t)(arg1[1]) * (x9 * 0x2)); x69 = ((uint64_t)(arg1[1]) * x12); x70 = ((uint64_t)(arg1[1]) * (x15 * 0x2)); x71 = ((uint64_t)(arg1[1]) * (x16 * 0x2)); x72 = ((uint64_t)(arg1[1]) * (x17 * 0x2)); x73 = ((uint64_t)(arg1[1]) * x18); x74 = ((uint64_t)(arg1[1]) * (x19 * 0x2)); x75 = ((uint64_t)(arg1[1]) * ((arg1[1]) * 0x2)); x76 = ((uint64_t)(arg1[0]) * x3); x77 = ((uint64_t)(arg1[0]) * x6); x78 = ((uint64_t)(arg1[0]) * x9); x79 = ((uint64_t)(arg1[0]) * x12); x80 = ((uint64_t)(arg1[0]) * x15); x81 = ((uint64_t)(arg1[0]) * x16); x82 = ((uint64_t)(arg1[0]) * x17); x83 = ((uint64_t)(arg1[0]) * x18); x84 = ((uint64_t)(arg1[0]) * x19); x85 = ((uint64_t)(arg1[0]) * x20); x86 = ((uint64_t)(arg1[0]) * (arg1[0])); x87 = (x86 + (x66 + (x58 + (x51 + (x45 + x40))))); x88 = (x87 >> 24); x89 = (uint32_t)(x87 & UINT32_C(0xffffff)); x90 = (x76 + (x67 + (x59 + (x52 + (x46 + x41))))); x91 = (x77 + (x68 + (x60 + (x53 + (x47 + x21))))); x92 = (x78 + (x69 + (x61 + (x54 + (x48 + x22))))); x93 = (x79 + (x70 + (x62 + (x55 + (x24 + x23))))); x94 = (x80 + (x71 + (x63 + (x56 + (x27 + x25))))); x95 = (x81 + (x72 + (x64 + (x31 + (x28 + x26))))); x96 = (x82 + (x73 + (x65 + (x36 + (x32 + x29))))); x97 = (x83 + (x74 + (x42 + (x37 + (x33 + x30))))); x98 = (x84 + (x75 + (x49 + (x43 + (x38 + x34))))); x99 = (x85 + (x57 + (x50 + (x44 + (x39 + x35))))); x100 = (x88 + x99); x101 = (x100 >> 23); x102 = (uint32_t)(x100 & UINT32_C(0x7fffff)); x103 = (x101 + x98); x104 = (x103 >> 23); x105 = (uint32_t)(x103 & UINT32_C(0x7fffff)); x106 = (x104 + x97); x107 = (x106 >> 24); x108 = (uint32_t)(x106 & UINT32_C(0xffffff)); x109 = (x107 + x96); x110 = (x109 >> 23); x111 = (uint32_t)(x109 & UINT32_C(0x7fffff)); x112 = (x110 + x95); x113 = (x112 >> 23); x114 = (uint32_t)(x112 & UINT32_C(0x7fffff)); x115 = (x113 + x94); x116 = (x115 >> 23); x117 = (uint32_t)(x115 & UINT32_C(0x7fffff)); x118 = (x116 + x93); x119 = (x118 >> 24); x120 = (uint32_t)(x118 & UINT32_C(0xffffff)); x121 = (x119 + x92); x122 = (x121 >> 23); x123 = (uint32_t)(x121 & UINT32_C(0x7fffff)); x124 = (x122 + x91); x125 = (x124 >> 23); x126 = (uint32_t)(x124 & UINT32_C(0x7fffff)); x127 = (x125 + x90); x128 = (uint32_t)(x127 >> 23); x129 = (uint32_t)(x127 & UINT32_C(0x7fffff)); x130 = ((uint64_t)UINT16_C(0x269) * x128); x131 = (x89 + x130); x132 = (uint32_t)(x131 >> 24); x133 = (uint32_t)(x131 & UINT32_C(0xffffff)); x134 = (x132 + x102); x135 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x134 >> 23); x136 = (x134 & UINT32_C(0x7fffff)); x137 = (x135 + x105); out1[0] = x133; out1[1] = x136; out1[2] = x137; out1[3] = x108; out1[4] = x111; out1[5] = x114; out1[6] = x117; out1[7] = x120; out1[8] = x123; out1[9] = x126; out1[10] = x129; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry reduces a field element. * Postconditions: * eval out1 mod m = eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] * Output Bounds: * out1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry( uint32_t out1[11], const uint32_t arg1[11]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; x1 = (arg1[0]); x2 = ((x1 >> 24) + (arg1[1])); x3 = ((x2 >> 23) + (arg1[2])); x4 = ((x3 >> 23) + (arg1[3])); x5 = ((x4 >> 24) + (arg1[4])); x6 = ((x5 >> 23) + (arg1[5])); x7 = ((x6 >> 23) + (arg1[6])); x8 = ((x7 >> 23) + (arg1[7])); x9 = ((x8 >> 24) + (arg1[8])); x10 = ((x9 >> 23) + (arg1[9])); x11 = ((x10 >> 23) + (arg1[10])); x12 = ((x1 & UINT32_C(0xffffff)) + (UINT16_C(0x269) * (x11 >> 23))); x13 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x12 >> 24) + (x2 & UINT32_C(0x7fffff))); x14 = (x12 & UINT32_C(0xffffff)); x15 = (x13 & UINT32_C(0x7fffff)); x16 = ((fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x13 >> 23) + (x3 & UINT32_C(0x7fffff))); x17 = (x4 & UINT32_C(0xffffff)); x18 = (x5 & UINT32_C(0x7fffff)); x19 = (x6 & UINT32_C(0x7fffff)); x20 = (x7 & UINT32_C(0x7fffff)); x21 = (x8 & UINT32_C(0xffffff)); x22 = (x9 & UINT32_C(0x7fffff)); x23 = (x10 & UINT32_C(0x7fffff)); x24 = (x11 & UINT32_C(0x7fffff)); out1[0] = x14; out1[1] = x15; out1[2] = x16; out1[3] = x17; out1[4] = x18; out1[5] = x19; out1[6] = x20; out1[7] = x21; out1[8] = x22; out1[9] = x23; out1[10] = x24; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_add adds two field elements. * Postconditions: * eval out1 mod m = (eval arg1 + eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * arg2: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * Output Bounds: * out1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_add( uint32_t out1[11], const uint32_t arg1[11], const uint32_t arg2[11]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; x1 = ((arg1[0]) + (arg2[0])); x2 = ((arg1[1]) + (arg2[1])); x3 = ((arg1[2]) + (arg2[2])); x4 = ((arg1[3]) + (arg2[3])); x5 = ((arg1[4]) + (arg2[4])); x6 = ((arg1[5]) + (arg2[5])); x7 = ((arg1[6]) + (arg2[6])); x8 = ((arg1[7]) + (arg2[7])); x9 = ((arg1[8]) + (arg2[8])); x10 = ((arg1[9]) + (arg2[9])); x11 = ((arg1[10]) + (arg2[10])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_sub subtracts two field elements. * Postconditions: * eval out1 mod m = (eval arg1 - eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * arg2: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * Output Bounds: * out1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_sub( uint32_t out1[11], const uint32_t arg1[11], const uint32_t arg2[11]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; x1 = ((UINT32_C(0x1fffb2e) + (arg1[0])) - (arg2[0])); x2 = ((UINT32_C(0xfffffe) + (arg1[1])) - (arg2[1])); x3 = ((UINT32_C(0xfffffe) + (arg1[2])) - (arg2[2])); x4 = ((UINT32_C(0x1fffffe) + (arg1[3])) - (arg2[3])); x5 = ((UINT32_C(0xfffffe) + (arg1[4])) - (arg2[4])); x6 = ((UINT32_C(0xfffffe) + (arg1[5])) - (arg2[5])); x7 = ((UINT32_C(0xfffffe) + (arg1[6])) - (arg2[6])); x8 = ((UINT32_C(0x1fffffe) + (arg1[7])) - (arg2[7])); x9 = ((UINT32_C(0xfffffe) + (arg1[8])) - (arg2[8])); x10 = ((UINT32_C(0xfffffe) + (arg1[9])) - (arg2[9])); x11 = ((UINT32_C(0xfffffe) + (arg1[10])) - (arg2[10])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp negates a field element. * Postconditions: * eval out1 mod m = -eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * Output Bounds: * out1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp( uint32_t out1[11], const uint32_t arg1[11]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; x1 = (UINT32_C(0x1fffb2e) - (arg1[0])); x2 = (UINT32_C(0xfffffe) - (arg1[1])); x3 = (UINT32_C(0xfffffe) - (arg1[2])); x4 = (UINT32_C(0x1fffffe) - (arg1[3])); x5 = (UINT32_C(0xfffffe) - (arg1[4])); x6 = (UINT32_C(0xfffffe) - (arg1[5])); x7 = (UINT32_C(0xfffffe) - (arg1[6])); x8 = (UINT32_C(0x1fffffe) - (arg1[7])); x9 = (UINT32_C(0xfffffe) - (arg1[8])); x10 = (UINT32_C(0xfffffe) - (arg1[9])); x11 = (UINT32_C(0xfffffe) - (arg1[10])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( uint32_t out1[11], fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 arg1, const uint32_t arg2[11], const uint32_t arg3[11]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x1, arg1, (arg2[0]), (arg3[0])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x2, arg1, (arg2[1]), (arg3[1])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x3, arg1, (arg2[2]), (arg3[2])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x4, arg1, (arg2[3]), (arg3[3])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x5, arg1, (arg2[4]), (arg3[4])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x6, arg1, (arg2[5]), (arg3[5])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x7, arg1, (arg2[6]), (arg3[6])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x8, arg1, (arg2[7]), (arg3[7])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x9, arg1, (arg2[8]), (arg3[8])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x10, arg1, (arg2[9]), (arg3[9])); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x11, arg1, (arg2[10]), (arg3[10])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes serializes a field element to bytes in little-endian order. * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] * * Input Bounds: * arg1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes( uint8_t out1[32], const uint32_t arg1[11]) { uint32_t x1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x2; uint32_t x3; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x4; uint32_t x5; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x6; uint32_t x7; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x8; uint32_t x9; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x10; uint32_t x11; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x14; uint32_t x15; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x16; uint32_t x17; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x18; uint32_t x19; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x20; uint32_t x21; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x22; uint32_t x23; uint32_t x24; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x25; uint32_t x26; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x27; uint32_t x28; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x29; uint32_t x30; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x31; uint32_t x32; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x33; uint32_t x34; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x35; uint32_t x36; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x37; uint32_t x38; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x39; uint32_t x40; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x41; uint32_t x42; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x43; uint32_t x44; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; uint8_t x55; uint32_t x56; uint8_t x57; uint8_t x58; uint8_t x59; uint32_t x60; uint8_t x61; uint8_t x62; uint32_t x63; uint8_t x64; uint32_t x65; uint8_t x66; uint32_t x67; uint8_t x68; uint8_t x69; uint32_t x70; uint8_t x71; uint32_t x72; uint8_t x73; uint32_t x74; uint8_t x75; uint8_t x76; uint32_t x77; uint8_t x78; uint32_t x79; uint8_t x80; uint32_t x81; uint8_t x82; uint8_t x83; uint32_t x84; uint8_t x85; uint32_t x86; uint8_t x87; uint32_t x88; uint8_t x89; uint8_t x90; uint32_t x91; uint8_t x92; uint32_t x93; uint8_t x94; uint32_t x95; uint8_t x96; uint8_t x97; uint32_t x98; uint8_t x99; uint32_t x100; uint8_t x101; uint32_t x102; uint8_t x103; uint8_t x104; uint32_t x105; uint8_t x106; uint32_t x107; uint8_t x108; uint32_t x109; uint8_t x110; uint8_t x111; uint32_t x112; uint8_t x113; uint32_t x114; uint8_t x115; uint32_t x116; uint8_t x117; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x118; uint32_t x119; uint8_t x120; uint32_t x121; uint8_t x122; uint8_t x123; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u24( &x1, &x2, 0x0, (arg1[0]), UINT32_C(0xfffd97)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u23( &x3, &x4, x2, (arg1[1]), UINT32_C(0x7fffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u23( &x5, &x6, x4, (arg1[2]), UINT32_C(0x7fffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u24( &x7, &x8, x6, (arg1[3]), UINT32_C(0xffffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u23( &x9, &x10, x8, (arg1[4]), UINT32_C(0x7fffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u23( &x11, &x12, x10, (arg1[5]), UINT32_C(0x7fffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u23( &x13, &x14, x12, (arg1[6]), UINT32_C(0x7fffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u24( &x15, &x16, x14, (arg1[7]), UINT32_C(0xffffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u23( &x17, &x18, x16, (arg1[8]), UINT32_C(0x7fffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u23( &x19, &x20, x18, (arg1[9]), UINT32_C(0x7fffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_subborrowx_u23( &x21, &x22, x20, (arg1[10]), UINT32_C(0x7fffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_cmovznz_u32( &x23, x22, 0x0, UINT32_C(0xffffffff)); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u24( &x24, &x25, 0x0, x1, (x23 & UINT32_C(0xfffd97))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u23( &x26, &x27, x25, x3, (x23 & UINT32_C(0x7fffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u23( &x28, &x29, x27, x5, (x23 & UINT32_C(0x7fffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u24( &x30, &x31, x29, x7, (x23 & UINT32_C(0xffffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u23( &x32, &x33, x31, x9, (x23 & UINT32_C(0x7fffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u23( &x34, &x35, x33, x11, (x23 & UINT32_C(0x7fffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u23( &x36, &x37, x35, x13, (x23 & UINT32_C(0x7fffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u24( &x38, &x39, x37, x15, (x23 & UINT32_C(0xffffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u23( &x40, &x41, x39, x17, (x23 & UINT32_C(0x7fffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u23( &x42, &x43, x41, x19, (x23 & UINT32_C(0x7fffff))); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_addcarryx_u23( &x44, &x45, x43, x21, (x23 & UINT32_C(0x7fffff))); x46 = (x44 * (uint32_t)0x2); x47 = (x42 << 2); x48 = (x40 << 3); x49 = (x38 << 3); x50 = (x36 << 4); x51 = (x34 << 5); x52 = (x32 << 6); x53 = (x30 << 6); x54 = (x28 << 7); x55 = (uint8_t)(x24 & UINT8_C(0xff)); x56 = (x24 >> 8); x57 = (uint8_t)(x56 & UINT8_C(0xff)); x58 = (uint8_t)(x56 >> 8); x59 = (uint8_t)(x26 & UINT8_C(0xff)); x60 = (x26 >> 8); x61 = (uint8_t)(x60 & UINT8_C(0xff)); x62 = (uint8_t)(x60 >> 8); x63 = (x54 + (uint32_t)x62); x64 = (uint8_t)(x63 & UINT8_C(0xff)); x65 = (x63 >> 8); x66 = (uint8_t)(x65 & UINT8_C(0xff)); x67 = (x65 >> 8); x68 = (uint8_t)(x67 & UINT8_C(0xff)); x69 = (uint8_t)(x67 >> 8); x70 = (x53 + (uint32_t)x69); x71 = (uint8_t)(x70 & UINT8_C(0xff)); x72 = (x70 >> 8); x73 = (uint8_t)(x72 & UINT8_C(0xff)); x74 = (x72 >> 8); x75 = (uint8_t)(x74 & UINT8_C(0xff)); x76 = (uint8_t)(x74 >> 8); x77 = (x52 + (uint32_t)x76); x78 = (uint8_t)(x77 & UINT8_C(0xff)); x79 = (x77 >> 8); x80 = (uint8_t)(x79 & UINT8_C(0xff)); x81 = (x79 >> 8); x82 = (uint8_t)(x81 & UINT8_C(0xff)); x83 = (uint8_t)(x81 >> 8); x84 = (x51 + (uint32_t)x83); x85 = (uint8_t)(x84 & UINT8_C(0xff)); x86 = (x84 >> 8); x87 = (uint8_t)(x86 & UINT8_C(0xff)); x88 = (x86 >> 8); x89 = (uint8_t)(x88 & UINT8_C(0xff)); x90 = (uint8_t)(x88 >> 8); x91 = (x50 + (uint32_t)x90); x92 = (uint8_t)(x91 & UINT8_C(0xff)); x93 = (x91 >> 8); x94 = (uint8_t)(x93 & UINT8_C(0xff)); x95 = (x93 >> 8); x96 = (uint8_t)(x95 & UINT8_C(0xff)); x97 = (uint8_t)(x95 >> 8); x98 = (x49 + (uint32_t)x97); x99 = (uint8_t)(x98 & UINT8_C(0xff)); x100 = (x98 >> 8); x101 = (uint8_t)(x100 & UINT8_C(0xff)); x102 = (x100 >> 8); x103 = (uint8_t)(x102 & UINT8_C(0xff)); x104 = (uint8_t)(x102 >> 8); x105 = (x48 + (uint32_t)x104); x106 = (uint8_t)(x105 & UINT8_C(0xff)); x107 = (x105 >> 8); x108 = (uint8_t)(x107 & UINT8_C(0xff)); x109 = (x107 >> 8); x110 = (uint8_t)(x109 & UINT8_C(0xff)); x111 = (uint8_t)(x109 >> 8); x112 = (x47 + (uint32_t)x111); x113 = (uint8_t)(x112 & UINT8_C(0xff)); x114 = (x112 >> 8); x115 = (uint8_t)(x114 & UINT8_C(0xff)); x116 = (x114 >> 8); x117 = (uint8_t)(x116 & UINT8_C(0xff)); x118 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x116 >> 8); x119 = (x46 + (uint32_t)x118); x120 = (uint8_t)(x119 & UINT8_C(0xff)); x121 = (x119 >> 8); x122 = (uint8_t)(x121 & UINT8_C(0xff)); x123 = (uint8_t)(x121 >> 8); out1[0] = x55; out1[1] = x57; out1[2] = x58; out1[3] = x59; out1[4] = x61; out1[5] = x64; out1[6] = x66; out1[7] = x68; out1[8] = x71; out1[9] = x73; out1[10] = x75; out1[11] = x78; out1[12] = x80; out1[13] = x82; out1[14] = x85; out1[15] = x87; out1[16] = x89; out1[17] = x92; out1[18] = x94; out1[19] = x96; out1[20] = x99; out1[21] = x101; out1[22] = x103; out1[23] = x106; out1[24] = x108; out1[25] = x110; out1[26] = x113; out1[27] = x115; out1[28] = x117; out1[29] = x120; out1[30] = x122; out1[31] = x123; } /* * The function fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes deserializes a field element from bytes in little-endian order. * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes( uint32_t out1[11], const uint8_t arg1[32]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint8_t x29; uint32_t x30; uint32_t x31; uint8_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1 x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint8_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint8_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint8_t x53; uint32_t x54; uint32_t x55; uint32_t x56; uint32_t x57; uint8_t x58; uint32_t x59; uint32_t x60; uint32_t x61; uint32_t x62; uint8_t x63; uint32_t x64; uint32_t x65; uint32_t x66; uint32_t x67; uint8_t x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint8_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint8_t x78; uint32_t x79; uint32_t x80; x1 = ((uint32_t)(arg1[31]) << 15); x2 = ((uint32_t)(arg1[30]) << 7); x3 = ((uint32_t)(arg1[29]) << 22); x4 = ((uint32_t)(arg1[28]) << 14); x5 = ((uint32_t)(arg1[27]) << 6); x6 = ((uint32_t)(arg1[26]) << 21); x7 = ((uint32_t)(arg1[25]) << 13); x8 = ((uint32_t)(arg1[24]) << 5); x9 = ((uint32_t)(arg1[23]) << 21); x10 = ((uint32_t)(arg1[22]) << 13); x11 = ((uint32_t)(arg1[21]) << 5); x12 = ((uint32_t)(arg1[20]) << 20); x13 = ((uint32_t)(arg1[19]) << 12); x14 = ((uint32_t)(arg1[18]) << 4); x15 = ((uint32_t)(arg1[17]) << 19); x16 = ((uint32_t)(arg1[16]) << 11); x17 = ((uint32_t)(arg1[15]) << 3); x18 = ((uint32_t)(arg1[14]) << 18); x19 = ((uint32_t)(arg1[13]) << 10); x20 = ((uint32_t)(arg1[12]) << 2); x21 = ((uint32_t)(arg1[11]) << 18); x22 = ((uint32_t)(arg1[10]) << 10); x23 = ((uint32_t)(arg1[9]) << 2); x24 = ((uint32_t)(arg1[8]) << 17); x25 = ((uint32_t)(arg1[7]) << 9); x26 = ((uint32_t)(arg1[6]) * 0x2); x27 = ((uint32_t)(arg1[5]) << 16); x28 = ((uint32_t)(arg1[4]) << 8); x29 = (arg1[3]); x30 = ((uint32_t)(arg1[2]) << 16); x31 = ((uint32_t)(arg1[1]) << 8); x32 = (arg1[0]); x33 = (x31 + (uint32_t)x32); x34 = (x30 + x33); x35 = (x28 + (uint32_t)x29); x36 = (x27 + x35); x37 = (x36 & UINT32_C(0x7fffff)); x38 = (fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_uint1)(x36 >> 23); x39 = (x26 + (uint32_t)x38); x40 = (x25 + x39); x41 = (x24 + x40); x42 = (x41 & UINT32_C(0x7fffff)); x43 = (uint8_t)(x41 >> 23); x44 = (x23 + (uint32_t)x43); x45 = (x22 + x44); x46 = (x21 + x45); x47 = (x46 & UINT32_C(0xffffff)); x48 = (uint8_t)(x46 >> 24); x49 = (x20 + (uint32_t)x48); x50 = (x19 + x49); x51 = (x18 + x50); x52 = (x51 & UINT32_C(0x7fffff)); x53 = (uint8_t)(x51 >> 23); x54 = (x17 + (uint32_t)x53); x55 = (x16 + x54); x56 = (x15 + x55); x57 = (x56 & UINT32_C(0x7fffff)); x58 = (uint8_t)(x56 >> 23); x59 = (x14 + (uint32_t)x58); x60 = (x13 + x59); x61 = (x12 + x60); x62 = (x61 & UINT32_C(0x7fffff)); x63 = (uint8_t)(x61 >> 23); x64 = (x11 + (uint32_t)x63); x65 = (x10 + x64); x66 = (x9 + x65); x67 = (x66 & UINT32_C(0xffffff)); x68 = (uint8_t)(x66 >> 24); x69 = (x8 + (uint32_t)x68); x70 = (x7 + x69); x71 = (x6 + x70); x72 = (x71 & UINT32_C(0x7fffff)); x73 = (uint8_t)(x71 >> 23); x74 = (x5 + (uint32_t)x73); x75 = (x4 + x74); x76 = (x3 + x75); x77 = (x76 & UINT32_C(0x7fffff)); x78 = (uint8_t)(x76 >> 23); x79 = (x2 + (uint32_t)x78); x80 = (x1 + x79); out1[0] = x34; out1[1] = x37; out1[2] = x42; out1[3] = x47; out1[4] = x52; out1[5] = x57; out1[6] = x62; out1[7] = x67; out1[8] = x72; out1[9] = x77; out1[10] = x80; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_GostR3410_2001_CryptoPro_A_ParamSet/fe_inv.op3 * custom repunit addition chain */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t16, t164, t2, t246, t32, t4, t64, t8, t80, t82; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t2, acc, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t4, acc, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t4); for (i = 0; i < 3; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t8, acc, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t8); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t16, acc, t8); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t16); for (i = 0; i < 15; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t32, acc, t16); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t32); for (i = 0; i < 31; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t64, acc, t32); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t64); for (i = 0; i < 15; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t80, acc, t16); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t80); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t82, acc, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t82); for (i = 0; i < 81; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t164, acc, t82); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t164); for (i = 0; i < 81; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t246, acc, t82); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, t246); for (i = 0; i < 2; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(acc, acc, t2); for (i = 0; i < 3; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(output, acc, t1); } /* curve coefficient constants */ static const limb_t const_one[11] = { UINT32_C(0x00000001), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000)}; static const limb_t const_b[11] = { UINT32_C(0x000000A6), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[19][16] = { { {{UINT32_C(0x00000001), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000)}, {UINT32_C(0x009F1E14), UINT32_C(0x00499C9E), UINT32_C(0x00624559), UINT32_C(0x007C8F8E), UINT32_C(0x00253CB7), UINT32_C(0x005BB1A9), UINT32_C(0x002453F2), UINT32_C(0x00FBEA0B), UINT32_C(0x00139B44), UINT32_C(0x001C7826), UINT32_C(0x0046C8F2)}}, {{UINT32_C(0x00E38D2C), UINT32_C(0x00638E38), UINT32_C(0x00471C71), UINT32_C(0x008E38E3), UINT32_C(0x000E38E3), UINT32_C(0x001C71C7), UINT32_C(0x0038E38E), UINT32_C(0x0071C71C), UINT32_C(0x0071C71C), UINT32_C(0x00638E38), UINT32_C(0x00471C71)}, {UINT32_C(0x00788A51), UINT32_C(0x0017796B), UINT32_C(0x005090C2), UINT32_C(0x000E1DA3), UINT32_C(0x001EA532), UINT32_C(0x006C1093), UINT32_C(0x00507A6C), UINT32_C(0x009B375E), UINT32_C(0x0076083A), UINT32_C(0x0072A688), UINT32_C(0x003B5E68)}}, {{UINT32_C(0x0072C029), UINT32_C(0x001C3871), UINT32_C(0x006DE040), UINT32_C(0x00E6D223), UINT32_C(0x0035AD09), UINT32_C(0x0078D2C5), UINT32_C(0x004B6782), UINT32_C(0x006D32D1), UINT32_C(0x001D2C78), UINT32_C(0x000F861E), UINT32_C(0x00483B00)}, {UINT32_C(0x008D7CC0), UINT32_C(0x00023B06), UINT32_C(0x0030EC69), UINT32_C(0x00FF4DED), UINT32_C(0x002EE231), UINT32_C(0x006412C7), UINT32_C(0x005AF3F6), UINT32_C(0x00435452), UINT32_C(0x0004E9C3), UINT32_C(0x006B9475), UINT32_C(0x00484B93)}}, {{UINT32_C(0x00196EE1), UINT32_C(0x006A01E4), UINT32_C(0x00652F51), UINT32_C(0x00416FD6), UINT32_C(0x005EBCD2), UINT32_C(0x0071846F), UINT32_C(0x0036FA23), UINT32_C(0x00D73EBD), UINT32_C(0x00180C14), UINT32_C(0x00653358), UINT32_C(0x0017EEC8)}, {UINT32_C(0x000125FB), UINT32_C(0x00410C4D), UINT32_C(0x0074C481), UINT32_C(0x002A7CFC), UINT32_C(0x0065AC08), UINT32_C(0x000F3BD1), UINT32_C(0x004A5388), UINT32_C(0x00B7149E), UINT32_C(0x00085C10), UINT32_C(0x0054C612), UINT32_C(0x000E3FA5)}}, {{UINT32_C(0x005ECDA3), UINT32_C(0x00246227), UINT32_C(0x0016E04F), UINT32_C(0x0005C37F), UINT32_C(0x00442C63), UINT32_C(0x001D5B95), UINT32_C(0x0057520F), UINT32_C(0x00792514), UINT32_C(0x003FB8FA), UINT32_C(0x0037B8D0), UINT32_C(0x005B7CB0)}, {UINT32_C(0x005ED26A), UINT32_C(0x0028AD39), UINT32_C(0x004E2D06), UINT32_C(0x00BDC2A3), UINT32_C(0x0052BE72), UINT32_C(0x002F9991), UINT32_C(0x0019C7FC), UINT32_C(0x00209BD7), UINT32_C(0x007BF20C), UINT32_C(0x005196B4), UINT32_C(0x0069DFB4)}}, {{UINT32_C(0x00834086), UINT32_C(0x002F3D1A), UINT32_C(0x007690A4), UINT32_C(0x00B28D88), UINT32_C(0x0022B907), UINT32_C(0x0025F98C), UINT32_C(0x0023F3A1), UINT32_C(0x00E2E9F9), UINT32_C(0x003A0364), UINT32_C(0x00613CE7), UINT32_C(0x0031EE39)}, {UINT32_C(0x00C2FF84), UINT32_C(0x003F08BB), UINT32_C(0x0016B10A), UINT32_C(0x001D9E58), UINT32_C(0x001AA31A), UINT32_C(0x0016B57C), UINT32_C(0x002724AF), UINT32_C(0x001CEDB4), UINT32_C(0x000F8812), UINT32_C(0x0014C068), UINT32_C(0x0064070B)}}, {{UINT32_C(0x00BBCCCD), UINT32_C(0x002E8F3C), UINT32_C(0x0054B6AC), UINT32_C(0x00FD3BBE), UINT32_C(0x0013312F), UINT32_C(0x006A114E), UINT32_C(0x000F7610), UINT32_C(0x00A85A6C), UINT32_C(0x0073D230), UINT32_C(0x001AE5A6), UINT32_C(0x0028C30C)}, {UINT32_C(0x00C26CB2), UINT32_C(0x006BBD29), UINT32_C(0x0024F433), UINT32_C(0x00BE725E), UINT32_C(0x001ECBEE), UINT32_C(0x00646D3C), UINT32_C(0x0015C789), UINT32_C(0x00B07720), UINT32_C(0x0030D220), UINT32_C(0x0045843E), UINT32_C(0x001EADEA)}}, {{UINT32_C(0x007C58E2), UINT32_C(0x0052800F), UINT32_C(0x002F9F17), UINT32_C(0x0083F230), UINT32_C(0x004207AA), UINT32_C(0x004B8493), UINT32_C(0x0033495B), UINT32_C(0x001061BD), UINT32_C(0x0057D115), UINT32_C(0x005F83CA), UINT32_C(0x0051583F)}, {UINT32_C(0x00B12811), UINT32_C(0x00705E55), UINT32_C(0x0048A034), UINT32_C(0x00C9201A), UINT32_C(0x0060E5DF), UINT32_C(0x006C7FE0), UINT32_C(0x00500B66), UINT32_C(0x00A91FBD), UINT32_C(0x001CFF16), UINT32_C(0x0066C372), UINT32_C(0x0002B561)}}, {{UINT32_C(0x0039A634), UINT32_C(0x0050548C), UINT32_C(0x005CFE7B), UINT32_C(0x00723488), UINT32_C(0x006CDBF9), UINT32_C(0x006D4A7E), UINT32_C(0x00107BD7), UINT32_C(0x00D87870), UINT32_C(0x006FFF35), UINT32_C(0x0047470D), UINT32_C(0x001D44AD)}, {UINT32_C(0x0051071C), UINT32_C(0x0000FACA), UINT32_C(0x004AB290), UINT32_C(0x00D72DA0), UINT32_C(0x000E946D), UINT32_C(0x00154920), UINT32_C(0x000DE920), UINT32_C(0x002CCC50), UINT32_C(0x0078FF60), UINT32_C(0x0076A2F6), UINT32_C(0x00418509)}}, {{UINT32_C(0x00EF5595), UINT32_C(0x00116786), UINT32_C(0x00615EC8), UINT32_C(0x00727C29), UINT32_C(0x0021D6BF), UINT32_C(0x00727880), UINT32_C(0x0025C9C9), UINT32_C(0x0031B0B0), UINT32_C(0x002CACE7), UINT32_C(0x003C8E5C), UINT32_C(0x002C31D8)}, {UINT32_C(0x00328440), UINT32_C(0x00485469), UINT32_C(0x006AE670), UINT32_C(0x006EE53F), UINT32_C(0x00299C43), UINT32_C(0x0005AD41), UINT32_C(0x000D8C3F), UINT32_C(0x00072A91), UINT32_C(0x0067D0E1), UINT32_C(0x004B76E9), UINT32_C(0x0074B00D)}}, {{UINT32_C(0x00041497), UINT32_C(0x001E11C9), UINT32_C(0x001A4504), UINT32_C(0x002A7919), UINT32_C(0x00074B21), UINT32_C(0x004FA67F), UINT32_C(0x0004DC6B), UINT32_C(0x00F2C95C), UINT32_C(0x0039BDCC), UINT32_C(0x007A64EC), UINT32_C(0x005F3E5D)}, {UINT32_C(0x009C53EC), UINT32_C(0x0069BDE1), UINT32_C(0x007E0626), UINT32_C(0x0042ED13), UINT32_C(0x0062AFB2), UINT32_C(0x0031E908), UINT32_C(0x003C5398), UINT32_C(0x006BE167), UINT32_C(0x0002399E), UINT32_C(0x00210E43), UINT32_C(0x0001779F)}}, {{UINT32_C(0x00C84A66), UINT32_C(0x00444B2F), UINT32_C(0x000108CC), UINT32_C(0x0036EEF4), UINT32_C(0x00681F17), UINT32_C(0x00165962), UINT32_C(0x004C1DBC), UINT32_C(0x003AFD47), UINT32_C(0x003B7CE0), UINT32_C(0x0037AD5F), UINT32_C(0x004C55A7)}, {UINT32_C(0x00C53CD0), UINT32_C(0x002E065E), UINT32_C(0x0002B7D3), UINT32_C(0x00A10201), UINT32_C(0x00174A99), UINT32_C(0x00365939), UINT32_C(0x001F2D54), UINT32_C(0x000806C0), UINT32_C(0x0039185C), UINT32_C(0x00001C4B), UINT32_C(0x00415674)}}, {{UINT32_C(0x008B07C5), UINT32_C(0x007D1002), UINT32_C(0x0012AE3E), UINT32_C(0x002C420C), UINT32_C(0x00470873), UINT32_C(0x00339263), UINT32_C(0x006C2C6C), UINT32_C(0x002D1BB6), UINT32_C(0x0072A553), UINT32_C(0x00306BCE), UINT32_C(0x0007F4C6)}, {UINT32_C(0x00B6438D), UINT32_C(0x007278A9), UINT32_C(0x0076463F), UINT32_C(0x00D03F8A), UINT32_C(0x00332938), UINT32_C(0x001C7585), UINT32_C(0x000874CF), UINT32_C(0x00CEDF11), UINT32_C(0x00432AA3), UINT32_C(0x0059DEAB), UINT32_C(0x005C130A)}}, {{UINT32_C(0x00B53E9C), UINT32_C(0x006388B4), UINT32_C(0x000428F8), UINT32_C(0x0008A18A), UINT32_C(0x000EB210), UINT32_C(0x003361E6), UINT32_C(0x0006528B), UINT32_C(0x00A1AD62), UINT32_C(0x005BD8BC), UINT32_C(0x000D44E3), UINT32_C(0x0018CEE3)}, {UINT32_C(0x00EC3379), UINT32_C(0x002B9AD0), UINT32_C(0x003D2CC1), UINT32_C(0x00A04547), UINT32_C(0x00600394), UINT32_C(0x00240EC9), UINT32_C(0x000CF8E5), UINT32_C(0x00DE5CA1), UINT32_C(0x00107147), UINT32_C(0x003B518C), UINT32_C(0x0060976D)}}, {{UINT32_C(0x00685C39), UINT32_C(0x00577EB1), UINT32_C(0x002AA0AD), UINT32_C(0x00E3B804), UINT32_C(0x003082F3), UINT32_C(0x002C92AC), UINT32_C(0x00207C69), UINT32_C(0x00658635), UINT32_C(0x00670DA3), UINT32_C(0x0006A6A4), UINT32_C(0x002AF849)}, {UINT32_C(0x0005760A), UINT32_C(0x006E3A33), UINT32_C(0x00629DCA), UINT32_C(0x00D8388A), UINT32_C(0x007C1F0E), UINT32_C(0x00121173), UINT32_C(0x002A0106), UINT32_C(0x00607836), UINT32_C(0x0071EB45), UINT32_C(0x00749724), UINT32_C(0x00722A37)}}, {{UINT32_C(0x00DB7020), UINT32_C(0x005F6FEC), UINT32_C(0x0001C894), UINT32_C(0x00D0F9D5), UINT32_C(0x0045FD0A), UINT32_C(0x002C8167), UINT32_C(0x000995E9), UINT32_C(0x00C5F645), UINT32_C(0x002318F0), UINT32_C(0x0077F38B), UINT32_C(0x00580E22)}, {UINT32_C(0x003C5516), UINT32_C(0x00035DF1), UINT32_C(0x00592BC6), UINT32_C(0x00A625DD), UINT32_C(0x002295A0), UINT32_C(0x0060337A), UINT32_C(0x0021824B), UINT32_C(0x00C51AB1), UINT32_C(0x0014C123), UINT32_C(0x007703F3), UINT32_C(0x002945A3)}}, }, { {{UINT32_C(0x0015A14B), UINT32_C(0x002339F9), UINT32_C(0x005304AB), UINT32_C(0x0075CCEE), UINT32_C(0x00194DC5), UINT32_C(0x004A8A9E), UINT32_C(0x0046D1D2), UINT32_C(0x0075C952), UINT32_C(0x007ED8B2), UINT32_C(0x00058732), UINT32_C(0x0045D9A3)}, {UINT32_C(0x00E6BE0F), UINT32_C(0x005D23F0), UINT32_C(0x005D9FF5), UINT32_C(0x00C7E802), UINT32_C(0x0010C909), UINT32_C(0x00207ED0), UINT32_C(0x0066F794), UINT32_C(0x00D9AFE4), UINT32_C(0x007DA500), UINT32_C(0x007B21FF), UINT32_C(0x0058D1D8)}}, {{UINT32_C(0x007DD1B7), UINT32_C(0x000A4C87), UINT32_C(0x005506F4), UINT32_C(0x00D63219), UINT32_C(0x00657A0A), UINT32_C(0x007F79A5), UINT32_C(0x003CA588), UINT32_C(0x00FF7B22), UINT32_C(0x002E92EA), UINT32_C(0x0030699F), UINT32_C(0x0028801D)}, {UINT32_C(0x00171DE8), UINT32_C(0x0074AA40), UINT32_C(0x00776396), UINT32_C(0x000B6039), UINT32_C(0x00477A52), UINT32_C(0x00552FC4), UINT32_C(0x004CB63D), UINT32_C(0x001F4555), UINT32_C(0x00762774), UINT32_C(0x00404FD4), UINT32_C(0x001F0E12)}}, {{UINT32_C(0x002131C9), UINT32_C(0x006A9CFB), UINT32_C(0x0023C4EC), UINT32_C(0x00E6D39F), UINT32_C(0x00185E55), UINT32_C(0x0032F173), UINT32_C(0x005E6019), UINT32_C(0x00A7E72E), UINT32_C(0x006D091C), UINT32_C(0x002967FD), UINT32_C(0x002B5D44)}, {UINT32_C(0x00C01BA9), UINT32_C(0x0024C542), UINT32_C(0x00765B4D), UINT32_C(0x0061291A), UINT32_C(0x0020B694), UINT32_C(0x0012B204), UINT32_C(0x006C029A), UINT32_C(0x00880C16), UINT32_C(0x00087D31), UINT32_C(0x0013494A), UINT32_C(0x0005AC30)}}, {{UINT32_C(0x00248E22), UINT32_C(0x001D20E0), UINT32_C(0x007970A3), UINT32_C(0x008D530E), UINT32_C(0x0069D972), UINT32_C(0x0036B6B2), UINT32_C(0x0023944A), UINT32_C(0x009283D0), UINT32_C(0x00413B7A), UINT32_C(0x0026DA72), UINT32_C(0x0061243F)}, {UINT32_C(0x008FAB34), UINT32_C(0x005F4AF0), UINT32_C(0x0019759F), UINT32_C(0x0041583F), UINT32_C(0x00723D0D), UINT32_C(0x0049EF5D), UINT32_C(0x0037ED96), UINT32_C(0x00D94167), UINT32_C(0x0025C5F0), UINT32_C(0x0054670B), UINT32_C(0x00645850)}}, {{UINT32_C(0x0078486C), UINT32_C(0x0068A7C1), UINT32_C(0x004E518A), UINT32_C(0x00B42004), UINT32_C(0x0057227C), UINT32_C(0x00378DB2), UINT32_C(0x006EC201), UINT32_C(0x006E95D7), UINT32_C(0x003784DB), UINT32_C(0x000913EC), UINT32_C(0x0068F117)}, {UINT32_C(0x0089EA5B), UINT32_C(0x000279A8), UINT32_C(0x001FE8CD), UINT32_C(0x00BDCFEF), UINT32_C(0x0029CFB8), UINT32_C(0x00609772), UINT32_C(0x001D36D2), UINT32_C(0x00BC3D3D), UINT32_C(0x001D2878), UINT32_C(0x001A10E1), UINT32_C(0x00010462)}}, {{UINT32_C(0x00B52308), UINT32_C(0x004A1DF4), UINT32_C(0x0079CB16), UINT32_C(0x00DC0E0E), UINT32_C(0x003932DF), UINT32_C(0x005103E4), UINT32_C(0x0029ADA5), UINT32_C(0x007319A2), UINT32_C(0x00426FF0), UINT32_C(0x00588A4E), UINT32_C(0x003F78AD)}, {UINT32_C(0x00F1B775), UINT32_C(0x006E5A5C), UINT32_C(0x00219FCB), UINT32_C(0x0008CA19), UINT32_C(0x001D9BBA), UINT32_C(0x0075F3B0), UINT32_C(0x0078E9ED), UINT32_C(0x00009E41), UINT32_C(0x003356B2), UINT32_C(0x002C0425), UINT32_C(0x003BAECE)}}, {{UINT32_C(0x00FD3BB1), UINT32_C(0x00535E55), UINT32_C(0x0009A346), UINT32_C(0x00A8E2F4), UINT32_C(0x006F6486), UINT32_C(0x0071D282), UINT32_C(0x003A985D), UINT32_C(0x00A34D18), UINT32_C(0x00606B28), UINT32_C(0x00009AEC), UINT32_C(0x002BEEBF)}, {UINT32_C(0x003780DD), UINT32_C(0x00647EA6), UINT32_C(0x0047B1F7), UINT32_C(0x00598C39), UINT32_C(0x003BFDE6), UINT32_C(0x006C0B48), UINT32_C(0x00121EB8), UINT32_C(0x0085DBF8), UINT32_C(0x006F9773), UINT32_C(0x001528FB), UINT32_C(0x0003A0C5)}}, {{UINT32_C(0x0094B350), UINT32_C(0x00522DB1), UINT32_C(0x00058D9C), UINT32_C(0x008A9662), UINT32_C(0x002E184D), UINT32_C(0x007814B1), UINT32_C(0x00036D84), UINT32_C(0x00594040), UINT32_C(0x00716935), UINT32_C(0x0018DEEE), UINT32_C(0x001E2219)}, {UINT32_C(0x0006F259), UINT32_C(0x00772E6A), UINT32_C(0x00246188), UINT32_C(0x001EC5E7), UINT32_C(0x002939F4), UINT32_C(0x000FF055), UINT32_C(0x001978F0), UINT32_C(0x003F6DAF), UINT32_C(0x000A7BBD), UINT32_C(0x001A6FAF), UINT32_C(0x00510C0C)}}, {{UINT32_C(0x0048904F), UINT32_C(0x007224FF), UINT32_C(0x0065BAA9), UINT32_C(0x000D3551), UINT32_C(0x004DA721), UINT32_C(0x0039A0B4), UINT32_C(0x002BE76F), UINT32_C(0x009B9E20), UINT32_C(0x002504DD), UINT32_C(0x006944BD), UINT32_C(0x0024DAA1)}, {UINT32_C(0x00542F7C), UINT32_C(0x001D4977), UINT32_C(0x001576A4), UINT32_C(0x006672BC), UINT32_C(0x0007DBD1), UINT32_C(0x00220087), UINT32_C(0x0044AC5F), UINT32_C(0x00E1DAAD), UINT32_C(0x00221046), UINT32_C(0x0042A0F3), UINT32_C(0x0052C47E)}}, {{UINT32_C(0x00AA4EC9), UINT32_C(0x000C5256), UINT32_C(0x001D2108), UINT32_C(0x007E3C18), UINT32_C(0x0057CD05), UINT32_C(0x006A2DDB), UINT32_C(0x0070D402), UINT32_C(0x0046F4C8), UINT32_C(0x0070C39D), UINT32_C(0x0002BCDE), UINT32_C(0x00386C4A)}, {UINT32_C(0x00596D94), UINT32_C(0x007774AE), UINT32_C(0x0033D8A2), UINT32_C(0x00B48B39), UINT32_C(0x0055B5DB), UINT32_C(0x004A739E), UINT32_C(0x00601AF6), UINT32_C(0x0017C86B), UINT32_C(0x0033581B), UINT32_C(0x0013A82F), UINT32_C(0x002F7045)}}, {{UINT32_C(0x00EA0CB5), UINT32_C(0x004F13CE), UINT32_C(0x006F865F), UINT32_C(0x00C4AAF7), UINT32_C(0x00456660), UINT32_C(0x00600B98), UINT32_C(0x0079C3AB), UINT32_C(0x0027D7D2), UINT32_C(0x0026486E), UINT32_C(0x0008FEAF), UINT32_C(0x002F5742)}, {UINT32_C(0x00B8102B), UINT32_C(0x0060FD3D), UINT32_C(0x002D073F), UINT32_C(0x0039E77D), UINT32_C(0x002DC294), UINT32_C(0x00151AB7), UINT32_C(0x001413CF), UINT32_C(0x003AAF36), UINT32_C(0x0034A2D1), UINT32_C(0x002844E0), UINT32_C(0x001190CE)}}, {{UINT32_C(0x00ED50BF), UINT32_C(0x003D775D), UINT32_C(0x00533D3C), UINT32_C(0x004B2DDC), UINT32_C(0x00762EB4), UINT32_C(0x0060B90F), UINT32_C(0x003045DA), UINT32_C(0x0095C306), UINT32_C(0x0044062C), UINT32_C(0x004DB392), UINT32_C(0x00658071)}, {UINT32_C(0x0030AE7B), UINT32_C(0x007AE99B), UINT32_C(0x006CD461), UINT32_C(0x00CDBC52), UINT32_C(0x007E2103), UINT32_C(0x0019AC77), UINT32_C(0x005D4D8D), UINT32_C(0x00BFC271), UINT32_C(0x0037F336), UINT32_C(0x0060EDFB), UINT32_C(0x00247DD6)}}, {{UINT32_C(0x0016BAED), UINT32_C(0x00616D44), UINT32_C(0x004BF21B), UINT32_C(0x0096D55E), UINT32_C(0x000125FC), UINT32_C(0x0065EA64), UINT32_C(0x006B4BA0), UINT32_C(0x0058D872), UINT32_C(0x0047273B), UINT32_C(0x00413B44), UINT32_C(0x007C3B0A)}, {UINT32_C(0x0053BB34), UINT32_C(0x0073F0D7), UINT32_C(0x000E175F), UINT32_C(0x001C2578), UINT32_C(0x007D3B2F), UINT32_C(0x0012C2C4), UINT32_C(0x00706D71), UINT32_C(0x00C9BC8D), UINT32_C(0x00499E9A), UINT32_C(0x00531428), UINT32_C(0x004A5C64)}}, {{UINT32_C(0x0037863B), UINT32_C(0x0079BA1D), UINT32_C(0x001CF74C), UINT32_C(0x0022EB4F), UINT32_C(0x0039A1FA), UINT32_C(0x005AFECB), UINT32_C(0x0001FF42), UINT32_C(0x009EBF05), UINT32_C(0x003094C5), UINT32_C(0x003DA3F3), UINT32_C(0x00648DA8)}, {UINT32_C(0x00706E8B), UINT32_C(0x00116614), UINT32_C(0x00662488), UINT32_C(0x0020E858), UINT32_C(0x003042E0), UINT32_C(0x005598A9), UINT32_C(0x0051A013), UINT32_C(0x0096F0CF), UINT32_C(0x0026D7C9), UINT32_C(0x001297CB), UINT32_C(0x00325815)}}, {{UINT32_C(0x00A6A2F2), UINT32_C(0x00431F85), UINT32_C(0x006A358E), UINT32_C(0x00D9BD37), UINT32_C(0x003DDAF8), UINT32_C(0x000FF3E4), UINT32_C(0x0056803F), UINT32_C(0x0050FB50), UINT32_C(0x0068CD30), UINT32_C(0x00242AA9), UINT32_C(0x005D281D)}, {UINT32_C(0x0007C121), UINT32_C(0x006E657D), UINT32_C(0x0003FE75), UINT32_C(0x00B805F3), UINT32_C(0x004C976D), UINT32_C(0x005039AB), UINT32_C(0x0011443E), UINT32_C(0x00F0A01C), UINT32_C(0x00648859), UINT32_C(0x005F1033), UINT32_C(0x007B4C48)}}, {{UINT32_C(0x00793170), UINT32_C(0x006DBF68), UINT32_C(0x007D1F25), UINT32_C(0x00F0D9B4), UINT32_C(0x0059CB0C), UINT32_C(0x002BAA82), UINT32_C(0x00516CAA), UINT32_C(0x0055BA64), UINT32_C(0x0014BA02), UINT32_C(0x006986E0), UINT32_C(0x005D492D)}, {UINT32_C(0x0025053F), UINT32_C(0x00643229), UINT32_C(0x0072934C), UINT32_C(0x00FF2EFA), UINT32_C(0x0075BD10), UINT32_C(0x000EE1B5), UINT32_C(0x0075A5E1), UINT32_C(0x008B7B93), UINT32_C(0x001D5824), UINT32_C(0x002F28AB), UINT32_C(0x00762FF8)}}, }, { {{UINT32_C(0x0046367E), UINT32_C(0x0056A682), UINT32_C(0x00430EB2), UINT32_C(0x0025F7A6), UINT32_C(0x0062DE86), UINT32_C(0x0033FEF2), UINT32_C(0x00156E4E), UINT32_C(0x002BFC59), UINT32_C(0x00038721), UINT32_C(0x003BE4D8), UINT32_C(0x0000C9A8)}, {UINT32_C(0x00E2541C), UINT32_C(0x0060B185), UINT32_C(0x00124C99), UINT32_C(0x007614C4), UINT32_C(0x004C9BB5), UINT32_C(0x001A2B53), UINT32_C(0x0055AB66), UINT32_C(0x00B34939), UINT32_C(0x00755795), UINT32_C(0x004AE42A), UINT32_C(0x0037EE9E)}}, {{UINT32_C(0x00418B8A), UINT32_C(0x0053A329), UINT32_C(0x0067F6C0), UINT32_C(0x001B5F25), UINT32_C(0x004F5799), UINT32_C(0x0079A7BA), UINT32_C(0x0001E9CA), UINT32_C(0x00589410), UINT32_C(0x00348000), UINT32_C(0x007C467F), UINT32_C(0x0068CC15)}, {UINT32_C(0x00BFD773), UINT32_C(0x000B128F), UINT32_C(0x0035E63D), UINT32_C(0x00C836C1), UINT32_C(0x0017BDFE), UINT32_C(0x006CFD71), UINT32_C(0x00373B9C), UINT32_C(0x0057EAF9), UINT32_C(0x002A01CD), UINT32_C(0x0074D14F), UINT32_C(0x00721C85)}}, {{UINT32_C(0x0056BC62), UINT32_C(0x000D23A6), UINT32_C(0x0078FE76), UINT32_C(0x0019A73D), UINT32_C(0x00091B6B), UINT32_C(0x0005C60B), UINT32_C(0x0065104B), UINT32_C(0x0065A4B3), UINT32_C(0x005D0C5A), UINT32_C(0x002E8DB5), UINT32_C(0x00718081)}, {UINT32_C(0x00EF69D9), UINT32_C(0x006C1FDD), UINT32_C(0x0065A57D), UINT32_C(0x00BC2B7B), UINT32_C(0x006DB6EB), UINT32_C(0x001AFD11), UINT32_C(0x00605819), UINT32_C(0x008E9270), UINT32_C(0x005C23F4), UINT32_C(0x005067EB), UINT32_C(0x00598190)}}, {{UINT32_C(0x00EF9F96), UINT32_C(0x00510C22), UINT32_C(0x001E5EED), UINT32_C(0x003B03E5), UINT32_C(0x005C6020), UINT32_C(0x003C2BB6), UINT32_C(0x0035FD52), UINT32_C(0x00A6A7F3), UINT32_C(0x000128B7), UINT32_C(0x001E45E8), UINT32_C(0x0049EFAA)}, {UINT32_C(0x006E0992), UINT32_C(0x0018EA4E), UINT32_C(0x00004761), UINT32_C(0x00CFE527), UINT32_C(0x0039B16F), UINT32_C(0x0017BAE9), UINT32_C(0x0057DC05), UINT32_C(0x00982F6B), UINT32_C(0x001D3209), UINT32_C(0x0019FC51), UINT32_C(0x000F4184)}}, {{UINT32_C(0x001EBCA4), UINT32_C(0x001ECDDD), UINT32_C(0x0009CED1), UINT32_C(0x00785BD4), UINT32_C(0x005F74D6), UINT32_C(0x00589B35), UINT32_C(0x0026267C), UINT32_C(0x003A1A20), UINT32_C(0x00148BA6), UINT32_C(0x00078BFB), UINT32_C(0x0057564D)}, {UINT32_C(0x008FB356), UINT32_C(0x00195CBB), UINT32_C(0x003A2D22), UINT32_C(0x0015DEC8), UINT32_C(0x00287F6A), UINT32_C(0x007C4179), UINT32_C(0x0078B244), UINT32_C(0x00013AE9), UINT32_C(0x004FD9D1), UINT32_C(0x005916FD), UINT32_C(0x007AAB2B)}}, {{UINT32_C(0x005AE235), UINT32_C(0x004A7074), UINT32_C(0x006D38A5), UINT32_C(0x00A5B778), UINT32_C(0x00192A8E), UINT32_C(0x00292200), UINT32_C(0x00536809), UINT32_C(0x00C5FA0A), UINT32_C(0x007335A7), UINT32_C(0x007A9B01), UINT32_C(0x006B8F21)}, {UINT32_C(0x00FC9D22), UINT32_C(0x005462CC), UINT32_C(0x0011E27E), UINT32_C(0x00A16304), UINT32_C(0x002252C2), UINT32_C(0x00065957), UINT32_C(0x000FB44C), UINT32_C(0x00507E75), UINT32_C(0x004C7390), UINT32_C(0x002880F2), UINT32_C(0x0011F9DC)}}, {{UINT32_C(0x008982F2), UINT32_C(0x005E0F01), UINT32_C(0x00191A83), UINT32_C(0x00B79DFB), UINT32_C(0x0014F23A), UINT32_C(0x005BFFB9), UINT32_C(0x00679DCA), UINT32_C(0x00FDEBA3), UINT32_C(0x007A5C5D), UINT32_C(0x00317F01), UINT32_C(0x0005F996)}, {UINT32_C(0x002F393C), UINT32_C(0x0057EA31), UINT32_C(0x0041F969), UINT32_C(0x0060EB85), UINT32_C(0x0018762F), UINT32_C(0x0034FF1A), UINT32_C(0x006E4F64), UINT32_C(0x00E85223), UINT32_C(0x00721BD5), UINT32_C(0x005695D8), UINT32_C(0x00735FC8)}}, {{UINT32_C(0x000FF37D), UINT32_C(0x001EE6D5), UINT32_C(0x0059B657), UINT32_C(0x0059218D), UINT32_C(0x005D7413), UINT32_C(0x0016DC74), UINT32_C(0x00245CE2), UINT32_C(0x009176FC), UINT32_C(0x00140786), UINT32_C(0x00123E16), UINT32_C(0x0014C417)}, {UINT32_C(0x008C5660), UINT32_C(0x004AB42B), UINT32_C(0x006F788D), UINT32_C(0x004C5639), UINT32_C(0x00527C63), UINT32_C(0x0076AD8C), UINT32_C(0x000E1CD3), UINT32_C(0x00905B46), UINT32_C(0x00362085), UINT32_C(0x0005BCA4), UINT32_C(0x005143C9)}}, {{UINT32_C(0x0003CB83), UINT32_C(0x00303CF6), UINT32_C(0x004A9EA9), UINT32_C(0x0045E684), UINT32_C(0x00510A34), UINT32_C(0x007BDA22), UINT32_C(0x004947E0), UINT32_C(0x004AE474), UINT32_C(0x000566E6), UINT32_C(0x001C9AA5), UINT32_C(0x002791D8)}, {UINT32_C(0x008D0BF2), UINT32_C(0x0042016F), UINT32_C(0x00669D0C), UINT32_C(0x009942A6), UINT32_C(0x00694F9B), UINT32_C(0x007DA32E), UINT32_C(0x005BE0ED), UINT32_C(0x00CB0DE0), UINT32_C(0x006A8967), UINT32_C(0x000AC39B), UINT32_C(0x003B3E68)}}, {{UINT32_C(0x0060D714), UINT32_C(0x004F6454), UINT32_C(0x00061D11), UINT32_C(0x00C2AA2D), UINT32_C(0x001269D9), UINT32_C(0x0045B4EB), UINT32_C(0x00452BA7), UINT32_C(0x001C10D3), UINT32_C(0x00468D4A), UINT32_C(0x002EFCCA), UINT32_C(0x006DE69E)}, {UINT32_C(0x00CCB9AA), UINT32_C(0x005E4AAD), UINT32_C(0x0034AB4F), UINT32_C(0x00451715), UINT32_C(0x00742A4D), UINT32_C(0x0054F77E), UINT32_C(0x000E11C5), UINT32_C(0x00848202), UINT32_C(0x006F4690), UINT32_C(0x00429DB2), UINT32_C(0x00063397)}}, {{UINT32_C(0x00E679A9), UINT32_C(0x000630F0), UINT32_C(0x0054132F), UINT32_C(0x0028E457), UINT32_C(0x00530D92), UINT32_C(0x002D81BE), UINT32_C(0x006D4DA3), UINT32_C(0x00DD8F12), UINT32_C(0x005AEF2B), UINT32_C(0x00681D79), UINT32_C(0x004F4E27)}, {UINT32_C(0x00452CC5), UINT32_C(0x006066A9), UINT32_C(0x00586F19), UINT32_C(0x00DCA842), UINT32_C(0x003F3915), UINT32_C(0x007F124C), UINT32_C(0x005A982F), UINT32_C(0x00232890), UINT32_C(0x006759D7), UINT32_C(0x005451F1), UINT32_C(0x001EBD44)}}, {{UINT32_C(0x00FA4A07), UINT32_C(0x0030B22D), UINT32_C(0x00241069), UINT32_C(0x00DE41E0), UINT32_C(0x004CE4D7), UINT32_C(0x002D9D3C), UINT32_C(0x001677BA), UINT32_C(0x00980ED6), UINT32_C(0x0031C47B), UINT32_C(0x002ED227), UINT32_C(0x00159AD5)}, {UINT32_C(0x0089C1F3), UINT32_C(0x0064AFBA), UINT32_C(0x0029E45B), UINT32_C(0x00032AD8), UINT32_C(0x002AB7FA), UINT32_C(0x00667A12), UINT32_C(0x0057ACD4), UINT32_C(0x006C9B6D), UINT32_C(0x00407D38), UINT32_C(0x00420BB2), UINT32_C(0x0026F2DA)}}, {{UINT32_C(0x00C85447), UINT32_C(0x00186902), UINT32_C(0x00714C9C), UINT32_C(0x003E0E1B), UINT32_C(0x0079A719), UINT32_C(0x003E4DED), UINT32_C(0x0059E9D8), UINT32_C(0x00C3AC22), UINT32_C(0x00101DB8), UINT32_C(0x0079EC05), UINT32_C(0x00308946)}, {UINT32_C(0x0020BFE2), UINT32_C(0x001B1C97), UINT32_C(0x002068FA), UINT32_C(0x000318E8), UINT32_C(0x003FA490), UINT32_C(0x0071C4A0), UINT32_C(0x000D2962), UINT32_C(0x006D6A13), UINT32_C(0x000B208C), UINT32_C(0x0016C4B8), UINT32_C(0x002FB1EB)}}, {{UINT32_C(0x000FDDD3), UINT32_C(0x000BE560), UINT32_C(0x005F6F50), UINT32_C(0x00CBD86E), UINT32_C(0x005F789C), UINT32_C(0x00796635), UINT32_C(0x0073572E), UINT32_C(0x007EF213), UINT32_C(0x003C20F1), UINT32_C(0x0009D905), UINT32_C(0x00506CBA)}, {UINT32_C(0x0053488D), UINT32_C(0x005470BC), UINT32_C(0x00356DBF), UINT32_C(0x00B92C0A), UINT32_C(0x00576D7C), UINT32_C(0x00258D40), UINT32_C(0x000EC04B), UINT32_C(0x00629848), UINT32_C(0x006EFE8C), UINT32_C(0x002F0536), UINT32_C(0x005F0ED9)}}, {{UINT32_C(0x00941AAB), UINT32_C(0x0016408A), UINT32_C(0x0038B7B4), UINT32_C(0x00D17AD3), UINT32_C(0x00020287), UINT32_C(0x003C98C7), UINT32_C(0x007107B0), UINT32_C(0x00A47BF6), UINT32_C(0x0076D73B), UINT32_C(0x000E9DCA), UINT32_C(0x002D0380)}, {UINT32_C(0x003E14DB), UINT32_C(0x0068545F), UINT32_C(0x00293201), UINT32_C(0x0041E644), UINT32_C(0x0037CC59), UINT32_C(0x0064BF44), UINT32_C(0x004AB432), UINT32_C(0x00222D96), UINT32_C(0x002A1A68), UINT32_C(0x000CA73B), UINT32_C(0x0000759D)}}, {{UINT32_C(0x00B27EE6), UINT32_C(0x00392FAB), UINT32_C(0x006D1511), UINT32_C(0x00DE9390), UINT32_C(0x0053DBF3), UINT32_C(0x003F6EED), UINT32_C(0x001782D6), UINT32_C(0x002A6166), UINT32_C(0x004F448D), UINT32_C(0x004D0F3A), UINT32_C(0x007007C7)}, {UINT32_C(0x00DFE6F7), UINT32_C(0x0032099E), UINT32_C(0x00729E1F), UINT32_C(0x009F5D6F), UINT32_C(0x003A3D25), UINT32_C(0x004DD691), UINT32_C(0x0020FFB0), UINT32_C(0x00CCDE9D), UINT32_C(0x0075D916), UINT32_C(0x00545C21), UINT32_C(0x00240E6D)}}, }, { {{UINT32_C(0x0034E1E6), UINT32_C(0x003047D2), UINT32_C(0x006E4485), UINT32_C(0x007D8C36), UINT32_C(0x00756414), UINT32_C(0x000967CD), UINT32_C(0x004EC80F), UINT32_C(0x00C63288), UINT32_C(0x0073E0FA), UINT32_C(0x007182FF), UINT32_C(0x00263DCE)}, {UINT32_C(0x00462779), UINT32_C(0x001B3A99), UINT32_C(0x0037DBBA), UINT32_C(0x00D2FC96), UINT32_C(0x0064BB40), UINT32_C(0x007363A7), UINT32_C(0x0032772A), UINT32_C(0x00D91E04), UINT32_C(0x001007F8), UINT32_C(0x000AF4EC), UINT32_C(0x00193E0F)}}, {{UINT32_C(0x00FDE1B6), UINT32_C(0x00642789), UINT32_C(0x0001A22B), UINT32_C(0x0053D392), UINT32_C(0x004F3462), UINT32_C(0x007001C5), UINT32_C(0x003757D1), UINT32_C(0x002FF687), UINT32_C(0x002AD0C5), UINT32_C(0x0061905E), UINT32_C(0x0032E050)}, {UINT32_C(0x00586CC6), UINT32_C(0x0029644B), UINT32_C(0x001DCCE2), UINT32_C(0x00242AD5), UINT32_C(0x003A4D19), UINT32_C(0x007EDFA6), UINT32_C(0x00220A76), UINT32_C(0x00DD8BD2), UINT32_C(0x003AFB95), UINT32_C(0x006523B5), UINT32_C(0x0016D460)}}, {{UINT32_C(0x003B3EBD), UINT32_C(0x0059FF35), UINT32_C(0x00646DFD), UINT32_C(0x001C652B), UINT32_C(0x00572E18), UINT32_C(0x007156D0), UINT32_C(0x003125AA), UINT32_C(0x0058C8A8), UINT32_C(0x00383EFA), UINT32_C(0x00270C8A), UINT32_C(0x00071DD1)}, {UINT32_C(0x00E57097), UINT32_C(0x0052391E), UINT32_C(0x0058A14D), UINT32_C(0x0071FABE), UINT32_C(0x0014DDAD), UINT32_C(0x00583150), UINT32_C(0x006E7A1D), UINT32_C(0x0033F6C1), UINT32_C(0x00490296), UINT32_C(0x00414DE6), UINT32_C(0x007218AF)}}, {{UINT32_C(0x00F33C1F), UINT32_C(0x00125893), UINT32_C(0x004FE3D7), UINT32_C(0x00C4A16E), UINT32_C(0x0066739E), UINT32_C(0x0044B06C), UINT32_C(0x0004329B), UINT32_C(0x0040B952), UINT32_C(0x003AB3B6), UINT32_C(0x004B9045), UINT32_C(0x0070EFC5)}, {UINT32_C(0x0004A33D), UINT32_C(0x0060B5F6), UINT32_C(0x001C92D2), UINT32_C(0x0087E4CE), UINT32_C(0x007927E4), UINT32_C(0x00687FEB), UINT32_C(0x0068424F), UINT32_C(0x006E7721), UINT32_C(0x002CB0FB), UINT32_C(0x003E8D7D), UINT32_C(0x00066EEA)}}, {{UINT32_C(0x00893929), UINT32_C(0x00749590), UINT32_C(0x00002975), UINT32_C(0x00359738), UINT32_C(0x0027B81C), UINT32_C(0x007CCA27), UINT32_C(0x00424A06), UINT32_C(0x008EAF50), UINT32_C(0x0015A2BC), UINT32_C(0x00191EEC), UINT32_C(0x0005255A)}, {UINT32_C(0x00F0F1DA), UINT32_C(0x0001F6DC), UINT32_C(0x001636C8), UINT32_C(0x00012664), UINT32_C(0x0026261D), UINT32_C(0x005D425D), UINT32_C(0x004530C6), UINT32_C(0x005C3D03), UINT32_C(0x005543DE), UINT32_C(0x001B43E1), UINT32_C(0x001F7279)}}, {{UINT32_C(0x0073F26A), UINT32_C(0x0068DAE8), UINT32_C(0x00721622), UINT32_C(0x002ABFC5), UINT32_C(0x001AEA78), UINT32_C(0x001C317D), UINT32_C(0x0057A2CE), UINT32_C(0x00D75B07), UINT32_C(0x0011544B), UINT32_C(0x006677F4), UINT32_C(0x004FE8D9)}, {UINT32_C(0x00BD1939), UINT32_C(0x005FA352), UINT32_C(0x004E35F8), UINT32_C(0x002B9D5E), UINT32_C(0x00236E36), UINT32_C(0x00171F6F), UINT32_C(0x001C64C0), UINT32_C(0x0059974C), UINT32_C(0x001A9517), UINT32_C(0x000A0D86), UINT32_C(0x002C5844)}}, {{UINT32_C(0x008028D2), UINT32_C(0x005696DA), UINT32_C(0x00134460), UINT32_C(0x00FFF1CA), UINT32_C(0x003E17C7), UINT32_C(0x00771795), UINT32_C(0x003731A0), UINT32_C(0x004FFEFA), UINT32_C(0x00559D72), UINT32_C(0x0069CD38), UINT32_C(0x0015F09E)}, {UINT32_C(0x00C4C3AD), UINT32_C(0x0074750B), UINT32_C(0x001D026C), UINT32_C(0x00553063), UINT32_C(0x00193906), UINT32_C(0x000134C7), UINT32_C(0x0049B4A1), UINT32_C(0x0049D063), UINT32_C(0x003BF10D), UINT32_C(0x0067632D), UINT32_C(0x00300024)}}, {{UINT32_C(0x00D77453), UINT32_C(0x003D07C0), UINT32_C(0x0019849D), UINT32_C(0x00D631D5), UINT32_C(0x00652BEF), UINT32_C(0x007E6CDE), UINT32_C(0x000D87C3), UINT32_C(0x004951A8), UINT32_C(0x007525CD), UINT32_C(0x0071B08E), UINT32_C(0x00289648)}, {UINT32_C(0x00FD0ECE), UINT32_C(0x000BB7D1), UINT32_C(0x002C9248), UINT32_C(0x004C6FAB), UINT32_C(0x00372A68), UINT32_C(0x000EF891), UINT32_C(0x0020B4A1), UINT32_C(0x000A10A5), UINT32_C(0x006C334E), UINT32_C(0x001CCCB1), UINT32_C(0x00379EBC)}}, {{UINT32_C(0x00D635C8), UINT32_C(0x005DA0CD), UINT32_C(0x000CA1CF), UINT32_C(0x009075FE), UINT32_C(0x001864D7), UINT32_C(0x00375091), UINT32_C(0x00219FB8), UINT32_C(0x0007A85A), UINT32_C(0x006F3E1F), UINT32_C(0x00391318), UINT32_C(0x00247B2A)}, {UINT32_C(0x0002D9FB), UINT32_C(0x007FD052), UINT32_C(0x002C2377), UINT32_C(0x00A71137), UINT32_C(0x0021AD82), UINT32_C(0x003DB97F), UINT32_C(0x007E1B6E), UINT32_C(0x00C0C7AE), UINT32_C(0x00742A7A), UINT32_C(0x0024DE99), UINT32_C(0x004E9051)}}, {{UINT32_C(0x00DADBAE), UINT32_C(0x00202B8D), UINT32_C(0x00632043), UINT32_C(0x0041281C), UINT32_C(0x001EBD2E), UINT32_C(0x007221A9), UINT32_C(0x006395E7), UINT32_C(0x0009A072), UINT32_C(0x006E872D), UINT32_C(0x006A1915), UINT32_C(0x00538853)}, {UINT32_C(0x00071C4B), UINT32_C(0x007A19E1), UINT32_C(0x007C2689), UINT32_C(0x007FC063), UINT32_C(0x001C8283), UINT32_C(0x0067DED1), UINT32_C(0x00667A3F), UINT32_C(0x00AF7018), UINT32_C(0x0038D342), UINT32_C(0x000616D4), UINT32_C(0x0023B78B)}}, {{UINT32_C(0x002693D0), UINT32_C(0x0078F96C), UINT32_C(0x00571654), UINT32_C(0x0014B152), UINT32_C(0x000B8F3A), UINT32_C(0x004480F8), UINT32_C(0x004AA85E), UINT32_C(0x00A2071C), UINT32_C(0x005BF5E5), UINT32_C(0x003DF984), UINT32_C(0x00290208)}, {UINT32_C(0x00574625), UINT32_C(0x004E5F90), UINT32_C(0x0024BEE7), UINT32_C(0x0018C1AA), UINT32_C(0x000E42CE), UINT32_C(0x00353C8A), UINT32_C(0x0040F203), UINT32_C(0x00898F9A), UINT32_C(0x003FBFD0), UINT32_C(0x0043C31B), UINT32_C(0x004E5E2E)}}, {{UINT32_C(0x0067D25A), UINT32_C(0x0031F139), UINT32_C(0x005BD832), UINT32_C(0x0058FC46), UINT32_C(0x002312E5), UINT32_C(0x00722F75), UINT32_C(0x00300A46), UINT32_C(0x000CD2F3), UINT32_C(0x0070A1F2), UINT32_C(0x001BBF1B), UINT32_C(0x005DAD68)}, {UINT32_C(0x0027F5D0), UINT32_C(0x000A7235), UINT32_C(0x00550E6D), UINT32_C(0x007E271C), UINT32_C(0x003F1A3C), UINT32_C(0x003F545A), UINT32_C(0x000F465A), UINT32_C(0x006E0289), UINT32_C(0x0008E2B8), UINT32_C(0x00005661), UINT32_C(0x007DE299)}}, {{UINT32_C(0x00548202), UINT32_C(0x00281B46), UINT32_C(0x004C8632), UINT32_C(0x008FDE33), UINT32_C(0x00254E52), UINT32_C(0x00768F00), UINT32_C(0x001C3AD6), UINT32_C(0x002D85C6), UINT32_C(0x00187542), UINT32_C(0x005F5A9E), UINT32_C(0x0079B908)}, {UINT32_C(0x00C7C809), UINT32_C(0x001FE799), UINT32_C(0x0042AF63), UINT32_C(0x004EE64E), UINT32_C(0x001273EE), UINT32_C(0x00609BF2), UINT32_C(0x0022BBF9), UINT32_C(0x0022DE3E), UINT32_C(0x00591E73), UINT32_C(0x004FC701), UINT32_C(0x0007E865)}}, {{UINT32_C(0x0098B574), UINT32_C(0x003DC53F), UINT32_C(0x0019A4E6), UINT32_C(0x00CBD70F), UINT32_C(0x0047B9D0), UINT32_C(0x005579C6), UINT32_C(0x00354F41), UINT32_C(0x00D2DC50), UINT32_C(0x00329B79), UINT32_C(0x0024242A), UINT32_C(0x0066FBA2)}, {UINT32_C(0x0085FC08), UINT32_C(0x0049ABA0), UINT32_C(0x0002CD57), UINT32_C(0x0051C421), UINT32_C(0x00115DB3), UINT32_C(0x0066D6D5), UINT32_C(0x00303B94), UINT32_C(0x00A604BB), UINT32_C(0x00685047), UINT32_C(0x003158DF), UINT32_C(0x007ED9BF)}}, {{UINT32_C(0x002AFA23), UINT32_C(0x0040ECF5), UINT32_C(0x004AF2B2), UINT32_C(0x00326E4C), UINT32_C(0x0057D312), UINT32_C(0x006C5108), UINT32_C(0x0039F6D7), UINT32_C(0x0036F6BA), UINT32_C(0x005598C8), UINT32_C(0x003CB53C), UINT32_C(0x0034AA18)}, {UINT32_C(0x00CF42AB), UINT32_C(0x007A1089), UINT32_C(0x00798D02), UINT32_C(0x00EA386D), UINT32_C(0x0011472E), UINT32_C(0x005332E0), UINT32_C(0x0038B97B), UINT32_C(0x00AD3634), UINT32_C(0x0008C5EB), UINT32_C(0x005BED65), UINT32_C(0x0001B9BD)}}, {{UINT32_C(0x00761113), UINT32_C(0x0018F0E8), UINT32_C(0x003FCFC0), UINT32_C(0x0015BEF5), UINT32_C(0x002AEA52), UINT32_C(0x00396A8E), UINT32_C(0x004C295C), UINT32_C(0x001BAEDF), UINT32_C(0x00030D39), UINT32_C(0x005A7E8D), UINT32_C(0x002A1B12)}, {UINT32_C(0x005CE5E2), UINT32_C(0x004CFE4B), UINT32_C(0x0030A399), UINT32_C(0x0040EA7A), UINT32_C(0x007F164F), UINT32_C(0x004DB6D5), UINT32_C(0x00686A3B), UINT32_C(0x00DBA200), UINT32_C(0x00296140), UINT32_C(0x004D478A), UINT32_C(0x006AD41C)}}, }, { {{UINT32_C(0x00B89E8E), UINT32_C(0x002A572E), UINT32_C(0x005B3E1F), UINT32_C(0x00E54DD0), UINT32_C(0x00162459), UINT32_C(0x0027E7ED), UINT32_C(0x005B4CC3), UINT32_C(0x00DB4F26), UINT32_C(0x007BE5F3), UINT32_C(0x007C9929), UINT32_C(0x00555F44)}, {UINT32_C(0x00CFD61D), UINT32_C(0x0052D610), UINT32_C(0x0060404C), UINT32_C(0x003743F5), UINT32_C(0x00055514), UINT32_C(0x000267D5), UINT32_C(0x006087D4), UINT32_C(0x008C2531), UINT32_C(0x0051466E), UINT32_C(0x003C7CCA), UINT32_C(0x005C334A)}}, {{UINT32_C(0x00E24828), UINT32_C(0x001F7423), UINT32_C(0x007D8091), UINT32_C(0x00316505), UINT32_C(0x0079C9BB), UINT32_C(0x007F35D0), UINT32_C(0x00152C91), UINT32_C(0x00E33D9C), UINT32_C(0x0052C723), UINT32_C(0x0058776C), UINT32_C(0x001FEDFD)}, {UINT32_C(0x0004E1B6), UINT32_C(0x006EE7E1), UINT32_C(0x0072C66F), UINT32_C(0x00B26D30), UINT32_C(0x006FB6AE), UINT32_C(0x0020B88A), UINT32_C(0x0009F8CA), UINT32_C(0x00BCD95A), UINT32_C(0x001944E3), UINT32_C(0x007072F6), UINT32_C(0x005A26A1)}}, {{UINT32_C(0x00F21E4A), UINT32_C(0x0039DE0D), UINT32_C(0x002C0B04), UINT32_C(0x0042B820), UINT32_C(0x00260CE6), UINT32_C(0x00469276), UINT32_C(0x000EFD81), UINT32_C(0x0053E1E3), UINT32_C(0x0011D541), UINT32_C(0x003278ED), UINT32_C(0x0024190E)}, {UINT32_C(0x009C86A2), UINT32_C(0x004CF336), UINT32_C(0x00666B88), UINT32_C(0x00B34AD6), UINT32_C(0x0012660F), UINT32_C(0x004603DC), UINT32_C(0x001C4603), UINT32_C(0x00B51A55), UINT32_C(0x00032E05), UINT32_C(0x00761758), UINT32_C(0x002462A8)}}, {{UINT32_C(0x00A8C3D3), UINT32_C(0x0042BDA6), UINT32_C(0x0073898B), UINT32_C(0x009F00CE), UINT32_C(0x006C9105), UINT32_C(0x0077CDB6), UINT32_C(0x002CCE5B), UINT32_C(0x0017C55E), UINT32_C(0x00274A09), UINT32_C(0x0061058B), UINT32_C(0x0025F3E2)}, {UINT32_C(0x000C3DB3), UINT32_C(0x006143BB), UINT32_C(0x0030EF0F), UINT32_C(0x00E06EFA), UINT32_C(0x005B5205), UINT32_C(0x002928C1), UINT32_C(0x00011BD1), UINT32_C(0x004BD906), UINT32_C(0x003EA381), UINT32_C(0x005B8BDD), UINT32_C(0x00141CF4)}}, {{UINT32_C(0x00B9F037), UINT32_C(0x000EB500), UINT32_C(0x00231F4E), UINT32_C(0x009E6670), UINT32_C(0x0022155C), UINT32_C(0x005CD76F), UINT32_C(0x00777013), UINT32_C(0x001E0C79), UINT32_C(0x004FFBC6), UINT32_C(0x0022246A), UINT32_C(0x00411134)}, {UINT32_C(0x00D2A8D9), UINT32_C(0x0019D3D6), UINT32_C(0x002D8C16), UINT32_C(0x00BFC55D), UINT32_C(0x00409145), UINT32_C(0x000A3CB7), UINT32_C(0x00705773), UINT32_C(0x00018E32), UINT32_C(0x002A408A), UINT32_C(0x0002439B), UINT32_C(0x00585C81)}}, {{UINT32_C(0x001B067A), UINT32_C(0x003501B0), UINT32_C(0x006FF5D5), UINT32_C(0x00266911), UINT32_C(0x00573D9E), UINT32_C(0x004CE3AE), UINT32_C(0x007BD3A7), UINT32_C(0x004986D0), UINT32_C(0x0036391A), UINT32_C(0x004E3053), UINT32_C(0x007A996A)}, {UINT32_C(0x00371080), UINT32_C(0x0037E042), UINT32_C(0x002DCB8F), UINT32_C(0x00A79F2A), UINT32_C(0x000C73DB), UINT32_C(0x007B8926), UINT32_C(0x004BCA76), UINT32_C(0x00F1D149), UINT32_C(0x0059029B), UINT32_C(0x0057F067), UINT32_C(0x006743F9)}}, {{UINT32_C(0x00939BAE), UINT32_C(0x003B8FB7), UINT32_C(0x002AC961), UINT32_C(0x007D0A3C), UINT32_C(0x00112565), UINT32_C(0x0015EA2E), UINT32_C(0x005F39D5), UINT32_C(0x008AB56C), UINT32_C(0x000E21E3), UINT32_C(0x00700E40), UINT32_C(0x00394DCD)}, {UINT32_C(0x003A2295), UINT32_C(0x00027730), UINT32_C(0x0048C762), UINT32_C(0x009954A7), UINT32_C(0x007E32DB), UINT32_C(0x0043302E), UINT32_C(0x00740102), UINT32_C(0x001190E7), UINT32_C(0x0027D7B2), UINT32_C(0x005CEE50), UINT32_C(0x007A578D)}}, {{UINT32_C(0x008BBA28), UINT32_C(0x004A0FD7), UINT32_C(0x007AC31D), UINT32_C(0x0037176E), UINT32_C(0x0076A050), UINT32_C(0x0040AB46), UINT32_C(0x005F95F7), UINT32_C(0x000BE19A), UINT32_C(0x00098D24), UINT32_C(0x005A9458), UINT32_C(0x000A1117)}, {UINT32_C(0x00E7EE0C), UINT32_C(0x00242C41), UINT32_C(0x0023CBF4), UINT32_C(0x001C57A1), UINT32_C(0x003AC093), UINT32_C(0x0008AED2), UINT32_C(0x0030388D), UINT32_C(0x00EC955F), UINT32_C(0x00714125), UINT32_C(0x002CEB59), UINT32_C(0x0043A695)}}, {{UINT32_C(0x0078C305), UINT32_C(0x0068D7A0), UINT32_C(0x0078F31C), UINT32_C(0x002557F3), UINT32_C(0x00154BCD), UINT32_C(0x000FD4BA), UINT32_C(0x0049870F), UINT32_C(0x00FD3D6C), UINT32_C(0x004A74E9), UINT32_C(0x0073A1EA), UINT32_C(0x00712628)}, {UINT32_C(0x0097A50E), UINT32_C(0x003814D7), UINT32_C(0x001533AE), UINT32_C(0x00DC57FF), UINT32_C(0x0038CC54), UINT32_C(0x0023F786), UINT32_C(0x0075EAC5), UINT32_C(0x0053BC5A), UINT32_C(0x000D1025), UINT32_C(0x00352FF8), UINT32_C(0x007BAA67)}}, {{UINT32_C(0x004B5256), UINT32_C(0x0074BDB3), UINT32_C(0x003A77BB), UINT32_C(0x00596C90), UINT32_C(0x005F0076), UINT32_C(0x00682016), UINT32_C(0x000D8938), UINT32_C(0x00EA0E74), UINT32_C(0x00385C25), UINT32_C(0x001D6446), UINT32_C(0x007F967C)}, {UINT32_C(0x00F7351C), UINT32_C(0x005B1299), UINT32_C(0x0077959F), UINT32_C(0x0021D3B9), UINT32_C(0x006DF80F), UINT32_C(0x004DA025), UINT32_C(0x00515CCC), UINT32_C(0x009FB790), UINT32_C(0x00063FF3), UINT32_C(0x0076D77A), UINT32_C(0x00625098)}}, {{UINT32_C(0x007F1E6E), UINT32_C(0x0003AF4F), UINT32_C(0x00147BDB), UINT32_C(0x0070598D), UINT32_C(0x0026D23F), UINT32_C(0x004A29CD), UINT32_C(0x007D8AFD), UINT32_C(0x00842D17), UINT32_C(0x0027D785), UINT32_C(0x003D4F02), UINT32_C(0x001B48F1)}, {UINT32_C(0x001DD7E4), UINT32_C(0x0048EA30), UINT32_C(0x0031E587), UINT32_C(0x00DA778D), UINT32_C(0x00028302), UINT32_C(0x0002B20F), UINT32_C(0x002CA85D), UINT32_C(0x009940A5), UINT32_C(0x0050706A), UINT32_C(0x0027C655), UINT32_C(0x0065E5F7)}}, {{UINT32_C(0x00339162), UINT32_C(0x00747568), UINT32_C(0x002DE761), UINT32_C(0x00ABF96A), UINT32_C(0x004ED981), UINT32_C(0x0068131A), UINT32_C(0x007755D1), UINT32_C(0x00A26F42), UINT32_C(0x00052444), UINT32_C(0x0005B629), UINT32_C(0x00374DF9)}, {UINT32_C(0x00CF14E5), UINT32_C(0x0002B073), UINT32_C(0x002FCF27), UINT32_C(0x009F2568), UINT32_C(0x000C77F1), UINT32_C(0x004F9C85), UINT32_C(0x00564AE1), UINT32_C(0x0084E7B1), UINT32_C(0x002F9F7C), UINT32_C(0x0079F6BA), UINT32_C(0x0050141F)}}, {{UINT32_C(0x005DDB32), UINT32_C(0x006EEA5F), UINT32_C(0x001A6DBD), UINT32_C(0x0037896C), UINT32_C(0x005312EB), UINT32_C(0x00224556), UINT32_C(0x005B967C), UINT32_C(0x00E31403), UINT32_C(0x00210FEC), UINT32_C(0x0039AB6E), UINT32_C(0x0056A5EB)}, {UINT32_C(0x0020A6E2), UINT32_C(0x004202D4), UINT32_C(0x0049C90D), UINT32_C(0x00EAF4CB), UINT32_C(0x002618C6), UINT32_C(0x007417CB), UINT32_C(0x00662261), UINT32_C(0x0019A617), UINT32_C(0x0033B387), UINT32_C(0x0048BFFF), UINT32_C(0x004F79A1)}}, {{UINT32_C(0x0058277B), UINT32_C(0x001F5BDD), UINT32_C(0x004376CA), UINT32_C(0x00F548FC), UINT32_C(0x00326E00), UINT32_C(0x001B763D), UINT32_C(0x000FD0C0), UINT32_C(0x0077DA31), UINT32_C(0x00187E89), UINT32_C(0x0079FC29), UINT32_C(0x007A4AF6)}, {UINT32_C(0x006FE0E1), UINT32_C(0x00669EB7), UINT32_C(0x002BEF48), UINT32_C(0x00F75C67), UINT32_C(0x005F6D0F), UINT32_C(0x000A2CD9), UINT32_C(0x006E41E5), UINT32_C(0x003F37B9), UINT32_C(0x002D2442), UINT32_C(0x0036829D), UINT32_C(0x0065DA14)}}, {{UINT32_C(0x004326A2), UINT32_C(0x0040CBD8), UINT32_C(0x00652915), UINT32_C(0x000F2B54), UINT32_C(0x0016C330), UINT32_C(0x0043F920), UINT32_C(0x0030AF01), UINT32_C(0x008C5D38), UINT32_C(0x000DEDBF), UINT32_C(0x00496F1B), UINT32_C(0x0035CE15)}, {UINT32_C(0x005CD536), UINT32_C(0x0003476A), UINT32_C(0x001458E4), UINT32_C(0x0066184B), UINT32_C(0x001373E4), UINT32_C(0x002362B2), UINT32_C(0x0047ADDA), UINT32_C(0x00CFDE00), UINT32_C(0x00294ACC), UINT32_C(0x005B07F4), UINT32_C(0x003AAA59)}}, {{UINT32_C(0x00351DCE), UINT32_C(0x00531F74), UINT32_C(0x0070FE9B), UINT32_C(0x0055D5FF), UINT32_C(0x00091F6C), UINT32_C(0x004713C4), UINT32_C(0x0043D715), UINT32_C(0x00133A66), UINT32_C(0x00274DDB), UINT32_C(0x001421FF), UINT32_C(0x00154461)}, {UINT32_C(0x002EE3C1), UINT32_C(0x001BD275), UINT32_C(0x00205CA7), UINT32_C(0x008985BF), UINT32_C(0x0065F85E), UINT32_C(0x00342C28), UINT32_C(0x0024E23D), UINT32_C(0x004B7B25), UINT32_C(0x002AE72E), UINT32_C(0x004A5D4D), UINT32_C(0x00296425)}}, }, { {{UINT32_C(0x003BB6FE), UINT32_C(0x006E95CA), UINT32_C(0x007C12DB), UINT32_C(0x00C2B2E1), UINT32_C(0x0078CF5B), UINT32_C(0x0008D9AA), UINT32_C(0x00545B0C), UINT32_C(0x00966933), UINT32_C(0x005E90BF), UINT32_C(0x00127A50), UINT32_C(0x0021E6D5)}, {UINT32_C(0x009BB07D), UINT32_C(0x003CE9C9), UINT32_C(0x00575061), UINT32_C(0x009D607C), UINT32_C(0x002C0630), UINT32_C(0x004CF2F4), UINT32_C(0x007C5067), UINT32_C(0x007DB3FF), UINT32_C(0x0078833C), UINT32_C(0x00381D12), UINT32_C(0x005C6CD7)}}, {{UINT32_C(0x008392C8), UINT32_C(0x003BA804), UINT32_C(0x00437AEB), UINT32_C(0x000AA5A0), UINT32_C(0x00428295), UINT32_C(0x0022CF84), UINT32_C(0x00583AB2), UINT32_C(0x00E78C0A), UINT32_C(0x00076BFD), UINT32_C(0x00340AF2), UINT32_C(0x002C576A)}, {UINT32_C(0x006E6DE1), UINT32_C(0x0018AAF8), UINT32_C(0x003B09EA), UINT32_C(0x00461A4F), UINT32_C(0x00652C71), UINT32_C(0x00773D62), UINT32_C(0x0007F33A), UINT32_C(0x00FB0128), UINT32_C(0x0023226A), UINT32_C(0x005272BE), UINT32_C(0x0077A80C)}}, {{UINT32_C(0x00243A23), UINT32_C(0x0059EE8D), UINT32_C(0x005ABC02), UINT32_C(0x00A76F1C), UINT32_C(0x005303B8), UINT32_C(0x002878BC), UINT32_C(0x000DC6D0), UINT32_C(0x002F5739), UINT32_C(0x004328D8), UINT32_C(0x006619B0), UINT32_C(0x00582761)}, {UINT32_C(0x005DD89C), UINT32_C(0x0040AF03), UINT32_C(0x00664609), UINT32_C(0x0064DED7), UINT32_C(0x00321F34), UINT32_C(0x00479994), UINT32_C(0x002A3457), UINT32_C(0x0081039C), UINT32_C(0x001FB033), UINT32_C(0x003E4D77), UINT32_C(0x00381514)}}, {{UINT32_C(0x0047A6CB), UINT32_C(0x00158718), UINT32_C(0x00209322), UINT32_C(0x00E170DB), UINT32_C(0x00240A83), UINT32_C(0x004CD315), UINT32_C(0x0028E399), UINT32_C(0x005AE653), UINT32_C(0x00066B28), UINT32_C(0x001BBE06), UINT32_C(0x002C404C)}, {UINT32_C(0x006A93D6), UINT32_C(0x0012DF82), UINT32_C(0x006B54F4), UINT32_C(0x00062344), UINT32_C(0x003FC9ED), UINT32_C(0x007DDB29), UINT32_C(0x00101680), UINT32_C(0x00369C91), UINT32_C(0x0074AA99), UINT32_C(0x00205D4F), UINT32_C(0x000E516B)}}, {{UINT32_C(0x0032C66D), UINT32_C(0x005546A7), UINT32_C(0x006BB8DE), UINT32_C(0x008576D8), UINT32_C(0x00412063), UINT32_C(0x00644D0C), UINT32_C(0x00693A63), UINT32_C(0x004429A2), UINT32_C(0x002AFB3C), UINT32_C(0x005AB6A4), UINT32_C(0x0061829F)}, {UINT32_C(0x00743208), UINT32_C(0x0077B5BB), UINT32_C(0x0060700C), UINT32_C(0x003878D7), UINT32_C(0x0043EA8E), UINT32_C(0x0006C990), UINT32_C(0x001AD279), UINT32_C(0x0037199C), UINT32_C(0x001602AC), UINT32_C(0x006E6867), UINT32_C(0x000200A7)}}, {{UINT32_C(0x0005C9B6), UINT32_C(0x0070BA76), UINT32_C(0x0032093C), UINT32_C(0x00D7302E), UINT32_C(0x003DC75F), UINT32_C(0x0032241E), UINT32_C(0x0020E178), UINT32_C(0x009DB55A), UINT32_C(0x00105792), UINT32_C(0x00223EF7), UINT32_C(0x0004DBD3)}, {UINT32_C(0x006731CF), UINT32_C(0x004DCCDF), UINT32_C(0x006C712B), UINT32_C(0x002963CA), UINT32_C(0x0033C6EB), UINT32_C(0x002918CB), UINT32_C(0x0042143A), UINT32_C(0x008D3632), UINT32_C(0x0047755A), UINT32_C(0x00258338), UINT32_C(0x00497444)}}, {{UINT32_C(0x00ACB58A), UINT32_C(0x0003E23D), UINT32_C(0x0035FF81), UINT32_C(0x008936EA), UINT32_C(0x006A5CF4), UINT32_C(0x0024FFC8), UINT32_C(0x0061C56B), UINT32_C(0x000E421B), UINT32_C(0x005C7741), UINT32_C(0x006A1FF8), UINT32_C(0x006599DD)}, {UINT32_C(0x00E19FA2), UINT32_C(0x00129BD5), UINT32_C(0x00106B22), UINT32_C(0x007D7780), UINT32_C(0x007F0877), UINT32_C(0x0041300E), UINT32_C(0x004E679A), UINT32_C(0x00EBE8AA), UINT32_C(0x001C3277), UINT32_C(0x006E99F9), UINT32_C(0x00427DB9)}}, {{UINT32_C(0x00184DFD), UINT32_C(0x00147505), UINT32_C(0x0040EDB6), UINT32_C(0x0096E71F), UINT32_C(0x00096D68), UINT32_C(0x007288B9), UINT32_C(0x0039FAE7), UINT32_C(0x009E3B19), UINT32_C(0x0059525F), UINT32_C(0x0042A224), UINT32_C(0x0032E991)}, {UINT32_C(0x004D3074), UINT32_C(0x0055D970), UINT32_C(0x004FF6C8), UINT32_C(0x0015270D), UINT32_C(0x007770DF), UINT32_C(0x0042C9FB), UINT32_C(0x005CA513), UINT32_C(0x007D00C3), UINT32_C(0x0030A146), UINT32_C(0x005D74BB), UINT32_C(0x007A9637)}}, {{UINT32_C(0x003DB0DD), UINT32_C(0x0011ADC8), UINT32_C(0x00612266), UINT32_C(0x002F2C19), UINT32_C(0x002DF82D), UINT32_C(0x0028B03E), UINT32_C(0x006C2E98), UINT32_C(0x00FFA685), UINT32_C(0x0038F8D0), UINT32_C(0x003B9283), UINT32_C(0x007D2975)}, {UINT32_C(0x007D306E), UINT32_C(0x007F5E20), UINT32_C(0x0047A55D), UINT32_C(0x00F980FF), UINT32_C(0x001331A2), UINT32_C(0x007D74A9), UINT32_C(0x005FEE08), UINT32_C(0x006A7C2A), UINT32_C(0x007C37BB), UINT32_C(0x0043D3B4), UINT32_C(0x006F3CFD)}}, {{UINT32_C(0x000EC696), UINT32_C(0x005185A9), UINT32_C(0x0000BE2C), UINT32_C(0x009F985A), UINT32_C(0x004E2379), UINT32_C(0x005CE286), UINT32_C(0x005F05DF), UINT32_C(0x0086A2D2), UINT32_C(0x0072A145), UINT32_C(0x002B10E0), UINT32_C(0x004C8EE4)}, {UINT32_C(0x00E985B8), UINT32_C(0x002A46B5), UINT32_C(0x002FBBBF), UINT32_C(0x00C296A5), UINT32_C(0x0035DCA7), UINT32_C(0x00646900), UINT32_C(0x003C51B5), UINT32_C(0x00211EA2), UINT32_C(0x000B20B3), UINT32_C(0x005E0254), UINT32_C(0x000A4FE9)}}, {{UINT32_C(0x0086A4E4), UINT32_C(0x00394FC7), UINT32_C(0x0062AD1E), UINT32_C(0x0070C064), UINT32_C(0x000D4375), UINT32_C(0x0069383E), UINT32_C(0x006DCB72), UINT32_C(0x0068E22C), UINT32_C(0x0065F231), UINT32_C(0x0005483D), UINT32_C(0x005C9926)}, {UINT32_C(0x0027C9BA), UINT32_C(0x004616BF), UINT32_C(0x00793172), UINT32_C(0x00E307EF), UINT32_C(0x001C58E0), UINT32_C(0x0075518F), UINT32_C(0x00704D77), UINT32_C(0x0096D516), UINT32_C(0x000514C7), UINT32_C(0x004550F6), UINT32_C(0x0002F839)}}, {{UINT32_C(0x003EB3CB), UINT32_C(0x000B54E8), UINT32_C(0x000BB0B6), UINT32_C(0x000473CB), UINT32_C(0x007A4D1B), UINT32_C(0x001A1E96), UINT32_C(0x00676B16), UINT32_C(0x002A64AB), UINT32_C(0x0000465B), UINT32_C(0x0030BAF8), UINT32_C(0x0032A6EC)}, {UINT32_C(0x007B903F), UINT32_C(0x00594A72), UINT32_C(0x005679C7), UINT32_C(0x0001348E), UINT32_C(0x00049ACD), UINT32_C(0x0076157B), UINT32_C(0x000823E7), UINT32_C(0x00956AAC), UINT32_C(0x00564C9C), UINT32_C(0x006B7D47), UINT32_C(0x00184705)}}, {{UINT32_C(0x00582997), UINT32_C(0x0042C43A), UINT32_C(0x001B2A5F), UINT32_C(0x00C58D80), UINT32_C(0x00027426), UINT32_C(0x00767F7F), UINT32_C(0x0029FE8F), UINT32_C(0x0011D5E8), UINT32_C(0x005F6EDA), UINT32_C(0x004E2E7A), UINT32_C(0x006DA644)}, {UINT32_C(0x005F3E5D), UINT32_C(0x007EB9DF), UINT32_C(0x00744FFF), UINT32_C(0x0011E773), UINT32_C(0x00365A41), UINT32_C(0x0069DCE3), UINT32_C(0x005910E9), UINT32_C(0x00A8DAC2), UINT32_C(0x0076022D), UINT32_C(0x006B2E17), UINT32_C(0x002B174E)}}, {{UINT32_C(0x002D1DE7), UINT32_C(0x005918AF), UINT32_C(0x007117B7), UINT32_C(0x00FFA278), UINT32_C(0x005EC3E5), UINT32_C(0x005D5ABD), UINT32_C(0x00409AA7), UINT32_C(0x00B36478), UINT32_C(0x004932C5), UINT32_C(0x0012CD34), UINT32_C(0x00481C3A)}, {UINT32_C(0x00FDA782), UINT32_C(0x000B2886), UINT32_C(0x00335C25), UINT32_C(0x002CBA0C), UINT32_C(0x0031D46B), UINT32_C(0x006D4278), UINT32_C(0x00222F32), UINT32_C(0x00407069), UINT32_C(0x00003013), UINT32_C(0x0013825F), UINT32_C(0x001F8B6C)}}, {{UINT32_C(0x0051E4F5), UINT32_C(0x005E9DC2), UINT32_C(0x00258809), UINT32_C(0x00371D8C), UINT32_C(0x002FAEE6), UINT32_C(0x0004405C), UINT32_C(0x00203011), UINT32_C(0x00C2897B), UINT32_C(0x0045B72F), UINT32_C(0x00627D76), UINT32_C(0x006AECBB)}, {UINT32_C(0x00D0F404), UINT32_C(0x003CF81A), UINT32_C(0x002F9F4D), UINT32_C(0x00C34800), UINT32_C(0x001E0D5A), UINT32_C(0x004CF2B9), UINT32_C(0x0058028D), UINT32_C(0x002FE88D), UINT32_C(0x003BCDD1), UINT32_C(0x005CA483), UINT32_C(0x006C66B1)}}, {{UINT32_C(0x0012B2F8), UINT32_C(0x002EB0A2), UINT32_C(0x0012BBFE), UINT32_C(0x00455276), UINT32_C(0x0047B04A), UINT32_C(0x007F71B8), UINT32_C(0x0055BF51), UINT32_C(0x00912939), UINT32_C(0x005DD2FD), UINT32_C(0x001E65E5), UINT32_C(0x0044827B)}, {UINT32_C(0x00749338), UINT32_C(0x0069B9A0), UINT32_C(0x0024E76A), UINT32_C(0x008505B7), UINT32_C(0x0048F45E), UINT32_C(0x004CCFF6), UINT32_C(0x00518F1E), UINT32_C(0x0006ABD7), UINT32_C(0x000C7B19), UINT32_C(0x007CF1C0), UINT32_C(0x001618E7)}}, }, { {{UINT32_C(0x0002A6B0), UINT32_C(0x0068A84D), UINT32_C(0x0004254D), UINT32_C(0x0073936F), UINT32_C(0x00264AA9), UINT32_C(0x002AE177), UINT32_C(0x005104DE), UINT32_C(0x007CF18F), UINT32_C(0x006D9C04), UINT32_C(0x007431AF), UINT32_C(0x000711AB)}, {UINT32_C(0x008D5496), UINT32_C(0x003EA309), UINT32_C(0x0004F5CE), UINT32_C(0x00BDE7BB), UINT32_C(0x007DE3A5), UINT32_C(0x0018E586), UINT32_C(0x004C3DB2), UINT32_C(0x0034EF2F), UINT32_C(0x00310ED6), UINT32_C(0x005F5025), UINT32_C(0x0033F193)}}, {{UINT32_C(0x00478D87), UINT32_C(0x00086B6B), UINT32_C(0x0046EB29), UINT32_C(0x00E16D0C), UINT32_C(0x001BDA98), UINT32_C(0x002ED05B), UINT32_C(0x003789D1), UINT32_C(0x00CC467C), UINT32_C(0x00178BD9), UINT32_C(0x005B5C2E), UINT32_C(0x00414C09)}, {UINT32_C(0x00FE52FF), UINT32_C(0x00390639), UINT32_C(0x006FFAE6), UINT32_C(0x0028E37B), UINT32_C(0x001FB01B), UINT32_C(0x0016F3D8), UINT32_C(0x003EE18E), UINT32_C(0x00599A77), UINT32_C(0x004C13DE), UINT32_C(0x004B6328), UINT32_C(0x00283192)}}, {{UINT32_C(0x00E1AB70), UINT32_C(0x004B3C06), UINT32_C(0x00203AA9), UINT32_C(0x00521440), UINT32_C(0x00527B5E), UINT32_C(0x00288A81), UINT32_C(0x0028CE1C), UINT32_C(0x0028059F), UINT32_C(0x004C148A), UINT32_C(0x0046ECEE), UINT32_C(0x00578C8D)}, {UINT32_C(0x00DBD2FF), UINT32_C(0x006C80C1), UINT32_C(0x007661A2), UINT32_C(0x0011094F), UINT32_C(0x001AFACC), UINT32_C(0x00775ABB), UINT32_C(0x003CFCA0), UINT32_C(0x00030FF6), UINT32_C(0x00527900), UINT32_C(0x0015F70F), UINT32_C(0x00546D98)}}, {{UINT32_C(0x00E757A2), UINT32_C(0x005BC39A), UINT32_C(0x004FFC7D), UINT32_C(0x00F82EB5), UINT32_C(0x006C5AD3), UINT32_C(0x0078023C), UINT32_C(0x00684CB8), UINT32_C(0x00CB7AE8), UINT32_C(0x005F6095), UINT32_C(0x0075B447), UINT32_C(0x001FF6E4)}, {UINT32_C(0x00036FA0), UINT32_C(0x000C4B4E), UINT32_C(0x0021CA4E), UINT32_C(0x0046EA53), UINT32_C(0x0044A218), UINT32_C(0x0010A3C3), UINT32_C(0x002B3DFE), UINT32_C(0x0065108E), UINT32_C(0x0066153C), UINT32_C(0x0001AFCA), UINT32_C(0x0078AAB5)}}, {{UINT32_C(0x00A3A297), UINT32_C(0x001F022D), UINT32_C(0x0048B127), UINT32_C(0x0084727B), UINT32_C(0x0040B276), UINT32_C(0x00723454), UINT32_C(0x0027403D), UINT32_C(0x00702090), UINT32_C(0x003AE544), UINT32_C(0x000185C8), UINT32_C(0x00396B7E)}, {UINT32_C(0x0054F823), UINT32_C(0x0023AFDE), UINT32_C(0x000701AD), UINT32_C(0x00E2AE90), UINT32_C(0x002362A8), UINT32_C(0x00443B0D), UINT32_C(0x00539CA7), UINT32_C(0x00487F9B), UINT32_C(0x0013DFD4), UINT32_C(0x0060A0C9), UINT32_C(0x003ED6D3)}}, {{UINT32_C(0x0041AFA6), UINT32_C(0x0033B2AB), UINT32_C(0x000E144F), UINT32_C(0x006C2256), UINT32_C(0x006FAF7B), UINT32_C(0x005AC228), UINT32_C(0x0032A572), UINT32_C(0x007F38E2), UINT32_C(0x006D725E), UINT32_C(0x002BEC51), UINT32_C(0x002D43D7)}, {UINT32_C(0x0083A39E), UINT32_C(0x001C7564), UINT32_C(0x0008D7AC), UINT32_C(0x0018A604), UINT32_C(0x0074C8EB), UINT32_C(0x0063AB5D), UINT32_C(0x002CCD7D), UINT32_C(0x0047E981), UINT32_C(0x0021750F), UINT32_C(0x001135D9), UINT32_C(0x004DB0FB)}}, {{UINT32_C(0x0064BA6C), UINT32_C(0x007B1BDB), UINT32_C(0x007CD33C), UINT32_C(0x00810753), UINT32_C(0x0026FB53), UINT32_C(0x0077AC90), UINT32_C(0x0005E560), UINT32_C(0x004BCB24), UINT32_C(0x005BA503), UINT32_C(0x0016BD12), UINT32_C(0x00312BDC)}, {UINT32_C(0x0072B4CC), UINT32_C(0x0014A560), UINT32_C(0x0007F39A), UINT32_C(0x000A2186), UINT32_C(0x0014704E), UINT32_C(0x0031AA4B), UINT32_C(0x00743487), UINT32_C(0x00BF00CE), UINT32_C(0x002DDB5E), UINT32_C(0x00490BB0), UINT32_C(0x0069DAC1)}}, {{UINT32_C(0x009EEC7F), UINT32_C(0x006DF14C), UINT32_C(0x0023F579), UINT32_C(0x00511B11), UINT32_C(0x0030486B), UINT32_C(0x00653474), UINT32_C(0x006F453D), UINT32_C(0x00104BBB), UINT32_C(0x001DE9B0), UINT32_C(0x00353041), UINT32_C(0x003312FC)}, {UINT32_C(0x00A89852), UINT32_C(0x00125365), UINT32_C(0x00584EAD), UINT32_C(0x00ADA70A), UINT32_C(0x002FBF4C), UINT32_C(0x002FEA71), UINT32_C(0x003E0469), UINT32_C(0x001ABCC3), UINT32_C(0x000759B9), UINT32_C(0x00440460), UINT32_C(0x000BC673)}}, {{UINT32_C(0x0094762E), UINT32_C(0x00288488), UINT32_C(0x006E9757), UINT32_C(0x004AC426), UINT32_C(0x00211BF1), UINT32_C(0x001D3A08), UINT32_C(0x0001EAFC), UINT32_C(0x008D5AEB), UINT32_C(0x00735E25), UINT32_C(0x003D07A5), UINT32_C(0x004F79A8)}, {UINT32_C(0x0008DE0D), UINT32_C(0x000F22EC), UINT32_C(0x00265780), UINT32_C(0x00EF5221), UINT32_C(0x00285666), UINT32_C(0x0031A918), UINT32_C(0x00150FBE), UINT32_C(0x00A00DC4), UINT32_C(0x004A3CA8), UINT32_C(0x00792A0B), UINT32_C(0x000EEFD5)}}, {{UINT32_C(0x00C878D8), UINT32_C(0x005C1F80), UINT32_C(0x00796F30), UINT32_C(0x005E40FD), UINT32_C(0x006C91B9), UINT32_C(0x007B8EB5), UINT32_C(0x00763E21), UINT32_C(0x008E4B3F), UINT32_C(0x0059CB82), UINT32_C(0x0033CF8B), UINT32_C(0x00117C19)}, {UINT32_C(0x00697DD3), UINT32_C(0x002C5D30), UINT32_C(0x006317A0), UINT32_C(0x00FB399C), UINT32_C(0x00679834), UINT32_C(0x00265AA0), UINT32_C(0x007ECFA2), UINT32_C(0x004DFBEF), UINT32_C(0x0038AE2B), UINT32_C(0x0066CF5A), UINT32_C(0x001E2F38)}}, {{UINT32_C(0x006EC447), UINT32_C(0x00636DB3), UINT32_C(0x00504563), UINT32_C(0x0059F3D2), UINT32_C(0x0071D652), UINT32_C(0x0006DE38), UINT32_C(0x00478020), UINT32_C(0x00D483F9), UINT32_C(0x000AED5C), UINT32_C(0x00787862), UINT32_C(0x002DACF3)}, {UINT32_C(0x00C6C4F7), UINT32_C(0x0033C908), UINT32_C(0x000FEE1A), UINT32_C(0x00AA7333), UINT32_C(0x001FAF9A), UINT32_C(0x000FF2F1), UINT32_C(0x005B0306), UINT32_C(0x00FBE44F), UINT32_C(0x0030AC0D), UINT32_C(0x005C62A5), UINT32_C(0x00611050)}}, {{UINT32_C(0x004C0908), UINT32_C(0x00068F3D), UINT32_C(0x006C33DA), UINT32_C(0x000B80A7), UINT32_C(0x0025B068), UINT32_C(0x007FB25B), UINT32_C(0x004C55A2), UINT32_C(0x008BBCF8), UINT32_C(0x0006D143), UINT32_C(0x0006225D), UINT32_C(0x0023F7AD)}, {UINT32_C(0x0080DEAF), UINT32_C(0x0053B869), UINT32_C(0x0014A009), UINT32_C(0x0076059B), UINT32_C(0x003133C4), UINT32_C(0x007B5C31), UINT32_C(0x006BD859), UINT32_C(0x00B43AA4), UINT32_C(0x0074EA87), UINT32_C(0x0059CB83), UINT32_C(0x0008B4B9)}}, {{UINT32_C(0x00839775), UINT32_C(0x0066DD9C), UINT32_C(0x000D8D68), UINT32_C(0x00D7F11B), UINT32_C(0x003ADC9E), UINT32_C(0x00257179), UINT32_C(0x005C5090), UINT32_C(0x0081B436), UINT32_C(0x006C5187), UINT32_C(0x005A0A00), UINT32_C(0x006E778B)}, {UINT32_C(0x00E9C0BD), UINT32_C(0x001B7784), UINT32_C(0x007DB934), UINT32_C(0x00C972DD), UINT32_C(0x001314A2), UINT32_C(0x0006AF18), UINT32_C(0x006F7A8A), UINT32_C(0x00F39C4E), UINT32_C(0x006E8942), UINT32_C(0x0056E09B), UINT32_C(0x00786BB0)}}, {{UINT32_C(0x00306294), UINT32_C(0x0035755D), UINT32_C(0x005A1EC5), UINT32_C(0x00667CAE), UINT32_C(0x007CCE97), UINT32_C(0x00240C1F), UINT32_C(0x0024F74A), UINT32_C(0x0052075F), UINT32_C(0x003907DD), UINT32_C(0x0019F30D), UINT32_C(0x00621CE6)}, {UINT32_C(0x0045BDB1), UINT32_C(0x00633018), UINT32_C(0x0065C160), UINT32_C(0x00289740), UINT32_C(0x001E2F22), UINT32_C(0x00592DAF), UINT32_C(0x0023922D), UINT32_C(0x004DF348), UINT32_C(0x00129446), UINT32_C(0x007248B4), UINT32_C(0x0039074B)}}, {{UINT32_C(0x00AA4BC7), UINT32_C(0x005726AE), UINT32_C(0x003E5213), UINT32_C(0x0067290D), UINT32_C(0x0063681B), UINT32_C(0x006E5545), UINT32_C(0x00195CCD), UINT32_C(0x008B3541), UINT32_C(0x002F83E1), UINT32_C(0x0056641A), UINT32_C(0x002EB12A)}, {UINT32_C(0x006782ED), UINT32_C(0x00320ADA), UINT32_C(0x0076D1A5), UINT32_C(0x001573A2), UINT32_C(0x002E18BC), UINT32_C(0x002E3320), UINT32_C(0x00653E07), UINT32_C(0x00C666DD), UINT32_C(0x00604156), UINT32_C(0x007A5E4B), UINT32_C(0x0069541F)}}, {{UINT32_C(0x00224872), UINT32_C(0x005D167D), UINT32_C(0x0010FF0C), UINT32_C(0x00071C46), UINT32_C(0x00548E96), UINT32_C(0x003D16E1), UINT32_C(0x0068BA5D), UINT32_C(0x00355F33), UINT32_C(0x006C2F4F), UINT32_C(0x00044AF9), UINT32_C(0x007213BD)}, {UINT32_C(0x001A0254), UINT32_C(0x002AFCA6), UINT32_C(0x0041DAAE), UINT32_C(0x00D08E4A), UINT32_C(0x006D9245), UINT32_C(0x000C8A06), UINT32_C(0x003D8084), UINT32_C(0x00494BD0), UINT32_C(0x000ED04A), UINT32_C(0x003BF0A5), UINT32_C(0x000F164D)}}, }, { {{UINT32_C(0x00459019), UINT32_C(0x0055760B), UINT32_C(0x0058FB7D), UINT32_C(0x00A2BA8C), UINT32_C(0x004B4E88), UINT32_C(0x000E6EE4), UINT32_C(0x0059F945), UINT32_C(0x001789F2), UINT32_C(0x007101FD), UINT32_C(0x004F8DD3), UINT32_C(0x0038462A)}, {UINT32_C(0x00ABD7B1), UINT32_C(0x003D4EC1), UINT32_C(0x00382D69), UINT32_C(0x006BA54F), UINT32_C(0x00518A2D), UINT32_C(0x001F4A7A), UINT32_C(0x002C19F0), UINT32_C(0x00CCAD3E), UINT32_C(0x003AA2CC), UINT32_C(0x0069D63B), UINT32_C(0x00156E38)}}, {{UINT32_C(0x0061CF6A), UINT32_C(0x000D2F2D), UINT32_C(0x00006C04), UINT32_C(0x00C0A71A), UINT32_C(0x0051D1DC), UINT32_C(0x0025C398), UINT32_C(0x000C6829), UINT32_C(0x0044F736), UINT32_C(0x0074BA1D), UINT32_C(0x000F86E2), UINT32_C(0x00086CD1)}, {UINT32_C(0x00D6C080), UINT32_C(0x0045977F), UINT32_C(0x0021EC6B), UINT32_C(0x00F8EB91), UINT32_C(0x0066E69F), UINT32_C(0x003B59C5), UINT32_C(0x001990FA), UINT32_C(0x00B03645), UINT32_C(0x0009151D), UINT32_C(0x00781FAF), UINT32_C(0x0052EAC1)}}, {{UINT32_C(0x005CE371), UINT32_C(0x00339A2B), UINT32_C(0x0020CCDE), UINT32_C(0x00867507), UINT32_C(0x0033D597), UINT32_C(0x007923EB), UINT32_C(0x000C7943), UINT32_C(0x003719DF), UINT32_C(0x00423883), UINT32_C(0x0024AF84), UINT32_C(0x00679F03)}, {UINT32_C(0x008B9D31), UINT32_C(0x004B0315), UINT32_C(0x00409D6E), UINT32_C(0x009267D2), UINT32_C(0x0030117A), UINT32_C(0x002D54F0), UINT32_C(0x006C6FF7), UINT32_C(0x004BF6A4), UINT32_C(0x0075CBEB), UINT32_C(0x003BEEB1), UINT32_C(0x000B67F0)}}, {{UINT32_C(0x00687F73), UINT32_C(0x00403AE2), UINT32_C(0x00405A67), UINT32_C(0x00316CA7), UINT32_C(0x002999E7), UINT32_C(0x001FE769), UINT32_C(0x0026B91B), UINT32_C(0x001D6CA9), UINT32_C(0x004BEFCD), UINT32_C(0x004A822C), UINT32_C(0x001CFAFB)}, {UINT32_C(0x00A8EE8B), UINT32_C(0x000ACC89), UINT32_C(0x0043B4AD), UINT32_C(0x00F1DA75), UINT32_C(0x0011792B), UINT32_C(0x002580D8), UINT32_C(0x0000B787), UINT32_C(0x00C9B58F), UINT32_C(0x004F3C97), UINT32_C(0x00769DFC), UINT32_C(0x000F1398)}}, {{UINT32_C(0x00F0E827), UINT32_C(0x0071CA92), UINT32_C(0x005324EC), UINT32_C(0x009729F1), UINT32_C(0x0055F994), UINT32_C(0x00003EFF), UINT32_C(0x0017CB89), UINT32_C(0x0072853D), UINT32_C(0x00339B97), UINT32_C(0x00171CA7), UINT32_C(0x006B675F)}, {UINT32_C(0x003D0D62), UINT32_C(0x007DAA7D), UINT32_C(0x006A9620), UINT32_C(0x00F5CFEA), UINT32_C(0x00032E5B), UINT32_C(0x00563173), UINT32_C(0x006F73F8), UINT32_C(0x007CCBA2), UINT32_C(0x004141E7), UINT32_C(0x0027173B), UINT32_C(0x003348A7)}}, {{UINT32_C(0x00F522E3), UINT32_C(0x006F8CDC), UINT32_C(0x0009FCCC), UINT32_C(0x000BE430), UINT32_C(0x00303DA6), UINT32_C(0x006833B6), UINT32_C(0x00557FC0), UINT32_C(0x0082CFC0), UINT32_C(0x00521AA8), UINT32_C(0x003CA041), UINT32_C(0x001AFA64)}, {UINT32_C(0x00304313), UINT32_C(0x004ED8C2), UINT32_C(0x0018190F), UINT32_C(0x009B395B), UINT32_C(0x0040816B), UINT32_C(0x007C8C36), UINT32_C(0x006509BF), UINT32_C(0x002E0BC9), UINT32_C(0x0022B46B), UINT32_C(0x002AB43C), UINT32_C(0x00283CD2)}}, {{UINT32_C(0x000B7F74), UINT32_C(0x002AC244), UINT32_C(0x00521FC5), UINT32_C(0x004260D1), UINT32_C(0x00017C7D), UINT32_C(0x0008CF38), UINT32_C(0x006722E9), UINT32_C(0x00AD1E83), UINT32_C(0x0039112C), UINT32_C(0x002C7B44), UINT32_C(0x0027C0FF)}, {UINT32_C(0x009E60B3), UINT32_C(0x0054B3F3), UINT32_C(0x006A4023), UINT32_C(0x000E894E), UINT32_C(0x000D8133), UINT32_C(0x00684145), UINT32_C(0x00375199), UINT32_C(0x000C86DC), UINT32_C(0x006B4831), UINT32_C(0x00148D6A), UINT32_C(0x005D0790)}}, {{UINT32_C(0x006FC7F9), UINT32_C(0x002D0FB1), UINT32_C(0x0071895E), UINT32_C(0x007C322D), UINT32_C(0x0022DF86), UINT32_C(0x00329F1A), UINT32_C(0x004AAD46), UINT32_C(0x00A69B3A), UINT32_C(0x0058C8B6), UINT32_C(0x004FEC36), UINT32_C(0x001023EF)}, {UINT32_C(0x00670612), UINT32_C(0x0068AAB3), UINT32_C(0x005C3162), UINT32_C(0x002C5521), UINT32_C(0x001C3176), UINT32_C(0x0042667A), UINT32_C(0x001631EE), UINT32_C(0x00B31014), UINT32_C(0x00670B11), UINT32_C(0x0024384B), UINT32_C(0x001A4A2C)}}, {{UINT32_C(0x009994EE), UINT32_C(0x006FE440), UINT32_C(0x004F4279), UINT32_C(0x006A6D12), UINT32_C(0x00439B57), UINT32_C(0x007E025A), UINT32_C(0x002D8836), UINT32_C(0x0042C271), UINT32_C(0x0011969F), UINT32_C(0x0056F588), UINT32_C(0x005DD046)}, {UINT32_C(0x00F4202A), UINT32_C(0x001B4FF6), UINT32_C(0x000F4F77), UINT32_C(0x002D36F2), UINT32_C(0x007AA72B), UINT32_C(0x00191711), UINT32_C(0x007B653C), UINT32_C(0x00F06065), UINT32_C(0x001BC81D), UINT32_C(0x0034BE67), UINT32_C(0x006FAA43)}}, {{UINT32_C(0x00501DAE), UINT32_C(0x002494E4), UINT32_C(0x0064D2EB), UINT32_C(0x008F0CE3), UINT32_C(0x0045A611), UINT32_C(0x0064260A), UINT32_C(0x0075E097), UINT32_C(0x00F9238A), UINT32_C(0x003654E9), UINT32_C(0x005020CA), UINT32_C(0x0072482C)}, {UINT32_C(0x00AF93E8), UINT32_C(0x005900B4), UINT32_C(0x004202A6), UINT32_C(0x00BEE149), UINT32_C(0x006D7724), UINT32_C(0x0071B0A1), UINT32_C(0x00405291), UINT32_C(0x003AD02B), UINT32_C(0x005C2036), UINT32_C(0x0079BE42), UINT32_C(0x000BA73D)}}, {{UINT32_C(0x00B4074B), UINT32_C(0x004B525B), UINT32_C(0x000D26F5), UINT32_C(0x00DDC04B), UINT32_C(0x005C3D10), UINT32_C(0x00395397), UINT32_C(0x00380563), UINT32_C(0x008C1F77), UINT32_C(0x000FA839), UINT32_C(0x00493852), UINT32_C(0x000ED70C)}, {UINT32_C(0x00D5040F), UINT32_C(0x0042882C), UINT32_C(0x0001C223), UINT32_C(0x0047D313), UINT32_C(0x00552DBD), UINT32_C(0x0029F273), UINT32_C(0x005D6BC9), UINT32_C(0x00BCDD77), UINT32_C(0x0042D701), UINT32_C(0x003FE205), UINT32_C(0x003DEBB5)}}, {{UINT32_C(0x00BBCF14), UINT32_C(0x004FFB15), UINT32_C(0x00557302), UINT32_C(0x00897907), UINT32_C(0x000886E7), UINT32_C(0x00556A12), UINT32_C(0x0024BFFC), UINT32_C(0x00466C4A), UINT32_C(0x006D05E2), UINT32_C(0x00732AFC), UINT32_C(0x007196CD)}, {UINT32_C(0x00377955), UINT32_C(0x00049F69), UINT32_C(0x004A73AF), UINT32_C(0x00628B4D), UINT32_C(0x007F38F0), UINT32_C(0x007A500C), UINT32_C(0x0006D3F0), UINT32_C(0x004A0F78), UINT32_C(0x001C6F18), UINT32_C(0x007E08F6), UINT32_C(0x0008B8E3)}}, {{UINT32_C(0x00F0F157), UINT32_C(0x0006E3EE), UINT32_C(0x00636CD6), UINT32_C(0x001FCAAE), UINT32_C(0x00065300), UINT32_C(0x0030B114), UINT32_C(0x00303EFF), UINT32_C(0x0010CBD8), UINT32_C(0x002326C5), UINT32_C(0x007E166C), UINT32_C(0x00190C79)}, {UINT32_C(0x006D97E1), UINT32_C(0x00306B6D), UINT32_C(0x007BD9CD), UINT32_C(0x00922461), UINT32_C(0x00312872), UINT32_C(0x0015DE6C), UINT32_C(0x00595605), UINT32_C(0x0037F071), UINT32_C(0x00165965), UINT32_C(0x006EBA47), UINT32_C(0x0043EC85)}}, {{UINT32_C(0x004CC6B4), UINT32_C(0x006D0740), UINT32_C(0x005E7F6C), UINT32_C(0x005DF159), UINT32_C(0x002E1429), UINT32_C(0x001F4EB5), UINT32_C(0x00543D5B), UINT32_C(0x00E4C2B2), UINT32_C(0x0058F8F4), UINT32_C(0x003E2B7E), UINT32_C(0x0003FA76)}, {UINT32_C(0x00245C81), UINT32_C(0x004A0442), UINT32_C(0x0003DB05), UINT32_C(0x00DB5088), UINT32_C(0x0064FD7C), UINT32_C(0x004C3547), UINT32_C(0x0034C017), UINT32_C(0x00ED3600), UINT32_C(0x002A72EB), UINT32_C(0x0048D594), UINT32_C(0x00114C4C)}}, {{UINT32_C(0x0012CF1A), UINT32_C(0x006E0086), UINT32_C(0x00549899), UINT32_C(0x00C50D1B), UINT32_C(0x0048CEB3), UINT32_C(0x006765AB), UINT32_C(0x0061B7C5), UINT32_C(0x009F1CD0), UINT32_C(0x0009F99F), UINT32_C(0x0040A0A7), UINT32_C(0x004B6425)}, {UINT32_C(0x009D7477), UINT32_C(0x00079B86), UINT32_C(0x006B9474), UINT32_C(0x006A4288), UINT32_C(0x006586C3), UINT32_C(0x00053F72), UINT32_C(0x001B756B), UINT32_C(0x00302538), UINT32_C(0x00464295), UINT32_C(0x0041CEF6), UINT32_C(0x000157A3)}}, {{UINT32_C(0x00C4EB0D), UINT32_C(0x0059E444), UINT32_C(0x001B0A36), UINT32_C(0x009DAD3B), UINT32_C(0x005BF245), UINT32_C(0x0072C6C4), UINT32_C(0x00285E98), UINT32_C(0x007A4B77), UINT32_C(0x00693E04), UINT32_C(0x000A8AC7), UINT32_C(0x000BE084)}, {UINT32_C(0x00929EB4), UINT32_C(0x0004AEF0), UINT32_C(0x00477054), UINT32_C(0x008FAC95), UINT32_C(0x002630B3), UINT32_C(0x0039BC23), UINT32_C(0x00199060), UINT32_C(0x0017B14E), UINT32_C(0x006F142E), UINT32_C(0x003060D5), UINT32_C(0x0021EDBA)}}, }, { {{UINT32_C(0x00D13256), UINT32_C(0x003F96E6), UINT32_C(0x0035573F), UINT32_C(0x00A11C34), UINT32_C(0x0055362D), UINT32_C(0x0019411A), UINT32_C(0x005F05E2), UINT32_C(0x001A9048), UINT32_C(0x003DEA90), UINT32_C(0x000B7D0A), UINT32_C(0x004B4171)}, {UINT32_C(0x000FAC1A), UINT32_C(0x0023647E), UINT32_C(0x0070B3D3), UINT32_C(0x00805801), UINT32_C(0x00790FC6), UINT32_C(0x004C4182), UINT32_C(0x0021453D), UINT32_C(0x000BFF08), UINT32_C(0x0018947B), UINT32_C(0x0028CB8E), UINT32_C(0x0006EB4B)}}, {{UINT32_C(0x00BE097D), UINT32_C(0x006FA126), UINT32_C(0x001BB0AA), UINT32_C(0x00857AF3), UINT32_C(0x0014E432), UINT32_C(0x00678F70), UINT32_C(0x003FE4F6), UINT32_C(0x0037969A), UINT32_C(0x004C29A5), UINT32_C(0x0019E68D), UINT32_C(0x00727D26)}, {UINT32_C(0x0030F457), UINT32_C(0x0077AEFB), UINT32_C(0x001B45A0), UINT32_C(0x00F569CA), UINT32_C(0x004CF892), UINT32_C(0x003CD573), UINT32_C(0x0020564D), UINT32_C(0x00911635), UINT32_C(0x000B9CCC), UINT32_C(0x0043C0C2), UINT32_C(0x005ABF88)}}, {{UINT32_C(0x0055E82E), UINT32_C(0x0062B538), UINT32_C(0x0071AFAF), UINT32_C(0x00DD7D6C), UINT32_C(0x002444DB), UINT32_C(0x00609BDA), UINT32_C(0x007E8FE1), UINT32_C(0x0047FB13), UINT32_C(0x005AA88A), UINT32_C(0x00632113), UINT32_C(0x000E21BF)}, {UINT32_C(0x00E4AE88), UINT32_C(0x00549503), UINT32_C(0x006D0459), UINT32_C(0x0007BE5C), UINT32_C(0x003D3D1F), UINT32_C(0x00105F67), UINT32_C(0x0070D576), UINT32_C(0x008E68E3), UINT32_C(0x0066B27F), UINT32_C(0x000F81A1), UINT32_C(0x00102F63)}}, {{UINT32_C(0x00813696), UINT32_C(0x001896A4), UINT32_C(0x007C71B5), UINT32_C(0x008F5BBA), UINT32_C(0x003BF0D4), UINT32_C(0x002B5A1F), UINT32_C(0x00688FCE), UINT32_C(0x00DC932F), UINT32_C(0x00178F0B), UINT32_C(0x00532936), UINT32_C(0x003DC4E4)}, {UINT32_C(0x00FF3364), UINT32_C(0x0000987D), UINT32_C(0x00050B87), UINT32_C(0x00DD7B60), UINT32_C(0x004C9AC5), UINT32_C(0x00050AC9), UINT32_C(0x00305FCA), UINT32_C(0x00FEBB2B), UINT32_C(0x004CCD89), UINT32_C(0x0045D609), UINT32_C(0x00383954)}}, {{UINT32_C(0x00C5F8C7), UINT32_C(0x00059C15), UINT32_C(0x005D6652), UINT32_C(0x00395738), UINT32_C(0x0033E177), UINT32_C(0x00114250), UINT32_C(0x0050F27A), UINT32_C(0x00575EF9), UINT32_C(0x003EC09D), UINT32_C(0x00587A84), UINT32_C(0x0066F8F9)}, {UINT32_C(0x0084DCF0), UINT32_C(0x0053AC30), UINT32_C(0x006B3DE9), UINT32_C(0x006D8108), UINT32_C(0x005E091B), UINT32_C(0x0074FBF5), UINT32_C(0x0079C383), UINT32_C(0x0091FDE9), UINT32_C(0x0059CDF0), UINT32_C(0x0063D52A), UINT32_C(0x00374429)}}, {{UINT32_C(0x00AC9B9F), UINT32_C(0x00049F51), UINT32_C(0x003B74B2), UINT32_C(0x00C116DA), UINT32_C(0x007C29A7), UINT32_C(0x0070299B), UINT32_C(0x005E9ACC), UINT32_C(0x0003167B), UINT32_C(0x002BF1BE), UINT32_C(0x004D9F3F), UINT32_C(0x004EE7A0)}, {UINT32_C(0x00917C14), UINT32_C(0x003EBF02), UINT32_C(0x000420F7), UINT32_C(0x0098B80D), UINT32_C(0x00316402), UINT32_C(0x00299C9E), UINT32_C(0x00788C59), UINT32_C(0x004CA51A), UINT32_C(0x0032E98D), UINT32_C(0x00523F2B), UINT32_C(0x0025FE7C)}}, {{UINT32_C(0x00D24FB4), UINT32_C(0x000FA78F), UINT32_C(0x0075EB38), UINT32_C(0x00E1423C), UINT32_C(0x002F6852), UINT32_C(0x0054E6AA), UINT32_C(0x003B4EBA), UINT32_C(0x00916685), UINT32_C(0x000987EA), UINT32_C(0x007E5CAE), UINT32_C(0x001AEF85)}, {UINT32_C(0x00BEBDCB), UINT32_C(0x0062C59D), UINT32_C(0x007EC199), UINT32_C(0x004ABAEB), UINT32_C(0x0026E8BC), UINT32_C(0x0045113C), UINT32_C(0x000926F3), UINT32_C(0x006EC500), UINT32_C(0x001E9D22), UINT32_C(0x0029BEE0), UINT32_C(0x00043DEE)}}, {{UINT32_C(0x00409462), UINT32_C(0x001CB8CD), UINT32_C(0x001F8EFF), UINT32_C(0x0097AA77), UINT32_C(0x003B581E), UINT32_C(0x007159CB), UINT32_C(0x006E4ADC), UINT32_C(0x0037066B), UINT32_C(0x002D6F60), UINT32_C(0x006DEC62), UINT32_C(0x003829D7)}, {UINT32_C(0x00174A3E), UINT32_C(0x0048A317), UINT32_C(0x002691C2), UINT32_C(0x004D7514), UINT32_C(0x004893B0), UINT32_C(0x006C7BDC), UINT32_C(0x007270A6), UINT32_C(0x001CD34C), UINT32_C(0x0076F518), UINT32_C(0x004C90E7), UINT32_C(0x005F393C)}}, {{UINT32_C(0x0099A837), UINT32_C(0x0058E783), UINT32_C(0x0016D7D7), UINT32_C(0x00AB0113), UINT32_C(0x007BF6C9), UINT32_C(0x005FFC67), UINT32_C(0x000FA10D), UINT32_C(0x000805E8), UINT32_C(0x00627967), UINT32_C(0x006D7987), UINT32_C(0x0064D848)}, {UINT32_C(0x001FE2E3), UINT32_C(0x003499ED), UINT32_C(0x0007F453), UINT32_C(0x0006EA4B), UINT32_C(0x006C77A1), UINT32_C(0x00131F20), UINT32_C(0x0028B0D4), UINT32_C(0x00301339), UINT32_C(0x0010A30B), UINT32_C(0x0078F588), UINT32_C(0x0056FFF0)}}, {{UINT32_C(0x00C31BB5), UINT32_C(0x00440BEA), UINT32_C(0x006F3A2D), UINT32_C(0x0085FD9F), UINT32_C(0x00488063), UINT32_C(0x0037200F), UINT32_C(0x00199136), UINT32_C(0x0037CD50), UINT32_C(0x0008D83E), UINT32_C(0x007A26BF), UINT32_C(0x000F7F08)}, {UINT32_C(0x00A878F2), UINT32_C(0x002B8B71), UINT32_C(0x005C80D4), UINT32_C(0x00147855), UINT32_C(0x00649415), UINT32_C(0x00445B94), UINT32_C(0x0038DF88), UINT32_C(0x00D5F5B6), UINT32_C(0x004FFA47), UINT32_C(0x00295AC4), UINT32_C(0x0041EA46)}}, {{UINT32_C(0x007EB48E), UINT32_C(0x00012787), UINT32_C(0x00646010), UINT32_C(0x00D4B80D), UINT32_C(0x0019653C), UINT32_C(0x002A25D0), UINT32_C(0x007425A7), UINT32_C(0x0010550F), UINT32_C(0x001D6D43), UINT32_C(0x00494525), UINT32_C(0x003DD845)}, {UINT32_C(0x0097B9CF), UINT32_C(0x00389128), UINT32_C(0x0063AB07), UINT32_C(0x00FFB646), UINT32_C(0x00049A92), UINT32_C(0x003B30F9), UINT32_C(0x004092BA), UINT32_C(0x005BB91C), UINT32_C(0x0045BE82), UINT32_C(0x001D89D6), UINT32_C(0x0006D769)}}, {{UINT32_C(0x00A9C944), UINT32_C(0x001E9FDE), UINT32_C(0x0005084B), UINT32_C(0x0037B0AB), UINT32_C(0x007DF90A), UINT32_C(0x002BFE80), UINT32_C(0x0014A4BD), UINT32_C(0x0099723A), UINT32_C(0x0062FDC9), UINT32_C(0x00450631), UINT32_C(0x0056C69D)}, {UINT32_C(0x006E31BC), UINT32_C(0x00223A2C), UINT32_C(0x00426DB3), UINT32_C(0x00B65794), UINT32_C(0x004EF40F), UINT32_C(0x0037E688), UINT32_C(0x006EDA79), UINT32_C(0x004A47E5), UINT32_C(0x007B715C), UINT32_C(0x0039DB43), UINT32_C(0x002E56F6)}}, {{UINT32_C(0x00178EE8), UINT32_C(0x001F6068), UINT32_C(0x002959E2), UINT32_C(0x007567A4), UINT32_C(0x002ACB5C), UINT32_C(0x0045B5EE), UINT32_C(0x0071A9D8), UINT32_C(0x003E517A), UINT32_C(0x006040CD), UINT32_C(0x0036CE20), UINT32_C(0x0005D54B)}, {UINT32_C(0x00F4423F), UINT32_C(0x0017E6E5), UINT32_C(0x004BBF02), UINT32_C(0x00DF4DDE), UINT32_C(0x00683FEE), UINT32_C(0x00773399), UINT32_C(0x006F6378), UINT32_C(0x005109B9), UINT32_C(0x007F1264), UINT32_C(0x001500B6), UINT32_C(0x0023E4D2)}}, {{UINT32_C(0x009D0DE5), UINT32_C(0x0040EAC6), UINT32_C(0x00628047), UINT32_C(0x00CC7720), UINT32_C(0x005595B3), UINT32_C(0x00342909), UINT32_C(0x0006815D), UINT32_C(0x007EAF87), UINT32_C(0x00743C32), UINT32_C(0x000D28F3), UINT32_C(0x0013C70B)}, {UINT32_C(0x007DE7B7), UINT32_C(0x007A74CF), UINT32_C(0x0001C3FC), UINT32_C(0x00660203), UINT32_C(0x00709164), UINT32_C(0x0073A917), UINT32_C(0x007491A0), UINT32_C(0x00A50585), UINT32_C(0x00632019), UINT32_C(0x005493D0), UINT32_C(0x0073CF34)}}, {{UINT32_C(0x00FDF621), UINT32_C(0x000BB4A9), UINT32_C(0x006CD94F), UINT32_C(0x00BC87F4), UINT32_C(0x000A8610), UINT32_C(0x00573CFA), UINT32_C(0x00079CF0), UINT32_C(0x00DE2D6B), UINT32_C(0x002DB8E4), UINT32_C(0x000C2B46), UINT32_C(0x004B624E)}, {UINT32_C(0x00ADE692), UINT32_C(0x000D62B4), UINT32_C(0x004F204F), UINT32_C(0x001E7763), UINT32_C(0x0066BF28), UINT32_C(0x0011A4DF), UINT32_C(0x005A54FD), UINT32_C(0x002663A8), UINT32_C(0x0028E3BA), UINT32_C(0x005F9DDD), UINT32_C(0x007C882C)}}, {{UINT32_C(0x00112390), UINT32_C(0x00423B09), UINT32_C(0x0052630B), UINT32_C(0x0047D4BA), UINT32_C(0x002C3042), UINT32_C(0x000C6F6F), UINT32_C(0x0058A3E8), UINT32_C(0x00742857), UINT32_C(0x007610BB), UINT32_C(0x0075D1B9), UINT32_C(0x00255756)}, {UINT32_C(0x00FDF0D5), UINT32_C(0x006197B7), UINT32_C(0x0072CA11), UINT32_C(0x00DF93D8), UINT32_C(0x00202449), UINT32_C(0x006E01FA), UINT32_C(0x0027C172), UINT32_C(0x0055A82D), UINT32_C(0x0066E3DE), UINT32_C(0x006A6AE7), UINT32_C(0x001A25FD)}}, }, { {{UINT32_C(0x00661C25), UINT32_C(0x00028E38), UINT32_C(0x006AD36B), UINT32_C(0x00F0DCCF), UINT32_C(0x0032B052), UINT32_C(0x0032C71C), UINT32_C(0x00211A09), UINT32_C(0x0098A311), UINT32_C(0x000826E3), UINT32_C(0x0021933B), UINT32_C(0x001245D9)}, {UINT32_C(0x00BE5F68), UINT32_C(0x003D2384), UINT32_C(0x000578BD), UINT32_C(0x00F8E413), UINT32_C(0x004061A5), UINT32_C(0x000FF2F1), UINT32_C(0x00132EBC), UINT32_C(0x000E1BDF), UINT32_C(0x003265A0), UINT32_C(0x0052091E), UINT32_C(0x0011FFCC)}}, {{UINT32_C(0x00B211E9), UINT32_C(0x000495DB), UINT32_C(0x0009CB82), UINT32_C(0x0010BDF3), UINT32_C(0x004D6E95), UINT32_C(0x006DE15A), UINT32_C(0x003F2B0E), UINT32_C(0x00F8B166), UINT32_C(0x00569192), UINT32_C(0x004EC0D5), UINT32_C(0x0054EF20)}, {UINT32_C(0x005200C4), UINT32_C(0x00391A11), UINT32_C(0x007E47D8), UINT32_C(0x0024674D), UINT32_C(0x0010FC4E), UINT32_C(0x0025192E), UINT32_C(0x005D1C48), UINT32_C(0x00983F2B), UINT32_C(0x00568B3D), UINT32_C(0x0011FCC9), UINT32_C(0x00322423)}}, {{UINT32_C(0x0046A583), UINT32_C(0x006D46EC), UINT32_C(0x0009EF4F), UINT32_C(0x008A2373), UINT32_C(0x006760E4), UINT32_C(0x003AE52C), UINT32_C(0x006D3FE9), UINT32_C(0x00CFF4AA), UINT32_C(0x002A1967), UINT32_C(0x006C501C), UINT32_C(0x002450E4)}, {UINT32_C(0x00477329), UINT32_C(0x002FF478), UINT32_C(0x0079A10F), UINT32_C(0x002240F4), UINT32_C(0x002A6335), UINT32_C(0x001DA909), UINT32_C(0x004DF841), UINT32_C(0x00B8ED8E), UINT32_C(0x0067037E), UINT32_C(0x006BAEF5), UINT32_C(0x00142BEB)}}, {{UINT32_C(0x0076391E), UINT32_C(0x001FA456), UINT32_C(0x0024E1D6), UINT32_C(0x00A4BBB7), UINT32_C(0x006733A5), UINT32_C(0x001C3AFD), UINT32_C(0x0070A4C3), UINT32_C(0x00195BE7), UINT32_C(0x006E2E3B), UINT32_C(0x007153CF), UINT32_C(0x0019A09A)}, {UINT32_C(0x00153BB1), UINT32_C(0x004A58A8), UINT32_C(0x00708EE5), UINT32_C(0x00CDFFD9), UINT32_C(0x00482EC4), UINT32_C(0x0065D09A), UINT32_C(0x000820C4), UINT32_C(0x00CCB628), UINT32_C(0x004F2AD3), UINT32_C(0x004A6C74), UINT32_C(0x001936EB)}}, {{UINT32_C(0x0089A595), UINT32_C(0x00226302), UINT32_C(0x0074A6F3), UINT32_C(0x00A33F36), UINT32_C(0x007C9032), UINT32_C(0x0067DB9B), UINT32_C(0x0001EB7F), UINT32_C(0x00F3F17E), UINT32_C(0x005ADA9D), UINT32_C(0x007218E4), UINT32_C(0x000C8AA9)}, {UINT32_C(0x00C7F8B4), UINT32_C(0x00762B7E), UINT32_C(0x007B3451), UINT32_C(0x0073575C), UINT32_C(0x002013D6), UINT32_C(0x00638E89), UINT32_C(0x00244AD5), UINT32_C(0x009B033E), UINT32_C(0x00226644), UINT32_C(0x001E7EB2), UINT32_C(0x0054FC0E)}}, {{UINT32_C(0x00920FA0), UINT32_C(0x007A9F5E), UINT32_C(0x0027DD8D), UINT32_C(0x00DC2927), UINT32_C(0x002C9E2D), UINT32_C(0x0041E6F3), UINT32_C(0x000A2C15), UINT32_C(0x00B02047), UINT32_C(0x006CE1AA), UINT32_C(0x0028537F), UINT32_C(0x00044A79)}, {UINT32_C(0x00D1B513), UINT32_C(0x003A87FE), UINT32_C(0x00414D56), UINT32_C(0x00394DF6), UINT32_C(0x00675F9F), UINT32_C(0x006536DB), UINT32_C(0x0008F83A), UINT32_C(0x00AF6B36), UINT32_C(0x0042BF63), UINT32_C(0x001324F1), UINT32_C(0x0069E23F)}}, {{UINT32_C(0x00126519), UINT32_C(0x002072D6), UINT32_C(0x004F3495), UINT32_C(0x00801841), UINT32_C(0x0034FA6F), UINT32_C(0x004A41FC), UINT32_C(0x000C3620), UINT32_C(0x009F3555), UINT32_C(0x0050B1BB), UINT32_C(0x007148F3), UINT32_C(0x003BC5F3)}, {UINT32_C(0x0005E3BB), UINT32_C(0x00091662), UINT32_C(0x00480F10), UINT32_C(0x00526739), UINT32_C(0x005371E1), UINT32_C(0x0063F1FC), UINT32_C(0x004D071E), UINT32_C(0x0091714C), UINT32_C(0x0023F077), UINT32_C(0x00692954), UINT32_C(0x0030E9A8)}}, {{UINT32_C(0x00C73EE8), UINT32_C(0x002829DC), UINT32_C(0x0069D5A7), UINT32_C(0x0075EE6F), UINT32_C(0x000F85A6), UINT32_C(0x0045F30F), UINT32_C(0x00407EA5), UINT32_C(0x00F70774), UINT32_C(0x0045482D), UINT32_C(0x0013AE44), UINT32_C(0x00547FF8)}, {UINT32_C(0x00F7F25A), UINT32_C(0x002B2910), UINT32_C(0x004B44EA), UINT32_C(0x00DDE34B), UINT32_C(0x003285A3), UINT32_C(0x00558E05), UINT32_C(0x00468DC2), UINT32_C(0x00411298), UINT32_C(0x00509EF8), UINT32_C(0x007F842C), UINT32_C(0x007609FD)}}, {{UINT32_C(0x0005F2D5), UINT32_C(0x002E2EC3), UINT32_C(0x0049F536), UINT32_C(0x005AEF1B), UINT32_C(0x001ECE26), UINT32_C(0x0032D05A), UINT32_C(0x0017585A), UINT32_C(0x00DB0102), UINT32_C(0x007FA137), UINT32_C(0x0056FFCC), UINT32_C(0x000943C5)}, {UINT32_C(0x00A42C24), UINT32_C(0x0048A53E), UINT32_C(0x001397BC), UINT32_C(0x009E2E56), UINT32_C(0x00307F5D), UINT32_C(0x001B73E3), UINT32_C(0x003F6900), UINT32_C(0x00122D6A), UINT32_C(0x00769EBF), UINT32_C(0x0016A45C), UINT32_C(0x0077A9E1)}}, {{UINT32_C(0x0065F9CF), UINT32_C(0x004AC108), UINT32_C(0x0067432F), UINT32_C(0x002DF4D6), UINT32_C(0x004DCF5E), UINT32_C(0x003BAEC7), UINT32_C(0x00557847), UINT32_C(0x0052362A), UINT32_C(0x003955FF), UINT32_C(0x002D7043), UINT32_C(0x004CA5DC)}, {UINT32_C(0x007A93D2), UINT32_C(0x0036376B), UINT32_C(0x003A5A14), UINT32_C(0x0002555D), UINT32_C(0x00469862), UINT32_C(0x007BDBE1), UINT32_C(0x003081C9), UINT32_C(0x009C449C), UINT32_C(0x0047E01C), UINT32_C(0x00485605), UINT32_C(0x0031010E)}}, {{UINT32_C(0x009EB768), UINT32_C(0x005F172B), UINT32_C(0x0068912F), UINT32_C(0x003400EE), UINT32_C(0x0040F25E), UINT32_C(0x00255B9D), UINT32_C(0x0030FC1D), UINT32_C(0x006B60A7), UINT32_C(0x00652D66), UINT32_C(0x004EE313), UINT32_C(0x0046178A)}, {UINT32_C(0x007BD0F4), UINT32_C(0x005D4ECB), UINT32_C(0x00458AC2), UINT32_C(0x00370A5B), UINT32_C(0x0045F7B0), UINT32_C(0x0046CD90), UINT32_C(0x007969E2), UINT32_C(0x007A733E), UINT32_C(0x0042A4F0), UINT32_C(0x00118C36), UINT32_C(0x00389CCC)}}, {{UINT32_C(0x00C27F78), UINT32_C(0x00532F03), UINT32_C(0x007E9878), UINT32_C(0x009B0A2A), UINT32_C(0x0034B652), UINT32_C(0x0028506E), UINT32_C(0x006E5FC8), UINT32_C(0x00EFAE69), UINT32_C(0x00034D96), UINT32_C(0x006780F0), UINT32_C(0x002CA851)}, {UINT32_C(0x004910F2), UINT32_C(0x00144032), UINT32_C(0x00441EEB), UINT32_C(0x007F4CCD), UINT32_C(0x0018F7CA), UINT32_C(0x005C2F72), UINT32_C(0x007741E6), UINT32_C(0x00DEB207), UINT32_C(0x00060639), UINT32_C(0x00517FDD), UINT32_C(0x004332FA)}}, {{UINT32_C(0x00D5681D), UINT32_C(0x00664ABF), UINT32_C(0x00246FCC), UINT32_C(0x003A300A), UINT32_C(0x006F7A1D), UINT32_C(0x004926CA), UINT32_C(0x0015B100), UINT32_C(0x001EB359), UINT32_C(0x004A94F0), UINT32_C(0x0006716C), UINT32_C(0x00107D89)}, {UINT32_C(0x001231EC), UINT32_C(0x002B9FEE), UINT32_C(0x00406E9E), UINT32_C(0x008F6901), UINT32_C(0x003B5EDE), UINT32_C(0x0043CD20), UINT32_C(0x00704693), UINT32_C(0x00887628), UINT32_C(0x004FA46E), UINT32_C(0x0058B580), UINT32_C(0x00313AA5)}}, {{UINT32_C(0x0034CBFC), UINT32_C(0x0070E13A), UINT32_C(0x001631DB), UINT32_C(0x00C5D9F6), UINT32_C(0x001D00D8), UINT32_C(0x001359B4), UINT32_C(0x003A435C), UINT32_C(0x0031919E), UINT32_C(0x0065E412), UINT32_C(0x003B76A2), UINT32_C(0x0000EC08)}, {UINT32_C(0x0016F36E), UINT32_C(0x007A9BFE), UINT32_C(0x0017CEF7), UINT32_C(0x005B0D1B), UINT32_C(0x00062CAC), UINT32_C(0x005DE55E), UINT32_C(0x007A8F81), UINT32_C(0x007661FA), UINT32_C(0x007ADB68), UINT32_C(0x0064A4D8), UINT32_C(0x00392C5D)}}, {{UINT32_C(0x0074F552), UINT32_C(0x004A7096), UINT32_C(0x000D3EC7), UINT32_C(0x001A8192), UINT32_C(0x003E550A), UINT32_C(0x006C7B5B), UINT32_C(0x00454715), UINT32_C(0x00F31192), UINT32_C(0x000658B1), UINT32_C(0x00611F71), UINT32_C(0x007FC5BB)}, {UINT32_C(0x00562488), UINT32_C(0x000D96D1), UINT32_C(0x00523EA9), UINT32_C(0x0075587F), UINT32_C(0x001E1936), UINT32_C(0x007D2745), UINT32_C(0x0012EC03), UINT32_C(0x00BA0FEE), UINT32_C(0x002C5241), UINT32_C(0x001D4B8A), UINT32_C(0x002562EC)}}, {{UINT32_C(0x00C4F8B3), UINT32_C(0x007D2D04), UINT32_C(0x0030B04E), UINT32_C(0x003424A6), UINT32_C(0x004124E9), UINT32_C(0x00528C55), UINT32_C(0x00349B79), UINT32_C(0x0098B5C0), UINT32_C(0x0025B021), UINT32_C(0x0060681C), UINT32_C(0x00387899)}, {UINT32_C(0x0090C1FF), UINT32_C(0x005232B8), UINT32_C(0x004F63C3), UINT32_C(0x00E38A8E), UINT32_C(0x003E60AE), UINT32_C(0x001130C4), UINT32_C(0x004BF3A0), UINT32_C(0x00E168A5), UINT32_C(0x00061555), UINT32_C(0x000C2B98), UINT32_C(0x005FA4E4)}}, }, { {{UINT32_C(0x00E21CA1), UINT32_C(0x000C87FB), UINT32_C(0x002DD3D7), UINT32_C(0x00537514), UINT32_C(0x00509919), UINT32_C(0x00010447), UINT32_C(0x0025E6A6), UINT32_C(0x006B441D), UINT32_C(0x005E97AA), UINT32_C(0x00660203), UINT32_C(0x0058FBFA)}, {UINT32_C(0x006C47E6), UINT32_C(0x0031B2BD), UINT32_C(0x007BBA31), UINT32_C(0x00B0AD4B), UINT32_C(0x00787301), UINT32_C(0x002B01EB), UINT32_C(0x001E2E68), UINT32_C(0x005811EC), UINT32_C(0x006D2B81), UINT32_C(0x00700E9C), UINT32_C(0x000457D9)}}, {{UINT32_C(0x005357E1), UINT32_C(0x0057AC0E), UINT32_C(0x000DB286), UINT32_C(0x00EEE3D1), UINT32_C(0x0077ED80), UINT32_C(0x000E6D08), UINT32_C(0x000E2936), UINT32_C(0x004ABA0F), UINT32_C(0x005F2976), UINT32_C(0x007CC785), UINT32_C(0x003AE110)}, {UINT32_C(0x00945699), UINT32_C(0x002637EE), UINT32_C(0x0027992C), UINT32_C(0x00BD9CD8), UINT32_C(0x0070F927), UINT32_C(0x000393E4), UINT32_C(0x006F8B67), UINT32_C(0x0061AAEC), UINT32_C(0x006328E7), UINT32_C(0x005B3FD0), UINT32_C(0x00268F9A)}}, {{UINT32_C(0x00F7A85C), UINT32_C(0x003F3302), UINT32_C(0x0026F852), UINT32_C(0x001C40E9), UINT32_C(0x001E2517), UINT32_C(0x0005A3BF), UINT32_C(0x005700CE), UINT32_C(0x00561812), UINT32_C(0x003C7E74), UINT32_C(0x0066B1B5), UINT32_C(0x0007B9C2)}, {UINT32_C(0x00124E6A), UINT32_C(0x007C15BA), UINT32_C(0x00241638), UINT32_C(0x005A50ED), UINT32_C(0x002A5582), UINT32_C(0x0074D879), UINT32_C(0x0068F177), UINT32_C(0x0066CA1D), UINT32_C(0x0058D9CB), UINT32_C(0x006724E5), UINT32_C(0x00246C5E)}}, {{UINT32_C(0x004D0432), UINT32_C(0x000B0784), UINT32_C(0x00482F19), UINT32_C(0x00EA947D), UINT32_C(0x002C2664), UINT32_C(0x000C8DA3), UINT32_C(0x002F7290), UINT32_C(0x001B3BBF), UINT32_C(0x00602C23), UINT32_C(0x002D7127), UINT32_C(0x0076EBD4)}, {UINT32_C(0x00371D4D), UINT32_C(0x003A8832), UINT32_C(0x000D8BB0), UINT32_C(0x00067D63), UINT32_C(0x003498C7), UINT32_C(0x0072BF20), UINT32_C(0x0064F598), UINT32_C(0x00B95CE3), UINT32_C(0x00587A7D), UINT32_C(0x0055FFCB), UINT32_C(0x0051077A)}}, {{UINT32_C(0x009C7745), UINT32_C(0x007F8E19), UINT32_C(0x00083AF5), UINT32_C(0x00DB23A3), UINT32_C(0x00747602), UINT32_C(0x005F6E8D), UINT32_C(0x00678701), UINT32_C(0x00974612), UINT32_C(0x0056DFDD), UINT32_C(0x002FE8DB), UINT32_C(0x00306683)}, {UINT32_C(0x0089FFA4), UINT32_C(0x00121679), UINT32_C(0x0079120C), UINT32_C(0x000BEDC4), UINT32_C(0x0029B7E4), UINT32_C(0x00496C88), UINT32_C(0x00760536), UINT32_C(0x00C8DB5D), UINT32_C(0x00130589), UINT32_C(0x001DE527), UINT32_C(0x004E350B)}}, {{UINT32_C(0x0047CC2D), UINT32_C(0x003F02AF), UINT32_C(0x007A859E), UINT32_C(0x00E23690), UINT32_C(0x00649380), UINT32_C(0x0058D4FE), UINT32_C(0x00593197), UINT32_C(0x0003C24F), UINT32_C(0x0016F98F), UINT32_C(0x003046CD), UINT32_C(0x005CE122)}, {UINT32_C(0x0050D389), UINT32_C(0x00007E53), UINT32_C(0x004B3FCC), UINT32_C(0x000AB3D0), UINT32_C(0x00103BDD), UINT32_C(0x002F2450), UINT32_C(0x0034780F), UINT32_C(0x00C242E0), UINT32_C(0x00269889), UINT32_C(0x003E5ACB), UINT32_C(0x0076919B)}}, {{UINT32_C(0x000BB75C), UINT32_C(0x0040DD3F), UINT32_C(0x0028965D), UINT32_C(0x00D08696), UINT32_C(0x006F3945), UINT32_C(0x00756F6B), UINT32_C(0x00037271), UINT32_C(0x001C20DD), UINT32_C(0x0037BED6), UINT32_C(0x00080F61), UINT32_C(0x00274CFC)}, {UINT32_C(0x001C1CFE), UINT32_C(0x004D42DD), UINT32_C(0x003FA1F1), UINT32_C(0x00CBE07F), UINT32_C(0x00277815), UINT32_C(0x001262DC), UINT32_C(0x00477DDE), UINT32_C(0x0048F59B), UINT32_C(0x0065A5A3), UINT32_C(0x005FDC99), UINT32_C(0x0064FF50)}}, {{UINT32_C(0x00D66C07), UINT32_C(0x0074289B), UINT32_C(0x005E8814), UINT32_C(0x00B92793), UINT32_C(0x0057F706), UINT32_C(0x0059075D), UINT32_C(0x00508B5E), UINT32_C(0x009A2426), UINT32_C(0x007F10BB), UINT32_C(0x000AFD3F), UINT32_C(0x007801CB)}, {UINT32_C(0x0051B22E), UINT32_C(0x00279999), UINT32_C(0x0001782D), UINT32_C(0x00DC4C85), UINT32_C(0x002439CE), UINT32_C(0x0055AA49), UINT32_C(0x00708E58), UINT32_C(0x0003EA14), UINT32_C(0x00463ED7), UINT32_C(0x00717B6E), UINT32_C(0x0034176A)}}, {{UINT32_C(0x00585B7C), UINT32_C(0x0038AE8B), UINT32_C(0x006C127E), UINT32_C(0x003D794C), UINT32_C(0x001195F4), UINT32_C(0x005DE000), UINT32_C(0x000771A5), UINT32_C(0x00C99CF0), UINT32_C(0x000765DC), UINT32_C(0x0002A789), UINT32_C(0x00048FD2)}, {UINT32_C(0x00482FC7), UINT32_C(0x00275057), UINT32_C(0x00095B7B), UINT32_C(0x0078B02B), UINT32_C(0x000B1596), UINT32_C(0x0073B9FE), UINT32_C(0x0045D41C), UINT32_C(0x002919F9), UINT32_C(0x0056F856), UINT32_C(0x001D4916), UINT32_C(0x007DB0CE)}}, {{UINT32_C(0x001D7FC7), UINT32_C(0x006BED2D), UINT32_C(0x000B2844), UINT32_C(0x003F5459), UINT32_C(0x007CA010), UINT32_C(0x0024D59F), UINT32_C(0x007F0E34), UINT32_C(0x003EB935), UINT32_C(0x006FDF55), UINT32_C(0x0037C092), UINT32_C(0x004207CB)}, {UINT32_C(0x00E92E4A), UINT32_C(0x00744046), UINT32_C(0x00384BF8), UINT32_C(0x0027733A), UINT32_C(0x0071FB22), UINT32_C(0x0053AF65), UINT32_C(0x002794C6), UINT32_C(0x00C79DA2), UINT32_C(0x004A9C1B), UINT32_C(0x001A9309), UINT32_C(0x00103ECF)}}, {{UINT32_C(0x000ACD3F), UINT32_C(0x000E6E24), UINT32_C(0x0058B8AE), UINT32_C(0x003A4430), UINT32_C(0x000A06B4), UINT32_C(0x002DE854), UINT32_C(0x0044E3E2), UINT32_C(0x000867E3), UINT32_C(0x007FF01B), UINT32_C(0x00244016), UINT32_C(0x00012B1D)}, {UINT32_C(0x00B5F186), UINT32_C(0x00752F4D), UINT32_C(0x00358B6B), UINT32_C(0x003F9113), UINT32_C(0x001CEE85), UINT32_C(0x00229C2D), UINT32_C(0x004DA05C), UINT32_C(0x0085A9A9), UINT32_C(0x000D46D9), UINT32_C(0x007E5EDA), UINT32_C(0x00269074)}}, {{UINT32_C(0x00A53FDE), UINT32_C(0x0058A7FA), UINT32_C(0x00032B2F), UINT32_C(0x00E52CC5), UINT32_C(0x004F77CE), UINT32_C(0x0074A88B), UINT32_C(0x002F23CF), UINT32_C(0x00F073CD), UINT32_C(0x00591A19), UINT32_C(0x0051A537), UINT32_C(0x007443BE)}, {UINT32_C(0x008576CC), UINT32_C(0x006F139C), UINT32_C(0x006B127F), UINT32_C(0x00EFC187), UINT32_C(0x00244143), UINT32_C(0x0038C6EC), UINT32_C(0x001FA2AC), UINT32_C(0x001BF011), UINT32_C(0x005D8AE1), UINT32_C(0x00783BEE), UINT32_C(0x000B5335)}}, {{UINT32_C(0x009CB9CB), UINT32_C(0x005CB329), UINT32_C(0x006729A8), UINT32_C(0x00119F0E), UINT32_C(0x002E37B0), UINT32_C(0x00289AD8), UINT32_C(0x0029E70A), UINT32_C(0x00D2872D), UINT32_C(0x0039C662), UINT32_C(0x000182D4), UINT32_C(0x0005EDE9)}, {UINT32_C(0x009C3957), UINT32_C(0x005811A1), UINT32_C(0x002C3D0F), UINT32_C(0x00134BF7), UINT32_C(0x00484F36), UINT32_C(0x0002AC30), UINT32_C(0x00425F9B), UINT32_C(0x00955A54), UINT32_C(0x007B6B36), UINT32_C(0x00327B25), UINT32_C(0x007376DB)}}, {{UINT32_C(0x00F420A8), UINT32_C(0x001348CB), UINT32_C(0x006949EA), UINT32_C(0x004C3B60), UINT32_C(0x006CECF6), UINT32_C(0x0000EFC9), UINT32_C(0x00740C4A), UINT32_C(0x00271CF1), UINT32_C(0x001CC0D8), UINT32_C(0x00017BE4), UINT32_C(0x0005C726)}, {UINT32_C(0x00F3F8A6), UINT32_C(0x00727D92), UINT32_C(0x0063161F), UINT32_C(0x00C70EF9), UINT32_C(0x0015855F), UINT32_C(0x007F8036), UINT32_C(0x00003EDA), UINT32_C(0x001A5C7B), UINT32_C(0x00772841), UINT32_C(0x002A862B), UINT32_C(0x0068F5AC)}}, {{UINT32_C(0x00372511), UINT32_C(0x00437344), UINT32_C(0x003E7956), UINT32_C(0x000C1F67), UINT32_C(0x003EB8B3), UINT32_C(0x00557961), UINT32_C(0x0022832B), UINT32_C(0x00F188A2), UINT32_C(0x007E2427), UINT32_C(0x00147CAB), UINT32_C(0x0045D0A9)}, {UINT32_C(0x0029CABF), UINT32_C(0x005C33DF), UINT32_C(0x00026D73), UINT32_C(0x00AAF04C), UINT32_C(0x0057DB62), UINT32_C(0x0025990B), UINT32_C(0x006DB6EC), UINT32_C(0x003549E6), UINT32_C(0x001DEEAF), UINT32_C(0x002254AC), UINT32_C(0x0058BBD5)}}, {{UINT32_C(0x00B77A44), UINT32_C(0x003F2F46), UINT32_C(0x00064DA4), UINT32_C(0x00839511), UINT32_C(0x0058488B), UINT32_C(0x000B772D), UINT32_C(0x007F4634), UINT32_C(0x008743EC), UINT32_C(0x0050BA38), UINT32_C(0x003CE592), UINT32_C(0x0062440C)}, {UINT32_C(0x006C928C), UINT32_C(0x000B1540), UINT32_C(0x00339658), UINT32_C(0x005BEC51), UINT32_C(0x005B1535), UINT32_C(0x007A2111), UINT32_C(0x002A0968), UINT32_C(0x00EF790D), UINT32_C(0x007468E6), UINT32_C(0x00003B62), UINT32_C(0x002C8A13)}}, }, { {{UINT32_C(0x001AEE99), UINT32_C(0x0020A5A1), UINT32_C(0x0032D7F4), UINT32_C(0x003DF131), UINT32_C(0x001E1996), UINT32_C(0x005B7438), UINT32_C(0x005718AC), UINT32_C(0x00E5D6F0), UINT32_C(0x0067FE3A), UINT32_C(0x0043BEDC), UINT32_C(0x0024BB69)}, {UINT32_C(0x00A31E2E), UINT32_C(0x0047EE95), UINT32_C(0x00464DFE), UINT32_C(0x0042F2B4), UINT32_C(0x001FCD82), UINT32_C(0x002D6AB2), UINT32_C(0x004BDFC2), UINT32_C(0x00844674), UINT32_C(0x003D4411), UINT32_C(0x00432B86), UINT32_C(0x002532BF)}}, {{UINT32_C(0x005F12F9), UINT32_C(0x0062861D), UINT32_C(0x002EFAAB), UINT32_C(0x00FA0463), UINT32_C(0x00315D4D), UINT32_C(0x0061E65A), UINT32_C(0x005DB18D), UINT32_C(0x0009390F), UINT32_C(0x0059E60A), UINT32_C(0x0065E1AF), UINT32_C(0x00624DB7)}, {UINT32_C(0x0083E30F), UINT32_C(0x0064CF13), UINT32_C(0x0072556F), UINT32_C(0x003CA70C), UINT32_C(0x007D9C2B), UINT32_C(0x00139172), UINT32_C(0x002113A1), UINT32_C(0x00FC55DB), UINT32_C(0x000698EC), UINT32_C(0x001E14A5), UINT32_C(0x0076C609)}}, {{UINT32_C(0x0095662A), UINT32_C(0x0036AC63), UINT32_C(0x002500EA), UINT32_C(0x004622AB), UINT32_C(0x0077D68E), UINT32_C(0x0037F839), UINT32_C(0x007758F5), UINT32_C(0x00D42942), UINT32_C(0x003DB22A), UINT32_C(0x00622A98), UINT32_C(0x000DFA70)}, {UINT32_C(0x00EC12BF), UINT32_C(0x0027B94B), UINT32_C(0x0050E295), UINT32_C(0x00EBCA4D), UINT32_C(0x00276449), UINT32_C(0x0047FCA4), UINT32_C(0x0037ED85), UINT32_C(0x0071515E), UINT32_C(0x0066DA3A), UINT32_C(0x0039095E), UINT32_C(0x005B2B97)}}, {{UINT32_C(0x0011BC89), UINT32_C(0x007D50E8), UINT32_C(0x0011BF1F), UINT32_C(0x00A2A84A), UINT32_C(0x0012D4FE), UINT32_C(0x0008D675), UINT32_C(0x002C2672), UINT32_C(0x007645B3), UINT32_C(0x0006D691), UINT32_C(0x00374435), UINT32_C(0x0035AD63)}, {UINT32_C(0x0003E773), UINT32_C(0x006AEC1F), UINT32_C(0x005376E6), UINT32_C(0x00D6A2F2), UINT32_C(0x0001A136), UINT32_C(0x0074EE78), UINT32_C(0x00061BC5), UINT32_C(0x00D92C45), UINT32_C(0x00397CD0), UINT32_C(0x0025C26E), UINT32_C(0x0059374C)}}, {{UINT32_C(0x00A09501), UINT32_C(0x005C78C0), UINT32_C(0x005FDE74), UINT32_C(0x00106048), UINT32_C(0x007EA30E), UINT32_C(0x00646924), UINT32_C(0x00445B79), UINT32_C(0x000ED086), UINT32_C(0x0064E0AC), UINT32_C(0x007D8CBA), UINT32_C(0x004D380E)}, {UINT32_C(0x008E2F04), UINT32_C(0x002E1444), UINT32_C(0x007FAF4F), UINT32_C(0x00780729), UINT32_C(0x003330F9), UINT32_C(0x000589E5), UINT32_C(0x006F0A62), UINT32_C(0x000B0B9C), UINT32_C(0x0013DDD0), UINT32_C(0x000078F6), UINT32_C(0x001CC544)}}, {{UINT32_C(0x005823A8), UINT32_C(0x00410483), UINT32_C(0x007E6356), UINT32_C(0x00414323), UINT32_C(0x00224E12), UINT32_C(0x005FCD9C), UINT32_C(0x00737C09), UINT32_C(0x00697EBD), UINT32_C(0x002148D0), UINT32_C(0x002B1D29), UINT32_C(0x000C5045)}, {UINT32_C(0x0010C3FE), UINT32_C(0x0016E066), UINT32_C(0x002938C4), UINT32_C(0x003ADAEA), UINT32_C(0x007415B5), UINT32_C(0x00151775), UINT32_C(0x0032ACC0), UINT32_C(0x00930BFE), UINT32_C(0x0035E23E), UINT32_C(0x0072CA6D), UINT32_C(0x004E4B15)}}, {{UINT32_C(0x00F00F70), UINT32_C(0x000BABBD), UINT32_C(0x0060773F), UINT32_C(0x007CDF42), UINT32_C(0x0071BD8F), UINT32_C(0x004451AB), UINT32_C(0x00715EB4), UINT32_C(0x00E2E49E), UINT32_C(0x00241448), UINT32_C(0x000AD80D), UINT32_C(0x001CD906)}, {UINT32_C(0x00BCBD12), UINT32_C(0x005D595E), UINT32_C(0x0023ED7A), UINT32_C(0x0071C310), UINT32_C(0x0067765E), UINT32_C(0x00657097), UINT32_C(0x00722381), UINT32_C(0x00DE8456), UINT32_C(0x00282F96), UINT32_C(0x00144C0E), UINT32_C(0x00177CA7)}}, {{UINT32_C(0x00F71055), UINT32_C(0x006456B1), UINT32_C(0x006700E1), UINT32_C(0x008B98F5), UINT32_C(0x0052ADCD), UINT32_C(0x005744F1), UINT32_C(0x007B204B), UINT32_C(0x00A3506E), UINT32_C(0x0063BE42), UINT32_C(0x007E5FFD), UINT32_C(0x00255C05)}, {UINT32_C(0x0088FA6C), UINT32_C(0x00508BF3), UINT32_C(0x006F89D3), UINT32_C(0x00E448C5), UINT32_C(0x00339951), UINT32_C(0x003285F7), UINT32_C(0x0050F779), UINT32_C(0x00BB3742), UINT32_C(0x006C5145), UINT32_C(0x000E4CC6), UINT32_C(0x00725EF1)}}, {{UINT32_C(0x0046AE2B), UINT32_C(0x007D776D), UINT32_C(0x003BCE35), UINT32_C(0x00A61FCE), UINT32_C(0x000D70E8), UINT32_C(0x006292B6), UINT32_C(0x00688218), UINT32_C(0x00BE2745), UINT32_C(0x00094E58), UINT32_C(0x0009B42B), UINT32_C(0x0068C161)}, {UINT32_C(0x003C69E3), UINT32_C(0x002BB404), UINT32_C(0x00192F8E), UINT32_C(0x006C3642), UINT32_C(0x0017D4D5), UINT32_C(0x00120D15), UINT32_C(0x00150EC2), UINT32_C(0x00894ED0), UINT32_C(0x00708435), UINT32_C(0x000F4581), UINT32_C(0x0077E852)}}, {{UINT32_C(0x00E96C40), UINT32_C(0x0003BAE3), UINT32_C(0x0039A069), UINT32_C(0x00CF1197), UINT32_C(0x006C0440), UINT32_C(0x00493531), UINT32_C(0x005CCA20), UINT32_C(0x00051F91), UINT32_C(0x00447C85), UINT32_C(0x00549A26), UINT32_C(0x0021D2DD)}, {UINT32_C(0x0003E55C), UINT32_C(0x004C16AC), UINT32_C(0x005A14F7), UINT32_C(0x001EDD65), UINT32_C(0x005E2DE4), UINT32_C(0x00655DDD), UINT32_C(0x00244FD3), UINT32_C(0x0015E737), UINT32_C(0x0059980C), UINT32_C(0x00764CCA), UINT32_C(0x0044B0FC)}}, {{UINT32_C(0x000F3BFB), UINT32_C(0x007F6C0E), UINT32_C(0x0049E58A), UINT32_C(0x00ACF249), UINT32_C(0x00257C58), UINT32_C(0x003A18F3), UINT32_C(0x0016A0E2), UINT32_C(0x007F0B1A), UINT32_C(0x002626B9), UINT32_C(0x002ADDDB), UINT32_C(0x00666FAA)}, {UINT32_C(0x00951F40), UINT32_C(0x005AD6ED), UINT32_C(0x005A13DC), UINT32_C(0x002957F5), UINT32_C(0x0003C908), UINT32_C(0x002ED9F8), UINT32_C(0x0038A2EF), UINT32_C(0x0066D359), UINT32_C(0x0036BB80), UINT32_C(0x00485D4E), UINT32_C(0x002385BC)}}, {{UINT32_C(0x006992BF), UINT32_C(0x007FBDBC), UINT32_C(0x004F0C3A), UINT32_C(0x00A97852), UINT32_C(0x003652C9), UINT32_C(0x00566C64), UINT32_C(0x0010EA10), UINT32_C(0x003DBBC8), UINT32_C(0x0073C6FC), UINT32_C(0x0016BB4F), UINT32_C(0x007D9107)}, {UINT32_C(0x009A6F04), UINT32_C(0x0001B25D), UINT32_C(0x0069D11F), UINT32_C(0x00F781A6), UINT32_C(0x0017833C), UINT32_C(0x00650EA3), UINT32_C(0x0026DE8E), UINT32_C(0x00F206B1), UINT32_C(0x00381F8F), UINT32_C(0x003E0885), UINT32_C(0x003EC7B2)}}, {{UINT32_C(0x006CC730), UINT32_C(0x003FB03B), UINT32_C(0x003A12B4), UINT32_C(0x001E86B8), UINT32_C(0x004DDC8F), UINT32_C(0x0013F1F5), UINT32_C(0x005AA6C4), UINT32_C(0x006D4113), UINT32_C(0x002B4497), UINT32_C(0x00637931), UINT32_C(0x007E14DA)}, {UINT32_C(0x0082428A), UINT32_C(0x00781839), UINT32_C(0x006D3EE0), UINT32_C(0x00556D45), UINT32_C(0x004CBA3D), UINT32_C(0x001A817C), UINT32_C(0x00079618), UINT32_C(0x009AD974), UINT32_C(0x00039ACC), UINT32_C(0x0066941E), UINT32_C(0x0017E43E)}}, {{UINT32_C(0x001E17BF), UINT32_C(0x003A82E9), UINT32_C(0x00715860), UINT32_C(0x0066AD72), UINT32_C(0x00704AA0), UINT32_C(0x00610943), UINT32_C(0x006D6665), UINT32_C(0x0098EA35), UINT32_C(0x006ADBD9), UINT32_C(0x00686CCC), UINT32_C(0x001D3BA6)}, {UINT32_C(0x009EE4F6), UINT32_C(0x006D56D7), UINT32_C(0x003DF3FF), UINT32_C(0x006D335A), UINT32_C(0x00136056), UINT32_C(0x007862D7), UINT32_C(0x00014DFF), UINT32_C(0x0069526C), UINT32_C(0x004239B5), UINT32_C(0x00225D2B), UINT32_C(0x0034F5F0)}}, {{UINT32_C(0x00CDEBA0), UINT32_C(0x00343287), UINT32_C(0x00356E22), UINT32_C(0x00620AEB), UINT32_C(0x0079884F), UINT32_C(0x005ED81F), UINT32_C(0x00266E56), UINT32_C(0x00DFC04D), UINT32_C(0x00251F00), UINT32_C(0x000B1056), UINT32_C(0x003312CA)}, {UINT32_C(0x0093459D), UINT32_C(0x00027551), UINT32_C(0x005C7CA5), UINT32_C(0x005793A0), UINT32_C(0x00444B26), UINT32_C(0x002E17C0), UINT32_C(0x0065465E), UINT32_C(0x00DE0CFB), UINT32_C(0x00246A04), UINT32_C(0x0058A1E7), UINT32_C(0x0002E6ED)}}, {{UINT32_C(0x00D9BCCB), UINT32_C(0x00731CB2), UINT32_C(0x0054E269), UINT32_C(0x00298E40), UINT32_C(0x0038BD8A), UINT32_C(0x001EF4E1), UINT32_C(0x00536780), UINT32_C(0x008FC99C), UINT32_C(0x0070FBA5), UINT32_C(0x0023FE5A), UINT32_C(0x003086A6)}, {UINT32_C(0x005F65D4), UINT32_C(0x0018B097), UINT32_C(0x0000D107), UINT32_C(0x00A7F701), UINT32_C(0x006D932A), UINT32_C(0x00645C66), UINT32_C(0x0031D996), UINT32_C(0x0021F472), UINT32_C(0x003E05E2), UINT32_C(0x00566358), UINT32_C(0x0020AA4B)}}, }, { {{UINT32_C(0x00036494), UINT32_C(0x002C1376), UINT32_C(0x003827F0), UINT32_C(0x00602697), UINT32_C(0x007FBAE0), UINT32_C(0x0023C27C), UINT32_C(0x0077FD3B), UINT32_C(0x00D682CE), UINT32_C(0x0000127C), UINT32_C(0x001800D0), UINT32_C(0x00434FAA)}, {UINT32_C(0x0097CE18), UINT32_C(0x006C7E53), UINT32_C(0x002407FE), UINT32_C(0x00E59769), UINT32_C(0x0049091C), UINT32_C(0x005990C5), UINT32_C(0x000A8116), UINT32_C(0x006EF1DA), UINT32_C(0x0050BE84), UINT32_C(0x00409E8E), UINT32_C(0x00032E15)}}, {{UINT32_C(0x008BA0CB), UINT32_C(0x0024C765), UINT32_C(0x0025C9B4), UINT32_C(0x00BEB81D), UINT32_C(0x005F5936), UINT32_C(0x00398905), UINT32_C(0x0019ABFF), UINT32_C(0x00D2850E), UINT32_C(0x0017E744), UINT32_C(0x006ED216), UINT32_C(0x005B3A87)}, {UINT32_C(0x000D9750), UINT32_C(0x005A6DCD), UINT32_C(0x0023AC02), UINT32_C(0x00193FD3), UINT32_C(0x00311A37), UINT32_C(0x0018B521), UINT32_C(0x0041715F), UINT32_C(0x00B7BEE0), UINT32_C(0x004A2676), UINT32_C(0x0009D393), UINT32_C(0x0051FD17)}}, {{UINT32_C(0x00BA8CD3), UINT32_C(0x001C0A4F), UINT32_C(0x007FF7A6), UINT32_C(0x0061749E), UINT32_C(0x0012F613), UINT32_C(0x001F7746), UINT32_C(0x0018B9B4), UINT32_C(0x0055F5A2), UINT32_C(0x0039E0C6), UINT32_C(0x002C981C), UINT32_C(0x00252009)}, {UINT32_C(0x003B1F03), UINT32_C(0x0024B0F4), UINT32_C(0x002D9C8D), UINT32_C(0x005B3BC2), UINT32_C(0x0013D8D6), UINT32_C(0x001AE9C3), UINT32_C(0x00365B85), UINT32_C(0x0047917C), UINT32_C(0x003A827D), UINT32_C(0x006AC519), UINT32_C(0x0042EF23)}}, {{UINT32_C(0x0058227A), UINT32_C(0x000C7436), UINT32_C(0x000A3CE3), UINT32_C(0x00AC1B52), UINT32_C(0x00026B67), UINT32_C(0x0002D123), UINT32_C(0x001FFB2E), UINT32_C(0x00DF0227), UINT32_C(0x003158E6), UINT32_C(0x00619FE2), UINT32_C(0x003BDF03)}, {UINT32_C(0x00B4A505), UINT32_C(0x0038DD5F), UINT32_C(0x00129DC1), UINT32_C(0x0035123F), UINT32_C(0x0018810B), UINT32_C(0x0023ECA8), UINT32_C(0x000F60A9), UINT32_C(0x0067E897), UINT32_C(0x002B00B6), UINT32_C(0x0035E5A1), UINT32_C(0x0050D661)}}, {{UINT32_C(0x006D68FC), UINT32_C(0x000B651D), UINT32_C(0x003E52A8), UINT32_C(0x005ACD99), UINT32_C(0x00216D3E), UINT32_C(0x004C0891), UINT32_C(0x00621922), UINT32_C(0x0058B412), UINT32_C(0x007F124C), UINT32_C(0x00597E66), UINT32_C(0x000FAB72)}, {UINT32_C(0x00FAF9A7), UINT32_C(0x0074624D), UINT32_C(0x005AE3A4), UINT32_C(0x00A54BEE), UINT32_C(0x0004EB36), UINT32_C(0x000DC858), UINT32_C(0x00030603), UINT32_C(0x00A8E0B4), UINT32_C(0x00232FA4), UINT32_C(0x0013D254), UINT32_C(0x0020B631)}}, {{UINT32_C(0x003E9997), UINT32_C(0x0050A360), UINT32_C(0x004BAD00), UINT32_C(0x00AB737C), UINT32_C(0x007E4EE9), UINT32_C(0x0073ACDF), UINT32_C(0x007C4D6E), UINT32_C(0x00A39D1C), UINT32_C(0x0042570D), UINT32_C(0x0033830B), UINT32_C(0x0008E1D4)}, {UINT32_C(0x00583D12), UINT32_C(0x005EA888), UINT32_C(0x0026BED7), UINT32_C(0x00C1B988), UINT32_C(0x0039E362), UINT32_C(0x007B873E), UINT32_C(0x005C3583), UINT32_C(0x00EB9BA2), UINT32_C(0x00638B35), UINT32_C(0x00148D21), UINT32_C(0x001B932B)}}, {{UINT32_C(0x002B37C3), UINT32_C(0x002F929B), UINT32_C(0x002CCC0B), UINT32_C(0x0024809E), UINT32_C(0x004FF9D5), UINT32_C(0x00099837), UINT32_C(0x0064A89F), UINT32_C(0x00C0C429), UINT32_C(0x007035B1), UINT32_C(0x00261985), UINT32_C(0x00331EBF)}, {UINT32_C(0x00132A81), UINT32_C(0x00604DFD), UINT32_C(0x0003EF4A), UINT32_C(0x00FECB3D), UINT32_C(0x0008A863), UINT32_C(0x007FF6C4), UINT32_C(0x001F6DF0), UINT32_C(0x00BD475A), UINT32_C(0x004FC4E2), UINT32_C(0x0061E60C), UINT32_C(0x003C7003)}}, {{UINT32_C(0x00D82392), UINT32_C(0x00774CFB), UINT32_C(0x0011493F), UINT32_C(0x007D13D1), UINT32_C(0x0005A8E0), UINT32_C(0x0036AD5D), UINT32_C(0x00231BED), UINT32_C(0x006C009E), UINT32_C(0x00599C2E), UINT32_C(0x002294D8), UINT32_C(0x0077C42B)}, {UINT32_C(0x0044379A), UINT32_C(0x00456F09), UINT32_C(0x00385653), UINT32_C(0x00EFE8AC), UINT32_C(0x004C24E0), UINT32_C(0x0037DA15), UINT32_C(0x002B9F25), UINT32_C(0x00E34D0C), UINT32_C(0x00566C76), UINT32_C(0x0030810A), UINT32_C(0x00782A2F)}}, {{UINT32_C(0x002AE6A8), UINT32_C(0x00049620), UINT32_C(0x00144B79), UINT32_C(0x00EDD792), UINT32_C(0x007D310C), UINT32_C(0x00752D40), UINT32_C(0x000CE8A0), UINT32_C(0x00440AAB), UINT32_C(0x007A9135), UINT32_C(0x00324DA4), UINT32_C(0x00022CA7)}, {UINT32_C(0x001E7545), UINT32_C(0x005E29F4), UINT32_C(0x0039D31B), UINT32_C(0x0060119F), UINT32_C(0x00521746), UINT32_C(0x00334BCB), UINT32_C(0x006F2A29), UINT32_C(0x00F2D35C), UINT32_C(0x00622340), UINT32_C(0x004E3832), UINT32_C(0x000B1869)}}, {{UINT32_C(0x0035F98E), UINT32_C(0x0054DCDC), UINT32_C(0x000537A8), UINT32_C(0x00EA6A6E), UINT32_C(0x00247B34), UINT32_C(0x0029BD4F), UINT32_C(0x0061AE41), UINT32_C(0x009B51AC), UINT32_C(0x0016A791), UINT32_C(0x0055445E), UINT32_C(0x004F050E)}, {UINT32_C(0x000DC4CB), UINT32_C(0x001AE73A), UINT32_C(0x004BD8B2), UINT32_C(0x00E459A8), UINT32_C(0x0040AF9C), UINT32_C(0x0073F418), UINT32_C(0x004B87C6), UINT32_C(0x0074AA9F), UINT32_C(0x002F4063), UINT32_C(0x007AC805), UINT32_C(0x0016C70F)}}, {{UINT32_C(0x0062EAB1), UINT32_C(0x0054EBAD), UINT32_C(0x001F2558), UINT32_C(0x00F0079A), UINT32_C(0x007D23A9), UINT32_C(0x005BF1F5), UINT32_C(0x004E2647), UINT32_C(0x00A0F501), UINT32_C(0x00278FBD), UINT32_C(0x0025F639), UINT32_C(0x00441A71)}, {UINT32_C(0x00F8A724), UINT32_C(0x0034DAD4), UINT32_C(0x004C22C9), UINT32_C(0x00B48AB8), UINT32_C(0x000356CF), UINT32_C(0x00596FDE), UINT32_C(0x00317CF9), UINT32_C(0x003F2657), UINT32_C(0x00381653), UINT32_C(0x0050040E), UINT32_C(0x0055A4A1)}}, {{UINT32_C(0x00EDE34B), UINT32_C(0x0056B7CD), UINT32_C(0x002EF4B0), UINT32_C(0x00E81239), UINT32_C(0x00533D1B), UINT32_C(0x0062E46C), UINT32_C(0x005A9C1B), UINT32_C(0x0056141C), UINT32_C(0x003E618F), UINT32_C(0x0075FB2A), UINT32_C(0x001440CE)}, {UINT32_C(0x00CED2B3), UINT32_C(0x0063FD4A), UINT32_C(0x00487E7B), UINT32_C(0x008BFD17), UINT32_C(0x00612FE8), UINT32_C(0x0018078E), UINT32_C(0x001A43E6), UINT32_C(0x00CA1FDE), UINT32_C(0x004D5027), UINT32_C(0x00686BA9), UINT32_C(0x005C5F64)}}, {{UINT32_C(0x006B794B), UINT32_C(0x003E8078), UINT32_C(0x00725DFB), UINT32_C(0x0003E642), UINT32_C(0x003284D3), UINT32_C(0x006EEFC1), UINT32_C(0x001A1987), UINT32_C(0x0016E28C), UINT32_C(0x00113F3C), UINT32_C(0x003E8399), UINT32_C(0x00287A14)}, {UINT32_C(0x00BDAF78), UINT32_C(0x0013F588), UINT32_C(0x003E90C4), UINT32_C(0x00D74064), UINT32_C(0x0042B810), UINT32_C(0x005F4A46), UINT32_C(0x00543784), UINT32_C(0x00DB74C5), UINT32_C(0x00459CD7), UINT32_C(0x007531F3), UINT32_C(0x0055B5A4)}}, {{UINT32_C(0x001A34E7), UINT32_C(0x002AEEC8), UINT32_C(0x00323D42), UINT32_C(0x00EABD9E), UINT32_C(0x000718F6), UINT32_C(0x0001BD5B), UINT32_C(0x000C39BC), UINT32_C(0x00B62821), UINT32_C(0x00561E9A), UINT32_C(0x001FBABE), UINT32_C(0x00311DCD)}, {UINT32_C(0x00BEEAE4), UINT32_C(0x003E6854), UINT32_C(0x002AE46E), UINT32_C(0x00E57DCB), UINT32_C(0x004F1D7E), UINT32_C(0x0061FDF3), UINT32_C(0x00262088), UINT32_C(0x006BA852), UINT32_C(0x004FBF3F), UINT32_C(0x0019B907), UINT32_C(0x005993AA)}}, {{UINT32_C(0x002F3F67), UINT32_C(0x000A5A43), UINT32_C(0x006CED05), UINT32_C(0x0042972A), UINT32_C(0x0027B1D7), UINT32_C(0x002E72AE), UINT32_C(0x0056B1CB), UINT32_C(0x00C6C042), UINT32_C(0x001AA312), UINT32_C(0x0023387A), UINT32_C(0x003C0940)}, {UINT32_C(0x00F0C8DC), UINT32_C(0x000D1A71), UINT32_C(0x00038280), UINT32_C(0x0098AB5B), UINT32_C(0x000AA672), UINT32_C(0x0000542D), UINT32_C(0x005924A7), UINT32_C(0x009C972A), UINT32_C(0x0018581C), UINT32_C(0x00446E5A), UINT32_C(0x002EF656)}}, {{UINT32_C(0x005F254D), UINT32_C(0x002CA014), UINT32_C(0x00274390), UINT32_C(0x005F1C09), UINT32_C(0x002A9A4C), UINT32_C(0x007503A3), UINT32_C(0x0071F4B9), UINT32_C(0x00667201), UINT32_C(0x0024873C), UINT32_C(0x001FE8DB), UINT32_C(0x00265A01)}, {UINT32_C(0x0080223D), UINT32_C(0x000339C4), UINT32_C(0x005B64C0), UINT32_C(0x00A79EED), UINT32_C(0x0059C957), UINT32_C(0x005E2D2E), UINT32_C(0x0034AC78), UINT32_C(0x002BAFEE), UINT32_C(0x00778F99), UINT32_C(0x004D908C), UINT32_C(0x001C71C6)}}, }, { {{UINT32_C(0x007525D6), UINT32_C(0x0078DFD0), UINT32_C(0x001AC075), UINT32_C(0x00F76FA4), UINT32_C(0x00219F6A), UINT32_C(0x0023F7CB), UINT32_C(0x00236512), UINT32_C(0x008E5237), UINT32_C(0x00768B95), UINT32_C(0x001F359E), UINT32_C(0x007BC8CE)}, {UINT32_C(0x002B44FC), UINT32_C(0x006A2BEB), UINT32_C(0x005919FE), UINT32_C(0x004D26D0), UINT32_C(0x0012E603), UINT32_C(0x0035F223), UINT32_C(0x0045E5BE), UINT32_C(0x007A242E), UINT32_C(0x0052F654), UINT32_C(0x00463CC4), UINT32_C(0x007D62C2)}}, {{UINT32_C(0x00725350), UINT32_C(0x0055207F), UINT32_C(0x0019B576), UINT32_C(0x0077FB10), UINT32_C(0x003DB655), UINT32_C(0x0060FCDA), UINT32_C(0x007593DB), UINT32_C(0x001E1420), UINT32_C(0x00148D4C), UINT32_C(0x00257261), UINT32_C(0x0012B622)}, {UINT32_C(0x0068CF96), UINT32_C(0x003F92AE), UINT32_C(0x00548833), UINT32_C(0x001EFE5D), UINT32_C(0x005E4445), UINT32_C(0x004C80EA), UINT32_C(0x0024D667), UINT32_C(0x009CEF0B), UINT32_C(0x007834DE), UINT32_C(0x00246306), UINT32_C(0x0032BC94)}}, {{UINT32_C(0x00D15DFB), UINT32_C(0x005373DE), UINT32_C(0x0023474D), UINT32_C(0x00B4F94C), UINT32_C(0x006DE5AE), UINT32_C(0x002F13F2), UINT32_C(0x0008C966), UINT32_C(0x00D9C843), UINT32_C(0x006152D1), UINT32_C(0x003AB7F0), UINT32_C(0x00542CFC)}, {UINT32_C(0x00ECDC3F), UINT32_C(0x0057D935), UINT32_C(0x003FD00C), UINT32_C(0x0029A8C0), UINT32_C(0x0015C42A), UINT32_C(0x0024D14E), UINT32_C(0x003C9CA5), UINT32_C(0x008E67D4), UINT32_C(0x0030ED8B), UINT32_C(0x0077755C), UINT32_C(0x00490705)}}, {{UINT32_C(0x00A0236C), UINT32_C(0x00239926), UINT32_C(0x000860D0), UINT32_C(0x00C90CD5), UINT32_C(0x003F7701), UINT32_C(0x006A3B4E), UINT32_C(0x0038FDDB), UINT32_C(0x0092E0E2), UINT32_C(0x0064FAA4), UINT32_C(0x0054A42A), UINT32_C(0x00664E83)}, {UINT32_C(0x00BAE781), UINT32_C(0x0011625D), UINT32_C(0x003FF2BE), UINT32_C(0x00B48675), UINT32_C(0x0033D5A4), UINT32_C(0x0046E677), UINT32_C(0x005C79EC), UINT32_C(0x003EFC01), UINT32_C(0x000687DF), UINT32_C(0x003F98E6), UINT32_C(0x0057654A)}}, {{UINT32_C(0x007C9D05), UINT32_C(0x006E343C), UINT32_C(0x006CA1D5), UINT32_C(0x00045CD0), UINT32_C(0x00464424), UINT32_C(0x005D6BB6), UINT32_C(0x005D7662), UINT32_C(0x00795A8B), UINT32_C(0x000678F1), UINT32_C(0x0042EAF9), UINT32_C(0x0076F6DB)}, {UINT32_C(0x00A709D2), UINT32_C(0x000CF913), UINT32_C(0x00392FD7), UINT32_C(0x00C45B5F), UINT32_C(0x006D4BFE), UINT32_C(0x007F5BBB), UINT32_C(0x007C0A94), UINT32_C(0x00C8F23E), UINT32_C(0x0022B535), UINT32_C(0x002AB090), UINT32_C(0x002E9B77)}}, {{UINT32_C(0x001791A0), UINT32_C(0x0075D057), UINT32_C(0x007D4EEA), UINT32_C(0x003876FE), UINT32_C(0x0021CF5E), UINT32_C(0x000E949E), UINT32_C(0x0054DD38), UINT32_C(0x00A4D9B8), UINT32_C(0x005C64BF), UINT32_C(0x0012AA75), UINT32_C(0x00427813)}, {UINT32_C(0x00A2F134), UINT32_C(0x0057EE9E), UINT32_C(0x006685A2), UINT32_C(0x00C39E70), UINT32_C(0x005C02EE), UINT32_C(0x0028E089), UINT32_C(0x0016D61B), UINT32_C(0x0091565C), UINT32_C(0x007FE441), UINT32_C(0x00441BC2), UINT32_C(0x004FB186)}}, {{UINT32_C(0x009F9253), UINT32_C(0x00044FEB), UINT32_C(0x006A66A4), UINT32_C(0x00E8981D), UINT32_C(0x0051448B), UINT32_C(0x005BA13C), UINT32_C(0x005581CF), UINT32_C(0x00E8DD5B), UINT32_C(0x0078C1B6), UINT32_C(0x003CA471), UINT32_C(0x0008E7A6)}, {UINT32_C(0x005393E2), UINT32_C(0x004204D4), UINT32_C(0x00211A2A), UINT32_C(0x00B3D008), UINT32_C(0x001CFAF3), UINT32_C(0x00068C84), UINT32_C(0x00504638), UINT32_C(0x00DC6FBE), UINT32_C(0x00605F56), UINT32_C(0x007CE2A4), UINT32_C(0x0017AC9D)}}, {{UINT32_C(0x00E75974), UINT32_C(0x0072E0A3), UINT32_C(0x006950E5), UINT32_C(0x007C5A29), UINT32_C(0x000512AA), UINT32_C(0x002A144F), UINT32_C(0x001214FA), UINT32_C(0x00B04BDE), UINT32_C(0x000CC72A), UINT32_C(0x002DD6C9), UINT32_C(0x00200FEB)}, {UINT32_C(0x007358CA), UINT32_C(0x0039CE66), UINT32_C(0x00003E83), UINT32_C(0x00B9546A), UINT32_C(0x00460D56), UINT32_C(0x001A5A98), UINT32_C(0x0012E16F), UINT32_C(0x00CE362B), UINT32_C(0x006563AD), UINT32_C(0x000C7CFB), UINT32_C(0x000164A2)}}, {{UINT32_C(0x00A74C0C), UINT32_C(0x0029F428), UINT32_C(0x0037267E), UINT32_C(0x00C65194), UINT32_C(0x0043C78F), UINT32_C(0x0069B993), UINT32_C(0x003AA947), UINT32_C(0x0088BC88), UINT32_C(0x000B40A1), UINT32_C(0x003E35D0), UINT32_C(0x001B4097)}, {UINT32_C(0x00286354), UINT32_C(0x0075D2BC), UINT32_C(0x005D7F2F), UINT32_C(0x00BD4F51), UINT32_C(0x006A5900), UINT32_C(0x00308202), UINT32_C(0x000E81D9), UINT32_C(0x00453B04), UINT32_C(0x006B1E9A), UINT32_C(0x0063911F), UINT32_C(0x000FD0D6)}}, {{UINT32_C(0x006EFE04), UINT32_C(0x0047D6E6), UINT32_C(0x00020EA2), UINT32_C(0x0043B88F), UINT32_C(0x006A837A), UINT32_C(0x0011DB56), UINT32_C(0x004C3742), UINT32_C(0x00803C38), UINT32_C(0x001A9540), UINT32_C(0x001A1F6E), UINT32_C(0x002D2188)}, {UINT32_C(0x009722F0), UINT32_C(0x0079FAD8), UINT32_C(0x006D15C3), UINT32_C(0x007C9007), UINT32_C(0x0023E12A), UINT32_C(0x0009E88F), UINT32_C(0x0038D49A), UINT32_C(0x00B87971), UINT32_C(0x0054EA95), UINT32_C(0x003BED25), UINT32_C(0x003C9370)}}, {{UINT32_C(0x00730AAD), UINT32_C(0x0074B69E), UINT32_C(0x0018A010), UINT32_C(0x00ACF869), UINT32_C(0x00202D91), UINT32_C(0x00618FE7), UINT32_C(0x0003783B), UINT32_C(0x00322502), UINT32_C(0x004702AC), UINT32_C(0x0075B517), UINT32_C(0x0036900B)}, {UINT32_C(0x003FB20A), UINT32_C(0x00437022), UINT32_C(0x003D242B), UINT32_C(0x00FEE4F4), UINT32_C(0x00276D11), UINT32_C(0x0040A87C), UINT32_C(0x0061F26A), UINT32_C(0x00F66A5B), UINT32_C(0x0076128D), UINT32_C(0x002AD91A), UINT32_C(0x007D1259)}}, {{UINT32_C(0x007628C3), UINT32_C(0x0073E024), UINT32_C(0x0023855F), UINT32_C(0x004B1FBD), UINT32_C(0x00684558), UINT32_C(0x005CB959), UINT32_C(0x005ED77A), UINT32_C(0x008234D5), UINT32_C(0x001DF835), UINT32_C(0x00194398), UINT32_C(0x00209BA1)}, {UINT32_C(0x00632779), UINT32_C(0x00194050), UINT32_C(0x006E13F1), UINT32_C(0x008FA4BC), UINT32_C(0x00464026), UINT32_C(0x0013B9ED), UINT32_C(0x003DCB10), UINT32_C(0x00BD9EE5), UINT32_C(0x00757CA6), UINT32_C(0x007A0F71), UINT32_C(0x000B4460)}}, {{UINT32_C(0x0012D2C5), UINT32_C(0x005F26F3), UINT32_C(0x003FDA58), UINT32_C(0x009F0D33), UINT32_C(0x001A9FC7), UINT32_C(0x00412B7C), UINT32_C(0x005BD541), UINT32_C(0x00275539), UINT32_C(0x0026899F), UINT32_C(0x0062067D), UINT32_C(0x004ABE07)}, {UINT32_C(0x009290FF), UINT32_C(0x0008F902), UINT32_C(0x005B3174), UINT32_C(0x00BD00F1), UINT32_C(0x006F6CFA), UINT32_C(0x00703B6C), UINT32_C(0x004B306D), UINT32_C(0x00331AC1), UINT32_C(0x00703E76), UINT32_C(0x004712AD), UINT32_C(0x000C81F8)}}, {{UINT32_C(0x00FE693D), UINT32_C(0x000F4508), UINT32_C(0x0002FCF8), UINT32_C(0x00E0954B), UINT32_C(0x00040F5D), UINT32_C(0x005C00E7), UINT32_C(0x00700B3A), UINT32_C(0x00420CF9), UINT32_C(0x002B08A6), UINT32_C(0x00160E5F), UINT32_C(0x001712CE)}, {UINT32_C(0x00A1DBED), UINT32_C(0x00787A0A), UINT32_C(0x000BCD4C), UINT32_C(0x0062D939), UINT32_C(0x006B28AC), UINT32_C(0x00164809), UINT32_C(0x007F6FE7), UINT32_C(0x005D1F67), UINT32_C(0x00557447), UINT32_C(0x0062C3E0), UINT32_C(0x00476FD0)}}, {{UINT32_C(0x00B36FBF), UINT32_C(0x003D80AA), UINT32_C(0x00214159), UINT32_C(0x00E99663), UINT32_C(0x0058CDAA), UINT32_C(0x0014C3F2), UINT32_C(0x003D868E), UINT32_C(0x0035B474), UINT32_C(0x001D1436), UINT32_C(0x00048E40), UINT32_C(0x006AAF0D)}, {UINT32_C(0x00D0E8D0), UINT32_C(0x005BDF3C), UINT32_C(0x00258CC0), UINT32_C(0x00828F97), UINT32_C(0x0012E7A5), UINT32_C(0x004BAF68), UINT32_C(0x004E71C5), UINT32_C(0x002A2699), UINT32_C(0x006A772A), UINT32_C(0x0017160A), UINT32_C(0x0040BDB6)}}, {{UINT32_C(0x002BCD28), UINT32_C(0x006CCC00), UINT32_C(0x004C1CF7), UINT32_C(0x001BA30A), UINT32_C(0x006097CD), UINT32_C(0x005D0B45), UINT32_C(0x002C9DCF), UINT32_C(0x00C3CD03), UINT32_C(0x00489B87), UINT32_C(0x007C9642), UINT32_C(0x005A0A68)}, {UINT32_C(0x00D7C516), UINT32_C(0x0054FD9C), UINT32_C(0x001F2677), UINT32_C(0x004F48D5), UINT32_C(0x000B6C13), UINT32_C(0x0078D063), UINT32_C(0x005298BA), UINT32_C(0x00B8780E), UINT32_C(0x00220AF4), UINT32_C(0x00076896), UINT32_C(0x00027744)}}, }, { {{UINT32_C(0x00259121), UINT32_C(0x00780B29), UINT32_C(0x00039769), UINT32_C(0x00EB5E49), UINT32_C(0x00050B31), UINT32_C(0x000092C3), UINT32_C(0x004A18D1), UINT32_C(0x00BEE193), UINT32_C(0x0021482F), UINT32_C(0x0018C2E7), UINT32_C(0x0018F417)}, {UINT32_C(0x003B3193), UINT32_C(0x00535E04), UINT32_C(0x00500D71), UINT32_C(0x0036E3E0), UINT32_C(0x006FF0A5), UINT32_C(0x007EA7BE), UINT32_C(0x00407708), UINT32_C(0x00630180), UINT32_C(0x007BF646), UINT32_C(0x00576B67), UINT32_C(0x007CE956)}}, {{UINT32_C(0x00171587), UINT32_C(0x00655CC1), UINT32_C(0x00488679), UINT32_C(0x00CE4CA9), UINT32_C(0x00041352), UINT32_C(0x007263F6), UINT32_C(0x0010ADD3), UINT32_C(0x00076CB5), UINT32_C(0x003EB667), UINT32_C(0x006C507D), UINT32_C(0x0079534E)}, {UINT32_C(0x001F5C5D), UINT32_C(0x00303618), UINT32_C(0x0007DBD5), UINT32_C(0x000DB229), UINT32_C(0x007DA0B0), UINT32_C(0x00423931), UINT32_C(0x0047CEA2), UINT32_C(0x0078D1CB), UINT32_C(0x00147094), UINT32_C(0x007B2327), UINT32_C(0x00417208)}}, {{UINT32_C(0x009DFEFF), UINT32_C(0x0033C1FF), UINT32_C(0x003D13CC), UINT32_C(0x0022EFEF), UINT32_C(0x007FE948), UINT32_C(0x005EEFB8), UINT32_C(0x001AD2B7), UINT32_C(0x00E96C81), UINT32_C(0x0026BBFC), UINT32_C(0x002585EE), UINT32_C(0x00745C59)}, {UINT32_C(0x009DCD65), UINT32_C(0x0021489A), UINT32_C(0x00004480), UINT32_C(0x00060657), UINT32_C(0x003701DD), UINT32_C(0x005D19B3), UINT32_C(0x0075E1C0), UINT32_C(0x003892E0), UINT32_C(0x0064F9DE), UINT32_C(0x0035DC27), UINT32_C(0x0022C79F)}}, {{UINT32_C(0x0058C6F2), UINT32_C(0x00752404), UINT32_C(0x006C8922), UINT32_C(0x00E6C036), UINT32_C(0x004204FF), UINT32_C(0x002ED321), UINT32_C(0x003D0BB2), UINT32_C(0x006D9D7A), UINT32_C(0x006E5E62), UINT32_C(0x004F1C35), UINT32_C(0x007EF78D)}, {UINT32_C(0x009190F7), UINT32_C(0x005FBA14), UINT32_C(0x004879E5), UINT32_C(0x00A6E235), UINT32_C(0x005DD8F6), UINT32_C(0x00554643), UINT32_C(0x00090E18), UINT32_C(0x00611285), UINT32_C(0x001AEA18), UINT32_C(0x0072B543), UINT32_C(0x002593AC)}}, {{UINT32_C(0x0059C268), UINT32_C(0x0012165B), UINT32_C(0x00159FF5), UINT32_C(0x003F5872), UINT32_C(0x004905ED), UINT32_C(0x001BF4B6), UINT32_C(0x00355284), UINT32_C(0x00D00A03), UINT32_C(0x001B4A76), UINT32_C(0x0031B3A5), UINT32_C(0x005DDE8F)}, {UINT32_C(0x0061678D), UINT32_C(0x000F2A71), UINT32_C(0x001FDD6E), UINT32_C(0x0076A915), UINT32_C(0x00582B74), UINT32_C(0x000DA16F), UINT32_C(0x00345F20), UINT32_C(0x00634760), UINT32_C(0x0051ED40), UINT32_C(0x006A3D97), UINT32_C(0x00190B8F)}}, {{UINT32_C(0x00EECAB3), UINT32_C(0x002F2403), UINT32_C(0x00636CBA), UINT32_C(0x00A54BAF), UINT32_C(0x007D99BA), UINT32_C(0x0007FB3D), UINT32_C(0x003C3EAC), UINT32_C(0x000EF42B), UINT32_C(0x00198349), UINT32_C(0x002E9959), UINT32_C(0x000F2F86)}, {UINT32_C(0x00B9D5F6), UINT32_C(0x00463217), UINT32_C(0x00074FAC), UINT32_C(0x001183B8), UINT32_C(0x002C896F), UINT32_C(0x0055F891), UINT32_C(0x00105639), UINT32_C(0x0072DF59), UINT32_C(0x000D9B72), UINT32_C(0x007D9093), UINT32_C(0x004EAA60)}}, {{UINT32_C(0x009F9703), UINT32_C(0x001B0826), UINT32_C(0x0076FA46), UINT32_C(0x00826948), UINT32_C(0x004D4814), UINT32_C(0x0050B57C), UINT32_C(0x005C41CC), UINT32_C(0x00A88628), UINT32_C(0x005D3BCD), UINT32_C(0x001C7176), UINT32_C(0x00554D0A)}, {UINT32_C(0x00B63C62), UINT32_C(0x00561A3E), UINT32_C(0x0057E7D3), UINT32_C(0x00F1D376), UINT32_C(0x002E45AC), UINT32_C(0x005D7F33), UINT32_C(0x00698C00), UINT32_C(0x00F7C938), UINT32_C(0x0036EEFA), UINT32_C(0x005C1FAC), UINT32_C(0x005D1B2E)}}, {{UINT32_C(0x00F53650), UINT32_C(0x0069380C), UINT32_C(0x0012C364), UINT32_C(0x0032E8A7), UINT32_C(0x00515F1E), UINT32_C(0x001F9182), UINT32_C(0x0068DEE7), UINT32_C(0x00CCF589), UINT32_C(0x0076EE01), UINT32_C(0x0029DF93), UINT32_C(0x00787773)}, {UINT32_C(0x00B3DDF7), UINT32_C(0x0053B71C), UINT32_C(0x0006F8FD), UINT32_C(0x00DFF4AB), UINT32_C(0x0006B924), UINT32_C(0x007E2A66), UINT32_C(0x004A7D4B), UINT32_C(0x00AF1A4A), UINT32_C(0x0057F48B), UINT32_C(0x0044541B), UINT32_C(0x0049AD77)}}, {{UINT32_C(0x005F6754), UINT32_C(0x007B1268), UINT32_C(0x000CA1F5), UINT32_C(0x0004DE64), UINT32_C(0x004FD873), UINT32_C(0x003036C4), UINT32_C(0x0041B763), UINT32_C(0x00FCE495), UINT32_C(0x00200179), UINT32_C(0x005F6BDA), UINT32_C(0x0068ED61)}, {UINT32_C(0x00C95FCE), UINT32_C(0x000477FE), UINT32_C(0x00580F29), UINT32_C(0x00BB42ED), UINT32_C(0x00750145), UINT32_C(0x000DC207), UINT32_C(0x002BEC56), UINT32_C(0x00EB7195), UINT32_C(0x001693A1), UINT32_C(0x003EB07D), UINT32_C(0x00135B86)}}, {{UINT32_C(0x0066889B), UINT32_C(0x0017A14A), UINT32_C(0x002DF300), UINT32_C(0x002BBAB9), UINT32_C(0x0015E56C), UINT32_C(0x002EB2BA), UINT32_C(0x001D111B), UINT32_C(0x00BA9054), UINT32_C(0x0069E112), UINT32_C(0x007A15D8), UINT32_C(0x00436DD2)}, {UINT32_C(0x00E27B51), UINT32_C(0x0073DEE8), UINT32_C(0x007A67DC), UINT32_C(0x0055BEAF), UINT32_C(0x004FDE98), UINT32_C(0x001CCAC5), UINT32_C(0x0057571D), UINT32_C(0x00B71DD1), UINT32_C(0x005EC9C2), UINT32_C(0x00698B19), UINT32_C(0x00572BAF)}}, {{UINT32_C(0x00FE2F09), UINT32_C(0x004CCD1B), UINT32_C(0x005B6C69), UINT32_C(0x00CE2291), UINT32_C(0x0036C67A), UINT32_C(0x001AA26F), UINT32_C(0x00482976), UINT32_C(0x000346C9), UINT32_C(0x0071FA32), UINT32_C(0x006AAA17), UINT32_C(0x0066681D)}, {UINT32_C(0x006DEDEE), UINT32_C(0x005A67B7), UINT32_C(0x0066E9D5), UINT32_C(0x00F07923), UINT32_C(0x00767A82), UINT32_C(0x0060641F), UINT32_C(0x005C4851), UINT32_C(0x0077DBEB), UINT32_C(0x006550C4), UINT32_C(0x005C811B), UINT32_C(0x00204A6C)}}, {{UINT32_C(0x00F41270), UINT32_C(0x007228A8), UINT32_C(0x0023FE22), UINT32_C(0x0087E9E0), UINT32_C(0x001016E1), UINT32_C(0x002EA90D), UINT32_C(0x003BEE12), UINT32_C(0x0002DA75), UINT32_C(0x00486C8C), UINT32_C(0x000FFBE4), UINT32_C(0x00161DF5)}, {UINT32_C(0x0073031B), UINT32_C(0x0068C340), UINT32_C(0x005C0685), UINT32_C(0x0027F000), UINT32_C(0x0028653F), UINT32_C(0x005D1D2F), UINT32_C(0x003F0628), UINT32_C(0x0066005A), UINT32_C(0x005AD814), UINT32_C(0x0001BCF2), UINT32_C(0x0032CEE0)}}, {{UINT32_C(0x00ADB2E0), UINT32_C(0x00483DBE), UINT32_C(0x00626B68), UINT32_C(0x004FB784), UINT32_C(0x00350F94), UINT32_C(0x00357148), UINT32_C(0x007F0B6D), UINT32_C(0x0029332B), UINT32_C(0x003AD1F4), UINT32_C(0x001F3681), UINT32_C(0x0071D76B)}, {UINT32_C(0x0026BAF9), UINT32_C(0x00473D14), UINT32_C(0x00021B2C), UINT32_C(0x00941016), UINT32_C(0x004F652A), UINT32_C(0x007D3A99), UINT32_C(0x004ABBAD), UINT32_C(0x0087A405), UINT32_C(0x000547B1), UINT32_C(0x0059E149), UINT32_C(0x00541E49)}}, {{UINT32_C(0x00694346), UINT32_C(0x0042316D), UINT32_C(0x00758401), UINT32_C(0x00D76375), UINT32_C(0x005ECFAE), UINT32_C(0x00680B14), UINT32_C(0x0026EA25), UINT32_C(0x00070619), UINT32_C(0x0058D41C), UINT32_C(0x0048DB6A), UINT32_C(0x00062542)}, {UINT32_C(0x003DE6A0), UINT32_C(0x003469E5), UINT32_C(0x00302B64), UINT32_C(0x00CD8BF2), UINT32_C(0x0045419E), UINT32_C(0x001E9AAF), UINT32_C(0x003EFC2C), UINT32_C(0x00E12629), UINT32_C(0x0060F16E), UINT32_C(0x0048A125), UINT32_C(0x002969D8)}}, {{UINT32_C(0x00C271BD), UINT32_C(0x0053BE38), UINT32_C(0x00373A9B), UINT32_C(0x00AB74E5), UINT32_C(0x00676622), UINT32_C(0x005F7345), UINT32_C(0x007A6084), UINT32_C(0x0095988C), UINT32_C(0x0055BB90), UINT32_C(0x00411396), UINT32_C(0x000E67BF)}, {UINT32_C(0x00CF58AC), UINT32_C(0x0060BB94), UINT32_C(0x0046BFAD), UINT32_C(0x003C68E3), UINT32_C(0x00748102), UINT32_C(0x00647558), UINT32_C(0x005B14F7), UINT32_C(0x00494DA5), UINT32_C(0x002AB3B3), UINT32_C(0x0065BA0F), UINT32_C(0x005C011D)}}, {{UINT32_C(0x00D13FD0), UINT32_C(0x0051781B), UINT32_C(0x0028EAA9), UINT32_C(0x0038E655), UINT32_C(0x00624813), UINT32_C(0x00476802), UINT32_C(0x0073DD34), UINT32_C(0x0019666A), UINT32_C(0x00479419), UINT32_C(0x002D06C2), UINT32_C(0x0052A1AF)}, {UINT32_C(0x003684D7), UINT32_C(0x003EE24A), UINT32_C(0x005496AF), UINT32_C(0x004899AC), UINT32_C(0x005FC959), UINT32_C(0x007950D6), UINT32_C(0x00180144), UINT32_C(0x00DF7129), UINT32_C(0x0014AFF7), UINT32_C(0x007D7BA5), UINT32_C(0x007347EA)}}, }, { {{UINT32_C(0x00978880), UINT32_C(0x0005E66D), UINT32_C(0x003D5998), UINT32_C(0x008F2D63), UINT32_C(0x003E9896), UINT32_C(0x002DCC8D), UINT32_C(0x00789105), UINT32_C(0x00786FAC), UINT32_C(0x0006486C), UINT32_C(0x004DEBB7), UINT32_C(0x007C6948)}, {UINT32_C(0x001922F1), UINT32_C(0x003D924D), UINT32_C(0x0005E5FB), UINT32_C(0x00CEF8A3), UINT32_C(0x004EBF60), UINT32_C(0x00039779), UINT32_C(0x001D5AD8), UINT32_C(0x00AEAD3B), UINT32_C(0x003178D9), UINT32_C(0x0011AF88), UINT32_C(0x004858F6)}}, {{UINT32_C(0x0017EA11), UINT32_C(0x002925A4), UINT32_C(0x0022EBC5), UINT32_C(0x008C6F13), UINT32_C(0x0068235B), UINT32_C(0x0007668E), UINT32_C(0x00789C73), UINT32_C(0x0063577F), UINT32_C(0x0019C095), UINT32_C(0x0054C609), UINT32_C(0x00228B12)}, {UINT32_C(0x00B423B7), UINT32_C(0x007B3E73), UINT32_C(0x0006F374), UINT32_C(0x0032C99A), UINT32_C(0x0033919B), UINT32_C(0x004480AF), UINT32_C(0x007CF2DC), UINT32_C(0x00DF4C55), UINT32_C(0x00194F69), UINT32_C(0x0002FA8A), UINT32_C(0x00273C64)}}, {{UINT32_C(0x00B22D03), UINT32_C(0x004609D0), UINT32_C(0x000E534B), UINT32_C(0x00B53A66), UINT32_C(0x0013A238), UINT32_C(0x0035DF0D), UINT32_C(0x002227E6), UINT32_C(0x00925830), UINT32_C(0x004B0D8E), UINT32_C(0x0045DD96), UINT32_C(0x00489148)}, {UINT32_C(0x00A0967E), UINT32_C(0x002AE5BC), UINT32_C(0x00796CFA), UINT32_C(0x00CD72AF), UINT32_C(0x005B6940), UINT32_C(0x00012BBA), UINT32_C(0x005FC6EF), UINT32_C(0x00DCD6CA), UINT32_C(0x000D4575), UINT32_C(0x003A665E), UINT32_C(0x004D067C)}}, {{UINT32_C(0x001AECD9), UINT32_C(0x00273F6F), UINT32_C(0x0025F83B), UINT32_C(0x00FFD158), UINT32_C(0x00133FE6), UINT32_C(0x001F91CB), UINT32_C(0x007C28C3), UINT32_C(0x002B2923), UINT32_C(0x0028D2B0), UINT32_C(0x00267588), UINT32_C(0x005BED5F)}, {UINT32_C(0x00EE613B), UINT32_C(0x002D41FF), UINT32_C(0x00611238), UINT32_C(0x0037C033), UINT32_C(0x000A5923), UINT32_C(0x0040AA8E), UINT32_C(0x00226F22), UINT32_C(0x00ACB580), UINT32_C(0x00332B6F), UINT32_C(0x00573DBD), UINT32_C(0x00058D53)}}, {{UINT32_C(0x000B6527), UINT32_C(0x00633B9B), UINT32_C(0x0015CA8A), UINT32_C(0x00CAF1F7), UINT32_C(0x0014FEBC), UINT32_C(0x00404B31), UINT32_C(0x005DE86F), UINT32_C(0x00E40657), UINT32_C(0x0040EE16), UINT32_C(0x006745A5), UINT32_C(0x001CC28B)}, {UINT32_C(0x00D0A46D), UINT32_C(0x0052FCCC), UINT32_C(0x005B6FE6), UINT32_C(0x009F4694), UINT32_C(0x003EE682), UINT32_C(0x00135F2D), UINT32_C(0x006B1F49), UINT32_C(0x00903C8F), UINT32_C(0x0066F07A), UINT32_C(0x0067D510), UINT32_C(0x006FBACA)}}, {{UINT32_C(0x00996ED6), UINT32_C(0x005D39E4), UINT32_C(0x001A204F), UINT32_C(0x0048C691), UINT32_C(0x004EDCA1), UINT32_C(0x000326EA), UINT32_C(0x005897F6), UINT32_C(0x005DAFAA), UINT32_C(0x007CE893), UINT32_C(0x001521A8), UINT32_C(0x00720EC4)}, {UINT32_C(0x00B2D745), UINT32_C(0x0044D634), UINT32_C(0x00645385), UINT32_C(0x00FCF90E), UINT32_C(0x005705FF), UINT32_C(0x00194811), UINT32_C(0x00465D27), UINT32_C(0x00DA9D7A), UINT32_C(0x00183FEE), UINT32_C(0x0033D943), UINT32_C(0x003FD6A9)}}, {{UINT32_C(0x00667E0F), UINT32_C(0x00755AD8), UINT32_C(0x00555F7B), UINT32_C(0x00C2071C), UINT32_C(0x003AA31C), UINT32_C(0x0027748C), UINT32_C(0x0065D71F), UINT32_C(0x00B8551F), UINT32_C(0x005831C5), UINT32_C(0x00007409), UINT32_C(0x0019AE44)}, {UINT32_C(0x00C46447), UINT32_C(0x0028055B), UINT32_C(0x000AAEBC), UINT32_C(0x00811E2C), UINT32_C(0x000A161D), UINT32_C(0x005417D2), UINT32_C(0x00532D53), UINT32_C(0x00195F30), UINT32_C(0x007ADD3B), UINT32_C(0x0079DFD4), UINT32_C(0x004C7DEA)}}, {{UINT32_C(0x00AA87C8), UINT32_C(0x000AA2A3), UINT32_C(0x0021BFFE), UINT32_C(0x007EEC07), UINT32_C(0x00165806), UINT32_C(0x001D2B43), UINT32_C(0x007D76F2), UINT32_C(0x00D7F740), UINT32_C(0x003CD969), UINT32_C(0x004EFCFC), UINT32_C(0x004B057E)}, {UINT32_C(0x00812859), UINT32_C(0x00262F51), UINT32_C(0x005521D1), UINT32_C(0x00A51059), UINT32_C(0x00374C25), UINT32_C(0x006ADA14), UINT32_C(0x0076B74A), UINT32_C(0x006F1B1A), UINT32_C(0x005EAF40), UINT32_C(0x0024DA86), UINT32_C(0x007F9103)}}, {{UINT32_C(0x009A47A8), UINT32_C(0x0024BD4E), UINT32_C(0x00047520), UINT32_C(0x0094EB12), UINT32_C(0x0009C313), UINT32_C(0x002CA8A1), UINT32_C(0x002E7050), UINT32_C(0x00D0760D), UINT32_C(0x007B653F), UINT32_C(0x00135449), UINT32_C(0x0079DBC7)}, {UINT32_C(0x007D4BFD), UINT32_C(0x006CBD61), UINT32_C(0x001AF365), UINT32_C(0x0041A9E7), UINT32_C(0x000EA23B), UINT32_C(0x000496E3), UINT32_C(0x007D8894), UINT32_C(0x00D7926C), UINT32_C(0x0048D1E6), UINT32_C(0x0021BA7D), UINT32_C(0x0076D264)}}, {{UINT32_C(0x004D6735), UINT32_C(0x00349533), UINT32_C(0x0026B4B7), UINT32_C(0x00938C63), UINT32_C(0x00259D23), UINT32_C(0x00327F58), UINT32_C(0x000972E6), UINT32_C(0x00DFCD69), UINT32_C(0x004A4323), UINT32_C(0x007FE26C), UINT32_C(0x001F308C)}, {UINT32_C(0x00B5CA15), UINT32_C(0x0013066F), UINT32_C(0x00554ED3), UINT32_C(0x0092A76E), UINT32_C(0x00767C40), UINT32_C(0x0001BD5A), UINT32_C(0x007F0EC1), UINT32_C(0x004E5BCB), UINT32_C(0x0033C8BC), UINT32_C(0x00384042), UINT32_C(0x0028DAF3)}}, {{UINT32_C(0x00BB2865), UINT32_C(0x0074D6A2), UINT32_C(0x007D552B), UINT32_C(0x005E0EAF), UINT32_C(0x007BD504), UINT32_C(0x0079341F), UINT32_C(0x0064542F), UINT32_C(0x00445DD5), UINT32_C(0x00289614), UINT32_C(0x0009E5FF), UINT32_C(0x002F0D16)}, {UINT32_C(0x00118DE4), UINT32_C(0x0061DD1F), UINT32_C(0x004282EE), UINT32_C(0x005DF2AC), UINT32_C(0x004951DF), UINT32_C(0x007C84E0), UINT32_C(0x006F8826), UINT32_C(0x00545F9D), UINT32_C(0x0050CDEE), UINT32_C(0x003414C7), UINT32_C(0x00228E14)}}, {{UINT32_C(0x0021FB0D), UINT32_C(0x0054D257), UINT32_C(0x0071F975), UINT32_C(0x00FB2766), UINT32_C(0x0049536E), UINT32_C(0x006245E8), UINT32_C(0x00090378), UINT32_C(0x00A7124C), UINT32_C(0x007CD78C), UINT32_C(0x00163C62), UINT32_C(0x001C1D00)}, {UINT32_C(0x0041A6D3), UINT32_C(0x007CEA65), UINT32_C(0x00384B4B), UINT32_C(0x00C28E24), UINT32_C(0x0073484A), UINT32_C(0x00457BD5), UINT32_C(0x00258E54), UINT32_C(0x00868651), UINT32_C(0x000B50A9), UINT32_C(0x0071A4E3), UINT32_C(0x00405353)}}, {{UINT32_C(0x007327CF), UINT32_C(0x005D8779), UINT32_C(0x003387AF), UINT32_C(0x00892854), UINT32_C(0x006E7126), UINT32_C(0x004C6531), UINT32_C(0x002D3F16), UINT32_C(0x0000D279), UINT32_C(0x005A56F1), UINT32_C(0x000126BC), UINT32_C(0x005F03F2)}, {UINT32_C(0x0024065F), UINT32_C(0x0028A2BF), UINT32_C(0x00690907), UINT32_C(0x00E63938), UINT32_C(0x006A92A2), UINT32_C(0x0012FA15), UINT32_C(0x002E3667), UINT32_C(0x00301625), UINT32_C(0x0068DFF5), UINT32_C(0x007C18F7), UINT32_C(0x0057C821)}}, {{UINT32_C(0x00F6FB17), UINT32_C(0x00117A2C), UINT32_C(0x00702920), UINT32_C(0x00D8E8DC), UINT32_C(0x00583CF5), UINT32_C(0x00581272), UINT32_C(0x0014FA49), UINT32_C(0x000BB02A), UINT32_C(0x000BFAD2), UINT32_C(0x000D7AF5), UINT32_C(0x003C597E)}, {UINT32_C(0x00DC1695), UINT32_C(0x007BDD76), UINT32_C(0x006DF467), UINT32_C(0x007F6B18), UINT32_C(0x0014F2F0), UINT32_C(0x007C500F), UINT32_C(0x0008D022), UINT32_C(0x0001FBD4), UINT32_C(0x004DA576), UINT32_C(0x00414183), UINT32_C(0x00086206)}}, {{UINT32_C(0x0071E1BB), UINT32_C(0x000F9619), UINT32_C(0x0026D84F), UINT32_C(0x009F1C46), UINT32_C(0x005B79C0), UINT32_C(0x007AEEC3), UINT32_C(0x001874EB), UINT32_C(0x0081978E), UINT32_C(0x00293406), UINT32_C(0x0001D4FC), UINT32_C(0x00615B35)}, {UINT32_C(0x00182D40), UINT32_C(0x0042A332), UINT32_C(0x0017C797), UINT32_C(0x00B3E39F), UINT32_C(0x00429FC1), UINT32_C(0x0075CDCC), UINT32_C(0x0017A29B), UINT32_C(0x00B485C4), UINT32_C(0x000578E3), UINT32_C(0x00267997), UINT32_C(0x0022B736)}}, {{UINT32_C(0x005B3F31), UINT32_C(0x00208743), UINT32_C(0x005CE60C), UINT32_C(0x00A70DDC), UINT32_C(0x000739FA), UINT32_C(0x005A8096), UINT32_C(0x0004765E), UINT32_C(0x00060FD2), UINT32_C(0x00317203), UINT32_C(0x0078A3F6), UINT32_C(0x0013A216)}, {UINT32_C(0x00F7310F), UINT32_C(0x006787A8), UINT32_C(0x004CA7F1), UINT32_C(0x0058A285), UINT32_C(0x0063A5F2), UINT32_C(0x002D9D33), UINT32_C(0x000AE58C), UINT32_C(0x0021A049), UINT32_C(0x005E164E), UINT32_C(0x0053ABF4), UINT32_C(0x0012DD24)}}, }, { {{UINT32_C(0x00BAC990), UINT32_C(0x000DAB38), UINT32_C(0x00717BBA), UINT32_C(0x00AC779D), UINT32_C(0x001DCA52), UINT32_C(0x00300C2E), UINT32_C(0x002A2255), UINT32_C(0x005A0E8E), UINT32_C(0x0015AB31), UINT32_C(0x00313D50), UINT32_C(0x003E1B41)}, {UINT32_C(0x00528772), UINT32_C(0x003D56AB), UINT32_C(0x00717BB2), UINT32_C(0x0087E006), UINT32_C(0x0042AF5A), UINT32_C(0x0057EE11), UINT32_C(0x002AC11C), UINT32_C(0x00B30A1D), UINT32_C(0x0062AF80), UINT32_C(0x00024671), UINT32_C(0x00138392)}}, {{UINT32_C(0x0055EF18), UINT32_C(0x00290769), UINT32_C(0x000C06CC), UINT32_C(0x00640FB7), UINT32_C(0x0032AA7D), UINT32_C(0x0037CE38), UINT32_C(0x00559DB0), UINT32_C(0x009E8D04), UINT32_C(0x001BE9A9), UINT32_C(0x0043CD9A), UINT32_C(0x00616E9E)}, {UINT32_C(0x00A62590), UINT32_C(0x0044D2E5), UINT32_C(0x00438F19), UINT32_C(0x007C024D), UINT32_C(0x00387E23), UINT32_C(0x0012F97D), UINT32_C(0x00593049), UINT32_C(0x00BBE9F5), UINT32_C(0x002EB4C3), UINT32_C(0x00492C4B), UINT32_C(0x000BD31C)}}, {{UINT32_C(0x004436A6), UINT32_C(0x002F9836), UINT32_C(0x003A1719), UINT32_C(0x0013E3D0), UINT32_C(0x0001CE66), UINT32_C(0x0075D201), UINT32_C(0x0070741C), UINT32_C(0x003D4468), UINT32_C(0x006001B2), UINT32_C(0x00621CB4), UINT32_C(0x004C9A82)}, {UINT32_C(0x0035D65D), UINT32_C(0x0071BB2D), UINT32_C(0x0027A173), UINT32_C(0x00B478E4), UINT32_C(0x003F0595), UINT32_C(0x002A36C0), UINT32_C(0x003F12EC), UINT32_C(0x00B45D13), UINT32_C(0x007F8B60), UINT32_C(0x0036D006), UINT32_C(0x005F7EAE)}}, {{UINT32_C(0x0057123B), UINT32_C(0x00100AF5), UINT32_C(0x006392AD), UINT32_C(0x00B520A8), UINT32_C(0x002B4722), UINT32_C(0x0000BE83), UINT32_C(0x00671127), UINT32_C(0x000DE2DD), UINT32_C(0x00464F89), UINT32_C(0x004EDE64), UINT32_C(0x00281953)}, {UINT32_C(0x0006E6D3), UINT32_C(0x002AA368), UINT32_C(0x004082CA), UINT32_C(0x00403695), UINT32_C(0x006E19D7), UINT32_C(0x003560D6), UINT32_C(0x000FD064), UINT32_C(0x00E717EF), UINT32_C(0x000A17BF), UINT32_C(0x000FF54A), UINT32_C(0x0018D167)}}, {{UINT32_C(0x00AF932F), UINT32_C(0x0026788D), UINT32_C(0x001C3D62), UINT32_C(0x00921966), UINT32_C(0x00210E68), UINT32_C(0x004E43E2), UINT32_C(0x00624FD4), UINT32_C(0x007DD4CB), UINT32_C(0x001A32DC), UINT32_C(0x003F5F83), UINT32_C(0x00139108)}, {UINT32_C(0x00BE0A12), UINT32_C(0x00560B9E), UINT32_C(0x002C4C1A), UINT32_C(0x007D3F45), UINT32_C(0x00713917), UINT32_C(0x0056EE5F), UINT32_C(0x00506607), UINT32_C(0x006C8156), UINT32_C(0x002C0601), UINT32_C(0x0045B886), UINT32_C(0x006D6ABD)}}, {{UINT32_C(0x00BE997B), UINT32_C(0x0040C819), UINT32_C(0x0047F984), UINT32_C(0x00C09966), UINT32_C(0x0001FFE5), UINT32_C(0x004210A5), UINT32_C(0x0075DC7F), UINT32_C(0x00E1BFAE), UINT32_C(0x0041DF17), UINT32_C(0x000DFA6A), UINT32_C(0x0055903D)}, {UINT32_C(0x00CF7C69), UINT32_C(0x007788BB), UINT32_C(0x006A117E), UINT32_C(0x003E1AC5), UINT32_C(0x004BBCC5), UINT32_C(0x006902AA), UINT32_C(0x0076BACD), UINT32_C(0x00EC4DA9), UINT32_C(0x003047AA), UINT32_C(0x007F78BD), UINT32_C(0x00040CD6)}}, {{UINT32_C(0x00B34AFC), UINT32_C(0x004F2803), UINT32_C(0x00307B77), UINT32_C(0x00F3B150), UINT32_C(0x0071A656), UINT32_C(0x006D60F0), UINT32_C(0x00320731), UINT32_C(0x00606ECD), UINT32_C(0x0066A1E7), UINT32_C(0x006D5EFC), UINT32_C(0x006DCA0E)}, {UINT32_C(0x004B7A84), UINT32_C(0x002D8FCA), UINT32_C(0x0068EACD), UINT32_C(0x00B3D326), UINT32_C(0x0021F003), UINT32_C(0x001274F2), UINT32_C(0x00411750), UINT32_C(0x00D7D4E4), UINT32_C(0x00261A79), UINT32_C(0x006D0235), UINT32_C(0x005BB44F)}}, {{UINT32_C(0x008CE9AA), UINT32_C(0x0056FFF3), UINT32_C(0x007F6688), UINT32_C(0x00A20E30), UINT32_C(0x001357D8), UINT32_C(0x003F97D1), UINT32_C(0x006C63EF), UINT32_C(0x005D64BB), UINT32_C(0x006175F3), UINT32_C(0x0028FE8A), UINT32_C(0x00026291)}, {UINT32_C(0x00A2F107), UINT32_C(0x006D1807), UINT32_C(0x004AD5AA), UINT32_C(0x0063693B), UINT32_C(0x004CEADF), UINT32_C(0x00439B15), UINT32_C(0x006BB209), UINT32_C(0x001E66A5), UINT32_C(0x00502CC1), UINT32_C(0x0030D183), UINT32_C(0x00351D45)}}, {{UINT32_C(0x00460DBA), UINT32_C(0x000D5151), UINT32_C(0x005A7EFA), UINT32_C(0x00AB4F71), UINT32_C(0x00286506), UINT32_C(0x004AC749), UINT32_C(0x0070181C), UINT32_C(0x002D47B1), UINT32_C(0x002C7634), UINT32_C(0x0068C60E), UINT32_C(0x0041E76E)}, {UINT32_C(0x00DBE186), UINT32_C(0x00486815), UINT32_C(0x00458F1B), UINT32_C(0x0013062C), UINT32_C(0x0035B25D), UINT32_C(0x0067BFA5), UINT32_C(0x0049BFFF), UINT32_C(0x000F9D3F), UINT32_C(0x0072F711), UINT32_C(0x006E8339), UINT32_C(0x002ED76D)}}, {{UINT32_C(0x00DD873D), UINT32_C(0x0068E0AE), UINT32_C(0x00116017), UINT32_C(0x0086B448), UINT32_C(0x00586D70), UINT32_C(0x002DC600), UINT32_C(0x007DC061), UINT32_C(0x00014AA5), UINT32_C(0x0005E774), UINT32_C(0x0064B836), UINT32_C(0x00212A13)}, {UINT32_C(0x00D59FF3), UINT32_C(0x001F2261), UINT32_C(0x007EB978), UINT32_C(0x009DDAF1), UINT32_C(0x00069D7F), UINT32_C(0x0074317B), UINT32_C(0x0008E97D), UINT32_C(0x00015669), UINT32_C(0x007E18E6), UINT32_C(0x0028F0F0), UINT32_C(0x0024D9DB)}}, {{UINT32_C(0x0089C78A), UINT32_C(0x0047CAE9), UINT32_C(0x00647445), UINT32_C(0x00E0FFD5), UINT32_C(0x0050854E), UINT32_C(0x00398C0B), UINT32_C(0x00484454), UINT32_C(0x00D147CC), UINT32_C(0x0009414C), UINT32_C(0x0049B209), UINT32_C(0x004216EE)}, {UINT32_C(0x002C47B9), UINT32_C(0x00023A77), UINT32_C(0x007769B8), UINT32_C(0x00F0B4A1), UINT32_C(0x000443DC), UINT32_C(0x007C6A84), UINT32_C(0x007F36D0), UINT32_C(0x000D9584), UINT32_C(0x0009D192), UINT32_C(0x005324D9), UINT32_C(0x0008CDE7)}}, {{UINT32_C(0x00EBCF74), UINT32_C(0x00450C29), UINT32_C(0x006EF4CE), UINT32_C(0x00E76FBA), UINT32_C(0x00781F10), UINT32_C(0x000435C4), UINT32_C(0x0043DA1E), UINT32_C(0x006BFF5B), UINT32_C(0x0026CDB4), UINT32_C(0x00047CA9), UINT32_C(0x0034672B)}, {UINT32_C(0x00FE244B), UINT32_C(0x003776F7), UINT32_C(0x00200F9D), UINT32_C(0x0055D105), UINT32_C(0x00398428), UINT32_C(0x00159C77), UINT32_C(0x004B172A), UINT32_C(0x0003C3DC), UINT32_C(0x000C6478), UINT32_C(0x00360E42), UINT32_C(0x004CCFCC)}}, {{UINT32_C(0x00A6089E), UINT32_C(0x0052C74F), UINT32_C(0x003028CE), UINT32_C(0x00DA6BE7), UINT32_C(0x00159B0D), UINT32_C(0x00025F04), UINT32_C(0x007F3B51), UINT32_C(0x00EBC9A6), UINT32_C(0x00410F2F), UINT32_C(0x001E2C8F), UINT32_C(0x0044CD45)}, {UINT32_C(0x00FE529A), UINT32_C(0x005742FE), UINT32_C(0x006446CB), UINT32_C(0x0004A884), UINT32_C(0x0055474A), UINT32_C(0x003FE0AE), UINT32_C(0x006671D0), UINT32_C(0x00497D2B), UINT32_C(0x0055C10A), UINT32_C(0x0048F2CC), UINT32_C(0x006C3D3D)}}, {{UINT32_C(0x00B5061A), UINT32_C(0x0075965B), UINT32_C(0x004759AF), UINT32_C(0x0074ED86), UINT32_C(0x0068EECF), UINT32_C(0x006A53AB), UINT32_C(0x000B476C), UINT32_C(0x00AA39AE), UINT32_C(0x00242F10), UINT32_C(0x0016E0FD), UINT32_C(0x00310C8E)}, {UINT32_C(0x00FAB3FE), UINT32_C(0x00412CA0), UINT32_C(0x00334AB3), UINT32_C(0x0040E7A6), UINT32_C(0x006F4791), UINT32_C(0x0024B661), UINT32_C(0x000713F0), UINT32_C(0x0035B195), UINT32_C(0x00551A61), UINT32_C(0x004BC5DD), UINT32_C(0x001112B3)}}, {{UINT32_C(0x00EEDFDA), UINT32_C(0x0043EF08), UINT32_C(0x007213CC), UINT32_C(0x0055FF1F), UINT32_C(0x000AF305), UINT32_C(0x0052FA27), UINT32_C(0x00277E8C), UINT32_C(0x00875A0B), UINT32_C(0x002C9F3E), UINT32_C(0x00058985), UINT32_C(0x0068C97C)}, {UINT32_C(0x00F30FC3), UINT32_C(0x00670E75), UINT32_C(0x006B3B6A), UINT32_C(0x00AF87DB), UINT32_C(0x005C464A), UINT32_C(0x0024A624), UINT32_C(0x007558E2), UINT32_C(0x00937730), UINT32_C(0x005F3E2C), UINT32_C(0x004CF5B9), UINT32_C(0x005EA094)}}, {{UINT32_C(0x00D3CC63), UINT32_C(0x000E5711), UINT32_C(0x001DC16D), UINT32_C(0x004A13FD), UINT32_C(0x004FE8D5), UINT32_C(0x00302514), UINT32_C(0x006F576B), UINT32_C(0x007AC1DD), UINT32_C(0x0040C7EA), UINT32_C(0x002175BC), UINT32_C(0x007E7325)}, {UINT32_C(0x002B1252), UINT32_C(0x003D7D6A), UINT32_C(0x001CF79F), UINT32_C(0x002D0A89), UINT32_C(0x00081836), UINT32_C(0x000521DA), UINT32_C(0x0071B27F), UINT32_C(0x009F8D74), UINT32_C(0x00109461), UINT32_C(0x0029855D), UINT32_C(0x0047654D)}}, }, { {{UINT32_C(0x0049F59D), UINT32_C(0x003D9378), UINT32_C(0x00531A27), UINT32_C(0x00D81B1D), UINT32_C(0x007A0818), UINT32_C(0x00283F4B), UINT32_C(0x0069AA59), UINT32_C(0x00FBCF88), UINT32_C(0x00194F29), UINT32_C(0x00683FCE), UINT32_C(0x00555BAE)}, {UINT32_C(0x006D73CE), UINT32_C(0x0050A230), UINT32_C(0x0016AC25), UINT32_C(0x007FE177), UINT32_C(0x0079A4A7), UINT32_C(0x00240036), UINT32_C(0x0078060E), UINT32_C(0x00B4028C), UINT32_C(0x00650D07), UINT32_C(0x0074C9ED), UINT32_C(0x0001BC10)}}, {{UINT32_C(0x00D581B9), UINT32_C(0x000A2BB8), UINT32_C(0x001A6502), UINT32_C(0x0048F62D), UINT32_C(0x00259F0C), UINT32_C(0x00594632), UINT32_C(0x003D1E9F), UINT32_C(0x001BBAB7), UINT32_C(0x004EF7A0), UINT32_C(0x0021EEB3), UINT32_C(0x0023620C)}, {UINT32_C(0x003A641C), UINT32_C(0x0058B33A), UINT32_C(0x004729CE), UINT32_C(0x00600724), UINT32_C(0x005E4C80), UINT32_C(0x006F5FC3), UINT32_C(0x001CB9C0), UINT32_C(0x00D4C679), UINT32_C(0x0067E0DE), UINT32_C(0x007918C5), UINT32_C(0x00446E3C)}}, {{UINT32_C(0x00FCF7B6), UINT32_C(0x002A4017), UINT32_C(0x00770419), UINT32_C(0x009EBA8C), UINT32_C(0x000C0745), UINT32_C(0x00056DAC), UINT32_C(0x006BE2AE), UINT32_C(0x00D5418B), UINT32_C(0x0059BCAE), UINT32_C(0x005EB51A), UINT32_C(0x000A7CFF)}, {UINT32_C(0x00146CD4), UINT32_C(0x005F21A7), UINT32_C(0x00732219), UINT32_C(0x00708B02), UINT32_C(0x0059FF76), UINT32_C(0x00223DE6), UINT32_C(0x0068D0EA), UINT32_C(0x0095440B), UINT32_C(0x004AC2BE), UINT32_C(0x0044CD99), UINT32_C(0x00418B1F)}}, {{UINT32_C(0x007826E7), UINT32_C(0x00302147), UINT32_C(0x004239FE), UINT32_C(0x0012F403), UINT32_C(0x0066A878), UINT32_C(0x000BB8B3), UINT32_C(0x00657754), UINT32_C(0x00956FD7), UINT32_C(0x002ABB73), UINT32_C(0x004B585E), UINT32_C(0x001D0D54)}, {UINT32_C(0x00D8482A), UINT32_C(0x00490F0D), UINT32_C(0x00587E9A), UINT32_C(0x00633FC6), UINT32_C(0x0047A327), UINT32_C(0x002FE955), UINT32_C(0x002C1A30), UINT32_C(0x00299544), UINT32_C(0x0012A81A), UINT32_C(0x001B2908), UINT32_C(0x006A4721)}}, {{UINT32_C(0x0010E70C), UINT32_C(0x001F9118), UINT32_C(0x007A2E42), UINT32_C(0x00AD234C), UINT32_C(0x0067A2B5), UINT32_C(0x0045B66B), UINT32_C(0x00775A55), UINT32_C(0x00CE1819), UINT32_C(0x0036B0B3), UINT32_C(0x0009BD41), UINT32_C(0x00357CCE)}, {UINT32_C(0x0017F79E), UINT32_C(0x0031F0EF), UINT32_C(0x00297396), UINT32_C(0x009B34C2), UINT32_C(0x003763BA), UINT32_C(0x007CD667), UINT32_C(0x0027859A), UINT32_C(0x0065B432), UINT32_C(0x004FFA96), UINT32_C(0x002D2331), UINT32_C(0x005046AE)}}, {{UINT32_C(0x006316B9), UINT32_C(0x00321283), UINT32_C(0x0013534D), UINT32_C(0x00A66C71), UINT32_C(0x0041D154), UINT32_C(0x003BF498), UINT32_C(0x0021F82F), UINT32_C(0x0029DB77), UINT32_C(0x004A36E0), UINT32_C(0x00263FF9), UINT32_C(0x00703088)}, {UINT32_C(0x00DC79C4), UINT32_C(0x0037B8E9), UINT32_C(0x004453ED), UINT32_C(0x00A2C845), UINT32_C(0x0064D04E), UINT32_C(0x003404E0), UINT32_C(0x0075E149), UINT32_C(0x008FF0EF), UINT32_C(0x003532A0), UINT32_C(0x004B7BF9), UINT32_C(0x0051B403)}}, {{UINT32_C(0x00D0B765), UINT32_C(0x006D30B8), UINT32_C(0x000EA988), UINT32_C(0x00C14682), UINT32_C(0x0054EF11), UINT32_C(0x0064F84D), UINT32_C(0x0056C161), UINT32_C(0x008DF7C5), UINT32_C(0x00504962), UINT32_C(0x00486862), UINT32_C(0x0072A82D)}, {UINT32_C(0x0077FA35), UINT32_C(0x0014BC95), UINT32_C(0x0020003C), UINT32_C(0x004F613A), UINT32_C(0x0056E698), UINT32_C(0x00605FF1), UINT32_C(0x0053BEE6), UINT32_C(0x003D3088), UINT32_C(0x00566658), UINT32_C(0x0072C01C), UINT32_C(0x00128DDA)}}, {{UINT32_C(0x00B5B469), UINT32_C(0x00265F62), UINT32_C(0x00740D01), UINT32_C(0x002737CE), UINT32_C(0x0016B851), UINT32_C(0x000B913E), UINT32_C(0x00365599), UINT32_C(0x00CED53E), UINT32_C(0x00031BE6), UINT32_C(0x0007B5B7), UINT32_C(0x002826D2)}, {UINT32_C(0x007CE72C), UINT32_C(0x0035F7AE), UINT32_C(0x00122292), UINT32_C(0x00F0BCF2), UINT32_C(0x00583D09), UINT32_C(0x000865FB), UINT32_C(0x004255E4), UINT32_C(0x00C0E15D), UINT32_C(0x0014E9D6), UINT32_C(0x0065A407), UINT32_C(0x00113864)}}, {{UINT32_C(0x00D0FA32), UINT32_C(0x00731256), UINT32_C(0x0008677B), UINT32_C(0x00058BD3), UINT32_C(0x0011CF96), UINT32_C(0x001E2EF5), UINT32_C(0x00725AB8), UINT32_C(0x005A8080), UINT32_C(0x006AEB60), UINT32_C(0x006FE8CF), UINT32_C(0x007F2F4F)}, {UINT32_C(0x00C3108A), UINT32_C(0x00760FFA), UINT32_C(0x005F4E31), UINT32_C(0x0071D122), UINT32_C(0x0017DEC0), UINT32_C(0x004BCA9E), UINT32_C(0x00140AF5), UINT32_C(0x00CB9CE3), UINT32_C(0x0014BFC1), UINT32_C(0x0064DA23), UINT32_C(0x000C63A5)}}, {{UINT32_C(0x0066EFDB), UINT32_C(0x002864DE), UINT32_C(0x007211BA), UINT32_C(0x00D9EAA4), UINT32_C(0x00593664), UINT32_C(0x0037C3A8), UINT32_C(0x006DE16A), UINT32_C(0x00D849C3), UINT32_C(0x00331ED5), UINT32_C(0x005C0AE8), UINT32_C(0x0041D7E1)}, {UINT32_C(0x008CE7E3), UINT32_C(0x004DF2A8), UINT32_C(0x0039C4B2), UINT32_C(0x001A054E), UINT32_C(0x00651CF9), UINT32_C(0x001B953C), UINT32_C(0x003FF29C), UINT32_C(0x007BF5B4), UINT32_C(0x00322902), UINT32_C(0x000942AC), UINT32_C(0x00152316)}}, {{UINT32_C(0x00DFBF1A), UINT32_C(0x005DD706), UINT32_C(0x00665070), UINT32_C(0x004EA28B), UINT32_C(0x00253E73), UINT32_C(0x005DF0EC), UINT32_C(0x00175C48), UINT32_C(0x00D7A1A4), UINT32_C(0x00793351), UINT32_C(0x00029BF8), UINT32_C(0x00434300)}, {UINT32_C(0x00CB3A82), UINT32_C(0x006DE550), UINT32_C(0x0041DC49), UINT32_C(0x0082B72D), UINT32_C(0x000DC7E4), UINT32_C(0x0061BB06), UINT32_C(0x0026A846), UINT32_C(0x00CC5702), UINT32_C(0x005E2CDD), UINT32_C(0x007063CA), UINT32_C(0x003C8621)}}, {{UINT32_C(0x00181E78), UINT32_C(0x0077B355), UINT32_C(0x00418907), UINT32_C(0x00D9A8F6), UINT32_C(0x0072DED2), UINT32_C(0x004E3E02), UINT32_C(0x004E03AD), UINT32_C(0x00F3B5A8), UINT32_C(0x0050F28E), UINT32_C(0x006CF224), UINT32_C(0x0024C9C3)}, {UINT32_C(0x00850A90), UINT32_C(0x00623DEB), UINT32_C(0x0024F9A6), UINT32_C(0x00D6DFA0), UINT32_C(0x0048D930), UINT32_C(0x0016FD61), UINT32_C(0x0020F2BD), UINT32_C(0x006DACA1), UINT32_C(0x003AE220), UINT32_C(0x00446D52), UINT32_C(0x0049678D)}}, {{UINT32_C(0x00F04B0C), UINT32_C(0x00586E6C), UINT32_C(0x0009DA9E), UINT32_C(0x00ACA51E), UINT32_C(0x00779415), UINT32_C(0x00693107), UINT32_C(0x00727567), UINT32_C(0x00D0F4C5), UINT32_C(0x002C7C2D), UINT32_C(0x006A4DC6), UINT32_C(0x007BE95F)}, {UINT32_C(0x0019999C), UINT32_C(0x007F0AEF), UINT32_C(0x007C8778), UINT32_C(0x002D0089), UINT32_C(0x004CD9C4), UINT32_C(0x0056522D), UINT32_C(0x00396E96), UINT32_C(0x007ABC11), UINT32_C(0x0033E16F), UINT32_C(0x005E515A), UINT32_C(0x005E9DD0)}}, {{UINT32_C(0x001F0474), UINT32_C(0x004D7C5A), UINT32_C(0x007B2A69), UINT32_C(0x00C61380), UINT32_C(0x007415C0), UINT32_C(0x001C95A8), UINT32_C(0x00338442), UINT32_C(0x005479B1), UINT32_C(0x0059192B), UINT32_C(0x0029E0CF), UINT32_C(0x006FA0A0)}, {UINT32_C(0x004F6E5A), UINT32_C(0x007DA4EC), UINT32_C(0x002E8E89), UINT32_C(0x00ABDC5B), UINT32_C(0x0040143A), UINT32_C(0x00766FBA), UINT32_C(0x007A98D8), UINT32_C(0x0063DA1D), UINT32_C(0x006373BE), UINT32_C(0x002952A0), UINT32_C(0x0068B7FE)}}, {{UINT32_C(0x003C913F), UINT32_C(0x0002C389), UINT32_C(0x001BB9C3), UINT32_C(0x0040D559), UINT32_C(0x00543B6F), UINT32_C(0x005E27BB), UINT32_C(0x0051477D), UINT32_C(0x0018DE74), UINT32_C(0x00617EB9), UINT32_C(0x00410DFE), UINT32_C(0x001E172F)}, {UINT32_C(0x0083EE97), UINT32_C(0x0079C4B1), UINT32_C(0x0070D016), UINT32_C(0x009399BA), UINT32_C(0x0032C96A), UINT32_C(0x00667A8E), UINT32_C(0x003D5F84), UINT32_C(0x00608421), UINT32_C(0x006E6662), UINT32_C(0x0008B758), UINT32_C(0x001D9639)}}, {{UINT32_C(0x00A6524D), UINT32_C(0x0074CFF4), UINT32_C(0x0026D563), UINT32_C(0x00A1F297), UINT32_C(0x003FA9DE), UINT32_C(0x0073EA40), UINT32_C(0x000E3CE4), UINT32_C(0x00492223), UINT32_C(0x00638A0B), UINT32_C(0x0047888B), UINT32_C(0x0050A52B)}, {UINT32_C(0x0021A754), UINT32_C(0x0006812D), UINT32_C(0x0059DFAC), UINT32_C(0x00B33A1F), UINT32_C(0x007B6001), UINT32_C(0x0045BA94), UINT32_C(0x00187867), UINT32_C(0x00D3B5C2), UINT32_C(0x007F2118), UINT32_C(0x00091632), UINT32_C(0x001CE749)}}, }, { {{UINT32_C(0x00C5B684), UINT32_C(0x003B82D3), UINT32_C(0x007BB04F), UINT32_C(0x006CD54F), UINT32_C(0x0017CB99), UINT32_C(0x005C4905), UINT32_C(0x00013115), UINT32_C(0x00011FE8), UINT32_C(0x00274533), UINT32_C(0x00283F47), UINT32_C(0x002C4F1C)}, {UINT32_C(0x00251A27), UINT32_C(0x007B5C49), UINT32_C(0x003D9D4C), UINT32_C(0x00E97FBF), UINT32_C(0x001F3DD9), UINT32_C(0x0049FA49), UINT32_C(0x006C76A8), UINT32_C(0x009EFFDD), UINT32_C(0x0070FD77), UINT32_C(0x00197D68), UINT32_C(0x0043D69E)}}, {{UINT32_C(0x00F54825), UINT32_C(0x004E704B), UINT32_C(0x005B81C6), UINT32_C(0x00F6C679), UINT32_C(0x004A0326), UINT32_C(0x000993ED), UINT32_C(0x00223F94), UINT32_C(0x005CACE3), UINT32_C(0x0079C440), UINT32_C(0x001BF3AB), UINT32_C(0x004F0A3D)}, {UINT32_C(0x0094C40C), UINT32_C(0x004AC81F), UINT32_C(0x007FF007), UINT32_C(0x00E4DA23), UINT32_C(0x0012C360), UINT32_C(0x00679697), UINT32_C(0x00091A3D), UINT32_C(0x006BB95A), UINT32_C(0x005FF46C), UINT32_C(0x003D9D5F), UINT32_C(0x006C42A5)}}, {{UINT32_C(0x008C8CCF), UINT32_C(0x007FC2E6), UINT32_C(0x0063D1F2), UINT32_C(0x0073B8A7), UINT32_C(0x004CFD1D), UINT32_C(0x000A0D59), UINT32_C(0x0067D4C7), UINT32_C(0x00F46F06), UINT32_C(0x00044A4E), UINT32_C(0x007884E7), UINT32_C(0x0011BD78)}, {UINT32_C(0x00E46006), UINT32_C(0x00593D9C), UINT32_C(0x00600552), UINT32_C(0x009BE40C), UINT32_C(0x006F055F), UINT32_C(0x0050000F), UINT32_C(0x007CAEF7), UINT32_C(0x00487980), UINT32_C(0x0018C50F), UINT32_C(0x002C8819), UINT32_C(0x001C9DF4)}}, {{UINT32_C(0x00142486), UINT32_C(0x0011204B), UINT32_C(0x00546138), UINT32_C(0x00A0F3FD), UINT32_C(0x007C7277), UINT32_C(0x0062F53E), UINT32_C(0x00405474), UINT32_C(0x00E13911), UINT32_C(0x0073FFC0), UINT32_C(0x003F1CE2), UINT32_C(0x004E8EC0)}, {UINT32_C(0x00CEA3A2), UINT32_C(0x006ACFEA), UINT32_C(0x00644863), UINT32_C(0x006C5ADA), UINT32_C(0x0059B648), UINT32_C(0x005EE6F5), UINT32_C(0x006B9451), UINT32_C(0x00C22C63), UINT32_C(0x00250D0A), UINT32_C(0x0040C2E2), UINT32_C(0x00633B20)}}, {{UINT32_C(0x000DF8D9), UINT32_C(0x006FDE02), UINT32_C(0x007BC761), UINT32_C(0x00DD1647), UINT32_C(0x003946F5), UINT32_C(0x004F8B89), UINT32_C(0x0021BD28), UINT32_C(0x00D13F8D), UINT32_C(0x0026F183), UINT32_C(0x003CAFFB), UINT32_C(0x00526839)}, {UINT32_C(0x002D8549), UINT32_C(0x0051C848), UINT32_C(0x0065DAAB), UINT32_C(0x00F4931B), UINT32_C(0x001DB7B7), UINT32_C(0x006B5984), UINT32_C(0x0002D8C2), UINT32_C(0x00399E59), UINT32_C(0x00348B00), UINT32_C(0x002C9BAC), UINT32_C(0x000561D0)}}, {{UINT32_C(0x002E9251), UINT32_C(0x00730381), UINT32_C(0x00158D1C), UINT32_C(0x00EAA590), UINT32_C(0x00555783), UINT32_C(0x003A7A13), UINT32_C(0x007834C8), UINT32_C(0x00ACBD10), UINT32_C(0x006C9902), UINT32_C(0x0023C1F1), UINT32_C(0x001B3699)}, {UINT32_C(0x0096FFD5), UINT32_C(0x007117AC), UINT32_C(0x00024B6B), UINT32_C(0x008D0146), UINT32_C(0x000E4DC9), UINT32_C(0x00191916), UINT32_C(0x000FC5A6), UINT32_C(0x00FE7250), UINT32_C(0x00198308), UINT32_C(0x0001FAC2), UINT32_C(0x0024DA1C)}}, {{UINT32_C(0x008A2315), UINT32_C(0x007E110A), UINT32_C(0x005E7BF4), UINT32_C(0x007BEAF8), UINT32_C(0x003605ED), UINT32_C(0x001F3AF3), UINT32_C(0x007876E7), UINT32_C(0x0046E4E3), UINT32_C(0x006EC7A7), UINT32_C(0x0074A230), UINT32_C(0x007EF25D)}, {UINT32_C(0x000F6E54), UINT32_C(0x001AD49C), UINT32_C(0x0052B335), UINT32_C(0x00FE212A), UINT32_C(0x003A9CF2), UINT32_C(0x00318045), UINT32_C(0x0058F544), UINT32_C(0x0065B525), UINT32_C(0x003D646B), UINT32_C(0x004DA78A), UINT32_C(0x00552661)}}, {{UINT32_C(0x003F6E66), UINT32_C(0x007E10BA), UINT32_C(0x00341D94), UINT32_C(0x004AB8A0), UINT32_C(0x004ED33D), UINT32_C(0x002E5C25), UINT32_C(0x00109A3B), UINT32_C(0x001454FD), UINT32_C(0x007C8D6A), UINT32_C(0x007942BA), UINT32_C(0x002B4544)}, {UINT32_C(0x00BE14E9), UINT32_C(0x00446F85), UINT32_C(0x0075AA4C), UINT32_C(0x00BEFBB7), UINT32_C(0x00354E79), UINT32_C(0x0041906F), UINT32_C(0x0040AC0F), UINT32_C(0x00C8D73F), UINT32_C(0x001F31BC), UINT32_C(0x00662285), UINT32_C(0x0027E73B)}}, {{UINT32_C(0x005B910E), UINT32_C(0x00037DF0), UINT32_C(0x006463A9), UINT32_C(0x00E6B081), UINT32_C(0x002D0A9D), UINT32_C(0x002ED8BE), UINT32_C(0x0060E9CA), UINT32_C(0x00DC8968), UINT32_C(0x0017563E), UINT32_C(0x00350D14), UINT32_C(0x006DB2D5)}, {UINT32_C(0x008E171C), UINT32_C(0x000EB1AA), UINT32_C(0x000E3AEA), UINT32_C(0x00DCD35E), UINT32_C(0x0024D5B2), UINT32_C(0x0078E926), UINT32_C(0x006E5A44), UINT32_C(0x009E3934), UINT32_C(0x0043D3D7), UINT32_C(0x000F2ECE), UINT32_C(0x00506FB6)}}, {{UINT32_C(0x00B8E76E), UINT32_C(0x003E9FBC), UINT32_C(0x006624FA), UINT32_C(0x000338E5), UINT32_C(0x0022CDAF), UINT32_C(0x001658AA), UINT32_C(0x004EDFF5), UINT32_C(0x005C5CC6), UINT32_C(0x0074872E), UINT32_C(0x0006FF1F), UINT32_C(0x003D71F4)}, {UINT32_C(0x00E59640), UINT32_C(0x006B6980), UINT32_C(0x0052C2CC), UINT32_C(0x00CB86FD), UINT32_C(0x00212D1D), UINT32_C(0x004C97C7), UINT32_C(0x00605C17), UINT32_C(0x00AAE9D8), UINT32_C(0x005073CD), UINT32_C(0x00361947), UINT32_C(0x000E77D9)}}, {{UINT32_C(0x0016387D), UINT32_C(0x0049B942), UINT32_C(0x001B3FA6), UINT32_C(0x00EA0088), UINT32_C(0x00418D2D), UINT32_C(0x003D0233), UINT32_C(0x0011F489), UINT32_C(0x001FACB0), UINT32_C(0x00029CF4), UINT32_C(0x00039194), UINT32_C(0x00483410)}, {UINT32_C(0x00F9A7EC), UINT32_C(0x001832C2), UINT32_C(0x00459839), UINT32_C(0x004D00CF), UINT32_C(0x003F4B21), UINT32_C(0x005FC44A), UINT32_C(0x000CA90A), UINT32_C(0x0024985D), UINT32_C(0x000D9596), UINT32_C(0x004A9A33), UINT32_C(0x007D3439)}}, {{UINT32_C(0x0044CABA), UINT32_C(0x00589FC6), UINT32_C(0x00575DF8), UINT32_C(0x008AC944), UINT32_C(0x0047E0CD), UINT32_C(0x000567F3), UINT32_C(0x006783A3), UINT32_C(0x0081A081), UINT32_C(0x00720557), UINT32_C(0x002CC917), UINT32_C(0x006BAFD4)}, {UINT32_C(0x0002EF38), UINT32_C(0x00089C79), UINT32_C(0x0039C854), UINT32_C(0x00A4BCBE), UINT32_C(0x000969F1), UINT32_C(0x00452E91), UINT32_C(0x00645379), UINT32_C(0x00546133), UINT32_C(0x001F829A), UINT32_C(0x006A9523), UINT32_C(0x006A5CF6)}}, {{UINT32_C(0x0041529B), UINT32_C(0x005CB920), UINT32_C(0x005E7A02), UINT32_C(0x00C8A1A2), UINT32_C(0x001F9327), UINT32_C(0x004174C9), UINT32_C(0x007E2F98), UINT32_C(0x00452989), UINT32_C(0x004CD5A3), UINT32_C(0x007FB826), UINT32_C(0x0073BCEB)}, {UINT32_C(0x002F5CBC), UINT32_C(0x007CBCD0), UINT32_C(0x00130359), UINT32_C(0x00B09201), UINT32_C(0x0018EFD9), UINT32_C(0x00202C9E), UINT32_C(0x006A4C0F), UINT32_C(0x00DF08A6), UINT32_C(0x000F65C7), UINT32_C(0x006E8BA1), UINT32_C(0x0057C201)}}, {{UINT32_C(0x00F2D278), UINT32_C(0x007BCA3E), UINT32_C(0x000073A8), UINT32_C(0x00AB869F), UINT32_C(0x0014FC27), UINT32_C(0x00682826), UINT32_C(0x007B8F76), UINT32_C(0x00E02FC4), UINT32_C(0x004DDAD8), UINT32_C(0x0051D300), UINT32_C(0x005D3332)}, {UINT32_C(0x00A06CF9), UINT32_C(0x00490FEC), UINT32_C(0x00272AAC), UINT32_C(0x009F4648), UINT32_C(0x0071C8FB), UINT32_C(0x00566093), UINT32_C(0x0078852D), UINT32_C(0x00E7DB13), UINT32_C(0x004E79FE), UINT32_C(0x0012F1F6), UINT32_C(0x0056F872)}}, {{UINT32_C(0x00B0F1BD), UINT32_C(0x001B52B2), UINT32_C(0x007EDAE0), UINT32_C(0x00B65682), UINT32_C(0x00433C6A), UINT32_C(0x0005BDE7), UINT32_C(0x001EE949), UINT32_C(0x00515F90), UINT32_C(0x0020A67A), UINT32_C(0x004EBC14), UINT32_C(0x00236F70)}, {UINT32_C(0x00FA1D8C), UINT32_C(0x006D40AB), UINT32_C(0x0030DC7D), UINT32_C(0x0056A7E9), UINT32_C(0x0019E584), UINT32_C(0x00092219), UINT32_C(0x005A6D72), UINT32_C(0x00EE7EAE), UINT32_C(0x0079A1E5), UINT32_C(0x006D6145), UINT32_C(0x00055F0C)}}, {{UINT32_C(0x00C54CAB), UINT32_C(0x0014B3C9), UINT32_C(0x005B9541), UINT32_C(0x00FA0F3C), UINT32_C(0x004CFCD2), UINT32_C(0x00596010), UINT32_C(0x0055BCC4), UINT32_C(0x001502AE), UINT32_C(0x0070CB46), UINT32_C(0x003B6582), UINT32_C(0x00729AD7)}, {UINT32_C(0x00AE8A66), UINT32_C(0x00022B51), UINT32_C(0x00608650), UINT32_C(0x00CC908A), UINT32_C(0x0076C532), UINT32_C(0x0041E1EA), UINT32_C(0x007F34BC), UINT32_C(0x000289C8), UINT32_C(0x00717892), UINT32_C(0x00465F29), UINT32_C(0x003C38C2)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 6 * ASSERT: a = -3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(t0, X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(t1, Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_square(t2, Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t3, X, Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, t3, t3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t4, Y, Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, X, Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, b, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(X3, X3, t3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, t2, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t2, t2, t3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, b, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Z3, Z3, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Z3, Z3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, t3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, t0, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t0, t3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t0, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t0, t4, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, t0, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, Z3); } /*- * out1 = (arg1 == 0) ? 0 : nz * NB: this is not a "mod p equiv" 0, but literal 0 * NB: this is not a real Fiat function, just named that way for consistency. */ static void fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_nonzero( limb_t *out1, const fe_t arg1) { limb_t x1 = 0; int i; for (i = 0; i < LIMB_CNT; i++) x1 |= arg1[i]; *out1 = x1; } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed.op3 * https://eprint.iacr.org/2015/1060 Alg 5 * ASSERT: a = -3 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t4, Y2, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, t4, Y1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, X2, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, Y3, X1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, b, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, Z1, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t2, t1, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, t1); /* if P is inf, throw all that away and take Q */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(R->X, nz, Q->X, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 4 * ASSERT: a = -3 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t2, Z1, Z2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t3, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t4, Y1, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t5, Y2, Z2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t5, t1, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, X1, Z1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, X2, Z2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(X3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, t0, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, b, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, t2, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t2, t1, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_add(Z3, Z3, t1); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[32], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 32) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[52], const unsigned char in[32]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 51; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[257], const unsigned char in[32]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 257; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[32], const unsigned char b[32], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[257] = {0}; int8_t bnaf[257] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 256; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[51] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 50; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[32]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 2; i >= 0; i--) { for (j = 0; i != 2 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 19; j++) { if (j * 3 + i > 51) continue; d = rnaf[j * 3 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz( lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[32], unsigned char outy[32], const unsigned char a[32], const unsigned char b[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes(P.Y, iny); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_from_bytes(P.Y, iny); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_A_ParamSet_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[32] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_GostR3410_2001_CryptoPro_A_ParamSet( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(n, b_n, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_GostR3410_2001_CryptoPro_A_ParamSet(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_GostR3410_2001_CryptoPro_A_ParamSet(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 32) != 32) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #endif /* __SIZEOF_INT128__ */ libengine-gost-openssl-3.0.2/ecp_id_GostR3410_2001_CryptoPro_B_ParamSet.c000066400000000000000000023707421446070765000256700ustar00rootroot00000000000000/* Autogenerated: ECCKiila https://gitlab.com/nisec/ecckiila */ /*- * MIT License * * Copyright (c) 2020 Luis Rivera-Zamarripa, JesÃēs-Javier Chi-Domínguez, Billy Bob Brumley * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ #if defined(__SIZEOF_INT128__) && !defined(PEDANTIC) #include #include #define LIMB_BITS 64 #define LIMB_CNT 4 /* Field elements */ typedef uint64_t fe_t[LIMB_CNT]; typedef uint64_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_GOSTR3410_2001_CRYPTOPRO_B_PARAMSET_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: word_by_word_montgomery --static --use-value-barrier id_GostR3410_2001_CryptoPro_B_ParamSet 64 '2^255 + 3225' */ /* curve description: id_GostR3410_2001_CryptoPro_B_ParamSet */ /* machine_wordsize = 64 (from "64") */ /* requested operations: (all) */ /* m = 0x8000000000000000000000000000000000000000000000000000000000000c99 (from "2^255 + 3225") */ /* */ /* NOTE: In addition to the bounds specified above each function, all */ /* functions synthesized for this Montgomery arithmetic require the */ /* input to be strictly less than the prime modulus (m), and also */ /* require the input to be in the unique saturated representation. */ /* All functions also ensure that these two properties are true of */ /* return values. */ /* */ /* Computed values: */ /* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ #include typedef unsigned char fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1; typedef signed char fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int1; typedef signed __int128 fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int128; typedef unsigned __int128 fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint128; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_GOSTR3410_2001_CRYPTOPRO_B_PARAMSET_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint64_t fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_value_barrier_u64(uint64_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_value_barrier_u64(x) (x) #endif /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^64 * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint128 x1; uint64_t x2; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x3; x1 = ((arg1 + (fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint128)arg2) + arg3); x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); x3 = (fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1)(x1 >> 64); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^64 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int128 x1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int1 x2; uint64_t x3; x1 = ((arg2 - (fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int128)arg1) - arg3); x2 = (fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int1)(x1 >> 64); x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); *out1 = x3; *out2 = (fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1)(0x0 - x2); } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64 is a multiplication, returning the full double-width result. * Postconditions: * out1 = (arg1 * arg2) mod 2^64 * out2 = ⌊arg1 * arg2 / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0xffffffffffffffff] * arg2: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( uint64_t *out1, uint64_t *out2, uint64_t arg1, uint64_t arg2) { fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint128 x1; uint64_t x2; uint64_t x3; x1 = ((fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint128)arg1 * arg2); x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); x3 = (uint64_t)(x1 >> 64); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x1; uint64_t x2; uint64_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); x3 = ((fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_value_barrier_u64(x2) & arg3) | (fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_value_barrier_u64((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul multiplies two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul( uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x14; uint64_t x15; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x16; uint64_t x17; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x27; uint64_t x28; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x29; uint64_t x30; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x31; uint64_t x32; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x33; uint64_t x34; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x45; uint64_t x46; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x47; uint64_t x48; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x49; uint64_t x50; uint64_t x51; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x52; uint64_t x53; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x54; uint64_t x55; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x56; uint64_t x57; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x58; uint64_t x59; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x68; uint64_t x69; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x70; uint64_t x71; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x72; uint64_t x73; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x74; uint64_t x75; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x87; uint64_t x88; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x89; uint64_t x90; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x91; uint64_t x92; uint64_t x93; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x94; uint64_t x95; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x96; uint64_t x97; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x98; uint64_t x99; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x100; uint64_t x101; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x110; uint64_t x111; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x112; uint64_t x113; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x114; uint64_t x115; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x116; uint64_t x117; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x129; uint64_t x130; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x131; uint64_t x132; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x133; uint64_t x134; uint64_t x135; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x136; uint64_t x137; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x138; uint64_t x139; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x140; uint64_t x141; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x142; uint64_t x143; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; uint64_t x150; uint64_t x151; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x152; uint64_t x153; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x154; uint64_t x155; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x156; uint64_t x157; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x158; uint64_t x159; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x160; uint64_t x161; uint64_t x162; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x163; uint64_t x164; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x165; uint64_t x166; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x167; uint64_t x168; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x169; uint64_t x170; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x171; uint64_t x172; uint64_t x173; uint64_t x174; uint64_t x175; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x5, &x6, x4, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x7, &x8, x4, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x9, &x10, x4, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x11, &x12, x4, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x13, &x14, 0x0, x12, x9); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x15, &x16, x14, x10, x7); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x17, &x18, x16, x8, x5); x19 = (x18 + x6); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x20, &x21, x11, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x22, &x23, x20, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x24, &x25, x20, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x26, &x27, 0x0, x11, x24); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x28, &x29, x27, x13, x25); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x30, &x31, x29, x15, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x32, &x33, x31, x17, x22); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x34, &x35, x33, x19, x23); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x36, &x37, x1, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x38, &x39, x1, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x40, &x41, x1, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x42, &x43, x1, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x44, &x45, 0x0, x43, x40); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x46, &x47, x45, x41, x38); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x48, &x49, x47, x39, x36); x50 = (x49 + x37); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x51, &x52, 0x0, x28, x42); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x53, &x54, x52, x30, x44); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x55, &x56, x54, x32, x46); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x57, &x58, x56, x34, x48); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x59, &x60, x58, x35, x50); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x61, &x62, x51, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x63, &x64, x61, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x65, &x66, x61, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x67, &x68, 0x0, x51, x65); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x69, &x70, x68, x53, x66); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x71, &x72, x70, x55, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x73, &x74, x72, x57, x63); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x75, &x76, x74, x59, x64); x77 = ((uint64_t)x76 + x60); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x78, &x79, x2, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x80, &x81, x2, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x82, &x83, x2, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x84, &x85, x2, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x86, &x87, 0x0, x85, x82); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x88, &x89, x87, x83, x80); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x90, &x91, x89, x81, x78); x92 = (x91 + x79); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x93, &x94, 0x0, x69, x84); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x95, &x96, x94, x71, x86); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x97, &x98, x96, x73, x88); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x99, &x100, x98, x75, x90); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x101, &x102, x100, x77, x92); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x103, &x104, x93, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x105, &x106, x103, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x107, &x108, x103, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x109, &x110, 0x0, x93, x107); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x111, &x112, x110, x95, x108); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x113, &x114, x112, x97, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x115, &x116, x114, x99, x105); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x117, &x118, x116, x101, x106); x119 = ((uint64_t)x118 + x102); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x120, &x121, x3, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x122, &x123, x3, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x124, &x125, x3, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x126, &x127, x3, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x128, &x129, 0x0, x127, x124); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x130, &x131, x129, x125, x122); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x132, &x133, x131, x123, x120); x134 = (x133 + x121); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x135, &x136, 0x0, x111, x126); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x137, &x138, x136, x113, x128); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x139, &x140, x138, x115, x130); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x141, &x142, x140, x117, x132); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x143, &x144, x142, x119, x134); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x145, &x146, x135, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x147, &x148, x145, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x149, &x150, x145, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x151, &x152, 0x0, x135, x149); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x153, &x154, x152, x137, x150); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x155, &x156, x154, x139, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x157, &x158, x156, x141, x147); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x159, &x160, x158, x143, x148); x161 = ((uint64_t)x160 + x144); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x162, &x163, 0x0, x153, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x164, &x165, x163, x155, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x166, &x167, x165, x157, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x168, &x169, x167, x159, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x170, &x171, x169, x161, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x172, x171, x162, x153); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x173, x171, x164, x155); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x174, x171, x166, x157); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x175, x171, x168, x159); out1[0] = x172; out1[1] = x173; out1[2] = x174; out1[3] = x175; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square squares a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square( uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x14; uint64_t x15; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x16; uint64_t x17; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x27; uint64_t x28; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x29; uint64_t x30; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x31; uint64_t x32; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x33; uint64_t x34; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x45; uint64_t x46; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x47; uint64_t x48; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x49; uint64_t x50; uint64_t x51; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x52; uint64_t x53; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x54; uint64_t x55; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x56; uint64_t x57; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x58; uint64_t x59; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x68; uint64_t x69; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x70; uint64_t x71; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x72; uint64_t x73; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x74; uint64_t x75; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x87; uint64_t x88; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x89; uint64_t x90; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x91; uint64_t x92; uint64_t x93; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x94; uint64_t x95; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x96; uint64_t x97; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x98; uint64_t x99; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x100; uint64_t x101; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x110; uint64_t x111; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x112; uint64_t x113; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x114; uint64_t x115; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x116; uint64_t x117; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x129; uint64_t x130; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x131; uint64_t x132; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x133; uint64_t x134; uint64_t x135; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x136; uint64_t x137; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x138; uint64_t x139; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x140; uint64_t x141; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x142; uint64_t x143; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; uint64_t x150; uint64_t x151; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x152; uint64_t x153; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x154; uint64_t x155; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x156; uint64_t x157; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x158; uint64_t x159; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x160; uint64_t x161; uint64_t x162; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x163; uint64_t x164; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x165; uint64_t x166; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x167; uint64_t x168; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x169; uint64_t x170; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x171; uint64_t x172; uint64_t x173; uint64_t x174; uint64_t x175; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x5, &x6, x4, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x7, &x8, x4, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x9, &x10, x4, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x11, &x12, x4, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x13, &x14, 0x0, x12, x9); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x15, &x16, x14, x10, x7); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x17, &x18, x16, x8, x5); x19 = (x18 + x6); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x20, &x21, x11, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x22, &x23, x20, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x24, &x25, x20, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x26, &x27, 0x0, x11, x24); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x28, &x29, x27, x13, x25); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x30, &x31, x29, x15, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x32, &x33, x31, x17, x22); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x34, &x35, x33, x19, x23); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x36, &x37, x1, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x38, &x39, x1, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x40, &x41, x1, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x42, &x43, x1, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x44, &x45, 0x0, x43, x40); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x46, &x47, x45, x41, x38); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x48, &x49, x47, x39, x36); x50 = (x49 + x37); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x51, &x52, 0x0, x28, x42); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x53, &x54, x52, x30, x44); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x55, &x56, x54, x32, x46); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x57, &x58, x56, x34, x48); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x59, &x60, x58, x35, x50); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x61, &x62, x51, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x63, &x64, x61, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x65, &x66, x61, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x67, &x68, 0x0, x51, x65); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x69, &x70, x68, x53, x66); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x71, &x72, x70, x55, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x73, &x74, x72, x57, x63); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x75, &x76, x74, x59, x64); x77 = ((uint64_t)x76 + x60); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x78, &x79, x2, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x80, &x81, x2, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x82, &x83, x2, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x84, &x85, x2, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x86, &x87, 0x0, x85, x82); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x88, &x89, x87, x83, x80); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x90, &x91, x89, x81, x78); x92 = (x91 + x79); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x93, &x94, 0x0, x69, x84); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x95, &x96, x94, x71, x86); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x97, &x98, x96, x73, x88); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x99, &x100, x98, x75, x90); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x101, &x102, x100, x77, x92); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x103, &x104, x93, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x105, &x106, x103, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x107, &x108, x103, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x109, &x110, 0x0, x93, x107); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x111, &x112, x110, x95, x108); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x113, &x114, x112, x97, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x115, &x116, x114, x99, x105); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x117, &x118, x116, x101, x106); x119 = ((uint64_t)x118 + x102); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x120, &x121, x3, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x122, &x123, x3, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x124, &x125, x3, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x126, &x127, x3, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x128, &x129, 0x0, x127, x124); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x130, &x131, x129, x125, x122); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x132, &x133, x131, x123, x120); x134 = (x133 + x121); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x135, &x136, 0x0, x111, x126); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x137, &x138, x136, x113, x128); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x139, &x140, x138, x115, x130); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x141, &x142, x140, x117, x132); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x143, &x144, x142, x119, x134); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x145, &x146, x135, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x147, &x148, x145, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x149, &x150, x145, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x151, &x152, 0x0, x135, x149); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x153, &x154, x152, x137, x150); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x155, &x156, x154, x139, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x157, &x158, x156, x141, x147); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x159, &x160, x158, x143, x148); x161 = ((uint64_t)x160 + x144); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x162, &x163, 0x0, x153, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x164, &x165, x163, x155, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x166, &x167, x165, x157, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x168, &x169, x167, x159, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x170, &x171, x169, x161, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x172, x171, x162, x153); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x173, x171, x164, x155); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x174, x171, x166, x157); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x175, x171, x168, x159); out1[0] = x172; out1[1] = x173; out1[2] = x174; out1[3] = x175; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add adds two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add( uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x2; uint64_t x3; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x4; uint64_t x5; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x6; uint64_t x7; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x8; uint64_t x9; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x10; uint64_t x11; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x12; uint64_t x13; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x14; uint64_t x15; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x16; uint64_t x17; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x9, &x10, 0x0, x1, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x11, &x12, x10, x3, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x13, &x14, x12, x5, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x15, &x16, x14, x7, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x17, &x18, x16, x8, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x19, x18, x9, x1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x20, x18, x11, x3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x21, x18, x13, x5); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x22, x18, x15, x7); out1[0] = x19; out1[1] = x20; out1[2] = x21; out1[3] = x22; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub subtracts two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub( uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x2; uint64_t x3; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x4; uint64_t x5; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x6; uint64_t x7; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x8; uint64_t x9; uint64_t x10; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x11; uint64_t x12; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x13; uint64_t x14; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x15; uint64_t x16; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x17; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64( &x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x10, &x11, 0x0, x1, (x9 & UINT16_C(0xc99))); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x12, &x13, x11, x3, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x14, &x15, x13, x5, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x16, &x17, x15, x7, (x9 & UINT64_C(0x8000000000000000))); out1[0] = x10; out1[1] = x12; out1[2] = x14; out1[3] = x16; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp negates a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp( uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x2; uint64_t x3; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x4; uint64_t x5; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x6; uint64_t x7; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x8; uint64_t x9; uint64_t x10; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x11; uint64_t x12; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x13; uint64_t x14; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x15; uint64_t x16; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x17; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64( &x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x10, &x11, 0x0, x1, (x9 & UINT16_C(0xc99))); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x12, &x13, x11, x3, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x14, &x15, x13, x5, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x16, &x17, x15, x7, (x9 & UINT64_C(0x8000000000000000))); out1[0] = x10; out1[1] = x12; out1[2] = x14; out1[3] = x16; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery translates a field element out of the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval out1 mod m = (eval arg1 * ((2^64)âģš mod m)^4) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery( uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x9; uint64_t x10; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x19; uint64_t x20; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x21; uint64_t x22; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x23; uint64_t x24; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x25; uint64_t x26; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint64_t x32; uint64_t x33; uint64_t x34; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x35; uint64_t x36; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x37; uint64_t x38; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x39; uint64_t x40; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x41; uint64_t x42; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x43; uint64_t x44; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x45; uint64_t x46; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x55; uint64_t x56; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x57; uint64_t x58; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x59; uint64_t x60; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x61; uint64_t x62; uint64_t x63; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x64; uint64_t x65; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x66; uint64_t x67; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x68; uint64_t x69; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x70; uint64_t x71; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; x1 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x2, &x3, x1, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x4, &x5, x2, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x6, &x7, x2, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x8, &x9, 0x0, x1, x6); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x10, &x11, 0x0, (x9 + x7), (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x12, &x13, x10, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x14, &x15, x12, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x16, &x17, x12, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x18, &x19, 0x0, x5, x14); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x20, &x21, 0x0, x10, x16); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x22, &x23, 0x0, (((uint64_t)x21 + x11) + x17), (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x24, &x25, x23, x4, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x26, &x27, x25, x18, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x28, &x29, x22, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x30, &x31, x28, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x32, &x33, x28, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x34, &x35, 0x0, x22, x32); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x36, &x37, x35, x24, x33); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x38, &x39, x37, x26, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x40, &x41, x39, (x27 + (x19 + x15)), x30); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x42, &x43, 0x0, x36, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x44, &x45, x43, x38, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x46, &x47, x45, x40, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x48, &x49, x42, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x50, &x51, x48, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x52, &x53, x48, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x54, &x55, 0x0, x42, x52); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x56, &x57, x55, x44, x53); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x58, &x59, x57, x46, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x60, &x61, x59, (x47 + (x41 + x31)), x50); x62 = (x61 + x51); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x63, &x64, 0x0, x56, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x65, &x66, x64, x58, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x67, &x68, x66, x60, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x69, &x70, x68, x62, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x71, &x72, x70, 0x0, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x73, x72, x63, x56); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x74, x72, x65, x58); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x75, x72, x67, x60); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x76, x72, x69, x62); out1[0] = x73; out1[1] = x74; out1[2] = x75; out1[3] = x76; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery translates a field element into the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery( uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x12; uint64_t x13; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x22; uint64_t x23; uint64_t x24; uint64_t x25; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x26; uint64_t x27; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x28; uint64_t x29; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x30; uint64_t x31; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x40; uint64_t x41; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x42; uint64_t x43; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x44; uint64_t x45; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x46; uint64_t x47; uint64_t x48; uint64_t x49; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x50; uint64_t x51; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x52; uint64_t x53; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x62; uint64_t x63; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x64; uint64_t x65; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x66; uint64_t x67; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x68; uint64_t x69; uint64_t x70; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x71; uint64_t x72; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x73; uint64_t x74; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x75; uint64_t x76; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x77; uint64_t x78; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x1, &x2, (arg1[0]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x3, &x4, x1, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x5, &x6, x3, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x7, &x8, x3, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x9, &x10, (arg1[1]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x11, &x12, 0x0, x1, x7); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x13, &x14, 0x0, ((x12 + x2) + x8), x9); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x15, &x16, x13, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x17, &x18, x15, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x19, &x20, x15, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x21, &x22, 0x0, x6, x17); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x23, &x24, (arg1[2]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x25, &x26, 0x0, x13, x19); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x27, &x28, 0x0, ((x26 + (x14 + x10)) + x20), x23); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x29, &x30, x28, x5, x24); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x31, &x32, x30, x21, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x33, &x34, x27, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x35, &x36, x33, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x37, &x38, x33, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x39, &x40, 0x0, x27, x37); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x41, &x42, x40, x29, x38); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x43, &x44, x42, x31, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x45, &x46, x44, (x32 + (x22 + x18)), x35); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x47, &x48, (arg1[3]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x49, &x50, 0x0, x41, x47); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x51, &x52, x50, x43, x48); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x53, &x54, x52, x45, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x55, &x56, x49, UINT64_C(0xbd667ab8a3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64( &x57, &x58, x55, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u64(&x59, &x60, x55, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x61, &x62, 0x0, x49, x59); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x63, &x64, x62, x51, x60); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64(&x65, &x66, x64, x53, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u64( &x67, &x68, x66, (x54 + (x46 + x36)), x57); x69 = (x68 + x58); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x70, &x71, 0x0, x63, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x72, &x73, x71, x65, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x74, &x75, x73, x67, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64( &x76, &x77, x75, x69, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u64(&x78, &x79, x77, 0x0, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x80, x79, x70, x63); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x81, x79, x72, x65); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x82, x79, x74, x67); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64(&x83, x79, x76, x69); out1[0] = x80; out1[1] = x81; out1[2] = x82; out1[3] = x83; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_nonzero( uint64_t *out1, const uint64_t arg1[4]) { uint64_t x1; x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | (arg1[3])))); *out1 = x1; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( uint64_t out1[4], fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 arg1, const uint64_t arg2[4], const uint64_t arg3[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64( &x1, arg1, (arg2[0]), (arg3[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64( &x2, arg1, (arg2[1]), (arg3[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64( &x3, arg1, (arg2[2]), (arg3[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u64( &x4, arg1, (arg2[3]), (arg3[3])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes( uint8_t out1[32], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint8_t x5; uint64_t x6; uint8_t x7; uint64_t x8; uint8_t x9; uint64_t x10; uint8_t x11; uint64_t x12; uint8_t x13; uint64_t x14; uint8_t x15; uint64_t x16; uint8_t x17; uint8_t x18; uint8_t x19; uint64_t x20; uint8_t x21; uint64_t x22; uint8_t x23; uint64_t x24; uint8_t x25; uint64_t x26; uint8_t x27; uint64_t x28; uint8_t x29; uint64_t x30; uint8_t x31; uint8_t x32; uint8_t x33; uint64_t x34; uint8_t x35; uint64_t x36; uint8_t x37; uint64_t x38; uint8_t x39; uint64_t x40; uint8_t x41; uint64_t x42; uint8_t x43; uint64_t x44; uint8_t x45; uint8_t x46; uint8_t x47; uint64_t x48; uint8_t x49; uint64_t x50; uint8_t x51; uint64_t x52; uint8_t x53; uint64_t x54; uint8_t x55; uint64_t x56; uint8_t x57; uint64_t x58; uint8_t x59; uint8_t x60; x1 = (arg1[3]); x2 = (arg1[2]); x3 = (arg1[1]); x4 = (arg1[0]); x5 = (uint8_t)(x4 & UINT8_C(0xff)); x6 = (x4 >> 8); x7 = (uint8_t)(x6 & UINT8_C(0xff)); x8 = (x6 >> 8); x9 = (uint8_t)(x8 & UINT8_C(0xff)); x10 = (x8 >> 8); x11 = (uint8_t)(x10 & UINT8_C(0xff)); x12 = (x10 >> 8); x13 = (uint8_t)(x12 & UINT8_C(0xff)); x14 = (x12 >> 8); x15 = (uint8_t)(x14 & UINT8_C(0xff)); x16 = (x14 >> 8); x17 = (uint8_t)(x16 & UINT8_C(0xff)); x18 = (uint8_t)(x16 >> 8); x19 = (uint8_t)(x3 & UINT8_C(0xff)); x20 = (x3 >> 8); x21 = (uint8_t)(x20 & UINT8_C(0xff)); x22 = (x20 >> 8); x23 = (uint8_t)(x22 & UINT8_C(0xff)); x24 = (x22 >> 8); x25 = (uint8_t)(x24 & UINT8_C(0xff)); x26 = (x24 >> 8); x27 = (uint8_t)(x26 & UINT8_C(0xff)); x28 = (x26 >> 8); x29 = (uint8_t)(x28 & UINT8_C(0xff)); x30 = (x28 >> 8); x31 = (uint8_t)(x30 & UINT8_C(0xff)); x32 = (uint8_t)(x30 >> 8); x33 = (uint8_t)(x2 & UINT8_C(0xff)); x34 = (x2 >> 8); x35 = (uint8_t)(x34 & UINT8_C(0xff)); x36 = (x34 >> 8); x37 = (uint8_t)(x36 & UINT8_C(0xff)); x38 = (x36 >> 8); x39 = (uint8_t)(x38 & UINT8_C(0xff)); x40 = (x38 >> 8); x41 = (uint8_t)(x40 & UINT8_C(0xff)); x42 = (x40 >> 8); x43 = (uint8_t)(x42 & UINT8_C(0xff)); x44 = (x42 >> 8); x45 = (uint8_t)(x44 & UINT8_C(0xff)); x46 = (uint8_t)(x44 >> 8); x47 = (uint8_t)(x1 & UINT8_C(0xff)); x48 = (x1 >> 8); x49 = (uint8_t)(x48 & UINT8_C(0xff)); x50 = (x48 >> 8); x51 = (uint8_t)(x50 & UINT8_C(0xff)); x52 = (x50 >> 8); x53 = (uint8_t)(x52 & UINT8_C(0xff)); x54 = (x52 >> 8); x55 = (uint8_t)(x54 & UINT8_C(0xff)); x56 = (x54 >> 8); x57 = (uint8_t)(x56 & UINT8_C(0xff)); x58 = (x56 >> 8); x59 = (uint8_t)(x58 & UINT8_C(0xff)); x60 = (uint8_t)(x58 >> 8); out1[0] = x5; out1[1] = x7; out1[2] = x9; out1[3] = x11; out1[4] = x13; out1[5] = x15; out1[6] = x17; out1[7] = x18; out1[8] = x19; out1[9] = x21; out1[10] = x23; out1[11] = x25; out1[12] = x27; out1[13] = x29; out1[14] = x31; out1[15] = x32; out1[16] = x33; out1[17] = x35; out1[18] = x37; out1[19] = x39; out1[20] = x41; out1[21] = x43; out1[22] = x45; out1[23] = x46; out1[24] = x47; out1[25] = x49; out1[26] = x51; out1[27] = x53; out1[28] = x55; out1[29] = x57; out1[30] = x59; out1[31] = x60; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. * Preconditions: * 0 ≤ bytes_eval arg1 < m * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes( uint64_t out1[4], const uint8_t arg1[32]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint8_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint8_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint8_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint8_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; x1 = ((uint64_t)(arg1[31]) << 56); x2 = ((uint64_t)(arg1[30]) << 48); x3 = ((uint64_t)(arg1[29]) << 40); x4 = ((uint64_t)(arg1[28]) << 32); x5 = ((uint64_t)(arg1[27]) << 24); x6 = ((uint64_t)(arg1[26]) << 16); x7 = ((uint64_t)(arg1[25]) << 8); x8 = (arg1[24]); x9 = ((uint64_t)(arg1[23]) << 56); x10 = ((uint64_t)(arg1[22]) << 48); x11 = ((uint64_t)(arg1[21]) << 40); x12 = ((uint64_t)(arg1[20]) << 32); x13 = ((uint64_t)(arg1[19]) << 24); x14 = ((uint64_t)(arg1[18]) << 16); x15 = ((uint64_t)(arg1[17]) << 8); x16 = (arg1[16]); x17 = ((uint64_t)(arg1[15]) << 56); x18 = ((uint64_t)(arg1[14]) << 48); x19 = ((uint64_t)(arg1[13]) << 40); x20 = ((uint64_t)(arg1[12]) << 32); x21 = ((uint64_t)(arg1[11]) << 24); x22 = ((uint64_t)(arg1[10]) << 16); x23 = ((uint64_t)(arg1[9]) << 8); x24 = (arg1[8]); x25 = ((uint64_t)(arg1[7]) << 56); x26 = ((uint64_t)(arg1[6]) << 48); x27 = ((uint64_t)(arg1[5]) << 40); x28 = ((uint64_t)(arg1[4]) << 32); x29 = ((uint64_t)(arg1[3]) << 24); x30 = ((uint64_t)(arg1[2]) << 16); x31 = ((uint64_t)(arg1[1]) << 8); x32 = (arg1[0]); x33 = (x31 + (uint64_t)x32); x34 = (x30 + x33); x35 = (x29 + x34); x36 = (x28 + x35); x37 = (x27 + x36); x38 = (x26 + x37); x39 = (x25 + x38); x40 = (x23 + (uint64_t)x24); x41 = (x22 + x40); x42 = (x21 + x41); x43 = (x20 + x42); x44 = (x19 + x43); x45 = (x18 + x44); x46 = (x17 + x45); x47 = (x15 + (uint64_t)x16); x48 = (x14 + x47); x49 = (x13 + x48); x50 = (x12 + x49); x51 = (x11 + x50); x52 = (x10 + x51); x53 = (x9 + x52); x54 = (x7 + (uint64_t)x8); x55 = (x6 + x54); x56 = (x5 + x55); x57 = (x4 + x56); x58 = (x3 + x57); x59 = (x2 + x58); x60 = (x1 + x59); out1[0] = x39; out1[1] = x46; out1[2] = x53; out1[3] = x60; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_GostR3410_2001_CryptoPro_B_ParamSet/fe_inv.op3 * sliding window w=5 */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t23, t25; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(acc, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t25, t1, acc); for (i = 0; i < 9; i++) fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t25, t25, acc); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t23, t25, acc); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t25, t23, acc); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(acc, t1); for (i = 0; i < 247; i++) fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(acc, acc, t25); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(output, acc, t23); } /* curve coefficient constants */ static const limb_t const_one[4] = { UINT64_C(0xFFFFFFFFFFFFF367), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0x7FFFFFFFFFFFFFFF)}; static const limb_t const_b[4] = { UINT64_C(0x8DCC455AA9C5A084), UINT64_C(0x91AB42DF6CF438A8), UINT64_C(0x8F8AA907EEAC7D11), UINT64_C(0x3CE5D221F6285375)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[27][16] = { { {{UINT64_C(0xFFFFFFFFFFFFF367), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0x7FFFFFFFFFFFFFFF)}, {UINT64_C(0xDDDC64B3570C7410), UINT64_C(0xA7B0992513172887), UINT64_C(0x0C4E5C4C4B6382DB), UINT64_C(0x2763DB0F124768DE)}}, {{UINT64_C(0xCD3E57B68457D15D), UINT64_C(0xEB688F7FBEA56E83), UINT64_C(0x235A123C6A13C5CE), UINT64_C(0x0CD7EB9D50F57A6D)}, {UINT64_C(0xC0124E91544C1965), UINT64_C(0x4D9C172962AFA35E), UINT64_C(0x0F92F2C30037C554), UINT64_C(0x1D8998680A3F2665)}}, {{UINT64_C(0x9DE4B21355F43EFF), UINT64_C(0x2E110A425C9E63F5), UINT64_C(0x9350A9C31CE5A6DF), UINT64_C(0x377CBF0BA332315E)}, {UINT64_C(0x2805DD4820F0D1B5), UINT64_C(0x3B1975660F9723E5), UINT64_C(0xA1CCA78C84B79937), UINT64_C(0x4F87BB1B94D5E03D)}}, {{UINT64_C(0xE428FBFB5652C96F), UINT64_C(0x2E9A14D2D261BDD1), UINT64_C(0x082D82967453B76A), UINT64_C(0x61EA580E7AC87B02)}, {UINT64_C(0xA0F8C2BACF368FDB), UINT64_C(0xDF093380D73B2A28), UINT64_C(0xFA0928B2EA8FE5D2), UINT64_C(0x77A674925F86D38A)}}, {{UINT64_C(0xDFFAB41027670451), UINT64_C(0xEBC3D0171200AD3A), UINT64_C(0xF68324F325F4F6C4), UINT64_C(0x4A24CD5F7D0EAFD0)}, {UINT64_C(0xF8FBD489D3F6BD1C), UINT64_C(0x0F6B56D567B473DE), UINT64_C(0x6FB063DECACF0D6B), UINT64_C(0x27F2E7E996DC574B)}}, {{UINT64_C(0xA6A1064593937228), UINT64_C(0xAB7550B4A9165BBB), UINT64_C(0xD682D4F1CB0EDBE8), UINT64_C(0x2261FCEC40E5AD8D)}, {UINT64_C(0x9F2119C6CCBD4E18), UINT64_C(0x2FD094E9AAB09697), UINT64_C(0x00331713E700929E), UINT64_C(0x6C5F2EFE54338FE1)}}, {{UINT64_C(0xD631401742FFF78A), UINT64_C(0x38F23A912087E055), UINT64_C(0xE30E809C10EF1CAC), UINT64_C(0x3BCB0A542432FF74)}, {UINT64_C(0x2B4B5B97B31509E6), UINT64_C(0x117FE9D73E54AF47), UINT64_C(0xE513C0BE52F63ACA), UINT64_C(0x41ED8ADAB1C80A6B)}}, {{UINT64_C(0x61A31837E0A79FCD), UINT64_C(0x8F742B5751D3DE38), UINT64_C(0x10635FCD41354B55), UINT64_C(0x61F30C61946510BE)}, {UINT64_C(0x9183D6776C416DAC), UINT64_C(0x391B7B42345431CB), UINT64_C(0xE3D6F0847C254A8D), UINT64_C(0x777E1F6219D320D8)}}, {{UINT64_C(0x090E633FF05BD85D), UINT64_C(0x546C41A0240392ED), UINT64_C(0x6BBCF15D9F4139CA), UINT64_C(0x73F5B6577FFDA5DA)}, {UINT64_C(0xBC04E353E0622A57), UINT64_C(0xCBD8F01E6E6414F4), UINT64_C(0x53377C0B8C3C0CC5), UINT64_C(0x6D302331E0A14548)}}, {{UINT64_C(0x235487F83D6D456E), UINT64_C(0xBD92203DB3FDCDCF), UINT64_C(0x15B13D60CFFDA977), UINT64_C(0x22DCB48731A1C4B5)}, {UINT64_C(0xA367FB4EC76ED9A2), UINT64_C(0x1E4F7956C0C86AF4), UINT64_C(0x6F087C495B012AD7), UINT64_C(0x33437E4A4949B444)}}, {{UINT64_C(0x261B44FEB7CDDB38), UINT64_C(0xDCE2FE47419216AD), UINT64_C(0xA4CE17FF9428657B), UINT64_C(0x7CE64F48F8329049)}, {UINT64_C(0x4CE742117289C114), UINT64_C(0x0E6224098C212A23), UINT64_C(0xCF75BF452096719D), UINT64_C(0x6F5535817BDC1600)}}, {{UINT64_C(0xE776AA0CB941CBC9), UINT64_C(0x16D670E0951AAED3), UINT64_C(0x79C019DF4B1EC097), UINT64_C(0x635A66BB12266D30)}, {UINT64_C(0x030D843E023AAFD2), UINT64_C(0x10FB61576466108F), UINT64_C(0x93774BEC08D568D5), UINT64_C(0x29D2796204C1EE73)}}, {{UINT64_C(0x6F0F4C2EE00BBC21), UINT64_C(0x9EB34C58A30AB92F), UINT64_C(0x2153D901AE34908B), UINT64_C(0x136A7E1F4EDC188F)}, {UINT64_C(0xF709BF5D8BC45EE4), UINT64_C(0xEA6984E44FAD9A54), UINT64_C(0xFC8E6F8AAF5140EB), UINT64_C(0x25EBF0DE87756E47)}}, {{UINT64_C(0x5C2A97265B1D4B9F), UINT64_C(0xBE235DFD68E93FC7), UINT64_C(0x7766BDB9471A4EA0), UINT64_C(0x476D17CCD9909CD9)}, {UINT64_C(0x4960E5B47B398BC4), UINT64_C(0x909D0F170F58F328), UINT64_C(0x1ABF7E02230EF508), UINT64_C(0x6DE6B3E1D29239C9)}}, {{UINT64_C(0xCCF0AA2885A6DBE3), UINT64_C(0xA5E4B325823C606C), UINT64_C(0xADE98B2A15505FC6), UINT64_C(0x4D4E770302E20C3B)}, {UINT64_C(0x241964174730DF64), UINT64_C(0x3DD47817A914A59D), UINT64_C(0x4D7A317EC4FDFD97), UINT64_C(0x3767E545BE12AA72)}}, {{UINT64_C(0xA0C2A028165C7BF4), UINT64_C(0xCD4DA6EA36A0B483), UINT64_C(0x1E1E63323AF53195), UINT64_C(0x7A025E238D77188F)}, {UINT64_C(0xB3CF03B908D2CEF2), UINT64_C(0x8FEE9BB825A0AFA6), UINT64_C(0x855340E088111895), UINT64_C(0x32E3EF014FB8F8A3)}}, }, { {{UINT64_C(0x33EBE39DEBF87807), UINT64_C(0xB048F96CDBDEFF76), UINT64_C(0xA0496C3C342A3087), UINT64_C(0x7623E19250953679)}, {UINT64_C(0x12F767114B932390), UINT64_C(0xF80851EAACECE2F7), UINT64_C(0xE447465BE5B280EA), UINT64_C(0x0412ADE811115958)}}, {{UINT64_C(0x982F1AC8B5EB0DC2), UINT64_C(0x8464E052BBBCC880), UINT64_C(0xC927B59601335D53), UINT64_C(0x4B0C6F5A4DA4D80B)}, {UINT64_C(0x101E1878E04783AF), UINT64_C(0x50458FFC41D8A690), UINT64_C(0x11499D881B77DFBF), UINT64_C(0x46DC7D221F77A937)}}, {{UINT64_C(0xE9AD22CE620E52C0), UINT64_C(0x0990D6AA4140F356), UINT64_C(0x0F6B2EF70CBBEEE5), UINT64_C(0x2C67DC80EAD414C6)}, {UINT64_C(0xE17182BC23D4CD20), UINT64_C(0xFC8FE3CBC13DDEA9), UINT64_C(0xD1E4A7B83BABC06D), UINT64_C(0x52EA05CC71C06DB7)}}, {{UINT64_C(0xF8ABB7700D022B5B), UINT64_C(0x362B8059199DC689), UINT64_C(0x5D887A4D26BBDEC8), UINT64_C(0x7835F183F7FC2A01)}, {UINT64_C(0xEEDE12F5DE99DF34), UINT64_C(0xBE952638A3082301), UINT64_C(0x829FDF804C35A162), UINT64_C(0x205A2252C2B9645E)}}, {{UINT64_C(0xDE284DA91356E14C), UINT64_C(0xE40CEFE0C37415FE), UINT64_C(0x62BE93E947F6016E), UINT64_C(0x2DD989045DBFE2F6)}, {UINT64_C(0x195B0E982EBC70F9), UINT64_C(0x7E52840DF01F4D43), UINT64_C(0x1AFB1FDF4B1F6AB4), UINT64_C(0x050AABB820B3E491)}}, {{UINT64_C(0xC59E1EDBC645DAD4), UINT64_C(0x5AF6B2DC565A286D), UINT64_C(0xC399A48A13076366), UINT64_C(0x19F4881F4AC0E5B9)}, {UINT64_C(0xC07D02A1CD5AC339), UINT64_C(0x18FBD088ED628A55), UINT64_C(0x2D33C6F4FFA4788E), UINT64_C(0x52E9AE42CCB832E7)}}, {{UINT64_C(0xA47091AE4E5E934E), UINT64_C(0x2542CE1391CED3C6), UINT64_C(0xDDE01FD58FC47857), UINT64_C(0x6BA6E5694304EAA9)}, {UINT64_C(0x2FF0278BE24091A9), UINT64_C(0xB895F0AB782BBCE0), UINT64_C(0xA80CCC97AB8B8828), UINT64_C(0x6A54B96168A7D8FE)}}, {{UINT64_C(0x15E1F5ADBAC4581A), UINT64_C(0x91620EF0D4BAA751), UINT64_C(0x4E65731FC7273C4D), UINT64_C(0x14B166CB7EEE33B5)}, {UINT64_C(0x7B0EFFA53CD06080), UINT64_C(0x4491156A8CF95FF9), UINT64_C(0xC8C64C39E2258574), UINT64_C(0x3D48DA9D13315CE9)}}, {{UINT64_C(0x97A098A399866CE5), UINT64_C(0xF4CCDB40023A1167), UINT64_C(0x4BB32981F8094782), UINT64_C(0x7342CC98C7D5FD13)}, {UINT64_C(0x3C1C5B1878B99D4E), UINT64_C(0x1277668FF4762AC9), UINT64_C(0x612431D76AE50E4F), UINT64_C(0x36C174E036F9071C)}}, {{UINT64_C(0x39194E879327BA7F), UINT64_C(0xC4D251FF7237FA1A), UINT64_C(0x55ED3CD42BA5EB8D), UINT64_C(0x0263AF07BA590188)}, {UINT64_C(0xB4853127EFA82CF3), UINT64_C(0x2CC2D2202B8E761D), UINT64_C(0x4582B81E2722B490), UINT64_C(0x1DA7680A610AA621)}}, {{UINT64_C(0x06A669EE30D297D4), UINT64_C(0xC336B048E133D393), UINT64_C(0xB733A2C493B7B41B), UINT64_C(0x427CC233C7A8E721)}, {UINT64_C(0x727C14F12867BB00), UINT64_C(0x756F4C7AA736035E), UINT64_C(0xB72A3EDE26327A22), UINT64_C(0x4AEDE2BB77F73F28)}}, {{UINT64_C(0xC8A3612FA7282ED0), UINT64_C(0xE4AD8B40B0150579), UINT64_C(0xAB1DE11D0C3FEE4B), UINT64_C(0x613AAD4833B31F23)}, {UINT64_C(0xE74AB8565C91BD21), UINT64_C(0x499177357953D695), UINT64_C(0x3831EB601A53D74F), UINT64_C(0x245977A054DEB1A6)}}, {{UINT64_C(0x15972E4DFFFC1468), UINT64_C(0xA758D9CB141DC24C), UINT64_C(0x5E76FCDFED8694C5), UINT64_C(0x5F9DAF35069B7A5E)}, {UINT64_C(0xFE50FCE4501B5415), UINT64_C(0x6442CF6758CFDE50), UINT64_C(0xA89C6DB438E5F4D0), UINT64_C(0x21F012DBF5D4FEFC)}}, {{UINT64_C(0x2A1170AD98CB9A81), UINT64_C(0x934BD9D5036C5E45), UINT64_C(0x27DF152ECA5095B1), UINT64_C(0x682698DBCCEEE508)}, {UINT64_C(0x1F4FE3A2B973FB5F), UINT64_C(0xD33CBEBE792C7D4D), UINT64_C(0x99D37961E7B33A8F), UINT64_C(0x46B8993B7B6D015D)}}, {{UINT64_C(0x93A3809B6FBAC8F7), UINT64_C(0x84861BF097C55DC4), UINT64_C(0xA6F89EEA15BB65E3), UINT64_C(0x66AE1C5DA6E531D1)}, {UINT64_C(0x643A14FCFD83DAEA), UINT64_C(0xA7A46D0DC585947B), UINT64_C(0xFA20CF074FBA1274), UINT64_C(0x5999ED7B93578A7D)}}, {{UINT64_C(0x36C8B6ED78E7C6CE), UINT64_C(0x6D400CA55E325F44), UINT64_C(0xC6AE09B320B7AA5C), UINT64_C(0x1AF261C189EABC17)}, {UINT64_C(0x64D6FFBBB9E778E4), UINT64_C(0x1C9E223E7FC64BEB), UINT64_C(0x4D68B5205D75E6C0), UINT64_C(0x5A72B1D976677A06)}}, }, { {{UINT64_C(0x62DB66406F08BB17), UINT64_C(0xC34F29DFAE75BB73), UINT64_C(0xD501293D7DBD4851), UINT64_C(0x5EAA94CAAD1F604B)}, {UINT64_C(0x39CFE9D1094408A8), UINT64_C(0xC0F6544CE8A476F2), UINT64_C(0x9F6308B6A42D7607), UINT64_C(0x17F82949D727018F)}}, {{UINT64_C(0xC44453CD9C4C4BD2), UINT64_C(0xA895E247EBD0B947), UINT64_C(0x0AEB7AFCAEBC27F4), UINT64_C(0x2472FD08F04ABFAC)}, {UINT64_C(0x319EC67D73E6E994), UINT64_C(0xD6533E4C798C5FC0), UINT64_C(0xF4C3B24D3FB9AA89), UINT64_C(0x3EC580820A3B376B)}}, {{UINT64_C(0x79732D6F144ACF7A), UINT64_C(0xFDD630C3911342DD), UINT64_C(0xC577C4B34A630649), UINT64_C(0x14956A17BBA999D6)}, {UINT64_C(0x523D3CC8A435A559), UINT64_C(0x488DC690ACDA8861), UINT64_C(0x4CF70928F051C69A), UINT64_C(0x2D98D573955394CB)}}, {{UINT64_C(0xEDB7BA2A23A4B840), UINT64_C(0x725EC496F6C2D93B), UINT64_C(0x0C94818B8833BB3F), UINT64_C(0x51281A31B142B12A)}, {UINT64_C(0x2A8A5706659EDA83), UINT64_C(0x3098F7507F9D6877), UINT64_C(0x87AD0FDF2171F69F), UINT64_C(0x6B7067C31A6F2F28)}}, {{UINT64_C(0x3B52107412B1E36F), UINT64_C(0x727A2432F81E4733), UINT64_C(0xB75A2F3553F2CBBD), UINT64_C(0x46DE933854960EB0)}, {UINT64_C(0xAC5344F8E561D908), UINT64_C(0x4BD40ECB12C67430), UINT64_C(0x1698FD62EF499F97), UINT64_C(0x29EBD7AE6AE9FBD1)}}, {{UINT64_C(0x9DEC249B1EC8110D), UINT64_C(0x2D19053AFD2F5C39), UINT64_C(0xB1189807E01522DF), UINT64_C(0x24A04C16C1424C77)}, {UINT64_C(0xA4FC7C7D24F72226), UINT64_C(0x763405FBA8322501), UINT64_C(0xC5443C9A18F015E0), UINT64_C(0x6DEDA19BC55D6CEA)}}, {{UINT64_C(0x4EF309769EAE2FF9), UINT64_C(0x2549B7F25741B21B), UINT64_C(0x859ACD103BC23F01), UINT64_C(0x05C0358FBF5FB0D7)}, {UINT64_C(0x85E53AA8FB6AB34C), UINT64_C(0x8DAAAA698FD2FD20), UINT64_C(0xBE6D4D3416096FC9), UINT64_C(0x27572C88F8B8B831)}}, {{UINT64_C(0xADB98DC547D56A25), UINT64_C(0x0CC764328B8E1DC6), UINT64_C(0x032C738EBE48C4A1), UINT64_C(0x31372DAD94FC9CF0)}, {UINT64_C(0x8E646A0C78A7DCB2), UINT64_C(0xA32F3E9C6ECD9885), UINT64_C(0x280BB4AD6A3AD963), UINT64_C(0x7DEE1BC4817D4327)}}, {{UINT64_C(0x1AE6A27BF8A7C1E1), UINT64_C(0x558C652FCBC527C7), UINT64_C(0x4084B56EA65056F6), UINT64_C(0x3FD454596D4C838B)}, {UINT64_C(0xF5C15AFD56DE792A), UINT64_C(0xF656FAA488959282), UINT64_C(0x7F0D8EF41C07D63F), UINT64_C(0x44EFFF7DCD841ACC)}}, {{UINT64_C(0xAC28F2A68D3695D8), UINT64_C(0x94959EB83F91E781), UINT64_C(0x7693FFF7FEDD6E1F), UINT64_C(0x2512E6E1A9A699EF)}, {UINT64_C(0x823400EB7955FAB7), UINT64_C(0xCF109EF994924C08), UINT64_C(0x12E087793A709F32), UINT64_C(0x187D04139CC6484C)}}, {{UINT64_C(0xD3932AFBEBDE477F), UINT64_C(0x9D5A542244538D8A), UINT64_C(0x40B0B159166A87AF), UINT64_C(0x31294B3D41D5E078)}, {UINT64_C(0x6C49C853E8C48222), UINT64_C(0x8FBE6620DCD0D611), UINT64_C(0x9DDC7EE2F611007B), UINT64_C(0x12289A60E6652172)}}, {{UINT64_C(0x8B85475BDACF80F7), UINT64_C(0xADBAB3539B5CAEF2), UINT64_C(0x7C4090A38D2A7707), UINT64_C(0x271FA4F1DAB97830)}, {UINT64_C(0x141B725253173E04), UINT64_C(0x4B483D6406D0B127), UINT64_C(0x8FD15BCF063A7AF8), UINT64_C(0x59B19EAFE580F34C)}}, {{UINT64_C(0xA7EEA8C49C0D79B6), UINT64_C(0x766FA113B9185109), UINT64_C(0xB42D74F34642CC64), UINT64_C(0x51D0127BBB817476)}, {UINT64_C(0x6DA097F58AB71448), UINT64_C(0x145872E5F95AD0C7), UINT64_C(0xB7E934F3F1759436), UINT64_C(0x4EA883F93160ED1F)}}, {{UINT64_C(0x30DC39B70CEABAE1), UINT64_C(0x49EC5EE8A606D766), UINT64_C(0x230E276297FC46AF), UINT64_C(0x079A531F5BE79B8D)}, {UINT64_C(0x48253BC2EF08C93F), UINT64_C(0x2D32AF02F124D043), UINT64_C(0x85796D0DAF34D231), UINT64_C(0x06A6205C15F8CECD)}}, {{UINT64_C(0x1FA77AFD47B00D1A), UINT64_C(0x429717B0E48CE97A), UINT64_C(0x38FEF11D57433697), UINT64_C(0x3E91BED67D426687)}, {UINT64_C(0x95919BF72AB4BFE9), UINT64_C(0x7A3F33FC97096B3A), UINT64_C(0x0E0BBAC33DD8C82E), UINT64_C(0x2CE9EFCBF8EDB675)}}, {{UINT64_C(0x2D44E99843D8B81D), UINT64_C(0x8ABFF4196D68A95C), UINT64_C(0x639000A03B2A18DD), UINT64_C(0x7CD15413871E3ED3)}, {UINT64_C(0xC059855B148F0378), UINT64_C(0x50147459616B62BF), UINT64_C(0x53B699AF4D461110), UINT64_C(0x6A0D0EC7EC29E48D)}}, }, { {{UINT64_C(0x5173322115797F35), UINT64_C(0x2F2982144BBE6644), UINT64_C(0x7BC8FEC64A5EF621), UINT64_C(0x3D2BE7857F472F05)}, {UINT64_C(0xA1C3A1C92765C427), UINT64_C(0xBACF08FE24155ACF), UINT64_C(0xA9CC1A179D229948), UINT64_C(0x1918C97F27039FD8)}}, {{UINT64_C(0x2CF393387843FF7B), UINT64_C(0x5FCBDE65258997F2), UINT64_C(0x3980BF90165A98A3), UINT64_C(0x2E80607DBF9458E5)}, {UINT64_C(0x5F646EB67019165C), UINT64_C(0xFA091FBEDDE34205), UINT64_C(0x695348B669267AE3), UINT64_C(0x385B0B6AABC22051)}}, {{UINT64_C(0x3CAE0756B537F78C), UINT64_C(0x3012A9588BE30367), UINT64_C(0x32D26C06981A22C3), UINT64_C(0x7D091FAB2950E833)}, {UINT64_C(0xD8E1B638797ACAAF), UINT64_C(0xE7021C8549F2EA10), UINT64_C(0xCA382BC117A7AF3B), UINT64_C(0x08A5A81DBB809976)}}, {{UINT64_C(0x00F499FD4287BB97), UINT64_C(0xFB6791CADAA9DAF2), UINT64_C(0x9A19E4F3057B2B98), UINT64_C(0x6968D2FFC53C0223)}, {UINT64_C(0xDC741EF5CE88509C), UINT64_C(0x38AE355D306A0570), UINT64_C(0xFECF6589C23AF46B), UINT64_C(0x6C0E6ED16AD48836)}}, {{UINT64_C(0x22B68698E363495D), UINT64_C(0x120005D039AF2BE3), UINT64_C(0xE37B19650BF4BA69), UINT64_C(0x3B416E9326E64AE7)}, {UINT64_C(0xFAED5088DEAC5C59), UINT64_C(0x67436ACCEB2518A5), UINT64_C(0x636B52F891FA788D), UINT64_C(0x10B2A57A655153D1)}}, {{UINT64_C(0xB18060A7833A984C), UINT64_C(0x7EF8374674833BAD), UINT64_C(0xCBFAF742C5B3BC88), UINT64_C(0x7981DC36A1A7F135)}, {UINT64_C(0xE70CCAFA5D076280), UINT64_C(0xEBA80EB707009D85), UINT64_C(0x7D99D24C73778DE2), UINT64_C(0x1EFEE1BBA7262D50)}}, {{UINT64_C(0xBC47F4A26A7CAB32), UINT64_C(0x53F290A7DD6E48A3), UINT64_C(0x82257A1B92F35F9E), UINT64_C(0x73D17B318BB0AAB0)}, {UINT64_C(0xBBD4522AC2DFFE96), UINT64_C(0x9C37DAA1E6EB0501), UINT64_C(0xF4D4D568453DB6BE), UINT64_C(0x2868CBF5642AD2E4)}}, {{UINT64_C(0x40A988E6ABE30C59), UINT64_C(0x5ADED92993057DEC), UINT64_C(0x18FD7E04DACD37B0), UINT64_C(0x6E3FB81E8228ACA5)}, {UINT64_C(0xFF3EEFE64104B0C9), UINT64_C(0xD7DD05E731CA120A), UINT64_C(0xAFD3CF1CD01C1CF8), UINT64_C(0x4D0CD264831BC4E9)}}, {{UINT64_C(0x2641B32182CAC14A), UINT64_C(0x34EB149570990E6C), UINT64_C(0x3E5AF58FA1C74CA6), UINT64_C(0x11B50821616B7A2D)}, {UINT64_C(0x891636E3C4FA9719), UINT64_C(0xAEE84C27107DD719), UINT64_C(0xA2B0D83EC1872E75), UINT64_C(0x7DD62CBC7383069E)}}, {{UINT64_C(0xEBA4A024C81B7E15), UINT64_C(0x1CC37E0804516070), UINT64_C(0xEF1F0401F90CE59D), UINT64_C(0x3B4259D5E062E133)}, {UINT64_C(0x87A1DBFACF2CA1DD), UINT64_C(0xCFBFB15F61FD1AFB), UINT64_C(0xFBFD9899ECF4C7BA), UINT64_C(0x57C84CEE2725FA50)}}, {{UINT64_C(0x8B0B7414EFA6E3D0), UINT64_C(0xD9725C5EB3D04224), UINT64_C(0x670E6C508A91371E), UINT64_C(0x4D1304679B25BD3B)}, {UINT64_C(0x18D77D155CF18D4F), UINT64_C(0xEF80DC411CA09677), UINT64_C(0x6F3A961BB9A05CF9), UINT64_C(0x0BB8A5187C1433A4)}}, {{UINT64_C(0xAC0CF52AB33FCF05), UINT64_C(0xAD03692F1CDC7782), UINT64_C(0xB345BAE6AA02B77E), UINT64_C(0x05096694456FCFA9)}, {UINT64_C(0xA898444825D4CF32), UINT64_C(0xD76393E315184188), UINT64_C(0x7D4A8C0CEA069BED), UINT64_C(0x4D22268D11E18347)}}, {{UINT64_C(0xC2A0BB753CB3C0F1), UINT64_C(0x61F4EC4C8EBA58C6), UINT64_C(0x5D3F0D44DFC4A903), UINT64_C(0x0B6CE81BF9B6F79A)}, {UINT64_C(0xF694A44A94E49623), UINT64_C(0xCFCBB7E11BDF75E0), UINT64_C(0x20CEE1BDE0337E13), UINT64_C(0x694EA40BDFF02E18)}}, {{UINT64_C(0xC21BE0FA78D1DC2E), UINT64_C(0x08B4D9A5ED0E49E0), UINT64_C(0x676731AB827F0B4C), UINT64_C(0x674ECC79EBAB5894)}, {UINT64_C(0xB29BD0D439ABB148), UINT64_C(0x8207A8F82378A63A), UINT64_C(0xE36A549D1E4C29C2), UINT64_C(0x380D48DE3F1C255B)}}, {{UINT64_C(0x6AB6F887E5F2C87E), UINT64_C(0xE92C7345A01AEC86), UINT64_C(0x697F45208660C26F), UINT64_C(0x4F2488E09B58015B)}, {UINT64_C(0xB2410B3EBB41900C), UINT64_C(0x31267500BE1A8A39), UINT64_C(0xA7C9997CB9140554), UINT64_C(0x335B18061CD41524)}}, {{UINT64_C(0xB836FD9F14873270), UINT64_C(0x1AE0F512E3243EC5), UINT64_C(0xA743E30483B9AB74), UINT64_C(0x1569C30D3A5758C7)}, {UINT64_C(0x003CEF9A9E8F9E52), UINT64_C(0x557AFB4A8C22119E), UINT64_C(0x66F2487EF223A966), UINT64_C(0x7FA00273A519378F)}}, }, { {{UINT64_C(0x812C024F7B08C1C4), UINT64_C(0xC6017986ADBA8AD9), UINT64_C(0x59C7B16C0601BD82), UINT64_C(0x41B6A45C0CFA5622)}, {UINT64_C(0x353A67D583C1E3E8), UINT64_C(0x9A83438EC65F5059), UINT64_C(0x9995037786EEA346), UINT64_C(0x74E2F4BD330D2570)}}, {{UINT64_C(0xDB8E53C1B4A8BDA8), UINT64_C(0xA850047E2C003C77), UINT64_C(0xFFD48A731B018831), UINT64_C(0x24F96CB68B325062)}, {UINT64_C(0x3779CA4DCD2B821B), UINT64_C(0xC2AFBF6EC3159CE7), UINT64_C(0x8A580B1A10F18DE9), UINT64_C(0x37043D0D8CF75334)}}, {{UINT64_C(0x0451DCDAECCCF2E8), UINT64_C(0xCF7A3AD9752A134F), UINT64_C(0xD5754596FBDAE56C), UINT64_C(0x15237D73F4CDCF6A)}, {UINT64_C(0x1DF5912CECA37967), UINT64_C(0x60934339336CD97E), UINT64_C(0xA4E523FE434DDC01), UINT64_C(0x24E81DC679DBE24C)}}, {{UINT64_C(0x28F0D73BC83B2B7C), UINT64_C(0x45BE220F7B5DE1AA), UINT64_C(0x1B785230B136A877), UINT64_C(0x5A94122AAEFF115B)}, {UINT64_C(0xEF895F0C8E598998), UINT64_C(0xCEE32B3EF4C622C3), UINT64_C(0x2D080B1DB256CFD0), UINT64_C(0x672686D621075E15)}}, {{UINT64_C(0xE85FB5759F9F26FE), UINT64_C(0x1DE57B8393A7966E), UINT64_C(0xA9948DE8DD8CB696), UINT64_C(0x226C95A6758E685D)}, {UINT64_C(0x38B0753B3729C663), UINT64_C(0xD46CA4D9410E4884), UINT64_C(0x1D6FA5F977516FA4), UINT64_C(0x09A0FDB8696CFAFC)}}, {{UINT64_C(0xD1DAD8E9CC7F6FD8), UINT64_C(0x7BB9F606022195A2), UINT64_C(0x1B997396223A9346), UINT64_C(0x6ACD6F7C88DCFB04)}, {UINT64_C(0x9029E5EB3AC52F65), UINT64_C(0xED1D7A0F935A39DE), UINT64_C(0xF1D58C3A538D8914), UINT64_C(0x19153569B36B8342)}}, {{UINT64_C(0xFF600354E2502156), UINT64_C(0xE386A20F733DA5EC), UINT64_C(0xD6FBCBBB9D24D11D), UINT64_C(0x0B57498C0B06C843)}, {UINT64_C(0x98F1FFF87A834667), UINT64_C(0x4AEB8788C7DF05F5), UINT64_C(0x8CFA3B01C2681DA4), UINT64_C(0x1AECC0E82FA2FAEA)}}, {{UINT64_C(0x3827886594C5CBC5), UINT64_C(0x9ADA7CAB041A755A), UINT64_C(0xB38F762A8D891640), UINT64_C(0x28F6FBB200AD88F0)}, {UINT64_C(0x3F9629E33709CD6D), UINT64_C(0xD2435A554912F483), UINT64_C(0x305BEA64DFF5AB69), UINT64_C(0x4D29041A663BB0D9)}}, {{UINT64_C(0xDC4BC9D4E2FD9338), UINT64_C(0x5389390DBA7938FC), UINT64_C(0xC42B812DF329B218), UINT64_C(0x5E809B5EFA9F1956)}, {UINT64_C(0xE2A89BAA523D74C3), UINT64_C(0x97CD9FFB78CBA7B5), UINT64_C(0x25F953015B07BCD2), UINT64_C(0x4042C7052064BB3A)}}, {{UINT64_C(0xD8B6ADA428D53BF9), UINT64_C(0x5E922CA5A4210F2D), UINT64_C(0x9501F46AF05A1629), UINT64_C(0x28094E54C6CD71CD)}, {UINT64_C(0x8D5484D5811285AD), UINT64_C(0xFB2168F41593EE86), UINT64_C(0x693D3B32AC54A41D), UINT64_C(0x3DAFEC0728A5425C)}}, {{UINT64_C(0x0E4CF0D0D12837A8), UINT64_C(0x19FA2CC9CF5273BB), UINT64_C(0x56346BAE116A20C4), UINT64_C(0x4F3597FE0E436A36)}, {UINT64_C(0x459D3FFBE8EB1B85), UINT64_C(0x7C7186725AE04130), UINT64_C(0xA37C258660302740), UINT64_C(0x2871AF37913072D8)}}, {{UINT64_C(0xD77249B78590319D), UINT64_C(0x73F7A684EB06B813), UINT64_C(0x4C9DC5B971D1D580), UINT64_C(0x7C91A9F55A50A95B)}, {UINT64_C(0x4F8F2E890475F161), UINT64_C(0xF34EC1DD538B7F94), UINT64_C(0xB8FF6C65D46F2575), UINT64_C(0x79A2CE2C64433C80)}}, {{UINT64_C(0x38448A531AEB7039), UINT64_C(0xF5EC03F7417189EC), UINT64_C(0xFA095CA1EB92FF2B), UINT64_C(0x4612F720E4FCAEDB)}, {UINT64_C(0xC945E966F30AAE0E), UINT64_C(0xF61CFE85340A7A1D), UINT64_C(0xA2560BC6E42D7920), UINT64_C(0x07D7B321A692E9C7)}}, {{UINT64_C(0xB9C26307592C60C5), UINT64_C(0xCECBC6C30F59D966), UINT64_C(0x8BA31FD65459D89E), UINT64_C(0x1A4AF6B147C7FAE8)}, {UINT64_C(0x66487766B431D720), UINT64_C(0x5D5973095108B845), UINT64_C(0xA3B94FD7CA8E6E0D), UINT64_C(0x639519E355C6A48D)}}, {{UINT64_C(0xAD3EE167052DC195), UINT64_C(0x4DF2BFC70947816B), UINT64_C(0x5D463469ABADBB3C), UINT64_C(0x6F7AA885C33D4F96)}, {UINT64_C(0x3DD27536FE06133C), UINT64_C(0x27A557B22796E7ED), UINT64_C(0x1117CCB73D314A4F), UINT64_C(0x6F0C0AE023968946)}}, {{UINT64_C(0x0A3D4DAEE2110C00), UINT64_C(0x0389D3A54C633A23), UINT64_C(0xE167BDFA83AEC172), UINT64_C(0x067070CEFB38E8F1)}, {UINT64_C(0x411373674DF220C5), UINT64_C(0xB255E5D359C39F05), UINT64_C(0xE437984E043C75B3), UINT64_C(0x01DCD7716A22994A)}}, }, { {{UINT64_C(0xD2880DF24C6FDDCF), UINT64_C(0x76A28FF28A00D80F), UINT64_C(0x257CB1F80792F82C), UINT64_C(0x07938ABC605703EA)}, {UINT64_C(0xD99F0AC95F61B0FE), UINT64_C(0x440DC63C8EC15433), UINT64_C(0xD9BDDFF186AB5DDB), UINT64_C(0x3B8875DC744755EA)}}, {{UINT64_C(0x01D904404938C9FB), UINT64_C(0x900657FD8DB6A890), UINT64_C(0xDCC5068AF60A173A), UINT64_C(0x5F3EB242857C7B2A)}, {UINT64_C(0x634240BDA4F0EB9E), UINT64_C(0xACDDA6C444E85C70), UINT64_C(0x753F02AB0AABE4C5), UINT64_C(0x33D89D21C1D034E1)}}, {{UINT64_C(0x4596B52D1279B25B), UINT64_C(0x494669D9A48014AE), UINT64_C(0x9A26B6FC4FD22150), UINT64_C(0x394DE0BBF07D5A3F)}, {UINT64_C(0x12DFE5A6634C1733), UINT64_C(0x33EC21D21EBC5177), UINT64_C(0x454B4930527514CC), UINT64_C(0x7F23BD0F41405532)}}, {{UINT64_C(0xB2879E7FBAC9DD30), UINT64_C(0x259BB1CB06CE7672), UINT64_C(0x201DB42EBB97BE10), UINT64_C(0x112D60792EA35A8E)}, {UINT64_C(0x7CC756D46B3B9933), UINT64_C(0x4BD24810781CE4DD), UINT64_C(0x53CB4E388733247E), UINT64_C(0x47BD6A309DA66787)}}, {{UINT64_C(0x8A700953BA600C8E), UINT64_C(0xD466F11DCF388C0D), UINT64_C(0xD485F341E4A17A8E), UINT64_C(0x63278918234FC16D)}, {UINT64_C(0xF4DDA875BB82046D), UINT64_C(0xD61E4E582945470A), UINT64_C(0xCDB6C5BD6D0F8976), UINT64_C(0x44CD9E4D10A004A2)}}, {{UINT64_C(0x595CD94249C4AA6E), UINT64_C(0xE5A901363DE400C8), UINT64_C(0x4BCED3BD9DD12D9E), UINT64_C(0x3700CF9278E3D5E4)}, {UINT64_C(0xECFFF49875A32D1A), UINT64_C(0xC28DDE373C4A54B2), UINT64_C(0x8DC22352993CAE6D), UINT64_C(0x46CB540852ED7019)}}, {{UINT64_C(0x71FFAED0EA94E7BF), UINT64_C(0xC0817D2CD5AE6185), UINT64_C(0x7B72B8B95CF23687), UINT64_C(0x61DDE59960A450E1)}, {UINT64_C(0x17CF0B10D13870E6), UINT64_C(0x7D08E1FB5F2930BB), UINT64_C(0x8D0F4F5583807C14), UINT64_C(0x61EBFC1A6E6DB701)}}, {{UINT64_C(0x247A3F650FCAFE68), UINT64_C(0x575480357AC2A25E), UINT64_C(0xB7466CA53CD0FE06), UINT64_C(0x7B0D8B36BCC31AB3)}, {UINT64_C(0x2FAAF49CA6D4358C), UINT64_C(0xD9E5E2FE3E9B4E31), UINT64_C(0xA6A859A0F6086336), UINT64_C(0x0C2A442AA9C19F84)}}, {{UINT64_C(0x66FEA8413BC0AD7D), UINT64_C(0xCD3A546C32C9158E), UINT64_C(0xACD2EE7F8FE1DF7F), UINT64_C(0x10F58C0AEBE9621E)}, {UINT64_C(0x80047C54478B667D), UINT64_C(0x9EAE5FAA89870DCE), UINT64_C(0xC05BEB330520A005), UINT64_C(0x2CFBC921352AC891)}}, {{UINT64_C(0x6842E6B8632F6D73), UINT64_C(0x6F2B57242B9FFAEA), UINT64_C(0x7ACCC9829341D2FA), UINT64_C(0x6DAD9A1188809B65)}, {UINT64_C(0x3411850CB6CC2240), UINT64_C(0x8547BCAFB64937E1), UINT64_C(0x49AEDD5F6978F636), UINT64_C(0x38F5975285A53D2A)}}, {{UINT64_C(0x5C38EB49F5F5A2D0), UINT64_C(0xE028121BE3BF779C), UINT64_C(0x649997C8A783D5E3), UINT64_C(0x04DE984A2C06CC0F)}, {UINT64_C(0x52C834B0A49D6239), UINT64_C(0x070A1B09628413AC), UINT64_C(0x2FBE0CA5A8624A1E), UINT64_C(0x687D93C3268D930A)}}, {{UINT64_C(0xC7CD6805314C47A4), UINT64_C(0x8BD0C630CE7A9A6D), UINT64_C(0xCDB2DAD534F727BA), UINT64_C(0x7814C41425DB0189)}, {UINT64_C(0xD7F9C5DC7DD9CAEE), UINT64_C(0xDA6EACC8798690E4), UINT64_C(0x705794E36B675E01), UINT64_C(0x4A31D71475C5EC38)}}, {{UINT64_C(0xC162A3EA0519D5F2), UINT64_C(0x92146A782958FABF), UINT64_C(0x1E63CBE46CB31EB0), UINT64_C(0x77CE5AADFBC5AD0F)}, {UINT64_C(0x3631E47032605DC6), UINT64_C(0xC7D1C72F43413DD3), UINT64_C(0x171A37940DF6B7C9), UINT64_C(0x6D7117432B5A08BC)}}, {{UINT64_C(0xDDC8057D509EF0F2), UINT64_C(0x05C0B92B6CABB486), UINT64_C(0xD49692B64244D919), UINT64_C(0x4E181744D297F56E)}, {UINT64_C(0x902F6E73F8CBB897), UINT64_C(0xC3B21FE156D01382), UINT64_C(0xA858ABE146890F6D), UINT64_C(0x46B5E2C9506858AF)}}, {{UINT64_C(0x30441281F4DEDE56), UINT64_C(0x13F06FBBA195AEDE), UINT64_C(0xAD5F575B2FDD3BFF), UINT64_C(0x680F656D32ACB590)}, {UINT64_C(0xFB60A8E1E3FAABA7), UINT64_C(0xC8FBC1E489A14827), UINT64_C(0x5835453FA8616136), UINT64_C(0x02826A47E6F4926F)}}, {{UINT64_C(0xAF4319A174F32180), UINT64_C(0x4C9FDD166C2C1712), UINT64_C(0x59CA4FD4AC7E14A7), UINT64_C(0x07AA6E2FABBD4EA4)}, {UINT64_C(0xB4BD441CFE9F121F), UINT64_C(0xDEBB4356CDA452C5), UINT64_C(0xC29F1CFA51C9F451), UINT64_C(0x7E1EEF4C83F598D8)}}, }, { {{UINT64_C(0xFC41A3215014135F), UINT64_C(0xBE95F9BA3EEADF3F), UINT64_C(0x054B12123203A540), UINT64_C(0x6DD2FD173721C745)}, {UINT64_C(0xF86B85785A682B59), UINT64_C(0x872AA481BE801F7D), UINT64_C(0x64C1600C14F865F2), UINT64_C(0x4BDD47AA25365449)}}, {{UINT64_C(0xC96A964CF3A3469F), UINT64_C(0x273C5C859F7DA0E3), UINT64_C(0x88EDC4AC4C1A9DCD), UINT64_C(0x77623444B48E4CAA)}, {UINT64_C(0x7AF34A9C31581FF7), UINT64_C(0x23328C37BB57F7CC), UINT64_C(0xE920D8E98B7C86AB), UINT64_C(0x1C7A7A409DE6D64C)}}, {{UINT64_C(0x0BCDCD2279B9451C), UINT64_C(0x2920B43558F5241B), UINT64_C(0xC24DF7159B33EF3D), UINT64_C(0x15252C5BF2600224)}, {UINT64_C(0xF9C8D8A69A9160B6), UINT64_C(0x3186F2F9A6B9A6B8), UINT64_C(0xC37267DCA377E98A), UINT64_C(0x71319A0A37957189)}}, {{UINT64_C(0x48E5033F6BAF6AE5), UINT64_C(0x72379B2EA460FCE9), UINT64_C(0xFC753D47F3D2FA46), UINT64_C(0x3B67685AED9EDF72)}, {UINT64_C(0x1608E304F712500F), UINT64_C(0xDFA358A49EE1B42A), UINT64_C(0xE7A4B37634B8345C), UINT64_C(0x7D0E0BF306753C17)}}, {{UINT64_C(0xA88526A68FA62042), UINT64_C(0xD6F32BB5393006BD), UINT64_C(0x14804978A5DD5045), UINT64_C(0x34C02662BF0C5E13)}, {UINT64_C(0xF9BEEBF9376E3E3D), UINT64_C(0xFD7740415923DC61), UINT64_C(0xFE77BDFAF9735CF5), UINT64_C(0x2E476E224077CFCC)}}, {{UINT64_C(0xAB8E52EB9BA457EF), UINT64_C(0x95F6C5FE0ABED212), UINT64_C(0x7204B1A6386620FF), UINT64_C(0x463B7474DD180719)}, {UINT64_C(0x7F7D27AAF991D8EE), UINT64_C(0xA7EB10858F67722D), UINT64_C(0x78D7095BE331480A), UINT64_C(0x1DCC8C1266A1C8FA)}}, {{UINT64_C(0xD4C39C183E6A04C1), UINT64_C(0x73DB1C4DB598ABEE), UINT64_C(0x381F9780DF4A7D42), UINT64_C(0x3C19A23152F860CD)}, {UINT64_C(0x7EC899343EF00740), UINT64_C(0x50867788F37FE0D5), UINT64_C(0x502D870B43E84D4A), UINT64_C(0x5F8A84138F744749)}}, {{UINT64_C(0x1C41AAADFAECCFE4), UINT64_C(0xC324F3B921461F41), UINT64_C(0x165ABA3F4E90C0AB), UINT64_C(0x2F96CED55F88E7D3)}, {UINT64_C(0x8CA366FCC0E52768), UINT64_C(0x6CCA017CA55249A7), UINT64_C(0x41ED002F0F7EBCA2), UINT64_C(0x0C33B371A2BAF655)}}, {{UINT64_C(0x3B94CD9C62B928CE), UINT64_C(0x5BC43A6A39729345), UINT64_C(0x044D0C0FC47D223C), UINT64_C(0x3B64B38DB0493367)}, {UINT64_C(0x82AFB645EB74A6C2), UINT64_C(0x0CB01E22D876D71C), UINT64_C(0xCE2A7DCC29C6BCD0), UINT64_C(0x4753DE1CDFD644EC)}}, {{UINT64_C(0xE69FC90362188792), UINT64_C(0xD91DB9BC4914328B), UINT64_C(0x44953F4D3B68F8D0), UINT64_C(0x2950435D0654B283)}, {UINT64_C(0xE599A4AEBE88F609), UINT64_C(0xF801CD9090F5D10E), UINT64_C(0x0AB78DB1D4F1D3D9), UINT64_C(0x3ED9666AC0F71ECB)}}, {{UINT64_C(0x6046A505E1E73E59), UINT64_C(0x8723A3ECF3B5C2E0), UINT64_C(0x4BD95BF6E22C1555), UINT64_C(0x50DC33DB6DA421E9)}, {UINT64_C(0xCFB51E95F1B01327), UINT64_C(0xE7013F2A199A8765), UINT64_C(0xF486FEA777504B0B), UINT64_C(0x2AF0F7E9F9BA61C6)}}, {{UINT64_C(0x9DBA1A02BE00B841), UINT64_C(0x488BA4558BED5F08), UINT64_C(0xF6814A6467F1040E), UINT64_C(0x23AC4762DC252336)}, {UINT64_C(0x25040F02F0ED0577), UINT64_C(0x65209B22C6FFAE9C), UINT64_C(0xCC441A8C485AA0AC), UINT64_C(0x10DFACB659D63A8A)}}, {{UINT64_C(0xBF4A0569C7D86B28), UINT64_C(0x5CDA94C4DBDA9DA4), UINT64_C(0x2235C4CE69058335), UINT64_C(0x68FA5E7CD30C89E2)}, {UINT64_C(0xBB286D3959097B5B), UINT64_C(0x87DA80BB9A20BA7E), UINT64_C(0x85EF865E56F47E54), UINT64_C(0x5BB8786774ABFA5B)}}, {{UINT64_C(0x5DB14FABDE2FA36E), UINT64_C(0x84E3B54677775F09), UINT64_C(0xDA734523DA951D99), UINT64_C(0x04A890973975026E)}, {UINT64_C(0xB5753599C0D12BE1), UINT64_C(0x05670CE9FB864D61), UINT64_C(0xB7153502305BF3CF), UINT64_C(0x7A9BB3572E60AF62)}}, {{UINT64_C(0xF43CDA07C7566DA5), UINT64_C(0x7FC4C7FC53FA4196), UINT64_C(0x1E20E0ED88DCC9F3), UINT64_C(0x7317C7E5FEE23DDA)}, {UINT64_C(0x0305E13F43017070), UINT64_C(0x5568410C6B1CA7C0), UINT64_C(0x0E5D55BA104BA029), UINT64_C(0x118B284E90FD49F8)}}, {{UINT64_C(0xCA0F7B5B8F3C6D8A), UINT64_C(0xAF72DEE0AF7ECBF6), UINT64_C(0x21C86D85BB0EC4F1), UINT64_C(0x0303BC47F0525D17)}, {UINT64_C(0x6ADCAB9F896FFCC0), UINT64_C(0x65764C4524E970CA), UINT64_C(0x0000F14C1C3CA718), UINT64_C(0x01CF1DDBD0292587)}}, }, { {{UINT64_C(0xEC4FABCC86111EBA), UINT64_C(0x599C20B6BBBB793F), UINT64_C(0xF74AE7475657668F), UINT64_C(0x24AF29B277BAE892)}, {UINT64_C(0x47D6876BCFAC9D5E), UINT64_C(0xCACF9F5024369E14), UINT64_C(0x8A231D746F9CAFEF), UINT64_C(0x57645A4EB69AAE58)}}, {{UINT64_C(0x440A3B15489900F6), UINT64_C(0x4B642FD3961AC3C2), UINT64_C(0x3D668599C265B973), UINT64_C(0x5FA0E65D1139CE78)}, {UINT64_C(0x3FF15AF41FAA710E), UINT64_C(0xE45D35CEA9422FC0), UINT64_C(0x56904C06BD7BB349), UINT64_C(0x40C5BEE0E529989D)}}, {{UINT64_C(0x8FA4686170B20298), UINT64_C(0xEC6295384838A136), UINT64_C(0x23ADE0F6137F66D6), UINT64_C(0x1A92E05C8EA53E76)}, {UINT64_C(0x51728E279D51EB7A), UINT64_C(0xA6B0B758C4352E35), UINT64_C(0x84C5933137A11B35), UINT64_C(0x3933EFC1F66B75C7)}}, {{UINT64_C(0x7FB68D6266916D0A), UINT64_C(0x3325D42EF28A9B14), UINT64_C(0x75E83A658592B544), UINT64_C(0x524D1CE02718628F)}, {UINT64_C(0x88A110EA3C584D76), UINT64_C(0x6B034AC44AC09AAC), UINT64_C(0x0648863584FD3A36), UINT64_C(0x516F0EB087D944E1)}}, {{UINT64_C(0xE2016DA0DF11D0BB), UINT64_C(0xB34EB471B01F6540), UINT64_C(0x13E3D330165CBB24), UINT64_C(0x3E755D117CF7F676)}, {UINT64_C(0xD70CF4F84FEA9A69), UINT64_C(0x98F59E0AD18F4337), UINT64_C(0x7CCE7CE6826344BA), UINT64_C(0x30D129D7F4004BBE)}}, {{UINT64_C(0x016EF317BA9CB975), UINT64_C(0x8EEBED19E4B3AB4D), UINT64_C(0x8C597DF0170A2570), UINT64_C(0x451538D85BE6DE70)}, {UINT64_C(0x6C711DAC7A64792F), UINT64_C(0x8F1896EB217EC8FB), UINT64_C(0x82E9C20B7FE18DED), UINT64_C(0x6CEBF4A7B0C5F622)}}, {{UINT64_C(0xD9403EB549CCC64F), UINT64_C(0x807EBD5628B8A3FD), UINT64_C(0xF08BB6590F291E12), UINT64_C(0x020D13E39C3F4432)}, {UINT64_C(0xDA247896752BB92E), UINT64_C(0x9954179486EAFA7A), UINT64_C(0x213E94BA274E36AD), UINT64_C(0x4CC0F1FB61A71333)}}, {{UINT64_C(0x19CC11BD06478801), UINT64_C(0x1251562A6D18216A), UINT64_C(0x7A5F06BBCDD307FC), UINT64_C(0x4285F6ABFAA9CA2A)}, {UINT64_C(0x5A92283181258996), UINT64_C(0x8F7CF8EE27B8B018), UINT64_C(0xF030BEF37F81A62D), UINT64_C(0x417ACBC1CD4FD4E7)}}, {{UINT64_C(0xCFB0EA58EC64412F), UINT64_C(0x9547B64A6091E621), UINT64_C(0x5EA49C7EFD0C9815), UINT64_C(0x6789055AE78B355C)}, {UINT64_C(0x8D743E9877E9A73A), UINT64_C(0xB032EA6A2EA3FA49), UINT64_C(0x52EA3801CEAAA33A), UINT64_C(0x73B3BB8DF2C3E22B)}}, {{UINT64_C(0xAA2A12917DB9E301), UINT64_C(0x7F29770FA1293DD7), UINT64_C(0x3135BB2159683DEC), UINT64_C(0x070F8DF77785B505)}, {UINT64_C(0x8F2158EA37F53677), UINT64_C(0x96CC7B9DABE1AF1C), UINT64_C(0x7F9779156D6477D6), UINT64_C(0x55DB3922DF370EAF)}}, {{UINT64_C(0x3028C03AA9DAC7AE), UINT64_C(0x16F7DF0DBAE06BE0), UINT64_C(0x09548398410D57D9), UINT64_C(0x5E9C7F431510D51F)}, {UINT64_C(0x033B9BE2D07717B3), UINT64_C(0x0D5D8116EF08AB91), UINT64_C(0xD5A172B1EEEFE88F), UINT64_C(0x72B1D29F0996294E)}}, {{UINT64_C(0x9E2B79FBE4D0965C), UINT64_C(0x01F403EEF49D8B8E), UINT64_C(0xBD4D2D48CEB12D6A), UINT64_C(0x4D04DD9A11FB24FB)}, {UINT64_C(0x7E613EC5E5C8D24C), UINT64_C(0x568BEFE8B918E543), UINT64_C(0xD6456D1EE966DF28), UINT64_C(0x2DDEAD63BAFC71E2)}}, {{UINT64_C(0x1D794F92448D72E9), UINT64_C(0x3978052EE7E62BF2), UINT64_C(0xF6C7A72EE2B92538), UINT64_C(0x43879A886EF321F0)}, {UINT64_C(0x2A82314034F6FFBC), UINT64_C(0x26F84E5135F4C485), UINT64_C(0xDEE65540028BFA7E), UINT64_C(0x56216E9D5F033058)}}, {{UINT64_C(0x31CA5470CBC772EE), UINT64_C(0xD3621E11811BB5D0), UINT64_C(0x501C4C4770863D71), UINT64_C(0x0564518ED28D6BDD)}, {UINT64_C(0x60E3B89BD35B64B9), UINT64_C(0xB4F2599A6621A688), UINT64_C(0x1A8C45083B5E116D), UINT64_C(0x633EF5CCFABF3125)}}, {{UINT64_C(0x0DB1D2515D4FF62A), UINT64_C(0x6CBD00EB4B17D658), UINT64_C(0x2FA38212FA1DB737), UINT64_C(0x07B18CB893A7FA03)}, {UINT64_C(0x531E47EF548E5F82), UINT64_C(0xAE7B94FD8276963C), UINT64_C(0x8055D82A6181A13A), UINT64_C(0x5725B51223B6E361)}}, {{UINT64_C(0xD84C70416D8B1FFE), UINT64_C(0xF68ACA0B5D994200), UINT64_C(0x32BF99446BB908E2), UINT64_C(0x1240A3E61AD88DB1)}, {UINT64_C(0xB0BE96AAA92B6472), UINT64_C(0xEF88A155A1B7726C), UINT64_C(0x000FD9ED9349F496), UINT64_C(0x377DCBAD454A05D9)}}, }, { {{UINT64_C(0xD0A092CDC04111D2), UINT64_C(0x5C43A94C338F06D6), UINT64_C(0x697B4C2625E964F3), UINT64_C(0x2CD5A0597572CCFD)}, {UINT64_C(0xA09FC4D4B5B523E4), UINT64_C(0x7D8141E84E1E9042), UINT64_C(0x2462512BD637409E), UINT64_C(0x503F032F7CB2CE75)}}, {{UINT64_C(0xC56F38E3BCBF1450), UINT64_C(0x09F4FC77CF2E5594), UINT64_C(0xF449C3E60FCB653A), UINT64_C(0x6A1FE75264A53C65)}, {UINT64_C(0xFF366FED7C039488), UINT64_C(0x23F58BA58C99A6CB), UINT64_C(0x4B5546C68D67F6D6), UINT64_C(0x03405C85178B1668)}}, {{UINT64_C(0x969F1B33C0C86696), UINT64_C(0x9346D06C13746468), UINT64_C(0x68AED3C8AE0C6D62), UINT64_C(0x7B3D536174FE63D5)}, {UINT64_C(0xFEE8416BC4F4B65D), UINT64_C(0xC79BF488554C6D0A), UINT64_C(0x191D5D27DC402BB0), UINT64_C(0x31B00167E087EB9F)}}, {{UINT64_C(0xD5FE0979E05D281F), UINT64_C(0x8373AB503485446B), UINT64_C(0xCE5258BA9223681F), UINT64_C(0x5F82843EA37BF244)}, {UINT64_C(0x94ED780BCFC16536), UINT64_C(0x6A9739B3BD477733), UINT64_C(0x137D68F2A04A4195), UINT64_C(0x3A0F27E80032BFCE)}}, {{UINT64_C(0x7EADE421358382F9), UINT64_C(0x490B9CA692E3D912), UINT64_C(0x040CE73EF1AFBC2A), UINT64_C(0x5745D47311AE91BA)}, {UINT64_C(0x625BED61CE303B77), UINT64_C(0x85B2A1EB85B03A1D), UINT64_C(0x764F62E43D7C02E0), UINT64_C(0x22C2D16FA7AF6DDE)}}, {{UINT64_C(0x5B985DE6D19377BE), UINT64_C(0x0AF85A06D8E43A10), UINT64_C(0x1465E5040519F4C6), UINT64_C(0x5DA01665E3E20BA3)}, {UINT64_C(0xCD9B8E9B675D9E2A), UINT64_C(0x4C77E1AD6448A2CD), UINT64_C(0xD6094BAD1E5D4465), UINT64_C(0x4C352951C50DB788)}}, {{UINT64_C(0x42581152EE5AB903), UINT64_C(0xDAD2DBC963311418), UINT64_C(0xBCA4F70BB885E56A), UINT64_C(0x1F5DD363B94E0876)}, {UINT64_C(0xF9AD5D043FFF479E), UINT64_C(0xEF1176E5FE06AD2B), UINT64_C(0x46ACB00A216F77AF), UINT64_C(0x709CF4EB857C4F78)}}, {{UINT64_C(0x70CD666ED0D2FF1C), UINT64_C(0x4BAD4A6AE7EFE4AD), UINT64_C(0xB43F6C2D0FA72024), UINT64_C(0x0D78F8E2E90C0617)}, {UINT64_C(0x543B9662F80DCAA7), UINT64_C(0xB02FB3BCF28ADFAF), UINT64_C(0x26C17651C51C54C3), UINT64_C(0x0815F6373D648D88)}}, {{UINT64_C(0xAC4F43C1AEA98FA6), UINT64_C(0x2D223416AC4398C6), UINT64_C(0x48B2EEADDA5C5070), UINT64_C(0x632B65F1BE666F70)}, {UINT64_C(0x971D3BC0952021BE), UINT64_C(0x9FDCB7E023B2C578), UINT64_C(0x476D47153CC21796), UINT64_C(0x4015565F95832A94)}}, {{UINT64_C(0x8913AFAC13CA725C), UINT64_C(0xA56DC461DC18F0D9), UINT64_C(0xAC3AC72010F3AAFE), UINT64_C(0x5D75567EC628D69C)}, {UINT64_C(0xC11BE9DCEEEA4BF7), UINT64_C(0xAD97FBCA1C193BD5), UINT64_C(0xD1EC5BCEC58123E8), UINT64_C(0x0F6DF9309C73D4E5)}}, {{UINT64_C(0xE80A0ADAFD759FFD), UINT64_C(0xE52DF94B239CAFC0), UINT64_C(0x59640161FE7A43E9), UINT64_C(0x7A96995CDB1A38F0)}, {UINT64_C(0xA46A15037CD5011B), UINT64_C(0x75CFB637AC0E9689), UINT64_C(0x27B740CA97AAD2BA), UINT64_C(0x64A0748BEAD2F776)}}, {{UINT64_C(0xB67E5BB50625B3B1), UINT64_C(0x2FE19FFBC66D2832), UINT64_C(0x47815666F70C07CF), UINT64_C(0x5A1AA24AA43E52AB)}, {UINT64_C(0x04EE11F84CAC0E66), UINT64_C(0x51E515833A3A4836), UINT64_C(0x46755F49B44F6DEC), UINT64_C(0x6388408BC1E9B282)}}, {{UINT64_C(0xD47AA9A69DE7A6A7), UINT64_C(0xEC94AD9B189BC9D2), UINT64_C(0xFA89099D8EC0E950), UINT64_C(0x1B9FC2069F64D27F)}, {UINT64_C(0x765724840B729DE1), UINT64_C(0xFE9E8E714BE22EB8), UINT64_C(0x910F0456F9DB5942), UINT64_C(0x4D018459C617D82B)}}, {{UINT64_C(0xB082B58AF5516C6F), UINT64_C(0xFFBA0E73567A8CF5), UINT64_C(0x08FF64CE8A6DD4A0), UINT64_C(0x6CF3C89C69A9F66A)}, {UINT64_C(0x356782BA62FEB0A7), UINT64_C(0x1A18720D3E2907F9), UINT64_C(0xF840FFA30BBD9D92), UINT64_C(0x41D9EECA20926421)}}, {{UINT64_C(0xCF2E8AACB6B08321), UINT64_C(0xC76FBE12010D91C0), UINT64_C(0x5492475068E35E02), UINT64_C(0x74DBA2E19AEE00F8)}, {UINT64_C(0x94C70D6DC5504E82), UINT64_C(0x0BDF415FEA1770F7), UINT64_C(0xDA45B7003CA6DB0A), UINT64_C(0x473C6A04E133A980)}}, {{UINT64_C(0xD1FF6C1E1E188071), UINT64_C(0x621A7D3CEA3F16F8), UINT64_C(0x604673076A160F47), UINT64_C(0x37CA7D3D32DC84EE)}, {UINT64_C(0x54F5F7F667DDFDB5), UINT64_C(0x3A8482F9921BA04B), UINT64_C(0x842F49501A28E238), UINT64_C(0x3A4DC9177214FAFD)}}, }, { {{UINT64_C(0xEDD8360CEEA25E82), UINT64_C(0x3DB6D933FB7B7ED0), UINT64_C(0x882F3C0BABF15199), UINT64_C(0x228664A2516E349D)}, {UINT64_C(0x96E6DCF7E88173DF), UINT64_C(0x382C8D3BD7EC0BC3), UINT64_C(0xFBFF6D216FA5FA58), UINT64_C(0x780039802F41C959)}}, {{UINT64_C(0x713BA43B9D9ACF9C), UINT64_C(0xF59A252D94876559), UINT64_C(0x8B310954437B8ED5), UINT64_C(0x76A83790E474E98E)}, {UINT64_C(0x84C1386AF6040B05), UINT64_C(0x69FA9F43BF3D8189), UINT64_C(0x5584164CA98D4866), UINT64_C(0x6C89CE1D3B9045D0)}}, {{UINT64_C(0xD6EF7540B522FB28), UINT64_C(0xDB561B56BB28D745), UINT64_C(0xC9F7543EEFA58B87), UINT64_C(0x5F02A23BE9062979)}, {UINT64_C(0xFD3C0C196809D624), UINT64_C(0x94481554A92EB229), UINT64_C(0x72D8EC53F5147EFB), UINT64_C(0x143026610D1BA626)}}, {{UINT64_C(0x0B35BD5989020800), UINT64_C(0x3C6F1527430D7DEB), UINT64_C(0x9BEB3C8E2FFFA0E0), UINT64_C(0x7E181B78AFD09A19)}, {UINT64_C(0xE82FD9573B2F0B49), UINT64_C(0x4C9461B10BC0F9DA), UINT64_C(0x87D78C412B1C8B85), UINT64_C(0x775BED20C1F5BDA1)}}, {{UINT64_C(0x883AE89B16350593), UINT64_C(0x85D429CB0C19FEC8), UINT64_C(0x5938BDEC5742C36D), UINT64_C(0x2DDBC7EBDA8A21B7)}, {UINT64_C(0xA249BDE407A2E700), UINT64_C(0x42A3897CE8BD6215), UINT64_C(0x87F30BA7732FF181), UINT64_C(0x5385D7091B912C57)}}, {{UINT64_C(0x2B5C555B288041F5), UINT64_C(0xD3D900401F425866), UINT64_C(0x37E40CD202E0FA71), UINT64_C(0x08B37F263A386038)}, {UINT64_C(0x165BD7FB5DE1ED78), UINT64_C(0x22949E810829ECC9), UINT64_C(0xBB8705CCBCE3D01F), UINT64_C(0x7961BE851D233CDF)}}, {{UINT64_C(0x5D3DBC6B7659B477), UINT64_C(0xFD86577950EF08EB), UINT64_C(0x502729E8F34EA1A5), UINT64_C(0x1548526ED2B64602)}, {UINT64_C(0xB13632FDB91D2675), UINT64_C(0x09A42003F7B37397), UINT64_C(0x37D18F37CCFC4532), UINT64_C(0x3FAEF63B73C7082C)}}, {{UINT64_C(0x3365445FE666DB6D), UINT64_C(0x9051FFF5339A0076), UINT64_C(0x6167FB769BD6D01D), UINT64_C(0x09737137CA087B41)}, {UINT64_C(0xCA2193AEB3270BA7), UINT64_C(0xEF0744C28F2217B3), UINT64_C(0x3E030D58F0DD10D8), UINT64_C(0x667246DBCCB4F2F9)}}, {{UINT64_C(0x31F3030E3773EC8C), UINT64_C(0xAF2B31235AD56010), UINT64_C(0xFC118587B37E9062), UINT64_C(0x52840C2C9C2D5406)}, {UINT64_C(0xA96D3DFF6670ACBB), UINT64_C(0xF469982F772EC6D3), UINT64_C(0x5BE20628A9DF4C88), UINT64_C(0x59D01479673633BC)}}, {{UINT64_C(0xC9223750AFB5083B), UINT64_C(0xF1EB451E191C2160), UINT64_C(0x0D913794A38EC005), UINT64_C(0x31062E9E83FD1D18)}, {UINT64_C(0x070538F55F4816AD), UINT64_C(0x90D4855D925F5DA1), UINT64_C(0xC0BBA87B22F455B6), UINT64_C(0x517B5F80F48D2AE5)}}, {{UINT64_C(0x0D8B670A3F4FA7CA), UINT64_C(0xE29C88493D114EB2), UINT64_C(0x1823780D916A187E), UINT64_C(0x6961C48365EE66A0)}, {UINT64_C(0x2F6FB20A62FDC12C), UINT64_C(0x51414E5F0CFDDE0C), UINT64_C(0x16BD56A7DCA39073), UINT64_C(0x0CFE6DAF648FFD43)}}, {{UINT64_C(0x3789F4CAAEBA9241), UINT64_C(0xE8056BC6107777C6), UINT64_C(0x6EE564C33CB20826), UINT64_C(0x5DF3634745448C69)}, {UINT64_C(0xFD0FA84BB22CE624), UINT64_C(0x2AA19672AC753D50), UINT64_C(0x29A1464F677CC0D0), UINT64_C(0x7C2237B13CEF5493)}}, {{UINT64_C(0x87C2587C24255918), UINT64_C(0x9AA89A0B90B35A37), UINT64_C(0x9932EB7810E7CAEF), UINT64_C(0x49278F16CDE31568)}, {UINT64_C(0xA4D33C6141188ED9), UINT64_C(0xC587BDE005AC3A1D), UINT64_C(0x2A5C5ACC7248B5E0), UINT64_C(0x60026A1D8510D2CB)}}, {{UINT64_C(0xE57CB0C96BAF603C), UINT64_C(0x527F28A6AB770AF0), UINT64_C(0x2850D8E6016F2BC1), UINT64_C(0x0EC2A46C936DC2EC)}, {UINT64_C(0xA0BC5306D4F23FC2), UINT64_C(0x6DBEDA2653A0130F), UINT64_C(0xB1D52F87EE3314B7), UINT64_C(0x17168B126C234CF5)}}, {{UINT64_C(0x8B8BC181DADF17D5), UINT64_C(0x31EC3CADFAFFA918), UINT64_C(0x4611A482274E4658), UINT64_C(0x5A9E365273D35EAD)}, {UINT64_C(0xBA68825BF4028FC7), UINT64_C(0x142859D562E203F5), UINT64_C(0xCE516AC41C817A9E), UINT64_C(0x4201468257223F8D)}}, {{UINT64_C(0x51FBFB2EB4B66798), UINT64_C(0x3A3F15910EA9C4EF), UINT64_C(0x3FD3D026E8814805), UINT64_C(0x3CA531E4B0C8DFD0)}, {UINT64_C(0x69A6B3F8E585A960), UINT64_C(0x1627CC77BD3F567D), UINT64_C(0x6F4EF4305DB9CFD0), UINT64_C(0x05B567078D02278A)}}, }, { {{UINT64_C(0x6663F2F310B96338), UINT64_C(0x69373D1FCE8CA31C), UINT64_C(0x3D31C5CFD67AEC10), UINT64_C(0x2FAF554516F2547E)}, {UINT64_C(0xF6E397D51EA2EA64), UINT64_C(0x2281A0DFEEAEBE7A), UINT64_C(0x72E53254FA2527EC), UINT64_C(0x660D059A76432155)}}, {{UINT64_C(0xD3CA8B132C66D937), UINT64_C(0xC6F34B08CD2DF849), UINT64_C(0x9AF2C9E3A23A9F73), UINT64_C(0x24D44BD9702388E9)}, {UINT64_C(0x8DA4D6A4D1B3DA10), UINT64_C(0xB9FAFBF440B93B10), UINT64_C(0xBBE51BB3EFCFD2A3), UINT64_C(0x68BE03951844581D)}}, {{UINT64_C(0xDECABD8C0EA1FAE1), UINT64_C(0xA7499225FDFED7C2), UINT64_C(0x08489E35FB468B83), UINT64_C(0x5B68934443D95F9C)}, {UINT64_C(0x9FC8364A9D2F522E), UINT64_C(0x114DB31A3A5D27A4), UINT64_C(0xC6A35992E33A9EC8), UINT64_C(0x6FE9EC3BDC9ACAF6)}}, {{UINT64_C(0x98AE2D66DEAFC64C), UINT64_C(0x95AAC8EFABE706B7), UINT64_C(0xB15A6604223DFA3B), UINT64_C(0x77DBC24AE24B43CB)}, {UINT64_C(0x65D6F8718542FA2A), UINT64_C(0x1093B2735D326A1A), UINT64_C(0xBA82D607F137AFEF), UINT64_C(0x502B32E3B9DEA6A7)}}, {{UINT64_C(0x88906BD6885CA6CE), UINT64_C(0x136ADF9A1D36BFEE), UINT64_C(0xF844088C09AA61E3), UINT64_C(0x4E508EA351BAC299)}, {UINT64_C(0x251ACD26EB821936), UINT64_C(0xDF6AD7D543D90E10), UINT64_C(0xEBCD7046DE7F14B9), UINT64_C(0x1DB258B1AB503259)}}, {{UINT64_C(0x348E301890AD5D55), UINT64_C(0x0EF6BE737067806A), UINT64_C(0x072C113441627FCC), UINT64_C(0x48EE7606E904F823)}, {UINT64_C(0xEE6AB582D9FD5EF3), UINT64_C(0x57765D0317AB50BC), UINT64_C(0x1CCFB407FB7DEC68), UINT64_C(0x2E1771C7141DF51D)}}, {{UINT64_C(0xCBDD6235A013284B), UINT64_C(0x4D93FD8720D07125), UINT64_C(0xB3D055B3D485418E), UINT64_C(0x4EFB8763C67ADD2D)}, {UINT64_C(0xEC3693821B2DF427), UINT64_C(0x2500979164D0DDF4), UINT64_C(0x9BD42FFC163056C8), UINT64_C(0x605277925B88BEBA)}}, {{UINT64_C(0x6D5D6A869D82DADF), UINT64_C(0xC3BA9A167C24A1CA), UINT64_C(0x838167EC2E6981CC), UINT64_C(0x7FB5D8577E1E4237)}, {UINT64_C(0x83B2C2FC86A40BC7), UINT64_C(0x679D2DFC6F9AC4FB), UINT64_C(0x0B3714CDE45455EF), UINT64_C(0x1C8D833D394A7797)}}, {{UINT64_C(0x1FBF89614E641C9D), UINT64_C(0x3330DAB0D951DFC8), UINT64_C(0x9D4EBA4D051D96DB), UINT64_C(0x27C6DBF023066924)}, {UINT64_C(0xB950C648DA5D1D79), UINT64_C(0x544D46BA5E9CD783), UINT64_C(0xFA77226FE69BA3EF), UINT64_C(0x0A93D219E4DA8423)}}, {{UINT64_C(0x7C377CC65BDCA76B), UINT64_C(0x7DF505D7DC58D194), UINT64_C(0x18A24C0B13E389E1), UINT64_C(0x5E0782DD6C3972FD)}, {UINT64_C(0x97AD477E6680FCE1), UINT64_C(0x6B07BF223CBAB792), UINT64_C(0xB8DF3C73DC68C9E2), UINT64_C(0x33AB5A4CC04B2749)}}, {{UINT64_C(0xD151C7627E79B5A7), UINT64_C(0xA4356B79C82C7B8A), UINT64_C(0x931DDDE896E0A2E2), UINT64_C(0x40378EB252C54FDC)}, {UINT64_C(0xA6BBD5E340C24003), UINT64_C(0xB4F3246E65C34FEA), UINT64_C(0x780B21ED9C767A23), UINT64_C(0x5F1E95FE52BD7E83)}}, {{UINT64_C(0x4F3453DFCF39F9C4), UINT64_C(0xA3E1CFD1B8CC2CA6), UINT64_C(0xE49BC49C4B898859), UINT64_C(0x4FFD7BD66C0BF055)}, {UINT64_C(0x7DE7604CD139AD1B), UINT64_C(0x6973F5EB2A3CE8FE), UINT64_C(0xAC66FF97F9501ECC), UINT64_C(0x3D96F1E2A97D46CD)}}, {{UINT64_C(0x70D5A0D06106EB96), UINT64_C(0x938E038F398C1FD9), UINT64_C(0xE66B70071F3A1AA9), UINT64_C(0x42BDB264F5BD9308)}, {UINT64_C(0x4B3FD7545AF84957), UINT64_C(0x9E3E17FA4E27DC6B), UINT64_C(0x384FCACD51D8560B), UINT64_C(0x42F00D11F8068C09)}}, {{UINT64_C(0x794C1E6A7D5897D5), UINT64_C(0x4901097FDF72DCA0), UINT64_C(0xDED5B1920B01E4C4), UINT64_C(0x364FF58226DD41E9)}, {UINT64_C(0xA3F92DCC32FCA925), UINT64_C(0x8A1FB329207AA09A), UINT64_C(0xA9274BD3F512AE3A), UINT64_C(0x161C82BCC47B9007)}}, {{UINT64_C(0x482ECE3B7AE1175F), UINT64_C(0x97CAC7E8BDD5DC6C), UINT64_C(0x562253099FDA910D), UINT64_C(0x52A9893B9FC206B9)}, {UINT64_C(0xAD9F2A9205BB5ACA), UINT64_C(0xB9EEFB5BA3B65716), UINT64_C(0xE7BC173B8DB5A8D4), UINT64_C(0x6715EC64399DAE9E)}}, {{UINT64_C(0x780796D15E41AC75), UINT64_C(0x3E165C784FB3A0B4), UINT64_C(0x198599BA237103E9), UINT64_C(0x2C04C3F5FA7ED86B)}, {UINT64_C(0x29547DA8AC9356F0), UINT64_C(0xCB345AB479EADA37), UINT64_C(0x1D15D377A295BF2D), UINT64_C(0x10292C9D2FDC8131)}}, }, { {{UINT64_C(0xADF3B54740E1DC7E), UINT64_C(0x420CE2DD1C345D14), UINT64_C(0xC08E3CBE21DC5C2D), UINT64_C(0x79FDC0006F8FCE80)}, {UINT64_C(0x23EBDF7FCB105CE7), UINT64_C(0x793FC99D7C6794A8), UINT64_C(0x4CA3FB21293E3575), UINT64_C(0x7FB2ACB97BF73CC8)}}, {{UINT64_C(0x67DB6C900FC8FCD4), UINT64_C(0x22A3DF5F7EE3B705), UINT64_C(0xD50EBF8BC7B2EDFF), UINT64_C(0x0C70104599522FB7)}, {UINT64_C(0x1420CF02AD4F9044), UINT64_C(0xD78DBA23E5B59451), UINT64_C(0xDFDC1C7F6AEFD853), UINT64_C(0x560DEE94DEA1DAAB)}}, {{UINT64_C(0x0F2355132167A78B), UINT64_C(0xCF4637029F441927), UINT64_C(0xD0AE2723A3D1505C), UINT64_C(0x3149D858CD9FBFF4)}, {UINT64_C(0x2A73913AF79240FA), UINT64_C(0xC904A575252A958B), UINT64_C(0x10D1819078473D97), UINT64_C(0x42CE7A38203BC8C4)}}, {{UINT64_C(0x1D2AD4F2FA59BB8B), UINT64_C(0x8234964C79F137DD), UINT64_C(0x00B63A305D02679E), UINT64_C(0x506C45BE5DD7543D)}, {UINT64_C(0x4378F900776BF80C), UINT64_C(0x179558B2B312F2BB), UINT64_C(0x5B15368CEA37C183), UINT64_C(0x7593B19FB198E42D)}}, {{UINT64_C(0xED723535DEFA1F48), UINT64_C(0x0DAFC48B87F96EE5), UINT64_C(0x0AEFA3BA91B1B52C), UINT64_C(0x56BA1B33A1ADBEA4)}, {UINT64_C(0x8A0B617030A6C905), UINT64_C(0xC5BA3518B272D12E), UINT64_C(0x782100CF4B6643A9), UINT64_C(0x12DEE80385C5BD2B)}}, {{UINT64_C(0xDD07D2D578FCADD6), UINT64_C(0x8CB8E8A83B25C523), UINT64_C(0x25063508530919CF), UINT64_C(0x45D3DD541E24F7A1)}, {UINT64_C(0x296AE89349DDAF96), UINT64_C(0x7EF3CDE0ACE559F5), UINT64_C(0x9CDF22E40D36F87B), UINT64_C(0x196847654AC9A845)}}, {{UINT64_C(0x3955B5ABC597B7AE), UINT64_C(0x59F3BA053AB49731), UINT64_C(0xBCA5B117F525C6C8), UINT64_C(0x4969C13432050B8D)}, {UINT64_C(0x353183D9970E8E49), UINT64_C(0x3D005213E95300CF), UINT64_C(0x595F9C8E09022378), UINT64_C(0x70FA8B471A445C28)}}, {{UINT64_C(0xECC88EE3BADB79EA), UINT64_C(0x5BDAF68CFBD8464E), UINT64_C(0x24AF6A4CB4280334), UINT64_C(0x17A5DE8B398E5BBE)}, {UINT64_C(0x300B6DEB92999E18), UINT64_C(0xA076691867DEFC2F), UINT64_C(0x4E904450B19F87FF), UINT64_C(0x3010AD94C2871056)}}, {{UINT64_C(0x72E747A1461EFCC3), UINT64_C(0x329EDF18562F923E), UINT64_C(0x65E021D4D081A4E7), UINT64_C(0x4B2DBFFFB727B6F4)}, {UINT64_C(0x5A597A809C8505AC), UINT64_C(0x13486480562B82D2), UINT64_C(0x477FD480CC8234C3), UINT64_C(0x6045ABA404800C00)}}, {{UINT64_C(0x3E0874399C541035), UINT64_C(0x389AA76C6D9D8B6A), UINT64_C(0x68FE5E8336A21299), UINT64_C(0x67AC313D402A32CF)}, {UINT64_C(0x996131D225501A53), UINT64_C(0x5C1B89DEA77A85F4), UINT64_C(0xA9822C84ED6702AD), UINT64_C(0x50F014A456609EA0)}}, {{UINT64_C(0xF0F8B4E6E5A8E91E), UINT64_C(0x734CFF081A2FFEFD), UINT64_C(0x9724EE0B27BCB163), UINT64_C(0x6AF3808B30B8EF68)}, {UINT64_C(0xE5B3829F126E88FC), UINT64_C(0x0F441EE34EE5FD4B), UINT64_C(0x534D2F8CBFEC4D34), UINT64_C(0x3E1F16DE076E6737)}}, {{UINT64_C(0x4DB53E8A4ED36E6A), UINT64_C(0x49A9EFE94352B22F), UINT64_C(0x7829605C39CF005C), UINT64_C(0x190A8E16D85DB959)}, {UINT64_C(0x699810699B073AB3), UINT64_C(0x8C264B878C141AA1), UINT64_C(0x7F614282603ED47C), UINT64_C(0x21FD2E7A9F9B0940)}}, {{UINT64_C(0xC5CA10A01EC6BB3D), UINT64_C(0x9403E3F527A9B02B), UINT64_C(0x9D3D186DFB43F790), UINT64_C(0x7855276E67DC0C00)}, {UINT64_C(0x053DBB2AFFFFB14C), UINT64_C(0x2674666343ACC0A6), UINT64_C(0x1EE7A9467FFC1C68), UINT64_C(0x14BFAF0156DBB0DE)}}, {{UINT64_C(0x11C89A47849EA674), UINT64_C(0x194FAAF094A540E6), UINT64_C(0xE61163F86050E4C0), UINT64_C(0x6939A166B1A07B76)}, {UINT64_C(0x8166CA8E2EF18325), UINT64_C(0x96112E6530C042E2), UINT64_C(0xA805CAE05A394C25), UINT64_C(0x45A0DE010392E6BB)}}, {{UINT64_C(0xB89CEE96B4FAAA56), UINT64_C(0x7A7DC8AE529736DE), UINT64_C(0x9158AA49A727FCF7), UINT64_C(0x621B8B311896B9DA)}, {UINT64_C(0x875930D603BEC74B), UINT64_C(0x1056DB45A7A50309), UINT64_C(0xEE713E04B5657B0E), UINT64_C(0x2D68155E6FCAD967)}}, {{UINT64_C(0x3BB1E9E365B1E2B3), UINT64_C(0x2A61567088425BAB), UINT64_C(0x22F4F32F62F1BA4A), UINT64_C(0x7B5EC25088A59642)}, {UINT64_C(0x7B5BA12A42D30049), UINT64_C(0x4E6AC05586995BE6), UINT64_C(0x04431A0445EC87AC), UINT64_C(0x28974ED7ED94823D)}}, }, { {{UINT64_C(0x5925805712BB5555), UINT64_C(0x03141CD8BB7608EE), UINT64_C(0x84EBDC49EF77714B), UINT64_C(0x6A45FC3AB5DC1A5F)}, {UINT64_C(0x1F6DC2052FBEEC76), UINT64_C(0x17EB733BA920C554), UINT64_C(0xDB022C217A28ACDF), UINT64_C(0x6AF16156A9B62BF1)}}, {{UINT64_C(0x9379D6A880B472CC), UINT64_C(0x6CB08CB07BD92F27), UINT64_C(0x19B3C353147E6E12), UINT64_C(0x3C26CB2F26827839)}, {UINT64_C(0x98AAC9A70CC571E4), UINT64_C(0x075D05F2C3C8FC04), UINT64_C(0x718B55A0D79621AC), UINT64_C(0x149FEECF5B94B41B)}}, {{UINT64_C(0x6A150A64783F9C81), UINT64_C(0x5950C2DF0FB18827), UINT64_C(0xF5D75504F15E3A89), UINT64_C(0x5F92F2F7FCB4406B)}, {UINT64_C(0x665F31E76123E858), UINT64_C(0x4E568EA9A95184A3), UINT64_C(0x851EEADC505FF0AD), UINT64_C(0x62AD5BA6542C3EF8)}}, {{UINT64_C(0x1103859DC55C23FD), UINT64_C(0x06AB0BD6695E4E9B), UINT64_C(0x2CD00D76DD734990), UINT64_C(0x5D59C693B06460E4)}, {UINT64_C(0x3BA8F2F01F9C76DA), UINT64_C(0x08E4A7EC960F5C0E), UINT64_C(0x79C82AD9E4AAB060), UINT64_C(0x093D322C0DF95C43)}}, {{UINT64_C(0x88AF12580C627547), UINT64_C(0x81E5F197889A5E12), UINT64_C(0x99E0E1917CBD84FD), UINT64_C(0x3024BCE8DB0B9711)}, {UINT64_C(0x04075C80DB93B1A2), UINT64_C(0x12F30AF8628B0E63), UINT64_C(0xA3514F26EB25A4ED), UINT64_C(0x3D42E4897BCD0873)}}, {{UINT64_C(0x0F1C16C6754B236F), UINT64_C(0x717CE487594F5D3D), UINT64_C(0x7679C7DAAFAD77B1), UINT64_C(0x51AFD0146F3E724C)}, {UINT64_C(0xAFC9745C3AF6938F), UINT64_C(0xCA12BFA9C4E61CB4), UINT64_C(0x943B56969425CCA7), UINT64_C(0x5BD3E65EB6E48A69)}}, {{UINT64_C(0x2D23CF78DEAE74B1), UINT64_C(0xA686767E043BF2F1), UINT64_C(0x3AFED34DE464ADE9), UINT64_C(0x1E4620735A6AE80B)}, {UINT64_C(0xA86AA408737F7B66), UINT64_C(0xD67A0B49EAB3B6CE), UINT64_C(0x6FF3CA4F275355F3), UINT64_C(0x6F385576688F99AB)}}, {{UINT64_C(0xC9B63343FD2F9A72), UINT64_C(0xBD0A126DAC267E8A), UINT64_C(0x818BD5D85D2839B5), UINT64_C(0x1BBAB4CE0BF5AFCE)}, {UINT64_C(0x2827B24A4D8B67DE), UINT64_C(0x841F6BD3C34E6642), UINT64_C(0xE9F5C1C25E4A34D4), UINT64_C(0x4E98795CFDA4177C)}}, {{UINT64_C(0x3C9FF1C20763AB04), UINT64_C(0x4FC1BE619832FCFD), UINT64_C(0x5FA50C388BD0363A), UINT64_C(0x14C9BB2FF26206BE)}, {UINT64_C(0xAD1A96EB1D31880C), UINT64_C(0xF0A37BC465DFCF8A), UINT64_C(0x389627293D048FE4), UINT64_C(0x017125C06480B254)}}, {{UINT64_C(0x01E819F598D4BAC6), UINT64_C(0xD3686E0436B99D30), UINT64_C(0x0C2876FB200A4A9D), UINT64_C(0x45D50C2FE65782D5)}, {UINT64_C(0xB8316ECE865B7A21), UINT64_C(0xA3ADB90FCC875503), UINT64_C(0xD72E864E98468FB4), UINT64_C(0x13BB23FDDED21F40)}}, {{UINT64_C(0x653C3C15C6B96368), UINT64_C(0x9A42FC2C2B9C381F), UINT64_C(0xF06B41B969534D92), UINT64_C(0x46F7292E3FB7BED2)}, {UINT64_C(0x14A2C42097D1875E), UINT64_C(0x45DFA824D3B2DF55), UINT64_C(0x59CB7E593F2BA72D), UINT64_C(0x2EEC65C9D7D96C98)}}, {{UINT64_C(0x907CD4C849650405), UINT64_C(0xFC29320A37E05E06), UINT64_C(0x99B4C1DF09E29619), UINT64_C(0x74E69BF834DE993F)}, {UINT64_C(0x62C0F296509D9797), UINT64_C(0x2E6BD4E65F1EF554), UINT64_C(0xE30506410D0B71B8), UINT64_C(0x29DA0C9D235DDE6C)}}, {{UINT64_C(0x3CFBCA4B689398C1), UINT64_C(0x11E5880440C9DF13), UINT64_C(0x3923A39BBCDF2489), UINT64_C(0x3805CCC7387C8089)}, {UINT64_C(0xC1B4EB4870319AFA), UINT64_C(0x0A6A5FA4CA089604), UINT64_C(0x16ABDE5473139A20), UINT64_C(0x7C0055E094BD61B5)}}, {{UINT64_C(0xA5AB5CEFCB05A02A), UINT64_C(0xC0B4E1B40BFE903B), UINT64_C(0xBA528329EAC9E7E8), UINT64_C(0x0266C5A70A2456B6)}, {UINT64_C(0x507E9A415E216EEC), UINT64_C(0xFCC06B0AD0F1E440), UINT64_C(0x6FAEFC8EE5C7B26F), UINT64_C(0x4744CF2EB02F85C1)}}, {{UINT64_C(0xF5E2B8121C291BFC), UINT64_C(0xC18E791D2CDCBF7A), UINT64_C(0xC386B96246554345), UINT64_C(0x373E00FB067518CD)}, {UINT64_C(0xC9BA9DF9E950051B), UINT64_C(0x182CB132DD6133EE), UINT64_C(0xD6D7F81570A3C71C), UINT64_C(0x44C5AEBC7FAFE307)}}, {{UINT64_C(0x6C7CE359A9D16080), UINT64_C(0xA874386D1E8B643E), UINT64_C(0xA064812907F48E10), UINT64_C(0x2A40220193E4D619)}, {UINT64_C(0x8B429545BD383EA6), UINT64_C(0xC096D593F2880536), UINT64_C(0xB4057D6C20E299B9), UINT64_C(0x303962CE38A825FA)}}, }, { {{UINT64_C(0x9E426EBF1E1D70D0), UINT64_C(0x6AEA4DDCB83529CA), UINT64_C(0xF3ECD4627CC9A07C), UINT64_C(0x7F255C86C364772E)}, {UINT64_C(0x0DF212CF5613BEF0), UINT64_C(0x771F02A91309F9D0), UINT64_C(0xE97BEE39805FE1F5), UINT64_C(0x54A43430D93522B9)}}, {{UINT64_C(0xC01553BDCDE4EBBE), UINT64_C(0xB1928DDCA02E56C1), UINT64_C(0xB91004BA94A1A417), UINT64_C(0x44F74BE656CB9C88)}, {UINT64_C(0x6A7E3E9B921B62E5), UINT64_C(0xF2BF553B5FBF13C4), UINT64_C(0x51CB776D86D55641), UINT64_C(0x71826BC56425A3AD)}}, {{UINT64_C(0xD6D49F90C6D70EF9), UINT64_C(0x5BD0DA6929EBA0DD), UINT64_C(0x0BBA7571803233EF), UINT64_C(0x0EB0959E679A17D5)}, {UINT64_C(0x97818DC2B8A3D6EC), UINT64_C(0x09497FB0C687EAA2), UINT64_C(0x2E2707EAA65FA4C0), UINT64_C(0x6A74D4C67542F472)}}, {{UINT64_C(0x0D1930061EE0BC40), UINT64_C(0x7D7BEE196DC98BA8), UINT64_C(0x1AD37C98447C38D2), UINT64_C(0x3E163AE1B6B4550A)}, {UINT64_C(0x734E36C95BC93243), UINT64_C(0x54E217FD986C35A8), UINT64_C(0xF0576FF09E3285E3), UINT64_C(0x65C950C8186EE7EB)}}, {{UINT64_C(0x1AB12C042012D277), UINT64_C(0x97CAB84B83872384), UINT64_C(0x479C9CF51C66FCFD), UINT64_C(0x70ABC8B4F276933E)}, {UINT64_C(0xE6B15BF7BA4D14F0), UINT64_C(0xF4060ED322E2F5D5), UINT64_C(0xA53F3CA0CDC5462C), UINT64_C(0x593219D4C6FC3854)}}, {{UINT64_C(0x9DE6993472B6F8A1), UINT64_C(0xECABAEEE19E16B3F), UINT64_C(0x0B537CA5EDA68D7B), UINT64_C(0x744628BDD3CE55B7)}, {UINT64_C(0x3A5B2D8E98A95308), UINT64_C(0x74D0CEF16758C6C8), UINT64_C(0x7538198ADA204834), UINT64_C(0x1E166AAAA644E880)}}, {{UINT64_C(0xE76EE7124674ACF0), UINT64_C(0x40A6F6DEDF9DFB4C), UINT64_C(0x91B0034C40C65721), UINT64_C(0x54FE8B8BF8E0F5E5)}, {UINT64_C(0x6322CA0F75891895), UINT64_C(0x3D1C821E7D20C522), UINT64_C(0x1691407F08043786), UINT64_C(0x02C3083814847D58)}}, {{UINT64_C(0x57DEF069B8F0C372), UINT64_C(0x50375DC30D5ABF2C), UINT64_C(0x2290381475EDFBC9), UINT64_C(0x56E39BD7AE37695A)}, {UINT64_C(0xAB74B187463D13F2), UINT64_C(0xC50CB8A23CDE8886), UINT64_C(0x1EFBD1CFB35F7D59), UINT64_C(0x1296C4821057AE42)}}, {{UINT64_C(0xA350B57BC347E3FB), UINT64_C(0x4312EB75ADF65129), UINT64_C(0xD9A7E2F47F9A6C9E), UINT64_C(0x5493AF7B9BFDCB4D)}, {UINT64_C(0x90A443DD9AC0E58E), UINT64_C(0x9777D58AC6F3BEEF), UINT64_C(0x12F00913965EC900), UINT64_C(0x2F6C5B59480126DA)}}, {{UINT64_C(0x70B907FCBAD8C051), UINT64_C(0x54492D6AD3B4F608), UINT64_C(0xE3B46F1B2E096D9F), UINT64_C(0x522AD6D1747D472A)}, {UINT64_C(0x8FCD161602DAB5E5), UINT64_C(0xD3BA292F357B1C85), UINT64_C(0xA6DB50CD2704F072), UINT64_C(0x63488DDF8341AA73)}}, {{UINT64_C(0x99100A3D0FE2AAAB), UINT64_C(0x7D30C4E98EA44560), UINT64_C(0xBA458C672B4C776D), UINT64_C(0x2EC11420BBA4D85E)}, {UINT64_C(0xB1D9FBA27A7AEC55), UINT64_C(0x432AB2AA7665AAE5), UINT64_C(0xD2755948F3BC7043), UINT64_C(0x2FC331BB82510EAD)}}, {{UINT64_C(0xAAF11CF946253DB1), UINT64_C(0xEB025AEDB0DF307C), UINT64_C(0xCB7C22A57A82ADEE), UINT64_C(0x7316C3909C5FA97B)}, {UINT64_C(0x91620554F518067C), UINT64_C(0x20A438AE3C96A804), UINT64_C(0xC4F9DCDF5B0C090C), UINT64_C(0x77C512DB6E5C1B45)}}, {{UINT64_C(0xC981E682FDD09EDE), UINT64_C(0xC3EB36B7BBB3F57D), UINT64_C(0xA07369C6D12BF450), UINT64_C(0x16627566CE017845)}, {UINT64_C(0xFD8DEC909494AF62), UINT64_C(0x7E79309653FD4B22), UINT64_C(0x21B8E665C8AAEAE9), UINT64_C(0x526FA31818BC33C0)}}, {{UINT64_C(0xF55D32BF853A2647), UINT64_C(0xD873ED6CCDAEE8FE), UINT64_C(0xA3579E2B80E52622), UINT64_C(0x03871ABA33D16FE8)}, {UINT64_C(0x714804AC69925EDF), UINT64_C(0x0340755FF2B964FF), UINT64_C(0x93830F98DA0D1A07), UINT64_C(0x2CAB201EF7FB1E16)}}, {{UINT64_C(0x26DE3A3A22A8AF77), UINT64_C(0x0E77C3DCB45BA630), UINT64_C(0x34F00017FC86E7D1), UINT64_C(0x796ABE2F1B62F7F2)}, {UINT64_C(0x9FA092771663B5B1), UINT64_C(0xFFFDC93F9B2FB9AC), UINT64_C(0x03AECD1A6B340D75), UINT64_C(0x5D55A168314DCCEA)}}, {{UINT64_C(0x678AEF02747DBD0C), UINT64_C(0xF0D47C1CD47A6C09), UINT64_C(0x6C2AC72F3FDD1681), UINT64_C(0x750E70646D789D3A)}, {UINT64_C(0x3F970AFEAEBEDD58), UINT64_C(0x6BBA7956E3540951), UINT64_C(0x7CC461B23E71F6AF), UINT64_C(0x7E51E548C45FED28)}}, }, { {{UINT64_C(0x4A598EFB2CE2CBE5), UINT64_C(0x774CDE0A89C9A51B), UINT64_C(0x2D003680CA907F34), UINT64_C(0x62C32DCA9D3C7D97)}, {UINT64_C(0x37B3A90FB3054D17), UINT64_C(0x1423574C67E58A5A), UINT64_C(0xF1D3BB1A4859FA49), UINT64_C(0x25F0AF1C3F5AFA63)}}, {{UINT64_C(0xD3BF7F621FE53AC9), UINT64_C(0xCE2B67C3CBCE6164), UINT64_C(0xE081C57695341024), UINT64_C(0x32B0EF5D9A70ECAB)}, {UINT64_C(0x3EC93C853BE1E5CE), UINT64_C(0xE25F54EDA0CB7DCD), UINT64_C(0x9D6B57D7517965B2), UINT64_C(0x159F7AB0129B0B27)}}, {{UINT64_C(0xAEF88E95EEFB67F3), UINT64_C(0xEAEB2889E0316AB2), UINT64_C(0x1491881FC2CB6753), UINT64_C(0x67DCDF28702789D0)}, {UINT64_C(0x8282E0A711C0F3FD), UINT64_C(0x9CDCFDB801BA273D), UINT64_C(0x6BF1E04326279B95), UINT64_C(0x0D42AAC685852777)}}, {{UINT64_C(0xC4CE393E608981AB), UINT64_C(0x210E20F852141CB0), UINT64_C(0x22C2586D6B9234B5), UINT64_C(0x52F1B3664366750E)}, {UINT64_C(0xE38ED0D9760AFA55), UINT64_C(0xA43FF25AB5D61A08), UINT64_C(0x0BE3A406B5E21691), UINT64_C(0x37B47A28FD4E17B0)}}, {{UINT64_C(0xC46DC6D44C2C65C2), UINT64_C(0x2A0B452CC54BE778), UINT64_C(0xAF113693F727070E), UINT64_C(0x7B229CD8C68D13A3)}, {UINT64_C(0x0F63097E02D43E4B), UINT64_C(0x912F8D3355627FD8), UINT64_C(0x1EBF39612A0DD9AE), UINT64_C(0x7FD33FDEF0294B2D)}}, {{UINT64_C(0xC72411F5D0CC6D9F), UINT64_C(0x66E04C909B92FF84), UINT64_C(0x0678B4F8E1C033B6), UINT64_C(0x5A99F270E49A972A)}, {UINT64_C(0x3743BCD8D265A4DF), UINT64_C(0x7BD6DDF4CE0404C3), UINT64_C(0x4043767F131750A5), UINT64_C(0x4A7D89839DD65652)}}, {{UINT64_C(0x535BC78412B7822D), UINT64_C(0xDD32DD67F1F9B703), UINT64_C(0xFFDBF0EB2EAA2A1C), UINT64_C(0x497C09FAF64E9822)}, {UINT64_C(0x18E717E932EE2A36), UINT64_C(0xF01CC4F5583949B1), UINT64_C(0x222EE9740A168755), UINT64_C(0x0CD14CD500C81EC9)}}, {{UINT64_C(0x7AE0BD1114C79CDC), UINT64_C(0x67323D1A6DC08C80), UINT64_C(0x2FD1ABC70EF32432), UINT64_C(0x65923246B0E08EBF)}, {UINT64_C(0x0A9FD3D7C0754ECE), UINT64_C(0xE76B26245F8644FA), UINT64_C(0xF1F0BEBA0F8BB385), UINT64_C(0x73251F03FC96778F)}}, {{UINT64_C(0x197150DED08795A9), UINT64_C(0xAD6935AEFBB8B9CF), UINT64_C(0x721186823B2B9EFB), UINT64_C(0x265B288DBC2B7240)}, {UINT64_C(0x7BF2EB362F78C431), UINT64_C(0xF03B83CAF2A6E469), UINT64_C(0x211592564740E74B), UINT64_C(0x35BE57350490F0B9)}}, {{UINT64_C(0x207F33B2806C1CAE), UINT64_C(0x04249127DAC5ADE0), UINT64_C(0xC4CCF33E1CC59DE7), UINT64_C(0x2A17B520272BD6D7)}, {UINT64_C(0xC36F6B3CB48F6585), UINT64_C(0xD32A73790861ACF5), UINT64_C(0x28A12ECB2C3291C6), UINT64_C(0x0E945F95F02A88D0)}}, {{UINT64_C(0x4836EC01D3B3117B), UINT64_C(0x4C197454A4C2FD72), UINT64_C(0x96FCED51F9897721), UINT64_C(0x142028585828C97D)}, {UINT64_C(0xCA7ACED8774755B9), UINT64_C(0x460FF58297252559), UINT64_C(0xAAE457765796DD63), UINT64_C(0x711C916E346DDBF5)}}, {{UINT64_C(0xA60E2E7B5E203692), UINT64_C(0xCFC72FEAF3BF2A45), UINT64_C(0x78729D2872AC0436), UINT64_C(0x3E16DD8B29ABF199)}, {UINT64_C(0xB1705AA615A41F3D), UINT64_C(0x8C7512FE308AB87C), UINT64_C(0xA27411C503995381), UINT64_C(0x3142403CA780CED3)}}, {{UINT64_C(0xE4473E94F1718C7F), UINT64_C(0x601BC194A3CAB6CB), UINT64_C(0x8F3540F8581D491D), UINT64_C(0x456A9B7C43C15321)}, {UINT64_C(0x6F335A2D593BB7ED), UINT64_C(0xB6D5A23F7D791514), UINT64_C(0x976D2F8379235EAD), UINT64_C(0x7D02EA0F44775C97)}}, {{UINT64_C(0x322DBC8CE5EC268E), UINT64_C(0x1F2F6050BE14BF5C), UINT64_C(0x58AC6397EACF6A50), UINT64_C(0x4167CBD5A5401081)}, {UINT64_C(0x8E6F06A1EE5B4BF5), UINT64_C(0x1A6073D56B2F790F), UINT64_C(0x1C09FF3D4F901250), UINT64_C(0x286AF8D7E6B40DF4)}}, {{UINT64_C(0xF74C805706BD53FF), UINT64_C(0x4FCE7281E5788F0D), UINT64_C(0xD6A867AC3D015E6B), UINT64_C(0x04AEC38D6E185A42)}, {UINT64_C(0x8DC12B74083D65CB), UINT64_C(0xDB1AA8AC82966668), UINT64_C(0xBD2233BF28AF1B90), UINT64_C(0x544569A7172CCA11)}}, {{UINT64_C(0x9C56FCA8149BD0BD), UINT64_C(0x2B4EC788A05F8E44), UINT64_C(0x1569CF6D92478943), UINT64_C(0x67E373E857380986)}, {UINT64_C(0xF5CC8232ED3C14DB), UINT64_C(0xE3D184B0F52EAF83), UINT64_C(0x195D41370BC64038), UINT64_C(0x77994388778C3C20)}}, }, { {{UINT64_C(0x3DAA0C47A0CC77AA), UINT64_C(0xB9794E747C69CDF0), UINT64_C(0x3610E50B4549F5D4), UINT64_C(0x262CA564B8A112CA)}, {UINT64_C(0xD5EC795E554E8714), UINT64_C(0x73EE5502717EBEF3), UINT64_C(0xE36E8A1A1947A478), UINT64_C(0x3FBE43A342ADC59D)}}, {{UINT64_C(0x4DE78909021FBCBE), UINT64_C(0xA76A5EE20BBBB324), UINT64_C(0x5B86519ACD67810B), UINT64_C(0x4CCA44A23710A4EE)}, {UINT64_C(0xD79A121DCD1F8BEC), UINT64_C(0x2E12A772DC9CA10E), UINT64_C(0xE301CA3B8C9E9640), UINT64_C(0x4B25FE18B731A957)}}, {{UINT64_C(0xA05DA2CDF4AD7264), UINT64_C(0x31336489076977A5), UINT64_C(0xC1D269BEF2E576A8), UINT64_C(0x1E877ADC7532203F)}, {UINT64_C(0x9C9961BC8B92972C), UINT64_C(0x7BA072726A14D810), UINT64_C(0xE51095A906913136), UINT64_C(0x4674896930E0EA8C)}}, {{UINT64_C(0xDB8EF3463C73BA49), UINT64_C(0xBF2213123720570D), UINT64_C(0xC07B3639605DB0D6), UINT64_C(0x44FCEFA6300336A3)}, {UINT64_C(0x121FAC5C2D234592), UINT64_C(0x901DEE8844E367D7), UINT64_C(0x5B5F3DD61CAA6A3A), UINT64_C(0x72E474ECAC2F6E64)}}, {{UINT64_C(0x15690BEEF55BE61C), UINT64_C(0xE42B945EDF2678A2), UINT64_C(0x60A5C8AA3B7B1776), UINT64_C(0x16103FBCEB9AB938)}, {UINT64_C(0x79722A1E87AD06AB), UINT64_C(0xD7B509F6D6B632A2), UINT64_C(0x8C4E8B2E3B69EB40), UINT64_C(0x6A50958314DB2225)}}, {{UINT64_C(0x169F35D893B78659), UINT64_C(0x989B04D28EFF83AD), UINT64_C(0x72CF7338A6AE4806), UINT64_C(0x6E156C84F4AAA524)}, {UINT64_C(0x33A608EDA1ED5CB2), UINT64_C(0xCE274A64C3D28716), UINT64_C(0xFCF1B17045F0435F), UINT64_C(0x101D1BDB1653D6F6)}}, {{UINT64_C(0x45BC931D2E5A67D9), UINT64_C(0xAFF02C11697DA479), UINT64_C(0x7C7972A32EA3E6E1), UINT64_C(0x71A17D505E97BB90)}, {UINT64_C(0x962E84F219AD4C5E), UINT64_C(0xBB8C9FC7692020BE), UINT64_C(0xA78FDF2CE7B36665), UINT64_C(0x7AC84ED426F92E33)}}, {{UINT64_C(0xBD85A9EEC3C9E5C1), UINT64_C(0x72030BAA6ED2FD6A), UINT64_C(0xB67185AB39CFFB89), UINT64_C(0x3E2E51A4833BF770)}, {UINT64_C(0x248FA3485E27D5BB), UINT64_C(0xF8D435962E6D3DCF), UINT64_C(0x07F5B93C0C8DAF81), UINT64_C(0x6A7FFA1DAD2FC97D)}}, {{UINT64_C(0xFF308FAEFAEA33F1), UINT64_C(0x5F29DFFB3CC4C7CF), UINT64_C(0xB9AD4527ECC5A2B9), UINT64_C(0x08B95AF6048D4B38)}, {UINT64_C(0x56BC43A8DEC152BB), UINT64_C(0xD1147B9A3849D869), UINT64_C(0xFE5020C2D02AF3B7), UINT64_C(0x54C02B44B918496E)}}, {{UINT64_C(0x1611ECFD0B27468D), UINT64_C(0x4AFCE3290513A562), UINT64_C(0x982782FD2FE74EED), UINT64_C(0x66AC58BF17ADD2EA)}, {UINT64_C(0x8277BC2D613581D4), UINT64_C(0x0BF5BF0C988D1498), UINT64_C(0x8A37134D55C984CB), UINT64_C(0x409A79CC92211390)}}, {{UINT64_C(0x8C0081AE816F0462), UINT64_C(0xB431DC245A68BFC2), UINT64_C(0x25C769C65F78C8A1), UINT64_C(0x3BE0458DB382AF14)}, {UINT64_C(0x10583083A171ADF2), UINT64_C(0xBA5D532537F7C39F), UINT64_C(0x76B03B945EAC7585), UINT64_C(0x76159AAC9C2DF2C6)}}, {{UINT64_C(0x886C73BA918E0332), UINT64_C(0xF6FEC62AD24B5B52), UINT64_C(0xB98759B436B4D23A), UINT64_C(0x5EC5B3FE5480ACF3)}, {UINT64_C(0x30FF297D6DD175BF), UINT64_C(0x501DE74475F2B9C3), UINT64_C(0xDEBE47CAF19230C5), UINT64_C(0x7401F20932BBBB62)}}, {{UINT64_C(0x80712E4722496D1E), UINT64_C(0x36A0EF37DA80AF1D), UINT64_C(0xAF6CA51C940E5E9F), UINT64_C(0x74E17B6F722D9D22)}, {UINT64_C(0xCB70B878B8B3AE1B), UINT64_C(0xBF8B9A0B07DF974C), UINT64_C(0x89FCC996F68A4BF4), UINT64_C(0x46F581E86EB0FB2E)}}, {{UINT64_C(0xBCE0BD6C67137153), UINT64_C(0xAD3E92B375F64B78), UINT64_C(0x6454CD1DFD047DD9), UINT64_C(0x181C93EB612AE472)}, {UINT64_C(0xE575307E23A529C3), UINT64_C(0xB9C43A0B59C09EB5), UINT64_C(0xFD233A68AA805840), UINT64_C(0x067C442EA122FFB9)}}, {{UINT64_C(0xE1F3F76F2CD6762E), UINT64_C(0xFB68650F9764B53A), UINT64_C(0x4E90AC72F1224580), UINT64_C(0x2BF68F01127EED48)}, {UINT64_C(0xE6B4B40994D389A0), UINT64_C(0xD7BC8108D44593D6), UINT64_C(0xDCF0399148A86677), UINT64_C(0x4A52D961CEBCE3C7)}}, {{UINT64_C(0x55734AB5BAA873EA), UINT64_C(0x506DE4CF7871F323), UINT64_C(0x7C3F8B00578612C0), UINT64_C(0x730D4B8A9243C9E8)}, {UINT64_C(0xA3290689D385F6BD), UINT64_C(0xAF688C6A913596F5), UINT64_C(0x0A2D89B5B646BE23), UINT64_C(0x31891165F63A6029)}}, }, { {{UINT64_C(0x331F9E57579583C0), UINT64_C(0xE92ABADF69C65DA2), UINT64_C(0xC796FBECA5B8B057), UINT64_C(0x52E6F9C9312D1E89)}, {UINT64_C(0x0318B1DFDA68DFD3), UINT64_C(0x8BAA2EB3A1CAC4F1), UINT64_C(0x0CDC89A2BEE7D6E1), UINT64_C(0x6102DE7A22AB50F4)}}, {{UINT64_C(0x02003D83E20C707A), UINT64_C(0xD819249C28289D89), UINT64_C(0x3FBC00B172053FF8), UINT64_C(0x0249C43CDF40D261)}, {UINT64_C(0x8794EEACD8F064AF), UINT64_C(0xE2359E70DC9F0631), UINT64_C(0xD1603647ADA310D0), UINT64_C(0x6A9E3785EDC888EC)}}, {{UINT64_C(0xF332B384EC41908E), UINT64_C(0xF3274472BDE4760B), UINT64_C(0x96185E89140D0EF4), UINT64_C(0x5646208990E698E7)}, {UINT64_C(0x841A31C5F2E64396), UINT64_C(0x8F494CA503C4118F), UINT64_C(0x0C98A4C31A188305), UINT64_C(0x1C4B5F6298AAB1AB)}}, {{UINT64_C(0xDDEEEBF85D0D8381), UINT64_C(0xD1616F4889044363), UINT64_C(0x2EE41D4721616A13), UINT64_C(0x2DCE61104BC769FC)}, {UINT64_C(0xE3707A0116C1C468), UINT64_C(0x3B674187969AF612), UINT64_C(0xB64BD4D71E0671CC), UINT64_C(0x7EF01DBAB98C297C)}}, {{UINT64_C(0x91DCBF99815381AC), UINT64_C(0x8D711F5838B67B97), UINT64_C(0x9C11F5959C6E322C), UINT64_C(0x4A688D0BE31A782F)}, {UINT64_C(0x1297D9F3DCE93F5B), UINT64_C(0xA79561947C1DC62A), UINT64_C(0x340F217A5F718F63), UINT64_C(0x71F84529FCC0EF6A)}}, {{UINT64_C(0x0D968E503DD00963), UINT64_C(0x5E696D79D7FF66C3), UINT64_C(0xAA52D60D499A9BE2), UINT64_C(0x72482C45CDC289DE)}, {UINT64_C(0xC84968F57FFAAD3A), UINT64_C(0xEE91304CF7CD5BED), UINT64_C(0x684936760A7CC7C0), UINT64_C(0x3411AFA780023968)}}, {{UINT64_C(0xA0AEBC706E3294C0), UINT64_C(0x93263942DC385E50), UINT64_C(0x7B90C0028467FB06), UINT64_C(0x29477CA438CFD0FF)}, {UINT64_C(0xADC04D8192A748D5), UINT64_C(0xAE4F309D76CF3AE5), UINT64_C(0xBDA34BF04BB2C2FF), UINT64_C(0x65138897368536E4)}}, {{UINT64_C(0x9CB8F7D66FE6D4D6), UINT64_C(0x6C2FFBF5AF246792), UINT64_C(0xD5A4F34981524707), UINT64_C(0x3AFE45CE36766D5E)}, {UINT64_C(0x41991B49513BA267), UINT64_C(0x06EF1EEA6C18AA5E), UINT64_C(0x0A51763588EA2099), UINT64_C(0x32D2B5E2D245B88B)}}, {{UINT64_C(0xAE38CDD53F517C5B), UINT64_C(0x1C94FDC5D878FEEE), UINT64_C(0xABF7A41DBEFCE107), UINT64_C(0x33BF3FE9D408DFE8)}, {UINT64_C(0x4F2E6FF0947CB8C4), UINT64_C(0x3A8E86ABF998C5A0), UINT64_C(0x3ADC6ABAE359209F), UINT64_C(0x37A2DE1BD9A50051)}}, {{UINT64_C(0x424F4E34E718F6B9), UINT64_C(0x50B1A03B75C58EB6), UINT64_C(0xB949531491390E27), UINT64_C(0x4AE0CC3A880E78D8)}, {UINT64_C(0x10331AFAF1E4413C), UINT64_C(0xE7A3E554DDFCD2F0), UINT64_C(0x44F6DE850EBF484B), UINT64_C(0x6A762A7E895D0F54)}}, {{UINT64_C(0x8E606B0A8D0558F6), UINT64_C(0xAADA76045C4DD930), UINT64_C(0x5B2FC7ADEF4ACAD0), UINT64_C(0x0D969AD087F5B6E2)}, {UINT64_C(0xF9A182B25974E67B), UINT64_C(0xCD8232E723B4009A), UINT64_C(0x3D8F5DDD285BCC3F), UINT64_C(0x114AC56FEEE1B9BF)}}, {{UINT64_C(0xD3EA1B56AA45085A), UINT64_C(0x5DE7BB70D314CEDF), UINT64_C(0x8A74384C7BCCDCFD), UINT64_C(0x64B80F8A8E0E0367)}, {UINT64_C(0xA9EA432B48884ED1), UINT64_C(0x51957A8F8C0BA810), UINT64_C(0x9E88340039E810E3), UINT64_C(0x0A73ED5A28B2051C)}}, {{UINT64_C(0x655212A313C30826), UINT64_C(0xAE53668EB73E8660), UINT64_C(0x6C33B649FF108CCE), UINT64_C(0x39E0B11821D49681)}, {UINT64_C(0xFE4D215270525312), UINT64_C(0x2EDCE32BFFD18749), UINT64_C(0xFED19B1CB04D3FB8), UINT64_C(0x4DFE216B2B225A9D)}}, {{UINT64_C(0x583E8A6C4C70F8A8), UINT64_C(0xC8206231954A9AE1), UINT64_C(0x9360B592B76517B1), UINT64_C(0x362C5C5CEED10CCA)}, {UINT64_C(0x3DBA95953D607921), UINT64_C(0x0188A5D65A6ECC40), UINT64_C(0x0EAB43C16CFF4ADE), UINT64_C(0x1F3673AEDE3347E0)}}, {{UINT64_C(0x7300C4B3796593EE), UINT64_C(0x607E7E76D8D926C3), UINT64_C(0x1762CE2677F9FD06), UINT64_C(0x0D0478B3CEA891EB)}, {UINT64_C(0xB11297912618B09E), UINT64_C(0x5F9D290D33F928C9), UINT64_C(0xE3192631E6178DB0), UINT64_C(0x21260AC808576D3F)}}, {{UINT64_C(0x899DAF2A76968E1C), UINT64_C(0x0519DEA9F9C2B3E7), UINT64_C(0x5FDADC3893D0BD4E), UINT64_C(0x0467BFF743B4D98F)}, {UINT64_C(0x651C316C6F3936C9), UINT64_C(0xE757689AAF27DF8B), UINT64_C(0x3AB037EAA0FA9188), UINT64_C(0x2F8B039BD927B60A)}}, }, { {{UINT64_C(0x72211BF5DE876A70), UINT64_C(0xA836163173D121CE), UINT64_C(0x2385272123D419E4), UINT64_C(0x3F56D47EDBD03345)}, {UINT64_C(0xFB0E91A5D6F05BAC), UINT64_C(0xA0E02BF6AC9D0F46), UINT64_C(0x5ED9EA2C97F1812F), UINT64_C(0x172F564FEBD5DB5A)}}, {{UINT64_C(0xC790E91281F11E58), UINT64_C(0x14A1763099A5DFF7), UINT64_C(0xF6F30F2F1627516D), UINT64_C(0x522CAD8FEFCF43B7)}, {UINT64_C(0xFFADD45E6EA01128), UINT64_C(0x5D23234CD61D1964), UINT64_C(0xE9212C852802DF86), UINT64_C(0x0A3D237B92AA8DA3)}}, {{UINT64_C(0x2CED05F4E50ED356), UINT64_C(0x1CBC7FB1BFFEEF3A), UINT64_C(0x885991B1BE19F0F0), UINT64_C(0x6DED0794DE44A492)}, {UINT64_C(0x9967E83444CBECFC), UINT64_C(0xB0674A8D6A792ED1), UINT64_C(0x360E2DE4B7DDD557), UINT64_C(0x26852A7470E95D26)}}, {{UINT64_C(0x8CBC15203A6E2116), UINT64_C(0xF09327DFBF285BBE), UINT64_C(0x8C7D9AD54A54D3C5), UINT64_C(0x778F54E66BD2768F)}, {UINT64_C(0x09B489F88FF3DBC0), UINT64_C(0x0A0FA7FBD2871932), UINT64_C(0xABB9DC38E0A8CEC4), UINT64_C(0x2EE092D821E37A50)}}, {{UINT64_C(0xBB9256E7AF6D88D8), UINT64_C(0x3CDCB1CB0A218927), UINT64_C(0x8E5B744AF216D6E6), UINT64_C(0x6F0617F2BC885AFD)}, {UINT64_C(0xFBA9CDA7268397D5), UINT64_C(0xC61547165D4C75D8), UINT64_C(0x9ED8D17B43FB2CD2), UINT64_C(0x4D0CE3FBBE45BC5C)}}, {{UINT64_C(0x4259BB02A38472F5), UINT64_C(0xFAFAAE0315107D0E), UINT64_C(0x2B8E450ECF0CF2B6), UINT64_C(0x788674C3ED887C3A)}, {UINT64_C(0x1F3EBD594B3D2EAC), UINT64_C(0x82CB568475E41B55), UINT64_C(0x005AB76BC02BE49A), UINT64_C(0x6F13ADD2F5F90FEE)}}, {{UINT64_C(0x0116374A7AFA7161), UINT64_C(0x8A1AE4482DB7F824), UINT64_C(0xD3C0DA12DB656A22), UINT64_C(0x7B095B95B989204D)}, {UINT64_C(0x24C35202EF8F21CA), UINT64_C(0x91088DA72DA5A5A1), UINT64_C(0xAAF1944BE3F97D68), UINT64_C(0x245D28487C884134)}}, {{UINT64_C(0xD80C65D668F5C702), UINT64_C(0xE2FE245F021A2974), UINT64_C(0xFB8520E03A11899C), UINT64_C(0x4806D1FA2BE6BF88)}, {UINT64_C(0xF6F8C11A20ED235F), UINT64_C(0x52AC14247F0D651E), UINT64_C(0x44C3C89FDB9CF6D6), UINT64_C(0x6762516DB2E2E41F)}}, {{UINT64_C(0x2743D874FDE91600), UINT64_C(0x60975FD5CDF00100), UINT64_C(0x78ACC8642D2954F4), UINT64_C(0x46B9E60256373454)}, {UINT64_C(0x7586A9706F0FB867), UINT64_C(0x888E3677242DF35A), UINT64_C(0x5A639E79F1460F62), UINT64_C(0x1256517E55297DBC)}}, {{UINT64_C(0x3F78339B7B9294C3), UINT64_C(0x5BA765D1BCE77012), UINT64_C(0xA88E0CD8512E39E2), UINT64_C(0x2D63E14BF6BA6A6A)}, {UINT64_C(0xF849A163EA29071B), UINT64_C(0xF32519B74C0A2E22), UINT64_C(0xEA5D1315561C35F5), UINT64_C(0x7041F515D9267DCA)}}, {{UINT64_C(0xE01E839F1FE56E6B), UINT64_C(0x3E473D8C4A93CE88), UINT64_C(0xC4846ECF89AAFDAE), UINT64_C(0x4111D97A07D946EA)}, {UINT64_C(0xC20881F651A45F02), UINT64_C(0x14C2AC95B9CD841A), UINT64_C(0x2FBE8329F2CBD929), UINT64_C(0x1E8B7469C812608B)}}, {{UINT64_C(0xB36A5D03007F0A5D), UINT64_C(0xA7E7A1A85DCF7AF4), UINT64_C(0x7227F4C5BEB12AFB), UINT64_C(0x462277924D276783)}, {UINT64_C(0x9EA64D4C48403B93), UINT64_C(0x58EA31BC0B333ED5), UINT64_C(0x2D6DD219C5C93119), UINT64_C(0x385023A745069280)}}, {{UINT64_C(0x8AB9B9EAF60C46AF), UINT64_C(0xFA1D3F08E8B827C2), UINT64_C(0x78C6BFBC1BAD41DB), UINT64_C(0x527A0BED23BE0C1E)}, {UINT64_C(0x66212FD26ACCE641), UINT64_C(0x86125B0DEE6F78E7), UINT64_C(0xA2A0271858552A8C), UINT64_C(0x594F2B777E9605C5)}}, {{UINT64_C(0x3FB1F6CF88A27989), UINT64_C(0xBC4962F7D96268B8), UINT64_C(0xBD8761E9B95E2A36), UINT64_C(0x64AB934A046DEC63)}, {UINT64_C(0xC64D1C592E53CF1A), UINT64_C(0xC9865A9B578C5E8C), UINT64_C(0x5ECA62327A0359DE), UINT64_C(0x127DD136FB4685E5)}}, {{UINT64_C(0xB0F7B0711AE320C9), UINT64_C(0x09BF89BB52525203), UINT64_C(0x97B20027709C5692), UINT64_C(0x16A62485EDBF6175)}, {UINT64_C(0x32C18836394C50F9), UINT64_C(0x7D99468FD3B98C19), UINT64_C(0x8EBE50962E8D2729), UINT64_C(0x4E75B3CCE655F093)}}, {{UINT64_C(0xCBEFD1A29EAE827E), UINT64_C(0xDE2D1234FBF4630D), UINT64_C(0x1B3ADCF896086CDA), UINT64_C(0x43D3960E2EA6CBA7)}, {UINT64_C(0x18321D1D1CB5A0F7), UINT64_C(0xDC94C6F947BEABB4), UINT64_C(0xFBACC6D575AF6AB7), UINT64_C(0x0EE5D35789B98E86)}}, }, { {{UINT64_C(0x3F01B4AA062E0994), UINT64_C(0x994B28B05C952259), UINT64_C(0x2678F8B80CDEEC70), UINT64_C(0x4D06AF84212436F3)}, {UINT64_C(0xE9DF52FD1CF27A98), UINT64_C(0xD56B9FD10B7718F7), UINT64_C(0x728BE624D9AEDA0D), UINT64_C(0x098710881A646888)}}, {{UINT64_C(0xB1BC922D9B586B13), UINT64_C(0x6C084C543CA3B1BA), UINT64_C(0x54D196C7CF322698), UINT64_C(0x06EC3A5585D527E1)}, {UINT64_C(0x069187102A57CAA1), UINT64_C(0x6AEAC07D65FD0F6B), UINT64_C(0xB66A34D70F512F84), UINT64_C(0x3860C002A44E6452)}}, {{UINT64_C(0x17263B260881608A), UINT64_C(0x78D556AA56C18A7A), UINT64_C(0xA0826A1CAC3A47AB), UINT64_C(0x61686A58B6933FF5)}, {UINT64_C(0xEA9D8771DBCF2C4F), UINT64_C(0x1C66EB026AB00426), UINT64_C(0xF8DAED2B401C466A), UINT64_C(0x1ED0A99ADAAE8040)}}, {{UINT64_C(0x31EFFC4B7208E58A), UINT64_C(0x28868456B4E4319E), UINT64_C(0x1059C249D46AC4DA), UINT64_C(0x3589D2122279B362)}, {UINT64_C(0xB28B8FAD45552E92), UINT64_C(0xC9E32541C3AB8098), UINT64_C(0x82604904F14B35A1), UINT64_C(0x1E64A89FDB68C214)}}, {{UINT64_C(0xDF0E223DAB6947AF), UINT64_C(0xE74EF1D6771670D0), UINT64_C(0x70A9AD21F429F03B), UINT64_C(0x7CB1FA1F1385B8DC)}, {UINT64_C(0x25ABC0A769053D24), UINT64_C(0x207FE30A6369D02E), UINT64_C(0x57B76E3CC6E4EC2C), UINT64_C(0x2E03D2E3B927CAB2)}}, {{UINT64_C(0xEFA377FF622D57AE), UINT64_C(0x41532F56A885951A), UINT64_C(0x5ED89AA7CC69B9A8), UINT64_C(0x60BFF2EC295F5E84)}, {UINT64_C(0x411D65C31E5C3041), UINT64_C(0xDB533F8B4B7772F8), UINT64_C(0x72CADEB63BDD4AEA), UINT64_C(0x0EC79DF27C49E454)}}, {{UINT64_C(0x0C39332C81D0B84B), UINT64_C(0xA76A9A3A95FF472B), UINT64_C(0xD12FEB9931DB2BA6), UINT64_C(0x4AAB92223683E53A)}, {UINT64_C(0x56CB18AF24FC6271), UINT64_C(0x671581D62544C72D), UINT64_C(0xCD136492FBD6F4D1), UINT64_C(0x6C2023183579EE09)}}, {{UINT64_C(0xEDC5AF02C103C348), UINT64_C(0xDA32344E155A103D), UINT64_C(0xFF3A7679B0D1377E), UINT64_C(0x1609197268F02750)}, {UINT64_C(0xD4C6360DD9E9C143), UINT64_C(0xE0ABA0EF968EE990), UINT64_C(0x5781687897E4C9AE), UINT64_C(0x5A4D167B9D63E32D)}}, {{UINT64_C(0xB04BA52550E25802), UINT64_C(0x011DA36E66912F15), UINT64_C(0x08D8B68019E0A182), UINT64_C(0x66AA4AE82E462B0F)}, {UINT64_C(0x3227C3A6E0B9D283), UINT64_C(0x9BF8C4D0F2B2B096), UINT64_C(0x1E51416CBA809EB7), UINT64_C(0x68411B752A67D346)}}, {{UINT64_C(0xE55B134837A67F3B), UINT64_C(0x5E32D73C96484391), UINT64_C(0xC3F804D56256B91E), UINT64_C(0x67F17A4703B0783B)}, {UINT64_C(0x2010EFEBDD2334AD), UINT64_C(0xBD9965B5B10FF052), UINT64_C(0x519CDA6DF58ACA52), UINT64_C(0x045BEEBE2FD3D394)}}, {{UINT64_C(0x81722E2CEA271BCD), UINT64_C(0x393C082E0A4F1342), UINT64_C(0x573F7CD553B345CE), UINT64_C(0x7AD71FE23D7B4292)}, {UINT64_C(0xDA406D0ADA8BECB8), UINT64_C(0x14FD41CA82FE66BC), UINT64_C(0x80A410620A91DFFC), UINT64_C(0x33E38E10F4F0CDEB)}}, {{UINT64_C(0x0234BF382529532C), UINT64_C(0x9F5D6342A76CAE3B), UINT64_C(0xC9944CB3B3C50442), UINT64_C(0x51752DF08ABFAF17)}, {UINT64_C(0x2BFA58C4A37B13FB), UINT64_C(0x19F80FDEDDB14951), UINT64_C(0xDC7026AA7DCB927B), UINT64_C(0x57907272AAB9FCBA)}}, {{UINT64_C(0xCE38712DF3C046C2), UINT64_C(0x21D1FDB047B29D0E), UINT64_C(0x7F746E0ECD96D414), UINT64_C(0x72F07B52636CFEA4)}, {UINT64_C(0x0D8FE94FECE6382D), UINT64_C(0x9BFB4CBA24229CA4), UINT64_C(0xFAE55B77E54388B0), UINT64_C(0x074EBC32A188299F)}}, {{UINT64_C(0x8AF2EBCDE21DCCA2), UINT64_C(0x9916A6B6377487F2), UINT64_C(0x607DC19AD8051D40), UINT64_C(0x7DFD53F4419DDE12)}, {UINT64_C(0xD17D0D619AD07924), UINT64_C(0x14F7CE0F173E266B), UINT64_C(0x687FB8530281C9EB), UINT64_C(0x6B35CC1A3361B273)}}, {{UINT64_C(0x7CD6369E16E02DE3), UINT64_C(0x118EE0B11F35DFBC), UINT64_C(0x7D8C8DBD98B3EE60), UINT64_C(0x039806FC8D29EA17)}, {UINT64_C(0x3C473872EC2C2597), UINT64_C(0x81294AF45E4EF521), UINT64_C(0x5ED048DBC22A9D7C), UINT64_C(0x3879E95B0A08C4D4)}}, {{UINT64_C(0x0206E47F96A864FE), UINT64_C(0xC94F137AA55D0631), UINT64_C(0x9C1B3D298E8408F8), UINT64_C(0x150A4046B9193A5E)}, {UINT64_C(0x4E8F9345CB1ADF21), UINT64_C(0x6ED14D8A7BD5E1F9), UINT64_C(0x7082532960809F68), UINT64_C(0x0D2F1C3BFA85A06C)}}, }, { {{UINT64_C(0x3C5ABE75B5C810C3), UINT64_C(0xEA2C3EF9E28F1E26), UINT64_C(0xEEB1C5688BF68280), UINT64_C(0x5A165CEB7AE69110)}, {UINT64_C(0xE36C646044550DF1), UINT64_C(0x6FB4B108DB909258), UINT64_C(0xBFA1427717D4D8C5), UINT64_C(0x744CAF23927976D8)}}, {{UINT64_C(0xCBE70DF947EA55C7), UINT64_C(0x8F8119AE535457AE), UINT64_C(0x1E3C69EC7DAFD732), UINT64_C(0x1A2E162D39D409A2)}, {UINT64_C(0xBD7576A15F81C227), UINT64_C(0xA040AF9EC86AC2C3), UINT64_C(0x5690C059C10FC749), UINT64_C(0x20B26E8849CFAEC6)}}, {{UINT64_C(0x87AEBD1EE3EF781E), UINT64_C(0xBC794A621609A1F0), UINT64_C(0x96D8314226E7F61B), UINT64_C(0x5198577FFC51D17D)}, {UINT64_C(0xBFB5FAE28E6D0124), UINT64_C(0x91A7172BFFD5BD72), UINT64_C(0x474B015402832847), UINT64_C(0x4BAF0B4C59827FEB)}}, {{UINT64_C(0x5EADAA8EBA090294), UINT64_C(0x51401BC911A6E9FA), UINT64_C(0x78F117581D2594CD), UINT64_C(0x1811AD3082D203C2)}, {UINT64_C(0x554CC39A53FD07CC), UINT64_C(0x055FC983C7A05601), UINT64_C(0xB3B34E95D5A80B4B), UINT64_C(0x72B4CF941819BC16)}}, {{UINT64_C(0x0750E4F0514FAFD0), UINT64_C(0x297D27E6AD61C7B1), UINT64_C(0x701D743FA2D5D410), UINT64_C(0x535DD97BC83B55C9)}, {UINT64_C(0x2EE96DDE1CB11BB0), UINT64_C(0xECEA32EA0914450F), UINT64_C(0x4FB812364CDBDA6A), UINT64_C(0x5B75B6B2233C8063)}}, {{UINT64_C(0xF0A934A6D69D6C6A), UINT64_C(0x313E89773CC80AC9), UINT64_C(0x74692B171E428B71), UINT64_C(0x0474FEFCE1BE662D)}, {UINT64_C(0xAA2FF6DBAFFBF61B), UINT64_C(0xCE1594E1776983AF), UINT64_C(0xF00C665B4D5A2596), UINT64_C(0x30DD24497D414B9A)}}, {{UINT64_C(0xEF862DA2ACC44AB3), UINT64_C(0xBAD6857F6EE7A44A), UINT64_C(0x57674BF9D2F9027E), UINT64_C(0x4D771CC32ABF816E)}, {UINT64_C(0x27BEFC18AC0F1348), UINT64_C(0xD83112EF5E4F1202), UINT64_C(0x3571BDE38E9AAAE5), UINT64_C(0x07284830C1379B13)}}, {{UINT64_C(0xA4C2F36F72A8890C), UINT64_C(0x22DF0E815824B392), UINT64_C(0x50FAD77F5E720240), UINT64_C(0x1D152A6903278F96)}, {UINT64_C(0x25A3E92EA7D80F17), UINT64_C(0xBBF85B327EF32666), UINT64_C(0xBBB5568727222E52), UINT64_C(0x756D22A67582FE42)}}, {{UINT64_C(0x0AE7493A9BC9EAED), UINT64_C(0x9185F53F0DDBB275), UINT64_C(0x1585D068C3DFDBA7), UINT64_C(0x543208A1562E2455)}, {UINT64_C(0x4C417D81CBCF9535), UINT64_C(0xD2DC38D3E35DD6ED), UINT64_C(0x9DF1E014346F03A4), UINT64_C(0x65736E3FF0E772A6)}}, {{UINT64_C(0x58684A7BCFB7FF06), UINT64_C(0x72CC4AFEC58E6316), UINT64_C(0x2CA9BF30A8BB508A), UINT64_C(0x61576519E2044C8C)}, {UINT64_C(0xE78FAD3D8FF6D2B5), UINT64_C(0x6E5B839FA934C7B2), UINT64_C(0xC1F3D367FAFA9F9B), UINT64_C(0x637CC398F8B2AFA4)}}, {{UINT64_C(0xD6FC1806FE2B2639), UINT64_C(0x1DB199B49E98A7F2), UINT64_C(0x0508763DC794F900), UINT64_C(0x363F1F7D3232E5AC)}, {UINT64_C(0xDCF2AD74BBDBB351), UINT64_C(0x91F2EAF15A506BC6), UINT64_C(0xBDE8459EB850088B), UINT64_C(0x52DF883B3E1135AF)}}, {{UINT64_C(0x12FD053AF93779DC), UINT64_C(0x3E3D87289E319E46), UINT64_C(0x4D631005E5E360AE), UINT64_C(0x4A8B5683B1B29A30)}, {UINT64_C(0x305E5E53A8CA45EF), UINT64_C(0x59EACB45C2914843), UINT64_C(0x83677B7A1988ECEA), UINT64_C(0x63D9CD36D6FD53E8)}}, {{UINT64_C(0xDF2DACF2B77EB45F), UINT64_C(0x3C1303E355BBA70E), UINT64_C(0x5AB8EB424526A06C), UINT64_C(0x4D4FD2167FE06BBC)}, {UINT64_C(0x98C5ADCFE1486ABC), UINT64_C(0x9A503BFF07F86F3A), UINT64_C(0x7CEBAECB56282E44), UINT64_C(0x4FB090371F230DA0)}}, {{UINT64_C(0xD1A3738427210752), UINT64_C(0xD10794D602CF1C74), UINT64_C(0x48A2095A820CC08C), UINT64_C(0x6DCDDE2EE3284B9D)}, {UINT64_C(0xB8C7203E5D40510D), UINT64_C(0x957E89825385E3A7), UINT64_C(0xD220BE2FE27D7C13), UINT64_C(0x2D104AC57B471B5B)}}, {{UINT64_C(0x3B31D52BBA0AFA8D), UINT64_C(0xFA9639F5DCC85F88), UINT64_C(0x150146378861DDD7), UINT64_C(0x31C222DB7B5443B0)}, {UINT64_C(0xE2618546C3CDD689), UINT64_C(0x7F3FB754D528A130), UINT64_C(0xA0915810AC5FAF99), UINT64_C(0x3863B890E9899CE5)}}, {{UINT64_C(0xBDD42CA3579C4353), UINT64_C(0xAD30567D4D65CB5B), UINT64_C(0x0E343F216D91810B), UINT64_C(0x65E0092D42E19816)}, {UINT64_C(0x76154DCCF84E8C8E), UINT64_C(0xBA147CA80BA4AE59), UINT64_C(0xCA8085E756A1A71E), UINT64_C(0x1D90B4B01A158536)}}, }, { {{UINT64_C(0x5C4B7438F8B6C26A), UINT64_C(0x0C17A41B645BBE80), UINT64_C(0xA386062D40CF3D85), UINT64_C(0x563E42D2E78F776D)}, {UINT64_C(0x4BB8E3561F07459B), UINT64_C(0xF01A24B775D222CD), UINT64_C(0xBE3D032B24CF3F61), UINT64_C(0x759B01670AD5F3A3)}}, {{UINT64_C(0x2F5AEBD17D201AAB), UINT64_C(0x7B14CBEEC0AE02AD), UINT64_C(0xB9B54430EDC6388B), UINT64_C(0x69E713FBB622E01F)}, {UINT64_C(0x4630EE8EC5361565), UINT64_C(0x6705961E5C8FB479), UINT64_C(0x125CC97E07C2AA45), UINT64_C(0x4BC459F425AE3B12)}}, {{UINT64_C(0xEF02549628CF94E4), UINT64_C(0x04CFAB259DB24DE6), UINT64_C(0x52B8C734C62254EF), UINT64_C(0x0F2FE922568AB164)}, {UINT64_C(0x48551A05E3F39B40), UINT64_C(0x4A36865F31A7C7F6), UINT64_C(0x4486512C840441AE), UINT64_C(0x559C6CAF8C7C4B4D)}}, {{UINT64_C(0xFCC0D1DA0F103030), UINT64_C(0x7A9F1D5539CD584E), UINT64_C(0x3EFB9B94681D0D37), UINT64_C(0x3AE97CCD4D842332)}, {UINT64_C(0x85A8ECE13C03676B), UINT64_C(0x030F87753AD435A1), UINT64_C(0xF6019B4D7F2D73B5), UINT64_C(0x6B77E31A2F14F911)}}, {{UINT64_C(0x65C8161B9186C671), UINT64_C(0x412C3CC7CDFF2F8C), UINT64_C(0xBFFC17192C2FEA33), UINT64_C(0x75DCF68BC3675845)}, {UINT64_C(0x0476AFBF3B23D576), UINT64_C(0xB20CAEE219315F79), UINT64_C(0x1BC2A8590885471A), UINT64_C(0x410FF6CFC328279C)}}, {{UINT64_C(0x327394D960569D94), UINT64_C(0xFF2AEB6A6EA39D95), UINT64_C(0x1BED71E8EA0CA3AE), UINT64_C(0x1000A81E21072A94)}, {UINT64_C(0x368EA22973C02416), UINT64_C(0xDF5B2A420A4941BC), UINT64_C(0x4FFDC7B8D0D40B3A), UINT64_C(0x7B2C73F148ABAB4E)}}, {{UINT64_C(0x90FE34E481EE1072), UINT64_C(0xAE7A2FF4310E13D8), UINT64_C(0x6213D3B1CAB3927C), UINT64_C(0x44936FBD7DC7E9EF)}, {UINT64_C(0x3B898EF323A1BDBE), UINT64_C(0x3FA6C6A054CC7B1D), UINT64_C(0x41BCC3B5C6AC54F2), UINT64_C(0x1AB5D168DC10AE39)}}, {{UINT64_C(0x1AED113CFEAF67A6), UINT64_C(0x04E3C7A1342AC459), UINT64_C(0x65A392787A99DFBC), UINT64_C(0x03ECBC6B642329FF)}, {UINT64_C(0x799F4EC5A6A4421A), UINT64_C(0x44522C26BEE18B3C), UINT64_C(0x1C7BFF151975C4BB), UINT64_C(0x0FAA03BEE6A27857)}}, {{UINT64_C(0x173AB9E00743FF7B), UINT64_C(0xB11187AE2CFC95AE), UINT64_C(0xCA81BB2E9C112049), UINT64_C(0x6B811DB6C03555D5)}, {UINT64_C(0x76C1FC144FE32256), UINT64_C(0xDA8C5A96D0E47C4E), UINT64_C(0xB645D41329FDB01C), UINT64_C(0x78898447AC39502A)}}, {{UINT64_C(0x4285FF329BF44B35), UINT64_C(0x207F9029E3358C7F), UINT64_C(0x0FE8F03263BAF4CE), UINT64_C(0x698A0398FF15E1F7)}, {UINT64_C(0x548748437E572DF6), UINT64_C(0x746835199F43C07B), UINT64_C(0x47BAB49E0A433D6A), UINT64_C(0x09ED8740FAB5C858)}}, {{UINT64_C(0x8AA5E5C91F6CA820), UINT64_C(0xAD290A94D3C25BEC), UINT64_C(0xDC4C67BF3BA255F0), UINT64_C(0x0D7EF7D91DEDD8A9)}, {UINT64_C(0x0831A26F5EEFD1C3), UINT64_C(0x78CA66F504483E0C), UINT64_C(0x9D5A56122FAAC15A), UINT64_C(0x43B0C7E75D6FACDB)}}, {{UINT64_C(0x34BA537C4503899D), UINT64_C(0x9DEBC8F52AF8ED3B), UINT64_C(0x396995E984F416E6), UINT64_C(0x77F10FEDC7BCE392)}, {UINT64_C(0x065CCB721F8AF262), UINT64_C(0xE220ED60D2F00FC4), UINT64_C(0x41A5FB065EE25B46), UINT64_C(0x22505574DD9070B1)}}, {{UINT64_C(0x571FF15144BFC5C0), UINT64_C(0xBE2558B83138363C), UINT64_C(0xB2211ABD605E356C), UINT64_C(0x0B6435DA176C5F53)}, {UINT64_C(0xF18C917C8DCF484E), UINT64_C(0x45D4120CCD93D65F), UINT64_C(0xEBB0BF9C190AE7F8), UINT64_C(0x3D403DE28D8C8D5A)}}, {{UINT64_C(0xCDE760B4BE656644), UINT64_C(0x99DC5E6D2D21DBC5), UINT64_C(0x644FCAF3B6232D08), UINT64_C(0x52955488859341E3)}, {UINT64_C(0x3AB4580D25763919), UINT64_C(0x82AB0C534EF66999), UINT64_C(0xBD395C740180663E), UINT64_C(0x07974F1AB4756474)}}, {{UINT64_C(0x8C15CFE731588EA6), UINT64_C(0x9629060EF36C882D), UINT64_C(0xDF8E8E9E862B080D), UINT64_C(0x0BD36B48D7A0C5BE)}, {UINT64_C(0xEBD0C6C976DA047B), UINT64_C(0x4F0F08ABBB94FD5A), UINT64_C(0x33D41A4E74910D9F), UINT64_C(0x3D6F8D0BA9583754)}}, {{UINT64_C(0xEC4C896E4E4FC72E), UINT64_C(0xB111210C002ECE31), UINT64_C(0x7204D9372AF11E21), UINT64_C(0x59B9C1EC5D0509E9)}, {UINT64_C(0xBC97644CF9D5BBC0), UINT64_C(0x25B123AF31B4E869), UINT64_C(0x091D7AEC5A6CAAB0), UINT64_C(0x340B9E80ECC911C4)}}, }, { {{UINT64_C(0xE8036B20EC208406), UINT64_C(0xAF46A05A214CEB5A), UINT64_C(0x8672084A46CC8379), UINT64_C(0x7DE0A42F04BA7885)}, {UINT64_C(0xB772BEDCC9D3F32A), UINT64_C(0x7DAE3680534B1520), UINT64_C(0x04CD6203EC7120CC), UINT64_C(0x032F88E3B4E99780)}}, {{UINT64_C(0xB34BDA5CE4A0897E), UINT64_C(0xF7748B26379B2480), UINT64_C(0xF47F6646B2D97522), UINT64_C(0x66AD8DE1F9641DB9)}, {UINT64_C(0x0F8EB919D1BF09C0), UINT64_C(0x7853BB4EB95DC052), UINT64_C(0xBE7EE13D62B1FD4A), UINT64_C(0x2FF7EDC5DC7CE53E)}}, {{UINT64_C(0xE1009AA0EE81DF35), UINT64_C(0x14972F0261D0798B), UINT64_C(0x5A6831A0F1EA1A6A), UINT64_C(0x1DBABA3D0CAB301A)}, {UINT64_C(0x421270E2157D5213), UINT64_C(0xA37BEA956407B790), UINT64_C(0xEAD56B1F103A6073), UINT64_C(0x27534624BAD909F1)}}, {{UINT64_C(0xC92D2209C2621EF1), UINT64_C(0x450710C31D3AD3F3), UINT64_C(0x8CFB8D6C19E481AD), UINT64_C(0x35CACDAEE6DB01BD)}, {UINT64_C(0x2DA4A1D87CDD5B01), UINT64_C(0x3E40C7510F55BA11), UINT64_C(0xA91D9EE7B15C162D), UINT64_C(0x13AD3BE511DBA157)}}, {{UINT64_C(0xAE417DB0E72F64F5), UINT64_C(0x40822279F13352BA), UINT64_C(0xEC43AFD91F2B75B9), UINT64_C(0x14D4BB2BC9CF2972)}, {UINT64_C(0x4A55718A0761B2F1), UINT64_C(0xDAFBF756D81A9307), UINT64_C(0x2DCDFC1C5D3E5A07), UINT64_C(0x696E42ED2EBBDF28)}}, {{UINT64_C(0xF473939968705410), UINT64_C(0xFD581005AF5FFC88), UINT64_C(0x5490A69490A9F517), UINT64_C(0x4A5C8C2E8CF8327E)}, {UINT64_C(0xC203CD35F7D83DA6), UINT64_C(0xECAA6B907282368D), UINT64_C(0x365BB5712AF7EC42), UINT64_C(0x112E7ACDD4099316)}}, {{UINT64_C(0x9ABDE0603AE3C25C), UINT64_C(0xE4C03DADEB9925B2), UINT64_C(0x3C28DCB19E03388B), UINT64_C(0x2337A7CF52B63C06)}, {UINT64_C(0x74DC0F134E1AF2EA), UINT64_C(0xA010E4E3CD0D59AA), UINT64_C(0x6E4DB7BA9FA14C96), UINT64_C(0x5B2C3862557F7CDE)}}, {{UINT64_C(0xC826E567C8C79CA9), UINT64_C(0xE7D110CAE851BE0C), UINT64_C(0xFFD57057A3606499), UINT64_C(0x2E9DBC40C6482504)}, {UINT64_C(0xC9F0C3C2F784D9AF), UINT64_C(0xDD982A05B755172E), UINT64_C(0x6BC6C19DA023997F), UINT64_C(0x4AC177BEE34493C6)}}, {{UINT64_C(0x21C3E0874FA4F134), UINT64_C(0x66E10C3486F9722F), UINT64_C(0xD2927B017398579A), UINT64_C(0x7135B6380352C3D3)}, {UINT64_C(0x2DA620073BB5EE11), UINT64_C(0x8B64F13C3A946236), UINT64_C(0x3A83C85430EAE6DF), UINT64_C(0x31114E2A0EB6F749)}}, {{UINT64_C(0x2C7B52E735BFC72B), UINT64_C(0x6DD29EBD2B0D4C2C), UINT64_C(0xE90D39886C92E82D), UINT64_C(0x0A9249013864D94D)}, {UINT64_C(0x630508249BEE9E78), UINT64_C(0x7929FD62003DD5CF), UINT64_C(0xD04F832CE57507D1), UINT64_C(0x61078BDC37D2C32E)}}, {{UINT64_C(0xB118AFDD2E75264A), UINT64_C(0x3AB692EAEFD65114), UINT64_C(0x58D2CE248B0A2128), UINT64_C(0x4316E6C282ED6D5F)}, {UINT64_C(0x97766FFF46345BE4), UINT64_C(0xD7FF30140A7451AA), UINT64_C(0x078A423FAACE2E37), UINT64_C(0x7F1F90C2A6A78919)}}, {{UINT64_C(0x988FCCB08E9E3D4D), UINT64_C(0xBD003FC0B95C9731), UINT64_C(0x74E40076B0A84E58), UINT64_C(0x5FD1DBE61DF7FDD0)}, {UINT64_C(0xD2C700C74E6CE2FA), UINT64_C(0xA6E042E2903C5AE7), UINT64_C(0x561CC25F3C73822E), UINT64_C(0x651A79392A6A0C0C)}}, {{UINT64_C(0x103E9EC688CD7642), UINT64_C(0x65ED52183C3C86CE), UINT64_C(0x16BAB00282785C8B), UINT64_C(0x0B5C18BBF34723C5)}, {UINT64_C(0x528B0546E724D144), UINT64_C(0x5E582A6B780EEF9E), UINT64_C(0xC08283B8122F17AD), UINT64_C(0x0300EDCD1C22F32D)}}, {{UINT64_C(0x03AC716A38DCFD39), UINT64_C(0xCD88474C94F12C74), UINT64_C(0xB5E8641EE9042CA8), UINT64_C(0x1D5746CC40D10558)}, {UINT64_C(0x7869F45ECB4BB408), UINT64_C(0x28FB091D569489C3), UINT64_C(0xEA371EEC50A46306), UINT64_C(0x2802579675AA224C)}}, {{UINT64_C(0x4EAFA44EF7A5923A), UINT64_C(0xD2427C306B69FD8B), UINT64_C(0x4C4E884A393D83F9), UINT64_C(0x2D34890A6236AB65)}, {UINT64_C(0x80038D4035CC97F5), UINT64_C(0x4FE43C8497897472), UINT64_C(0xE5F56243BEF161AF), UINT64_C(0x3E1BDD6F9372E631)}}, {{UINT64_C(0x06A2B2875732669F), UINT64_C(0x92D00397CDF4D2C0), UINT64_C(0xCD9A25F0454A57F5), UINT64_C(0x23ADB7242F0CDB0B)}, {UINT64_C(0x504DA603FF0F8CB0), UINT64_C(0x14EF9D30D3E24181), UINT64_C(0xB1B1328E47FC1E66), UINT64_C(0x319B2A846C60354D)}}, }, { {{UINT64_C(0xBBF5542EF1D56038), UINT64_C(0xEDE3E637DD71CFC3), UINT64_C(0xFAA81D212E9F6C8B), UINT64_C(0x4DD2D44B69FBD060)}, {UINT64_C(0x71FB623314366A20), UINT64_C(0x155E486F9575451D), UINT64_C(0x001106F0EC7807D9), UINT64_C(0x1C80E5ABC617034C)}}, {{UINT64_C(0xD3E478DB8619F5F4), UINT64_C(0x1DF5C367F68170C2), UINT64_C(0xEAB095243430DE1D), UINT64_C(0x48F09361C3CD4C24)}, {UINT64_C(0xE49DEA4B60644FED), UINT64_C(0x47170F1C758C3679), UINT64_C(0x4CC1E6E8B0382A84), UINT64_C(0x2DBDB9DA10A4465E)}}, {{UINT64_C(0x67BAA79AC8400A4C), UINT64_C(0xFA30675301D28ECE), UINT64_C(0x29DB5B1C6F33289C), UINT64_C(0x4475757326A8FCB4)}, {UINT64_C(0x59616219E1B0A795), UINT64_C(0x3032D939C5B32FA0), UINT64_C(0x3010C9177C3CEA2C), UINT64_C(0x5CF83EF19892BDF4)}}, {{UINT64_C(0x55DE11413C7E83E6), UINT64_C(0x9D03929C74EA0366), UINT64_C(0x5CA60C5083BAF3FE), UINT64_C(0x3D9BCA587F70E905)}, {UINT64_C(0xDB79DF5AFCC5AB59), UINT64_C(0x03CFCF0653F68D30), UINT64_C(0xBE101A784FCFA5F1), UINT64_C(0x115D7078B49E493C)}}, {{UINT64_C(0xF14023AA76A0CCBD), UINT64_C(0x4287F0BC086F2E50), UINT64_C(0xC5EAA559F79A37E7), UINT64_C(0x5D527C0904E4F2A2)}, {UINT64_C(0xEC91461651DAA504), UINT64_C(0x250D90C6EEF1DC95), UINT64_C(0x1B0AA868A50330B2), UINT64_C(0x7B45A78354189BBE)}}, {{UINT64_C(0x0D602E05F019D6FF), UINT64_C(0x563E3893DD1800BA), UINT64_C(0x7146727EF3C7F7E5), UINT64_C(0x59641D984B026635)}, {UINT64_C(0x50BCF90FE91DDBB8), UINT64_C(0x5D43E78E7F8397A6), UINT64_C(0x8734A261EB15896E), UINT64_C(0x4AD1E8649FF6B361)}}, {{UINT64_C(0x1A9B601F320322F1), UINT64_C(0x606D40B391F611C4), UINT64_C(0xB984958BA19C918F), UINT64_C(0x67BFB045776F834E)}, {UINT64_C(0xC59E556968DD85F0), UINT64_C(0xB5642834D4067875), UINT64_C(0x247E7D65CB138DF3), UINT64_C(0x73640A035CB9281D)}}, {{UINT64_C(0xC7C34CCC88639889), UINT64_C(0xD9E44E07A785C707), UINT64_C(0x1BE68EFE32F83073), UINT64_C(0x249902DAAE5317CE)}, {UINT64_C(0xF1F0B86A76CA92FF), UINT64_C(0xA7F502CFC01CB06B), UINT64_C(0x0A8B4766595AA185), UINT64_C(0x614135AAB792DE49)}}, {{UINT64_C(0x5392CAA7564F2BC8), UINT64_C(0x1CDDA684CC894FCD), UINT64_C(0x10AC2378A4EBF82F), UINT64_C(0x6211EA465051BFF9)}, {UINT64_C(0xE53B017430E8E210), UINT64_C(0x2374FEC302C0E381), UINT64_C(0xF8B1506B4DA07224), UINT64_C(0x4E451E0154DA7A08)}}, {{UINT64_C(0xA8404D9C241FC7FB), UINT64_C(0x1D6DBF6EC4406332), UINT64_C(0xFE14231930162118), UINT64_C(0x69DE75CCA7EF5EF5)}, {UINT64_C(0x008D4D09856E26A5), UINT64_C(0x2BC64B65C588ECF6), UINT64_C(0x7A523D0BAA01EE19), UINT64_C(0x213EF390932F0B95)}}, {{UINT64_C(0xA42FE5131CD716FA), UINT64_C(0xFB13B3C60E8001B6), UINT64_C(0xBFDC7998D8F530CB), UINT64_C(0x04F9C05BF1C61761)}, {UINT64_C(0xFB57396FAFED9D64), UINT64_C(0x28CCEE3A421AC123), UINT64_C(0x32590C9BF6C21ACC), UINT64_C(0x503B97CBBCA75AE3)}}, {{UINT64_C(0x745208BC366946ED), UINT64_C(0xA75D88E94C906596), UINT64_C(0x03A30C7EEE043530), UINT64_C(0x5C67C151D11BF4D5)}, {UINT64_C(0x04F75DFAE7AE4BB3), UINT64_C(0xA08136067F8D7404), UINT64_C(0x8B9F921019D68F64), UINT64_C(0x5AB6797106F73B55)}}, {{UINT64_C(0x08064C4AB0687095), UINT64_C(0x27E30DDDB0106DF4), UINT64_C(0x31D29C708482524A), UINT64_C(0x65DD5896D86FDACD)}, {UINT64_C(0x081C013DC647197E), UINT64_C(0x51C10B9ED7A53A45), UINT64_C(0xACB9A4DE0DD7FC53), UINT64_C(0x639997A2F646220B)}}, {{UINT64_C(0x97CCF8251FB93B43), UINT64_C(0xB7D7713DE488D786), UINT64_C(0x4F7595663E4DBB33), UINT64_C(0x13B5D8A1E0F09964)}, {UINT64_C(0xFFDDAD74316CDD97), UINT64_C(0x67C5578252C92EE9), UINT64_C(0x03B50F940AC5D6FD), UINT64_C(0x56C5C0091484DF88)}}, {{UINT64_C(0xDCE199E31778D303), UINT64_C(0x53A2A4C60F1DD4EC), UINT64_C(0x7CC5EE9E370A7B99), UINT64_C(0x4403202B2598744E)}, {UINT64_C(0xCCFAA978228247B6), UINT64_C(0xF50D14BD4A1D0E27), UINT64_C(0x6669506180723ABC), UINT64_C(0x750CCB6A742C0015)}}, {{UINT64_C(0x7B04693681A109F1), UINT64_C(0x6414D9A3D4C1AFE5), UINT64_C(0x35070548DD14AC1F), UINT64_C(0x27172F39DEC0D3F0)}, {UINT64_C(0x4EE0A7BFF2E273F0), UINT64_C(0x028C7813EC82B8E6), UINT64_C(0x907BF09F2081EAE2), UINT64_C(0x72E4C3D3414D6421)}}, }, { {{UINT64_C(0x2064097EA073711C), UINT64_C(0x980D830A5A65EC25), UINT64_C(0x7906A87CF0877567), UINT64_C(0x3E5EAE10F1980A3A)}, {UINT64_C(0x5F51023A9272CE32), UINT64_C(0x71D69E68A437C974), UINT64_C(0x32006EA1D0B579FF), UINT64_C(0x191935FFA436E129)}}, {{UINT64_C(0xE5FE290991C1474C), UINT64_C(0x7350B9FA1F0B10F5), UINT64_C(0x2006F41D6B4AB128), UINT64_C(0x4EBDA6CFCD95FA42)}, {UINT64_C(0x450289385DA9A7F4), UINT64_C(0xD8129DE457FB462B), UINT64_C(0x4F2BF2C9E592EF90), UINT64_C(0x14A1A16BD6751DCC)}}, {{UINT64_C(0x7460BB84DE0CD47A), UINT64_C(0x261F24D6468CBA3D), UINT64_C(0x229D31811E3C2D8A), UINT64_C(0x4AE520C91D19E059)}, {UINT64_C(0x5AC3AEE7DF8DC66E), UINT64_C(0xCB417060299697EE), UINT64_C(0x227C1497CE97514F), UINT64_C(0x2589B8032E991FDE)}}, {{UINT64_C(0x7FE9D585A97A5D03), UINT64_C(0x7333A1EF10D58157), UINT64_C(0x54C1CCD2C94C3DF6), UINT64_C(0x25C1B25228073B4E)}, {UINT64_C(0xEEB29AF90635AD79), UINT64_C(0x880019C19AA38848), UINT64_C(0x1A85994230A9A497), UINT64_C(0x57EDCC2D92B25ABA)}}, {{UINT64_C(0xA98DAE7D65E19DE6), UINT64_C(0x8007DD1746AD8696), UINT64_C(0x61F2E2CFA7F3BBAD), UINT64_C(0x1EFCD38754193858)}, {UINT64_C(0xFB54FD6011666ECF), UINT64_C(0xD97EA5DF36E7D371), UINT64_C(0x944CA1703B9371FF), UINT64_C(0x32A52CAC05DE7FB0)}}, {{UINT64_C(0xB960FFF619ED8B5E), UINT64_C(0xFD6B4C3E660354BB), UINT64_C(0xF8ECAADA1C9E95F0), UINT64_C(0x687A6D29A8E08CC7)}, {UINT64_C(0xD38B7670C6A83D12), UINT64_C(0x1646064C1265BF30), UINT64_C(0x7DE19FFE2464892D), UINT64_C(0x05B57E081BDBB729)}}, {{UINT64_C(0xF3586B04FFB7A98A), UINT64_C(0xF1850CDCCB072826), UINT64_C(0xFA3E66A4CF53BFB0), UINT64_C(0x7C78E56706E07221)}, {UINT64_C(0x21E6F2453B4E72AE), UINT64_C(0x10A0D78BC6A3DBE8), UINT64_C(0xB9FC6D77D618DDAB), UINT64_C(0x33092D1376951DE5)}}, {{UINT64_C(0xCAA1BF9D5A0257CB), UINT64_C(0x1044E224866C505F), UINT64_C(0x9B51410781482E7D), UINT64_C(0x538CB86788940BFB)}, {UINT64_C(0xACE68B78AC21DCC1), UINT64_C(0x57942F3C1609BF8C), UINT64_C(0x30A47F3266E48C7A), UINT64_C(0x170D301DB0DA341F)}}, {{UINT64_C(0x19643EB218ED9863), UINT64_C(0xBBE55BCCD9104F33), UINT64_C(0x77008B6CA15B283C), UINT64_C(0x2A6E0B41873A6A02)}, {UINT64_C(0x517410DF3CB9A225), UINT64_C(0x20D76E38F538730A), UINT64_C(0x76C9CAD69F8724F0), UINT64_C(0x588BA1066BE9A035)}}, {{UINT64_C(0xA059DBECF842F66C), UINT64_C(0x59CA186DB3ED0481), UINT64_C(0xA5B2ABCBD454490F), UINT64_C(0x4A0F600402624902)}, {UINT64_C(0x45AF7B514D2F605F), UINT64_C(0x57E8FE0FC368030F), UINT64_C(0x23B745570C0727AE), UINT64_C(0x7E91EC772B603EC4)}}, {{UINT64_C(0xEDD284CFFD582BE8), UINT64_C(0x3077CB2381093CDA), UINT64_C(0xB1934840FDEA4FCE), UINT64_C(0x00F9B9D1D7F01C9A)}, {UINT64_C(0xA55E5C5B0A1C707B), UINT64_C(0x05CD73CB2F8618A5), UINT64_C(0x7327CECB512EEA05), UINT64_C(0x5130A0998BF2A4D5)}}, {{UINT64_C(0x34D18880FA7A1C7B), UINT64_C(0x5E0D6C53FD4E043F), UINT64_C(0xB4DD80101B4442AE), UINT64_C(0x59D9183E78ED7563)}, {UINT64_C(0x624DDAFCF1FAE158), UINT64_C(0xC08C36535C4C1E92), UINT64_C(0x452FD71FCE3E42EF), UINT64_C(0x175B490820B902EC)}}, {{UINT64_C(0x5F0FDF2418F4CE34), UINT64_C(0xA64A30119B7E61B8), UINT64_C(0x8109ACD5663362E2), UINT64_C(0x4D02F82497F3DF44)}, {UINT64_C(0x2CE27CCE3A4F916A), UINT64_C(0x4A4E6CBB3B85B146), UINT64_C(0xFE7A6199DB8C9E5E), UINT64_C(0x53F5D620D94B8D23)}}, {{UINT64_C(0x37FEBEC3E77610A9), UINT64_C(0xE82D8EAC92245CB0), UINT64_C(0x3FD2CEEAF79A31BC), UINT64_C(0x277ACF32B446850C)}, {UINT64_C(0xD89FF4C7CE1A2786), UINT64_C(0x441781E5FFD3A23C), UINT64_C(0x7876EFC507E85496), UINT64_C(0x0F306C7BE6F41B30)}}, {{UINT64_C(0x3BF2BFD15AB1B92B), UINT64_C(0xDCC3F5A6F373FCF2), UINT64_C(0x27CFC4A6DA53C229), UINT64_C(0x5885737C508E677F)}, {UINT64_C(0x1275D0F17B829F24), UINT64_C(0xBD3C0B024991B75B), UINT64_C(0x3F82ACDFE581C569), UINT64_C(0x123294353F28904E)}}, {{UINT64_C(0xCF7BDCCC99C3A09B), UINT64_C(0x191911075F7D601A), UINT64_C(0xA82F746039FBAA22), UINT64_C(0x3105A6FCD75B5786)}, {UINT64_C(0x9673DAC4932F69A6), UINT64_C(0xF5664B25B57D6EE6), UINT64_C(0x1EDAC1120A3CDD3E), UINT64_C(0x3CF84F8C42778563)}}, }, { {{UINT64_C(0xE36FD1B765DE3040), UINT64_C(0x240EADEA8AA0D3FE), UINT64_C(0x769714317F77F804), UINT64_C(0x6FCC933E591E9694)}, {UINT64_C(0x3218D92B18F48742), UINT64_C(0x215F13E95E1B4001), UINT64_C(0xCDF333CD7A8D69B9), UINT64_C(0x14F159B1D2FD134F)}}, {{UINT64_C(0x2D1228D607A50C16), UINT64_C(0x0DFD80F629AE42FD), UINT64_C(0x6C18B122BB8F3512), UINT64_C(0x0FE61243303F3DCA)}, {UINT64_C(0x43A29F4DDA50709B), UINT64_C(0x3FF58C084B92BF7B), UINT64_C(0x62DC6B41DFCEF797), UINT64_C(0x43F9525AC7B83F32)}}, {{UINT64_C(0x17EBBC9A15F08F5B), UINT64_C(0xBCD3B6408BB3E932), UINT64_C(0xD46FBB9F510BBD36), UINT64_C(0x389ABBA8CF65442B)}, {UINT64_C(0x3A3DAFE4B575545C), UINT64_C(0x6AB985ECE1D0994D), UINT64_C(0xCC2A697B69E1DB27), UINT64_C(0x0D483E18271581DC)}}, {{UINT64_C(0x380D4095C046D968), UINT64_C(0x5303975555D3318B), UINT64_C(0x57FA762991CE6FFC), UINT64_C(0x0A0F2885A4ADB641)}, {UINT64_C(0x8B99AF1B6E5C2909), UINT64_C(0xBDFE7FFDB8794175), UINT64_C(0x2CFB948A795ED786), UINT64_C(0x11FE74650FD0DF66)}}, {{UINT64_C(0xFC2CC2BD22E152E2), UINT64_C(0xCF6AB96BE30BCEB3), UINT64_C(0xAE89C041BC89B689), UINT64_C(0x6813430CE7523AB6)}, {UINT64_C(0x3F49E72840A4FA33), UINT64_C(0x025DE1B7857CB0C9), UINT64_C(0x6D71465A11EA5EA5), UINT64_C(0x6651F7B946C8D7CB)}}, {{UINT64_C(0xD05F1DCE5268098F), UINT64_C(0x891DBB680DC75030), UINT64_C(0xD939E428EA916291), UINT64_C(0x5F8EECCCEA37D060)}, {UINT64_C(0x885F1EA88DC5D544), UINT64_C(0xFD3B3D1757E7448F), UINT64_C(0x5FC791A879531DE0), UINT64_C(0x780C1AAF42E66DAA)}}, {{UINT64_C(0x19697778397BB28F), UINT64_C(0x5EC31D44AAA9069D), UINT64_C(0xDC2DFEAA3CA24A6F), UINT64_C(0x3F66CFCA80BED770)}, {UINT64_C(0x2B6B82151A102662), UINT64_C(0x44B4D7A4C5D34CEB), UINT64_C(0x17E0FDE688AFECF2), UINT64_C(0x0DEFA14BCFF8D214)}}, {{UINT64_C(0x14035AA48365CA84), UINT64_C(0x309CEEF0197CE2B7), UINT64_C(0x21305426ED39AF37), UINT64_C(0x10D01D11D2EA583A)}, {UINT64_C(0x3F2E97499FA5C766), UINT64_C(0x98357584D70549D4), UINT64_C(0x8FF80803D279946D), UINT64_C(0x53DBC43399DF1253)}}, {{UINT64_C(0x1D0D9EFA5329F12F), UINT64_C(0xBC9F74CFBE1F007F), UINT64_C(0xD7F2AA9A18EE4DBC), UINT64_C(0x634BF4CF3A792753)}, {UINT64_C(0xD5DC72AD2FA6255A), UINT64_C(0xEE69EA43F3BC00C5), UINT64_C(0xEA930F61D8147A1A), UINT64_C(0x25E1368DF4E9AD37)}}, {{UINT64_C(0x9422AAF7B7C955EC), UINT64_C(0x7C7107616A74D634), UINT64_C(0x4ED89932305EE420), UINT64_C(0x07E422122E937289)}, {UINT64_C(0x7EBB231328566C88), UINT64_C(0xC7ED9C7AC27ED656), UINT64_C(0xF77F3873BF14FB3B), UINT64_C(0x447AA1E5EB957520)}}, {{UINT64_C(0x3E3CEC7EB5C5E016), UINT64_C(0xB33DDFF7BDE44D26), UINT64_C(0x2056E9C766E820DD), UINT64_C(0x21A9E5D4F8196FE2)}, {UINT64_C(0x86CB0A1788040C97), UINT64_C(0x18AD8AE7FF515D49), UINT64_C(0xCB8A564A226A400A), UINT64_C(0x6DB489798B72A0D2)}}, {{UINT64_C(0x4365074B6324DED2), UINT64_C(0x9EFB5CC6AEDAF0F8), UINT64_C(0xCF952C3CC0792B14), UINT64_C(0x70B82AB997ED965E)}, {UINT64_C(0x931B98863ACEBCE7), UINT64_C(0xDA85049118C2425A), UINT64_C(0xD88E1E27E499F7FB), UINT64_C(0x61D3F246960981DE)}}, {{UINT64_C(0x1D8EA2278393EB0A), UINT64_C(0x9DCC23D27863FB53), UINT64_C(0x961B2337D5EBD297), UINT64_C(0x0A96F8B25BFED1E9)}, {UINT64_C(0x39EA1803FE7DD2B7), UINT64_C(0x7E4817BBE5F7772A), UINT64_C(0x3668C5FFD44A41EF), UINT64_C(0x78227653E11F8E11)}}, {{UINT64_C(0x272D6933D024880B), UINT64_C(0x733C029FF236FD8A), UINT64_C(0xBA5C20BD604868F0), UINT64_C(0x33F211AE321175C2)}, {UINT64_C(0xE40010FB9FD79FE3), UINT64_C(0x9C6EA1DCA685A59F), UINT64_C(0x79963FFC8EB9889D), UINT64_C(0x15434E7D5F67108D)}}, {{UINT64_C(0x42C14BBFD68B670F), UINT64_C(0x2021AC9D23F1AA69), UINT64_C(0xBF4C6D74AEA04636), UINT64_C(0x1E4D2F8EBD1FB11D)}, {UINT64_C(0x4B0CF0E337911AA6), UINT64_C(0x7542D9282C484507), UINT64_C(0x68836751889542DC), UINT64_C(0x05F229F7FE2282A0)}}, {{UINT64_C(0xAF269E8B409B2067), UINT64_C(0x6C749952A860F075), UINT64_C(0xCB7492DA5DF7C7F6), UINT64_C(0x2B010A7FE8E591E1)}, {UINT64_C(0xF744657704D9E871), UINT64_C(0xC2E0A2A35E68408E), UINT64_C(0xD512E9A6D0F0BAAD), UINT64_C(0x3E2F73E1C6BE34A3)}}, }, { {{UINT64_C(0x6C466C8E2EC65BB4), UINT64_C(0x912FFAE5B1FC8F92), UINT64_C(0x7587BE5DB50A522D), UINT64_C(0x15939FF7649847CF)}, {UINT64_C(0x69E81D63F464794E), UINT64_C(0x7BB6EEE36D3F858E), UINT64_C(0x24FE5C0110813BBB), UINT64_C(0x0C491F976D80756C)}}, {{UINT64_C(0xBAD1C256A5FF3510), UINT64_C(0xF06F38A299C1B7B2), UINT64_C(0xF7C0F164049312D6), UINT64_C(0x073C53745749B3E4)}, {UINT64_C(0xD676148055211A81), UINT64_C(0xF34CB5DBDFA98F45), UINT64_C(0xAF59FA47B4AA4967), UINT64_C(0x116935B98214BE48)}}, {{UINT64_C(0x1D86FA009FE10E46), UINT64_C(0x73B8099C0B5B8494), UINT64_C(0x9A6EA98DA1102BE7), UINT64_C(0x3DE1948B5514CA21)}, {UINT64_C(0x5D18ED69D0AAAA53), UINT64_C(0x17BF7DFF3C952B98), UINT64_C(0xC60143FE7DDBD937), UINT64_C(0x214F2F556F2F10C4)}}, {{UINT64_C(0xB2F2869502F047D0), UINT64_C(0x80952DFE923F52BF), UINT64_C(0x56F3306BA5017C3E), UINT64_C(0x5DD62F07052DADFB)}, {UINT64_C(0xDD11592DD5274F90), UINT64_C(0x40632FF3E471965B), UINT64_C(0xAD1939A87E618430), UINT64_C(0x5DD9CAD233F19556)}}, {{UINT64_C(0x7B0AA88CC1094747), UINT64_C(0xCFA6B95DF6753A0C), UINT64_C(0xE81AFADA2A252A4D), UINT64_C(0x364CAB7CD3770570)}, {UINT64_C(0xE99D8252B4610A19), UINT64_C(0xB22B2FEC55ED9AD3), UINT64_C(0x328ACBDDBEBE7FED), UINT64_C(0x1D379D61FBEDFE84)}}, {{UINT64_C(0xD9EFFFFA5EDF8C9C), UINT64_C(0x9BAA71810CE548EC), UINT64_C(0xEB458AEB5FA8FEEB), UINT64_C(0x18C5E6910904D841)}, {UINT64_C(0xFCEFAE288F33D2E5), UINT64_C(0xB3CF853E6FAFDA18), UINT64_C(0x05DE94BA427D6218), UINT64_C(0x021D8AED3731D3E9)}}, {{UINT64_C(0x06C8C318E92719DA), UINT64_C(0x1F7CDE121A65DFDB), UINT64_C(0x9B4D531E4B672A2D), UINT64_C(0x3E39CC63115FAF11)}, {UINT64_C(0xC9C3F3390037AF60), UINT64_C(0xC1C6758702B43D27), UINT64_C(0x46B77CDDC42DF26B), UINT64_C(0x7235F2B0EBFA97A7)}}, {{UINT64_C(0xAF7FFC9AE898094E), UINT64_C(0x8D18AB93146A27E3), UINT64_C(0x1376B7978AEC0416), UINT64_C(0x746A1B1C8D91C25E)}, {UINT64_C(0x16DCCCC10EBDE2E3), UINT64_C(0xFE4ABD418CE7D61E), UINT64_C(0xB9830395E25F1551), UINT64_C(0x543493D7B885A943)}}, {{UINT64_C(0x52C659E624EBCFC0), UINT64_C(0x72E3CA91D38367A4), UINT64_C(0xA3086AAC4D168F4F), UINT64_C(0x656ACFEE5D64207B)}, {UINT64_C(0xBE697CBABA196A9E), UINT64_C(0x6A737ACC97DFFEC2), UINT64_C(0x393E266154F04DBD), UINT64_C(0x4FFF7C244B0E92BD)}}, {{UINT64_C(0xC709CC59828EC659), UINT64_C(0xB275AC8CCBDEACB3), UINT64_C(0xA8D08921F7922523), UINT64_C(0x68B92F96400A6459)}, {UINT64_C(0x45803EC2DFBECB97), UINT64_C(0x49464E057515D696), UINT64_C(0xF39CA9618F03E969), UINT64_C(0x605065A11CD7C79F)}}, {{UINT64_C(0xB91C03DC97F1A97A), UINT64_C(0x2F6D50BB201FFB53), UINT64_C(0x39D67D4046241856), UINT64_C(0x0A2C025674D04805)}, {UINT64_C(0xD289B94C28374A6D), UINT64_C(0x1176C73A10EDD6FC), UINT64_C(0x890E9C3956AE631E), UINT64_C(0x30451CF16027F549)}}, {{UINT64_C(0x0CB33FDCDF8F4DDB), UINT64_C(0xD9C540DE87FF6E63), UINT64_C(0xD844573255A1D8E4), UINT64_C(0x1497403D8AC403A6)}, {UINT64_C(0xA2591C406A4BAAC6), UINT64_C(0xF493CF1F48DD3E5D), UINT64_C(0x7B9AE39FB69AF047), UINT64_C(0x293123C03782B110)}}, {{UINT64_C(0x14921836B7A36B62), UINT64_C(0x5AC824304CA3AA39), UINT64_C(0x01303AA652F601CA), UINT64_C(0x7EE1E6C72B43BB72)}, {UINT64_C(0x7F82B37B64D44957), UINT64_C(0x840D0654DA4A6FEC), UINT64_C(0xFC806FA10290F75D), UINT64_C(0x3027FE4A4C62F0E8)}}, {{UINT64_C(0x34E68AB5CD0D3AC0), UINT64_C(0xE6B0B8C1E9BC85BD), UINT64_C(0xE00F505299533831), UINT64_C(0x11327DA7CDC83750)}, {UINT64_C(0x6D991DF04656A428), UINT64_C(0x6A7BE34986228F26), UINT64_C(0x6BF85E3D3019CDC5), UINT64_C(0x42200D2F576913A4)}}, {{UINT64_C(0x420D9259707B940F), UINT64_C(0x1BB1FFE13C5E39BB), UINT64_C(0x83D6BA36E40D018E), UINT64_C(0x139BD842044EC576)}, {UINT64_C(0x3C79F8D2C6DE63E8), UINT64_C(0x49150B1D96F1FB0B), UINT64_C(0x666160531358A13B), UINT64_C(0x187CA3CFD5DDFD9F)}}, {{UINT64_C(0x0675370F8D5AEE84), UINT64_C(0x30AA7D65DC269114), UINT64_C(0x295F7FE85AFC6DC1), UINT64_C(0x4945202955674339)}, {UINT64_C(0x7EB1926BA6F209EC), UINT64_C(0x5232B9D1DC72C3E3), UINT64_C(0xCD788D79AB52141B), UINT64_C(0x3EB561BEFDD9611F)}}, }, { {{UINT64_C(0x09DB342CE22241AD), UINT64_C(0x2EAB852F2A566653), UINT64_C(0x970843EDCA6E59F3), UINT64_C(0x6490013EA18C2D89)}, {UINT64_C(0x52293350C7A691CC), UINT64_C(0x6544B49DB2079F14), UINT64_C(0xC49C559852DCF090), UINT64_C(0x4069B6FC8817A2C7)}}, {{UINT64_C(0x0E4A4B0CC86B40F4), UINT64_C(0x2B5350E151F6F853), UINT64_C(0xDE26FDE21033BEC4), UINT64_C(0x4DE9D2E7C0E9B971)}, {UINT64_C(0x716605FDD315AD57), UINT64_C(0x5627D732392B101A), UINT64_C(0x628EDFC681A9F40A), UINT64_C(0x4BD2A96C5AB9C99D)}}, {{UINT64_C(0x2C8DF2A1BFBD288A), UINT64_C(0x260C4F1EF4CF7C09), UINT64_C(0x88A2618690E796CB), UINT64_C(0x105ACC3A323E0702)}, {UINT64_C(0xA8ADA467667664CF), UINT64_C(0x41144C1B3B518622), UINT64_C(0x4A532B87D8B99FE1), UINT64_C(0x4A51C2892289C308)}}, {{UINT64_C(0x201DDA611D6F6880), UINT64_C(0x47A964D462029898), UINT64_C(0xE44E2EEE426C8CA5), UINT64_C(0x02A5182109625DBA)}, {UINT64_C(0x170C626EB45B3DFB), UINT64_C(0xFC7F1F715C8343A9), UINT64_C(0xE6CF246FE549F040), UINT64_C(0x4ACF60AE2F903ACE)}}, {{UINT64_C(0x9171535281C807EC), UINT64_C(0x72AC60C347174A58), UINT64_C(0xAD62D06FA0F12F61), UINT64_C(0x325C2792AA899C0D)}, {UINT64_C(0x53A1E3929D8BA267), UINT64_C(0x5DC088A5CDACCB05), UINT64_C(0x5BB9127F5025CB69), UINT64_C(0x25D2B42E69214616)}}, {{UINT64_C(0x4DE5D58ADDB55121), UINT64_C(0x688AA2F584DE0677), UINT64_C(0xF7925A3963AA25E0), UINT64_C(0x4FB42FC785D4DEA5)}, {UINT64_C(0x957B933B8F134390), UINT64_C(0xB360DD2C4B9BF8C2), UINT64_C(0x45E6767FFFFF96CD), UINT64_C(0x26D0A6A91E01D5C3)}}, {{UINT64_C(0xC7FC57145A0A98EA), UINT64_C(0xDBB06F30E7535AF6), UINT64_C(0x555B22E3DF4ACD0D), UINT64_C(0x3A011AAF2EFD2FBE)}, {UINT64_C(0x341C7733E9166B20), UINT64_C(0x84619E8EFB19590A), UINT64_C(0x8EF989FD10574C96), UINT64_C(0x61ACFAAE0F55F9A2)}}, {{UINT64_C(0x8C8A33F26DEAB094), UINT64_C(0x4A8E5D9F96022EBC), UINT64_C(0xA10DF82C7DDA92E8), UINT64_C(0x33A19462D1CF3815)}, {UINT64_C(0xE3FF8E43A489D67F), UINT64_C(0xD4B6136F225064AA), UINT64_C(0xE1721D2A92F5E662), UINT64_C(0x4C4F03D7A90A33C6)}}, {{UINT64_C(0x70885B35A3463B4A), UINT64_C(0x974BC40EDF9D0194), UINT64_C(0x1AF71E18273957F4), UINT64_C(0x58EF684B9900CB0D)}, {UINT64_C(0xB09970C820A49A4A), UINT64_C(0x3F28403F42067458), UINT64_C(0x153FF2C4BD7D1AD5), UINT64_C(0x7912CC2EE97A90F7)}}, {{UINT64_C(0xF653DF598F034D9F), UINT64_C(0xCA1671771C409CCF), UINT64_C(0x21F47005175F3583), UINT64_C(0x13B8A94BFAAFB66F)}, {UINT64_C(0x64534EE396052C8D), UINT64_C(0x09304DD18D674024), UINT64_C(0xEB468AC30D7A7E2A), UINT64_C(0x40347256CD62052C)}}, {{UINT64_C(0x0F089165FFF11C0E), UINT64_C(0x383562C98D69A45C), UINT64_C(0x7AB3EF9D3125FE61), UINT64_C(0x32C042BCE0735F3A)}, {UINT64_C(0x420077C84E268D91), UINT64_C(0x7FB4208244695B4F), UINT64_C(0xFA83216F448A133E), UINT64_C(0x1C66060793062EB3)}}, {{UINT64_C(0xA0FCBACAEF9E04DE), UINT64_C(0xAEF9EECB5B86F69A), UINT64_C(0x73D2E95FC39D4C99), UINT64_C(0x098C74F7923A5BA8)}, {UINT64_C(0x5B8C95C84F68DECF), UINT64_C(0xCFF2E10158976551), UINT64_C(0x5032AE48BE5CAF91), UINT64_C(0x5CCB9008E09BC8AE)}}, {{UINT64_C(0x41A38F203714D3BF), UINT64_C(0x2413653317366520), UINT64_C(0xF12F314CFAE17B01), UINT64_C(0x4AA0C969FC9AD43B)}, {UINT64_C(0xD8AB5F728BBAC026), UINT64_C(0x35128269526992DC), UINT64_C(0xA2EF6E44D19880AA), UINT64_C(0x28BB3623DBF47628)}}, {{UINT64_C(0x294742BA3BA25C35), UINT64_C(0x39D3BC9B061555B7), UINT64_C(0x944E3ABCDE6EA1A0), UINT64_C(0x4FDC641557EBD394)}, {UINT64_C(0xB615C1DAE981E649), UINT64_C(0xAF7EDB348BE3C95F), UINT64_C(0x38573AE871F7221F), UINT64_C(0x1B30FF04668CF414)}}, {{UINT64_C(0x48EFF6A2A57A9A4E), UINT64_C(0x04BA2F7374A59C19), UINT64_C(0x5FDE389D6779C5DA), UINT64_C(0x258E2B246612F160)}, {UINT64_C(0xCE8D7A0B6D116D41), UINT64_C(0xAF660436EE2706C8), UINT64_C(0xFFAD6FE9F81D6398), UINT64_C(0x4FE5EC5414BA128A)}}, {{UINT64_C(0x7D5E8299BD4B886C), UINT64_C(0x5403A46EDB0DB148), UINT64_C(0x32F49FC076A808D7), UINT64_C(0x6D483FD7D3B9A641)}, {UINT64_C(0x731DF1223952C70F), UINT64_C(0xB5CABAC1CB5E6081), UINT64_C(0x12FA297D7AFA8F59), UINT64_C(0x3272360A6AC91952)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 6 * ASSERT: a = -3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(t0, X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(t1, Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(t2, Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t3, X, Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, t3, t3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t4, Y, Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, X, Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, b, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(X3, X3, t3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, t2, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t2, t2, t3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, b, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Z3, Z3, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Z3, Z3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, t3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, t0, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t0, t3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t0, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t0, t4, t4); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, t0, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, Z3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed.op3 * https://eprint.iacr.org/2015/1060 Alg 5 * ASSERT: a = -3 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t4, Y2, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, t4, Y1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, X2, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, Y3, X1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, b, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, Z1, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t2, t1, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, t1); /* if P is inf, throw all that away and take Q */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(R->X, nz, Q->X, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 4 * ASSERT: a = -3 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t2, Z1, Z2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, Y1, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t5, Y2, Z2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t5, t1, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, X1, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, X2, Z2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(X3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, t0, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, b, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, t2, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t2, t1, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, t1); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[32], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 32) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[52], const unsigned char in[32]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 51; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[257], const unsigned char in[32]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 257; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[32], const unsigned char b[32], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[257] = {0}; int8_t bnaf[257] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 256; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[51] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 50; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[32]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 1; i >= 0; i--) { for (j = 0; i != 1 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 27; j++) { if (j * 2 + i > 51) continue; d = rnaf[j * 2 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[32], unsigned char outy[32], const unsigned char a[32], const unsigned char b[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery(P.Y, P.Y); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery(P.Y, P.Y); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[32] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_GostR3410_2001_CryptoPro_B_ParamSet( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(n, b_n, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_GostR3410_2001_CryptoPro_B_ParamSet(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_GostR3410_2001_CryptoPro_B_ParamSet(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 32) != 32) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #else /* __SIZEOF_INT128__ */ #include #include #define LIMB_BITS 32 #define LIMB_CNT 8 /* Field elements */ typedef uint32_t fe_t[LIMB_CNT]; typedef uint32_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_GOSTR3410_2001_CRYPTOPRO_B_PARAMSET_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: word_by_word_montgomery --static --use-value-barrier id_GostR3410_2001_CryptoPro_B_ParamSet 32 '2^255 + 3225' */ /* curve description: id_GostR3410_2001_CryptoPro_B_ParamSet */ /* machine_wordsize = 32 (from "32") */ /* requested operations: (all) */ /* m = 0x8000000000000000000000000000000000000000000000000000000000000c99 (from "2^255 + 3225") */ /* */ /* NOTE: In addition to the bounds specified above each function, all */ /* functions synthesized for this Montgomery arithmetic require the */ /* input to be strictly less than the prime modulus (m), and also */ /* require the input to be in the unique saturated representation. */ /* All functions also ensure that these two properties are true of */ /* return values. */ /* */ /* Computed values: */ /* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ #include typedef unsigned char fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1; typedef signed char fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int1; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_GOSTR3410_2001_CRYPTOPRO_B_PARAMSET_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint32_t fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_value_barrier_u32(uint32_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_value_barrier_u32(x) (x) #endif /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^32 * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint64_t x1; uint32_t x2; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x3; x1 = ((arg1 + (uint64_t)arg2) + arg3); x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); x3 = (fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1)(x1 >> 32); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^32 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { int64_t x1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int1 x2; uint32_t x3; x1 = ((arg2 - (int64_t)arg1) - arg3); x2 = (fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int1)(x1 >> 32); x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); *out1 = x3; *out2 = (fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1)(0x0 - x2); } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32 is a multiplication, returning the full double-width result. * Postconditions: * out1 = (arg1 * arg2) mod 2^32 * out2 = ⌊arg1 * arg2 / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0xffffffff] * arg2: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0xffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32( uint32_t *out1, uint32_t *out2, uint32_t arg1, uint32_t arg2) { uint64_t x1; uint32_t x2; uint32_t x3; x1 = ((uint64_t)arg1 * arg2); x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); x3 = (uint32_t)(x1 >> 32); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x1; uint32_t x2; uint32_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_int1)(0x0 - x1) & UINT32_C(0xffffffff)); x3 = ((fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_value_barrier_u32(x2) & arg3) | (fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_value_barrier_u32((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul multiplies two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul( uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x28; uint32_t x29; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x30; uint32_t x31; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x32; uint32_t x33; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x34; uint32_t x35; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x36; uint32_t x37; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x47; uint32_t x48; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x49; uint32_t x50; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x51; uint32_t x52; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x53; uint32_t x54; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x55; uint32_t x56; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x57; uint32_t x58; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x59; uint32_t x60; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x61; uint32_t x62; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x63; uint32_t x64; uint32_t x65; uint32_t x66; uint32_t x67; uint32_t x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint32_t x78; uint32_t x79; uint32_t x80; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x81; uint32_t x82; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x83; uint32_t x84; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x85; uint32_t x86; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x87; uint32_t x88; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x89; uint32_t x90; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x91; uint32_t x92; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x93; uint32_t x94; uint32_t x95; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x96; uint32_t x97; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x98; uint32_t x99; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x100; uint32_t x101; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x102; uint32_t x103; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x104; uint32_t x105; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x106; uint32_t x107; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x108; uint32_t x109; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x110; uint32_t x111; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x112; uint32_t x113; uint32_t x114; uint32_t x115; uint32_t x116; uint32_t x117; uint32_t x118; uint32_t x119; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x120; uint32_t x121; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x122; uint32_t x123; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x124; uint32_t x125; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x126; uint32_t x127; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x128; uint32_t x129; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x130; uint32_t x131; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x132; uint32_t x133; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x134; uint32_t x135; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x136; uint32_t x137; uint32_t x138; uint32_t x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; uint32_t x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; uint32_t x153; uint32_t x154; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x155; uint32_t x156; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x157; uint32_t x158; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x159; uint32_t x160; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x161; uint32_t x162; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x163; uint32_t x164; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x165; uint32_t x166; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x167; uint32_t x168; uint32_t x169; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x170; uint32_t x171; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x172; uint32_t x173; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x174; uint32_t x175; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x176; uint32_t x177; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x178; uint32_t x179; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x180; uint32_t x181; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x182; uint32_t x183; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x184; uint32_t x185; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x186; uint32_t x187; uint32_t x188; uint32_t x189; uint32_t x190; uint32_t x191; uint32_t x192; uint32_t x193; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x194; uint32_t x195; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x196; uint32_t x197; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x198; uint32_t x199; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x200; uint32_t x201; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x202; uint32_t x203; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x204; uint32_t x205; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x206; uint32_t x207; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x208; uint32_t x209; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x210; uint32_t x211; uint32_t x212; uint32_t x213; uint32_t x214; uint32_t x215; uint32_t x216; uint32_t x217; uint32_t x218; uint32_t x219; uint32_t x220; uint32_t x221; uint32_t x222; uint32_t x223; uint32_t x224; uint32_t x225; uint32_t x226; uint32_t x227; uint32_t x228; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x229; uint32_t x230; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x231; uint32_t x232; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x233; uint32_t x234; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x235; uint32_t x236; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x237; uint32_t x238; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x239; uint32_t x240; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x241; uint32_t x242; uint32_t x243; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x244; uint32_t x245; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x246; uint32_t x247; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x248; uint32_t x249; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x250; uint32_t x251; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x252; uint32_t x253; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x254; uint32_t x255; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x256; uint32_t x257; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x258; uint32_t x259; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x260; uint32_t x261; uint32_t x262; uint32_t x263; uint32_t x264; uint32_t x265; uint32_t x266; uint32_t x267; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x268; uint32_t x269; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x270; uint32_t x271; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x272; uint32_t x273; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x274; uint32_t x275; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x276; uint32_t x277; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x278; uint32_t x279; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x280; uint32_t x281; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x282; uint32_t x283; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x284; uint32_t x285; uint32_t x286; uint32_t x287; uint32_t x288; uint32_t x289; uint32_t x290; uint32_t x291; uint32_t x292; uint32_t x293; uint32_t x294; uint32_t x295; uint32_t x296; uint32_t x297; uint32_t x298; uint32_t x299; uint32_t x300; uint32_t x301; uint32_t x302; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x303; uint32_t x304; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x305; uint32_t x306; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x307; uint32_t x308; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x309; uint32_t x310; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x311; uint32_t x312; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x313; uint32_t x314; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x315; uint32_t x316; uint32_t x317; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x318; uint32_t x319; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x320; uint32_t x321; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x322; uint32_t x323; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x324; uint32_t x325; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x326; uint32_t x327; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x328; uint32_t x329; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x330; uint32_t x331; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x332; uint32_t x333; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x334; uint32_t x335; uint32_t x336; uint32_t x337; uint32_t x338; uint32_t x339; uint32_t x340; uint32_t x341; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x342; uint32_t x343; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x344; uint32_t x345; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x346; uint32_t x347; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x348; uint32_t x349; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x350; uint32_t x351; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x352; uint32_t x353; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x354; uint32_t x355; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x356; uint32_t x357; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x358; uint32_t x359; uint32_t x360; uint32_t x361; uint32_t x362; uint32_t x363; uint32_t x364; uint32_t x365; uint32_t x366; uint32_t x367; uint32_t x368; uint32_t x369; uint32_t x370; uint32_t x371; uint32_t x372; uint32_t x373; uint32_t x374; uint32_t x375; uint32_t x376; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x377; uint32_t x378; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x379; uint32_t x380; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x381; uint32_t x382; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x383; uint32_t x384; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x385; uint32_t x386; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x387; uint32_t x388; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x389; uint32_t x390; uint32_t x391; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x392; uint32_t x393; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x394; uint32_t x395; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x396; uint32_t x397; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x398; uint32_t x399; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x400; uint32_t x401; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x402; uint32_t x403; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x404; uint32_t x405; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x406; uint32_t x407; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x408; uint32_t x409; uint32_t x410; uint32_t x411; uint32_t x412; uint32_t x413; uint32_t x414; uint32_t x415; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x416; uint32_t x417; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x418; uint32_t x419; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x420; uint32_t x421; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x422; uint32_t x423; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x424; uint32_t x425; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x426; uint32_t x427; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x428; uint32_t x429; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x430; uint32_t x431; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x432; uint32_t x433; uint32_t x434; uint32_t x435; uint32_t x436; uint32_t x437; uint32_t x438; uint32_t x439; uint32_t x440; uint32_t x441; uint32_t x442; uint32_t x443; uint32_t x444; uint32_t x445; uint32_t x446; uint32_t x447; uint32_t x448; uint32_t x449; uint32_t x450; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x451; uint32_t x452; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x453; uint32_t x454; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x455; uint32_t x456; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x457; uint32_t x458; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x459; uint32_t x460; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x461; uint32_t x462; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x463; uint32_t x464; uint32_t x465; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x466; uint32_t x467; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x468; uint32_t x469; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x470; uint32_t x471; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x472; uint32_t x473; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x474; uint32_t x475; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x476; uint32_t x477; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x478; uint32_t x479; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x480; uint32_t x481; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x482; uint32_t x483; uint32_t x484; uint32_t x485; uint32_t x486; uint32_t x487; uint32_t x488; uint32_t x489; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x490; uint32_t x491; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x492; uint32_t x493; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x494; uint32_t x495; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x496; uint32_t x497; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x498; uint32_t x499; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x500; uint32_t x501; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x502; uint32_t x503; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x504; uint32_t x505; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x506; uint32_t x507; uint32_t x508; uint32_t x509; uint32_t x510; uint32_t x511; uint32_t x512; uint32_t x513; uint32_t x514; uint32_t x515; uint32_t x516; uint32_t x517; uint32_t x518; uint32_t x519; uint32_t x520; uint32_t x521; uint32_t x522; uint32_t x523; uint32_t x524; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x525; uint32_t x526; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x527; uint32_t x528; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x529; uint32_t x530; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x531; uint32_t x532; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x533; uint32_t x534; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x535; uint32_t x536; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x537; uint32_t x538; uint32_t x539; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x540; uint32_t x541; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x542; uint32_t x543; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x544; uint32_t x545; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x546; uint32_t x547; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x548; uint32_t x549; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x550; uint32_t x551; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x552; uint32_t x553; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x554; uint32_t x555; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x556; uint32_t x557; uint32_t x558; uint32_t x559; uint32_t x560; uint32_t x561; uint32_t x562; uint32_t x563; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x564; uint32_t x565; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x566; uint32_t x567; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x568; uint32_t x569; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x570; uint32_t x571; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x572; uint32_t x573; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x574; uint32_t x575; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x576; uint32_t x577; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x578; uint32_t x579; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x580; uint32_t x581; uint32_t x582; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x583; uint32_t x584; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x585; uint32_t x586; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x587; uint32_t x588; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x589; uint32_t x590; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x591; uint32_t x592; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x593; uint32_t x594; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x595; uint32_t x596; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x597; uint32_t x598; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x599; uint32_t x600; uint32_t x601; uint32_t x602; uint32_t x603; uint32_t x604; uint32_t x605; uint32_t x606; uint32_t x607; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x9, &x10, x8, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x11, &x12, x8, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x13, &x14, x8, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x15, &x16, x8, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x17, &x18, x8, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x19, &x20, x8, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x21, &x22, x8, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x23, &x24, x8, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x25, &x26, 0x0, x24, x21); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x27, &x28, x26, x22, x19); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x29, &x30, x28, x20, x17); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x31, &x32, x30, x18, x15); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x33, &x34, x32, x16, x13); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x35, &x36, x34, x14, x11); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x37, &x38, x36, x12, x9); x39 = (x38 + x10); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x40, &x41, x23, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x42, &x43, x40, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x44, &x45, x40, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x46, &x47, 0x0, x23, x44); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x48, &x49, x47, x25, x45); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x50, &x51, x49, x27, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x52, &x53, x51, x29, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x54, &x55, x53, x31, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x56, &x57, x55, x33, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x58, &x59, x57, x35, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x60, &x61, x59, x37, x42); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x62, &x63, x61, x39, x43); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x64, &x65, x1, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x66, &x67, x1, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x68, &x69, x1, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x70, &x71, x1, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x72, &x73, x1, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x74, &x75, x1, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x76, &x77, x1, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x78, &x79, x1, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x80, &x81, 0x0, x79, x76); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x82, &x83, x81, x77, x74); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x84, &x85, x83, x75, x72); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x86, &x87, x85, x73, x70); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x88, &x89, x87, x71, x68); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x90, &x91, x89, x69, x66); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x92, &x93, x91, x67, x64); x94 = (x93 + x65); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x95, &x96, 0x0, x48, x78); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x97, &x98, x96, x50, x80); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x99, &x100, x98, x52, x82); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x101, &x102, x100, x54, x84); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x103, &x104, x102, x56, x86); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x105, &x106, x104, x58, x88); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x107, &x108, x106, x60, x90); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x109, &x110, x108, x62, x92); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x111, &x112, x110, x63, x94); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x113, &x114, x95, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x115, &x116, x113, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x117, &x118, x113, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x119, &x120, 0x0, x95, x117); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x121, &x122, x120, x97, x118); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x123, &x124, x122, x99, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x125, &x126, x124, x101, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x127, &x128, x126, x103, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x129, &x130, x128, x105, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x131, &x132, x130, x107, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x133, &x134, x132, x109, x115); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x135, &x136, x134, x111, x116); x137 = ((uint32_t)x136 + x112); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x138, &x139, x2, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x140, &x141, x2, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x142, &x143, x2, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x144, &x145, x2, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x146, &x147, x2, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x148, &x149, x2, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x150, &x151, x2, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x152, &x153, x2, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x154, &x155, 0x0, x153, x150); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x156, &x157, x155, x151, x148); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x158, &x159, x157, x149, x146); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x160, &x161, x159, x147, x144); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x162, &x163, x161, x145, x142); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x164, &x165, x163, x143, x140); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x166, &x167, x165, x141, x138); x168 = (x167 + x139); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x169, &x170, 0x0, x121, x152); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x171, &x172, x170, x123, x154); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x173, &x174, x172, x125, x156); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x175, &x176, x174, x127, x158); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x177, &x178, x176, x129, x160); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x179, &x180, x178, x131, x162); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x181, &x182, x180, x133, x164); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x183, &x184, x182, x135, x166); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x185, &x186, x184, x137, x168); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x187, &x188, x169, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x189, &x190, x187, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x191, &x192, x187, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x193, &x194, 0x0, x169, x191); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x195, &x196, x194, x171, x192); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x197, &x198, x196, x173, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x199, &x200, x198, x175, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x201, &x202, x200, x177, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x203, &x204, x202, x179, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x205, &x206, x204, x181, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x207, &x208, x206, x183, x189); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x209, &x210, x208, x185, x190); x211 = ((uint32_t)x210 + x186); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x212, &x213, x3, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x214, &x215, x3, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x216, &x217, x3, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x218, &x219, x3, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x220, &x221, x3, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x222, &x223, x3, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x224, &x225, x3, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x226, &x227, x3, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x228, &x229, 0x0, x227, x224); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x230, &x231, x229, x225, x222); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x232, &x233, x231, x223, x220); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x234, &x235, x233, x221, x218); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x236, &x237, x235, x219, x216); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x238, &x239, x237, x217, x214); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x240, &x241, x239, x215, x212); x242 = (x241 + x213); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x243, &x244, 0x0, x195, x226); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x245, &x246, x244, x197, x228); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x247, &x248, x246, x199, x230); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x249, &x250, x248, x201, x232); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x251, &x252, x250, x203, x234); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x253, &x254, x252, x205, x236); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x255, &x256, x254, x207, x238); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x257, &x258, x256, x209, x240); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x259, &x260, x258, x211, x242); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x261, &x262, x243, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x263, &x264, x261, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x265, &x266, x261, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x267, &x268, 0x0, x243, x265); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x269, &x270, x268, x245, x266); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x271, &x272, x270, x247, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x273, &x274, x272, x249, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x275, &x276, x274, x251, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x277, &x278, x276, x253, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x279, &x280, x278, x255, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x281, &x282, x280, x257, x263); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x283, &x284, x282, x259, x264); x285 = ((uint32_t)x284 + x260); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x286, &x287, x4, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x288, &x289, x4, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x290, &x291, x4, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x292, &x293, x4, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x294, &x295, x4, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x296, &x297, x4, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x298, &x299, x4, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x300, &x301, x4, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x302, &x303, 0x0, x301, x298); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x304, &x305, x303, x299, x296); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x306, &x307, x305, x297, x294); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x308, &x309, x307, x295, x292); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x310, &x311, x309, x293, x290); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x312, &x313, x311, x291, x288); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x314, &x315, x313, x289, x286); x316 = (x315 + x287); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x317, &x318, 0x0, x269, x300); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x319, &x320, x318, x271, x302); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x321, &x322, x320, x273, x304); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x323, &x324, x322, x275, x306); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x325, &x326, x324, x277, x308); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x327, &x328, x326, x279, x310); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x329, &x330, x328, x281, x312); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x331, &x332, x330, x283, x314); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x333, &x334, x332, x285, x316); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x335, &x336, x317, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x337, &x338, x335, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x339, &x340, x335, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x341, &x342, 0x0, x317, x339); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x343, &x344, x342, x319, x340); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x345, &x346, x344, x321, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x347, &x348, x346, x323, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x349, &x350, x348, x325, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x351, &x352, x350, x327, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x353, &x354, x352, x329, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x355, &x356, x354, x331, x337); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x357, &x358, x356, x333, x338); x359 = ((uint32_t)x358 + x334); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x360, &x361, x5, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x362, &x363, x5, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x364, &x365, x5, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x366, &x367, x5, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x368, &x369, x5, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x370, &x371, x5, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x372, &x373, x5, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x374, &x375, x5, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x376, &x377, 0x0, x375, x372); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x378, &x379, x377, x373, x370); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x380, &x381, x379, x371, x368); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x382, &x383, x381, x369, x366); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x384, &x385, x383, x367, x364); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x386, &x387, x385, x365, x362); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x388, &x389, x387, x363, x360); x390 = (x389 + x361); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x391, &x392, 0x0, x343, x374); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x393, &x394, x392, x345, x376); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x395, &x396, x394, x347, x378); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x397, &x398, x396, x349, x380); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x399, &x400, x398, x351, x382); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x401, &x402, x400, x353, x384); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x403, &x404, x402, x355, x386); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x405, &x406, x404, x357, x388); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x407, &x408, x406, x359, x390); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x409, &x410, x391, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x411, &x412, x409, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x413, &x414, x409, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x415, &x416, 0x0, x391, x413); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x417, &x418, x416, x393, x414); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x419, &x420, x418, x395, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x421, &x422, x420, x397, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x423, &x424, x422, x399, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x425, &x426, x424, x401, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x427, &x428, x426, x403, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x429, &x430, x428, x405, x411); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x431, &x432, x430, x407, x412); x433 = ((uint32_t)x432 + x408); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x434, &x435, x6, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x436, &x437, x6, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x438, &x439, x6, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x440, &x441, x6, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x442, &x443, x6, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x444, &x445, x6, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x446, &x447, x6, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x448, &x449, x6, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x450, &x451, 0x0, x449, x446); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x452, &x453, x451, x447, x444); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x454, &x455, x453, x445, x442); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x456, &x457, x455, x443, x440); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x458, &x459, x457, x441, x438); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x460, &x461, x459, x439, x436); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x462, &x463, x461, x437, x434); x464 = (x463 + x435); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x465, &x466, 0x0, x417, x448); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x467, &x468, x466, x419, x450); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x469, &x470, x468, x421, x452); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x471, &x472, x470, x423, x454); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x473, &x474, x472, x425, x456); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x475, &x476, x474, x427, x458); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x477, &x478, x476, x429, x460); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x479, &x480, x478, x431, x462); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x481, &x482, x480, x433, x464); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x483, &x484, x465, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x485, &x486, x483, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x487, &x488, x483, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x489, &x490, 0x0, x465, x487); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x491, &x492, x490, x467, x488); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x493, &x494, x492, x469, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x495, &x496, x494, x471, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x497, &x498, x496, x473, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x499, &x500, x498, x475, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x501, &x502, x500, x477, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x503, &x504, x502, x479, x485); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x505, &x506, x504, x481, x486); x507 = ((uint32_t)x506 + x482); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x508, &x509, x7, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x510, &x511, x7, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x512, &x513, x7, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x514, &x515, x7, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x516, &x517, x7, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x518, &x519, x7, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x520, &x521, x7, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x522, &x523, x7, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x524, &x525, 0x0, x523, x520); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x526, &x527, x525, x521, x518); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x528, &x529, x527, x519, x516); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x530, &x531, x529, x517, x514); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x532, &x533, x531, x515, x512); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x534, &x535, x533, x513, x510); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x536, &x537, x535, x511, x508); x538 = (x537 + x509); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x539, &x540, 0x0, x491, x522); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x541, &x542, x540, x493, x524); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x543, &x544, x542, x495, x526); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x545, &x546, x544, x497, x528); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x547, &x548, x546, x499, x530); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x549, &x550, x548, x501, x532); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x551, &x552, x550, x503, x534); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x553, &x554, x552, x505, x536); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x555, &x556, x554, x507, x538); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x557, &x558, x539, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x559, &x560, x557, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x561, &x562, x557, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x563, &x564, 0x0, x539, x561); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x565, &x566, x564, x541, x562); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x567, &x568, x566, x543, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x569, &x570, x568, x545, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x571, &x572, x570, x547, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x573, &x574, x572, x549, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x575, &x576, x574, x551, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x577, &x578, x576, x553, x559); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x579, &x580, x578, x555, x560); x581 = ((uint32_t)x580 + x556); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x582, &x583, 0x0, x565, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x584, &x585, x583, x567, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x586, &x587, x585, x569, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x588, &x589, x587, x571, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x590, &x591, x589, x573, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x592, &x593, x591, x575, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x594, &x595, x593, x577, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x596, &x597, x595, x579, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x598, &x599, x597, x581, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x600, x599, x582, x565); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x601, x599, x584, x567); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x602, x599, x586, x569); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x603, x599, x588, x571); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x604, x599, x590, x573); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x605, x599, x592, x575); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x606, x599, x594, x577); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x607, x599, x596, x579); out1[0] = x600; out1[1] = x601; out1[2] = x602; out1[3] = x603; out1[4] = x604; out1[5] = x605; out1[6] = x606; out1[7] = x607; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square squares a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square( uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x28; uint32_t x29; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x30; uint32_t x31; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x32; uint32_t x33; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x34; uint32_t x35; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x36; uint32_t x37; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x47; uint32_t x48; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x49; uint32_t x50; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x51; uint32_t x52; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x53; uint32_t x54; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x55; uint32_t x56; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x57; uint32_t x58; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x59; uint32_t x60; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x61; uint32_t x62; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x63; uint32_t x64; uint32_t x65; uint32_t x66; uint32_t x67; uint32_t x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint32_t x78; uint32_t x79; uint32_t x80; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x81; uint32_t x82; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x83; uint32_t x84; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x85; uint32_t x86; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x87; uint32_t x88; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x89; uint32_t x90; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x91; uint32_t x92; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x93; uint32_t x94; uint32_t x95; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x96; uint32_t x97; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x98; uint32_t x99; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x100; uint32_t x101; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x102; uint32_t x103; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x104; uint32_t x105; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x106; uint32_t x107; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x108; uint32_t x109; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x110; uint32_t x111; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x112; uint32_t x113; uint32_t x114; uint32_t x115; uint32_t x116; uint32_t x117; uint32_t x118; uint32_t x119; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x120; uint32_t x121; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x122; uint32_t x123; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x124; uint32_t x125; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x126; uint32_t x127; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x128; uint32_t x129; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x130; uint32_t x131; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x132; uint32_t x133; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x134; uint32_t x135; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x136; uint32_t x137; uint32_t x138; uint32_t x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; uint32_t x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; uint32_t x153; uint32_t x154; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x155; uint32_t x156; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x157; uint32_t x158; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x159; uint32_t x160; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x161; uint32_t x162; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x163; uint32_t x164; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x165; uint32_t x166; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x167; uint32_t x168; uint32_t x169; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x170; uint32_t x171; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x172; uint32_t x173; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x174; uint32_t x175; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x176; uint32_t x177; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x178; uint32_t x179; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x180; uint32_t x181; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x182; uint32_t x183; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x184; uint32_t x185; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x186; uint32_t x187; uint32_t x188; uint32_t x189; uint32_t x190; uint32_t x191; uint32_t x192; uint32_t x193; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x194; uint32_t x195; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x196; uint32_t x197; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x198; uint32_t x199; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x200; uint32_t x201; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x202; uint32_t x203; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x204; uint32_t x205; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x206; uint32_t x207; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x208; uint32_t x209; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x210; uint32_t x211; uint32_t x212; uint32_t x213; uint32_t x214; uint32_t x215; uint32_t x216; uint32_t x217; uint32_t x218; uint32_t x219; uint32_t x220; uint32_t x221; uint32_t x222; uint32_t x223; uint32_t x224; uint32_t x225; uint32_t x226; uint32_t x227; uint32_t x228; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x229; uint32_t x230; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x231; uint32_t x232; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x233; uint32_t x234; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x235; uint32_t x236; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x237; uint32_t x238; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x239; uint32_t x240; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x241; uint32_t x242; uint32_t x243; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x244; uint32_t x245; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x246; uint32_t x247; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x248; uint32_t x249; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x250; uint32_t x251; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x252; uint32_t x253; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x254; uint32_t x255; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x256; uint32_t x257; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x258; uint32_t x259; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x260; uint32_t x261; uint32_t x262; uint32_t x263; uint32_t x264; uint32_t x265; uint32_t x266; uint32_t x267; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x268; uint32_t x269; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x270; uint32_t x271; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x272; uint32_t x273; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x274; uint32_t x275; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x276; uint32_t x277; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x278; uint32_t x279; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x280; uint32_t x281; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x282; uint32_t x283; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x284; uint32_t x285; uint32_t x286; uint32_t x287; uint32_t x288; uint32_t x289; uint32_t x290; uint32_t x291; uint32_t x292; uint32_t x293; uint32_t x294; uint32_t x295; uint32_t x296; uint32_t x297; uint32_t x298; uint32_t x299; uint32_t x300; uint32_t x301; uint32_t x302; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x303; uint32_t x304; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x305; uint32_t x306; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x307; uint32_t x308; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x309; uint32_t x310; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x311; uint32_t x312; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x313; uint32_t x314; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x315; uint32_t x316; uint32_t x317; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x318; uint32_t x319; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x320; uint32_t x321; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x322; uint32_t x323; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x324; uint32_t x325; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x326; uint32_t x327; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x328; uint32_t x329; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x330; uint32_t x331; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x332; uint32_t x333; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x334; uint32_t x335; uint32_t x336; uint32_t x337; uint32_t x338; uint32_t x339; uint32_t x340; uint32_t x341; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x342; uint32_t x343; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x344; uint32_t x345; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x346; uint32_t x347; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x348; uint32_t x349; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x350; uint32_t x351; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x352; uint32_t x353; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x354; uint32_t x355; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x356; uint32_t x357; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x358; uint32_t x359; uint32_t x360; uint32_t x361; uint32_t x362; uint32_t x363; uint32_t x364; uint32_t x365; uint32_t x366; uint32_t x367; uint32_t x368; uint32_t x369; uint32_t x370; uint32_t x371; uint32_t x372; uint32_t x373; uint32_t x374; uint32_t x375; uint32_t x376; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x377; uint32_t x378; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x379; uint32_t x380; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x381; uint32_t x382; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x383; uint32_t x384; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x385; uint32_t x386; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x387; uint32_t x388; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x389; uint32_t x390; uint32_t x391; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x392; uint32_t x393; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x394; uint32_t x395; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x396; uint32_t x397; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x398; uint32_t x399; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x400; uint32_t x401; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x402; uint32_t x403; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x404; uint32_t x405; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x406; uint32_t x407; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x408; uint32_t x409; uint32_t x410; uint32_t x411; uint32_t x412; uint32_t x413; uint32_t x414; uint32_t x415; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x416; uint32_t x417; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x418; uint32_t x419; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x420; uint32_t x421; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x422; uint32_t x423; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x424; uint32_t x425; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x426; uint32_t x427; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x428; uint32_t x429; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x430; uint32_t x431; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x432; uint32_t x433; uint32_t x434; uint32_t x435; uint32_t x436; uint32_t x437; uint32_t x438; uint32_t x439; uint32_t x440; uint32_t x441; uint32_t x442; uint32_t x443; uint32_t x444; uint32_t x445; uint32_t x446; uint32_t x447; uint32_t x448; uint32_t x449; uint32_t x450; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x451; uint32_t x452; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x453; uint32_t x454; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x455; uint32_t x456; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x457; uint32_t x458; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x459; uint32_t x460; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x461; uint32_t x462; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x463; uint32_t x464; uint32_t x465; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x466; uint32_t x467; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x468; uint32_t x469; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x470; uint32_t x471; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x472; uint32_t x473; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x474; uint32_t x475; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x476; uint32_t x477; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x478; uint32_t x479; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x480; uint32_t x481; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x482; uint32_t x483; uint32_t x484; uint32_t x485; uint32_t x486; uint32_t x487; uint32_t x488; uint32_t x489; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x490; uint32_t x491; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x492; uint32_t x493; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x494; uint32_t x495; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x496; uint32_t x497; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x498; uint32_t x499; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x500; uint32_t x501; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x502; uint32_t x503; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x504; uint32_t x505; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x506; uint32_t x507; uint32_t x508; uint32_t x509; uint32_t x510; uint32_t x511; uint32_t x512; uint32_t x513; uint32_t x514; uint32_t x515; uint32_t x516; uint32_t x517; uint32_t x518; uint32_t x519; uint32_t x520; uint32_t x521; uint32_t x522; uint32_t x523; uint32_t x524; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x525; uint32_t x526; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x527; uint32_t x528; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x529; uint32_t x530; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x531; uint32_t x532; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x533; uint32_t x534; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x535; uint32_t x536; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x537; uint32_t x538; uint32_t x539; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x540; uint32_t x541; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x542; uint32_t x543; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x544; uint32_t x545; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x546; uint32_t x547; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x548; uint32_t x549; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x550; uint32_t x551; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x552; uint32_t x553; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x554; uint32_t x555; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x556; uint32_t x557; uint32_t x558; uint32_t x559; uint32_t x560; uint32_t x561; uint32_t x562; uint32_t x563; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x564; uint32_t x565; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x566; uint32_t x567; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x568; uint32_t x569; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x570; uint32_t x571; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x572; uint32_t x573; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x574; uint32_t x575; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x576; uint32_t x577; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x578; uint32_t x579; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x580; uint32_t x581; uint32_t x582; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x583; uint32_t x584; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x585; uint32_t x586; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x587; uint32_t x588; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x589; uint32_t x590; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x591; uint32_t x592; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x593; uint32_t x594; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x595; uint32_t x596; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x597; uint32_t x598; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x599; uint32_t x600; uint32_t x601; uint32_t x602; uint32_t x603; uint32_t x604; uint32_t x605; uint32_t x606; uint32_t x607; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x9, &x10, x8, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x11, &x12, x8, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x13, &x14, x8, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x15, &x16, x8, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x17, &x18, x8, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x19, &x20, x8, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x21, &x22, x8, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x23, &x24, x8, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x25, &x26, 0x0, x24, x21); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x27, &x28, x26, x22, x19); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x29, &x30, x28, x20, x17); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x31, &x32, x30, x18, x15); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x33, &x34, x32, x16, x13); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x35, &x36, x34, x14, x11); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x37, &x38, x36, x12, x9); x39 = (x38 + x10); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x40, &x41, x23, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x42, &x43, x40, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x44, &x45, x40, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x46, &x47, 0x0, x23, x44); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x48, &x49, x47, x25, x45); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x50, &x51, x49, x27, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x52, &x53, x51, x29, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x54, &x55, x53, x31, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x56, &x57, x55, x33, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x58, &x59, x57, x35, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x60, &x61, x59, x37, x42); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x62, &x63, x61, x39, x43); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x64, &x65, x1, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x66, &x67, x1, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x68, &x69, x1, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x70, &x71, x1, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x72, &x73, x1, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x74, &x75, x1, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x76, &x77, x1, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x78, &x79, x1, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x80, &x81, 0x0, x79, x76); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x82, &x83, x81, x77, x74); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x84, &x85, x83, x75, x72); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x86, &x87, x85, x73, x70); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x88, &x89, x87, x71, x68); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x90, &x91, x89, x69, x66); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x92, &x93, x91, x67, x64); x94 = (x93 + x65); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x95, &x96, 0x0, x48, x78); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x97, &x98, x96, x50, x80); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x99, &x100, x98, x52, x82); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x101, &x102, x100, x54, x84); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x103, &x104, x102, x56, x86); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x105, &x106, x104, x58, x88); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x107, &x108, x106, x60, x90); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x109, &x110, x108, x62, x92); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x111, &x112, x110, x63, x94); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x113, &x114, x95, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x115, &x116, x113, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x117, &x118, x113, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x119, &x120, 0x0, x95, x117); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x121, &x122, x120, x97, x118); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x123, &x124, x122, x99, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x125, &x126, x124, x101, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x127, &x128, x126, x103, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x129, &x130, x128, x105, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x131, &x132, x130, x107, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x133, &x134, x132, x109, x115); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x135, &x136, x134, x111, x116); x137 = ((uint32_t)x136 + x112); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x138, &x139, x2, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x140, &x141, x2, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x142, &x143, x2, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x144, &x145, x2, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x146, &x147, x2, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x148, &x149, x2, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x150, &x151, x2, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x152, &x153, x2, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x154, &x155, 0x0, x153, x150); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x156, &x157, x155, x151, x148); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x158, &x159, x157, x149, x146); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x160, &x161, x159, x147, x144); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x162, &x163, x161, x145, x142); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x164, &x165, x163, x143, x140); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x166, &x167, x165, x141, x138); x168 = (x167 + x139); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x169, &x170, 0x0, x121, x152); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x171, &x172, x170, x123, x154); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x173, &x174, x172, x125, x156); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x175, &x176, x174, x127, x158); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x177, &x178, x176, x129, x160); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x179, &x180, x178, x131, x162); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x181, &x182, x180, x133, x164); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x183, &x184, x182, x135, x166); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x185, &x186, x184, x137, x168); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x187, &x188, x169, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x189, &x190, x187, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x191, &x192, x187, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x193, &x194, 0x0, x169, x191); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x195, &x196, x194, x171, x192); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x197, &x198, x196, x173, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x199, &x200, x198, x175, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x201, &x202, x200, x177, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x203, &x204, x202, x179, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x205, &x206, x204, x181, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x207, &x208, x206, x183, x189); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x209, &x210, x208, x185, x190); x211 = ((uint32_t)x210 + x186); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x212, &x213, x3, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x214, &x215, x3, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x216, &x217, x3, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x218, &x219, x3, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x220, &x221, x3, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x222, &x223, x3, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x224, &x225, x3, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x226, &x227, x3, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x228, &x229, 0x0, x227, x224); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x230, &x231, x229, x225, x222); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x232, &x233, x231, x223, x220); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x234, &x235, x233, x221, x218); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x236, &x237, x235, x219, x216); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x238, &x239, x237, x217, x214); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x240, &x241, x239, x215, x212); x242 = (x241 + x213); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x243, &x244, 0x0, x195, x226); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x245, &x246, x244, x197, x228); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x247, &x248, x246, x199, x230); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x249, &x250, x248, x201, x232); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x251, &x252, x250, x203, x234); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x253, &x254, x252, x205, x236); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x255, &x256, x254, x207, x238); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x257, &x258, x256, x209, x240); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x259, &x260, x258, x211, x242); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x261, &x262, x243, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x263, &x264, x261, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x265, &x266, x261, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x267, &x268, 0x0, x243, x265); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x269, &x270, x268, x245, x266); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x271, &x272, x270, x247, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x273, &x274, x272, x249, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x275, &x276, x274, x251, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x277, &x278, x276, x253, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x279, &x280, x278, x255, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x281, &x282, x280, x257, x263); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x283, &x284, x282, x259, x264); x285 = ((uint32_t)x284 + x260); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x286, &x287, x4, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x288, &x289, x4, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x290, &x291, x4, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x292, &x293, x4, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x294, &x295, x4, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x296, &x297, x4, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x298, &x299, x4, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x300, &x301, x4, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x302, &x303, 0x0, x301, x298); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x304, &x305, x303, x299, x296); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x306, &x307, x305, x297, x294); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x308, &x309, x307, x295, x292); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x310, &x311, x309, x293, x290); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x312, &x313, x311, x291, x288); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x314, &x315, x313, x289, x286); x316 = (x315 + x287); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x317, &x318, 0x0, x269, x300); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x319, &x320, x318, x271, x302); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x321, &x322, x320, x273, x304); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x323, &x324, x322, x275, x306); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x325, &x326, x324, x277, x308); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x327, &x328, x326, x279, x310); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x329, &x330, x328, x281, x312); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x331, &x332, x330, x283, x314); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x333, &x334, x332, x285, x316); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x335, &x336, x317, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x337, &x338, x335, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x339, &x340, x335, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x341, &x342, 0x0, x317, x339); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x343, &x344, x342, x319, x340); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x345, &x346, x344, x321, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x347, &x348, x346, x323, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x349, &x350, x348, x325, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x351, &x352, x350, x327, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x353, &x354, x352, x329, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x355, &x356, x354, x331, x337); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x357, &x358, x356, x333, x338); x359 = ((uint32_t)x358 + x334); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x360, &x361, x5, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x362, &x363, x5, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x364, &x365, x5, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x366, &x367, x5, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x368, &x369, x5, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x370, &x371, x5, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x372, &x373, x5, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x374, &x375, x5, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x376, &x377, 0x0, x375, x372); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x378, &x379, x377, x373, x370); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x380, &x381, x379, x371, x368); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x382, &x383, x381, x369, x366); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x384, &x385, x383, x367, x364); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x386, &x387, x385, x365, x362); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x388, &x389, x387, x363, x360); x390 = (x389 + x361); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x391, &x392, 0x0, x343, x374); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x393, &x394, x392, x345, x376); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x395, &x396, x394, x347, x378); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x397, &x398, x396, x349, x380); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x399, &x400, x398, x351, x382); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x401, &x402, x400, x353, x384); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x403, &x404, x402, x355, x386); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x405, &x406, x404, x357, x388); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x407, &x408, x406, x359, x390); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x409, &x410, x391, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x411, &x412, x409, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x413, &x414, x409, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x415, &x416, 0x0, x391, x413); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x417, &x418, x416, x393, x414); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x419, &x420, x418, x395, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x421, &x422, x420, x397, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x423, &x424, x422, x399, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x425, &x426, x424, x401, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x427, &x428, x426, x403, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x429, &x430, x428, x405, x411); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x431, &x432, x430, x407, x412); x433 = ((uint32_t)x432 + x408); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x434, &x435, x6, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x436, &x437, x6, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x438, &x439, x6, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x440, &x441, x6, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x442, &x443, x6, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x444, &x445, x6, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x446, &x447, x6, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x448, &x449, x6, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x450, &x451, 0x0, x449, x446); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x452, &x453, x451, x447, x444); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x454, &x455, x453, x445, x442); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x456, &x457, x455, x443, x440); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x458, &x459, x457, x441, x438); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x460, &x461, x459, x439, x436); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x462, &x463, x461, x437, x434); x464 = (x463 + x435); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x465, &x466, 0x0, x417, x448); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x467, &x468, x466, x419, x450); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x469, &x470, x468, x421, x452); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x471, &x472, x470, x423, x454); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x473, &x474, x472, x425, x456); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x475, &x476, x474, x427, x458); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x477, &x478, x476, x429, x460); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x479, &x480, x478, x431, x462); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x481, &x482, x480, x433, x464); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x483, &x484, x465, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x485, &x486, x483, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x487, &x488, x483, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x489, &x490, 0x0, x465, x487); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x491, &x492, x490, x467, x488); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x493, &x494, x492, x469, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x495, &x496, x494, x471, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x497, &x498, x496, x473, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x499, &x500, x498, x475, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x501, &x502, x500, x477, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x503, &x504, x502, x479, x485); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x505, &x506, x504, x481, x486); x507 = ((uint32_t)x506 + x482); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x508, &x509, x7, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x510, &x511, x7, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x512, &x513, x7, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x514, &x515, x7, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x516, &x517, x7, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x518, &x519, x7, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x520, &x521, x7, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x522, &x523, x7, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x524, &x525, 0x0, x523, x520); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x526, &x527, x525, x521, x518); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x528, &x529, x527, x519, x516); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x530, &x531, x529, x517, x514); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x532, &x533, x531, x515, x512); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x534, &x535, x533, x513, x510); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x536, &x537, x535, x511, x508); x538 = (x537 + x509); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x539, &x540, 0x0, x491, x522); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x541, &x542, x540, x493, x524); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x543, &x544, x542, x495, x526); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x545, &x546, x544, x497, x528); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x547, &x548, x546, x499, x530); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x549, &x550, x548, x501, x532); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x551, &x552, x550, x503, x534); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x553, &x554, x552, x505, x536); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x555, &x556, x554, x507, x538); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x557, &x558, x539, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x559, &x560, x557, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x561, &x562, x557, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x563, &x564, 0x0, x539, x561); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x565, &x566, x564, x541, x562); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x567, &x568, x566, x543, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x569, &x570, x568, x545, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x571, &x572, x570, x547, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x573, &x574, x572, x549, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x575, &x576, x574, x551, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x577, &x578, x576, x553, x559); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x579, &x580, x578, x555, x560); x581 = ((uint32_t)x580 + x556); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x582, &x583, 0x0, x565, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x584, &x585, x583, x567, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x586, &x587, x585, x569, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x588, &x589, x587, x571, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x590, &x591, x589, x573, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x592, &x593, x591, x575, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x594, &x595, x593, x577, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x596, &x597, x595, x579, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x598, &x599, x597, x581, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x600, x599, x582, x565); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x601, x599, x584, x567); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x602, x599, x586, x569); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x603, x599, x588, x571); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x604, x599, x590, x573); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x605, x599, x592, x575); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x606, x599, x594, x577); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x607, x599, x596, x579); out1[0] = x600; out1[1] = x601; out1[2] = x602; out1[3] = x603; out1[4] = x604; out1[5] = x605; out1[6] = x606; out1[7] = x607; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add adds two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add( uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x2; uint32_t x3; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x4; uint32_t x5; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x6; uint32_t x7; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x8; uint32_t x9; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x10; uint32_t x11; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x14; uint32_t x15; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x16; uint32_t x17; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x18; uint32_t x19; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x20; uint32_t x21; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x22; uint32_t x23; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x24; uint32_t x25; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x28; uint32_t x29; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x30; uint32_t x31; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x32; uint32_t x33; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x9, &x10, x8, (arg1[4]), (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x11, &x12, x10, (arg1[5]), (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x13, &x14, x12, (arg1[6]), (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x15, &x16, x14, (arg1[7]), (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x17, &x18, 0x0, x1, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x19, &x20, x18, x3, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x21, &x22, x20, x5, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x23, &x24, x22, x7, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x25, &x26, x24, x9, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x27, &x28, x26, x11, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x29, &x30, x28, x13, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x31, &x32, x30, x15, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x33, &x34, x32, x16, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x35, x34, x17, x1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x36, x34, x19, x3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x37, x34, x21, x5); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x38, x34, x23, x7); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x39, x34, x25, x9); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x40, x34, x27, x11); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x41, x34, x29, x13); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x42, x34, x31, x15); out1[0] = x35; out1[1] = x36; out1[2] = x37; out1[3] = x38; out1[4] = x39; out1[5] = x40; out1[6] = x41; out1[7] = x42; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub subtracts two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub( uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x2; uint32_t x3; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x4; uint32_t x5; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x6; uint32_t x7; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x8; uint32_t x9; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x10; uint32_t x11; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x14; uint32_t x15; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x16; uint32_t x17; uint32_t x18; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x19; uint32_t x20; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x21; uint32_t x22; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x23; uint32_t x24; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x25; uint32_t x26; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x27; uint32_t x28; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x29; uint32_t x30; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x31; uint32_t x32; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x33; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x9, &x10, x8, (arg1[4]), (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x11, &x12, x10, (arg1[5]), (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x13, &x14, x12, (arg1[6]), (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x15, &x16, x14, (arg1[7]), (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( &x17, x16, 0x0, UINT32_C(0xffffffff)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x18, &x19, 0x0, x1, (x17 & UINT16_C(0xc99))); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x20, &x21, x19, x3, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x22, &x23, x21, x5, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x24, &x25, x23, x7, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x26, &x27, x25, x9, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x28, &x29, x27, x11, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x30, &x31, x29, x13, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x32, &x33, x31, x15, (x17 & UINT32_C(0x80000000))); out1[0] = x18; out1[1] = x20; out1[2] = x22; out1[3] = x24; out1[4] = x26; out1[5] = x28; out1[6] = x30; out1[7] = x32; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp negates a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp( uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x2; uint32_t x3; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x4; uint32_t x5; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x6; uint32_t x7; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x8; uint32_t x9; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x10; uint32_t x11; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x14; uint32_t x15; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x16; uint32_t x17; uint32_t x18; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x19; uint32_t x20; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x21; uint32_t x22; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x23; uint32_t x24; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x25; uint32_t x26; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x27; uint32_t x28; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x29; uint32_t x30; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x31; uint32_t x32; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x33; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( &x17, x16, 0x0, UINT32_C(0xffffffff)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x18, &x19, 0x0, x1, (x17 & UINT16_C(0xc99))); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x20, &x21, x19, x3, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x22, &x23, x21, x5, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x24, &x25, x23, x7, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x26, &x27, x25, x9, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x28, &x29, x27, x11, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x30, &x31, x29, x13, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x32, &x33, x31, x15, (x17 & UINT32_C(0x80000000))); out1[0] = x18; out1[1] = x20; out1[2] = x22; out1[3] = x24; out1[4] = x26; out1[5] = x28; out1[6] = x30; out1[7] = x32; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery translates a field element out of the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval out1 mod m = (eval arg1 * ((2^32)âģš mod m)^8) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery( uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x9; uint32_t x10; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x19; uint32_t x20; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x21; uint32_t x22; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x23; uint32_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint32_t x29; uint32_t x30; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x31; uint32_t x32; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x33; uint32_t x34; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x43; uint32_t x44; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x45; uint32_t x46; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x55; uint32_t x56; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x57; uint32_t x58; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x59; uint32_t x60; uint32_t x61; uint32_t x62; uint32_t x63; uint32_t x64; uint32_t x65; uint32_t x66; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x67; uint32_t x68; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x69; uint32_t x70; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x71; uint32_t x72; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x73; uint32_t x74; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x75; uint32_t x76; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x77; uint32_t x78; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x79; uint32_t x80; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x81; uint32_t x82; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x83; uint32_t x84; uint32_t x85; uint32_t x86; uint32_t x87; uint32_t x88; uint32_t x89; uint32_t x90; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x91; uint32_t x92; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x93; uint32_t x94; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x95; uint32_t x96; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x97; uint32_t x98; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x99; uint32_t x100; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x101; uint32_t x102; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x103; uint32_t x104; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x105; uint32_t x106; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x107; uint32_t x108; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x109; uint32_t x110; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x111; uint32_t x112; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x113; uint32_t x114; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x115; uint32_t x116; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x117; uint32_t x118; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x119; uint32_t x120; uint32_t x121; uint32_t x122; uint32_t x123; uint32_t x124; uint32_t x125; uint32_t x126; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x127; uint32_t x128; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x129; uint32_t x130; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x131; uint32_t x132; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x133; uint32_t x134; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x135; uint32_t x136; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x137; uint32_t x138; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x139; uint32_t x140; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x141; uint32_t x142; uint32_t x143; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x144; uint32_t x145; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x146; uint32_t x147; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x148; uint32_t x149; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x150; uint32_t x151; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x152; uint32_t x153; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x154; uint32_t x155; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x156; uint32_t x157; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x158; uint32_t x159; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x160; uint32_t x161; uint32_t x162; uint32_t x163; uint32_t x164; uint32_t x165; uint32_t x166; uint32_t x167; uint32_t x168; x1 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x2, &x3, x1, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x4, &x5, x2, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x6, &x7, x2, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x8, &x9, 0x0, x1, x6); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x10, &x11, 0x0, (x9 + x7), (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x12, &x13, x10, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x14, &x15, x12, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x16, &x17, x12, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x18, &x19, 0x0, x5, x14); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x20, &x21, 0x0, x10, x16); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x22, &x23, 0x0, (((uint32_t)x21 + x11) + x17), (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x24, &x25, x22, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x26, &x27, x24, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x28, &x29, x24, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x30, &x31, 0x0, (x19 + x15), x26); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x32, &x33, 0x0, x22, x28); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x34, &x35, 0x0, (((uint32_t)x33 + x23) + x29), (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x36, &x37, x34, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x38, &x39, x36, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x40, &x41, x36, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x42, &x43, 0x0, (x31 + x27), x38); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x44, &x45, 0x0, x34, x40); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x46, &x47, 0x0, (((uint32_t)x45 + x35) + x41), (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x48, &x49, x46, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x50, &x51, x48, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x52, &x53, x48, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x54, &x55, 0x0, (x43 + x39), x50); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x56, &x57, 0x0, x46, x52); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x58, &x59, 0x0, (((uint32_t)x57 + x47) + x53), (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x60, &x61, x58, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x62, &x63, x60, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x64, &x65, x60, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x66, &x67, 0x0, (x55 + x51), x62); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x68, &x69, 0x0, x58, x64); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x70, &x71, 0x0, (((uint32_t)x69 + x59) + x65), (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x72, &x73, x71, x4, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x74, &x75, x73, x18, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x76, &x77, x75, x30, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x78, &x79, x77, x42, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x80, &x81, x79, x54, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x82, &x83, x81, x66, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x84, &x85, x70, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x86, &x87, x84, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x88, &x89, x84, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x90, &x91, 0x0, x70, x88); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x92, &x93, x91, x72, x89); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x94, &x95, x93, x74, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x96, &x97, x95, x76, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x98, &x99, x97, x78, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x100, &x101, x99, x80, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x102, &x103, x101, x82, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x104, &x105, x103, (x83 + (x67 + x63)), x86); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x106, &x107, 0x0, x92, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x108, &x109, x107, x94, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x110, &x111, x109, x96, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x112, &x113, x111, x98, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x114, &x115, x113, x100, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x116, &x117, x115, x102, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x118, &x119, x117, x104, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x120, &x121, x106, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x122, &x123, x120, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x124, &x125, x120, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x126, &x127, 0x0, x106, x124); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x128, &x129, x127, x108, x125); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x130, &x131, x129, x110, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x132, &x133, x131, x112, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x134, &x135, x133, x114, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x136, &x137, x135, x116, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x138, &x139, x137, x118, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x140, &x141, x139, (x119 + (x105 + x87)), x122); x142 = (x141 + x123); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x143, &x144, 0x0, x128, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x145, &x146, x144, x130, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x147, &x148, x146, x132, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x149, &x150, x148, x134, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x151, &x152, x150, x136, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x153, &x154, x152, x138, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x155, &x156, x154, x140, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x157, &x158, x156, x142, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x159, &x160, x158, 0x0, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x161, x160, x143, x128); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x162, x160, x145, x130); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x163, x160, x147, x132); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x164, x160, x149, x134); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x165, x160, x151, x136); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x166, x160, x153, x138); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x167, x160, x155, x140); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x168, x160, x157, x142); out1[0] = x161; out1[1] = x162; out1[2] = x163; out1[3] = x164; out1[4] = x165; out1[5] = x166; out1[6] = x167; out1[7] = x168; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery translates a field element into the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery( uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x22; uint32_t x23; uint32_t x24; uint32_t x25; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x28; uint32_t x29; uint32_t x30; uint32_t x31; uint32_t x32; uint32_t x33; uint32_t x34; uint32_t x35; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x36; uint32_t x37; uint32_t x38; uint32_t x39; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x40; uint32_t x41; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x50; uint32_t x51; uint32_t x52; uint32_t x53; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x54; uint32_t x55; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x56; uint32_t x57; uint32_t x58; uint32_t x59; uint32_t x60; uint32_t x61; uint32_t x62; uint32_t x63; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x64; uint32_t x65; uint32_t x66; uint32_t x67; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x68; uint32_t x69; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x70; uint32_t x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x78; uint32_t x79; uint32_t x80; uint32_t x81; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x82; uint32_t x83; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x84; uint32_t x85; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x86; uint32_t x87; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x88; uint32_t x89; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x90; uint32_t x91; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x92; uint32_t x93; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x94; uint32_t x95; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x96; uint32_t x97; uint32_t x98; uint32_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x104; uint32_t x105; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x106; uint32_t x107; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x108; uint32_t x109; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x110; uint32_t x111; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x112; uint32_t x113; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x114; uint32_t x115; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x116; uint32_t x117; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x118; uint32_t x119; uint32_t x120; uint32_t x121; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x122; uint32_t x123; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x124; uint32_t x125; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x126; uint32_t x127; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x128; uint32_t x129; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x130; uint32_t x131; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x132; uint32_t x133; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x134; uint32_t x135; uint32_t x136; uint32_t x137; uint32_t x138; uint32_t x139; uint32_t x140; uint32_t x141; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x142; uint32_t x143; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x144; uint32_t x145; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x146; uint32_t x147; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x148; uint32_t x149; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x150; uint32_t x151; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x152; uint32_t x153; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x154; uint32_t x155; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x156; uint32_t x157; uint32_t x158; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x159; uint32_t x160; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x161; uint32_t x162; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x163; uint32_t x164; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x165; uint32_t x166; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x167; uint32_t x168; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x169; uint32_t x170; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x171; uint32_t x172; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x173; uint32_t x174; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 x175; uint32_t x176; uint32_t x177; uint32_t x178; uint32_t x179; uint32_t x180; uint32_t x181; uint32_t x182; uint32_t x183; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x1, &x2, (arg1[0]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x3, &x4, x1, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x5, &x6, x3, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x7, &x8, x3, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x9, &x10, (arg1[1]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x11, &x12, 0x0, x1, x7); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x13, &x14, 0x0, ((x12 + x2) + x8), x9); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x15, &x16, x13, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x17, &x18, x15, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x19, &x20, x15, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x21, &x22, 0x0, x6, x17); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x23, &x24, (arg1[2]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x25, &x26, 0x0, x13, x19); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x27, &x28, 0x0, ((x26 + (x14 + x10)) + x20), x23); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x29, &x30, x27, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x31, &x32, x29, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x33, &x34, x29, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x35, &x36, 0x0, (x22 + x18), x31); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x37, &x38, (arg1[3]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x39, &x40, 0x0, x27, x33); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x41, &x42, 0x0, ((x40 + (x28 + x24)) + x34), x37); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x43, &x44, x41, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x45, &x46, x43, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x47, &x48, x43, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x49, &x50, 0x0, (x36 + x32), x45); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x51, &x52, (arg1[4]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x53, &x54, 0x0, x41, x47); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x55, &x56, 0x0, ((x54 + (x42 + x38)) + x48), x51); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x57, &x58, x55, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x59, &x60, x57, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x61, &x62, x57, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x63, &x64, 0x0, (x50 + x46), x59); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x65, &x66, (arg1[5]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x67, &x68, 0x0, x55, x61); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x69, &x70, 0x0, ((x68 + (x56 + x52)) + x62), x65); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x71, &x72, x69, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x73, &x74, x71, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x75, &x76, x71, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x77, &x78, 0x0, (x64 + x60), x73); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x79, &x80, (arg1[6]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x81, &x82, 0x0, x69, x75); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x83, &x84, 0x0, ((x82 + (x70 + x66)) + x76), x79); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x85, &x86, x84, x5, x80); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x87, &x88, x86, x21, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x89, &x90, x88, x35, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x91, &x92, x90, x49, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x93, &x94, x92, x63, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x95, &x96, x94, x77, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x97, &x98, x83, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x99, &x100, x97, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x101, &x102, x97, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x103, &x104, 0x0, x83, x101); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x105, &x106, x104, x85, x102); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x107, &x108, x106, x87, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x109, &x110, x108, x89, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x111, &x112, x110, x91, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x113, &x114, x112, x93, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x115, &x116, x114, x95, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x117, &x118, x116, (x96 + (x78 + x74)), x99); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32( &x119, &x120, (arg1[7]), UINT32_C(0x27acdc4)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x121, &x122, 0x0, x105, x119); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x123, &x124, x122, x107, x120); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x125, &x126, x124, x109, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x127, &x128, x126, x111, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x129, &x130, x128, x113, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x131, &x132, x130, x115, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x133, &x134, x132, x117, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x135, &x136, x121, UINT32_C(0xa3347857)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x137, &x138, x135, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mulx_u32(&x139, &x140, x135, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x141, &x142, 0x0, x121, x139); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x143, &x144, x142, x123, x140); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x145, &x146, x144, x125, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x147, &x148, x146, x127, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x149, &x150, x148, x129, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x151, &x152, x150, x131, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32(&x153, &x154, x152, x133, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_addcarryx_u32( &x155, &x156, x154, (x134 + (x118 + x100)), x137); x157 = (x156 + x138); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x158, &x159, 0x0, x143, UINT16_C(0xc99)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x160, &x161, x159, x145, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x162, &x163, x161, x147, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x164, &x165, x163, x149, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x166, &x167, x165, x151, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x168, &x169, x167, x153, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x170, &x171, x169, x155, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32( &x172, &x173, x171, x157, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_subborrowx_u32(&x174, &x175, x173, 0x0, 0x0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x176, x175, x158, x143); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x177, x175, x160, x145); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x178, x175, x162, x147); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x179, x175, x164, x149); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x180, x175, x166, x151); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x181, x175, x168, x153); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x182, x175, x170, x155); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32(&x183, x175, x172, x157); out1[0] = x176; out1[1] = x177; out1[2] = x178; out1[3] = x179; out1[4] = x180; out1[5] = x181; out1[6] = x182; out1[7] = x183; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_nonzero( uint32_t *out1, const uint32_t arg1[8]) { uint32_t x1; x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | (arg1[7])))))))); *out1 = x1; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( uint32_t out1[8], fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_uint1 arg1, const uint32_t arg2[8], const uint32_t arg3[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( &x1, arg1, (arg2[0]), (arg3[0])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( &x2, arg1, (arg2[1]), (arg3[1])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( &x3, arg1, (arg2[2]), (arg3[2])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( &x4, arg1, (arg2[3]), (arg3[3])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( &x5, arg1, (arg2[4]), (arg3[4])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( &x6, arg1, (arg2[5]), (arg3[5])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( &x7, arg1, (arg2[6]), (arg3[6])); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_cmovznz_u32( &x8, arg1, (arg2[7]), (arg3[7])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes( uint8_t out1[32], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint8_t x9; uint32_t x10; uint8_t x11; uint32_t x12; uint8_t x13; uint8_t x14; uint8_t x15; uint32_t x16; uint8_t x17; uint32_t x18; uint8_t x19; uint8_t x20; uint8_t x21; uint32_t x22; uint8_t x23; uint32_t x24; uint8_t x25; uint8_t x26; uint8_t x27; uint32_t x28; uint8_t x29; uint32_t x30; uint8_t x31; uint8_t x32; uint8_t x33; uint32_t x34; uint8_t x35; uint32_t x36; uint8_t x37; uint8_t x38; uint8_t x39; uint32_t x40; uint8_t x41; uint32_t x42; uint8_t x43; uint8_t x44; uint8_t x45; uint32_t x46; uint8_t x47; uint32_t x48; uint8_t x49; uint8_t x50; uint8_t x51; uint32_t x52; uint8_t x53; uint32_t x54; uint8_t x55; uint8_t x56; x1 = (arg1[7]); x2 = (arg1[6]); x3 = (arg1[5]); x4 = (arg1[4]); x5 = (arg1[3]); x6 = (arg1[2]); x7 = (arg1[1]); x8 = (arg1[0]); x9 = (uint8_t)(x8 & UINT8_C(0xff)); x10 = (x8 >> 8); x11 = (uint8_t)(x10 & UINT8_C(0xff)); x12 = (x10 >> 8); x13 = (uint8_t)(x12 & UINT8_C(0xff)); x14 = (uint8_t)(x12 >> 8); x15 = (uint8_t)(x7 & UINT8_C(0xff)); x16 = (x7 >> 8); x17 = (uint8_t)(x16 & UINT8_C(0xff)); x18 = (x16 >> 8); x19 = (uint8_t)(x18 & UINT8_C(0xff)); x20 = (uint8_t)(x18 >> 8); x21 = (uint8_t)(x6 & UINT8_C(0xff)); x22 = (x6 >> 8); x23 = (uint8_t)(x22 & UINT8_C(0xff)); x24 = (x22 >> 8); x25 = (uint8_t)(x24 & UINT8_C(0xff)); x26 = (uint8_t)(x24 >> 8); x27 = (uint8_t)(x5 & UINT8_C(0xff)); x28 = (x5 >> 8); x29 = (uint8_t)(x28 & UINT8_C(0xff)); x30 = (x28 >> 8); x31 = (uint8_t)(x30 & UINT8_C(0xff)); x32 = (uint8_t)(x30 >> 8); x33 = (uint8_t)(x4 & UINT8_C(0xff)); x34 = (x4 >> 8); x35 = (uint8_t)(x34 & UINT8_C(0xff)); x36 = (x34 >> 8); x37 = (uint8_t)(x36 & UINT8_C(0xff)); x38 = (uint8_t)(x36 >> 8); x39 = (uint8_t)(x3 & UINT8_C(0xff)); x40 = (x3 >> 8); x41 = (uint8_t)(x40 & UINT8_C(0xff)); x42 = (x40 >> 8); x43 = (uint8_t)(x42 & UINT8_C(0xff)); x44 = (uint8_t)(x42 >> 8); x45 = (uint8_t)(x2 & UINT8_C(0xff)); x46 = (x2 >> 8); x47 = (uint8_t)(x46 & UINT8_C(0xff)); x48 = (x46 >> 8); x49 = (uint8_t)(x48 & UINT8_C(0xff)); x50 = (uint8_t)(x48 >> 8); x51 = (uint8_t)(x1 & UINT8_C(0xff)); x52 = (x1 >> 8); x53 = (uint8_t)(x52 & UINT8_C(0xff)); x54 = (x52 >> 8); x55 = (uint8_t)(x54 & UINT8_C(0xff)); x56 = (uint8_t)(x54 >> 8); out1[0] = x9; out1[1] = x11; out1[2] = x13; out1[3] = x14; out1[4] = x15; out1[5] = x17; out1[6] = x19; out1[7] = x20; out1[8] = x21; out1[9] = x23; out1[10] = x25; out1[11] = x26; out1[12] = x27; out1[13] = x29; out1[14] = x31; out1[15] = x32; out1[16] = x33; out1[17] = x35; out1[18] = x37; out1[19] = x38; out1[20] = x39; out1[21] = x41; out1[22] = x43; out1[23] = x44; out1[24] = x45; out1[25] = x47; out1[26] = x49; out1[27] = x50; out1[28] = x51; out1[29] = x53; out1[30] = x55; out1[31] = x56; } /* * The function fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. * Preconditions: * 0 ≤ bytes_eval arg1 < m * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes( uint32_t out1[8], const uint8_t arg1[32]) { uint32_t x1; uint32_t x2; uint32_t x3; uint8_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint8_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint8_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint8_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint8_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint8_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint8_t x28; uint32_t x29; uint32_t x30; uint32_t x31; uint8_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; uint32_t x55; uint32_t x56; x1 = ((uint32_t)(arg1[31]) << 24); x2 = ((uint32_t)(arg1[30]) << 16); x3 = ((uint32_t)(arg1[29]) << 8); x4 = (arg1[28]); x5 = ((uint32_t)(arg1[27]) << 24); x6 = ((uint32_t)(arg1[26]) << 16); x7 = ((uint32_t)(arg1[25]) << 8); x8 = (arg1[24]); x9 = ((uint32_t)(arg1[23]) << 24); x10 = ((uint32_t)(arg1[22]) << 16); x11 = ((uint32_t)(arg1[21]) << 8); x12 = (arg1[20]); x13 = ((uint32_t)(arg1[19]) << 24); x14 = ((uint32_t)(arg1[18]) << 16); x15 = ((uint32_t)(arg1[17]) << 8); x16 = (arg1[16]); x17 = ((uint32_t)(arg1[15]) << 24); x18 = ((uint32_t)(arg1[14]) << 16); x19 = ((uint32_t)(arg1[13]) << 8); x20 = (arg1[12]); x21 = ((uint32_t)(arg1[11]) << 24); x22 = ((uint32_t)(arg1[10]) << 16); x23 = ((uint32_t)(arg1[9]) << 8); x24 = (arg1[8]); x25 = ((uint32_t)(arg1[7]) << 24); x26 = ((uint32_t)(arg1[6]) << 16); x27 = ((uint32_t)(arg1[5]) << 8); x28 = (arg1[4]); x29 = ((uint32_t)(arg1[3]) << 24); x30 = ((uint32_t)(arg1[2]) << 16); x31 = ((uint32_t)(arg1[1]) << 8); x32 = (arg1[0]); x33 = (x31 + (uint32_t)x32); x34 = (x30 + x33); x35 = (x29 + x34); x36 = (x27 + (uint32_t)x28); x37 = (x26 + x36); x38 = (x25 + x37); x39 = (x23 + (uint32_t)x24); x40 = (x22 + x39); x41 = (x21 + x40); x42 = (x19 + (uint32_t)x20); x43 = (x18 + x42); x44 = (x17 + x43); x45 = (x15 + (uint32_t)x16); x46 = (x14 + x45); x47 = (x13 + x46); x48 = (x11 + (uint32_t)x12); x49 = (x10 + x48); x50 = (x9 + x49); x51 = (x7 + (uint32_t)x8); x52 = (x6 + x51); x53 = (x5 + x52); x54 = (x3 + (uint32_t)x4); x55 = (x2 + x54); x56 = (x1 + x55); out1[0] = x35; out1[1] = x38; out1[2] = x41; out1[3] = x44; out1[4] = x47; out1[5] = x50; out1[6] = x53; out1[7] = x56; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_GostR3410_2001_CryptoPro_B_ParamSet/fe_inv.op3 * sliding window w=5 */ static void fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t23, t25; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(acc, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t25, t1, acc); for (i = 0; i < 9; i++) fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t25, t25, acc); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t23, t25, acc); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t25, t23, acc); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(acc, t1); for (i = 0; i < 247; i++) fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(acc, acc, t25); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(output, acc, t23); } /* curve coefficient constants */ static const limb_t const_one[8] = {UINT32_C(0xFFFFF367), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0x7FFFFFFF)}; static const limb_t const_b[8] = {UINT32_C(0xA9C5A084), UINT32_C(0x8DCC455A), UINT32_C(0x6CF438A8), UINT32_C(0x91AB42DF), UINT32_C(0xEEAC7D11), UINT32_C(0x8F8AA907), UINT32_C(0xF6285375), UINT32_C(0x3CE5D221)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[27][16] = { { {{UINT32_C(0xFFFFF367), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0x7FFFFFFF)}, {UINT32_C(0x570C7410), UINT32_C(0xDDDC64B3), UINT32_C(0x13172887), UINT32_C(0xA7B09925), UINT32_C(0x4B6382DB), UINT32_C(0x0C4E5C4C), UINT32_C(0x124768DE), UINT32_C(0x2763DB0F)}}, {{UINT32_C(0x8457D15D), UINT32_C(0xCD3E57B6), UINT32_C(0xBEA56E83), UINT32_C(0xEB688F7F), UINT32_C(0x6A13C5CE), UINT32_C(0x235A123C), UINT32_C(0x50F57A6D), UINT32_C(0x0CD7EB9D)}, {UINT32_C(0x544C1965), UINT32_C(0xC0124E91), UINT32_C(0x62AFA35E), UINT32_C(0x4D9C1729), UINT32_C(0x0037C554), UINT32_C(0x0F92F2C3), UINT32_C(0x0A3F2665), UINT32_C(0x1D899868)}}, {{UINT32_C(0x55F43EFF), UINT32_C(0x9DE4B213), UINT32_C(0x5C9E63F5), UINT32_C(0x2E110A42), UINT32_C(0x1CE5A6DF), UINT32_C(0x9350A9C3), UINT32_C(0xA332315E), UINT32_C(0x377CBF0B)}, {UINT32_C(0x20F0D1B5), UINT32_C(0x2805DD48), UINT32_C(0x0F9723E5), UINT32_C(0x3B197566), UINT32_C(0x84B79937), UINT32_C(0xA1CCA78C), UINT32_C(0x94D5E03D), UINT32_C(0x4F87BB1B)}}, {{UINT32_C(0x5652C96F), UINT32_C(0xE428FBFB), UINT32_C(0xD261BDD1), UINT32_C(0x2E9A14D2), UINT32_C(0x7453B76A), UINT32_C(0x082D8296), UINT32_C(0x7AC87B02), UINT32_C(0x61EA580E)}, {UINT32_C(0xCF368FDB), UINT32_C(0xA0F8C2BA), UINT32_C(0xD73B2A28), UINT32_C(0xDF093380), UINT32_C(0xEA8FE5D2), UINT32_C(0xFA0928B2), UINT32_C(0x5F86D38A), UINT32_C(0x77A67492)}}, {{UINT32_C(0x27670451), UINT32_C(0xDFFAB410), UINT32_C(0x1200AD3A), UINT32_C(0xEBC3D017), UINT32_C(0x25F4F6C4), UINT32_C(0xF68324F3), UINT32_C(0x7D0EAFD0), UINT32_C(0x4A24CD5F)}, {UINT32_C(0xD3F6BD1C), UINT32_C(0xF8FBD489), UINT32_C(0x67B473DE), UINT32_C(0x0F6B56D5), UINT32_C(0xCACF0D6B), UINT32_C(0x6FB063DE), UINT32_C(0x96DC574B), UINT32_C(0x27F2E7E9)}}, {{UINT32_C(0x93937228), UINT32_C(0xA6A10645), UINT32_C(0xA9165BBB), UINT32_C(0xAB7550B4), UINT32_C(0xCB0EDBE8), UINT32_C(0xD682D4F1), UINT32_C(0x40E5AD8D), UINT32_C(0x2261FCEC)}, {UINT32_C(0xCCBD4E18), UINT32_C(0x9F2119C6), UINT32_C(0xAAB09697), UINT32_C(0x2FD094E9), UINT32_C(0xE700929E), UINT32_C(0x00331713), UINT32_C(0x54338FE1), UINT32_C(0x6C5F2EFE)}}, {{UINT32_C(0x42FFF78A), UINT32_C(0xD6314017), UINT32_C(0x2087E055), UINT32_C(0x38F23A91), UINT32_C(0x10EF1CAC), UINT32_C(0xE30E809C), UINT32_C(0x2432FF74), UINT32_C(0x3BCB0A54)}, {UINT32_C(0xB31509E6), UINT32_C(0x2B4B5B97), UINT32_C(0x3E54AF47), UINT32_C(0x117FE9D7), UINT32_C(0x52F63ACA), UINT32_C(0xE513C0BE), UINT32_C(0xB1C80A6B), UINT32_C(0x41ED8ADA)}}, {{UINT32_C(0xE0A79FCD), UINT32_C(0x61A31837), UINT32_C(0x51D3DE38), UINT32_C(0x8F742B57), UINT32_C(0x41354B55), UINT32_C(0x10635FCD), UINT32_C(0x946510BE), UINT32_C(0x61F30C61)}, {UINT32_C(0x6C416DAC), UINT32_C(0x9183D677), UINT32_C(0x345431CB), UINT32_C(0x391B7B42), UINT32_C(0x7C254A8D), UINT32_C(0xE3D6F084), UINT32_C(0x19D320D8), UINT32_C(0x777E1F62)}}, {{UINT32_C(0xF05BD85D), UINT32_C(0x090E633F), UINT32_C(0x240392ED), UINT32_C(0x546C41A0), UINT32_C(0x9F4139CA), UINT32_C(0x6BBCF15D), UINT32_C(0x7FFDA5DA), UINT32_C(0x73F5B657)}, {UINT32_C(0xE0622A57), UINT32_C(0xBC04E353), UINT32_C(0x6E6414F4), UINT32_C(0xCBD8F01E), UINT32_C(0x8C3C0CC5), UINT32_C(0x53377C0B), UINT32_C(0xE0A14548), UINT32_C(0x6D302331)}}, {{UINT32_C(0x3D6D456E), UINT32_C(0x235487F8), UINT32_C(0xB3FDCDCF), UINT32_C(0xBD92203D), UINT32_C(0xCFFDA977), UINT32_C(0x15B13D60), UINT32_C(0x31A1C4B5), UINT32_C(0x22DCB487)}, {UINT32_C(0xC76ED9A2), UINT32_C(0xA367FB4E), UINT32_C(0xC0C86AF4), UINT32_C(0x1E4F7956), UINT32_C(0x5B012AD7), UINT32_C(0x6F087C49), UINT32_C(0x4949B444), UINT32_C(0x33437E4A)}}, {{UINT32_C(0xB7CDDB38), UINT32_C(0x261B44FE), UINT32_C(0x419216AD), UINT32_C(0xDCE2FE47), UINT32_C(0x9428657B), UINT32_C(0xA4CE17FF), UINT32_C(0xF8329049), UINT32_C(0x7CE64F48)}, {UINT32_C(0x7289C114), UINT32_C(0x4CE74211), UINT32_C(0x8C212A23), UINT32_C(0x0E622409), UINT32_C(0x2096719D), UINT32_C(0xCF75BF45), UINT32_C(0x7BDC1600), UINT32_C(0x6F553581)}}, {{UINT32_C(0xB941CBC9), UINT32_C(0xE776AA0C), UINT32_C(0x951AAED3), UINT32_C(0x16D670E0), UINT32_C(0x4B1EC097), UINT32_C(0x79C019DF), UINT32_C(0x12266D30), UINT32_C(0x635A66BB)}, {UINT32_C(0x023AAFD2), UINT32_C(0x030D843E), UINT32_C(0x6466108F), UINT32_C(0x10FB6157), UINT32_C(0x08D568D5), UINT32_C(0x93774BEC), UINT32_C(0x04C1EE73), UINT32_C(0x29D27962)}}, {{UINT32_C(0xE00BBC21), UINT32_C(0x6F0F4C2E), UINT32_C(0xA30AB92F), UINT32_C(0x9EB34C58), UINT32_C(0xAE34908B), UINT32_C(0x2153D901), UINT32_C(0x4EDC188F), UINT32_C(0x136A7E1F)}, {UINT32_C(0x8BC45EE4), UINT32_C(0xF709BF5D), UINT32_C(0x4FAD9A54), UINT32_C(0xEA6984E4), UINT32_C(0xAF5140EB), UINT32_C(0xFC8E6F8A), UINT32_C(0x87756E47), UINT32_C(0x25EBF0DE)}}, {{UINT32_C(0x5B1D4B9F), UINT32_C(0x5C2A9726), UINT32_C(0x68E93FC7), UINT32_C(0xBE235DFD), UINT32_C(0x471A4EA0), UINT32_C(0x7766BDB9), UINT32_C(0xD9909CD9), UINT32_C(0x476D17CC)}, {UINT32_C(0x7B398BC4), UINT32_C(0x4960E5B4), UINT32_C(0x0F58F328), UINT32_C(0x909D0F17), UINT32_C(0x230EF508), UINT32_C(0x1ABF7E02), UINT32_C(0xD29239C9), UINT32_C(0x6DE6B3E1)}}, {{UINT32_C(0x85A6DBE3), UINT32_C(0xCCF0AA28), UINT32_C(0x823C606C), UINT32_C(0xA5E4B325), UINT32_C(0x15505FC6), UINT32_C(0xADE98B2A), UINT32_C(0x02E20C3B), UINT32_C(0x4D4E7703)}, {UINT32_C(0x4730DF64), UINT32_C(0x24196417), UINT32_C(0xA914A59D), UINT32_C(0x3DD47817), UINT32_C(0xC4FDFD97), UINT32_C(0x4D7A317E), UINT32_C(0xBE12AA72), UINT32_C(0x3767E545)}}, {{UINT32_C(0x165C7BF4), UINT32_C(0xA0C2A028), UINT32_C(0x36A0B483), UINT32_C(0xCD4DA6EA), UINT32_C(0x3AF53195), UINT32_C(0x1E1E6332), UINT32_C(0x8D77188F), UINT32_C(0x7A025E23)}, {UINT32_C(0x08D2CEF2), UINT32_C(0xB3CF03B9), UINT32_C(0x25A0AFA6), UINT32_C(0x8FEE9BB8), UINT32_C(0x88111895), UINT32_C(0x855340E0), UINT32_C(0x4FB8F8A3), UINT32_C(0x32E3EF01)}}, }, { {{UINT32_C(0xEBF87807), UINT32_C(0x33EBE39D), UINT32_C(0xDBDEFF76), UINT32_C(0xB048F96C), UINT32_C(0x342A3087), UINT32_C(0xA0496C3C), UINT32_C(0x50953679), UINT32_C(0x7623E192)}, {UINT32_C(0x4B932390), UINT32_C(0x12F76711), UINT32_C(0xACECE2F7), UINT32_C(0xF80851EA), UINT32_C(0xE5B280EA), UINT32_C(0xE447465B), UINT32_C(0x11115958), UINT32_C(0x0412ADE8)}}, {{UINT32_C(0xB5EB0DC2), UINT32_C(0x982F1AC8), UINT32_C(0xBBBCC880), UINT32_C(0x8464E052), UINT32_C(0x01335D53), UINT32_C(0xC927B596), UINT32_C(0x4DA4D80B), UINT32_C(0x4B0C6F5A)}, {UINT32_C(0xE04783AF), UINT32_C(0x101E1878), UINT32_C(0x41D8A690), UINT32_C(0x50458FFC), UINT32_C(0x1B77DFBF), UINT32_C(0x11499D88), UINT32_C(0x1F77A937), UINT32_C(0x46DC7D22)}}, {{UINT32_C(0x620E52C0), UINT32_C(0xE9AD22CE), UINT32_C(0x4140F356), UINT32_C(0x0990D6AA), UINT32_C(0x0CBBEEE5), UINT32_C(0x0F6B2EF7), UINT32_C(0xEAD414C6), UINT32_C(0x2C67DC80)}, {UINT32_C(0x23D4CD20), UINT32_C(0xE17182BC), UINT32_C(0xC13DDEA9), UINT32_C(0xFC8FE3CB), UINT32_C(0x3BABC06D), UINT32_C(0xD1E4A7B8), UINT32_C(0x71C06DB7), UINT32_C(0x52EA05CC)}}, {{UINT32_C(0x0D022B5B), UINT32_C(0xF8ABB770), UINT32_C(0x199DC689), UINT32_C(0x362B8059), UINT32_C(0x26BBDEC8), UINT32_C(0x5D887A4D), UINT32_C(0xF7FC2A01), UINT32_C(0x7835F183)}, {UINT32_C(0xDE99DF34), UINT32_C(0xEEDE12F5), UINT32_C(0xA3082301), UINT32_C(0xBE952638), UINT32_C(0x4C35A162), UINT32_C(0x829FDF80), UINT32_C(0xC2B9645E), UINT32_C(0x205A2252)}}, {{UINT32_C(0x1356E14C), UINT32_C(0xDE284DA9), UINT32_C(0xC37415FE), UINT32_C(0xE40CEFE0), UINT32_C(0x47F6016E), UINT32_C(0x62BE93E9), UINT32_C(0x5DBFE2F6), UINT32_C(0x2DD98904)}, {UINT32_C(0x2EBC70F9), UINT32_C(0x195B0E98), UINT32_C(0xF01F4D43), UINT32_C(0x7E52840D), UINT32_C(0x4B1F6AB4), UINT32_C(0x1AFB1FDF), UINT32_C(0x20B3E491), UINT32_C(0x050AABB8)}}, {{UINT32_C(0xC645DAD4), UINT32_C(0xC59E1EDB), UINT32_C(0x565A286D), UINT32_C(0x5AF6B2DC), UINT32_C(0x13076366), UINT32_C(0xC399A48A), UINT32_C(0x4AC0E5B9), UINT32_C(0x19F4881F)}, {UINT32_C(0xCD5AC339), UINT32_C(0xC07D02A1), UINT32_C(0xED628A55), UINT32_C(0x18FBD088), UINT32_C(0xFFA4788E), UINT32_C(0x2D33C6F4), UINT32_C(0xCCB832E7), UINT32_C(0x52E9AE42)}}, {{UINT32_C(0x4E5E934E), UINT32_C(0xA47091AE), UINT32_C(0x91CED3C6), UINT32_C(0x2542CE13), UINT32_C(0x8FC47857), UINT32_C(0xDDE01FD5), UINT32_C(0x4304EAA9), UINT32_C(0x6BA6E569)}, {UINT32_C(0xE24091A9), UINT32_C(0x2FF0278B), UINT32_C(0x782BBCE0), UINT32_C(0xB895F0AB), UINT32_C(0xAB8B8828), UINT32_C(0xA80CCC97), UINT32_C(0x68A7D8FE), UINT32_C(0x6A54B961)}}, {{UINT32_C(0xBAC4581A), UINT32_C(0x15E1F5AD), UINT32_C(0xD4BAA751), UINT32_C(0x91620EF0), UINT32_C(0xC7273C4D), UINT32_C(0x4E65731F), UINT32_C(0x7EEE33B5), UINT32_C(0x14B166CB)}, {UINT32_C(0x3CD06080), UINT32_C(0x7B0EFFA5), UINT32_C(0x8CF95FF9), UINT32_C(0x4491156A), UINT32_C(0xE2258574), UINT32_C(0xC8C64C39), UINT32_C(0x13315CE9), UINT32_C(0x3D48DA9D)}}, {{UINT32_C(0x99866CE5), UINT32_C(0x97A098A3), UINT32_C(0x023A1167), UINT32_C(0xF4CCDB40), UINT32_C(0xF8094782), UINT32_C(0x4BB32981), UINT32_C(0xC7D5FD13), UINT32_C(0x7342CC98)}, {UINT32_C(0x78B99D4E), UINT32_C(0x3C1C5B18), UINT32_C(0xF4762AC9), UINT32_C(0x1277668F), UINT32_C(0x6AE50E4F), UINT32_C(0x612431D7), UINT32_C(0x36F9071C), UINT32_C(0x36C174E0)}}, {{UINT32_C(0x9327BA7F), UINT32_C(0x39194E87), UINT32_C(0x7237FA1A), UINT32_C(0xC4D251FF), UINT32_C(0x2BA5EB8D), UINT32_C(0x55ED3CD4), UINT32_C(0xBA590188), UINT32_C(0x0263AF07)}, {UINT32_C(0xEFA82CF3), UINT32_C(0xB4853127), UINT32_C(0x2B8E761D), UINT32_C(0x2CC2D220), UINT32_C(0x2722B490), UINT32_C(0x4582B81E), UINT32_C(0x610AA621), UINT32_C(0x1DA7680A)}}, {{UINT32_C(0x30D297D4), UINT32_C(0x06A669EE), UINT32_C(0xE133D393), UINT32_C(0xC336B048), UINT32_C(0x93B7B41B), UINT32_C(0xB733A2C4), UINT32_C(0xC7A8E721), UINT32_C(0x427CC233)}, {UINT32_C(0x2867BB00), UINT32_C(0x727C14F1), UINT32_C(0xA736035E), UINT32_C(0x756F4C7A), UINT32_C(0x26327A22), UINT32_C(0xB72A3EDE), UINT32_C(0x77F73F28), UINT32_C(0x4AEDE2BB)}}, {{UINT32_C(0xA7282ED0), UINT32_C(0xC8A3612F), UINT32_C(0xB0150579), UINT32_C(0xE4AD8B40), UINT32_C(0x0C3FEE4B), UINT32_C(0xAB1DE11D), UINT32_C(0x33B31F23), UINT32_C(0x613AAD48)}, {UINT32_C(0x5C91BD21), UINT32_C(0xE74AB856), UINT32_C(0x7953D695), UINT32_C(0x49917735), UINT32_C(0x1A53D74F), UINT32_C(0x3831EB60), UINT32_C(0x54DEB1A6), UINT32_C(0x245977A0)}}, {{UINT32_C(0xFFFC1468), UINT32_C(0x15972E4D), UINT32_C(0x141DC24C), UINT32_C(0xA758D9CB), UINT32_C(0xED8694C5), UINT32_C(0x5E76FCDF), UINT32_C(0x069B7A5E), UINT32_C(0x5F9DAF35)}, {UINT32_C(0x501B5415), UINT32_C(0xFE50FCE4), UINT32_C(0x58CFDE50), UINT32_C(0x6442CF67), UINT32_C(0x38E5F4D0), UINT32_C(0xA89C6DB4), UINT32_C(0xF5D4FEFC), UINT32_C(0x21F012DB)}}, {{UINT32_C(0x98CB9A81), UINT32_C(0x2A1170AD), UINT32_C(0x036C5E45), UINT32_C(0x934BD9D5), UINT32_C(0xCA5095B1), UINT32_C(0x27DF152E), UINT32_C(0xCCEEE508), UINT32_C(0x682698DB)}, {UINT32_C(0xB973FB5F), UINT32_C(0x1F4FE3A2), UINT32_C(0x792C7D4D), UINT32_C(0xD33CBEBE), UINT32_C(0xE7B33A8F), UINT32_C(0x99D37961), UINT32_C(0x7B6D015D), UINT32_C(0x46B8993B)}}, {{UINT32_C(0x6FBAC8F7), UINT32_C(0x93A3809B), UINT32_C(0x97C55DC4), UINT32_C(0x84861BF0), UINT32_C(0x15BB65E3), UINT32_C(0xA6F89EEA), UINT32_C(0xA6E531D1), UINT32_C(0x66AE1C5D)}, {UINT32_C(0xFD83DAEA), UINT32_C(0x643A14FC), UINT32_C(0xC585947B), UINT32_C(0xA7A46D0D), UINT32_C(0x4FBA1274), UINT32_C(0xFA20CF07), UINT32_C(0x93578A7D), UINT32_C(0x5999ED7B)}}, {{UINT32_C(0x78E7C6CE), UINT32_C(0x36C8B6ED), UINT32_C(0x5E325F44), UINT32_C(0x6D400CA5), UINT32_C(0x20B7AA5C), UINT32_C(0xC6AE09B3), UINT32_C(0x89EABC17), UINT32_C(0x1AF261C1)}, {UINT32_C(0xB9E778E4), UINT32_C(0x64D6FFBB), UINT32_C(0x7FC64BEB), UINT32_C(0x1C9E223E), UINT32_C(0x5D75E6C0), UINT32_C(0x4D68B520), UINT32_C(0x76677A06), UINT32_C(0x5A72B1D9)}}, }, { {{UINT32_C(0x6F08BB17), UINT32_C(0x62DB6640), UINT32_C(0xAE75BB73), UINT32_C(0xC34F29DF), UINT32_C(0x7DBD4851), UINT32_C(0xD501293D), UINT32_C(0xAD1F604B), UINT32_C(0x5EAA94CA)}, {UINT32_C(0x094408A8), UINT32_C(0x39CFE9D1), UINT32_C(0xE8A476F2), UINT32_C(0xC0F6544C), UINT32_C(0xA42D7607), UINT32_C(0x9F6308B6), UINT32_C(0xD727018F), UINT32_C(0x17F82949)}}, {{UINT32_C(0x9C4C4BD2), UINT32_C(0xC44453CD), UINT32_C(0xEBD0B947), UINT32_C(0xA895E247), UINT32_C(0xAEBC27F4), UINT32_C(0x0AEB7AFC), UINT32_C(0xF04ABFAC), UINT32_C(0x2472FD08)}, {UINT32_C(0x73E6E994), UINT32_C(0x319EC67D), UINT32_C(0x798C5FC0), UINT32_C(0xD6533E4C), UINT32_C(0x3FB9AA89), UINT32_C(0xF4C3B24D), UINT32_C(0x0A3B376B), UINT32_C(0x3EC58082)}}, {{UINT32_C(0x144ACF7A), UINT32_C(0x79732D6F), UINT32_C(0x911342DD), UINT32_C(0xFDD630C3), UINT32_C(0x4A630649), UINT32_C(0xC577C4B3), UINT32_C(0xBBA999D6), UINT32_C(0x14956A17)}, {UINT32_C(0xA435A559), UINT32_C(0x523D3CC8), UINT32_C(0xACDA8861), UINT32_C(0x488DC690), UINT32_C(0xF051C69A), UINT32_C(0x4CF70928), UINT32_C(0x955394CB), UINT32_C(0x2D98D573)}}, {{UINT32_C(0x23A4B840), UINT32_C(0xEDB7BA2A), UINT32_C(0xF6C2D93B), UINT32_C(0x725EC496), UINT32_C(0x8833BB3F), UINT32_C(0x0C94818B), UINT32_C(0xB142B12A), UINT32_C(0x51281A31)}, {UINT32_C(0x659EDA83), UINT32_C(0x2A8A5706), UINT32_C(0x7F9D6877), UINT32_C(0x3098F750), UINT32_C(0x2171F69F), UINT32_C(0x87AD0FDF), UINT32_C(0x1A6F2F28), UINT32_C(0x6B7067C3)}}, {{UINT32_C(0x12B1E36F), UINT32_C(0x3B521074), UINT32_C(0xF81E4733), UINT32_C(0x727A2432), UINT32_C(0x53F2CBBD), UINT32_C(0xB75A2F35), UINT32_C(0x54960EB0), UINT32_C(0x46DE9338)}, {UINT32_C(0xE561D908), UINT32_C(0xAC5344F8), UINT32_C(0x12C67430), UINT32_C(0x4BD40ECB), UINT32_C(0xEF499F97), UINT32_C(0x1698FD62), UINT32_C(0x6AE9FBD1), UINT32_C(0x29EBD7AE)}}, {{UINT32_C(0x1EC8110D), UINT32_C(0x9DEC249B), UINT32_C(0xFD2F5C39), UINT32_C(0x2D19053A), UINT32_C(0xE01522DF), UINT32_C(0xB1189807), UINT32_C(0xC1424C77), UINT32_C(0x24A04C16)}, {UINT32_C(0x24F72226), UINT32_C(0xA4FC7C7D), UINT32_C(0xA8322501), UINT32_C(0x763405FB), UINT32_C(0x18F015E0), UINT32_C(0xC5443C9A), UINT32_C(0xC55D6CEA), UINT32_C(0x6DEDA19B)}}, {{UINT32_C(0x9EAE2FF9), UINT32_C(0x4EF30976), UINT32_C(0x5741B21B), UINT32_C(0x2549B7F2), UINT32_C(0x3BC23F01), UINT32_C(0x859ACD10), UINT32_C(0xBF5FB0D7), UINT32_C(0x05C0358F)}, {UINT32_C(0xFB6AB34C), UINT32_C(0x85E53AA8), UINT32_C(0x8FD2FD20), UINT32_C(0x8DAAAA69), UINT32_C(0x16096FC9), UINT32_C(0xBE6D4D34), UINT32_C(0xF8B8B831), UINT32_C(0x27572C88)}}, {{UINT32_C(0x47D56A25), UINT32_C(0xADB98DC5), UINT32_C(0x8B8E1DC6), UINT32_C(0x0CC76432), UINT32_C(0xBE48C4A1), UINT32_C(0x032C738E), UINT32_C(0x94FC9CF0), UINT32_C(0x31372DAD)}, {UINT32_C(0x78A7DCB2), UINT32_C(0x8E646A0C), UINT32_C(0x6ECD9885), UINT32_C(0xA32F3E9C), UINT32_C(0x6A3AD963), UINT32_C(0x280BB4AD), UINT32_C(0x817D4327), UINT32_C(0x7DEE1BC4)}}, {{UINT32_C(0xF8A7C1E1), UINT32_C(0x1AE6A27B), UINT32_C(0xCBC527C7), UINT32_C(0x558C652F), UINT32_C(0xA65056F6), UINT32_C(0x4084B56E), UINT32_C(0x6D4C838B), UINT32_C(0x3FD45459)}, {UINT32_C(0x56DE792A), UINT32_C(0xF5C15AFD), UINT32_C(0x88959282), UINT32_C(0xF656FAA4), UINT32_C(0x1C07D63F), UINT32_C(0x7F0D8EF4), UINT32_C(0xCD841ACC), UINT32_C(0x44EFFF7D)}}, {{UINT32_C(0x8D3695D8), UINT32_C(0xAC28F2A6), UINT32_C(0x3F91E781), UINT32_C(0x94959EB8), UINT32_C(0xFEDD6E1F), UINT32_C(0x7693FFF7), UINT32_C(0xA9A699EF), UINT32_C(0x2512E6E1)}, {UINT32_C(0x7955FAB7), UINT32_C(0x823400EB), UINT32_C(0x94924C08), UINT32_C(0xCF109EF9), UINT32_C(0x3A709F32), UINT32_C(0x12E08779), UINT32_C(0x9CC6484C), UINT32_C(0x187D0413)}}, {{UINT32_C(0xEBDE477F), UINT32_C(0xD3932AFB), UINT32_C(0x44538D8A), UINT32_C(0x9D5A5422), UINT32_C(0x166A87AF), UINT32_C(0x40B0B159), UINT32_C(0x41D5E078), UINT32_C(0x31294B3D)}, {UINT32_C(0xE8C48222), UINT32_C(0x6C49C853), UINT32_C(0xDCD0D611), UINT32_C(0x8FBE6620), UINT32_C(0xF611007B), UINT32_C(0x9DDC7EE2), UINT32_C(0xE6652172), UINT32_C(0x12289A60)}}, {{UINT32_C(0xDACF80F7), UINT32_C(0x8B85475B), UINT32_C(0x9B5CAEF2), UINT32_C(0xADBAB353), UINT32_C(0x8D2A7707), UINT32_C(0x7C4090A3), UINT32_C(0xDAB97830), UINT32_C(0x271FA4F1)}, {UINT32_C(0x53173E04), UINT32_C(0x141B7252), UINT32_C(0x06D0B127), UINT32_C(0x4B483D64), UINT32_C(0x063A7AF8), UINT32_C(0x8FD15BCF), UINT32_C(0xE580F34C), UINT32_C(0x59B19EAF)}}, {{UINT32_C(0x9C0D79B6), UINT32_C(0xA7EEA8C4), UINT32_C(0xB9185109), UINT32_C(0x766FA113), UINT32_C(0x4642CC64), UINT32_C(0xB42D74F3), UINT32_C(0xBB817476), UINT32_C(0x51D0127B)}, {UINT32_C(0x8AB71448), UINT32_C(0x6DA097F5), UINT32_C(0xF95AD0C7), UINT32_C(0x145872E5), UINT32_C(0xF1759436), UINT32_C(0xB7E934F3), UINT32_C(0x3160ED1F), UINT32_C(0x4EA883F9)}}, {{UINT32_C(0x0CEABAE1), UINT32_C(0x30DC39B7), UINT32_C(0xA606D766), UINT32_C(0x49EC5EE8), UINT32_C(0x97FC46AF), UINT32_C(0x230E2762), UINT32_C(0x5BE79B8D), UINT32_C(0x079A531F)}, {UINT32_C(0xEF08C93F), UINT32_C(0x48253BC2), UINT32_C(0xF124D043), UINT32_C(0x2D32AF02), UINT32_C(0xAF34D231), UINT32_C(0x85796D0D), UINT32_C(0x15F8CECD), UINT32_C(0x06A6205C)}}, {{UINT32_C(0x47B00D1A), UINT32_C(0x1FA77AFD), UINT32_C(0xE48CE97A), UINT32_C(0x429717B0), UINT32_C(0x57433697), UINT32_C(0x38FEF11D), UINT32_C(0x7D426687), UINT32_C(0x3E91BED6)}, {UINT32_C(0x2AB4BFE9), UINT32_C(0x95919BF7), UINT32_C(0x97096B3A), UINT32_C(0x7A3F33FC), UINT32_C(0x3DD8C82E), UINT32_C(0x0E0BBAC3), UINT32_C(0xF8EDB675), UINT32_C(0x2CE9EFCB)}}, {{UINT32_C(0x43D8B81D), UINT32_C(0x2D44E998), UINT32_C(0x6D68A95C), UINT32_C(0x8ABFF419), UINT32_C(0x3B2A18DD), UINT32_C(0x639000A0), UINT32_C(0x871E3ED3), UINT32_C(0x7CD15413)}, {UINT32_C(0x148F0378), UINT32_C(0xC059855B), UINT32_C(0x616B62BF), UINT32_C(0x50147459), UINT32_C(0x4D461110), UINT32_C(0x53B699AF), UINT32_C(0xEC29E48D), UINT32_C(0x6A0D0EC7)}}, }, { {{UINT32_C(0x15797F35), UINT32_C(0x51733221), UINT32_C(0x4BBE6644), UINT32_C(0x2F298214), UINT32_C(0x4A5EF621), UINT32_C(0x7BC8FEC6), UINT32_C(0x7F472F05), UINT32_C(0x3D2BE785)}, {UINT32_C(0x2765C427), UINT32_C(0xA1C3A1C9), UINT32_C(0x24155ACF), UINT32_C(0xBACF08FE), UINT32_C(0x9D229948), UINT32_C(0xA9CC1A17), UINT32_C(0x27039FD8), UINT32_C(0x1918C97F)}}, {{UINT32_C(0x7843FF7B), UINT32_C(0x2CF39338), UINT32_C(0x258997F2), UINT32_C(0x5FCBDE65), UINT32_C(0x165A98A3), UINT32_C(0x3980BF90), UINT32_C(0xBF9458E5), UINT32_C(0x2E80607D)}, {UINT32_C(0x7019165C), UINT32_C(0x5F646EB6), UINT32_C(0xDDE34205), UINT32_C(0xFA091FBE), UINT32_C(0x69267AE3), UINT32_C(0x695348B6), UINT32_C(0xABC22051), UINT32_C(0x385B0B6A)}}, {{UINT32_C(0xB537F78C), UINT32_C(0x3CAE0756), UINT32_C(0x8BE30367), UINT32_C(0x3012A958), UINT32_C(0x981A22C3), UINT32_C(0x32D26C06), UINT32_C(0x2950E833), UINT32_C(0x7D091FAB)}, {UINT32_C(0x797ACAAF), UINT32_C(0xD8E1B638), UINT32_C(0x49F2EA10), UINT32_C(0xE7021C85), UINT32_C(0x17A7AF3B), UINT32_C(0xCA382BC1), UINT32_C(0xBB809976), UINT32_C(0x08A5A81D)}}, {{UINT32_C(0x4287BB97), UINT32_C(0x00F499FD), UINT32_C(0xDAA9DAF2), UINT32_C(0xFB6791CA), UINT32_C(0x057B2B98), UINT32_C(0x9A19E4F3), UINT32_C(0xC53C0223), UINT32_C(0x6968D2FF)}, {UINT32_C(0xCE88509C), UINT32_C(0xDC741EF5), UINT32_C(0x306A0570), UINT32_C(0x38AE355D), UINT32_C(0xC23AF46B), UINT32_C(0xFECF6589), UINT32_C(0x6AD48836), UINT32_C(0x6C0E6ED1)}}, {{UINT32_C(0xE363495D), UINT32_C(0x22B68698), UINT32_C(0x39AF2BE3), UINT32_C(0x120005D0), UINT32_C(0x0BF4BA69), UINT32_C(0xE37B1965), UINT32_C(0x26E64AE7), UINT32_C(0x3B416E93)}, {UINT32_C(0xDEAC5C59), UINT32_C(0xFAED5088), UINT32_C(0xEB2518A5), UINT32_C(0x67436ACC), UINT32_C(0x91FA788D), UINT32_C(0x636B52F8), UINT32_C(0x655153D1), UINT32_C(0x10B2A57A)}}, {{UINT32_C(0x833A984C), UINT32_C(0xB18060A7), UINT32_C(0x74833BAD), UINT32_C(0x7EF83746), UINT32_C(0xC5B3BC88), UINT32_C(0xCBFAF742), UINT32_C(0xA1A7F135), UINT32_C(0x7981DC36)}, {UINT32_C(0x5D076280), UINT32_C(0xE70CCAFA), UINT32_C(0x07009D85), UINT32_C(0xEBA80EB7), UINT32_C(0x73778DE2), UINT32_C(0x7D99D24C), UINT32_C(0xA7262D50), UINT32_C(0x1EFEE1BB)}}, {{UINT32_C(0x6A7CAB32), UINT32_C(0xBC47F4A2), UINT32_C(0xDD6E48A3), UINT32_C(0x53F290A7), UINT32_C(0x92F35F9E), UINT32_C(0x82257A1B), UINT32_C(0x8BB0AAB0), UINT32_C(0x73D17B31)}, {UINT32_C(0xC2DFFE96), UINT32_C(0xBBD4522A), UINT32_C(0xE6EB0501), UINT32_C(0x9C37DAA1), UINT32_C(0x453DB6BE), UINT32_C(0xF4D4D568), UINT32_C(0x642AD2E4), UINT32_C(0x2868CBF5)}}, {{UINT32_C(0xABE30C59), UINT32_C(0x40A988E6), UINT32_C(0x93057DEC), UINT32_C(0x5ADED929), UINT32_C(0xDACD37B0), UINT32_C(0x18FD7E04), UINT32_C(0x8228ACA5), UINT32_C(0x6E3FB81E)}, {UINT32_C(0x4104B0C9), UINT32_C(0xFF3EEFE6), UINT32_C(0x31CA120A), UINT32_C(0xD7DD05E7), UINT32_C(0xD01C1CF8), UINT32_C(0xAFD3CF1C), UINT32_C(0x831BC4E9), UINT32_C(0x4D0CD264)}}, {{UINT32_C(0x82CAC14A), UINT32_C(0x2641B321), UINT32_C(0x70990E6C), UINT32_C(0x34EB1495), UINT32_C(0xA1C74CA6), UINT32_C(0x3E5AF58F), UINT32_C(0x616B7A2D), UINT32_C(0x11B50821)}, {UINT32_C(0xC4FA9719), UINT32_C(0x891636E3), UINT32_C(0x107DD719), UINT32_C(0xAEE84C27), UINT32_C(0xC1872E75), UINT32_C(0xA2B0D83E), UINT32_C(0x7383069E), UINT32_C(0x7DD62CBC)}}, {{UINT32_C(0xC81B7E15), UINT32_C(0xEBA4A024), UINT32_C(0x04516070), UINT32_C(0x1CC37E08), UINT32_C(0xF90CE59D), UINT32_C(0xEF1F0401), UINT32_C(0xE062E133), UINT32_C(0x3B4259D5)}, {UINT32_C(0xCF2CA1DD), UINT32_C(0x87A1DBFA), UINT32_C(0x61FD1AFB), UINT32_C(0xCFBFB15F), UINT32_C(0xECF4C7BA), UINT32_C(0xFBFD9899), UINT32_C(0x2725FA50), UINT32_C(0x57C84CEE)}}, {{UINT32_C(0xEFA6E3D0), UINT32_C(0x8B0B7414), UINT32_C(0xB3D04224), UINT32_C(0xD9725C5E), UINT32_C(0x8A91371E), UINT32_C(0x670E6C50), UINT32_C(0x9B25BD3B), UINT32_C(0x4D130467)}, {UINT32_C(0x5CF18D4F), UINT32_C(0x18D77D15), UINT32_C(0x1CA09677), UINT32_C(0xEF80DC41), UINT32_C(0xB9A05CF9), UINT32_C(0x6F3A961B), UINT32_C(0x7C1433A4), UINT32_C(0x0BB8A518)}}, {{UINT32_C(0xB33FCF05), UINT32_C(0xAC0CF52A), UINT32_C(0x1CDC7782), UINT32_C(0xAD03692F), UINT32_C(0xAA02B77E), UINT32_C(0xB345BAE6), UINT32_C(0x456FCFA9), UINT32_C(0x05096694)}, {UINT32_C(0x25D4CF32), UINT32_C(0xA8984448), UINT32_C(0x15184188), UINT32_C(0xD76393E3), UINT32_C(0xEA069BED), UINT32_C(0x7D4A8C0C), UINT32_C(0x11E18347), UINT32_C(0x4D22268D)}}, {{UINT32_C(0x3CB3C0F1), UINT32_C(0xC2A0BB75), UINT32_C(0x8EBA58C6), UINT32_C(0x61F4EC4C), UINT32_C(0xDFC4A903), UINT32_C(0x5D3F0D44), UINT32_C(0xF9B6F79A), UINT32_C(0x0B6CE81B)}, {UINT32_C(0x94E49623), UINT32_C(0xF694A44A), UINT32_C(0x1BDF75E0), UINT32_C(0xCFCBB7E1), UINT32_C(0xE0337E13), UINT32_C(0x20CEE1BD), UINT32_C(0xDFF02E18), UINT32_C(0x694EA40B)}}, {{UINT32_C(0x78D1DC2E), UINT32_C(0xC21BE0FA), UINT32_C(0xED0E49E0), UINT32_C(0x08B4D9A5), UINT32_C(0x827F0B4C), UINT32_C(0x676731AB), UINT32_C(0xEBAB5894), UINT32_C(0x674ECC79)}, {UINT32_C(0x39ABB148), UINT32_C(0xB29BD0D4), UINT32_C(0x2378A63A), UINT32_C(0x8207A8F8), UINT32_C(0x1E4C29C2), UINT32_C(0xE36A549D), UINT32_C(0x3F1C255B), UINT32_C(0x380D48DE)}}, {{UINT32_C(0xE5F2C87E), UINT32_C(0x6AB6F887), UINT32_C(0xA01AEC86), UINT32_C(0xE92C7345), UINT32_C(0x8660C26F), UINT32_C(0x697F4520), UINT32_C(0x9B58015B), UINT32_C(0x4F2488E0)}, {UINT32_C(0xBB41900C), UINT32_C(0xB2410B3E), UINT32_C(0xBE1A8A39), UINT32_C(0x31267500), UINT32_C(0xB9140554), UINT32_C(0xA7C9997C), UINT32_C(0x1CD41524), UINT32_C(0x335B1806)}}, {{UINT32_C(0x14873270), UINT32_C(0xB836FD9F), UINT32_C(0xE3243EC5), UINT32_C(0x1AE0F512), UINT32_C(0x83B9AB74), UINT32_C(0xA743E304), UINT32_C(0x3A5758C7), UINT32_C(0x1569C30D)}, {UINT32_C(0x9E8F9E52), UINT32_C(0x003CEF9A), UINT32_C(0x8C22119E), UINT32_C(0x557AFB4A), UINT32_C(0xF223A966), UINT32_C(0x66F2487E), UINT32_C(0xA519378F), UINT32_C(0x7FA00273)}}, }, { {{UINT32_C(0x7B08C1C4), UINT32_C(0x812C024F), UINT32_C(0xADBA8AD9), UINT32_C(0xC6017986), UINT32_C(0x0601BD82), UINT32_C(0x59C7B16C), UINT32_C(0x0CFA5622), UINT32_C(0x41B6A45C)}, {UINT32_C(0x83C1E3E8), UINT32_C(0x353A67D5), UINT32_C(0xC65F5059), UINT32_C(0x9A83438E), UINT32_C(0x86EEA346), UINT32_C(0x99950377), UINT32_C(0x330D2570), UINT32_C(0x74E2F4BD)}}, {{UINT32_C(0xB4A8BDA8), UINT32_C(0xDB8E53C1), UINT32_C(0x2C003C77), UINT32_C(0xA850047E), UINT32_C(0x1B018831), UINT32_C(0xFFD48A73), UINT32_C(0x8B325062), UINT32_C(0x24F96CB6)}, {UINT32_C(0xCD2B821B), UINT32_C(0x3779CA4D), UINT32_C(0xC3159CE7), UINT32_C(0xC2AFBF6E), UINT32_C(0x10F18DE9), UINT32_C(0x8A580B1A), UINT32_C(0x8CF75334), UINT32_C(0x37043D0D)}}, {{UINT32_C(0xECCCF2E8), UINT32_C(0x0451DCDA), UINT32_C(0x752A134F), UINT32_C(0xCF7A3AD9), UINT32_C(0xFBDAE56C), UINT32_C(0xD5754596), UINT32_C(0xF4CDCF6A), UINT32_C(0x15237D73)}, {UINT32_C(0xECA37967), UINT32_C(0x1DF5912C), UINT32_C(0x336CD97E), UINT32_C(0x60934339), UINT32_C(0x434DDC01), UINT32_C(0xA4E523FE), UINT32_C(0x79DBE24C), UINT32_C(0x24E81DC6)}}, {{UINT32_C(0xC83B2B7C), UINT32_C(0x28F0D73B), UINT32_C(0x7B5DE1AA), UINT32_C(0x45BE220F), UINT32_C(0xB136A877), UINT32_C(0x1B785230), UINT32_C(0xAEFF115B), UINT32_C(0x5A94122A)}, {UINT32_C(0x8E598998), UINT32_C(0xEF895F0C), UINT32_C(0xF4C622C3), UINT32_C(0xCEE32B3E), UINT32_C(0xB256CFD0), UINT32_C(0x2D080B1D), UINT32_C(0x21075E15), UINT32_C(0x672686D6)}}, {{UINT32_C(0x9F9F26FE), UINT32_C(0xE85FB575), UINT32_C(0x93A7966E), UINT32_C(0x1DE57B83), UINT32_C(0xDD8CB696), UINT32_C(0xA9948DE8), UINT32_C(0x758E685D), UINT32_C(0x226C95A6)}, {UINT32_C(0x3729C663), UINT32_C(0x38B0753B), UINT32_C(0x410E4884), UINT32_C(0xD46CA4D9), UINT32_C(0x77516FA4), UINT32_C(0x1D6FA5F9), UINT32_C(0x696CFAFC), UINT32_C(0x09A0FDB8)}}, {{UINT32_C(0xCC7F6FD8), UINT32_C(0xD1DAD8E9), UINT32_C(0x022195A2), UINT32_C(0x7BB9F606), UINT32_C(0x223A9346), UINT32_C(0x1B997396), UINT32_C(0x88DCFB04), UINT32_C(0x6ACD6F7C)}, {UINT32_C(0x3AC52F65), UINT32_C(0x9029E5EB), UINT32_C(0x935A39DE), UINT32_C(0xED1D7A0F), UINT32_C(0x538D8914), UINT32_C(0xF1D58C3A), UINT32_C(0xB36B8342), UINT32_C(0x19153569)}}, {{UINT32_C(0xE2502156), UINT32_C(0xFF600354), UINT32_C(0x733DA5EC), UINT32_C(0xE386A20F), UINT32_C(0x9D24D11D), UINT32_C(0xD6FBCBBB), UINT32_C(0x0B06C843), UINT32_C(0x0B57498C)}, {UINT32_C(0x7A834667), UINT32_C(0x98F1FFF8), UINT32_C(0xC7DF05F5), UINT32_C(0x4AEB8788), UINT32_C(0xC2681DA4), UINT32_C(0x8CFA3B01), UINT32_C(0x2FA2FAEA), UINT32_C(0x1AECC0E8)}}, {{UINT32_C(0x94C5CBC5), UINT32_C(0x38278865), UINT32_C(0x041A755A), UINT32_C(0x9ADA7CAB), UINT32_C(0x8D891640), UINT32_C(0xB38F762A), UINT32_C(0x00AD88F0), UINT32_C(0x28F6FBB2)}, {UINT32_C(0x3709CD6D), UINT32_C(0x3F9629E3), UINT32_C(0x4912F483), UINT32_C(0xD2435A55), UINT32_C(0xDFF5AB69), UINT32_C(0x305BEA64), UINT32_C(0x663BB0D9), UINT32_C(0x4D29041A)}}, {{UINT32_C(0xE2FD9338), UINT32_C(0xDC4BC9D4), UINT32_C(0xBA7938FC), UINT32_C(0x5389390D), UINT32_C(0xF329B218), UINT32_C(0xC42B812D), UINT32_C(0xFA9F1956), UINT32_C(0x5E809B5E)}, {UINT32_C(0x523D74C3), UINT32_C(0xE2A89BAA), UINT32_C(0x78CBA7B5), UINT32_C(0x97CD9FFB), UINT32_C(0x5B07BCD2), UINT32_C(0x25F95301), UINT32_C(0x2064BB3A), UINT32_C(0x4042C705)}}, {{UINT32_C(0x28D53BF9), UINT32_C(0xD8B6ADA4), UINT32_C(0xA4210F2D), UINT32_C(0x5E922CA5), UINT32_C(0xF05A1629), UINT32_C(0x9501F46A), UINT32_C(0xC6CD71CD), UINT32_C(0x28094E54)}, {UINT32_C(0x811285AD), UINT32_C(0x8D5484D5), UINT32_C(0x1593EE86), UINT32_C(0xFB2168F4), UINT32_C(0xAC54A41D), UINT32_C(0x693D3B32), UINT32_C(0x28A5425C), UINT32_C(0x3DAFEC07)}}, {{UINT32_C(0xD12837A8), UINT32_C(0x0E4CF0D0), UINT32_C(0xCF5273BB), UINT32_C(0x19FA2CC9), UINT32_C(0x116A20C4), UINT32_C(0x56346BAE), UINT32_C(0x0E436A36), UINT32_C(0x4F3597FE)}, {UINT32_C(0xE8EB1B85), UINT32_C(0x459D3FFB), UINT32_C(0x5AE04130), UINT32_C(0x7C718672), UINT32_C(0x60302740), UINT32_C(0xA37C2586), UINT32_C(0x913072D8), UINT32_C(0x2871AF37)}}, {{UINT32_C(0x8590319D), UINT32_C(0xD77249B7), UINT32_C(0xEB06B813), UINT32_C(0x73F7A684), UINT32_C(0x71D1D580), UINT32_C(0x4C9DC5B9), UINT32_C(0x5A50A95B), UINT32_C(0x7C91A9F5)}, {UINT32_C(0x0475F161), UINT32_C(0x4F8F2E89), UINT32_C(0x538B7F94), UINT32_C(0xF34EC1DD), UINT32_C(0xD46F2575), UINT32_C(0xB8FF6C65), UINT32_C(0x64433C80), UINT32_C(0x79A2CE2C)}}, {{UINT32_C(0x1AEB7039), UINT32_C(0x38448A53), UINT32_C(0x417189EC), UINT32_C(0xF5EC03F7), UINT32_C(0xEB92FF2B), UINT32_C(0xFA095CA1), UINT32_C(0xE4FCAEDB), UINT32_C(0x4612F720)}, {UINT32_C(0xF30AAE0E), UINT32_C(0xC945E966), UINT32_C(0x340A7A1D), UINT32_C(0xF61CFE85), UINT32_C(0xE42D7920), UINT32_C(0xA2560BC6), UINT32_C(0xA692E9C7), UINT32_C(0x07D7B321)}}, {{UINT32_C(0x592C60C5), UINT32_C(0xB9C26307), UINT32_C(0x0F59D966), UINT32_C(0xCECBC6C3), UINT32_C(0x5459D89E), UINT32_C(0x8BA31FD6), UINT32_C(0x47C7FAE8), UINT32_C(0x1A4AF6B1)}, {UINT32_C(0xB431D720), UINT32_C(0x66487766), UINT32_C(0x5108B845), UINT32_C(0x5D597309), UINT32_C(0xCA8E6E0D), UINT32_C(0xA3B94FD7), UINT32_C(0x55C6A48D), UINT32_C(0x639519E3)}}, {{UINT32_C(0x052DC195), UINT32_C(0xAD3EE167), UINT32_C(0x0947816B), UINT32_C(0x4DF2BFC7), UINT32_C(0xABADBB3C), UINT32_C(0x5D463469), UINT32_C(0xC33D4F96), UINT32_C(0x6F7AA885)}, {UINT32_C(0xFE06133C), UINT32_C(0x3DD27536), UINT32_C(0x2796E7ED), UINT32_C(0x27A557B2), UINT32_C(0x3D314A4F), UINT32_C(0x1117CCB7), UINT32_C(0x23968946), UINT32_C(0x6F0C0AE0)}}, {{UINT32_C(0xE2110C00), UINT32_C(0x0A3D4DAE), UINT32_C(0x4C633A23), UINT32_C(0x0389D3A5), UINT32_C(0x83AEC172), UINT32_C(0xE167BDFA), UINT32_C(0xFB38E8F1), UINT32_C(0x067070CE)}, {UINT32_C(0x4DF220C5), UINT32_C(0x41137367), UINT32_C(0x59C39F05), UINT32_C(0xB255E5D3), UINT32_C(0x043C75B3), UINT32_C(0xE437984E), UINT32_C(0x6A22994A), UINT32_C(0x01DCD771)}}, }, { {{UINT32_C(0x4C6FDDCF), UINT32_C(0xD2880DF2), UINT32_C(0x8A00D80F), UINT32_C(0x76A28FF2), UINT32_C(0x0792F82C), UINT32_C(0x257CB1F8), UINT32_C(0x605703EA), UINT32_C(0x07938ABC)}, {UINT32_C(0x5F61B0FE), UINT32_C(0xD99F0AC9), UINT32_C(0x8EC15433), UINT32_C(0x440DC63C), UINT32_C(0x86AB5DDB), UINT32_C(0xD9BDDFF1), UINT32_C(0x744755EA), UINT32_C(0x3B8875DC)}}, {{UINT32_C(0x4938C9FB), UINT32_C(0x01D90440), UINT32_C(0x8DB6A890), UINT32_C(0x900657FD), UINT32_C(0xF60A173A), UINT32_C(0xDCC5068A), UINT32_C(0x857C7B2A), UINT32_C(0x5F3EB242)}, {UINT32_C(0xA4F0EB9E), UINT32_C(0x634240BD), UINT32_C(0x44E85C70), UINT32_C(0xACDDA6C4), UINT32_C(0x0AABE4C5), UINT32_C(0x753F02AB), UINT32_C(0xC1D034E1), UINT32_C(0x33D89D21)}}, {{UINT32_C(0x1279B25B), UINT32_C(0x4596B52D), UINT32_C(0xA48014AE), UINT32_C(0x494669D9), UINT32_C(0x4FD22150), UINT32_C(0x9A26B6FC), UINT32_C(0xF07D5A3F), UINT32_C(0x394DE0BB)}, {UINT32_C(0x634C1733), UINT32_C(0x12DFE5A6), UINT32_C(0x1EBC5177), UINT32_C(0x33EC21D2), UINT32_C(0x527514CC), UINT32_C(0x454B4930), UINT32_C(0x41405532), UINT32_C(0x7F23BD0F)}}, {{UINT32_C(0xBAC9DD30), UINT32_C(0xB2879E7F), UINT32_C(0x06CE7672), UINT32_C(0x259BB1CB), UINT32_C(0xBB97BE10), UINT32_C(0x201DB42E), UINT32_C(0x2EA35A8E), UINT32_C(0x112D6079)}, {UINT32_C(0x6B3B9933), UINT32_C(0x7CC756D4), UINT32_C(0x781CE4DD), UINT32_C(0x4BD24810), UINT32_C(0x8733247E), UINT32_C(0x53CB4E38), UINT32_C(0x9DA66787), UINT32_C(0x47BD6A30)}}, {{UINT32_C(0xBA600C8E), UINT32_C(0x8A700953), UINT32_C(0xCF388C0D), UINT32_C(0xD466F11D), UINT32_C(0xE4A17A8E), UINT32_C(0xD485F341), UINT32_C(0x234FC16D), UINT32_C(0x63278918)}, {UINT32_C(0xBB82046D), UINT32_C(0xF4DDA875), UINT32_C(0x2945470A), UINT32_C(0xD61E4E58), UINT32_C(0x6D0F8976), UINT32_C(0xCDB6C5BD), UINT32_C(0x10A004A2), UINT32_C(0x44CD9E4D)}}, {{UINT32_C(0x49C4AA6E), UINT32_C(0x595CD942), UINT32_C(0x3DE400C8), UINT32_C(0xE5A90136), UINT32_C(0x9DD12D9E), UINT32_C(0x4BCED3BD), UINT32_C(0x78E3D5E4), UINT32_C(0x3700CF92)}, {UINT32_C(0x75A32D1A), UINT32_C(0xECFFF498), UINT32_C(0x3C4A54B2), UINT32_C(0xC28DDE37), UINT32_C(0x993CAE6D), UINT32_C(0x8DC22352), UINT32_C(0x52ED7019), UINT32_C(0x46CB5408)}}, {{UINT32_C(0xEA94E7BF), UINT32_C(0x71FFAED0), UINT32_C(0xD5AE6185), UINT32_C(0xC0817D2C), UINT32_C(0x5CF23687), UINT32_C(0x7B72B8B9), UINT32_C(0x60A450E1), UINT32_C(0x61DDE599)}, {UINT32_C(0xD13870E6), UINT32_C(0x17CF0B10), UINT32_C(0x5F2930BB), UINT32_C(0x7D08E1FB), UINT32_C(0x83807C14), UINT32_C(0x8D0F4F55), UINT32_C(0x6E6DB701), UINT32_C(0x61EBFC1A)}}, {{UINT32_C(0x0FCAFE68), UINT32_C(0x247A3F65), UINT32_C(0x7AC2A25E), UINT32_C(0x57548035), UINT32_C(0x3CD0FE06), UINT32_C(0xB7466CA5), UINT32_C(0xBCC31AB3), UINT32_C(0x7B0D8B36)}, {UINT32_C(0xA6D4358C), UINT32_C(0x2FAAF49C), UINT32_C(0x3E9B4E31), UINT32_C(0xD9E5E2FE), UINT32_C(0xF6086336), UINT32_C(0xA6A859A0), UINT32_C(0xA9C19F84), UINT32_C(0x0C2A442A)}}, {{UINT32_C(0x3BC0AD7D), UINT32_C(0x66FEA841), UINT32_C(0x32C9158E), UINT32_C(0xCD3A546C), UINT32_C(0x8FE1DF7F), UINT32_C(0xACD2EE7F), UINT32_C(0xEBE9621E), UINT32_C(0x10F58C0A)}, {UINT32_C(0x478B667D), UINT32_C(0x80047C54), UINT32_C(0x89870DCE), UINT32_C(0x9EAE5FAA), UINT32_C(0x0520A005), UINT32_C(0xC05BEB33), UINT32_C(0x352AC891), UINT32_C(0x2CFBC921)}}, {{UINT32_C(0x632F6D73), UINT32_C(0x6842E6B8), UINT32_C(0x2B9FFAEA), UINT32_C(0x6F2B5724), UINT32_C(0x9341D2FA), UINT32_C(0x7ACCC982), UINT32_C(0x88809B65), UINT32_C(0x6DAD9A11)}, {UINT32_C(0xB6CC2240), UINT32_C(0x3411850C), UINT32_C(0xB64937E1), UINT32_C(0x8547BCAF), UINT32_C(0x6978F636), UINT32_C(0x49AEDD5F), UINT32_C(0x85A53D2A), UINT32_C(0x38F59752)}}, {{UINT32_C(0xF5F5A2D0), UINT32_C(0x5C38EB49), UINT32_C(0xE3BF779C), UINT32_C(0xE028121B), UINT32_C(0xA783D5E3), UINT32_C(0x649997C8), UINT32_C(0x2C06CC0F), UINT32_C(0x04DE984A)}, {UINT32_C(0xA49D6239), UINT32_C(0x52C834B0), UINT32_C(0x628413AC), UINT32_C(0x070A1B09), UINT32_C(0xA8624A1E), UINT32_C(0x2FBE0CA5), UINT32_C(0x268D930A), UINT32_C(0x687D93C3)}}, {{UINT32_C(0x314C47A4), UINT32_C(0xC7CD6805), UINT32_C(0xCE7A9A6D), UINT32_C(0x8BD0C630), UINT32_C(0x34F727BA), UINT32_C(0xCDB2DAD5), UINT32_C(0x25DB0189), UINT32_C(0x7814C414)}, {UINT32_C(0x7DD9CAEE), UINT32_C(0xD7F9C5DC), UINT32_C(0x798690E4), UINT32_C(0xDA6EACC8), UINT32_C(0x6B675E01), UINT32_C(0x705794E3), UINT32_C(0x75C5EC38), UINT32_C(0x4A31D714)}}, {{UINT32_C(0x0519D5F2), UINT32_C(0xC162A3EA), UINT32_C(0x2958FABF), UINT32_C(0x92146A78), UINT32_C(0x6CB31EB0), UINT32_C(0x1E63CBE4), UINT32_C(0xFBC5AD0F), UINT32_C(0x77CE5AAD)}, {UINT32_C(0x32605DC6), UINT32_C(0x3631E470), UINT32_C(0x43413DD3), UINT32_C(0xC7D1C72F), UINT32_C(0x0DF6B7C9), UINT32_C(0x171A3794), UINT32_C(0x2B5A08BC), UINT32_C(0x6D711743)}}, {{UINT32_C(0x509EF0F2), UINT32_C(0xDDC8057D), UINT32_C(0x6CABB486), UINT32_C(0x05C0B92B), UINT32_C(0x4244D919), UINT32_C(0xD49692B6), UINT32_C(0xD297F56E), UINT32_C(0x4E181744)}, {UINT32_C(0xF8CBB897), UINT32_C(0x902F6E73), UINT32_C(0x56D01382), UINT32_C(0xC3B21FE1), UINT32_C(0x46890F6D), UINT32_C(0xA858ABE1), UINT32_C(0x506858AF), UINT32_C(0x46B5E2C9)}}, {{UINT32_C(0xF4DEDE56), UINT32_C(0x30441281), UINT32_C(0xA195AEDE), UINT32_C(0x13F06FBB), UINT32_C(0x2FDD3BFF), UINT32_C(0xAD5F575B), UINT32_C(0x32ACB590), UINT32_C(0x680F656D)}, {UINT32_C(0xE3FAABA7), UINT32_C(0xFB60A8E1), UINT32_C(0x89A14827), UINT32_C(0xC8FBC1E4), UINT32_C(0xA8616136), UINT32_C(0x5835453F), UINT32_C(0xE6F4926F), UINT32_C(0x02826A47)}}, {{UINT32_C(0x74F32180), UINT32_C(0xAF4319A1), UINT32_C(0x6C2C1712), UINT32_C(0x4C9FDD16), UINT32_C(0xAC7E14A7), UINT32_C(0x59CA4FD4), UINT32_C(0xABBD4EA4), UINT32_C(0x07AA6E2F)}, {UINT32_C(0xFE9F121F), UINT32_C(0xB4BD441C), UINT32_C(0xCDA452C5), UINT32_C(0xDEBB4356), UINT32_C(0x51C9F451), UINT32_C(0xC29F1CFA), UINT32_C(0x83F598D8), UINT32_C(0x7E1EEF4C)}}, }, { {{UINT32_C(0x5014135F), UINT32_C(0xFC41A321), UINT32_C(0x3EEADF3F), UINT32_C(0xBE95F9BA), UINT32_C(0x3203A540), UINT32_C(0x054B1212), UINT32_C(0x3721C745), UINT32_C(0x6DD2FD17)}, {UINT32_C(0x5A682B59), UINT32_C(0xF86B8578), UINT32_C(0xBE801F7D), UINT32_C(0x872AA481), UINT32_C(0x14F865F2), UINT32_C(0x64C1600C), UINT32_C(0x25365449), UINT32_C(0x4BDD47AA)}}, {{UINT32_C(0xF3A3469F), UINT32_C(0xC96A964C), UINT32_C(0x9F7DA0E3), UINT32_C(0x273C5C85), UINT32_C(0x4C1A9DCD), UINT32_C(0x88EDC4AC), UINT32_C(0xB48E4CAA), UINT32_C(0x77623444)}, {UINT32_C(0x31581FF7), UINT32_C(0x7AF34A9C), UINT32_C(0xBB57F7CC), UINT32_C(0x23328C37), UINT32_C(0x8B7C86AB), UINT32_C(0xE920D8E9), UINT32_C(0x9DE6D64C), UINT32_C(0x1C7A7A40)}}, {{UINT32_C(0x79B9451C), UINT32_C(0x0BCDCD22), UINT32_C(0x58F5241B), UINT32_C(0x2920B435), UINT32_C(0x9B33EF3D), UINT32_C(0xC24DF715), UINT32_C(0xF2600224), UINT32_C(0x15252C5B)}, {UINT32_C(0x9A9160B6), UINT32_C(0xF9C8D8A6), UINT32_C(0xA6B9A6B8), UINT32_C(0x3186F2F9), UINT32_C(0xA377E98A), UINT32_C(0xC37267DC), UINT32_C(0x37957189), UINT32_C(0x71319A0A)}}, {{UINT32_C(0x6BAF6AE5), UINT32_C(0x48E5033F), UINT32_C(0xA460FCE9), UINT32_C(0x72379B2E), UINT32_C(0xF3D2FA46), UINT32_C(0xFC753D47), UINT32_C(0xED9EDF72), UINT32_C(0x3B67685A)}, {UINT32_C(0xF712500F), UINT32_C(0x1608E304), UINT32_C(0x9EE1B42A), UINT32_C(0xDFA358A4), UINT32_C(0x34B8345C), UINT32_C(0xE7A4B376), UINT32_C(0x06753C17), UINT32_C(0x7D0E0BF3)}}, {{UINT32_C(0x8FA62042), UINT32_C(0xA88526A6), UINT32_C(0x393006BD), UINT32_C(0xD6F32BB5), UINT32_C(0xA5DD5045), UINT32_C(0x14804978), UINT32_C(0xBF0C5E13), UINT32_C(0x34C02662)}, {UINT32_C(0x376E3E3D), UINT32_C(0xF9BEEBF9), UINT32_C(0x5923DC61), UINT32_C(0xFD774041), UINT32_C(0xF9735CF5), UINT32_C(0xFE77BDFA), UINT32_C(0x4077CFCC), UINT32_C(0x2E476E22)}}, {{UINT32_C(0x9BA457EF), UINT32_C(0xAB8E52EB), UINT32_C(0x0ABED212), UINT32_C(0x95F6C5FE), UINT32_C(0x386620FF), UINT32_C(0x7204B1A6), UINT32_C(0xDD180719), UINT32_C(0x463B7474)}, {UINT32_C(0xF991D8EE), UINT32_C(0x7F7D27AA), UINT32_C(0x8F67722D), UINT32_C(0xA7EB1085), UINT32_C(0xE331480A), UINT32_C(0x78D7095B), UINT32_C(0x66A1C8FA), UINT32_C(0x1DCC8C12)}}, {{UINT32_C(0x3E6A04C1), UINT32_C(0xD4C39C18), UINT32_C(0xB598ABEE), UINT32_C(0x73DB1C4D), UINT32_C(0xDF4A7D42), UINT32_C(0x381F9780), UINT32_C(0x52F860CD), UINT32_C(0x3C19A231)}, {UINT32_C(0x3EF00740), UINT32_C(0x7EC89934), UINT32_C(0xF37FE0D5), UINT32_C(0x50867788), UINT32_C(0x43E84D4A), UINT32_C(0x502D870B), UINT32_C(0x8F744749), UINT32_C(0x5F8A8413)}}, {{UINT32_C(0xFAECCFE4), UINT32_C(0x1C41AAAD), UINT32_C(0x21461F41), UINT32_C(0xC324F3B9), UINT32_C(0x4E90C0AB), UINT32_C(0x165ABA3F), UINT32_C(0x5F88E7D3), UINT32_C(0x2F96CED5)}, {UINT32_C(0xC0E52768), UINT32_C(0x8CA366FC), UINT32_C(0xA55249A7), UINT32_C(0x6CCA017C), UINT32_C(0x0F7EBCA2), UINT32_C(0x41ED002F), UINT32_C(0xA2BAF655), UINT32_C(0x0C33B371)}}, {{UINT32_C(0x62B928CE), UINT32_C(0x3B94CD9C), UINT32_C(0x39729345), UINT32_C(0x5BC43A6A), UINT32_C(0xC47D223C), UINT32_C(0x044D0C0F), UINT32_C(0xB0493367), UINT32_C(0x3B64B38D)}, {UINT32_C(0xEB74A6C2), UINT32_C(0x82AFB645), UINT32_C(0xD876D71C), UINT32_C(0x0CB01E22), UINT32_C(0x29C6BCD0), UINT32_C(0xCE2A7DCC), UINT32_C(0xDFD644EC), UINT32_C(0x4753DE1C)}}, {{UINT32_C(0x62188792), UINT32_C(0xE69FC903), UINT32_C(0x4914328B), UINT32_C(0xD91DB9BC), UINT32_C(0x3B68F8D0), UINT32_C(0x44953F4D), UINT32_C(0x0654B283), UINT32_C(0x2950435D)}, {UINT32_C(0xBE88F609), UINT32_C(0xE599A4AE), UINT32_C(0x90F5D10E), UINT32_C(0xF801CD90), UINT32_C(0xD4F1D3D9), UINT32_C(0x0AB78DB1), UINT32_C(0xC0F71ECB), UINT32_C(0x3ED9666A)}}, {{UINT32_C(0xE1E73E59), UINT32_C(0x6046A505), UINT32_C(0xF3B5C2E0), UINT32_C(0x8723A3EC), UINT32_C(0xE22C1555), UINT32_C(0x4BD95BF6), UINT32_C(0x6DA421E9), UINT32_C(0x50DC33DB)}, {UINT32_C(0xF1B01327), UINT32_C(0xCFB51E95), UINT32_C(0x199A8765), UINT32_C(0xE7013F2A), UINT32_C(0x77504B0B), UINT32_C(0xF486FEA7), UINT32_C(0xF9BA61C6), UINT32_C(0x2AF0F7E9)}}, {{UINT32_C(0xBE00B841), UINT32_C(0x9DBA1A02), UINT32_C(0x8BED5F08), UINT32_C(0x488BA455), UINT32_C(0x67F1040E), UINT32_C(0xF6814A64), UINT32_C(0xDC252336), UINT32_C(0x23AC4762)}, {UINT32_C(0xF0ED0577), UINT32_C(0x25040F02), UINT32_C(0xC6FFAE9C), UINT32_C(0x65209B22), UINT32_C(0x485AA0AC), UINT32_C(0xCC441A8C), UINT32_C(0x59D63A8A), UINT32_C(0x10DFACB6)}}, {{UINT32_C(0xC7D86B28), UINT32_C(0xBF4A0569), UINT32_C(0xDBDA9DA4), UINT32_C(0x5CDA94C4), UINT32_C(0x69058335), UINT32_C(0x2235C4CE), UINT32_C(0xD30C89E2), UINT32_C(0x68FA5E7C)}, {UINT32_C(0x59097B5B), UINT32_C(0xBB286D39), UINT32_C(0x9A20BA7E), UINT32_C(0x87DA80BB), UINT32_C(0x56F47E54), UINT32_C(0x85EF865E), UINT32_C(0x74ABFA5B), UINT32_C(0x5BB87867)}}, {{UINT32_C(0xDE2FA36E), UINT32_C(0x5DB14FAB), UINT32_C(0x77775F09), UINT32_C(0x84E3B546), UINT32_C(0xDA951D99), UINT32_C(0xDA734523), UINT32_C(0x3975026E), UINT32_C(0x04A89097)}, {UINT32_C(0xC0D12BE1), UINT32_C(0xB5753599), UINT32_C(0xFB864D61), UINT32_C(0x05670CE9), UINT32_C(0x305BF3CF), UINT32_C(0xB7153502), UINT32_C(0x2E60AF62), UINT32_C(0x7A9BB357)}}, {{UINT32_C(0xC7566DA5), UINT32_C(0xF43CDA07), UINT32_C(0x53FA4196), UINT32_C(0x7FC4C7FC), UINT32_C(0x88DCC9F3), UINT32_C(0x1E20E0ED), UINT32_C(0xFEE23DDA), UINT32_C(0x7317C7E5)}, {UINT32_C(0x43017070), UINT32_C(0x0305E13F), UINT32_C(0x6B1CA7C0), UINT32_C(0x5568410C), UINT32_C(0x104BA029), UINT32_C(0x0E5D55BA), UINT32_C(0x90FD49F8), UINT32_C(0x118B284E)}}, {{UINT32_C(0x8F3C6D8A), UINT32_C(0xCA0F7B5B), UINT32_C(0xAF7ECBF6), UINT32_C(0xAF72DEE0), UINT32_C(0xBB0EC4F1), UINT32_C(0x21C86D85), UINT32_C(0xF0525D17), UINT32_C(0x0303BC47)}, {UINT32_C(0x896FFCC0), UINT32_C(0x6ADCAB9F), UINT32_C(0x24E970CA), UINT32_C(0x65764C45), UINT32_C(0x1C3CA718), UINT32_C(0x0000F14C), UINT32_C(0xD0292587), UINT32_C(0x01CF1DDB)}}, }, { {{UINT32_C(0x86111EBA), UINT32_C(0xEC4FABCC), UINT32_C(0xBBBB793F), UINT32_C(0x599C20B6), UINT32_C(0x5657668F), UINT32_C(0xF74AE747), UINT32_C(0x77BAE892), UINT32_C(0x24AF29B2)}, {UINT32_C(0xCFAC9D5E), UINT32_C(0x47D6876B), UINT32_C(0x24369E14), UINT32_C(0xCACF9F50), UINT32_C(0x6F9CAFEF), UINT32_C(0x8A231D74), UINT32_C(0xB69AAE58), UINT32_C(0x57645A4E)}}, {{UINT32_C(0x489900F6), UINT32_C(0x440A3B15), UINT32_C(0x961AC3C2), UINT32_C(0x4B642FD3), UINT32_C(0xC265B973), UINT32_C(0x3D668599), UINT32_C(0x1139CE78), UINT32_C(0x5FA0E65D)}, {UINT32_C(0x1FAA710E), UINT32_C(0x3FF15AF4), UINT32_C(0xA9422FC0), UINT32_C(0xE45D35CE), UINT32_C(0xBD7BB349), UINT32_C(0x56904C06), UINT32_C(0xE529989D), UINT32_C(0x40C5BEE0)}}, {{UINT32_C(0x70B20298), UINT32_C(0x8FA46861), UINT32_C(0x4838A136), UINT32_C(0xEC629538), UINT32_C(0x137F66D6), UINT32_C(0x23ADE0F6), UINT32_C(0x8EA53E76), UINT32_C(0x1A92E05C)}, {UINT32_C(0x9D51EB7A), UINT32_C(0x51728E27), UINT32_C(0xC4352E35), UINT32_C(0xA6B0B758), UINT32_C(0x37A11B35), UINT32_C(0x84C59331), UINT32_C(0xF66B75C7), UINT32_C(0x3933EFC1)}}, {{UINT32_C(0x66916D0A), UINT32_C(0x7FB68D62), UINT32_C(0xF28A9B14), UINT32_C(0x3325D42E), UINT32_C(0x8592B544), UINT32_C(0x75E83A65), UINT32_C(0x2718628F), UINT32_C(0x524D1CE0)}, {UINT32_C(0x3C584D76), UINT32_C(0x88A110EA), UINT32_C(0x4AC09AAC), UINT32_C(0x6B034AC4), UINT32_C(0x84FD3A36), UINT32_C(0x06488635), UINT32_C(0x87D944E1), UINT32_C(0x516F0EB0)}}, {{UINT32_C(0xDF11D0BB), UINT32_C(0xE2016DA0), UINT32_C(0xB01F6540), UINT32_C(0xB34EB471), UINT32_C(0x165CBB24), UINT32_C(0x13E3D330), UINT32_C(0x7CF7F676), UINT32_C(0x3E755D11)}, {UINT32_C(0x4FEA9A69), UINT32_C(0xD70CF4F8), UINT32_C(0xD18F4337), UINT32_C(0x98F59E0A), UINT32_C(0x826344BA), UINT32_C(0x7CCE7CE6), UINT32_C(0xF4004BBE), UINT32_C(0x30D129D7)}}, {{UINT32_C(0xBA9CB975), UINT32_C(0x016EF317), UINT32_C(0xE4B3AB4D), UINT32_C(0x8EEBED19), UINT32_C(0x170A2570), UINT32_C(0x8C597DF0), UINT32_C(0x5BE6DE70), UINT32_C(0x451538D8)}, {UINT32_C(0x7A64792F), UINT32_C(0x6C711DAC), UINT32_C(0x217EC8FB), UINT32_C(0x8F1896EB), UINT32_C(0x7FE18DED), UINT32_C(0x82E9C20B), UINT32_C(0xB0C5F622), UINT32_C(0x6CEBF4A7)}}, {{UINT32_C(0x49CCC64F), UINT32_C(0xD9403EB5), UINT32_C(0x28B8A3FD), UINT32_C(0x807EBD56), UINT32_C(0x0F291E12), UINT32_C(0xF08BB659), UINT32_C(0x9C3F4432), UINT32_C(0x020D13E3)}, {UINT32_C(0x752BB92E), UINT32_C(0xDA247896), UINT32_C(0x86EAFA7A), UINT32_C(0x99541794), UINT32_C(0x274E36AD), UINT32_C(0x213E94BA), UINT32_C(0x61A71333), UINT32_C(0x4CC0F1FB)}}, {{UINT32_C(0x06478801), UINT32_C(0x19CC11BD), UINT32_C(0x6D18216A), UINT32_C(0x1251562A), UINT32_C(0xCDD307FC), UINT32_C(0x7A5F06BB), UINT32_C(0xFAA9CA2A), UINT32_C(0x4285F6AB)}, {UINT32_C(0x81258996), UINT32_C(0x5A922831), UINT32_C(0x27B8B018), UINT32_C(0x8F7CF8EE), UINT32_C(0x7F81A62D), UINT32_C(0xF030BEF3), UINT32_C(0xCD4FD4E7), UINT32_C(0x417ACBC1)}}, {{UINT32_C(0xEC64412F), UINT32_C(0xCFB0EA58), UINT32_C(0x6091E621), UINT32_C(0x9547B64A), UINT32_C(0xFD0C9815), UINT32_C(0x5EA49C7E), UINT32_C(0xE78B355C), UINT32_C(0x6789055A)}, {UINT32_C(0x77E9A73A), UINT32_C(0x8D743E98), UINT32_C(0x2EA3FA49), UINT32_C(0xB032EA6A), UINT32_C(0xCEAAA33A), UINT32_C(0x52EA3801), UINT32_C(0xF2C3E22B), UINT32_C(0x73B3BB8D)}}, {{UINT32_C(0x7DB9E301), UINT32_C(0xAA2A1291), UINT32_C(0xA1293DD7), UINT32_C(0x7F29770F), UINT32_C(0x59683DEC), UINT32_C(0x3135BB21), UINT32_C(0x7785B505), UINT32_C(0x070F8DF7)}, {UINT32_C(0x37F53677), UINT32_C(0x8F2158EA), UINT32_C(0xABE1AF1C), UINT32_C(0x96CC7B9D), UINT32_C(0x6D6477D6), UINT32_C(0x7F977915), UINT32_C(0xDF370EAF), UINT32_C(0x55DB3922)}}, {{UINT32_C(0xA9DAC7AE), UINT32_C(0x3028C03A), UINT32_C(0xBAE06BE0), UINT32_C(0x16F7DF0D), UINT32_C(0x410D57D9), UINT32_C(0x09548398), UINT32_C(0x1510D51F), UINT32_C(0x5E9C7F43)}, {UINT32_C(0xD07717B3), UINT32_C(0x033B9BE2), UINT32_C(0xEF08AB91), UINT32_C(0x0D5D8116), UINT32_C(0xEEEFE88F), UINT32_C(0xD5A172B1), UINT32_C(0x0996294E), UINT32_C(0x72B1D29F)}}, {{UINT32_C(0xE4D0965C), UINT32_C(0x9E2B79FB), UINT32_C(0xF49D8B8E), UINT32_C(0x01F403EE), UINT32_C(0xCEB12D6A), UINT32_C(0xBD4D2D48), UINT32_C(0x11FB24FB), UINT32_C(0x4D04DD9A)}, {UINT32_C(0xE5C8D24C), UINT32_C(0x7E613EC5), UINT32_C(0xB918E543), UINT32_C(0x568BEFE8), UINT32_C(0xE966DF28), UINT32_C(0xD6456D1E), UINT32_C(0xBAFC71E2), UINT32_C(0x2DDEAD63)}}, {{UINT32_C(0x448D72E9), UINT32_C(0x1D794F92), UINT32_C(0xE7E62BF2), UINT32_C(0x3978052E), UINT32_C(0xE2B92538), UINT32_C(0xF6C7A72E), UINT32_C(0x6EF321F0), UINT32_C(0x43879A88)}, {UINT32_C(0x34F6FFBC), UINT32_C(0x2A823140), UINT32_C(0x35F4C485), UINT32_C(0x26F84E51), UINT32_C(0x028BFA7E), UINT32_C(0xDEE65540), UINT32_C(0x5F033058), UINT32_C(0x56216E9D)}}, {{UINT32_C(0xCBC772EE), UINT32_C(0x31CA5470), UINT32_C(0x811BB5D0), UINT32_C(0xD3621E11), UINT32_C(0x70863D71), UINT32_C(0x501C4C47), UINT32_C(0xD28D6BDD), UINT32_C(0x0564518E)}, {UINT32_C(0xD35B64B9), UINT32_C(0x60E3B89B), UINT32_C(0x6621A688), UINT32_C(0xB4F2599A), UINT32_C(0x3B5E116D), UINT32_C(0x1A8C4508), UINT32_C(0xFABF3125), UINT32_C(0x633EF5CC)}}, {{UINT32_C(0x5D4FF62A), UINT32_C(0x0DB1D251), UINT32_C(0x4B17D658), UINT32_C(0x6CBD00EB), UINT32_C(0xFA1DB737), UINT32_C(0x2FA38212), UINT32_C(0x93A7FA03), UINT32_C(0x07B18CB8)}, {UINT32_C(0x548E5F82), UINT32_C(0x531E47EF), UINT32_C(0x8276963C), UINT32_C(0xAE7B94FD), UINT32_C(0x6181A13A), UINT32_C(0x8055D82A), UINT32_C(0x23B6E361), UINT32_C(0x5725B512)}}, {{UINT32_C(0x6D8B1FFE), UINT32_C(0xD84C7041), UINT32_C(0x5D994200), UINT32_C(0xF68ACA0B), UINT32_C(0x6BB908E2), UINT32_C(0x32BF9944), UINT32_C(0x1AD88DB1), UINT32_C(0x1240A3E6)}, {UINT32_C(0xA92B6472), UINT32_C(0xB0BE96AA), UINT32_C(0xA1B7726C), UINT32_C(0xEF88A155), UINT32_C(0x9349F496), UINT32_C(0x000FD9ED), UINT32_C(0x454A05D9), UINT32_C(0x377DCBAD)}}, }, { {{UINT32_C(0xC04111D2), UINT32_C(0xD0A092CD), UINT32_C(0x338F06D6), UINT32_C(0x5C43A94C), UINT32_C(0x25E964F3), UINT32_C(0x697B4C26), UINT32_C(0x7572CCFD), UINT32_C(0x2CD5A059)}, {UINT32_C(0xB5B523E4), UINT32_C(0xA09FC4D4), UINT32_C(0x4E1E9042), UINT32_C(0x7D8141E8), UINT32_C(0xD637409E), UINT32_C(0x2462512B), UINT32_C(0x7CB2CE75), UINT32_C(0x503F032F)}}, {{UINT32_C(0xBCBF1450), UINT32_C(0xC56F38E3), UINT32_C(0xCF2E5594), UINT32_C(0x09F4FC77), UINT32_C(0x0FCB653A), UINT32_C(0xF449C3E6), UINT32_C(0x64A53C65), UINT32_C(0x6A1FE752)}, {UINT32_C(0x7C039488), UINT32_C(0xFF366FED), UINT32_C(0x8C99A6CB), UINT32_C(0x23F58BA5), UINT32_C(0x8D67F6D6), UINT32_C(0x4B5546C6), UINT32_C(0x178B1668), UINT32_C(0x03405C85)}}, {{UINT32_C(0xC0C86696), UINT32_C(0x969F1B33), UINT32_C(0x13746468), UINT32_C(0x9346D06C), UINT32_C(0xAE0C6D62), UINT32_C(0x68AED3C8), UINT32_C(0x74FE63D5), UINT32_C(0x7B3D5361)}, {UINT32_C(0xC4F4B65D), UINT32_C(0xFEE8416B), UINT32_C(0x554C6D0A), UINT32_C(0xC79BF488), UINT32_C(0xDC402BB0), UINT32_C(0x191D5D27), UINT32_C(0xE087EB9F), UINT32_C(0x31B00167)}}, {{UINT32_C(0xE05D281F), UINT32_C(0xD5FE0979), UINT32_C(0x3485446B), UINT32_C(0x8373AB50), UINT32_C(0x9223681F), UINT32_C(0xCE5258BA), UINT32_C(0xA37BF244), UINT32_C(0x5F82843E)}, {UINT32_C(0xCFC16536), UINT32_C(0x94ED780B), UINT32_C(0xBD477733), UINT32_C(0x6A9739B3), UINT32_C(0xA04A4195), UINT32_C(0x137D68F2), UINT32_C(0x0032BFCE), UINT32_C(0x3A0F27E8)}}, {{UINT32_C(0x358382F9), UINT32_C(0x7EADE421), UINT32_C(0x92E3D912), UINT32_C(0x490B9CA6), UINT32_C(0xF1AFBC2A), UINT32_C(0x040CE73E), UINT32_C(0x11AE91BA), UINT32_C(0x5745D473)}, {UINT32_C(0xCE303B77), UINT32_C(0x625BED61), UINT32_C(0x85B03A1D), UINT32_C(0x85B2A1EB), UINT32_C(0x3D7C02E0), UINT32_C(0x764F62E4), UINT32_C(0xA7AF6DDE), UINT32_C(0x22C2D16F)}}, {{UINT32_C(0xD19377BE), UINT32_C(0x5B985DE6), UINT32_C(0xD8E43A10), UINT32_C(0x0AF85A06), UINT32_C(0x0519F4C6), UINT32_C(0x1465E504), UINT32_C(0xE3E20BA3), UINT32_C(0x5DA01665)}, {UINT32_C(0x675D9E2A), UINT32_C(0xCD9B8E9B), UINT32_C(0x6448A2CD), UINT32_C(0x4C77E1AD), UINT32_C(0x1E5D4465), UINT32_C(0xD6094BAD), UINT32_C(0xC50DB788), UINT32_C(0x4C352951)}}, {{UINT32_C(0xEE5AB903), UINT32_C(0x42581152), UINT32_C(0x63311418), UINT32_C(0xDAD2DBC9), UINT32_C(0xB885E56A), UINT32_C(0xBCA4F70B), UINT32_C(0xB94E0876), UINT32_C(0x1F5DD363)}, {UINT32_C(0x3FFF479E), UINT32_C(0xF9AD5D04), UINT32_C(0xFE06AD2B), UINT32_C(0xEF1176E5), UINT32_C(0x216F77AF), UINT32_C(0x46ACB00A), UINT32_C(0x857C4F78), UINT32_C(0x709CF4EB)}}, {{UINT32_C(0xD0D2FF1C), UINT32_C(0x70CD666E), UINT32_C(0xE7EFE4AD), UINT32_C(0x4BAD4A6A), UINT32_C(0x0FA72024), UINT32_C(0xB43F6C2D), UINT32_C(0xE90C0617), UINT32_C(0x0D78F8E2)}, {UINT32_C(0xF80DCAA7), UINT32_C(0x543B9662), UINT32_C(0xF28ADFAF), UINT32_C(0xB02FB3BC), UINT32_C(0xC51C54C3), UINT32_C(0x26C17651), UINT32_C(0x3D648D88), UINT32_C(0x0815F637)}}, {{UINT32_C(0xAEA98FA6), UINT32_C(0xAC4F43C1), UINT32_C(0xAC4398C6), UINT32_C(0x2D223416), UINT32_C(0xDA5C5070), UINT32_C(0x48B2EEAD), UINT32_C(0xBE666F70), UINT32_C(0x632B65F1)}, {UINT32_C(0x952021BE), UINT32_C(0x971D3BC0), UINT32_C(0x23B2C578), UINT32_C(0x9FDCB7E0), UINT32_C(0x3CC21796), UINT32_C(0x476D4715), UINT32_C(0x95832A94), UINT32_C(0x4015565F)}}, {{UINT32_C(0x13CA725C), UINT32_C(0x8913AFAC), UINT32_C(0xDC18F0D9), UINT32_C(0xA56DC461), UINT32_C(0x10F3AAFE), UINT32_C(0xAC3AC720), UINT32_C(0xC628D69C), UINT32_C(0x5D75567E)}, {UINT32_C(0xEEEA4BF7), UINT32_C(0xC11BE9DC), UINT32_C(0x1C193BD5), UINT32_C(0xAD97FBCA), UINT32_C(0xC58123E8), UINT32_C(0xD1EC5BCE), UINT32_C(0x9C73D4E5), UINT32_C(0x0F6DF930)}}, {{UINT32_C(0xFD759FFD), UINT32_C(0xE80A0ADA), UINT32_C(0x239CAFC0), UINT32_C(0xE52DF94B), UINT32_C(0xFE7A43E9), UINT32_C(0x59640161), UINT32_C(0xDB1A38F0), UINT32_C(0x7A96995C)}, {UINT32_C(0x7CD5011B), UINT32_C(0xA46A1503), UINT32_C(0xAC0E9689), UINT32_C(0x75CFB637), UINT32_C(0x97AAD2BA), UINT32_C(0x27B740CA), UINT32_C(0xEAD2F776), UINT32_C(0x64A0748B)}}, {{UINT32_C(0x0625B3B1), UINT32_C(0xB67E5BB5), UINT32_C(0xC66D2832), UINT32_C(0x2FE19FFB), UINT32_C(0xF70C07CF), UINT32_C(0x47815666), UINT32_C(0xA43E52AB), UINT32_C(0x5A1AA24A)}, {UINT32_C(0x4CAC0E66), UINT32_C(0x04EE11F8), UINT32_C(0x3A3A4836), UINT32_C(0x51E51583), UINT32_C(0xB44F6DEC), UINT32_C(0x46755F49), UINT32_C(0xC1E9B282), UINT32_C(0x6388408B)}}, {{UINT32_C(0x9DE7A6A7), UINT32_C(0xD47AA9A6), UINT32_C(0x189BC9D2), UINT32_C(0xEC94AD9B), UINT32_C(0x8EC0E950), UINT32_C(0xFA89099D), UINT32_C(0x9F64D27F), UINT32_C(0x1B9FC206)}, {UINT32_C(0x0B729DE1), UINT32_C(0x76572484), UINT32_C(0x4BE22EB8), UINT32_C(0xFE9E8E71), UINT32_C(0xF9DB5942), UINT32_C(0x910F0456), UINT32_C(0xC617D82B), UINT32_C(0x4D018459)}}, {{UINT32_C(0xF5516C6F), UINT32_C(0xB082B58A), UINT32_C(0x567A8CF5), UINT32_C(0xFFBA0E73), UINT32_C(0x8A6DD4A0), UINT32_C(0x08FF64CE), UINT32_C(0x69A9F66A), UINT32_C(0x6CF3C89C)}, {UINT32_C(0x62FEB0A7), UINT32_C(0x356782BA), UINT32_C(0x3E2907F9), UINT32_C(0x1A18720D), UINT32_C(0x0BBD9D92), UINT32_C(0xF840FFA3), UINT32_C(0x20926421), UINT32_C(0x41D9EECA)}}, {{UINT32_C(0xB6B08321), UINT32_C(0xCF2E8AAC), UINT32_C(0x010D91C0), UINT32_C(0xC76FBE12), UINT32_C(0x68E35E02), UINT32_C(0x54924750), UINT32_C(0x9AEE00F8), UINT32_C(0x74DBA2E1)}, {UINT32_C(0xC5504E82), UINT32_C(0x94C70D6D), UINT32_C(0xEA1770F7), UINT32_C(0x0BDF415F), UINT32_C(0x3CA6DB0A), UINT32_C(0xDA45B700), UINT32_C(0xE133A980), UINT32_C(0x473C6A04)}}, {{UINT32_C(0x1E188071), UINT32_C(0xD1FF6C1E), UINT32_C(0xEA3F16F8), UINT32_C(0x621A7D3C), UINT32_C(0x6A160F47), UINT32_C(0x60467307), UINT32_C(0x32DC84EE), UINT32_C(0x37CA7D3D)}, {UINT32_C(0x67DDFDB5), UINT32_C(0x54F5F7F6), UINT32_C(0x921BA04B), UINT32_C(0x3A8482F9), UINT32_C(0x1A28E238), UINT32_C(0x842F4950), UINT32_C(0x7214FAFD), UINT32_C(0x3A4DC917)}}, }, { {{UINT32_C(0xEEA25E82), UINT32_C(0xEDD8360C), UINT32_C(0xFB7B7ED0), UINT32_C(0x3DB6D933), UINT32_C(0xABF15199), UINT32_C(0x882F3C0B), UINT32_C(0x516E349D), UINT32_C(0x228664A2)}, {UINT32_C(0xE88173DF), UINT32_C(0x96E6DCF7), UINT32_C(0xD7EC0BC3), UINT32_C(0x382C8D3B), UINT32_C(0x6FA5FA58), UINT32_C(0xFBFF6D21), UINT32_C(0x2F41C959), UINT32_C(0x78003980)}}, {{UINT32_C(0x9D9ACF9C), UINT32_C(0x713BA43B), UINT32_C(0x94876559), UINT32_C(0xF59A252D), UINT32_C(0x437B8ED5), UINT32_C(0x8B310954), UINT32_C(0xE474E98E), UINT32_C(0x76A83790)}, {UINT32_C(0xF6040B05), UINT32_C(0x84C1386A), UINT32_C(0xBF3D8189), UINT32_C(0x69FA9F43), UINT32_C(0xA98D4866), UINT32_C(0x5584164C), UINT32_C(0x3B9045D0), UINT32_C(0x6C89CE1D)}}, {{UINT32_C(0xB522FB28), UINT32_C(0xD6EF7540), UINT32_C(0xBB28D745), UINT32_C(0xDB561B56), UINT32_C(0xEFA58B87), UINT32_C(0xC9F7543E), UINT32_C(0xE9062979), UINT32_C(0x5F02A23B)}, {UINT32_C(0x6809D624), UINT32_C(0xFD3C0C19), UINT32_C(0xA92EB229), UINT32_C(0x94481554), UINT32_C(0xF5147EFB), UINT32_C(0x72D8EC53), UINT32_C(0x0D1BA626), UINT32_C(0x14302661)}}, {{UINT32_C(0x89020800), UINT32_C(0x0B35BD59), UINT32_C(0x430D7DEB), UINT32_C(0x3C6F1527), UINT32_C(0x2FFFA0E0), UINT32_C(0x9BEB3C8E), UINT32_C(0xAFD09A19), UINT32_C(0x7E181B78)}, {UINT32_C(0x3B2F0B49), UINT32_C(0xE82FD957), UINT32_C(0x0BC0F9DA), UINT32_C(0x4C9461B1), UINT32_C(0x2B1C8B85), UINT32_C(0x87D78C41), UINT32_C(0xC1F5BDA1), UINT32_C(0x775BED20)}}, {{UINT32_C(0x16350593), UINT32_C(0x883AE89B), UINT32_C(0x0C19FEC8), UINT32_C(0x85D429CB), UINT32_C(0x5742C36D), UINT32_C(0x5938BDEC), UINT32_C(0xDA8A21B7), UINT32_C(0x2DDBC7EB)}, {UINT32_C(0x07A2E700), UINT32_C(0xA249BDE4), UINT32_C(0xE8BD6215), UINT32_C(0x42A3897C), UINT32_C(0x732FF181), UINT32_C(0x87F30BA7), UINT32_C(0x1B912C57), UINT32_C(0x5385D709)}}, {{UINT32_C(0x288041F5), UINT32_C(0x2B5C555B), UINT32_C(0x1F425866), UINT32_C(0xD3D90040), UINT32_C(0x02E0FA71), UINT32_C(0x37E40CD2), UINT32_C(0x3A386038), UINT32_C(0x08B37F26)}, {UINT32_C(0x5DE1ED78), UINT32_C(0x165BD7FB), UINT32_C(0x0829ECC9), UINT32_C(0x22949E81), UINT32_C(0xBCE3D01F), UINT32_C(0xBB8705CC), UINT32_C(0x1D233CDF), UINT32_C(0x7961BE85)}}, {{UINT32_C(0x7659B477), UINT32_C(0x5D3DBC6B), UINT32_C(0x50EF08EB), UINT32_C(0xFD865779), UINT32_C(0xF34EA1A5), UINT32_C(0x502729E8), UINT32_C(0xD2B64602), UINT32_C(0x1548526E)}, {UINT32_C(0xB91D2675), UINT32_C(0xB13632FD), UINT32_C(0xF7B37397), UINT32_C(0x09A42003), UINT32_C(0xCCFC4532), UINT32_C(0x37D18F37), UINT32_C(0x73C7082C), UINT32_C(0x3FAEF63B)}}, {{UINT32_C(0xE666DB6D), UINT32_C(0x3365445F), UINT32_C(0x339A0076), UINT32_C(0x9051FFF5), UINT32_C(0x9BD6D01D), UINT32_C(0x6167FB76), UINT32_C(0xCA087B41), UINT32_C(0x09737137)}, {UINT32_C(0xB3270BA7), UINT32_C(0xCA2193AE), UINT32_C(0x8F2217B3), UINT32_C(0xEF0744C2), UINT32_C(0xF0DD10D8), UINT32_C(0x3E030D58), UINT32_C(0xCCB4F2F9), UINT32_C(0x667246DB)}}, {{UINT32_C(0x3773EC8C), UINT32_C(0x31F3030E), UINT32_C(0x5AD56010), UINT32_C(0xAF2B3123), UINT32_C(0xB37E9062), UINT32_C(0xFC118587), UINT32_C(0x9C2D5406), UINT32_C(0x52840C2C)}, {UINT32_C(0x6670ACBB), UINT32_C(0xA96D3DFF), UINT32_C(0x772EC6D3), UINT32_C(0xF469982F), UINT32_C(0xA9DF4C88), UINT32_C(0x5BE20628), UINT32_C(0x673633BC), UINT32_C(0x59D01479)}}, {{UINT32_C(0xAFB5083B), UINT32_C(0xC9223750), UINT32_C(0x191C2160), UINT32_C(0xF1EB451E), UINT32_C(0xA38EC005), UINT32_C(0x0D913794), UINT32_C(0x83FD1D18), UINT32_C(0x31062E9E)}, {UINT32_C(0x5F4816AD), UINT32_C(0x070538F5), UINT32_C(0x925F5DA1), UINT32_C(0x90D4855D), UINT32_C(0x22F455B6), UINT32_C(0xC0BBA87B), UINT32_C(0xF48D2AE5), UINT32_C(0x517B5F80)}}, {{UINT32_C(0x3F4FA7CA), UINT32_C(0x0D8B670A), UINT32_C(0x3D114EB2), UINT32_C(0xE29C8849), UINT32_C(0x916A187E), UINT32_C(0x1823780D), UINT32_C(0x65EE66A0), UINT32_C(0x6961C483)}, {UINT32_C(0x62FDC12C), UINT32_C(0x2F6FB20A), UINT32_C(0x0CFDDE0C), UINT32_C(0x51414E5F), UINT32_C(0xDCA39073), UINT32_C(0x16BD56A7), UINT32_C(0x648FFD43), UINT32_C(0x0CFE6DAF)}}, {{UINT32_C(0xAEBA9241), UINT32_C(0x3789F4CA), UINT32_C(0x107777C6), UINT32_C(0xE8056BC6), UINT32_C(0x3CB20826), UINT32_C(0x6EE564C3), UINT32_C(0x45448C69), UINT32_C(0x5DF36347)}, {UINT32_C(0xB22CE624), UINT32_C(0xFD0FA84B), UINT32_C(0xAC753D50), UINT32_C(0x2AA19672), UINT32_C(0x677CC0D0), UINT32_C(0x29A1464F), UINT32_C(0x3CEF5493), UINT32_C(0x7C2237B1)}}, {{UINT32_C(0x24255918), UINT32_C(0x87C2587C), UINT32_C(0x90B35A37), UINT32_C(0x9AA89A0B), UINT32_C(0x10E7CAEF), UINT32_C(0x9932EB78), UINT32_C(0xCDE31568), UINT32_C(0x49278F16)}, {UINT32_C(0x41188ED9), UINT32_C(0xA4D33C61), UINT32_C(0x05AC3A1D), UINT32_C(0xC587BDE0), UINT32_C(0x7248B5E0), UINT32_C(0x2A5C5ACC), UINT32_C(0x8510D2CB), UINT32_C(0x60026A1D)}}, {{UINT32_C(0x6BAF603C), UINT32_C(0xE57CB0C9), UINT32_C(0xAB770AF0), UINT32_C(0x527F28A6), UINT32_C(0x016F2BC1), UINT32_C(0x2850D8E6), UINT32_C(0x936DC2EC), UINT32_C(0x0EC2A46C)}, {UINT32_C(0xD4F23FC2), UINT32_C(0xA0BC5306), UINT32_C(0x53A0130F), UINT32_C(0x6DBEDA26), UINT32_C(0xEE3314B7), UINT32_C(0xB1D52F87), UINT32_C(0x6C234CF5), UINT32_C(0x17168B12)}}, {{UINT32_C(0xDADF17D5), UINT32_C(0x8B8BC181), UINT32_C(0xFAFFA918), UINT32_C(0x31EC3CAD), UINT32_C(0x274E4658), UINT32_C(0x4611A482), UINT32_C(0x73D35EAD), UINT32_C(0x5A9E3652)}, {UINT32_C(0xF4028FC7), UINT32_C(0xBA68825B), UINT32_C(0x62E203F5), UINT32_C(0x142859D5), UINT32_C(0x1C817A9E), UINT32_C(0xCE516AC4), UINT32_C(0x57223F8D), UINT32_C(0x42014682)}}, {{UINT32_C(0xB4B66798), UINT32_C(0x51FBFB2E), UINT32_C(0x0EA9C4EF), UINT32_C(0x3A3F1591), UINT32_C(0xE8814805), UINT32_C(0x3FD3D026), UINT32_C(0xB0C8DFD0), UINT32_C(0x3CA531E4)}, {UINT32_C(0xE585A960), UINT32_C(0x69A6B3F8), UINT32_C(0xBD3F567D), UINT32_C(0x1627CC77), UINT32_C(0x5DB9CFD0), UINT32_C(0x6F4EF430), UINT32_C(0x8D02278A), UINT32_C(0x05B56707)}}, }, { {{UINT32_C(0x10B96338), UINT32_C(0x6663F2F3), UINT32_C(0xCE8CA31C), UINT32_C(0x69373D1F), UINT32_C(0xD67AEC10), UINT32_C(0x3D31C5CF), UINT32_C(0x16F2547E), UINT32_C(0x2FAF5545)}, {UINT32_C(0x1EA2EA64), UINT32_C(0xF6E397D5), UINT32_C(0xEEAEBE7A), UINT32_C(0x2281A0DF), UINT32_C(0xFA2527EC), UINT32_C(0x72E53254), UINT32_C(0x76432155), UINT32_C(0x660D059A)}}, {{UINT32_C(0x2C66D937), UINT32_C(0xD3CA8B13), UINT32_C(0xCD2DF849), UINT32_C(0xC6F34B08), UINT32_C(0xA23A9F73), UINT32_C(0x9AF2C9E3), UINT32_C(0x702388E9), UINT32_C(0x24D44BD9)}, {UINT32_C(0xD1B3DA10), UINT32_C(0x8DA4D6A4), UINT32_C(0x40B93B10), UINT32_C(0xB9FAFBF4), UINT32_C(0xEFCFD2A3), UINT32_C(0xBBE51BB3), UINT32_C(0x1844581D), UINT32_C(0x68BE0395)}}, {{UINT32_C(0x0EA1FAE1), UINT32_C(0xDECABD8C), UINT32_C(0xFDFED7C2), UINT32_C(0xA7499225), UINT32_C(0xFB468B83), UINT32_C(0x08489E35), UINT32_C(0x43D95F9C), UINT32_C(0x5B689344)}, {UINT32_C(0x9D2F522E), UINT32_C(0x9FC8364A), UINT32_C(0x3A5D27A4), UINT32_C(0x114DB31A), UINT32_C(0xE33A9EC8), UINT32_C(0xC6A35992), UINT32_C(0xDC9ACAF6), UINT32_C(0x6FE9EC3B)}}, {{UINT32_C(0xDEAFC64C), UINT32_C(0x98AE2D66), UINT32_C(0xABE706B7), UINT32_C(0x95AAC8EF), UINT32_C(0x223DFA3B), UINT32_C(0xB15A6604), UINT32_C(0xE24B43CB), UINT32_C(0x77DBC24A)}, {UINT32_C(0x8542FA2A), UINT32_C(0x65D6F871), UINT32_C(0x5D326A1A), UINT32_C(0x1093B273), UINT32_C(0xF137AFEF), UINT32_C(0xBA82D607), UINT32_C(0xB9DEA6A7), UINT32_C(0x502B32E3)}}, {{UINT32_C(0x885CA6CE), UINT32_C(0x88906BD6), UINT32_C(0x1D36BFEE), UINT32_C(0x136ADF9A), UINT32_C(0x09AA61E3), UINT32_C(0xF844088C), UINT32_C(0x51BAC299), UINT32_C(0x4E508EA3)}, {UINT32_C(0xEB821936), UINT32_C(0x251ACD26), UINT32_C(0x43D90E10), UINT32_C(0xDF6AD7D5), UINT32_C(0xDE7F14B9), UINT32_C(0xEBCD7046), UINT32_C(0xAB503259), UINT32_C(0x1DB258B1)}}, {{UINT32_C(0x90AD5D55), UINT32_C(0x348E3018), UINT32_C(0x7067806A), UINT32_C(0x0EF6BE73), UINT32_C(0x41627FCC), UINT32_C(0x072C1134), UINT32_C(0xE904F823), UINT32_C(0x48EE7606)}, {UINT32_C(0xD9FD5EF3), UINT32_C(0xEE6AB582), UINT32_C(0x17AB50BC), UINT32_C(0x57765D03), UINT32_C(0xFB7DEC68), UINT32_C(0x1CCFB407), UINT32_C(0x141DF51D), UINT32_C(0x2E1771C7)}}, {{UINT32_C(0xA013284B), UINT32_C(0xCBDD6235), UINT32_C(0x20D07125), UINT32_C(0x4D93FD87), UINT32_C(0xD485418E), UINT32_C(0xB3D055B3), UINT32_C(0xC67ADD2D), UINT32_C(0x4EFB8763)}, {UINT32_C(0x1B2DF427), UINT32_C(0xEC369382), UINT32_C(0x64D0DDF4), UINT32_C(0x25009791), UINT32_C(0x163056C8), UINT32_C(0x9BD42FFC), UINT32_C(0x5B88BEBA), UINT32_C(0x60527792)}}, {{UINT32_C(0x9D82DADF), UINT32_C(0x6D5D6A86), UINT32_C(0x7C24A1CA), UINT32_C(0xC3BA9A16), UINT32_C(0x2E6981CC), UINT32_C(0x838167EC), UINT32_C(0x7E1E4237), UINT32_C(0x7FB5D857)}, {UINT32_C(0x86A40BC7), UINT32_C(0x83B2C2FC), UINT32_C(0x6F9AC4FB), UINT32_C(0x679D2DFC), UINT32_C(0xE45455EF), UINT32_C(0x0B3714CD), UINT32_C(0x394A7797), UINT32_C(0x1C8D833D)}}, {{UINT32_C(0x4E641C9D), UINT32_C(0x1FBF8961), UINT32_C(0xD951DFC8), UINT32_C(0x3330DAB0), UINT32_C(0x051D96DB), UINT32_C(0x9D4EBA4D), UINT32_C(0x23066924), UINT32_C(0x27C6DBF0)}, {UINT32_C(0xDA5D1D79), UINT32_C(0xB950C648), UINT32_C(0x5E9CD783), UINT32_C(0x544D46BA), UINT32_C(0xE69BA3EF), UINT32_C(0xFA77226F), UINT32_C(0xE4DA8423), UINT32_C(0x0A93D219)}}, {{UINT32_C(0x5BDCA76B), UINT32_C(0x7C377CC6), UINT32_C(0xDC58D194), UINT32_C(0x7DF505D7), UINT32_C(0x13E389E1), UINT32_C(0x18A24C0B), UINT32_C(0x6C3972FD), UINT32_C(0x5E0782DD)}, {UINT32_C(0x6680FCE1), UINT32_C(0x97AD477E), UINT32_C(0x3CBAB792), UINT32_C(0x6B07BF22), UINT32_C(0xDC68C9E2), UINT32_C(0xB8DF3C73), UINT32_C(0xC04B2749), UINT32_C(0x33AB5A4C)}}, {{UINT32_C(0x7E79B5A7), UINT32_C(0xD151C762), UINT32_C(0xC82C7B8A), UINT32_C(0xA4356B79), UINT32_C(0x96E0A2E2), UINT32_C(0x931DDDE8), UINT32_C(0x52C54FDC), UINT32_C(0x40378EB2)}, {UINT32_C(0x40C24003), UINT32_C(0xA6BBD5E3), UINT32_C(0x65C34FEA), UINT32_C(0xB4F3246E), UINT32_C(0x9C767A23), UINT32_C(0x780B21ED), UINT32_C(0x52BD7E83), UINT32_C(0x5F1E95FE)}}, {{UINT32_C(0xCF39F9C4), UINT32_C(0x4F3453DF), UINT32_C(0xB8CC2CA6), UINT32_C(0xA3E1CFD1), UINT32_C(0x4B898859), UINT32_C(0xE49BC49C), UINT32_C(0x6C0BF055), UINT32_C(0x4FFD7BD6)}, {UINT32_C(0xD139AD1B), UINT32_C(0x7DE7604C), UINT32_C(0x2A3CE8FE), UINT32_C(0x6973F5EB), UINT32_C(0xF9501ECC), UINT32_C(0xAC66FF97), UINT32_C(0xA97D46CD), UINT32_C(0x3D96F1E2)}}, {{UINT32_C(0x6106EB96), UINT32_C(0x70D5A0D0), UINT32_C(0x398C1FD9), UINT32_C(0x938E038F), UINT32_C(0x1F3A1AA9), UINT32_C(0xE66B7007), UINT32_C(0xF5BD9308), UINT32_C(0x42BDB264)}, {UINT32_C(0x5AF84957), UINT32_C(0x4B3FD754), UINT32_C(0x4E27DC6B), UINT32_C(0x9E3E17FA), UINT32_C(0x51D8560B), UINT32_C(0x384FCACD), UINT32_C(0xF8068C09), UINT32_C(0x42F00D11)}}, {{UINT32_C(0x7D5897D5), UINT32_C(0x794C1E6A), UINT32_C(0xDF72DCA0), UINT32_C(0x4901097F), UINT32_C(0x0B01E4C4), UINT32_C(0xDED5B192), UINT32_C(0x26DD41E9), UINT32_C(0x364FF582)}, {UINT32_C(0x32FCA925), UINT32_C(0xA3F92DCC), UINT32_C(0x207AA09A), UINT32_C(0x8A1FB329), UINT32_C(0xF512AE3A), UINT32_C(0xA9274BD3), UINT32_C(0xC47B9007), UINT32_C(0x161C82BC)}}, {{UINT32_C(0x7AE1175F), UINT32_C(0x482ECE3B), UINT32_C(0xBDD5DC6C), UINT32_C(0x97CAC7E8), UINT32_C(0x9FDA910D), UINT32_C(0x56225309), UINT32_C(0x9FC206B9), UINT32_C(0x52A9893B)}, {UINT32_C(0x05BB5ACA), UINT32_C(0xAD9F2A92), UINT32_C(0xA3B65716), UINT32_C(0xB9EEFB5B), UINT32_C(0x8DB5A8D4), UINT32_C(0xE7BC173B), UINT32_C(0x399DAE9E), UINT32_C(0x6715EC64)}}, {{UINT32_C(0x5E41AC75), UINT32_C(0x780796D1), UINT32_C(0x4FB3A0B4), UINT32_C(0x3E165C78), UINT32_C(0x237103E9), UINT32_C(0x198599BA), UINT32_C(0xFA7ED86B), UINT32_C(0x2C04C3F5)}, {UINT32_C(0xAC9356F0), UINT32_C(0x29547DA8), UINT32_C(0x79EADA37), UINT32_C(0xCB345AB4), UINT32_C(0xA295BF2D), UINT32_C(0x1D15D377), UINT32_C(0x2FDC8131), UINT32_C(0x10292C9D)}}, }, { {{UINT32_C(0x40E1DC7E), UINT32_C(0xADF3B547), UINT32_C(0x1C345D14), UINT32_C(0x420CE2DD), UINT32_C(0x21DC5C2D), UINT32_C(0xC08E3CBE), UINT32_C(0x6F8FCE80), UINT32_C(0x79FDC000)}, {UINT32_C(0xCB105CE7), UINT32_C(0x23EBDF7F), UINT32_C(0x7C6794A8), UINT32_C(0x793FC99D), UINT32_C(0x293E3575), UINT32_C(0x4CA3FB21), UINT32_C(0x7BF73CC8), UINT32_C(0x7FB2ACB9)}}, {{UINT32_C(0x0FC8FCD4), UINT32_C(0x67DB6C90), UINT32_C(0x7EE3B705), UINT32_C(0x22A3DF5F), UINT32_C(0xC7B2EDFF), UINT32_C(0xD50EBF8B), UINT32_C(0x99522FB7), UINT32_C(0x0C701045)}, {UINT32_C(0xAD4F9044), UINT32_C(0x1420CF02), UINT32_C(0xE5B59451), UINT32_C(0xD78DBA23), UINT32_C(0x6AEFD853), UINT32_C(0xDFDC1C7F), UINT32_C(0xDEA1DAAB), UINT32_C(0x560DEE94)}}, {{UINT32_C(0x2167A78B), UINT32_C(0x0F235513), UINT32_C(0x9F441927), UINT32_C(0xCF463702), UINT32_C(0xA3D1505C), UINT32_C(0xD0AE2723), UINT32_C(0xCD9FBFF4), UINT32_C(0x3149D858)}, {UINT32_C(0xF79240FA), UINT32_C(0x2A73913A), UINT32_C(0x252A958B), UINT32_C(0xC904A575), UINT32_C(0x78473D97), UINT32_C(0x10D18190), UINT32_C(0x203BC8C4), UINT32_C(0x42CE7A38)}}, {{UINT32_C(0xFA59BB8B), UINT32_C(0x1D2AD4F2), UINT32_C(0x79F137DD), UINT32_C(0x8234964C), UINT32_C(0x5D02679E), UINT32_C(0x00B63A30), UINT32_C(0x5DD7543D), UINT32_C(0x506C45BE)}, {UINT32_C(0x776BF80C), UINT32_C(0x4378F900), UINT32_C(0xB312F2BB), UINT32_C(0x179558B2), UINT32_C(0xEA37C183), UINT32_C(0x5B15368C), UINT32_C(0xB198E42D), UINT32_C(0x7593B19F)}}, {{UINT32_C(0xDEFA1F48), UINT32_C(0xED723535), UINT32_C(0x87F96EE5), UINT32_C(0x0DAFC48B), UINT32_C(0x91B1B52C), UINT32_C(0x0AEFA3BA), UINT32_C(0xA1ADBEA4), UINT32_C(0x56BA1B33)}, {UINT32_C(0x30A6C905), UINT32_C(0x8A0B6170), UINT32_C(0xB272D12E), UINT32_C(0xC5BA3518), UINT32_C(0x4B6643A9), UINT32_C(0x782100CF), UINT32_C(0x85C5BD2B), UINT32_C(0x12DEE803)}}, {{UINT32_C(0x78FCADD6), UINT32_C(0xDD07D2D5), UINT32_C(0x3B25C523), UINT32_C(0x8CB8E8A8), UINT32_C(0x530919CF), UINT32_C(0x25063508), UINT32_C(0x1E24F7A1), UINT32_C(0x45D3DD54)}, {UINT32_C(0x49DDAF96), UINT32_C(0x296AE893), UINT32_C(0xACE559F5), UINT32_C(0x7EF3CDE0), UINT32_C(0x0D36F87B), UINT32_C(0x9CDF22E4), UINT32_C(0x4AC9A845), UINT32_C(0x19684765)}}, {{UINT32_C(0xC597B7AE), UINT32_C(0x3955B5AB), UINT32_C(0x3AB49731), UINT32_C(0x59F3BA05), UINT32_C(0xF525C6C8), UINT32_C(0xBCA5B117), UINT32_C(0x32050B8D), UINT32_C(0x4969C134)}, {UINT32_C(0x970E8E49), UINT32_C(0x353183D9), UINT32_C(0xE95300CF), UINT32_C(0x3D005213), UINT32_C(0x09022378), UINT32_C(0x595F9C8E), UINT32_C(0x1A445C28), UINT32_C(0x70FA8B47)}}, {{UINT32_C(0xBADB79EA), UINT32_C(0xECC88EE3), UINT32_C(0xFBD8464E), UINT32_C(0x5BDAF68C), UINT32_C(0xB4280334), UINT32_C(0x24AF6A4C), UINT32_C(0x398E5BBE), UINT32_C(0x17A5DE8B)}, {UINT32_C(0x92999E18), UINT32_C(0x300B6DEB), UINT32_C(0x67DEFC2F), UINT32_C(0xA0766918), UINT32_C(0xB19F87FF), UINT32_C(0x4E904450), UINT32_C(0xC2871056), UINT32_C(0x3010AD94)}}, {{UINT32_C(0x461EFCC3), UINT32_C(0x72E747A1), UINT32_C(0x562F923E), UINT32_C(0x329EDF18), UINT32_C(0xD081A4E7), UINT32_C(0x65E021D4), UINT32_C(0xB727B6F4), UINT32_C(0x4B2DBFFF)}, {UINT32_C(0x9C8505AC), UINT32_C(0x5A597A80), UINT32_C(0x562B82D2), UINT32_C(0x13486480), UINT32_C(0xCC8234C3), UINT32_C(0x477FD480), UINT32_C(0x04800C00), UINT32_C(0x6045ABA4)}}, {{UINT32_C(0x9C541035), UINT32_C(0x3E087439), UINT32_C(0x6D9D8B6A), UINT32_C(0x389AA76C), UINT32_C(0x36A21299), UINT32_C(0x68FE5E83), UINT32_C(0x402A32CF), UINT32_C(0x67AC313D)}, {UINT32_C(0x25501A53), UINT32_C(0x996131D2), UINT32_C(0xA77A85F4), UINT32_C(0x5C1B89DE), UINT32_C(0xED6702AD), UINT32_C(0xA9822C84), UINT32_C(0x56609EA0), UINT32_C(0x50F014A4)}}, {{UINT32_C(0xE5A8E91E), UINT32_C(0xF0F8B4E6), UINT32_C(0x1A2FFEFD), UINT32_C(0x734CFF08), UINT32_C(0x27BCB163), UINT32_C(0x9724EE0B), UINT32_C(0x30B8EF68), UINT32_C(0x6AF3808B)}, {UINT32_C(0x126E88FC), UINT32_C(0xE5B3829F), UINT32_C(0x4EE5FD4B), UINT32_C(0x0F441EE3), UINT32_C(0xBFEC4D34), UINT32_C(0x534D2F8C), UINT32_C(0x076E6737), UINT32_C(0x3E1F16DE)}}, {{UINT32_C(0x4ED36E6A), UINT32_C(0x4DB53E8A), UINT32_C(0x4352B22F), UINT32_C(0x49A9EFE9), UINT32_C(0x39CF005C), UINT32_C(0x7829605C), UINT32_C(0xD85DB959), UINT32_C(0x190A8E16)}, {UINT32_C(0x9B073AB3), UINT32_C(0x69981069), UINT32_C(0x8C141AA1), UINT32_C(0x8C264B87), UINT32_C(0x603ED47C), UINT32_C(0x7F614282), UINT32_C(0x9F9B0940), UINT32_C(0x21FD2E7A)}}, {{UINT32_C(0x1EC6BB3D), UINT32_C(0xC5CA10A0), UINT32_C(0x27A9B02B), UINT32_C(0x9403E3F5), UINT32_C(0xFB43F790), UINT32_C(0x9D3D186D), UINT32_C(0x67DC0C00), UINT32_C(0x7855276E)}, {UINT32_C(0xFFFFB14C), UINT32_C(0x053DBB2A), UINT32_C(0x43ACC0A6), UINT32_C(0x26746663), UINT32_C(0x7FFC1C68), UINT32_C(0x1EE7A946), UINT32_C(0x56DBB0DE), UINT32_C(0x14BFAF01)}}, {{UINT32_C(0x849EA674), UINT32_C(0x11C89A47), UINT32_C(0x94A540E6), UINT32_C(0x194FAAF0), UINT32_C(0x6050E4C0), UINT32_C(0xE61163F8), UINT32_C(0xB1A07B76), UINT32_C(0x6939A166)}, {UINT32_C(0x2EF18325), UINT32_C(0x8166CA8E), UINT32_C(0x30C042E2), UINT32_C(0x96112E65), UINT32_C(0x5A394C25), UINT32_C(0xA805CAE0), UINT32_C(0x0392E6BB), UINT32_C(0x45A0DE01)}}, {{UINT32_C(0xB4FAAA56), UINT32_C(0xB89CEE96), UINT32_C(0x529736DE), UINT32_C(0x7A7DC8AE), UINT32_C(0xA727FCF7), UINT32_C(0x9158AA49), UINT32_C(0x1896B9DA), UINT32_C(0x621B8B31)}, {UINT32_C(0x03BEC74B), UINT32_C(0x875930D6), UINT32_C(0xA7A50309), UINT32_C(0x1056DB45), UINT32_C(0xB5657B0E), UINT32_C(0xEE713E04), UINT32_C(0x6FCAD967), UINT32_C(0x2D68155E)}}, {{UINT32_C(0x65B1E2B3), UINT32_C(0x3BB1E9E3), UINT32_C(0x88425BAB), UINT32_C(0x2A615670), UINT32_C(0x62F1BA4A), UINT32_C(0x22F4F32F), UINT32_C(0x88A59642), UINT32_C(0x7B5EC250)}, {UINT32_C(0x42D30049), UINT32_C(0x7B5BA12A), UINT32_C(0x86995BE6), UINT32_C(0x4E6AC055), UINT32_C(0x45EC87AC), UINT32_C(0x04431A04), UINT32_C(0xED94823D), UINT32_C(0x28974ED7)}}, }, { {{UINT32_C(0x12BB5555), UINT32_C(0x59258057), UINT32_C(0xBB7608EE), UINT32_C(0x03141CD8), UINT32_C(0xEF77714B), UINT32_C(0x84EBDC49), UINT32_C(0xB5DC1A5F), UINT32_C(0x6A45FC3A)}, {UINT32_C(0x2FBEEC76), UINT32_C(0x1F6DC205), UINT32_C(0xA920C554), UINT32_C(0x17EB733B), UINT32_C(0x7A28ACDF), UINT32_C(0xDB022C21), UINT32_C(0xA9B62BF1), UINT32_C(0x6AF16156)}}, {{UINT32_C(0x80B472CC), UINT32_C(0x9379D6A8), UINT32_C(0x7BD92F27), UINT32_C(0x6CB08CB0), UINT32_C(0x147E6E12), UINT32_C(0x19B3C353), UINT32_C(0x26827839), UINT32_C(0x3C26CB2F)}, {UINT32_C(0x0CC571E4), UINT32_C(0x98AAC9A7), UINT32_C(0xC3C8FC04), UINT32_C(0x075D05F2), UINT32_C(0xD79621AC), UINT32_C(0x718B55A0), UINT32_C(0x5B94B41B), UINT32_C(0x149FEECF)}}, {{UINT32_C(0x783F9C81), UINT32_C(0x6A150A64), UINT32_C(0x0FB18827), UINT32_C(0x5950C2DF), UINT32_C(0xF15E3A89), UINT32_C(0xF5D75504), UINT32_C(0xFCB4406B), UINT32_C(0x5F92F2F7)}, {UINT32_C(0x6123E858), UINT32_C(0x665F31E7), UINT32_C(0xA95184A3), UINT32_C(0x4E568EA9), UINT32_C(0x505FF0AD), UINT32_C(0x851EEADC), UINT32_C(0x542C3EF8), UINT32_C(0x62AD5BA6)}}, {{UINT32_C(0xC55C23FD), UINT32_C(0x1103859D), UINT32_C(0x695E4E9B), UINT32_C(0x06AB0BD6), UINT32_C(0xDD734990), UINT32_C(0x2CD00D76), UINT32_C(0xB06460E4), UINT32_C(0x5D59C693)}, {UINT32_C(0x1F9C76DA), UINT32_C(0x3BA8F2F0), UINT32_C(0x960F5C0E), UINT32_C(0x08E4A7EC), UINT32_C(0xE4AAB060), UINT32_C(0x79C82AD9), UINT32_C(0x0DF95C43), UINT32_C(0x093D322C)}}, {{UINT32_C(0x0C627547), UINT32_C(0x88AF1258), UINT32_C(0x889A5E12), UINT32_C(0x81E5F197), UINT32_C(0x7CBD84FD), UINT32_C(0x99E0E191), UINT32_C(0xDB0B9711), UINT32_C(0x3024BCE8)}, {UINT32_C(0xDB93B1A2), UINT32_C(0x04075C80), UINT32_C(0x628B0E63), UINT32_C(0x12F30AF8), UINT32_C(0xEB25A4ED), UINT32_C(0xA3514F26), UINT32_C(0x7BCD0873), UINT32_C(0x3D42E489)}}, {{UINT32_C(0x754B236F), UINT32_C(0x0F1C16C6), UINT32_C(0x594F5D3D), UINT32_C(0x717CE487), UINT32_C(0xAFAD77B1), UINT32_C(0x7679C7DA), UINT32_C(0x6F3E724C), UINT32_C(0x51AFD014)}, {UINT32_C(0x3AF6938F), UINT32_C(0xAFC9745C), UINT32_C(0xC4E61CB4), UINT32_C(0xCA12BFA9), UINT32_C(0x9425CCA7), UINT32_C(0x943B5696), UINT32_C(0xB6E48A69), UINT32_C(0x5BD3E65E)}}, {{UINT32_C(0xDEAE74B1), UINT32_C(0x2D23CF78), UINT32_C(0x043BF2F1), UINT32_C(0xA686767E), UINT32_C(0xE464ADE9), UINT32_C(0x3AFED34D), UINT32_C(0x5A6AE80B), UINT32_C(0x1E462073)}, {UINT32_C(0x737F7B66), UINT32_C(0xA86AA408), UINT32_C(0xEAB3B6CE), UINT32_C(0xD67A0B49), UINT32_C(0x275355F3), UINT32_C(0x6FF3CA4F), UINT32_C(0x688F99AB), UINT32_C(0x6F385576)}}, {{UINT32_C(0xFD2F9A72), UINT32_C(0xC9B63343), UINT32_C(0xAC267E8A), UINT32_C(0xBD0A126D), UINT32_C(0x5D2839B5), UINT32_C(0x818BD5D8), UINT32_C(0x0BF5AFCE), UINT32_C(0x1BBAB4CE)}, {UINT32_C(0x4D8B67DE), UINT32_C(0x2827B24A), UINT32_C(0xC34E6642), UINT32_C(0x841F6BD3), UINT32_C(0x5E4A34D4), UINT32_C(0xE9F5C1C2), UINT32_C(0xFDA4177C), UINT32_C(0x4E98795C)}}, {{UINT32_C(0x0763AB04), UINT32_C(0x3C9FF1C2), UINT32_C(0x9832FCFD), UINT32_C(0x4FC1BE61), UINT32_C(0x8BD0363A), UINT32_C(0x5FA50C38), UINT32_C(0xF26206BE), UINT32_C(0x14C9BB2F)}, {UINT32_C(0x1D31880C), UINT32_C(0xAD1A96EB), UINT32_C(0x65DFCF8A), UINT32_C(0xF0A37BC4), UINT32_C(0x3D048FE4), UINT32_C(0x38962729), UINT32_C(0x6480B254), UINT32_C(0x017125C0)}}, {{UINT32_C(0x98D4BAC6), UINT32_C(0x01E819F5), UINT32_C(0x36B99D30), UINT32_C(0xD3686E04), UINT32_C(0x200A4A9D), UINT32_C(0x0C2876FB), UINT32_C(0xE65782D5), UINT32_C(0x45D50C2F)}, {UINT32_C(0x865B7A21), UINT32_C(0xB8316ECE), UINT32_C(0xCC875503), UINT32_C(0xA3ADB90F), UINT32_C(0x98468FB4), UINT32_C(0xD72E864E), UINT32_C(0xDED21F40), UINT32_C(0x13BB23FD)}}, {{UINT32_C(0xC6B96368), UINT32_C(0x653C3C15), UINT32_C(0x2B9C381F), UINT32_C(0x9A42FC2C), UINT32_C(0x69534D92), UINT32_C(0xF06B41B9), UINT32_C(0x3FB7BED2), UINT32_C(0x46F7292E)}, {UINT32_C(0x97D1875E), UINT32_C(0x14A2C420), UINT32_C(0xD3B2DF55), UINT32_C(0x45DFA824), UINT32_C(0x3F2BA72D), UINT32_C(0x59CB7E59), UINT32_C(0xD7D96C98), UINT32_C(0x2EEC65C9)}}, {{UINT32_C(0x49650405), UINT32_C(0x907CD4C8), UINT32_C(0x37E05E06), UINT32_C(0xFC29320A), UINT32_C(0x09E29619), UINT32_C(0x99B4C1DF), UINT32_C(0x34DE993F), UINT32_C(0x74E69BF8)}, {UINT32_C(0x509D9797), UINT32_C(0x62C0F296), UINT32_C(0x5F1EF554), UINT32_C(0x2E6BD4E6), UINT32_C(0x0D0B71B8), UINT32_C(0xE3050641), UINT32_C(0x235DDE6C), UINT32_C(0x29DA0C9D)}}, {{UINT32_C(0x689398C1), UINT32_C(0x3CFBCA4B), UINT32_C(0x40C9DF13), UINT32_C(0x11E58804), UINT32_C(0xBCDF2489), UINT32_C(0x3923A39B), UINT32_C(0x387C8089), UINT32_C(0x3805CCC7)}, {UINT32_C(0x70319AFA), UINT32_C(0xC1B4EB48), UINT32_C(0xCA089604), UINT32_C(0x0A6A5FA4), UINT32_C(0x73139A20), UINT32_C(0x16ABDE54), UINT32_C(0x94BD61B5), UINT32_C(0x7C0055E0)}}, {{UINT32_C(0xCB05A02A), UINT32_C(0xA5AB5CEF), UINT32_C(0x0BFE903B), UINT32_C(0xC0B4E1B4), UINT32_C(0xEAC9E7E8), UINT32_C(0xBA528329), UINT32_C(0x0A2456B6), UINT32_C(0x0266C5A7)}, {UINT32_C(0x5E216EEC), UINT32_C(0x507E9A41), UINT32_C(0xD0F1E440), UINT32_C(0xFCC06B0A), UINT32_C(0xE5C7B26F), UINT32_C(0x6FAEFC8E), UINT32_C(0xB02F85C1), UINT32_C(0x4744CF2E)}}, {{UINT32_C(0x1C291BFC), UINT32_C(0xF5E2B812), UINT32_C(0x2CDCBF7A), UINT32_C(0xC18E791D), UINT32_C(0x46554345), UINT32_C(0xC386B962), UINT32_C(0x067518CD), UINT32_C(0x373E00FB)}, {UINT32_C(0xE950051B), UINT32_C(0xC9BA9DF9), UINT32_C(0xDD6133EE), UINT32_C(0x182CB132), UINT32_C(0x70A3C71C), UINT32_C(0xD6D7F815), UINT32_C(0x7FAFE307), UINT32_C(0x44C5AEBC)}}, {{UINT32_C(0xA9D16080), UINT32_C(0x6C7CE359), UINT32_C(0x1E8B643E), UINT32_C(0xA874386D), UINT32_C(0x07F48E10), UINT32_C(0xA0648129), UINT32_C(0x93E4D619), UINT32_C(0x2A402201)}, {UINT32_C(0xBD383EA6), UINT32_C(0x8B429545), UINT32_C(0xF2880536), UINT32_C(0xC096D593), UINT32_C(0x20E299B9), UINT32_C(0xB4057D6C), UINT32_C(0x38A825FA), UINT32_C(0x303962CE)}}, }, { {{UINT32_C(0x1E1D70D0), UINT32_C(0x9E426EBF), UINT32_C(0xB83529CA), UINT32_C(0x6AEA4DDC), UINT32_C(0x7CC9A07C), UINT32_C(0xF3ECD462), UINT32_C(0xC364772E), UINT32_C(0x7F255C86)}, {UINT32_C(0x5613BEF0), UINT32_C(0x0DF212CF), UINT32_C(0x1309F9D0), UINT32_C(0x771F02A9), UINT32_C(0x805FE1F5), UINT32_C(0xE97BEE39), UINT32_C(0xD93522B9), UINT32_C(0x54A43430)}}, {{UINT32_C(0xCDE4EBBE), UINT32_C(0xC01553BD), UINT32_C(0xA02E56C1), UINT32_C(0xB1928DDC), UINT32_C(0x94A1A417), UINT32_C(0xB91004BA), UINT32_C(0x56CB9C88), UINT32_C(0x44F74BE6)}, {UINT32_C(0x921B62E5), UINT32_C(0x6A7E3E9B), UINT32_C(0x5FBF13C4), UINT32_C(0xF2BF553B), UINT32_C(0x86D55641), UINT32_C(0x51CB776D), UINT32_C(0x6425A3AD), UINT32_C(0x71826BC5)}}, {{UINT32_C(0xC6D70EF9), UINT32_C(0xD6D49F90), UINT32_C(0x29EBA0DD), UINT32_C(0x5BD0DA69), UINT32_C(0x803233EF), UINT32_C(0x0BBA7571), UINT32_C(0x679A17D5), UINT32_C(0x0EB0959E)}, {UINT32_C(0xB8A3D6EC), UINT32_C(0x97818DC2), UINT32_C(0xC687EAA2), UINT32_C(0x09497FB0), UINT32_C(0xA65FA4C0), UINT32_C(0x2E2707EA), UINT32_C(0x7542F472), UINT32_C(0x6A74D4C6)}}, {{UINT32_C(0x1EE0BC40), UINT32_C(0x0D193006), UINT32_C(0x6DC98BA8), UINT32_C(0x7D7BEE19), UINT32_C(0x447C38D2), UINT32_C(0x1AD37C98), UINT32_C(0xB6B4550A), UINT32_C(0x3E163AE1)}, {UINT32_C(0x5BC93243), UINT32_C(0x734E36C9), UINT32_C(0x986C35A8), UINT32_C(0x54E217FD), UINT32_C(0x9E3285E3), UINT32_C(0xF0576FF0), UINT32_C(0x186EE7EB), UINT32_C(0x65C950C8)}}, {{UINT32_C(0x2012D277), UINT32_C(0x1AB12C04), UINT32_C(0x83872384), UINT32_C(0x97CAB84B), UINT32_C(0x1C66FCFD), UINT32_C(0x479C9CF5), UINT32_C(0xF276933E), UINT32_C(0x70ABC8B4)}, {UINT32_C(0xBA4D14F0), UINT32_C(0xE6B15BF7), UINT32_C(0x22E2F5D5), UINT32_C(0xF4060ED3), UINT32_C(0xCDC5462C), UINT32_C(0xA53F3CA0), UINT32_C(0xC6FC3854), UINT32_C(0x593219D4)}}, {{UINT32_C(0x72B6F8A1), UINT32_C(0x9DE69934), UINT32_C(0x19E16B3F), UINT32_C(0xECABAEEE), UINT32_C(0xEDA68D7B), UINT32_C(0x0B537CA5), UINT32_C(0xD3CE55B7), UINT32_C(0x744628BD)}, {UINT32_C(0x98A95308), UINT32_C(0x3A5B2D8E), UINT32_C(0x6758C6C8), UINT32_C(0x74D0CEF1), UINT32_C(0xDA204834), UINT32_C(0x7538198A), UINT32_C(0xA644E880), UINT32_C(0x1E166AAA)}}, {{UINT32_C(0x4674ACF0), UINT32_C(0xE76EE712), UINT32_C(0xDF9DFB4C), UINT32_C(0x40A6F6DE), UINT32_C(0x40C65721), UINT32_C(0x91B0034C), UINT32_C(0xF8E0F5E5), UINT32_C(0x54FE8B8B)}, {UINT32_C(0x75891895), UINT32_C(0x6322CA0F), UINT32_C(0x7D20C522), UINT32_C(0x3D1C821E), UINT32_C(0x08043786), UINT32_C(0x1691407F), UINT32_C(0x14847D58), UINT32_C(0x02C30838)}}, {{UINT32_C(0xB8F0C372), UINT32_C(0x57DEF069), UINT32_C(0x0D5ABF2C), UINT32_C(0x50375DC3), UINT32_C(0x75EDFBC9), UINT32_C(0x22903814), UINT32_C(0xAE37695A), UINT32_C(0x56E39BD7)}, {UINT32_C(0x463D13F2), UINT32_C(0xAB74B187), UINT32_C(0x3CDE8886), UINT32_C(0xC50CB8A2), UINT32_C(0xB35F7D59), UINT32_C(0x1EFBD1CF), UINT32_C(0x1057AE42), UINT32_C(0x1296C482)}}, {{UINT32_C(0xC347E3FB), UINT32_C(0xA350B57B), UINT32_C(0xADF65129), UINT32_C(0x4312EB75), UINT32_C(0x7F9A6C9E), UINT32_C(0xD9A7E2F4), UINT32_C(0x9BFDCB4D), UINT32_C(0x5493AF7B)}, {UINT32_C(0x9AC0E58E), UINT32_C(0x90A443DD), UINT32_C(0xC6F3BEEF), UINT32_C(0x9777D58A), UINT32_C(0x965EC900), UINT32_C(0x12F00913), UINT32_C(0x480126DA), UINT32_C(0x2F6C5B59)}}, {{UINT32_C(0xBAD8C051), UINT32_C(0x70B907FC), UINT32_C(0xD3B4F608), UINT32_C(0x54492D6A), UINT32_C(0x2E096D9F), UINT32_C(0xE3B46F1B), UINT32_C(0x747D472A), UINT32_C(0x522AD6D1)}, {UINT32_C(0x02DAB5E5), UINT32_C(0x8FCD1616), UINT32_C(0x357B1C85), UINT32_C(0xD3BA292F), UINT32_C(0x2704F072), UINT32_C(0xA6DB50CD), UINT32_C(0x8341AA73), UINT32_C(0x63488DDF)}}, {{UINT32_C(0x0FE2AAAB), UINT32_C(0x99100A3D), UINT32_C(0x8EA44560), UINT32_C(0x7D30C4E9), UINT32_C(0x2B4C776D), UINT32_C(0xBA458C67), UINT32_C(0xBBA4D85E), UINT32_C(0x2EC11420)}, {UINT32_C(0x7A7AEC55), UINT32_C(0xB1D9FBA2), UINT32_C(0x7665AAE5), UINT32_C(0x432AB2AA), UINT32_C(0xF3BC7043), UINT32_C(0xD2755948), UINT32_C(0x82510EAD), UINT32_C(0x2FC331BB)}}, {{UINT32_C(0x46253DB1), UINT32_C(0xAAF11CF9), UINT32_C(0xB0DF307C), UINT32_C(0xEB025AED), UINT32_C(0x7A82ADEE), UINT32_C(0xCB7C22A5), UINT32_C(0x9C5FA97B), UINT32_C(0x7316C390)}, {UINT32_C(0xF518067C), UINT32_C(0x91620554), UINT32_C(0x3C96A804), UINT32_C(0x20A438AE), UINT32_C(0x5B0C090C), UINT32_C(0xC4F9DCDF), UINT32_C(0x6E5C1B45), UINT32_C(0x77C512DB)}}, {{UINT32_C(0xFDD09EDE), UINT32_C(0xC981E682), UINT32_C(0xBBB3F57D), UINT32_C(0xC3EB36B7), UINT32_C(0xD12BF450), UINT32_C(0xA07369C6), UINT32_C(0xCE017845), UINT32_C(0x16627566)}, {UINT32_C(0x9494AF62), UINT32_C(0xFD8DEC90), UINT32_C(0x53FD4B22), UINT32_C(0x7E793096), UINT32_C(0xC8AAEAE9), UINT32_C(0x21B8E665), UINT32_C(0x18BC33C0), UINT32_C(0x526FA318)}}, {{UINT32_C(0x853A2647), UINT32_C(0xF55D32BF), UINT32_C(0xCDAEE8FE), UINT32_C(0xD873ED6C), UINT32_C(0x80E52622), UINT32_C(0xA3579E2B), UINT32_C(0x33D16FE8), UINT32_C(0x03871ABA)}, {UINT32_C(0x69925EDF), UINT32_C(0x714804AC), UINT32_C(0xF2B964FF), UINT32_C(0x0340755F), UINT32_C(0xDA0D1A07), UINT32_C(0x93830F98), UINT32_C(0xF7FB1E16), UINT32_C(0x2CAB201E)}}, {{UINT32_C(0x22A8AF77), UINT32_C(0x26DE3A3A), UINT32_C(0xB45BA630), UINT32_C(0x0E77C3DC), UINT32_C(0xFC86E7D1), UINT32_C(0x34F00017), UINT32_C(0x1B62F7F2), UINT32_C(0x796ABE2F)}, {UINT32_C(0x1663B5B1), UINT32_C(0x9FA09277), UINT32_C(0x9B2FB9AC), UINT32_C(0xFFFDC93F), UINT32_C(0x6B340D75), UINT32_C(0x03AECD1A), UINT32_C(0x314DCCEA), UINT32_C(0x5D55A168)}}, {{UINT32_C(0x747DBD0C), UINT32_C(0x678AEF02), UINT32_C(0xD47A6C09), UINT32_C(0xF0D47C1C), UINT32_C(0x3FDD1681), UINT32_C(0x6C2AC72F), UINT32_C(0x6D789D3A), UINT32_C(0x750E7064)}, {UINT32_C(0xAEBEDD58), UINT32_C(0x3F970AFE), UINT32_C(0xE3540951), UINT32_C(0x6BBA7956), UINT32_C(0x3E71F6AF), UINT32_C(0x7CC461B2), UINT32_C(0xC45FED28), UINT32_C(0x7E51E548)}}, }, { {{UINT32_C(0x2CE2CBE5), UINT32_C(0x4A598EFB), UINT32_C(0x89C9A51B), UINT32_C(0x774CDE0A), UINT32_C(0xCA907F34), UINT32_C(0x2D003680), UINT32_C(0x9D3C7D97), UINT32_C(0x62C32DCA)}, {UINT32_C(0xB3054D17), UINT32_C(0x37B3A90F), UINT32_C(0x67E58A5A), UINT32_C(0x1423574C), UINT32_C(0x4859FA49), UINT32_C(0xF1D3BB1A), UINT32_C(0x3F5AFA63), UINT32_C(0x25F0AF1C)}}, {{UINT32_C(0x1FE53AC9), UINT32_C(0xD3BF7F62), UINT32_C(0xCBCE6164), UINT32_C(0xCE2B67C3), UINT32_C(0x95341024), UINT32_C(0xE081C576), UINT32_C(0x9A70ECAB), UINT32_C(0x32B0EF5D)}, {UINT32_C(0x3BE1E5CE), UINT32_C(0x3EC93C85), UINT32_C(0xA0CB7DCD), UINT32_C(0xE25F54ED), UINT32_C(0x517965B2), UINT32_C(0x9D6B57D7), UINT32_C(0x129B0B27), UINT32_C(0x159F7AB0)}}, {{UINT32_C(0xEEFB67F3), UINT32_C(0xAEF88E95), UINT32_C(0xE0316AB2), UINT32_C(0xEAEB2889), UINT32_C(0xC2CB6753), UINT32_C(0x1491881F), UINT32_C(0x702789D0), UINT32_C(0x67DCDF28)}, {UINT32_C(0x11C0F3FD), UINT32_C(0x8282E0A7), UINT32_C(0x01BA273D), UINT32_C(0x9CDCFDB8), UINT32_C(0x26279B95), UINT32_C(0x6BF1E043), UINT32_C(0x85852777), UINT32_C(0x0D42AAC6)}}, {{UINT32_C(0x608981AB), UINT32_C(0xC4CE393E), UINT32_C(0x52141CB0), UINT32_C(0x210E20F8), UINT32_C(0x6B9234B5), UINT32_C(0x22C2586D), UINT32_C(0x4366750E), UINT32_C(0x52F1B366)}, {UINT32_C(0x760AFA55), UINT32_C(0xE38ED0D9), UINT32_C(0xB5D61A08), UINT32_C(0xA43FF25A), UINT32_C(0xB5E21691), UINT32_C(0x0BE3A406), UINT32_C(0xFD4E17B0), UINT32_C(0x37B47A28)}}, {{UINT32_C(0x4C2C65C2), UINT32_C(0xC46DC6D4), UINT32_C(0xC54BE778), UINT32_C(0x2A0B452C), UINT32_C(0xF727070E), UINT32_C(0xAF113693), UINT32_C(0xC68D13A3), UINT32_C(0x7B229CD8)}, {UINT32_C(0x02D43E4B), UINT32_C(0x0F63097E), UINT32_C(0x55627FD8), UINT32_C(0x912F8D33), UINT32_C(0x2A0DD9AE), UINT32_C(0x1EBF3961), UINT32_C(0xF0294B2D), UINT32_C(0x7FD33FDE)}}, {{UINT32_C(0xD0CC6D9F), UINT32_C(0xC72411F5), UINT32_C(0x9B92FF84), UINT32_C(0x66E04C90), UINT32_C(0xE1C033B6), UINT32_C(0x0678B4F8), UINT32_C(0xE49A972A), UINT32_C(0x5A99F270)}, {UINT32_C(0xD265A4DF), UINT32_C(0x3743BCD8), UINT32_C(0xCE0404C3), UINT32_C(0x7BD6DDF4), UINT32_C(0x131750A5), UINT32_C(0x4043767F), UINT32_C(0x9DD65652), UINT32_C(0x4A7D8983)}}, {{UINT32_C(0x12B7822D), UINT32_C(0x535BC784), UINT32_C(0xF1F9B703), UINT32_C(0xDD32DD67), UINT32_C(0x2EAA2A1C), UINT32_C(0xFFDBF0EB), UINT32_C(0xF64E9822), UINT32_C(0x497C09FA)}, {UINT32_C(0x32EE2A36), UINT32_C(0x18E717E9), UINT32_C(0x583949B1), UINT32_C(0xF01CC4F5), UINT32_C(0x0A168755), UINT32_C(0x222EE974), UINT32_C(0x00C81EC9), UINT32_C(0x0CD14CD5)}}, {{UINT32_C(0x14C79CDC), UINT32_C(0x7AE0BD11), UINT32_C(0x6DC08C80), UINT32_C(0x67323D1A), UINT32_C(0x0EF32432), UINT32_C(0x2FD1ABC7), UINT32_C(0xB0E08EBF), UINT32_C(0x65923246)}, {UINT32_C(0xC0754ECE), UINT32_C(0x0A9FD3D7), UINT32_C(0x5F8644FA), UINT32_C(0xE76B2624), UINT32_C(0x0F8BB385), UINT32_C(0xF1F0BEBA), UINT32_C(0xFC96778F), UINT32_C(0x73251F03)}}, {{UINT32_C(0xD08795A9), UINT32_C(0x197150DE), UINT32_C(0xFBB8B9CF), UINT32_C(0xAD6935AE), UINT32_C(0x3B2B9EFB), UINT32_C(0x72118682), UINT32_C(0xBC2B7240), UINT32_C(0x265B288D)}, {UINT32_C(0x2F78C431), UINT32_C(0x7BF2EB36), UINT32_C(0xF2A6E469), UINT32_C(0xF03B83CA), UINT32_C(0x4740E74B), UINT32_C(0x21159256), UINT32_C(0x0490F0B9), UINT32_C(0x35BE5735)}}, {{UINT32_C(0x806C1CAE), UINT32_C(0x207F33B2), UINT32_C(0xDAC5ADE0), UINT32_C(0x04249127), UINT32_C(0x1CC59DE7), UINT32_C(0xC4CCF33E), UINT32_C(0x272BD6D7), UINT32_C(0x2A17B520)}, {UINT32_C(0xB48F6585), UINT32_C(0xC36F6B3C), UINT32_C(0x0861ACF5), UINT32_C(0xD32A7379), UINT32_C(0x2C3291C6), UINT32_C(0x28A12ECB), UINT32_C(0xF02A88D0), UINT32_C(0x0E945F95)}}, {{UINT32_C(0xD3B3117B), UINT32_C(0x4836EC01), UINT32_C(0xA4C2FD72), UINT32_C(0x4C197454), UINT32_C(0xF9897721), UINT32_C(0x96FCED51), UINT32_C(0x5828C97D), UINT32_C(0x14202858)}, {UINT32_C(0x774755B9), UINT32_C(0xCA7ACED8), UINT32_C(0x97252559), UINT32_C(0x460FF582), UINT32_C(0x5796DD63), UINT32_C(0xAAE45776), UINT32_C(0x346DDBF5), UINT32_C(0x711C916E)}}, {{UINT32_C(0x5E203692), UINT32_C(0xA60E2E7B), UINT32_C(0xF3BF2A45), UINT32_C(0xCFC72FEA), UINT32_C(0x72AC0436), UINT32_C(0x78729D28), UINT32_C(0x29ABF199), UINT32_C(0x3E16DD8B)}, {UINT32_C(0x15A41F3D), UINT32_C(0xB1705AA6), UINT32_C(0x308AB87C), UINT32_C(0x8C7512FE), UINT32_C(0x03995381), UINT32_C(0xA27411C5), UINT32_C(0xA780CED3), UINT32_C(0x3142403C)}}, {{UINT32_C(0xF1718C7F), UINT32_C(0xE4473E94), UINT32_C(0xA3CAB6CB), UINT32_C(0x601BC194), UINT32_C(0x581D491D), UINT32_C(0x8F3540F8), UINT32_C(0x43C15321), UINT32_C(0x456A9B7C)}, {UINT32_C(0x593BB7ED), UINT32_C(0x6F335A2D), UINT32_C(0x7D791514), UINT32_C(0xB6D5A23F), UINT32_C(0x79235EAD), UINT32_C(0x976D2F83), UINT32_C(0x44775C97), UINT32_C(0x7D02EA0F)}}, {{UINT32_C(0xE5EC268E), UINT32_C(0x322DBC8C), UINT32_C(0xBE14BF5C), UINT32_C(0x1F2F6050), UINT32_C(0xEACF6A50), UINT32_C(0x58AC6397), UINT32_C(0xA5401081), UINT32_C(0x4167CBD5)}, {UINT32_C(0xEE5B4BF5), UINT32_C(0x8E6F06A1), UINT32_C(0x6B2F790F), UINT32_C(0x1A6073D5), UINT32_C(0x4F901250), UINT32_C(0x1C09FF3D), UINT32_C(0xE6B40DF4), UINT32_C(0x286AF8D7)}}, {{UINT32_C(0x06BD53FF), UINT32_C(0xF74C8057), UINT32_C(0xE5788F0D), UINT32_C(0x4FCE7281), UINT32_C(0x3D015E6B), UINT32_C(0xD6A867AC), UINT32_C(0x6E185A42), UINT32_C(0x04AEC38D)}, {UINT32_C(0x083D65CB), UINT32_C(0x8DC12B74), UINT32_C(0x82966668), UINT32_C(0xDB1AA8AC), UINT32_C(0x28AF1B90), UINT32_C(0xBD2233BF), UINT32_C(0x172CCA11), UINT32_C(0x544569A7)}}, {{UINT32_C(0x149BD0BD), UINT32_C(0x9C56FCA8), UINT32_C(0xA05F8E44), UINT32_C(0x2B4EC788), UINT32_C(0x92478943), UINT32_C(0x1569CF6D), UINT32_C(0x57380986), UINT32_C(0x67E373E8)}, {UINT32_C(0xED3C14DB), UINT32_C(0xF5CC8232), UINT32_C(0xF52EAF83), UINT32_C(0xE3D184B0), UINT32_C(0x0BC64038), UINT32_C(0x195D4137), UINT32_C(0x778C3C20), UINT32_C(0x77994388)}}, }, { {{UINT32_C(0xA0CC77AA), UINT32_C(0x3DAA0C47), UINT32_C(0x7C69CDF0), UINT32_C(0xB9794E74), UINT32_C(0x4549F5D4), UINT32_C(0x3610E50B), UINT32_C(0xB8A112CA), UINT32_C(0x262CA564)}, {UINT32_C(0x554E8714), UINT32_C(0xD5EC795E), UINT32_C(0x717EBEF3), UINT32_C(0x73EE5502), UINT32_C(0x1947A478), UINT32_C(0xE36E8A1A), UINT32_C(0x42ADC59D), UINT32_C(0x3FBE43A3)}}, {{UINT32_C(0x021FBCBE), UINT32_C(0x4DE78909), UINT32_C(0x0BBBB324), UINT32_C(0xA76A5EE2), UINT32_C(0xCD67810B), UINT32_C(0x5B86519A), UINT32_C(0x3710A4EE), UINT32_C(0x4CCA44A2)}, {UINT32_C(0xCD1F8BEC), UINT32_C(0xD79A121D), UINT32_C(0xDC9CA10E), UINT32_C(0x2E12A772), UINT32_C(0x8C9E9640), UINT32_C(0xE301CA3B), UINT32_C(0xB731A957), UINT32_C(0x4B25FE18)}}, {{UINT32_C(0xF4AD7264), UINT32_C(0xA05DA2CD), UINT32_C(0x076977A5), UINT32_C(0x31336489), UINT32_C(0xF2E576A8), UINT32_C(0xC1D269BE), UINT32_C(0x7532203F), UINT32_C(0x1E877ADC)}, {UINT32_C(0x8B92972C), UINT32_C(0x9C9961BC), UINT32_C(0x6A14D810), UINT32_C(0x7BA07272), UINT32_C(0x06913136), UINT32_C(0xE51095A9), UINT32_C(0x30E0EA8C), UINT32_C(0x46748969)}}, {{UINT32_C(0x3C73BA49), UINT32_C(0xDB8EF346), UINT32_C(0x3720570D), UINT32_C(0xBF221312), UINT32_C(0x605DB0D6), UINT32_C(0xC07B3639), UINT32_C(0x300336A3), UINT32_C(0x44FCEFA6)}, {UINT32_C(0x2D234592), UINT32_C(0x121FAC5C), UINT32_C(0x44E367D7), UINT32_C(0x901DEE88), UINT32_C(0x1CAA6A3A), UINT32_C(0x5B5F3DD6), UINT32_C(0xAC2F6E64), UINT32_C(0x72E474EC)}}, {{UINT32_C(0xF55BE61C), UINT32_C(0x15690BEE), UINT32_C(0xDF2678A2), UINT32_C(0xE42B945E), UINT32_C(0x3B7B1776), UINT32_C(0x60A5C8AA), UINT32_C(0xEB9AB938), UINT32_C(0x16103FBC)}, {UINT32_C(0x87AD06AB), UINT32_C(0x79722A1E), UINT32_C(0xD6B632A2), UINT32_C(0xD7B509F6), UINT32_C(0x3B69EB40), UINT32_C(0x8C4E8B2E), UINT32_C(0x14DB2225), UINT32_C(0x6A509583)}}, {{UINT32_C(0x93B78659), UINT32_C(0x169F35D8), UINT32_C(0x8EFF83AD), UINT32_C(0x989B04D2), UINT32_C(0xA6AE4806), UINT32_C(0x72CF7338), UINT32_C(0xF4AAA524), UINT32_C(0x6E156C84)}, {UINT32_C(0xA1ED5CB2), UINT32_C(0x33A608ED), UINT32_C(0xC3D28716), UINT32_C(0xCE274A64), UINT32_C(0x45F0435F), UINT32_C(0xFCF1B170), UINT32_C(0x1653D6F6), UINT32_C(0x101D1BDB)}}, {{UINT32_C(0x2E5A67D9), UINT32_C(0x45BC931D), UINT32_C(0x697DA479), UINT32_C(0xAFF02C11), UINT32_C(0x2EA3E6E1), UINT32_C(0x7C7972A3), UINT32_C(0x5E97BB90), UINT32_C(0x71A17D50)}, {UINT32_C(0x19AD4C5E), UINT32_C(0x962E84F2), UINT32_C(0x692020BE), UINT32_C(0xBB8C9FC7), UINT32_C(0xE7B36665), UINT32_C(0xA78FDF2C), UINT32_C(0x26F92E33), UINT32_C(0x7AC84ED4)}}, {{UINT32_C(0xC3C9E5C1), UINT32_C(0xBD85A9EE), UINT32_C(0x6ED2FD6A), UINT32_C(0x72030BAA), UINT32_C(0x39CFFB89), UINT32_C(0xB67185AB), UINT32_C(0x833BF770), UINT32_C(0x3E2E51A4)}, {UINT32_C(0x5E27D5BB), UINT32_C(0x248FA348), UINT32_C(0x2E6D3DCF), UINT32_C(0xF8D43596), UINT32_C(0x0C8DAF81), UINT32_C(0x07F5B93C), UINT32_C(0xAD2FC97D), UINT32_C(0x6A7FFA1D)}}, {{UINT32_C(0xFAEA33F1), UINT32_C(0xFF308FAE), UINT32_C(0x3CC4C7CF), UINT32_C(0x5F29DFFB), UINT32_C(0xECC5A2B9), UINT32_C(0xB9AD4527), UINT32_C(0x048D4B38), UINT32_C(0x08B95AF6)}, {UINT32_C(0xDEC152BB), UINT32_C(0x56BC43A8), UINT32_C(0x3849D869), UINT32_C(0xD1147B9A), UINT32_C(0xD02AF3B7), UINT32_C(0xFE5020C2), UINT32_C(0xB918496E), UINT32_C(0x54C02B44)}}, {{UINT32_C(0x0B27468D), UINT32_C(0x1611ECFD), UINT32_C(0x0513A562), UINT32_C(0x4AFCE329), UINT32_C(0x2FE74EED), UINT32_C(0x982782FD), UINT32_C(0x17ADD2EA), UINT32_C(0x66AC58BF)}, {UINT32_C(0x613581D4), UINT32_C(0x8277BC2D), UINT32_C(0x988D1498), UINT32_C(0x0BF5BF0C), UINT32_C(0x55C984CB), UINT32_C(0x8A37134D), UINT32_C(0x92211390), UINT32_C(0x409A79CC)}}, {{UINT32_C(0x816F0462), UINT32_C(0x8C0081AE), UINT32_C(0x5A68BFC2), UINT32_C(0xB431DC24), UINT32_C(0x5F78C8A1), UINT32_C(0x25C769C6), UINT32_C(0xB382AF14), UINT32_C(0x3BE0458D)}, {UINT32_C(0xA171ADF2), UINT32_C(0x10583083), UINT32_C(0x37F7C39F), UINT32_C(0xBA5D5325), UINT32_C(0x5EAC7585), UINT32_C(0x76B03B94), UINT32_C(0x9C2DF2C6), UINT32_C(0x76159AAC)}}, {{UINT32_C(0x918E0332), UINT32_C(0x886C73BA), UINT32_C(0xD24B5B52), UINT32_C(0xF6FEC62A), UINT32_C(0x36B4D23A), UINT32_C(0xB98759B4), UINT32_C(0x5480ACF3), UINT32_C(0x5EC5B3FE)}, {UINT32_C(0x6DD175BF), UINT32_C(0x30FF297D), UINT32_C(0x75F2B9C3), UINT32_C(0x501DE744), UINT32_C(0xF19230C5), UINT32_C(0xDEBE47CA), UINT32_C(0x32BBBB62), UINT32_C(0x7401F209)}}, {{UINT32_C(0x22496D1E), UINT32_C(0x80712E47), UINT32_C(0xDA80AF1D), UINT32_C(0x36A0EF37), UINT32_C(0x940E5E9F), UINT32_C(0xAF6CA51C), UINT32_C(0x722D9D22), UINT32_C(0x74E17B6F)}, {UINT32_C(0xB8B3AE1B), UINT32_C(0xCB70B878), UINT32_C(0x07DF974C), UINT32_C(0xBF8B9A0B), UINT32_C(0xF68A4BF4), UINT32_C(0x89FCC996), UINT32_C(0x6EB0FB2E), UINT32_C(0x46F581E8)}}, {{UINT32_C(0x67137153), UINT32_C(0xBCE0BD6C), UINT32_C(0x75F64B78), UINT32_C(0xAD3E92B3), UINT32_C(0xFD047DD9), UINT32_C(0x6454CD1D), UINT32_C(0x612AE472), UINT32_C(0x181C93EB)}, {UINT32_C(0x23A529C3), UINT32_C(0xE575307E), UINT32_C(0x59C09EB5), UINT32_C(0xB9C43A0B), UINT32_C(0xAA805840), UINT32_C(0xFD233A68), UINT32_C(0xA122FFB9), UINT32_C(0x067C442E)}}, {{UINT32_C(0x2CD6762E), UINT32_C(0xE1F3F76F), UINT32_C(0x9764B53A), UINT32_C(0xFB68650F), UINT32_C(0xF1224580), UINT32_C(0x4E90AC72), UINT32_C(0x127EED48), UINT32_C(0x2BF68F01)}, {UINT32_C(0x94D389A0), UINT32_C(0xE6B4B409), UINT32_C(0xD44593D6), UINT32_C(0xD7BC8108), UINT32_C(0x48A86677), UINT32_C(0xDCF03991), UINT32_C(0xCEBCE3C7), UINT32_C(0x4A52D961)}}, {{UINT32_C(0xBAA873EA), UINT32_C(0x55734AB5), UINT32_C(0x7871F323), UINT32_C(0x506DE4CF), UINT32_C(0x578612C0), UINT32_C(0x7C3F8B00), UINT32_C(0x9243C9E8), UINT32_C(0x730D4B8A)}, {UINT32_C(0xD385F6BD), UINT32_C(0xA3290689), UINT32_C(0x913596F5), UINT32_C(0xAF688C6A), UINT32_C(0xB646BE23), UINT32_C(0x0A2D89B5), UINT32_C(0xF63A6029), UINT32_C(0x31891165)}}, }, { {{UINT32_C(0x579583C0), UINT32_C(0x331F9E57), UINT32_C(0x69C65DA2), UINT32_C(0xE92ABADF), UINT32_C(0xA5B8B057), UINT32_C(0xC796FBEC), UINT32_C(0x312D1E89), UINT32_C(0x52E6F9C9)}, {UINT32_C(0xDA68DFD3), UINT32_C(0x0318B1DF), UINT32_C(0xA1CAC4F1), UINT32_C(0x8BAA2EB3), UINT32_C(0xBEE7D6E1), UINT32_C(0x0CDC89A2), UINT32_C(0x22AB50F4), UINT32_C(0x6102DE7A)}}, {{UINT32_C(0xE20C707A), UINT32_C(0x02003D83), UINT32_C(0x28289D89), UINT32_C(0xD819249C), UINT32_C(0x72053FF8), UINT32_C(0x3FBC00B1), UINT32_C(0xDF40D261), UINT32_C(0x0249C43C)}, {UINT32_C(0xD8F064AF), UINT32_C(0x8794EEAC), UINT32_C(0xDC9F0631), UINT32_C(0xE2359E70), UINT32_C(0xADA310D0), UINT32_C(0xD1603647), UINT32_C(0xEDC888EC), UINT32_C(0x6A9E3785)}}, {{UINT32_C(0xEC41908E), UINT32_C(0xF332B384), UINT32_C(0xBDE4760B), UINT32_C(0xF3274472), UINT32_C(0x140D0EF4), UINT32_C(0x96185E89), UINT32_C(0x90E698E7), UINT32_C(0x56462089)}, {UINT32_C(0xF2E64396), UINT32_C(0x841A31C5), UINT32_C(0x03C4118F), UINT32_C(0x8F494CA5), UINT32_C(0x1A188305), UINT32_C(0x0C98A4C3), UINT32_C(0x98AAB1AB), UINT32_C(0x1C4B5F62)}}, {{UINT32_C(0x5D0D8381), UINT32_C(0xDDEEEBF8), UINT32_C(0x89044363), UINT32_C(0xD1616F48), UINT32_C(0x21616A13), UINT32_C(0x2EE41D47), UINT32_C(0x4BC769FC), UINT32_C(0x2DCE6110)}, {UINT32_C(0x16C1C468), UINT32_C(0xE3707A01), UINT32_C(0x969AF612), UINT32_C(0x3B674187), UINT32_C(0x1E0671CC), UINT32_C(0xB64BD4D7), UINT32_C(0xB98C297C), UINT32_C(0x7EF01DBA)}}, {{UINT32_C(0x815381AC), UINT32_C(0x91DCBF99), UINT32_C(0x38B67B97), UINT32_C(0x8D711F58), UINT32_C(0x9C6E322C), UINT32_C(0x9C11F595), UINT32_C(0xE31A782F), UINT32_C(0x4A688D0B)}, {UINT32_C(0xDCE93F5B), UINT32_C(0x1297D9F3), UINT32_C(0x7C1DC62A), UINT32_C(0xA7956194), UINT32_C(0x5F718F63), UINT32_C(0x340F217A), UINT32_C(0xFCC0EF6A), UINT32_C(0x71F84529)}}, {{UINT32_C(0x3DD00963), UINT32_C(0x0D968E50), UINT32_C(0xD7FF66C3), UINT32_C(0x5E696D79), UINT32_C(0x499A9BE2), UINT32_C(0xAA52D60D), UINT32_C(0xCDC289DE), UINT32_C(0x72482C45)}, {UINT32_C(0x7FFAAD3A), UINT32_C(0xC84968F5), UINT32_C(0xF7CD5BED), UINT32_C(0xEE91304C), UINT32_C(0x0A7CC7C0), UINT32_C(0x68493676), UINT32_C(0x80023968), UINT32_C(0x3411AFA7)}}, {{UINT32_C(0x6E3294C0), UINT32_C(0xA0AEBC70), UINT32_C(0xDC385E50), UINT32_C(0x93263942), UINT32_C(0x8467FB06), UINT32_C(0x7B90C002), UINT32_C(0x38CFD0FF), UINT32_C(0x29477CA4)}, {UINT32_C(0x92A748D5), UINT32_C(0xADC04D81), UINT32_C(0x76CF3AE5), UINT32_C(0xAE4F309D), UINT32_C(0x4BB2C2FF), UINT32_C(0xBDA34BF0), UINT32_C(0x368536E4), UINT32_C(0x65138897)}}, {{UINT32_C(0x6FE6D4D6), UINT32_C(0x9CB8F7D6), UINT32_C(0xAF246792), UINT32_C(0x6C2FFBF5), UINT32_C(0x81524707), UINT32_C(0xD5A4F349), UINT32_C(0x36766D5E), UINT32_C(0x3AFE45CE)}, {UINT32_C(0x513BA267), UINT32_C(0x41991B49), UINT32_C(0x6C18AA5E), UINT32_C(0x06EF1EEA), UINT32_C(0x88EA2099), UINT32_C(0x0A517635), UINT32_C(0xD245B88B), UINT32_C(0x32D2B5E2)}}, {{UINT32_C(0x3F517C5B), UINT32_C(0xAE38CDD5), UINT32_C(0xD878FEEE), UINT32_C(0x1C94FDC5), UINT32_C(0xBEFCE107), UINT32_C(0xABF7A41D), UINT32_C(0xD408DFE8), UINT32_C(0x33BF3FE9)}, {UINT32_C(0x947CB8C4), UINT32_C(0x4F2E6FF0), UINT32_C(0xF998C5A0), UINT32_C(0x3A8E86AB), UINT32_C(0xE359209F), UINT32_C(0x3ADC6ABA), UINT32_C(0xD9A50051), UINT32_C(0x37A2DE1B)}}, {{UINT32_C(0xE718F6B9), UINT32_C(0x424F4E34), UINT32_C(0x75C58EB6), UINT32_C(0x50B1A03B), UINT32_C(0x91390E27), UINT32_C(0xB9495314), UINT32_C(0x880E78D8), UINT32_C(0x4AE0CC3A)}, {UINT32_C(0xF1E4413C), UINT32_C(0x10331AFA), UINT32_C(0xDDFCD2F0), UINT32_C(0xE7A3E554), UINT32_C(0x0EBF484B), UINT32_C(0x44F6DE85), UINT32_C(0x895D0F54), UINT32_C(0x6A762A7E)}}, {{UINT32_C(0x8D0558F6), UINT32_C(0x8E606B0A), UINT32_C(0x5C4DD930), UINT32_C(0xAADA7604), UINT32_C(0xEF4ACAD0), UINT32_C(0x5B2FC7AD), UINT32_C(0x87F5B6E2), UINT32_C(0x0D969AD0)}, {UINT32_C(0x5974E67B), UINT32_C(0xF9A182B2), UINT32_C(0x23B4009A), UINT32_C(0xCD8232E7), UINT32_C(0x285BCC3F), UINT32_C(0x3D8F5DDD), UINT32_C(0xEEE1B9BF), UINT32_C(0x114AC56F)}}, {{UINT32_C(0xAA45085A), UINT32_C(0xD3EA1B56), UINT32_C(0xD314CEDF), UINT32_C(0x5DE7BB70), UINT32_C(0x7BCCDCFD), UINT32_C(0x8A74384C), UINT32_C(0x8E0E0367), UINT32_C(0x64B80F8A)}, {UINT32_C(0x48884ED1), UINT32_C(0xA9EA432B), UINT32_C(0x8C0BA810), UINT32_C(0x51957A8F), UINT32_C(0x39E810E3), UINT32_C(0x9E883400), UINT32_C(0x28B2051C), UINT32_C(0x0A73ED5A)}}, {{UINT32_C(0x13C30826), UINT32_C(0x655212A3), UINT32_C(0xB73E8660), UINT32_C(0xAE53668E), UINT32_C(0xFF108CCE), UINT32_C(0x6C33B649), UINT32_C(0x21D49681), UINT32_C(0x39E0B118)}, {UINT32_C(0x70525312), UINT32_C(0xFE4D2152), UINT32_C(0xFFD18749), UINT32_C(0x2EDCE32B), UINT32_C(0xB04D3FB8), UINT32_C(0xFED19B1C), UINT32_C(0x2B225A9D), UINT32_C(0x4DFE216B)}}, {{UINT32_C(0x4C70F8A8), UINT32_C(0x583E8A6C), UINT32_C(0x954A9AE1), UINT32_C(0xC8206231), UINT32_C(0xB76517B1), UINT32_C(0x9360B592), UINT32_C(0xEED10CCA), UINT32_C(0x362C5C5C)}, {UINT32_C(0x3D607921), UINT32_C(0x3DBA9595), UINT32_C(0x5A6ECC40), UINT32_C(0x0188A5D6), UINT32_C(0x6CFF4ADE), UINT32_C(0x0EAB43C1), UINT32_C(0xDE3347E0), UINT32_C(0x1F3673AE)}}, {{UINT32_C(0x796593EE), UINT32_C(0x7300C4B3), UINT32_C(0xD8D926C3), UINT32_C(0x607E7E76), UINT32_C(0x77F9FD06), UINT32_C(0x1762CE26), UINT32_C(0xCEA891EB), UINT32_C(0x0D0478B3)}, {UINT32_C(0x2618B09E), UINT32_C(0xB1129791), UINT32_C(0x33F928C9), UINT32_C(0x5F9D290D), UINT32_C(0xE6178DB0), UINT32_C(0xE3192631), UINT32_C(0x08576D3F), UINT32_C(0x21260AC8)}}, {{UINT32_C(0x76968E1C), UINT32_C(0x899DAF2A), UINT32_C(0xF9C2B3E7), UINT32_C(0x0519DEA9), UINT32_C(0x93D0BD4E), UINT32_C(0x5FDADC38), UINT32_C(0x43B4D98F), UINT32_C(0x0467BFF7)}, {UINT32_C(0x6F3936C9), UINT32_C(0x651C316C), UINT32_C(0xAF27DF8B), UINT32_C(0xE757689A), UINT32_C(0xA0FA9188), UINT32_C(0x3AB037EA), UINT32_C(0xD927B60A), UINT32_C(0x2F8B039B)}}, }, { {{UINT32_C(0xDE876A70), UINT32_C(0x72211BF5), UINT32_C(0x73D121CE), UINT32_C(0xA8361631), UINT32_C(0x23D419E4), UINT32_C(0x23852721), UINT32_C(0xDBD03345), UINT32_C(0x3F56D47E)}, {UINT32_C(0xD6F05BAC), UINT32_C(0xFB0E91A5), UINT32_C(0xAC9D0F46), UINT32_C(0xA0E02BF6), UINT32_C(0x97F1812F), UINT32_C(0x5ED9EA2C), UINT32_C(0xEBD5DB5A), UINT32_C(0x172F564F)}}, {{UINT32_C(0x81F11E58), UINT32_C(0xC790E912), UINT32_C(0x99A5DFF7), UINT32_C(0x14A17630), UINT32_C(0x1627516D), UINT32_C(0xF6F30F2F), UINT32_C(0xEFCF43B7), UINT32_C(0x522CAD8F)}, {UINT32_C(0x6EA01128), UINT32_C(0xFFADD45E), UINT32_C(0xD61D1964), UINT32_C(0x5D23234C), UINT32_C(0x2802DF86), UINT32_C(0xE9212C85), UINT32_C(0x92AA8DA3), UINT32_C(0x0A3D237B)}}, {{UINT32_C(0xE50ED356), UINT32_C(0x2CED05F4), UINT32_C(0xBFFEEF3A), UINT32_C(0x1CBC7FB1), UINT32_C(0xBE19F0F0), UINT32_C(0x885991B1), UINT32_C(0xDE44A492), UINT32_C(0x6DED0794)}, {UINT32_C(0x44CBECFC), UINT32_C(0x9967E834), UINT32_C(0x6A792ED1), UINT32_C(0xB0674A8D), UINT32_C(0xB7DDD557), UINT32_C(0x360E2DE4), UINT32_C(0x70E95D26), UINT32_C(0x26852A74)}}, {{UINT32_C(0x3A6E2116), UINT32_C(0x8CBC1520), UINT32_C(0xBF285BBE), UINT32_C(0xF09327DF), UINT32_C(0x4A54D3C5), UINT32_C(0x8C7D9AD5), UINT32_C(0x6BD2768F), UINT32_C(0x778F54E6)}, {UINT32_C(0x8FF3DBC0), UINT32_C(0x09B489F8), UINT32_C(0xD2871932), UINT32_C(0x0A0FA7FB), UINT32_C(0xE0A8CEC4), UINT32_C(0xABB9DC38), UINT32_C(0x21E37A50), UINT32_C(0x2EE092D8)}}, {{UINT32_C(0xAF6D88D8), UINT32_C(0xBB9256E7), UINT32_C(0x0A218927), UINT32_C(0x3CDCB1CB), UINT32_C(0xF216D6E6), UINT32_C(0x8E5B744A), UINT32_C(0xBC885AFD), UINT32_C(0x6F0617F2)}, {UINT32_C(0x268397D5), UINT32_C(0xFBA9CDA7), UINT32_C(0x5D4C75D8), UINT32_C(0xC6154716), UINT32_C(0x43FB2CD2), UINT32_C(0x9ED8D17B), UINT32_C(0xBE45BC5C), UINT32_C(0x4D0CE3FB)}}, {{UINT32_C(0xA38472F5), UINT32_C(0x4259BB02), UINT32_C(0x15107D0E), UINT32_C(0xFAFAAE03), UINT32_C(0xCF0CF2B6), UINT32_C(0x2B8E450E), UINT32_C(0xED887C3A), UINT32_C(0x788674C3)}, {UINT32_C(0x4B3D2EAC), UINT32_C(0x1F3EBD59), UINT32_C(0x75E41B55), UINT32_C(0x82CB5684), UINT32_C(0xC02BE49A), UINT32_C(0x005AB76B), UINT32_C(0xF5F90FEE), UINT32_C(0x6F13ADD2)}}, {{UINT32_C(0x7AFA7161), UINT32_C(0x0116374A), UINT32_C(0x2DB7F824), UINT32_C(0x8A1AE448), UINT32_C(0xDB656A22), UINT32_C(0xD3C0DA12), UINT32_C(0xB989204D), UINT32_C(0x7B095B95)}, {UINT32_C(0xEF8F21CA), UINT32_C(0x24C35202), UINT32_C(0x2DA5A5A1), UINT32_C(0x91088DA7), UINT32_C(0xE3F97D68), UINT32_C(0xAAF1944B), UINT32_C(0x7C884134), UINT32_C(0x245D2848)}}, {{UINT32_C(0x68F5C702), UINT32_C(0xD80C65D6), UINT32_C(0x021A2974), UINT32_C(0xE2FE245F), UINT32_C(0x3A11899C), UINT32_C(0xFB8520E0), UINT32_C(0x2BE6BF88), UINT32_C(0x4806D1FA)}, {UINT32_C(0x20ED235F), UINT32_C(0xF6F8C11A), UINT32_C(0x7F0D651E), UINT32_C(0x52AC1424), UINT32_C(0xDB9CF6D6), UINT32_C(0x44C3C89F), UINT32_C(0xB2E2E41F), UINT32_C(0x6762516D)}}, {{UINT32_C(0xFDE91600), UINT32_C(0x2743D874), UINT32_C(0xCDF00100), UINT32_C(0x60975FD5), UINT32_C(0x2D2954F4), UINT32_C(0x78ACC864), UINT32_C(0x56373454), UINT32_C(0x46B9E602)}, {UINT32_C(0x6F0FB867), UINT32_C(0x7586A970), UINT32_C(0x242DF35A), UINT32_C(0x888E3677), UINT32_C(0xF1460F62), UINT32_C(0x5A639E79), UINT32_C(0x55297DBC), UINT32_C(0x1256517E)}}, {{UINT32_C(0x7B9294C3), UINT32_C(0x3F78339B), UINT32_C(0xBCE77012), UINT32_C(0x5BA765D1), UINT32_C(0x512E39E2), UINT32_C(0xA88E0CD8), UINT32_C(0xF6BA6A6A), UINT32_C(0x2D63E14B)}, {UINT32_C(0xEA29071B), UINT32_C(0xF849A163), UINT32_C(0x4C0A2E22), UINT32_C(0xF32519B7), UINT32_C(0x561C35F5), UINT32_C(0xEA5D1315), UINT32_C(0xD9267DCA), UINT32_C(0x7041F515)}}, {{UINT32_C(0x1FE56E6B), UINT32_C(0xE01E839F), UINT32_C(0x4A93CE88), UINT32_C(0x3E473D8C), UINT32_C(0x89AAFDAE), UINT32_C(0xC4846ECF), UINT32_C(0x07D946EA), UINT32_C(0x4111D97A)}, {UINT32_C(0x51A45F02), UINT32_C(0xC20881F6), UINT32_C(0xB9CD841A), UINT32_C(0x14C2AC95), UINT32_C(0xF2CBD929), UINT32_C(0x2FBE8329), UINT32_C(0xC812608B), UINT32_C(0x1E8B7469)}}, {{UINT32_C(0x007F0A5D), UINT32_C(0xB36A5D03), UINT32_C(0x5DCF7AF4), UINT32_C(0xA7E7A1A8), UINT32_C(0xBEB12AFB), UINT32_C(0x7227F4C5), UINT32_C(0x4D276783), UINT32_C(0x46227792)}, {UINT32_C(0x48403B93), UINT32_C(0x9EA64D4C), UINT32_C(0x0B333ED5), UINT32_C(0x58EA31BC), UINT32_C(0xC5C93119), UINT32_C(0x2D6DD219), UINT32_C(0x45069280), UINT32_C(0x385023A7)}}, {{UINT32_C(0xF60C46AF), UINT32_C(0x8AB9B9EA), UINT32_C(0xE8B827C2), UINT32_C(0xFA1D3F08), UINT32_C(0x1BAD41DB), UINT32_C(0x78C6BFBC), UINT32_C(0x23BE0C1E), UINT32_C(0x527A0BED)}, {UINT32_C(0x6ACCE641), UINT32_C(0x66212FD2), UINT32_C(0xEE6F78E7), UINT32_C(0x86125B0D), UINT32_C(0x58552A8C), UINT32_C(0xA2A02718), UINT32_C(0x7E9605C5), UINT32_C(0x594F2B77)}}, {{UINT32_C(0x88A27989), UINT32_C(0x3FB1F6CF), UINT32_C(0xD96268B8), UINT32_C(0xBC4962F7), UINT32_C(0xB95E2A36), UINT32_C(0xBD8761E9), UINT32_C(0x046DEC63), UINT32_C(0x64AB934A)}, {UINT32_C(0x2E53CF1A), UINT32_C(0xC64D1C59), UINT32_C(0x578C5E8C), UINT32_C(0xC9865A9B), UINT32_C(0x7A0359DE), UINT32_C(0x5ECA6232), UINT32_C(0xFB4685E5), UINT32_C(0x127DD136)}}, {{UINT32_C(0x1AE320C9), UINT32_C(0xB0F7B071), UINT32_C(0x52525203), UINT32_C(0x09BF89BB), UINT32_C(0x709C5692), UINT32_C(0x97B20027), UINT32_C(0xEDBF6175), UINT32_C(0x16A62485)}, {UINT32_C(0x394C50F9), UINT32_C(0x32C18836), UINT32_C(0xD3B98C19), UINT32_C(0x7D99468F), UINT32_C(0x2E8D2729), UINT32_C(0x8EBE5096), UINT32_C(0xE655F093), UINT32_C(0x4E75B3CC)}}, {{UINT32_C(0x9EAE827E), UINT32_C(0xCBEFD1A2), UINT32_C(0xFBF4630D), UINT32_C(0xDE2D1234), UINT32_C(0x96086CDA), UINT32_C(0x1B3ADCF8), UINT32_C(0x2EA6CBA7), UINT32_C(0x43D3960E)}, {UINT32_C(0x1CB5A0F7), UINT32_C(0x18321D1D), UINT32_C(0x47BEABB4), UINT32_C(0xDC94C6F9), UINT32_C(0x75AF6AB7), UINT32_C(0xFBACC6D5), UINT32_C(0x89B98E86), UINT32_C(0x0EE5D357)}}, }, { {{UINT32_C(0x062E0994), UINT32_C(0x3F01B4AA), UINT32_C(0x5C952259), UINT32_C(0x994B28B0), UINT32_C(0x0CDEEC70), UINT32_C(0x2678F8B8), UINT32_C(0x212436F3), UINT32_C(0x4D06AF84)}, {UINT32_C(0x1CF27A98), UINT32_C(0xE9DF52FD), UINT32_C(0x0B7718F7), UINT32_C(0xD56B9FD1), UINT32_C(0xD9AEDA0D), UINT32_C(0x728BE624), UINT32_C(0x1A646888), UINT32_C(0x09871088)}}, {{UINT32_C(0x9B586B13), UINT32_C(0xB1BC922D), UINT32_C(0x3CA3B1BA), UINT32_C(0x6C084C54), UINT32_C(0xCF322698), UINT32_C(0x54D196C7), UINT32_C(0x85D527E1), UINT32_C(0x06EC3A55)}, {UINT32_C(0x2A57CAA1), UINT32_C(0x06918710), UINT32_C(0x65FD0F6B), UINT32_C(0x6AEAC07D), UINT32_C(0x0F512F84), UINT32_C(0xB66A34D7), UINT32_C(0xA44E6452), UINT32_C(0x3860C002)}}, {{UINT32_C(0x0881608A), UINT32_C(0x17263B26), UINT32_C(0x56C18A7A), UINT32_C(0x78D556AA), UINT32_C(0xAC3A47AB), UINT32_C(0xA0826A1C), UINT32_C(0xB6933FF5), UINT32_C(0x61686A58)}, {UINT32_C(0xDBCF2C4F), UINT32_C(0xEA9D8771), UINT32_C(0x6AB00426), UINT32_C(0x1C66EB02), UINT32_C(0x401C466A), UINT32_C(0xF8DAED2B), UINT32_C(0xDAAE8040), UINT32_C(0x1ED0A99A)}}, {{UINT32_C(0x7208E58A), UINT32_C(0x31EFFC4B), UINT32_C(0xB4E4319E), UINT32_C(0x28868456), UINT32_C(0xD46AC4DA), UINT32_C(0x1059C249), UINT32_C(0x2279B362), UINT32_C(0x3589D212)}, {UINT32_C(0x45552E92), UINT32_C(0xB28B8FAD), UINT32_C(0xC3AB8098), UINT32_C(0xC9E32541), UINT32_C(0xF14B35A1), UINT32_C(0x82604904), UINT32_C(0xDB68C214), UINT32_C(0x1E64A89F)}}, {{UINT32_C(0xAB6947AF), UINT32_C(0xDF0E223D), UINT32_C(0x771670D0), UINT32_C(0xE74EF1D6), UINT32_C(0xF429F03B), UINT32_C(0x70A9AD21), UINT32_C(0x1385B8DC), UINT32_C(0x7CB1FA1F)}, {UINT32_C(0x69053D24), UINT32_C(0x25ABC0A7), UINT32_C(0x6369D02E), UINT32_C(0x207FE30A), UINT32_C(0xC6E4EC2C), UINT32_C(0x57B76E3C), UINT32_C(0xB927CAB2), UINT32_C(0x2E03D2E3)}}, {{UINT32_C(0x622D57AE), UINT32_C(0xEFA377FF), UINT32_C(0xA885951A), UINT32_C(0x41532F56), UINT32_C(0xCC69B9A8), UINT32_C(0x5ED89AA7), UINT32_C(0x295F5E84), UINT32_C(0x60BFF2EC)}, {UINT32_C(0x1E5C3041), UINT32_C(0x411D65C3), UINT32_C(0x4B7772F8), UINT32_C(0xDB533F8B), UINT32_C(0x3BDD4AEA), UINT32_C(0x72CADEB6), UINT32_C(0x7C49E454), UINT32_C(0x0EC79DF2)}}, {{UINT32_C(0x81D0B84B), UINT32_C(0x0C39332C), UINT32_C(0x95FF472B), UINT32_C(0xA76A9A3A), UINT32_C(0x31DB2BA6), UINT32_C(0xD12FEB99), UINT32_C(0x3683E53A), UINT32_C(0x4AAB9222)}, {UINT32_C(0x24FC6271), UINT32_C(0x56CB18AF), UINT32_C(0x2544C72D), UINT32_C(0x671581D6), UINT32_C(0xFBD6F4D1), UINT32_C(0xCD136492), UINT32_C(0x3579EE09), UINT32_C(0x6C202318)}}, {{UINT32_C(0xC103C348), UINT32_C(0xEDC5AF02), UINT32_C(0x155A103D), UINT32_C(0xDA32344E), UINT32_C(0xB0D1377E), UINT32_C(0xFF3A7679), UINT32_C(0x68F02750), UINT32_C(0x16091972)}, {UINT32_C(0xD9E9C143), UINT32_C(0xD4C6360D), UINT32_C(0x968EE990), UINT32_C(0xE0ABA0EF), UINT32_C(0x97E4C9AE), UINT32_C(0x57816878), UINT32_C(0x9D63E32D), UINT32_C(0x5A4D167B)}}, {{UINT32_C(0x50E25802), UINT32_C(0xB04BA525), UINT32_C(0x66912F15), UINT32_C(0x011DA36E), UINT32_C(0x19E0A182), UINT32_C(0x08D8B680), UINT32_C(0x2E462B0F), UINT32_C(0x66AA4AE8)}, {UINT32_C(0xE0B9D283), UINT32_C(0x3227C3A6), UINT32_C(0xF2B2B096), UINT32_C(0x9BF8C4D0), UINT32_C(0xBA809EB7), UINT32_C(0x1E51416C), UINT32_C(0x2A67D346), UINT32_C(0x68411B75)}}, {{UINT32_C(0x37A67F3B), UINT32_C(0xE55B1348), UINT32_C(0x96484391), UINT32_C(0x5E32D73C), UINT32_C(0x6256B91E), UINT32_C(0xC3F804D5), UINT32_C(0x03B0783B), UINT32_C(0x67F17A47)}, {UINT32_C(0xDD2334AD), UINT32_C(0x2010EFEB), UINT32_C(0xB10FF052), UINT32_C(0xBD9965B5), UINT32_C(0xF58ACA52), UINT32_C(0x519CDA6D), UINT32_C(0x2FD3D394), UINT32_C(0x045BEEBE)}}, {{UINT32_C(0xEA271BCD), UINT32_C(0x81722E2C), UINT32_C(0x0A4F1342), UINT32_C(0x393C082E), UINT32_C(0x53B345CE), UINT32_C(0x573F7CD5), UINT32_C(0x3D7B4292), UINT32_C(0x7AD71FE2)}, {UINT32_C(0xDA8BECB8), UINT32_C(0xDA406D0A), UINT32_C(0x82FE66BC), UINT32_C(0x14FD41CA), UINT32_C(0x0A91DFFC), UINT32_C(0x80A41062), UINT32_C(0xF4F0CDEB), UINT32_C(0x33E38E10)}}, {{UINT32_C(0x2529532C), UINT32_C(0x0234BF38), UINT32_C(0xA76CAE3B), UINT32_C(0x9F5D6342), UINT32_C(0xB3C50442), UINT32_C(0xC9944CB3), UINT32_C(0x8ABFAF17), UINT32_C(0x51752DF0)}, {UINT32_C(0xA37B13FB), UINT32_C(0x2BFA58C4), UINT32_C(0xDDB14951), UINT32_C(0x19F80FDE), UINT32_C(0x7DCB927B), UINT32_C(0xDC7026AA), UINT32_C(0xAAB9FCBA), UINT32_C(0x57907272)}}, {{UINT32_C(0xF3C046C2), UINT32_C(0xCE38712D), UINT32_C(0x47B29D0E), UINT32_C(0x21D1FDB0), UINT32_C(0xCD96D414), UINT32_C(0x7F746E0E), UINT32_C(0x636CFEA4), UINT32_C(0x72F07B52)}, {UINT32_C(0xECE6382D), UINT32_C(0x0D8FE94F), UINT32_C(0x24229CA4), UINT32_C(0x9BFB4CBA), UINT32_C(0xE54388B0), UINT32_C(0xFAE55B77), UINT32_C(0xA188299F), UINT32_C(0x074EBC32)}}, {{UINT32_C(0xE21DCCA2), UINT32_C(0x8AF2EBCD), UINT32_C(0x377487F2), UINT32_C(0x9916A6B6), UINT32_C(0xD8051D40), UINT32_C(0x607DC19A), UINT32_C(0x419DDE12), UINT32_C(0x7DFD53F4)}, {UINT32_C(0x9AD07924), UINT32_C(0xD17D0D61), UINT32_C(0x173E266B), UINT32_C(0x14F7CE0F), UINT32_C(0x0281C9EB), UINT32_C(0x687FB853), UINT32_C(0x3361B273), UINT32_C(0x6B35CC1A)}}, {{UINT32_C(0x16E02DE3), UINT32_C(0x7CD6369E), UINT32_C(0x1F35DFBC), UINT32_C(0x118EE0B1), UINT32_C(0x98B3EE60), UINT32_C(0x7D8C8DBD), UINT32_C(0x8D29EA17), UINT32_C(0x039806FC)}, {UINT32_C(0xEC2C2597), UINT32_C(0x3C473872), UINT32_C(0x5E4EF521), UINT32_C(0x81294AF4), UINT32_C(0xC22A9D7C), UINT32_C(0x5ED048DB), UINT32_C(0x0A08C4D4), UINT32_C(0x3879E95B)}}, {{UINT32_C(0x96A864FE), UINT32_C(0x0206E47F), UINT32_C(0xA55D0631), UINT32_C(0xC94F137A), UINT32_C(0x8E8408F8), UINT32_C(0x9C1B3D29), UINT32_C(0xB9193A5E), UINT32_C(0x150A4046)}, {UINT32_C(0xCB1ADF21), UINT32_C(0x4E8F9345), UINT32_C(0x7BD5E1F9), UINT32_C(0x6ED14D8A), UINT32_C(0x60809F68), UINT32_C(0x70825329), UINT32_C(0xFA85A06C), UINT32_C(0x0D2F1C3B)}}, }, { {{UINT32_C(0xB5C810C3), UINT32_C(0x3C5ABE75), UINT32_C(0xE28F1E26), UINT32_C(0xEA2C3EF9), UINT32_C(0x8BF68280), UINT32_C(0xEEB1C568), UINT32_C(0x7AE69110), UINT32_C(0x5A165CEB)}, {UINT32_C(0x44550DF1), UINT32_C(0xE36C6460), UINT32_C(0xDB909258), UINT32_C(0x6FB4B108), UINT32_C(0x17D4D8C5), UINT32_C(0xBFA14277), UINT32_C(0x927976D8), UINT32_C(0x744CAF23)}}, {{UINT32_C(0x47EA55C7), UINT32_C(0xCBE70DF9), UINT32_C(0x535457AE), UINT32_C(0x8F8119AE), UINT32_C(0x7DAFD732), UINT32_C(0x1E3C69EC), UINT32_C(0x39D409A2), UINT32_C(0x1A2E162D)}, {UINT32_C(0x5F81C227), UINT32_C(0xBD7576A1), UINT32_C(0xC86AC2C3), UINT32_C(0xA040AF9E), UINT32_C(0xC10FC749), UINT32_C(0x5690C059), UINT32_C(0x49CFAEC6), UINT32_C(0x20B26E88)}}, {{UINT32_C(0xE3EF781E), UINT32_C(0x87AEBD1E), UINT32_C(0x1609A1F0), UINT32_C(0xBC794A62), UINT32_C(0x26E7F61B), UINT32_C(0x96D83142), UINT32_C(0xFC51D17D), UINT32_C(0x5198577F)}, {UINT32_C(0x8E6D0124), UINT32_C(0xBFB5FAE2), UINT32_C(0xFFD5BD72), UINT32_C(0x91A7172B), UINT32_C(0x02832847), UINT32_C(0x474B0154), UINT32_C(0x59827FEB), UINT32_C(0x4BAF0B4C)}}, {{UINT32_C(0xBA090294), UINT32_C(0x5EADAA8E), UINT32_C(0x11A6E9FA), UINT32_C(0x51401BC9), UINT32_C(0x1D2594CD), UINT32_C(0x78F11758), UINT32_C(0x82D203C2), UINT32_C(0x1811AD30)}, {UINT32_C(0x53FD07CC), UINT32_C(0x554CC39A), UINT32_C(0xC7A05601), UINT32_C(0x055FC983), UINT32_C(0xD5A80B4B), UINT32_C(0xB3B34E95), UINT32_C(0x1819BC16), UINT32_C(0x72B4CF94)}}, {{UINT32_C(0x514FAFD0), UINT32_C(0x0750E4F0), UINT32_C(0xAD61C7B1), UINT32_C(0x297D27E6), UINT32_C(0xA2D5D410), UINT32_C(0x701D743F), UINT32_C(0xC83B55C9), UINT32_C(0x535DD97B)}, {UINT32_C(0x1CB11BB0), UINT32_C(0x2EE96DDE), UINT32_C(0x0914450F), UINT32_C(0xECEA32EA), UINT32_C(0x4CDBDA6A), UINT32_C(0x4FB81236), UINT32_C(0x233C8063), UINT32_C(0x5B75B6B2)}}, {{UINT32_C(0xD69D6C6A), UINT32_C(0xF0A934A6), UINT32_C(0x3CC80AC9), UINT32_C(0x313E8977), UINT32_C(0x1E428B71), UINT32_C(0x74692B17), UINT32_C(0xE1BE662D), UINT32_C(0x0474FEFC)}, {UINT32_C(0xAFFBF61B), UINT32_C(0xAA2FF6DB), UINT32_C(0x776983AF), UINT32_C(0xCE1594E1), UINT32_C(0x4D5A2596), UINT32_C(0xF00C665B), UINT32_C(0x7D414B9A), UINT32_C(0x30DD2449)}}, {{UINT32_C(0xACC44AB3), UINT32_C(0xEF862DA2), UINT32_C(0x6EE7A44A), UINT32_C(0xBAD6857F), UINT32_C(0xD2F9027E), UINT32_C(0x57674BF9), UINT32_C(0x2ABF816E), UINT32_C(0x4D771CC3)}, {UINT32_C(0xAC0F1348), UINT32_C(0x27BEFC18), UINT32_C(0x5E4F1202), UINT32_C(0xD83112EF), UINT32_C(0x8E9AAAE5), UINT32_C(0x3571BDE3), UINT32_C(0xC1379B13), UINT32_C(0x07284830)}}, {{UINT32_C(0x72A8890C), UINT32_C(0xA4C2F36F), UINT32_C(0x5824B392), UINT32_C(0x22DF0E81), UINT32_C(0x5E720240), UINT32_C(0x50FAD77F), UINT32_C(0x03278F96), UINT32_C(0x1D152A69)}, {UINT32_C(0xA7D80F17), UINT32_C(0x25A3E92E), UINT32_C(0x7EF32666), UINT32_C(0xBBF85B32), UINT32_C(0x27222E52), UINT32_C(0xBBB55687), UINT32_C(0x7582FE42), UINT32_C(0x756D22A6)}}, {{UINT32_C(0x9BC9EAED), UINT32_C(0x0AE7493A), UINT32_C(0x0DDBB275), UINT32_C(0x9185F53F), UINT32_C(0xC3DFDBA7), UINT32_C(0x1585D068), UINT32_C(0x562E2455), UINT32_C(0x543208A1)}, {UINT32_C(0xCBCF9535), UINT32_C(0x4C417D81), UINT32_C(0xE35DD6ED), UINT32_C(0xD2DC38D3), UINT32_C(0x346F03A4), UINT32_C(0x9DF1E014), UINT32_C(0xF0E772A6), UINT32_C(0x65736E3F)}}, {{UINT32_C(0xCFB7FF06), UINT32_C(0x58684A7B), UINT32_C(0xC58E6316), UINT32_C(0x72CC4AFE), UINT32_C(0xA8BB508A), UINT32_C(0x2CA9BF30), UINT32_C(0xE2044C8C), UINT32_C(0x61576519)}, {UINT32_C(0x8FF6D2B5), UINT32_C(0xE78FAD3D), UINT32_C(0xA934C7B2), UINT32_C(0x6E5B839F), UINT32_C(0xFAFA9F9B), UINT32_C(0xC1F3D367), UINT32_C(0xF8B2AFA4), UINT32_C(0x637CC398)}}, {{UINT32_C(0xFE2B2639), UINT32_C(0xD6FC1806), UINT32_C(0x9E98A7F2), UINT32_C(0x1DB199B4), UINT32_C(0xC794F900), UINT32_C(0x0508763D), UINT32_C(0x3232E5AC), UINT32_C(0x363F1F7D)}, {UINT32_C(0xBBDBB351), UINT32_C(0xDCF2AD74), UINT32_C(0x5A506BC6), UINT32_C(0x91F2EAF1), UINT32_C(0xB850088B), UINT32_C(0xBDE8459E), UINT32_C(0x3E1135AF), UINT32_C(0x52DF883B)}}, {{UINT32_C(0xF93779DC), UINT32_C(0x12FD053A), UINT32_C(0x9E319E46), UINT32_C(0x3E3D8728), UINT32_C(0xE5E360AE), UINT32_C(0x4D631005), UINT32_C(0xB1B29A30), UINT32_C(0x4A8B5683)}, {UINT32_C(0xA8CA45EF), UINT32_C(0x305E5E53), UINT32_C(0xC2914843), UINT32_C(0x59EACB45), UINT32_C(0x1988ECEA), UINT32_C(0x83677B7A), UINT32_C(0xD6FD53E8), UINT32_C(0x63D9CD36)}}, {{UINT32_C(0xB77EB45F), UINT32_C(0xDF2DACF2), UINT32_C(0x55BBA70E), UINT32_C(0x3C1303E3), UINT32_C(0x4526A06C), UINT32_C(0x5AB8EB42), UINT32_C(0x7FE06BBC), UINT32_C(0x4D4FD216)}, {UINT32_C(0xE1486ABC), UINT32_C(0x98C5ADCF), UINT32_C(0x07F86F3A), UINT32_C(0x9A503BFF), UINT32_C(0x56282E44), UINT32_C(0x7CEBAECB), UINT32_C(0x1F230DA0), UINT32_C(0x4FB09037)}}, {{UINT32_C(0x27210752), UINT32_C(0xD1A37384), UINT32_C(0x02CF1C74), UINT32_C(0xD10794D6), UINT32_C(0x820CC08C), UINT32_C(0x48A2095A), UINT32_C(0xE3284B9D), UINT32_C(0x6DCDDE2E)}, {UINT32_C(0x5D40510D), UINT32_C(0xB8C7203E), UINT32_C(0x5385E3A7), UINT32_C(0x957E8982), UINT32_C(0xE27D7C13), UINT32_C(0xD220BE2F), UINT32_C(0x7B471B5B), UINT32_C(0x2D104AC5)}}, {{UINT32_C(0xBA0AFA8D), UINT32_C(0x3B31D52B), UINT32_C(0xDCC85F88), UINT32_C(0xFA9639F5), UINT32_C(0x8861DDD7), UINT32_C(0x15014637), UINT32_C(0x7B5443B0), UINT32_C(0x31C222DB)}, {UINT32_C(0xC3CDD689), UINT32_C(0xE2618546), UINT32_C(0xD528A130), UINT32_C(0x7F3FB754), UINT32_C(0xAC5FAF99), UINT32_C(0xA0915810), UINT32_C(0xE9899CE5), UINT32_C(0x3863B890)}}, {{UINT32_C(0x579C4353), UINT32_C(0xBDD42CA3), UINT32_C(0x4D65CB5B), UINT32_C(0xAD30567D), UINT32_C(0x6D91810B), UINT32_C(0x0E343F21), UINT32_C(0x42E19816), UINT32_C(0x65E0092D)}, {UINT32_C(0xF84E8C8E), UINT32_C(0x76154DCC), UINT32_C(0x0BA4AE59), UINT32_C(0xBA147CA8), UINT32_C(0x56A1A71E), UINT32_C(0xCA8085E7), UINT32_C(0x1A158536), UINT32_C(0x1D90B4B0)}}, }, { {{UINT32_C(0xF8B6C26A), UINT32_C(0x5C4B7438), UINT32_C(0x645BBE80), UINT32_C(0x0C17A41B), UINT32_C(0x40CF3D85), UINT32_C(0xA386062D), UINT32_C(0xE78F776D), UINT32_C(0x563E42D2)}, {UINT32_C(0x1F07459B), UINT32_C(0x4BB8E356), UINT32_C(0x75D222CD), UINT32_C(0xF01A24B7), UINT32_C(0x24CF3F61), UINT32_C(0xBE3D032B), UINT32_C(0x0AD5F3A3), UINT32_C(0x759B0167)}}, {{UINT32_C(0x7D201AAB), UINT32_C(0x2F5AEBD1), UINT32_C(0xC0AE02AD), UINT32_C(0x7B14CBEE), UINT32_C(0xEDC6388B), UINT32_C(0xB9B54430), UINT32_C(0xB622E01F), UINT32_C(0x69E713FB)}, {UINT32_C(0xC5361565), UINT32_C(0x4630EE8E), UINT32_C(0x5C8FB479), UINT32_C(0x6705961E), UINT32_C(0x07C2AA45), UINT32_C(0x125CC97E), UINT32_C(0x25AE3B12), UINT32_C(0x4BC459F4)}}, {{UINT32_C(0x28CF94E4), UINT32_C(0xEF025496), UINT32_C(0x9DB24DE6), UINT32_C(0x04CFAB25), UINT32_C(0xC62254EF), UINT32_C(0x52B8C734), UINT32_C(0x568AB164), UINT32_C(0x0F2FE922)}, {UINT32_C(0xE3F39B40), UINT32_C(0x48551A05), UINT32_C(0x31A7C7F6), UINT32_C(0x4A36865F), UINT32_C(0x840441AE), UINT32_C(0x4486512C), UINT32_C(0x8C7C4B4D), UINT32_C(0x559C6CAF)}}, {{UINT32_C(0x0F103030), UINT32_C(0xFCC0D1DA), UINT32_C(0x39CD584E), UINT32_C(0x7A9F1D55), UINT32_C(0x681D0D37), UINT32_C(0x3EFB9B94), UINT32_C(0x4D842332), UINT32_C(0x3AE97CCD)}, {UINT32_C(0x3C03676B), UINT32_C(0x85A8ECE1), UINT32_C(0x3AD435A1), UINT32_C(0x030F8775), UINT32_C(0x7F2D73B5), UINT32_C(0xF6019B4D), UINT32_C(0x2F14F911), UINT32_C(0x6B77E31A)}}, {{UINT32_C(0x9186C671), UINT32_C(0x65C8161B), UINT32_C(0xCDFF2F8C), UINT32_C(0x412C3CC7), UINT32_C(0x2C2FEA33), UINT32_C(0xBFFC1719), UINT32_C(0xC3675845), UINT32_C(0x75DCF68B)}, {UINT32_C(0x3B23D576), UINT32_C(0x0476AFBF), UINT32_C(0x19315F79), UINT32_C(0xB20CAEE2), UINT32_C(0x0885471A), UINT32_C(0x1BC2A859), UINT32_C(0xC328279C), UINT32_C(0x410FF6CF)}}, {{UINT32_C(0x60569D94), UINT32_C(0x327394D9), UINT32_C(0x6EA39D95), UINT32_C(0xFF2AEB6A), UINT32_C(0xEA0CA3AE), UINT32_C(0x1BED71E8), UINT32_C(0x21072A94), UINT32_C(0x1000A81E)}, {UINT32_C(0x73C02416), UINT32_C(0x368EA229), UINT32_C(0x0A4941BC), UINT32_C(0xDF5B2A42), UINT32_C(0xD0D40B3A), UINT32_C(0x4FFDC7B8), UINT32_C(0x48ABAB4E), UINT32_C(0x7B2C73F1)}}, {{UINT32_C(0x81EE1072), UINT32_C(0x90FE34E4), UINT32_C(0x310E13D8), UINT32_C(0xAE7A2FF4), UINT32_C(0xCAB3927C), UINT32_C(0x6213D3B1), UINT32_C(0x7DC7E9EF), UINT32_C(0x44936FBD)}, {UINT32_C(0x23A1BDBE), UINT32_C(0x3B898EF3), UINT32_C(0x54CC7B1D), UINT32_C(0x3FA6C6A0), UINT32_C(0xC6AC54F2), UINT32_C(0x41BCC3B5), UINT32_C(0xDC10AE39), UINT32_C(0x1AB5D168)}}, {{UINT32_C(0xFEAF67A6), UINT32_C(0x1AED113C), UINT32_C(0x342AC459), UINT32_C(0x04E3C7A1), UINT32_C(0x7A99DFBC), UINT32_C(0x65A39278), UINT32_C(0x642329FF), UINT32_C(0x03ECBC6B)}, {UINT32_C(0xA6A4421A), UINT32_C(0x799F4EC5), UINT32_C(0xBEE18B3C), UINT32_C(0x44522C26), UINT32_C(0x1975C4BB), UINT32_C(0x1C7BFF15), UINT32_C(0xE6A27857), UINT32_C(0x0FAA03BE)}}, {{UINT32_C(0x0743FF7B), UINT32_C(0x173AB9E0), UINT32_C(0x2CFC95AE), UINT32_C(0xB11187AE), UINT32_C(0x9C112049), UINT32_C(0xCA81BB2E), UINT32_C(0xC03555D5), UINT32_C(0x6B811DB6)}, {UINT32_C(0x4FE32256), UINT32_C(0x76C1FC14), UINT32_C(0xD0E47C4E), UINT32_C(0xDA8C5A96), UINT32_C(0x29FDB01C), UINT32_C(0xB645D413), UINT32_C(0xAC39502A), UINT32_C(0x78898447)}}, {{UINT32_C(0x9BF44B35), UINT32_C(0x4285FF32), UINT32_C(0xE3358C7F), UINT32_C(0x207F9029), UINT32_C(0x63BAF4CE), UINT32_C(0x0FE8F032), UINT32_C(0xFF15E1F7), UINT32_C(0x698A0398)}, {UINT32_C(0x7E572DF6), UINT32_C(0x54874843), UINT32_C(0x9F43C07B), UINT32_C(0x74683519), UINT32_C(0x0A433D6A), UINT32_C(0x47BAB49E), UINT32_C(0xFAB5C858), UINT32_C(0x09ED8740)}}, {{UINT32_C(0x1F6CA820), UINT32_C(0x8AA5E5C9), UINT32_C(0xD3C25BEC), UINT32_C(0xAD290A94), UINT32_C(0x3BA255F0), UINT32_C(0xDC4C67BF), UINT32_C(0x1DEDD8A9), UINT32_C(0x0D7EF7D9)}, {UINT32_C(0x5EEFD1C3), UINT32_C(0x0831A26F), UINT32_C(0x04483E0C), UINT32_C(0x78CA66F5), UINT32_C(0x2FAAC15A), UINT32_C(0x9D5A5612), UINT32_C(0x5D6FACDB), UINT32_C(0x43B0C7E7)}}, {{UINT32_C(0x4503899D), UINT32_C(0x34BA537C), UINT32_C(0x2AF8ED3B), UINT32_C(0x9DEBC8F5), UINT32_C(0x84F416E6), UINT32_C(0x396995E9), UINT32_C(0xC7BCE392), UINT32_C(0x77F10FED)}, {UINT32_C(0x1F8AF262), UINT32_C(0x065CCB72), UINT32_C(0xD2F00FC4), UINT32_C(0xE220ED60), UINT32_C(0x5EE25B46), UINT32_C(0x41A5FB06), UINT32_C(0xDD9070B1), UINT32_C(0x22505574)}}, {{UINT32_C(0x44BFC5C0), UINT32_C(0x571FF151), UINT32_C(0x3138363C), UINT32_C(0xBE2558B8), UINT32_C(0x605E356C), UINT32_C(0xB2211ABD), UINT32_C(0x176C5F53), UINT32_C(0x0B6435DA)}, {UINT32_C(0x8DCF484E), UINT32_C(0xF18C917C), UINT32_C(0xCD93D65F), UINT32_C(0x45D4120C), UINT32_C(0x190AE7F8), UINT32_C(0xEBB0BF9C), UINT32_C(0x8D8C8D5A), UINT32_C(0x3D403DE2)}}, {{UINT32_C(0xBE656644), UINT32_C(0xCDE760B4), UINT32_C(0x2D21DBC5), UINT32_C(0x99DC5E6D), UINT32_C(0xB6232D08), UINT32_C(0x644FCAF3), UINT32_C(0x859341E3), UINT32_C(0x52955488)}, {UINT32_C(0x25763919), UINT32_C(0x3AB4580D), UINT32_C(0x4EF66999), UINT32_C(0x82AB0C53), UINT32_C(0x0180663E), UINT32_C(0xBD395C74), UINT32_C(0xB4756474), UINT32_C(0x07974F1A)}}, {{UINT32_C(0x31588EA6), UINT32_C(0x8C15CFE7), UINT32_C(0xF36C882D), UINT32_C(0x9629060E), UINT32_C(0x862B080D), UINT32_C(0xDF8E8E9E), UINT32_C(0xD7A0C5BE), UINT32_C(0x0BD36B48)}, {UINT32_C(0x76DA047B), UINT32_C(0xEBD0C6C9), UINT32_C(0xBB94FD5A), UINT32_C(0x4F0F08AB), UINT32_C(0x74910D9F), UINT32_C(0x33D41A4E), UINT32_C(0xA9583754), UINT32_C(0x3D6F8D0B)}}, {{UINT32_C(0x4E4FC72E), UINT32_C(0xEC4C896E), UINT32_C(0x002ECE31), UINT32_C(0xB111210C), UINT32_C(0x2AF11E21), UINT32_C(0x7204D937), UINT32_C(0x5D0509E9), UINT32_C(0x59B9C1EC)}, {UINT32_C(0xF9D5BBC0), UINT32_C(0xBC97644C), UINT32_C(0x31B4E869), UINT32_C(0x25B123AF), UINT32_C(0x5A6CAAB0), UINT32_C(0x091D7AEC), UINT32_C(0xECC911C4), UINT32_C(0x340B9E80)}}, }, { {{UINT32_C(0xEC208406), UINT32_C(0xE8036B20), UINT32_C(0x214CEB5A), UINT32_C(0xAF46A05A), UINT32_C(0x46CC8379), UINT32_C(0x8672084A), UINT32_C(0x04BA7885), UINT32_C(0x7DE0A42F)}, {UINT32_C(0xC9D3F32A), UINT32_C(0xB772BEDC), UINT32_C(0x534B1520), UINT32_C(0x7DAE3680), UINT32_C(0xEC7120CC), UINT32_C(0x04CD6203), UINT32_C(0xB4E99780), UINT32_C(0x032F88E3)}}, {{UINT32_C(0xE4A0897E), UINT32_C(0xB34BDA5C), UINT32_C(0x379B2480), UINT32_C(0xF7748B26), UINT32_C(0xB2D97522), UINT32_C(0xF47F6646), UINT32_C(0xF9641DB9), UINT32_C(0x66AD8DE1)}, {UINT32_C(0xD1BF09C0), UINT32_C(0x0F8EB919), UINT32_C(0xB95DC052), UINT32_C(0x7853BB4E), UINT32_C(0x62B1FD4A), UINT32_C(0xBE7EE13D), UINT32_C(0xDC7CE53E), UINT32_C(0x2FF7EDC5)}}, {{UINT32_C(0xEE81DF35), UINT32_C(0xE1009AA0), UINT32_C(0x61D0798B), UINT32_C(0x14972F02), UINT32_C(0xF1EA1A6A), UINT32_C(0x5A6831A0), UINT32_C(0x0CAB301A), UINT32_C(0x1DBABA3D)}, {UINT32_C(0x157D5213), UINT32_C(0x421270E2), UINT32_C(0x6407B790), UINT32_C(0xA37BEA95), UINT32_C(0x103A6073), UINT32_C(0xEAD56B1F), UINT32_C(0xBAD909F1), UINT32_C(0x27534624)}}, {{UINT32_C(0xC2621EF1), UINT32_C(0xC92D2209), UINT32_C(0x1D3AD3F3), UINT32_C(0x450710C3), UINT32_C(0x19E481AD), UINT32_C(0x8CFB8D6C), UINT32_C(0xE6DB01BD), UINT32_C(0x35CACDAE)}, {UINT32_C(0x7CDD5B01), UINT32_C(0x2DA4A1D8), UINT32_C(0x0F55BA11), UINT32_C(0x3E40C751), UINT32_C(0xB15C162D), UINT32_C(0xA91D9EE7), UINT32_C(0x11DBA157), UINT32_C(0x13AD3BE5)}}, {{UINT32_C(0xE72F64F5), UINT32_C(0xAE417DB0), UINT32_C(0xF13352BA), UINT32_C(0x40822279), UINT32_C(0x1F2B75B9), UINT32_C(0xEC43AFD9), UINT32_C(0xC9CF2972), UINT32_C(0x14D4BB2B)}, {UINT32_C(0x0761B2F1), UINT32_C(0x4A55718A), UINT32_C(0xD81A9307), UINT32_C(0xDAFBF756), UINT32_C(0x5D3E5A07), UINT32_C(0x2DCDFC1C), UINT32_C(0x2EBBDF28), UINT32_C(0x696E42ED)}}, {{UINT32_C(0x68705410), UINT32_C(0xF4739399), UINT32_C(0xAF5FFC88), UINT32_C(0xFD581005), UINT32_C(0x90A9F517), UINT32_C(0x5490A694), UINT32_C(0x8CF8327E), UINT32_C(0x4A5C8C2E)}, {UINT32_C(0xF7D83DA6), UINT32_C(0xC203CD35), UINT32_C(0x7282368D), UINT32_C(0xECAA6B90), UINT32_C(0x2AF7EC42), UINT32_C(0x365BB571), UINT32_C(0xD4099316), UINT32_C(0x112E7ACD)}}, {{UINT32_C(0x3AE3C25C), UINT32_C(0x9ABDE060), UINT32_C(0xEB9925B2), UINT32_C(0xE4C03DAD), UINT32_C(0x9E03388B), UINT32_C(0x3C28DCB1), UINT32_C(0x52B63C06), UINT32_C(0x2337A7CF)}, {UINT32_C(0x4E1AF2EA), UINT32_C(0x74DC0F13), UINT32_C(0xCD0D59AA), UINT32_C(0xA010E4E3), UINT32_C(0x9FA14C96), UINT32_C(0x6E4DB7BA), UINT32_C(0x557F7CDE), UINT32_C(0x5B2C3862)}}, {{UINT32_C(0xC8C79CA9), UINT32_C(0xC826E567), UINT32_C(0xE851BE0C), UINT32_C(0xE7D110CA), UINT32_C(0xA3606499), UINT32_C(0xFFD57057), UINT32_C(0xC6482504), UINT32_C(0x2E9DBC40)}, {UINT32_C(0xF784D9AF), UINT32_C(0xC9F0C3C2), UINT32_C(0xB755172E), UINT32_C(0xDD982A05), UINT32_C(0xA023997F), UINT32_C(0x6BC6C19D), UINT32_C(0xE34493C6), UINT32_C(0x4AC177BE)}}, {{UINT32_C(0x4FA4F134), UINT32_C(0x21C3E087), UINT32_C(0x86F9722F), UINT32_C(0x66E10C34), UINT32_C(0x7398579A), UINT32_C(0xD2927B01), UINT32_C(0x0352C3D3), UINT32_C(0x7135B638)}, {UINT32_C(0x3BB5EE11), UINT32_C(0x2DA62007), UINT32_C(0x3A946236), UINT32_C(0x8B64F13C), UINT32_C(0x30EAE6DF), UINT32_C(0x3A83C854), UINT32_C(0x0EB6F749), UINT32_C(0x31114E2A)}}, {{UINT32_C(0x35BFC72B), UINT32_C(0x2C7B52E7), UINT32_C(0x2B0D4C2C), UINT32_C(0x6DD29EBD), UINT32_C(0x6C92E82D), UINT32_C(0xE90D3988), UINT32_C(0x3864D94D), UINT32_C(0x0A924901)}, {UINT32_C(0x9BEE9E78), UINT32_C(0x63050824), UINT32_C(0x003DD5CF), UINT32_C(0x7929FD62), UINT32_C(0xE57507D1), UINT32_C(0xD04F832C), UINT32_C(0x37D2C32E), UINT32_C(0x61078BDC)}}, {{UINT32_C(0x2E75264A), UINT32_C(0xB118AFDD), UINT32_C(0xEFD65114), UINT32_C(0x3AB692EA), UINT32_C(0x8B0A2128), UINT32_C(0x58D2CE24), UINT32_C(0x82ED6D5F), UINT32_C(0x4316E6C2)}, {UINT32_C(0x46345BE4), UINT32_C(0x97766FFF), UINT32_C(0x0A7451AA), UINT32_C(0xD7FF3014), UINT32_C(0xAACE2E37), UINT32_C(0x078A423F), UINT32_C(0xA6A78919), UINT32_C(0x7F1F90C2)}}, {{UINT32_C(0x8E9E3D4D), UINT32_C(0x988FCCB0), UINT32_C(0xB95C9731), UINT32_C(0xBD003FC0), UINT32_C(0xB0A84E58), UINT32_C(0x74E40076), UINT32_C(0x1DF7FDD0), UINT32_C(0x5FD1DBE6)}, {UINT32_C(0x4E6CE2FA), UINT32_C(0xD2C700C7), UINT32_C(0x903C5AE7), UINT32_C(0xA6E042E2), UINT32_C(0x3C73822E), UINT32_C(0x561CC25F), UINT32_C(0x2A6A0C0C), UINT32_C(0x651A7939)}}, {{UINT32_C(0x88CD7642), UINT32_C(0x103E9EC6), UINT32_C(0x3C3C86CE), UINT32_C(0x65ED5218), UINT32_C(0x82785C8B), UINT32_C(0x16BAB002), UINT32_C(0xF34723C5), UINT32_C(0x0B5C18BB)}, {UINT32_C(0xE724D144), UINT32_C(0x528B0546), UINT32_C(0x780EEF9E), UINT32_C(0x5E582A6B), UINT32_C(0x122F17AD), UINT32_C(0xC08283B8), UINT32_C(0x1C22F32D), UINT32_C(0x0300EDCD)}}, {{UINT32_C(0x38DCFD39), UINT32_C(0x03AC716A), UINT32_C(0x94F12C74), UINT32_C(0xCD88474C), UINT32_C(0xE9042CA8), UINT32_C(0xB5E8641E), UINT32_C(0x40D10558), UINT32_C(0x1D5746CC)}, {UINT32_C(0xCB4BB408), UINT32_C(0x7869F45E), UINT32_C(0x569489C3), UINT32_C(0x28FB091D), UINT32_C(0x50A46306), UINT32_C(0xEA371EEC), UINT32_C(0x75AA224C), UINT32_C(0x28025796)}}, {{UINT32_C(0xF7A5923A), UINT32_C(0x4EAFA44E), UINT32_C(0x6B69FD8B), UINT32_C(0xD2427C30), UINT32_C(0x393D83F9), UINT32_C(0x4C4E884A), UINT32_C(0x6236AB65), UINT32_C(0x2D34890A)}, {UINT32_C(0x35CC97F5), UINT32_C(0x80038D40), UINT32_C(0x97897472), UINT32_C(0x4FE43C84), UINT32_C(0xBEF161AF), UINT32_C(0xE5F56243), UINT32_C(0x9372E631), UINT32_C(0x3E1BDD6F)}}, {{UINT32_C(0x5732669F), UINT32_C(0x06A2B287), UINT32_C(0xCDF4D2C0), UINT32_C(0x92D00397), UINT32_C(0x454A57F5), UINT32_C(0xCD9A25F0), UINT32_C(0x2F0CDB0B), UINT32_C(0x23ADB724)}, {UINT32_C(0xFF0F8CB0), UINT32_C(0x504DA603), UINT32_C(0xD3E24181), UINT32_C(0x14EF9D30), UINT32_C(0x47FC1E66), UINT32_C(0xB1B1328E), UINT32_C(0x6C60354D), UINT32_C(0x319B2A84)}}, }, { {{UINT32_C(0xF1D56038), UINT32_C(0xBBF5542E), UINT32_C(0xDD71CFC3), UINT32_C(0xEDE3E637), UINT32_C(0x2E9F6C8B), UINT32_C(0xFAA81D21), UINT32_C(0x69FBD060), UINT32_C(0x4DD2D44B)}, {UINT32_C(0x14366A20), UINT32_C(0x71FB6233), UINT32_C(0x9575451D), UINT32_C(0x155E486F), UINT32_C(0xEC7807D9), UINT32_C(0x001106F0), UINT32_C(0xC617034C), UINT32_C(0x1C80E5AB)}}, {{UINT32_C(0x8619F5F4), UINT32_C(0xD3E478DB), UINT32_C(0xF68170C2), UINT32_C(0x1DF5C367), UINT32_C(0x3430DE1D), UINT32_C(0xEAB09524), UINT32_C(0xC3CD4C24), UINT32_C(0x48F09361)}, {UINT32_C(0x60644FED), UINT32_C(0xE49DEA4B), UINT32_C(0x758C3679), UINT32_C(0x47170F1C), UINT32_C(0xB0382A84), UINT32_C(0x4CC1E6E8), UINT32_C(0x10A4465E), UINT32_C(0x2DBDB9DA)}}, {{UINT32_C(0xC8400A4C), UINT32_C(0x67BAA79A), UINT32_C(0x01D28ECE), UINT32_C(0xFA306753), UINT32_C(0x6F33289C), UINT32_C(0x29DB5B1C), UINT32_C(0x26A8FCB4), UINT32_C(0x44757573)}, {UINT32_C(0xE1B0A795), UINT32_C(0x59616219), UINT32_C(0xC5B32FA0), UINT32_C(0x3032D939), UINT32_C(0x7C3CEA2C), UINT32_C(0x3010C917), UINT32_C(0x9892BDF4), UINT32_C(0x5CF83EF1)}}, {{UINT32_C(0x3C7E83E6), UINT32_C(0x55DE1141), UINT32_C(0x74EA0366), UINT32_C(0x9D03929C), UINT32_C(0x83BAF3FE), UINT32_C(0x5CA60C50), UINT32_C(0x7F70E905), UINT32_C(0x3D9BCA58)}, {UINT32_C(0xFCC5AB59), UINT32_C(0xDB79DF5A), UINT32_C(0x53F68D30), UINT32_C(0x03CFCF06), UINT32_C(0x4FCFA5F1), UINT32_C(0xBE101A78), UINT32_C(0xB49E493C), UINT32_C(0x115D7078)}}, {{UINT32_C(0x76A0CCBD), UINT32_C(0xF14023AA), UINT32_C(0x086F2E50), UINT32_C(0x4287F0BC), UINT32_C(0xF79A37E7), UINT32_C(0xC5EAA559), UINT32_C(0x04E4F2A2), UINT32_C(0x5D527C09)}, {UINT32_C(0x51DAA504), UINT32_C(0xEC914616), UINT32_C(0xEEF1DC95), UINT32_C(0x250D90C6), UINT32_C(0xA50330B2), UINT32_C(0x1B0AA868), UINT32_C(0x54189BBE), UINT32_C(0x7B45A783)}}, {{UINT32_C(0xF019D6FF), UINT32_C(0x0D602E05), UINT32_C(0xDD1800BA), UINT32_C(0x563E3893), UINT32_C(0xF3C7F7E5), UINT32_C(0x7146727E), UINT32_C(0x4B026635), UINT32_C(0x59641D98)}, {UINT32_C(0xE91DDBB8), UINT32_C(0x50BCF90F), UINT32_C(0x7F8397A6), UINT32_C(0x5D43E78E), UINT32_C(0xEB15896E), UINT32_C(0x8734A261), UINT32_C(0x9FF6B361), UINT32_C(0x4AD1E864)}}, {{UINT32_C(0x320322F1), UINT32_C(0x1A9B601F), UINT32_C(0x91F611C4), UINT32_C(0x606D40B3), UINT32_C(0xA19C918F), UINT32_C(0xB984958B), UINT32_C(0x776F834E), UINT32_C(0x67BFB045)}, {UINT32_C(0x68DD85F0), UINT32_C(0xC59E5569), UINT32_C(0xD4067875), UINT32_C(0xB5642834), UINT32_C(0xCB138DF3), UINT32_C(0x247E7D65), UINT32_C(0x5CB9281D), UINT32_C(0x73640A03)}}, {{UINT32_C(0x88639889), UINT32_C(0xC7C34CCC), UINT32_C(0xA785C707), UINT32_C(0xD9E44E07), UINT32_C(0x32F83073), UINT32_C(0x1BE68EFE), UINT32_C(0xAE5317CE), UINT32_C(0x249902DA)}, {UINT32_C(0x76CA92FF), UINT32_C(0xF1F0B86A), UINT32_C(0xC01CB06B), UINT32_C(0xA7F502CF), UINT32_C(0x595AA185), UINT32_C(0x0A8B4766), UINT32_C(0xB792DE49), UINT32_C(0x614135AA)}}, {{UINT32_C(0x564F2BC8), UINT32_C(0x5392CAA7), UINT32_C(0xCC894FCD), UINT32_C(0x1CDDA684), UINT32_C(0xA4EBF82F), UINT32_C(0x10AC2378), UINT32_C(0x5051BFF9), UINT32_C(0x6211EA46)}, {UINT32_C(0x30E8E210), UINT32_C(0xE53B0174), UINT32_C(0x02C0E381), UINT32_C(0x2374FEC3), UINT32_C(0x4DA07224), UINT32_C(0xF8B1506B), UINT32_C(0x54DA7A08), UINT32_C(0x4E451E01)}}, {{UINT32_C(0x241FC7FB), UINT32_C(0xA8404D9C), UINT32_C(0xC4406332), UINT32_C(0x1D6DBF6E), UINT32_C(0x30162118), UINT32_C(0xFE142319), UINT32_C(0xA7EF5EF5), UINT32_C(0x69DE75CC)}, {UINT32_C(0x856E26A5), UINT32_C(0x008D4D09), UINT32_C(0xC588ECF6), UINT32_C(0x2BC64B65), UINT32_C(0xAA01EE19), UINT32_C(0x7A523D0B), UINT32_C(0x932F0B95), UINT32_C(0x213EF390)}}, {{UINT32_C(0x1CD716FA), UINT32_C(0xA42FE513), UINT32_C(0x0E8001B6), UINT32_C(0xFB13B3C6), UINT32_C(0xD8F530CB), UINT32_C(0xBFDC7998), UINT32_C(0xF1C61761), UINT32_C(0x04F9C05B)}, {UINT32_C(0xAFED9D64), UINT32_C(0xFB57396F), UINT32_C(0x421AC123), UINT32_C(0x28CCEE3A), UINT32_C(0xF6C21ACC), UINT32_C(0x32590C9B), UINT32_C(0xBCA75AE3), UINT32_C(0x503B97CB)}}, {{UINT32_C(0x366946ED), UINT32_C(0x745208BC), UINT32_C(0x4C906596), UINT32_C(0xA75D88E9), UINT32_C(0xEE043530), UINT32_C(0x03A30C7E), UINT32_C(0xD11BF4D5), UINT32_C(0x5C67C151)}, {UINT32_C(0xE7AE4BB3), UINT32_C(0x04F75DFA), UINT32_C(0x7F8D7404), UINT32_C(0xA0813606), UINT32_C(0x19D68F64), UINT32_C(0x8B9F9210), UINT32_C(0x06F73B55), UINT32_C(0x5AB67971)}}, {{UINT32_C(0xB0687095), UINT32_C(0x08064C4A), UINT32_C(0xB0106DF4), UINT32_C(0x27E30DDD), UINT32_C(0x8482524A), UINT32_C(0x31D29C70), UINT32_C(0xD86FDACD), UINT32_C(0x65DD5896)}, {UINT32_C(0xC647197E), UINT32_C(0x081C013D), UINT32_C(0xD7A53A45), UINT32_C(0x51C10B9E), UINT32_C(0x0DD7FC53), UINT32_C(0xACB9A4DE), UINT32_C(0xF646220B), UINT32_C(0x639997A2)}}, {{UINT32_C(0x1FB93B43), UINT32_C(0x97CCF825), UINT32_C(0xE488D786), UINT32_C(0xB7D7713D), UINT32_C(0x3E4DBB33), UINT32_C(0x4F759566), UINT32_C(0xE0F09964), UINT32_C(0x13B5D8A1)}, {UINT32_C(0x316CDD97), UINT32_C(0xFFDDAD74), UINT32_C(0x52C92EE9), UINT32_C(0x67C55782), UINT32_C(0x0AC5D6FD), UINT32_C(0x03B50F94), UINT32_C(0x1484DF88), UINT32_C(0x56C5C009)}}, {{UINT32_C(0x1778D303), UINT32_C(0xDCE199E3), UINT32_C(0x0F1DD4EC), UINT32_C(0x53A2A4C6), UINT32_C(0x370A7B99), UINT32_C(0x7CC5EE9E), UINT32_C(0x2598744E), UINT32_C(0x4403202B)}, {UINT32_C(0x228247B6), UINT32_C(0xCCFAA978), UINT32_C(0x4A1D0E27), UINT32_C(0xF50D14BD), UINT32_C(0x80723ABC), UINT32_C(0x66695061), UINT32_C(0x742C0015), UINT32_C(0x750CCB6A)}}, {{UINT32_C(0x81A109F1), UINT32_C(0x7B046936), UINT32_C(0xD4C1AFE5), UINT32_C(0x6414D9A3), UINT32_C(0xDD14AC1F), UINT32_C(0x35070548), UINT32_C(0xDEC0D3F0), UINT32_C(0x27172F39)}, {UINT32_C(0xF2E273F0), UINT32_C(0x4EE0A7BF), UINT32_C(0xEC82B8E6), UINT32_C(0x028C7813), UINT32_C(0x2081EAE2), UINT32_C(0x907BF09F), UINT32_C(0x414D6421), UINT32_C(0x72E4C3D3)}}, }, { {{UINT32_C(0xA073711C), UINT32_C(0x2064097E), UINT32_C(0x5A65EC25), UINT32_C(0x980D830A), UINT32_C(0xF0877567), UINT32_C(0x7906A87C), UINT32_C(0xF1980A3A), UINT32_C(0x3E5EAE10)}, {UINT32_C(0x9272CE32), UINT32_C(0x5F51023A), UINT32_C(0xA437C974), UINT32_C(0x71D69E68), UINT32_C(0xD0B579FF), UINT32_C(0x32006EA1), UINT32_C(0xA436E129), UINT32_C(0x191935FF)}}, {{UINT32_C(0x91C1474C), UINT32_C(0xE5FE2909), UINT32_C(0x1F0B10F5), UINT32_C(0x7350B9FA), UINT32_C(0x6B4AB128), UINT32_C(0x2006F41D), UINT32_C(0xCD95FA42), UINT32_C(0x4EBDA6CF)}, {UINT32_C(0x5DA9A7F4), UINT32_C(0x45028938), UINT32_C(0x57FB462B), UINT32_C(0xD8129DE4), UINT32_C(0xE592EF90), UINT32_C(0x4F2BF2C9), UINT32_C(0xD6751DCC), UINT32_C(0x14A1A16B)}}, {{UINT32_C(0xDE0CD47A), UINT32_C(0x7460BB84), UINT32_C(0x468CBA3D), UINT32_C(0x261F24D6), UINT32_C(0x1E3C2D8A), UINT32_C(0x229D3181), UINT32_C(0x1D19E059), UINT32_C(0x4AE520C9)}, {UINT32_C(0xDF8DC66E), UINT32_C(0x5AC3AEE7), UINT32_C(0x299697EE), UINT32_C(0xCB417060), UINT32_C(0xCE97514F), UINT32_C(0x227C1497), UINT32_C(0x2E991FDE), UINT32_C(0x2589B803)}}, {{UINT32_C(0xA97A5D03), UINT32_C(0x7FE9D585), UINT32_C(0x10D58157), UINT32_C(0x7333A1EF), UINT32_C(0xC94C3DF6), UINT32_C(0x54C1CCD2), UINT32_C(0x28073B4E), UINT32_C(0x25C1B252)}, {UINT32_C(0x0635AD79), UINT32_C(0xEEB29AF9), UINT32_C(0x9AA38848), UINT32_C(0x880019C1), UINT32_C(0x30A9A497), UINT32_C(0x1A859942), UINT32_C(0x92B25ABA), UINT32_C(0x57EDCC2D)}}, {{UINT32_C(0x65E19DE6), UINT32_C(0xA98DAE7D), UINT32_C(0x46AD8696), UINT32_C(0x8007DD17), UINT32_C(0xA7F3BBAD), UINT32_C(0x61F2E2CF), UINT32_C(0x54193858), UINT32_C(0x1EFCD387)}, {UINT32_C(0x11666ECF), UINT32_C(0xFB54FD60), UINT32_C(0x36E7D371), UINT32_C(0xD97EA5DF), UINT32_C(0x3B9371FF), UINT32_C(0x944CA170), UINT32_C(0x05DE7FB0), UINT32_C(0x32A52CAC)}}, {{UINT32_C(0x19ED8B5E), UINT32_C(0xB960FFF6), UINT32_C(0x660354BB), UINT32_C(0xFD6B4C3E), UINT32_C(0x1C9E95F0), UINT32_C(0xF8ECAADA), UINT32_C(0xA8E08CC7), UINT32_C(0x687A6D29)}, {UINT32_C(0xC6A83D12), UINT32_C(0xD38B7670), UINT32_C(0x1265BF30), UINT32_C(0x1646064C), UINT32_C(0x2464892D), UINT32_C(0x7DE19FFE), UINT32_C(0x1BDBB729), UINT32_C(0x05B57E08)}}, {{UINT32_C(0xFFB7A98A), UINT32_C(0xF3586B04), UINT32_C(0xCB072826), UINT32_C(0xF1850CDC), UINT32_C(0xCF53BFB0), UINT32_C(0xFA3E66A4), UINT32_C(0x06E07221), UINT32_C(0x7C78E567)}, {UINT32_C(0x3B4E72AE), UINT32_C(0x21E6F245), UINT32_C(0xC6A3DBE8), UINT32_C(0x10A0D78B), UINT32_C(0xD618DDAB), UINT32_C(0xB9FC6D77), UINT32_C(0x76951DE5), UINT32_C(0x33092D13)}}, {{UINT32_C(0x5A0257CB), UINT32_C(0xCAA1BF9D), UINT32_C(0x866C505F), UINT32_C(0x1044E224), UINT32_C(0x81482E7D), UINT32_C(0x9B514107), UINT32_C(0x88940BFB), UINT32_C(0x538CB867)}, {UINT32_C(0xAC21DCC1), UINT32_C(0xACE68B78), UINT32_C(0x1609BF8C), UINT32_C(0x57942F3C), UINT32_C(0x66E48C7A), UINT32_C(0x30A47F32), UINT32_C(0xB0DA341F), UINT32_C(0x170D301D)}}, {{UINT32_C(0x18ED9863), UINT32_C(0x19643EB2), UINT32_C(0xD9104F33), UINT32_C(0xBBE55BCC), UINT32_C(0xA15B283C), UINT32_C(0x77008B6C), UINT32_C(0x873A6A02), UINT32_C(0x2A6E0B41)}, {UINT32_C(0x3CB9A225), UINT32_C(0x517410DF), UINT32_C(0xF538730A), UINT32_C(0x20D76E38), UINT32_C(0x9F8724F0), UINT32_C(0x76C9CAD6), UINT32_C(0x6BE9A035), UINT32_C(0x588BA106)}}, {{UINT32_C(0xF842F66C), UINT32_C(0xA059DBEC), UINT32_C(0xB3ED0481), UINT32_C(0x59CA186D), UINT32_C(0xD454490F), UINT32_C(0xA5B2ABCB), UINT32_C(0x02624902), UINT32_C(0x4A0F6004)}, {UINT32_C(0x4D2F605F), UINT32_C(0x45AF7B51), UINT32_C(0xC368030F), UINT32_C(0x57E8FE0F), UINT32_C(0x0C0727AE), UINT32_C(0x23B74557), UINT32_C(0x2B603EC4), UINT32_C(0x7E91EC77)}}, {{UINT32_C(0xFD582BE8), UINT32_C(0xEDD284CF), UINT32_C(0x81093CDA), UINT32_C(0x3077CB23), UINT32_C(0xFDEA4FCE), UINT32_C(0xB1934840), UINT32_C(0xD7F01C9A), UINT32_C(0x00F9B9D1)}, {UINT32_C(0x0A1C707B), UINT32_C(0xA55E5C5B), UINT32_C(0x2F8618A5), UINT32_C(0x05CD73CB), UINT32_C(0x512EEA05), UINT32_C(0x7327CECB), UINT32_C(0x8BF2A4D5), UINT32_C(0x5130A099)}}, {{UINT32_C(0xFA7A1C7B), UINT32_C(0x34D18880), UINT32_C(0xFD4E043F), UINT32_C(0x5E0D6C53), UINT32_C(0x1B4442AE), UINT32_C(0xB4DD8010), UINT32_C(0x78ED7563), UINT32_C(0x59D9183E)}, {UINT32_C(0xF1FAE158), UINT32_C(0x624DDAFC), UINT32_C(0x5C4C1E92), UINT32_C(0xC08C3653), UINT32_C(0xCE3E42EF), UINT32_C(0x452FD71F), UINT32_C(0x20B902EC), UINT32_C(0x175B4908)}}, {{UINT32_C(0x18F4CE34), UINT32_C(0x5F0FDF24), UINT32_C(0x9B7E61B8), UINT32_C(0xA64A3011), UINT32_C(0x663362E2), UINT32_C(0x8109ACD5), UINT32_C(0x97F3DF44), UINT32_C(0x4D02F824)}, {UINT32_C(0x3A4F916A), UINT32_C(0x2CE27CCE), UINT32_C(0x3B85B146), UINT32_C(0x4A4E6CBB), UINT32_C(0xDB8C9E5E), UINT32_C(0xFE7A6199), UINT32_C(0xD94B8D23), UINT32_C(0x53F5D620)}}, {{UINT32_C(0xE77610A9), UINT32_C(0x37FEBEC3), UINT32_C(0x92245CB0), UINT32_C(0xE82D8EAC), UINT32_C(0xF79A31BC), UINT32_C(0x3FD2CEEA), UINT32_C(0xB446850C), UINT32_C(0x277ACF32)}, {UINT32_C(0xCE1A2786), UINT32_C(0xD89FF4C7), UINT32_C(0xFFD3A23C), UINT32_C(0x441781E5), UINT32_C(0x07E85496), UINT32_C(0x7876EFC5), UINT32_C(0xE6F41B30), UINT32_C(0x0F306C7B)}}, {{UINT32_C(0x5AB1B92B), UINT32_C(0x3BF2BFD1), UINT32_C(0xF373FCF2), UINT32_C(0xDCC3F5A6), UINT32_C(0xDA53C229), UINT32_C(0x27CFC4A6), UINT32_C(0x508E677F), UINT32_C(0x5885737C)}, {UINT32_C(0x7B829F24), UINT32_C(0x1275D0F1), UINT32_C(0x4991B75B), UINT32_C(0xBD3C0B02), UINT32_C(0xE581C569), UINT32_C(0x3F82ACDF), UINT32_C(0x3F28904E), UINT32_C(0x12329435)}}, {{UINT32_C(0x99C3A09B), UINT32_C(0xCF7BDCCC), UINT32_C(0x5F7D601A), UINT32_C(0x19191107), UINT32_C(0x39FBAA22), UINT32_C(0xA82F7460), UINT32_C(0xD75B5786), UINT32_C(0x3105A6FC)}, {UINT32_C(0x932F69A6), UINT32_C(0x9673DAC4), UINT32_C(0xB57D6EE6), UINT32_C(0xF5664B25), UINT32_C(0x0A3CDD3E), UINT32_C(0x1EDAC112), UINT32_C(0x42778563), UINT32_C(0x3CF84F8C)}}, }, { {{UINT32_C(0x65DE3040), UINT32_C(0xE36FD1B7), UINT32_C(0x8AA0D3FE), UINT32_C(0x240EADEA), UINT32_C(0x7F77F804), UINT32_C(0x76971431), UINT32_C(0x591E9694), UINT32_C(0x6FCC933E)}, {UINT32_C(0x18F48742), UINT32_C(0x3218D92B), UINT32_C(0x5E1B4001), UINT32_C(0x215F13E9), UINT32_C(0x7A8D69B9), UINT32_C(0xCDF333CD), UINT32_C(0xD2FD134F), UINT32_C(0x14F159B1)}}, {{UINT32_C(0x07A50C16), UINT32_C(0x2D1228D6), UINT32_C(0x29AE42FD), UINT32_C(0x0DFD80F6), UINT32_C(0xBB8F3512), UINT32_C(0x6C18B122), UINT32_C(0x303F3DCA), UINT32_C(0x0FE61243)}, {UINT32_C(0xDA50709B), UINT32_C(0x43A29F4D), UINT32_C(0x4B92BF7B), UINT32_C(0x3FF58C08), UINT32_C(0xDFCEF797), UINT32_C(0x62DC6B41), UINT32_C(0xC7B83F32), UINT32_C(0x43F9525A)}}, {{UINT32_C(0x15F08F5B), UINT32_C(0x17EBBC9A), UINT32_C(0x8BB3E932), UINT32_C(0xBCD3B640), UINT32_C(0x510BBD36), UINT32_C(0xD46FBB9F), UINT32_C(0xCF65442B), UINT32_C(0x389ABBA8)}, {UINT32_C(0xB575545C), UINT32_C(0x3A3DAFE4), UINT32_C(0xE1D0994D), UINT32_C(0x6AB985EC), UINT32_C(0x69E1DB27), UINT32_C(0xCC2A697B), UINT32_C(0x271581DC), UINT32_C(0x0D483E18)}}, {{UINT32_C(0xC046D968), UINT32_C(0x380D4095), UINT32_C(0x55D3318B), UINT32_C(0x53039755), UINT32_C(0x91CE6FFC), UINT32_C(0x57FA7629), UINT32_C(0xA4ADB641), UINT32_C(0x0A0F2885)}, {UINT32_C(0x6E5C2909), UINT32_C(0x8B99AF1B), UINT32_C(0xB8794175), UINT32_C(0xBDFE7FFD), UINT32_C(0x795ED786), UINT32_C(0x2CFB948A), UINT32_C(0x0FD0DF66), UINT32_C(0x11FE7465)}}, {{UINT32_C(0x22E152E2), UINT32_C(0xFC2CC2BD), UINT32_C(0xE30BCEB3), UINT32_C(0xCF6AB96B), UINT32_C(0xBC89B689), UINT32_C(0xAE89C041), UINT32_C(0xE7523AB6), UINT32_C(0x6813430C)}, {UINT32_C(0x40A4FA33), UINT32_C(0x3F49E728), UINT32_C(0x857CB0C9), UINT32_C(0x025DE1B7), UINT32_C(0x11EA5EA5), UINT32_C(0x6D71465A), UINT32_C(0x46C8D7CB), UINT32_C(0x6651F7B9)}}, {{UINT32_C(0x5268098F), UINT32_C(0xD05F1DCE), UINT32_C(0x0DC75030), UINT32_C(0x891DBB68), UINT32_C(0xEA916291), UINT32_C(0xD939E428), UINT32_C(0xEA37D060), UINT32_C(0x5F8EECCC)}, {UINT32_C(0x8DC5D544), UINT32_C(0x885F1EA8), UINT32_C(0x57E7448F), UINT32_C(0xFD3B3D17), UINT32_C(0x79531DE0), UINT32_C(0x5FC791A8), UINT32_C(0x42E66DAA), UINT32_C(0x780C1AAF)}}, {{UINT32_C(0x397BB28F), UINT32_C(0x19697778), UINT32_C(0xAAA9069D), UINT32_C(0x5EC31D44), UINT32_C(0x3CA24A6F), UINT32_C(0xDC2DFEAA), UINT32_C(0x80BED770), UINT32_C(0x3F66CFCA)}, {UINT32_C(0x1A102662), UINT32_C(0x2B6B8215), UINT32_C(0xC5D34CEB), UINT32_C(0x44B4D7A4), UINT32_C(0x88AFECF2), UINT32_C(0x17E0FDE6), UINT32_C(0xCFF8D214), UINT32_C(0x0DEFA14B)}}, {{UINT32_C(0x8365CA84), UINT32_C(0x14035AA4), UINT32_C(0x197CE2B7), UINT32_C(0x309CEEF0), UINT32_C(0xED39AF37), UINT32_C(0x21305426), UINT32_C(0xD2EA583A), UINT32_C(0x10D01D11)}, {UINT32_C(0x9FA5C766), UINT32_C(0x3F2E9749), UINT32_C(0xD70549D4), UINT32_C(0x98357584), UINT32_C(0xD279946D), UINT32_C(0x8FF80803), UINT32_C(0x99DF1253), UINT32_C(0x53DBC433)}}, {{UINT32_C(0x5329F12F), UINT32_C(0x1D0D9EFA), UINT32_C(0xBE1F007F), UINT32_C(0xBC9F74CF), UINT32_C(0x18EE4DBC), UINT32_C(0xD7F2AA9A), UINT32_C(0x3A792753), UINT32_C(0x634BF4CF)}, {UINT32_C(0x2FA6255A), UINT32_C(0xD5DC72AD), UINT32_C(0xF3BC00C5), UINT32_C(0xEE69EA43), UINT32_C(0xD8147A1A), UINT32_C(0xEA930F61), UINT32_C(0xF4E9AD37), UINT32_C(0x25E1368D)}}, {{UINT32_C(0xB7C955EC), UINT32_C(0x9422AAF7), UINT32_C(0x6A74D634), UINT32_C(0x7C710761), UINT32_C(0x305EE420), UINT32_C(0x4ED89932), UINT32_C(0x2E937289), UINT32_C(0x07E42212)}, {UINT32_C(0x28566C88), UINT32_C(0x7EBB2313), UINT32_C(0xC27ED656), UINT32_C(0xC7ED9C7A), UINT32_C(0xBF14FB3B), UINT32_C(0xF77F3873), UINT32_C(0xEB957520), UINT32_C(0x447AA1E5)}}, {{UINT32_C(0xB5C5E016), UINT32_C(0x3E3CEC7E), UINT32_C(0xBDE44D26), UINT32_C(0xB33DDFF7), UINT32_C(0x66E820DD), UINT32_C(0x2056E9C7), UINT32_C(0xF8196FE2), UINT32_C(0x21A9E5D4)}, {UINT32_C(0x88040C97), UINT32_C(0x86CB0A17), UINT32_C(0xFF515D49), UINT32_C(0x18AD8AE7), UINT32_C(0x226A400A), UINT32_C(0xCB8A564A), UINT32_C(0x8B72A0D2), UINT32_C(0x6DB48979)}}, {{UINT32_C(0x6324DED2), UINT32_C(0x4365074B), UINT32_C(0xAEDAF0F8), UINT32_C(0x9EFB5CC6), UINT32_C(0xC0792B14), UINT32_C(0xCF952C3C), UINT32_C(0x97ED965E), UINT32_C(0x70B82AB9)}, {UINT32_C(0x3ACEBCE7), UINT32_C(0x931B9886), UINT32_C(0x18C2425A), UINT32_C(0xDA850491), UINT32_C(0xE499F7FB), UINT32_C(0xD88E1E27), UINT32_C(0x960981DE), UINT32_C(0x61D3F246)}}, {{UINT32_C(0x8393EB0A), UINT32_C(0x1D8EA227), UINT32_C(0x7863FB53), UINT32_C(0x9DCC23D2), UINT32_C(0xD5EBD297), UINT32_C(0x961B2337), UINT32_C(0x5BFED1E9), UINT32_C(0x0A96F8B2)}, {UINT32_C(0xFE7DD2B7), UINT32_C(0x39EA1803), UINT32_C(0xE5F7772A), UINT32_C(0x7E4817BB), UINT32_C(0xD44A41EF), UINT32_C(0x3668C5FF), UINT32_C(0xE11F8E11), UINT32_C(0x78227653)}}, {{UINT32_C(0xD024880B), UINT32_C(0x272D6933), UINT32_C(0xF236FD8A), UINT32_C(0x733C029F), UINT32_C(0x604868F0), UINT32_C(0xBA5C20BD), UINT32_C(0x321175C2), UINT32_C(0x33F211AE)}, {UINT32_C(0x9FD79FE3), UINT32_C(0xE40010FB), UINT32_C(0xA685A59F), UINT32_C(0x9C6EA1DC), UINT32_C(0x8EB9889D), UINT32_C(0x79963FFC), UINT32_C(0x5F67108D), UINT32_C(0x15434E7D)}}, {{UINT32_C(0xD68B670F), UINT32_C(0x42C14BBF), UINT32_C(0x23F1AA69), UINT32_C(0x2021AC9D), UINT32_C(0xAEA04636), UINT32_C(0xBF4C6D74), UINT32_C(0xBD1FB11D), UINT32_C(0x1E4D2F8E)}, {UINT32_C(0x37911AA6), UINT32_C(0x4B0CF0E3), UINT32_C(0x2C484507), UINT32_C(0x7542D928), UINT32_C(0x889542DC), UINT32_C(0x68836751), UINT32_C(0xFE2282A0), UINT32_C(0x05F229F7)}}, {{UINT32_C(0x409B2067), UINT32_C(0xAF269E8B), UINT32_C(0xA860F075), UINT32_C(0x6C749952), UINT32_C(0x5DF7C7F6), UINT32_C(0xCB7492DA), UINT32_C(0xE8E591E1), UINT32_C(0x2B010A7F)}, {UINT32_C(0x04D9E871), UINT32_C(0xF7446577), UINT32_C(0x5E68408E), UINT32_C(0xC2E0A2A3), UINT32_C(0xD0F0BAAD), UINT32_C(0xD512E9A6), UINT32_C(0xC6BE34A3), UINT32_C(0x3E2F73E1)}}, }, { {{UINT32_C(0x2EC65BB4), UINT32_C(0x6C466C8E), UINT32_C(0xB1FC8F92), UINT32_C(0x912FFAE5), UINT32_C(0xB50A522D), UINT32_C(0x7587BE5D), UINT32_C(0x649847CF), UINT32_C(0x15939FF7)}, {UINT32_C(0xF464794E), UINT32_C(0x69E81D63), UINT32_C(0x6D3F858E), UINT32_C(0x7BB6EEE3), UINT32_C(0x10813BBB), UINT32_C(0x24FE5C01), UINT32_C(0x6D80756C), UINT32_C(0x0C491F97)}}, {{UINT32_C(0xA5FF3510), UINT32_C(0xBAD1C256), UINT32_C(0x99C1B7B2), UINT32_C(0xF06F38A2), UINT32_C(0x049312D6), UINT32_C(0xF7C0F164), UINT32_C(0x5749B3E4), UINT32_C(0x073C5374)}, {UINT32_C(0x55211A81), UINT32_C(0xD6761480), UINT32_C(0xDFA98F45), UINT32_C(0xF34CB5DB), UINT32_C(0xB4AA4967), UINT32_C(0xAF59FA47), UINT32_C(0x8214BE48), UINT32_C(0x116935B9)}}, {{UINT32_C(0x9FE10E46), UINT32_C(0x1D86FA00), UINT32_C(0x0B5B8494), UINT32_C(0x73B8099C), UINT32_C(0xA1102BE7), UINT32_C(0x9A6EA98D), UINT32_C(0x5514CA21), UINT32_C(0x3DE1948B)}, {UINT32_C(0xD0AAAA53), UINT32_C(0x5D18ED69), UINT32_C(0x3C952B98), UINT32_C(0x17BF7DFF), UINT32_C(0x7DDBD937), UINT32_C(0xC60143FE), UINT32_C(0x6F2F10C4), UINT32_C(0x214F2F55)}}, {{UINT32_C(0x02F047D0), UINT32_C(0xB2F28695), UINT32_C(0x923F52BF), UINT32_C(0x80952DFE), UINT32_C(0xA5017C3E), UINT32_C(0x56F3306B), UINT32_C(0x052DADFB), UINT32_C(0x5DD62F07)}, {UINT32_C(0xD5274F90), UINT32_C(0xDD11592D), UINT32_C(0xE471965B), UINT32_C(0x40632FF3), UINT32_C(0x7E618430), UINT32_C(0xAD1939A8), UINT32_C(0x33F19556), UINT32_C(0x5DD9CAD2)}}, {{UINT32_C(0xC1094747), UINT32_C(0x7B0AA88C), UINT32_C(0xF6753A0C), UINT32_C(0xCFA6B95D), UINT32_C(0x2A252A4D), UINT32_C(0xE81AFADA), UINT32_C(0xD3770570), UINT32_C(0x364CAB7C)}, {UINT32_C(0xB4610A19), UINT32_C(0xE99D8252), UINT32_C(0x55ED9AD3), UINT32_C(0xB22B2FEC), UINT32_C(0xBEBE7FED), UINT32_C(0x328ACBDD), UINT32_C(0xFBEDFE84), UINT32_C(0x1D379D61)}}, {{UINT32_C(0x5EDF8C9C), UINT32_C(0xD9EFFFFA), UINT32_C(0x0CE548EC), UINT32_C(0x9BAA7181), UINT32_C(0x5FA8FEEB), UINT32_C(0xEB458AEB), UINT32_C(0x0904D841), UINT32_C(0x18C5E691)}, {UINT32_C(0x8F33D2E5), UINT32_C(0xFCEFAE28), UINT32_C(0x6FAFDA18), UINT32_C(0xB3CF853E), UINT32_C(0x427D6218), UINT32_C(0x05DE94BA), UINT32_C(0x3731D3E9), UINT32_C(0x021D8AED)}}, {{UINT32_C(0xE92719DA), UINT32_C(0x06C8C318), UINT32_C(0x1A65DFDB), UINT32_C(0x1F7CDE12), UINT32_C(0x4B672A2D), UINT32_C(0x9B4D531E), UINT32_C(0x115FAF11), UINT32_C(0x3E39CC63)}, {UINT32_C(0x0037AF60), UINT32_C(0xC9C3F339), UINT32_C(0x02B43D27), UINT32_C(0xC1C67587), UINT32_C(0xC42DF26B), UINT32_C(0x46B77CDD), UINT32_C(0xEBFA97A7), UINT32_C(0x7235F2B0)}}, {{UINT32_C(0xE898094E), UINT32_C(0xAF7FFC9A), UINT32_C(0x146A27E3), UINT32_C(0x8D18AB93), UINT32_C(0x8AEC0416), UINT32_C(0x1376B797), UINT32_C(0x8D91C25E), UINT32_C(0x746A1B1C)}, {UINT32_C(0x0EBDE2E3), UINT32_C(0x16DCCCC1), UINT32_C(0x8CE7D61E), UINT32_C(0xFE4ABD41), UINT32_C(0xE25F1551), UINT32_C(0xB9830395), UINT32_C(0xB885A943), UINT32_C(0x543493D7)}}, {{UINT32_C(0x24EBCFC0), UINT32_C(0x52C659E6), UINT32_C(0xD38367A4), UINT32_C(0x72E3CA91), UINT32_C(0x4D168F4F), UINT32_C(0xA3086AAC), UINT32_C(0x5D64207B), UINT32_C(0x656ACFEE)}, {UINT32_C(0xBA196A9E), UINT32_C(0xBE697CBA), UINT32_C(0x97DFFEC2), UINT32_C(0x6A737ACC), UINT32_C(0x54F04DBD), UINT32_C(0x393E2661), UINT32_C(0x4B0E92BD), UINT32_C(0x4FFF7C24)}}, {{UINT32_C(0x828EC659), UINT32_C(0xC709CC59), UINT32_C(0xCBDEACB3), UINT32_C(0xB275AC8C), UINT32_C(0xF7922523), UINT32_C(0xA8D08921), UINT32_C(0x400A6459), UINT32_C(0x68B92F96)}, {UINT32_C(0xDFBECB97), UINT32_C(0x45803EC2), UINT32_C(0x7515D696), UINT32_C(0x49464E05), UINT32_C(0x8F03E969), UINT32_C(0xF39CA961), UINT32_C(0x1CD7C79F), UINT32_C(0x605065A1)}}, {{UINT32_C(0x97F1A97A), UINT32_C(0xB91C03DC), UINT32_C(0x201FFB53), UINT32_C(0x2F6D50BB), UINT32_C(0x46241856), UINT32_C(0x39D67D40), UINT32_C(0x74D04805), UINT32_C(0x0A2C0256)}, {UINT32_C(0x28374A6D), UINT32_C(0xD289B94C), UINT32_C(0x10EDD6FC), UINT32_C(0x1176C73A), UINT32_C(0x56AE631E), UINT32_C(0x890E9C39), UINT32_C(0x6027F549), UINT32_C(0x30451CF1)}}, {{UINT32_C(0xDF8F4DDB), UINT32_C(0x0CB33FDC), UINT32_C(0x87FF6E63), UINT32_C(0xD9C540DE), UINT32_C(0x55A1D8E4), UINT32_C(0xD8445732), UINT32_C(0x8AC403A6), UINT32_C(0x1497403D)}, {UINT32_C(0x6A4BAAC6), UINT32_C(0xA2591C40), UINT32_C(0x48DD3E5D), UINT32_C(0xF493CF1F), UINT32_C(0xB69AF047), UINT32_C(0x7B9AE39F), UINT32_C(0x3782B110), UINT32_C(0x293123C0)}}, {{UINT32_C(0xB7A36B62), UINT32_C(0x14921836), UINT32_C(0x4CA3AA39), UINT32_C(0x5AC82430), UINT32_C(0x52F601CA), UINT32_C(0x01303AA6), UINT32_C(0x2B43BB72), UINT32_C(0x7EE1E6C7)}, {UINT32_C(0x64D44957), UINT32_C(0x7F82B37B), UINT32_C(0xDA4A6FEC), UINT32_C(0x840D0654), UINT32_C(0x0290F75D), UINT32_C(0xFC806FA1), UINT32_C(0x4C62F0E8), UINT32_C(0x3027FE4A)}}, {{UINT32_C(0xCD0D3AC0), UINT32_C(0x34E68AB5), UINT32_C(0xE9BC85BD), UINT32_C(0xE6B0B8C1), UINT32_C(0x99533831), UINT32_C(0xE00F5052), UINT32_C(0xCDC83750), UINT32_C(0x11327DA7)}, {UINT32_C(0x4656A428), UINT32_C(0x6D991DF0), UINT32_C(0x86228F26), UINT32_C(0x6A7BE349), UINT32_C(0x3019CDC5), UINT32_C(0x6BF85E3D), UINT32_C(0x576913A4), UINT32_C(0x42200D2F)}}, {{UINT32_C(0x707B940F), UINT32_C(0x420D9259), UINT32_C(0x3C5E39BB), UINT32_C(0x1BB1FFE1), UINT32_C(0xE40D018E), UINT32_C(0x83D6BA36), UINT32_C(0x044EC576), UINT32_C(0x139BD842)}, {UINT32_C(0xC6DE63E8), UINT32_C(0x3C79F8D2), UINT32_C(0x96F1FB0B), UINT32_C(0x49150B1D), UINT32_C(0x1358A13B), UINT32_C(0x66616053), UINT32_C(0xD5DDFD9F), UINT32_C(0x187CA3CF)}}, {{UINT32_C(0x8D5AEE84), UINT32_C(0x0675370F), UINT32_C(0xDC269114), UINT32_C(0x30AA7D65), UINT32_C(0x5AFC6DC1), UINT32_C(0x295F7FE8), UINT32_C(0x55674339), UINT32_C(0x49452029)}, {UINT32_C(0xA6F209EC), UINT32_C(0x7EB1926B), UINT32_C(0xDC72C3E3), UINT32_C(0x5232B9D1), UINT32_C(0xAB52141B), UINT32_C(0xCD788D79), UINT32_C(0xFDD9611F), UINT32_C(0x3EB561BE)}}, }, { {{UINT32_C(0xE22241AD), UINT32_C(0x09DB342C), UINT32_C(0x2A566653), UINT32_C(0x2EAB852F), UINT32_C(0xCA6E59F3), UINT32_C(0x970843ED), UINT32_C(0xA18C2D89), UINT32_C(0x6490013E)}, {UINT32_C(0xC7A691CC), UINT32_C(0x52293350), UINT32_C(0xB2079F14), UINT32_C(0x6544B49D), UINT32_C(0x52DCF090), UINT32_C(0xC49C5598), UINT32_C(0x8817A2C7), UINT32_C(0x4069B6FC)}}, {{UINT32_C(0xC86B40F4), UINT32_C(0x0E4A4B0C), UINT32_C(0x51F6F853), UINT32_C(0x2B5350E1), UINT32_C(0x1033BEC4), UINT32_C(0xDE26FDE2), UINT32_C(0xC0E9B971), UINT32_C(0x4DE9D2E7)}, {UINT32_C(0xD315AD57), UINT32_C(0x716605FD), UINT32_C(0x392B101A), UINT32_C(0x5627D732), UINT32_C(0x81A9F40A), UINT32_C(0x628EDFC6), UINT32_C(0x5AB9C99D), UINT32_C(0x4BD2A96C)}}, {{UINT32_C(0xBFBD288A), UINT32_C(0x2C8DF2A1), UINT32_C(0xF4CF7C09), UINT32_C(0x260C4F1E), UINT32_C(0x90E796CB), UINT32_C(0x88A26186), UINT32_C(0x323E0702), UINT32_C(0x105ACC3A)}, {UINT32_C(0x667664CF), UINT32_C(0xA8ADA467), UINT32_C(0x3B518622), UINT32_C(0x41144C1B), UINT32_C(0xD8B99FE1), UINT32_C(0x4A532B87), UINT32_C(0x2289C308), UINT32_C(0x4A51C289)}}, {{UINT32_C(0x1D6F6880), UINT32_C(0x201DDA61), UINT32_C(0x62029898), UINT32_C(0x47A964D4), UINT32_C(0x426C8CA5), UINT32_C(0xE44E2EEE), UINT32_C(0x09625DBA), UINT32_C(0x02A51821)}, {UINT32_C(0xB45B3DFB), UINT32_C(0x170C626E), UINT32_C(0x5C8343A9), UINT32_C(0xFC7F1F71), UINT32_C(0xE549F040), UINT32_C(0xE6CF246F), UINT32_C(0x2F903ACE), UINT32_C(0x4ACF60AE)}}, {{UINT32_C(0x81C807EC), UINT32_C(0x91715352), UINT32_C(0x47174A58), UINT32_C(0x72AC60C3), UINT32_C(0xA0F12F61), UINT32_C(0xAD62D06F), UINT32_C(0xAA899C0D), UINT32_C(0x325C2792)}, {UINT32_C(0x9D8BA267), UINT32_C(0x53A1E392), UINT32_C(0xCDACCB05), UINT32_C(0x5DC088A5), UINT32_C(0x5025CB69), UINT32_C(0x5BB9127F), UINT32_C(0x69214616), UINT32_C(0x25D2B42E)}}, {{UINT32_C(0xDDB55121), UINT32_C(0x4DE5D58A), UINT32_C(0x84DE0677), UINT32_C(0x688AA2F5), UINT32_C(0x63AA25E0), UINT32_C(0xF7925A39), UINT32_C(0x85D4DEA5), UINT32_C(0x4FB42FC7)}, {UINT32_C(0x8F134390), UINT32_C(0x957B933B), UINT32_C(0x4B9BF8C2), UINT32_C(0xB360DD2C), UINT32_C(0xFFFF96CD), UINT32_C(0x45E6767F), UINT32_C(0x1E01D5C3), UINT32_C(0x26D0A6A9)}}, {{UINT32_C(0x5A0A98EA), UINT32_C(0xC7FC5714), UINT32_C(0xE7535AF6), UINT32_C(0xDBB06F30), UINT32_C(0xDF4ACD0D), UINT32_C(0x555B22E3), UINT32_C(0x2EFD2FBE), UINT32_C(0x3A011AAF)}, {UINT32_C(0xE9166B20), UINT32_C(0x341C7733), UINT32_C(0xFB19590A), UINT32_C(0x84619E8E), UINT32_C(0x10574C96), UINT32_C(0x8EF989FD), UINT32_C(0x0F55F9A2), UINT32_C(0x61ACFAAE)}}, {{UINT32_C(0x6DEAB094), UINT32_C(0x8C8A33F2), UINT32_C(0x96022EBC), UINT32_C(0x4A8E5D9F), UINT32_C(0x7DDA92E8), UINT32_C(0xA10DF82C), UINT32_C(0xD1CF3815), UINT32_C(0x33A19462)}, {UINT32_C(0xA489D67F), UINT32_C(0xE3FF8E43), UINT32_C(0x225064AA), UINT32_C(0xD4B6136F), UINT32_C(0x92F5E662), UINT32_C(0xE1721D2A), UINT32_C(0xA90A33C6), UINT32_C(0x4C4F03D7)}}, {{UINT32_C(0xA3463B4A), UINT32_C(0x70885B35), UINT32_C(0xDF9D0194), UINT32_C(0x974BC40E), UINT32_C(0x273957F4), UINT32_C(0x1AF71E18), UINT32_C(0x9900CB0D), UINT32_C(0x58EF684B)}, {UINT32_C(0x20A49A4A), UINT32_C(0xB09970C8), UINT32_C(0x42067458), UINT32_C(0x3F28403F), UINT32_C(0xBD7D1AD5), UINT32_C(0x153FF2C4), UINT32_C(0xE97A90F7), UINT32_C(0x7912CC2E)}}, {{UINT32_C(0x8F034D9F), UINT32_C(0xF653DF59), UINT32_C(0x1C409CCF), UINT32_C(0xCA167177), UINT32_C(0x175F3583), UINT32_C(0x21F47005), UINT32_C(0xFAAFB66F), UINT32_C(0x13B8A94B)}, {UINT32_C(0x96052C8D), UINT32_C(0x64534EE3), UINT32_C(0x8D674024), UINT32_C(0x09304DD1), UINT32_C(0x0D7A7E2A), UINT32_C(0xEB468AC3), UINT32_C(0xCD62052C), UINT32_C(0x40347256)}}, {{UINT32_C(0xFFF11C0E), UINT32_C(0x0F089165), UINT32_C(0x8D69A45C), UINT32_C(0x383562C9), UINT32_C(0x3125FE61), UINT32_C(0x7AB3EF9D), UINT32_C(0xE0735F3A), UINT32_C(0x32C042BC)}, {UINT32_C(0x4E268D91), UINT32_C(0x420077C8), UINT32_C(0x44695B4F), UINT32_C(0x7FB42082), UINT32_C(0x448A133E), UINT32_C(0xFA83216F), UINT32_C(0x93062EB3), UINT32_C(0x1C660607)}}, {{UINT32_C(0xEF9E04DE), UINT32_C(0xA0FCBACA), UINT32_C(0x5B86F69A), UINT32_C(0xAEF9EECB), UINT32_C(0xC39D4C99), UINT32_C(0x73D2E95F), UINT32_C(0x923A5BA8), UINT32_C(0x098C74F7)}, {UINT32_C(0x4F68DECF), UINT32_C(0x5B8C95C8), UINT32_C(0x58976551), UINT32_C(0xCFF2E101), UINT32_C(0xBE5CAF91), UINT32_C(0x5032AE48), UINT32_C(0xE09BC8AE), UINT32_C(0x5CCB9008)}}, {{UINT32_C(0x3714D3BF), UINT32_C(0x41A38F20), UINT32_C(0x17366520), UINT32_C(0x24136533), UINT32_C(0xFAE17B01), UINT32_C(0xF12F314C), UINT32_C(0xFC9AD43B), UINT32_C(0x4AA0C969)}, {UINT32_C(0x8BBAC026), UINT32_C(0xD8AB5F72), UINT32_C(0x526992DC), UINT32_C(0x35128269), UINT32_C(0xD19880AA), UINT32_C(0xA2EF6E44), UINT32_C(0xDBF47628), UINT32_C(0x28BB3623)}}, {{UINT32_C(0x3BA25C35), UINT32_C(0x294742BA), UINT32_C(0x061555B7), UINT32_C(0x39D3BC9B), UINT32_C(0xDE6EA1A0), UINT32_C(0x944E3ABC), UINT32_C(0x57EBD394), UINT32_C(0x4FDC6415)}, {UINT32_C(0xE981E649), UINT32_C(0xB615C1DA), UINT32_C(0x8BE3C95F), UINT32_C(0xAF7EDB34), UINT32_C(0x71F7221F), UINT32_C(0x38573AE8), UINT32_C(0x668CF414), UINT32_C(0x1B30FF04)}}, {{UINT32_C(0xA57A9A4E), UINT32_C(0x48EFF6A2), UINT32_C(0x74A59C19), UINT32_C(0x04BA2F73), UINT32_C(0x6779C5DA), UINT32_C(0x5FDE389D), UINT32_C(0x6612F160), UINT32_C(0x258E2B24)}, {UINT32_C(0x6D116D41), UINT32_C(0xCE8D7A0B), UINT32_C(0xEE2706C8), UINT32_C(0xAF660436), UINT32_C(0xF81D6398), UINT32_C(0xFFAD6FE9), UINT32_C(0x14BA128A), UINT32_C(0x4FE5EC54)}}, {{UINT32_C(0xBD4B886C), UINT32_C(0x7D5E8299), UINT32_C(0xDB0DB148), UINT32_C(0x5403A46E), UINT32_C(0x76A808D7), UINT32_C(0x32F49FC0), UINT32_C(0xD3B9A641), UINT32_C(0x6D483FD7)}, {UINT32_C(0x3952C70F), UINT32_C(0x731DF122), UINT32_C(0xCB5E6081), UINT32_C(0xB5CABAC1), UINT32_C(0x7AFA8F59), UINT32_C(0x12FA297D), UINT32_C(0x6AC91952), UINT32_C(0x3272360A)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 6 * ASSERT: a = -3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(t0, X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(t1, Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_square(t2, Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t3, X, Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, t3, t3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t4, Y, Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, X, Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, b, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(X3, X3, t3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, t2, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t2, t2, t3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, b, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Z3, Z3, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Z3, Z3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, t3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, t0, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t0, t3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t0, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t0, t4, t4); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, t0, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, Z3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed.op3 * https://eprint.iacr.org/2015/1060 Alg 5 * ASSERT: a = -3 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t4, Y2, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, t4, Y1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, X2, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, Y3, X1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, b, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, Z1, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t2, t1, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, t1); /* if P is inf, throw all that away and take Q */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(R->X, nz, Q->X, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 4 * ASSERT: a = -3 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t2, Z1, Z2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t3, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t4, Y1, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t5, Y2, Z2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t5, t1, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, X1, Z1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, X2, Z2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(X3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, t0, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, b, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, t2, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t2, t1, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_add(Z3, Z3, t1); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[32], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 32) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[52], const unsigned char in[32]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 51; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[257], const unsigned char in[32]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 257; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[32], const unsigned char b[32], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[257] = {0}; int8_t bnaf[257] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 256; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[51] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 50; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[32]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 1; i >= 0; i--) { for (j = 0; i != 1 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 27; j++) { if (j * 2 + i > 51) continue; d = rnaf[j * 2 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz( lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[32], unsigned char outy[32], const unsigned char a[32], const unsigned char b[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery(P.Y, P.Y); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_montgomery(P.Y, P.Y); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_B_ParamSet_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[32] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_GostR3410_2001_CryptoPro_B_ParamSet( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(n, b_n, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_GostR3410_2001_CryptoPro_B_ParamSet(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_GostR3410_2001_CryptoPro_B_ParamSet(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 32) != 32) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #endif /* __SIZEOF_INT128__ */ libengine-gost-openssl-3.0.2/ecp_id_GostR3410_2001_CryptoPro_C_ParamSet.c000066400000000000000000031543061446070765000256660ustar00rootroot00000000000000/* Autogenerated: ECCKiila https://gitlab.com/nisec/ecckiila */ /*- * MIT License * * Copyright (c) 2020 Luis Rivera-Zamarripa, JesÃēs-Javier Chi-Domínguez, Billy Bob Brumley * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ #if defined(__SIZEOF_INT128__) && !defined(PEDANTIC) #include #include #define LIMB_BITS 64 #define LIMB_CNT 4 /* Field elements */ typedef uint64_t fe_t[LIMB_CNT]; typedef uint64_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_GOSTR3410_2001_CRYPTOPRO_C_PARAMSET_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: word_by_word_montgomery --static --use-value-barrier id_GostR3410_2001_CryptoPro_C_ParamSet 64 0x9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D759B */ /* curve description: id_GostR3410_2001_CryptoPro_C_ParamSet */ /* machine_wordsize = 64 (from "64") */ /* requested operations: (all) */ /* m = 0x9b9f605f5a858107ab1ec85e6b41c8aacf846e86789051d37998f7b9022d759b (from "0x9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D759B") */ /* */ /* NOTE: In addition to the bounds specified above each function, all */ /* functions synthesized for this Montgomery arithmetic require the */ /* input to be strictly less than the prime modulus (m), and also */ /* require the input to be in the unique saturated representation. */ /* All functions also ensure that these two properties are true of */ /* return values. */ /* */ /* Computed values: */ /* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ #include typedef unsigned char fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1; typedef signed char fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int1; typedef signed __int128 fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int128; typedef unsigned __int128 fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint128; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_GOSTR3410_2001_CRYPTOPRO_C_PARAMSET_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint64_t fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_value_barrier_u64(uint64_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_value_barrier_u64(x) (x) #endif /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^64 * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint128 x1; uint64_t x2; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x3; x1 = ((arg1 + (fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint128)arg2) + arg3); x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); x3 = (fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1)(x1 >> 64); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^64 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int128 x1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int1 x2; uint64_t x3; x1 = ((arg2 - (fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int128)arg1) - arg3); x2 = (fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int1)(x1 >> 64); x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); *out1 = x3; *out2 = (fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1)(0x0 - x2); } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64 is a multiplication, returning the full double-width result. * Postconditions: * out1 = (arg1 * arg2) mod 2^64 * out2 = ⌊arg1 * arg2 / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0xffffffffffffffff] * arg2: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( uint64_t *out1, uint64_t *out2, uint64_t arg1, uint64_t arg2) { fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint128 x1; uint64_t x2; uint64_t x3; x1 = ((fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint128)arg1 * arg2); x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); x3 = (uint64_t)(x1 >> 64); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64( uint64_t *out1, fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x1; uint64_t x2; uint64_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); x3 = ((fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_value_barrier_u64(x2) & arg3) | (fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_value_barrier_u64((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul multiplies two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul( uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x14; uint64_t x15; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x16; uint64_t x17; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x31; uint64_t x32; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x33; uint64_t x34; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x35; uint64_t x36; uint64_t x37; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x38; uint64_t x39; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x40; uint64_t x41; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x42; uint64_t x43; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x44; uint64_t x45; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x56; uint64_t x57; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x58; uint64_t x59; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x60; uint64_t x61; uint64_t x62; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x63; uint64_t x64; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x65; uint64_t x66; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x67; uint64_t x68; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x69; uint64_t x70; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x83; uint64_t x84; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x85; uint64_t x86; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x87; uint64_t x88; uint64_t x89; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x90; uint64_t x91; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x92; uint64_t x93; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x94; uint64_t x95; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x96; uint64_t x97; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x109; uint64_t x110; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x111; uint64_t x112; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x113; uint64_t x114; uint64_t x115; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x116; uint64_t x117; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x118; uint64_t x119; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x120; uint64_t x121; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x122; uint64_t x123; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; uint64_t x129; uint64_t x130; uint64_t x131; uint64_t x132; uint64_t x133; uint64_t x134; uint64_t x135; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x136; uint64_t x137; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x138; uint64_t x139; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x140; uint64_t x141; uint64_t x142; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x143; uint64_t x144; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x145; uint64_t x146; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x147; uint64_t x148; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x149; uint64_t x150; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x151; uint64_t x152; uint64_t x153; uint64_t x154; uint64_t x155; uint64_t x156; uint64_t x157; uint64_t x158; uint64_t x159; uint64_t x160; uint64_t x161; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x162; uint64_t x163; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x164; uint64_t x165; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x166; uint64_t x167; uint64_t x168; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x169; uint64_t x170; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x171; uint64_t x172; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x173; uint64_t x174; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x175; uint64_t x176; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x177; uint64_t x178; uint64_t x179; uint64_t x180; uint64_t x181; uint64_t x182; uint64_t x183; uint64_t x184; uint64_t x185; uint64_t x186; uint64_t x187; uint64_t x188; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x189; uint64_t x190; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x191; uint64_t x192; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x193; uint64_t x194; uint64_t x195; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x196; uint64_t x197; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x198; uint64_t x199; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x200; uint64_t x201; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x202; uint64_t x203; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x204; uint64_t x205; uint64_t x206; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x207; uint64_t x208; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x209; uint64_t x210; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x211; uint64_t x212; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x213; uint64_t x214; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x215; uint64_t x216; uint64_t x217; uint64_t x218; uint64_t x219; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x5, &x6, x4, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x7, &x8, x4, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x9, &x10, x4, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x11, &x12, x4, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x13, &x14, 0x0, x12, x9); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x15, &x16, x14, x10, x7); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x17, &x18, x16, x8, x5); x19 = (x18 + x6); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x20, &x21, x11, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x22, &x23, x20, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x24, &x25, x20, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x26, &x27, x20, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x28, &x29, x20, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x30, &x31, 0x0, x29, x26); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x32, &x33, x31, x27, x24); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x34, &x35, x33, x25, x22); x36 = (x35 + x23); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x37, &x38, 0x0, x11, x28); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x39, &x40, x38, x13, x30); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x41, &x42, x40, x15, x32); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x43, &x44, x42, x17, x34); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x45, &x46, x44, x19, x36); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x47, &x48, x1, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x49, &x50, x1, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x51, &x52, x1, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x53, &x54, x1, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x55, &x56, 0x0, x54, x51); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x57, &x58, x56, x52, x49); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x59, &x60, x58, x50, x47); x61 = (x60 + x48); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x62, &x63, 0x0, x39, x53); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x64, &x65, x63, x41, x55); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x66, &x67, x65, x43, x57); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x68, &x69, x67, x45, x59); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x70, &x71, x69, x46, x61); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x72, &x73, x62, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x74, &x75, x72, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x76, &x77, x72, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x78, &x79, x72, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x80, &x81, x72, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x82, &x83, 0x0, x81, x78); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x84, &x85, x83, x79, x76); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x86, &x87, x85, x77, x74); x88 = (x87 + x75); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x89, &x90, 0x0, x62, x80); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x91, &x92, x90, x64, x82); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x93, &x94, x92, x66, x84); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x95, &x96, x94, x68, x86); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x97, &x98, x96, x70, x88); x99 = ((uint64_t)x98 + x71); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x100, &x101, x2, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x102, &x103, x2, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x104, &x105, x2, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x106, &x107, x2, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x108, &x109, 0x0, x107, x104); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x110, &x111, x109, x105, x102); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x112, &x113, x111, x103, x100); x114 = (x113 + x101); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x115, &x116, 0x0, x91, x106); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x117, &x118, x116, x93, x108); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x119, &x120, x118, x95, x110); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x121, &x122, x120, x97, x112); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x123, &x124, x122, x99, x114); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x125, &x126, x115, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x127, &x128, x125, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x129, &x130, x125, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x131, &x132, x125, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x133, &x134, x125, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x135, &x136, 0x0, x134, x131); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x137, &x138, x136, x132, x129); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x139, &x140, x138, x130, x127); x141 = (x140 + x128); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x142, &x143, 0x0, x115, x133); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x144, &x145, x143, x117, x135); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x146, &x147, x145, x119, x137); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x148, &x149, x147, x121, x139); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x150, &x151, x149, x123, x141); x152 = ((uint64_t)x151 + x124); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x153, &x154, x3, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x155, &x156, x3, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x157, &x158, x3, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x159, &x160, x3, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x161, &x162, 0x0, x160, x157); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x163, &x164, x162, x158, x155); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x165, &x166, x164, x156, x153); x167 = (x166 + x154); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x168, &x169, 0x0, x144, x159); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x170, &x171, x169, x146, x161); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x172, &x173, x171, x148, x163); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x174, &x175, x173, x150, x165); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x176, &x177, x175, x152, x167); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x178, &x179, x168, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x180, &x181, x178, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x182, &x183, x178, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x184, &x185, x178, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x186, &x187, x178, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x188, &x189, 0x0, x187, x184); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x190, &x191, x189, x185, x182); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x192, &x193, x191, x183, x180); x194 = (x193 + x181); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x195, &x196, 0x0, x168, x186); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x197, &x198, x196, x170, x188); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x199, &x200, x198, x172, x190); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x201, &x202, x200, x174, x192); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x203, &x204, x202, x176, x194); x205 = ((uint64_t)x204 + x177); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x206, &x207, 0x0, x197, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x208, &x209, x207, x199, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x210, &x211, x209, x201, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x212, &x213, x211, x203, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64(&x214, &x215, x213, x205, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x216, x215, x206, x197); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x217, x215, x208, x199); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x218, x215, x210, x201); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x219, x215, x212, x203); out1[0] = x216; out1[1] = x217; out1[2] = x218; out1[3] = x219; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square squares a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square( uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x14; uint64_t x15; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x16; uint64_t x17; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x31; uint64_t x32; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x33; uint64_t x34; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x35; uint64_t x36; uint64_t x37; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x38; uint64_t x39; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x40; uint64_t x41; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x42; uint64_t x43; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x44; uint64_t x45; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x56; uint64_t x57; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x58; uint64_t x59; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x60; uint64_t x61; uint64_t x62; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x63; uint64_t x64; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x65; uint64_t x66; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x67; uint64_t x68; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x69; uint64_t x70; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x83; uint64_t x84; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x85; uint64_t x86; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x87; uint64_t x88; uint64_t x89; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x90; uint64_t x91; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x92; uint64_t x93; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x94; uint64_t x95; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x96; uint64_t x97; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x109; uint64_t x110; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x111; uint64_t x112; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x113; uint64_t x114; uint64_t x115; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x116; uint64_t x117; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x118; uint64_t x119; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x120; uint64_t x121; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x122; uint64_t x123; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; uint64_t x129; uint64_t x130; uint64_t x131; uint64_t x132; uint64_t x133; uint64_t x134; uint64_t x135; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x136; uint64_t x137; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x138; uint64_t x139; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x140; uint64_t x141; uint64_t x142; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x143; uint64_t x144; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x145; uint64_t x146; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x147; uint64_t x148; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x149; uint64_t x150; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x151; uint64_t x152; uint64_t x153; uint64_t x154; uint64_t x155; uint64_t x156; uint64_t x157; uint64_t x158; uint64_t x159; uint64_t x160; uint64_t x161; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x162; uint64_t x163; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x164; uint64_t x165; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x166; uint64_t x167; uint64_t x168; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x169; uint64_t x170; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x171; uint64_t x172; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x173; uint64_t x174; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x175; uint64_t x176; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x177; uint64_t x178; uint64_t x179; uint64_t x180; uint64_t x181; uint64_t x182; uint64_t x183; uint64_t x184; uint64_t x185; uint64_t x186; uint64_t x187; uint64_t x188; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x189; uint64_t x190; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x191; uint64_t x192; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x193; uint64_t x194; uint64_t x195; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x196; uint64_t x197; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x198; uint64_t x199; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x200; uint64_t x201; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x202; uint64_t x203; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x204; uint64_t x205; uint64_t x206; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x207; uint64_t x208; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x209; uint64_t x210; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x211; uint64_t x212; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x213; uint64_t x214; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x215; uint64_t x216; uint64_t x217; uint64_t x218; uint64_t x219; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x5, &x6, x4, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x7, &x8, x4, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x9, &x10, x4, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x11, &x12, x4, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x13, &x14, 0x0, x12, x9); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x15, &x16, x14, x10, x7); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x17, &x18, x16, x8, x5); x19 = (x18 + x6); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x20, &x21, x11, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x22, &x23, x20, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x24, &x25, x20, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x26, &x27, x20, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x28, &x29, x20, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x30, &x31, 0x0, x29, x26); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x32, &x33, x31, x27, x24); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x34, &x35, x33, x25, x22); x36 = (x35 + x23); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x37, &x38, 0x0, x11, x28); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x39, &x40, x38, x13, x30); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x41, &x42, x40, x15, x32); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x43, &x44, x42, x17, x34); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x45, &x46, x44, x19, x36); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x47, &x48, x1, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x49, &x50, x1, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x51, &x52, x1, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x53, &x54, x1, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x55, &x56, 0x0, x54, x51); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x57, &x58, x56, x52, x49); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x59, &x60, x58, x50, x47); x61 = (x60 + x48); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x62, &x63, 0x0, x39, x53); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x64, &x65, x63, x41, x55); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x66, &x67, x65, x43, x57); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x68, &x69, x67, x45, x59); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x70, &x71, x69, x46, x61); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x72, &x73, x62, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x74, &x75, x72, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x76, &x77, x72, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x78, &x79, x72, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x80, &x81, x72, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x82, &x83, 0x0, x81, x78); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x84, &x85, x83, x79, x76); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x86, &x87, x85, x77, x74); x88 = (x87 + x75); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x89, &x90, 0x0, x62, x80); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x91, &x92, x90, x64, x82); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x93, &x94, x92, x66, x84); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x95, &x96, x94, x68, x86); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x97, &x98, x96, x70, x88); x99 = ((uint64_t)x98 + x71); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x100, &x101, x2, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x102, &x103, x2, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x104, &x105, x2, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x106, &x107, x2, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x108, &x109, 0x0, x107, x104); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x110, &x111, x109, x105, x102); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x112, &x113, x111, x103, x100); x114 = (x113 + x101); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x115, &x116, 0x0, x91, x106); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x117, &x118, x116, x93, x108); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x119, &x120, x118, x95, x110); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x121, &x122, x120, x97, x112); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x123, &x124, x122, x99, x114); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x125, &x126, x115, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x127, &x128, x125, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x129, &x130, x125, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x131, &x132, x125, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x133, &x134, x125, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x135, &x136, 0x0, x134, x131); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x137, &x138, x136, x132, x129); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x139, &x140, x138, x130, x127); x141 = (x140 + x128); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x142, &x143, 0x0, x115, x133); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x144, &x145, x143, x117, x135); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x146, &x147, x145, x119, x137); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x148, &x149, x147, x121, x139); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x150, &x151, x149, x123, x141); x152 = ((uint64_t)x151 + x124); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x153, &x154, x3, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x155, &x156, x3, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x157, &x158, x3, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64(&x159, &x160, x3, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x161, &x162, 0x0, x160, x157); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x163, &x164, x162, x158, x155); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x165, &x166, x164, x156, x153); x167 = (x166 + x154); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x168, &x169, 0x0, x144, x159); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x170, &x171, x169, x146, x161); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x172, &x173, x171, x148, x163); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x174, &x175, x173, x150, x165); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x176, &x177, x175, x152, x167); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x178, &x179, x168, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x180, &x181, x178, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x182, &x183, x178, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x184, &x185, x178, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x186, &x187, x178, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x188, &x189, 0x0, x187, x184); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x190, &x191, x189, x185, x182); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x192, &x193, x191, x183, x180); x194 = (x193 + x181); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x195, &x196, 0x0, x168, x186); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x197, &x198, x196, x170, x188); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x199, &x200, x198, x172, x190); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x201, &x202, x200, x174, x192); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x203, &x204, x202, x176, x194); x205 = ((uint64_t)x204 + x177); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x206, &x207, 0x0, x197, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x208, &x209, x207, x199, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x210, &x211, x209, x201, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x212, &x213, x211, x203, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64(&x214, &x215, x213, x205, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x216, x215, x206, x197); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x217, x215, x208, x199); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x218, x215, x210, x201); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x219, x215, x212, x203); out1[0] = x216; out1[1] = x217; out1[2] = x218; out1[3] = x219; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add adds two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add( uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x2; uint64_t x3; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x4; uint64_t x5; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x6; uint64_t x7; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x8; uint64_t x9; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x10; uint64_t x11; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x12; uint64_t x13; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x14; uint64_t x15; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x16; uint64_t x17; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x9, &x10, 0x0, x1, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x11, &x12, x10, x3, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x13, &x14, x12, x5, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x15, &x16, x14, x7, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64(&x17, &x18, x16, x8, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x19, x18, x9, x1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x20, x18, x11, x3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x21, x18, x13, x5); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x22, x18, x15, x7); out1[0] = x19; out1[1] = x20; out1[2] = x21; out1[3] = x22; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub subtracts two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub( uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x2; uint64_t x3; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x4; uint64_t x5; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x6; uint64_t x7; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x8; uint64_t x9; uint64_t x10; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x11; uint64_t x12; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x13; uint64_t x14; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x15; uint64_t x16; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x17; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64( &x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x10, &x11, 0x0, x1, (x9 & UINT64_C(0x7998f7b9022d759b))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x12, &x13, x11, x3, (x9 & UINT64_C(0xcf846e86789051d3))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x14, &x15, x13, x5, (x9 & UINT64_C(0xab1ec85e6b41c8aa))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x16, &x17, x15, x7, (x9 & UINT64_C(0x9b9f605f5a858107))); out1[0] = x10; out1[1] = x12; out1[2] = x14; out1[3] = x16; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp negates a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp( uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x2; uint64_t x3; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x4; uint64_t x5; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x6; uint64_t x7; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x8; uint64_t x9; uint64_t x10; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x11; uint64_t x12; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x13; uint64_t x14; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x15; uint64_t x16; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x17; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64( &x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x10, &x11, 0x0, x1, (x9 & UINT64_C(0x7998f7b9022d759b))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x12, &x13, x11, x3, (x9 & UINT64_C(0xcf846e86789051d3))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x14, &x15, x13, x5, (x9 & UINT64_C(0xab1ec85e6b41c8aa))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x16, &x17, x15, x7, (x9 & UINT64_C(0x9b9f605f5a858107))); out1[0] = x10; out1[1] = x12; out1[2] = x14; out1[3] = x16; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery translates a field element out of the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval out1 mod m = (eval arg1 * ((2^64)âģš mod m)^4) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery( uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x13; uint64_t x14; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x15; uint64_t x16; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x17; uint64_t x18; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x19; uint64_t x20; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x21; uint64_t x22; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x23; uint64_t x24; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x25; uint64_t x26; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x27; uint64_t x28; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x29; uint64_t x30; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x31; uint64_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x43; uint64_t x44; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x45; uint64_t x46; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x47; uint64_t x48; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x49; uint64_t x50; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x51; uint64_t x52; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x53; uint64_t x54; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x55; uint64_t x56; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x57; uint64_t x58; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x59; uint64_t x60; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x73; uint64_t x74; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x75; uint64_t x76; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x77; uint64_t x78; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x79; uint64_t x80; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x81; uint64_t x82; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x83; uint64_t x84; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x85; uint64_t x86; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x87; uint64_t x88; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x89; uint64_t x90; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x103; uint64_t x104; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x105; uint64_t x106; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x107; uint64_t x108; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x109; uint64_t x110; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x111; uint64_t x112; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x113; uint64_t x114; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x115; uint64_t x116; uint64_t x117; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x118; uint64_t x119; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x120; uint64_t x121; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x122; uint64_t x123; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x124; uint64_t x125; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x126; uint64_t x127; uint64_t x128; uint64_t x129; uint64_t x130; x1 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x2, &x3, x1, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x4, &x5, x2, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x6, &x7, x2, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x8, &x9, x2, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x10, &x11, x2, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x12, &x13, 0x0, x11, x8); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x14, &x15, x13, x9, x6); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x16, &x17, x15, x7, x4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x18, &x19, 0x0, x1, x10); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x20, &x21, x19, 0x0, x12); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x22, &x23, x21, 0x0, x14); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x24, &x25, x23, 0x0, x16); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x26, &x27, 0x0, x20, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x28, &x29, x27, x22, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x30, &x31, x29, x24, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x32, &x33, x26, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x34, &x35, x32, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x36, &x37, x32, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x38, &x39, x32, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x40, &x41, x32, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x42, &x43, 0x0, x41, x38); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x44, &x45, x43, x39, x36); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x46, &x47, x45, x37, x34); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x48, &x49, 0x0, x26, x40); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x50, &x51, x49, x28, x42); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x52, &x53, x51, x30, x44); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x54, &x55, x53, (x31 + (x25 + (x17 + x5))), x46); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x56, &x57, 0x0, x50, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x58, &x59, x57, x52, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x60, &x61, x59, x54, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x62, &x63, x56, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x64, &x65, x62, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x66, &x67, x62, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x68, &x69, x62, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x70, &x71, x62, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x72, &x73, 0x0, x71, x68); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x74, &x75, x73, x69, x66); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x76, &x77, x75, x67, x64); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x78, &x79, 0x0, x56, x70); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x80, &x81, x79, x58, x72); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x82, &x83, x81, x60, x74); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x84, &x85, x83, (x61 + (x55 + (x47 + x35))), x76); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x86, &x87, 0x0, x80, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x88, &x89, x87, x82, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x90, &x91, x89, x84, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x92, &x93, x86, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x94, &x95, x92, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x96, &x97, x92, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x98, &x99, x92, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x100, &x101, x92, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x102, &x103, 0x0, x101, x98); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x104, &x105, x103, x99, x96); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x106, &x107, x105, x97, x94); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x108, &x109, 0x0, x86, x100); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x110, &x111, x109, x88, x102); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x112, &x113, x111, x90, x104); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x114, &x115, x113, (x91 + (x85 + (x77 + x65))), x106); x116 = (x115 + (x107 + x95)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x117, &x118, 0x0, x110, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x119, &x120, x118, x112, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x121, &x122, x120, x114, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x123, &x124, x122, x116, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64(&x125, &x126, x124, 0x0, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x127, x126, x117, x110); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x128, x126, x119, x112); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x129, x126, x121, x114); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x130, x126, x123, x116); out1[0] = x127; out1[1] = x128; out1[2] = x129; out1[3] = x130; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery translates a field element into the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery( uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x14; uint64_t x15; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x16; uint64_t x17; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x30; uint64_t x31; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x32; uint64_t x33; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x34; uint64_t x35; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x36; uint64_t x37; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x38; uint64_t x39; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x40; uint64_t x41; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x42; uint64_t x43; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x54; uint64_t x55; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x56; uint64_t x57; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x58; uint64_t x59; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x60; uint64_t x61; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x62; uint64_t x63; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x64; uint64_t x65; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x78; uint64_t x79; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x80; uint64_t x81; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x82; uint64_t x83; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x84; uint64_t x85; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x86; uint64_t x87; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x88; uint64_t x89; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x90; uint64_t x91; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x102; uint64_t x103; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x104; uint64_t x105; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x106; uint64_t x107; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x108; uint64_t x109; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x110; uint64_t x111; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x112; uint64_t x113; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x126; uint64_t x127; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x128; uint64_t x129; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x130; uint64_t x131; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x132; uint64_t x133; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x134; uint64_t x135; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x136; uint64_t x137; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x138; uint64_t x139; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x140; uint64_t x141; uint64_t x142; uint64_t x143; uint64_t x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x150; uint64_t x151; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x152; uint64_t x153; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x154; uint64_t x155; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x156; uint64_t x157; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x158; uint64_t x159; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x160; uint64_t x161; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x162; uint64_t x163; uint64_t x164; uint64_t x165; uint64_t x166; uint64_t x167; uint64_t x168; uint64_t x169; uint64_t x170; uint64_t x171; uint64_t x172; uint64_t x173; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x174; uint64_t x175; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x176; uint64_t x177; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x178; uint64_t x179; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x180; uint64_t x181; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x182; uint64_t x183; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x184; uint64_t x185; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x186; uint64_t x187; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x188; uint64_t x189; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x190; uint64_t x191; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x192; uint64_t x193; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x194; uint64_t x195; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x196; uint64_t x197; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x198; uint64_t x199; uint64_t x200; uint64_t x201; uint64_t x202; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x5, &x6, x4, UINT64_C(0x807a394ede097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x7, &x8, x4, UINT64_C(0x186304212849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x9, &x10, x4, UINT64_C(0x1017bb39c2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x11, &x12, x4, UINT64_C(0x409973b4c427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x13, &x14, 0x0, x12, x9); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x15, &x16, x14, x10, x7); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x17, &x18, x16, x8, x5); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x19, &x20, x11, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x21, &x22, x19, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x23, &x24, x19, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x25, &x26, x19, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x27, &x28, x19, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x29, &x30, 0x0, x28, x25); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x31, &x32, x30, x26, x23); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x33, &x34, x32, x24, x21); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x35, &x36, 0x0, x11, x27); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x37, &x38, x36, x13, x29); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x39, &x40, x38, x15, x31); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x41, &x42, x40, x17, x33); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x43, &x44, x42, (x18 + x6), (x34 + x22)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x45, &x46, x1, UINT64_C(0x807a394ede097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x47, &x48, x1, UINT64_C(0x186304212849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x49, &x50, x1, UINT64_C(0x1017bb39c2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x51, &x52, x1, UINT64_C(0x409973b4c427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x53, &x54, 0x0, x52, x49); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x55, &x56, x54, x50, x47); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x57, &x58, x56, x48, x45); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x59, &x60, 0x0, x37, x51); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x61, &x62, x60, x39, x53); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x63, &x64, x62, x41, x55); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x65, &x66, x64, x43, x57); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x67, &x68, x59, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x69, &x70, x67, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x71, &x72, x67, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x73, &x74, x67, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x75, &x76, x67, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x77, &x78, 0x0, x76, x73); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x79, &x80, x78, x74, x71); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x81, &x82, x80, x72, x69); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x83, &x84, 0x0, x59, x75); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x85, &x86, x84, x61, x77); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x87, &x88, x86, x63, x79); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x89, &x90, x88, x65, x81); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x91, &x92, x90, (((uint64_t)x66 + x44) + (x58 + x46)), (x82 + x70)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x93, &x94, x2, UINT64_C(0x807a394ede097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x95, &x96, x2, UINT64_C(0x186304212849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x97, &x98, x2, UINT64_C(0x1017bb39c2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x99, &x100, x2, UINT64_C(0x409973b4c427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x101, &x102, 0x0, x100, x97); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x103, &x104, x102, x98, x95); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x105, &x106, x104, x96, x93); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x107, &x108, 0x0, x85, x99); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x109, &x110, x108, x87, x101); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x111, &x112, x110, x89, x103); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x113, &x114, x112, x91, x105); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x115, &x116, x107, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x117, &x118, x115, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x119, &x120, x115, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x121, &x122, x115, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x123, &x124, x115, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x125, &x126, 0x0, x124, x121); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x127, &x128, x126, x122, x119); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x129, &x130, x128, x120, x117); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x131, &x132, 0x0, x107, x123); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x133, &x134, x132, x109, x125); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x135, &x136, x134, x111, x127); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x137, &x138, x136, x113, x129); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x139, &x140, x138, (((uint64_t)x114 + x92) + (x106 + x94)), (x130 + x118)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x141, &x142, x3, UINT64_C(0x807a394ede097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x143, &x144, x3, UINT64_C(0x186304212849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x145, &x146, x3, UINT64_C(0x1017bb39c2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x147, &x148, x3, UINT64_C(0x409973b4c427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x149, &x150, 0x0, x148, x145); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x151, &x152, x150, x146, x143); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x153, &x154, x152, x144, x141); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x155, &x156, 0x0, x133, x147); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x157, &x158, x156, x135, x149); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x159, &x160, x158, x137, x151); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x161, &x162, x160, x139, x153); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x163, &x164, x155, UINT64_C(0xdf6e6c2c727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x165, &x166, x163, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x167, &x168, x163, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x169, &x170, x163, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u64( &x171, &x172, x163, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x173, &x174, 0x0, x172, x169); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x175, &x176, x174, x170, x167); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x177, &x178, x176, x168, x165); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x179, &x180, 0x0, x155, x171); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x181, &x182, x180, x157, x173); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x183, &x184, x182, x159, x175); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64(&x185, &x186, x184, x161, x177); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u64( &x187, &x188, x186, (((uint64_t)x162 + x140) + (x154 + x142)), (x178 + x166)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x189, &x190, 0x0, x181, UINT64_C(0x7998f7b9022d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x191, &x192, x190, x183, UINT64_C(0xcf846e86789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x193, &x194, x192, x185, UINT64_C(0xab1ec85e6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64( &x195, &x196, x194, x187, UINT64_C(0x9b9f605f5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u64(&x197, &x198, x196, x188, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x199, x198, x189, x181); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x200, x198, x191, x183); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x201, x198, x193, x185); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64(&x202, x198, x195, x187); out1[0] = x199; out1[1] = x200; out1[2] = x201; out1[3] = x202; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_nonzero( uint64_t *out1, const uint64_t arg1[4]) { uint64_t x1; x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | (arg1[3])))); *out1 = x1; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( uint64_t out1[4], fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 arg1, const uint64_t arg2[4], const uint64_t arg3[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64( &x1, arg1, (arg2[0]), (arg3[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64( &x2, arg1, (arg2[1]), (arg3[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64( &x3, arg1, (arg2[2]), (arg3[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u64( &x4, arg1, (arg2[3]), (arg3[3])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes( uint8_t out1[32], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint8_t x5; uint64_t x6; uint8_t x7; uint64_t x8; uint8_t x9; uint64_t x10; uint8_t x11; uint64_t x12; uint8_t x13; uint64_t x14; uint8_t x15; uint64_t x16; uint8_t x17; uint8_t x18; uint8_t x19; uint64_t x20; uint8_t x21; uint64_t x22; uint8_t x23; uint64_t x24; uint8_t x25; uint64_t x26; uint8_t x27; uint64_t x28; uint8_t x29; uint64_t x30; uint8_t x31; uint8_t x32; uint8_t x33; uint64_t x34; uint8_t x35; uint64_t x36; uint8_t x37; uint64_t x38; uint8_t x39; uint64_t x40; uint8_t x41; uint64_t x42; uint8_t x43; uint64_t x44; uint8_t x45; uint8_t x46; uint8_t x47; uint64_t x48; uint8_t x49; uint64_t x50; uint8_t x51; uint64_t x52; uint8_t x53; uint64_t x54; uint8_t x55; uint64_t x56; uint8_t x57; uint64_t x58; uint8_t x59; uint8_t x60; x1 = (arg1[3]); x2 = (arg1[2]); x3 = (arg1[1]); x4 = (arg1[0]); x5 = (uint8_t)(x4 & UINT8_C(0xff)); x6 = (x4 >> 8); x7 = (uint8_t)(x6 & UINT8_C(0xff)); x8 = (x6 >> 8); x9 = (uint8_t)(x8 & UINT8_C(0xff)); x10 = (x8 >> 8); x11 = (uint8_t)(x10 & UINT8_C(0xff)); x12 = (x10 >> 8); x13 = (uint8_t)(x12 & UINT8_C(0xff)); x14 = (x12 >> 8); x15 = (uint8_t)(x14 & UINT8_C(0xff)); x16 = (x14 >> 8); x17 = (uint8_t)(x16 & UINT8_C(0xff)); x18 = (uint8_t)(x16 >> 8); x19 = (uint8_t)(x3 & UINT8_C(0xff)); x20 = (x3 >> 8); x21 = (uint8_t)(x20 & UINT8_C(0xff)); x22 = (x20 >> 8); x23 = (uint8_t)(x22 & UINT8_C(0xff)); x24 = (x22 >> 8); x25 = (uint8_t)(x24 & UINT8_C(0xff)); x26 = (x24 >> 8); x27 = (uint8_t)(x26 & UINT8_C(0xff)); x28 = (x26 >> 8); x29 = (uint8_t)(x28 & UINT8_C(0xff)); x30 = (x28 >> 8); x31 = (uint8_t)(x30 & UINT8_C(0xff)); x32 = (uint8_t)(x30 >> 8); x33 = (uint8_t)(x2 & UINT8_C(0xff)); x34 = (x2 >> 8); x35 = (uint8_t)(x34 & UINT8_C(0xff)); x36 = (x34 >> 8); x37 = (uint8_t)(x36 & UINT8_C(0xff)); x38 = (x36 >> 8); x39 = (uint8_t)(x38 & UINT8_C(0xff)); x40 = (x38 >> 8); x41 = (uint8_t)(x40 & UINT8_C(0xff)); x42 = (x40 >> 8); x43 = (uint8_t)(x42 & UINT8_C(0xff)); x44 = (x42 >> 8); x45 = (uint8_t)(x44 & UINT8_C(0xff)); x46 = (uint8_t)(x44 >> 8); x47 = (uint8_t)(x1 & UINT8_C(0xff)); x48 = (x1 >> 8); x49 = (uint8_t)(x48 & UINT8_C(0xff)); x50 = (x48 >> 8); x51 = (uint8_t)(x50 & UINT8_C(0xff)); x52 = (x50 >> 8); x53 = (uint8_t)(x52 & UINT8_C(0xff)); x54 = (x52 >> 8); x55 = (uint8_t)(x54 & UINT8_C(0xff)); x56 = (x54 >> 8); x57 = (uint8_t)(x56 & UINT8_C(0xff)); x58 = (x56 >> 8); x59 = (uint8_t)(x58 & UINT8_C(0xff)); x60 = (uint8_t)(x58 >> 8); out1[0] = x5; out1[1] = x7; out1[2] = x9; out1[3] = x11; out1[4] = x13; out1[5] = x15; out1[6] = x17; out1[7] = x18; out1[8] = x19; out1[9] = x21; out1[10] = x23; out1[11] = x25; out1[12] = x27; out1[13] = x29; out1[14] = x31; out1[15] = x32; out1[16] = x33; out1[17] = x35; out1[18] = x37; out1[19] = x39; out1[20] = x41; out1[21] = x43; out1[22] = x45; out1[23] = x46; out1[24] = x47; out1[25] = x49; out1[26] = x51; out1[27] = x53; out1[28] = x55; out1[29] = x57; out1[30] = x59; out1[31] = x60; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. * Preconditions: * 0 ≤ bytes_eval arg1 < m * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes( uint64_t out1[4], const uint8_t arg1[32]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint8_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint8_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint8_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint8_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; x1 = ((uint64_t)(arg1[31]) << 56); x2 = ((uint64_t)(arg1[30]) << 48); x3 = ((uint64_t)(arg1[29]) << 40); x4 = ((uint64_t)(arg1[28]) << 32); x5 = ((uint64_t)(arg1[27]) << 24); x6 = ((uint64_t)(arg1[26]) << 16); x7 = ((uint64_t)(arg1[25]) << 8); x8 = (arg1[24]); x9 = ((uint64_t)(arg1[23]) << 56); x10 = ((uint64_t)(arg1[22]) << 48); x11 = ((uint64_t)(arg1[21]) << 40); x12 = ((uint64_t)(arg1[20]) << 32); x13 = ((uint64_t)(arg1[19]) << 24); x14 = ((uint64_t)(arg1[18]) << 16); x15 = ((uint64_t)(arg1[17]) << 8); x16 = (arg1[16]); x17 = ((uint64_t)(arg1[15]) << 56); x18 = ((uint64_t)(arg1[14]) << 48); x19 = ((uint64_t)(arg1[13]) << 40); x20 = ((uint64_t)(arg1[12]) << 32); x21 = ((uint64_t)(arg1[11]) << 24); x22 = ((uint64_t)(arg1[10]) << 16); x23 = ((uint64_t)(arg1[9]) << 8); x24 = (arg1[8]); x25 = ((uint64_t)(arg1[7]) << 56); x26 = ((uint64_t)(arg1[6]) << 48); x27 = ((uint64_t)(arg1[5]) << 40); x28 = ((uint64_t)(arg1[4]) << 32); x29 = ((uint64_t)(arg1[3]) << 24); x30 = ((uint64_t)(arg1[2]) << 16); x31 = ((uint64_t)(arg1[1]) << 8); x32 = (arg1[0]); x33 = (x31 + (uint64_t)x32); x34 = (x30 + x33); x35 = (x29 + x34); x36 = (x28 + x35); x37 = (x27 + x36); x38 = (x26 + x37); x39 = (x25 + x38); x40 = (x23 + (uint64_t)x24); x41 = (x22 + x40); x42 = (x21 + x41); x43 = (x20 + x42); x44 = (x19 + x43); x45 = (x18 + x44); x46 = (x17 + x45); x47 = (x15 + (uint64_t)x16); x48 = (x14 + x47); x49 = (x13 + x48); x50 = (x12 + x49); x51 = (x11 + x50); x52 = (x10 + x51); x53 = (x9 + x52); x54 = (x7 + (uint64_t)x8); x55 = (x6 + x54); x56 = (x5 + x55); x57 = (x4 + x56); x58 = (x3 + x57); x59 = (x2 + x58); x60 = (x1 + x59); out1[0] = x39; out1[1] = x46; out1[2] = x53; out1[3] = x60; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_GostR3410_2001_CryptoPro_C_ParamSet/fe_inv.op3 * sliding window w=5 */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t11, t13, t15, t17, t19, t21, t23, t25, t27, t29, t3, t31, t5, t7, t9; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t3, t1, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t5, t3, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t7, t5, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t9, t7, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t11, t9, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t13, t11, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t15, t13, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t17, t15, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t19, t17, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t21, t19, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t23, t21, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t25, t23, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t27, t25, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t29, t27, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t31, t29, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, t9); for (i = 0; i < 4; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t23); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t7); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t27); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t15); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t21); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t21); for (i = 0; i < 8; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t11); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t29); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t11); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t15); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t25); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t15); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t13); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t13); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t25); for (i = 0; i < 8; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t21); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t11); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t31); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t3); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t29); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t3); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t15); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t9); for (i = 0; i < 8; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t5); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t7); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t19); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t15); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t25); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t17); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t29); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t29); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t25); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t11); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t23); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t11); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(output, acc, t25); } /* curve coefficient constants */ static const limb_t const_one[4] = { UINT64_C(0x86670846FDD28A65), UINT64_C(0x307B9179876FAE2C), UINT64_C(0x54E137A194BE3755), UINT64_C(0x64609FA0A57A7EF8)}; static const limb_t const_b[4] = { UINT64_C(0x4BE8A4E93BDA2ACF), UINT64_C(0x79CC0E3E90D382DD), UINT64_C(0x3BA4C8B01D9CC79B), UINT64_C(0x5CC73B5A966609E9)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[27][16] = { { {{UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000)}, {UINT64_C(0xD082E00700254F12), UINT64_C(0xC5BA8184EB1F1421), UINT64_C(0x4EC9E7D0F010780D), UINT64_C(0x7846B5B72794C8D5)}}, {{UINT64_C(0x870FB0417225A595), UINT64_C(0x6CAFAE705FD57F04), UINT64_C(0xFEC1C2AC2E7DB9BA), UINT64_C(0x9230823E127A5862)}, {UINT64_C(0xF6CFDB6DE4464836), UINT64_C(0x3D79631B9A945AC0), UINT64_C(0xA1FCF2DF3D0C880D), UINT64_C(0x17C83E500EE6A611)}}, {{UINT64_C(0x3C79C11AE42734FD), UINT64_C(0x1614B2BEAC4040C3), UINT64_C(0xDD1437252C3A23A5), UINT64_C(0x1A02DA838AF4F7CD)}, {UINT64_C(0x23D588D6E7D6991A), UINT64_C(0x5F332676D2B3E364), UINT64_C(0x353826809134BA88), UINT64_C(0x08ECA826D27090E5)}}, {{UINT64_C(0x231F8DC826761106), UINT64_C(0x7363050E3D78B14B), UINT64_C(0xC3B9A1B8C05C4381), UINT64_C(0x29727635B8ACD9AC)}, {UINT64_C(0xDD416AE92ED54E6C), UINT64_C(0x546084350B48A87C), UINT64_C(0x2C8DEEA497093D22), UINT64_C(0x87D2924C0D716BAF)}}, {{UINT64_C(0x43281D30619206D6), UINT64_C(0x4A8FFC8768744E44), UINT64_C(0xB1011A3D708208D5), UINT64_C(0x2FE86E7BA035B0B9)}, {UINT64_C(0x82F43088A3762860), UINT64_C(0x67B5A303B33595D4), UINT64_C(0x262F16EBB477BECD), UINT64_C(0x1D38D4A723E2816A)}}, {{UINT64_C(0x91BBA3C0AD83C032), UINT64_C(0x7DBC2EB6234F2FF3), UINT64_C(0xE2C00C156D18A737), UINT64_C(0x71D1AE8BCCF6DC2D)}, {UINT64_C(0x6183816A2DB77239), UINT64_C(0xC545A5120E228C41), UINT64_C(0x3B96D6BC0F49A679), UINT64_C(0x9831D683E49E39C2)}}, {{UINT64_C(0xEEAA17A920DA13D9), UINT64_C(0xEE3130FB8ABECADE), UINT64_C(0xBFB2CE6AA6E3D089), UINT64_C(0x22BCDCEEE627A07C)}, {UINT64_C(0x86D7A50C955A1D9E), UINT64_C(0xCD60A425E4E00B9E), UINT64_C(0x5407A6F8615B9E91), UINT64_C(0x7F17B1714F1CA93D)}}, {{UINT64_C(0xBC351DE00DB59F2C), UINT64_C(0x1470E6A19CDAF8AF), UINT64_C(0x461ED28960D3B27A), UINT64_C(0x122C8F4B49C7F789)}, {UINT64_C(0xAB56E614069FC8CE), UINT64_C(0x9836B010C34E487C), UINT64_C(0x9EE067033FE009EB), UINT64_C(0x88C8DC64AA019563)}}, {{UINT64_C(0xD0B4A99663DDBB1F), UINT64_C(0x483286E51D154696), UINT64_C(0xF0586DB89F0D6F4E), UINT64_C(0x38167987980446C8)}, {UINT64_C(0x86A2ABACE4166B55), UINT64_C(0x4E7B4F96A8366C64), UINT64_C(0x20CF2108ED997D8E), UINT64_C(0x20EA98441D01C009)}}, {{UINT64_C(0x028B520EB89CE05A), UINT64_C(0xEF41147D4FAAD420), UINT64_C(0xB280CCD3121A2A0A), UINT64_C(0x4C677C8386E8F591)}, {UINT64_C(0xB42F67B2A390AA99), UINT64_C(0xC4EF553B19F8A01A), UINT64_C(0x867611396979027F), UINT64_C(0x6F17766382C202BE)}}, {{UINT64_C(0xBEF6B99627C5C7CC), UINT64_C(0xB2D34F8B10799DB8), UINT64_C(0x132E1A3D48AD9B1E), UINT64_C(0x2971BFEDE68B9907)}, {UINT64_C(0x312F6D31C6B743B5), UINT64_C(0xCF123317A718E0A8), UINT64_C(0xCF1E5266FD58637C), UINT64_C(0x56BA8362E046167C)}}, {{UINT64_C(0xD680969D0E910D7F), UINT64_C(0x634FB3C28A4689F9), UINT64_C(0xA79A56DF09FDD299), UINT64_C(0x9065269E89411C3D)}, {UINT64_C(0x5D22254E82C6076C), UINT64_C(0xDE7D78F081FEA171), UINT64_C(0xE136696410BCDA87), UINT64_C(0x98B58F5A97638B85)}}, {{UINT64_C(0xA532DED4FB5EDF3F), UINT64_C(0x604E5631833A7E2F), UINT64_C(0x7C4051D33A09C74E), UINT64_C(0x51D1108AEDFBEB4B)}, {UINT64_C(0x9AE61F9E4DF1AB4D), UINT64_C(0xFD4966F3163DB1A5), UINT64_C(0xF6C44E557075AD6D), UINT64_C(0x670D0D6F4AF24611)}}, {{UINT64_C(0xD99925FFD369D301), UINT64_C(0xC17E97677665BCF4), UINT64_C(0xB5A908F1CB5A2128), UINT64_C(0x1981791D9C726C9F)}, {UINT64_C(0xC4249418E0861F4E), UINT64_C(0x2A63399FEE045D5E), UINT64_C(0x246958FDA1B974FF), UINT64_C(0x668016A20FC6F7A0)}}, {{UINT64_C(0xEB7018ADEDE07C08), UINT64_C(0xDF3C12592E33D1D9), UINT64_C(0xEE0913DADC24E3DE), UINT64_C(0x1C632D5B35EB6B0D)}, {UINT64_C(0xC69396DD2C56E1B2), UINT64_C(0x01F0B034A837CE8F), UINT64_C(0x7842B98DB6882E32), UINT64_C(0x8FAC92309E61FCA6)}}, {{UINT64_C(0x1DBB7D998A782CFE), UINT64_C(0xEB945B49C9322BE7), UINT64_C(0xDCCB4E6EE208123B), UINT64_C(0x1C7C265CFC024524)}, {UINT64_C(0xAD000D8A6102BC63), UINT64_C(0x7D7F3C7B82575943), UINT64_C(0x8D2F08810D547A95), UINT64_C(0x7012377AD94FFA6D)}}, }, { {{UINT64_C(0xE3F78DE51EB6CBF7), UINT64_C(0xF4E08A6172FA65DB), UINT64_C(0x670B0E06502A247E), UINT64_C(0x7A45D73E9877E492)}, {UINT64_C(0x5FD754AD3DD0CDBC), UINT64_C(0xA5C2B15E0125AB1F), UINT64_C(0xC503836FE614B7A9), UINT64_C(0x5548C4242C50DCFE)}}, {{UINT64_C(0xCEE7BE65B9B38743), UINT64_C(0xD5E4171594BE028E), UINT64_C(0x08EC3CA3B5C45F7D), UINT64_C(0x1ACFAC17FB51261A)}, {UINT64_C(0x45098D93A9C04381), UINT64_C(0x717FC0DCA5B45DC8), UINT64_C(0xF352A9C2EABEE4E5), UINT64_C(0x1964AF20F311B457)}}, {{UINT64_C(0x8C2298080802A755), UINT64_C(0x46F0A7CA6140CDA7), UINT64_C(0xF0EEB7AEBC62603B), UINT64_C(0x8432E1524BF4B451)}, {UINT64_C(0x3C31982563967F94), UINT64_C(0xF04EACB6A042AE13), UINT64_C(0xD7CB2DBC650A6ADB), UINT64_C(0x38A36EE378C9E166)}}, {{UINT64_C(0x3527A5C5D3EE8657), UINT64_C(0xBAA0DE97101645F9), UINT64_C(0xC59C9803CE9D6A48), UINT64_C(0x43D12449F8F39FDF)}, {UINT64_C(0x65B3AB988DF7A72B), UINT64_C(0xD225AF8EAFDA9048), UINT64_C(0x88C368B8338A3694), UINT64_C(0x4A5A3C24FBC813F1)}}, {{UINT64_C(0xCBCB725A9E2118B5), UINT64_C(0x113F36C5CAA54794), UINT64_C(0x5900990E4A0A2267), UINT64_C(0x4E329EB10A9C1F11)}, {UINT64_C(0xF47F4077CD8918A7), UINT64_C(0x18A3C0713877B404), UINT64_C(0xCDEF4FE3EFEB2B6B), UINT64_C(0x360982DBDE4D0540)}}, {{UINT64_C(0x42AB64F2D5F8DACA), UINT64_C(0x604A9676EE88523D), UINT64_C(0xD430CCABAEFD1283), UINT64_C(0x3DA9D0E554465F7C)}, {UINT64_C(0x5EC145DF41A4216B), UINT64_C(0x7C8F2C51F7E7FBD9), UINT64_C(0xA2E58A23BD483D26), UINT64_C(0x4739F7F9E4A908C8)}}, {{UINT64_C(0x37DDF87279370382), UINT64_C(0x9D26A55F12C8E90E), UINT64_C(0xFC1FA6CDE8EB0CA4), UINT64_C(0x826A29E5C29DC4F9)}, {UINT64_C(0x15ECB621AA29F814), UINT64_C(0x4C8A81289DF1DFF7), UINT64_C(0xBB22301966B549BB), UINT64_C(0x6CB21ACBB81A2863)}}, {{UINT64_C(0xDD31ACC211DA6928), UINT64_C(0xF98867B0A903D58F), UINT64_C(0xAD283697D3679348), UINT64_C(0x67BFEFF9301C3571)}, {UINT64_C(0xB745CAE6780BBBCE), UINT64_C(0x1A9C661862F2EC5D), UINT64_C(0xF9895684A1475BEB), UINT64_C(0x93E5ACE64731A11D)}}, {{UINT64_C(0x0F6E94607539483E), UINT64_C(0x5728E6DD9EF4EF16), UINT64_C(0xE1DA86E1062E946E), UINT64_C(0x272EBC47F2E07759)}, {UINT64_C(0xE5E688E3909A578F), UINT64_C(0x9F25D6D17CFD1B7D), UINT64_C(0xC582260FADE1E2A4), UINT64_C(0x2F50F74EA050071E)}}, {{UINT64_C(0xE0A8FE3F2DF4D40D), UINT64_C(0xB126E4EF07791F88), UINT64_C(0x69759DB42A88D242), UINT64_C(0x52592A3BC9C1981C)}, {UINT64_C(0xD0F4172872F649A1), UINT64_C(0x9FF19B2B0750EBAB), UINT64_C(0xEFC047F9E0D7D222), UINT64_C(0x81491CA12E8140AF)}}, {{UINT64_C(0x2DA40FF1675F821B), UINT64_C(0x2C91A2879E2E0502), UINT64_C(0x993ECFF4077D81FE), UINT64_C(0x3ABA2F2C71CC3DAE)}, {UINT64_C(0xED007670168413DB), UINT64_C(0xC07D61B5AFBD4E82), UINT64_C(0xF078262E6BBADA24), UINT64_C(0x0E0EDC629E6413CC)}}, {{UINT64_C(0x6CD0451DB7D099F9), UINT64_C(0x8FB218E6F8B12C83), UINT64_C(0x4D8C3B26E55EE1E4), UINT64_C(0x949649064A6FCD90)}, {UINT64_C(0x9ABB96854BEACA48), UINT64_C(0x6A749487868EFEC7), UINT64_C(0x46BB9B42C8D2932C), UINT64_C(0x82384321DE007BAC)}}, {{UINT64_C(0xDBECB743A942DB71), UINT64_C(0x21B5211521A6BC46), UINT64_C(0xE49B689424C17D78), UINT64_C(0x737FD3F189A08E17)}, {UINT64_C(0xF833E404C36E4E57), UINT64_C(0x512C114A01E17CE6), UINT64_C(0x65A23D7350D75050), UINT64_C(0x838CA746F2F2D438)}}, {{UINT64_C(0x28F9220CA20632B7), UINT64_C(0x72D8C347642358D6), UINT64_C(0xAB15FE1BE89CAA6F), UINT64_C(0x2A09B1436E16374A)}, {UINT64_C(0x4CED0986B983CFE8), UINT64_C(0xD9B067B697B84E88), UINT64_C(0x926FC5F5C2350F8F), UINT64_C(0x31D7735884E2078F)}}, {{UINT64_C(0xA7815CE77FF17BA1), UINT64_C(0xBE80BB6CA26BBA1B), UINT64_C(0x66DAE535F86DF104), UINT64_C(0x72739199AB1B9C09)}, {UINT64_C(0x8E93F3C854056E67), UINT64_C(0xDC5E3855EBF23595), UINT64_C(0x70D1033C78123000), UINT64_C(0x50874350F22DD2BD)}}, {{UINT64_C(0x533F213BC2700468), UINT64_C(0x31E6AA9C11BEA732), UINT64_C(0xCB5E184E4491DC82), UINT64_C(0x8A68049A5BD63975)}, {UINT64_C(0x1724AC47F86A41D1), UINT64_C(0xDF9A0CA3ECA0DA11), UINT64_C(0xE5E1489C71F0EA19), UINT64_C(0x0E20661AC9DC7BF2)}}, }, { {{UINT64_C(0x5EB4E319F86D9DA8), UINT64_C(0x3CBF130EE0A46703), UINT64_C(0x166D52DA00A4AB17), UINT64_C(0x27A80547B7030861)}, {UINT64_C(0xA7601086399C32BA), UINT64_C(0x571E4E4BC2F0A5E5), UINT64_C(0x72D12F6B39BED44D), UINT64_C(0x8FDCCE3D1AF8F25F)}}, {{UINT64_C(0x281F7AF97DFEB40D), UINT64_C(0x0CCE33B9D7F767D5), UINT64_C(0x3E8BF3F48818C1E6), UINT64_C(0x6D909D0D4BA4647A)}, {UINT64_C(0x91D77BA0FAC574D1), UINT64_C(0xD259266168CA7FEC), UINT64_C(0xC4C7D6B5281F269C), UINT64_C(0x7A41CD78DA42CDDD)}}, {{UINT64_C(0xBC8E0D27A3B8F255), UINT64_C(0xF5E2A8B11C3E5190), UINT64_C(0x8C38862BD609F668), UINT64_C(0x4E31C18E0631D50F)}, {UINT64_C(0x9013EDDBF13E0CCD), UINT64_C(0x83B04E6841EFDAF7), UINT64_C(0x15EC4BB8DC82597F), UINT64_C(0x5059515056117705)}}, {{UINT64_C(0xD25F244D1E0E0161), UINT64_C(0x6C975D7B1A437FBA), UINT64_C(0x305DB2DF95F2AD8C), UINT64_C(0x17D6E0053B9CC742)}, {UINT64_C(0x6A849F76E60BC3C3), UINT64_C(0x35523E08BF8C3790), UINT64_C(0xF18B5335239140E2), UINT64_C(0x5E8570557CA5FF40)}}, {{UINT64_C(0xB48F07A4A4250E95), UINT64_C(0x068735AEC7F17667), UINT64_C(0x30F8D31394771B24), UINT64_C(0x598EA397A495A064)}, {UINT64_C(0xBF19252968B76855), UINT64_C(0x897E3CC6C7C0D2D6), UINT64_C(0xA2A4948F64EC9649), UINT64_C(0x1027891AAE7C8598)}}, {{UINT64_C(0x0442E6CB04585685), UINT64_C(0x09BA61DA82A2D258), UINT64_C(0x7C5400B10AE5466D), UINT64_C(0x0A0B71B0C2133893)}, {UINT64_C(0x04E3D98AD5EF6E93), UINT64_C(0x177EA5F8F332BDF2), UINT64_C(0xE7CF3F71C3FAE583), UINT64_C(0x40C451338AE0CFD7)}}, {{UINT64_C(0x6BE94FC39B82E738), UINT64_C(0x212FB8048BC262E2), UINT64_C(0xE17F6A7AB22E21FF), UINT64_C(0x22B7BDAB15E960BB)}, {UINT64_C(0xE154C945771350C2), UINT64_C(0x6505B8EB882DB07B), UINT64_C(0x149A0A16C7E3ABD3), UINT64_C(0x78F78ABF81C30AAE)}}, {{UINT64_C(0x6ED81415C954BC0A), UINT64_C(0x316E801270E55349), UINT64_C(0xEC02323B50399C09), UINT64_C(0x963BA97B8559C3A9)}, {UINT64_C(0x39FCE50E037EC345), UINT64_C(0x422A082DD5BF03FB), UINT64_C(0x59ED39E418DCC77E), UINT64_C(0x4CFC3F11A40AA978)}}, {{UINT64_C(0x85A5692255D7C9B6), UINT64_C(0x5BC590E2B451111B), UINT64_C(0x3BCB23158782C71B), UINT64_C(0x1F3456C4632246A9)}, {UINT64_C(0xEA577AD99CFBBE19), UINT64_C(0x051BEE4035CCE939), UINT64_C(0xDC3008991A0C589C), UINT64_C(0x14877ECED2095619)}}, {{UINT64_C(0xB64D0EC695024C5E), UINT64_C(0xB0597195B94CDF74), UINT64_C(0x3B97B51316844010), UINT64_C(0x48799881CCBABC63)}, {UINT64_C(0x0E3119AED9819075), UINT64_C(0xA5DCA9C1EB0299FD), UINT64_C(0x8063D7884A404D13), UINT64_C(0x974D2A1A8044EBE2)}}, {{UINT64_C(0xB6589045B8E14640), UINT64_C(0xFAD60A435507B9BE), UINT64_C(0x9D540C1C56FF32BC), UINT64_C(0x47ECC24F74265A69)}, {UINT64_C(0x0C829F18DB3E64C9), UINT64_C(0xF7C0C6D772E87B2B), UINT64_C(0xCB3FC51216B616CE), UINT64_C(0x549B9227B94F69B1)}}, {{UINT64_C(0xB151DEE9DB235273), UINT64_C(0x2FD9496F6D65606C), UINT64_C(0x6A5E172DD62B5B0D), UINT64_C(0x181E605DEA0AE249)}, {UINT64_C(0x66D7EB098911490A), UINT64_C(0x85E174A32E70DEF2), UINT64_C(0x2DA133544EF8CFA9), UINT64_C(0x1B87FE623E69BD22)}}, {{UINT64_C(0x2DF420CA2BB09564), UINT64_C(0x1AC26F767ACEE4D4), UINT64_C(0x50C68E6F2BC7EF7A), UINT64_C(0x4730D654B445B2FE)}, {UINT64_C(0x90C040D98B57D38D), UINT64_C(0x28793DB533CA2C77), UINT64_C(0x22D2B573AC6A4BE8), UINT64_C(0x68C0DBDDB72E7E01)}}, {{UINT64_C(0xDF70BCDC09E2D3FF), UINT64_C(0xB6E599709F20F624), UINT64_C(0x5E04FDE76DE3119E), UINT64_C(0x1C9B43FFD5705A5D)}, {UINT64_C(0x7C23A517681270B0), UINT64_C(0xDD7FC8339303BF40), UINT64_C(0x3028E496458EE80A), UINT64_C(0x0C72006352590EEF)}}, {{UINT64_C(0x27B297102850A5AE), UINT64_C(0xD1E6FBBAAA3E0397), UINT64_C(0xCFB44044DF8FCBD6), UINT64_C(0x7CD86272C52B90FD)}, {UINT64_C(0xB0E7FA93EBA52025), UINT64_C(0x6416630304084EF3), UINT64_C(0xD7C7DCBE43840178), UINT64_C(0x8BC7FF7722FB81A2)}}, {{UINT64_C(0xABDC5206DAFCE699), UINT64_C(0x522A913783C5F3A3), UINT64_C(0xBAA936370E666E5C), UINT64_C(0x0FD813DAD2D33B62)}, {UINT64_C(0x833919085D417354), UINT64_C(0xE5AADE1DA6B9B447), UINT64_C(0xBDE90A3CD68321B1), UINT64_C(0x43FF95140411531B)}}, }, { {{UINT64_C(0xD61DEE6439648345), UINT64_C(0xF8B3FA1C7FCB5B5E), UINT64_C(0xDD531CE124C29C71), UINT64_C(0x7A23608BFFB825FE)}, {UINT64_C(0x8D607B82F0DE896D), UINT64_C(0x6E49733006EDDAFE), UINT64_C(0x8B49EFF0C935E754), UINT64_C(0x90D54646EE08BDBF)}}, {{UINT64_C(0xF44FBB169044FD39), UINT64_C(0xA72128C4DFB38141), UINT64_C(0x8467F68801954CC0), UINT64_C(0x741C23EEB560B5C5)}, {UINT64_C(0xA7F422019765CF34), UINT64_C(0xB26C97BF8A2AB61A), UINT64_C(0xAA948763CBD45AF3), UINT64_C(0x74C993C2E21479F5)}}, {{UINT64_C(0xD968CE1ABFA717A5), UINT64_C(0x45C1103D48E92615), UINT64_C(0x4CCEBE85DD98207D), UINT64_C(0x8A75DF6EE65E5FE6)}, {UINT64_C(0x9E582C40418C47C5), UINT64_C(0x2E9EE003A450009B), UINT64_C(0x7C079613DD60D3D2), UINT64_C(0x80A78C4A9935D8CA)}}, {{UINT64_C(0xF6CDED58D3C9B903), UINT64_C(0x4F27927DEF455E7A), UINT64_C(0xF9DBBB9E833BB3C1), UINT64_C(0x4107CFBF6BA3770A)}, {UINT64_C(0x61871175520FCB57), UINT64_C(0xEA3A307B47A12C8E), UINT64_C(0x940DDEE8C24E9E75), UINT64_C(0x8AE8F22CF33541BB)}}, {{UINT64_C(0xE4C898703973DC0B), UINT64_C(0xCC3DD1AC55DFAAF0), UINT64_C(0xB63D596B27372EFE), UINT64_C(0x1B92A19245A33718)}, {UINT64_C(0x0EABEBEE00607319), UINT64_C(0x69B7355E7C3E35EE), UINT64_C(0xF7354E352233C454), UINT64_C(0x1E2BAADA1E722C0A)}}, {{UINT64_C(0xD0E47FE23B9FE86D), UINT64_C(0x878F403FDAA1C7BC), UINT64_C(0x5447AD5490F5DED7), UINT64_C(0x4E8A997B1E58B03B)}, {UINT64_C(0x9AD0E4812E926FA8), UINT64_C(0x871EFB9E8D0EF3AA), UINT64_C(0xADD7DD147E714DF6), UINT64_C(0x9A30245A2308EE02)}}, {{UINT64_C(0x44838B15904F0D11), UINT64_C(0x6177587A2A2A70FF), UINT64_C(0x402938502C2F7943), UINT64_C(0x8F85119167581701)}, {UINT64_C(0x564383D1842E6434), UINT64_C(0x251AF59DAF2C0078), UINT64_C(0x8A81772D3354A264), UINT64_C(0x9AAFA350DFD2D0EA)}}, {{UINT64_C(0x4739793235461CAD), UINT64_C(0x0F86BD4362C5BFFA), UINT64_C(0x5F166BC07785490D), UINT64_C(0x7DCCC9882BD61B3E)}, {UINT64_C(0x44C3299A9394375B), UINT64_C(0x0C5F2803405A34BD), UINT64_C(0x3AD60F1D4237E728), UINT64_C(0x6E7E06D072EC2562)}}, {{UINT64_C(0x44AD84713C5840A6), UINT64_C(0x40C3CE2B4752BC62), UINT64_C(0x94B14C21EC3FD75F), UINT64_C(0x65E0E6AF2629C0C0)}, {UINT64_C(0xA3FE2F5555936454), UINT64_C(0x252AD743780E25E5), UINT64_C(0x22F9951BFF4E107A), UINT64_C(0x1B8A7DDE554CEA49)}}, {{UINT64_C(0xBBDCC2C089F1C6FA), UINT64_C(0x548FEF29C360A51D), UINT64_C(0x094DAD451290EC92), UINT64_C(0x792F6FB9AF55BF30)}, {UINT64_C(0x37EF4ABE707FBF4E), UINT64_C(0x0F43AB0DFC4B6BD0), UINT64_C(0x850015B72D6EE5D9), UINT64_C(0x09273F3535C1FD65)}}, {{UINT64_C(0xCECF1B90A6C3209B), UINT64_C(0xFB4BC864ABD433C0), UINT64_C(0x38246AAA3EEEF8BA), UINT64_C(0x4BC7904E9ED13F88)}, {UINT64_C(0xA61C369A8E783066), UINT64_C(0x496FB8314D1C832C), UINT64_C(0x1907687A03AD64D5), UINT64_C(0x49516EA583425766)}}, {{UINT64_C(0x8108B704B1714E53), UINT64_C(0xB458CB4B82E39BE7), UINT64_C(0xFCBD51CC097049DE), UINT64_C(0x415F4079722E8CBA)}, {UINT64_C(0xCDB06F5E342DF9C6), UINT64_C(0x64885CD11281AC74), UINT64_C(0x932A05E45366673D), UINT64_C(0x7333520BE83AD23D)}}, {{UINT64_C(0xDAA0A1EFC54B523C), UINT64_C(0xA3E80053B3C261C8), UINT64_C(0x352CC612558FCFA5), UINT64_C(0x1B9B755D85852B14)}, {UINT64_C(0x19EE2CB6A1B541FF), UINT64_C(0x2B531CE2D5786B4F), UINT64_C(0xEF5EA6DF08C3E15B), UINT64_C(0x82161B0487111129)}}, {{UINT64_C(0x5AB533A5FCEABAED), UINT64_C(0x4C2147A54A4D8E44), UINT64_C(0xD8EEE795DA02D43D), UINT64_C(0x8CB648DFA15C1CD0)}, {UINT64_C(0x4869FB6CA788DDDE), UINT64_C(0xF9554D1477C03759), UINT64_C(0x4D25B41A96187DB9), UINT64_C(0x662FBAB33FE0B3F3)}}, {{UINT64_C(0xD3AF4D09A58A5B2E), UINT64_C(0x3C5DD2985CE88DBE), UINT64_C(0x89DDA42E7426C2A4), UINT64_C(0x2D832B0749095424)}, {UINT64_C(0x24EFCC0362AA84CF), UINT64_C(0x348C19DEE86923D7), UINT64_C(0x453E928635DB5CB1), UINT64_C(0x03F48EEB8DB21CF3)}}, {{UINT64_C(0xBCF9600FF4035856), UINT64_C(0xE77CEC83AF820E18), UINT64_C(0xC87D43C17F2FBCC1), UINT64_C(0x574C4CAE6290B18D)}, {UINT64_C(0x8BD8AE45E56E1EFE), UINT64_C(0xB1EFD68475D6FCC9), UINT64_C(0x9829F227A361E753), UINT64_C(0x9A50B4255211B784)}}, }, { {{UINT64_C(0x26F1959036396F78), UINT64_C(0x350D1A769AD1982C), UINT64_C(0x33BDB4AB947F352E), UINT64_C(0x6CA38B05FFE1E1E1)}, {UINT64_C(0x055364C26F2A8CA0), UINT64_C(0xAF15075D2969CA7E), UINT64_C(0x2916D58FC3B9CB70), UINT64_C(0x18D94A8BD7325693)}}, {{UINT64_C(0x87C41809F36EB789), UINT64_C(0x8C3517F9A7436F54), UINT64_C(0xE7C02E1D3D785160), UINT64_C(0x5BAFE72E418C7ABF)}, {UINT64_C(0xA00A8E76CD9B27C2), UINT64_C(0x667918087DA06823), UINT64_C(0x342A03D920EC00B4), UINT64_C(0x44502A7E6122589A)}}, {{UINT64_C(0x3A492F735BDAE972), UINT64_C(0x5184D076126A07DE), UINT64_C(0xAE49313CB56A38F0), UINT64_C(0x66CCC24E9EC47E0A)}, {UINT64_C(0xAE84941BC03CF3E1), UINT64_C(0x771AFC575A73440B), UINT64_C(0xABF93DC8C433E43C), UINT64_C(0x974EE822243C6828)}}, {{UINT64_C(0x468D7FDBA7A5F66C), UINT64_C(0xBBB2C482B18DEFCC), UINT64_C(0x188B8CACFA2E7DEA), UINT64_C(0x7894BC93BE0200B9)}, {UINT64_C(0xA31813386B84750E), UINT64_C(0x8B14BDB237356096), UINT64_C(0xA9200FE7D62F4813), UINT64_C(0x8DF664A36F7627CE)}}, {{UINT64_C(0x39BF14DDDD996CF1), UINT64_C(0xD00B3BF5F7F42D26), UINT64_C(0xF1AF5A20017718A3), UINT64_C(0x34A1E94BABCAE05D)}, {UINT64_C(0xAD75D1B5C635D333), UINT64_C(0x97E5BD3987210A5A), UINT64_C(0x11684CA6A0327BF4), UINT64_C(0x25C511179B8F0A46)}}, {{UINT64_C(0x7E5CD79FA935A9B9), UINT64_C(0x15DC70C2A22DCD16), UINT64_C(0x5CDA47E678A420F4), UINT64_C(0x37E0364EEA631104)}, {UINT64_C(0xE7C469565E47B630), UINT64_C(0x7BD4C4A7E42C4DCB), UINT64_C(0xA76B87A71C91117E), UINT64_C(0x2AA043DDADA4B5E1)}}, {{UINT64_C(0x6BB06B5A875DED57), UINT64_C(0x89452B3BFEAD7B14), UINT64_C(0x0CBD5CA8A6E39E1F), UINT64_C(0x2DC5917C3BFA7A3D)}, {UINT64_C(0x6395D5B8F840B6E8), UINT64_C(0xAEC9342FED8589EE), UINT64_C(0x8332A1B877979E67), UINT64_C(0x29B55822C59F97DB)}}, {{UINT64_C(0xFD145FF77D65A8F4), UINT64_C(0x8FFF7EE0119C9AFC), UINT64_C(0x0100D0E9AFCD6214), UINT64_C(0x98DE55E5A3B988B3)}, {UINT64_C(0x0BACCB2E00151BF2), UINT64_C(0x2B422D0966091583), UINT64_C(0xC4D15E1693C66A3B), UINT64_C(0x1C107559727DE9E6)}}, {{UINT64_C(0xC019C7D73CB76EDF), UINT64_C(0x6456DD91151F5E14), UINT64_C(0x29E95B6657CC7078), UINT64_C(0x9193F4D9E9BDBCEC)}, {UINT64_C(0x375837B04806F8CB), UINT64_C(0x52D5528AAA954620), UINT64_C(0xE71F9F601B9D6D34), UINT64_C(0x910E4FA1DF95759C)}}, {{UINT64_C(0x8D31B2EEFCADB5EA), UINT64_C(0x0814FF77A63C7498), UINT64_C(0x236569C05E3D927E), UINT64_C(0x7F669DAD95BBB9D9)}, {UINT64_C(0x29158C9A305B0347), UINT64_C(0x99B9B7E752D468EB), UINT64_C(0x6C4CABC3B4342443), UINT64_C(0x125AFBEA0A803ED4)}}, {{UINT64_C(0x850A150B101FAA4E), UINT64_C(0xB586BCDA11ECDABC), UINT64_C(0x9692EF834DAD2264), UINT64_C(0x0951716ED2B67F5E)}, {UINT64_C(0xA2295F20924DD16D), UINT64_C(0xD8327275D0CE88CD), UINT64_C(0x45F8DD0CC683ADA3), UINT64_C(0x4A798B3388C26024)}}, {{UINT64_C(0x225395CFCAF71198), UINT64_C(0xEE223712CA3F67CF), UINT64_C(0x972B019981280061), UINT64_C(0x0CB20E7A280ECC12)}, {UINT64_C(0x06F04DA870F54717), UINT64_C(0x5288425E410B9712), UINT64_C(0x6C29A51474CEFB4A), UINT64_C(0x4218ECCA849E2FD6)}}, {{UINT64_C(0xD85663A3B33574B6), UINT64_C(0x7469CFB1FAF7D3A2), UINT64_C(0x9C587EC43CFA8876), UINT64_C(0x5DAE46AEDB24ED63)}, {UINT64_C(0x66C8DA33C413E494), UINT64_C(0xB8B256B665942568), UINT64_C(0x0F09178EA7A4CAAD), UINT64_C(0x577D4ADCAFEBC90B)}}, {{UINT64_C(0x49009BA692D6C3B4), UINT64_C(0xE9CF4915B884FAAC), UINT64_C(0xC12377D36F3DBE23), UINT64_C(0x2F6E0E86EA6B680C)}, {UINT64_C(0x5DF2CD5AE6C5E24D), UINT64_C(0xAAE7E145EE608DD3), UINT64_C(0x5357CFF28A7ED956), UINT64_C(0x8377126C3912DBA4)}}, {{UINT64_C(0x6E83A6C6F83BC3F6), UINT64_C(0x3633E1E4C0CC09C6), UINT64_C(0x0C2A268BBC4B73A5), UINT64_C(0x688369D3125688EB)}, {UINT64_C(0x64EE03E173E75809), UINT64_C(0x21773EE98E110C46), UINT64_C(0xF0BC6BE9A6A648B1), UINT64_C(0x399121837E0041E7)}}, {{UINT64_C(0xCC09774A26F5716E), UINT64_C(0x01CB17F9FDFB59E9), UINT64_C(0xA88D1269AE8938B4), UINT64_C(0x99A40D17D13047C9)}, {UINT64_C(0xE469C9846FC672A3), UINT64_C(0xDA6534B65638B928), UINT64_C(0xC56EAB20CDE40C83), UINT64_C(0x2C1582B1BD93AF10)}}, }, { {{UINT64_C(0xE4C19851A3F45C37), UINT64_C(0xCA0FEFF2C7D78FE9), UINT64_C(0x027B41D89A7E444B), UINT64_C(0x1F1B242F15D38CBB)}, {UINT64_C(0x1C6C132CF1F50AB9), UINT64_C(0x2A02A3A45DFE7530), UINT64_C(0x2B1EB8E26E29159F), UINT64_C(0x5F3F4AB72EEDE876)}}, {{UINT64_C(0x362CE0130F2DF95C), UINT64_C(0x82E4E19226480BFA), UINT64_C(0x9AAC9A966BEFF080), UINT64_C(0x5A1636F68EE2B59C)}, {UINT64_C(0x600E0339FA049CCB), UINT64_C(0x56680F80F2F57163), UINT64_C(0x2C395CC17B4240A7), UINT64_C(0x32EDFE4A9C86BB64)}}, {{UINT64_C(0x8D9842AB711AEF69), UINT64_C(0x7A1C2429890831F0), UINT64_C(0x924478DF54CDA99A), UINT64_C(0x791A1D45E25A02E2)}, {UINT64_C(0x1433F569170F4C21), UINT64_C(0x9F42C8C1CA5F8BD8), UINT64_C(0x377740F7067B3201), UINT64_C(0x75145FFF2ECE5D81)}}, {{UINT64_C(0xCBFE782A39638F43), UINT64_C(0xB0C0EC09E07553D2), UINT64_C(0x8D1C41F7115C673A), UINT64_C(0x8510551AEB39E385)}, {UINT64_C(0x92000181BA275803), UINT64_C(0x8AF63F4A27B9A42A), UINT64_C(0xD50ECF0F52297029), UINT64_C(0x1DCA33A566883C56)}}, {{UINT64_C(0xB2C44933C51DF9D9), UINT64_C(0xCA6F9FB0E66D80AE), UINT64_C(0x78CD2EEB82839BA4), UINT64_C(0x8FF8BCC8F7AFBCF3)}, {UINT64_C(0x5AD00C704164959B), UINT64_C(0xAD901C71E83ED8D5), UINT64_C(0x56FFC0A92B52650D), UINT64_C(0x0689B171780126A8)}}, {{UINT64_C(0x2E902A395EAC1DD8), UINT64_C(0x7681EABA7CAC283F), UINT64_C(0x03608CD878525B7C), UINT64_C(0x09665B805EB95540)}, {UINT64_C(0xF09F9805306EE831), UINT64_C(0xFB00B1C6E41D453A), UINT64_C(0xD8BB95597C93E727), UINT64_C(0x3B74FEE72CE63FD8)}}, {{UINT64_C(0x73F48B330A22DABA), UINT64_C(0x797DE0FBC8FC3E20), UINT64_C(0x69C1BEE29E79222D), UINT64_C(0x3052F67A1DF4C549)}, {UINT64_C(0xFE9128A9ED78B6FB), UINT64_C(0xD9460CFF29CCF94F), UINT64_C(0x53737484C1FD1DAA), UINT64_C(0x83ADCD011EDAEEB2)}}, {{UINT64_C(0x189EC9AA2BA4195A), UINT64_C(0x61345757C522BE92), UINT64_C(0x35BAB72A39EFB05D), UINT64_C(0x82B27322AE0AC461)}, {UINT64_C(0xFEBF0F8CC07F4382), UINT64_C(0x1CA2B3D7DAD2ED8E), UINT64_C(0x4800A0370A27F89C), UINT64_C(0x77D1B2FC9815D971)}}, {{UINT64_C(0xF9F46089CA0FC66A), UINT64_C(0x5BC406DE8C23E4E1), UINT64_C(0x1D7F3BA98DBF6DD5), UINT64_C(0x685B9111679D5587)}, {UINT64_C(0x93554084B85BE0D0), UINT64_C(0xB081E9CA7B9EB16C), UINT64_C(0x58C428DC60F0D0B0), UINT64_C(0x12442C1A30B3C6D9)}}, {{UINT64_C(0x147B843C567226BE), UINT64_C(0x2B2BFFAB429A8FFA), UINT64_C(0x7A4678EBCD435C2F), UINT64_C(0x200E85133C0B887A)}, {UINT64_C(0x9D457AAD90605CDD), UINT64_C(0x6736A242157F29A5), UINT64_C(0x779B0D25549FCA4D), UINT64_C(0x57477EE917FDB4D9)}}, {{UINT64_C(0xD9B15FD1ECF06CDD), UINT64_C(0xECF75FC0C1CC2CFC), UINT64_C(0x273867C3A56B39E5), UINT64_C(0x72F3ED4579340B7D)}, {UINT64_C(0xF31C9E4C55B6C9B9), UINT64_C(0xED96826E0448FE57), UINT64_C(0xE2DF54AD8BB7A02F), UINT64_C(0x945E7B6BD79D71CC)}}, {{UINT64_C(0x32B6CE429270E878), UINT64_C(0x980C8F6ED6EEBEB9), UINT64_C(0xC5717C8555808237), UINT64_C(0x4469D0A0CCA3F298)}, {UINT64_C(0x2B9DD7E91A18C0E8), UINT64_C(0xE9D124016A0EC412), UINT64_C(0xF889DE9831F44B32), UINT64_C(0x692EE1E678854A7F)}}, {{UINT64_C(0xF2360597ADEECA22), UINT64_C(0x94623EBC99A4C198), UINT64_C(0x5A0D49C4E4169D20), UINT64_C(0x7BE2C5BBBF0384F0)}, {UINT64_C(0x42DB0D408C537851), UINT64_C(0x198A09A465C50782), UINT64_C(0x72F80BB745AD7EE0), UINT64_C(0x4F83164B11FCED06)}}, {{UINT64_C(0x54E5B07C95712AF0), UINT64_C(0x95E7F5D91E893387), UINT64_C(0x383BC5AEC61D7766), UINT64_C(0x09F626ED681C28DD)}, {UINT64_C(0x0D32B726DF97E3C9), UINT64_C(0x2AC622387C7C4786), UINT64_C(0xECEA0C6AD3F5AD40), UINT64_C(0x0D26633EA870A132)}}, {{UINT64_C(0x40A05A14C3D42D26), UINT64_C(0x06577CA1F3BDE0E3), UINT64_C(0x03DAA258418B73FB), UINT64_C(0x205E02E60EFDEB86)}, {UINT64_C(0xF5479E4D99F90D56), UINT64_C(0x4E699BF3368CB6E3), UINT64_C(0x534F674362E4A879), UINT64_C(0x18473603A9D78191)}}, {{UINT64_C(0xA23D79CF5C1ED4F9), UINT64_C(0xFADE1CF5F2248B01), UINT64_C(0xA3D528276F4D2164), UINT64_C(0x1F211C0310B731E5)}, {UINT64_C(0x0B415884D97229E2), UINT64_C(0xCABB7D8980FCC283), UINT64_C(0xDB9BC75298EF388A), UINT64_C(0x50AF2A4A93E80262)}}, }, { {{UINT64_C(0xD11E80F1D57DD821), UINT64_C(0x11CAE463DDA2AB29), UINT64_C(0x21CAFD16E628F315), UINT64_C(0x296A84E97DF70CD4)}, {UINT64_C(0x9ECF75136E9EF995), UINT64_C(0xAE87525706E28855), UINT64_C(0x78E1B7E95DED383C), UINT64_C(0x6C5D8ECC5E940F7F)}}, {{UINT64_C(0xCBD3ACB9998EE9A3), UINT64_C(0x990CDFF6D0DCF584), UINT64_C(0x0FB4346CC7CE5DDA), UINT64_C(0x5EDEEF9B355E268F)}, {UINT64_C(0xACD8B4A2C215036D), UINT64_C(0x70D3699591C7486B), UINT64_C(0x72D5243D52C6694B), UINT64_C(0x54163B48E5F8B99C)}}, {{UINT64_C(0xD2AEA2FF1D76A94A), UINT64_C(0xC5B4FBF1379F780B), UINT64_C(0x700042F7B33AC708), UINT64_C(0x7DA790BF8183E0CA)}, {UINT64_C(0x95681FE6EBA72FA8), UINT64_C(0x1F0A390EE22E254E), UINT64_C(0x465A58F8BF07A8A5), UINT64_C(0x840EA2E7FB1FCE40)}}, {{UINT64_C(0xD955C5B544048484), UINT64_C(0x7107D5956935C5E4), UINT64_C(0xFC6574448A0FCE44), UINT64_C(0x97DF2B4D2800E517)}, {UINT64_C(0x0B1BB3282C482414), UINT64_C(0x152614CC4E48CDBE), UINT64_C(0x48051FB642EDE4E0), UINT64_C(0x91125B933DBFFE52)}}, {{UINT64_C(0xA2F526C7CF898F54), UINT64_C(0x8788CA1283080857), UINT64_C(0x2F4427234562F7B0), UINT64_C(0x837772ABC044560C)}, {UINT64_C(0x51AD2F7131BCB2EA), UINT64_C(0x0F1D33FCAFC5C03D), UINT64_C(0xDBFE541F7BD352A4), UINT64_C(0x8B44139964B8343D)}}, {{UINT64_C(0xFEB96B8C44DCD145), UINT64_C(0xEEB3007CEFF22D0D), UINT64_C(0xAF64DFC1252A8C8F), UINT64_C(0x5D9B0A05D131E0C5)}, {UINT64_C(0x28C943EFABFED144), UINT64_C(0xDFBF730CB6A2273D), UINT64_C(0x6CC5BE44E2A1BFBD), UINT64_C(0x55FAC03309030FCD)}}, {{UINT64_C(0xFAA58543728F39EC), UINT64_C(0x9B2F10BA40B37B15), UINT64_C(0x96505C7F7254A419), UINT64_C(0x04F4ACE5879C7FF9)}, {UINT64_C(0xC0B4B576BC5FDA53), UINT64_C(0x12549929F7ABCD3C), UINT64_C(0x00F5631E313FEC34), UINT64_C(0x89EA4459798C7CFB)}}, {{UINT64_C(0x671137B50E2020C1), UINT64_C(0x77727861A4DC66C3), UINT64_C(0x8CE05ED181492A26), UINT64_C(0x42BEA541A0C3F612)}, {UINT64_C(0x6D39E3D1B0E461EB), UINT64_C(0x459A8E1309FA806F), UINT64_C(0xE2A185C1466CB93B), UINT64_C(0x17D131CEE21ECB34)}}, {{UINT64_C(0x2141E262387A15BF), UINT64_C(0x675B5E7C6BE61C42), UINT64_C(0xEEC1BDD4F1CF93EF), UINT64_C(0x6ACF383823BAB1F9)}, {UINT64_C(0xA2F84E23B0B39C86), UINT64_C(0xE955DBBCE244E0E3), UINT64_C(0xE0155980B7A8102A), UINT64_C(0x1E117DC8B23012FA)}}, {{UINT64_C(0xC92A36AA6EB36280), UINT64_C(0x5AED3A1D5E906D78), UINT64_C(0x8D336221AE4E430A), UINT64_C(0x3F184F1DD3AA50AD)}, {UINT64_C(0xD14810EC916D9741), UINT64_C(0x2900169F3322D9B3), UINT64_C(0xAFF1A06004728254), UINT64_C(0x89C4C67326F60B5F)}}, {{UINT64_C(0x5216E0AEB7F0D157), UINT64_C(0x3B8D2226C9F38AAD), UINT64_C(0x283E3E3FBB34AA79), UINT64_C(0x94DA80FA565CAB83)}, {UINT64_C(0xDDB51943E6ED4A46), UINT64_C(0xF3AFFA9A7CDD5FE6), UINT64_C(0x0AB493CCB648A84F), UINT64_C(0x128356B6F15EE45F)}}, {{UINT64_C(0xD2AD34F4BD0F02C4), UINT64_C(0x3DC9B6D1719BCF1E), UINT64_C(0x11EDB8F112EB5AE8), UINT64_C(0x33AC71D871180F90)}, {UINT64_C(0x0AE988FEB59621D7), UINT64_C(0x32042B528F348211), UINT64_C(0x7E6787C4EB0CEBD3), UINT64_C(0x8C4D254926B8A526)}}, {{UINT64_C(0xA3B461544D40ED72), UINT64_C(0x3A096546F6CF3972), UINT64_C(0x9C7BC931B3E46D8C), UINT64_C(0x85B77BAD90486C75)}, {UINT64_C(0x95B706E56EBD35E0), UINT64_C(0xC1E18243101E098E), UINT64_C(0xF17C23FFF01C17E1), UINT64_C(0x3223527285EC224E)}}, {{UINT64_C(0xE816235DFD24FA16), UINT64_C(0x5306CBC30B3AEBD7), UINT64_C(0xDEF60A9A8BE25CB7), UINT64_C(0x4B889A0F512999C2)}, {UINT64_C(0xAB86A7F867B29FD9), UINT64_C(0xB81C532DB5461BCB), UINT64_C(0x810E9A0CD34D9819), UINT64_C(0x1E3530093092515D)}}, {{UINT64_C(0x4682633921FB0BD9), UINT64_C(0x9CCE9A43003BAE50), UINT64_C(0xCD2216C32EB45B4A), UINT64_C(0x13598548C7E0F2C3)}, {UINT64_C(0x8B0BFD7254611984), UINT64_C(0x705CB52589C0B05A), UINT64_C(0xD9073D87CE880DD8), UINT64_C(0x1EA534CD003DCAEB)}}, {{UINT64_C(0xC7AAC256C58B4413), UINT64_C(0x301109D6E8054F96), UINT64_C(0x0A1F44D29C7E7860), UINT64_C(0x55D122BB96F15424)}, {UINT64_C(0x9A63098F1C14A8A9), UINT64_C(0x8E01A9DC4221CDFB), UINT64_C(0x11C91FCF357B360A), UINT64_C(0x70C47AEA036A3CF4)}}, }, { {{UINT64_C(0xC0457C4F036A843D), UINT64_C(0x6E3E0801F1F593CB), UINT64_C(0x1AADF2D88C53873B), UINT64_C(0x5CEC5C7B0D140C8D)}, {UINT64_C(0x4341A9AB328002E4), UINT64_C(0x11F22331C410D034), UINT64_C(0x0FCF69EF5DB6A39D), UINT64_C(0x3DD32A53B84FDA1F)}}, {{UINT64_C(0x19E52339AF8C811A), UINT64_C(0xC8B8380092D46C4F), UINT64_C(0x891C4185CA8463A3), UINT64_C(0x5B51651F98F3FF1B)}, {UINT64_C(0x3D1496070FB39DCA), UINT64_C(0x39ECCDE2B1051394), UINT64_C(0x3633DE271A14522B), UINT64_C(0x5FE551147C59A9A5)}}, {{UINT64_C(0x68C8E0C62F0B507F), UINT64_C(0xDABC8EEF05B62C5E), UINT64_C(0x297C943AE6165C1E), UINT64_C(0x337C6B947D7CA6D6)}, {UINT64_C(0x66F98FE4D6066191), UINT64_C(0x745BFEBA58945DA9), UINT64_C(0x600447873B29A546), UINT64_C(0x2815651EE2D4EDF2)}}, {{UINT64_C(0x54A3BE7463661218), UINT64_C(0x89C5636415E79415), UINT64_C(0xE03C6963405E4932), UINT64_C(0x86E101EA9A619956)}, {UINT64_C(0x47BAF2F3400DC92B), UINT64_C(0x5C44512C291E4059), UINT64_C(0xD7F84B8EEC6D7BF9), UINT64_C(0x6CF4254025AB8D79)}}, {{UINT64_C(0xD6E1B75DB885DAFC), UINT64_C(0x7A33CE4B6128014E), UINT64_C(0x80DF9948EA9FF260), UINT64_C(0x99E0A11CD2B5872B)}, {UINT64_C(0x960BDC3DE2435510), UINT64_C(0x4B0ECC5314F7A99C), UINT64_C(0xE815DB8B5AC6170B), UINT64_C(0x3095615617D5F2DD)}}, {{UINT64_C(0xA035E3CE57166FCE), UINT64_C(0x71AD409540A75B80), UINT64_C(0x639C4EA7DB7D0BFB), UINT64_C(0x7A90BE97B12DBE6B)}, {UINT64_C(0x091AA30F75F86A60), UINT64_C(0x67C0F795509AEEFC), UINT64_C(0xF028C12A331629C5), UINT64_C(0x90D26B1C8A1F7478)}}, {{UINT64_C(0x6F01554EB6AC2AD5), UINT64_C(0x9DD0576EBC9A48D6), UINT64_C(0xAB37201397AE2605), UINT64_C(0x1525D8B5BB83852B)}, {UINT64_C(0xD50680C3E46E4C61), UINT64_C(0x29FBBA5CECB8F06F), UINT64_C(0x60A48AB4B16637A3), UINT64_C(0x8BB47967CD1490D3)}}, {{UINT64_C(0xA35A01874B7C7EA6), UINT64_C(0xFE01521AB4D6409A), UINT64_C(0x57CECE628FDE1E30), UINT64_C(0x1A9A9B2DF4F51D55)}, {UINT64_C(0x0D33556BE221AC58), UINT64_C(0x0A4A1A34152508AD), UINT64_C(0x1FD61DA10144AA33), UINT64_C(0x4804BE6AEDC7C5F8)}}, {{UINT64_C(0x071EC8155B363A84), UINT64_C(0x359C2A9FFE11ED05), UINT64_C(0x0FDF80C9B8BBF9BD), UINT64_C(0x928E51A4103ACCBE)}, {UINT64_C(0xD152B6E7D5E8A222), UINT64_C(0x6368E3A8CBE022C9), UINT64_C(0x2E5055DE3128B659), UINT64_C(0x51E23651D21F1062)}}, {{UINT64_C(0x5CE999D734834BF7), UINT64_C(0xE386394C3DC831E9), UINT64_C(0x6DBD5ECA7FE48564), UINT64_C(0x804BC07F556841A5)}, {UINT64_C(0x2A8B616C229A9175), UINT64_C(0xAEEB533AA1B3EF97), UINT64_C(0x9D858F9D6F145037), UINT64_C(0x247FFAB07F6A8EBB)}}, {{UINT64_C(0xE616E779099EB4F3), UINT64_C(0x4F360D2EF1B1926C), UINT64_C(0x28EE1F9117055397), UINT64_C(0x9994D7FF844AFCF3)}, {UINT64_C(0x8824A94912CBD801), UINT64_C(0xA3AFED4D6A4484DD), UINT64_C(0xCB16CD673B5E36A5), UINT64_C(0x5490C30DBC3BBEA9)}}, {{UINT64_C(0xEA43CA5AD7601122), UINT64_C(0x9CF2A15BD248EB72), UINT64_C(0x4CE8AB75B71D18D0), UINT64_C(0x2576C5B1041A19A5)}, {UINT64_C(0xDE20FD028CC1496E), UINT64_C(0xC9FE5B0C0BE51831), UINT64_C(0x9DC17E323A53ABBC), UINT64_C(0x94E24DD9F4C806FA)}}, {{UINT64_C(0x2A9CF5F10DF1A4B3), UINT64_C(0xE019675415063C08), UINT64_C(0xCE9CF2C6CCF88F77), UINT64_C(0x51ACC7B5EFE91C6C)}, {UINT64_C(0x0C2302EFA799FE2E), UINT64_C(0x5EE756A469C0D117), UINT64_C(0x7E907EC2F4EAB1A1), UINT64_C(0x19EEF95BD98022DD)}}, {{UINT64_C(0xB170D483A8E7FFA5), UINT64_C(0x2052600A39180FAC), UINT64_C(0x8EAD52D4A68AF290), UINT64_C(0x01B88CFEFF9E3641)}, {UINT64_C(0x3D9077F765BC2D0C), UINT64_C(0x2AF9CF673ABCDB1C), UINT64_C(0xEA104E747295DADA), UINT64_C(0x7DF23470EB1E5D6E)}}, {{UINT64_C(0x0F54D98D8E53F40B), UINT64_C(0xBFC22E9BAF360481), UINT64_C(0x309973B6E132666B), UINT64_C(0x1F40D11F25E783E0)}, {UINT64_C(0x8EEBC9D7F00AC3EB), UINT64_C(0xBD725D822F9ADCC7), UINT64_C(0x4776781066EFDDCC), UINT64_C(0x60B0B1004ECCAF67)}}, {{UINT64_C(0x498E2074B98C7E96), UINT64_C(0xBEBF518308BF31A9), UINT64_C(0x00DD4AAD3894DBE7), UINT64_C(0x66C047A4429878F6)}, {UINT64_C(0x16F2CB336D0F1AB1), UINT64_C(0x5FA2F18158669ACB), UINT64_C(0xFA4B2F49486F1BE7), UINT64_C(0x1ECAAF6B5698F41B)}}, }, { {{UINT64_C(0x2999C2124DCC455E), UINT64_C(0x83897E49BEF617B8), UINT64_C(0x6B49CE265A218E0F), UINT64_C(0x49A5C9EB88EF7EA7)}, {UINT64_C(0xF0EDA5FFF63EC82C), UINT64_C(0x736D933DEAD471CD), UINT64_C(0x10E4431DDF8071C4), UINT64_C(0x8C59C10738E1523C)}}, {{UINT64_C(0x569FB74E5A54A4AB), UINT64_C(0x72788868F3384C14), UINT64_C(0xBC840717107B417F), UINT64_C(0x6682C1077E13210C)}, {UINT64_C(0xB3359FC277B20150), UINT64_C(0xEB923E66A9E03222), UINT64_C(0x490C39FCA10CF332), UINT64_C(0x69099C2D49BA035D)}}, {{UINT64_C(0x6498672003CB2C6E), UINT64_C(0x994054A1328B22BA), UINT64_C(0x4155C6B96F0542DA), UINT64_C(0x216CF760A3B93FFB)}, {UINT64_C(0x744861845C2AD753), UINT64_C(0xE517984EA0CD3660), UINT64_C(0x6530BC863D7DA8A1), UINT64_C(0x04328CF92E46CA79)}}, {{UINT64_C(0x4100ADED4798CD35), UINT64_C(0xC832796D635BAECD), UINT64_C(0x7EF1EA955B80E18C), UINT64_C(0x6889A91B426B1AA9)}, {UINT64_C(0xC40A0A870927C6F8), UINT64_C(0xD60CFD1C2B86ED45), UINT64_C(0x98731DFFD57350A1), UINT64_C(0x1C52EAE91DE4341F)}}, {{UINT64_C(0xC287E33B23A40FAA), UINT64_C(0xB96D9F517A633BDC), UINT64_C(0xF6A5B779E6D0F326), UINT64_C(0x10203FE1F619DE4B)}, {UINT64_C(0x011FB53EC4F18BF8), UINT64_C(0xAEBB82F6BCA32CA0), UINT64_C(0x06BF8ED5F881818D), UINT64_C(0x3A6A3E3518247E6A)}}, {{UINT64_C(0x3BF2E96E00625DC1), UINT64_C(0xD81AD1565A288F80), UINT64_C(0x04C3269EB7CE9B13), UINT64_C(0x3E18EAFC2F9E2713)}, {UINT64_C(0x20F0E05D9D0BC74A), UINT64_C(0xACDB4B75D8140790), UINT64_C(0x12918A7EF1B5B265), UINT64_C(0x22A70AF96896342E)}}, {{UINT64_C(0x326A28A29C4B6B08), UINT64_C(0x21302F37A17D3D57), UINT64_C(0x181378E7CE36F438), UINT64_C(0x42B07EBAFED12DE1)}, {UINT64_C(0x081DDD200468AD4C), UINT64_C(0x32822EC364DF34AE), UINT64_C(0xE9F8D7C204B2192D), UINT64_C(0x6ABC7220918666F8)}}, {{UINT64_C(0x9333070104AF3956), UINT64_C(0xEEB7AA8E872BD30D), UINT64_C(0xFC96D106D0E67494), UINT64_C(0x516028CF3A918DFB)}, {UINT64_C(0xFAF0B6F7FB27B6EC), UINT64_C(0x0FAD73AD515DA78D), UINT64_C(0x5F136068D8CF1934), UINT64_C(0x0A526E04B6052802)}}, {{UINT64_C(0x20DF0DEBE4685212), UINT64_C(0x71D4BAC1A41B293F), UINT64_C(0xBCC32A2F2FA8BBAC), UINT64_C(0x32A8723AF30CC343)}, {UINT64_C(0x71E6DAAFEF95ACFE), UINT64_C(0x27D158F69F445394), UINT64_C(0x2140F78DE186B246), UINT64_C(0x4CAF98C3CB1C83AD)}}, {{UINT64_C(0x94E264FCB6F63AA9), UINT64_C(0xF4637B024D0FE485), UINT64_C(0xA4BC0A03069CCB4E), UINT64_C(0x99A81E379E25E817)}, {UINT64_C(0xE3B804A78F4D37BB), UINT64_C(0x57F272A5E38E654C), UINT64_C(0x00D1852C05928F65), UINT64_C(0x3031B7134345DD06)}}, {{UINT64_C(0x6E42AF1157536140), UINT64_C(0xDC5B7CDC005A403F), UINT64_C(0xE6EE185E26527417), UINT64_C(0x1003D0137C685BCF)}, {UINT64_C(0xC2206BF6192979E6), UINT64_C(0xD1C370DB6FE38214), UINT64_C(0x78D105B792F3C044), UINT64_C(0x2F0DF6B8BFDF8DFA)}}, {{UINT64_C(0xB02FCA3844D04C4A), UINT64_C(0x956A2F7CA44566C6), UINT64_C(0x60672DF39F1F09C6), UINT64_C(0x6459A9492160C362)}, {UINT64_C(0xDAE5434108714451), UINT64_C(0x48B77A0DBFFD7CF6), UINT64_C(0x615ADBFE3EDBC8D4), UINT64_C(0x3338E55735B67D2F)}}, {{UINT64_C(0x601D49D1DD24A0F0), UINT64_C(0x60A48DB748EF27B9), UINT64_C(0x97F2212C97A8BAC6), UINT64_C(0x376B0292155AB524)}, {UINT64_C(0xA25881BA62E2A961), UINT64_C(0xEB74CC802B8C56F7), UINT64_C(0xBE5C5DD4DA57C41A), UINT64_C(0x53D0D0372D16AFA0)}}, {{UINT64_C(0xE47C9EABCA291206), UINT64_C(0x25DADB6442D5C667), UINT64_C(0x8C154CB6D886993E), UINT64_C(0x11DEC39C806B932F)}, {UINT64_C(0x51A4DCF313D4B4E5), UINT64_C(0xAA1DAD6D9D1D822A), UINT64_C(0x2BB2E14DCEEF2E29), UINT64_C(0x429C13C7B2343BE3)}}, {{UINT64_C(0x4E8E953F297F709D), UINT64_C(0x23183A3D262D862A), UINT64_C(0xE164A10DEA12D93F), UINT64_C(0x386C2873FE703920)}, {UINT64_C(0xD59E1582E5C51C7E), UINT64_C(0xA8C93B5B020F6A2E), UINT64_C(0x51518BD0160CD058), UINT64_C(0x3337801AB1D38AC7)}}, {{UINT64_C(0x6E2515332F5D9E25), UINT64_C(0x88E76135B0D6B0DB), UINT64_C(0x5C1978329E6762D1), UINT64_C(0x1232677384E620AC)}, {UINT64_C(0x3B88DF270E2694DD), UINT64_C(0x30FED9E330A23CAA), UINT64_C(0xE12DD93EA23DF142), UINT64_C(0x06778F512EA77C07)}}, }, { {{UINT64_C(0x5D5BE00E49E5F6B4), UINT64_C(0x2F47E7C7721EF9DC), UINT64_C(0x338F7B007EAFC098), UINT64_C(0x0F5F06E3AF8C2475)}, {UINT64_C(0x2A4B845C63122B22), UINT64_C(0xED44006089A4CE9A), UINT64_C(0xC9EEB6409A86D9BC), UINT64_C(0x12C3E0F32F39B439)}}, {{UINT64_C(0xB444B88B17766F6C), UINT64_C(0xF9B100E6A41FD692), UINT64_C(0x81EAFCD15C149B30), UINT64_C(0x37DD6F6E1D521A1E)}, {UINT64_C(0x14DBE8C3389DCD6E), UINT64_C(0xCD24D6550DCBC7FC), UINT64_C(0x05F8D48EE00F9102), UINT64_C(0x403954E6509D18D4)}}, {{UINT64_C(0xA04FDDDFE4FE16EC), UINT64_C(0xB9E7FA7390E15C0C), UINT64_C(0x7D6A7206C77FAB6B), UINT64_C(0x3FFDCCD13E221F12)}, {UINT64_C(0x120C05B147B5BB7F), UINT64_C(0xFA3614C05B7E2B96), UINT64_C(0xF3A4F07F4A6AC6E0), UINT64_C(0x0324BF48C8AD4F23)}}, {{UINT64_C(0x508A037055DF2F18), UINT64_C(0x1C6C91EAB872F209), UINT64_C(0xDC3F6C5A8E12F437), UINT64_C(0x65F5058FC91AFD75)}, {UINT64_C(0x0C43613D5A859A1D), UINT64_C(0x83A2610E5BF96A6B), UINT64_C(0x1A98AA4C1496AEAD), UINT64_C(0x3AB1CE5EE6CAA901)}}, {{UINT64_C(0x9420ABFEFFB3E411), UINT64_C(0xCE60976031404E74), UINT64_C(0x3D4C23C502C49837), UINT64_C(0x6B79FB14D0868A3C)}, {UINT64_C(0xB4EEE8DB6B5861EA), UINT64_C(0x495E2B469D948195), UINT64_C(0x2BB0BD941CE15EC9), UINT64_C(0x6CE79F80DED25955)}}, {{UINT64_C(0xA6B98C1D5820DF65), UINT64_C(0xE8284737909356B5), UINT64_C(0x38E8609A091340E1), UINT64_C(0x98EC077B10666012)}, {UINT64_C(0xFB243B1EBF075DAE), UINT64_C(0x32312BACA270FE31), UINT64_C(0x214511200CAA5F8E), UINT64_C(0x8F60118F2A515015)}}, {{UINT64_C(0x4F211C9ECBDEB88E), UINT64_C(0xF6D3CC3AB6D680FD), UINT64_C(0xE193829D8BF4B4A7), UINT64_C(0x3223EF4E2D620371)}, {UINT64_C(0xC3E35420C0E5245A), UINT64_C(0xD3F4F894B4ADE2EA), UINT64_C(0x464FCB6CF2CE985E), UINT64_C(0x79CF596D7B987FA7)}}, {{UINT64_C(0x0730748C0C0016FF), UINT64_C(0xD02115C5A2949069), UINT64_C(0xAA6F794D40E9C7F9), UINT64_C(0x9514FA7B79149C37)}, {UINT64_C(0x6E2F27785A46BCE0), UINT64_C(0xF55D46C60837ACD5), UINT64_C(0xF965C4681E4223E6), UINT64_C(0x0BFF0A9185D90A07)}}, {{UINT64_C(0x9ED903581923C8AF), UINT64_C(0xC425B633A470AE00), UINT64_C(0xF9F4B1621C50FDAD), UINT64_C(0x0999D072A8CA2BD5)}, {UINT64_C(0xCB122FBDAF74D4C3), UINT64_C(0x372C13F02C283752), UINT64_C(0x9F42A90382138B19), UINT64_C(0x573A2CEE3EB8CB95)}}, {{UINT64_C(0x6C3A6BE33AC2E191), UINT64_C(0x4149E0EB1B222DB2), UINT64_C(0x5BA91005A4AACC55), UINT64_C(0x176BD33D1BFADBD0)}, {UINT64_C(0x4AEAF14EA8DA0FEA), UINT64_C(0xB12401F9A7FF8E1C), UINT64_C(0xF1EF39AE0F192414), UINT64_C(0x95D433D3416743C1)}}, {{UINT64_C(0x29ECF54D9AA0C238), UINT64_C(0x3762F1D78FCA6419), UINT64_C(0x761D786A64D3AAA9), UINT64_C(0x7A8A677DDAEC7BF4)}, {UINT64_C(0xC2829EAD324676F4), UINT64_C(0x4E504A474D0B291E), UINT64_C(0x360CE7FEF8C4F384), UINT64_C(0x33A577B578CDA37D)}}, {{UINT64_C(0x1BBFC128333103FD), UINT64_C(0x3D36045CE45C9DBE), UINT64_C(0xA8D53F5A15C9013D), UINT64_C(0x99D62F8AA33FDCFD)}, {UINT64_C(0x73E539610A81F581), UINT64_C(0xD01AD20ED00BC0D9), UINT64_C(0x59701F4D1F6D9B73), UINT64_C(0x0F4EBFBCE098E536)}}, {{UINT64_C(0xBDB9368A91E3C062), UINT64_C(0xCD66A0B19B17AAE5), UINT64_C(0xB6636DD7B4537E05), UINT64_C(0x37D94B8E73B119CE)}, {UINT64_C(0xA5F8E90FC7428FF9), UINT64_C(0xE7E5B2B7F8EA9F03), UINT64_C(0xB7F20FB85B3506DA), UINT64_C(0x0F4AB6D5E494FFDA)}}, {{UINT64_C(0x3ACEE3BD85365933), UINT64_C(0x9D5223D3BF510114), UINT64_C(0xE0D7D9A7A08D01B0), UINT64_C(0x28FD329AB2F1F61F)}, {UINT64_C(0x3E16A2E2A5909DD3), UINT64_C(0x284A8708B4FECB35), UINT64_C(0x190F7B3A73D5BFBA), UINT64_C(0x7E07982E92EE4BBE)}}, {{UINT64_C(0xA30A4C2244945687), UINT64_C(0x657C0F2ED688A301), UINT64_C(0x9B558D4ABBB3E65A), UINT64_C(0x8044D57EA6E57844)}, {UINT64_C(0xF202E50EE3957E21), UINT64_C(0x4957E651CE62FCC9), UINT64_C(0xF7B9EBA4C4ECE0B8), UINT64_C(0x29532CEC61167229)}}, {{UINT64_C(0xE9DC8EA63EEF3D71), UINT64_C(0xEBF76BD43E8EC117), UINT64_C(0x48CEB78D2EA072B9), UINT64_C(0x82ECDFC473EFC32D)}, {UINT64_C(0x51B02CB3E2C89E7D), UINT64_C(0xE9D0740CF4D9100F), UINT64_C(0xBB556EFE8A5E3F48), UINT64_C(0x864E52DA1D01B44E)}}, }, { {{UINT64_C(0x5A75E0BD14EA6DC5), UINT64_C(0x09F2AA76532EFED7), UINT64_C(0xE6DAE0A983CE5A18), UINT64_C(0x00F9BCB7CEB4E78D)}, {UINT64_C(0x128FB51C71F79BF3), UINT64_C(0x78C7978880D5DBC3), UINT64_C(0x2752F02C9B816B9E), UINT64_C(0x88CFBA0CEB7622E2)}}, {{UINT64_C(0x845AB940268432A3), UINT64_C(0xA8D0231B2F94F6D3), UINT64_C(0xBDFB3F91FEC02130), UINT64_C(0x07A61AE45F62419F)}, {UINT64_C(0xD1C951DF192EBF1A), UINT64_C(0x22CDCFF5FA232E34), UINT64_C(0xDFDF121B3A7581DD), UINT64_C(0x9865ECA2710403A5)}}, {{UINT64_C(0x609F4527F8180BAB), UINT64_C(0x93AB107250A6D914), UINT64_C(0x299D5013E2EEE3BD), UINT64_C(0x36EFCE5B42959C14)}, {UINT64_C(0x49CDA60D1045FFCB), UINT64_C(0xA8B2492E45723371), UINT64_C(0xCB75789BF243FDBB), UINT64_C(0x8E1079D7871D500D)}}, {{UINT64_C(0x69852694DB14298E), UINT64_C(0xBAA92A9541A56B6D), UINT64_C(0xC73718483DBFDBA4), UINT64_C(0x94B3155C947747F8)}, {UINT64_C(0x97BCDD197552426B), UINT64_C(0x4FB3E76D32682121), UINT64_C(0x875AA0F78BC15FCA), UINT64_C(0x4065BCDFF1FD2315)}}, {{UINT64_C(0x2D1C0519B7F1ED04), UINT64_C(0xED9A1BB7EA2535E1), UINT64_C(0xE4728CD6ABAE813E), UINT64_C(0x2CD7D44721A771D0)}, {UINT64_C(0x88E2A78559B9E964), UINT64_C(0x2677FBD76F9B5374), UINT64_C(0x3967D6C52645B626), UINT64_C(0x8843F7DF5A1C315B)}}, {{UINT64_C(0x673CD273C7055A4E), UINT64_C(0x052AC45CEE827873), UINT64_C(0xC26B9214CE1981F3), UINT64_C(0x3C39C13C2B8EEF59)}, {UINT64_C(0xDD9E1B9B0B276D47), UINT64_C(0x6729A5347287F9A1), UINT64_C(0x43E1471C061DAD53), UINT64_C(0x6082FAD9118B56C8)}}, {{UINT64_C(0x9C3872AAF99186D6), UINT64_C(0x1D9E8DB675AC99BF), UINT64_C(0x6FA7A0FFE338DBD3), UINT64_C(0x1EDF44ECD1FEF2F9)}, {UINT64_C(0xBAF9D33A1F9114BF), UINT64_C(0x89AF08E53007B6A5), UINT64_C(0xAA04B1698436D917), UINT64_C(0x8381E76A6AFCF5E0)}}, {{UINT64_C(0xC51848A4C1D799BA), UINT64_C(0x6C3D43A97F40B34B), UINT64_C(0xE8DAE074A5CB7B95), UINT64_C(0x5375B1EEBB5F8AEC)}, {UINT64_C(0x461290EE507099E6), UINT64_C(0xB95934AA3BAD89AD), UINT64_C(0x9A6E5C22701A4D9C), UINT64_C(0x2CA791445E1389F6)}}, {{UINT64_C(0xBF82F7860E5108FC), UINT64_C(0x3620CCC4644D06DE), UINT64_C(0xB65DE8538E5C4753), UINT64_C(0x6DAB72419FEDFD16)}, {UINT64_C(0x4CECAC87546DCBA4), UINT64_C(0xA7BBE65D3E2D0684), UINT64_C(0x092AA490DA1E4FFA), UINT64_C(0x78F448BE41AD32AF)}}, {{UINT64_C(0x321580FE4A33F071), UINT64_C(0xBEA845D15EE5E685), UINT64_C(0xC73CAECE47AC8ACF), UINT64_C(0x0E15E55DA9F65F05)}, {UINT64_C(0x5FC47420A59506E7), UINT64_C(0x501417FF01DBD2DD), UINT64_C(0x8EF23280FB1205A6), UINT64_C(0x1AA26168E0F43AE8)}}, {{UINT64_C(0xD41F73B18149EB2A), UINT64_C(0xC297AF04AD95D531), UINT64_C(0x2017176F749E415D), UINT64_C(0x5AF89C738357CE9A)}, {UINT64_C(0x301F7C7908A0FF9C), UINT64_C(0x0C2999B598695C57), UINT64_C(0x856799576E4D8FF5), UINT64_C(0x2CC0FF3E6F493B1C)}}, {{UINT64_C(0xFE90F9044AF481F5), UINT64_C(0x0562C78B31BC4919), UINT64_C(0xAA44AA5670E4F140), UINT64_C(0x1B61DEB4A175159A)}, {UINT64_C(0x85315DE1A7A7E648), UINT64_C(0x4BC1F51D6C012B33), UINT64_C(0x40CB5DE3060CDEE6), UINT64_C(0x969F919632A1E138)}}, {{UINT64_C(0x3B317508E05F23B5), UINT64_C(0x7B1A93AE512D1156), UINT64_C(0x3A283415CB58EC19), UINT64_C(0x193A53A18E27CAD9)}, {UINT64_C(0xCF6BBEBA03DE1BA8), UINT64_C(0xFA5544CA47A02393), UINT64_C(0x8B3AAC1A8627F5EB), UINT64_C(0x02FAD2EC62EAF195)}}, {{UINT64_C(0x4F8D8ADA259CCF0F), UINT64_C(0xE4E6786B562991D7), UINT64_C(0xA1C63473597C3FD3), UINT64_C(0x1F5B9017ACAB6F16)}, {UINT64_C(0x95B201BD592D437A), UINT64_C(0x54432A75ED14F859), UINT64_C(0x67EF73FB0B551AC1), UINT64_C(0x0A48F0437F1AB9CA)}}, {{UINT64_C(0xECEE508E4A35445C), UINT64_C(0x80BE9F07B3EA6F9B), UINT64_C(0xD914B25687E4B78E), UINT64_C(0x97F79CC9F89B8E4B)}, {UINT64_C(0x6A5B4F2BC359FB12), UINT64_C(0x54E6E37A99CF6FFA), UINT64_C(0x1133C4B2F7C66CA8), UINT64_C(0x6F679B280345866B)}}, {{UINT64_C(0x0006F7A144E77CDF), UINT64_C(0xD8077F9F42033333), UINT64_C(0x0414ECE521EAF35F), UINT64_C(0x1211576B5623803C)}, {UINT64_C(0xEDADD215140309A7), UINT64_C(0xC349C6575EBAE3BB), UINT64_C(0xBD40427C821DE06B), UINT64_C(0x8949ACA33F5D2F97)}}, }, { {{UINT64_C(0xAC1F87E6022E3D44), UINT64_C(0xDFC17BEDB39F6B10), UINT64_C(0xEAAE416807119C4A), UINT64_C(0x8B3B40BCDBD47D36)}, {UINT64_C(0x6683A561861B7B59), UINT64_C(0xF9BFFB1713A6C76D), UINT64_C(0xE4E72EA4A30A05AC), UINT64_C(0x77C219E8BA0D2AD6)}}, {{UINT64_C(0x5019824E66BE6944), UINT64_C(0x811ACEBE7B131070), UINT64_C(0x9730DCF03BA34677), UINT64_C(0x5B9C5CF57BC9CFC8)}, {UINT64_C(0x1CBD950FB283C8CC), UINT64_C(0xF66DBDDA3973A325), UINT64_C(0x4EC5EBC26FA60257), UINT64_C(0x0C01D57736FF26B3)}}, {{UINT64_C(0xBB2219547CE2BE74), UINT64_C(0x23E44E0E841E6C0C), UINT64_C(0xE760D33D77C3824E), UINT64_C(0x5B656FBE7EB3CE34)}, {UINT64_C(0xEC50E509C5F3D66E), UINT64_C(0x5326C2B8496EF8BA), UINT64_C(0x3F9485F63D4B20D4), UINT64_C(0x11B74A8551C21B0E)}}, {{UINT64_C(0xC3EAEB0425E30336), UINT64_C(0xA9D6C70FA6E3637F), UINT64_C(0xF818C37E86F77F68), UINT64_C(0x786ED3C2C60DF35A)}, {UINT64_C(0xACA70EA0D56D705A), UINT64_C(0xCE61608C7BF4EF10), UINT64_C(0x49AD1CD81722C179), UINT64_C(0x1B84FBE9687F3222)}}, {{UINT64_C(0x8A0F4BF135EE0BA9), UINT64_C(0x42AD284603952A08), UINT64_C(0x1E0E1E3B3B60B4DD), UINT64_C(0x0DC1A947F5DCAD76)}, {UINT64_C(0x054BECA41F496E03), UINT64_C(0x8F02FDAB3AE6E6F6), UINT64_C(0x8851CFF49B71C9F5), UINT64_C(0x6BD7271CA7441F87)}}, {{UINT64_C(0xB019E3469EB6A2C3), UINT64_C(0x2B719034931E7550), UINT64_C(0x2B2CBEBD40698F1F), UINT64_C(0x375DB5914F1FC587)}, {UINT64_C(0x09843166676A79A4), UINT64_C(0x91848967B416D657), UINT64_C(0xB49EA7219FED6B27), UINT64_C(0x1FAC5650D080C8AA)}}, {{UINT64_C(0x205CD58858C4C2AA), UINT64_C(0xBEEE26F817F572EE), UINT64_C(0xE744AB674CB4DE3A), UINT64_C(0x37E34E18CBE989BD)}, {UINT64_C(0x95D9118B767D31B5), UINT64_C(0x9A34DBEC83E7C03E), UINT64_C(0xCAFDBD1AB8F70DD3), UINT64_C(0x1E68A6813909BB51)}}, {{UINT64_C(0xFE0A5DFF9FD96ABA), UINT64_C(0xBBFB1FDFD99B68DE), UINT64_C(0x5E232A4FE3F522BE), UINT64_C(0x768C2C54A6428D33)}, {UINT64_C(0xE9CFEDF9DBF1A575), UINT64_C(0x841721F24B83F9AB), UINT64_C(0xFAD9650A80A85361), UINT64_C(0x3158921104979759)}}, {{UINT64_C(0x1CF9F4B8EFBF2099), UINT64_C(0x63D5499BF571408B), UINT64_C(0x89C119FCEC3E74A6), UINT64_C(0x0525DDDF698E4DCD)}, {UINT64_C(0x43FCDDE47333A38C), UINT64_C(0x2150EAD480A912DE), UINT64_C(0x4B3BD2230A19CC55), UINT64_C(0x3553EB4E238AC64C)}}, {{UINT64_C(0x3A259F52FEC2371F), UINT64_C(0x8B03C50544863D3E), UINT64_C(0x1053E2D686BB6522), UINT64_C(0x400CE699F7086CBE)}, {UINT64_C(0x695B1EA003ED78DE), UINT64_C(0x00AE6D0916500E1B), UINT64_C(0x9F29B08914B01815), UINT64_C(0x269692B4C218D892)}}, {{UINT64_C(0x8660280DF0D44E79), UINT64_C(0x69D2968537C0F38F), UINT64_C(0x664B8146B9E24AD8), UINT64_C(0x277CB4DD1E695452)}, {UINT64_C(0xB1A02D4EDFBF05EB), UINT64_C(0x3B3493084A1426C7), UINT64_C(0x13B7961222204FE7), UINT64_C(0x04F80867BCB5CD9F)}}, {{UINT64_C(0x37BDBCAEE0852CBC), UINT64_C(0x2A6D7A23BE22764C), UINT64_C(0x4E0D43AC25AFD9FF), UINT64_C(0x1F6C9E14D16DD9EB)}, {UINT64_C(0xE37E3AB3B4B0F47A), UINT64_C(0x09E046FB6C476C3A), UINT64_C(0xB8F649D9B75FA2DC), UINT64_C(0x7962A8C4FAB1AC41)}}, {{UINT64_C(0x00E41470F6A1314A), UINT64_C(0x176380C3E4388464), UINT64_C(0xDB3405CD9B8A2B4D), UINT64_C(0x6299A1A67DE02ABC)}, {UINT64_C(0x9F6B9DE77BBE7BFA), UINT64_C(0x59F16F549D3098DD), UINT64_C(0xFEC29C8D3B5767FE), UINT64_C(0x67711BC064955759)}}, {{UINT64_C(0x34444EA3B1B07B5D), UINT64_C(0xB1D973B491FA2B4A), UINT64_C(0xEBEBEFB183403A0E), UINT64_C(0x56D520988E8A8EC6)}, {UINT64_C(0x11C93529A7E82D55), UINT64_C(0x9230AE03D525C399), UINT64_C(0x74E1CBB28DB46C82), UINT64_C(0x4C3383CC40BE5E15)}}, {{UINT64_C(0x33A52E73CDAD72F3), UINT64_C(0x1D2CCA33B9E77759), UINT64_C(0x26717716549406F5), UINT64_C(0x70DED57F5B3DB3E8)}, {UINT64_C(0xBA38F81343C85A67), UINT64_C(0x956F2DD735422BB3), UINT64_C(0x52D9FA9907486F18), UINT64_C(0x655791BF75D1D2C4)}}, {{UINT64_C(0xF434A9601FC9E0B3), UINT64_C(0x42A7B891BEDE92AD), UINT64_C(0x05A182D8A55A8009), UINT64_C(0x3404E08D38531612)}, {UINT64_C(0x2B5B2766F07D76E3), UINT64_C(0x94B1A98D1D77B90C), UINT64_C(0xA86C0EC84B18BB9F), UINT64_C(0x6532770F526A81E3)}}, }, { {{UINT64_C(0x4429A4E861CFE04A), UINT64_C(0xEE8673862C9CA012), UINT64_C(0x237A3040C32D1969), UINT64_C(0x400AD5990AE2DFAE)}, {UINT64_C(0x1603D10A213C0A18), UINT64_C(0x6EB8042D2B1E2A57), UINT64_C(0x4C9C1696C7CAF556), UINT64_C(0x79BE04A7E0C1A5A3)}}, {{UINT64_C(0x161781E33FCB8B14), UINT64_C(0x1383E3B8B1384C3C), UINT64_C(0x5129EA19B566626C), UINT64_C(0x8A1F86E4551DE02A)}, {UINT64_C(0x9C648CCEAEDBE04C), UINT64_C(0x0D4278ACFB200132), UINT64_C(0x466D452AC1E2D4A3), UINT64_C(0x832B0E6EB21B6E38)}}, {{UINT64_C(0x20101D7CED1D76C7), UINT64_C(0xC3282661C110D85E), UINT64_C(0xB8026CE4FFCA2DD7), UINT64_C(0x73B4EBA58BA48211)}, {UINT64_C(0xAB94FE21D8554E2C), UINT64_C(0x319E2FD781B2A181), UINT64_C(0x2C824DC537E8D3E2), UINT64_C(0x97CD457A09FCA0AB)}}, {{UINT64_C(0x8E4B5FBDC50116CB), UINT64_C(0x3D20CECECA631A93), UINT64_C(0x5F80606C545575D8), UINT64_C(0x45ED55DEF91C7908)}, {UINT64_C(0x91870A927CC1083C), UINT64_C(0xA3828E06D360FF5C), UINT64_C(0xFC9DFCDC84003D42), UINT64_C(0x0733C887FAC4667F)}}, {{UINT64_C(0x6F1F771ACC2FC31B), UINT64_C(0xDA9351A1902E8176), UINT64_C(0xFB9395AFCE3FF045), UINT64_C(0x17C28CA213820DAB)}, {UINT64_C(0xA1F596BCA684E6FA), UINT64_C(0x89228CC7DAD3995A), UINT64_C(0x5DBFD421C02E458B), UINT64_C(0x58C25045A2122AFE)}}, {{UINT64_C(0x2906450F018EADB0), UINT64_C(0x88A7A2369030C84E), UINT64_C(0x492BA7A333308084), UINT64_C(0x321388B95605F371)}, {UINT64_C(0x5F934C94626AE19A), UINT64_C(0xE2BD6C6701C7CCD9), UINT64_C(0xB07757B1EC0BBD52), UINT64_C(0x1E980338F9EDD2AC)}}, {{UINT64_C(0x5A5370748831457C), UINT64_C(0x0E0E22FB47E7B9A9), UINT64_C(0x7BE70594A225A259), UINT64_C(0x433DB05530946816)}, {UINT64_C(0x852EA9F9E2F2C3CB), UINT64_C(0xDC4E8E3A2D243848), UINT64_C(0x10F34AB81E887770), UINT64_C(0x29795D2CC89FC71B)}}, {{UINT64_C(0xE046B04BCFEC2C6F), UINT64_C(0xA1D3B5A02CA8256E), UINT64_C(0x93F7FDFAE87F767F), UINT64_C(0x2DF5693E35FA3837)}, {UINT64_C(0x71D9638C97884587), UINT64_C(0x175EA91F39E115EC), UINT64_C(0x14E16C31F41A27FC), UINT64_C(0x8B2682EAEB2F5913)}}, {{UINT64_C(0x2BCC6853798C7F28), UINT64_C(0x2F985A59DD7D3615), UINT64_C(0xA66519E141D2257A), UINT64_C(0x18731D74021F719B)}, {UINT64_C(0x7210472C360E9C20), UINT64_C(0x4FB48411329A9B35), UINT64_C(0xB33B6CB587D62CA5), UINT64_C(0x86226D9EFD0D7703)}}, {{UINT64_C(0xDD133F8BF67CB77C), UINT64_C(0x381E4D62F6ABEE80), UINT64_C(0x3236F0057DF85AE5), UINT64_C(0x88EBB3864610BB0E)}, {UINT64_C(0x895AA5398DB908D8), UINT64_C(0x848142E6104C4633), UINT64_C(0x467EE770B8012B2E), UINT64_C(0x193CBAED1B9210EE)}}, {{UINT64_C(0x737CD32BC1F44FC1), UINT64_C(0xCDF82B1C522B6209), UINT64_C(0x08F4BB70E0017F2A), UINT64_C(0x1565BCEF64738F26)}, {UINT64_C(0x0D2910B9684DCF67), UINT64_C(0x4ED1734BC6F3EB81), UINT64_C(0xCBEA79B6DA1D6BC8), UINT64_C(0x0470CE36EE6A41D6)}}, {{UINT64_C(0xECFD5C66BA05AF3C), UINT64_C(0x421D5540EB9BFAA8), UINT64_C(0xFC0E5AF2526CFF85), UINT64_C(0x7E17F1E653DC49A6)}, {UINT64_C(0x69BB1DFB1FAEB0A2), UINT64_C(0xDC95661AB3785ED4), UINT64_C(0x1F1D7395676D7CD0), UINT64_C(0x2C16BB9689C6412F)}}, {{UINT64_C(0x2335F20EEE414CA6), UINT64_C(0x56E0DDB2FEF5E042), UINT64_C(0x942D4E35D9DE2966), UINT64_C(0x80E92B8CCF63D583)}, {UINT64_C(0x158BE1B65D492C76), UINT64_C(0xFF096960C4F822D9), UINT64_C(0xC00FC7305AF79379), UINT64_C(0x07C49B0350D34E12)}}, {{UINT64_C(0x64678B2EC34836C8), UINT64_C(0xCC280DCB615FF066), UINT64_C(0x86C3C7479131EC98), UINT64_C(0x35B008CC2D151FAD)}, {UINT64_C(0x22C18852F8133FDC), UINT64_C(0x183BE4DC2FE8809D), UINT64_C(0x86589814CF98D56D), UINT64_C(0x52D8074D2F6E0DE4)}}, {{UINT64_C(0x33FF9F41C9274AA6), UINT64_C(0xAC30ACB4CA854AF1), UINT64_C(0x87A7BE53FBC994B7), UINT64_C(0x6E7E8B2ADBCD717B)}, {UINT64_C(0x3065A732CD494AB6), UINT64_C(0x6F977B8760FD7F57), UINT64_C(0x4C216EB4B74BAD54), UINT64_C(0x674F00F5F6061F7A)}}, {{UINT64_C(0xA8C224813164AFBB), UINT64_C(0x4C9E2F1D72A7AC55), UINT64_C(0xE3DAC3E379DEFE94), UINT64_C(0x193A1E0BBB9D953F)}, {UINT64_C(0x8852020C7E0957EE), UINT64_C(0xF7FD181EB62F8EF7), UINT64_C(0x0DE7EDDEE26B8860), UINT64_C(0x53A05575FD1B00DE)}}, }, { {{UINT64_C(0xE5D63E1B63E0C8FC), UINT64_C(0x6849B530C684016A), UINT64_C(0x4E89CB43009318AD), UINT64_C(0x1CDC5918EF571911)}, {UINT64_C(0xA6596C03F389EAF3), UINT64_C(0x9282C1B3E88975F9), UINT64_C(0xD07A2AEF0D53D3F2), UINT64_C(0x3DA515D52B3B602C)}}, {{UINT64_C(0xE42857818A5436EA), UINT64_C(0x047E305636D65626), UINT64_C(0x0016B568E16489A0), UINT64_C(0x4460319675A0209C)}, {UINT64_C(0x2BE99A51BCC19754), UINT64_C(0xE02EAFD05ACFCDEF), UINT64_C(0xB0A1E300AECACABB), UINT64_C(0x0F39CBDEAC1860D9)}}, {{UINT64_C(0x50DA53722099F08E), UINT64_C(0xAA6AAAD1CA4817B1), UINT64_C(0xA4DDC5FF57D73192), UINT64_C(0x046043AC7682D453)}, {UINT64_C(0xC8EB178828CF3F48), UINT64_C(0x3967A02FDCA184D4), UINT64_C(0x0CE68B7986221941), UINT64_C(0x27BDCA48FD3A197A)}}, {{UINT64_C(0xD774E33C563D7A91), UINT64_C(0x1C309DAE07AE1C92), UINT64_C(0xDABA89B457DBE6A8), UINT64_C(0x90C62517E5820FA4)}, {UINT64_C(0x23C6460511371109), UINT64_C(0x1176AE7E15605666), UINT64_C(0xD71E9755DF040DCB), UINT64_C(0x5312A5B362ED515C)}}, {{UINT64_C(0xB7AA3A117A5FB9E0), UINT64_C(0xA769BC7218E2CB32), UINT64_C(0x9D551B9B6B73E050), UINT64_C(0x0CE51DF0DB067CBC)}, {UINT64_C(0x00BF90D54A0E06BE), UINT64_C(0xFEC6E7B37EE820E7), UINT64_C(0xDFBAC0833334937A), UINT64_C(0x46884935CE14CF46)}}, {{UINT64_C(0xC3F31EAF902EF3A9), UINT64_C(0xF3B6E6FA5CCDF002), UINT64_C(0x5A9B532188CDDE0F), UINT64_C(0x00D99E43E8691FED)}, {UINT64_C(0x8E786F52CFE02C8B), UINT64_C(0x587AA5374DD36F8E), UINT64_C(0xBCA91CAC425CC228), UINT64_C(0x80AA8AA9BFA9C36B)}}, {{UINT64_C(0xAD4A2AD09B20505A), UINT64_C(0x6D70802916739066), UINT64_C(0x729001F389F73B52), UINT64_C(0x774803478073A428)}, {UINT64_C(0x1AB38F07E84DB3B4), UINT64_C(0xE643D756A6655769), UINT64_C(0x5631359B46C19856), UINT64_C(0x82530A3201C3DCD1)}}, {{UINT64_C(0x9250EC262DDDB968), UINT64_C(0x63D99CBF8D82A03E), UINT64_C(0x4FBFE78441349B60), UINT64_C(0x6977DD07A15BF2B7)}, {UINT64_C(0x771917C668513C32), UINT64_C(0x026035188F0064F7), UINT64_C(0x45A5742951D78637), UINT64_C(0x56BF57CC87293790)}}, {{UINT64_C(0xBAC94E24032E6426), UINT64_C(0x7D54AE34C2531B26), UINT64_C(0x4D6EF608CD688082), UINT64_C(0x736E7ACFF5AA4BEE)}, {UINT64_C(0x41D5BF6C6AFB84E2), UINT64_C(0x40E12DA56E976E09), UINT64_C(0xCBF32FCB2235F7B9), UINT64_C(0x285DDF46A21BC0E0)}}, {{UINT64_C(0x66C6A76ECE751632), UINT64_C(0xBD457D0E32A61A1D), UINT64_C(0xFA12A7C878191C57), UINT64_C(0x030ED98B06611B5E)}, {UINT64_C(0x199F7756F4972FFD), UINT64_C(0x298D98E69C8AAB09), UINT64_C(0x2186054CC5B02158), UINT64_C(0x0736CE4CB9B1147A)}}, {{UINT64_C(0x33E4A4CA19BFA57D), UINT64_C(0xF02F6D32AA70C35D), UINT64_C(0x9EA10B633CC082FD), UINT64_C(0x86104E8ED00E82A8)}, {UINT64_C(0xACBA5E7387797E25), UINT64_C(0x24DD98A8EB85A796), UINT64_C(0x02748827C58AC480), UINT64_C(0x5B4480C76A932D80)}}, {{UINT64_C(0xF9E210FB1992B174), UINT64_C(0x3CFA6EF1BE22636E), UINT64_C(0xA46F202B3BDFA2BD), UINT64_C(0x8C83B3DA441B96D2)}, {UINT64_C(0x3BB2ED8B8AA39AB4), UINT64_C(0x4DB63B239CE53FB2), UINT64_C(0x24AC8A9846DC2104), UINT64_C(0x997BC4A768E20D1B)}}, {{UINT64_C(0x4CDF8757D1C0D629), UINT64_C(0xBA155719A64B6058), UINT64_C(0x82FD0DA3BE3FB0B1), UINT64_C(0x12F5069403E34CB1)}, {UINT64_C(0x8993EE3802E7DFEB), UINT64_C(0x2FC240C63D7A758E), UINT64_C(0x75CB6F62AFF7CC7B), UINT64_C(0x2D73F74D71B02A5B)}}, {{UINT64_C(0x0B7B920A550ADA69), UINT64_C(0x87D29F08D2F1D5C2), UINT64_C(0x6E36EF9CEEA99A38), UINT64_C(0x624874C179D7626A)}, {UINT64_C(0x9FCA1B2E17F026E0), UINT64_C(0xBDBE18E5A3A79C2E), UINT64_C(0x1506DE6A6E1B0C6D), UINT64_C(0x860CCD71AD2A2C5F)}}, {{UINT64_C(0x00A15CB028715EF9), UINT64_C(0x71F337D8B1C0ED6D), UINT64_C(0xBD7E6892F998251E), UINT64_C(0x4C5AB31108E0A4E9)}, {UINT64_C(0xDFD51293567342FB), UINT64_C(0xF202FCD15AE3193B), UINT64_C(0xE317C933AF59A5A2), UINT64_C(0x300FE0835055DE2A)}}, {{UINT64_C(0x279A071AC58E7AE9), UINT64_C(0xCED1F2F44C718A8B), UINT64_C(0x3A8C0D1A5FE7F6E5), UINT64_C(0x789C9B04BB40DA93)}, {UINT64_C(0xBB7EA922BF2A0B9B), UINT64_C(0x5DD7A04A3A484413), UINT64_C(0x3E1F49FBC5912F93), UINT64_C(0x4D8C07A561ECAB05)}}, }, { {{UINT64_C(0x7D3510079706D4CF), UINT64_C(0x3E2B3D2EB9BABB1F), UINT64_C(0xC73745BFA2E423EA), UINT64_C(0x0AB3940AF59601A0)}, {UINT64_C(0x8881507A2A895C4F), UINT64_C(0xF27F6F4068652263), UINT64_C(0xCFD9181488A416BE), UINT64_C(0x13459BC31B4F51F6)}}, {{UINT64_C(0x6D830E0C01C7C38A), UINT64_C(0xBA912BD4E27DA48A), UINT64_C(0x3828F4334AB8B5A6), UINT64_C(0x3F858E6CE35E88DA)}, {UINT64_C(0x137F2E3A6E1C033C), UINT64_C(0xFC7C89537E670398), UINT64_C(0x6FF761CEF5C3D4DB), UINT64_C(0x53A02906EED1029B)}}, {{UINT64_C(0x5C597BA656779C20), UINT64_C(0x366688CC43A87346), UINT64_C(0x19F6DA4AA55ACF91), UINT64_C(0x280ED592182DEC58)}, {UINT64_C(0x0A1F3A7AA1D3EBDD), UINT64_C(0xD92B60780C9F474A), UINT64_C(0x38D0335E19AE00DD), UINT64_C(0x094A5772A97F33F7)}}, {{UINT64_C(0x026A9029312D2694), UINT64_C(0x95408516AB5B34B8), UINT64_C(0x9FFA9AB1DED270EA), UINT64_C(0x1F9DDC52493E5935)}, {UINT64_C(0xAC7F94C117244394), UINT64_C(0x18FC29C40F28C9DF), UINT64_C(0xEDE29238BD817BD9), UINT64_C(0x20DBF9AF8E2A7E40)}}, {{UINT64_C(0x009365D97648CA5C), UINT64_C(0xB168191E2BF27488), UINT64_C(0x2481BFAAE3B91112), UINT64_C(0x744C505B3D6DB830)}, {UINT64_C(0x21426D8F3C464704), UINT64_C(0x283F59EFDAF85A61), UINT64_C(0x278B5F8EF2716102), UINT64_C(0x95B80D820FE7E7EC)}}, {{UINT64_C(0xD15ADA08F327664D), UINT64_C(0xF26E3232FE904AF8), UINT64_C(0x2763DBA6F99471C6), UINT64_C(0x4BC9713915F30827)}, {UINT64_C(0x8523812E5F154BF9), UINT64_C(0x0839059FDE17F8F9), UINT64_C(0xEA151382BC16678D), UINT64_C(0x68D01E627890C4EF)}}, {{UINT64_C(0x37FAC9FA9487556B), UINT64_C(0xB4DF5C53FB4DC83D), UINT64_C(0x1EF42D8C92969151), UINT64_C(0x6C0A9D188B0ED349)}, {UINT64_C(0x63E91049946F31ED), UINT64_C(0x51E91DC6653F600B), UINT64_C(0xD7A582B153A29196), UINT64_C(0x0452F4AD31E1D843)}}, {{UINT64_C(0x1224169D0DE8E344), UINT64_C(0x0F4AB4E7F329D30F), UINT64_C(0x12662965B525B6A4), UINT64_C(0x3142B612255F14B8)}, {UINT64_C(0xEF6148B9BBF468A1), UINT64_C(0x3FC413B4144F8DFF), UINT64_C(0xA453D0759BF55B34), UINT64_C(0x857EC76386EBA319)}}, {{UINT64_C(0x7FC22E26C16C1002), UINT64_C(0x2E34975EB0B186C3), UINT64_C(0xE11E36422FC79F85), UINT64_C(0x30FE5C0E9F981B5F)}, {UINT64_C(0x73BD0FA631816247), UINT64_C(0x40FE16616906AF0A), UINT64_C(0x8D7109A3787BC7EE), UINT64_C(0x294520546FB9A590)}}, {{UINT64_C(0x24654B9B4DFAAF93), UINT64_C(0x91CDEA8B9A450D29), UINT64_C(0xEE55420BE4874748), UINT64_C(0x01FAC14C6D03064C)}, {UINT64_C(0x8A4EBDE2D93BD5BE), UINT64_C(0xCB2DF30749EF18A9), UINT64_C(0x36E6AC641A7B7F36), UINT64_C(0x301954234AC1CB8D)}}, {{UINT64_C(0xD9970B1E34F5B3FF), UINT64_C(0x3CFEFC50587A9C5C), UINT64_C(0x8EC1C5DE7CCE631E), UINT64_C(0x92C93E2B52465AB8)}, {UINT64_C(0x0104DF30257017CA), UINT64_C(0xF4E5E7798D8DB4CE), UINT64_C(0xE12A39DDFDC267F0), UINT64_C(0x683DEAFE27C73FDA)}}, {{UINT64_C(0xD0840E81BBC70623), UINT64_C(0x03A93C164D23568E), UINT64_C(0xC52FF3D611A71BFF), UINT64_C(0x03C11FCE0875248E)}, {UINT64_C(0xBC6F184B6C4AE445), UINT64_C(0xF52CC71F7698EE98), UINT64_C(0x4663193EEEA25223), UINT64_C(0x86CD1AB3031C68DC)}}, {{UINT64_C(0x221C94EB21E04C02), UINT64_C(0xE96BB7B37B980F70), UINT64_C(0x60A7289724DC2BD1), UINT64_C(0x8C8E019F5621F475)}, {UINT64_C(0xAE47B2F75CFA457A), UINT64_C(0x31B2F9E1F395C533), UINT64_C(0x7EEB5DDC82E75849), UINT64_C(0x4863A6A32A241E52)}}, {{UINT64_C(0x806AC7F4914976EF), UINT64_C(0x5019261ECA42B875), UINT64_C(0x44F5C03D6EF2D82F), UINT64_C(0x24959F00690F2ACA)}, {UINT64_C(0x4BDE211581F0BBB6), UINT64_C(0x01EB2C001F701A2D), UINT64_C(0x039F8910274FB05C), UINT64_C(0x57068F24C625EBCD)}}, {{UINT64_C(0xB21B8C9367FF2575), UINT64_C(0xC7826C600C60B449), UINT64_C(0xD4D69A9FA98671BB), UINT64_C(0x95249276F5A2AB0C)}, {UINT64_C(0x8F7007F02D1976DA), UINT64_C(0x846F2A92C011D54C), UINT64_C(0xFDBF81DFFA2076B1), UINT64_C(0x3349224F5583B46C)}}, {{UINT64_C(0x624967467C854B4A), UINT64_C(0xF92BAE1D798B1395), UINT64_C(0x2EBE18E3D2F65638), UINT64_C(0x472FF6E58A068F49)}, {UINT64_C(0x64BB0F33DA2030C2), UINT64_C(0x72C0D0C966F6C000), UINT64_C(0xEA837EE53194615E), UINT64_C(0x1B7B4849FA9A7903)}}, }, { {{UINT64_C(0x27AB780CCF9A0727), UINT64_C(0xD457A7BC9D7486CB), UINT64_C(0xFC57C335FE9F1A59), UINT64_C(0x269D8959D1D9F161)}, {UINT64_C(0x06A32331B81605D5), UINT64_C(0x236963536F050BE0), UINT64_C(0xF9350879413E1C0D), UINT64_C(0x170195485761A8DF)}}, {{UINT64_C(0x583D3D3F6765C6A2), UINT64_C(0x68BBA6F9BE9DF3AF), UINT64_C(0x7011E59485358B53), UINT64_C(0x3B2142E353A08874)}, {UINT64_C(0x4AB6137E6F5C8641), UINT64_C(0x4955890E4FE9BCEB), UINT64_C(0xE2F732BA4D14DA01), UINT64_C(0x8CB285FCBEBD63D4)}}, {{UINT64_C(0x5099551B6C74A0AA), UINT64_C(0xF04EB8F8BC2C8A61), UINT64_C(0xE169F49285983435), UINT64_C(0x764062A15B808C9E)}, {UINT64_C(0x8C59A43F65B994FB), UINT64_C(0x2FB148B76068E685), UINT64_C(0x899D4FC554108A9F), UINT64_C(0x0469EA3E5B4D40FE)}}, {{UINT64_C(0x15B613EA62A76AA8), UINT64_C(0x7E8E7D562FE2F179), UINT64_C(0x53160F65BE98EDC2), UINT64_C(0x258DA04E9810DC27)}, {UINT64_C(0x4FEE19D0030D9C31), UINT64_C(0xFC2C57F8C29E300F), UINT64_C(0x00071F97C44458AE), UINT64_C(0x0AA2B911709727E1)}}, {{UINT64_C(0x443F8B23A61166F8), UINT64_C(0x3E8F6278D685FCF1), UINT64_C(0xC930C1D1447433C6), UINT64_C(0x1245A867AED7D6EB)}, {UINT64_C(0xC35986DDFA89945A), UINT64_C(0x89CE110926B0AFEE), UINT64_C(0x9C6A87CD17103D18), UINT64_C(0x811B2242CE338978)}}, {{UINT64_C(0xC074AF660C293255), UINT64_C(0x982C23A95AEAC2E1), UINT64_C(0xDB14DE0CD39AC56C), UINT64_C(0x20263F3F47EBB839)}, {UINT64_C(0x183EA578D10588DF), UINT64_C(0xB4D88EFB1EB69C36), UINT64_C(0xA79A1B4DDBF3BEE7), UINT64_C(0x650FC466E8159E0D)}}, {{UINT64_C(0x9E6EE797F80D5744), UINT64_C(0xDFC3EBF5825949BD), UINT64_C(0x1083EC797EC9BD65), UINT64_C(0x62A45C5EB753499C)}, {UINT64_C(0x9C135F802B6F42CF), UINT64_C(0xE39B0BA5C4B49041), UINT64_C(0x4D8385138D3B2D06), UINT64_C(0x696034DCD070754B)}}, {{UINT64_C(0x06313D73B8E3BDD1), UINT64_C(0xC7BEC420E6968872), UINT64_C(0x740DD6D33A04B7F0), UINT64_C(0x98F2D0B72465BED2)}, {UINT64_C(0x9F2984604043DBAD), UINT64_C(0x82D6991A01B5961F), UINT64_C(0xAAE7DF9D54DFAB8A), UINT64_C(0x5701E3351A07DD22)}}, {{UINT64_C(0x5695A08EFCA398A2), UINT64_C(0xD29EBC1F0D76E8CF), UINT64_C(0x5AB17ABF24004EDB), UINT64_C(0x20C7761B0CC7A144)}, {UINT64_C(0x6CAEE036285EA93C), UINT64_C(0xF9756E89F2B8BF23), UINT64_C(0x3CEA1C76B1AB91B7), UINT64_C(0x5D86860E3FB4F3B8)}}, {{UINT64_C(0x835B023BFDC7DBC5), UINT64_C(0xF05C0676EEEDFD73), UINT64_C(0xF8325D64E52BFB27), UINT64_C(0x919D008DB5032CFF)}, {UINT64_C(0xEF27862C4B130537), UINT64_C(0x616DF1545CE404DC), UINT64_C(0x182BA57E451ED033), UINT64_C(0x2EFEC0C7BD01F864)}}, {{UINT64_C(0xDC84684545F3AF3C), UINT64_C(0x2D2BA0CD92A47B31), UINT64_C(0x9C806C7DE1AFE6EE), UINT64_C(0x28FE43FF4C6A4FEA)}, {UINT64_C(0x2E028CD16C76C0F4), UINT64_C(0xC6FA5AD12AEFBDDA), UINT64_C(0xC8B5339BF63F1A35), UINT64_C(0x30C780A704523F02)}}, {{UINT64_C(0x3D2DCA55D7E4F0CE), UINT64_C(0x8EEF918926616811), UINT64_C(0xB106642F3C0E5892), UINT64_C(0x4A96538589DB033E)}, {UINT64_C(0x5A1CBEB6B3C2DD37), UINT64_C(0x5290C737156EAC75), UINT64_C(0x57AFD98AE32E40C7), UINT64_C(0x04A16164B3571868)}}, {{UINT64_C(0x9AB8A3E91A673E1B), UINT64_C(0xC707ABBA0FC23483), UINT64_C(0x936C17839E0EA0BD), UINT64_C(0x1E4C2E7CF71F6F1D)}, {UINT64_C(0x37904F636FB0926C), UINT64_C(0x9EC76DF7C51FEEA5), UINT64_C(0x2C60F7D64D103DAC), UINT64_C(0x7B451E0BF9DC2CC6)}}, {{UINT64_C(0xD4F8526CB2A5F07F), UINT64_C(0x41303D42B0F4AE09), UINT64_C(0xAC79523F0C182FDC), UINT64_C(0x8D6A75C8AA0C5D6D)}, {UINT64_C(0x4DD7FC953CDCE3F0), UINT64_C(0x4DDB39105BE6DA0F), UINT64_C(0xE34961F916F7E27D), UINT64_C(0x0C5CB76F5B3544EB)}}, {{UINT64_C(0x324C95B5252C354C), UINT64_C(0x4648D87E8CC2C3BC), UINT64_C(0x6DDFDECD82BC8C80), UINT64_C(0x8C64CADEC069996E)}, {UINT64_C(0x4E282E9640ED44AB), UINT64_C(0x70A1206779334507), UINT64_C(0x65CE5D385AB8902B), UINT64_C(0x56FE68F27C949D96)}}, {{UINT64_C(0x1D55C87ECF9530AE), UINT64_C(0xD1CF73FFC147C2D5), UINT64_C(0x826031CDC1F44403), UINT64_C(0x3A06528F5EEF5BFB)}, {UINT64_C(0xF220EAF35F84A7B1), UINT64_C(0xBC99C905350EBADE), UINT64_C(0x686A706E810A101C), UINT64_C(0x95E527131D92EAEA)}}, }, { {{UINT64_C(0xAAC634B3514D47C2), UINT64_C(0xD0C189B858B83B33), UINT64_C(0x633D59E358CA9A2F), UINT64_C(0x65965CE0838ACC80)}, {UINT64_C(0xBB03F7EA9B512F6E), UINT64_C(0xB2F38B849EF17A82), UINT64_C(0xE8382E37E16A7A95), UINT64_C(0x28644EFE4D9EF607)}}, {{UINT64_C(0x46F9115E040A515B), UINT64_C(0x4C7DBCFFFA59CD3E), UINT64_C(0xB4CE22B871BB543E), UINT64_C(0x58D935D8948F80BA)}, {UINT64_C(0x33DC1D5B03683C8B), UINT64_C(0x25E6113A2D071D87), UINT64_C(0x44F962F8A7D59351), UINT64_C(0x6B818DDBBCF66B43)}}, {{UINT64_C(0x363A63C7378C1098), UINT64_C(0xBEB2A7B6AC5C0C9E), UINT64_C(0x3F620D3F4361C8D4), UINT64_C(0x68EAD01A4E3D9686)}, {UINT64_C(0x4361308545DB7208), UINT64_C(0x865A6DDE13B35D33), UINT64_C(0x4EAA166368DF09F5), UINT64_C(0x5FDCA83FBF02AA12)}}, {{UINT64_C(0xC240FEAABFEFB3CB), UINT64_C(0x78E757D20EC6694F), UINT64_C(0xA11A82DF2413D6A2), UINT64_C(0x7BD656EEDBB7A220)}, {UINT64_C(0x68C608736EB899A4), UINT64_C(0xAFFB9F1C318C72E8), UINT64_C(0xF16A443C9FB7619D), UINT64_C(0x2FC317E342C6E4D6)}}, {{UINT64_C(0xAB56A87373F57A93), UINT64_C(0xE9BA24E2308F5224), UINT64_C(0x010281B911992077), UINT64_C(0x2CBCA7FE593EAD1A)}, {UINT64_C(0xB400388A2A1D8318), UINT64_C(0xD470ABDA3C61A0AF), UINT64_C(0xF910272194BD2FAC), UINT64_C(0x222365D10FAC703C)}}, {{UINT64_C(0x5C9021C49C2D1B2B), UINT64_C(0xB349DB18CAF0B562), UINT64_C(0x6DAF741291412CC3), UINT64_C(0x44E5E3E5CF6584D3)}, {UINT64_C(0x1D1F4244E4C17B19), UINT64_C(0x4C663EE63787A38A), UINT64_C(0xA3261E22313A8581), UINT64_C(0x3AE1E1DB7A82C05A)}}, {{UINT64_C(0x31AA2B293CD6A155), UINT64_C(0x0EB9527E3D078B12), UINT64_C(0x6785ABA2214FF1E2), UINT64_C(0x74974F84F111D572)}, {UINT64_C(0x2199A753078C684B), UINT64_C(0xA0F1DE234B13A004), UINT64_C(0x3965AE1975BEBCBC), UINT64_C(0x22A8D7EE24562AA7)}}, {{UINT64_C(0x0591965FBF268ADE), UINT64_C(0xF621B3649EE48F0E), UINT64_C(0x0AD981A95A3A3848), UINT64_C(0x1316675C9ECD72B7)}, {UINT64_C(0x21A5CEB7F37C87E0), UINT64_C(0xEF864CF368D1AAFB), UINT64_C(0x5F340413D3C9A54F), UINT64_C(0x0C5DE1E6E00FD564)}}, {{UINT64_C(0x439B2C0CB415D72C), UINT64_C(0x106AE2E063442E62), UINT64_C(0x8A9428C64A79E93B), UINT64_C(0x67FE6D6ECC2DF510)}, {UINT64_C(0x407158BC655013B3), UINT64_C(0x3AAEAC1C2BC7E7CC), UINT64_C(0x399DB6EFEE8EC1F4), UINT64_C(0x1F7D0D17ECFF6657)}}, {{UINT64_C(0x03039D18CB86639E), UINT64_C(0x586039099CDC3408), UINT64_C(0x52421109F1804B9E), UINT64_C(0x95502857ED126B9F)}, {UINT64_C(0xC91842D9451B0539), UINT64_C(0x2B5B11EBE60AAE3B), UINT64_C(0xDB50F9EA44CB5A14), UINT64_C(0x4B5C982489E80A6E)}}, {{UINT64_C(0x8EF3A1E569FC9F1A), UINT64_C(0xA4EAB6F47CCA576A), UINT64_C(0x955E1C89FBF1CD65), UINT64_C(0x3E3ACF6EF8CE13DB)}, {UINT64_C(0x1FDB619058F31FC9), UINT64_C(0x10DB71B393B0D0D5), UINT64_C(0x900961439154B285), UINT64_C(0x37EEE1781C49EFF3)}}, {{UINT64_C(0x609DE502BC198066), UINT64_C(0x075C863140722EF6), UINT64_C(0x121ACC9FFF0FA57D), UINT64_C(0x31E79AC5EC7DB1A0)}, {UINT64_C(0x736EB95DF16FAE79), UINT64_C(0xFF963917815A14CB), UINT64_C(0xC6003E5D23AF0BC3), UINT64_C(0x0D1B035099AFCAAA)}}, {{UINT64_C(0x8A1B6C971F0DF59D), UINT64_C(0x7DF81A7259C9CA8D), UINT64_C(0x74257F8E9602E8BE), UINT64_C(0x2FFBAD39A441657A)}, {UINT64_C(0xB1B090DB048050A6), UINT64_C(0xD6144221741E7392), UINT64_C(0x63826973ECA1E2D6), UINT64_C(0x28EE60B8D287DE2F)}}, {{UINT64_C(0x815042955DEE86CE), UINT64_C(0xFACCB61D73C03937), UINT64_C(0x9898F773299B96AF), UINT64_C(0x51552297488F95CD)}, {UINT64_C(0x6170618C54F5E182), UINT64_C(0x9C11D666C2798401), UINT64_C(0x88225F4B3EAF3DDE), UINT64_C(0x20841538087F1185)}}, {{UINT64_C(0x42BCEFFE14FA59EC), UINT64_C(0xC41CFCDA7D023F1E), UINT64_C(0xD7E4FDE77163E802), UINT64_C(0x54F4C7982E145BCE)}, {UINT64_C(0xE4EA68C9F9162235), UINT64_C(0x4F7EAC6F458DEC24), UINT64_C(0x70100D2D845C6AD1), UINT64_C(0x67AC34CFF1EA21B2)}}, {{UINT64_C(0x2BD49BDFAC21C728), UINT64_C(0x2D009B45EDA966DF), UINT64_C(0x0D4476BE4A9B9167), UINT64_C(0x340BD3BE95D2ACD2)}, {UINT64_C(0xF8BACA2DB040FF50), UINT64_C(0x307BEA0DB91D47C1), UINT64_C(0x2EFDC81BB6B3A1E4), UINT64_C(0x3B2CD7D91595D6E2)}}, }, { {{UINT64_C(0x56254AE732A5A002), UINT64_C(0xE48A475C448B0A9F), UINT64_C(0x3B2DF6DF14EDBBA9), UINT64_C(0x911BE369F5E4CC81)}, {UINT64_C(0x57D065C677CBB387), UINT64_C(0x7C1E0142527575FD), UINT64_C(0x2CA91EEF243B5C33), UINT64_C(0x7E54AF425C4700CC)}}, {{UINT64_C(0xEF5ECAE55EEDF97F), UINT64_C(0x2D79312AC0D821AC), UINT64_C(0xD3817042A9EDBE8F), UINT64_C(0x7A3D537EAD924B1D)}, {UINT64_C(0xD9923A20B26FFC3B), UINT64_C(0x651D22015B81EC12), UINT64_C(0xBDF7205A54C37FF0), UINT64_C(0x5562D2588C0D2E79)}}, {{UINT64_C(0xE5BC2E1CFB4842F8), UINT64_C(0xCFE9782425B464C8), UINT64_C(0xD902A11A2FEA9ED3), UINT64_C(0x2FC360ED8D3DD0A4)}, {UINT64_C(0xEC4E57FC9E5F7AE1), UINT64_C(0xF0F1FD9F79B8AF6C), UINT64_C(0x803F3ED6A9A283D0), UINT64_C(0x5F13000FADEEA78E)}}, {{UINT64_C(0x3EBBBD161838B470), UINT64_C(0x934BA22AB2781680), UINT64_C(0xC9ED04FCC7210CD4), UINT64_C(0x716004A14615F186)}, {UINT64_C(0xE7B36C21E894BBC3), UINT64_C(0x3F739857570AA9A8), UINT64_C(0x1707FBEE3063902B), UINT64_C(0x44FCB774155C9824)}}, {{UINT64_C(0x30ECD772CDD8CEDB), UINT64_C(0x67BB36FDCA09BCD3), UINT64_C(0xD5AD0FAA9BC43B7B), UINT64_C(0x3962E5566A130895)}, {UINT64_C(0x579282537F7A565A), UINT64_C(0xDE9D779255B911EE), UINT64_C(0xD5DBFDDE6984F326), UINT64_C(0x7CDF5E159FB51246)}}, {{UINT64_C(0xD7FC427A89D24763), UINT64_C(0x50E627C9AD874362), UINT64_C(0x17A8F83B2069873A), UINT64_C(0x186952D7DB698BD1)}, {UINT64_C(0x6C007EED38A2822C), UINT64_C(0x5F1870910C207073), UINT64_C(0xD0023B6308D245D2), UINT64_C(0x7A32C2A134544316)}}, {{UINT64_C(0x8B99183A8C2635EC), UINT64_C(0xA00A94766F12B137), UINT64_C(0x9B5E2F57823DA313), UINT64_C(0x0F7CB4AF47B3CEB1)}, {UINT64_C(0xC993AF7E67266D24), UINT64_C(0x8B60295EEBA985B8), UINT64_C(0x9AA596CBE41A6F69), UINT64_C(0x4D6CF5DF4B68507A)}}, {{UINT64_C(0x3B8A3CBC6921DEFE), UINT64_C(0xB96D53900ED7B717), UINT64_C(0x6761E86A7DE65E54), UINT64_C(0x964460D6701CC1E4)}, {UINT64_C(0x5C0A221326C82309), UINT64_C(0xF95F547220328C60), UINT64_C(0xB519B476FB49E3B5), UINT64_C(0x089D0AB6EE373756)}}, {{UINT64_C(0x947DFCF0DC952768), UINT64_C(0xD8B5C61C3AB613AA), UINT64_C(0x146E83259A457DA4), UINT64_C(0x37E2F6D3F476945E)}, {UINT64_C(0x5702A4413851A6F6), UINT64_C(0xB476560E8D67EF9C), UINT64_C(0xABA23F67F9D2AD96), UINT64_C(0x3CE30A4EDFBBB806)}}, {{UINT64_C(0x64695640E5BAA662), UINT64_C(0x2A18979A0AAF3988), UINT64_C(0x605578FFDE0ED212), UINT64_C(0x52E604D530F2C13C)}, {UINT64_C(0x2E9E2D83894AB3B9), UINT64_C(0x098B1FAA4BC33041), UINT64_C(0x01CF66060863AA3C), UINT64_C(0x7334879BD2951A60)}}, {{UINT64_C(0xB080105CC51704F1), UINT64_C(0x1A5869B8EAEE29C4), UINT64_C(0xAD6AEF335FDD2FD3), UINT64_C(0x83E677C449C2B183)}, {UINT64_C(0x757A4EFDDFA8B8F4), UINT64_C(0xFC8E7650E42F2C87), UINT64_C(0xD4A61A3E9C963D98), UINT64_C(0x3750289A45BC9044)}}, {{UINT64_C(0x40A0620E40B1C72C), UINT64_C(0xAEE56EC7B2E44573), UINT64_C(0xE4E6EA3D60532553), UINT64_C(0x5BA50E80A0EB6014)}, {UINT64_C(0x846429784378CC2F), UINT64_C(0xE322D1692A1C5FB4), UINT64_C(0x5000C9B16B91F82D), UINT64_C(0x32380CB87AA49F2D)}}, {{UINT64_C(0x0A2F936AE18C4BD2), UINT64_C(0x7AEA56AAC3DB9AA5), UINT64_C(0x3A984E935DDF30CB), UINT64_C(0x36133D20904181C6)}, {UINT64_C(0xA9A65593F62DFBF5), UINT64_C(0xB4AC06FD6808B883), UINT64_C(0x986797047A2FEDBB), UINT64_C(0x20E9E8E197880A72)}}, {{UINT64_C(0x403A1ED1CEB26FAE), UINT64_C(0xAD13CD873CD622C9), UINT64_C(0xC1E03929CF45C32D), UINT64_C(0x4B50E4A9C3BE1A53)}, {UINT64_C(0xCF10F3AFD0D7AFE3), UINT64_C(0x6A29B1731494A9B4), UINT64_C(0xB9DC9849D13B0495), UINT64_C(0x4C50794E9C05B110)}}, {{UINT64_C(0xC3C97DED1427F71D), UINT64_C(0xC3CFB754966ECF33), UINT64_C(0x48E30FE11FBF30CD), UINT64_C(0x71C96E1C1E4B0998)}, {UINT64_C(0x878D6305B92C4BF7), UINT64_C(0x14477130CCB5E4A1), UINT64_C(0x7C210767E3C00A19), UINT64_C(0x5546DBD5AB3CDBF0)}}, {{UINT64_C(0xADEC875870857571), UINT64_C(0x0A52587CE70D07EC), UINT64_C(0xE6CEAF9EC731B9BC), UINT64_C(0x1D0FDE3F47143479)}, {UINT64_C(0x2F3BE2CFC5B410CB), UINT64_C(0x576004BE4E64FD9B), UINT64_C(0x03F339517629820C), UINT64_C(0x7BD3296446A450E2)}}, }, { {{UINT64_C(0xD492D6B746CED42D), UINT64_C(0xC068D02D1F0092E3), UINT64_C(0x008ECBAD8D8A822A), UINT64_C(0x6B32686971045647)}, {UINT64_C(0xFEE3237F523CBA58), UINT64_C(0x077B7F509C29059F), UINT64_C(0x42C308B3E72FBE6F), UINT64_C(0x3DD79D838E34148B)}}, {{UINT64_C(0x3ED9DF47CAC24455), UINT64_C(0x7C8A7B31D8546306), UINT64_C(0x4CC432952AA02202), UINT64_C(0x5E8B4EA38598E028)}, {UINT64_C(0x8A882F3F812B8070), UINT64_C(0x984BE5881DD374C0), UINT64_C(0x6FDA815916E133CF), UINT64_C(0x34FB92FA899920D0)}}, {{UINT64_C(0x3BE0416FDA0B8D0E), UINT64_C(0x2CC846DB88C053D0), UINT64_C(0xC04C3A42B1A3A621), UINT64_C(0x35BC55508A9D9115)}, {UINT64_C(0x7F8C9FE37FA72AFE), UINT64_C(0x488FA0B4D1E914FD), UINT64_C(0x8F5C2D6384F79359), UINT64_C(0x2BE80429FBC94785)}}, {{UINT64_C(0x391794E06F67799A), UINT64_C(0xD9BF08AE0677A067), UINT64_C(0x716D5062DF61563C), UINT64_C(0x0ECB234AF590F3A3)}, {UINT64_C(0xA5B91448FEA22392), UINT64_C(0xFAA294877E76FB8B), UINT64_C(0x3CC3A02A4B6CB375), UINT64_C(0x5C0B3B639022167A)}}, {{UINT64_C(0xC5689CF34C576430), UINT64_C(0xF7B7B230C585F5A5), UINT64_C(0xB8DAADFBE4BFCEE7), UINT64_C(0x7B7D8A959CF4242F)}, {UINT64_C(0xC1755F9B398FEEF6), UINT64_C(0x9B31CD4D5CC5C36E), UINT64_C(0x4D87AB9CF4C6B793), UINT64_C(0x673FD5B2F595EFA8)}}, {{UINT64_C(0xA3836484E05E6B19), UINT64_C(0x090C14CFFCA7E6FB), UINT64_C(0xB7A27042FC717DBC), UINT64_C(0x56CD4AF138647882)}, {UINT64_C(0xC2B56B50A43C453E), UINT64_C(0x0CD5E768982E7AED), UINT64_C(0xD5ABADF758474A8B), UINT64_C(0x68188A3899F500AC)}}, {{UINT64_C(0x0683AC3E83B1F7BA), UINT64_C(0x6A4FC30C680568E9), UINT64_C(0x735F5E487F6256CF), UINT64_C(0x1240752D048DB831)}, {UINT64_C(0x98B78A67868B8AD7), UINT64_C(0x9E32F2C1822EBA7D), UINT64_C(0xEAE28B1E8F37580F), UINT64_C(0x0D204CE0C72EDA86)}}, {{UINT64_C(0x5E4EAA1C77E8C68C), UINT64_C(0x282ADFE9859A127B), UINT64_C(0x0C75AB7C14904910), UINT64_C(0x1794516A6E751062)}, {UINT64_C(0x8D99D8913DE4A32A), UINT64_C(0x957AA80754EF2BF0), UINT64_C(0xBF20A9E00B109ECD), UINT64_C(0x7732F2B3A72268D3)}}, {{UINT64_C(0xADB52E4348752F76), UINT64_C(0x01E9F4B1D6F7CCE8), UINT64_C(0x22702DA02E4BD9B5), UINT64_C(0x1BCC9C60B40BF9AB)}, {UINT64_C(0xAB7746379F53B2B1), UINT64_C(0x9C5741518CB316D0), UINT64_C(0x231D5C45BECBEBED), UINT64_C(0x0BD2D5E7F0458638)}}, {{UINT64_C(0xD2F5E0B54B946132), UINT64_C(0x200A8A30155AA2C8), UINT64_C(0x15473FD456A62CE7), UINT64_C(0x030EA71BB6689367)}, {UINT64_C(0xD561432B0E315F29), UINT64_C(0x4155022E149E3A9E), UINT64_C(0xC77EF7E115841273), UINT64_C(0x890D9C8D52BA265A)}}, {{UINT64_C(0xB72B5A6A5E62451A), UINT64_C(0xFDA85C175C61A183), UINT64_C(0xA4275361B7F36EB3), UINT64_C(0x53ADFAF394F4148D)}, {UINT64_C(0x281D47F96A8467AE), UINT64_C(0x416A64B58474D3AD), UINT64_C(0x710D0E7AEC99480E), UINT64_C(0x2693A878819253FF)}}, {{UINT64_C(0x4BE769041A2FE406), UINT64_C(0xB6FEED1D343F5B10), UINT64_C(0x36695C52D705E35C), UINT64_C(0x7DF6FA416BD3859F)}, {UINT64_C(0x7B9B11F5C00E77EA), UINT64_C(0xC90411B8CA80F838), UINT64_C(0x8A9FAEF02908C694), UINT64_C(0x05F65AAAFF5B39B0)}}, {{UINT64_C(0x823A0776D7F59CC5), UINT64_C(0xB9EBE15EC410DFD1), UINT64_C(0xC2374B5810A7FA3F), UINT64_C(0x1B912C84311660F2)}, {UINT64_C(0x486A2607D5A175E6), UINT64_C(0x9B17D14D72B74EB7), UINT64_C(0x1069D5C41039CA77), UINT64_C(0x214605B33FEE08BB)}}, {{UINT64_C(0xC25A7379F9D14E8D), UINT64_C(0x9D5FAFDA577D330E), UINT64_C(0xB9A0217DA4A9CEF0), UINT64_C(0x95AFC7F708252731)}, {UINT64_C(0x14E53E9E8FC51680), UINT64_C(0x0AEA2428A8AC4E21), UINT64_C(0x6BC5E42C11CB2361), UINT64_C(0x3B205E45DCB52215)}}, {{UINT64_C(0x8EDD4718C916CDE4), UINT64_C(0xBB08F27AD70D7130), UINT64_C(0x289A33C0ED9162CB), UINT64_C(0x97CEFA45FB69185B)}, {UINT64_C(0x44DA25788B7797EE), UINT64_C(0x579B17F7148E9A75), UINT64_C(0x73EC1C23913C09AE), UINT64_C(0x3FAB86A40BAAA67D)}}, {{UINT64_C(0x28E76C232DF7BE6D), UINT64_C(0x00526844500A844D), UINT64_C(0xB86FBB143CC748C2), UINT64_C(0x6D89BB8AEB5F6AC5)}, {UINT64_C(0xF66159DF2327808C), UINT64_C(0x606F055329C5006C), UINT64_C(0xDAA1107F844B6CA4), UINT64_C(0x95D7686C63A8946C)}}, }, { {{UINT64_C(0x71438CEA07F7DCF5), UINT64_C(0xB3F59AFA0A1CCD55), UINT64_C(0x5A4396270E0071B4), UINT64_C(0x8694E3FAE93D5B8E)}, {UINT64_C(0x21713A387D6550B0), UINT64_C(0x893BD9F706CFCD5B), UINT64_C(0xC3D2679CE7513FCE), UINT64_C(0x418AE7C82C451EF3)}}, {{UINT64_C(0xADFAFF380B85E2A9), UINT64_C(0x6124E6272E244653), UINT64_C(0xF2C465AF375D1EE7), UINT64_C(0x5B2302D676E58455)}, {UINT64_C(0x32938A0D7479F387), UINT64_C(0xF9A16A0DAAAB22A5), UINT64_C(0x65AF0E252AD65CAE), UINT64_C(0x2B5668668431EA40)}}, {{UINT64_C(0xCA3ACC11DBCDAFAB), UINT64_C(0x0BBB5DBFBB7F218B), UINT64_C(0xD69E091ADB0ABBE2), UINT64_C(0x8AFFCE950B0B7B09)}, {UINT64_C(0x0A5E6C81C7EC52C7), UINT64_C(0xABD60595896707CD), UINT64_C(0x4CE86506101E0F80), UINT64_C(0x9629A6C04ED01B2E)}}, {{UINT64_C(0x1D740EACE15D82F4), UINT64_C(0x42F9801890A5D149), UINT64_C(0x1B8C8DC0903D6D28), UINT64_C(0x7BE2B91605BBDFF7)}, {UINT64_C(0xFBACF878D8E41D96), UINT64_C(0x42E98BFBBE26EB56), UINT64_C(0x9EA73555F6DE1EB1), UINT64_C(0x5325DDDECF79A9EE)}}, {{UINT64_C(0x44BE62C348E6A22F), UINT64_C(0xD0A3C0AD8DB35276), UINT64_C(0xB4C99306136FE9BA), UINT64_C(0x0F2987D7A44E491F)}, {UINT64_C(0xA0965F74CCC77C2B), UINT64_C(0xE01AD644FE110072), UINT64_C(0x79528B9CC16B5E1E), UINT64_C(0x45AEEFF3F929BE4D)}}, {{UINT64_C(0x46E95DF67F4DA458), UINT64_C(0x554C50C1A7AD579B), UINT64_C(0xF64F00A14316DBA1), UINT64_C(0x16C9851346D487BD)}, {UINT64_C(0xECB197612C048A1B), UINT64_C(0x997AF3985373E5E6), UINT64_C(0x50E832D2FDF23B20), UINT64_C(0x1B358E0F7EF7E097)}}, {{UINT64_C(0x7C6728AEACBC759C), UINT64_C(0x187588FBA156A466), UINT64_C(0xC2E550ED928F97BD), UINT64_C(0x8B595A3AAAE1C05A)}, {UINT64_C(0xE36871E1D77C1125), UINT64_C(0x11E129780DBBD882), UINT64_C(0x3EF8268A5E77FB7E), UINT64_C(0x7BAEA9BA6B33C00C)}}, {{UINT64_C(0x7C8512365925E5FE), UINT64_C(0xCED70AE5D8E1597B), UINT64_C(0x7A28BE1A6DCD112F), UINT64_C(0x1EB192683B8EAF6F)}, {UINT64_C(0x7E6F1CF28AA902B9), UINT64_C(0x3DD9D59CA5A761D9), UINT64_C(0x8EF70BB448D9F52E), UINT64_C(0x96629C1ACDEE9658)}}, {{UINT64_C(0xCA215EACB367C5B3), UINT64_C(0x36B22774A796338A), UINT64_C(0x71F9A61A26EBCDFE), UINT64_C(0x1B40580A35119BD3)}, {UINT64_C(0x77169EF1431C78BD), UINT64_C(0x8197975E337022D5), UINT64_C(0x451127991D9A4742), UINT64_C(0x382750D619B6DB07)}}, {{UINT64_C(0x740405EE9786AE0B), UINT64_C(0xF7F37C0F3ABA0481), UINT64_C(0x904FC60C51892307), UINT64_C(0x8405DF2AE891D639)}, {UINT64_C(0x53D19AC5D9B432F8), UINT64_C(0xE8F1730F066CD97C), UINT64_C(0xC8740FEF0E95804B), UINT64_C(0x12EE433CEC242811)}}, {{UINT64_C(0x6AF4B9B16153F4D4), UINT64_C(0x9CD8CD0CF84F0145), UINT64_C(0x6CABD4FCDCEB0F06), UINT64_C(0x036BF1460D134DCE)}, {UINT64_C(0xCDEB18187EFFACAB), UINT64_C(0xB57A416252C987E7), UINT64_C(0xDD5104EBC647E82F), UINT64_C(0x389AA556F51B5270)}}, {{UINT64_C(0xC450CAEA60108876), UINT64_C(0xF36B5B6AF48601A1), UINT64_C(0x257950D109128863), UINT64_C(0x7A592427A9F6A1B9)}, {UINT64_C(0xBF1FF2B0ED12DE33), UINT64_C(0x4D542AC8E2141101), UINT64_C(0x998523C4E170F9CF), UINT64_C(0x629385CEFCEC0E2F)}}, {{UINT64_C(0x951494EDB2677C49), UINT64_C(0xF1AE7138F9B648E8), UINT64_C(0x28B8749E63CFF359), UINT64_C(0x5AC4EC4C9A73272F)}, {UINT64_C(0xC25ABB8721723271), UINT64_C(0x488EC9108B441AFD), UINT64_C(0x075183481B1DF775), UINT64_C(0x4662BBDAF1EB2FB4)}}, {{UINT64_C(0xAE836F746DF9F64A), UINT64_C(0xF3CD6C9DA185ABE6), UINT64_C(0xAFA897A8C29A1C1A), UINT64_C(0x4BAFBB6911B2D6AC)}, {UINT64_C(0x8040F9A3B6D971C7), UINT64_C(0x3B8920B700763EAF), UINT64_C(0x7A1655DA52E848B7), UINT64_C(0x03BC8B55703FA84D)}}, {{UINT64_C(0xE6348C651F934416), UINT64_C(0xDBE59C03F82BBC4A), UINT64_C(0x51AEAD09EAD60547), UINT64_C(0x043A35C34F20111E)}, {UINT64_C(0x0AA18326EC574F0A), UINT64_C(0x07E90D70FCADF79D), UINT64_C(0x3979D4CE201CD68B), UINT64_C(0x7FBF2C632C2734B1)}}, {{UINT64_C(0x2E4513732656AF49), UINT64_C(0xCA86207DA432DE06), UINT64_C(0xC5F9262D12F20637), UINT64_C(0x7DD9CCDC26C0C745)}, {UINT64_C(0x99276BDCA785ED89), UINT64_C(0x34B307A7374CFBE2), UINT64_C(0x916E9B061E8EE0C5), UINT64_C(0x4E8EB3C788A85C6A)}}, }, { {{UINT64_C(0x6F2433EF107F1CE0), UINT64_C(0x121DE13146D23AEF), UINT64_C(0x7AC50BE820DB44DE), UINT64_C(0x1E500A2BF6F41A1C)}, {UINT64_C(0x8E5BAFCC27B0004C), UINT64_C(0x8538A5EDDB555C04), UINT64_C(0x00AEC8A7CE4ED544), UINT64_C(0x7C7301CC73B2DA91)}}, {{UINT64_C(0x3E7E1E5C63284E3A), UINT64_C(0x145814001422D8EA), UINT64_C(0x5FE151BF7AAABD1D), UINT64_C(0x6716691F1533B371)}, {UINT64_C(0xA592D53E22A8B7DF), UINT64_C(0x66991AFF51C97935), UINT64_C(0x8B10603DDE5429B6), UINT64_C(0x0002F6C6551F146B)}}, {{UINT64_C(0xF641CBCB777A334C), UINT64_C(0xB45B21E1EEFBCA44), UINT64_C(0x7C2FCD6532F6E263), UINT64_C(0x05A21D80FEED8901)}, {UINT64_C(0x2471B4865506CF47), UINT64_C(0x0FFAC1F77C9E62DE), UINT64_C(0xC4D321DF869D3BDC), UINT64_C(0x9AC035099512D0CA)}}, {{UINT64_C(0x5A26E8F5352E0353), UINT64_C(0x965CF602BF6ABBAC), UINT64_C(0xDD8C4818E911C628), UINT64_C(0x132CA2D8DC2D04A0)}, {UINT64_C(0x7641CFCE6C865C91), UINT64_C(0xDB5AB8F38E9965EF), UINT64_C(0x30030BCDDE0B7E90), UINT64_C(0x7BF444532320D3F1)}}, {{UINT64_C(0xC006FA6DD8A99DAD), UINT64_C(0xC042F163B45E64A1), UINT64_C(0xB91C9CA474F4DBB1), UINT64_C(0x23BD5A29BE221E4E)}, {UINT64_C(0x6B0591D73D1ECF78), UINT64_C(0x9E0ACF38AA5B771C), UINT64_C(0xC970F263796D4AA3), UINT64_C(0x370375027B5DD349)}}, {{UINT64_C(0xE11DECDAFBC52541), UINT64_C(0xA49B8D39E7FE53A5), UINT64_C(0x3A08E9BB104A1F6E), UINT64_C(0x95444A15E0192BFB)}, {UINT64_C(0xEF75B0621A97B875), UINT64_C(0x9FC8AE5EEA5FC457), UINT64_C(0x3A09FD1B47F73089), UINT64_C(0x096750ECE24516AB)}}, {{UINT64_C(0xAA1800464A350C95), UINT64_C(0xA72F2B6758EA4195), UINT64_C(0xE0647945FD9A4F25), UINT64_C(0x4CF4136D22737E2D)}, {UINT64_C(0xEE2532CEEFB2A96D), UINT64_C(0xB39DB1176C2F1471), UINT64_C(0xF7C6242B19935BDB), UINT64_C(0x98CA48D47A820092)}}, {{UINT64_C(0xE9C1AD0AC3C938B0), UINT64_C(0xF7CC05C4CCDF3BC6), UINT64_C(0x3C21752B363A9CC6), UINT64_C(0x47996B875916BD59)}, {UINT64_C(0x01EF895D98D17468), UINT64_C(0x9182F8825818F5D8), UINT64_C(0xCBD212A3E35E4BE7), UINT64_C(0x894E7F395EA16E55)}}, {{UINT64_C(0xAC674AEE7C8FDD7E), UINT64_C(0xA23FA827EDB0FE30), UINT64_C(0x642BE06F745B3230), UINT64_C(0x7654C79BCB40941C)}, {UINT64_C(0x4640C0C5D6A9E988), UINT64_C(0xA98AF66111A4EECB), UINT64_C(0xE1E827E3325D730E), UINT64_C(0x2342D8807D8A02DE)}}, {{UINT64_C(0xE4101595715DB87E), UINT64_C(0x462718AB3C44A43A), UINT64_C(0xF414CBC7EFCBC0F7), UINT64_C(0x2A64DB21E5999AB3)}, {UINT64_C(0xDAD841E19DA91E84), UINT64_C(0x5A28F6495F5C1CDD), UINT64_C(0x2F8C9DCAB8B41BDA), UINT64_C(0x259DC791029C3697)}}, {{UINT64_C(0xD56F4EF45296BA38), UINT64_C(0x4A853BA102EC3100), UINT64_C(0xB0ED5F21C8AE4C47), UINT64_C(0x53D0DA0C61DF268E)}, {UINT64_C(0xB6771DCB6DC06EB6), UINT64_C(0x30B07595BB0C457F), UINT64_C(0xC2FD08F3F174690D), UINT64_C(0x77000D6A87A5DC8E)}}, {{UINT64_C(0x90DDAA616E1369AD), UINT64_C(0x3DD15EE7B6A5F225), UINT64_C(0x051AA9C427AEB0DC), UINT64_C(0x18712DBBE5372729)}, {UINT64_C(0x13B3F9DFA23AFF5A), UINT64_C(0x34388CED703FBFF9), UINT64_C(0x0F390D6717D60129), UINT64_C(0x3F0CA25E4DAE9863)}}, {{UINT64_C(0x6E0F5594903385DC), UINT64_C(0x47483889F8A815A9), UINT64_C(0x42AF320C23B70B1C), UINT64_C(0x4A27CA271A1AEA03)}, {UINT64_C(0xFAAC21C866AF6F9D), UINT64_C(0x20849D90C9FBFD3E), UINT64_C(0x793F889FEE0A541C), UINT64_C(0x2555FC32ADA5D18F)}}, {{UINT64_C(0x3F38F58CBA2BD509), UINT64_C(0x319A5F0D048F864B), UINT64_C(0xC4632F37D5900B1E), UINT64_C(0x3FAF2615F8519441)}, {UINT64_C(0x6A4AA25DFE194D77), UINT64_C(0xB5A6464AD681409B), UINT64_C(0x1A9326EDB957523A), UINT64_C(0x7690EA4F27098B5B)}}, {{UINT64_C(0x5530E91110F3FDE3), UINT64_C(0x9A40101F810E7853), UINT64_C(0x152704FC8F011C4E), UINT64_C(0x5B1702E4129B455F)}, {UINT64_C(0x46A130BAE60F4D30), UINT64_C(0xA3D5741462BBE8B5), UINT64_C(0xA26238DA3CFAEFE3), UINT64_C(0x4E6141133175078E)}}, {{UINT64_C(0x27BCCDFF992EE109), UINT64_C(0x79F88647FB45C6C3), UINT64_C(0x7FD5D73AC73F2829), UINT64_C(0x7EBE8E4E65A44CF1)}, {UINT64_C(0xB9EC0B9437414B2C), UINT64_C(0x846AD1D136DED49D), UINT64_C(0x72AE106062F2FE87), UINT64_C(0x7F5AF329C032EEDD)}}, }, { {{UINT64_C(0x6C80B058C7A645A5), UINT64_C(0xF86341D2729066AC), UINT64_C(0xE4F366BD33FB5CE8), UINT64_C(0x6B79D63FC23A4751)}, {UINT64_C(0xFAA0F994EC3F8686), UINT64_C(0x156A6E8EA9BA8F5E), UINT64_C(0xA46CA7D59F2FAE57), UINT64_C(0x84CB21966EFE66F2)}}, {{UINT64_C(0xF9C1DECBED25185C), UINT64_C(0x6DC43F21B1FCFC82), UINT64_C(0x4A840262A954087B), UINT64_C(0x602308090A38F667)}, {UINT64_C(0xBD3450061D9672B5), UINT64_C(0xE0FF804BF83361EF), UINT64_C(0x9DDC6CE1EF8E1598), UINT64_C(0x4419F705FBD9BD0E)}}, {{UINT64_C(0xF171EDE43426122A), UINT64_C(0xEF6A1AE220A3963E), UINT64_C(0xD25AB7A2031647D0), UINT64_C(0x0FD7EC20CB4CA4E3)}, {UINT64_C(0xC103969CB7D3A295), UINT64_C(0x4957509E34DBABA8), UINT64_C(0x8456DF6360BC0760), UINT64_C(0x02AF2033D63B49A9)}}, {{UINT64_C(0x271966A00378E444), UINT64_C(0x673F057D5D15A0B7), UINT64_C(0xA55C44F9A0EFE59E), UINT64_C(0x2F602F87376119A6)}, {UINT64_C(0x0A14907428981502), UINT64_C(0xDA0067748741D4F2), UINT64_C(0x8F982C81133F8479), UINT64_C(0x1ECAF17AF944319A)}}, {{UINT64_C(0x281A234EA37F4FC2), UINT64_C(0xAFD847B2FD34FC11), UINT64_C(0x02CC08394683E11A), UINT64_C(0x71215DA93F65B844)}, {UINT64_C(0xF9F41383EFE32AC9), UINT64_C(0x4AC3D91D1361FE53), UINT64_C(0x03C9FBAB1CC2E948), UINT64_C(0x9A9A4B9143379A4F)}}, {{UINT64_C(0x8D37A10851BED5AC), UINT64_C(0x75D91890998E1C19), UINT64_C(0xE6C76B095D244730), UINT64_C(0x127147164CD555FF)}, {UINT64_C(0xF2DCE85A29DDC669), UINT64_C(0x8914D13A8D622348), UINT64_C(0x9FE6B578DAE035E8), UINT64_C(0x21ECB251F41EEF19)}}, {{UINT64_C(0xEAFF38627999064D), UINT64_C(0xB72BABEF96383204), UINT64_C(0x8E6C9E676BCCCB43), UINT64_C(0x320A7D787FD71298)}, {UINT64_C(0x4081E38AB438A302), UINT64_C(0x0A15CBA7120E132D), UINT64_C(0x6D9123E1EC2E0939), UINT64_C(0x692D699CE0D6FEC5)}}, {{UINT64_C(0xB639ADAEC8D5D361), UINT64_C(0xA8F742CCC60A078D), UINT64_C(0xE8D2CF929D740F0F), UINT64_C(0x6E8EEEF94DCE6A87)}, {UINT64_C(0x54E194886A2E5164), UINT64_C(0x4372C6CF2430E4B9), UINT64_C(0xD58EA91B1C5B13B3), UINT64_C(0x796DCC45BB9F2911)}}, {{UINT64_C(0xD8D4FAF0CBB267F9), UINT64_C(0xC2770DBE703F4011), UINT64_C(0x13739F020D651402), UINT64_C(0x7DE4E51E72D2B3F1)}, {UINT64_C(0xB10F966E1FE00C7E), UINT64_C(0x5E9A15018F42B5F8), UINT64_C(0x6AFB1AD0D00437A3), UINT64_C(0x267D15361473D5AE)}}, {{UINT64_C(0x1173B5DB4CAE118F), UINT64_C(0xC3A2EAFDCA749EE6), UINT64_C(0x64F738E64ED4FFF4), UINT64_C(0x47DDECB6B07860B6)}, {UINT64_C(0xF5D627FCBD47A901), UINT64_C(0x6493BC28856C6903), UINT64_C(0x90280E4BEA63B675), UINT64_C(0x211C04A2C4148666)}}, {{UINT64_C(0x0A5F0C276524BC38), UINT64_C(0x4B9D95FBBB3CBDB9), UINT64_C(0x5394ADC220507C82), UINT64_C(0x4C0C9167B4DBE448)}, {UINT64_C(0xAC3E87CE303A5B11), UINT64_C(0xD31FB9C53251F4DF), UINT64_C(0x86C281DFE43CE799), UINT64_C(0x84E644D729FE09E4)}}, {{UINT64_C(0x6D7B61DC43166C20), UINT64_C(0x54D6C035BD34F981), UINT64_C(0xB166769DC991096D), UINT64_C(0x51A47E3A3A4CF05C)}, {UINT64_C(0x57CF9EFF14F5E7F1), UINT64_C(0xED3D4E9DE39FDA0D), UINT64_C(0xDF0176ECBAA7E93B), UINT64_C(0x6B2FEA1470935B9F)}}, {{UINT64_C(0x19F9D59E709B70AE), UINT64_C(0xD850CA3270472149), UINT64_C(0x292CADD929EE6104), UINT64_C(0x870F7C998FD499F2)}, {UINT64_C(0x200ECB1C415C6FFD), UINT64_C(0xEEA6107D35CB841B), UINT64_C(0x1CB06F8AF95DD333), UINT64_C(0x245712FDE498AA7B)}}, {{UINT64_C(0x101665EAED4FBD78), UINT64_C(0xC6DDE1BB0E32D1B4), UINT64_C(0x3E79185E40150A9C), UINT64_C(0x49E2AE6B7DEF3607)}, {UINT64_C(0xCCC9B0F6308B7F59), UINT64_C(0xB267008FCE922087), UINT64_C(0x46CF7F07CF2AABA6), UINT64_C(0x5A74C8A09954091F)}}, {{UINT64_C(0x8F2871955240B5A0), UINT64_C(0x7AC7720F1845373D), UINT64_C(0xCF276B594E592274), UINT64_C(0x6BEBC284694C30B8)}, {UINT64_C(0xDA0113D6677B16CD), UINT64_C(0xA221344645C9FA76), UINT64_C(0x2DEAF2ED66964ADB), UINT64_C(0x1977A8B3BC062240)}}, {{UINT64_C(0xEEA2912680303DFD), UINT64_C(0x3E4A33ACE95BF6A1), UINT64_C(0x6BFE2D5D15DE0457), UINT64_C(0x407BF7E3AD0976D1)}, {UINT64_C(0x04C1F61F306B415B), UINT64_C(0xC86A75D25F790D5F), UINT64_C(0x7B799EDEB7EAE07B), UINT64_C(0x9155A9A0B4A66839)}}, }, { {{UINT64_C(0x9745C6BB0DCE586B), UINT64_C(0x554C8313BE77B502), UINT64_C(0xF0F842A9A93962CF), UINT64_C(0x40862273AAA141BC)}, {UINT64_C(0x926FFA4ABD62237B), UINT64_C(0xD4F1E4A17B942F48), UINT64_C(0x3A841EB7075684FD), UINT64_C(0x21F6EB39DD1807E1)}}, {{UINT64_C(0x155DFD66BEDA4365), UINT64_C(0xDD575C8327F33BF9), UINT64_C(0x5907B08D3DFF83A1), UINT64_C(0x7E325357D6788D63)}, {UINT64_C(0xF90BF447BAC74ED7), UINT64_C(0x2DE6C957EDA226CD), UINT64_C(0x678323021CA44607), UINT64_C(0x22ECBC1F56011C38)}}, {{UINT64_C(0xF01279A9B663A46C), UINT64_C(0x07D74C5F7E3AAB83), UINT64_C(0xF20940B68C0DA43E), UINT64_C(0x57C6A735368AD991)}, {UINT64_C(0x01E9B3665007E059), UINT64_C(0xFC38FC999614D480), UINT64_C(0x4A3AAA18FF7DA757), UINT64_C(0x4481B669B0CE1B03)}}, {{UINT64_C(0x9CAA37A0B4A807FF), UINT64_C(0xBDEDEB49F9B269F3), UINT64_C(0xC5B76E57CB607AC3), UINT64_C(0x08AEFE669A322F48)}, {UINT64_C(0x6919E40DD9261469), UINT64_C(0x1F0ADA81849718FA), UINT64_C(0xCD251B549D81628E), UINT64_C(0x6519C3C65505F9E1)}}, {{UINT64_C(0x277591DC2F81C037), UINT64_C(0xD63AD35A76E0D41E), UINT64_C(0x682662B56EC063D3), UINT64_C(0x8210978B6762A0DB)}, {UINT64_C(0x05085F68FE164B90), UINT64_C(0x50026ADC3D6FD0D1), UINT64_C(0x38CC9FA7B01A3791), UINT64_C(0x1E286652B376F83E)}}, {{UINT64_C(0x8DFFDA1609759892), UINT64_C(0xE011DDDB9AC2CE5D), UINT64_C(0xDDC7670FBD71426B), UINT64_C(0x9722A23B19742F7C)}, {UINT64_C(0x2EA99893DC4767D3), UINT64_C(0xCB68D6C211125BAE), UINT64_C(0xAC76953E307ED3B9), UINT64_C(0x0EDD0C17C366E9A2)}}, {{UINT64_C(0x88B3DEC9484B5272), UINT64_C(0x0C848EA190380294), UINT64_C(0xDE187E83A01AC92C), UINT64_C(0x2A8801827A5D4D65)}, {UINT64_C(0xD3C22C2BB3C3C7BB), UINT64_C(0xC485CE02DE7ECE33), UINT64_C(0xF22138C4A437071A), UINT64_C(0x23A55C890716DA53)}}, {{UINT64_C(0x9533C4A3F6FE058E), UINT64_C(0x28753F87748E4A4F), UINT64_C(0x7814C50AEA404C70), UINT64_C(0x908D1C81E91B5EF3)}, {UINT64_C(0xD827D3CE04094766), UINT64_C(0x7AE2FD260CE5C727), UINT64_C(0x016AC86FCDAD2BDD), UINT64_C(0x37C088B07A77C252)}}, {{UINT64_C(0xABF4C1EF18A35CD3), UINT64_C(0x1F721491698A5A01), UINT64_C(0x79284A121A9E9A1F), UINT64_C(0x0457FF704D50DF40)}, {UINT64_C(0x1D235814EC46ED07), UINT64_C(0xBD013752AE5E97C8), UINT64_C(0x0E085C88D9B100D4), UINT64_C(0x8AFA070A8858F9F3)}}, {{UINT64_C(0x0F548BE3698D6A59), UINT64_C(0x5D7818A5BF2D0D94), UINT64_C(0x8E150DF1D80E620D), UINT64_C(0x4C3A5E64F857F167)}, {UINT64_C(0x837D9A9861BD9152), UINT64_C(0x242CE5898D10687F), UINT64_C(0x9863EA4CB6B52BB7), UINT64_C(0x23665B46B7DD35FF)}}, {{UINT64_C(0x3AA5432A73942AAF), UINT64_C(0xB0185DB40CEE83A9), UINT64_C(0x145372EEA83B907B), UINT64_C(0x609F1AD9BB6D341A)}, {UINT64_C(0x28C2B37A864C92EE), UINT64_C(0xDD847239D4CC1158), UINT64_C(0xE5BD4FD28F2EAF0A), UINT64_C(0x04F43BC0D24950AB)}}, {{UINT64_C(0x11DEFCED88DA3F20), UINT64_C(0xCA4CE370A407C4A2), UINT64_C(0xEA70BEDF2F8C5CFC), UINT64_C(0x08AC147D8214B7F7)}, {UINT64_C(0xECAD0F77E260AA96), UINT64_C(0xA868AC63B56C30F7), UINT64_C(0xF0ACDE5A396F4815), UINT64_C(0x302F75B9ACDE6CD8)}}, {{UINT64_C(0x2125D07DC5D14866), UINT64_C(0xFE563DE44AE3212D), UINT64_C(0x0FE787CBEE9CAA2B), UINT64_C(0x7D9B56A253802482)}, {UINT64_C(0x128B4D378040D1A7), UINT64_C(0x5737129930ACA2F4), UINT64_C(0x5C443E357623D14A), UINT64_C(0x6436D3285FDB6310)}}, {{UINT64_C(0x531486A4A8557B64), UINT64_C(0x3FAB4F219C5DE310), UINT64_C(0xD872282E260468D0), UINT64_C(0x04CD45682542CBA4)}, {UINT64_C(0xACA0975A555B6E0C), UINT64_C(0xEE8C43B28B85132F), UINT64_C(0xC768808BB9DECE9D), UINT64_C(0x59EDEC60431AF98C)}}, {{UINT64_C(0xC365E13331992E22), UINT64_C(0xB96C5FA00DC3A4C8), UINT64_C(0xDEB1C1DAA65761B0), UINT64_C(0x457676EEF4ACAB4C)}, {UINT64_C(0xA0F95894E674FFAF), UINT64_C(0xFD099172D65CDAB7), UINT64_C(0x9383C2F854DA58A2), UINT64_C(0x0A4F4C110F24A07B)}}, {{UINT64_C(0x9D7A80B3E380ABF3), UINT64_C(0xF0C6AC5A9E469F9F), UINT64_C(0xC87D57276BD0A324), UINT64_C(0x28138E377692B063)}, {UINT64_C(0xE18C1F7DD67862CA), UINT64_C(0x4B6B723E1E07F928), UINT64_C(0xAAFE3FB0BBCF4125), UINT64_C(0x254003223B3AE714)}}, }, { {{UINT64_C(0xB89A2DCA63C295D8), UINT64_C(0x5CC03C6585041AA1), UINT64_C(0xFA9B4C5CC6514781), UINT64_C(0x578031A0D92388FF)}, {UINT64_C(0xB0D5AE0AF92C2D77), UINT64_C(0x945A677E793D588A), UINT64_C(0x3722DE4434A190E0), UINT64_C(0x6EA90DB80C2B9975)}}, {{UINT64_C(0xE987AA8584BA4F9B), UINT64_C(0xB2A77B9C0AB43BE6), UINT64_C(0xC4AD2AF6474D8841), UINT64_C(0x4ED7A82B5D4FA590)}, {UINT64_C(0x9F39335E9977AC2B), UINT64_C(0x3CCD406D52E87607), UINT64_C(0x9D18CB3F71456060), UINT64_C(0x0FE4D8886A45D7D0)}}, {{UINT64_C(0xAEA8A911F42D501A), UINT64_C(0x303E25D588F66FBA), UINT64_C(0x54213F2961740B85), UINT64_C(0x5BC13A30C0B4D835)}, {UINT64_C(0x569AB9B84758EA28), UINT64_C(0xE2E49B28B796A794), UINT64_C(0x17787125320D54E2), UINT64_C(0x5A6A8EDEC54B4465)}}, {{UINT64_C(0xC76C73D9870619DD), UINT64_C(0xF541440E84FE1078), UINT64_C(0x2082FE363B26A3DC), UINT64_C(0x3B896B29CC329B14)}, {UINT64_C(0xB45028A9CAFCDC20), UINT64_C(0xA1B77C6F9C56757E), UINT64_C(0xDE50D86584802E47), UINT64_C(0x7DFBC0E8BA0892B0)}}, {{UINT64_C(0xEBC505A947E702BB), UINT64_C(0x2329A41CDACFACFE), UINT64_C(0xEA11560351DDCE2F), UINT64_C(0x95BBC8072E9D855A)}, {UINT64_C(0x454C6B88CFD33E9F), UINT64_C(0x993CF6DE4FFBB24A), UINT64_C(0xA8E22FF89B2144CD), UINT64_C(0x741066EE84943294)}}, {{UINT64_C(0x2CEE0CFFF067E5B2), UINT64_C(0x1C1FD5A3CA95F1C5), UINT64_C(0xA0EB8E7DC07B97F1), UINT64_C(0x0F2A5D777457415E)}, {UINT64_C(0xDFF92C5845D06291), UINT64_C(0x709EA0AC48ABABE8), UINT64_C(0xB3058FEB2FDC92F0), UINT64_C(0x55E9F86E5E5B169E)}}, {{UINT64_C(0xEE5DF132EBF6AF2B), UINT64_C(0xC30DC3F1F642A206), UINT64_C(0xD7D8EC3E02C60CB6), UINT64_C(0x7C98946B3178F1BF)}, {UINT64_C(0x816C2AA1A68799EB), UINT64_C(0x507FD5E92430F06B), UINT64_C(0x021FFF1CB9EBD4B7), UINT64_C(0x044365E68AECFEA4)}}, {{UINT64_C(0xDC5F5EA621339693), UINT64_C(0x5BFD267690A448AD), UINT64_C(0xF712BA95A12A9D77), UINT64_C(0x7104735ABD8A6B5B)}, {UINT64_C(0xD2ED8304A763BB99), UINT64_C(0x7AF040F011B91A05), UINT64_C(0xC545E8AEB61F3789), UINT64_C(0x582E9EEDBB386760)}}, {{UINT64_C(0x0FCE5877CC099185), UINT64_C(0x0E148BB5CD681E67), UINT64_C(0xE9F9013EECB24ECE), UINT64_C(0x0090654B2A386485)}, {UINT64_C(0x11BA700B0520BAE8), UINT64_C(0xFC93BE31D8E53123), UINT64_C(0x7DD7CB36E37948EE), UINT64_C(0x8689AE8F3FC23444)}}, {{UINT64_C(0x2060F7DEAAC6616B), UINT64_C(0x372952C5DEAB3CC7), UINT64_C(0x715C4D27C2424ACD), UINT64_C(0x058468560308A009)}, {UINT64_C(0x887BBD550B8B34E8), UINT64_C(0x949ACBD1B688C987), UINT64_C(0x3E774D49784C4C0E), UINT64_C(0x7AEA2D11B0F5F545)}}, {{UINT64_C(0x5335BA6BE831E509), UINT64_C(0x8FC4B4AF739F332E), UINT64_C(0xB050246295993EAF), UINT64_C(0x7DA49F36A7CEB88B)}, {UINT64_C(0x3BE0B74B029D0C8F), UINT64_C(0xBC07F18055611A8B), UINT64_C(0xC168CF416583F53F), UINT64_C(0x4256E8D2C34ADBC1)}}, {{UINT64_C(0x313AFC75CE2FCD89), UINT64_C(0xEA27FDA4D3DA44F2), UINT64_C(0x9FABEA799063B0DC), UINT64_C(0x2DF7D966B3418884)}, {UINT64_C(0x4329FD2480AF2EBD), UINT64_C(0x36F27FF79F095D30), UINT64_C(0x88FFB18FCC84C068), UINT64_C(0x976427A87B0A9906)}}, {{UINT64_C(0xCFF828CCFAC21087), UINT64_C(0x6B6D348456863CB5), UINT64_C(0x14163A70C30879F3), UINT64_C(0x30E2A6338CA6FD5D)}, {UINT64_C(0xC7FCEAD628A58783), UINT64_C(0x945F7B09EEFA1EAA), UINT64_C(0x98A503DB5CC66267), UINT64_C(0x83EE750E3780061B)}}, {{UINT64_C(0x7061409AB8477D6B), UINT64_C(0xE47C779D2B7B54FA), UINT64_C(0x42F5EDF5F293166C), UINT64_C(0x73C3AC1B115D830F)}, {UINT64_C(0xC30D346E4DEE0980), UINT64_C(0xEE0D9A29A62F0D09), UINT64_C(0xBBE8DC9EABCB7DAE), UINT64_C(0x4F0E78C068B78925)}}, {{UINT64_C(0x25A0D4FFB4B14003), UINT64_C(0xA4C3AC55B8AB649C), UINT64_C(0x7D7EDE7227F9FDF5), UINT64_C(0x507EC83FBC2A46D4)}, {UINT64_C(0x344577D9FAAFC26F), UINT64_C(0x77CBB7833EB30156), UINT64_C(0x3A846FFD1D5C9367), UINT64_C(0x5F0D280C9DF9F7BE)}}, {{UINT64_C(0xCC8EAC0A77DF7F9F), UINT64_C(0x195BC6FFF33A62D4), UINT64_C(0x18A33FFA524D78FE), UINT64_C(0x10E589746603F9C0)}, {UINT64_C(0x31AF4B460CDA2C3F), UINT64_C(0xDDBF00C8ADE169C3), UINT64_C(0xA169C3E371A7BC38), UINT64_C(0x3FC352FFA64B342E)}}, }, { {{UINT64_C(0x58848315EE73C673), UINT64_C(0x67D2F7C08ADB897E), UINT64_C(0xE8CD786DF0658115), UINT64_C(0x023D515AAC54D2AB)}, {UINT64_C(0x0EDE61D867559911), UINT64_C(0xBC12B1063C2B78B5), UINT64_C(0xB5661A289E4707D8), UINT64_C(0x93FB4096ADC095A4)}}, {{UINT64_C(0xEEB3810F33D5FA08), UINT64_C(0x8D8FC35433F4CAAF), UINT64_C(0xED87051629EB08A3), UINT64_C(0x89FD91CAD1D31EBC)}, {UINT64_C(0xD2F1F832EDE2494B), UINT64_C(0xCFEE1D77FA8EEA95), UINT64_C(0x13603C4A3B0F005C), UINT64_C(0x6DF97F85D9EF68F4)}}, {{UINT64_C(0x578FBC0A55410512), UINT64_C(0x1FA404F2DEC79EEE), UINT64_C(0x201FE21592B60820), UINT64_C(0x9A9B3CE80A56193A)}, {UINT64_C(0x8A5ECCB910B49800), UINT64_C(0xA7373AEBBFDB1D8E), UINT64_C(0x8996BEFA4944B5DF), UINT64_C(0x3102D3C07B44246C)}}, {{UINT64_C(0xD4A853B7449C09BE), UINT64_C(0x1F7080A451DDB7FE), UINT64_C(0x8A9DE52CE1C27FC1), UINT64_C(0x6585B54F0C58B99D)}, {UINT64_C(0x8EEB0601B5A4AB53), UINT64_C(0x977D658D48C73AC6), UINT64_C(0xD5DA09033D9BD223), UINT64_C(0x881A5838BE115965)}}, {{UINT64_C(0x8EB70B77EB3FC303), UINT64_C(0xED1C4DEF98BDB841), UINT64_C(0x13E6BE06997DE9E4), UINT64_C(0x4A94C0A19334D46D)}, {UINT64_C(0x184C17C80F867DAF), UINT64_C(0x4A65802633A64148), UINT64_C(0xD177F0090AE3D4AA), UINT64_C(0x8134AC8F98ED12C0)}}, {{UINT64_C(0x7A308A007A58DDEC), UINT64_C(0x74A15C5FFDF92DF2), UINT64_C(0x210D260E21B4E345), UINT64_C(0x6446715BC651E31E)}, {UINT64_C(0xB1AF1F8410B905B6), UINT64_C(0xEF6CD0F2A62D366F), UINT64_C(0x77E47B01D1F6B7E3), UINT64_C(0x0F38B2802B95BD12)}}, {{UINT64_C(0x52DA30E18CCCDAE6), UINT64_C(0x9F3D6636BD86A13A), UINT64_C(0xADFA00C5F4EA6151), UINT64_C(0x6B93BFA01EC37639)}, {UINT64_C(0x443F0023F8FE22FC), UINT64_C(0xCB7848A4A81FEACC), UINT64_C(0xCE5E650A517E9E61), UINT64_C(0x5842DB7DA1968E3D)}}, {{UINT64_C(0x61DDC69498C06F78), UINT64_C(0x680FEDE97985B1A2), UINT64_C(0x214CD2B8FB53A327), UINT64_C(0x98EAC0B3E425132B)}, {UINT64_C(0x5EEDD76D33E5766D), UINT64_C(0x5B280618540000A3), UINT64_C(0x915D55CB65C894AE), UINT64_C(0x7B088A36D20D9523)}}, {{UINT64_C(0x51A47312C28DA278), UINT64_C(0xE315CBA4EFE64521), UINT64_C(0x3EF70A1849D8D0FF), UINT64_C(0x0990CB92CABD48C5)}, {UINT64_C(0x22ED6302A7C2FC76), UINT64_C(0xB50370EA2CB98186), UINT64_C(0xDEA88C65F3F2BA8B), UINT64_C(0x0906245109FEDEEA)}}, {{UINT64_C(0x742F9A2EDAC0F222), UINT64_C(0xE2A8842B95C88A8E), UINT64_C(0x80C057659D817B14), UINT64_C(0x7ED0521A982D49AE)}, {UINT64_C(0x047E49D4907B10F7), UINT64_C(0x8A3E23A7DE8AD4CD), UINT64_C(0xEBE8C13FEB5292B1), UINT64_C(0x048A6209A7EB70BD)}}, {{UINT64_C(0xB51665A09AA34851), UINT64_C(0x4DD5AC1B7C4AFCEE), UINT64_C(0x00DEE7AB25A21937), UINT64_C(0x88E2681E80FAF232)}, {UINT64_C(0x79ECD66AB5411EE2), UINT64_C(0x06008CE3F370BF53), UINT64_C(0xCFB1850EC9BBB64C), UINT64_C(0x5FBACB277149B14E)}}, {{UINT64_C(0xA1F0EE079938AA0C), UINT64_C(0x6945E2BA74CCE9C4), UINT64_C(0x16689FCE46A98BEA), UINT64_C(0x8D71F405CF67DF91)}, {UINT64_C(0x71E4CAC869621150), UINT64_C(0x518FA20089B380D8), UINT64_C(0x3B3B85F153F9E660), UINT64_C(0x02643303C6D9B022)}}, {{UINT64_C(0xE8C478EC07660C3E), UINT64_C(0xA906C3A1EF41F1DA), UINT64_C(0xE918F16046699B71), UINT64_C(0x2B8A0B0EE5BE7B36)}, {UINT64_C(0xC663F0EC889F50A0), UINT64_C(0x7413264BF9214F81), UINT64_C(0x2E9FA9A0421A9087), UINT64_C(0x85C59B7C83546DCD)}}, {{UINT64_C(0xB4A6CF398D920A29), UINT64_C(0xC857AF481B3956A1), UINT64_C(0x519C7371DD794B23), UINT64_C(0x478462208EFBF8F9)}, {UINT64_C(0x184C25E5617E4C6C), UINT64_C(0x218FCC23D2E51A5E), UINT64_C(0xB421971928FA0FFC), UINT64_C(0x6C0BCD71781A61D9)}}, {{UINT64_C(0x440D6DDFDC7B5568), UINT64_C(0x64C7CC310DBBEC7C), UINT64_C(0x63D16D4EA2DC0CBA), UINT64_C(0x7BD9E0CC4504BE2C)}, {UINT64_C(0x9C8828952DE780A8), UINT64_C(0x7C6685C2EF2B2486), UINT64_C(0xF1FB09E9957FA7D8), UINT64_C(0x20C6B5A546A77A98)}}, {{UINT64_C(0x60C7757333C0F0C1), UINT64_C(0x40C93227CADDA5FE), UINT64_C(0xA48EBAA29DD41D5F), UINT64_C(0x4AAFBF3CEA9FD5AD)}, {UINT64_C(0x7EB61836C5A287BA), UINT64_C(0x1D6A1BA2B31BA25E), UINT64_C(0x60507257AD186E52), UINT64_C(0x7FEC8EB02BAB7451)}}, }, { {{UINT64_C(0x500E2FDBB8DA5FFE), UINT64_C(0x6AE2D4EA8CDD1B39), UINT64_C(0x38D120251A5840CD), UINT64_C(0x8D3B20CBC214D26D)}, {UINT64_C(0xEF6BB36CC041E874), UINT64_C(0x67660393450F2218), UINT64_C(0x1E1B7782A892BDFD), UINT64_C(0x2D69514C8D962E62)}}, {{UINT64_C(0x9EDF5F789631B095), UINT64_C(0xAC7DD68745BF8F20), UINT64_C(0x257CCE28E3262EBC), UINT64_C(0x5D32EFCBE0E480A6)}, {UINT64_C(0xED48E34C6FBB99E8), UINT64_C(0x50B1D58C23FDE9B7), UINT64_C(0xC5164C2A6B6927C8), UINT64_C(0x8A0BC6068906B705)}}, {{UINT64_C(0x3FA3C7C92F747DA8), UINT64_C(0x2E8D2C2E14938E08), UINT64_C(0x155A8A5BB6A1C720), UINT64_C(0x6B4D8C9EB3133FD0)}, {UINT64_C(0x079AC7F1CE131C1D), UINT64_C(0x9CF419AF815B7D2B), UINT64_C(0x569EB7BAE60B6245), UINT64_C(0x03C79E609A3DD94E)}}, {{UINT64_C(0x328F5296B9CE9502), UINT64_C(0xCA44ADBDE45C3576), UINT64_C(0x669879526194AE2C), UINT64_C(0x5875F8EFBF9B8C49)}, {UINT64_C(0x525A4D53DA51CAB8), UINT64_C(0x91A592DD9DC268B2), UINT64_C(0xD7EA7958E1E3C168), UINT64_C(0x0D1E20E0A999ED30)}}, {{UINT64_C(0x55DA34E5FE8AD270), UINT64_C(0xB041289561EC55F6), UINT64_C(0x0D45670F534569C9), UINT64_C(0x5A7E6764E23F69FB)}, {UINT64_C(0xBB6BBEC9A8B28676), UINT64_C(0x4F924558093B0D1D), UINT64_C(0xD4E4BF120C29D841), UINT64_C(0x67D2B4C8578A237A)}}, {{UINT64_C(0x0BDF32D663EF2D73), UINT64_C(0x7248DD2D4AE4303C), UINT64_C(0xBB61BAB56CE1E92A), UINT64_C(0x126166E91D7B9A6C)}, {UINT64_C(0x4CE7086A11CEBC3C), UINT64_C(0xE7ACB25E1C71426F), UINT64_C(0xBFB65EDC432CC4AF), UINT64_C(0x3BCA5202CB018CF7)}}, {{UINT64_C(0xACF034F276430A87), UINT64_C(0xBFDF19B3534C42ED), UINT64_C(0x05654FE67946CB1A), UINT64_C(0x0DB07E7980F17880)}, {UINT64_C(0xE6E93101FDCF8BC9), UINT64_C(0xF3198B87F798A8CD), UINT64_C(0xC05444EFC9683420), UINT64_C(0x56E9AA68915D1BF1)}}, {{UINT64_C(0xF27B298B34000B11), UINT64_C(0x70ED8C95F4196E50), UINT64_C(0xF3E16608233C8764), UINT64_C(0x5B97655A41881557)}, {UINT64_C(0x5BF11C1A128C195B), UINT64_C(0xFFB64333372C286D), UINT64_C(0x084D3EF77C83BB31), UINT64_C(0x8ECF6C01745B7D75)}}, {{UINT64_C(0x3D6052B9C6F4FF82), UINT64_C(0x9305FE456607892F), UINT64_C(0x232FD87E5879425F), UINT64_C(0x4CAEDF73D6F47350)}, {UINT64_C(0x889243D2032FC50D), UINT64_C(0xA6AF69D70C9C11AC), UINT64_C(0x43B5429D802E8E06), UINT64_C(0x38F1DEA8D70FC802)}}, {{UINT64_C(0x54F24344C9595C08), UINT64_C(0x95A2E8FB0240AAB3), UINT64_C(0x07A5109DC3544985), UINT64_C(0x96F44213B5D30899)}, {UINT64_C(0x03FAB192AA347497), UINT64_C(0x47FFD3DEC9CFC073), UINT64_C(0x283AD765D2C1D57F), UINT64_C(0x1FDFFBAC62DC271A)}}, {{UINT64_C(0x2355C62995F80CA6), UINT64_C(0x90AE1DBBCD8D880A), UINT64_C(0x563CC122C54117E0), UINT64_C(0x1EF4991B813D7481)}, {UINT64_C(0x8A310D77CCE9AEDE), UINT64_C(0xA401FAEF9318642E), UINT64_C(0xC1712A67CF9AFDCB), UINT64_C(0x8D97374CBE499DE5)}}, {{UINT64_C(0x7437AA3B55A0BC07), UINT64_C(0x004946D0F726DD81), UINT64_C(0x33D41D1B0F341860), UINT64_C(0x2A009EB517840F0D)}, {UINT64_C(0x158F59AEAA0DCDCF), UINT64_C(0xF686EF2DEAB42135), UINT64_C(0xFF6B8E827A80C670), UINT64_C(0x38646963A04DF944)}}, {{UINT64_C(0x6BB2705E4B987E90), UINT64_C(0x2F5E2C4DD3C36316), UINT64_C(0x41B38905E5A9ECEC), UINT64_C(0x2C6BA68155BF8D1A)}, {UINT64_C(0x1121B3B23C92B20B), UINT64_C(0x6DE41B12904305D5), UINT64_C(0xA0496CF4D569EAC4), UINT64_C(0x5C64A06C11E5CF90)}}, {{UINT64_C(0xA65F12ABE28783DF), UINT64_C(0x2A891B0F37322285), UINT64_C(0xD6FF46049811C4EB), UINT64_C(0x7C960ED5A8505AC0)}, {UINT64_C(0xE86893772FCA110D), UINT64_C(0x71AAE29260FD893E), UINT64_C(0x8ADE53177505671D), UINT64_C(0x721A07A58C508791)}}, {{UINT64_C(0xC1AE9A50E5ECCA8C), UINT64_C(0x7528AEF507EB4329), UINT64_C(0x8F0D0E03D1297D88), UINT64_C(0x27C7BF76244BBC0C)}, {UINT64_C(0x96EEDA7CC7E7E9BB), UINT64_C(0xC9749BF7F96C99B3), UINT64_C(0x44C852D2467B4D43), UINT64_C(0x1691D71D937FA21D)}}, {{UINT64_C(0x8CAC092FF8058A68), UINT64_C(0x6B892BCFDAE38445), UINT64_C(0x82CBECE597D76059), UINT64_C(0x5AEB66463518F9E2)}, {UINT64_C(0xA39C710C392080B4), UINT64_C(0x575DC5F41502DE54), UINT64_C(0xA465DD5E3A3D2B4D), UINT64_C(0x281AAE47638EAF45)}}, }, { {{UINT64_C(0xBE40C92BE955A145), UINT64_C(0xD464D6BC324234B5), UINT64_C(0xE8084747B09D4AF8), UINT64_C(0x939C70BF5268D6C3)}, {UINT64_C(0x9C9C9D25D1DDBB48), UINT64_C(0x30D9EA7F790B5B42), UINT64_C(0x367FD79B4E3914B4), UINT64_C(0x27615F29826EE4D7)}}, {{UINT64_C(0x09BB6F1650A41246), UINT64_C(0xC72BFF7AE5459A13), UINT64_C(0x0FC15846FF09B2F7), UINT64_C(0x6D90406209CB693A)}, {UINT64_C(0x98A132F8F40FC67D), UINT64_C(0xC8B6573BDF37CBFA), UINT64_C(0xC9CF994899D7FC36), UINT64_C(0x0DD66ABAA7235DDB)}}, {{UINT64_C(0x0180B525F96048BD), UINT64_C(0xEB566786544F1E70), UINT64_C(0x8BABBF9B8EF4373C), UINT64_C(0x509BA431D9E49178)}, {UINT64_C(0xF961A6F565A4A201), UINT64_C(0xB6621DF98D44ED2D), UINT64_C(0xEADD3C0CD7B4D744), UINT64_C(0x75D27E990EAAB110)}}, {{UINT64_C(0xEAC7AC7685DF5695), UINT64_C(0x02C26274DA7540A3), UINT64_C(0xDEC1BBC4C659B610), UINT64_C(0x54483C1B3AC61EEB)}, {UINT64_C(0x8B91209A217E0283), UINT64_C(0x939FBDAF3A17DDFE), UINT64_C(0xA82C66D65BF98726), UINT64_C(0x2BA82FA0915AAC76)}}, {{UINT64_C(0x99B324C1AF4542E8), UINT64_C(0x16EBC66FC0F225E0), UINT64_C(0xEAE6956327FEF57B), UINT64_C(0x2996FE3C961B03FA)}, {UINT64_C(0x0835212E4F967A68), UINT64_C(0x0AAABD99F44352DC), UINT64_C(0x1874255F4B3A6B8D), UINT64_C(0x45F5D8B26D10B369)}}, {{UINT64_C(0x603DD497F7B7644B), UINT64_C(0x369BE6762D1386AA), UINT64_C(0x08C1B76314C9FA94), UINT64_C(0x734921D9384AF696)}, {UINT64_C(0xA1B5AF5BD76E8EEB), UINT64_C(0xB0EAE7A342F990E8), UINT64_C(0x59E7C515069ED81D), UINT64_C(0x2D1B5E62B5A50610)}}, {{UINT64_C(0xDC32281085995BD3), UINT64_C(0x35A47B05873E7A09), UINT64_C(0x0CDFE9BBA70DE932), UINT64_C(0x049B899DD62FBC89)}, {UINT64_C(0xF6BAA860652291DB), UINT64_C(0x58123B259AF7478F), UINT64_C(0xA05CCBC247B9F204), UINT64_C(0x8A0B479D82D999A7)}}, {{UINT64_C(0xA72B9B522D0F619A), UINT64_C(0xE73B66F75919C420), UINT64_C(0x92319C86D21CFEFE), UINT64_C(0x58EEFC71F1635F0E)}, {UINT64_C(0xDC481783DA909290), UINT64_C(0x144E7A9866316584), UINT64_C(0xBD7E657F45E1E3C8), UINT64_C(0x5C9FCD1CBD93938C)}}, {{UINT64_C(0x2339E2FA436C1AB3), UINT64_C(0x69C22269C26768AA), UINT64_C(0x94DFCAF440FCBD90), UINT64_C(0x56235739C41D4F61)}, {UINT64_C(0x6E50D4DB718468D3), UINT64_C(0xDEA80730CADCEC6C), UINT64_C(0x924FF97E63DC3C43), UINT64_C(0x1B6528256752EA6A)}}, {{UINT64_C(0xAC2BDCDDF07BE4BB), UINT64_C(0xB46D8E968DB0A32D), UINT64_C(0xDD661C68B618488D), UINT64_C(0x8ED22D4B75E1E4BF)}, {UINT64_C(0x5DD2E5DF3C177D80), UINT64_C(0x5049C01282803711), UINT64_C(0xFB243B3F73E0BA27), UINT64_C(0x0C756BA08C7810D5)}}, {{UINT64_C(0xFC58F0BD6F16FBCA), UINT64_C(0xA855BB8CA5E33B36), UINT64_C(0xB9239EB499D08247), UINT64_C(0x27ABC78D49CAF40D)}, {UINT64_C(0x88BE1595A1285278), UINT64_C(0x9D5AEE5B60F16638), UINT64_C(0x3F3815291FCE4327), UINT64_C(0x17206899F19CAA04)}}, {{UINT64_C(0x586163489E047F55), UINT64_C(0x0D6098A5E991FC4C), UINT64_C(0x47760F9899A33914), UINT64_C(0x70C8F5D45608C80E)}, {UINT64_C(0x405F119106036DBE), UINT64_C(0xBF62589580CC0A27), UINT64_C(0xFB8A0330389FA7BF), UINT64_C(0x22B0B9461FA0CBB4)}}, {{UINT64_C(0x84AE19811B1E2ACD), UINT64_C(0xFA23C20563961891), UINT64_C(0xCF4C685E742C1653), UINT64_C(0x55BFC7444D303078)}, {UINT64_C(0xEB131CBBBA03AAE4), UINT64_C(0xF338C0DB2C5B9EAB), UINT64_C(0xC1006396B7495209), UINT64_C(0x0FD928CFF7E6A4E6)}}, {{UINT64_C(0xA6BAC9948633AB84), UINT64_C(0xC165BF5A75364642), UINT64_C(0xB70BEB478C57070D), UINT64_C(0x838158A0D416322E)}, {UINT64_C(0x501D2BFDD4957751), UINT64_C(0xF1CDDF32C23AA730), UINT64_C(0xF64558A85458F1C6), UINT64_C(0x51B6DDE306E1209C)}}, {{UINT64_C(0x0712C186CC31D6BE), UINT64_C(0x91C4064A33CD1D3F), UINT64_C(0xCADAE5B0C7C91F53), UINT64_C(0x52AA408FDEB2A2EE)}, {UINT64_C(0x058675CC202719D5), UINT64_C(0x444F99F51D087D07), UINT64_C(0x4DB587E89D7A8AF4), UINT64_C(0x389376F5DA17095A)}}, {{UINT64_C(0x8262D37048FED385), UINT64_C(0x3B1FB4661AE92689), UINT64_C(0xDA6F570F24242CF4), UINT64_C(0x0532FC9E0DEAC5E9)}, {UINT64_C(0x5E8FB74020C5BD7B), UINT64_C(0x5AE99925002624B3), UINT64_C(0xAD44A4D57AFADC15), UINT64_C(0x6AECBC80DF409330)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 6 * ASSERT: a = -3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(t0, X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(t1, Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(t2, Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t3, X, Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, t3, t3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t4, Y, Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, X, Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, b, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(X3, X3, t3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, t2, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t2, t2, t3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, b, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Z3, Z3, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Z3, Z3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, t3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, t0, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t0, t3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t0, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t0, t4, t4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, t0, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, Z3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed.op3 * https://eprint.iacr.org/2015/1060 Alg 5 * ASSERT: a = -3 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t4, Y2, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, t4, Y1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, X2, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, Y3, X1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, b, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, Z1, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t2, t1, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, t1); /* if P is inf, throw all that away and take Q */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(R->X, nz, Q->X, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 4 * ASSERT: a = -3 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t2, Z1, Z2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, Y1, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t5, Y2, Z2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t5, t1, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, X1, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, X2, Z2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(X3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, t0, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, b, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, t2, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t2, t1, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, t1); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[32], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 32) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[52], const unsigned char in[32]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 51; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[257], const unsigned char in[32]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 257; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[32], const unsigned char b[32], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[257] = {0}; int8_t bnaf[257] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 256; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[51] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 50; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[32]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 1; i >= 0; i--) { for (j = 0; i != 1 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 27; j++) { if (j * 2 + i > 51) continue; d = rnaf[j * 2 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[32], unsigned char outy[32], const unsigned char a[32], const unsigned char b[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery(P.Y, P.Y); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery(P.Y, P.Y); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[32] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_GostR3410_2001_CryptoPro_C_ParamSet( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(n, b_n, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_GostR3410_2001_CryptoPro_C_ParamSet(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_GostR3410_2001_CryptoPro_C_ParamSet(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 32) != 32) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #else /* __SIZEOF_INT128__ */ #include #include #define LIMB_BITS 32 #define LIMB_CNT 8 /* Field elements */ typedef uint32_t fe_t[LIMB_CNT]; typedef uint32_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_GOSTR3410_2001_CRYPTOPRO_C_PARAMSET_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: word_by_word_montgomery --static --use-value-barrier id_GostR3410_2001_CryptoPro_C_ParamSet 32 0x9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D759B */ /* curve description: id_GostR3410_2001_CryptoPro_C_ParamSet */ /* machine_wordsize = 32 (from "32") */ /* requested operations: (all) */ /* m = 0x9b9f605f5a858107ab1ec85e6b41c8aacf846e86789051d37998f7b9022d759b (from "0x9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D759B") */ /* */ /* NOTE: In addition to the bounds specified above each function, all */ /* functions synthesized for this Montgomery arithmetic require the */ /* input to be strictly less than the prime modulus (m), and also */ /* require the input to be in the unique saturated representation. */ /* All functions also ensure that these two properties are true of */ /* return values. */ /* */ /* Computed values: */ /* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ #include typedef unsigned char fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1; typedef signed char fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int1; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_GOSTR3410_2001_CRYPTOPRO_C_PARAMSET_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint32_t fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_value_barrier_u32(uint32_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_value_barrier_u32(x) (x) #endif /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^32 * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint64_t x1; uint32_t x2; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x3; x1 = ((arg1 + (uint64_t)arg2) + arg3); x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); x3 = (fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1)(x1 >> 32); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^32 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 *out2, fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { int64_t x1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int1 x2; uint32_t x3; x1 = ((arg2 - (int64_t)arg1) - arg3); x2 = (fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int1)(x1 >> 32); x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); *out1 = x3; *out2 = (fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1)(0x0 - x2); } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32 is a multiplication, returning the full double-width result. * Postconditions: * out1 = (arg1 * arg2) mod 2^32 * out2 = ⌊arg1 * arg2 / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0xffffffff] * arg2: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0xffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32( uint32_t *out1, uint32_t *out2, uint32_t arg1, uint32_t arg2) { uint64_t x1; uint32_t x2; uint32_t x3; x1 = ((uint64_t)arg1 * arg2); x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); x3 = (uint32_t)(x1 >> 32); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( uint32_t *out1, fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x1; uint32_t x2; uint32_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_int1)(0x0 - x1) & UINT32_C(0xffffffff)); x3 = ((fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_value_barrier_u32(x2) & arg3) | (fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_value_barrier_u32((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul multiplies two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul( uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x28; uint32_t x29; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x30; uint32_t x31; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x32; uint32_t x33; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x34; uint32_t x35; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x36; uint32_t x37; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; uint32_t x55; uint32_t x56; uint32_t x57; uint32_t x58; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x59; uint32_t x60; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x61; uint32_t x62; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x63; uint32_t x64; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x65; uint32_t x66; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x67; uint32_t x68; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x69; uint32_t x70; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x71; uint32_t x72; uint32_t x73; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x74; uint32_t x75; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x76; uint32_t x77; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x78; uint32_t x79; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x80; uint32_t x81; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x82; uint32_t x83; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x84; uint32_t x85; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x86; uint32_t x87; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x88; uint32_t x89; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x90; uint32_t x91; uint32_t x92; uint32_t x93; uint32_t x94; uint32_t x95; uint32_t x96; uint32_t x97; uint32_t x98; uint32_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; uint32_t x104; uint32_t x105; uint32_t x106; uint32_t x107; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x108; uint32_t x109; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x110; uint32_t x111; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x112; uint32_t x113; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x114; uint32_t x115; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x116; uint32_t x117; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x118; uint32_t x119; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x120; uint32_t x121; uint32_t x122; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x123; uint32_t x124; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x125; uint32_t x126; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x127; uint32_t x128; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x129; uint32_t x130; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x131; uint32_t x132; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x133; uint32_t x134; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x135; uint32_t x136; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x137; uint32_t x138; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; uint32_t x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; uint32_t x153; uint32_t x154; uint32_t x155; uint32_t x156; uint32_t x157; uint32_t x158; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x159; uint32_t x160; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x161; uint32_t x162; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x163; uint32_t x164; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x165; uint32_t x166; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x167; uint32_t x168; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x169; uint32_t x170; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x171; uint32_t x172; uint32_t x173; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x174; uint32_t x175; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x176; uint32_t x177; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x178; uint32_t x179; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x180; uint32_t x181; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x182; uint32_t x183; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x184; uint32_t x185; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x186; uint32_t x187; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x188; uint32_t x189; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x190; uint32_t x191; uint32_t x192; uint32_t x193; uint32_t x194; uint32_t x195; uint32_t x196; uint32_t x197; uint32_t x198; uint32_t x199; uint32_t x200; uint32_t x201; uint32_t x202; uint32_t x203; uint32_t x204; uint32_t x205; uint32_t x206; uint32_t x207; uint32_t x208; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x209; uint32_t x210; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x211; uint32_t x212; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x213; uint32_t x214; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x215; uint32_t x216; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x217; uint32_t x218; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x219; uint32_t x220; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x221; uint32_t x222; uint32_t x223; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x224; uint32_t x225; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x226; uint32_t x227; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x228; uint32_t x229; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x230; uint32_t x231; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x232; uint32_t x233; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x234; uint32_t x235; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x236; uint32_t x237; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x238; uint32_t x239; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x240; uint32_t x241; uint32_t x242; uint32_t x243; uint32_t x244; uint32_t x245; uint32_t x246; uint32_t x247; uint32_t x248; uint32_t x249; uint32_t x250; uint32_t x251; uint32_t x252; uint32_t x253; uint32_t x254; uint32_t x255; uint32_t x256; uint32_t x257; uint32_t x258; uint32_t x259; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x260; uint32_t x261; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x262; uint32_t x263; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x264; uint32_t x265; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x266; uint32_t x267; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x268; uint32_t x269; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x270; uint32_t x271; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x272; uint32_t x273; uint32_t x274; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x275; uint32_t x276; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x277; uint32_t x278; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x279; uint32_t x280; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x281; uint32_t x282; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x283; uint32_t x284; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x285; uint32_t x286; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x287; uint32_t x288; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x289; uint32_t x290; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x291; uint32_t x292; uint32_t x293; uint32_t x294; uint32_t x295; uint32_t x296; uint32_t x297; uint32_t x298; uint32_t x299; uint32_t x300; uint32_t x301; uint32_t x302; uint32_t x303; uint32_t x304; uint32_t x305; uint32_t x306; uint32_t x307; uint32_t x308; uint32_t x309; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x310; uint32_t x311; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x312; uint32_t x313; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x314; uint32_t x315; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x316; uint32_t x317; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x318; uint32_t x319; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x320; uint32_t x321; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x322; uint32_t x323; uint32_t x324; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x325; uint32_t x326; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x327; uint32_t x328; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x329; uint32_t x330; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x331; uint32_t x332; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x333; uint32_t x334; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x335; uint32_t x336; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x337; uint32_t x338; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x339; uint32_t x340; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x341; uint32_t x342; uint32_t x343; uint32_t x344; uint32_t x345; uint32_t x346; uint32_t x347; uint32_t x348; uint32_t x349; uint32_t x350; uint32_t x351; uint32_t x352; uint32_t x353; uint32_t x354; uint32_t x355; uint32_t x356; uint32_t x357; uint32_t x358; uint32_t x359; uint32_t x360; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x361; uint32_t x362; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x363; uint32_t x364; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x365; uint32_t x366; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x367; uint32_t x368; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x369; uint32_t x370; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x371; uint32_t x372; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x373; uint32_t x374; uint32_t x375; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x376; uint32_t x377; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x378; uint32_t x379; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x380; uint32_t x381; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x382; uint32_t x383; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x384; uint32_t x385; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x386; uint32_t x387; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x388; uint32_t x389; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x390; uint32_t x391; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x392; uint32_t x393; uint32_t x394; uint32_t x395; uint32_t x396; uint32_t x397; uint32_t x398; uint32_t x399; uint32_t x400; uint32_t x401; uint32_t x402; uint32_t x403; uint32_t x404; uint32_t x405; uint32_t x406; uint32_t x407; uint32_t x408; uint32_t x409; uint32_t x410; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x411; uint32_t x412; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x413; uint32_t x414; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x415; uint32_t x416; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x417; uint32_t x418; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x419; uint32_t x420; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x421; uint32_t x422; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x423; uint32_t x424; uint32_t x425; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x426; uint32_t x427; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x428; uint32_t x429; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x430; uint32_t x431; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x432; uint32_t x433; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x434; uint32_t x435; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x436; uint32_t x437; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x438; uint32_t x439; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x440; uint32_t x441; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x442; uint32_t x443; uint32_t x444; uint32_t x445; uint32_t x446; uint32_t x447; uint32_t x448; uint32_t x449; uint32_t x450; uint32_t x451; uint32_t x452; uint32_t x453; uint32_t x454; uint32_t x455; uint32_t x456; uint32_t x457; uint32_t x458; uint32_t x459; uint32_t x460; uint32_t x461; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x462; uint32_t x463; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x464; uint32_t x465; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x466; uint32_t x467; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x468; uint32_t x469; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x470; uint32_t x471; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x472; uint32_t x473; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x474; uint32_t x475; uint32_t x476; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x477; uint32_t x478; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x479; uint32_t x480; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x481; uint32_t x482; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x483; uint32_t x484; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x485; uint32_t x486; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x487; uint32_t x488; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x489; uint32_t x490; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x491; uint32_t x492; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x493; uint32_t x494; uint32_t x495; uint32_t x496; uint32_t x497; uint32_t x498; uint32_t x499; uint32_t x500; uint32_t x501; uint32_t x502; uint32_t x503; uint32_t x504; uint32_t x505; uint32_t x506; uint32_t x507; uint32_t x508; uint32_t x509; uint32_t x510; uint32_t x511; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x512; uint32_t x513; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x514; uint32_t x515; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x516; uint32_t x517; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x518; uint32_t x519; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x520; uint32_t x521; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x522; uint32_t x523; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x524; uint32_t x525; uint32_t x526; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x527; uint32_t x528; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x529; uint32_t x530; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x531; uint32_t x532; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x533; uint32_t x534; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x535; uint32_t x536; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x537; uint32_t x538; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x539; uint32_t x540; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x541; uint32_t x542; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x543; uint32_t x544; uint32_t x545; uint32_t x546; uint32_t x547; uint32_t x548; uint32_t x549; uint32_t x550; uint32_t x551; uint32_t x552; uint32_t x553; uint32_t x554; uint32_t x555; uint32_t x556; uint32_t x557; uint32_t x558; uint32_t x559; uint32_t x560; uint32_t x561; uint32_t x562; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x563; uint32_t x564; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x565; uint32_t x566; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x567; uint32_t x568; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x569; uint32_t x570; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x571; uint32_t x572; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x573; uint32_t x574; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x575; uint32_t x576; uint32_t x577; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x578; uint32_t x579; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x580; uint32_t x581; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x582; uint32_t x583; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x584; uint32_t x585; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x586; uint32_t x587; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x588; uint32_t x589; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x590; uint32_t x591; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x592; uint32_t x593; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x594; uint32_t x595; uint32_t x596; uint32_t x597; uint32_t x598; uint32_t x599; uint32_t x600; uint32_t x601; uint32_t x602; uint32_t x603; uint32_t x604; uint32_t x605; uint32_t x606; uint32_t x607; uint32_t x608; uint32_t x609; uint32_t x610; uint32_t x611; uint32_t x612; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x613; uint32_t x614; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x615; uint32_t x616; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x617; uint32_t x618; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x619; uint32_t x620; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x621; uint32_t x622; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x623; uint32_t x624; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x625; uint32_t x626; uint32_t x627; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x628; uint32_t x629; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x630; uint32_t x631; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x632; uint32_t x633; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x634; uint32_t x635; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x636; uint32_t x637; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x638; uint32_t x639; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x640; uint32_t x641; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x642; uint32_t x643; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x644; uint32_t x645; uint32_t x646; uint32_t x647; uint32_t x648; uint32_t x649; uint32_t x650; uint32_t x651; uint32_t x652; uint32_t x653; uint32_t x654; uint32_t x655; uint32_t x656; uint32_t x657; uint32_t x658; uint32_t x659; uint32_t x660; uint32_t x661; uint32_t x662; uint32_t x663; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x664; uint32_t x665; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x666; uint32_t x667; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x668; uint32_t x669; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x670; uint32_t x671; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x672; uint32_t x673; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x674; uint32_t x675; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x676; uint32_t x677; uint32_t x678; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x679; uint32_t x680; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x681; uint32_t x682; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x683; uint32_t x684; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x685; uint32_t x686; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x687; uint32_t x688; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x689; uint32_t x690; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x691; uint32_t x692; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x693; uint32_t x694; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x695; uint32_t x696; uint32_t x697; uint32_t x698; uint32_t x699; uint32_t x700; uint32_t x701; uint32_t x702; uint32_t x703; uint32_t x704; uint32_t x705; uint32_t x706; uint32_t x707; uint32_t x708; uint32_t x709; uint32_t x710; uint32_t x711; uint32_t x712; uint32_t x713; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x714; uint32_t x715; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x716; uint32_t x717; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x718; uint32_t x719; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x720; uint32_t x721; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x722; uint32_t x723; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x724; uint32_t x725; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x726; uint32_t x727; uint32_t x728; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x729; uint32_t x730; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x731; uint32_t x732; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x733; uint32_t x734; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x735; uint32_t x736; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x737; uint32_t x738; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x739; uint32_t x740; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x741; uint32_t x742; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x743; uint32_t x744; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x745; uint32_t x746; uint32_t x747; uint32_t x748; uint32_t x749; uint32_t x750; uint32_t x751; uint32_t x752; uint32_t x753; uint32_t x754; uint32_t x755; uint32_t x756; uint32_t x757; uint32_t x758; uint32_t x759; uint32_t x760; uint32_t x761; uint32_t x762; uint32_t x763; uint32_t x764; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x765; uint32_t x766; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x767; uint32_t x768; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x769; uint32_t x770; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x771; uint32_t x772; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x773; uint32_t x774; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x775; uint32_t x776; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x777; uint32_t x778; uint32_t x779; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x780; uint32_t x781; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x782; uint32_t x783; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x784; uint32_t x785; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x786; uint32_t x787; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x788; uint32_t x789; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x790; uint32_t x791; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x792; uint32_t x793; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x794; uint32_t x795; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x796; uint32_t x797; uint32_t x798; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x799; uint32_t x800; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x801; uint32_t x802; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x803; uint32_t x804; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x805; uint32_t x806; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x807; uint32_t x808; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x809; uint32_t x810; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x811; uint32_t x812; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x813; uint32_t x814; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x815; uint32_t x816; uint32_t x817; uint32_t x818; uint32_t x819; uint32_t x820; uint32_t x821; uint32_t x822; uint32_t x823; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x9, &x10, x8, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x11, &x12, x8, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x13, &x14, x8, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x15, &x16, x8, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x17, &x18, x8, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x19, &x20, x8, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x21, &x22, x8, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x23, &x24, x8, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x25, &x26, 0x0, x24, x21); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x27, &x28, x26, x22, x19); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x29, &x30, x28, x20, x17); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x31, &x32, x30, x18, x15); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x33, &x34, x32, x16, x13); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x35, &x36, x34, x14, x11); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x37, &x38, x36, x12, x9); x39 = (x38 + x10); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x40, &x41, x23, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x42, &x43, x40, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x44, &x45, x40, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x46, &x47, x40, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x48, &x49, x40, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x50, &x51, x40, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x52, &x53, x40, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x54, &x55, x40, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x56, &x57, x40, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x58, &x59, 0x0, x57, x54); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x60, &x61, x59, x55, x52); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x62, &x63, x61, x53, x50); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x64, &x65, x63, x51, x48); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x66, &x67, x65, x49, x46); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x68, &x69, x67, x47, x44); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x70, &x71, x69, x45, x42); x72 = (x71 + x43); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x73, &x74, 0x0, x23, x56); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x75, &x76, x74, x25, x58); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x77, &x78, x76, x27, x60); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x79, &x80, x78, x29, x62); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x81, &x82, x80, x31, x64); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x83, &x84, x82, x33, x66); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x85, &x86, x84, x35, x68); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x87, &x88, x86, x37, x70); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x89, &x90, x88, x39, x72); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x91, &x92, x1, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x93, &x94, x1, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x95, &x96, x1, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x97, &x98, x1, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x99, &x100, x1, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x101, &x102, x1, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x103, &x104, x1, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x105, &x106, x1, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x107, &x108, 0x0, x106, x103); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x109, &x110, x108, x104, x101); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x111, &x112, x110, x102, x99); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x113, &x114, x112, x100, x97); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x115, &x116, x114, x98, x95); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x117, &x118, x116, x96, x93); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x119, &x120, x118, x94, x91); x121 = (x120 + x92); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x122, &x123, 0x0, x75, x105); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x124, &x125, x123, x77, x107); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x126, &x127, x125, x79, x109); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x128, &x129, x127, x81, x111); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x130, &x131, x129, x83, x113); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x132, &x133, x131, x85, x115); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x134, &x135, x133, x87, x117); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x136, &x137, x135, x89, x119); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x138, &x139, x137, x90, x121); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x140, &x141, x122, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x142, &x143, x140, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x144, &x145, x140, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x146, &x147, x140, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x148, &x149, x140, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x150, &x151, x140, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x152, &x153, x140, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x154, &x155, x140, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x156, &x157, x140, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x158, &x159, 0x0, x157, x154); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x160, &x161, x159, x155, x152); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x162, &x163, x161, x153, x150); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x164, &x165, x163, x151, x148); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x166, &x167, x165, x149, x146); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x168, &x169, x167, x147, x144); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x170, &x171, x169, x145, x142); x172 = (x171 + x143); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x173, &x174, 0x0, x122, x156); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x175, &x176, x174, x124, x158); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x177, &x178, x176, x126, x160); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x179, &x180, x178, x128, x162); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x181, &x182, x180, x130, x164); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x183, &x184, x182, x132, x166); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x185, &x186, x184, x134, x168); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x187, &x188, x186, x136, x170); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x189, &x190, x188, x138, x172); x191 = ((uint32_t)x190 + x139); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x192, &x193, x2, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x194, &x195, x2, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x196, &x197, x2, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x198, &x199, x2, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x200, &x201, x2, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x202, &x203, x2, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x204, &x205, x2, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x206, &x207, x2, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x208, &x209, 0x0, x207, x204); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x210, &x211, x209, x205, x202); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x212, &x213, x211, x203, x200); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x214, &x215, x213, x201, x198); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x216, &x217, x215, x199, x196); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x218, &x219, x217, x197, x194); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x220, &x221, x219, x195, x192); x222 = (x221 + x193); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x223, &x224, 0x0, x175, x206); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x225, &x226, x224, x177, x208); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x227, &x228, x226, x179, x210); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x229, &x230, x228, x181, x212); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x231, &x232, x230, x183, x214); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x233, &x234, x232, x185, x216); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x235, &x236, x234, x187, x218); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x237, &x238, x236, x189, x220); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x239, &x240, x238, x191, x222); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x241, &x242, x223, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x243, &x244, x241, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x245, &x246, x241, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x247, &x248, x241, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x249, &x250, x241, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x251, &x252, x241, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x253, &x254, x241, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x255, &x256, x241, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x257, &x258, x241, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x259, &x260, 0x0, x258, x255); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x261, &x262, x260, x256, x253); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x263, &x264, x262, x254, x251); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x265, &x266, x264, x252, x249); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x267, &x268, x266, x250, x247); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x269, &x270, x268, x248, x245); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x271, &x272, x270, x246, x243); x273 = (x272 + x244); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x274, &x275, 0x0, x223, x257); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x276, &x277, x275, x225, x259); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x278, &x279, x277, x227, x261); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x280, &x281, x279, x229, x263); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x282, &x283, x281, x231, x265); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x284, &x285, x283, x233, x267); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x286, &x287, x285, x235, x269); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x288, &x289, x287, x237, x271); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x290, &x291, x289, x239, x273); x292 = ((uint32_t)x291 + x240); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x293, &x294, x3, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x295, &x296, x3, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x297, &x298, x3, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x299, &x300, x3, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x301, &x302, x3, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x303, &x304, x3, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x305, &x306, x3, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x307, &x308, x3, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x309, &x310, 0x0, x308, x305); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x311, &x312, x310, x306, x303); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x313, &x314, x312, x304, x301); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x315, &x316, x314, x302, x299); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x317, &x318, x316, x300, x297); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x319, &x320, x318, x298, x295); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x321, &x322, x320, x296, x293); x323 = (x322 + x294); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x324, &x325, 0x0, x276, x307); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x326, &x327, x325, x278, x309); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x328, &x329, x327, x280, x311); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x330, &x331, x329, x282, x313); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x332, &x333, x331, x284, x315); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x334, &x335, x333, x286, x317); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x336, &x337, x335, x288, x319); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x338, &x339, x337, x290, x321); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x340, &x341, x339, x292, x323); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x342, &x343, x324, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x344, &x345, x342, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x346, &x347, x342, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x348, &x349, x342, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x350, &x351, x342, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x352, &x353, x342, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x354, &x355, x342, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x356, &x357, x342, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x358, &x359, x342, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x360, &x361, 0x0, x359, x356); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x362, &x363, x361, x357, x354); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x364, &x365, x363, x355, x352); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x366, &x367, x365, x353, x350); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x368, &x369, x367, x351, x348); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x370, &x371, x369, x349, x346); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x372, &x373, x371, x347, x344); x374 = (x373 + x345); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x375, &x376, 0x0, x324, x358); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x377, &x378, x376, x326, x360); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x379, &x380, x378, x328, x362); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x381, &x382, x380, x330, x364); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x383, &x384, x382, x332, x366); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x385, &x386, x384, x334, x368); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x387, &x388, x386, x336, x370); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x389, &x390, x388, x338, x372); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x391, &x392, x390, x340, x374); x393 = ((uint32_t)x392 + x341); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x394, &x395, x4, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x396, &x397, x4, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x398, &x399, x4, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x400, &x401, x4, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x402, &x403, x4, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x404, &x405, x4, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x406, &x407, x4, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x408, &x409, x4, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x410, &x411, 0x0, x409, x406); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x412, &x413, x411, x407, x404); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x414, &x415, x413, x405, x402); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x416, &x417, x415, x403, x400); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x418, &x419, x417, x401, x398); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x420, &x421, x419, x399, x396); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x422, &x423, x421, x397, x394); x424 = (x423 + x395); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x425, &x426, 0x0, x377, x408); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x427, &x428, x426, x379, x410); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x429, &x430, x428, x381, x412); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x431, &x432, x430, x383, x414); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x433, &x434, x432, x385, x416); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x435, &x436, x434, x387, x418); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x437, &x438, x436, x389, x420); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x439, &x440, x438, x391, x422); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x441, &x442, x440, x393, x424); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x443, &x444, x425, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x445, &x446, x443, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x447, &x448, x443, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x449, &x450, x443, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x451, &x452, x443, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x453, &x454, x443, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x455, &x456, x443, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x457, &x458, x443, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x459, &x460, x443, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x461, &x462, 0x0, x460, x457); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x463, &x464, x462, x458, x455); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x465, &x466, x464, x456, x453); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x467, &x468, x466, x454, x451); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x469, &x470, x468, x452, x449); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x471, &x472, x470, x450, x447); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x473, &x474, x472, x448, x445); x475 = (x474 + x446); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x476, &x477, 0x0, x425, x459); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x478, &x479, x477, x427, x461); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x480, &x481, x479, x429, x463); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x482, &x483, x481, x431, x465); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x484, &x485, x483, x433, x467); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x486, &x487, x485, x435, x469); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x488, &x489, x487, x437, x471); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x490, &x491, x489, x439, x473); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x492, &x493, x491, x441, x475); x494 = ((uint32_t)x493 + x442); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x495, &x496, x5, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x497, &x498, x5, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x499, &x500, x5, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x501, &x502, x5, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x503, &x504, x5, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x505, &x506, x5, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x507, &x508, x5, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x509, &x510, x5, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x511, &x512, 0x0, x510, x507); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x513, &x514, x512, x508, x505); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x515, &x516, x514, x506, x503); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x517, &x518, x516, x504, x501); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x519, &x520, x518, x502, x499); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x521, &x522, x520, x500, x497); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x523, &x524, x522, x498, x495); x525 = (x524 + x496); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x526, &x527, 0x0, x478, x509); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x528, &x529, x527, x480, x511); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x530, &x531, x529, x482, x513); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x532, &x533, x531, x484, x515); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x534, &x535, x533, x486, x517); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x536, &x537, x535, x488, x519); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x538, &x539, x537, x490, x521); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x540, &x541, x539, x492, x523); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x542, &x543, x541, x494, x525); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x544, &x545, x526, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x546, &x547, x544, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x548, &x549, x544, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x550, &x551, x544, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x552, &x553, x544, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x554, &x555, x544, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x556, &x557, x544, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x558, &x559, x544, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x560, &x561, x544, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x562, &x563, 0x0, x561, x558); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x564, &x565, x563, x559, x556); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x566, &x567, x565, x557, x554); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x568, &x569, x567, x555, x552); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x570, &x571, x569, x553, x550); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x572, &x573, x571, x551, x548); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x574, &x575, x573, x549, x546); x576 = (x575 + x547); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x577, &x578, 0x0, x526, x560); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x579, &x580, x578, x528, x562); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x581, &x582, x580, x530, x564); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x583, &x584, x582, x532, x566); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x585, &x586, x584, x534, x568); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x587, &x588, x586, x536, x570); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x589, &x590, x588, x538, x572); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x591, &x592, x590, x540, x574); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x593, &x594, x592, x542, x576); x595 = ((uint32_t)x594 + x543); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x596, &x597, x6, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x598, &x599, x6, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x600, &x601, x6, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x602, &x603, x6, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x604, &x605, x6, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x606, &x607, x6, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x608, &x609, x6, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x610, &x611, x6, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x612, &x613, 0x0, x611, x608); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x614, &x615, x613, x609, x606); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x616, &x617, x615, x607, x604); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x618, &x619, x617, x605, x602); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x620, &x621, x619, x603, x600); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x622, &x623, x621, x601, x598); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x624, &x625, x623, x599, x596); x626 = (x625 + x597); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x627, &x628, 0x0, x579, x610); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x629, &x630, x628, x581, x612); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x631, &x632, x630, x583, x614); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x633, &x634, x632, x585, x616); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x635, &x636, x634, x587, x618); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x637, &x638, x636, x589, x620); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x639, &x640, x638, x591, x622); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x641, &x642, x640, x593, x624); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x643, &x644, x642, x595, x626); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x645, &x646, x627, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x647, &x648, x645, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x649, &x650, x645, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x651, &x652, x645, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x653, &x654, x645, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x655, &x656, x645, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x657, &x658, x645, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x659, &x660, x645, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x661, &x662, x645, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x663, &x664, 0x0, x662, x659); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x665, &x666, x664, x660, x657); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x667, &x668, x666, x658, x655); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x669, &x670, x668, x656, x653); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x671, &x672, x670, x654, x651); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x673, &x674, x672, x652, x649); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x675, &x676, x674, x650, x647); x677 = (x676 + x648); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x678, &x679, 0x0, x627, x661); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x680, &x681, x679, x629, x663); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x682, &x683, x681, x631, x665); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x684, &x685, x683, x633, x667); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x686, &x687, x685, x635, x669); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x688, &x689, x687, x637, x671); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x690, &x691, x689, x639, x673); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x692, &x693, x691, x641, x675); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x694, &x695, x693, x643, x677); x696 = ((uint32_t)x695 + x644); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x697, &x698, x7, (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x699, &x700, x7, (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x701, &x702, x7, (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x703, &x704, x7, (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x705, &x706, x7, (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x707, &x708, x7, (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x709, &x710, x7, (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x711, &x712, x7, (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x713, &x714, 0x0, x712, x709); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x715, &x716, x714, x710, x707); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x717, &x718, x716, x708, x705); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x719, &x720, x718, x706, x703); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x721, &x722, x720, x704, x701); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x723, &x724, x722, x702, x699); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x725, &x726, x724, x700, x697); x727 = (x726 + x698); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x728, &x729, 0x0, x680, x711); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x730, &x731, x729, x682, x713); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x732, &x733, x731, x684, x715); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x734, &x735, x733, x686, x717); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x736, &x737, x735, x688, x719); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x738, &x739, x737, x690, x721); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x740, &x741, x739, x692, x723); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x742, &x743, x741, x694, x725); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x744, &x745, x743, x696, x727); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x746, &x747, x728, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x748, &x749, x746, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x750, &x751, x746, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x752, &x753, x746, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x754, &x755, x746, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x756, &x757, x746, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x758, &x759, x746, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x760, &x761, x746, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x762, &x763, x746, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x764, &x765, 0x0, x763, x760); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x766, &x767, x765, x761, x758); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x768, &x769, x767, x759, x756); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x770, &x771, x769, x757, x754); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x772, &x773, x771, x755, x752); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x774, &x775, x773, x753, x750); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x776, &x777, x775, x751, x748); x778 = (x777 + x749); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x779, &x780, 0x0, x728, x762); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x781, &x782, x780, x730, x764); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x783, &x784, x782, x732, x766); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x785, &x786, x784, x734, x768); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x787, &x788, x786, x736, x770); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x789, &x790, x788, x738, x772); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x791, &x792, x790, x740, x774); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x793, &x794, x792, x742, x776); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x795, &x796, x794, x744, x778); x797 = ((uint32_t)x796 + x745); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x798, &x799, 0x0, x781, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x800, &x801, x799, x783, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x802, &x803, x801, x785, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x804, &x805, x803, x787, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x806, &x807, x805, x789, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x808, &x809, x807, x791, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x810, &x811, x809, x793, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x812, &x813, x811, x795, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x814, &x815, x813, x797, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x816, x815, x798, x781); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x817, x815, x800, x783); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x818, x815, x802, x785); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x819, x815, x804, x787); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x820, x815, x806, x789); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x821, x815, x808, x791); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x822, x815, x810, x793); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x823, x815, x812, x795); out1[0] = x816; out1[1] = x817; out1[2] = x818; out1[3] = x819; out1[4] = x820; out1[5] = x821; out1[6] = x822; out1[7] = x823; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square squares a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square( uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x28; uint32_t x29; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x30; uint32_t x31; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x32; uint32_t x33; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x34; uint32_t x35; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x36; uint32_t x37; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; uint32_t x55; uint32_t x56; uint32_t x57; uint32_t x58; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x59; uint32_t x60; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x61; uint32_t x62; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x63; uint32_t x64; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x65; uint32_t x66; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x67; uint32_t x68; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x69; uint32_t x70; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x71; uint32_t x72; uint32_t x73; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x74; uint32_t x75; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x76; uint32_t x77; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x78; uint32_t x79; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x80; uint32_t x81; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x82; uint32_t x83; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x84; uint32_t x85; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x86; uint32_t x87; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x88; uint32_t x89; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x90; uint32_t x91; uint32_t x92; uint32_t x93; uint32_t x94; uint32_t x95; uint32_t x96; uint32_t x97; uint32_t x98; uint32_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; uint32_t x104; uint32_t x105; uint32_t x106; uint32_t x107; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x108; uint32_t x109; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x110; uint32_t x111; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x112; uint32_t x113; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x114; uint32_t x115; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x116; uint32_t x117; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x118; uint32_t x119; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x120; uint32_t x121; uint32_t x122; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x123; uint32_t x124; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x125; uint32_t x126; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x127; uint32_t x128; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x129; uint32_t x130; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x131; uint32_t x132; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x133; uint32_t x134; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x135; uint32_t x136; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x137; uint32_t x138; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; uint32_t x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; uint32_t x153; uint32_t x154; uint32_t x155; uint32_t x156; uint32_t x157; uint32_t x158; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x159; uint32_t x160; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x161; uint32_t x162; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x163; uint32_t x164; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x165; uint32_t x166; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x167; uint32_t x168; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x169; uint32_t x170; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x171; uint32_t x172; uint32_t x173; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x174; uint32_t x175; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x176; uint32_t x177; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x178; uint32_t x179; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x180; uint32_t x181; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x182; uint32_t x183; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x184; uint32_t x185; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x186; uint32_t x187; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x188; uint32_t x189; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x190; uint32_t x191; uint32_t x192; uint32_t x193; uint32_t x194; uint32_t x195; uint32_t x196; uint32_t x197; uint32_t x198; uint32_t x199; uint32_t x200; uint32_t x201; uint32_t x202; uint32_t x203; uint32_t x204; uint32_t x205; uint32_t x206; uint32_t x207; uint32_t x208; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x209; uint32_t x210; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x211; uint32_t x212; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x213; uint32_t x214; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x215; uint32_t x216; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x217; uint32_t x218; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x219; uint32_t x220; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x221; uint32_t x222; uint32_t x223; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x224; uint32_t x225; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x226; uint32_t x227; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x228; uint32_t x229; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x230; uint32_t x231; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x232; uint32_t x233; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x234; uint32_t x235; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x236; uint32_t x237; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x238; uint32_t x239; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x240; uint32_t x241; uint32_t x242; uint32_t x243; uint32_t x244; uint32_t x245; uint32_t x246; uint32_t x247; uint32_t x248; uint32_t x249; uint32_t x250; uint32_t x251; uint32_t x252; uint32_t x253; uint32_t x254; uint32_t x255; uint32_t x256; uint32_t x257; uint32_t x258; uint32_t x259; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x260; uint32_t x261; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x262; uint32_t x263; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x264; uint32_t x265; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x266; uint32_t x267; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x268; uint32_t x269; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x270; uint32_t x271; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x272; uint32_t x273; uint32_t x274; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x275; uint32_t x276; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x277; uint32_t x278; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x279; uint32_t x280; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x281; uint32_t x282; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x283; uint32_t x284; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x285; uint32_t x286; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x287; uint32_t x288; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x289; uint32_t x290; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x291; uint32_t x292; uint32_t x293; uint32_t x294; uint32_t x295; uint32_t x296; uint32_t x297; uint32_t x298; uint32_t x299; uint32_t x300; uint32_t x301; uint32_t x302; uint32_t x303; uint32_t x304; uint32_t x305; uint32_t x306; uint32_t x307; uint32_t x308; uint32_t x309; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x310; uint32_t x311; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x312; uint32_t x313; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x314; uint32_t x315; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x316; uint32_t x317; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x318; uint32_t x319; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x320; uint32_t x321; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x322; uint32_t x323; uint32_t x324; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x325; uint32_t x326; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x327; uint32_t x328; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x329; uint32_t x330; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x331; uint32_t x332; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x333; uint32_t x334; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x335; uint32_t x336; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x337; uint32_t x338; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x339; uint32_t x340; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x341; uint32_t x342; uint32_t x343; uint32_t x344; uint32_t x345; uint32_t x346; uint32_t x347; uint32_t x348; uint32_t x349; uint32_t x350; uint32_t x351; uint32_t x352; uint32_t x353; uint32_t x354; uint32_t x355; uint32_t x356; uint32_t x357; uint32_t x358; uint32_t x359; uint32_t x360; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x361; uint32_t x362; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x363; uint32_t x364; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x365; uint32_t x366; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x367; uint32_t x368; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x369; uint32_t x370; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x371; uint32_t x372; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x373; uint32_t x374; uint32_t x375; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x376; uint32_t x377; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x378; uint32_t x379; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x380; uint32_t x381; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x382; uint32_t x383; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x384; uint32_t x385; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x386; uint32_t x387; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x388; uint32_t x389; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x390; uint32_t x391; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x392; uint32_t x393; uint32_t x394; uint32_t x395; uint32_t x396; uint32_t x397; uint32_t x398; uint32_t x399; uint32_t x400; uint32_t x401; uint32_t x402; uint32_t x403; uint32_t x404; uint32_t x405; uint32_t x406; uint32_t x407; uint32_t x408; uint32_t x409; uint32_t x410; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x411; uint32_t x412; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x413; uint32_t x414; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x415; uint32_t x416; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x417; uint32_t x418; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x419; uint32_t x420; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x421; uint32_t x422; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x423; uint32_t x424; uint32_t x425; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x426; uint32_t x427; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x428; uint32_t x429; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x430; uint32_t x431; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x432; uint32_t x433; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x434; uint32_t x435; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x436; uint32_t x437; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x438; uint32_t x439; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x440; uint32_t x441; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x442; uint32_t x443; uint32_t x444; uint32_t x445; uint32_t x446; uint32_t x447; uint32_t x448; uint32_t x449; uint32_t x450; uint32_t x451; uint32_t x452; uint32_t x453; uint32_t x454; uint32_t x455; uint32_t x456; uint32_t x457; uint32_t x458; uint32_t x459; uint32_t x460; uint32_t x461; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x462; uint32_t x463; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x464; uint32_t x465; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x466; uint32_t x467; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x468; uint32_t x469; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x470; uint32_t x471; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x472; uint32_t x473; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x474; uint32_t x475; uint32_t x476; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x477; uint32_t x478; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x479; uint32_t x480; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x481; uint32_t x482; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x483; uint32_t x484; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x485; uint32_t x486; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x487; uint32_t x488; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x489; uint32_t x490; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x491; uint32_t x492; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x493; uint32_t x494; uint32_t x495; uint32_t x496; uint32_t x497; uint32_t x498; uint32_t x499; uint32_t x500; uint32_t x501; uint32_t x502; uint32_t x503; uint32_t x504; uint32_t x505; uint32_t x506; uint32_t x507; uint32_t x508; uint32_t x509; uint32_t x510; uint32_t x511; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x512; uint32_t x513; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x514; uint32_t x515; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x516; uint32_t x517; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x518; uint32_t x519; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x520; uint32_t x521; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x522; uint32_t x523; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x524; uint32_t x525; uint32_t x526; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x527; uint32_t x528; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x529; uint32_t x530; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x531; uint32_t x532; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x533; uint32_t x534; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x535; uint32_t x536; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x537; uint32_t x538; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x539; uint32_t x540; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x541; uint32_t x542; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x543; uint32_t x544; uint32_t x545; uint32_t x546; uint32_t x547; uint32_t x548; uint32_t x549; uint32_t x550; uint32_t x551; uint32_t x552; uint32_t x553; uint32_t x554; uint32_t x555; uint32_t x556; uint32_t x557; uint32_t x558; uint32_t x559; uint32_t x560; uint32_t x561; uint32_t x562; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x563; uint32_t x564; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x565; uint32_t x566; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x567; uint32_t x568; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x569; uint32_t x570; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x571; uint32_t x572; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x573; uint32_t x574; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x575; uint32_t x576; uint32_t x577; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x578; uint32_t x579; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x580; uint32_t x581; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x582; uint32_t x583; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x584; uint32_t x585; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x586; uint32_t x587; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x588; uint32_t x589; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x590; uint32_t x591; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x592; uint32_t x593; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x594; uint32_t x595; uint32_t x596; uint32_t x597; uint32_t x598; uint32_t x599; uint32_t x600; uint32_t x601; uint32_t x602; uint32_t x603; uint32_t x604; uint32_t x605; uint32_t x606; uint32_t x607; uint32_t x608; uint32_t x609; uint32_t x610; uint32_t x611; uint32_t x612; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x613; uint32_t x614; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x615; uint32_t x616; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x617; uint32_t x618; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x619; uint32_t x620; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x621; uint32_t x622; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x623; uint32_t x624; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x625; uint32_t x626; uint32_t x627; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x628; uint32_t x629; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x630; uint32_t x631; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x632; uint32_t x633; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x634; uint32_t x635; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x636; uint32_t x637; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x638; uint32_t x639; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x640; uint32_t x641; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x642; uint32_t x643; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x644; uint32_t x645; uint32_t x646; uint32_t x647; uint32_t x648; uint32_t x649; uint32_t x650; uint32_t x651; uint32_t x652; uint32_t x653; uint32_t x654; uint32_t x655; uint32_t x656; uint32_t x657; uint32_t x658; uint32_t x659; uint32_t x660; uint32_t x661; uint32_t x662; uint32_t x663; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x664; uint32_t x665; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x666; uint32_t x667; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x668; uint32_t x669; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x670; uint32_t x671; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x672; uint32_t x673; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x674; uint32_t x675; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x676; uint32_t x677; uint32_t x678; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x679; uint32_t x680; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x681; uint32_t x682; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x683; uint32_t x684; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x685; uint32_t x686; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x687; uint32_t x688; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x689; uint32_t x690; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x691; uint32_t x692; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x693; uint32_t x694; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x695; uint32_t x696; uint32_t x697; uint32_t x698; uint32_t x699; uint32_t x700; uint32_t x701; uint32_t x702; uint32_t x703; uint32_t x704; uint32_t x705; uint32_t x706; uint32_t x707; uint32_t x708; uint32_t x709; uint32_t x710; uint32_t x711; uint32_t x712; uint32_t x713; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x714; uint32_t x715; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x716; uint32_t x717; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x718; uint32_t x719; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x720; uint32_t x721; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x722; uint32_t x723; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x724; uint32_t x725; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x726; uint32_t x727; uint32_t x728; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x729; uint32_t x730; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x731; uint32_t x732; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x733; uint32_t x734; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x735; uint32_t x736; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x737; uint32_t x738; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x739; uint32_t x740; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x741; uint32_t x742; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x743; uint32_t x744; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x745; uint32_t x746; uint32_t x747; uint32_t x748; uint32_t x749; uint32_t x750; uint32_t x751; uint32_t x752; uint32_t x753; uint32_t x754; uint32_t x755; uint32_t x756; uint32_t x757; uint32_t x758; uint32_t x759; uint32_t x760; uint32_t x761; uint32_t x762; uint32_t x763; uint32_t x764; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x765; uint32_t x766; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x767; uint32_t x768; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x769; uint32_t x770; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x771; uint32_t x772; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x773; uint32_t x774; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x775; uint32_t x776; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x777; uint32_t x778; uint32_t x779; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x780; uint32_t x781; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x782; uint32_t x783; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x784; uint32_t x785; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x786; uint32_t x787; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x788; uint32_t x789; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x790; uint32_t x791; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x792; uint32_t x793; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x794; uint32_t x795; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x796; uint32_t x797; uint32_t x798; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x799; uint32_t x800; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x801; uint32_t x802; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x803; uint32_t x804; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x805; uint32_t x806; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x807; uint32_t x808; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x809; uint32_t x810; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x811; uint32_t x812; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x813; uint32_t x814; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x815; uint32_t x816; uint32_t x817; uint32_t x818; uint32_t x819; uint32_t x820; uint32_t x821; uint32_t x822; uint32_t x823; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x9, &x10, x8, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x11, &x12, x8, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x13, &x14, x8, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x15, &x16, x8, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x17, &x18, x8, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x19, &x20, x8, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x21, &x22, x8, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x23, &x24, x8, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x25, &x26, 0x0, x24, x21); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x27, &x28, x26, x22, x19); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x29, &x30, x28, x20, x17); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x31, &x32, x30, x18, x15); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x33, &x34, x32, x16, x13); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x35, &x36, x34, x14, x11); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x37, &x38, x36, x12, x9); x39 = (x38 + x10); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x40, &x41, x23, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x42, &x43, x40, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x44, &x45, x40, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x46, &x47, x40, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x48, &x49, x40, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x50, &x51, x40, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x52, &x53, x40, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x54, &x55, x40, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x56, &x57, x40, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x58, &x59, 0x0, x57, x54); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x60, &x61, x59, x55, x52); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x62, &x63, x61, x53, x50); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x64, &x65, x63, x51, x48); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x66, &x67, x65, x49, x46); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x68, &x69, x67, x47, x44); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x70, &x71, x69, x45, x42); x72 = (x71 + x43); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x73, &x74, 0x0, x23, x56); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x75, &x76, x74, x25, x58); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x77, &x78, x76, x27, x60); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x79, &x80, x78, x29, x62); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x81, &x82, x80, x31, x64); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x83, &x84, x82, x33, x66); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x85, &x86, x84, x35, x68); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x87, &x88, x86, x37, x70); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x89, &x90, x88, x39, x72); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x91, &x92, x1, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x93, &x94, x1, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x95, &x96, x1, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x97, &x98, x1, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x99, &x100, x1, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x101, &x102, x1, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x103, &x104, x1, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x105, &x106, x1, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x107, &x108, 0x0, x106, x103); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x109, &x110, x108, x104, x101); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x111, &x112, x110, x102, x99); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x113, &x114, x112, x100, x97); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x115, &x116, x114, x98, x95); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x117, &x118, x116, x96, x93); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x119, &x120, x118, x94, x91); x121 = (x120 + x92); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x122, &x123, 0x0, x75, x105); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x124, &x125, x123, x77, x107); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x126, &x127, x125, x79, x109); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x128, &x129, x127, x81, x111); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x130, &x131, x129, x83, x113); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x132, &x133, x131, x85, x115); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x134, &x135, x133, x87, x117); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x136, &x137, x135, x89, x119); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x138, &x139, x137, x90, x121); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x140, &x141, x122, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x142, &x143, x140, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x144, &x145, x140, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x146, &x147, x140, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x148, &x149, x140, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x150, &x151, x140, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x152, &x153, x140, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x154, &x155, x140, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x156, &x157, x140, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x158, &x159, 0x0, x157, x154); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x160, &x161, x159, x155, x152); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x162, &x163, x161, x153, x150); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x164, &x165, x163, x151, x148); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x166, &x167, x165, x149, x146); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x168, &x169, x167, x147, x144); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x170, &x171, x169, x145, x142); x172 = (x171 + x143); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x173, &x174, 0x0, x122, x156); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x175, &x176, x174, x124, x158); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x177, &x178, x176, x126, x160); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x179, &x180, x178, x128, x162); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x181, &x182, x180, x130, x164); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x183, &x184, x182, x132, x166); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x185, &x186, x184, x134, x168); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x187, &x188, x186, x136, x170); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x189, &x190, x188, x138, x172); x191 = ((uint32_t)x190 + x139); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x192, &x193, x2, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x194, &x195, x2, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x196, &x197, x2, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x198, &x199, x2, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x200, &x201, x2, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x202, &x203, x2, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x204, &x205, x2, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x206, &x207, x2, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x208, &x209, 0x0, x207, x204); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x210, &x211, x209, x205, x202); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x212, &x213, x211, x203, x200); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x214, &x215, x213, x201, x198); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x216, &x217, x215, x199, x196); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x218, &x219, x217, x197, x194); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x220, &x221, x219, x195, x192); x222 = (x221 + x193); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x223, &x224, 0x0, x175, x206); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x225, &x226, x224, x177, x208); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x227, &x228, x226, x179, x210); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x229, &x230, x228, x181, x212); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x231, &x232, x230, x183, x214); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x233, &x234, x232, x185, x216); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x235, &x236, x234, x187, x218); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x237, &x238, x236, x189, x220); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x239, &x240, x238, x191, x222); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x241, &x242, x223, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x243, &x244, x241, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x245, &x246, x241, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x247, &x248, x241, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x249, &x250, x241, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x251, &x252, x241, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x253, &x254, x241, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x255, &x256, x241, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x257, &x258, x241, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x259, &x260, 0x0, x258, x255); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x261, &x262, x260, x256, x253); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x263, &x264, x262, x254, x251); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x265, &x266, x264, x252, x249); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x267, &x268, x266, x250, x247); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x269, &x270, x268, x248, x245); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x271, &x272, x270, x246, x243); x273 = (x272 + x244); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x274, &x275, 0x0, x223, x257); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x276, &x277, x275, x225, x259); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x278, &x279, x277, x227, x261); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x280, &x281, x279, x229, x263); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x282, &x283, x281, x231, x265); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x284, &x285, x283, x233, x267); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x286, &x287, x285, x235, x269); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x288, &x289, x287, x237, x271); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x290, &x291, x289, x239, x273); x292 = ((uint32_t)x291 + x240); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x293, &x294, x3, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x295, &x296, x3, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x297, &x298, x3, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x299, &x300, x3, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x301, &x302, x3, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x303, &x304, x3, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x305, &x306, x3, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x307, &x308, x3, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x309, &x310, 0x0, x308, x305); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x311, &x312, x310, x306, x303); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x313, &x314, x312, x304, x301); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x315, &x316, x314, x302, x299); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x317, &x318, x316, x300, x297); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x319, &x320, x318, x298, x295); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x321, &x322, x320, x296, x293); x323 = (x322 + x294); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x324, &x325, 0x0, x276, x307); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x326, &x327, x325, x278, x309); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x328, &x329, x327, x280, x311); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x330, &x331, x329, x282, x313); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x332, &x333, x331, x284, x315); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x334, &x335, x333, x286, x317); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x336, &x337, x335, x288, x319); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x338, &x339, x337, x290, x321); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x340, &x341, x339, x292, x323); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x342, &x343, x324, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x344, &x345, x342, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x346, &x347, x342, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x348, &x349, x342, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x350, &x351, x342, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x352, &x353, x342, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x354, &x355, x342, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x356, &x357, x342, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x358, &x359, x342, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x360, &x361, 0x0, x359, x356); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x362, &x363, x361, x357, x354); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x364, &x365, x363, x355, x352); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x366, &x367, x365, x353, x350); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x368, &x369, x367, x351, x348); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x370, &x371, x369, x349, x346); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x372, &x373, x371, x347, x344); x374 = (x373 + x345); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x375, &x376, 0x0, x324, x358); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x377, &x378, x376, x326, x360); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x379, &x380, x378, x328, x362); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x381, &x382, x380, x330, x364); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x383, &x384, x382, x332, x366); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x385, &x386, x384, x334, x368); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x387, &x388, x386, x336, x370); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x389, &x390, x388, x338, x372); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x391, &x392, x390, x340, x374); x393 = ((uint32_t)x392 + x341); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x394, &x395, x4, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x396, &x397, x4, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x398, &x399, x4, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x400, &x401, x4, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x402, &x403, x4, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x404, &x405, x4, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x406, &x407, x4, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x408, &x409, x4, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x410, &x411, 0x0, x409, x406); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x412, &x413, x411, x407, x404); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x414, &x415, x413, x405, x402); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x416, &x417, x415, x403, x400); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x418, &x419, x417, x401, x398); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x420, &x421, x419, x399, x396); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x422, &x423, x421, x397, x394); x424 = (x423 + x395); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x425, &x426, 0x0, x377, x408); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x427, &x428, x426, x379, x410); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x429, &x430, x428, x381, x412); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x431, &x432, x430, x383, x414); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x433, &x434, x432, x385, x416); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x435, &x436, x434, x387, x418); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x437, &x438, x436, x389, x420); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x439, &x440, x438, x391, x422); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x441, &x442, x440, x393, x424); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x443, &x444, x425, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x445, &x446, x443, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x447, &x448, x443, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x449, &x450, x443, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x451, &x452, x443, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x453, &x454, x443, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x455, &x456, x443, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x457, &x458, x443, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x459, &x460, x443, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x461, &x462, 0x0, x460, x457); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x463, &x464, x462, x458, x455); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x465, &x466, x464, x456, x453); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x467, &x468, x466, x454, x451); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x469, &x470, x468, x452, x449); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x471, &x472, x470, x450, x447); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x473, &x474, x472, x448, x445); x475 = (x474 + x446); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x476, &x477, 0x0, x425, x459); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x478, &x479, x477, x427, x461); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x480, &x481, x479, x429, x463); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x482, &x483, x481, x431, x465); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x484, &x485, x483, x433, x467); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x486, &x487, x485, x435, x469); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x488, &x489, x487, x437, x471); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x490, &x491, x489, x439, x473); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x492, &x493, x491, x441, x475); x494 = ((uint32_t)x493 + x442); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x495, &x496, x5, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x497, &x498, x5, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x499, &x500, x5, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x501, &x502, x5, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x503, &x504, x5, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x505, &x506, x5, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x507, &x508, x5, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x509, &x510, x5, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x511, &x512, 0x0, x510, x507); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x513, &x514, x512, x508, x505); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x515, &x516, x514, x506, x503); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x517, &x518, x516, x504, x501); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x519, &x520, x518, x502, x499); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x521, &x522, x520, x500, x497); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x523, &x524, x522, x498, x495); x525 = (x524 + x496); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x526, &x527, 0x0, x478, x509); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x528, &x529, x527, x480, x511); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x530, &x531, x529, x482, x513); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x532, &x533, x531, x484, x515); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x534, &x535, x533, x486, x517); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x536, &x537, x535, x488, x519); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x538, &x539, x537, x490, x521); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x540, &x541, x539, x492, x523); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x542, &x543, x541, x494, x525); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x544, &x545, x526, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x546, &x547, x544, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x548, &x549, x544, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x550, &x551, x544, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x552, &x553, x544, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x554, &x555, x544, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x556, &x557, x544, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x558, &x559, x544, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x560, &x561, x544, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x562, &x563, 0x0, x561, x558); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x564, &x565, x563, x559, x556); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x566, &x567, x565, x557, x554); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x568, &x569, x567, x555, x552); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x570, &x571, x569, x553, x550); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x572, &x573, x571, x551, x548); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x574, &x575, x573, x549, x546); x576 = (x575 + x547); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x577, &x578, 0x0, x526, x560); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x579, &x580, x578, x528, x562); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x581, &x582, x580, x530, x564); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x583, &x584, x582, x532, x566); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x585, &x586, x584, x534, x568); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x587, &x588, x586, x536, x570); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x589, &x590, x588, x538, x572); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x591, &x592, x590, x540, x574); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x593, &x594, x592, x542, x576); x595 = ((uint32_t)x594 + x543); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x596, &x597, x6, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x598, &x599, x6, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x600, &x601, x6, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x602, &x603, x6, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x604, &x605, x6, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x606, &x607, x6, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x608, &x609, x6, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x610, &x611, x6, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x612, &x613, 0x0, x611, x608); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x614, &x615, x613, x609, x606); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x616, &x617, x615, x607, x604); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x618, &x619, x617, x605, x602); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x620, &x621, x619, x603, x600); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x622, &x623, x621, x601, x598); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x624, &x625, x623, x599, x596); x626 = (x625 + x597); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x627, &x628, 0x0, x579, x610); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x629, &x630, x628, x581, x612); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x631, &x632, x630, x583, x614); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x633, &x634, x632, x585, x616); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x635, &x636, x634, x587, x618); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x637, &x638, x636, x589, x620); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x639, &x640, x638, x591, x622); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x641, &x642, x640, x593, x624); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x643, &x644, x642, x595, x626); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x645, &x646, x627, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x647, &x648, x645, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x649, &x650, x645, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x651, &x652, x645, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x653, &x654, x645, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x655, &x656, x645, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x657, &x658, x645, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x659, &x660, x645, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x661, &x662, x645, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x663, &x664, 0x0, x662, x659); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x665, &x666, x664, x660, x657); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x667, &x668, x666, x658, x655); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x669, &x670, x668, x656, x653); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x671, &x672, x670, x654, x651); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x673, &x674, x672, x652, x649); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x675, &x676, x674, x650, x647); x677 = (x676 + x648); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x678, &x679, 0x0, x627, x661); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x680, &x681, x679, x629, x663); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x682, &x683, x681, x631, x665); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x684, &x685, x683, x633, x667); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x686, &x687, x685, x635, x669); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x688, &x689, x687, x637, x671); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x690, &x691, x689, x639, x673); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x692, &x693, x691, x641, x675); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x694, &x695, x693, x643, x677); x696 = ((uint32_t)x695 + x644); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x697, &x698, x7, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x699, &x700, x7, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x701, &x702, x7, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x703, &x704, x7, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x705, &x706, x7, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x707, &x708, x7, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x709, &x710, x7, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x711, &x712, x7, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x713, &x714, 0x0, x712, x709); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x715, &x716, x714, x710, x707); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x717, &x718, x716, x708, x705); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x719, &x720, x718, x706, x703); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x721, &x722, x720, x704, x701); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x723, &x724, x722, x702, x699); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x725, &x726, x724, x700, x697); x727 = (x726 + x698); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x728, &x729, 0x0, x680, x711); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x730, &x731, x729, x682, x713); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x732, &x733, x731, x684, x715); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x734, &x735, x733, x686, x717); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x736, &x737, x735, x688, x719); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x738, &x739, x737, x690, x721); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x740, &x741, x739, x692, x723); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x742, &x743, x741, x694, x725); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x744, &x745, x743, x696, x727); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x746, &x747, x728, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x748, &x749, x746, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x750, &x751, x746, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x752, &x753, x746, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x754, &x755, x746, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x756, &x757, x746, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x758, &x759, x746, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x760, &x761, x746, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x762, &x763, x746, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x764, &x765, 0x0, x763, x760); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x766, &x767, x765, x761, x758); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x768, &x769, x767, x759, x756); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x770, &x771, x769, x757, x754); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x772, &x773, x771, x755, x752); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x774, &x775, x773, x753, x750); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x776, &x777, x775, x751, x748); x778 = (x777 + x749); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x779, &x780, 0x0, x728, x762); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x781, &x782, x780, x730, x764); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x783, &x784, x782, x732, x766); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x785, &x786, x784, x734, x768); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x787, &x788, x786, x736, x770); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x789, &x790, x788, x738, x772); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x791, &x792, x790, x740, x774); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x793, &x794, x792, x742, x776); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x795, &x796, x794, x744, x778); x797 = ((uint32_t)x796 + x745); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x798, &x799, 0x0, x781, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x800, &x801, x799, x783, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x802, &x803, x801, x785, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x804, &x805, x803, x787, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x806, &x807, x805, x789, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x808, &x809, x807, x791, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x810, &x811, x809, x793, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x812, &x813, x811, x795, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x814, &x815, x813, x797, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x816, x815, x798, x781); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x817, x815, x800, x783); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x818, x815, x802, x785); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x819, x815, x804, x787); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x820, x815, x806, x789); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x821, x815, x808, x791); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x822, x815, x810, x793); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x823, x815, x812, x795); out1[0] = x816; out1[1] = x817; out1[2] = x818; out1[3] = x819; out1[4] = x820; out1[5] = x821; out1[6] = x822; out1[7] = x823; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add adds two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add( uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x2; uint32_t x3; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x4; uint32_t x5; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x6; uint32_t x7; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x8; uint32_t x9; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x10; uint32_t x11; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x14; uint32_t x15; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x16; uint32_t x17; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x18; uint32_t x19; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x20; uint32_t x21; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x22; uint32_t x23; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x24; uint32_t x25; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x28; uint32_t x29; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x30; uint32_t x31; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x32; uint32_t x33; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x9, &x10, x8, (arg1[4]), (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x11, &x12, x10, (arg1[5]), (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x13, &x14, x12, (arg1[6]), (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x15, &x16, x14, (arg1[7]), (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x17, &x18, 0x0, x1, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x19, &x20, x18, x3, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x21, &x22, x20, x5, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x23, &x24, x22, x7, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x25, &x26, x24, x9, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x27, &x28, x26, x11, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x29, &x30, x28, x13, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x31, &x32, x30, x15, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x33, &x34, x32, x16, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x35, x34, x17, x1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x36, x34, x19, x3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x37, x34, x21, x5); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x38, x34, x23, x7); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x39, x34, x25, x9); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x40, x34, x27, x11); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x41, x34, x29, x13); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x42, x34, x31, x15); out1[0] = x35; out1[1] = x36; out1[2] = x37; out1[3] = x38; out1[4] = x39; out1[5] = x40; out1[6] = x41; out1[7] = x42; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub subtracts two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub( uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x2; uint32_t x3; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x4; uint32_t x5; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x6; uint32_t x7; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x8; uint32_t x9; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x10; uint32_t x11; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x14; uint32_t x15; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x16; uint32_t x17; uint32_t x18; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x19; uint32_t x20; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x21; uint32_t x22; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x23; uint32_t x24; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x25; uint32_t x26; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x27; uint32_t x28; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x29; uint32_t x30; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x31; uint32_t x32; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x33; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x9, &x10, x8, (arg1[4]), (arg2[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x11, &x12, x10, (arg1[5]), (arg2[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x13, &x14, x12, (arg1[6]), (arg2[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x15, &x16, x14, (arg1[7]), (arg2[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( &x17, x16, 0x0, UINT32_C(0xffffffff)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x18, &x19, 0x0, x1, (x17 & UINT32_C(0x22d759b))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x20, &x21, x19, x3, (x17 & UINT32_C(0x7998f7b9))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x22, &x23, x21, x5, (x17 & UINT32_C(0x789051d3))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x24, &x25, x23, x7, (x17 & UINT32_C(0xcf846e86))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x26, &x27, x25, x9, (x17 & UINT32_C(0x6b41c8aa))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x28, &x29, x27, x11, (x17 & UINT32_C(0xab1ec85e))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x30, &x31, x29, x13, (x17 & UINT32_C(0x5a858107))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x32, &x33, x31, x15, (x17 & UINT32_C(0x9b9f605f))); out1[0] = x18; out1[1] = x20; out1[2] = x22; out1[3] = x24; out1[4] = x26; out1[5] = x28; out1[6] = x30; out1[7] = x32; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp negates a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp( uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x2; uint32_t x3; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x4; uint32_t x5; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x6; uint32_t x7; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x8; uint32_t x9; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x10; uint32_t x11; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x14; uint32_t x15; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x16; uint32_t x17; uint32_t x18; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x19; uint32_t x20; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x21; uint32_t x22; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x23; uint32_t x24; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x25; uint32_t x26; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x27; uint32_t x28; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x29; uint32_t x30; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x31; uint32_t x32; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x33; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( &x17, x16, 0x0, UINT32_C(0xffffffff)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x18, &x19, 0x0, x1, (x17 & UINT32_C(0x22d759b))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x20, &x21, x19, x3, (x17 & UINT32_C(0x7998f7b9))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x22, &x23, x21, x5, (x17 & UINT32_C(0x789051d3))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x24, &x25, x23, x7, (x17 & UINT32_C(0xcf846e86))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x26, &x27, x25, x9, (x17 & UINT32_C(0x6b41c8aa))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x28, &x29, x27, x11, (x17 & UINT32_C(0xab1ec85e))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x30, &x31, x29, x13, (x17 & UINT32_C(0x5a858107))); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x32, &x33, x31, x15, (x17 & UINT32_C(0x9b9f605f))); out1[0] = x18; out1[1] = x20; out1[2] = x22; out1[3] = x24; out1[4] = x26; out1[5] = x28; out1[6] = x30; out1[7] = x32; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery translates a field element out of the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval out1 mod m = (eval arg1 * ((2^32)âģš mod m)^8) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery( uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x21; uint32_t x22; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x23; uint32_t x24; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x25; uint32_t x26; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x27; uint32_t x28; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x29; uint32_t x30; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x31; uint32_t x32; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x33; uint32_t x34; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x35; uint32_t x36; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x37; uint32_t x38; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x39; uint32_t x40; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x41; uint32_t x42; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x43; uint32_t x44; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x45; uint32_t x46; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x47; uint32_t x48; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x49; uint32_t x50; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x51; uint32_t x52; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x53; uint32_t x54; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x55; uint32_t x56; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x57; uint32_t x58; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x59; uint32_t x60; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x61; uint32_t x62; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x63; uint32_t x64; uint32_t x65; uint32_t x66; uint32_t x67; uint32_t x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint32_t x78; uint32_t x79; uint32_t x80; uint32_t x81; uint32_t x82; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x83; uint32_t x84; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x85; uint32_t x86; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x87; uint32_t x88; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x89; uint32_t x90; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x91; uint32_t x92; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x93; uint32_t x94; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x95; uint32_t x96; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x97; uint32_t x98; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x99; uint32_t x100; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x101; uint32_t x102; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x103; uint32_t x104; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x105; uint32_t x106; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x107; uint32_t x108; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x109; uint32_t x110; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x111; uint32_t x112; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x113; uint32_t x114; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x115; uint32_t x116; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x117; uint32_t x118; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x119; uint32_t x120; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x121; uint32_t x122; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x123; uint32_t x124; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x125; uint32_t x126; uint32_t x127; uint32_t x128; uint32_t x129; uint32_t x130; uint32_t x131; uint32_t x132; uint32_t x133; uint32_t x134; uint32_t x135; uint32_t x136; uint32_t x137; uint32_t x138; uint32_t x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x145; uint32_t x146; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x147; uint32_t x148; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x149; uint32_t x150; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x151; uint32_t x152; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x153; uint32_t x154; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x155; uint32_t x156; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x157; uint32_t x158; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x159; uint32_t x160; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x161; uint32_t x162; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x163; uint32_t x164; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x165; uint32_t x166; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x167; uint32_t x168; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x169; uint32_t x170; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x171; uint32_t x172; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x173; uint32_t x174; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x175; uint32_t x176; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x177; uint32_t x178; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x179; uint32_t x180; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x181; uint32_t x182; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x183; uint32_t x184; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x185; uint32_t x186; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x187; uint32_t x188; uint32_t x189; uint32_t x190; uint32_t x191; uint32_t x192; uint32_t x193; uint32_t x194; uint32_t x195; uint32_t x196; uint32_t x197; uint32_t x198; uint32_t x199; uint32_t x200; uint32_t x201; uint32_t x202; uint32_t x203; uint32_t x204; uint32_t x205; uint32_t x206; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x207; uint32_t x208; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x209; uint32_t x210; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x211; uint32_t x212; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x213; uint32_t x214; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x215; uint32_t x216; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x217; uint32_t x218; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x219; uint32_t x220; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x221; uint32_t x222; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x223; uint32_t x224; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x225; uint32_t x226; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x227; uint32_t x228; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x229; uint32_t x230; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x231; uint32_t x232; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x233; uint32_t x234; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x235; uint32_t x236; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x237; uint32_t x238; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x239; uint32_t x240; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x241; uint32_t x242; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x243; uint32_t x244; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x245; uint32_t x246; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x247; uint32_t x248; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x249; uint32_t x250; uint32_t x251; uint32_t x252; uint32_t x253; uint32_t x254; uint32_t x255; uint32_t x256; uint32_t x257; uint32_t x258; uint32_t x259; uint32_t x260; uint32_t x261; uint32_t x262; uint32_t x263; uint32_t x264; uint32_t x265; uint32_t x266; uint32_t x267; uint32_t x268; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x269; uint32_t x270; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x271; uint32_t x272; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x273; uint32_t x274; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x275; uint32_t x276; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x277; uint32_t x278; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x279; uint32_t x280; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x281; uint32_t x282; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x283; uint32_t x284; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x285; uint32_t x286; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x287; uint32_t x288; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x289; uint32_t x290; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x291; uint32_t x292; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x293; uint32_t x294; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x295; uint32_t x296; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x297; uint32_t x298; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x299; uint32_t x300; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x301; uint32_t x302; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x303; uint32_t x304; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x305; uint32_t x306; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x307; uint32_t x308; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x309; uint32_t x310; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x311; uint32_t x312; uint32_t x313; uint32_t x314; uint32_t x315; uint32_t x316; uint32_t x317; uint32_t x318; uint32_t x319; uint32_t x320; uint32_t x321; uint32_t x322; uint32_t x323; uint32_t x324; uint32_t x325; uint32_t x326; uint32_t x327; uint32_t x328; uint32_t x329; uint32_t x330; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x331; uint32_t x332; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x333; uint32_t x334; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x335; uint32_t x336; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x337; uint32_t x338; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x339; uint32_t x340; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x341; uint32_t x342; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x343; uint32_t x344; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x345; uint32_t x346; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x347; uint32_t x348; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x349; uint32_t x350; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x351; uint32_t x352; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x353; uint32_t x354; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x355; uint32_t x356; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x357; uint32_t x358; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x359; uint32_t x360; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x361; uint32_t x362; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x363; uint32_t x364; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x365; uint32_t x366; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x367; uint32_t x368; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x369; uint32_t x370; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x371; uint32_t x372; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x373; uint32_t x374; uint32_t x375; uint32_t x376; uint32_t x377; uint32_t x378; uint32_t x379; uint32_t x380; uint32_t x381; uint32_t x382; uint32_t x383; uint32_t x384; uint32_t x385; uint32_t x386; uint32_t x387; uint32_t x388; uint32_t x389; uint32_t x390; uint32_t x391; uint32_t x392; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x393; uint32_t x394; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x395; uint32_t x396; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x397; uint32_t x398; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x399; uint32_t x400; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x401; uint32_t x402; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x403; uint32_t x404; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x405; uint32_t x406; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x407; uint32_t x408; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x409; uint32_t x410; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x411; uint32_t x412; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x413; uint32_t x414; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x415; uint32_t x416; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x417; uint32_t x418; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x419; uint32_t x420; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x421; uint32_t x422; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x423; uint32_t x424; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x425; uint32_t x426; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x427; uint32_t x428; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x429; uint32_t x430; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x431; uint32_t x432; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x433; uint32_t x434; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x435; uint32_t x436; uint32_t x437; uint32_t x438; uint32_t x439; uint32_t x440; uint32_t x441; uint32_t x442; uint32_t x443; uint32_t x444; uint32_t x445; uint32_t x446; uint32_t x447; uint32_t x448; uint32_t x449; uint32_t x450; uint32_t x451; uint32_t x452; uint32_t x453; uint32_t x454; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x455; uint32_t x456; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x457; uint32_t x458; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x459; uint32_t x460; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x461; uint32_t x462; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x463; uint32_t x464; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x465; uint32_t x466; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x467; uint32_t x468; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x469; uint32_t x470; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x471; uint32_t x472; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x473; uint32_t x474; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x475; uint32_t x476; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x477; uint32_t x478; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x479; uint32_t x480; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x481; uint32_t x482; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x483; uint32_t x484; uint32_t x485; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x486; uint32_t x487; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x488; uint32_t x489; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x490; uint32_t x491; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x492; uint32_t x493; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x494; uint32_t x495; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x496; uint32_t x497; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x498; uint32_t x499; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x500; uint32_t x501; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x502; uint32_t x503; uint32_t x504; uint32_t x505; uint32_t x506; uint32_t x507; uint32_t x508; uint32_t x509; uint32_t x510; x1 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x2, &x3, x1, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x4, &x5, x2, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x6, &x7, x2, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x8, &x9, x2, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x10, &x11, x2, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x12, &x13, x2, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x14, &x15, x2, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x16, &x17, x2, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x18, &x19, x2, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x20, &x21, 0x0, x19, x16); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x22, &x23, x21, x17, x14); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x24, &x25, x23, x15, x12); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x26, &x27, x25, x13, x10); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x28, &x29, x27, x11, x8); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x30, &x31, x29, x9, x6); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x32, &x33, x31, x7, x4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x34, &x35, 0x0, x1, x18); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x36, &x37, x35, 0x0, x20); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x38, &x39, x37, 0x0, x22); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x40, &x41, x39, 0x0, x24); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x42, &x43, x41, 0x0, x26); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x44, &x45, x43, 0x0, x28); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x46, &x47, x45, 0x0, x30); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x48, &x49, x47, 0x0, x32); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x50, &x51, 0x0, x36, (arg1[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x52, &x53, x51, x38, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x54, &x55, x53, x40, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x56, &x57, x55, x42, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x58, &x59, x57, x44, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x60, &x61, x59, x46, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x62, &x63, x61, x48, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x64, &x65, x50, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x66, &x67, x64, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x68, &x69, x64, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x70, &x71, x64, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x72, &x73, x64, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x74, &x75, x64, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x76, &x77, x64, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x78, &x79, x64, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x80, &x81, x64, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x82, &x83, 0x0, x81, x78); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x84, &x85, x83, x79, x76); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x86, &x87, x85, x77, x74); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x88, &x89, x87, x75, x72); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x90, &x91, x89, x73, x70); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x92, &x93, x91, x71, x68); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x94, &x95, x93, x69, x66); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x96, &x97, 0x0, x50, x80); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x98, &x99, x97, x52, x82); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x100, &x101, x99, x54, x84); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x102, &x103, x101, x56, x86); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x104, &x105, x103, x58, x88); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x106, &x107, x105, x60, x90); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x108, &x109, x107, x62, x92); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x110, &x111, x109, (x63 + (x49 + (x33 + x5))), x94); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x112, &x113, 0x0, x98, (arg1[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x114, &x115, x113, x100, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x116, &x117, x115, x102, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x118, &x119, x117, x104, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x120, &x121, x119, x106, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x122, &x123, x121, x108, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x124, &x125, x123, x110, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x126, &x127, x112, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x128, &x129, x126, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x130, &x131, x126, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x132, &x133, x126, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x134, &x135, x126, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x136, &x137, x126, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x138, &x139, x126, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x140, &x141, x126, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x142, &x143, x126, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x144, &x145, 0x0, x143, x140); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x146, &x147, x145, x141, x138); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x148, &x149, x147, x139, x136); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x150, &x151, x149, x137, x134); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x152, &x153, x151, x135, x132); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x154, &x155, x153, x133, x130); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x156, &x157, x155, x131, x128); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x158, &x159, 0x0, x112, x142); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x160, &x161, x159, x114, x144); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x162, &x163, x161, x116, x146); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x164, &x165, x163, x118, x148); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x166, &x167, x165, x120, x150); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x168, &x169, x167, x122, x152); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x170, &x171, x169, x124, x154); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x172, &x173, x171, (x125 + (x111 + (x95 + x67))), x156); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x174, &x175, 0x0, x160, (arg1[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x176, &x177, x175, x162, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x178, &x179, x177, x164, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x180, &x181, x179, x166, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x182, &x183, x181, x168, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x184, &x185, x183, x170, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x186, &x187, x185, x172, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x188, &x189, x174, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x190, &x191, x188, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x192, &x193, x188, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x194, &x195, x188, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x196, &x197, x188, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x198, &x199, x188, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x200, &x201, x188, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x202, &x203, x188, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x204, &x205, x188, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x206, &x207, 0x0, x205, x202); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x208, &x209, x207, x203, x200); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x210, &x211, x209, x201, x198); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x212, &x213, x211, x199, x196); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x214, &x215, x213, x197, x194); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x216, &x217, x215, x195, x192); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x218, &x219, x217, x193, x190); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x220, &x221, 0x0, x174, x204); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x222, &x223, x221, x176, x206); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x224, &x225, x223, x178, x208); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x226, &x227, x225, x180, x210); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x228, &x229, x227, x182, x212); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x230, &x231, x229, x184, x214); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x232, &x233, x231, x186, x216); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x234, &x235, x233, (x187 + (x173 + (x157 + x129))), x218); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x236, &x237, 0x0, x222, (arg1[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x238, &x239, x237, x224, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x240, &x241, x239, x226, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x242, &x243, x241, x228, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x244, &x245, x243, x230, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x246, &x247, x245, x232, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x248, &x249, x247, x234, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x250, &x251, x236, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x252, &x253, x250, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x254, &x255, x250, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x256, &x257, x250, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x258, &x259, x250, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x260, &x261, x250, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x262, &x263, x250, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x264, &x265, x250, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x266, &x267, x250, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x268, &x269, 0x0, x267, x264); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x270, &x271, x269, x265, x262); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x272, &x273, x271, x263, x260); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x274, &x275, x273, x261, x258); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x276, &x277, x275, x259, x256); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x278, &x279, x277, x257, x254); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x280, &x281, x279, x255, x252); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x282, &x283, 0x0, x236, x266); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x284, &x285, x283, x238, x268); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x286, &x287, x285, x240, x270); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x288, &x289, x287, x242, x272); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x290, &x291, x289, x244, x274); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x292, &x293, x291, x246, x276); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x294, &x295, x293, x248, x278); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x296, &x297, x295, (x249 + (x235 + (x219 + x191))), x280); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x298, &x299, 0x0, x284, (arg1[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x300, &x301, x299, x286, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x302, &x303, x301, x288, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x304, &x305, x303, x290, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x306, &x307, x305, x292, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x308, &x309, x307, x294, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x310, &x311, x309, x296, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x312, &x313, x298, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x314, &x315, x312, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x316, &x317, x312, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x318, &x319, x312, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x320, &x321, x312, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x322, &x323, x312, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x324, &x325, x312, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x326, &x327, x312, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x328, &x329, x312, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x330, &x331, 0x0, x329, x326); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x332, &x333, x331, x327, x324); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x334, &x335, x333, x325, x322); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x336, &x337, x335, x323, x320); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x338, &x339, x337, x321, x318); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x340, &x341, x339, x319, x316); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x342, &x343, x341, x317, x314); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x344, &x345, 0x0, x298, x328); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x346, &x347, x345, x300, x330); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x348, &x349, x347, x302, x332); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x350, &x351, x349, x304, x334); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x352, &x353, x351, x306, x336); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x354, &x355, x353, x308, x338); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x356, &x357, x355, x310, x340); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x358, &x359, x357, (x311 + (x297 + (x281 + x253))), x342); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x360, &x361, 0x0, x346, (arg1[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x362, &x363, x361, x348, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x364, &x365, x363, x350, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x366, &x367, x365, x352, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x368, &x369, x367, x354, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x370, &x371, x369, x356, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x372, &x373, x371, x358, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x374, &x375, x360, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x376, &x377, x374, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x378, &x379, x374, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x380, &x381, x374, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x382, &x383, x374, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x384, &x385, x374, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x386, &x387, x374, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x388, &x389, x374, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x390, &x391, x374, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x392, &x393, 0x0, x391, x388); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x394, &x395, x393, x389, x386); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x396, &x397, x395, x387, x384); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x398, &x399, x397, x385, x382); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x400, &x401, x399, x383, x380); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x402, &x403, x401, x381, x378); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x404, &x405, x403, x379, x376); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x406, &x407, 0x0, x360, x390); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x408, &x409, x407, x362, x392); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x410, &x411, x409, x364, x394); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x412, &x413, x411, x366, x396); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x414, &x415, x413, x368, x398); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x416, &x417, x415, x370, x400); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x418, &x419, x417, x372, x402); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x420, &x421, x419, (x373 + (x359 + (x343 + x315))), x404); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x422, &x423, 0x0, x408, (arg1[7])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x424, &x425, x423, x410, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x426, &x427, x425, x412, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x428, &x429, x427, x414, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x430, &x431, x429, x416, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x432, &x433, x431, x418, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x434, &x435, x433, x420, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x436, &x437, x422, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x438, &x439, x436, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x440, &x441, x436, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x442, &x443, x436, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x444, &x445, x436, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x446, &x447, x436, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x448, &x449, x436, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x450, &x451, x436, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x452, &x453, x436, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x454, &x455, 0x0, x453, x450); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x456, &x457, x455, x451, x448); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x458, &x459, x457, x449, x446); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x460, &x461, x459, x447, x444); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x462, &x463, x461, x445, x442); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x464, &x465, x463, x443, x440); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x466, &x467, x465, x441, x438); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x468, &x469, 0x0, x422, x452); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x470, &x471, x469, x424, x454); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x472, &x473, x471, x426, x456); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x474, &x475, x473, x428, x458); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x476, &x477, x475, x430, x460); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x478, &x479, x477, x432, x462); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x480, &x481, x479, x434, x464); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x482, &x483, x481, (x435 + (x421 + (x405 + x377))), x466); x484 = (x483 + (x467 + x439)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x485, &x486, 0x0, x470, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x487, &x488, x486, x472, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x489, &x490, x488, x474, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x491, &x492, x490, x476, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x493, &x494, x492, x478, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x495, &x496, x494, x480, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x497, &x498, x496, x482, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x499, &x500, x498, x484, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x501, &x502, x500, 0x0, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x503, x502, x485, x470); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x504, x502, x487, x472); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x505, x502, x489, x474); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x506, x502, x491, x476); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x507, x502, x493, x478); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x508, x502, x495, x480); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x509, x502, x497, x482); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x510, x502, x499, x484); out1[0] = x503; out1[1] = x504; out1[2] = x505; out1[3] = x506; out1[4] = x507; out1[5] = x508; out1[6] = x509; out1[7] = x510; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery translates a field element into the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery( uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x28; uint32_t x29; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x30; uint32_t x31; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x32; uint32_t x33; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x34; uint32_t x35; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x36; uint32_t x37; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; uint32_t x55; uint32_t x56; uint32_t x57; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x58; uint32_t x59; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x60; uint32_t x61; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x62; uint32_t x63; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x64; uint32_t x65; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x66; uint32_t x67; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x68; uint32_t x69; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x70; uint32_t x71; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x72; uint32_t x73; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x74; uint32_t x75; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x76; uint32_t x77; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x78; uint32_t x79; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x80; uint32_t x81; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x82; uint32_t x83; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x84; uint32_t x85; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x86; uint32_t x87; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x88; uint32_t x89; uint32_t x90; uint32_t x91; uint32_t x92; uint32_t x93; uint32_t x94; uint32_t x95; uint32_t x96; uint32_t x97; uint32_t x98; uint32_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; uint32_t x104; uint32_t x105; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x106; uint32_t x107; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x108; uint32_t x109; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x110; uint32_t x111; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x112; uint32_t x113; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x114; uint32_t x115; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x116; uint32_t x117; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x118; uint32_t x119; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x120; uint32_t x121; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x122; uint32_t x123; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x124; uint32_t x125; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x126; uint32_t x127; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x128; uint32_t x129; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x130; uint32_t x131; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x132; uint32_t x133; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x134; uint32_t x135; uint32_t x136; uint32_t x137; uint32_t x138; uint32_t x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; uint32_t x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; uint32_t x153; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x154; uint32_t x155; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x156; uint32_t x157; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x158; uint32_t x159; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x160; uint32_t x161; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x162; uint32_t x163; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x164; uint32_t x165; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x166; uint32_t x167; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x168; uint32_t x169; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x170; uint32_t x171; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x172; uint32_t x173; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x174; uint32_t x175; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x176; uint32_t x177; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x178; uint32_t x179; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x180; uint32_t x181; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x182; uint32_t x183; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x184; uint32_t x185; uint32_t x186; uint32_t x187; uint32_t x188; uint32_t x189; uint32_t x190; uint32_t x191; uint32_t x192; uint32_t x193; uint32_t x194; uint32_t x195; uint32_t x196; uint32_t x197; uint32_t x198; uint32_t x199; uint32_t x200; uint32_t x201; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x202; uint32_t x203; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x204; uint32_t x205; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x206; uint32_t x207; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x208; uint32_t x209; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x210; uint32_t x211; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x212; uint32_t x213; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x214; uint32_t x215; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x216; uint32_t x217; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x218; uint32_t x219; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x220; uint32_t x221; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x222; uint32_t x223; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x224; uint32_t x225; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x226; uint32_t x227; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x228; uint32_t x229; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x230; uint32_t x231; uint32_t x232; uint32_t x233; uint32_t x234; uint32_t x235; uint32_t x236; uint32_t x237; uint32_t x238; uint32_t x239; uint32_t x240; uint32_t x241; uint32_t x242; uint32_t x243; uint32_t x244; uint32_t x245; uint32_t x246; uint32_t x247; uint32_t x248; uint32_t x249; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x250; uint32_t x251; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x252; uint32_t x253; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x254; uint32_t x255; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x256; uint32_t x257; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x258; uint32_t x259; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x260; uint32_t x261; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x262; uint32_t x263; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x264; uint32_t x265; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x266; uint32_t x267; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x268; uint32_t x269; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x270; uint32_t x271; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x272; uint32_t x273; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x274; uint32_t x275; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x276; uint32_t x277; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x278; uint32_t x279; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x280; uint32_t x281; uint32_t x282; uint32_t x283; uint32_t x284; uint32_t x285; uint32_t x286; uint32_t x287; uint32_t x288; uint32_t x289; uint32_t x290; uint32_t x291; uint32_t x292; uint32_t x293; uint32_t x294; uint32_t x295; uint32_t x296; uint32_t x297; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x298; uint32_t x299; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x300; uint32_t x301; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x302; uint32_t x303; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x304; uint32_t x305; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x306; uint32_t x307; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x308; uint32_t x309; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x310; uint32_t x311; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x312; uint32_t x313; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x314; uint32_t x315; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x316; uint32_t x317; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x318; uint32_t x319; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x320; uint32_t x321; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x322; uint32_t x323; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x324; uint32_t x325; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x326; uint32_t x327; uint32_t x328; uint32_t x329; uint32_t x330; uint32_t x331; uint32_t x332; uint32_t x333; uint32_t x334; uint32_t x335; uint32_t x336; uint32_t x337; uint32_t x338; uint32_t x339; uint32_t x340; uint32_t x341; uint32_t x342; uint32_t x343; uint32_t x344; uint32_t x345; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x346; uint32_t x347; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x348; uint32_t x349; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x350; uint32_t x351; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x352; uint32_t x353; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x354; uint32_t x355; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x356; uint32_t x357; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x358; uint32_t x359; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x360; uint32_t x361; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x362; uint32_t x363; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x364; uint32_t x365; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x366; uint32_t x367; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x368; uint32_t x369; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x370; uint32_t x371; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x372; uint32_t x373; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x374; uint32_t x375; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x376; uint32_t x377; uint32_t x378; uint32_t x379; uint32_t x380; uint32_t x381; uint32_t x382; uint32_t x383; uint32_t x384; uint32_t x385; uint32_t x386; uint32_t x387; uint32_t x388; uint32_t x389; uint32_t x390; uint32_t x391; uint32_t x392; uint32_t x393; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x394; uint32_t x395; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x396; uint32_t x397; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x398; uint32_t x399; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x400; uint32_t x401; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x402; uint32_t x403; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x404; uint32_t x405; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x406; uint32_t x407; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x408; uint32_t x409; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x410; uint32_t x411; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x412; uint32_t x413; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x414; uint32_t x415; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x416; uint32_t x417; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x418; uint32_t x419; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x420; uint32_t x421; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x422; uint32_t x423; uint32_t x424; uint32_t x425; uint32_t x426; uint32_t x427; uint32_t x428; uint32_t x429; uint32_t x430; uint32_t x431; uint32_t x432; uint32_t x433; uint32_t x434; uint32_t x435; uint32_t x436; uint32_t x437; uint32_t x438; uint32_t x439; uint32_t x440; uint32_t x441; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x442; uint32_t x443; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x444; uint32_t x445; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x446; uint32_t x447; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x448; uint32_t x449; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x450; uint32_t x451; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x452; uint32_t x453; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x454; uint32_t x455; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x456; uint32_t x457; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x458; uint32_t x459; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x460; uint32_t x461; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x462; uint32_t x463; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x464; uint32_t x465; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x466; uint32_t x467; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x468; uint32_t x469; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x470; uint32_t x471; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x472; uint32_t x473; uint32_t x474; uint32_t x475; uint32_t x476; uint32_t x477; uint32_t x478; uint32_t x479; uint32_t x480; uint32_t x481; uint32_t x482; uint32_t x483; uint32_t x484; uint32_t x485; uint32_t x486; uint32_t x487; uint32_t x488; uint32_t x489; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x490; uint32_t x491; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x492; uint32_t x493; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x494; uint32_t x495; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x496; uint32_t x497; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x498; uint32_t x499; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x500; uint32_t x501; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x502; uint32_t x503; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x504; uint32_t x505; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x506; uint32_t x507; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x508; uint32_t x509; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x510; uint32_t x511; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x512; uint32_t x513; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x514; uint32_t x515; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x516; uint32_t x517; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x518; uint32_t x519; uint32_t x520; uint32_t x521; uint32_t x522; uint32_t x523; uint32_t x524; uint32_t x525; uint32_t x526; uint32_t x527; uint32_t x528; uint32_t x529; uint32_t x530; uint32_t x531; uint32_t x532; uint32_t x533; uint32_t x534; uint32_t x535; uint32_t x536; uint32_t x537; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x538; uint32_t x539; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x540; uint32_t x541; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x542; uint32_t x543; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x544; uint32_t x545; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x546; uint32_t x547; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x548; uint32_t x549; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x550; uint32_t x551; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x552; uint32_t x553; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x554; uint32_t x555; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x556; uint32_t x557; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x558; uint32_t x559; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x560; uint32_t x561; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x562; uint32_t x563; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x564; uint32_t x565; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x566; uint32_t x567; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x568; uint32_t x569; uint32_t x570; uint32_t x571; uint32_t x572; uint32_t x573; uint32_t x574; uint32_t x575; uint32_t x576; uint32_t x577; uint32_t x578; uint32_t x579; uint32_t x580; uint32_t x581; uint32_t x582; uint32_t x583; uint32_t x584; uint32_t x585; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x586; uint32_t x587; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x588; uint32_t x589; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x590; uint32_t x591; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x592; uint32_t x593; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x594; uint32_t x595; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x596; uint32_t x597; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x598; uint32_t x599; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x600; uint32_t x601; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x602; uint32_t x603; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x604; uint32_t x605; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x606; uint32_t x607; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x608; uint32_t x609; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x610; uint32_t x611; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x612; uint32_t x613; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x614; uint32_t x615; uint32_t x616; uint32_t x617; uint32_t x618; uint32_t x619; uint32_t x620; uint32_t x621; uint32_t x622; uint32_t x623; uint32_t x624; uint32_t x625; uint32_t x626; uint32_t x627; uint32_t x628; uint32_t x629; uint32_t x630; uint32_t x631; uint32_t x632; uint32_t x633; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x634; uint32_t x635; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x636; uint32_t x637; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x638; uint32_t x639; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x640; uint32_t x641; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x642; uint32_t x643; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x644; uint32_t x645; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x646; uint32_t x647; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x648; uint32_t x649; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x650; uint32_t x651; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x652; uint32_t x653; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x654; uint32_t x655; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x656; uint32_t x657; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x658; uint32_t x659; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x660; uint32_t x661; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x662; uint32_t x663; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x664; uint32_t x665; uint32_t x666; uint32_t x667; uint32_t x668; uint32_t x669; uint32_t x670; uint32_t x671; uint32_t x672; uint32_t x673; uint32_t x674; uint32_t x675; uint32_t x676; uint32_t x677; uint32_t x678; uint32_t x679; uint32_t x680; uint32_t x681; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x682; uint32_t x683; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x684; uint32_t x685; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x686; uint32_t x687; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x688; uint32_t x689; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x690; uint32_t x691; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x692; uint32_t x693; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x694; uint32_t x695; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x696; uint32_t x697; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x698; uint32_t x699; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x700; uint32_t x701; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x702; uint32_t x703; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x704; uint32_t x705; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x706; uint32_t x707; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x708; uint32_t x709; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x710; uint32_t x711; uint32_t x712; uint32_t x713; uint32_t x714; uint32_t x715; uint32_t x716; uint32_t x717; uint32_t x718; uint32_t x719; uint32_t x720; uint32_t x721; uint32_t x722; uint32_t x723; uint32_t x724; uint32_t x725; uint32_t x726; uint32_t x727; uint32_t x728; uint32_t x729; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x730; uint32_t x731; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x732; uint32_t x733; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x734; uint32_t x735; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x736; uint32_t x737; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x738; uint32_t x739; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x740; uint32_t x741; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x742; uint32_t x743; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x744; uint32_t x745; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x746; uint32_t x747; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x748; uint32_t x749; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x750; uint32_t x751; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x752; uint32_t x753; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x754; uint32_t x755; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x756; uint32_t x757; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x758; uint32_t x759; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x760; uint32_t x761; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x762; uint32_t x763; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x764; uint32_t x765; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x766; uint32_t x767; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x768; uint32_t x769; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x770; uint32_t x771; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x772; uint32_t x773; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x774; uint32_t x775; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x776; uint32_t x777; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 x778; uint32_t x779; uint32_t x780; uint32_t x781; uint32_t x782; uint32_t x783; uint32_t x784; uint32_t x785; uint32_t x786; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[0]); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x9, &x10, x8, UINT32_C(0x807a394e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x11, &x12, x8, UINT32_C(0xde097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x13, &x14, x8, UINT32_C(0x18630421)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x15, &x16, x8, UINT32_C(0x2849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x17, &x18, x8, UINT32_C(0x1017bb39)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x19, &x20, x8, UINT32_C(0xc2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x21, &x22, x8, UINT32_C(0x409973b4)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x23, &x24, x8, UINT32_C(0xc427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x25, &x26, 0x0, x24, x21); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x27, &x28, x26, x22, x19); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x29, &x30, x28, x20, x17); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x31, &x32, x30, x18, x15); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x33, &x34, x32, x16, x13); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x35, &x36, x34, x14, x11); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x37, &x38, x36, x12, x9); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x39, &x40, x23, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x41, &x42, x39, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x43, &x44, x39, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x45, &x46, x39, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x47, &x48, x39, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x49, &x50, x39, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x51, &x52, x39, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x53, &x54, x39, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x55, &x56, x39, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x57, &x58, 0x0, x56, x53); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x59, &x60, x58, x54, x51); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x61, &x62, x60, x52, x49); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x63, &x64, x62, x50, x47); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x65, &x66, x64, x48, x45); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x67, &x68, x66, x46, x43); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x69, &x70, x68, x44, x41); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x71, &x72, 0x0, x23, x55); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x73, &x74, x72, x25, x57); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x75, &x76, x74, x27, x59); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x77, &x78, x76, x29, x61); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x79, &x80, x78, x31, x63); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x81, &x82, x80, x33, x65); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x83, &x84, x82, x35, x67); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x85, &x86, x84, x37, x69); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x87, &x88, x86, (x38 + x10), (x70 + x42)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x89, &x90, x1, UINT32_C(0x807a394e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x91, &x92, x1, UINT32_C(0xde097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x93, &x94, x1, UINT32_C(0x18630421)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x95, &x96, x1, UINT32_C(0x2849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x97, &x98, x1, UINT32_C(0x1017bb39)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x99, &x100, x1, UINT32_C(0xc2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x101, &x102, x1, UINT32_C(0x409973b4)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x103, &x104, x1, UINT32_C(0xc427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x105, &x106, 0x0, x104, x101); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x107, &x108, x106, x102, x99); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x109, &x110, x108, x100, x97); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x111, &x112, x110, x98, x95); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x113, &x114, x112, x96, x93); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x115, &x116, x114, x94, x91); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x117, &x118, x116, x92, x89); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x119, &x120, 0x0, x73, x103); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x121, &x122, x120, x75, x105); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x123, &x124, x122, x77, x107); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x125, &x126, x124, x79, x109); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x127, &x128, x126, x81, x111); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x129, &x130, x128, x83, x113); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x131, &x132, x130, x85, x115); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x133, &x134, x132, x87, x117); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x135, &x136, x119, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x137, &x138, x135, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x139, &x140, x135, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x141, &x142, x135, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x143, &x144, x135, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x145, &x146, x135, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x147, &x148, x135, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x149, &x150, x135, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x151, &x152, x135, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x153, &x154, 0x0, x152, x149); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x155, &x156, x154, x150, x147); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x157, &x158, x156, x148, x145); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x159, &x160, x158, x146, x143); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x161, &x162, x160, x144, x141); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x163, &x164, x162, x142, x139); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x165, &x166, x164, x140, x137); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x167, &x168, 0x0, x119, x151); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x169, &x170, x168, x121, x153); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x171, &x172, x170, x123, x155); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x173, &x174, x172, x125, x157); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x175, &x176, x174, x127, x159); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x177, &x178, x176, x129, x161); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x179, &x180, x178, x131, x163); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x181, &x182, x180, x133, x165); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x183, &x184, x182, (((uint32_t)x134 + x88) + (x118 + x90)), (x166 + x138)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x185, &x186, x2, UINT32_C(0x807a394e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x187, &x188, x2, UINT32_C(0xde097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x189, &x190, x2, UINT32_C(0x18630421)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x191, &x192, x2, UINT32_C(0x2849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x193, &x194, x2, UINT32_C(0x1017bb39)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x195, &x196, x2, UINT32_C(0xc2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x197, &x198, x2, UINT32_C(0x409973b4)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x199, &x200, x2, UINT32_C(0xc427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x201, &x202, 0x0, x200, x197); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x203, &x204, x202, x198, x195); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x205, &x206, x204, x196, x193); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x207, &x208, x206, x194, x191); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x209, &x210, x208, x192, x189); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x211, &x212, x210, x190, x187); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x213, &x214, x212, x188, x185); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x215, &x216, 0x0, x169, x199); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x217, &x218, x216, x171, x201); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x219, &x220, x218, x173, x203); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x221, &x222, x220, x175, x205); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x223, &x224, x222, x177, x207); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x225, &x226, x224, x179, x209); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x227, &x228, x226, x181, x211); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x229, &x230, x228, x183, x213); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x231, &x232, x215, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x233, &x234, x231, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x235, &x236, x231, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x237, &x238, x231, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x239, &x240, x231, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x241, &x242, x231, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x243, &x244, x231, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x245, &x246, x231, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x247, &x248, x231, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x249, &x250, 0x0, x248, x245); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x251, &x252, x250, x246, x243); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x253, &x254, x252, x244, x241); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x255, &x256, x254, x242, x239); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x257, &x258, x256, x240, x237); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x259, &x260, x258, x238, x235); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x261, &x262, x260, x236, x233); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x263, &x264, 0x0, x215, x247); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x265, &x266, x264, x217, x249); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x267, &x268, x266, x219, x251); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x269, &x270, x268, x221, x253); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x271, &x272, x270, x223, x255); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x273, &x274, x272, x225, x257); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x275, &x276, x274, x227, x259); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x277, &x278, x276, x229, x261); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x279, &x280, x278, (((uint32_t)x230 + x184) + (x214 + x186)), (x262 + x234)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x281, &x282, x3, UINT32_C(0x807a394e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x283, &x284, x3, UINT32_C(0xde097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x285, &x286, x3, UINT32_C(0x18630421)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x287, &x288, x3, UINT32_C(0x2849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x289, &x290, x3, UINT32_C(0x1017bb39)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x291, &x292, x3, UINT32_C(0xc2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x293, &x294, x3, UINT32_C(0x409973b4)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x295, &x296, x3, UINT32_C(0xc427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x297, &x298, 0x0, x296, x293); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x299, &x300, x298, x294, x291); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x301, &x302, x300, x292, x289); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x303, &x304, x302, x290, x287); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x305, &x306, x304, x288, x285); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x307, &x308, x306, x286, x283); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x309, &x310, x308, x284, x281); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x311, &x312, 0x0, x265, x295); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x313, &x314, x312, x267, x297); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x315, &x316, x314, x269, x299); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x317, &x318, x316, x271, x301); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x319, &x320, x318, x273, x303); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x321, &x322, x320, x275, x305); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x323, &x324, x322, x277, x307); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x325, &x326, x324, x279, x309); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x327, &x328, x311, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x329, &x330, x327, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x331, &x332, x327, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x333, &x334, x327, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x335, &x336, x327, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x337, &x338, x327, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x339, &x340, x327, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x341, &x342, x327, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x343, &x344, x327, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x345, &x346, 0x0, x344, x341); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x347, &x348, x346, x342, x339); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x349, &x350, x348, x340, x337); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x351, &x352, x350, x338, x335); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x353, &x354, x352, x336, x333); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x355, &x356, x354, x334, x331); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x357, &x358, x356, x332, x329); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x359, &x360, 0x0, x311, x343); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x361, &x362, x360, x313, x345); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x363, &x364, x362, x315, x347); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x365, &x366, x364, x317, x349); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x367, &x368, x366, x319, x351); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x369, &x370, x368, x321, x353); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x371, &x372, x370, x323, x355); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x373, &x374, x372, x325, x357); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x375, &x376, x374, (((uint32_t)x326 + x280) + (x310 + x282)), (x358 + x330)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x377, &x378, x4, UINT32_C(0x807a394e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x379, &x380, x4, UINT32_C(0xde097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x381, &x382, x4, UINT32_C(0x18630421)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x383, &x384, x4, UINT32_C(0x2849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x385, &x386, x4, UINT32_C(0x1017bb39)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x387, &x388, x4, UINT32_C(0xc2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x389, &x390, x4, UINT32_C(0x409973b4)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x391, &x392, x4, UINT32_C(0xc427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x393, &x394, 0x0, x392, x389); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x395, &x396, x394, x390, x387); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x397, &x398, x396, x388, x385); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x399, &x400, x398, x386, x383); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x401, &x402, x400, x384, x381); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x403, &x404, x402, x382, x379); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x405, &x406, x404, x380, x377); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x407, &x408, 0x0, x361, x391); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x409, &x410, x408, x363, x393); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x411, &x412, x410, x365, x395); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x413, &x414, x412, x367, x397); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x415, &x416, x414, x369, x399); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x417, &x418, x416, x371, x401); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x419, &x420, x418, x373, x403); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x421, &x422, x420, x375, x405); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x423, &x424, x407, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x425, &x426, x423, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x427, &x428, x423, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x429, &x430, x423, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x431, &x432, x423, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x433, &x434, x423, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x435, &x436, x423, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x437, &x438, x423, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x439, &x440, x423, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x441, &x442, 0x0, x440, x437); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x443, &x444, x442, x438, x435); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x445, &x446, x444, x436, x433); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x447, &x448, x446, x434, x431); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x449, &x450, x448, x432, x429); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x451, &x452, x450, x430, x427); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x453, &x454, x452, x428, x425); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x455, &x456, 0x0, x407, x439); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x457, &x458, x456, x409, x441); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x459, &x460, x458, x411, x443); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x461, &x462, x460, x413, x445); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x463, &x464, x462, x415, x447); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x465, &x466, x464, x417, x449); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x467, &x468, x466, x419, x451); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x469, &x470, x468, x421, x453); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x471, &x472, x470, (((uint32_t)x422 + x376) + (x406 + x378)), (x454 + x426)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x473, &x474, x5, UINT32_C(0x807a394e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x475, &x476, x5, UINT32_C(0xde097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x477, &x478, x5, UINT32_C(0x18630421)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x479, &x480, x5, UINT32_C(0x2849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x481, &x482, x5, UINT32_C(0x1017bb39)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x483, &x484, x5, UINT32_C(0xc2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x485, &x486, x5, UINT32_C(0x409973b4)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x487, &x488, x5, UINT32_C(0xc427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x489, &x490, 0x0, x488, x485); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x491, &x492, x490, x486, x483); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x493, &x494, x492, x484, x481); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x495, &x496, x494, x482, x479); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x497, &x498, x496, x480, x477); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x499, &x500, x498, x478, x475); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x501, &x502, x500, x476, x473); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x503, &x504, 0x0, x457, x487); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x505, &x506, x504, x459, x489); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x507, &x508, x506, x461, x491); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x509, &x510, x508, x463, x493); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x511, &x512, x510, x465, x495); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x513, &x514, x512, x467, x497); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x515, &x516, x514, x469, x499); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x517, &x518, x516, x471, x501); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x519, &x520, x503, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x521, &x522, x519, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x523, &x524, x519, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x525, &x526, x519, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x527, &x528, x519, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x529, &x530, x519, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x531, &x532, x519, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x533, &x534, x519, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x535, &x536, x519, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x537, &x538, 0x0, x536, x533); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x539, &x540, x538, x534, x531); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x541, &x542, x540, x532, x529); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x543, &x544, x542, x530, x527); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x545, &x546, x544, x528, x525); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x547, &x548, x546, x526, x523); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x549, &x550, x548, x524, x521); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x551, &x552, 0x0, x503, x535); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x553, &x554, x552, x505, x537); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x555, &x556, x554, x507, x539); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x557, &x558, x556, x509, x541); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x559, &x560, x558, x511, x543); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x561, &x562, x560, x513, x545); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x563, &x564, x562, x515, x547); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x565, &x566, x564, x517, x549); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x567, &x568, x566, (((uint32_t)x518 + x472) + (x502 + x474)), (x550 + x522)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x569, &x570, x6, UINT32_C(0x807a394e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x571, &x572, x6, UINT32_C(0xde097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x573, &x574, x6, UINT32_C(0x18630421)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x575, &x576, x6, UINT32_C(0x2849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x577, &x578, x6, UINT32_C(0x1017bb39)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x579, &x580, x6, UINT32_C(0xc2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x581, &x582, x6, UINT32_C(0x409973b4)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x583, &x584, x6, UINT32_C(0xc427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x585, &x586, 0x0, x584, x581); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x587, &x588, x586, x582, x579); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x589, &x590, x588, x580, x577); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x591, &x592, x590, x578, x575); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x593, &x594, x592, x576, x573); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x595, &x596, x594, x574, x571); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x597, &x598, x596, x572, x569); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x599, &x600, 0x0, x553, x583); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x601, &x602, x600, x555, x585); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x603, &x604, x602, x557, x587); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x605, &x606, x604, x559, x589); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x607, &x608, x606, x561, x591); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x609, &x610, x608, x563, x593); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x611, &x612, x610, x565, x595); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x613, &x614, x612, x567, x597); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x615, &x616, x599, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x617, &x618, x615, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x619, &x620, x615, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x621, &x622, x615, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x623, &x624, x615, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x625, &x626, x615, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x627, &x628, x615, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x629, &x630, x615, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x631, &x632, x615, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x633, &x634, 0x0, x632, x629); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x635, &x636, x634, x630, x627); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x637, &x638, x636, x628, x625); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x639, &x640, x638, x626, x623); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x641, &x642, x640, x624, x621); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x643, &x644, x642, x622, x619); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x645, &x646, x644, x620, x617); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x647, &x648, 0x0, x599, x631); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x649, &x650, x648, x601, x633); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x651, &x652, x650, x603, x635); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x653, &x654, x652, x605, x637); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x655, &x656, x654, x607, x639); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x657, &x658, x656, x609, x641); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x659, &x660, x658, x611, x643); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x661, &x662, x660, x613, x645); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x663, &x664, x662, (((uint32_t)x614 + x568) + (x598 + x570)), (x646 + x618)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x665, &x666, x7, UINT32_C(0x807a394e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x667, &x668, x7, UINT32_C(0xde097652)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x669, &x670, x7, UINT32_C(0x18630421)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x671, &x672, x7, UINT32_C(0x2849c07b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x673, &x674, x7, UINT32_C(0x1017bb39)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x675, &x676, x7, UINT32_C(0xc2d346c5)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x677, &x678, x7, UINT32_C(0x409973b4)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x679, &x680, x7, UINT32_C(0xc427fcea)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x681, &x682, 0x0, x680, x677); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x683, &x684, x682, x678, x675); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x685, &x686, x684, x676, x673); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x687, &x688, x686, x674, x671); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x689, &x690, x688, x672, x669); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x691, &x692, x690, x670, x667); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x693, &x694, x692, x668, x665); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x695, &x696, 0x0, x649, x679); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x697, &x698, x696, x651, x681); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x699, &x700, x698, x653, x683); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x701, &x702, x700, x655, x685); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x703, &x704, x702, x657, x687); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x705, &x706, x704, x659, x689); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x707, &x708, x706, x661, x691); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x709, &x710, x708, x663, x693); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x711, &x712, x695, UINT32_C(0x727c176d)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x713, &x714, x711, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x715, &x716, x711, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x717, &x718, x711, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x719, &x720, x711, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x721, &x722, x711, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x723, &x724, x711, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x725, &x726, x711, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mulx_u32(&x727, &x728, x711, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x729, &x730, 0x0, x728, x725); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x731, &x732, x730, x726, x723); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x733, &x734, x732, x724, x721); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x735, &x736, x734, x722, x719); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x737, &x738, x736, x720, x717); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x739, &x740, x738, x718, x715); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x741, &x742, x740, x716, x713); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x743, &x744, 0x0, x695, x727); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x745, &x746, x744, x697, x729); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x747, &x748, x746, x699, x731); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x749, &x750, x748, x701, x733); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x751, &x752, x750, x703, x735); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x753, &x754, x752, x705, x737); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x755, &x756, x754, x707, x739); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32(&x757, &x758, x756, x709, x741); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_addcarryx_u32( &x759, &x760, x758, (((uint32_t)x710 + x664) + (x694 + x666)), (x742 + x714)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x761, &x762, 0x0, x745, UINT32_C(0x22d759b)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x763, &x764, x762, x747, UINT32_C(0x7998f7b9)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x765, &x766, x764, x749, UINT32_C(0x789051d3)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x767, &x768, x766, x751, UINT32_C(0xcf846e86)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x769, &x770, x768, x753, UINT32_C(0x6b41c8aa)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x771, &x772, x770, x755, UINT32_C(0xab1ec85e)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x773, &x774, x772, x757, UINT32_C(0x5a858107)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32( &x775, &x776, x774, x759, UINT32_C(0x9b9f605f)); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_subborrowx_u32(&x777, &x778, x776, x760, 0x0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x779, x778, x761, x745); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x780, x778, x763, x747); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x781, x778, x765, x749); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x782, x778, x767, x751); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x783, x778, x769, x753); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x784, x778, x771, x755); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x785, x778, x773, x757); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32(&x786, x778, x775, x759); out1[0] = x779; out1[1] = x780; out1[2] = x781; out1[3] = x782; out1[4] = x783; out1[5] = x784; out1[6] = x785; out1[7] = x786; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_nonzero( uint32_t *out1, const uint32_t arg1[8]) { uint32_t x1; x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | (arg1[7])))))))); *out1 = x1; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( uint32_t out1[8], fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_uint1 arg1, const uint32_t arg2[8], const uint32_t arg3[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( &x1, arg1, (arg2[0]), (arg3[0])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( &x2, arg1, (arg2[1]), (arg3[1])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( &x3, arg1, (arg2[2]), (arg3[2])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( &x4, arg1, (arg2[3]), (arg3[3])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( &x5, arg1, (arg2[4]), (arg3[4])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( &x6, arg1, (arg2[5]), (arg3[5])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( &x7, arg1, (arg2[6]), (arg3[6])); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_cmovznz_u32( &x8, arg1, (arg2[7]), (arg3[7])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes( uint8_t out1[32], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint8_t x9; uint32_t x10; uint8_t x11; uint32_t x12; uint8_t x13; uint8_t x14; uint8_t x15; uint32_t x16; uint8_t x17; uint32_t x18; uint8_t x19; uint8_t x20; uint8_t x21; uint32_t x22; uint8_t x23; uint32_t x24; uint8_t x25; uint8_t x26; uint8_t x27; uint32_t x28; uint8_t x29; uint32_t x30; uint8_t x31; uint8_t x32; uint8_t x33; uint32_t x34; uint8_t x35; uint32_t x36; uint8_t x37; uint8_t x38; uint8_t x39; uint32_t x40; uint8_t x41; uint32_t x42; uint8_t x43; uint8_t x44; uint8_t x45; uint32_t x46; uint8_t x47; uint32_t x48; uint8_t x49; uint8_t x50; uint8_t x51; uint32_t x52; uint8_t x53; uint32_t x54; uint8_t x55; uint8_t x56; x1 = (arg1[7]); x2 = (arg1[6]); x3 = (arg1[5]); x4 = (arg1[4]); x5 = (arg1[3]); x6 = (arg1[2]); x7 = (arg1[1]); x8 = (arg1[0]); x9 = (uint8_t)(x8 & UINT8_C(0xff)); x10 = (x8 >> 8); x11 = (uint8_t)(x10 & UINT8_C(0xff)); x12 = (x10 >> 8); x13 = (uint8_t)(x12 & UINT8_C(0xff)); x14 = (uint8_t)(x12 >> 8); x15 = (uint8_t)(x7 & UINT8_C(0xff)); x16 = (x7 >> 8); x17 = (uint8_t)(x16 & UINT8_C(0xff)); x18 = (x16 >> 8); x19 = (uint8_t)(x18 & UINT8_C(0xff)); x20 = (uint8_t)(x18 >> 8); x21 = (uint8_t)(x6 & UINT8_C(0xff)); x22 = (x6 >> 8); x23 = (uint8_t)(x22 & UINT8_C(0xff)); x24 = (x22 >> 8); x25 = (uint8_t)(x24 & UINT8_C(0xff)); x26 = (uint8_t)(x24 >> 8); x27 = (uint8_t)(x5 & UINT8_C(0xff)); x28 = (x5 >> 8); x29 = (uint8_t)(x28 & UINT8_C(0xff)); x30 = (x28 >> 8); x31 = (uint8_t)(x30 & UINT8_C(0xff)); x32 = (uint8_t)(x30 >> 8); x33 = (uint8_t)(x4 & UINT8_C(0xff)); x34 = (x4 >> 8); x35 = (uint8_t)(x34 & UINT8_C(0xff)); x36 = (x34 >> 8); x37 = (uint8_t)(x36 & UINT8_C(0xff)); x38 = (uint8_t)(x36 >> 8); x39 = (uint8_t)(x3 & UINT8_C(0xff)); x40 = (x3 >> 8); x41 = (uint8_t)(x40 & UINT8_C(0xff)); x42 = (x40 >> 8); x43 = (uint8_t)(x42 & UINT8_C(0xff)); x44 = (uint8_t)(x42 >> 8); x45 = (uint8_t)(x2 & UINT8_C(0xff)); x46 = (x2 >> 8); x47 = (uint8_t)(x46 & UINT8_C(0xff)); x48 = (x46 >> 8); x49 = (uint8_t)(x48 & UINT8_C(0xff)); x50 = (uint8_t)(x48 >> 8); x51 = (uint8_t)(x1 & UINT8_C(0xff)); x52 = (x1 >> 8); x53 = (uint8_t)(x52 & UINT8_C(0xff)); x54 = (x52 >> 8); x55 = (uint8_t)(x54 & UINT8_C(0xff)); x56 = (uint8_t)(x54 >> 8); out1[0] = x9; out1[1] = x11; out1[2] = x13; out1[3] = x14; out1[4] = x15; out1[5] = x17; out1[6] = x19; out1[7] = x20; out1[8] = x21; out1[9] = x23; out1[10] = x25; out1[11] = x26; out1[12] = x27; out1[13] = x29; out1[14] = x31; out1[15] = x32; out1[16] = x33; out1[17] = x35; out1[18] = x37; out1[19] = x38; out1[20] = x39; out1[21] = x41; out1[22] = x43; out1[23] = x44; out1[24] = x45; out1[25] = x47; out1[26] = x49; out1[27] = x50; out1[28] = x51; out1[29] = x53; out1[30] = x55; out1[31] = x56; } /* * The function fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. * Preconditions: * 0 ≤ bytes_eval arg1 < m * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes( uint32_t out1[8], const uint8_t arg1[32]) { uint32_t x1; uint32_t x2; uint32_t x3; uint8_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint8_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint8_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint8_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint8_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint8_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint8_t x28; uint32_t x29; uint32_t x30; uint32_t x31; uint8_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; uint32_t x55; uint32_t x56; x1 = ((uint32_t)(arg1[31]) << 24); x2 = ((uint32_t)(arg1[30]) << 16); x3 = ((uint32_t)(arg1[29]) << 8); x4 = (arg1[28]); x5 = ((uint32_t)(arg1[27]) << 24); x6 = ((uint32_t)(arg1[26]) << 16); x7 = ((uint32_t)(arg1[25]) << 8); x8 = (arg1[24]); x9 = ((uint32_t)(arg1[23]) << 24); x10 = ((uint32_t)(arg1[22]) << 16); x11 = ((uint32_t)(arg1[21]) << 8); x12 = (arg1[20]); x13 = ((uint32_t)(arg1[19]) << 24); x14 = ((uint32_t)(arg1[18]) << 16); x15 = ((uint32_t)(arg1[17]) << 8); x16 = (arg1[16]); x17 = ((uint32_t)(arg1[15]) << 24); x18 = ((uint32_t)(arg1[14]) << 16); x19 = ((uint32_t)(arg1[13]) << 8); x20 = (arg1[12]); x21 = ((uint32_t)(arg1[11]) << 24); x22 = ((uint32_t)(arg1[10]) << 16); x23 = ((uint32_t)(arg1[9]) << 8); x24 = (arg1[8]); x25 = ((uint32_t)(arg1[7]) << 24); x26 = ((uint32_t)(arg1[6]) << 16); x27 = ((uint32_t)(arg1[5]) << 8); x28 = (arg1[4]); x29 = ((uint32_t)(arg1[3]) << 24); x30 = ((uint32_t)(arg1[2]) << 16); x31 = ((uint32_t)(arg1[1]) << 8); x32 = (arg1[0]); x33 = (x31 + (uint32_t)x32); x34 = (x30 + x33); x35 = (x29 + x34); x36 = (x27 + (uint32_t)x28); x37 = (x26 + x36); x38 = (x25 + x37); x39 = (x23 + (uint32_t)x24); x40 = (x22 + x39); x41 = (x21 + x40); x42 = (x19 + (uint32_t)x20); x43 = (x18 + x42); x44 = (x17 + x43); x45 = (x15 + (uint32_t)x16); x46 = (x14 + x45); x47 = (x13 + x46); x48 = (x11 + (uint32_t)x12); x49 = (x10 + x48); x50 = (x9 + x49); x51 = (x7 + (uint32_t)x8); x52 = (x6 + x51); x53 = (x5 + x52); x54 = (x3 + (uint32_t)x4); x55 = (x2 + x54); x56 = (x1 + x55); out1[0] = x35; out1[1] = x38; out1[2] = x41; out1[3] = x44; out1[4] = x47; out1[5] = x50; out1[6] = x53; out1[7] = x56; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_GostR3410_2001_CryptoPro_C_ParamSet/fe_inv.op3 * sliding window w=5 */ static void fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t11, t13, t15, t17, t19, t21, t23, t25, t27, t29, t3, t31, t5, t7, t9; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t3, t1, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t5, t3, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t7, t5, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t9, t7, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t11, t9, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t13, t11, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t15, t13, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t17, t15, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t19, t17, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t21, t19, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t23, t21, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t25, t23, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t27, t25, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t29, t27, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t31, t29, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, t9); for (i = 0; i < 4; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t23); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t7); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t27); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t15); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t21); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t21); for (i = 0; i < 8; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t11); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t29); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t11); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t15); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t25); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t15); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t13); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t13); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t25); for (i = 0; i < 8; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t21); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t11); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t31); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t3); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t29); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t3); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t15); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t9); for (i = 0; i < 8; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t5); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t7); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t19); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t15); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t25); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t17); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t29); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t29); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t25); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t1); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t11); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t23); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(acc, acc, t11); for (i = 0; i < 7; i++) fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(acc, acc); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(output, acc, t25); } /* curve coefficient constants */ static const limb_t const_one[8] = {UINT32_C(0xFDD28A65), UINT32_C(0x86670846), UINT32_C(0x876FAE2C), UINT32_C(0x307B9179), UINT32_C(0x94BE3755), UINT32_C(0x54E137A1), UINT32_C(0xA57A7EF8), UINT32_C(0x64609FA0)}; static const limb_t const_b[8] = {UINT32_C(0x3BDA2ACF), UINT32_C(0x4BE8A4E9), UINT32_C(0x90D382DD), UINT32_C(0x79CC0E3E), UINT32_C(0x1D9CC79B), UINT32_C(0x3BA4C8B0), UINT32_C(0x966609E9), UINT32_C(0x5CC73B5A)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[27][16] = { { {{UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000)}, {UINT32_C(0x00254F12), UINT32_C(0xD082E007), UINT32_C(0xEB1F1421), UINT32_C(0xC5BA8184), UINT32_C(0xF010780D), UINT32_C(0x4EC9E7D0), UINT32_C(0x2794C8D5), UINT32_C(0x7846B5B7)}}, {{UINT32_C(0x7225A595), UINT32_C(0x870FB041), UINT32_C(0x5FD57F04), UINT32_C(0x6CAFAE70), UINT32_C(0x2E7DB9BA), UINT32_C(0xFEC1C2AC), UINT32_C(0x127A5862), UINT32_C(0x9230823E)}, {UINT32_C(0xE4464836), UINT32_C(0xF6CFDB6D), UINT32_C(0x9A945AC0), UINT32_C(0x3D79631B), UINT32_C(0x3D0C880D), UINT32_C(0xA1FCF2DF), UINT32_C(0x0EE6A611), UINT32_C(0x17C83E50)}}, {{UINT32_C(0xE42734FD), UINT32_C(0x3C79C11A), UINT32_C(0xAC4040C3), UINT32_C(0x1614B2BE), UINT32_C(0x2C3A23A5), UINT32_C(0xDD143725), UINT32_C(0x8AF4F7CD), UINT32_C(0x1A02DA83)}, {UINT32_C(0xE7D6991A), UINT32_C(0x23D588D6), UINT32_C(0xD2B3E364), UINT32_C(0x5F332676), UINT32_C(0x9134BA88), UINT32_C(0x35382680), UINT32_C(0xD27090E5), UINT32_C(0x08ECA826)}}, {{UINT32_C(0x26761106), UINT32_C(0x231F8DC8), UINT32_C(0x3D78B14B), UINT32_C(0x7363050E), UINT32_C(0xC05C4381), UINT32_C(0xC3B9A1B8), UINT32_C(0xB8ACD9AC), UINT32_C(0x29727635)}, {UINT32_C(0x2ED54E6C), UINT32_C(0xDD416AE9), UINT32_C(0x0B48A87C), UINT32_C(0x54608435), UINT32_C(0x97093D22), UINT32_C(0x2C8DEEA4), UINT32_C(0x0D716BAF), UINT32_C(0x87D2924C)}}, {{UINT32_C(0x619206D6), UINT32_C(0x43281D30), UINT32_C(0x68744E44), UINT32_C(0x4A8FFC87), UINT32_C(0x708208D5), UINT32_C(0xB1011A3D), UINT32_C(0xA035B0B9), UINT32_C(0x2FE86E7B)}, {UINT32_C(0xA3762860), UINT32_C(0x82F43088), UINT32_C(0xB33595D4), UINT32_C(0x67B5A303), UINT32_C(0xB477BECD), UINT32_C(0x262F16EB), UINT32_C(0x23E2816A), UINT32_C(0x1D38D4A7)}}, {{UINT32_C(0xAD83C032), UINT32_C(0x91BBA3C0), UINT32_C(0x234F2FF3), UINT32_C(0x7DBC2EB6), UINT32_C(0x6D18A737), UINT32_C(0xE2C00C15), UINT32_C(0xCCF6DC2D), UINT32_C(0x71D1AE8B)}, {UINT32_C(0x2DB77239), UINT32_C(0x6183816A), UINT32_C(0x0E228C41), UINT32_C(0xC545A512), UINT32_C(0x0F49A679), UINT32_C(0x3B96D6BC), UINT32_C(0xE49E39C2), UINT32_C(0x9831D683)}}, {{UINT32_C(0x20DA13D9), UINT32_C(0xEEAA17A9), UINT32_C(0x8ABECADE), UINT32_C(0xEE3130FB), UINT32_C(0xA6E3D089), UINT32_C(0xBFB2CE6A), UINT32_C(0xE627A07C), UINT32_C(0x22BCDCEE)}, {UINT32_C(0x955A1D9E), UINT32_C(0x86D7A50C), UINT32_C(0xE4E00B9E), UINT32_C(0xCD60A425), UINT32_C(0x615B9E91), UINT32_C(0x5407A6F8), UINT32_C(0x4F1CA93D), UINT32_C(0x7F17B171)}}, {{UINT32_C(0x0DB59F2C), UINT32_C(0xBC351DE0), UINT32_C(0x9CDAF8AF), UINT32_C(0x1470E6A1), UINT32_C(0x60D3B27A), UINT32_C(0x461ED289), UINT32_C(0x49C7F789), UINT32_C(0x122C8F4B)}, {UINT32_C(0x069FC8CE), UINT32_C(0xAB56E614), UINT32_C(0xC34E487C), UINT32_C(0x9836B010), UINT32_C(0x3FE009EB), UINT32_C(0x9EE06703), UINT32_C(0xAA019563), UINT32_C(0x88C8DC64)}}, {{UINT32_C(0x63DDBB1F), UINT32_C(0xD0B4A996), UINT32_C(0x1D154696), UINT32_C(0x483286E5), UINT32_C(0x9F0D6F4E), UINT32_C(0xF0586DB8), UINT32_C(0x980446C8), UINT32_C(0x38167987)}, {UINT32_C(0xE4166B55), UINT32_C(0x86A2ABAC), UINT32_C(0xA8366C64), UINT32_C(0x4E7B4F96), UINT32_C(0xED997D8E), UINT32_C(0x20CF2108), UINT32_C(0x1D01C009), UINT32_C(0x20EA9844)}}, {{UINT32_C(0xB89CE05A), UINT32_C(0x028B520E), UINT32_C(0x4FAAD420), UINT32_C(0xEF41147D), UINT32_C(0x121A2A0A), UINT32_C(0xB280CCD3), UINT32_C(0x86E8F591), UINT32_C(0x4C677C83)}, {UINT32_C(0xA390AA99), UINT32_C(0xB42F67B2), UINT32_C(0x19F8A01A), UINT32_C(0xC4EF553B), UINT32_C(0x6979027F), UINT32_C(0x86761139), UINT32_C(0x82C202BE), UINT32_C(0x6F177663)}}, {{UINT32_C(0x27C5C7CC), UINT32_C(0xBEF6B996), UINT32_C(0x10799DB8), UINT32_C(0xB2D34F8B), UINT32_C(0x48AD9B1E), UINT32_C(0x132E1A3D), UINT32_C(0xE68B9907), UINT32_C(0x2971BFED)}, {UINT32_C(0xC6B743B5), UINT32_C(0x312F6D31), UINT32_C(0xA718E0A8), UINT32_C(0xCF123317), UINT32_C(0xFD58637C), UINT32_C(0xCF1E5266), UINT32_C(0xE046167C), UINT32_C(0x56BA8362)}}, {{UINT32_C(0x0E910D7F), UINT32_C(0xD680969D), UINT32_C(0x8A4689F9), UINT32_C(0x634FB3C2), UINT32_C(0x09FDD299), UINT32_C(0xA79A56DF), UINT32_C(0x89411C3D), UINT32_C(0x9065269E)}, {UINT32_C(0x82C6076C), UINT32_C(0x5D22254E), UINT32_C(0x81FEA171), UINT32_C(0xDE7D78F0), UINT32_C(0x10BCDA87), UINT32_C(0xE1366964), UINT32_C(0x97638B85), UINT32_C(0x98B58F5A)}}, {{UINT32_C(0xFB5EDF3F), UINT32_C(0xA532DED4), UINT32_C(0x833A7E2F), UINT32_C(0x604E5631), UINT32_C(0x3A09C74E), UINT32_C(0x7C4051D3), UINT32_C(0xEDFBEB4B), UINT32_C(0x51D1108A)}, {UINT32_C(0x4DF1AB4D), UINT32_C(0x9AE61F9E), UINT32_C(0x163DB1A5), UINT32_C(0xFD4966F3), UINT32_C(0x7075AD6D), UINT32_C(0xF6C44E55), UINT32_C(0x4AF24611), UINT32_C(0x670D0D6F)}}, {{UINT32_C(0xD369D301), UINT32_C(0xD99925FF), UINT32_C(0x7665BCF4), UINT32_C(0xC17E9767), UINT32_C(0xCB5A2128), UINT32_C(0xB5A908F1), UINT32_C(0x9C726C9F), UINT32_C(0x1981791D)}, {UINT32_C(0xE0861F4E), UINT32_C(0xC4249418), UINT32_C(0xEE045D5E), UINT32_C(0x2A63399F), UINT32_C(0xA1B974FF), UINT32_C(0x246958FD), UINT32_C(0x0FC6F7A0), UINT32_C(0x668016A2)}}, {{UINT32_C(0xEDE07C08), UINT32_C(0xEB7018AD), UINT32_C(0x2E33D1D9), UINT32_C(0xDF3C1259), UINT32_C(0xDC24E3DE), UINT32_C(0xEE0913DA), UINT32_C(0x35EB6B0D), UINT32_C(0x1C632D5B)}, {UINT32_C(0x2C56E1B2), UINT32_C(0xC69396DD), UINT32_C(0xA837CE8F), UINT32_C(0x01F0B034), UINT32_C(0xB6882E32), UINT32_C(0x7842B98D), UINT32_C(0x9E61FCA6), UINT32_C(0x8FAC9230)}}, {{UINT32_C(0x8A782CFE), UINT32_C(0x1DBB7D99), UINT32_C(0xC9322BE7), UINT32_C(0xEB945B49), UINT32_C(0xE208123B), UINT32_C(0xDCCB4E6E), UINT32_C(0xFC024524), UINT32_C(0x1C7C265C)}, {UINT32_C(0x6102BC63), UINT32_C(0xAD000D8A), UINT32_C(0x82575943), UINT32_C(0x7D7F3C7B), UINT32_C(0x0D547A95), UINT32_C(0x8D2F0881), UINT32_C(0xD94FFA6D), UINT32_C(0x7012377A)}}, }, { {{UINT32_C(0x1EB6CBF7), UINT32_C(0xE3F78DE5), UINT32_C(0x72FA65DB), UINT32_C(0xF4E08A61), UINT32_C(0x502A247E), UINT32_C(0x670B0E06), UINT32_C(0x9877E492), UINT32_C(0x7A45D73E)}, {UINT32_C(0x3DD0CDBC), UINT32_C(0x5FD754AD), UINT32_C(0x0125AB1F), UINT32_C(0xA5C2B15E), UINT32_C(0xE614B7A9), UINT32_C(0xC503836F), UINT32_C(0x2C50DCFE), UINT32_C(0x5548C424)}}, {{UINT32_C(0xB9B38743), UINT32_C(0xCEE7BE65), UINT32_C(0x94BE028E), UINT32_C(0xD5E41715), UINT32_C(0xB5C45F7D), UINT32_C(0x08EC3CA3), UINT32_C(0xFB51261A), UINT32_C(0x1ACFAC17)}, {UINT32_C(0xA9C04381), UINT32_C(0x45098D93), UINT32_C(0xA5B45DC8), UINT32_C(0x717FC0DC), UINT32_C(0xEABEE4E5), UINT32_C(0xF352A9C2), UINT32_C(0xF311B457), UINT32_C(0x1964AF20)}}, {{UINT32_C(0x0802A755), UINT32_C(0x8C229808), UINT32_C(0x6140CDA7), UINT32_C(0x46F0A7CA), UINT32_C(0xBC62603B), UINT32_C(0xF0EEB7AE), UINT32_C(0x4BF4B451), UINT32_C(0x8432E152)}, {UINT32_C(0x63967F94), UINT32_C(0x3C319825), UINT32_C(0xA042AE13), UINT32_C(0xF04EACB6), UINT32_C(0x650A6ADB), UINT32_C(0xD7CB2DBC), UINT32_C(0x78C9E166), UINT32_C(0x38A36EE3)}}, {{UINT32_C(0xD3EE8657), UINT32_C(0x3527A5C5), UINT32_C(0x101645F9), UINT32_C(0xBAA0DE97), UINT32_C(0xCE9D6A48), UINT32_C(0xC59C9803), UINT32_C(0xF8F39FDF), UINT32_C(0x43D12449)}, {UINT32_C(0x8DF7A72B), UINT32_C(0x65B3AB98), UINT32_C(0xAFDA9048), UINT32_C(0xD225AF8E), UINT32_C(0x338A3694), UINT32_C(0x88C368B8), UINT32_C(0xFBC813F1), UINT32_C(0x4A5A3C24)}}, {{UINT32_C(0x9E2118B5), UINT32_C(0xCBCB725A), UINT32_C(0xCAA54794), UINT32_C(0x113F36C5), UINT32_C(0x4A0A2267), UINT32_C(0x5900990E), UINT32_C(0x0A9C1F11), UINT32_C(0x4E329EB1)}, {UINT32_C(0xCD8918A7), UINT32_C(0xF47F4077), UINT32_C(0x3877B404), UINT32_C(0x18A3C071), UINT32_C(0xEFEB2B6B), UINT32_C(0xCDEF4FE3), UINT32_C(0xDE4D0540), UINT32_C(0x360982DB)}}, {{UINT32_C(0xD5F8DACA), UINT32_C(0x42AB64F2), UINT32_C(0xEE88523D), UINT32_C(0x604A9676), UINT32_C(0xAEFD1283), UINT32_C(0xD430CCAB), UINT32_C(0x54465F7C), UINT32_C(0x3DA9D0E5)}, {UINT32_C(0x41A4216B), UINT32_C(0x5EC145DF), UINT32_C(0xF7E7FBD9), UINT32_C(0x7C8F2C51), UINT32_C(0xBD483D26), UINT32_C(0xA2E58A23), UINT32_C(0xE4A908C8), UINT32_C(0x4739F7F9)}}, {{UINT32_C(0x79370382), UINT32_C(0x37DDF872), UINT32_C(0x12C8E90E), UINT32_C(0x9D26A55F), UINT32_C(0xE8EB0CA4), UINT32_C(0xFC1FA6CD), UINT32_C(0xC29DC4F9), UINT32_C(0x826A29E5)}, {UINT32_C(0xAA29F814), UINT32_C(0x15ECB621), UINT32_C(0x9DF1DFF7), UINT32_C(0x4C8A8128), UINT32_C(0x66B549BB), UINT32_C(0xBB223019), UINT32_C(0xB81A2863), UINT32_C(0x6CB21ACB)}}, {{UINT32_C(0x11DA6928), UINT32_C(0xDD31ACC2), UINT32_C(0xA903D58F), UINT32_C(0xF98867B0), UINT32_C(0xD3679348), UINT32_C(0xAD283697), UINT32_C(0x301C3571), UINT32_C(0x67BFEFF9)}, {UINT32_C(0x780BBBCE), UINT32_C(0xB745CAE6), UINT32_C(0x62F2EC5D), UINT32_C(0x1A9C6618), UINT32_C(0xA1475BEB), UINT32_C(0xF9895684), UINT32_C(0x4731A11D), UINT32_C(0x93E5ACE6)}}, {{UINT32_C(0x7539483E), UINT32_C(0x0F6E9460), UINT32_C(0x9EF4EF16), UINT32_C(0x5728E6DD), UINT32_C(0x062E946E), UINT32_C(0xE1DA86E1), UINT32_C(0xF2E07759), UINT32_C(0x272EBC47)}, {UINT32_C(0x909A578F), UINT32_C(0xE5E688E3), UINT32_C(0x7CFD1B7D), UINT32_C(0x9F25D6D1), UINT32_C(0xADE1E2A4), UINT32_C(0xC582260F), UINT32_C(0xA050071E), UINT32_C(0x2F50F74E)}}, {{UINT32_C(0x2DF4D40D), UINT32_C(0xE0A8FE3F), UINT32_C(0x07791F88), UINT32_C(0xB126E4EF), UINT32_C(0x2A88D242), UINT32_C(0x69759DB4), UINT32_C(0xC9C1981C), UINT32_C(0x52592A3B)}, {UINT32_C(0x72F649A1), UINT32_C(0xD0F41728), UINT32_C(0x0750EBAB), UINT32_C(0x9FF19B2B), UINT32_C(0xE0D7D222), UINT32_C(0xEFC047F9), UINT32_C(0x2E8140AF), UINT32_C(0x81491CA1)}}, {{UINT32_C(0x675F821B), UINT32_C(0x2DA40FF1), UINT32_C(0x9E2E0502), UINT32_C(0x2C91A287), UINT32_C(0x077D81FE), UINT32_C(0x993ECFF4), UINT32_C(0x71CC3DAE), UINT32_C(0x3ABA2F2C)}, {UINT32_C(0x168413DB), UINT32_C(0xED007670), UINT32_C(0xAFBD4E82), UINT32_C(0xC07D61B5), UINT32_C(0x6BBADA24), UINT32_C(0xF078262E), UINT32_C(0x9E6413CC), UINT32_C(0x0E0EDC62)}}, {{UINT32_C(0xB7D099F9), UINT32_C(0x6CD0451D), UINT32_C(0xF8B12C83), UINT32_C(0x8FB218E6), UINT32_C(0xE55EE1E4), UINT32_C(0x4D8C3B26), UINT32_C(0x4A6FCD90), UINT32_C(0x94964906)}, {UINT32_C(0x4BEACA48), UINT32_C(0x9ABB9685), UINT32_C(0x868EFEC7), UINT32_C(0x6A749487), UINT32_C(0xC8D2932C), UINT32_C(0x46BB9B42), UINT32_C(0xDE007BAC), UINT32_C(0x82384321)}}, {{UINT32_C(0xA942DB71), UINT32_C(0xDBECB743), UINT32_C(0x21A6BC46), UINT32_C(0x21B52115), UINT32_C(0x24C17D78), UINT32_C(0xE49B6894), UINT32_C(0x89A08E17), UINT32_C(0x737FD3F1)}, {UINT32_C(0xC36E4E57), UINT32_C(0xF833E404), UINT32_C(0x01E17CE6), UINT32_C(0x512C114A), UINT32_C(0x50D75050), UINT32_C(0x65A23D73), UINT32_C(0xF2F2D438), UINT32_C(0x838CA746)}}, {{UINT32_C(0xA20632B7), UINT32_C(0x28F9220C), UINT32_C(0x642358D6), UINT32_C(0x72D8C347), UINT32_C(0xE89CAA6F), UINT32_C(0xAB15FE1B), UINT32_C(0x6E16374A), UINT32_C(0x2A09B143)}, {UINT32_C(0xB983CFE8), UINT32_C(0x4CED0986), UINT32_C(0x97B84E88), UINT32_C(0xD9B067B6), UINT32_C(0xC2350F8F), UINT32_C(0x926FC5F5), UINT32_C(0x84E2078F), UINT32_C(0x31D77358)}}, {{UINT32_C(0x7FF17BA1), UINT32_C(0xA7815CE7), UINT32_C(0xA26BBA1B), UINT32_C(0xBE80BB6C), UINT32_C(0xF86DF104), UINT32_C(0x66DAE535), UINT32_C(0xAB1B9C09), UINT32_C(0x72739199)}, {UINT32_C(0x54056E67), UINT32_C(0x8E93F3C8), UINT32_C(0xEBF23595), UINT32_C(0xDC5E3855), UINT32_C(0x78123000), UINT32_C(0x70D1033C), UINT32_C(0xF22DD2BD), UINT32_C(0x50874350)}}, {{UINT32_C(0xC2700468), UINT32_C(0x533F213B), UINT32_C(0x11BEA732), UINT32_C(0x31E6AA9C), UINT32_C(0x4491DC82), UINT32_C(0xCB5E184E), UINT32_C(0x5BD63975), UINT32_C(0x8A68049A)}, {UINT32_C(0xF86A41D1), UINT32_C(0x1724AC47), UINT32_C(0xECA0DA11), UINT32_C(0xDF9A0CA3), UINT32_C(0x71F0EA19), UINT32_C(0xE5E1489C), UINT32_C(0xC9DC7BF2), UINT32_C(0x0E20661A)}}, }, { {{UINT32_C(0xF86D9DA8), UINT32_C(0x5EB4E319), UINT32_C(0xE0A46703), UINT32_C(0x3CBF130E), UINT32_C(0x00A4AB17), UINT32_C(0x166D52DA), UINT32_C(0xB7030861), UINT32_C(0x27A80547)}, {UINT32_C(0x399C32BA), UINT32_C(0xA7601086), UINT32_C(0xC2F0A5E5), UINT32_C(0x571E4E4B), UINT32_C(0x39BED44D), UINT32_C(0x72D12F6B), UINT32_C(0x1AF8F25F), UINT32_C(0x8FDCCE3D)}}, {{UINT32_C(0x7DFEB40D), UINT32_C(0x281F7AF9), UINT32_C(0xD7F767D5), UINT32_C(0x0CCE33B9), UINT32_C(0x8818C1E6), UINT32_C(0x3E8BF3F4), UINT32_C(0x4BA4647A), UINT32_C(0x6D909D0D)}, {UINT32_C(0xFAC574D1), UINT32_C(0x91D77BA0), UINT32_C(0x68CA7FEC), UINT32_C(0xD2592661), UINT32_C(0x281F269C), UINT32_C(0xC4C7D6B5), UINT32_C(0xDA42CDDD), UINT32_C(0x7A41CD78)}}, {{UINT32_C(0xA3B8F255), UINT32_C(0xBC8E0D27), UINT32_C(0x1C3E5190), UINT32_C(0xF5E2A8B1), UINT32_C(0xD609F668), UINT32_C(0x8C38862B), UINT32_C(0x0631D50F), UINT32_C(0x4E31C18E)}, {UINT32_C(0xF13E0CCD), UINT32_C(0x9013EDDB), UINT32_C(0x41EFDAF7), UINT32_C(0x83B04E68), UINT32_C(0xDC82597F), UINT32_C(0x15EC4BB8), UINT32_C(0x56117705), UINT32_C(0x50595150)}}, {{UINT32_C(0x1E0E0161), UINT32_C(0xD25F244D), UINT32_C(0x1A437FBA), UINT32_C(0x6C975D7B), UINT32_C(0x95F2AD8C), UINT32_C(0x305DB2DF), UINT32_C(0x3B9CC742), UINT32_C(0x17D6E005)}, {UINT32_C(0xE60BC3C3), UINT32_C(0x6A849F76), UINT32_C(0xBF8C3790), UINT32_C(0x35523E08), UINT32_C(0x239140E2), UINT32_C(0xF18B5335), UINT32_C(0x7CA5FF40), UINT32_C(0x5E857055)}}, {{UINT32_C(0xA4250E95), UINT32_C(0xB48F07A4), UINT32_C(0xC7F17667), UINT32_C(0x068735AE), UINT32_C(0x94771B24), UINT32_C(0x30F8D313), UINT32_C(0xA495A064), UINT32_C(0x598EA397)}, {UINT32_C(0x68B76855), UINT32_C(0xBF192529), UINT32_C(0xC7C0D2D6), UINT32_C(0x897E3CC6), UINT32_C(0x64EC9649), UINT32_C(0xA2A4948F), UINT32_C(0xAE7C8598), UINT32_C(0x1027891A)}}, {{UINT32_C(0x04585685), UINT32_C(0x0442E6CB), UINT32_C(0x82A2D258), UINT32_C(0x09BA61DA), UINT32_C(0x0AE5466D), UINT32_C(0x7C5400B1), UINT32_C(0xC2133893), UINT32_C(0x0A0B71B0)}, {UINT32_C(0xD5EF6E93), UINT32_C(0x04E3D98A), UINT32_C(0xF332BDF2), UINT32_C(0x177EA5F8), UINT32_C(0xC3FAE583), UINT32_C(0xE7CF3F71), UINT32_C(0x8AE0CFD7), UINT32_C(0x40C45133)}}, {{UINT32_C(0x9B82E738), UINT32_C(0x6BE94FC3), UINT32_C(0x8BC262E2), UINT32_C(0x212FB804), UINT32_C(0xB22E21FF), UINT32_C(0xE17F6A7A), UINT32_C(0x15E960BB), UINT32_C(0x22B7BDAB)}, {UINT32_C(0x771350C2), UINT32_C(0xE154C945), UINT32_C(0x882DB07B), UINT32_C(0x6505B8EB), UINT32_C(0xC7E3ABD3), UINT32_C(0x149A0A16), UINT32_C(0x81C30AAE), UINT32_C(0x78F78ABF)}}, {{UINT32_C(0xC954BC0A), UINT32_C(0x6ED81415), UINT32_C(0x70E55349), UINT32_C(0x316E8012), UINT32_C(0x50399C09), UINT32_C(0xEC02323B), UINT32_C(0x8559C3A9), UINT32_C(0x963BA97B)}, {UINT32_C(0x037EC345), UINT32_C(0x39FCE50E), UINT32_C(0xD5BF03FB), UINT32_C(0x422A082D), UINT32_C(0x18DCC77E), UINT32_C(0x59ED39E4), UINT32_C(0xA40AA978), UINT32_C(0x4CFC3F11)}}, {{UINT32_C(0x55D7C9B6), UINT32_C(0x85A56922), UINT32_C(0xB451111B), UINT32_C(0x5BC590E2), UINT32_C(0x8782C71B), UINT32_C(0x3BCB2315), UINT32_C(0x632246A9), UINT32_C(0x1F3456C4)}, {UINT32_C(0x9CFBBE19), UINT32_C(0xEA577AD9), UINT32_C(0x35CCE939), UINT32_C(0x051BEE40), UINT32_C(0x1A0C589C), UINT32_C(0xDC300899), UINT32_C(0xD2095619), UINT32_C(0x14877ECE)}}, {{UINT32_C(0x95024C5E), UINT32_C(0xB64D0EC6), UINT32_C(0xB94CDF74), UINT32_C(0xB0597195), UINT32_C(0x16844010), UINT32_C(0x3B97B513), UINT32_C(0xCCBABC63), UINT32_C(0x48799881)}, {UINT32_C(0xD9819075), UINT32_C(0x0E3119AE), UINT32_C(0xEB0299FD), UINT32_C(0xA5DCA9C1), UINT32_C(0x4A404D13), UINT32_C(0x8063D788), UINT32_C(0x8044EBE2), UINT32_C(0x974D2A1A)}}, {{UINT32_C(0xB8E14640), UINT32_C(0xB6589045), UINT32_C(0x5507B9BE), UINT32_C(0xFAD60A43), UINT32_C(0x56FF32BC), UINT32_C(0x9D540C1C), UINT32_C(0x74265A69), UINT32_C(0x47ECC24F)}, {UINT32_C(0xDB3E64C9), UINT32_C(0x0C829F18), UINT32_C(0x72E87B2B), UINT32_C(0xF7C0C6D7), UINT32_C(0x16B616CE), UINT32_C(0xCB3FC512), UINT32_C(0xB94F69B1), UINT32_C(0x549B9227)}}, {{UINT32_C(0xDB235273), UINT32_C(0xB151DEE9), UINT32_C(0x6D65606C), UINT32_C(0x2FD9496F), UINT32_C(0xD62B5B0D), UINT32_C(0x6A5E172D), UINT32_C(0xEA0AE249), UINT32_C(0x181E605D)}, {UINT32_C(0x8911490A), UINT32_C(0x66D7EB09), UINT32_C(0x2E70DEF2), UINT32_C(0x85E174A3), UINT32_C(0x4EF8CFA9), UINT32_C(0x2DA13354), UINT32_C(0x3E69BD22), UINT32_C(0x1B87FE62)}}, {{UINT32_C(0x2BB09564), UINT32_C(0x2DF420CA), UINT32_C(0x7ACEE4D4), UINT32_C(0x1AC26F76), UINT32_C(0x2BC7EF7A), UINT32_C(0x50C68E6F), UINT32_C(0xB445B2FE), UINT32_C(0x4730D654)}, {UINT32_C(0x8B57D38D), UINT32_C(0x90C040D9), UINT32_C(0x33CA2C77), UINT32_C(0x28793DB5), UINT32_C(0xAC6A4BE8), UINT32_C(0x22D2B573), UINT32_C(0xB72E7E01), UINT32_C(0x68C0DBDD)}}, {{UINT32_C(0x09E2D3FF), UINT32_C(0xDF70BCDC), UINT32_C(0x9F20F624), UINT32_C(0xB6E59970), UINT32_C(0x6DE3119E), UINT32_C(0x5E04FDE7), UINT32_C(0xD5705A5D), UINT32_C(0x1C9B43FF)}, {UINT32_C(0x681270B0), UINT32_C(0x7C23A517), UINT32_C(0x9303BF40), UINT32_C(0xDD7FC833), UINT32_C(0x458EE80A), UINT32_C(0x3028E496), UINT32_C(0x52590EEF), UINT32_C(0x0C720063)}}, {{UINT32_C(0x2850A5AE), UINT32_C(0x27B29710), UINT32_C(0xAA3E0397), UINT32_C(0xD1E6FBBA), UINT32_C(0xDF8FCBD6), UINT32_C(0xCFB44044), UINT32_C(0xC52B90FD), UINT32_C(0x7CD86272)}, {UINT32_C(0xEBA52025), UINT32_C(0xB0E7FA93), UINT32_C(0x04084EF3), UINT32_C(0x64166303), UINT32_C(0x43840178), UINT32_C(0xD7C7DCBE), UINT32_C(0x22FB81A2), UINT32_C(0x8BC7FF77)}}, {{UINT32_C(0xDAFCE699), UINT32_C(0xABDC5206), UINT32_C(0x83C5F3A3), UINT32_C(0x522A9137), UINT32_C(0x0E666E5C), UINT32_C(0xBAA93637), UINT32_C(0xD2D33B62), UINT32_C(0x0FD813DA)}, {UINT32_C(0x5D417354), UINT32_C(0x83391908), UINT32_C(0xA6B9B447), UINT32_C(0xE5AADE1D), UINT32_C(0xD68321B1), UINT32_C(0xBDE90A3C), UINT32_C(0x0411531B), UINT32_C(0x43FF9514)}}, }, { {{UINT32_C(0x39648345), UINT32_C(0xD61DEE64), UINT32_C(0x7FCB5B5E), UINT32_C(0xF8B3FA1C), UINT32_C(0x24C29C71), UINT32_C(0xDD531CE1), UINT32_C(0xFFB825FE), UINT32_C(0x7A23608B)}, {UINT32_C(0xF0DE896D), UINT32_C(0x8D607B82), UINT32_C(0x06EDDAFE), UINT32_C(0x6E497330), UINT32_C(0xC935E754), UINT32_C(0x8B49EFF0), UINT32_C(0xEE08BDBF), UINT32_C(0x90D54646)}}, {{UINT32_C(0x9044FD39), UINT32_C(0xF44FBB16), UINT32_C(0xDFB38141), UINT32_C(0xA72128C4), UINT32_C(0x01954CC0), UINT32_C(0x8467F688), UINT32_C(0xB560B5C5), UINT32_C(0x741C23EE)}, {UINT32_C(0x9765CF34), UINT32_C(0xA7F42201), UINT32_C(0x8A2AB61A), UINT32_C(0xB26C97BF), UINT32_C(0xCBD45AF3), UINT32_C(0xAA948763), UINT32_C(0xE21479F5), UINT32_C(0x74C993C2)}}, {{UINT32_C(0xBFA717A5), UINT32_C(0xD968CE1A), UINT32_C(0x48E92615), UINT32_C(0x45C1103D), UINT32_C(0xDD98207D), UINT32_C(0x4CCEBE85), UINT32_C(0xE65E5FE6), UINT32_C(0x8A75DF6E)}, {UINT32_C(0x418C47C5), UINT32_C(0x9E582C40), UINT32_C(0xA450009B), UINT32_C(0x2E9EE003), UINT32_C(0xDD60D3D2), UINT32_C(0x7C079613), UINT32_C(0x9935D8CA), UINT32_C(0x80A78C4A)}}, {{UINT32_C(0xD3C9B903), UINT32_C(0xF6CDED58), UINT32_C(0xEF455E7A), UINT32_C(0x4F27927D), UINT32_C(0x833BB3C1), UINT32_C(0xF9DBBB9E), UINT32_C(0x6BA3770A), UINT32_C(0x4107CFBF)}, {UINT32_C(0x520FCB57), UINT32_C(0x61871175), UINT32_C(0x47A12C8E), UINT32_C(0xEA3A307B), UINT32_C(0xC24E9E75), UINT32_C(0x940DDEE8), UINT32_C(0xF33541BB), UINT32_C(0x8AE8F22C)}}, {{UINT32_C(0x3973DC0B), UINT32_C(0xE4C89870), UINT32_C(0x55DFAAF0), UINT32_C(0xCC3DD1AC), UINT32_C(0x27372EFE), UINT32_C(0xB63D596B), UINT32_C(0x45A33718), UINT32_C(0x1B92A192)}, {UINT32_C(0x00607319), UINT32_C(0x0EABEBEE), UINT32_C(0x7C3E35EE), UINT32_C(0x69B7355E), UINT32_C(0x2233C454), UINT32_C(0xF7354E35), UINT32_C(0x1E722C0A), UINT32_C(0x1E2BAADA)}}, {{UINT32_C(0x3B9FE86D), UINT32_C(0xD0E47FE2), UINT32_C(0xDAA1C7BC), UINT32_C(0x878F403F), UINT32_C(0x90F5DED7), UINT32_C(0x5447AD54), UINT32_C(0x1E58B03B), UINT32_C(0x4E8A997B)}, {UINT32_C(0x2E926FA8), UINT32_C(0x9AD0E481), UINT32_C(0x8D0EF3AA), UINT32_C(0x871EFB9E), UINT32_C(0x7E714DF6), UINT32_C(0xADD7DD14), UINT32_C(0x2308EE02), UINT32_C(0x9A30245A)}}, {{UINT32_C(0x904F0D11), UINT32_C(0x44838B15), UINT32_C(0x2A2A70FF), UINT32_C(0x6177587A), UINT32_C(0x2C2F7943), UINT32_C(0x40293850), UINT32_C(0x67581701), UINT32_C(0x8F851191)}, {UINT32_C(0x842E6434), UINT32_C(0x564383D1), UINT32_C(0xAF2C0078), UINT32_C(0x251AF59D), UINT32_C(0x3354A264), UINT32_C(0x8A81772D), UINT32_C(0xDFD2D0EA), UINT32_C(0x9AAFA350)}}, {{UINT32_C(0x35461CAD), UINT32_C(0x47397932), UINT32_C(0x62C5BFFA), UINT32_C(0x0F86BD43), UINT32_C(0x7785490D), UINT32_C(0x5F166BC0), UINT32_C(0x2BD61B3E), UINT32_C(0x7DCCC988)}, {UINT32_C(0x9394375B), UINT32_C(0x44C3299A), UINT32_C(0x405A34BD), UINT32_C(0x0C5F2803), UINT32_C(0x4237E728), UINT32_C(0x3AD60F1D), UINT32_C(0x72EC2562), UINT32_C(0x6E7E06D0)}}, {{UINT32_C(0x3C5840A6), UINT32_C(0x44AD8471), UINT32_C(0x4752BC62), UINT32_C(0x40C3CE2B), UINT32_C(0xEC3FD75F), UINT32_C(0x94B14C21), UINT32_C(0x2629C0C0), UINT32_C(0x65E0E6AF)}, {UINT32_C(0x55936454), UINT32_C(0xA3FE2F55), UINT32_C(0x780E25E5), UINT32_C(0x252AD743), UINT32_C(0xFF4E107A), UINT32_C(0x22F9951B), UINT32_C(0x554CEA49), UINT32_C(0x1B8A7DDE)}}, {{UINT32_C(0x89F1C6FA), UINT32_C(0xBBDCC2C0), UINT32_C(0xC360A51D), UINT32_C(0x548FEF29), UINT32_C(0x1290EC92), UINT32_C(0x094DAD45), UINT32_C(0xAF55BF30), UINT32_C(0x792F6FB9)}, {UINT32_C(0x707FBF4E), UINT32_C(0x37EF4ABE), UINT32_C(0xFC4B6BD0), UINT32_C(0x0F43AB0D), UINT32_C(0x2D6EE5D9), UINT32_C(0x850015B7), UINT32_C(0x35C1FD65), UINT32_C(0x09273F35)}}, {{UINT32_C(0xA6C3209B), UINT32_C(0xCECF1B90), UINT32_C(0xABD433C0), UINT32_C(0xFB4BC864), UINT32_C(0x3EEEF8BA), UINT32_C(0x38246AAA), UINT32_C(0x9ED13F88), UINT32_C(0x4BC7904E)}, {UINT32_C(0x8E783066), UINT32_C(0xA61C369A), UINT32_C(0x4D1C832C), UINT32_C(0x496FB831), UINT32_C(0x03AD64D5), UINT32_C(0x1907687A), UINT32_C(0x83425766), UINT32_C(0x49516EA5)}}, {{UINT32_C(0xB1714E53), UINT32_C(0x8108B704), UINT32_C(0x82E39BE7), UINT32_C(0xB458CB4B), UINT32_C(0x097049DE), UINT32_C(0xFCBD51CC), UINT32_C(0x722E8CBA), UINT32_C(0x415F4079)}, {UINT32_C(0x342DF9C6), UINT32_C(0xCDB06F5E), UINT32_C(0x1281AC74), UINT32_C(0x64885CD1), UINT32_C(0x5366673D), UINT32_C(0x932A05E4), UINT32_C(0xE83AD23D), UINT32_C(0x7333520B)}}, {{UINT32_C(0xC54B523C), UINT32_C(0xDAA0A1EF), UINT32_C(0xB3C261C8), UINT32_C(0xA3E80053), UINT32_C(0x558FCFA5), UINT32_C(0x352CC612), UINT32_C(0x85852B14), UINT32_C(0x1B9B755D)}, {UINT32_C(0xA1B541FF), UINT32_C(0x19EE2CB6), UINT32_C(0xD5786B4F), UINT32_C(0x2B531CE2), UINT32_C(0x08C3E15B), UINT32_C(0xEF5EA6DF), UINT32_C(0x87111129), UINT32_C(0x82161B04)}}, {{UINT32_C(0xFCEABAED), UINT32_C(0x5AB533A5), UINT32_C(0x4A4D8E44), UINT32_C(0x4C2147A5), UINT32_C(0xDA02D43D), UINT32_C(0xD8EEE795), UINT32_C(0xA15C1CD0), UINT32_C(0x8CB648DF)}, {UINT32_C(0xA788DDDE), UINT32_C(0x4869FB6C), UINT32_C(0x77C03759), UINT32_C(0xF9554D14), UINT32_C(0x96187DB9), UINT32_C(0x4D25B41A), UINT32_C(0x3FE0B3F3), UINT32_C(0x662FBAB3)}}, {{UINT32_C(0xA58A5B2E), UINT32_C(0xD3AF4D09), UINT32_C(0x5CE88DBE), UINT32_C(0x3C5DD298), UINT32_C(0x7426C2A4), UINT32_C(0x89DDA42E), UINT32_C(0x49095424), UINT32_C(0x2D832B07)}, {UINT32_C(0x62AA84CF), UINT32_C(0x24EFCC03), UINT32_C(0xE86923D7), UINT32_C(0x348C19DE), UINT32_C(0x35DB5CB1), UINT32_C(0x453E9286), UINT32_C(0x8DB21CF3), UINT32_C(0x03F48EEB)}}, {{UINT32_C(0xF4035856), UINT32_C(0xBCF9600F), UINT32_C(0xAF820E18), UINT32_C(0xE77CEC83), UINT32_C(0x7F2FBCC1), UINT32_C(0xC87D43C1), UINT32_C(0x6290B18D), UINT32_C(0x574C4CAE)}, {UINT32_C(0xE56E1EFE), UINT32_C(0x8BD8AE45), UINT32_C(0x75D6FCC9), UINT32_C(0xB1EFD684), UINT32_C(0xA361E753), UINT32_C(0x9829F227), UINT32_C(0x5211B784), UINT32_C(0x9A50B425)}}, }, { {{UINT32_C(0x36396F78), UINT32_C(0x26F19590), UINT32_C(0x9AD1982C), UINT32_C(0x350D1A76), UINT32_C(0x947F352E), UINT32_C(0x33BDB4AB), UINT32_C(0xFFE1E1E1), UINT32_C(0x6CA38B05)}, {UINT32_C(0x6F2A8CA0), UINT32_C(0x055364C2), UINT32_C(0x2969CA7E), UINT32_C(0xAF15075D), UINT32_C(0xC3B9CB70), UINT32_C(0x2916D58F), UINT32_C(0xD7325693), UINT32_C(0x18D94A8B)}}, {{UINT32_C(0xF36EB789), UINT32_C(0x87C41809), UINT32_C(0xA7436F54), UINT32_C(0x8C3517F9), UINT32_C(0x3D785160), UINT32_C(0xE7C02E1D), UINT32_C(0x418C7ABF), UINT32_C(0x5BAFE72E)}, {UINT32_C(0xCD9B27C2), UINT32_C(0xA00A8E76), UINT32_C(0x7DA06823), UINT32_C(0x66791808), UINT32_C(0x20EC00B4), UINT32_C(0x342A03D9), UINT32_C(0x6122589A), UINT32_C(0x44502A7E)}}, {{UINT32_C(0x5BDAE972), UINT32_C(0x3A492F73), UINT32_C(0x126A07DE), UINT32_C(0x5184D076), UINT32_C(0xB56A38F0), UINT32_C(0xAE49313C), UINT32_C(0x9EC47E0A), UINT32_C(0x66CCC24E)}, {UINT32_C(0xC03CF3E1), UINT32_C(0xAE84941B), UINT32_C(0x5A73440B), UINT32_C(0x771AFC57), UINT32_C(0xC433E43C), UINT32_C(0xABF93DC8), UINT32_C(0x243C6828), UINT32_C(0x974EE822)}}, {{UINT32_C(0xA7A5F66C), UINT32_C(0x468D7FDB), UINT32_C(0xB18DEFCC), UINT32_C(0xBBB2C482), UINT32_C(0xFA2E7DEA), UINT32_C(0x188B8CAC), UINT32_C(0xBE0200B9), UINT32_C(0x7894BC93)}, {UINT32_C(0x6B84750E), UINT32_C(0xA3181338), UINT32_C(0x37356096), UINT32_C(0x8B14BDB2), UINT32_C(0xD62F4813), UINT32_C(0xA9200FE7), UINT32_C(0x6F7627CE), UINT32_C(0x8DF664A3)}}, {{UINT32_C(0xDD996CF1), UINT32_C(0x39BF14DD), UINT32_C(0xF7F42D26), UINT32_C(0xD00B3BF5), UINT32_C(0x017718A3), UINT32_C(0xF1AF5A20), UINT32_C(0xABCAE05D), UINT32_C(0x34A1E94B)}, {UINT32_C(0xC635D333), UINT32_C(0xAD75D1B5), UINT32_C(0x87210A5A), UINT32_C(0x97E5BD39), UINT32_C(0xA0327BF4), UINT32_C(0x11684CA6), UINT32_C(0x9B8F0A46), UINT32_C(0x25C51117)}}, {{UINT32_C(0xA935A9B9), UINT32_C(0x7E5CD79F), UINT32_C(0xA22DCD16), UINT32_C(0x15DC70C2), UINT32_C(0x78A420F4), UINT32_C(0x5CDA47E6), UINT32_C(0xEA631104), UINT32_C(0x37E0364E)}, {UINT32_C(0x5E47B630), UINT32_C(0xE7C46956), UINT32_C(0xE42C4DCB), UINT32_C(0x7BD4C4A7), UINT32_C(0x1C91117E), UINT32_C(0xA76B87A7), UINT32_C(0xADA4B5E1), UINT32_C(0x2AA043DD)}}, {{UINT32_C(0x875DED57), UINT32_C(0x6BB06B5A), UINT32_C(0xFEAD7B14), UINT32_C(0x89452B3B), UINT32_C(0xA6E39E1F), UINT32_C(0x0CBD5CA8), UINT32_C(0x3BFA7A3D), UINT32_C(0x2DC5917C)}, {UINT32_C(0xF840B6E8), UINT32_C(0x6395D5B8), UINT32_C(0xED8589EE), UINT32_C(0xAEC9342F), UINT32_C(0x77979E67), UINT32_C(0x8332A1B8), UINT32_C(0xC59F97DB), UINT32_C(0x29B55822)}}, {{UINT32_C(0x7D65A8F4), UINT32_C(0xFD145FF7), UINT32_C(0x119C9AFC), UINT32_C(0x8FFF7EE0), UINT32_C(0xAFCD6214), UINT32_C(0x0100D0E9), UINT32_C(0xA3B988B3), UINT32_C(0x98DE55E5)}, {UINT32_C(0x00151BF2), UINT32_C(0x0BACCB2E), UINT32_C(0x66091583), UINT32_C(0x2B422D09), UINT32_C(0x93C66A3B), UINT32_C(0xC4D15E16), UINT32_C(0x727DE9E6), UINT32_C(0x1C107559)}}, {{UINT32_C(0x3CB76EDF), UINT32_C(0xC019C7D7), UINT32_C(0x151F5E14), UINT32_C(0x6456DD91), UINT32_C(0x57CC7078), UINT32_C(0x29E95B66), UINT32_C(0xE9BDBCEC), UINT32_C(0x9193F4D9)}, {UINT32_C(0x4806F8CB), UINT32_C(0x375837B0), UINT32_C(0xAA954620), UINT32_C(0x52D5528A), UINT32_C(0x1B9D6D34), UINT32_C(0xE71F9F60), UINT32_C(0xDF95759C), UINT32_C(0x910E4FA1)}}, {{UINT32_C(0xFCADB5EA), UINT32_C(0x8D31B2EE), UINT32_C(0xA63C7498), UINT32_C(0x0814FF77), UINT32_C(0x5E3D927E), UINT32_C(0x236569C0), UINT32_C(0x95BBB9D9), UINT32_C(0x7F669DAD)}, {UINT32_C(0x305B0347), UINT32_C(0x29158C9A), UINT32_C(0x52D468EB), UINT32_C(0x99B9B7E7), UINT32_C(0xB4342443), UINT32_C(0x6C4CABC3), UINT32_C(0x0A803ED4), UINT32_C(0x125AFBEA)}}, {{UINT32_C(0x101FAA4E), UINT32_C(0x850A150B), UINT32_C(0x11ECDABC), UINT32_C(0xB586BCDA), UINT32_C(0x4DAD2264), UINT32_C(0x9692EF83), UINT32_C(0xD2B67F5E), UINT32_C(0x0951716E)}, {UINT32_C(0x924DD16D), UINT32_C(0xA2295F20), UINT32_C(0xD0CE88CD), UINT32_C(0xD8327275), UINT32_C(0xC683ADA3), UINT32_C(0x45F8DD0C), UINT32_C(0x88C26024), UINT32_C(0x4A798B33)}}, {{UINT32_C(0xCAF71198), UINT32_C(0x225395CF), UINT32_C(0xCA3F67CF), UINT32_C(0xEE223712), UINT32_C(0x81280061), UINT32_C(0x972B0199), UINT32_C(0x280ECC12), UINT32_C(0x0CB20E7A)}, {UINT32_C(0x70F54717), UINT32_C(0x06F04DA8), UINT32_C(0x410B9712), UINT32_C(0x5288425E), UINT32_C(0x74CEFB4A), UINT32_C(0x6C29A514), UINT32_C(0x849E2FD6), UINT32_C(0x4218ECCA)}}, {{UINT32_C(0xB33574B6), UINT32_C(0xD85663A3), UINT32_C(0xFAF7D3A2), UINT32_C(0x7469CFB1), UINT32_C(0x3CFA8876), UINT32_C(0x9C587EC4), UINT32_C(0xDB24ED63), UINT32_C(0x5DAE46AE)}, {UINT32_C(0xC413E494), UINT32_C(0x66C8DA33), UINT32_C(0x65942568), UINT32_C(0xB8B256B6), UINT32_C(0xA7A4CAAD), UINT32_C(0x0F09178E), UINT32_C(0xAFEBC90B), UINT32_C(0x577D4ADC)}}, {{UINT32_C(0x92D6C3B4), UINT32_C(0x49009BA6), UINT32_C(0xB884FAAC), UINT32_C(0xE9CF4915), UINT32_C(0x6F3DBE23), UINT32_C(0xC12377D3), UINT32_C(0xEA6B680C), UINT32_C(0x2F6E0E86)}, {UINT32_C(0xE6C5E24D), UINT32_C(0x5DF2CD5A), UINT32_C(0xEE608DD3), UINT32_C(0xAAE7E145), UINT32_C(0x8A7ED956), UINT32_C(0x5357CFF2), UINT32_C(0x3912DBA4), UINT32_C(0x8377126C)}}, {{UINT32_C(0xF83BC3F6), UINT32_C(0x6E83A6C6), UINT32_C(0xC0CC09C6), UINT32_C(0x3633E1E4), UINT32_C(0xBC4B73A5), UINT32_C(0x0C2A268B), UINT32_C(0x125688EB), UINT32_C(0x688369D3)}, {UINT32_C(0x73E75809), UINT32_C(0x64EE03E1), UINT32_C(0x8E110C46), UINT32_C(0x21773EE9), UINT32_C(0xA6A648B1), UINT32_C(0xF0BC6BE9), UINT32_C(0x7E0041E7), UINT32_C(0x39912183)}}, {{UINT32_C(0x26F5716E), UINT32_C(0xCC09774A), UINT32_C(0xFDFB59E9), UINT32_C(0x01CB17F9), UINT32_C(0xAE8938B4), UINT32_C(0xA88D1269), UINT32_C(0xD13047C9), UINT32_C(0x99A40D17)}, {UINT32_C(0x6FC672A3), UINT32_C(0xE469C984), UINT32_C(0x5638B928), UINT32_C(0xDA6534B6), UINT32_C(0xCDE40C83), UINT32_C(0xC56EAB20), UINT32_C(0xBD93AF10), UINT32_C(0x2C1582B1)}}, }, { {{UINT32_C(0xA3F45C37), UINT32_C(0xE4C19851), UINT32_C(0xC7D78FE9), UINT32_C(0xCA0FEFF2), UINT32_C(0x9A7E444B), UINT32_C(0x027B41D8), UINT32_C(0x15D38CBB), UINT32_C(0x1F1B242F)}, {UINT32_C(0xF1F50AB9), UINT32_C(0x1C6C132C), UINT32_C(0x5DFE7530), UINT32_C(0x2A02A3A4), UINT32_C(0x6E29159F), UINT32_C(0x2B1EB8E2), UINT32_C(0x2EEDE876), UINT32_C(0x5F3F4AB7)}}, {{UINT32_C(0x0F2DF95C), UINT32_C(0x362CE013), UINT32_C(0x26480BFA), UINT32_C(0x82E4E192), UINT32_C(0x6BEFF080), UINT32_C(0x9AAC9A96), UINT32_C(0x8EE2B59C), UINT32_C(0x5A1636F6)}, {UINT32_C(0xFA049CCB), UINT32_C(0x600E0339), UINT32_C(0xF2F57163), UINT32_C(0x56680F80), UINT32_C(0x7B4240A7), UINT32_C(0x2C395CC1), UINT32_C(0x9C86BB64), UINT32_C(0x32EDFE4A)}}, {{UINT32_C(0x711AEF69), UINT32_C(0x8D9842AB), UINT32_C(0x890831F0), UINT32_C(0x7A1C2429), UINT32_C(0x54CDA99A), UINT32_C(0x924478DF), UINT32_C(0xE25A02E2), UINT32_C(0x791A1D45)}, {UINT32_C(0x170F4C21), UINT32_C(0x1433F569), UINT32_C(0xCA5F8BD8), UINT32_C(0x9F42C8C1), UINT32_C(0x067B3201), UINT32_C(0x377740F7), UINT32_C(0x2ECE5D81), UINT32_C(0x75145FFF)}}, {{UINT32_C(0x39638F43), UINT32_C(0xCBFE782A), UINT32_C(0xE07553D2), UINT32_C(0xB0C0EC09), UINT32_C(0x115C673A), UINT32_C(0x8D1C41F7), UINT32_C(0xEB39E385), UINT32_C(0x8510551A)}, {UINT32_C(0xBA275803), UINT32_C(0x92000181), UINT32_C(0x27B9A42A), UINT32_C(0x8AF63F4A), UINT32_C(0x52297029), UINT32_C(0xD50ECF0F), UINT32_C(0x66883C56), UINT32_C(0x1DCA33A5)}}, {{UINT32_C(0xC51DF9D9), UINT32_C(0xB2C44933), UINT32_C(0xE66D80AE), UINT32_C(0xCA6F9FB0), UINT32_C(0x82839BA4), UINT32_C(0x78CD2EEB), UINT32_C(0xF7AFBCF3), UINT32_C(0x8FF8BCC8)}, {UINT32_C(0x4164959B), UINT32_C(0x5AD00C70), UINT32_C(0xE83ED8D5), UINT32_C(0xAD901C71), UINT32_C(0x2B52650D), UINT32_C(0x56FFC0A9), UINT32_C(0x780126A8), UINT32_C(0x0689B171)}}, {{UINT32_C(0x5EAC1DD8), UINT32_C(0x2E902A39), UINT32_C(0x7CAC283F), UINT32_C(0x7681EABA), UINT32_C(0x78525B7C), UINT32_C(0x03608CD8), UINT32_C(0x5EB95540), UINT32_C(0x09665B80)}, {UINT32_C(0x306EE831), UINT32_C(0xF09F9805), UINT32_C(0xE41D453A), UINT32_C(0xFB00B1C6), UINT32_C(0x7C93E727), UINT32_C(0xD8BB9559), UINT32_C(0x2CE63FD8), UINT32_C(0x3B74FEE7)}}, {{UINT32_C(0x0A22DABA), UINT32_C(0x73F48B33), UINT32_C(0xC8FC3E20), UINT32_C(0x797DE0FB), UINT32_C(0x9E79222D), UINT32_C(0x69C1BEE2), UINT32_C(0x1DF4C549), UINT32_C(0x3052F67A)}, {UINT32_C(0xED78B6FB), UINT32_C(0xFE9128A9), UINT32_C(0x29CCF94F), UINT32_C(0xD9460CFF), UINT32_C(0xC1FD1DAA), UINT32_C(0x53737484), UINT32_C(0x1EDAEEB2), UINT32_C(0x83ADCD01)}}, {{UINT32_C(0x2BA4195A), UINT32_C(0x189EC9AA), UINT32_C(0xC522BE92), UINT32_C(0x61345757), UINT32_C(0x39EFB05D), UINT32_C(0x35BAB72A), UINT32_C(0xAE0AC461), UINT32_C(0x82B27322)}, {UINT32_C(0xC07F4382), UINT32_C(0xFEBF0F8C), UINT32_C(0xDAD2ED8E), UINT32_C(0x1CA2B3D7), UINT32_C(0x0A27F89C), UINT32_C(0x4800A037), UINT32_C(0x9815D971), UINT32_C(0x77D1B2FC)}}, {{UINT32_C(0xCA0FC66A), UINT32_C(0xF9F46089), UINT32_C(0x8C23E4E1), UINT32_C(0x5BC406DE), UINT32_C(0x8DBF6DD5), UINT32_C(0x1D7F3BA9), UINT32_C(0x679D5587), UINT32_C(0x685B9111)}, {UINT32_C(0xB85BE0D0), UINT32_C(0x93554084), UINT32_C(0x7B9EB16C), UINT32_C(0xB081E9CA), UINT32_C(0x60F0D0B0), UINT32_C(0x58C428DC), UINT32_C(0x30B3C6D9), UINT32_C(0x12442C1A)}}, {{UINT32_C(0x567226BE), UINT32_C(0x147B843C), UINT32_C(0x429A8FFA), UINT32_C(0x2B2BFFAB), UINT32_C(0xCD435C2F), UINT32_C(0x7A4678EB), UINT32_C(0x3C0B887A), UINT32_C(0x200E8513)}, {UINT32_C(0x90605CDD), UINT32_C(0x9D457AAD), UINT32_C(0x157F29A5), UINT32_C(0x6736A242), UINT32_C(0x549FCA4D), UINT32_C(0x779B0D25), UINT32_C(0x17FDB4D9), UINT32_C(0x57477EE9)}}, {{UINT32_C(0xECF06CDD), UINT32_C(0xD9B15FD1), UINT32_C(0xC1CC2CFC), UINT32_C(0xECF75FC0), UINT32_C(0xA56B39E5), UINT32_C(0x273867C3), UINT32_C(0x79340B7D), UINT32_C(0x72F3ED45)}, {UINT32_C(0x55B6C9B9), UINT32_C(0xF31C9E4C), UINT32_C(0x0448FE57), UINT32_C(0xED96826E), UINT32_C(0x8BB7A02F), UINT32_C(0xE2DF54AD), UINT32_C(0xD79D71CC), UINT32_C(0x945E7B6B)}}, {{UINT32_C(0x9270E878), UINT32_C(0x32B6CE42), UINT32_C(0xD6EEBEB9), UINT32_C(0x980C8F6E), UINT32_C(0x55808237), UINT32_C(0xC5717C85), UINT32_C(0xCCA3F298), UINT32_C(0x4469D0A0)}, {UINT32_C(0x1A18C0E8), UINT32_C(0x2B9DD7E9), UINT32_C(0x6A0EC412), UINT32_C(0xE9D12401), UINT32_C(0x31F44B32), UINT32_C(0xF889DE98), UINT32_C(0x78854A7F), UINT32_C(0x692EE1E6)}}, {{UINT32_C(0xADEECA22), UINT32_C(0xF2360597), UINT32_C(0x99A4C198), UINT32_C(0x94623EBC), UINT32_C(0xE4169D20), UINT32_C(0x5A0D49C4), UINT32_C(0xBF0384F0), UINT32_C(0x7BE2C5BB)}, {UINT32_C(0x8C537851), UINT32_C(0x42DB0D40), UINT32_C(0x65C50782), UINT32_C(0x198A09A4), UINT32_C(0x45AD7EE0), UINT32_C(0x72F80BB7), UINT32_C(0x11FCED06), UINT32_C(0x4F83164B)}}, {{UINT32_C(0x95712AF0), UINT32_C(0x54E5B07C), UINT32_C(0x1E893387), UINT32_C(0x95E7F5D9), UINT32_C(0xC61D7766), UINT32_C(0x383BC5AE), UINT32_C(0x681C28DD), UINT32_C(0x09F626ED)}, {UINT32_C(0xDF97E3C9), UINT32_C(0x0D32B726), UINT32_C(0x7C7C4786), UINT32_C(0x2AC62238), UINT32_C(0xD3F5AD40), UINT32_C(0xECEA0C6A), UINT32_C(0xA870A132), UINT32_C(0x0D26633E)}}, {{UINT32_C(0xC3D42D26), UINT32_C(0x40A05A14), UINT32_C(0xF3BDE0E3), UINT32_C(0x06577CA1), UINT32_C(0x418B73FB), UINT32_C(0x03DAA258), UINT32_C(0x0EFDEB86), UINT32_C(0x205E02E6)}, {UINT32_C(0x99F90D56), UINT32_C(0xF5479E4D), UINT32_C(0x368CB6E3), UINT32_C(0x4E699BF3), UINT32_C(0x62E4A879), UINT32_C(0x534F6743), UINT32_C(0xA9D78191), UINT32_C(0x18473603)}}, {{UINT32_C(0x5C1ED4F9), UINT32_C(0xA23D79CF), UINT32_C(0xF2248B01), UINT32_C(0xFADE1CF5), UINT32_C(0x6F4D2164), UINT32_C(0xA3D52827), UINT32_C(0x10B731E5), UINT32_C(0x1F211C03)}, {UINT32_C(0xD97229E2), UINT32_C(0x0B415884), UINT32_C(0x80FCC283), UINT32_C(0xCABB7D89), UINT32_C(0x98EF388A), UINT32_C(0xDB9BC752), UINT32_C(0x93E80262), UINT32_C(0x50AF2A4A)}}, }, { {{UINT32_C(0xD57DD821), UINT32_C(0xD11E80F1), UINT32_C(0xDDA2AB29), UINT32_C(0x11CAE463), UINT32_C(0xE628F315), UINT32_C(0x21CAFD16), UINT32_C(0x7DF70CD4), UINT32_C(0x296A84E9)}, {UINT32_C(0x6E9EF995), UINT32_C(0x9ECF7513), UINT32_C(0x06E28855), UINT32_C(0xAE875257), UINT32_C(0x5DED383C), UINT32_C(0x78E1B7E9), UINT32_C(0x5E940F7F), UINT32_C(0x6C5D8ECC)}}, {{UINT32_C(0x998EE9A3), UINT32_C(0xCBD3ACB9), UINT32_C(0xD0DCF584), UINT32_C(0x990CDFF6), UINT32_C(0xC7CE5DDA), UINT32_C(0x0FB4346C), UINT32_C(0x355E268F), UINT32_C(0x5EDEEF9B)}, {UINT32_C(0xC215036D), UINT32_C(0xACD8B4A2), UINT32_C(0x91C7486B), UINT32_C(0x70D36995), UINT32_C(0x52C6694B), UINT32_C(0x72D5243D), UINT32_C(0xE5F8B99C), UINT32_C(0x54163B48)}}, {{UINT32_C(0x1D76A94A), UINT32_C(0xD2AEA2FF), UINT32_C(0x379F780B), UINT32_C(0xC5B4FBF1), UINT32_C(0xB33AC708), UINT32_C(0x700042F7), UINT32_C(0x8183E0CA), UINT32_C(0x7DA790BF)}, {UINT32_C(0xEBA72FA8), UINT32_C(0x95681FE6), UINT32_C(0xE22E254E), UINT32_C(0x1F0A390E), UINT32_C(0xBF07A8A5), UINT32_C(0x465A58F8), UINT32_C(0xFB1FCE40), UINT32_C(0x840EA2E7)}}, {{UINT32_C(0x44048484), UINT32_C(0xD955C5B5), UINT32_C(0x6935C5E4), UINT32_C(0x7107D595), UINT32_C(0x8A0FCE44), UINT32_C(0xFC657444), UINT32_C(0x2800E517), UINT32_C(0x97DF2B4D)}, {UINT32_C(0x2C482414), UINT32_C(0x0B1BB328), UINT32_C(0x4E48CDBE), UINT32_C(0x152614CC), UINT32_C(0x42EDE4E0), UINT32_C(0x48051FB6), UINT32_C(0x3DBFFE52), UINT32_C(0x91125B93)}}, {{UINT32_C(0xCF898F54), UINT32_C(0xA2F526C7), UINT32_C(0x83080857), UINT32_C(0x8788CA12), UINT32_C(0x4562F7B0), UINT32_C(0x2F442723), UINT32_C(0xC044560C), UINT32_C(0x837772AB)}, {UINT32_C(0x31BCB2EA), UINT32_C(0x51AD2F71), UINT32_C(0xAFC5C03D), UINT32_C(0x0F1D33FC), UINT32_C(0x7BD352A4), UINT32_C(0xDBFE541F), UINT32_C(0x64B8343D), UINT32_C(0x8B441399)}}, {{UINT32_C(0x44DCD145), UINT32_C(0xFEB96B8C), UINT32_C(0xEFF22D0D), UINT32_C(0xEEB3007C), UINT32_C(0x252A8C8F), UINT32_C(0xAF64DFC1), UINT32_C(0xD131E0C5), UINT32_C(0x5D9B0A05)}, {UINT32_C(0xABFED144), UINT32_C(0x28C943EF), UINT32_C(0xB6A2273D), UINT32_C(0xDFBF730C), UINT32_C(0xE2A1BFBD), UINT32_C(0x6CC5BE44), UINT32_C(0x09030FCD), UINT32_C(0x55FAC033)}}, {{UINT32_C(0x728F39EC), UINT32_C(0xFAA58543), UINT32_C(0x40B37B15), UINT32_C(0x9B2F10BA), UINT32_C(0x7254A419), UINT32_C(0x96505C7F), UINT32_C(0x879C7FF9), UINT32_C(0x04F4ACE5)}, {UINT32_C(0xBC5FDA53), UINT32_C(0xC0B4B576), UINT32_C(0xF7ABCD3C), UINT32_C(0x12549929), UINT32_C(0x313FEC34), UINT32_C(0x00F5631E), UINT32_C(0x798C7CFB), UINT32_C(0x89EA4459)}}, {{UINT32_C(0x0E2020C1), UINT32_C(0x671137B5), UINT32_C(0xA4DC66C3), UINT32_C(0x77727861), UINT32_C(0x81492A26), UINT32_C(0x8CE05ED1), UINT32_C(0xA0C3F612), UINT32_C(0x42BEA541)}, {UINT32_C(0xB0E461EB), UINT32_C(0x6D39E3D1), UINT32_C(0x09FA806F), UINT32_C(0x459A8E13), UINT32_C(0x466CB93B), UINT32_C(0xE2A185C1), UINT32_C(0xE21ECB34), UINT32_C(0x17D131CE)}}, {{UINT32_C(0x387A15BF), UINT32_C(0x2141E262), UINT32_C(0x6BE61C42), UINT32_C(0x675B5E7C), UINT32_C(0xF1CF93EF), UINT32_C(0xEEC1BDD4), UINT32_C(0x23BAB1F9), UINT32_C(0x6ACF3838)}, {UINT32_C(0xB0B39C86), UINT32_C(0xA2F84E23), UINT32_C(0xE244E0E3), UINT32_C(0xE955DBBC), UINT32_C(0xB7A8102A), UINT32_C(0xE0155980), UINT32_C(0xB23012FA), UINT32_C(0x1E117DC8)}}, {{UINT32_C(0x6EB36280), UINT32_C(0xC92A36AA), UINT32_C(0x5E906D78), UINT32_C(0x5AED3A1D), UINT32_C(0xAE4E430A), UINT32_C(0x8D336221), UINT32_C(0xD3AA50AD), UINT32_C(0x3F184F1D)}, {UINT32_C(0x916D9741), UINT32_C(0xD14810EC), UINT32_C(0x3322D9B3), UINT32_C(0x2900169F), UINT32_C(0x04728254), UINT32_C(0xAFF1A060), UINT32_C(0x26F60B5F), UINT32_C(0x89C4C673)}}, {{UINT32_C(0xB7F0D157), UINT32_C(0x5216E0AE), UINT32_C(0xC9F38AAD), UINT32_C(0x3B8D2226), UINT32_C(0xBB34AA79), UINT32_C(0x283E3E3F), UINT32_C(0x565CAB83), UINT32_C(0x94DA80FA)}, {UINT32_C(0xE6ED4A46), UINT32_C(0xDDB51943), UINT32_C(0x7CDD5FE6), UINT32_C(0xF3AFFA9A), UINT32_C(0xB648A84F), UINT32_C(0x0AB493CC), UINT32_C(0xF15EE45F), UINT32_C(0x128356B6)}}, {{UINT32_C(0xBD0F02C4), UINT32_C(0xD2AD34F4), UINT32_C(0x719BCF1E), UINT32_C(0x3DC9B6D1), UINT32_C(0x12EB5AE8), UINT32_C(0x11EDB8F1), UINT32_C(0x71180F90), UINT32_C(0x33AC71D8)}, {UINT32_C(0xB59621D7), UINT32_C(0x0AE988FE), UINT32_C(0x8F348211), UINT32_C(0x32042B52), UINT32_C(0xEB0CEBD3), UINT32_C(0x7E6787C4), UINT32_C(0x26B8A526), UINT32_C(0x8C4D2549)}}, {{UINT32_C(0x4D40ED72), UINT32_C(0xA3B46154), UINT32_C(0xF6CF3972), UINT32_C(0x3A096546), UINT32_C(0xB3E46D8C), UINT32_C(0x9C7BC931), UINT32_C(0x90486C75), UINT32_C(0x85B77BAD)}, {UINT32_C(0x6EBD35E0), UINT32_C(0x95B706E5), UINT32_C(0x101E098E), UINT32_C(0xC1E18243), UINT32_C(0xF01C17E1), UINT32_C(0xF17C23FF), UINT32_C(0x85EC224E), UINT32_C(0x32235272)}}, {{UINT32_C(0xFD24FA16), UINT32_C(0xE816235D), UINT32_C(0x0B3AEBD7), UINT32_C(0x5306CBC3), UINT32_C(0x8BE25CB7), UINT32_C(0xDEF60A9A), UINT32_C(0x512999C2), UINT32_C(0x4B889A0F)}, {UINT32_C(0x67B29FD9), UINT32_C(0xAB86A7F8), UINT32_C(0xB5461BCB), UINT32_C(0xB81C532D), UINT32_C(0xD34D9819), UINT32_C(0x810E9A0C), UINT32_C(0x3092515D), UINT32_C(0x1E353009)}}, {{UINT32_C(0x21FB0BD9), UINT32_C(0x46826339), UINT32_C(0x003BAE50), UINT32_C(0x9CCE9A43), UINT32_C(0x2EB45B4A), UINT32_C(0xCD2216C3), UINT32_C(0xC7E0F2C3), UINT32_C(0x13598548)}, {UINT32_C(0x54611984), UINT32_C(0x8B0BFD72), UINT32_C(0x89C0B05A), UINT32_C(0x705CB525), UINT32_C(0xCE880DD8), UINT32_C(0xD9073D87), UINT32_C(0x003DCAEB), UINT32_C(0x1EA534CD)}}, {{UINT32_C(0xC58B4413), UINT32_C(0xC7AAC256), UINT32_C(0xE8054F96), UINT32_C(0x301109D6), UINT32_C(0x9C7E7860), UINT32_C(0x0A1F44D2), UINT32_C(0x96F15424), UINT32_C(0x55D122BB)}, {UINT32_C(0x1C14A8A9), UINT32_C(0x9A63098F), UINT32_C(0x4221CDFB), UINT32_C(0x8E01A9DC), UINT32_C(0x357B360A), UINT32_C(0x11C91FCF), UINT32_C(0x036A3CF4), UINT32_C(0x70C47AEA)}}, }, { {{UINT32_C(0x036A843D), UINT32_C(0xC0457C4F), UINT32_C(0xF1F593CB), UINT32_C(0x6E3E0801), UINT32_C(0x8C53873B), UINT32_C(0x1AADF2D8), UINT32_C(0x0D140C8D), UINT32_C(0x5CEC5C7B)}, {UINT32_C(0x328002E4), UINT32_C(0x4341A9AB), UINT32_C(0xC410D034), UINT32_C(0x11F22331), UINT32_C(0x5DB6A39D), UINT32_C(0x0FCF69EF), UINT32_C(0xB84FDA1F), UINT32_C(0x3DD32A53)}}, {{UINT32_C(0xAF8C811A), UINT32_C(0x19E52339), UINT32_C(0x92D46C4F), UINT32_C(0xC8B83800), UINT32_C(0xCA8463A3), UINT32_C(0x891C4185), UINT32_C(0x98F3FF1B), UINT32_C(0x5B51651F)}, {UINT32_C(0x0FB39DCA), UINT32_C(0x3D149607), UINT32_C(0xB1051394), UINT32_C(0x39ECCDE2), UINT32_C(0x1A14522B), UINT32_C(0x3633DE27), UINT32_C(0x7C59A9A5), UINT32_C(0x5FE55114)}}, {{UINT32_C(0x2F0B507F), UINT32_C(0x68C8E0C6), UINT32_C(0x05B62C5E), UINT32_C(0xDABC8EEF), UINT32_C(0xE6165C1E), UINT32_C(0x297C943A), UINT32_C(0x7D7CA6D6), UINT32_C(0x337C6B94)}, {UINT32_C(0xD6066191), UINT32_C(0x66F98FE4), UINT32_C(0x58945DA9), UINT32_C(0x745BFEBA), UINT32_C(0x3B29A546), UINT32_C(0x60044787), UINT32_C(0xE2D4EDF2), UINT32_C(0x2815651E)}}, {{UINT32_C(0x63661218), UINT32_C(0x54A3BE74), UINT32_C(0x15E79415), UINT32_C(0x89C56364), UINT32_C(0x405E4932), UINT32_C(0xE03C6963), UINT32_C(0x9A619956), UINT32_C(0x86E101EA)}, {UINT32_C(0x400DC92B), UINT32_C(0x47BAF2F3), UINT32_C(0x291E4059), UINT32_C(0x5C44512C), UINT32_C(0xEC6D7BF9), UINT32_C(0xD7F84B8E), UINT32_C(0x25AB8D79), UINT32_C(0x6CF42540)}}, {{UINT32_C(0xB885DAFC), UINT32_C(0xD6E1B75D), UINT32_C(0x6128014E), UINT32_C(0x7A33CE4B), UINT32_C(0xEA9FF260), UINT32_C(0x80DF9948), UINT32_C(0xD2B5872B), UINT32_C(0x99E0A11C)}, {UINT32_C(0xE2435510), UINT32_C(0x960BDC3D), UINT32_C(0x14F7A99C), UINT32_C(0x4B0ECC53), UINT32_C(0x5AC6170B), UINT32_C(0xE815DB8B), UINT32_C(0x17D5F2DD), UINT32_C(0x30956156)}}, {{UINT32_C(0x57166FCE), UINT32_C(0xA035E3CE), UINT32_C(0x40A75B80), UINT32_C(0x71AD4095), UINT32_C(0xDB7D0BFB), UINT32_C(0x639C4EA7), UINT32_C(0xB12DBE6B), UINT32_C(0x7A90BE97)}, {UINT32_C(0x75F86A60), UINT32_C(0x091AA30F), UINT32_C(0x509AEEFC), UINT32_C(0x67C0F795), UINT32_C(0x331629C5), UINT32_C(0xF028C12A), UINT32_C(0x8A1F7478), UINT32_C(0x90D26B1C)}}, {{UINT32_C(0xB6AC2AD5), UINT32_C(0x6F01554E), UINT32_C(0xBC9A48D6), UINT32_C(0x9DD0576E), UINT32_C(0x97AE2605), UINT32_C(0xAB372013), UINT32_C(0xBB83852B), UINT32_C(0x1525D8B5)}, {UINT32_C(0xE46E4C61), UINT32_C(0xD50680C3), UINT32_C(0xECB8F06F), UINT32_C(0x29FBBA5C), UINT32_C(0xB16637A3), UINT32_C(0x60A48AB4), UINT32_C(0xCD1490D3), UINT32_C(0x8BB47967)}}, {{UINT32_C(0x4B7C7EA6), UINT32_C(0xA35A0187), UINT32_C(0xB4D6409A), UINT32_C(0xFE01521A), UINT32_C(0x8FDE1E30), UINT32_C(0x57CECE62), UINT32_C(0xF4F51D55), UINT32_C(0x1A9A9B2D)}, {UINT32_C(0xE221AC58), UINT32_C(0x0D33556B), UINT32_C(0x152508AD), UINT32_C(0x0A4A1A34), UINT32_C(0x0144AA33), UINT32_C(0x1FD61DA1), UINT32_C(0xEDC7C5F8), UINT32_C(0x4804BE6A)}}, {{UINT32_C(0x5B363A84), UINT32_C(0x071EC815), UINT32_C(0xFE11ED05), UINT32_C(0x359C2A9F), UINT32_C(0xB8BBF9BD), UINT32_C(0x0FDF80C9), UINT32_C(0x103ACCBE), UINT32_C(0x928E51A4)}, {UINT32_C(0xD5E8A222), UINT32_C(0xD152B6E7), UINT32_C(0xCBE022C9), UINT32_C(0x6368E3A8), UINT32_C(0x3128B659), UINT32_C(0x2E5055DE), UINT32_C(0xD21F1062), UINT32_C(0x51E23651)}}, {{UINT32_C(0x34834BF7), UINT32_C(0x5CE999D7), UINT32_C(0x3DC831E9), UINT32_C(0xE386394C), UINT32_C(0x7FE48564), UINT32_C(0x6DBD5ECA), UINT32_C(0x556841A5), UINT32_C(0x804BC07F)}, {UINT32_C(0x229A9175), UINT32_C(0x2A8B616C), UINT32_C(0xA1B3EF97), UINT32_C(0xAEEB533A), UINT32_C(0x6F145037), UINT32_C(0x9D858F9D), UINT32_C(0x7F6A8EBB), UINT32_C(0x247FFAB0)}}, {{UINT32_C(0x099EB4F3), UINT32_C(0xE616E779), UINT32_C(0xF1B1926C), UINT32_C(0x4F360D2E), UINT32_C(0x17055397), UINT32_C(0x28EE1F91), UINT32_C(0x844AFCF3), UINT32_C(0x9994D7FF)}, {UINT32_C(0x12CBD801), UINT32_C(0x8824A949), UINT32_C(0x6A4484DD), UINT32_C(0xA3AFED4D), UINT32_C(0x3B5E36A5), UINT32_C(0xCB16CD67), UINT32_C(0xBC3BBEA9), UINT32_C(0x5490C30D)}}, {{UINT32_C(0xD7601122), UINT32_C(0xEA43CA5A), UINT32_C(0xD248EB72), UINT32_C(0x9CF2A15B), UINT32_C(0xB71D18D0), UINT32_C(0x4CE8AB75), UINT32_C(0x041A19A5), UINT32_C(0x2576C5B1)}, {UINT32_C(0x8CC1496E), UINT32_C(0xDE20FD02), UINT32_C(0x0BE51831), UINT32_C(0xC9FE5B0C), UINT32_C(0x3A53ABBC), UINT32_C(0x9DC17E32), UINT32_C(0xF4C806FA), UINT32_C(0x94E24DD9)}}, {{UINT32_C(0x0DF1A4B3), UINT32_C(0x2A9CF5F1), UINT32_C(0x15063C08), UINT32_C(0xE0196754), UINT32_C(0xCCF88F77), UINT32_C(0xCE9CF2C6), UINT32_C(0xEFE91C6C), UINT32_C(0x51ACC7B5)}, {UINT32_C(0xA799FE2E), UINT32_C(0x0C2302EF), UINT32_C(0x69C0D117), UINT32_C(0x5EE756A4), UINT32_C(0xF4EAB1A1), UINT32_C(0x7E907EC2), UINT32_C(0xD98022DD), UINT32_C(0x19EEF95B)}}, {{UINT32_C(0xA8E7FFA5), UINT32_C(0xB170D483), UINT32_C(0x39180FAC), UINT32_C(0x2052600A), UINT32_C(0xA68AF290), UINT32_C(0x8EAD52D4), UINT32_C(0xFF9E3641), UINT32_C(0x01B88CFE)}, {UINT32_C(0x65BC2D0C), UINT32_C(0x3D9077F7), UINT32_C(0x3ABCDB1C), UINT32_C(0x2AF9CF67), UINT32_C(0x7295DADA), UINT32_C(0xEA104E74), UINT32_C(0xEB1E5D6E), UINT32_C(0x7DF23470)}}, {{UINT32_C(0x8E53F40B), UINT32_C(0x0F54D98D), UINT32_C(0xAF360481), UINT32_C(0xBFC22E9B), UINT32_C(0xE132666B), UINT32_C(0x309973B6), UINT32_C(0x25E783E0), UINT32_C(0x1F40D11F)}, {UINT32_C(0xF00AC3EB), UINT32_C(0x8EEBC9D7), UINT32_C(0x2F9ADCC7), UINT32_C(0xBD725D82), UINT32_C(0x66EFDDCC), UINT32_C(0x47767810), UINT32_C(0x4ECCAF67), UINT32_C(0x60B0B100)}}, {{UINT32_C(0xB98C7E96), UINT32_C(0x498E2074), UINT32_C(0x08BF31A9), UINT32_C(0xBEBF5183), UINT32_C(0x3894DBE7), UINT32_C(0x00DD4AAD), UINT32_C(0x429878F6), UINT32_C(0x66C047A4)}, {UINT32_C(0x6D0F1AB1), UINT32_C(0x16F2CB33), UINT32_C(0x58669ACB), UINT32_C(0x5FA2F181), UINT32_C(0x486F1BE7), UINT32_C(0xFA4B2F49), UINT32_C(0x5698F41B), UINT32_C(0x1ECAAF6B)}}, }, { {{UINT32_C(0x4DCC455E), UINT32_C(0x2999C212), UINT32_C(0xBEF617B8), UINT32_C(0x83897E49), UINT32_C(0x5A218E0F), UINT32_C(0x6B49CE26), UINT32_C(0x88EF7EA7), UINT32_C(0x49A5C9EB)}, {UINT32_C(0xF63EC82C), UINT32_C(0xF0EDA5FF), UINT32_C(0xEAD471CD), UINT32_C(0x736D933D), UINT32_C(0xDF8071C4), UINT32_C(0x10E4431D), UINT32_C(0x38E1523C), UINT32_C(0x8C59C107)}}, {{UINT32_C(0x5A54A4AB), UINT32_C(0x569FB74E), UINT32_C(0xF3384C14), UINT32_C(0x72788868), UINT32_C(0x107B417F), UINT32_C(0xBC840717), UINT32_C(0x7E13210C), UINT32_C(0x6682C107)}, {UINT32_C(0x77B20150), UINT32_C(0xB3359FC2), UINT32_C(0xA9E03222), UINT32_C(0xEB923E66), UINT32_C(0xA10CF332), UINT32_C(0x490C39FC), UINT32_C(0x49BA035D), UINT32_C(0x69099C2D)}}, {{UINT32_C(0x03CB2C6E), UINT32_C(0x64986720), UINT32_C(0x328B22BA), UINT32_C(0x994054A1), UINT32_C(0x6F0542DA), UINT32_C(0x4155C6B9), UINT32_C(0xA3B93FFB), UINT32_C(0x216CF760)}, {UINT32_C(0x5C2AD753), UINT32_C(0x74486184), UINT32_C(0xA0CD3660), UINT32_C(0xE517984E), UINT32_C(0x3D7DA8A1), UINT32_C(0x6530BC86), UINT32_C(0x2E46CA79), UINT32_C(0x04328CF9)}}, {{UINT32_C(0x4798CD35), UINT32_C(0x4100ADED), UINT32_C(0x635BAECD), UINT32_C(0xC832796D), UINT32_C(0x5B80E18C), UINT32_C(0x7EF1EA95), UINT32_C(0x426B1AA9), UINT32_C(0x6889A91B)}, {UINT32_C(0x0927C6F8), UINT32_C(0xC40A0A87), UINT32_C(0x2B86ED45), UINT32_C(0xD60CFD1C), UINT32_C(0xD57350A1), UINT32_C(0x98731DFF), UINT32_C(0x1DE4341F), UINT32_C(0x1C52EAE9)}}, {{UINT32_C(0x23A40FAA), UINT32_C(0xC287E33B), UINT32_C(0x7A633BDC), UINT32_C(0xB96D9F51), UINT32_C(0xE6D0F326), UINT32_C(0xF6A5B779), UINT32_C(0xF619DE4B), UINT32_C(0x10203FE1)}, {UINT32_C(0xC4F18BF8), UINT32_C(0x011FB53E), UINT32_C(0xBCA32CA0), UINT32_C(0xAEBB82F6), UINT32_C(0xF881818D), UINT32_C(0x06BF8ED5), UINT32_C(0x18247E6A), UINT32_C(0x3A6A3E35)}}, {{UINT32_C(0x00625DC1), UINT32_C(0x3BF2E96E), UINT32_C(0x5A288F80), UINT32_C(0xD81AD156), UINT32_C(0xB7CE9B13), UINT32_C(0x04C3269E), UINT32_C(0x2F9E2713), UINT32_C(0x3E18EAFC)}, {UINT32_C(0x9D0BC74A), UINT32_C(0x20F0E05D), UINT32_C(0xD8140790), UINT32_C(0xACDB4B75), UINT32_C(0xF1B5B265), UINT32_C(0x12918A7E), UINT32_C(0x6896342E), UINT32_C(0x22A70AF9)}}, {{UINT32_C(0x9C4B6B08), UINT32_C(0x326A28A2), UINT32_C(0xA17D3D57), UINT32_C(0x21302F37), UINT32_C(0xCE36F438), UINT32_C(0x181378E7), UINT32_C(0xFED12DE1), UINT32_C(0x42B07EBA)}, {UINT32_C(0x0468AD4C), UINT32_C(0x081DDD20), UINT32_C(0x64DF34AE), UINT32_C(0x32822EC3), UINT32_C(0x04B2192D), UINT32_C(0xE9F8D7C2), UINT32_C(0x918666F8), UINT32_C(0x6ABC7220)}}, {{UINT32_C(0x04AF3956), UINT32_C(0x93330701), UINT32_C(0x872BD30D), UINT32_C(0xEEB7AA8E), UINT32_C(0xD0E67494), UINT32_C(0xFC96D106), UINT32_C(0x3A918DFB), UINT32_C(0x516028CF)}, {UINT32_C(0xFB27B6EC), UINT32_C(0xFAF0B6F7), UINT32_C(0x515DA78D), UINT32_C(0x0FAD73AD), UINT32_C(0xD8CF1934), UINT32_C(0x5F136068), UINT32_C(0xB6052802), UINT32_C(0x0A526E04)}}, {{UINT32_C(0xE4685212), UINT32_C(0x20DF0DEB), UINT32_C(0xA41B293F), UINT32_C(0x71D4BAC1), UINT32_C(0x2FA8BBAC), UINT32_C(0xBCC32A2F), UINT32_C(0xF30CC343), UINT32_C(0x32A8723A)}, {UINT32_C(0xEF95ACFE), UINT32_C(0x71E6DAAF), UINT32_C(0x9F445394), UINT32_C(0x27D158F6), UINT32_C(0xE186B246), UINT32_C(0x2140F78D), UINT32_C(0xCB1C83AD), UINT32_C(0x4CAF98C3)}}, {{UINT32_C(0xB6F63AA9), UINT32_C(0x94E264FC), UINT32_C(0x4D0FE485), UINT32_C(0xF4637B02), UINT32_C(0x069CCB4E), UINT32_C(0xA4BC0A03), UINT32_C(0x9E25E817), UINT32_C(0x99A81E37)}, {UINT32_C(0x8F4D37BB), UINT32_C(0xE3B804A7), UINT32_C(0xE38E654C), UINT32_C(0x57F272A5), UINT32_C(0x05928F65), UINT32_C(0x00D1852C), UINT32_C(0x4345DD06), UINT32_C(0x3031B713)}}, {{UINT32_C(0x57536140), UINT32_C(0x6E42AF11), UINT32_C(0x005A403F), UINT32_C(0xDC5B7CDC), UINT32_C(0x26527417), UINT32_C(0xE6EE185E), UINT32_C(0x7C685BCF), UINT32_C(0x1003D013)}, {UINT32_C(0x192979E6), UINT32_C(0xC2206BF6), UINT32_C(0x6FE38214), UINT32_C(0xD1C370DB), UINT32_C(0x92F3C044), UINT32_C(0x78D105B7), UINT32_C(0xBFDF8DFA), UINT32_C(0x2F0DF6B8)}}, {{UINT32_C(0x44D04C4A), UINT32_C(0xB02FCA38), UINT32_C(0xA44566C6), UINT32_C(0x956A2F7C), UINT32_C(0x9F1F09C6), UINT32_C(0x60672DF3), UINT32_C(0x2160C362), UINT32_C(0x6459A949)}, {UINT32_C(0x08714451), UINT32_C(0xDAE54341), UINT32_C(0xBFFD7CF6), UINT32_C(0x48B77A0D), UINT32_C(0x3EDBC8D4), UINT32_C(0x615ADBFE), UINT32_C(0x35B67D2F), UINT32_C(0x3338E557)}}, {{UINT32_C(0xDD24A0F0), UINT32_C(0x601D49D1), UINT32_C(0x48EF27B9), UINT32_C(0x60A48DB7), UINT32_C(0x97A8BAC6), UINT32_C(0x97F2212C), UINT32_C(0x155AB524), UINT32_C(0x376B0292)}, {UINT32_C(0x62E2A961), UINT32_C(0xA25881BA), UINT32_C(0x2B8C56F7), UINT32_C(0xEB74CC80), UINT32_C(0xDA57C41A), UINT32_C(0xBE5C5DD4), UINT32_C(0x2D16AFA0), UINT32_C(0x53D0D037)}}, {{UINT32_C(0xCA291206), UINT32_C(0xE47C9EAB), UINT32_C(0x42D5C667), UINT32_C(0x25DADB64), UINT32_C(0xD886993E), UINT32_C(0x8C154CB6), UINT32_C(0x806B932F), UINT32_C(0x11DEC39C)}, {UINT32_C(0x13D4B4E5), UINT32_C(0x51A4DCF3), UINT32_C(0x9D1D822A), UINT32_C(0xAA1DAD6D), UINT32_C(0xCEEF2E29), UINT32_C(0x2BB2E14D), UINT32_C(0xB2343BE3), UINT32_C(0x429C13C7)}}, {{UINT32_C(0x297F709D), UINT32_C(0x4E8E953F), UINT32_C(0x262D862A), UINT32_C(0x23183A3D), UINT32_C(0xEA12D93F), UINT32_C(0xE164A10D), UINT32_C(0xFE703920), UINT32_C(0x386C2873)}, {UINT32_C(0xE5C51C7E), UINT32_C(0xD59E1582), UINT32_C(0x020F6A2E), UINT32_C(0xA8C93B5B), UINT32_C(0x160CD058), UINT32_C(0x51518BD0), UINT32_C(0xB1D38AC7), UINT32_C(0x3337801A)}}, {{UINT32_C(0x2F5D9E25), UINT32_C(0x6E251533), UINT32_C(0xB0D6B0DB), UINT32_C(0x88E76135), UINT32_C(0x9E6762D1), UINT32_C(0x5C197832), UINT32_C(0x84E620AC), UINT32_C(0x12326773)}, {UINT32_C(0x0E2694DD), UINT32_C(0x3B88DF27), UINT32_C(0x30A23CAA), UINT32_C(0x30FED9E3), UINT32_C(0xA23DF142), UINT32_C(0xE12DD93E), UINT32_C(0x2EA77C07), UINT32_C(0x06778F51)}}, }, { {{UINT32_C(0x49E5F6B4), UINT32_C(0x5D5BE00E), UINT32_C(0x721EF9DC), UINT32_C(0x2F47E7C7), UINT32_C(0x7EAFC098), UINT32_C(0x338F7B00), UINT32_C(0xAF8C2475), UINT32_C(0x0F5F06E3)}, {UINT32_C(0x63122B22), UINT32_C(0x2A4B845C), UINT32_C(0x89A4CE9A), UINT32_C(0xED440060), UINT32_C(0x9A86D9BC), UINT32_C(0xC9EEB640), UINT32_C(0x2F39B439), UINT32_C(0x12C3E0F3)}}, {{UINT32_C(0x17766F6C), UINT32_C(0xB444B88B), UINT32_C(0xA41FD692), UINT32_C(0xF9B100E6), UINT32_C(0x5C149B30), UINT32_C(0x81EAFCD1), UINT32_C(0x1D521A1E), UINT32_C(0x37DD6F6E)}, {UINT32_C(0x389DCD6E), UINT32_C(0x14DBE8C3), UINT32_C(0x0DCBC7FC), UINT32_C(0xCD24D655), UINT32_C(0xE00F9102), UINT32_C(0x05F8D48E), UINT32_C(0x509D18D4), UINT32_C(0x403954E6)}}, {{UINT32_C(0xE4FE16EC), UINT32_C(0xA04FDDDF), UINT32_C(0x90E15C0C), UINT32_C(0xB9E7FA73), UINT32_C(0xC77FAB6B), UINT32_C(0x7D6A7206), UINT32_C(0x3E221F12), UINT32_C(0x3FFDCCD1)}, {UINT32_C(0x47B5BB7F), UINT32_C(0x120C05B1), UINT32_C(0x5B7E2B96), UINT32_C(0xFA3614C0), UINT32_C(0x4A6AC6E0), UINT32_C(0xF3A4F07F), UINT32_C(0xC8AD4F23), UINT32_C(0x0324BF48)}}, {{UINT32_C(0x55DF2F18), UINT32_C(0x508A0370), UINT32_C(0xB872F209), UINT32_C(0x1C6C91EA), UINT32_C(0x8E12F437), UINT32_C(0xDC3F6C5A), UINT32_C(0xC91AFD75), UINT32_C(0x65F5058F)}, {UINT32_C(0x5A859A1D), UINT32_C(0x0C43613D), UINT32_C(0x5BF96A6B), UINT32_C(0x83A2610E), UINT32_C(0x1496AEAD), UINT32_C(0x1A98AA4C), UINT32_C(0xE6CAA901), UINT32_C(0x3AB1CE5E)}}, {{UINT32_C(0xFFB3E411), UINT32_C(0x9420ABFE), UINT32_C(0x31404E74), UINT32_C(0xCE609760), UINT32_C(0x02C49837), UINT32_C(0x3D4C23C5), UINT32_C(0xD0868A3C), UINT32_C(0x6B79FB14)}, {UINT32_C(0x6B5861EA), UINT32_C(0xB4EEE8DB), UINT32_C(0x9D948195), UINT32_C(0x495E2B46), UINT32_C(0x1CE15EC9), UINT32_C(0x2BB0BD94), UINT32_C(0xDED25955), UINT32_C(0x6CE79F80)}}, {{UINT32_C(0x5820DF65), UINT32_C(0xA6B98C1D), UINT32_C(0x909356B5), UINT32_C(0xE8284737), UINT32_C(0x091340E1), UINT32_C(0x38E8609A), UINT32_C(0x10666012), UINT32_C(0x98EC077B)}, {UINT32_C(0xBF075DAE), UINT32_C(0xFB243B1E), UINT32_C(0xA270FE31), UINT32_C(0x32312BAC), UINT32_C(0x0CAA5F8E), UINT32_C(0x21451120), UINT32_C(0x2A515015), UINT32_C(0x8F60118F)}}, {{UINT32_C(0xCBDEB88E), UINT32_C(0x4F211C9E), UINT32_C(0xB6D680FD), UINT32_C(0xF6D3CC3A), UINT32_C(0x8BF4B4A7), UINT32_C(0xE193829D), UINT32_C(0x2D620371), UINT32_C(0x3223EF4E)}, {UINT32_C(0xC0E5245A), UINT32_C(0xC3E35420), UINT32_C(0xB4ADE2EA), UINT32_C(0xD3F4F894), UINT32_C(0xF2CE985E), UINT32_C(0x464FCB6C), UINT32_C(0x7B987FA7), UINT32_C(0x79CF596D)}}, {{UINT32_C(0x0C0016FF), UINT32_C(0x0730748C), UINT32_C(0xA2949069), UINT32_C(0xD02115C5), UINT32_C(0x40E9C7F9), UINT32_C(0xAA6F794D), UINT32_C(0x79149C37), UINT32_C(0x9514FA7B)}, {UINT32_C(0x5A46BCE0), UINT32_C(0x6E2F2778), UINT32_C(0x0837ACD5), UINT32_C(0xF55D46C6), UINT32_C(0x1E4223E6), UINT32_C(0xF965C468), UINT32_C(0x85D90A07), UINT32_C(0x0BFF0A91)}}, {{UINT32_C(0x1923C8AF), UINT32_C(0x9ED90358), UINT32_C(0xA470AE00), UINT32_C(0xC425B633), UINT32_C(0x1C50FDAD), UINT32_C(0xF9F4B162), UINT32_C(0xA8CA2BD5), UINT32_C(0x0999D072)}, {UINT32_C(0xAF74D4C3), UINT32_C(0xCB122FBD), UINT32_C(0x2C283752), UINT32_C(0x372C13F0), UINT32_C(0x82138B19), UINT32_C(0x9F42A903), UINT32_C(0x3EB8CB95), UINT32_C(0x573A2CEE)}}, {{UINT32_C(0x3AC2E191), UINT32_C(0x6C3A6BE3), UINT32_C(0x1B222DB2), UINT32_C(0x4149E0EB), UINT32_C(0xA4AACC55), UINT32_C(0x5BA91005), UINT32_C(0x1BFADBD0), UINT32_C(0x176BD33D)}, {UINT32_C(0xA8DA0FEA), UINT32_C(0x4AEAF14E), UINT32_C(0xA7FF8E1C), UINT32_C(0xB12401F9), UINT32_C(0x0F192414), UINT32_C(0xF1EF39AE), UINT32_C(0x416743C1), UINT32_C(0x95D433D3)}}, {{UINT32_C(0x9AA0C238), UINT32_C(0x29ECF54D), UINT32_C(0x8FCA6419), UINT32_C(0x3762F1D7), UINT32_C(0x64D3AAA9), UINT32_C(0x761D786A), UINT32_C(0xDAEC7BF4), UINT32_C(0x7A8A677D)}, {UINT32_C(0x324676F4), UINT32_C(0xC2829EAD), UINT32_C(0x4D0B291E), UINT32_C(0x4E504A47), UINT32_C(0xF8C4F384), UINT32_C(0x360CE7FE), UINT32_C(0x78CDA37D), UINT32_C(0x33A577B5)}}, {{UINT32_C(0x333103FD), UINT32_C(0x1BBFC128), UINT32_C(0xE45C9DBE), UINT32_C(0x3D36045C), UINT32_C(0x15C9013D), UINT32_C(0xA8D53F5A), UINT32_C(0xA33FDCFD), UINT32_C(0x99D62F8A)}, {UINT32_C(0x0A81F581), UINT32_C(0x73E53961), UINT32_C(0xD00BC0D9), UINT32_C(0xD01AD20E), UINT32_C(0x1F6D9B73), UINT32_C(0x59701F4D), UINT32_C(0xE098E536), UINT32_C(0x0F4EBFBC)}}, {{UINT32_C(0x91E3C062), UINT32_C(0xBDB9368A), UINT32_C(0x9B17AAE5), UINT32_C(0xCD66A0B1), UINT32_C(0xB4537E05), UINT32_C(0xB6636DD7), UINT32_C(0x73B119CE), UINT32_C(0x37D94B8E)}, {UINT32_C(0xC7428FF9), UINT32_C(0xA5F8E90F), UINT32_C(0xF8EA9F03), UINT32_C(0xE7E5B2B7), UINT32_C(0x5B3506DA), UINT32_C(0xB7F20FB8), UINT32_C(0xE494FFDA), UINT32_C(0x0F4AB6D5)}}, {{UINT32_C(0x85365933), UINT32_C(0x3ACEE3BD), UINT32_C(0xBF510114), UINT32_C(0x9D5223D3), UINT32_C(0xA08D01B0), UINT32_C(0xE0D7D9A7), UINT32_C(0xB2F1F61F), UINT32_C(0x28FD329A)}, {UINT32_C(0xA5909DD3), UINT32_C(0x3E16A2E2), UINT32_C(0xB4FECB35), UINT32_C(0x284A8708), UINT32_C(0x73D5BFBA), UINT32_C(0x190F7B3A), UINT32_C(0x92EE4BBE), UINT32_C(0x7E07982E)}}, {{UINT32_C(0x44945687), UINT32_C(0xA30A4C22), UINT32_C(0xD688A301), UINT32_C(0x657C0F2E), UINT32_C(0xBBB3E65A), UINT32_C(0x9B558D4A), UINT32_C(0xA6E57844), UINT32_C(0x8044D57E)}, {UINT32_C(0xE3957E21), UINT32_C(0xF202E50E), UINT32_C(0xCE62FCC9), UINT32_C(0x4957E651), UINT32_C(0xC4ECE0B8), UINT32_C(0xF7B9EBA4), UINT32_C(0x61167229), UINT32_C(0x29532CEC)}}, {{UINT32_C(0x3EEF3D71), UINT32_C(0xE9DC8EA6), UINT32_C(0x3E8EC117), UINT32_C(0xEBF76BD4), UINT32_C(0x2EA072B9), UINT32_C(0x48CEB78D), UINT32_C(0x73EFC32D), UINT32_C(0x82ECDFC4)}, {UINT32_C(0xE2C89E7D), UINT32_C(0x51B02CB3), UINT32_C(0xF4D9100F), UINT32_C(0xE9D0740C), UINT32_C(0x8A5E3F48), UINT32_C(0xBB556EFE), UINT32_C(0x1D01B44E), UINT32_C(0x864E52DA)}}, }, { {{UINT32_C(0x14EA6DC5), UINT32_C(0x5A75E0BD), UINT32_C(0x532EFED7), UINT32_C(0x09F2AA76), UINT32_C(0x83CE5A18), UINT32_C(0xE6DAE0A9), UINT32_C(0xCEB4E78D), UINT32_C(0x00F9BCB7)}, {UINT32_C(0x71F79BF3), UINT32_C(0x128FB51C), UINT32_C(0x80D5DBC3), UINT32_C(0x78C79788), UINT32_C(0x9B816B9E), UINT32_C(0x2752F02C), UINT32_C(0xEB7622E2), UINT32_C(0x88CFBA0C)}}, {{UINT32_C(0x268432A3), UINT32_C(0x845AB940), UINT32_C(0x2F94F6D3), UINT32_C(0xA8D0231B), UINT32_C(0xFEC02130), UINT32_C(0xBDFB3F91), UINT32_C(0x5F62419F), UINT32_C(0x07A61AE4)}, {UINT32_C(0x192EBF1A), UINT32_C(0xD1C951DF), UINT32_C(0xFA232E34), UINT32_C(0x22CDCFF5), UINT32_C(0x3A7581DD), UINT32_C(0xDFDF121B), UINT32_C(0x710403A5), UINT32_C(0x9865ECA2)}}, {{UINT32_C(0xF8180BAB), UINT32_C(0x609F4527), UINT32_C(0x50A6D914), UINT32_C(0x93AB1072), UINT32_C(0xE2EEE3BD), UINT32_C(0x299D5013), UINT32_C(0x42959C14), UINT32_C(0x36EFCE5B)}, {UINT32_C(0x1045FFCB), UINT32_C(0x49CDA60D), UINT32_C(0x45723371), UINT32_C(0xA8B2492E), UINT32_C(0xF243FDBB), UINT32_C(0xCB75789B), UINT32_C(0x871D500D), UINT32_C(0x8E1079D7)}}, {{UINT32_C(0xDB14298E), UINT32_C(0x69852694), UINT32_C(0x41A56B6D), UINT32_C(0xBAA92A95), UINT32_C(0x3DBFDBA4), UINT32_C(0xC7371848), UINT32_C(0x947747F8), UINT32_C(0x94B3155C)}, {UINT32_C(0x7552426B), UINT32_C(0x97BCDD19), UINT32_C(0x32682121), UINT32_C(0x4FB3E76D), UINT32_C(0x8BC15FCA), UINT32_C(0x875AA0F7), UINT32_C(0xF1FD2315), UINT32_C(0x4065BCDF)}}, {{UINT32_C(0xB7F1ED04), UINT32_C(0x2D1C0519), UINT32_C(0xEA2535E1), UINT32_C(0xED9A1BB7), UINT32_C(0xABAE813E), UINT32_C(0xE4728CD6), UINT32_C(0x21A771D0), UINT32_C(0x2CD7D447)}, {UINT32_C(0x59B9E964), UINT32_C(0x88E2A785), UINT32_C(0x6F9B5374), UINT32_C(0x2677FBD7), UINT32_C(0x2645B626), UINT32_C(0x3967D6C5), UINT32_C(0x5A1C315B), UINT32_C(0x8843F7DF)}}, {{UINT32_C(0xC7055A4E), UINT32_C(0x673CD273), UINT32_C(0xEE827873), UINT32_C(0x052AC45C), UINT32_C(0xCE1981F3), UINT32_C(0xC26B9214), UINT32_C(0x2B8EEF59), UINT32_C(0x3C39C13C)}, {UINT32_C(0x0B276D47), UINT32_C(0xDD9E1B9B), UINT32_C(0x7287F9A1), UINT32_C(0x6729A534), UINT32_C(0x061DAD53), UINT32_C(0x43E1471C), UINT32_C(0x118B56C8), UINT32_C(0x6082FAD9)}}, {{UINT32_C(0xF99186D6), UINT32_C(0x9C3872AA), UINT32_C(0x75AC99BF), UINT32_C(0x1D9E8DB6), UINT32_C(0xE338DBD3), UINT32_C(0x6FA7A0FF), UINT32_C(0xD1FEF2F9), UINT32_C(0x1EDF44EC)}, {UINT32_C(0x1F9114BF), UINT32_C(0xBAF9D33A), UINT32_C(0x3007B6A5), UINT32_C(0x89AF08E5), UINT32_C(0x8436D917), UINT32_C(0xAA04B169), UINT32_C(0x6AFCF5E0), UINT32_C(0x8381E76A)}}, {{UINT32_C(0xC1D799BA), UINT32_C(0xC51848A4), UINT32_C(0x7F40B34B), UINT32_C(0x6C3D43A9), UINT32_C(0xA5CB7B95), UINT32_C(0xE8DAE074), UINT32_C(0xBB5F8AEC), UINT32_C(0x5375B1EE)}, {UINT32_C(0x507099E6), UINT32_C(0x461290EE), UINT32_C(0x3BAD89AD), UINT32_C(0xB95934AA), UINT32_C(0x701A4D9C), UINT32_C(0x9A6E5C22), UINT32_C(0x5E1389F6), UINT32_C(0x2CA79144)}}, {{UINT32_C(0x0E5108FC), UINT32_C(0xBF82F786), UINT32_C(0x644D06DE), UINT32_C(0x3620CCC4), UINT32_C(0x8E5C4753), UINT32_C(0xB65DE853), UINT32_C(0x9FEDFD16), UINT32_C(0x6DAB7241)}, {UINT32_C(0x546DCBA4), UINT32_C(0x4CECAC87), UINT32_C(0x3E2D0684), UINT32_C(0xA7BBE65D), UINT32_C(0xDA1E4FFA), UINT32_C(0x092AA490), UINT32_C(0x41AD32AF), UINT32_C(0x78F448BE)}}, {{UINT32_C(0x4A33F071), UINT32_C(0x321580FE), UINT32_C(0x5EE5E685), UINT32_C(0xBEA845D1), UINT32_C(0x47AC8ACF), UINT32_C(0xC73CAECE), UINT32_C(0xA9F65F05), UINT32_C(0x0E15E55D)}, {UINT32_C(0xA59506E7), UINT32_C(0x5FC47420), UINT32_C(0x01DBD2DD), UINT32_C(0x501417FF), UINT32_C(0xFB1205A6), UINT32_C(0x8EF23280), UINT32_C(0xE0F43AE8), UINT32_C(0x1AA26168)}}, {{UINT32_C(0x8149EB2A), UINT32_C(0xD41F73B1), UINT32_C(0xAD95D531), UINT32_C(0xC297AF04), UINT32_C(0x749E415D), UINT32_C(0x2017176F), UINT32_C(0x8357CE9A), UINT32_C(0x5AF89C73)}, {UINT32_C(0x08A0FF9C), UINT32_C(0x301F7C79), UINT32_C(0x98695C57), UINT32_C(0x0C2999B5), UINT32_C(0x6E4D8FF5), UINT32_C(0x85679957), UINT32_C(0x6F493B1C), UINT32_C(0x2CC0FF3E)}}, {{UINT32_C(0x4AF481F5), UINT32_C(0xFE90F904), UINT32_C(0x31BC4919), UINT32_C(0x0562C78B), UINT32_C(0x70E4F140), UINT32_C(0xAA44AA56), UINT32_C(0xA175159A), UINT32_C(0x1B61DEB4)}, {UINT32_C(0xA7A7E648), UINT32_C(0x85315DE1), UINT32_C(0x6C012B33), UINT32_C(0x4BC1F51D), UINT32_C(0x060CDEE6), UINT32_C(0x40CB5DE3), UINT32_C(0x32A1E138), UINT32_C(0x969F9196)}}, {{UINT32_C(0xE05F23B5), UINT32_C(0x3B317508), UINT32_C(0x512D1156), UINT32_C(0x7B1A93AE), UINT32_C(0xCB58EC19), UINT32_C(0x3A283415), UINT32_C(0x8E27CAD9), UINT32_C(0x193A53A1)}, {UINT32_C(0x03DE1BA8), UINT32_C(0xCF6BBEBA), UINT32_C(0x47A02393), UINT32_C(0xFA5544CA), UINT32_C(0x8627F5EB), UINT32_C(0x8B3AAC1A), UINT32_C(0x62EAF195), UINT32_C(0x02FAD2EC)}}, {{UINT32_C(0x259CCF0F), UINT32_C(0x4F8D8ADA), UINT32_C(0x562991D7), UINT32_C(0xE4E6786B), UINT32_C(0x597C3FD3), UINT32_C(0xA1C63473), UINT32_C(0xACAB6F16), UINT32_C(0x1F5B9017)}, {UINT32_C(0x592D437A), UINT32_C(0x95B201BD), UINT32_C(0xED14F859), UINT32_C(0x54432A75), UINT32_C(0x0B551AC1), UINT32_C(0x67EF73FB), UINT32_C(0x7F1AB9CA), UINT32_C(0x0A48F043)}}, {{UINT32_C(0x4A35445C), UINT32_C(0xECEE508E), UINT32_C(0xB3EA6F9B), UINT32_C(0x80BE9F07), UINT32_C(0x87E4B78E), UINT32_C(0xD914B256), UINT32_C(0xF89B8E4B), UINT32_C(0x97F79CC9)}, {UINT32_C(0xC359FB12), UINT32_C(0x6A5B4F2B), UINT32_C(0x99CF6FFA), UINT32_C(0x54E6E37A), UINT32_C(0xF7C66CA8), UINT32_C(0x1133C4B2), UINT32_C(0x0345866B), UINT32_C(0x6F679B28)}}, {{UINT32_C(0x44E77CDF), UINT32_C(0x0006F7A1), UINT32_C(0x42033333), UINT32_C(0xD8077F9F), UINT32_C(0x21EAF35F), UINT32_C(0x0414ECE5), UINT32_C(0x5623803C), UINT32_C(0x1211576B)}, {UINT32_C(0x140309A7), UINT32_C(0xEDADD215), UINT32_C(0x5EBAE3BB), UINT32_C(0xC349C657), UINT32_C(0x821DE06B), UINT32_C(0xBD40427C), UINT32_C(0x3F5D2F97), UINT32_C(0x8949ACA3)}}, }, { {{UINT32_C(0x022E3D44), UINT32_C(0xAC1F87E6), UINT32_C(0xB39F6B10), UINT32_C(0xDFC17BED), UINT32_C(0x07119C4A), UINT32_C(0xEAAE4168), UINT32_C(0xDBD47D36), UINT32_C(0x8B3B40BC)}, {UINT32_C(0x861B7B59), UINT32_C(0x6683A561), UINT32_C(0x13A6C76D), UINT32_C(0xF9BFFB17), UINT32_C(0xA30A05AC), UINT32_C(0xE4E72EA4), UINT32_C(0xBA0D2AD6), UINT32_C(0x77C219E8)}}, {{UINT32_C(0x66BE6944), UINT32_C(0x5019824E), UINT32_C(0x7B131070), UINT32_C(0x811ACEBE), UINT32_C(0x3BA34677), UINT32_C(0x9730DCF0), UINT32_C(0x7BC9CFC8), UINT32_C(0x5B9C5CF5)}, {UINT32_C(0xB283C8CC), UINT32_C(0x1CBD950F), UINT32_C(0x3973A325), UINT32_C(0xF66DBDDA), UINT32_C(0x6FA60257), UINT32_C(0x4EC5EBC2), UINT32_C(0x36FF26B3), UINT32_C(0x0C01D577)}}, {{UINT32_C(0x7CE2BE74), UINT32_C(0xBB221954), UINT32_C(0x841E6C0C), UINT32_C(0x23E44E0E), UINT32_C(0x77C3824E), UINT32_C(0xE760D33D), UINT32_C(0x7EB3CE34), UINT32_C(0x5B656FBE)}, {UINT32_C(0xC5F3D66E), UINT32_C(0xEC50E509), UINT32_C(0x496EF8BA), UINT32_C(0x5326C2B8), UINT32_C(0x3D4B20D4), UINT32_C(0x3F9485F6), UINT32_C(0x51C21B0E), UINT32_C(0x11B74A85)}}, {{UINT32_C(0x25E30336), UINT32_C(0xC3EAEB04), UINT32_C(0xA6E3637F), UINT32_C(0xA9D6C70F), UINT32_C(0x86F77F68), UINT32_C(0xF818C37E), UINT32_C(0xC60DF35A), UINT32_C(0x786ED3C2)}, {UINT32_C(0xD56D705A), UINT32_C(0xACA70EA0), UINT32_C(0x7BF4EF10), UINT32_C(0xCE61608C), UINT32_C(0x1722C179), UINT32_C(0x49AD1CD8), UINT32_C(0x687F3222), UINT32_C(0x1B84FBE9)}}, {{UINT32_C(0x35EE0BA9), UINT32_C(0x8A0F4BF1), UINT32_C(0x03952A08), UINT32_C(0x42AD2846), UINT32_C(0x3B60B4DD), UINT32_C(0x1E0E1E3B), UINT32_C(0xF5DCAD76), UINT32_C(0x0DC1A947)}, {UINT32_C(0x1F496E03), UINT32_C(0x054BECA4), UINT32_C(0x3AE6E6F6), UINT32_C(0x8F02FDAB), UINT32_C(0x9B71C9F5), UINT32_C(0x8851CFF4), UINT32_C(0xA7441F87), UINT32_C(0x6BD7271C)}}, {{UINT32_C(0x9EB6A2C3), UINT32_C(0xB019E346), UINT32_C(0x931E7550), UINT32_C(0x2B719034), UINT32_C(0x40698F1F), UINT32_C(0x2B2CBEBD), UINT32_C(0x4F1FC587), UINT32_C(0x375DB591)}, {UINT32_C(0x676A79A4), UINT32_C(0x09843166), UINT32_C(0xB416D657), UINT32_C(0x91848967), UINT32_C(0x9FED6B27), UINT32_C(0xB49EA721), UINT32_C(0xD080C8AA), UINT32_C(0x1FAC5650)}}, {{UINT32_C(0x58C4C2AA), UINT32_C(0x205CD588), UINT32_C(0x17F572EE), UINT32_C(0xBEEE26F8), UINT32_C(0x4CB4DE3A), UINT32_C(0xE744AB67), UINT32_C(0xCBE989BD), UINT32_C(0x37E34E18)}, {UINT32_C(0x767D31B5), UINT32_C(0x95D9118B), UINT32_C(0x83E7C03E), UINT32_C(0x9A34DBEC), UINT32_C(0xB8F70DD3), UINT32_C(0xCAFDBD1A), UINT32_C(0x3909BB51), UINT32_C(0x1E68A681)}}, {{UINT32_C(0x9FD96ABA), UINT32_C(0xFE0A5DFF), UINT32_C(0xD99B68DE), UINT32_C(0xBBFB1FDF), UINT32_C(0xE3F522BE), UINT32_C(0x5E232A4F), UINT32_C(0xA6428D33), UINT32_C(0x768C2C54)}, {UINT32_C(0xDBF1A575), UINT32_C(0xE9CFEDF9), UINT32_C(0x4B83F9AB), UINT32_C(0x841721F2), UINT32_C(0x80A85361), UINT32_C(0xFAD9650A), UINT32_C(0x04979759), UINT32_C(0x31589211)}}, {{UINT32_C(0xEFBF2099), UINT32_C(0x1CF9F4B8), UINT32_C(0xF571408B), UINT32_C(0x63D5499B), UINT32_C(0xEC3E74A6), UINT32_C(0x89C119FC), UINT32_C(0x698E4DCD), UINT32_C(0x0525DDDF)}, {UINT32_C(0x7333A38C), UINT32_C(0x43FCDDE4), UINT32_C(0x80A912DE), UINT32_C(0x2150EAD4), UINT32_C(0x0A19CC55), UINT32_C(0x4B3BD223), UINT32_C(0x238AC64C), UINT32_C(0x3553EB4E)}}, {{UINT32_C(0xFEC2371F), UINT32_C(0x3A259F52), UINT32_C(0x44863D3E), UINT32_C(0x8B03C505), UINT32_C(0x86BB6522), UINT32_C(0x1053E2D6), UINT32_C(0xF7086CBE), UINT32_C(0x400CE699)}, {UINT32_C(0x03ED78DE), UINT32_C(0x695B1EA0), UINT32_C(0x16500E1B), UINT32_C(0x00AE6D09), UINT32_C(0x14B01815), UINT32_C(0x9F29B089), UINT32_C(0xC218D892), UINT32_C(0x269692B4)}}, {{UINT32_C(0xF0D44E79), UINT32_C(0x8660280D), UINT32_C(0x37C0F38F), UINT32_C(0x69D29685), UINT32_C(0xB9E24AD8), UINT32_C(0x664B8146), UINT32_C(0x1E695452), UINT32_C(0x277CB4DD)}, {UINT32_C(0xDFBF05EB), UINT32_C(0xB1A02D4E), UINT32_C(0x4A1426C7), UINT32_C(0x3B349308), UINT32_C(0x22204FE7), UINT32_C(0x13B79612), UINT32_C(0xBCB5CD9F), UINT32_C(0x04F80867)}}, {{UINT32_C(0xE0852CBC), UINT32_C(0x37BDBCAE), UINT32_C(0xBE22764C), UINT32_C(0x2A6D7A23), UINT32_C(0x25AFD9FF), UINT32_C(0x4E0D43AC), UINT32_C(0xD16DD9EB), UINT32_C(0x1F6C9E14)}, {UINT32_C(0xB4B0F47A), UINT32_C(0xE37E3AB3), UINT32_C(0x6C476C3A), UINT32_C(0x09E046FB), UINT32_C(0xB75FA2DC), UINT32_C(0xB8F649D9), UINT32_C(0xFAB1AC41), UINT32_C(0x7962A8C4)}}, {{UINT32_C(0xF6A1314A), UINT32_C(0x00E41470), UINT32_C(0xE4388464), UINT32_C(0x176380C3), UINT32_C(0x9B8A2B4D), UINT32_C(0xDB3405CD), UINT32_C(0x7DE02ABC), UINT32_C(0x6299A1A6)}, {UINT32_C(0x7BBE7BFA), UINT32_C(0x9F6B9DE7), UINT32_C(0x9D3098DD), UINT32_C(0x59F16F54), UINT32_C(0x3B5767FE), UINT32_C(0xFEC29C8D), UINT32_C(0x64955759), UINT32_C(0x67711BC0)}}, {{UINT32_C(0xB1B07B5D), UINT32_C(0x34444EA3), UINT32_C(0x91FA2B4A), UINT32_C(0xB1D973B4), UINT32_C(0x83403A0E), UINT32_C(0xEBEBEFB1), UINT32_C(0x8E8A8EC6), UINT32_C(0x56D52098)}, {UINT32_C(0xA7E82D55), UINT32_C(0x11C93529), UINT32_C(0xD525C399), UINT32_C(0x9230AE03), UINT32_C(0x8DB46C82), UINT32_C(0x74E1CBB2), UINT32_C(0x40BE5E15), UINT32_C(0x4C3383CC)}}, {{UINT32_C(0xCDAD72F3), UINT32_C(0x33A52E73), UINT32_C(0xB9E77759), UINT32_C(0x1D2CCA33), UINT32_C(0x549406F5), UINT32_C(0x26717716), UINT32_C(0x5B3DB3E8), UINT32_C(0x70DED57F)}, {UINT32_C(0x43C85A67), UINT32_C(0xBA38F813), UINT32_C(0x35422BB3), UINT32_C(0x956F2DD7), UINT32_C(0x07486F18), UINT32_C(0x52D9FA99), UINT32_C(0x75D1D2C4), UINT32_C(0x655791BF)}}, {{UINT32_C(0x1FC9E0B3), UINT32_C(0xF434A960), UINT32_C(0xBEDE92AD), UINT32_C(0x42A7B891), UINT32_C(0xA55A8009), UINT32_C(0x05A182D8), UINT32_C(0x38531612), UINT32_C(0x3404E08D)}, {UINT32_C(0xF07D76E3), UINT32_C(0x2B5B2766), UINT32_C(0x1D77B90C), UINT32_C(0x94B1A98D), UINT32_C(0x4B18BB9F), UINT32_C(0xA86C0EC8), UINT32_C(0x526A81E3), UINT32_C(0x6532770F)}}, }, { {{UINT32_C(0x61CFE04A), UINT32_C(0x4429A4E8), UINT32_C(0x2C9CA012), UINT32_C(0xEE867386), UINT32_C(0xC32D1969), UINT32_C(0x237A3040), UINT32_C(0x0AE2DFAE), UINT32_C(0x400AD599)}, {UINT32_C(0x213C0A18), UINT32_C(0x1603D10A), UINT32_C(0x2B1E2A57), UINT32_C(0x6EB8042D), UINT32_C(0xC7CAF556), UINT32_C(0x4C9C1696), UINT32_C(0xE0C1A5A3), UINT32_C(0x79BE04A7)}}, {{UINT32_C(0x3FCB8B14), UINT32_C(0x161781E3), UINT32_C(0xB1384C3C), UINT32_C(0x1383E3B8), UINT32_C(0xB566626C), UINT32_C(0x5129EA19), UINT32_C(0x551DE02A), UINT32_C(0x8A1F86E4)}, {UINT32_C(0xAEDBE04C), UINT32_C(0x9C648CCE), UINT32_C(0xFB200132), UINT32_C(0x0D4278AC), UINT32_C(0xC1E2D4A3), UINT32_C(0x466D452A), UINT32_C(0xB21B6E38), UINT32_C(0x832B0E6E)}}, {{UINT32_C(0xED1D76C7), UINT32_C(0x20101D7C), UINT32_C(0xC110D85E), UINT32_C(0xC3282661), UINT32_C(0xFFCA2DD7), UINT32_C(0xB8026CE4), UINT32_C(0x8BA48211), UINT32_C(0x73B4EBA5)}, {UINT32_C(0xD8554E2C), UINT32_C(0xAB94FE21), UINT32_C(0x81B2A181), UINT32_C(0x319E2FD7), UINT32_C(0x37E8D3E2), UINT32_C(0x2C824DC5), UINT32_C(0x09FCA0AB), UINT32_C(0x97CD457A)}}, {{UINT32_C(0xC50116CB), UINT32_C(0x8E4B5FBD), UINT32_C(0xCA631A93), UINT32_C(0x3D20CECE), UINT32_C(0x545575D8), UINT32_C(0x5F80606C), UINT32_C(0xF91C7908), UINT32_C(0x45ED55DE)}, {UINT32_C(0x7CC1083C), UINT32_C(0x91870A92), UINT32_C(0xD360FF5C), UINT32_C(0xA3828E06), UINT32_C(0x84003D42), UINT32_C(0xFC9DFCDC), UINT32_C(0xFAC4667F), UINT32_C(0x0733C887)}}, {{UINT32_C(0xCC2FC31B), UINT32_C(0x6F1F771A), UINT32_C(0x902E8176), UINT32_C(0xDA9351A1), UINT32_C(0xCE3FF045), UINT32_C(0xFB9395AF), UINT32_C(0x13820DAB), UINT32_C(0x17C28CA2)}, {UINT32_C(0xA684E6FA), UINT32_C(0xA1F596BC), UINT32_C(0xDAD3995A), UINT32_C(0x89228CC7), UINT32_C(0xC02E458B), UINT32_C(0x5DBFD421), UINT32_C(0xA2122AFE), UINT32_C(0x58C25045)}}, {{UINT32_C(0x018EADB0), UINT32_C(0x2906450F), UINT32_C(0x9030C84E), UINT32_C(0x88A7A236), UINT32_C(0x33308084), UINT32_C(0x492BA7A3), UINT32_C(0x5605F371), UINT32_C(0x321388B9)}, {UINT32_C(0x626AE19A), UINT32_C(0x5F934C94), UINT32_C(0x01C7CCD9), UINT32_C(0xE2BD6C67), UINT32_C(0xEC0BBD52), UINT32_C(0xB07757B1), UINT32_C(0xF9EDD2AC), UINT32_C(0x1E980338)}}, {{UINT32_C(0x8831457C), UINT32_C(0x5A537074), UINT32_C(0x47E7B9A9), UINT32_C(0x0E0E22FB), UINT32_C(0xA225A259), UINT32_C(0x7BE70594), UINT32_C(0x30946816), UINT32_C(0x433DB055)}, {UINT32_C(0xE2F2C3CB), UINT32_C(0x852EA9F9), UINT32_C(0x2D243848), UINT32_C(0xDC4E8E3A), UINT32_C(0x1E887770), UINT32_C(0x10F34AB8), UINT32_C(0xC89FC71B), UINT32_C(0x29795D2C)}}, {{UINT32_C(0xCFEC2C6F), UINT32_C(0xE046B04B), UINT32_C(0x2CA8256E), UINT32_C(0xA1D3B5A0), UINT32_C(0xE87F767F), UINT32_C(0x93F7FDFA), UINT32_C(0x35FA3837), UINT32_C(0x2DF5693E)}, {UINT32_C(0x97884587), UINT32_C(0x71D9638C), UINT32_C(0x39E115EC), UINT32_C(0x175EA91F), UINT32_C(0xF41A27FC), UINT32_C(0x14E16C31), UINT32_C(0xEB2F5913), UINT32_C(0x8B2682EA)}}, {{UINT32_C(0x798C7F28), UINT32_C(0x2BCC6853), UINT32_C(0xDD7D3615), UINT32_C(0x2F985A59), UINT32_C(0x41D2257A), UINT32_C(0xA66519E1), UINT32_C(0x021F719B), UINT32_C(0x18731D74)}, {UINT32_C(0x360E9C20), UINT32_C(0x7210472C), UINT32_C(0x329A9B35), UINT32_C(0x4FB48411), UINT32_C(0x87D62CA5), UINT32_C(0xB33B6CB5), UINT32_C(0xFD0D7703), UINT32_C(0x86226D9E)}}, {{UINT32_C(0xF67CB77C), UINT32_C(0xDD133F8B), UINT32_C(0xF6ABEE80), UINT32_C(0x381E4D62), UINT32_C(0x7DF85AE5), UINT32_C(0x3236F005), UINT32_C(0x4610BB0E), UINT32_C(0x88EBB386)}, {UINT32_C(0x8DB908D8), UINT32_C(0x895AA539), UINT32_C(0x104C4633), UINT32_C(0x848142E6), UINT32_C(0xB8012B2E), UINT32_C(0x467EE770), UINT32_C(0x1B9210EE), UINT32_C(0x193CBAED)}}, {{UINT32_C(0xC1F44FC1), UINT32_C(0x737CD32B), UINT32_C(0x522B6209), UINT32_C(0xCDF82B1C), UINT32_C(0xE0017F2A), UINT32_C(0x08F4BB70), UINT32_C(0x64738F26), UINT32_C(0x1565BCEF)}, {UINT32_C(0x684DCF67), UINT32_C(0x0D2910B9), UINT32_C(0xC6F3EB81), UINT32_C(0x4ED1734B), UINT32_C(0xDA1D6BC8), UINT32_C(0xCBEA79B6), UINT32_C(0xEE6A41D6), UINT32_C(0x0470CE36)}}, {{UINT32_C(0xBA05AF3C), UINT32_C(0xECFD5C66), UINT32_C(0xEB9BFAA8), UINT32_C(0x421D5540), UINT32_C(0x526CFF85), UINT32_C(0xFC0E5AF2), UINT32_C(0x53DC49A6), UINT32_C(0x7E17F1E6)}, {UINT32_C(0x1FAEB0A2), UINT32_C(0x69BB1DFB), UINT32_C(0xB3785ED4), UINT32_C(0xDC95661A), UINT32_C(0x676D7CD0), UINT32_C(0x1F1D7395), UINT32_C(0x89C6412F), UINT32_C(0x2C16BB96)}}, {{UINT32_C(0xEE414CA6), UINT32_C(0x2335F20E), UINT32_C(0xFEF5E042), UINT32_C(0x56E0DDB2), UINT32_C(0xD9DE2966), UINT32_C(0x942D4E35), UINT32_C(0xCF63D583), UINT32_C(0x80E92B8C)}, {UINT32_C(0x5D492C76), UINT32_C(0x158BE1B6), UINT32_C(0xC4F822D9), UINT32_C(0xFF096960), UINT32_C(0x5AF79379), UINT32_C(0xC00FC730), UINT32_C(0x50D34E12), UINT32_C(0x07C49B03)}}, {{UINT32_C(0xC34836C8), UINT32_C(0x64678B2E), UINT32_C(0x615FF066), UINT32_C(0xCC280DCB), UINT32_C(0x9131EC98), UINT32_C(0x86C3C747), UINT32_C(0x2D151FAD), UINT32_C(0x35B008CC)}, {UINT32_C(0xF8133FDC), UINT32_C(0x22C18852), UINT32_C(0x2FE8809D), UINT32_C(0x183BE4DC), UINT32_C(0xCF98D56D), UINT32_C(0x86589814), UINT32_C(0x2F6E0DE4), UINT32_C(0x52D8074D)}}, {{UINT32_C(0xC9274AA6), UINT32_C(0x33FF9F41), UINT32_C(0xCA854AF1), UINT32_C(0xAC30ACB4), UINT32_C(0xFBC994B7), UINT32_C(0x87A7BE53), UINT32_C(0xDBCD717B), UINT32_C(0x6E7E8B2A)}, {UINT32_C(0xCD494AB6), UINT32_C(0x3065A732), UINT32_C(0x60FD7F57), UINT32_C(0x6F977B87), UINT32_C(0xB74BAD54), UINT32_C(0x4C216EB4), UINT32_C(0xF6061F7A), UINT32_C(0x674F00F5)}}, {{UINT32_C(0x3164AFBB), UINT32_C(0xA8C22481), UINT32_C(0x72A7AC55), UINT32_C(0x4C9E2F1D), UINT32_C(0x79DEFE94), UINT32_C(0xE3DAC3E3), UINT32_C(0xBB9D953F), UINT32_C(0x193A1E0B)}, {UINT32_C(0x7E0957EE), UINT32_C(0x8852020C), UINT32_C(0xB62F8EF7), UINT32_C(0xF7FD181E), UINT32_C(0xE26B8860), UINT32_C(0x0DE7EDDE), UINT32_C(0xFD1B00DE), UINT32_C(0x53A05575)}}, }, { {{UINT32_C(0x63E0C8FC), UINT32_C(0xE5D63E1B), UINT32_C(0xC684016A), UINT32_C(0x6849B530), UINT32_C(0x009318AD), UINT32_C(0x4E89CB43), UINT32_C(0xEF571911), UINT32_C(0x1CDC5918)}, {UINT32_C(0xF389EAF3), UINT32_C(0xA6596C03), UINT32_C(0xE88975F9), UINT32_C(0x9282C1B3), UINT32_C(0x0D53D3F2), UINT32_C(0xD07A2AEF), UINT32_C(0x2B3B602C), UINT32_C(0x3DA515D5)}}, {{UINT32_C(0x8A5436EA), UINT32_C(0xE4285781), UINT32_C(0x36D65626), UINT32_C(0x047E3056), UINT32_C(0xE16489A0), UINT32_C(0x0016B568), UINT32_C(0x75A0209C), UINT32_C(0x44603196)}, {UINT32_C(0xBCC19754), UINT32_C(0x2BE99A51), UINT32_C(0x5ACFCDEF), UINT32_C(0xE02EAFD0), UINT32_C(0xAECACABB), UINT32_C(0xB0A1E300), UINT32_C(0xAC1860D9), UINT32_C(0x0F39CBDE)}}, {{UINT32_C(0x2099F08E), UINT32_C(0x50DA5372), UINT32_C(0xCA4817B1), UINT32_C(0xAA6AAAD1), UINT32_C(0x57D73192), UINT32_C(0xA4DDC5FF), UINT32_C(0x7682D453), UINT32_C(0x046043AC)}, {UINT32_C(0x28CF3F48), UINT32_C(0xC8EB1788), UINT32_C(0xDCA184D4), UINT32_C(0x3967A02F), UINT32_C(0x86221941), UINT32_C(0x0CE68B79), UINT32_C(0xFD3A197A), UINT32_C(0x27BDCA48)}}, {{UINT32_C(0x563D7A91), UINT32_C(0xD774E33C), UINT32_C(0x07AE1C92), UINT32_C(0x1C309DAE), UINT32_C(0x57DBE6A8), UINT32_C(0xDABA89B4), UINT32_C(0xE5820FA4), UINT32_C(0x90C62517)}, {UINT32_C(0x11371109), UINT32_C(0x23C64605), UINT32_C(0x15605666), UINT32_C(0x1176AE7E), UINT32_C(0xDF040DCB), UINT32_C(0xD71E9755), UINT32_C(0x62ED515C), UINT32_C(0x5312A5B3)}}, {{UINT32_C(0x7A5FB9E0), UINT32_C(0xB7AA3A11), UINT32_C(0x18E2CB32), UINT32_C(0xA769BC72), UINT32_C(0x6B73E050), UINT32_C(0x9D551B9B), UINT32_C(0xDB067CBC), UINT32_C(0x0CE51DF0)}, {UINT32_C(0x4A0E06BE), UINT32_C(0x00BF90D5), UINT32_C(0x7EE820E7), UINT32_C(0xFEC6E7B3), UINT32_C(0x3334937A), UINT32_C(0xDFBAC083), UINT32_C(0xCE14CF46), UINT32_C(0x46884935)}}, {{UINT32_C(0x902EF3A9), UINT32_C(0xC3F31EAF), UINT32_C(0x5CCDF002), UINT32_C(0xF3B6E6FA), UINT32_C(0x88CDDE0F), UINT32_C(0x5A9B5321), UINT32_C(0xE8691FED), UINT32_C(0x00D99E43)}, {UINT32_C(0xCFE02C8B), UINT32_C(0x8E786F52), UINT32_C(0x4DD36F8E), UINT32_C(0x587AA537), UINT32_C(0x425CC228), UINT32_C(0xBCA91CAC), UINT32_C(0xBFA9C36B), UINT32_C(0x80AA8AA9)}}, {{UINT32_C(0x9B20505A), UINT32_C(0xAD4A2AD0), UINT32_C(0x16739066), UINT32_C(0x6D708029), UINT32_C(0x89F73B52), UINT32_C(0x729001F3), UINT32_C(0x8073A428), UINT32_C(0x77480347)}, {UINT32_C(0xE84DB3B4), UINT32_C(0x1AB38F07), UINT32_C(0xA6655769), UINT32_C(0xE643D756), UINT32_C(0x46C19856), UINT32_C(0x5631359B), UINT32_C(0x01C3DCD1), UINT32_C(0x82530A32)}}, {{UINT32_C(0x2DDDB968), UINT32_C(0x9250EC26), UINT32_C(0x8D82A03E), UINT32_C(0x63D99CBF), UINT32_C(0x41349B60), UINT32_C(0x4FBFE784), UINT32_C(0xA15BF2B7), UINT32_C(0x6977DD07)}, {UINT32_C(0x68513C32), UINT32_C(0x771917C6), UINT32_C(0x8F0064F7), UINT32_C(0x02603518), UINT32_C(0x51D78637), UINT32_C(0x45A57429), UINT32_C(0x87293790), UINT32_C(0x56BF57CC)}}, {{UINT32_C(0x032E6426), UINT32_C(0xBAC94E24), UINT32_C(0xC2531B26), UINT32_C(0x7D54AE34), UINT32_C(0xCD688082), UINT32_C(0x4D6EF608), UINT32_C(0xF5AA4BEE), UINT32_C(0x736E7ACF)}, {UINT32_C(0x6AFB84E2), UINT32_C(0x41D5BF6C), UINT32_C(0x6E976E09), UINT32_C(0x40E12DA5), UINT32_C(0x2235F7B9), UINT32_C(0xCBF32FCB), UINT32_C(0xA21BC0E0), UINT32_C(0x285DDF46)}}, {{UINT32_C(0xCE751632), UINT32_C(0x66C6A76E), UINT32_C(0x32A61A1D), UINT32_C(0xBD457D0E), UINT32_C(0x78191C57), UINT32_C(0xFA12A7C8), UINT32_C(0x06611B5E), UINT32_C(0x030ED98B)}, {UINT32_C(0xF4972FFD), UINT32_C(0x199F7756), UINT32_C(0x9C8AAB09), UINT32_C(0x298D98E6), UINT32_C(0xC5B02158), UINT32_C(0x2186054C), UINT32_C(0xB9B1147A), UINT32_C(0x0736CE4C)}}, {{UINT32_C(0x19BFA57D), UINT32_C(0x33E4A4CA), UINT32_C(0xAA70C35D), UINT32_C(0xF02F6D32), UINT32_C(0x3CC082FD), UINT32_C(0x9EA10B63), UINT32_C(0xD00E82A8), UINT32_C(0x86104E8E)}, {UINT32_C(0x87797E25), UINT32_C(0xACBA5E73), UINT32_C(0xEB85A796), UINT32_C(0x24DD98A8), UINT32_C(0xC58AC480), UINT32_C(0x02748827), UINT32_C(0x6A932D80), UINT32_C(0x5B4480C7)}}, {{UINT32_C(0x1992B174), UINT32_C(0xF9E210FB), UINT32_C(0xBE22636E), UINT32_C(0x3CFA6EF1), UINT32_C(0x3BDFA2BD), UINT32_C(0xA46F202B), UINT32_C(0x441B96D2), UINT32_C(0x8C83B3DA)}, {UINT32_C(0x8AA39AB4), UINT32_C(0x3BB2ED8B), UINT32_C(0x9CE53FB2), UINT32_C(0x4DB63B23), UINT32_C(0x46DC2104), UINT32_C(0x24AC8A98), UINT32_C(0x68E20D1B), UINT32_C(0x997BC4A7)}}, {{UINT32_C(0xD1C0D629), UINT32_C(0x4CDF8757), UINT32_C(0xA64B6058), UINT32_C(0xBA155719), UINT32_C(0xBE3FB0B1), UINT32_C(0x82FD0DA3), UINT32_C(0x03E34CB1), UINT32_C(0x12F50694)}, {UINT32_C(0x02E7DFEB), UINT32_C(0x8993EE38), UINT32_C(0x3D7A758E), UINT32_C(0x2FC240C6), UINT32_C(0xAFF7CC7B), UINT32_C(0x75CB6F62), UINT32_C(0x71B02A5B), UINT32_C(0x2D73F74D)}}, {{UINT32_C(0x550ADA69), UINT32_C(0x0B7B920A), UINT32_C(0xD2F1D5C2), UINT32_C(0x87D29F08), UINT32_C(0xEEA99A38), UINT32_C(0x6E36EF9C), UINT32_C(0x79D7626A), UINT32_C(0x624874C1)}, {UINT32_C(0x17F026E0), UINT32_C(0x9FCA1B2E), UINT32_C(0xA3A79C2E), UINT32_C(0xBDBE18E5), UINT32_C(0x6E1B0C6D), UINT32_C(0x1506DE6A), UINT32_C(0xAD2A2C5F), UINT32_C(0x860CCD71)}}, {{UINT32_C(0x28715EF9), UINT32_C(0x00A15CB0), UINT32_C(0xB1C0ED6D), UINT32_C(0x71F337D8), UINT32_C(0xF998251E), UINT32_C(0xBD7E6892), UINT32_C(0x08E0A4E9), UINT32_C(0x4C5AB311)}, {UINT32_C(0x567342FB), UINT32_C(0xDFD51293), UINT32_C(0x5AE3193B), UINT32_C(0xF202FCD1), UINT32_C(0xAF59A5A2), UINT32_C(0xE317C933), UINT32_C(0x5055DE2A), UINT32_C(0x300FE083)}}, {{UINT32_C(0xC58E7AE9), UINT32_C(0x279A071A), UINT32_C(0x4C718A8B), UINT32_C(0xCED1F2F4), UINT32_C(0x5FE7F6E5), UINT32_C(0x3A8C0D1A), UINT32_C(0xBB40DA93), UINT32_C(0x789C9B04)}, {UINT32_C(0xBF2A0B9B), UINT32_C(0xBB7EA922), UINT32_C(0x3A484413), UINT32_C(0x5DD7A04A), UINT32_C(0xC5912F93), UINT32_C(0x3E1F49FB), UINT32_C(0x61ECAB05), UINT32_C(0x4D8C07A5)}}, }, { {{UINT32_C(0x9706D4CF), UINT32_C(0x7D351007), UINT32_C(0xB9BABB1F), UINT32_C(0x3E2B3D2E), UINT32_C(0xA2E423EA), UINT32_C(0xC73745BF), UINT32_C(0xF59601A0), UINT32_C(0x0AB3940A)}, {UINT32_C(0x2A895C4F), UINT32_C(0x8881507A), UINT32_C(0x68652263), UINT32_C(0xF27F6F40), UINT32_C(0x88A416BE), UINT32_C(0xCFD91814), UINT32_C(0x1B4F51F6), UINT32_C(0x13459BC3)}}, {{UINT32_C(0x01C7C38A), UINT32_C(0x6D830E0C), UINT32_C(0xE27DA48A), UINT32_C(0xBA912BD4), UINT32_C(0x4AB8B5A6), UINT32_C(0x3828F433), UINT32_C(0xE35E88DA), UINT32_C(0x3F858E6C)}, {UINT32_C(0x6E1C033C), UINT32_C(0x137F2E3A), UINT32_C(0x7E670398), UINT32_C(0xFC7C8953), UINT32_C(0xF5C3D4DB), UINT32_C(0x6FF761CE), UINT32_C(0xEED1029B), UINT32_C(0x53A02906)}}, {{UINT32_C(0x56779C20), UINT32_C(0x5C597BA6), UINT32_C(0x43A87346), UINT32_C(0x366688CC), UINT32_C(0xA55ACF91), UINT32_C(0x19F6DA4A), UINT32_C(0x182DEC58), UINT32_C(0x280ED592)}, {UINT32_C(0xA1D3EBDD), UINT32_C(0x0A1F3A7A), UINT32_C(0x0C9F474A), UINT32_C(0xD92B6078), UINT32_C(0x19AE00DD), UINT32_C(0x38D0335E), UINT32_C(0xA97F33F7), UINT32_C(0x094A5772)}}, {{UINT32_C(0x312D2694), UINT32_C(0x026A9029), UINT32_C(0xAB5B34B8), UINT32_C(0x95408516), UINT32_C(0xDED270EA), UINT32_C(0x9FFA9AB1), UINT32_C(0x493E5935), UINT32_C(0x1F9DDC52)}, {UINT32_C(0x17244394), UINT32_C(0xAC7F94C1), UINT32_C(0x0F28C9DF), UINT32_C(0x18FC29C4), UINT32_C(0xBD817BD9), UINT32_C(0xEDE29238), UINT32_C(0x8E2A7E40), UINT32_C(0x20DBF9AF)}}, {{UINT32_C(0x7648CA5C), UINT32_C(0x009365D9), UINT32_C(0x2BF27488), UINT32_C(0xB168191E), UINT32_C(0xE3B91112), UINT32_C(0x2481BFAA), UINT32_C(0x3D6DB830), UINT32_C(0x744C505B)}, {UINT32_C(0x3C464704), UINT32_C(0x21426D8F), UINT32_C(0xDAF85A61), UINT32_C(0x283F59EF), UINT32_C(0xF2716102), UINT32_C(0x278B5F8E), UINT32_C(0x0FE7E7EC), UINT32_C(0x95B80D82)}}, {{UINT32_C(0xF327664D), UINT32_C(0xD15ADA08), UINT32_C(0xFE904AF8), UINT32_C(0xF26E3232), UINT32_C(0xF99471C6), UINT32_C(0x2763DBA6), UINT32_C(0x15F30827), UINT32_C(0x4BC97139)}, {UINT32_C(0x5F154BF9), UINT32_C(0x8523812E), UINT32_C(0xDE17F8F9), UINT32_C(0x0839059F), UINT32_C(0xBC16678D), UINT32_C(0xEA151382), UINT32_C(0x7890C4EF), UINT32_C(0x68D01E62)}}, {{UINT32_C(0x9487556B), UINT32_C(0x37FAC9FA), UINT32_C(0xFB4DC83D), UINT32_C(0xB4DF5C53), UINT32_C(0x92969151), UINT32_C(0x1EF42D8C), UINT32_C(0x8B0ED349), UINT32_C(0x6C0A9D18)}, {UINT32_C(0x946F31ED), UINT32_C(0x63E91049), UINT32_C(0x653F600B), UINT32_C(0x51E91DC6), UINT32_C(0x53A29196), UINT32_C(0xD7A582B1), UINT32_C(0x31E1D843), UINT32_C(0x0452F4AD)}}, {{UINT32_C(0x0DE8E344), UINT32_C(0x1224169D), UINT32_C(0xF329D30F), UINT32_C(0x0F4AB4E7), UINT32_C(0xB525B6A4), UINT32_C(0x12662965), UINT32_C(0x255F14B8), UINT32_C(0x3142B612)}, {UINT32_C(0xBBF468A1), UINT32_C(0xEF6148B9), UINT32_C(0x144F8DFF), UINT32_C(0x3FC413B4), UINT32_C(0x9BF55B34), UINT32_C(0xA453D075), UINT32_C(0x86EBA319), UINT32_C(0x857EC763)}}, {{UINT32_C(0xC16C1002), UINT32_C(0x7FC22E26), UINT32_C(0xB0B186C3), UINT32_C(0x2E34975E), UINT32_C(0x2FC79F85), UINT32_C(0xE11E3642), UINT32_C(0x9F981B5F), UINT32_C(0x30FE5C0E)}, {UINT32_C(0x31816247), UINT32_C(0x73BD0FA6), UINT32_C(0x6906AF0A), UINT32_C(0x40FE1661), UINT32_C(0x787BC7EE), UINT32_C(0x8D7109A3), UINT32_C(0x6FB9A590), UINT32_C(0x29452054)}}, {{UINT32_C(0x4DFAAF93), UINT32_C(0x24654B9B), UINT32_C(0x9A450D29), UINT32_C(0x91CDEA8B), UINT32_C(0xE4874748), UINT32_C(0xEE55420B), UINT32_C(0x6D03064C), UINT32_C(0x01FAC14C)}, {UINT32_C(0xD93BD5BE), UINT32_C(0x8A4EBDE2), UINT32_C(0x49EF18A9), UINT32_C(0xCB2DF307), UINT32_C(0x1A7B7F36), UINT32_C(0x36E6AC64), UINT32_C(0x4AC1CB8D), UINT32_C(0x30195423)}}, {{UINT32_C(0x34F5B3FF), UINT32_C(0xD9970B1E), UINT32_C(0x587A9C5C), UINT32_C(0x3CFEFC50), UINT32_C(0x7CCE631E), UINT32_C(0x8EC1C5DE), UINT32_C(0x52465AB8), UINT32_C(0x92C93E2B)}, {UINT32_C(0x257017CA), UINT32_C(0x0104DF30), UINT32_C(0x8D8DB4CE), UINT32_C(0xF4E5E779), UINT32_C(0xFDC267F0), UINT32_C(0xE12A39DD), UINT32_C(0x27C73FDA), UINT32_C(0x683DEAFE)}}, {{UINT32_C(0xBBC70623), UINT32_C(0xD0840E81), UINT32_C(0x4D23568E), UINT32_C(0x03A93C16), UINT32_C(0x11A71BFF), UINT32_C(0xC52FF3D6), UINT32_C(0x0875248E), UINT32_C(0x03C11FCE)}, {UINT32_C(0x6C4AE445), UINT32_C(0xBC6F184B), UINT32_C(0x7698EE98), UINT32_C(0xF52CC71F), UINT32_C(0xEEA25223), UINT32_C(0x4663193E), UINT32_C(0x031C68DC), UINT32_C(0x86CD1AB3)}}, {{UINT32_C(0x21E04C02), UINT32_C(0x221C94EB), UINT32_C(0x7B980F70), UINT32_C(0xE96BB7B3), UINT32_C(0x24DC2BD1), UINT32_C(0x60A72897), UINT32_C(0x5621F475), UINT32_C(0x8C8E019F)}, {UINT32_C(0x5CFA457A), UINT32_C(0xAE47B2F7), UINT32_C(0xF395C533), UINT32_C(0x31B2F9E1), UINT32_C(0x82E75849), UINT32_C(0x7EEB5DDC), UINT32_C(0x2A241E52), UINT32_C(0x4863A6A3)}}, {{UINT32_C(0x914976EF), UINT32_C(0x806AC7F4), UINT32_C(0xCA42B875), UINT32_C(0x5019261E), UINT32_C(0x6EF2D82F), UINT32_C(0x44F5C03D), UINT32_C(0x690F2ACA), UINT32_C(0x24959F00)}, {UINT32_C(0x81F0BBB6), UINT32_C(0x4BDE2115), UINT32_C(0x1F701A2D), UINT32_C(0x01EB2C00), UINT32_C(0x274FB05C), UINT32_C(0x039F8910), UINT32_C(0xC625EBCD), UINT32_C(0x57068F24)}}, {{UINT32_C(0x67FF2575), UINT32_C(0xB21B8C93), UINT32_C(0x0C60B449), UINT32_C(0xC7826C60), UINT32_C(0xA98671BB), UINT32_C(0xD4D69A9F), UINT32_C(0xF5A2AB0C), UINT32_C(0x95249276)}, {UINT32_C(0x2D1976DA), UINT32_C(0x8F7007F0), UINT32_C(0xC011D54C), UINT32_C(0x846F2A92), UINT32_C(0xFA2076B1), UINT32_C(0xFDBF81DF), UINT32_C(0x5583B46C), UINT32_C(0x3349224F)}}, {{UINT32_C(0x7C854B4A), UINT32_C(0x62496746), UINT32_C(0x798B1395), UINT32_C(0xF92BAE1D), UINT32_C(0xD2F65638), UINT32_C(0x2EBE18E3), UINT32_C(0x8A068F49), UINT32_C(0x472FF6E5)}, {UINT32_C(0xDA2030C2), UINT32_C(0x64BB0F33), UINT32_C(0x66F6C000), UINT32_C(0x72C0D0C9), UINT32_C(0x3194615E), UINT32_C(0xEA837EE5), UINT32_C(0xFA9A7903), UINT32_C(0x1B7B4849)}}, }, { {{UINT32_C(0xCF9A0727), UINT32_C(0x27AB780C), UINT32_C(0x9D7486CB), UINT32_C(0xD457A7BC), UINT32_C(0xFE9F1A59), UINT32_C(0xFC57C335), UINT32_C(0xD1D9F161), UINT32_C(0x269D8959)}, {UINT32_C(0xB81605D5), UINT32_C(0x06A32331), UINT32_C(0x6F050BE0), UINT32_C(0x23696353), UINT32_C(0x413E1C0D), UINT32_C(0xF9350879), UINT32_C(0x5761A8DF), UINT32_C(0x17019548)}}, {{UINT32_C(0x6765C6A2), UINT32_C(0x583D3D3F), UINT32_C(0xBE9DF3AF), UINT32_C(0x68BBA6F9), UINT32_C(0x85358B53), UINT32_C(0x7011E594), UINT32_C(0x53A08874), UINT32_C(0x3B2142E3)}, {UINT32_C(0x6F5C8641), UINT32_C(0x4AB6137E), UINT32_C(0x4FE9BCEB), UINT32_C(0x4955890E), UINT32_C(0x4D14DA01), UINT32_C(0xE2F732BA), UINT32_C(0xBEBD63D4), UINT32_C(0x8CB285FC)}}, {{UINT32_C(0x6C74A0AA), UINT32_C(0x5099551B), UINT32_C(0xBC2C8A61), UINT32_C(0xF04EB8F8), UINT32_C(0x85983435), UINT32_C(0xE169F492), UINT32_C(0x5B808C9E), UINT32_C(0x764062A1)}, {UINT32_C(0x65B994FB), UINT32_C(0x8C59A43F), UINT32_C(0x6068E685), UINT32_C(0x2FB148B7), UINT32_C(0x54108A9F), UINT32_C(0x899D4FC5), UINT32_C(0x5B4D40FE), UINT32_C(0x0469EA3E)}}, {{UINT32_C(0x62A76AA8), UINT32_C(0x15B613EA), UINT32_C(0x2FE2F179), UINT32_C(0x7E8E7D56), UINT32_C(0xBE98EDC2), UINT32_C(0x53160F65), UINT32_C(0x9810DC27), UINT32_C(0x258DA04E)}, {UINT32_C(0x030D9C31), UINT32_C(0x4FEE19D0), UINT32_C(0xC29E300F), UINT32_C(0xFC2C57F8), UINT32_C(0xC44458AE), UINT32_C(0x00071F97), UINT32_C(0x709727E1), UINT32_C(0x0AA2B911)}}, {{UINT32_C(0xA61166F8), UINT32_C(0x443F8B23), UINT32_C(0xD685FCF1), UINT32_C(0x3E8F6278), UINT32_C(0x447433C6), UINT32_C(0xC930C1D1), UINT32_C(0xAED7D6EB), UINT32_C(0x1245A867)}, {UINT32_C(0xFA89945A), UINT32_C(0xC35986DD), UINT32_C(0x26B0AFEE), UINT32_C(0x89CE1109), UINT32_C(0x17103D18), UINT32_C(0x9C6A87CD), UINT32_C(0xCE338978), UINT32_C(0x811B2242)}}, {{UINT32_C(0x0C293255), UINT32_C(0xC074AF66), UINT32_C(0x5AEAC2E1), UINT32_C(0x982C23A9), UINT32_C(0xD39AC56C), UINT32_C(0xDB14DE0C), UINT32_C(0x47EBB839), UINT32_C(0x20263F3F)}, {UINT32_C(0xD10588DF), UINT32_C(0x183EA578), UINT32_C(0x1EB69C36), UINT32_C(0xB4D88EFB), UINT32_C(0xDBF3BEE7), UINT32_C(0xA79A1B4D), UINT32_C(0xE8159E0D), UINT32_C(0x650FC466)}}, {{UINT32_C(0xF80D5744), UINT32_C(0x9E6EE797), UINT32_C(0x825949BD), UINT32_C(0xDFC3EBF5), UINT32_C(0x7EC9BD65), UINT32_C(0x1083EC79), UINT32_C(0xB753499C), UINT32_C(0x62A45C5E)}, {UINT32_C(0x2B6F42CF), UINT32_C(0x9C135F80), UINT32_C(0xC4B49041), UINT32_C(0xE39B0BA5), UINT32_C(0x8D3B2D06), UINT32_C(0x4D838513), UINT32_C(0xD070754B), UINT32_C(0x696034DC)}}, {{UINT32_C(0xB8E3BDD1), UINT32_C(0x06313D73), UINT32_C(0xE6968872), UINT32_C(0xC7BEC420), UINT32_C(0x3A04B7F0), UINT32_C(0x740DD6D3), UINT32_C(0x2465BED2), UINT32_C(0x98F2D0B7)}, {UINT32_C(0x4043DBAD), UINT32_C(0x9F298460), UINT32_C(0x01B5961F), UINT32_C(0x82D6991A), UINT32_C(0x54DFAB8A), UINT32_C(0xAAE7DF9D), UINT32_C(0x1A07DD22), UINT32_C(0x5701E335)}}, {{UINT32_C(0xFCA398A2), UINT32_C(0x5695A08E), UINT32_C(0x0D76E8CF), UINT32_C(0xD29EBC1F), UINT32_C(0x24004EDB), UINT32_C(0x5AB17ABF), UINT32_C(0x0CC7A144), UINT32_C(0x20C7761B)}, {UINT32_C(0x285EA93C), UINT32_C(0x6CAEE036), UINT32_C(0xF2B8BF23), UINT32_C(0xF9756E89), UINT32_C(0xB1AB91B7), UINT32_C(0x3CEA1C76), UINT32_C(0x3FB4F3B8), UINT32_C(0x5D86860E)}}, {{UINT32_C(0xFDC7DBC5), UINT32_C(0x835B023B), UINT32_C(0xEEEDFD73), UINT32_C(0xF05C0676), UINT32_C(0xE52BFB27), UINT32_C(0xF8325D64), UINT32_C(0xB5032CFF), UINT32_C(0x919D008D)}, {UINT32_C(0x4B130537), UINT32_C(0xEF27862C), UINT32_C(0x5CE404DC), UINT32_C(0x616DF154), UINT32_C(0x451ED033), UINT32_C(0x182BA57E), UINT32_C(0xBD01F864), UINT32_C(0x2EFEC0C7)}}, {{UINT32_C(0x45F3AF3C), UINT32_C(0xDC846845), UINT32_C(0x92A47B31), UINT32_C(0x2D2BA0CD), UINT32_C(0xE1AFE6EE), UINT32_C(0x9C806C7D), UINT32_C(0x4C6A4FEA), UINT32_C(0x28FE43FF)}, {UINT32_C(0x6C76C0F4), UINT32_C(0x2E028CD1), UINT32_C(0x2AEFBDDA), UINT32_C(0xC6FA5AD1), UINT32_C(0xF63F1A35), UINT32_C(0xC8B5339B), UINT32_C(0x04523F02), UINT32_C(0x30C780A7)}}, {{UINT32_C(0xD7E4F0CE), UINT32_C(0x3D2DCA55), UINT32_C(0x26616811), UINT32_C(0x8EEF9189), UINT32_C(0x3C0E5892), UINT32_C(0xB106642F), UINT32_C(0x89DB033E), UINT32_C(0x4A965385)}, {UINT32_C(0xB3C2DD37), UINT32_C(0x5A1CBEB6), UINT32_C(0x156EAC75), UINT32_C(0x5290C737), UINT32_C(0xE32E40C7), UINT32_C(0x57AFD98A), UINT32_C(0xB3571868), UINT32_C(0x04A16164)}}, {{UINT32_C(0x1A673E1B), UINT32_C(0x9AB8A3E9), UINT32_C(0x0FC23483), UINT32_C(0xC707ABBA), UINT32_C(0x9E0EA0BD), UINT32_C(0x936C1783), UINT32_C(0xF71F6F1D), UINT32_C(0x1E4C2E7C)}, {UINT32_C(0x6FB0926C), UINT32_C(0x37904F63), UINT32_C(0xC51FEEA5), UINT32_C(0x9EC76DF7), UINT32_C(0x4D103DAC), UINT32_C(0x2C60F7D6), UINT32_C(0xF9DC2CC6), UINT32_C(0x7B451E0B)}}, {{UINT32_C(0xB2A5F07F), UINT32_C(0xD4F8526C), UINT32_C(0xB0F4AE09), UINT32_C(0x41303D42), UINT32_C(0x0C182FDC), UINT32_C(0xAC79523F), UINT32_C(0xAA0C5D6D), UINT32_C(0x8D6A75C8)}, {UINT32_C(0x3CDCE3F0), UINT32_C(0x4DD7FC95), UINT32_C(0x5BE6DA0F), UINT32_C(0x4DDB3910), UINT32_C(0x16F7E27D), UINT32_C(0xE34961F9), UINT32_C(0x5B3544EB), UINT32_C(0x0C5CB76F)}}, {{UINT32_C(0x252C354C), UINT32_C(0x324C95B5), UINT32_C(0x8CC2C3BC), UINT32_C(0x4648D87E), UINT32_C(0x82BC8C80), UINT32_C(0x6DDFDECD), UINT32_C(0xC069996E), UINT32_C(0x8C64CADE)}, {UINT32_C(0x40ED44AB), UINT32_C(0x4E282E96), UINT32_C(0x79334507), UINT32_C(0x70A12067), UINT32_C(0x5AB8902B), UINT32_C(0x65CE5D38), UINT32_C(0x7C949D96), UINT32_C(0x56FE68F2)}}, {{UINT32_C(0xCF9530AE), UINT32_C(0x1D55C87E), UINT32_C(0xC147C2D5), UINT32_C(0xD1CF73FF), UINT32_C(0xC1F44403), UINT32_C(0x826031CD), UINT32_C(0x5EEF5BFB), UINT32_C(0x3A06528F)}, {UINT32_C(0x5F84A7B1), UINT32_C(0xF220EAF3), UINT32_C(0x350EBADE), UINT32_C(0xBC99C905), UINT32_C(0x810A101C), UINT32_C(0x686A706E), UINT32_C(0x1D92EAEA), UINT32_C(0x95E52713)}}, }, { {{UINT32_C(0x514D47C2), UINT32_C(0xAAC634B3), UINT32_C(0x58B83B33), UINT32_C(0xD0C189B8), UINT32_C(0x58CA9A2F), UINT32_C(0x633D59E3), UINT32_C(0x838ACC80), UINT32_C(0x65965CE0)}, {UINT32_C(0x9B512F6E), UINT32_C(0xBB03F7EA), UINT32_C(0x9EF17A82), UINT32_C(0xB2F38B84), UINT32_C(0xE16A7A95), UINT32_C(0xE8382E37), UINT32_C(0x4D9EF607), UINT32_C(0x28644EFE)}}, {{UINT32_C(0x040A515B), UINT32_C(0x46F9115E), UINT32_C(0xFA59CD3E), UINT32_C(0x4C7DBCFF), UINT32_C(0x71BB543E), UINT32_C(0xB4CE22B8), UINT32_C(0x948F80BA), UINT32_C(0x58D935D8)}, {UINT32_C(0x03683C8B), UINT32_C(0x33DC1D5B), UINT32_C(0x2D071D87), UINT32_C(0x25E6113A), UINT32_C(0xA7D59351), UINT32_C(0x44F962F8), UINT32_C(0xBCF66B43), UINT32_C(0x6B818DDB)}}, {{UINT32_C(0x378C1098), UINT32_C(0x363A63C7), UINT32_C(0xAC5C0C9E), UINT32_C(0xBEB2A7B6), UINT32_C(0x4361C8D4), UINT32_C(0x3F620D3F), UINT32_C(0x4E3D9686), UINT32_C(0x68EAD01A)}, {UINT32_C(0x45DB7208), UINT32_C(0x43613085), UINT32_C(0x13B35D33), UINT32_C(0x865A6DDE), UINT32_C(0x68DF09F5), UINT32_C(0x4EAA1663), UINT32_C(0xBF02AA12), UINT32_C(0x5FDCA83F)}}, {{UINT32_C(0xBFEFB3CB), UINT32_C(0xC240FEAA), UINT32_C(0x0EC6694F), UINT32_C(0x78E757D2), UINT32_C(0x2413D6A2), UINT32_C(0xA11A82DF), UINT32_C(0xDBB7A220), UINT32_C(0x7BD656EE)}, {UINT32_C(0x6EB899A4), UINT32_C(0x68C60873), UINT32_C(0x318C72E8), UINT32_C(0xAFFB9F1C), UINT32_C(0x9FB7619D), UINT32_C(0xF16A443C), UINT32_C(0x42C6E4D6), UINT32_C(0x2FC317E3)}}, {{UINT32_C(0x73F57A93), UINT32_C(0xAB56A873), UINT32_C(0x308F5224), UINT32_C(0xE9BA24E2), UINT32_C(0x11992077), UINT32_C(0x010281B9), UINT32_C(0x593EAD1A), UINT32_C(0x2CBCA7FE)}, {UINT32_C(0x2A1D8318), UINT32_C(0xB400388A), UINT32_C(0x3C61A0AF), UINT32_C(0xD470ABDA), UINT32_C(0x94BD2FAC), UINT32_C(0xF9102721), UINT32_C(0x0FAC703C), UINT32_C(0x222365D1)}}, {{UINT32_C(0x9C2D1B2B), UINT32_C(0x5C9021C4), UINT32_C(0xCAF0B562), UINT32_C(0xB349DB18), UINT32_C(0x91412CC3), UINT32_C(0x6DAF7412), UINT32_C(0xCF6584D3), UINT32_C(0x44E5E3E5)}, {UINT32_C(0xE4C17B19), UINT32_C(0x1D1F4244), UINT32_C(0x3787A38A), UINT32_C(0x4C663EE6), UINT32_C(0x313A8581), UINT32_C(0xA3261E22), UINT32_C(0x7A82C05A), UINT32_C(0x3AE1E1DB)}}, {{UINT32_C(0x3CD6A155), UINT32_C(0x31AA2B29), UINT32_C(0x3D078B12), UINT32_C(0x0EB9527E), UINT32_C(0x214FF1E2), UINT32_C(0x6785ABA2), UINT32_C(0xF111D572), UINT32_C(0x74974F84)}, {UINT32_C(0x078C684B), UINT32_C(0x2199A753), UINT32_C(0x4B13A004), UINT32_C(0xA0F1DE23), UINT32_C(0x75BEBCBC), UINT32_C(0x3965AE19), UINT32_C(0x24562AA7), UINT32_C(0x22A8D7EE)}}, {{UINT32_C(0xBF268ADE), UINT32_C(0x0591965F), UINT32_C(0x9EE48F0E), UINT32_C(0xF621B364), UINT32_C(0x5A3A3848), UINT32_C(0x0AD981A9), UINT32_C(0x9ECD72B7), UINT32_C(0x1316675C)}, {UINT32_C(0xF37C87E0), UINT32_C(0x21A5CEB7), UINT32_C(0x68D1AAFB), UINT32_C(0xEF864CF3), UINT32_C(0xD3C9A54F), UINT32_C(0x5F340413), UINT32_C(0xE00FD564), UINT32_C(0x0C5DE1E6)}}, {{UINT32_C(0xB415D72C), UINT32_C(0x439B2C0C), UINT32_C(0x63442E62), UINT32_C(0x106AE2E0), UINT32_C(0x4A79E93B), UINT32_C(0x8A9428C6), UINT32_C(0xCC2DF510), UINT32_C(0x67FE6D6E)}, {UINT32_C(0x655013B3), UINT32_C(0x407158BC), UINT32_C(0x2BC7E7CC), UINT32_C(0x3AAEAC1C), UINT32_C(0xEE8EC1F4), UINT32_C(0x399DB6EF), UINT32_C(0xECFF6657), UINT32_C(0x1F7D0D17)}}, {{UINT32_C(0xCB86639E), UINT32_C(0x03039D18), UINT32_C(0x9CDC3408), UINT32_C(0x58603909), UINT32_C(0xF1804B9E), UINT32_C(0x52421109), UINT32_C(0xED126B9F), UINT32_C(0x95502857)}, {UINT32_C(0x451B0539), UINT32_C(0xC91842D9), UINT32_C(0xE60AAE3B), UINT32_C(0x2B5B11EB), UINT32_C(0x44CB5A14), UINT32_C(0xDB50F9EA), UINT32_C(0x89E80A6E), UINT32_C(0x4B5C9824)}}, {{UINT32_C(0x69FC9F1A), UINT32_C(0x8EF3A1E5), UINT32_C(0x7CCA576A), UINT32_C(0xA4EAB6F4), UINT32_C(0xFBF1CD65), UINT32_C(0x955E1C89), UINT32_C(0xF8CE13DB), UINT32_C(0x3E3ACF6E)}, {UINT32_C(0x58F31FC9), UINT32_C(0x1FDB6190), UINT32_C(0x93B0D0D5), UINT32_C(0x10DB71B3), UINT32_C(0x9154B285), UINT32_C(0x90096143), UINT32_C(0x1C49EFF3), UINT32_C(0x37EEE178)}}, {{UINT32_C(0xBC198066), UINT32_C(0x609DE502), UINT32_C(0x40722EF6), UINT32_C(0x075C8631), UINT32_C(0xFF0FA57D), UINT32_C(0x121ACC9F), UINT32_C(0xEC7DB1A0), UINT32_C(0x31E79AC5)}, {UINT32_C(0xF16FAE79), UINT32_C(0x736EB95D), UINT32_C(0x815A14CB), UINT32_C(0xFF963917), UINT32_C(0x23AF0BC3), UINT32_C(0xC6003E5D), UINT32_C(0x99AFCAAA), UINT32_C(0x0D1B0350)}}, {{UINT32_C(0x1F0DF59D), UINT32_C(0x8A1B6C97), UINT32_C(0x59C9CA8D), UINT32_C(0x7DF81A72), UINT32_C(0x9602E8BE), UINT32_C(0x74257F8E), UINT32_C(0xA441657A), UINT32_C(0x2FFBAD39)}, {UINT32_C(0x048050A6), UINT32_C(0xB1B090DB), UINT32_C(0x741E7392), UINT32_C(0xD6144221), UINT32_C(0xECA1E2D6), UINT32_C(0x63826973), UINT32_C(0xD287DE2F), UINT32_C(0x28EE60B8)}}, {{UINT32_C(0x5DEE86CE), UINT32_C(0x81504295), UINT32_C(0x73C03937), UINT32_C(0xFACCB61D), UINT32_C(0x299B96AF), UINT32_C(0x9898F773), UINT32_C(0x488F95CD), UINT32_C(0x51552297)}, {UINT32_C(0x54F5E182), UINT32_C(0x6170618C), UINT32_C(0xC2798401), UINT32_C(0x9C11D666), UINT32_C(0x3EAF3DDE), UINT32_C(0x88225F4B), UINT32_C(0x087F1185), UINT32_C(0x20841538)}}, {{UINT32_C(0x14FA59EC), UINT32_C(0x42BCEFFE), UINT32_C(0x7D023F1E), UINT32_C(0xC41CFCDA), UINT32_C(0x7163E802), UINT32_C(0xD7E4FDE7), UINT32_C(0x2E145BCE), UINT32_C(0x54F4C798)}, {UINT32_C(0xF9162235), UINT32_C(0xE4EA68C9), UINT32_C(0x458DEC24), UINT32_C(0x4F7EAC6F), UINT32_C(0x845C6AD1), UINT32_C(0x70100D2D), UINT32_C(0xF1EA21B2), UINT32_C(0x67AC34CF)}}, {{UINT32_C(0xAC21C728), UINT32_C(0x2BD49BDF), UINT32_C(0xEDA966DF), UINT32_C(0x2D009B45), UINT32_C(0x4A9B9167), UINT32_C(0x0D4476BE), UINT32_C(0x95D2ACD2), UINT32_C(0x340BD3BE)}, {UINT32_C(0xB040FF50), UINT32_C(0xF8BACA2D), UINT32_C(0xB91D47C1), UINT32_C(0x307BEA0D), UINT32_C(0xB6B3A1E4), UINT32_C(0x2EFDC81B), UINT32_C(0x1595D6E2), UINT32_C(0x3B2CD7D9)}}, }, { {{UINT32_C(0x32A5A002), UINT32_C(0x56254AE7), UINT32_C(0x448B0A9F), UINT32_C(0xE48A475C), UINT32_C(0x14EDBBA9), UINT32_C(0x3B2DF6DF), UINT32_C(0xF5E4CC81), UINT32_C(0x911BE369)}, {UINT32_C(0x77CBB387), UINT32_C(0x57D065C6), UINT32_C(0x527575FD), UINT32_C(0x7C1E0142), UINT32_C(0x243B5C33), UINT32_C(0x2CA91EEF), UINT32_C(0x5C4700CC), UINT32_C(0x7E54AF42)}}, {{UINT32_C(0x5EEDF97F), UINT32_C(0xEF5ECAE5), UINT32_C(0xC0D821AC), UINT32_C(0x2D79312A), UINT32_C(0xA9EDBE8F), UINT32_C(0xD3817042), UINT32_C(0xAD924B1D), UINT32_C(0x7A3D537E)}, {UINT32_C(0xB26FFC3B), UINT32_C(0xD9923A20), UINT32_C(0x5B81EC12), UINT32_C(0x651D2201), UINT32_C(0x54C37FF0), UINT32_C(0xBDF7205A), UINT32_C(0x8C0D2E79), UINT32_C(0x5562D258)}}, {{UINT32_C(0xFB4842F8), UINT32_C(0xE5BC2E1C), UINT32_C(0x25B464C8), UINT32_C(0xCFE97824), UINT32_C(0x2FEA9ED3), UINT32_C(0xD902A11A), UINT32_C(0x8D3DD0A4), UINT32_C(0x2FC360ED)}, {UINT32_C(0x9E5F7AE1), UINT32_C(0xEC4E57FC), UINT32_C(0x79B8AF6C), UINT32_C(0xF0F1FD9F), UINT32_C(0xA9A283D0), UINT32_C(0x803F3ED6), UINT32_C(0xADEEA78E), UINT32_C(0x5F13000F)}}, {{UINT32_C(0x1838B470), UINT32_C(0x3EBBBD16), UINT32_C(0xB2781680), UINT32_C(0x934BA22A), UINT32_C(0xC7210CD4), UINT32_C(0xC9ED04FC), UINT32_C(0x4615F186), UINT32_C(0x716004A1)}, {UINT32_C(0xE894BBC3), UINT32_C(0xE7B36C21), UINT32_C(0x570AA9A8), UINT32_C(0x3F739857), UINT32_C(0x3063902B), UINT32_C(0x1707FBEE), UINT32_C(0x155C9824), UINT32_C(0x44FCB774)}}, {{UINT32_C(0xCDD8CEDB), UINT32_C(0x30ECD772), UINT32_C(0xCA09BCD3), UINT32_C(0x67BB36FD), UINT32_C(0x9BC43B7B), UINT32_C(0xD5AD0FAA), UINT32_C(0x6A130895), UINT32_C(0x3962E556)}, {UINT32_C(0x7F7A565A), UINT32_C(0x57928253), UINT32_C(0x55B911EE), UINT32_C(0xDE9D7792), UINT32_C(0x6984F326), UINT32_C(0xD5DBFDDE), UINT32_C(0x9FB51246), UINT32_C(0x7CDF5E15)}}, {{UINT32_C(0x89D24763), UINT32_C(0xD7FC427A), UINT32_C(0xAD874362), UINT32_C(0x50E627C9), UINT32_C(0x2069873A), UINT32_C(0x17A8F83B), UINT32_C(0xDB698BD1), UINT32_C(0x186952D7)}, {UINT32_C(0x38A2822C), UINT32_C(0x6C007EED), UINT32_C(0x0C207073), UINT32_C(0x5F187091), UINT32_C(0x08D245D2), UINT32_C(0xD0023B63), UINT32_C(0x34544316), UINT32_C(0x7A32C2A1)}}, {{UINT32_C(0x8C2635EC), UINT32_C(0x8B99183A), UINT32_C(0x6F12B137), UINT32_C(0xA00A9476), UINT32_C(0x823DA313), UINT32_C(0x9B5E2F57), UINT32_C(0x47B3CEB1), UINT32_C(0x0F7CB4AF)}, {UINT32_C(0x67266D24), UINT32_C(0xC993AF7E), UINT32_C(0xEBA985B8), UINT32_C(0x8B60295E), UINT32_C(0xE41A6F69), UINT32_C(0x9AA596CB), UINT32_C(0x4B68507A), UINT32_C(0x4D6CF5DF)}}, {{UINT32_C(0x6921DEFE), UINT32_C(0x3B8A3CBC), UINT32_C(0x0ED7B717), UINT32_C(0xB96D5390), UINT32_C(0x7DE65E54), UINT32_C(0x6761E86A), UINT32_C(0x701CC1E4), UINT32_C(0x964460D6)}, {UINT32_C(0x26C82309), UINT32_C(0x5C0A2213), UINT32_C(0x20328C60), UINT32_C(0xF95F5472), UINT32_C(0xFB49E3B5), UINT32_C(0xB519B476), UINT32_C(0xEE373756), UINT32_C(0x089D0AB6)}}, {{UINT32_C(0xDC952768), UINT32_C(0x947DFCF0), UINT32_C(0x3AB613AA), UINT32_C(0xD8B5C61C), UINT32_C(0x9A457DA4), UINT32_C(0x146E8325), UINT32_C(0xF476945E), UINT32_C(0x37E2F6D3)}, {UINT32_C(0x3851A6F6), UINT32_C(0x5702A441), UINT32_C(0x8D67EF9C), UINT32_C(0xB476560E), UINT32_C(0xF9D2AD96), UINT32_C(0xABA23F67), UINT32_C(0xDFBBB806), UINT32_C(0x3CE30A4E)}}, {{UINT32_C(0xE5BAA662), UINT32_C(0x64695640), UINT32_C(0x0AAF3988), UINT32_C(0x2A18979A), UINT32_C(0xDE0ED212), UINT32_C(0x605578FF), UINT32_C(0x30F2C13C), UINT32_C(0x52E604D5)}, {UINT32_C(0x894AB3B9), UINT32_C(0x2E9E2D83), UINT32_C(0x4BC33041), UINT32_C(0x098B1FAA), UINT32_C(0x0863AA3C), UINT32_C(0x01CF6606), UINT32_C(0xD2951A60), UINT32_C(0x7334879B)}}, {{UINT32_C(0xC51704F1), UINT32_C(0xB080105C), UINT32_C(0xEAEE29C4), UINT32_C(0x1A5869B8), UINT32_C(0x5FDD2FD3), UINT32_C(0xAD6AEF33), UINT32_C(0x49C2B183), UINT32_C(0x83E677C4)}, {UINT32_C(0xDFA8B8F4), UINT32_C(0x757A4EFD), UINT32_C(0xE42F2C87), UINT32_C(0xFC8E7650), UINT32_C(0x9C963D98), UINT32_C(0xD4A61A3E), UINT32_C(0x45BC9044), UINT32_C(0x3750289A)}}, {{UINT32_C(0x40B1C72C), UINT32_C(0x40A0620E), UINT32_C(0xB2E44573), UINT32_C(0xAEE56EC7), UINT32_C(0x60532553), UINT32_C(0xE4E6EA3D), UINT32_C(0xA0EB6014), UINT32_C(0x5BA50E80)}, {UINT32_C(0x4378CC2F), UINT32_C(0x84642978), UINT32_C(0x2A1C5FB4), UINT32_C(0xE322D169), UINT32_C(0x6B91F82D), UINT32_C(0x5000C9B1), UINT32_C(0x7AA49F2D), UINT32_C(0x32380CB8)}}, {{UINT32_C(0xE18C4BD2), UINT32_C(0x0A2F936A), UINT32_C(0xC3DB9AA5), UINT32_C(0x7AEA56AA), UINT32_C(0x5DDF30CB), UINT32_C(0x3A984E93), UINT32_C(0x904181C6), UINT32_C(0x36133D20)}, {UINT32_C(0xF62DFBF5), UINT32_C(0xA9A65593), UINT32_C(0x6808B883), UINT32_C(0xB4AC06FD), UINT32_C(0x7A2FEDBB), UINT32_C(0x98679704), UINT32_C(0x97880A72), UINT32_C(0x20E9E8E1)}}, {{UINT32_C(0xCEB26FAE), UINT32_C(0x403A1ED1), UINT32_C(0x3CD622C9), UINT32_C(0xAD13CD87), UINT32_C(0xCF45C32D), UINT32_C(0xC1E03929), UINT32_C(0xC3BE1A53), UINT32_C(0x4B50E4A9)}, {UINT32_C(0xD0D7AFE3), UINT32_C(0xCF10F3AF), UINT32_C(0x1494A9B4), UINT32_C(0x6A29B173), UINT32_C(0xD13B0495), UINT32_C(0xB9DC9849), UINT32_C(0x9C05B110), UINT32_C(0x4C50794E)}}, {{UINT32_C(0x1427F71D), UINT32_C(0xC3C97DED), UINT32_C(0x966ECF33), UINT32_C(0xC3CFB754), UINT32_C(0x1FBF30CD), UINT32_C(0x48E30FE1), UINT32_C(0x1E4B0998), UINT32_C(0x71C96E1C)}, {UINT32_C(0xB92C4BF7), UINT32_C(0x878D6305), UINT32_C(0xCCB5E4A1), UINT32_C(0x14477130), UINT32_C(0xE3C00A19), UINT32_C(0x7C210767), UINT32_C(0xAB3CDBF0), UINT32_C(0x5546DBD5)}}, {{UINT32_C(0x70857571), UINT32_C(0xADEC8758), UINT32_C(0xE70D07EC), UINT32_C(0x0A52587C), UINT32_C(0xC731B9BC), UINT32_C(0xE6CEAF9E), UINT32_C(0x47143479), UINT32_C(0x1D0FDE3F)}, {UINT32_C(0xC5B410CB), UINT32_C(0x2F3BE2CF), UINT32_C(0x4E64FD9B), UINT32_C(0x576004BE), UINT32_C(0x7629820C), UINT32_C(0x03F33951), UINT32_C(0x46A450E2), UINT32_C(0x7BD32964)}}, }, { {{UINT32_C(0x46CED42D), UINT32_C(0xD492D6B7), UINT32_C(0x1F0092E3), UINT32_C(0xC068D02D), UINT32_C(0x8D8A822A), UINT32_C(0x008ECBAD), UINT32_C(0x71045647), UINT32_C(0x6B326869)}, {UINT32_C(0x523CBA58), UINT32_C(0xFEE3237F), UINT32_C(0x9C29059F), UINT32_C(0x077B7F50), UINT32_C(0xE72FBE6F), UINT32_C(0x42C308B3), UINT32_C(0x8E34148B), UINT32_C(0x3DD79D83)}}, {{UINT32_C(0xCAC24455), UINT32_C(0x3ED9DF47), UINT32_C(0xD8546306), UINT32_C(0x7C8A7B31), UINT32_C(0x2AA02202), UINT32_C(0x4CC43295), UINT32_C(0x8598E028), UINT32_C(0x5E8B4EA3)}, {UINT32_C(0x812B8070), UINT32_C(0x8A882F3F), UINT32_C(0x1DD374C0), UINT32_C(0x984BE588), UINT32_C(0x16E133CF), UINT32_C(0x6FDA8159), UINT32_C(0x899920D0), UINT32_C(0x34FB92FA)}}, {{UINT32_C(0xDA0B8D0E), UINT32_C(0x3BE0416F), UINT32_C(0x88C053D0), UINT32_C(0x2CC846DB), UINT32_C(0xB1A3A621), UINT32_C(0xC04C3A42), UINT32_C(0x8A9D9115), UINT32_C(0x35BC5550)}, {UINT32_C(0x7FA72AFE), UINT32_C(0x7F8C9FE3), UINT32_C(0xD1E914FD), UINT32_C(0x488FA0B4), UINT32_C(0x84F79359), UINT32_C(0x8F5C2D63), UINT32_C(0xFBC94785), UINT32_C(0x2BE80429)}}, {{UINT32_C(0x6F67799A), UINT32_C(0x391794E0), UINT32_C(0x0677A067), UINT32_C(0xD9BF08AE), UINT32_C(0xDF61563C), UINT32_C(0x716D5062), UINT32_C(0xF590F3A3), UINT32_C(0x0ECB234A)}, {UINT32_C(0xFEA22392), UINT32_C(0xA5B91448), UINT32_C(0x7E76FB8B), UINT32_C(0xFAA29487), UINT32_C(0x4B6CB375), UINT32_C(0x3CC3A02A), UINT32_C(0x9022167A), UINT32_C(0x5C0B3B63)}}, {{UINT32_C(0x4C576430), UINT32_C(0xC5689CF3), UINT32_C(0xC585F5A5), UINT32_C(0xF7B7B230), UINT32_C(0xE4BFCEE7), UINT32_C(0xB8DAADFB), UINT32_C(0x9CF4242F), UINT32_C(0x7B7D8A95)}, {UINT32_C(0x398FEEF6), UINT32_C(0xC1755F9B), UINT32_C(0x5CC5C36E), UINT32_C(0x9B31CD4D), UINT32_C(0xF4C6B793), UINT32_C(0x4D87AB9C), UINT32_C(0xF595EFA8), UINT32_C(0x673FD5B2)}}, {{UINT32_C(0xE05E6B19), UINT32_C(0xA3836484), UINT32_C(0xFCA7E6FB), UINT32_C(0x090C14CF), UINT32_C(0xFC717DBC), UINT32_C(0xB7A27042), UINT32_C(0x38647882), UINT32_C(0x56CD4AF1)}, {UINT32_C(0xA43C453E), UINT32_C(0xC2B56B50), UINT32_C(0x982E7AED), UINT32_C(0x0CD5E768), UINT32_C(0x58474A8B), UINT32_C(0xD5ABADF7), UINT32_C(0x99F500AC), UINT32_C(0x68188A38)}}, {{UINT32_C(0x83B1F7BA), UINT32_C(0x0683AC3E), UINT32_C(0x680568E9), UINT32_C(0x6A4FC30C), UINT32_C(0x7F6256CF), UINT32_C(0x735F5E48), UINT32_C(0x048DB831), UINT32_C(0x1240752D)}, {UINT32_C(0x868B8AD7), UINT32_C(0x98B78A67), UINT32_C(0x822EBA7D), UINT32_C(0x9E32F2C1), UINT32_C(0x8F37580F), UINT32_C(0xEAE28B1E), UINT32_C(0xC72EDA86), UINT32_C(0x0D204CE0)}}, {{UINT32_C(0x77E8C68C), UINT32_C(0x5E4EAA1C), UINT32_C(0x859A127B), UINT32_C(0x282ADFE9), UINT32_C(0x14904910), UINT32_C(0x0C75AB7C), UINT32_C(0x6E751062), UINT32_C(0x1794516A)}, {UINT32_C(0x3DE4A32A), UINT32_C(0x8D99D891), UINT32_C(0x54EF2BF0), UINT32_C(0x957AA807), UINT32_C(0x0B109ECD), UINT32_C(0xBF20A9E0), UINT32_C(0xA72268D3), UINT32_C(0x7732F2B3)}}, {{UINT32_C(0x48752F76), UINT32_C(0xADB52E43), UINT32_C(0xD6F7CCE8), UINT32_C(0x01E9F4B1), UINT32_C(0x2E4BD9B5), UINT32_C(0x22702DA0), UINT32_C(0xB40BF9AB), UINT32_C(0x1BCC9C60)}, {UINT32_C(0x9F53B2B1), UINT32_C(0xAB774637), UINT32_C(0x8CB316D0), UINT32_C(0x9C574151), UINT32_C(0xBECBEBED), UINT32_C(0x231D5C45), UINT32_C(0xF0458638), UINT32_C(0x0BD2D5E7)}}, {{UINT32_C(0x4B946132), UINT32_C(0xD2F5E0B5), UINT32_C(0x155AA2C8), UINT32_C(0x200A8A30), UINT32_C(0x56A62CE7), UINT32_C(0x15473FD4), UINT32_C(0xB6689367), UINT32_C(0x030EA71B)}, {UINT32_C(0x0E315F29), UINT32_C(0xD561432B), UINT32_C(0x149E3A9E), UINT32_C(0x4155022E), UINT32_C(0x15841273), UINT32_C(0xC77EF7E1), UINT32_C(0x52BA265A), UINT32_C(0x890D9C8D)}}, {{UINT32_C(0x5E62451A), UINT32_C(0xB72B5A6A), UINT32_C(0x5C61A183), UINT32_C(0xFDA85C17), UINT32_C(0xB7F36EB3), UINT32_C(0xA4275361), UINT32_C(0x94F4148D), UINT32_C(0x53ADFAF3)}, {UINT32_C(0x6A8467AE), UINT32_C(0x281D47F9), UINT32_C(0x8474D3AD), UINT32_C(0x416A64B5), UINT32_C(0xEC99480E), UINT32_C(0x710D0E7A), UINT32_C(0x819253FF), UINT32_C(0x2693A878)}}, {{UINT32_C(0x1A2FE406), UINT32_C(0x4BE76904), UINT32_C(0x343F5B10), UINT32_C(0xB6FEED1D), UINT32_C(0xD705E35C), UINT32_C(0x36695C52), UINT32_C(0x6BD3859F), UINT32_C(0x7DF6FA41)}, {UINT32_C(0xC00E77EA), UINT32_C(0x7B9B11F5), UINT32_C(0xCA80F838), UINT32_C(0xC90411B8), UINT32_C(0x2908C694), UINT32_C(0x8A9FAEF0), UINT32_C(0xFF5B39B0), UINT32_C(0x05F65AAA)}}, {{UINT32_C(0xD7F59CC5), UINT32_C(0x823A0776), UINT32_C(0xC410DFD1), UINT32_C(0xB9EBE15E), UINT32_C(0x10A7FA3F), UINT32_C(0xC2374B58), UINT32_C(0x311660F2), UINT32_C(0x1B912C84)}, {UINT32_C(0xD5A175E6), UINT32_C(0x486A2607), UINT32_C(0x72B74EB7), UINT32_C(0x9B17D14D), UINT32_C(0x1039CA77), UINT32_C(0x1069D5C4), UINT32_C(0x3FEE08BB), UINT32_C(0x214605B3)}}, {{UINT32_C(0xF9D14E8D), UINT32_C(0xC25A7379), UINT32_C(0x577D330E), UINT32_C(0x9D5FAFDA), UINT32_C(0xA4A9CEF0), UINT32_C(0xB9A0217D), UINT32_C(0x08252731), UINT32_C(0x95AFC7F7)}, {UINT32_C(0x8FC51680), UINT32_C(0x14E53E9E), UINT32_C(0xA8AC4E21), UINT32_C(0x0AEA2428), UINT32_C(0x11CB2361), UINT32_C(0x6BC5E42C), UINT32_C(0xDCB52215), UINT32_C(0x3B205E45)}}, {{UINT32_C(0xC916CDE4), UINT32_C(0x8EDD4718), UINT32_C(0xD70D7130), UINT32_C(0xBB08F27A), UINT32_C(0xED9162CB), UINT32_C(0x289A33C0), UINT32_C(0xFB69185B), UINT32_C(0x97CEFA45)}, {UINT32_C(0x8B7797EE), UINT32_C(0x44DA2578), UINT32_C(0x148E9A75), UINT32_C(0x579B17F7), UINT32_C(0x913C09AE), UINT32_C(0x73EC1C23), UINT32_C(0x0BAAA67D), UINT32_C(0x3FAB86A4)}}, {{UINT32_C(0x2DF7BE6D), UINT32_C(0x28E76C23), UINT32_C(0x500A844D), UINT32_C(0x00526844), UINT32_C(0x3CC748C2), UINT32_C(0xB86FBB14), UINT32_C(0xEB5F6AC5), UINT32_C(0x6D89BB8A)}, {UINT32_C(0x2327808C), UINT32_C(0xF66159DF), UINT32_C(0x29C5006C), UINT32_C(0x606F0553), UINT32_C(0x844B6CA4), UINT32_C(0xDAA1107F), UINT32_C(0x63A8946C), UINT32_C(0x95D7686C)}}, }, { {{UINT32_C(0x07F7DCF5), UINT32_C(0x71438CEA), UINT32_C(0x0A1CCD55), UINT32_C(0xB3F59AFA), UINT32_C(0x0E0071B4), UINT32_C(0x5A439627), UINT32_C(0xE93D5B8E), UINT32_C(0x8694E3FA)}, {UINT32_C(0x7D6550B0), UINT32_C(0x21713A38), UINT32_C(0x06CFCD5B), UINT32_C(0x893BD9F7), UINT32_C(0xE7513FCE), UINT32_C(0xC3D2679C), UINT32_C(0x2C451EF3), UINT32_C(0x418AE7C8)}}, {{UINT32_C(0x0B85E2A9), UINT32_C(0xADFAFF38), UINT32_C(0x2E244653), UINT32_C(0x6124E627), UINT32_C(0x375D1EE7), UINT32_C(0xF2C465AF), UINT32_C(0x76E58455), UINT32_C(0x5B2302D6)}, {UINT32_C(0x7479F387), UINT32_C(0x32938A0D), UINT32_C(0xAAAB22A5), UINT32_C(0xF9A16A0D), UINT32_C(0x2AD65CAE), UINT32_C(0x65AF0E25), UINT32_C(0x8431EA40), UINT32_C(0x2B566866)}}, {{UINT32_C(0xDBCDAFAB), UINT32_C(0xCA3ACC11), UINT32_C(0xBB7F218B), UINT32_C(0x0BBB5DBF), UINT32_C(0xDB0ABBE2), UINT32_C(0xD69E091A), UINT32_C(0x0B0B7B09), UINT32_C(0x8AFFCE95)}, {UINT32_C(0xC7EC52C7), UINT32_C(0x0A5E6C81), UINT32_C(0x896707CD), UINT32_C(0xABD60595), UINT32_C(0x101E0F80), UINT32_C(0x4CE86506), UINT32_C(0x4ED01B2E), UINT32_C(0x9629A6C0)}}, {{UINT32_C(0xE15D82F4), UINT32_C(0x1D740EAC), UINT32_C(0x90A5D149), UINT32_C(0x42F98018), UINT32_C(0x903D6D28), UINT32_C(0x1B8C8DC0), UINT32_C(0x05BBDFF7), UINT32_C(0x7BE2B916)}, {UINT32_C(0xD8E41D96), UINT32_C(0xFBACF878), UINT32_C(0xBE26EB56), UINT32_C(0x42E98BFB), UINT32_C(0xF6DE1EB1), UINT32_C(0x9EA73555), UINT32_C(0xCF79A9EE), UINT32_C(0x5325DDDE)}}, {{UINT32_C(0x48E6A22F), UINT32_C(0x44BE62C3), UINT32_C(0x8DB35276), UINT32_C(0xD0A3C0AD), UINT32_C(0x136FE9BA), UINT32_C(0xB4C99306), UINT32_C(0xA44E491F), UINT32_C(0x0F2987D7)}, {UINT32_C(0xCCC77C2B), UINT32_C(0xA0965F74), UINT32_C(0xFE110072), UINT32_C(0xE01AD644), UINT32_C(0xC16B5E1E), UINT32_C(0x79528B9C), UINT32_C(0xF929BE4D), UINT32_C(0x45AEEFF3)}}, {{UINT32_C(0x7F4DA458), UINT32_C(0x46E95DF6), UINT32_C(0xA7AD579B), UINT32_C(0x554C50C1), UINT32_C(0x4316DBA1), UINT32_C(0xF64F00A1), UINT32_C(0x46D487BD), UINT32_C(0x16C98513)}, {UINT32_C(0x2C048A1B), UINT32_C(0xECB19761), UINT32_C(0x5373E5E6), UINT32_C(0x997AF398), UINT32_C(0xFDF23B20), UINT32_C(0x50E832D2), UINT32_C(0x7EF7E097), UINT32_C(0x1B358E0F)}}, {{UINT32_C(0xACBC759C), UINT32_C(0x7C6728AE), UINT32_C(0xA156A466), UINT32_C(0x187588FB), UINT32_C(0x928F97BD), UINT32_C(0xC2E550ED), UINT32_C(0xAAE1C05A), UINT32_C(0x8B595A3A)}, {UINT32_C(0xD77C1125), UINT32_C(0xE36871E1), UINT32_C(0x0DBBD882), UINT32_C(0x11E12978), UINT32_C(0x5E77FB7E), UINT32_C(0x3EF8268A), UINT32_C(0x6B33C00C), UINT32_C(0x7BAEA9BA)}}, {{UINT32_C(0x5925E5FE), UINT32_C(0x7C851236), UINT32_C(0xD8E1597B), UINT32_C(0xCED70AE5), UINT32_C(0x6DCD112F), UINT32_C(0x7A28BE1A), UINT32_C(0x3B8EAF6F), UINT32_C(0x1EB19268)}, {UINT32_C(0x8AA902B9), UINT32_C(0x7E6F1CF2), UINT32_C(0xA5A761D9), UINT32_C(0x3DD9D59C), UINT32_C(0x48D9F52E), UINT32_C(0x8EF70BB4), UINT32_C(0xCDEE9658), UINT32_C(0x96629C1A)}}, {{UINT32_C(0xB367C5B3), UINT32_C(0xCA215EAC), UINT32_C(0xA796338A), UINT32_C(0x36B22774), UINT32_C(0x26EBCDFE), UINT32_C(0x71F9A61A), UINT32_C(0x35119BD3), UINT32_C(0x1B40580A)}, {UINT32_C(0x431C78BD), UINT32_C(0x77169EF1), UINT32_C(0x337022D5), UINT32_C(0x8197975E), UINT32_C(0x1D9A4742), UINT32_C(0x45112799), UINT32_C(0x19B6DB07), UINT32_C(0x382750D6)}}, {{UINT32_C(0x9786AE0B), UINT32_C(0x740405EE), UINT32_C(0x3ABA0481), UINT32_C(0xF7F37C0F), UINT32_C(0x51892307), UINT32_C(0x904FC60C), UINT32_C(0xE891D639), UINT32_C(0x8405DF2A)}, {UINT32_C(0xD9B432F8), UINT32_C(0x53D19AC5), UINT32_C(0x066CD97C), UINT32_C(0xE8F1730F), UINT32_C(0x0E95804B), UINT32_C(0xC8740FEF), UINT32_C(0xEC242811), UINT32_C(0x12EE433C)}}, {{UINT32_C(0x6153F4D4), UINT32_C(0x6AF4B9B1), UINT32_C(0xF84F0145), UINT32_C(0x9CD8CD0C), UINT32_C(0xDCEB0F06), UINT32_C(0x6CABD4FC), UINT32_C(0x0D134DCE), UINT32_C(0x036BF146)}, {UINT32_C(0x7EFFACAB), UINT32_C(0xCDEB1818), UINT32_C(0x52C987E7), UINT32_C(0xB57A4162), UINT32_C(0xC647E82F), UINT32_C(0xDD5104EB), UINT32_C(0xF51B5270), UINT32_C(0x389AA556)}}, {{UINT32_C(0x60108876), UINT32_C(0xC450CAEA), UINT32_C(0xF48601A1), UINT32_C(0xF36B5B6A), UINT32_C(0x09128863), UINT32_C(0x257950D1), UINT32_C(0xA9F6A1B9), UINT32_C(0x7A592427)}, {UINT32_C(0xED12DE33), UINT32_C(0xBF1FF2B0), UINT32_C(0xE2141101), UINT32_C(0x4D542AC8), UINT32_C(0xE170F9CF), UINT32_C(0x998523C4), UINT32_C(0xFCEC0E2F), UINT32_C(0x629385CE)}}, {{UINT32_C(0xB2677C49), UINT32_C(0x951494ED), UINT32_C(0xF9B648E8), UINT32_C(0xF1AE7138), UINT32_C(0x63CFF359), UINT32_C(0x28B8749E), UINT32_C(0x9A73272F), UINT32_C(0x5AC4EC4C)}, {UINT32_C(0x21723271), UINT32_C(0xC25ABB87), UINT32_C(0x8B441AFD), UINT32_C(0x488EC910), UINT32_C(0x1B1DF775), UINT32_C(0x07518348), UINT32_C(0xF1EB2FB4), UINT32_C(0x4662BBDA)}}, {{UINT32_C(0x6DF9F64A), UINT32_C(0xAE836F74), UINT32_C(0xA185ABE6), UINT32_C(0xF3CD6C9D), UINT32_C(0xC29A1C1A), UINT32_C(0xAFA897A8), UINT32_C(0x11B2D6AC), UINT32_C(0x4BAFBB69)}, {UINT32_C(0xB6D971C7), UINT32_C(0x8040F9A3), UINT32_C(0x00763EAF), UINT32_C(0x3B8920B7), UINT32_C(0x52E848B7), UINT32_C(0x7A1655DA), UINT32_C(0x703FA84D), UINT32_C(0x03BC8B55)}}, {{UINT32_C(0x1F934416), UINT32_C(0xE6348C65), UINT32_C(0xF82BBC4A), UINT32_C(0xDBE59C03), UINT32_C(0xEAD60547), UINT32_C(0x51AEAD09), UINT32_C(0x4F20111E), UINT32_C(0x043A35C3)}, {UINT32_C(0xEC574F0A), UINT32_C(0x0AA18326), UINT32_C(0xFCADF79D), UINT32_C(0x07E90D70), UINT32_C(0x201CD68B), UINT32_C(0x3979D4CE), UINT32_C(0x2C2734B1), UINT32_C(0x7FBF2C63)}}, {{UINT32_C(0x2656AF49), UINT32_C(0x2E451373), UINT32_C(0xA432DE06), UINT32_C(0xCA86207D), UINT32_C(0x12F20637), UINT32_C(0xC5F9262D), UINT32_C(0x26C0C745), UINT32_C(0x7DD9CCDC)}, {UINT32_C(0xA785ED89), UINT32_C(0x99276BDC), UINT32_C(0x374CFBE2), UINT32_C(0x34B307A7), UINT32_C(0x1E8EE0C5), UINT32_C(0x916E9B06), UINT32_C(0x88A85C6A), UINT32_C(0x4E8EB3C7)}}, }, { {{UINT32_C(0x107F1CE0), UINT32_C(0x6F2433EF), UINT32_C(0x46D23AEF), UINT32_C(0x121DE131), UINT32_C(0x20DB44DE), UINT32_C(0x7AC50BE8), UINT32_C(0xF6F41A1C), UINT32_C(0x1E500A2B)}, {UINT32_C(0x27B0004C), UINT32_C(0x8E5BAFCC), UINT32_C(0xDB555C04), UINT32_C(0x8538A5ED), UINT32_C(0xCE4ED544), UINT32_C(0x00AEC8A7), UINT32_C(0x73B2DA91), UINT32_C(0x7C7301CC)}}, {{UINT32_C(0x63284E3A), UINT32_C(0x3E7E1E5C), UINT32_C(0x1422D8EA), UINT32_C(0x14581400), UINT32_C(0x7AAABD1D), UINT32_C(0x5FE151BF), UINT32_C(0x1533B371), UINT32_C(0x6716691F)}, {UINT32_C(0x22A8B7DF), UINT32_C(0xA592D53E), UINT32_C(0x51C97935), UINT32_C(0x66991AFF), UINT32_C(0xDE5429B6), UINT32_C(0x8B10603D), UINT32_C(0x551F146B), UINT32_C(0x0002F6C6)}}, {{UINT32_C(0x777A334C), UINT32_C(0xF641CBCB), UINT32_C(0xEEFBCA44), UINT32_C(0xB45B21E1), UINT32_C(0x32F6E263), UINT32_C(0x7C2FCD65), UINT32_C(0xFEED8901), UINT32_C(0x05A21D80)}, {UINT32_C(0x5506CF47), UINT32_C(0x2471B486), UINT32_C(0x7C9E62DE), UINT32_C(0x0FFAC1F7), UINT32_C(0x869D3BDC), UINT32_C(0xC4D321DF), UINT32_C(0x9512D0CA), UINT32_C(0x9AC03509)}}, {{UINT32_C(0x352E0353), UINT32_C(0x5A26E8F5), UINT32_C(0xBF6ABBAC), UINT32_C(0x965CF602), UINT32_C(0xE911C628), UINT32_C(0xDD8C4818), UINT32_C(0xDC2D04A0), UINT32_C(0x132CA2D8)}, {UINT32_C(0x6C865C91), UINT32_C(0x7641CFCE), UINT32_C(0x8E9965EF), UINT32_C(0xDB5AB8F3), UINT32_C(0xDE0B7E90), UINT32_C(0x30030BCD), UINT32_C(0x2320D3F1), UINT32_C(0x7BF44453)}}, {{UINT32_C(0xD8A99DAD), UINT32_C(0xC006FA6D), UINT32_C(0xB45E64A1), UINT32_C(0xC042F163), UINT32_C(0x74F4DBB1), UINT32_C(0xB91C9CA4), UINT32_C(0xBE221E4E), UINT32_C(0x23BD5A29)}, {UINT32_C(0x3D1ECF78), UINT32_C(0x6B0591D7), UINT32_C(0xAA5B771C), UINT32_C(0x9E0ACF38), UINT32_C(0x796D4AA3), UINT32_C(0xC970F263), UINT32_C(0x7B5DD349), UINT32_C(0x37037502)}}, {{UINT32_C(0xFBC52541), UINT32_C(0xE11DECDA), UINT32_C(0xE7FE53A5), UINT32_C(0xA49B8D39), UINT32_C(0x104A1F6E), UINT32_C(0x3A08E9BB), UINT32_C(0xE0192BFB), UINT32_C(0x95444A15)}, {UINT32_C(0x1A97B875), UINT32_C(0xEF75B062), UINT32_C(0xEA5FC457), UINT32_C(0x9FC8AE5E), UINT32_C(0x47F73089), UINT32_C(0x3A09FD1B), UINT32_C(0xE24516AB), UINT32_C(0x096750EC)}}, {{UINT32_C(0x4A350C95), UINT32_C(0xAA180046), UINT32_C(0x58EA4195), UINT32_C(0xA72F2B67), UINT32_C(0xFD9A4F25), UINT32_C(0xE0647945), UINT32_C(0x22737E2D), UINT32_C(0x4CF4136D)}, {UINT32_C(0xEFB2A96D), UINT32_C(0xEE2532CE), UINT32_C(0x6C2F1471), UINT32_C(0xB39DB117), UINT32_C(0x19935BDB), UINT32_C(0xF7C6242B), UINT32_C(0x7A820092), UINT32_C(0x98CA48D4)}}, {{UINT32_C(0xC3C938B0), UINT32_C(0xE9C1AD0A), UINT32_C(0xCCDF3BC6), UINT32_C(0xF7CC05C4), UINT32_C(0x363A9CC6), UINT32_C(0x3C21752B), UINT32_C(0x5916BD59), UINT32_C(0x47996B87)}, {UINT32_C(0x98D17468), UINT32_C(0x01EF895D), UINT32_C(0x5818F5D8), UINT32_C(0x9182F882), UINT32_C(0xE35E4BE7), UINT32_C(0xCBD212A3), UINT32_C(0x5EA16E55), UINT32_C(0x894E7F39)}}, {{UINT32_C(0x7C8FDD7E), UINT32_C(0xAC674AEE), UINT32_C(0xEDB0FE30), UINT32_C(0xA23FA827), UINT32_C(0x745B3230), UINT32_C(0x642BE06F), UINT32_C(0xCB40941C), UINT32_C(0x7654C79B)}, {UINT32_C(0xD6A9E988), UINT32_C(0x4640C0C5), UINT32_C(0x11A4EECB), UINT32_C(0xA98AF661), UINT32_C(0x325D730E), UINT32_C(0xE1E827E3), UINT32_C(0x7D8A02DE), UINT32_C(0x2342D880)}}, {{UINT32_C(0x715DB87E), UINT32_C(0xE4101595), UINT32_C(0x3C44A43A), UINT32_C(0x462718AB), UINT32_C(0xEFCBC0F7), UINT32_C(0xF414CBC7), UINT32_C(0xE5999AB3), UINT32_C(0x2A64DB21)}, {UINT32_C(0x9DA91E84), UINT32_C(0xDAD841E1), UINT32_C(0x5F5C1CDD), UINT32_C(0x5A28F649), UINT32_C(0xB8B41BDA), UINT32_C(0x2F8C9DCA), UINT32_C(0x029C3697), UINT32_C(0x259DC791)}}, {{UINT32_C(0x5296BA38), UINT32_C(0xD56F4EF4), UINT32_C(0x02EC3100), UINT32_C(0x4A853BA1), UINT32_C(0xC8AE4C47), UINT32_C(0xB0ED5F21), UINT32_C(0x61DF268E), UINT32_C(0x53D0DA0C)}, {UINT32_C(0x6DC06EB6), UINT32_C(0xB6771DCB), UINT32_C(0xBB0C457F), UINT32_C(0x30B07595), UINT32_C(0xF174690D), UINT32_C(0xC2FD08F3), UINT32_C(0x87A5DC8E), UINT32_C(0x77000D6A)}}, {{UINT32_C(0x6E1369AD), UINT32_C(0x90DDAA61), UINT32_C(0xB6A5F225), UINT32_C(0x3DD15EE7), UINT32_C(0x27AEB0DC), UINT32_C(0x051AA9C4), UINT32_C(0xE5372729), UINT32_C(0x18712DBB)}, {UINT32_C(0xA23AFF5A), UINT32_C(0x13B3F9DF), UINT32_C(0x703FBFF9), UINT32_C(0x34388CED), UINT32_C(0x17D60129), UINT32_C(0x0F390D67), UINT32_C(0x4DAE9863), UINT32_C(0x3F0CA25E)}}, {{UINT32_C(0x903385DC), UINT32_C(0x6E0F5594), UINT32_C(0xF8A815A9), UINT32_C(0x47483889), UINT32_C(0x23B70B1C), UINT32_C(0x42AF320C), UINT32_C(0x1A1AEA03), UINT32_C(0x4A27CA27)}, {UINT32_C(0x66AF6F9D), UINT32_C(0xFAAC21C8), UINT32_C(0xC9FBFD3E), UINT32_C(0x20849D90), UINT32_C(0xEE0A541C), UINT32_C(0x793F889F), UINT32_C(0xADA5D18F), UINT32_C(0x2555FC32)}}, {{UINT32_C(0xBA2BD509), UINT32_C(0x3F38F58C), UINT32_C(0x048F864B), UINT32_C(0x319A5F0D), UINT32_C(0xD5900B1E), UINT32_C(0xC4632F37), UINT32_C(0xF8519441), UINT32_C(0x3FAF2615)}, {UINT32_C(0xFE194D77), UINT32_C(0x6A4AA25D), UINT32_C(0xD681409B), UINT32_C(0xB5A6464A), UINT32_C(0xB957523A), UINT32_C(0x1A9326ED), UINT32_C(0x27098B5B), UINT32_C(0x7690EA4F)}}, {{UINT32_C(0x10F3FDE3), UINT32_C(0x5530E911), UINT32_C(0x810E7853), UINT32_C(0x9A40101F), UINT32_C(0x8F011C4E), UINT32_C(0x152704FC), UINT32_C(0x129B455F), UINT32_C(0x5B1702E4)}, {UINT32_C(0xE60F4D30), UINT32_C(0x46A130BA), UINT32_C(0x62BBE8B5), UINT32_C(0xA3D57414), UINT32_C(0x3CFAEFE3), UINT32_C(0xA26238DA), UINT32_C(0x3175078E), UINT32_C(0x4E614113)}}, {{UINT32_C(0x992EE109), UINT32_C(0x27BCCDFF), UINT32_C(0xFB45C6C3), UINT32_C(0x79F88647), UINT32_C(0xC73F2829), UINT32_C(0x7FD5D73A), UINT32_C(0x65A44CF1), UINT32_C(0x7EBE8E4E)}, {UINT32_C(0x37414B2C), UINT32_C(0xB9EC0B94), UINT32_C(0x36DED49D), UINT32_C(0x846AD1D1), UINT32_C(0x62F2FE87), UINT32_C(0x72AE1060), UINT32_C(0xC032EEDD), UINT32_C(0x7F5AF329)}}, }, { {{UINT32_C(0xC7A645A5), UINT32_C(0x6C80B058), UINT32_C(0x729066AC), UINT32_C(0xF86341D2), UINT32_C(0x33FB5CE8), UINT32_C(0xE4F366BD), UINT32_C(0xC23A4751), UINT32_C(0x6B79D63F)}, {UINT32_C(0xEC3F8686), UINT32_C(0xFAA0F994), UINT32_C(0xA9BA8F5E), UINT32_C(0x156A6E8E), UINT32_C(0x9F2FAE57), UINT32_C(0xA46CA7D5), UINT32_C(0x6EFE66F2), UINT32_C(0x84CB2196)}}, {{UINT32_C(0xED25185C), UINT32_C(0xF9C1DECB), UINT32_C(0xB1FCFC82), UINT32_C(0x6DC43F21), UINT32_C(0xA954087B), UINT32_C(0x4A840262), UINT32_C(0x0A38F667), UINT32_C(0x60230809)}, {UINT32_C(0x1D9672B5), UINT32_C(0xBD345006), UINT32_C(0xF83361EF), UINT32_C(0xE0FF804B), UINT32_C(0xEF8E1598), UINT32_C(0x9DDC6CE1), UINT32_C(0xFBD9BD0E), UINT32_C(0x4419F705)}}, {{UINT32_C(0x3426122A), UINT32_C(0xF171EDE4), UINT32_C(0x20A3963E), UINT32_C(0xEF6A1AE2), UINT32_C(0x031647D0), UINT32_C(0xD25AB7A2), UINT32_C(0xCB4CA4E3), UINT32_C(0x0FD7EC20)}, {UINT32_C(0xB7D3A295), UINT32_C(0xC103969C), UINT32_C(0x34DBABA8), UINT32_C(0x4957509E), UINT32_C(0x60BC0760), UINT32_C(0x8456DF63), UINT32_C(0xD63B49A9), UINT32_C(0x02AF2033)}}, {{UINT32_C(0x0378E444), UINT32_C(0x271966A0), UINT32_C(0x5D15A0B7), UINT32_C(0x673F057D), UINT32_C(0xA0EFE59E), UINT32_C(0xA55C44F9), UINT32_C(0x376119A6), UINT32_C(0x2F602F87)}, {UINT32_C(0x28981502), UINT32_C(0x0A149074), UINT32_C(0x8741D4F2), UINT32_C(0xDA006774), UINT32_C(0x133F8479), UINT32_C(0x8F982C81), UINT32_C(0xF944319A), UINT32_C(0x1ECAF17A)}}, {{UINT32_C(0xA37F4FC2), UINT32_C(0x281A234E), UINT32_C(0xFD34FC11), UINT32_C(0xAFD847B2), UINT32_C(0x4683E11A), UINT32_C(0x02CC0839), UINT32_C(0x3F65B844), UINT32_C(0x71215DA9)}, {UINT32_C(0xEFE32AC9), UINT32_C(0xF9F41383), UINT32_C(0x1361FE53), UINT32_C(0x4AC3D91D), UINT32_C(0x1CC2E948), UINT32_C(0x03C9FBAB), UINT32_C(0x43379A4F), UINT32_C(0x9A9A4B91)}}, {{UINT32_C(0x51BED5AC), UINT32_C(0x8D37A108), UINT32_C(0x998E1C19), UINT32_C(0x75D91890), UINT32_C(0x5D244730), UINT32_C(0xE6C76B09), UINT32_C(0x4CD555FF), UINT32_C(0x12714716)}, {UINT32_C(0x29DDC669), UINT32_C(0xF2DCE85A), UINT32_C(0x8D622348), UINT32_C(0x8914D13A), UINT32_C(0xDAE035E8), UINT32_C(0x9FE6B578), UINT32_C(0xF41EEF19), UINT32_C(0x21ECB251)}}, {{UINT32_C(0x7999064D), UINT32_C(0xEAFF3862), UINT32_C(0x96383204), UINT32_C(0xB72BABEF), UINT32_C(0x6BCCCB43), UINT32_C(0x8E6C9E67), UINT32_C(0x7FD71298), UINT32_C(0x320A7D78)}, {UINT32_C(0xB438A302), UINT32_C(0x4081E38A), UINT32_C(0x120E132D), UINT32_C(0x0A15CBA7), UINT32_C(0xEC2E0939), UINT32_C(0x6D9123E1), UINT32_C(0xE0D6FEC5), UINT32_C(0x692D699C)}}, {{UINT32_C(0xC8D5D361), UINT32_C(0xB639ADAE), UINT32_C(0xC60A078D), UINT32_C(0xA8F742CC), UINT32_C(0x9D740F0F), UINT32_C(0xE8D2CF92), UINT32_C(0x4DCE6A87), UINT32_C(0x6E8EEEF9)}, {UINT32_C(0x6A2E5164), UINT32_C(0x54E19488), UINT32_C(0x2430E4B9), UINT32_C(0x4372C6CF), UINT32_C(0x1C5B13B3), UINT32_C(0xD58EA91B), UINT32_C(0xBB9F2911), UINT32_C(0x796DCC45)}}, {{UINT32_C(0xCBB267F9), UINT32_C(0xD8D4FAF0), UINT32_C(0x703F4011), UINT32_C(0xC2770DBE), UINT32_C(0x0D651402), UINT32_C(0x13739F02), UINT32_C(0x72D2B3F1), UINT32_C(0x7DE4E51E)}, {UINT32_C(0x1FE00C7E), UINT32_C(0xB10F966E), UINT32_C(0x8F42B5F8), UINT32_C(0x5E9A1501), UINT32_C(0xD00437A3), UINT32_C(0x6AFB1AD0), UINT32_C(0x1473D5AE), UINT32_C(0x267D1536)}}, {{UINT32_C(0x4CAE118F), UINT32_C(0x1173B5DB), UINT32_C(0xCA749EE6), UINT32_C(0xC3A2EAFD), UINT32_C(0x4ED4FFF4), UINT32_C(0x64F738E6), UINT32_C(0xB07860B6), UINT32_C(0x47DDECB6)}, {UINT32_C(0xBD47A901), UINT32_C(0xF5D627FC), UINT32_C(0x856C6903), UINT32_C(0x6493BC28), UINT32_C(0xEA63B675), UINT32_C(0x90280E4B), UINT32_C(0xC4148666), UINT32_C(0x211C04A2)}}, {{UINT32_C(0x6524BC38), UINT32_C(0x0A5F0C27), UINT32_C(0xBB3CBDB9), UINT32_C(0x4B9D95FB), UINT32_C(0x20507C82), UINT32_C(0x5394ADC2), UINT32_C(0xB4DBE448), UINT32_C(0x4C0C9167)}, {UINT32_C(0x303A5B11), UINT32_C(0xAC3E87CE), UINT32_C(0x3251F4DF), UINT32_C(0xD31FB9C5), UINT32_C(0xE43CE799), UINT32_C(0x86C281DF), UINT32_C(0x29FE09E4), UINT32_C(0x84E644D7)}}, {{UINT32_C(0x43166C20), UINT32_C(0x6D7B61DC), UINT32_C(0xBD34F981), UINT32_C(0x54D6C035), UINT32_C(0xC991096D), UINT32_C(0xB166769D), UINT32_C(0x3A4CF05C), UINT32_C(0x51A47E3A)}, {UINT32_C(0x14F5E7F1), UINT32_C(0x57CF9EFF), UINT32_C(0xE39FDA0D), UINT32_C(0xED3D4E9D), UINT32_C(0xBAA7E93B), UINT32_C(0xDF0176EC), UINT32_C(0x70935B9F), UINT32_C(0x6B2FEA14)}}, {{UINT32_C(0x709B70AE), UINT32_C(0x19F9D59E), UINT32_C(0x70472149), UINT32_C(0xD850CA32), UINT32_C(0x29EE6104), UINT32_C(0x292CADD9), UINT32_C(0x8FD499F2), UINT32_C(0x870F7C99)}, {UINT32_C(0x415C6FFD), UINT32_C(0x200ECB1C), UINT32_C(0x35CB841B), UINT32_C(0xEEA6107D), UINT32_C(0xF95DD333), UINT32_C(0x1CB06F8A), UINT32_C(0xE498AA7B), UINT32_C(0x245712FD)}}, {{UINT32_C(0xED4FBD78), UINT32_C(0x101665EA), UINT32_C(0x0E32D1B4), UINT32_C(0xC6DDE1BB), UINT32_C(0x40150A9C), UINT32_C(0x3E79185E), UINT32_C(0x7DEF3607), UINT32_C(0x49E2AE6B)}, {UINT32_C(0x308B7F59), UINT32_C(0xCCC9B0F6), UINT32_C(0xCE922087), UINT32_C(0xB267008F), UINT32_C(0xCF2AABA6), UINT32_C(0x46CF7F07), UINT32_C(0x9954091F), UINT32_C(0x5A74C8A0)}}, {{UINT32_C(0x5240B5A0), UINT32_C(0x8F287195), UINT32_C(0x1845373D), UINT32_C(0x7AC7720F), UINT32_C(0x4E592274), UINT32_C(0xCF276B59), UINT32_C(0x694C30B8), UINT32_C(0x6BEBC284)}, {UINT32_C(0x677B16CD), UINT32_C(0xDA0113D6), UINT32_C(0x45C9FA76), UINT32_C(0xA2213446), UINT32_C(0x66964ADB), UINT32_C(0x2DEAF2ED), UINT32_C(0xBC062240), UINT32_C(0x1977A8B3)}}, {{UINT32_C(0x80303DFD), UINT32_C(0xEEA29126), UINT32_C(0xE95BF6A1), UINT32_C(0x3E4A33AC), UINT32_C(0x15DE0457), UINT32_C(0x6BFE2D5D), UINT32_C(0xAD0976D1), UINT32_C(0x407BF7E3)}, {UINT32_C(0x306B415B), UINT32_C(0x04C1F61F), UINT32_C(0x5F790D5F), UINT32_C(0xC86A75D2), UINT32_C(0xB7EAE07B), UINT32_C(0x7B799EDE), UINT32_C(0xB4A66839), UINT32_C(0x9155A9A0)}}, }, { {{UINT32_C(0x0DCE586B), UINT32_C(0x9745C6BB), UINT32_C(0xBE77B502), UINT32_C(0x554C8313), UINT32_C(0xA93962CF), UINT32_C(0xF0F842A9), UINT32_C(0xAAA141BC), UINT32_C(0x40862273)}, {UINT32_C(0xBD62237B), UINT32_C(0x926FFA4A), UINT32_C(0x7B942F48), UINT32_C(0xD4F1E4A1), UINT32_C(0x075684FD), UINT32_C(0x3A841EB7), UINT32_C(0xDD1807E1), UINT32_C(0x21F6EB39)}}, {{UINT32_C(0xBEDA4365), UINT32_C(0x155DFD66), UINT32_C(0x27F33BF9), UINT32_C(0xDD575C83), UINT32_C(0x3DFF83A1), UINT32_C(0x5907B08D), UINT32_C(0xD6788D63), UINT32_C(0x7E325357)}, {UINT32_C(0xBAC74ED7), UINT32_C(0xF90BF447), UINT32_C(0xEDA226CD), UINT32_C(0x2DE6C957), UINT32_C(0x1CA44607), UINT32_C(0x67832302), UINT32_C(0x56011C38), UINT32_C(0x22ECBC1F)}}, {{UINT32_C(0xB663A46C), UINT32_C(0xF01279A9), UINT32_C(0x7E3AAB83), UINT32_C(0x07D74C5F), UINT32_C(0x8C0DA43E), UINT32_C(0xF20940B6), UINT32_C(0x368AD991), UINT32_C(0x57C6A735)}, {UINT32_C(0x5007E059), UINT32_C(0x01E9B366), UINT32_C(0x9614D480), UINT32_C(0xFC38FC99), UINT32_C(0xFF7DA757), UINT32_C(0x4A3AAA18), UINT32_C(0xB0CE1B03), UINT32_C(0x4481B669)}}, {{UINT32_C(0xB4A807FF), UINT32_C(0x9CAA37A0), UINT32_C(0xF9B269F3), UINT32_C(0xBDEDEB49), UINT32_C(0xCB607AC3), UINT32_C(0xC5B76E57), UINT32_C(0x9A322F48), UINT32_C(0x08AEFE66)}, {UINT32_C(0xD9261469), UINT32_C(0x6919E40D), UINT32_C(0x849718FA), UINT32_C(0x1F0ADA81), UINT32_C(0x9D81628E), UINT32_C(0xCD251B54), UINT32_C(0x5505F9E1), UINT32_C(0x6519C3C6)}}, {{UINT32_C(0x2F81C037), UINT32_C(0x277591DC), UINT32_C(0x76E0D41E), UINT32_C(0xD63AD35A), UINT32_C(0x6EC063D3), UINT32_C(0x682662B5), UINT32_C(0x6762A0DB), UINT32_C(0x8210978B)}, {UINT32_C(0xFE164B90), UINT32_C(0x05085F68), UINT32_C(0x3D6FD0D1), UINT32_C(0x50026ADC), UINT32_C(0xB01A3791), UINT32_C(0x38CC9FA7), UINT32_C(0xB376F83E), UINT32_C(0x1E286652)}}, {{UINT32_C(0x09759892), UINT32_C(0x8DFFDA16), UINT32_C(0x9AC2CE5D), UINT32_C(0xE011DDDB), UINT32_C(0xBD71426B), UINT32_C(0xDDC7670F), UINT32_C(0x19742F7C), UINT32_C(0x9722A23B)}, {UINT32_C(0xDC4767D3), UINT32_C(0x2EA99893), UINT32_C(0x11125BAE), UINT32_C(0xCB68D6C2), UINT32_C(0x307ED3B9), UINT32_C(0xAC76953E), UINT32_C(0xC366E9A2), UINT32_C(0x0EDD0C17)}}, {{UINT32_C(0x484B5272), UINT32_C(0x88B3DEC9), UINT32_C(0x90380294), UINT32_C(0x0C848EA1), UINT32_C(0xA01AC92C), UINT32_C(0xDE187E83), UINT32_C(0x7A5D4D65), UINT32_C(0x2A880182)}, {UINT32_C(0xB3C3C7BB), UINT32_C(0xD3C22C2B), UINT32_C(0xDE7ECE33), UINT32_C(0xC485CE02), UINT32_C(0xA437071A), UINT32_C(0xF22138C4), UINT32_C(0x0716DA53), UINT32_C(0x23A55C89)}}, {{UINT32_C(0xF6FE058E), UINT32_C(0x9533C4A3), UINT32_C(0x748E4A4F), UINT32_C(0x28753F87), UINT32_C(0xEA404C70), UINT32_C(0x7814C50A), UINT32_C(0xE91B5EF3), UINT32_C(0x908D1C81)}, {UINT32_C(0x04094766), UINT32_C(0xD827D3CE), UINT32_C(0x0CE5C727), UINT32_C(0x7AE2FD26), UINT32_C(0xCDAD2BDD), UINT32_C(0x016AC86F), UINT32_C(0x7A77C252), UINT32_C(0x37C088B0)}}, {{UINT32_C(0x18A35CD3), UINT32_C(0xABF4C1EF), UINT32_C(0x698A5A01), UINT32_C(0x1F721491), UINT32_C(0x1A9E9A1F), UINT32_C(0x79284A12), UINT32_C(0x4D50DF40), UINT32_C(0x0457FF70)}, {UINT32_C(0xEC46ED07), UINT32_C(0x1D235814), UINT32_C(0xAE5E97C8), UINT32_C(0xBD013752), UINT32_C(0xD9B100D4), UINT32_C(0x0E085C88), UINT32_C(0x8858F9F3), UINT32_C(0x8AFA070A)}}, {{UINT32_C(0x698D6A59), UINT32_C(0x0F548BE3), UINT32_C(0xBF2D0D94), UINT32_C(0x5D7818A5), UINT32_C(0xD80E620D), UINT32_C(0x8E150DF1), UINT32_C(0xF857F167), UINT32_C(0x4C3A5E64)}, {UINT32_C(0x61BD9152), UINT32_C(0x837D9A98), UINT32_C(0x8D10687F), UINT32_C(0x242CE589), UINT32_C(0xB6B52BB7), UINT32_C(0x9863EA4C), UINT32_C(0xB7DD35FF), UINT32_C(0x23665B46)}}, {{UINT32_C(0x73942AAF), UINT32_C(0x3AA5432A), UINT32_C(0x0CEE83A9), UINT32_C(0xB0185DB4), UINT32_C(0xA83B907B), UINT32_C(0x145372EE), UINT32_C(0xBB6D341A), UINT32_C(0x609F1AD9)}, {UINT32_C(0x864C92EE), UINT32_C(0x28C2B37A), UINT32_C(0xD4CC1158), UINT32_C(0xDD847239), UINT32_C(0x8F2EAF0A), UINT32_C(0xE5BD4FD2), UINT32_C(0xD24950AB), UINT32_C(0x04F43BC0)}}, {{UINT32_C(0x88DA3F20), UINT32_C(0x11DEFCED), UINT32_C(0xA407C4A2), UINT32_C(0xCA4CE370), UINT32_C(0x2F8C5CFC), UINT32_C(0xEA70BEDF), UINT32_C(0x8214B7F7), UINT32_C(0x08AC147D)}, {UINT32_C(0xE260AA96), UINT32_C(0xECAD0F77), UINT32_C(0xB56C30F7), UINT32_C(0xA868AC63), UINT32_C(0x396F4815), UINT32_C(0xF0ACDE5A), UINT32_C(0xACDE6CD8), UINT32_C(0x302F75B9)}}, {{UINT32_C(0xC5D14866), UINT32_C(0x2125D07D), UINT32_C(0x4AE3212D), UINT32_C(0xFE563DE4), UINT32_C(0xEE9CAA2B), UINT32_C(0x0FE787CB), UINT32_C(0x53802482), UINT32_C(0x7D9B56A2)}, {UINT32_C(0x8040D1A7), UINT32_C(0x128B4D37), UINT32_C(0x30ACA2F4), UINT32_C(0x57371299), UINT32_C(0x7623D14A), UINT32_C(0x5C443E35), UINT32_C(0x5FDB6310), UINT32_C(0x6436D328)}}, {{UINT32_C(0xA8557B64), UINT32_C(0x531486A4), UINT32_C(0x9C5DE310), UINT32_C(0x3FAB4F21), UINT32_C(0x260468D0), UINT32_C(0xD872282E), UINT32_C(0x2542CBA4), UINT32_C(0x04CD4568)}, {UINT32_C(0x555B6E0C), UINT32_C(0xACA0975A), UINT32_C(0x8B85132F), UINT32_C(0xEE8C43B2), UINT32_C(0xB9DECE9D), UINT32_C(0xC768808B), UINT32_C(0x431AF98C), UINT32_C(0x59EDEC60)}}, {{UINT32_C(0x31992E22), UINT32_C(0xC365E133), UINT32_C(0x0DC3A4C8), UINT32_C(0xB96C5FA0), UINT32_C(0xA65761B0), UINT32_C(0xDEB1C1DA), UINT32_C(0xF4ACAB4C), UINT32_C(0x457676EE)}, {UINT32_C(0xE674FFAF), UINT32_C(0xA0F95894), UINT32_C(0xD65CDAB7), UINT32_C(0xFD099172), UINT32_C(0x54DA58A2), UINT32_C(0x9383C2F8), UINT32_C(0x0F24A07B), UINT32_C(0x0A4F4C11)}}, {{UINT32_C(0xE380ABF3), UINT32_C(0x9D7A80B3), UINT32_C(0x9E469F9F), UINT32_C(0xF0C6AC5A), UINT32_C(0x6BD0A324), UINT32_C(0xC87D5727), UINT32_C(0x7692B063), UINT32_C(0x28138E37)}, {UINT32_C(0xD67862CA), UINT32_C(0xE18C1F7D), UINT32_C(0x1E07F928), UINT32_C(0x4B6B723E), UINT32_C(0xBBCF4125), UINT32_C(0xAAFE3FB0), UINT32_C(0x3B3AE714), UINT32_C(0x25400322)}}, }, { {{UINT32_C(0x63C295D8), UINT32_C(0xB89A2DCA), UINT32_C(0x85041AA1), UINT32_C(0x5CC03C65), UINT32_C(0xC6514781), UINT32_C(0xFA9B4C5C), UINT32_C(0xD92388FF), UINT32_C(0x578031A0)}, {UINT32_C(0xF92C2D77), UINT32_C(0xB0D5AE0A), UINT32_C(0x793D588A), UINT32_C(0x945A677E), UINT32_C(0x34A190E0), UINT32_C(0x3722DE44), UINT32_C(0x0C2B9975), UINT32_C(0x6EA90DB8)}}, {{UINT32_C(0x84BA4F9B), UINT32_C(0xE987AA85), UINT32_C(0x0AB43BE6), UINT32_C(0xB2A77B9C), UINT32_C(0x474D8841), UINT32_C(0xC4AD2AF6), UINT32_C(0x5D4FA590), UINT32_C(0x4ED7A82B)}, {UINT32_C(0x9977AC2B), UINT32_C(0x9F39335E), UINT32_C(0x52E87607), UINT32_C(0x3CCD406D), UINT32_C(0x71456060), UINT32_C(0x9D18CB3F), UINT32_C(0x6A45D7D0), UINT32_C(0x0FE4D888)}}, {{UINT32_C(0xF42D501A), UINT32_C(0xAEA8A911), UINT32_C(0x88F66FBA), UINT32_C(0x303E25D5), UINT32_C(0x61740B85), UINT32_C(0x54213F29), UINT32_C(0xC0B4D835), UINT32_C(0x5BC13A30)}, {UINT32_C(0x4758EA28), UINT32_C(0x569AB9B8), UINT32_C(0xB796A794), UINT32_C(0xE2E49B28), UINT32_C(0x320D54E2), UINT32_C(0x17787125), UINT32_C(0xC54B4465), UINT32_C(0x5A6A8EDE)}}, {{UINT32_C(0x870619DD), UINT32_C(0xC76C73D9), UINT32_C(0x84FE1078), UINT32_C(0xF541440E), UINT32_C(0x3B26A3DC), UINT32_C(0x2082FE36), UINT32_C(0xCC329B14), UINT32_C(0x3B896B29)}, {UINT32_C(0xCAFCDC20), UINT32_C(0xB45028A9), UINT32_C(0x9C56757E), UINT32_C(0xA1B77C6F), UINT32_C(0x84802E47), UINT32_C(0xDE50D865), UINT32_C(0xBA0892B0), UINT32_C(0x7DFBC0E8)}}, {{UINT32_C(0x47E702BB), UINT32_C(0xEBC505A9), UINT32_C(0xDACFACFE), UINT32_C(0x2329A41C), UINT32_C(0x51DDCE2F), UINT32_C(0xEA115603), UINT32_C(0x2E9D855A), UINT32_C(0x95BBC807)}, {UINT32_C(0xCFD33E9F), UINT32_C(0x454C6B88), UINT32_C(0x4FFBB24A), UINT32_C(0x993CF6DE), UINT32_C(0x9B2144CD), UINT32_C(0xA8E22FF8), UINT32_C(0x84943294), UINT32_C(0x741066EE)}}, {{UINT32_C(0xF067E5B2), UINT32_C(0x2CEE0CFF), UINT32_C(0xCA95F1C5), UINT32_C(0x1C1FD5A3), UINT32_C(0xC07B97F1), UINT32_C(0xA0EB8E7D), UINT32_C(0x7457415E), UINT32_C(0x0F2A5D77)}, {UINT32_C(0x45D06291), UINT32_C(0xDFF92C58), UINT32_C(0x48ABABE8), UINT32_C(0x709EA0AC), UINT32_C(0x2FDC92F0), UINT32_C(0xB3058FEB), UINT32_C(0x5E5B169E), UINT32_C(0x55E9F86E)}}, {{UINT32_C(0xEBF6AF2B), UINT32_C(0xEE5DF132), UINT32_C(0xF642A206), UINT32_C(0xC30DC3F1), UINT32_C(0x02C60CB6), UINT32_C(0xD7D8EC3E), UINT32_C(0x3178F1BF), UINT32_C(0x7C98946B)}, {UINT32_C(0xA68799EB), UINT32_C(0x816C2AA1), UINT32_C(0x2430F06B), UINT32_C(0x507FD5E9), UINT32_C(0xB9EBD4B7), UINT32_C(0x021FFF1C), UINT32_C(0x8AECFEA4), UINT32_C(0x044365E6)}}, {{UINT32_C(0x21339693), UINT32_C(0xDC5F5EA6), UINT32_C(0x90A448AD), UINT32_C(0x5BFD2676), UINT32_C(0xA12A9D77), UINT32_C(0xF712BA95), UINT32_C(0xBD8A6B5B), UINT32_C(0x7104735A)}, {UINT32_C(0xA763BB99), UINT32_C(0xD2ED8304), UINT32_C(0x11B91A05), UINT32_C(0x7AF040F0), UINT32_C(0xB61F3789), UINT32_C(0xC545E8AE), UINT32_C(0xBB386760), UINT32_C(0x582E9EED)}}, {{UINT32_C(0xCC099185), UINT32_C(0x0FCE5877), UINT32_C(0xCD681E67), UINT32_C(0x0E148BB5), UINT32_C(0xECB24ECE), UINT32_C(0xE9F9013E), UINT32_C(0x2A386485), UINT32_C(0x0090654B)}, {UINT32_C(0x0520BAE8), UINT32_C(0x11BA700B), UINT32_C(0xD8E53123), UINT32_C(0xFC93BE31), UINT32_C(0xE37948EE), UINT32_C(0x7DD7CB36), UINT32_C(0x3FC23444), UINT32_C(0x8689AE8F)}}, {{UINT32_C(0xAAC6616B), UINT32_C(0x2060F7DE), UINT32_C(0xDEAB3CC7), UINT32_C(0x372952C5), UINT32_C(0xC2424ACD), UINT32_C(0x715C4D27), UINT32_C(0x0308A009), UINT32_C(0x05846856)}, {UINT32_C(0x0B8B34E8), UINT32_C(0x887BBD55), UINT32_C(0xB688C987), UINT32_C(0x949ACBD1), UINT32_C(0x784C4C0E), UINT32_C(0x3E774D49), UINT32_C(0xB0F5F545), UINT32_C(0x7AEA2D11)}}, {{UINT32_C(0xE831E509), UINT32_C(0x5335BA6B), UINT32_C(0x739F332E), UINT32_C(0x8FC4B4AF), UINT32_C(0x95993EAF), UINT32_C(0xB0502462), UINT32_C(0xA7CEB88B), UINT32_C(0x7DA49F36)}, {UINT32_C(0x029D0C8F), UINT32_C(0x3BE0B74B), UINT32_C(0x55611A8B), UINT32_C(0xBC07F180), UINT32_C(0x6583F53F), UINT32_C(0xC168CF41), UINT32_C(0xC34ADBC1), UINT32_C(0x4256E8D2)}}, {{UINT32_C(0xCE2FCD89), UINT32_C(0x313AFC75), UINT32_C(0xD3DA44F2), UINT32_C(0xEA27FDA4), UINT32_C(0x9063B0DC), UINT32_C(0x9FABEA79), UINT32_C(0xB3418884), UINT32_C(0x2DF7D966)}, {UINT32_C(0x80AF2EBD), UINT32_C(0x4329FD24), UINT32_C(0x9F095D30), UINT32_C(0x36F27FF7), UINT32_C(0xCC84C068), UINT32_C(0x88FFB18F), UINT32_C(0x7B0A9906), UINT32_C(0x976427A8)}}, {{UINT32_C(0xFAC21087), UINT32_C(0xCFF828CC), UINT32_C(0x56863CB5), UINT32_C(0x6B6D3484), UINT32_C(0xC30879F3), UINT32_C(0x14163A70), UINT32_C(0x8CA6FD5D), UINT32_C(0x30E2A633)}, {UINT32_C(0x28A58783), UINT32_C(0xC7FCEAD6), UINT32_C(0xEEFA1EAA), UINT32_C(0x945F7B09), UINT32_C(0x5CC66267), UINT32_C(0x98A503DB), UINT32_C(0x3780061B), UINT32_C(0x83EE750E)}}, {{UINT32_C(0xB8477D6B), UINT32_C(0x7061409A), UINT32_C(0x2B7B54FA), UINT32_C(0xE47C779D), UINT32_C(0xF293166C), UINT32_C(0x42F5EDF5), UINT32_C(0x115D830F), UINT32_C(0x73C3AC1B)}, {UINT32_C(0x4DEE0980), UINT32_C(0xC30D346E), UINT32_C(0xA62F0D09), UINT32_C(0xEE0D9A29), UINT32_C(0xABCB7DAE), UINT32_C(0xBBE8DC9E), UINT32_C(0x68B78925), UINT32_C(0x4F0E78C0)}}, {{UINT32_C(0xB4B14003), UINT32_C(0x25A0D4FF), UINT32_C(0xB8AB649C), UINT32_C(0xA4C3AC55), UINT32_C(0x27F9FDF5), UINT32_C(0x7D7EDE72), UINT32_C(0xBC2A46D4), UINT32_C(0x507EC83F)}, {UINT32_C(0xFAAFC26F), UINT32_C(0x344577D9), UINT32_C(0x3EB30156), UINT32_C(0x77CBB783), UINT32_C(0x1D5C9367), UINT32_C(0x3A846FFD), UINT32_C(0x9DF9F7BE), UINT32_C(0x5F0D280C)}}, {{UINT32_C(0x77DF7F9F), UINT32_C(0xCC8EAC0A), UINT32_C(0xF33A62D4), UINT32_C(0x195BC6FF), UINT32_C(0x524D78FE), UINT32_C(0x18A33FFA), UINT32_C(0x6603F9C0), UINT32_C(0x10E58974)}, {UINT32_C(0x0CDA2C3F), UINT32_C(0x31AF4B46), UINT32_C(0xADE169C3), UINT32_C(0xDDBF00C8), UINT32_C(0x71A7BC38), UINT32_C(0xA169C3E3), UINT32_C(0xA64B342E), UINT32_C(0x3FC352FF)}}, }, { {{UINT32_C(0xEE73C673), UINT32_C(0x58848315), UINT32_C(0x8ADB897E), UINT32_C(0x67D2F7C0), UINT32_C(0xF0658115), UINT32_C(0xE8CD786D), UINT32_C(0xAC54D2AB), UINT32_C(0x023D515A)}, {UINT32_C(0x67559911), UINT32_C(0x0EDE61D8), UINT32_C(0x3C2B78B5), UINT32_C(0xBC12B106), UINT32_C(0x9E4707D8), UINT32_C(0xB5661A28), UINT32_C(0xADC095A4), UINT32_C(0x93FB4096)}}, {{UINT32_C(0x33D5FA08), UINT32_C(0xEEB3810F), UINT32_C(0x33F4CAAF), UINT32_C(0x8D8FC354), UINT32_C(0x29EB08A3), UINT32_C(0xED870516), UINT32_C(0xD1D31EBC), UINT32_C(0x89FD91CA)}, {UINT32_C(0xEDE2494B), UINT32_C(0xD2F1F832), UINT32_C(0xFA8EEA95), UINT32_C(0xCFEE1D77), UINT32_C(0x3B0F005C), UINT32_C(0x13603C4A), UINT32_C(0xD9EF68F4), UINT32_C(0x6DF97F85)}}, {{UINT32_C(0x55410512), UINT32_C(0x578FBC0A), UINT32_C(0xDEC79EEE), UINT32_C(0x1FA404F2), UINT32_C(0x92B60820), UINT32_C(0x201FE215), UINT32_C(0x0A56193A), UINT32_C(0x9A9B3CE8)}, {UINT32_C(0x10B49800), UINT32_C(0x8A5ECCB9), UINT32_C(0xBFDB1D8E), UINT32_C(0xA7373AEB), UINT32_C(0x4944B5DF), UINT32_C(0x8996BEFA), UINT32_C(0x7B44246C), UINT32_C(0x3102D3C0)}}, {{UINT32_C(0x449C09BE), UINT32_C(0xD4A853B7), UINT32_C(0x51DDB7FE), UINT32_C(0x1F7080A4), UINT32_C(0xE1C27FC1), UINT32_C(0x8A9DE52C), UINT32_C(0x0C58B99D), UINT32_C(0x6585B54F)}, {UINT32_C(0xB5A4AB53), UINT32_C(0x8EEB0601), UINT32_C(0x48C73AC6), UINT32_C(0x977D658D), UINT32_C(0x3D9BD223), UINT32_C(0xD5DA0903), UINT32_C(0xBE115965), UINT32_C(0x881A5838)}}, {{UINT32_C(0xEB3FC303), UINT32_C(0x8EB70B77), UINT32_C(0x98BDB841), UINT32_C(0xED1C4DEF), UINT32_C(0x997DE9E4), UINT32_C(0x13E6BE06), UINT32_C(0x9334D46D), UINT32_C(0x4A94C0A1)}, {UINT32_C(0x0F867DAF), UINT32_C(0x184C17C8), UINT32_C(0x33A64148), UINT32_C(0x4A658026), UINT32_C(0x0AE3D4AA), UINT32_C(0xD177F009), UINT32_C(0x98ED12C0), UINT32_C(0x8134AC8F)}}, {{UINT32_C(0x7A58DDEC), UINT32_C(0x7A308A00), UINT32_C(0xFDF92DF2), UINT32_C(0x74A15C5F), UINT32_C(0x21B4E345), UINT32_C(0x210D260E), UINT32_C(0xC651E31E), UINT32_C(0x6446715B)}, {UINT32_C(0x10B905B6), UINT32_C(0xB1AF1F84), UINT32_C(0xA62D366F), UINT32_C(0xEF6CD0F2), UINT32_C(0xD1F6B7E3), UINT32_C(0x77E47B01), UINT32_C(0x2B95BD12), UINT32_C(0x0F38B280)}}, {{UINT32_C(0x8CCCDAE6), UINT32_C(0x52DA30E1), UINT32_C(0xBD86A13A), UINT32_C(0x9F3D6636), UINT32_C(0xF4EA6151), UINT32_C(0xADFA00C5), UINT32_C(0x1EC37639), UINT32_C(0x6B93BFA0)}, {UINT32_C(0xF8FE22FC), UINT32_C(0x443F0023), UINT32_C(0xA81FEACC), UINT32_C(0xCB7848A4), UINT32_C(0x517E9E61), UINT32_C(0xCE5E650A), UINT32_C(0xA1968E3D), UINT32_C(0x5842DB7D)}}, {{UINT32_C(0x98C06F78), UINT32_C(0x61DDC694), UINT32_C(0x7985B1A2), UINT32_C(0x680FEDE9), UINT32_C(0xFB53A327), UINT32_C(0x214CD2B8), UINT32_C(0xE425132B), UINT32_C(0x98EAC0B3)}, {UINT32_C(0x33E5766D), UINT32_C(0x5EEDD76D), UINT32_C(0x540000A3), UINT32_C(0x5B280618), UINT32_C(0x65C894AE), UINT32_C(0x915D55CB), UINT32_C(0xD20D9523), UINT32_C(0x7B088A36)}}, {{UINT32_C(0xC28DA278), UINT32_C(0x51A47312), UINT32_C(0xEFE64521), UINT32_C(0xE315CBA4), UINT32_C(0x49D8D0FF), UINT32_C(0x3EF70A18), UINT32_C(0xCABD48C5), UINT32_C(0x0990CB92)}, {UINT32_C(0xA7C2FC76), UINT32_C(0x22ED6302), UINT32_C(0x2CB98186), UINT32_C(0xB50370EA), UINT32_C(0xF3F2BA8B), UINT32_C(0xDEA88C65), UINT32_C(0x09FEDEEA), UINT32_C(0x09062451)}}, {{UINT32_C(0xDAC0F222), UINT32_C(0x742F9A2E), UINT32_C(0x95C88A8E), UINT32_C(0xE2A8842B), UINT32_C(0x9D817B14), UINT32_C(0x80C05765), UINT32_C(0x982D49AE), UINT32_C(0x7ED0521A)}, {UINT32_C(0x907B10F7), UINT32_C(0x047E49D4), UINT32_C(0xDE8AD4CD), UINT32_C(0x8A3E23A7), UINT32_C(0xEB5292B1), UINT32_C(0xEBE8C13F), UINT32_C(0xA7EB70BD), UINT32_C(0x048A6209)}}, {{UINT32_C(0x9AA34851), UINT32_C(0xB51665A0), UINT32_C(0x7C4AFCEE), UINT32_C(0x4DD5AC1B), UINT32_C(0x25A21937), UINT32_C(0x00DEE7AB), UINT32_C(0x80FAF232), UINT32_C(0x88E2681E)}, {UINT32_C(0xB5411EE2), UINT32_C(0x79ECD66A), UINT32_C(0xF370BF53), UINT32_C(0x06008CE3), UINT32_C(0xC9BBB64C), UINT32_C(0xCFB1850E), UINT32_C(0x7149B14E), UINT32_C(0x5FBACB27)}}, {{UINT32_C(0x9938AA0C), UINT32_C(0xA1F0EE07), UINT32_C(0x74CCE9C4), UINT32_C(0x6945E2BA), UINT32_C(0x46A98BEA), UINT32_C(0x16689FCE), UINT32_C(0xCF67DF91), UINT32_C(0x8D71F405)}, {UINT32_C(0x69621150), UINT32_C(0x71E4CAC8), UINT32_C(0x89B380D8), UINT32_C(0x518FA200), UINT32_C(0x53F9E660), UINT32_C(0x3B3B85F1), UINT32_C(0xC6D9B022), UINT32_C(0x02643303)}}, {{UINT32_C(0x07660C3E), UINT32_C(0xE8C478EC), UINT32_C(0xEF41F1DA), UINT32_C(0xA906C3A1), UINT32_C(0x46699B71), UINT32_C(0xE918F160), UINT32_C(0xE5BE7B36), UINT32_C(0x2B8A0B0E)}, {UINT32_C(0x889F50A0), UINT32_C(0xC663F0EC), UINT32_C(0xF9214F81), UINT32_C(0x7413264B), UINT32_C(0x421A9087), UINT32_C(0x2E9FA9A0), UINT32_C(0x83546DCD), UINT32_C(0x85C59B7C)}}, {{UINT32_C(0x8D920A29), UINT32_C(0xB4A6CF39), UINT32_C(0x1B3956A1), UINT32_C(0xC857AF48), UINT32_C(0xDD794B23), UINT32_C(0x519C7371), UINT32_C(0x8EFBF8F9), UINT32_C(0x47846220)}, {UINT32_C(0x617E4C6C), UINT32_C(0x184C25E5), UINT32_C(0xD2E51A5E), UINT32_C(0x218FCC23), UINT32_C(0x28FA0FFC), UINT32_C(0xB4219719), UINT32_C(0x781A61D9), UINT32_C(0x6C0BCD71)}}, {{UINT32_C(0xDC7B5568), UINT32_C(0x440D6DDF), UINT32_C(0x0DBBEC7C), UINT32_C(0x64C7CC31), UINT32_C(0xA2DC0CBA), UINT32_C(0x63D16D4E), UINT32_C(0x4504BE2C), UINT32_C(0x7BD9E0CC)}, {UINT32_C(0x2DE780A8), UINT32_C(0x9C882895), UINT32_C(0xEF2B2486), UINT32_C(0x7C6685C2), UINT32_C(0x957FA7D8), UINT32_C(0xF1FB09E9), UINT32_C(0x46A77A98), UINT32_C(0x20C6B5A5)}}, {{UINT32_C(0x33C0F0C1), UINT32_C(0x60C77573), UINT32_C(0xCADDA5FE), UINT32_C(0x40C93227), UINT32_C(0x9DD41D5F), UINT32_C(0xA48EBAA2), UINT32_C(0xEA9FD5AD), UINT32_C(0x4AAFBF3C)}, {UINT32_C(0xC5A287BA), UINT32_C(0x7EB61836), UINT32_C(0xB31BA25E), UINT32_C(0x1D6A1BA2), UINT32_C(0xAD186E52), UINT32_C(0x60507257), UINT32_C(0x2BAB7451), UINT32_C(0x7FEC8EB0)}}, }, { {{UINT32_C(0xB8DA5FFE), UINT32_C(0x500E2FDB), UINT32_C(0x8CDD1B39), UINT32_C(0x6AE2D4EA), UINT32_C(0x1A5840CD), UINT32_C(0x38D12025), UINT32_C(0xC214D26D), UINT32_C(0x8D3B20CB)}, {UINT32_C(0xC041E874), UINT32_C(0xEF6BB36C), UINT32_C(0x450F2218), UINT32_C(0x67660393), UINT32_C(0xA892BDFD), UINT32_C(0x1E1B7782), UINT32_C(0x8D962E62), UINT32_C(0x2D69514C)}}, {{UINT32_C(0x9631B095), UINT32_C(0x9EDF5F78), UINT32_C(0x45BF8F20), UINT32_C(0xAC7DD687), UINT32_C(0xE3262EBC), UINT32_C(0x257CCE28), UINT32_C(0xE0E480A6), UINT32_C(0x5D32EFCB)}, {UINT32_C(0x6FBB99E8), UINT32_C(0xED48E34C), UINT32_C(0x23FDE9B7), UINT32_C(0x50B1D58C), UINT32_C(0x6B6927C8), UINT32_C(0xC5164C2A), UINT32_C(0x8906B705), UINT32_C(0x8A0BC606)}}, {{UINT32_C(0x2F747DA8), UINT32_C(0x3FA3C7C9), UINT32_C(0x14938E08), UINT32_C(0x2E8D2C2E), UINT32_C(0xB6A1C720), UINT32_C(0x155A8A5B), UINT32_C(0xB3133FD0), UINT32_C(0x6B4D8C9E)}, {UINT32_C(0xCE131C1D), UINT32_C(0x079AC7F1), UINT32_C(0x815B7D2B), UINT32_C(0x9CF419AF), UINT32_C(0xE60B6245), UINT32_C(0x569EB7BA), UINT32_C(0x9A3DD94E), UINT32_C(0x03C79E60)}}, {{UINT32_C(0xB9CE9502), UINT32_C(0x328F5296), UINT32_C(0xE45C3576), UINT32_C(0xCA44ADBD), UINT32_C(0x6194AE2C), UINT32_C(0x66987952), UINT32_C(0xBF9B8C49), UINT32_C(0x5875F8EF)}, {UINT32_C(0xDA51CAB8), UINT32_C(0x525A4D53), UINT32_C(0x9DC268B2), UINT32_C(0x91A592DD), UINT32_C(0xE1E3C168), UINT32_C(0xD7EA7958), UINT32_C(0xA999ED30), UINT32_C(0x0D1E20E0)}}, {{UINT32_C(0xFE8AD270), UINT32_C(0x55DA34E5), UINT32_C(0x61EC55F6), UINT32_C(0xB0412895), UINT32_C(0x534569C9), UINT32_C(0x0D45670F), UINT32_C(0xE23F69FB), UINT32_C(0x5A7E6764)}, {UINT32_C(0xA8B28676), UINT32_C(0xBB6BBEC9), UINT32_C(0x093B0D1D), UINT32_C(0x4F924558), UINT32_C(0x0C29D841), UINT32_C(0xD4E4BF12), UINT32_C(0x578A237A), UINT32_C(0x67D2B4C8)}}, {{UINT32_C(0x63EF2D73), UINT32_C(0x0BDF32D6), UINT32_C(0x4AE4303C), UINT32_C(0x7248DD2D), UINT32_C(0x6CE1E92A), UINT32_C(0xBB61BAB5), UINT32_C(0x1D7B9A6C), UINT32_C(0x126166E9)}, {UINT32_C(0x11CEBC3C), UINT32_C(0x4CE7086A), UINT32_C(0x1C71426F), UINT32_C(0xE7ACB25E), UINT32_C(0x432CC4AF), UINT32_C(0xBFB65EDC), UINT32_C(0xCB018CF7), UINT32_C(0x3BCA5202)}}, {{UINT32_C(0x76430A87), UINT32_C(0xACF034F2), UINT32_C(0x534C42ED), UINT32_C(0xBFDF19B3), UINT32_C(0x7946CB1A), UINT32_C(0x05654FE6), UINT32_C(0x80F17880), UINT32_C(0x0DB07E79)}, {UINT32_C(0xFDCF8BC9), UINT32_C(0xE6E93101), UINT32_C(0xF798A8CD), UINT32_C(0xF3198B87), UINT32_C(0xC9683420), UINT32_C(0xC05444EF), UINT32_C(0x915D1BF1), UINT32_C(0x56E9AA68)}}, {{UINT32_C(0x34000B11), UINT32_C(0xF27B298B), UINT32_C(0xF4196E50), UINT32_C(0x70ED8C95), UINT32_C(0x233C8764), UINT32_C(0xF3E16608), UINT32_C(0x41881557), UINT32_C(0x5B97655A)}, {UINT32_C(0x128C195B), UINT32_C(0x5BF11C1A), UINT32_C(0x372C286D), UINT32_C(0xFFB64333), UINT32_C(0x7C83BB31), UINT32_C(0x084D3EF7), UINT32_C(0x745B7D75), UINT32_C(0x8ECF6C01)}}, {{UINT32_C(0xC6F4FF82), UINT32_C(0x3D6052B9), UINT32_C(0x6607892F), UINT32_C(0x9305FE45), UINT32_C(0x5879425F), UINT32_C(0x232FD87E), UINT32_C(0xD6F47350), UINT32_C(0x4CAEDF73)}, {UINT32_C(0x032FC50D), UINT32_C(0x889243D2), UINT32_C(0x0C9C11AC), UINT32_C(0xA6AF69D7), UINT32_C(0x802E8E06), UINT32_C(0x43B5429D), UINT32_C(0xD70FC802), UINT32_C(0x38F1DEA8)}}, {{UINT32_C(0xC9595C08), UINT32_C(0x54F24344), UINT32_C(0x0240AAB3), UINT32_C(0x95A2E8FB), UINT32_C(0xC3544985), UINT32_C(0x07A5109D), UINT32_C(0xB5D30899), UINT32_C(0x96F44213)}, {UINT32_C(0xAA347497), UINT32_C(0x03FAB192), UINT32_C(0xC9CFC073), UINT32_C(0x47FFD3DE), UINT32_C(0xD2C1D57F), UINT32_C(0x283AD765), UINT32_C(0x62DC271A), UINT32_C(0x1FDFFBAC)}}, {{UINT32_C(0x95F80CA6), UINT32_C(0x2355C629), UINT32_C(0xCD8D880A), UINT32_C(0x90AE1DBB), UINT32_C(0xC54117E0), UINT32_C(0x563CC122), UINT32_C(0x813D7481), UINT32_C(0x1EF4991B)}, {UINT32_C(0xCCE9AEDE), UINT32_C(0x8A310D77), UINT32_C(0x9318642E), UINT32_C(0xA401FAEF), UINT32_C(0xCF9AFDCB), UINT32_C(0xC1712A67), UINT32_C(0xBE499DE5), UINT32_C(0x8D97374C)}}, {{UINT32_C(0x55A0BC07), UINT32_C(0x7437AA3B), UINT32_C(0xF726DD81), UINT32_C(0x004946D0), UINT32_C(0x0F341860), UINT32_C(0x33D41D1B), UINT32_C(0x17840F0D), UINT32_C(0x2A009EB5)}, {UINT32_C(0xAA0DCDCF), UINT32_C(0x158F59AE), UINT32_C(0xEAB42135), UINT32_C(0xF686EF2D), UINT32_C(0x7A80C670), UINT32_C(0xFF6B8E82), UINT32_C(0xA04DF944), UINT32_C(0x38646963)}}, {{UINT32_C(0x4B987E90), UINT32_C(0x6BB2705E), UINT32_C(0xD3C36316), UINT32_C(0x2F5E2C4D), UINT32_C(0xE5A9ECEC), UINT32_C(0x41B38905), UINT32_C(0x55BF8D1A), UINT32_C(0x2C6BA681)}, {UINT32_C(0x3C92B20B), UINT32_C(0x1121B3B2), UINT32_C(0x904305D5), UINT32_C(0x6DE41B12), UINT32_C(0xD569EAC4), UINT32_C(0xA0496CF4), UINT32_C(0x11E5CF90), UINT32_C(0x5C64A06C)}}, {{UINT32_C(0xE28783DF), UINT32_C(0xA65F12AB), UINT32_C(0x37322285), UINT32_C(0x2A891B0F), UINT32_C(0x9811C4EB), UINT32_C(0xD6FF4604), UINT32_C(0xA8505AC0), UINT32_C(0x7C960ED5)}, {UINT32_C(0x2FCA110D), UINT32_C(0xE8689377), UINT32_C(0x60FD893E), UINT32_C(0x71AAE292), UINT32_C(0x7505671D), UINT32_C(0x8ADE5317), UINT32_C(0x8C508791), UINT32_C(0x721A07A5)}}, {{UINT32_C(0xE5ECCA8C), UINT32_C(0xC1AE9A50), UINT32_C(0x07EB4329), UINT32_C(0x7528AEF5), UINT32_C(0xD1297D88), UINT32_C(0x8F0D0E03), UINT32_C(0x244BBC0C), UINT32_C(0x27C7BF76)}, {UINT32_C(0xC7E7E9BB), UINT32_C(0x96EEDA7C), UINT32_C(0xF96C99B3), UINT32_C(0xC9749BF7), UINT32_C(0x467B4D43), UINT32_C(0x44C852D2), UINT32_C(0x937FA21D), UINT32_C(0x1691D71D)}}, {{UINT32_C(0xF8058A68), UINT32_C(0x8CAC092F), UINT32_C(0xDAE38445), UINT32_C(0x6B892BCF), UINT32_C(0x97D76059), UINT32_C(0x82CBECE5), UINT32_C(0x3518F9E2), UINT32_C(0x5AEB6646)}, {UINT32_C(0x392080B4), UINT32_C(0xA39C710C), UINT32_C(0x1502DE54), UINT32_C(0x575DC5F4), UINT32_C(0x3A3D2B4D), UINT32_C(0xA465DD5E), UINT32_C(0x638EAF45), UINT32_C(0x281AAE47)}}, }, { {{UINT32_C(0xE955A145), UINT32_C(0xBE40C92B), UINT32_C(0x324234B5), UINT32_C(0xD464D6BC), UINT32_C(0xB09D4AF8), UINT32_C(0xE8084747), UINT32_C(0x5268D6C3), UINT32_C(0x939C70BF)}, {UINT32_C(0xD1DDBB48), UINT32_C(0x9C9C9D25), UINT32_C(0x790B5B42), UINT32_C(0x30D9EA7F), UINT32_C(0x4E3914B4), UINT32_C(0x367FD79B), UINT32_C(0x826EE4D7), UINT32_C(0x27615F29)}}, {{UINT32_C(0x50A41246), UINT32_C(0x09BB6F16), UINT32_C(0xE5459A13), UINT32_C(0xC72BFF7A), UINT32_C(0xFF09B2F7), UINT32_C(0x0FC15846), UINT32_C(0x09CB693A), UINT32_C(0x6D904062)}, {UINT32_C(0xF40FC67D), UINT32_C(0x98A132F8), UINT32_C(0xDF37CBFA), UINT32_C(0xC8B6573B), UINT32_C(0x99D7FC36), UINT32_C(0xC9CF9948), UINT32_C(0xA7235DDB), UINT32_C(0x0DD66ABA)}}, {{UINT32_C(0xF96048BD), UINT32_C(0x0180B525), UINT32_C(0x544F1E70), UINT32_C(0xEB566786), UINT32_C(0x8EF4373C), UINT32_C(0x8BABBF9B), UINT32_C(0xD9E49178), UINT32_C(0x509BA431)}, {UINT32_C(0x65A4A201), UINT32_C(0xF961A6F5), UINT32_C(0x8D44ED2D), UINT32_C(0xB6621DF9), UINT32_C(0xD7B4D744), UINT32_C(0xEADD3C0C), UINT32_C(0x0EAAB110), UINT32_C(0x75D27E99)}}, {{UINT32_C(0x85DF5695), UINT32_C(0xEAC7AC76), UINT32_C(0xDA7540A3), UINT32_C(0x02C26274), UINT32_C(0xC659B610), UINT32_C(0xDEC1BBC4), UINT32_C(0x3AC61EEB), UINT32_C(0x54483C1B)}, {UINT32_C(0x217E0283), UINT32_C(0x8B91209A), UINT32_C(0x3A17DDFE), UINT32_C(0x939FBDAF), UINT32_C(0x5BF98726), UINT32_C(0xA82C66D6), UINT32_C(0x915AAC76), UINT32_C(0x2BA82FA0)}}, {{UINT32_C(0xAF4542E8), UINT32_C(0x99B324C1), UINT32_C(0xC0F225E0), UINT32_C(0x16EBC66F), UINT32_C(0x27FEF57B), UINT32_C(0xEAE69563), UINT32_C(0x961B03FA), UINT32_C(0x2996FE3C)}, {UINT32_C(0x4F967A68), UINT32_C(0x0835212E), UINT32_C(0xF44352DC), UINT32_C(0x0AAABD99), UINT32_C(0x4B3A6B8D), UINT32_C(0x1874255F), UINT32_C(0x6D10B369), UINT32_C(0x45F5D8B2)}}, {{UINT32_C(0xF7B7644B), UINT32_C(0x603DD497), UINT32_C(0x2D1386AA), UINT32_C(0x369BE676), UINT32_C(0x14C9FA94), UINT32_C(0x08C1B763), UINT32_C(0x384AF696), UINT32_C(0x734921D9)}, {UINT32_C(0xD76E8EEB), UINT32_C(0xA1B5AF5B), UINT32_C(0x42F990E8), UINT32_C(0xB0EAE7A3), UINT32_C(0x069ED81D), UINT32_C(0x59E7C515), UINT32_C(0xB5A50610), UINT32_C(0x2D1B5E62)}}, {{UINT32_C(0x85995BD3), UINT32_C(0xDC322810), UINT32_C(0x873E7A09), UINT32_C(0x35A47B05), UINT32_C(0xA70DE932), UINT32_C(0x0CDFE9BB), UINT32_C(0xD62FBC89), UINT32_C(0x049B899D)}, {UINT32_C(0x652291DB), UINT32_C(0xF6BAA860), UINT32_C(0x9AF7478F), UINT32_C(0x58123B25), UINT32_C(0x47B9F204), UINT32_C(0xA05CCBC2), UINT32_C(0x82D999A7), UINT32_C(0x8A0B479D)}}, {{UINT32_C(0x2D0F619A), UINT32_C(0xA72B9B52), UINT32_C(0x5919C420), UINT32_C(0xE73B66F7), UINT32_C(0xD21CFEFE), UINT32_C(0x92319C86), UINT32_C(0xF1635F0E), UINT32_C(0x58EEFC71)}, {UINT32_C(0xDA909290), UINT32_C(0xDC481783), UINT32_C(0x66316584), UINT32_C(0x144E7A98), UINT32_C(0x45E1E3C8), UINT32_C(0xBD7E657F), UINT32_C(0xBD93938C), UINT32_C(0x5C9FCD1C)}}, {{UINT32_C(0x436C1AB3), UINT32_C(0x2339E2FA), UINT32_C(0xC26768AA), UINT32_C(0x69C22269), UINT32_C(0x40FCBD90), UINT32_C(0x94DFCAF4), UINT32_C(0xC41D4F61), UINT32_C(0x56235739)}, {UINT32_C(0x718468D3), UINT32_C(0x6E50D4DB), UINT32_C(0xCADCEC6C), UINT32_C(0xDEA80730), UINT32_C(0x63DC3C43), UINT32_C(0x924FF97E), UINT32_C(0x6752EA6A), UINT32_C(0x1B652825)}}, {{UINT32_C(0xF07BE4BB), UINT32_C(0xAC2BDCDD), UINT32_C(0x8DB0A32D), UINT32_C(0xB46D8E96), UINT32_C(0xB618488D), UINT32_C(0xDD661C68), UINT32_C(0x75E1E4BF), UINT32_C(0x8ED22D4B)}, {UINT32_C(0x3C177D80), UINT32_C(0x5DD2E5DF), UINT32_C(0x82803711), UINT32_C(0x5049C012), UINT32_C(0x73E0BA27), UINT32_C(0xFB243B3F), UINT32_C(0x8C7810D5), UINT32_C(0x0C756BA0)}}, {{UINT32_C(0x6F16FBCA), UINT32_C(0xFC58F0BD), UINT32_C(0xA5E33B36), UINT32_C(0xA855BB8C), UINT32_C(0x99D08247), UINT32_C(0xB9239EB4), UINT32_C(0x49CAF40D), UINT32_C(0x27ABC78D)}, {UINT32_C(0xA1285278), UINT32_C(0x88BE1595), UINT32_C(0x60F16638), UINT32_C(0x9D5AEE5B), UINT32_C(0x1FCE4327), UINT32_C(0x3F381529), UINT32_C(0xF19CAA04), UINT32_C(0x17206899)}}, {{UINT32_C(0x9E047F55), UINT32_C(0x58616348), UINT32_C(0xE991FC4C), UINT32_C(0x0D6098A5), UINT32_C(0x99A33914), UINT32_C(0x47760F98), UINT32_C(0x5608C80E), UINT32_C(0x70C8F5D4)}, {UINT32_C(0x06036DBE), UINT32_C(0x405F1191), UINT32_C(0x80CC0A27), UINT32_C(0xBF625895), UINT32_C(0x389FA7BF), UINT32_C(0xFB8A0330), UINT32_C(0x1FA0CBB4), UINT32_C(0x22B0B946)}}, {{UINT32_C(0x1B1E2ACD), UINT32_C(0x84AE1981), UINT32_C(0x63961891), UINT32_C(0xFA23C205), UINT32_C(0x742C1653), UINT32_C(0xCF4C685E), UINT32_C(0x4D303078), UINT32_C(0x55BFC744)}, {UINT32_C(0xBA03AAE4), UINT32_C(0xEB131CBB), UINT32_C(0x2C5B9EAB), UINT32_C(0xF338C0DB), UINT32_C(0xB7495209), UINT32_C(0xC1006396), UINT32_C(0xF7E6A4E6), UINT32_C(0x0FD928CF)}}, {{UINT32_C(0x8633AB84), UINT32_C(0xA6BAC994), UINT32_C(0x75364642), UINT32_C(0xC165BF5A), UINT32_C(0x8C57070D), UINT32_C(0xB70BEB47), UINT32_C(0xD416322E), UINT32_C(0x838158A0)}, {UINT32_C(0xD4957751), UINT32_C(0x501D2BFD), UINT32_C(0xC23AA730), UINT32_C(0xF1CDDF32), UINT32_C(0x5458F1C6), UINT32_C(0xF64558A8), UINT32_C(0x06E1209C), UINT32_C(0x51B6DDE3)}}, {{UINT32_C(0xCC31D6BE), UINT32_C(0x0712C186), UINT32_C(0x33CD1D3F), UINT32_C(0x91C4064A), UINT32_C(0xC7C91F53), UINT32_C(0xCADAE5B0), UINT32_C(0xDEB2A2EE), UINT32_C(0x52AA408F)}, {UINT32_C(0x202719D5), UINT32_C(0x058675CC), UINT32_C(0x1D087D07), UINT32_C(0x444F99F5), UINT32_C(0x9D7A8AF4), UINT32_C(0x4DB587E8), UINT32_C(0xDA17095A), UINT32_C(0x389376F5)}}, {{UINT32_C(0x48FED385), UINT32_C(0x8262D370), UINT32_C(0x1AE92689), UINT32_C(0x3B1FB466), UINT32_C(0x24242CF4), UINT32_C(0xDA6F570F), UINT32_C(0x0DEAC5E9), UINT32_C(0x0532FC9E)}, {UINT32_C(0x20C5BD7B), UINT32_C(0x5E8FB740), UINT32_C(0x002624B3), UINT32_C(0x5AE99925), UINT32_C(0x7AFADC15), UINT32_C(0xAD44A4D5), UINT32_C(0xDF409330), UINT32_C(0x6AECBC80)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 6 * ASSERT: a = -3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(t0, X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(t1, Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_square(t2, Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t3, X, Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, t3, t3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t4, Y, Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, X, Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, b, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(X3, X3, t3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, t2, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t2, t2, t3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, b, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Z3, Z3, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Z3, Z3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, t3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, t0, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t0, t3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t0, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t0, t4, t4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, t0, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, t0, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, Z3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed.op3 * https://eprint.iacr.org/2015/1060 Alg 5 * ASSERT: a = -3 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t4, Y2, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, t4, Y1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, X2, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, Y3, X1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, b, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, Z1, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t2, t1, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, t1); /* if P is inf, throw all that away and take Q */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(R->X, nz, Q->X, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 4 * ASSERT: a = -3 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t2, Z1, Z2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t3, X1, Y1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, X2, Y2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t4, Y1, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t5, Y2, Z2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t5, t1, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t4, t4, t5); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, X1, Z1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, X2, Z2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(X3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, t0, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, X3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, b, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, Y3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, X3, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Z3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(X3, t1, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, b, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, t2, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t2, t1, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(Y3, Y3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, Y3, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(t0, t1, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(t0, t0, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, t4, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t2, t0, Y3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Y3, Y3, t2); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_sub(X3, X3, t1); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(Z3, t4, Z3); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(t1, t3, t0); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_add(Z3, Z3, t1); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[32], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 32) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[52], const unsigned char in[32]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 51; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[257], const unsigned char in[32]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 257; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[32], const unsigned char b[32], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[257] = {0}; int8_t bnaf[257] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 256; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[51] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 50; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[32]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 1; i >= 0; i--) { for (j = 0; i != 1 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 27; j++) { if (j * 2 + i > 51) continue; d = rnaf[j * 2 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz( lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[32], unsigned char outy[32], const unsigned char a[32], const unsigned char b[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery(P.Y, P.Y); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_montgomery(P.Y, P.Y); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_CryptoPro_C_ParamSet_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[32] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_GostR3410_2001_CryptoPro_C_ParamSet( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(n, b_n, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_GostR3410_2001_CryptoPro_C_ParamSet(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_GostR3410_2001_CryptoPro_C_ParamSet(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 32) != 32) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #endif /* __SIZEOF_INT128__ */ libengine-gost-openssl-3.0.2/ecp_id_GostR3410_2001_TestParamSet.c000066400000000000000000022656521446070765000242510ustar00rootroot00000000000000/* Autogenerated: ECCKiila https://gitlab.com/nisec/ecckiila */ /*- * MIT License * * Copyright (c) 2020 Luis Rivera-Zamarripa, JesÃēs-Javier Chi-Domínguez, Billy Bob Brumley * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ #if defined(__SIZEOF_INT128__) && !defined(PEDANTIC) #include #include #define LIMB_BITS 64 #define LIMB_CNT 4 /* Field elements */ typedef uint64_t fe_t[LIMB_CNT]; typedef uint64_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_GOSTR3410_2001_TESTPARAMSET_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: word_by_word_montgomery --static --use-value-barrier id_GostR3410_2001_TestParamSet 64 '2^255 + 1073' */ /* curve description: id_GostR3410_2001_TestParamSet */ /* machine_wordsize = 64 (from "64") */ /* requested operations: (all) */ /* m = 0x8000000000000000000000000000000000000000000000000000000000000431 (from "2^255 + 1073") */ /* */ /* NOTE: In addition to the bounds specified above each function, all */ /* functions synthesized for this Montgomery arithmetic require the */ /* input to be strictly less than the prime modulus (m), and also */ /* require the input to be in the unique saturated representation. */ /* All functions also ensure that these two properties are true of */ /* return values. */ /* */ /* Computed values: */ /* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ #include typedef unsigned char fiat_id_GostR3410_2001_TestParamSet_uint1; typedef signed char fiat_id_GostR3410_2001_TestParamSet_int1; typedef signed __int128 fiat_id_GostR3410_2001_TestParamSet_int128; typedef unsigned __int128 fiat_id_GostR3410_2001_TestParamSet_uint128; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_GOSTR3410_2001_TESTPARAMSET_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint64_t fiat_id_GostR3410_2001_TestParamSet_value_barrier_u64(uint64_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_GostR3410_2001_TestParamSet_value_barrier_u64(x) (x) #endif /* * The function fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^64 * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64( uint64_t *out1, fiat_id_GostR3410_2001_TestParamSet_uint1 *out2, fiat_id_GostR3410_2001_TestParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_GostR3410_2001_TestParamSet_uint128 x1; uint64_t x2; fiat_id_GostR3410_2001_TestParamSet_uint1 x3; x1 = ((arg1 + (fiat_id_GostR3410_2001_TestParamSet_uint128)arg2) + arg3); x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); x3 = (fiat_id_GostR3410_2001_TestParamSet_uint1)(x1 >> 64); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^64 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64( uint64_t *out1, fiat_id_GostR3410_2001_TestParamSet_uint1 *out2, fiat_id_GostR3410_2001_TestParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_GostR3410_2001_TestParamSet_int128 x1; fiat_id_GostR3410_2001_TestParamSet_int1 x2; uint64_t x3; x1 = ((arg2 - (fiat_id_GostR3410_2001_TestParamSet_int128)arg1) - arg3); x2 = (fiat_id_GostR3410_2001_TestParamSet_int1)(x1 >> 64); x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); *out1 = x3; *out2 = (fiat_id_GostR3410_2001_TestParamSet_uint1)(0x0 - x2); } /* * The function fiat_id_GostR3410_2001_TestParamSet_mulx_u64 is a multiplication, returning the full double-width result. * Postconditions: * out1 = (arg1 * arg2) mod 2^64 * out2 = ⌊arg1 * arg2 / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0xffffffffffffffff] * arg2: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_GostR3410_2001_TestParamSet_mulx_u64(uint64_t *out1, uint64_t *out2, uint64_t arg1, uint64_t arg2) { fiat_id_GostR3410_2001_TestParamSet_uint128 x1; uint64_t x2; uint64_t x3; x1 = ((fiat_id_GostR3410_2001_TestParamSet_uint128)arg1 * arg2); x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); x3 = (uint64_t)(x1 >> 64); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64( uint64_t *out1, fiat_id_GostR3410_2001_TestParamSet_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_GostR3410_2001_TestParamSet_uint1 x1; uint64_t x2; uint64_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_GostR3410_2001_TestParamSet_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); x3 = ((fiat_id_GostR3410_2001_TestParamSet_value_barrier_u64(x2) & arg3) | (fiat_id_GostR3410_2001_TestParamSet_value_barrier_u64((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_GostR3410_2001_TestParamSet_mul multiplies two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_mul(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; fiat_id_GostR3410_2001_TestParamSet_uint1 x14; uint64_t x15; fiat_id_GostR3410_2001_TestParamSet_uint1 x16; uint64_t x17; fiat_id_GostR3410_2001_TestParamSet_uint1 x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; fiat_id_GostR3410_2001_TestParamSet_uint1 x27; uint64_t x28; fiat_id_GostR3410_2001_TestParamSet_uint1 x29; uint64_t x30; fiat_id_GostR3410_2001_TestParamSet_uint1 x31; uint64_t x32; fiat_id_GostR3410_2001_TestParamSet_uint1 x33; uint64_t x34; fiat_id_GostR3410_2001_TestParamSet_uint1 x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; fiat_id_GostR3410_2001_TestParamSet_uint1 x45; uint64_t x46; fiat_id_GostR3410_2001_TestParamSet_uint1 x47; uint64_t x48; fiat_id_GostR3410_2001_TestParamSet_uint1 x49; uint64_t x50; uint64_t x51; fiat_id_GostR3410_2001_TestParamSet_uint1 x52; uint64_t x53; fiat_id_GostR3410_2001_TestParamSet_uint1 x54; uint64_t x55; fiat_id_GostR3410_2001_TestParamSet_uint1 x56; uint64_t x57; fiat_id_GostR3410_2001_TestParamSet_uint1 x58; uint64_t x59; fiat_id_GostR3410_2001_TestParamSet_uint1 x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; fiat_id_GostR3410_2001_TestParamSet_uint1 x68; uint64_t x69; fiat_id_GostR3410_2001_TestParamSet_uint1 x70; uint64_t x71; fiat_id_GostR3410_2001_TestParamSet_uint1 x72; uint64_t x73; fiat_id_GostR3410_2001_TestParamSet_uint1 x74; uint64_t x75; fiat_id_GostR3410_2001_TestParamSet_uint1 x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; fiat_id_GostR3410_2001_TestParamSet_uint1 x87; uint64_t x88; fiat_id_GostR3410_2001_TestParamSet_uint1 x89; uint64_t x90; fiat_id_GostR3410_2001_TestParamSet_uint1 x91; uint64_t x92; uint64_t x93; fiat_id_GostR3410_2001_TestParamSet_uint1 x94; uint64_t x95; fiat_id_GostR3410_2001_TestParamSet_uint1 x96; uint64_t x97; fiat_id_GostR3410_2001_TestParamSet_uint1 x98; uint64_t x99; fiat_id_GostR3410_2001_TestParamSet_uint1 x100; uint64_t x101; fiat_id_GostR3410_2001_TestParamSet_uint1 x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; fiat_id_GostR3410_2001_TestParamSet_uint1 x110; uint64_t x111; fiat_id_GostR3410_2001_TestParamSet_uint1 x112; uint64_t x113; fiat_id_GostR3410_2001_TestParamSet_uint1 x114; uint64_t x115; fiat_id_GostR3410_2001_TestParamSet_uint1 x116; uint64_t x117; fiat_id_GostR3410_2001_TestParamSet_uint1 x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; fiat_id_GostR3410_2001_TestParamSet_uint1 x129; uint64_t x130; fiat_id_GostR3410_2001_TestParamSet_uint1 x131; uint64_t x132; fiat_id_GostR3410_2001_TestParamSet_uint1 x133; uint64_t x134; uint64_t x135; fiat_id_GostR3410_2001_TestParamSet_uint1 x136; uint64_t x137; fiat_id_GostR3410_2001_TestParamSet_uint1 x138; uint64_t x139; fiat_id_GostR3410_2001_TestParamSet_uint1 x140; uint64_t x141; fiat_id_GostR3410_2001_TestParamSet_uint1 x142; uint64_t x143; fiat_id_GostR3410_2001_TestParamSet_uint1 x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; uint64_t x150; uint64_t x151; fiat_id_GostR3410_2001_TestParamSet_uint1 x152; uint64_t x153; fiat_id_GostR3410_2001_TestParamSet_uint1 x154; uint64_t x155; fiat_id_GostR3410_2001_TestParamSet_uint1 x156; uint64_t x157; fiat_id_GostR3410_2001_TestParamSet_uint1 x158; uint64_t x159; fiat_id_GostR3410_2001_TestParamSet_uint1 x160; uint64_t x161; uint64_t x162; fiat_id_GostR3410_2001_TestParamSet_uint1 x163; uint64_t x164; fiat_id_GostR3410_2001_TestParamSet_uint1 x165; uint64_t x166; fiat_id_GostR3410_2001_TestParamSet_uint1 x167; uint64_t x168; fiat_id_GostR3410_2001_TestParamSet_uint1 x169; uint64_t x170; fiat_id_GostR3410_2001_TestParamSet_uint1 x171; uint64_t x172; uint64_t x173; uint64_t x174; uint64_t x175; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[0]); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x5, &x6, x4, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x7, &x8, x4, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x9, &x10, x4, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x11, &x12, x4, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x13, &x14, 0x0, x12, x9); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x15, &x16, x14, x10, x7); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x17, &x18, x16, x8, x5); x19 = (x18 + x6); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x20, &x21, x11, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x22, &x23, x20, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x24, &x25, x20, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x26, &x27, 0x0, x11, x24); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x28, &x29, x27, x13, x25); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x30, &x31, x29, x15, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x32, &x33, x31, x17, x22); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x34, &x35, x33, x19, x23); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x36, &x37, x1, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x38, &x39, x1, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x40, &x41, x1, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x42, &x43, x1, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x44, &x45, 0x0, x43, x40); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x46, &x47, x45, x41, x38); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x48, &x49, x47, x39, x36); x50 = (x49 + x37); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x51, &x52, 0x0, x28, x42); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x53, &x54, x52, x30, x44); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x55, &x56, x54, x32, x46); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x57, &x58, x56, x34, x48); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x59, &x60, x58, x35, x50); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x61, &x62, x51, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x63, &x64, x61, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x65, &x66, x61, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x67, &x68, 0x0, x51, x65); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x69, &x70, x68, x53, x66); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x71, &x72, x70, x55, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x73, &x74, x72, x57, x63); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x75, &x76, x74, x59, x64); x77 = ((uint64_t)x76 + x60); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x78, &x79, x2, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x80, &x81, x2, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x82, &x83, x2, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x84, &x85, x2, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x86, &x87, 0x0, x85, x82); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x88, &x89, x87, x83, x80); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x90, &x91, x89, x81, x78); x92 = (x91 + x79); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x93, &x94, 0x0, x69, x84); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x95, &x96, x94, x71, x86); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x97, &x98, x96, x73, x88); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x99, &x100, x98, x75, x90); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x101, &x102, x100, x77, x92); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x103, &x104, x93, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x105, &x106, x103, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x107, &x108, x103, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x109, &x110, 0x0, x93, x107); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x111, &x112, x110, x95, x108); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x113, &x114, x112, x97, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x115, &x116, x114, x99, x105); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x117, &x118, x116, x101, x106); x119 = ((uint64_t)x118 + x102); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x120, &x121, x3, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x122, &x123, x3, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x124, &x125, x3, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x126, &x127, x3, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x128, &x129, 0x0, x127, x124); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x130, &x131, x129, x125, x122); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x132, &x133, x131, x123, x120); x134 = (x133 + x121); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x135, &x136, 0x0, x111, x126); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x137, &x138, x136, x113, x128); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x139, &x140, x138, x115, x130); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x141, &x142, x140, x117, x132); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x143, &x144, x142, x119, x134); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x145, &x146, x135, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x147, &x148, x145, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x149, &x150, x145, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x151, &x152, 0x0, x135, x149); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x153, &x154, x152, x137, x150); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x155, &x156, x154, x139, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x157, &x158, x156, x141, x147); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x159, &x160, x158, x143, x148); x161 = ((uint64_t)x160 + x144); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x162, &x163, 0x0, x153, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x164, &x165, x163, x155, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x166, &x167, x165, x157, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64( &x168, &x169, x167, x159, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x170, &x171, x169, x161, 0x0); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x172, x171, x162, x153); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x173, x171, x164, x155); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x174, x171, x166, x157); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x175, x171, x168, x159); out1[0] = x172; out1[1] = x173; out1[2] = x174; out1[3] = x175; } /* * The function fiat_id_GostR3410_2001_TestParamSet_square squares a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_square(uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; fiat_id_GostR3410_2001_TestParamSet_uint1 x14; uint64_t x15; fiat_id_GostR3410_2001_TestParamSet_uint1 x16; uint64_t x17; fiat_id_GostR3410_2001_TestParamSet_uint1 x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; fiat_id_GostR3410_2001_TestParamSet_uint1 x27; uint64_t x28; fiat_id_GostR3410_2001_TestParamSet_uint1 x29; uint64_t x30; fiat_id_GostR3410_2001_TestParamSet_uint1 x31; uint64_t x32; fiat_id_GostR3410_2001_TestParamSet_uint1 x33; uint64_t x34; fiat_id_GostR3410_2001_TestParamSet_uint1 x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; fiat_id_GostR3410_2001_TestParamSet_uint1 x45; uint64_t x46; fiat_id_GostR3410_2001_TestParamSet_uint1 x47; uint64_t x48; fiat_id_GostR3410_2001_TestParamSet_uint1 x49; uint64_t x50; uint64_t x51; fiat_id_GostR3410_2001_TestParamSet_uint1 x52; uint64_t x53; fiat_id_GostR3410_2001_TestParamSet_uint1 x54; uint64_t x55; fiat_id_GostR3410_2001_TestParamSet_uint1 x56; uint64_t x57; fiat_id_GostR3410_2001_TestParamSet_uint1 x58; uint64_t x59; fiat_id_GostR3410_2001_TestParamSet_uint1 x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; fiat_id_GostR3410_2001_TestParamSet_uint1 x68; uint64_t x69; fiat_id_GostR3410_2001_TestParamSet_uint1 x70; uint64_t x71; fiat_id_GostR3410_2001_TestParamSet_uint1 x72; uint64_t x73; fiat_id_GostR3410_2001_TestParamSet_uint1 x74; uint64_t x75; fiat_id_GostR3410_2001_TestParamSet_uint1 x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; fiat_id_GostR3410_2001_TestParamSet_uint1 x87; uint64_t x88; fiat_id_GostR3410_2001_TestParamSet_uint1 x89; uint64_t x90; fiat_id_GostR3410_2001_TestParamSet_uint1 x91; uint64_t x92; uint64_t x93; fiat_id_GostR3410_2001_TestParamSet_uint1 x94; uint64_t x95; fiat_id_GostR3410_2001_TestParamSet_uint1 x96; uint64_t x97; fiat_id_GostR3410_2001_TestParamSet_uint1 x98; uint64_t x99; fiat_id_GostR3410_2001_TestParamSet_uint1 x100; uint64_t x101; fiat_id_GostR3410_2001_TestParamSet_uint1 x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; fiat_id_GostR3410_2001_TestParamSet_uint1 x110; uint64_t x111; fiat_id_GostR3410_2001_TestParamSet_uint1 x112; uint64_t x113; fiat_id_GostR3410_2001_TestParamSet_uint1 x114; uint64_t x115; fiat_id_GostR3410_2001_TestParamSet_uint1 x116; uint64_t x117; fiat_id_GostR3410_2001_TestParamSet_uint1 x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; fiat_id_GostR3410_2001_TestParamSet_uint1 x129; uint64_t x130; fiat_id_GostR3410_2001_TestParamSet_uint1 x131; uint64_t x132; fiat_id_GostR3410_2001_TestParamSet_uint1 x133; uint64_t x134; uint64_t x135; fiat_id_GostR3410_2001_TestParamSet_uint1 x136; uint64_t x137; fiat_id_GostR3410_2001_TestParamSet_uint1 x138; uint64_t x139; fiat_id_GostR3410_2001_TestParamSet_uint1 x140; uint64_t x141; fiat_id_GostR3410_2001_TestParamSet_uint1 x142; uint64_t x143; fiat_id_GostR3410_2001_TestParamSet_uint1 x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; uint64_t x150; uint64_t x151; fiat_id_GostR3410_2001_TestParamSet_uint1 x152; uint64_t x153; fiat_id_GostR3410_2001_TestParamSet_uint1 x154; uint64_t x155; fiat_id_GostR3410_2001_TestParamSet_uint1 x156; uint64_t x157; fiat_id_GostR3410_2001_TestParamSet_uint1 x158; uint64_t x159; fiat_id_GostR3410_2001_TestParamSet_uint1 x160; uint64_t x161; uint64_t x162; fiat_id_GostR3410_2001_TestParamSet_uint1 x163; uint64_t x164; fiat_id_GostR3410_2001_TestParamSet_uint1 x165; uint64_t x166; fiat_id_GostR3410_2001_TestParamSet_uint1 x167; uint64_t x168; fiat_id_GostR3410_2001_TestParamSet_uint1 x169; uint64_t x170; fiat_id_GostR3410_2001_TestParamSet_uint1 x171; uint64_t x172; uint64_t x173; uint64_t x174; uint64_t x175; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[0]); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x5, &x6, x4, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x7, &x8, x4, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x9, &x10, x4, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x11, &x12, x4, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x13, &x14, 0x0, x12, x9); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x15, &x16, x14, x10, x7); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x17, &x18, x16, x8, x5); x19 = (x18 + x6); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x20, &x21, x11, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x22, &x23, x20, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x24, &x25, x20, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x26, &x27, 0x0, x11, x24); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x28, &x29, x27, x13, x25); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x30, &x31, x29, x15, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x32, &x33, x31, x17, x22); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x34, &x35, x33, x19, x23); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x36, &x37, x1, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x38, &x39, x1, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x40, &x41, x1, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x42, &x43, x1, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x44, &x45, 0x0, x43, x40); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x46, &x47, x45, x41, x38); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x48, &x49, x47, x39, x36); x50 = (x49 + x37); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x51, &x52, 0x0, x28, x42); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x53, &x54, x52, x30, x44); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x55, &x56, x54, x32, x46); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x57, &x58, x56, x34, x48); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x59, &x60, x58, x35, x50); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x61, &x62, x51, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x63, &x64, x61, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x65, &x66, x61, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x67, &x68, 0x0, x51, x65); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x69, &x70, x68, x53, x66); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x71, &x72, x70, x55, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x73, &x74, x72, x57, x63); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x75, &x76, x74, x59, x64); x77 = ((uint64_t)x76 + x60); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x78, &x79, x2, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x80, &x81, x2, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x82, &x83, x2, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x84, &x85, x2, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x86, &x87, 0x0, x85, x82); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x88, &x89, x87, x83, x80); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x90, &x91, x89, x81, x78); x92 = (x91 + x79); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x93, &x94, 0x0, x69, x84); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x95, &x96, x94, x71, x86); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x97, &x98, x96, x73, x88); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x99, &x100, x98, x75, x90); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x101, &x102, x100, x77, x92); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x103, &x104, x93, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x105, &x106, x103, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x107, &x108, x103, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x109, &x110, 0x0, x93, x107); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x111, &x112, x110, x95, x108); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x113, &x114, x112, x97, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x115, &x116, x114, x99, x105); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x117, &x118, x116, x101, x106); x119 = ((uint64_t)x118 + x102); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x120, &x121, x3, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x122, &x123, x3, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x124, &x125, x3, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x126, &x127, x3, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x128, &x129, 0x0, x127, x124); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x130, &x131, x129, x125, x122); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x132, &x133, x131, x123, x120); x134 = (x133 + x121); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x135, &x136, 0x0, x111, x126); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x137, &x138, x136, x113, x128); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x139, &x140, x138, x115, x130); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x141, &x142, x140, x117, x132); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x143, &x144, x142, x119, x134); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x145, &x146, x135, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x147, &x148, x145, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x149, &x150, x145, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x151, &x152, 0x0, x135, x149); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x153, &x154, x152, x137, x150); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x155, &x156, x154, x139, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x157, &x158, x156, x141, x147); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x159, &x160, x158, x143, x148); x161 = ((uint64_t)x160 + x144); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x162, &x163, 0x0, x153, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x164, &x165, x163, x155, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x166, &x167, x165, x157, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64( &x168, &x169, x167, x159, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x170, &x171, x169, x161, 0x0); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x172, x171, x162, x153); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x173, x171, x164, x155); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x174, x171, x166, x157); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x175, x171, x168, x159); out1[0] = x172; out1[1] = x173; out1[2] = x174; out1[3] = x175; } /* * The function fiat_id_GostR3410_2001_TestParamSet_add adds two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_add(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; fiat_id_GostR3410_2001_TestParamSet_uint1 x2; uint64_t x3; fiat_id_GostR3410_2001_TestParamSet_uint1 x4; uint64_t x5; fiat_id_GostR3410_2001_TestParamSet_uint1 x6; uint64_t x7; fiat_id_GostR3410_2001_TestParamSet_uint1 x8; uint64_t x9; fiat_id_GostR3410_2001_TestParamSet_uint1 x10; uint64_t x11; fiat_id_GostR3410_2001_TestParamSet_uint1 x12; uint64_t x13; fiat_id_GostR3410_2001_TestParamSet_uint1 x14; uint64_t x15; fiat_id_GostR3410_2001_TestParamSet_uint1 x16; uint64_t x17; fiat_id_GostR3410_2001_TestParamSet_uint1 x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x9, &x10, 0x0, x1, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x11, &x12, x10, x3, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x13, &x14, x12, x5, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64( &x15, &x16, x14, x7, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x17, &x18, x16, x8, 0x0); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x19, x18, x9, x1); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x20, x18, x11, x3); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x21, x18, x13, x5); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x22, x18, x15, x7); out1[0] = x19; out1[1] = x20; out1[2] = x21; out1[3] = x22; } /* * The function fiat_id_GostR3410_2001_TestParamSet_sub subtracts two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_sub(uint64_t out1[4], const uint64_t arg1[4], const uint64_t arg2[4]) { uint64_t x1; fiat_id_GostR3410_2001_TestParamSet_uint1 x2; uint64_t x3; fiat_id_GostR3410_2001_TestParamSet_uint1 x4; uint64_t x5; fiat_id_GostR3410_2001_TestParamSet_uint1 x6; uint64_t x7; fiat_id_GostR3410_2001_TestParamSet_uint1 x8; uint64_t x9; uint64_t x10; fiat_id_GostR3410_2001_TestParamSet_uint1 x11; uint64_t x12; fiat_id_GostR3410_2001_TestParamSet_uint1 x13; uint64_t x14; fiat_id_GostR3410_2001_TestParamSet_uint1 x15; uint64_t x16; fiat_id_GostR3410_2001_TestParamSet_uint1 x17; fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64( &x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT16_C(0x431))); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x12, &x13, x11, x3, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x14, &x15, x13, x5, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64( &x16, &x17, x15, x7, (x9 & UINT64_C(0x8000000000000000))); out1[0] = x10; out1[1] = x12; out1[2] = x14; out1[3] = x16; } /* * The function fiat_id_GostR3410_2001_TestParamSet_opp negates a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_opp(uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; fiat_id_GostR3410_2001_TestParamSet_uint1 x2; uint64_t x3; fiat_id_GostR3410_2001_TestParamSet_uint1 x4; uint64_t x5; fiat_id_GostR3410_2001_TestParamSet_uint1 x6; uint64_t x7; fiat_id_GostR3410_2001_TestParamSet_uint1 x8; uint64_t x9; uint64_t x10; fiat_id_GostR3410_2001_TestParamSet_uint1 x11; uint64_t x12; fiat_id_GostR3410_2001_TestParamSet_uint1 x13; uint64_t x14; fiat_id_GostR3410_2001_TestParamSet_uint1 x15; uint64_t x16; fiat_id_GostR3410_2001_TestParamSet_uint1 x17; fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64( &x9, x8, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x10, &x11, 0x0, x1, (x9 & UINT16_C(0x431))); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x12, &x13, x11, x3, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x14, &x15, x13, x5, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64( &x16, &x17, x15, x7, (x9 & UINT64_C(0x8000000000000000))); out1[0] = x10; out1[1] = x12; out1[2] = x14; out1[3] = x16; } /* * The function fiat_id_GostR3410_2001_TestParamSet_from_montgomery translates a field element out of the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval out1 mod m = (eval arg1 * ((2^64)âģš mod m)^4) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_from_montgomery( uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; fiat_id_GostR3410_2001_TestParamSet_uint1 x9; uint64_t x10; fiat_id_GostR3410_2001_TestParamSet_uint1 x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; fiat_id_GostR3410_2001_TestParamSet_uint1 x19; uint64_t x20; fiat_id_GostR3410_2001_TestParamSet_uint1 x21; uint64_t x22; fiat_id_GostR3410_2001_TestParamSet_uint1 x23; uint64_t x24; fiat_id_GostR3410_2001_TestParamSet_uint1 x25; uint64_t x26; fiat_id_GostR3410_2001_TestParamSet_uint1 x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint64_t x32; uint64_t x33; uint64_t x34; fiat_id_GostR3410_2001_TestParamSet_uint1 x35; uint64_t x36; fiat_id_GostR3410_2001_TestParamSet_uint1 x37; uint64_t x38; fiat_id_GostR3410_2001_TestParamSet_uint1 x39; uint64_t x40; fiat_id_GostR3410_2001_TestParamSet_uint1 x41; uint64_t x42; fiat_id_GostR3410_2001_TestParamSet_uint1 x43; uint64_t x44; fiat_id_GostR3410_2001_TestParamSet_uint1 x45; uint64_t x46; fiat_id_GostR3410_2001_TestParamSet_uint1 x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; fiat_id_GostR3410_2001_TestParamSet_uint1 x55; uint64_t x56; fiat_id_GostR3410_2001_TestParamSet_uint1 x57; uint64_t x58; fiat_id_GostR3410_2001_TestParamSet_uint1 x59; uint64_t x60; fiat_id_GostR3410_2001_TestParamSet_uint1 x61; uint64_t x62; uint64_t x63; fiat_id_GostR3410_2001_TestParamSet_uint1 x64; uint64_t x65; fiat_id_GostR3410_2001_TestParamSet_uint1 x66; uint64_t x67; fiat_id_GostR3410_2001_TestParamSet_uint1 x68; uint64_t x69; fiat_id_GostR3410_2001_TestParamSet_uint1 x70; uint64_t x71; fiat_id_GostR3410_2001_TestParamSet_uint1 x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; x1 = (arg1[0]); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x2, &x3, x1, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x4, &x5, x2, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x6, &x7, x2, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x8, &x9, 0x0, x1, x6); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x10, &x11, 0x0, (x9 + x7), (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x12, &x13, x10, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x14, &x15, x12, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x16, &x17, x12, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x18, &x19, 0x0, x5, x14); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x20, &x21, 0x0, x10, x16); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64( &x22, &x23, 0x0, (((uint64_t)x21 + x11) + x17), (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x24, &x25, x23, x4, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x26, &x27, x25, x18, 0x0); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x28, &x29, x22, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x30, &x31, x28, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x32, &x33, x28, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x34, &x35, 0x0, x22, x32); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x36, &x37, x35, x24, x33); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x38, &x39, x37, x26, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x40, &x41, x39, (x27 + (x19 + x15)), x30); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x42, &x43, 0x0, x36, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x44, &x45, x43, x38, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x46, &x47, x45, x40, 0x0); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x48, &x49, x42, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x50, &x51, x48, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x52, &x53, x48, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x54, &x55, 0x0, x42, x52); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x56, &x57, x55, x44, x53); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x58, &x59, x57, x46, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x60, &x61, x59, (x47 + (x41 + x31)), x50); x62 = (x61 + x51); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x63, &x64, 0x0, x56, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x65, &x66, x64, x58, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x67, &x68, x66, x60, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64( &x69, &x70, x68, x62, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x71, &x72, x70, 0x0, 0x0); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x73, x72, x63, x56); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x74, x72, x65, x58); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x75, x72, x67, x60); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x76, x72, x69, x62); out1[0] = x73; out1[1] = x74; out1[2] = x75; out1[3] = x76; } /* * The function fiat_id_GostR3410_2001_TestParamSet_to_montgomery translates a field element into the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_to_montgomery( uint64_t out1[4], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; fiat_id_GostR3410_2001_TestParamSet_uint1 x12; uint64_t x13; fiat_id_GostR3410_2001_TestParamSet_uint1 x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; fiat_id_GostR3410_2001_TestParamSet_uint1 x22; uint64_t x23; uint64_t x24; uint64_t x25; fiat_id_GostR3410_2001_TestParamSet_uint1 x26; uint64_t x27; fiat_id_GostR3410_2001_TestParamSet_uint1 x28; uint64_t x29; fiat_id_GostR3410_2001_TestParamSet_uint1 x30; uint64_t x31; fiat_id_GostR3410_2001_TestParamSet_uint1 x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; fiat_id_GostR3410_2001_TestParamSet_uint1 x40; uint64_t x41; fiat_id_GostR3410_2001_TestParamSet_uint1 x42; uint64_t x43; fiat_id_GostR3410_2001_TestParamSet_uint1 x44; uint64_t x45; fiat_id_GostR3410_2001_TestParamSet_uint1 x46; uint64_t x47; uint64_t x48; uint64_t x49; fiat_id_GostR3410_2001_TestParamSet_uint1 x50; uint64_t x51; fiat_id_GostR3410_2001_TestParamSet_uint1 x52; uint64_t x53; fiat_id_GostR3410_2001_TestParamSet_uint1 x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; fiat_id_GostR3410_2001_TestParamSet_uint1 x62; uint64_t x63; fiat_id_GostR3410_2001_TestParamSet_uint1 x64; uint64_t x65; fiat_id_GostR3410_2001_TestParamSet_uint1 x66; uint64_t x67; fiat_id_GostR3410_2001_TestParamSet_uint1 x68; uint64_t x69; uint64_t x70; fiat_id_GostR3410_2001_TestParamSet_uint1 x71; uint64_t x72; fiat_id_GostR3410_2001_TestParamSet_uint1 x73; uint64_t x74; fiat_id_GostR3410_2001_TestParamSet_uint1 x75; uint64_t x76; fiat_id_GostR3410_2001_TestParamSet_uint1 x77; uint64_t x78; fiat_id_GostR3410_2001_TestParamSet_uint1 x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x1, &x2, (arg1[0]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x3, &x4, x1, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x5, &x6, x3, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x7, &x8, x3, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x9, &x10, (arg1[1]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x11, &x12, 0x0, x1, x7); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x13, &x14, 0x0, ((x12 + x2) + x8), x9); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x15, &x16, x13, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x17, &x18, x15, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x19, &x20, x15, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x21, &x22, 0x0, x6, x17); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x23, &x24, (arg1[2]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x25, &x26, 0x0, x13, x19); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64( &x27, &x28, 0x0, ((x26 + (x14 + x10)) + x20), x23); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x29, &x30, x28, x5, x24); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x31, &x32, x30, x21, 0x0); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x33, &x34, x27, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x35, &x36, x33, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x37, &x38, x33, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x39, &x40, 0x0, x27, x37); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x41, &x42, x40, x29, x38); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x43, &x44, x42, x31, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x45, &x46, x44, (x32 + (x22 + x18)), x35); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x47, &x48, (arg1[3]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x49, &x50, 0x0, x41, x47); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x51, &x52, x50, x43, x48); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x53, &x54, x52, x45, 0x0); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x55, &x56, x49, UINT64_C(0xdbf951d5883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x57, &x58, x55, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u64(&x59, &x60, x55, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x61, &x62, 0x0, x49, x59); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x63, &x64, x62, x51, x60); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x65, &x66, x64, x53, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u64(&x67, &x68, x66, (x54 + (x46 + x36)), x57); x69 = (x68 + x58); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x70, &x71, 0x0, x63, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x72, &x73, x71, x65, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x74, &x75, x73, x67, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64( &x76, &x77, x75, x69, UINT64_C(0x8000000000000000)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u64(&x78, &x79, x77, 0x0, 0x0); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x80, x79, x70, x63); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x81, x79, x72, x65); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x82, x79, x74, x67); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x83, x79, x76, x69); out1[0] = x80; out1[1] = x81; out1[2] = x82; out1[3] = x83; } /* * The function fiat_id_GostR3410_2001_TestParamSet_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_GostR3410_2001_TestParamSet_nonzero( uint64_t *out1, const uint64_t arg1[4]) { uint64_t x1; x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | (arg1[3])))); *out1 = x1; } /* * The function fiat_id_GostR3410_2001_TestParamSet_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_selectznz( uint64_t out1[4], fiat_id_GostR3410_2001_TestParamSet_uint1 arg1, const uint64_t arg2[4], const uint64_t arg3[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; } /* * The function fiat_id_GostR3410_2001_TestParamSet_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_GostR3410_2001_TestParamSet_to_bytes( uint8_t out1[32], const uint64_t arg1[4]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint8_t x5; uint64_t x6; uint8_t x7; uint64_t x8; uint8_t x9; uint64_t x10; uint8_t x11; uint64_t x12; uint8_t x13; uint64_t x14; uint8_t x15; uint64_t x16; uint8_t x17; uint8_t x18; uint8_t x19; uint64_t x20; uint8_t x21; uint64_t x22; uint8_t x23; uint64_t x24; uint8_t x25; uint64_t x26; uint8_t x27; uint64_t x28; uint8_t x29; uint64_t x30; uint8_t x31; uint8_t x32; uint8_t x33; uint64_t x34; uint8_t x35; uint64_t x36; uint8_t x37; uint64_t x38; uint8_t x39; uint64_t x40; uint8_t x41; uint64_t x42; uint8_t x43; uint64_t x44; uint8_t x45; uint8_t x46; uint8_t x47; uint64_t x48; uint8_t x49; uint64_t x50; uint8_t x51; uint64_t x52; uint8_t x53; uint64_t x54; uint8_t x55; uint64_t x56; uint8_t x57; uint64_t x58; uint8_t x59; uint8_t x60; x1 = (arg1[3]); x2 = (arg1[2]); x3 = (arg1[1]); x4 = (arg1[0]); x5 = (uint8_t)(x4 & UINT8_C(0xff)); x6 = (x4 >> 8); x7 = (uint8_t)(x6 & UINT8_C(0xff)); x8 = (x6 >> 8); x9 = (uint8_t)(x8 & UINT8_C(0xff)); x10 = (x8 >> 8); x11 = (uint8_t)(x10 & UINT8_C(0xff)); x12 = (x10 >> 8); x13 = (uint8_t)(x12 & UINT8_C(0xff)); x14 = (x12 >> 8); x15 = (uint8_t)(x14 & UINT8_C(0xff)); x16 = (x14 >> 8); x17 = (uint8_t)(x16 & UINT8_C(0xff)); x18 = (uint8_t)(x16 >> 8); x19 = (uint8_t)(x3 & UINT8_C(0xff)); x20 = (x3 >> 8); x21 = (uint8_t)(x20 & UINT8_C(0xff)); x22 = (x20 >> 8); x23 = (uint8_t)(x22 & UINT8_C(0xff)); x24 = (x22 >> 8); x25 = (uint8_t)(x24 & UINT8_C(0xff)); x26 = (x24 >> 8); x27 = (uint8_t)(x26 & UINT8_C(0xff)); x28 = (x26 >> 8); x29 = (uint8_t)(x28 & UINT8_C(0xff)); x30 = (x28 >> 8); x31 = (uint8_t)(x30 & UINT8_C(0xff)); x32 = (uint8_t)(x30 >> 8); x33 = (uint8_t)(x2 & UINT8_C(0xff)); x34 = (x2 >> 8); x35 = (uint8_t)(x34 & UINT8_C(0xff)); x36 = (x34 >> 8); x37 = (uint8_t)(x36 & UINT8_C(0xff)); x38 = (x36 >> 8); x39 = (uint8_t)(x38 & UINT8_C(0xff)); x40 = (x38 >> 8); x41 = (uint8_t)(x40 & UINT8_C(0xff)); x42 = (x40 >> 8); x43 = (uint8_t)(x42 & UINT8_C(0xff)); x44 = (x42 >> 8); x45 = (uint8_t)(x44 & UINT8_C(0xff)); x46 = (uint8_t)(x44 >> 8); x47 = (uint8_t)(x1 & UINT8_C(0xff)); x48 = (x1 >> 8); x49 = (uint8_t)(x48 & UINT8_C(0xff)); x50 = (x48 >> 8); x51 = (uint8_t)(x50 & UINT8_C(0xff)); x52 = (x50 >> 8); x53 = (uint8_t)(x52 & UINT8_C(0xff)); x54 = (x52 >> 8); x55 = (uint8_t)(x54 & UINT8_C(0xff)); x56 = (x54 >> 8); x57 = (uint8_t)(x56 & UINT8_C(0xff)); x58 = (x56 >> 8); x59 = (uint8_t)(x58 & UINT8_C(0xff)); x60 = (uint8_t)(x58 >> 8); out1[0] = x5; out1[1] = x7; out1[2] = x9; out1[3] = x11; out1[4] = x13; out1[5] = x15; out1[6] = x17; out1[7] = x18; out1[8] = x19; out1[9] = x21; out1[10] = x23; out1[11] = x25; out1[12] = x27; out1[13] = x29; out1[14] = x31; out1[15] = x32; out1[16] = x33; out1[17] = x35; out1[18] = x37; out1[19] = x39; out1[20] = x41; out1[21] = x43; out1[22] = x45; out1[23] = x46; out1[24] = x47; out1[25] = x49; out1[26] = x51; out1[27] = x53; out1[28] = x55; out1[29] = x57; out1[30] = x59; out1[31] = x60; } /* * The function fiat_id_GostR3410_2001_TestParamSet_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. * Preconditions: * 0 ≤ bytes_eval arg1 < m * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_from_bytes( uint64_t out1[4], const uint8_t arg1[32]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint8_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint8_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint8_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint8_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; x1 = ((uint64_t)(arg1[31]) << 56); x2 = ((uint64_t)(arg1[30]) << 48); x3 = ((uint64_t)(arg1[29]) << 40); x4 = ((uint64_t)(arg1[28]) << 32); x5 = ((uint64_t)(arg1[27]) << 24); x6 = ((uint64_t)(arg1[26]) << 16); x7 = ((uint64_t)(arg1[25]) << 8); x8 = (arg1[24]); x9 = ((uint64_t)(arg1[23]) << 56); x10 = ((uint64_t)(arg1[22]) << 48); x11 = ((uint64_t)(arg1[21]) << 40); x12 = ((uint64_t)(arg1[20]) << 32); x13 = ((uint64_t)(arg1[19]) << 24); x14 = ((uint64_t)(arg1[18]) << 16); x15 = ((uint64_t)(arg1[17]) << 8); x16 = (arg1[16]); x17 = ((uint64_t)(arg1[15]) << 56); x18 = ((uint64_t)(arg1[14]) << 48); x19 = ((uint64_t)(arg1[13]) << 40); x20 = ((uint64_t)(arg1[12]) << 32); x21 = ((uint64_t)(arg1[11]) << 24); x22 = ((uint64_t)(arg1[10]) << 16); x23 = ((uint64_t)(arg1[9]) << 8); x24 = (arg1[8]); x25 = ((uint64_t)(arg1[7]) << 56); x26 = ((uint64_t)(arg1[6]) << 48); x27 = ((uint64_t)(arg1[5]) << 40); x28 = ((uint64_t)(arg1[4]) << 32); x29 = ((uint64_t)(arg1[3]) << 24); x30 = ((uint64_t)(arg1[2]) << 16); x31 = ((uint64_t)(arg1[1]) << 8); x32 = (arg1[0]); x33 = (x31 + (uint64_t)x32); x34 = (x30 + x33); x35 = (x29 + x34); x36 = (x28 + x35); x37 = (x27 + x36); x38 = (x26 + x37); x39 = (x25 + x38); x40 = (x23 + (uint64_t)x24); x41 = (x22 + x40); x42 = (x21 + x41); x43 = (x20 + x42); x44 = (x19 + x43); x45 = (x18 + x44); x46 = (x17 + x45); x47 = (x15 + (uint64_t)x16); x48 = (x14 + x47); x49 = (x13 + x48); x50 = (x12 + x49); x51 = (x11 + x50); x52 = (x10 + x51); x53 = (x9 + x52); x54 = (x7 + (uint64_t)x8); x55 = (x6 + x54); x56 = (x5 + x55); x57 = (x4 + x56); x58 = (x3 + x57); x59 = (x2 + x58); x60 = (x1 + x59); out1[0] = x39; out1[1] = x46; out1[2] = x53; out1[3] = x60; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_GostR3410_2001_TestParamSet/fe_inv.op3 * sliding window w=5 */ static void fiat_id_GostR3410_2001_TestParamSet_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t15; fiat_id_GostR3410_2001_TestParamSet_square(acc, t1); fiat_id_GostR3410_2001_TestParamSet_mul(t15, t1, acc); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_TestParamSet_mul(t15, t15, acc); fiat_id_GostR3410_2001_TestParamSet_square(acc, t1); for (i = 0; i < 244; i++) fiat_id_GostR3410_2001_TestParamSet_square(acc, acc); fiat_id_GostR3410_2001_TestParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_TestParamSet_square(acc, acc); fiat_id_GostR3410_2001_TestParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_TestParamSet_square(acc, acc); fiat_id_GostR3410_2001_TestParamSet_mul(output, acc, t15); } /* curve coefficient constants */ static const limb_t const_one[4] = { UINT64_C(0xFFFFFFFFFFFFFBCF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0x7FFFFFFFFFFFFFFF)}; static const limb_t const_a[4] = { UINT64_C(0xFFFFFFFFFFFFC983), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0x7FFFFFFFFFFFFFFF)}; static const limb_t const_b3[4] = { UINT64_C(0x81733EE96AEAB71C), UINT64_C(0x00CD3D1CFC4E6FC7), UINT64_C(0x60AB503A75853407), UINT64_C(0x0A9EC8AE4556810A)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[27][16] = { { {{UINT64_C(0xFFFFFFFFFFFFF36D), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0x7FFFFFFFFFFFFFFF)}, {UINT64_C(0x9AF45A5A471125F5), UINT64_C(0x7CE5090AF69BF9AE), UINT64_C(0x67617A63E4B6DDE6), UINT64_C(0x03F66B354AA3DAA4)}}, {{UINT64_C(0xB39BDC16149B5D15), UINT64_C(0x87CE978A7309454F), UINT64_C(0xD22F32EF315A7A56), UINT64_C(0x4C7DE232B69A6B57)}, {UINT64_C(0x9E2DAF6D466DC64D), UINT64_C(0x758C27B14B1C8A55), UINT64_C(0x74A0CB23BD647F1A), UINT64_C(0x27E748682C2F4C70)}}, {{UINT64_C(0xF2D8F32E55A62594), UINT64_C(0x8323D57036BC547A), UINT64_C(0x497679EB98D4B25A), UINT64_C(0x061167F2B87E0534)}, {UINT64_C(0xE1FFFDCE223E4DF8), UINT64_C(0x7C83AE78DCD891E9), UINT64_C(0x743985863C1B95D0), UINT64_C(0x11D7320574B3F5AB)}}, {{UINT64_C(0x34B9C048ACB97F7C), UINT64_C(0x8232E73CE3B9BCC6), UINT64_C(0x81F4B63FDA2DB71D), UINT64_C(0x4EEE5393A2DF4C84)}, {UINT64_C(0xCA6E63AEAC469C69), UINT64_C(0x27BC807C428E4F01), UINT64_C(0x4A2C23BA5F4EC124), UINT64_C(0x74847CFCAAE2668B)}}, {{UINT64_C(0x4435585F6716AF4E), UINT64_C(0xB872D8B71CDB965F), UINT64_C(0x662F1962746FFAD0), UINT64_C(0x52761A24DB5D0187)}, {UINT64_C(0xF6A09922A57E0E3D), UINT64_C(0x86C69342A9C12B63), UINT64_C(0x91FF20B65AF190C5), UINT64_C(0x10DB7A2A4EEEE1AE)}}, {{UINT64_C(0xBB464A5374628B90), UINT64_C(0x6E7A1227057A4F25), UINT64_C(0x4C309D690B0FA41F), UINT64_C(0x7548260777FE7B93)}, {UINT64_C(0xF2583EC70B612421), UINT64_C(0xFF2CFC835E2B15ED), UINT64_C(0x1E97A7DB8CABC5CF), UINT64_C(0x1EC08FAA925C149F)}}, {{UINT64_C(0xBA0170E30E9FCBA9), UINT64_C(0x8976DF7C70D9939B), UINT64_C(0xEAE6E74B21AF14DD), UINT64_C(0x09F098680D0861F9)}, {UINT64_C(0x4F7FE26E21A781FF), UINT64_C(0x1725B8D0D73DCEF7), UINT64_C(0x9DA632177E743498), UINT64_C(0x0F51D42C1B828B99)}}, {{UINT64_C(0xBABB076B9AFE09BD), UINT64_C(0x4AC8922317C4050D), UINT64_C(0xCA3EA6E3DA3E57E8), UINT64_C(0x20AAA384A33242C0)}, {UINT64_C(0x6D3A1F2DEF929BF5), UINT64_C(0xB34E2605E751A62D), UINT64_C(0xE1AC629FB8CF1F99), UINT64_C(0x7152D4E3F0BBA01A)}}, {{UINT64_C(0xA97A6CE3943E5B8E), UINT64_C(0x1C0F6C7F2D053A9D), UINT64_C(0x9D4A91DE64457DE4), UINT64_C(0x1E19EA8FC6140057)}, {UINT64_C(0xD4766CB6500995C8), UINT64_C(0xA019D41DE70CD7EE), UINT64_C(0xBA1828AA7AB0A162), UINT64_C(0x0CACA0630B7A4E93)}}, {{UINT64_C(0x1E68315CA1B3FE03), UINT64_C(0x21FB277E1AAB6B20), UINT64_C(0x210305D76A90FB22), UINT64_C(0x4C3D3EEA2E51B9BC)}, {UINT64_C(0xC5662C6D89C3A2E8), UINT64_C(0x66EA48181712BF9B), UINT64_C(0x417F8F042254FBAB), UINT64_C(0x2F57DF29B057EEC1)}}, {{UINT64_C(0xF6975C9F6509AE4F), UINT64_C(0x58300438DC89C220), UINT64_C(0xE81DA879907FF785), UINT64_C(0x68D600E30910ED2F)}, {UINT64_C(0xFBB25113B43BF686), UINT64_C(0x8B391E3F50A64FAE), UINT64_C(0x8C1190D23112B7ED), UINT64_C(0x617BCD41CCB4CA50)}}, {{UINT64_C(0x75036E69DD780ACA), UINT64_C(0xC90A01DE6FBCD996), UINT64_C(0x75E1A8E80C851CEF), UINT64_C(0x7225D38AF71BDCC6)}, {UINT64_C(0x74AE6935868B78D2), UINT64_C(0xE70570F31CDB5A1E), UINT64_C(0x3E700C48BEBD2FA4), UINT64_C(0x3E483638325D3214)}}, {{UINT64_C(0x9F272CD5C0E6D8AD), UINT64_C(0x9E29687CE09743A2), UINT64_C(0xBE0E0D5993CD64B3), UINT64_C(0x5D57A75D504B58F0)}, {UINT64_C(0x81A1A6E35D44B092), UINT64_C(0x38AD0169310D7868), UINT64_C(0xC8D3C9A6CC297B73), UINT64_C(0x34D98A19908E0814)}}, {{UINT64_C(0xFFB946ADE5A57E1F), UINT64_C(0xF7EA0AA2191B6C5F), UINT64_C(0x52D070588DF529C1), UINT64_C(0x06B7BDE52AFDA727)}, {UINT64_C(0x651E6DC990658555), UINT64_C(0x8F910D891FC416CE), UINT64_C(0x0BA4D84ECBF086D5), UINT64_C(0x73DA158C0C4A4B4A)}}, {{UINT64_C(0xE22420A6521DB62C), UINT64_C(0x8EBC1A21BC90EB6F), UINT64_C(0xE1529AACE50F6EB4), UINT64_C(0x4025BF278BE235DB)}, {UINT64_C(0x406077109FFE2B82), UINT64_C(0x7A6BB75B696B4634), UINT64_C(0x0CEF27A92B2F25D3), UINT64_C(0x6C9CFFD7CA0B7112)}}, {{UINT64_C(0x12B39FF0EDA5C43B), UINT64_C(0x2E1FC66C54E0FE3F), UINT64_C(0xFB2DEA80248A9167), UINT64_C(0x11BCDA103B2BB322)}, {UINT64_C(0xFDDF6E8416D2C928), UINT64_C(0x99DDF6A136E887F4), UINT64_C(0x1E56D2F3920092D6), UINT64_C(0x67433BF42D77AE5A)}}, }, { {{UINT64_C(0x6C204DDC321BFA62), UINT64_C(0xA96E42B82F138A80), UINT64_C(0x4C98E986E3EC1A7D), UINT64_C(0x223C8BC4136CADC4)}, {UINT64_C(0xFA9F15D3BA3CE54A), UINT64_C(0xA103B9D719963D88), UINT64_C(0x1ED233542F811A21), UINT64_C(0x64D6B14C65A4E833)}}, {{UINT64_C(0x2485175CCFBD1039), UINT64_C(0xC4DAE65B7C92D8EC), UINT64_C(0x6FC70F541859FD47), UINT64_C(0x6D54344433E8305C)}, {UINT64_C(0x1A65FEC2944DDA07), UINT64_C(0x7BCF8391EF375B21), UINT64_C(0xDDCFC356BE4CD8D6), UINT64_C(0x4BF93B9E13850042)}}, {{UINT64_C(0xBDF7A56C88B7F950), UINT64_C(0x3A60E5FC81B8590E), UINT64_C(0x475B94D16F6E6807), UINT64_C(0x2F1B9F062F0D49A8)}, {UINT64_C(0x3C36DCF32E6A01D3), UINT64_C(0x807E1D5B30444003), UINT64_C(0xE3768486FECF5768), UINT64_C(0x73C4D0CFEF12B5CC)}}, {{UINT64_C(0x9D76477CF4C6FF93), UINT64_C(0x03F16687C5A1A495), UINT64_C(0x5071DA3DB41748B2), UINT64_C(0x0F3A3784971D6A7D)}, {UINT64_C(0x0B9A5AD62785A782), UINT64_C(0x957E72A009FF09F9), UINT64_C(0x3072C1DCAE3CF5F4), UINT64_C(0x63D463ACCD9CFD7E)}}, {{UINT64_C(0xDA0DEE0BC77B516C), UINT64_C(0x446D7199E6AA0E1F), UINT64_C(0xCC0D1590BFFA705C), UINT64_C(0x6A6FC81CC35B59BA)}, {UINT64_C(0x39DF210E593E3EB9), UINT64_C(0x17F331CED0DCC01F), UINT64_C(0x02E0E5EBBD176C5B), UINT64_C(0x68946CCC8A2D6290)}}, {{UINT64_C(0x8D1400D609ECFEF2), UINT64_C(0x57D5F91BE1E76A98), UINT64_C(0x5CF76130A12DFF8D), UINT64_C(0x5C36192261002939)}, {UINT64_C(0x8D45C8C1FB0FE974), UINT64_C(0x0C97725EF942ED70), UINT64_C(0xB1C6649873C5AA42), UINT64_C(0x4A121FC47E203187)}}, {{UINT64_C(0x58430EE3FCEDA76C), UINT64_C(0x3496699AF5C88D62), UINT64_C(0x1C3FC81114273E7E), UINT64_C(0x3E38E9FC1D6D67DA)}, {UINT64_C(0xBB683EA4AB685B3B), UINT64_C(0xB63F72B1B0904BB3), UINT64_C(0x5DFA23C547A75297), UINT64_C(0x09E80AA038B59560)}}, {{UINT64_C(0x7D8325C67F4D22FC), UINT64_C(0xBFFB01B18C2FA282), UINT64_C(0x01A037DC4A89BE98), UINT64_C(0x092F652584EA8C8A)}, {UINT64_C(0x873D33DAC52FD518), UINT64_C(0x0A245B1544AFDD41), UINT64_C(0x7899373798FA7FF5), UINT64_C(0x1BB48AD221D29087)}}, {{UINT64_C(0x00C97A991A59313C), UINT64_C(0xBD4F29EE5CF9A6FF), UINT64_C(0xEA59D87AD839B62B), UINT64_C(0x16F18F4897CAB63C)}, {UINT64_C(0xB339789A6F6C292F), UINT64_C(0xEC52E644D005ABB2), UINT64_C(0xEEAC93C9AE24DA46), UINT64_C(0x0ECB9957E5C43B4F)}}, {{UINT64_C(0xD91B220220561AF7), UINT64_C(0xECA260DD55F2CFB8), UINT64_C(0xF03A8C1D17B91CCF), UINT64_C(0x55A0491F64B35D9A)}, {UINT64_C(0x0A97E5CC1A2F8F39), UINT64_C(0x02C187D123B1D80B), UINT64_C(0xA9C13D26DB9FBA1A), UINT64_C(0x7CCDDBACF8051F0D)}}, {{UINT64_C(0x05CA8EA5ED0E9DB8), UINT64_C(0xE888079F53A8EA3F), UINT64_C(0x6DDBC40D9209BFA2), UINT64_C(0x068E5BA980DCEAEA)}, {UINT64_C(0xDB69D133B19D824B), UINT64_C(0x65154FB6E6A3A462), UINT64_C(0x9FCF733D020B2AC7), UINT64_C(0x15178DDEE1329315)}}, {{UINT64_C(0x76F78865877EE476), UINT64_C(0x5824EACC12B471BA), UINT64_C(0x71BDFADFBBB640A8), UINT64_C(0x5181B08F9A631D09)}, {UINT64_C(0x2913CCA5FFE978E8), UINT64_C(0x9CEF3612AEB89AA6), UINT64_C(0x93BB373EE02AD6DC), UINT64_C(0x5D7984F004144769)}}, {{UINT64_C(0x3219DB074F98D2C3), UINT64_C(0xE3EF888FBD40ACCC), UINT64_C(0x07A30E3A31124C73), UINT64_C(0x5D9C820BB070C53F)}, {UINT64_C(0x94D41768DA0661AB), UINT64_C(0x27FC266121FF87EB), UINT64_C(0xB8DCBC7FFF17A977), UINT64_C(0x71F75FF9392EB13D)}}, {{UINT64_C(0xC5CED56C9AD71AB0), UINT64_C(0xE744EAB039D6C9F1), UINT64_C(0x6E49B00B839BD904), UINT64_C(0x0C0EDE2CD7003054)}, {UINT64_C(0x792C3F801A6A1BB7), UINT64_C(0x6E5093B14B2C7885), UINT64_C(0x2887320913EA65F7), UINT64_C(0x085A2697F381C851)}}, {{UINT64_C(0x84FC6B9DDA60A255), UINT64_C(0x12397EED4B495BC6), UINT64_C(0x4881DF6B71A5AA87), UINT64_C(0x57BB32599572CFE2)}, {UINT64_C(0x306777593A10A65F), UINT64_C(0x670B82ECDB1758DD), UINT64_C(0xD84F3E8FD57B513E), UINT64_C(0x617A512A89088E78)}}, {{UINT64_C(0x83971322AE3D7707), UINT64_C(0x66563CDE6D34D0B4), UINT64_C(0x95342D9BC13309ED), UINT64_C(0x62C2B1B6082A5887)}, {UINT64_C(0xD94A8712C3C27158), UINT64_C(0xDE2C9C9DA844BF60), UINT64_C(0xDE897386CE3E4F3C), UINT64_C(0x2C22A82E6ACEBDF1)}}, }, { {{UINT64_C(0x2755028A0604E200), UINT64_C(0xADE23A7D44189101), UINT64_C(0xA6E418F4F0B7F9B7), UINT64_C(0x036F5503212EDC2A)}, {UINT64_C(0xE069D06A3F5E0456), UINT64_C(0x2FAFF7C80F37F2D8), UINT64_C(0xFF08E8797F5EDE53), UINT64_C(0x7F97725D797E0427)}}, {{UINT64_C(0xE44E39C1B32E5B1B), UINT64_C(0x25CD4614AD3EC706), UINT64_C(0x2E97B090E382C5D2), UINT64_C(0x3E1A1F6BB00D79F2)}, {UINT64_C(0x27573C4EC2375837), UINT64_C(0xAD53D2C86C8D5CCD), UINT64_C(0x94EE5460FC09725A), UINT64_C(0x6E59250602DD0DF4)}}, {{UINT64_C(0x6CFFA4BF3D0C7AC4), UINT64_C(0x663B121869ED4317), UINT64_C(0x933094F6C79AD5C1), UINT64_C(0x569F37EDFFC54767)}, {UINT64_C(0x954EEE0C1F338782), UINT64_C(0x5BE69673A46CA276), UINT64_C(0x77BA000920CB26DC), UINT64_C(0x2211CAC3029316AE)}}, {{UINT64_C(0xC8DEF3CB184EBD7C), UINT64_C(0x393370506A4DB0A0), UINT64_C(0x6FF7993A0BE1D82C), UINT64_C(0x01D7674AFC9252C0)}, {UINT64_C(0xB10BA727F62D9268), UINT64_C(0x6E2338D8817B687B), UINT64_C(0x266443F2E47405F1), UINT64_C(0x6A1BD9CE6872B879)}}, {{UINT64_C(0x192137652B2BD346), UINT64_C(0x962CA22CE2ACFB8E), UINT64_C(0x518CF45D62FECDE1), UINT64_C(0x529AE629A13D9E8D)}, {UINT64_C(0xAF796DB0BB69D5E3), UINT64_C(0xA064209DD4E596B7), UINT64_C(0x9F3DFD4A47942C73), UINT64_C(0x7FAB6C6D7810D5EC)}}, {{UINT64_C(0x55D1525066A3B287), UINT64_C(0x1ECC6A20EEFDDC75), UINT64_C(0xF683FA6026DE8C01), UINT64_C(0x4F5DE2A69FBA658C)}, {UINT64_C(0xE748D78AC66D82F4), UINT64_C(0x2BA525EF3B24C76B), UINT64_C(0x5A9539E630EE69CE), UINT64_C(0x2DA4C4C2B7861B2D)}}, {{UINT64_C(0x9D1E982D820743E6), UINT64_C(0x705D9237AB0CC42D), UINT64_C(0xBDD0166347C4E7D7), UINT64_C(0x3D48EE78F8E69896)}, {UINT64_C(0x7A822BCD41132782), UINT64_C(0xBD41BEFAEE46F715), UINT64_C(0x8E5C3B5FD0B2F4B0), UINT64_C(0x690A53D45E47ED55)}}, {{UINT64_C(0x390536C165A40E44), UINT64_C(0x4B4D79701C92235C), UINT64_C(0xCAC270848B7389E4), UINT64_C(0x7B5B23B219041D01)}, {UINT64_C(0x7C18B9733B5FD5BA), UINT64_C(0xFD14865D84B72217), UINT64_C(0x5592547E267EDE4C), UINT64_C(0x22DB62E58B369753)}}, {{UINT64_C(0x06083D33DDF15BDD), UINT64_C(0x5766555F361925F5), UINT64_C(0xECC0F110B7ACDEA7), UINT64_C(0x3E3F1B270A3453B5)}, {UINT64_C(0x5A8B7DF96F7B980D), UINT64_C(0xEBA90E39B44756AC), UINT64_C(0x954D7ECDAC9A7DB2), UINT64_C(0x43F688D328EA7151)}}, {{UINT64_C(0x51F645694638EFAE), UINT64_C(0x5840A5DB3D28BF3C), UINT64_C(0xDD486261134D3E8F), UINT64_C(0x09F17E2C7B6B466B)}, {UINT64_C(0x30D3546378ED7016), UINT64_C(0x342E9701B86D8508), UINT64_C(0xA3FF656542B19533), UINT64_C(0x4405F02C061A4A81)}}, {{UINT64_C(0x15C921C03D3AAF1E), UINT64_C(0x2DD720C77D297559), UINT64_C(0x93A07904CB80E3B2), UINT64_C(0x427C610B6B1EDB93)}, {UINT64_C(0xD2CE818FF61E2F41), UINT64_C(0x1DA534218252FB3C), UINT64_C(0x37A4A997ED07538F), UINT64_C(0x48A928BF962454F2)}}, {{UINT64_C(0x65091E4D7A420273), UINT64_C(0x6AF382AFE54C0B47), UINT64_C(0x150DAB088047A423), UINT64_C(0x22C3740A45BD197C)}, {UINT64_C(0x64429AA0E07C3468), UINT64_C(0xC506B8C97B37FE10), UINT64_C(0x30E2FE783CC5062C), UINT64_C(0x2F3B5A5FA9242F2D)}}, {{UINT64_C(0x2619A3B25A40BCA1), UINT64_C(0xD012DF23118C2FEA), UINT64_C(0x2868C8B7B73FE15C), UINT64_C(0x45A9CC5AEB10B475)}, {UINT64_C(0x7111AB75069050AD), UINT64_C(0x0665182BEC2398A9), UINT64_C(0xD9A5126E9B86A240), UINT64_C(0x601CF0E040E2AED6)}}, {{UINT64_C(0xE74C9DCDF48C8655), UINT64_C(0xEE703CA8900E89D5), UINT64_C(0x6C2DFF8B5390F052), UINT64_C(0x08588E891316CC4C)}, {UINT64_C(0x0F2CC83A47E80C87), UINT64_C(0x23DE34CFD87824E4), UINT64_C(0xC530AF41541FE8F9), UINT64_C(0x0BF01DC0D142F1C0)}}, {{UINT64_C(0x210B0B1E886C0C4A), UINT64_C(0x66369DF19C56A126), UINT64_C(0x5D79AE81EAC22A5E), UINT64_C(0x4E6C67D4D16F7DB6)}, {UINT64_C(0x274572F6247CDE60), UINT64_C(0xF3C92AC754E8454B), UINT64_C(0x784EC1A1F08C32D1), UINT64_C(0x222716D8E1FE9C4E)}}, {{UINT64_C(0xAF6AEF5D3FB1DB1E), UINT64_C(0xB8B55842C4C2A4D8), UINT64_C(0x258A2F44CA5AB578), UINT64_C(0x558A803F7D8B2D70)}, {UINT64_C(0x9A7345C37E0247A3), UINT64_C(0x4E5A6904B4D920B1), UINT64_C(0xCF7FAA4176BCBBE1), UINT64_C(0x66CF993FEE112271)}}, }, { {{UINT64_C(0xDE7D208F84D2C56B), UINT64_C(0xD1C77403DDA20F33), UINT64_C(0xB73FDC099A6F337A), UINT64_C(0x1B2A380740CD2CBD)}, {UINT64_C(0xB642FA2C65988D73), UINT64_C(0x117E75BC059DAB8E), UINT64_C(0xC7E2E935D6B279AA), UINT64_C(0x5EEB9654EEA2A445)}}, {{UINT64_C(0xA84747C0A59D7A2A), UINT64_C(0x4478AD4A1004C5B8), UINT64_C(0xF55C2B1BA22DE791), UINT64_C(0x2FF6097D23F8F89F)}, {UINT64_C(0xD079C875E117BC40), UINT64_C(0x14AEA36003CB43DD), UINT64_C(0x8C730D890A20D653), UINT64_C(0x6956274A02FD02D8)}}, {{UINT64_C(0x9F5D0E9DD46293CF), UINT64_C(0x53748DD4F0D93AB7), UINT64_C(0x6F81339FB9C37CF0), UINT64_C(0x00B8677AF4B041FC)}, {UINT64_C(0xF76E0FFEB5A6FE97), UINT64_C(0x6D3C71F5F7D198A2), UINT64_C(0xF91E840811420372), UINT64_C(0x36F9F35470036AED)}}, {{UINT64_C(0x503AF4F25D446956), UINT64_C(0xCA08C5372DC9777C), UINT64_C(0xDB4BA888E1308D3A), UINT64_C(0x01EA28EA01DB98CB)}, {UINT64_C(0x27CC52A9A7DF5FE0), UINT64_C(0x7DA5186B7DE31E0A), UINT64_C(0x63E32889F136FAD5), UINT64_C(0x1BB010A8A363AF23)}}, {{UINT64_C(0x65828B54C0FE56C9), UINT64_C(0x7322CD514ED3935A), UINT64_C(0x42F068F437B4A727), UINT64_C(0x7AA9F9F0B4C02BE4)}, {UINT64_C(0xBB77851ADEBB2DD4), UINT64_C(0x7757D5F6D105B81F), UINT64_C(0x7805369C52FA1512), UINT64_C(0x4CBC43AE38B6976A)}}, {{UINT64_C(0x24FE8ABD4096725B), UINT64_C(0xC3FAC73A3895D1E2), UINT64_C(0xBCAF7757006A2360), UINT64_C(0x75AE96ADC03EBB33)}, {UINT64_C(0x310744780BD1FB6F), UINT64_C(0x729E8E6AEA386CBE), UINT64_C(0xA8BBCC0B4845AAEC), UINT64_C(0x1A0A2D19E6582656)}}, {{UINT64_C(0x332BC9BD69BD55F7), UINT64_C(0x93D987E2EFB6F780), UINT64_C(0xE57DE09614381F4D), UINT64_C(0x7BDF4217FF01C4D9)}, {UINT64_C(0x2A07C4AB1956BF02), UINT64_C(0x7C7B3684553823D9), UINT64_C(0x8F750E8ED40F600C), UINT64_C(0x63F253E99693A3C3)}}, {{UINT64_C(0x250ED8BFC62CE42B), UINT64_C(0xE8A1A295E70674E1), UINT64_C(0x05ED093D163A92F1), UINT64_C(0x515FF44B628969A0)}, {UINT64_C(0xF617DF0341CE3AF8), UINT64_C(0xCADE131AF9E60202), UINT64_C(0xFE83C379363B87E9), UINT64_C(0x7196A80B493EF65F)}}, {{UINT64_C(0x4B176FE6D7A2047B), UINT64_C(0x6981D18241DCA514), UINT64_C(0xDDC7EE8EDC74AC2E), UINT64_C(0x3A95A20385CC07D1)}, {UINT64_C(0x8D4BA2D8841E3200), UINT64_C(0x837DDD9B5F654197), UINT64_C(0x388D358EFBFE4D06), UINT64_C(0x562DE2F261143A85)}}, {{UINT64_C(0x3BA1F6E5CFACB903), UINT64_C(0xB5BBA41FBD97A3A2), UINT64_C(0xB86F117FCFCF2547), UINT64_C(0x506428593D9A13DB)}, {UINT64_C(0xC15C82AE7B5F2A8F), UINT64_C(0x47E772DDEF89351E), UINT64_C(0x78C53901CAAC4CC7), UINT64_C(0x6B0F5D3068D72131)}}, {{UINT64_C(0x47E17734A0B407E6), UINT64_C(0x29E0683034949A81), UINT64_C(0x63D83340CB1AC772), UINT64_C(0x178A6DD6EB84F909)}, {UINT64_C(0xA9E948263C27D7BA), UINT64_C(0xC86AF96DDB027A4C), UINT64_C(0xE7D04E3456D5DF86), UINT64_C(0x7212EAC22E8D0EE3)}}, {{UINT64_C(0xE7E5AA648A75F66B), UINT64_C(0x7E86B6AA8CFD9597), UINT64_C(0x1B7DDE0C834C0271), UINT64_C(0x397EAF2AD4AD306F)}, {UINT64_C(0x0A3579061657E32B), UINT64_C(0xAAEB2DCF4957B3AF), UINT64_C(0x1C0CBD0269D3CEE9), UINT64_C(0x7434EC325A6E7D53)}}, {{UINT64_C(0xEB5878F785559E86), UINT64_C(0xB9555F704A09C168), UINT64_C(0xBFFAC5DB80501134), UINT64_C(0x4CDBF53A05B53160)}, {UINT64_C(0x1413BA295F90344B), UINT64_C(0xC6A9D1EDD0DD0CFD), UINT64_C(0x8C56AA29A0C31B73), UINT64_C(0x1C9B0B61F4E58E08)}}, {{UINT64_C(0xBF8D22370E2F595A), UINT64_C(0x7A646816CBA13CD8), UINT64_C(0xBD2E93A15CD728B6), UINT64_C(0x30FDF85C07CF9009)}, {UINT64_C(0x3496D94906122B98), UINT64_C(0xE63EC7415A80B3AF), UINT64_C(0xA2A39CF782838A44), UINT64_C(0x4A064F99C015E1D4)}}, {{UINT64_C(0x9CCDF95B456CB242), UINT64_C(0xDA1CB24E6F4517DC), UINT64_C(0x60450E0F931A1115), UINT64_C(0x6780D774B5680A8D)}, {UINT64_C(0xAFE48DCD1FDA4243), UINT64_C(0x6BDD541CAE9733C7), UINT64_C(0xCBBCC69CD79D1D52), UINT64_C(0x334F4F671A513B3E)}}, {{UINT64_C(0xCE7712C4DF49E1A0), UINT64_C(0xB5444862E0B96135), UINT64_C(0x10564C4BF050D010), UINT64_C(0x0531AEC8FEBEFCC8)}, {UINT64_C(0xD45B4BE770DF6D29), UINT64_C(0x1ACC2D706829054E), UINT64_C(0x9744CDE154E56E05), UINT64_C(0x3C5DE93E6EE02696)}}, }, { {{UINT64_C(0xF43A2B993951B674), UINT64_C(0xE82789E85E72FC98), UINT64_C(0x2AD4843686992601), UINT64_C(0x3FDEB17201A2B65A)}, {UINT64_C(0x926B48393666322B), UINT64_C(0x68847D5C44B3FDB7), UINT64_C(0xD06C450DF2F5E247), UINT64_C(0x0CEC0646BBA7C892)}}, {{UINT64_C(0x76446D2661F9C9DA), UINT64_C(0xEF2C7B98AC60376F), UINT64_C(0xEEA8CABE2410C057), UINT64_C(0x4C2CE2A73672A2B6)}, {UINT64_C(0x3F77094512879BA5), UINT64_C(0x719D5BD0AD913022), UINT64_C(0x28A82DD936D445A4), UINT64_C(0x26382C23965965AA)}}, {{UINT64_C(0x66709D92B8AA8419), UINT64_C(0xFAEFF2E40AB5C241), UINT64_C(0xABB7C5DD1DD46DEB), UINT64_C(0x7DD03C3339DB6CB5)}, {UINT64_C(0x76CDD1EA9E160F01), UINT64_C(0x00598D5681C5CA37), UINT64_C(0x16D23B04241772EC), UINT64_C(0x5132B02852A6B807)}}, {{UINT64_C(0x6D48D4B5CC041445), UINT64_C(0x0B1CD9231528DF63), UINT64_C(0x82EE4DC64A815F60), UINT64_C(0x29DA60590451E242)}, {UINT64_C(0xCD90BFB017A8A6D0), UINT64_C(0x8BCF439252A7FC3D), UINT64_C(0x49AD55F21974860C), UINT64_C(0x20BBF0105EDCB1D2)}}, {{UINT64_C(0xB4F0EA84A8F6C08C), UINT64_C(0x4341BEA7D50164F3), UINT64_C(0xE538901906320C0F), UINT64_C(0x69D4851A8BA6F033)}, {UINT64_C(0x1CE5866077902045), UINT64_C(0xF3B88D85BD8579B3), UINT64_C(0xF84FF63A4FB0A17B), UINT64_C(0x09EE62EEDE6581BF)}}, {{UINT64_C(0x8B8C15B57C0516DE), UINT64_C(0x3B448FC3A530B89F), UINT64_C(0xE385BBE5500B0251), UINT64_C(0x5F643F85ED70804B)}, {UINT64_C(0x550D9B7D239E85A5), UINT64_C(0xDC910B5B8666E41F), UINT64_C(0x655221817D4E390F), UINT64_C(0x5DD2D3E83162FE10)}}, {{UINT64_C(0x59609390DF024A25), UINT64_C(0xE66A77E908CCBA91), UINT64_C(0xC5CEA91A65E24DB6), UINT64_C(0x0888DFB53DCEA0A7)}, {UINT64_C(0x8C8E58CC92FA0754), UINT64_C(0x99C259ABF7DC9538), UINT64_C(0x3A06D8ED9BEFE750), UINT64_C(0x71AF22E1FAACDC97)}}, {{UINT64_C(0xCC41D094250AC059), UINT64_C(0xCD792A733BE3DA01), UINT64_C(0x2DA07802CC61EFE1), UINT64_C(0x293AFB0857053A5D)}, {UINT64_C(0x3E7E48842FD8A8A0), UINT64_C(0x183FA5000B9B48D3), UINT64_C(0x9CAC07BE431AACF6), UINT64_C(0x4F82D7992DF89F10)}}, {{UINT64_C(0xFD9F61A80A84935C), UINT64_C(0x78B948D0BB5A7E56), UINT64_C(0xDA4787660ACCEEB3), UINT64_C(0x47BDAE4453C3851D)}, {UINT64_C(0x5AE2C60C0CFE8D0D), UINT64_C(0xAC8F79B31D8A79C9), UINT64_C(0xA958C15E0A79CA31), UINT64_C(0x1C46E20EF0952018)}}, {{UINT64_C(0xAE552ECEF04AC529), UINT64_C(0xB295B601E2BFEFBC), UINT64_C(0xECC1EE5554733412), UINT64_C(0x28BCBA5312282094)}, {UINT64_C(0x306C078150B25069), UINT64_C(0x10D5D23CE9A18FFE), UINT64_C(0xC34FC5C71BD5489F), UINT64_C(0x2B610028E191867D)}}, {{UINT64_C(0x458A1CC13E17E84D), UINT64_C(0x6EAE343D5D7CFB98), UINT64_C(0xC6E0FDAA101F0B7E), UINT64_C(0x0B9F7C2C2A023288)}, {UINT64_C(0xBEA893A86F3FCAA0), UINT64_C(0x7D711B2B452B07C0), UINT64_C(0x2895873798E2C88D), UINT64_C(0x553A0180DFD99A2A)}}, {{UINT64_C(0x8D617BE80DBA5986), UINT64_C(0xDB763C1413D18594), UINT64_C(0x822CB0DAD2DAD82F), UINT64_C(0x37ACD99F93239947)}, {UINT64_C(0x6A2A7070CDC08BE6), UINT64_C(0x86B3B66ACF6D63FF), UINT64_C(0x5BEFF3FB0F7D4A67), UINT64_C(0x05C25557EBC94AE5)}}, {{UINT64_C(0x5D1DC08789183418), UINT64_C(0xA25C7AE26EA5A960), UINT64_C(0x074698B9D31F3AAE), UINT64_C(0x5A5B510B221788A4)}, {UINT64_C(0x896A87871DCE95FE), UINT64_C(0x89E7B93D7F24020C), UINT64_C(0xFC19BF42865B4334), UINT64_C(0x0389FBF75B78B06D)}}, {{UINT64_C(0x73B6DA7B0BB3A3E2), UINT64_C(0xDBC1267044D56755), UINT64_C(0x7AF2DE287CC1C589), UINT64_C(0x7E248FCB697CB6B7)}, {UINT64_C(0x9410EC06C64202C0), UINT64_C(0x79C8215875EB3A8C), UINT64_C(0x74FDD2F6E95C5EA9), UINT64_C(0x2A40B5B51CCA72C7)}}, {{UINT64_C(0x569842235C29E320), UINT64_C(0x8266392AE871D9E2), UINT64_C(0x9D86C6C77B391763), UINT64_C(0x5E9E61E202543C9E)}, {UINT64_C(0xD62A9334D2501D1A), UINT64_C(0x9D19F54D9211135D), UINT64_C(0x66D0B9618FE81272), UINT64_C(0x6E64635AD09C2033)}}, {{UINT64_C(0x93BD0AD806F84E11), UINT64_C(0x45F18F2B131AFDBF), UINT64_C(0x881F053F6058EB37), UINT64_C(0x36B8D656948AD0D5)}, {UINT64_C(0x53DC2E02E1934E38), UINT64_C(0xA8AD5055C0435B6C), UINT64_C(0x0DF7BD114BD7154F), UINT64_C(0x6350B05E73BC98FC)}}, }, { {{UINT64_C(0x12AC549604BF927A), UINT64_C(0x9BB322DBE749323E), UINT64_C(0xC10C666DF6D99AD6), UINT64_C(0x0FDF8FB34C883E0A)}, {UINT64_C(0x10667F92665272E8), UINT64_C(0xA30D4CE15BF8702F), UINT64_C(0x56314B47A2D6033D), UINT64_C(0x09EC90D9DAC1A10E)}}, {{UINT64_C(0x364F06DDC9EB81D1), UINT64_C(0xFD181A564DC5CB76), UINT64_C(0x91CF010CE264567C), UINT64_C(0x71D9A95BA05C02FC)}, {UINT64_C(0xAB5AFBA653967407), UINT64_C(0x3FC779139B0AA089), UINT64_C(0xDF1D4912AF29EF02), UINT64_C(0x01C3D61C5796A0A5)}}, {{UINT64_C(0x11503A1CB376E8DE), UINT64_C(0x5CB17D6DB8B98321), UINT64_C(0x96C9D585BD8FE9C2), UINT64_C(0x048C8DA7D117171D)}, {UINT64_C(0xDF7FABB8B582282A), UINT64_C(0x75C2A93724FD6BB7), UINT64_C(0xDF0DBD3200633701), UINT64_C(0x04FB7AEC039B3E72)}}, {{UINT64_C(0xE60CCE960E20C09A), UINT64_C(0xAD295B31116E1C38), UINT64_C(0xCA6B625DC04477D0), UINT64_C(0x032FE03BFFA32E36)}, {UINT64_C(0x46334FEEE2AAABC6), UINT64_C(0x9808B03CDA1C6871), UINT64_C(0x76D0E3AAF934A482), UINT64_C(0x2B0BF54AF9CB8F97)}}, {{UINT64_C(0xB5D527172CA29D02), UINT64_C(0xF9DAEAFBDBEACF03), UINT64_C(0x3786E64B113A3811), UINT64_C(0x6A01A1A55C30569D)}, {UINT64_C(0x0A91E160BA1C28B6), UINT64_C(0x5BFA32BA929D3F05), UINT64_C(0x1108F87540C51084), UINT64_C(0x37FD238342FD5AE1)}}, {{UINT64_C(0xABF14EDE2A79BFB8), UINT64_C(0x08B34155AA34300C), UINT64_C(0x85C0DFA064077041), UINT64_C(0x3AE5D28DF542D447)}, {UINT64_C(0xC303A0FEB74DC4FB), UINT64_C(0xB75292FA556E0B87), UINT64_C(0x785628B051BDC64C), UINT64_C(0x43FE786E13C579F6)}}, {{UINT64_C(0xBC5898CB5F08790F), UINT64_C(0xA298A59A125644EC), UINT64_C(0xD2D9627BB048217A), UINT64_C(0x6DCEEF327B1F23F7)}, {UINT64_C(0x7F02FC44FA7B9C6A), UINT64_C(0x90C6496073597BF7), UINT64_C(0x5DD7E4F42CB0B3A2), UINT64_C(0x5EC5F92C43E83553)}}, {{UINT64_C(0xC06B4D4959E2C8E9), UINT64_C(0x7DBC82181DF8AD8B), UINT64_C(0x35570120DAE8B6D7), UINT64_C(0x4222A1BA0CDE2691)}, {UINT64_C(0xD2F1EFA6C1693046), UINT64_C(0x2707228D7D36D9CD), UINT64_C(0xD668EE25062D499C), UINT64_C(0x7AC81BDFCE2621A0)}}, {{UINT64_C(0x3A9F04BB16F6A215), UINT64_C(0x739BB2BC89E5494E), UINT64_C(0xCB8DBAE8D1CEB043), UINT64_C(0x6B177DF009A6B465)}, {UINT64_C(0xB7C4980E1A529744), UINT64_C(0x3941B9970E9012B5), UINT64_C(0xDF317B9504C6D677), UINT64_C(0x17898D81829F51D6)}}, {{UINT64_C(0x3D48FD66A12282BA), UINT64_C(0xB775465B899E5A1A), UINT64_C(0xDE0CCB9955D95C35), UINT64_C(0x4CB3CCDD950AB9DF)}, {UINT64_C(0x0B4ABA02175C4CAE), UINT64_C(0x2DA7C698CF86187C), UINT64_C(0x3A4453DF9A9BF6CA), UINT64_C(0x53C86F9C8BB9F543)}}, {{UINT64_C(0x806B815E5B7DB133), UINT64_C(0x2451D6AC118FA7C1), UINT64_C(0x32C148B6FB0BEFC3), UINT64_C(0x2E6ECEF6E433031E)}, {UINT64_C(0x2B78F31754B2EE29), UINT64_C(0xBC321BF95A73BF01), UINT64_C(0xDF6F7840F8F7F981), UINT64_C(0x751A917A22280C40)}}, {{UINT64_C(0x73EFA6314F9161C8), UINT64_C(0xB61C5E6821145C52), UINT64_C(0x609477736A04DC52), UINT64_C(0x758E38FF2C2073B2)}, {UINT64_C(0xDC6FEA7303A54541), UINT64_C(0x5E77682CB6E65787), UINT64_C(0xAFEF6C1C37370FD0), UINT64_C(0x33DEEF00D5AC255A)}}, {{UINT64_C(0x1AD81101061D35CC), UINT64_C(0xD55EED7D8A77D246), UINT64_C(0x8D59DC22926E64C3), UINT64_C(0x76C9D6CEAFC6FFA6)}, {UINT64_C(0x945A89B53F4FCC0F), UINT64_C(0x65EB52CF9087F46A), UINT64_C(0xC3380377AE9F09DE), UINT64_C(0x59067EDD43DFD5FB)}}, {{UINT64_C(0xCBB7BC66CF841445), UINT64_C(0x9ED681D3A3BE7C94), UINT64_C(0xF5CF59BE396C6DD5), UINT64_C(0x2598A5DCFA763634)}, {UINT64_C(0xAD2B445A85CF4FDE), UINT64_C(0xC8CE3F42A0D92F4C), UINT64_C(0x78356D5BF01CD0F5), UINT64_C(0x26E44A455D50C9D7)}}, {{UINT64_C(0x22EB53E34EDF35A5), UINT64_C(0xA0C6CDEFAF1A8A60), UINT64_C(0x1D31BA2CD07C1EBD), UINT64_C(0x513511A0D2C2ADE1)}, {UINT64_C(0xBD3772D4C4449889), UINT64_C(0xAF5EF819D3F49C61), UINT64_C(0xAAF2159940047745), UINT64_C(0x2128938CA54B8080)}}, {{UINT64_C(0x9761A94A73ADBEC8), UINT64_C(0x4710BBF01FB2F257), UINT64_C(0xFE52603EB3920007), UINT64_C(0x663937507DE06F13)}, {UINT64_C(0x35F4E633965AC706), UINT64_C(0xF49DC41833F953E5), UINT64_C(0x1562AD5131CFE467), UINT64_C(0x035FB54D8ADB1F7A)}}, }, { {{UINT64_C(0xF632081FFD73062E), UINT64_C(0xB2740C19CB740B59), UINT64_C(0x2DFD957F8751E315), UINT64_C(0x5722E015C21039C2)}, {UINT64_C(0x44781BFCA4E56D39), UINT64_C(0x894BD2F7DA2FBE63), UINT64_C(0x9E81007B5DE22DE0), UINT64_C(0x0CED0859C68788FC)}}, {{UINT64_C(0x97DD8CF18DDA6292), UINT64_C(0x3E9191F727FCF7F1), UINT64_C(0x07885E32DAA6AD44), UINT64_C(0x624CE66EBE9F7E62)}, {UINT64_C(0x0483DA421893A3D9), UINT64_C(0x1041B7EA8F2A105F), UINT64_C(0x5B706F99429A24B9), UINT64_C(0x30BFBCEE167C12E1)}}, {{UINT64_C(0xEB2C7218C38251D8), UINT64_C(0x5FE5D8F6022B6411), UINT64_C(0xF62200C193DCCB63), UINT64_C(0x2CF0F8F1CFF221E6)}, {UINT64_C(0xDCF1BCD69217EE42), UINT64_C(0x1904879C9DB2580B), UINT64_C(0x2DDB7E5DF6510164), UINT64_C(0x7BB299858A0EAC6B)}}, {{UINT64_C(0x98313C0E0FCF8397), UINT64_C(0xB594D0B742C8EEF1), UINT64_C(0xBD31FC3497E842F7), UINT64_C(0x49476B9D8F3ADB9B)}, {UINT64_C(0xD1B5FD3750B45445), UINT64_C(0x526C51CAD583A89F), UINT64_C(0x5D461F096782C060), UINT64_C(0x414023EC27274A60)}}, {{UINT64_C(0x7C809B26EAE4285A), UINT64_C(0x939814BF0A066043), UINT64_C(0x9CBAC0BB6C640E3D), UINT64_C(0x647E22E130EB1B86)}, {UINT64_C(0x21E2A42D3C7DFA0D), UINT64_C(0xFF8CC304E2CD0CCE), UINT64_C(0x3DC8C9203496964C), UINT64_C(0x5D91FE782B4DF7C2)}}, {{UINT64_C(0xD5BBBD6E96D84346), UINT64_C(0x8363527BF91FFA8C), UINT64_C(0x931D0FDA7F408588), UINT64_C(0x2C51F17BB0B19D0F)}, {UINT64_C(0x7A693804FF61C86D), UINT64_C(0xBAB4AC45B3FFD529), UINT64_C(0xEDEA275F4C171C84), UINT64_C(0x0520925CD59B94D9)}}, {{UINT64_C(0xB6A620AAE8718BB4), UINT64_C(0x67851F0F88D37A61), UINT64_C(0xCBEE8DBC9984A787), UINT64_C(0x7190B766AE834635)}, {UINT64_C(0x3A1D7DB4C9AC1A8E), UINT64_C(0x6EEBD5AD7B97BCB7), UINT64_C(0x609786259D0AB769), UINT64_C(0x5AD56C0C7C7F02DD)}}, {{UINT64_C(0x2C0003DE2DB3B6F2), UINT64_C(0x3BE1CE3FEFCF1DD8), UINT64_C(0xE2F79872379E6B8A), UINT64_C(0x3F9640D80B898094)}, {UINT64_C(0x11EBD93715B29D41), UINT64_C(0xD6A076B93EF17D8C), UINT64_C(0x0A2C0016B38ED3BA), UINT64_C(0x64329A02CCB161CC)}}, {{UINT64_C(0xD135032DB1ED1DEA), UINT64_C(0x43F7684842F734A0), UINT64_C(0x1F6C12BD3C18D8C5), UINT64_C(0x7D7757B7C0A304E8)}, {UINT64_C(0x3F0C2867DE3B6B9F), UINT64_C(0x72F98EBBB7201E4F), UINT64_C(0xCC408000940E748D), UINT64_C(0x34FE6D8FAD74B322)}}, {{UINT64_C(0xA12A9359E6D884FE), UINT64_C(0xB080A081DE063103), UINT64_C(0x672DE27D97ABB854), UINT64_C(0x712B0883EE6F3485)}, {UINT64_C(0xF430BF2D2044A2A2), UINT64_C(0x665610207D12027A), UINT64_C(0x5ED63AD22C539C3B), UINT64_C(0x7982AAD0FE5EE1D1)}}, {{UINT64_C(0x873DC8F63BE94D26), UINT64_C(0x909236394B41BD76), UINT64_C(0xE439A4960CBE4B5C), UINT64_C(0x424F8D2411782BF1)}, {UINT64_C(0x6612BD9949686ED9), UINT64_C(0x78157AA9FB04E27E), UINT64_C(0x844E1616805F809C), UINT64_C(0x717AEB3262CB8BCD)}}, {{UINT64_C(0xE98C1A0E5248CF6A), UINT64_C(0xC84294A8B0E4ADF8), UINT64_C(0xD35748A4A7769275), UINT64_C(0x2C3867E103363C82)}, {UINT64_C(0x2EC7AF438F43885A), UINT64_C(0x7979D1A23AE516C7), UINT64_C(0x059939EC8B81056C), UINT64_C(0x434AA4DD7E358480)}}, {{UINT64_C(0x12EA1C874A5228EA), UINT64_C(0x47B481984D293B9F), UINT64_C(0x319CE379E9696688), UINT64_C(0x7C9FF5957CE6FD05)}, {UINT64_C(0x15E954DF3093E3E4), UINT64_C(0xBC98307C304015AF), UINT64_C(0x66522DF8975C69C5), UINT64_C(0x4C9EBFB3963CE892)}}, {{UINT64_C(0x1CEEF18A628FB125), UINT64_C(0xFB69A2344BF30BB6), UINT64_C(0x510EB33970C9C864), UINT64_C(0x1EE9D1ED8A89151D)}, {UINT64_C(0x340940284EE1A486), UINT64_C(0x664401672FC79CEE), UINT64_C(0xB597625AC7DA3A75), UINT64_C(0x6E5B920E65205AF9)}}, {{UINT64_C(0x749D0CA4D87C914C), UINT64_C(0x55ECBEBB0D60C59E), UINT64_C(0x916A1127A65B4652), UINT64_C(0x503964D44E4767A3)}, {UINT64_C(0x8899A4C21B1F94D5), UINT64_C(0xEFFCAF5233E0D94D), UINT64_C(0x61B89B3FA3DAD87D), UINT64_C(0x3CB455F55088D6BE)}}, {{UINT64_C(0x5088A52B70678C14), UINT64_C(0x212823D941B00FC3), UINT64_C(0x38D5CEB619865BDB), UINT64_C(0x2E9C7FD712E63491)}, {UINT64_C(0x6656F91659E73913), UINT64_C(0x57AE9A47E9035A63), UINT64_C(0x970DCF2BF02B8DAE), UINT64_C(0x3366F8A6950FF8A9)}}, }, { {{UINT64_C(0x93DABD6FAC4A8F83), UINT64_C(0x272334881CFF0AAD), UINT64_C(0xBCAC3181F500EDFB), UINT64_C(0x27C6DB15B5297515)}, {UINT64_C(0x9CD142D92F08A89F), UINT64_C(0x3C0054232EAD0A80), UINT64_C(0x82845F9544A7623A), UINT64_C(0x5104707072BC4862)}}, {{UINT64_C(0x4303797ADC1B9159), UINT64_C(0x7842434B5D9C9AC1), UINT64_C(0x8A36ED2D6009FE2E), UINT64_C(0x11FE35C95106429C)}, {UINT64_C(0xDF20A39323554A92), UINT64_C(0x59364A48932E37C2), UINT64_C(0x6D7DE6AE7754A5DF), UINT64_C(0x00CCC6A3462725AC)}}, {{UINT64_C(0xB1F86CA5BAE83077), UINT64_C(0x82FE28A55110782C), UINT64_C(0x8031BBF3D942182C), UINT64_C(0x4F1F3815410D9F83)}, {UINT64_C(0xE57F9907835ABA65), UINT64_C(0x0A8220C25AA10903), UINT64_C(0x2E9847178812602E), UINT64_C(0x0AEC467D2A7D2C6C)}}, {{UINT64_C(0xC779F708C4DBED03), UINT64_C(0x10A30CD88582BD4E), UINT64_C(0xFA5646C5243FEAEE), UINT64_C(0x1CFAF38ECA459EF7)}, {UINT64_C(0xCCDD014695BC8077), UINT64_C(0x4ECDE91965858C49), UINT64_C(0x562764C677FEE1B6), UINT64_C(0x3CF5A3AB43524407)}}, {{UINT64_C(0x0CCEAADD0F6EF445), UINT64_C(0x690C12C1C297AFAF), UINT64_C(0xD67AA6EAC15B3D7B), UINT64_C(0x445D233C9FF8884E)}, {UINT64_C(0xC38FFD096CAD3234), UINT64_C(0xA690FFD1C7002F6F), UINT64_C(0xD445E85111ACB469), UINT64_C(0x64EE138097166E52)}}, {{UINT64_C(0x1EB031CCCEFBFB0A), UINT64_C(0x60F3DEF4AA40D6A9), UINT64_C(0x240F7CA5F96FCAFE), UINT64_C(0x53AF2F10E4450A06)}, {UINT64_C(0xE8AF980FA84058EF), UINT64_C(0x3E30001734AFFC6E), UINT64_C(0x62D1D094C86B458C), UINT64_C(0x5338383D75732C7E)}}, {{UINT64_C(0x6BD46AEB04D82638), UINT64_C(0x86940A3162E645A0), UINT64_C(0xD025B4B1A5736B40), UINT64_C(0x1056D9D0924E8E5E)}, {UINT64_C(0x3D0495CC1DB58101), UINT64_C(0xC300C6E72D677581), UINT64_C(0xFE38B898610AECEC), UINT64_C(0x1C8B94E2D66F64ED)}}, {{UINT64_C(0x5C9C3A3706D0C7EC), UINT64_C(0x6B4B5437B8A74918), UINT64_C(0x85689C989052A235), UINT64_C(0x4F7C2C8D87B53AA6)}, {UINT64_C(0x9FCD866FD8F1D334), UINT64_C(0xDBAAA2276898223C), UINT64_C(0x933DE9DA95C7B35A), UINT64_C(0x329AE20F3EA949FD)}}, {{UINT64_C(0xB83547AF948A2ECD), UINT64_C(0xEBF7C1E7BE34890C), UINT64_C(0x5F0F44F3F8211C33), UINT64_C(0x14A10BDBC6927638)}, {UINT64_C(0x7FD885675B579BF5), UINT64_C(0xD7C712815B7417F0), UINT64_C(0x7C04F1112083502E), UINT64_C(0x42029128E9AD6283)}}, {{UINT64_C(0x32FBFFAE2C5C0928), UINT64_C(0x4E31D3121469F1D3), UINT64_C(0x17307E28D79F51A2), UINT64_C(0x546C91AF79A51EBD)}, {UINT64_C(0x041D464D668086A6), UINT64_C(0x4986BDE50DB695DB), UINT64_C(0xCBA5F6EEEF317AA0), UINT64_C(0x5879259F730221D3)}}, {{UINT64_C(0xBD9C5CA5253BB4BA), UINT64_C(0xBBFC60790E2A75BB), UINT64_C(0xB5F11AE367AB9033), UINT64_C(0x6411CB1EAC2BFAFE)}, {UINT64_C(0x750734FEBF5390B0), UINT64_C(0xA044BED4879A3D3D), UINT64_C(0xE1E9F0E4A0C47093), UINT64_C(0x3BCAD93EB64DA48C)}}, {{UINT64_C(0xAFC6BCB6B37E16C2), UINT64_C(0xB54F56C02331B0CD), UINT64_C(0x725E81B45BBFBEE7), UINT64_C(0x2AE0C039E8B9D922)}, {UINT64_C(0x85301041DB958319), UINT64_C(0xDFAE34DD0681C4A4), UINT64_C(0x906C9219CBF7BB2B), UINT64_C(0x1463E9EF10A1710A)}}, {{UINT64_C(0x41E6C38821E6FC9D), UINT64_C(0x0B629A1E24A39EC8), UINT64_C(0xC62F60BE1AEF7A46), UINT64_C(0x59A50B54C5A16B6E)}, {UINT64_C(0x41CA367A285B891E), UINT64_C(0x70A6CE6BE2F8AF59), UINT64_C(0x74058747CBCEEF98), UINT64_C(0x4B912170601C375F)}}, {{UINT64_C(0x7D975CE2734EE866), UINT64_C(0x8D3572C6A09F5F14), UINT64_C(0x1DB4CC882232EE5E), UINT64_C(0x6C9790497C04C250)}, {UINT64_C(0xB5EC7706AE1EBC20), UINT64_C(0x7BDBD34DE21AAA32), UINT64_C(0xAD4125FDC5D1C733), UINT64_C(0x28B0302D731E6B09)}}, {{UINT64_C(0xD68EEC491521415E), UINT64_C(0x31963424092763C0), UINT64_C(0xCA90F48D0BFB513B), UINT64_C(0x4814DDFF573A056A)}, {UINT64_C(0x7E67599C400E804D), UINT64_C(0x3545275051FD0596), UINT64_C(0x45EDD7FBDB331B66), UINT64_C(0x172DA8B3BDEDE107)}}, {{UINT64_C(0xD46F284CB5BEB1C8), UINT64_C(0x5DE5D3F17B125701), UINT64_C(0xC3BA591E248053D1), UINT64_C(0x4E67F1F29C8F487C)}, {UINT64_C(0x380D93E48C252EC5), UINT64_C(0x913F96F122BC5CF6), UINT64_C(0xC1F06BBDD7BAA634), UINT64_C(0x7B625179A30BF1B9)}}, }, { {{UINT64_C(0x125D398DABD424AC), UINT64_C(0xFE65DF039CC70479), UINT64_C(0x89A31794FB5EC82C), UINT64_C(0x63EFFB55A31C5DCA)}, {UINT64_C(0x948F7571045B576A), UINT64_C(0xEC9F6FAB022B5FC8), UINT64_C(0x174DC936BD9F0DD2), UINT64_C(0x5EEA65E6F4C4EE8B)}}, {{UINT64_C(0xE97070AE8B800D67), UINT64_C(0xB9CB66FAB59B433E), UINT64_C(0xC4496574C6141364), UINT64_C(0x530AA9B56A9677EA)}, {UINT64_C(0x4A4E2EE375200533), UINT64_C(0x4C38A5090F20A9BE), UINT64_C(0x0A6FFBA4EA683510), UINT64_C(0x7340EFEE65732EA9)}}, {{UINT64_C(0x3A5612E4E41C2B43), UINT64_C(0x31F51B80FCB5C0A8), UINT64_C(0x4C5BBA64BD1F03E6), UINT64_C(0x253872433694ADCA)}, {UINT64_C(0xF114EFAF1F7E4D5C), UINT64_C(0xBEA5223A4EA3A59D), UINT64_C(0x82CEF46F67EB414D), UINT64_C(0x09D351C19B6CAC3D)}}, {{UINT64_C(0xC69F25CE810F5054), UINT64_C(0xE33E5E97548A2CDF), UINT64_C(0x20B3F44236946D3C), UINT64_C(0x572C0F5C65DF2D3B)}, {UINT64_C(0xFC5B2DF3CC953CC8), UINT64_C(0x934D54C0D1CCADC6), UINT64_C(0x828A906EA6E7B4DB), UINT64_C(0x610D36C15AD3076F)}}, {{UINT64_C(0x960B0A0174F56E27), UINT64_C(0x9942C6ACCF3FEA75), UINT64_C(0x2E4D786D82C51490), UINT64_C(0x23A516369A4749C9)}, {UINT64_C(0xD86AB36A2F7560FC), UINT64_C(0xDA66B49DDDB852A9), UINT64_C(0x84E1587D544C1023), UINT64_C(0x7AB8BC696AA3C1DA)}}, {{UINT64_C(0xFD0397AFA5F30701), UINT64_C(0x96FFB15DDFC8B187), UINT64_C(0xF2C864531475E520), UINT64_C(0x71521986EF37300E)}, {UINT64_C(0xD81F75A868006D45), UINT64_C(0xDF7814EACBC06D4D), UINT64_C(0x5BCF959B2E8E9150), UINT64_C(0x146D37D756668C18)}}, {{UINT64_C(0x1ABD731288E8DC77), UINT64_C(0x0B34B877C1C3A4DB), UINT64_C(0x85739093F844BACE), UINT64_C(0x5DEDCF8F04A7CF80)}, {UINT64_C(0xD8BB237ED87CDBDC), UINT64_C(0x89852174CCBA784F), UINT64_C(0x6843BAB8B2FAECC3), UINT64_C(0x15268302AA4BBA32)}}, {{UINT64_C(0x3B58225AB23D3770), UINT64_C(0x9357EB5910CC9DE6), UINT64_C(0x8665F92A42ECF80E), UINT64_C(0x4819CC9DC875C031)}, {UINT64_C(0x09CBE5D8C34B979B), UINT64_C(0x161E8AC07E1D0E63), UINT64_C(0x874DF24F282E36E8), UINT64_C(0x6528E6FA0712A0CD)}}, {{UINT64_C(0xE37AD786107633E4), UINT64_C(0x122D7123CF1FE646), UINT64_C(0x1E6E682BCFA93AC0), UINT64_C(0x0A25F4EE276200DB)}, {UINT64_C(0x44E290EDE25FBB01), UINT64_C(0x3E392DF5C3C1B418), UINT64_C(0xE5E1574583EBE689), UINT64_C(0x016139D24B999926)}}, {{UINT64_C(0x048915B065D7DA58), UINT64_C(0x6EF7C4EFA78F3D9E), UINT64_C(0x78CCCE55AD614974), UINT64_C(0x43DB7DA054B95643)}, {UINT64_C(0xFC423B70E53F1A67), UINT64_C(0x8F8BED814EFE2427), UINT64_C(0xF5D6AD5F95B045EB), UINT64_C(0x23582D5DD7407716)}}, {{UINT64_C(0x9E5D24FB9F674472), UINT64_C(0x1AE1863668626041), UINT64_C(0x8977E68F7ABC4380), UINT64_C(0x7D9FF8E805AF2D04)}, {UINT64_C(0x9D31195F4197C4E1), UINT64_C(0x9F3F6E114400F35E), UINT64_C(0x1A87D5867BBEF801), UINT64_C(0x42AE0380952BB025)}}, {{UINT64_C(0xC6A3ED756B96482B), UINT64_C(0x58B38724A9C6DD2F), UINT64_C(0x464C8CE89297FB47), UINT64_C(0x0245797EFB6D6C55)}, {UINT64_C(0xBE141C80C0B58C8F), UINT64_C(0xC4C405CB77766C48), UINT64_C(0xD57EE428D10C0F31), UINT64_C(0x03D4862B50E8FE7B)}}, {{UINT64_C(0x21976F8A1DC3722C), UINT64_C(0x02EC30D55F476F0D), UINT64_C(0xD711E01DCA434B06), UINT64_C(0x551AC91099FF2488)}, {UINT64_C(0x24AEC72DA56CA3C7), UINT64_C(0x2DD1219A891896CE), UINT64_C(0xD84BAD1967882925), UINT64_C(0x27E65D7F9D4778EF)}}, {{UINT64_C(0x09F19C8F4685687F), UINT64_C(0xB7C7B9E3BBB58BD3), UINT64_C(0x349D03A78FA34DD5), UINT64_C(0x41F9D0038D59E889)}, {UINT64_C(0xCF3367D42B3ED6FA), UINT64_C(0xCF3C6715378DA1ED), UINT64_C(0x86DC39034E935E9A), UINT64_C(0x50692CFFF08CB23A)}}, {{UINT64_C(0x18CA772AC2D65C87), UINT64_C(0xC9092B384F1D0CB6), UINT64_C(0x91E71CF1BBD2015A), UINT64_C(0x4A09DAAC4F3DEF26)}, {UINT64_C(0x7CCA7B4A735C9281), UINT64_C(0x2028F1441BF0AAEE), UINT64_C(0xCF72A082ACB5B748), UINT64_C(0x58957D5D43299B85)}}, {{UINT64_C(0x64BB164E901F1789), UINT64_C(0xC68766E65AEF97BF), UINT64_C(0x30ECA3E2942B6DCE), UINT64_C(0x632676FAF9E798F3)}, {UINT64_C(0xB52533D3F13896EE), UINT64_C(0xAD9128312D8A29C1), UINT64_C(0x12F1B9A4BC14E7FF), UINT64_C(0x4E1D23FD8828D196)}}, }, { {{UINT64_C(0xC4F89E00EF494793), UINT64_C(0xA6044BC3C93D2F55), UINT64_C(0x68E60B588797F8AF), UINT64_C(0x4D5969FA841E4B5E)}, {UINT64_C(0xB1EE70FBD759BB2D), UINT64_C(0x9AC3043366D8AD01), UINT64_C(0xD93F23DB84E9F677), UINT64_C(0x2AD9D16FC53029A4)}}, {{UINT64_C(0xD01FC16BDD882D23), UINT64_C(0x3BF921F1FA5B4128), UINT64_C(0x3D3FE145235BC9CE), UINT64_C(0x5955671662E686E1)}, {UINT64_C(0xE329A7C279F99D69), UINT64_C(0xA67EF5ECA4F5F5F5), UINT64_C(0xF96A41EED5A34FF0), UINT64_C(0x09D0CF0674674B5F)}}, {{UINT64_C(0x8CCDF71C6135B7E2), UINT64_C(0x91F1E33EAFB6AD6B), UINT64_C(0xC452F439DB0CFEDF), UINT64_C(0x15724711C05B06D4)}, {UINT64_C(0x5FEE0E0EA3BC1277), UINT64_C(0xD6847FAD8D8BA081), UINT64_C(0x8B02666C0D4C8DDD), UINT64_C(0x149E5009C35559DB)}}, {{UINT64_C(0xB4D0D2C95461D9CA), UINT64_C(0xFE7993B6CE0A3973), UINT64_C(0x42B2A500D6032E95), UINT64_C(0x4DEEE35A217131C6)}, {UINT64_C(0x94E65C8CFFE7C2EB), UINT64_C(0x0DAD7785B19D4B4A), UINT64_C(0xEEBA6794925613F9), UINT64_C(0x6AF45BBEE30494CB)}}, {{UINT64_C(0x41352A6132F43F67), UINT64_C(0x0D218DE948F886D3), UINT64_C(0xCDFC0C559B33B0F6), UINT64_C(0x21FC63536C5B90CD)}, {UINT64_C(0x5D8CA5AD7898AFF2), UINT64_C(0xA743F80E24287C30), UINT64_C(0x4D0371319084A3A2), UINT64_C(0x52041EEDB5EFC978)}}, {{UINT64_C(0x80B588EECC1BCFCB), UINT64_C(0xAD871A11E5CE0035), UINT64_C(0xF47224D0F966D746), UINT64_C(0x5215A9D2B387FCC2)}, {UINT64_C(0xC54EB2E7695C02AF), UINT64_C(0x36FD06BCDFC8493D), UINT64_C(0x1CE8A9AA98CE7C76), UINT64_C(0x058DFCBF644D398B)}}, {{UINT64_C(0xCD7E67DC5BB81464), UINT64_C(0xE7A19301047A7789), UINT64_C(0xCCC31EE5573E837B), UINT64_C(0x25EE99AFAF7703D5)}, {UINT64_C(0x34FDD6DADDB3E807), UINT64_C(0x273D8288109092DD), UINT64_C(0xF8F2464FB7357633), UINT64_C(0x26B2CBADCCAA31D5)}}, {{UINT64_C(0xBA9CFEDEF707F9F7), UINT64_C(0xA9A6896CAC4975FB), UINT64_C(0x62135D9DBB1C35E4), UINT64_C(0x13AE840FCBA133D2)}, {UINT64_C(0x6ABF39134C2BA3A9), UINT64_C(0xE4D8508A6D8A62C1), UINT64_C(0xF256535466D96607), UINT64_C(0x5C368CCEB6CABAE8)}}, {{UINT64_C(0x0C3B52E88B3999BB), UINT64_C(0xB752E28FEF691871), UINT64_C(0xA0460ABCF17D0D2D), UINT64_C(0x7DDCE3C1B7741F2C)}, {UINT64_C(0x076A6BAB3673000F), UINT64_C(0xCDB1CD2B425E8A9D), UINT64_C(0x357FCFFF2606EAB5), UINT64_C(0x308644F8035DE7B4)}}, {{UINT64_C(0xBA64A1276D6FF45E), UINT64_C(0x1F52B6AE6B0C3CEF), UINT64_C(0x91295179CBF496CB), UINT64_C(0x2B986FADA1B12BE4)}, {UINT64_C(0x243D236644DBAF57), UINT64_C(0x48E22BBA346E88C2), UINT64_C(0xCDFB79578BBAFA0D), UINT64_C(0x094ED36E0D70670E)}}, {{UINT64_C(0x2BAD1539A0D60407), UINT64_C(0xC1A9286E6E744111), UINT64_C(0x6D08C0DB81A6DCAA), UINT64_C(0x108F35EC80AFB34F)}, {UINT64_C(0xBE79A6E31E3E34AE), UINT64_C(0x206EAA2816D524E5), UINT64_C(0x563B6E1C344ABA64), UINT64_C(0x6C362A613207CA68)}}, {{UINT64_C(0x04D8145BEF9A9A0F), UINT64_C(0x8B57559BA15B6247), UINT64_C(0x72D53570303AFBF3), UINT64_C(0x01C36B41D6DB5736)}, {UINT64_C(0x94D583C91173B5FA), UINT64_C(0x71F8E12D013C8AAA), UINT64_C(0xA4B5A532F29CB838), UINT64_C(0x4B1797007CE4EBA4)}}, {{UINT64_C(0x69CFA7B00CE86FC3), UINT64_C(0x3705D7C0D60E076C), UINT64_C(0xB1A1464AB1091E10), UINT64_C(0x097945A97FE80950)}, {UINT64_C(0xD9C71A959AA381E3), UINT64_C(0x2A929073A410FF56), UINT64_C(0x79EF8353F0FEB121), UINT64_C(0x1437C4B05F3107E5)}}, {{UINT64_C(0xC5128C8B621DB2E5), UINT64_C(0x4E9C9B2E51A9499A), UINT64_C(0x11535880D8CD7594), UINT64_C(0x35A26F59B0697C07)}, {UINT64_C(0xAB3F4B75C43B624E), UINT64_C(0x69F82105B8E03E6B), UINT64_C(0xFB268288FB04E036), UINT64_C(0x6A5E6BD3A0BDB41C)}}, {{UINT64_C(0x8C716A1AC8082916), UINT64_C(0xB1D1B1524592472C), UINT64_C(0x63657A6D3AB6938A), UINT64_C(0x44882EB6F03214AE)}, {UINT64_C(0x19575B8AC615AF7D), UINT64_C(0x14D740C135EE3D98), UINT64_C(0xBC478E8957768D2D), UINT64_C(0x30CC8FA213FC5E4C)}}, {{UINT64_C(0x705607C54EBE1E7C), UINT64_C(0x631E5B88284EDA2B), UINT64_C(0x07E9E39C07F54DDB), UINT64_C(0x4E554D888DCF6BC5)}, {UINT64_C(0x12E9FB200CBAB0FE), UINT64_C(0x6F3BC7CEBA5E007F), UINT64_C(0xA770BA1DBC871DF6), UINT64_C(0x541AA4C6FE01142C)}}, }, { {{UINT64_C(0xBFE26700F2412EC7), UINT64_C(0x0E975796CFE96AF4), UINT64_C(0x7D30BF7CDD6B04F7), UINT64_C(0x5421925DF1D8FCE4)}, {UINT64_C(0x1CF5E9F5EC709107), UINT64_C(0x124FCFC2B4580AA9), UINT64_C(0x02F7012B67A835B3), UINT64_C(0x753FE01B47C0760F)}}, {{UINT64_C(0x82FD5D47B1D2A896), UINT64_C(0x7EABC17554E75DDB), UINT64_C(0x724FC3A81AB080BC), UINT64_C(0x363D6016A75C31DD)}, {UINT64_C(0x5D465FF2863F308F), UINT64_C(0x9EC70664E515ADCB), UINT64_C(0x4BD7A1A2B3BC206A), UINT64_C(0x2022576C4A167D34)}}, {{UINT64_C(0xF5AC34515CD6AC65), UINT64_C(0x7629731E5839F554), UINT64_C(0xA3260AE393545A60), UINT64_C(0x49D190E8A7AD1979)}, {UINT64_C(0x5AA8492FF0B35045), UINT64_C(0x4A5FAB7B2584E651), UINT64_C(0x5A05420E395E2AAE), UINT64_C(0x30613C78547B4038)}}, {{UINT64_C(0x47E1C59DF9DAE7E6), UINT64_C(0x8D68839B247A5A9D), UINT64_C(0x663B5977C1A80D5E), UINT64_C(0x5E51F87240D8CF32)}, {UINT64_C(0x88ADBF9EECE49494), UINT64_C(0x40B4AC5C1792BAE8), UINT64_C(0x278200D19A1B3314), UINT64_C(0x7D15320ED9F83584)}}, {{UINT64_C(0xFE6DAA74EAF2BFF8), UINT64_C(0x6E4EE4C0C156AA6B), UINT64_C(0xD9310FF8D0F4E7D5), UINT64_C(0x552EEF9E7BB0C42D)}, {UINT64_C(0x323FF6F1FDC69E1A), UINT64_C(0x00FA66B741D79365), UINT64_C(0x0006B16EA96B22B4), UINT64_C(0x71BBC653D20F07BE)}}, {{UINT64_C(0x89A7B7EEA440FA1C), UINT64_C(0x52BB5278757CD658), UINT64_C(0xC5906F4BB0CDDEA4), UINT64_C(0x66AAAFEE5DE2D8DA)}, {UINT64_C(0x4D5E016A53B6E226), UINT64_C(0xA2F73DC61993A1D7), UINT64_C(0x7CDD4C1DA09DD554), UINT64_C(0x6F723079AB416627)}}, {{UINT64_C(0xE641639EC4E5C4AF), UINT64_C(0x8BC6100D371CC648), UINT64_C(0x7BD161B19B216E8A), UINT64_C(0x58098AEBF810DB32)}, {UINT64_C(0xEE52BB465AD92372), UINT64_C(0x4B2C48E1EEF938CA), UINT64_C(0xE8FDE4D6AB43A5D0), UINT64_C(0x459274CDA5284C83)}}, {{UINT64_C(0xA98925B0D015095D), UINT64_C(0xC8969F5F4611A1A5), UINT64_C(0xBDDCD62F2CE4663B), UINT64_C(0x1C9D9007A076C8BE)}, {UINT64_C(0xE8DE8890749F7BE5), UINT64_C(0xC9E455E7FF208E75), UINT64_C(0xDCEE17A98F5FAC9A), UINT64_C(0x776B72D368A3A666)}}, {{UINT64_C(0x28C7D648FEE0E89A), UINT64_C(0x621B370F463AF60D), UINT64_C(0x9DC1548E5ADC8ACD), UINT64_C(0x48032ACFA0B49504)}, {UINT64_C(0x146C6EAC85E992D5), UINT64_C(0x5A2CB5775CB491E0), UINT64_C(0x669DD6D4454C120A), UINT64_C(0x3431AB3398203C39)}}, {{UINT64_C(0xE87615039DE017BF), UINT64_C(0xAB117D2FB60AE61F), UINT64_C(0x0846463F827937FF), UINT64_C(0x45E6BD406BD89C65)}, {UINT64_C(0x3160AD67A613BDB8), UINT64_C(0xBD5266F3B8714A49), UINT64_C(0xF7D29C4751A233E4), UINT64_C(0x6887B48D4DE6A90C)}}, {{UINT64_C(0x087290A5DFDE1EF8), UINT64_C(0xC70CCB52A166950A), UINT64_C(0xAA7F095B4A170AAE), UINT64_C(0x15301F4E5517CA0B)}, {UINT64_C(0x3C86B787302F1F84), UINT64_C(0x95D4153544676E39), UINT64_C(0xBFEC4AE39DF5F751), UINT64_C(0x4A0D3986304923D3)}}, {{UINT64_C(0x70FAABA979B1390C), UINT64_C(0xA9067EEE62BA8B9E), UINT64_C(0x987895031E17DF6F), UINT64_C(0x5997E8AE78D5B295)}, {UINT64_C(0x31E13AD7AE0C6768), UINT64_C(0x23262F05EF17A7B1), UINT64_C(0x1580322749B7B101), UINT64_C(0x1234A9C536B5BA70)}}, {{UINT64_C(0xED65C961395793AC), UINT64_C(0x01157CD8CCDE1C47), UINT64_C(0x0D0240B01D5614DF), UINT64_C(0x0F0DA1EF568E83A5)}, {UINT64_C(0x57C90846C0B783C1), UINT64_C(0x4501048C81E2F613), UINT64_C(0x03D8A69BA2709DC1), UINT64_C(0x06F365C4A97CCE0E)}}, {{UINT64_C(0xEAF23159551580CD), UINT64_C(0x0F1E586A053DD5EE), UINT64_C(0xEB7A78DD3CBCC3D5), UINT64_C(0x39BBC65AB014B850)}, {UINT64_C(0x13DA4E8579B61AC7), UINT64_C(0x33E78DCF0DA59E37), UINT64_C(0x4E65AF252A643C4C), UINT64_C(0x0DC38C9708869D03)}}, {{UINT64_C(0x2B648345A3A38837), UINT64_C(0x2FA6D8F7905E261D), UINT64_C(0xA23BD78666A14946), UINT64_C(0x781633FD5E01CC9A)}, {UINT64_C(0xB1352709E2C71AD1), UINT64_C(0x9D74505283A6D365), UINT64_C(0xD88B5CAE66567032), UINT64_C(0x27FC40DF53D875CA)}}, {{UINT64_C(0xB254E54C47F7554F), UINT64_C(0x33AD0ED6D708614D), UINT64_C(0x830566A376CE908D), UINT64_C(0x73DF94BDAA1ADD5C)}, {UINT64_C(0x23EC411F2DBDD8A3), UINT64_C(0x9BA473383A979FDC), UINT64_C(0x56A2C27FC667E9F7), UINT64_C(0x295647C7427E6BFB)}}, }, { {{UINT64_C(0x9B5F4652F8E48C13), UINT64_C(0xE979034F9EEF4BA3), UINT64_C(0xF95FD7767CF5AF6E), UINT64_C(0x4236C47E506CEB46)}, {UINT64_C(0x0C02A249E08D2312), UINT64_C(0xAA5A38CCC056499A), UINT64_C(0xCB26A8E27C188B64), UINT64_C(0x38FB961D0AE373D5)}}, {{UINT64_C(0xEB179C9E7B23470D), UINT64_C(0xAE70102F1EBC44E7), UINT64_C(0x8184C1D492E0EED0), UINT64_C(0x329882815C21BF08)}, {UINT64_C(0x469589678180D11E), UINT64_C(0xEBD5518C7FD7278D), UINT64_C(0xFCEB7F68AD2B74F7), UINT64_C(0x082D2011F9C7B6DA)}}, {{UINT64_C(0x65D5AED1BBE0299D), UINT64_C(0x0077F756CF565A0A), UINT64_C(0xD44FCD6B344BB90D), UINT64_C(0x6C2A19C0536F3F25)}, {UINT64_C(0x32EE7439BB2A4D91), UINT64_C(0xA97E677AED9351E1), UINT64_C(0x6752EDCF413A16E0), UINT64_C(0x5DE1B0C71CE4FBE6)}}, {{UINT64_C(0x6C10DA15D6009B36), UINT64_C(0xAAD05F4FE5D8CFBE), UINT64_C(0xD8BCE0B431D58B76), UINT64_C(0x08DE344E27B2811B)}, {UINT64_C(0xD9A78AAE80B51E48), UINT64_C(0x1E1D0A813E41C63A), UINT64_C(0x844376DE8076B3C7), UINT64_C(0x73F0D4A35FDF9D53)}}, {{UINT64_C(0xF1532922558C7719), UINT64_C(0x0F10188AA8221197), UINT64_C(0x51A97E5F5DDC1716), UINT64_C(0x0F583A9B444789E7)}, {UINT64_C(0xAA8FC58D97D63B87), UINT64_C(0xA5AF048B1CFDA59C), UINT64_C(0x2A4A0C5F2DDB34EB), UINT64_C(0x66C0F0C7701E2E07)}}, {{UINT64_C(0xC0BC88B836BE2ABF), UINT64_C(0x265CCE745C721B85), UINT64_C(0x483EBB01D54299BA), UINT64_C(0x18F11CBE348ED89E)}, {UINT64_C(0x5E9AE7B9E42129D4), UINT64_C(0x6B3E9E8D81DE5B77), UINT64_C(0xB3ADBAC97A14A74A), UINT64_C(0x1B6CEBB20003B266)}}, {{UINT64_C(0xD4D4DD1015EB200E), UINT64_C(0xEEAEA4C6FB87C57B), UINT64_C(0x48F0B95772FF6321), UINT64_C(0x187C4B75B782B01D)}, {UINT64_C(0x3DC1AACDE9B4D622), UINT64_C(0x0358418E3F4ED519), UINT64_C(0x981A24F8773D019C), UINT64_C(0x6643CA913DB0B4F4)}}, {{UINT64_C(0xE3254F4BD47670E3), UINT64_C(0x9822612530B1DDE9), UINT64_C(0x61EB6C86DA8AF160), UINT64_C(0x725C771618363269)}, {UINT64_C(0xB051DC9F02F62462), UINT64_C(0xFF8C9EDF00AC5531), UINT64_C(0x3909C79B962A92A3), UINT64_C(0x25C90D9327790237)}}, {{UINT64_C(0x0A5DF2CC88ADC475), UINT64_C(0x48D26967E5D27D0A), UINT64_C(0x21D5F616359FF194), UINT64_C(0x38ACD14189977CE2)}, {UINT64_C(0x39B9BD92FDAA8ACB), UINT64_C(0xDB157DF2035B62D0), UINT64_C(0x4E33386EB7D252D9), UINT64_C(0x6BD2E33FCF196258)}}, {{UINT64_C(0xE0806297CE8F10C5), UINT64_C(0x446AFD6D8A14B746), UINT64_C(0xD7931F29BF566190), UINT64_C(0x4D9CFBFA86FDB72A)}, {UINT64_C(0x7752885195009F63), UINT64_C(0x5FE5013434C0FF45), UINT64_C(0xC38CABBB6E134B81), UINT64_C(0x2E60B277E36DB037)}}, {{UINT64_C(0xA614CF6757184CA5), UINT64_C(0x6CBD8D6325BE01E3), UINT64_C(0xE313EE8DA0030BE3), UINT64_C(0x69AF03992B1E7C60)}, {UINT64_C(0x519ABFBB50423F30), UINT64_C(0x200111FF486B9519), UINT64_C(0x6FF93CCB3351F692), UINT64_C(0x32EB3E543ED9BE71)}}, {{UINT64_C(0x0851ACB954052EBD), UINT64_C(0x3A389B7B6D2336D7), UINT64_C(0x50A8792517C6ACD9), UINT64_C(0x031FE845B807D9B1)}, {UINT64_C(0xA348BB01E22F7492), UINT64_C(0x9547ED3605F39661), UINT64_C(0x97DF675668EC4AC2), UINT64_C(0x5836FEFE85B7F81B)}}, {{UINT64_C(0x4E4869A65F0B2ACB), UINT64_C(0xC4798F3FDEC46001), UINT64_C(0x281A4ED600903474), UINT64_C(0x04F22E9DEFB9AABD)}, {UINT64_C(0x2AC92264FAA721A4), UINT64_C(0xBCE2FF0B276F8041), UINT64_C(0x5F605607E4943926), UINT64_C(0x388C5FAB55506DF7)}}, {{UINT64_C(0xFF104F6DAB5687E2), UINT64_C(0x1B6DAFE93B2D0245), UINT64_C(0x6405C02681B2EC4B), UINT64_C(0x2B7676DAF489EBBC)}, {UINT64_C(0xBAA158F06DA1F57A), UINT64_C(0x9CB044AD27A8457F), UINT64_C(0xC23737A5A3BBD6C9), UINT64_C(0x71FB5B471D2267E1)}}, {{UINT64_C(0x779BD825D14F56E4), UINT64_C(0xD7E672A008396F23), UINT64_C(0x23FE3FC0D40BA6EE), UINT64_C(0x41E749E73B56A3AB)}, {UINT64_C(0xD19471CE72042F67), UINT64_C(0x8A686DA74989D4D7), UINT64_C(0x52A709C64FA09BC9), UINT64_C(0x1DC21162B3B6AA64)}}, {{UINT64_C(0x62C9838BF9B3BD1D), UINT64_C(0x1EE59E5A0CE6384C), UINT64_C(0xA9F5ABF6ECE8CC7F), UINT64_C(0x1961D80F80BDDA83)}, {UINT64_C(0x7A40880CCA406FB1), UINT64_C(0x5035D307DFBCE2E4), UINT64_C(0x590259E03D637299), UINT64_C(0x1607AC9FD6C34E05)}}, }, { {{UINT64_C(0x4ABC27109D818B72), UINT64_C(0x2496CEA6092607B7), UINT64_C(0xFB1087E1055C4EC8), UINT64_C(0x50A30C6A258ADC7D)}, {UINT64_C(0xAF4EB6B30FF502E3), UINT64_C(0x5D5D76AD190607AB), UINT64_C(0xC9C9B71134482C13), UINT64_C(0x574A971842213696)}}, {{UINT64_C(0x7C90FAFD7018FC70), UINT64_C(0x36A045592B83291C), UINT64_C(0x6120B51E40D1B175), UINT64_C(0x45F10B203DCF9606)}, {UINT64_C(0x3C6A9EFFF20C5636), UINT64_C(0xB2768BA3FFBBC648), UINT64_C(0x1C9DF90AB523B36C), UINT64_C(0x4148BF06D6FF34ED)}}, {{UINT64_C(0x3D29821A3B5F9492), UINT64_C(0xAE12C78290B24561), UINT64_C(0xEF6FB2778A3BDC5F), UINT64_C(0x6034BF3BAC3BD74E)}, {UINT64_C(0x131D57CD4ACB6F85), UINT64_C(0xDED1C4333BE79B31), UINT64_C(0xB091348978A896B8), UINT64_C(0x1247C0B7B287862C)}}, {{UINT64_C(0xEB6428937C494054), UINT64_C(0x7922793022142D26), UINT64_C(0x8F1C8371943E8398), UINT64_C(0x583C7AEF60886DB7)}, {UINT64_C(0xAFE460223A12EE0E), UINT64_C(0xE9C9253AB6CB8685), UINT64_C(0x5334F9DD6316A4C6), UINT64_C(0x4E2F13D8E6F1DEE9)}}, {{UINT64_C(0x7499A5B4B37D8BA5), UINT64_C(0xA12AA6371C9BCDE2), UINT64_C(0xCC99471DBFD6AE86), UINT64_C(0x0996637892048D63)}, {UINT64_C(0x42CBFA9D552E71A3), UINT64_C(0x84A8B153675C1716), UINT64_C(0xB9C07C0E4CF00A7D), UINT64_C(0x32E2322B0DA504DB)}}, {{UINT64_C(0x569F581FE671EE59), UINT64_C(0x293522D7422E86C7), UINT64_C(0x5E4CEA7E15DCEF10), UINT64_C(0x67C8A9FC483C0FE3)}, {UINT64_C(0x4DE5AC0947B79284), UINT64_C(0x22AB8FBD025016BA), UINT64_C(0x51318C232A099B37), UINT64_C(0x542EA0FA49E06623)}}, {{UINT64_C(0xDD240F6428909F31), UINT64_C(0x46B66F9E101B7F01), UINT64_C(0x788C29CA20481C3F), UINT64_C(0x3218A509CA5D5182)}, {UINT64_C(0x64BCC7AD63E9A2B9), UINT64_C(0x3D213CA2ADDF5C0B), UINT64_C(0x6D93ED4C9960D650), UINT64_C(0x3F13DB22284EE5F3)}}, {{UINT64_C(0x5B678C3A6697E0D1), UINT64_C(0x25A171F416D9D878), UINT64_C(0xC20A6D80FAEC362B), UINT64_C(0x1BB3F14CC512EA4B)}, {UINT64_C(0xECE5313B2AE35FA5), UINT64_C(0xE390A01FBBD76B87), UINT64_C(0xC78EA4C5882DA3FC), UINT64_C(0x771BCDAE42086A77)}}, {{UINT64_C(0x8E9E3C8B565802E9), UINT64_C(0xC37A7B3553FA1BE7), UINT64_C(0x9D2F1A264408FB77), UINT64_C(0x0B3ECE36FF308B7B)}, {UINT64_C(0x8FB35B361F30FC37), UINT64_C(0x463B44E283E1A3C9), UINT64_C(0x7218F09F3402233A), UINT64_C(0x1519638AFC9A6990)}}, {{UINT64_C(0x51FB3E5D8EAAC478), UINT64_C(0x620E4826760ED4EC), UINT64_C(0x46FC5B1F1D865577), UINT64_C(0x15EF2AD95244A538)}, {UINT64_C(0x8D7E477C4BF382BD), UINT64_C(0xCBF170C902A5C9EE), UINT64_C(0xB91A870C4AFB0EC1), UINT64_C(0x052FFC5169C31425)}}, {{UINT64_C(0x1FD437462018D066), UINT64_C(0xBC5015174C67FC35), UINT64_C(0xE65BC2FBBC990EB6), UINT64_C(0x538CA6F973F87F92)}, {UINT64_C(0x42FBDAE08352B03F), UINT64_C(0xF265B1E099A4C9B9), UINT64_C(0x6E3EAB2F185CA070), UINT64_C(0x6E6F4F7D37D0A2C1)}}, {{UINT64_C(0x9B20D8EEC2D5D73E), UINT64_C(0x190521AE75844C15), UINT64_C(0x67663AC426AD08FE), UINT64_C(0x67AEEFEFF984EC06)}, {UINT64_C(0x61C71142CBDD87EF), UINT64_C(0x0FA4995B63396E3B), UINT64_C(0x3196E55185C193B0), UINT64_C(0x36C0A2A8DACB3A3D)}}, {{UINT64_C(0xEAB89FDC178A1115), UINT64_C(0xC7B764D8D7C31303), UINT64_C(0xA5B2D6FB90203755), UINT64_C(0x3C360BF9D5F8AEEE)}, {UINT64_C(0x8DFDCD0502F1CC3C), UINT64_C(0x7F8A64D264E5269E), UINT64_C(0xA36196ECEA13FFD7), UINT64_C(0x35E2241577E3839F)}}, {{UINT64_C(0x29E7AB0BE22E0C52), UINT64_C(0x68BF32C78B27DEDA), UINT64_C(0x52A762A2DC7971AE), UINT64_C(0x4CA4348718B0CDCC)}, {UINT64_C(0xED429DA13FCEAF73), UINT64_C(0x49396E6F06718D19), UINT64_C(0xDECB93375BB3301C), UINT64_C(0x4B7723C10FF489B1)}}, {{UINT64_C(0xAE321F09ABEE6B9B), UINT64_C(0xF251BF4D37318F60), UINT64_C(0xB0A8A251B63DC269), UINT64_C(0x514A25FC71817963)}, {UINT64_C(0x518F574755C9B2E9), UINT64_C(0x3E56CC3E1C9B4845), UINT64_C(0xBDFD637A283AE1FA), UINT64_C(0x419BA4B4C3DE778E)}}, {{UINT64_C(0xC7F18E93BCD2EB74), UINT64_C(0x171264C8FC61FB42), UINT64_C(0x27282E7685119033), UINT64_C(0x225006A4D7DB91C7)}, {UINT64_C(0x628E0F3C1ECF5024), UINT64_C(0xDC5111E000859CDE), UINT64_C(0x4AB1764F1F220711), UINT64_C(0x7C6916F170DDED3C)}}, }, { {{UINT64_C(0xF9FFE8FC5F0CA58A), UINT64_C(0x09E34F3022879EBB), UINT64_C(0x648D6339ED7B0520), UINT64_C(0x0D6719D01AF5ECDC)}, {UINT64_C(0x2878714D0B8590E4), UINT64_C(0x827D04ED90EC312B), UINT64_C(0xD415C8B43B5767C3), UINT64_C(0x4170F0ADC09FD18D)}}, {{UINT64_C(0x9B649CFC3C601031), UINT64_C(0x0478603A636DDAE7), UINT64_C(0xDC972DFA914E100A), UINT64_C(0x519C55DF091621AE)}, {UINT64_C(0x863046CBD4A9963D), UINT64_C(0xDF16763C5ACF7C0C), UINT64_C(0x4999A93EFF5468A4), UINT64_C(0x35543EFF424074A5)}}, {{UINT64_C(0x27B1DBFADD33307C), UINT64_C(0xA0D04784927CA6F3), UINT64_C(0xBD3EBC5EA37CF855), UINT64_C(0x59D02EF549F5AA2C)}, {UINT64_C(0xCDABE86FBDD57BF3), UINT64_C(0x7B3ADD2F37819D86), UINT64_C(0x7B90BA150413B7B0), UINT64_C(0x470717826B99685B)}}, {{UINT64_C(0xB7C3218EEF0CE97F), UINT64_C(0xDAE3B56C0898C79C), UINT64_C(0x6349D83D0908877D), UINT64_C(0x0970C6C0C81E8C4E)}, {UINT64_C(0x0E45C4A7A47F426C), UINT64_C(0xAB000A593FBB194E), UINT64_C(0x570FBBA53A6DD13E), UINT64_C(0x66045580C8F44A57)}}, {{UINT64_C(0x5ABEB74912A72F7F), UINT64_C(0x15072A927AE56F4D), UINT64_C(0x1C77AE00222AB2C4), UINT64_C(0x591EAEC69AFE63DE)}, {UINT64_C(0xB51D41AFDFD24304), UINT64_C(0xDE28DF26DFBCC096), UINT64_C(0x02F046C838A20DA7), UINT64_C(0x5EC3DBDC1AE0A45B)}}, {{UINT64_C(0x7C19BD7563DD86C2), UINT64_C(0xDB1193118D78A57B), UINT64_C(0xF48BB4FA23C5C4E7), UINT64_C(0x65514C1C97DB0A05)}, {UINT64_C(0x1BC1F2F043CAC49C), UINT64_C(0x975FEB512851B4BE), UINT64_C(0x0E0A4633DD60D530), UINT64_C(0x32BBBF1409B1D2C6)}}, {{UINT64_C(0x79124749A670EAC0), UINT64_C(0x504D89D531DD893C), UINT64_C(0xDDCED74CE0654D63), UINT64_C(0x58956BE5E2208707)}, {UINT64_C(0xBE6A3ECD437E7077), UINT64_C(0xB8AB332D574095C8), UINT64_C(0x4E79AC1C3869DA42), UINT64_C(0x79D4C3FB68859F51)}}, {{UINT64_C(0x1E5FC1B97936A831), UINT64_C(0x1EA42ED2D74F1F41), UINT64_C(0x33D22EC1C4EA3228), UINT64_C(0x5705333F729BEBFE)}, {UINT64_C(0xDBD1A67B64596076), UINT64_C(0x6BFF269DFA65BA98), UINT64_C(0x8451A9C26C47E715), UINT64_C(0x243D679D22898DB3)}}, {{UINT64_C(0xE935D705B8323FD0), UINT64_C(0xE2DA88456937E5CB), UINT64_C(0x1C9DFFF84A5EAE1E), UINT64_C(0x796F0B9545DF7A79)}, {UINT64_C(0xC24D573F640DBA32), UINT64_C(0x2B77521702E4B792), UINT64_C(0xD437EB6394D12C40), UINT64_C(0x6182AF6D4AD371F0)}}, {{UINT64_C(0x133EDA5241FC7551), UINT64_C(0xA0088A2BE91714AF), UINT64_C(0xB41B9AC25E0A73C0), UINT64_C(0x4808BB5A1D3B3953)}, {UINT64_C(0xD875AA142B9AE648), UINT64_C(0x4F38C9462408244C), UINT64_C(0x04B6B941FF051A87), UINT64_C(0x1D5B0B9E6DF48ECD)}}, {{UINT64_C(0x27FD368A169E757F), UINT64_C(0x2ACB35607B94D9DB), UINT64_C(0x81903F4B4D4C9B5F), UINT64_C(0x641F806C169B81DE)}, {UINT64_C(0x574E94449E957475), UINT64_C(0xE08814AEC6C8EE52), UINT64_C(0xD1AE71EC6C84FDDF), UINT64_C(0x44A56014FAA040D9)}}, {{UINT64_C(0x06DA690875A48F60), UINT64_C(0x7BA6C9CBBB2CD408), UINT64_C(0x57D2D0FF3A1BCBFF), UINT64_C(0x186F1A8B8928CE36)}, {UINT64_C(0x0FFD205B7A40F877), UINT64_C(0x2915BC8E01AF68F7), UINT64_C(0x816AC4DFC36A5FB1), UINT64_C(0x609B0A872C9E1F7D)}}, {{UINT64_C(0x4032AC5EB97536FB), UINT64_C(0x53E6FE68A7C5EDB6), UINT64_C(0x2F4149305F0DCBA1), UINT64_C(0x209752562837E314)}, {UINT64_C(0xDF5DC4963C3C1D27), UINT64_C(0x0DFDAAF371797C36), UINT64_C(0x5F3E9229DA504E04), UINT64_C(0x354EA88D8C234246)}}, {{UINT64_C(0xAF6741C30922D317), UINT64_C(0x7429853B9DF0A572), UINT64_C(0x0EA1AE041DC207A8), UINT64_C(0x2C1DAA1C450075F5)}, {UINT64_C(0x27C71F166ED729B4), UINT64_C(0x785718A653AB8EC0), UINT64_C(0x1EEC7BBFA8465487), UINT64_C(0x78DA9B044C578BA9)}}, {{UINT64_C(0xFF9ED65EB3B707FA), UINT64_C(0xF8C8301FF5D28D33), UINT64_C(0xB15D498FA65F5C0F), UINT64_C(0x6DEF256DB0EF2B89)}, {UINT64_C(0x0D40A6B252184EF6), UINT64_C(0xC702EBE52BF06F5A), UINT64_C(0x13E50E184BA041AA), UINT64_C(0x53552D887EC4C784)}}, {{UINT64_C(0x2CD09B19F28ABB3A), UINT64_C(0x4F5C040F724EDB9B), UINT64_C(0xD6820590E0DCBD16), UINT64_C(0x45D84DE91B7155A3)}, {UINT64_C(0x995BDD01A251B1BA), UINT64_C(0x607F951737CAA4DC), UINT64_C(0x747FEA1CA15D9674), UINT64_C(0x646C187673E97C97)}}, }, { {{UINT64_C(0x1951682B6FAC1486), UINT64_C(0x8B578E1E4A4D14C5), UINT64_C(0x083FA101B7384D42), UINT64_C(0x13380CE9ED1C8A87)}, {UINT64_C(0xC7052ED8732A493B), UINT64_C(0xD5FEF40FB32E3D69), UINT64_C(0xA64ACE8788833566), UINT64_C(0x6E36CFDB4177DC00)}}, {{UINT64_C(0xAA14E281E742C3B4), UINT64_C(0xB75E7B2AEE5AF40A), UINT64_C(0x3FC5FF0B1616EFA2), UINT64_C(0x090259B0AD763298)}, {UINT64_C(0x4105B57E38753438), UINT64_C(0x70ED1A00CF2D8926), UINT64_C(0x78921395322F40BB), UINT64_C(0x3AEE819967A3FF56)}}, {{UINT64_C(0x88073D0011EA75FC), UINT64_C(0xD23D279606A4B4EB), UINT64_C(0x1FD22F9ED85D3A6B), UINT64_C(0x6B5EA051AFB43B70)}, {UINT64_C(0x96C9C176D99BE576), UINT64_C(0x85AC2B6C4C47261E), UINT64_C(0x2726395999A9C378), UINT64_C(0x6D36E9FE8B5CABDA)}}, {{UINT64_C(0xC9FC7661A58F614C), UINT64_C(0x82AA317D2E45AE73), UINT64_C(0xDCB1925FC8CB9CC7), UINT64_C(0x1341C1AA27813205)}, {UINT64_C(0xDD06745B6CD478AB), UINT64_C(0x0C2534B21E28F6A3), UINT64_C(0xE21833459D27FE63), UINT64_C(0x7F1E2A3306466147)}}, {{UINT64_C(0x378D727E5AEE2471), UINT64_C(0xB718FC17D47739B6), UINT64_C(0xDA27CB9B4145E8EF), UINT64_C(0x3F8AB1A30EF2AB20)}, {UINT64_C(0xA89ADD37E16C0141), UINT64_C(0x2127823B59DF1C95), UINT64_C(0x53F90B73B7455CC2), UINT64_C(0x7F9605861183FBE5)}}, {{UINT64_C(0x56D0475AE77235C3), UINT64_C(0xED2907C5B18ED61A), UINT64_C(0x2D02C4CB7D73F6F8), UINT64_C(0x35EF69B4C42E7AED)}, {UINT64_C(0x53A6120A31B7324A), UINT64_C(0x982DD22159F1A395), UINT64_C(0x03ECA86F835CFD94), UINT64_C(0x4CBA837D73CA1BD5)}}, {{UINT64_C(0x64F66D3941B17E6D), UINT64_C(0x3C869BF5CB14F3B3), UINT64_C(0x1EBA045A28350EFA), UINT64_C(0x7ACFB882C7CDEC47)}, {UINT64_C(0x7ACFD28D8FB3097B), UINT64_C(0xDA397C3162986426), UINT64_C(0xD49F84212A1A7A94), UINT64_C(0x7B372E2DFAB65156)}}, {{UINT64_C(0x3ADBDD0701D9DB0F), UINT64_C(0x617521E694FF0CFB), UINT64_C(0x5BA5905C3F5BD583), UINT64_C(0x6F89603378670CD1)}, {UINT64_C(0x0A59C447FB98EA11), UINT64_C(0x59B918CC653EDC59), UINT64_C(0x00BF4D2A9F72C01E), UINT64_C(0x748455D147DEE00F)}}, {{UINT64_C(0xE371A7A8386E7491), UINT64_C(0xF71711CC621A3484), UINT64_C(0x1568256EE0015C3B), UINT64_C(0x5ACEF7A67D3FFDE9)}, {UINT64_C(0x02ED70E5B08E4219), UINT64_C(0x7ECE1726832AC3AA), UINT64_C(0xC3C0D32B951D1CA2), UINT64_C(0x4C99166438DECC59)}}, {{UINT64_C(0xB99DF8BA96EB21A4), UINT64_C(0xB88D25F42BBF8E6D), UINT64_C(0x16B3E0B1686DAA3C), UINT64_C(0x1131456170D47C57)}, {UINT64_C(0x8DCDC3D13338342D), UINT64_C(0xE6D39B0188E028A7), UINT64_C(0xB781F1ED72855B5E), UINT64_C(0x0E0D82F6CC192572)}}, {{UINT64_C(0xC86A8E5DCF1E20AA), UINT64_C(0x1A87AEF3F9AB96D5), UINT64_C(0xA8941635F3D19051), UINT64_C(0x67B1D0A2654FFF15)}, {UINT64_C(0x266FD5ED92862ACD), UINT64_C(0xB72587BED11DEEAC), UINT64_C(0x5CF0D2E2D09320AA), UINT64_C(0x68456EBA515E0277)}}, {{UINT64_C(0x86A5461C771F64CA), UINT64_C(0xB7A220B748FF8D7A), UINT64_C(0x9A0DD72AD7A568D1), UINT64_C(0x18F5E1DCF644D858)}, {UINT64_C(0xB7AE1BC23E00364F), UINT64_C(0xD7EA31F3CEE8D9F7), UINT64_C(0xD18DA30FDCDB883D), UINT64_C(0x179CFCA5CBA00F48)}}, {{UINT64_C(0x496F2C0139E7860C), UINT64_C(0xACDF8B4027F15EAF), UINT64_C(0x8871966C687AC815), UINT64_C(0x6228F1B58DB8FDB5)}, {UINT64_C(0x8644656AF30ECF2B), UINT64_C(0x15576CC2AE1DEAFF), UINT64_C(0x93D86D56697AB3FC), UINT64_C(0x3E4A428E811E3FF2)}}, {{UINT64_C(0xFB85DE3D91B9F5DF), UINT64_C(0xCDB595D4B20A9C71), UINT64_C(0x55CB08F3B44D671E), UINT64_C(0x780FC2E5FCD7D5ED)}, {UINT64_C(0x815AB41F7F939366), UINT64_C(0xA7597A02ECD52B20), UINT64_C(0x9BE078F04648E3C5), UINT64_C(0x7A3E217917BD3DC2)}}, {{UINT64_C(0x22758C419D9E5E53), UINT64_C(0x44D675F49EF09FAE), UINT64_C(0x1AB7986D27159F97), UINT64_C(0x72B3F02BB6B9465B)}, {UINT64_C(0xA372FAC7FE56F578), UINT64_C(0x33FA6479DA534F4A), UINT64_C(0xB0003307DF63BF2D), UINT64_C(0x34D40B4DB80D0F64)}}, {{UINT64_C(0x8A8929DC3D2B9FC2), UINT64_C(0x7D12E86C55EE75E5), UINT64_C(0xB3FE1AD392E1A870), UINT64_C(0x27148C94729CFE4C)}, {UINT64_C(0x6A8C3B5218BA868B), UINT64_C(0xDD2006E47F038A9C), UINT64_C(0x4606FA9EB7124908), UINT64_C(0x434A8C07F4940CB1)}}, }, { {{UINT64_C(0x15F36EBEF98B91EA), UINT64_C(0x94D802DEC1ED17B1), UINT64_C(0x3C45FA08085D77F8), UINT64_C(0x0A30B3C302FF571A)}, {UINT64_C(0x70F5852D264C93D0), UINT64_C(0x5E51BCAB191AEE57), UINT64_C(0xD5C14AE9FAD8E96E), UINT64_C(0x73B00534D4BC414B)}}, {{UINT64_C(0x21CF876B12AFF5E7), UINT64_C(0x3E9F664CF75799A6), UINT64_C(0xC23B7D199A0E73CD), UINT64_C(0x77AAB691427EEA36)}, {UINT64_C(0x2E74F972604EE854), UINT64_C(0x8712C7A0F867C81A), UINT64_C(0x6085980F953A4C56), UINT64_C(0x2DB997070F7707E1)}}, {{UINT64_C(0x5ECC087F78BDB7A7), UINT64_C(0x43CC156C04C693F2), UINT64_C(0x965067CF039BD7F1), UINT64_C(0x72140E566E3FAE2F)}, {UINT64_C(0x26452E4DE019DED1), UINT64_C(0x6F4C23492EDEF154), UINT64_C(0xA7066D7F054DFC0F), UINT64_C(0x544E6F6D3381AB44)}}, {{UINT64_C(0x9B6E94699214C791), UINT64_C(0xD74F9C5586938BDC), UINT64_C(0x0F1527F6FC2928FD), UINT64_C(0x5B0FBF0F63C3A053)}, {UINT64_C(0xAC1F442CFC41FF10), UINT64_C(0x34EF88EF787B4932), UINT64_C(0xF8120F08316732AC), UINT64_C(0x7BCCF12CA655DC4A)}}, {{UINT64_C(0x750DF97FA6C7760E), UINT64_C(0xF1A0A827609BF215), UINT64_C(0x7348C1B467FD04B4), UINT64_C(0x6A581016615C8145)}, {UINT64_C(0x9DC012259A11AAFC), UINT64_C(0x24F65B053F2B0C8B), UINT64_C(0xA27CB8BFDCB1B2A4), UINT64_C(0x3C44B811E48C1A71)}}, {{UINT64_C(0xBC059AF2F780B295), UINT64_C(0xDF58928C0B6B247D), UINT64_C(0x224D4C3C01903F3D), UINT64_C(0x7152E120818EE0AC)}, {UINT64_C(0x6C8F474554BFF1BE), UINT64_C(0x98A6C7EC431ADEF7), UINT64_C(0xDCB6BB7591B2CFB6), UINT64_C(0x145F6D397E83A5BB)}}, {{UINT64_C(0x827C000C81D23BC1), UINT64_C(0x5CDC1135403956FC), UINT64_C(0xD967A5B13C751158), UINT64_C(0x52AF85BC96201D7D)}, {UINT64_C(0x522BC492644558F7), UINT64_C(0xF74A35AFED7A060D), UINT64_C(0x10E5F9FD4DC4619E), UINT64_C(0x06071F1F324F60BB)}}, {{UINT64_C(0xC5FFD5EF65921C34), UINT64_C(0x46CE1A69302BAA5D), UINT64_C(0x89CC84EC4E22FF1D), UINT64_C(0x16A481AE68131754)}, {UINT64_C(0x2A06A156B89039F5), UINT64_C(0x40B6401BB3A95AB9), UINT64_C(0xFFCC53EB313820C3), UINT64_C(0x256B00E7EA959F76)}}, {{UINT64_C(0xCCE87FC954FBDD74), UINT64_C(0xEC258542B23C6E1D), UINT64_C(0x5BE392B49E5E1928), UINT64_C(0x65AF311047A8A759)}, {UINT64_C(0x943F7A2547DFFD31), UINT64_C(0xDCCDA18651E896FA), UINT64_C(0x71A93B1E933E747F), UINT64_C(0x44F5C468DFB043AD)}}, {{UINT64_C(0xF6AEC52C786FCCBA), UINT64_C(0x23D49DCF6D51FA78), UINT64_C(0x0F81463B9B40D8E6), UINT64_C(0x18B9D932708D3DA2)}, {UINT64_C(0x796F94EDF986DC6D), UINT64_C(0x33B2CCC1FC2622C3), UINT64_C(0x16790DFB9CCEC606), UINT64_C(0x6F5D1452CFD31481)}}, {{UINT64_C(0x91F15DDC6C3A15D6), UINT64_C(0x45D12F404D360E75), UINT64_C(0xF2E28EE81DAFFC9C), UINT64_C(0x5CC6A0566CDF5566)}, {UINT64_C(0x855166D21779B9BF), UINT64_C(0x92BA5EF4CF94D9FE), UINT64_C(0x1266FB2A985BC1DD), UINT64_C(0x4572CE8FCA3018AD)}}, {{UINT64_C(0x8729A12DBE4BB604), UINT64_C(0x6A29C8494E99E9AB), UINT64_C(0x54AE50117A89894D), UINT64_C(0x5E66A255CDB0EEBD)}, {UINT64_C(0x006736EACBEE153B), UINT64_C(0x8A36CC2D225E7B86), UINT64_C(0xF731E430EC0598EC), UINT64_C(0x49338E4D7FD9A11F)}}, {{UINT64_C(0xE038CE03DA6DABAA), UINT64_C(0x13A08DCE7C1BCE0C), UINT64_C(0x12D00DD0DA89EFBF), UINT64_C(0x70A13FB96FCF0510)}, {UINT64_C(0x16ED1C925CDB03E2), UINT64_C(0xDF1AB61D08E9EE4B), UINT64_C(0x48983DA803AF3E3D), UINT64_C(0x63CCA113429DB770)}}, {{UINT64_C(0x6D9AC1EBCFB805E5), UINT64_C(0x47C3FE6950FA37B8), UINT64_C(0xD308EC732C33D457), UINT64_C(0x3CB08E00D4CCA340)}, {UINT64_C(0xC078DAD0BE862794), UINT64_C(0x2D147F83F4E10A57), UINT64_C(0xE91820FF3DE1B3D5), UINT64_C(0x3D85DD726F30491B)}}, {{UINT64_C(0xD486A022F5CBDD3A), UINT64_C(0x2663134ACAC0B99E), UINT64_C(0x42DE13F55F3ABFCA), UINT64_C(0x4967A225B365B973)}, {UINT64_C(0x99C98A2510F1F997), UINT64_C(0x23F057C97714FAB2), UINT64_C(0xCE07CA6E1BA2338D), UINT64_C(0x3BA69161069F65D7)}}, {{UINT64_C(0xCCD8C86FC026FB0E), UINT64_C(0xF49F1FEA50407A8C), UINT64_C(0x72FEA37B7F19A1DB), UINT64_C(0x22A03E253F457DB7)}, {UINT64_C(0x2D6C62B271F736D2), UINT64_C(0xCC99F8E7A5ACB4E5), UINT64_C(0x8F7DBF2E0DE5F380), UINT64_C(0x24494786352B4933)}}, }, { {{UINT64_C(0xF020E7A9AE2A5E8F), UINT64_C(0x5ADC788BD14C5F02), UINT64_C(0xC5E5AFE465C84DB4), UINT64_C(0x392FACC435C2633C)}, {UINT64_C(0x47D5007042DEE269), UINT64_C(0x76706ED76EB7849C), UINT64_C(0x6BF56D56316548CB), UINT64_C(0x4A466066D37FF4DF)}}, {{UINT64_C(0xC8EBBFB5C30283AD), UINT64_C(0x31E9CF963544E645), UINT64_C(0x90EA9A4988886B50), UINT64_C(0x5E4B8C88021D3D5D)}, {UINT64_C(0xA4DB92250DFEB658), UINT64_C(0x8AA95DB61910FDAE), UINT64_C(0x82E9A997DE400EB9), UINT64_C(0x238967E996769A04)}}, {{UINT64_C(0x1ABB076A89E2DF0A), UINT64_C(0xDA8B09B007065929), UINT64_C(0x332BE8A563BD349B), UINT64_C(0x0EB973CEA2D35385)}, {UINT64_C(0x67F7AE639C7D375E), UINT64_C(0xA235818DE7AE90B1), UINT64_C(0x2B59C26E817493B0), UINT64_C(0x39DC105033C4ACD6)}}, {{UINT64_C(0x11801ACE7B7DB3F5), UINT64_C(0x79C214C38CC97CA5), UINT64_C(0xB4BFE1ABBF2674BF), UINT64_C(0x598EA7DC43252011)}, {UINT64_C(0x217FF6D3B08F8EF5), UINT64_C(0x9797BBC98B9226B7), UINT64_C(0xAB8E98C97B0EDB09), UINT64_C(0x240EC22D083A401F)}}, {{UINT64_C(0x55A75BCF459ABC3D), UINT64_C(0xB2F9859864ECC2DC), UINT64_C(0x271C47C39EE84779), UINT64_C(0x0166E5D4BF9BDBF2)}, {UINT64_C(0xD205380F4215B666), UINT64_C(0xF704139664E9FE64), UINT64_C(0x4C737E942BB0DA40), UINT64_C(0x2E763521C8119691)}}, {{UINT64_C(0x79550B60FD2F8593), UINT64_C(0x47E00AFD0C17A56F), UINT64_C(0x0D900A9DB44157CF), UINT64_C(0x016CF746A81BED76)}, {UINT64_C(0xC21E861BAC47A84B), UINT64_C(0x0E14387A1724BD47), UINT64_C(0xC209303E2077F7BC), UINT64_C(0x33B5EB59BAD12F0B)}}, {{UINT64_C(0x7152354F9850FC1F), UINT64_C(0x1239576F83637934), UINT64_C(0xB00C4E4E82AF46BA), UINT64_C(0x563D5062EC3FEEFF)}, {UINT64_C(0xEF25E37333D67B7F), UINT64_C(0x3A80A50E50D9845E), UINT64_C(0x1DCED1E9A5787EF5), UINT64_C(0x15723E9AA0F87C3C)}}, {{UINT64_C(0x217435112B4A156D), UINT64_C(0xB75C041CCD12BD2B), UINT64_C(0x6947368C79F393A6), UINT64_C(0x32CDE49E76420E56)}, {UINT64_C(0x67FBA31543D612FF), UINT64_C(0x697F7FAEE3B87BC2), UINT64_C(0x980DAFBC7391129A), UINT64_C(0x438B28586F707469)}}, {{UINT64_C(0xDA8AD16D5E9D085F), UINT64_C(0xE636F1AF768FA87C), UINT64_C(0x08520756B85FF1F1), UINT64_C(0x1B8184816ABB31BE)}, {UINT64_C(0x25B3DCB92E686F1A), UINT64_C(0xE12821342B0CB829), UINT64_C(0x626232BC3B9B759C), UINT64_C(0x797316BB38C4338E)}}, {{UINT64_C(0xF8365B644A62DCBD), UINT64_C(0xC2CF51BA6BF0EFED), UINT64_C(0x37E379EFABF74764), UINT64_C(0x5DC32071A350D603)}, {UINT64_C(0x5465CC805B732100), UINT64_C(0x3231B4E3B3BB5366), UINT64_C(0x23F5385ED0D067CE), UINT64_C(0x76CD762167D33451)}}, {{UINT64_C(0xC6C93A0555D857DD), UINT64_C(0xB4B6F1768F308F7F), UINT64_C(0x2371CD88C0F13577), UINT64_C(0x1E507D6C70807D9D)}, {UINT64_C(0x7A77CCE1C73E8E2F), UINT64_C(0x1DD96274FCCBDEEB), UINT64_C(0xA4DBEA5D03F378B8), UINT64_C(0x44B4DF552A1C347F)}}, {{UINT64_C(0x9853D2828D067A47), UINT64_C(0xBF0ADAF486813E74), UINT64_C(0xFDE1F24D39409037), UINT64_C(0x0E629604973B045D)}, {UINT64_C(0x9880A74B3BB92FAB), UINT64_C(0xBC4E3405C6C4D6C6), UINT64_C(0x98C243185184A2D6), UINT64_C(0x07D65412C210C183)}}, {{UINT64_C(0x3938E528441A5FBC), UINT64_C(0x2CCD837DCCC66B22), UINT64_C(0x075FADE75E606282), UINT64_C(0x321811654BB0E76A)}, {UINT64_C(0xE7240305FC929890), UINT64_C(0x1FA427C8E03AAA52), UINT64_C(0xF23C879B0BC7B9F8), UINT64_C(0x699A1235D6BBC908)}}, {{UINT64_C(0x20C2978114124B8A), UINT64_C(0x0C6464B348000278), UINT64_C(0xF1939127D644E10C), UINT64_C(0x47A479E64EC07EE3)}, {UINT64_C(0xB631576877023389), UINT64_C(0xC0FD319D8BFDD90F), UINT64_C(0x0EBEC2006CB022D4), UINT64_C(0x6810DF3D302F58EF)}}, {{UINT64_C(0xCF97FA07ACB1C3F2), UINT64_C(0xACC60D84A2C3F2F1), UINT64_C(0x4EF3CAAC5DEB73D4), UINT64_C(0x654D0D90D5472C1D)}, {UINT64_C(0x5A39A718E4729062), UINT64_C(0x84B286B08324E0F2), UINT64_C(0xA07A01CBD21E8457), UINT64_C(0x0EC091C7B094714E)}}, {{UINT64_C(0x7AB81940895736BD), UINT64_C(0x9AE791B7E4679DF5), UINT64_C(0x36163D81F064109B), UINT64_C(0x3DDEE4A40E956B07)}, {UINT64_C(0xE146E7EEFEAAE47C), UINT64_C(0x81C0C2A76A8EEC03), UINT64_C(0x10BB8DD9A8C315CB), UINT64_C(0x2CB423D8D21B9AB0)}}, }, { {{UINT64_C(0x5B11D3C7166A5B9A), UINT64_C(0x973627BB8768861D), UINT64_C(0x82A5E2CD5A3E442A), UINT64_C(0x13F6C741DDE63678)}, {UINT64_C(0x8DAA3C74D892738E), UINT64_C(0x0A07D651A932376F), UINT64_C(0xE12612C56892504B), UINT64_C(0x619D2B1DCA3FF301)}}, {{UINT64_C(0x2B6D686F1B07CEB7), UINT64_C(0x90C0260C298D0996), UINT64_C(0x8CAAB926102BC73C), UINT64_C(0x445A6487AEB3911C)}, {UINT64_C(0x7EE1E54757F17290), UINT64_C(0xC055478B417711BF), UINT64_C(0x29EF9FEC5CFA42C2), UINT64_C(0x5A022DE42B8EA0D6)}}, {{UINT64_C(0x81A5EC18AEEB2675), UINT64_C(0xA867C5AAAD1BBA8A), UINT64_C(0xAECB36888DB47EBC), UINT64_C(0x77CE00BC26D1038F)}, {UINT64_C(0xADC635EF3E68504B), UINT64_C(0x0EFC21DEDAE8AF4F), UINT64_C(0xDE57FD43AC70C4C9), UINT64_C(0x123360BEE78FFC0D)}}, {{UINT64_C(0xD608DB32D82B61DB), UINT64_C(0x05AF2A908E45C853), UINT64_C(0xF1B8213E9D3B0032), UINT64_C(0x2312F8ABCAD15361)}, {UINT64_C(0xDC8D8E32C29EE818), UINT64_C(0x07D7A475DE5CD587), UINT64_C(0x766109130C6C38B8), UINT64_C(0x0131B6C6D7984BD9)}}, {{UINT64_C(0xC05CD4D0CF69C844), UINT64_C(0x747C092D81A9B005), UINT64_C(0x0D793551D9E39F54), UINT64_C(0x3BBB00DA7FFEF17C)}, {UINT64_C(0x6CAB83D9655AD7C1), UINT64_C(0x601BECD066A8F590), UINT64_C(0xFADB086DAE51811B), UINT64_C(0x7768A5D8D69F734B)}}, {{UINT64_C(0x3BB9B347F0E2385E), UINT64_C(0x376C8C48F7D39F23), UINT64_C(0xE656C1A4D82EC840), UINT64_C(0x328B25C9FC2AC59A)}, {UINT64_C(0xD02B2F39A046BEE6), UINT64_C(0xDBAB19A580066D6C), UINT64_C(0x6A2E8F67E938B7F7), UINT64_C(0x645A57A1AA7F2661)}}, {{UINT64_C(0x6227904D9A006FAE), UINT64_C(0xA975FC4CB598CB72), UINT64_C(0x945BFC2FA1120B82), UINT64_C(0x437A8AB42AC15CE5)}, {UINT64_C(0xA512A1070F53317C), UINT64_C(0x7B552554FF9BD7D6), UINT64_C(0xF81213E754155AF9), UINT64_C(0x0923F42CFDCE0842)}}, {{UINT64_C(0x135239165216BB55), UINT64_C(0xF27E4C7A599CA117), UINT64_C(0x464D040A7DD95BE1), UINT64_C(0x408974863C417D05)}, {UINT64_C(0x0A3D16BF7C88E5D7), UINT64_C(0x0B94C661C13B286F), UINT64_C(0xF73C7126E2214821), UINT64_C(0x4B3D5BF0F2F6DAFA)}}, {{UINT64_C(0xCFABD8A2F1A4332A), UINT64_C(0x56DB1546BAAC9A51), UINT64_C(0x8CC5204B04416247), UINT64_C(0x75EC13BFF0583310)}, {UINT64_C(0x0D68896ED35B55D0), UINT64_C(0xE89274E267FC14D9), UINT64_C(0x18D425C0FC322878), UINT64_C(0x69477DD7916C714A)}}, {{UINT64_C(0x427CBB6C9BDDF0F9), UINT64_C(0xCF6941E2DB9F52CB), UINT64_C(0xEF144DF635E60DFA), UINT64_C(0x27B5246EB61DF45C)}, {UINT64_C(0x0E124518B8D3D1D9), UINT64_C(0xBB3BA1348B313B95), UINT64_C(0x050DCBDF0FA2B7A9), UINT64_C(0x50DBCF6D1D0A99B5)}}, {{UINT64_C(0x8A8B22CB3924A1E5), UINT64_C(0x86CB4C5A118F9D55), UINT64_C(0xE5330ACC5B339C53), UINT64_C(0x6D5FDDF966A35A67)}, {UINT64_C(0xC95007196F6438A5), UINT64_C(0x9723F2BA07E5394E), UINT64_C(0xA9CE2117866B45A8), UINT64_C(0x1B737D8D045CA2CA)}}, {{UINT64_C(0x6093F5A56EE00E30), UINT64_C(0x5CAB98D45DE0A6FC), UINT64_C(0xADFB652C65DE754F), UINT64_C(0x679900D1862EFD1D)}, {UINT64_C(0x6E5C230FAFC5D235), UINT64_C(0x3A1E557912CF6DD3), UINT64_C(0x241C20FB03FB4FA0), UINT64_C(0x562FFAE320F6C013)}}, {{UINT64_C(0x6EFC732F397F25EC), UINT64_C(0x304D1F7DBC1F03B8), UINT64_C(0xA2FA60018890DADE), UINT64_C(0x4F91F97C51A25539)}, {UINT64_C(0xE75F9C5048F4EF02), UINT64_C(0xCC53F460218AEE9D), UINT64_C(0xE7B4048910D76649), UINT64_C(0x148F90A242ECDBA4)}}, {{UINT64_C(0xBF45023A1F683AD6), UINT64_C(0x2EA5F70C95E868D1), UINT64_C(0x47A19F33A97F2DE3), UINT64_C(0x3C8CCA9E8A76ED9F)}, {UINT64_C(0x01562C6EE1A268D0), UINT64_C(0x9EB6EBACBA4EF01E), UINT64_C(0x835E64D4342410FB), UINT64_C(0x06F96B87FFF4594D)}}, {{UINT64_C(0xE49A383AD233612B), UINT64_C(0x3CA5421FC9C14F64), UINT64_C(0x25192E1BBB53DF81), UINT64_C(0x3C1451FEA94C046C)}, {UINT64_C(0x72B270F80423FAA8), UINT64_C(0xFF63513D3763888A), UINT64_C(0xB22F2F20C1745190), UINT64_C(0x2E005A7A35DEA32C)}}, {{UINT64_C(0x6B5A4E7A6305B2EB), UINT64_C(0xF017BCA19CCD05D2), UINT64_C(0xB37027C9D19AD8CB), UINT64_C(0x2CFCB4700CBB36A6)}, {UINT64_C(0x17F4FE51663F3485), UINT64_C(0x7DC20A170DC3467B), UINT64_C(0x6B56BA3F4AF63CBD), UINT64_C(0x4E7CF2890D5D64AF)}}, }, { {{UINT64_C(0xE2C5CD1F7F59D2E9), UINT64_C(0x6B9ACEB79D7FBE1E), UINT64_C(0x84F0441DA20225B0), UINT64_C(0x15875CDA8B369FBC)}, {UINT64_C(0xED1332770659E294), UINT64_C(0x7FAA913E7AE02043), UINT64_C(0xCA0E58DA9DCEDE14), UINT64_C(0x5F6A70FDCDE68547)}}, {{UINT64_C(0x524B790DE7282711), UINT64_C(0x4B4F6246BCA05694), UINT64_C(0x85169ECB949AF774), UINT64_C(0x5B168842CC743068)}, {UINT64_C(0xB8D0E9F231FB3BA3), UINT64_C(0x56DD4BC362D471C7), UINT64_C(0xB14D689CE2A34F75), UINT64_C(0x7F4E171702E8D2D2)}}, {{UINT64_C(0x8EE3491AB17090B9), UINT64_C(0x67C071166B7EDAF4), UINT64_C(0x6876E4CE4D0E6CCE), UINT64_C(0x6D2FBB64BC5A86BE)}, {UINT64_C(0x0431C67A070FA8C3), UINT64_C(0x91EFF9BE0F5D65F4), UINT64_C(0x332985E2E07088DF), UINT64_C(0x006D2583676EADA8)}}, {{UINT64_C(0xA1FBCC370AA747D6), UINT64_C(0xADEA4A90B0DFDF3C), UINT64_C(0x650162C7401ED81B), UINT64_C(0x0FBC4841A8B15E22)}, {UINT64_C(0x1044B4E8BF98CDAC), UINT64_C(0x37071115ECD1C668), UINT64_C(0x29B93C17233C220C), UINT64_C(0x4BEBC3CCE69BC0C0)}}, {{UINT64_C(0xD1A16E3746BF7E51), UINT64_C(0x889C7782F7A7370C), UINT64_C(0xC73F396E3CCB474D), UINT64_C(0x1C508F18B9D67A2E)}, {UINT64_C(0x3F17E9676B03B7E7), UINT64_C(0x3928F1D8F857BB26), UINT64_C(0x3086FB2EC0EA8620), UINT64_C(0x15DC32C21BE7C3E4)}}, {{UINT64_C(0xF48D4C3211F4D949), UINT64_C(0xE14A4AE3B0357C05), UINT64_C(0x77A1121F151D91AE), UINT64_C(0x33F85C2FE8C6869D)}, {UINT64_C(0x8EA3BB4C364B77B0), UINT64_C(0x1F155B919BD43E50), UINT64_C(0xA6C2873054748E7D), UINT64_C(0x5AA34DDAE7DDC539)}}, {{UINT64_C(0xF0F80DDAA6CF8A82), UINT64_C(0x87DE6D6C091663B5), UINT64_C(0x9479873402FE5519), UINT64_C(0x109D411F96722130)}, {UINT64_C(0xBC47CA73E661041F), UINT64_C(0x071D605965741541), UINT64_C(0x7CD4DF6607E08735), UINT64_C(0x175E1F77E68FC807)}}, {{UINT64_C(0xB88BDAB8DA58865B), UINT64_C(0x14AD911220ED2B89), UINT64_C(0x2B21AEDF039BF0A3), UINT64_C(0x789717779D4B77E9)}, {UINT64_C(0x133DA2ACD6612EF3), UINT64_C(0x6260FCF512AD1785), UINT64_C(0xDBA784DA9DF08843), UINT64_C(0x1A30C4CF4449FBD1)}}, {{UINT64_C(0xB6FECE874EF7ACA2), UINT64_C(0x9CE7B61A13F7C58C), UINT64_C(0x6B0223C9F8719A60), UINT64_C(0x21199AA5A3B3B088)}, {UINT64_C(0x4A7171966938BB02), UINT64_C(0x2E9A17C9E7ABC263), UINT64_C(0x83F796234BAB12B7), UINT64_C(0x15C0C4AF49D7CFBD)}}, {{UINT64_C(0x99B3413956D2957F), UINT64_C(0xA51B8DFD07218BB6), UINT64_C(0x47CA4323FC91D7C9), UINT64_C(0x44B01E753DCFD5F0)}, {UINT64_C(0x29F9D18E8CE894F3), UINT64_C(0x22BCC54095227C6F), UINT64_C(0x815CD9363FC75409), UINT64_C(0x0D58B325D8989472)}}, {{UINT64_C(0x8B4C6980B6C80208), UINT64_C(0xA5D974978FB77CCD), UINT64_C(0x1B8965719477132F), UINT64_C(0x348ABC213AE45F53)}, {UINT64_C(0xE438C1C314BCDB96), UINT64_C(0x63150CF98007C1BF), UINT64_C(0xDB861A338508B903), UINT64_C(0x421DFB017B04ECD6)}}, {{UINT64_C(0xF2FCE58B19430E7B), UINT64_C(0x851A5F03D0F8ECB7), UINT64_C(0xE756C1670A5A1833), UINT64_C(0x25A51405227F866C)}, {UINT64_C(0x40F34CB03C6EE5F3), UINT64_C(0xF4010401F244B5CF), UINT64_C(0x0E21BDED01349BCF), UINT64_C(0x1B129D8204547F42)}}, {{UINT64_C(0x802EC4800927D153), UINT64_C(0x0F75E4FE72541520), UINT64_C(0xA4A1557A026C4613), UINT64_C(0x25E8DAFB7D92BC18)}, {UINT64_C(0x1D87A14312F15F05), UINT64_C(0x79390E3C7B6B4240), UINT64_C(0xFC199D76492E6273), UINT64_C(0x0053F1C47EB090C0)}}, {{UINT64_C(0xE790F1CAACEE6DFC), UINT64_C(0xC8FB4626DFEA04FF), UINT64_C(0xBF03627F627D88D7), UINT64_C(0x1B3698843D81A75A)}, {UINT64_C(0x83405DDA917FA19D), UINT64_C(0xFFB23FF98C7DDCD2), UINT64_C(0x644F54C740F10B48), UINT64_C(0x4636FADF17FF713A)}}, {{UINT64_C(0xDA62ECC227F417E4), UINT64_C(0xC0DBE48FFD8662BE), UINT64_C(0x729EE4AA1011E73C), UINT64_C(0x4BAE5D3C3E11C84B)}, {UINT64_C(0x854DFFF86CEF6CDA), UINT64_C(0x7939228CCB7131EA), UINT64_C(0x58B3744AD3EBC607), UINT64_C(0x6EB9248F2049E239)}}, {{UINT64_C(0x0265CAE9ED0D4E57), UINT64_C(0x92166D028AA65AEF), UINT64_C(0x2E337CDA198345D6), UINT64_C(0x6775330CABE1AD7B)}, {UINT64_C(0xA9A828A8BF6FBC7D), UINT64_C(0x33A56F8DCBFEA393), UINT64_C(0x2DB72F77D811EC51), UINT64_C(0x3DDFCD268327C78E)}}, }, { {{UINT64_C(0x7CF8A521B46AA2C4), UINT64_C(0xE3B20937ACF0D567), UINT64_C(0xD47D8D1BA440648E), UINT64_C(0x674E79201E9791A1)}, {UINT64_C(0x27B714EB18366462), UINT64_C(0x1526E5588476F588), UINT64_C(0x72C8D3746C240D70), UINT64_C(0x066BBAFB805C1265)}}, {{UINT64_C(0x15F1CFF5457034E1), UINT64_C(0xCF7C6550DD819FA7), UINT64_C(0x57C2CD5377AC7AD6), UINT64_C(0x7DB2A8BEAFED669D)}, {UINT64_C(0x2DAFD95FD4697340), UINT64_C(0x382FF89215A6B6E7), UINT64_C(0x036FC753BF4A6B1B), UINT64_C(0x3E7AC46DE4012711)}}, {{UINT64_C(0xBA5ECDED5752A34D), UINT64_C(0xB08749D46BAA08DD), UINT64_C(0x8A2B98974A4A47A8), UINT64_C(0x7230966FE42DCE02)}, {UINT64_C(0xA6FF614A58654FF5), UINT64_C(0x7F3531D1AB3C2A7E), UINT64_C(0x0282A2F00D0ED417), UINT64_C(0x2DC7B872EA9755A3)}}, {{UINT64_C(0x7678D7652392536A), UINT64_C(0x0C2025F1574C657D), UINT64_C(0x01701C80795413DC), UINT64_C(0x63F0D4965396279E)}, {UINT64_C(0xB0F9968AFA32EA64), UINT64_C(0x81265D155BB393DE), UINT64_C(0xC05ECC6D0BCD8C10), UINT64_C(0x4F3769F92824457E)}}, {{UINT64_C(0x9AA58686F13DB92E), UINT64_C(0x1155CDF4ED2E1B18), UINT64_C(0xA06E919409823F5A), UINT64_C(0x7F1BBE734257AB0E)}, {UINT64_C(0x2DFB6472ABA6FCD1), UINT64_C(0x04BE6BCAD73D850E), UINT64_C(0x72AAEC34297D312B), UINT64_C(0x31F4C02C7509D9F5)}}, {{UINT64_C(0xAA9BA0007CA72AD5), UINT64_C(0x21EE29457FBCB4D6), UINT64_C(0x0E210AAB1CF8580A), UINT64_C(0x600479FE0FA8DE10)}, {UINT64_C(0x246FD26554322F70), UINT64_C(0xC60BE9BB60DF1893), UINT64_C(0x04D4F99D05137E38), UINT64_C(0x6ACB9E016164C176)}}, {{UINT64_C(0x126F2C7EC1DB7B6C), UINT64_C(0x4C3B30B5CF4DD3C0), UINT64_C(0x827D57A2F782A489), UINT64_C(0x41B897DEE52621F0)}, {UINT64_C(0xED31C55ADDA0A3CD), UINT64_C(0x21C91BB2A11AD179), UINT64_C(0x60E606B843FD6E23), UINT64_C(0x31B8138D51ED7FA6)}}, {{UINT64_C(0x1387B313E72E4BC5), UINT64_C(0xDCCCB09C82EBFC72), UINT64_C(0xF0B01202AA4432D6), UINT64_C(0x632599C47C52B69D)}, {UINT64_C(0x3922D0C0BCE9A04C), UINT64_C(0xC2397D88B53F4268), UINT64_C(0x50AE5ED900669858), UINT64_C(0x1B2BD4C216C7696B)}}, {{UINT64_C(0x6FAE1B082BF7DF06), UINT64_C(0x870B3FE85210DB3B), UINT64_C(0x680BE4229BDC0B91), UINT64_C(0x56BA83C6BCC970AD)}, {UINT64_C(0x1AE91BAC859D6C78), UINT64_C(0xC5BDD5FB2895A1A6), UINT64_C(0xA169E73C550610F5), UINT64_C(0x01B467670CC7D3EA)}}, {{UINT64_C(0x1E147A510EC5ECE2), UINT64_C(0x9B612A1FD0E2C46C), UINT64_C(0x664FDD555E293783), UINT64_C(0x52070E1567DC4DBC)}, {UINT64_C(0x449B53E54A4903FB), UINT64_C(0x79B53583A8D30103), UINT64_C(0x616C97F3AF7CC314), UINT64_C(0x6BEB304C2849862C)}}, {{UINT64_C(0xB9C636D6019F0313), UINT64_C(0x0B08E7CBD3E0188D), UINT64_C(0xEAEB1715D704DE15), UINT64_C(0x4990282C837E7543)}, {UINT64_C(0xCBB0BD49FBD3A061), UINT64_C(0x3454A8AC1DA124AE), UINT64_C(0x0D524A0237D64EAB), UINT64_C(0x766807490B3E4ADE)}}, {{UINT64_C(0xC293E01195B04835), UINT64_C(0x76D304BA23D0C885), UINT64_C(0x36A63627D6552D80), UINT64_C(0x3B4FA680C504CCAB)}, {UINT64_C(0xF25B3A04E1FC08DF), UINT64_C(0x786380E562D080F8), UINT64_C(0x0A731427DAC0D110), UINT64_C(0x1D65288FD628429A)}}, {{UINT64_C(0x3CE5E929DC94453E), UINT64_C(0xEC7CF988B6073324), UINT64_C(0x023361E7DCB35234), UINT64_C(0x3AF20624F5E89B7C)}, {UINT64_C(0x860F188EA5B2B103), UINT64_C(0x5EAC84CECB6D112F), UINT64_C(0x63B200C3914C9FFD), UINT64_C(0x327870A055A1FDCB)}}, {{UINT64_C(0x4F94633C155280ED), UINT64_C(0xF98321D53654B8AA), UINT64_C(0x9C057A23489AE89A), UINT64_C(0x1124A1FBD59CA3B5)}, {UINT64_C(0x2F4CE0521F64AFD7), UINT64_C(0x841EE4417C789152), UINT64_C(0x93531ED459A98374), UINT64_C(0x69A4F48C36BB8F07)}}, {{UINT64_C(0xD8FFD2435FD512A7), UINT64_C(0xF48C96F19BEA1738), UINT64_C(0xF70E1F6A0FFB4553), UINT64_C(0x29DB63B15FF91D21)}, {UINT64_C(0xC1355C2377BF7279), UINT64_C(0xD3946EE9A2FC904D), UINT64_C(0x07223881E7B7A9F4), UINT64_C(0x212D896756E08ED6)}}, {{UINT64_C(0x32B8C22A45503451), UINT64_C(0x9E4FDAF1E6AB7B3D), UINT64_C(0x7A300E3D04A31294), UINT64_C(0x0F529DFD05FE2AEB)}, {UINT64_C(0x7EFFEA9E9951B6FB), UINT64_C(0x18C60266336B9A2B), UINT64_C(0xB78A5EE16C8D0EEC), UINT64_C(0x68C17FE446ED0B23)}}, }, { {{UINT64_C(0xF707FAD596B3222E), UINT64_C(0xD6AF61610223F804), UINT64_C(0x13FFDC744F43A0E9), UINT64_C(0x6A3B70E93347F487)}, {UINT64_C(0xBDDF02A46A4AF4F5), UINT64_C(0x61B451E1E4C69950), UINT64_C(0xFF854590F9E3BB99), UINT64_C(0x46EB1F697CD54C54)}}, {{UINT64_C(0x70E643B68E6848D3), UINT64_C(0xC58B8519848C2587), UINT64_C(0x2F195C54EDF4A38E), UINT64_C(0x206E6A323D2A52E8)}, {UINT64_C(0x234845B5417595BF), UINT64_C(0x90354373FF5AE3CB), UINT64_C(0x13BE31CE89C0E555), UINT64_C(0x2D18AA43CC67E26F)}}, {{UINT64_C(0xC74EE8C4F041BD17), UINT64_C(0x655CF527C2B3CC64), UINT64_C(0x6735CF0A160FF053), UINT64_C(0x35DAB9EB04218A0D)}, {UINT64_C(0x32BB2E9ACBC34E46), UINT64_C(0xF780CEAF7D190342), UINT64_C(0x161C0C1A9F0DA1A4), UINT64_C(0x7B198C9EE7642FD6)}}, {{UINT64_C(0x936C763E122FD0B4), UINT64_C(0xA3819ED9A7E0C435), UINT64_C(0x86228B04CAAE6D7B), UINT64_C(0x2E1160187A3C65B4)}, {UINT64_C(0xF55BB1F3D4EB0345), UINT64_C(0x858A0BF40630B569), UINT64_C(0x8CC22657CB78A626), UINT64_C(0x7CD93BDEB45E3005)}}, {{UINT64_C(0xCAA1F45998E517AB), UINT64_C(0x36E60281B34A6F5C), UINT64_C(0x877A49F30B46F47F), UINT64_C(0x0179824B9E7BE761)}, {UINT64_C(0x6830A2B2D455D9C0), UINT64_C(0xB734BA0A7BA31962), UINT64_C(0x344665A4065C3B51), UINT64_C(0x0B1D2210562E7F1D)}}, {{UINT64_C(0x289BAFCA0B2E22E8), UINT64_C(0x038929A083390107), UINT64_C(0x968A014D0683E782), UINT64_C(0x5A1AD5C853D34463)}, {UINT64_C(0xA26133349527B2CA), UINT64_C(0xE8471271310B745F), UINT64_C(0x49C81A2631387F59), UINT64_C(0x1B955AF70343C691)}}, {{UINT64_C(0x069328ADA4A9FCA4), UINT64_C(0x14EF09A7624FCB94), UINT64_C(0x21C76F0DE3E0CECD), UINT64_C(0x5F470B866C1BCE0F)}, {UINT64_C(0x79319A3FB15BC8B4), UINT64_C(0xB1407CB1DB06AFA1), UINT64_C(0xD69E9E09911116E0), UINT64_C(0x6E77524E0756579E)}}, {{UINT64_C(0xD3EC5EBCE2D851D5), UINT64_C(0xC888BC2303B63143), UINT64_C(0x5F3DE41EDB0C357F), UINT64_C(0x646FFBD3C3D47D37)}, {UINT64_C(0xE53F8BEB0692639B), UINT64_C(0x7E194E37D4FBC3D4), UINT64_C(0xE1988A22452B2A2E), UINT64_C(0x5D359A15B013F9E1)}}, {{UINT64_C(0xA48160A7B2A6627D), UINT64_C(0x5EFDC8483CE8789E), UINT64_C(0x264CBFF1B1CD14EE), UINT64_C(0x288823D444D84222)}, {UINT64_C(0x2F091B233A6DB1F8), UINT64_C(0xBFD737B5CEA89B44), UINT64_C(0x682AB86C17F5E969), UINT64_C(0x7653005CABB0FA87)}}, {{UINT64_C(0x619C2629D4B8A43A), UINT64_C(0xBFDAF433B6DAF943), UINT64_C(0xDC7AA1EE6D640DB8), UINT64_C(0x35ADEEA83B08D55C)}, {UINT64_C(0x30935454D7AF5382), UINT64_C(0x1F9C51A13D68A24A), UINT64_C(0xDBD13CFC78BDBEA9), UINT64_C(0x003B6D9931210A3F)}}, {{UINT64_C(0xD4547A329C2B515D), UINT64_C(0x4AF29AA8FECDAAA9), UINT64_C(0x85C80ECDE401D5AD), UINT64_C(0x2830332D8AA315A1)}, {UINT64_C(0x5675882371DCE198), UINT64_C(0x55AC9D106ACBDEE3), UINT64_C(0xF6D468CF575CF4BB), UINT64_C(0x46E4FA98576B5C4A)}}, {{UINT64_C(0xAD20F82020D859EF), UINT64_C(0x380915882A5462B0), UINT64_C(0x35F45C9F2135DA7D), UINT64_C(0x6B426F91F7F20DBD)}, {UINT64_C(0x4A0D8CBEF96E77D2), UINT64_C(0x8FC36F5BCC51D3F4), UINT64_C(0x7A1870DDBE16A0A8), UINT64_C(0x29C3E2B3114DB780)}}, {{UINT64_C(0xFF692A4C21779E6E), UINT64_C(0x698231ABA6026EC1), UINT64_C(0xDAB0D835EF03E21B), UINT64_C(0x770BFFACC846D56F)}, {UINT64_C(0xCD28722D3B8B0747), UINT64_C(0x3DEFE04032AE95E5), UINT64_C(0x6F5D816A0F9857D6), UINT64_C(0x2E483FEDFC630F5E)}}, {{UINT64_C(0xDBF82EC4967C7140), UINT64_C(0x6265CAD10D20A2A5), UINT64_C(0x1509652B5862DEFE), UINT64_C(0x699DD93994A284E5)}, {UINT64_C(0xC01166460B2CC732), UINT64_C(0x583FE01294C3EF86), UINT64_C(0xCD5DAEA8CD353430), UINT64_C(0x2B39A746C7ADA62B)}}, {{UINT64_C(0xF449B989E4257BBC), UINT64_C(0x95BA21BAA90DCCE6), UINT64_C(0xDD53AD5C93CA4ACD), UINT64_C(0x7FCF27380BB4213B)}, {UINT64_C(0x0E57C1C0C2E7E54E), UINT64_C(0xD1769DAEA1A0E975), UINT64_C(0x68F62C4EC3B6E13B), UINT64_C(0x75152F9A781242D8)}}, {{UINT64_C(0x4D58276824B8B820), UINT64_C(0x36E37AC45BBD9F84), UINT64_C(0x1F34414ADA076F12), UINT64_C(0x08A77C283E0333C6)}, {UINT64_C(0xBB1F017DD9193382), UINT64_C(0x56E9AA2483A5612D), UINT64_C(0x6959B02BD0B4554F), UINT64_C(0x2479BC56E4559B52)}}, }, { {{UINT64_C(0x96D631C60F570A8E), UINT64_C(0xE3F566A3D714B807), UINT64_C(0x564DD512EF7E1550), UINT64_C(0x1C5CF24A79FA2F58)}, {UINT64_C(0x973BA599897958DB), UINT64_C(0x93951D1711A9CBB1), UINT64_C(0x86BA17F6A37A969A), UINT64_C(0x4807CAC7A069B195)}}, {{UINT64_C(0xB64AC0D46665B35E), UINT64_C(0xBA9CD3947EF72C68), UINT64_C(0x838807B29C4CBC44), UINT64_C(0x2675D26882770197)}, {UINT64_C(0xBFC2F13717087FA9), UINT64_C(0x811E644BE7B79B31), UINT64_C(0x597CE23FC963A061), UINT64_C(0x40BC32E42EA0DEB0)}}, {{UINT64_C(0xC0AEFB5027C85959), UINT64_C(0x76D1087E058E0FDD), UINT64_C(0x6ADA5AAF7E51A6F8), UINT64_C(0x424B16E0054A058D)}, {UINT64_C(0x9A2C20A963AF9766), UINT64_C(0x4C1CB5323CF18DAB), UINT64_C(0x599CD9296C5D6A00), UINT64_C(0x57C39BAE8AA311BF)}}, {{UINT64_C(0x3FDF5B46CD987F02), UINT64_C(0x57755078353175C4), UINT64_C(0x80223EC0CD578394), UINT64_C(0x04BBA6ACAEB7D278)}, {UINT64_C(0xD27FD2BE8688BFB2), UINT64_C(0xB2F80278C27A62E5), UINT64_C(0x8BA6FB07339429D8), UINT64_C(0x57737FF63AB70AA0)}}, {{UINT64_C(0x0140E47F8EAEB3C9), UINT64_C(0xB91C9798735AC8EA), UINT64_C(0x325E031283D4EFAA), UINT64_C(0x1E7DA3BED9C5888E)}, {UINT64_C(0xA210CDA6F7F1EB13), UINT64_C(0xEDC1F6B3936EA9E9), UINT64_C(0x46E831C41B097F65), UINT64_C(0x008576011939A0AE)}}, {{UINT64_C(0x7C26F7111F68BB40), UINT64_C(0xEA69C84539DDBE6D), UINT64_C(0x590BF426E5316F22), UINT64_C(0x40CDC921CC2DF9C9)}, {UINT64_C(0x28A32DDEF3F991C6), UINT64_C(0xD75B59E65356CA78), UINT64_C(0xB5DD3861D1F5F318), UINT64_C(0x09EB1A2DE7929834)}}, {{UINT64_C(0x701F9A2DDBC0370D), UINT64_C(0x559D0FAF2870B59D), UINT64_C(0xE89E5DF055367B5D), UINT64_C(0x22BBD4FC74005A58)}, {UINT64_C(0x7ACED1E499CDC76B), UINT64_C(0xD41C827CE3C219D3), UINT64_C(0x5AF3F2AE8221D91F), UINT64_C(0x6D62C990E5B6BC98)}}, {{UINT64_C(0x23B2A0BF7FFC9D0F), UINT64_C(0xED98F71D974CA299), UINT64_C(0x10F8C07A151D559B), UINT64_C(0x40E46FC38E949C62)}, {UINT64_C(0x0CF53E34BBE55338), UINT64_C(0xF2D6CF26115520D4), UINT64_C(0x915FF09A590B4E23), UINT64_C(0x072E4233BEDC75F2)}}, {{UINT64_C(0xB67A6B60997E9BFA), UINT64_C(0xE7686AC9973BC3E7), UINT64_C(0x9525B4490B228320), UINT64_C(0x6C7275837ADE8F19)}, {UINT64_C(0x3D064298062FF3D5), UINT64_C(0x5483826C07E22768), UINT64_C(0xF4ADE9211F7A64A4), UINT64_C(0x70BDDCF7BD92EB25)}}, {{UINT64_C(0xA8DB36115D8A9E36), UINT64_C(0xAA6A5F33FA81065A), UINT64_C(0x8EC120A3366DDA90), UINT64_C(0x2AA0AB25D8A15CF7)}, {UINT64_C(0x5E11E169A0DFFB9C), UINT64_C(0x8C7572E9118408A7), UINT64_C(0x4EEFD13E35833ADF), UINT64_C(0x2C6732E8FC2C1811)}}, {{UINT64_C(0x15D063F9B1537DF6), UINT64_C(0x864176B30414FCFD), UINT64_C(0x9C0A194C8FF9E32E), UINT64_C(0x4DB14C6FDDE1540B)}, {UINT64_C(0xFAA4AED431F6493F), UINT64_C(0x2C479F1DD3C41A46), UINT64_C(0xC31196678E5E85A2), UINT64_C(0x7E567C8084E9A76C)}}, {{UINT64_C(0xB9E2C92A689A6B95), UINT64_C(0xCCEAC3833B635B01), UINT64_C(0x04FEA46534AAB952), UINT64_C(0x772E502763B5CF63)}, {UINT64_C(0xCB94F5D225830581), UINT64_C(0x791004AFC77FB7DE), UINT64_C(0x53273C335140E4AE), UINT64_C(0x0C2D329EA524419F)}}, {{UINT64_C(0xB7CEDA36B307B0E4), UINT64_C(0x12DF7FD00F8F9667), UINT64_C(0x74274002BF62BD94), UINT64_C(0x6765C73DC436C319)}, {UINT64_C(0x79B64CE5F6EEC946), UINT64_C(0x3B1B4B43DAB258B6), UINT64_C(0x377819A3EE1F8B84), UINT64_C(0x1F45F1D676D0EB1F)}}, {{UINT64_C(0xCC5BF9B358C953AD), UINT64_C(0x8303250F7BAD1D2C), UINT64_C(0xBCA7BC36F164972B), UINT64_C(0x2CACF8A9B1DFDA64)}, {UINT64_C(0xB03A59B9D4E2A06F), UINT64_C(0xFED68E681B7FB8FD), UINT64_C(0x08F75A527E747AE6), UINT64_C(0x3299EA6B37A4420B)}}, {{UINT64_C(0x49A00BE6932E5BA6), UINT64_C(0x4921250556114C4B), UINT64_C(0x786B7D31376183C7), UINT64_C(0x01F9E229DD8A5EAF)}, {UINT64_C(0xE9B8E99053094AD4), UINT64_C(0x2EDA305CBFAEDFA8), UINT64_C(0x344437267F9E3BC8), UINT64_C(0x1729519C6B55B3C3)}}, {{UINT64_C(0xEA5A68C050A597D6), UINT64_C(0xA65147D4F1E86D1B), UINT64_C(0x554FA36B8B47CDEB), UINT64_C(0x7F38364B9F24FFED)}, {UINT64_C(0x657C7E051D2A8E2B), UINT64_C(0x8270F1A7E3F64D62), UINT64_C(0xFD258B59953AF5A2), UINT64_C(0x6DE0114143510AA3)}}, }, { {{UINT64_C(0x483904280D7A5CBE), UINT64_C(0xD37E8C1FDE441E5E), UINT64_C(0x908C88B80DE31C8C), UINT64_C(0x7C0E24BB0ACD87CE)}, {UINT64_C(0x4A78117725ECCCE8), UINT64_C(0xC06C2F7ACBDA746F), UINT64_C(0xDB9E9A08AB565DD4), UINT64_C(0x1E9B44C0BE776F5B)}}, {{UINT64_C(0x7CFD4E5085B54ABC), UINT64_C(0x41A4A4DCE7A44F8B), UINT64_C(0x751C5052A4422576), UINT64_C(0x534FE0B2D56B6CB1)}, {UINT64_C(0x22DAA5CDD5D767D0), UINT64_C(0x9C1999AB0AF8E22C), UINT64_C(0xC70C093299259068), UINT64_C(0x459D212EFD0839F0)}}, {{UINT64_C(0xA207E7DEFD32D79B), UINT64_C(0xA7B54991410B479F), UINT64_C(0x806912B6D68E5CDC), UINT64_C(0x1CB7B68C92AB8B64)}, {UINT64_C(0x3DB85378DF98339F), UINT64_C(0xA24101DC83EA7A18), UINT64_C(0x8892367CE25522C5), UINT64_C(0x491A8BB37753A2C3)}}, {{UINT64_C(0x571C547E8C7875A7), UINT64_C(0x7E5F23E4E9747C13), UINT64_C(0x00F3BBB21058548D), UINT64_C(0x7081F172E2397102)}, {UINT64_C(0xB4351B8A6B573034), UINT64_C(0xB35A4F44C1A094F0), UINT64_C(0xE2C1DAEDAE951E96), UINT64_C(0x5CF2A742B9DAA081)}}, {{UINT64_C(0xB4F0D3F09828ED9F), UINT64_C(0x6DB312FBA9251386), UINT64_C(0xC9A4583F537203F2), UINT64_C(0x5E0996399CE76D40)}, {UINT64_C(0x3381B894C9F8CEA8), UINT64_C(0x8242DAF8626E07E8), UINT64_C(0x64A0B68C6077DFD9), UINT64_C(0x3CC462C0563CF051)}}, {{UINT64_C(0x8937364C87AF4A45), UINT64_C(0x8C4ACBFA2DE0FD60), UINT64_C(0xF10AED11472A5D8A), UINT64_C(0x3F5674B55380C2E6)}, {UINT64_C(0x8F4FD0F52BF8A452), UINT64_C(0xB436E388C7390418), UINT64_C(0xAFAB7B7CE6EE9406), UINT64_C(0x4F623177951739BA)}}, {{UINT64_C(0x90B0ED35A9B50F2A), UINT64_C(0x46DC3F91AC6CF217), UINT64_C(0x2F1420312C7B119C), UINT64_C(0x55A93CBC07D79225)}, {UINT64_C(0x45E0DD7DB304A642), UINT64_C(0xB743DFCDD572D446), UINT64_C(0x867B02EBAC74B368), UINT64_C(0x67B2B86C169B94B0)}}, {{UINT64_C(0x18396DA7483CFEDB), UINT64_C(0x6C6E03708A3A07C2), UINT64_C(0xF32A1AFEAB554998), UINT64_C(0x408C911987D1C136)}, {UINT64_C(0x755F63254BBE0B78), UINT64_C(0xDC4A7319D1178550), UINT64_C(0x44B49813B3B9E459), UINT64_C(0x0294B9A94C3D3620)}}, {{UINT64_C(0x6480F6FE067FA6FF), UINT64_C(0x67891400F307A52E), UINT64_C(0x9F846EF87F865DA8), UINT64_C(0x318DAC55AE02F671)}, {UINT64_C(0x91119652E288A317), UINT64_C(0x4D7CF2B8038C61B8), UINT64_C(0x098F80DD5154C1A8), UINT64_C(0x10C04F87D239A2D4)}}, {{UINT64_C(0x134609265CA6F183), UINT64_C(0x5E97AD18D52001ED), UINT64_C(0x7DCD2477E14843DF), UINT64_C(0x27DAB27698A30426)}, {UINT64_C(0x7939CAE3E120D80C), UINT64_C(0xC9F4646651E5B81A), UINT64_C(0xED620322E2E49D52), UINT64_C(0x3C0F5A2EFA172BBB)}}, {{UINT64_C(0xBFFE87425DB1196B), UINT64_C(0xCD45F8ED49B7214E), UINT64_C(0x923ABA47C35F5C33), UINT64_C(0x16ED1F1083F3EE48)}, {UINT64_C(0x042E6DF099274930), UINT64_C(0xE8AE1DCFC5F8EA16), UINT64_C(0x004462CBF02EA2B2), UINT64_C(0x427F9381D284B04E)}}, {{UINT64_C(0x4CD481F875EFACC5), UINT64_C(0xD98C3FD421C83368), UINT64_C(0x4335E7C83894CE88), UINT64_C(0x18321F87955A298C)}, {UINT64_C(0x073DD00AD1716E18), UINT64_C(0x66D82A5FFE0BFE61), UINT64_C(0x7D869E202310C532), UINT64_C(0x29A376FB19BF4704)}}, {{UINT64_C(0xA1B12B35C149B5B0), UINT64_C(0x3411B2311E828959), UINT64_C(0x56417519560D99FB), UINT64_C(0x4E0EB143EBB52124)}, {UINT64_C(0x7B594B5E6AEF3801), UINT64_C(0x00AEE12E9ECB536E), UINT64_C(0x6BF0FB2956E23145), UINT64_C(0x2B2D83B961AE8E98)}}, {{UINT64_C(0x9CB3E2E86AC27F2D), UINT64_C(0x82BACA965A6280AA), UINT64_C(0xCBC6C01B2C6B7C8F), UINT64_C(0x390511BCD0C01ABD)}, {UINT64_C(0xB322D97249551C0D), UINT64_C(0x7905E82E7B6489C8), UINT64_C(0x4DD0CE8B40EEC20D), UINT64_C(0x5C0B3EE72409298A)}}, {{UINT64_C(0x4418D685B635FB99), UINT64_C(0x652EA6083ACE8B39), UINT64_C(0xE586FBDC46FC4047), UINT64_C(0x3C832D34D8CC13D8)}, {UINT64_C(0x14CC9F23F7AA54A1), UINT64_C(0x80D094E607153B9F), UINT64_C(0x0776E5406A2EED8E), UINT64_C(0x03CC3BFC77249085)}}, {{UINT64_C(0x5F8F281F1308C1A8), UINT64_C(0x31C8E737D1AFC4B7), UINT64_C(0x6778529841AE8EF2), UINT64_C(0x17716086FD028A4B)}, {UINT64_C(0x1A2083E0F922E100), UINT64_C(0xD67EC9D1D53FE691), UINT64_C(0x2DF8B6EDECCA8DEB), UINT64_C(0x3B595EE4BCCC999E)}}, }, { {{UINT64_C(0x11F03F895A4B8C04), UINT64_C(0x254C36487DAE8E6B), UINT64_C(0xAB6EAAF1637CDB83), UINT64_C(0x41F52243FDDED8F6)}, {UINT64_C(0x487078E1BBDF3270), UINT64_C(0x98853B49339CEA28), UINT64_C(0x8AF0522BAB3EDE57), UINT64_C(0x734D711F85EB4CC0)}}, {{UINT64_C(0xFD1F46ADF86BA644), UINT64_C(0xA5332B97A3299855), UINT64_C(0x61BE90DBD9493634), UINT64_C(0x308F09B1C2705911)}, {UINT64_C(0xD59F1B1A0B7918A5), UINT64_C(0x9CF333D0CF6399E6), UINT64_C(0xD09C63CDFBB26B6B), UINT64_C(0x76C27913A6536647)}}, {{UINT64_C(0x3DF1811FAAAB555C), UINT64_C(0x60853351886C828B), UINT64_C(0xF6CA7707F1E87F41), UINT64_C(0x5B4F6EDF7D7082E6)}, {UINT64_C(0xADE518E03F672DE7), UINT64_C(0x00ED0B84022541B2), UINT64_C(0x04FE5DD6618E8969), UINT64_C(0x2F5F5C65DB9CCA4D)}}, {{UINT64_C(0x00B69B4596BDAE2C), UINT64_C(0x06DB22CF770604C4), UINT64_C(0xC2EB7F8F856585C3), UINT64_C(0x6E3225390413C614)}, {UINT64_C(0x22C09EA870A46872), UINT64_C(0x143E73BC1FF23734), UINT64_C(0xCAC5E2DD575C20B4), UINT64_C(0x225E53903FEBE787)}}, {{UINT64_C(0x594FEA4EBE9C512D), UINT64_C(0x5850709292CB73AE), UINT64_C(0xFD8EFC7DB0CE2096), UINT64_C(0x3B58C199E031D6AB)}, {UINT64_C(0x55DA1CBD479F23E4), UINT64_C(0x060C6BB5A6DB6137), UINT64_C(0xD8319CF86864488E), UINT64_C(0x6C15A31B21B02EDA)}}, {{UINT64_C(0x13C483728CA7084D), UINT64_C(0xF7554E59A171ECE5), UINT64_C(0x7425C5D823A97699), UINT64_C(0x6F2C68DA71E1120E)}, {UINT64_C(0x9591B9B624324B64), UINT64_C(0x2DA33472C02AC704), UINT64_C(0xC5DE7FC981EE1295), UINT64_C(0x6A646A445D6E93C6)}}, {{UINT64_C(0x48684061A39D6554), UINT64_C(0xB70ABF61C3DF57B6), UINT64_C(0x9824AFD658B9EEE3), UINT64_C(0x46EBE9D13A14A733)}, {UINT64_C(0x8E70F95DD74F8E94), UINT64_C(0xA9D922A26AFCA4E2), UINT64_C(0x519A97536988CC16), UINT64_C(0x711DEF16D545AF8A)}}, {{UINT64_C(0x362A5D95811A2BF7), UINT64_C(0x42A84A33566B90CE), UINT64_C(0x25CBC7607C41EC87), UINT64_C(0x6B77E39CD4B7DBEE)}, {UINT64_C(0xA98B8201833015A4), UINT64_C(0xE412E217C31B26F4), UINT64_C(0x518BE8F0E0090782), UINT64_C(0x08D9F4B63DB51D4E)}}, {{UINT64_C(0x2C80CE87297D421E), UINT64_C(0x2FD137F8ADBA1498), UINT64_C(0xA2ED3D472899AA14), UINT64_C(0x2AC924A5FE4F365A)}, {UINT64_C(0xAC0389B7666DC0A0), UINT64_C(0x3CC997398ABF3D9E), UINT64_C(0x33060DB6DFBFF83A), UINT64_C(0x54EEE2150339C3B8)}}, {{UINT64_C(0x06C3A4F5820F7E4D), UINT64_C(0x86F083E208C3D311), UINT64_C(0x47E29984FE4B0476), UINT64_C(0x218F52E2CA7DF6CF)}, {UINT64_C(0x59317E26BF2C2084), UINT64_C(0xEA9C865B289A10CF), UINT64_C(0x7AA1E50B2074FEA3), UINT64_C(0x708A1D8C4B3EFC31)}}, {{UINT64_C(0x34C5C63E864817D7), UINT64_C(0x0F614043D89E995B), UINT64_C(0x60CE8BCE975E2A03), UINT64_C(0x70916E2978493E0C)}, {UINT64_C(0xBD0748F9216782C6), UINT64_C(0x0051C65AED32FB72), UINT64_C(0x9DC5F5584DD64705), UINT64_C(0x674F1A63EEC14B50)}}, {{UINT64_C(0x73D6E68EDB633FD1), UINT64_C(0x7B5F8303F52F9537), UINT64_C(0x980FDDDC88A74CFB), UINT64_C(0x6419C18F47FC32D1)}, {UINT64_C(0x93727B4C870B5D59), UINT64_C(0x4BCE05DECF28021D), UINT64_C(0x3C059B47AB4F0CE5), UINT64_C(0x77CA7F67B85FFDBB)}}, {{UINT64_C(0xDBEADDCEC525088E), UINT64_C(0x561E12BE390D2221), UINT64_C(0xCD224FC1D9BA7AF0), UINT64_C(0x03744552394DC073)}, {UINT64_C(0xCFC67B4921BB6B6E), UINT64_C(0xD234FD8D1B5F8E6A), UINT64_C(0x6DDBC18B40B7F8B0), UINT64_C(0x79F40857DAACCC74)}}, {{UINT64_C(0x30E5F9909DD71B9C), UINT64_C(0x00FCBFA5291124EF), UINT64_C(0xBE595A2549B8C570), UINT64_C(0x5B4B8141BC094446)}, {UINT64_C(0xB22B4F04469191B6), UINT64_C(0x10845AC8D73C4D38), UINT64_C(0x39C9F0FBED0C8224), UINT64_C(0x7E009DFBF5813BEE)}}, {{UINT64_C(0xA47C2989A61D09C0), UINT64_C(0x3706F45659E55A9C), UINT64_C(0x2373976FEA0259B9), UINT64_C(0x13FC0E09077D20CC)}, {UINT64_C(0xBB24DD05E78D29CF), UINT64_C(0xD8757A67822CFA02), UINT64_C(0x36CA74863C55A4C6), UINT64_C(0x4234E6893EEABBE1)}}, {{UINT64_C(0xA2F54D14B46BDB51), UINT64_C(0x8A530B78675BB770), UINT64_C(0x617D7E8EDE9F1F8B), UINT64_C(0x799B3E442DCC4712)}, {UINT64_C(0x658A31D8B486FE8C), UINT64_C(0x45BAFC29163D4AF0), UINT64_C(0x3A2C7F66A5289C8D), UINT64_C(0x4ECC3C7DB91FF3DB)}}, }, { {{UINT64_C(0x738CF1C7DF4DFD43), UINT64_C(0x72943A2DE987084C), UINT64_C(0xEA21C05F2491FF24), UINT64_C(0x3D3F4ED7DA050094)}, {UINT64_C(0xF90644E461C4054D), UINT64_C(0x253792143A50E82A), UINT64_C(0x47EDB006C7DEF970), UINT64_C(0x0F8F031C0F53F307)}}, {{UINT64_C(0x50FEB6D8724976D5), UINT64_C(0x57AA499FF40C7720), UINT64_C(0x6B80AC540DAAF428), UINT64_C(0x7AC6845E1F6FC276)}, {UINT64_C(0x8EC7FAB117A4B9C5), UINT64_C(0x8336DD62ED0C8F97), UINT64_C(0x6014A510B7B7104E), UINT64_C(0x4991A03BA2911C30)}}, {{UINT64_C(0x6D353975CBCC9BA3), UINT64_C(0x23E97E28C4564492), UINT64_C(0xDF432FDAF8AEED3E), UINT64_C(0x11DB40DD6F6B472C)}, {UINT64_C(0x5B87005B95AA0174), UINT64_C(0x1DB4108089D9F1A8), UINT64_C(0x5A6BC444689DF208), UINT64_C(0x16153F87BF38FF8D)}}, {{UINT64_C(0xD217003FFFD3C814), UINT64_C(0x1ADE64C3FD50AF95), UINT64_C(0x1936332C9FFB8BEB), UINT64_C(0x6EE322DCD70CD8D8)}, {UINT64_C(0xE40A0419F2A60976), UINT64_C(0xA62F6FA1EF93B05B), UINT64_C(0x5978206C596575FF), UINT64_C(0x5CDCA200B68BFE5C)}}, {{UINT64_C(0x3FB16AEDB7949E33), UINT64_C(0x3453892840304A1B), UINT64_C(0x7FA35A343BCA4239), UINT64_C(0x22FD1AEFEE76919E)}, {UINT64_C(0x1F8FE6A40F6A5D50), UINT64_C(0x27CC704F26BBA46B), UINT64_C(0x230FD0CA3420CC52), UINT64_C(0x3E9E4DA4B3A83D85)}}, {{UINT64_C(0x1D82390E7F5CC75E), UINT64_C(0x7025624549D0A605), UINT64_C(0x5B8778134FF4BC44), UINT64_C(0x28E6A057B5EC02E4)}, {UINT64_C(0xBC7A10DA2E89FB84), UINT64_C(0x3AF182E520E1EA00), UINT64_C(0x4B590FFA9C507274), UINT64_C(0x26BA94D6AA7FD65B)}}, {{UINT64_C(0xC02CC77C238CC195), UINT64_C(0x3F175C97A97EE3E4), UINT64_C(0x8A28FA23DFA1F9DC), UINT64_C(0x35CAC0FF1F968D15)}, {UINT64_C(0x0FC41B3337C7C773), UINT64_C(0x71E06B10BC999443), UINT64_C(0x073A1ABA2C87B0A4), UINT64_C(0x29F29B129E5E8B70)}}, {{UINT64_C(0xAA25F348E491FE70), UINT64_C(0x9371F94BC1713992), UINT64_C(0x674B478C4FA08818), UINT64_C(0x6F3C31FEB1407431)}, {UINT64_C(0xBB7D37FBD93DD5E1), UINT64_C(0xE34A40B87E04EE7A), UINT64_C(0xCF82360DF3C33528), UINT64_C(0x0A3B8FF501477712)}}, {{UINT64_C(0xA45914716B718511), UINT64_C(0x7B0CE8DED2FD6B9B), UINT64_C(0xC42544FA6845DBEF), UINT64_C(0x456A698563AF476A)}, {UINT64_C(0x5DD611F69CDE4E74), UINT64_C(0x860956832B346AEB), UINT64_C(0xD15C5DA06E75B3D7), UINT64_C(0x220FFD73C72D5D2C)}}, {{UINT64_C(0x478DA345D2ED888F), UINT64_C(0xA69D4FB9E04CBCC7), UINT64_C(0xA427150AB3F1179D), UINT64_C(0x1DD3B8C2D5CEA78A)}, {UINT64_C(0x9462EFF0B8628A22), UINT64_C(0xB2FFFF4AB2CB44A5), UINT64_C(0x8234A3FF24039BA8), UINT64_C(0x01BE7202916DE889)}}, {{UINT64_C(0x510669856DFCEF0B), UINT64_C(0x25729D98DF20CDEE), UINT64_C(0x872FD39D9693E5EF), UINT64_C(0x72D03AE12D859635)}, {UINT64_C(0x3F28F84EDACAEB82), UINT64_C(0x9EB40FD6CB5284D7), UINT64_C(0x66C2DCA6C5F54041), UINT64_C(0x4BDBA3821C1F2461)}}, {{UINT64_C(0xE53421970E0ED176), UINT64_C(0xF588547AA225A47F), UINT64_C(0xC83B54ED1FEB2259), UINT64_C(0x1B03791392F3733D)}, {UINT64_C(0x935C97822271ECFA), UINT64_C(0x5F7E94A653CFE07C), UINT64_C(0xBFF5B0E61B40CA19), UINT64_C(0x36C7851D459445E1)}}, {{UINT64_C(0xB6547971588C9748), UINT64_C(0xCFD8E81B11970562), UINT64_C(0x41333C80702FE4FA), UINT64_C(0x2F153C8C962A993B)}, {UINT64_C(0x028BBD6A8BDA48AC), UINT64_C(0x7B076F88FE1DB02A), UINT64_C(0xC9560400078FB3FC), UINT64_C(0x5DCC0946035907EA)}}, {{UINT64_C(0x93D7CF33A6233F1C), UINT64_C(0x03184BC4DF2A187C), UINT64_C(0x291149BCE83DAC32), UINT64_C(0x575F4279FAEDF216)}, {UINT64_C(0x101427B4086FC141), UINT64_C(0xC924F2AED288562E), UINT64_C(0xDB610463EEF5799A), UINT64_C(0x20F187676A09661D)}}, {{UINT64_C(0xE39BB775F59D0C20), UINT64_C(0x18DA90E2723A4EF2), UINT64_C(0x8E747A7BF56B381B), UINT64_C(0x7EF67224F98F26DC)}, {UINT64_C(0xB1373AF5E1F94B99), UINT64_C(0x1076FBA60C3B6AA8), UINT64_C(0x7FCD0017A3A7811C), UINT64_C(0x6D1A697346554E7E)}}, {{UINT64_C(0xE5734077B9CED2C2), UINT64_C(0xC94D17F81F770914), UINT64_C(0x58B47BCB1CD248EB), UINT64_C(0x2E06538C24804B6F)}, {UINT64_C(0x275D933F32E7CA19), UINT64_C(0x1B982B491FC9241E), UINT64_C(0x8B8A6ED53986B6AC), UINT64_C(0x1756822135B4EA6A)}}, }, { {{UINT64_C(0x090AD05AE796327F), UINT64_C(0xA78DAE5EAD21DD4B), UINT64_C(0x8EEC9EDB9C2F8CBE), UINT64_C(0x33E375E0653E0F2D)}, {UINT64_C(0xDA19EFF28D67AC72), UINT64_C(0xBFC7E62B2737AB8C), UINT64_C(0xBBF8BD1D4CF53C12), UINT64_C(0x5ABFE23F45C6D555)}}, {{UINT64_C(0x32460B330DE39342), UINT64_C(0x3567454AB8977067), UINT64_C(0x10A1E47DF954592C), UINT64_C(0x4DE8C6EF4DD019C4)}, {UINT64_C(0x1F1D296B1BDAAAFA), UINT64_C(0x4E6B8E8F3A75AD99), UINT64_C(0x259015E1A27FE061), UINT64_C(0x6B6A48209F320632)}}, {{UINT64_C(0x8AA089AFA0B5E605), UINT64_C(0x1D6C1EEE1B4058FD), UINT64_C(0x1D920534B4E89BEF), UINT64_C(0x722A3A3516163340)}, {UINT64_C(0xA3B9178CF33B49B2), UINT64_C(0xFF8FE9BB65558E90), UINT64_C(0x94766BC09794EFAE), UINT64_C(0x79A1EFA2FDFAEB42)}}, {{UINT64_C(0x2FE44B97BCB6D558), UINT64_C(0xB4F4F402DB8B0A79), UINT64_C(0xF53D8AB1247C32E5), UINT64_C(0x3B883CE54DA4C009)}, {UINT64_C(0xB46168BD2EC9F1C6), UINT64_C(0xD40BDE7B6B8FE01A), UINT64_C(0x60A5C168CDFE509F), UINT64_C(0x3314D87823BE249E)}}, {{UINT64_C(0x02511A854D9F5769), UINT64_C(0x8398F9BDB49D6A8E), UINT64_C(0xE8D773F35D2D7135), UINT64_C(0x09B3B8AB9DECC331)}, {UINT64_C(0x8D2B269B584C11D9), UINT64_C(0xF76619446B6B86A9), UINT64_C(0x719A3620C7659AF7), UINT64_C(0x3CFC8DF037C27DBE)}}, {{UINT64_C(0x5EE0BE061145B14B), UINT64_C(0xAC6950E423193ED6), UINT64_C(0x7291C44CDF244C7F), UINT64_C(0x4650C16243D744EA)}, {UINT64_C(0x60B92D3F34A084D8), UINT64_C(0xBBD44A0E376E5414), UINT64_C(0x5C0E488A0980F36C), UINT64_C(0x4E53FCCAD7991A09)}}, {{UINT64_C(0x7A2ADBCF367B55C2), UINT64_C(0x96A88B751FED467E), UINT64_C(0x8E75E37EFB263845), UINT64_C(0x4C2E47B8EB508DD0)}, {UINT64_C(0x20BF51DEB19FCD14), UINT64_C(0xD907174914CB67D0), UINT64_C(0xEC90714B29EBDA7C), UINT64_C(0x4ACADAA6634C0F2E)}}, {{UINT64_C(0xA516B9B8EC715EC9), UINT64_C(0xC7DCA26342B8A87B), UINT64_C(0x2CE450C9DA27B456), UINT64_C(0x3C97481200A8819F)}, {UINT64_C(0xF4822C23ECDED574), UINT64_C(0xFA737FAD19FA48D4), UINT64_C(0xE34B2F2A45D718E0), UINT64_C(0x1D6F19FEBEA7B540)}}, {{UINT64_C(0xADC8FCE798E24789), UINT64_C(0xFE2F890C45869609), UINT64_C(0x6466E03C78A35C19), UINT64_C(0x24C70FEDC1F34AA9)}, {UINT64_C(0x89530F7557747DD1), UINT64_C(0x343DE05B2B8CDE2D), UINT64_C(0xC33134E335CC8D5A), UINT64_C(0x3CCEFC38AC9B4F2B)}}, {{UINT64_C(0x84C904B8EF923364), UINT64_C(0x46E1FECFBDDD31D8), UINT64_C(0xA8126DD6FAE79B6B), UINT64_C(0x4A53C034FBF05C9A)}, {UINT64_C(0x44CA3ACBBE8F255F), UINT64_C(0x6F0FD374EC319885), UINT64_C(0xADBCB4AAF1836DC2), UINT64_C(0x6CC3A59665187EE9)}}, {{UINT64_C(0x941E7821B397B5E7), UINT64_C(0xD3457371FEE2A9D5), UINT64_C(0x9F69BE4466382F60), UINT64_C(0x6DCEAD04A1F49E9B)}, {UINT64_C(0xDC6BC23B3BF21647), UINT64_C(0x1500FD7FB5271BE9), UINT64_C(0x9B0994DDF23FDF3D), UINT64_C(0x38A2ECEB45065CF7)}}, {{UINT64_C(0x2667CEFE0DCA8BF4), UINT64_C(0x8227ACB3E46EB469), UINT64_C(0x4C20677DA75C5B8B), UINT64_C(0x224FC5B4B36ACDFE)}, {UINT64_C(0xA0007E147A6A01D3), UINT64_C(0x15C79558F8A64EED), UINT64_C(0xFB58A76A93DEDC09), UINT64_C(0x2057DDDC26F10A98)}}, {{UINT64_C(0x1FF658AEBDB27AE4), UINT64_C(0x7F30DF57DDD96647), UINT64_C(0x63490B8DC7294313), UINT64_C(0x0EAEC5735435869E)}, {UINT64_C(0x85F05C49DF115B78), UINT64_C(0x95739C0C62992F5D), UINT64_C(0x72F143192B573963), UINT64_C(0x05600E6486328FF4)}}, {{UINT64_C(0x9BE7331FEAB0F425), UINT64_C(0x2E4CF5AA74447C20), UINT64_C(0x9B26F51266243D2A), UINT64_C(0x77C9672284AB5627)}, {UINT64_C(0xEC545427601673B4), UINT64_C(0xEF6A34FB2F127AF7), UINT64_C(0x519559C1E2DFD269), UINT64_C(0x34D7D7548258E37A)}}, {{UINT64_C(0xC113747B5E8B5281), UINT64_C(0x0C085456E04D779B), UINT64_C(0x3E3260521CCBCFC6), UINT64_C(0x5C954CC12A37D19F)}, {UINT64_C(0xB1A4A5B39124435B), UINT64_C(0x5E8B8D4118ED98E7), UINT64_C(0xC973D969144A3793), UINT64_C(0x0CB98CC888DD8B49)}}, {{UINT64_C(0x0E0233B2B48D04DF), UINT64_C(0x1B3916E07BEAA4A5), UINT64_C(0xA24A4BE4B672BE8C), UINT64_C(0x7A61506D845AB94D)}, {UINT64_C(0x160DFA0FE7F4CA3B), UINT64_C(0xA9562C89D84C1148), UINT64_C(0x52979B9592A276EB), UINT64_C(0x17869B53924E86E9)}}, }, { {{UINT64_C(0x5D39F4781A86D0D8), UINT64_C(0xDE5932DAFB8BC8A9), UINT64_C(0xD706C6D72F5B4B70), UINT64_C(0x53F450FC8A36AFC2)}, {UINT64_C(0xE1DC35401E550B3B), UINT64_C(0x475507DC8B7EB6D2), UINT64_C(0xF803F78ADFA2E5F7), UINT64_C(0x40B5F263C48097FF)}}, {{UINT64_C(0x336FB00E226CDB1F), UINT64_C(0xDDC1BB0288215C40), UINT64_C(0x6C4DD40E73C07FD0), UINT64_C(0x4D0D2E498F7D15E7)}, {UINT64_C(0xAF96E9B3D2061402), UINT64_C(0x15A3084A1372FCF8), UINT64_C(0x91B571E6307B02D6), UINT64_C(0x2239592F53AE7705)}}, {{UINT64_C(0x7D8615A1C20B6645), UINT64_C(0xF4875767C7C4465B), UINT64_C(0xF6D3E718861702AB), UINT64_C(0x7F014A53131F726A)}, {UINT64_C(0x30809F8FDAAB77CA), UINT64_C(0x7CE8DC6128F944D3), UINT64_C(0xF915111D9AEEF6A1), UINT64_C(0x246D7CC8206902FD)}}, {{UINT64_C(0x7677488BEF806225), UINT64_C(0x994C8104F4C75EAE), UINT64_C(0x17586D4E4E0C8988), UINT64_C(0x70E5258090E33A2A)}, {UINT64_C(0xB993F26A022D2FED), UINT64_C(0x955C130D689FBFBD), UINT64_C(0x0D3D1C63A3612E8E), UINT64_C(0x423D73E1B91A8DE6)}}, {{UINT64_C(0x7274BE083027164F), UINT64_C(0xDE907B4942FDB769), UINT64_C(0x61D74449B697060D), UINT64_C(0x18A5FDC226602CC9)}, {UINT64_C(0xB08DC02B049CAF4A), UINT64_C(0xC84AF48578DBA1F1), UINT64_C(0x0A5B35197178E4DF), UINT64_C(0x6EC7A7A55B26D0FE)}}, {{UINT64_C(0xDEF1782F88554F05), UINT64_C(0xB73E7333D8D6DF47), UINT64_C(0x1DDF902290E9C67A), UINT64_C(0x5D217B51D56181AC)}, {UINT64_C(0x7A338C7BE27F90EE), UINT64_C(0xB97CCD2A0D84A177), UINT64_C(0x3E1016017C5E3FA9), UINT64_C(0x2706E77C30FF0918)}}, {{UINT64_C(0x1BD1274F72A7CB9F), UINT64_C(0x8B60357A0622DB90), UINT64_C(0x0140E14A2151BB23), UINT64_C(0x358D7DDAE9A30C4C)}, {UINT64_C(0x3B15306089BFB2C6), UINT64_C(0x47462C79B6757C69), UINT64_C(0x2B22239DB43EF986), UINT64_C(0x6793671F0B774DE3)}}, {{UINT64_C(0x99EDB02EF6F8EDC6), UINT64_C(0x24432760C4257DD9), UINT64_C(0x4FDD73010336EED2), UINT64_C(0x44879709F6C6506B)}, {UINT64_C(0x107C7DE213F18D89), UINT64_C(0x71C71DFBA5701FBD), UINT64_C(0x97017E24C7DE3E0B), UINT64_C(0x0F8D7E09FC9EDDC2)}}, {{UINT64_C(0x7A0BB3B13897E01D), UINT64_C(0x7FD4F504C5892BDE), UINT64_C(0x2EA9AA77AB752928), UINT64_C(0x19A82F559078B466)}, {UINT64_C(0xEF2842C555A0F0D9), UINT64_C(0x5501EEE915B6F2B4), UINT64_C(0x9665EA6F942AA4B4), UINT64_C(0x015F41F40E707C32)}}, {{UINT64_C(0x1B4D6A919C6B6FD6), UINT64_C(0xCFD2CEE968217AFC), UINT64_C(0xC5076256BBC9284D), UINT64_C(0x4C7F4EEFAC36547B)}, {UINT64_C(0xAB1AAD2C65EE1907), UINT64_C(0xBCFE8C77BAC25425), UINT64_C(0x38BA0F85C9048A35), UINT64_C(0x300E6AC460A035F6)}}, {{UINT64_C(0xA8EDBC5E34707CC6), UINT64_C(0x3DA6BC5156ADFC16), UINT64_C(0x5C7CB5E1CA8B6F3F), UINT64_C(0x76E4A0282D612DFA)}, {UINT64_C(0x75AB66FD64F49D39), UINT64_C(0x5AF9879DC387A739), UINT64_C(0x839648083E9EDBCF), UINT64_C(0x555D8BBD7F4C4FFE)}}, {{UINT64_C(0xAAE8A2FE3C5590B0), UINT64_C(0x461C6CCC8AB34213), UINT64_C(0xB2F3E8229E719B77), UINT64_C(0x25B8FCA8663188BB)}, {UINT64_C(0xAA7A047B72548131), UINT64_C(0x0878FFEE189FA6F0), UINT64_C(0x9E7FB402CE3E17C3), UINT64_C(0x6F260D9344418277)}}, {{UINT64_C(0x0EF1C290B703B647), UINT64_C(0x995009FA651673E4), UINT64_C(0x661F76D7BE46362D), UINT64_C(0x74B00FD123E56E7A)}, {UINT64_C(0x9557D0ABA1A50E4B), UINT64_C(0xC5A1CF95587688CE), UINT64_C(0x2A14D1B27AE08ECA), UINT64_C(0x2DA8816C3C23D507)}}, {{UINT64_C(0x51CB405FB9934883), UINT64_C(0xC99A67D401A6864B), UINT64_C(0xCCF622336CDFFFC3), UINT64_C(0x2938F9F998FE0B79)}, {UINT64_C(0x7766691139A5AA28), UINT64_C(0xDF56CBB52427BFC0), UINT64_C(0xA39BE968189EB66D), UINT64_C(0x71E6E105A64FD2AB)}}, {{UINT64_C(0xA0C6F79560F9D20B), UINT64_C(0xE06DC8BB765670CC), UINT64_C(0x9FA1DD58A67275E0), UINT64_C(0x0F7F670DE2D23BBB)}, {UINT64_C(0xF8F07CF333FB15EA), UINT64_C(0x1D09B592723A0271), UINT64_C(0xF14029234E6FCAAB), UINT64_C(0x05BE1273AE301940)}}, {{UINT64_C(0x2D83906C114AFD1E), UINT64_C(0x091474FDC88E5761), UINT64_C(0xAFF18EEBEF9E4F9B), UINT64_C(0x136ECAE5F4E646ED)}, {UINT64_C(0xEF4526D0EB01808F), UINT64_C(0x3923EBBA940C0AEC), UINT64_C(0xAB34160CA437F460), UINT64_C(0x7A46966E421AD57C)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj_any.op3 * https://eprint.iacr.org/2015/1060 Alg 3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *a = const_a; const limb_t *b3 = const_b3; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_TestParamSet_square(t0, X); fiat_id_GostR3410_2001_TestParamSet_square(t1, Y); fiat_id_GostR3410_2001_TestParamSet_square(t2, Z); fiat_id_GostR3410_2001_TestParamSet_mul(t3, X, Y); fiat_id_GostR3410_2001_TestParamSet_add(t3, t3, t3); fiat_id_GostR3410_2001_TestParamSet_mul(t4, Y, Z); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, X, Z); fiat_id_GostR3410_2001_TestParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_TestParamSet_mul(X3, a, Z3); fiat_id_GostR3410_2001_TestParamSet_mul(Y3, b3, t2); fiat_id_GostR3410_2001_TestParamSet_add(Y3, X3, Y3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, t1, Y3); fiat_id_GostR3410_2001_TestParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_TestParamSet_mul(Y3, X3, Y3); fiat_id_GostR3410_2001_TestParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, b3, Z3); fiat_id_GostR3410_2001_TestParamSet_mul(t2, a, t2); fiat_id_GostR3410_2001_TestParamSet_sub(t3, t0, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t3, a, t3); fiat_id_GostR3410_2001_TestParamSet_add(t3, t3, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, t0, t0); fiat_id_GostR3410_2001_TestParamSet_add(t0, Z3, t0); fiat_id_GostR3410_2001_TestParamSet_add(t0, t0, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t0, t3); fiat_id_GostR3410_2001_TestParamSet_add(Y3, Y3, t0); fiat_id_GostR3410_2001_TestParamSet_add(t2, t4, t4); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t2, t3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, X3, t0); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, t2, t1); fiat_id_GostR3410_2001_TestParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, Z3, Z3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed_any.op3 * https://eprint.iacr.org/2015/1060 Alg 2 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *a = const_a; const limb_t *b3 = const_b3; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_GostR3410_2001_TestParamSet_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_GostR3410_2001_TestParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_TestParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_TestParamSet_add(t3, X2, Y2); fiat_id_GostR3410_2001_TestParamSet_add(t4, X1, Y1); fiat_id_GostR3410_2001_TestParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_TestParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_TestParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_TestParamSet_mul(t4, X2, Z1); fiat_id_GostR3410_2001_TestParamSet_add(t4, t4, X1); fiat_id_GostR3410_2001_TestParamSet_mul(t5, Y2, Z1); fiat_id_GostR3410_2001_TestParamSet_add(t5, t5, Y1); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, a, t4); fiat_id_GostR3410_2001_TestParamSet_mul(X3, b3, Z1); fiat_id_GostR3410_2001_TestParamSet_add(Z3, X3, Z3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, t1, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, t1, Z3); fiat_id_GostR3410_2001_TestParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_TestParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_TestParamSet_add(t1, t1, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t2, a, Z1); fiat_id_GostR3410_2001_TestParamSet_mul(t4, b3, t4); fiat_id_GostR3410_2001_TestParamSet_add(t1, t1, t2); fiat_id_GostR3410_2001_TestParamSet_sub(t2, t0, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t2, a, t2); fiat_id_GostR3410_2001_TestParamSet_add(t4, t4, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t1, t4); fiat_id_GostR3410_2001_TestParamSet_add(Y3, Y3, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t5, t4); fiat_id_GostR3410_2001_TestParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, X3, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t3, t1); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, t5, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, Z3, t0); /* if P is inf, throw all that away and take Q */ fiat_id_GostR3410_2001_TestParamSet_selectznz(R->X, nz, Q->X, X3); fiat_id_GostR3410_2001_TestParamSet_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_GostR3410_2001_TestParamSet_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj_any.op3 * https://eprint.iacr.org/2015/1060 Alg 1 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *a = const_a; const limb_t *b3 = const_b3; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_TestParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_TestParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_TestParamSet_mul(t2, Z1, Z2); fiat_id_GostR3410_2001_TestParamSet_add(t3, X1, Y1); fiat_id_GostR3410_2001_TestParamSet_add(t4, X2, Y2); fiat_id_GostR3410_2001_TestParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_TestParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_TestParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_TestParamSet_add(t4, X1, Z1); fiat_id_GostR3410_2001_TestParamSet_add(t5, X2, Z2); fiat_id_GostR3410_2001_TestParamSet_mul(t4, t4, t5); fiat_id_GostR3410_2001_TestParamSet_add(t5, t0, t2); fiat_id_GostR3410_2001_TestParamSet_sub(t4, t4, t5); fiat_id_GostR3410_2001_TestParamSet_add(t5, Y1, Z1); fiat_id_GostR3410_2001_TestParamSet_add(X3, Y2, Z2); fiat_id_GostR3410_2001_TestParamSet_mul(t5, t5, X3); fiat_id_GostR3410_2001_TestParamSet_add(X3, t1, t2); fiat_id_GostR3410_2001_TestParamSet_sub(t5, t5, X3); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, a, t4); fiat_id_GostR3410_2001_TestParamSet_mul(X3, b3, t2); fiat_id_GostR3410_2001_TestParamSet_add(Z3, X3, Z3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, t1, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, t1, Z3); fiat_id_GostR3410_2001_TestParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_TestParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_TestParamSet_add(t1, t1, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t2, a, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t4, b3, t4); fiat_id_GostR3410_2001_TestParamSet_add(t1, t1, t2); fiat_id_GostR3410_2001_TestParamSet_sub(t2, t0, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t2, a, t2); fiat_id_GostR3410_2001_TestParamSet_add(t4, t4, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t1, t4); fiat_id_GostR3410_2001_TestParamSet_add(Y3, Y3, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t5, t4); fiat_id_GostR3410_2001_TestParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, X3, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t3, t1); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, t5, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, Z3, t0); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[32], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 32) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[52], const unsigned char in[32]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 51; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[257], const unsigned char in[32]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 257; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[32], const unsigned char b[32], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[257] = {0}; int8_t bnaf[257] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 256; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_TestParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_TestParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_GostR3410_2001_TestParamSet_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_TestParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[51] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 50; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_TestParamSet_selectznz(lut.X, diff, lut.X, precomp[j].X); fiat_id_GostR3410_2001_TestParamSet_selectznz(lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_TestParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_GostR3410_2001_TestParamSet_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_TestParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[32]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 1; i >= 0; i--) { for (j = 0; i != 1 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 27; j++) { if (j * 2 + i > 51) continue; d = rnaf[j * 2 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_TestParamSet_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_GostR3410_2001_TestParamSet_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_TestParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_GostR3410_2001_TestParamSet_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_TestParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[32], unsigned char outy[32], const unsigned char a[32], const unsigned char b[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_TestParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_TestParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_TestParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_TestParamSet_to_montgomery(P.Y, P.Y); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_TestParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_TestParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_TestParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_TestParamSet_to_montgomery(P.Y, P.Y); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[32] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_GostR3410_2001_TestParamSet(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(n, b_n, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_GostR3410_2001_TestParamSet(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_GostR3410_2001_TestParamSet(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 32) != 32) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #else /* __SIZEOF_INT128__ */ #include #include #define LIMB_BITS 32 #define LIMB_CNT 8 /* Field elements */ typedef uint32_t fe_t[LIMB_CNT]; typedef uint32_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_GOSTR3410_2001_TESTPARAMSET_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: word_by_word_montgomery --static --use-value-barrier id_GostR3410_2001_TestParamSet 32 '2^255 + 1073' */ /* curve description: id_GostR3410_2001_TestParamSet */ /* machine_wordsize = 32 (from "32") */ /* requested operations: (all) */ /* m = 0x8000000000000000000000000000000000000000000000000000000000000431 (from "2^255 + 1073") */ /* */ /* NOTE: In addition to the bounds specified above each function, all */ /* functions synthesized for this Montgomery arithmetic require the */ /* input to be strictly less than the prime modulus (m), and also */ /* require the input to be in the unique saturated representation. */ /* All functions also ensure that these two properties are true of */ /* return values. */ /* */ /* Computed values: */ /* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ #include typedef unsigned char fiat_id_GostR3410_2001_TestParamSet_uint1; typedef signed char fiat_id_GostR3410_2001_TestParamSet_int1; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_GOSTR3410_2001_TESTPARAMSET_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint32_t fiat_id_GostR3410_2001_TestParamSet_value_barrier_u32(uint32_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_GostR3410_2001_TestParamSet_value_barrier_u32(x) (x) #endif /* * The function fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^32 * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( uint32_t *out1, fiat_id_GostR3410_2001_TestParamSet_uint1 *out2, fiat_id_GostR3410_2001_TestParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint64_t x1; uint32_t x2; fiat_id_GostR3410_2001_TestParamSet_uint1 x3; x1 = ((arg1 + (uint64_t)arg2) + arg3); x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); x3 = (fiat_id_GostR3410_2001_TestParamSet_uint1)(x1 >> 32); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^32 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32( uint32_t *out1, fiat_id_GostR3410_2001_TestParamSet_uint1 *out2, fiat_id_GostR3410_2001_TestParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { int64_t x1; fiat_id_GostR3410_2001_TestParamSet_int1 x2; uint32_t x3; x1 = ((arg2 - (int64_t)arg1) - arg3); x2 = (fiat_id_GostR3410_2001_TestParamSet_int1)(x1 >> 32); x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); *out1 = x3; *out2 = (fiat_id_GostR3410_2001_TestParamSet_uint1)(0x0 - x2); } /* * The function fiat_id_GostR3410_2001_TestParamSet_mulx_u32 is a multiplication, returning the full double-width result. * Postconditions: * out1 = (arg1 * arg2) mod 2^32 * out2 = ⌊arg1 * arg2 / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0xffffffff] * arg2: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0xffffffff] */ static void fiat_id_GostR3410_2001_TestParamSet_mulx_u32(uint32_t *out1, uint32_t *out2, uint32_t arg1, uint32_t arg2) { uint64_t x1; uint32_t x2; uint32_t x3; x1 = ((uint64_t)arg1 * arg2); x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); x3 = (uint32_t)(x1 >> 32); *out1 = x2; *out2 = x3; } /* * The function fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32( uint32_t *out1, fiat_id_GostR3410_2001_TestParamSet_uint1 arg1, uint32_t arg2, uint32_t arg3) { fiat_id_GostR3410_2001_TestParamSet_uint1 x1; uint32_t x2; uint32_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_GostR3410_2001_TestParamSet_int1)(0x0 - x1) & UINT32_C(0xffffffff)); x3 = ((fiat_id_GostR3410_2001_TestParamSet_value_barrier_u32(x2) & arg3) | (fiat_id_GostR3410_2001_TestParamSet_value_barrier_u32((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_GostR3410_2001_TestParamSet_mul multiplies two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_mul(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; fiat_id_GostR3410_2001_TestParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_TestParamSet_uint1 x28; uint32_t x29; fiat_id_GostR3410_2001_TestParamSet_uint1 x30; uint32_t x31; fiat_id_GostR3410_2001_TestParamSet_uint1 x32; uint32_t x33; fiat_id_GostR3410_2001_TestParamSet_uint1 x34; uint32_t x35; fiat_id_GostR3410_2001_TestParamSet_uint1 x36; uint32_t x37; fiat_id_GostR3410_2001_TestParamSet_uint1 x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; fiat_id_GostR3410_2001_TestParamSet_uint1 x47; uint32_t x48; fiat_id_GostR3410_2001_TestParamSet_uint1 x49; uint32_t x50; fiat_id_GostR3410_2001_TestParamSet_uint1 x51; uint32_t x52; fiat_id_GostR3410_2001_TestParamSet_uint1 x53; uint32_t x54; fiat_id_GostR3410_2001_TestParamSet_uint1 x55; uint32_t x56; fiat_id_GostR3410_2001_TestParamSet_uint1 x57; uint32_t x58; fiat_id_GostR3410_2001_TestParamSet_uint1 x59; uint32_t x60; fiat_id_GostR3410_2001_TestParamSet_uint1 x61; uint32_t x62; fiat_id_GostR3410_2001_TestParamSet_uint1 x63; uint32_t x64; uint32_t x65; uint32_t x66; uint32_t x67; uint32_t x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint32_t x78; uint32_t x79; uint32_t x80; fiat_id_GostR3410_2001_TestParamSet_uint1 x81; uint32_t x82; fiat_id_GostR3410_2001_TestParamSet_uint1 x83; uint32_t x84; fiat_id_GostR3410_2001_TestParamSet_uint1 x85; uint32_t x86; fiat_id_GostR3410_2001_TestParamSet_uint1 x87; uint32_t x88; fiat_id_GostR3410_2001_TestParamSet_uint1 x89; uint32_t x90; fiat_id_GostR3410_2001_TestParamSet_uint1 x91; uint32_t x92; fiat_id_GostR3410_2001_TestParamSet_uint1 x93; uint32_t x94; uint32_t x95; fiat_id_GostR3410_2001_TestParamSet_uint1 x96; uint32_t x97; fiat_id_GostR3410_2001_TestParamSet_uint1 x98; uint32_t x99; fiat_id_GostR3410_2001_TestParamSet_uint1 x100; uint32_t x101; fiat_id_GostR3410_2001_TestParamSet_uint1 x102; uint32_t x103; fiat_id_GostR3410_2001_TestParamSet_uint1 x104; uint32_t x105; fiat_id_GostR3410_2001_TestParamSet_uint1 x106; uint32_t x107; fiat_id_GostR3410_2001_TestParamSet_uint1 x108; uint32_t x109; fiat_id_GostR3410_2001_TestParamSet_uint1 x110; uint32_t x111; fiat_id_GostR3410_2001_TestParamSet_uint1 x112; uint32_t x113; uint32_t x114; uint32_t x115; uint32_t x116; uint32_t x117; uint32_t x118; uint32_t x119; fiat_id_GostR3410_2001_TestParamSet_uint1 x120; uint32_t x121; fiat_id_GostR3410_2001_TestParamSet_uint1 x122; uint32_t x123; fiat_id_GostR3410_2001_TestParamSet_uint1 x124; uint32_t x125; fiat_id_GostR3410_2001_TestParamSet_uint1 x126; uint32_t x127; fiat_id_GostR3410_2001_TestParamSet_uint1 x128; uint32_t x129; fiat_id_GostR3410_2001_TestParamSet_uint1 x130; uint32_t x131; fiat_id_GostR3410_2001_TestParamSet_uint1 x132; uint32_t x133; fiat_id_GostR3410_2001_TestParamSet_uint1 x134; uint32_t x135; fiat_id_GostR3410_2001_TestParamSet_uint1 x136; uint32_t x137; uint32_t x138; uint32_t x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; uint32_t x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; uint32_t x153; uint32_t x154; fiat_id_GostR3410_2001_TestParamSet_uint1 x155; uint32_t x156; fiat_id_GostR3410_2001_TestParamSet_uint1 x157; uint32_t x158; fiat_id_GostR3410_2001_TestParamSet_uint1 x159; uint32_t x160; fiat_id_GostR3410_2001_TestParamSet_uint1 x161; uint32_t x162; fiat_id_GostR3410_2001_TestParamSet_uint1 x163; uint32_t x164; fiat_id_GostR3410_2001_TestParamSet_uint1 x165; uint32_t x166; fiat_id_GostR3410_2001_TestParamSet_uint1 x167; uint32_t x168; uint32_t x169; fiat_id_GostR3410_2001_TestParamSet_uint1 x170; uint32_t x171; fiat_id_GostR3410_2001_TestParamSet_uint1 x172; uint32_t x173; fiat_id_GostR3410_2001_TestParamSet_uint1 x174; uint32_t x175; fiat_id_GostR3410_2001_TestParamSet_uint1 x176; uint32_t x177; fiat_id_GostR3410_2001_TestParamSet_uint1 x178; uint32_t x179; fiat_id_GostR3410_2001_TestParamSet_uint1 x180; uint32_t x181; fiat_id_GostR3410_2001_TestParamSet_uint1 x182; uint32_t x183; fiat_id_GostR3410_2001_TestParamSet_uint1 x184; uint32_t x185; fiat_id_GostR3410_2001_TestParamSet_uint1 x186; uint32_t x187; uint32_t x188; uint32_t x189; uint32_t x190; uint32_t x191; uint32_t x192; uint32_t x193; fiat_id_GostR3410_2001_TestParamSet_uint1 x194; uint32_t x195; fiat_id_GostR3410_2001_TestParamSet_uint1 x196; uint32_t x197; fiat_id_GostR3410_2001_TestParamSet_uint1 x198; uint32_t x199; fiat_id_GostR3410_2001_TestParamSet_uint1 x200; uint32_t x201; fiat_id_GostR3410_2001_TestParamSet_uint1 x202; uint32_t x203; fiat_id_GostR3410_2001_TestParamSet_uint1 x204; uint32_t x205; fiat_id_GostR3410_2001_TestParamSet_uint1 x206; uint32_t x207; fiat_id_GostR3410_2001_TestParamSet_uint1 x208; uint32_t x209; fiat_id_GostR3410_2001_TestParamSet_uint1 x210; uint32_t x211; uint32_t x212; uint32_t x213; uint32_t x214; uint32_t x215; uint32_t x216; uint32_t x217; uint32_t x218; uint32_t x219; uint32_t x220; uint32_t x221; uint32_t x222; uint32_t x223; uint32_t x224; uint32_t x225; uint32_t x226; uint32_t x227; uint32_t x228; fiat_id_GostR3410_2001_TestParamSet_uint1 x229; uint32_t x230; fiat_id_GostR3410_2001_TestParamSet_uint1 x231; uint32_t x232; fiat_id_GostR3410_2001_TestParamSet_uint1 x233; uint32_t x234; fiat_id_GostR3410_2001_TestParamSet_uint1 x235; uint32_t x236; fiat_id_GostR3410_2001_TestParamSet_uint1 x237; uint32_t x238; fiat_id_GostR3410_2001_TestParamSet_uint1 x239; uint32_t x240; fiat_id_GostR3410_2001_TestParamSet_uint1 x241; uint32_t x242; uint32_t x243; fiat_id_GostR3410_2001_TestParamSet_uint1 x244; uint32_t x245; fiat_id_GostR3410_2001_TestParamSet_uint1 x246; uint32_t x247; fiat_id_GostR3410_2001_TestParamSet_uint1 x248; uint32_t x249; fiat_id_GostR3410_2001_TestParamSet_uint1 x250; uint32_t x251; fiat_id_GostR3410_2001_TestParamSet_uint1 x252; uint32_t x253; fiat_id_GostR3410_2001_TestParamSet_uint1 x254; uint32_t x255; fiat_id_GostR3410_2001_TestParamSet_uint1 x256; uint32_t x257; fiat_id_GostR3410_2001_TestParamSet_uint1 x258; uint32_t x259; fiat_id_GostR3410_2001_TestParamSet_uint1 x260; uint32_t x261; uint32_t x262; uint32_t x263; uint32_t x264; uint32_t x265; uint32_t x266; uint32_t x267; fiat_id_GostR3410_2001_TestParamSet_uint1 x268; uint32_t x269; fiat_id_GostR3410_2001_TestParamSet_uint1 x270; uint32_t x271; fiat_id_GostR3410_2001_TestParamSet_uint1 x272; uint32_t x273; fiat_id_GostR3410_2001_TestParamSet_uint1 x274; uint32_t x275; fiat_id_GostR3410_2001_TestParamSet_uint1 x276; uint32_t x277; fiat_id_GostR3410_2001_TestParamSet_uint1 x278; uint32_t x279; fiat_id_GostR3410_2001_TestParamSet_uint1 x280; uint32_t x281; fiat_id_GostR3410_2001_TestParamSet_uint1 x282; uint32_t x283; fiat_id_GostR3410_2001_TestParamSet_uint1 x284; uint32_t x285; uint32_t x286; uint32_t x287; uint32_t x288; uint32_t x289; uint32_t x290; uint32_t x291; uint32_t x292; uint32_t x293; uint32_t x294; uint32_t x295; uint32_t x296; uint32_t x297; uint32_t x298; uint32_t x299; uint32_t x300; uint32_t x301; uint32_t x302; fiat_id_GostR3410_2001_TestParamSet_uint1 x303; uint32_t x304; fiat_id_GostR3410_2001_TestParamSet_uint1 x305; uint32_t x306; fiat_id_GostR3410_2001_TestParamSet_uint1 x307; uint32_t x308; fiat_id_GostR3410_2001_TestParamSet_uint1 x309; uint32_t x310; fiat_id_GostR3410_2001_TestParamSet_uint1 x311; uint32_t x312; fiat_id_GostR3410_2001_TestParamSet_uint1 x313; uint32_t x314; fiat_id_GostR3410_2001_TestParamSet_uint1 x315; uint32_t x316; uint32_t x317; fiat_id_GostR3410_2001_TestParamSet_uint1 x318; uint32_t x319; fiat_id_GostR3410_2001_TestParamSet_uint1 x320; uint32_t x321; fiat_id_GostR3410_2001_TestParamSet_uint1 x322; uint32_t x323; fiat_id_GostR3410_2001_TestParamSet_uint1 x324; uint32_t x325; fiat_id_GostR3410_2001_TestParamSet_uint1 x326; uint32_t x327; fiat_id_GostR3410_2001_TestParamSet_uint1 x328; uint32_t x329; fiat_id_GostR3410_2001_TestParamSet_uint1 x330; uint32_t x331; fiat_id_GostR3410_2001_TestParamSet_uint1 x332; uint32_t x333; fiat_id_GostR3410_2001_TestParamSet_uint1 x334; uint32_t x335; uint32_t x336; uint32_t x337; uint32_t x338; uint32_t x339; uint32_t x340; uint32_t x341; fiat_id_GostR3410_2001_TestParamSet_uint1 x342; uint32_t x343; fiat_id_GostR3410_2001_TestParamSet_uint1 x344; uint32_t x345; fiat_id_GostR3410_2001_TestParamSet_uint1 x346; uint32_t x347; fiat_id_GostR3410_2001_TestParamSet_uint1 x348; uint32_t x349; fiat_id_GostR3410_2001_TestParamSet_uint1 x350; uint32_t x351; fiat_id_GostR3410_2001_TestParamSet_uint1 x352; uint32_t x353; fiat_id_GostR3410_2001_TestParamSet_uint1 x354; uint32_t x355; fiat_id_GostR3410_2001_TestParamSet_uint1 x356; uint32_t x357; fiat_id_GostR3410_2001_TestParamSet_uint1 x358; uint32_t x359; uint32_t x360; uint32_t x361; uint32_t x362; uint32_t x363; uint32_t x364; uint32_t x365; uint32_t x366; uint32_t x367; uint32_t x368; uint32_t x369; uint32_t x370; uint32_t x371; uint32_t x372; uint32_t x373; uint32_t x374; uint32_t x375; uint32_t x376; fiat_id_GostR3410_2001_TestParamSet_uint1 x377; uint32_t x378; fiat_id_GostR3410_2001_TestParamSet_uint1 x379; uint32_t x380; fiat_id_GostR3410_2001_TestParamSet_uint1 x381; uint32_t x382; fiat_id_GostR3410_2001_TestParamSet_uint1 x383; uint32_t x384; fiat_id_GostR3410_2001_TestParamSet_uint1 x385; uint32_t x386; fiat_id_GostR3410_2001_TestParamSet_uint1 x387; uint32_t x388; fiat_id_GostR3410_2001_TestParamSet_uint1 x389; uint32_t x390; uint32_t x391; fiat_id_GostR3410_2001_TestParamSet_uint1 x392; uint32_t x393; fiat_id_GostR3410_2001_TestParamSet_uint1 x394; uint32_t x395; fiat_id_GostR3410_2001_TestParamSet_uint1 x396; uint32_t x397; fiat_id_GostR3410_2001_TestParamSet_uint1 x398; uint32_t x399; fiat_id_GostR3410_2001_TestParamSet_uint1 x400; uint32_t x401; fiat_id_GostR3410_2001_TestParamSet_uint1 x402; uint32_t x403; fiat_id_GostR3410_2001_TestParamSet_uint1 x404; uint32_t x405; fiat_id_GostR3410_2001_TestParamSet_uint1 x406; uint32_t x407; fiat_id_GostR3410_2001_TestParamSet_uint1 x408; uint32_t x409; uint32_t x410; uint32_t x411; uint32_t x412; uint32_t x413; uint32_t x414; uint32_t x415; fiat_id_GostR3410_2001_TestParamSet_uint1 x416; uint32_t x417; fiat_id_GostR3410_2001_TestParamSet_uint1 x418; uint32_t x419; fiat_id_GostR3410_2001_TestParamSet_uint1 x420; uint32_t x421; fiat_id_GostR3410_2001_TestParamSet_uint1 x422; uint32_t x423; fiat_id_GostR3410_2001_TestParamSet_uint1 x424; uint32_t x425; fiat_id_GostR3410_2001_TestParamSet_uint1 x426; uint32_t x427; fiat_id_GostR3410_2001_TestParamSet_uint1 x428; uint32_t x429; fiat_id_GostR3410_2001_TestParamSet_uint1 x430; uint32_t x431; fiat_id_GostR3410_2001_TestParamSet_uint1 x432; uint32_t x433; uint32_t x434; uint32_t x435; uint32_t x436; uint32_t x437; uint32_t x438; uint32_t x439; uint32_t x440; uint32_t x441; uint32_t x442; uint32_t x443; uint32_t x444; uint32_t x445; uint32_t x446; uint32_t x447; uint32_t x448; uint32_t x449; uint32_t x450; fiat_id_GostR3410_2001_TestParamSet_uint1 x451; uint32_t x452; fiat_id_GostR3410_2001_TestParamSet_uint1 x453; uint32_t x454; fiat_id_GostR3410_2001_TestParamSet_uint1 x455; uint32_t x456; fiat_id_GostR3410_2001_TestParamSet_uint1 x457; uint32_t x458; fiat_id_GostR3410_2001_TestParamSet_uint1 x459; uint32_t x460; fiat_id_GostR3410_2001_TestParamSet_uint1 x461; uint32_t x462; fiat_id_GostR3410_2001_TestParamSet_uint1 x463; uint32_t x464; uint32_t x465; fiat_id_GostR3410_2001_TestParamSet_uint1 x466; uint32_t x467; fiat_id_GostR3410_2001_TestParamSet_uint1 x468; uint32_t x469; fiat_id_GostR3410_2001_TestParamSet_uint1 x470; uint32_t x471; fiat_id_GostR3410_2001_TestParamSet_uint1 x472; uint32_t x473; fiat_id_GostR3410_2001_TestParamSet_uint1 x474; uint32_t x475; fiat_id_GostR3410_2001_TestParamSet_uint1 x476; uint32_t x477; fiat_id_GostR3410_2001_TestParamSet_uint1 x478; uint32_t x479; fiat_id_GostR3410_2001_TestParamSet_uint1 x480; uint32_t x481; fiat_id_GostR3410_2001_TestParamSet_uint1 x482; uint32_t x483; uint32_t x484; uint32_t x485; uint32_t x486; uint32_t x487; uint32_t x488; uint32_t x489; fiat_id_GostR3410_2001_TestParamSet_uint1 x490; uint32_t x491; fiat_id_GostR3410_2001_TestParamSet_uint1 x492; uint32_t x493; fiat_id_GostR3410_2001_TestParamSet_uint1 x494; uint32_t x495; fiat_id_GostR3410_2001_TestParamSet_uint1 x496; uint32_t x497; fiat_id_GostR3410_2001_TestParamSet_uint1 x498; uint32_t x499; fiat_id_GostR3410_2001_TestParamSet_uint1 x500; uint32_t x501; fiat_id_GostR3410_2001_TestParamSet_uint1 x502; uint32_t x503; fiat_id_GostR3410_2001_TestParamSet_uint1 x504; uint32_t x505; fiat_id_GostR3410_2001_TestParamSet_uint1 x506; uint32_t x507; uint32_t x508; uint32_t x509; uint32_t x510; uint32_t x511; uint32_t x512; uint32_t x513; uint32_t x514; uint32_t x515; uint32_t x516; uint32_t x517; uint32_t x518; uint32_t x519; uint32_t x520; uint32_t x521; uint32_t x522; uint32_t x523; uint32_t x524; fiat_id_GostR3410_2001_TestParamSet_uint1 x525; uint32_t x526; fiat_id_GostR3410_2001_TestParamSet_uint1 x527; uint32_t x528; fiat_id_GostR3410_2001_TestParamSet_uint1 x529; uint32_t x530; fiat_id_GostR3410_2001_TestParamSet_uint1 x531; uint32_t x532; fiat_id_GostR3410_2001_TestParamSet_uint1 x533; uint32_t x534; fiat_id_GostR3410_2001_TestParamSet_uint1 x535; uint32_t x536; fiat_id_GostR3410_2001_TestParamSet_uint1 x537; uint32_t x538; uint32_t x539; fiat_id_GostR3410_2001_TestParamSet_uint1 x540; uint32_t x541; fiat_id_GostR3410_2001_TestParamSet_uint1 x542; uint32_t x543; fiat_id_GostR3410_2001_TestParamSet_uint1 x544; uint32_t x545; fiat_id_GostR3410_2001_TestParamSet_uint1 x546; uint32_t x547; fiat_id_GostR3410_2001_TestParamSet_uint1 x548; uint32_t x549; fiat_id_GostR3410_2001_TestParamSet_uint1 x550; uint32_t x551; fiat_id_GostR3410_2001_TestParamSet_uint1 x552; uint32_t x553; fiat_id_GostR3410_2001_TestParamSet_uint1 x554; uint32_t x555; fiat_id_GostR3410_2001_TestParamSet_uint1 x556; uint32_t x557; uint32_t x558; uint32_t x559; uint32_t x560; uint32_t x561; uint32_t x562; uint32_t x563; fiat_id_GostR3410_2001_TestParamSet_uint1 x564; uint32_t x565; fiat_id_GostR3410_2001_TestParamSet_uint1 x566; uint32_t x567; fiat_id_GostR3410_2001_TestParamSet_uint1 x568; uint32_t x569; fiat_id_GostR3410_2001_TestParamSet_uint1 x570; uint32_t x571; fiat_id_GostR3410_2001_TestParamSet_uint1 x572; uint32_t x573; fiat_id_GostR3410_2001_TestParamSet_uint1 x574; uint32_t x575; fiat_id_GostR3410_2001_TestParamSet_uint1 x576; uint32_t x577; fiat_id_GostR3410_2001_TestParamSet_uint1 x578; uint32_t x579; fiat_id_GostR3410_2001_TestParamSet_uint1 x580; uint32_t x581; uint32_t x582; fiat_id_GostR3410_2001_TestParamSet_uint1 x583; uint32_t x584; fiat_id_GostR3410_2001_TestParamSet_uint1 x585; uint32_t x586; fiat_id_GostR3410_2001_TestParamSet_uint1 x587; uint32_t x588; fiat_id_GostR3410_2001_TestParamSet_uint1 x589; uint32_t x590; fiat_id_GostR3410_2001_TestParamSet_uint1 x591; uint32_t x592; fiat_id_GostR3410_2001_TestParamSet_uint1 x593; uint32_t x594; fiat_id_GostR3410_2001_TestParamSet_uint1 x595; uint32_t x596; fiat_id_GostR3410_2001_TestParamSet_uint1 x597; uint32_t x598; fiat_id_GostR3410_2001_TestParamSet_uint1 x599; uint32_t x600; uint32_t x601; uint32_t x602; uint32_t x603; uint32_t x604; uint32_t x605; uint32_t x606; uint32_t x607; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[0]); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x9, &x10, x8, (arg2[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x11, &x12, x8, (arg2[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x13, &x14, x8, (arg2[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x15, &x16, x8, (arg2[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x17, &x18, x8, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x19, &x20, x8, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x21, &x22, x8, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x23, &x24, x8, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x25, &x26, 0x0, x24, x21); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x27, &x28, x26, x22, x19); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x29, &x30, x28, x20, x17); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x31, &x32, x30, x18, x15); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x33, &x34, x32, x16, x13); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x35, &x36, x34, x14, x11); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x37, &x38, x36, x12, x9); x39 = (x38 + x10); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x40, &x41, x23, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x42, &x43, x40, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x44, &x45, x40, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x46, &x47, 0x0, x23, x44); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x48, &x49, x47, x25, x45); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x50, &x51, x49, x27, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x52, &x53, x51, x29, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x54, &x55, x53, x31, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x56, &x57, x55, x33, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x58, &x59, x57, x35, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x60, &x61, x59, x37, x42); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x62, &x63, x61, x39, x43); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x64, &x65, x1, (arg2[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x66, &x67, x1, (arg2[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x68, &x69, x1, (arg2[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x70, &x71, x1, (arg2[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x72, &x73, x1, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x74, &x75, x1, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x76, &x77, x1, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x78, &x79, x1, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x80, &x81, 0x0, x79, x76); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x82, &x83, x81, x77, x74); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x84, &x85, x83, x75, x72); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x86, &x87, x85, x73, x70); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x88, &x89, x87, x71, x68); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x90, &x91, x89, x69, x66); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x92, &x93, x91, x67, x64); x94 = (x93 + x65); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x95, &x96, 0x0, x48, x78); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x97, &x98, x96, x50, x80); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x99, &x100, x98, x52, x82); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x101, &x102, x100, x54, x84); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x103, &x104, x102, x56, x86); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x105, &x106, x104, x58, x88); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x107, &x108, x106, x60, x90); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x109, &x110, x108, x62, x92); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x111, &x112, x110, x63, x94); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x113, &x114, x95, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x115, &x116, x113, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x117, &x118, x113, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x119, &x120, 0x0, x95, x117); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x121, &x122, x120, x97, x118); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x123, &x124, x122, x99, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x125, &x126, x124, x101, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x127, &x128, x126, x103, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x129, &x130, x128, x105, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x131, &x132, x130, x107, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x133, &x134, x132, x109, x115); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x135, &x136, x134, x111, x116); x137 = ((uint32_t)x136 + x112); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x138, &x139, x2, (arg2[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x140, &x141, x2, (arg2[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x142, &x143, x2, (arg2[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x144, &x145, x2, (arg2[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x146, &x147, x2, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x148, &x149, x2, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x150, &x151, x2, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x152, &x153, x2, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x154, &x155, 0x0, x153, x150); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x156, &x157, x155, x151, x148); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x158, &x159, x157, x149, x146); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x160, &x161, x159, x147, x144); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x162, &x163, x161, x145, x142); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x164, &x165, x163, x143, x140); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x166, &x167, x165, x141, x138); x168 = (x167 + x139); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x169, &x170, 0x0, x121, x152); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x171, &x172, x170, x123, x154); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x173, &x174, x172, x125, x156); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x175, &x176, x174, x127, x158); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x177, &x178, x176, x129, x160); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x179, &x180, x178, x131, x162); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x181, &x182, x180, x133, x164); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x183, &x184, x182, x135, x166); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x185, &x186, x184, x137, x168); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x187, &x188, x169, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x189, &x190, x187, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x191, &x192, x187, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x193, &x194, 0x0, x169, x191); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x195, &x196, x194, x171, x192); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x197, &x198, x196, x173, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x199, &x200, x198, x175, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x201, &x202, x200, x177, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x203, &x204, x202, x179, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x205, &x206, x204, x181, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x207, &x208, x206, x183, x189); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x209, &x210, x208, x185, x190); x211 = ((uint32_t)x210 + x186); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x212, &x213, x3, (arg2[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x214, &x215, x3, (arg2[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x216, &x217, x3, (arg2[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x218, &x219, x3, (arg2[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x220, &x221, x3, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x222, &x223, x3, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x224, &x225, x3, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x226, &x227, x3, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x228, &x229, 0x0, x227, x224); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x230, &x231, x229, x225, x222); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x232, &x233, x231, x223, x220); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x234, &x235, x233, x221, x218); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x236, &x237, x235, x219, x216); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x238, &x239, x237, x217, x214); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x240, &x241, x239, x215, x212); x242 = (x241 + x213); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x243, &x244, 0x0, x195, x226); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x245, &x246, x244, x197, x228); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x247, &x248, x246, x199, x230); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x249, &x250, x248, x201, x232); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x251, &x252, x250, x203, x234); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x253, &x254, x252, x205, x236); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x255, &x256, x254, x207, x238); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x257, &x258, x256, x209, x240); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x259, &x260, x258, x211, x242); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x261, &x262, x243, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x263, &x264, x261, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x265, &x266, x261, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x267, &x268, 0x0, x243, x265); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x269, &x270, x268, x245, x266); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x271, &x272, x270, x247, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x273, &x274, x272, x249, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x275, &x276, x274, x251, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x277, &x278, x276, x253, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x279, &x280, x278, x255, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x281, &x282, x280, x257, x263); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x283, &x284, x282, x259, x264); x285 = ((uint32_t)x284 + x260); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x286, &x287, x4, (arg2[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x288, &x289, x4, (arg2[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x290, &x291, x4, (arg2[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x292, &x293, x4, (arg2[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x294, &x295, x4, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x296, &x297, x4, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x298, &x299, x4, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x300, &x301, x4, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x302, &x303, 0x0, x301, x298); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x304, &x305, x303, x299, x296); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x306, &x307, x305, x297, x294); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x308, &x309, x307, x295, x292); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x310, &x311, x309, x293, x290); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x312, &x313, x311, x291, x288); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x314, &x315, x313, x289, x286); x316 = (x315 + x287); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x317, &x318, 0x0, x269, x300); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x319, &x320, x318, x271, x302); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x321, &x322, x320, x273, x304); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x323, &x324, x322, x275, x306); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x325, &x326, x324, x277, x308); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x327, &x328, x326, x279, x310); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x329, &x330, x328, x281, x312); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x331, &x332, x330, x283, x314); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x333, &x334, x332, x285, x316); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x335, &x336, x317, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x337, &x338, x335, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x339, &x340, x335, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x341, &x342, 0x0, x317, x339); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x343, &x344, x342, x319, x340); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x345, &x346, x344, x321, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x347, &x348, x346, x323, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x349, &x350, x348, x325, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x351, &x352, x350, x327, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x353, &x354, x352, x329, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x355, &x356, x354, x331, x337); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x357, &x358, x356, x333, x338); x359 = ((uint32_t)x358 + x334); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x360, &x361, x5, (arg2[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x362, &x363, x5, (arg2[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x364, &x365, x5, (arg2[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x366, &x367, x5, (arg2[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x368, &x369, x5, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x370, &x371, x5, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x372, &x373, x5, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x374, &x375, x5, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x376, &x377, 0x0, x375, x372); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x378, &x379, x377, x373, x370); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x380, &x381, x379, x371, x368); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x382, &x383, x381, x369, x366); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x384, &x385, x383, x367, x364); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x386, &x387, x385, x365, x362); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x388, &x389, x387, x363, x360); x390 = (x389 + x361); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x391, &x392, 0x0, x343, x374); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x393, &x394, x392, x345, x376); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x395, &x396, x394, x347, x378); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x397, &x398, x396, x349, x380); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x399, &x400, x398, x351, x382); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x401, &x402, x400, x353, x384); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x403, &x404, x402, x355, x386); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x405, &x406, x404, x357, x388); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x407, &x408, x406, x359, x390); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x409, &x410, x391, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x411, &x412, x409, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x413, &x414, x409, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x415, &x416, 0x0, x391, x413); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x417, &x418, x416, x393, x414); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x419, &x420, x418, x395, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x421, &x422, x420, x397, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x423, &x424, x422, x399, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x425, &x426, x424, x401, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x427, &x428, x426, x403, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x429, &x430, x428, x405, x411); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x431, &x432, x430, x407, x412); x433 = ((uint32_t)x432 + x408); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x434, &x435, x6, (arg2[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x436, &x437, x6, (arg2[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x438, &x439, x6, (arg2[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x440, &x441, x6, (arg2[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x442, &x443, x6, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x444, &x445, x6, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x446, &x447, x6, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x448, &x449, x6, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x450, &x451, 0x0, x449, x446); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x452, &x453, x451, x447, x444); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x454, &x455, x453, x445, x442); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x456, &x457, x455, x443, x440); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x458, &x459, x457, x441, x438); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x460, &x461, x459, x439, x436); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x462, &x463, x461, x437, x434); x464 = (x463 + x435); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x465, &x466, 0x0, x417, x448); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x467, &x468, x466, x419, x450); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x469, &x470, x468, x421, x452); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x471, &x472, x470, x423, x454); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x473, &x474, x472, x425, x456); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x475, &x476, x474, x427, x458); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x477, &x478, x476, x429, x460); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x479, &x480, x478, x431, x462); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x481, &x482, x480, x433, x464); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x483, &x484, x465, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x485, &x486, x483, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x487, &x488, x483, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x489, &x490, 0x0, x465, x487); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x491, &x492, x490, x467, x488); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x493, &x494, x492, x469, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x495, &x496, x494, x471, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x497, &x498, x496, x473, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x499, &x500, x498, x475, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x501, &x502, x500, x477, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x503, &x504, x502, x479, x485); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x505, &x506, x504, x481, x486); x507 = ((uint32_t)x506 + x482); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x508, &x509, x7, (arg2[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x510, &x511, x7, (arg2[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x512, &x513, x7, (arg2[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x514, &x515, x7, (arg2[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x516, &x517, x7, (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x518, &x519, x7, (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x520, &x521, x7, (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x522, &x523, x7, (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x524, &x525, 0x0, x523, x520); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x526, &x527, x525, x521, x518); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x528, &x529, x527, x519, x516); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x530, &x531, x529, x517, x514); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x532, &x533, x531, x515, x512); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x534, &x535, x533, x513, x510); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x536, &x537, x535, x511, x508); x538 = (x537 + x509); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x539, &x540, 0x0, x491, x522); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x541, &x542, x540, x493, x524); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x543, &x544, x542, x495, x526); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x545, &x546, x544, x497, x528); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x547, &x548, x546, x499, x530); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x549, &x550, x548, x501, x532); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x551, &x552, x550, x503, x534); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x553, &x554, x552, x505, x536); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x555, &x556, x554, x507, x538); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x557, &x558, x539, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x559, &x560, x557, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x561, &x562, x557, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x563, &x564, 0x0, x539, x561); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x565, &x566, x564, x541, x562); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x567, &x568, x566, x543, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x569, &x570, x568, x545, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x571, &x572, x570, x547, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x573, &x574, x572, x549, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x575, &x576, x574, x551, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x577, &x578, x576, x553, x559); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x579, &x580, x578, x555, x560); x581 = ((uint32_t)x580 + x556); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x582, &x583, 0x0, x565, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x584, &x585, x583, x567, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x586, &x587, x585, x569, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x588, &x589, x587, x571, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x590, &x591, x589, x573, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x592, &x593, x591, x575, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x594, &x595, x593, x577, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x596, &x597, x595, x579, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x598, &x599, x597, x581, 0x0); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x600, x599, x582, x565); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x601, x599, x584, x567); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x602, x599, x586, x569); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x603, x599, x588, x571); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x604, x599, x590, x573); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x605, x599, x592, x575); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x606, x599, x594, x577); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x607, x599, x596, x579); out1[0] = x600; out1[1] = x601; out1[2] = x602; out1[3] = x603; out1[4] = x604; out1[5] = x605; out1[6] = x606; out1[7] = x607; } /* * The function fiat_id_GostR3410_2001_TestParamSet_square squares a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_square(uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; fiat_id_GostR3410_2001_TestParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_TestParamSet_uint1 x28; uint32_t x29; fiat_id_GostR3410_2001_TestParamSet_uint1 x30; uint32_t x31; fiat_id_GostR3410_2001_TestParamSet_uint1 x32; uint32_t x33; fiat_id_GostR3410_2001_TestParamSet_uint1 x34; uint32_t x35; fiat_id_GostR3410_2001_TestParamSet_uint1 x36; uint32_t x37; fiat_id_GostR3410_2001_TestParamSet_uint1 x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; fiat_id_GostR3410_2001_TestParamSet_uint1 x47; uint32_t x48; fiat_id_GostR3410_2001_TestParamSet_uint1 x49; uint32_t x50; fiat_id_GostR3410_2001_TestParamSet_uint1 x51; uint32_t x52; fiat_id_GostR3410_2001_TestParamSet_uint1 x53; uint32_t x54; fiat_id_GostR3410_2001_TestParamSet_uint1 x55; uint32_t x56; fiat_id_GostR3410_2001_TestParamSet_uint1 x57; uint32_t x58; fiat_id_GostR3410_2001_TestParamSet_uint1 x59; uint32_t x60; fiat_id_GostR3410_2001_TestParamSet_uint1 x61; uint32_t x62; fiat_id_GostR3410_2001_TestParamSet_uint1 x63; uint32_t x64; uint32_t x65; uint32_t x66; uint32_t x67; uint32_t x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint32_t x78; uint32_t x79; uint32_t x80; fiat_id_GostR3410_2001_TestParamSet_uint1 x81; uint32_t x82; fiat_id_GostR3410_2001_TestParamSet_uint1 x83; uint32_t x84; fiat_id_GostR3410_2001_TestParamSet_uint1 x85; uint32_t x86; fiat_id_GostR3410_2001_TestParamSet_uint1 x87; uint32_t x88; fiat_id_GostR3410_2001_TestParamSet_uint1 x89; uint32_t x90; fiat_id_GostR3410_2001_TestParamSet_uint1 x91; uint32_t x92; fiat_id_GostR3410_2001_TestParamSet_uint1 x93; uint32_t x94; uint32_t x95; fiat_id_GostR3410_2001_TestParamSet_uint1 x96; uint32_t x97; fiat_id_GostR3410_2001_TestParamSet_uint1 x98; uint32_t x99; fiat_id_GostR3410_2001_TestParamSet_uint1 x100; uint32_t x101; fiat_id_GostR3410_2001_TestParamSet_uint1 x102; uint32_t x103; fiat_id_GostR3410_2001_TestParamSet_uint1 x104; uint32_t x105; fiat_id_GostR3410_2001_TestParamSet_uint1 x106; uint32_t x107; fiat_id_GostR3410_2001_TestParamSet_uint1 x108; uint32_t x109; fiat_id_GostR3410_2001_TestParamSet_uint1 x110; uint32_t x111; fiat_id_GostR3410_2001_TestParamSet_uint1 x112; uint32_t x113; uint32_t x114; uint32_t x115; uint32_t x116; uint32_t x117; uint32_t x118; uint32_t x119; fiat_id_GostR3410_2001_TestParamSet_uint1 x120; uint32_t x121; fiat_id_GostR3410_2001_TestParamSet_uint1 x122; uint32_t x123; fiat_id_GostR3410_2001_TestParamSet_uint1 x124; uint32_t x125; fiat_id_GostR3410_2001_TestParamSet_uint1 x126; uint32_t x127; fiat_id_GostR3410_2001_TestParamSet_uint1 x128; uint32_t x129; fiat_id_GostR3410_2001_TestParamSet_uint1 x130; uint32_t x131; fiat_id_GostR3410_2001_TestParamSet_uint1 x132; uint32_t x133; fiat_id_GostR3410_2001_TestParamSet_uint1 x134; uint32_t x135; fiat_id_GostR3410_2001_TestParamSet_uint1 x136; uint32_t x137; uint32_t x138; uint32_t x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; uint32_t x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; uint32_t x153; uint32_t x154; fiat_id_GostR3410_2001_TestParamSet_uint1 x155; uint32_t x156; fiat_id_GostR3410_2001_TestParamSet_uint1 x157; uint32_t x158; fiat_id_GostR3410_2001_TestParamSet_uint1 x159; uint32_t x160; fiat_id_GostR3410_2001_TestParamSet_uint1 x161; uint32_t x162; fiat_id_GostR3410_2001_TestParamSet_uint1 x163; uint32_t x164; fiat_id_GostR3410_2001_TestParamSet_uint1 x165; uint32_t x166; fiat_id_GostR3410_2001_TestParamSet_uint1 x167; uint32_t x168; uint32_t x169; fiat_id_GostR3410_2001_TestParamSet_uint1 x170; uint32_t x171; fiat_id_GostR3410_2001_TestParamSet_uint1 x172; uint32_t x173; fiat_id_GostR3410_2001_TestParamSet_uint1 x174; uint32_t x175; fiat_id_GostR3410_2001_TestParamSet_uint1 x176; uint32_t x177; fiat_id_GostR3410_2001_TestParamSet_uint1 x178; uint32_t x179; fiat_id_GostR3410_2001_TestParamSet_uint1 x180; uint32_t x181; fiat_id_GostR3410_2001_TestParamSet_uint1 x182; uint32_t x183; fiat_id_GostR3410_2001_TestParamSet_uint1 x184; uint32_t x185; fiat_id_GostR3410_2001_TestParamSet_uint1 x186; uint32_t x187; uint32_t x188; uint32_t x189; uint32_t x190; uint32_t x191; uint32_t x192; uint32_t x193; fiat_id_GostR3410_2001_TestParamSet_uint1 x194; uint32_t x195; fiat_id_GostR3410_2001_TestParamSet_uint1 x196; uint32_t x197; fiat_id_GostR3410_2001_TestParamSet_uint1 x198; uint32_t x199; fiat_id_GostR3410_2001_TestParamSet_uint1 x200; uint32_t x201; fiat_id_GostR3410_2001_TestParamSet_uint1 x202; uint32_t x203; fiat_id_GostR3410_2001_TestParamSet_uint1 x204; uint32_t x205; fiat_id_GostR3410_2001_TestParamSet_uint1 x206; uint32_t x207; fiat_id_GostR3410_2001_TestParamSet_uint1 x208; uint32_t x209; fiat_id_GostR3410_2001_TestParamSet_uint1 x210; uint32_t x211; uint32_t x212; uint32_t x213; uint32_t x214; uint32_t x215; uint32_t x216; uint32_t x217; uint32_t x218; uint32_t x219; uint32_t x220; uint32_t x221; uint32_t x222; uint32_t x223; uint32_t x224; uint32_t x225; uint32_t x226; uint32_t x227; uint32_t x228; fiat_id_GostR3410_2001_TestParamSet_uint1 x229; uint32_t x230; fiat_id_GostR3410_2001_TestParamSet_uint1 x231; uint32_t x232; fiat_id_GostR3410_2001_TestParamSet_uint1 x233; uint32_t x234; fiat_id_GostR3410_2001_TestParamSet_uint1 x235; uint32_t x236; fiat_id_GostR3410_2001_TestParamSet_uint1 x237; uint32_t x238; fiat_id_GostR3410_2001_TestParamSet_uint1 x239; uint32_t x240; fiat_id_GostR3410_2001_TestParamSet_uint1 x241; uint32_t x242; uint32_t x243; fiat_id_GostR3410_2001_TestParamSet_uint1 x244; uint32_t x245; fiat_id_GostR3410_2001_TestParamSet_uint1 x246; uint32_t x247; fiat_id_GostR3410_2001_TestParamSet_uint1 x248; uint32_t x249; fiat_id_GostR3410_2001_TestParamSet_uint1 x250; uint32_t x251; fiat_id_GostR3410_2001_TestParamSet_uint1 x252; uint32_t x253; fiat_id_GostR3410_2001_TestParamSet_uint1 x254; uint32_t x255; fiat_id_GostR3410_2001_TestParamSet_uint1 x256; uint32_t x257; fiat_id_GostR3410_2001_TestParamSet_uint1 x258; uint32_t x259; fiat_id_GostR3410_2001_TestParamSet_uint1 x260; uint32_t x261; uint32_t x262; uint32_t x263; uint32_t x264; uint32_t x265; uint32_t x266; uint32_t x267; fiat_id_GostR3410_2001_TestParamSet_uint1 x268; uint32_t x269; fiat_id_GostR3410_2001_TestParamSet_uint1 x270; uint32_t x271; fiat_id_GostR3410_2001_TestParamSet_uint1 x272; uint32_t x273; fiat_id_GostR3410_2001_TestParamSet_uint1 x274; uint32_t x275; fiat_id_GostR3410_2001_TestParamSet_uint1 x276; uint32_t x277; fiat_id_GostR3410_2001_TestParamSet_uint1 x278; uint32_t x279; fiat_id_GostR3410_2001_TestParamSet_uint1 x280; uint32_t x281; fiat_id_GostR3410_2001_TestParamSet_uint1 x282; uint32_t x283; fiat_id_GostR3410_2001_TestParamSet_uint1 x284; uint32_t x285; uint32_t x286; uint32_t x287; uint32_t x288; uint32_t x289; uint32_t x290; uint32_t x291; uint32_t x292; uint32_t x293; uint32_t x294; uint32_t x295; uint32_t x296; uint32_t x297; uint32_t x298; uint32_t x299; uint32_t x300; uint32_t x301; uint32_t x302; fiat_id_GostR3410_2001_TestParamSet_uint1 x303; uint32_t x304; fiat_id_GostR3410_2001_TestParamSet_uint1 x305; uint32_t x306; fiat_id_GostR3410_2001_TestParamSet_uint1 x307; uint32_t x308; fiat_id_GostR3410_2001_TestParamSet_uint1 x309; uint32_t x310; fiat_id_GostR3410_2001_TestParamSet_uint1 x311; uint32_t x312; fiat_id_GostR3410_2001_TestParamSet_uint1 x313; uint32_t x314; fiat_id_GostR3410_2001_TestParamSet_uint1 x315; uint32_t x316; uint32_t x317; fiat_id_GostR3410_2001_TestParamSet_uint1 x318; uint32_t x319; fiat_id_GostR3410_2001_TestParamSet_uint1 x320; uint32_t x321; fiat_id_GostR3410_2001_TestParamSet_uint1 x322; uint32_t x323; fiat_id_GostR3410_2001_TestParamSet_uint1 x324; uint32_t x325; fiat_id_GostR3410_2001_TestParamSet_uint1 x326; uint32_t x327; fiat_id_GostR3410_2001_TestParamSet_uint1 x328; uint32_t x329; fiat_id_GostR3410_2001_TestParamSet_uint1 x330; uint32_t x331; fiat_id_GostR3410_2001_TestParamSet_uint1 x332; uint32_t x333; fiat_id_GostR3410_2001_TestParamSet_uint1 x334; uint32_t x335; uint32_t x336; uint32_t x337; uint32_t x338; uint32_t x339; uint32_t x340; uint32_t x341; fiat_id_GostR3410_2001_TestParamSet_uint1 x342; uint32_t x343; fiat_id_GostR3410_2001_TestParamSet_uint1 x344; uint32_t x345; fiat_id_GostR3410_2001_TestParamSet_uint1 x346; uint32_t x347; fiat_id_GostR3410_2001_TestParamSet_uint1 x348; uint32_t x349; fiat_id_GostR3410_2001_TestParamSet_uint1 x350; uint32_t x351; fiat_id_GostR3410_2001_TestParamSet_uint1 x352; uint32_t x353; fiat_id_GostR3410_2001_TestParamSet_uint1 x354; uint32_t x355; fiat_id_GostR3410_2001_TestParamSet_uint1 x356; uint32_t x357; fiat_id_GostR3410_2001_TestParamSet_uint1 x358; uint32_t x359; uint32_t x360; uint32_t x361; uint32_t x362; uint32_t x363; uint32_t x364; uint32_t x365; uint32_t x366; uint32_t x367; uint32_t x368; uint32_t x369; uint32_t x370; uint32_t x371; uint32_t x372; uint32_t x373; uint32_t x374; uint32_t x375; uint32_t x376; fiat_id_GostR3410_2001_TestParamSet_uint1 x377; uint32_t x378; fiat_id_GostR3410_2001_TestParamSet_uint1 x379; uint32_t x380; fiat_id_GostR3410_2001_TestParamSet_uint1 x381; uint32_t x382; fiat_id_GostR3410_2001_TestParamSet_uint1 x383; uint32_t x384; fiat_id_GostR3410_2001_TestParamSet_uint1 x385; uint32_t x386; fiat_id_GostR3410_2001_TestParamSet_uint1 x387; uint32_t x388; fiat_id_GostR3410_2001_TestParamSet_uint1 x389; uint32_t x390; uint32_t x391; fiat_id_GostR3410_2001_TestParamSet_uint1 x392; uint32_t x393; fiat_id_GostR3410_2001_TestParamSet_uint1 x394; uint32_t x395; fiat_id_GostR3410_2001_TestParamSet_uint1 x396; uint32_t x397; fiat_id_GostR3410_2001_TestParamSet_uint1 x398; uint32_t x399; fiat_id_GostR3410_2001_TestParamSet_uint1 x400; uint32_t x401; fiat_id_GostR3410_2001_TestParamSet_uint1 x402; uint32_t x403; fiat_id_GostR3410_2001_TestParamSet_uint1 x404; uint32_t x405; fiat_id_GostR3410_2001_TestParamSet_uint1 x406; uint32_t x407; fiat_id_GostR3410_2001_TestParamSet_uint1 x408; uint32_t x409; uint32_t x410; uint32_t x411; uint32_t x412; uint32_t x413; uint32_t x414; uint32_t x415; fiat_id_GostR3410_2001_TestParamSet_uint1 x416; uint32_t x417; fiat_id_GostR3410_2001_TestParamSet_uint1 x418; uint32_t x419; fiat_id_GostR3410_2001_TestParamSet_uint1 x420; uint32_t x421; fiat_id_GostR3410_2001_TestParamSet_uint1 x422; uint32_t x423; fiat_id_GostR3410_2001_TestParamSet_uint1 x424; uint32_t x425; fiat_id_GostR3410_2001_TestParamSet_uint1 x426; uint32_t x427; fiat_id_GostR3410_2001_TestParamSet_uint1 x428; uint32_t x429; fiat_id_GostR3410_2001_TestParamSet_uint1 x430; uint32_t x431; fiat_id_GostR3410_2001_TestParamSet_uint1 x432; uint32_t x433; uint32_t x434; uint32_t x435; uint32_t x436; uint32_t x437; uint32_t x438; uint32_t x439; uint32_t x440; uint32_t x441; uint32_t x442; uint32_t x443; uint32_t x444; uint32_t x445; uint32_t x446; uint32_t x447; uint32_t x448; uint32_t x449; uint32_t x450; fiat_id_GostR3410_2001_TestParamSet_uint1 x451; uint32_t x452; fiat_id_GostR3410_2001_TestParamSet_uint1 x453; uint32_t x454; fiat_id_GostR3410_2001_TestParamSet_uint1 x455; uint32_t x456; fiat_id_GostR3410_2001_TestParamSet_uint1 x457; uint32_t x458; fiat_id_GostR3410_2001_TestParamSet_uint1 x459; uint32_t x460; fiat_id_GostR3410_2001_TestParamSet_uint1 x461; uint32_t x462; fiat_id_GostR3410_2001_TestParamSet_uint1 x463; uint32_t x464; uint32_t x465; fiat_id_GostR3410_2001_TestParamSet_uint1 x466; uint32_t x467; fiat_id_GostR3410_2001_TestParamSet_uint1 x468; uint32_t x469; fiat_id_GostR3410_2001_TestParamSet_uint1 x470; uint32_t x471; fiat_id_GostR3410_2001_TestParamSet_uint1 x472; uint32_t x473; fiat_id_GostR3410_2001_TestParamSet_uint1 x474; uint32_t x475; fiat_id_GostR3410_2001_TestParamSet_uint1 x476; uint32_t x477; fiat_id_GostR3410_2001_TestParamSet_uint1 x478; uint32_t x479; fiat_id_GostR3410_2001_TestParamSet_uint1 x480; uint32_t x481; fiat_id_GostR3410_2001_TestParamSet_uint1 x482; uint32_t x483; uint32_t x484; uint32_t x485; uint32_t x486; uint32_t x487; uint32_t x488; uint32_t x489; fiat_id_GostR3410_2001_TestParamSet_uint1 x490; uint32_t x491; fiat_id_GostR3410_2001_TestParamSet_uint1 x492; uint32_t x493; fiat_id_GostR3410_2001_TestParamSet_uint1 x494; uint32_t x495; fiat_id_GostR3410_2001_TestParamSet_uint1 x496; uint32_t x497; fiat_id_GostR3410_2001_TestParamSet_uint1 x498; uint32_t x499; fiat_id_GostR3410_2001_TestParamSet_uint1 x500; uint32_t x501; fiat_id_GostR3410_2001_TestParamSet_uint1 x502; uint32_t x503; fiat_id_GostR3410_2001_TestParamSet_uint1 x504; uint32_t x505; fiat_id_GostR3410_2001_TestParamSet_uint1 x506; uint32_t x507; uint32_t x508; uint32_t x509; uint32_t x510; uint32_t x511; uint32_t x512; uint32_t x513; uint32_t x514; uint32_t x515; uint32_t x516; uint32_t x517; uint32_t x518; uint32_t x519; uint32_t x520; uint32_t x521; uint32_t x522; uint32_t x523; uint32_t x524; fiat_id_GostR3410_2001_TestParamSet_uint1 x525; uint32_t x526; fiat_id_GostR3410_2001_TestParamSet_uint1 x527; uint32_t x528; fiat_id_GostR3410_2001_TestParamSet_uint1 x529; uint32_t x530; fiat_id_GostR3410_2001_TestParamSet_uint1 x531; uint32_t x532; fiat_id_GostR3410_2001_TestParamSet_uint1 x533; uint32_t x534; fiat_id_GostR3410_2001_TestParamSet_uint1 x535; uint32_t x536; fiat_id_GostR3410_2001_TestParamSet_uint1 x537; uint32_t x538; uint32_t x539; fiat_id_GostR3410_2001_TestParamSet_uint1 x540; uint32_t x541; fiat_id_GostR3410_2001_TestParamSet_uint1 x542; uint32_t x543; fiat_id_GostR3410_2001_TestParamSet_uint1 x544; uint32_t x545; fiat_id_GostR3410_2001_TestParamSet_uint1 x546; uint32_t x547; fiat_id_GostR3410_2001_TestParamSet_uint1 x548; uint32_t x549; fiat_id_GostR3410_2001_TestParamSet_uint1 x550; uint32_t x551; fiat_id_GostR3410_2001_TestParamSet_uint1 x552; uint32_t x553; fiat_id_GostR3410_2001_TestParamSet_uint1 x554; uint32_t x555; fiat_id_GostR3410_2001_TestParamSet_uint1 x556; uint32_t x557; uint32_t x558; uint32_t x559; uint32_t x560; uint32_t x561; uint32_t x562; uint32_t x563; fiat_id_GostR3410_2001_TestParamSet_uint1 x564; uint32_t x565; fiat_id_GostR3410_2001_TestParamSet_uint1 x566; uint32_t x567; fiat_id_GostR3410_2001_TestParamSet_uint1 x568; uint32_t x569; fiat_id_GostR3410_2001_TestParamSet_uint1 x570; uint32_t x571; fiat_id_GostR3410_2001_TestParamSet_uint1 x572; uint32_t x573; fiat_id_GostR3410_2001_TestParamSet_uint1 x574; uint32_t x575; fiat_id_GostR3410_2001_TestParamSet_uint1 x576; uint32_t x577; fiat_id_GostR3410_2001_TestParamSet_uint1 x578; uint32_t x579; fiat_id_GostR3410_2001_TestParamSet_uint1 x580; uint32_t x581; uint32_t x582; fiat_id_GostR3410_2001_TestParamSet_uint1 x583; uint32_t x584; fiat_id_GostR3410_2001_TestParamSet_uint1 x585; uint32_t x586; fiat_id_GostR3410_2001_TestParamSet_uint1 x587; uint32_t x588; fiat_id_GostR3410_2001_TestParamSet_uint1 x589; uint32_t x590; fiat_id_GostR3410_2001_TestParamSet_uint1 x591; uint32_t x592; fiat_id_GostR3410_2001_TestParamSet_uint1 x593; uint32_t x594; fiat_id_GostR3410_2001_TestParamSet_uint1 x595; uint32_t x596; fiat_id_GostR3410_2001_TestParamSet_uint1 x597; uint32_t x598; fiat_id_GostR3410_2001_TestParamSet_uint1 x599; uint32_t x600; uint32_t x601; uint32_t x602; uint32_t x603; uint32_t x604; uint32_t x605; uint32_t x606; uint32_t x607; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[0]); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x9, &x10, x8, (arg1[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x11, &x12, x8, (arg1[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x13, &x14, x8, (arg1[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x15, &x16, x8, (arg1[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x17, &x18, x8, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x19, &x20, x8, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x21, &x22, x8, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x23, &x24, x8, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x25, &x26, 0x0, x24, x21); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x27, &x28, x26, x22, x19); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x29, &x30, x28, x20, x17); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x31, &x32, x30, x18, x15); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x33, &x34, x32, x16, x13); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x35, &x36, x34, x14, x11); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x37, &x38, x36, x12, x9); x39 = (x38 + x10); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x40, &x41, x23, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x42, &x43, x40, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x44, &x45, x40, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x46, &x47, 0x0, x23, x44); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x48, &x49, x47, x25, x45); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x50, &x51, x49, x27, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x52, &x53, x51, x29, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x54, &x55, x53, x31, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x56, &x57, x55, x33, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x58, &x59, x57, x35, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x60, &x61, x59, x37, x42); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x62, &x63, x61, x39, x43); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x64, &x65, x1, (arg1[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x66, &x67, x1, (arg1[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x68, &x69, x1, (arg1[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x70, &x71, x1, (arg1[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x72, &x73, x1, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x74, &x75, x1, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x76, &x77, x1, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x78, &x79, x1, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x80, &x81, 0x0, x79, x76); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x82, &x83, x81, x77, x74); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x84, &x85, x83, x75, x72); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x86, &x87, x85, x73, x70); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x88, &x89, x87, x71, x68); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x90, &x91, x89, x69, x66); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x92, &x93, x91, x67, x64); x94 = (x93 + x65); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x95, &x96, 0x0, x48, x78); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x97, &x98, x96, x50, x80); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x99, &x100, x98, x52, x82); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x101, &x102, x100, x54, x84); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x103, &x104, x102, x56, x86); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x105, &x106, x104, x58, x88); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x107, &x108, x106, x60, x90); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x109, &x110, x108, x62, x92); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x111, &x112, x110, x63, x94); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x113, &x114, x95, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x115, &x116, x113, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x117, &x118, x113, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x119, &x120, 0x0, x95, x117); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x121, &x122, x120, x97, x118); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x123, &x124, x122, x99, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x125, &x126, x124, x101, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x127, &x128, x126, x103, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x129, &x130, x128, x105, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x131, &x132, x130, x107, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x133, &x134, x132, x109, x115); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x135, &x136, x134, x111, x116); x137 = ((uint32_t)x136 + x112); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x138, &x139, x2, (arg1[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x140, &x141, x2, (arg1[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x142, &x143, x2, (arg1[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x144, &x145, x2, (arg1[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x146, &x147, x2, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x148, &x149, x2, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x150, &x151, x2, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x152, &x153, x2, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x154, &x155, 0x0, x153, x150); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x156, &x157, x155, x151, x148); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x158, &x159, x157, x149, x146); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x160, &x161, x159, x147, x144); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x162, &x163, x161, x145, x142); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x164, &x165, x163, x143, x140); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x166, &x167, x165, x141, x138); x168 = (x167 + x139); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x169, &x170, 0x0, x121, x152); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x171, &x172, x170, x123, x154); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x173, &x174, x172, x125, x156); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x175, &x176, x174, x127, x158); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x177, &x178, x176, x129, x160); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x179, &x180, x178, x131, x162); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x181, &x182, x180, x133, x164); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x183, &x184, x182, x135, x166); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x185, &x186, x184, x137, x168); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x187, &x188, x169, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x189, &x190, x187, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x191, &x192, x187, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x193, &x194, 0x0, x169, x191); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x195, &x196, x194, x171, x192); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x197, &x198, x196, x173, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x199, &x200, x198, x175, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x201, &x202, x200, x177, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x203, &x204, x202, x179, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x205, &x206, x204, x181, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x207, &x208, x206, x183, x189); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x209, &x210, x208, x185, x190); x211 = ((uint32_t)x210 + x186); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x212, &x213, x3, (arg1[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x214, &x215, x3, (arg1[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x216, &x217, x3, (arg1[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x218, &x219, x3, (arg1[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x220, &x221, x3, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x222, &x223, x3, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x224, &x225, x3, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x226, &x227, x3, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x228, &x229, 0x0, x227, x224); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x230, &x231, x229, x225, x222); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x232, &x233, x231, x223, x220); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x234, &x235, x233, x221, x218); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x236, &x237, x235, x219, x216); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x238, &x239, x237, x217, x214); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x240, &x241, x239, x215, x212); x242 = (x241 + x213); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x243, &x244, 0x0, x195, x226); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x245, &x246, x244, x197, x228); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x247, &x248, x246, x199, x230); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x249, &x250, x248, x201, x232); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x251, &x252, x250, x203, x234); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x253, &x254, x252, x205, x236); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x255, &x256, x254, x207, x238); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x257, &x258, x256, x209, x240); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x259, &x260, x258, x211, x242); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x261, &x262, x243, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x263, &x264, x261, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x265, &x266, x261, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x267, &x268, 0x0, x243, x265); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x269, &x270, x268, x245, x266); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x271, &x272, x270, x247, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x273, &x274, x272, x249, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x275, &x276, x274, x251, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x277, &x278, x276, x253, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x279, &x280, x278, x255, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x281, &x282, x280, x257, x263); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x283, &x284, x282, x259, x264); x285 = ((uint32_t)x284 + x260); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x286, &x287, x4, (arg1[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x288, &x289, x4, (arg1[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x290, &x291, x4, (arg1[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x292, &x293, x4, (arg1[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x294, &x295, x4, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x296, &x297, x4, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x298, &x299, x4, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x300, &x301, x4, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x302, &x303, 0x0, x301, x298); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x304, &x305, x303, x299, x296); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x306, &x307, x305, x297, x294); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x308, &x309, x307, x295, x292); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x310, &x311, x309, x293, x290); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x312, &x313, x311, x291, x288); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x314, &x315, x313, x289, x286); x316 = (x315 + x287); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x317, &x318, 0x0, x269, x300); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x319, &x320, x318, x271, x302); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x321, &x322, x320, x273, x304); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x323, &x324, x322, x275, x306); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x325, &x326, x324, x277, x308); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x327, &x328, x326, x279, x310); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x329, &x330, x328, x281, x312); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x331, &x332, x330, x283, x314); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x333, &x334, x332, x285, x316); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x335, &x336, x317, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x337, &x338, x335, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x339, &x340, x335, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x341, &x342, 0x0, x317, x339); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x343, &x344, x342, x319, x340); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x345, &x346, x344, x321, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x347, &x348, x346, x323, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x349, &x350, x348, x325, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x351, &x352, x350, x327, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x353, &x354, x352, x329, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x355, &x356, x354, x331, x337); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x357, &x358, x356, x333, x338); x359 = ((uint32_t)x358 + x334); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x360, &x361, x5, (arg1[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x362, &x363, x5, (arg1[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x364, &x365, x5, (arg1[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x366, &x367, x5, (arg1[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x368, &x369, x5, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x370, &x371, x5, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x372, &x373, x5, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x374, &x375, x5, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x376, &x377, 0x0, x375, x372); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x378, &x379, x377, x373, x370); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x380, &x381, x379, x371, x368); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x382, &x383, x381, x369, x366); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x384, &x385, x383, x367, x364); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x386, &x387, x385, x365, x362); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x388, &x389, x387, x363, x360); x390 = (x389 + x361); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x391, &x392, 0x0, x343, x374); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x393, &x394, x392, x345, x376); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x395, &x396, x394, x347, x378); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x397, &x398, x396, x349, x380); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x399, &x400, x398, x351, x382); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x401, &x402, x400, x353, x384); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x403, &x404, x402, x355, x386); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x405, &x406, x404, x357, x388); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x407, &x408, x406, x359, x390); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x409, &x410, x391, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x411, &x412, x409, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x413, &x414, x409, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x415, &x416, 0x0, x391, x413); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x417, &x418, x416, x393, x414); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x419, &x420, x418, x395, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x421, &x422, x420, x397, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x423, &x424, x422, x399, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x425, &x426, x424, x401, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x427, &x428, x426, x403, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x429, &x430, x428, x405, x411); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x431, &x432, x430, x407, x412); x433 = ((uint32_t)x432 + x408); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x434, &x435, x6, (arg1[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x436, &x437, x6, (arg1[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x438, &x439, x6, (arg1[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x440, &x441, x6, (arg1[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x442, &x443, x6, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x444, &x445, x6, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x446, &x447, x6, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x448, &x449, x6, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x450, &x451, 0x0, x449, x446); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x452, &x453, x451, x447, x444); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x454, &x455, x453, x445, x442); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x456, &x457, x455, x443, x440); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x458, &x459, x457, x441, x438); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x460, &x461, x459, x439, x436); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x462, &x463, x461, x437, x434); x464 = (x463 + x435); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x465, &x466, 0x0, x417, x448); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x467, &x468, x466, x419, x450); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x469, &x470, x468, x421, x452); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x471, &x472, x470, x423, x454); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x473, &x474, x472, x425, x456); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x475, &x476, x474, x427, x458); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x477, &x478, x476, x429, x460); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x479, &x480, x478, x431, x462); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x481, &x482, x480, x433, x464); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x483, &x484, x465, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x485, &x486, x483, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x487, &x488, x483, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x489, &x490, 0x0, x465, x487); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x491, &x492, x490, x467, x488); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x493, &x494, x492, x469, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x495, &x496, x494, x471, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x497, &x498, x496, x473, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x499, &x500, x498, x475, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x501, &x502, x500, x477, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x503, &x504, x502, x479, x485); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x505, &x506, x504, x481, x486); x507 = ((uint32_t)x506 + x482); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x508, &x509, x7, (arg1[7])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x510, &x511, x7, (arg1[6])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x512, &x513, x7, (arg1[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x514, &x515, x7, (arg1[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x516, &x517, x7, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x518, &x519, x7, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x520, &x521, x7, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x522, &x523, x7, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x524, &x525, 0x0, x523, x520); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x526, &x527, x525, x521, x518); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x528, &x529, x527, x519, x516); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x530, &x531, x529, x517, x514); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x532, &x533, x531, x515, x512); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x534, &x535, x533, x513, x510); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x536, &x537, x535, x511, x508); x538 = (x537 + x509); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x539, &x540, 0x0, x491, x522); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x541, &x542, x540, x493, x524); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x543, &x544, x542, x495, x526); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x545, &x546, x544, x497, x528); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x547, &x548, x546, x499, x530); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x549, &x550, x548, x501, x532); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x551, &x552, x550, x503, x534); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x553, &x554, x552, x505, x536); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x555, &x556, x554, x507, x538); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x557, &x558, x539, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x559, &x560, x557, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x561, &x562, x557, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x563, &x564, 0x0, x539, x561); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x565, &x566, x564, x541, x562); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x567, &x568, x566, x543, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x569, &x570, x568, x545, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x571, &x572, x570, x547, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x573, &x574, x572, x549, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x575, &x576, x574, x551, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x577, &x578, x576, x553, x559); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x579, &x580, x578, x555, x560); x581 = ((uint32_t)x580 + x556); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x582, &x583, 0x0, x565, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x584, &x585, x583, x567, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x586, &x587, x585, x569, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x588, &x589, x587, x571, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x590, &x591, x589, x573, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x592, &x593, x591, x575, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x594, &x595, x593, x577, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x596, &x597, x595, x579, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x598, &x599, x597, x581, 0x0); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x600, x599, x582, x565); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x601, x599, x584, x567); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x602, x599, x586, x569); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x603, x599, x588, x571); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x604, x599, x590, x573); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x605, x599, x592, x575); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x606, x599, x594, x577); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x607, x599, x596, x579); out1[0] = x600; out1[1] = x601; out1[2] = x602; out1[3] = x603; out1[4] = x604; out1[5] = x605; out1[6] = x606; out1[7] = x607; } /* * The function fiat_id_GostR3410_2001_TestParamSet_add adds two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_add(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; fiat_id_GostR3410_2001_TestParamSet_uint1 x2; uint32_t x3; fiat_id_GostR3410_2001_TestParamSet_uint1 x4; uint32_t x5; fiat_id_GostR3410_2001_TestParamSet_uint1 x6; uint32_t x7; fiat_id_GostR3410_2001_TestParamSet_uint1 x8; uint32_t x9; fiat_id_GostR3410_2001_TestParamSet_uint1 x10; uint32_t x11; fiat_id_GostR3410_2001_TestParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_TestParamSet_uint1 x14; uint32_t x15; fiat_id_GostR3410_2001_TestParamSet_uint1 x16; uint32_t x17; fiat_id_GostR3410_2001_TestParamSet_uint1 x18; uint32_t x19; fiat_id_GostR3410_2001_TestParamSet_uint1 x20; uint32_t x21; fiat_id_GostR3410_2001_TestParamSet_uint1 x22; uint32_t x23; fiat_id_GostR3410_2001_TestParamSet_uint1 x24; uint32_t x25; fiat_id_GostR3410_2001_TestParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_TestParamSet_uint1 x28; uint32_t x29; fiat_id_GostR3410_2001_TestParamSet_uint1 x30; uint32_t x31; fiat_id_GostR3410_2001_TestParamSet_uint1 x32; uint32_t x33; fiat_id_GostR3410_2001_TestParamSet_uint1 x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x17, &x18, 0x0, x1, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x19, &x20, x18, x3, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x21, &x22, x20, x5, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x23, &x24, x22, x7, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x25, &x26, x24, x9, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x27, &x28, x26, x11, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x29, &x30, x28, x13, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x31, &x32, x30, x15, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x33, &x34, x32, x16, 0x0); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x35, x34, x17, x1); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x36, x34, x19, x3); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x37, x34, x21, x5); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x38, x34, x23, x7); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x39, x34, x25, x9); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x40, x34, x27, x11); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x41, x34, x29, x13); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x42, x34, x31, x15); out1[0] = x35; out1[1] = x36; out1[2] = x37; out1[3] = x38; out1[4] = x39; out1[5] = x40; out1[6] = x41; out1[7] = x42; } /* * The function fiat_id_GostR3410_2001_TestParamSet_sub subtracts two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_sub(uint32_t out1[8], const uint32_t arg1[8], const uint32_t arg2[8]) { uint32_t x1; fiat_id_GostR3410_2001_TestParamSet_uint1 x2; uint32_t x3; fiat_id_GostR3410_2001_TestParamSet_uint1 x4; uint32_t x5; fiat_id_GostR3410_2001_TestParamSet_uint1 x6; uint32_t x7; fiat_id_GostR3410_2001_TestParamSet_uint1 x8; uint32_t x9; fiat_id_GostR3410_2001_TestParamSet_uint1 x10; uint32_t x11; fiat_id_GostR3410_2001_TestParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_TestParamSet_uint1 x14; uint32_t x15; fiat_id_GostR3410_2001_TestParamSet_uint1 x16; uint32_t x17; uint32_t x18; fiat_id_GostR3410_2001_TestParamSet_uint1 x19; uint32_t x20; fiat_id_GostR3410_2001_TestParamSet_uint1 x21; uint32_t x22; fiat_id_GostR3410_2001_TestParamSet_uint1 x23; uint32_t x24; fiat_id_GostR3410_2001_TestParamSet_uint1 x25; uint32_t x26; fiat_id_GostR3410_2001_TestParamSet_uint1 x27; uint32_t x28; fiat_id_GostR3410_2001_TestParamSet_uint1 x29; uint32_t x30; fiat_id_GostR3410_2001_TestParamSet_uint1 x31; uint32_t x32; fiat_id_GostR3410_2001_TestParamSet_uint1 x33; fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x9, &x10, x8, (arg1[4]), (arg2[4])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x11, &x12, x10, (arg1[5]), (arg2[5])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x13, &x14, x12, (arg1[6]), (arg2[6])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x15, &x16, x14, (arg1[7]), (arg2[7])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x18, &x19, 0x0, x1, (x17 & UINT16_C(0x431))); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x20, &x21, x19, x3, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x22, &x23, x21, x5, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x24, &x25, x23, x7, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x26, &x27, x25, x9, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x28, &x29, x27, x11, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x30, &x31, x29, x13, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x32, &x33, x31, x15, (x17 & UINT32_C(0x80000000))); out1[0] = x18; out1[1] = x20; out1[2] = x22; out1[3] = x24; out1[4] = x26; out1[5] = x28; out1[6] = x30; out1[7] = x32; } /* * The function fiat_id_GostR3410_2001_TestParamSet_opp negates a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_opp(uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; fiat_id_GostR3410_2001_TestParamSet_uint1 x2; uint32_t x3; fiat_id_GostR3410_2001_TestParamSet_uint1 x4; uint32_t x5; fiat_id_GostR3410_2001_TestParamSet_uint1 x6; uint32_t x7; fiat_id_GostR3410_2001_TestParamSet_uint1 x8; uint32_t x9; fiat_id_GostR3410_2001_TestParamSet_uint1 x10; uint32_t x11; fiat_id_GostR3410_2001_TestParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_TestParamSet_uint1 x14; uint32_t x15; fiat_id_GostR3410_2001_TestParamSet_uint1 x16; uint32_t x17; uint32_t x18; fiat_id_GostR3410_2001_TestParamSet_uint1 x19; uint32_t x20; fiat_id_GostR3410_2001_TestParamSet_uint1 x21; uint32_t x22; fiat_id_GostR3410_2001_TestParamSet_uint1 x23; uint32_t x24; fiat_id_GostR3410_2001_TestParamSet_uint1 x25; uint32_t x26; fiat_id_GostR3410_2001_TestParamSet_uint1 x27; uint32_t x28; fiat_id_GostR3410_2001_TestParamSet_uint1 x29; uint32_t x30; fiat_id_GostR3410_2001_TestParamSet_uint1 x31; uint32_t x32; fiat_id_GostR3410_2001_TestParamSet_uint1 x33; fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x17, x16, 0x0, UINT32_C(0xffffffff)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x18, &x19, 0x0, x1, (x17 & UINT16_C(0x431))); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x20, &x21, x19, x3, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x22, &x23, x21, x5, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x24, &x25, x23, x7, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x26, &x27, x25, x9, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x28, &x29, x27, x11, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x30, &x31, x29, x13, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x32, &x33, x31, x15, (x17 & UINT32_C(0x80000000))); out1[0] = x18; out1[1] = x20; out1[2] = x22; out1[3] = x24; out1[4] = x26; out1[5] = x28; out1[6] = x30; out1[7] = x32; } /* * The function fiat_id_GostR3410_2001_TestParamSet_from_montgomery translates a field element out of the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval out1 mod m = (eval arg1 * ((2^32)âģš mod m)^8) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_from_montgomery( uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; fiat_id_GostR3410_2001_TestParamSet_uint1 x9; uint32_t x10; fiat_id_GostR3410_2001_TestParamSet_uint1 x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; fiat_id_GostR3410_2001_TestParamSet_uint1 x19; uint32_t x20; fiat_id_GostR3410_2001_TestParamSet_uint1 x21; uint32_t x22; fiat_id_GostR3410_2001_TestParamSet_uint1 x23; uint32_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint32_t x29; uint32_t x30; fiat_id_GostR3410_2001_TestParamSet_uint1 x31; uint32_t x32; fiat_id_GostR3410_2001_TestParamSet_uint1 x33; uint32_t x34; fiat_id_GostR3410_2001_TestParamSet_uint1 x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; fiat_id_GostR3410_2001_TestParamSet_uint1 x43; uint32_t x44; fiat_id_GostR3410_2001_TestParamSet_uint1 x45; uint32_t x46; fiat_id_GostR3410_2001_TestParamSet_uint1 x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; fiat_id_GostR3410_2001_TestParamSet_uint1 x55; uint32_t x56; fiat_id_GostR3410_2001_TestParamSet_uint1 x57; uint32_t x58; fiat_id_GostR3410_2001_TestParamSet_uint1 x59; uint32_t x60; uint32_t x61; uint32_t x62; uint32_t x63; uint32_t x64; uint32_t x65; uint32_t x66; fiat_id_GostR3410_2001_TestParamSet_uint1 x67; uint32_t x68; fiat_id_GostR3410_2001_TestParamSet_uint1 x69; uint32_t x70; fiat_id_GostR3410_2001_TestParamSet_uint1 x71; uint32_t x72; fiat_id_GostR3410_2001_TestParamSet_uint1 x73; uint32_t x74; fiat_id_GostR3410_2001_TestParamSet_uint1 x75; uint32_t x76; fiat_id_GostR3410_2001_TestParamSet_uint1 x77; uint32_t x78; fiat_id_GostR3410_2001_TestParamSet_uint1 x79; uint32_t x80; fiat_id_GostR3410_2001_TestParamSet_uint1 x81; uint32_t x82; fiat_id_GostR3410_2001_TestParamSet_uint1 x83; uint32_t x84; uint32_t x85; uint32_t x86; uint32_t x87; uint32_t x88; uint32_t x89; uint32_t x90; fiat_id_GostR3410_2001_TestParamSet_uint1 x91; uint32_t x92; fiat_id_GostR3410_2001_TestParamSet_uint1 x93; uint32_t x94; fiat_id_GostR3410_2001_TestParamSet_uint1 x95; uint32_t x96; fiat_id_GostR3410_2001_TestParamSet_uint1 x97; uint32_t x98; fiat_id_GostR3410_2001_TestParamSet_uint1 x99; uint32_t x100; fiat_id_GostR3410_2001_TestParamSet_uint1 x101; uint32_t x102; fiat_id_GostR3410_2001_TestParamSet_uint1 x103; uint32_t x104; fiat_id_GostR3410_2001_TestParamSet_uint1 x105; uint32_t x106; fiat_id_GostR3410_2001_TestParamSet_uint1 x107; uint32_t x108; fiat_id_GostR3410_2001_TestParamSet_uint1 x109; uint32_t x110; fiat_id_GostR3410_2001_TestParamSet_uint1 x111; uint32_t x112; fiat_id_GostR3410_2001_TestParamSet_uint1 x113; uint32_t x114; fiat_id_GostR3410_2001_TestParamSet_uint1 x115; uint32_t x116; fiat_id_GostR3410_2001_TestParamSet_uint1 x117; uint32_t x118; fiat_id_GostR3410_2001_TestParamSet_uint1 x119; uint32_t x120; uint32_t x121; uint32_t x122; uint32_t x123; uint32_t x124; uint32_t x125; uint32_t x126; fiat_id_GostR3410_2001_TestParamSet_uint1 x127; uint32_t x128; fiat_id_GostR3410_2001_TestParamSet_uint1 x129; uint32_t x130; fiat_id_GostR3410_2001_TestParamSet_uint1 x131; uint32_t x132; fiat_id_GostR3410_2001_TestParamSet_uint1 x133; uint32_t x134; fiat_id_GostR3410_2001_TestParamSet_uint1 x135; uint32_t x136; fiat_id_GostR3410_2001_TestParamSet_uint1 x137; uint32_t x138; fiat_id_GostR3410_2001_TestParamSet_uint1 x139; uint32_t x140; fiat_id_GostR3410_2001_TestParamSet_uint1 x141; uint32_t x142; uint32_t x143; fiat_id_GostR3410_2001_TestParamSet_uint1 x144; uint32_t x145; fiat_id_GostR3410_2001_TestParamSet_uint1 x146; uint32_t x147; fiat_id_GostR3410_2001_TestParamSet_uint1 x148; uint32_t x149; fiat_id_GostR3410_2001_TestParamSet_uint1 x150; uint32_t x151; fiat_id_GostR3410_2001_TestParamSet_uint1 x152; uint32_t x153; fiat_id_GostR3410_2001_TestParamSet_uint1 x154; uint32_t x155; fiat_id_GostR3410_2001_TestParamSet_uint1 x156; uint32_t x157; fiat_id_GostR3410_2001_TestParamSet_uint1 x158; uint32_t x159; fiat_id_GostR3410_2001_TestParamSet_uint1 x160; uint32_t x161; uint32_t x162; uint32_t x163; uint32_t x164; uint32_t x165; uint32_t x166; uint32_t x167; uint32_t x168; x1 = (arg1[0]); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x2, &x3, x1, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x4, &x5, x2, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x6, &x7, x2, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x8, &x9, 0x0, x1, x6); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x10, &x11, 0x0, (x9 + x7), (arg1[1])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x12, &x13, x10, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x14, &x15, x12, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x16, &x17, x12, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x18, &x19, 0x0, x5, x14); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x20, &x21, 0x0, x10, x16); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x22, &x23, 0x0, (((uint32_t)x21 + x11) + x17), (arg1[2])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x24, &x25, x22, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x26, &x27, x24, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x28, &x29, x24, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x30, &x31, 0x0, (x19 + x15), x26); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x32, &x33, 0x0, x22, x28); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x34, &x35, 0x0, (((uint32_t)x33 + x23) + x29), (arg1[3])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x36, &x37, x34, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x38, &x39, x36, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x40, &x41, x36, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x42, &x43, 0x0, (x31 + x27), x38); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x44, &x45, 0x0, x34, x40); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x46, &x47, 0x0, (((uint32_t)x45 + x35) + x41), (arg1[4])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x48, &x49, x46, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x50, &x51, x48, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x52, &x53, x48, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x54, &x55, 0x0, (x43 + x39), x50); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x56, &x57, 0x0, x46, x52); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x58, &x59, 0x0, (((uint32_t)x57 + x47) + x53), (arg1[5])); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x60, &x61, x58, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x62, &x63, x60, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x64, &x65, x60, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x66, &x67, 0x0, (x55 + x51), x62); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x68, &x69, 0x0, x58, x64); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x70, &x71, 0x0, (((uint32_t)x69 + x59) + x65), (arg1[6])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x72, &x73, x71, x4, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x74, &x75, x73, x18, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x76, &x77, x75, x30, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x78, &x79, x77, x42, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x80, &x81, x79, x54, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x82, &x83, x81, x66, 0x0); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x84, &x85, x70, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x86, &x87, x84, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x88, &x89, x84, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x90, &x91, 0x0, x70, x88); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x92, &x93, x91, x72, x89); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x94, &x95, x93, x74, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x96, &x97, x95, x76, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x98, &x99, x97, x78, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x100, &x101, x99, x80, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x102, &x103, x101, x82, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x104, &x105, x103, (x83 + (x67 + x63)), x86); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x106, &x107, 0x0, x92, (arg1[7])); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x108, &x109, x107, x94, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x110, &x111, x109, x96, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x112, &x113, x111, x98, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x114, &x115, x113, x100, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x116, &x117, x115, x102, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x118, &x119, x117, x104, 0x0); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x120, &x121, x106, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x122, &x123, x120, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x124, &x125, x120, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x126, &x127, 0x0, x106, x124); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x128, &x129, x127, x108, x125); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x130, &x131, x129, x110, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x132, &x133, x131, x112, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x134, &x135, x133, x114, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x136, &x137, x135, x116, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x138, &x139, x137, x118, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x140, &x141, x139, (x119 + (x105 + x87)), x122); x142 = (x141 + x123); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x143, &x144, 0x0, x128, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x145, &x146, x144, x130, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x147, &x148, x146, x132, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x149, &x150, x148, x134, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x151, &x152, x150, x136, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x153, &x154, x152, x138, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x155, &x156, x154, x140, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x157, &x158, x156, x142, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x159, &x160, x158, 0x0, 0x0); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x161, x160, x143, x128); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x162, x160, x145, x130); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x163, x160, x147, x132); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x164, x160, x149, x134); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x165, x160, x151, x136); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x166, x160, x153, x138); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x167, x160, x155, x140); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x168, x160, x157, x142); out1[0] = x161; out1[1] = x162; out1[2] = x163; out1[3] = x164; out1[4] = x165; out1[5] = x166; out1[6] = x167; out1[7] = x168; } /* * The function fiat_id_GostR3410_2001_TestParamSet_to_montgomery translates a field element into the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_to_montgomery( uint32_t out1[8], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; fiat_id_GostR3410_2001_TestParamSet_uint1 x12; uint32_t x13; fiat_id_GostR3410_2001_TestParamSet_uint1 x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; fiat_id_GostR3410_2001_TestParamSet_uint1 x22; uint32_t x23; uint32_t x24; uint32_t x25; fiat_id_GostR3410_2001_TestParamSet_uint1 x26; uint32_t x27; fiat_id_GostR3410_2001_TestParamSet_uint1 x28; uint32_t x29; uint32_t x30; uint32_t x31; uint32_t x32; uint32_t x33; uint32_t x34; uint32_t x35; fiat_id_GostR3410_2001_TestParamSet_uint1 x36; uint32_t x37; uint32_t x38; uint32_t x39; fiat_id_GostR3410_2001_TestParamSet_uint1 x40; uint32_t x41; fiat_id_GostR3410_2001_TestParamSet_uint1 x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; fiat_id_GostR3410_2001_TestParamSet_uint1 x50; uint32_t x51; uint32_t x52; uint32_t x53; fiat_id_GostR3410_2001_TestParamSet_uint1 x54; uint32_t x55; fiat_id_GostR3410_2001_TestParamSet_uint1 x56; uint32_t x57; uint32_t x58; uint32_t x59; uint32_t x60; uint32_t x61; uint32_t x62; uint32_t x63; fiat_id_GostR3410_2001_TestParamSet_uint1 x64; uint32_t x65; uint32_t x66; uint32_t x67; fiat_id_GostR3410_2001_TestParamSet_uint1 x68; uint32_t x69; fiat_id_GostR3410_2001_TestParamSet_uint1 x70; uint32_t x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; fiat_id_GostR3410_2001_TestParamSet_uint1 x78; uint32_t x79; uint32_t x80; uint32_t x81; fiat_id_GostR3410_2001_TestParamSet_uint1 x82; uint32_t x83; fiat_id_GostR3410_2001_TestParamSet_uint1 x84; uint32_t x85; fiat_id_GostR3410_2001_TestParamSet_uint1 x86; uint32_t x87; fiat_id_GostR3410_2001_TestParamSet_uint1 x88; uint32_t x89; fiat_id_GostR3410_2001_TestParamSet_uint1 x90; uint32_t x91; fiat_id_GostR3410_2001_TestParamSet_uint1 x92; uint32_t x93; fiat_id_GostR3410_2001_TestParamSet_uint1 x94; uint32_t x95; fiat_id_GostR3410_2001_TestParamSet_uint1 x96; uint32_t x97; uint32_t x98; uint32_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; fiat_id_GostR3410_2001_TestParamSet_uint1 x104; uint32_t x105; fiat_id_GostR3410_2001_TestParamSet_uint1 x106; uint32_t x107; fiat_id_GostR3410_2001_TestParamSet_uint1 x108; uint32_t x109; fiat_id_GostR3410_2001_TestParamSet_uint1 x110; uint32_t x111; fiat_id_GostR3410_2001_TestParamSet_uint1 x112; uint32_t x113; fiat_id_GostR3410_2001_TestParamSet_uint1 x114; uint32_t x115; fiat_id_GostR3410_2001_TestParamSet_uint1 x116; uint32_t x117; fiat_id_GostR3410_2001_TestParamSet_uint1 x118; uint32_t x119; uint32_t x120; uint32_t x121; fiat_id_GostR3410_2001_TestParamSet_uint1 x122; uint32_t x123; fiat_id_GostR3410_2001_TestParamSet_uint1 x124; uint32_t x125; fiat_id_GostR3410_2001_TestParamSet_uint1 x126; uint32_t x127; fiat_id_GostR3410_2001_TestParamSet_uint1 x128; uint32_t x129; fiat_id_GostR3410_2001_TestParamSet_uint1 x130; uint32_t x131; fiat_id_GostR3410_2001_TestParamSet_uint1 x132; uint32_t x133; fiat_id_GostR3410_2001_TestParamSet_uint1 x134; uint32_t x135; uint32_t x136; uint32_t x137; uint32_t x138; uint32_t x139; uint32_t x140; uint32_t x141; fiat_id_GostR3410_2001_TestParamSet_uint1 x142; uint32_t x143; fiat_id_GostR3410_2001_TestParamSet_uint1 x144; uint32_t x145; fiat_id_GostR3410_2001_TestParamSet_uint1 x146; uint32_t x147; fiat_id_GostR3410_2001_TestParamSet_uint1 x148; uint32_t x149; fiat_id_GostR3410_2001_TestParamSet_uint1 x150; uint32_t x151; fiat_id_GostR3410_2001_TestParamSet_uint1 x152; uint32_t x153; fiat_id_GostR3410_2001_TestParamSet_uint1 x154; uint32_t x155; fiat_id_GostR3410_2001_TestParamSet_uint1 x156; uint32_t x157; uint32_t x158; fiat_id_GostR3410_2001_TestParamSet_uint1 x159; uint32_t x160; fiat_id_GostR3410_2001_TestParamSet_uint1 x161; uint32_t x162; fiat_id_GostR3410_2001_TestParamSet_uint1 x163; uint32_t x164; fiat_id_GostR3410_2001_TestParamSet_uint1 x165; uint32_t x166; fiat_id_GostR3410_2001_TestParamSet_uint1 x167; uint32_t x168; fiat_id_GostR3410_2001_TestParamSet_uint1 x169; uint32_t x170; fiat_id_GostR3410_2001_TestParamSet_uint1 x171; uint32_t x172; fiat_id_GostR3410_2001_TestParamSet_uint1 x173; uint32_t x174; fiat_id_GostR3410_2001_TestParamSet_uint1 x175; uint32_t x176; uint32_t x177; uint32_t x178; uint32_t x179; uint32_t x180; uint32_t x181; uint32_t x182; uint32_t x183; fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x1, &x2, (arg1[0]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x3, &x4, x1, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x5, &x6, x3, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x7, &x8, x3, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x9, &x10, (arg1[1]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x11, &x12, 0x0, x1, x7); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x13, &x14, 0x0, ((x12 + x2) + x8), x9); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x15, &x16, x13, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x17, &x18, x15, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x19, &x20, x15, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x21, &x22, 0x0, x6, x17); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x23, &x24, (arg1[2]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x25, &x26, 0x0, x13, x19); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x27, &x28, 0x0, ((x26 + (x14 + x10)) + x20), x23); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x29, &x30, x27, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x31, &x32, x29, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x33, &x34, x29, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x35, &x36, 0x0, (x22 + x18), x31); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x37, &x38, (arg1[3]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x39, &x40, 0x0, x27, x33); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x41, &x42, 0x0, ((x40 + (x28 + x24)) + x34), x37); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x43, &x44, x41, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x45, &x46, x43, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x47, &x48, x43, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x49, &x50, 0x0, (x36 + x32), x45); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x51, &x52, (arg1[4]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x53, &x54, 0x0, x41, x47); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x55, &x56, 0x0, ((x54 + (x42 + x38)) + x48), x51); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x57, &x58, x55, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x59, &x60, x57, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x61, &x62, x57, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x63, &x64, 0x0, (x50 + x46), x59); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x65, &x66, (arg1[5]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x67, &x68, 0x0, x55, x61); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x69, &x70, 0x0, ((x68 + (x56 + x52)) + x62), x65); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x71, &x72, x69, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x73, &x74, x71, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x75, &x76, x71, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x77, &x78, 0x0, (x64 + x60), x73); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x79, &x80, (arg1[6]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x81, &x82, 0x0, x69, x75); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x83, &x84, 0x0, ((x82 + (x70 + x66)) + x76), x79); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x85, &x86, x84, x5, x80); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x87, &x88, x86, x21, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x89, &x90, x88, x35, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x91, &x92, x90, x49, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x93, &x94, x92, x63, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x95, &x96, x94, x77, 0x0); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x97, &x98, x83, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x99, &x100, x97, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x101, &x102, x97, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x103, &x104, 0x0, x83, x101); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x105, &x106, x104, x85, x102); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x107, &x108, x106, x87, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x109, &x110, x108, x89, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x111, &x112, x110, x91, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x113, &x114, x112, x93, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x115, &x116, x114, x95, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x117, &x118, x116, (x96 + (x78 + x74)), x99); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x119, &x120, (arg1[7]), UINT32_C(0x464584)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x121, &x122, 0x0, x105, x119); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x123, &x124, x122, x107, x120); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x125, &x126, x124, x109, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x127, &x128, x126, x111, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x129, &x130, x128, x113, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x131, &x132, x130, x115, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x133, &x134, x132, x117, 0x0); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x135, &x136, x121, UINT32_C(0x883b2b2f)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x137, &x138, x135, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_mulx_u32(&x139, &x140, x135, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x141, &x142, 0x0, x121, x139); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x143, &x144, x142, x123, x140); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x145, &x146, x144, x125, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x147, &x148, x146, x127, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x149, &x150, x148, x129, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x151, &x152, x150, x131, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32(&x153, &x154, x152, x133, 0x0); fiat_id_GostR3410_2001_TestParamSet_addcarryx_u32( &x155, &x156, x154, (x134 + (x118 + x100)), x137); x157 = (x156 + x138); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x158, &x159, 0x0, x143, UINT16_C(0x431)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x160, &x161, x159, x145, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x162, &x163, x161, x147, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x164, &x165, x163, x149, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x166, &x167, x165, x151, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x168, &x169, x167, x153, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x170, &x171, x169, x155, 0x0); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x172, &x173, x171, x157, UINT32_C(0x80000000)); fiat_id_GostR3410_2001_TestParamSet_subborrowx_u32(&x174, &x175, x173, 0x0, 0x0); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x176, x175, x158, x143); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x177, x175, x160, x145); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x178, x175, x162, x147); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x179, x175, x164, x149); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x180, x175, x166, x151); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x181, x175, x168, x153); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x182, x175, x170, x155); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x183, x175, x172, x157); out1[0] = x176; out1[1] = x177; out1[2] = x178; out1[3] = x179; out1[4] = x180; out1[5] = x181; out1[6] = x182; out1[7] = x183; } /* * The function fiat_id_GostR3410_2001_TestParamSet_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_GostR3410_2001_TestParamSet_nonzero( uint32_t *out1, const uint32_t arg1[8]) { uint32_t x1; x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | (arg1[7])))))))); *out1 = x1; } /* * The function fiat_id_GostR3410_2001_TestParamSet_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_selectznz( uint32_t out1[8], fiat_id_GostR3410_2001_TestParamSet_uint1 arg1, const uint32_t arg2[8], const uint32_t arg3[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); fiat_id_GostR3410_2001_TestParamSet_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; } /* * The function fiat_id_GostR3410_2001_TestParamSet_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_GostR3410_2001_TestParamSet_to_bytes( uint8_t out1[32], const uint32_t arg1[8]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint8_t x9; uint32_t x10; uint8_t x11; uint32_t x12; uint8_t x13; uint8_t x14; uint8_t x15; uint32_t x16; uint8_t x17; uint32_t x18; uint8_t x19; uint8_t x20; uint8_t x21; uint32_t x22; uint8_t x23; uint32_t x24; uint8_t x25; uint8_t x26; uint8_t x27; uint32_t x28; uint8_t x29; uint32_t x30; uint8_t x31; uint8_t x32; uint8_t x33; uint32_t x34; uint8_t x35; uint32_t x36; uint8_t x37; uint8_t x38; uint8_t x39; uint32_t x40; uint8_t x41; uint32_t x42; uint8_t x43; uint8_t x44; uint8_t x45; uint32_t x46; uint8_t x47; uint32_t x48; uint8_t x49; uint8_t x50; uint8_t x51; uint32_t x52; uint8_t x53; uint32_t x54; uint8_t x55; uint8_t x56; x1 = (arg1[7]); x2 = (arg1[6]); x3 = (arg1[5]); x4 = (arg1[4]); x5 = (arg1[3]); x6 = (arg1[2]); x7 = (arg1[1]); x8 = (arg1[0]); x9 = (uint8_t)(x8 & UINT8_C(0xff)); x10 = (x8 >> 8); x11 = (uint8_t)(x10 & UINT8_C(0xff)); x12 = (x10 >> 8); x13 = (uint8_t)(x12 & UINT8_C(0xff)); x14 = (uint8_t)(x12 >> 8); x15 = (uint8_t)(x7 & UINT8_C(0xff)); x16 = (x7 >> 8); x17 = (uint8_t)(x16 & UINT8_C(0xff)); x18 = (x16 >> 8); x19 = (uint8_t)(x18 & UINT8_C(0xff)); x20 = (uint8_t)(x18 >> 8); x21 = (uint8_t)(x6 & UINT8_C(0xff)); x22 = (x6 >> 8); x23 = (uint8_t)(x22 & UINT8_C(0xff)); x24 = (x22 >> 8); x25 = (uint8_t)(x24 & UINT8_C(0xff)); x26 = (uint8_t)(x24 >> 8); x27 = (uint8_t)(x5 & UINT8_C(0xff)); x28 = (x5 >> 8); x29 = (uint8_t)(x28 & UINT8_C(0xff)); x30 = (x28 >> 8); x31 = (uint8_t)(x30 & UINT8_C(0xff)); x32 = (uint8_t)(x30 >> 8); x33 = (uint8_t)(x4 & UINT8_C(0xff)); x34 = (x4 >> 8); x35 = (uint8_t)(x34 & UINT8_C(0xff)); x36 = (x34 >> 8); x37 = (uint8_t)(x36 & UINT8_C(0xff)); x38 = (uint8_t)(x36 >> 8); x39 = (uint8_t)(x3 & UINT8_C(0xff)); x40 = (x3 >> 8); x41 = (uint8_t)(x40 & UINT8_C(0xff)); x42 = (x40 >> 8); x43 = (uint8_t)(x42 & UINT8_C(0xff)); x44 = (uint8_t)(x42 >> 8); x45 = (uint8_t)(x2 & UINT8_C(0xff)); x46 = (x2 >> 8); x47 = (uint8_t)(x46 & UINT8_C(0xff)); x48 = (x46 >> 8); x49 = (uint8_t)(x48 & UINT8_C(0xff)); x50 = (uint8_t)(x48 >> 8); x51 = (uint8_t)(x1 & UINT8_C(0xff)); x52 = (x1 >> 8); x53 = (uint8_t)(x52 & UINT8_C(0xff)); x54 = (x52 >> 8); x55 = (uint8_t)(x54 & UINT8_C(0xff)); x56 = (uint8_t)(x54 >> 8); out1[0] = x9; out1[1] = x11; out1[2] = x13; out1[3] = x14; out1[4] = x15; out1[5] = x17; out1[6] = x19; out1[7] = x20; out1[8] = x21; out1[9] = x23; out1[10] = x25; out1[11] = x26; out1[12] = x27; out1[13] = x29; out1[14] = x31; out1[15] = x32; out1[16] = x33; out1[17] = x35; out1[18] = x37; out1[19] = x38; out1[20] = x39; out1[21] = x41; out1[22] = x43; out1[23] = x44; out1[24] = x45; out1[25] = x47; out1[26] = x49; out1[27] = x50; out1[28] = x51; out1[29] = x53; out1[30] = x55; out1[31] = x56; } /* * The function fiat_id_GostR3410_2001_TestParamSet_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. * Preconditions: * 0 ≤ bytes_eval arg1 < m * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_GostR3410_2001_TestParamSet_from_bytes( uint32_t out1[8], const uint8_t arg1[32]) { uint32_t x1; uint32_t x2; uint32_t x3; uint8_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint8_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint8_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint8_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint8_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint8_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint8_t x28; uint32_t x29; uint32_t x30; uint32_t x31; uint8_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; uint32_t x55; uint32_t x56; x1 = ((uint32_t)(arg1[31]) << 24); x2 = ((uint32_t)(arg1[30]) << 16); x3 = ((uint32_t)(arg1[29]) << 8); x4 = (arg1[28]); x5 = ((uint32_t)(arg1[27]) << 24); x6 = ((uint32_t)(arg1[26]) << 16); x7 = ((uint32_t)(arg1[25]) << 8); x8 = (arg1[24]); x9 = ((uint32_t)(arg1[23]) << 24); x10 = ((uint32_t)(arg1[22]) << 16); x11 = ((uint32_t)(arg1[21]) << 8); x12 = (arg1[20]); x13 = ((uint32_t)(arg1[19]) << 24); x14 = ((uint32_t)(arg1[18]) << 16); x15 = ((uint32_t)(arg1[17]) << 8); x16 = (arg1[16]); x17 = ((uint32_t)(arg1[15]) << 24); x18 = ((uint32_t)(arg1[14]) << 16); x19 = ((uint32_t)(arg1[13]) << 8); x20 = (arg1[12]); x21 = ((uint32_t)(arg1[11]) << 24); x22 = ((uint32_t)(arg1[10]) << 16); x23 = ((uint32_t)(arg1[9]) << 8); x24 = (arg1[8]); x25 = ((uint32_t)(arg1[7]) << 24); x26 = ((uint32_t)(arg1[6]) << 16); x27 = ((uint32_t)(arg1[5]) << 8); x28 = (arg1[4]); x29 = ((uint32_t)(arg1[3]) << 24); x30 = ((uint32_t)(arg1[2]) << 16); x31 = ((uint32_t)(arg1[1]) << 8); x32 = (arg1[0]); x33 = (x31 + (uint32_t)x32); x34 = (x30 + x33); x35 = (x29 + x34); x36 = (x27 + (uint32_t)x28); x37 = (x26 + x36); x38 = (x25 + x37); x39 = (x23 + (uint32_t)x24); x40 = (x22 + x39); x41 = (x21 + x40); x42 = (x19 + (uint32_t)x20); x43 = (x18 + x42); x44 = (x17 + x43); x45 = (x15 + (uint32_t)x16); x46 = (x14 + x45); x47 = (x13 + x46); x48 = (x11 + (uint32_t)x12); x49 = (x10 + x48); x50 = (x9 + x49); x51 = (x7 + (uint32_t)x8); x52 = (x6 + x51); x53 = (x5 + x52); x54 = (x3 + (uint32_t)x4); x55 = (x2 + x54); x56 = (x1 + x55); out1[0] = x35; out1[1] = x38; out1[2] = x41; out1[3] = x44; out1[4] = x47; out1[5] = x50; out1[6] = x53; out1[7] = x56; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_GostR3410_2001_TestParamSet/fe_inv.op3 * sliding window w=5 */ static void fiat_id_GostR3410_2001_TestParamSet_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t15; fiat_id_GostR3410_2001_TestParamSet_square(acc, t1); fiat_id_GostR3410_2001_TestParamSet_mul(t15, t1, acc); for (i = 0; i < 6; i++) fiat_id_GostR3410_2001_TestParamSet_mul(t15, t15, acc); fiat_id_GostR3410_2001_TestParamSet_square(acc, t1); for (i = 0; i < 244; i++) fiat_id_GostR3410_2001_TestParamSet_square(acc, acc); fiat_id_GostR3410_2001_TestParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_TestParamSet_square(acc, acc); fiat_id_GostR3410_2001_TestParamSet_mul(acc, acc, t1); for (i = 0; i < 5; i++) fiat_id_GostR3410_2001_TestParamSet_square(acc, acc); fiat_id_GostR3410_2001_TestParamSet_mul(output, acc, t15); } /* curve coefficient constants */ static const limb_t const_one[8] = {UINT32_C(0xFFFFFBCF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0x7FFFFFFF)}; static const limb_t const_a[8] = {UINT32_C(0xFFFFC983), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0x7FFFFFFF)}; static const limb_t const_b3[8] = {UINT32_C(0x6AEAB71C), UINT32_C(0x81733EE9), UINT32_C(0xFC4E6FC7), UINT32_C(0x00CD3D1C), UINT32_C(0x75853407), UINT32_C(0x60AB503A), UINT32_C(0x4556810A), UINT32_C(0x0A9EC8AE)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[27][16] = { { {{UINT32_C(0xFFFFF36D), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0x7FFFFFFF)}, {UINT32_C(0x471125F5), UINT32_C(0x9AF45A5A), UINT32_C(0xF69BF9AE), UINT32_C(0x7CE5090A), UINT32_C(0xE4B6DDE6), UINT32_C(0x67617A63), UINT32_C(0x4AA3DAA4), UINT32_C(0x03F66B35)}}, {{UINT32_C(0x149B5D15), UINT32_C(0xB39BDC16), UINT32_C(0x7309454F), UINT32_C(0x87CE978A), UINT32_C(0x315A7A56), UINT32_C(0xD22F32EF), UINT32_C(0xB69A6B57), UINT32_C(0x4C7DE232)}, {UINT32_C(0x466DC64D), UINT32_C(0x9E2DAF6D), UINT32_C(0x4B1C8A55), UINT32_C(0x758C27B1), UINT32_C(0xBD647F1A), UINT32_C(0x74A0CB23), UINT32_C(0x2C2F4C70), UINT32_C(0x27E74868)}}, {{UINT32_C(0x55A62594), UINT32_C(0xF2D8F32E), UINT32_C(0x36BC547A), UINT32_C(0x8323D570), UINT32_C(0x98D4B25A), UINT32_C(0x497679EB), UINT32_C(0xB87E0534), UINT32_C(0x061167F2)}, {UINT32_C(0x223E4DF8), UINT32_C(0xE1FFFDCE), UINT32_C(0xDCD891E9), UINT32_C(0x7C83AE78), UINT32_C(0x3C1B95D0), UINT32_C(0x74398586), UINT32_C(0x74B3F5AB), UINT32_C(0x11D73205)}}, {{UINT32_C(0xACB97F7C), UINT32_C(0x34B9C048), UINT32_C(0xE3B9BCC6), UINT32_C(0x8232E73C), UINT32_C(0xDA2DB71D), UINT32_C(0x81F4B63F), UINT32_C(0xA2DF4C84), UINT32_C(0x4EEE5393)}, {UINT32_C(0xAC469C69), UINT32_C(0xCA6E63AE), UINT32_C(0x428E4F01), UINT32_C(0x27BC807C), UINT32_C(0x5F4EC124), UINT32_C(0x4A2C23BA), UINT32_C(0xAAE2668B), UINT32_C(0x74847CFC)}}, {{UINT32_C(0x6716AF4E), UINT32_C(0x4435585F), UINT32_C(0x1CDB965F), UINT32_C(0xB872D8B7), UINT32_C(0x746FFAD0), UINT32_C(0x662F1962), UINT32_C(0xDB5D0187), UINT32_C(0x52761A24)}, {UINT32_C(0xA57E0E3D), UINT32_C(0xF6A09922), UINT32_C(0xA9C12B63), UINT32_C(0x86C69342), UINT32_C(0x5AF190C5), UINT32_C(0x91FF20B6), UINT32_C(0x4EEEE1AE), UINT32_C(0x10DB7A2A)}}, {{UINT32_C(0x74628B90), UINT32_C(0xBB464A53), UINT32_C(0x057A4F25), UINT32_C(0x6E7A1227), UINT32_C(0x0B0FA41F), UINT32_C(0x4C309D69), UINT32_C(0x77FE7B93), UINT32_C(0x75482607)}, {UINT32_C(0x0B612421), UINT32_C(0xF2583EC7), UINT32_C(0x5E2B15ED), UINT32_C(0xFF2CFC83), UINT32_C(0x8CABC5CF), UINT32_C(0x1E97A7DB), UINT32_C(0x925C149F), UINT32_C(0x1EC08FAA)}}, {{UINT32_C(0x0E9FCBA9), UINT32_C(0xBA0170E3), UINT32_C(0x70D9939B), UINT32_C(0x8976DF7C), UINT32_C(0x21AF14DD), UINT32_C(0xEAE6E74B), UINT32_C(0x0D0861F9), UINT32_C(0x09F09868)}, {UINT32_C(0x21A781FF), UINT32_C(0x4F7FE26E), UINT32_C(0xD73DCEF7), UINT32_C(0x1725B8D0), UINT32_C(0x7E743498), UINT32_C(0x9DA63217), UINT32_C(0x1B828B99), UINT32_C(0x0F51D42C)}}, {{UINT32_C(0x9AFE09BD), UINT32_C(0xBABB076B), UINT32_C(0x17C4050D), UINT32_C(0x4AC89223), UINT32_C(0xDA3E57E8), UINT32_C(0xCA3EA6E3), UINT32_C(0xA33242C0), UINT32_C(0x20AAA384)}, {UINT32_C(0xEF929BF5), UINT32_C(0x6D3A1F2D), UINT32_C(0xE751A62D), UINT32_C(0xB34E2605), UINT32_C(0xB8CF1F99), UINT32_C(0xE1AC629F), UINT32_C(0xF0BBA01A), UINT32_C(0x7152D4E3)}}, {{UINT32_C(0x943E5B8E), UINT32_C(0xA97A6CE3), UINT32_C(0x2D053A9D), UINT32_C(0x1C0F6C7F), UINT32_C(0x64457DE4), UINT32_C(0x9D4A91DE), UINT32_C(0xC6140057), UINT32_C(0x1E19EA8F)}, {UINT32_C(0x500995C8), UINT32_C(0xD4766CB6), UINT32_C(0xE70CD7EE), UINT32_C(0xA019D41D), UINT32_C(0x7AB0A162), UINT32_C(0xBA1828AA), UINT32_C(0x0B7A4E93), UINT32_C(0x0CACA063)}}, {{UINT32_C(0xA1B3FE03), UINT32_C(0x1E68315C), UINT32_C(0x1AAB6B20), UINT32_C(0x21FB277E), UINT32_C(0x6A90FB22), UINT32_C(0x210305D7), UINT32_C(0x2E51B9BC), UINT32_C(0x4C3D3EEA)}, {UINT32_C(0x89C3A2E8), UINT32_C(0xC5662C6D), UINT32_C(0x1712BF9B), UINT32_C(0x66EA4818), UINT32_C(0x2254FBAB), UINT32_C(0x417F8F04), UINT32_C(0xB057EEC1), UINT32_C(0x2F57DF29)}}, {{UINT32_C(0x6509AE4F), UINT32_C(0xF6975C9F), UINT32_C(0xDC89C220), UINT32_C(0x58300438), UINT32_C(0x907FF785), UINT32_C(0xE81DA879), UINT32_C(0x0910ED2F), UINT32_C(0x68D600E3)}, {UINT32_C(0xB43BF686), UINT32_C(0xFBB25113), UINT32_C(0x50A64FAE), UINT32_C(0x8B391E3F), UINT32_C(0x3112B7ED), UINT32_C(0x8C1190D2), UINT32_C(0xCCB4CA50), UINT32_C(0x617BCD41)}}, {{UINT32_C(0xDD780ACA), UINT32_C(0x75036E69), UINT32_C(0x6FBCD996), UINT32_C(0xC90A01DE), UINT32_C(0x0C851CEF), UINT32_C(0x75E1A8E8), UINT32_C(0xF71BDCC6), UINT32_C(0x7225D38A)}, {UINT32_C(0x868B78D2), UINT32_C(0x74AE6935), UINT32_C(0x1CDB5A1E), UINT32_C(0xE70570F3), UINT32_C(0xBEBD2FA4), UINT32_C(0x3E700C48), UINT32_C(0x325D3214), UINT32_C(0x3E483638)}}, {{UINT32_C(0xC0E6D8AD), UINT32_C(0x9F272CD5), UINT32_C(0xE09743A2), UINT32_C(0x9E29687C), UINT32_C(0x93CD64B3), UINT32_C(0xBE0E0D59), UINT32_C(0x504B58F0), UINT32_C(0x5D57A75D)}, {UINT32_C(0x5D44B092), UINT32_C(0x81A1A6E3), UINT32_C(0x310D7868), UINT32_C(0x38AD0169), UINT32_C(0xCC297B73), UINT32_C(0xC8D3C9A6), UINT32_C(0x908E0814), UINT32_C(0x34D98A19)}}, {{UINT32_C(0xE5A57E1F), UINT32_C(0xFFB946AD), UINT32_C(0x191B6C5F), UINT32_C(0xF7EA0AA2), UINT32_C(0x8DF529C1), UINT32_C(0x52D07058), UINT32_C(0x2AFDA727), UINT32_C(0x06B7BDE5)}, {UINT32_C(0x90658555), UINT32_C(0x651E6DC9), UINT32_C(0x1FC416CE), UINT32_C(0x8F910D89), UINT32_C(0xCBF086D5), UINT32_C(0x0BA4D84E), UINT32_C(0x0C4A4B4A), UINT32_C(0x73DA158C)}}, {{UINT32_C(0x521DB62C), UINT32_C(0xE22420A6), UINT32_C(0xBC90EB6F), UINT32_C(0x8EBC1A21), UINT32_C(0xE50F6EB4), UINT32_C(0xE1529AAC), UINT32_C(0x8BE235DB), UINT32_C(0x4025BF27)}, {UINT32_C(0x9FFE2B82), UINT32_C(0x40607710), UINT32_C(0x696B4634), UINT32_C(0x7A6BB75B), UINT32_C(0x2B2F25D3), UINT32_C(0x0CEF27A9), UINT32_C(0xCA0B7112), UINT32_C(0x6C9CFFD7)}}, {{UINT32_C(0xEDA5C43B), UINT32_C(0x12B39FF0), UINT32_C(0x54E0FE3F), UINT32_C(0x2E1FC66C), UINT32_C(0x248A9167), UINT32_C(0xFB2DEA80), UINT32_C(0x3B2BB322), UINT32_C(0x11BCDA10)}, {UINT32_C(0x16D2C928), UINT32_C(0xFDDF6E84), UINT32_C(0x36E887F4), UINT32_C(0x99DDF6A1), UINT32_C(0x920092D6), UINT32_C(0x1E56D2F3), UINT32_C(0x2D77AE5A), UINT32_C(0x67433BF4)}}, }, { {{UINT32_C(0x321BFA62), UINT32_C(0x6C204DDC), UINT32_C(0x2F138A80), UINT32_C(0xA96E42B8), UINT32_C(0xE3EC1A7D), UINT32_C(0x4C98E986), UINT32_C(0x136CADC4), UINT32_C(0x223C8BC4)}, {UINT32_C(0xBA3CE54A), UINT32_C(0xFA9F15D3), UINT32_C(0x19963D88), UINT32_C(0xA103B9D7), UINT32_C(0x2F811A21), UINT32_C(0x1ED23354), UINT32_C(0x65A4E833), UINT32_C(0x64D6B14C)}}, {{UINT32_C(0xCFBD1039), UINT32_C(0x2485175C), UINT32_C(0x7C92D8EC), UINT32_C(0xC4DAE65B), UINT32_C(0x1859FD47), UINT32_C(0x6FC70F54), UINT32_C(0x33E8305C), UINT32_C(0x6D543444)}, {UINT32_C(0x944DDA07), UINT32_C(0x1A65FEC2), UINT32_C(0xEF375B21), UINT32_C(0x7BCF8391), UINT32_C(0xBE4CD8D6), UINT32_C(0xDDCFC356), UINT32_C(0x13850042), UINT32_C(0x4BF93B9E)}}, {{UINT32_C(0x88B7F950), UINT32_C(0xBDF7A56C), UINT32_C(0x81B8590E), UINT32_C(0x3A60E5FC), UINT32_C(0x6F6E6807), UINT32_C(0x475B94D1), UINT32_C(0x2F0D49A8), UINT32_C(0x2F1B9F06)}, {UINT32_C(0x2E6A01D3), UINT32_C(0x3C36DCF3), UINT32_C(0x30444003), UINT32_C(0x807E1D5B), UINT32_C(0xFECF5768), UINT32_C(0xE3768486), UINT32_C(0xEF12B5CC), UINT32_C(0x73C4D0CF)}}, {{UINT32_C(0xF4C6FF93), UINT32_C(0x9D76477C), UINT32_C(0xC5A1A495), UINT32_C(0x03F16687), UINT32_C(0xB41748B2), UINT32_C(0x5071DA3D), UINT32_C(0x971D6A7D), UINT32_C(0x0F3A3784)}, {UINT32_C(0x2785A782), UINT32_C(0x0B9A5AD6), UINT32_C(0x09FF09F9), UINT32_C(0x957E72A0), UINT32_C(0xAE3CF5F4), UINT32_C(0x3072C1DC), UINT32_C(0xCD9CFD7E), UINT32_C(0x63D463AC)}}, {{UINT32_C(0xC77B516C), UINT32_C(0xDA0DEE0B), UINT32_C(0xE6AA0E1F), UINT32_C(0x446D7199), UINT32_C(0xBFFA705C), UINT32_C(0xCC0D1590), UINT32_C(0xC35B59BA), UINT32_C(0x6A6FC81C)}, {UINT32_C(0x593E3EB9), UINT32_C(0x39DF210E), UINT32_C(0xD0DCC01F), UINT32_C(0x17F331CE), UINT32_C(0xBD176C5B), UINT32_C(0x02E0E5EB), UINT32_C(0x8A2D6290), UINT32_C(0x68946CCC)}}, {{UINT32_C(0x09ECFEF2), UINT32_C(0x8D1400D6), UINT32_C(0xE1E76A98), UINT32_C(0x57D5F91B), UINT32_C(0xA12DFF8D), UINT32_C(0x5CF76130), UINT32_C(0x61002939), UINT32_C(0x5C361922)}, {UINT32_C(0xFB0FE974), UINT32_C(0x8D45C8C1), UINT32_C(0xF942ED70), UINT32_C(0x0C97725E), UINT32_C(0x73C5AA42), UINT32_C(0xB1C66498), UINT32_C(0x7E203187), UINT32_C(0x4A121FC4)}}, {{UINT32_C(0xFCEDA76C), UINT32_C(0x58430EE3), UINT32_C(0xF5C88D62), UINT32_C(0x3496699A), UINT32_C(0x14273E7E), UINT32_C(0x1C3FC811), UINT32_C(0x1D6D67DA), UINT32_C(0x3E38E9FC)}, {UINT32_C(0xAB685B3B), UINT32_C(0xBB683EA4), UINT32_C(0xB0904BB3), UINT32_C(0xB63F72B1), UINT32_C(0x47A75297), UINT32_C(0x5DFA23C5), UINT32_C(0x38B59560), UINT32_C(0x09E80AA0)}}, {{UINT32_C(0x7F4D22FC), UINT32_C(0x7D8325C6), UINT32_C(0x8C2FA282), UINT32_C(0xBFFB01B1), UINT32_C(0x4A89BE98), UINT32_C(0x01A037DC), UINT32_C(0x84EA8C8A), UINT32_C(0x092F6525)}, {UINT32_C(0xC52FD518), UINT32_C(0x873D33DA), UINT32_C(0x44AFDD41), UINT32_C(0x0A245B15), UINT32_C(0x98FA7FF5), UINT32_C(0x78993737), UINT32_C(0x21D29087), UINT32_C(0x1BB48AD2)}}, {{UINT32_C(0x1A59313C), UINT32_C(0x00C97A99), UINT32_C(0x5CF9A6FF), UINT32_C(0xBD4F29EE), UINT32_C(0xD839B62B), UINT32_C(0xEA59D87A), UINT32_C(0x97CAB63C), UINT32_C(0x16F18F48)}, {UINT32_C(0x6F6C292F), UINT32_C(0xB339789A), UINT32_C(0xD005ABB2), UINT32_C(0xEC52E644), UINT32_C(0xAE24DA46), UINT32_C(0xEEAC93C9), UINT32_C(0xE5C43B4F), UINT32_C(0x0ECB9957)}}, {{UINT32_C(0x20561AF7), UINT32_C(0xD91B2202), UINT32_C(0x55F2CFB8), UINT32_C(0xECA260DD), UINT32_C(0x17B91CCF), UINT32_C(0xF03A8C1D), UINT32_C(0x64B35D9A), UINT32_C(0x55A0491F)}, {UINT32_C(0x1A2F8F39), UINT32_C(0x0A97E5CC), UINT32_C(0x23B1D80B), UINT32_C(0x02C187D1), UINT32_C(0xDB9FBA1A), UINT32_C(0xA9C13D26), UINT32_C(0xF8051F0D), UINT32_C(0x7CCDDBAC)}}, {{UINT32_C(0xED0E9DB8), UINT32_C(0x05CA8EA5), UINT32_C(0x53A8EA3F), UINT32_C(0xE888079F), UINT32_C(0x9209BFA2), UINT32_C(0x6DDBC40D), UINT32_C(0x80DCEAEA), UINT32_C(0x068E5BA9)}, {UINT32_C(0xB19D824B), UINT32_C(0xDB69D133), UINT32_C(0xE6A3A462), UINT32_C(0x65154FB6), UINT32_C(0x020B2AC7), UINT32_C(0x9FCF733D), UINT32_C(0xE1329315), UINT32_C(0x15178DDE)}}, {{UINT32_C(0x877EE476), UINT32_C(0x76F78865), UINT32_C(0x12B471BA), UINT32_C(0x5824EACC), UINT32_C(0xBBB640A8), UINT32_C(0x71BDFADF), UINT32_C(0x9A631D09), UINT32_C(0x5181B08F)}, {UINT32_C(0xFFE978E8), UINT32_C(0x2913CCA5), UINT32_C(0xAEB89AA6), UINT32_C(0x9CEF3612), UINT32_C(0xE02AD6DC), UINT32_C(0x93BB373E), UINT32_C(0x04144769), UINT32_C(0x5D7984F0)}}, {{UINT32_C(0x4F98D2C3), UINT32_C(0x3219DB07), UINT32_C(0xBD40ACCC), UINT32_C(0xE3EF888F), UINT32_C(0x31124C73), UINT32_C(0x07A30E3A), UINT32_C(0xB070C53F), UINT32_C(0x5D9C820B)}, {UINT32_C(0xDA0661AB), UINT32_C(0x94D41768), UINT32_C(0x21FF87EB), UINT32_C(0x27FC2661), UINT32_C(0xFF17A977), UINT32_C(0xB8DCBC7F), UINT32_C(0x392EB13D), UINT32_C(0x71F75FF9)}}, {{UINT32_C(0x9AD71AB0), UINT32_C(0xC5CED56C), UINT32_C(0x39D6C9F1), UINT32_C(0xE744EAB0), UINT32_C(0x839BD904), UINT32_C(0x6E49B00B), UINT32_C(0xD7003054), UINT32_C(0x0C0EDE2C)}, {UINT32_C(0x1A6A1BB7), UINT32_C(0x792C3F80), UINT32_C(0x4B2C7885), UINT32_C(0x6E5093B1), UINT32_C(0x13EA65F7), UINT32_C(0x28873209), UINT32_C(0xF381C851), UINT32_C(0x085A2697)}}, {{UINT32_C(0xDA60A255), UINT32_C(0x84FC6B9D), UINT32_C(0x4B495BC6), UINT32_C(0x12397EED), UINT32_C(0x71A5AA87), UINT32_C(0x4881DF6B), UINT32_C(0x9572CFE2), UINT32_C(0x57BB3259)}, {UINT32_C(0x3A10A65F), UINT32_C(0x30677759), UINT32_C(0xDB1758DD), UINT32_C(0x670B82EC), UINT32_C(0xD57B513E), UINT32_C(0xD84F3E8F), UINT32_C(0x89088E78), UINT32_C(0x617A512A)}}, {{UINT32_C(0xAE3D7707), UINT32_C(0x83971322), UINT32_C(0x6D34D0B4), UINT32_C(0x66563CDE), UINT32_C(0xC13309ED), UINT32_C(0x95342D9B), UINT32_C(0x082A5887), UINT32_C(0x62C2B1B6)}, {UINT32_C(0xC3C27158), UINT32_C(0xD94A8712), UINT32_C(0xA844BF60), UINT32_C(0xDE2C9C9D), UINT32_C(0xCE3E4F3C), UINT32_C(0xDE897386), UINT32_C(0x6ACEBDF1), UINT32_C(0x2C22A82E)}}, }, { {{UINT32_C(0x0604E200), UINT32_C(0x2755028A), UINT32_C(0x44189101), UINT32_C(0xADE23A7D), UINT32_C(0xF0B7F9B7), UINT32_C(0xA6E418F4), UINT32_C(0x212EDC2A), UINT32_C(0x036F5503)}, {UINT32_C(0x3F5E0456), UINT32_C(0xE069D06A), UINT32_C(0x0F37F2D8), UINT32_C(0x2FAFF7C8), UINT32_C(0x7F5EDE53), UINT32_C(0xFF08E879), UINT32_C(0x797E0427), UINT32_C(0x7F97725D)}}, {{UINT32_C(0xB32E5B1B), UINT32_C(0xE44E39C1), UINT32_C(0xAD3EC706), UINT32_C(0x25CD4614), UINT32_C(0xE382C5D2), UINT32_C(0x2E97B090), UINT32_C(0xB00D79F2), UINT32_C(0x3E1A1F6B)}, {UINT32_C(0xC2375837), UINT32_C(0x27573C4E), UINT32_C(0x6C8D5CCD), UINT32_C(0xAD53D2C8), UINT32_C(0xFC09725A), UINT32_C(0x94EE5460), UINT32_C(0x02DD0DF4), UINT32_C(0x6E592506)}}, {{UINT32_C(0x3D0C7AC4), UINT32_C(0x6CFFA4BF), UINT32_C(0x69ED4317), UINT32_C(0x663B1218), UINT32_C(0xC79AD5C1), UINT32_C(0x933094F6), UINT32_C(0xFFC54767), UINT32_C(0x569F37ED)}, {UINT32_C(0x1F338782), UINT32_C(0x954EEE0C), UINT32_C(0xA46CA276), UINT32_C(0x5BE69673), UINT32_C(0x20CB26DC), UINT32_C(0x77BA0009), UINT32_C(0x029316AE), UINT32_C(0x2211CAC3)}}, {{UINT32_C(0x184EBD7C), UINT32_C(0xC8DEF3CB), UINT32_C(0x6A4DB0A0), UINT32_C(0x39337050), UINT32_C(0x0BE1D82C), UINT32_C(0x6FF7993A), UINT32_C(0xFC9252C0), UINT32_C(0x01D7674A)}, {UINT32_C(0xF62D9268), UINT32_C(0xB10BA727), UINT32_C(0x817B687B), UINT32_C(0x6E2338D8), UINT32_C(0xE47405F1), UINT32_C(0x266443F2), UINT32_C(0x6872B879), UINT32_C(0x6A1BD9CE)}}, {{UINT32_C(0x2B2BD346), UINT32_C(0x19213765), UINT32_C(0xE2ACFB8E), UINT32_C(0x962CA22C), UINT32_C(0x62FECDE1), UINT32_C(0x518CF45D), UINT32_C(0xA13D9E8D), UINT32_C(0x529AE629)}, {UINT32_C(0xBB69D5E3), UINT32_C(0xAF796DB0), UINT32_C(0xD4E596B7), UINT32_C(0xA064209D), UINT32_C(0x47942C73), UINT32_C(0x9F3DFD4A), UINT32_C(0x7810D5EC), UINT32_C(0x7FAB6C6D)}}, {{UINT32_C(0x66A3B287), UINT32_C(0x55D15250), UINT32_C(0xEEFDDC75), UINT32_C(0x1ECC6A20), UINT32_C(0x26DE8C01), UINT32_C(0xF683FA60), UINT32_C(0x9FBA658C), UINT32_C(0x4F5DE2A6)}, {UINT32_C(0xC66D82F4), UINT32_C(0xE748D78A), UINT32_C(0x3B24C76B), UINT32_C(0x2BA525EF), UINT32_C(0x30EE69CE), UINT32_C(0x5A9539E6), UINT32_C(0xB7861B2D), UINT32_C(0x2DA4C4C2)}}, {{UINT32_C(0x820743E6), UINT32_C(0x9D1E982D), UINT32_C(0xAB0CC42D), UINT32_C(0x705D9237), UINT32_C(0x47C4E7D7), UINT32_C(0xBDD01663), UINT32_C(0xF8E69896), UINT32_C(0x3D48EE78)}, {UINT32_C(0x41132782), UINT32_C(0x7A822BCD), UINT32_C(0xEE46F715), UINT32_C(0xBD41BEFA), UINT32_C(0xD0B2F4B0), UINT32_C(0x8E5C3B5F), UINT32_C(0x5E47ED55), UINT32_C(0x690A53D4)}}, {{UINT32_C(0x65A40E44), UINT32_C(0x390536C1), UINT32_C(0x1C92235C), UINT32_C(0x4B4D7970), UINT32_C(0x8B7389E4), UINT32_C(0xCAC27084), UINT32_C(0x19041D01), UINT32_C(0x7B5B23B2)}, {UINT32_C(0x3B5FD5BA), UINT32_C(0x7C18B973), UINT32_C(0x84B72217), UINT32_C(0xFD14865D), UINT32_C(0x267EDE4C), UINT32_C(0x5592547E), UINT32_C(0x8B369753), UINT32_C(0x22DB62E5)}}, {{UINT32_C(0xDDF15BDD), UINT32_C(0x06083D33), UINT32_C(0x361925F5), UINT32_C(0x5766555F), UINT32_C(0xB7ACDEA7), UINT32_C(0xECC0F110), UINT32_C(0x0A3453B5), UINT32_C(0x3E3F1B27)}, {UINT32_C(0x6F7B980D), UINT32_C(0x5A8B7DF9), UINT32_C(0xB44756AC), UINT32_C(0xEBA90E39), UINT32_C(0xAC9A7DB2), UINT32_C(0x954D7ECD), UINT32_C(0x28EA7151), UINT32_C(0x43F688D3)}}, {{UINT32_C(0x4638EFAE), UINT32_C(0x51F64569), UINT32_C(0x3D28BF3C), UINT32_C(0x5840A5DB), UINT32_C(0x134D3E8F), UINT32_C(0xDD486261), UINT32_C(0x7B6B466B), UINT32_C(0x09F17E2C)}, {UINT32_C(0x78ED7016), UINT32_C(0x30D35463), UINT32_C(0xB86D8508), UINT32_C(0x342E9701), UINT32_C(0x42B19533), UINT32_C(0xA3FF6565), UINT32_C(0x061A4A81), UINT32_C(0x4405F02C)}}, {{UINT32_C(0x3D3AAF1E), UINT32_C(0x15C921C0), UINT32_C(0x7D297559), UINT32_C(0x2DD720C7), UINT32_C(0xCB80E3B2), UINT32_C(0x93A07904), UINT32_C(0x6B1EDB93), UINT32_C(0x427C610B)}, {UINT32_C(0xF61E2F41), UINT32_C(0xD2CE818F), UINT32_C(0x8252FB3C), UINT32_C(0x1DA53421), UINT32_C(0xED07538F), UINT32_C(0x37A4A997), UINT32_C(0x962454F2), UINT32_C(0x48A928BF)}}, {{UINT32_C(0x7A420273), UINT32_C(0x65091E4D), UINT32_C(0xE54C0B47), UINT32_C(0x6AF382AF), UINT32_C(0x8047A423), UINT32_C(0x150DAB08), UINT32_C(0x45BD197C), UINT32_C(0x22C3740A)}, {UINT32_C(0xE07C3468), UINT32_C(0x64429AA0), UINT32_C(0x7B37FE10), UINT32_C(0xC506B8C9), UINT32_C(0x3CC5062C), UINT32_C(0x30E2FE78), UINT32_C(0xA9242F2D), UINT32_C(0x2F3B5A5F)}}, {{UINT32_C(0x5A40BCA1), UINT32_C(0x2619A3B2), UINT32_C(0x118C2FEA), UINT32_C(0xD012DF23), UINT32_C(0xB73FE15C), UINT32_C(0x2868C8B7), UINT32_C(0xEB10B475), UINT32_C(0x45A9CC5A)}, {UINT32_C(0x069050AD), UINT32_C(0x7111AB75), UINT32_C(0xEC2398A9), UINT32_C(0x0665182B), UINT32_C(0x9B86A240), UINT32_C(0xD9A5126E), UINT32_C(0x40E2AED6), UINT32_C(0x601CF0E0)}}, {{UINT32_C(0xF48C8655), UINT32_C(0xE74C9DCD), UINT32_C(0x900E89D5), UINT32_C(0xEE703CA8), UINT32_C(0x5390F052), UINT32_C(0x6C2DFF8B), UINT32_C(0x1316CC4C), UINT32_C(0x08588E89)}, {UINT32_C(0x47E80C87), UINT32_C(0x0F2CC83A), UINT32_C(0xD87824E4), UINT32_C(0x23DE34CF), UINT32_C(0x541FE8F9), UINT32_C(0xC530AF41), UINT32_C(0xD142F1C0), UINT32_C(0x0BF01DC0)}}, {{UINT32_C(0x886C0C4A), UINT32_C(0x210B0B1E), UINT32_C(0x9C56A126), UINT32_C(0x66369DF1), UINT32_C(0xEAC22A5E), UINT32_C(0x5D79AE81), UINT32_C(0xD16F7DB6), UINT32_C(0x4E6C67D4)}, {UINT32_C(0x247CDE60), UINT32_C(0x274572F6), UINT32_C(0x54E8454B), UINT32_C(0xF3C92AC7), UINT32_C(0xF08C32D1), UINT32_C(0x784EC1A1), UINT32_C(0xE1FE9C4E), UINT32_C(0x222716D8)}}, {{UINT32_C(0x3FB1DB1E), UINT32_C(0xAF6AEF5D), UINT32_C(0xC4C2A4D8), UINT32_C(0xB8B55842), UINT32_C(0xCA5AB578), UINT32_C(0x258A2F44), UINT32_C(0x7D8B2D70), UINT32_C(0x558A803F)}, {UINT32_C(0x7E0247A3), UINT32_C(0x9A7345C3), UINT32_C(0xB4D920B1), UINT32_C(0x4E5A6904), UINT32_C(0x76BCBBE1), UINT32_C(0xCF7FAA41), UINT32_C(0xEE112271), UINT32_C(0x66CF993F)}}, }, { {{UINT32_C(0x84D2C56B), UINT32_C(0xDE7D208F), UINT32_C(0xDDA20F33), UINT32_C(0xD1C77403), UINT32_C(0x9A6F337A), UINT32_C(0xB73FDC09), UINT32_C(0x40CD2CBD), UINT32_C(0x1B2A3807)}, {UINT32_C(0x65988D73), UINT32_C(0xB642FA2C), UINT32_C(0x059DAB8E), UINT32_C(0x117E75BC), UINT32_C(0xD6B279AA), UINT32_C(0xC7E2E935), UINT32_C(0xEEA2A445), UINT32_C(0x5EEB9654)}}, {{UINT32_C(0xA59D7A2A), UINT32_C(0xA84747C0), UINT32_C(0x1004C5B8), UINT32_C(0x4478AD4A), UINT32_C(0xA22DE791), UINT32_C(0xF55C2B1B), UINT32_C(0x23F8F89F), UINT32_C(0x2FF6097D)}, {UINT32_C(0xE117BC40), UINT32_C(0xD079C875), UINT32_C(0x03CB43DD), UINT32_C(0x14AEA360), UINT32_C(0x0A20D653), UINT32_C(0x8C730D89), UINT32_C(0x02FD02D8), UINT32_C(0x6956274A)}}, {{UINT32_C(0xD46293CF), UINT32_C(0x9F5D0E9D), UINT32_C(0xF0D93AB7), UINT32_C(0x53748DD4), UINT32_C(0xB9C37CF0), UINT32_C(0x6F81339F), UINT32_C(0xF4B041FC), UINT32_C(0x00B8677A)}, {UINT32_C(0xB5A6FE97), UINT32_C(0xF76E0FFE), UINT32_C(0xF7D198A2), UINT32_C(0x6D3C71F5), UINT32_C(0x11420372), UINT32_C(0xF91E8408), UINT32_C(0x70036AED), UINT32_C(0x36F9F354)}}, {{UINT32_C(0x5D446956), UINT32_C(0x503AF4F2), UINT32_C(0x2DC9777C), UINT32_C(0xCA08C537), UINT32_C(0xE1308D3A), UINT32_C(0xDB4BA888), UINT32_C(0x01DB98CB), UINT32_C(0x01EA28EA)}, {UINT32_C(0xA7DF5FE0), UINT32_C(0x27CC52A9), UINT32_C(0x7DE31E0A), UINT32_C(0x7DA5186B), UINT32_C(0xF136FAD5), UINT32_C(0x63E32889), UINT32_C(0xA363AF23), UINT32_C(0x1BB010A8)}}, {{UINT32_C(0xC0FE56C9), UINT32_C(0x65828B54), UINT32_C(0x4ED3935A), UINT32_C(0x7322CD51), UINT32_C(0x37B4A727), UINT32_C(0x42F068F4), UINT32_C(0xB4C02BE4), UINT32_C(0x7AA9F9F0)}, {UINT32_C(0xDEBB2DD4), UINT32_C(0xBB77851A), UINT32_C(0xD105B81F), UINT32_C(0x7757D5F6), UINT32_C(0x52FA1512), UINT32_C(0x7805369C), UINT32_C(0x38B6976A), UINT32_C(0x4CBC43AE)}}, {{UINT32_C(0x4096725B), UINT32_C(0x24FE8ABD), UINT32_C(0x3895D1E2), UINT32_C(0xC3FAC73A), UINT32_C(0x006A2360), UINT32_C(0xBCAF7757), UINT32_C(0xC03EBB33), UINT32_C(0x75AE96AD)}, {UINT32_C(0x0BD1FB6F), UINT32_C(0x31074478), UINT32_C(0xEA386CBE), UINT32_C(0x729E8E6A), UINT32_C(0x4845AAEC), UINT32_C(0xA8BBCC0B), UINT32_C(0xE6582656), UINT32_C(0x1A0A2D19)}}, {{UINT32_C(0x69BD55F7), UINT32_C(0x332BC9BD), UINT32_C(0xEFB6F780), UINT32_C(0x93D987E2), UINT32_C(0x14381F4D), UINT32_C(0xE57DE096), UINT32_C(0xFF01C4D9), UINT32_C(0x7BDF4217)}, {UINT32_C(0x1956BF02), UINT32_C(0x2A07C4AB), UINT32_C(0x553823D9), UINT32_C(0x7C7B3684), UINT32_C(0xD40F600C), UINT32_C(0x8F750E8E), UINT32_C(0x9693A3C3), UINT32_C(0x63F253E9)}}, {{UINT32_C(0xC62CE42B), UINT32_C(0x250ED8BF), UINT32_C(0xE70674E1), UINT32_C(0xE8A1A295), UINT32_C(0x163A92F1), UINT32_C(0x05ED093D), UINT32_C(0x628969A0), UINT32_C(0x515FF44B)}, {UINT32_C(0x41CE3AF8), UINT32_C(0xF617DF03), UINT32_C(0xF9E60202), UINT32_C(0xCADE131A), UINT32_C(0x363B87E9), UINT32_C(0xFE83C379), UINT32_C(0x493EF65F), UINT32_C(0x7196A80B)}}, {{UINT32_C(0xD7A2047B), UINT32_C(0x4B176FE6), UINT32_C(0x41DCA514), UINT32_C(0x6981D182), UINT32_C(0xDC74AC2E), UINT32_C(0xDDC7EE8E), UINT32_C(0x85CC07D1), UINT32_C(0x3A95A203)}, {UINT32_C(0x841E3200), UINT32_C(0x8D4BA2D8), UINT32_C(0x5F654197), UINT32_C(0x837DDD9B), UINT32_C(0xFBFE4D06), UINT32_C(0x388D358E), UINT32_C(0x61143A85), UINT32_C(0x562DE2F2)}}, {{UINT32_C(0xCFACB903), UINT32_C(0x3BA1F6E5), UINT32_C(0xBD97A3A2), UINT32_C(0xB5BBA41F), UINT32_C(0xCFCF2547), UINT32_C(0xB86F117F), UINT32_C(0x3D9A13DB), UINT32_C(0x50642859)}, {UINT32_C(0x7B5F2A8F), UINT32_C(0xC15C82AE), UINT32_C(0xEF89351E), UINT32_C(0x47E772DD), UINT32_C(0xCAAC4CC7), UINT32_C(0x78C53901), UINT32_C(0x68D72131), UINT32_C(0x6B0F5D30)}}, {{UINT32_C(0xA0B407E6), UINT32_C(0x47E17734), UINT32_C(0x34949A81), UINT32_C(0x29E06830), UINT32_C(0xCB1AC772), UINT32_C(0x63D83340), UINT32_C(0xEB84F909), UINT32_C(0x178A6DD6)}, {UINT32_C(0x3C27D7BA), UINT32_C(0xA9E94826), UINT32_C(0xDB027A4C), UINT32_C(0xC86AF96D), UINT32_C(0x56D5DF86), UINT32_C(0xE7D04E34), UINT32_C(0x2E8D0EE3), UINT32_C(0x7212EAC2)}}, {{UINT32_C(0x8A75F66B), UINT32_C(0xE7E5AA64), UINT32_C(0x8CFD9597), UINT32_C(0x7E86B6AA), UINT32_C(0x834C0271), UINT32_C(0x1B7DDE0C), UINT32_C(0xD4AD306F), UINT32_C(0x397EAF2A)}, {UINT32_C(0x1657E32B), UINT32_C(0x0A357906), UINT32_C(0x4957B3AF), UINT32_C(0xAAEB2DCF), UINT32_C(0x69D3CEE9), UINT32_C(0x1C0CBD02), UINT32_C(0x5A6E7D53), UINT32_C(0x7434EC32)}}, {{UINT32_C(0x85559E86), UINT32_C(0xEB5878F7), UINT32_C(0x4A09C168), UINT32_C(0xB9555F70), UINT32_C(0x80501134), UINT32_C(0xBFFAC5DB), UINT32_C(0x05B53160), UINT32_C(0x4CDBF53A)}, {UINT32_C(0x5F90344B), UINT32_C(0x1413BA29), UINT32_C(0xD0DD0CFD), UINT32_C(0xC6A9D1ED), UINT32_C(0xA0C31B73), UINT32_C(0x8C56AA29), UINT32_C(0xF4E58E08), UINT32_C(0x1C9B0B61)}}, {{UINT32_C(0x0E2F595A), UINT32_C(0xBF8D2237), UINT32_C(0xCBA13CD8), UINT32_C(0x7A646816), UINT32_C(0x5CD728B6), UINT32_C(0xBD2E93A1), UINT32_C(0x07CF9009), UINT32_C(0x30FDF85C)}, {UINT32_C(0x06122B98), UINT32_C(0x3496D949), UINT32_C(0x5A80B3AF), UINT32_C(0xE63EC741), UINT32_C(0x82838A44), UINT32_C(0xA2A39CF7), UINT32_C(0xC015E1D4), UINT32_C(0x4A064F99)}}, {{UINT32_C(0x456CB242), UINT32_C(0x9CCDF95B), UINT32_C(0x6F4517DC), UINT32_C(0xDA1CB24E), UINT32_C(0x931A1115), UINT32_C(0x60450E0F), UINT32_C(0xB5680A8D), UINT32_C(0x6780D774)}, {UINT32_C(0x1FDA4243), UINT32_C(0xAFE48DCD), UINT32_C(0xAE9733C7), UINT32_C(0x6BDD541C), UINT32_C(0xD79D1D52), UINT32_C(0xCBBCC69C), UINT32_C(0x1A513B3E), UINT32_C(0x334F4F67)}}, {{UINT32_C(0xDF49E1A0), UINT32_C(0xCE7712C4), UINT32_C(0xE0B96135), UINT32_C(0xB5444862), UINT32_C(0xF050D010), UINT32_C(0x10564C4B), UINT32_C(0xFEBEFCC8), UINT32_C(0x0531AEC8)}, {UINT32_C(0x70DF6D29), UINT32_C(0xD45B4BE7), UINT32_C(0x6829054E), UINT32_C(0x1ACC2D70), UINT32_C(0x54E56E05), UINT32_C(0x9744CDE1), UINT32_C(0x6EE02696), UINT32_C(0x3C5DE93E)}}, }, { {{UINT32_C(0x3951B674), UINT32_C(0xF43A2B99), UINT32_C(0x5E72FC98), UINT32_C(0xE82789E8), UINT32_C(0x86992601), UINT32_C(0x2AD48436), UINT32_C(0x01A2B65A), UINT32_C(0x3FDEB172)}, {UINT32_C(0x3666322B), UINT32_C(0x926B4839), UINT32_C(0x44B3FDB7), UINT32_C(0x68847D5C), UINT32_C(0xF2F5E247), UINT32_C(0xD06C450D), UINT32_C(0xBBA7C892), UINT32_C(0x0CEC0646)}}, {{UINT32_C(0x61F9C9DA), UINT32_C(0x76446D26), UINT32_C(0xAC60376F), UINT32_C(0xEF2C7B98), UINT32_C(0x2410C057), UINT32_C(0xEEA8CABE), UINT32_C(0x3672A2B6), UINT32_C(0x4C2CE2A7)}, {UINT32_C(0x12879BA5), UINT32_C(0x3F770945), UINT32_C(0xAD913022), UINT32_C(0x719D5BD0), UINT32_C(0x36D445A4), UINT32_C(0x28A82DD9), UINT32_C(0x965965AA), UINT32_C(0x26382C23)}}, {{UINT32_C(0xB8AA8419), UINT32_C(0x66709D92), UINT32_C(0x0AB5C241), UINT32_C(0xFAEFF2E4), UINT32_C(0x1DD46DEB), UINT32_C(0xABB7C5DD), UINT32_C(0x39DB6CB5), UINT32_C(0x7DD03C33)}, {UINT32_C(0x9E160F01), UINT32_C(0x76CDD1EA), UINT32_C(0x81C5CA37), UINT32_C(0x00598D56), UINT32_C(0x241772EC), UINT32_C(0x16D23B04), UINT32_C(0x52A6B807), UINT32_C(0x5132B028)}}, {{UINT32_C(0xCC041445), UINT32_C(0x6D48D4B5), UINT32_C(0x1528DF63), UINT32_C(0x0B1CD923), UINT32_C(0x4A815F60), UINT32_C(0x82EE4DC6), UINT32_C(0x0451E242), UINT32_C(0x29DA6059)}, {UINT32_C(0x17A8A6D0), UINT32_C(0xCD90BFB0), UINT32_C(0x52A7FC3D), UINT32_C(0x8BCF4392), UINT32_C(0x1974860C), UINT32_C(0x49AD55F2), UINT32_C(0x5EDCB1D2), UINT32_C(0x20BBF010)}}, {{UINT32_C(0xA8F6C08C), UINT32_C(0xB4F0EA84), UINT32_C(0xD50164F3), UINT32_C(0x4341BEA7), UINT32_C(0x06320C0F), UINT32_C(0xE5389019), UINT32_C(0x8BA6F033), UINT32_C(0x69D4851A)}, {UINT32_C(0x77902045), UINT32_C(0x1CE58660), UINT32_C(0xBD8579B3), UINT32_C(0xF3B88D85), UINT32_C(0x4FB0A17B), UINT32_C(0xF84FF63A), UINT32_C(0xDE6581BF), UINT32_C(0x09EE62EE)}}, {{UINT32_C(0x7C0516DE), UINT32_C(0x8B8C15B5), UINT32_C(0xA530B89F), UINT32_C(0x3B448FC3), UINT32_C(0x500B0251), UINT32_C(0xE385BBE5), UINT32_C(0xED70804B), UINT32_C(0x5F643F85)}, {UINT32_C(0x239E85A5), UINT32_C(0x550D9B7D), UINT32_C(0x8666E41F), UINT32_C(0xDC910B5B), UINT32_C(0x7D4E390F), UINT32_C(0x65522181), UINT32_C(0x3162FE10), UINT32_C(0x5DD2D3E8)}}, {{UINT32_C(0xDF024A25), UINT32_C(0x59609390), UINT32_C(0x08CCBA91), UINT32_C(0xE66A77E9), UINT32_C(0x65E24DB6), UINT32_C(0xC5CEA91A), UINT32_C(0x3DCEA0A7), UINT32_C(0x0888DFB5)}, {UINT32_C(0x92FA0754), UINT32_C(0x8C8E58CC), UINT32_C(0xF7DC9538), UINT32_C(0x99C259AB), UINT32_C(0x9BEFE750), UINT32_C(0x3A06D8ED), UINT32_C(0xFAACDC97), UINT32_C(0x71AF22E1)}}, {{UINT32_C(0x250AC059), UINT32_C(0xCC41D094), UINT32_C(0x3BE3DA01), UINT32_C(0xCD792A73), UINT32_C(0xCC61EFE1), UINT32_C(0x2DA07802), UINT32_C(0x57053A5D), UINT32_C(0x293AFB08)}, {UINT32_C(0x2FD8A8A0), UINT32_C(0x3E7E4884), UINT32_C(0x0B9B48D3), UINT32_C(0x183FA500), UINT32_C(0x431AACF6), UINT32_C(0x9CAC07BE), UINT32_C(0x2DF89F10), UINT32_C(0x4F82D799)}}, {{UINT32_C(0x0A84935C), UINT32_C(0xFD9F61A8), UINT32_C(0xBB5A7E56), UINT32_C(0x78B948D0), UINT32_C(0x0ACCEEB3), UINT32_C(0xDA478766), UINT32_C(0x53C3851D), UINT32_C(0x47BDAE44)}, {UINT32_C(0x0CFE8D0D), UINT32_C(0x5AE2C60C), UINT32_C(0x1D8A79C9), UINT32_C(0xAC8F79B3), UINT32_C(0x0A79CA31), UINT32_C(0xA958C15E), UINT32_C(0xF0952018), UINT32_C(0x1C46E20E)}}, {{UINT32_C(0xF04AC529), UINT32_C(0xAE552ECE), UINT32_C(0xE2BFEFBC), UINT32_C(0xB295B601), UINT32_C(0x54733412), UINT32_C(0xECC1EE55), UINT32_C(0x12282094), UINT32_C(0x28BCBA53)}, {UINT32_C(0x50B25069), UINT32_C(0x306C0781), UINT32_C(0xE9A18FFE), UINT32_C(0x10D5D23C), UINT32_C(0x1BD5489F), UINT32_C(0xC34FC5C7), UINT32_C(0xE191867D), UINT32_C(0x2B610028)}}, {{UINT32_C(0x3E17E84D), UINT32_C(0x458A1CC1), UINT32_C(0x5D7CFB98), UINT32_C(0x6EAE343D), UINT32_C(0x101F0B7E), UINT32_C(0xC6E0FDAA), UINT32_C(0x2A023288), UINT32_C(0x0B9F7C2C)}, {UINT32_C(0x6F3FCAA0), UINT32_C(0xBEA893A8), UINT32_C(0x452B07C0), UINT32_C(0x7D711B2B), UINT32_C(0x98E2C88D), UINT32_C(0x28958737), UINT32_C(0xDFD99A2A), UINT32_C(0x553A0180)}}, {{UINT32_C(0x0DBA5986), UINT32_C(0x8D617BE8), UINT32_C(0x13D18594), UINT32_C(0xDB763C14), UINT32_C(0xD2DAD82F), UINT32_C(0x822CB0DA), UINT32_C(0x93239947), UINT32_C(0x37ACD99F)}, {UINT32_C(0xCDC08BE6), UINT32_C(0x6A2A7070), UINT32_C(0xCF6D63FF), UINT32_C(0x86B3B66A), UINT32_C(0x0F7D4A67), UINT32_C(0x5BEFF3FB), UINT32_C(0xEBC94AE5), UINT32_C(0x05C25557)}}, {{UINT32_C(0x89183418), UINT32_C(0x5D1DC087), UINT32_C(0x6EA5A960), UINT32_C(0xA25C7AE2), UINT32_C(0xD31F3AAE), UINT32_C(0x074698B9), UINT32_C(0x221788A4), UINT32_C(0x5A5B510B)}, {UINT32_C(0x1DCE95FE), UINT32_C(0x896A8787), UINT32_C(0x7F24020C), UINT32_C(0x89E7B93D), UINT32_C(0x865B4334), UINT32_C(0xFC19BF42), UINT32_C(0x5B78B06D), UINT32_C(0x0389FBF7)}}, {{UINT32_C(0x0BB3A3E2), UINT32_C(0x73B6DA7B), UINT32_C(0x44D56755), UINT32_C(0xDBC12670), UINT32_C(0x7CC1C589), UINT32_C(0x7AF2DE28), UINT32_C(0x697CB6B7), UINT32_C(0x7E248FCB)}, {UINT32_C(0xC64202C0), UINT32_C(0x9410EC06), UINT32_C(0x75EB3A8C), UINT32_C(0x79C82158), UINT32_C(0xE95C5EA9), UINT32_C(0x74FDD2F6), UINT32_C(0x1CCA72C7), UINT32_C(0x2A40B5B5)}}, {{UINT32_C(0x5C29E320), UINT32_C(0x56984223), UINT32_C(0xE871D9E2), UINT32_C(0x8266392A), UINT32_C(0x7B391763), UINT32_C(0x9D86C6C7), UINT32_C(0x02543C9E), UINT32_C(0x5E9E61E2)}, {UINT32_C(0xD2501D1A), UINT32_C(0xD62A9334), UINT32_C(0x9211135D), UINT32_C(0x9D19F54D), UINT32_C(0x8FE81272), UINT32_C(0x66D0B961), UINT32_C(0xD09C2033), UINT32_C(0x6E64635A)}}, {{UINT32_C(0x06F84E11), UINT32_C(0x93BD0AD8), UINT32_C(0x131AFDBF), UINT32_C(0x45F18F2B), UINT32_C(0x6058EB37), UINT32_C(0x881F053F), UINT32_C(0x948AD0D5), UINT32_C(0x36B8D656)}, {UINT32_C(0xE1934E38), UINT32_C(0x53DC2E02), UINT32_C(0xC0435B6C), UINT32_C(0xA8AD5055), UINT32_C(0x4BD7154F), UINT32_C(0x0DF7BD11), UINT32_C(0x73BC98FC), UINT32_C(0x6350B05E)}}, }, { {{UINT32_C(0x04BF927A), UINT32_C(0x12AC5496), UINT32_C(0xE749323E), UINT32_C(0x9BB322DB), UINT32_C(0xF6D99AD6), UINT32_C(0xC10C666D), UINT32_C(0x4C883E0A), UINT32_C(0x0FDF8FB3)}, {UINT32_C(0x665272E8), UINT32_C(0x10667F92), UINT32_C(0x5BF8702F), UINT32_C(0xA30D4CE1), UINT32_C(0xA2D6033D), UINT32_C(0x56314B47), UINT32_C(0xDAC1A10E), UINT32_C(0x09EC90D9)}}, {{UINT32_C(0xC9EB81D1), UINT32_C(0x364F06DD), UINT32_C(0x4DC5CB76), UINT32_C(0xFD181A56), UINT32_C(0xE264567C), UINT32_C(0x91CF010C), UINT32_C(0xA05C02FC), UINT32_C(0x71D9A95B)}, {UINT32_C(0x53967407), UINT32_C(0xAB5AFBA6), UINT32_C(0x9B0AA089), UINT32_C(0x3FC77913), UINT32_C(0xAF29EF02), UINT32_C(0xDF1D4912), UINT32_C(0x5796A0A5), UINT32_C(0x01C3D61C)}}, {{UINT32_C(0xB376E8DE), UINT32_C(0x11503A1C), UINT32_C(0xB8B98321), UINT32_C(0x5CB17D6D), UINT32_C(0xBD8FE9C2), UINT32_C(0x96C9D585), UINT32_C(0xD117171D), UINT32_C(0x048C8DA7)}, {UINT32_C(0xB582282A), UINT32_C(0xDF7FABB8), UINT32_C(0x24FD6BB7), UINT32_C(0x75C2A937), UINT32_C(0x00633701), UINT32_C(0xDF0DBD32), UINT32_C(0x039B3E72), UINT32_C(0x04FB7AEC)}}, {{UINT32_C(0x0E20C09A), UINT32_C(0xE60CCE96), UINT32_C(0x116E1C38), UINT32_C(0xAD295B31), UINT32_C(0xC04477D0), UINT32_C(0xCA6B625D), UINT32_C(0xFFA32E36), UINT32_C(0x032FE03B)}, {UINT32_C(0xE2AAABC6), UINT32_C(0x46334FEE), UINT32_C(0xDA1C6871), UINT32_C(0x9808B03C), UINT32_C(0xF934A482), UINT32_C(0x76D0E3AA), UINT32_C(0xF9CB8F97), UINT32_C(0x2B0BF54A)}}, {{UINT32_C(0x2CA29D02), UINT32_C(0xB5D52717), UINT32_C(0xDBEACF03), UINT32_C(0xF9DAEAFB), UINT32_C(0x113A3811), UINT32_C(0x3786E64B), UINT32_C(0x5C30569D), UINT32_C(0x6A01A1A5)}, {UINT32_C(0xBA1C28B6), UINT32_C(0x0A91E160), UINT32_C(0x929D3F05), UINT32_C(0x5BFA32BA), UINT32_C(0x40C51084), UINT32_C(0x1108F875), UINT32_C(0x42FD5AE1), UINT32_C(0x37FD2383)}}, {{UINT32_C(0x2A79BFB8), UINT32_C(0xABF14EDE), UINT32_C(0xAA34300C), UINT32_C(0x08B34155), UINT32_C(0x64077041), UINT32_C(0x85C0DFA0), UINT32_C(0xF542D447), UINT32_C(0x3AE5D28D)}, {UINT32_C(0xB74DC4FB), UINT32_C(0xC303A0FE), UINT32_C(0x556E0B87), UINT32_C(0xB75292FA), UINT32_C(0x51BDC64C), UINT32_C(0x785628B0), UINT32_C(0x13C579F6), UINT32_C(0x43FE786E)}}, {{UINT32_C(0x5F08790F), UINT32_C(0xBC5898CB), UINT32_C(0x125644EC), UINT32_C(0xA298A59A), UINT32_C(0xB048217A), UINT32_C(0xD2D9627B), UINT32_C(0x7B1F23F7), UINT32_C(0x6DCEEF32)}, {UINT32_C(0xFA7B9C6A), UINT32_C(0x7F02FC44), UINT32_C(0x73597BF7), UINT32_C(0x90C64960), UINT32_C(0x2CB0B3A2), UINT32_C(0x5DD7E4F4), UINT32_C(0x43E83553), UINT32_C(0x5EC5F92C)}}, {{UINT32_C(0x59E2C8E9), UINT32_C(0xC06B4D49), UINT32_C(0x1DF8AD8B), UINT32_C(0x7DBC8218), UINT32_C(0xDAE8B6D7), UINT32_C(0x35570120), UINT32_C(0x0CDE2691), UINT32_C(0x4222A1BA)}, {UINT32_C(0xC1693046), UINT32_C(0xD2F1EFA6), UINT32_C(0x7D36D9CD), UINT32_C(0x2707228D), UINT32_C(0x062D499C), UINT32_C(0xD668EE25), UINT32_C(0xCE2621A0), UINT32_C(0x7AC81BDF)}}, {{UINT32_C(0x16F6A215), UINT32_C(0x3A9F04BB), UINT32_C(0x89E5494E), UINT32_C(0x739BB2BC), UINT32_C(0xD1CEB043), UINT32_C(0xCB8DBAE8), UINT32_C(0x09A6B465), UINT32_C(0x6B177DF0)}, {UINT32_C(0x1A529744), UINT32_C(0xB7C4980E), UINT32_C(0x0E9012B5), UINT32_C(0x3941B997), UINT32_C(0x04C6D677), UINT32_C(0xDF317B95), UINT32_C(0x829F51D6), UINT32_C(0x17898D81)}}, {{UINT32_C(0xA12282BA), UINT32_C(0x3D48FD66), UINT32_C(0x899E5A1A), UINT32_C(0xB775465B), UINT32_C(0x55D95C35), UINT32_C(0xDE0CCB99), UINT32_C(0x950AB9DF), UINT32_C(0x4CB3CCDD)}, {UINT32_C(0x175C4CAE), UINT32_C(0x0B4ABA02), UINT32_C(0xCF86187C), UINT32_C(0x2DA7C698), UINT32_C(0x9A9BF6CA), UINT32_C(0x3A4453DF), UINT32_C(0x8BB9F543), UINT32_C(0x53C86F9C)}}, {{UINT32_C(0x5B7DB133), UINT32_C(0x806B815E), UINT32_C(0x118FA7C1), UINT32_C(0x2451D6AC), UINT32_C(0xFB0BEFC3), UINT32_C(0x32C148B6), UINT32_C(0xE433031E), UINT32_C(0x2E6ECEF6)}, {UINT32_C(0x54B2EE29), UINT32_C(0x2B78F317), UINT32_C(0x5A73BF01), UINT32_C(0xBC321BF9), UINT32_C(0xF8F7F981), UINT32_C(0xDF6F7840), UINT32_C(0x22280C40), UINT32_C(0x751A917A)}}, {{UINT32_C(0x4F9161C8), UINT32_C(0x73EFA631), UINT32_C(0x21145C52), UINT32_C(0xB61C5E68), UINT32_C(0x6A04DC52), UINT32_C(0x60947773), UINT32_C(0x2C2073B2), UINT32_C(0x758E38FF)}, {UINT32_C(0x03A54541), UINT32_C(0xDC6FEA73), UINT32_C(0xB6E65787), UINT32_C(0x5E77682C), UINT32_C(0x37370FD0), UINT32_C(0xAFEF6C1C), UINT32_C(0xD5AC255A), UINT32_C(0x33DEEF00)}}, {{UINT32_C(0x061D35CC), UINT32_C(0x1AD81101), UINT32_C(0x8A77D246), UINT32_C(0xD55EED7D), UINT32_C(0x926E64C3), UINT32_C(0x8D59DC22), UINT32_C(0xAFC6FFA6), UINT32_C(0x76C9D6CE)}, {UINT32_C(0x3F4FCC0F), UINT32_C(0x945A89B5), UINT32_C(0x9087F46A), UINT32_C(0x65EB52CF), UINT32_C(0xAE9F09DE), UINT32_C(0xC3380377), UINT32_C(0x43DFD5FB), UINT32_C(0x59067EDD)}}, {{UINT32_C(0xCF841445), UINT32_C(0xCBB7BC66), UINT32_C(0xA3BE7C94), UINT32_C(0x9ED681D3), UINT32_C(0x396C6DD5), UINT32_C(0xF5CF59BE), UINT32_C(0xFA763634), UINT32_C(0x2598A5DC)}, {UINT32_C(0x85CF4FDE), UINT32_C(0xAD2B445A), UINT32_C(0xA0D92F4C), UINT32_C(0xC8CE3F42), UINT32_C(0xF01CD0F5), UINT32_C(0x78356D5B), UINT32_C(0x5D50C9D7), UINT32_C(0x26E44A45)}}, {{UINT32_C(0x4EDF35A5), UINT32_C(0x22EB53E3), UINT32_C(0xAF1A8A60), UINT32_C(0xA0C6CDEF), UINT32_C(0xD07C1EBD), UINT32_C(0x1D31BA2C), UINT32_C(0xD2C2ADE1), UINT32_C(0x513511A0)}, {UINT32_C(0xC4449889), UINT32_C(0xBD3772D4), UINT32_C(0xD3F49C61), UINT32_C(0xAF5EF819), UINT32_C(0x40047745), UINT32_C(0xAAF21599), UINT32_C(0xA54B8080), UINT32_C(0x2128938C)}}, {{UINT32_C(0x73ADBEC8), UINT32_C(0x9761A94A), UINT32_C(0x1FB2F257), UINT32_C(0x4710BBF0), UINT32_C(0xB3920007), UINT32_C(0xFE52603E), UINT32_C(0x7DE06F13), UINT32_C(0x66393750)}, {UINT32_C(0x965AC706), UINT32_C(0x35F4E633), UINT32_C(0x33F953E5), UINT32_C(0xF49DC418), UINT32_C(0x31CFE467), UINT32_C(0x1562AD51), UINT32_C(0x8ADB1F7A), UINT32_C(0x035FB54D)}}, }, { {{UINT32_C(0xFD73062E), UINT32_C(0xF632081F), UINT32_C(0xCB740B59), UINT32_C(0xB2740C19), UINT32_C(0x8751E315), UINT32_C(0x2DFD957F), UINT32_C(0xC21039C2), UINT32_C(0x5722E015)}, {UINT32_C(0xA4E56D39), UINT32_C(0x44781BFC), UINT32_C(0xDA2FBE63), UINT32_C(0x894BD2F7), UINT32_C(0x5DE22DE0), UINT32_C(0x9E81007B), UINT32_C(0xC68788FC), UINT32_C(0x0CED0859)}}, {{UINT32_C(0x8DDA6292), UINT32_C(0x97DD8CF1), UINT32_C(0x27FCF7F1), UINT32_C(0x3E9191F7), UINT32_C(0xDAA6AD44), UINT32_C(0x07885E32), UINT32_C(0xBE9F7E62), UINT32_C(0x624CE66E)}, {UINT32_C(0x1893A3D9), UINT32_C(0x0483DA42), UINT32_C(0x8F2A105F), UINT32_C(0x1041B7EA), UINT32_C(0x429A24B9), UINT32_C(0x5B706F99), UINT32_C(0x167C12E1), UINT32_C(0x30BFBCEE)}}, {{UINT32_C(0xC38251D8), UINT32_C(0xEB2C7218), UINT32_C(0x022B6411), UINT32_C(0x5FE5D8F6), UINT32_C(0x93DCCB63), UINT32_C(0xF62200C1), UINT32_C(0xCFF221E6), UINT32_C(0x2CF0F8F1)}, {UINT32_C(0x9217EE42), UINT32_C(0xDCF1BCD6), UINT32_C(0x9DB2580B), UINT32_C(0x1904879C), UINT32_C(0xF6510164), UINT32_C(0x2DDB7E5D), UINT32_C(0x8A0EAC6B), UINT32_C(0x7BB29985)}}, {{UINT32_C(0x0FCF8397), UINT32_C(0x98313C0E), UINT32_C(0x42C8EEF1), UINT32_C(0xB594D0B7), UINT32_C(0x97E842F7), UINT32_C(0xBD31FC34), UINT32_C(0x8F3ADB9B), UINT32_C(0x49476B9D)}, {UINT32_C(0x50B45445), UINT32_C(0xD1B5FD37), UINT32_C(0xD583A89F), UINT32_C(0x526C51CA), UINT32_C(0x6782C060), UINT32_C(0x5D461F09), UINT32_C(0x27274A60), UINT32_C(0x414023EC)}}, {{UINT32_C(0xEAE4285A), UINT32_C(0x7C809B26), UINT32_C(0x0A066043), UINT32_C(0x939814BF), UINT32_C(0x6C640E3D), UINT32_C(0x9CBAC0BB), UINT32_C(0x30EB1B86), UINT32_C(0x647E22E1)}, {UINT32_C(0x3C7DFA0D), UINT32_C(0x21E2A42D), UINT32_C(0xE2CD0CCE), UINT32_C(0xFF8CC304), UINT32_C(0x3496964C), UINT32_C(0x3DC8C920), UINT32_C(0x2B4DF7C2), UINT32_C(0x5D91FE78)}}, {{UINT32_C(0x96D84346), UINT32_C(0xD5BBBD6E), UINT32_C(0xF91FFA8C), UINT32_C(0x8363527B), UINT32_C(0x7F408588), UINT32_C(0x931D0FDA), UINT32_C(0xB0B19D0F), UINT32_C(0x2C51F17B)}, {UINT32_C(0xFF61C86D), UINT32_C(0x7A693804), UINT32_C(0xB3FFD529), UINT32_C(0xBAB4AC45), UINT32_C(0x4C171C84), UINT32_C(0xEDEA275F), UINT32_C(0xD59B94D9), UINT32_C(0x0520925C)}}, {{UINT32_C(0xE8718BB4), UINT32_C(0xB6A620AA), UINT32_C(0x88D37A61), UINT32_C(0x67851F0F), UINT32_C(0x9984A787), UINT32_C(0xCBEE8DBC), UINT32_C(0xAE834635), UINT32_C(0x7190B766)}, {UINT32_C(0xC9AC1A8E), UINT32_C(0x3A1D7DB4), UINT32_C(0x7B97BCB7), UINT32_C(0x6EEBD5AD), UINT32_C(0x9D0AB769), UINT32_C(0x60978625), UINT32_C(0x7C7F02DD), UINT32_C(0x5AD56C0C)}}, {{UINT32_C(0x2DB3B6F2), UINT32_C(0x2C0003DE), UINT32_C(0xEFCF1DD8), UINT32_C(0x3BE1CE3F), UINT32_C(0x379E6B8A), UINT32_C(0xE2F79872), UINT32_C(0x0B898094), UINT32_C(0x3F9640D8)}, {UINT32_C(0x15B29D41), UINT32_C(0x11EBD937), UINT32_C(0x3EF17D8C), UINT32_C(0xD6A076B9), UINT32_C(0xB38ED3BA), UINT32_C(0x0A2C0016), UINT32_C(0xCCB161CC), UINT32_C(0x64329A02)}}, {{UINT32_C(0xB1ED1DEA), UINT32_C(0xD135032D), UINT32_C(0x42F734A0), UINT32_C(0x43F76848), UINT32_C(0x3C18D8C5), UINT32_C(0x1F6C12BD), UINT32_C(0xC0A304E8), UINT32_C(0x7D7757B7)}, {UINT32_C(0xDE3B6B9F), UINT32_C(0x3F0C2867), UINT32_C(0xB7201E4F), UINT32_C(0x72F98EBB), UINT32_C(0x940E748D), UINT32_C(0xCC408000), UINT32_C(0xAD74B322), UINT32_C(0x34FE6D8F)}}, {{UINT32_C(0xE6D884FE), UINT32_C(0xA12A9359), UINT32_C(0xDE063103), UINT32_C(0xB080A081), UINT32_C(0x97ABB854), UINT32_C(0x672DE27D), UINT32_C(0xEE6F3485), UINT32_C(0x712B0883)}, {UINT32_C(0x2044A2A2), UINT32_C(0xF430BF2D), UINT32_C(0x7D12027A), UINT32_C(0x66561020), UINT32_C(0x2C539C3B), UINT32_C(0x5ED63AD2), UINT32_C(0xFE5EE1D1), UINT32_C(0x7982AAD0)}}, {{UINT32_C(0x3BE94D26), UINT32_C(0x873DC8F6), UINT32_C(0x4B41BD76), UINT32_C(0x90923639), UINT32_C(0x0CBE4B5C), UINT32_C(0xE439A496), UINT32_C(0x11782BF1), UINT32_C(0x424F8D24)}, {UINT32_C(0x49686ED9), UINT32_C(0x6612BD99), UINT32_C(0xFB04E27E), UINT32_C(0x78157AA9), UINT32_C(0x805F809C), UINT32_C(0x844E1616), UINT32_C(0x62CB8BCD), UINT32_C(0x717AEB32)}}, {{UINT32_C(0x5248CF6A), UINT32_C(0xE98C1A0E), UINT32_C(0xB0E4ADF8), UINT32_C(0xC84294A8), UINT32_C(0xA7769275), UINT32_C(0xD35748A4), UINT32_C(0x03363C82), UINT32_C(0x2C3867E1)}, {UINT32_C(0x8F43885A), UINT32_C(0x2EC7AF43), UINT32_C(0x3AE516C7), UINT32_C(0x7979D1A2), UINT32_C(0x8B81056C), UINT32_C(0x059939EC), UINT32_C(0x7E358480), UINT32_C(0x434AA4DD)}}, {{UINT32_C(0x4A5228EA), UINT32_C(0x12EA1C87), UINT32_C(0x4D293B9F), UINT32_C(0x47B48198), UINT32_C(0xE9696688), UINT32_C(0x319CE379), UINT32_C(0x7CE6FD05), UINT32_C(0x7C9FF595)}, {UINT32_C(0x3093E3E4), UINT32_C(0x15E954DF), UINT32_C(0x304015AF), UINT32_C(0xBC98307C), UINT32_C(0x975C69C5), UINT32_C(0x66522DF8), UINT32_C(0x963CE892), UINT32_C(0x4C9EBFB3)}}, {{UINT32_C(0x628FB125), UINT32_C(0x1CEEF18A), UINT32_C(0x4BF30BB6), UINT32_C(0xFB69A234), UINT32_C(0x70C9C864), UINT32_C(0x510EB339), UINT32_C(0x8A89151D), UINT32_C(0x1EE9D1ED)}, {UINT32_C(0x4EE1A486), UINT32_C(0x34094028), UINT32_C(0x2FC79CEE), UINT32_C(0x66440167), UINT32_C(0xC7DA3A75), UINT32_C(0xB597625A), UINT32_C(0x65205AF9), UINT32_C(0x6E5B920E)}}, {{UINT32_C(0xD87C914C), UINT32_C(0x749D0CA4), UINT32_C(0x0D60C59E), UINT32_C(0x55ECBEBB), UINT32_C(0xA65B4652), UINT32_C(0x916A1127), UINT32_C(0x4E4767A3), UINT32_C(0x503964D4)}, {UINT32_C(0x1B1F94D5), UINT32_C(0x8899A4C2), UINT32_C(0x33E0D94D), UINT32_C(0xEFFCAF52), UINT32_C(0xA3DAD87D), UINT32_C(0x61B89B3F), UINT32_C(0x5088D6BE), UINT32_C(0x3CB455F5)}}, {{UINT32_C(0x70678C14), UINT32_C(0x5088A52B), UINT32_C(0x41B00FC3), UINT32_C(0x212823D9), UINT32_C(0x19865BDB), UINT32_C(0x38D5CEB6), UINT32_C(0x12E63491), UINT32_C(0x2E9C7FD7)}, {UINT32_C(0x59E73913), UINT32_C(0x6656F916), UINT32_C(0xE9035A63), UINT32_C(0x57AE9A47), UINT32_C(0xF02B8DAE), UINT32_C(0x970DCF2B), UINT32_C(0x950FF8A9), UINT32_C(0x3366F8A6)}}, }, { {{UINT32_C(0xAC4A8F83), UINT32_C(0x93DABD6F), UINT32_C(0x1CFF0AAD), UINT32_C(0x27233488), UINT32_C(0xF500EDFB), UINT32_C(0xBCAC3181), UINT32_C(0xB5297515), UINT32_C(0x27C6DB15)}, {UINT32_C(0x2F08A89F), UINT32_C(0x9CD142D9), UINT32_C(0x2EAD0A80), UINT32_C(0x3C005423), UINT32_C(0x44A7623A), UINT32_C(0x82845F95), UINT32_C(0x72BC4862), UINT32_C(0x51047070)}}, {{UINT32_C(0xDC1B9159), UINT32_C(0x4303797A), UINT32_C(0x5D9C9AC1), UINT32_C(0x7842434B), UINT32_C(0x6009FE2E), UINT32_C(0x8A36ED2D), UINT32_C(0x5106429C), UINT32_C(0x11FE35C9)}, {UINT32_C(0x23554A92), UINT32_C(0xDF20A393), UINT32_C(0x932E37C2), UINT32_C(0x59364A48), UINT32_C(0x7754A5DF), UINT32_C(0x6D7DE6AE), UINT32_C(0x462725AC), UINT32_C(0x00CCC6A3)}}, {{UINT32_C(0xBAE83077), UINT32_C(0xB1F86CA5), UINT32_C(0x5110782C), UINT32_C(0x82FE28A5), UINT32_C(0xD942182C), UINT32_C(0x8031BBF3), UINT32_C(0x410D9F83), UINT32_C(0x4F1F3815)}, {UINT32_C(0x835ABA65), UINT32_C(0xE57F9907), UINT32_C(0x5AA10903), UINT32_C(0x0A8220C2), UINT32_C(0x8812602E), UINT32_C(0x2E984717), UINT32_C(0x2A7D2C6C), UINT32_C(0x0AEC467D)}}, {{UINT32_C(0xC4DBED03), UINT32_C(0xC779F708), UINT32_C(0x8582BD4E), UINT32_C(0x10A30CD8), UINT32_C(0x243FEAEE), UINT32_C(0xFA5646C5), UINT32_C(0xCA459EF7), UINT32_C(0x1CFAF38E)}, {UINT32_C(0x95BC8077), UINT32_C(0xCCDD0146), UINT32_C(0x65858C49), UINT32_C(0x4ECDE919), UINT32_C(0x77FEE1B6), UINT32_C(0x562764C6), UINT32_C(0x43524407), UINT32_C(0x3CF5A3AB)}}, {{UINT32_C(0x0F6EF445), UINT32_C(0x0CCEAADD), UINT32_C(0xC297AFAF), UINT32_C(0x690C12C1), UINT32_C(0xC15B3D7B), UINT32_C(0xD67AA6EA), UINT32_C(0x9FF8884E), UINT32_C(0x445D233C)}, {UINT32_C(0x6CAD3234), UINT32_C(0xC38FFD09), UINT32_C(0xC7002F6F), UINT32_C(0xA690FFD1), UINT32_C(0x11ACB469), UINT32_C(0xD445E851), UINT32_C(0x97166E52), UINT32_C(0x64EE1380)}}, {{UINT32_C(0xCEFBFB0A), UINT32_C(0x1EB031CC), UINT32_C(0xAA40D6A9), UINT32_C(0x60F3DEF4), UINT32_C(0xF96FCAFE), UINT32_C(0x240F7CA5), UINT32_C(0xE4450A06), UINT32_C(0x53AF2F10)}, {UINT32_C(0xA84058EF), UINT32_C(0xE8AF980F), UINT32_C(0x34AFFC6E), UINT32_C(0x3E300017), UINT32_C(0xC86B458C), UINT32_C(0x62D1D094), UINT32_C(0x75732C7E), UINT32_C(0x5338383D)}}, {{UINT32_C(0x04D82638), UINT32_C(0x6BD46AEB), UINT32_C(0x62E645A0), UINT32_C(0x86940A31), UINT32_C(0xA5736B40), UINT32_C(0xD025B4B1), UINT32_C(0x924E8E5E), UINT32_C(0x1056D9D0)}, {UINT32_C(0x1DB58101), UINT32_C(0x3D0495CC), UINT32_C(0x2D677581), UINT32_C(0xC300C6E7), UINT32_C(0x610AECEC), UINT32_C(0xFE38B898), UINT32_C(0xD66F64ED), UINT32_C(0x1C8B94E2)}}, {{UINT32_C(0x06D0C7EC), UINT32_C(0x5C9C3A37), UINT32_C(0xB8A74918), UINT32_C(0x6B4B5437), UINT32_C(0x9052A235), UINT32_C(0x85689C98), UINT32_C(0x87B53AA6), UINT32_C(0x4F7C2C8D)}, {UINT32_C(0xD8F1D334), UINT32_C(0x9FCD866F), UINT32_C(0x6898223C), UINT32_C(0xDBAAA227), UINT32_C(0x95C7B35A), UINT32_C(0x933DE9DA), UINT32_C(0x3EA949FD), UINT32_C(0x329AE20F)}}, {{UINT32_C(0x948A2ECD), UINT32_C(0xB83547AF), UINT32_C(0xBE34890C), UINT32_C(0xEBF7C1E7), UINT32_C(0xF8211C33), UINT32_C(0x5F0F44F3), UINT32_C(0xC6927638), UINT32_C(0x14A10BDB)}, {UINT32_C(0x5B579BF5), UINT32_C(0x7FD88567), UINT32_C(0x5B7417F0), UINT32_C(0xD7C71281), UINT32_C(0x2083502E), UINT32_C(0x7C04F111), UINT32_C(0xE9AD6283), UINT32_C(0x42029128)}}, {{UINT32_C(0x2C5C0928), UINT32_C(0x32FBFFAE), UINT32_C(0x1469F1D3), UINT32_C(0x4E31D312), UINT32_C(0xD79F51A2), UINT32_C(0x17307E28), UINT32_C(0x79A51EBD), UINT32_C(0x546C91AF)}, {UINT32_C(0x668086A6), UINT32_C(0x041D464D), UINT32_C(0x0DB695DB), UINT32_C(0x4986BDE5), UINT32_C(0xEF317AA0), UINT32_C(0xCBA5F6EE), UINT32_C(0x730221D3), UINT32_C(0x5879259F)}}, {{UINT32_C(0x253BB4BA), UINT32_C(0xBD9C5CA5), UINT32_C(0x0E2A75BB), UINT32_C(0xBBFC6079), UINT32_C(0x67AB9033), UINT32_C(0xB5F11AE3), UINT32_C(0xAC2BFAFE), UINT32_C(0x6411CB1E)}, {UINT32_C(0xBF5390B0), UINT32_C(0x750734FE), UINT32_C(0x879A3D3D), UINT32_C(0xA044BED4), UINT32_C(0xA0C47093), UINT32_C(0xE1E9F0E4), UINT32_C(0xB64DA48C), UINT32_C(0x3BCAD93E)}}, {{UINT32_C(0xB37E16C2), UINT32_C(0xAFC6BCB6), UINT32_C(0x2331B0CD), UINT32_C(0xB54F56C0), UINT32_C(0x5BBFBEE7), UINT32_C(0x725E81B4), UINT32_C(0xE8B9D922), UINT32_C(0x2AE0C039)}, {UINT32_C(0xDB958319), UINT32_C(0x85301041), UINT32_C(0x0681C4A4), UINT32_C(0xDFAE34DD), UINT32_C(0xCBF7BB2B), UINT32_C(0x906C9219), UINT32_C(0x10A1710A), UINT32_C(0x1463E9EF)}}, {{UINT32_C(0x21E6FC9D), UINT32_C(0x41E6C388), UINT32_C(0x24A39EC8), UINT32_C(0x0B629A1E), UINT32_C(0x1AEF7A46), UINT32_C(0xC62F60BE), UINT32_C(0xC5A16B6E), UINT32_C(0x59A50B54)}, {UINT32_C(0x285B891E), UINT32_C(0x41CA367A), UINT32_C(0xE2F8AF59), UINT32_C(0x70A6CE6B), UINT32_C(0xCBCEEF98), UINT32_C(0x74058747), UINT32_C(0x601C375F), UINT32_C(0x4B912170)}}, {{UINT32_C(0x734EE866), UINT32_C(0x7D975CE2), UINT32_C(0xA09F5F14), UINT32_C(0x8D3572C6), UINT32_C(0x2232EE5E), UINT32_C(0x1DB4CC88), UINT32_C(0x7C04C250), UINT32_C(0x6C979049)}, {UINT32_C(0xAE1EBC20), UINT32_C(0xB5EC7706), UINT32_C(0xE21AAA32), UINT32_C(0x7BDBD34D), UINT32_C(0xC5D1C733), UINT32_C(0xAD4125FD), UINT32_C(0x731E6B09), UINT32_C(0x28B0302D)}}, {{UINT32_C(0x1521415E), UINT32_C(0xD68EEC49), UINT32_C(0x092763C0), UINT32_C(0x31963424), UINT32_C(0x0BFB513B), UINT32_C(0xCA90F48D), UINT32_C(0x573A056A), UINT32_C(0x4814DDFF)}, {UINT32_C(0x400E804D), UINT32_C(0x7E67599C), UINT32_C(0x51FD0596), UINT32_C(0x35452750), UINT32_C(0xDB331B66), UINT32_C(0x45EDD7FB), UINT32_C(0xBDEDE107), UINT32_C(0x172DA8B3)}}, {{UINT32_C(0xB5BEB1C8), UINT32_C(0xD46F284C), UINT32_C(0x7B125701), UINT32_C(0x5DE5D3F1), UINT32_C(0x248053D1), UINT32_C(0xC3BA591E), UINT32_C(0x9C8F487C), UINT32_C(0x4E67F1F2)}, {UINT32_C(0x8C252EC5), UINT32_C(0x380D93E4), UINT32_C(0x22BC5CF6), UINT32_C(0x913F96F1), UINT32_C(0xD7BAA634), UINT32_C(0xC1F06BBD), UINT32_C(0xA30BF1B9), UINT32_C(0x7B625179)}}, }, { {{UINT32_C(0xABD424AC), UINT32_C(0x125D398D), UINT32_C(0x9CC70479), UINT32_C(0xFE65DF03), UINT32_C(0xFB5EC82C), UINT32_C(0x89A31794), UINT32_C(0xA31C5DCA), UINT32_C(0x63EFFB55)}, {UINT32_C(0x045B576A), UINT32_C(0x948F7571), UINT32_C(0x022B5FC8), UINT32_C(0xEC9F6FAB), UINT32_C(0xBD9F0DD2), UINT32_C(0x174DC936), UINT32_C(0xF4C4EE8B), UINT32_C(0x5EEA65E6)}}, {{UINT32_C(0x8B800D67), UINT32_C(0xE97070AE), UINT32_C(0xB59B433E), UINT32_C(0xB9CB66FA), UINT32_C(0xC6141364), UINT32_C(0xC4496574), UINT32_C(0x6A9677EA), UINT32_C(0x530AA9B5)}, {UINT32_C(0x75200533), UINT32_C(0x4A4E2EE3), UINT32_C(0x0F20A9BE), UINT32_C(0x4C38A509), UINT32_C(0xEA683510), UINT32_C(0x0A6FFBA4), UINT32_C(0x65732EA9), UINT32_C(0x7340EFEE)}}, {{UINT32_C(0xE41C2B43), UINT32_C(0x3A5612E4), UINT32_C(0xFCB5C0A8), UINT32_C(0x31F51B80), UINT32_C(0xBD1F03E6), UINT32_C(0x4C5BBA64), UINT32_C(0x3694ADCA), UINT32_C(0x25387243)}, {UINT32_C(0x1F7E4D5C), UINT32_C(0xF114EFAF), UINT32_C(0x4EA3A59D), UINT32_C(0xBEA5223A), UINT32_C(0x67EB414D), UINT32_C(0x82CEF46F), UINT32_C(0x9B6CAC3D), UINT32_C(0x09D351C1)}}, {{UINT32_C(0x810F5054), UINT32_C(0xC69F25CE), UINT32_C(0x548A2CDF), UINT32_C(0xE33E5E97), UINT32_C(0x36946D3C), UINT32_C(0x20B3F442), UINT32_C(0x65DF2D3B), UINT32_C(0x572C0F5C)}, {UINT32_C(0xCC953CC8), UINT32_C(0xFC5B2DF3), UINT32_C(0xD1CCADC6), UINT32_C(0x934D54C0), UINT32_C(0xA6E7B4DB), UINT32_C(0x828A906E), UINT32_C(0x5AD3076F), UINT32_C(0x610D36C1)}}, {{UINT32_C(0x74F56E27), UINT32_C(0x960B0A01), UINT32_C(0xCF3FEA75), UINT32_C(0x9942C6AC), UINT32_C(0x82C51490), UINT32_C(0x2E4D786D), UINT32_C(0x9A4749C9), UINT32_C(0x23A51636)}, {UINT32_C(0x2F7560FC), UINT32_C(0xD86AB36A), UINT32_C(0xDDB852A9), UINT32_C(0xDA66B49D), UINT32_C(0x544C1023), UINT32_C(0x84E1587D), UINT32_C(0x6AA3C1DA), UINT32_C(0x7AB8BC69)}}, {{UINT32_C(0xA5F30701), UINT32_C(0xFD0397AF), UINT32_C(0xDFC8B187), UINT32_C(0x96FFB15D), UINT32_C(0x1475E520), UINT32_C(0xF2C86453), UINT32_C(0xEF37300E), UINT32_C(0x71521986)}, {UINT32_C(0x68006D45), UINT32_C(0xD81F75A8), UINT32_C(0xCBC06D4D), UINT32_C(0xDF7814EA), UINT32_C(0x2E8E9150), UINT32_C(0x5BCF959B), UINT32_C(0x56668C18), UINT32_C(0x146D37D7)}}, {{UINT32_C(0x88E8DC77), UINT32_C(0x1ABD7312), UINT32_C(0xC1C3A4DB), UINT32_C(0x0B34B877), UINT32_C(0xF844BACE), UINT32_C(0x85739093), UINT32_C(0x04A7CF80), UINT32_C(0x5DEDCF8F)}, {UINT32_C(0xD87CDBDC), UINT32_C(0xD8BB237E), UINT32_C(0xCCBA784F), UINT32_C(0x89852174), UINT32_C(0xB2FAECC3), UINT32_C(0x6843BAB8), UINT32_C(0xAA4BBA32), UINT32_C(0x15268302)}}, {{UINT32_C(0xB23D3770), UINT32_C(0x3B58225A), UINT32_C(0x10CC9DE6), UINT32_C(0x9357EB59), UINT32_C(0x42ECF80E), UINT32_C(0x8665F92A), UINT32_C(0xC875C031), UINT32_C(0x4819CC9D)}, {UINT32_C(0xC34B979B), UINT32_C(0x09CBE5D8), UINT32_C(0x7E1D0E63), UINT32_C(0x161E8AC0), UINT32_C(0x282E36E8), UINT32_C(0x874DF24F), UINT32_C(0x0712A0CD), UINT32_C(0x6528E6FA)}}, {{UINT32_C(0x107633E4), UINT32_C(0xE37AD786), UINT32_C(0xCF1FE646), UINT32_C(0x122D7123), UINT32_C(0xCFA93AC0), UINT32_C(0x1E6E682B), UINT32_C(0x276200DB), UINT32_C(0x0A25F4EE)}, {UINT32_C(0xE25FBB01), UINT32_C(0x44E290ED), UINT32_C(0xC3C1B418), UINT32_C(0x3E392DF5), UINT32_C(0x83EBE689), UINT32_C(0xE5E15745), UINT32_C(0x4B999926), UINT32_C(0x016139D2)}}, {{UINT32_C(0x65D7DA58), UINT32_C(0x048915B0), UINT32_C(0xA78F3D9E), UINT32_C(0x6EF7C4EF), UINT32_C(0xAD614974), UINT32_C(0x78CCCE55), UINT32_C(0x54B95643), UINT32_C(0x43DB7DA0)}, {UINT32_C(0xE53F1A67), UINT32_C(0xFC423B70), UINT32_C(0x4EFE2427), UINT32_C(0x8F8BED81), UINT32_C(0x95B045EB), UINT32_C(0xF5D6AD5F), UINT32_C(0xD7407716), UINT32_C(0x23582D5D)}}, {{UINT32_C(0x9F674472), UINT32_C(0x9E5D24FB), UINT32_C(0x68626041), UINT32_C(0x1AE18636), UINT32_C(0x7ABC4380), UINT32_C(0x8977E68F), UINT32_C(0x05AF2D04), UINT32_C(0x7D9FF8E8)}, {UINT32_C(0x4197C4E1), UINT32_C(0x9D31195F), UINT32_C(0x4400F35E), UINT32_C(0x9F3F6E11), UINT32_C(0x7BBEF801), UINT32_C(0x1A87D586), UINT32_C(0x952BB025), UINT32_C(0x42AE0380)}}, {{UINT32_C(0x6B96482B), UINT32_C(0xC6A3ED75), UINT32_C(0xA9C6DD2F), UINT32_C(0x58B38724), UINT32_C(0x9297FB47), UINT32_C(0x464C8CE8), UINT32_C(0xFB6D6C55), UINT32_C(0x0245797E)}, {UINT32_C(0xC0B58C8F), UINT32_C(0xBE141C80), UINT32_C(0x77766C48), UINT32_C(0xC4C405CB), UINT32_C(0xD10C0F31), UINT32_C(0xD57EE428), UINT32_C(0x50E8FE7B), UINT32_C(0x03D4862B)}}, {{UINT32_C(0x1DC3722C), UINT32_C(0x21976F8A), UINT32_C(0x5F476F0D), UINT32_C(0x02EC30D5), UINT32_C(0xCA434B06), UINT32_C(0xD711E01D), UINT32_C(0x99FF2488), UINT32_C(0x551AC910)}, {UINT32_C(0xA56CA3C7), UINT32_C(0x24AEC72D), UINT32_C(0x891896CE), UINT32_C(0x2DD1219A), UINT32_C(0x67882925), UINT32_C(0xD84BAD19), UINT32_C(0x9D4778EF), UINT32_C(0x27E65D7F)}}, {{UINT32_C(0x4685687F), UINT32_C(0x09F19C8F), UINT32_C(0xBBB58BD3), UINT32_C(0xB7C7B9E3), UINT32_C(0x8FA34DD5), UINT32_C(0x349D03A7), UINT32_C(0x8D59E889), UINT32_C(0x41F9D003)}, {UINT32_C(0x2B3ED6FA), UINT32_C(0xCF3367D4), UINT32_C(0x378DA1ED), UINT32_C(0xCF3C6715), UINT32_C(0x4E935E9A), UINT32_C(0x86DC3903), UINT32_C(0xF08CB23A), UINT32_C(0x50692CFF)}}, {{UINT32_C(0xC2D65C87), UINT32_C(0x18CA772A), UINT32_C(0x4F1D0CB6), UINT32_C(0xC9092B38), UINT32_C(0xBBD2015A), UINT32_C(0x91E71CF1), UINT32_C(0x4F3DEF26), UINT32_C(0x4A09DAAC)}, {UINT32_C(0x735C9281), UINT32_C(0x7CCA7B4A), UINT32_C(0x1BF0AAEE), UINT32_C(0x2028F144), UINT32_C(0xACB5B748), UINT32_C(0xCF72A082), UINT32_C(0x43299B85), UINT32_C(0x58957D5D)}}, {{UINT32_C(0x901F1789), UINT32_C(0x64BB164E), UINT32_C(0x5AEF97BF), UINT32_C(0xC68766E6), UINT32_C(0x942B6DCE), UINT32_C(0x30ECA3E2), UINT32_C(0xF9E798F3), UINT32_C(0x632676FA)}, {UINT32_C(0xF13896EE), UINT32_C(0xB52533D3), UINT32_C(0x2D8A29C1), UINT32_C(0xAD912831), UINT32_C(0xBC14E7FF), UINT32_C(0x12F1B9A4), UINT32_C(0x8828D196), UINT32_C(0x4E1D23FD)}}, }, { {{UINT32_C(0xEF494793), UINT32_C(0xC4F89E00), UINT32_C(0xC93D2F55), UINT32_C(0xA6044BC3), UINT32_C(0x8797F8AF), UINT32_C(0x68E60B58), UINT32_C(0x841E4B5E), UINT32_C(0x4D5969FA)}, {UINT32_C(0xD759BB2D), UINT32_C(0xB1EE70FB), UINT32_C(0x66D8AD01), UINT32_C(0x9AC30433), UINT32_C(0x84E9F677), UINT32_C(0xD93F23DB), UINT32_C(0xC53029A4), UINT32_C(0x2AD9D16F)}}, {{UINT32_C(0xDD882D23), UINT32_C(0xD01FC16B), UINT32_C(0xFA5B4128), UINT32_C(0x3BF921F1), UINT32_C(0x235BC9CE), UINT32_C(0x3D3FE145), UINT32_C(0x62E686E1), UINT32_C(0x59556716)}, {UINT32_C(0x79F99D69), UINT32_C(0xE329A7C2), UINT32_C(0xA4F5F5F5), UINT32_C(0xA67EF5EC), UINT32_C(0xD5A34FF0), UINT32_C(0xF96A41EE), UINT32_C(0x74674B5F), UINT32_C(0x09D0CF06)}}, {{UINT32_C(0x6135B7E2), UINT32_C(0x8CCDF71C), UINT32_C(0xAFB6AD6B), UINT32_C(0x91F1E33E), UINT32_C(0xDB0CFEDF), UINT32_C(0xC452F439), UINT32_C(0xC05B06D4), UINT32_C(0x15724711)}, {UINT32_C(0xA3BC1277), UINT32_C(0x5FEE0E0E), UINT32_C(0x8D8BA081), UINT32_C(0xD6847FAD), UINT32_C(0x0D4C8DDD), UINT32_C(0x8B02666C), UINT32_C(0xC35559DB), UINT32_C(0x149E5009)}}, {{UINT32_C(0x5461D9CA), UINT32_C(0xB4D0D2C9), UINT32_C(0xCE0A3973), UINT32_C(0xFE7993B6), UINT32_C(0xD6032E95), UINT32_C(0x42B2A500), UINT32_C(0x217131C6), UINT32_C(0x4DEEE35A)}, {UINT32_C(0xFFE7C2EB), UINT32_C(0x94E65C8C), UINT32_C(0xB19D4B4A), UINT32_C(0x0DAD7785), UINT32_C(0x925613F9), UINT32_C(0xEEBA6794), UINT32_C(0xE30494CB), UINT32_C(0x6AF45BBE)}}, {{UINT32_C(0x32F43F67), UINT32_C(0x41352A61), UINT32_C(0x48F886D3), UINT32_C(0x0D218DE9), UINT32_C(0x9B33B0F6), UINT32_C(0xCDFC0C55), UINT32_C(0x6C5B90CD), UINT32_C(0x21FC6353)}, {UINT32_C(0x7898AFF2), UINT32_C(0x5D8CA5AD), UINT32_C(0x24287C30), UINT32_C(0xA743F80E), UINT32_C(0x9084A3A2), UINT32_C(0x4D037131), UINT32_C(0xB5EFC978), UINT32_C(0x52041EED)}}, {{UINT32_C(0xCC1BCFCB), UINT32_C(0x80B588EE), UINT32_C(0xE5CE0035), UINT32_C(0xAD871A11), UINT32_C(0xF966D746), UINT32_C(0xF47224D0), UINT32_C(0xB387FCC2), UINT32_C(0x5215A9D2)}, {UINT32_C(0x695C02AF), UINT32_C(0xC54EB2E7), UINT32_C(0xDFC8493D), UINT32_C(0x36FD06BC), UINT32_C(0x98CE7C76), UINT32_C(0x1CE8A9AA), UINT32_C(0x644D398B), UINT32_C(0x058DFCBF)}}, {{UINT32_C(0x5BB81464), UINT32_C(0xCD7E67DC), UINT32_C(0x047A7789), UINT32_C(0xE7A19301), UINT32_C(0x573E837B), UINT32_C(0xCCC31EE5), UINT32_C(0xAF7703D5), UINT32_C(0x25EE99AF)}, {UINT32_C(0xDDB3E807), UINT32_C(0x34FDD6DA), UINT32_C(0x109092DD), UINT32_C(0x273D8288), UINT32_C(0xB7357633), UINT32_C(0xF8F2464F), UINT32_C(0xCCAA31D5), UINT32_C(0x26B2CBAD)}}, {{UINT32_C(0xF707F9F7), UINT32_C(0xBA9CFEDE), UINT32_C(0xAC4975FB), UINT32_C(0xA9A6896C), UINT32_C(0xBB1C35E4), UINT32_C(0x62135D9D), UINT32_C(0xCBA133D2), UINT32_C(0x13AE840F)}, {UINT32_C(0x4C2BA3A9), UINT32_C(0x6ABF3913), UINT32_C(0x6D8A62C1), UINT32_C(0xE4D8508A), UINT32_C(0x66D96607), UINT32_C(0xF2565354), UINT32_C(0xB6CABAE8), UINT32_C(0x5C368CCE)}}, {{UINT32_C(0x8B3999BB), UINT32_C(0x0C3B52E8), UINT32_C(0xEF691871), UINT32_C(0xB752E28F), UINT32_C(0xF17D0D2D), UINT32_C(0xA0460ABC), UINT32_C(0xB7741F2C), UINT32_C(0x7DDCE3C1)}, {UINT32_C(0x3673000F), UINT32_C(0x076A6BAB), UINT32_C(0x425E8A9D), UINT32_C(0xCDB1CD2B), UINT32_C(0x2606EAB5), UINT32_C(0x357FCFFF), UINT32_C(0x035DE7B4), UINT32_C(0x308644F8)}}, {{UINT32_C(0x6D6FF45E), UINT32_C(0xBA64A127), UINT32_C(0x6B0C3CEF), UINT32_C(0x1F52B6AE), UINT32_C(0xCBF496CB), UINT32_C(0x91295179), UINT32_C(0xA1B12BE4), UINT32_C(0x2B986FAD)}, {UINT32_C(0x44DBAF57), UINT32_C(0x243D2366), UINT32_C(0x346E88C2), UINT32_C(0x48E22BBA), UINT32_C(0x8BBAFA0D), UINT32_C(0xCDFB7957), UINT32_C(0x0D70670E), UINT32_C(0x094ED36E)}}, {{UINT32_C(0xA0D60407), UINT32_C(0x2BAD1539), UINT32_C(0x6E744111), UINT32_C(0xC1A9286E), UINT32_C(0x81A6DCAA), UINT32_C(0x6D08C0DB), UINT32_C(0x80AFB34F), UINT32_C(0x108F35EC)}, {UINT32_C(0x1E3E34AE), UINT32_C(0xBE79A6E3), UINT32_C(0x16D524E5), UINT32_C(0x206EAA28), UINT32_C(0x344ABA64), UINT32_C(0x563B6E1C), UINT32_C(0x3207CA68), UINT32_C(0x6C362A61)}}, {{UINT32_C(0xEF9A9A0F), UINT32_C(0x04D8145B), UINT32_C(0xA15B6247), UINT32_C(0x8B57559B), UINT32_C(0x303AFBF3), UINT32_C(0x72D53570), UINT32_C(0xD6DB5736), UINT32_C(0x01C36B41)}, {UINT32_C(0x1173B5FA), UINT32_C(0x94D583C9), UINT32_C(0x013C8AAA), UINT32_C(0x71F8E12D), UINT32_C(0xF29CB838), UINT32_C(0xA4B5A532), UINT32_C(0x7CE4EBA4), UINT32_C(0x4B179700)}}, {{UINT32_C(0x0CE86FC3), UINT32_C(0x69CFA7B0), UINT32_C(0xD60E076C), UINT32_C(0x3705D7C0), UINT32_C(0xB1091E10), UINT32_C(0xB1A1464A), UINT32_C(0x7FE80950), UINT32_C(0x097945A9)}, {UINT32_C(0x9AA381E3), UINT32_C(0xD9C71A95), UINT32_C(0xA410FF56), UINT32_C(0x2A929073), UINT32_C(0xF0FEB121), UINT32_C(0x79EF8353), UINT32_C(0x5F3107E5), UINT32_C(0x1437C4B0)}}, {{UINT32_C(0x621DB2E5), UINT32_C(0xC5128C8B), UINT32_C(0x51A9499A), UINT32_C(0x4E9C9B2E), UINT32_C(0xD8CD7594), UINT32_C(0x11535880), UINT32_C(0xB0697C07), UINT32_C(0x35A26F59)}, {UINT32_C(0xC43B624E), UINT32_C(0xAB3F4B75), UINT32_C(0xB8E03E6B), UINT32_C(0x69F82105), UINT32_C(0xFB04E036), UINT32_C(0xFB268288), UINT32_C(0xA0BDB41C), UINT32_C(0x6A5E6BD3)}}, {{UINT32_C(0xC8082916), UINT32_C(0x8C716A1A), UINT32_C(0x4592472C), UINT32_C(0xB1D1B152), UINT32_C(0x3AB6938A), UINT32_C(0x63657A6D), UINT32_C(0xF03214AE), UINT32_C(0x44882EB6)}, {UINT32_C(0xC615AF7D), UINT32_C(0x19575B8A), UINT32_C(0x35EE3D98), UINT32_C(0x14D740C1), UINT32_C(0x57768D2D), UINT32_C(0xBC478E89), UINT32_C(0x13FC5E4C), UINT32_C(0x30CC8FA2)}}, {{UINT32_C(0x4EBE1E7C), UINT32_C(0x705607C5), UINT32_C(0x284EDA2B), UINT32_C(0x631E5B88), UINT32_C(0x07F54DDB), UINT32_C(0x07E9E39C), UINT32_C(0x8DCF6BC5), UINT32_C(0x4E554D88)}, {UINT32_C(0x0CBAB0FE), UINT32_C(0x12E9FB20), UINT32_C(0xBA5E007F), UINT32_C(0x6F3BC7CE), UINT32_C(0xBC871DF6), UINT32_C(0xA770BA1D), UINT32_C(0xFE01142C), UINT32_C(0x541AA4C6)}}, }, { {{UINT32_C(0xF2412EC7), UINT32_C(0xBFE26700), UINT32_C(0xCFE96AF4), UINT32_C(0x0E975796), UINT32_C(0xDD6B04F7), UINT32_C(0x7D30BF7C), UINT32_C(0xF1D8FCE4), UINT32_C(0x5421925D)}, {UINT32_C(0xEC709107), UINT32_C(0x1CF5E9F5), UINT32_C(0xB4580AA9), UINT32_C(0x124FCFC2), UINT32_C(0x67A835B3), UINT32_C(0x02F7012B), UINT32_C(0x47C0760F), UINT32_C(0x753FE01B)}}, {{UINT32_C(0xB1D2A896), UINT32_C(0x82FD5D47), UINT32_C(0x54E75DDB), UINT32_C(0x7EABC175), UINT32_C(0x1AB080BC), UINT32_C(0x724FC3A8), UINT32_C(0xA75C31DD), UINT32_C(0x363D6016)}, {UINT32_C(0x863F308F), UINT32_C(0x5D465FF2), UINT32_C(0xE515ADCB), UINT32_C(0x9EC70664), UINT32_C(0xB3BC206A), UINT32_C(0x4BD7A1A2), UINT32_C(0x4A167D34), UINT32_C(0x2022576C)}}, {{UINT32_C(0x5CD6AC65), UINT32_C(0xF5AC3451), UINT32_C(0x5839F554), UINT32_C(0x7629731E), UINT32_C(0x93545A60), UINT32_C(0xA3260AE3), UINT32_C(0xA7AD1979), UINT32_C(0x49D190E8)}, {UINT32_C(0xF0B35045), UINT32_C(0x5AA8492F), UINT32_C(0x2584E651), UINT32_C(0x4A5FAB7B), UINT32_C(0x395E2AAE), UINT32_C(0x5A05420E), UINT32_C(0x547B4038), UINT32_C(0x30613C78)}}, {{UINT32_C(0xF9DAE7E6), UINT32_C(0x47E1C59D), UINT32_C(0x247A5A9D), UINT32_C(0x8D68839B), UINT32_C(0xC1A80D5E), UINT32_C(0x663B5977), UINT32_C(0x40D8CF32), UINT32_C(0x5E51F872)}, {UINT32_C(0xECE49494), UINT32_C(0x88ADBF9E), UINT32_C(0x1792BAE8), UINT32_C(0x40B4AC5C), UINT32_C(0x9A1B3314), UINT32_C(0x278200D1), UINT32_C(0xD9F83584), UINT32_C(0x7D15320E)}}, {{UINT32_C(0xEAF2BFF8), UINT32_C(0xFE6DAA74), UINT32_C(0xC156AA6B), UINT32_C(0x6E4EE4C0), UINT32_C(0xD0F4E7D5), UINT32_C(0xD9310FF8), UINT32_C(0x7BB0C42D), UINT32_C(0x552EEF9E)}, {UINT32_C(0xFDC69E1A), UINT32_C(0x323FF6F1), UINT32_C(0x41D79365), UINT32_C(0x00FA66B7), UINT32_C(0xA96B22B4), UINT32_C(0x0006B16E), UINT32_C(0xD20F07BE), UINT32_C(0x71BBC653)}}, {{UINT32_C(0xA440FA1C), UINT32_C(0x89A7B7EE), UINT32_C(0x757CD658), UINT32_C(0x52BB5278), UINT32_C(0xB0CDDEA4), UINT32_C(0xC5906F4B), UINT32_C(0x5DE2D8DA), UINT32_C(0x66AAAFEE)}, {UINT32_C(0x53B6E226), UINT32_C(0x4D5E016A), UINT32_C(0x1993A1D7), UINT32_C(0xA2F73DC6), UINT32_C(0xA09DD554), UINT32_C(0x7CDD4C1D), UINT32_C(0xAB416627), UINT32_C(0x6F723079)}}, {{UINT32_C(0xC4E5C4AF), UINT32_C(0xE641639E), UINT32_C(0x371CC648), UINT32_C(0x8BC6100D), UINT32_C(0x9B216E8A), UINT32_C(0x7BD161B1), UINT32_C(0xF810DB32), UINT32_C(0x58098AEB)}, {UINT32_C(0x5AD92372), UINT32_C(0xEE52BB46), UINT32_C(0xEEF938CA), UINT32_C(0x4B2C48E1), UINT32_C(0xAB43A5D0), UINT32_C(0xE8FDE4D6), UINT32_C(0xA5284C83), UINT32_C(0x459274CD)}}, {{UINT32_C(0xD015095D), UINT32_C(0xA98925B0), UINT32_C(0x4611A1A5), UINT32_C(0xC8969F5F), UINT32_C(0x2CE4663B), UINT32_C(0xBDDCD62F), UINT32_C(0xA076C8BE), UINT32_C(0x1C9D9007)}, {UINT32_C(0x749F7BE5), UINT32_C(0xE8DE8890), UINT32_C(0xFF208E75), UINT32_C(0xC9E455E7), UINT32_C(0x8F5FAC9A), UINT32_C(0xDCEE17A9), UINT32_C(0x68A3A666), UINT32_C(0x776B72D3)}}, {{UINT32_C(0xFEE0E89A), UINT32_C(0x28C7D648), UINT32_C(0x463AF60D), UINT32_C(0x621B370F), UINT32_C(0x5ADC8ACD), UINT32_C(0x9DC1548E), UINT32_C(0xA0B49504), UINT32_C(0x48032ACF)}, {UINT32_C(0x85E992D5), UINT32_C(0x146C6EAC), UINT32_C(0x5CB491E0), UINT32_C(0x5A2CB577), UINT32_C(0x454C120A), UINT32_C(0x669DD6D4), UINT32_C(0x98203C39), UINT32_C(0x3431AB33)}}, {{UINT32_C(0x9DE017BF), UINT32_C(0xE8761503), UINT32_C(0xB60AE61F), UINT32_C(0xAB117D2F), UINT32_C(0x827937FF), UINT32_C(0x0846463F), UINT32_C(0x6BD89C65), UINT32_C(0x45E6BD40)}, {UINT32_C(0xA613BDB8), UINT32_C(0x3160AD67), UINT32_C(0xB8714A49), UINT32_C(0xBD5266F3), UINT32_C(0x51A233E4), UINT32_C(0xF7D29C47), UINT32_C(0x4DE6A90C), UINT32_C(0x6887B48D)}}, {{UINT32_C(0xDFDE1EF8), UINT32_C(0x087290A5), UINT32_C(0xA166950A), UINT32_C(0xC70CCB52), UINT32_C(0x4A170AAE), UINT32_C(0xAA7F095B), UINT32_C(0x5517CA0B), UINT32_C(0x15301F4E)}, {UINT32_C(0x302F1F84), UINT32_C(0x3C86B787), UINT32_C(0x44676E39), UINT32_C(0x95D41535), UINT32_C(0x9DF5F751), UINT32_C(0xBFEC4AE3), UINT32_C(0x304923D3), UINT32_C(0x4A0D3986)}}, {{UINT32_C(0x79B1390C), UINT32_C(0x70FAABA9), UINT32_C(0x62BA8B9E), UINT32_C(0xA9067EEE), UINT32_C(0x1E17DF6F), UINT32_C(0x98789503), UINT32_C(0x78D5B295), UINT32_C(0x5997E8AE)}, {UINT32_C(0xAE0C6768), UINT32_C(0x31E13AD7), UINT32_C(0xEF17A7B1), UINT32_C(0x23262F05), UINT32_C(0x49B7B101), UINT32_C(0x15803227), UINT32_C(0x36B5BA70), UINT32_C(0x1234A9C5)}}, {{UINT32_C(0x395793AC), UINT32_C(0xED65C961), UINT32_C(0xCCDE1C47), UINT32_C(0x01157CD8), UINT32_C(0x1D5614DF), UINT32_C(0x0D0240B0), UINT32_C(0x568E83A5), UINT32_C(0x0F0DA1EF)}, {UINT32_C(0xC0B783C1), UINT32_C(0x57C90846), UINT32_C(0x81E2F613), UINT32_C(0x4501048C), UINT32_C(0xA2709DC1), UINT32_C(0x03D8A69B), UINT32_C(0xA97CCE0E), UINT32_C(0x06F365C4)}}, {{UINT32_C(0x551580CD), UINT32_C(0xEAF23159), UINT32_C(0x053DD5EE), UINT32_C(0x0F1E586A), UINT32_C(0x3CBCC3D5), UINT32_C(0xEB7A78DD), UINT32_C(0xB014B850), UINT32_C(0x39BBC65A)}, {UINT32_C(0x79B61AC7), UINT32_C(0x13DA4E85), UINT32_C(0x0DA59E37), UINT32_C(0x33E78DCF), UINT32_C(0x2A643C4C), UINT32_C(0x4E65AF25), UINT32_C(0x08869D03), UINT32_C(0x0DC38C97)}}, {{UINT32_C(0xA3A38837), UINT32_C(0x2B648345), UINT32_C(0x905E261D), UINT32_C(0x2FA6D8F7), UINT32_C(0x66A14946), UINT32_C(0xA23BD786), UINT32_C(0x5E01CC9A), UINT32_C(0x781633FD)}, {UINT32_C(0xE2C71AD1), UINT32_C(0xB1352709), UINT32_C(0x83A6D365), UINT32_C(0x9D745052), UINT32_C(0x66567032), UINT32_C(0xD88B5CAE), UINT32_C(0x53D875CA), UINT32_C(0x27FC40DF)}}, {{UINT32_C(0x47F7554F), UINT32_C(0xB254E54C), UINT32_C(0xD708614D), UINT32_C(0x33AD0ED6), UINT32_C(0x76CE908D), UINT32_C(0x830566A3), UINT32_C(0xAA1ADD5C), UINT32_C(0x73DF94BD)}, {UINT32_C(0x2DBDD8A3), UINT32_C(0x23EC411F), UINT32_C(0x3A979FDC), UINT32_C(0x9BA47338), UINT32_C(0xC667E9F7), UINT32_C(0x56A2C27F), UINT32_C(0x427E6BFB), UINT32_C(0x295647C7)}}, }, { {{UINT32_C(0xF8E48C13), UINT32_C(0x9B5F4652), UINT32_C(0x9EEF4BA3), UINT32_C(0xE979034F), UINT32_C(0x7CF5AF6E), UINT32_C(0xF95FD776), UINT32_C(0x506CEB46), UINT32_C(0x4236C47E)}, {UINT32_C(0xE08D2312), UINT32_C(0x0C02A249), UINT32_C(0xC056499A), UINT32_C(0xAA5A38CC), UINT32_C(0x7C188B64), UINT32_C(0xCB26A8E2), UINT32_C(0x0AE373D5), UINT32_C(0x38FB961D)}}, {{UINT32_C(0x7B23470D), UINT32_C(0xEB179C9E), UINT32_C(0x1EBC44E7), UINT32_C(0xAE70102F), UINT32_C(0x92E0EED0), UINT32_C(0x8184C1D4), UINT32_C(0x5C21BF08), UINT32_C(0x32988281)}, {UINT32_C(0x8180D11E), UINT32_C(0x46958967), UINT32_C(0x7FD7278D), UINT32_C(0xEBD5518C), UINT32_C(0xAD2B74F7), UINT32_C(0xFCEB7F68), UINT32_C(0xF9C7B6DA), UINT32_C(0x082D2011)}}, {{UINT32_C(0xBBE0299D), UINT32_C(0x65D5AED1), UINT32_C(0xCF565A0A), UINT32_C(0x0077F756), UINT32_C(0x344BB90D), UINT32_C(0xD44FCD6B), UINT32_C(0x536F3F25), UINT32_C(0x6C2A19C0)}, {UINT32_C(0xBB2A4D91), UINT32_C(0x32EE7439), UINT32_C(0xED9351E1), UINT32_C(0xA97E677A), UINT32_C(0x413A16E0), UINT32_C(0x6752EDCF), UINT32_C(0x1CE4FBE6), UINT32_C(0x5DE1B0C7)}}, {{UINT32_C(0xD6009B36), UINT32_C(0x6C10DA15), UINT32_C(0xE5D8CFBE), UINT32_C(0xAAD05F4F), UINT32_C(0x31D58B76), UINT32_C(0xD8BCE0B4), UINT32_C(0x27B2811B), UINT32_C(0x08DE344E)}, {UINT32_C(0x80B51E48), UINT32_C(0xD9A78AAE), UINT32_C(0x3E41C63A), UINT32_C(0x1E1D0A81), UINT32_C(0x8076B3C7), UINT32_C(0x844376DE), UINT32_C(0x5FDF9D53), UINT32_C(0x73F0D4A3)}}, {{UINT32_C(0x558C7719), UINT32_C(0xF1532922), UINT32_C(0xA8221197), UINT32_C(0x0F10188A), UINT32_C(0x5DDC1716), UINT32_C(0x51A97E5F), UINT32_C(0x444789E7), UINT32_C(0x0F583A9B)}, {UINT32_C(0x97D63B87), UINT32_C(0xAA8FC58D), UINT32_C(0x1CFDA59C), UINT32_C(0xA5AF048B), UINT32_C(0x2DDB34EB), UINT32_C(0x2A4A0C5F), UINT32_C(0x701E2E07), UINT32_C(0x66C0F0C7)}}, {{UINT32_C(0x36BE2ABF), UINT32_C(0xC0BC88B8), UINT32_C(0x5C721B85), UINT32_C(0x265CCE74), UINT32_C(0xD54299BA), UINT32_C(0x483EBB01), UINT32_C(0x348ED89E), UINT32_C(0x18F11CBE)}, {UINT32_C(0xE42129D4), UINT32_C(0x5E9AE7B9), UINT32_C(0x81DE5B77), UINT32_C(0x6B3E9E8D), UINT32_C(0x7A14A74A), UINT32_C(0xB3ADBAC9), UINT32_C(0x0003B266), UINT32_C(0x1B6CEBB2)}}, {{UINT32_C(0x15EB200E), UINT32_C(0xD4D4DD10), UINT32_C(0xFB87C57B), UINT32_C(0xEEAEA4C6), UINT32_C(0x72FF6321), UINT32_C(0x48F0B957), UINT32_C(0xB782B01D), UINT32_C(0x187C4B75)}, {UINT32_C(0xE9B4D622), UINT32_C(0x3DC1AACD), UINT32_C(0x3F4ED519), UINT32_C(0x0358418E), UINT32_C(0x773D019C), UINT32_C(0x981A24F8), UINT32_C(0x3DB0B4F4), UINT32_C(0x6643CA91)}}, {{UINT32_C(0xD47670E3), UINT32_C(0xE3254F4B), UINT32_C(0x30B1DDE9), UINT32_C(0x98226125), UINT32_C(0xDA8AF160), UINT32_C(0x61EB6C86), UINT32_C(0x18363269), UINT32_C(0x725C7716)}, {UINT32_C(0x02F62462), UINT32_C(0xB051DC9F), UINT32_C(0x00AC5531), UINT32_C(0xFF8C9EDF), UINT32_C(0x962A92A3), UINT32_C(0x3909C79B), UINT32_C(0x27790237), UINT32_C(0x25C90D93)}}, {{UINT32_C(0x88ADC475), UINT32_C(0x0A5DF2CC), UINT32_C(0xE5D27D0A), UINT32_C(0x48D26967), UINT32_C(0x359FF194), UINT32_C(0x21D5F616), UINT32_C(0x89977CE2), UINT32_C(0x38ACD141)}, {UINT32_C(0xFDAA8ACB), UINT32_C(0x39B9BD92), UINT32_C(0x035B62D0), UINT32_C(0xDB157DF2), UINT32_C(0xB7D252D9), UINT32_C(0x4E33386E), UINT32_C(0xCF196258), UINT32_C(0x6BD2E33F)}}, {{UINT32_C(0xCE8F10C5), UINT32_C(0xE0806297), UINT32_C(0x8A14B746), UINT32_C(0x446AFD6D), UINT32_C(0xBF566190), UINT32_C(0xD7931F29), UINT32_C(0x86FDB72A), UINT32_C(0x4D9CFBFA)}, {UINT32_C(0x95009F63), UINT32_C(0x77528851), UINT32_C(0x34C0FF45), UINT32_C(0x5FE50134), UINT32_C(0x6E134B81), UINT32_C(0xC38CABBB), UINT32_C(0xE36DB037), UINT32_C(0x2E60B277)}}, {{UINT32_C(0x57184CA5), UINT32_C(0xA614CF67), UINT32_C(0x25BE01E3), UINT32_C(0x6CBD8D63), UINT32_C(0xA0030BE3), UINT32_C(0xE313EE8D), UINT32_C(0x2B1E7C60), UINT32_C(0x69AF0399)}, {UINT32_C(0x50423F30), UINT32_C(0x519ABFBB), UINT32_C(0x486B9519), UINT32_C(0x200111FF), UINT32_C(0x3351F692), UINT32_C(0x6FF93CCB), UINT32_C(0x3ED9BE71), UINT32_C(0x32EB3E54)}}, {{UINT32_C(0x54052EBD), UINT32_C(0x0851ACB9), UINT32_C(0x6D2336D7), UINT32_C(0x3A389B7B), UINT32_C(0x17C6ACD9), UINT32_C(0x50A87925), UINT32_C(0xB807D9B1), UINT32_C(0x031FE845)}, {UINT32_C(0xE22F7492), UINT32_C(0xA348BB01), UINT32_C(0x05F39661), UINT32_C(0x9547ED36), UINT32_C(0x68EC4AC2), UINT32_C(0x97DF6756), UINT32_C(0x85B7F81B), UINT32_C(0x5836FEFE)}}, {{UINT32_C(0x5F0B2ACB), UINT32_C(0x4E4869A6), UINT32_C(0xDEC46001), UINT32_C(0xC4798F3F), UINT32_C(0x00903474), UINT32_C(0x281A4ED6), UINT32_C(0xEFB9AABD), UINT32_C(0x04F22E9D)}, {UINT32_C(0xFAA721A4), UINT32_C(0x2AC92264), UINT32_C(0x276F8041), UINT32_C(0xBCE2FF0B), UINT32_C(0xE4943926), UINT32_C(0x5F605607), UINT32_C(0x55506DF7), UINT32_C(0x388C5FAB)}}, {{UINT32_C(0xAB5687E2), UINT32_C(0xFF104F6D), UINT32_C(0x3B2D0245), UINT32_C(0x1B6DAFE9), UINT32_C(0x81B2EC4B), UINT32_C(0x6405C026), UINT32_C(0xF489EBBC), UINT32_C(0x2B7676DA)}, {UINT32_C(0x6DA1F57A), UINT32_C(0xBAA158F0), UINT32_C(0x27A8457F), UINT32_C(0x9CB044AD), UINT32_C(0xA3BBD6C9), UINT32_C(0xC23737A5), UINT32_C(0x1D2267E1), UINT32_C(0x71FB5B47)}}, {{UINT32_C(0xD14F56E4), UINT32_C(0x779BD825), UINT32_C(0x08396F23), UINT32_C(0xD7E672A0), UINT32_C(0xD40BA6EE), UINT32_C(0x23FE3FC0), UINT32_C(0x3B56A3AB), UINT32_C(0x41E749E7)}, {UINT32_C(0x72042F67), UINT32_C(0xD19471CE), UINT32_C(0x4989D4D7), UINT32_C(0x8A686DA7), UINT32_C(0x4FA09BC9), UINT32_C(0x52A709C6), UINT32_C(0xB3B6AA64), UINT32_C(0x1DC21162)}}, {{UINT32_C(0xF9B3BD1D), UINT32_C(0x62C9838B), UINT32_C(0x0CE6384C), UINT32_C(0x1EE59E5A), UINT32_C(0xECE8CC7F), UINT32_C(0xA9F5ABF6), UINT32_C(0x80BDDA83), UINT32_C(0x1961D80F)}, {UINT32_C(0xCA406FB1), UINT32_C(0x7A40880C), UINT32_C(0xDFBCE2E4), UINT32_C(0x5035D307), UINT32_C(0x3D637299), UINT32_C(0x590259E0), UINT32_C(0xD6C34E05), UINT32_C(0x1607AC9F)}}, }, { {{UINT32_C(0x9D818B72), UINT32_C(0x4ABC2710), UINT32_C(0x092607B7), UINT32_C(0x2496CEA6), UINT32_C(0x055C4EC8), UINT32_C(0xFB1087E1), UINT32_C(0x258ADC7D), UINT32_C(0x50A30C6A)}, {UINT32_C(0x0FF502E3), UINT32_C(0xAF4EB6B3), UINT32_C(0x190607AB), UINT32_C(0x5D5D76AD), UINT32_C(0x34482C13), UINT32_C(0xC9C9B711), UINT32_C(0x42213696), UINT32_C(0x574A9718)}}, {{UINT32_C(0x7018FC70), UINT32_C(0x7C90FAFD), UINT32_C(0x2B83291C), UINT32_C(0x36A04559), UINT32_C(0x40D1B175), UINT32_C(0x6120B51E), UINT32_C(0x3DCF9606), UINT32_C(0x45F10B20)}, {UINT32_C(0xF20C5636), UINT32_C(0x3C6A9EFF), UINT32_C(0xFFBBC648), UINT32_C(0xB2768BA3), UINT32_C(0xB523B36C), UINT32_C(0x1C9DF90A), UINT32_C(0xD6FF34ED), UINT32_C(0x4148BF06)}}, {{UINT32_C(0x3B5F9492), UINT32_C(0x3D29821A), UINT32_C(0x90B24561), UINT32_C(0xAE12C782), UINT32_C(0x8A3BDC5F), UINT32_C(0xEF6FB277), UINT32_C(0xAC3BD74E), UINT32_C(0x6034BF3B)}, {UINT32_C(0x4ACB6F85), UINT32_C(0x131D57CD), UINT32_C(0x3BE79B31), UINT32_C(0xDED1C433), UINT32_C(0x78A896B8), UINT32_C(0xB0913489), UINT32_C(0xB287862C), UINT32_C(0x1247C0B7)}}, {{UINT32_C(0x7C494054), UINT32_C(0xEB642893), UINT32_C(0x22142D26), UINT32_C(0x79227930), UINT32_C(0x943E8398), UINT32_C(0x8F1C8371), UINT32_C(0x60886DB7), UINT32_C(0x583C7AEF)}, {UINT32_C(0x3A12EE0E), UINT32_C(0xAFE46022), UINT32_C(0xB6CB8685), UINT32_C(0xE9C9253A), UINT32_C(0x6316A4C6), UINT32_C(0x5334F9DD), UINT32_C(0xE6F1DEE9), UINT32_C(0x4E2F13D8)}}, {{UINT32_C(0xB37D8BA5), UINT32_C(0x7499A5B4), UINT32_C(0x1C9BCDE2), UINT32_C(0xA12AA637), UINT32_C(0xBFD6AE86), UINT32_C(0xCC99471D), UINT32_C(0x92048D63), UINT32_C(0x09966378)}, {UINT32_C(0x552E71A3), UINT32_C(0x42CBFA9D), UINT32_C(0x675C1716), UINT32_C(0x84A8B153), UINT32_C(0x4CF00A7D), UINT32_C(0xB9C07C0E), UINT32_C(0x0DA504DB), UINT32_C(0x32E2322B)}}, {{UINT32_C(0xE671EE59), UINT32_C(0x569F581F), UINT32_C(0x422E86C7), UINT32_C(0x293522D7), UINT32_C(0x15DCEF10), UINT32_C(0x5E4CEA7E), UINT32_C(0x483C0FE3), UINT32_C(0x67C8A9FC)}, {UINT32_C(0x47B79284), UINT32_C(0x4DE5AC09), UINT32_C(0x025016BA), UINT32_C(0x22AB8FBD), UINT32_C(0x2A099B37), UINT32_C(0x51318C23), UINT32_C(0x49E06623), UINT32_C(0x542EA0FA)}}, {{UINT32_C(0x28909F31), UINT32_C(0xDD240F64), UINT32_C(0x101B7F01), UINT32_C(0x46B66F9E), UINT32_C(0x20481C3F), UINT32_C(0x788C29CA), UINT32_C(0xCA5D5182), UINT32_C(0x3218A509)}, {UINT32_C(0x63E9A2B9), UINT32_C(0x64BCC7AD), UINT32_C(0xADDF5C0B), UINT32_C(0x3D213CA2), UINT32_C(0x9960D650), UINT32_C(0x6D93ED4C), UINT32_C(0x284EE5F3), UINT32_C(0x3F13DB22)}}, {{UINT32_C(0x6697E0D1), UINT32_C(0x5B678C3A), UINT32_C(0x16D9D878), UINT32_C(0x25A171F4), UINT32_C(0xFAEC362B), UINT32_C(0xC20A6D80), UINT32_C(0xC512EA4B), UINT32_C(0x1BB3F14C)}, {UINT32_C(0x2AE35FA5), UINT32_C(0xECE5313B), UINT32_C(0xBBD76B87), UINT32_C(0xE390A01F), UINT32_C(0x882DA3FC), UINT32_C(0xC78EA4C5), UINT32_C(0x42086A77), UINT32_C(0x771BCDAE)}}, {{UINT32_C(0x565802E9), UINT32_C(0x8E9E3C8B), UINT32_C(0x53FA1BE7), UINT32_C(0xC37A7B35), UINT32_C(0x4408FB77), UINT32_C(0x9D2F1A26), UINT32_C(0xFF308B7B), UINT32_C(0x0B3ECE36)}, {UINT32_C(0x1F30FC37), UINT32_C(0x8FB35B36), UINT32_C(0x83E1A3C9), UINT32_C(0x463B44E2), UINT32_C(0x3402233A), UINT32_C(0x7218F09F), UINT32_C(0xFC9A6990), UINT32_C(0x1519638A)}}, {{UINT32_C(0x8EAAC478), UINT32_C(0x51FB3E5D), UINT32_C(0x760ED4EC), UINT32_C(0x620E4826), UINT32_C(0x1D865577), UINT32_C(0x46FC5B1F), UINT32_C(0x5244A538), UINT32_C(0x15EF2AD9)}, {UINT32_C(0x4BF382BD), UINT32_C(0x8D7E477C), UINT32_C(0x02A5C9EE), UINT32_C(0xCBF170C9), UINT32_C(0x4AFB0EC1), UINT32_C(0xB91A870C), UINT32_C(0x69C31425), UINT32_C(0x052FFC51)}}, {{UINT32_C(0x2018D066), UINT32_C(0x1FD43746), UINT32_C(0x4C67FC35), UINT32_C(0xBC501517), UINT32_C(0xBC990EB6), UINT32_C(0xE65BC2FB), UINT32_C(0x73F87F92), UINT32_C(0x538CA6F9)}, {UINT32_C(0x8352B03F), UINT32_C(0x42FBDAE0), UINT32_C(0x99A4C9B9), UINT32_C(0xF265B1E0), UINT32_C(0x185CA070), UINT32_C(0x6E3EAB2F), UINT32_C(0x37D0A2C1), UINT32_C(0x6E6F4F7D)}}, {{UINT32_C(0xC2D5D73E), UINT32_C(0x9B20D8EE), UINT32_C(0x75844C15), UINT32_C(0x190521AE), UINT32_C(0x26AD08FE), UINT32_C(0x67663AC4), UINT32_C(0xF984EC06), UINT32_C(0x67AEEFEF)}, {UINT32_C(0xCBDD87EF), UINT32_C(0x61C71142), UINT32_C(0x63396E3B), UINT32_C(0x0FA4995B), UINT32_C(0x85C193B0), UINT32_C(0x3196E551), UINT32_C(0xDACB3A3D), UINT32_C(0x36C0A2A8)}}, {{UINT32_C(0x178A1115), UINT32_C(0xEAB89FDC), UINT32_C(0xD7C31303), UINT32_C(0xC7B764D8), UINT32_C(0x90203755), UINT32_C(0xA5B2D6FB), UINT32_C(0xD5F8AEEE), UINT32_C(0x3C360BF9)}, {UINT32_C(0x02F1CC3C), UINT32_C(0x8DFDCD05), UINT32_C(0x64E5269E), UINT32_C(0x7F8A64D2), UINT32_C(0xEA13FFD7), UINT32_C(0xA36196EC), UINT32_C(0x77E3839F), UINT32_C(0x35E22415)}}, {{UINT32_C(0xE22E0C52), UINT32_C(0x29E7AB0B), UINT32_C(0x8B27DEDA), UINT32_C(0x68BF32C7), UINT32_C(0xDC7971AE), UINT32_C(0x52A762A2), UINT32_C(0x18B0CDCC), UINT32_C(0x4CA43487)}, {UINT32_C(0x3FCEAF73), UINT32_C(0xED429DA1), UINT32_C(0x06718D19), UINT32_C(0x49396E6F), UINT32_C(0x5BB3301C), UINT32_C(0xDECB9337), UINT32_C(0x0FF489B1), UINT32_C(0x4B7723C1)}}, {{UINT32_C(0xABEE6B9B), UINT32_C(0xAE321F09), UINT32_C(0x37318F60), UINT32_C(0xF251BF4D), UINT32_C(0xB63DC269), UINT32_C(0xB0A8A251), UINT32_C(0x71817963), UINT32_C(0x514A25FC)}, {UINT32_C(0x55C9B2E9), UINT32_C(0x518F5747), UINT32_C(0x1C9B4845), UINT32_C(0x3E56CC3E), UINT32_C(0x283AE1FA), UINT32_C(0xBDFD637A), UINT32_C(0xC3DE778E), UINT32_C(0x419BA4B4)}}, {{UINT32_C(0xBCD2EB74), UINT32_C(0xC7F18E93), UINT32_C(0xFC61FB42), UINT32_C(0x171264C8), UINT32_C(0x85119033), UINT32_C(0x27282E76), UINT32_C(0xD7DB91C7), UINT32_C(0x225006A4)}, {UINT32_C(0x1ECF5024), UINT32_C(0x628E0F3C), UINT32_C(0x00859CDE), UINT32_C(0xDC5111E0), UINT32_C(0x1F220711), UINT32_C(0x4AB1764F), UINT32_C(0x70DDED3C), UINT32_C(0x7C6916F1)}}, }, { {{UINT32_C(0x5F0CA58A), UINT32_C(0xF9FFE8FC), UINT32_C(0x22879EBB), UINT32_C(0x09E34F30), UINT32_C(0xED7B0520), UINT32_C(0x648D6339), UINT32_C(0x1AF5ECDC), UINT32_C(0x0D6719D0)}, {UINT32_C(0x0B8590E4), UINT32_C(0x2878714D), UINT32_C(0x90EC312B), UINT32_C(0x827D04ED), UINT32_C(0x3B5767C3), UINT32_C(0xD415C8B4), UINT32_C(0xC09FD18D), UINT32_C(0x4170F0AD)}}, {{UINT32_C(0x3C601031), UINT32_C(0x9B649CFC), UINT32_C(0x636DDAE7), UINT32_C(0x0478603A), UINT32_C(0x914E100A), UINT32_C(0xDC972DFA), UINT32_C(0x091621AE), UINT32_C(0x519C55DF)}, {UINT32_C(0xD4A9963D), UINT32_C(0x863046CB), UINT32_C(0x5ACF7C0C), UINT32_C(0xDF16763C), UINT32_C(0xFF5468A4), UINT32_C(0x4999A93E), UINT32_C(0x424074A5), UINT32_C(0x35543EFF)}}, {{UINT32_C(0xDD33307C), UINT32_C(0x27B1DBFA), UINT32_C(0x927CA6F3), UINT32_C(0xA0D04784), UINT32_C(0xA37CF855), UINT32_C(0xBD3EBC5E), UINT32_C(0x49F5AA2C), UINT32_C(0x59D02EF5)}, {UINT32_C(0xBDD57BF3), UINT32_C(0xCDABE86F), UINT32_C(0x37819D86), UINT32_C(0x7B3ADD2F), UINT32_C(0x0413B7B0), UINT32_C(0x7B90BA15), UINT32_C(0x6B99685B), UINT32_C(0x47071782)}}, {{UINT32_C(0xEF0CE97F), UINT32_C(0xB7C3218E), UINT32_C(0x0898C79C), UINT32_C(0xDAE3B56C), UINT32_C(0x0908877D), UINT32_C(0x6349D83D), UINT32_C(0xC81E8C4E), UINT32_C(0x0970C6C0)}, {UINT32_C(0xA47F426C), UINT32_C(0x0E45C4A7), UINT32_C(0x3FBB194E), UINT32_C(0xAB000A59), UINT32_C(0x3A6DD13E), UINT32_C(0x570FBBA5), UINT32_C(0xC8F44A57), UINT32_C(0x66045580)}}, {{UINT32_C(0x12A72F7F), UINT32_C(0x5ABEB749), UINT32_C(0x7AE56F4D), UINT32_C(0x15072A92), UINT32_C(0x222AB2C4), UINT32_C(0x1C77AE00), UINT32_C(0x9AFE63DE), UINT32_C(0x591EAEC6)}, {UINT32_C(0xDFD24304), UINT32_C(0xB51D41AF), UINT32_C(0xDFBCC096), UINT32_C(0xDE28DF26), UINT32_C(0x38A20DA7), UINT32_C(0x02F046C8), UINT32_C(0x1AE0A45B), UINT32_C(0x5EC3DBDC)}}, {{UINT32_C(0x63DD86C2), UINT32_C(0x7C19BD75), UINT32_C(0x8D78A57B), UINT32_C(0xDB119311), UINT32_C(0x23C5C4E7), UINT32_C(0xF48BB4FA), UINT32_C(0x97DB0A05), UINT32_C(0x65514C1C)}, {UINT32_C(0x43CAC49C), UINT32_C(0x1BC1F2F0), UINT32_C(0x2851B4BE), UINT32_C(0x975FEB51), UINT32_C(0xDD60D530), UINT32_C(0x0E0A4633), UINT32_C(0x09B1D2C6), UINT32_C(0x32BBBF14)}}, {{UINT32_C(0xA670EAC0), UINT32_C(0x79124749), UINT32_C(0x31DD893C), UINT32_C(0x504D89D5), UINT32_C(0xE0654D63), UINT32_C(0xDDCED74C), UINT32_C(0xE2208707), UINT32_C(0x58956BE5)}, {UINT32_C(0x437E7077), UINT32_C(0xBE6A3ECD), UINT32_C(0x574095C8), UINT32_C(0xB8AB332D), UINT32_C(0x3869DA42), UINT32_C(0x4E79AC1C), UINT32_C(0x68859F51), UINT32_C(0x79D4C3FB)}}, {{UINT32_C(0x7936A831), UINT32_C(0x1E5FC1B9), UINT32_C(0xD74F1F41), UINT32_C(0x1EA42ED2), UINT32_C(0xC4EA3228), UINT32_C(0x33D22EC1), UINT32_C(0x729BEBFE), UINT32_C(0x5705333F)}, {UINT32_C(0x64596076), UINT32_C(0xDBD1A67B), UINT32_C(0xFA65BA98), UINT32_C(0x6BFF269D), UINT32_C(0x6C47E715), UINT32_C(0x8451A9C2), UINT32_C(0x22898DB3), UINT32_C(0x243D679D)}}, {{UINT32_C(0xB8323FD0), UINT32_C(0xE935D705), UINT32_C(0x6937E5CB), UINT32_C(0xE2DA8845), UINT32_C(0x4A5EAE1E), UINT32_C(0x1C9DFFF8), UINT32_C(0x45DF7A79), UINT32_C(0x796F0B95)}, {UINT32_C(0x640DBA32), UINT32_C(0xC24D573F), UINT32_C(0x02E4B792), UINT32_C(0x2B775217), UINT32_C(0x94D12C40), UINT32_C(0xD437EB63), UINT32_C(0x4AD371F0), UINT32_C(0x6182AF6D)}}, {{UINT32_C(0x41FC7551), UINT32_C(0x133EDA52), UINT32_C(0xE91714AF), UINT32_C(0xA0088A2B), UINT32_C(0x5E0A73C0), UINT32_C(0xB41B9AC2), UINT32_C(0x1D3B3953), UINT32_C(0x4808BB5A)}, {UINT32_C(0x2B9AE648), UINT32_C(0xD875AA14), UINT32_C(0x2408244C), UINT32_C(0x4F38C946), UINT32_C(0xFF051A87), UINT32_C(0x04B6B941), UINT32_C(0x6DF48ECD), UINT32_C(0x1D5B0B9E)}}, {{UINT32_C(0x169E757F), UINT32_C(0x27FD368A), UINT32_C(0x7B94D9DB), UINT32_C(0x2ACB3560), UINT32_C(0x4D4C9B5F), UINT32_C(0x81903F4B), UINT32_C(0x169B81DE), UINT32_C(0x641F806C)}, {UINT32_C(0x9E957475), UINT32_C(0x574E9444), UINT32_C(0xC6C8EE52), UINT32_C(0xE08814AE), UINT32_C(0x6C84FDDF), UINT32_C(0xD1AE71EC), UINT32_C(0xFAA040D9), UINT32_C(0x44A56014)}}, {{UINT32_C(0x75A48F60), UINT32_C(0x06DA6908), UINT32_C(0xBB2CD408), UINT32_C(0x7BA6C9CB), UINT32_C(0x3A1BCBFF), UINT32_C(0x57D2D0FF), UINT32_C(0x8928CE36), UINT32_C(0x186F1A8B)}, {UINT32_C(0x7A40F877), UINT32_C(0x0FFD205B), UINT32_C(0x01AF68F7), UINT32_C(0x2915BC8E), UINT32_C(0xC36A5FB1), UINT32_C(0x816AC4DF), UINT32_C(0x2C9E1F7D), UINT32_C(0x609B0A87)}}, {{UINT32_C(0xB97536FB), UINT32_C(0x4032AC5E), UINT32_C(0xA7C5EDB6), UINT32_C(0x53E6FE68), UINT32_C(0x5F0DCBA1), UINT32_C(0x2F414930), UINT32_C(0x2837E314), UINT32_C(0x20975256)}, {UINT32_C(0x3C3C1D27), UINT32_C(0xDF5DC496), UINT32_C(0x71797C36), UINT32_C(0x0DFDAAF3), UINT32_C(0xDA504E04), UINT32_C(0x5F3E9229), UINT32_C(0x8C234246), UINT32_C(0x354EA88D)}}, {{UINT32_C(0x0922D317), UINT32_C(0xAF6741C3), UINT32_C(0x9DF0A572), UINT32_C(0x7429853B), UINT32_C(0x1DC207A8), UINT32_C(0x0EA1AE04), UINT32_C(0x450075F5), UINT32_C(0x2C1DAA1C)}, {UINT32_C(0x6ED729B4), UINT32_C(0x27C71F16), UINT32_C(0x53AB8EC0), UINT32_C(0x785718A6), UINT32_C(0xA8465487), UINT32_C(0x1EEC7BBF), UINT32_C(0x4C578BA9), UINT32_C(0x78DA9B04)}}, {{UINT32_C(0xB3B707FA), UINT32_C(0xFF9ED65E), UINT32_C(0xF5D28D33), UINT32_C(0xF8C8301F), UINT32_C(0xA65F5C0F), UINT32_C(0xB15D498F), UINT32_C(0xB0EF2B89), UINT32_C(0x6DEF256D)}, {UINT32_C(0x52184EF6), UINT32_C(0x0D40A6B2), UINT32_C(0x2BF06F5A), UINT32_C(0xC702EBE5), UINT32_C(0x4BA041AA), UINT32_C(0x13E50E18), UINT32_C(0x7EC4C784), UINT32_C(0x53552D88)}}, {{UINT32_C(0xF28ABB3A), UINT32_C(0x2CD09B19), UINT32_C(0x724EDB9B), UINT32_C(0x4F5C040F), UINT32_C(0xE0DCBD16), UINT32_C(0xD6820590), UINT32_C(0x1B7155A3), UINT32_C(0x45D84DE9)}, {UINT32_C(0xA251B1BA), UINT32_C(0x995BDD01), UINT32_C(0x37CAA4DC), UINT32_C(0x607F9517), UINT32_C(0xA15D9674), UINT32_C(0x747FEA1C), UINT32_C(0x73E97C97), UINT32_C(0x646C1876)}}, }, { {{UINT32_C(0x6FAC1486), UINT32_C(0x1951682B), UINT32_C(0x4A4D14C5), UINT32_C(0x8B578E1E), UINT32_C(0xB7384D42), UINT32_C(0x083FA101), UINT32_C(0xED1C8A87), UINT32_C(0x13380CE9)}, {UINT32_C(0x732A493B), UINT32_C(0xC7052ED8), UINT32_C(0xB32E3D69), UINT32_C(0xD5FEF40F), UINT32_C(0x88833566), UINT32_C(0xA64ACE87), UINT32_C(0x4177DC00), UINT32_C(0x6E36CFDB)}}, {{UINT32_C(0xE742C3B4), UINT32_C(0xAA14E281), UINT32_C(0xEE5AF40A), UINT32_C(0xB75E7B2A), UINT32_C(0x1616EFA2), UINT32_C(0x3FC5FF0B), UINT32_C(0xAD763298), UINT32_C(0x090259B0)}, {UINT32_C(0x38753438), UINT32_C(0x4105B57E), UINT32_C(0xCF2D8926), UINT32_C(0x70ED1A00), UINT32_C(0x322F40BB), UINT32_C(0x78921395), UINT32_C(0x67A3FF56), UINT32_C(0x3AEE8199)}}, {{UINT32_C(0x11EA75FC), UINT32_C(0x88073D00), UINT32_C(0x06A4B4EB), UINT32_C(0xD23D2796), UINT32_C(0xD85D3A6B), UINT32_C(0x1FD22F9E), UINT32_C(0xAFB43B70), UINT32_C(0x6B5EA051)}, {UINT32_C(0xD99BE576), UINT32_C(0x96C9C176), UINT32_C(0x4C47261E), UINT32_C(0x85AC2B6C), UINT32_C(0x99A9C378), UINT32_C(0x27263959), UINT32_C(0x8B5CABDA), UINT32_C(0x6D36E9FE)}}, {{UINT32_C(0xA58F614C), UINT32_C(0xC9FC7661), UINT32_C(0x2E45AE73), UINT32_C(0x82AA317D), UINT32_C(0xC8CB9CC7), UINT32_C(0xDCB1925F), UINT32_C(0x27813205), UINT32_C(0x1341C1AA)}, {UINT32_C(0x6CD478AB), UINT32_C(0xDD06745B), UINT32_C(0x1E28F6A3), UINT32_C(0x0C2534B2), UINT32_C(0x9D27FE63), UINT32_C(0xE2183345), UINT32_C(0x06466147), UINT32_C(0x7F1E2A33)}}, {{UINT32_C(0x5AEE2471), UINT32_C(0x378D727E), UINT32_C(0xD47739B6), UINT32_C(0xB718FC17), UINT32_C(0x4145E8EF), UINT32_C(0xDA27CB9B), UINT32_C(0x0EF2AB20), UINT32_C(0x3F8AB1A3)}, {UINT32_C(0xE16C0141), UINT32_C(0xA89ADD37), UINT32_C(0x59DF1C95), UINT32_C(0x2127823B), UINT32_C(0xB7455CC2), UINT32_C(0x53F90B73), UINT32_C(0x1183FBE5), UINT32_C(0x7F960586)}}, {{UINT32_C(0xE77235C3), UINT32_C(0x56D0475A), UINT32_C(0xB18ED61A), UINT32_C(0xED2907C5), UINT32_C(0x7D73F6F8), UINT32_C(0x2D02C4CB), UINT32_C(0xC42E7AED), UINT32_C(0x35EF69B4)}, {UINT32_C(0x31B7324A), UINT32_C(0x53A6120A), UINT32_C(0x59F1A395), UINT32_C(0x982DD221), UINT32_C(0x835CFD94), UINT32_C(0x03ECA86F), UINT32_C(0x73CA1BD5), UINT32_C(0x4CBA837D)}}, {{UINT32_C(0x41B17E6D), UINT32_C(0x64F66D39), UINT32_C(0xCB14F3B3), UINT32_C(0x3C869BF5), UINT32_C(0x28350EFA), UINT32_C(0x1EBA045A), UINT32_C(0xC7CDEC47), UINT32_C(0x7ACFB882)}, {UINT32_C(0x8FB3097B), UINT32_C(0x7ACFD28D), UINT32_C(0x62986426), UINT32_C(0xDA397C31), UINT32_C(0x2A1A7A94), UINT32_C(0xD49F8421), UINT32_C(0xFAB65156), UINT32_C(0x7B372E2D)}}, {{UINT32_C(0x01D9DB0F), UINT32_C(0x3ADBDD07), UINT32_C(0x94FF0CFB), UINT32_C(0x617521E6), UINT32_C(0x3F5BD583), UINT32_C(0x5BA5905C), UINT32_C(0x78670CD1), UINT32_C(0x6F896033)}, {UINT32_C(0xFB98EA11), UINT32_C(0x0A59C447), UINT32_C(0x653EDC59), UINT32_C(0x59B918CC), UINT32_C(0x9F72C01E), UINT32_C(0x00BF4D2A), UINT32_C(0x47DEE00F), UINT32_C(0x748455D1)}}, {{UINT32_C(0x386E7491), UINT32_C(0xE371A7A8), UINT32_C(0x621A3484), UINT32_C(0xF71711CC), UINT32_C(0xE0015C3B), UINT32_C(0x1568256E), UINT32_C(0x7D3FFDE9), UINT32_C(0x5ACEF7A6)}, {UINT32_C(0xB08E4219), UINT32_C(0x02ED70E5), UINT32_C(0x832AC3AA), UINT32_C(0x7ECE1726), UINT32_C(0x951D1CA2), UINT32_C(0xC3C0D32B), UINT32_C(0x38DECC59), UINT32_C(0x4C991664)}}, {{UINT32_C(0x96EB21A4), UINT32_C(0xB99DF8BA), UINT32_C(0x2BBF8E6D), UINT32_C(0xB88D25F4), UINT32_C(0x686DAA3C), UINT32_C(0x16B3E0B1), UINT32_C(0x70D47C57), UINT32_C(0x11314561)}, {UINT32_C(0x3338342D), UINT32_C(0x8DCDC3D1), UINT32_C(0x88E028A7), UINT32_C(0xE6D39B01), UINT32_C(0x72855B5E), UINT32_C(0xB781F1ED), UINT32_C(0xCC192572), UINT32_C(0x0E0D82F6)}}, {{UINT32_C(0xCF1E20AA), UINT32_C(0xC86A8E5D), UINT32_C(0xF9AB96D5), UINT32_C(0x1A87AEF3), UINT32_C(0xF3D19051), UINT32_C(0xA8941635), UINT32_C(0x654FFF15), UINT32_C(0x67B1D0A2)}, {UINT32_C(0x92862ACD), UINT32_C(0x266FD5ED), UINT32_C(0xD11DEEAC), UINT32_C(0xB72587BE), UINT32_C(0xD09320AA), UINT32_C(0x5CF0D2E2), UINT32_C(0x515E0277), UINT32_C(0x68456EBA)}}, {{UINT32_C(0x771F64CA), UINT32_C(0x86A5461C), UINT32_C(0x48FF8D7A), UINT32_C(0xB7A220B7), UINT32_C(0xD7A568D1), UINT32_C(0x9A0DD72A), UINT32_C(0xF644D858), UINT32_C(0x18F5E1DC)}, {UINT32_C(0x3E00364F), UINT32_C(0xB7AE1BC2), UINT32_C(0xCEE8D9F7), UINT32_C(0xD7EA31F3), UINT32_C(0xDCDB883D), UINT32_C(0xD18DA30F), UINT32_C(0xCBA00F48), UINT32_C(0x179CFCA5)}}, {{UINT32_C(0x39E7860C), UINT32_C(0x496F2C01), UINT32_C(0x27F15EAF), UINT32_C(0xACDF8B40), UINT32_C(0x687AC815), UINT32_C(0x8871966C), UINT32_C(0x8DB8FDB5), UINT32_C(0x6228F1B5)}, {UINT32_C(0xF30ECF2B), UINT32_C(0x8644656A), UINT32_C(0xAE1DEAFF), UINT32_C(0x15576CC2), UINT32_C(0x697AB3FC), UINT32_C(0x93D86D56), UINT32_C(0x811E3FF2), UINT32_C(0x3E4A428E)}}, {{UINT32_C(0x91B9F5DF), UINT32_C(0xFB85DE3D), UINT32_C(0xB20A9C71), UINT32_C(0xCDB595D4), UINT32_C(0xB44D671E), UINT32_C(0x55CB08F3), UINT32_C(0xFCD7D5ED), UINT32_C(0x780FC2E5)}, {UINT32_C(0x7F939366), UINT32_C(0x815AB41F), UINT32_C(0xECD52B20), UINT32_C(0xA7597A02), UINT32_C(0x4648E3C5), UINT32_C(0x9BE078F0), UINT32_C(0x17BD3DC2), UINT32_C(0x7A3E2179)}}, {{UINT32_C(0x9D9E5E53), UINT32_C(0x22758C41), UINT32_C(0x9EF09FAE), UINT32_C(0x44D675F4), UINT32_C(0x27159F97), UINT32_C(0x1AB7986D), UINT32_C(0xB6B9465B), UINT32_C(0x72B3F02B)}, {UINT32_C(0xFE56F578), UINT32_C(0xA372FAC7), UINT32_C(0xDA534F4A), UINT32_C(0x33FA6479), UINT32_C(0xDF63BF2D), UINT32_C(0xB0003307), UINT32_C(0xB80D0F64), UINT32_C(0x34D40B4D)}}, {{UINT32_C(0x3D2B9FC2), UINT32_C(0x8A8929DC), UINT32_C(0x55EE75E5), UINT32_C(0x7D12E86C), UINT32_C(0x92E1A870), UINT32_C(0xB3FE1AD3), UINT32_C(0x729CFE4C), UINT32_C(0x27148C94)}, {UINT32_C(0x18BA868B), UINT32_C(0x6A8C3B52), UINT32_C(0x7F038A9C), UINT32_C(0xDD2006E4), UINT32_C(0xB7124908), UINT32_C(0x4606FA9E), UINT32_C(0xF4940CB1), UINT32_C(0x434A8C07)}}, }, { {{UINT32_C(0xF98B91EA), UINT32_C(0x15F36EBE), UINT32_C(0xC1ED17B1), UINT32_C(0x94D802DE), UINT32_C(0x085D77F8), UINT32_C(0x3C45FA08), UINT32_C(0x02FF571A), UINT32_C(0x0A30B3C3)}, {UINT32_C(0x264C93D0), UINT32_C(0x70F5852D), UINT32_C(0x191AEE57), UINT32_C(0x5E51BCAB), UINT32_C(0xFAD8E96E), UINT32_C(0xD5C14AE9), UINT32_C(0xD4BC414B), UINT32_C(0x73B00534)}}, {{UINT32_C(0x12AFF5E7), UINT32_C(0x21CF876B), UINT32_C(0xF75799A6), UINT32_C(0x3E9F664C), UINT32_C(0x9A0E73CD), UINT32_C(0xC23B7D19), UINT32_C(0x427EEA36), UINT32_C(0x77AAB691)}, {UINT32_C(0x604EE854), UINT32_C(0x2E74F972), UINT32_C(0xF867C81A), UINT32_C(0x8712C7A0), UINT32_C(0x953A4C56), UINT32_C(0x6085980F), UINT32_C(0x0F7707E1), UINT32_C(0x2DB99707)}}, {{UINT32_C(0x78BDB7A7), UINT32_C(0x5ECC087F), UINT32_C(0x04C693F2), UINT32_C(0x43CC156C), UINT32_C(0x039BD7F1), UINT32_C(0x965067CF), UINT32_C(0x6E3FAE2F), UINT32_C(0x72140E56)}, {UINT32_C(0xE019DED1), UINT32_C(0x26452E4D), UINT32_C(0x2EDEF154), UINT32_C(0x6F4C2349), UINT32_C(0x054DFC0F), UINT32_C(0xA7066D7F), UINT32_C(0x3381AB44), UINT32_C(0x544E6F6D)}}, {{UINT32_C(0x9214C791), UINT32_C(0x9B6E9469), UINT32_C(0x86938BDC), UINT32_C(0xD74F9C55), UINT32_C(0xFC2928FD), UINT32_C(0x0F1527F6), UINT32_C(0x63C3A053), UINT32_C(0x5B0FBF0F)}, {UINT32_C(0xFC41FF10), UINT32_C(0xAC1F442C), UINT32_C(0x787B4932), UINT32_C(0x34EF88EF), UINT32_C(0x316732AC), UINT32_C(0xF8120F08), UINT32_C(0xA655DC4A), UINT32_C(0x7BCCF12C)}}, {{UINT32_C(0xA6C7760E), UINT32_C(0x750DF97F), UINT32_C(0x609BF215), UINT32_C(0xF1A0A827), UINT32_C(0x67FD04B4), UINT32_C(0x7348C1B4), UINT32_C(0x615C8145), UINT32_C(0x6A581016)}, {UINT32_C(0x9A11AAFC), UINT32_C(0x9DC01225), UINT32_C(0x3F2B0C8B), UINT32_C(0x24F65B05), UINT32_C(0xDCB1B2A4), UINT32_C(0xA27CB8BF), UINT32_C(0xE48C1A71), UINT32_C(0x3C44B811)}}, {{UINT32_C(0xF780B295), UINT32_C(0xBC059AF2), UINT32_C(0x0B6B247D), UINT32_C(0xDF58928C), UINT32_C(0x01903F3D), UINT32_C(0x224D4C3C), UINT32_C(0x818EE0AC), UINT32_C(0x7152E120)}, {UINT32_C(0x54BFF1BE), UINT32_C(0x6C8F4745), UINT32_C(0x431ADEF7), UINT32_C(0x98A6C7EC), UINT32_C(0x91B2CFB6), UINT32_C(0xDCB6BB75), UINT32_C(0x7E83A5BB), UINT32_C(0x145F6D39)}}, {{UINT32_C(0x81D23BC1), UINT32_C(0x827C000C), UINT32_C(0x403956FC), UINT32_C(0x5CDC1135), UINT32_C(0x3C751158), UINT32_C(0xD967A5B1), UINT32_C(0x96201D7D), UINT32_C(0x52AF85BC)}, {UINT32_C(0x644558F7), UINT32_C(0x522BC492), UINT32_C(0xED7A060D), UINT32_C(0xF74A35AF), UINT32_C(0x4DC4619E), UINT32_C(0x10E5F9FD), UINT32_C(0x324F60BB), UINT32_C(0x06071F1F)}}, {{UINT32_C(0x65921C34), UINT32_C(0xC5FFD5EF), UINT32_C(0x302BAA5D), UINT32_C(0x46CE1A69), UINT32_C(0x4E22FF1D), UINT32_C(0x89CC84EC), UINT32_C(0x68131754), UINT32_C(0x16A481AE)}, {UINT32_C(0xB89039F5), UINT32_C(0x2A06A156), UINT32_C(0xB3A95AB9), UINT32_C(0x40B6401B), UINT32_C(0x313820C3), UINT32_C(0xFFCC53EB), UINT32_C(0xEA959F76), UINT32_C(0x256B00E7)}}, {{UINT32_C(0x54FBDD74), UINT32_C(0xCCE87FC9), UINT32_C(0xB23C6E1D), UINT32_C(0xEC258542), UINT32_C(0x9E5E1928), UINT32_C(0x5BE392B4), UINT32_C(0x47A8A759), UINT32_C(0x65AF3110)}, {UINT32_C(0x47DFFD31), UINT32_C(0x943F7A25), UINT32_C(0x51E896FA), UINT32_C(0xDCCDA186), UINT32_C(0x933E747F), UINT32_C(0x71A93B1E), UINT32_C(0xDFB043AD), UINT32_C(0x44F5C468)}}, {{UINT32_C(0x786FCCBA), UINT32_C(0xF6AEC52C), UINT32_C(0x6D51FA78), UINT32_C(0x23D49DCF), UINT32_C(0x9B40D8E6), UINT32_C(0x0F81463B), UINT32_C(0x708D3DA2), UINT32_C(0x18B9D932)}, {UINT32_C(0xF986DC6D), UINT32_C(0x796F94ED), UINT32_C(0xFC2622C3), UINT32_C(0x33B2CCC1), UINT32_C(0x9CCEC606), UINT32_C(0x16790DFB), UINT32_C(0xCFD31481), UINT32_C(0x6F5D1452)}}, {{UINT32_C(0x6C3A15D6), UINT32_C(0x91F15DDC), UINT32_C(0x4D360E75), UINT32_C(0x45D12F40), UINT32_C(0x1DAFFC9C), UINT32_C(0xF2E28EE8), UINT32_C(0x6CDF5566), UINT32_C(0x5CC6A056)}, {UINT32_C(0x1779B9BF), UINT32_C(0x855166D2), UINT32_C(0xCF94D9FE), UINT32_C(0x92BA5EF4), UINT32_C(0x985BC1DD), UINT32_C(0x1266FB2A), UINT32_C(0xCA3018AD), UINT32_C(0x4572CE8F)}}, {{UINT32_C(0xBE4BB604), UINT32_C(0x8729A12D), UINT32_C(0x4E99E9AB), UINT32_C(0x6A29C849), UINT32_C(0x7A89894D), UINT32_C(0x54AE5011), UINT32_C(0xCDB0EEBD), UINT32_C(0x5E66A255)}, {UINT32_C(0xCBEE153B), UINT32_C(0x006736EA), UINT32_C(0x225E7B86), UINT32_C(0x8A36CC2D), UINT32_C(0xEC0598EC), UINT32_C(0xF731E430), UINT32_C(0x7FD9A11F), UINT32_C(0x49338E4D)}}, {{UINT32_C(0xDA6DABAA), UINT32_C(0xE038CE03), UINT32_C(0x7C1BCE0C), UINT32_C(0x13A08DCE), UINT32_C(0xDA89EFBF), UINT32_C(0x12D00DD0), UINT32_C(0x6FCF0510), UINT32_C(0x70A13FB9)}, {UINT32_C(0x5CDB03E2), UINT32_C(0x16ED1C92), UINT32_C(0x08E9EE4B), UINT32_C(0xDF1AB61D), UINT32_C(0x03AF3E3D), UINT32_C(0x48983DA8), UINT32_C(0x429DB770), UINT32_C(0x63CCA113)}}, {{UINT32_C(0xCFB805E5), UINT32_C(0x6D9AC1EB), UINT32_C(0x50FA37B8), UINT32_C(0x47C3FE69), UINT32_C(0x2C33D457), UINT32_C(0xD308EC73), UINT32_C(0xD4CCA340), UINT32_C(0x3CB08E00)}, {UINT32_C(0xBE862794), UINT32_C(0xC078DAD0), UINT32_C(0xF4E10A57), UINT32_C(0x2D147F83), UINT32_C(0x3DE1B3D5), UINT32_C(0xE91820FF), UINT32_C(0x6F30491B), UINT32_C(0x3D85DD72)}}, {{UINT32_C(0xF5CBDD3A), UINT32_C(0xD486A022), UINT32_C(0xCAC0B99E), UINT32_C(0x2663134A), UINT32_C(0x5F3ABFCA), UINT32_C(0x42DE13F5), UINT32_C(0xB365B973), UINT32_C(0x4967A225)}, {UINT32_C(0x10F1F997), UINT32_C(0x99C98A25), UINT32_C(0x7714FAB2), UINT32_C(0x23F057C9), UINT32_C(0x1BA2338D), UINT32_C(0xCE07CA6E), UINT32_C(0x069F65D7), UINT32_C(0x3BA69161)}}, {{UINT32_C(0xC026FB0E), UINT32_C(0xCCD8C86F), UINT32_C(0x50407A8C), UINT32_C(0xF49F1FEA), UINT32_C(0x7F19A1DB), UINT32_C(0x72FEA37B), UINT32_C(0x3F457DB7), UINT32_C(0x22A03E25)}, {UINT32_C(0x71F736D2), UINT32_C(0x2D6C62B2), UINT32_C(0xA5ACB4E5), UINT32_C(0xCC99F8E7), UINT32_C(0x0DE5F380), UINT32_C(0x8F7DBF2E), UINT32_C(0x352B4933), UINT32_C(0x24494786)}}, }, { {{UINT32_C(0xAE2A5E8F), UINT32_C(0xF020E7A9), UINT32_C(0xD14C5F02), UINT32_C(0x5ADC788B), UINT32_C(0x65C84DB4), UINT32_C(0xC5E5AFE4), UINT32_C(0x35C2633C), UINT32_C(0x392FACC4)}, {UINT32_C(0x42DEE269), UINT32_C(0x47D50070), UINT32_C(0x6EB7849C), UINT32_C(0x76706ED7), UINT32_C(0x316548CB), UINT32_C(0x6BF56D56), UINT32_C(0xD37FF4DF), UINT32_C(0x4A466066)}}, {{UINT32_C(0xC30283AD), UINT32_C(0xC8EBBFB5), UINT32_C(0x3544E645), UINT32_C(0x31E9CF96), UINT32_C(0x88886B50), UINT32_C(0x90EA9A49), UINT32_C(0x021D3D5D), UINT32_C(0x5E4B8C88)}, {UINT32_C(0x0DFEB658), UINT32_C(0xA4DB9225), UINT32_C(0x1910FDAE), UINT32_C(0x8AA95DB6), UINT32_C(0xDE400EB9), UINT32_C(0x82E9A997), UINT32_C(0x96769A04), UINT32_C(0x238967E9)}}, {{UINT32_C(0x89E2DF0A), UINT32_C(0x1ABB076A), UINT32_C(0x07065929), UINT32_C(0xDA8B09B0), UINT32_C(0x63BD349B), UINT32_C(0x332BE8A5), UINT32_C(0xA2D35385), UINT32_C(0x0EB973CE)}, {UINT32_C(0x9C7D375E), UINT32_C(0x67F7AE63), UINT32_C(0xE7AE90B1), UINT32_C(0xA235818D), UINT32_C(0x817493B0), UINT32_C(0x2B59C26E), UINT32_C(0x33C4ACD6), UINT32_C(0x39DC1050)}}, {{UINT32_C(0x7B7DB3F5), UINT32_C(0x11801ACE), UINT32_C(0x8CC97CA5), UINT32_C(0x79C214C3), UINT32_C(0xBF2674BF), UINT32_C(0xB4BFE1AB), UINT32_C(0x43252011), UINT32_C(0x598EA7DC)}, {UINT32_C(0xB08F8EF5), UINT32_C(0x217FF6D3), UINT32_C(0x8B9226B7), UINT32_C(0x9797BBC9), UINT32_C(0x7B0EDB09), UINT32_C(0xAB8E98C9), UINT32_C(0x083A401F), UINT32_C(0x240EC22D)}}, {{UINT32_C(0x459ABC3D), UINT32_C(0x55A75BCF), UINT32_C(0x64ECC2DC), UINT32_C(0xB2F98598), UINT32_C(0x9EE84779), UINT32_C(0x271C47C3), UINT32_C(0xBF9BDBF2), UINT32_C(0x0166E5D4)}, {UINT32_C(0x4215B666), UINT32_C(0xD205380F), UINT32_C(0x64E9FE64), UINT32_C(0xF7041396), UINT32_C(0x2BB0DA40), UINT32_C(0x4C737E94), UINT32_C(0xC8119691), UINT32_C(0x2E763521)}}, {{UINT32_C(0xFD2F8593), UINT32_C(0x79550B60), UINT32_C(0x0C17A56F), UINT32_C(0x47E00AFD), UINT32_C(0xB44157CF), UINT32_C(0x0D900A9D), UINT32_C(0xA81BED76), UINT32_C(0x016CF746)}, {UINT32_C(0xAC47A84B), UINT32_C(0xC21E861B), UINT32_C(0x1724BD47), UINT32_C(0x0E14387A), UINT32_C(0x2077F7BC), UINT32_C(0xC209303E), UINT32_C(0xBAD12F0B), UINT32_C(0x33B5EB59)}}, {{UINT32_C(0x9850FC1F), UINT32_C(0x7152354F), UINT32_C(0x83637934), UINT32_C(0x1239576F), UINT32_C(0x82AF46BA), UINT32_C(0xB00C4E4E), UINT32_C(0xEC3FEEFF), UINT32_C(0x563D5062)}, {UINT32_C(0x33D67B7F), UINT32_C(0xEF25E373), UINT32_C(0x50D9845E), UINT32_C(0x3A80A50E), UINT32_C(0xA5787EF5), UINT32_C(0x1DCED1E9), UINT32_C(0xA0F87C3C), UINT32_C(0x15723E9A)}}, {{UINT32_C(0x2B4A156D), UINT32_C(0x21743511), UINT32_C(0xCD12BD2B), UINT32_C(0xB75C041C), UINT32_C(0x79F393A6), UINT32_C(0x6947368C), UINT32_C(0x76420E56), UINT32_C(0x32CDE49E)}, {UINT32_C(0x43D612FF), UINT32_C(0x67FBA315), UINT32_C(0xE3B87BC2), UINT32_C(0x697F7FAE), UINT32_C(0x7391129A), UINT32_C(0x980DAFBC), UINT32_C(0x6F707469), UINT32_C(0x438B2858)}}, {{UINT32_C(0x5E9D085F), UINT32_C(0xDA8AD16D), UINT32_C(0x768FA87C), UINT32_C(0xE636F1AF), UINT32_C(0xB85FF1F1), UINT32_C(0x08520756), UINT32_C(0x6ABB31BE), UINT32_C(0x1B818481)}, {UINT32_C(0x2E686F1A), UINT32_C(0x25B3DCB9), UINT32_C(0x2B0CB829), UINT32_C(0xE1282134), UINT32_C(0x3B9B759C), UINT32_C(0x626232BC), UINT32_C(0x38C4338E), UINT32_C(0x797316BB)}}, {{UINT32_C(0x4A62DCBD), UINT32_C(0xF8365B64), UINT32_C(0x6BF0EFED), UINT32_C(0xC2CF51BA), UINT32_C(0xABF74764), UINT32_C(0x37E379EF), UINT32_C(0xA350D603), UINT32_C(0x5DC32071)}, {UINT32_C(0x5B732100), UINT32_C(0x5465CC80), UINT32_C(0xB3BB5366), UINT32_C(0x3231B4E3), UINT32_C(0xD0D067CE), UINT32_C(0x23F5385E), UINT32_C(0x67D33451), UINT32_C(0x76CD7621)}}, {{UINT32_C(0x55D857DD), UINT32_C(0xC6C93A05), UINT32_C(0x8F308F7F), UINT32_C(0xB4B6F176), UINT32_C(0xC0F13577), UINT32_C(0x2371CD88), UINT32_C(0x70807D9D), UINT32_C(0x1E507D6C)}, {UINT32_C(0xC73E8E2F), UINT32_C(0x7A77CCE1), UINT32_C(0xFCCBDEEB), UINT32_C(0x1DD96274), UINT32_C(0x03F378B8), UINT32_C(0xA4DBEA5D), UINT32_C(0x2A1C347F), UINT32_C(0x44B4DF55)}}, {{UINT32_C(0x8D067A47), UINT32_C(0x9853D282), UINT32_C(0x86813E74), UINT32_C(0xBF0ADAF4), UINT32_C(0x39409037), UINT32_C(0xFDE1F24D), UINT32_C(0x973B045D), UINT32_C(0x0E629604)}, {UINT32_C(0x3BB92FAB), UINT32_C(0x9880A74B), UINT32_C(0xC6C4D6C6), UINT32_C(0xBC4E3405), UINT32_C(0x5184A2D6), UINT32_C(0x98C24318), UINT32_C(0xC210C183), UINT32_C(0x07D65412)}}, {{UINT32_C(0x441A5FBC), UINT32_C(0x3938E528), UINT32_C(0xCCC66B22), UINT32_C(0x2CCD837D), UINT32_C(0x5E606282), UINT32_C(0x075FADE7), UINT32_C(0x4BB0E76A), UINT32_C(0x32181165)}, {UINT32_C(0xFC929890), UINT32_C(0xE7240305), UINT32_C(0xE03AAA52), UINT32_C(0x1FA427C8), UINT32_C(0x0BC7B9F8), UINT32_C(0xF23C879B), UINT32_C(0xD6BBC908), UINT32_C(0x699A1235)}}, {{UINT32_C(0x14124B8A), UINT32_C(0x20C29781), UINT32_C(0x48000278), UINT32_C(0x0C6464B3), UINT32_C(0xD644E10C), UINT32_C(0xF1939127), UINT32_C(0x4EC07EE3), UINT32_C(0x47A479E6)}, {UINT32_C(0x77023389), UINT32_C(0xB6315768), UINT32_C(0x8BFDD90F), UINT32_C(0xC0FD319D), UINT32_C(0x6CB022D4), UINT32_C(0x0EBEC200), UINT32_C(0x302F58EF), UINT32_C(0x6810DF3D)}}, {{UINT32_C(0xACB1C3F2), UINT32_C(0xCF97FA07), UINT32_C(0xA2C3F2F1), UINT32_C(0xACC60D84), UINT32_C(0x5DEB73D4), UINT32_C(0x4EF3CAAC), UINT32_C(0xD5472C1D), UINT32_C(0x654D0D90)}, {UINT32_C(0xE4729062), UINT32_C(0x5A39A718), UINT32_C(0x8324E0F2), UINT32_C(0x84B286B0), UINT32_C(0xD21E8457), UINT32_C(0xA07A01CB), UINT32_C(0xB094714E), UINT32_C(0x0EC091C7)}}, {{UINT32_C(0x895736BD), UINT32_C(0x7AB81940), UINT32_C(0xE4679DF5), UINT32_C(0x9AE791B7), UINT32_C(0xF064109B), UINT32_C(0x36163D81), UINT32_C(0x0E956B07), UINT32_C(0x3DDEE4A4)}, {UINT32_C(0xFEAAE47C), UINT32_C(0xE146E7EE), UINT32_C(0x6A8EEC03), UINT32_C(0x81C0C2A7), UINT32_C(0xA8C315CB), UINT32_C(0x10BB8DD9), UINT32_C(0xD21B9AB0), UINT32_C(0x2CB423D8)}}, }, { {{UINT32_C(0x166A5B9A), UINT32_C(0x5B11D3C7), UINT32_C(0x8768861D), UINT32_C(0x973627BB), UINT32_C(0x5A3E442A), UINT32_C(0x82A5E2CD), UINT32_C(0xDDE63678), UINT32_C(0x13F6C741)}, {UINT32_C(0xD892738E), UINT32_C(0x8DAA3C74), UINT32_C(0xA932376F), UINT32_C(0x0A07D651), UINT32_C(0x6892504B), UINT32_C(0xE12612C5), UINT32_C(0xCA3FF301), UINT32_C(0x619D2B1D)}}, {{UINT32_C(0x1B07CEB7), UINT32_C(0x2B6D686F), UINT32_C(0x298D0996), UINT32_C(0x90C0260C), UINT32_C(0x102BC73C), UINT32_C(0x8CAAB926), UINT32_C(0xAEB3911C), UINT32_C(0x445A6487)}, {UINT32_C(0x57F17290), UINT32_C(0x7EE1E547), UINT32_C(0x417711BF), UINT32_C(0xC055478B), UINT32_C(0x5CFA42C2), UINT32_C(0x29EF9FEC), UINT32_C(0x2B8EA0D6), UINT32_C(0x5A022DE4)}}, {{UINT32_C(0xAEEB2675), UINT32_C(0x81A5EC18), UINT32_C(0xAD1BBA8A), UINT32_C(0xA867C5AA), UINT32_C(0x8DB47EBC), UINT32_C(0xAECB3688), UINT32_C(0x26D1038F), UINT32_C(0x77CE00BC)}, {UINT32_C(0x3E68504B), UINT32_C(0xADC635EF), UINT32_C(0xDAE8AF4F), UINT32_C(0x0EFC21DE), UINT32_C(0xAC70C4C9), UINT32_C(0xDE57FD43), UINT32_C(0xE78FFC0D), UINT32_C(0x123360BE)}}, {{UINT32_C(0xD82B61DB), UINT32_C(0xD608DB32), UINT32_C(0x8E45C853), UINT32_C(0x05AF2A90), UINT32_C(0x9D3B0032), UINT32_C(0xF1B8213E), UINT32_C(0xCAD15361), UINT32_C(0x2312F8AB)}, {UINT32_C(0xC29EE818), UINT32_C(0xDC8D8E32), UINT32_C(0xDE5CD587), UINT32_C(0x07D7A475), UINT32_C(0x0C6C38B8), UINT32_C(0x76610913), UINT32_C(0xD7984BD9), UINT32_C(0x0131B6C6)}}, {{UINT32_C(0xCF69C844), UINT32_C(0xC05CD4D0), UINT32_C(0x81A9B005), UINT32_C(0x747C092D), UINT32_C(0xD9E39F54), UINT32_C(0x0D793551), UINT32_C(0x7FFEF17C), UINT32_C(0x3BBB00DA)}, {UINT32_C(0x655AD7C1), UINT32_C(0x6CAB83D9), UINT32_C(0x66A8F590), UINT32_C(0x601BECD0), UINT32_C(0xAE51811B), UINT32_C(0xFADB086D), UINT32_C(0xD69F734B), UINT32_C(0x7768A5D8)}}, {{UINT32_C(0xF0E2385E), UINT32_C(0x3BB9B347), UINT32_C(0xF7D39F23), UINT32_C(0x376C8C48), UINT32_C(0xD82EC840), UINT32_C(0xE656C1A4), UINT32_C(0xFC2AC59A), UINT32_C(0x328B25C9)}, {UINT32_C(0xA046BEE6), UINT32_C(0xD02B2F39), UINT32_C(0x80066D6C), UINT32_C(0xDBAB19A5), UINT32_C(0xE938B7F7), UINT32_C(0x6A2E8F67), UINT32_C(0xAA7F2661), UINT32_C(0x645A57A1)}}, {{UINT32_C(0x9A006FAE), UINT32_C(0x6227904D), UINT32_C(0xB598CB72), UINT32_C(0xA975FC4C), UINT32_C(0xA1120B82), UINT32_C(0x945BFC2F), UINT32_C(0x2AC15CE5), UINT32_C(0x437A8AB4)}, {UINT32_C(0x0F53317C), UINT32_C(0xA512A107), UINT32_C(0xFF9BD7D6), UINT32_C(0x7B552554), UINT32_C(0x54155AF9), UINT32_C(0xF81213E7), UINT32_C(0xFDCE0842), UINT32_C(0x0923F42C)}}, {{UINT32_C(0x5216BB55), UINT32_C(0x13523916), UINT32_C(0x599CA117), UINT32_C(0xF27E4C7A), UINT32_C(0x7DD95BE1), UINT32_C(0x464D040A), UINT32_C(0x3C417D05), UINT32_C(0x40897486)}, {UINT32_C(0x7C88E5D7), UINT32_C(0x0A3D16BF), UINT32_C(0xC13B286F), UINT32_C(0x0B94C661), UINT32_C(0xE2214821), UINT32_C(0xF73C7126), UINT32_C(0xF2F6DAFA), UINT32_C(0x4B3D5BF0)}}, {{UINT32_C(0xF1A4332A), UINT32_C(0xCFABD8A2), UINT32_C(0xBAAC9A51), UINT32_C(0x56DB1546), UINT32_C(0x04416247), UINT32_C(0x8CC5204B), UINT32_C(0xF0583310), UINT32_C(0x75EC13BF)}, {UINT32_C(0xD35B55D0), UINT32_C(0x0D68896E), UINT32_C(0x67FC14D9), UINT32_C(0xE89274E2), UINT32_C(0xFC322878), UINT32_C(0x18D425C0), UINT32_C(0x916C714A), UINT32_C(0x69477DD7)}}, {{UINT32_C(0x9BDDF0F9), UINT32_C(0x427CBB6C), UINT32_C(0xDB9F52CB), UINT32_C(0xCF6941E2), UINT32_C(0x35E60DFA), UINT32_C(0xEF144DF6), UINT32_C(0xB61DF45C), UINT32_C(0x27B5246E)}, {UINT32_C(0xB8D3D1D9), UINT32_C(0x0E124518), UINT32_C(0x8B313B95), UINT32_C(0xBB3BA134), UINT32_C(0x0FA2B7A9), UINT32_C(0x050DCBDF), UINT32_C(0x1D0A99B5), UINT32_C(0x50DBCF6D)}}, {{UINT32_C(0x3924A1E5), UINT32_C(0x8A8B22CB), UINT32_C(0x118F9D55), UINT32_C(0x86CB4C5A), UINT32_C(0x5B339C53), UINT32_C(0xE5330ACC), UINT32_C(0x66A35A67), UINT32_C(0x6D5FDDF9)}, {UINT32_C(0x6F6438A5), UINT32_C(0xC9500719), UINT32_C(0x07E5394E), UINT32_C(0x9723F2BA), UINT32_C(0x866B45A8), UINT32_C(0xA9CE2117), UINT32_C(0x045CA2CA), UINT32_C(0x1B737D8D)}}, {{UINT32_C(0x6EE00E30), UINT32_C(0x6093F5A5), UINT32_C(0x5DE0A6FC), UINT32_C(0x5CAB98D4), UINT32_C(0x65DE754F), UINT32_C(0xADFB652C), UINT32_C(0x862EFD1D), UINT32_C(0x679900D1)}, {UINT32_C(0xAFC5D235), UINT32_C(0x6E5C230F), UINT32_C(0x12CF6DD3), UINT32_C(0x3A1E5579), UINT32_C(0x03FB4FA0), UINT32_C(0x241C20FB), UINT32_C(0x20F6C013), UINT32_C(0x562FFAE3)}}, {{UINT32_C(0x397F25EC), UINT32_C(0x6EFC732F), UINT32_C(0xBC1F03B8), UINT32_C(0x304D1F7D), UINT32_C(0x8890DADE), UINT32_C(0xA2FA6001), UINT32_C(0x51A25539), UINT32_C(0x4F91F97C)}, {UINT32_C(0x48F4EF02), UINT32_C(0xE75F9C50), UINT32_C(0x218AEE9D), UINT32_C(0xCC53F460), UINT32_C(0x10D76649), UINT32_C(0xE7B40489), UINT32_C(0x42ECDBA4), UINT32_C(0x148F90A2)}}, {{UINT32_C(0x1F683AD6), UINT32_C(0xBF45023A), UINT32_C(0x95E868D1), UINT32_C(0x2EA5F70C), UINT32_C(0xA97F2DE3), UINT32_C(0x47A19F33), UINT32_C(0x8A76ED9F), UINT32_C(0x3C8CCA9E)}, {UINT32_C(0xE1A268D0), UINT32_C(0x01562C6E), UINT32_C(0xBA4EF01E), UINT32_C(0x9EB6EBAC), UINT32_C(0x342410FB), UINT32_C(0x835E64D4), UINT32_C(0xFFF4594D), UINT32_C(0x06F96B87)}}, {{UINT32_C(0xD233612B), UINT32_C(0xE49A383A), UINT32_C(0xC9C14F64), UINT32_C(0x3CA5421F), UINT32_C(0xBB53DF81), UINT32_C(0x25192E1B), UINT32_C(0xA94C046C), UINT32_C(0x3C1451FE)}, {UINT32_C(0x0423FAA8), UINT32_C(0x72B270F8), UINT32_C(0x3763888A), UINT32_C(0xFF63513D), UINT32_C(0xC1745190), UINT32_C(0xB22F2F20), UINT32_C(0x35DEA32C), UINT32_C(0x2E005A7A)}}, {{UINT32_C(0x6305B2EB), UINT32_C(0x6B5A4E7A), UINT32_C(0x9CCD05D2), UINT32_C(0xF017BCA1), UINT32_C(0xD19AD8CB), UINT32_C(0xB37027C9), UINT32_C(0x0CBB36A6), UINT32_C(0x2CFCB470)}, {UINT32_C(0x663F3485), UINT32_C(0x17F4FE51), UINT32_C(0x0DC3467B), UINT32_C(0x7DC20A17), UINT32_C(0x4AF63CBD), UINT32_C(0x6B56BA3F), UINT32_C(0x0D5D64AF), UINT32_C(0x4E7CF289)}}, }, { {{UINT32_C(0x7F59D2E9), UINT32_C(0xE2C5CD1F), UINT32_C(0x9D7FBE1E), UINT32_C(0x6B9ACEB7), UINT32_C(0xA20225B0), UINT32_C(0x84F0441D), UINT32_C(0x8B369FBC), UINT32_C(0x15875CDA)}, {UINT32_C(0x0659E294), UINT32_C(0xED133277), UINT32_C(0x7AE02043), UINT32_C(0x7FAA913E), UINT32_C(0x9DCEDE14), UINT32_C(0xCA0E58DA), UINT32_C(0xCDE68547), UINT32_C(0x5F6A70FD)}}, {{UINT32_C(0xE7282711), UINT32_C(0x524B790D), UINT32_C(0xBCA05694), UINT32_C(0x4B4F6246), UINT32_C(0x949AF774), UINT32_C(0x85169ECB), UINT32_C(0xCC743068), UINT32_C(0x5B168842)}, {UINT32_C(0x31FB3BA3), UINT32_C(0xB8D0E9F2), UINT32_C(0x62D471C7), UINT32_C(0x56DD4BC3), UINT32_C(0xE2A34F75), UINT32_C(0xB14D689C), UINT32_C(0x02E8D2D2), UINT32_C(0x7F4E1717)}}, {{UINT32_C(0xB17090B9), UINT32_C(0x8EE3491A), UINT32_C(0x6B7EDAF4), UINT32_C(0x67C07116), UINT32_C(0x4D0E6CCE), UINT32_C(0x6876E4CE), UINT32_C(0xBC5A86BE), UINT32_C(0x6D2FBB64)}, {UINT32_C(0x070FA8C3), UINT32_C(0x0431C67A), UINT32_C(0x0F5D65F4), UINT32_C(0x91EFF9BE), UINT32_C(0xE07088DF), UINT32_C(0x332985E2), UINT32_C(0x676EADA8), UINT32_C(0x006D2583)}}, {{UINT32_C(0x0AA747D6), UINT32_C(0xA1FBCC37), UINT32_C(0xB0DFDF3C), UINT32_C(0xADEA4A90), UINT32_C(0x401ED81B), UINT32_C(0x650162C7), UINT32_C(0xA8B15E22), UINT32_C(0x0FBC4841)}, {UINT32_C(0xBF98CDAC), UINT32_C(0x1044B4E8), UINT32_C(0xECD1C668), UINT32_C(0x37071115), UINT32_C(0x233C220C), UINT32_C(0x29B93C17), UINT32_C(0xE69BC0C0), UINT32_C(0x4BEBC3CC)}}, {{UINT32_C(0x46BF7E51), UINT32_C(0xD1A16E37), UINT32_C(0xF7A7370C), UINT32_C(0x889C7782), UINT32_C(0x3CCB474D), UINT32_C(0xC73F396E), UINT32_C(0xB9D67A2E), UINT32_C(0x1C508F18)}, {UINT32_C(0x6B03B7E7), UINT32_C(0x3F17E967), UINT32_C(0xF857BB26), UINT32_C(0x3928F1D8), UINT32_C(0xC0EA8620), UINT32_C(0x3086FB2E), UINT32_C(0x1BE7C3E4), UINT32_C(0x15DC32C2)}}, {{UINT32_C(0x11F4D949), UINT32_C(0xF48D4C32), UINT32_C(0xB0357C05), UINT32_C(0xE14A4AE3), UINT32_C(0x151D91AE), UINT32_C(0x77A1121F), UINT32_C(0xE8C6869D), UINT32_C(0x33F85C2F)}, {UINT32_C(0x364B77B0), UINT32_C(0x8EA3BB4C), UINT32_C(0x9BD43E50), UINT32_C(0x1F155B91), UINT32_C(0x54748E7D), UINT32_C(0xA6C28730), UINT32_C(0xE7DDC539), UINT32_C(0x5AA34DDA)}}, {{UINT32_C(0xA6CF8A82), UINT32_C(0xF0F80DDA), UINT32_C(0x091663B5), UINT32_C(0x87DE6D6C), UINT32_C(0x02FE5519), UINT32_C(0x94798734), UINT32_C(0x96722130), UINT32_C(0x109D411F)}, {UINT32_C(0xE661041F), UINT32_C(0xBC47CA73), UINT32_C(0x65741541), UINT32_C(0x071D6059), UINT32_C(0x07E08735), UINT32_C(0x7CD4DF66), UINT32_C(0xE68FC807), UINT32_C(0x175E1F77)}}, {{UINT32_C(0xDA58865B), UINT32_C(0xB88BDAB8), UINT32_C(0x20ED2B89), UINT32_C(0x14AD9112), UINT32_C(0x039BF0A3), UINT32_C(0x2B21AEDF), UINT32_C(0x9D4B77E9), UINT32_C(0x78971777)}, {UINT32_C(0xD6612EF3), UINT32_C(0x133DA2AC), UINT32_C(0x12AD1785), UINT32_C(0x6260FCF5), UINT32_C(0x9DF08843), UINT32_C(0xDBA784DA), UINT32_C(0x4449FBD1), UINT32_C(0x1A30C4CF)}}, {{UINT32_C(0x4EF7ACA2), UINT32_C(0xB6FECE87), UINT32_C(0x13F7C58C), UINT32_C(0x9CE7B61A), UINT32_C(0xF8719A60), UINT32_C(0x6B0223C9), UINT32_C(0xA3B3B088), UINT32_C(0x21199AA5)}, {UINT32_C(0x6938BB02), UINT32_C(0x4A717196), UINT32_C(0xE7ABC263), UINT32_C(0x2E9A17C9), UINT32_C(0x4BAB12B7), UINT32_C(0x83F79623), UINT32_C(0x49D7CFBD), UINT32_C(0x15C0C4AF)}}, {{UINT32_C(0x56D2957F), UINT32_C(0x99B34139), UINT32_C(0x07218BB6), UINT32_C(0xA51B8DFD), UINT32_C(0xFC91D7C9), UINT32_C(0x47CA4323), UINT32_C(0x3DCFD5F0), UINT32_C(0x44B01E75)}, {UINT32_C(0x8CE894F3), UINT32_C(0x29F9D18E), UINT32_C(0x95227C6F), UINT32_C(0x22BCC540), UINT32_C(0x3FC75409), UINT32_C(0x815CD936), UINT32_C(0xD8989472), UINT32_C(0x0D58B325)}}, {{UINT32_C(0xB6C80208), UINT32_C(0x8B4C6980), UINT32_C(0x8FB77CCD), UINT32_C(0xA5D97497), UINT32_C(0x9477132F), UINT32_C(0x1B896571), UINT32_C(0x3AE45F53), UINT32_C(0x348ABC21)}, {UINT32_C(0x14BCDB96), UINT32_C(0xE438C1C3), UINT32_C(0x8007C1BF), UINT32_C(0x63150CF9), UINT32_C(0x8508B903), UINT32_C(0xDB861A33), UINT32_C(0x7B04ECD6), UINT32_C(0x421DFB01)}}, {{UINT32_C(0x19430E7B), UINT32_C(0xF2FCE58B), UINT32_C(0xD0F8ECB7), UINT32_C(0x851A5F03), UINT32_C(0x0A5A1833), UINT32_C(0xE756C167), UINT32_C(0x227F866C), UINT32_C(0x25A51405)}, {UINT32_C(0x3C6EE5F3), UINT32_C(0x40F34CB0), UINT32_C(0xF244B5CF), UINT32_C(0xF4010401), UINT32_C(0x01349BCF), UINT32_C(0x0E21BDED), UINT32_C(0x04547F42), UINT32_C(0x1B129D82)}}, {{UINT32_C(0x0927D153), UINT32_C(0x802EC480), UINT32_C(0x72541520), UINT32_C(0x0F75E4FE), UINT32_C(0x026C4613), UINT32_C(0xA4A1557A), UINT32_C(0x7D92BC18), UINT32_C(0x25E8DAFB)}, {UINT32_C(0x12F15F05), UINT32_C(0x1D87A143), UINT32_C(0x7B6B4240), UINT32_C(0x79390E3C), UINT32_C(0x492E6273), UINT32_C(0xFC199D76), UINT32_C(0x7EB090C0), UINT32_C(0x0053F1C4)}}, {{UINT32_C(0xACEE6DFC), UINT32_C(0xE790F1CA), UINT32_C(0xDFEA04FF), UINT32_C(0xC8FB4626), UINT32_C(0x627D88D7), UINT32_C(0xBF03627F), UINT32_C(0x3D81A75A), UINT32_C(0x1B369884)}, {UINT32_C(0x917FA19D), UINT32_C(0x83405DDA), UINT32_C(0x8C7DDCD2), UINT32_C(0xFFB23FF9), UINT32_C(0x40F10B48), UINT32_C(0x644F54C7), UINT32_C(0x17FF713A), UINT32_C(0x4636FADF)}}, {{UINT32_C(0x27F417E4), UINT32_C(0xDA62ECC2), UINT32_C(0xFD8662BE), UINT32_C(0xC0DBE48F), UINT32_C(0x1011E73C), UINT32_C(0x729EE4AA), UINT32_C(0x3E11C84B), UINT32_C(0x4BAE5D3C)}, {UINT32_C(0x6CEF6CDA), UINT32_C(0x854DFFF8), UINT32_C(0xCB7131EA), UINT32_C(0x7939228C), UINT32_C(0xD3EBC607), UINT32_C(0x58B3744A), UINT32_C(0x2049E239), UINT32_C(0x6EB9248F)}}, {{UINT32_C(0xED0D4E57), UINT32_C(0x0265CAE9), UINT32_C(0x8AA65AEF), UINT32_C(0x92166D02), UINT32_C(0x198345D6), UINT32_C(0x2E337CDA), UINT32_C(0xABE1AD7B), UINT32_C(0x6775330C)}, {UINT32_C(0xBF6FBC7D), UINT32_C(0xA9A828A8), UINT32_C(0xCBFEA393), UINT32_C(0x33A56F8D), UINT32_C(0xD811EC51), UINT32_C(0x2DB72F77), UINT32_C(0x8327C78E), UINT32_C(0x3DDFCD26)}}, }, { {{UINT32_C(0xB46AA2C4), UINT32_C(0x7CF8A521), UINT32_C(0xACF0D567), UINT32_C(0xE3B20937), UINT32_C(0xA440648E), UINT32_C(0xD47D8D1B), UINT32_C(0x1E9791A1), UINT32_C(0x674E7920)}, {UINT32_C(0x18366462), UINT32_C(0x27B714EB), UINT32_C(0x8476F588), UINT32_C(0x1526E558), UINT32_C(0x6C240D70), UINT32_C(0x72C8D374), UINT32_C(0x805C1265), UINT32_C(0x066BBAFB)}}, {{UINT32_C(0x457034E1), UINT32_C(0x15F1CFF5), UINT32_C(0xDD819FA7), UINT32_C(0xCF7C6550), UINT32_C(0x77AC7AD6), UINT32_C(0x57C2CD53), UINT32_C(0xAFED669D), UINT32_C(0x7DB2A8BE)}, {UINT32_C(0xD4697340), UINT32_C(0x2DAFD95F), UINT32_C(0x15A6B6E7), UINT32_C(0x382FF892), UINT32_C(0xBF4A6B1B), UINT32_C(0x036FC753), UINT32_C(0xE4012711), UINT32_C(0x3E7AC46D)}}, {{UINT32_C(0x5752A34D), UINT32_C(0xBA5ECDED), UINT32_C(0x6BAA08DD), UINT32_C(0xB08749D4), UINT32_C(0x4A4A47A8), UINT32_C(0x8A2B9897), UINT32_C(0xE42DCE02), UINT32_C(0x7230966F)}, {UINT32_C(0x58654FF5), UINT32_C(0xA6FF614A), UINT32_C(0xAB3C2A7E), UINT32_C(0x7F3531D1), UINT32_C(0x0D0ED417), UINT32_C(0x0282A2F0), UINT32_C(0xEA9755A3), UINT32_C(0x2DC7B872)}}, {{UINT32_C(0x2392536A), UINT32_C(0x7678D765), UINT32_C(0x574C657D), UINT32_C(0x0C2025F1), UINT32_C(0x795413DC), UINT32_C(0x01701C80), UINT32_C(0x5396279E), UINT32_C(0x63F0D496)}, {UINT32_C(0xFA32EA64), UINT32_C(0xB0F9968A), UINT32_C(0x5BB393DE), UINT32_C(0x81265D15), UINT32_C(0x0BCD8C10), UINT32_C(0xC05ECC6D), UINT32_C(0x2824457E), UINT32_C(0x4F3769F9)}}, {{UINT32_C(0xF13DB92E), UINT32_C(0x9AA58686), UINT32_C(0xED2E1B18), UINT32_C(0x1155CDF4), UINT32_C(0x09823F5A), UINT32_C(0xA06E9194), UINT32_C(0x4257AB0E), UINT32_C(0x7F1BBE73)}, {UINT32_C(0xABA6FCD1), UINT32_C(0x2DFB6472), UINT32_C(0xD73D850E), UINT32_C(0x04BE6BCA), UINT32_C(0x297D312B), UINT32_C(0x72AAEC34), UINT32_C(0x7509D9F5), UINT32_C(0x31F4C02C)}}, {{UINT32_C(0x7CA72AD5), UINT32_C(0xAA9BA000), UINT32_C(0x7FBCB4D6), UINT32_C(0x21EE2945), UINT32_C(0x1CF8580A), UINT32_C(0x0E210AAB), UINT32_C(0x0FA8DE10), UINT32_C(0x600479FE)}, {UINT32_C(0x54322F70), UINT32_C(0x246FD265), UINT32_C(0x60DF1893), UINT32_C(0xC60BE9BB), UINT32_C(0x05137E38), UINT32_C(0x04D4F99D), UINT32_C(0x6164C176), UINT32_C(0x6ACB9E01)}}, {{UINT32_C(0xC1DB7B6C), UINT32_C(0x126F2C7E), UINT32_C(0xCF4DD3C0), UINT32_C(0x4C3B30B5), UINT32_C(0xF782A489), UINT32_C(0x827D57A2), UINT32_C(0xE52621F0), UINT32_C(0x41B897DE)}, {UINT32_C(0xDDA0A3CD), UINT32_C(0xED31C55A), UINT32_C(0xA11AD179), UINT32_C(0x21C91BB2), UINT32_C(0x43FD6E23), UINT32_C(0x60E606B8), UINT32_C(0x51ED7FA6), UINT32_C(0x31B8138D)}}, {{UINT32_C(0xE72E4BC5), UINT32_C(0x1387B313), UINT32_C(0x82EBFC72), UINT32_C(0xDCCCB09C), UINT32_C(0xAA4432D6), UINT32_C(0xF0B01202), UINT32_C(0x7C52B69D), UINT32_C(0x632599C4)}, {UINT32_C(0xBCE9A04C), UINT32_C(0x3922D0C0), UINT32_C(0xB53F4268), UINT32_C(0xC2397D88), UINT32_C(0x00669858), UINT32_C(0x50AE5ED9), UINT32_C(0x16C7696B), UINT32_C(0x1B2BD4C2)}}, {{UINT32_C(0x2BF7DF06), UINT32_C(0x6FAE1B08), UINT32_C(0x5210DB3B), UINT32_C(0x870B3FE8), UINT32_C(0x9BDC0B91), UINT32_C(0x680BE422), UINT32_C(0xBCC970AD), UINT32_C(0x56BA83C6)}, {UINT32_C(0x859D6C78), UINT32_C(0x1AE91BAC), UINT32_C(0x2895A1A6), UINT32_C(0xC5BDD5FB), UINT32_C(0x550610F5), UINT32_C(0xA169E73C), UINT32_C(0x0CC7D3EA), UINT32_C(0x01B46767)}}, {{UINT32_C(0x0EC5ECE2), UINT32_C(0x1E147A51), UINT32_C(0xD0E2C46C), UINT32_C(0x9B612A1F), UINT32_C(0x5E293783), UINT32_C(0x664FDD55), UINT32_C(0x67DC4DBC), UINT32_C(0x52070E15)}, {UINT32_C(0x4A4903FB), UINT32_C(0x449B53E5), UINT32_C(0xA8D30103), UINT32_C(0x79B53583), UINT32_C(0xAF7CC314), UINT32_C(0x616C97F3), UINT32_C(0x2849862C), UINT32_C(0x6BEB304C)}}, {{UINT32_C(0x019F0313), UINT32_C(0xB9C636D6), UINT32_C(0xD3E0188D), UINT32_C(0x0B08E7CB), UINT32_C(0xD704DE15), UINT32_C(0xEAEB1715), UINT32_C(0x837E7543), UINT32_C(0x4990282C)}, {UINT32_C(0xFBD3A061), UINT32_C(0xCBB0BD49), UINT32_C(0x1DA124AE), UINT32_C(0x3454A8AC), UINT32_C(0x37D64EAB), UINT32_C(0x0D524A02), UINT32_C(0x0B3E4ADE), UINT32_C(0x76680749)}}, {{UINT32_C(0x95B04835), UINT32_C(0xC293E011), UINT32_C(0x23D0C885), UINT32_C(0x76D304BA), UINT32_C(0xD6552D80), UINT32_C(0x36A63627), UINT32_C(0xC504CCAB), UINT32_C(0x3B4FA680)}, {UINT32_C(0xE1FC08DF), UINT32_C(0xF25B3A04), UINT32_C(0x62D080F8), UINT32_C(0x786380E5), UINT32_C(0xDAC0D110), UINT32_C(0x0A731427), UINT32_C(0xD628429A), UINT32_C(0x1D65288F)}}, {{UINT32_C(0xDC94453E), UINT32_C(0x3CE5E929), UINT32_C(0xB6073324), UINT32_C(0xEC7CF988), UINT32_C(0xDCB35234), UINT32_C(0x023361E7), UINT32_C(0xF5E89B7C), UINT32_C(0x3AF20624)}, {UINT32_C(0xA5B2B103), UINT32_C(0x860F188E), UINT32_C(0xCB6D112F), UINT32_C(0x5EAC84CE), UINT32_C(0x914C9FFD), UINT32_C(0x63B200C3), UINT32_C(0x55A1FDCB), UINT32_C(0x327870A0)}}, {{UINT32_C(0x155280ED), UINT32_C(0x4F94633C), UINT32_C(0x3654B8AA), UINT32_C(0xF98321D5), UINT32_C(0x489AE89A), UINT32_C(0x9C057A23), UINT32_C(0xD59CA3B5), UINT32_C(0x1124A1FB)}, {UINT32_C(0x1F64AFD7), UINT32_C(0x2F4CE052), UINT32_C(0x7C789152), UINT32_C(0x841EE441), UINT32_C(0x59A98374), UINT32_C(0x93531ED4), UINT32_C(0x36BB8F07), UINT32_C(0x69A4F48C)}}, {{UINT32_C(0x5FD512A7), UINT32_C(0xD8FFD243), UINT32_C(0x9BEA1738), UINT32_C(0xF48C96F1), UINT32_C(0x0FFB4553), UINT32_C(0xF70E1F6A), UINT32_C(0x5FF91D21), UINT32_C(0x29DB63B1)}, {UINT32_C(0x77BF7279), UINT32_C(0xC1355C23), UINT32_C(0xA2FC904D), UINT32_C(0xD3946EE9), UINT32_C(0xE7B7A9F4), UINT32_C(0x07223881), UINT32_C(0x56E08ED6), UINT32_C(0x212D8967)}}, {{UINT32_C(0x45503451), UINT32_C(0x32B8C22A), UINT32_C(0xE6AB7B3D), UINT32_C(0x9E4FDAF1), UINT32_C(0x04A31294), UINT32_C(0x7A300E3D), UINT32_C(0x05FE2AEB), UINT32_C(0x0F529DFD)}, {UINT32_C(0x9951B6FB), UINT32_C(0x7EFFEA9E), UINT32_C(0x336B9A2B), UINT32_C(0x18C60266), UINT32_C(0x6C8D0EEC), UINT32_C(0xB78A5EE1), UINT32_C(0x46ED0B23), UINT32_C(0x68C17FE4)}}, }, { {{UINT32_C(0x96B3222E), UINT32_C(0xF707FAD5), UINT32_C(0x0223F804), UINT32_C(0xD6AF6161), UINT32_C(0x4F43A0E9), UINT32_C(0x13FFDC74), UINT32_C(0x3347F487), UINT32_C(0x6A3B70E9)}, {UINT32_C(0x6A4AF4F5), UINT32_C(0xBDDF02A4), UINT32_C(0xE4C69950), UINT32_C(0x61B451E1), UINT32_C(0xF9E3BB99), UINT32_C(0xFF854590), UINT32_C(0x7CD54C54), UINT32_C(0x46EB1F69)}}, {{UINT32_C(0x8E6848D3), UINT32_C(0x70E643B6), UINT32_C(0x848C2587), UINT32_C(0xC58B8519), UINT32_C(0xEDF4A38E), UINT32_C(0x2F195C54), UINT32_C(0x3D2A52E8), UINT32_C(0x206E6A32)}, {UINT32_C(0x417595BF), UINT32_C(0x234845B5), UINT32_C(0xFF5AE3CB), UINT32_C(0x90354373), UINT32_C(0x89C0E555), UINT32_C(0x13BE31CE), UINT32_C(0xCC67E26F), UINT32_C(0x2D18AA43)}}, {{UINT32_C(0xF041BD17), UINT32_C(0xC74EE8C4), UINT32_C(0xC2B3CC64), UINT32_C(0x655CF527), UINT32_C(0x160FF053), UINT32_C(0x6735CF0A), UINT32_C(0x04218A0D), UINT32_C(0x35DAB9EB)}, {UINT32_C(0xCBC34E46), UINT32_C(0x32BB2E9A), UINT32_C(0x7D190342), UINT32_C(0xF780CEAF), UINT32_C(0x9F0DA1A4), UINT32_C(0x161C0C1A), UINT32_C(0xE7642FD6), UINT32_C(0x7B198C9E)}}, {{UINT32_C(0x122FD0B4), UINT32_C(0x936C763E), UINT32_C(0xA7E0C435), UINT32_C(0xA3819ED9), UINT32_C(0xCAAE6D7B), UINT32_C(0x86228B04), UINT32_C(0x7A3C65B4), UINT32_C(0x2E116018)}, {UINT32_C(0xD4EB0345), UINT32_C(0xF55BB1F3), UINT32_C(0x0630B569), UINT32_C(0x858A0BF4), UINT32_C(0xCB78A626), UINT32_C(0x8CC22657), UINT32_C(0xB45E3005), UINT32_C(0x7CD93BDE)}}, {{UINT32_C(0x98E517AB), UINT32_C(0xCAA1F459), UINT32_C(0xB34A6F5C), UINT32_C(0x36E60281), UINT32_C(0x0B46F47F), UINT32_C(0x877A49F3), UINT32_C(0x9E7BE761), UINT32_C(0x0179824B)}, {UINT32_C(0xD455D9C0), UINT32_C(0x6830A2B2), UINT32_C(0x7BA31962), UINT32_C(0xB734BA0A), UINT32_C(0x065C3B51), UINT32_C(0x344665A4), UINT32_C(0x562E7F1D), UINT32_C(0x0B1D2210)}}, {{UINT32_C(0x0B2E22E8), UINT32_C(0x289BAFCA), UINT32_C(0x83390107), UINT32_C(0x038929A0), UINT32_C(0x0683E782), UINT32_C(0x968A014D), UINT32_C(0x53D34463), UINT32_C(0x5A1AD5C8)}, {UINT32_C(0x9527B2CA), UINT32_C(0xA2613334), UINT32_C(0x310B745F), UINT32_C(0xE8471271), UINT32_C(0x31387F59), UINT32_C(0x49C81A26), UINT32_C(0x0343C691), UINT32_C(0x1B955AF7)}}, {{UINT32_C(0xA4A9FCA4), UINT32_C(0x069328AD), UINT32_C(0x624FCB94), UINT32_C(0x14EF09A7), UINT32_C(0xE3E0CECD), UINT32_C(0x21C76F0D), UINT32_C(0x6C1BCE0F), UINT32_C(0x5F470B86)}, {UINT32_C(0xB15BC8B4), UINT32_C(0x79319A3F), UINT32_C(0xDB06AFA1), UINT32_C(0xB1407CB1), UINT32_C(0x911116E0), UINT32_C(0xD69E9E09), UINT32_C(0x0756579E), UINT32_C(0x6E77524E)}}, {{UINT32_C(0xE2D851D5), UINT32_C(0xD3EC5EBC), UINT32_C(0x03B63143), UINT32_C(0xC888BC23), UINT32_C(0xDB0C357F), UINT32_C(0x5F3DE41E), UINT32_C(0xC3D47D37), UINT32_C(0x646FFBD3)}, {UINT32_C(0x0692639B), UINT32_C(0xE53F8BEB), UINT32_C(0xD4FBC3D4), UINT32_C(0x7E194E37), UINT32_C(0x452B2A2E), UINT32_C(0xE1988A22), UINT32_C(0xB013F9E1), UINT32_C(0x5D359A15)}}, {{UINT32_C(0xB2A6627D), UINT32_C(0xA48160A7), UINT32_C(0x3CE8789E), UINT32_C(0x5EFDC848), UINT32_C(0xB1CD14EE), UINT32_C(0x264CBFF1), UINT32_C(0x44D84222), UINT32_C(0x288823D4)}, {UINT32_C(0x3A6DB1F8), UINT32_C(0x2F091B23), UINT32_C(0xCEA89B44), UINT32_C(0xBFD737B5), UINT32_C(0x17F5E969), UINT32_C(0x682AB86C), UINT32_C(0xABB0FA87), UINT32_C(0x7653005C)}}, {{UINT32_C(0xD4B8A43A), UINT32_C(0x619C2629), UINT32_C(0xB6DAF943), UINT32_C(0xBFDAF433), UINT32_C(0x6D640DB8), UINT32_C(0xDC7AA1EE), UINT32_C(0x3B08D55C), UINT32_C(0x35ADEEA8)}, {UINT32_C(0xD7AF5382), UINT32_C(0x30935454), UINT32_C(0x3D68A24A), UINT32_C(0x1F9C51A1), UINT32_C(0x78BDBEA9), UINT32_C(0xDBD13CFC), UINT32_C(0x31210A3F), UINT32_C(0x003B6D99)}}, {{UINT32_C(0x9C2B515D), UINT32_C(0xD4547A32), UINT32_C(0xFECDAAA9), UINT32_C(0x4AF29AA8), UINT32_C(0xE401D5AD), UINT32_C(0x85C80ECD), UINT32_C(0x8AA315A1), UINT32_C(0x2830332D)}, {UINT32_C(0x71DCE198), UINT32_C(0x56758823), UINT32_C(0x6ACBDEE3), UINT32_C(0x55AC9D10), UINT32_C(0x575CF4BB), UINT32_C(0xF6D468CF), UINT32_C(0x576B5C4A), UINT32_C(0x46E4FA98)}}, {{UINT32_C(0x20D859EF), UINT32_C(0xAD20F820), UINT32_C(0x2A5462B0), UINT32_C(0x38091588), UINT32_C(0x2135DA7D), UINT32_C(0x35F45C9F), UINT32_C(0xF7F20DBD), UINT32_C(0x6B426F91)}, {UINT32_C(0xF96E77D2), UINT32_C(0x4A0D8CBE), UINT32_C(0xCC51D3F4), UINT32_C(0x8FC36F5B), UINT32_C(0xBE16A0A8), UINT32_C(0x7A1870DD), UINT32_C(0x114DB780), UINT32_C(0x29C3E2B3)}}, {{UINT32_C(0x21779E6E), UINT32_C(0xFF692A4C), UINT32_C(0xA6026EC1), UINT32_C(0x698231AB), UINT32_C(0xEF03E21B), UINT32_C(0xDAB0D835), UINT32_C(0xC846D56F), UINT32_C(0x770BFFAC)}, {UINT32_C(0x3B8B0747), UINT32_C(0xCD28722D), UINT32_C(0x32AE95E5), UINT32_C(0x3DEFE040), UINT32_C(0x0F9857D6), UINT32_C(0x6F5D816A), UINT32_C(0xFC630F5E), UINT32_C(0x2E483FED)}}, {{UINT32_C(0x967C7140), UINT32_C(0xDBF82EC4), UINT32_C(0x0D20A2A5), UINT32_C(0x6265CAD1), UINT32_C(0x5862DEFE), UINT32_C(0x1509652B), UINT32_C(0x94A284E5), UINT32_C(0x699DD939)}, {UINT32_C(0x0B2CC732), UINT32_C(0xC0116646), UINT32_C(0x94C3EF86), UINT32_C(0x583FE012), UINT32_C(0xCD353430), UINT32_C(0xCD5DAEA8), UINT32_C(0xC7ADA62B), UINT32_C(0x2B39A746)}}, {{UINT32_C(0xE4257BBC), UINT32_C(0xF449B989), UINT32_C(0xA90DCCE6), UINT32_C(0x95BA21BA), UINT32_C(0x93CA4ACD), UINT32_C(0xDD53AD5C), UINT32_C(0x0BB4213B), UINT32_C(0x7FCF2738)}, {UINT32_C(0xC2E7E54E), UINT32_C(0x0E57C1C0), UINT32_C(0xA1A0E975), UINT32_C(0xD1769DAE), UINT32_C(0xC3B6E13B), UINT32_C(0x68F62C4E), UINT32_C(0x781242D8), UINT32_C(0x75152F9A)}}, {{UINT32_C(0x24B8B820), UINT32_C(0x4D582768), UINT32_C(0x5BBD9F84), UINT32_C(0x36E37AC4), UINT32_C(0xDA076F12), UINT32_C(0x1F34414A), UINT32_C(0x3E0333C6), UINT32_C(0x08A77C28)}, {UINT32_C(0xD9193382), UINT32_C(0xBB1F017D), UINT32_C(0x83A5612D), UINT32_C(0x56E9AA24), UINT32_C(0xD0B4554F), UINT32_C(0x6959B02B), UINT32_C(0xE4559B52), UINT32_C(0x2479BC56)}}, }, { {{UINT32_C(0x0F570A8E), UINT32_C(0x96D631C6), UINT32_C(0xD714B807), UINT32_C(0xE3F566A3), UINT32_C(0xEF7E1550), UINT32_C(0x564DD512), UINT32_C(0x79FA2F58), UINT32_C(0x1C5CF24A)}, {UINT32_C(0x897958DB), UINT32_C(0x973BA599), UINT32_C(0x11A9CBB1), UINT32_C(0x93951D17), UINT32_C(0xA37A969A), UINT32_C(0x86BA17F6), UINT32_C(0xA069B195), UINT32_C(0x4807CAC7)}}, {{UINT32_C(0x6665B35E), UINT32_C(0xB64AC0D4), UINT32_C(0x7EF72C68), UINT32_C(0xBA9CD394), UINT32_C(0x9C4CBC44), UINT32_C(0x838807B2), UINT32_C(0x82770197), UINT32_C(0x2675D268)}, {UINT32_C(0x17087FA9), UINT32_C(0xBFC2F137), UINT32_C(0xE7B79B31), UINT32_C(0x811E644B), UINT32_C(0xC963A061), UINT32_C(0x597CE23F), UINT32_C(0x2EA0DEB0), UINT32_C(0x40BC32E4)}}, {{UINT32_C(0x27C85959), UINT32_C(0xC0AEFB50), UINT32_C(0x058E0FDD), UINT32_C(0x76D1087E), UINT32_C(0x7E51A6F8), UINT32_C(0x6ADA5AAF), UINT32_C(0x054A058D), UINT32_C(0x424B16E0)}, {UINT32_C(0x63AF9766), UINT32_C(0x9A2C20A9), UINT32_C(0x3CF18DAB), UINT32_C(0x4C1CB532), UINT32_C(0x6C5D6A00), UINT32_C(0x599CD929), UINT32_C(0x8AA311BF), UINT32_C(0x57C39BAE)}}, {{UINT32_C(0xCD987F02), UINT32_C(0x3FDF5B46), UINT32_C(0x353175C4), UINT32_C(0x57755078), UINT32_C(0xCD578394), UINT32_C(0x80223EC0), UINT32_C(0xAEB7D278), UINT32_C(0x04BBA6AC)}, {UINT32_C(0x8688BFB2), UINT32_C(0xD27FD2BE), UINT32_C(0xC27A62E5), UINT32_C(0xB2F80278), UINT32_C(0x339429D8), UINT32_C(0x8BA6FB07), UINT32_C(0x3AB70AA0), UINT32_C(0x57737FF6)}}, {{UINT32_C(0x8EAEB3C9), UINT32_C(0x0140E47F), UINT32_C(0x735AC8EA), UINT32_C(0xB91C9798), UINT32_C(0x83D4EFAA), UINT32_C(0x325E0312), UINT32_C(0xD9C5888E), UINT32_C(0x1E7DA3BE)}, {UINT32_C(0xF7F1EB13), UINT32_C(0xA210CDA6), UINT32_C(0x936EA9E9), UINT32_C(0xEDC1F6B3), UINT32_C(0x1B097F65), UINT32_C(0x46E831C4), UINT32_C(0x1939A0AE), UINT32_C(0x00857601)}}, {{UINT32_C(0x1F68BB40), UINT32_C(0x7C26F711), UINT32_C(0x39DDBE6D), UINT32_C(0xEA69C845), UINT32_C(0xE5316F22), UINT32_C(0x590BF426), UINT32_C(0xCC2DF9C9), UINT32_C(0x40CDC921)}, {UINT32_C(0xF3F991C6), UINT32_C(0x28A32DDE), UINT32_C(0x5356CA78), UINT32_C(0xD75B59E6), UINT32_C(0xD1F5F318), UINT32_C(0xB5DD3861), UINT32_C(0xE7929834), UINT32_C(0x09EB1A2D)}}, {{UINT32_C(0xDBC0370D), UINT32_C(0x701F9A2D), UINT32_C(0x2870B59D), UINT32_C(0x559D0FAF), UINT32_C(0x55367B5D), UINT32_C(0xE89E5DF0), UINT32_C(0x74005A58), UINT32_C(0x22BBD4FC)}, {UINT32_C(0x99CDC76B), UINT32_C(0x7ACED1E4), UINT32_C(0xE3C219D3), UINT32_C(0xD41C827C), UINT32_C(0x8221D91F), UINT32_C(0x5AF3F2AE), UINT32_C(0xE5B6BC98), UINT32_C(0x6D62C990)}}, {{UINT32_C(0x7FFC9D0F), UINT32_C(0x23B2A0BF), UINT32_C(0x974CA299), UINT32_C(0xED98F71D), UINT32_C(0x151D559B), UINT32_C(0x10F8C07A), UINT32_C(0x8E949C62), UINT32_C(0x40E46FC3)}, {UINT32_C(0xBBE55338), UINT32_C(0x0CF53E34), UINT32_C(0x115520D4), UINT32_C(0xF2D6CF26), UINT32_C(0x590B4E23), UINT32_C(0x915FF09A), UINT32_C(0xBEDC75F2), UINT32_C(0x072E4233)}}, {{UINT32_C(0x997E9BFA), UINT32_C(0xB67A6B60), UINT32_C(0x973BC3E7), UINT32_C(0xE7686AC9), UINT32_C(0x0B228320), UINT32_C(0x9525B449), UINT32_C(0x7ADE8F19), UINT32_C(0x6C727583)}, {UINT32_C(0x062FF3D5), UINT32_C(0x3D064298), UINT32_C(0x07E22768), UINT32_C(0x5483826C), UINT32_C(0x1F7A64A4), UINT32_C(0xF4ADE921), UINT32_C(0xBD92EB25), UINT32_C(0x70BDDCF7)}}, {{UINT32_C(0x5D8A9E36), UINT32_C(0xA8DB3611), UINT32_C(0xFA81065A), UINT32_C(0xAA6A5F33), UINT32_C(0x366DDA90), UINT32_C(0x8EC120A3), UINT32_C(0xD8A15CF7), UINT32_C(0x2AA0AB25)}, {UINT32_C(0xA0DFFB9C), UINT32_C(0x5E11E169), UINT32_C(0x118408A7), UINT32_C(0x8C7572E9), UINT32_C(0x35833ADF), UINT32_C(0x4EEFD13E), UINT32_C(0xFC2C1811), UINT32_C(0x2C6732E8)}}, {{UINT32_C(0xB1537DF6), UINT32_C(0x15D063F9), UINT32_C(0x0414FCFD), UINT32_C(0x864176B3), UINT32_C(0x8FF9E32E), UINT32_C(0x9C0A194C), UINT32_C(0xDDE1540B), UINT32_C(0x4DB14C6F)}, {UINT32_C(0x31F6493F), UINT32_C(0xFAA4AED4), UINT32_C(0xD3C41A46), UINT32_C(0x2C479F1D), UINT32_C(0x8E5E85A2), UINT32_C(0xC3119667), UINT32_C(0x84E9A76C), UINT32_C(0x7E567C80)}}, {{UINT32_C(0x689A6B95), UINT32_C(0xB9E2C92A), UINT32_C(0x3B635B01), UINT32_C(0xCCEAC383), UINT32_C(0x34AAB952), UINT32_C(0x04FEA465), UINT32_C(0x63B5CF63), UINT32_C(0x772E5027)}, {UINT32_C(0x25830581), UINT32_C(0xCB94F5D2), UINT32_C(0xC77FB7DE), UINT32_C(0x791004AF), UINT32_C(0x5140E4AE), UINT32_C(0x53273C33), UINT32_C(0xA524419F), UINT32_C(0x0C2D329E)}}, {{UINT32_C(0xB307B0E4), UINT32_C(0xB7CEDA36), UINT32_C(0x0F8F9667), UINT32_C(0x12DF7FD0), UINT32_C(0xBF62BD94), UINT32_C(0x74274002), UINT32_C(0xC436C319), UINT32_C(0x6765C73D)}, {UINT32_C(0xF6EEC946), UINT32_C(0x79B64CE5), UINT32_C(0xDAB258B6), UINT32_C(0x3B1B4B43), UINT32_C(0xEE1F8B84), UINT32_C(0x377819A3), UINT32_C(0x76D0EB1F), UINT32_C(0x1F45F1D6)}}, {{UINT32_C(0x58C953AD), UINT32_C(0xCC5BF9B3), UINT32_C(0x7BAD1D2C), UINT32_C(0x8303250F), UINT32_C(0xF164972B), UINT32_C(0xBCA7BC36), UINT32_C(0xB1DFDA64), UINT32_C(0x2CACF8A9)}, {UINT32_C(0xD4E2A06F), UINT32_C(0xB03A59B9), UINT32_C(0x1B7FB8FD), UINT32_C(0xFED68E68), UINT32_C(0x7E747AE6), UINT32_C(0x08F75A52), UINT32_C(0x37A4420B), UINT32_C(0x3299EA6B)}}, {{UINT32_C(0x932E5BA6), UINT32_C(0x49A00BE6), UINT32_C(0x56114C4B), UINT32_C(0x49212505), UINT32_C(0x376183C7), UINT32_C(0x786B7D31), UINT32_C(0xDD8A5EAF), UINT32_C(0x01F9E229)}, {UINT32_C(0x53094AD4), UINT32_C(0xE9B8E990), UINT32_C(0xBFAEDFA8), UINT32_C(0x2EDA305C), UINT32_C(0x7F9E3BC8), UINT32_C(0x34443726), UINT32_C(0x6B55B3C3), UINT32_C(0x1729519C)}}, {{UINT32_C(0x50A597D6), UINT32_C(0xEA5A68C0), UINT32_C(0xF1E86D1B), UINT32_C(0xA65147D4), UINT32_C(0x8B47CDEB), UINT32_C(0x554FA36B), UINT32_C(0x9F24FFED), UINT32_C(0x7F38364B)}, {UINT32_C(0x1D2A8E2B), UINT32_C(0x657C7E05), UINT32_C(0xE3F64D62), UINT32_C(0x8270F1A7), UINT32_C(0x953AF5A2), UINT32_C(0xFD258B59), UINT32_C(0x43510AA3), UINT32_C(0x6DE01141)}}, }, { {{UINT32_C(0x0D7A5CBE), UINT32_C(0x48390428), UINT32_C(0xDE441E5E), UINT32_C(0xD37E8C1F), UINT32_C(0x0DE31C8C), UINT32_C(0x908C88B8), UINT32_C(0x0ACD87CE), UINT32_C(0x7C0E24BB)}, {UINT32_C(0x25ECCCE8), UINT32_C(0x4A781177), UINT32_C(0xCBDA746F), UINT32_C(0xC06C2F7A), UINT32_C(0xAB565DD4), UINT32_C(0xDB9E9A08), UINT32_C(0xBE776F5B), UINT32_C(0x1E9B44C0)}}, {{UINT32_C(0x85B54ABC), UINT32_C(0x7CFD4E50), UINT32_C(0xE7A44F8B), UINT32_C(0x41A4A4DC), UINT32_C(0xA4422576), UINT32_C(0x751C5052), UINT32_C(0xD56B6CB1), UINT32_C(0x534FE0B2)}, {UINT32_C(0xD5D767D0), UINT32_C(0x22DAA5CD), UINT32_C(0x0AF8E22C), UINT32_C(0x9C1999AB), UINT32_C(0x99259068), UINT32_C(0xC70C0932), UINT32_C(0xFD0839F0), UINT32_C(0x459D212E)}}, {{UINT32_C(0xFD32D79B), UINT32_C(0xA207E7DE), UINT32_C(0x410B479F), UINT32_C(0xA7B54991), UINT32_C(0xD68E5CDC), UINT32_C(0x806912B6), UINT32_C(0x92AB8B64), UINT32_C(0x1CB7B68C)}, {UINT32_C(0xDF98339F), UINT32_C(0x3DB85378), UINT32_C(0x83EA7A18), UINT32_C(0xA24101DC), UINT32_C(0xE25522C5), UINT32_C(0x8892367C), UINT32_C(0x7753A2C3), UINT32_C(0x491A8BB3)}}, {{UINT32_C(0x8C7875A7), UINT32_C(0x571C547E), UINT32_C(0xE9747C13), UINT32_C(0x7E5F23E4), UINT32_C(0x1058548D), UINT32_C(0x00F3BBB2), UINT32_C(0xE2397102), UINT32_C(0x7081F172)}, {UINT32_C(0x6B573034), UINT32_C(0xB4351B8A), UINT32_C(0xC1A094F0), UINT32_C(0xB35A4F44), UINT32_C(0xAE951E96), UINT32_C(0xE2C1DAED), UINT32_C(0xB9DAA081), UINT32_C(0x5CF2A742)}}, {{UINT32_C(0x9828ED9F), UINT32_C(0xB4F0D3F0), UINT32_C(0xA9251386), UINT32_C(0x6DB312FB), UINT32_C(0x537203F2), UINT32_C(0xC9A4583F), UINT32_C(0x9CE76D40), UINT32_C(0x5E099639)}, {UINT32_C(0xC9F8CEA8), UINT32_C(0x3381B894), UINT32_C(0x626E07E8), UINT32_C(0x8242DAF8), UINT32_C(0x6077DFD9), UINT32_C(0x64A0B68C), UINT32_C(0x563CF051), UINT32_C(0x3CC462C0)}}, {{UINT32_C(0x87AF4A45), UINT32_C(0x8937364C), UINT32_C(0x2DE0FD60), UINT32_C(0x8C4ACBFA), UINT32_C(0x472A5D8A), UINT32_C(0xF10AED11), UINT32_C(0x5380C2E6), UINT32_C(0x3F5674B5)}, {UINT32_C(0x2BF8A452), UINT32_C(0x8F4FD0F5), UINT32_C(0xC7390418), UINT32_C(0xB436E388), UINT32_C(0xE6EE9406), UINT32_C(0xAFAB7B7C), UINT32_C(0x951739BA), UINT32_C(0x4F623177)}}, {{UINT32_C(0xA9B50F2A), UINT32_C(0x90B0ED35), UINT32_C(0xAC6CF217), UINT32_C(0x46DC3F91), UINT32_C(0x2C7B119C), UINT32_C(0x2F142031), UINT32_C(0x07D79225), UINT32_C(0x55A93CBC)}, {UINT32_C(0xB304A642), UINT32_C(0x45E0DD7D), UINT32_C(0xD572D446), UINT32_C(0xB743DFCD), UINT32_C(0xAC74B368), UINT32_C(0x867B02EB), UINT32_C(0x169B94B0), UINT32_C(0x67B2B86C)}}, {{UINT32_C(0x483CFEDB), UINT32_C(0x18396DA7), UINT32_C(0x8A3A07C2), UINT32_C(0x6C6E0370), UINT32_C(0xAB554998), UINT32_C(0xF32A1AFE), UINT32_C(0x87D1C136), UINT32_C(0x408C9119)}, {UINT32_C(0x4BBE0B78), UINT32_C(0x755F6325), UINT32_C(0xD1178550), UINT32_C(0xDC4A7319), UINT32_C(0xB3B9E459), UINT32_C(0x44B49813), UINT32_C(0x4C3D3620), UINT32_C(0x0294B9A9)}}, {{UINT32_C(0x067FA6FF), UINT32_C(0x6480F6FE), UINT32_C(0xF307A52E), UINT32_C(0x67891400), UINT32_C(0x7F865DA8), UINT32_C(0x9F846EF8), UINT32_C(0xAE02F671), UINT32_C(0x318DAC55)}, {UINT32_C(0xE288A317), UINT32_C(0x91119652), UINT32_C(0x038C61B8), UINT32_C(0x4D7CF2B8), UINT32_C(0x5154C1A8), UINT32_C(0x098F80DD), UINT32_C(0xD239A2D4), UINT32_C(0x10C04F87)}}, {{UINT32_C(0x5CA6F183), UINT32_C(0x13460926), UINT32_C(0xD52001ED), UINT32_C(0x5E97AD18), UINT32_C(0xE14843DF), UINT32_C(0x7DCD2477), UINT32_C(0x98A30426), UINT32_C(0x27DAB276)}, {UINT32_C(0xE120D80C), UINT32_C(0x7939CAE3), UINT32_C(0x51E5B81A), UINT32_C(0xC9F46466), UINT32_C(0xE2E49D52), UINT32_C(0xED620322), UINT32_C(0xFA172BBB), UINT32_C(0x3C0F5A2E)}}, {{UINT32_C(0x5DB1196B), UINT32_C(0xBFFE8742), UINT32_C(0x49B7214E), UINT32_C(0xCD45F8ED), UINT32_C(0xC35F5C33), UINT32_C(0x923ABA47), UINT32_C(0x83F3EE48), UINT32_C(0x16ED1F10)}, {UINT32_C(0x99274930), UINT32_C(0x042E6DF0), UINT32_C(0xC5F8EA16), UINT32_C(0xE8AE1DCF), UINT32_C(0xF02EA2B2), UINT32_C(0x004462CB), UINT32_C(0xD284B04E), UINT32_C(0x427F9381)}}, {{UINT32_C(0x75EFACC5), UINT32_C(0x4CD481F8), UINT32_C(0x21C83368), UINT32_C(0xD98C3FD4), UINT32_C(0x3894CE88), UINT32_C(0x4335E7C8), UINT32_C(0x955A298C), UINT32_C(0x18321F87)}, {UINT32_C(0xD1716E18), UINT32_C(0x073DD00A), UINT32_C(0xFE0BFE61), UINT32_C(0x66D82A5F), UINT32_C(0x2310C532), UINT32_C(0x7D869E20), UINT32_C(0x19BF4704), UINT32_C(0x29A376FB)}}, {{UINT32_C(0xC149B5B0), UINT32_C(0xA1B12B35), UINT32_C(0x1E828959), UINT32_C(0x3411B231), UINT32_C(0x560D99FB), UINT32_C(0x56417519), UINT32_C(0xEBB52124), UINT32_C(0x4E0EB143)}, {UINT32_C(0x6AEF3801), UINT32_C(0x7B594B5E), UINT32_C(0x9ECB536E), UINT32_C(0x00AEE12E), UINT32_C(0x56E23145), UINT32_C(0x6BF0FB29), UINT32_C(0x61AE8E98), UINT32_C(0x2B2D83B9)}}, {{UINT32_C(0x6AC27F2D), UINT32_C(0x9CB3E2E8), UINT32_C(0x5A6280AA), UINT32_C(0x82BACA96), UINT32_C(0x2C6B7C8F), UINT32_C(0xCBC6C01B), UINT32_C(0xD0C01ABD), UINT32_C(0x390511BC)}, {UINT32_C(0x49551C0D), UINT32_C(0xB322D972), UINT32_C(0x7B6489C8), UINT32_C(0x7905E82E), UINT32_C(0x40EEC20D), UINT32_C(0x4DD0CE8B), UINT32_C(0x2409298A), UINT32_C(0x5C0B3EE7)}}, {{UINT32_C(0xB635FB99), UINT32_C(0x4418D685), UINT32_C(0x3ACE8B39), UINT32_C(0x652EA608), UINT32_C(0x46FC4047), UINT32_C(0xE586FBDC), UINT32_C(0xD8CC13D8), UINT32_C(0x3C832D34)}, {UINT32_C(0xF7AA54A1), UINT32_C(0x14CC9F23), UINT32_C(0x07153B9F), UINT32_C(0x80D094E6), UINT32_C(0x6A2EED8E), UINT32_C(0x0776E540), UINT32_C(0x77249085), UINT32_C(0x03CC3BFC)}}, {{UINT32_C(0x1308C1A8), UINT32_C(0x5F8F281F), UINT32_C(0xD1AFC4B7), UINT32_C(0x31C8E737), UINT32_C(0x41AE8EF2), UINT32_C(0x67785298), UINT32_C(0xFD028A4B), UINT32_C(0x17716086)}, {UINT32_C(0xF922E100), UINT32_C(0x1A2083E0), UINT32_C(0xD53FE691), UINT32_C(0xD67EC9D1), UINT32_C(0xECCA8DEB), UINT32_C(0x2DF8B6ED), UINT32_C(0xBCCC999E), UINT32_C(0x3B595EE4)}}, }, { {{UINT32_C(0x5A4B8C04), UINT32_C(0x11F03F89), UINT32_C(0x7DAE8E6B), UINT32_C(0x254C3648), UINT32_C(0x637CDB83), UINT32_C(0xAB6EAAF1), UINT32_C(0xFDDED8F6), UINT32_C(0x41F52243)}, {UINT32_C(0xBBDF3270), UINT32_C(0x487078E1), UINT32_C(0x339CEA28), UINT32_C(0x98853B49), UINT32_C(0xAB3EDE57), UINT32_C(0x8AF0522B), UINT32_C(0x85EB4CC0), UINT32_C(0x734D711F)}}, {{UINT32_C(0xF86BA644), UINT32_C(0xFD1F46AD), UINT32_C(0xA3299855), UINT32_C(0xA5332B97), UINT32_C(0xD9493634), UINT32_C(0x61BE90DB), UINT32_C(0xC2705911), UINT32_C(0x308F09B1)}, {UINT32_C(0x0B7918A5), UINT32_C(0xD59F1B1A), UINT32_C(0xCF6399E6), UINT32_C(0x9CF333D0), UINT32_C(0xFBB26B6B), UINT32_C(0xD09C63CD), UINT32_C(0xA6536647), UINT32_C(0x76C27913)}}, {{UINT32_C(0xAAAB555C), UINT32_C(0x3DF1811F), UINT32_C(0x886C828B), UINT32_C(0x60853351), UINT32_C(0xF1E87F41), UINT32_C(0xF6CA7707), UINT32_C(0x7D7082E6), UINT32_C(0x5B4F6EDF)}, {UINT32_C(0x3F672DE7), UINT32_C(0xADE518E0), UINT32_C(0x022541B2), UINT32_C(0x00ED0B84), UINT32_C(0x618E8969), UINT32_C(0x04FE5DD6), UINT32_C(0xDB9CCA4D), UINT32_C(0x2F5F5C65)}}, {{UINT32_C(0x96BDAE2C), UINT32_C(0x00B69B45), UINT32_C(0x770604C4), UINT32_C(0x06DB22CF), UINT32_C(0x856585C3), UINT32_C(0xC2EB7F8F), UINT32_C(0x0413C614), UINT32_C(0x6E322539)}, {UINT32_C(0x70A46872), UINT32_C(0x22C09EA8), UINT32_C(0x1FF23734), UINT32_C(0x143E73BC), UINT32_C(0x575C20B4), UINT32_C(0xCAC5E2DD), UINT32_C(0x3FEBE787), UINT32_C(0x225E5390)}}, {{UINT32_C(0xBE9C512D), UINT32_C(0x594FEA4E), UINT32_C(0x92CB73AE), UINT32_C(0x58507092), UINT32_C(0xB0CE2096), UINT32_C(0xFD8EFC7D), UINT32_C(0xE031D6AB), UINT32_C(0x3B58C199)}, {UINT32_C(0x479F23E4), UINT32_C(0x55DA1CBD), UINT32_C(0xA6DB6137), UINT32_C(0x060C6BB5), UINT32_C(0x6864488E), UINT32_C(0xD8319CF8), UINT32_C(0x21B02EDA), UINT32_C(0x6C15A31B)}}, {{UINT32_C(0x8CA7084D), UINT32_C(0x13C48372), UINT32_C(0xA171ECE5), UINT32_C(0xF7554E59), UINT32_C(0x23A97699), UINT32_C(0x7425C5D8), UINT32_C(0x71E1120E), UINT32_C(0x6F2C68DA)}, {UINT32_C(0x24324B64), UINT32_C(0x9591B9B6), UINT32_C(0xC02AC704), UINT32_C(0x2DA33472), UINT32_C(0x81EE1295), UINT32_C(0xC5DE7FC9), UINT32_C(0x5D6E93C6), UINT32_C(0x6A646A44)}}, {{UINT32_C(0xA39D6554), UINT32_C(0x48684061), UINT32_C(0xC3DF57B6), UINT32_C(0xB70ABF61), UINT32_C(0x58B9EEE3), UINT32_C(0x9824AFD6), UINT32_C(0x3A14A733), UINT32_C(0x46EBE9D1)}, {UINT32_C(0xD74F8E94), UINT32_C(0x8E70F95D), UINT32_C(0x6AFCA4E2), UINT32_C(0xA9D922A2), UINT32_C(0x6988CC16), UINT32_C(0x519A9753), UINT32_C(0xD545AF8A), UINT32_C(0x711DEF16)}}, {{UINT32_C(0x811A2BF7), UINT32_C(0x362A5D95), UINT32_C(0x566B90CE), UINT32_C(0x42A84A33), UINT32_C(0x7C41EC87), UINT32_C(0x25CBC760), UINT32_C(0xD4B7DBEE), UINT32_C(0x6B77E39C)}, {UINT32_C(0x833015A4), UINT32_C(0xA98B8201), UINT32_C(0xC31B26F4), UINT32_C(0xE412E217), UINT32_C(0xE0090782), UINT32_C(0x518BE8F0), UINT32_C(0x3DB51D4E), UINT32_C(0x08D9F4B6)}}, {{UINT32_C(0x297D421E), UINT32_C(0x2C80CE87), UINT32_C(0xADBA1498), UINT32_C(0x2FD137F8), UINT32_C(0x2899AA14), UINT32_C(0xA2ED3D47), UINT32_C(0xFE4F365A), UINT32_C(0x2AC924A5)}, {UINT32_C(0x666DC0A0), UINT32_C(0xAC0389B7), UINT32_C(0x8ABF3D9E), UINT32_C(0x3CC99739), UINT32_C(0xDFBFF83A), UINT32_C(0x33060DB6), UINT32_C(0x0339C3B8), UINT32_C(0x54EEE215)}}, {{UINT32_C(0x820F7E4D), UINT32_C(0x06C3A4F5), UINT32_C(0x08C3D311), UINT32_C(0x86F083E2), UINT32_C(0xFE4B0476), UINT32_C(0x47E29984), UINT32_C(0xCA7DF6CF), UINT32_C(0x218F52E2)}, {UINT32_C(0xBF2C2084), UINT32_C(0x59317E26), UINT32_C(0x289A10CF), UINT32_C(0xEA9C865B), UINT32_C(0x2074FEA3), UINT32_C(0x7AA1E50B), UINT32_C(0x4B3EFC31), UINT32_C(0x708A1D8C)}}, {{UINT32_C(0x864817D7), UINT32_C(0x34C5C63E), UINT32_C(0xD89E995B), UINT32_C(0x0F614043), UINT32_C(0x975E2A03), UINT32_C(0x60CE8BCE), UINT32_C(0x78493E0C), UINT32_C(0x70916E29)}, {UINT32_C(0x216782C6), UINT32_C(0xBD0748F9), UINT32_C(0xED32FB72), UINT32_C(0x0051C65A), UINT32_C(0x4DD64705), UINT32_C(0x9DC5F558), UINT32_C(0xEEC14B50), UINT32_C(0x674F1A63)}}, {{UINT32_C(0xDB633FD1), UINT32_C(0x73D6E68E), UINT32_C(0xF52F9537), UINT32_C(0x7B5F8303), UINT32_C(0x88A74CFB), UINT32_C(0x980FDDDC), UINT32_C(0x47FC32D1), UINT32_C(0x6419C18F)}, {UINT32_C(0x870B5D59), UINT32_C(0x93727B4C), UINT32_C(0xCF28021D), UINT32_C(0x4BCE05DE), UINT32_C(0xAB4F0CE5), UINT32_C(0x3C059B47), UINT32_C(0xB85FFDBB), UINT32_C(0x77CA7F67)}}, {{UINT32_C(0xC525088E), UINT32_C(0xDBEADDCE), UINT32_C(0x390D2221), UINT32_C(0x561E12BE), UINT32_C(0xD9BA7AF0), UINT32_C(0xCD224FC1), UINT32_C(0x394DC073), UINT32_C(0x03744552)}, {UINT32_C(0x21BB6B6E), UINT32_C(0xCFC67B49), UINT32_C(0x1B5F8E6A), UINT32_C(0xD234FD8D), UINT32_C(0x40B7F8B0), UINT32_C(0x6DDBC18B), UINT32_C(0xDAACCC74), UINT32_C(0x79F40857)}}, {{UINT32_C(0x9DD71B9C), UINT32_C(0x30E5F990), UINT32_C(0x291124EF), UINT32_C(0x00FCBFA5), UINT32_C(0x49B8C570), UINT32_C(0xBE595A25), UINT32_C(0xBC094446), UINT32_C(0x5B4B8141)}, {UINT32_C(0x469191B6), UINT32_C(0xB22B4F04), UINT32_C(0xD73C4D38), UINT32_C(0x10845AC8), UINT32_C(0xED0C8224), UINT32_C(0x39C9F0FB), UINT32_C(0xF5813BEE), UINT32_C(0x7E009DFB)}}, {{UINT32_C(0xA61D09C0), UINT32_C(0xA47C2989), UINT32_C(0x59E55A9C), UINT32_C(0x3706F456), UINT32_C(0xEA0259B9), UINT32_C(0x2373976F), UINT32_C(0x077D20CC), UINT32_C(0x13FC0E09)}, {UINT32_C(0xE78D29CF), UINT32_C(0xBB24DD05), UINT32_C(0x822CFA02), UINT32_C(0xD8757A67), UINT32_C(0x3C55A4C6), UINT32_C(0x36CA7486), UINT32_C(0x3EEABBE1), UINT32_C(0x4234E689)}}, {{UINT32_C(0xB46BDB51), UINT32_C(0xA2F54D14), UINT32_C(0x675BB770), UINT32_C(0x8A530B78), UINT32_C(0xDE9F1F8B), UINT32_C(0x617D7E8E), UINT32_C(0x2DCC4712), UINT32_C(0x799B3E44)}, {UINT32_C(0xB486FE8C), UINT32_C(0x658A31D8), UINT32_C(0x163D4AF0), UINT32_C(0x45BAFC29), UINT32_C(0xA5289C8D), UINT32_C(0x3A2C7F66), UINT32_C(0xB91FF3DB), UINT32_C(0x4ECC3C7D)}}, }, { {{UINT32_C(0xDF4DFD43), UINT32_C(0x738CF1C7), UINT32_C(0xE987084C), UINT32_C(0x72943A2D), UINT32_C(0x2491FF24), UINT32_C(0xEA21C05F), UINT32_C(0xDA050094), UINT32_C(0x3D3F4ED7)}, {UINT32_C(0x61C4054D), UINT32_C(0xF90644E4), UINT32_C(0x3A50E82A), UINT32_C(0x25379214), UINT32_C(0xC7DEF970), UINT32_C(0x47EDB006), UINT32_C(0x0F53F307), UINT32_C(0x0F8F031C)}}, {{UINT32_C(0x724976D5), UINT32_C(0x50FEB6D8), UINT32_C(0xF40C7720), UINT32_C(0x57AA499F), UINT32_C(0x0DAAF428), UINT32_C(0x6B80AC54), UINT32_C(0x1F6FC276), UINT32_C(0x7AC6845E)}, {UINT32_C(0x17A4B9C5), UINT32_C(0x8EC7FAB1), UINT32_C(0xED0C8F97), UINT32_C(0x8336DD62), UINT32_C(0xB7B7104E), UINT32_C(0x6014A510), UINT32_C(0xA2911C30), UINT32_C(0x4991A03B)}}, {{UINT32_C(0xCBCC9BA3), UINT32_C(0x6D353975), UINT32_C(0xC4564492), UINT32_C(0x23E97E28), UINT32_C(0xF8AEED3E), UINT32_C(0xDF432FDA), UINT32_C(0x6F6B472C), UINT32_C(0x11DB40DD)}, {UINT32_C(0x95AA0174), UINT32_C(0x5B87005B), UINT32_C(0x89D9F1A8), UINT32_C(0x1DB41080), UINT32_C(0x689DF208), UINT32_C(0x5A6BC444), UINT32_C(0xBF38FF8D), UINT32_C(0x16153F87)}}, {{UINT32_C(0xFFD3C814), UINT32_C(0xD217003F), UINT32_C(0xFD50AF95), UINT32_C(0x1ADE64C3), UINT32_C(0x9FFB8BEB), UINT32_C(0x1936332C), UINT32_C(0xD70CD8D8), UINT32_C(0x6EE322DC)}, {UINT32_C(0xF2A60976), UINT32_C(0xE40A0419), UINT32_C(0xEF93B05B), UINT32_C(0xA62F6FA1), UINT32_C(0x596575FF), UINT32_C(0x5978206C), UINT32_C(0xB68BFE5C), UINT32_C(0x5CDCA200)}}, {{UINT32_C(0xB7949E33), UINT32_C(0x3FB16AED), UINT32_C(0x40304A1B), UINT32_C(0x34538928), UINT32_C(0x3BCA4239), UINT32_C(0x7FA35A34), UINT32_C(0xEE76919E), UINT32_C(0x22FD1AEF)}, {UINT32_C(0x0F6A5D50), UINT32_C(0x1F8FE6A4), UINT32_C(0x26BBA46B), UINT32_C(0x27CC704F), UINT32_C(0x3420CC52), UINT32_C(0x230FD0CA), UINT32_C(0xB3A83D85), UINT32_C(0x3E9E4DA4)}}, {{UINT32_C(0x7F5CC75E), UINT32_C(0x1D82390E), UINT32_C(0x49D0A605), UINT32_C(0x70256245), UINT32_C(0x4FF4BC44), UINT32_C(0x5B877813), UINT32_C(0xB5EC02E4), UINT32_C(0x28E6A057)}, {UINT32_C(0x2E89FB84), UINT32_C(0xBC7A10DA), UINT32_C(0x20E1EA00), UINT32_C(0x3AF182E5), UINT32_C(0x9C507274), UINT32_C(0x4B590FFA), UINT32_C(0xAA7FD65B), UINT32_C(0x26BA94D6)}}, {{UINT32_C(0x238CC195), UINT32_C(0xC02CC77C), UINT32_C(0xA97EE3E4), UINT32_C(0x3F175C97), UINT32_C(0xDFA1F9DC), UINT32_C(0x8A28FA23), UINT32_C(0x1F968D15), UINT32_C(0x35CAC0FF)}, {UINT32_C(0x37C7C773), UINT32_C(0x0FC41B33), UINT32_C(0xBC999443), UINT32_C(0x71E06B10), UINT32_C(0x2C87B0A4), UINT32_C(0x073A1ABA), UINT32_C(0x9E5E8B70), UINT32_C(0x29F29B12)}}, {{UINT32_C(0xE491FE70), UINT32_C(0xAA25F348), UINT32_C(0xC1713992), UINT32_C(0x9371F94B), UINT32_C(0x4FA08818), UINT32_C(0x674B478C), UINT32_C(0xB1407431), UINT32_C(0x6F3C31FE)}, {UINT32_C(0xD93DD5E1), UINT32_C(0xBB7D37FB), UINT32_C(0x7E04EE7A), UINT32_C(0xE34A40B8), UINT32_C(0xF3C33528), UINT32_C(0xCF82360D), UINT32_C(0x01477712), UINT32_C(0x0A3B8FF5)}}, {{UINT32_C(0x6B718511), UINT32_C(0xA4591471), UINT32_C(0xD2FD6B9B), UINT32_C(0x7B0CE8DE), UINT32_C(0x6845DBEF), UINT32_C(0xC42544FA), UINT32_C(0x63AF476A), UINT32_C(0x456A6985)}, {UINT32_C(0x9CDE4E74), UINT32_C(0x5DD611F6), UINT32_C(0x2B346AEB), UINT32_C(0x86095683), UINT32_C(0x6E75B3D7), UINT32_C(0xD15C5DA0), UINT32_C(0xC72D5D2C), UINT32_C(0x220FFD73)}}, {{UINT32_C(0xD2ED888F), UINT32_C(0x478DA345), UINT32_C(0xE04CBCC7), UINT32_C(0xA69D4FB9), UINT32_C(0xB3F1179D), UINT32_C(0xA427150A), UINT32_C(0xD5CEA78A), UINT32_C(0x1DD3B8C2)}, {UINT32_C(0xB8628A22), UINT32_C(0x9462EFF0), UINT32_C(0xB2CB44A5), UINT32_C(0xB2FFFF4A), UINT32_C(0x24039BA8), UINT32_C(0x8234A3FF), UINT32_C(0x916DE889), UINT32_C(0x01BE7202)}}, {{UINT32_C(0x6DFCEF0B), UINT32_C(0x51066985), UINT32_C(0xDF20CDEE), UINT32_C(0x25729D98), UINT32_C(0x9693E5EF), UINT32_C(0x872FD39D), UINT32_C(0x2D859635), UINT32_C(0x72D03AE1)}, {UINT32_C(0xDACAEB82), UINT32_C(0x3F28F84E), UINT32_C(0xCB5284D7), UINT32_C(0x9EB40FD6), UINT32_C(0xC5F54041), UINT32_C(0x66C2DCA6), UINT32_C(0x1C1F2461), UINT32_C(0x4BDBA382)}}, {{UINT32_C(0x0E0ED176), UINT32_C(0xE5342197), UINT32_C(0xA225A47F), UINT32_C(0xF588547A), UINT32_C(0x1FEB2259), UINT32_C(0xC83B54ED), UINT32_C(0x92F3733D), UINT32_C(0x1B037913)}, {UINT32_C(0x2271ECFA), UINT32_C(0x935C9782), UINT32_C(0x53CFE07C), UINT32_C(0x5F7E94A6), UINT32_C(0x1B40CA19), UINT32_C(0xBFF5B0E6), UINT32_C(0x459445E1), UINT32_C(0x36C7851D)}}, {{UINT32_C(0x588C9748), UINT32_C(0xB6547971), UINT32_C(0x11970562), UINT32_C(0xCFD8E81B), UINT32_C(0x702FE4FA), UINT32_C(0x41333C80), UINT32_C(0x962A993B), UINT32_C(0x2F153C8C)}, {UINT32_C(0x8BDA48AC), UINT32_C(0x028BBD6A), UINT32_C(0xFE1DB02A), UINT32_C(0x7B076F88), UINT32_C(0x078FB3FC), UINT32_C(0xC9560400), UINT32_C(0x035907EA), UINT32_C(0x5DCC0946)}}, {{UINT32_C(0xA6233F1C), UINT32_C(0x93D7CF33), UINT32_C(0xDF2A187C), UINT32_C(0x03184BC4), UINT32_C(0xE83DAC32), UINT32_C(0x291149BC), UINT32_C(0xFAEDF216), UINT32_C(0x575F4279)}, {UINT32_C(0x086FC141), UINT32_C(0x101427B4), UINT32_C(0xD288562E), UINT32_C(0xC924F2AE), UINT32_C(0xEEF5799A), UINT32_C(0xDB610463), UINT32_C(0x6A09661D), UINT32_C(0x20F18767)}}, {{UINT32_C(0xF59D0C20), UINT32_C(0xE39BB775), UINT32_C(0x723A4EF2), UINT32_C(0x18DA90E2), UINT32_C(0xF56B381B), UINT32_C(0x8E747A7B), UINT32_C(0xF98F26DC), UINT32_C(0x7EF67224)}, {UINT32_C(0xE1F94B99), UINT32_C(0xB1373AF5), UINT32_C(0x0C3B6AA8), UINT32_C(0x1076FBA6), UINT32_C(0xA3A7811C), UINT32_C(0x7FCD0017), UINT32_C(0x46554E7E), UINT32_C(0x6D1A6973)}}, {{UINT32_C(0xB9CED2C2), UINT32_C(0xE5734077), UINT32_C(0x1F770914), UINT32_C(0xC94D17F8), UINT32_C(0x1CD248EB), UINT32_C(0x58B47BCB), UINT32_C(0x24804B6F), UINT32_C(0x2E06538C)}, {UINT32_C(0x32E7CA19), UINT32_C(0x275D933F), UINT32_C(0x1FC9241E), UINT32_C(0x1B982B49), UINT32_C(0x3986B6AC), UINT32_C(0x8B8A6ED5), UINT32_C(0x35B4EA6A), UINT32_C(0x17568221)}}, }, { {{UINT32_C(0xE796327F), UINT32_C(0x090AD05A), UINT32_C(0xAD21DD4B), UINT32_C(0xA78DAE5E), UINT32_C(0x9C2F8CBE), UINT32_C(0x8EEC9EDB), UINT32_C(0x653E0F2D), UINT32_C(0x33E375E0)}, {UINT32_C(0x8D67AC72), UINT32_C(0xDA19EFF2), UINT32_C(0x2737AB8C), UINT32_C(0xBFC7E62B), UINT32_C(0x4CF53C12), UINT32_C(0xBBF8BD1D), UINT32_C(0x45C6D555), UINT32_C(0x5ABFE23F)}}, {{UINT32_C(0x0DE39342), UINT32_C(0x32460B33), UINT32_C(0xB8977067), UINT32_C(0x3567454A), UINT32_C(0xF954592C), UINT32_C(0x10A1E47D), UINT32_C(0x4DD019C4), UINT32_C(0x4DE8C6EF)}, {UINT32_C(0x1BDAAAFA), UINT32_C(0x1F1D296B), UINT32_C(0x3A75AD99), UINT32_C(0x4E6B8E8F), UINT32_C(0xA27FE061), UINT32_C(0x259015E1), UINT32_C(0x9F320632), UINT32_C(0x6B6A4820)}}, {{UINT32_C(0xA0B5E605), UINT32_C(0x8AA089AF), UINT32_C(0x1B4058FD), UINT32_C(0x1D6C1EEE), UINT32_C(0xB4E89BEF), UINT32_C(0x1D920534), UINT32_C(0x16163340), UINT32_C(0x722A3A35)}, {UINT32_C(0xF33B49B2), UINT32_C(0xA3B9178C), UINT32_C(0x65558E90), UINT32_C(0xFF8FE9BB), UINT32_C(0x9794EFAE), UINT32_C(0x94766BC0), UINT32_C(0xFDFAEB42), UINT32_C(0x79A1EFA2)}}, {{UINT32_C(0xBCB6D558), UINT32_C(0x2FE44B97), UINT32_C(0xDB8B0A79), UINT32_C(0xB4F4F402), UINT32_C(0x247C32E5), UINT32_C(0xF53D8AB1), UINT32_C(0x4DA4C009), UINT32_C(0x3B883CE5)}, {UINT32_C(0x2EC9F1C6), UINT32_C(0xB46168BD), UINT32_C(0x6B8FE01A), UINT32_C(0xD40BDE7B), UINT32_C(0xCDFE509F), UINT32_C(0x60A5C168), UINT32_C(0x23BE249E), UINT32_C(0x3314D878)}}, {{UINT32_C(0x4D9F5769), UINT32_C(0x02511A85), UINT32_C(0xB49D6A8E), UINT32_C(0x8398F9BD), UINT32_C(0x5D2D7135), UINT32_C(0xE8D773F3), UINT32_C(0x9DECC331), UINT32_C(0x09B3B8AB)}, {UINT32_C(0x584C11D9), UINT32_C(0x8D2B269B), UINT32_C(0x6B6B86A9), UINT32_C(0xF7661944), UINT32_C(0xC7659AF7), UINT32_C(0x719A3620), UINT32_C(0x37C27DBE), UINT32_C(0x3CFC8DF0)}}, {{UINT32_C(0x1145B14B), UINT32_C(0x5EE0BE06), UINT32_C(0x23193ED6), UINT32_C(0xAC6950E4), UINT32_C(0xDF244C7F), UINT32_C(0x7291C44C), UINT32_C(0x43D744EA), UINT32_C(0x4650C162)}, {UINT32_C(0x34A084D8), UINT32_C(0x60B92D3F), UINT32_C(0x376E5414), UINT32_C(0xBBD44A0E), UINT32_C(0x0980F36C), UINT32_C(0x5C0E488A), UINT32_C(0xD7991A09), UINT32_C(0x4E53FCCA)}}, {{UINT32_C(0x367B55C2), UINT32_C(0x7A2ADBCF), UINT32_C(0x1FED467E), UINT32_C(0x96A88B75), UINT32_C(0xFB263845), UINT32_C(0x8E75E37E), UINT32_C(0xEB508DD0), UINT32_C(0x4C2E47B8)}, {UINT32_C(0xB19FCD14), UINT32_C(0x20BF51DE), UINT32_C(0x14CB67D0), UINT32_C(0xD9071749), UINT32_C(0x29EBDA7C), UINT32_C(0xEC90714B), UINT32_C(0x634C0F2E), UINT32_C(0x4ACADAA6)}}, {{UINT32_C(0xEC715EC9), UINT32_C(0xA516B9B8), UINT32_C(0x42B8A87B), UINT32_C(0xC7DCA263), UINT32_C(0xDA27B456), UINT32_C(0x2CE450C9), UINT32_C(0x00A8819F), UINT32_C(0x3C974812)}, {UINT32_C(0xECDED574), UINT32_C(0xF4822C23), UINT32_C(0x19FA48D4), UINT32_C(0xFA737FAD), UINT32_C(0x45D718E0), UINT32_C(0xE34B2F2A), UINT32_C(0xBEA7B540), UINT32_C(0x1D6F19FE)}}, {{UINT32_C(0x98E24789), UINT32_C(0xADC8FCE7), UINT32_C(0x45869609), UINT32_C(0xFE2F890C), UINT32_C(0x78A35C19), UINT32_C(0x6466E03C), UINT32_C(0xC1F34AA9), UINT32_C(0x24C70FED)}, {UINT32_C(0x57747DD1), UINT32_C(0x89530F75), UINT32_C(0x2B8CDE2D), UINT32_C(0x343DE05B), UINT32_C(0x35CC8D5A), UINT32_C(0xC33134E3), UINT32_C(0xAC9B4F2B), UINT32_C(0x3CCEFC38)}}, {{UINT32_C(0xEF923364), UINT32_C(0x84C904B8), UINT32_C(0xBDDD31D8), UINT32_C(0x46E1FECF), UINT32_C(0xFAE79B6B), UINT32_C(0xA8126DD6), UINT32_C(0xFBF05C9A), UINT32_C(0x4A53C034)}, {UINT32_C(0xBE8F255F), UINT32_C(0x44CA3ACB), UINT32_C(0xEC319885), UINT32_C(0x6F0FD374), UINT32_C(0xF1836DC2), UINT32_C(0xADBCB4AA), UINT32_C(0x65187EE9), UINT32_C(0x6CC3A596)}}, {{UINT32_C(0xB397B5E7), UINT32_C(0x941E7821), UINT32_C(0xFEE2A9D5), UINT32_C(0xD3457371), UINT32_C(0x66382F60), UINT32_C(0x9F69BE44), UINT32_C(0xA1F49E9B), UINT32_C(0x6DCEAD04)}, {UINT32_C(0x3BF21647), UINT32_C(0xDC6BC23B), UINT32_C(0xB5271BE9), UINT32_C(0x1500FD7F), UINT32_C(0xF23FDF3D), UINT32_C(0x9B0994DD), UINT32_C(0x45065CF7), UINT32_C(0x38A2ECEB)}}, {{UINT32_C(0x0DCA8BF4), UINT32_C(0x2667CEFE), UINT32_C(0xE46EB469), UINT32_C(0x8227ACB3), UINT32_C(0xA75C5B8B), UINT32_C(0x4C20677D), UINT32_C(0xB36ACDFE), UINT32_C(0x224FC5B4)}, {UINT32_C(0x7A6A01D3), UINT32_C(0xA0007E14), UINT32_C(0xF8A64EED), UINT32_C(0x15C79558), UINT32_C(0x93DEDC09), UINT32_C(0xFB58A76A), UINT32_C(0x26F10A98), UINT32_C(0x2057DDDC)}}, {{UINT32_C(0xBDB27AE4), UINT32_C(0x1FF658AE), UINT32_C(0xDDD96647), UINT32_C(0x7F30DF57), UINT32_C(0xC7294313), UINT32_C(0x63490B8D), UINT32_C(0x5435869E), UINT32_C(0x0EAEC573)}, {UINT32_C(0xDF115B78), UINT32_C(0x85F05C49), UINT32_C(0x62992F5D), UINT32_C(0x95739C0C), UINT32_C(0x2B573963), UINT32_C(0x72F14319), UINT32_C(0x86328FF4), UINT32_C(0x05600E64)}}, {{UINT32_C(0xEAB0F425), UINT32_C(0x9BE7331F), UINT32_C(0x74447C20), UINT32_C(0x2E4CF5AA), UINT32_C(0x66243D2A), UINT32_C(0x9B26F512), UINT32_C(0x84AB5627), UINT32_C(0x77C96722)}, {UINT32_C(0x601673B4), UINT32_C(0xEC545427), UINT32_C(0x2F127AF7), UINT32_C(0xEF6A34FB), UINT32_C(0xE2DFD269), UINT32_C(0x519559C1), UINT32_C(0x8258E37A), UINT32_C(0x34D7D754)}}, {{UINT32_C(0x5E8B5281), UINT32_C(0xC113747B), UINT32_C(0xE04D779B), UINT32_C(0x0C085456), UINT32_C(0x1CCBCFC6), UINT32_C(0x3E326052), UINT32_C(0x2A37D19F), UINT32_C(0x5C954CC1)}, {UINT32_C(0x9124435B), UINT32_C(0xB1A4A5B3), UINT32_C(0x18ED98E7), UINT32_C(0x5E8B8D41), UINT32_C(0x144A3793), UINT32_C(0xC973D969), UINT32_C(0x88DD8B49), UINT32_C(0x0CB98CC8)}}, {{UINT32_C(0xB48D04DF), UINT32_C(0x0E0233B2), UINT32_C(0x7BEAA4A5), UINT32_C(0x1B3916E0), UINT32_C(0xB672BE8C), UINT32_C(0xA24A4BE4), UINT32_C(0x845AB94D), UINT32_C(0x7A61506D)}, {UINT32_C(0xE7F4CA3B), UINT32_C(0x160DFA0F), UINT32_C(0xD84C1148), UINT32_C(0xA9562C89), UINT32_C(0x92A276EB), UINT32_C(0x52979B95), UINT32_C(0x924E86E9), UINT32_C(0x17869B53)}}, }, { {{UINT32_C(0x1A86D0D8), UINT32_C(0x5D39F478), UINT32_C(0xFB8BC8A9), UINT32_C(0xDE5932DA), UINT32_C(0x2F5B4B70), UINT32_C(0xD706C6D7), UINT32_C(0x8A36AFC2), UINT32_C(0x53F450FC)}, {UINT32_C(0x1E550B3B), UINT32_C(0xE1DC3540), UINT32_C(0x8B7EB6D2), UINT32_C(0x475507DC), UINT32_C(0xDFA2E5F7), UINT32_C(0xF803F78A), UINT32_C(0xC48097FF), UINT32_C(0x40B5F263)}}, {{UINT32_C(0x226CDB1F), UINT32_C(0x336FB00E), UINT32_C(0x88215C40), UINT32_C(0xDDC1BB02), UINT32_C(0x73C07FD0), UINT32_C(0x6C4DD40E), UINT32_C(0x8F7D15E7), UINT32_C(0x4D0D2E49)}, {UINT32_C(0xD2061402), UINT32_C(0xAF96E9B3), UINT32_C(0x1372FCF8), UINT32_C(0x15A3084A), UINT32_C(0x307B02D6), UINT32_C(0x91B571E6), UINT32_C(0x53AE7705), UINT32_C(0x2239592F)}}, {{UINT32_C(0xC20B6645), UINT32_C(0x7D8615A1), UINT32_C(0xC7C4465B), UINT32_C(0xF4875767), UINT32_C(0x861702AB), UINT32_C(0xF6D3E718), UINT32_C(0x131F726A), UINT32_C(0x7F014A53)}, {UINT32_C(0xDAAB77CA), UINT32_C(0x30809F8F), UINT32_C(0x28F944D3), UINT32_C(0x7CE8DC61), UINT32_C(0x9AEEF6A1), UINT32_C(0xF915111D), UINT32_C(0x206902FD), UINT32_C(0x246D7CC8)}}, {{UINT32_C(0xEF806225), UINT32_C(0x7677488B), UINT32_C(0xF4C75EAE), UINT32_C(0x994C8104), UINT32_C(0x4E0C8988), UINT32_C(0x17586D4E), UINT32_C(0x90E33A2A), UINT32_C(0x70E52580)}, {UINT32_C(0x022D2FED), UINT32_C(0xB993F26A), UINT32_C(0x689FBFBD), UINT32_C(0x955C130D), UINT32_C(0xA3612E8E), UINT32_C(0x0D3D1C63), UINT32_C(0xB91A8DE6), UINT32_C(0x423D73E1)}}, {{UINT32_C(0x3027164F), UINT32_C(0x7274BE08), UINT32_C(0x42FDB769), UINT32_C(0xDE907B49), UINT32_C(0xB697060D), UINT32_C(0x61D74449), UINT32_C(0x26602CC9), UINT32_C(0x18A5FDC2)}, {UINT32_C(0x049CAF4A), UINT32_C(0xB08DC02B), UINT32_C(0x78DBA1F1), UINT32_C(0xC84AF485), UINT32_C(0x7178E4DF), UINT32_C(0x0A5B3519), UINT32_C(0x5B26D0FE), UINT32_C(0x6EC7A7A5)}}, {{UINT32_C(0x88554F05), UINT32_C(0xDEF1782F), UINT32_C(0xD8D6DF47), UINT32_C(0xB73E7333), UINT32_C(0x90E9C67A), UINT32_C(0x1DDF9022), UINT32_C(0xD56181AC), UINT32_C(0x5D217B51)}, {UINT32_C(0xE27F90EE), UINT32_C(0x7A338C7B), UINT32_C(0x0D84A177), UINT32_C(0xB97CCD2A), UINT32_C(0x7C5E3FA9), UINT32_C(0x3E101601), UINT32_C(0x30FF0918), UINT32_C(0x2706E77C)}}, {{UINT32_C(0x72A7CB9F), UINT32_C(0x1BD1274F), UINT32_C(0x0622DB90), UINT32_C(0x8B60357A), UINT32_C(0x2151BB23), UINT32_C(0x0140E14A), UINT32_C(0xE9A30C4C), UINT32_C(0x358D7DDA)}, {UINT32_C(0x89BFB2C6), UINT32_C(0x3B153060), UINT32_C(0xB6757C69), UINT32_C(0x47462C79), UINT32_C(0xB43EF986), UINT32_C(0x2B22239D), UINT32_C(0x0B774DE3), UINT32_C(0x6793671F)}}, {{UINT32_C(0xF6F8EDC6), UINT32_C(0x99EDB02E), UINT32_C(0xC4257DD9), UINT32_C(0x24432760), UINT32_C(0x0336EED2), UINT32_C(0x4FDD7301), UINT32_C(0xF6C6506B), UINT32_C(0x44879709)}, {UINT32_C(0x13F18D89), UINT32_C(0x107C7DE2), UINT32_C(0xA5701FBD), UINT32_C(0x71C71DFB), UINT32_C(0xC7DE3E0B), UINT32_C(0x97017E24), UINT32_C(0xFC9EDDC2), UINT32_C(0x0F8D7E09)}}, {{UINT32_C(0x3897E01D), UINT32_C(0x7A0BB3B1), UINT32_C(0xC5892BDE), UINT32_C(0x7FD4F504), UINT32_C(0xAB752928), UINT32_C(0x2EA9AA77), UINT32_C(0x9078B466), UINT32_C(0x19A82F55)}, {UINT32_C(0x55A0F0D9), UINT32_C(0xEF2842C5), UINT32_C(0x15B6F2B4), UINT32_C(0x5501EEE9), UINT32_C(0x942AA4B4), UINT32_C(0x9665EA6F), UINT32_C(0x0E707C32), UINT32_C(0x015F41F4)}}, {{UINT32_C(0x9C6B6FD6), UINT32_C(0x1B4D6A91), UINT32_C(0x68217AFC), UINT32_C(0xCFD2CEE9), UINT32_C(0xBBC9284D), UINT32_C(0xC5076256), UINT32_C(0xAC36547B), UINT32_C(0x4C7F4EEF)}, {UINT32_C(0x65EE1907), UINT32_C(0xAB1AAD2C), UINT32_C(0xBAC25425), UINT32_C(0xBCFE8C77), UINT32_C(0xC9048A35), UINT32_C(0x38BA0F85), UINT32_C(0x60A035F6), UINT32_C(0x300E6AC4)}}, {{UINT32_C(0x34707CC6), UINT32_C(0xA8EDBC5E), UINT32_C(0x56ADFC16), UINT32_C(0x3DA6BC51), UINT32_C(0xCA8B6F3F), UINT32_C(0x5C7CB5E1), UINT32_C(0x2D612DFA), UINT32_C(0x76E4A028)}, {UINT32_C(0x64F49D39), UINT32_C(0x75AB66FD), UINT32_C(0xC387A739), UINT32_C(0x5AF9879D), UINT32_C(0x3E9EDBCF), UINT32_C(0x83964808), UINT32_C(0x7F4C4FFE), UINT32_C(0x555D8BBD)}}, {{UINT32_C(0x3C5590B0), UINT32_C(0xAAE8A2FE), UINT32_C(0x8AB34213), UINT32_C(0x461C6CCC), UINT32_C(0x9E719B77), UINT32_C(0xB2F3E822), UINT32_C(0x663188BB), UINT32_C(0x25B8FCA8)}, {UINT32_C(0x72548131), UINT32_C(0xAA7A047B), UINT32_C(0x189FA6F0), UINT32_C(0x0878FFEE), UINT32_C(0xCE3E17C3), UINT32_C(0x9E7FB402), UINT32_C(0x44418277), UINT32_C(0x6F260D93)}}, {{UINT32_C(0xB703B647), UINT32_C(0x0EF1C290), UINT32_C(0x651673E4), UINT32_C(0x995009FA), UINT32_C(0xBE46362D), UINT32_C(0x661F76D7), UINT32_C(0x23E56E7A), UINT32_C(0x74B00FD1)}, {UINT32_C(0xA1A50E4B), UINT32_C(0x9557D0AB), UINT32_C(0x587688CE), UINT32_C(0xC5A1CF95), UINT32_C(0x7AE08ECA), UINT32_C(0x2A14D1B2), UINT32_C(0x3C23D507), UINT32_C(0x2DA8816C)}}, {{UINT32_C(0xB9934883), UINT32_C(0x51CB405F), UINT32_C(0x01A6864B), UINT32_C(0xC99A67D4), UINT32_C(0x6CDFFFC3), UINT32_C(0xCCF62233), UINT32_C(0x98FE0B79), UINT32_C(0x2938F9F9)}, {UINT32_C(0x39A5AA28), UINT32_C(0x77666911), UINT32_C(0x2427BFC0), UINT32_C(0xDF56CBB5), UINT32_C(0x189EB66D), UINT32_C(0xA39BE968), UINT32_C(0xA64FD2AB), UINT32_C(0x71E6E105)}}, {{UINT32_C(0x60F9D20B), UINT32_C(0xA0C6F795), UINT32_C(0x765670CC), UINT32_C(0xE06DC8BB), UINT32_C(0xA67275E0), UINT32_C(0x9FA1DD58), UINT32_C(0xE2D23BBB), UINT32_C(0x0F7F670D)}, {UINT32_C(0x33FB15EA), UINT32_C(0xF8F07CF3), UINT32_C(0x723A0271), UINT32_C(0x1D09B592), UINT32_C(0x4E6FCAAB), UINT32_C(0xF1402923), UINT32_C(0xAE301940), UINT32_C(0x05BE1273)}}, {{UINT32_C(0x114AFD1E), UINT32_C(0x2D83906C), UINT32_C(0xC88E5761), UINT32_C(0x091474FD), UINT32_C(0xEF9E4F9B), UINT32_C(0xAFF18EEB), UINT32_C(0xF4E646ED), UINT32_C(0x136ECAE5)}, {UINT32_C(0xEB01808F), UINT32_C(0xEF4526D0), UINT32_C(0x940C0AEC), UINT32_C(0x3923EBBA), UINT32_C(0xA437F460), UINT32_C(0xAB34160C), UINT32_C(0x421AD57C), UINT32_C(0x7A46966E)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj_any.op3 * https://eprint.iacr.org/2015/1060 Alg 3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b3 = const_b3; const limb_t *a = const_a; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_TestParamSet_square(t0, X); fiat_id_GostR3410_2001_TestParamSet_square(t1, Y); fiat_id_GostR3410_2001_TestParamSet_square(t2, Z); fiat_id_GostR3410_2001_TestParamSet_mul(t3, X, Y); fiat_id_GostR3410_2001_TestParamSet_add(t3, t3, t3); fiat_id_GostR3410_2001_TestParamSet_mul(t4, Y, Z); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, X, Z); fiat_id_GostR3410_2001_TestParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_TestParamSet_mul(X3, a, Z3); fiat_id_GostR3410_2001_TestParamSet_mul(Y3, b3, t2); fiat_id_GostR3410_2001_TestParamSet_add(Y3, X3, Y3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, t1, Y3); fiat_id_GostR3410_2001_TestParamSet_add(Y3, t1, Y3); fiat_id_GostR3410_2001_TestParamSet_mul(Y3, X3, Y3); fiat_id_GostR3410_2001_TestParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, b3, Z3); fiat_id_GostR3410_2001_TestParamSet_mul(t2, a, t2); fiat_id_GostR3410_2001_TestParamSet_sub(t3, t0, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t3, a, t3); fiat_id_GostR3410_2001_TestParamSet_add(t3, t3, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, t0, t0); fiat_id_GostR3410_2001_TestParamSet_add(t0, Z3, t0); fiat_id_GostR3410_2001_TestParamSet_add(t0, t0, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t0, t3); fiat_id_GostR3410_2001_TestParamSet_add(Y3, Y3, t0); fiat_id_GostR3410_2001_TestParamSet_add(t2, t4, t4); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t2, t3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, X3, t0); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, t2, t1); fiat_id_GostR3410_2001_TestParamSet_add(Z3, Z3, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, Z3, Z3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed_any.op3 * https://eprint.iacr.org/2015/1060 Alg 2 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b3 = const_b3; const limb_t *a = const_a; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_GostR3410_2001_TestParamSet_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_GostR3410_2001_TestParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_TestParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_TestParamSet_add(t3, X2, Y2); fiat_id_GostR3410_2001_TestParamSet_add(t4, X1, Y1); fiat_id_GostR3410_2001_TestParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_TestParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_TestParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_TestParamSet_mul(t4, X2, Z1); fiat_id_GostR3410_2001_TestParamSet_add(t4, t4, X1); fiat_id_GostR3410_2001_TestParamSet_mul(t5, Y2, Z1); fiat_id_GostR3410_2001_TestParamSet_add(t5, t5, Y1); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, a, t4); fiat_id_GostR3410_2001_TestParamSet_mul(X3, b3, Z1); fiat_id_GostR3410_2001_TestParamSet_add(Z3, X3, Z3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, t1, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, t1, Z3); fiat_id_GostR3410_2001_TestParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_TestParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_TestParamSet_add(t1, t1, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t2, a, Z1); fiat_id_GostR3410_2001_TestParamSet_mul(t4, b3, t4); fiat_id_GostR3410_2001_TestParamSet_add(t1, t1, t2); fiat_id_GostR3410_2001_TestParamSet_sub(t2, t0, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t2, a, t2); fiat_id_GostR3410_2001_TestParamSet_add(t4, t4, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t1, t4); fiat_id_GostR3410_2001_TestParamSet_add(Y3, Y3, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t5, t4); fiat_id_GostR3410_2001_TestParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, X3, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t3, t1); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, t5, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, Z3, t0); /* if P is inf, throw all that away and take Q */ fiat_id_GostR3410_2001_TestParamSet_selectznz(R->X, nz, Q->X, X3); fiat_id_GostR3410_2001_TestParamSet_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_GostR3410_2001_TestParamSet_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj_any.op3 * https://eprint.iacr.org/2015/1060 Alg 1 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b3 = const_b3; const limb_t *a = const_a; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_GostR3410_2001_TestParamSet_mul(t0, X1, X2); fiat_id_GostR3410_2001_TestParamSet_mul(t1, Y1, Y2); fiat_id_GostR3410_2001_TestParamSet_mul(t2, Z1, Z2); fiat_id_GostR3410_2001_TestParamSet_add(t3, X1, Y1); fiat_id_GostR3410_2001_TestParamSet_add(t4, X2, Y2); fiat_id_GostR3410_2001_TestParamSet_mul(t3, t3, t4); fiat_id_GostR3410_2001_TestParamSet_add(t4, t0, t1); fiat_id_GostR3410_2001_TestParamSet_sub(t3, t3, t4); fiat_id_GostR3410_2001_TestParamSet_add(t4, X1, Z1); fiat_id_GostR3410_2001_TestParamSet_add(t5, X2, Z2); fiat_id_GostR3410_2001_TestParamSet_mul(t4, t4, t5); fiat_id_GostR3410_2001_TestParamSet_add(t5, t0, t2); fiat_id_GostR3410_2001_TestParamSet_sub(t4, t4, t5); fiat_id_GostR3410_2001_TestParamSet_add(t5, Y1, Z1); fiat_id_GostR3410_2001_TestParamSet_add(X3, Y2, Z2); fiat_id_GostR3410_2001_TestParamSet_mul(t5, t5, X3); fiat_id_GostR3410_2001_TestParamSet_add(X3, t1, t2); fiat_id_GostR3410_2001_TestParamSet_sub(t5, t5, X3); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, a, t4); fiat_id_GostR3410_2001_TestParamSet_mul(X3, b3, t2); fiat_id_GostR3410_2001_TestParamSet_add(Z3, X3, Z3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, t1, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, t1, Z3); fiat_id_GostR3410_2001_TestParamSet_mul(Y3, X3, Z3); fiat_id_GostR3410_2001_TestParamSet_add(t1, t0, t0); fiat_id_GostR3410_2001_TestParamSet_add(t1, t1, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t2, a, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t4, b3, t4); fiat_id_GostR3410_2001_TestParamSet_add(t1, t1, t2); fiat_id_GostR3410_2001_TestParamSet_sub(t2, t0, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t2, a, t2); fiat_id_GostR3410_2001_TestParamSet_add(t4, t4, t2); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t1, t4); fiat_id_GostR3410_2001_TestParamSet_add(Y3, Y3, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t5, t4); fiat_id_GostR3410_2001_TestParamSet_mul(X3, t3, X3); fiat_id_GostR3410_2001_TestParamSet_sub(X3, X3, t0); fiat_id_GostR3410_2001_TestParamSet_mul(t0, t3, t1); fiat_id_GostR3410_2001_TestParamSet_mul(Z3, t5, Z3); fiat_id_GostR3410_2001_TestParamSet_add(Z3, Z3, t0); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[32], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 32) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[52], const unsigned char in[32]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 51; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[257], const unsigned char in[32]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 257; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[32], const unsigned char b[32], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[257] = {0}; int8_t bnaf[257] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 256; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_TestParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_GostR3410_2001_TestParamSet_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_GostR3410_2001_TestParamSet_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_TestParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[51] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 50; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_TestParamSet_selectznz(lut.X, diff, lut.X, precomp[j].X); fiat_id_GostR3410_2001_TestParamSet_selectznz(lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_TestParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_GostR3410_2001_TestParamSet_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_TestParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[32]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 1; i >= 0; i--) { for (j = 0; i != 1 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 27; j++) { if (j * 2 + i > 51) continue; d = rnaf[j * 2 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_GostR3410_2001_TestParamSet_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_GostR3410_2001_TestParamSet_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_GostR3410_2001_TestParamSet_opp(out->Y, lut.Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_GostR3410_2001_TestParamSet_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_GostR3410_2001_TestParamSet_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_GostR3410_2001_TestParamSet_inv(Q.Z, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->X, Q.X, Q.Z); fiat_id_GostR3410_2001_TestParamSet_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[32], unsigned char outy[32], const unsigned char a[32], const unsigned char b[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_TestParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_TestParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_TestParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_TestParamSet_to_montgomery(P.Y, P.Y); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_GostR3410_2001_TestParamSet_from_bytes(P.X, inx); fiat_id_GostR3410_2001_TestParamSet_from_bytes(P.Y, iny); fiat_id_GostR3410_2001_TestParamSet_to_montgomery(P.X, P.X); fiat_id_GostR3410_2001_TestParamSet_to_montgomery(P.Y, P.Y); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.X, P.X); fiat_id_GostR3410_2001_TestParamSet_from_montgomery(P.Y, P.Y); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outx, P.X); fiat_id_GostR3410_2001_TestParamSet_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[32] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_GostR3410_2001_TestParamSet(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(n, b_n, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_GostR3410_2001_TestParamSet(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_GostR3410_2001_TestParamSet(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 32) != 32) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #endif /* __SIZEOF_INT128__ */ libengine-gost-openssl-3.0.2/ecp_id_tc26_gost_3410_2012_256_paramSetA.c000066400000000000000000016407211446070765000250540ustar00rootroot00000000000000/* Autogenerated: ECCKiila https://gitlab.com/nisec/ecckiila */ /*- * MIT License * * Copyright (c) 2020 Luis Rivera-Zamarripa, JesÃēs-Javier Chi-Domínguez, Billy Bob Brumley * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ #if defined(__SIZEOF_INT128__) && !defined(PEDANTIC) #include #include #define LIMB_BITS 64 #define LIMB_CNT 5 /* Field elements */ typedef uint64_t fe_t[LIMB_CNT]; typedef uint64_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_TC26_GOST_3410_2012_256_PARAMSETA_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) #define fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(c, a, b) \ fiat_id_tc26_gost_3410_2012_256_paramSetA_add(c, a, b); \ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry(c, c) #define fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(c, a, b) \ fiat_id_tc26_gost_3410_2012_256_paramSetA_sub(c, a, b); \ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry(c, c) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t T; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; fe_t T; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: unsaturated_solinas --static --use-value-barrier id_tc26_gost_3410_2012_256_paramSetA 64 5 '2^256 - 617' */ /* curve description: id_tc26_gost_3410_2012_256_paramSetA */ /* machine_wordsize = 64 (from "64") */ /* requested operations: (all) */ /* n = 5 (from "5") */ /* s-c = 2^256 - [(1, 617)] (from "2^256 - 617") */ /* tight_bounds_multiplier = 1 (from "") */ /* */ /* Computed values: */ /* carry_chain = [0, 1, 2, 3, 4, 0, 1] */ /* eval z = z[0] + (z[1] << 52) + (z[2] << 103) + (z[3] << 154) + (z[4] << 205) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ /* balance = [0x1ffffffffffb2e, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe] */ #include typedef unsigned char fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1; typedef signed char fiat_id_tc26_gost_3410_2012_256_paramSetA_int1; typedef signed __int128 fiat_id_tc26_gost_3410_2012_256_paramSetA_int128; typedef unsigned __int128 fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_TC26_GOST_3410_2012_256_PARAMSETA_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint64_t fiat_id_tc26_gost_3410_2012_256_paramSetA_value_barrier_u64(uint64_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_tc26_gost_3410_2012_256_paramSetA_value_barrier_u64(x) (x) #endif /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u52 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^52 * out2 = ⌊(arg1 + arg2 + arg3) / 2^52⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xfffffffffffff] * arg3: [0x0 ~> 0xfffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xfffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u52( uint64_t *out1, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, uint64_t arg2, uint64_t arg3) { uint64_t x1; uint64_t x2; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT64_C(0xfffffffffffff)); x3 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x1 >> 52); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u52 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^52 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^52⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xfffffffffffff] * arg3: [0x0 ~> 0xfffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xfffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u52( uint64_t *out1, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, uint64_t arg2, uint64_t arg3) { int64_t x1; fiat_id_tc26_gost_3410_2012_256_paramSetA_int1 x2; uint64_t x3; x1 = ((int64_t)(arg2 - (int64_t)arg1) - (int64_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_int1)(x1 >> 52); x3 = (x1 & UINT64_C(0xfffffffffffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u51 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^51 * out2 = ⌊(arg1 + arg2 + arg3) / 2^51⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7ffffffffffff] * arg3: [0x0 ~> 0x7ffffffffffff] * Output Bounds: * out1: [0x0 ~> 0x7ffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u51( uint64_t *out1, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, uint64_t arg2, uint64_t arg3) { uint64_t x1; uint64_t x2; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT64_C(0x7ffffffffffff)); x3 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x1 >> 51); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u51 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^51 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^51⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7ffffffffffff] * arg3: [0x0 ~> 0x7ffffffffffff] * Output Bounds: * out1: [0x0 ~> 0x7ffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u51( uint64_t *out1, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, uint64_t arg2, uint64_t arg3) { int64_t x1; fiat_id_tc26_gost_3410_2012_256_paramSetA_int1 x2; uint64_t x3; x1 = ((int64_t)(arg2 - (int64_t)arg1) - (int64_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_int1)(x1 >> 51); x3 = (x1 & UINT64_C(0x7ffffffffffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u64 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u64( uint64_t *out1, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x1; uint64_t x2; uint64_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); x3 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_value_barrier_u64(x2) & arg3) | (fiat_id_tc26_gost_3410_2012_256_paramSetA_value_barrier_u64((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul multiplies two field elements and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * arg2: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul( uint64_t out1[5], const uint64_t arg1[5], const uint64_t arg2[5]) { fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x1; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x2; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x3; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x4; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x5; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x6; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x7; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x8; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x9; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x10; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x11; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x12; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x13; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x14; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x15; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x16; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x17; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x18; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x19; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x20; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x21; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x22; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x23; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x24; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x25; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x26; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x27; uint64_t x28; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x29; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x30; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x31; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x32; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x33; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x34; uint64_t x35; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x36; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x37; uint64_t x38; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x39; uint64_t x40; uint64_t x41; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x42; uint64_t x43; uint64_t x44; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x45; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x46; uint64_t x47; uint64_t x48; uint64_t x49; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x50; uint64_t x51; uint64_t x52; x1 = (UINT16_C(0x269) * ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[4]) * (arg2[4]))); x2 = (UINT16_C(0x269) * ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[4]) * (arg2[3]))); x3 = (UINT16_C(0x269) * ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[4]) * (arg2[2]))); x4 = (UINT16_C(0x269) * (((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[4]) * (arg2[1])) * 0x2)); x5 = (UINT16_C(0x269) * ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[3]) * (arg2[4]))); x6 = (UINT16_C(0x269) * ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[3]) * (arg2[3]))); x7 = (UINT16_C(0x269) * (((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[3]) * (arg2[2])) * 0x2)); x8 = (UINT16_C(0x269) * ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[2]) * (arg2[4]))); x9 = (UINT16_C(0x269) * (((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[2]) * (arg2[3])) * 0x2)); x10 = (UINT16_C(0x269) * (((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[1]) * (arg2[4])) * 0x2)); x11 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[4]) * (arg2[0])); x12 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[3]) * ((arg2[1]) * 0x2)); x13 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[3]) * (arg2[0])); x14 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[2]) * ((arg2[2]) * 0x2)); x15 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[2]) * ((arg2[1]) * 0x2)); x16 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[2]) * (arg2[0])); x17 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[1]) * ((arg2[3]) * 0x2)); x18 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[1]) * ((arg2[2]) * 0x2)); x19 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[1]) * ((arg2[1]) * 0x2)); x20 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[1]) * (arg2[0])); x21 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[0]) * (arg2[4])); x22 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[0]) * (arg2[3])); x23 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[0]) * (arg2[2])); x24 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[0]) * (arg2[1])); x25 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[0]) * (arg2[0])); x26 = (x25 + (x10 + (x9 + (x7 + x4)))); x27 = (x26 >> 52); x28 = (uint64_t)(x26 & UINT64_C(0xfffffffffffff)); x29 = (x21 + (x17 + (x14 + (x12 + x11)))); x30 = (x22 + (x18 + (x15 + (x13 + x1)))); x31 = (x23 + (x19 + (x16 + (x5 + x2)))); x32 = (x24 + (x20 + (x8 + (x6 + x3)))); x33 = (x27 + x32); x34 = (x33 >> 51); x35 = (uint64_t)(x33 & UINT64_C(0x7ffffffffffff)); x36 = (x34 + x31); x37 = (x36 >> 51); x38 = (uint64_t)(x36 & UINT64_C(0x7ffffffffffff)); x39 = (x37 + x30); x40 = (uint64_t)(x39 >> 51); x41 = (uint64_t)(x39 & UINT64_C(0x7ffffffffffff)); x42 = (x40 + x29); x43 = (uint64_t)(x42 >> 51); x44 = (uint64_t)(x42 & UINT64_C(0x7ffffffffffff)); x45 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)UINT16_C(0x269) * x43); x46 = (x28 + x45); x47 = (uint64_t)(x46 >> 52); x48 = (uint64_t)(x46 & UINT64_C(0xfffffffffffff)); x49 = (x47 + x35); x50 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x49 >> 51); x51 = (x49 & UINT64_C(0x7ffffffffffff)); x52 = (x50 + x38); out1[0] = x48; out1[1] = x51; out1[2] = x52; out1[3] = x41; out1[4] = x44; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square squares a field element and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg1) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square( uint64_t out1[5], const uint64_t arg1[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x9; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x10; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x11; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x12; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x13; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x14; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x15; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x16; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x17; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x18; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x19; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x20; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x21; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x22; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x23; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x24; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x25; uint64_t x26; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x27; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x28; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x29; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x30; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x31; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x32; uint64_t x33; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x34; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x35; uint64_t x36; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x37; uint64_t x38; uint64_t x39; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x40; uint64_t x41; uint64_t x42; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x43; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128 x44; uint64_t x45; uint64_t x46; uint64_t x47; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x48; uint64_t x49; uint64_t x50; x1 = ((arg1[4]) * UINT16_C(0x269)); x2 = (x1 * 0x2); x3 = ((arg1[4]) * 0x2); x4 = ((arg1[3]) * UINT16_C(0x269)); x5 = (x4 * 0x2); x6 = ((arg1[3]) * 0x2); x7 = ((arg1[2]) * 0x2); x8 = ((arg1[1]) * 0x2); x9 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[4]) * x1); x10 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[3]) * x2); x11 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[3]) * x4); x12 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[2]) * x2); x13 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[2]) * (x5 * 0x2)); x14 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[2]) * ((arg1[2]) * 0x2)); x15 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[1]) * (x2 * 0x2)); x16 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[1]) * (x6 * 0x2)); x17 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[1]) * (x7 * 0x2)); x18 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[1]) * ((arg1[1]) * 0x2)); x19 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[0]) * x3); x20 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[0]) * x6); x21 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[0]) * x7); x22 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[0]) * x8); x23 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)(arg1[0]) * (arg1[0])); x24 = (x23 + (x15 + x13)); x25 = (x24 >> 52); x26 = (uint64_t)(x24 & UINT64_C(0xfffffffffffff)); x27 = (x19 + (x16 + x14)); x28 = (x20 + (x17 + x9)); x29 = (x21 + (x18 + x10)); x30 = (x22 + (x12 + x11)); x31 = (x25 + x30); x32 = (x31 >> 51); x33 = (uint64_t)(x31 & UINT64_C(0x7ffffffffffff)); x34 = (x32 + x29); x35 = (x34 >> 51); x36 = (uint64_t)(x34 & UINT64_C(0x7ffffffffffff)); x37 = (x35 + x28); x38 = (uint64_t)(x37 >> 51); x39 = (uint64_t)(x37 & UINT64_C(0x7ffffffffffff)); x40 = (x38 + x27); x41 = (uint64_t)(x40 >> 51); x42 = (uint64_t)(x40 & UINT64_C(0x7ffffffffffff)); x43 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint128)UINT16_C(0x269) * x41); x44 = (x26 + x43); x45 = (uint64_t)(x44 >> 52); x46 = (uint64_t)(x44 & UINT64_C(0xfffffffffffff)); x47 = (x45 + x33); x48 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x47 >> 51); x49 = (x47 & UINT64_C(0x7ffffffffffff)); x50 = (x48 + x36); out1[0] = x46; out1[1] = x49; out1[2] = x50; out1[3] = x39; out1[4] = x42; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_carry reduces a field element. * Postconditions: * eval out1 mod m = eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_carry( uint64_t out1[5], const uint64_t arg1[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; x1 = (arg1[0]); x2 = ((x1 >> 52) + (arg1[1])); x3 = ((x2 >> 51) + (arg1[2])); x4 = ((x3 >> 51) + (arg1[3])); x5 = ((x4 >> 51) + (arg1[4])); x6 = ((x1 & UINT64_C(0xfffffffffffff)) + (UINT16_C(0x269) * (x5 >> 51))); x7 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x6 >> 52) + (x2 & UINT64_C(0x7ffffffffffff))); x8 = (x6 & UINT64_C(0xfffffffffffff)); x9 = (x7 & UINT64_C(0x7ffffffffffff)); x10 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x7 >> 51) + (x3 & UINT64_C(0x7ffffffffffff))); x11 = (x4 & UINT64_C(0x7ffffffffffff)); x12 = (x5 & UINT64_C(0x7ffffffffffff)); out1[0] = x8; out1[1] = x9; out1[2] = x10; out1[3] = x11; out1[4] = x12; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_add adds two field elements. * Postconditions: * eval out1 mod m = (eval arg1 + eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * arg2: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_add( uint64_t out1[5], const uint64_t arg1[5], const uint64_t arg2[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; x1 = ((arg1[0]) + (arg2[0])); x2 = ((arg1[1]) + (arg2[1])); x3 = ((arg1[2]) + (arg2[2])); x4 = ((arg1[3]) + (arg2[3])); x5 = ((arg1[4]) + (arg2[4])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_sub subtracts two field elements. * Postconditions: * eval out1 mod m = (eval arg1 - eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * arg2: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_sub( uint64_t out1[5], const uint64_t arg1[5], const uint64_t arg2[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; x1 = ((UINT64_C(0x1ffffffffffb2e) + (arg1[0])) - (arg2[0])); x2 = ((UINT64_C(0xffffffffffffe) + (arg1[1])) - (arg2[1])); x3 = ((UINT64_C(0xffffffffffffe) + (arg1[2])) - (arg2[2])); x4 = ((UINT64_C(0xffffffffffffe) + (arg1[3])) - (arg2[3])); x5 = ((UINT64_C(0xffffffffffffe) + (arg1[4])) - (arg2[4])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_opp negates a field element. * Postconditions: * eval out1 mod m = -eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_opp( uint64_t out1[5], const uint64_t arg1[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; x1 = (UINT64_C(0x1ffffffffffb2e) - (arg1[0])); x2 = (UINT64_C(0xffffffffffffe) - (arg1[1])); x3 = (UINT64_C(0xffffffffffffe) - (arg1[2])); x4 = (UINT64_C(0xffffffffffffe) - (arg1[3])); x5 = (UINT64_C(0xffffffffffffe) - (arg1[4])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( uint64_t out1[5], fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, const uint64_t arg2[5], const uint64_t arg3[5]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u64(&x5, arg1, (arg2[4]), (arg3[4])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes serializes a field element to bytes in little-endian order. * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes( uint8_t out1[32], const uint64_t arg1[5]) { uint64_t x1; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x2; uint64_t x3; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x4; uint64_t x5; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x6; uint64_t x7; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x8; uint64_t x9; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x10; uint64_t x11; uint64_t x12; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x13; uint64_t x14; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x15; uint64_t x16; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x17; uint64_t x18; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x19; uint64_t x20; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint8_t x26; uint64_t x27; uint8_t x28; uint64_t x29; uint8_t x30; uint64_t x31; uint8_t x32; uint64_t x33; uint8_t x34; uint64_t x35; uint8_t x36; uint8_t x37; uint64_t x38; uint8_t x39; uint64_t x40; uint8_t x41; uint64_t x42; uint8_t x43; uint64_t x44; uint8_t x45; uint64_t x46; uint8_t x47; uint64_t x48; uint8_t x49; uint8_t x50; uint64_t x51; uint8_t x52; uint64_t x53; uint8_t x54; uint64_t x55; uint8_t x56; uint64_t x57; uint8_t x58; uint64_t x59; uint8_t x60; uint64_t x61; uint8_t x62; uint64_t x63; uint8_t x64; uint8_t x65; uint64_t x66; uint8_t x67; uint64_t x68; uint8_t x69; uint64_t x70; uint8_t x71; uint64_t x72; uint8_t x73; uint64_t x74; uint8_t x75; uint64_t x76; uint8_t x77; uint8_t x78; uint64_t x79; uint8_t x80; uint64_t x81; uint8_t x82; uint64_t x83; uint8_t x84; uint64_t x85; uint8_t x86; uint64_t x87; uint8_t x88; uint64_t x89; uint8_t x90; uint8_t x91; fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u52( &x1, &x2, 0x0, (arg1[0]), UINT64_C(0xffffffffffd97)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u51( &x3, &x4, x2, (arg1[1]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u51( &x5, &x6, x4, (arg1[2]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u51( &x7, &x8, x6, (arg1[3]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u51( &x9, &x10, x8, (arg1[4]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u64( &x11, x10, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u52( &x12, &x13, 0x0, x1, (x11 & UINT64_C(0xffffffffffd97))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u51( &x14, &x15, x13, x3, (x11 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u51( &x16, &x17, x15, x5, (x11 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u51( &x18, &x19, x17, x7, (x11 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u51( &x20, &x21, x19, x9, (x11 & UINT64_C(0x7ffffffffffff))); x22 = (x20 << 5); x23 = (x18 << 2); x24 = (x16 << 7); x25 = (x14 << 4); x26 = (uint8_t)(x12 & UINT8_C(0xff)); x27 = (x12 >> 8); x28 = (uint8_t)(x27 & UINT8_C(0xff)); x29 = (x27 >> 8); x30 = (uint8_t)(x29 & UINT8_C(0xff)); x31 = (x29 >> 8); x32 = (uint8_t)(x31 & UINT8_C(0xff)); x33 = (x31 >> 8); x34 = (uint8_t)(x33 & UINT8_C(0xff)); x35 = (x33 >> 8); x36 = (uint8_t)(x35 & UINT8_C(0xff)); x37 = (uint8_t)(x35 >> 8); x38 = (x25 + (uint64_t)x37); x39 = (uint8_t)(x38 & UINT8_C(0xff)); x40 = (x38 >> 8); x41 = (uint8_t)(x40 & UINT8_C(0xff)); x42 = (x40 >> 8); x43 = (uint8_t)(x42 & UINT8_C(0xff)); x44 = (x42 >> 8); x45 = (uint8_t)(x44 & UINT8_C(0xff)); x46 = (x44 >> 8); x47 = (uint8_t)(x46 & UINT8_C(0xff)); x48 = (x46 >> 8); x49 = (uint8_t)(x48 & UINT8_C(0xff)); x50 = (uint8_t)(x48 >> 8); x51 = (x24 + (uint64_t)x50); x52 = (uint8_t)(x51 & UINT8_C(0xff)); x53 = (x51 >> 8); x54 = (uint8_t)(x53 & UINT8_C(0xff)); x55 = (x53 >> 8); x56 = (uint8_t)(x55 & UINT8_C(0xff)); x57 = (x55 >> 8); x58 = (uint8_t)(x57 & UINT8_C(0xff)); x59 = (x57 >> 8); x60 = (uint8_t)(x59 & UINT8_C(0xff)); x61 = (x59 >> 8); x62 = (uint8_t)(x61 & UINT8_C(0xff)); x63 = (x61 >> 8); x64 = (uint8_t)(x63 & UINT8_C(0xff)); x65 = (uint8_t)(x63 >> 8); x66 = (x23 + (uint64_t)x65); x67 = (uint8_t)(x66 & UINT8_C(0xff)); x68 = (x66 >> 8); x69 = (uint8_t)(x68 & UINT8_C(0xff)); x70 = (x68 >> 8); x71 = (uint8_t)(x70 & UINT8_C(0xff)); x72 = (x70 >> 8); x73 = (uint8_t)(x72 & UINT8_C(0xff)); x74 = (x72 >> 8); x75 = (uint8_t)(x74 & UINT8_C(0xff)); x76 = (x74 >> 8); x77 = (uint8_t)(x76 & UINT8_C(0xff)); x78 = (uint8_t)(x76 >> 8); x79 = (x22 + (uint64_t)x78); x80 = (uint8_t)(x79 & UINT8_C(0xff)); x81 = (x79 >> 8); x82 = (uint8_t)(x81 & UINT8_C(0xff)); x83 = (x81 >> 8); x84 = (uint8_t)(x83 & UINT8_C(0xff)); x85 = (x83 >> 8); x86 = (uint8_t)(x85 & UINT8_C(0xff)); x87 = (x85 >> 8); x88 = (uint8_t)(x87 & UINT8_C(0xff)); x89 = (x87 >> 8); x90 = (uint8_t)(x89 & UINT8_C(0xff)); x91 = (uint8_t)(x89 >> 8); out1[0] = x26; out1[1] = x28; out1[2] = x30; out1[3] = x32; out1[4] = x34; out1[5] = x36; out1[6] = x39; out1[7] = x41; out1[8] = x43; out1[9] = x45; out1[10] = x47; out1[11] = x49; out1[12] = x52; out1[13] = x54; out1[14] = x56; out1[15] = x58; out1[16] = x60; out1[17] = x62; out1[18] = x64; out1[19] = x67; out1[20] = x69; out1[21] = x71; out1[22] = x73; out1[23] = x75; out1[24] = x77; out1[25] = x80; out1[26] = x82; out1[27] = x84; out1[28] = x86; out1[29] = x88; out1[30] = x90; out1[31] = x91; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes deserializes a field element from bytes in little-endian order. * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes( uint64_t out1[5], const uint8_t arg1[32]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint8_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint8_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint8_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint8_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; x1 = ((uint64_t)(arg1[31]) << 43); x2 = ((uint64_t)(arg1[30]) << 35); x3 = ((uint64_t)(arg1[29]) << 27); x4 = ((uint64_t)(arg1[28]) << 19); x5 = ((uint64_t)(arg1[27]) << 11); x6 = ((uint64_t)(arg1[26]) << 3); x7 = ((uint64_t)(arg1[25]) << 46); x8 = ((uint64_t)(arg1[24]) << 38); x9 = ((uint64_t)(arg1[23]) << 30); x10 = ((uint64_t)(arg1[22]) << 22); x11 = ((uint64_t)(arg1[21]) << 14); x12 = ((uint64_t)(arg1[20]) << 6); x13 = ((uint64_t)(arg1[19]) << 49); x14 = ((uint64_t)(arg1[18]) << 41); x15 = ((uint64_t)(arg1[17]) << 33); x16 = ((uint64_t)(arg1[16]) << 25); x17 = ((uint64_t)(arg1[15]) << 17); x18 = ((uint64_t)(arg1[14]) << 9); x19 = ((uint64_t)(arg1[13]) * 0x2); x20 = ((uint64_t)(arg1[12]) << 44); x21 = ((uint64_t)(arg1[11]) << 36); x22 = ((uint64_t)(arg1[10]) << 28); x23 = ((uint64_t)(arg1[9]) << 20); x24 = ((uint64_t)(arg1[8]) << 12); x25 = ((uint64_t)(arg1[7]) << 4); x26 = ((uint64_t)(arg1[6]) << 48); x27 = ((uint64_t)(arg1[5]) << 40); x28 = ((uint64_t)(arg1[4]) << 32); x29 = ((uint64_t)(arg1[3]) << 24); x30 = ((uint64_t)(arg1[2]) << 16); x31 = ((uint64_t)(arg1[1]) << 8); x32 = (arg1[0]); x33 = (x31 + (uint64_t)x32); x34 = (x30 + x33); x35 = (x29 + x34); x36 = (x28 + x35); x37 = (x27 + x36); x38 = (x26 + x37); x39 = (x38 & UINT64_C(0xfffffffffffff)); x40 = (uint8_t)(x38 >> 52); x41 = (x25 + (uint64_t)x40); x42 = (x24 + x41); x43 = (x23 + x42); x44 = (x22 + x43); x45 = (x21 + x44); x46 = (x20 + x45); x47 = (x46 & UINT64_C(0x7ffffffffffff)); x48 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x46 >> 51); x49 = (x19 + (uint64_t)x48); x50 = (x18 + x49); x51 = (x17 + x50); x52 = (x16 + x51); x53 = (x15 + x52); x54 = (x14 + x53); x55 = (x13 + x54); x56 = (x55 & UINT64_C(0x7ffffffffffff)); x57 = (uint8_t)(x55 >> 51); x58 = (x12 + (uint64_t)x57); x59 = (x11 + x58); x60 = (x10 + x59); x61 = (x9 + x60); x62 = (x8 + x61); x63 = (x7 + x62); x64 = (x63 & UINT64_C(0x7ffffffffffff)); x65 = (uint8_t)(x63 >> 51); x66 = (x6 + (uint64_t)x65); x67 = (x5 + x66); x68 = (x4 + x67); x69 = (x3 + x68); x70 = (x2 + x69); x71 = (x1 + x70); out1[0] = x39; out1[1] = x47; out1[2] = x56; out1[3] = x64; out1[4] = x71; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_tc26_gost_3410_2012_256_paramSetA/fe_inv.op3 * custom repunit addition chain */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t16, t164, t2, t246, t32, t4, t64, t8, t80, t82; fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t2, acc, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t4, acc, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t4); for (i = 0; i < 3; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t8, acc, t4); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t8); for (i = 0; i < 7; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t16, acc, t8); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t16); for (i = 0; i < 15; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t32, acc, t16); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t32); for (i = 0; i < 31; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t64, acc, t32); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t64); for (i = 0; i < 15; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t80, acc, t16); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t80); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t82, acc, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t82); for (i = 0; i < 81; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t164, acc, t82); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t164); for (i = 0; i < 81; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t246, acc, t82); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t246); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(acc, acc, t2); for (i = 0; i < 3; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(output, acc, t1); } /* curve coefficient constants */ static const limb_t const_one[5] = { UINT64_C(0x0000000000000001), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000)}; static const limb_t const_d[5] = { UINT64_C(0x0002C32D6DC7BFFB), UINT64_C(0x0002897009AF7E52), UINT64_C(0x0005AA3026573BEC), UINT64_C(0x0006A055E2F0E73E), UINT64_C(0x0000302FB5BE0C1F)}; static const limb_t const_S[5] = { UINT64_C(0x00074F34A48E0ECD), UINT64_C(0x00075DA3FD94206B), UINT64_C(0x00029573F66A3104), UINT64_C(0x000057EA8743C630), UINT64_C(0x0003F3F412907CF8)}; static const limb_t const_T[5] = { UINT64_C(0x000075DCE7A14AAA), UINT64_C(0x0005C192AC47EA63), UINT64_C(0x0000F1B2B10E89FC), UINT64_C(0x0007C563A5D2D135), UINT64_C(0x00000807F39FACAF)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[14][16] = { { {{UINT64_C(0x000000000000000D), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000)}, {UINT64_C(0x000B2592DBA300E7), UINT64_C(0x0003E87F22E81F92), UINT64_C(0x00060EC939CFDF1B), UINT64_C(0x0006CD212230E3EA), UINT64_C(0x00030650F195523A)}, {UINT64_C(0x0000E8752747155F), UINT64_C(0x0002CE74C5C99A73), UINT64_C(0x0006C037EF8E5465), UINT64_C(0x00006AAEBC7B92EB), UINT64_C(0x0007521C44952CFD)}}, {{UINT64_C(0x000A63D93451134C), UINT64_C(0x0003F7A46C1C4CA7), UINT64_C(0x0002AF35693661CE), UINT64_C(0x0005313F13E9CC60), UINT64_C(0x00054E15958A5D97)}, {UINT64_C(0x0004525DDCDB5791), UINT64_C(0x000736AACCCB7BC8), UINT64_C(0x000174F4885153CF), UINT64_C(0x0000CB27666A2367), UINT64_C(0x00016BDEBB39E143)}, {UINT64_C(0x000C732788CBC030), UINT64_C(0x0005C721E676D06F), UINT64_C(0x00024101FDBBCCE2), UINT64_C(0x00059473AE8CD7CA), UINT64_C(0x000586898AC013B2)}}, {{UINT64_C(0x000A894E457058AD), UINT64_C(0x00047D7F48E61013), UINT64_C(0x00035B4A672FE227), UINT64_C(0x0002A23302C060B2), UINT64_C(0x0000F011D09FB149)}, {UINT64_C(0x000FB80EB0B22BCC), UINT64_C(0x000606DA3C1FAC0B), UINT64_C(0x00049BB0CE05B2EE), UINT64_C(0x000513F1BE099F41), UINT64_C(0x0002AEE30C375862)}, {UINT64_C(0x0004ED5422831C0C), UINT64_C(0x0007ED2E735EF7E7), UINT64_C(0x0006F38521F75F30), UINT64_C(0x00040F086DBFA045), UINT64_C(0x0002BA6DCB264756)}}, {{UINT64_C(0x000E66CD5DB0B356), UINT64_C(0x00068408F9A4857D), UINT64_C(0x0001F32E8FC1FD9F), UINT64_C(0x0006283C082BF3EE), UINT64_C(0x0007B28870E5B67C)}, {UINT64_C(0x000FE1FDB8EFDCBE), UINT64_C(0x0003F21273425384), UINT64_C(0x0005870EEC15951B), UINT64_C(0x0006C844F52108D5), UINT64_C(0x0001CD6F3261AFA2)}, {UINT64_C(0x000712D2BEAA7E64), UINT64_C(0x0006CA4E1492A890), UINT64_C(0x0001F6F63F92C63C), UINT64_C(0x0007E2FFA1F1C544), UINT64_C(0x0002725A45A8E238)}}, {{UINT64_C(0x0003E27F874C6781), UINT64_C(0x000080BDDC3E44D5), UINT64_C(0x0005AFC7A11A0693), UINT64_C(0x0001B7278AA23AFD), UINT64_C(0x0004D7CF0D085A3B)}, {UINT64_C(0x000D80090DD1AE96), UINT64_C(0x0002433971543626), UINT64_C(0x000276F2FB600A27), UINT64_C(0x0005E6BA3FC73B39), UINT64_C(0x0005F6DBA95D6230)}, {UINT64_C(0x000E7885A2499A0E), UINT64_C(0x0004547B7F6C185E), UINT64_C(0x000003DCACBBA1C5), UINT64_C(0x000642667D8CF12B), UINT64_C(0x0002EA8E4237A0D7)}}, {{UINT64_C(0x000FDE7B60226F30), UINT64_C(0x0006E61454CC4C1B), UINT64_C(0x000479C4C24E0377), UINT64_C(0x0000B58C33813041), UINT64_C(0x0002403059A551B8)}, {UINT64_C(0x000F0EF2E06AE25F), UINT64_C(0x00065B351500FA13), UINT64_C(0x0004884D79149E34), UINT64_C(0x00020A52F78F4D69), UINT64_C(0x00052A46E43D1E6F)}, {UINT64_C(0x000D0ECC557F4E9D), UINT64_C(0x0007D12B76DDBF72), UINT64_C(0x00001E35D93266D1), UINT64_C(0x00060EC982223C71), UINT64_C(0x0001388A4FBA5CC2)}}, {{UINT64_C(0x000288DD0895A16C), UINT64_C(0x000602071D0EFE2E), UINT64_C(0x0007DEA3E3BA4068), UINT64_C(0x00049DB99EA55E0F), UINT64_C(0x00057C4FBA5BF59F)}, {UINT64_C(0x00015BEBA4E2B732), UINT64_C(0x0001F7F8E714E8B3), UINT64_C(0x0000A952EF156C40), UINT64_C(0x00017371509C8E81), UINT64_C(0x000362B2B97378ED)}, {UINT64_C(0x000A85D2D8D51136), UINT64_C(0x0005F222A81C7F67), UINT64_C(0x0007182E92B465DA), UINT64_C(0x00037F522C4E8E6D), UINT64_C(0x0004310842F64A2B)}}, {{UINT64_C(0x0005A383213DC33C), UINT64_C(0x0007E9B816CD42C6), UINT64_C(0x0007FA8AE87087AA), UINT64_C(0x0004E55F40D4A3EE), UINT64_C(0x0004F6D263536B6D)}, {UINT64_C(0x00020F67059F55A3), UINT64_C(0x00007763EEA276D3), UINT64_C(0x00019A17F705B71A), UINT64_C(0x0005944E63EB82FE), UINT64_C(0x0007650A0DC5D1CB)}, {UINT64_C(0x000FCD65DD4C828B), UINT64_C(0x0004CA6637691EA4), UINT64_C(0x0003CCA5D1052701), UINT64_C(0x000712031F0647A6), UINT64_C(0x00021CFF42584B2A)}}, {{UINT64_C(0x0006C8A92F922362), UINT64_C(0x00044311FB926B9A), UINT64_C(0x00024A255F064898), UINT64_C(0x0004502C0490E488), UINT64_C(0x000181B9C7BE07A7)}, {UINT64_C(0x000AC7EB3F012FCF), UINT64_C(0x00066FE14D676159), UINT64_C(0x0000E913992C9940), UINT64_C(0x0005A66B28860B80), UINT64_C(0x0004FA013BB9A8C7)}, {UINT64_C(0x0000AD18CD3393AB), UINT64_C(0x000615E7DB492BCF), UINT64_C(0x00065C59E4108193), UINT64_C(0x00001C03C21B9CD4), UINT64_C(0x00053FD4D84C40B2)}}, {{UINT64_C(0x0003FC89A2C6B0CB), UINT64_C(0x0000F3FE6593C6B3), UINT64_C(0x00033E7B9EFD7774), UINT64_C(0x000202569ACD3FD6), UINT64_C(0x000304E71BD74A19)}, {UINT64_C(0x00070B3E67C53736), UINT64_C(0x00062C9877C0935F), UINT64_C(0x00005596CE3DED78), UINT64_C(0x000065742F67B602), UINT64_C(0x0001F8FD1E49E6FF)}, {UINT64_C(0x000C98D8B880CCBF), UINT64_C(0x0002C564715F7115), UINT64_C(0x0003131E65C288F0), UINT64_C(0x00032E11B2E67FC3), UINT64_C(0x000306235C4203E9)}}, {{UINT64_C(0x0002EE57BC2F49E9), UINT64_C(0x00072B3E30AC4A02), UINT64_C(0x00007DB1E3840852), UINT64_C(0x0001DD33D665342A), UINT64_C(0x0001A7633225AEB5)}, {UINT64_C(0x000B7F7B5B762A44), UINT64_C(0x000331A035435FA2), UINT64_C(0x00067E3DC1DDB9A7), UINT64_C(0x0004B831B6E64D06), UINT64_C(0x0006F2281134099E)}, {UINT64_C(0x000B980EF7392E55), UINT64_C(0x0000B89E617A9CA2), UINT64_C(0x0007ABA1A8BE9857), UINT64_C(0x00039ACA46853BD7), UINT64_C(0x00075B4D3E20EED0)}}, {{UINT64_C(0x000250EDAC297799), UINT64_C(0x0005F2C18C18BF27), UINT64_C(0x0001CA515336C8CA), UINT64_C(0x000559E66BDEB0DF), UINT64_C(0x0001DEEDAD609A8E)}, {UINT64_C(0x000955E31C58DEDB), UINT64_C(0x000669D9C0842B27), UINT64_C(0x0006DEB790D54552), UINT64_C(0x0003F019C46019DA), UINT64_C(0x000471F509C91C79)}, {UINT64_C(0x000732102C57B4C9), UINT64_C(0x0006A2A9C28278B1), UINT64_C(0x0002324651BB700F), UINT64_C(0x00035DAF397E77FD), UINT64_C(0x000663BBD174F83C)}}, {{UINT64_C(0x000B929354FC042F), UINT64_C(0x00011C492ECCD647), UINT64_C(0x00009741F291BEF2), UINT64_C(0x0001B4C7302C0158), UINT64_C(0x00053AE1A0A0CF65)}, {UINT64_C(0x0003EF8B2C9BC0FD), UINT64_C(0x00002CC7CA0F574C), UINT64_C(0x0006D4B65A91C0C0), UINT64_C(0x00037510A240479F), UINT64_C(0x0000C64FA252A385)}, {UINT64_C(0x000A88BD59ED7C65), UINT64_C(0x0007ADDAE9CF1B08), UINT64_C(0x00019BA0F9C07F82), UINT64_C(0x000678DB16C95452), UINT64_C(0x000056623A2D43CD)}}, {{UINT64_C(0x000B7E8A540D0BB7), UINT64_C(0x000584F51D57A3A5), UINT64_C(0x0001D8F204E79366), UINT64_C(0x00050AB42D36BB78), UINT64_C(0x0001F1939E53C5F0)}, {UINT64_C(0x0006F36130EDF74C), UINT64_C(0x0004F887F8A3C1AE), UINT64_C(0x000287BA42F1A8B2), UINT64_C(0x00059F26236FEDC0), UINT64_C(0x0004E7E15665AB6B)}, {UINT64_C(0x000BEF0A5861C3BC), UINT64_C(0x0001C09CD88554A1), UINT64_C(0x00061D92810426B4), UINT64_C(0x0000B7288E75D464), UINT64_C(0x0006309911A5EDED)}}, {{UINT64_C(0x00085B811B64F095), UINT64_C(0x0005D8DFEF0DA78A), UINT64_C(0x0000FAC6BD61618C), UINT64_C(0x0004BAAA6C8B2729), UINT64_C(0x0004B56E9D2ABD89)}, {UINT64_C(0x00043E639CD4D3BA), UINT64_C(0x00074DEABEABDB28), UINT64_C(0x0007E3FBA43ED6F6), UINT64_C(0x0003AEE8B7AFF1C3), UINT64_C(0x0003F53F79D2EE85)}, {UINT64_C(0x000D24432D4F4AA5), UINT64_C(0x00078D7CF1ED698D), UINT64_C(0x0004FF1A468ED10E), UINT64_C(0x000401D16C0D8D9F), UINT64_C(0x0002F258FE117334)}}, {{UINT64_C(0x000FB19D593A119F), UINT64_C(0x000573B9C8EF8EF8), UINT64_C(0x0003D940302F6503), UINT64_C(0x000182EF3D826EE0), UINT64_C(0x0003F7471C590F65)}, {UINT64_C(0x000299B06DAA3C6C), UINT64_C(0x0007746E79EDD442), UINT64_C(0x0003AC79E8C5E3A4), UINT64_C(0x0007EEC70EB2D955), UINT64_C(0x000725068BB9E5F2)}, {UINT64_C(0x0002BC325E5A930B), UINT64_C(0x000107F46E629456), UINT64_C(0x000640B07B73E5D1), UINT64_C(0x00001279DBE60561), UINT64_C(0x000225709C5657E7)}}, }, { {{UINT64_C(0x0000192B0CEABA3B), UINT64_C(0x0000C849471353C7), UINT64_C(0x0007933577181965), UINT64_C(0x000142C9EA69016E), UINT64_C(0x0004567E065866D3)}, {UINT64_C(0x000B6B66959B52D6), UINT64_C(0x000430844ADC8F3E), UINT64_C(0x0006380BD764FFC3), UINT64_C(0x00016D901A803EAC), UINT64_C(0x000086B9A477DC01)}, {UINT64_C(0x00023367321E8B93), UINT64_C(0x00032EA758921A81), UINT64_C(0x0004882218493C4B), UINT64_C(0x000363B5842D9A7D), UINT64_C(0x00015A99D8110971)}}, {{UINT64_C(0x000300698CE29666), UINT64_C(0x0004EECA6154042B), UINT64_C(0x000166B994CFB4CC), UINT64_C(0x0004ACF422430E4C), UINT64_C(0x000025F72D8D2619)}, {UINT64_C(0x000675E071BC36F8), UINT64_C(0x0004DFF904D1F8C7), UINT64_C(0x0003D505499703DF), UINT64_C(0x00020099265EDEB5), UINT64_C(0x0003CC88B51F7700)}, {UINT64_C(0x0007D2FCAA25E5B3), UINT64_C(0x000265D6E2479291), UINT64_C(0x000011547C45B8FB), UINT64_C(0x0007BB46D4B019E2), UINT64_C(0x00056F6CD9966342)}}, {{UINT64_C(0x000716456F1AF846), UINT64_C(0x0006EC66D0F766DB), UINT64_C(0x00046A2790A7CDEB), UINT64_C(0x0007D9FE58069E97), UINT64_C(0x0006F455E4C8BAF4)}, {UINT64_C(0x0002DE3D52161A5B), UINT64_C(0x0001322EF1230B3D), UINT64_C(0x000064226A5D94E2), UINT64_C(0x0004F0C2721E80E3), UINT64_C(0x00055430C4FD1472)}, {UINT64_C(0x000F3FE53622B34E), UINT64_C(0x000400E37E2F6B5E), UINT64_C(0x000786904CA5BE13), UINT64_C(0x000447C21E951630), UINT64_C(0x00030E6760567848)}}, {{UINT64_C(0x000B726FC584B729), UINT64_C(0x000414D51BCE0A43), UINT64_C(0x000618F6813D930C), UINT64_C(0x00040A56D66C1756), UINT64_C(0x0003D984C56008C4)}, {UINT64_C(0x000EB2683ACBED46), UINT64_C(0x000652CB350659D6), UINT64_C(0x00013634382FCA77), UINT64_C(0x0002F5D25E61B8FF), UINT64_C(0x0000B4620F79B12A)}, {UINT64_C(0x0001E7A57930B5B8), UINT64_C(0x00073653EC2B76D1), UINT64_C(0x000613302FE0B30D), UINT64_C(0x0000A6C4E5761F63), UINT64_C(0x0006ADF86A72CC92)}}, {{UINT64_C(0x00019186A824FDD7), UINT64_C(0x00011924F7F2750C), UINT64_C(0x00029AD4044367A7), UINT64_C(0x0007E9538B9DECCA), UINT64_C(0x000280D45D483E14)}, {UINT64_C(0x000BB52AB225DCB5), UINT64_C(0x00028B165CB1E4DA), UINT64_C(0x0005BC09B05FCBE4), UINT64_C(0x000381D12C463328), UINT64_C(0x00076D0B0F76F027)}, {UINT64_C(0x000FEDF306C25C01), UINT64_C(0x0003FECB41117000), UINT64_C(0x0002FD6A35E50E23), UINT64_C(0x000337ED65B03733), UINT64_C(0x0000574ECBAE7CDC)}}, {{UINT64_C(0x0006DB58E6ED0D33), UINT64_C(0x0006B3191FF18B0A), UINT64_C(0x0003EA3B063F5E91), UINT64_C(0x00046C617AC41DAE), UINT64_C(0x00055B8985867163)}, {UINT64_C(0x000FE332D0609F49), UINT64_C(0x00029E2B6C0590BB), UINT64_C(0x00027B083A8281E3), UINT64_C(0x00023F54A6691576), UINT64_C(0x0001F9B2324B7AF4)}, {UINT64_C(0x000B28B2B17C7FE4), UINT64_C(0x0006080357FBA43E), UINT64_C(0x000615C5B81FBEF7), UINT64_C(0x0003954270A7909A), UINT64_C(0x0001A2F47D0A04EB)}}, {{UINT64_C(0x000BA17581986197), UINT64_C(0x00034870F30008DA), UINT64_C(0x00013CA300CCA469), UINT64_C(0x0000B162692148B6), UINT64_C(0x0003F7CF95609F4D)}, {UINT64_C(0x000BAE83E74F002F), UINT64_C(0x00069841112F14B8), UINT64_C(0x00078C4EFE35A991), UINT64_C(0x00060BCE9ED310B3), UINT64_C(0x000754449FD8083C)}, {UINT64_C(0x000AF607F5B16E11), UINT64_C(0x000353A2B8ACC91E), UINT64_C(0x0000EF1D9E0EF391), UINT64_C(0x0004541CFF0EA8DF), UINT64_C(0x00016AEAE7B3F2F0)}}, {{UINT64_C(0x0004D0C351D81066), UINT64_C(0x0000558E4F8F8B3B), UINT64_C(0x00016AB2E6954DA6), UINT64_C(0x0001322A57507762), UINT64_C(0x000048180B80AB80)}, {UINT64_C(0x0008458BFFCB303A), UINT64_C(0x00022F59A0891BA3), UINT64_C(0x00015FD6CA3084EF), UINT64_C(0x000096545EB531A3), UINT64_C(0x0006E575563BC013)}, {UINT64_C(0x00051F33B08869E8), UINT64_C(0x00026605DC18D15D), UINT64_C(0x00055CAC08CDE2C6), UINT64_C(0x000688FFA5C8BAE7), UINT64_C(0x0001B5E984904B9C)}}, {{UINT64_C(0x0006B8B443814972), UINT64_C(0x00055FB9A76E0CC9), UINT64_C(0x00009CE2AAB60A30), UINT64_C(0x0003EF83A2F57151), UINT64_C(0x00054D67D9A4F513)}, {UINT64_C(0x0007BECDA40A587F), UINT64_C(0x00066610E3756505), UINT64_C(0x000667AED7C671A5), UINT64_C(0x00045C3E37289FA8), UINT64_C(0x0003EE1DEB8BF15F)}, {UINT64_C(0x00036DA9491A8276), UINT64_C(0x0007F3BA7F45D5F3), UINT64_C(0x0005491780986582), UINT64_C(0x00017D2A21BAB7FA), UINT64_C(0x00002173C231405F)}}, {{UINT64_C(0x000F3DB9923407C2), UINT64_C(0x00034756D5DCF8D4), UINT64_C(0x00012004CC7C2A34), UINT64_C(0x000333FE8258F7D8), UINT64_C(0x00022BB7C7E2AFDF)}, {UINT64_C(0x0000F405EE8CE31C), UINT64_C(0x0000EAD90D22334E), UINT64_C(0x00033D2A3C4C1541), UINT64_C(0x0000C208CD2F4BA6), UINT64_C(0x000531D1A514C9B5)}, {UINT64_C(0x0009F9F19D9C76D2), UINT64_C(0x00050FDE66CC4397), UINT64_C(0x00007E0C2178203B), UINT64_C(0x0002A55E72D96E80), UINT64_C(0x0003C184A5AB3FAA)}}, {{UINT64_C(0x0001563D94E10FCD), UINT64_C(0x0002F2A35D0DB543), UINT64_C(0x0006E7768E05CFD7), UINT64_C(0x000275C5FC14D586), UINT64_C(0x000433EC2F348324)}, {UINT64_C(0x0004D3D54C94DA0B), UINT64_C(0x000794DDFDB2EE1E), UINT64_C(0x000682353D05BB00), UINT64_C(0x00062D8667C93A51), UINT64_C(0x0004DADCA5A8CE84)}, {UINT64_C(0x0008950DCBA27A08), UINT64_C(0x00059BB3D4E3ABE9), UINT64_C(0x0003822C18A53312), UINT64_C(0x000244B26BFD9780), UINT64_C(0x00021363F385A671)}}, {{UINT64_C(0x0008D4A03FC03231), UINT64_C(0x00023E2A19529871), UINT64_C(0x0007E6F5F8C1E22D), UINT64_C(0x0005603802B4085E), UINT64_C(0x0003FFA733F66BE0)}, {UINT64_C(0x000CC0D81C2C08E7), UINT64_C(0x00018D23FC4F115C), UINT64_C(0x00003051462BF328), UINT64_C(0x0004DB5D451FA8EB), UINT64_C(0x00010ACD436DB7AA)}, {UINT64_C(0x000316FC2858C718), UINT64_C(0x0001C94A21AE0F16), UINT64_C(0x0007FCCA25487FEF), UINT64_C(0x00075860E5CD985C), UINT64_C(0x0005097BC8151C25)}}, {{UINT64_C(0x000DD0D0A35B9B1D), UINT64_C(0x00069BAAA4B56FF0), UINT64_C(0x0004C778899053BE), UINT64_C(0x00002FDC9FA10ADD), UINT64_C(0x0007A47AFD52F5E3)}, {UINT64_C(0x000E3285C26BE9BF), UINT64_C(0x00033A7071D32E1A), UINT64_C(0x0005D4D66BCC2FAF), UINT64_C(0x00048588A74F8EA8), UINT64_C(0x00067F167FCDC66E)}, {UINT64_C(0x0008784A422379C4), UINT64_C(0x0007470006E5302B), UINT64_C(0x000021E9843D3B99), UINT64_C(0x0003D41527492DDA), UINT64_C(0x0006326EC5940067)}}, {{UINT64_C(0x000FF43284BB2391), UINT64_C(0x00053CD58E6D70AA), UINT64_C(0x0006AE6FA42E6DDF), UINT64_C(0x00028B006426C7D9), UINT64_C(0x00052B4EB53AA929)}, {UINT64_C(0x0005CDDE09C1B9A5), UINT64_C(0x0000A96E981F65EC), UINT64_C(0x0001B2C7538B9E62), UINT64_C(0x000441A392439DEB), UINT64_C(0x0006A2B722DC6381)}, {UINT64_C(0x000900CFD32A9792), UINT64_C(0x0001A7B4A6CF54D6), UINT64_C(0x0003CBAB4ADCD36D), UINT64_C(0x0007B9C1AA60B86D), UINT64_C(0x0000702520E53679)}}, {{UINT64_C(0x000C9A305D7834CB), UINT64_C(0x0005B7B9FE0CCCE7), UINT64_C(0x000016A6095A241B), UINT64_C(0x0004B712FDF75B13), UINT64_C(0x0002C53655BBD91A)}, {UINT64_C(0x0008A6ED2314DDC8), UINT64_C(0x0007DA70CDF279E7), UINT64_C(0x0006D2D0C3606E50), UINT64_C(0x0003283DAAA8966F), UINT64_C(0x0006EF64B4E41560)}, {UINT64_C(0x00042A16ECAEB238), UINT64_C(0x0005A981B79EAFF2), UINT64_C(0x0005427BFC071A2B), UINT64_C(0x00049349A5AB5626), UINT64_C(0x00041BC86960BD2C)}}, {{UINT64_C(0x000ABCDBE3A9E5D5), UINT64_C(0x000405363A4B3483), UINT64_C(0x000120CFBB24A873), UINT64_C(0x0005AAE474A462D0), UINT64_C(0x00035D540394697D)}, {UINT64_C(0x000A64659EFE52C3), UINT64_C(0x0004DB773D047E7A), UINT64_C(0x0002162ABB1CFD3D), UINT64_C(0x00015B391C39D9D5), UINT64_C(0x00045B7D89DC266B)}, {UINT64_C(0x000B2D1FBC9FC441), UINT64_C(0x00012722CD49F3E8), UINT64_C(0x0004A0CFFD68110C), UINT64_C(0x0001B6ECFF11A156), UINT64_C(0x0007D2F58CE5E926)}}, }, { {{UINT64_C(0x000E1788C8C3CC62), UINT64_C(0x00043FD128363765), UINT64_C(0x00069AE472062EAB), UINT64_C(0x00035D256FE91217), UINT64_C(0x00067910C5563600)}, {UINT64_C(0x000F768B1233A3DB), UINT64_C(0x0007DF4C7CD2EA86), UINT64_C(0x0002CAE86EF8DA2A), UINT64_C(0x0002329535DE9283), UINT64_C(0x0005A07C9F89C3C4)}, {UINT64_C(0x000054FF768F9CA3), UINT64_C(0x00043D9E4B66B860), UINT64_C(0x0007DF913CA8B203), UINT64_C(0x000719B3B558DDAA), UINT64_C(0x00049B2BB9B923F3)}}, {{UINT64_C(0x000890BE7F18CD54), UINT64_C(0x00044AEBC732FC6C), UINT64_C(0x0000F98B4946A855), UINT64_C(0x00012B28B7A38B2D), UINT64_C(0x00030C9FAD322292)}, {UINT64_C(0x0009D307A4D23D40), UINT64_C(0x00056FC224E7F4C7), UINT64_C(0x00054A676DE6F4D3), UINT64_C(0x0006E886B5E9AB59), UINT64_C(0x0005165D23A85BC8)}, {UINT64_C(0x000ED25967873511), UINT64_C(0x0006C6A9C182B080), UINT64_C(0x0006978A72802608), UINT64_C(0x0006BF34B9518468), UINT64_C(0x0006871D973DF84B)}}, {{UINT64_C(0x000F875D00421E67), UINT64_C(0x00042EDCCB1C82C1), UINT64_C(0x000048FC0A2E1BB9), UINT64_C(0x000733FCF9823770), UINT64_C(0x00049255AE9DEDFF)}, {UINT64_C(0x000B76A27F806A6B), UINT64_C(0x0002C8618FECD22F), UINT64_C(0x0007CA416389DB51), UINT64_C(0x00072B231F4E3DF8), UINT64_C(0x00037E6C81D4C8A3)}, {UINT64_C(0x000315AE714C164A), UINT64_C(0x0000651074CD146C), UINT64_C(0x00070A110B6FA83C), UINT64_C(0x000292BEB2445915), UINT64_C(0x0007BAE86E66340A)}}, {{UINT64_C(0x0005A42303FA5032), UINT64_C(0x00079C0EED4C5482), UINT64_C(0x00070FAF28317AA9), UINT64_C(0x000252F900BCA786), UINT64_C(0x0004C6DF6AC32D72)}, {UINT64_C(0x000899EF622C1092), UINT64_C(0x00024300EA163F80), UINT64_C(0x0005D78541F9C58D), UINT64_C(0x0000A82CF29A5335), UINT64_C(0x00057651841E4857)}, {UINT64_C(0x0002DDAF4534E914), UINT64_C(0x0005C3F8E3CEDF3D), UINT64_C(0x0007E428DFE30ABB), UINT64_C(0x0000CFA8EF984856), UINT64_C(0x0007F54DE1239314)}}, {{UINT64_C(0x0003E194BB770B21), UINT64_C(0x0005FE5004F0D44C), UINT64_C(0x00000E420E05B0CD), UINT64_C(0x0007F4C1EB04ADEA), UINT64_C(0x00042CF75F5849CB)}, {UINT64_C(0x000DFBFF2F58474E), UINT64_C(0x000023E38CACC0A2), UINT64_C(0x0007940AAA1D2AEF), UINT64_C(0x00066B3671EF7D12), UINT64_C(0x0002262304E8FD69)}, {UINT64_C(0x0008190A96FA31A5), UINT64_C(0x000342B2840B29B6), UINT64_C(0x000692023CF41B60), UINT64_C(0x000438CCB9AD9326), UINT64_C(0x0006A74AEEF91383)}}, {{UINT64_C(0x00018FBC15EE9825), UINT64_C(0x000471ADE4E86042), UINT64_C(0x000460985BA9C276), UINT64_C(0x0000273A2CD2F02D), UINT64_C(0x0003D497885E0289)}, {UINT64_C(0x000FB3F88C29D5D7), UINT64_C(0x00006A92797F73B7), UINT64_C(0x00040AF0BB921EC0), UINT64_C(0x00056F0E3B22C834), UINT64_C(0x0002624649A67166)}, {UINT64_C(0x00027A77B2D5B395), UINT64_C(0x000485B55DD21EC2), UINT64_C(0x00018F0DD390533C), UINT64_C(0x0002C22DC574DCED), UINT64_C(0x0002023C88609399)}}, {{UINT64_C(0x0000652B6A1715E4), UINT64_C(0x00010936CCCDBCBB), UINT64_C(0x00075D99584830CC), UINT64_C(0x00013967DE55AE9B), UINT64_C(0x000497B11ABB2BA5)}, {UINT64_C(0x00029098D0D4B7BF), UINT64_C(0x000148C12832BF02), UINT64_C(0x0001ACF592227FC4), UINT64_C(0x000361B3459461F5), UINT64_C(0x00017789D92B4734)}, {UINT64_C(0x00051C79B949CE9C), UINT64_C(0x0003A90D40F0533B), UINT64_C(0x0000FF1DE7855E3C), UINT64_C(0x00063C0B316F0292), UINT64_C(0x00079EE9916B16AB)}}, {{UINT64_C(0x000BAF756382E001), UINT64_C(0x00074E66D14AA815), UINT64_C(0x0005B5DA0DFB4345), UINT64_C(0x0006A98DDBA8EDB0), UINT64_C(0x00036757B46A7CB2)}, {UINT64_C(0x000D2030D203D167), UINT64_C(0x0003C138F45B97D2), UINT64_C(0x0000D68249398DBC), UINT64_C(0x00024992D9AC907A), UINT64_C(0x00054B2D81985107)}, {UINT64_C(0x000C135EB42B443B), UINT64_C(0x000459E57D3F091F), UINT64_C(0x0007365731E3CB09), UINT64_C(0x00037913422A2661), UINT64_C(0x00022EB791C1E99D)}}, {{UINT64_C(0x000DBBF41597ABD7), UINT64_C(0x00047A1841FA5CB7), UINT64_C(0x0005DFFB8D0489BA), UINT64_C(0x000207F59D5AFDD6), UINT64_C(0x0005862958391C33)}, {UINT64_C(0x00023D6607BF974F), UINT64_C(0x000447A73195D140), UINT64_C(0x0001CEA4FE1AACB4), UINT64_C(0x00009432CE509804), UINT64_C(0x0002E2C660E2C2A9)}, {UINT64_C(0x00076405764963F7), UINT64_C(0x0007B075E1B18E3F), UINT64_C(0x0003C86F3DB152BE), UINT64_C(0x000717D762BDBB19), UINT64_C(0x00009430702D8371)}}, {{UINT64_C(0x000AF7F915E85486), UINT64_C(0x0000B0BBC2BBB069), UINT64_C(0x0004A8AC30D65B82), UINT64_C(0x0001A98BB8FFCCD1), UINT64_C(0x0000A60C0955A82C)}, {UINT64_C(0x00028B7AA8D6E8B3), UINT64_C(0x000599AA3AFD1F06), UINT64_C(0x000495C8A53271EA), UINT64_C(0x00010D4AB4581526), UINT64_C(0x00005A91911011B4)}, {UINT64_C(0x00091E63537A8EAF), UINT64_C(0x0004DDC52ABAE41E), UINT64_C(0x0003DD0926FDA797), UINT64_C(0x00053806DE4C5BB3), UINT64_C(0x0005E6F1B98E4E5F)}}, {{UINT64_C(0x000ED0D0E611D440), UINT64_C(0x00028F43B4F900C1), UINT64_C(0x0004C3467D15A321), UINT64_C(0x0003FA40B92F63A1), UINT64_C(0x0004EB1D7C0F97C7)}, {UINT64_C(0x000F31CB2B424218), UINT64_C(0x00028FC2CBD4B770), UINT64_C(0x000049E2E21B9426), UINT64_C(0x0004FBA6C0CA6B59), UINT64_C(0x0000910A8BCBADA6)}, {UINT64_C(0x000062AA84E5A1E8), UINT64_C(0x00055785384B963C), UINT64_C(0x000718EE20099ACE), UINT64_C(0x0001AAE6F92CB06B), UINT64_C(0x0005C36213B6B09F)}}, {{UINT64_C(0x00042CD518E7BB1F), UINT64_C(0x000621C5EDE20FF0), UINT64_C(0x000784AA45E52004), UINT64_C(0x0001EF5EE32943D1), UINT64_C(0x00020EB45F6DCE70)}, {UINT64_C(0x0001A99725161F74), UINT64_C(0x0000C92D8DE52D6B), UINT64_C(0x0004943C545783B6), UINT64_C(0x0000F2A34F6C04CA), UINT64_C(0x0004BA95172EB757)}, {UINT64_C(0x00058B38359EEF2E), UINT64_C(0x00072A003FEEF0E3), UINT64_C(0x0005A1A497C5B5E4), UINT64_C(0x0007346A30D5043D), UINT64_C(0x0004DCC170CE73B1)}}, {{UINT64_C(0x0007FCA11D67A5F5), UINT64_C(0x00051F99020E8DA7), UINT64_C(0x00032448AD151580), UINT64_C(0x0002D682339FD143), UINT64_C(0x0005C59954328210)}, {UINT64_C(0x000065B65920EA67), UINT64_C(0x00064F016ACC8DB2), UINT64_C(0x0002B54FD32DCADE), UINT64_C(0x0007514AC407F433), UINT64_C(0x0006FB8E73CDEC87)}, {UINT64_C(0x0008D3F0CEB6FEF4), UINT64_C(0x000008CD1DAF58F2), UINT64_C(0x0005E29BD86720C8), UINT64_C(0x0001F89E2EA7D372), UINT64_C(0x0000F12D2FEBC32E)}}, {{UINT64_C(0x00074C08FE9F6EBB), UINT64_C(0x00019BC5A03773E2), UINT64_C(0x0002DC6D42FDA236), UINT64_C(0x00026B76B5DD35AA), UINT64_C(0x0004AC140E7698BA)}, {UINT64_C(0x00007B671BE5225C), UINT64_C(0x00075E4E1423B035), UINT64_C(0x0005C5078EE3FB12), UINT64_C(0x00018FE0631F18BA), UINT64_C(0x00049C97C216ADA7)}, {UINT64_C(0x000288CA79DE3FDD), UINT64_C(0x0005F95B9694502C), UINT64_C(0x0007A90B27755E7B), UINT64_C(0x0000D6B962A5D7B4), UINT64_C(0x0002B73E8EABF5E7)}}, {{UINT64_C(0x000CF4B90C4F175B), UINT64_C(0x00038B2E4ADFE275), UINT64_C(0x00051C55B83D6C95), UINT64_C(0x00055A2D1264C7D4), UINT64_C(0x00062E83FE154821)}, {UINT64_C(0x0008971A5D058482), UINT64_C(0x0000037DDD623E19), UINT64_C(0x00032867F2B615A5), UINT64_C(0x000623016E6AEBA8), UINT64_C(0x00012A36AB822905)}, {UINT64_C(0x000120EE148C51AE), UINT64_C(0x00040334FADAA4FB), UINT64_C(0x000334965ACA2453), UINT64_C(0x0006D3E8020844BE), UINT64_C(0x00067F6DE44BCF25)}}, {{UINT64_C(0x000105D43C9E9178), UINT64_C(0x0004721A89809540), UINT64_C(0x0006FC38C213B1E4), UINT64_C(0x0002647D42F65B1A), UINT64_C(0x0000376348D66B34)}, {UINT64_C(0x000C9949B00A3DA8), UINT64_C(0x0000A0919FC02F1D), UINT64_C(0x00028254055C25E6), UINT64_C(0x0001D9499A0AE6F5), UINT64_C(0x0001AACE22F92850)}, {UINT64_C(0x0000AD0E76427572), UINT64_C(0x0004C84545B77E18), UINT64_C(0x000288F5B54FDDB7), UINT64_C(0x00038ED121222ABA), UINT64_C(0x0003A0976AA7E43F)}}, }, { {{UINT64_C(0x00081FCF9F18835D), UINT64_C(0x000431F4C3B0D6B0), UINT64_C(0x0004948FEC6A3648), UINT64_C(0x0004A9B64ED01851), UINT64_C(0x0005A8976BDBA97F)}, {UINT64_C(0x000B16BF1437E1C3), UINT64_C(0x00037D028CF83551), UINT64_C(0x0001D4890BE8B6E0), UINT64_C(0x00014CEE0109B29D), UINT64_C(0x0001D11B49FC55FA)}, {UINT64_C(0x000FF921373DC1C7), UINT64_C(0x00038DE820056599), UINT64_C(0x0000120CE481802B), UINT64_C(0x0006FFC1F2C088F4), UINT64_C(0x0001EE2D0C6B1DF4)}}, {{UINT64_C(0x00000FF81329CB03), UINT64_C(0x00068780226033B3), UINT64_C(0x0006A2545BA20041), UINT64_C(0x0005B2BDDF462150), UINT64_C(0x0003958DB9028FB7)}, {UINT64_C(0x000C6BC63284596C), UINT64_C(0x000348523D1DBF57), UINT64_C(0x00046E3F936916F1), UINT64_C(0x0005F78F7E010886), UINT64_C(0x0004BAEFBF32EDCF)}, {UINT64_C(0x0006B10E2C0DA1C1), UINT64_C(0x000039C183458580), UINT64_C(0x00012DB6C7B007C5), UINT64_C(0x0003F3B7176CF39B), UINT64_C(0x0003C1F7265871AC)}}, {{UINT64_C(0x00085B51F8BCFE19), UINT64_C(0x00014E262925BD43), UINT64_C(0x00012F59369D7DEC), UINT64_C(0x0005891E437C785D), UINT64_C(0x000079EFC6B4ADC9)}, {UINT64_C(0x00057113F86AEFDE), UINT64_C(0x00031D2A3CBB809F), UINT64_C(0x00033DCF8AE19C6C), UINT64_C(0x00002213DF3BA392), UINT64_C(0x0002650EDFE84235)}, {UINT64_C(0x0004FEF6E8E8730E), UINT64_C(0x0002E2C593B029F4), UINT64_C(0x0002D3E99D33A67F), UINT64_C(0x00014E290C55B9BF), UINT64_C(0x0004403429D2BE3D)}}, {{UINT64_C(0x000409570F86A1D1), UINT64_C(0x00022B63BCCD0F01), UINT64_C(0x0004F7D7B94F1868), UINT64_C(0x0001450E62B7DF7C), UINT64_C(0x000694DAA72BBCAC)}, {UINT64_C(0x000F24FC804E499A), UINT64_C(0x0001C5150B7A2ED2), UINT64_C(0x0004AA24EEC36D37), UINT64_C(0x0002132213761A03), UINT64_C(0x00075A13822D103C)}, {UINT64_C(0x000067187C39EB19), UINT64_C(0x0007765373B31B66), UINT64_C(0x00029CEAE18E4D79), UINT64_C(0x0002C737CC0BD795), UINT64_C(0x0003193EDEEA0158)}}, {{UINT64_C(0x0005B52C3101E326), UINT64_C(0x0007176502D653B5), UINT64_C(0x0001FD26BF9CB194), UINT64_C(0x0004FB67EADB3779), UINT64_C(0x0004D0C770A8ACCF)}, {UINT64_C(0x00011F79B7B344FC), UINT64_C(0x00006663499E87A4), UINT64_C(0x000450DAEF594E13), UINT64_C(0x00078C2F195A18D1), UINT64_C(0x0007978E36566E63)}, {UINT64_C(0x0002EB14A8C94333), UINT64_C(0x0001C2F764E483AE), UINT64_C(0x00031C462060C077), UINT64_C(0x0003EF30123095CE), UINT64_C(0x00021B6A8AF629FF)}}, {{UINT64_C(0x0006C49C35F232E3), UINT64_C(0x0000B80EEFEC6616), UINT64_C(0x000680164DFC3701), UINT64_C(0x00072FF54666B634), UINT64_C(0x00068AB4AFC182CD)}, {UINT64_C(0x000176EF0C655243), UINT64_C(0x00019A1EE66FD2EB), UINT64_C(0x0006AF04A498FFA9), UINT64_C(0x0002514F98E20D4A), UINT64_C(0x0001A0821E95F930)}, {UINT64_C(0x000D58CC3800FE7F), UINT64_C(0x00050C9E092A5673), UINT64_C(0x00051CB3347178DD), UINT64_C(0x0002C9C1FB2FE677), UINT64_C(0x00015EE68A8526B0)}}, {{UINT64_C(0x000CD72A8856201E), UINT64_C(0x00038E8C397ED335), UINT64_C(0x0000B8E2262FC710), UINT64_C(0x000027DC02E17AF3), UINT64_C(0x0006A5F450F30E8E)}, {UINT64_C(0x000B680DE0C07AE0), UINT64_C(0x00054D907D909686), UINT64_C(0x000757C2922B0737), UINT64_C(0x000660842FC9A0BA), UINT64_C(0x0003FC7B58E7239A)}, {UINT64_C(0x0004651B7E8AE200), UINT64_C(0x000484D3CB6C7A8E), UINT64_C(0x0002F474BA01A0C0), UINT64_C(0x00044AA7003C772D), UINT64_C(0x0000371F52FFC53B)}}, {{UINT64_C(0x0005C3B547E0B571), UINT64_C(0x000209CCABD0AB4B), UINT64_C(0x0002D25C9DBF3DB1), UINT64_C(0x000032A6A6DE8522), UINT64_C(0x00017A0AD8ECF369)}, {UINT64_C(0x0009010B6E71332D), UINT64_C(0x0007B69ECC73F71C), UINT64_C(0x0000FFC2CCAF6490), UINT64_C(0x00064FDB227E8E46), UINT64_C(0x00055085B8768622)}, {UINT64_C(0x00039AD933E2C137), UINT64_C(0x000171F8E3C0681B), UINT64_C(0x0001BCC516668190), UINT64_C(0x00063314F511F47A), UINT64_C(0x0002FE194634EA7D)}}, {{UINT64_C(0x000FE52986682B6C), UINT64_C(0x0007C7793C6CFA0B), UINT64_C(0x0002F120DB9FC778), UINT64_C(0x00056B1B5D1B696B), UINT64_C(0x0006F7B105C7285D)}, {UINT64_C(0x000F08F3C79E5FA2), UINT64_C(0x0006714A9E5021DE), UINT64_C(0x000556DFCA302233), UINT64_C(0x00036A6272A322E0), UINT64_C(0x0007958876DF034E)}, {UINT64_C(0x0001B28B59F70354), UINT64_C(0x0007AB27CE51E80D), UINT64_C(0x0000567BCD43D179), UINT64_C(0x00041EF880C69F63), UINT64_C(0x00057CCC9DA97DCC)}}, {{UINT64_C(0x00006BDC7393E9B9), UINT64_C(0x00056D46935E2D25), UINT64_C(0x00040C99AE846E20), UINT64_C(0x000277C2A48B7D6B), UINT64_C(0x0006F9657DBA5EC0)}, {UINT64_C(0x000E84FD78E1468C), UINT64_C(0x0001F647949AC006), UINT64_C(0x000373B20611C903), UINT64_C(0x00015E6FAFF6FA2A), UINT64_C(0x00053520AB3070E2)}, {UINT64_C(0x000CC15CC69411F0), UINT64_C(0x000552FB8719E7D5), UINT64_C(0x0007C3B5010848F9), UINT64_C(0x0000E8AF5525076D), UINT64_C(0x00058459D1B894E4)}}, {{UINT64_C(0x000B9009E3531F14), UINT64_C(0x0000237005679DB2), UINT64_C(0x0007BF223FD5732A), UINT64_C(0x0006429263F091F4), UINT64_C(0x0007493705D2ADC2)}, {UINT64_C(0x000793C60C5EACBA), UINT64_C(0x000332F859C4D8EE), UINT64_C(0x0000D090DF892E4A), UINT64_C(0x00041A3040EC7085), UINT64_C(0x0001F585E3FC2C2A)}, {UINT64_C(0x00084D3FD3FF468A), UINT64_C(0x00038C0475145DFA), UINT64_C(0x00056070E08A4838), UINT64_C(0x0002AC8E15465366), UINT64_C(0x0000F1485199EC2C)}}, {{UINT64_C(0x000012693C9129E3), UINT64_C(0x00011009F59E7410), UINT64_C(0x0005E068432FB821), UINT64_C(0x000509F6A285BC64), UINT64_C(0x00064B88E6E8B8A6)}, {UINT64_C(0x000739F7074FD4A7), UINT64_C(0x00032712493D3F9E), UINT64_C(0x0002E3550E33660D), UINT64_C(0x0006EE093485A6A5), UINT64_C(0x0004CAE5F8CDBF10)}, {UINT64_C(0x000BB27495CF7ED3), UINT64_C(0x00001CEB73051EC2), UINT64_C(0x000686DC320D7C1D), UINT64_C(0x0007C5AD5EC9F58E), UINT64_C(0x0001B98ED417D210)}}, {{UINT64_C(0x000BCF4C24A4C93E), UINT64_C(0x00002415C387FA3B), UINT64_C(0x0004B3C58228DDFC), UINT64_C(0x0002037F66598FCF), UINT64_C(0x000793FF104F8F35)}, {UINT64_C(0x000F1F6A9319DCA8), UINT64_C(0x0007F0E26C6BFDCF), UINT64_C(0x00024F06F6521950), UINT64_C(0x0001BF65931AAD98), UINT64_C(0x0004DA8B59BE0CB7)}, {UINT64_C(0x000C49B7018AF82E), UINT64_C(0x0000264DF5E55202), UINT64_C(0x00004C1B40891F09), UINT64_C(0x00037D39139B0395), UINT64_C(0x000545CEBFF22B6C)}}, {{UINT64_C(0x0000535E19606923), UINT64_C(0x000389F3CEB25CB9), UINT64_C(0x000771A87A5F04FF), UINT64_C(0x000712E80B91B905), UINT64_C(0x00001F1EA4402629)}, {UINT64_C(0x0003A2CFFE51751A), UINT64_C(0x0001780B59BF2F57), UINT64_C(0x00033B2134560E7F), UINT64_C(0x0000C2FD87484CD4), UINT64_C(0x0000C1E827BF8C54)}, {UINT64_C(0x000BB159A554E7F7), UINT64_C(0x000679D0F2669B49), UINT64_C(0x0007C8AF96EB162D), UINT64_C(0x000739F8391987C4), UINT64_C(0x0004FD6BA815924D)}}, {{UINT64_C(0x000CD58A76375AB1), UINT64_C(0x0000E0B8DB7493B2), UINT64_C(0x0001F26DC2178BD2), UINT64_C(0x000267C3B843A318), UINT64_C(0x0003B57558845D7B)}, {UINT64_C(0x00062248E93DA9D4), UINT64_C(0x0001B750D5841F57), UINT64_C(0x0005825717C4CDF9), UINT64_C(0x000395BD7231BF89), UINT64_C(0x0005BB6B5E2E6AF9)}, {UINT64_C(0x0009C6B9394024E3), UINT64_C(0x00075C5446BE7237), UINT64_C(0x00065E6C801E7BB5), UINT64_C(0x00002DB2F90A55CC), UINT64_C(0x00045DBB4D1CCBDE)}}, {{UINT64_C(0x00053CBFDBE0980A), UINT64_C(0x0001407AA377A7AD), UINT64_C(0x0001290C47515626), UINT64_C(0x0006B6C6AB3118E7), UINT64_C(0x0002C22D483E81D6)}, {UINT64_C(0x00012ACDC7AE7440), UINT64_C(0x00069C66640BC7A6), UINT64_C(0x00002A4F768809CC), UINT64_C(0x00014168BEC8D796), UINT64_C(0x000052716E75E07B)}, {UINT64_C(0x0001BB2F947F80B6), UINT64_C(0x000073A86D41B9DC), UINT64_C(0x0000F191E9DE78B6), UINT64_C(0x00065DF33E390DB9), UINT64_C(0x00003308F79176BD)}}, }, { {{UINT64_C(0x000BA39C423A0F8A), UINT64_C(0x0006FF2C4C49644C), UINT64_C(0x000527B0CF9945D1), UINT64_C(0x000462BF78F17E13), UINT64_C(0x000072F5DF073B45)}, {UINT64_C(0x000A52B0C9431B86), UINT64_C(0x00007413199BDB5A), UINT64_C(0x0006FF18C34250CB), UINT64_C(0x0005F22C96AC669A), UINT64_C(0x00009930CFA11CAD)}, {UINT64_C(0x00049D54A46B4F00), UINT64_C(0x0001AA620DEF496D), UINT64_C(0x0001FF21C12D3280), UINT64_C(0x0006DA8184B69B09), UINT64_C(0x000387F6AA984BF6)}}, {{UINT64_C(0x0001654E2D2F5512), UINT64_C(0x00078F8B53D7341A), UINT64_C(0x0000470E5BC40FE6), UINT64_C(0x0006C2A23BF4231D), UINT64_C(0x00008AD4AC154BD4)}, {UINT64_C(0x00025588B0E427F0), UINT64_C(0x00004B7426292145), UINT64_C(0x0004EFE16DBDD657), UINT64_C(0x000737056241360D), UINT64_C(0x000503BBEF8BB0A2)}, {UINT64_C(0x000E71495D3F3EE8), UINT64_C(0x0003B55E84166513), UINT64_C(0x0005A32066E89C7A), UINT64_C(0x00060FD619143FDC), UINT64_C(0x0007AF54E13C9A0B)}}, {{UINT64_C(0x000F35F2359ED4D4), UINT64_C(0x0006DAD5A1EDD9F7), UINT64_C(0x00033E72BB06FA4C), UINT64_C(0x0004CB0BF2699447), UINT64_C(0x00078ADC100A9438)}, {UINT64_C(0x00058677010F1D44), UINT64_C(0x0000EE3DA34D7805), UINT64_C(0x0003C19261DBCE0E), UINT64_C(0x0000BE1D2B1915F1), UINT64_C(0x0004C27417301A56)}, {UINT64_C(0x00010519E74F0FD3), UINT64_C(0x000667928B6E2AED), UINT64_C(0x000112B7D96F8351), UINT64_C(0x00025AC5C3C73843), UINT64_C(0x00064F071A913A63)}}, {{UINT64_C(0x000134221F75E904), UINT64_C(0x0001E877FC436184), UINT64_C(0x0001043119533F1B), UINT64_C(0x00036E12894B6885), UINT64_C(0x0001A97DC3A85DD9)}, {UINT64_C(0x0005B0E5800AD26D), UINT64_C(0x0003C8403B9B7909), UINT64_C(0x000578BF28F187B8), UINT64_C(0x0006F76A622B025F), UINT64_C(0x00001A581506806A)}, {UINT64_C(0x000B1B3A779043A2), UINT64_C(0x0002BD2CCEFC7D40), UINT64_C(0x0006880561392822), UINT64_C(0x000470820DC7AD05), UINT64_C(0x0000A8A6DFE39EFC)}}, {{UINT64_C(0x0003B4AE7341A857), UINT64_C(0x0006F61AE4525D94), UINT64_C(0x00047463C3F47708), UINT64_C(0x00013CE30C0E6CD4), UINT64_C(0x0001A4D6B43BC1E8)}, {UINT64_C(0x000448110CF677D7), UINT64_C(0x0002B26F500047C8), UINT64_C(0x0000A9EDEE30B5CA), UINT64_C(0x00074CEAB89A5F26), UINT64_C(0x00069DC9E784890E)}, {UINT64_C(0x0002384FEB025EE8), UINT64_C(0x000760169DF0E4ED), UINT64_C(0x000679A94C441675), UINT64_C(0x0006E39A8B9E9323), UINT64_C(0x0004F60517E33211)}}, {{UINT64_C(0x000D1F112D03827C), UINT64_C(0x0003E266C25B8CB9), UINT64_C(0x0004DDAE5E9A861A), UINT64_C(0x0003FDDD5A19E3FC), UINT64_C(0x000525AC4177127A)}, {UINT64_C(0x0005E3FBAF1DE590), UINT64_C(0x00006D0AC9D49EBF), UINT64_C(0x00071A842BB0750F), UINT64_C(0x00030A965193BEB1), UINT64_C(0x00000074F0F13CF1)}, {UINT64_C(0x000569358B8229BF), UINT64_C(0x0004D8605014C12D), UINT64_C(0x00067CF8F3ABB9E2), UINT64_C(0x0001913D15FE7E56), UINT64_C(0x0004E005335EB124)}}, {{UINT64_C(0x000DB4B52128B9C8), UINT64_C(0x000286D98EC1991F), UINT64_C(0x00057D6985B266D5), UINT64_C(0x0000D63A8186A6CA), UINT64_C(0x0003E458C6D43002)}, {UINT64_C(0x000FAC1001DCF643), UINT64_C(0x0001A63A60E69551), UINT64_C(0x000770074385A527), UINT64_C(0x000716E487ACFCBE), UINT64_C(0x0003AFC421F39471)}, {UINT64_C(0x0001FF85BA0DD581), UINT64_C(0x000185663E421B6B), UINT64_C(0x0003D0CC19588A5B), UINT64_C(0x00050A4ED90A0BD8), UINT64_C(0x0001ADEA0DFB4B55)}}, {{UINT64_C(0x000F8CD682890618), UINT64_C(0x0001B4C0FC4BF1B7), UINT64_C(0x0004593054904595), UINT64_C(0x00044163E1D05297), UINT64_C(0x0004FF913B7848EE)}, {UINT64_C(0x00044061A1C77BF2), UINT64_C(0x000118C6EAF78CBE), UINT64_C(0x000121317990C4B0), UINT64_C(0x00014F94111D4DBF), UINT64_C(0x00050FC488F73A1C)}, {UINT64_C(0x0003F8A423FF3B98), UINT64_C(0x00057AB9DDB49662), UINT64_C(0x000307128F5CD0A4), UINT64_C(0x0005C206361126E4), UINT64_C(0x00058F1A9B6F58C2)}}, {{UINT64_C(0x00026D3D15CAFC7E), UINT64_C(0x00011891BC41E2F2), UINT64_C(0x0006F04870D432A4), UINT64_C(0x000745C21E77AAA6), UINT64_C(0x0003DAC061530272)}, {UINT64_C(0x0001DAF75081BEA5), UINT64_C(0x00056D5195DD18E2), UINT64_C(0x0001DCAC8C45410E), UINT64_C(0x0004D2DA16F980D8), UINT64_C(0x00063744829E7170)}, {UINT64_C(0x000DF1C42FA10272), UINT64_C(0x0000741CA2FAA037), UINT64_C(0x0000467C87311FE7), UINT64_C(0x000523429446FA40), UINT64_C(0x00068BD1A87367D1)}}, {{UINT64_C(0x000C458B0171251B), UINT64_C(0x0001FE9DE818F3CF), UINT64_C(0x00054A1370707A2C), UINT64_C(0x000062F84AA462F0), UINT64_C(0x0007CF5A9BF230F7)}, {UINT64_C(0x00054404A1098FC2), UINT64_C(0x0002411906266825), UINT64_C(0x0000A193956A70E8), UINT64_C(0x0000FE137D04BC1F), UINT64_C(0x0004E42D21EFFD81)}, {UINT64_C(0x000F2EAC10355E39), UINT64_C(0x00054F7E065688EB), UINT64_C(0x0001A95E0CA9F2C6), UINT64_C(0x0007E704C61469A2), UINT64_C(0x0007B68ADBD82DC6)}}, {{UINT64_C(0x000899180C1E2363), UINT64_C(0x0007958932146E24), UINT64_C(0x00043C3BDBE7E084), UINT64_C(0x00059983B137251C), UINT64_C(0x000181505C38246A)}, {UINT64_C(0x0000FD89855EFABB), UINT64_C(0x0003B63D1B15E2DE), UINT64_C(0x000255391D67495A), UINT64_C(0x0004DD2784B95163), UINT64_C(0x000512AAAA077953)}, {UINT64_C(0x000F74E51E9D1E14), UINT64_C(0x0007A0923F8922E5), UINT64_C(0x000481DF01D3BA5E), UINT64_C(0x00078147FE69A25E), UINT64_C(0x0002677F7C367D95)}}, {{UINT64_C(0x000C31AE3ACBF754), UINT64_C(0x00015B533DE0199D), UINT64_C(0x00037F5398951F25), UINT64_C(0x0007F6D8289614BF), UINT64_C(0x0007A746B03A9AD8)}, {UINT64_C(0x000A5E8B067361B9), UINT64_C(0x000753D2A11E2709), UINT64_C(0x00068EB1296DD194), UINT64_C(0x0007F60FCC2F2F13), UINT64_C(0x000241ECD0A2E455)}, {UINT64_C(0x000AB9A10A22A500), UINT64_C(0x0001B6D59F5E169E), UINT64_C(0x00031BBC448574D5), UINT64_C(0x0004717C01E2B0BB), UINT64_C(0x0003D21E8ACA1878)}}, {{UINT64_C(0x000499194C8B1C66), UINT64_C(0x00023DD23CF4A5FF), UINT64_C(0x000260F22A1F1E67), UINT64_C(0x00046F48D856E7A8), UINT64_C(0x00027B4E0522C56B)}, {UINT64_C(0x000197955EC21F63), UINT64_C(0x0004F7579537C60A), UINT64_C(0x0001EED38E27A397), UINT64_C(0x000642709A47DD6D), UINT64_C(0x0000CEC4BAE6CE94)}, {UINT64_C(0x0007E224BD3DE334), UINT64_C(0x0002BC2A4E547CE3), UINT64_C(0x0006C9441E441A2F), UINT64_C(0x00066ABBA46DB7C3), UINT64_C(0x0007D6D7B2C94D89)}}, {{UINT64_C(0x00094A1B918036C4), UINT64_C(0x0007000DC73238D4), UINT64_C(0x00077504C3F1AB6E), UINT64_C(0x0004E6A5D5C7C6A1), UINT64_C(0x0003821648B33D3A)}, {UINT64_C(0x00081E39CDB93F79), UINT64_C(0x0004EBBC689100FB), UINT64_C(0x0001DD37C191E986), UINT64_C(0x000036795A799602), UINT64_C(0x000041C1B41711DB)}, {UINT64_C(0x000A4A21AC6CAF3D), UINT64_C(0x000744CF7594E6F1), UINT64_C(0x000030561165E9A9), UINT64_C(0x00074B8AB965B245), UINT64_C(0x000244902E385A94)}}, {{UINT64_C(0x000464BD11AFA1E1), UINT64_C(0x0002E00B44F4A68C), UINT64_C(0x0006C58D5152071B), UINT64_C(0x0007CC78F1BEA1EE), UINT64_C(0x0003D52810ACC281)}, {UINT64_C(0x000C04B80D28DBA4), UINT64_C(0x0007C5EAA4A27BFF), UINT64_C(0x00066248F5BFC255), UINT64_C(0x0006BDB404771492), UINT64_C(0x00019FA7BB5E292E)}, {UINT64_C(0x0006358792FF5820), UINT64_C(0x0003BB145A4D0D14), UINT64_C(0x000647A0D099804C), UINT64_C(0x0001CE6985BBEA5D), UINT64_C(0x00071F7ADDB5DEC0)}}, {{UINT64_C(0x000FF792012E3AD1), UINT64_C(0x000318FC42C34144), UINT64_C(0x00018AA9596D5383), UINT64_C(0x0004A1E0677AA264), UINT64_C(0x0007C9D08A010323)}, {UINT64_C(0x000B38DA3FFA9D8B), UINT64_C(0x0007B37A58DB49D5), UINT64_C(0x0003CAB96E3D6DD9), UINT64_C(0x0004877EC3C59320), UINT64_C(0x0005F79E6AB22005)}, {UINT64_C(0x000D9227D42E392D), UINT64_C(0x000383E4A65149E3), UINT64_C(0x0001FC4C8988D7D7), UINT64_C(0x0000301C333E8D0D), UINT64_C(0x000566D13B877137)}}, }, { {{UINT64_C(0x0002819CD64EC5D5), UINT64_C(0x000718864EB85DEA), UINT64_C(0x0000B38F635D18B2), UINT64_C(0x0000FA0D19EC1914), UINT64_C(0x0007FC6E0B53A132)}, {UINT64_C(0x000681A57637B42A), UINT64_C(0x00009516D77453A8), UINT64_C(0x00041747D2AFF787), UINT64_C(0x000484C8CAA8775B), UINT64_C(0x00069B6EDB5BEB15)}, {UINT64_C(0x000F673ED008533F), UINT64_C(0x00005983AE2E9902), UINT64_C(0x000696120C054601), UINT64_C(0x0002DD10C21D3665), UINT64_C(0x0003650B63683F24)}}, {{UINT64_C(0x0001C85E071E87C9), UINT64_C(0x00038E791D5639BC), UINT64_C(0x0007EB7B3E0A3BD5), UINT64_C(0x00067F05BA2C2992), UINT64_C(0x0005A217D19B8E87)}, {UINT64_C(0x0009CC57757E7DC9), UINT64_C(0x0004C152B026BBF3), UINT64_C(0x0007CE941D2BB495), UINT64_C(0x00022801029CDB1F), UINT64_C(0x00015E56AA9988B8)}, {UINT64_C(0x0001F20BB815BF7F), UINT64_C(0x00045BBFD494947D), UINT64_C(0x000752E00CADD615), UINT64_C(0x00030A1ADE235D5B), UINT64_C(0x00004F475EAAC468)}}, {{UINT64_C(0x0005DEC978DC22CC), UINT64_C(0x00069E99CC23AF7D), UINT64_C(0x0001A491C445CF0B), UINT64_C(0x0001A2B80570EAF4), UINT64_C(0x000519998F23DA17)}, {UINT64_C(0x00033F2D4F6DFC80), UINT64_C(0x0003473C4B91929A), UINT64_C(0x000657675912C778), UINT64_C(0x00027483C8C74BA9), UINT64_C(0x00045AEDD79F572E)}, {UINT64_C(0x0005B55CF68CF232), UINT64_C(0x0005978D5F58C198), UINT64_C(0x000463464AA8D74F), UINT64_C(0x00000768A84F1143), UINT64_C(0x0004D85E72D498F7)}}, {{UINT64_C(0x00065396EB5E1B7C), UINT64_C(0x0003AD9BC86D4A9D), UINT64_C(0x0007D80AED5F83A2), UINT64_C(0x0007BF7E181211DD), UINT64_C(0x00053259A33A1C38)}, {UINT64_C(0x0004ED7967092AA9), UINT64_C(0x00037E220CEFD1A7), UINT64_C(0x0007D56552E4BE39), UINT64_C(0x000467E0E1384212), UINT64_C(0x0007CB81AF42B8E6)}, {UINT64_C(0x000F60010D427117), UINT64_C(0x0003FE077DD17DAC), UINT64_C(0x0003D70C978E0E1D), UINT64_C(0x0004EC475F514EFA), UINT64_C(0x000678A033281D8A)}}, {{UINT64_C(0x0001DDD15D89D0DA), UINT64_C(0x0005AE12E0DC3F81), UINT64_C(0x00021725313E6CD1), UINT64_C(0x00058E25DD51CD68), UINT64_C(0x00051CC1640E208C)}, {UINT64_C(0x000A5BFACD788203), UINT64_C(0x00076782156DA54A), UINT64_C(0x0006546FAACEBFB5), UINT64_C(0x0000751697EBD387), UINT64_C(0x000403792F66F908)}, {UINT64_C(0x0001ED1BA791D84F), UINT64_C(0x0007C0C66505B59A), UINT64_C(0x0003039E8770455C), UINT64_C(0x000176EBE864CCC6), UINT64_C(0x0000A9D7490BB5E2)}}, {{UINT64_C(0x000ADBB841243625), UINT64_C(0x00070EF045AE92E4), UINT64_C(0x0003ED707AC6DC1C), UINT64_C(0x0002EC569D895E88), UINT64_C(0x0007A1F82B8A9F9B)}, {UINT64_C(0x000480ED4CC26515), UINT64_C(0x0007142FB964F1D8), UINT64_C(0x0002D589D76131D9), UINT64_C(0x0002041F5E307B5D), UINT64_C(0x0004DC0C8DC698E2)}, {UINT64_C(0x000639BA125B4EB0), UINT64_C(0x0006735AE5885BC9), UINT64_C(0x000402130AA29EFE), UINT64_C(0x0006483ECF5F928A), UINT64_C(0x0005C0C2A7450215)}}, {{UINT64_C(0x00011E1BA90F4D05), UINT64_C(0x0003C4ACA739B18D), UINT64_C(0x0006DA6C4D05BB4B), UINT64_C(0x0006C9D11A68C07A), UINT64_C(0x0007E4FF60853DCC)}, {UINT64_C(0x000FC3B1EAB98C72), UINT64_C(0x000194A565C0D2C0), UINT64_C(0x0006774E78078878), UINT64_C(0x0002845C8FBE34B8), UINT64_C(0x0003FA8FFB470A30)}, {UINT64_C(0x000DF02100A29B8E), UINT64_C(0x0001EDB288FCEFEF), UINT64_C(0x0003A1F05EE527CB), UINT64_C(0x0000800DA11B67CF), UINT64_C(0x0000F28747F25BA7)}}, {{UINT64_C(0x000AB1FE778D5AC8), UINT64_C(0x0007AC5F7720F73D), UINT64_C(0x0001F29E35DE087B), UINT64_C(0x0006594AE6F4B147), UINT64_C(0x0003BD0E462820EB)}, {UINT64_C(0x00046E4EE5708B31), UINT64_C(0x0005F6D4A65795AD), UINT64_C(0x00065A6A14FD4DBD), UINT64_C(0x0005175D21ECC1C7), UINT64_C(0x0007FE00455D7273)}, {UINT64_C(0x0007B6F8CC74B2E7), UINT64_C(0x000741AB0632D05A), UINT64_C(0x00049D46261751F0), UINT64_C(0x0006736BD5AEA112), UINT64_C(0x00069AD164B202C5)}}, {{UINT64_C(0x00012BDCF8236C6C), UINT64_C(0x000367FF9D0F9B9A), UINT64_C(0x0003F319B67073D2), UINT64_C(0x000760E8B33BDBA0), UINT64_C(0x00056660C3661195)}, {UINT64_C(0x0006A7EA308B1685), UINT64_C(0x0006C261A0B19E51), UINT64_C(0x0004E083123A5FB3), UINT64_C(0x00047A0C38DD3BA2), UINT64_C(0x00053C6D2A152664)}, {UINT64_C(0x000FAF64FB917431), UINT64_C(0x000565756E7FAAF4), UINT64_C(0x0003D721A24A3704), UINT64_C(0x00013317369CBD42), UINT64_C(0x00016612511B5AA0)}}, {{UINT64_C(0x000E652B12074C2E), UINT64_C(0x00059D0BAF050179), UINT64_C(0x00003B5736856800), UINT64_C(0x000647959933E44E), UINT64_C(0x0003D56153518775)}, {UINT64_C(0x0000F380F6F1A960), UINT64_C(0x0001ACBBE16F804F), UINT64_C(0x0002997050169D92), UINT64_C(0x0006923F3FB9A04C), UINT64_C(0x000760D8364CDE1D)}, {UINT64_C(0x00087864C2C7818E), UINT64_C(0x00065BCE2C21225E), UINT64_C(0x0000829D71C17447), UINT64_C(0x000624DD657FE09E), UINT64_C(0x000078584F6FEFD9)}}, {{UINT64_C(0x0006D584A0FE7A46), UINT64_C(0x00069D33D6A2E6E8), UINT64_C(0x00067E621C9A0CE7), UINT64_C(0x00077A830F59FBFF), UINT64_C(0x00014C1BD946B545)}, {UINT64_C(0x0001B2A1355A4052), UINT64_C(0x000675CBE17382B6), UINT64_C(0x000641AF5CC81253), UINT64_C(0x0005EB097D44D21F), UINT64_C(0x00009FC2AAAE02CC)}, {UINT64_C(0x000D414D936E58DD), UINT64_C(0x0000B296AC88EB92), UINT64_C(0x00076AB84DD6056C), UINT64_C(0x000685E1AB03C5DC), UINT64_C(0x00028348D45F6358)}}, {{UINT64_C(0x00016CC86D940FFC), UINT64_C(0x0006FA98A7F59E71), UINT64_C(0x00029CA45E235967), UINT64_C(0x0001DDB48758B49F), UINT64_C(0x00061464300AF54F)}, {UINT64_C(0x00043C3AC9312B0D), UINT64_C(0x000064FC92BC9377), UINT64_C(0x000239F95BD3C366), UINT64_C(0x0000529C3D8CF33A), UINT64_C(0x000181E4547EBD24)}, {UINT64_C(0x000E16213D8C28C0), UINT64_C(0x000231D13CE48188), UINT64_C(0x0007F4B9BEA03675), UINT64_C(0x0004042E3AC3D778), UINT64_C(0x0001EAA475E87AA7)}}, {{UINT64_C(0x0001DAA732854120), UINT64_C(0x0002D8C6031F046B), UINT64_C(0x00048CA4CD8BA89E), UINT64_C(0x00006937503A6724), UINT64_C(0x00061B37A983648E)}, {UINT64_C(0x00013AC756B13B17), UINT64_C(0x0007F99EB1FE63B2), UINT64_C(0x00012EF62AA29F91), UINT64_C(0x000275A63AC0B82C), UINT64_C(0x00041F85AC1748DC)}, {UINT64_C(0x0003C3A345E37216), UINT64_C(0x0000BC95899511A0), UINT64_C(0x00067984E11988E2), UINT64_C(0x0003790C6A6BD91C), UINT64_C(0x0004AE8857A370C0)}}, {{UINT64_C(0x00059767D1DC7159), UINT64_C(0x00059021E287D705), UINT64_C(0x00059EECEC3BE7D9), UINT64_C(0x0001EAA18D4EADD0), UINT64_C(0x00065A975E23F03E)}, {UINT64_C(0x000A95AFCF439414), UINT64_C(0x00015B75C723F702), UINT64_C(0x0000BF98929522FB), UINT64_C(0x0003085D78E648C0), UINT64_C(0x00037D7D62CA4475)}, {UINT64_C(0x0004A0DA8919F5F5), UINT64_C(0x000367D06413644F), UINT64_C(0x000354956C041EA1), UINT64_C(0x00010755634E2C5D), UINT64_C(0x000170791147DD80)}}, {{UINT64_C(0x000827F7944FE6CC), UINT64_C(0x00001C751F20EF72), UINT64_C(0x00035F7CA3D66415), UINT64_C(0x0005210C82C852BA), UINT64_C(0x00004C02A5485650)}, {UINT64_C(0x0003B5BDD64B5C0A), UINT64_C(0x0004689EBDCCFF34), UINT64_C(0x00070E43EECF0D36), UINT64_C(0x0006DE61D82DCC84), UINT64_C(0x00012E98D82A7298)}, {UINT64_C(0x0001E9E5518D471A), UINT64_C(0x0007A1BB46DE49D9), UINT64_C(0x00035B2927B223D1), UINT64_C(0x0001CCAE464874F4), UINT64_C(0x00039DDDEF590E1E)}}, {{UINT64_C(0x00024A7A1C775995), UINT64_C(0x0007157DD78B8376), UINT64_C(0x000135892F3211E4), UINT64_C(0x00068F7235FB1FF7), UINT64_C(0x0007B084D8E8F5BA)}, {UINT64_C(0x00047354D60A9B5C), UINT64_C(0x0005528D484B558C), UINT64_C(0x0005EA409EB39DEF), UINT64_C(0x0001301D88A26EAB), UINT64_C(0x0003E8EEEA1E9E16)}, {UINT64_C(0x0007E18F66EB4040), UINT64_C(0x0003D687AAC18DF1), UINT64_C(0x000043407B1B01C5), UINT64_C(0x00076026A3612E1D), UINT64_C(0x00036AC22C1DA7F0)}}, }, { {{UINT64_C(0x000A1DB3FDA77DAC), UINT64_C(0x0004D9593DB5C4FA), UINT64_C(0x0002D0C711ADB1E7), UINT64_C(0x0004FA1FD3056EC4), UINT64_C(0x0001AEA89A06C580)}, {UINT64_C(0x0000B6E56502BC8A), UINT64_C(0x00030FB5DA75A109), UINT64_C(0x00061CCC955CD549), UINT64_C(0x00072ED7E235BE62), UINT64_C(0x0004FFC550D2C672)}, {UINT64_C(0x0001401B07FD2FC2), UINT64_C(0x0001363A97814A08), UINT64_C(0x00040A250BB0D833), UINT64_C(0x0003FDC7EADB00FF), UINT64_C(0x0006D0C5F0015D6E)}}, {{UINT64_C(0x0006C4A3C3DD75D0), UINT64_C(0x00035FB0DFF6D283), UINT64_C(0x00008EC03452D8B5), UINT64_C(0x0000660AA38D2E81), UINT64_C(0x00070999FB1B3622)}, {UINT64_C(0x00076C0468E5E93B), UINT64_C(0x000691D7E3FC4A00), UINT64_C(0x00049CB4185CDAF8), UINT64_C(0x00016C0C829B0E8D), UINT64_C(0x0006AA160D0C7282)}, {UINT64_C(0x0005FA2B7F6BD2E2), UINT64_C(0x000158DA48E6F8A3), UINT64_C(0x000604218B1883CE), UINT64_C(0x0000CFFE74536FDE), UINT64_C(0x00005D042AB776AA)}}, {{UINT64_C(0x00027DD79FD8B383), UINT64_C(0x0004E3C07F0FC4F0), UINT64_C(0x00071E194BBE44D0), UINT64_C(0x000516439A5B3612), UINT64_C(0x0003F479BE23976A)}, {UINT64_C(0x000D07783284BAF3), UINT64_C(0x00044583E7D6E11C), UINT64_C(0x0001D132C130CABE), UINT64_C(0x000625DDBFB712E6), UINT64_C(0x00070A1B85622B32)}, {UINT64_C(0x00034C89E9034A6C), UINT64_C(0x00078F18070D16D9), UINT64_C(0x0005C48940FE1968), UINT64_C(0x0007B463D52BFF8C), UINT64_C(0x0004F9CB24AA3CA3)}}, {{UINT64_C(0x0000210FBD862AF4), UINT64_C(0x00042D00326CF364), UINT64_C(0x0005909CDA828553), UINT64_C(0x000765038B375968), UINT64_C(0x00061244E59E8942)}, {UINT64_C(0x000316B2C8856415), UINT64_C(0x0002A4748F779AB3), UINT64_C(0x000239C5E875089A), UINT64_C(0x00036401DD98269B), UINT64_C(0x00011DDAE2A7E2F2)}, {UINT64_C(0x000E9134B0007750), UINT64_C(0x0005EF4908EA5F8B), UINT64_C(0x00079BE217CC5E96), UINT64_C(0x0000599ECA99A489), UINT64_C(0x0004C47BBF939482)}}, {{UINT64_C(0x00003A337C362E13), UINT64_C(0x0007780615B15DD1), UINT64_C(0x000773A3946A0160), UINT64_C(0x000700FAAF105D15), UINT64_C(0x0001A74BE2B6494D)}, {UINT64_C(0x0005CA35FE3DB4CB), UINT64_C(0x00071DF8C08DEDDD), UINT64_C(0x0005F7E4ACF08CA7), UINT64_C(0x00036F543C236FDD), UINT64_C(0x00069ABF13BDA30B)}, {UINT64_C(0x000D0BDB4C5FE93D), UINT64_C(0x0002B22A4FA5285B), UINT64_C(0x0006FA80F65CB79E), UINT64_C(0x000379BFA1F4BF5E), UINT64_C(0x00046594A6F4C0D4)}}, {{UINT64_C(0x0007305A30FD1F79), UINT64_C(0x0001C6FFD9905695), UINT64_C(0x0004645BE794D673), UINT64_C(0x000342101D707890), UINT64_C(0x0001BB588F62A0A3)}, {UINT64_C(0x000105A272D17F2A), UINT64_C(0x0007B3D6FA991E49), UINT64_C(0x000227280611E9A7), UINT64_C(0x0001A93AAA75915F), UINT64_C(0x00023FA441B3482E)}, {UINT64_C(0x00049C1150A4394C), UINT64_C(0x00040C4F9BAC625E), UINT64_C(0x000019D525AD587E), UINT64_C(0x0004FF7128EF9688), UINT64_C(0x0004FD444389AB05)}}, {{UINT64_C(0x000238E42AD5EEEC), UINT64_C(0x0005DE60189ED21B), UINT64_C(0x0001C3ED84BF7F92), UINT64_C(0x00051D4CE9A6E138), UINT64_C(0x0004D7509030CE74)}, {UINT64_C(0x00014535B829610F), UINT64_C(0x0006763BE3F420BB), UINT64_C(0x000224420EC61552), UINT64_C(0x0001D944B492451E), UINT64_C(0x00043B7C34AD7E8B)}, {UINT64_C(0x0008748FB4B47D51), UINT64_C(0x0005ABB8E9B2C218), UINT64_C(0x0001F774AE8AEF2A), UINT64_C(0x0004E251530C1540), UINT64_C(0x0002C17E01A2CD3E)}}, {{UINT64_C(0x000A5AEDEE07B0B0), UINT64_C(0x0005F89D3947B76A), UINT64_C(0x0002BB62F90E7DE8), UINT64_C(0x000654A1AF24BC3B), UINT64_C(0x0003546F95E0EE6F)}, {UINT64_C(0x00085679601B8BC5), UINT64_C(0x0004BB095D71C7D0), UINT64_C(0x00053ECC1C751399), UINT64_C(0x00041FE3795CBDE2), UINT64_C(0x0006EA98F1D1D81D)}, {UINT64_C(0x00064ED26F676ADD), UINT64_C(0x0005A7A5BEE185B3), UINT64_C(0x000130CC8FEC6AE2), UINT64_C(0x000629FDE7C00F10), UINT64_C(0x000585D5A1CBFA57)}}, {{UINT64_C(0x000AE0784632D10F), UINT64_C(0x00027BFA28563B52), UINT64_C(0x0004DECE15823B3A), UINT64_C(0x00010DA131FF58A7), UINT64_C(0x00048DEFFB0FE190)}, {UINT64_C(0x000C811EC58F82EA), UINT64_C(0x000326DA9E04E555), UINT64_C(0x00071F177799421B), UINT64_C(0x0003E3A474D3E8B8), UINT64_C(0x0003D5D6D4DE3CEF)}, {UINT64_C(0x000D9FFAF07322DD), UINT64_C(0x000628E14EB89510), UINT64_C(0x00075D001D2380EC), UINT64_C(0x00050D7E5EF7D399), UINT64_C(0x00079765D0A00A45)}}, {{UINT64_C(0x00090F5A32267E76), UINT64_C(0x00019A1B8E57CC65), UINT64_C(0x00048B29601AC029), UINT64_C(0x00069FA23DE54FFB), UINT64_C(0x00002FCBE3187F20)}, {UINT64_C(0x000125C2704C278B), UINT64_C(0x00028493D1EF2120), UINT64_C(0x00054F9AD9FF374B), UINT64_C(0x0006985537375711), UINT64_C(0x00007534EB65121D)}, {UINT64_C(0x0004BD9A12979647), UINT64_C(0x000788B5BC284E24), UINT64_C(0x0004CBD296C6FF6B), UINT64_C(0x0007FA0CD5EE5D70), UINT64_C(0x0002BC98A33DCE4E)}}, {{UINT64_C(0x000753D51E36094F), UINT64_C(0x00011309101DCED4), UINT64_C(0x0000279505A1BAA2), UINT64_C(0x0006AEDE7A85AAE1), UINT64_C(0x000037AE84B6FE0A)}, {UINT64_C(0x0007739A4BFF6011), UINT64_C(0x000710D32F9567E8), UINT64_C(0x00040FE60EC00E34), UINT64_C(0x0000E77282D60FC2), UINT64_C(0x00012AF7C9905886)}, {UINT64_C(0x00010065259DAB06), UINT64_C(0x00002C1EC736FA56), UINT64_C(0x00041E7AC35292DC), UINT64_C(0x0000DDF0A6E3C65E), UINT64_C(0x00060CA6ABEF89FE)}}, {{UINT64_C(0x000C71B130D21942), UINT64_C(0x000650CBCD04857A), UINT64_C(0x00003A21705F79DE), UINT64_C(0x000441B7586ABB4B), UINT64_C(0x00044FFAB824B35E)}, {UINT64_C(0x0004FC14956E331F), UINT64_C(0x0002DF101A872454), UINT64_C(0x0001ACAC797EC78F), UINT64_C(0x0006FBE58D90CBB2), UINT64_C(0x0002083D4F2ED3D2)}, {UINT64_C(0x0002485E01980997), UINT64_C(0x000679010A4C7EE8), UINT64_C(0x00057361E75E0DF0), UINT64_C(0x0000548EBB7B0F63), UINT64_C(0x0000ADFA873F0ADC)}}, {{UINT64_C(0x000CEBAD25601C16), UINT64_C(0x00040CF38C58593E), UINT64_C(0x000548AC165085FC), UINT64_C(0x00000EC8D84A3956), UINT64_C(0x0006990D99B70E27)}, {UINT64_C(0x0002D6F54C35029C), UINT64_C(0x000194EECC0B8D55), UINT64_C(0x000599D2C75B688B), UINT64_C(0x000646453AC905E4), UINT64_C(0x0003DAEFFC1F7F77)}, {UINT64_C(0x0002FB3C155DFF91), UINT64_C(0x000666676455E39E), UINT64_C(0x000094B59579A3D7), UINT64_C(0x000131163E64B240), UINT64_C(0x0002BE896BAC1C14)}}, {{UINT64_C(0x0005372C822B631C), UINT64_C(0x0002C792A5D553F9), UINT64_C(0x00079A45AF14B5DB), UINT64_C(0x0005728AC606211C), UINT64_C(0x00059EF170252365)}, {UINT64_C(0x0000B216D3837D4E), UINT64_C(0x00049608E9DA7038), UINT64_C(0x00071C88398BEB38), UINT64_C(0x0001D39322C696DB), UINT64_C(0x0003270FEE25BE63)}, {UINT64_C(0x000F312227C8BD36), UINT64_C(0x0006EA625A52C28E), UINT64_C(0x00022DD277705C08), UINT64_C(0x0002D9A720B669E6), UINT64_C(0x00075102EDD2BA08)}}, {{UINT64_C(0x000CA132F90FE15B), UINT64_C(0x0007F9D119339816), UINT64_C(0x0006E56945E2B2A2), UINT64_C(0x0004514FE66AAADD), UINT64_C(0x00017AF1BC738FB9)}, {UINT64_C(0x0004346FAA16001E), UINT64_C(0x0001C1A89BB2AE60), UINT64_C(0x0001399CEC955395), UINT64_C(0x0003C0BBC0A6E99B), UINT64_C(0x00064D29AE483CCC)}, {UINT64_C(0x00040ACC3E0904B8), UINT64_C(0x00036DC23E8EE05E), UINT64_C(0x00066D427ADA3210), UINT64_C(0x00011F6E098F35F7), UINT64_C(0x00039151730A7BBA)}}, {{UINT64_C(0x00091ADA9145C93C), UINT64_C(0x00024194BA72DF78), UINT64_C(0x0003678D46D1C849), UINT64_C(0x000389372773D592), UINT64_C(0x00018C36FC253B2C)}, {UINT64_C(0x0005F6DDFD39F849), UINT64_C(0x0002633241A26C74), UINT64_C(0x000474A8B991D2BE), UINT64_C(0x0002CE50E2C4FE43), UINT64_C(0x000293E1C206D813)}, {UINT64_C(0x000F47D948A0883B), UINT64_C(0x000489F014B14B93), UINT64_C(0x0006D2AC8A2E3258), UINT64_C(0x0000CE310A0B2212), UINT64_C(0x0001253D16B5D0A2)}}, }, { {{UINT64_C(0x0001FC6BA4B27045), UINT64_C(0x00038F66C4585DD0), UINT64_C(0x00044510A543BBBA), UINT64_C(0x0001FFA25BB30E5E), UINT64_C(0x0002D3C1BD993CDE)}, {UINT64_C(0x000A2BB5F0A56D1F), UINT64_C(0x00026C278F22FDAC), UINT64_C(0x0000972239E1602A), UINT64_C(0x0006D636075CCB7A), UINT64_C(0x000255FEE96DB6F1)}, {UINT64_C(0x000D53D8C21D2AC3), UINT64_C(0x00073D8BC6569D5D), UINT64_C(0x000611171F31EC1E), UINT64_C(0x0007BF39C3FB085A), UINT64_C(0x00078CDD196C484E)}}, {{UINT64_C(0x0007AA3E7172E704), UINT64_C(0x00041E6CDC54B308), UINT64_C(0x0000B05762F3EFE5), UINT64_C(0x000444BD48FEF0C8), UINT64_C(0x0004428AB2D08617)}, {UINT64_C(0x000BDD2F9B4370E5), UINT64_C(0x0002F2670834C4F7), UINT64_C(0x0003BB1958A52A76), UINT64_C(0x00047CD537305248), UINT64_C(0x0001EFD0574CCBFF)}, {UINT64_C(0x000AEB5EF88DCA62), UINT64_C(0x000117EAA2E61A6B), UINT64_C(0x0004FCBB9750C8D0), UINT64_C(0x000495792CD27339), UINT64_C(0x0001B23C157916F6)}}, {{UINT64_C(0x0007891B674E71F0), UINT64_C(0x0007C4F6FCAD4468), UINT64_C(0x000476D6C5509A66), UINT64_C(0x0005F5A8B9CC77CD), UINT64_C(0x0004199343D1FC80)}, {UINT64_C(0x0003F18F3D8F0055), UINT64_C(0x000752C7D8BA3224), UINT64_C(0x000436F715E78E8E), UINT64_C(0x0001036795BF501D), UINT64_C(0x000236B8319E54B6)}, {UINT64_C(0x0002E41C100EDD83), UINT64_C(0x00058577EB7BBD8B), UINT64_C(0x0001F51303AAC160), UINT64_C(0x0005DC3CA305853E), UINT64_C(0x00072B9415F81A28)}}, {{UINT64_C(0x0005265E75BE3284), UINT64_C(0x0007167FAA26A5DF), UINT64_C(0x000123D1A2FDB52D), UINT64_C(0x00061BBE43A46D84), UINT64_C(0x000261B8D88701BD)}, {UINT64_C(0x000C87F87048B464), UINT64_C(0x00053BAEC34F322B), UINT64_C(0x0004DC58AFE19A7D), UINT64_C(0x000090CE2820F2C2), UINT64_C(0x0006C48AC43ECD33)}, {UINT64_C(0x000B402CCF1F1A30), UINT64_C(0x000429DB8F417641), UINT64_C(0x000249FD2DC1A2A4), UINT64_C(0x00049F1F51516171), UINT64_C(0x00065C94E325A506)}}, {{UINT64_C(0x0005D0EAFD053602), UINT64_C(0x0000B2EB6445EFF1), UINT64_C(0x0003EBD9F65805D5), UINT64_C(0x0003CA4B8EBF6A36), UINT64_C(0x00078BFD685BE998)}, {UINT64_C(0x000F64B891DDF860), UINT64_C(0x000529576B60556C), UINT64_C(0x0001B37FD3E24669), UINT64_C(0x0000033818EEF5C8), UINT64_C(0x0002B11EBF7E5937)}, {UINT64_C(0x0003152B742C702B), UINT64_C(0x0006632B1ECD6036), UINT64_C(0x0007923AFB88728F), UINT64_C(0x0006244DA1C3448B), UINT64_C(0x0000AD2FB0196EC3)}}, {{UINT64_C(0x000AD563EB3B07A3), UINT64_C(0x0001213A17B47AC3), UINT64_C(0x00053EC21980E6FC), UINT64_C(0x0002C4ACC165507F), UINT64_C(0x0007A622F28DA7BE)}, {UINT64_C(0x000C8F45E5659E8D), UINT64_C(0x0002A78FCB23CE95), UINT64_C(0x00024430FD4597D0), UINT64_C(0x000347620F5EDF93), UINT64_C(0x0003DC647EA1BA77)}, {UINT64_C(0x0007F8F8703A7DCA), UINT64_C(0x000795C87DAACF66), UINT64_C(0x00007534BD87B9EE), UINT64_C(0x0005099B2C521F78), UINT64_C(0x000273750C74E81D)}}, {{UINT64_C(0x00024EDC3D8ABF8E), UINT64_C(0x000300DFA97BDDE9), UINT64_C(0x000446C6F830946C), UINT64_C(0x00068F06F4ACDD60), UINT64_C(0x00018F286BEDB687)}, {UINT64_C(0x0003287C7040CAF8), UINT64_C(0x0005A30953D9648B), UINT64_C(0x0004C0CED1BF2F16), UINT64_C(0x0005022BA173833A), UINT64_C(0x000471670E5DD4C8)}, {UINT64_C(0x000575C7D920A1FA), UINT64_C(0x000028011ACAA137), UINT64_C(0x000267F433A9BB5D), UINT64_C(0x0000C0E4B91042B4), UINT64_C(0x0001740F314FE330)}}, {{UINT64_C(0x0009146BFD90884A), UINT64_C(0x00024724AE1312FD), UINT64_C(0x0000CC37AB3544BD), UINT64_C(0x0002E4F30E1D877C), UINT64_C(0x00078F98059C7CDB)}, {UINT64_C(0x00080EF557A2B367), UINT64_C(0x00034596D52275E4), UINT64_C(0x0003D07B43BC2723), UINT64_C(0x000485142DA02EA6), UINT64_C(0x00052ED77068B052)}, {UINT64_C(0x00050C37F84E0B1E), UINT64_C(0x0007F90DAF676333), UINT64_C(0x000014A034E40FE3), UINT64_C(0x0001A1CCC5B06FA4), UINT64_C(0x0002B57B6AAF5AFB)}}, {{UINT64_C(0x0005A1EC835F93D9), UINT64_C(0x00027C73660ABD19), UINT64_C(0x00051ED4ACB98418), UINT64_C(0x0005934D9A8C4481), UINT64_C(0x000056DCE5E599B7)}, {UINT64_C(0x000D82F2893E91E9), UINT64_C(0x00007DB2ED2F5FC8), UINT64_C(0x000470BFB2A14A2D), UINT64_C(0x000243357800B12B), UINT64_C(0x0001586B880D973F)}, {UINT64_C(0x0002894A1AEE30F0), UINT64_C(0x00000A56EEFC3625), UINT64_C(0x000328B708D399DB), UINT64_C(0x0001E0245E856F01), UINT64_C(0x000331A120A8FA38)}}, {{UINT64_C(0x0000B01B89AE8C48), UINT64_C(0x000160C2BE55859D), UINT64_C(0x00032ED748BC62AF), UINT64_C(0x0003A96EF5B049CB), UINT64_C(0x0007D5C6C7C53881)}, {UINT64_C(0x000F575F2E610488), UINT64_C(0x00050DD2D252D63F), UINT64_C(0x00032900A6CAB78A), UINT64_C(0x00052436AFB000AE), UINT64_C(0x0001058C522E70B4)}, {UINT64_C(0x000C32E693EA545B), UINT64_C(0x000363FF953257C4), UINT64_C(0x0006BB224E619CF6), UINT64_C(0x0004725D9B6CC315), UINT64_C(0x00028D022032739E)}}, {{UINT64_C(0x000130FFBDDA7B5B), UINT64_C(0x00008B75F47AA474), UINT64_C(0x000704583AA71B9F), UINT64_C(0x000003F123BF1718), UINT64_C(0x0000C86888DA8826)}, {UINT64_C(0x0001E99131EE0CC8), UINT64_C(0x00015BD0E81C213F), UINT64_C(0x00060DB057C2D8C7), UINT64_C(0x0003931F8CDBD796), UINT64_C(0x0000B711D1643ABA)}, {UINT64_C(0x000CAE2E3BD0339C), UINT64_C(0x000535FE10F2B9B9), UINT64_C(0x0003BAC64D32897B), UINT64_C(0x0002E04FBE091647), UINT64_C(0x00069D6BFB6020F3)}}, {{UINT64_C(0x0003BF20FBF44C75), UINT64_C(0x0003DFDF8AA48E71), UINT64_C(0x000755E830F9348A), UINT64_C(0x0004DCF2FBC753A0), UINT64_C(0x000563C950DED5E7)}, {UINT64_C(0x00095173064904B2), UINT64_C(0x0001AD16621A4F26), UINT64_C(0x0000190EBCA98F19), UINT64_C(0x00025C88E57E353D), UINT64_C(0x0007235C78DDE09A)}, {UINT64_C(0x000AB2477B99C193), UINT64_C(0x000787D92E572642), UINT64_C(0x000254AE25CB36B6), UINT64_C(0x00014FF7F61A68BA), UINT64_C(0x0002AE23C86DA540)}}, {{UINT64_C(0x000AA69FC65B55EE), UINT64_C(0x000602BFEB958D5E), UINT64_C(0x00041B4D60AAC3E7), UINT64_C(0x0006E4587652A12A), UINT64_C(0x000538D39DB42EA9)}, {UINT64_C(0x000A78E9FAE803AA), UINT64_C(0x00050F1F50C82CCF), UINT64_C(0x0000690C7B716417), UINT64_C(0x00009E9B33D5B1F8), UINT64_C(0x00046AD0D9B59A8E)}, {UINT64_C(0x000E0FB21CA97546), UINT64_C(0x000796398B48AA4B), UINT64_C(0x0005BFE2E571682E), UINT64_C(0x00079B204C96268F), UINT64_C(0x00036514FC4F006A)}}, {{UINT64_C(0x000AB6ADDA89E077), UINT64_C(0x000456219E30B23F), UINT64_C(0x00073DF2B5B296A7), UINT64_C(0x0007416CF096B608), UINT64_C(0x000506FAF22F148F)}, {UINT64_C(0x0004D01231B41F08), UINT64_C(0x00004E0DE454C9D9), UINT64_C(0x0001C359EA53295F), UINT64_C(0x0005C16FFE73D620), UINT64_C(0x0001FD9A40888D64)}, {UINT64_C(0x00082DD110EAA0DA), UINT64_C(0x0002885D3B8FB45F), UINT64_C(0x0007AAD0C23075A0), UINT64_C(0x000013BF01DF39A9), UINT64_C(0x000025FFC049C3BB)}}, {{UINT64_C(0x000188B1DC7CFBB3), UINT64_C(0x00073B99A1AD10BA), UINT64_C(0x000799A4C5F58A95), UINT64_C(0x0005036A5F90050D), UINT64_C(0x0007A61558C47079)}, {UINT64_C(0x0008E5B50FC0616E), UINT64_C(0x0006BE2B98B6BAB1), UINT64_C(0x000214A72D8A4D1E), UINT64_C(0x000761E21C815E1A), UINT64_C(0x0003D750B6148769)}, {UINT64_C(0x000A9F7E8D06E7C1), UINT64_C(0x000028F98763EEF5), UINT64_C(0x00079EA1FD1DE978), UINT64_C(0x00021613CA3BB40B), UINT64_C(0x00070E4362C5401C)}}, {{UINT64_C(0x0009D08B1089B486), UINT64_C(0x000165F2FBD68266), UINT64_C(0x00035E25AA132009), UINT64_C(0x00044F5F944F1D77), UINT64_C(0x00025F71B14DA654)}, {UINT64_C(0x000BD353769CE1F9), UINT64_C(0x0006FA3F3DDDC54C), UINT64_C(0x0002B84C2EC34B40), UINT64_C(0x0002BC5399680FE7), UINT64_C(0x00077DF80D7D51A4)}, {UINT64_C(0x0004E2691B0328F3), UINT64_C(0x00050F4537961493), UINT64_C(0x00044E2C41C84DCA), UINT64_C(0x00052B780EFDCD69), UINT64_C(0x0005376F2A050E19)}}, }, { {{UINT64_C(0x000DA03985F38262), UINT64_C(0x00037D5F62914A3C), UINT64_C(0x000793B68F7811A9), UINT64_C(0x00032B90BCD39CE3), UINT64_C(0x00075AA44FE7E19C)}, {UINT64_C(0x000F05AB91A2B12A), UINT64_C(0x00059AF4F8982C00), UINT64_C(0x00048CCE588AE51A), UINT64_C(0x00049E4C670BBE65), UINT64_C(0x0006B3D82691A651)}, {UINT64_C(0x0008F5698465745B), UINT64_C(0x00075BE3EB74331D), UINT64_C(0x000737D69788EE86), UINT64_C(0x00062141377DCE86), UINT64_C(0x0006EFBEF11283CC)}}, {{UINT64_C(0x000FB2D42C8285AF), UINT64_C(0x0006FD40664A5490), UINT64_C(0x00057F0694D97426), UINT64_C(0x0002A7A28B3356DA), UINT64_C(0x00028920886AF6EC)}, {UINT64_C(0x000A8C24C0BF2760), UINT64_C(0x00068C3EC242BF3A), UINT64_C(0x0000CE0D0E1B7F97), UINT64_C(0x00061C58FABECF34), UINT64_C(0x00004CA319E801FD)}, {UINT64_C(0x000325DE46C5736B), UINT64_C(0x000468915384C263), UINT64_C(0x0006347A5799363C), UINT64_C(0x0007210BB1344417), UINT64_C(0x00011E398C2404CC)}}, {{UINT64_C(0x0006351562580ED8), UINT64_C(0x0006220AA1C9D62B), UINT64_C(0x0001CDF640634049), UINT64_C(0x0002FA7088B01B0A), UINT64_C(0x00019ACCA28277EE)}, {UINT64_C(0x000C65B688EBF493), UINT64_C(0x0005B03149C63AE5), UINT64_C(0x0006AFA8197C4FD1), UINT64_C(0x0002D0DA5C748E78), UINT64_C(0x000662C002D4D15F)}, {UINT64_C(0x0001118B8CBBB7E7), UINT64_C(0x0004CBAB82FD2BF5), UINT64_C(0x0002348B0CE469A5), UINT64_C(0x00023EB3398A797E), UINT64_C(0x0004E228589713E3)}}, {{UINT64_C(0x0000B4E4D027C85C), UINT64_C(0x0000D803053DA772), UINT64_C(0x00065984BB60A337), UINT64_C(0x0007DC2376F7272A), UINT64_C(0x0000E9430E355BA4)}, {UINT64_C(0x000A8E389D48606F), UINT64_C(0x00021F690AA2DBC8), UINT64_C(0x000142274ABC9F41), UINT64_C(0x00072BF593710713), UINT64_C(0x0002FD7F4AE2EE22)}, {UINT64_C(0x000BF1C20DDD2691), UINT64_C(0x0005411630C2A271), UINT64_C(0x0002D6C2990BAF6C), UINT64_C(0x00016E01E690E20C), UINT64_C(0x0000E8F8FFA954EC)}}, {{UINT64_C(0x0005A3AB6DAFDFD3), UINT64_C(0x0000D9D486BDD09A), UINT64_C(0x0002D2E51B7C9711), UINT64_C(0x00017CE407134280), UINT64_C(0x0003AD3997FA1672)}, {UINT64_C(0x0003D8F172453802), UINT64_C(0x0002317FA3185EC2), UINT64_C(0x0000BA91852E2031), UINT64_C(0x0005EC464B3ED108), UINT64_C(0x00057C6D8CF0E0FD)}, {UINT64_C(0x0008CA2766DB4A5B), UINT64_C(0x00073D443B130A20), UINT64_C(0x00058BF472C3BA39), UINT64_C(0x0006F5CC0907C053), UINT64_C(0x0003FC5C6F14BD87)}}, {{UINT64_C(0x0004B65645E73CF6), UINT64_C(0x0007C5AB1C053774), UINT64_C(0x0005018E4FF1FC18), UINT64_C(0x000769511D97D00F), UINT64_C(0x0006AD6BD6EAA9E9)}, {UINT64_C(0x00046576871857E4), UINT64_C(0x000215AA0839B591), UINT64_C(0x0004E1CAA9F6A2CA), UINT64_C(0x0007AB0F33E726C5), UINT64_C(0x00067F4BE171AA28)}, {UINT64_C(0x0006531996604B7F), UINT64_C(0x000453BF42EC79D2), UINT64_C(0x00032113012CCEA4), UINT64_C(0x00006D0B5464300F), UINT64_C(0x0002176B1E5D6D50)}}, {{UINT64_C(0x0001D3C100DC72D5), UINT64_C(0x0003654CB2834C97), UINT64_C(0x0005E965AC7DA69D), UINT64_C(0x00078DC0DD9AE1DD), UINT64_C(0x00019E21FECCAAF3)}, {UINT64_C(0x00013C3FDF2B1672), UINT64_C(0x000619ED60AD922A), UINT64_C(0x0006A134A3138156), UINT64_C(0x000074D7A0EB94F4), UINT64_C(0x000655B9265AD61E)}, {UINT64_C(0x00091D8E2767E0B1), UINT64_C(0x00065AEFAC257813), UINT64_C(0x00038076D1470BE1), UINT64_C(0x0003C981EA0EB22B), UINT64_C(0x00015A7A2D75B203)}}, {{UINT64_C(0x000CC309EA9DA550), UINT64_C(0x000167109F6B7EEA), UINT64_C(0x00036256E39C62A5), UINT64_C(0x00023FE04A59A8D0), UINT64_C(0x00048F3DCFC704E4)}, {UINT64_C(0x000DD13D87BC3FD8), UINT64_C(0x0001E1039D0C27A5), UINT64_C(0x00013884321DFE6C), UINT64_C(0x00018DF5EB967D7E), UINT64_C(0x00027626CDA767FD)}, {UINT64_C(0x00081A4C254FE9AA), UINT64_C(0x00039710CABEFE25), UINT64_C(0x0001FE4ED0D3AF13), UINT64_C(0x00036B4C87AE2C9F), UINT64_C(0x00011248B666F136)}}, {{UINT64_C(0x000E797C4CCA0B46), UINT64_C(0x000549315E592B39), UINT64_C(0x000446B1DF8247A1), UINT64_C(0x00030ED36C5BB7F3), UINT64_C(0x0002AA80BB30E10E)}, {UINT64_C(0x000987E78A6334CD), UINT64_C(0x00021A51601C5BC5), UINT64_C(0x00056CB555352F37), UINT64_C(0x000225D060DB2429), UINT64_C(0x000385DB17BD6237)}, {UINT64_C(0x0002ED3E680A5E84), UINT64_C(0x0005712851DFAB33), UINT64_C(0x00039A12254B9A45), UINT64_C(0x000216D42F43EEBB), UINT64_C(0x000357331598DA83)}}, {{UINT64_C(0x000F7C1D3279D8A5), UINT64_C(0x00043F72163137B9), UINT64_C(0x00042C3FE876167F), UINT64_C(0x0003B0E73C83522A), UINT64_C(0x0001DB409981C582)}, {UINT64_C(0x000122CD3118D65B), UINT64_C(0x00071763F291C87A), UINT64_C(0x000561465C8B3331), UINT64_C(0x0004944F4C61C7FD), UINT64_C(0x0002AAC9443A36DB)}, {UINT64_C(0x0004D4FA4218C372), UINT64_C(0x00076C45E03C77EB), UINT64_C(0x000072FB97E90D33), UINT64_C(0x0005082CF2079905), UINT64_C(0x0002FE26BFD54FFA)}}, {{UINT64_C(0x0007D19A42E4631A), UINT64_C(0x0006571B981A6AEC), UINT64_C(0x0004D393AE74429A), UINT64_C(0x000446A87D160168), UINT64_C(0x0003AF53BFC0F685)}, {UINT64_C(0x0002D55D97B6EB19), UINT64_C(0x00039E6461F719F3), UINT64_C(0x000190259D2C913D), UINT64_C(0x0003C976B6FBF37A), UINT64_C(0x00019F876AD4BC35)}, {UINT64_C(0x000EDF4304B4688B), UINT64_C(0x0000C939FCAC59CD), UINT64_C(0x00056BFC00BE589D), UINT64_C(0x0004B4C590A12AC7), UINT64_C(0x0007EF9566506AD0)}}, {{UINT64_C(0x000A585FE0E0C2E0), UINT64_C(0x00018D0780A3AD5B), UINT64_C(0x0006DD4F15327657), UINT64_C(0x00009AB856FE2440), UINT64_C(0x000750F36E6E9B65)}, {UINT64_C(0x0008B6024E61BB41), UINT64_C(0x0006393F246B2AD3), UINT64_C(0x000446AF58B6CA59), UINT64_C(0x00000520765881CA), UINT64_C(0x00061089ABFD62AB)}, {UINT64_C(0x000633226585ECE4), UINT64_C(0x00076BF57CC213CB), UINT64_C(0x000484A01C226640), UINT64_C(0x00033C1F700F8FBA), UINT64_C(0x0000B0E1B3037271)}}, {{UINT64_C(0x00054E468A9EFE70), UINT64_C(0x000608519FBFBF2D), UINT64_C(0x0005333558A69061), UINT64_C(0x0004D0D77DF73B72), UINT64_C(0x0005963DB206A396)}, {UINT64_C(0x000394333A1E85F3), UINT64_C(0x000353C23C03493E), UINT64_C(0x0000C828A97CB1A5), UINT64_C(0x00078C43450120ED), UINT64_C(0x000555DF3569380F)}, {UINT64_C(0x00042EFA777C3D87), UINT64_C(0x0006535188CEB3F6), UINT64_C(0x000711F155E76C84), UINT64_C(0x0000E3BA9883F418), UINT64_C(0x00057A3C7F7ECCF3)}}, {{UINT64_C(0x000B073EF993682F), UINT64_C(0x00033F05FA3CCE30), UINT64_C(0x00068B17D4A39381), UINT64_C(0x0004A922A545C066), UINT64_C(0x0006F6DAE315DA70)}, {UINT64_C(0x00014D0E6682401A), UINT64_C(0x0007CCF46A4DD19B), UINT64_C(0x00075F65E59EC735), UINT64_C(0x0001444919609445), UINT64_C(0x00056DEA40CFB96B)}, {UINT64_C(0x00016AF62D5F1A62), UINT64_C(0x00031733B90868F3), UINT64_C(0x0006590B06472897), UINT64_C(0x00049790ACFA5796), UINT64_C(0x0003AB09B226B35A)}}, {{UINT64_C(0x000329065372355E), UINT64_C(0x0007AB688B6A2989), UINT64_C(0x00045AC32571E188), UINT64_C(0x0005840E91DC5D76), UINT64_C(0x0000A0DFC537909E)}, {UINT64_C(0x0005F472964EF0CE), UINT64_C(0x0003D2FA150C40C5), UINT64_C(0x0007CBF1211260FB), UINT64_C(0x0003709955BA6654), UINT64_C(0x000217DBDD3D5D0D)}, {UINT64_C(0x000A1158C12DB2A4), UINT64_C(0x0004C90A2B817CA8), UINT64_C(0x00061F4B5B3A38EC), UINT64_C(0x000380423D6EF40B), UINT64_C(0x00000B4B0EF2C8F0)}}, {{UINT64_C(0x00028D6E002BCA29), UINT64_C(0x0007A3997D7D546A), UINT64_C(0x0005D8C776975959), UINT64_C(0x0000317399D2025E), UINT64_C(0x000754B217E301A9)}, {UINT64_C(0x0002CDE1681E8828), UINT64_C(0x000380F9FC21B2AB), UINT64_C(0x00003AD0F0DC0117), UINT64_C(0x0003D01C67CEC59B), UINT64_C(0x00039049C45C39C8)}, {UINT64_C(0x0000CE99521AEEAB), UINT64_C(0x0003B4C67C5B669C), UINT64_C(0x0000E043A30EE5B7), UINT64_C(0x0003F0C4E94F62CF), UINT64_C(0x0001AB4F30E0A8F5)}}, }, { {{UINT64_C(0x000DC91F212AB480), UINT64_C(0x0005945E1877E8EC), UINT64_C(0x00013573E60D6704), UINT64_C(0x00069D9C4A961CA2), UINT64_C(0x0003DE09EC8A48AF)}, {UINT64_C(0x000E81E566BFFA33), UINT64_C(0x00033E06B06E4111), UINT64_C(0x0002D32A23297AFD), UINT64_C(0x0005F9BFCE126AC6), UINT64_C(0x0001FF61C1A88D8E)}, {UINT64_C(0x0008D3EC31CFC3EE), UINT64_C(0x000046D8793EAB63), UINT64_C(0x0000C143A50BCCDC), UINT64_C(0x0006EAB8519D9BAD), UINT64_C(0x00074830BD46D5B4)}}, {{UINT64_C(0x0000574A2032B148), UINT64_C(0x0004328CBA692C33), UINT64_C(0x000232F42D123335), UINT64_C(0x000181DEF8EAD0DD), UINT64_C(0x000451E2578C52D5)}, {UINT64_C(0x000695C6731F0527), UINT64_C(0x0005CD46B5C17880), UINT64_C(0x00015EAA924D0904), UINT64_C(0x00007F6FB72E84D0), UINT64_C(0x0000CEB928AFDBBD)}, {UINT64_C(0x0004D3626FF5B12C), UINT64_C(0x00051FE69CA7F94B), UINT64_C(0x000772203CEE99E4), UINT64_C(0x0005F1FAC7E8C081), UINT64_C(0x0003E578A1665444)}}, {{UINT64_C(0x000B298801B1FE77), UINT64_C(0x0002586B0CE008AC), UINT64_C(0x00045E778DC50E87), UINT64_C(0x0000FDCB5F3CC8F7), UINT64_C(0x00017C5D39EFC586)}, {UINT64_C(0x0002A41D8771BA87), UINT64_C(0x0004C8102431A7BA), UINT64_C(0x0000B390AB74C50C), UINT64_C(0x0002C546F7C05D4D), UINT64_C(0x0006AAD492B3116F)}, {UINT64_C(0x0008FF03C1367A73), UINT64_C(0x0002A4A748616572), UINT64_C(0x000605B500CB4A72), UINT64_C(0x0005C39BB9BB5B8B), UINT64_C(0x000569FE03A16B9F)}}, {{UINT64_C(0x000275341CBCADF6), UINT64_C(0x000430EFD84DCC71), UINT64_C(0x00022B997FAB00F0), UINT64_C(0x00030C5632CF0693), UINT64_C(0x0002A0826D840314)}, {UINT64_C(0x000C11CD5CF6EE57), UINT64_C(0x0001257E6308FBB1), UINT64_C(0x0002F7CE59284FB8), UINT64_C(0x00057DD9BDD3EF59), UINT64_C(0x0003452936337369)}, {UINT64_C(0x000530B11F6BDDA7), UINT64_C(0x0007A51865D93007), UINT64_C(0x00076B5BC60F0AC9), UINT64_C(0x000212F031E350EA), UINT64_C(0x000075AED0A2ADAE)}}, {{UINT64_C(0x000AD78B391BD2D5), UINT64_C(0x0003A11ABEA7FF04), UINT64_C(0x00046A25F0F350A4), UINT64_C(0x0001543CC7EF57AB), UINT64_C(0x00069223D8309EB4)}, {UINT64_C(0x000B33AD1F86A15A), UINT64_C(0x00036B112A03501B), UINT64_C(0x000344A2066D4EF2), UINT64_C(0x00055436BD4B9A9D), UINT64_C(0x00041A71A942A508)}, {UINT64_C(0x0006FF9618F443D0), UINT64_C(0x0000F3000CB2F1BA), UINT64_C(0x00022C2897DAADE0), UINT64_C(0x0004F604C596FCBC), UINT64_C(0x000585C83B55AFF4)}}, {{UINT64_C(0x00084B6AF7D110A1), UINT64_C(0x0001EFC9DBBC4234), UINT64_C(0x000796661C37007B), UINT64_C(0x00010DB07259FC43), UINT64_C(0x000202355E8495E8)}, {UINT64_C(0x000DA5E823077C6C), UINT64_C(0x0003C9503E1777C0), UINT64_C(0x0001A5E4F1DED645), UINT64_C(0x0000DE482043B271), UINT64_C(0x0004B4CCC6B33E65)}, {UINT64_C(0x00011797174CD365), UINT64_C(0x000242D89859CD09), UINT64_C(0x0000714A4593BD77), UINT64_C(0x00051B9197490AE5), UINT64_C(0x0006E6A726266AD0)}}, {{UINT64_C(0x0006163606CF5614), UINT64_C(0x0003B9BA82C96535), UINT64_C(0x000075E66F7CF6D4), UINT64_C(0x000411E3154EC181), UINT64_C(0x00029B40D6F2E74B)}, {UINT64_C(0x0005D2E429379A65), UINT64_C(0x00008B1A72434343), UINT64_C(0x00041E8D9808E74A), UINT64_C(0x0004F14CB75EB689), UINT64_C(0x0004F434008C1B41)}, {UINT64_C(0x00067B260BE03B58), UINT64_C(0x0001EEF4691ADD3A), UINT64_C(0x0002850460D0C4EE), UINT64_C(0x0005AFCC1FFDAA08), UINT64_C(0x0003AB9267B9F6DC)}}, {{UINT64_C(0x000B5389B777649D), UINT64_C(0x0001F24DBD666B73), UINT64_C(0x00036DFB5DE2A31F), UINT64_C(0x0005EB994849E227), UINT64_C(0x0004279FBFCC1BD4)}, {UINT64_C(0x000B7EA950A7028F), UINT64_C(0x000732F69E7CF7DE), UINT64_C(0x00066069E71F3D7B), UINT64_C(0x00028033D27359B1), UINT64_C(0x000183D3130F9EED)}, {UINT64_C(0x000D74EA5E42F626), UINT64_C(0x0004B6BC58EA9C64), UINT64_C(0x0003C2C8FEA82634), UINT64_C(0x0002CE04C5B571DD), UINT64_C(0x0001E397436718BF)}}, {{UINT64_C(0x000B7484714F9403), UINT64_C(0x0004FC7BF02108DB), UINT64_C(0x0003678FA400AD90), UINT64_C(0x00028EF7C8AC0FE1), UINT64_C(0x000504A42505BDEF)}, {UINT64_C(0x000A0A066ABF7FBB), UINT64_C(0x00072AEC8D4433CE), UINT64_C(0x0002A0384B583EC1), UINT64_C(0x0002AB91E995640C), UINT64_C(0x000169BC2751E588)}, {UINT64_C(0x0009EB12660357B5), UINT64_C(0x00077A9937FD5E5F), UINT64_C(0x00021FF5CE16F36C), UINT64_C(0x0001C906DF80DF41), UINT64_C(0x0000CC48BA3DF0EA)}}, {{UINT64_C(0x000E23A04EED9E35), UINT64_C(0x0004ADC00E39212A), UINT64_C(0x00017453A70FE352), UINT64_C(0x0006D407B1DB39B2), UINT64_C(0x0005D825F613189B)}, {UINT64_C(0x00040B93828FA640), UINT64_C(0x00017C0D3D748E6A), UINT64_C(0x0003E2BC36916CA3), UINT64_C(0x00026F60A9DD3D92), UINT64_C(0x0002CB47886C390F)}, {UINT64_C(0x0008E7468212D22E), UINT64_C(0x0005E3F127FB8644), UINT64_C(0x0006C85DFBC55D78), UINT64_C(0x0007DFDFC6C531F3), UINT64_C(0x000674E26E15BF6B)}}, {{UINT64_C(0x000742AB1CE45F49), UINT64_C(0x000352695906DAC7), UINT64_C(0x00067D9DD8206042), UINT64_C(0x0002A8F523687321), UINT64_C(0x000209C2CC3DF3F2)}, {UINT64_C(0x000582E07DACB336), UINT64_C(0x000659136B8B103E), UINT64_C(0x00075BFAC5E74BD0), UINT64_C(0x00030FA01037A173), UINT64_C(0x00027A6E9B54A029)}, {UINT64_C(0x00010636DC94228F), UINT64_C(0x000334F99AD2D208), UINT64_C(0x000210CE39BF48FB), UINT64_C(0x0005CE98A1D2F02D), UINT64_C(0x0007E987948C2C36)}}, {{UINT64_C(0x00060BD25865CC5A), UINT64_C(0x000717975E64B3FD), UINT64_C(0x000791116DD316E7), UINT64_C(0x000027FC70709E15), UINT64_C(0x000014CE5C4B9FED)}, {UINT64_C(0x000FCB5EE438E62F), UINT64_C(0x0003918BFDF256E1), UINT64_C(0x000122BF1C544888), UINT64_C(0x00014620D1E4D6BE), UINT64_C(0x00031786B5D1AA6E)}, {UINT64_C(0x000D8369134DE3F1), UINT64_C(0x000358E513D33827), UINT64_C(0x0001AD06806E9F25), UINT64_C(0x0007751294480EB8), UINT64_C(0x00070E23870117F1)}}, {{UINT64_C(0x00006F3BCD1B2F70), UINT64_C(0x0000FA5C78F50611), UINT64_C(0x000411C55245B3EE), UINT64_C(0x0004944F3F6FC1FB), UINT64_C(0x000044A8C001AA25)}, {UINT64_C(0x000D4183C7441852), UINT64_C(0x000055D95E60582E), UINT64_C(0x0007BCDE3E7457F2), UINT64_C(0x00008C8DB0B27127), UINT64_C(0x000151434B629450)}, {UINT64_C(0x000E723B7F1ECEB3), UINT64_C(0x0004AD5542379FD9), UINT64_C(0x0007AD503D0F9616), UINT64_C(0x0007C70002B01072), UINT64_C(0x00014758CEF08E44)}}, {{UINT64_C(0x000C404279D4475B), UINT64_C(0x00069FDFED5F482D), UINT64_C(0x0004DDA9A420B9DE), UINT64_C(0x000442DE4FB067AC), UINT64_C(0x00011575126C1A87)}, {UINT64_C(0x0000D4A13CE38DD3), UINT64_C(0x00055443D3A075FC), UINT64_C(0x0002D0CC46239CD5), UINT64_C(0x00037A0D9341BE9F), UINT64_C(0x0007D72576A16B0E)}, {UINT64_C(0x00018F1C0EA31782), UINT64_C(0x00017F5C99216478), UINT64_C(0x00070B5287151CE4), UINT64_C(0x00069D184D521E3F), UINT64_C(0x00050B904149AB2A)}}, {{UINT64_C(0x000B9757956238BE), UINT64_C(0x000719EF66129C48), UINT64_C(0x0003A4A2018A1497), UINT64_C(0x00060697B014C86D), UINT64_C(0x0004211842CFCBB6)}, {UINT64_C(0x00000FC466BA4129), UINT64_C(0x0005C2C02129FAE5), UINT64_C(0x0007CC7E722EDDB4), UINT64_C(0x000463EFB0DEA9BC), UINT64_C(0x0005CEAB5704312E)}, {UINT64_C(0x0003CB3EF741A489), UINT64_C(0x000447C22A9AC8F6), UINT64_C(0x00070DC1AC662C00), UINT64_C(0x000643FBD84746C4), UINT64_C(0x00047AC14BC4BE7F)}}, {{UINT64_C(0x0001F0ED4EAB4BF3), UINT64_C(0x0003BDBDE234EFD5), UINT64_C(0x0007F9817DB30238), UINT64_C(0x0005F1CA682E32C5), UINT64_C(0x0004EA29A4CB0AC2)}, {UINT64_C(0x000119149BBD8CE2), UINT64_C(0x00053B67849C8636), UINT64_C(0x0000EE5D57DDF5A8), UINT64_C(0x0004ACD87314DB39), UINT64_C(0x00050B40A053EECC)}, {UINT64_C(0x000A4EC0C58B1A27), UINT64_C(0x0004144223834F69), UINT64_C(0x00006C3A5FA7A66C), UINT64_C(0x0001E7C747C08629), UINT64_C(0x0006C75F05A9CE16)}}, }, { {{UINT64_C(0x000DA9D6805AB8BD), UINT64_C(0x000551D3DA5834BB), UINT64_C(0x00044E2A3C850244), UINT64_C(0x00003C161B738B16), UINT64_C(0x00016FA62C9D5E85)}, {UINT64_C(0x0002A0101ADD9A68), UINT64_C(0x00005F00A8B73A3E), UINT64_C(0x0002700C6352EA8B), UINT64_C(0x00058F72766D9CF5), UINT64_C(0x0000786CDD193DF0)}, {UINT64_C(0x0008EF307292DAA3), UINT64_C(0x00078A0B85552DDA), UINT64_C(0x0002B5E21BAB14CA), UINT64_C(0x00042FBE2B9E130A), UINT64_C(0x0006A1FF64B8DFE0)}}, {{UINT64_C(0x000C37A44368992F), UINT64_C(0x000503AD37567295), UINT64_C(0x00022D6E783EB997), UINT64_C(0x00073209A3FE24D5), UINT64_C(0x00061BEA701A085E)}, {UINT64_C(0x000F79A9906695E1), UINT64_C(0x0006563AA33BECCA), UINT64_C(0x0006D9C258571274), UINT64_C(0x0002082E0EFF1CF3), UINT64_C(0x00006858AC5958CD)}, {UINT64_C(0x00073B5DF922B953), UINT64_C(0x0007D833BB16576F), UINT64_C(0x0002D7E0952EDC43), UINT64_C(0x0004C40B62DE9061), UINT64_C(0x0006802A03BBC4A8)}}, {{UINT64_C(0x000AA4FF9CD029FB), UINT64_C(0x0006A8F58A61B495), UINT64_C(0x00076DE5AEDD2889), UINT64_C(0x000418E79FA28A81), UINT64_C(0x0004AC6187BA7E86)}, {UINT64_C(0x000BB424077E0F78), UINT64_C(0x0006BE304793DFB9), UINT64_C(0x0001D1A8E8B74E8C), UINT64_C(0x000400EE04CA634E), UINT64_C(0x0000D23EE5F7A76A)}, {UINT64_C(0x000E8C82769B883D), UINT64_C(0x00061FF0A44B7C0C), UINT64_C(0x00071C3F9C0C1C14), UINT64_C(0x0001A72BC400F4FB), UINT64_C(0x000063C977E0C2A2)}}, {{UINT64_C(0x000B7EA553156CDE), UINT64_C(0x0004F77ED1DA0116), UINT64_C(0x0005313D6AB54554), UINT64_C(0x00068205E8633D72), UINT64_C(0x0004C0F6F5D7AA5B)}, {UINT64_C(0x0002AC03322F3ABE), UINT64_C(0x00013B9DB1E063DB), UINT64_C(0x0001653067E1D575), UINT64_C(0x00068FA0726EBED0), UINT64_C(0x00056D9BF5F7ACB5)}, {UINT64_C(0x0008092305F9E607), UINT64_C(0x00050ADE9DDED289), UINT64_C(0x000677C866291C9D), UINT64_C(0x0000A00D6AD82313), UINT64_C(0x000204C6129E7A63)}}, {{UINT64_C(0x000CC52FB8AA29BE), UINT64_C(0x00001FD5EBA86F95), UINT64_C(0x0003EDEE7EE1584C), UINT64_C(0x0007A98D872F3541), UINT64_C(0x00041BB59C74740D)}, {UINT64_C(0x000B91A314979A22), UINT64_C(0x000445CC55FA6E68), UINT64_C(0x00029A9728593F50), UINT64_C(0x0003D453E9BB2BF4), UINT64_C(0x000458E9C150C319)}, {UINT64_C(0x0008B902F4166F58), UINT64_C(0x00008BF4504AEFA7), UINT64_C(0x000507F7245632D2), UINT64_C(0x00046F4236C007FE), UINT64_C(0x0005F8B80AB194EF)}}, {{UINT64_C(0x000E0E279B58D515), UINT64_C(0x000494C3FDFB0D3E), UINT64_C(0x0006ADD516425B77), UINT64_C(0x0000C99F3F472FC4), UINT64_C(0x00023C04A4713378)}, {UINT64_C(0x00033C225C70B892), UINT64_C(0x0005DEF1B82B20A8), UINT64_C(0x00062D4704CA33EF), UINT64_C(0x00001505BB87DFBE), UINT64_C(0x00018D6306B777E3)}, {UINT64_C(0x000A6436A9F762A4), UINT64_C(0x000102ABB9E7477D), UINT64_C(0x00004BD6FA6C8FD0), UINT64_C(0x0002E4FAD22E39A3), UINT64_C(0x0007D2D079A6B2DA)}}, {{UINT64_C(0x000B537BD4E0A6B1), UINT64_C(0x00064415199F9972), UINT64_C(0x0002D496FA892827), UINT64_C(0x00029834D9583EE0), UINT64_C(0x0001F325BFC1AEE2)}, {UINT64_C(0x000BE9617256C790), UINT64_C(0x0002301EF1F61C9F), UINT64_C(0x0002A218C8615200), UINT64_C(0x00060780EED8C6E7), UINT64_C(0x0004A46B99106694)}, {UINT64_C(0x00037B99B0CAB13C), UINT64_C(0x00078242AB738B41), UINT64_C(0x00018258BBD69E1C), UINT64_C(0x00043D3E9A166688), UINT64_C(0x00055321313F52D3)}}, {{UINT64_C(0x00067501A6250F6D), UINT64_C(0x000051135CC1DB41), UINT64_C(0x0005B70CAFF3B24D), UINT64_C(0x0007AF6469DAB79A), UINT64_C(0x0005A486101FF730)}, {UINT64_C(0x000B81D6FB3B7613), UINT64_C(0x000705F8371DE858), UINT64_C(0x0004616EECCC6DE2), UINT64_C(0x0003B624C3D98F88), UINT64_C(0x0002580784E014F7)}, {UINT64_C(0x0003C6B7855856C3), UINT64_C(0x0002ACC5BCB17705), UINT64_C(0x0004E8DA7BC00D1D), UINT64_C(0x0006A7AF33BBD40A), UINT64_C(0x0004CA608C42E191)}}, {{UINT64_C(0x00014957F896B8DD), UINT64_C(0x0002EE29ED7F94C7), UINT64_C(0x00006C535FD580D1), UINT64_C(0x0007EE5C2C854B58), UINT64_C(0x000390B6176CC0A5)}, {UINT64_C(0x000D8E851115F82F), UINT64_C(0x00057712C2473469), UINT64_C(0x0005FED753D7DE49), UINT64_C(0x000100E99106EB96), UINT64_C(0x00032A5894C01232)}, {UINT64_C(0x0003F3BD2CBCD3E4), UINT64_C(0x00051B2182A69BC1), UINT64_C(0x00047F72BDF9D1E5), UINT64_C(0x0004386BB2531556), UINT64_C(0x0006251703B0886A)}}, {{UINT64_C(0x000DA5B8DDCC32C8), UINT64_C(0x0004B6E439859BAC), UINT64_C(0x000565788B32A991), UINT64_C(0x0007DA2C259D0EFC), UINT64_C(0x00026E2BCA2F2403)}, {UINT64_C(0x00036BD2B233B8DF), UINT64_C(0x000025EC957D6035), UINT64_C(0x000421C4260564F0), UINT64_C(0x00024C08F5533B05), UINT64_C(0x0004195603852EB3)}, {UINT64_C(0x0007B58166F4C3F1), UINT64_C(0x000262CCAD523D27), UINT64_C(0x0002167831F73FA9), UINT64_C(0x0002330A70233315), UINT64_C(0x0001E997E60115B3)}}, {{UINT64_C(0x000B11A8A180A2DD), UINT64_C(0x000740DE93A3B1BB), UINT64_C(0x0001A75730E8D6F7), UINT64_C(0x0002787677BCD20B), UINT64_C(0x0002C62508D0E0E3)}, {UINT64_C(0x000193FF85DC4853), UINT64_C(0x0006FF8B716F7C95), UINT64_C(0x0005695A400F15D0), UINT64_C(0x0006FCEA3FD445A5), UINT64_C(0x0006827935BB527C)}, {UINT64_C(0x000E756880792D5C), UINT64_C(0x00017C4CBFDCB6F6), UINT64_C(0x0003621A1F5AD47B), UINT64_C(0x00008ACFEC1E2F0B), UINT64_C(0x000680EE7BD4FDC9)}}, {{UINT64_C(0x000B22617017AD54), UINT64_C(0x0006D79A05652478), UINT64_C(0x00078436BB1A4FC2), UINT64_C(0x000588C3017ACA81), UINT64_C(0x000721CFE104D7FC)}, {UINT64_C(0x00058F6241221394), UINT64_C(0x0003B5CC42F98968), UINT64_C(0x0005B8C26DF7368C), UINT64_C(0x000258033A96E20A), UINT64_C(0x0006CDFD92327819)}, {UINT64_C(0x000D5F316E441B95), UINT64_C(0x0007262AFF6C2AD0), UINT64_C(0x000615C867B8A858), UINT64_C(0x0002304A98935CF1), UINT64_C(0x0001C346C9D50FBE)}}, {{UINT64_C(0x000B8D64E6633E8B), UINT64_C(0x0004415800321D6A), UINT64_C(0x000112873DB9D153), UINT64_C(0x0007454E53F98187), UINT64_C(0x0006D9C7B5E085F8)}, {UINT64_C(0x0008054C9FC0114A), UINT64_C(0x00060A1D43700A51), UINT64_C(0x0007F536F76DCA7B), UINT64_C(0x00059A4ADEA37323), UINT64_C(0x0006F027E38F2362)}, {UINT64_C(0x000304C8AA59BE30), UINT64_C(0x0007FE5A68FCF77D), UINT64_C(0x0006BDE087AB92A0), UINT64_C(0x000025E8F669E08C), UINT64_C(0x00018E93C6B2C356)}}, {{UINT64_C(0x0004A344E63D4ACA), UINT64_C(0x0007C308BC5ED73E), UINT64_C(0x0003A32DEAF4E9FA), UINT64_C(0x0004472F4E854593), UINT64_C(0x000047D341D3DDFD)}, {UINT64_C(0x0007532D39E9B3BB), UINT64_C(0x000217DF5A0A7433), UINT64_C(0x00074975495E1565), UINT64_C(0x0002821D2EEF04CF), UINT64_C(0x00054FC7406A916F)}, {UINT64_C(0x000913F345C8BBFF), UINT64_C(0x0006989D1646C723), UINT64_C(0x00027764F8A16ACB), UINT64_C(0x000008C125AF8D5F), UINT64_C(0x0006800FE91196F4)}}, {{UINT64_C(0x00082C098B00AA79), UINT64_C(0x000770B1C497ACD1), UINT64_C(0x000344FD551B8CCE), UINT64_C(0x00023F33BE497F56), UINT64_C(0x0002EAF897898B65)}, {UINT64_C(0x0007F51FA8DC697B), UINT64_C(0x00074CE3069BBE12), UINT64_C(0x0004C428EA0209F5), UINT64_C(0x00002F2D8D0BB62C), UINT64_C(0x00004E256AFA4C76)}, {UINT64_C(0x00001D22BDE52262), UINT64_C(0x0006DE17872B5135), UINT64_C(0x00066D4BFED89F63), UINT64_C(0x000389FDDE527F9D), UINT64_C(0x0000EB2F6E615478)}}, {{UINT64_C(0x000C58D612641095), UINT64_C(0x00054CA77FCC5570), UINT64_C(0x0001DA1FC218000A), UINT64_C(0x00037F0150DC6C3C), UINT64_C(0x00022955963EF643)}, {UINT64_C(0x0009C17EB03D6EA7), UINT64_C(0x0002DDDAC1318776), UINT64_C(0x0004E4B91FA27202), UINT64_C(0x0001E2352AB304E3), UINT64_C(0x00060A0E261D6691)}, {UINT64_C(0x000B576743FFBA33), UINT64_C(0x0005A197F3AFDA0C), UINT64_C(0x000429DD4FCB8A3F), UINT64_C(0x0001AF629993F4B3), UINT64_C(0x00045EB119867A22)}}, }, { {{UINT64_C(0x000AC144EF178112), UINT64_C(0x000094A0264CAF23), UINT64_C(0x0004A0AC5A24DEFD), UINT64_C(0x0007C7625D1D184E), UINT64_C(0x0005737B194A6A86)}, {UINT64_C(0x0008F38EC35EE99B), UINT64_C(0x0006D9BAA844775F), UINT64_C(0x00046F84DF77B762), UINT64_C(0x0002544D6FE58FDC), UINT64_C(0x00077B72BB7289FB)}, {UINT64_C(0x000DD166D7288C6E), UINT64_C(0x0001C67A51DA413C), UINT64_C(0x0006973C6FAD10E1), UINT64_C(0x00031DE5E5EDA939), UINT64_C(0x000393F71ED28892)}}, {{UINT64_C(0x000B1C84EECF7E6B), UINT64_C(0x00056A60AC35BAB2), UINT64_C(0x0002F06DF1910A93), UINT64_C(0x0000618DC5FAEB06), UINT64_C(0x0001D49317BBBDF6)}, {UINT64_C(0x000493F2A36F71D9), UINT64_C(0x00040122E257F266), UINT64_C(0x00007974D73D3705), UINT64_C(0x0001276FD01A753E), UINT64_C(0x000756654735EC6A)}, {UINT64_C(0x0007DB79632DD089), UINT64_C(0x0001FE3FA5F4A3F7), UINT64_C(0x0001716E3C167A6F), UINT64_C(0x00053B6AA21FEB09), UINT64_C(0x00023EC2880EEB4A)}}, {{UINT64_C(0x00025A84454FFE86), UINT64_C(0x000780F2E547DCDF), UINT64_C(0x000701A2C14FDED4), UINT64_C(0x0004B8A116F259A3), UINT64_C(0x000695574E1284BB)}, {UINT64_C(0x000D30440055360D), UINT64_C(0x00003410B657F1F4), UINT64_C(0x0006EE23795C3521), UINT64_C(0x0004C9A2F7E3A24B), UINT64_C(0x0000FD8B32023BD7)}, {UINT64_C(0x000AE6F82F35FF69), UINT64_C(0x0003F3D6F04FB2C4), UINT64_C(0x00005F2596E4AACD), UINT64_C(0x0007F09E9725486A), UINT64_C(0x00062C57118684FB)}}, {{UINT64_C(0x00071AB6451B13D2), UINT64_C(0x000619FA9ABFE206), UINT64_C(0x0004C28E4E8FA08C), UINT64_C(0x0002CEE0DAC526F3), UINT64_C(0x0005F61B37975A6F)}, {UINT64_C(0x00015634247F1514), UINT64_C(0x00043246C09599E2), UINT64_C(0x000502B5C89D4562), UINT64_C(0x00055B6E5B70BD64), UINT64_C(0x0000924E7D2DA3A4)}, {UINT64_C(0x000DC2A7C58A69B5), UINT64_C(0x0007579FCF83B046), UINT64_C(0x000490212587ACC9), UINT64_C(0x00042C0D4FB52DDA), UINT64_C(0x0006EA269EA5E4FF)}}, {{UINT64_C(0x000FAB3168E74931), UINT64_C(0x000009FC282310C8), UINT64_C(0x0002E357A087E03B), UINT64_C(0x0002E82B3F54812E), UINT64_C(0x0000A1378335E998)}, {UINT64_C(0x0009E98B211CF746), UINT64_C(0x000294635069D795), UINT64_C(0x00066C9A8A94C197), UINT64_C(0x00049DBA942CC086), UINT64_C(0x00038BE03A6F71F4)}, {UINT64_C(0x000D42F0FB6C56DF), UINT64_C(0x0003D1EF830454E8), UINT64_C(0x000225CD3F51B513), UINT64_C(0x00002F23E7710F71), UINT64_C(0x0007ED09816C213D)}}, {{UINT64_C(0x000475A30D2F95C3), UINT64_C(0x0006534DABA67C75), UINT64_C(0x0005FFF4349E9DCF), UINT64_C(0x0005741BFE20E51E), UINT64_C(0x0007C9C06E28F6DB)}, {UINT64_C(0x0004C91D367D647C), UINT64_C(0x0005DB920659E98B), UINT64_C(0x0006E2DC6EDEAE13), UINT64_C(0x00045FADDDCD7438), UINT64_C(0x0006A3D3CCDD5BDE)}, {UINT64_C(0x000030AFB5D712D2), UINT64_C(0x0004232A6E545B6F), UINT64_C(0x0006CC8095D31E5A), UINT64_C(0x0005E95D17B4F93D), UINT64_C(0x000640826F938DB4)}}, {{UINT64_C(0x00054E864AE39A36), UINT64_C(0x00075453A7420C12), UINT64_C(0x0007550FC0647586), UINT64_C(0x0000CE261F056DAC), UINT64_C(0x0006EC06688237F9)}, {UINT64_C(0x00009D858855A118), UINT64_C(0x00035D6E1CAC4C58), UINT64_C(0x00051BC56EDB0309), UINT64_C(0x00056720925976FA), UINT64_C(0x0003095195EC98C0)}, {UINT64_C(0x00028453ABBCD94C), UINT64_C(0x0000442BD67826FA), UINT64_C(0x00027091B2C7D123), UINT64_C(0x00053D5CE098F2DF), UINT64_C(0x00033B91CBED8C33)}}, {{UINT64_C(0x00031BB1AEC4EB7B), UINT64_C(0x000404BD71986FBA), UINT64_C(0x000789F140F41C34), UINT64_C(0x00046319EC635090), UINT64_C(0x00062555BCEF03FC)}, {UINT64_C(0x000B7957AF9DF20B), UINT64_C(0x00061499B0C64744), UINT64_C(0x0005A1460AB6F031), UINT64_C(0x000254B48FE3B63C), UINT64_C(0x000138DA1B0B8458)}, {UINT64_C(0x0008FC31F72B00C5), UINT64_C(0x00009260DAF93E82), UINT64_C(0x0007724F21722EEC), UINT64_C(0x00065104B46DE00D), UINT64_C(0x0005C74C4AADE4A1)}}, {{UINT64_C(0x000C942D7E200CDA), UINT64_C(0x0004DCCF2C9062F8), UINT64_C(0x00033C6DC30EF168), UINT64_C(0x0005876E586F49F0), UINT64_C(0x0005C625124B23D5)}, {UINT64_C(0x000AF942F3B8567F), UINT64_C(0x00068DD426ED4B8D), UINT64_C(0x00074CE2434E2244), UINT64_C(0x0005BC01452BAF26), UINT64_C(0x00068D340AA53E01)}, {UINT64_C(0x00062BADB88E1FEE), UINT64_C(0x00001B7927E30590), UINT64_C(0x0007FB96EBA04357), UINT64_C(0x00063C4C5B983654), UINT64_C(0x0003CB27C00B0E03)}}, {{UINT64_C(0x0003A8ABA3BA06D8), UINT64_C(0x0005183A547A5052), UINT64_C(0x0002FA684E05B048), UINT64_C(0x00037DC680820759), UINT64_C(0x0003A758E398D110)}, {UINT64_C(0x000AE41D00F8BBE3), UINT64_C(0x0007C91843988CEE), UINT64_C(0x00008AC196646158), UINT64_C(0x0004F9CA63F0D300), UINT64_C(0x0004AE71F5595151)}, {UINT64_C(0x0009C5C331E75B70), UINT64_C(0x000034AEB589633E), UINT64_C(0x0003A2AFA63836A6), UINT64_C(0x00071AA62CA57C97), UINT64_C(0x0002588D39981664)}}, {{UINT64_C(0x0002F5861915F134), UINT64_C(0x0002E22B903AD5D1), UINT64_C(0x0004B62079B373C7), UINT64_C(0x0006E593A78A5789), UINT64_C(0x0006ACFA4114B928)}, {UINT64_C(0x000845994C9F8482), UINT64_C(0x00018D23FF32CC4E), UINT64_C(0x0001EF02A3741210), UINT64_C(0x0003A1F60A318F68), UINT64_C(0x00074BBE122C022E)}, {UINT64_C(0x000235F03B8817CF), UINT64_C(0x0004136EC580474B), UINT64_C(0x00030B5BE4C70BFD), UINT64_C(0x0006771287C6A491), UINT64_C(0x0004EE10D834F1D6)}}, {{UINT64_C(0x0009238C49B5B594), UINT64_C(0x0006D951D5930D4A), UINT64_C(0x00052C92A1704BF4), UINT64_C(0x00058049C0061E24), UINT64_C(0x0003414A1DFBD8A0)}, {UINT64_C(0x0003B17B475F899E), UINT64_C(0x0000A207F4C1C87F), UINT64_C(0x00005DAC41647336), UINT64_C(0x000017D58BC6FE28), UINT64_C(0x00006090A9CB1708)}, {UINT64_C(0x0000E353DF9AED9F), UINT64_C(0x000211A100A66400), UINT64_C(0x000537F1DBBF53C6), UINT64_C(0x00061176C39FF089), UINT64_C(0x0000ED4DD7183518)}}, {{UINT64_C(0x000D4A93DE96CDC1), UINT64_C(0x0001C832B89CB8A0), UINT64_C(0x000203277525319E), UINT64_C(0x0004CEE0F6725575), UINT64_C(0x00070ED69AF9BF53)}, {UINT64_C(0x000C17F8BAA5AAC7), UINT64_C(0x0006AF4ABBDC969F), UINT64_C(0x0003A0E69B82101E), UINT64_C(0x0006234479D6A63E), UINT64_C(0x0002BF20728C2007)}, {UINT64_C(0x00063FEF01AE2A02), UINT64_C(0x0001C86F09FC4AF4), UINT64_C(0x00069A1DE168EBCE), UINT64_C(0x00063F996EFB8433), UINT64_C(0x00072A687DA051BD)}}, {{UINT64_C(0x000A8952F3FB5F0C), UINT64_C(0x00022194DC688FAE), UINT64_C(0x0006F9F5064736BF), UINT64_C(0x0007A6A4D691B9DB), UINT64_C(0x0007F5B139E354FB)}, {UINT64_C(0x0000B63808606E6E), UINT64_C(0x0005E413F0FE0384), UINT64_C(0x00024FB74A712242), UINT64_C(0x00027B1CB73DDC68), UINT64_C(0x0006285935149BF9)}, {UINT64_C(0x000D30A9D3AC7820), UINT64_C(0x0002B97ED3978DF1), UINT64_C(0x0003681BAB9F5289), UINT64_C(0x0000D844B826D276), UINT64_C(0x000784A758F5FDDE)}}, {{UINT64_C(0x0005EF9827213EE3), UINT64_C(0x00042F84E4310A41), UINT64_C(0x0004A5143748EB06), UINT64_C(0x0003190974F9FF92), UINT64_C(0x0005016A42C2EB4B)}, {UINT64_C(0x00000CB993776C25), UINT64_C(0x0005E9694BF91DF4), UINT64_C(0x00056BC66736D688), UINT64_C(0x0002EC931ADE934B), UINT64_C(0x0001A9C364E091BF)}, {UINT64_C(0x000E211DC7632283), UINT64_C(0x00035BE411AEEFD3), UINT64_C(0x00015DAFEBCCAC46), UINT64_C(0x00037714AEB785FD), UINT64_C(0x0006253CC0A245FF)}}, {{UINT64_C(0x00029AF81A0D1BD2), UINT64_C(0x00003B61C799BE14), UINT64_C(0x0001C03C6426B11A), UINT64_C(0x0007F386EC4C5C3C), UINT64_C(0x0000B2BC5FE81F9E)}, {UINT64_C(0x000AD04EE82724D3), UINT64_C(0x0005B1D7846B04CA), UINT64_C(0x00033D35B52BC659), UINT64_C(0x000135A47CD22439), UINT64_C(0x0007D7B6CAEA433E)}, {UINT64_C(0x000850D32772E3DB), UINT64_C(0x000582BED8E87C91), UINT64_C(0x000198367AE74473), UINT64_C(0x0002F5A5839CEAE9), UINT64_C(0x0002B8174D7564F2)}}, }, { {{UINT64_C(0x0005F71E4CC72DC5), UINT64_C(0x000729408117FF19), UINT64_C(0x000309B7A677423D), UINT64_C(0x0004839F84C2AB89), UINT64_C(0x00008A95BA320E5D)}, {UINT64_C(0x00078965FDB1CB39), UINT64_C(0x0005F0C0D8298F25), UINT64_C(0x00055C4EEDD50E22), UINT64_C(0x00023DC216E90B73), UINT64_C(0x000797D03A50DC08)}, {UINT64_C(0x000D4CA0AD220D40), UINT64_C(0x00028CD933850D3B), UINT64_C(0x0004D7EE3B9C333B), UINT64_C(0x0002966D4130006D), UINT64_C(0x0000FBD61D1E8F9C)}}, {{UINT64_C(0x00009E516DAADA87), UINT64_C(0x0004EC925BC0EEEE), UINT64_C(0x0006EFFBA132BCEB), UINT64_C(0x000724D09DAD4807), UINT64_C(0x000452C79585B373)}, {UINT64_C(0x000F1401F95C5FB5), UINT64_C(0x0005A1CE98BCB0CF), UINT64_C(0x000216304328D3D2), UINT64_C(0x0004BF1910725FC2), UINT64_C(0x0004002028E1F6C0)}, {UINT64_C(0x000BCA6D33FB4AF5), UINT64_C(0x000699B08CFF3D9E), UINT64_C(0x0000EA0CDC3C332C), UINT64_C(0x000630F4F9EAC5C7), UINT64_C(0x000780B9E89D8FFA)}}, {{UINT64_C(0x000CF75D097A1682), UINT64_C(0x00032545E3AC653A), UINT64_C(0x00029DB14F338894), UINT64_C(0x000351894CA83CAE), UINT64_C(0x000318CEC53A3C6A)}, {UINT64_C(0x000F2E2D2A2EA810), UINT64_C(0x00054DDA2C9BB050), UINT64_C(0x000290BE850E8961), UINT64_C(0x000287BC5EBC0BFC), UINT64_C(0x00062D4620BB48F9)}, {UINT64_C(0x0005A0F8E756C417), UINT64_C(0x0004937AF0050D8E), UINT64_C(0x0003DF98E8FBE4F8), UINT64_C(0x00073EF8BBA04BAC), UINT64_C(0x0003743A4A505CD5)}}, {{UINT64_C(0x000AC304DDD850C1), UINT64_C(0x000116AE8E058E54), UINT64_C(0x0003E025C2CAAABC), UINT64_C(0x0006FC6FE28AC49A), UINT64_C(0x00016E67A015DEA5)}, {UINT64_C(0x0000CF3F158429CD), UINT64_C(0x000480063B01884B), UINT64_C(0x000363368F078BE2), UINT64_C(0x000504AB7790BA1A), UINT64_C(0x0006710350B446FA)}, {UINT64_C(0x000D8B8DE6397785), UINT64_C(0x000188CD6C441A62), UINT64_C(0x0004AD0920B22E3C), UINT64_C(0x0005021ECF3C72DE), UINT64_C(0x0003D133001D1ED5)}}, {{UINT64_C(0x000B60A8C5FAF1CD), UINT64_C(0x0004C53C423A845B), UINT64_C(0x000520A9E9FA2A69), UINT64_C(0x00027D388A1F08D1), UINT64_C(0x000032396160EC47)}, {UINT64_C(0x00038139094FAD75), UINT64_C(0x0003CD9876593CD5), UINT64_C(0x00071333878088E4), UINT64_C(0x000201E8433445E6), UINT64_C(0x000112302E7408FF)}, {UINT64_C(0x000CBFE63FC06EE2), UINT64_C(0x00027425B1F20DEB), UINT64_C(0x000457B85B95B8B5), UINT64_C(0x00076DF4D98AEAFE), UINT64_C(0x0004EC884BB0909D)}}, {{UINT64_C(0x000560BECBEEDE54), UINT64_C(0x000355F2A19E2A7B), UINT64_C(0x0003AC869895D894), UINT64_C(0x0001B3A88FAF6472), UINT64_C(0x00030150F70F46D2)}, {UINT64_C(0x000C4423AB869B40), UINT64_C(0x0003A52F86375064), UINT64_C(0x00012F5BC0F20340), UINT64_C(0x0006CA222C7412D4), UINT64_C(0x00032F1254041880)}, {UINT64_C(0x0002B2DBAB6499A6), UINT64_C(0x00011049F2328790), UINT64_C(0x000696584124F8E2), UINT64_C(0x000142AB6165955E), UINT64_C(0x00063E346DAEF2ED)}}, {{UINT64_C(0x000D39355730C824), UINT64_C(0x0003FC8CAC7D5529), UINT64_C(0x00051C9605C77F3A), UINT64_C(0x0007A2A90B74D60C), UINT64_C(0x0006FA2B0304B184)}, {UINT64_C(0x0004EB3441C3FCC1), UINT64_C(0x0002CACCC532F441), UINT64_C(0x0005E09ACF224276), UINT64_C(0x00058A77259116FC), UINT64_C(0x0000BDC2A63D5387)}, {UINT64_C(0x000F8EFB7463FFE8), UINT64_C(0x0001057CA428A821), UINT64_C(0x0004ED380A470ED0), UINT64_C(0x00076F49D6CEF5F0), UINT64_C(0x0003F9D2D6743030)}}, {{UINT64_C(0x0000AF30896CC3EF), UINT64_C(0x000201D4DF630DBA), UINT64_C(0x00052E42F5AFF8BF), UINT64_C(0x00000EB77C14ACF5), UINT64_C(0x0003CA2DFB8C5EDF)}, {UINT64_C(0x000B5A205B171808), UINT64_C(0x0004C56363842D6C), UINT64_C(0x000292D70469611A), UINT64_C(0x0006D916356CD45A), UINT64_C(0x0006B0027CD19FAB)}, {UINT64_C(0x00022B2713528A82), UINT64_C(0x0006E7BE33E7CEF0), UINT64_C(0x000009FC8141F131), UINT64_C(0x0000150A7927D149), UINT64_C(0x0003B14B0DA7FF44)}}, {{UINT64_C(0x00032EFED0F84103), UINT64_C(0x00019069CDCE6F9F), UINT64_C(0x0005C6ACB2ABA640), UINT64_C(0x0006C2B81330E238), UINT64_C(0x0003A809BBA9B370)}, {UINT64_C(0x0004BE6C8B688B18), UINT64_C(0x0001351C261FED04), UINT64_C(0x0002C96D1BC48370), UINT64_C(0x0001E95E38FF6352), UINT64_C(0x0007BEAD8D5751AA)}, {UINT64_C(0x00098F021AA4DB09), UINT64_C(0x00078CD1DC9071DF), UINT64_C(0x000605F5C2A08E6A), UINT64_C(0x0002E7D15E83EE69), UINT64_C(0x0000E6B2FF6D9875)}}, {{UINT64_C(0x0004DE5A07C4323E), UINT64_C(0x0002D406347B7064), UINT64_C(0x0005AA73A0846C15), UINT64_C(0x0000B5C4D6C73A87), UINT64_C(0x0002AA137FBF2494)}, {UINT64_C(0x0004685341C33279), UINT64_C(0x000082B2B0E321E2), UINT64_C(0x0005643452806D72), UINT64_C(0x000626BA7990B3AF), UINT64_C(0x0007CF53B95B4365)}, {UINT64_C(0x00013532346149FF), UINT64_C(0x0005947C275C07F1), UINT64_C(0x00034F1270EB410F), UINT64_C(0x000514A7C01BF670), UINT64_C(0x000407161B0257A8)}}, {{UINT64_C(0x00054B5C52AC8719), UINT64_C(0x0002D86CBEB0D6B0), UINT64_C(0x0004F84A08F1266B), UINT64_C(0x0004D65F37B998EF), UINT64_C(0x0006C27CE40B4135)}, {UINT64_C(0x0007BF812153FC77), UINT64_C(0x0005CDDD65D79B11), UINT64_C(0x00054A7071923FF6), UINT64_C(0x00034FBFFF7FA918), UINT64_C(0x000261A5361256A4)}, {UINT64_C(0x000B13BCE19AAFB7), UINT64_C(0x0006D3B746CE4B8F), UINT64_C(0x00053A3635869292), UINT64_C(0x0007909536E7719B), UINT64_C(0x000008EB20D956CC)}}, {{UINT64_C(0x00065CF97D492C5D), UINT64_C(0x00029D9BCEE03B91), UINT64_C(0x0006041F5A49C183), UINT64_C(0x0002F8117A3A828F), UINT64_C(0x000369E3DAD33DF2)}, {UINT64_C(0x000D5176A425F79F), UINT64_C(0x000343D6AB0DE966), UINT64_C(0x00064EFB5C97C515), UINT64_C(0x0002BF9162998A39), UINT64_C(0x00050EF13FEEC9EB)}, {UINT64_C(0x00039C0CFD97E85B), UINT64_C(0x000770E1CCBB013E), UINT64_C(0x0005F03BD9F7D9C2), UINT64_C(0x000690F1EE2F80E3), UINT64_C(0x00071787D1339A82)}}, {{UINT64_C(0x000F7F42B80EB7F2), UINT64_C(0x000544C8293F8329), UINT64_C(0x000122DA47640B5D), UINT64_C(0x0000FEAFA087BC4E), UINT64_C(0x00059F0BB3B97004)}, {UINT64_C(0x0002AA28745CD9B5), UINT64_C(0x0007BC8D5CD03005), UINT64_C(0x0001422C4B7A9189), UINT64_C(0x000282692E6090A7), UINT64_C(0x0000867B47D33593)}, {UINT64_C(0x0003413E422FA5A2), UINT64_C(0x0006887164EBB90B), UINT64_C(0x00065C5E1BFDB4A4), UINT64_C(0x0004B98C578628EE), UINT64_C(0x0004E5352F622184)}}, {{UINT64_C(0x0002549D88E38B2F), UINT64_C(0x0004908DEAD628D9), UINT64_C(0x000073E0A2E146D7), UINT64_C(0x000664C6FFF36209), UINT64_C(0x000130159F64A292)}, {UINT64_C(0x000B964E8ECBEDBE), UINT64_C(0x00030E5C798B68B0), UINT64_C(0x0004BFD953930A67), UINT64_C(0x0007CA03ABB678FB), UINT64_C(0x00033FEF5B3D5B01)}, {UINT64_C(0x00098E12CCF396A9), UINT64_C(0x0003A8CA995F3788), UINT64_C(0x0007482D4E5FAAC6), UINT64_C(0x00031D5A37583FCA), UINT64_C(0x0006D982702EDC91)}}, {{UINT64_C(0x000BE837A054ACCB), UINT64_C(0x0004ECB51A8EF070), UINT64_C(0x0002F2D57B4FCF60), UINT64_C(0x0004C1513045FB2B), UINT64_C(0x00047770E3380A5B)}, {UINT64_C(0x000425BEF82D311B), UINT64_C(0x00002005D68620DC), UINT64_C(0x0007325F0CD3FBE0), UINT64_C(0x0004EEFB9471E0EC), UINT64_C(0x00028F8C67917260)}, {UINT64_C(0x000B0A66B88E76E6), UINT64_C(0x0000F3A2C9DA4F2E), UINT64_C(0x0001EA49E958D92A), UINT64_C(0x000026E1BDBB6E03), UINT64_C(0x0005029291E8FB70)}}, {{UINT64_C(0x000E54C9AEAECCC3), UINT64_C(0x000361674AC1790E), UINT64_C(0x0006F9F28B87D9E7), UINT64_C(0x00018B8D2B452066), UINT64_C(0x0007DB9345D70FBC)}, {UINT64_C(0x000F3DF99A78836C), UINT64_C(0x0004914D0D5AE148), UINT64_C(0x000571EBD41C1239), UINT64_C(0x0005A51875241CFB), UINT64_C(0x0007336AA1FEBF60)}, {UINT64_C(0x000A212F131FA1A5), UINT64_C(0x0000D92E88DEBB89), UINT64_C(0x000558BFDAECA4D2), UINT64_C(0x000269A780A65DC8), UINT64_C(0x0007265543B97C9D)}}, }, { {{UINT64_C(0x0009BE522B9D7F04), UINT64_C(0x0004BC705622740B), UINT64_C(0x0007E15EA4E4D172), UINT64_C(0x00038BD4A6FDEDBC), UINT64_C(0x0005E8C142089478)}, {UINT64_C(0x00048C72EDCC8AA4), UINT64_C(0x0006C5E6065406FA), UINT64_C(0x0006AF3701C24620), UINT64_C(0x00042EA0F2E70B8F), UINT64_C(0x00033DFF74481155)}, {UINT64_C(0x000852E6A6E72D7C), UINT64_C(0x00042B699FEF3BF1), UINT64_C(0x0005907EE2406991), UINT64_C(0x0004D36621FDF916), UINT64_C(0x0006D7911C011B7B)}}, {{UINT64_C(0x000EBFE9B94F7A12), UINT64_C(0x0004824A85A9AC4B), UINT64_C(0x00014EEF07D3D55D), UINT64_C(0x000513B829B2AE5C), UINT64_C(0x0006011380B7D9CC)}, {UINT64_C(0x000A21168961EEA8), UINT64_C(0x00063CBB9BA57577), UINT64_C(0x0006606B05EF2134), UINT64_C(0x0006B72A1D536E54), UINT64_C(0x000661849203E9CC)}, {UINT64_C(0x0004C06869AEA3D6), UINT64_C(0x00021F578255BAF7), UINT64_C(0x00067D1096E12882), UINT64_C(0x00050B150BD416A4), UINT64_C(0x0002910322AC87CD)}}, {{UINT64_C(0x000644D63DB19259), UINT64_C(0x000547C0FCA86C59), UINT64_C(0x0007A198D5D3FAEE), UINT64_C(0x0001E28699860365), UINT64_C(0x0000EFE6732ABA42)}, {UINT64_C(0x000888204C12F590), UINT64_C(0x0001C8E5F2BFF85C), UINT64_C(0x0001772AF32270BC), UINT64_C(0x0005D962EAAB3158), UINT64_C(0x0001A34AB97418FB)}, {UINT64_C(0x0008D80BBC8528CC), UINT64_C(0x000241D41B76D92E), UINT64_C(0x0004513FE5B63EE3), UINT64_C(0x00062D1B5DE35CE4), UINT64_C(0x0005157C5E57C598)}}, {{UINT64_C(0x000BDB25BE3A9FD2), UINT64_C(0x000302ED2946793F), UINT64_C(0x00012C506EF80331), UINT64_C(0x0006D13E5DECA318), UINT64_C(0x00001A5DF0E20F25)}, {UINT64_C(0x000BC9FC9FF75DF0), UINT64_C(0x0000BF1C056F5479), UINT64_C(0x00036E0E95E2CF70), UINT64_C(0x00058A068DA69D3D), UINT64_C(0x0001555FC948F50D)}, {UINT64_C(0x000998A0950C1A1C), UINT64_C(0x0005358898A6636E), UINT64_C(0x0001CC47B1220D25), UINT64_C(0x0007E929E197B7F1), UINT64_C(0x0006FE5D94BC2454)}}, {{UINT64_C(0x000EABC2EB1D0B59), UINT64_C(0x0007A05C59336123), UINT64_C(0x0007918FF8448B64), UINT64_C(0x00057A94A01CAB48), UINT64_C(0x0002FF15B4CC7487)}, {UINT64_C(0x00008799019AECD9), UINT64_C(0x0003D8F58AC75312), UINT64_C(0x0000D4A7DF2730C1), UINT64_C(0x0005E75D83B3FAC3), UINT64_C(0x0007180E7E60D802)}, {UINT64_C(0x0005AEF92672CCE1), UINT64_C(0x0006637504959CA3), UINT64_C(0x00053E5589BFA337), UINT64_C(0x0003A21A8478ED35), UINT64_C(0x0002DD36E5AC50F9)}}, {{UINT64_C(0x00062DF8E260C004), UINT64_C(0x0004DE30E71B999A), UINT64_C(0x00045C3FA066284D), UINT64_C(0x000331D9BB25623D), UINT64_C(0x000202123595AEC6)}, {UINT64_C(0x00047A9FF0131346), UINT64_C(0x0003A150D3AAC3F1), UINT64_C(0x00029452C6C88616), UINT64_C(0x0007CA8D3EC1A917), UINT64_C(0x0006EEC72C9A0BF5)}, {UINT64_C(0x000F10845A21F448), UINT64_C(0x00001AAE742835C2), UINT64_C(0x00025E4CFB83A17F), UINT64_C(0x0007BF8EB92AF3AB), UINT64_C(0x000699BE9783E779)}}, {{UINT64_C(0x0001DC9C52A66972), UINT64_C(0x0002C0B904C59FBA), UINT64_C(0x0006C89144084C6D), UINT64_C(0x00014AB65019CF29), UINT64_C(0x00006EA2401AC315)}, {UINT64_C(0x000ADC23F3836291), UINT64_C(0x0002F1AD8C01F7C1), UINT64_C(0x000205DF0C8922CF), UINT64_C(0x0001751FC5AEB310), UINT64_C(0x0006F64DB4075476)}, {UINT64_C(0x000F82F426A80AE1), UINT64_C(0x00013C4A6E62FC16), UINT64_C(0x0001FBCDF27E0B34), UINT64_C(0x00078E30B91EF3E6), UINT64_C(0x000059CBEA565341)}}, {{UINT64_C(0x00062CB978126A51), UINT64_C(0x0004E2E7313211FE), UINT64_C(0x00066E6E57EED552), UINT64_C(0x00009AE384794AC9), UINT64_C(0x00077726F8AB9C55)}, {UINT64_C(0x0006D6C6C9E72C58), UINT64_C(0x00069723C749EA4F), UINT64_C(0x0005631BCF116547), UINT64_C(0x0004E31FAB9D03A6), UINT64_C(0x0002B7F538841EE2)}, {UINT64_C(0x000BD957A2809D3C), UINT64_C(0x000317F1DC4351FD), UINT64_C(0x000701BA3438D796), UINT64_C(0x00009FBD6563EC5D), UINT64_C(0x0003E98ABE5B2F47)}}, {{UINT64_C(0x000AE4190E276A10), UINT64_C(0x0001FFB966B8121D), UINT64_C(0x0004FEEDA4D78B7E), UINT64_C(0x0005DB20D5551162), UINT64_C(0x00030DC06EF26E4D)}, {UINT64_C(0x000A970255208159), UINT64_C(0x0001A104788B4AEF), UINT64_C(0x00004D4C840BE3BE), UINT64_C(0x0006BD8A71949A6C), UINT64_C(0x000651C9FF191728)}, {UINT64_C(0x000A44663267D2A4), UINT64_C(0x0001FC0CAB11E883), UINT64_C(0x000785A12DE63089), UINT64_C(0x00006EC9E0189600), UINT64_C(0x000375BF7E8AB1B8)}}, {{UINT64_C(0x000BFFBBC3B4CE41), UINT64_C(0x0003376A2003A823), UINT64_C(0x000091EBF7910590), UINT64_C(0x00061FB8363DCA05), UINT64_C(0x00042807BC01AD4E)}, {UINT64_C(0x000ACF6D9A5C7646), UINT64_C(0x000560F4B3AE3DC2), UINT64_C(0x000183CCAE76BD95), UINT64_C(0x00065764DB513046), UINT64_C(0x000214F42294E850)}, {UINT64_C(0x0000F3EDC763536B), UINT64_C(0x0004E9D5EF6B046E), UINT64_C(0x000150D442C37994), UINT64_C(0x0001B54E80DE1472), UINT64_C(0x00007A1D71EDF00C)}}, {{UINT64_C(0x00087407DBA8E90B), UINT64_C(0x0007E1C66322205F), UINT64_C(0x0004FAC245ACCD04), UINT64_C(0x0002B13B4E297D86), UINT64_C(0x000323B2D23AEDAE)}, {UINT64_C(0x0009941B92E19A5C), UINT64_C(0x000195BC242E04DB), UINT64_C(0x0007CBD2DF69FF04), UINT64_C(0x0007CA419CC6C1BA), UINT64_C(0x0002904A1B8DDF4F)}, {UINT64_C(0x00040957907BF307), UINT64_C(0x00015C68151C4FE7), UINT64_C(0x0003DD3F01FB8E0F), UINT64_C(0x0003D31C808FC101), UINT64_C(0x00066F1F09C544BB)}}, {{UINT64_C(0x0003F8A6A6C266C9), UINT64_C(0x0001000A75D2D728), UINT64_C(0x000149100C338128), UINT64_C(0x00048CB6ED6D33B4), UINT64_C(0x00069B7380105C27)}, {UINT64_C(0x000BBCA015BD1302), UINT64_C(0x000453E91EF883C4), UINT64_C(0x000087A2C55564F3), UINT64_C(0x00028661DD26634D), UINT64_C(0x0000504737350EB4)}, {UINT64_C(0x0003AE59A5B3D5E2), UINT64_C(0x0001545256AA2218), UINT64_C(0x00064A0782A0BF22), UINT64_C(0x000365507C34B4AA), UINT64_C(0x00032799B2146183)}}, {{UINT64_C(0x0003D6DBFB2DFB8B), UINT64_C(0x00022DF9277F3ECF), UINT64_C(0x0000C42749A48685), UINT64_C(0x0001B0E7B30B31B5), UINT64_C(0x00075EBF4439768D)}, {UINT64_C(0x00039F41CE757E5C), UINT64_C(0x0007F8600191731B), UINT64_C(0x0006B2813E3967F5), UINT64_C(0x00015D1CE8E34A7E), UINT64_C(0x00072FBC1F6F13D8)}, {UINT64_C(0x0004F6CF2E028861), UINT64_C(0x00020F869603ABDE), UINT64_C(0x00042A4AA3F9DAAB), UINT64_C(0x0004A8C0AC2A2950), UINT64_C(0x0004B1809E50B53C)}}, {{UINT64_C(0x00062DDA4C355837), UINT64_C(0x0002F17314E1EE8D), UINT64_C(0x00078EBCB6E2323E), UINT64_C(0x0004543455D081FD), UINT64_C(0x000791C9DA3066C1)}, {UINT64_C(0x0007AEA83D07CA0E), UINT64_C(0x000601D3C4BBCA6C), UINT64_C(0x000438ECD2EB6B9E), UINT64_C(0x0005FE33D87D61C1), UINT64_C(0x0002C2CD6F6EF8D2)}, {UINT64_C(0x0002DAEC4B332C81), UINT64_C(0x000600000F256A01), UINT64_C(0x000647117D50194B), UINT64_C(0x0002A7D5456F092C), UINT64_C(0x000398A204AC0606)}}, {{UINT64_C(0x00076419370EC4A0), UINT64_C(0x00012369939759B2), UINT64_C(0x00023B2960FD0EE0), UINT64_C(0x0007AF17DB515E9B), UINT64_C(0x0002CC3165DDFC91)}, {UINT64_C(0x0005EE1C6281CBB1), UINT64_C(0x00060699623D7D65), UINT64_C(0x0000F3D85C23D284), UINT64_C(0x000018587E7669D1), UINT64_C(0x000227AAF5D77845)}, {UINT64_C(0x000153114ADB9FC3), UINT64_C(0x000164F7102A9765), UINT64_C(0x0006E7834D58BEE3), UINT64_C(0x0006F111F5E5ACB0), UINT64_C(0x000162CF7ADDFFCA)}}, {{UINT64_C(0x00055D7C37A14EAC), UINT64_C(0x0005223EE335640C), UINT64_C(0x000291B30C58F170), UINT64_C(0x00023A4EB047D54F), UINT64_C(0x0002C3DDA0AF63CB)}, {UINT64_C(0x000C4C6EF153A948), UINT64_C(0x00004C4867916BA5), UINT64_C(0x00035BE98811B8E0), UINT64_C(0x0004F3937F720308), UINT64_C(0x00041AC616B68B67)}, {UINT64_C(0x000D47D0742C184D), UINT64_C(0x00063D7733EDA001), UINT64_C(0x000609767EC0E926), UINT64_C(0x0006C3F5D59B36D0), UINT64_C(0x0004B14DD7938C89)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj_ed_eone.op3 * https://www.hyperelliptic.org/EFD/g1p/auto-code/twisted/extended-1/doubling/dbl-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ /* set pointers for Edwards curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(t0, X); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(t1, Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(t2, Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(t3, t2, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(X3, X, Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(Y3, X3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(T3, Y3, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(Z3, T3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(Y3, t0, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t2, Y3, t3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t3, t0, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, Z3, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, Z3, t3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Z3, t2, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, Y3, t3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed_ed_eone.op3 * https://hyperelliptic.org/EFD/g1p/auto-code/twisted/extended/addition/madd-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ const limb_t *d = const_d; /* set pointers for Edwards curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *T1 = Q->T; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *T2 = P->T; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *T3 = R->T; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t2, d, T2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t2, T1, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(X3, X1, Y1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(Y3, X2, Y2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t3, T3, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(T3, t3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(t3, Z1, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(Z3, Z1, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t1, t1, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, T3, Z3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, t3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, T3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Z3, Z3, t3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj_ed_eone.op3 * https://hyperelliptic.org/EFD/g1p/auto-code/twisted/extended/addition/add-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ const limb_t *d = const_d; /* set pointers for Edwards curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *T1 = Q->T; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *T2 = P->T; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *T3 = R->T; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t2, d, T2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t2, T1, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t3, Z1, Z2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(X3, X1, Y1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(Y3, X2, Y2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(Z3, T3, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(T3, Z3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(Z3, t3, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(t3, t3, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t1, t1, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, T3, Z3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, t3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, T3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Z3, Z3, t3); } /*- * from P projective Edwards to Q projective legacy: Q=P OK * Autogenerated: op3/edwards2legacy_gost.op3 * https://tools.ietf.org/html/rfc7836#section-5.2 */ static void point_edwards2legacy(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0; /* constants */ const limb_t *S = const_S; const limb_t *T = const_T; const limb_t *X1 = P->X; const limb_t *Y1 = P->Y; const limb_t *Z1 = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(T3, Z1, Y1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t0, Z1, Y1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, S, T3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, Z1, T3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Z3, X1, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t0, t0, T); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(t0, T3, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, X1, t0); } /*- * from P affine legacy to Q projective Edwards: Q=P not OK * Autogenerated: op3/legacy2edwards_gost.op3 * https://tools.ietf.org/html/rfc7836#section-5.2 */ static void point_legacy2edwards(pt_prj_t *Q, const pt_aff_t *P) { /* constants */ const limb_t *S = const_S; const limb_t *T = const_T; const limb_t *X1 = P->X; const limb_t *Y1 = P->Y; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(T3, X1, T); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(Y3, T3, S); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, T3, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Z3, Y1, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(T3, T3, S); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, Y1, T3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, Y3, Z3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(Z3, Z3); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; /* move from legacy affine to Edwards projective */ point_legacy2edwards(&precomp[0], P); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[32], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 32) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[52], const unsigned char in[32]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 51; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[257], const unsigned char in[32]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 257; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[32], const unsigned char b[32], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[257] = {0}; int8_t bnaf[257] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 256; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.T, Q.T); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.T, &precomp[d].T); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.T, Q.T); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.T, &lut_cmb[0][d].T); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.T); fe_copy(Q.Z, const_one); } if (flipped) { /* correct sign */ fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.T, Q.T); } /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_256_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[51] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.T, diff, Q.T, precomp[j].T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 50; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.T, diff, lut.T, precomp[j].T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(out->X, lut.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(out->T, lut.T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(lut.X, is_neg, lut.X, out->X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(lut.T, is_neg, lut.T, out->T); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(lut.X, precomp[0].X); fe_copy(lut.Y, precomp[0].Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(lut.T, precomp[0].T); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.T, scalar[0] & 1, lut.T, Q.T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); point_double(&Q, &Q); point_double(&Q, &Q); /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_256_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[32]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.T); fe_copy(Q.Z, const_one); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 3; i >= 0; i--) { for (j = 0; i != 3 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 14; j++) { if (j * 4 + i > 51) continue; d = rnaf[j * 4 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.T, diff, lut.T, lut_cmb[j][k].T); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(out->X, lut.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(out->T, lut.T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(lut.X, is_neg, lut.X, out->X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(lut.T, is_neg, lut.T, out->T); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(lut.X, lut_cmb[0][0].X); fe_copy(lut.Y, lut_cmb[0][0].Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(lut.T, lut_cmb[0][0].T); point_add_mixed(&R, &Q, &lut); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.T, scalar[0] & 1, R.T, Q.T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_256_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[32], unsigned char outy[32], const unsigned char a[32], const unsigned char b[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes(P.Y, iny); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes(P.Y, iny); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[32] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_tc26_gost_3410_2012_256_paramSetA( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(n, b_n, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_tc26_gost_3410_2012_256_paramSetA(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_tc26_gost_3410_2012_256_paramSetA(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 32) != 32) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #else /* __SIZEOF_INT128__ */ #include #include #define LIMB_BITS 32 #define LIMB_CNT 11 /* Field elements */ typedef uint32_t fe_t[LIMB_CNT]; typedef uint32_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_TC26_GOST_3410_2012_256_PARAMSETA_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) #define fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(c, a, b) \ fiat_id_tc26_gost_3410_2012_256_paramSetA_add(c, a, b); \ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry(c, c) #define fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(c, a, b) \ fiat_id_tc26_gost_3410_2012_256_paramSetA_sub(c, a, b); \ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry(c, c) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t T; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; fe_t T; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: unsaturated_solinas --static --use-value-barrier id_tc26_gost_3410_2012_256_paramSetA 32 '(auto)' '2^256 - 617' */ /* curve description: id_tc26_gost_3410_2012_256_paramSetA */ /* machine_wordsize = 32 (from "32") */ /* requested operations: (all) */ /* n = 11 (from "(auto)") */ /* s-c = 2^256 - [(1, 617)] (from "2^256 - 617") */ /* tight_bounds_multiplier = 1 (from "") */ /* */ /* Computed values: */ /* carry_chain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 0, 1] */ /* eval z = z[0] + (z[1] << 24) + (z[2] << 47) + (z[3] << 70) + (z[4] << 94) + (z[5] << 117) + (z[6] << 140) + (z[7] << 163) + (z[8] << 187) + (z[9] << 210) + (z[10] << 233) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) */ /* balance = [0x1fffb2e, 0xfffffe, 0xfffffe, 0x1fffffe, 0xfffffe, 0xfffffe, 0xfffffe, 0x1fffffe, 0xfffffe, 0xfffffe, 0xfffffe] */ #include typedef unsigned char fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1; typedef signed char fiat_id_tc26_gost_3410_2012_256_paramSetA_int1; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_TC26_GOST_3410_2012_256_PARAMSETA_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint32_t fiat_id_tc26_gost_3410_2012_256_paramSetA_value_barrier_u32(uint32_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_tc26_gost_3410_2012_256_paramSetA_value_barrier_u32(x) (x) #endif /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u24 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^24 * out2 = ⌊(arg1 + arg2 + arg3) / 2^24⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffff] * arg3: [0x0 ~> 0xffffff] * Output Bounds: * out1: [0x0 ~> 0xffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u24( uint32_t *out1, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint32_t x1; uint32_t x2; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT32_C(0xffffff)); x3 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x1 >> 24); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u24 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^24 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^24⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffff] * arg3: [0x0 ~> 0xffffff] * Output Bounds: * out1: [0x0 ~> 0xffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u24( uint32_t *out1, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, uint32_t arg2, uint32_t arg3) { int32_t x1; fiat_id_tc26_gost_3410_2012_256_paramSetA_int1 x2; uint32_t x3; x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_int1)(x1 >> 24); x3 = (x1 & UINT32_C(0xffffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u23 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^23 * out2 = ⌊(arg1 + arg2 + arg3) / 2^23⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7fffff] * arg3: [0x0 ~> 0x7fffff] * Output Bounds: * out1: [0x0 ~> 0x7fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u23( uint32_t *out1, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint32_t x1; uint32_t x2; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT32_C(0x7fffff)); x3 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x1 >> 23); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u23 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^23 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^23⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7fffff] * arg3: [0x0 ~> 0x7fffff] * Output Bounds: * out1: [0x0 ~> 0x7fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u23( uint32_t *out1, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, uint32_t arg2, uint32_t arg3) { int32_t x1; fiat_id_tc26_gost_3410_2012_256_paramSetA_int1 x2; uint32_t x3; x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_int1)(x1 >> 23); x3 = (x1 & UINT32_C(0x7fffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32( uint32_t *out1, fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, uint32_t arg2, uint32_t arg3) { fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x1; uint32_t x2; uint32_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_int1)(0x0 - x1) & UINT32_C(0xffffffff)); x3 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_value_barrier_u32(x2) & arg3) | (fiat_id_tc26_gost_3410_2012_256_paramSetA_value_barrier_u32((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul multiplies two field elements and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] * arg2: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] * Output Bounds: * out1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul( uint32_t out1[11], const uint32_t arg1[11], const uint32_t arg2[11]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint64_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint64_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; uint64_t x110; uint64_t x111; uint64_t x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint32_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; uint64_t x129; uint64_t x130; uint64_t x131; uint64_t x132; uint64_t x133; uint64_t x134; uint64_t x135; uint64_t x136; uint32_t x137; uint64_t x138; uint64_t x139; uint32_t x140; uint64_t x141; uint64_t x142; uint32_t x143; uint64_t x144; uint64_t x145; uint32_t x146; uint64_t x147; uint64_t x148; uint32_t x149; uint64_t x150; uint64_t x151; uint32_t x152; uint64_t x153; uint64_t x154; uint32_t x155; uint64_t x156; uint64_t x157; uint32_t x158; uint64_t x159; uint64_t x160; uint32_t x161; uint64_t x162; uint32_t x163; uint32_t x164; uint64_t x165; uint64_t x166; uint32_t x167; uint32_t x168; uint32_t x169; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x170; uint32_t x171; uint32_t x172; x1 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[10]))); x2 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[9]))); x3 = (UINT16_C(0x269) * (((uint64_t)(arg1[10]) * (arg2[8])) * 0x2)); x4 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[7]))); x5 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[6]))); x6 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[5]))); x7 = (UINT16_C(0x269) * (((uint64_t)(arg1[10]) * (arg2[4])) * 0x2)); x8 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[3]))); x9 = (UINT16_C(0x269) * ((uint64_t)(arg1[10]) * (arg2[2]))); x10 = (UINT16_C(0x269) * (((uint64_t)(arg1[10]) * (arg2[1])) * 0x2)); x11 = (UINT16_C(0x269) * ((uint64_t)(arg1[9]) * (arg2[10]))); x12 = (UINT16_C(0x269) * (((uint64_t)(arg1[9]) * (arg2[9])) * 0x2)); x13 = (UINT16_C(0x269) * (((uint64_t)(arg1[9]) * (arg2[8])) * 0x2)); x14 = (UINT16_C(0x269) * ((uint64_t)(arg1[9]) * (arg2[7]))); x15 = (UINT16_C(0x269) * ((uint64_t)(arg1[9]) * (arg2[6]))); x16 = (UINT16_C(0x269) * (((uint64_t)(arg1[9]) * (arg2[5])) * 0x2)); x17 = (UINT16_C(0x269) * (((uint64_t)(arg1[9]) * (arg2[4])) * 0x2)); x18 = (UINT16_C(0x269) * ((uint64_t)(arg1[9]) * (arg2[3]))); x19 = (UINT16_C(0x269) * (((uint64_t)(arg1[9]) * (arg2[2])) * 0x2)); x20 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[10])) * 0x2)); x21 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[9])) * 0x2)); x22 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[8])) * 0x2)); x23 = (UINT16_C(0x269) * ((uint64_t)(arg1[8]) * (arg2[7]))); x24 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[6])) * 0x2)); x25 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[5])) * 0x2)); x26 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[4])) * 0x2)); x27 = (UINT16_C(0x269) * (((uint64_t)(arg1[8]) * (arg2[3])) * 0x2)); x28 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[10]))); x29 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[9]))); x30 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[8]))); x31 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[7]))); x32 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[6]))); x33 = (UINT16_C(0x269) * ((uint64_t)(arg1[7]) * (arg2[5]))); x34 = (UINT16_C(0x269) * (((uint64_t)(arg1[7]) * (arg2[4])) * 0x2)); x35 = (UINT16_C(0x269) * ((uint64_t)(arg1[6]) * (arg2[10]))); x36 = (UINT16_C(0x269) * ((uint64_t)(arg1[6]) * (arg2[9]))); x37 = (UINT16_C(0x269) * (((uint64_t)(arg1[6]) * (arg2[8])) * 0x2)); x38 = (UINT16_C(0x269) * ((uint64_t)(arg1[6]) * (arg2[7]))); x39 = (UINT16_C(0x269) * ((uint64_t)(arg1[6]) * (arg2[6]))); x40 = (UINT16_C(0x269) * (((uint64_t)(arg1[6]) * (arg2[5])) * 0x2)); x41 = (UINT16_C(0x269) * ((uint64_t)(arg1[5]) * (arg2[10]))); x42 = (UINT16_C(0x269) * (((uint64_t)(arg1[5]) * (arg2[9])) * 0x2)); x43 = (UINT16_C(0x269) * (((uint64_t)(arg1[5]) * (arg2[8])) * 0x2)); x44 = (UINT16_C(0x269) * ((uint64_t)(arg1[5]) * (arg2[7]))); x45 = (UINT16_C(0x269) * (((uint64_t)(arg1[5]) * (arg2[6])) * 0x2)); x46 = (UINT16_C(0x269) * (((uint64_t)(arg1[4]) * (arg2[10])) * 0x2)); x47 = (UINT16_C(0x269) * (((uint64_t)(arg1[4]) * (arg2[9])) * 0x2)); x48 = (UINT16_C(0x269) * (((uint64_t)(arg1[4]) * (arg2[8])) * 0x2)); x49 = (UINT16_C(0x269) * (((uint64_t)(arg1[4]) * (arg2[7])) * 0x2)); x50 = (UINT16_C(0x269) * ((uint64_t)(arg1[3]) * (arg2[10]))); x51 = (UINT16_C(0x269) * ((uint64_t)(arg1[3]) * (arg2[9]))); x52 = (UINT16_C(0x269) * (((uint64_t)(arg1[3]) * (arg2[8])) * 0x2)); x53 = (UINT16_C(0x269) * ((uint64_t)(arg1[2]) * (arg2[10]))); x54 = (UINT16_C(0x269) * (((uint64_t)(arg1[2]) * (arg2[9])) * 0x2)); x55 = (UINT16_C(0x269) * (((uint64_t)(arg1[1]) * (arg2[10])) * 0x2)); x56 = ((uint64_t)(arg1[10]) * (arg2[0])); x57 = ((uint64_t)(arg1[9]) * ((arg2[1]) * 0x2)); x58 = ((uint64_t)(arg1[9]) * (arg2[0])); x59 = ((uint64_t)(arg1[8]) * ((arg2[2]) * 0x2)); x60 = ((uint64_t)(arg1[8]) * ((arg2[1]) * 0x2)); x61 = ((uint64_t)(arg1[8]) * (arg2[0])); x62 = ((uint64_t)(arg1[7]) * (arg2[3])); x63 = ((uint64_t)(arg1[7]) * (arg2[2])); x64 = ((uint64_t)(arg1[7]) * (arg2[1])); x65 = ((uint64_t)(arg1[7]) * (arg2[0])); x66 = ((uint64_t)(arg1[6]) * ((arg2[4]) * 0x2)); x67 = ((uint64_t)(arg1[6]) * (arg2[3])); x68 = ((uint64_t)(arg1[6]) * (arg2[2])); x69 = ((uint64_t)(arg1[6]) * ((arg2[1]) * 0x2)); x70 = ((uint64_t)(arg1[6]) * (arg2[0])); x71 = ((uint64_t)(arg1[5]) * ((arg2[5]) * 0x2)); x72 = ((uint64_t)(arg1[5]) * ((arg2[4]) * 0x2)); x73 = ((uint64_t)(arg1[5]) * (arg2[3])); x74 = ((uint64_t)(arg1[5]) * ((arg2[2]) * 0x2)); x75 = ((uint64_t)(arg1[5]) * ((arg2[1]) * 0x2)); x76 = ((uint64_t)(arg1[5]) * (arg2[0])); x77 = ((uint64_t)(arg1[4]) * ((arg2[6]) * 0x2)); x78 = ((uint64_t)(arg1[4]) * ((arg2[5]) * 0x2)); x79 = ((uint64_t)(arg1[4]) * ((arg2[4]) * 0x2)); x80 = ((uint64_t)(arg1[4]) * ((arg2[3]) * 0x2)); x81 = ((uint64_t)(arg1[4]) * ((arg2[2]) * 0x2)); x82 = ((uint64_t)(arg1[4]) * ((arg2[1]) * 0x2)); x83 = ((uint64_t)(arg1[4]) * (arg2[0])); x84 = ((uint64_t)(arg1[3]) * (arg2[7])); x85 = ((uint64_t)(arg1[3]) * (arg2[6])); x86 = ((uint64_t)(arg1[3]) * (arg2[5])); x87 = ((uint64_t)(arg1[3]) * ((arg2[4]) * 0x2)); x88 = ((uint64_t)(arg1[3]) * (arg2[3])); x89 = ((uint64_t)(arg1[3]) * (arg2[2])); x90 = ((uint64_t)(arg1[3]) * (arg2[1])); x91 = ((uint64_t)(arg1[3]) * (arg2[0])); x92 = ((uint64_t)(arg1[2]) * ((arg2[8]) * 0x2)); x93 = ((uint64_t)(arg1[2]) * (arg2[7])); x94 = ((uint64_t)(arg1[2]) * (arg2[6])); x95 = ((uint64_t)(arg1[2]) * ((arg2[5]) * 0x2)); x96 = ((uint64_t)(arg1[2]) * ((arg2[4]) * 0x2)); x97 = ((uint64_t)(arg1[2]) * (arg2[3])); x98 = ((uint64_t)(arg1[2]) * (arg2[2])); x99 = ((uint64_t)(arg1[2]) * ((arg2[1]) * 0x2)); x100 = ((uint64_t)(arg1[2]) * (arg2[0])); x101 = ((uint64_t)(arg1[1]) * ((arg2[9]) * 0x2)); x102 = ((uint64_t)(arg1[1]) * ((arg2[8]) * 0x2)); x103 = ((uint64_t)(arg1[1]) * (arg2[7])); x104 = ((uint64_t)(arg1[1]) * ((arg2[6]) * 0x2)); x105 = ((uint64_t)(arg1[1]) * ((arg2[5]) * 0x2)); x106 = ((uint64_t)(arg1[1]) * ((arg2[4]) * 0x2)); x107 = ((uint64_t)(arg1[1]) * (arg2[3])); x108 = ((uint64_t)(arg1[1]) * ((arg2[2]) * 0x2)); x109 = ((uint64_t)(arg1[1]) * ((arg2[1]) * 0x2)); x110 = ((uint64_t)(arg1[1]) * (arg2[0])); x111 = ((uint64_t)(arg1[0]) * (arg2[10])); x112 = ((uint64_t)(arg1[0]) * (arg2[9])); x113 = ((uint64_t)(arg1[0]) * (arg2[8])); x114 = ((uint64_t)(arg1[0]) * (arg2[7])); x115 = ((uint64_t)(arg1[0]) * (arg2[6])); x116 = ((uint64_t)(arg1[0]) * (arg2[5])); x117 = ((uint64_t)(arg1[0]) * (arg2[4])); x118 = ((uint64_t)(arg1[0]) * (arg2[3])); x119 = ((uint64_t)(arg1[0]) * (arg2[2])); x120 = ((uint64_t)(arg1[0]) * (arg2[1])); x121 = ((uint64_t)(arg1[0]) * (arg2[0])); x122 = (x121 + (x55 + (x54 + (x52 + (x49 + (x45 + (x40 + (x34 + (x27 + (x19 + x10)))))))))); x123 = (x122 >> 24); x124 = (uint32_t)(x122 & UINT32_C(0xffffff)); x125 = (x111 + (x101 + (x92 + (x84 + (x77 + (x71 + (x66 + (x62 + (x59 + (x57 + x56)))))))))); x126 = (x112 + (x102 + (x93 + (x85 + (x78 + (x72 + (x67 + (x63 + (x60 + (x58 + x1)))))))))); x127 = (x113 + (x103 + (x94 + (x86 + (x79 + (x73 + (x68 + (x64 + (x61 + (x11 + x2)))))))))); x128 = (x114 + (x104 + (x95 + (x87 + (x80 + (x74 + (x69 + (x65 + (x20 + (x12 + x3)))))))))); x129 = (x115 + (x105 + (x96 + (x88 + (x81 + (x75 + (x70 + (x28 + (x21 + (x13 + x4)))))))))); x130 = (x116 + (x106 + (x97 + (x89 + (x82 + (x76 + (x35 + (x29 + (x22 + (x14 + x5)))))))))); x131 = (x117 + (x107 + (x98 + (x90 + (x83 + (x41 + (x36 + (x30 + (x23 + (x15 + x6)))))))))); x132 = (x118 + (x108 + (x99 + (x91 + (x46 + (x42 + (x37 + (x31 + (x24 + (x16 + x7)))))))))); x133 = (x119 + (x109 + (x100 + (x50 + (x47 + (x43 + (x38 + (x32 + (x25 + (x17 + x8)))))))))); x134 = (x120 + (x110 + (x53 + (x51 + (x48 + (x44 + (x39 + (x33 + (x26 + (x18 + x9)))))))))); x135 = (x123 + x134); x136 = (x135 >> 23); x137 = (uint32_t)(x135 & UINT32_C(0x7fffff)); x138 = (x136 + x133); x139 = (x138 >> 23); x140 = (uint32_t)(x138 & UINT32_C(0x7fffff)); x141 = (x139 + x132); x142 = (x141 >> 24); x143 = (uint32_t)(x141 & UINT32_C(0xffffff)); x144 = (x142 + x131); x145 = (x144 >> 23); x146 = (uint32_t)(x144 & UINT32_C(0x7fffff)); x147 = (x145 + x130); x148 = (x147 >> 23); x149 = (uint32_t)(x147 & UINT32_C(0x7fffff)); x150 = (x148 + x129); x151 = (x150 >> 23); x152 = (uint32_t)(x150 & UINT32_C(0x7fffff)); x153 = (x151 + x128); x154 = (x153 >> 24); x155 = (uint32_t)(x153 & UINT32_C(0xffffff)); x156 = (x154 + x127); x157 = (x156 >> 23); x158 = (uint32_t)(x156 & UINT32_C(0x7fffff)); x159 = (x157 + x126); x160 = (x159 >> 23); x161 = (uint32_t)(x159 & UINT32_C(0x7fffff)); x162 = (x160 + x125); x163 = (uint32_t)(x162 >> 23); x164 = (uint32_t)(x162 & UINT32_C(0x7fffff)); x165 = ((uint64_t)UINT16_C(0x269) * x163); x166 = (x124 + x165); x167 = (uint32_t)(x166 >> 24); x168 = (uint32_t)(x166 & UINT32_C(0xffffff)); x169 = (x167 + x137); x170 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x169 >> 23); x171 = (x169 & UINT32_C(0x7fffff)); x172 = (x170 + x140); out1[0] = x168; out1[1] = x171; out1[2] = x172; out1[3] = x143; out1[4] = x146; out1[5] = x149; out1[6] = x152; out1[7] = x155; out1[8] = x158; out1[9] = x161; out1[10] = x164; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square squares a field element and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg1) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] * Output Bounds: * out1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square( uint32_t out1[11], const uint32_t arg1[11]) { uint64_t x1; uint64_t x2; uint32_t x3; uint64_t x4; uint64_t x5; uint32_t x6; uint64_t x7; uint64_t x8; uint32_t x9; uint64_t x10; uint64_t x11; uint32_t x12; uint64_t x13; uint64_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint64_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint32_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint32_t x102; uint64_t x103; uint64_t x104; uint32_t x105; uint64_t x106; uint64_t x107; uint32_t x108; uint64_t x109; uint64_t x110; uint32_t x111; uint64_t x112; uint64_t x113; uint32_t x114; uint64_t x115; uint64_t x116; uint32_t x117; uint64_t x118; uint64_t x119; uint32_t x120; uint64_t x121; uint64_t x122; uint32_t x123; uint64_t x124; uint64_t x125; uint32_t x126; uint64_t x127; uint32_t x128; uint32_t x129; uint64_t x130; uint64_t x131; uint32_t x132; uint32_t x133; uint32_t x134; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x135; uint32_t x136; uint32_t x137; x1 = ((uint64_t)(arg1[10]) * UINT16_C(0x269)); x2 = (x1 * 0x2); x3 = ((arg1[10]) * 0x2); x4 = ((uint64_t)(arg1[9]) * UINT16_C(0x269)); x5 = (x4 * 0x2); x6 = ((arg1[9]) * 0x2); x7 = ((uint64_t)(arg1[8]) * UINT16_C(0x269)); x8 = (x7 * 0x2); x9 = ((arg1[8]) * 0x2); x10 = ((uint64_t)(arg1[7]) * UINT16_C(0x269)); x11 = (x10 * 0x2); x12 = ((arg1[7]) * 0x2); x13 = ((uint64_t)(arg1[6]) * UINT16_C(0x269)); x14 = (x13 * 0x2); x15 = ((arg1[6]) * 0x2); x16 = ((arg1[5]) * 0x2); x17 = ((arg1[4]) * 0x2); x18 = ((arg1[3]) * 0x2); x19 = ((arg1[2]) * 0x2); x20 = ((arg1[1]) * 0x2); x21 = ((arg1[10]) * x1); x22 = ((arg1[9]) * x2); x23 = ((arg1[9]) * (x4 * 0x2)); x24 = ((arg1[8]) * (x2 * 0x2)); x25 = ((arg1[8]) * (x5 * 0x2)); x26 = ((arg1[8]) * (x7 * 0x2)); x27 = ((arg1[7]) * x2); x28 = ((arg1[7]) * x5); x29 = ((arg1[7]) * x8); x30 = ((arg1[7]) * x10); x31 = ((arg1[6]) * x2); x32 = ((arg1[6]) * x5); x33 = ((arg1[6]) * (x8 * 0x2)); x34 = ((arg1[6]) * x11); x35 = ((arg1[6]) * x13); x36 = ((arg1[5]) * x2); x37 = ((arg1[5]) * (x5 * 0x2)); x38 = ((arg1[5]) * (x8 * 0x2)); x39 = ((arg1[5]) * x11); x40 = ((arg1[5]) * (x14 * 0x2)); x41 = ((uint64_t)(arg1[5]) * ((arg1[5]) * 0x2)); x42 = ((arg1[4]) * (x2 * 0x2)); x43 = ((arg1[4]) * (x5 * 0x2)); x44 = ((arg1[4]) * (x8 * 0x2)); x45 = ((arg1[4]) * (x11 * 0x2)); x46 = ((uint64_t)(arg1[4]) * (x15 * 0x2)); x47 = ((uint64_t)(arg1[4]) * (x16 * 0x2)); x48 = ((uint64_t)(arg1[4]) * ((arg1[4]) * 0x2)); x49 = ((arg1[3]) * x2); x50 = ((arg1[3]) * x5); x51 = ((arg1[3]) * (x8 * 0x2)); x52 = ((uint64_t)(arg1[3]) * x12); x53 = ((uint64_t)(arg1[3]) * x15); x54 = ((uint64_t)(arg1[3]) * x16); x55 = ((uint64_t)(arg1[3]) * (x17 * 0x2)); x56 = ((uint64_t)(arg1[3]) * (arg1[3])); x57 = ((arg1[2]) * x2); x58 = ((arg1[2]) * (x5 * 0x2)); x59 = ((uint64_t)(arg1[2]) * (x9 * 0x2)); x60 = ((uint64_t)(arg1[2]) * x12); x61 = ((uint64_t)(arg1[2]) * x15); x62 = ((uint64_t)(arg1[2]) * (x16 * 0x2)); x63 = ((uint64_t)(arg1[2]) * (x17 * 0x2)); x64 = ((uint64_t)(arg1[2]) * x18); x65 = ((uint64_t)(arg1[2]) * (arg1[2])); x66 = ((arg1[1]) * (x2 * 0x2)); x67 = ((uint64_t)(arg1[1]) * (x6 * 0x2)); x68 = ((uint64_t)(arg1[1]) * (x9 * 0x2)); x69 = ((uint64_t)(arg1[1]) * x12); x70 = ((uint64_t)(arg1[1]) * (x15 * 0x2)); x71 = ((uint64_t)(arg1[1]) * (x16 * 0x2)); x72 = ((uint64_t)(arg1[1]) * (x17 * 0x2)); x73 = ((uint64_t)(arg1[1]) * x18); x74 = ((uint64_t)(arg1[1]) * (x19 * 0x2)); x75 = ((uint64_t)(arg1[1]) * ((arg1[1]) * 0x2)); x76 = ((uint64_t)(arg1[0]) * x3); x77 = ((uint64_t)(arg1[0]) * x6); x78 = ((uint64_t)(arg1[0]) * x9); x79 = ((uint64_t)(arg1[0]) * x12); x80 = ((uint64_t)(arg1[0]) * x15); x81 = ((uint64_t)(arg1[0]) * x16); x82 = ((uint64_t)(arg1[0]) * x17); x83 = ((uint64_t)(arg1[0]) * x18); x84 = ((uint64_t)(arg1[0]) * x19); x85 = ((uint64_t)(arg1[0]) * x20); x86 = ((uint64_t)(arg1[0]) * (arg1[0])); x87 = (x86 + (x66 + (x58 + (x51 + (x45 + x40))))); x88 = (x87 >> 24); x89 = (uint32_t)(x87 & UINT32_C(0xffffff)); x90 = (x76 + (x67 + (x59 + (x52 + (x46 + x41))))); x91 = (x77 + (x68 + (x60 + (x53 + (x47 + x21))))); x92 = (x78 + (x69 + (x61 + (x54 + (x48 + x22))))); x93 = (x79 + (x70 + (x62 + (x55 + (x24 + x23))))); x94 = (x80 + (x71 + (x63 + (x56 + (x27 + x25))))); x95 = (x81 + (x72 + (x64 + (x31 + (x28 + x26))))); x96 = (x82 + (x73 + (x65 + (x36 + (x32 + x29))))); x97 = (x83 + (x74 + (x42 + (x37 + (x33 + x30))))); x98 = (x84 + (x75 + (x49 + (x43 + (x38 + x34))))); x99 = (x85 + (x57 + (x50 + (x44 + (x39 + x35))))); x100 = (x88 + x99); x101 = (x100 >> 23); x102 = (uint32_t)(x100 & UINT32_C(0x7fffff)); x103 = (x101 + x98); x104 = (x103 >> 23); x105 = (uint32_t)(x103 & UINT32_C(0x7fffff)); x106 = (x104 + x97); x107 = (x106 >> 24); x108 = (uint32_t)(x106 & UINT32_C(0xffffff)); x109 = (x107 + x96); x110 = (x109 >> 23); x111 = (uint32_t)(x109 & UINT32_C(0x7fffff)); x112 = (x110 + x95); x113 = (x112 >> 23); x114 = (uint32_t)(x112 & UINT32_C(0x7fffff)); x115 = (x113 + x94); x116 = (x115 >> 23); x117 = (uint32_t)(x115 & UINT32_C(0x7fffff)); x118 = (x116 + x93); x119 = (x118 >> 24); x120 = (uint32_t)(x118 & UINT32_C(0xffffff)); x121 = (x119 + x92); x122 = (x121 >> 23); x123 = (uint32_t)(x121 & UINT32_C(0x7fffff)); x124 = (x122 + x91); x125 = (x124 >> 23); x126 = (uint32_t)(x124 & UINT32_C(0x7fffff)); x127 = (x125 + x90); x128 = (uint32_t)(x127 >> 23); x129 = (uint32_t)(x127 & UINT32_C(0x7fffff)); x130 = ((uint64_t)UINT16_C(0x269) * x128); x131 = (x89 + x130); x132 = (uint32_t)(x131 >> 24); x133 = (uint32_t)(x131 & UINT32_C(0xffffff)); x134 = (x132 + x102); x135 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x134 >> 23); x136 = (x134 & UINT32_C(0x7fffff)); x137 = (x135 + x105); out1[0] = x133; out1[1] = x136; out1[2] = x137; out1[3] = x108; out1[4] = x111; out1[5] = x114; out1[6] = x117; out1[7] = x120; out1[8] = x123; out1[9] = x126; out1[10] = x129; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_carry reduces a field element. * Postconditions: * eval out1 mod m = eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] * Output Bounds: * out1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_carry( uint32_t out1[11], const uint32_t arg1[11]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; x1 = (arg1[0]); x2 = ((x1 >> 24) + (arg1[1])); x3 = ((x2 >> 23) + (arg1[2])); x4 = ((x3 >> 23) + (arg1[3])); x5 = ((x4 >> 24) + (arg1[4])); x6 = ((x5 >> 23) + (arg1[5])); x7 = ((x6 >> 23) + (arg1[6])); x8 = ((x7 >> 23) + (arg1[7])); x9 = ((x8 >> 24) + (arg1[8])); x10 = ((x9 >> 23) + (arg1[9])); x11 = ((x10 >> 23) + (arg1[10])); x12 = ((x1 & UINT32_C(0xffffff)) + (UINT16_C(0x269) * (x11 >> 23))); x13 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x12 >> 24) + (x2 & UINT32_C(0x7fffff))); x14 = (x12 & UINT32_C(0xffffff)); x15 = (x13 & UINT32_C(0x7fffff)); x16 = ((fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x13 >> 23) + (x3 & UINT32_C(0x7fffff))); x17 = (x4 & UINT32_C(0xffffff)); x18 = (x5 & UINT32_C(0x7fffff)); x19 = (x6 & UINT32_C(0x7fffff)); x20 = (x7 & UINT32_C(0x7fffff)); x21 = (x8 & UINT32_C(0xffffff)); x22 = (x9 & UINT32_C(0x7fffff)); x23 = (x10 & UINT32_C(0x7fffff)); x24 = (x11 & UINT32_C(0x7fffff)); out1[0] = x14; out1[1] = x15; out1[2] = x16; out1[3] = x17; out1[4] = x18; out1[5] = x19; out1[6] = x20; out1[7] = x21; out1[8] = x22; out1[9] = x23; out1[10] = x24; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_add adds two field elements. * Postconditions: * eval out1 mod m = (eval arg1 + eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * arg2: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * Output Bounds: * out1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_add( uint32_t out1[11], const uint32_t arg1[11], const uint32_t arg2[11]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; x1 = ((arg1[0]) + (arg2[0])); x2 = ((arg1[1]) + (arg2[1])); x3 = ((arg1[2]) + (arg2[2])); x4 = ((arg1[3]) + (arg2[3])); x5 = ((arg1[4]) + (arg2[4])); x6 = ((arg1[5]) + (arg2[5])); x7 = ((arg1[6]) + (arg2[6])); x8 = ((arg1[7]) + (arg2[7])); x9 = ((arg1[8]) + (arg2[8])); x10 = ((arg1[9]) + (arg2[9])); x11 = ((arg1[10]) + (arg2[10])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_sub subtracts two field elements. * Postconditions: * eval out1 mod m = (eval arg1 - eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * arg2: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * Output Bounds: * out1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_sub( uint32_t out1[11], const uint32_t arg1[11], const uint32_t arg2[11]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; x1 = ((UINT32_C(0x1fffb2e) + (arg1[0])) - (arg2[0])); x2 = ((UINT32_C(0xfffffe) + (arg1[1])) - (arg2[1])); x3 = ((UINT32_C(0xfffffe) + (arg1[2])) - (arg2[2])); x4 = ((UINT32_C(0x1fffffe) + (arg1[3])) - (arg2[3])); x5 = ((UINT32_C(0xfffffe) + (arg1[4])) - (arg2[4])); x6 = ((UINT32_C(0xfffffe) + (arg1[5])) - (arg2[5])); x7 = ((UINT32_C(0xfffffe) + (arg1[6])) - (arg2[6])); x8 = ((UINT32_C(0x1fffffe) + (arg1[7])) - (arg2[7])); x9 = ((UINT32_C(0xfffffe) + (arg1[8])) - (arg2[8])); x10 = ((UINT32_C(0xfffffe) + (arg1[9])) - (arg2[9])); x11 = ((UINT32_C(0xfffffe) + (arg1[10])) - (arg2[10])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_opp negates a field element. * Postconditions: * eval out1 mod m = -eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * Output Bounds: * out1: [[0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x3000000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000], [0x0 ~> 0x1800000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_opp( uint32_t out1[11], const uint32_t arg1[11]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; x1 = (UINT32_C(0x1fffb2e) - (arg1[0])); x2 = (UINT32_C(0xfffffe) - (arg1[1])); x3 = (UINT32_C(0xfffffe) - (arg1[2])); x4 = (UINT32_C(0x1fffffe) - (arg1[3])); x5 = (UINT32_C(0xfffffe) - (arg1[4])); x6 = (UINT32_C(0xfffffe) - (arg1[5])); x7 = (UINT32_C(0xfffffe) - (arg1[6])); x8 = (UINT32_C(0x1fffffe) - (arg1[7])); x9 = (UINT32_C(0xfffffe) - (arg1[8])); x10 = (UINT32_C(0xfffffe) - (arg1[9])); x11 = (UINT32_C(0xfffffe) - (arg1[10])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( uint32_t out1[11], fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 arg1, const uint32_t arg2[11], const uint32_t arg3[11]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x9, arg1, (arg2[8]), (arg3[8])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x10, arg1, (arg2[9]), (arg3[9])); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32( &x11, arg1, (arg2[10]), (arg3[10])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes serializes a field element to bytes in little-endian order. * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..31] * * Input Bounds: * arg1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes( uint8_t out1[32], const uint32_t arg1[11]) { uint32_t x1; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x2; uint32_t x3; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x4; uint32_t x5; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x6; uint32_t x7; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x8; uint32_t x9; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x10; uint32_t x11; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x12; uint32_t x13; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x14; uint32_t x15; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x16; uint32_t x17; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x18; uint32_t x19; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x20; uint32_t x21; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x22; uint32_t x23; uint32_t x24; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x25; uint32_t x26; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x27; uint32_t x28; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x29; uint32_t x30; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x31; uint32_t x32; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x33; uint32_t x34; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x35; uint32_t x36; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x37; uint32_t x38; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x39; uint32_t x40; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x41; uint32_t x42; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x43; uint32_t x44; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; uint8_t x55; uint32_t x56; uint8_t x57; uint8_t x58; uint8_t x59; uint32_t x60; uint8_t x61; uint8_t x62; uint32_t x63; uint8_t x64; uint32_t x65; uint8_t x66; uint32_t x67; uint8_t x68; uint8_t x69; uint32_t x70; uint8_t x71; uint32_t x72; uint8_t x73; uint32_t x74; uint8_t x75; uint8_t x76; uint32_t x77; uint8_t x78; uint32_t x79; uint8_t x80; uint32_t x81; uint8_t x82; uint8_t x83; uint32_t x84; uint8_t x85; uint32_t x86; uint8_t x87; uint32_t x88; uint8_t x89; uint8_t x90; uint32_t x91; uint8_t x92; uint32_t x93; uint8_t x94; uint32_t x95; uint8_t x96; uint8_t x97; uint32_t x98; uint8_t x99; uint32_t x100; uint8_t x101; uint32_t x102; uint8_t x103; uint8_t x104; uint32_t x105; uint8_t x106; uint32_t x107; uint8_t x108; uint32_t x109; uint8_t x110; uint8_t x111; uint32_t x112; uint8_t x113; uint32_t x114; uint8_t x115; uint32_t x116; uint8_t x117; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x118; uint32_t x119; uint8_t x120; uint32_t x121; uint8_t x122; uint8_t x123; fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u24( &x1, &x2, 0x0, (arg1[0]), UINT32_C(0xfffd97)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u23( &x3, &x4, x2, (arg1[1]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u23( &x5, &x6, x4, (arg1[2]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u24( &x7, &x8, x6, (arg1[3]), UINT32_C(0xffffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u23( &x9, &x10, x8, (arg1[4]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u23( &x11, &x12, x10, (arg1[5]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u23( &x13, &x14, x12, (arg1[6]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u24( &x15, &x16, x14, (arg1[7]), UINT32_C(0xffffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u23( &x17, &x18, x16, (arg1[8]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u23( &x19, &x20, x18, (arg1[9]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_subborrowx_u23( &x21, &x22, x20, (arg1[10]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_cmovznz_u32(&x23, x22, 0x0, UINT32_C(0xffffffff)); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u24( &x24, &x25, 0x0, x1, (x23 & UINT32_C(0xfffd97))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u23( &x26, &x27, x25, x3, (x23 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u23( &x28, &x29, x27, x5, (x23 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u24( &x30, &x31, x29, x7, (x23 & UINT32_C(0xffffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u23( &x32, &x33, x31, x9, (x23 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u23( &x34, &x35, x33, x11, (x23 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u23( &x36, &x37, x35, x13, (x23 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u24( &x38, &x39, x37, x15, (x23 & UINT32_C(0xffffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u23( &x40, &x41, x39, x17, (x23 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u23( &x42, &x43, x41, x19, (x23 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_256_paramSetA_addcarryx_u23( &x44, &x45, x43, x21, (x23 & UINT32_C(0x7fffff))); x46 = (x44 * (uint32_t)0x2); x47 = (x42 << 2); x48 = (x40 << 3); x49 = (x38 << 3); x50 = (x36 << 4); x51 = (x34 << 5); x52 = (x32 << 6); x53 = (x30 << 6); x54 = (x28 << 7); x55 = (uint8_t)(x24 & UINT8_C(0xff)); x56 = (x24 >> 8); x57 = (uint8_t)(x56 & UINT8_C(0xff)); x58 = (uint8_t)(x56 >> 8); x59 = (uint8_t)(x26 & UINT8_C(0xff)); x60 = (x26 >> 8); x61 = (uint8_t)(x60 & UINT8_C(0xff)); x62 = (uint8_t)(x60 >> 8); x63 = (x54 + (uint32_t)x62); x64 = (uint8_t)(x63 & UINT8_C(0xff)); x65 = (x63 >> 8); x66 = (uint8_t)(x65 & UINT8_C(0xff)); x67 = (x65 >> 8); x68 = (uint8_t)(x67 & UINT8_C(0xff)); x69 = (uint8_t)(x67 >> 8); x70 = (x53 + (uint32_t)x69); x71 = (uint8_t)(x70 & UINT8_C(0xff)); x72 = (x70 >> 8); x73 = (uint8_t)(x72 & UINT8_C(0xff)); x74 = (x72 >> 8); x75 = (uint8_t)(x74 & UINT8_C(0xff)); x76 = (uint8_t)(x74 >> 8); x77 = (x52 + (uint32_t)x76); x78 = (uint8_t)(x77 & UINT8_C(0xff)); x79 = (x77 >> 8); x80 = (uint8_t)(x79 & UINT8_C(0xff)); x81 = (x79 >> 8); x82 = (uint8_t)(x81 & UINT8_C(0xff)); x83 = (uint8_t)(x81 >> 8); x84 = (x51 + (uint32_t)x83); x85 = (uint8_t)(x84 & UINT8_C(0xff)); x86 = (x84 >> 8); x87 = (uint8_t)(x86 & UINT8_C(0xff)); x88 = (x86 >> 8); x89 = (uint8_t)(x88 & UINT8_C(0xff)); x90 = (uint8_t)(x88 >> 8); x91 = (x50 + (uint32_t)x90); x92 = (uint8_t)(x91 & UINT8_C(0xff)); x93 = (x91 >> 8); x94 = (uint8_t)(x93 & UINT8_C(0xff)); x95 = (x93 >> 8); x96 = (uint8_t)(x95 & UINT8_C(0xff)); x97 = (uint8_t)(x95 >> 8); x98 = (x49 + (uint32_t)x97); x99 = (uint8_t)(x98 & UINT8_C(0xff)); x100 = (x98 >> 8); x101 = (uint8_t)(x100 & UINT8_C(0xff)); x102 = (x100 >> 8); x103 = (uint8_t)(x102 & UINT8_C(0xff)); x104 = (uint8_t)(x102 >> 8); x105 = (x48 + (uint32_t)x104); x106 = (uint8_t)(x105 & UINT8_C(0xff)); x107 = (x105 >> 8); x108 = (uint8_t)(x107 & UINT8_C(0xff)); x109 = (x107 >> 8); x110 = (uint8_t)(x109 & UINT8_C(0xff)); x111 = (uint8_t)(x109 >> 8); x112 = (x47 + (uint32_t)x111); x113 = (uint8_t)(x112 & UINT8_C(0xff)); x114 = (x112 >> 8); x115 = (uint8_t)(x114 & UINT8_C(0xff)); x116 = (x114 >> 8); x117 = (uint8_t)(x116 & UINT8_C(0xff)); x118 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x116 >> 8); x119 = (x46 + (uint32_t)x118); x120 = (uint8_t)(x119 & UINT8_C(0xff)); x121 = (x119 >> 8); x122 = (uint8_t)(x121 & UINT8_C(0xff)); x123 = (uint8_t)(x121 >> 8); out1[0] = x55; out1[1] = x57; out1[2] = x58; out1[3] = x59; out1[4] = x61; out1[5] = x64; out1[6] = x66; out1[7] = x68; out1[8] = x71; out1[9] = x73; out1[10] = x75; out1[11] = x78; out1[12] = x80; out1[13] = x82; out1[14] = x85; out1[15] = x87; out1[16] = x89; out1[17] = x92; out1[18] = x94; out1[19] = x96; out1[20] = x99; out1[21] = x101; out1[22] = x103; out1[23] = x106; out1[24] = x108; out1[25] = x110; out1[26] = x113; out1[27] = x115; out1[28] = x117; out1[29] = x120; out1[30] = x122; out1[31] = x123; } /* * The function fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes deserializes a field element from bytes in little-endian order. * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x1000000], [0x0 ~> 0x800000], [0x0 ~> 0x800000], [0x0 ~> 0x800000]] */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes( uint32_t out1[11], const uint8_t arg1[32]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint8_t x29; uint32_t x30; uint32_t x31; uint8_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1 x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint8_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint8_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint8_t x53; uint32_t x54; uint32_t x55; uint32_t x56; uint32_t x57; uint8_t x58; uint32_t x59; uint32_t x60; uint32_t x61; uint32_t x62; uint8_t x63; uint32_t x64; uint32_t x65; uint32_t x66; uint32_t x67; uint8_t x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint8_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint8_t x78; uint32_t x79; uint32_t x80; x1 = ((uint32_t)(arg1[31]) << 15); x2 = ((uint32_t)(arg1[30]) << 7); x3 = ((uint32_t)(arg1[29]) << 22); x4 = ((uint32_t)(arg1[28]) << 14); x5 = ((uint32_t)(arg1[27]) << 6); x6 = ((uint32_t)(arg1[26]) << 21); x7 = ((uint32_t)(arg1[25]) << 13); x8 = ((uint32_t)(arg1[24]) << 5); x9 = ((uint32_t)(arg1[23]) << 21); x10 = ((uint32_t)(arg1[22]) << 13); x11 = ((uint32_t)(arg1[21]) << 5); x12 = ((uint32_t)(arg1[20]) << 20); x13 = ((uint32_t)(arg1[19]) << 12); x14 = ((uint32_t)(arg1[18]) << 4); x15 = ((uint32_t)(arg1[17]) << 19); x16 = ((uint32_t)(arg1[16]) << 11); x17 = ((uint32_t)(arg1[15]) << 3); x18 = ((uint32_t)(arg1[14]) << 18); x19 = ((uint32_t)(arg1[13]) << 10); x20 = ((uint32_t)(arg1[12]) << 2); x21 = ((uint32_t)(arg1[11]) << 18); x22 = ((uint32_t)(arg1[10]) << 10); x23 = ((uint32_t)(arg1[9]) << 2); x24 = ((uint32_t)(arg1[8]) << 17); x25 = ((uint32_t)(arg1[7]) << 9); x26 = ((uint32_t)(arg1[6]) * 0x2); x27 = ((uint32_t)(arg1[5]) << 16); x28 = ((uint32_t)(arg1[4]) << 8); x29 = (arg1[3]); x30 = ((uint32_t)(arg1[2]) << 16); x31 = ((uint32_t)(arg1[1]) << 8); x32 = (arg1[0]); x33 = (x31 + (uint32_t)x32); x34 = (x30 + x33); x35 = (x28 + (uint32_t)x29); x36 = (x27 + x35); x37 = (x36 & UINT32_C(0x7fffff)); x38 = (fiat_id_tc26_gost_3410_2012_256_paramSetA_uint1)(x36 >> 23); x39 = (x26 + (uint32_t)x38); x40 = (x25 + x39); x41 = (x24 + x40); x42 = (x41 & UINT32_C(0x7fffff)); x43 = (uint8_t)(x41 >> 23); x44 = (x23 + (uint32_t)x43); x45 = (x22 + x44); x46 = (x21 + x45); x47 = (x46 & UINT32_C(0xffffff)); x48 = (uint8_t)(x46 >> 24); x49 = (x20 + (uint32_t)x48); x50 = (x19 + x49); x51 = (x18 + x50); x52 = (x51 & UINT32_C(0x7fffff)); x53 = (uint8_t)(x51 >> 23); x54 = (x17 + (uint32_t)x53); x55 = (x16 + x54); x56 = (x15 + x55); x57 = (x56 & UINT32_C(0x7fffff)); x58 = (uint8_t)(x56 >> 23); x59 = (x14 + (uint32_t)x58); x60 = (x13 + x59); x61 = (x12 + x60); x62 = (x61 & UINT32_C(0x7fffff)); x63 = (uint8_t)(x61 >> 23); x64 = (x11 + (uint32_t)x63); x65 = (x10 + x64); x66 = (x9 + x65); x67 = (x66 & UINT32_C(0xffffff)); x68 = (uint8_t)(x66 >> 24); x69 = (x8 + (uint32_t)x68); x70 = (x7 + x69); x71 = (x6 + x70); x72 = (x71 & UINT32_C(0x7fffff)); x73 = (uint8_t)(x71 >> 23); x74 = (x5 + (uint32_t)x73); x75 = (x4 + x74); x76 = (x3 + x75); x77 = (x76 & UINT32_C(0x7fffff)); x78 = (uint8_t)(x76 >> 23); x79 = (x2 + (uint32_t)x78); x80 = (x1 + x79); out1[0] = x34; out1[1] = x37; out1[2] = x42; out1[3] = x47; out1[4] = x52; out1[5] = x57; out1[6] = x62; out1[7] = x67; out1[8] = x72; out1[9] = x77; out1[10] = x80; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_tc26_gost_3410_2012_256_paramSetA/fe_inv.op3 * custom repunit addition chain */ static void fiat_id_tc26_gost_3410_2012_256_paramSetA_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t16, t164, t2, t246, t32, t4, t64, t8, t80, t82; fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t2, acc, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t4, acc, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t4); for (i = 0; i < 3; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t8, acc, t4); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t8); for (i = 0; i < 7; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t16, acc, t8); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t16); for (i = 0; i < 15; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t32, acc, t16); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t32); for (i = 0; i < 31; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t64, acc, t32); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t64); for (i = 0; i < 15; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t80, acc, t16); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t80); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t82, acc, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t82); for (i = 0; i < 81; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t164, acc, t82); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t164); for (i = 0; i < 81; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t246, acc, t82); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, t246); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(acc, acc, t2); for (i = 0; i < 3; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(output, acc, t1); } /* curve coefficient constants */ static const limb_t const_one[11] = { UINT32_C(0x00000001), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000)}; static const limb_t const_d[11] = { UINT32_C(0x00C7BFFB), UINT32_C(0x00432D6D), UINT32_C(0x006FCA45), UINT32_C(0x005C026B), UINT32_C(0x0077D8A2), UINT32_C(0x0040995C), UINT32_C(0x004FAD51), UINT32_C(0x00F17873), UINT32_C(0x007F502A), UINT32_C(0x002DF060), UINT32_C(0x000302FB)}; static const limb_t const_S[11] = { UINT32_C(0x008E0ECD), UINT32_C(0x004F34A4), UINT32_C(0x00040D6E), UINT32_C(0x0068FF65), UINT32_C(0x006209D7), UINT32_C(0x004FD9A8), UINT32_C(0x000C14AB), UINT32_C(0x0043A1E3), UINT32_C(0x00602BF5), UINT32_C(0x001483E7), UINT32_C(0x003F3F41)}; static const limb_t const_T[11] = { UINT32_C(0x00A14AAA), UINT32_C(0x0075DCE7), UINT32_C(0x007D4C60), UINT32_C(0x0064AB11), UINT32_C(0x0013F970), UINT32_C(0x004AC43A), UINT32_C(0x004D478D), UINT32_C(0x00D2E968), UINT32_C(0x003FE2B1), UINT32_C(0x001CFD65), UINT32_C(0x0000807F)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[14][16] = { { {{UINT32_C(0x0000000D), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000)}, {UINT32_C(0x00A300E7), UINT32_C(0x002592DB), UINT32_C(0x0003F256), UINT32_C(0x001FC8BA), UINT32_C(0x003E36FA), UINT32_C(0x0024E73F), UINT32_C(0x007AB076), UINT32_C(0x00911871), UINT32_C(0x006B6690), UINT32_C(0x000CAA91), UINT32_C(0x0030650F)}, {UINT32_C(0x0047155F), UINT32_C(0x00687527), UINT32_C(0x00334E61), UINT32_C(0x009D3172), UINT32_C(0x0028CAB3), UINT32_C(0x005FBE39), UINT32_C(0x003AF601), UINT32_C(0x005E3DC9), UINT32_C(0x00743557), UINT32_C(0x0024A967), UINT32_C(0x007521C4)}}, {{UINT32_C(0x0051134C), UINT32_C(0x0063D934), UINT32_C(0x000994F4), UINT32_C(0x00E91B07), UINT32_C(0x00439CFD), UINT32_C(0x0055A4D9), UINT32_C(0x00181579), UINT32_C(0x0089F4E6), UINT32_C(0x005E989F), UINT32_C(0x002C52EC), UINT32_C(0x0054E159)}, {UINT32_C(0x00DB5791), UINT32_C(0x00525DDC), UINT32_C(0x006F7908), UINT32_C(0x00AAB332), UINT32_C(0x00279FCD), UINT32_C(0x00522145), UINT32_C(0x0059CBA7), UINT32_C(0x00B33511), UINT32_C(0x000C6593), UINT32_C(0x0059CF0A), UINT32_C(0x0016BDEB)}, {UINT32_C(0x00CBC030), UINT32_C(0x00732788), UINT32_C(0x005A0DF8), UINT32_C(0x00C8799D), UINT32_C(0x0019C571), UINT32_C(0x0007F6EF), UINT32_C(0x00729208), UINT32_C(0x00D7466B), UINT32_C(0x004ACA39), UINT32_C(0x0056009D), UINT32_C(0x00586898)}}, {{UINT32_C(0x007058AD), UINT32_C(0x00094E45), UINT32_C(0x00420275), UINT32_C(0x005FD239), UINT32_C(0x00444F1F), UINT32_C(0x00299CBF), UINT32_C(0x002C9ADA), UINT32_C(0x00816030), UINT32_C(0x00255119), UINT32_C(0x0004FD8A), UINT32_C(0x000F011D)}, {UINT32_C(0x00B22BCC), UINT32_C(0x00380EB0), UINT32_C(0x0075817F), UINT32_C(0x00B68F07), UINT32_C(0x0065DD81), UINT32_C(0x00433816), UINT32_C(0x005064DD), UINT32_C(0x00DF04CF), UINT32_C(0x000A89F8), UINT32_C(0x0061BAC3), UINT32_C(0x002AEE30)}, {UINT32_C(0x00831C0C), UINT32_C(0x006D5422), UINT32_C(0x005EFCE9), UINT32_C(0x004B9CD7), UINT32_C(0x003E61FB), UINT32_C(0x001487DD), UINT32_C(0x0011779C), UINT32_C(0x0036DFD0), UINT32_C(0x005A0784), UINT32_C(0x0059323A), UINT32_C(0x002BA6DC)}}, {{UINT32_C(0x00B0B356), UINT32_C(0x0066CD5D), UINT32_C(0x0010AFBC), UINT32_C(0x00023E69), UINT32_C(0x007B3FA1), UINT32_C(0x003A3F07), UINT32_C(0x007B8F99), UINT32_C(0x000415F9), UINT32_C(0x0073141E), UINT32_C(0x00072DB3), UINT32_C(0x007B2887)}, {UINT32_C(0x00EFDCBE), UINT32_C(0x0061FDB8), UINT32_C(0x004A709F), UINT32_C(0x00849CD0), UINT32_C(0x002A36FC), UINT32_C(0x003BB056), UINT32_C(0x00356C38), UINT32_C(0x007A9084), UINT32_C(0x000B6422), UINT32_C(0x00130D7D), UINT32_C(0x001CD6F3)}, {UINT32_C(0x00AA7E64), UINT32_C(0x0012D2BE), UINT32_C(0x0055120E), UINT32_C(0x00938524), UINT32_C(0x000C79B2), UINT32_C(0x0058FE4B), UINT32_C(0x00510FB7), UINT32_C(0x00D0F8E2), UINT32_C(0x0063F17F), UINT32_C(0x002D4711), UINT32_C(0x002725A4)}}, {{UINT32_C(0x004C6781), UINT32_C(0x00627F87), UINT32_C(0x00489AA7), UINT32_C(0x002F770F), UINT32_C(0x000D2620), UINT32_C(0x001E8468), UINT32_C(0x003F6D7E), UINT32_C(0x00C5511D), UINT32_C(0x006CDB93), UINT32_C(0x006842D1), UINT32_C(0x004D7CF0)}, {UINT32_C(0x00D1AE96), UINT32_C(0x0000090D), UINT32_C(0x0006C4DB), UINT32_C(0x00CE5C55), UINT32_C(0x00144E90), UINT32_C(0x004BED80), UINT32_C(0x004E53B7), UINT32_C(0x001FE39D), UINT32_C(0x0042F35D), UINT32_C(0x004AEB11), UINT32_C(0x005F6DBA)}, {UINT32_C(0x00499A0E), UINT32_C(0x007885A2), UINT32_C(0x00030BDC), UINT32_C(0x001EDFDB), UINT32_C(0x00438B15), UINT32_C(0x0072B2EE), UINT32_C(0x004AC01E), UINT32_C(0x003EC678), UINT32_C(0x005F2133), UINT32_C(0x0011BD06), UINT32_C(0x002EA8E4)}}, {{UINT32_C(0x00226F30), UINT32_C(0x005E7B60), UINT32_C(0x0009837F), UINT32_C(0x00851533), UINT32_C(0x0006EFB9), UINT32_C(0x00130938), UINT32_C(0x001063CE), UINT32_C(0x0019C098), UINT32_C(0x00605AC6), UINT32_C(0x004D2A8D), UINT32_C(0x00240305)}, {UINT32_C(0x006AE25F), UINT32_C(0x000EF2E0), UINT32_C(0x001F427E), UINT32_C(0x00CD4540), UINT32_C(0x003C6996), UINT32_C(0x0035E452), UINT32_C(0x005A6442), UINT32_C(0x007BC7A6), UINT32_C(0x003D0529), UINT32_C(0x0021E8F3), UINT32_C(0x0052A46E)}, {UINT32_C(0x007F4E9D), UINT32_C(0x000ECC55), UINT32_C(0x0037EE5A), UINT32_C(0x004ADDB7), UINT32_C(0x004DA3F4), UINT32_C(0x005764C9), UINT32_C(0x001C40F1), UINT32_C(0x00C1111E), UINT32_C(0x000B0764), UINT32_C(0x007DD2E6), UINT32_C(0x001388A4)}}, {{UINT32_C(0x0095A16C), UINT32_C(0x0008DD08), UINT32_C(0x005FC5C5), UINT32_C(0x0081C743), UINT32_C(0x0000D180), UINT32_C(0x000F8EE9), UINT32_C(0x0003FEF5), UINT32_C(0x00CF52AF), UINT32_C(0x007E4EDC), UINT32_C(0x0052DFAC), UINT32_C(0x0057C4FB)}, {UINT32_C(0x00E2B732), UINT32_C(0x005BEBA4), UINT32_C(0x001D1662), UINT32_C(0x00FE39C5), UINT32_C(0x0058807D), UINT32_C(0x004BBC55), UINT32_C(0x0020454A), UINT32_C(0x00A84E47), UINT32_C(0x0034B9B8), UINT32_C(0x004B9BC7), UINT32_C(0x00362B2B)}, {UINT32_C(0x00D51136), UINT32_C(0x0005D2D8), UINT32_C(0x000FECF5), UINT32_C(0x0088AA07), UINT32_C(0x004BB57C), UINT32_C(0x003A4AD1), UINT32_C(0x001B78C1), UINT32_C(0x00162747), UINT32_C(0x002DBFA9), UINT32_C(0x0017B251), UINT32_C(0x00431084)}}, {{UINT32_C(0x003DC33C), UINT32_C(0x00238321), UINT32_C(0x002858CB), UINT32_C(0x006E05B3), UINT32_C(0x000F55FA), UINT32_C(0x002BA1C2), UINT32_C(0x007BBFD4), UINT32_C(0x00A06A51), UINT32_C(0x003672AF), UINT32_C(0x001A9B5B), UINT32_C(0x004F6D26)}, {UINT32_C(0x009F55A3), UINT32_C(0x000F6705), UINT32_C(0x004EDA64), UINT32_C(0x00D8FBA8), UINT32_C(0x006E341D), UINT32_C(0x005FDC16), UINT32_C(0x003F8CD0), UINT32_C(0x0031F5C1), UINT32_C(0x002ECA27), UINT32_C(0x006E2E8E), UINT32_C(0x007650A0)}, {UINT32_C(0x004C828B), UINT32_C(0x004D65DD), UINT32_C(0x0023D49F), UINT32_C(0x00998DDA), UINT32_C(0x004E0332), UINT32_C(0x00174414), UINT32_C(0x00699E65), UINT32_C(0x008F8323), UINT32_C(0x002B8901), UINT32_C(0x0012C259), UINT32_C(0x0021CFF4)}}, {{UINT32_C(0x00922362), UINT32_C(0x0048A92F), UINT32_C(0x004D734D), UINT32_C(0x00C47EE4), UINT32_C(0x00113110), UINT32_C(0x00157C19), UINT32_C(0x00221251), UINT32_C(0x00024872), UINT32_C(0x001E2816), UINT32_C(0x003DF03D), UINT32_C(0x00181B9C)}, {UINT32_C(0x00012FCF), UINT32_C(0x0047EB3F), UINT32_C(0x006C2B35), UINT32_C(0x00F85359), UINT32_C(0x0032819B), UINT32_C(0x004E64B2), UINT32_C(0x00600748), UINT32_C(0x00944305), UINT32_C(0x001ED335), UINT32_C(0x005DCD46), UINT32_C(0x004FA013)}, {UINT32_C(0x003393AB), UINT32_C(0x002D18CD), UINT32_C(0x002579E1), UINT32_C(0x0079F6D2), UINT32_C(0x00032785), UINT32_C(0x00679042), UINT32_C(0x003532E2), UINT32_C(0x00E10DCE), UINT32_C(0x00480E01), UINT32_C(0x00426205), UINT32_C(0x0053FD4D)}}, {{UINT32_C(0x00C6B0CB), UINT32_C(0x007C89A2), UINT32_C(0x0078D667), UINT32_C(0x00FF9964), UINT32_C(0x006EE83C), UINT32_C(0x006E7BF5), UINT32_C(0x007599F3), UINT32_C(0x004D669F), UINT32_C(0x0065012B), UINT32_C(0x005EBA50), UINT32_C(0x00304E71)}, {UINT32_C(0x00C53736), UINT32_C(0x000B3E67), UINT32_C(0x00126BEE), UINT32_C(0x00261DF0), UINT32_C(0x005AF18B), UINT32_C(0x005B38F7), UINT32_C(0x000082AC), UINT32_C(0x0017B3DB), UINT32_C(0x007C32BA), UINT32_C(0x00724F37), UINT32_C(0x001F8FD1)}, {UINT32_C(0x0080CCBF), UINT32_C(0x0018D8B8), UINT32_C(0x006E22B9), UINT32_C(0x00591C57), UINT32_C(0x0011E0B1), UINT32_C(0x0079970A), UINT32_C(0x0070D898), UINT32_C(0x00D9733F), UINT32_C(0x00259708), UINT32_C(0x0062101F), UINT32_C(0x00306235)}}, {{UINT32_C(0x002F49E9), UINT32_C(0x006E57BC), UINT32_C(0x00094045), UINT32_C(0x00CF8C2B), UINT32_C(0x0010A5CA), UINT32_C(0x00478E10), UINT32_C(0x000A83ED), UINT32_C(0x00EB329A), UINT32_C(0x0054EE99), UINT32_C(0x00112D75), UINT32_C(0x001A7633)}, {UINT32_C(0x00762A44), UINT32_C(0x007F7B5B), UINT32_C(0x006BF456), UINT32_C(0x00680D50), UINT32_C(0x00734ECC), UINT32_C(0x00770776), UINT32_C(0x0041B3F1), UINT32_C(0x00DB7326), UINT32_C(0x007A5C18), UINT32_C(0x0009A04C), UINT32_C(0x006F2281)}, {UINT32_C(0x00392E55), UINT32_C(0x00180EF7), UINT32_C(0x00539457), UINT32_C(0x0027985E), UINT32_C(0x0030AE2E), UINT32_C(0x0006A2FA), UINT32_C(0x0075FD5D), UINT32_C(0x0023429D), UINT32_C(0x0041CD65), UINT32_C(0x00710776), UINT32_C(0x0075B4D3)}}, {{UINT32_C(0x00297799), UINT32_C(0x0050EDAC), UINT32_C(0x0017E4E4), UINT32_C(0x00B06306), UINT32_C(0x0011957C), UINT32_C(0x00454CDB), UINT32_C(0x0037CE52), UINT32_C(0x0035EF58), UINT32_C(0x003AACF3), UINT32_C(0x006B04D4), UINT32_C(0x001DEEDA)}, {UINT32_C(0x0058DEDB), UINT32_C(0x0055E31C), UINT32_C(0x000564F2), UINT32_C(0x00767021), UINT32_C(0x000AA59A), UINT32_C(0x005E4355), UINT32_C(0x0076B6F5), UINT32_C(0x00E2300C), UINT32_C(0x0065F80C), UINT32_C(0x004E48E3), UINT32_C(0x00471F50)}, {UINT32_C(0x0057B4C9), UINT32_C(0x0032102C), UINT32_C(0x004F162E), UINT32_C(0x00AA70A0), UINT32_C(0x00601FA8), UINT32_C(0x001946ED), UINT32_C(0x007F5192), UINT32_C(0x009CBF3B), UINT32_C(0x0071AED7), UINT32_C(0x000BA7C1), UINT32_C(0x00663BBD)}}, {{UINT32_C(0x00FC042F), UINT32_C(0x00129354), UINT32_C(0x001AC8F7), UINT32_C(0x00124BB3), UINT32_C(0x007DE447), UINT32_C(0x0007CA46), UINT32_C(0x005604BA), UINT32_C(0x00981600), UINT32_C(0x0014DA63), UINT32_C(0x0005067B), UINT32_C(0x0053AE1A)}, {UINT32_C(0x009BC0FD), UINT32_C(0x006F8B2C), UINT32_C(0x006AE987), UINT32_C(0x0031F283), UINT32_C(0x0001800B), UINT32_C(0x00596A47), UINT32_C(0x0067F6A5), UINT32_C(0x00512023), UINT32_C(0x0015BA88), UINT32_C(0x0012951C), UINT32_C(0x000C64FA)}, {UINT32_C(0x00ED7C65), UINT32_C(0x0008BD59), UINT32_C(0x00636115), UINT32_C(0x0076BA73), UINT32_C(0x007F05EB), UINT32_C(0x0003E701), UINT32_C(0x00148CDD), UINT32_C(0x008B64AA), UINT32_C(0x00373C6D), UINT32_C(0x00516A1E), UINT32_C(0x00056623)}}, {{UINT32_C(0x000D0BB7), UINT32_C(0x007E8A54), UINT32_C(0x007474B6), UINT32_C(0x003D4755), UINT32_C(0x0026CD61), UINT32_C(0x0048139E), UINT32_C(0x005E0EC7), UINT32_C(0x00169B5D), UINT32_C(0x0042855A), UINT32_C(0x00729E2F), UINT32_C(0x001F1939)}, {UINT32_C(0x00EDF74C), UINT32_C(0x00736130), UINT32_C(0x007835CD), UINT32_C(0x0021FE28), UINT32_C(0x0051653E), UINT32_C(0x00690BC6), UINT32_C(0x0070143D), UINT32_C(0x0011B7F6), UINT32_C(0x002ECF93), UINT32_C(0x00332D5B), UINT32_C(0x004E7E15)}, {UINT32_C(0x0061C3BC), UINT32_C(0x006F0A58), UINT32_C(0x002A9437), UINT32_C(0x00273621), UINT32_C(0x004D6870), UINT32_C(0x004A0410), UINT32_C(0x001930EC), UINT32_C(0x00473AEA), UINT32_C(0x00345B94), UINT32_C(0x000D2F6F), UINT32_C(0x00630991)}}, {{UINT32_C(0x0064F095), UINT32_C(0x005B811B), UINT32_C(0x0034F150), UINT32_C(0x0037FBC3), UINT32_C(0x00431976), UINT32_C(0x001AF585), UINT32_C(0x004A47D6), UINT32_C(0x00364593), UINT32_C(0x00265D55), UINT32_C(0x006955EC), UINT32_C(0x004B56E9)}, {UINT32_C(0x00D4D3BA), UINT32_C(0x003E639C), UINT32_C(0x007B6508), UINT32_C(0x007AAFAA), UINT32_C(0x002DEDD3), UINT32_C(0x006E90FB), UINT32_C(0x0070FF1F), UINT32_C(0x005BD7F8), UINT32_C(0x0015D774), UINT32_C(0x004E9774), UINT32_C(0x003F53F7)}, {UINT32_C(0x004F4AA5), UINT32_C(0x0024432D), UINT32_C(0x002D31BA), UINT32_C(0x005F3C7B), UINT32_C(0x00221DE3), UINT32_C(0x00691A3B), UINT32_C(0x0067E7F8), UINT32_C(0x00B606C6), UINT32_C(0x005200E8), UINT32_C(0x00708B99), UINT32_C(0x002F258F)}}, {{UINT32_C(0x003A119F), UINT32_C(0x00319D59), UINT32_C(0x0071DF1F), UINT32_C(0x00EE723B), UINT32_C(0x004A075C), UINT32_C(0x0000C0BD), UINT32_C(0x00381ECA), UINT32_C(0x009EC137), UINT32_C(0x0014C177), UINT32_C(0x0062C87B), UINT32_C(0x003F7471)}, {UINT32_C(0x00AA3C6C), UINT32_C(0x0019B06D), UINT32_C(0x003A8845), UINT32_C(0x001B9E7B), UINT32_C(0x004749DD), UINT32_C(0x0067A317), UINT32_C(0x00555D63), UINT32_C(0x0087596C), UINT32_C(0x004BF763), UINT32_C(0x005DCF2F), UINT32_C(0x00725068)}, {UINT32_C(0x005A930B), UINT32_C(0x003C325E), UINT32_C(0x00528AC5), UINT32_C(0x00FD1B98), UINT32_C(0x004BA241), UINT32_C(0x0041EDCF), UINT32_C(0x00587205), UINT32_C(0x00EDF302), UINT32_C(0x001C093C), UINT32_C(0x0062B2BF), UINT32_C(0x00225709)}}, }, { {{UINT32_C(0x00EABA3B), UINT32_C(0x00192B0C), UINT32_C(0x006A78E0), UINT32_C(0x001251C4), UINT32_C(0x0032CA32), UINT32_C(0x0055DC60), UINT32_C(0x005BBC99), UINT32_C(0x00F53480), UINT32_C(0x004CA164), UINT32_C(0x0032C336), UINT32_C(0x004567E0)}, {UINT32_C(0x009B52D6), UINT32_C(0x006B6695), UINT32_C(0x0011E7D6), UINT32_C(0x002112B7), UINT32_C(0x007F870C), UINT32_C(0x002F5D93), UINT32_C(0x002B31C0), UINT32_C(0x000D401F), UINT32_C(0x0004B6C8), UINT32_C(0x0023BEE0), UINT32_C(0x00086B9A)}, {UINT32_C(0x001E8B93), UINT32_C(0x00336732), UINT32_C(0x00435024), UINT32_C(0x00A9D624), UINT32_C(0x007896CB), UINT32_C(0x00086124), UINT32_C(0x001F6441), UINT32_C(0x00C216CD), UINT32_C(0x0045B1DA), UINT32_C(0x0040884B), UINT32_C(0x0015A99D)}}, {{UINT32_C(0x00E29666), UINT32_C(0x0000698C), UINT32_C(0x00008566), UINT32_C(0x00B29855), UINT32_C(0x0069993B), UINT32_C(0x0066533E), UINT32_C(0x00130B35), UINT32_C(0x00112187), UINT32_C(0x0066567A), UINT32_C(0x006C6930), UINT32_C(0x00025F72)}, {UINT32_C(0x00BC36F8), UINT32_C(0x0075E071), UINT32_C(0x003F18EC), UINT32_C(0x00FE4134), UINT32_C(0x0007BF37), UINT32_C(0x0015265C), UINT32_C(0x002D5EA8), UINT32_C(0x00932F6F), UINT32_C(0x0001004C), UINT32_C(0x0028FBB8), UINT32_C(0x003CC88B)}, {UINT32_C(0x0025E5B3), UINT32_C(0x0052FCAA), UINT32_C(0x0072522F), UINT32_C(0x0075B891), UINT32_C(0x0071F699), UINT32_C(0x0051F116), UINT32_C(0x0078808A), UINT32_C(0x006A580C), UINT32_C(0x000BDDA3), UINT32_C(0x004CB31A), UINT32_C(0x0056F6CD)}}, {{UINT32_C(0x001AF846), UINT32_C(0x0016456F), UINT32_C(0x006CDB6E), UINT32_C(0x0019B43D), UINT32_C(0x001BD7BB), UINT32_C(0x001E429F), UINT32_C(0x0025E351), UINT32_C(0x002C034F), UINT32_C(0x0053ECFF), UINT32_C(0x002645D7), UINT32_C(0x006F455E)}, {UINT32_C(0x00161A5B), UINT32_C(0x005E3D52), UINT32_C(0x006167A5), UINT32_C(0x008BBC48), UINT32_C(0x0029C44C), UINT32_C(0x0009A976), UINT32_C(0x0038C321), UINT32_C(0x00390F40), UINT32_C(0x004A7861), UINT32_C(0x0027E8A3), UINT32_C(0x0055430C)}, {UINT32_C(0x0022B34E), UINT32_C(0x003FE536), UINT32_C(0x006D6BDE), UINT32_C(0x0038DF8B), UINT32_C(0x007C2700), UINT32_C(0x00413296), UINT32_C(0x000C3C34), UINT32_C(0x000F4A8B), UINT32_C(0x002223E1), UINT32_C(0x0002B3C2), UINT32_C(0x0030E676)}}, {{UINT32_C(0x0084B729), UINT32_C(0x00726FC5), UINT32_C(0x00414876), UINT32_C(0x003546F3), UINT32_C(0x00261905), UINT32_C(0x005A04F6), UINT32_C(0x0055B0C7), UINT32_C(0x006B360B), UINT32_C(0x0012052B), UINT32_C(0x002B0046), UINT32_C(0x003D984C)}, {UINT32_C(0x00CBED46), UINT32_C(0x0032683A), UINT32_C(0x004B3ADD), UINT32_C(0x00B2CD41), UINT32_C(0x0014EF94), UINT32_C(0x0050E0BF), UINT32_C(0x003FC9B1), UINT32_C(0x002F30DC), UINT32_C(0x00297AE9), UINT32_C(0x007BCD89), UINT32_C(0x000B4620)}, {UINT32_C(0x0030B5B8), UINT32_C(0x0067A579), UINT32_C(0x006EDA23), UINT32_C(0x0094FB0A), UINT32_C(0x00661BCD), UINT32_C(0x0040BF82), UINT32_C(0x0058F099), UINT32_C(0x0072BB0F), UINT32_C(0x00485362), UINT32_C(0x00539664), UINT32_C(0x006ADF86)}}, {{UINT32_C(0x0024FDD7), UINT32_C(0x001186A8), UINT32_C(0x004EA183), UINT32_C(0x00493DFC), UINT32_C(0x004F4E46), UINT32_C(0x0050110D), UINT32_C(0x003294D6), UINT32_C(0x00C5CEF6), UINT32_C(0x0053F4A9), UINT32_C(0x006A41F0), UINT32_C(0x00280D45)}, {UINT32_C(0x0025DCB5), UINT32_C(0x00352AB2), UINT32_C(0x003C9B57), UINT32_C(0x00C5972C), UINT32_C(0x0017C8A2), UINT32_C(0x0026C17F), UINT32_C(0x004A2DE0), UINT32_C(0x00962319), UINT32_C(0x001DC0E8), UINT32_C(0x007BB781), UINT32_C(0x0076D0B0)}, {UINT32_C(0x00C25C01), UINT32_C(0x006DF306), UINT32_C(0x002E001F), UINT32_C(0x00B2D044), UINT32_C(0x001C46FF), UINT32_C(0x0028D794), UINT32_C(0x004CD7EB), UINT32_C(0x00B2D81B), UINT32_C(0x00719BF6), UINT32_C(0x005D73E6), UINT32_C(0x000574EC)}}, {{UINT32_C(0x00ED0D33), UINT32_C(0x005B58E6), UINT32_C(0x0031614D), UINT32_C(0x00C647FC), UINT32_C(0x003D23AC), UINT32_C(0x006C18FD), UINT32_C(0x006B9F51), UINT32_C(0x00BD620E), UINT32_C(0x000E3630), UINT32_C(0x002C338B), UINT32_C(0x0055B898)}, {UINT32_C(0x00609F49), UINT32_C(0x006332D0), UINT32_C(0x0032177F), UINT32_C(0x008ADB01), UINT32_C(0x0003C6A7), UINT32_C(0x0020EA0A), UINT32_C(0x005D93D8), UINT32_C(0x0053348A), UINT32_C(0x00511FAA), UINT32_C(0x00125BD7), UINT32_C(0x001F9B23)}, {UINT32_C(0x007C7FE4), UINT32_C(0x0028B2B1), UINT32_C(0x007487D6), UINT32_C(0x0000D5FE), UINT32_C(0x007DEF82), UINT32_C(0x0016E07E), UINT32_C(0x0026B0AE), UINT32_C(0x003853C8), UINT32_C(0x002DCAA1), UINT32_C(0x00685027), UINT32_C(0x001A2F47)}}, {{UINT32_C(0x00986197), UINT32_C(0x00217581), UINT32_C(0x00011B57), UINT32_C(0x001C3CC0), UINT32_C(0x0048D2D2), UINT32_C(0x000C0332), UINT32_C(0x002D89E5), UINT32_C(0x003490A4), UINT32_C(0x003458B1), UINT32_C(0x002B04FA), UINT32_C(0x003F7CF9)}, {UINT32_C(0x004F002F), UINT32_C(0x002E83E7), UINT32_C(0x00629717), UINT32_C(0x0010444B), UINT32_C(0x005323A6), UINT32_C(0x003BF8D6), UINT32_C(0x002CFC62), UINT32_C(0x004F6988), UINT32_C(0x007305E7), UINT32_C(0x007EC041), UINT32_C(0x00754449)}, {UINT32_C(0x00B16E11), UINT32_C(0x007607F5), UINT32_C(0x001923D5), UINT32_C(0x00E8AE2B), UINT32_C(0x006722D4), UINT32_C(0x0076783B), UINT32_C(0x0037C778), UINT32_C(0x007F8754), UINT32_C(0x00422A0E), UINT32_C(0x003D9F97), UINT32_C(0x0016AEAE)}}, {{UINT32_C(0x00D81066), UINT32_C(0x0050C351), UINT32_C(0x00716769), UINT32_C(0x006393E3), UINT32_C(0x001B4C15), UINT32_C(0x004B9A55), UINT32_C(0x00588B55), UINT32_C(0x002BA83B), UINT32_C(0x00009915), UINT32_C(0x005C055C), UINT32_C(0x00048180)}, {UINT32_C(0x00CB303A), UINT32_C(0x00458BFF), UINT32_C(0x00237470), UINT32_C(0x00D66822), UINT32_C(0x0009DE8B), UINT32_C(0x005B28C2), UINT32_C(0x0068CAFE), UINT32_C(0x002F5A98), UINT32_C(0x004C4B2A), UINT32_C(0x0031DE00), UINT32_C(0x006E5755)}, {UINT32_C(0x008869E8), UINT32_C(0x001F33B0), UINT32_C(0x001A2BAA), UINT32_C(0x00817706), UINT32_C(0x00458C99), UINT32_C(0x00302337), UINT32_C(0x0039EAE5), UINT32_C(0x00D2E45D), UINT32_C(0x0073447F), UINT32_C(0x0024825C), UINT32_C(0x001B5E98)}}, {{UINT32_C(0x00814972), UINT32_C(0x0038B443), UINT32_C(0x0041992D), UINT32_C(0x00EE69DB), UINT32_C(0x00146157), UINT32_C(0x000AAAD8), UINT32_C(0x005444E7), UINT32_C(0x00D17AB8), UINT32_C(0x004DF7C1), UINT32_C(0x004D27A8), UINT32_C(0x0054D67D)}, {UINT32_C(0x000A587F), UINT32_C(0x003ECDA4), UINT32_C(0x002CA0AF), UINT32_C(0x008438DD), UINT32_C(0x00634B99), UINT32_C(0x003B5F19), UINT32_C(0x006A333D), UINT32_C(0x001B944F), UINT32_C(0x007E2E1F), UINT32_C(0x005C5F8A), UINT32_C(0x003EE1DE)}, {UINT32_C(0x001A8276), UINT32_C(0x006DA949), UINT32_C(0x003ABE66), UINT32_C(0x00EE9FD1), UINT32_C(0x004B05FC), UINT32_C(0x005E0261), UINT32_C(0x007EAA48), UINT32_C(0x0010DD5B), UINT32_C(0x007CBE95), UINT32_C(0x00118A02), UINT32_C(0x0002173C)}}, {{UINT32_C(0x003407C2), UINT32_C(0x003DB992), UINT32_C(0x001F1A9E), UINT32_C(0x00D5B577), UINT32_C(0x005468D1), UINT32_C(0x001331F0), UINT32_C(0x00760900), UINT32_C(0x00412C7B), UINT32_C(0x007D99FF), UINT32_C(0x003F157E), UINT32_C(0x0022BB7C)}, {UINT32_C(0x008CE31C), UINT32_C(0x007405EE), UINT32_C(0x004669C1), UINT32_C(0x00B64348), UINT32_C(0x002A823A), UINT32_C(0x0028F130), UINT32_C(0x006999E9), UINT32_C(0x006697A5), UINT32_C(0x00546104), UINT32_C(0x0028A64D), UINT32_C(0x00531D1A)}, {UINT32_C(0x009C76D2), UINT32_C(0x0079F19D), UINT32_C(0x000872F3), UINT32_C(0x00F799B3), UINT32_C(0x00407743), UINT32_C(0x003085E0), UINT32_C(0x002003F0), UINT32_C(0x00396CB7), UINT32_C(0x002952AF), UINT32_C(0x002D59FD), UINT32_C(0x003C184A)}}, {{UINT32_C(0x00E10FCD), UINT32_C(0x00563D94), UINT32_C(0x0036A862), UINT32_C(0x00A8D743), UINT32_C(0x001FAEBC), UINT32_C(0x005A3817), UINT32_C(0x0061B73B), UINT32_C(0x00FE0A6A), UINT32_C(0x00113AE2), UINT32_C(0x0079A419), UINT32_C(0x00433EC2)}, {UINT32_C(0x0094DA0B), UINT32_C(0x0053D54C), UINT32_C(0x005DC3C9), UINT32_C(0x00377F6C), UINT32_C(0x007601E5), UINT32_C(0x0054F416), UINT32_C(0x00147411), UINT32_C(0x0033E49D), UINT32_C(0x001316C3), UINT32_C(0x002D4674), UINT32_C(0x004DADCA)}, {UINT32_C(0x00A27A08), UINT32_C(0x00150DCB), UINT32_C(0x00757D31), UINT32_C(0x00ECF538), UINT32_C(0x00662566), UINT32_C(0x00306294), UINT32_C(0x00601C11), UINT32_C(0x0035FECB), UINT32_C(0x00452259), UINT32_C(0x001C2D33), UINT32_C(0x0021363F)}}, {{UINT32_C(0x00C03231), UINT32_C(0x0054A03F), UINT32_C(0x00530E31), UINT32_C(0x008A8654), UINT32_C(0x00445A8F), UINT32_C(0x0057E307), UINT32_C(0x0017BF37), UINT32_C(0x00015A04), UINT32_C(0x0002B01C), UINT32_C(0x001FB35F), UINT32_C(0x003FFA73)}, {UINT32_C(0x002C08E7), UINT32_C(0x0040D81C), UINT32_C(0x00622B99), UINT32_C(0x0048FF13), UINT32_C(0x00665063), UINT32_C(0x004518AF), UINT32_C(0x003AC182), UINT32_C(0x00A28FD4), UINT32_C(0x002A6DAE), UINT32_C(0x001B6DBD), UINT32_C(0x0010ACD4)}, {UINT32_C(0x0058C718), UINT32_C(0x0016FC28), UINT32_C(0x0041E2C6), UINT32_C(0x0052886B), UINT32_C(0x007FDE72), UINT32_C(0x00289521), UINT32_C(0x00173FE6), UINT32_C(0x0072E6CC), UINT32_C(0x0017AC30), UINT32_C(0x0040A8E1), UINT32_C(0x005097BC)}}, {{UINT32_C(0x005B9B1D), UINT32_C(0x0050D0A3), UINT32_C(0x002DFE1B), UINT32_C(0x00EAA92D), UINT32_C(0x00277DA6), UINT32_C(0x00622641), UINT32_C(0x0037663B), UINT32_C(0x004FD085), UINT32_C(0x000C17EE), UINT32_C(0x006A97AF), UINT32_C(0x007A47AF)}, {UINT32_C(0x006BE9BF), UINT32_C(0x003285C2), UINT32_C(0x0065C35C), UINT32_C(0x009C1C74), UINT32_C(0x005F5ECE), UINT32_C(0x0059AF30), UINT32_C(0x002A2EA6), UINT32_C(0x0053A7C7), UINT32_C(0x003A42C4), UINT32_C(0x007E6E33), UINT32_C(0x0067F167)}, {UINT32_C(0x002379C4), UINT32_C(0x00784A42), UINT32_C(0x00260570), UINT32_C(0x00C001B9), UINT32_C(0x007733D1), UINT32_C(0x002610F4), UINT32_C(0x0076810F), UINT32_C(0x0093A496), UINT32_C(0x001DEA0A), UINT32_C(0x002CA003), UINT32_C(0x006326EC)}}, {{UINT32_C(0x00BB2391), UINT32_C(0x00743284), UINT32_C(0x002E155F), UINT32_C(0x0035639B), UINT32_C(0x005BBF4F), UINT32_C(0x003E90B9), UINT32_C(0x00767573), UINT32_C(0x00321363), UINT32_C(0x00254580), UINT32_C(0x0029D549), UINT32_C(0x0052B4EB)}, {UINT32_C(0x00C1B9A5), UINT32_C(0x004DDE09), UINT32_C(0x006CBD8B), UINT32_C(0x005BA607), UINT32_C(0x003CC42A), UINT32_C(0x001D4E2E), UINT32_C(0x007ACD96), UINT32_C(0x00C921CE), UINT32_C(0x000620D1), UINT32_C(0x0016E31C), UINT32_C(0x006A2B72)}, {UINT32_C(0x002A9792), UINT32_C(0x0000CFD3), UINT32_C(0x006A9AD2), UINT32_C(0x00ED29B3), UINT32_C(0x0026DA69), UINT32_C(0x002D2B73), UINT32_C(0x001B5E5D), UINT32_C(0x00D5305C), UINT32_C(0x0067DCE0), UINT32_C(0x000729B3), UINT32_C(0x00070252)}}, {{UINT32_C(0x007834CB), UINT32_C(0x001A305D), UINT32_C(0x00199CF9), UINT32_C(0x00EE7F83), UINT32_C(0x0048376D), UINT32_C(0x00182568), UINT32_C(0x0044C0B5), UINT32_C(0x007EFBAD), UINT32_C(0x006A5B89), UINT32_C(0x002DDEC8), UINT32_C(0x002C5365)}, {UINT32_C(0x0014DDC8), UINT32_C(0x0026ED23), UINT32_C(0x004F3CF1), UINT32_C(0x009C337C), UINT32_C(0x005CA1F6), UINT32_C(0x00430D81), UINT32_C(0x001BF696), UINT32_C(0x00D5544B), UINT32_C(0x0001941E), UINT32_C(0x002720AB), UINT32_C(0x006EF64B)}, {UINT32_C(0x00AEB238), UINT32_C(0x002A16EC), UINT32_C(0x0055FE48), UINT32_C(0x00606DE7), UINT32_C(0x0034576A), UINT32_C(0x006FF01C), UINT32_C(0x0009AA13), UINT32_C(0x00D2D5AB), UINT32_C(0x003249A4), UINT32_C(0x004B05E9), UINT32_C(0x0041BC86)}}, {{UINT32_C(0x00A9E5D5), UINT32_C(0x003CDBE3), UINT32_C(0x00669075), UINT32_C(0x004D8E92), UINT32_C(0x0050E701), UINT32_C(0x003EEC92), UINT32_C(0x00340906), UINT32_C(0x003A5231), UINT32_C(0x0076D572), UINT32_C(0x001CA34B), UINT32_C(0x0035D540)}, {UINT32_C(0x00FE52C3), UINT32_C(0x0064659E), UINT32_C(0x000FCF54), UINT32_C(0x00DDCF41), UINT32_C(0x007A7B36), UINT32_C(0x002AEC73), UINT32_C(0x007550B1), UINT32_C(0x008E1CEC), UINT32_C(0x002CAD9C), UINT32_C(0x004EE133), UINT32_C(0x0045B7D8)}, {UINT32_C(0x009FC441), UINT32_C(0x002D1FBC), UINT32_C(0x003E7D16), UINT32_C(0x00C8B352), UINT32_C(0x00221849), UINT32_C(0x003FF5A0), UINT32_C(0x0055A506), UINT32_C(0x007F88D0), UINT32_C(0x0018DB76), UINT32_C(0x00672F49), UINT32_C(0x007D2F58)}}, }, { {{UINT32_C(0x00C3CC62), UINT32_C(0x001788C8), UINT32_C(0x0046ECBC), UINT32_C(0x00F44A0D), UINT32_C(0x005D570F), UINT32_C(0x0011C818), UINT32_C(0x0005F4D7), UINT32_C(0x00B7F489), UINT32_C(0x0001AE92), UINT32_C(0x002AB1B0), UINT32_C(0x0067910C)}, {UINT32_C(0x0033A3DB), UINT32_C(0x00768B12), UINT32_C(0x005D50DE), UINT32_C(0x00D31F34), UINT32_C(0x003455F7), UINT32_C(0x0021BBE3), UINT32_C(0x0020D657), UINT32_C(0x009AEF49), UINT32_C(0x0011194A), UINT32_C(0x007C4E1E), UINT32_C(0x005A07C9)}, {UINT32_C(0x008F9CA3), UINT32_C(0x0054FF76), UINT32_C(0x00570C00), UINT32_C(0x006792D9), UINT32_C(0x0064070F), UINT32_C(0x0044F2A2), UINT32_C(0x006ABEFC), UINT32_C(0x00DAAC6E), UINT32_C(0x004F8CD9), UINT32_C(0x004DC91F), UINT32_C(0x0049B2BB)}}, {{UINT32_C(0x0018CD54), UINT32_C(0x0010BE7F), UINT32_C(0x005F8D91), UINT32_C(0x00BAF1CC), UINT32_C(0x0050AB12), UINT32_C(0x002D251A), UINT32_C(0x004B47CC), UINT32_C(0x005BD1C5), UINT32_C(0x00489594), UINT32_C(0x00699114), UINT32_C(0x0030C9FA)}, {UINT32_C(0x00D23D40), UINT32_C(0x005307A4), UINT32_C(0x007E98F3), UINT32_C(0x00F08939), UINT32_C(0x0069A75B), UINT32_C(0x001DB79B), UINT32_C(0x00566A53), UINT32_C(0x005AF4D5), UINT32_C(0x00237443), UINT32_C(0x001D42DE), UINT32_C(0x005165D2)}, {UINT32_C(0x00873511), UINT32_C(0x00525967), UINT32_C(0x0056101D), UINT32_C(0x00AA7060), UINT32_C(0x004C11B1), UINT32_C(0x0029CA00), UINT32_C(0x001A34BC), UINT32_C(0x005CA8C2), UINT32_C(0x002F5F9A), UINT32_C(0x0039EFC2), UINT32_C(0x006871D9)}}, {{UINT32_C(0x00421E67), UINT32_C(0x00075D00), UINT32_C(0x0010583F), UINT32_C(0x00B732C7), UINT32_C(0x0037730B), UINT32_C(0x007028B8), UINT32_C(0x005C0247), UINT32_C(0x007CC11B), UINT32_C(0x007F99FE), UINT32_C(0x0074EF6F), UINT32_C(0x0049255A)}, {UINT32_C(0x00806A6B), UINT32_C(0x0076A27F), UINT32_C(0x001A45F6), UINT32_C(0x001863FB), UINT32_C(0x0036A2B2), UINT32_C(0x00058E27), UINT32_C(0x007E3E52), UINT32_C(0x008FA71E), UINT32_C(0x000F9591), UINT32_C(0x000EA645), UINT32_C(0x0037E6C8)}, {UINT32_C(0x004C164A), UINT32_C(0x0015AE71), UINT32_C(0x00228D86), UINT32_C(0x00441D33), UINT32_C(0x00507819), UINT32_C(0x00442DBE), UINT32_C(0x00457850), UINT32_C(0x0059222C), UINT32_C(0x0029495F), UINT32_C(0x007331A0), UINT32_C(0x007BAE86)}}, {{UINT32_C(0x00FA5032), UINT32_C(0x00242303), UINT32_C(0x000A904B), UINT32_C(0x0003BB53), UINT32_C(0x007553E7), UINT32_C(0x003CA0C5), UINT32_C(0x0061B87D), UINT32_C(0x00805E53), UINT32_C(0x0049297C), UINT32_C(0x0056196B), UINT32_C(0x004C6DF6)}, {UINT32_C(0x002C1092), UINT32_C(0x0019EF62), UINT32_C(0x0047F011), UINT32_C(0x00C03A85), UINT32_C(0x000B1A90), UINT32_C(0x001507E7), UINT32_C(0x004D6EBC), UINT32_C(0x00794D29), UINT32_C(0x005C5416), UINT32_C(0x0020F242), UINT32_C(0x00576518)}, {UINT32_C(0x0034E914), UINT32_C(0x005DAF45), UINT32_C(0x005BE7A5), UINT32_C(0x00FE38F3), UINT32_C(0x00157770), UINT32_C(0x00237F8C), UINT32_C(0x0015BF21), UINT32_C(0x0077CC24), UINT32_C(0x005067D4), UINT32_C(0x00091C98), UINT32_C(0x007F54DE)}}, {{UINT32_C(0x00770B21), UINT32_C(0x006194BB), UINT32_C(0x001A8987), UINT32_C(0x0094013C), UINT32_C(0x00619B7F), UINT32_C(0x00083816), UINT32_C(0x007A8072), UINT32_C(0x00F58256), UINT32_C(0x002FFA60), UINT32_C(0x007AC24E), UINT32_C(0x0042CF75)}, {UINT32_C(0x0058474E), UINT32_C(0x007BFF2F), UINT32_C(0x0018145B), UINT32_C(0x00F8E32B), UINT32_C(0x0055DE08), UINT32_C(0x002AA874), UINT32_C(0x0044BCA0), UINT32_C(0x0038F7BE), UINT32_C(0x0027359B), UINT32_C(0x002747EB), UINT32_C(0x00226230)}, {UINT32_C(0x00FA31A5), UINT32_C(0x00190A96), UINT32_C(0x006536D0), UINT32_C(0x00ACA102), UINT32_C(0x0036C0D0), UINT32_C(0x0008F3D0), UINT32_C(0x0049B490), UINT32_C(0x005CD6C9), UINT32_C(0x000E1C66), UINT32_C(0x0077C89C), UINT32_C(0x006A74AE)}}, {{UINT32_C(0x00EE9825), UINT32_C(0x000FBC15), UINT32_C(0x000C0843), UINT32_C(0x006B793A), UINT32_C(0x0004ED1C), UINT32_C(0x00616EA7), UINT32_C(0x000B6304), UINT32_C(0x00166978), UINT32_C(0x0024139D), UINT32_C(0x0042F014), UINT32_C(0x003D4978)}, {UINT32_C(0x0029D5D7), UINT32_C(0x0033F88C), UINT32_C(0x006E76FF), UINT32_C(0x00A49E5F), UINT32_C(0x003D801A), UINT32_C(0x0042EE48), UINT32_C(0x000D2057), UINT32_C(0x001D9164), UINT32_C(0x001AB787), UINT32_C(0x004D338B), UINT32_C(0x00262464)}, {UINT32_C(0x00D5B395), UINT32_C(0x007A77B2), UINT32_C(0x0043D844), UINT32_C(0x006D5774), UINT32_C(0x00267921), UINT32_C(0x00374E41), UINT32_C(0x003B4C78), UINT32_C(0x00E2BA6E), UINT32_C(0x00656116), UINT32_C(0x0043049C), UINT32_C(0x002023C8)}}, {{UINT32_C(0x001715E4), UINT32_C(0x00652B6A), UINT32_C(0x00379760), UINT32_C(0x004DB333), UINT32_C(0x00619842), UINT32_C(0x00656120), UINT32_C(0x0026FAEC), UINT32_C(0x00EF2AD7), UINT32_C(0x00149CB3), UINT32_C(0x0055D95D), UINT32_C(0x00497B11)}, {UINT32_C(0x00D4B7BF), UINT32_C(0x001098D0), UINT32_C(0x0057E045), UINT32_C(0x00304A0C), UINT32_C(0x007F8852), UINT32_C(0x00564889), UINT32_C(0x007D4D67), UINT32_C(0x00A2CA30), UINT32_C(0x0051B0D9), UINT32_C(0x00495A39), UINT32_C(0x0017789D)}, {UINT32_C(0x0049CE9C), UINT32_C(0x001C79B9), UINT32_C(0x000A676A), UINT32_C(0x0043503C), UINT32_C(0x003C78EA), UINT32_C(0x00779E15), UINT32_C(0x002487F8), UINT32_C(0x0098B781), UINT32_C(0x002F1E05), UINT32_C(0x000B58B5), UINT32_C(0x0079EE99)}}, {{UINT32_C(0x0082E001), UINT32_C(0x002F7563), UINT32_C(0x005502B7), UINT32_C(0x0099B452), UINT32_C(0x00068BD3), UINT32_C(0x006837ED), UINT32_C(0x006C2DAE), UINT32_C(0x00EDD476), UINT32_C(0x004B54C6), UINT32_C(0x002353E5), UINT32_C(0x0036757B)}, {UINT32_C(0x0003D167), UINT32_C(0x002030D2), UINT32_C(0x0072FA5A), UINT32_C(0x004E3D16), UINT32_C(0x001B78F0), UINT32_C(0x000924E6), UINT32_C(0x001E86B4), UINT32_C(0x006CD648), UINT32_C(0x001D24C9), UINT32_C(0x000CC288), UINT32_C(0x0054B2D8)}, {UINT32_C(0x002B443B), UINT32_C(0x00135EB4), UINT32_C(0x006123F8), UINT32_C(0x00795F4F), UINT32_C(0x00161316), UINT32_C(0x005CC78F), UINT32_C(0x001879B2), UINT32_C(0x00A11513), UINT32_C(0x0075BC89), UINT32_C(0x000E0F4C), UINT32_C(0x0022EB79)}}, {{UINT32_C(0x0097ABD7), UINT32_C(0x003BF415), UINT32_C(0x004B96FB), UINT32_C(0x0086107E), UINT32_C(0x0013751E), UINT32_C(0x006E3412), UINT32_C(0x0075AEFF), UINT32_C(0x00CEAD7E), UINT32_C(0x004D03FA), UINT32_C(0x0041C8E1), UINT32_C(0x00586295)}, {UINT32_C(0x00BF974F), UINT32_C(0x003D6607), UINT32_C(0x003A2804), UINT32_C(0x00E9CC65), UINT32_C(0x00596911), UINT32_C(0x0013F86A), UINT32_C(0x00010E75), UINT32_C(0x0067284C), UINT32_C(0x00244A19), UINT32_C(0x00071615), UINT32_C(0x002E2C66)}, {UINT32_C(0x004963F7), UINT32_C(0x00640576), UINT32_C(0x0031C7EE), UINT32_C(0x001D786C), UINT32_C(0x00257DEC), UINT32_C(0x003CF6C5), UINT32_C(0x00465E43), UINT32_C(0x00B15EDD), UINT32_C(0x00478BEB), UINT32_C(0x00016C1B), UINT32_C(0x00094307)}}, {{UINT32_C(0x00E85486), UINT32_C(0x0077F915), UINT32_C(0x00760D35), UINT32_C(0x002EF0AE), UINT32_C(0x0037042C), UINT32_C(0x0030C359), UINT32_C(0x00346545), UINT32_C(0x00DC7FE6), UINT32_C(0x0030D4C5), UINT32_C(0x004AAD41), UINT32_C(0x000A60C0)}, {UINT32_C(0x00D6E8B3), UINT32_C(0x000B7AA8), UINT32_C(0x0023E0C5), UINT32_C(0x006A8EBF), UINT32_C(0x0063D566), UINT32_C(0x002294C9), UINT32_C(0x0049A4AE), UINT32_C(0x005A2C0A), UINT32_C(0x005086A5), UINT32_C(0x0008808D), UINT32_C(0x0005A919)}, {UINT32_C(0x007A8EAF), UINT32_C(0x001E6353), UINT32_C(0x005C83D2), UINT32_C(0x00714AAE), UINT32_C(0x004F2F37), UINT32_C(0x00249BF6), UINT32_C(0x006CDEE8), UINT32_C(0x006F262D), UINT32_C(0x007E9C03), UINT32_C(0x004C7272), UINT32_C(0x005E6F1B)}}, {{UINT32_C(0x0011D440), UINT32_C(0x0050D0E6), UINT32_C(0x0020183D), UINT32_C(0x00D0ED3E), UINT32_C(0x004642A3), UINT32_C(0x0019F456), UINT32_C(0x0068661A), UINT32_C(0x005C97B1), UINT32_C(0x001DFD20), UINT32_C(0x00607CBE), UINT32_C(0x004EB1D7)}, {UINT32_C(0x00424218), UINT32_C(0x0031CB2B), UINT32_C(0x0016EE1E), UINT32_C(0x00F0B2F5), UINT32_C(0x00284CA3), UINT32_C(0x000B886E), UINT32_C(0x0056424F), UINT32_C(0x00606535), UINT32_C(0x001A7DD3), UINT32_C(0x005E5D6D), UINT32_C(0x000910A8)}, {UINT32_C(0x00E5A1E8), UINT32_C(0x0062AA84), UINT32_C(0x0072C780), UINT32_C(0x00E14E12), UINT32_C(0x00359D55), UINT32_C(0x00388026), UINT32_C(0x001AF8C7), UINT32_C(0x007C9658), UINT32_C(0x007CD573), UINT32_C(0x001DB584), UINT32_C(0x005C3621)}}, {{UINT32_C(0x00E7BB1F), UINT32_C(0x002CD518), UINT32_C(0x0041FE08), UINT32_C(0x00717B78), UINT32_C(0x00400988), UINT32_C(0x00291794), UINT32_C(0x00747C25), UINT32_C(0x007194A1), UINT32_C(0x0040F7AF), UINT32_C(0x007B6E73), UINT32_C(0x0020EB45)}, {UINT32_C(0x00161F74), UINT32_C(0x00299725), UINT32_C(0x0025AD63), UINT32_C(0x004B6379), UINT32_C(0x00076C32), UINT32_C(0x0071515E), UINT32_C(0x0032A4A1), UINT32_C(0x00A7B602), UINT32_C(0x005C7951), UINT32_C(0x003975BA), UINT32_C(0x004BA951)}, {UINT32_C(0x009EEF2E), UINT32_C(0x000B3835), UINT32_C(0x005E1C6B), UINT32_C(0x00800FFB), UINT32_C(0x006BC9CA), UINT32_C(0x00125F16), UINT32_C(0x000F6D0D), UINT32_C(0x00186A82), UINT32_C(0x00479A35), UINT32_C(0x0006739D), UINT32_C(0x004DCC17)}}, {{UINT32_C(0x0067A5F5), UINT32_C(0x007CA11D), UINT32_C(0x0051B4EF), UINT32_C(0x00E64083), UINT32_C(0x002B0147), UINT32_C(0x0022B454), UINT32_C(0x0050D922), UINT32_C(0x0019CFE8), UINT32_C(0x00416B41), UINT32_C(0x00219410), UINT32_C(0x005C5995)}, {UINT32_C(0x0020EA67), UINT32_C(0x0065B659), UINT32_C(0x0011B640), UINT32_C(0x00C05AB3), UINT32_C(0x0015BD93), UINT32_C(0x003F4CB7), UINT32_C(0x000CD5AA), UINT32_C(0x006203FA), UINT32_C(0x001FA8A5), UINT32_C(0x001E6F64), UINT32_C(0x006FB8E7)}, {UINT32_C(0x00B6FEF4), UINT32_C(0x0053F0CE), UINT32_C(0x006B1E51), UINT32_C(0x0033476B), UINT32_C(0x00419002), UINT32_C(0x006F619C), UINT32_C(0x005CAF14), UINT32_C(0x001753E9), UINT32_C(0x0038FC4F), UINT32_C(0x007F5E19), UINT32_C(0x000F12D2)}}, {{UINT32_C(0x009F6EBB), UINT32_C(0x004C08FE), UINT32_C(0x006E7C4E), UINT32_C(0x00F1680D), UINT32_C(0x00446C66), UINT32_C(0x00350BF6), UINT32_C(0x006A96E3), UINT32_C(0x005AEE9A), UINT32_C(0x006935BB), UINT32_C(0x0073B4C5), UINT32_C(0x004AC140)}, {UINT32_C(0x00E5225C), UINT32_C(0x007B671B), UINT32_C(0x007606A0), UINT32_C(0x00938508), UINT32_C(0x007625D7), UINT32_C(0x001E3B8F), UINT32_C(0x002EAE28), UINT32_C(0x00318F8C), UINT32_C(0x001CC7F0), UINT32_C(0x0010B56D), UINT32_C(0x0049C97C)}, {UINT32_C(0x00DE3FDD), UINT32_C(0x0008CA79), UINT32_C(0x000A0585), UINT32_C(0x0056E5A5), UINT32_C(0x003CF77E), UINT32_C(0x002C9DD5), UINT32_C(0x006D3D48), UINT32_C(0x00B152EB), UINT32_C(0x001C6B5C), UINT32_C(0x00755FAF), UINT32_C(0x002B73E8)}}, {{UINT32_C(0x004F175B), UINT32_C(0x0074B90C), UINT32_C(0x007C4EB9), UINT32_C(0x00CB92B7), UINT32_C(0x00592AE2), UINT32_C(0x0056E0F5), UINT32_C(0x007528E2), UINT32_C(0x00893263), UINT32_C(0x0006AD16), UINT32_C(0x0070AA41), UINT32_C(0x0062E83F)}, {UINT32_C(0x00058482), UINT32_C(0x00171A5D), UINT32_C(0x0047C331), UINT32_C(0x00DF7758), UINT32_C(0x002B4A00), UINT32_C(0x001FCAD8), UINT32_C(0x006A1943), UINT32_C(0x00B73575), UINT32_C(0x00171180), UINT32_C(0x005C1148), UINT32_C(0x0012A36A)}, {UINT32_C(0x008C51AE), UINT32_C(0x0020EE14), UINT32_C(0x00549F62), UINT32_C(0x00CD3EB6), UINT32_C(0x0048A700), UINT32_C(0x00596B28), UINT32_C(0x002F99A4), UINT32_C(0x00010422), UINT32_C(0x001769F4), UINT32_C(0x00225E79), UINT32_C(0x0067F6DE)}}, {{UINT32_C(0x009E9178), UINT32_C(0x0005D43C), UINT32_C(0x0012A802), UINT32_C(0x0086A260), UINT32_C(0x0063C91C), UINT32_C(0x0063084E), UINT32_C(0x0046B7E1), UINT32_C(0x00A17B2D), UINT32_C(0x0051323E), UINT32_C(0x0046B359), UINT32_C(0x00037634)}, {UINT32_C(0x000A3DA8), UINT32_C(0x001949B0), UINT32_C(0x0005E3B9), UINT32_C(0x002467F0), UINT32_C(0x004BCC28), UINT32_C(0x00501570), UINT32_C(0x003D5412), UINT32_C(0x00CD0573), UINT32_C(0x0040ECA4), UINT32_C(0x0017C942), UINT32_C(0x001AACE2)}, {UINT32_C(0x00427572), UINT32_C(0x002D0E76), UINT32_C(0x006FC301), UINT32_C(0x0011516D), UINT32_C(0x003B6F32), UINT32_C(0x0056D53F), UINT32_C(0x002E9447), UINT32_C(0x00909115), UINT32_C(0x007DC768), UINT32_C(0x00553F21), UINT32_C(0x003A0976)}}, }, { {{UINT32_C(0x0018835D), UINT32_C(0x001FCF9F), UINT32_C(0x001AD610), UINT32_C(0x007D30EC), UINT32_C(0x006C910C), UINT32_C(0x003FB1A8), UINT32_C(0x001464A4), UINT32_C(0x0027680C), UINT32_C(0x007E54DB), UINT32_C(0x005EDD4B), UINT32_C(0x005A8976)}, {UINT32_C(0x0037E1C3), UINT32_C(0x0016BF14), UINT32_C(0x0006AA36), UINT32_C(0x0040A33E), UINT32_C(0x006DC0DF), UINT32_C(0x00242FA2), UINT32_C(0x00274EA4), UINT32_C(0x000084D9), UINT32_C(0x0068A677), UINT32_C(0x004FE2AF), UINT32_C(0x001D11B4)}, {UINT32_C(0x003DC1C7), UINT32_C(0x00792137), UINT32_C(0x002CB33F), UINT32_C(0x007A0801), UINT32_C(0x000056E3), UINT32_C(0x00339206), UINT32_C(0x003D0090), UINT32_C(0x00F96044), UINT32_C(0x00537FE0), UINT32_C(0x006358EF), UINT32_C(0x001EE2D0)}}, {{UINT32_C(0x0029CB03), UINT32_C(0x000FF813), UINT32_C(0x00067660), UINT32_C(0x00E00898), UINT32_C(0x000083A1), UINT32_C(0x00516E88), UINT32_C(0x00543512), UINT32_C(0x00EFA310), UINT32_C(0x005ED95E), UINT32_C(0x0048147D), UINT32_C(0x003958DB)}, {UINT32_C(0x0084596C), UINT32_C(0x006BC632), UINT32_C(0x0037EAF8), UINT32_C(0x00148F47), UINT32_C(0x002DE2D2), UINT32_C(0x007E4DA4), UINT32_C(0x0021A371), UINT32_C(0x00BF0084), UINT32_C(0x003EFBC7), UINT32_C(0x0079976E), UINT32_C(0x004BAEFB)}, {UINT32_C(0x000DA1C1), UINT32_C(0x00310E2C), UINT32_C(0x0030B00D), UINT32_C(0x007060D1), UINT32_C(0x000F8A0E), UINT32_C(0x005B1EC0), UINT32_C(0x0066C96D), UINT32_C(0x008BB679), UINT32_C(0x0031F9DB), UINT32_C(0x0032C38D), UINT32_C(0x003C1F72)}}, {{UINT32_C(0x00BCFE19), UINT32_C(0x005B51F8), UINT32_C(0x0037A870), UINT32_C(0x00898A49), UINT32_C(0x007BD853), UINT32_C(0x0064DA75), UINT32_C(0x0017497A), UINT32_C(0x0021BE3C), UINT32_C(0x0026C48F), UINT32_C(0x0035A56E), UINT32_C(0x00079EFC)}, {UINT32_C(0x006AEFDE), UINT32_C(0x007113F8), UINT32_C(0x007013EA), UINT32_C(0x004A8F2E), UINT32_C(0x0038D8C7), UINT32_C(0x003E2B86), UINT32_C(0x006499EE), UINT32_C(0x00EF9DD1), UINT32_C(0x00541109), UINT32_C(0x007F4211), UINT32_C(0x002650ED)}, {UINT32_C(0x00E8730E), UINT32_C(0x007EF6E8), UINT32_C(0x00053E89), UINT32_C(0x00B164EC), UINT32_C(0x004CFEB8), UINT32_C(0x002674CE), UINT32_C(0x006FD69F), UINT32_C(0x00862ADC), UINT32_C(0x0074A714), UINT32_C(0x004E95F1), UINT32_C(0x00440342)}}, {{UINT32_C(0x0086A1D1), UINT32_C(0x0009570F), UINT32_C(0x0021E028), UINT32_C(0x00D8EF33), UINT32_C(0x0030D08A), UINT32_C(0x005EE53C), UINT32_C(0x005F27BE), UINT32_C(0x00315BEF), UINT32_C(0x0030A287), UINT32_C(0x00395DE5), UINT32_C(0x00694DAA)}, {UINT32_C(0x004E499A), UINT32_C(0x0024FC80), UINT32_C(0x0045DA5E), UINT32_C(0x004542DE), UINT32_C(0x005A6E71), UINT32_C(0x0013BB0D), UINT32_C(0x0000E551), UINT32_C(0x0009BB0D), UINT32_C(0x00710991), UINT32_C(0x00116881), UINT32_C(0x0075A138)}, {UINT32_C(0x0039EB19), UINT32_C(0x0067187C), UINT32_C(0x00636CC0), UINT32_C(0x0094DCEC), UINT32_C(0x001AF3DD), UINT32_C(0x002B8639), UINT32_C(0x006554E7), UINT32_C(0x00E605EB), UINT32_C(0x0061639B), UINT32_C(0x0077500A), UINT32_C(0x003193ED)}}, {{UINT32_C(0x0001E326), UINT32_C(0x00352C31), UINT32_C(0x004A76AB), UINT32_C(0x00D940B5), UINT32_C(0x006329C5), UINT32_C(0x001AFE72), UINT32_C(0x005E4FE9), UINT32_C(0x00F56D9B), UINT32_C(0x003E7DB3), UINT32_C(0x00054566), UINT32_C(0x004D0C77)}, {UINT32_C(0x00B344FC), UINT32_C(0x001F79B7), UINT32_C(0x0050F482), UINT32_C(0x0098D267), UINT32_C(0x001C2619), UINT32_C(0x006BBD65), UINT32_C(0x00346286), UINT32_C(0x008CAD0C), UINT32_C(0x000FC617), UINT32_C(0x0032B373), UINT32_C(0x007978E3)}, {UINT32_C(0x00C94333), UINT32_C(0x006B14A8), UINT32_C(0x001075C5), UINT32_C(0x00BDD939), UINT32_C(0x0000EE70), UINT32_C(0x00188183), UINT32_C(0x007398E2), UINT32_C(0x0009184A), UINT32_C(0x007DF798), UINT32_C(0x0057B14F), UINT32_C(0x0021B6A8)}}, {{UINT32_C(0x00F232E3), UINT32_C(0x00449C35), UINT32_C(0x000CC2CD), UINT32_C(0x0003BBFB), UINT32_C(0x006E022E), UINT32_C(0x005937F0), UINT32_C(0x000D3400), UINT32_C(0x00A3335B), UINT32_C(0x003797FA), UINT32_C(0x007E0C16), UINT32_C(0x0068AB4A)}, {UINT32_C(0x00655243), UINT32_C(0x0076EF0C), UINT32_C(0x007A5D62), UINT32_C(0x0087B99B), UINT32_C(0x007F5266), UINT32_C(0x00129263), UINT32_C(0x0052B578), UINT32_C(0x00CC7106), UINT32_C(0x004128A7), UINT32_C(0x0074AFC9), UINT32_C(0x001A0821)}, {UINT32_C(0x0000FE7F), UINT32_C(0x0058CC38), UINT32_C(0x004ACE7A), UINT32_C(0x0027824A), UINT32_C(0x0071BB43), UINT32_C(0x004CD1C5), UINT32_C(0x001DE8E5), UINT32_C(0x00FD97F3), UINT32_C(0x004164E0), UINT32_C(0x00542935), UINT32_C(0x0015EE68)}}, {{UINT32_C(0x0056201E), UINT32_C(0x00572A88), UINT32_C(0x005A66B9), UINT32_C(0x00A30E5F), UINT32_C(0x000E20E3), UINT32_C(0x000898BF), UINT32_C(0x003CC5C7), UINT32_C(0x000170BD), UINT32_C(0x003813EE), UINT32_C(0x00079874), UINT32_C(0x006A5F45)}, {UINT32_C(0x00C07AE0), UINT32_C(0x00680DE0), UINT32_C(0x0012D0D6), UINT32_C(0x00641F64), UINT32_C(0x000E6F53), UINT32_C(0x000A48AC), UINT32_C(0x002EBABE), UINT32_C(0x0017E4D0), UINT32_C(0x006B3042), UINT32_C(0x0047391C), UINT32_C(0x003FC7B5)}, {UINT32_C(0x008AE200), UINT32_C(0x00651B7E), UINT32_C(0x000F51C8), UINT32_C(0x0034F2DB), UINT32_C(0x00418121), UINT32_C(0x0052E806), UINT32_C(0x004B57A3), UINT32_C(0x00801E3B), UINT32_C(0x006E2553), UINT32_C(0x0017FE29), UINT32_C(0x000371F5)}}, {{UINT32_C(0x00E0B571), UINT32_C(0x0043B547), UINT32_C(0x0015696B), UINT32_C(0x00732AF4), UINT32_C(0x007B6282), UINT32_C(0x007276FC), UINT32_C(0x00489692), UINT32_C(0x00536F42), UINT32_C(0x00241953), UINT32_C(0x0047679B), UINT32_C(0x0017A0AD)}, {UINT32_C(0x0071332D), UINT32_C(0x00010B6E), UINT32_C(0x007EE392), UINT32_C(0x00A7B31C), UINT32_C(0x004921ED), UINT32_C(0x000B32BD), UINT32_C(0x001187FE), UINT32_C(0x00913F47), UINT32_C(0x000B27ED), UINT32_C(0x0043B431), UINT32_C(0x0055085B)}, {UINT32_C(0x00E2C137), UINT32_C(0x001AD933), UINT32_C(0x000D0367), UINT32_C(0x007E38F0), UINT32_C(0x0003205C), UINT32_C(0x0014599A), UINT32_C(0x001E8DE6), UINT32_C(0x007A88FA), UINT32_C(0x0077198A), UINT32_C(0x0031A753), UINT32_C(0x002FE194)}}, {{UINT32_C(0x00682B6C), UINT32_C(0x00652986), UINT32_C(0x001F417F), UINT32_C(0x00DE4F1B), UINT32_C(0x000EF1F1), UINT32_C(0x00036E7F), UINT32_C(0x005AD789), UINT32_C(0x00AE8DB4), UINT32_C(0x0076B58D), UINT32_C(0x002E3942), UINT32_C(0x006F7B10)}, {UINT32_C(0x009E5FA2), UINT32_C(0x0008F3C7), UINT32_C(0x00043BDE), UINT32_C(0x0052A794), UINT32_C(0x0044679C), UINT32_C(0x007F28C0), UINT32_C(0x00382AB6), UINT32_C(0x00395191), UINT32_C(0x0039B531), UINT32_C(0x0036F81A), UINT32_C(0x00795887)}, {UINT32_C(0x00F70354), UINT32_C(0x00328B59), UINT32_C(0x003D01A3), UINT32_C(0x00C9F394), UINT32_C(0x0022F3EA), UINT32_C(0x006F350F), UINT32_C(0x0058C2B3), UINT32_C(0x0040634F), UINT32_C(0x00320F7C), UINT32_C(0x006D4BEE), UINT32_C(0x0057CCC9)}}, {{UINT32_C(0x0093E9B9), UINT32_C(0x006BDC73), UINT32_C(0x0045A4A0), UINT32_C(0x0051A4D7), UINT32_C(0x005C415B), UINT32_C(0x0066BA11), UINT32_C(0x005AE064), UINT32_C(0x005245BE), UINT32_C(0x00013BE1), UINT32_C(0x006DD2F6), UINT32_C(0x006F9657)}, {UINT32_C(0x00E1468C), UINT32_C(0x0004FD78), UINT32_C(0x005800DD), UINT32_C(0x0091E526), UINT32_C(0x0012067D), UINT32_C(0x00481847), UINT32_C(0x000A9B9D), UINT32_C(0x00D7FB7D), UINT32_C(0x0008AF37), UINT32_C(0x00598387), UINT32_C(0x0053520A)}, {UINT32_C(0x009411F0), UINT32_C(0x00415CC6), UINT32_C(0x003CFAB9), UINT32_C(0x00BEE1C6), UINT32_C(0x0011F354), UINT32_C(0x00540421), UINT32_C(0x005B7E1D), UINT32_C(0x00AA9283), UINT32_C(0x00107457), UINT32_C(0x000DC4A7), UINT32_C(0x0058459D)}}, {{UINT32_C(0x00531F14), UINT32_C(0x001009E3), UINT32_C(0x0073B657), UINT32_C(0x00DC0159), UINT32_C(0x00665408), UINT32_C(0x0008FF55), UINT32_C(0x007D3DF9), UINT32_C(0x0031F848), UINT32_C(0x000B2149), UINT32_C(0x002E956E), UINT32_C(0x00749370)}, {UINT32_C(0x005EACBA), UINT32_C(0x0013C60C), UINT32_C(0x001B1DCF), UINT32_C(0x00BE1671), UINT32_C(0x005C94CC), UINT32_C(0x00437E24), UINT32_C(0x00214684), UINT32_C(0x00207638), UINT32_C(0x002A0D18), UINT32_C(0x001FE161), UINT32_C(0x001F585E)}, {UINT32_C(0x00FF468A), UINT32_C(0x004D3FD3), UINT32_C(0x000BBF50), UINT32_C(0x00011D45), UINT32_C(0x001070E3), UINT32_C(0x00438229), UINT32_C(0x0059AB03), UINT32_C(0x000AA329), UINT32_C(0x00315647), UINT32_C(0x000CCF61), UINT32_C(0x000F1485)}}, {{UINT32_C(0x009129E3), UINT32_C(0x0012693C), UINT32_C(0x004E8200), UINT32_C(0x00027D67), UINT32_C(0x00704244), UINT32_C(0x00210CBE), UINT32_C(0x00192F03), UINT32_C(0x005142DE), UINT32_C(0x001A84FB), UINT32_C(0x003745C5), UINT32_C(0x0064B88E)}, {UINT32_C(0x004FD4A7), UINT32_C(0x0039F707), UINT32_C(0x0027F3CE), UINT32_C(0x00C4924F), UINT32_C(0x004C1AC9), UINT32_C(0x005438CD), UINT32_C(0x0029571A), UINT32_C(0x009A42D3), UINT32_C(0x00437704), UINT32_C(0x00466DF8), UINT32_C(0x004CAE5F)}, {UINT32_C(0x00CF7ED3), UINT32_C(0x00327495), UINT32_C(0x0023D857), UINT32_C(0x003ADCC1), UINT32_C(0x00783A07), UINT32_C(0x0070C835), UINT32_C(0x0063B436), UINT32_C(0x00AF64FA), UINT32_C(0x0043E2D6), UINT32_C(0x0020BE90), UINT32_C(0x001B98ED)}}, {{UINT32_C(0x00A4C93E), UINT32_C(0x004F4C24), UINT32_C(0x007F4777), UINT32_C(0x000570E1), UINT32_C(0x003BF809), UINT32_C(0x001608A3), UINT32_C(0x0073E59E), UINT32_C(0x00B32CC7), UINT32_C(0x005501BF), UINT32_C(0x00027C79), UINT32_C(0x00793FF1)}, {UINT32_C(0x0019DCA8), UINT32_C(0x001F6A93), UINT32_C(0x007FB9FE), UINT32_C(0x00389B1A), UINT32_C(0x0032A1FC), UINT32_C(0x001BD948), UINT32_C(0x00661278), UINT32_C(0x00C98D56), UINT32_C(0x005CDFB2), UINT32_C(0x004DF065), UINT32_C(0x004DA8B5)}, {UINT32_C(0x008AF82E), UINT32_C(0x0049B701), UINT32_C(0x002A4058), UINT32_C(0x00937D79), UINT32_C(0x003E1209), UINT32_C(0x006D0224), UINT32_C(0x00654260), UINT32_C(0x0089CD81), UINT32_C(0x0031BE9C), UINT32_C(0x007F915B), UINT32_C(0x00545CEB)}}, {{UINT32_C(0x00606923), UINT32_C(0x00535E19), UINT32_C(0x004B9720), UINT32_C(0x007CF3AC), UINT32_C(0x0009FEE2), UINT32_C(0x0021E97C), UINT32_C(0x00417B8D), UINT32_C(0x0005C8DC), UINT32_C(0x00278974), UINT32_C(0x00220131), UINT32_C(0x0001F1EA)}, {UINT32_C(0x0051751A), UINT32_C(0x0022CFFE), UINT32_C(0x0065EAE7), UINT32_C(0x0002D66F), UINT32_C(0x001CFE5E), UINT32_C(0x0004D158), UINT32_C(0x003519D9), UINT32_C(0x00C3A426), UINT32_C(0x0050617E), UINT32_C(0x003DFC62), UINT32_C(0x000C1E82)}, {UINT32_C(0x0054E7F7), UINT32_C(0x003159A5), UINT32_C(0x00536937), UINT32_C(0x00743C99), UINT32_C(0x002C5B9E), UINT32_C(0x003E5BAC), UINT32_C(0x00713E45), UINT32_C(0x001C8CC3), UINT32_C(0x00379CFC), UINT32_C(0x0040AC92), UINT32_C(0x004FD6BA)}}, {{UINT32_C(0x00375AB1), UINT32_C(0x00558A76), UINT32_C(0x00127659), UINT32_C(0x002E36DD), UINT32_C(0x0017A438), UINT32_C(0x0037085E), UINT32_C(0x00460F93), UINT32_C(0x00DC21D1), UINT32_C(0x006D33E1), UINT32_C(0x004422EB), UINT32_C(0x003B5755)}, {UINT32_C(0x003DA9D4), UINT32_C(0x002248E9), UINT32_C(0x0003EAEC), UINT32_C(0x00D43561), UINT32_C(0x001BF26D), UINT32_C(0x005C5F13), UINT32_C(0x00626C12), UINT32_C(0x00B918DF), UINT32_C(0x0065CADE), UINT32_C(0x00717357), UINT32_C(0x005BB6B5)}, {UINT32_C(0x004024E3), UINT32_C(0x0046B939), UINT32_C(0x004E46F3), UINT32_C(0x001511AF), UINT32_C(0x00776BD7), UINT32_C(0x00320079), UINT32_C(0x007332F3), UINT32_C(0x007C852A), UINT32_C(0x007816D9), UINT32_C(0x0068E65E), UINT32_C(0x0045DBB4)}}, {{UINT32_C(0x00E0980A), UINT32_C(0x003CBFDB), UINT32_C(0x0074F5AA), UINT32_C(0x001EA8DD), UINT32_C(0x002C4C50), UINT32_C(0x00311D45), UINT32_C(0x0039C948), UINT32_C(0x0055988C), UINT32_C(0x005B5B63), UINT32_C(0x0041F40E), UINT32_C(0x002C22D4)}, {UINT32_C(0x00AE7440), UINT32_C(0x002ACDC7), UINT32_C(0x0078F4C2), UINT32_C(0x00199902), UINT32_C(0x001399A7), UINT32_C(0x003DDA20), UINT32_C(0x00658152), UINT32_C(0x005F646B), UINT32_C(0x006CA0B4), UINT32_C(0x0073AF03), UINT32_C(0x00052716)}, {UINT32_C(0x007F80B6), UINT32_C(0x003B2F94), UINT32_C(0x00373B83), UINT32_C(0x00EA1B50), UINT32_C(0x00716C1C), UINT32_C(0x0047A779), UINT32_C(0x006E478C), UINT32_C(0x009F1C86), UINT32_C(0x00772EF9), UINT32_C(0x003C8BB5), UINT32_C(0x0003308F)}}, }, { {{UINT32_C(0x003A0F8A), UINT32_C(0x00239C42), UINT32_C(0x002C8997), UINT32_C(0x00CB1312), UINT32_C(0x000BA3BF), UINT32_C(0x00433E65), UINT32_C(0x0004E93D), UINT32_C(0x00BC78BF), UINT32_C(0x0016315F), UINT32_C(0x007839DA), UINT32_C(0x00072F5D)}, {UINT32_C(0x00431B86), UINT32_C(0x0052B0C9), UINT32_C(0x007B6B54), UINT32_C(0x0004C666), UINT32_C(0x0021961D), UINT32_C(0x00630D09), UINT32_C(0x0026B7F8), UINT32_C(0x004B5633), UINT32_C(0x0036F916), UINT32_C(0x007D08E5), UINT32_C(0x0009930C)}, {UINT32_C(0x006B4F00), UINT32_C(0x001D54A4), UINT32_C(0x00692DA9), UINT32_C(0x0098837B), UINT32_C(0x0065006A), UINT32_C(0x000704B4), UINT32_C(0x00424FF9), UINT32_C(0x00C25B4D), UINT32_C(0x005B6D40), UINT32_C(0x0054C25F), UINT32_C(0x00387F6A)}}, {{UINT32_C(0x002F5512), UINT32_C(0x00654E2D), UINT32_C(0x00668342), UINT32_C(0x00E2D4F5), UINT32_C(0x001FCDE3), UINT32_C(0x00396F10), UINT32_C(0x00474238), UINT32_C(0x001DFA11), UINT32_C(0x00536151), UINT32_C(0x0060AA5E), UINT32_C(0x0008AD4A)}, {UINT32_C(0x00E427F0), UINT32_C(0x005588B0), UINT32_C(0x002428A4), UINT32_C(0x00DD098A), UINT32_C(0x002CAE12), UINT32_C(0x0005B6F7), UINT32_C(0x0003677F), UINT32_C(0x00B1209B), UINT32_C(0x000B9B82), UINT32_C(0x007C5D85), UINT32_C(0x00503BBE)}, {UINT32_C(0x003F3EE8), UINT32_C(0x0071495D), UINT32_C(0x004CA27C), UINT32_C(0x0057A105), UINT32_C(0x0038F4ED), UINT32_C(0x00019BA2), UINT32_C(0x00772D19), UINT32_C(0x000C8A1F), UINT32_C(0x002F07EB), UINT32_C(0x0009E4D0), UINT32_C(0x007AF54E)}}, {{UINT32_C(0x009ED4D4), UINT32_C(0x0035F235), UINT32_C(0x003B3EFE), UINT32_C(0x00B5687B), UINT32_C(0x007499B6), UINT32_C(0x004AEC1B), UINT32_C(0x0011D9F3), UINT32_C(0x00F934CA), UINT32_C(0x00626585), UINT32_C(0x000054A1), UINT32_C(0x0078ADC1)}, {UINT32_C(0x000F1D44), UINT32_C(0x00067701), UINT32_C(0x002F00AB), UINT32_C(0x008F68D3), UINT32_C(0x001C1C3B), UINT32_C(0x0049876F), UINT32_C(0x007C5E0C), UINT32_C(0x00958C8A), UINT32_C(0x00585F0E), UINT32_C(0x003980D2), UINT32_C(0x004C2741)}, {UINT32_C(0x004F0FD3), UINT32_C(0x000519E7), UINT32_C(0x00455DA2), UINT32_C(0x00E4A2DB), UINT32_C(0x0006A399), UINT32_C(0x005F65BE), UINT32_C(0x0010C895), UINT32_C(0x00E1E39C), UINT32_C(0x000D2D62), UINT32_C(0x005489D3), UINT32_C(0x0064F071)}}, {{UINT32_C(0x0075E904), UINT32_C(0x0034221F), UINT32_C(0x006C3082), UINT32_C(0x001DFF10), UINT32_C(0x007E367A), UINT32_C(0x0044654C), UINT32_C(0x00214821), UINT32_C(0x0044A5B4), UINT32_C(0x0065B709), UINT32_C(0x001D42EE), UINT32_C(0x001A97DC)}, {UINT32_C(0x000AD26D), UINT32_C(0x0030E580), UINT32_C(0x006F212B), UINT32_C(0x00100EE6), UINT32_C(0x000F70F2), UINT32_C(0x007CA3C6), UINT32_C(0x0017EBC5), UINT32_C(0x00311581), UINT32_C(0x002B7BB5), UINT32_C(0x00283403), UINT32_C(0x0001A581)}, {UINT32_C(0x009043A2), UINT32_C(0x001B3A77), UINT32_C(0x000FA816), UINT32_C(0x004B33BF), UINT32_C(0x005044AF), UINT32_C(0x001584E4), UINT32_C(0x00417440), UINT32_C(0x0006E3D6), UINT32_C(0x00723841), UINT32_C(0x007F1CF7), UINT32_C(0x000A8A6D)}}, {{UINT32_C(0x0041A857), UINT32_C(0x0034AE73), UINT32_C(0x004BB287), UINT32_C(0x0086B914), UINT32_C(0x006E11BD), UINT32_C(0x000F0FD1), UINT32_C(0x003523A3), UINT32_C(0x00860736), UINT32_C(0x00209E71), UINT32_C(0x0021DE0F), UINT32_C(0x001A4D6B)}, {UINT32_C(0x00F677D7), UINT32_C(0x0048110C), UINT32_C(0x0008F908), UINT32_C(0x009BD400), UINT32_C(0x006B94AC), UINT32_C(0x0037B8C2), UINT32_C(0x0049854F), UINT32_C(0x005C4D2F), UINT32_C(0x003BA675), UINT32_C(0x003C2448), UINT32_C(0x0069DC9E)}, {UINT32_C(0x00025EE8), UINT32_C(0x00384FEB), UINT32_C(0x001C9DA4), UINT32_C(0x0005A77C), UINT32_C(0x002CEBD8), UINT32_C(0x00253110), UINT32_C(0x0048F3CD), UINT32_C(0x0045CF49), UINT32_C(0x004771CD), UINT32_C(0x003F1990), UINT32_C(0x004F6051)}}, {{UINT32_C(0x0003827C), UINT32_C(0x001F112D), UINT32_C(0x0071973A), UINT32_C(0x0099B096), UINT32_C(0x000C34F8), UINT32_C(0x00397A6A), UINT32_C(0x007F26ED), UINT32_C(0x00AD0CF1), UINT32_C(0x0069FEEE), UINT32_C(0x000BB893), UINT32_C(0x00525AC4)}, {UINT32_C(0x001DE590), UINT32_C(0x0063FBAF), UINT32_C(0x0013D7EB), UINT32_C(0x0042B275), UINT32_C(0x006A1E1B), UINT32_C(0x0010AEC1), UINT32_C(0x002C78D4), UINT32_C(0x0028C9DF), UINT32_C(0x0045854B), UINT32_C(0x000789E7), UINT32_C(0x0000074F)}, {UINT32_C(0x008229BF), UINT32_C(0x0069358B), UINT32_C(0x001825AA), UINT32_C(0x00181405), UINT32_C(0x0073C536), UINT32_C(0x0063CEAE), UINT32_C(0x0015B3E7), UINT32_C(0x008AFF3F), UINT32_C(0x0010C89E), UINT32_C(0x001AF589), UINT32_C(0x004E0053)}}, {{UINT32_C(0x0028B9C8), UINT32_C(0x0034B521), UINT32_C(0x003323FB), UINT32_C(0x00B663B0), UINT32_C(0x004DAAA1), UINT32_C(0x002616C9), UINT32_C(0x0032ABEB), UINT32_C(0x0040C353), UINT32_C(0x00086B1D), UINT32_C(0x0036A180), UINT32_C(0x003E458C)}, {UINT32_C(0x00DCF643), UINT32_C(0x002C1001), UINT32_C(0x0052AA3F), UINT32_C(0x008E9839), UINT32_C(0x004A4E69), UINT32_C(0x001D0E16), UINT32_C(0x002FBB80), UINT32_C(0x0043D67E), UINT32_C(0x00478B72), UINT32_C(0x000F9CA3), UINT32_C(0x003AFC42)}, {UINT32_C(0x000DD581), UINT32_C(0x007F85BA), UINT32_C(0x00436D63), UINT32_C(0x00598F90), UINT32_C(0x0014B661), UINT32_C(0x00306562), UINT32_C(0x00761E86), UINT32_C(0x006C8505), UINT32_C(0x00568527), UINT32_C(0x006FDA5A), UINT32_C(0x001ADEA0)}}, {{UINT32_C(0x00890618), UINT32_C(0x000CD682), UINT32_C(0x007E36FF), UINT32_C(0x00303F12), UINT32_C(0x000B2A6D), UINT32_C(0x00415241), UINT32_C(0x0025E2C9), UINT32_C(0x00F0E829), UINT32_C(0x003A20B1), UINT32_C(0x005BC247), UINT32_C(0x004FF913)}, {UINT32_C(0x00C77BF2), UINT32_C(0x004061A1), UINT32_C(0x007197C8), UINT32_C(0x0031BABD), UINT32_C(0x00096046), UINT32_C(0x0045E643), UINT32_C(0x006FC909), UINT32_C(0x00088EA6), UINT32_C(0x0070A7CA), UINT32_C(0x0047B9D0), UINT32_C(0x0050FC48)}, {UINT32_C(0x00FF3B98), UINT32_C(0x0078A423), UINT32_C(0x0012CC47), UINT32_C(0x00AE776D), UINT32_C(0x0021495E), UINT32_C(0x004A3D73), UINT32_C(0x00391838), UINT32_C(0x001B0893), UINT32_C(0x000AE103), UINT32_C(0x005B7AC6), UINT32_C(0x0058F1A9)}}, {{UINT32_C(0x00CAFC7E), UINT32_C(0x006D3D15), UINT32_C(0x003C5E44), UINT32_C(0x00246F10), UINT32_C(0x00654846), UINT32_C(0x0021C350), UINT32_C(0x0029B782), UINT32_C(0x000F3BD5), UINT32_C(0x004BA2E1), UINT32_C(0x000A9813), UINT32_C(0x003DAC06)}, {UINT32_C(0x0081BEA5), UINT32_C(0x005AF750), UINT32_C(0x00231C43), UINT32_C(0x00546577), UINT32_C(0x00021D5B), UINT32_C(0x00323115), UINT32_C(0x00360EE5), UINT32_C(0x000B7CC0), UINT32_C(0x0042696D), UINT32_C(0x0014F38B), UINT32_C(0x00637448)}, {UINT32_C(0x00A10272), UINT32_C(0x0071C42F), UINT32_C(0x005406FB), UINT32_C(0x000728BE), UINT32_C(0x003FCE1D), UINT32_C(0x00721CC4), UINT32_C(0x00100233), UINT32_C(0x004A237D), UINT32_C(0x004691A1), UINT32_C(0x00439B3E), UINT32_C(0x0068BD1A)}}, {{UINT32_C(0x0071251B), UINT32_C(0x00458B01), UINT32_C(0x001E79F8), UINT32_C(0x00A77A06), UINT32_C(0x0074587F), UINT32_C(0x004DC1C1), UINT32_C(0x003C2A50), UINT32_C(0x00255231), UINT32_C(0x005C317C), UINT32_C(0x005F9187), UINT32_C(0x007CF5A9)}, {UINT32_C(0x00098FC2), UINT32_C(0x004404A1), UINT32_C(0x004D04AA), UINT32_C(0x00464189), UINT32_C(0x0061D090), UINT32_C(0x004E55A9), UINT32_C(0x0007C50C), UINT32_C(0x00BE825E), UINT32_C(0x00047F09), UINT32_C(0x000F7FEC), UINT32_C(0x004E42D2)}, {UINT32_C(0x00355E39), UINT32_C(0x002EAC10), UINT32_C(0x00511D7E), UINT32_C(0x00DF8195), UINT32_C(0x00658D53), UINT32_C(0x007832A7), UINT32_C(0x00688D4A), UINT32_C(0x00630A34), UINT32_C(0x001BF382), UINT32_C(0x005EC16E), UINT32_C(0x007B68AD)}}, {{UINT32_C(0x001E2363), UINT32_C(0x0019180C), UINT32_C(0x000DC491), UINT32_C(0x00624C85), UINT32_C(0x004109E5), UINT32_C(0x006F6F9F), UINT32_C(0x004721E1), UINT32_C(0x00D89B92), UINT32_C(0x002ACCC1), UINT32_C(0x0061C123), UINT32_C(0x00181505)}, {UINT32_C(0x005EFABB), UINT32_C(0x007D8985), UINT32_C(0x003C5BC1), UINT32_C(0x008F46C5), UINT32_C(0x0012B4ED), UINT32_C(0x0064759D), UINT32_C(0x0058D2A9), UINT32_C(0x00C25CA8), UINT32_C(0x004E6E93), UINT32_C(0x00503BCA), UINT32_C(0x00512AAA)}, {UINT32_C(0x009D1E14), UINT32_C(0x0074E51E), UINT32_C(0x00245CBE), UINT32_C(0x00248FE2), UINT32_C(0x0074BDE8), UINT32_C(0x007C074E), UINT32_C(0x0017A40E), UINT32_C(0x00FF34D1), UINT32_C(0x0057C0A3), UINT32_C(0x0061B3EC), UINT32_C(0x002677F7)}}, {{UINT32_C(0x00CBF754), UINT32_C(0x0031AE3A), UINT32_C(0x000333B8), UINT32_C(0x00D4CF78), UINT32_C(0x003E4A56), UINT32_C(0x004E6254), UINT32_C(0x002FDBFA), UINT32_C(0x00144B0A), UINT32_C(0x0063FB6C), UINT32_C(0x0001D4D6), UINT32_C(0x007A746B)}, {UINT32_C(0x007361B9), UINT32_C(0x005E8B06), UINT32_C(0x0044E134), UINT32_C(0x00F4A847), UINT32_C(0x002329D4), UINT32_C(0x0044A5B7), UINT32_C(0x0044F475), UINT32_C(0x00E61797), UINT32_C(0x0057FB07), UINT32_C(0x00051722), UINT32_C(0x00241ECD)}, {UINT32_C(0x0022A500), UINT32_C(0x0039A10A), UINT32_C(0x0042D3D5), UINT32_C(0x00B567D7), UINT32_C(0x0069AA6D), UINT32_C(0x00711215), UINT32_C(0x002ED8DD), UINT32_C(0x0000F158), UINT32_C(0x006238BE), UINT32_C(0x005650C3), UINT32_C(0x003D21E8)}}, {{UINT32_C(0x008B1C66), UINT32_C(0x0019194C), UINT32_C(0x0014BFE9), UINT32_C(0x00748F3D), UINT32_C(0x003CCE8F), UINT32_C(0x0048A87C), UINT32_C(0x006A1307), UINT32_C(0x006C2B73), UINT32_C(0x002E37A4), UINT32_C(0x0029162B), UINT32_C(0x0027B4E0)}, {UINT32_C(0x00C21F63), UINT32_C(0x0017955E), UINT32_C(0x0078C143), UINT32_C(0x00D5E54D), UINT32_C(0x00472F3D), UINT32_C(0x004E389E), UINT32_C(0x005B4F76), UINT32_C(0x004D23EE), UINT32_C(0x00532138), UINT32_C(0x00573674), UINT32_C(0x000CEC4B)}, {UINT32_C(0x003DE334), UINT32_C(0x006224BD), UINT32_C(0x000F9C6F), UINT32_C(0x000A9395), UINT32_C(0x00345EAF), UINT32_C(0x00107910), UINT32_C(0x0070F64A), UINT32_C(0x00D236DB), UINT32_C(0x0027355D), UINT32_C(0x00164A6C), UINT32_C(0x007D6D7B)}}, {{UINT32_C(0x008036C4), UINT32_C(0x004A1B91), UINT32_C(0x00471A92), UINT32_C(0x000371CC), UINT32_C(0x0056DDC0), UINT32_C(0x00130FC6), UINT32_C(0x00287BA8), UINT32_C(0x00EAE3E3), UINT32_C(0x006A7352), UINT32_C(0x004599E9), UINT32_C(0x00382164)}, {UINT32_C(0x00B93F79), UINT32_C(0x001E39CD), UINT32_C(0x00201F70), UINT32_C(0x00EF1A24), UINT32_C(0x00530D3A), UINT32_C(0x005F0647), UINT32_C(0x00008EE9), UINT32_C(0x00AD3CCB), UINT32_C(0x006C1B3C), UINT32_C(0x0020B88E), UINT32_C(0x00041C1B)}, {UINT32_C(0x006CAF3D), UINT32_C(0x004A21AC), UINT32_C(0x001CDE34), UINT32_C(0x0033DD65), UINT32_C(0x005353D1), UINT32_C(0x00584597), UINT32_C(0x00114182), UINT32_C(0x005CB2D9), UINT32_C(0x0053A5C5), UINT32_C(0x0071C2D4), UINT32_C(0x00244902)}}, {{UINT32_C(0x00AFA1E1), UINT32_C(0x0064BD11), UINT32_C(0x0014D188), UINT32_C(0x0002D13D), UINT32_C(0x000E36B8), UINT32_C(0x00354548), UINT32_C(0x007BB62C), UINT32_C(0x0078DF50), UINT32_C(0x0007E63C), UINT32_C(0x00056614), UINT32_C(0x003D5281)}, {UINT32_C(0x0028DBA4), UINT32_C(0x0004B80D), UINT32_C(0x004F7FF8), UINT32_C(0x007AA928), UINT32_C(0x0004ABF1), UINT32_C(0x0023D6FF), UINT32_C(0x0024B312), UINT32_C(0x00023B8A), UINT32_C(0x003B5EDA), UINT32_C(0x005AF149), UINT32_C(0x0019FA7B)}, {UINT32_C(0x00FF5820), UINT32_C(0x00358792), UINT32_C(0x0021A28C), UINT32_C(0x00C51693), UINT32_C(0x000098EE), UINT32_C(0x00034266), UINT32_C(0x0017723D), UINT32_C(0x00C2DDF5), UINT32_C(0x0000E734), UINT32_C(0x006DAEF6), UINT32_C(0x0071F7AD)}}, {{UINT32_C(0x002E3AD1), UINT32_C(0x00779201), UINT32_C(0x0068289F), UINT32_C(0x003F10B0), UINT32_C(0x002706C6), UINT32_C(0x002565B5), UINT32_C(0x00190C55), UINT32_C(0x0033BD51), UINT32_C(0x000E50F0), UINT32_C(0x00500819), UINT32_C(0x007C9D08)}, {UINT32_C(0x00FA9D8B), UINT32_C(0x0038DA3F), UINT32_C(0x00693AB6), UINT32_C(0x00DE9636), UINT32_C(0x005BB3EC), UINT32_C(0x0065B8F5), UINT32_C(0x00481E55), UINT32_C(0x0061E2C9), UINT32_C(0x001643BF), UINT32_C(0x00559100), UINT32_C(0x005F79E6)}, {UINT32_C(0x002E392D), UINT32_C(0x001227D4), UINT32_C(0x00293C7B), UINT32_C(0x00F92994), UINT32_C(0x002FAEE0), UINT32_C(0x00322623), UINT32_C(0x00434FE2), UINT32_C(0x00199F46), UINT32_C(0x005C180E), UINT32_C(0x005C3B89), UINT32_C(0x00566D13)}}, }, { {{UINT32_C(0x004EC5D5), UINT32_C(0x00019CD6), UINT32_C(0x000BBD45), UINT32_C(0x002193AE), UINT32_C(0x003165C6), UINT32_C(0x003D8D74), UINT32_C(0x0045059C), UINT32_C(0x008CF60C), UINT32_C(0x00487D06), UINT32_C(0x005A9D09), UINT32_C(0x007FC6E0)}, {UINT32_C(0x0037B42A), UINT32_C(0x0001A576), UINT32_C(0x000A750D), UINT32_C(0x0045B5DD), UINT32_C(0x006F0E25), UINT32_C(0x001F4ABF), UINT32_C(0x0056E0BA), UINT32_C(0x0065543B), UINT32_C(0x00564264), UINT32_C(0x005ADF58), UINT32_C(0x0069B6ED)}, {UINT32_C(0x0008533F), UINT32_C(0x00673ED0), UINT32_C(0x0053205E), UINT32_C(0x0060EB8B), UINT32_C(0x000C0216), UINT32_C(0x00483015), UINT32_C(0x001974B0), UINT32_C(0x00610E9B), UINT32_C(0x00116E88), UINT32_C(0x001B41F9), UINT32_C(0x003650B6)}}, {{UINT32_C(0x001E87C9), UINT32_C(0x00485E07), UINT32_C(0x00473783), UINT32_C(0x009E4755), UINT32_C(0x0077AAE3), UINT32_C(0x006CF828), UINT32_C(0x0064BF5B), UINT32_C(0x00DD1614), UINT32_C(0x001F3F82), UINT32_C(0x000CDC74), UINT32_C(0x005A217D)}, {UINT32_C(0x007E7DC9), UINT32_C(0x004C5775), UINT32_C(0x00577E73), UINT32_C(0x0054AC09), UINT32_C(0x00692B30), UINT32_C(0x005074AE), UINT32_C(0x0047FE74), UINT32_C(0x00814E6D), UINT32_C(0x00611400), UINT32_C(0x0054CC45), UINT32_C(0x0015E56A)}, {UINT32_C(0x0015BF7F), UINT32_C(0x00720BB8), UINT32_C(0x00128FA3), UINT32_C(0x00EFF525), UINT32_C(0x002C2B16), UINT32_C(0x000032B7), UINT32_C(0x0056FA97), UINT32_C(0x006F11AE), UINT32_C(0x0021850D), UINT32_C(0x00755623), UINT32_C(0x0004F475)}}, {{UINT32_C(0x00DC22CC), UINT32_C(0x005EC978), UINT32_C(0x0075EFAB), UINT32_C(0x00A67308), UINT32_C(0x001E17A7), UINT32_C(0x00471117), UINT32_C(0x003D0D24), UINT32_C(0x0002B875), UINT32_C(0x005CD15C), UINT32_C(0x00791ED0), UINT32_C(0x00519998)}, {UINT32_C(0x006DFC80), UINT32_C(0x003F2D4F), UINT32_C(0x00325346), UINT32_C(0x00CF12E4), UINT32_C(0x000EF0D1), UINT32_C(0x001D644B), UINT32_C(0x006A72BB), UINT32_C(0x00E463A5), UINT32_C(0x00393A41), UINT32_C(0x003CFAB9), UINT32_C(0x0045AEDD)}, {UINT32_C(0x008CF232), UINT32_C(0x00355CF6), UINT32_C(0x0018330B), UINT32_C(0x00E357D6), UINT32_C(0x002E9F65), UINT32_C(0x00192AA3), UINT32_C(0x0050E31A), UINT32_C(0x00542788), UINT32_C(0x005C03B4), UINT32_C(0x0016A4C7), UINT32_C(0x004D85E7)}}, {{UINT32_C(0x005E1B7C), UINT32_C(0x005396EB), UINT32_C(0x002953AC), UINT32_C(0x0066F21B), UINT32_C(0x000744EB), UINT32_C(0x002BB57E), UINT32_C(0x00777EC0), UINT32_C(0x000C0908), UINT32_C(0x0063DFBF), UINT32_C(0x0019D0E1), UINT32_C(0x0053259A)}, {UINT32_C(0x00092AA9), UINT32_C(0x006D7967), UINT32_C(0x007A34E9), UINT32_C(0x0088833B), UINT32_C(0x007C72DF), UINT32_C(0x00154B92), UINT32_C(0x0004BEAB), UINT32_C(0x00709C21), UINT32_C(0x001A33F0), UINT32_C(0x007A15C7), UINT32_C(0x007CB81A)}, {UINT32_C(0x00427117), UINT32_C(0x0060010D), UINT32_C(0x002FB59E), UINT32_C(0x0081DF74), UINT32_C(0x001C3AFF), UINT32_C(0x00325E38), UINT32_C(0x003E9EB8), UINT32_C(0x00AFA8A7), UINT32_C(0x002A7623), UINT32_C(0x001940EC), UINT32_C(0x00678A03)}}, {{UINT32_C(0x0089D0DA), UINT32_C(0x005DD15D), UINT32_C(0x0007F023), UINT32_C(0x0084B837), UINT32_C(0x0059A36B), UINT32_C(0x0014C4F9), UINT32_C(0x005A10B9), UINT32_C(0x00EEA8E6), UINT32_C(0x0032C712), UINT32_C(0x00207104), UINT32_C(0x0051CC16)}, {UINT32_C(0x00788203), UINT32_C(0x005BFACD), UINT32_C(0x0034A954), UINT32_C(0x00E0855B), UINT32_C(0x007F6BD9), UINT32_C(0x003EAB3A), UINT32_C(0x0061F2A3), UINT32_C(0x004BF5E9), UINT32_C(0x00203A8B), UINT32_C(0x007B37C8), UINT32_C(0x00403792)}, {UINT32_C(0x0091D84F), UINT32_C(0x006D1BA7), UINT32_C(0x0036B343), UINT32_C(0x00319941), UINT32_C(0x000AB9F0), UINT32_C(0x007A1DC1), UINT32_C(0x0031981C), UINT32_C(0x00F43266), UINT32_C(0x0008BB75), UINT32_C(0x00485DAF), UINT32_C(0x000A9D74)}}, {{UINT32_C(0x00243625), UINT32_C(0x005BB841), UINT32_C(0x00525C95), UINT32_C(0x00BC116B), UINT32_C(0x003839C3), UINT32_C(0x0041EB1B), UINT32_C(0x00221F6B), UINT32_C(0x004EC4AF), UINT32_C(0x006D762B), UINT32_C(0x005C54FC), UINT32_C(0x007A1F82)}, {UINT32_C(0x00C26515), UINT32_C(0x0000ED4C), UINT32_C(0x001E3B09), UINT32_C(0x000BEE59), UINT32_C(0x0063B3C5), UINT32_C(0x00275D84), UINT32_C(0x005756AC), UINT32_C(0x00AF183D), UINT32_C(0x0009020F), UINT32_C(0x006E34C7), UINT32_C(0x004DC0C8)}, {UINT32_C(0x005B4EB0), UINT32_C(0x0039BA12), UINT32_C(0x000B792C), UINT32_C(0x00D6B962), UINT32_C(0x003DFD9C), UINT32_C(0x004C2A8A), UINT32_C(0x0022A010), UINT32_C(0x0067AFC9), UINT32_C(0x0057241F), UINT32_C(0x003A2810), UINT32_C(0x005C0C2A)}}, {{UINT32_C(0x000F4D05), UINT32_C(0x001E1BA9), UINT32_C(0x003631A2), UINT32_C(0x002B29CE), UINT32_C(0x007696F1), UINT32_C(0x00313416), UINT32_C(0x001EB6D3), UINT32_C(0x008D3460), UINT32_C(0x003364E8), UINT32_C(0x000429EE), UINT32_C(0x007E4FF6)}, {UINT32_C(0x00B98C72), UINT32_C(0x0043B1EA), UINT32_C(0x001A581F), UINT32_C(0x00295970), UINT32_C(0x0010F065), UINT32_C(0x0039E01E), UINT32_C(0x002E33BA), UINT32_C(0x0047DF1A), UINT32_C(0x0041422E), UINT32_C(0x005A3851), UINT32_C(0x003FA8FF)}, {UINT32_C(0x00A29B8E), UINT32_C(0x00702100), UINT32_C(0x001DFDFB), UINT32_C(0x006CA23F), UINT32_C(0x004F967B), UINT32_C(0x00417B94), UINT32_C(0x0073DD0F), UINT32_C(0x00D08DB3), UINT32_C(0x001C4006), UINT32_C(0x003F92DD), UINT32_C(0x000F2874)}}, {{UINT32_C(0x008D5AC8), UINT32_C(0x0031FE77), UINT32_C(0x001EE7B5), UINT32_C(0x0017DDC8), UINT32_C(0x0010F7EB), UINT32_C(0x0078D778), UINT32_C(0x0051CF94), UINT32_C(0x00737A58), UINT32_C(0x002F2CA5), UINT32_C(0x00314107), UINT32_C(0x003BD0E4)}, {UINT32_C(0x00708B31), UINT32_C(0x006E4EE5), UINT32_C(0x0072B5A8), UINT32_C(0x00B52995), UINT32_C(0x001B7B7D), UINT32_C(0x002853F5), UINT32_C(0x0071F2D3), UINT32_C(0x0090F660), UINT32_C(0x004E8BAE), UINT32_C(0x002AEB93), UINT32_C(0x007FE004)}, {UINT32_C(0x0074B2E7), UINT32_C(0x0036F8CC), UINT32_C(0x005A0B4F), UINT32_C(0x006AC18C), UINT32_C(0x0023E1D0), UINT32_C(0x0018985D), UINT32_C(0x0044A4EA), UINT32_C(0x00EAD750), UINT32_C(0x001739B5), UINT32_C(0x00259016), UINT32_C(0x0069AD16)}}, {{UINT32_C(0x00236C6C), UINT32_C(0x002BDCF8), UINT32_C(0x00737342), UINT32_C(0x00FFE743), UINT32_C(0x0067A4D9), UINT32_C(0x0066D9C1), UINT32_C(0x00681F98), UINT32_C(0x00599DED), UINT32_C(0x0057B074), UINT32_C(0x001B308C), UINT32_C(0x0056660C)}, {UINT32_C(0x008B1685), UINT32_C(0x0027EA30), UINT32_C(0x0033CA2D), UINT32_C(0x0098682C), UINT32_C(0x003F67B0), UINT32_C(0x000C48E9), UINT32_C(0x0068A704), UINT32_C(0x001C6E9D), UINT32_C(0x00123D06), UINT32_C(0x0050A933), UINT32_C(0x0053C6D2)}, {UINT32_C(0x00917431), UINT32_C(0x002F64FB), UINT32_C(0x00755E9F), UINT32_C(0x005D5B9F), UINT32_C(0x006E0959), UINT32_C(0x00068928), UINT32_C(0x00509EB9), UINT32_C(0x009B4E5E), UINT32_C(0x0000998B), UINT32_C(0x0008DAD5), UINT32_C(0x00166125)}}, {{UINT32_C(0x00074C2E), UINT32_C(0x00652B12), UINT32_C(0x00202F3C), UINT32_C(0x0042EBC1), UINT32_C(0x00500167), UINT32_C(0x005CDA15), UINT32_C(0x001381DA), UINT32_C(0x00CC99F2), UINT32_C(0x005723CA), UINT32_C(0x001A8C3B), UINT32_C(0x003D5615)}, {UINT32_C(0x00F1A960), UINT32_C(0x007380F6), UINT32_C(0x007009E1), UINT32_C(0x002EF85B), UINT32_C(0x003B246B), UINT32_C(0x0041405A), UINT32_C(0x001314CB), UINT32_C(0x009FDCD0), UINT32_C(0x0077491F), UINT32_C(0x003266F0), UINT32_C(0x00760D83)}, {UINT32_C(0x00C7818E), UINT32_C(0x007864C2), UINT32_C(0x00244BD0), UINT32_C(0x00F38B08), UINT32_C(0x00688F96), UINT32_C(0x0075C705), UINT32_C(0x00278414), UINT32_C(0x00B2BFF0), UINT32_C(0x0067126E), UINT32_C(0x007B7F7E), UINT32_C(0x00078584)}}, {{UINT32_C(0x00FE7A46), UINT32_C(0x005584A0), UINT32_C(0x005CDD0D), UINT32_C(0x004CF5A8), UINT32_C(0x0019CFA7), UINT32_C(0x00087268), UINT32_C(0x007FF3F3), UINT32_C(0x0087ACFD), UINT32_C(0x0017BD41), UINT32_C(0x004A35AA), UINT32_C(0x0014C1BD)}, {UINT32_C(0x005A4052), UINT32_C(0x0032A135), UINT32_C(0x007056C3), UINT32_C(0x0072F85C), UINT32_C(0x0024A79D), UINT32_C(0x003D7320), UINT32_C(0x0007F20D), UINT32_C(0x00BEA269), UINT32_C(0x0032F584), UINT32_C(0x00557016), UINT32_C(0x0009FC2A)}, {UINT32_C(0x006E58DD), UINT32_C(0x00414D93), UINT32_C(0x001D725A), UINT32_C(0x00A5AB22), UINT32_C(0x000AD82C), UINT32_C(0x00613758), UINT32_C(0x00773B55), UINT32_C(0x00D581E2), UINT32_C(0x006342F0), UINT32_C(0x0022FB1A), UINT32_C(0x0028348D)}}, {{UINT32_C(0x00940FFC), UINT32_C(0x006CC86D), UINT32_C(0x0033CE22), UINT32_C(0x00A629FD), UINT32_C(0x0032CFBE), UINT32_C(0x0011788D), UINT32_C(0x0027D4E5), UINT32_C(0x0043AC5A), UINT32_C(0x003CEEDA), UINT32_C(0x000057AA), UINT32_C(0x00614643)}, {UINT32_C(0x00312B0D), UINT32_C(0x003C3AC9), UINT32_C(0x00126EE8), UINT32_C(0x003F24AF), UINT32_C(0x0006CC19), UINT32_C(0x00656F4F), UINT32_C(0x004E91CF), UINT32_C(0x001EC679), UINT32_C(0x0010294E), UINT32_C(0x0023F5E9), UINT32_C(0x00181E45)}, {UINT32_C(0x008C28C0), UINT32_C(0x0016213D), UINT32_C(0x0010311C), UINT32_C(0x00744F39), UINT32_C(0x006CEA8C), UINT32_C(0x0066FA80), UINT32_C(0x005E3FA5), UINT32_C(0x001D61EB), UINT32_C(0x001E0217), UINT32_C(0x002F43D5), UINT32_C(0x001EAA47)}}, {{UINT32_C(0x00854120), UINT32_C(0x005AA732), UINT32_C(0x00608D63), UINT32_C(0x003180C7), UINT32_C(0x00513CB6), UINT32_C(0x0013362E), UINT32_C(0x00492465), UINT32_C(0x00A81D33), UINT32_C(0x0038349B), UINT32_C(0x004C1B24), UINT32_C(0x0061B37A)}, {UINT32_C(0x00B13B17), UINT32_C(0x003AC756), UINT32_C(0x004C7642), UINT32_C(0x0067AC7F), UINT32_C(0x003F23FE), UINT32_C(0x0058AA8A), UINT32_C(0x000B0977), UINT32_C(0x001D605C), UINT32_C(0x00713AD3), UINT32_C(0x0060BA46), UINT32_C(0x0041F85A)}, {UINT32_C(0x00E37216), UINT32_C(0x0043A345), UINT32_C(0x00223407), UINT32_C(0x00256265), UINT32_C(0x0011C42F), UINT32_C(0x00138466), UINT32_C(0x004733CC), UINT32_C(0x003535EC), UINT32_C(0x0001BC86), UINT32_C(0x003D1B86), UINT32_C(0x004AE885)}}, {{UINT32_C(0x00DC7159), UINT32_C(0x001767D1), UINT32_C(0x007AE0AB), UINT32_C(0x000878A1), UINT32_C(0x004FB364), UINT32_C(0x0033B0EF), UINT32_C(0x00742CF7), UINT32_C(0x00C6A756), UINT32_C(0x0078F550), UINT32_C(0x00711F81), UINT32_C(0x0065A975)}, {UINT32_C(0x00439414), UINT32_C(0x0015AFCF), UINT32_C(0x007EE055), UINT32_C(0x00DD71C8), UINT32_C(0x0045F656), UINT32_C(0x00624A54), UINT32_C(0x003005FC), UINT32_C(0x00BC7324), UINT32_C(0x0055842E), UINT32_C(0x00165223), UINT32_C(0x0037D7D6)}, {UINT32_C(0x0019F5F5), UINT32_C(0x0020DA89), UINT32_C(0x006C89E9), UINT32_C(0x00F41904), UINT32_C(0x003D42D9), UINT32_C(0x0055B010), UINT32_C(0x00175AA4), UINT32_C(0x00B1A716), UINT32_C(0x000083AA), UINT32_C(0x000A3EEC), UINT32_C(0x00170791)}}, {{UINT32_C(0x004FE6CC), UINT32_C(0x0027F794), UINT32_C(0x001DEE50), UINT32_C(0x001D47C8), UINT32_C(0x00482A07), UINT32_C(0x00728F59), UINT32_C(0x002E9AFB), UINT32_C(0x00416429), UINT32_C(0x00429086), UINT32_C(0x002A42B2), UINT32_C(0x0004C02A)}, {UINT32_C(0x004B5C0A), UINT32_C(0x0035BDD6), UINT32_C(0x001FE687), UINT32_C(0x0027AF73), UINT32_C(0x001A6D1A), UINT32_C(0x000FBB3C), UINT32_C(0x00213872), UINT32_C(0x00EC16E6), UINT32_C(0x00636F30), UINT32_C(0x00415394), UINT32_C(0x0012E98D)}, {UINT32_C(0x008D471A), UINT32_C(0x0069E551), UINT32_C(0x00493B23), UINT32_C(0x006ED1B7), UINT32_C(0x0047A3E8), UINT32_C(0x00249EC8), UINT32_C(0x003D1AD9), UINT32_C(0x0023243A), UINT32_C(0x0078E657), UINT32_C(0x007AC870), UINT32_C(0x0039DDDE)}}, {{UINT32_C(0x00775995), UINT32_C(0x004A7A1C), UINT32_C(0x00706EC4), UINT32_C(0x005F75E2), UINT32_C(0x0023C9C5), UINT32_C(0x0024BCC8), UINT32_C(0x007DC9AC), UINT32_C(0x001AFD8F), UINT32_C(0x006B47B9), UINT32_C(0x004747AD), UINT32_C(0x007B084D)}, {UINT32_C(0x000A9B5C), UINT32_C(0x007354D6), UINT32_C(0x006AB188), UINT32_C(0x00A35212), UINT32_C(0x003BDF54), UINT32_C(0x00027ACE), UINT32_C(0x002AEF52), UINT32_C(0x00C45137), UINT32_C(0x0058980E), UINT32_C(0x0050F4F0), UINT32_C(0x003E8EEE)}, {UINT32_C(0x00EB4040), UINT32_C(0x00618F66), UINT32_C(0x0031BE2F), UINT32_C(0x00A1EAB0), UINT32_C(0x00038AF5), UINT32_C(0x0001EC6C), UINT32_C(0x0007421A), UINT32_C(0x0051B097), UINT32_C(0x0043B013), UINT32_C(0x0060ED3F), UINT32_C(0x0036AC22)}}, }, { {{UINT32_C(0x00A77DAC), UINT32_C(0x001DB3FD), UINT32_C(0x00389F54), UINT32_C(0x00564F6D), UINT32_C(0x0063CF36), UINT32_C(0x001C46B6), UINT32_C(0x00311686), UINT32_C(0x00E982B7), UINT32_C(0x00027D0F), UINT32_C(0x0050362C), UINT32_C(0x001AEA89)}, {UINT32_C(0x0002BC8A), UINT32_C(0x0036E565), UINT32_C(0x00342121), UINT32_C(0x00ED769D), UINT32_C(0x002A92C3), UINT32_C(0x00325573), UINT32_C(0x0018B0E6), UINT32_C(0x00F11ADF), UINT32_C(0x004B976B), UINT32_C(0x00069633), UINT32_C(0x004FFC55)}, {UINT32_C(0x00FD2FC2), UINT32_C(0x00401B07), UINT32_C(0x00294102), UINT32_C(0x008EA5E0), UINT32_C(0x0030664D), UINT32_C(0x00142EC3), UINT32_C(0x003FE051), UINT32_C(0x00F56D80), UINT32_C(0x0039FEE3), UINT32_C(0x00000AEB), UINT32_C(0x006D0C5F)}}, {{UINT32_C(0x00DD75D0), UINT32_C(0x0044A3C3), UINT32_C(0x005A506D), UINT32_C(0x00EC37FD), UINT32_C(0x00316AD7), UINT32_C(0x0000D14B), UINT32_C(0x00204476), UINT32_C(0x0051C697), UINT32_C(0x00083305), UINT32_C(0x0058D9B1), UINT32_C(0x0070999F)}, {UINT32_C(0x00E5E93B), UINT32_C(0x006C0468), UINT32_C(0x0009400E), UINT32_C(0x0075F8FF), UINT32_C(0x0035F1A4), UINT32_C(0x00506173), UINT32_C(0x002364E5), UINT32_C(0x00414D87), UINT32_C(0x0008B606), UINT32_C(0x00686394), UINT32_C(0x006AA160)}, {UINT32_C(0x006BD2E2), UINT32_C(0x007A2B7F), UINT32_C(0x005F146B), UINT32_C(0x00369239), UINT32_C(0x00079C56), UINT32_C(0x00062C62), UINT32_C(0x0077B021), UINT32_C(0x003A29B7), UINT32_C(0x002867FF), UINT32_C(0x0055BBB5), UINT32_C(0x0005D042)}}, {{UINT32_C(0x00D8B383), UINT32_C(0x007DD79F), UINT32_C(0x00789E04), UINT32_C(0x00F01FC3), UINT32_C(0x0009A138), UINT32_C(0x00652EF9), UINT32_C(0x0004B8F0), UINT32_C(0x00CD2D9B), UINT32_C(0x002A8B21), UINT32_C(0x00711CBB), UINT32_C(0x003F479B)}, {UINT32_C(0x0084BAF3), UINT32_C(0x00077832), UINT32_C(0x005C239A), UINT32_C(0x0060F9F5), UINT32_C(0x00157D11), UINT32_C(0x004B04C3), UINT32_C(0x00398E89), UINT32_C(0x00DFDB89), UINT32_C(0x004B12EE), UINT32_C(0x002B1159), UINT32_C(0x0070A1B8)}, {UINT32_C(0x00034A6C), UINT32_C(0x004C89E9), UINT32_C(0x0022DB26), UINT32_C(0x00C601C3), UINT32_C(0x0032D1E3), UINT32_C(0x002503F8), UINT32_C(0x00632E24), UINT32_C(0x00EA95FF), UINT32_C(0x000FDA31), UINT32_C(0x002551E5), UINT32_C(0x004F9CB2)}}, {{UINT32_C(0x00862AF4), UINT32_C(0x00210FBD), UINT32_C(0x001E6C80), UINT32_C(0x00400C9B), UINT32_C(0x000AA70B), UINT32_C(0x00736A0A), UINT32_C(0x005A2C84), UINT32_C(0x00C59BAC), UINT32_C(0x000BB281), UINT32_C(0x002CF44A), UINT32_C(0x0061244E)}, {UINT32_C(0x00856415), UINT32_C(0x0016B2C8), UINT32_C(0x00735666), UINT32_C(0x001D23DD), UINT32_C(0x001134A9), UINT32_C(0x0017A1D4), UINT32_C(0x0026D1CE), UINT32_C(0x00EECC13), UINT32_C(0x0049B200), UINT32_C(0x00153F17), UINT32_C(0x0011DDAE)}, {UINT32_C(0x00007750), UINT32_C(0x001134B0), UINT32_C(0x004BF17D), UINT32_C(0x00D2423A), UINT32_C(0x003D2D7B), UINT32_C(0x00085F31), UINT32_C(0x00227CDF), UINT32_C(0x00654CD2), UINT32_C(0x00082CCF), UINT32_C(0x007C9CA4), UINT32_C(0x004C47BB)}}, {{UINT32_C(0x00362E13), UINT32_C(0x003A337C), UINT32_C(0x002BBA20), UINT32_C(0x0001856C), UINT32_C(0x0002C1DE), UINT32_C(0x000E51A8), UINT32_C(0x00457B9D), UINT32_C(0x0057882E), UINT32_C(0x0037807D), UINT32_C(0x0015B24A), UINT32_C(0x001A74BE)}, {UINT32_C(0x003DB4CB), UINT32_C(0x004A35FE), UINT32_C(0x003DBBAB), UINT32_C(0x007E3023), UINT32_C(0x00194FC7), UINT32_C(0x0012B3C2), UINT32_C(0x00776FBF), UINT32_C(0x001E11B7), UINT32_C(0x002DB7AA), UINT32_C(0x001DED18), UINT32_C(0x0069ABF1)}, {UINT32_C(0x005FE93D), UINT32_C(0x000BDB4C), UINT32_C(0x00250B7A), UINT32_C(0x008A93E9), UINT32_C(0x006F3CAC), UINT32_C(0x0003D972), UINT32_C(0x0057B7D4), UINT32_C(0x00D0FA5F), UINT32_C(0x0051BCDF), UINT32_C(0x0037A606), UINT32_C(0x0046594A)}}, {{UINT32_C(0x00FD1F79), UINT32_C(0x00305A30), UINT32_C(0x000AD2AE), UINT32_C(0x00BFF664), UINT32_C(0x002CE671), UINT32_C(0x006F9E53), UINT32_C(0x00242322), UINT32_C(0x000EB83C), UINT32_C(0x000DA108), UINT32_C(0x007B1505), UINT32_C(0x001BB588)}, {UINT32_C(0x00D17F2A), UINT32_C(0x0005A272), UINT32_C(0x0023C922), UINT32_C(0x00F5BEA6), UINT32_C(0x00534FEC), UINT32_C(0x00201847), UINT32_C(0x0057D139), UINT32_C(0x00553AC8), UINT32_C(0x0038D49D), UINT32_C(0x000D9A41), UINT32_C(0x0023FA44)}, {UINT32_C(0x00A4394C), UINT32_C(0x001C1150), UINT32_C(0x000C4BC9), UINT32_C(0x0013E6EB), UINT32_C(0x0030FD03), UINT32_C(0x005496B5), UINT32_C(0x002200CE), UINT32_C(0x009477CB), UINT32_C(0x00167FB8), UINT32_C(0x001C4D58), UINT32_C(0x004FD444)}}, {{UINT32_C(0x00D5EEEC), UINT32_C(0x0038E42A), UINT32_C(0x005A4364), UINT32_C(0x00980627), UINT32_C(0x007F2577), UINT32_C(0x003612FD), UINT32_C(0x004E0E1F), UINT32_C(0x0074D370), UINT32_C(0x00528EA6), UINT32_C(0x00018673), UINT32_C(0x004D7509)}, {UINT32_C(0x0029610F), UINT32_C(0x004535B8), UINT32_C(0x00041762), UINT32_C(0x008EF8FD), UINT32_C(0x002AA59D), UINT32_C(0x00083B18), UINT32_C(0x00479122), UINT32_C(0x005A4922), UINT32_C(0x002CECA2), UINT32_C(0x00256BF4), UINT32_C(0x0043B7C3)}, {UINT32_C(0x00B47D51), UINT32_C(0x00748FB4), UINT32_C(0x00584310), UINT32_C(0x00EE3A6C), UINT32_C(0x005E556A), UINT32_C(0x0052BA2B), UINT32_C(0x00500FBB), UINT32_C(0x00A9860A), UINT32_C(0x007A7128), UINT32_C(0x000D1669), UINT32_C(0x002C17E0)}}, {{UINT32_C(0x0007B0B0), UINT32_C(0x005AEDEE), UINT32_C(0x0076ED54), UINT32_C(0x00274E51), UINT32_C(0x007BD17E), UINT32_C(0x000BE439), UINT32_C(0x000ED5DB), UINT32_C(0x00D7925E), UINT32_C(0x003F2A50), UINT32_C(0x002F0773), UINT32_C(0x003546F9)}, {UINT32_C(0x001B8BC5), UINT32_C(0x00567960), UINT32_C(0x0038FA10), UINT32_C(0x00C2575C), UINT32_C(0x0027332E), UINT32_C(0x003071D4), UINT32_C(0x0078A9F6), UINT32_C(0x00BCAE5E), UINT32_C(0x00760FF1), UINT32_C(0x000E8EC0), UINT32_C(0x006EA98F)}, {UINT32_C(0x00676ADD), UINT32_C(0x004ED26F), UINT32_C(0x0030B66C), UINT32_C(0x00E96FB8), UINT32_C(0x0055C569), UINT32_C(0x00323FB1), UINT32_C(0x00440986), UINT32_C(0x00F3E007), UINT32_C(0x005F14FE), UINT32_C(0x000E5FD2), UINT32_C(0x00585D5A)}}, {{UINT32_C(0x0032D10F), UINT32_C(0x00607846), UINT32_C(0x00476A55), UINT32_C(0x00FE8A15), UINT32_C(0x0076749E), UINT32_C(0x00385608), UINT32_C(0x0029E6F6), UINT32_C(0x0098FFAC), UINT32_C(0x004086D0), UINT32_C(0x00587F0C), UINT32_C(0x0048DEFF)}, {UINT32_C(0x008F82EA), UINT32_C(0x00011EC5), UINT32_C(0x001CAAB9), UINT32_C(0x00B6A781), UINT32_C(0x000436C9), UINT32_C(0x005DDE65), UINT32_C(0x002E38F8), UINT32_C(0x003A69F4), UINT32_C(0x003DF1D2), UINT32_C(0x0026F1E7), UINT32_C(0x003D5D6D)}, {UINT32_C(0x007322DD), UINT32_C(0x001FFAF0), UINT32_C(0x0012A21B), UINT32_C(0x003853AE), UINT32_C(0x0001D98A), UINT32_C(0x0000748E), UINT32_C(0x00667AE8), UINT32_C(0x002F7BE9), UINT32_C(0x001686BF), UINT32_C(0x00050052), UINT32_C(0x0079765D)}}, {{UINT32_C(0x00267E76), UINT32_C(0x000F5A32), UINT32_C(0x00798CB2), UINT32_C(0x0086E395), UINT32_C(0x00005266), UINT32_C(0x0025806B), UINT32_C(0x007EE459), UINT32_C(0x001EF2A7), UINT32_C(0x00034FD1), UINT32_C(0x0018C3F9), UINT32_C(0x0002FCBE)}, {UINT32_C(0x004C278B), UINT32_C(0x0025C270), UINT32_C(0x00642402), UINT32_C(0x0024F47B), UINT32_C(0x006E96A1), UINT32_C(0x006B67FC), UINT32_C(0x00446A7C), UINT32_C(0x009B9BAB), UINT32_C(0x00774C2A), UINT32_C(0x005B2890), UINT32_C(0x0007534E)}, {UINT32_C(0x00979647), UINT32_C(0x003D9A12), UINT32_C(0x0009C489), UINT32_C(0x002D6F0A), UINT32_C(0x007ED7E2), UINT32_C(0x004A5B1B), UINT32_C(0x005C265E), UINT32_C(0x006AF72E), UINT32_C(0x003BFD06), UINT32_C(0x0019EE72), UINT32_C(0x002BC98A)}}, {{UINT32_C(0x0036094F), UINT32_C(0x0053D51E), UINT32_C(0x0039DA8E), UINT32_C(0x00C24407), UINT32_C(0x00754444), UINT32_C(0x00541686), UINT32_C(0x0038413C), UINT32_C(0x003D42D5), UINT32_C(0x002B576F), UINT32_C(0x0025B7F0), UINT32_C(0x00037AE8)}, {UINT32_C(0x00FF6011), UINT32_C(0x00739A4B), UINT32_C(0x002CFD0E), UINT32_C(0x0034CBE5), UINT32_C(0x001C69C4), UINT32_C(0x00183B00), UINT32_C(0x0070A07F), UINT32_C(0x00416B07), UINT32_C(0x001873B9), UINT32_C(0x004C82C4), UINT32_C(0x0012AF7C)}, {UINT32_C(0x009DAB06), UINT32_C(0x00006525), UINT32_C(0x005F4AC2), UINT32_C(0x0007B1CD), UINT32_C(0x0025B80B), UINT32_C(0x006B0D4A), UINT32_C(0x0017A0F3), UINT32_C(0x005371E3), UINT32_C(0x00786EF8), UINT32_C(0x005F7C4F), UINT32_C(0x0060CA6A)}}, {{UINT32_C(0x00D21942), UINT32_C(0x0071B130), UINT32_C(0x0010AF58), UINT32_C(0x0032F341), UINT32_C(0x0073BD94), UINT32_C(0x0005C17D), UINT32_C(0x0052C1D1), UINT32_C(0x00AC355D), UINT32_C(0x007A20DB), UINT32_C(0x0041259A), UINT32_C(0x0044FFAB)}, {UINT32_C(0x006E331F), UINT32_C(0x007C1495), UINT32_C(0x00648A89), UINT32_C(0x00C406A1), UINT32_C(0x000F1EB7), UINT32_C(0x0031E5FB), UINT32_C(0x006C8D65), UINT32_C(0x00C6C865), UINT32_C(0x004B7DF2), UINT32_C(0x0079769E), UINT32_C(0x002083D4)}, {UINT32_C(0x00980997), UINT32_C(0x00485E01), UINT32_C(0x000FDD04), UINT32_C(0x00404293), UINT32_C(0x001BE19E), UINT32_C(0x00079D78), UINT32_C(0x0058EB9B), UINT32_C(0x005DBD87), UINT32_C(0x00702A47), UINT32_C(0x0039F856), UINT32_C(0x000ADFA8)}}, {{UINT32_C(0x00601C16), UINT32_C(0x006BAD25), UINT32_C(0x000B27D9), UINT32_C(0x003CE316), UINT32_C(0x000BF903), UINT32_C(0x00305942), UINT32_C(0x0055AA45), UINT32_C(0x006C251C), UINT32_C(0x001C0764), UINT32_C(0x004DB871), UINT32_C(0x006990D9)}, {UINT32_C(0x0035029C), UINT32_C(0x0056F54C), UINT32_C(0x0071AAA5), UINT32_C(0x003BB302), UINT32_C(0x00511665), UINT32_C(0x004B1D6D), UINT32_C(0x00792CCE), UINT32_C(0x009D6482), UINT32_C(0x005F2322), UINT32_C(0x0060FBFB), UINT32_C(0x003DAEFF)}, {UINT32_C(0x005DFF91), UINT32_C(0x007B3C15), UINT32_C(0x003C73C5), UINT32_C(0x0099D915), UINT32_C(0x0047AF99), UINT32_C(0x005655E6), UINT32_C(0x001004A5), UINT32_C(0x001F3259), UINT32_C(0x0050988B), UINT32_C(0x005D60E0), UINT32_C(0x002BE896)}}, {{UINT32_C(0x002B631C), UINT32_C(0x00372C82), UINT32_C(0x002A7F2A), UINT32_C(0x00E4A975), UINT32_C(0x006BB6B1), UINT32_C(0x0016BC52), UINT32_C(0x00473CD2), UINT32_C(0x00630310), UINT32_C(0x0016B945), UINT32_C(0x0001291B), UINT32_C(0x0059EF17)}, {UINT32_C(0x00837D4E), UINT32_C(0x003216D3), UINT32_C(0x004E0701), UINT32_C(0x00823A76), UINT32_C(0x00567125), UINT32_C(0x0020E62F), UINT32_C(0x0036F8E4), UINT32_C(0x0091634B), UINT32_C(0x000CE9C9), UINT32_C(0x00712DF3), UINT32_C(0x003270FE)}, {UINT32_C(0x00C8BD36), UINT32_C(0x00312227), UINT32_C(0x005851DE), UINT32_C(0x00989694), UINT32_C(0x003811BA), UINT32_C(0x0049DDC1), UINT32_C(0x0079916E), UINT32_C(0x00905B34), UINT32_C(0x00216CD3), UINT32_C(0x006E95D0), UINT32_C(0x0075102E)}}, {{UINT32_C(0x000FE15B), UINT32_C(0x002132F9), UINT32_C(0x007302D9), UINT32_C(0x0074464C), UINT32_C(0x006545FE), UINT32_C(0x0025178A), UINT32_C(0x0037772B), UINT32_C(0x00F33555), UINT32_C(0x006628A7), UINT32_C(0x00639C7D), UINT32_C(0x0017AF1B)}, {UINT32_C(0x0016001E), UINT32_C(0x00346FAA), UINT32_C(0x0055CC08), UINT32_C(0x006A26EC), UINT32_C(0x00272A70), UINT32_C(0x0073B255), UINT32_C(0x0066C9CC), UINT32_C(0x00E05374), UINT32_C(0x0031E05D), UINT32_C(0x007241E6), UINT32_C(0x0064D29A)}, {UINT32_C(0x000904B8), UINT32_C(0x000ACC3E), UINT32_C(0x005C0BC8), UINT32_C(0x00708FA3), UINT32_C(0x006420DB), UINT32_C(0x0009EB68), UINT32_C(0x007DF36A), UINT32_C(0x0004C79A), UINT32_C(0x00688FB7), UINT32_C(0x001853DD), UINT32_C(0x00391517)}}, {{UINT32_C(0x0045C93C), UINT32_C(0x001ADA91), UINT32_C(0x005BEF12), UINT32_C(0x00652E9C), UINT32_C(0x00109290), UINT32_C(0x00351B47), UINT32_C(0x00649B3C), UINT32_C(0x0093B9EA), UINT32_C(0x0031C49B), UINT32_C(0x006129D9), UINT32_C(0x0018C36F)}, {UINT32_C(0x0039F849), UINT32_C(0x0076DDFD), UINT32_C(0x004D8E8B), UINT32_C(0x00CC9068), UINT32_C(0x00257C98), UINT32_C(0x0022E647), UINT32_C(0x0010E3A5), UINT32_C(0x0071627F), UINT32_C(0x004D6728), UINT32_C(0x001036C0), UINT32_C(0x00293E1C)}, {UINT32_C(0x00A0883B), UINT32_C(0x0047D948), UINT32_C(0x0029727E), UINT32_C(0x007C052C), UINT32_C(0x0064B122), UINT32_C(0x003228B8), UINT32_C(0x0004B695), UINT32_C(0x00850591), UINT32_C(0x00086718), UINT32_C(0x0035AE85), UINT32_C(0x001253D1)}}, }, { {{UINT32_C(0x00B27045), UINT32_C(0x007C6BA4), UINT32_C(0x000BBA03), UINT32_C(0x00D9B116), UINT32_C(0x007774E3), UINT32_C(0x0042950E), UINT32_C(0x0017A228), UINT32_C(0x002DD987), UINT32_C(0x0078FFD1), UINT32_C(0x006CC9E6), UINT32_C(0x002D3C1B)}, {UINT32_C(0x00A56D1F), UINT32_C(0x002BB5F0), UINT32_C(0x005FB594), UINT32_C(0x0009E3C8), UINT32_C(0x0040549B), UINT32_C(0x0008E785), UINT32_C(0x005E84B9), UINT32_C(0x0003AE65), UINT32_C(0x00476B1B), UINT32_C(0x004B6DB7), UINT32_C(0x00255FEE)}, {UINT32_C(0x001D2AC3), UINT32_C(0x0053D8C2), UINT32_C(0x0053ABBA), UINT32_C(0x0062F195), UINT32_C(0x00583DCF), UINT32_C(0x005C7CC7), UINT32_C(0x0016B088), UINT32_C(0x00E1FD84), UINT32_C(0x003BDF9C), UINT32_C(0x004B6242), UINT32_C(0x0078CDD1)}}, {{UINT32_C(0x0072E704), UINT32_C(0x002A3E71), UINT32_C(0x0016610F), UINT32_C(0x009B3715), UINT32_C(0x005FCB07), UINT32_C(0x005D8BCF), UINT32_C(0x00320582), UINT32_C(0x00A47F78), UINT32_C(0x005E225E), UINT32_C(0x00168430), UINT32_C(0x004428AB)}, {UINT32_C(0x004370E5), UINT32_C(0x005D2F9B), UINT32_C(0x00189EF7), UINT32_C(0x0099C20D), UINT32_C(0x0054ECBC), UINT32_C(0x00656294), UINT32_C(0x00121DD8), UINT32_C(0x009B9829), UINT32_C(0x007E3E6A), UINT32_C(0x003A665F), UINT32_C(0x001EFD05)}, {UINT32_C(0x008DCA62), UINT32_C(0x006B5EF8), UINT32_C(0x00434D75), UINT32_C(0x00FAA8B9), UINT32_C(0x0011A045), UINT32_C(0x006E5D43), UINT32_C(0x004E67E5), UINT32_C(0x00966939), UINT32_C(0x005A4ABC), UINT32_C(0x002BC8B7), UINT32_C(0x001B23C1)}}, {{UINT32_C(0x004E71F0), UINT32_C(0x00091B67), UINT32_C(0x00288D0F), UINT32_C(0x003DBF2B), UINT32_C(0x0034CDF1), UINT32_C(0x005B1542), UINT32_C(0x007363B6), UINT32_C(0x005CE63B), UINT32_C(0x0002FAD4), UINT32_C(0x001E8FE4), UINT32_C(0x00419934)}, {UINT32_C(0x008F0055), UINT32_C(0x00718F3D), UINT32_C(0x00464487), UINT32_C(0x00B1F62E), UINT32_C(0x001D1DD4), UINT32_C(0x005C579E), UINT32_C(0x000761B7), UINT32_C(0x00CADFA8), UINT32_C(0x005881B3), UINT32_C(0x000CF2A5), UINT32_C(0x00236B83)}, {UINT32_C(0x000EDD83), UINT32_C(0x00641C10), UINT32_C(0x0077B165), UINT32_C(0x005DFADE), UINT32_C(0x0002C161), UINT32_C(0x004C0EAB), UINT32_C(0x004F8FA8), UINT32_C(0x005182C2), UINT32_C(0x0022EE1E), UINT32_C(0x002FC0D1), UINT32_C(0x0072B941)}}, {{UINT32_C(0x00BE3284), UINT32_C(0x00265E75), UINT32_C(0x0054BBEA), UINT32_C(0x009FEA89), UINT32_C(0x006A5BC5), UINT32_C(0x00468BF6), UINT32_C(0x0061091E), UINT32_C(0x0021D236), UINT32_C(0x00770DDF), UINT32_C(0x0044380D), UINT32_C(0x00261B8D)}, {UINT32_C(0x0048B464), UINT32_C(0x0007F870), UINT32_C(0x00664579), UINT32_C(0x00EBB0D3), UINT32_C(0x0034FB4E), UINT32_C(0x0062BF86), UINT32_C(0x0030A6E2), UINT32_C(0x00141079), UINT32_C(0x004C4867), UINT32_C(0x0021F669), UINT32_C(0x006C48AC)}, {UINT32_C(0x001F1A30), UINT32_C(0x00402CCF), UINT32_C(0x002EC836), UINT32_C(0x0076E3D0), UINT32_C(0x0045490A), UINT32_C(0x0074B706), UINT32_C(0x005C524F), UINT32_C(0x00A8A8B0), UINT32_C(0x001A4F8F), UINT32_C(0x00192D28), UINT32_C(0x0065C94E)}}, {{UINT32_C(0x00053602), UINT32_C(0x0050EAFD), UINT32_C(0x003DFE2B), UINT32_C(0x00BAD911), UINT32_C(0x000BAA2C), UINT32_C(0x0067D960), UINT32_C(0x000D9F5E), UINT32_C(0x00C75FB5), UINT32_C(0x0061E525), UINT32_C(0x0042DF4C), UINT32_C(0x0078BFD6)}, {UINT32_C(0x00DDF860), UINT32_C(0x0064B891), UINT32_C(0x000AAD9E), UINT32_C(0x0055DAD8), UINT32_C(0x000CD34A), UINT32_C(0x007F4F89), UINT32_C(0x00720D9B), UINT32_C(0x000C777A), UINT32_C(0x005C019C), UINT32_C(0x007BF2C9), UINT32_C(0x002B11EB)}, {UINT32_C(0x002C702B), UINT32_C(0x00152B74), UINT32_C(0x002C06C6), UINT32_C(0x00CAC7B3), UINT32_C(0x00651F98), UINT32_C(0x006BEE21), UINT32_C(0x0022FC91), UINT32_C(0x00D0E1A2), UINT32_C(0x000F1226), UINT32_C(0x0000CB76), UINT32_C(0x000AD2FB)}}, {{UINT32_C(0x003B07A3), UINT32_C(0x005563EB), UINT32_C(0x000F5875), UINT32_C(0x004E85ED), UINT32_C(0x004DF848), UINT32_C(0x00086603), UINT32_C(0x001FE9F6), UINT32_C(0x0060B2A8), UINT32_C(0x00796256), UINT32_C(0x00146D3D), UINT32_C(0x007A622F)}, {UINT32_C(0x00659E8D), UINT32_C(0x000F45E5), UINT32_C(0x0079D2B9), UINT32_C(0x00E3F2C8), UINT32_C(0x002FA0A9), UINT32_C(0x0043F516), UINT32_C(0x0064D221), UINT32_C(0x0007AF6F), UINT32_C(0x005DA3B1), UINT32_C(0x00750DD3), UINT32_C(0x003DC647)}, {UINT32_C(0x003A7DCA), UINT32_C(0x0078F870), UINT32_C(0x0059ECCF), UINT32_C(0x00721F6A), UINT32_C(0x0073DDE5), UINT32_C(0x0052F61E), UINT32_C(0x005E03A9), UINT32_C(0x0096290F), UINT32_C(0x007684CD), UINT32_C(0x0063A740), UINT32_C(0x00273750)}}, {{UINT32_C(0x008ABF8E), UINT32_C(0x004EDC3D), UINT32_C(0x007BBD24), UINT32_C(0x0037EA5E), UINT32_C(0x0028D8C0), UINT32_C(0x001BE0C2), UINT32_C(0x00582236), UINT32_C(0x007A566E), UINT32_C(0x001F4783), UINT32_C(0x005F6DB4), UINT32_C(0x0018F286)}, {UINT32_C(0x0040CAF8), UINT32_C(0x00287C70), UINT32_C(0x002C9166), UINT32_C(0x00C254F6), UINT32_C(0x005E2D68), UINT32_C(0x003B46FC), UINT32_C(0x004EA606), UINT32_C(0x00D0B9C1), UINT32_C(0x00228115), UINT32_C(0x0072EEA6), UINT32_C(0x00471670)}, {UINT32_C(0x0020A1FA), UINT32_C(0x0075C7D9), UINT32_C(0x005426EA), UINT32_C(0x000046B2), UINT32_C(0x0076BA0A), UINT32_C(0x0050CEA6), UINT32_C(0x002D133F), UINT32_C(0x005C8821), UINT32_C(0x00406072), UINT32_C(0x000A7F19), UINT32_C(0x001740F3)}}, {{UINT32_C(0x0090884A), UINT32_C(0x00146BFD), UINT32_C(0x00625FB2), UINT32_C(0x00C92B84), UINT32_C(0x00097A91), UINT32_C(0x005EACD5), UINT32_C(0x005F0661), UINT32_C(0x00870EC3), UINT32_C(0x006D7279), UINT32_C(0x002CE3E6), UINT32_C(0x0078F980)}, {UINT32_C(0x00A2B367), UINT32_C(0x000EF557), UINT32_C(0x004EBC90), UINT32_C(0x0065B548), UINT32_C(0x004E46D1), UINT32_C(0x006D0EF0), UINT32_C(0x00299E83), UINT32_C(0x0016D017), UINT32_C(0x004A428A), UINT32_C(0x00034582), UINT32_C(0x0052ED77)}, {UINT32_C(0x004E0B1E), UINT32_C(0x000C37F8), UINT32_C(0x006C666A), UINT32_C(0x00436BD9), UINT32_C(0x001FC7FE), UINT32_C(0x0000D390), UINT32_C(0x006900A5), UINT32_C(0x0062D837), UINT32_C(0x006CD0E6), UINT32_C(0x00557AD7), UINT32_C(0x002B57B6)}}, {{UINT32_C(0x005F93D9), UINT32_C(0x0021EC83), UINT32_C(0x0057A32B), UINT32_C(0x001CD982), UINT32_C(0x0008309F), UINT32_C(0x0052B2E6), UINT32_C(0x002068F6), UINT32_C(0x00CD4622), UINT32_C(0x005EC9A6), UINT32_C(0x002F2CCD), UINT32_C(0x00056DCE)}, {UINT32_C(0x003E91E9), UINT32_C(0x0002F289), UINT32_C(0x006BF91B), UINT32_C(0x006CBB4B), UINT32_C(0x00145A1F), UINT32_C(0x007ECA85), UINT32_C(0x004AE385), UINT32_C(0x00BC0058), UINT32_C(0x007D219A), UINT32_C(0x00406CB9), UINT32_C(0x001586B8)}, {UINT32_C(0x00EE30F0), UINT32_C(0x00094A1A), UINT32_C(0x0006C4A5), UINT32_C(0x0095BBBF), UINT32_C(0x0033B602), UINT32_C(0x005C234E), UINT32_C(0x00405945), UINT32_C(0x002F42B7), UINT32_C(0x0060F012), UINT32_C(0x000547D1), UINT32_C(0x00331A12)}}, {{UINT32_C(0x00AE8C48), UINT32_C(0x00301B89), UINT32_C(0x0030B3A1), UINT32_C(0x0030AF95), UINT32_C(0x00455E58), UINT32_C(0x005D22F1), UINT32_C(0x0072D976), UINT32_C(0x007AD824), UINT32_C(0x0005D4B7), UINT32_C(0x003E29C4), UINT32_C(0x007D5C6C)}, {UINT32_C(0x00610488), UINT32_C(0x00575F2E), UINT32_C(0x005AC7FE), UINT32_C(0x0074B494), UINT32_C(0x006F1543), UINT32_C(0x00029B2A), UINT32_C(0x002B9948), UINT32_C(0x0057D800), UINT32_C(0x0052921B), UINT32_C(0x00117385), UINT32_C(0x001058C5)}, {UINT32_C(0x00EA545B), UINT32_C(0x0032E693), UINT32_C(0x004AF898), UINT32_C(0x00FFE54C), UINT32_C(0x0039ECD8), UINT32_C(0x00093986), UINT32_C(0x004575D9), UINT32_C(0x00CDB661), UINT32_C(0x007A392E), UINT32_C(0x0001939C), UINT32_C(0x0028D022)}}, {{UINT32_C(0x00DA7B5B), UINT32_C(0x0030FFBD), UINT32_C(0x00548E82), UINT32_C(0x00DD7D1E), UINT32_C(0x00373E22), UINT32_C(0x0060EA9C), UINT32_C(0x00463822), UINT32_C(0x0091DF8B), UINT32_C(0x001801F8), UINT32_C(0x0046D441), UINT32_C(0x000C8688)}, {UINT32_C(0x00EE0CC8), UINT32_C(0x00699131), UINT32_C(0x000427E3), UINT32_C(0x00F43A07), UINT32_C(0x00318E56), UINT32_C(0x00415F0B), UINT32_C(0x0065B06D), UINT32_C(0x00C66DEB), UINT32_C(0x0069C98F), UINT32_C(0x000B21D5), UINT32_C(0x000B711D)}, {UINT32_C(0x00D0339C), UINT32_C(0x002E2E3B), UINT32_C(0x00573739), UINT32_C(0x007F843C), UINT32_C(0x0012F74D), UINT32_C(0x001934CA), UINT32_C(0x0011DDD6), UINT32_C(0x00DF048B), UINT32_C(0x004D7027), UINT32_C(0x005B0107), UINT32_C(0x0069D6BF)}}, {{UINT32_C(0x00F44C75), UINT32_C(0x003F20FB), UINT32_C(0x0011CE27), UINT32_C(0x00F7E2A9), UINT32_C(0x006914F7), UINT32_C(0x0020C3E4), UINT32_C(0x00683AAF), UINT32_C(0x007DE3A9), UINT32_C(0x001E6E79), UINT32_C(0x0006F6AF), UINT32_C(0x00563C95)}, {UINT32_C(0x004904B2), UINT32_C(0x00517306), UINT32_C(0x0049E4D2), UINT32_C(0x00459886), UINT32_C(0x001E326B), UINT32_C(0x003AF2A6), UINT32_C(0x004F40C8), UINT32_C(0x0072BF1A), UINT32_C(0x00692E44), UINT32_C(0x0046EF04), UINT32_C(0x007235C7)}, {UINT32_C(0x0099C193), UINT32_C(0x0032477B), UINT32_C(0x0064C855), UINT32_C(0x00F64B95), UINT32_C(0x006D6DE1), UINT32_C(0x0038972C), UINT32_C(0x002E92A5), UINT32_C(0x00FB0D34), UINT32_C(0x0000A7FB), UINT32_C(0x00436D2A), UINT32_C(0x002AE23C)}}, {{UINT32_C(0x005B55EE), UINT32_C(0x00269FC6), UINT32_C(0x0031ABD5), UINT32_C(0x00AFFAE5), UINT32_C(0x0007CF80), UINT32_C(0x003582AB), UINT32_C(0x004AA0DA), UINT32_C(0x003B2950), UINT32_C(0x0027722C), UINT32_C(0x006DA175), UINT32_C(0x00538D39)}, {UINT32_C(0x00E803AA), UINT32_C(0x0078E9FA), UINT32_C(0x000599F4), UINT32_C(0x00C7D432), UINT32_C(0x00482F43), UINT32_C(0x0031EDC5), UINT32_C(0x007E0348), UINT32_C(0x0099EAD8), UINT32_C(0x00384F4D), UINT32_C(0x004DACD4), UINT32_C(0x0046AD0D)}, {UINT32_C(0x00A97546), UINT32_C(0x000FB21C), UINT32_C(0x0015497C), UINT32_C(0x008E62D2), UINT32_C(0x00505DE5), UINT32_C(0x000B95C5), UINT32_C(0x0023EDFF), UINT32_C(0x00264B13), UINT32_C(0x002BCD90), UINT32_C(0x00627803), UINT32_C(0x0036514F)}}, {{UINT32_C(0x0089E077), UINT32_C(0x0036ADDA), UINT32_C(0x001647F5), UINT32_C(0x0088678C), UINT32_C(0x002D4F15), UINT32_C(0x004AD6CA), UINT32_C(0x000239EF), UINT32_C(0x00784B5B), UINT32_C(0x003FA0B6), UINT32_C(0x001178A4), UINT32_C(0x00506FAF)}, {UINT32_C(0x00B41F08), UINT32_C(0x00501231), UINT32_C(0x00193B29), UINT32_C(0x00837915), UINT32_C(0x0052BE13), UINT32_C(0x0067A94C), UINT32_C(0x00080E1A), UINT32_C(0x00FF39EB), UINT32_C(0x0012E0B7), UINT32_C(0x0004446B), UINT32_C(0x001FD9A4)}, {UINT32_C(0x00EAA0DA), UINT32_C(0x002DD110), UINT32_C(0x00768BF0), UINT32_C(0x00174EE3), UINT32_C(0x006B40A2), UINT32_C(0x004308C1), UINT32_C(0x006A7D56), UINT32_C(0x0080EF9C), UINT32_C(0x006C09DF), UINT32_C(0x00024E1D), UINT32_C(0x00025FFC)}}, {{UINT32_C(0x007CFBB3), UINT32_C(0x0008B1DC), UINT32_C(0x00221743), UINT32_C(0x00E6686B), UINT32_C(0x00152BCE), UINT32_C(0x001317D6), UINT32_C(0x00437CCD), UINT32_C(0x002FC802), UINT32_C(0x006681B5), UINT32_C(0x00462383), UINT32_C(0x007A6155)}, {UINT32_C(0x00C0616E), UINT32_C(0x0065B50F), UINT32_C(0x00575631), UINT32_C(0x008AE62D), UINT32_C(0x001A3DAF), UINT32_C(0x001CB629), UINT32_C(0x000690A5), UINT32_C(0x000E40AF), UINT32_C(0x0027B0F1), UINT32_C(0x0030A43B), UINT32_C(0x003D750B)}, {UINT32_C(0x0006E7C1), UINT32_C(0x001F7E8D), UINT32_C(0x007DDEB5), UINT32_C(0x003E61D8), UINT32_C(0x0052F00A), UINT32_C(0x0007F477), UINT32_C(0x0002FCF5), UINT32_C(0x00E51DDA), UINT32_C(0x00710B09), UINT32_C(0x00162A00), UINT32_C(0x0070E436)}}, {{UINT32_C(0x0089B486), UINT32_C(0x00508B10), UINT32_C(0x00504CD3), UINT32_C(0x007CBEF5), UINT32_C(0x00401259), UINT32_C(0x0016A84C), UINT32_C(0x005DDAF1), UINT32_C(0x00CA278E), UINT32_C(0x005227AF), UINT32_C(0x000A6D32), UINT32_C(0x0025F71B)}, {UINT32_C(0x009CE1F9), UINT32_C(0x00535376), UINT32_C(0x0038A997), UINT32_C(0x008FCF77), UINT32_C(0x001681BE), UINT32_C(0x0030BB0D), UINT32_C(0x0079D5C2), UINT32_C(0x00CCB407), UINT32_C(0x00115E29), UINT32_C(0x006BEA8D), UINT32_C(0x0077DF80)}, {UINT32_C(0x000328F3), UINT32_C(0x0062691B), UINT32_C(0x00429269), UINT32_C(0x00D14DE5), UINT32_C(0x001B9543), UINT32_C(0x00310721), UINT32_C(0x005A6271), UINT32_C(0x00077EE6), UINT32_C(0x006695BC), UINT32_C(0x00502870), UINT32_C(0x005376F2)}}, }, { {{UINT32_C(0x00F38262), UINT32_C(0x00203985), UINT32_C(0x0029479B), UINT32_C(0x0057D8A4), UINT32_C(0x002352DF), UINT32_C(0x005A3DE0), UINT32_C(0x0038FC9D), UINT32_C(0x005E69CE), UINT32_C(0x007195C8), UINT32_C(0x007F3F0C), UINT32_C(0x0075AA44)}, {UINT32_C(0x00A2B12A), UINT32_C(0x0005AB91), UINT32_C(0x0005801E), UINT32_C(0x00BD3E26), UINT32_C(0x004A3566), UINT32_C(0x0039622B), UINT32_C(0x00196466), UINT32_C(0x003385DF), UINT32_C(0x00464F26), UINT32_C(0x00348D32), UINT32_C(0x006B3D82)}, {UINT32_C(0x0065745B), UINT32_C(0x00756984), UINT32_C(0x000663B1), UINT32_C(0x00F8FADD), UINT32_C(0x005D0DD6), UINT32_C(0x005A5E23), UINT32_C(0x0021B9BE), UINT32_C(0x009BBEE7), UINT32_C(0x003310A0), UINT32_C(0x0008941E), UINT32_C(0x006EFBEF)}}, {{UINT32_C(0x008285AF), UINT32_C(0x0032D42C), UINT32_C(0x004A921F), UINT32_C(0x00501992), UINT32_C(0x00684DBF), UINT32_C(0x001A5365), UINT32_C(0x0036ABF8), UINT32_C(0x004599AB), UINT32_C(0x003153D1), UINT32_C(0x004357B7), UINT32_C(0x00289208)}, {UINT32_C(0x00BF2760), UINT32_C(0x000C24C0), UINT32_C(0x0057E755), UINT32_C(0x000FB090), UINT32_C(0x007F2FA3), UINT32_C(0x0034386D), UINT32_C(0x004D0670), UINT32_C(0x007D5F67), UINT32_C(0x00770E2C), UINT32_C(0x004F400F), UINT32_C(0x0004CA31)}, {UINT32_C(0x00C5736B), UINT32_C(0x0025DE46), UINT32_C(0x00184C66), UINT32_C(0x002454E1), UINT32_C(0x006C791A), UINT32_C(0x00695E64), UINT32_C(0x0005F1A3), UINT32_C(0x00D89A22), UINT32_C(0x00339085), UINT32_C(0x00612026), UINT32_C(0x0011E398)}}, {{UINT32_C(0x00580ED8), UINT32_C(0x00351562), UINT32_C(0x003AC56C), UINT32_C(0x0082A872), UINT32_C(0x00009388), UINT32_C(0x0059018D), UINT32_C(0x00428E6F), UINT32_C(0x0044580D), UINT32_C(0x00397D38), UINT32_C(0x001413BF), UINT32_C(0x0019ACCA)}, {UINT32_C(0x00EBF493), UINT32_C(0x0065B688), UINT32_C(0x00475CB8), UINT32_C(0x000C5271), UINT32_C(0x001FA36C), UINT32_C(0x002065F1), UINT32_C(0x001E357D), UINT32_C(0x002E3A47), UINT32_C(0x007D686D), UINT32_C(0x0016A68A), UINT32_C(0x00662C00)}, {UINT32_C(0x00BBB7E7), UINT32_C(0x00118B8C), UINT32_C(0x00257EA2), UINT32_C(0x00EAE0BF), UINT32_C(0x00534B32), UINT32_C(0x002C3391), UINT32_C(0x005F91A4), UINT32_C(0x009CC53C), UINT32_C(0x000D1F59), UINT32_C(0x0044B89F), UINT32_C(0x004E2285)}}, {{UINT32_C(0x0027C85C), UINT32_C(0x0034E4D0), UINT32_C(0x0034EE41), UINT32_C(0x0000C14F), UINT32_C(0x00466E36), UINT32_C(0x0012ED82), UINT32_C(0x004AB2CC), UINT32_C(0x00BB7B93), UINT32_C(0x0013EE11), UINT32_C(0x0071AADD), UINT32_C(0x000E9430)}, {UINT32_C(0x0048606F), UINT32_C(0x000E389D), UINT32_C(0x005B7915), UINT32_C(0x00DA42A8), UINT32_C(0x003E8287), UINT32_C(0x001D2AF2), UINT32_C(0x0044CA11), UINT32_C(0x00C9B883), UINT32_C(0x000B95FA), UINT32_C(0x00571771), UINT32_C(0x002FD7F4)}, {UINT32_C(0x00DD2691), UINT32_C(0x0071C20D), UINT32_C(0x00544E37), UINT32_C(0x00458C30), UINT32_C(0x005ED950), UINT32_C(0x000A642E), UINT32_C(0x000316B6), UINT32_C(0x00F34871), UINT32_C(0x0030B700), UINT32_C(0x007D4AA7), UINT32_C(0x000E8F8F)}}, {{UINT32_C(0x00AFDFD3), UINT32_C(0x0023AB6D), UINT32_C(0x003A134B), UINT32_C(0x007521AF), UINT32_C(0x002E2236), UINT32_C(0x00146DF2), UINT32_C(0x00201697), UINT32_C(0x000389A1), UINT32_C(0x0048BE72), UINT32_C(0x003FD0B3), UINT32_C(0x003AD399)}, {UINT32_C(0x00453802), UINT32_C(0x0058F172), UINT32_C(0x000BD847), UINT32_C(0x005FE8C6), UINT32_C(0x0040628C), UINT32_C(0x004614B8), UINT32_C(0x004205D4), UINT32_C(0x00259F68), UINT32_C(0x0076F623), UINT32_C(0x00678707), UINT32_C(0x0057C6D8)}, {UINT32_C(0x00DB4A5B), UINT32_C(0x004A2766), UINT32_C(0x00614411), UINT32_C(0x00510EC4), UINT32_C(0x007473CF), UINT32_C(0x0051CB0E), UINT32_C(0x0014EC5F), UINT32_C(0x000483E0), UINT32_C(0x001F7AE6), UINT32_C(0x0078A5EC), UINT32_C(0x003FC5C6)}}, {{UINT32_C(0x00E73CF6), UINT32_C(0x00365645), UINT32_C(0x0026EE89), UINT32_C(0x006AC701), UINT32_C(0x007831F1), UINT32_C(0x00393FC7), UINT32_C(0x0003E80C), UINT32_C(0x008ECBE8), UINT32_C(0x0027B4A8), UINT32_C(0x0037554F), UINT32_C(0x006AD6BD)}, {UINT32_C(0x001857E4), UINT32_C(0x00657687), UINT32_C(0x0036B228), UINT32_C(0x006A820E), UINT32_C(0x00459485), UINT32_C(0x002AA7DA), UINT32_C(0x0031670E), UINT32_C(0x0099F393), UINT32_C(0x0023D587), UINT32_C(0x000B8D51), UINT32_C(0x0067F4BE)}, {UINT32_C(0x00604B7F), UINT32_C(0x00531996), UINT32_C(0x000F3A4C), UINT32_C(0x00EFD0BB), UINT32_C(0x001D4914), UINT32_C(0x004C04B3), UINT32_C(0x0003D908), UINT32_C(0x00AA3218), UINT32_C(0x00403685), UINT32_C(0x0072EB6A), UINT32_C(0x002176B1)}}, {{UINT32_C(0x00DC72D5), UINT32_C(0x0053C100), UINT32_C(0x006992E3), UINT32_C(0x00532CA0), UINT32_C(0x004D3AD9), UINT32_C(0x0016B1F6), UINT32_C(0x00776F4B), UINT32_C(0x006ECD70), UINT32_C(0x004FC6E0), UINT32_C(0x00766557), UINT32_C(0x0019E21F)}, {UINT32_C(0x002B1672), UINT32_C(0x003C3FDF), UINT32_C(0x00324542), UINT32_C(0x007B582B), UINT32_C(0x0002AD86), UINT32_C(0x00528C4E), UINT32_C(0x003D3509), UINT32_C(0x00D075CA), UINT32_C(0x00783A6B), UINT32_C(0x0032D6B0), UINT32_C(0x00655B92)}, {UINT32_C(0x0067E0B1), UINT32_C(0x001D8E27), UINT32_C(0x002F0272), UINT32_C(0x00BBEB09), UINT32_C(0x0017C396), UINT32_C(0x005B451C), UINT32_C(0x000ADC03), UINT32_C(0x00F50759), UINT32_C(0x000DE4C0), UINT32_C(0x006BAD90), UINT32_C(0x0015A7A2)}}, {{UINT32_C(0x009DA550), UINT32_C(0x004309EA), UINT32_C(0x006FDD59), UINT32_C(0x00C427DA), UINT32_C(0x00454A59), UINT32_C(0x005B8E71), UINT32_C(0x00341B12), UINT32_C(0x00252CD4), UINT32_C(0x00111FF0), UINT32_C(0x007E3827), UINT32_C(0x0048F3DC)}, {UINT32_C(0x00BC3FD8), UINT32_C(0x00513D87), UINT32_C(0x0004F4BB), UINT32_C(0x0040E743), UINT32_C(0x007CD878), UINT32_C(0x0010C877), UINT32_C(0x005F89C4), UINT32_C(0x00F5CB3E), UINT32_C(0x0074C6FA), UINT32_C(0x006D3B3F), UINT32_C(0x0027626C)}, {UINT32_C(0x004FE9AA), UINT32_C(0x001A4C25), UINT32_C(0x005FC4B0), UINT32_C(0x00C432AF), UINT32_C(0x005E26E5), UINT32_C(0x003B434E), UINT32_C(0x0027CFF2), UINT32_C(0x0043D716), UINT32_C(0x0059B5A6), UINT32_C(0x00333789), UINT32_C(0x0011248B)}}, {{UINT32_C(0x00CA0B46), UINT32_C(0x00797C4C), UINT32_C(0x0025673C), UINT32_C(0x004C5796), UINT32_C(0x000F4352), UINT32_C(0x00477E09), UINT32_C(0x007CE235), UINT32_C(0x00B62DDB), UINT32_C(0x00398769), UINT32_C(0x00598708), UINT32_C(0x002AA80B)}, {UINT32_C(0x006334CD), UINT32_C(0x0007E78A), UINT32_C(0x000B78B3), UINT32_C(0x00945807), UINT32_C(0x005E6E86), UINT32_C(0x005554D4), UINT32_C(0x000A6B65), UINT32_C(0x00306D92), UINT32_C(0x005D12E8), UINT32_C(0x003DEB11), UINT32_C(0x00385DB1)}, {UINT32_C(0x000A5E84), UINT32_C(0x006D3E68), UINT32_C(0x00756665), UINT32_C(0x004A1477), UINT32_C(0x00348B5C), UINT32_C(0x0048952E), UINT32_C(0x002EDCD0), UINT32_C(0x0017A1F7), UINT32_C(0x000D0B6A), UINT32_C(0x002CC6D4), UINT32_C(0x00357331)}}, {{UINT32_C(0x0079D8A5), UINT32_C(0x007C1D32), UINT32_C(0x0026F73E), UINT32_C(0x00DC858C), UINT32_C(0x002CFF0F), UINT32_C(0x007FA1D8), UINT32_C(0x000AA161), UINT32_C(0x009E41A9), UINT32_C(0x0009D873), UINT32_C(0x004C0E2C), UINT32_C(0x001DB409)}, {UINT32_C(0x0018D65B), UINT32_C(0x0022CD31), UINT32_C(0x00390F42), UINT32_C(0x00D8FCA4), UINT32_C(0x006663C5), UINT32_C(0x0019722C), UINT32_C(0x007F6B0A), UINT32_C(0x00A630E3), UINT32_C(0x006E4A27), UINT32_C(0x0021D1B6), UINT32_C(0x002AAC94)}, {UINT32_C(0x0018C372), UINT32_C(0x0054FA42), UINT32_C(0x000EFD69), UINT32_C(0x0011780F), UINT32_C(0x001A67DB), UINT32_C(0x006E5FA4), UINT32_C(0x00414397), UINT32_C(0x007903CC), UINT32_C(0x006A8416), UINT32_C(0x007EAA7F), UINT32_C(0x002FE26B)}}, {{UINT32_C(0x00E4631A), UINT32_C(0x00519A42), UINT32_C(0x004D5D8F), UINT32_C(0x00C6E606), UINT32_C(0x00053595), UINT32_C(0x004EB9D1), UINT32_C(0x005A269C), UINT32_C(0x003E8B00), UINT32_C(0x00162354), UINT32_C(0x007E07B4), UINT32_C(0x003AF53B)}, {UINT32_C(0x00B6EB19), UINT32_C(0x00555D97), UINT32_C(0x00633E65), UINT32_C(0x0099187D), UINT32_C(0x00227AE7), UINT32_C(0x001674B2), UINT32_C(0x005E8C81), UINT32_C(0x005B7DF9), UINT32_C(0x0055E4BB), UINT32_C(0x0056A5E1), UINT32_C(0x0019F876)}, {UINT32_C(0x00B4688B), UINT32_C(0x005F4304), UINT32_C(0x000B39BD), UINT32_C(0x004E7F2B), UINT32_C(0x00313A32), UINT32_C(0x007002F9), UINT32_C(0x0031EB5F), UINT32_C(0x00C85095), UINT32_C(0x00425A62), UINT32_C(0x00328356), UINT32_C(0x007EF956)}}, {{UINT32_C(0x00E0C2E0), UINT32_C(0x00585FE0), UINT32_C(0x0075AB74), UINT32_C(0x0041E028), UINT32_C(0x006CAE63), UINT32_C(0x003C54C9), UINT32_C(0x001036EA), UINT32_C(0x002B7F12), UINT32_C(0x00144D5C), UINT32_C(0x007374DB), UINT32_C(0x00750F36)}, {UINT32_C(0x0061BB41), UINT32_C(0x0036024E), UINT32_C(0x00655A71), UINT32_C(0x004FC91A), UINT32_C(0x0014B38E), UINT32_C(0x003D62DB), UINT32_C(0x0072A235), UINT32_C(0x003B2C40), UINT32_C(0x002C0290), UINT32_C(0x005FEB15), UINT32_C(0x0061089A)}, {UINT32_C(0x0085ECE4), UINT32_C(0x00332265), UINT32_C(0x0042796C), UINT32_C(0x00FD5F30), UINT32_C(0x004C81DA), UINT32_C(0x00007089), UINT32_C(0x006EA425), UINT32_C(0x00B807C7), UINT32_C(0x00459E0F), UINT32_C(0x00181B93), UINT32_C(0x000B0E1B)}}, {{UINT32_C(0x009EFE70), UINT32_C(0x004E468A), UINT32_C(0x0077E5AA), UINT32_C(0x001467EF), UINT32_C(0x0020C382), UINT32_C(0x0055629A), UINT32_C(0x005CA999), UINT32_C(0x00BEFB9D), UINT32_C(0x005A686B), UINT32_C(0x0010351C), UINT32_C(0x005963DB)}, {UINT32_C(0x001E85F3), UINT32_C(0x0014333A), UINT32_C(0x006927C7), UINT32_C(0x00F08F00), UINT32_C(0x00634AD4), UINT32_C(0x0022A5F2), UINT32_C(0x003B4641), UINT32_C(0x00A28090), UINT32_C(0x003FC621), UINT32_C(0x002B49C0), UINT32_C(0x00555DF3)}, {UINT32_C(0x007C3D87), UINT32_C(0x002EFA77), UINT32_C(0x00567EC8), UINT32_C(0x00D46233), UINT32_C(0x00590994), UINT32_C(0x0045579D), UINT32_C(0x0006388F), UINT32_C(0x004C41FA), UINT32_C(0x004C71DD), UINT32_C(0x007BF667), UINT32_C(0x0057A3C7)}}, {{UINT32_C(0x0093682F), UINT32_C(0x00073EF9), UINT32_C(0x0019C616), UINT32_C(0x00C17E8F), UINT32_C(0x002702CF), UINT32_C(0x005F528E), UINT32_C(0x0019B458), UINT32_C(0x0052A2E0), UINT32_C(0x00425491), UINT32_C(0x0018AED3), UINT32_C(0x006F6DAE)}, {UINT32_C(0x0082401A), UINT32_C(0x004D0E66), UINT32_C(0x003A3362), UINT32_C(0x003D1A93), UINT32_C(0x000E6BF3), UINT32_C(0x0017967B), UINT32_C(0x00117AFB), UINT32_C(0x008CB04A), UINT32_C(0x002CA224), UINT32_C(0x00067DCB), UINT32_C(0x0056DEA4)}, {UINT32_C(0x005F1A62), UINT32_C(0x006AF62D), UINT32_C(0x000D1E62), UINT32_C(0x00CCEE42), UINT32_C(0x00512EC5), UINT32_C(0x002C191C), UINT32_C(0x0065B2C8), UINT32_C(0x00567D2B), UINT32_C(0x006A4BC8), UINT32_C(0x0011359A), UINT32_C(0x003AB09B)}}, {{UINT32_C(0x0072355E), UINT32_C(0x00290653), UINT32_C(0x00453126), UINT32_C(0x00DA22DA), UINT32_C(0x004311EA), UINT32_C(0x000C95C7), UINT32_C(0x005DA2D6), UINT32_C(0x0048EE2E), UINT32_C(0x007AC207), UINT32_C(0x0029BC84), UINT32_C(0x000A0DFC)}, {UINT32_C(0x004EF0CE), UINT32_C(0x00747296), UINT32_C(0x000818AB), UINT32_C(0x00BE8543), UINT32_C(0x0041F6F4), UINT32_C(0x00448449), UINT32_C(0x00153E5F), UINT32_C(0x00AADD33), UINT32_C(0x0035B84C), UINT32_C(0x0069EAE8), UINT32_C(0x00217DBD)}, {UINT32_C(0x002DB2A4), UINT32_C(0x001158C1), UINT32_C(0x002F9514), UINT32_C(0x00428AE0), UINT32_C(0x0071D932), UINT32_C(0x002D6CE8), UINT32_C(0x0002F0FA), UINT32_C(0x001EB77A), UINT32_C(0x0041C021), UINT32_C(0x00779647), UINT32_C(0x0000B4B0)}}, {{UINT32_C(0x002BCA29), UINT32_C(0x000D6E00), UINT32_C(0x002A8D45), UINT32_C(0x00E65F5F), UINT32_C(0x0032B3E8), UINT32_C(0x001DDA5D), UINT32_C(0x0017AEC6), UINT32_C(0x00CCE901), UINT32_C(0x002418B9), UINT32_C(0x003F180D), UINT32_C(0x00754B21)}, {UINT32_C(0x001E8828), UINT32_C(0x004DE168), UINT32_C(0x00365565), UINT32_C(0x003E7F08), UINT32_C(0x00022EE0), UINT32_C(0x0043C370), UINT32_C(0x0066C1D6), UINT32_C(0x0033E762), UINT32_C(0x0021E80E), UINT32_C(0x0022E1CE), UINT32_C(0x0039049C)}, {UINT32_C(0x001AEEAB), UINT32_C(0x004E9952), UINT32_C(0x006CD381), UINT32_C(0x00319F16), UINT32_C(0x004B6EED), UINT32_C(0x000E8C3B), UINT32_C(0x0033C702), UINT32_C(0x0074A7B1), UINT32_C(0x0055F862), UINT32_C(0x00070547), UINT32_C(0x001AB4F3)}}, }, { {{UINT32_C(0x002AB480), UINT32_C(0x00491F21), UINT32_C(0x007D1D9B), UINT32_C(0x0017861D), UINT32_C(0x004E0965), UINT32_C(0x004F9835), UINT32_C(0x002889AB), UINT32_C(0x00254B0E), UINT32_C(0x003F4ECE), UINT32_C(0x00645245), UINT32_C(0x003DE09E)}, {UINT32_C(0x00BFFA33), UINT32_C(0x0001E566), UINT32_C(0x0048223D), UINT32_C(0x0081AC1B), UINT32_C(0x0075FACF), UINT32_C(0x00288CA5), UINT32_C(0x00319699), UINT32_C(0x00E70935), UINT32_C(0x003AFCDF), UINT32_C(0x000D446C), UINT32_C(0x001FF61C)}, {UINT32_C(0x00CFC3EE), UINT32_C(0x0053EC31), UINT32_C(0x00556C71), UINT32_C(0x00B61E4F), UINT32_C(0x0019B811), UINT32_C(0x000E942F), UINT32_C(0x006B460A), UINT32_C(0x0028CECD), UINT32_C(0x0053755C), UINT32_C(0x006A36AD), UINT32_C(0x0074830B)}}, {{UINT32_C(0x0032B148), UINT32_C(0x00574A20), UINT32_C(0x00258660), UINT32_C(0x00A32E9A), UINT32_C(0x00666B0C), UINT32_C(0x0050B448), UINT32_C(0x00375197), UINT32_C(0x007C7568), UINT32_C(0x0054C0EF), UINT32_C(0x003C6296), UINT32_C(0x00451E25)}, {UINT32_C(0x001F0527), UINT32_C(0x0015C673), UINT32_C(0x002F100D), UINT32_C(0x0051AD70), UINT32_C(0x00120973), UINT32_C(0x002A4934), UINT32_C(0x00340AF5), UINT32_C(0x00DB9742), UINT32_C(0x00743FB7), UINT32_C(0x00457EDD), UINT32_C(0x000CEB92)}, {UINT32_C(0x00F5B12C), UINT32_C(0x0053626F), UINT32_C(0x007F2969), UINT32_C(0x00F9A729), UINT32_C(0x0033C947), UINT32_C(0x0000F3BA), UINT32_C(0x00207B91), UINT32_C(0x0063F460), UINT32_C(0x0012F8FD), UINT32_C(0x000B32A2), UINT32_C(0x003E578A)}}, {{UINT32_C(0x00B1FE77), UINT32_C(0x00298801), UINT32_C(0x00011596), UINT32_C(0x001AC338), UINT32_C(0x001D0E96), UINT32_C(0x005E3714), UINT32_C(0x003DE2F3), UINT32_C(0x00AF9E64), UINT32_C(0x00187EE5), UINT32_C(0x004F7E2C), UINT32_C(0x0017C5D3)}, {UINT32_C(0x0071BA87), UINT32_C(0x00241D87), UINT32_C(0x0034F745), UINT32_C(0x0004090C), UINT32_C(0x000A1932), UINT32_C(0x0042ADD3), UINT32_C(0x0053459C), UINT32_C(0x007BE02E), UINT32_C(0x003D62A3), UINT32_C(0x0015988B), UINT32_C(0x006AAD49)}, {UINT32_C(0x00367A73), UINT32_C(0x007F03C1), UINT32_C(0x002CAE51), UINT32_C(0x0029D218), UINT32_C(0x0014E4A9), UINT32_C(0x0054032D), UINT32_C(0x0062F02D), UINT32_C(0x00DCDDAD), UINT32_C(0x007EE1CD), UINT32_C(0x001D0B5C), UINT32_C(0x00569FE0)}}, {{UINT32_C(0x00BCADF6), UINT32_C(0x0075341C), UINT32_C(0x00398E24), UINT32_C(0x003BF613), UINT32_C(0x0001E10C), UINT32_C(0x0065FEAC), UINT32_C(0x0024D15C), UINT32_C(0x00196783), UINT32_C(0x0051862B), UINT32_C(0x006C2018), UINT32_C(0x002A0826)}, {UINT32_C(0x00F6EE57), UINT32_C(0x0011CD5C), UINT32_C(0x001F7638), UINT32_C(0x005F98C2), UINT32_C(0x001F7049), UINT32_C(0x003964A1), UINT32_C(0x005657BE), UINT32_C(0x00DEE9F7), UINT32_C(0x0026BEEC), UINT32_C(0x00319B9B), UINT32_C(0x00345293)}, {UINT32_C(0x006BDDA7), UINT32_C(0x0030B11F), UINT32_C(0x002600EA), UINT32_C(0x00461976), UINT32_C(0x001593E9), UINT32_C(0x006F183C), UINT32_C(0x003ABB5A), UINT32_C(0x0018F1A8), UINT32_C(0x00390978), UINT32_C(0x0005156D), UINT32_C(0x00075AED)}}, {{UINT32_C(0x001BD2D5), UINT32_C(0x00578B39), UINT32_C(0x007FE095), UINT32_C(0x0046AFA9), UINT32_C(0x002148E8), UINT32_C(0x0017C3CD), UINT32_C(0x006AE351), UINT32_C(0x0063F7AB), UINT32_C(0x0050AA1E), UINT32_C(0x004184F5), UINT32_C(0x0069223D)}, {UINT32_C(0x0086A15A), UINT32_C(0x0033AD1F), UINT32_C(0x006A0376), UINT32_C(0x00C44A80), UINT32_C(0x001DE4DA), UINT32_C(0x000819B5), UINT32_C(0x00275A25), UINT32_C(0x005EA5CD), UINT32_C(0x0022AA1B), UINT32_C(0x004A1528), UINT32_C(0x0041A71A)}, {UINT32_C(0x00F443D0), UINT32_C(0x007F9618), UINT32_C(0x005E374D), UINT32_C(0x00C0032C), UINT32_C(0x005BC03C), UINT32_C(0x00225F6A), UINT32_C(0x002F1161), UINT32_C(0x0062CB7E), UINT32_C(0x00527B02), UINT32_C(0x005AAD7F), UINT32_C(0x00585C83)}}, {{UINT32_C(0x00D110A1), UINT32_C(0x004B6AF7), UINT32_C(0x00084690), UINT32_C(0x00F276EF), UINT32_C(0x0000F67B), UINT32_C(0x001870DC), UINT32_C(0x0010FCB3), UINT32_C(0x00392CFE), UINT32_C(0x002086D8), UINT32_C(0x007424AF), UINT32_C(0x00202355)}, {UINT32_C(0x00077C6C), UINT32_C(0x0025E823), UINT32_C(0x006EF81B), UINT32_C(0x00540F85), UINT32_C(0x002C8AF2), UINT32_C(0x0013C77B), UINT32_C(0x001C4D2F), UINT32_C(0x001021D9), UINT32_C(0x00146F24), UINT32_C(0x003599F3), UINT32_C(0x004B4CCC)}, {UINT32_C(0x004CD365), UINT32_C(0x00179717), UINT32_C(0x0039A122), UINT32_C(0x00B62616), UINT32_C(0x007AEE90), UINT32_C(0x0029164E), UINT32_C(0x0039438A), UINT32_C(0x00CBA485), UINT32_C(0x00428DC8), UINT32_C(0x00313356), UINT32_C(0x006E6A72)}}, {{UINT32_C(0x00CF5614), UINT32_C(0x00163606), UINT32_C(0x002CA6AC), UINT32_C(0x006EA0B2), UINT32_C(0x006DA8EE), UINT32_C(0x0019BDF3), UINT32_C(0x006043AF), UINT32_C(0x008AA760), UINT32_C(0x002E08F1), UINT32_C(0x0037973A), UINT32_C(0x0029B40D)}, {UINT32_C(0x00379A65), UINT32_C(0x0052E429), UINT32_C(0x0068686B), UINT32_C(0x00C69C90), UINT32_C(0x004E9422), UINT32_C(0x00366023), UINT32_C(0x002260F4), UINT32_C(0x005BAF5B), UINT32_C(0x000678A6), UINT32_C(0x000460DA), UINT32_C(0x004F4340)}, {UINT32_C(0x00E03B58), UINT32_C(0x007B260B), UINT32_C(0x005BA74C), UINT32_C(0x00BD1A46), UINT32_C(0x0009DC7B), UINT32_C(0x00118343), UINT32_C(0x00021428), UINT32_C(0x000FFED5), UINT32_C(0x0072D7E6), UINT32_C(0x003DCFB6), UINT32_C(0x003AB926)}}, {{UINT32_C(0x0077649D), UINT32_C(0x005389B7), UINT32_C(0x004D6E76), UINT32_C(0x00936F59), UINT32_C(0x00463E7C), UINT32_C(0x006D778A), UINT32_C(0x0009DB6F), UINT32_C(0x00A424F1), UINT32_C(0x0052F5CC), UINT32_C(0x007E60DE), UINT32_C(0x004279FB)}, {UINT32_C(0x00A7028F), UINT32_C(0x007EA950), UINT32_C(0x001EFBD6), UINT32_C(0x00BDA79F), UINT32_C(0x007AF7CC), UINT32_C(0x00279C7C), UINT32_C(0x006C7303), UINT32_C(0x00E939AC), UINT32_C(0x00354019), UINT32_C(0x00187CF7), UINT32_C(0x00183D31)}, {UINT32_C(0x0042F626), UINT32_C(0x0074EA5E), UINT32_C(0x00538C9A), UINT32_C(0x00AF163A), UINT32_C(0x004C692D), UINT32_C(0x0023FAA0), UINT32_C(0x00775E16), UINT32_C(0x0062DAB8), UINT32_C(0x007D6702), UINT32_C(0x001B38C5), UINT32_C(0x001E3974)}}, {{UINT32_C(0x004F9403), UINT32_C(0x00748471), UINT32_C(0x00211B76), UINT32_C(0x001EFC08), UINT32_C(0x005B213F), UINT32_C(0x003E9002), UINT32_C(0x00785B3C), UINT32_C(0x00E45607), UINT32_C(0x003D477B), UINT32_C(0x00282DEF), UINT32_C(0x00504A42)}, {UINT32_C(0x00BF7FBB), UINT32_C(0x000A066A), UINT32_C(0x000679D4), UINT32_C(0x00BB2351), UINT32_C(0x007D83CA), UINT32_C(0x00612D60), UINT32_C(0x00031501), UINT32_C(0x00F4CAB2), UINT32_C(0x002155C8), UINT32_C(0x003A8F2C), UINT32_C(0x00169BC2)}, {UINT32_C(0x000357B5), UINT32_C(0x006B1266), UINT32_C(0x002BCBF3), UINT32_C(0x00A64DFF), UINT32_C(0x0066D9DE), UINT32_C(0x0057385B), UINT32_C(0x005050FF), UINT32_C(0x006FC06F), UINT32_C(0x0028E483), UINT32_C(0x0051EF87), UINT32_C(0x000CC48B)}}, {{UINT32_C(0x00ED9E35), UINT32_C(0x0023A04E), UINT32_C(0x0024255C), UINT32_C(0x0070038E), UINT32_C(0x0046A52B), UINT32_C(0x004E9C3F), UINT32_C(0x006C8BA2), UINT32_C(0x00D8ED9C), UINT32_C(0x006F6A03), UINT32_C(0x003098C4), UINT32_C(0x005D825F)}, {UINT32_C(0x008FA640), UINT32_C(0x000B9382), UINT32_C(0x0011CD48), UINT32_C(0x00034F5D), UINT32_C(0x0059465F), UINT32_C(0x0070DA45), UINT32_C(0x00649F15), UINT32_C(0x0054EE9E), UINT32_C(0x003D37B0), UINT32_C(0x004361C8), UINT32_C(0x002CB478)}, {UINT32_C(0x0012D22E), UINT32_C(0x00674682), UINT32_C(0x0070C891), UINT32_C(0x00FC49FE), UINT32_C(0x003AF178), UINT32_C(0x0077EF15), UINT32_C(0x007CF642), UINT32_C(0x00E36298), UINT32_C(0x002FEFEF), UINT32_C(0x0070ADFB), UINT32_C(0x00674E26)}}, {{UINT32_C(0x00E45F49), UINT32_C(0x0042AB1C), UINT32_C(0x005B58EE), UINT32_C(0x009A5641), UINT32_C(0x004084D4), UINT32_C(0x00776081), UINT32_C(0x004873EC), UINT32_C(0x0091B439), UINT32_C(0x0049547A), UINT32_C(0x0061EF9F), UINT32_C(0x00209C2C)}, {UINT32_C(0x00ACB336), UINT32_C(0x0002E07D), UINT32_C(0x006207CB), UINT32_C(0x0044DAE2), UINT32_C(0x0017A196), UINT32_C(0x006B179D), UINT32_C(0x005CFADF), UINT32_C(0x00081BD0), UINT32_C(0x002587D0), UINT32_C(0x005AA501), UINT32_C(0x0027A6E9)}, {UINT32_C(0x0094228F), UINT32_C(0x000636DC), UINT32_C(0x005A4102), UINT32_C(0x003E66B4), UINT32_C(0x0011F6CD), UINT32_C(0x0038E6FD), UINT32_C(0x000B5086), UINT32_C(0x0050E978), UINT32_C(0x005AE74C), UINT32_C(0x00246161), UINT32_C(0x007E9879)}}, {{UINT32_C(0x0065CC5A), UINT32_C(0x000BD258), UINT32_C(0x00167FAC), UINT32_C(0x00E5D799), UINT32_C(0x002DCFC5), UINT32_C(0x0045B74C), UINT32_C(0x00057C88), UINT32_C(0x0038384F), UINT32_C(0x003413FE), UINT32_C(0x00625CFF), UINT32_C(0x00014CE5)}, {UINT32_C(0x0038E62F), UINT32_C(0x004B5EE4), UINT32_C(0x004ADC3F), UINT32_C(0x0062FF7C), UINT32_C(0x001110E4), UINT32_C(0x007C7151), UINT32_C(0x002F8915), UINT32_C(0x0068F26B), UINT32_C(0x0038A310), UINT32_C(0x002E8D53), UINT32_C(0x0031786B)}, {UINT32_C(0x004DE3F1), UINT32_C(0x00036913), UINT32_C(0x006704FB), UINT32_C(0x003944F4), UINT32_C(0x003E4AD6), UINT32_C(0x001A01BA), UINT32_C(0x002E0D68), UINT32_C(0x004A2407), UINT32_C(0x0047BA89), UINT32_C(0x003808BF), UINT32_C(0x0070E238)}}, {{UINT32_C(0x001B2F70), UINT32_C(0x006F3BCD), UINT32_C(0x0020C220), UINT32_C(0x00971E3D), UINT32_C(0x0067DC3E), UINT32_C(0x00154916), UINT32_C(0x007EE08E), UINT32_C(0x009FB7E0), UINT32_C(0x00164A27), UINT32_C(0x00000D51), UINT32_C(0x00044A8C)}, {UINT32_C(0x00441852), UINT32_C(0x004183C7), UINT32_C(0x000B05DA), UINT32_C(0x00765798), UINT32_C(0x002FE415), UINT32_C(0x0078F9D1), UINT32_C(0x0049FDE6), UINT32_C(0x00D85938), UINT32_C(0x00404646), UINT32_C(0x005B14A2), UINT32_C(0x00151434)}, {UINT32_C(0x001ECEB3), UINT32_C(0x00723B7F), UINT32_C(0x0073FB3C), UINT32_C(0x0055508D), UINT32_C(0x002C2D2B), UINT32_C(0x0040F43E), UINT32_C(0x001CBD6A), UINT32_C(0x00015808), UINT32_C(0x0013E380), UINT32_C(0x00778472), UINT32_C(0x0014758C)}}, {{UINT32_C(0x00D4475B), UINT32_C(0x00404279), UINT32_C(0x006905B8), UINT32_C(0x00F7FB57), UINT32_C(0x0073BDA7), UINT32_C(0x00269082), UINT32_C(0x006B26ED), UINT32_C(0x0027D833), UINT32_C(0x001E216F), UINT32_C(0x001360D4), UINT32_C(0x00115751)}, {UINT32_C(0x00E38DD3), UINT32_C(0x0054A13C), UINT32_C(0x000EBF81), UINT32_C(0x0010F4E8), UINT32_C(0x0039AB55), UINT32_C(0x0031188E), UINT32_C(0x0027D686), UINT32_C(0x00C9A0DF), UINT32_C(0x0039BD06), UINT32_C(0x00350B58), UINT32_C(0x007D7257)}, {UINT32_C(0x00A31782), UINT32_C(0x000F1C0E), UINT32_C(0x002C8F03), UINT32_C(0x00D72648), UINT32_C(0x0039C85F), UINT32_C(0x004A1C54), UINT32_C(0x000FF85A), UINT32_C(0x0026A90F), UINT32_C(0x002B4E8C), UINT32_C(0x000A4D59), UINT32_C(0x0050B904)}}, {{UINT32_C(0x006238BE), UINT32_C(0x00175795), UINT32_C(0x00538917), UINT32_C(0x007BD984), UINT32_C(0x00292FC6), UINT32_C(0x00080628), UINT32_C(0x001B5D25), UINT32_C(0x00D80A64), UINT32_C(0x005B034B), UINT32_C(0x00167E5D), UINT32_C(0x00421184)}, {UINT32_C(0x00BA4129), UINT32_C(0x000FC466), UINT32_C(0x003F5CA0), UINT32_C(0x00B0084A), UINT32_C(0x003B6970), UINT32_C(0x0079C8BB), UINT32_C(0x006F3E63), UINT32_C(0x00D86F54), UINT32_C(0x003A31F7), UINT32_C(0x00382189), UINT32_C(0x005CEAB5)}, {UINT32_C(0x0041A489), UINT32_C(0x004B3EF7), UINT32_C(0x00591EC7), UINT32_C(0x00F08AA6), UINT32_C(0x00580111), UINT32_C(0x0006B198), UINT32_C(0x0031386E), UINT32_C(0x00EC23A3), UINT32_C(0x007F21FD), UINT32_C(0x005E25F3), UINT32_C(0x0047AC14)}}, {{UINT32_C(0x00AB4BF3), UINT32_C(0x0070ED4E), UINT32_C(0x001DFAA3), UINT32_C(0x006F788D), UINT32_C(0x000470EF), UINT32_C(0x0005F6CC), UINT32_C(0x00317FCC), UINT32_C(0x00341719), UINT32_C(0x000AF8E5), UINT32_C(0x00265856), UINT32_C(0x004EA29A)}, {UINT32_C(0x00BD8CE2), UINT32_C(0x0019149B), UINT32_C(0x0010C6C2), UINT32_C(0x00D9E127), UINT32_C(0x006B514E), UINT32_C(0x00755F77), UINT32_C(0x004E4772), UINT32_C(0x00398A6D), UINT32_C(0x0032566C), UINT32_C(0x00029F76), UINT32_C(0x0050B40A)}, {UINT32_C(0x008B1A27), UINT32_C(0x004EC0C5), UINT32_C(0x0069ED34), UINT32_C(0x001088E0), UINT32_C(0x004CD905), UINT32_C(0x00697E9E), UINT32_C(0x000A4361), UINT32_C(0x00A3E043), UINT32_C(0x0058F3E3), UINT32_C(0x002D4E70), UINT32_C(0x006C75F0)}}, }, { {{UINT32_C(0x005AB8BD), UINT32_C(0x0029D680), UINT32_C(0x0006977B), UINT32_C(0x0074F696), UINT32_C(0x00048954), UINT32_C(0x0028F214), UINT32_C(0x0045A271), UINT32_C(0x000DB9C5), UINT32_C(0x00141E0B), UINT32_C(0x0064EAF4), UINT32_C(0x0016FA62)}, {UINT32_C(0x00DD9A68), UINT32_C(0x0020101A), UINT32_C(0x006747C5), UINT32_C(0x00C02A2D), UINT32_C(0x00551617), UINT32_C(0x00318D4B), UINT32_C(0x003D5380), UINT32_C(0x003B36CE), UINT32_C(0x0042C7B9), UINT32_C(0x0068C9EF), UINT32_C(0x000786CD)}, {UINT32_C(0x0092DAA3), UINT32_C(0x006F3072), UINT32_C(0x0025BB51), UINT32_C(0x0082E155), UINT32_C(0x002995E2), UINT32_C(0x00086EAC), UINT32_C(0x004295AF), UINT32_C(0x0015CF09), UINT32_C(0x000217DF), UINT32_C(0x0025C6FF), UINT32_C(0x006A1FF6)}}, {{UINT32_C(0x0068992F), UINT32_C(0x0037A443), UINT32_C(0x004E52B8), UINT32_C(0x00EB4DD5), UINT32_C(0x00732F40), UINT32_C(0x0039E0FA), UINT32_C(0x0035516B), UINT32_C(0x00D1FF12), UINT32_C(0x007B9904), UINT32_C(0x0000D042), UINT32_C(0x0061BEA7)}, {UINT32_C(0x006695E1), UINT32_C(0x0079A990), UINT32_C(0x007D995E), UINT32_C(0x008EA8CE), UINT32_C(0x0024E995), UINT32_C(0x0009615C), UINT32_C(0x003CF6CE), UINT32_C(0x00077F8E), UINT32_C(0x00350417), UINT32_C(0x0062CAC6), UINT32_C(0x0006858A)}, {UINT32_C(0x0022B953), UINT32_C(0x003B5DF9), UINT32_C(0x004AEDEE), UINT32_C(0x000CEEC5), UINT32_C(0x003887F6), UINT32_C(0x000254BB), UINT32_C(0x001856BF), UINT32_C(0x00B16F48), UINT32_C(0x00226205), UINT32_C(0x001DDE25), UINT32_C(0x006802A0)}}, {{UINT32_C(0x00D029FB), UINT32_C(0x0024FF9C), UINT32_C(0x003692B5), UINT32_C(0x003D6298), UINT32_C(0x005113AA), UINT32_C(0x0016BB74), UINT32_C(0x00207B6F), UINT32_C(0x00CFD145), UINT32_C(0x001A0C73), UINT32_C(0x003DD3F4), UINT32_C(0x004AC618)}, {UINT32_C(0x007E0F78), UINT32_C(0x00342407), UINT32_C(0x007BF737), UINT32_C(0x008C11E4), UINT32_C(0x001D19AF), UINT32_C(0x0023A2DD), UINT32_C(0x00538E8D), UINT32_C(0x00026531), UINT32_C(0x002A0077), UINT32_C(0x002FBD3B), UINT32_C(0x000D23EE)}, {UINT32_C(0x009B883D), UINT32_C(0x000C8276), UINT32_C(0x006F819D), UINT32_C(0x00FC2912), UINT32_C(0x00382987), UINT32_C(0x007E7030), UINT32_C(0x003EF8E1), UINT32_C(0x00E2007A), UINT32_C(0x0008D395), UINT32_C(0x003F0615), UINT32_C(0x00063C97)}}, {{UINT32_C(0x00156CDE), UINT32_C(0x007EA553), UINT32_C(0x004022D6), UINT32_C(0x00DFB476), UINT32_C(0x000AA93D), UINT32_C(0x0075AAD5), UINT32_C(0x005CA989), UINT32_C(0x00F4319E), UINT32_C(0x006F4102), UINT32_C(0x002EBD52), UINT32_C(0x004C0F6F)}, {UINT32_C(0x002F3ABE), UINT32_C(0x002C0332), UINT32_C(0x000C7B65), UINT32_C(0x00E76C78), UINT32_C(0x002AEA4E), UINT32_C(0x00419F87), UINT32_C(0x00340B29), UINT32_C(0x0039375F), UINT32_C(0x005747D0), UINT32_C(0x002FBD65), UINT32_C(0x0056D9BF)}, {UINT32_C(0x00F9E607), UINT32_C(0x00092305), UINT32_C(0x005A5130), UINT32_C(0x00B7A777), UINT32_C(0x00393B42), UINT32_C(0x002198A4), UINT32_C(0x0044F3BE), UINT32_C(0x00B56C11), UINT32_C(0x000C5006), UINT32_C(0x0014F3D3), UINT32_C(0x00204C61)}}, {{UINT32_C(0x00AA29BE), UINT32_C(0x00452FB8), UINT32_C(0x000DF2B9), UINT32_C(0x00F57AEA), UINT32_C(0x00309807), UINT32_C(0x0039FB85), UINT32_C(0x00505F6F), UINT32_C(0x00C3979A), UINT32_C(0x0037D4C6), UINT32_C(0x0063A3A0), UINT32_C(0x0041BB59)}, {UINT32_C(0x00979A22), UINT32_C(0x0011A314), UINT32_C(0x004DCD17), UINT32_C(0x0073157E), UINT32_C(0x007EA111), UINT32_C(0x005CA164), UINT32_C(0x007D14D4), UINT32_C(0x00F4DD95), UINT32_C(0x0065EA29), UINT32_C(0x000A8618), UINT32_C(0x00458E9C)}, {UINT32_C(0x00166F58), UINT32_C(0x003902F4), UINT32_C(0x005DF4F1), UINT32_C(0x00FD1412), UINT32_C(0x0065A422), UINT32_C(0x005C9158), UINT32_C(0x007FA83F), UINT32_C(0x001B6003), UINT32_C(0x003E37A1), UINT32_C(0x00558CA7), UINT32_C(0x005F8B80)}}, {{UINT32_C(0x0058D515), UINT32_C(0x000E279B), UINT32_C(0x0061A7DC), UINT32_C(0x0030FF7E), UINT32_C(0x0036EF25), UINT32_C(0x00545909), UINT32_C(0x0071356E), UINT32_C(0x009FA397), UINT32_C(0x006064CF), UINT32_C(0x0023899B), UINT32_C(0x0023C04A)}, {UINT32_C(0x0070B892), UINT32_C(0x003C225C), UINT32_C(0x00641506), UINT32_C(0x00BC6E0A), UINT32_C(0x0067DF77), UINT32_C(0x001C1328), UINT32_C(0x006FB16A), UINT32_C(0x00DDC3EF), UINT32_C(0x000C0A82), UINT32_C(0x0035BBBF), UINT32_C(0x0018D630)}, {UINT32_C(0x00F762A4), UINT32_C(0x006436A9), UINT32_C(0x0068EFB4), UINT32_C(0x00AAEE79), UINT32_C(0x001FA040), UINT32_C(0x005BE9B2), UINT32_C(0x0068C25E), UINT32_C(0x0069171C), UINT32_C(0x0069727D), UINT32_C(0x004D3596), UINT32_C(0x007D2D07)}}, {{UINT32_C(0x00E0A6B1), UINT32_C(0x00537BD4), UINT32_C(0x00732E56), UINT32_C(0x00054667), UINT32_C(0x00504F91), UINT32_C(0x005BEA24), UINT32_C(0x003816A4), UINT32_C(0x006CAC1F), UINT32_C(0x00094C1A), UINT32_C(0x007E0D77), UINT32_C(0x001F325B)}, {UINT32_C(0x0056C790), UINT32_C(0x00696172), UINT32_C(0x004393F7), UINT32_C(0x0007BC7D), UINT32_C(0x0024008C), UINT32_C(0x00632185), UINT32_C(0x0039D510), UINT32_C(0x00776C63), UINT32_C(0x005303C0), UINT32_C(0x00488334), UINT32_C(0x004A46B9)}, {UINT32_C(0x00CAB13C), UINT32_C(0x007B99B0), UINT32_C(0x00716826), UINT32_C(0x0090AADC), UINT32_C(0x003C39E0), UINT32_C(0x0062EF5A), UINT32_C(0x00220C12), UINT32_C(0x004D0B33), UINT32_C(0x004E1E9F), UINT32_C(0x0009FA96), UINT32_C(0x00553213)}}, {{UINT32_C(0x00250F6D), UINT32_C(0x007501A6), UINT32_C(0x003B682C), UINT32_C(0x0044D730), UINT32_C(0x00649A14), UINT32_C(0x0032BFCE), UINT32_C(0x0066ADB8), UINT32_C(0x0034ED5B), UINT32_C(0x0043D7B2), UINT32_C(0x0000FFB9), UINT32_C(0x005A4861)}, {UINT32_C(0x003B7613), UINT32_C(0x0001D6FB), UINT32_C(0x003D0B17), UINT32_C(0x007E0DC7), UINT32_C(0x005BC5C1), UINT32_C(0x003BB331), UINT32_C(0x0062230B), UINT32_C(0x0061ECC7), UINT32_C(0x005DDB12), UINT32_C(0x002700A7), UINT32_C(0x00258078)}, {UINT32_C(0x005856C3), UINT32_C(0x0046B785), UINT32_C(0x002EE0A7), UINT32_C(0x00316F2C), UINT32_C(0x001A3AAB), UINT32_C(0x0069EF00), UINT32_C(0x0002A746), UINT32_C(0x0099DDEA), UINT32_C(0x004753D7), UINT32_C(0x0062170C), UINT32_C(0x004CA608)}}, {{UINT32_C(0x0096B8DD), UINT32_C(0x004957F8), UINT32_C(0x007298E2), UINT32_C(0x008A7B5F), UINT32_C(0x0001A2BB), UINT32_C(0x004D7F56), UINT32_C(0x00560362), UINT32_C(0x001642A5), UINT32_C(0x0017F72E), UINT32_C(0x003B6605), UINT32_C(0x00390B61)}, {UINT32_C(0x0015F82F), UINT32_C(0x000E8511), UINT32_C(0x00668D3B), UINT32_C(0x00C4B091), UINT32_C(0x003C935D), UINT32_C(0x005D4F5F), UINT32_C(0x0065AFF6), UINT32_C(0x00C88375), UINT32_C(0x00488074), UINT32_C(0x00260091), UINT32_C(0x0032A589)}, {UINT32_C(0x00BCD3E4), UINT32_C(0x0073BD2C), UINT32_C(0x00537827), UINT32_C(0x00C860A9), UINT32_C(0x0023CB46), UINT32_C(0x004AF7E7), UINT32_C(0x0055A3FB), UINT32_C(0x00D9298A), UINT32_C(0x002A1C35), UINT32_C(0x001D8443), UINT32_C(0x00625170)}}, {{UINT32_C(0x00CC32C8), UINT32_C(0x0025B8DD), UINT32_C(0x0033759B), UINT32_C(0x00B90E61), UINT32_C(0x0053232D), UINT32_C(0x00622CCA), UINT32_C(0x003F2B2B), UINT32_C(0x0012CE87), UINT32_C(0x000FED16), UINT32_C(0x00517920), UINT32_C(0x0026E2BC)}, {UINT32_C(0x0033B8DF), UINT32_C(0x006BD2B2), UINT32_C(0x002C06A6), UINT32_C(0x007B255F), UINT32_C(0x0049E009), UINT32_C(0x00109815), UINT32_C(0x0041610E), UINT32_C(0x007AA99D), UINT32_C(0x004D2604), UINT32_C(0x001C2975), UINT32_C(0x00419560)}, {UINT32_C(0x00F4C3F1), UINT32_C(0x00358166), UINT32_C(0x0047A4EF), UINT32_C(0x00B32B54), UINT32_C(0x007F5298), UINT32_C(0x0060C7DC), UINT32_C(0x004550B3), UINT32_C(0x00381199), UINT32_C(0x004D1985), UINT32_C(0x003008AD), UINT32_C(0x001E997E)}}, {{UINT32_C(0x0080A2DD), UINT32_C(0x0011A8A1), UINT32_C(0x00763776), UINT32_C(0x0037A4E8), UINT32_C(0x002DEFD0), UINT32_C(0x005CC3A3), UINT32_C(0x0002CD3A), UINT32_C(0x003BDE69), UINT32_C(0x000D3C3B), UINT32_C(0x00468707), UINT32_C(0x002C6250)}, {UINT32_C(0x00DC4853), UINT32_C(0x0013FF85), UINT32_C(0x006F92A3), UINT32_C(0x00E2DC5B), UINT32_C(0x002BA1BF), UINT32_C(0x0069003C), UINT32_C(0x00696B4A), UINT32_C(0x001FEA22), UINT32_C(0x00737E75), UINT32_C(0x002DDA93), UINT32_C(0x00682793)}, {UINT32_C(0x00792D5C), UINT32_C(0x00756880), UINT32_C(0x0016DEDC), UINT32_C(0x00132FF7), UINT32_C(0x0028F65F), UINT32_C(0x00687D6B), UINT32_C(0x0042DB10), UINT32_C(0x00F60F17), UINT32_C(0x00244567), UINT32_C(0x005EA7EE), UINT32_C(0x00680EE7)}}, {{UINT32_C(0x0017AD54), UINT32_C(0x00226170), UINT32_C(0x00248F16), UINT32_C(0x00E68159), UINT32_C(0x001F85B5), UINT32_C(0x005AEC69), UINT32_C(0x00207C21), UINT32_C(0x0080BD65), UINT32_C(0x0072C461), UINT32_C(0x000826BF), UINT32_C(0x00721CFE)}, {UINT32_C(0x00221394), UINT32_C(0x000F6241), UINT32_C(0x00312D0B), UINT32_C(0x007310BE), UINT32_C(0x006D18ED), UINT32_C(0x0009B7DC), UINT32_C(0x0002ADC6), UINT32_C(0x009D4B71), UINT32_C(0x00652C01), UINT32_C(0x001193C0), UINT32_C(0x006CDFD9)}, {UINT32_C(0x00441B95), UINT32_C(0x005F316E), UINT32_C(0x00055A1A), UINT32_C(0x008ABFDB), UINT32_C(0x0050B1C9), UINT32_C(0x00219EE2), UINT32_C(0x003C70AE), UINT32_C(0x004C49AE), UINT32_C(0x00791825), UINT32_C(0x004EA87D), UINT32_C(0x001C346C)}}, {{UINT32_C(0x00633E8B), UINT32_C(0x000D64E6), UINT32_C(0x0043AD57), UINT32_C(0x0056000C), UINT32_C(0x0022A710), UINT32_C(0x001CF6E7), UINT32_C(0x0061C894), UINT32_C(0x0029FCC0), UINT32_C(0x0063A2A7), UINT32_C(0x002F042F), UINT32_C(0x006D9C7B)}, {UINT32_C(0x00C0114A), UINT32_C(0x00054C9F), UINT32_C(0x00014A30), UINT32_C(0x008750DC), UINT32_C(0x0014F782), UINT32_C(0x005BDDB7), UINT32_C(0x0048FFA9), UINT32_C(0x006F51B9), UINT32_C(0x000ACD25), UINT32_C(0x001C791B), UINT32_C(0x006F027E)}, {UINT32_C(0x0059BE30), UINT32_C(0x0004C8AA), UINT32_C(0x001EEFA6), UINT32_C(0x00969A3F), UINT32_C(0x002541FF), UINT32_C(0x00021EAE), UINT32_C(0x002335EF), UINT32_C(0x007B34F0), UINT32_C(0x005812F4), UINT32_C(0x0035961A), UINT32_C(0x0018E93C)}}, {{UINT32_C(0x003D4ACA), UINT32_C(0x002344E6), UINT32_C(0x005AE7C9), UINT32_C(0x00C22F17), UINT32_C(0x0053F5F0), UINT32_C(0x0037ABD3), UINT32_C(0x0064DD19), UINT32_C(0x00A742A2), UINT32_C(0x00762397), UINT32_C(0x000E9EEF), UINT32_C(0x00047D34)}, {UINT32_C(0x00E9B3BB), UINT32_C(0x00532D39), UINT32_C(0x004E866E), UINT32_C(0x00F7D682), UINT32_C(0x002ACA85), UINT32_C(0x00552578), UINT32_C(0x0033FA4B), UINT32_C(0x00977782), UINT32_C(0x003D410E), UINT32_C(0x0003548B), UINT32_C(0x0054FC74)}, {UINT32_C(0x00C8BBFF), UINT32_C(0x0013F345), UINT32_C(0x0058E472), UINT32_C(0x00274591), UINT32_C(0x005597A6), UINT32_C(0x0013E285), UINT32_C(0x0057D3BB), UINT32_C(0x0092D7C6), UINT32_C(0x00500460), UINT32_C(0x00488CB7), UINT32_C(0x006800FE)}}, {{UINT32_C(0x0000AA79), UINT32_C(0x002C098B), UINT32_C(0x00759A30), UINT32_C(0x002C7125), UINT32_C(0x00199DDC), UINT32_C(0x0075546E), UINT32_C(0x00559A27), UINT32_C(0x00DF24BF), UINT32_C(0x00151F99), UINT32_C(0x003C4C5B), UINT32_C(0x002EAF89)}, {UINT32_C(0x00DC697B), UINT32_C(0x00751FA8), UINT32_C(0x0077C24F), UINT32_C(0x0038C1A6), UINT32_C(0x0013EBD3), UINT32_C(0x0023A808), UINT32_C(0x000B2621), UINT32_C(0x00C685DB), UINT32_C(0x00581796), UINT32_C(0x0057D263), UINT32_C(0x0004E256)}, {UINT32_C(0x00E52262), UINT32_C(0x001D22BD), UINT32_C(0x006A26A0), UINT32_C(0x0085E1CA), UINT32_C(0x003EC7B7), UINT32_C(0x002FFB62), UINT32_C(0x0067736A), UINT32_C(0x00EF293F), UINT32_C(0x0061C4FE), UINT32_C(0x00730AA3), UINT32_C(0x000EB2F6)}}, {{UINT32_C(0x00641095), UINT32_C(0x0058D612), UINT32_C(0x000AAE18), UINT32_C(0x0029DFF3), UINT32_C(0x00001553), UINT32_C(0x007F0860), UINT32_C(0x000F0ED0), UINT32_C(0x00A86E36), UINT32_C(0x000DBF80), UINT32_C(0x0031F7B2), UINT32_C(0x00229559)}, {UINT32_C(0x003D6EA7), UINT32_C(0x00417EB0), UINT32_C(0x0030EED3), UINT32_C(0x0076B04C), UINT32_C(0x006404B7), UINT32_C(0x00647E89), UINT32_C(0x0038E725), UINT32_C(0x00955982), UINT32_C(0x0044F11A), UINT32_C(0x0030EB34), UINT32_C(0x0060A0E2)}, {UINT32_C(0x00FFBA33), UINT32_C(0x00576743), UINT32_C(0x007B4196), UINT32_C(0x0065FCEB), UINT32_C(0x00147F68), UINT32_C(0x00753F2E), UINT32_C(0x002CE14E), UINT32_C(0x004CC9FA), UINT32_C(0x0008D7B1), UINT32_C(0x004C33D1), UINT32_C(0x0045EB11)}}, }, { {{UINT32_C(0x00178112), UINT32_C(0x004144EF), UINT32_C(0x0015E475), UINT32_C(0x00280993), UINT32_C(0x003DFA25), UINT32_C(0x00316893), UINT32_C(0x0013A505), UINT32_C(0x002E8E8C), UINT32_C(0x001BE3B1), UINT32_C(0x004A5354), UINT32_C(0x005737B1)}, {UINT32_C(0x005EE99B), UINT32_C(0x00738EC3), UINT32_C(0x000EEBF1), UINT32_C(0x006EAA11), UINT32_C(0x006EC5B6), UINT32_C(0x00137DDE), UINT32_C(0x0077237C), UINT32_C(0x00B7F2C7), UINT32_C(0x006D2A26), UINT32_C(0x005B944F), UINT32_C(0x0077B72B)}, {UINT32_C(0x00288C6E), UINT32_C(0x005166D7), UINT32_C(0x0048279B), UINT32_C(0x009E9476), UINT32_C(0x0021C271), UINT32_C(0x0071BEB4), UINT32_C(0x004E74B9), UINT32_C(0x00F2F6D4), UINT32_C(0x00498EF2), UINT32_C(0x00769444), UINT32_C(0x00393F71)}}, {{UINT32_C(0x00CF7E6B), UINT32_C(0x001C84EE), UINT32_C(0x00375656), UINT32_C(0x00982B0D), UINT32_C(0x0015275A), UINT32_C(0x0037C644), UINT32_C(0x00419783), UINT32_C(0x00E2FD75), UINT32_C(0x005830C6), UINT32_C(0x003DDDEF), UINT32_C(0x001D4931)}, {UINT32_C(0x006F71D9), UINT32_C(0x0013F2A3), UINT32_C(0x007E4CC9), UINT32_C(0x0048B895), UINT32_C(0x006E0B00), UINT32_C(0x00535CF4), UINT32_C(0x004F83CB), UINT32_C(0x00E80D3A), UINT32_C(0x002893B7), UINT32_C(0x0039AF63), UINT32_C(0x00756654)}, {UINT32_C(0x002DD089), UINT32_C(0x005B7963), UINT32_C(0x00147EEF), UINT32_C(0x008FE97D), UINT32_C(0x0074DE7F), UINT32_C(0x0038F059), UINT32_C(0x00424B8B), UINT32_C(0x00510FF5), UINT32_C(0x002A9DB5), UINT32_C(0x0040775A), UINT32_C(0x0023EC28)}}, {{UINT32_C(0x004FFE86), UINT32_C(0x005A8445), UINT32_C(0x007B9BE4), UINT32_C(0x003CB951), UINT32_C(0x003DA9E0), UINT32_C(0x000B053F), UINT32_C(0x0068F80D), UINT32_C(0x008B792C), UINT32_C(0x006E5C50), UINT32_C(0x00709425), UINT32_C(0x00695574)}, {UINT32_C(0x0055360D), UINT32_C(0x00304400), UINT32_C(0x007E3E9A), UINT32_C(0x00042D95), UINT32_C(0x006A420D), UINT32_C(0x000DE570), UINT32_C(0x0012F771), UINT32_C(0x007BF1D1), UINT32_C(0x005E64D1), UINT32_C(0x001011DE), UINT32_C(0x000FD8B3)}, {UINT32_C(0x0035FF69), UINT32_C(0x0066F82F), UINT32_C(0x00765895), UINT32_C(0x00F5BC13), UINT32_C(0x00559AFC), UINT32_C(0x00165B92), UINT32_C(0x001A82F9), UINT32_C(0x004B92A4), UINT32_C(0x006FF84F), UINT32_C(0x000C3427), UINT32_C(0x0062C571)}}, {{UINT32_C(0x001B13D2), UINT32_C(0x001AB645), UINT32_C(0x007C40CE), UINT32_C(0x007EA6AF), UINT32_C(0x00411986), UINT32_C(0x00393A3E), UINT32_C(0x003CE614), UINT32_C(0x006D6293), UINT32_C(0x003D6770), UINT32_C(0x003CBAD3), UINT32_C(0x005F61B3)}, {UINT32_C(0x007F1514), UINT32_C(0x00563424), UINT32_C(0x00333C42), UINT32_C(0x0091B025), UINT32_C(0x000AC50C), UINT32_C(0x00572275), UINT32_C(0x00592815), UINT32_C(0x002DB85E), UINT32_C(0x0012ADB7), UINT32_C(0x00696D1D), UINT32_C(0x000924E7)}, {UINT32_C(0x008A69B5), UINT32_C(0x0042A7C5), UINT32_C(0x007608DB), UINT32_C(0x00E7F3E0), UINT32_C(0x005993D5), UINT32_C(0x0004961E), UINT32_C(0x0076A481), UINT32_C(0x00A7DA96), UINT32_C(0x007E1606), UINT32_C(0x00752F27), UINT32_C(0x006EA269)}}, {{UINT32_C(0x00E74931), UINT32_C(0x002B3168), UINT32_C(0x0062191F), UINT32_C(0x007F0A08), UINT32_C(0x00407602), UINT32_C(0x005E821F), UINT32_C(0x004B971A), UINT32_C(0x009FAA40), UINT32_C(0x00617415), UINT32_C(0x0019AF4C), UINT32_C(0x000A1378)}, {UINT32_C(0x001CF746), UINT32_C(0x00698B21), UINT32_C(0x003AF2B3), UINT32_C(0x0018D41A), UINT32_C(0x00032EA5), UINT32_C(0x006A2A53), UINT32_C(0x0021B364), UINT32_C(0x004A1660), UINT32_C(0x00524EDD), UINT32_C(0x00537B8F), UINT32_C(0x0038BE03)}, {UINT32_C(0x006C56DF), UINT32_C(0x0042F0FB), UINT32_C(0x000A9D1A), UINT32_C(0x007BE0C1), UINT32_C(0x006A26F4), UINT32_C(0x0034FD46), UINT32_C(0x005C512E), UINT32_C(0x00F3B887), UINT32_C(0x00741791), UINT32_C(0x000B6109), UINT32_C(0x007ED098)}}, {{UINT32_C(0x002F95C3), UINT32_C(0x0075A30D), UINT32_C(0x004F8EA8), UINT32_C(0x00D36AE9), UINT32_C(0x003B9F94), UINT32_C(0x0050D27A), UINT32_C(0x0047AFFF), UINT32_C(0x00FF1072), UINT32_C(0x006EBA0D), UINT32_C(0x007147B6), UINT32_C(0x007C9C06)}, {UINT32_C(0x007D647C), UINT32_C(0x00491D36), UINT32_C(0x003D3169), UINT32_C(0x00E48196), UINT32_C(0x005C2776), UINT32_C(0x0071BB7A), UINT32_C(0x000E3716), UINT32_C(0x00EEE6BA), UINT32_C(0x007A2FD6), UINT32_C(0x0066EADE), UINT32_C(0x006A3D3C)}, {UINT32_C(0x00D712D2), UINT32_C(0x0030AFB5), UINT32_C(0x000B6DE0), UINT32_C(0x00CA9B95), UINT32_C(0x003CB508), UINT32_C(0x0002574C), UINT32_C(0x004F7664), UINT32_C(0x008BDA7C), UINT32_C(0x0052F4AE), UINT32_C(0x007C9C6D), UINT32_C(0x00640826)}}, {{UINT32_C(0x00E39A36), UINT32_C(0x004E864A), UINT32_C(0x0041824A), UINT32_C(0x0014E9D0), UINT32_C(0x006B0DD5), UINT32_C(0x003F0191), UINT32_C(0x006B3AA8), UINT32_C(0x000F82B6), UINT32_C(0x00646713), UINT32_C(0x004411BF), UINT32_C(0x006EC066)}, {UINT32_C(0x0055A118), UINT32_C(0x001D8588), UINT32_C(0x00098B01), UINT32_C(0x005B872B), UINT32_C(0x000612D7), UINT32_C(0x0015BB6C), UINT32_C(0x003EA8DE), UINT32_C(0x00492CBB), UINT32_C(0x0002B390), UINT32_C(0x002F64C6), UINT32_C(0x00309519)}, {UINT32_C(0x00BCD94C), UINT32_C(0x000453AB), UINT32_C(0x0004DF45), UINT32_C(0x000AF59E), UINT32_C(0x00224611), UINT32_C(0x0046CB1F), UINT32_C(0x0037D384), UINT32_C(0x00704C79), UINT32_C(0x004E9EAE), UINT32_C(0x005F6C61), UINT32_C(0x0033B91C)}}, {{UINT32_C(0x00C4EB7B), UINT32_C(0x001BB1AE), UINT32_C(0x000DF746), UINT32_C(0x002F5C66), UINT32_C(0x00386901), UINT32_C(0x004503D0), UINT32_C(0x00243C4F), UINT32_C(0x00F631A8), UINT32_C(0x0072318C), UINT32_C(0x0067781F), UINT32_C(0x0062555B)}, {UINT32_C(0x009DF20B), UINT32_C(0x007957AF), UINT32_C(0x0048E896), UINT32_C(0x00266C31), UINT32_C(0x00606385), UINT32_C(0x00182ADB), UINT32_C(0x000F2D0A), UINT32_C(0x0047F1DB), UINT32_C(0x00612A5A), UINT32_C(0x00585C22), UINT32_C(0x00138DA1)}, {UINT32_C(0x002B00C5), UINT32_C(0x007C31F7), UINT32_C(0x0027D051), UINT32_C(0x009836BE), UINT32_C(0x005DD824), UINT32_C(0x003C85C8), UINT32_C(0x00037B92), UINT32_C(0x005A36F0), UINT32_C(0x00072882), UINT32_C(0x00556F25), UINT32_C(0x005C74C4)}}, {{UINT32_C(0x00200CDA), UINT32_C(0x00142D7E), UINT32_C(0x000C5F19), UINT32_C(0x0033CB24), UINT32_C(0x0062D137), UINT32_C(0x00370C3B), UINT32_C(0x007C19E3), UINT32_C(0x002C37A4), UINT32_C(0x0056C3B7), UINT32_C(0x0012591E), UINT32_C(0x005C6251)}, {UINT32_C(0x00B8567F), UINT32_C(0x007942F3), UINT32_C(0x002971B5), UINT32_C(0x007509BB), UINT32_C(0x004489A3), UINT32_C(0x00090D38), UINT32_C(0x0049BA67), UINT32_C(0x00A295D7), UINT32_C(0x0006DE00), UINT32_C(0x005529F0), UINT32_C(0x0068D340)}, {UINT32_C(0x008E1FEE), UINT32_C(0x002BADB8), UINT32_C(0x0060B20C), UINT32_C(0x00DE49F8), UINT32_C(0x0006AE06), UINT32_C(0x005BAE81), UINT32_C(0x00153FDC), UINT32_C(0x002DCC1B), UINT32_C(0x000F1E26), UINT32_C(0x00005870), UINT32_C(0x003CB27C)}}, {{UINT32_C(0x00BA06D8), UINT32_C(0x0028ABA3), UINT32_C(0x004A0A47), UINT32_C(0x000E951E), UINT32_C(0x00609146), UINT32_C(0x00213816), UINT32_C(0x005657D3), UINT32_C(0x00404103), UINT32_C(0x0041BEE3), UINT32_C(0x001CC688), UINT32_C(0x003A758E)}, {UINT32_C(0x00F8BBE3), UINT32_C(0x00641D00), UINT32_C(0x00119DD5), UINT32_C(0x004610E6), UINT32_C(0x0042B1F2), UINT32_C(0x00065991), UINT32_C(0x00400456), UINT32_C(0x0031F869), UINT32_C(0x00467CE5), UINT32_C(0x002ACA8A), UINT32_C(0x004AE71F)}, {UINT32_C(0x00E75B70), UINT32_C(0x0045C331), UINT32_C(0x002C67D3), UINT32_C(0x002BAD62), UINT32_C(0x006D4C0D), UINT32_C(0x003E98E0), UINT32_C(0x0025DD15), UINT32_C(0x001652BE), UINT32_C(0x00138D53), UINT32_C(0x004CC0B3), UINT32_C(0x002588D3)}}, {{UINT32_C(0x0015F134), UINT32_C(0x00758619), UINT32_C(0x005ABA25), UINT32_C(0x008AE40E), UINT32_C(0x00678EB8), UINT32_C(0x0001E6CD), UINT32_C(0x006265B1), UINT32_C(0x00D3C52B), UINT32_C(0x002372C9), UINT32_C(0x0008A5C9), UINT32_C(0x006ACFA4)}, {UINT32_C(0x009F8482), UINT32_C(0x0045994C), UINT32_C(0x005989D0), UINT32_C(0x0048FFCC), UINT32_C(0x00242063), UINT32_C(0x000A8DD0), UINT32_C(0x005A0F78), UINT32_C(0x000518C7), UINT32_C(0x0039D0FB), UINT32_C(0x00116011), UINT32_C(0x0074BBE1)}, {UINT32_C(0x008817CF), UINT32_C(0x0035F03B), UINT32_C(0x0008E964), UINT32_C(0x00DBB160), UINT32_C(0x0017FB04), UINT32_C(0x006F931C), UINT32_C(0x0024585A), UINT32_C(0x0043E352), UINT32_C(0x005B3B89), UINT32_C(0x0041A78E), UINT32_C(0x004EE10D)}}, {{UINT32_C(0x00B5B594), UINT32_C(0x00238C49), UINT32_C(0x0061A952), UINT32_C(0x00547564), UINT32_C(0x0017E9B6), UINT32_C(0x004A85C1), UINT32_C(0x00092964), UINT32_C(0x00E0030F), UINT32_C(0x0002C024), UINT32_C(0x006FDEC5), UINT32_C(0x003414A1)}, {UINT32_C(0x005F899E), UINT32_C(0x00317B47), UINT32_C(0x00390FE7), UINT32_C(0x0081FD30), UINT32_C(0x00666C28), UINT32_C(0x00310591), UINT32_C(0x000A02ED), UINT32_C(0x00C5E37F), UINT32_C(0x00200BEA), UINT32_C(0x004E58B8), UINT32_C(0x0006090A)}, {UINT32_C(0x009AED9F), UINT32_C(0x006353DF), UINT32_C(0x004C8001), UINT32_C(0x00684029), UINT32_C(0x00278C84), UINT32_C(0x00476EFD), UINT32_C(0x002269BF), UINT32_C(0x0061CFF8), UINT32_C(0x006308BB), UINT32_C(0x0038C1A8), UINT32_C(0x000ED4DD)}}, {{UINT32_C(0x0096CDC1), UINT32_C(0x004A93DE), UINT32_C(0x0017141A), UINT32_C(0x000CAE27), UINT32_C(0x00633C72), UINT32_C(0x001DD494), UINT32_C(0x005D5019), UINT32_C(0x007B392A), UINT32_C(0x004E6770), UINT32_C(0x0057CDFA), UINT32_C(0x0070ED69)}, {UINT32_C(0x00A5AAC7), UINT32_C(0x0017F8BA), UINT32_C(0x0012D3F8), UINT32_C(0x00D2AEF7), UINT32_C(0x00203DAB), UINT32_C(0x001A6E08), UINT32_C(0x000F9D07), UINT32_C(0x003CEB53), UINT32_C(0x001F11A2), UINT32_C(0x00146100), UINT32_C(0x002BF207)}, {UINT32_C(0x00AE2A02), UINT32_C(0x003FEF01), UINT32_C(0x00095E8C), UINT32_C(0x001BC27F), UINT32_C(0x00579C72), UINT32_C(0x007785A3), UINT32_C(0x000CF4D0), UINT32_C(0x00B77DC2), UINT32_C(0x00771FCC), UINT32_C(0x006D028D), UINT32_C(0x0072A687)}}, {{UINT32_C(0x00FB5F0C), UINT32_C(0x000952F3), UINT32_C(0x0011F5D5), UINT32_C(0x0065371A), UINT32_C(0x006D7E88), UINT32_C(0x0054191C), UINT32_C(0x0076F7CF), UINT32_C(0x006B48DC), UINT32_C(0x006FD352), UINT32_C(0x004F1AA7), UINT32_C(0x007F5B13)}, {UINT32_C(0x00606E6E), UINT32_C(0x00363808), UINT32_C(0x00407081), UINT32_C(0x0004FC3F), UINT32_C(0x00448579), UINT32_C(0x005D29C4), UINT32_C(0x001A127D), UINT32_C(0x005B9EEE), UINT32_C(0x00653D8E), UINT32_C(0x0028A4DF), UINT32_C(0x00628593)}, {UINT32_C(0x00AC7820), UINT32_C(0x0030A9D3), UINT32_C(0x0071BE3A), UINT32_C(0x005FB4E5), UINT32_C(0x002512AE), UINT32_C(0x006EAE7D), UINT32_C(0x001D9B40), UINT32_C(0x005C1369), UINT32_C(0x00786C22), UINT32_C(0x0047AFEE), UINT32_C(0x00784A75)}}, {{UINT32_C(0x00213EE3), UINT32_C(0x006F9827), UINT32_C(0x0021482B), UINT32_C(0x00E1390C), UINT32_C(0x00560D0B), UINT32_C(0x0050DD23), UINT32_C(0x0064A528), UINT32_C(0x00BA7CFF), UINT32_C(0x002D8C84), UINT32_C(0x0016175A), UINT32_C(0x005016A4)}, {UINT32_C(0x00776C25), UINT32_C(0x000CB993), UINT32_C(0x0023BE80), UINT32_C(0x005A52FE), UINT32_C(0x002D117A), UINT32_C(0x00199CDB), UINT32_C(0x0052EB5E), UINT32_C(0x008D6F49), UINT32_C(0x007D7649), UINT32_C(0x0027048D), UINT32_C(0x001A9C36)}, {UINT32_C(0x00632283), UINT32_C(0x00211DC7), UINT32_C(0x005DFA7C), UINT32_C(0x00F9046B), UINT32_C(0x00588CD6), UINT32_C(0x003FAF32), UINT32_C(0x007F4AED), UINT32_C(0x00575BC2), UINT32_C(0x007DBB8A), UINT32_C(0x0005122F), UINT32_C(0x006253CC)}}, {{UINT32_C(0x000D1BD2), UINT32_C(0x001AF81A), UINT32_C(0x0037C285), UINT32_C(0x00D871E6), UINT32_C(0x0062340E), UINT32_C(0x0071909A), UINT32_C(0x000F0E01), UINT32_C(0x0076262E), UINT32_C(0x007BF9C3), UINT32_C(0x007F40FC), UINT32_C(0x000B2BC5)}, {UINT32_C(0x002724D3), UINT32_C(0x00504EE8), UINT32_C(0x00609955), UINT32_C(0x0075E11A), UINT32_C(0x000CB36C), UINT32_C(0x0056D4AF), UINT32_C(0x000E59E9), UINT32_C(0x003E6912), UINT32_C(0x00789AD2), UINT32_C(0x00575219), UINT32_C(0x007D7B6C)}, {UINT32_C(0x0072E3DB), UINT32_C(0x0050D327), UINT32_C(0x000F9230), UINT32_C(0x00AFB63A), UINT32_C(0x0008E760), UINT32_C(0x0059EB9D), UINT32_C(0x003A4CC1), UINT32_C(0x00C1CE75), UINT32_C(0x00497AD2), UINT32_C(0x006BAB27), UINT32_C(0x002B8174)}}, }, { {{UINT32_C(0x00C72DC5), UINT32_C(0x00771E4C), UINT32_C(0x007FE32B), UINT32_C(0x00502045), UINT32_C(0x00047BCA), UINT32_C(0x005E99DD), UINT32_C(0x0062584D), UINT32_C(0x00C26155), UINT32_C(0x007641CF), UINT32_C(0x00519072), UINT32_C(0x0008A95B)}, {UINT32_C(0x00B1CB39), UINT32_C(0x000965FD), UINT32_C(0x0031E4AF), UINT32_C(0x0030360A), UINT32_C(0x001C457C), UINT32_C(0x003BB754), UINT32_C(0x005CEAE2), UINT32_C(0x000B7485), UINT32_C(0x00211EE1), UINT32_C(0x005286E0), UINT32_C(0x00797D03)}, {UINT32_C(0x00220D40), UINT32_C(0x004CA0AD), UINT32_C(0x0021A77A), UINT32_C(0x00364CE1), UINT32_C(0x006676A3), UINT32_C(0x0038EE70), UINT32_C(0x001B66BF), UINT32_C(0x00A09800), UINT32_C(0x00714B36), UINT32_C(0x0068F47C), UINT32_C(0x000FBD61)}}, {{UINT32_C(0x00AADA87), UINT32_C(0x001E516D), UINT32_C(0x001DDDC1), UINT32_C(0x002496F0), UINT32_C(0x0079D73B), UINT32_C(0x006E84CA), UINT32_C(0x0001F77F), UINT32_C(0x004ED6A4), UINT32_C(0x004F9268), UINT32_C(0x002C2D9B), UINT32_C(0x00452C79)}, {UINT32_C(0x005C5FB5), UINT32_C(0x001401F9), UINT32_C(0x001619FE), UINT32_C(0x0073A62F), UINT32_C(0x0027A568), UINT32_C(0x00410CA3), UINT32_C(0x007090B1), UINT32_C(0x0088392F), UINT32_C(0x00025F8C), UINT32_C(0x00470FB6), UINT32_C(0x00400202)}, {UINT32_C(0x00FB4AF5), UINT32_C(0x004A6D33), UINT32_C(0x0067B3D7), UINT32_C(0x006C233F), UINT32_C(0x006659A6), UINT32_C(0x003370F0), UINT32_C(0x0071C750), UINT32_C(0x007CF562), UINT32_C(0x006B187A), UINT32_C(0x0044EC7F), UINT32_C(0x00780B9E)}}, {{UINT32_C(0x007A1682), UINT32_C(0x00775D09), UINT32_C(0x000CA759), UINT32_C(0x005178EB), UINT32_C(0x001128C9), UINT32_C(0x00453CCE), UINT32_C(0x002B94ED), UINT32_C(0x00A6541E), UINT32_C(0x0029A8C4), UINT32_C(0x0029D1E3), UINT32_C(0x00318CEC)}, {UINT32_C(0x002EA810), UINT32_C(0x002E2D2A), UINT32_C(0x00760A1E), UINT32_C(0x00768B26), UINT32_C(0x0012C353), UINT32_C(0x007A143A), UINT32_C(0x007F1485), UINT32_C(0x002F5E05), UINT32_C(0x006543DE), UINT32_C(0x0005DA47), UINT32_C(0x0062D462)}, {UINT32_C(0x0056C417), UINT32_C(0x0020F8E7), UINT32_C(0x0021B1CB), UINT32_C(0x00DEBC01), UINT32_C(0x0049F124), UINT32_C(0x0063A3EF), UINT32_C(0x006B1EFC), UINT32_C(0x005DD025), UINT32_C(0x00579F7C), UINT32_C(0x005282E6), UINT32_C(0x003743A4)}}, {{UINT32_C(0x00D850C1), UINT32_C(0x004304DD), UINT32_C(0x0031CA95), UINT32_C(0x00ABA381), UINT32_C(0x00557845), UINT32_C(0x00170B2A), UINT32_C(0x00269F01), UINT32_C(0x00F14562), UINT32_C(0x00177E37), UINT32_C(0x0000AEF5), UINT32_C(0x0016E67A)}, {UINT32_C(0x008429CD), UINT32_C(0x004F3F15), UINT32_C(0x00310961), UINT32_C(0x00018EC0), UINT32_C(0x0017C520), UINT32_C(0x005A3C1E), UINT32_C(0x00069B19), UINT32_C(0x00BBC85D), UINT32_C(0x006A8255), UINT32_C(0x0005A237), UINT32_C(0x00671035)}, {UINT32_C(0x00397785), UINT32_C(0x000B8DE6), UINT32_C(0x00034C5B), UINT32_C(0x00335B11), UINT32_C(0x005C7862), UINT32_C(0x002482C8), UINT32_C(0x0037A568), UINT32_C(0x00679E39), UINT32_C(0x0056810F), UINT32_C(0x0000E8F6), UINT32_C(0x003D1330)}}, {{UINT32_C(0x00FAF1CD), UINT32_C(0x0060A8C5), UINT32_C(0x00508B76), UINT32_C(0x004F108E), UINT32_C(0x0054D331), UINT32_C(0x0027A7E8), UINT32_C(0x00346905), UINT32_C(0x00450F84), UINT32_C(0x001D3E9C), UINT32_C(0x000B0762), UINT32_C(0x00032396)}, {UINT32_C(0x004FAD75), UINT32_C(0x00013909), UINT32_C(0x00279AA7), UINT32_C(0x00661D96), UINT32_C(0x0011C8F3), UINT32_C(0x004E1E02), UINT32_C(0x0079B899), UINT32_C(0x00219A22), UINT32_C(0x007D00F4), UINT32_C(0x0073A047), UINT32_C(0x00112302)}, {UINT32_C(0x00C06EE2), UINT32_C(0x003FE63F), UINT32_C(0x0041BD79), UINT32_C(0x00096C7C), UINT32_C(0x00716A9D), UINT32_C(0x00616E56), UINT32_C(0x003FA2BD), UINT32_C(0x006CC575), UINT32_C(0x0077B6FA), UINT32_C(0x005D8484), UINT32_C(0x004EC884)}}, {{UINT32_C(0x00EEDE54), UINT32_C(0x0060BECB), UINT32_C(0x00454F6A), UINT32_C(0x007CA867), UINT32_C(0x003128D5), UINT32_C(0x001A6257), UINT32_C(0x001C9D64), UINT32_C(0x0047D7B2), UINT32_C(0x0048D9D4), UINT32_C(0x00387A36), UINT32_C(0x0030150F)}, {UINT32_C(0x00869B40), UINT32_C(0x004423AB), UINT32_C(0x006A0C98), UINT32_C(0x004BE18D), UINT32_C(0x000680E9), UINT32_C(0x006F03C8), UINT32_C(0x0035097A), UINT32_C(0x00163A09), UINT32_C(0x00036511), UINT32_C(0x002020C4), UINT32_C(0x0032F125)}, {UINT32_C(0x006499A6), UINT32_C(0x0032DBAB), UINT32_C(0x0050F205), UINT32_C(0x00127C8C), UINT32_C(0x0071C444), UINT32_C(0x00610493), UINT32_C(0x0057B4B2), UINT32_C(0x00B0B2CA), UINT32_C(0x0034A155), UINT32_C(0x006D7797), UINT32_C(0x0063E346)}}, {{UINT32_C(0x0030C824), UINT32_C(0x00393557), UINT32_C(0x002AA53A), UINT32_C(0x00232B1F), UINT32_C(0x007E74FF), UINT32_C(0x0058171D), UINT32_C(0x000328E4), UINT32_C(0x0085BA6B), UINT32_C(0x0013D154), UINT32_C(0x0018258C), UINT32_C(0x006FA2B0)}, {UINT32_C(0x00C3FCC1), UINT32_C(0x006B3441), UINT32_C(0x005E8829), UINT32_C(0x00B3314C), UINT32_C(0x0004ECB2), UINT32_C(0x006B3C89), UINT32_C(0x003F2F04), UINT32_C(0x0092C88B), UINT32_C(0x001EC53B), UINT32_C(0x0031EA9C), UINT32_C(0x000BDC2A)}, {UINT32_C(0x0063FFE8), UINT32_C(0x000EFB74), UINT32_C(0x0015043F), UINT32_C(0x005F290A), UINT32_C(0x001DA041), UINT32_C(0x0060291C), UINT32_C(0x007C2769), UINT32_C(0x00EB677A), UINT32_C(0x0043B7A4), UINT32_C(0x0033A181), UINT32_C(0x003F9D2D)}}, {{UINT32_C(0x006CC3EF), UINT32_C(0x002F3089), UINT32_C(0x0061B741), UINT32_C(0x007537D8), UINT32_C(0x00717E80), UINT32_C(0x000BD6BF), UINT32_C(0x003D6972), UINT32_C(0x00BE0A56), UINT32_C(0x007C075B), UINT32_C(0x005C62F6), UINT32_C(0x003CA2DF)}, {UINT32_C(0x00171808), UINT32_C(0x005A205B), UINT32_C(0x0005AD96), UINT32_C(0x0058D8E1), UINT32_C(0x00423531), UINT32_C(0x005C11A5), UINT32_C(0x00169496), UINT32_C(0x001AB66A), UINT32_C(0x002F6C8B), UINT32_C(0x00668CFD), UINT32_C(0x006B0027)}, {UINT32_C(0x00528A82), UINT32_C(0x002B2713), UINT32_C(0x0079DE04), UINT32_C(0x00EF8CF9), UINT32_C(0x006263B9), UINT32_C(0x00720507), UINT32_C(0x0052404F), UINT32_C(0x003C93E8), UINT32_C(0x00100A85), UINT32_C(0x006D3FFA), UINT32_C(0x003B14B0)}}, {{UINT32_C(0x00F84103), UINT32_C(0x002EFED0), UINT32_C(0x004DF3E6), UINT32_C(0x001A7373), UINT32_C(0x004C8064), UINT32_C(0x0032CAAE), UINT32_C(0x000E2E35), UINT32_C(0x00099871), UINT32_C(0x0043615C), UINT32_C(0x005D4D9B), UINT32_C(0x003A809B)}, {UINT32_C(0x00688B18), UINT32_C(0x003E6C8B), UINT32_C(0x007DA089), UINT32_C(0x00470987), UINT32_C(0x0006E04D), UINT32_C(0x00346F12), UINT32_C(0x0054964B), UINT32_C(0x001C7FB1), UINT32_C(0x0028F4AF), UINT32_C(0x006ABA8D), UINT32_C(0x007BEAD8)}, {UINT32_C(0x00A4DB09), UINT32_C(0x000F021A), UINT32_C(0x000E3BF3), UINT32_C(0x00347724), UINT32_C(0x001CD5E3), UINT32_C(0x00570A82), UINT32_C(0x001A702F), UINT32_C(0x00AF41F7), UINT32_C(0x005573E8), UINT32_C(0x007B6CC3), UINT32_C(0x000E6B2F)}}, {{UINT32_C(0x00C4323E), UINT32_C(0x005E5A07), UINT32_C(0x006E0C89), UINT32_C(0x00018D1E), UINT32_C(0x00582AB5), UINT32_C(0x004E8211), UINT32_C(0x0021ED53), UINT32_C(0x006B639D), UINT32_C(0x00505AE2), UINT32_C(0x007DF924), UINT32_C(0x002AA137)}, {UINT32_C(0x00C33279), UINT32_C(0x00685341), UINT32_C(0x00643C48), UINT32_C(0x00ACAC38), UINT32_C(0x005AE420), UINT32_C(0x00514A01), UINT32_C(0x006BEB21), UINT32_C(0x003CC859), UINT32_C(0x0017135D), UINT32_C(0x004ADA1B), UINT32_C(0x007CF53B)}, {UINT32_C(0x006149FF), UINT32_C(0x00353234), UINT32_C(0x0000FE22), UINT32_C(0x001F09D7), UINT32_C(0x00021F65), UINT32_C(0x0049C3AD), UINT32_C(0x001C1A78), UINT32_C(0x00E00DFB), UINT32_C(0x00228A53), UINT32_C(0x005812BD), UINT32_C(0x00407161)}}, {{UINT32_C(0x00AC8719), UINT32_C(0x004B5C52), UINT32_C(0x001AD60A), UINT32_C(0x001B2FAC), UINT32_C(0x004CD6B6), UINT32_C(0x002823C4), UINT32_C(0x003BE7C2), UINT32_C(0x009BDCCC), UINT32_C(0x00566B2F), UINT32_C(0x00205A09), UINT32_C(0x006C27CE)}, {UINT32_C(0x0053FC77), UINT32_C(0x003F8121), UINT32_C(0x0073622F), UINT32_C(0x00775975), UINT32_C(0x007FED73), UINT32_C(0x0041C648), UINT32_C(0x00462A53), UINT32_C(0x00FFBFD4), UINT32_C(0x0011A7DF), UINT32_C(0x003092B5), UINT32_C(0x00261A53)}, {UINT32_C(0x009AAFB7), UINT32_C(0x0013BCE1), UINT32_C(0x004971F6), UINT32_C(0x00EDD1B3), UINT32_C(0x002525B4), UINT32_C(0x0058D61A), UINT32_C(0x0066E9D1), UINT32_C(0x009B73B8), UINT32_C(0x0033C84A), UINT32_C(0x0006CAB6), UINT32_C(0x00008EB2)}}, {{UINT32_C(0x00492C5D), UINT32_C(0x005CF97D), UINT32_C(0x0007722C), UINT32_C(0x0066F3B8), UINT32_C(0x000306A7), UINT32_C(0x007D6927), UINT32_C(0x0023F020), UINT32_C(0x00BD1D41), UINT32_C(0x00497C08), UINT32_C(0x005699EF), UINT32_C(0x00369E3D)}, {UINT32_C(0x0025F79F), UINT32_C(0x005176A4), UINT32_C(0x003D2CDA), UINT32_C(0x00F5AAC3), UINT32_C(0x000A2AD0), UINT32_C(0x006D725F), UINT32_C(0x000E7277), UINT32_C(0x00B14CC5), UINT32_C(0x002D5FC8), UINT32_C(0x007F764F), UINT32_C(0x0050EF13)}, {UINT32_C(0x0097E85B), UINT32_C(0x001C0CFD), UINT32_C(0x006027C7), UINT32_C(0x0038732E), UINT32_C(0x003385DC), UINT32_C(0x006F67DF), UINT32_C(0x0038EF81), UINT32_C(0x00F717C0), UINT32_C(0x000B4878), UINT32_C(0x00099CD4), UINT32_C(0x0071787D)}}, {{UINT32_C(0x000EB7F2), UINT32_C(0x007F42B8), UINT32_C(0x0070653E), UINT32_C(0x00320A4F), UINT32_C(0x0016BB51), UINT32_C(0x00691D90), UINT32_C(0x00138916), UINT32_C(0x00D043DE), UINT32_C(0x00107F57), UINT32_C(0x001DCB80), UINT32_C(0x0059F0BB)}, {UINT32_C(0x005CD9B5), UINT32_C(0x002A2874), UINT32_C(0x000600A5), UINT32_C(0x00235734), UINT32_C(0x002313EF), UINT32_C(0x00312DEA), UINT32_C(0x0029CA11), UINT32_C(0x00973048), UINT32_C(0x004D4134), UINT32_C(0x003E99AC), UINT32_C(0x000867B4)}, {UINT32_C(0x002FA5A2), UINT32_C(0x00413E42), UINT32_C(0x00772166), UINT32_C(0x001C593A), UINT32_C(0x006949A2), UINT32_C(0x00786FF6), UINT32_C(0x003BB2E2), UINT32_C(0x002BC314), UINT32_C(0x00125CC6), UINT32_C(0x007B110C), UINT32_C(0x004E5352)}}, {{UINT32_C(0x00E38B2F), UINT32_C(0x00549D88), UINT32_C(0x00451B24), UINT32_C(0x00237AB5), UINT32_C(0x000DAF24), UINT32_C(0x00028B85), UINT32_C(0x0002439F), UINT32_C(0x007FF9B1), UINT32_C(0x004B3263), UINT32_C(0x007B2514), UINT32_C(0x00130159)}, {UINT32_C(0x00CBEDBE), UINT32_C(0x00164E8E), UINT32_C(0x006D1617), UINT32_C(0x00971E62), UINT32_C(0x0014CEC3), UINT32_C(0x00654E4C), UINT32_C(0x003EE5FE), UINT32_C(0x00D5DB3C), UINT32_C(0x0007E501), UINT32_C(0x0059EAD8), UINT32_C(0x0033FEF5)}, {UINT32_C(0x00F396A9), UINT32_C(0x000E12CC), UINT32_C(0x0066F113), UINT32_C(0x0032A657), UINT32_C(0x00558CEA), UINT32_C(0x0035397E), UINT32_C(0x0072BA41), UINT32_C(0x001BAC1F), UINT32_C(0x00458EAD), UINT32_C(0x000176E4), UINT32_C(0x006D9827)}}, {{UINT32_C(0x0054ACCB), UINT32_C(0x006837A0), UINT32_C(0x005E0E17), UINT32_C(0x002D46A3), UINT32_C(0x001EC13B), UINT32_C(0x0055ED3F), UINT32_C(0x004AD796), UINT32_C(0x009822FD), UINT32_C(0x006E60A8), UINT32_C(0x0019C052), UINT32_C(0x0047770E)}, {UINT32_C(0x002D311B), UINT32_C(0x0025BEF8), UINT32_C(0x00441B88), UINT32_C(0x000175A1), UINT32_C(0x0077C008), UINT32_C(0x007C334F), UINT32_C(0x003B3992), UINT32_C(0x00CA38F0), UINT32_C(0x0002777D), UINT32_C(0x003C8B93), UINT32_C(0x0028F8C6)}, {UINT32_C(0x008E76E6), UINT32_C(0x000A66B8), UINT32_C(0x0049E5D6), UINT32_C(0x00E8B276), UINT32_C(0x0032543C), UINT32_C(0x0027A563), UINT32_C(0x0000CF52), UINT32_C(0x00DEDDB7), UINT32_C(0x00401370), UINT32_C(0x000F47DB), UINT32_C(0x00502929)}}, {{UINT32_C(0x00AECCC3), UINT32_C(0x0054C9AE), UINT32_C(0x002F21DC), UINT32_C(0x0059D2B0), UINT32_C(0x0033CED8), UINT32_C(0x004A2E1F), UINT32_C(0x0019B7CF), UINT32_C(0x0095A290), UINT32_C(0x0070C5C6), UINT32_C(0x002EB87D), UINT32_C(0x007DB934)}, {UINT32_C(0x0078836C), UINT32_C(0x003DF99A), UINT32_C(0x005C291E), UINT32_C(0x00534356), UINT32_C(0x00247324), UINT32_C(0x002F5070), UINT32_C(0x003EEB8F), UINT32_C(0x003A920E), UINT32_C(0x0002D28C), UINT32_C(0x000FF5FB), UINT32_C(0x007336AA)}, {UINT32_C(0x001FA1A5), UINT32_C(0x00212F13), UINT32_C(0x00577134), UINT32_C(0x004BA237), UINT32_C(0x0049A436), UINT32_C(0x007F6BB2), UINT32_C(0x00722AC5), UINT32_C(0x00C0532E), UINT32_C(0x007534D3), UINT32_C(0x001DCBE4), UINT32_C(0x00726554)}}, }, { {{UINT32_C(0x009D7F04), UINT32_C(0x003E522B), UINT32_C(0x004E8173), UINT32_C(0x001C1588), UINT32_C(0x0022E52F), UINT32_C(0x007A9393), UINT32_C(0x006F3F0A), UINT32_C(0x00537EF6), UINT32_C(0x0061C5EA), UINT32_C(0x001044A3), UINT32_C(0x005E8C14)}, {UINT32_C(0x00CC8AA4), UINT32_C(0x000C72ED), UINT32_C(0x0000DF49), UINT32_C(0x00798195), UINT32_C(0x000C41B1), UINT32_C(0x005C0709), UINT32_C(0x0063F579), UINT32_C(0x00797385), UINT32_C(0x00561750), UINT32_C(0x0022408A), UINT32_C(0x0033DFF7)}, {UINT32_C(0x00E72D7C), UINT32_C(0x0052E6A6), UINT32_C(0x00677E30), UINT32_C(0x00DA67FB), UINT32_C(0x0053230A), UINT32_C(0x007B8901), UINT32_C(0x0045AC83), UINT32_C(0x0010FEFC), UINT32_C(0x006E69B3), UINT32_C(0x006008DB), UINT32_C(0x006D7911)}}, {{UINT32_C(0x004F7A12), UINT32_C(0x003FE9B9), UINT32_C(0x0035897D), UINT32_C(0x0092A16A), UINT32_C(0x002ABB20), UINT32_C(0x003C1F4F), UINT32_C(0x00170A77), UINT32_C(0x0014D957), UINT32_C(0x003289DC), UINT32_C(0x0005BECE), UINT32_C(0x00601138)}, {UINT32_C(0x0061EEA8), UINT32_C(0x00211689), UINT32_C(0x002EAEF4), UINT32_C(0x002EE6E9), UINT32_C(0x0042698F), UINT32_C(0x002C17BC), UINT32_C(0x00153303), UINT32_C(0x000EA9B7), UINT32_C(0x00335B95), UINT32_C(0x00101F4E), UINT32_C(0x00661849)}, {UINT32_C(0x00AEA3D6), UINT32_C(0x00406869), UINT32_C(0x00375EE9), UINT32_C(0x00D5E095), UINT32_C(0x00510487), UINT32_C(0x00425B84), UINT32_C(0x002933E8), UINT32_C(0x0085EA0B), UINT32_C(0x0036858A), UINT32_C(0x0015643E), UINT32_C(0x00291032)}}, {{UINT32_C(0x00B19259), UINT32_C(0x0044D63D), UINT32_C(0x000D8B2C), UINT32_C(0x00F03F2A), UINT32_C(0x0075DD51), UINT32_C(0x0063574F), UINT32_C(0x00597D0C), UINT32_C(0x004CC301), UINT32_C(0x0008F143), UINT32_C(0x001955D2), UINT32_C(0x000EFE67)}, {UINT32_C(0x0012F590), UINT32_C(0x0008204C), UINT32_C(0x007F0B91), UINT32_C(0x00397CAF), UINT32_C(0x00617872), UINT32_C(0x002BCC89), UINT32_C(0x00560BB9), UINT32_C(0x00755598), UINT32_C(0x006EECB1), UINT32_C(0x004BA0C7), UINT32_C(0x001A34AB)}, {UINT32_C(0x008528CC), UINT32_C(0x00580BBC), UINT32_C(0x005B25D1), UINT32_C(0x007506DD), UINT32_C(0x007DC690), UINT32_C(0x007F96D8), UINT32_C(0x00392289), UINT32_C(0x00AEF1AE), UINT32_C(0x0063168D), UINT32_C(0x0072BE2C), UINT32_C(0x005157C5)}}, {{UINT32_C(0x003A9FD2), UINT32_C(0x005B25BE), UINT32_C(0x004F27F7), UINT32_C(0x00BB4A51), UINT32_C(0x000662C0), UINT32_C(0x0041BBE0), UINT32_C(0x00460962), UINT32_C(0x002EF651), UINT32_C(0x0017689F), UINT32_C(0x00071079), UINT32_C(0x0001A5DF)}, {UINT32_C(0x00F75DF0), UINT32_C(0x0049FC9F), UINT32_C(0x006A8F37), UINT32_C(0x00C7015B), UINT32_C(0x001EE02F), UINT32_C(0x003A578B), UINT32_C(0x004F5B70), UINT32_C(0x0046D34E), UINT32_C(0x0036C503), UINT32_C(0x004A47A8), UINT32_C(0x001555FC)}, {UINT32_C(0x000C1A1C), UINT32_C(0x0018A095), UINT32_C(0x004C6DD3), UINT32_C(0x00622629), UINT32_C(0x001A4B4D), UINT32_C(0x001EC488), UINT32_C(0x007C4E62), UINT32_C(0x00F0CBDB), UINT32_C(0x0053F494), UINT32_C(0x0025E122), UINT32_C(0x006FE5D9)}}, {{UINT32_C(0x001D0B59), UINT32_C(0x002BC2EB), UINT32_C(0x006C247D), UINT32_C(0x0017164C), UINT32_C(0x0016C9E8), UINT32_C(0x003FE112), UINT32_C(0x00523C8C), UINT32_C(0x00500E55), UINT32_C(0x001EBD4A), UINT32_C(0x002663A4), UINT32_C(0x002FF15B)}, {UINT32_C(0x009AECD9), UINT32_C(0x00079901), UINT32_C(0x006A6241), UINT32_C(0x003D62B1), UINT32_C(0x006182F6), UINT32_C(0x001F7C9C), UINT32_C(0x0030C6A5), UINT32_C(0x00C1D9FD), UINT32_C(0x000AF3AE), UINT32_C(0x007306C0), UINT32_C(0x007180E7)}, {UINT32_C(0x0072CCE1), UINT32_C(0x002EF926), UINT32_C(0x0033946B), UINT32_C(0x00DD4125), UINT32_C(0x00466F98), UINT32_C(0x005626FE), UINT32_C(0x004D69F2), UINT32_C(0x00423C76), UINT32_C(0x0065D10D), UINT32_C(0x002D6287), UINT32_C(0x002DD36E)}}, {{UINT32_C(0x0060C004), UINT32_C(0x002DF8E2), UINT32_C(0x0073334C), UINT32_C(0x008C39C6), UINT32_C(0x00509B37), UINT32_C(0x007E8198), UINT32_C(0x000F62E1), UINT32_C(0x00DD92B1), UINT32_C(0x001998EC), UINT32_C(0x002CAD76), UINT32_C(0x00202123)}, {UINT32_C(0x00131346), UINT32_C(0x007A9FF0), UINT32_C(0x00587E28), UINT32_C(0x005434EA), UINT32_C(0x000C2CE8), UINT32_C(0x004B1B22), UINT32_C(0x0045D4A2), UINT32_C(0x009F60D4), UINT32_C(0x0057E546), UINT32_C(0x0064D05F), UINT32_C(0x006EEC72)}, {UINT32_C(0x0021F448), UINT32_C(0x0010845A), UINT32_C(0x0006B85E), UINT32_C(0x00AB9D0A), UINT32_C(0x0042FE06), UINT32_C(0x0033EE0E), UINT32_C(0x006AD2F2), UINT32_C(0x005C9579), UINT32_C(0x0067DFC7), UINT32_C(0x003C1F3B), UINT32_C(0x00699BE9)}}, {{UINT32_C(0x00A66972), UINT32_C(0x005C9C52), UINT32_C(0x0033F743), UINT32_C(0x002E4131), UINT32_C(0x0018DAB0), UINT32_C(0x00451021), UINT32_C(0x004A7644), UINT32_C(0x00280CE7), UINT32_C(0x0054A55B), UINT32_C(0x0000D618), UINT32_C(0x0006EA24)}, {UINT32_C(0x00836291), UINT32_C(0x005C23F3), UINT32_C(0x003EF835), UINT32_C(0x006B6300), UINT32_C(0x00459EBC), UINT32_C(0x007C3224), UINT32_C(0x0044102E), UINT32_C(0x00E2D759), UINT32_C(0x0058BA8F), UINT32_C(0x00203AA3), UINT32_C(0x006F64DB)}, {UINT32_C(0x00A80AE1), UINT32_C(0x0002F426), UINT32_C(0x005F82DF), UINT32_C(0x00129B98), UINT32_C(0x0016684F), UINT32_C(0x0037C9F8), UINT32_C(0x00798FDE), UINT32_C(0x005C8F79), UINT32_C(0x0007C718), UINT32_C(0x0052B29A), UINT32_C(0x00059CBE)}}, {{UINT32_C(0x00126A51), UINT32_C(0x002CB978), UINT32_C(0x00423FCC), UINT32_C(0x00B9CC4C), UINT32_C(0x002AA538), UINT32_C(0x00395FBB), UINT32_C(0x00327373), UINT32_C(0x00C23CA5), UINT32_C(0x00544D71), UINT32_C(0x00455CE2), UINT32_C(0x0077726F)}, {UINT32_C(0x00E72C58), UINT32_C(0x0056C6C9), UINT32_C(0x003D49ED), UINT32_C(0x00C8F1D2), UINT32_C(0x004A8FA5), UINT32_C(0x006F3C45), UINT32_C(0x0069AB18), UINT32_C(0x00D5CE81), UINT32_C(0x000A718F), UINT32_C(0x004420F7), UINT32_C(0x002B7F53)}, {UINT32_C(0x00809D3C), UINT32_C(0x005957A2), UINT32_C(0x006A3FB7), UINT32_C(0x00FC7710), UINT32_C(0x002F2CC5), UINT32_C(0x0068D0E3), UINT32_C(0x0017780D), UINT32_C(0x00B2B1F6), UINT32_C(0x001C4FDE), UINT32_C(0x0072D97A), UINT32_C(0x003E98AB)}}, {{UINT32_C(0x00276A10), UINT32_C(0x0064190E), UINT32_C(0x000243B5), UINT32_C(0x00EE59AE), UINT32_C(0x0016FC7F), UINT32_C(0x0036935E), UINT32_C(0x0058A7F7), UINT32_C(0x006AAA88), UINT32_C(0x0036ED90), UINT32_C(0x00779372), UINT32_C(0x0030DC06)}, {UINT32_C(0x00208159), UINT32_C(0x00170255), UINT32_C(0x00695DF5), UINT32_C(0x00411E22), UINT32_C(0x00477C68), UINT32_C(0x0032102F), UINT32_C(0x001B026A), UINT32_C(0x0038CA4D), UINT32_C(0x00235EC5), UINT32_C(0x0078C8B9), UINT32_C(0x00651C9F)}, {UINT32_C(0x0067D2A4), UINT32_C(0x00446632), UINT32_C(0x003D1074), UINT32_C(0x00032AC4), UINT32_C(0x0061127F), UINT32_C(0x0004B798), UINT32_C(0x00003C2D), UINT32_C(0x00F00C4B), UINT32_C(0x00603764), UINT32_C(0x0074558D), UINT32_C(0x00375BF7)}}, {{UINT32_C(0x00B4CE41), UINT32_C(0x007FBBC3), UINT32_C(0x00750477), UINT32_C(0x00DA8800), UINT32_C(0x000B20CD), UINT32_C(0x002FDE44), UINT32_C(0x0001448F), UINT32_C(0x001B1EE5), UINT32_C(0x003B0FDC), UINT32_C(0x00600D6A), UINT32_C(0x0042807B)}, {UINT32_C(0x005C7646), UINT32_C(0x004F6D9A), UINT32_C(0x0047B855), UINT32_C(0x003D2CEB), UINT32_C(0x007B2B58), UINT32_C(0x0032B9DA), UINT32_C(0x00118C1E), UINT32_C(0x006DA898), UINT32_C(0x00432BB2), UINT32_C(0x0014A742), UINT32_C(0x00214F42)}, {UINT32_C(0x0063536B), UINT32_C(0x0073EDC7), UINT32_C(0x00608DC1), UINT32_C(0x00757BDA), UINT32_C(0x0073293A), UINT32_C(0x00510B0D), UINT32_C(0x001C8A86), UINT32_C(0x00406F0A), UINT32_C(0x0030DAA7), UINT32_C(0x000F6F80), UINT32_C(0x0007A1D7)}}, {{UINT32_C(0x00A8E90B), UINT32_C(0x007407DB), UINT32_C(0x00440BF0), UINT32_C(0x007198C8), UINT32_C(0x001A09F8), UINT32_C(0x000916B3), UINT32_C(0x0061A7D6), UINT32_C(0x00A714BE), UINT32_C(0x0039589D), UINT32_C(0x0011D76D), UINT32_C(0x00323B2D)}, {UINT32_C(0x00E19A5C), UINT32_C(0x00141B92), UINT32_C(0x00409B73), UINT32_C(0x006F090B), UINT32_C(0x007E0865), UINT32_C(0x004B7DA7), UINT32_C(0x006EBE5E), UINT32_C(0x00CE6360), UINT32_C(0x003FE520), UINT32_C(0x005C6EFA), UINT32_C(0x002904A1)}, {UINT32_C(0x007BF307), UINT32_C(0x00095790), UINT32_C(0x0009FCE8), UINT32_C(0x001A0547), UINT32_C(0x001C1E57), UINT32_C(0x007C07EE), UINT32_C(0x00405EE9), UINT32_C(0x004047E0), UINT32_C(0x006DE98E), UINT32_C(0x004E2A25), UINT32_C(0x0066F1F0)}}, {{UINT32_C(0x00C266C9), UINT32_C(0x0078A6A6), UINT32_C(0x005AE507), UINT32_C(0x00029D74), UINT32_C(0x00025040), UINT32_C(0x004030CE), UINT32_C(0x006D0A48), UINT32_C(0x0076B699), UINT32_C(0x001E465B), UINT32_C(0x000082E1), UINT32_C(0x0069B738)}, {UINT32_C(0x00BD1302), UINT32_C(0x003CA015), UINT32_C(0x00107897), UINT32_C(0x00FA47BE), UINT32_C(0x0049E714), UINT32_C(0x000B1555), UINT32_C(0x0053443D), UINT32_C(0x00EE9331), UINT32_C(0x00514330), UINT32_C(0x0039A875), UINT32_C(0x00050473)}, {UINT32_C(0x00B3D5E2), UINT32_C(0x002E59A5), UINT32_C(0x00444307), UINT32_C(0x001495AA), UINT32_C(0x007E4455), UINT32_C(0x001E0A82), UINT32_C(0x002AB250), UINT32_C(0x003E1A5A), UINT32_C(0x000DB2A8), UINT32_C(0x0010A30C), UINT32_C(0x0032799B)}}, {{UINT32_C(0x002DFB8B), UINT32_C(0x0056DBFB), UINT32_C(0x0067D9E7), UINT32_C(0x007E49DF), UINT32_C(0x000D0A8B), UINT32_C(0x001D2692), UINT32_C(0x006D4621), UINT32_C(0x00D98598), UINT32_C(0x0034D873), UINT32_C(0x0021CBB4), UINT32_C(0x0075EBF4)}, {UINT32_C(0x00757E5C), UINT32_C(0x001F41CE), UINT32_C(0x002E6367), UINT32_C(0x00180064), UINT32_C(0x004FEBFE), UINT32_C(0x0004F8E5), UINT32_C(0x001FB594), UINT32_C(0x007471A5), UINT32_C(0x0060AE8E), UINT32_C(0x007B789E), UINT32_C(0x0072FBC1)}, {UINT32_C(0x00028861), UINT32_C(0x0076CF2E), UINT32_C(0x00757BC9), UINT32_C(0x00E1A580), UINT32_C(0x00355683), UINT32_C(0x002A8FE7), UINT32_C(0x00542152), UINT32_C(0x00561514), UINT32_C(0x00725460), UINT32_C(0x007285A9), UINT32_C(0x004B1809)}}, {{UINT32_C(0x00355837), UINT32_C(0x002DDA4C), UINT32_C(0x003DD1AC), UINT32_C(0x005CC538), UINT32_C(0x00647CBC), UINT32_C(0x0072DB88), UINT32_C(0x007F7C75), UINT32_C(0x002AE840), UINT32_C(0x00062A1A), UINT32_C(0x00518336), UINT32_C(0x00791C9D)}, {UINT32_C(0x0007CA0E), UINT32_C(0x002EA83D), UINT32_C(0x00794D8F), UINT32_C(0x0074F12E), UINT32_C(0x00573D80), UINT32_C(0x00334BAD), UINT32_C(0x007061C7), UINT32_C(0x00EC3EB0), UINT32_C(0x004AFF19), UINT32_C(0x007B77C6), UINT32_C(0x002C2CD6)}, {UINT32_C(0x00332C81), UINT32_C(0x005AEC4B), UINT32_C(0x002D4025), UINT32_C(0x000003C9), UINT32_C(0x00329780), UINT32_C(0x0045F540), UINT32_C(0x004B3238), UINT32_C(0x00A2B784), UINT32_C(0x001953EA), UINT32_C(0x00256030), UINT32_C(0x00398A20)}}, {{UINT32_C(0x000EC4A0), UINT32_C(0x00641937), UINT32_C(0x006B364E), UINT32_C(0x00DA64E5), UINT32_C(0x001DC048), UINT32_C(0x002583F4), UINT32_C(0x0026D1D9), UINT32_C(0x00EDA8AF), UINT32_C(0x0047D78B), UINT32_C(0x002EEFE4), UINT32_C(0x002CC316)}, {UINT32_C(0x0081CBB1), UINT32_C(0x006E1C62), UINT32_C(0x002FACAB), UINT32_C(0x00A6588F), UINT32_C(0x00250981), UINT32_C(0x0061708F), UINT32_C(0x0074479E), UINT32_C(0x003F3B34), UINT32_C(0x00140C2C), UINT32_C(0x002EBBC2), UINT32_C(0x00227AAF)}, {UINT32_C(0x00DB9FC3), UINT32_C(0x0053114A), UINT32_C(0x0052ECA2), UINT32_C(0x003DC40A), UINT32_C(0x007DC659), UINT32_C(0x000D3562), UINT32_C(0x002C373C), UINT32_C(0x00FAF2D6), UINT32_C(0x002B7888), UINT32_C(0x0056EFFE), UINT32_C(0x00162CF7)}}, {{UINT32_C(0x00A14EAC), UINT32_C(0x005D7C37), UINT32_C(0x002C818A), UINT32_C(0x008FB8CD), UINT32_C(0x0062E148), UINT32_C(0x004C3163), UINT32_C(0x0053D48D), UINT32_C(0x005823EA), UINT32_C(0x002D1D27), UINT32_C(0x00057B1E), UINT32_C(0x002C3DDA)}, {UINT32_C(0x0053A948), UINT32_C(0x004C6EF1), UINT32_C(0x002D74B8), UINT32_C(0x001219E4), UINT32_C(0x0071C013), UINT32_C(0x00262046), UINT32_C(0x00421ADF), UINT32_C(0x00BFB901), UINT32_C(0x001E79C9), UINT32_C(0x0035B45B), UINT32_C(0x0041AC61)}, {UINT32_C(0x002C184D), UINT32_C(0x0047D074), UINT32_C(0x0034003A), UINT32_C(0x005DCCFB), UINT32_C(0x00524D8F), UINT32_C(0x0059FB03), UINT32_C(0x0034304B), UINT32_C(0x00EACD9B), UINT32_C(0x002761FA), UINT32_C(0x003C9C64), UINT32_C(0x004B14DD)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj_ed_eone.op3 * https://www.hyperelliptic.org/EFD/g1p/auto-code/twisted/extended-1/doubling/dbl-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ /* set pointers for Edwards curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(t0, X); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(t1, Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(t2, Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(t3, t2, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(X3, X, Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(Y3, X3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(T3, Y3, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(Z3, T3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(Y3, t0, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t2, Y3, t3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t3, t0, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, Z3, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, Z3, t3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Z3, t2, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, Y3, t3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed_ed_eone.op3 * https://hyperelliptic.org/EFD/g1p/auto-code/twisted/extended/addition/madd-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ const limb_t *d = const_d; /* set pointers for Edwards curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *T1 = Q->T; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *T2 = P->T; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *T3 = R->T; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t2, d, T2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t2, T1, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(X3, X1, Y1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(Y3, X2, Y2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t3, T3, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(T3, t3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(t3, Z1, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(Z3, Z1, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t1, t1, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, T3, Z3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, t3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, T3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Z3, Z3, t3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj_ed_eone.op3 * https://hyperelliptic.org/EFD/g1p/auto-code/twisted/extended/addition/add-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ const limb_t *d = const_d; /* set pointers for Edwards curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *T1 = Q->T; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *T2 = P->T; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *T3 = R->T; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t2, d, T2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t2, T1, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t3, Z1, Z2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(X3, X1, Y1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(Y3, X2, Y2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(Z3, T3, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(T3, Z3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(Z3, t3, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(t3, t3, t2); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t1, t1, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, T3, Z3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, t3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, T3, t1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Z3, Z3, t3); } /*- * from P projective Edwards to Q projective legacy: Q=P OK * Autogenerated: op3/edwards2legacy_gost.op3 * https://tools.ietf.org/html/rfc7836#section-5.2 */ static void point_edwards2legacy(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0; /* constants */ const limb_t *S = const_S; const limb_t *T = const_T; const limb_t *X1 = P->X; const limb_t *Y1 = P->Y; const limb_t *Z1 = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(T3, Z1, Y1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(t0, Z1, Y1); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, S, T3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, Z1, T3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Z3, X1, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(t0, t0, T); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(t0, T3, t0); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, X1, t0); } /*- * from P affine legacy to Q projective Edwards: Q=P not OK * Autogenerated: op3/legacy2edwards_gost.op3 * https://tools.ietf.org/html/rfc7836#section-5.2 */ static void point_legacy2edwards(pt_prj_t *Q, const pt_aff_t *P) { /* constants */ const limb_t *S = const_S; const limb_t *T = const_T; const limb_t *X1 = P->X; const limb_t *Y1 = P->Y; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(T3, X1, T); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_add(Y3, T3, S); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, T3, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Z3, Y1, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_sub(T3, T3, S); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, Y1, T3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(Y3, Y3, Z3); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_square(Z3, Z3); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; /* move from legacy affine to Edwards projective */ point_legacy2edwards(&precomp[0], P); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[32], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 32) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[52], const unsigned char in[32]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 51; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[257], const unsigned char in[32]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 257; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[32], const unsigned char b[32], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[257] = {0}; int8_t bnaf[257] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 256; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.T, Q.T); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.T, &precomp[d].T); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.T, Q.T); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.T, &lut_cmb[0][d].T); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.T); fe_copy(Q.Z, const_one); } if (flipped) { /* correct sign */ fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(Q.T, Q.T); } /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_256_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[32], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[51] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.T, diff, Q.T, precomp[j].T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 50; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.T, diff, lut.T, precomp[j].T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(out->X, lut.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(out->T, lut.T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(lut.X, is_neg, lut.X, out->X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(lut.T, is_neg, lut.T, out->T); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(lut.X, precomp[0].X); fe_copy(lut.Y, precomp[0].Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(lut.T, precomp[0].T); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.T, scalar[0] & 1, lut.T, Q.T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); point_double(&Q, &Q); point_double(&Q, &Q); /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_256_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[32]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[52] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.T); fe_copy(Q.Z, const_one); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 3; i >= 0; i--) { for (j = 0; i != 3 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 14; j++) { if (j * 4 + i > 51) continue; d = rnaf[j * 4 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz( lut.T, diff, lut.T, lut_cmb[j][k].T); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(out->X, lut.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(out->T, lut.T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(lut.X, is_neg, lut.X, out->X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(lut.T, is_neg, lut.T, out->T); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(lut.X, lut_cmb[0][0].X); fe_copy(lut.Y, lut_cmb[0][0].Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_opp(lut.T, lut_cmb[0][0].T); point_add_mixed(&R, &Q, &lut); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.T, scalar[0] & 1, R.T, Q.T); fiat_id_tc26_gost_3410_2012_256_paramSetA_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_256_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_256_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[32], unsigned char outy[32], const unsigned char a[32], const unsigned char b[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes(P.Y, iny); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[32], unsigned char outy[32], const unsigned char scalar[32], const unsigned char inx[32], const unsigned char iny[32]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_256_paramSetA_from_bytes(P.Y, iny); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_256_paramSetA_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[32] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_tc26_gost_3410_2012_256_paramSetA( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(n, b_n, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_tc26_gost_3410_2012_256_paramSetA(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_m[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 32) != 32 || BN_bn2lebinpad(y, b_y, 32) != 32 || BN_bn2lebinpad(m, b_m, 32) != 32) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_tc26_gost_3410_2012_256_paramSetA(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[32]; unsigned char b_y[32]; unsigned char b_n[32]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 32) != 32) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 32) == 0 && CRYPTO_memcmp(const_zb, b_y, 32) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 32, x) == NULL || BN_lebin2bn(b_y, 32, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #endif /* __SIZEOF_INT128__ */ libengine-gost-openssl-3.0.2/ecp_id_tc26_gost_3410_2012_512_paramSetA.c000066400000000000000000023461511446070765000250500ustar00rootroot00000000000000/* Autogenerated: ECCKiila https://gitlab.com/nisec/ecckiila */ /*- * MIT License * * Copyright (c) 2020 Luis Rivera-Zamarripa, JesÃēs-Javier Chi-Domínguez, Billy Bob Brumley * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ #if defined(__SIZEOF_INT128__) && !defined(PEDANTIC) #include #include #define LIMB_BITS 64 #define LIMB_CNT 10 /* Field elements */ typedef uint64_t fe_t[LIMB_CNT]; typedef uint64_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETA_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) #define fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(c, a, b) \ fiat_id_tc26_gost_3410_2012_512_paramSetA_add(c, a, b); \ fiat_id_tc26_gost_3410_2012_512_paramSetA_carry(c, c) #define fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(c, a, b) \ fiat_id_tc26_gost_3410_2012_512_paramSetA_sub(c, a, b); \ fiat_id_tc26_gost_3410_2012_512_paramSetA_carry(c, c) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: unsaturated_solinas --static --use-value-barrier id_tc26_gost_3410_2012_512_paramSetA 64 '(auto)' '2^512 - 569' */ /* curve description: id_tc26_gost_3410_2012_512_paramSetA */ /* machine_wordsize = 64 (from "64") */ /* requested operations: (all) */ /* n = 10 (from "(auto)") */ /* s-c = 2^512 - [(1, 569)] (from "2^512 - 569") */ /* tight_bounds_multiplier = 1 (from "") */ /* */ /* Computed values: */ /* carry_chain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1] */ /* eval z = z[0] + (z[1] << 52) + (z[2] << 103) + (z[3] << 154) + (z[4] << 205) + (z[5] << 256) + (z[6] << 0x134) + (z[7] << 0x167) + (z[8] << 0x19a) + (z[9] << 0x1cd) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) + (z[56] << 0x1c0) + (z[57] << 0x1c8) + (z[58] << 0x1d0) + (z[59] << 0x1d8) + (z[60] << 0x1e0) + (z[61] << 0x1e8) + (z[62] << 0x1f0) + (z[63] << 0x1f8) */ /* balance = [0x1ffffffffffb8e, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0x1ffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe] */ #include typedef unsigned char fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1; typedef signed char fiat_id_tc26_gost_3410_2012_512_paramSetA_int1; typedef signed __int128 fiat_id_tc26_gost_3410_2012_512_paramSetA_int128; typedef unsigned __int128 fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETA_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint64_t fiat_id_tc26_gost_3410_2012_512_paramSetA_value_barrier_u64(uint64_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_tc26_gost_3410_2012_512_paramSetA_value_barrier_u64(x) (x) #endif /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u52 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^52 * out2 = ⌊(arg1 + arg2 + arg3) / 2^52⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xfffffffffffff] * arg3: [0x0 ~> 0xfffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xfffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u52( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, uint64_t arg2, uint64_t arg3) { uint64_t x1; uint64_t x2; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT64_C(0xfffffffffffff)); x3 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x1 >> 52); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u52 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^52 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^52⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xfffffffffffff] * arg3: [0x0 ~> 0xfffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xfffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u52( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, uint64_t arg2, uint64_t arg3) { int64_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetA_int1 x2; uint64_t x3; x1 = ((int64_t)(arg2 - (int64_t)arg1) - (int64_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_int1)(x1 >> 52); x3 = (x1 & UINT64_C(0xfffffffffffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u51 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^51 * out2 = ⌊(arg1 + arg2 + arg3) / 2^51⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7ffffffffffff] * arg3: [0x0 ~> 0x7ffffffffffff] * Output Bounds: * out1: [0x0 ~> 0x7ffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u51( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, uint64_t arg2, uint64_t arg3) { uint64_t x1; uint64_t x2; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT64_C(0x7ffffffffffff)); x3 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x1 >> 51); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u51 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^51 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^51⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7ffffffffffff] * arg3: [0x0 ~> 0x7ffffffffffff] * Output Bounds: * out1: [0x0 ~> 0x7ffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u51( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, uint64_t arg2, uint64_t arg3) { int64_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetA_int1 x2; uint64_t x3; x1 = ((int64_t)(arg2 - (int64_t)arg1) - (int64_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_int1)(x1 >> 51); x3 = (x1 & UINT64_C(0x7ffffffffffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x1; uint64_t x2; uint64_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); x3 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_value_barrier_u64(x2) & arg3) | (fiat_id_tc26_gost_3410_2012_512_paramSetA_value_barrier_u64((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul multiplies two field elements and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * arg2: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul( uint64_t out1[10], const uint64_t arg1[10], const uint64_t arg2[10]) { fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x1; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x2; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x3; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x4; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x5; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x6; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x7; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x8; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x9; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x10; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x11; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x12; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x13; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x14; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x15; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x16; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x17; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x18; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x19; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x20; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x21; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x22; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x23; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x24; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x25; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x26; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x27; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x28; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x29; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x30; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x31; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x32; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x33; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x34; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x35; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x36; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x37; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x38; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x39; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x40; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x41; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x42; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x43; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x44; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x45; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x46; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x47; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x48; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x49; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x50; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x51; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x52; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x53; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x54; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x55; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x56; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x57; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x58; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x59; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x60; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x61; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x62; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x63; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x64; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x65; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x66; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x67; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x68; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x69; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x70; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x71; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x72; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x73; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x74; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x75; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x76; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x77; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x78; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x79; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x80; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x81; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x82; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x83; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x84; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x85; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x86; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x87; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x88; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x89; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x90; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x91; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x92; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x93; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x94; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x95; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x96; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x97; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x98; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x99; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x100; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x101; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x102; uint64_t x103; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x104; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x105; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x106; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x107; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x108; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x109; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x110; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x111; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x112; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x113; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x114; uint64_t x115; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x116; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x117; uint64_t x118; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x119; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x120; uint64_t x121; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x122; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x123; uint64_t x124; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x125; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x126; uint64_t x127; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x128; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x129; uint64_t x130; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x131; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x132; uint64_t x133; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x134; uint64_t x135; uint64_t x136; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x137; uint64_t x138; uint64_t x139; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x140; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x141; uint64_t x142; uint64_t x143; uint64_t x144; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x145; uint64_t x146; uint64_t x147; x1 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * (arg2[9]))); x2 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * (arg2[8]))); x3 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * (arg2[7]))); x4 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * (arg2[6])) * 0x2)); x5 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * (arg2[5]))); x6 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * (arg2[4]))); x7 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * (arg2[3]))); x8 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * (arg2[2]))); x9 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * (arg2[1])) * 0x2)); x10 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * (arg2[9]))); x11 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * (arg2[8]))); x12 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * (arg2[7])) * 0x2)); x13 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * (arg2[6])) * 0x2)); x14 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * (arg2[5]))); x15 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * (arg2[4]))); x16 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * (arg2[3]))); x17 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * (arg2[2])) * 0x2)); x18 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * (arg2[9]))); x19 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * (arg2[8])) * 0x2)); x20 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * (arg2[7])) * 0x2)); x21 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * (arg2[6])) * 0x2)); x22 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * (arg2[5]))); x23 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * (arg2[4]))); x24 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * (arg2[3])) * 0x2)); x25 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (arg2[9])) * 0x2)); x26 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (arg2[8])) * 0x2)); x27 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (arg2[7])) * 0x2)); x28 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (arg2[6])) * 0x2)); x29 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (arg2[5]))); x30 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (arg2[4])) * 0x2)); x31 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * (arg2[9]))); x32 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * (arg2[8]))); x33 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * (arg2[7]))); x34 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * (arg2[6]))); x35 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * (arg2[5]))); x36 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (arg2[9]))); x37 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (arg2[8]))); x38 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (arg2[7]))); x39 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (arg2[6])) * 0x2)); x40 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * (arg2[9]))); x41 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * (arg2[8]))); x42 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * (arg2[7])) * 0x2)); x43 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * (arg2[9]))); x44 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * (arg2[8])) * 0x2)); x45 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * (arg2[9])) * 0x2)); x46 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * (arg2[0])); x47 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * ((arg2[1]) * 0x2)); x48 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * (arg2[0])); x49 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * ((arg2[2]) * 0x2)); x50 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * ((arg2[1]) * 0x2)); x51 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * (arg2[0])); x52 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * ((arg2[3]) * 0x2)); x53 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * ((arg2[2]) * 0x2)); x54 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * ((arg2[1]) * 0x2)); x55 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (arg2[0])); x56 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * (arg2[4])); x57 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * (arg2[3])); x58 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * (arg2[2])); x59 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * (arg2[1])); x60 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * (arg2[0])); x61 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (arg2[5])); x62 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (arg2[4])); x63 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (arg2[3])); x64 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (arg2[2])); x65 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * ((arg2[1]) * 0x2)); x66 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (arg2[0])); x67 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * ((arg2[6]) * 0x2)); x68 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * (arg2[5])); x69 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * (arg2[4])); x70 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * (arg2[3])); x71 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * ((arg2[2]) * 0x2)); x72 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * ((arg2[1]) * 0x2)); x73 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * (arg2[0])); x74 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * ((arg2[7]) * 0x2)); x75 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * ((arg2[6]) * 0x2)); x76 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * (arg2[5])); x77 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * (arg2[4])); x78 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * ((arg2[3]) * 0x2)); x79 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * ((arg2[2]) * 0x2)); x80 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * ((arg2[1]) * 0x2)); x81 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * (arg2[0])); x82 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * ((arg2[8]) * 0x2)); x83 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * ((arg2[7]) * 0x2)); x84 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * ((arg2[6]) * 0x2)); x85 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * (arg2[5])); x86 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * ((arg2[4]) * 0x2)); x87 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * ((arg2[3]) * 0x2)); x88 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * ((arg2[2]) * 0x2)); x89 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * ((arg2[1]) * 0x2)); x90 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * (arg2[0])); x91 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg2[9])); x92 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg2[8])); x93 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg2[7])); x94 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg2[6])); x95 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg2[5])); x96 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg2[4])); x97 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg2[3])); x98 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg2[2])); x99 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg2[1])); x100 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg2[0])); x101 = (x100 + (x45 + (x44 + (x42 + (x39 + (x35 + (x30 + (x24 + (x17 + x9))))))))); x102 = (x101 >> 52); x103 = (uint64_t)(x101 & UINT64_C(0xfffffffffffff)); x104 = (x91 + (x82 + (x74 + (x67 + (x61 + (x56 + (x52 + (x49 + (x47 + x46))))))))); x105 = (x92 + (x83 + (x75 + (x68 + (x62 + (x57 + (x53 + (x50 + (x48 + x1))))))))); x106 = (x93 + (x84 + (x76 + (x69 + (x63 + (x58 + (x54 + (x51 + (x10 + x2))))))))); x107 = (x94 + (x85 + (x77 + (x70 + (x64 + (x59 + (x55 + (x18 + (x11 + x3))))))))); x108 = (x95 + (x86 + (x78 + (x71 + (x65 + (x60 + (x25 + (x19 + (x12 + x4))))))))); x109 = (x96 + (x87 + (x79 + (x72 + (x66 + (x31 + (x26 + (x20 + (x13 + x5))))))))); x110 = (x97 + (x88 + (x80 + (x73 + (x36 + (x32 + (x27 + (x21 + (x14 + x6))))))))); x111 = (x98 + (x89 + (x81 + (x40 + (x37 + (x33 + (x28 + (x22 + (x15 + x7))))))))); x112 = (x99 + (x90 + (x43 + (x41 + (x38 + (x34 + (x29 + (x23 + (x16 + x8))))))))); x113 = (x102 + x112); x114 = (x113 >> 51); x115 = (uint64_t)(x113 & UINT64_C(0x7ffffffffffff)); x116 = (x114 + x111); x117 = (x116 >> 51); x118 = (uint64_t)(x116 & UINT64_C(0x7ffffffffffff)); x119 = (x117 + x110); x120 = (x119 >> 51); x121 = (uint64_t)(x119 & UINT64_C(0x7ffffffffffff)); x122 = (x120 + x109); x123 = (x122 >> 51); x124 = (uint64_t)(x122 & UINT64_C(0x7ffffffffffff)); x125 = (x123 + x108); x126 = (x125 >> 52); x127 = (uint64_t)(x125 & UINT64_C(0xfffffffffffff)); x128 = (x126 + x107); x129 = (x128 >> 51); x130 = (uint64_t)(x128 & UINT64_C(0x7ffffffffffff)); x131 = (x129 + x106); x132 = (x131 >> 51); x133 = (uint64_t)(x131 & UINT64_C(0x7ffffffffffff)); x134 = (x132 + x105); x135 = (uint64_t)(x134 >> 51); x136 = (uint64_t)(x134 & UINT64_C(0x7ffffffffffff)); x137 = (x135 + x104); x138 = (uint64_t)(x137 >> 51); x139 = (uint64_t)(x137 & UINT64_C(0x7ffffffffffff)); x140 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)UINT16_C(0x239) * x138); x141 = (x103 + x140); x142 = (uint64_t)(x141 >> 52); x143 = (uint64_t)(x141 & UINT64_C(0xfffffffffffff)); x144 = (x142 + x115); x145 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x144 >> 51); x146 = (x144 & UINT64_C(0x7ffffffffffff)); x147 = (x145 + x118); out1[0] = x143; out1[1] = x146; out1[2] = x147; out1[3] = x121; out1[4] = x124; out1[5] = x127; out1[6] = x130; out1[7] = x133; out1[8] = x136; out1[9] = x139; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square squares a field element and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg1) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square( uint64_t out1[10], const uint64_t arg1[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x19; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x20; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x21; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x22; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x23; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x24; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x25; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x26; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x27; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x28; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x29; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x30; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x31; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x32; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x33; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x34; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x35; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x36; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x37; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x38; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x39; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x40; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x41; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x42; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x43; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x44; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x45; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x46; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x47; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x48; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x49; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x50; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x51; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x52; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x53; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x54; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x55; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x56; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x57; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x58; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x59; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x60; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x61; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x62; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x63; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x64; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x65; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x66; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x67; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x68; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x69; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x70; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x71; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x72; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x73; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x74; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x75; uint64_t x76; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x77; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x78; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x79; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x80; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x81; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x82; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x83; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x84; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x85; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x86; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x87; uint64_t x88; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x89; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x90; uint64_t x91; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x92; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x93; uint64_t x94; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x95; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x96; uint64_t x97; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x98; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x99; uint64_t x100; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x101; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x102; uint64_t x103; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x104; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x105; uint64_t x106; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x107; uint64_t x108; uint64_t x109; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x110; uint64_t x111; uint64_t x112; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x113; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128 x114; uint64_t x115; uint64_t x116; uint64_t x117; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x118; uint64_t x119; uint64_t x120; x1 = ((arg1[9]) * UINT16_C(0x239)); x2 = (x1 * 0x2); x3 = ((arg1[9]) * 0x2); x4 = ((arg1[8]) * UINT16_C(0x239)); x5 = (x4 * 0x2); x6 = ((arg1[8]) * 0x2); x7 = ((arg1[7]) * UINT16_C(0x239)); x8 = (x7 * 0x2); x9 = ((arg1[7]) * 0x2); x10 = ((arg1[6]) * UINT16_C(0x239)); x11 = (x10 * 0x2); x12 = ((arg1[6]) * 0x2); x13 = ((arg1[5]) * UINT16_C(0x239)); x14 = ((arg1[5]) * 0x2); x15 = ((arg1[4]) * 0x2); x16 = ((arg1[3]) * 0x2); x17 = ((arg1[2]) * 0x2); x18 = ((arg1[1]) * 0x2); x19 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[9]) * x1); x20 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * x2); x21 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[8]) * x4); x22 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * x2); x23 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * (x5 * 0x2)); x24 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[7]) * (x7 * 0x2)); x25 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (x2 * 0x2)); x26 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (x5 * 0x2)); x27 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (x8 * 0x2)); x28 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[6]) * (x10 * 0x2)); x29 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * x2); x30 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * x5); x31 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * x8); x32 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * x11); x33 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[5]) * x13); x34 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * x2); x35 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * x5); x36 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * x8); x37 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (x11 * 0x2)); x38 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * x14); x39 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[4]) * (arg1[4])); x40 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * x2); x41 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * x5); x42 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * (x8 * 0x2)); x43 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * (x12 * 0x2)); x44 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * x14); x45 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * x15); x46 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[3]) * (arg1[3])); x47 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * x2); x48 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * (x5 * 0x2)); x49 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * (x9 * 0x2)); x50 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * (x12 * 0x2)); x51 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * x14); x52 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * x15); x53 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * (x16 * 0x2)); x54 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[2]) * ((arg1[2]) * 0x2)); x55 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * (x2 * 0x2)); x56 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * (x6 * 0x2)); x57 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * (x9 * 0x2)); x58 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * (x12 * 0x2)); x59 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * x14); x60 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * (x15 * 0x2)); x61 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * (x16 * 0x2)); x62 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * (x17 * 0x2)); x63 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[1]) * ((arg1[1]) * 0x2)); x64 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * x3); x65 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * x6); x66 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * x9); x67 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * x12); x68 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * x14); x69 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * x15); x70 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * x16); x71 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * x17); x72 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * x18); x73 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)(arg1[0]) * (arg1[0])); x74 = (x73 + (x55 + (x48 + (x42 + (x37 + x33))))); x75 = (x74 >> 52); x76 = (uint64_t)(x74 & UINT64_C(0xfffffffffffff)); x77 = (x64 + (x56 + (x49 + (x43 + x38)))); x78 = (x65 + (x57 + (x50 + (x44 + (x39 + x19))))); x79 = (x66 + (x58 + (x51 + (x45 + x20)))); x80 = (x67 + (x59 + (x52 + (x46 + (x22 + x21))))); x81 = (x68 + (x60 + (x53 + (x25 + x23)))); x82 = (x69 + (x61 + (x54 + (x29 + (x26 + x24))))); x83 = (x70 + (x62 + (x34 + (x30 + x27)))); x84 = (x71 + (x63 + (x40 + (x35 + (x31 + x28))))); x85 = (x72 + (x47 + (x41 + (x36 + x32)))); x86 = (x75 + x85); x87 = (x86 >> 51); x88 = (uint64_t)(x86 & UINT64_C(0x7ffffffffffff)); x89 = (x87 + x84); x90 = (x89 >> 51); x91 = (uint64_t)(x89 & UINT64_C(0x7ffffffffffff)); x92 = (x90 + x83); x93 = (x92 >> 51); x94 = (uint64_t)(x92 & UINT64_C(0x7ffffffffffff)); x95 = (x93 + x82); x96 = (x95 >> 51); x97 = (uint64_t)(x95 & UINT64_C(0x7ffffffffffff)); x98 = (x96 + x81); x99 = (x98 >> 52); x100 = (uint64_t)(x98 & UINT64_C(0xfffffffffffff)); x101 = (x99 + x80); x102 = (x101 >> 51); x103 = (uint64_t)(x101 & UINT64_C(0x7ffffffffffff)); x104 = (x102 + x79); x105 = (x104 >> 51); x106 = (uint64_t)(x104 & UINT64_C(0x7ffffffffffff)); x107 = (x105 + x78); x108 = (uint64_t)(x107 >> 51); x109 = (uint64_t)(x107 & UINT64_C(0x7ffffffffffff)); x110 = (x108 + x77); x111 = (uint64_t)(x110 >> 51); x112 = (uint64_t)(x110 & UINT64_C(0x7ffffffffffff)); x113 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint128)UINT16_C(0x239) * x111); x114 = (x76 + x113); x115 = (uint64_t)(x114 >> 52); x116 = (uint64_t)(x114 & UINT64_C(0xfffffffffffff)); x117 = (x115 + x88); x118 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x117 >> 51); x119 = (x117 & UINT64_C(0x7ffffffffffff)); x120 = (x118 + x91); out1[0] = x116; out1[1] = x119; out1[2] = x120; out1[3] = x94; out1[4] = x97; out1[5] = x100; out1[6] = x103; out1[7] = x106; out1[8] = x109; out1[9] = x112; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_carry reduces a field element. * Postconditions: * eval out1 mod m = eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_carry( uint64_t out1[10], const uint64_t arg1[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; x1 = (arg1[0]); x2 = ((x1 >> 52) + (arg1[1])); x3 = ((x2 >> 51) + (arg1[2])); x4 = ((x3 >> 51) + (arg1[3])); x5 = ((x4 >> 51) + (arg1[4])); x6 = ((x5 >> 51) + (arg1[5])); x7 = ((x6 >> 52) + (arg1[6])); x8 = ((x7 >> 51) + (arg1[7])); x9 = ((x8 >> 51) + (arg1[8])); x10 = ((x9 >> 51) + (arg1[9])); x11 = ((x1 & UINT64_C(0xfffffffffffff)) + (UINT16_C(0x239) * (x10 >> 51))); x12 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x11 >> 52) + (x2 & UINT64_C(0x7ffffffffffff))); x13 = (x11 & UINT64_C(0xfffffffffffff)); x14 = (x12 & UINT64_C(0x7ffffffffffff)); x15 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x12 >> 51) + (x3 & UINT64_C(0x7ffffffffffff))); x16 = (x4 & UINT64_C(0x7ffffffffffff)); x17 = (x5 & UINT64_C(0x7ffffffffffff)); x18 = (x6 & UINT64_C(0xfffffffffffff)); x19 = (x7 & UINT64_C(0x7ffffffffffff)); x20 = (x8 & UINT64_C(0x7ffffffffffff)); x21 = (x9 & UINT64_C(0x7ffffffffffff)); x22 = (x10 & UINT64_C(0x7ffffffffffff)); out1[0] = x13; out1[1] = x14; out1[2] = x15; out1[3] = x16; out1[4] = x17; out1[5] = x18; out1[6] = x19; out1[7] = x20; out1[8] = x21; out1[9] = x22; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_add adds two field elements. * Postconditions: * eval out1 mod m = (eval arg1 + eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * arg2: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_add( uint64_t out1[10], const uint64_t arg1[10], const uint64_t arg2[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; x1 = ((arg1[0]) + (arg2[0])); x2 = ((arg1[1]) + (arg2[1])); x3 = ((arg1[2]) + (arg2[2])); x4 = ((arg1[3]) + (arg2[3])); x5 = ((arg1[4]) + (arg2[4])); x6 = ((arg1[5]) + (arg2[5])); x7 = ((arg1[6]) + (arg2[6])); x8 = ((arg1[7]) + (arg2[7])); x9 = ((arg1[8]) + (arg2[8])); x10 = ((arg1[9]) + (arg2[9])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_sub subtracts two field elements. * Postconditions: * eval out1 mod m = (eval arg1 - eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * arg2: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_sub( uint64_t out1[10], const uint64_t arg1[10], const uint64_t arg2[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; x1 = ((UINT64_C(0x1ffffffffffb8e) + (arg1[0])) - (arg2[0])); x2 = ((UINT64_C(0xffffffffffffe) + (arg1[1])) - (arg2[1])); x3 = ((UINT64_C(0xffffffffffffe) + (arg1[2])) - (arg2[2])); x4 = ((UINT64_C(0xffffffffffffe) + (arg1[3])) - (arg2[3])); x5 = ((UINT64_C(0xffffffffffffe) + (arg1[4])) - (arg2[4])); x6 = ((UINT64_C(0x1ffffffffffffe) + (arg1[5])) - (arg2[5])); x7 = ((UINT64_C(0xffffffffffffe) + (arg1[6])) - (arg2[6])); x8 = ((UINT64_C(0xffffffffffffe) + (arg1[7])) - (arg2[7])); x9 = ((UINT64_C(0xffffffffffffe) + (arg1[8])) - (arg2[8])); x10 = ((UINT64_C(0xffffffffffffe) + (arg1[9])) - (arg2[9])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_opp negates a field element. * Postconditions: * eval out1 mod m = -eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_opp( uint64_t out1[10], const uint64_t arg1[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; x1 = (UINT64_C(0x1ffffffffffb8e) - (arg1[0])); x2 = (UINT64_C(0xffffffffffffe) - (arg1[1])); x3 = (UINT64_C(0xffffffffffffe) - (arg1[2])); x4 = (UINT64_C(0xffffffffffffe) - (arg1[3])); x5 = (UINT64_C(0xffffffffffffe) - (arg1[4])); x6 = (UINT64_C(0x1ffffffffffffe) - (arg1[5])); x7 = (UINT64_C(0xffffffffffffe) - (arg1[6])); x8 = (UINT64_C(0xffffffffffffe) - (arg1[7])); x9 = (UINT64_C(0xffffffffffffe) - (arg1[8])); x10 = (UINT64_C(0xffffffffffffe) - (arg1[9])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( uint64_t out1[10], fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, const uint64_t arg2[10], const uint64_t arg3[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64(&x5, arg1, (arg2[4]), (arg3[4])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64(&x6, arg1, (arg2[5]), (arg3[5])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64(&x7, arg1, (arg2[6]), (arg3[6])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64(&x8, arg1, (arg2[7]), (arg3[7])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64(&x9, arg1, (arg2[8]), (arg3[8])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64(&x10, arg1, (arg2[9]), (arg3[9])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes serializes a field element to bytes in little-endian order. * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..63] * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes( uint8_t out1[64], const uint64_t arg1[10]) { uint64_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x2; uint64_t x3; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x4; uint64_t x5; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x6; uint64_t x7; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x8; uint64_t x9; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x10; uint64_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x12; uint64_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x14; uint64_t x15; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x16; uint64_t x17; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x18; uint64_t x19; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x20; uint64_t x21; uint64_t x22; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x23; uint64_t x24; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x25; uint64_t x26; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x27; uint64_t x28; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x29; uint64_t x30; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x31; uint64_t x32; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x33; uint64_t x34; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x35; uint64_t x36; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x37; uint64_t x38; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x39; uint64_t x40; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint8_t x50; uint64_t x51; uint8_t x52; uint64_t x53; uint8_t x54; uint64_t x55; uint8_t x56; uint64_t x57; uint8_t x58; uint64_t x59; uint8_t x60; uint8_t x61; uint64_t x62; uint8_t x63; uint64_t x64; uint8_t x65; uint64_t x66; uint8_t x67; uint64_t x68; uint8_t x69; uint64_t x70; uint8_t x71; uint64_t x72; uint8_t x73; uint8_t x74; uint64_t x75; uint8_t x76; uint64_t x77; uint8_t x78; uint64_t x79; uint8_t x80; uint64_t x81; uint8_t x82; uint64_t x83; uint8_t x84; uint64_t x85; uint8_t x86; uint64_t x87; uint8_t x88; uint8_t x89; uint64_t x90; uint8_t x91; uint64_t x92; uint8_t x93; uint64_t x94; uint8_t x95; uint64_t x96; uint8_t x97; uint64_t x98; uint8_t x99; uint64_t x100; uint8_t x101; uint8_t x102; uint64_t x103; uint8_t x104; uint64_t x105; uint8_t x106; uint64_t x107; uint8_t x108; uint64_t x109; uint8_t x110; uint64_t x111; uint8_t x112; uint64_t x113; uint8_t x114; uint8_t x115; uint8_t x116; uint64_t x117; uint8_t x118; uint64_t x119; uint8_t x120; uint64_t x121; uint8_t x122; uint64_t x123; uint8_t x124; uint64_t x125; uint8_t x126; uint8_t x127; uint64_t x128; uint8_t x129; uint64_t x130; uint8_t x131; uint64_t x132; uint8_t x133; uint64_t x134; uint8_t x135; uint64_t x136; uint8_t x137; uint64_t x138; uint8_t x139; uint8_t x140; uint64_t x141; uint8_t x142; uint64_t x143; uint8_t x144; uint64_t x145; uint8_t x146; uint64_t x147; uint8_t x148; uint64_t x149; uint8_t x150; uint64_t x151; uint8_t x152; uint64_t x153; uint8_t x154; uint8_t x155; uint64_t x156; uint8_t x157; uint64_t x158; uint8_t x159; uint64_t x160; uint8_t x161; uint64_t x162; uint8_t x163; uint64_t x164; uint8_t x165; uint64_t x166; uint8_t x167; uint8_t x168; uint64_t x169; uint8_t x170; uint64_t x171; uint8_t x172; uint64_t x173; uint8_t x174; uint64_t x175; uint8_t x176; uint64_t x177; uint8_t x178; uint64_t x179; uint8_t x180; uint8_t x181; fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u52( &x1, &x2, 0x0, (arg1[0]), UINT64_C(0xffffffffffdc7)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u51( &x3, &x4, x2, (arg1[1]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u51( &x5, &x6, x4, (arg1[2]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u51( &x7, &x8, x6, (arg1[3]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u51( &x9, &x10, x8, (arg1[4]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u52( &x11, &x12, x10, (arg1[5]), UINT64_C(0xfffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u51( &x13, &x14, x12, (arg1[6]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u51( &x15, &x16, x14, (arg1[7]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u51( &x17, &x18, x16, (arg1[8]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u51( &x19, &x20, x18, (arg1[9]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u64( &x21, x20, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u52( &x22, &x23, 0x0, x1, (x21 & UINT64_C(0xffffffffffdc7))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u51( &x24, &x25, x23, x3, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u51( &x26, &x27, x25, x5, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u51( &x28, &x29, x27, x7, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u51( &x30, &x31, x29, x9, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u52( &x32, &x33, x31, x11, (x21 & UINT64_C(0xfffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u51( &x34, &x35, x33, x13, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u51( &x36, &x37, x35, x15, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u51( &x38, &x39, x37, x17, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u51( &x40, &x41, x39, x19, (x21 & UINT64_C(0x7ffffffffffff))); x42 = (x40 << 5); x43 = (x38 << 2); x44 = (x36 << 7); x45 = (x34 << 4); x46 = (x30 << 5); x47 = (x28 << 2); x48 = (x26 << 7); x49 = (x24 << 4); x50 = (uint8_t)(x22 & UINT8_C(0xff)); x51 = (x22 >> 8); x52 = (uint8_t)(x51 & UINT8_C(0xff)); x53 = (x51 >> 8); x54 = (uint8_t)(x53 & UINT8_C(0xff)); x55 = (x53 >> 8); x56 = (uint8_t)(x55 & UINT8_C(0xff)); x57 = (x55 >> 8); x58 = (uint8_t)(x57 & UINT8_C(0xff)); x59 = (x57 >> 8); x60 = (uint8_t)(x59 & UINT8_C(0xff)); x61 = (uint8_t)(x59 >> 8); x62 = (x49 + (uint64_t)x61); x63 = (uint8_t)(x62 & UINT8_C(0xff)); x64 = (x62 >> 8); x65 = (uint8_t)(x64 & UINT8_C(0xff)); x66 = (x64 >> 8); x67 = (uint8_t)(x66 & UINT8_C(0xff)); x68 = (x66 >> 8); x69 = (uint8_t)(x68 & UINT8_C(0xff)); x70 = (x68 >> 8); x71 = (uint8_t)(x70 & UINT8_C(0xff)); x72 = (x70 >> 8); x73 = (uint8_t)(x72 & UINT8_C(0xff)); x74 = (uint8_t)(x72 >> 8); x75 = (x48 + (uint64_t)x74); x76 = (uint8_t)(x75 & UINT8_C(0xff)); x77 = (x75 >> 8); x78 = (uint8_t)(x77 & UINT8_C(0xff)); x79 = (x77 >> 8); x80 = (uint8_t)(x79 & UINT8_C(0xff)); x81 = (x79 >> 8); x82 = (uint8_t)(x81 & UINT8_C(0xff)); x83 = (x81 >> 8); x84 = (uint8_t)(x83 & UINT8_C(0xff)); x85 = (x83 >> 8); x86 = (uint8_t)(x85 & UINT8_C(0xff)); x87 = (x85 >> 8); x88 = (uint8_t)(x87 & UINT8_C(0xff)); x89 = (uint8_t)(x87 >> 8); x90 = (x47 + (uint64_t)x89); x91 = (uint8_t)(x90 & UINT8_C(0xff)); x92 = (x90 >> 8); x93 = (uint8_t)(x92 & UINT8_C(0xff)); x94 = (x92 >> 8); x95 = (uint8_t)(x94 & UINT8_C(0xff)); x96 = (x94 >> 8); x97 = (uint8_t)(x96 & UINT8_C(0xff)); x98 = (x96 >> 8); x99 = (uint8_t)(x98 & UINT8_C(0xff)); x100 = (x98 >> 8); x101 = (uint8_t)(x100 & UINT8_C(0xff)); x102 = (uint8_t)(x100 >> 8); x103 = (x46 + (uint64_t)x102); x104 = (uint8_t)(x103 & UINT8_C(0xff)); x105 = (x103 >> 8); x106 = (uint8_t)(x105 & UINT8_C(0xff)); x107 = (x105 >> 8); x108 = (uint8_t)(x107 & UINT8_C(0xff)); x109 = (x107 >> 8); x110 = (uint8_t)(x109 & UINT8_C(0xff)); x111 = (x109 >> 8); x112 = (uint8_t)(x111 & UINT8_C(0xff)); x113 = (x111 >> 8); x114 = (uint8_t)(x113 & UINT8_C(0xff)); x115 = (uint8_t)(x113 >> 8); x116 = (uint8_t)(x32 & UINT8_C(0xff)); x117 = (x32 >> 8); x118 = (uint8_t)(x117 & UINT8_C(0xff)); x119 = (x117 >> 8); x120 = (uint8_t)(x119 & UINT8_C(0xff)); x121 = (x119 >> 8); x122 = (uint8_t)(x121 & UINT8_C(0xff)); x123 = (x121 >> 8); x124 = (uint8_t)(x123 & UINT8_C(0xff)); x125 = (x123 >> 8); x126 = (uint8_t)(x125 & UINT8_C(0xff)); x127 = (uint8_t)(x125 >> 8); x128 = (x45 + (uint64_t)x127); x129 = (uint8_t)(x128 & UINT8_C(0xff)); x130 = (x128 >> 8); x131 = (uint8_t)(x130 & UINT8_C(0xff)); x132 = (x130 >> 8); x133 = (uint8_t)(x132 & UINT8_C(0xff)); x134 = (x132 >> 8); x135 = (uint8_t)(x134 & UINT8_C(0xff)); x136 = (x134 >> 8); x137 = (uint8_t)(x136 & UINT8_C(0xff)); x138 = (x136 >> 8); x139 = (uint8_t)(x138 & UINT8_C(0xff)); x140 = (uint8_t)(x138 >> 8); x141 = (x44 + (uint64_t)x140); x142 = (uint8_t)(x141 & UINT8_C(0xff)); x143 = (x141 >> 8); x144 = (uint8_t)(x143 & UINT8_C(0xff)); x145 = (x143 >> 8); x146 = (uint8_t)(x145 & UINT8_C(0xff)); x147 = (x145 >> 8); x148 = (uint8_t)(x147 & UINT8_C(0xff)); x149 = (x147 >> 8); x150 = (uint8_t)(x149 & UINT8_C(0xff)); x151 = (x149 >> 8); x152 = (uint8_t)(x151 & UINT8_C(0xff)); x153 = (x151 >> 8); x154 = (uint8_t)(x153 & UINT8_C(0xff)); x155 = (uint8_t)(x153 >> 8); x156 = (x43 + (uint64_t)x155); x157 = (uint8_t)(x156 & UINT8_C(0xff)); x158 = (x156 >> 8); x159 = (uint8_t)(x158 & UINT8_C(0xff)); x160 = (x158 >> 8); x161 = (uint8_t)(x160 & UINT8_C(0xff)); x162 = (x160 >> 8); x163 = (uint8_t)(x162 & UINT8_C(0xff)); x164 = (x162 >> 8); x165 = (uint8_t)(x164 & UINT8_C(0xff)); x166 = (x164 >> 8); x167 = (uint8_t)(x166 & UINT8_C(0xff)); x168 = (uint8_t)(x166 >> 8); x169 = (x42 + (uint64_t)x168); x170 = (uint8_t)(x169 & UINT8_C(0xff)); x171 = (x169 >> 8); x172 = (uint8_t)(x171 & UINT8_C(0xff)); x173 = (x171 >> 8); x174 = (uint8_t)(x173 & UINT8_C(0xff)); x175 = (x173 >> 8); x176 = (uint8_t)(x175 & UINT8_C(0xff)); x177 = (x175 >> 8); x178 = (uint8_t)(x177 & UINT8_C(0xff)); x179 = (x177 >> 8); x180 = (uint8_t)(x179 & UINT8_C(0xff)); x181 = (uint8_t)(x179 >> 8); out1[0] = x50; out1[1] = x52; out1[2] = x54; out1[3] = x56; out1[4] = x58; out1[5] = x60; out1[6] = x63; out1[7] = x65; out1[8] = x67; out1[9] = x69; out1[10] = x71; out1[11] = x73; out1[12] = x76; out1[13] = x78; out1[14] = x80; out1[15] = x82; out1[16] = x84; out1[17] = x86; out1[18] = x88; out1[19] = x91; out1[20] = x93; out1[21] = x95; out1[22] = x97; out1[23] = x99; out1[24] = x101; out1[25] = x104; out1[26] = x106; out1[27] = x108; out1[28] = x110; out1[29] = x112; out1[30] = x114; out1[31] = x115; out1[32] = x116; out1[33] = x118; out1[34] = x120; out1[35] = x122; out1[36] = x124; out1[37] = x126; out1[38] = x129; out1[39] = x131; out1[40] = x133; out1[41] = x135; out1[42] = x137; out1[43] = x139; out1[44] = x142; out1[45] = x144; out1[46] = x146; out1[47] = x148; out1[48] = x150; out1[49] = x152; out1[50] = x154; out1[51] = x157; out1[52] = x159; out1[53] = x161; out1[54] = x163; out1[55] = x165; out1[56] = x167; out1[57] = x170; out1[58] = x172; out1[59] = x174; out1[60] = x176; out1[61] = x178; out1[62] = x180; out1[63] = x181; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes deserializes a field element from bytes in little-endian order. * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes( uint64_t out1[10], const uint8_t arg1[64]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint8_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint8_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint8_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint8_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint8_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; uint64_t x110; uint8_t x111; uint64_t x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint8_t x128; uint64_t x129; uint64_t x130; uint64_t x131; uint64_t x132; uint64_t x133; uint64_t x134; uint64_t x135; uint8_t x136; uint64_t x137; uint64_t x138; uint64_t x139; uint64_t x140; uint64_t x141; uint64_t x142; x1 = ((uint64_t)(arg1[63]) << 43); x2 = ((uint64_t)(arg1[62]) << 35); x3 = ((uint64_t)(arg1[61]) << 27); x4 = ((uint64_t)(arg1[60]) << 19); x5 = ((uint64_t)(arg1[59]) << 11); x6 = ((uint64_t)(arg1[58]) << 3); x7 = ((uint64_t)(arg1[57]) << 46); x8 = ((uint64_t)(arg1[56]) << 38); x9 = ((uint64_t)(arg1[55]) << 30); x10 = ((uint64_t)(arg1[54]) << 22); x11 = ((uint64_t)(arg1[53]) << 14); x12 = ((uint64_t)(arg1[52]) << 6); x13 = ((uint64_t)(arg1[51]) << 49); x14 = ((uint64_t)(arg1[50]) << 41); x15 = ((uint64_t)(arg1[49]) << 33); x16 = ((uint64_t)(arg1[48]) << 25); x17 = ((uint64_t)(arg1[47]) << 17); x18 = ((uint64_t)(arg1[46]) << 9); x19 = ((uint64_t)(arg1[45]) * 0x2); x20 = ((uint64_t)(arg1[44]) << 44); x21 = ((uint64_t)(arg1[43]) << 36); x22 = ((uint64_t)(arg1[42]) << 28); x23 = ((uint64_t)(arg1[41]) << 20); x24 = ((uint64_t)(arg1[40]) << 12); x25 = ((uint64_t)(arg1[39]) << 4); x26 = ((uint64_t)(arg1[38]) << 48); x27 = ((uint64_t)(arg1[37]) << 40); x28 = ((uint64_t)(arg1[36]) << 32); x29 = ((uint64_t)(arg1[35]) << 24); x30 = ((uint64_t)(arg1[34]) << 16); x31 = ((uint64_t)(arg1[33]) << 8); x32 = (arg1[32]); x33 = ((uint64_t)(arg1[31]) << 43); x34 = ((uint64_t)(arg1[30]) << 35); x35 = ((uint64_t)(arg1[29]) << 27); x36 = ((uint64_t)(arg1[28]) << 19); x37 = ((uint64_t)(arg1[27]) << 11); x38 = ((uint64_t)(arg1[26]) << 3); x39 = ((uint64_t)(arg1[25]) << 46); x40 = ((uint64_t)(arg1[24]) << 38); x41 = ((uint64_t)(arg1[23]) << 30); x42 = ((uint64_t)(arg1[22]) << 22); x43 = ((uint64_t)(arg1[21]) << 14); x44 = ((uint64_t)(arg1[20]) << 6); x45 = ((uint64_t)(arg1[19]) << 49); x46 = ((uint64_t)(arg1[18]) << 41); x47 = ((uint64_t)(arg1[17]) << 33); x48 = ((uint64_t)(arg1[16]) << 25); x49 = ((uint64_t)(arg1[15]) << 17); x50 = ((uint64_t)(arg1[14]) << 9); x51 = ((uint64_t)(arg1[13]) * 0x2); x52 = ((uint64_t)(arg1[12]) << 44); x53 = ((uint64_t)(arg1[11]) << 36); x54 = ((uint64_t)(arg1[10]) << 28); x55 = ((uint64_t)(arg1[9]) << 20); x56 = ((uint64_t)(arg1[8]) << 12); x57 = ((uint64_t)(arg1[7]) << 4); x58 = ((uint64_t)(arg1[6]) << 48); x59 = ((uint64_t)(arg1[5]) << 40); x60 = ((uint64_t)(arg1[4]) << 32); x61 = ((uint64_t)(arg1[3]) << 24); x62 = ((uint64_t)(arg1[2]) << 16); x63 = ((uint64_t)(arg1[1]) << 8); x64 = (arg1[0]); x65 = (x63 + (uint64_t)x64); x66 = (x62 + x65); x67 = (x61 + x66); x68 = (x60 + x67); x69 = (x59 + x68); x70 = (x58 + x69); x71 = (x70 & UINT64_C(0xfffffffffffff)); x72 = (uint8_t)(x70 >> 52); x73 = (x57 + (uint64_t)x72); x74 = (x56 + x73); x75 = (x55 + x74); x76 = (x54 + x75); x77 = (x53 + x76); x78 = (x52 + x77); x79 = (x78 & UINT64_C(0x7ffffffffffff)); x80 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x78 >> 51); x81 = (x51 + (uint64_t)x80); x82 = (x50 + x81); x83 = (x49 + x82); x84 = (x48 + x83); x85 = (x47 + x84); x86 = (x46 + x85); x87 = (x45 + x86); x88 = (x87 & UINT64_C(0x7ffffffffffff)); x89 = (uint8_t)(x87 >> 51); x90 = (x44 + (uint64_t)x89); x91 = (x43 + x90); x92 = (x42 + x91); x93 = (x41 + x92); x94 = (x40 + x93); x95 = (x39 + x94); x96 = (x95 & UINT64_C(0x7ffffffffffff)); x97 = (uint8_t)(x95 >> 51); x98 = (x38 + (uint64_t)x97); x99 = (x37 + x98); x100 = (x36 + x99); x101 = (x35 + x100); x102 = (x34 + x101); x103 = (x33 + x102); x104 = (x31 + (uint64_t)x32); x105 = (x30 + x104); x106 = (x29 + x105); x107 = (x28 + x106); x108 = (x27 + x107); x109 = (x26 + x108); x110 = (x109 & UINT64_C(0xfffffffffffff)); x111 = (uint8_t)(x109 >> 52); x112 = (x25 + (uint64_t)x111); x113 = (x24 + x112); x114 = (x23 + x113); x115 = (x22 + x114); x116 = (x21 + x115); x117 = (x20 + x116); x118 = (x117 & UINT64_C(0x7ffffffffffff)); x119 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x117 >> 51); x120 = (x19 + (uint64_t)x119); x121 = (x18 + x120); x122 = (x17 + x121); x123 = (x16 + x122); x124 = (x15 + x123); x125 = (x14 + x124); x126 = (x13 + x125); x127 = (x126 & UINT64_C(0x7ffffffffffff)); x128 = (uint8_t)(x126 >> 51); x129 = (x12 + (uint64_t)x128); x130 = (x11 + x129); x131 = (x10 + x130); x132 = (x9 + x131); x133 = (x8 + x132); x134 = (x7 + x133); x135 = (x134 & UINT64_C(0x7ffffffffffff)); x136 = (uint8_t)(x134 >> 51); x137 = (x6 + (uint64_t)x136); x138 = (x5 + x137); x139 = (x4 + x138); x140 = (x3 + x139); x141 = (x2 + x140); x142 = (x1 + x141); out1[0] = x71; out1[1] = x79; out1[2] = x88; out1[3] = x96; out1[4] = x103; out1[5] = x110; out1[6] = x118; out1[7] = x127; out1[8] = x135; out1[9] = x142; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_tc26_gost_3410_2012_512_paramSetA/fe_inv.op3 * custom repunit addition chain */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t102, t12, t198, t2, t200, t24, t3, t400, t48, t502, t6, t96; fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t2, acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t3, acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t3); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t6, acc, t3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t6); for (i = 0; i < 5; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t12, acc, t6); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t12); for (i = 0; i < 11; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t24, acc, t12); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t24); for (i = 0; i < 23; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t48, acc, t24); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t48); for (i = 0; i < 47; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t96, acc, t48); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t96); for (i = 0; i < 5; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t102, acc, t6); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t102); for (i = 0; i < 95; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t198, acc, t96); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t198); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t200, acc, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t200); for (i = 0; i < 199; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t400, acc, t200); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t400); for (i = 0; i < 101; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t502, acc, t102); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t502); for (i = 0; i < 3; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(acc, acc, t3); for (i = 0; i < 4; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(output, acc, t1); } /* curve coefficient constants */ static const limb_t const_one[10] = { UINT64_C(0x0000000000000001), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000)}; static const limb_t const_b[10] = { UINT64_C(0x000190785A71C760), UINT64_C(0x00054EBEE4761503), UINT64_C(0x0001B521BB0C5DF3), UINT64_C(0x0001D8532D15D004), UINT64_C(0x000771E584879869), UINT64_C(0x000D081CFD0B6265), UINT64_C(0x00074761CB0E879B), UINT64_C(0x0004CFE3B469704A), UINT64_C(0x0001B7706F42CAD9), UINT64_C(0x0007461282EF6FE4)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[12][16] = { { {{UINT64_C(0x0000000000000003), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000)}, {UINT64_C(0x000589CB5215F2A4), UINT64_C(0x0005FC235F5B889A), UINT64_C(0x00047483D30051FC), UINT64_C(0x0005BA4F5D79A943), UINT64_C(0x0006F8B135F27E81), UINT64_C(0x000064FDCBEFA921), UINT64_C(0x00013ACF1ABC1778), UINT64_C(0x0004A8A1CD9CBC39), UINT64_C(0x0002B8E986E205B8), UINT64_C(0x0003A81E7F43D41B)}}, {{UINT64_C(0x000134687CCB87C3), UINT64_C(0x0003A10544E8416E), UINT64_C(0x00061120F5D8AB9F), UINT64_C(0x0004D75D92CBD5EC), UINT64_C(0x00021E94205A696E), UINT64_C(0x000291D5F488FBA5), UINT64_C(0x0004C096168A1174), UINT64_C(0x00034ACFF09B62AD), UINT64_C(0x00019FAD4E4D776D), UINT64_C(0x00050FF8D5938951)}, {UINT64_C(0x000CD7EC518D90D6), UINT64_C(0x000711A4FB6C7125), UINT64_C(0x000298DBA98C6CDE), UINT64_C(0x00005BBAB3EB0BFA), UINT64_C(0x00008E9D7BF33E26), UINT64_C(0x00019E3F333F7EB3), UINT64_C(0x00048D7F84FBFA38), UINT64_C(0x00076B7309883C74), UINT64_C(0x0000DFCC0DD3C626), UINT64_C(0x0001E5AE220BF623)}}, {{UINT64_C(0x000AEA0CE47F1E5F), UINT64_C(0x0006DA872DC7D9E3), UINT64_C(0x0004026E133CB612), UINT64_C(0x0001D4C81CBDD5C9), UINT64_C(0x000116A46100FB10), UINT64_C(0x000C71645B8C9FFB), UINT64_C(0x0006AFE06F1C1484), UINT64_C(0x0000B6FF2FF4E6C1), UINT64_C(0x0000A642376D824E), UINT64_C(0x0002B4540E895C56)}, {UINT64_C(0x000BB3B92706CBC6), UINT64_C(0x0005700DE178E056), UINT64_C(0x000197807544BFFA), UINT64_C(0x000706F69DD298A6), UINT64_C(0x000205A8622A4E8B), UINT64_C(0x000109A43ED36596), UINT64_C(0x00049AB5B2BD5C17), UINT64_C(0x000515CF2C048D7F), UINT64_C(0x000651FD0ECDF273), UINT64_C(0x0003C6B66DABD057)}}, {{UINT64_C(0x000ABFC1B7D256E0), UINT64_C(0x00022DFADD1D6E68), UINT64_C(0x00033EEC39057D08), UINT64_C(0x00075EC5CD3B3AFE), UINT64_C(0x000073336BE8A8F9), UINT64_C(0x000528C313659874), UINT64_C(0x000045D76D6402E5), UINT64_C(0x0007B1F5060389E6), UINT64_C(0x0005D713A16A99F2), UINT64_C(0x0003C394B1ED6CB5)}, {UINT64_C(0x000A8C1A38755E5A), UINT64_C(0x0005CA589C9447E1), UINT64_C(0x0002D738BA7D236E), UINT64_C(0x00005E7DB74C629B), UINT64_C(0x000062E362468963), UINT64_C(0x000EBFCB8EE6AF9E), UINT64_C(0x000193EA82E68F84), UINT64_C(0x00003CAA0E7EFC3A), UINT64_C(0x00054937BC67C142), UINT64_C(0x000432F67FAB85C5)}}, {{UINT64_C(0x000C34CEE53642A2), UINT64_C(0x00048BA44E987AEF), UINT64_C(0x0007CFBA481AC93A), UINT64_C(0x000252C52E6724E2), UINT64_C(0x00069C1386DDE181), UINT64_C(0x0003FE183213C47A), UINT64_C(0x0006C13A8DC37861), UINT64_C(0x0004546EA0F50627), UINT64_C(0x0007B6C23C692349), UINT64_C(0x0004307D8079E6F2)}, {UINT64_C(0x000812879D2E3C8E), UINT64_C(0x000191C73044FE47), UINT64_C(0x00077218289340D5), UINT64_C(0x0005DA711BBBFF71), UINT64_C(0x0001C57405B59E36), UINT64_C(0x000C7F1B91C21105), UINT64_C(0x000066E23EF3A609), UINT64_C(0x00012EB6D5C73D15), UINT64_C(0x00020C3294080ED7), UINT64_C(0x00033ABC6BDE0FD2)}}, {{UINT64_C(0x00002EE1E7135C5B), UINT64_C(0x000147440718098F), UINT64_C(0x000742216A0AD24C), UINT64_C(0x000209FAE0414762), UINT64_C(0x0007523CACA53442), UINT64_C(0x0002240ADDECED0B), UINT64_C(0x00023970F6F47640), UINT64_C(0x000799A6033CA82E), UINT64_C(0x00013F8D7EBD8951), UINT64_C(0x0003167F9B05B77B)}, {UINT64_C(0x00084059554ECF79), UINT64_C(0x0005753C6736FF73), UINT64_C(0x000619A371C7BA90), UINT64_C(0x00007A6287324180), UINT64_C(0x00037396508E43B1), UINT64_C(0x000B92328505DD45), UINT64_C(0x00055C92400C6EE2), UINT64_C(0x0002654406A9F655), UINT64_C(0x0003AF03185F59DF), UINT64_C(0x0000C9632A02E2DE)}}, {{UINT64_C(0x00082288639F2EBD), UINT64_C(0x0004E3BE5A9F335C), UINT64_C(0x0000475B64CDF3D5), UINT64_C(0x00003AD875B443CE), UINT64_C(0x0005A22CF276D7D8), UINT64_C(0x00059A094CC2E917), UINT64_C(0x0002CAA724BAEBC5), UINT64_C(0x0001CB230407F535), UINT64_C(0x00043A679D215417), UINT64_C(0x00032069427B390F)}, {UINT64_C(0x00005AAE7CCDEA72), UINT64_C(0x000227E312EBD77B), UINT64_C(0x0006C48359C093AD), UINT64_C(0x00066AE122001431), UINT64_C(0x0002A7685789D1A1), UINT64_C(0x000DDDC9B1721593), UINT64_C(0x0002EB3A73075BAE), UINT64_C(0x00010D483A062D6E), UINT64_C(0x000414E1A10675C2), UINT64_C(0x0003FC179BB802A2)}}, {{UINT64_C(0x000FA7D670E14D45), UINT64_C(0x0005B60822C15C07), UINT64_C(0x0006E1C8DC8B953D), UINT64_C(0x0003AA1F0C09E3C3), UINT64_C(0x0004C494E672EDE4), UINT64_C(0x00061EB986E7C9B9), UINT64_C(0x0003EDBB8C82ECC2), UINT64_C(0x0007B7E098625DE1), UINT64_C(0x0001652C34790E48), UINT64_C(0x000181E9C44FB652)}, {UINT64_C(0x00026B7BFCB41422), UINT64_C(0x0004420662645444), UINT64_C(0x0005427FA987FF52), UINT64_C(0x0005B9040DF26326), UINT64_C(0x000334DEEC131B7C), UINT64_C(0x0009976A9AEB37C6), UINT64_C(0x0005DE6BDA0EE26F), UINT64_C(0x00046CD4B8DA22BF), UINT64_C(0x0001A9277ED46EDA), UINT64_C(0x00048FE9C8EA98F0)}}, {{UINT64_C(0x00069292A4F09AE6), UINT64_C(0x00059EEEC0228FDC), UINT64_C(0x0002E6A2EB99E1C1), UINT64_C(0x00028B36B1CB7EDC), UINT64_C(0x0007C4D51AEABB6E), UINT64_C(0x00040FA7C5F982AC), UINT64_C(0x0000A163AFAB5A89), UINT64_C(0x000436DC36654D6F), UINT64_C(0x0006E7E4EFBDBA76), UINT64_C(0x000469D46D1AEC82)}, {UINT64_C(0x0003F3770683CF55), UINT64_C(0x0007581899AFCAA5), UINT64_C(0x00021BB9291EC382), UINT64_C(0x000725C1812F5867), UINT64_C(0x00010D68EF013EA6), UINT64_C(0x000D8AD6CCEEDD36), UINT64_C(0x0004145477456E2A), UINT64_C(0x000350F4CCCDD3ED), UINT64_C(0x0006D247F4FCCCBC), UINT64_C(0x0002C35AD24695CC)}}, {{UINT64_C(0x0000563E3BB2C9A3), UINT64_C(0x0004731F28271C7E), UINT64_C(0x00006474AEE84E9A), UINT64_C(0x00079618BA66931E), UINT64_C(0x0005DEEC306DF549), UINT64_C(0x000A49F4075B243E), UINT64_C(0x00072F449585855D), UINT64_C(0x000031C0CC652EF1), UINT64_C(0x00003DDAA420F12A), UINT64_C(0x00027047A35D3C45)}, {UINT64_C(0x0008D45AEA9F97DE), UINT64_C(0x00031B40D05861EA), UINT64_C(0x00022DF5AC218686), UINT64_C(0x000237062CC05B46), UINT64_C(0x000511B267DD6BA7), UINT64_C(0x000818297550A398), UINT64_C(0x000702FE7A56CB70), UINT64_C(0x00053C7D673599DE), UINT64_C(0x0003ED45D15B6C15), UINT64_C(0x0001806F568245B9)}}, {{UINT64_C(0x0009351072DB2170), UINT64_C(0x00033196A2CEF459), UINT64_C(0x0006744E6383FCEF), UINT64_C(0x0005C51252A32D28), UINT64_C(0x00005FA2110CC455), UINT64_C(0x0004B8063421A324), UINT64_C(0x0007D30325E5137D), UINT64_C(0x0002AFA7F320E835), UINT64_C(0x00011A9719C3D5ED), UINT64_C(0x0006DFED78D57C93)}, {UINT64_C(0x000CD2B1C06C89E0), UINT64_C(0x00005887BE69BEF0), UINT64_C(0x00023A5834EEE4F0), UINT64_C(0x00064984FA6CCD98), UINT64_C(0x00006FB77FDF3397), UINT64_C(0x0001EBEBCE68907A), UINT64_C(0x0006784C0935BED2), UINT64_C(0x00050FF3F3DFF454), UINT64_C(0x0004036C327922ED), UINT64_C(0x00008DE3F2C6A92E)}}, {{UINT64_C(0x0006E03B0A49FC14), UINT64_C(0x0002D86C93A83EE0), UINT64_C(0x0004A7F892C15148), UINT64_C(0x0002FC12A44E72B1), UINT64_C(0x0000F1222DB270EC), UINT64_C(0x0005C305D53F498F), UINT64_C(0x0005C15989BD840C), UINT64_C(0x0005FD28651837A4), UINT64_C(0x0001F44FE46C7F06), UINT64_C(0x00025B96CDAFE605)}, {UINT64_C(0x0009FDD223F15C01), UINT64_C(0x0007578682CC2965), UINT64_C(0x0006222B764EE30D), UINT64_C(0x0002695A8C2DDC09), UINT64_C(0x0003EED3043E0B4D), UINT64_C(0x000DF4BA29380423), UINT64_C(0x000799CE51DCFEE3), UINT64_C(0x0001DC423C4607A6), UINT64_C(0x000353F2E08F2F67), UINT64_C(0x0002DE3BCB26FB64)}}, {{UINT64_C(0x000121C2DFF5C5F8), UINT64_C(0x0002C6372966E3BB), UINT64_C(0x00040EDCBB6FAE3D), UINT64_C(0x00045E8590C45B65), UINT64_C(0x00057F2556A1008A), UINT64_C(0x000D2C63669622C2), UINT64_C(0x00053762BBDA6A4D), UINT64_C(0x000638814A3C0C15), UINT64_C(0x0006306A8C676FEC), UINT64_C(0x00039FEA5B5F2932)}, {UINT64_C(0x00045B18CC6F6BD4), UINT64_C(0x000572570661CF49), UINT64_C(0x0003DB3E7E6325C0), UINT64_C(0x0000D4366AC3C833), UINT64_C(0x0000BA40102D6C2B), UINT64_C(0x000D88CD5627BDAA), UINT64_C(0x0001A191F2BD95D8), UINT64_C(0x0007B490EB1F6E2E), UINT64_C(0x0001854754C42C14), UINT64_C(0x0004F9B402BCF150)}}, {{UINT64_C(0x00062710FFD6E4C3), UINT64_C(0x00075F168936C9E7), UINT64_C(0x0005EBCC23DECE92), UINT64_C(0x0006A533FC0618A4), UINT64_C(0x00006276D8296DCC), UINT64_C(0x000C6FDBE7DDD556), UINT64_C(0x0005F77BF0F1421B), UINT64_C(0x00021327FBB8BE4C), UINT64_C(0x00039F51E09D0F1B), UINT64_C(0x00036B0DC0560BD1)}, {UINT64_C(0x00090F866EA9C581), UINT64_C(0x0001BB6C84E218AF), UINT64_C(0x00016801E510D5D1), UINT64_C(0x00048969111EF218), UINT64_C(0x00032F01F97E8EAC), UINT64_C(0x000846529FDA255F), UINT64_C(0x00003E0DA43E7BC5), UINT64_C(0x0005377E9AD3A533), UINT64_C(0x00054F1C41B443CC), UINT64_C(0x0001E2C9C182A7B8)}}, {{UINT64_C(0x0006822BBEC85A6F), UINT64_C(0x00037FF627207C7D), UINT64_C(0x000099E1EDB38619), UINT64_C(0x00024EABAAEF4727), UINT64_C(0x0001634583C11813), UINT64_C(0x0005BF27EB8FC0B2), UINT64_C(0x0002C5E6D68AED81), UINT64_C(0x00051011E59FEFC1), UINT64_C(0x0005BDE68E16008B), UINT64_C(0x00001CDB6AC4A926)}, {UINT64_C(0x000F9C8354532F1F), UINT64_C(0x0003B7D13F24D465), UINT64_C(0x0001EE14FAFB642C), UINT64_C(0x0003086537C154F6), UINT64_C(0x000498FB21A3549B), UINT64_C(0x000D5F9768C501AF), UINT64_C(0x0007358BD9264583), UINT64_C(0x00020604DE0C73BC), UINT64_C(0x0004C1EFB4D90397), UINT64_C(0x000316FD7FD552FA)}}, {{UINT64_C(0x000DF775325B2BEF), UINT64_C(0x0007C981BDB56B5B), UINT64_C(0x00030415FEF5D1EB), UINT64_C(0x00066427FB342115), UINT64_C(0x00039F275DCEB907), UINT64_C(0x000FC52CB944765D), UINT64_C(0x00063BA40ACC8623), UINT64_C(0x000217B5022687A4), UINT64_C(0x0003782EE74343F6), UINT64_C(0x0006E344AF9791BC)}, {UINT64_C(0x0006A094A3D00C90), UINT64_C(0x0000A8C2AF5A4ED6), UINT64_C(0x0002593EB8606459), UINT64_C(0x0006BB706B63F1A3), UINT64_C(0x0001AC9ABD940E22), UINT64_C(0x000A8AFEAB077BE2), UINT64_C(0x000053C3E6DE9695), UINT64_C(0x00035197B6C50B68), UINT64_C(0x0005F05ED56144C6), UINT64_C(0x0005D16C6B2F7A7D)}}, }, { {{UINT64_C(0x0009697EFB5343B1), UINT64_C(0x00030F79CEE2F4D7), UINT64_C(0x0007C57239C2BFFF), UINT64_C(0x0005E177E6306573), UINT64_C(0x00058AECAB18B5E4), UINT64_C(0x000C2D8B42DA873F), UINT64_C(0x00067CEC60F40D7C), UINT64_C(0x0001CD069631374B), UINT64_C(0x00053BF89F276A0A), UINT64_C(0x000211BC2F82ABCC)}, {UINT64_C(0x000F42F918BECCB0), UINT64_C(0x00050BCCFB9278C6), UINT64_C(0x000521F422BE023A), UINT64_C(0x000247E206708DFF), UINT64_C(0x000603F8EAFA08E8), UINT64_C(0x0001C8FA49E8E7A9), UINT64_C(0x0000ED2F247FA8F2), UINT64_C(0x00054F2BD90FC41F), UINT64_C(0x000613E3F3A0E141), UINT64_C(0x00058F502829C1A3)}}, {{UINT64_C(0x000FA958A02414EA), UINT64_C(0x0005694D8B531753), UINT64_C(0x0002596B7F70E2D2), UINT64_C(0x0006F58C437031E9), UINT64_C(0x0005E52B9AB2FC87), UINT64_C(0x00047681FFAD52A2), UINT64_C(0x00054CFD109661E6), UINT64_C(0x0002642E41E026F7), UINT64_C(0x00015A4C0B3E2C49), UINT64_C(0x00012DBAB3D25C66)}, {UINT64_C(0x000F66D444F2C6A3), UINT64_C(0x000465ABD7FBD63E), UINT64_C(0x000346682E14F62C), UINT64_C(0x0007D1BFDC2BDD7C), UINT64_C(0x00014B50150CDD7D), UINT64_C(0x000F1BAD6F065607), UINT64_C(0x0001B669F08E4917), UINT64_C(0x0007147465D09FD0), UINT64_C(0x0002E2E3DF8C1CE5), UINT64_C(0x0003E168C6A9219B)}}, {{UINT64_C(0x00026E66F048E71C), UINT64_C(0x00021DA6DDB4379F), UINT64_C(0x0006A446FCD70668), UINT64_C(0x0000ED5A782862E2), UINT64_C(0x000600DB452AEA1A), UINT64_C(0x00070E2B0EE96B31), UINT64_C(0x000272BCDA0E468B), UINT64_C(0x0006754F74551E8E), UINT64_C(0x00030B2901255489), UINT64_C(0x00018BA394D8F24B)}, {UINT64_C(0x000EF5DAB92AD60C), UINT64_C(0x0007A4E353682E4C), UINT64_C(0x0004D92B14F64543), UINT64_C(0x0006FB1C445C4562), UINT64_C(0x00005F0C73553832), UINT64_C(0x000F219585C811FA), UINT64_C(0x00002373528CE90C), UINT64_C(0x0005AEFE0F86FFD6), UINT64_C(0x000065686EF3DFA1), UINT64_C(0x0004BCFCBABBE76F)}}, {{UINT64_C(0x000A04E942DB5726), UINT64_C(0x0004E0A8E957D2EB), UINT64_C(0x000042171E8C74B0), UINT64_C(0x0002CD5D9C992A32), UINT64_C(0x00021775A666DF3B), UINT64_C(0x0009B1719FCE5AFD), UINT64_C(0x00070479A5510650), UINT64_C(0x00076CA597F5197E), UINT64_C(0x0002FF8004DC7298), UINT64_C(0x000427FBA3F2118F)}, {UINT64_C(0x000B2B7F0F1BC525), UINT64_C(0x0004F49FDAF0E9F8), UINT64_C(0x000119E1F8B31D5C), UINT64_C(0x00002C2E70F7717A), UINT64_C(0x000547EB13E64F24), UINT64_C(0x00061C10285CB68B), UINT64_C(0x00027F33F80AC82B), UINT64_C(0x00007A73F720ACD1), UINT64_C(0x0000FA4783E28EA8), UINT64_C(0x0005E1B01569FE4A)}}, {{UINT64_C(0x000C8833182EEC18), UINT64_C(0x0005188EE3CCBD7D), UINT64_C(0x000145800FA7D3B9), UINT64_C(0x00015F410C821BF2), UINT64_C(0x0006D6985D22BB97), UINT64_C(0x000ACE8A202EEB11), UINT64_C(0x000000D3BC5FFCBC), UINT64_C(0x0005A94DE37C5B1E), UINT64_C(0x0006A3E90AE676A0), UINT64_C(0x0003DC3E9B9DEA03)}, {UINT64_C(0x000ADDB18897A653), UINT64_C(0x00028BB1348E369A), UINT64_C(0x0000E0EF15D097A0), UINT64_C(0x000369538A36A67C), UINT64_C(0x0004F11787ECB811), UINT64_C(0x000DAB579DC3F6E7), UINT64_C(0x00051EEDC98205E1), UINT64_C(0x000296B14C5B057C), UINT64_C(0x0006A6B518D5A499), UINT64_C(0x0004B973FBCAD781)}}, {{UINT64_C(0x00092403168F568C), UINT64_C(0x00050C76745944DA), UINT64_C(0x00045586DDAA3849), UINT64_C(0x0002424F7A393AE3), UINT64_C(0x0003613FCF452DAE), UINT64_C(0x000483477F08760D), UINT64_C(0x0006DE9C9C30A9F7), UINT64_C(0x0006DE3DC9E26B78), UINT64_C(0x00072E8A269F2328), UINT64_C(0x0001A0904E3E62B3)}, {UINT64_C(0x000F53CF7A63B520), UINT64_C(0x00016E19E79779D7), UINT64_C(0x0003BA73148BC41B), UINT64_C(0x0000A0B9CB876955), UINT64_C(0x0002C3678483C9E4), UINT64_C(0x0001717604F49F0C), UINT64_C(0x0006DA52AE47D9A6), UINT64_C(0x00018A068DEAD248), UINT64_C(0x0000A45F44D54D0B), UINT64_C(0x000201738C7D6750)}}, {{UINT64_C(0x000BFD50B6C0ED05), UINT64_C(0x0003B59B6181691D), UINT64_C(0x00036E5595022312), UINT64_C(0x0006371166F016C4), UINT64_C(0x0000D2463D93685C), UINT64_C(0x0000FB99CEC22230), UINT64_C(0x000662B7CA84328B), UINT64_C(0x0005B058F277AA90), UINT64_C(0x000744C6285E6BE8), UINT64_C(0x00044924B43A399C)}, {UINT64_C(0x0009FE2EF5756858), UINT64_C(0x0002609FAC19675C), UINT64_C(0x0001EDB73C43A527), UINT64_C(0x00018040218709B5), UINT64_C(0x00038E60561A169C), UINT64_C(0x000716A3DE9C2728), UINT64_C(0x0001312CD53738AB), UINT64_C(0x00003A5EADF12479), UINT64_C(0x0004F1C4C30A626A), UINT64_C(0x00017077F028932B)}}, {{UINT64_C(0x0005E4B52DDE7879), UINT64_C(0x0000DD824234AF86), UINT64_C(0x0007E33F8D4E4720), UINT64_C(0x0007DE0000448CDA), UINT64_C(0x00033984E740002A), UINT64_C(0x000C47E6A3586EA2), UINT64_C(0x00044D0958EBE073), UINT64_C(0x00001246801B8077), UINT64_C(0x0002F9FC5AA5757F), UINT64_C(0x0001A2DCE0976101)}, {UINT64_C(0x000660A83163C88F), UINT64_C(0x000537D8B7F6309C), UINT64_C(0x00008DD86923D2DE), UINT64_C(0x0001EDCB48974621), UINT64_C(0x00006C01F610F051), UINT64_C(0x0008C9E7599C4A9D), UINT64_C(0x00036EA13E261953), UINT64_C(0x0003ED8BC32C0F96), UINT64_C(0x000755A3B7B81967), UINT64_C(0x00013DE89A6B4D9D)}}, {{UINT64_C(0x000CA6E0EB363C7F), UINT64_C(0x0005F55CE82062CB), UINT64_C(0x00054C8A253358D0), UINT64_C(0x0002C5D656290FF8), UINT64_C(0x00057F5B9325F1DA), UINT64_C(0x0001FEF7C4623421), UINT64_C(0x000751B35DC509CC), UINT64_C(0x0000D577E46356BC), UINT64_C(0x0001AE1750B963E0), UINT64_C(0x000101926AD538C7)}, {UINT64_C(0x000ADB8B609BBDFF), UINT64_C(0x00071752C179ED60), UINT64_C(0x0001F4F46D3CDA68), UINT64_C(0x0006AB70B8479B34), UINT64_C(0x00025F7ED7DEE309), UINT64_C(0x000DDC2D9609A612), UINT64_C(0x0004E68BAF1E467F), UINT64_C(0x00040F9B19D3CBE2), UINT64_C(0x00037E8C1EC0C6A4), UINT64_C(0x0003125691C2193B)}}, {{UINT64_C(0x00067DA2BD46C9EA), UINT64_C(0x00026B6CAB294387), UINT64_C(0x0001D6166D7C9065), UINT64_C(0x00062BF47248BD53), UINT64_C(0x0002E90A5DD8639A), UINT64_C(0x0003936168470E19), UINT64_C(0x000528F76D8AF696), UINT64_C(0x0006ED2117C0F595), UINT64_C(0x00053A94B0075896), UINT64_C(0x00029EA83F539A1E)}, {UINT64_C(0x0002028A9BD76B91), UINT64_C(0x0004FD251AA0E6F2), UINT64_C(0x0005AC8CC0D23EFF), UINT64_C(0x000128939573B39C), UINT64_C(0x000672B16EA38AE5), UINT64_C(0x0004D9266E6063F1), UINT64_C(0x000059E6A8535CE8), UINT64_C(0x0000599ECB0EF8DD), UINT64_C(0x0007013D35E8201F), UINT64_C(0x0002C65B4B7CFED7)}}, {{UINT64_C(0x0008F58A1E3612AD), UINT64_C(0x0003A9FB96EDB71F), UINT64_C(0x0001F18D41C781FC), UINT64_C(0x00018367EBB23895), UINT64_C(0x0005D1FCD3BE526A), UINT64_C(0x000A42281101E568), UINT64_C(0x0005BABB0531BAFA), UINT64_C(0x0000A5F2A706F2D0), UINT64_C(0x00004127B930A594), UINT64_C(0x0000EB497CC34685)}, {UINT64_C(0x00073B79A1945681), UINT64_C(0x000752EA80F8AC71), UINT64_C(0x0006302573AC640B), UINT64_C(0x00078867625480E5), UINT64_C(0x0007079395B2C6EF), UINT64_C(0x000C10FF5DD268D7), UINT64_C(0x00057909D9F5E805), UINT64_C(0x0003A161EE637F23), UINT64_C(0x00076AA86D84AD92), UINT64_C(0x0001EF085DE6C3AC)}}, {{UINT64_C(0x000C311C4599BCA4), UINT64_C(0x00071D198CA022EA), UINT64_C(0x0007BCCA6C1EA7A9), UINT64_C(0x0005A91F6CE54B62), UINT64_C(0x00040F2F68ADFDE8), UINT64_C(0x0006DA7F20DC869C), UINT64_C(0x00059DD3EE431C99), UINT64_C(0x000714D6993F24A2), UINT64_C(0x0007C5152642D91F), UINT64_C(0x0002F4E11F2CC27F)}, {UINT64_C(0x000A8ACA2FD26CFD), UINT64_C(0x0002EB39C4AC80BE), UINT64_C(0x0005BFAD35FC99F2), UINT64_C(0x0002BFAB444638F8), UINT64_C(0x000355F04D6D03C9), UINT64_C(0x000EB7D307BB548E), UINT64_C(0x00045256FDC37CFF), UINT64_C(0x000455EACB7CD74C), UINT64_C(0x0005F5BC0A0265A1), UINT64_C(0x0004E4B55474C1FB)}}, {{UINT64_C(0x000405C3B4CBBA99), UINT64_C(0x0003A2CFD9BA8CE7), UINT64_C(0x0004D38F33BA729F), UINT64_C(0x00058368002B41A8), UINT64_C(0x0001EB778063FAFA), UINT64_C(0x00000CB2D95428C0), UINT64_C(0x0007A5F40E6F6248), UINT64_C(0x00066402E02185E2), UINT64_C(0x0002874AE640E9BA), UINT64_C(0x00025092EF1270C6)}, {UINT64_C(0x0004F5A43B7EA260), UINT64_C(0x00024FC17540A356), UINT64_C(0x0001076B47F9F931), UINT64_C(0x0002FB78183398A6), UINT64_C(0x000229276794FECA), UINT64_C(0x0001B56FD26AC511), UINT64_C(0x00013652FDA2807D), UINT64_C(0x0000AD7AC8AF8820), UINT64_C(0x00059580D670358C), UINT64_C(0x0007B37AB910DB85)}}, {{UINT64_C(0x000E7AAFAA81120D), UINT64_C(0x0001EFCC9131C28F), UINT64_C(0x0000F04662F79A92), UINT64_C(0x00018481A743283F), UINT64_C(0x0003227CCC1B0051), UINT64_C(0x000889F9DEBDBBB6), UINT64_C(0x00026E53C8DB36F4), UINT64_C(0x00040E757FC7CCB6), UINT64_C(0x000796C1E48AF493), UINT64_C(0x0005CD8E286C308F)}, {UINT64_C(0x000FEEF26280024C), UINT64_C(0x00008656CE73F334), UINT64_C(0x000047F19B4CCB60), UINT64_C(0x0003E09FD007DE6A), UINT64_C(0x0006DFDC10446128), UINT64_C(0x0001C5059DDF7FB5), UINT64_C(0x0000C6D4835DEC52), UINT64_C(0x0001ECDEF9FA549E), UINT64_C(0x00004A50331A27BB), UINT64_C(0x0007445C7A2F53C4)}}, {{UINT64_C(0x000919F3EC9CCC4F), UINT64_C(0x0005F2F6CF149577), UINT64_C(0x00060C560F67551A), UINT64_C(0x0007E358E045685B), UINT64_C(0x00070CCBF13484CF), UINT64_C(0x000C37725A783FCF), UINT64_C(0x00054AB9E7EE7B1E), UINT64_C(0x0003333BAB51E43A), UINT64_C(0x000017DC7BC018D7), UINT64_C(0x00003CA4BCFA7DD5)}, {UINT64_C(0x0003E1A7A3069435), UINT64_C(0x000480EFF4E48BC7), UINT64_C(0x00062115BD5D5E69), UINT64_C(0x0007096DD6C931AD), UINT64_C(0x0002608249CB7A58), UINT64_C(0x0008A26364C8096A), UINT64_C(0x0003C1F2D4A059E3), UINT64_C(0x00010E330E128864), UINT64_C(0x0003B581FC1DE5C7), UINT64_C(0x000588DBEAEEB225)}}, {{UINT64_C(0x0003AC2924B671D6), UINT64_C(0x00027D78B698A45A), UINT64_C(0x00015C6FF89B42E6), UINT64_C(0x000480FF26EC1381), UINT64_C(0x0000CC4426AAA245), UINT64_C(0x000FB55D009EF0BB), UINT64_C(0x000298CBBB4ADE83), UINT64_C(0x000718B823375BD8), UINT64_C(0x0007751B44E5F80F), UINT64_C(0x00059A1E5D2A4A5C)}, {UINT64_C(0x000CB0EE2657342C), UINT64_C(0x00055C4B6D401505), UINT64_C(0x00056E99CE0E1574), UINT64_C(0x00002F6CB06EAD80), UINT64_C(0x000476059C9E6EB0), UINT64_C(0x000C60BC1D3204D4), UINT64_C(0x00050DC61142023B), UINT64_C(0x000726C34A8A210F), UINT64_C(0x0005C72290CE928B), UINT64_C(0x0004DFA0CEB1B72D)}}, }, { {{UINT64_C(0x000247F93F2BDD27), UINT64_C(0x0007C93034C92904), UINT64_C(0x00027DAD72E4B40B), UINT64_C(0x00014E25E82ABBD1), UINT64_C(0x00060E4F42A6C475), UINT64_C(0x000DC708D6D66CCB), UINT64_C(0x00036DB87A4B6343), UINT64_C(0x0003C58123691EAF), UINT64_C(0x0004DAD470664927), UINT64_C(0x0006A82E32F9C5E6)}, {UINT64_C(0x0002A35EDD030037), UINT64_C(0x000219F0D4AE2250), UINT64_C(0x0003A7450131A667), UINT64_C(0x00061472E2C5CAD3), UINT64_C(0x0000BDF65BE7AF81), UINT64_C(0x0007F887A21C419E), UINT64_C(0x00048915425E3C2E), UINT64_C(0x00046299A3659CE9), UINT64_C(0x00044FD643C6825F), UINT64_C(0x00041408EE3F7EE7)}}, {{UINT64_C(0x0001D71DC21EAB28), UINT64_C(0x00065A53D38F953D), UINT64_C(0x00032DEB59D8023C), UINT64_C(0x0004054571AECBAF), UINT64_C(0x0006227C20ADC1B1), UINT64_C(0x0004052B60ED5E09), UINT64_C(0x0007D536170CE49B), UINT64_C(0x000133F69C75D93C), UINT64_C(0x000631A47E596690), UINT64_C(0x0007BE94B2BCFA10)}, {UINT64_C(0x000D3D75C6EDBD10), UINT64_C(0x0002F0C1700CF75C), UINT64_C(0x0000880BD06AC9F8), UINT64_C(0x0007F4DE75015506), UINT64_C(0x0004F7D9218E4531), UINT64_C(0x000525D094B57596), UINT64_C(0x000303BA4ADC93BE), UINT64_C(0x000781A6DDE92BB0), UINT64_C(0x0000145A33FB664A), UINT64_C(0x0003075364E801EA)}}, {{UINT64_C(0x000B5C724B664A37), UINT64_C(0x0002503E28109C51), UINT64_C(0x00025B829904E428), UINT64_C(0x00069506DB016812), UINT64_C(0x0004A750C8A64E1B), UINT64_C(0x000B87DB220A7C57), UINT64_C(0x00031EFD957F4D41), UINT64_C(0x000049A333D86B06), UINT64_C(0x0001D8EAEB6440B9), UINT64_C(0x000276C32B4CE41C)}, {UINT64_C(0x0008857C83EF71E8), UINT64_C(0x0005E721B3AB9D6B), UINT64_C(0x00017EACB90E5F00), UINT64_C(0x0005C3E831C481C5), UINT64_C(0x0007C0B8197E5462), UINT64_C(0x000DBDC919F92AA9), UINT64_C(0x0002200849E9CAEE), UINT64_C(0x0004BE6C719C5906), UINT64_C(0x0004E280855B1920), UINT64_C(0x0005C5B91DB6D1EA)}}, {{UINT64_C(0x000424B6E394CF88), UINT64_C(0x0003C2C97C04AC74), UINT64_C(0x00063ADB5E77144A), UINT64_C(0x0005D883FF8E6B47), UINT64_C(0x0004F87D0A1CC558), UINT64_C(0x000BB8A228CF7739), UINT64_C(0x0004B3A03FA0D71F), UINT64_C(0x000753D34ABABB8E), UINT64_C(0x000562AB4C8CB943), UINT64_C(0x0001CEBF9BBC430C)}, {UINT64_C(0x0007223CBD30A33E), UINT64_C(0x0007335C7215C6C3), UINT64_C(0x000603E2856D2862), UINT64_C(0x0002A848E65B42A0), UINT64_C(0x0004218F69174E09), UINT64_C(0x0005FFA3227A0A23), UINT64_C(0x00005B5868C2514B), UINT64_C(0x0004938AFADAD730), UINT64_C(0x0007660F9A69E6DE), UINT64_C(0x00065102D85E579B)}}, {{UINT64_C(0x000D8ADCE1ED036C), UINT64_C(0x00075B271EA827E2), UINT64_C(0x00076B7F6030D0B9), UINT64_C(0x0001CF9A9998A24D), UINT64_C(0x0003EAAA8D599E8C), UINT64_C(0x000926867BCB228B), UINT64_C(0x0005C256FF24300F), UINT64_C(0x0002D2C9DDD6690E), UINT64_C(0x000318EC38CFD857), UINT64_C(0x00040F4D05884680)}, {UINT64_C(0x000BA16121F40EA5), UINT64_C(0x0003E1A3C8625ED4), UINT64_C(0x0003A030ED90ADCB), UINT64_C(0x00051906502C4E1E), UINT64_C(0x00056353D129BB9B), UINT64_C(0x00097E025B071B0B), UINT64_C(0x0007FEFDDBE2C9B0), UINT64_C(0x0005B33FC31E9599), UINT64_C(0x0004B5E596C70338), UINT64_C(0x0001C9B00B315DC4)}}, {{UINT64_C(0x000607DBC162717D), UINT64_C(0x0000D1169F3006DA), UINT64_C(0x0000DD28C7A17F77), UINT64_C(0x000575B9A5BE6190), UINT64_C(0x0001608A9002E304), UINT64_C(0x0008355DA341F5E9), UINT64_C(0x0006F9C8170EE63C), UINT64_C(0x00014428C0115E5D), UINT64_C(0x00023A2E2E57272F), UINT64_C(0x000688C75933F079)}, {UINT64_C(0x000FF6A2CDB10A3C), UINT64_C(0x00011BFAEC3923D3), UINT64_C(0x00042ED75727E176), UINT64_C(0x00014FA777DC3A6C), UINT64_C(0x000160BDE1742549), UINT64_C(0x000AB16C591470C7), UINT64_C(0x00028D130B66A9E4), UINT64_C(0x00047E950B4F11C5), UINT64_C(0x000135717CA7A661), UINT64_C(0x000654B545B4E06F)}}, {{UINT64_C(0x00021C7F20682330), UINT64_C(0x0006E09BA4DD4E28), UINT64_C(0x0005ED0838CEDFB5), UINT64_C(0x00046FAAD6213185), UINT64_C(0x00042F098929C355), UINT64_C(0x0002587008E96E6D), UINT64_C(0x000705A22499C027), UINT64_C(0x0000D8B3B0087A17), UINT64_C(0x0003A94A483422C6), UINT64_C(0x0003D967C7D3D6FD)}, {UINT64_C(0x0009965DB7927E5D), UINT64_C(0x0005AB719C5CAE45), UINT64_C(0x00033CCD1F896812), UINT64_C(0x0001AE9A7A4BA5D3), UINT64_C(0x00072043806DB7CF), UINT64_C(0x0008763B930B883A), UINT64_C(0x0002E90170B740E5), UINT64_C(0x00058F5C1631E156), UINT64_C(0x0000C3D179B466C2), UINT64_C(0x0005E600D05FAA9D)}}, {{UINT64_C(0x0001BDEA3D7E7C27), UINT64_C(0x0000D69B04E78772), UINT64_C(0x0006FD1A96FF1C3D), UINT64_C(0x000704C7BCD74C67), UINT64_C(0x0006587D24D60D0B), UINT64_C(0x0009A72FB4EDBDF3), UINT64_C(0x0005F66F2FC11A22), UINT64_C(0x0005C07A5C028CB3), UINT64_C(0x000427DC53252FD7), UINT64_C(0x00000C0FE0D5E259)}, {UINT64_C(0x00015C9DCE11A938), UINT64_C(0x0002F708542BA021), UINT64_C(0x0006DAB5EC8723B2), UINT64_C(0x0003151DBC6DBEA3), UINT64_C(0x000309C003EEA187), UINT64_C(0x000986E93A4AD727), UINT64_C(0x0005A27640EB41AD), UINT64_C(0x00064B4B969CE91A), UINT64_C(0x00058AD60A48BA18), UINT64_C(0x0007DE07E6483D46)}}, {{UINT64_C(0x0001C747EC0357A9), UINT64_C(0x00053CBE4FDF72AE), UINT64_C(0x0001FB453499F9E9), UINT64_C(0x0004C4167C9B02FD), UINT64_C(0x000127DCADD50EB4), UINT64_C(0x000805FB4E216AE0), UINT64_C(0x00029FAA52099B86), UINT64_C(0x00047C3F68455806), UINT64_C(0x0001B9FA50F58DBC), UINT64_C(0x0003BD919AFF02A8)}, {UINT64_C(0x0000E4A059AF4846), UINT64_C(0x0007E18DF861A61A), UINT64_C(0x0006C2588CE7246D), UINT64_C(0x000662D80DEF8736), UINT64_C(0x00067C77B3EBB3CB), UINT64_C(0x000DB319339B4754), UINT64_C(0x0002F3DAFE1D02AD), UINT64_C(0x0001AB8E0CEDA23A), UINT64_C(0x0000839E55FF286D), UINT64_C(0x000427E6A937B04C)}}, {{UINT64_C(0x0009CD5E8F10490A), UINT64_C(0x000770DEE503609F), UINT64_C(0x0002F4D1F9822AF0), UINT64_C(0x000209D7D6C6D432), UINT64_C(0x000577EE861AD61E), UINT64_C(0x000D96564BC24BF1), UINT64_C(0x0007205D262B6DBF), UINT64_C(0x0003C7E6251A1A93), UINT64_C(0x00013FC13A41D60E), UINT64_C(0x000213F2333B026A)}, {UINT64_C(0x0008E0F9A2F3F058), UINT64_C(0x00052D3E4E010B53), UINT64_C(0x00048FB0F03593BF), UINT64_C(0x0007400230A674D3), UINT64_C(0x0007D42DE3498D1B), UINT64_C(0x00088D98507324A9), UINT64_C(0x0006FEBD72D5E2AE), UINT64_C(0x00023587543DE864), UINT64_C(0x0006101B209DB09C), UINT64_C(0x0007176D895A251A)}}, {{UINT64_C(0x0005B6A111C3F2A8), UINT64_C(0x000287D5A1A25472), UINT64_C(0x0004C3C87F77626A), UINT64_C(0x0007EAFB9945BB03), UINT64_C(0x0000B01EC3BD3FD6), UINT64_C(0x0003CFA14713C9F7), UINT64_C(0x00055DC5C2B54DF9), UINT64_C(0x00040CB8F2FD4F74), UINT64_C(0x0002B2C21AAD7697), UINT64_C(0x0006A800C6F15DE5)}, {UINT64_C(0x00087EBAC501C1CD), UINT64_C(0x0004B94A8B9744A9), UINT64_C(0x00071EA1C4951821), UINT64_C(0x0002F01B39CE1A3C), UINT64_C(0x0005D4D68C89745D), UINT64_C(0x000CDC8D00E9F950), UINT64_C(0x0004C2450A80D882), UINT64_C(0x0002B0D6F20496F6), UINT64_C(0x0000E2B53712BC8E), UINT64_C(0x0004FB508F36E069)}}, {{UINT64_C(0x0009905B853D75DD), UINT64_C(0x0002202313A58A10), UINT64_C(0x00047F9FAA6A8086), UINT64_C(0x0006997CD94C68DB), UINT64_C(0x00053560DF08CE67), UINT64_C(0x00058B243F1C8213), UINT64_C(0x00023330F3EAC431), UINT64_C(0x00029615BF1FDC4B), UINT64_C(0x0000E02FFE4339AB), UINT64_C(0x0006701924C686EC)}, {UINT64_C(0x00028B574C85D822), UINT64_C(0x00023BDBC197A77D), UINT64_C(0x0000CA80105F893D), UINT64_C(0x0004A4B3F8BA0A40), UINT64_C(0x0006606848556101), UINT64_C(0x0002691001720525), UINT64_C(0x000492966DED5935), UINT64_C(0x0004330B122DF4B0), UINT64_C(0x0003F277BB31C2EC), UINT64_C(0x000415C4C2A49A50)}}, {{UINT64_C(0x00067B9FED7E7EA9), UINT64_C(0x0000C6210735C315), UINT64_C(0x000015C61BE12C57), UINT64_C(0x00031A65953D8E09), UINT64_C(0x0000C16E4265E92A), UINT64_C(0x00038511318F2F8F), UINT64_C(0x0006D2553216EB6C), UINT64_C(0x00014C8A2AC5A158), UINT64_C(0x000155D5D24C02F3), UINT64_C(0x00028479C9ACA656)}, {UINT64_C(0x0007F082D316A5DE), UINT64_C(0x0003727A88716E25), UINT64_C(0x000759E99508C576), UINT64_C(0x000268F8E924CE60), UINT64_C(0x0006584B44F67E86), UINT64_C(0x00010FC03061696C), UINT64_C(0x000111F962EADA3C), UINT64_C(0x000287220D2E4A6F), UINT64_C(0x0003DB8A5947F03E), UINT64_C(0x00063C396A142480)}}, {{UINT64_C(0x0008D64DDD35262C), UINT64_C(0x0000E4419BEEDCBC), UINT64_C(0x0002644C710FD7DF), UINT64_C(0x0002B9FD57D1EDA6), UINT64_C(0x0001B443D6794EE2), UINT64_C(0x00066E8A571BA2F0), UINT64_C(0x0002A7DDA194FF52), UINT64_C(0x0000F1F9B9EB114E), UINT64_C(0x0002D0C71939AF7D), UINT64_C(0x0007B1CF36555692)}, {UINT64_C(0x000E6FC6E690E6C9), UINT64_C(0x00025FE13962D085), UINT64_C(0x00057EF392B58263), UINT64_C(0x0000601F80D88963), UINT64_C(0x0000F77167FACF40), UINT64_C(0x0005C1EB1F4AF8D3), UINT64_C(0x0004E45CA91A75A3), UINT64_C(0x0007A538AF4D39AB), UINT64_C(0x0002FC7EF186BF83), UINT64_C(0x0002BB96633B032F)}}, {{UINT64_C(0x000A511387235D97), UINT64_C(0x0000C5AEBD7CD669), UINT64_C(0x0001E2B79B37FC76), UINT64_C(0x000633A0ED45A1B2), UINT64_C(0x00002A485310156D), UINT64_C(0x000CF71C1E86A953), UINT64_C(0x000380A9470BDE9B), UINT64_C(0x0006C3A16CD16C98), UINT64_C(0x0003FD675030BD33), UINT64_C(0x0005733732E1E8BD)}, {UINT64_C(0x0005DC87E99B96E0), UINT64_C(0x00061EEB65283A4A), UINT64_C(0x00066868AD05A9F6), UINT64_C(0x0003149FA1801E6C), UINT64_C(0x00009D644B39DFC5), UINT64_C(0x00088AA6A5735E82), UINT64_C(0x000329D82B26F648), UINT64_C(0x00038BF5BA7C68AD), UINT64_C(0x0000C5080B2DF90F), UINT64_C(0x00038D1F9AC2EAFD)}}, {{UINT64_C(0x000DB14BDA7C7B66), UINT64_C(0x0000C49B073976FE), UINT64_C(0x000594F284FFA26E), UINT64_C(0x000082CF489F3922), UINT64_C(0x00052C957BF245F7), UINT64_C(0x0006E308A2AB1201), UINT64_C(0x000099B40ACA95A7), UINT64_C(0x0002815B6839730D), UINT64_C(0x0000B4295FDA8783), UINT64_C(0x00056F95752DE2DE)}, {UINT64_C(0x000F056FEC9E88EA), UINT64_C(0x0007747F406F4246), UINT64_C(0x000125F62E04125C), UINT64_C(0x000286A0E4919620), UINT64_C(0x000691348CCDE24C), UINT64_C(0x0000010E5ED700B6), UINT64_C(0x0000B69D2C21F3C6), UINT64_C(0x00073767577F6F02), UINT64_C(0x0005344DA12140FD), UINT64_C(0x00063AC1FFD1B34E)}}, }, { {{UINT64_C(0x00073DCFA4CC1F6E), UINT64_C(0x000058B4C7ED3A6B), UINT64_C(0x00044FC7BBBB4D1C), UINT64_C(0x00073AA6DD4CD996), UINT64_C(0x000603CE62F0768C), UINT64_C(0x000DDF011F0B6AB3), UINT64_C(0x0003E05089170D90), UINT64_C(0x0005874DCC299BE8), UINT64_C(0x0001472869B59056), UINT64_C(0x000509DDD9B76FFE)}, {UINT64_C(0x000EF415076C2F66), UINT64_C(0x00011E95B1CD79BE), UINT64_C(0x00072B66656ECB77), UINT64_C(0x0000C32231A4FA37), UINT64_C(0x000078B2D3568104), UINT64_C(0x00071892DBCB8007), UINT64_C(0x00003A0D60762137), UINT64_C(0x0001972E82FD7568), UINT64_C(0x0003B928B40F35C4), UINT64_C(0x00008D70A3EF6199)}}, {{UINT64_C(0x000AFC3506C0703F), UINT64_C(0x000624FB1C5785C2), UINT64_C(0x0000AABC82587858), UINT64_C(0x0004C835073ADCF9), UINT64_C(0x000687A3E10BEBEC), UINT64_C(0x000594AAE6A6AE1A), UINT64_C(0x00065326690F40A8), UINT64_C(0x0000FAAF35DCEA85), UINT64_C(0x0000F2D71EE73779), UINT64_C(0x00066971F9CF6697)}, {UINT64_C(0x000438C3AE869675), UINT64_C(0x00058F4A97CCECEE), UINT64_C(0x00038C0DA4EAB715), UINT64_C(0x0002EFF5EC967DA5), UINT64_C(0x0004EC8C45F8A0B7), UINT64_C(0x0001A00E90F5CDF1), UINT64_C(0x00008DEA644831E0), UINT64_C(0x000344FDFCB694A6), UINT64_C(0x0001645897F09A36), UINT64_C(0x0003CD2366934F24)}}, {{UINT64_C(0x0003A9CBC10E78A2), UINT64_C(0x0005680C903EE3AA), UINT64_C(0x0006148C4134D494), UINT64_C(0x0000B708AB89AB5E), UINT64_C(0x0004077F94E08257), UINT64_C(0x0006E5183D078408), UINT64_C(0x000100C1D80D49CE), UINT64_C(0x00077E3B5B1FD1E9), UINT64_C(0x0001D5173866042B), UINT64_C(0x0002EC241DBE6604)}, {UINT64_C(0x000D707611B80741), UINT64_C(0x000004EDC429B806), UINT64_C(0x00025B85B91E12D5), UINT64_C(0x0005A874EFD18EE2), UINT64_C(0x000679D292E2E5E8), UINT64_C(0x0007C4E1CF9D2493), UINT64_C(0x00007FEC8151F6C5), UINT64_C(0x0007077C6CE7BCBD), UINT64_C(0x0004E603D2D1C045), UINT64_C(0x000120DC52FC4C28)}}, {{UINT64_C(0x00024CAB433F1EE9), UINT64_C(0x00029390B5399AC6), UINT64_C(0x0000A140735E1061), UINT64_C(0x0006209FAAABDAEB), UINT64_C(0x000313939B1E27F8), UINT64_C(0x00071218CE90C274), UINT64_C(0x00004D454CA99B52), UINT64_C(0x000244DC876EE217), UINT64_C(0x0007B9AEDFF13E10), UINT64_C(0x0007C60093FD8081)}, {UINT64_C(0x000DA5DEA4CAF297), UINT64_C(0x00068C8666E24B9C), UINT64_C(0x0002429BB8CB157C), UINT64_C(0x00075FA673A5EDA2), UINT64_C(0x000374A3EAD4DEAA), UINT64_C(0x000BDA91FD4D7B4C), UINT64_C(0x000219669647B2DF), UINT64_C(0x0003EDAFFBB15EF4), UINT64_C(0x00024CF5BC63EF28), UINT64_C(0x00027124899C9A4B)}}, {{UINT64_C(0x00040B019B1261D0), UINT64_C(0x0000B4F4F45584EA), UINT64_C(0x00010867C36FE3B7), UINT64_C(0x0001B956EFC67D1C), UINT64_C(0x00060551212213FD), UINT64_C(0x00045B1AC4D20479), UINT64_C(0x00031E79405F14E6), UINT64_C(0x00054F01E909A81E), UINT64_C(0x00001536D9DE39DB), UINT64_C(0x0000B62D820D6FE3)}, {UINT64_C(0x0003F4243CF34066), UINT64_C(0x00024F7957E1D750), UINT64_C(0x000080B613A16A90), UINT64_C(0x0004FFBB7D0412AA), UINT64_C(0x00048AADB4617EEB), UINT64_C(0x0005590404BF6350), UINT64_C(0x0005FB0DEC254DD3), UINT64_C(0x0006E456239D68DC), UINT64_C(0x0006AA0BAC97FBC4), UINT64_C(0x0007C0F318810C9E)}}, {{UINT64_C(0x00095C2255EB8676), UINT64_C(0x0002EEBEE04E7BD1), UINT64_C(0x00047162E07D3E1B), UINT64_C(0x00019CBB802D7D2F), UINT64_C(0x0004D5BCA1F2FE81), UINT64_C(0x000636275F6E3CD0), UINT64_C(0x000074C1065AE748), UINT64_C(0x00000ED33D724610), UINT64_C(0x000382AAE71C671F), UINT64_C(0x00050F862E56FE82)}, {UINT64_C(0x000F0C6FE0519997), UINT64_C(0x0004AF7A837FAD03), UINT64_C(0x00029E2DCFC7D836), UINT64_C(0x0000D7429D3F9BC8), UINT64_C(0x0002062ED538B7FE), UINT64_C(0x00048D96CEDB79F1), UINT64_C(0x00035E77C26028A3), UINT64_C(0x0002BEBC515C0C05), UINT64_C(0x0001137EC9DBE5EA), UINT64_C(0x0004EF0306F592B4)}}, {{UINT64_C(0x00045CFFCC0FA82B), UINT64_C(0x000147CD2A7BCEF8), UINT64_C(0x0004A7DF37A543F3), UINT64_C(0x0000E83C08C7DB26), UINT64_C(0x000433C19A259924), UINT64_C(0x000060A2CC17C1B7), UINT64_C(0x00048887C01708A7), UINT64_C(0x0004F7B43946A5B5), UINT64_C(0x0000318DA056D31F), UINT64_C(0x0005816FA3E55B23)}, {UINT64_C(0x00028F1B6BE8EDBD), UINT64_C(0x0002FAEDDF5DD2E3), UINT64_C(0x0004F7E40BA33E35), UINT64_C(0x00065C3B855FC053), UINT64_C(0x0001874EF8C8D7C7), UINT64_C(0x0009EE69935EB5BD), UINT64_C(0x0005209285BDCD9B), UINT64_C(0x00065CD4AD193A52), UINT64_C(0x0007AF07028EFAD4), UINT64_C(0x0003D64202012D6B)}}, {{UINT64_C(0x000B9243B209436A), UINT64_C(0x0004A9127BF30A58), UINT64_C(0x0006E0E94A1E2713), UINT64_C(0x0004376EAD2B248D), UINT64_C(0x000767EEA5E05823), UINT64_C(0x0009BF8F74216C3F), UINT64_C(0x00024B8202C21037), UINT64_C(0x00013B0257209206), UINT64_C(0x0002F0B8A9C57E63), UINT64_C(0x0001559540A76AA1)}, {UINT64_C(0x00066AF801F7DD9E), UINT64_C(0x00075AFD2B0FB2AA), UINT64_C(0x00055CB5FD0A01A3), UINT64_C(0x000139A9A848804F), UINT64_C(0x0004DB6F2563F825), UINT64_C(0x0001293E77720431), UINT64_C(0x0005D00E9E6814E5), UINT64_C(0x00033A3B82EBAE98), UINT64_C(0x00032C37E6C66CBB), UINT64_C(0x000690013DADC456)}}, {{UINT64_C(0x000272465B8B5D7D), UINT64_C(0x000720DB646ED253), UINT64_C(0x0002AB65B7565858), UINT64_C(0x00014AD6B607866E), UINT64_C(0x000598494CC47B43), UINT64_C(0x000001AE0D244024), UINT64_C(0x00029E1DE544546D), UINT64_C(0x0002D87A26EE67AB), UINT64_C(0x0002767B394A967D), UINT64_C(0x0005DD104AA8F32A)}, {UINT64_C(0x00068115CF22CDAC), UINT64_C(0x0006E7DA3BE129A8), UINT64_C(0x00037A31451A8758), UINT64_C(0x00039CB3690F9258), UINT64_C(0x00069351BF30A237), UINT64_C(0x000943CB31F201C2), UINT64_C(0x00056D93FDE091B5), UINT64_C(0x0007A6DAFB6FE56C), UINT64_C(0x00076EBD371AC14C), UINT64_C(0x00022219B02515D5)}}, {{UINT64_C(0x0007126658D45F84), UINT64_C(0x0005F94089210333), UINT64_C(0x0000DF0B1374230F), UINT64_C(0x0000C22084A59475), UINT64_C(0x0005B56056BEF979), UINT64_C(0x0003B18C16D005D1), UINT64_C(0x00009A3D6108A669), UINT64_C(0x0002B5446C86171D), UINT64_C(0x0003C25E4502353F), UINT64_C(0x0002AF979DDD05A1)}, {UINT64_C(0x000CE57EA911389C), UINT64_C(0x00060CBCB1000CD6), UINT64_C(0x0002AEF497970566), UINT64_C(0x0003002606F34647), UINT64_C(0x0005BAC30DE7C37E), UINT64_C(0x000ACE8DDCA7F508), UINT64_C(0x0004C49914338529), UINT64_C(0x000201F520B0AA42), UINT64_C(0x0003ACEB18EE94D1), UINT64_C(0x00043292408A3327)}}, {{UINT64_C(0x00071CFCF4149893), UINT64_C(0x0002FF24B716F1CF), UINT64_C(0x0002E9DD42D79E81), UINT64_C(0x0005F2E12A9D3787), UINT64_C(0x0000B67ABBDD6226), UINT64_C(0x000E14AD866F075E), UINT64_C(0x0000DF8C5452E7ED), UINT64_C(0x000179D614E61B47), UINT64_C(0x0005F5E532D764C5), UINT64_C(0x000134C30CA43904)}, {UINT64_C(0x0008A3D8E0E5028B), UINT64_C(0x0002AD02FF65DB2D), UINT64_C(0x000024B54F477366), UINT64_C(0x0004DF76000BEBD4), UINT64_C(0x0001BABEBBC5B492), UINT64_C(0x000293A99B9A4E9E), UINT64_C(0x0006DA8EC81880DF), UINT64_C(0x0004D62443F19541), UINT64_C(0x0007788BC32D12B7), UINT64_C(0x00053D73A62F6A5D)}}, {{UINT64_C(0x0008D1269BFE5E8B), UINT64_C(0x0000FE4C7CBD9622), UINT64_C(0x0003CF67B2F4ACFF), UINT64_C(0x0006A8A24518F03D), UINT64_C(0x000347DAE1827AD4), UINT64_C(0x000F291ACCCDE5C5), UINT64_C(0x0000C9C96024DBC2), UINT64_C(0x0006E1493787400F), UINT64_C(0x0004557C49C13B5E), UINT64_C(0x0001BBD5022E461F)}, {UINT64_C(0x00029EF080397D2A), UINT64_C(0x0007D3AEFB96A5DA), UINT64_C(0x0005CE903FC41243), UINT64_C(0x0007ACF27A77BE2F), UINT64_C(0x00069367C2BB5B2D), UINT64_C(0x000EA380A0F28EC9), UINT64_C(0x0004D091094729F5), UINT64_C(0x0000568ED1C33BAF), UINT64_C(0x0006FFC9FEC1754C), UINT64_C(0x00079AF250E87C71)}}, {{UINT64_C(0x0001B7181A9FE1E7), UINT64_C(0x0004BF3195C7079A), UINT64_C(0x00004C65A8623BD7), UINT64_C(0x000293D8EC50869E), UINT64_C(0x00061ECDC77A17C7), UINT64_C(0x00024A53FBCEF78C), UINT64_C(0x0006DE143AB5A0EC), UINT64_C(0x0004F508E8AD0226), UINT64_C(0x0006DB9363078A38), UINT64_C(0x0002687048D33591)}, {UINT64_C(0x00002320E24E6A1C), UINT64_C(0x000313A5A33B1564), UINT64_C(0x00032A7B146533BC), UINT64_C(0x00071698E42DC91D), UINT64_C(0x00013FC72B6E6862), UINT64_C(0x000192B68047991B), UINT64_C(0x00077CB246D0CF66), UINT64_C(0x00019BF6E968E141), UINT64_C(0x00022BEFB71228A7), UINT64_C(0x0007A8BE0F3AB802)}}, {{UINT64_C(0x0004ADD37A15BAF2), UINT64_C(0x0002BA4932A7035A), UINT64_C(0x0007F27F93062C33), UINT64_C(0x0001E46147E6199F), UINT64_C(0x0004849455CB21C9), UINT64_C(0x000DF6C55755F760), UINT64_C(0x00062C25D51F8005), UINT64_C(0x00018D552106AE65), UINT64_C(0x00036D4A8E15A67D), UINT64_C(0x0002EAE18E596E61)}, {UINT64_C(0x000A03842DB9836A), UINT64_C(0x00048F98CEFB00D3), UINT64_C(0x0005190809ADF2BA), UINT64_C(0x0002DFB56F0A20D0), UINT64_C(0x00027970FAA41846), UINT64_C(0x000A481D0AD15C42), UINT64_C(0x000613F431F58DB3), UINT64_C(0x00007B1DF30C2753), UINT64_C(0x000724A12A33FE21), UINT64_C(0x00061257C4C8D5D9)}}, {{UINT64_C(0x0006B38283640BFC), UINT64_C(0x00071A8876D2D39B), UINT64_C(0x0000F57FF4B7C4D2), UINT64_C(0x00048165C6651FA6), UINT64_C(0x000261CAB432E4D9), UINT64_C(0x0003A33A1024655B), UINT64_C(0x00016A80FB002EFE), UINT64_C(0x0007F53959DC0BF4), UINT64_C(0x000327B19C41762A), UINT64_C(0x0003AEB118550BD1)}, {UINT64_C(0x000194446473FAA4), UINT64_C(0x00056252C5E6D79B), UINT64_C(0x000385407B1E32BE), UINT64_C(0x0004F62D3BA2C380), UINT64_C(0x0006709FC90E66D9), UINT64_C(0x000BF2EFEC69E52A), UINT64_C(0x00025E53D4588CB4), UINT64_C(0x000767AF079A8486), UINT64_C(0x0006B1B2BCF33774), UINT64_C(0x00054711D18A6446)}}, {{UINT64_C(0x0002F65D12A437F5), UINT64_C(0x0004C193BB16BB5C), UINT64_C(0x00044CB11429B380), UINT64_C(0x000575B1D96C4371), UINT64_C(0x0004792169D089CC), UINT64_C(0x000A44E79CFC086D), UINT64_C(0x0007F7A9AA829C6C), UINT64_C(0x0000E51AD40E415B), UINT64_C(0x0003741299AE5AB0), UINT64_C(0x00034773AD27F4C8)}, {UINT64_C(0x0001088846755E86), UINT64_C(0x0007C43CEE739306), UINT64_C(0x0006DFB006FC973D), UINT64_C(0x00075D11ABB97E3F), UINT64_C(0x0006CE4EAD9FD40A), UINT64_C(0x00090DE95E0B71B8), UINT64_C(0x000677FB1CA2400F), UINT64_C(0x0001D6A9EAC1F91B), UINT64_C(0x0004B5A0DEA254E4), UINT64_C(0x00031843DB8ACA4B)}}, }, { {{UINT64_C(0x00040F0FEE5191D7), UINT64_C(0x0007AD757B218666), UINT64_C(0x00025B684155AF20), UINT64_C(0x00029F4B5C485180), UINT64_C(0x0007D8377347091F), UINT64_C(0x000A22940AF54A77), UINT64_C(0x0003BDF6CB1B3734), UINT64_C(0x000579D05F06E011), UINT64_C(0x00032F87199B836F), UINT64_C(0x000467CDC3E7620A)}, {UINT64_C(0x00099269E81CAEA9), UINT64_C(0x00060FAD5B89DD61), UINT64_C(0x0005D82009E159C4), UINT64_C(0x000543570882A388), UINT64_C(0x0005742B11F41567), UINT64_C(0x00005532CC1A04CF), UINT64_C(0x0007E7D67CA82018), UINT64_C(0x00030811921ED542), UINT64_C(0x00033B0153C0A9D2), UINT64_C(0x000027EEDE45D652)}}, {{UINT64_C(0x00054628B564DD25), UINT64_C(0x000278E72161A60B), UINT64_C(0x0002875070456F4D), UINT64_C(0x0000A471C5023AE6), UINT64_C(0x00053142CC156044), UINT64_C(0x000EB689710B36EE), UINT64_C(0x000749FE221A7A5D), UINT64_C(0x0005CE289B236184), UINT64_C(0x00064A9332E96DFA), UINT64_C(0x00019F74B7F23AA6)}, {UINT64_C(0x000047C80E1C6849), UINT64_C(0x00032C0409EB2702), UINT64_C(0x0005472D7A3265A6), UINT64_C(0x00007486A002948B), UINT64_C(0x0005B35D6DCD0117), UINT64_C(0x000F09583142990E), UINT64_C(0x00020994F45554BA), UINT64_C(0x0002A8A2ED9245E6), UINT64_C(0x0001FCB7F2469865), UINT64_C(0x0003ABDD4F76D182)}}, {{UINT64_C(0x0007EF170E5B61C6), UINT64_C(0x00072FD9870DA526), UINT64_C(0x00052A5CE07FB8A2), UINT64_C(0x000641090CDA363A), UINT64_C(0x0001F046CD11B1C9), UINT64_C(0x000C5ACA2B42DE77), UINT64_C(0x0003FA2D3D3A78D1), UINT64_C(0x00022EE52A68BA15), UINT64_C(0x0006ED9A8FFEDB9E), UINT64_C(0x000628597175CF09)}, {UINT64_C(0x0007233FAD040661), UINT64_C(0x0002DBF1724897C1), UINT64_C(0x00058AF887383FF2), UINT64_C(0x0001A82F626A8BA1), UINT64_C(0x000663B0E734D3AD), UINT64_C(0x00041A94CEBE29A8), UINT64_C(0x0000EBE98973931D), UINT64_C(0x0007653DABE4C434), UINT64_C(0x00077F080BA025B1), UINT64_C(0x0001349D8D6D5053)}}, {{UINT64_C(0x000BE1C7FB3EA365), UINT64_C(0x0000DEC547480E21), UINT64_C(0x0003063031574C24), UINT64_C(0x0004A1A78E047579), UINT64_C(0x000606500AB9A488), UINT64_C(0x00027F5C522D4690), UINT64_C(0x0001EDD9FF35555F), UINT64_C(0x00027FDC2B282190), UINT64_C(0x000683CED2B98C75), UINT64_C(0x000650923C157066)}, {UINT64_C(0x00092C9AF39CBACB), UINT64_C(0x0007D3858C2DD00B), UINT64_C(0x00031E676BBB7275), UINT64_C(0x0003AA2D98F4F933), UINT64_C(0x0003DCA9CE27A62B), UINT64_C(0x000A07F50B9E690F), UINT64_C(0x000051DF1C1BCD4A), UINT64_C(0x0003517B8AC99CFD), UINT64_C(0x0006367C0179F6E0), UINT64_C(0x0002CE5C968BCB6D)}}, {{UINT64_C(0x000200C339FA6063), UINT64_C(0x0002D8C7E4167214), UINT64_C(0x00043F59D8D68BBE), UINT64_C(0x00020ABF6635C5FA), UINT64_C(0x000676FC3B2B32D8), UINT64_C(0x000EBE9FD818DFC0), UINT64_C(0x0006D7A4486F3794), UINT64_C(0x000684F5E2DF04E3), UINT64_C(0x00032590E104D8CA), UINT64_C(0x0007F86F511DEAF5)}, {UINT64_C(0x00034E941C93C058), UINT64_C(0x00034819A8DA6A22), UINT64_C(0x000164AD4449303E), UINT64_C(0x00042BE59CA73B0D), UINT64_C(0x00014B7F6EA0A455), UINT64_C(0x00098C54814B4ED9), UINT64_C(0x0004C74E9049A134), UINT64_C(0x0001859C7C28787A), UINT64_C(0x0002BF6FCC75D79D), UINT64_C(0x0007A8E2129CEB51)}}, {{UINT64_C(0x00018E8A6D68977A), UINT64_C(0x000202BA27C4F548), UINT64_C(0x000765E7CECDA47B), UINT64_C(0x000363DB05A69000), UINT64_C(0x0005F96506BEB7D3), UINT64_C(0x00089C30791266ED), UINT64_C(0x00077E5CAB5C1F29), UINT64_C(0x0006E87E942A7A13), UINT64_C(0x0001FD90D57F757B), UINT64_C(0x0007B1FF16E524CF)}, {UINT64_C(0x0005EA5BBEA59591), UINT64_C(0x000427E51D91AE1C), UINT64_C(0x00070FC7F83A8541), UINT64_C(0x00069E9D31A36625), UINT64_C(0x00030C2ED2385F4C), UINT64_C(0x00095E9CEDC7EC18), UINT64_C(0x0004DF297D2AB731), UINT64_C(0x0007FD32EE0B4C2F), UINT64_C(0x0006423F55007B50), UINT64_C(0x000582AFCEAF6692)}}, {{UINT64_C(0x000132229C4BE432), UINT64_C(0x000062BDAF1A965D), UINT64_C(0x0002C1A7663C1E53), UINT64_C(0x00038DAE7DCFB8CC), UINT64_C(0x00072695BB1282ED), UINT64_C(0x0006EC32706E7F8F), UINT64_C(0x0004FDED61E285BE), UINT64_C(0x0003D1D5A48B6110), UINT64_C(0x000552ACEEFD0F10), UINT64_C(0x00011D10445A68E0)}, {UINT64_C(0x000CB3E30A36F50F), UINT64_C(0x0004A7B7557E35AE), UINT64_C(0x00066CFBF15B4D97), UINT64_C(0x0000508B08233B2E), UINT64_C(0x0003F31FB5C7AE10), UINT64_C(0x000E6621F3031E22), UINT64_C(0x000482990F4ECDC4), UINT64_C(0x000484D2AA8A0F24), UINT64_C(0x00009D4CF9C0A36A), UINT64_C(0x0001CC385C527853)}}, {{UINT64_C(0x000A4792A9EEE2A9), UINT64_C(0x00072FA6FDF2C7C6), UINT64_C(0x0007C7826E4812BE), UINT64_C(0x0006F6D236CF8FD6), UINT64_C(0x00073F81409D27AF), UINT64_C(0x0006499E587E37BE), UINT64_C(0x0001D910B9037DCA), UINT64_C(0x00076B6BA2C2DD1C), UINT64_C(0x0000C40F587E10E9), UINT64_C(0x0003A0C39693B06A)}, {UINT64_C(0x000B22437DF0A661), UINT64_C(0x000740D926C3CA81), UINT64_C(0x0004D6FC409922D3), UINT64_C(0x0006C8B0A63EBE3B), UINT64_C(0x0007A7E09C658E92), UINT64_C(0x000EE849F67956DF), UINT64_C(0x00009ACED8E8FE8F), UINT64_C(0x0001CD4640F2626A), UINT64_C(0x0000370AE99E0EF4), UINT64_C(0x000081E0D1461BE8)}}, {{UINT64_C(0x00073065330BAB74), UINT64_C(0x0001574E266A5243), UINT64_C(0x0002D1F64CEC7BBF), UINT64_C(0x0005B4B35FD5F97F), UINT64_C(0x0006E328070806B7), UINT64_C(0x000194194F915C7A), UINT64_C(0x00073D3745896020), UINT64_C(0x0005E613BB39AE2A), UINT64_C(0x00011D507ABCADE1), UINT64_C(0x0002EAF0689489D1)}, {UINT64_C(0x000058D096BDB2AB), UINT64_C(0x00069969F77F9CB1), UINT64_C(0x00039B6125B8F829), UINT64_C(0x00044A07AEC2D0C6), UINT64_C(0x000504B4F3946022), UINT64_C(0x00080D0DFA735E99), UINT64_C(0x0002BC6CCE0171E5), UINT64_C(0x0003D83527837207), UINT64_C(0x00066CBA871AC0F9), UINT64_C(0x00024A295AAEBA6A)}}, {{UINT64_C(0x000D2B933FA0DA3A), UINT64_C(0x00079892AF905B11), UINT64_C(0x00021863855AA63A), UINT64_C(0x00052D86FEC679D3), UINT64_C(0x000791B1FDE46EBE), UINT64_C(0x000AF24DC2D97724), UINT64_C(0x000430197793B4EF), UINT64_C(0x0001355100B792D4), UINT64_C(0x00067BC1C675D49F), UINT64_C(0x00013F553362D7E5)}, {UINT64_C(0x0004977612BCB0EB), UINT64_C(0x0003E50B8F31A3A8), UINT64_C(0x0007CD4AF5A9CB24), UINT64_C(0x0002D3E56A2C0F66), UINT64_C(0x0002D65C455CD2EF), UINT64_C(0x0002086963C9C7D0), UINT64_C(0x000145D5C4A9FFAE), UINT64_C(0x000619BAC8505C4A), UINT64_C(0x000027E3A7AE4A7A), UINT64_C(0x0000B67AD3689936)}}, {{UINT64_C(0x000CC7D3BF4762C0), UINT64_C(0x0001F746EDBE329E), UINT64_C(0x0001DF8B85050FA2), UINT64_C(0x0003BD3B0F568385), UINT64_C(0x000180BF161ABAC6), UINT64_C(0x0000215CE0594FA0), UINT64_C(0x00047C0CB6A73218), UINT64_C(0x0000DBAEA7BF27D7), UINT64_C(0x0002F869F09063DD), UINT64_C(0x00054D9BA9522E09)}, {UINT64_C(0x0002FE8D87A17CE0), UINT64_C(0x00057E4AC584E74A), UINT64_C(0x0002DAC318271EF4), UINT64_C(0x0002423F79D4DEB2), UINT64_C(0x0003E960755CCBC4), UINT64_C(0x000D266A7438DBF6), UINT64_C(0x000477E42DA16918), UINT64_C(0x0006B11A646B2B6A), UINT64_C(0x000431429BD1F7B7), UINT64_C(0x0006ED79801CF551)}}, {{UINT64_C(0x000C2F5AD403D304), UINT64_C(0x00000E16E8839A82), UINT64_C(0x0006E1D15D839778), UINT64_C(0x0005F5B10106BB12), UINT64_C(0x0005C19D486DD5C6), UINT64_C(0x000719C29C1E59DF), UINT64_C(0x000659479542B834), UINT64_C(0x0007ACDE37B973BE), UINT64_C(0x0003482AD9321747), UINT64_C(0x000505ADD6521552)}, {UINT64_C(0x000F913FC1522D09), UINT64_C(0x00037BFD0D4ABC49), UINT64_C(0x00001FA1DDC7C8F2), UINT64_C(0x000557253E6A7DB6), UINT64_C(0x0006E4F330384051), UINT64_C(0x000EB36BC2271684), UINT64_C(0x0006E60BC26E1F0F), UINT64_C(0x00054A6E03B188FB), UINT64_C(0x0003C21955E62B44), UINT64_C(0x00029C4483BA7D4D)}}, {{UINT64_C(0x000670CC3896EBA5), UINT64_C(0x000259CFB18CBAE2), UINT64_C(0x0006699793CC03B7), UINT64_C(0x0006E571D3FF8F29), UINT64_C(0x00001EB92283238D), UINT64_C(0x000F5DE25A4C21F7), UINT64_C(0x00021DA151657372), UINT64_C(0x0005351A570D55D1), UINT64_C(0x0005E3C40430A85A), UINT64_C(0x0001A3FAEB0F9878)}, {UINT64_C(0x00041F28CA0920E8), UINT64_C(0x0000528AA3286F64), UINT64_C(0x000550CD85825A5A), UINT64_C(0x0006A07132346430), UINT64_C(0x0006248B435552B3), UINT64_C(0x000C51E8492A342A), UINT64_C(0x000238B2E633EAE5), UINT64_C(0x00077EFF4FF5E3AF), UINT64_C(0x000737FE3C5938DC), UINT64_C(0x0003E7F342587F14)}}, {{UINT64_C(0x0000469EA4F316A5), UINT64_C(0x0000CFF01ADFC8EC), UINT64_C(0x000752DEE0AF6B42), UINT64_C(0x0000FBD7A1DB547A), UINT64_C(0x00071529F9CBFCB7), UINT64_C(0x0002EEF2C4E55DE9), UINT64_C(0x00068B08FC158B20), UINT64_C(0x0005BA1440B0CD47), UINT64_C(0x000770690268EB1C), UINT64_C(0x0004FEA766326EEE)}, {UINT64_C(0x0007E31940932215), UINT64_C(0x0006F953571E0D10), UINT64_C(0x000325DB7CA114C1), UINT64_C(0x0003346F1BDB76FF), UINT64_C(0x0004B2D608C398A0), UINT64_C(0x000880C15A6358CD), UINT64_C(0x00003A12DA7DAE1C), UINT64_C(0x00012A98295624DC), UINT64_C(0x0003F435F64DA03F), UINT64_C(0x00077E682761BD79)}}, {{UINT64_C(0x000725EBE3550E60), UINT64_C(0x00009759E82357AA), UINT64_C(0x000707477FAC3456), UINT64_C(0x00056FDC23023B2E), UINT64_C(0x00051E1365B47E4D), UINT64_C(0x000B5D849F58CA94), UINT64_C(0x000685BF93742A36), UINT64_C(0x0001A1BC548F6279), UINT64_C(0x000344BB9DE268D0), UINT64_C(0x0005FDFB2BC3DEF5)}, {UINT64_C(0x000848AFB0499C56), UINT64_C(0x00010DC37ABCFDEA), UINT64_C(0x0006C1811764BA4D), UINT64_C(0x0002A308A7745FCC), UINT64_C(0x00074CBB9E51FB1A), UINT64_C(0x000AC8D6F8659635), UINT64_C(0x000154D1F4F69089), UINT64_C(0x00028051B6633DBB), UINT64_C(0x0003335687BF4293), UINT64_C(0x0005ED908B0510A4)}}, {{UINT64_C(0x0004904C9668E6CD), UINT64_C(0x00079071B2B92E94), UINT64_C(0x0001E7AE6FF7AF6A), UINT64_C(0x0002127FE63573CD), UINT64_C(0x0000D3D1E41CDAC6), UINT64_C(0x00011204952E81CE), UINT64_C(0x000271F8C2A453E2), UINT64_C(0x0001B69F9248DB24), UINT64_C(0x000379D0353FB400), UINT64_C(0x0001295BB193D08F)}, {UINT64_C(0x000E90DA27BA514F), UINT64_C(0x0003159CBE1F9C35), UINT64_C(0x0005521CD6FEB8F3), UINT64_C(0x0005119F047F6EB1), UINT64_C(0x0004D5D0948D614B), UINT64_C(0x0006892CA0E25568), UINT64_C(0x0000FD25BBE0A6E7), UINT64_C(0x00021564372435F1), UINT64_C(0x00027D8B49CAD04C), UINT64_C(0x00007D5A2C89462D)}}, }, { {{UINT64_C(0x000F514B71EBBDCC), UINT64_C(0x0004035582F1B252), UINT64_C(0x0002A1C7C414989A), UINT64_C(0x0007743F23DC3274), UINT64_C(0x000791E243AE6EF8), UINT64_C(0x0009076C398D3FDA), UINT64_C(0x00055D23854865C6), UINT64_C(0x00067630F1F7A188), UINT64_C(0x0004FEF4830113F0), UINT64_C(0x0006EF4DC0128B39)}, {UINT64_C(0x000AE1F76A7AB992), UINT64_C(0x0003D7ABB33C7671), UINT64_C(0x0007A82D28545FE8), UINT64_C(0x00034AB6DCB3D487), UINT64_C(0x0007701ECE7EE900), UINT64_C(0x000E400E5BC2A1A4), UINT64_C(0x000693EAE58F5DF2), UINT64_C(0x00037BBA5ED12DB3), UINT64_C(0x0005ED5B1E21C1B3), UINT64_C(0x000641DC0D967E8B)}}, {{UINT64_C(0x00054C95BB0652B1), UINT64_C(0x00046F4FED58813D), UINT64_C(0x00050815BA4C242F), UINT64_C(0x0003C70A5ADB1CBD), UINT64_C(0x00018471501C557F), UINT64_C(0x00061B89E1DB46F5), UINT64_C(0x00030130047B6C15), UINT64_C(0x00024E7E179F958E), UINT64_C(0x00029B81AFD116BD), UINT64_C(0x0001F1C0E6F5B495)}, {UINT64_C(0x00023C05D2947309), UINT64_C(0x000077CE6739DA7A), UINT64_C(0x0007175E6FC632C3), UINT64_C(0x00079215145A49EE), UINT64_C(0x0005582902E4AEC2), UINT64_C(0x0003D193BC0C12D2), UINT64_C(0x0005BA6F099A5DF0), UINT64_C(0x000403F8EF0B4955), UINT64_C(0x000642EB7C8A43A1), UINT64_C(0x0005D32BCC2F8B89)}}, {{UINT64_C(0x00017EB1EE4CB1A1), UINT64_C(0x0006638C230FE375), UINT64_C(0x00023DCF4460C9F8), UINT64_C(0x0002497719F0A400), UINT64_C(0x00040836988B5191), UINT64_C(0x0004916DE1D1C20D), UINT64_C(0x0001141194F546D7), UINT64_C(0x00002179582ACA27), UINT64_C(0x0004DBC84C72F8E0), UINT64_C(0x00023C1DFC8EFD14)}, {UINT64_C(0x00070B7F76ADAF26), UINT64_C(0x0003C6CEB8B1DA8A), UINT64_C(0x0003FD11262FDAE0), UINT64_C(0x0002770D8C7E9FB3), UINT64_C(0x0006D3BD713575D9), UINT64_C(0x0007838C17F3658C), UINT64_C(0x00077F30784494CF), UINT64_C(0x0001CE5F8562296E), UINT64_C(0x0005C03FBD4434BB), UINT64_C(0x0001FF536CDDE62E)}}, {{UINT64_C(0x0001172A96A1E7D6), UINT64_C(0x0001098F9CBA5BBC), UINT64_C(0x00074F5479589BDA), UINT64_C(0x0003E78B80CE763C), UINT64_C(0x00045042B492B949), UINT64_C(0x000135B01953B25D), UINT64_C(0x000564A958658405), UINT64_C(0x00073391FC7A30CF), UINT64_C(0x00051DA995FAF2AC), UINT64_C(0x00008899D026CFE6)}, {UINT64_C(0x0002EF92641119A3), UINT64_C(0x0007CFCD3D8E8348), UINT64_C(0x000251D519AA1667), UINT64_C(0x0007524C025888AD), UINT64_C(0x0002847F5CB47F5C), UINT64_C(0x0000C637101A1799), UINT64_C(0x000684496C314774), UINT64_C(0x0005DF9F71863B37), UINT64_C(0x0003099895A2F373), UINT64_C(0x0000333CA2E94544)}}, {{UINT64_C(0x00070CCF02ECB2CC), UINT64_C(0x000105EF4D0A506E), UINT64_C(0x00007BF7A4DE2CA0), UINT64_C(0x0006DAB36E4422DE), UINT64_C(0x0005261AD9D05DF0), UINT64_C(0x000C9FCA9FCF1803), UINT64_C(0x00077F743B9F8F4A), UINT64_C(0x00054F8CFD871DBE), UINT64_C(0x00008369A88F23E3), UINT64_C(0x0004DE24D800793E)}, {UINT64_C(0x00080D00BBD99113), UINT64_C(0x000705E433C3D50A), UINT64_C(0x0000CC78397E7790), UINT64_C(0x00033741085A403B), UINT64_C(0x0006E31F0AE64239), UINT64_C(0x0004B8AE3CC6DEFC), UINT64_C(0x0007FC3C4D4BFA22), UINT64_C(0x0005A85FF42BA85E), UINT64_C(0x0005E2879D483F75), UINT64_C(0x000111B21C595B57)}}, {{UINT64_C(0x000B69E54FB31425), UINT64_C(0x0007670DB77E68C9), UINT64_C(0x000200548E67C390), UINT64_C(0x0007E58E7DA1316B), UINT64_C(0x00065C0A1A2EC1E9), UINT64_C(0x000566CC8A93BAED), UINT64_C(0x00034140BA9D29BD), UINT64_C(0x00066D8BC0434EC9), UINT64_C(0x000545F0A0BE9D95), UINT64_C(0x0005D43571D5259A)}, {UINT64_C(0x000CB66450379E4A), UINT64_C(0x0002EA896E3D63C2), UINT64_C(0x0000A1CBC3C15620), UINT64_C(0x0004F3A6795DCE0B), UINT64_C(0x0007A3F6DAC83AC6), UINT64_C(0x0005EC06F01B9BAD), UINT64_C(0x0006468A896619D3), UINT64_C(0x0003C2FAACC2C60B), UINT64_C(0x0006858F9F24FF57), UINT64_C(0x00011A6265D8A36E)}}, {{UINT64_C(0x00041C66E40F1A90), UINT64_C(0x0004E4F0180E78EF), UINT64_C(0x0003FB530CA47EAF), UINT64_C(0x0007ABB19E0A2FA0), UINT64_C(0x00041ABDD6CB403F), UINT64_C(0x000DAB4EEE08EF52), UINT64_C(0x00023FC4E743BC92), UINT64_C(0x0005B913456A7476), UINT64_C(0x0001C85ADE3AC4F1), UINT64_C(0x0004C1EA18C4581B)}, {UINT64_C(0x000AC8C9F1F7F0A6), UINT64_C(0x0007E11A1C557ED2), UINT64_C(0x0000E1E16CCE15D8), UINT64_C(0x000132838704418A), UINT64_C(0x0002E6AFA3B1E448), UINT64_C(0x000D76FF3FBC3F61), UINT64_C(0x00015097A2812475), UINT64_C(0x0000F295A5BC66CB), UINT64_C(0x0002FF9986FD6334), UINT64_C(0x000792181517F379)}}, {{UINT64_C(0x000593BFA181F4DE), UINT64_C(0x00076E78859CC727), UINT64_C(0x0000768CDCBCFB1D), UINT64_C(0x0002B147828E8906), UINT64_C(0x0004D189BBDFAF3E), UINT64_C(0x000F4188F2DE5620), UINT64_C(0x0005541E2603D86E), UINT64_C(0x00068B0163E24EF2), UINT64_C(0x000732F7A222EC67), UINT64_C(0x00030102005758D0)}, {UINT64_C(0x000965B8766CC610), UINT64_C(0x0006CED5C6750EC9), UINT64_C(0x0002510890A11A94), UINT64_C(0x00050A335E380C21), UINT64_C(0x0002D3AAA4B5ABB1), UINT64_C(0x000C3DEBF83FD12E), UINT64_C(0x00042A5B613A963D), UINT64_C(0x00048A5474D5B2CC), UINT64_C(0x0006DBC324E377DF), UINT64_C(0x0004A450113CC47F)}}, {{UINT64_C(0x00082FD2D666BA94), UINT64_C(0x000307B3C69374F1), UINT64_C(0x00030E4DCCADA50B), UINT64_C(0x00025121DD5AF46E), UINT64_C(0x0005DAE113DE717D), UINT64_C(0x000F540F6A242AF7), UINT64_C(0x0001984B2DEE5FE8), UINT64_C(0x000751006703C07F), UINT64_C(0x0003C4BED0C06C42), UINT64_C(0x0006834E2CFEAF97)}, {UINT64_C(0x00079EF331F8BE0C), UINT64_C(0x0006C58FB2C0D852), UINT64_C(0x000642C225B2131C), UINT64_C(0x0003F1F2DD654AF1), UINT64_C(0x0003F6D400299A16), UINT64_C(0x000A1D524B709913), UINT64_C(0x0007F61D15FA8CD7), UINT64_C(0x00007D279176192A), UINT64_C(0x0004CB0573788091), UINT64_C(0x00017B43566C1463)}}, {{UINT64_C(0x0007A50D58E645CD), UINT64_C(0x000717BFEFCEFD32), UINT64_C(0x00021533C2082002), UINT64_C(0x0000B6C97BE84215), UINT64_C(0x0003D9526234147F), UINT64_C(0x000736AFD37F86C3), UINT64_C(0x0001446C15A309FC), UINT64_C(0x00049F6A2E32732D), UINT64_C(0x0005A7F6B6BD0310), UINT64_C(0x00049050A86F7F6E)}, {UINT64_C(0x000478A084486F70), UINT64_C(0x0004B485E454FFE6), UINT64_C(0x00005134AC546D22), UINT64_C(0x00045EC4A7C0DB13), UINT64_C(0x0003AB8CCE7A0B15), UINT64_C(0x000601A238F1B5B3), UINT64_C(0x00063D63F830D881), UINT64_C(0x0000F2D0A86F5488), UINT64_C(0x00077A07AB5A6307), UINT64_C(0x0001A0E97FE656C5)}}, {{UINT64_C(0x0002B8E72C38FDE6), UINT64_C(0x0001650DDE9F2E2E), UINT64_C(0x00028EF99CEB5566), UINT64_C(0x00041C64DDA06D6A), UINT64_C(0x00005CB89B26AD37), UINT64_C(0x000A5F15A5F8AF03), UINT64_C(0x00025505F3937C0E), UINT64_C(0x000159B4CD9043F4), UINT64_C(0x000343C00F6BA0DB), UINT64_C(0x00047E9671AB1CFB)}, {UINT64_C(0x0007DE9E2086ECD6), UINT64_C(0x0000A7B07155978A), UINT64_C(0x00026C99DCA72BC9), UINT64_C(0x0004F4F2C6EB2ED1), UINT64_C(0x00074C9CE7C64240), UINT64_C(0x000A4D876B2764B2), UINT64_C(0x0005394454615D25), UINT64_C(0x000481776CCE078B), UINT64_C(0x000186A538247AB1), UINT64_C(0x000333D9943B1146)}}, {{UINT64_C(0x00084973CEDC2791), UINT64_C(0x0002950F48F39EEB), UINT64_C(0x0000EF6F70D1EFF2), UINT64_C(0x0004D3D6FD70FEAF), UINT64_C(0x000638ED86C3A27D), UINT64_C(0x000F9B23D52DAEF5), UINT64_C(0x0007DCA2C6212A71), UINT64_C(0x0003A72278C541D8), UINT64_C(0x0000D206D53E4F6B), UINT64_C(0x0007CC2FD213C6D8)}, {UINT64_C(0x0009C9835F59129E), UINT64_C(0x0007F4A22C2FB8AC), UINT64_C(0x0000EB9FBBDAB0AF), UINT64_C(0x000397BE0B58FC49), UINT64_C(0x0000D58A5D14AA83), UINT64_C(0x000CBCDEEF3C688F), UINT64_C(0x0007F56D84202AE6), UINT64_C(0x0001AACDE92E0055), UINT64_C(0x0006A0198A5DD4EF), UINT64_C(0x00009072B8CFBB20)}}, {{UINT64_C(0x000F7FEC5A5D3591), UINT64_C(0x0003CC91186CC1D7), UINT64_C(0x0000539F22D56CB3), UINT64_C(0x00014418785A7E75), UINT64_C(0x0007DD55510142B3), UINT64_C(0x00027C9298FBB5F7), UINT64_C(0x0002E6839156F4F1), UINT64_C(0x00006806E7AF3BDD), UINT64_C(0x00017FEEBFA3E11C), UINT64_C(0x0005E3B668C8CF1E)}, {UINT64_C(0x0002E308DB4D3ABB), UINT64_C(0x0002519214DBB309), UINT64_C(0x00053F1D5795FB73), UINT64_C(0x00006C5A6BA835DE), UINT64_C(0x0007282B5833FF0C), UINT64_C(0x0007CA1C54F0B679), UINT64_C(0x00067F8A25FBF269), UINT64_C(0x00006A247708AB5B), UINT64_C(0x000271FDD248BDC5), UINT64_C(0x00001617D43FC96F)}}, {{UINT64_C(0x000530DC05A439D4), UINT64_C(0x0002C89DF13D212F), UINT64_C(0x00006CD963D870CE), UINT64_C(0x00070E6A17E094DF), UINT64_C(0x0005335D7B440052), UINT64_C(0x0005D20A7FC5B6E6), UINT64_C(0x0000816C1BD2E991), UINT64_C(0x00015BFD4D6A50B8), UINT64_C(0x000611290ED60372), UINT64_C(0x000252141FDE02E6)}, {UINT64_C(0x000EE270D2D5D91D), UINT64_C(0x00064864D00DF773), UINT64_C(0x0002CDF8C5BDD29E), UINT64_C(0x0004B4D19D843238), UINT64_C(0x0001E7349DF960FB), UINT64_C(0x000AB7E45A9B26DB), UINT64_C(0x0002D5282F6EE449), UINT64_C(0x0004F9B215872CD1), UINT64_C(0x0002F931EDC40DD7), UINT64_C(0x0004C76A77256A9F)}}, {{UINT64_C(0x0006A781358C169E), UINT64_C(0x000093BAB2A31F43), UINT64_C(0x0002C0B13C7E6C0A), UINT64_C(0x00035E6DBE645073), UINT64_C(0x00027A3CF6B52BB2), UINT64_C(0x0007090F7CD7F0B6), UINT64_C(0x00049B2C3B592E30), UINT64_C(0x0002359164A5EB6A), UINT64_C(0x0004DC6C9A544458), UINT64_C(0x0007423068D875B5)}, {UINT64_C(0x00059D79EBA27F83), UINT64_C(0x0005D19F0CBC111F), UINT64_C(0x000753952EB35496), UINT64_C(0x00062897B4108C18), UINT64_C(0x0006D7F09D866E46), UINT64_C(0x0005897E202402FA), UINT64_C(0x0001D12E39D2981C), UINT64_C(0x0004D1F9BD50FDDC), UINT64_C(0x00060754737FA4EC), UINT64_C(0x0004B66C109681C2)}}, {{UINT64_C(0x00091EB3450A8B6F), UINT64_C(0x0006E67784D11649), UINT64_C(0x00052A0A75E83A4C), UINT64_C(0x0000C7EF54A33FAB), UINT64_C(0x0007E4B1F177CCAC), UINT64_C(0x000B1572C584C7B2), UINT64_C(0x0003F88F3DDE8AF6), UINT64_C(0x00055A76B8A9FEC4), UINT64_C(0x0004D726D797ABF3), UINT64_C(0x000063A37056B2C1)}, {UINT64_C(0x000BEC5B8D4113B1), UINT64_C(0x0004AF1E78531E4F), UINT64_C(0x0003A706B01EA69E), UINT64_C(0x000114C7197A503E), UINT64_C(0x00068D6405B730D6), UINT64_C(0x00037F60FB050D8E), UINT64_C(0x0002625FCDD6414D), UINT64_C(0x0000A66900D00C7B), UINT64_C(0x0007AADE957078F1), UINT64_C(0x000708B1373BF752)}}, }, { {{UINT64_C(0x000C3BAB92C31CE5), UINT64_C(0x00002134ECD1DE22), UINT64_C(0x000610E7706C8F42), UINT64_C(0x0004D37D742251A7), UINT64_C(0x0003F0AD3A1A8A28), UINT64_C(0x0005B53175168302), UINT64_C(0x0007812CA56B0662), UINT64_C(0x0006DBA3FECD0E65), UINT64_C(0x000488903D3A2C5C), UINT64_C(0x000356F226A3070C)}, {UINT64_C(0x000C6272379969A8), UINT64_C(0x000030E999753799), UINT64_C(0x00006FA2FD45CF73), UINT64_C(0x0005B8B69287AF76), UINT64_C(0x0005213C07A81179), UINT64_C(0x0008D822B335452D), UINT64_C(0x000011E080D0121B), UINT64_C(0x000337047AED499C), UINT64_C(0x0005F3F0DAE82068), UINT64_C(0x000287D13EDC6853)}}, {{UINT64_C(0x000890BAE3CD0A60), UINT64_C(0x0007CFCB31DC10E6), UINT64_C(0x00042A0AD557A444), UINT64_C(0x0005E3E8DEDD318E), UINT64_C(0x0004B768FB3B1B2D), UINT64_C(0x000A74BE0F89CA10), UINT64_C(0x0003022817A331F0), UINT64_C(0x000398531778D3CE), UINT64_C(0x0003F92B536499CA), UINT64_C(0x00039BBC19367C44)}, {UINT64_C(0x0003D17E79CF10DA), UINT64_C(0x00041C136308597C), UINT64_C(0x0001C7CFCC962C3F), UINT64_C(0x0005F7010BF5A11D), UINT64_C(0x00018E8314AB3E4C), UINT64_C(0x000B784160490F36), UINT64_C(0x00002C72D731F23C), UINT64_C(0x00059E1083EF050E), UINT64_C(0x00029D7C307711F7), UINT64_C(0x00028978EEF174D0)}}, {{UINT64_C(0x0000B2EDE471ED48), UINT64_C(0x00049FF7F87A8FDE), UINT64_C(0x000407DAC8E66330), UINT64_C(0x00017A99137DCD53), UINT64_C(0x000413D5BA8A3E49), UINT64_C(0x00069E2849ED7ACF), UINT64_C(0x00011A49582E3C16), UINT64_C(0x0003EF82C8E245ED), UINT64_C(0x0002209E0B7EA09E), UINT64_C(0x000640B26788B817)}, {UINT64_C(0x000FB77EC4895293), UINT64_C(0x000521EE12FEC7C5), UINT64_C(0x0006B87272F0F4BE), UINT64_C(0x000743571A70D3FA), UINT64_C(0x00012A853508E676), UINT64_C(0x000C8E90D720C744), UINT64_C(0x0004E53325BF55D5), UINT64_C(0x00022141D2FC04DE), UINT64_C(0x0002C08E37CCB8A9), UINT64_C(0x0005B2FF2928CA19)}}, {{UINT64_C(0x00093112664E6955), UINT64_C(0x000318FAC599B3B0), UINT64_C(0x0004E86FFA5DC372), UINT64_C(0x00011CEA6B7ED8B5), UINT64_C(0x00032C5BB4D4B3E4), UINT64_C(0x00012FAB789556A8), UINT64_C(0x0005FD6D51C50C39), UINT64_C(0x0001F53B8DF4EB2C), UINT64_C(0x0003DC5A71DF97A9), UINT64_C(0x000202CBFD6A2695)}, {UINT64_C(0x000A8D3B3805ED4E), UINT64_C(0x0006E97BF7B19A75), UINT64_C(0x000020C8EF1A157A), UINT64_C(0x0000DDAD96ECC141), UINT64_C(0x000634B69890E950), UINT64_C(0x000BCFBDA6464E18), UINT64_C(0x00057A50EC40E5E7), UINT64_C(0x000369C5C34E75A1), UINT64_C(0x0001DDDA57109D52), UINT64_C(0x000109C8DA359727)}}, {{UINT64_C(0x000DC858E40E2D09), UINT64_C(0x0006583010E4FCF5), UINT64_C(0x0005616E9FBECEE8), UINT64_C(0x0004CC7EC96FFCA8), UINT64_C(0x0005436EDC94F6C0), UINT64_C(0x0001BFB47EC04EC2), UINT64_C(0x000353148F9B2046), UINT64_C(0x0002E68773E2D458), UINT64_C(0x000128904A0917E3), UINT64_C(0x0007E5A730228042)}, {UINT64_C(0x000447DEFB88BB4F), UINT64_C(0x00012D87179A012D), UINT64_C(0x0002379DFC6577E4), UINT64_C(0x000646EB1BA5867E), UINT64_C(0x0004927A6707CB7F), UINT64_C(0x000F2F4B5DD2C056), UINT64_C(0x000148E5C0EB9590), UINT64_C(0x000022E829ADA8D2), UINT64_C(0x00066C299B36127A), UINT64_C(0x000208ACAE17BA18)}}, {{UINT64_C(0x0003FD0BE2AFDA6A), UINT64_C(0x00079A3A05AFE09A), UINT64_C(0x00024431B9238AF6), UINT64_C(0x000196CDCEEABC5D), UINT64_C(0x0005CD6BA856B384), UINT64_C(0x0003376ABB9C7D13), UINT64_C(0x0000E28403D233B1), UINT64_C(0x0001E3E601F20B20), UINT64_C(0x000553A7F33316D7), UINT64_C(0x00077A41CF9D1895)}, {UINT64_C(0x00018114833694B4), UINT64_C(0x00066ACE25DEC0AC), UINT64_C(0x000000AD04607BBE), UINT64_C(0x0001C2BBD9D88ED5), UINT64_C(0x000207EF8CDA325D), UINT64_C(0x0008C36267211FB6), UINT64_C(0x0004148ABE972485), UINT64_C(0x00032559C1C5BC5F), UINT64_C(0x0000D7CC34EB0616), UINT64_C(0x0006CFEBFC675164)}}, {{UINT64_C(0x0006391786A18B11), UINT64_C(0x00072B22981C2BBC), UINT64_C(0x00064B2DCDABB7B4), UINT64_C(0x000307055034DD3A), UINT64_C(0x00051C4CAE5629B9), UINT64_C(0x0007AAF27949F035), UINT64_C(0x0002346889D53C01), UINT64_C(0x0006F67E4A19CA62), UINT64_C(0x000331666606352F), UINT64_C(0x0005374DF049C2AC)}, {UINT64_C(0x0002B2B3139457D6), UINT64_C(0x000351A98E4D4EB2), UINT64_C(0x0003DC00C4EBC1E7), UINT64_C(0x00017CA9107B252F), UINT64_C(0x0007D9A4523CFBEB), UINT64_C(0x00037F677495611A), UINT64_C(0x00032ACDFB65FA6E), UINT64_C(0x000005C03EBCCAC4), UINT64_C(0x00044D67340F21A9), UINT64_C(0x0006F83F5FED3656)}}, {{UINT64_C(0x000E79AA3546F16F), UINT64_C(0x0000A94AF4903B11), UINT64_C(0x0005BFBC2B88E83A), UINT64_C(0x0001616214CA6D22), UINT64_C(0x0002F33B14AC87D4), UINT64_C(0x000DC3668AC17EC3), UINT64_C(0x0003F9A5CD0FA18C), UINT64_C(0x00012136A765687B), UINT64_C(0x000477263FD5ADD5), UINT64_C(0x00047574A89B0A9F)}, {UINT64_C(0x00086FD1F3EC5E19), UINT64_C(0x0001A0517754F902), UINT64_C(0x0003FBB71A4EF414), UINT64_C(0x00060C166C23D6D5), UINT64_C(0x0003CB4401A452C9), UINT64_C(0x00084139B2A26F87), UINT64_C(0x000194184853F0AF), UINT64_C(0x000725C3E883547A), UINT64_C(0x00007311B46CFE9E), UINT64_C(0x0006272C00057E36)}}, {{UINT64_C(0x00091526FAFA38D9), UINT64_C(0x00013C7B17BEB483), UINT64_C(0x0005FBC53CC1E78B), UINT64_C(0x0000C1040CBB5D8E), UINT64_C(0x0003A0AF18FC9ADE), UINT64_C(0x0007BC9B9B737A51), UINT64_C(0x00058EAEC3E9FED9), UINT64_C(0x0000D346CF710790), UINT64_C(0x0003BE2B75105FA1), UINT64_C(0x0004D079255CE7B8)}, {UINT64_C(0x00006C7D92D0825D), UINT64_C(0x00027A8C0386749E), UINT64_C(0x0001C5B09D0FC792), UINT64_C(0x0002C2B760A9C963), UINT64_C(0x0001524437DB7579), UINT64_C(0x0001B37F4B60ABD4), UINT64_C(0x0007FE579406D534), UINT64_C(0x0002739C0C35BD00), UINT64_C(0x00051086E45FFF04), UINT64_C(0x0003F4C9935FE354)}}, {{UINT64_C(0x0004E5D268BD8A83), UINT64_C(0x000377586FC26AA0), UINT64_C(0x00030113A02CBC64), UINT64_C(0x000692EB25CA12F0), UINT64_C(0x0001A47E293F9D79), UINT64_C(0x000DD2612D416AA9), UINT64_C(0x00019FAC853D7BDD), UINT64_C(0x00001B9C4E8811EC), UINT64_C(0x000164570C0AABCB), UINT64_C(0x0002DBCACCC287E8)}, {UINT64_C(0x00027EADFBCEA391), UINT64_C(0x000406BA866FB97C), UINT64_C(0x000250E70AA28457), UINT64_C(0x0000CE5D6B77F502), UINT64_C(0x0007E1FE982DC604), UINT64_C(0x00077DC8CD9AEDE3), UINT64_C(0x0006EECC4E8C56CC), UINT64_C(0x000529E001D51C07), UINT64_C(0x0000D42CF53B5E54), UINT64_C(0x00059F46F2041F90)}}, {{UINT64_C(0x000A993579C46A7C), UINT64_C(0x0003FADB3C50214A), UINT64_C(0x0007552587801072), UINT64_C(0x00008E9ED9922E64), UINT64_C(0x0001D65D1FE863B0), UINT64_C(0x000B68B2D984977E), UINT64_C(0x00026F8BCC4EF71E), UINT64_C(0x0004580D2CF9C07C), UINT64_C(0x0005F7DB9F7C5608), UINT64_C(0x00039723A14ADB8F)}, {UINT64_C(0x0001FC8374852517), UINT64_C(0x0004EFCD85E78688), UINT64_C(0x0005BA5C6E340E04), UINT64_C(0x0002AD5541C4F7E0), UINT64_C(0x0007AFEAD74D7911), UINT64_C(0x000772EEA94A657C), UINT64_C(0x000372BB0B3340C5), UINT64_C(0x0002DFFC3FE428C3), UINT64_C(0x0007780B19634458), UINT64_C(0x000396C2E8AD8E1B)}}, {{UINT64_C(0x000A0DC2AEA8D665), UINT64_C(0x000497C1A0EAAB74), UINT64_C(0x00034918630C5E96), UINT64_C(0x00021960961A8492), UINT64_C(0x00056059C4ACA995), UINT64_C(0x000FDDE1D84A2BCA), UINT64_C(0x0003E28D6D947C37), UINT64_C(0x00059FA17EA39CB1), UINT64_C(0x0002B2B829872434), UINT64_C(0x0001AD4DAEAA9FE2)}, {UINT64_C(0x000F2E4853E5AF32), UINT64_C(0x0004693D39964BD6), UINT64_C(0x0006A84B327FFE47), UINT64_C(0x0002F3C1238E197A), UINT64_C(0x0003790974398BDF), UINT64_C(0x000FF31F3581AF07), UINT64_C(0x0004C239726330EE), UINT64_C(0x0002C366AFC8A963), UINT64_C(0x0005B30D24500CBF), UINT64_C(0x0007D9C6B29592A1)}}, {{UINT64_C(0x000E71DDD57E8296), UINT64_C(0x000346C03100FF87), UINT64_C(0x00046A920C6C7EF3), UINT64_C(0x00017883AE0679DA), UINT64_C(0x0007371362C409A2), UINT64_C(0x0003F3FD0398532B), UINT64_C(0x00047C47A292C97E), UINT64_C(0x0003E20A94F0DAB2), UINT64_C(0x000615A39700E27A), UINT64_C(0x0004DD4F52D80B70)}, {UINT64_C(0x000D8189C3E7FF9B), UINT64_C(0x0006A323F12ACCE3), UINT64_C(0x000218561CEBE916), UINT64_C(0x000582DFFA5B6244), UINT64_C(0x00017E86803253FE), UINT64_C(0x000F6E066437E671), UINT64_C(0x00003379D07B3571), UINT64_C(0x00028E80792D0F88), UINT64_C(0x0003ADB5E00F7D48), UINT64_C(0x0004490947B64CC1)}}, {{UINT64_C(0x000966BA117EB5A0), UINT64_C(0x0003EAD0F9635F78), UINT64_C(0x0001127434D7F565), UINT64_C(0x000166F7EFE73A42), UINT64_C(0x0006E1EB3EE2C95B), UINT64_C(0x0002169A44ADD28F), UINT64_C(0x0007D099F80F5E40), UINT64_C(0x00001673EEDC2717), UINT64_C(0x0006D35CE7C87042), UINT64_C(0x0001F1659FA895C4)}, {UINT64_C(0x0000CDA418AFEEA2), UINT64_C(0x00022BB4CD3D78EA), UINT64_C(0x0007CCB3C8415D6C), UINT64_C(0x00072FAD0144A08F), UINT64_C(0x0006AD7BD312743A), UINT64_C(0x0009717E7E313571), UINT64_C(0x00030507C307B184), UINT64_C(0x00037E8A184867EE), UINT64_C(0x0005A0F950ED5715), UINT64_C(0x00035FB26907AA86)}}, {{UINT64_C(0x00087069CFCD15C6), UINT64_C(0x0005E74CAE8DD69A), UINT64_C(0x00077415248EC6CF), UINT64_C(0x00039CFB19D98136), UINT64_C(0x0004102ADA4617F0), UINT64_C(0x00091344A9950D43), UINT64_C(0x0007F37FAA893404), UINT64_C(0x0000894C6ED07059), UINT64_C(0x0001CBD2D8C191AE), UINT64_C(0x0005E7D0A8D6C1FB)}, {UINT64_C(0x000D8A6DCD86A648), UINT64_C(0x00069DFB00FAC67A), UINT64_C(0x00055E4E4A8BF53E), UINT64_C(0x00052C3F21F19F1A), UINT64_C(0x000199681E75B076), UINT64_C(0x000B461379ABA50E), UINT64_C(0x00027C35B013932E), UINT64_C(0x0003E43D98DC3C8B), UINT64_C(0x0005299D0D27C3FF), UINT64_C(0x000501003FB5C76B)}}, {{UINT64_C(0x0002584D9F215747), UINT64_C(0x0007BE751EE9975B), UINT64_C(0x0006739CFFA040AB), UINT64_C(0x00021F693AB51286), UINT64_C(0x0004378F5B99BA03), UINT64_C(0x00092021DCD03E29), UINT64_C(0x00029C3D833529D1), UINT64_C(0x0003218DAA201C66), UINT64_C(0x00068DD2830252B2), UINT64_C(0x0000C547881361FE)}, {UINT64_C(0x0004DA1DDF2727C5), UINT64_C(0x000141088C10F286), UINT64_C(0x00033EFA65C7AD64), UINT64_C(0x000309E225C521F2), UINT64_C(0x000165C50DA477FD), UINT64_C(0x0006A39D52AC02AF), UINT64_C(0x000583FDD7E42212), UINT64_C(0x00049409EBFF68E5), UINT64_C(0x0003F0AC36D8B5F7), UINT64_C(0x0007F9BFC22F82AF)}}, }, { {{UINT64_C(0x0002372DBC024334), UINT64_C(0x0003AC04780C37E6), UINT64_C(0x0000B462B14E1199), UINT64_C(0x000789AB88A9152C), UINT64_C(0x0004669A83086007), UINT64_C(0x0002875233E2BB95), UINT64_C(0x000164D14E6DD133), UINT64_C(0x0007834C96D7F2E1), UINT64_C(0x0000376AF8A1FB72), UINT64_C(0x00025E655DD42C55)}, {UINT64_C(0x000BC3F8D59BD4F8), UINT64_C(0x0004295AE12759FE), UINT64_C(0x0001710B8788649D), UINT64_C(0x00063FB5252144E8), UINT64_C(0x0000FB67B48BFB15), UINT64_C(0x000EF2243C620B1A), UINT64_C(0x00043471BAB61989), UINT64_C(0x000297865EB6854C), UINT64_C(0x00041EC649B840B6), UINT64_C(0x0000DBB860FE03FD)}}, {{UINT64_C(0x000F3F668337995A), UINT64_C(0x0000D23F1A076787), UINT64_C(0x000559B19C7D6F35), UINT64_C(0x0001F5D63B1D816A), UINT64_C(0x0004919133B61F8E), UINT64_C(0x00031862225D9C14), UINT64_C(0x0003C6604EA7EF2F), UINT64_C(0x00062AF2D864BE9B), UINT64_C(0x0004E75593316CB0), UINT64_C(0x0006270C9215DEE8)}, {UINT64_C(0x00079DDB43AE991A), UINT64_C(0x0000D9D288C5279D), UINT64_C(0x00010A5CE9E2122D), UINT64_C(0x0006627C1899977C), UINT64_C(0x0004545C3F73568F), UINT64_C(0x00041DA4E722FDD7), UINT64_C(0x0001D1CA3BA6C0E4), UINT64_C(0x000154DDB8B11262), UINT64_C(0x00076A8BBB916CBA), UINT64_C(0x000264F61CEB449C)}}, {{UINT64_C(0x000C03E88F01C0CF), UINT64_C(0x0002DE2458CBF5D8), UINT64_C(0x00059AB57877E3A8), UINT64_C(0x000022BA99E9FF36), UINT64_C(0x0006E3D7F3651BA4), UINT64_C(0x00091A76C49112C9), UINT64_C(0x00033BFF09F31D44), UINT64_C(0x00037DF6585ECCB8), UINT64_C(0x00031E08F635DFAB), UINT64_C(0x00061B6BEEA111BC)}, {UINT64_C(0x000EC7C8AED31D53), UINT64_C(0x0001C2D420733AED), UINT64_C(0x00028A0A574AB6AC), UINT64_C(0x0000C07A2A7F50B8), UINT64_C(0x000146FAE597AF65), UINT64_C(0x000BFB422415D9A7), UINT64_C(0x0003B3FAF595D88B), UINT64_C(0x00016FABFA94B1DD), UINT64_C(0x00077BD9F4E1A511), UINT64_C(0x0001ED87CB724465)}}, {{UINT64_C(0x000213F3A12FADCB), UINT64_C(0x00073702A45BFCC2), UINT64_C(0x00005344B6A0BE9D), UINT64_C(0x0005780B5541C989), UINT64_C(0x0004689EA1E50219), UINT64_C(0x0005B3C5CE5DF752), UINT64_C(0x000187B449599429), UINT64_C(0x0004F3F92602410B), UINT64_C(0x00008266C08FAD01), UINT64_C(0x00006449FDC76A08)}, {UINT64_C(0x0001290134E207CC), UINT64_C(0x0005FC0BF00CD133), UINT64_C(0x0005093E94846544), UINT64_C(0x0001904D36A7E4E0), UINT64_C(0x0006CFB29FCB4C43), UINT64_C(0x00021A5E794AD08A), UINT64_C(0x00049AF3B74BD0CA), UINT64_C(0x0003D12DD54A42E0), UINT64_C(0x00020F8191FC6C17), UINT64_C(0x0005271ACF2BEF13)}}, {{UINT64_C(0x0003973D23C5FC40), UINT64_C(0x00022C79CF716759), UINT64_C(0x000698E37C807E96), UINT64_C(0x00061499D8A20942), UINT64_C(0x0003CA6565D1591A), UINT64_C(0x000376C82319132C), UINT64_C(0x0000AB592C414D58), UINT64_C(0x00078DCD766F3A9F), UINT64_C(0x000235326903A314), UINT64_C(0x0001C533CF655AFB)}, {UINT64_C(0x000417ABAE4343FF), UINT64_C(0x0000CC1BEBE8BA73), UINT64_C(0x00035CFD9C4CD9EB), UINT64_C(0x000525DDECFE78DD), UINT64_C(0x0004018B732A3EA9), UINT64_C(0x0004158841836B35), UINT64_C(0x00013A9FC11821AB), UINT64_C(0x0001A62E3E9F6760), UINT64_C(0x00019D2F382BFC5A), UINT64_C(0x00048B8C5EE1498A)}}, {{UINT64_C(0x00067BC07969E710), UINT64_C(0x00056FE1647FF971), UINT64_C(0x00056B9EC60E5571), UINT64_C(0x0004FF5FF4D6D59D), UINT64_C(0x00048349FDBC6F40), UINT64_C(0x0000EDA3EDA8889B), UINT64_C(0x0000C724742965C9), UINT64_C(0x0004CA3A42627635), UINT64_C(0x00047141B8D6F392), UINT64_C(0x0003D2FEDEAA1C29)}, {UINT64_C(0x000716C803508620), UINT64_C(0x0004F95142A62BB6), UINT64_C(0x000486FEE8AA4AD7), UINT64_C(0x0007AEE5F2F7D145), UINT64_C(0x00073A3D7B302EEA), UINT64_C(0x000C31B194B33CB5), UINT64_C(0x0005E8F7E9DB0F29), UINT64_C(0x00026804A1976839), UINT64_C(0x000224312A20168B), UINT64_C(0x0004C6397AFDC614)}}, {{UINT64_C(0x000B366A0560CD66), UINT64_C(0x0005ACD26E6E7D4B), UINT64_C(0x0001A29126E560EF), UINT64_C(0x00077D0A85F35263), UINT64_C(0x00066BB4F7909A61), UINT64_C(0x000089487A0F6CA2), UINT64_C(0x00004201AC59EC89), UINT64_C(0x0003517D862DA268), UINT64_C(0x0004E06334DCBFC2), UINT64_C(0x000542129BF06EDC)}, {UINT64_C(0x0009AC6AC40ECFAD), UINT64_C(0x0004A4A6435450F2), UINT64_C(0x0003884DC2B01CE7), UINT64_C(0x00033DFEBB566E48), UINT64_C(0x000578290964FDAC), UINT64_C(0x00023B7A353BC889), UINT64_C(0x0005060A08B7EE8B), UINT64_C(0x0007AB7A129FEBF9), UINT64_C(0x000546502F940252), UINT64_C(0x0001DBB0164F28EF)}}, {{UINT64_C(0x00018A4A75F64304), UINT64_C(0x00046FFF5757186A), UINT64_C(0x000114066ED84642), UINT64_C(0x0002551CC10C6D4D), UINT64_C(0x000402FACD10897C), UINT64_C(0x00015C0E2DCC992B), UINT64_C(0x00040E8F0EBF60EE), UINT64_C(0x000060EB6563E9C6), UINT64_C(0x0003B809A3126313), UINT64_C(0x00017A66BDC55746)}, {UINT64_C(0x0009062DED579427), UINT64_C(0x00044A5F128A6E10), UINT64_C(0x000151DC6DCB8F89), UINT64_C(0x000141A87B41F52E), UINT64_C(0x0000D7A6A002BD72), UINT64_C(0x000E8B9C9303AC1F), UINT64_C(0x0001834AD28690AA), UINT64_C(0x00032ADCC504A8B7), UINT64_C(0x0000A927B2B2E93B), UINT64_C(0x0002A737885EE993)}}, {{UINT64_C(0x0006BCF992E8B9F6), UINT64_C(0x00040A05E593A37A), UINT64_C(0x0003A56755FA1A2F), UINT64_C(0x0003C89364FAE34E), UINT64_C(0x0007E77DBC3D88C6), UINT64_C(0x0002ED2A5FAC8E6E), UINT64_C(0x0005FAFA89C46962), UINT64_C(0x0004DBFA31641429), UINT64_C(0x0000DB79C8D1176F), UINT64_C(0x00019941D0C3522A)}, {UINT64_C(0x00041A75E1C8E526), UINT64_C(0x0004C6B783802833), UINT64_C(0x0001B562BAFECB1F), UINT64_C(0x0003E09662D4B955), UINT64_C(0x00036C04E510554C), UINT64_C(0x000E4C0F87B4805F), UINT64_C(0x00073B95C41A7C5A), UINT64_C(0x00010377BD353B8C), UINT64_C(0x0000E2A301E84DD8), UINT64_C(0x0004AA08670DB7E8)}}, {{UINT64_C(0x00056A0D36E91A81), UINT64_C(0x0007AE104EAE22F7), UINT64_C(0x000377C28F77E9A6), UINT64_C(0x00077E662A50D752), UINT64_C(0x0000806A44DC69B2), UINT64_C(0x0007C6E8FEC3651E), UINT64_C(0x0003B809BA19FDFE), UINT64_C(0x0002B748E1AF6B23), UINT64_C(0x00013D51330F00A4), UINT64_C(0x000054847211A69E)}, {UINT64_C(0x00012FB021D29481), UINT64_C(0x0006FA2B27174477), UINT64_C(0x0003C6438378319E), UINT64_C(0x0000FFD2B056F1C6), UINT64_C(0x0004D77E75145534), UINT64_C(0x00020A7895D994A3), UINT64_C(0x0003166E20D7EAB2), UINT64_C(0x0006B6D0CB136A52), UINT64_C(0x0002B5C30551AFC3), UINT64_C(0x00068443D6142CD4)}}, {{UINT64_C(0x000408A9351DFB46), UINT64_C(0x0006B998F97E7968), UINT64_C(0x0005B54EB77BAE87), UINT64_C(0x0001D1547584B3F6), UINT64_C(0x0000DEC5666F2759), UINT64_C(0x00097223408D9F44), UINT64_C(0x0004E4F55A177F66), UINT64_C(0x000008514532470B), UINT64_C(0x0000856C14AE04B3), UINT64_C(0x00061CA70F3895B4)}, {UINT64_C(0x000253C057F4BB69), UINT64_C(0x0001163F0D6F162A), UINT64_C(0x00016E781BFFB4F3), UINT64_C(0x0001F13813403F57), UINT64_C(0x000720EC959BE2A5), UINT64_C(0x00004CAD26FC8BC3), UINT64_C(0x0004430E9FD18B54), UINT64_C(0x000127BC205199CF), UINT64_C(0x0006E3D5CCB5D82C), UINT64_C(0x0002C08FFC17839E)}}, {{UINT64_C(0x00038FAE0545EF38), UINT64_C(0x00053E6BB230EB0F), UINT64_C(0x0003612B0393816C), UINT64_C(0x00073B82CB17AA32), UINT64_C(0x000164306BE664B8), UINT64_C(0x0007DECB1BEAB083), UINT64_C(0x0003ABA14AB6DFEF), UINT64_C(0x0006698C134B72CB), UINT64_C(0x00048700868CEFB6), UINT64_C(0x0004DC5186706827)}, {UINT64_C(0x000D284BA53E67E8), UINT64_C(0x0004F1D7F1CDA504), UINT64_C(0x000763E8AAD17850), UINT64_C(0x0003EE3C7D2B43AB), UINT64_C(0x0005EDDBD6D373C5), UINT64_C(0x000F6B7396FD7F7F), UINT64_C(0x0006367A99D09B8F), UINT64_C(0x0001571A1CD21578), UINT64_C(0x0007236B9994F1FA), UINT64_C(0x00062AA7DCD740A8)}}, {{UINT64_C(0x000895A1FD8F0DA1), UINT64_C(0x0000940D048284D5), UINT64_C(0x0007059173020EB7), UINT64_C(0x00034CBCC3643F29), UINT64_C(0x00054D38DFC9A9C7), UINT64_C(0x00004D0D54222865), UINT64_C(0x0007AC3D3F2E7588), UINT64_C(0x0004BD1D9A8CC40C), UINT64_C(0x0004BA573C79363A), UINT64_C(0x0003B77EA3C0F6CE)}, {UINT64_C(0x0004EA2FC4B8BA7C), UINT64_C(0x0001ADDAEDBD593B), UINT64_C(0x0007B6AB6C9FFEBE), UINT64_C(0x000246C34D52441A), UINT64_C(0x000664D1C2133D2A), UINT64_C(0x0005A8FCC6F82245), UINT64_C(0x0003C821241B7620), UINT64_C(0x0007ABB29F71AC83), UINT64_C(0x0000126E955FDD3A), UINT64_C(0x000483EA750D326E)}}, {{UINT64_C(0x0003FD366EBA1606), UINT64_C(0x0002D9ABAF3B8EC5), UINT64_C(0x00011FB79452ADD0), UINT64_C(0x0004D367D2541244), UINT64_C(0x00014C5A74A4D2BE), UINT64_C(0x000BD9255862125B), UINT64_C(0x00053C3CF655527E), UINT64_C(0x000040AA6D6CB56E), UINT64_C(0x0005F328C422C551), UINT64_C(0x000635823C8498F1)}, {UINT64_C(0x000B8D2832D1E4F0), UINT64_C(0x0002253CC89289E1), UINT64_C(0x0004AFE460B4CFA4), UINT64_C(0x00047F33AFB8FB72), UINT64_C(0x0003147C7881EF17), UINT64_C(0x000B142D32392AC5), UINT64_C(0x0002DB71D8F10037), UINT64_C(0x000445CB1A7CD1AC), UINT64_C(0x0005320C19EF8761), UINT64_C(0x0006956661FEB75C)}}, {{UINT64_C(0x0008A4F6E3E57DAD), UINT64_C(0x00052E3220306CD3), UINT64_C(0x00016C04A243039F), UINT64_C(0x0006F0BB18CACDCB), UINT64_C(0x000061BCDE864EC1), UINT64_C(0x00029F6788292DC0), UINT64_C(0x000022F1DB885727), UINT64_C(0x00058B87F88D42DB), UINT64_C(0x00067E1B4B34B7CE), UINT64_C(0x00065DB9E57B9F40)}, {UINT64_C(0x000DB97A65B73FBC), UINT64_C(0x0005DDAD4615047A), UINT64_C(0x0003254BA8C48789), UINT64_C(0x0007BDDF93DDA4BB), UINT64_C(0x0002C0DF753CF13C), UINT64_C(0x000F1261EE450629), UINT64_C(0x0001AFB00BDE3B73), UINT64_C(0x0007AD40F78FD9B6), UINT64_C(0x000275243D6431D9), UINT64_C(0x000670BF2C9CC698)}}, {{UINT64_C(0x0009312A3CA8CBBC), UINT64_C(0x0000D499C81D0092), UINT64_C(0x0001F9D05BE7A579), UINT64_C(0x000262C322C0431E), UINT64_C(0x00078231853C844C), UINT64_C(0x00046A359E9EA4F7), UINT64_C(0x000490A7B54A0D2C), UINT64_C(0x0005AAE046C3E758), UINT64_C(0x00059A6FF1C516DC), UINT64_C(0x0005C2CEC2165D95)}, {UINT64_C(0x000912BFF9FC238B), UINT64_C(0x0007FEBB522D20DD), UINT64_C(0x00070A32C9786B85), UINT64_C(0x0003419D9DCB4F51), UINT64_C(0x0006464E7100B7D1), UINT64_C(0x0001B5E3520C4AE3), UINT64_C(0x00019B50C7D74FC7), UINT64_C(0x0003ECE80D56DEDC), UINT64_C(0x00031A0A04910717), UINT64_C(0x0002DC124F80EA68)}}, }, { {{UINT64_C(0x0007FC3E471A068B), UINT64_C(0x0001F9C0BD1E7FDA), UINT64_C(0x0005B816710E054C), UINT64_C(0x000641A4989CA761), UINT64_C(0x0005868FBF10DBFA), UINT64_C(0x000AB68C9F619D52), UINT64_C(0x000610CC30529BEC), UINT64_C(0x000627D1E7BB0ABB), UINT64_C(0x000312A648EFC13F), UINT64_C(0x000720DB474C9967)}, {UINT64_C(0x00088A74ECFAC532), UINT64_C(0x0000CA6C465E54E3), UINT64_C(0x00063BCCC230DDCA), UINT64_C(0x000545133A54D8A3), UINT64_C(0x000289A2A21D7DAD), UINT64_C(0x00064142FD2154C0), UINT64_C(0x0000AE8DE8498437), UINT64_C(0x0000FEE6A05C9CA4), UINT64_C(0x0005A712CADD4BD3), UINT64_C(0x00073C7C0CB9DC7E)}}, {{UINT64_C(0x00014BC20D8FC866), UINT64_C(0x0001B713C72B026C), UINT64_C(0x0002BB1B00DD97B0), UINT64_C(0x0003DDF6D5D77C14), UINT64_C(0x0000018D34DBE288), UINT64_C(0x000B37E4BE21CFC1), UINT64_C(0x00042460ABD75619), UINT64_C(0x00048564EF06DBBE), UINT64_C(0x0001D0F8F700CFDF), UINT64_C(0x00050BF2E57EF201)}, {UINT64_C(0x0000E7551324C838), UINT64_C(0x00013E348DFFE7EF), UINT64_C(0x0005667611C90CF1), UINT64_C(0x00054F8E74F0FE54), UINT64_C(0x00046065CFEC47E4), UINT64_C(0x00020F5CA7131E31), UINT64_C(0x00056BCD632BBD22), UINT64_C(0x0004068611AE97FE), UINT64_C(0x000342E9BF1AE60D), UINT64_C(0x00059284EE40F315)}}, {{UINT64_C(0x000695C423B1830F), UINT64_C(0x000061319340E99D), UINT64_C(0x00056EECAD0FDEF4), UINT64_C(0x0001851799B6AF30), UINT64_C(0x000574BFEEC6CF78), UINT64_C(0x00090695389CAC68), UINT64_C(0x0004AD41B7692D45), UINT64_C(0x00067399705E0A02), UINT64_C(0x0004D01C657BFE93), UINT64_C(0x0007AE346F356E78)}, {UINT64_C(0x0005ED517D1CECA6), UINT64_C(0x0004FA192E057F98), UINT64_C(0x00028B4C280516A2), UINT64_C(0x0000F57015483B8B), UINT64_C(0x000381A2B0925CBA), UINT64_C(0x0007EC4E45D3BCA9), UINT64_C(0x0005E6AE14D94280), UINT64_C(0x00044AA8A233553A), UINT64_C(0x000188ECFCF3FD6B), UINT64_C(0x00056CD6831AF6A1)}}, {{UINT64_C(0x000BAD665FBBA51D), UINT64_C(0x0005CE5627119792), UINT64_C(0x000013618EFFC45B), UINT64_C(0x00059C97725250C5), UINT64_C(0x00034D2A31C26543), UINT64_C(0x000FC7D8B33901C2), UINT64_C(0x0004049BB70B6E8C), UINT64_C(0x000298E4AB70ACB4), UINT64_C(0x00024A67CAB12D0F), UINT64_C(0x0000658DD54DD249)}, {UINT64_C(0x00018A1BE3CECA73), UINT64_C(0x0007CB9EB76F08C8), UINT64_C(0x0001B277825030CD), UINT64_C(0x0005EE5C3A83FB88), UINT64_C(0x000520DD7C104236), UINT64_C(0x0000B4C8EAC628F4), UINT64_C(0x00067414680C3CBD), UINT64_C(0x000634E9A20A30CC), UINT64_C(0x0006FCA2CD50A25E), UINT64_C(0x0003207EC54AE849)}}, {{UINT64_C(0x000A7C2C9FA19751), UINT64_C(0x00032EAC1838C0AE), UINT64_C(0x000704308B256AC4), UINT64_C(0x0002462B6C4B26A1), UINT64_C(0x0002E3D83A96467F), UINT64_C(0x000FE8591432EB6A), UINT64_C(0x0003FD27EAF7B31A), UINT64_C(0x00058F724E26D47B), UINT64_C(0x00076136F099E12E), UINT64_C(0x000558F5CDCDEAA6)}, {UINT64_C(0x0006ED04F333B165), UINT64_C(0x000634F9F9299870), UINT64_C(0x0006E7943903D73C), UINT64_C(0x00005689249D8E40), UINT64_C(0x00043B4AC0439BF3), UINT64_C(0x000553178FDF6D63), UINT64_C(0x000439F7375523D2), UINT64_C(0x0005F10CB0346B4A), UINT64_C(0x00004E0AE314DF84), UINT64_C(0x00069471AB5DFADA)}}, {{UINT64_C(0x0000E9501E9FAFE7), UINT64_C(0x0001ED4A26197388), UINT64_C(0x0005CAA03225B2DC), UINT64_C(0x0003498CF6071DD5), UINT64_C(0x00002CF8D255A84E), UINT64_C(0x000FA75C0885DE81), UINT64_C(0x00030965CE1A47CB), UINT64_C(0x00011FB194A95BB0), UINT64_C(0x0004800A95408A73), UINT64_C(0x0002EEA35FCE3212)}, {UINT64_C(0x00087C5B9DE51934), UINT64_C(0x00036D95402D7411), UINT64_C(0x00037FB02C63558B), UINT64_C(0x0006A1232CBC6C08), UINT64_C(0x0005C0E468414E24), UINT64_C(0x0007F99C0CCF2D15), UINT64_C(0x000094592332F465), UINT64_C(0x0002AB96A524CF72), UINT64_C(0x0007E87F1D99C378), UINT64_C(0x0000207DD0DD808E)}}, {{UINT64_C(0x000ECD9FF97D4931), UINT64_C(0x0001D4B8B850BE44), UINT64_C(0x0006C1F7D66BFB33), UINT64_C(0x000286B0E020CE70), UINT64_C(0x00057D2D930A9035), UINT64_C(0x000F70CD43EF78D8), UINT64_C(0x0005595A2E3FB21C), UINT64_C(0x0002B23212C03281), UINT64_C(0x0006BE2A6AB3CEFB), UINT64_C(0x0007B13ACF77F80E)}, {UINT64_C(0x000CB860BC601AFD), UINT64_C(0x0006ACF4F99A1471), UINT64_C(0x0006698A5886492B), UINT64_C(0x000245BF72D02C00), UINT64_C(0x00067720650A5EB3), UINT64_C(0x000D9E8B3198D8BE), UINT64_C(0x00072728DEA3F720), UINT64_C(0x0000B079DF1DF966), UINT64_C(0x000764E77F92B823), UINT64_C(0x00004721437DFB0D)}}, {{UINT64_C(0x0008C47E3E9972F3), UINT64_C(0x0005F6800BF3F5AC), UINT64_C(0x00040B8943EC9A82), UINT64_C(0x00018C3DE68795BC), UINT64_C(0x000798ACD9D5C188), UINT64_C(0x000626A89DFFB9C7), UINT64_C(0x0000A446A1E585FF), UINT64_C(0x00003F9D6C0F2522), UINT64_C(0x00045DA3E3E5843E), UINT64_C(0x0001DF8788F4C149)}, {UINT64_C(0x00002D1EA1F1D567), UINT64_C(0x0007D2CEB46D5CF9), UINT64_C(0x0000AE8762EDBE19), UINT64_C(0x0004D34041C698A3), UINT64_C(0x0002249A52FB7AFB), UINT64_C(0x0001AA28A184F6D0), UINT64_C(0x0004AEDC54AC0233), UINT64_C(0x0001A52FA2FE3789), UINT64_C(0x000684CDB10852C6), UINT64_C(0x000006A488535FB8)}}, {{UINT64_C(0x000B69CD208922BD), UINT64_C(0x000113C0A2CDC098), UINT64_C(0x00034EB1527C9342), UINT64_C(0x0002E33524A72273), UINT64_C(0x0005D54F4B29D1BB), UINT64_C(0x000935E2895D6B59), UINT64_C(0x00002467FF51247E), UINT64_C(0x00064A19BE2B9B33), UINT64_C(0x0000CA9B34B3CC48), UINT64_C(0x0001C1179DC502AF)}, {UINT64_C(0x00030DD196A35DEC), UINT64_C(0x0004F43012319797), UINT64_C(0x0003AD2F85C0A8FE), UINT64_C(0x000767B8C3625127), UINT64_C(0x0007156D91446AF4), UINT64_C(0x000A52B80B684D9E), UINT64_C(0x000493C29A3C9396), UINT64_C(0x00060B66E8B18710), UINT64_C(0x00073CE5C6E23F4E), UINT64_C(0x0000C0E9CF09DBEA)}}, {{UINT64_C(0x000D847204E88E6A), UINT64_C(0x00014392C2DBD5D4), UINT64_C(0x0003647F5392D642), UINT64_C(0x00005CD6B4397528), UINT64_C(0x0003CA804BE0E6E6), UINT64_C(0x000AFA2DEBF9BDF0), UINT64_C(0x0003B70844F7F77A), UINT64_C(0x00055FD54AED8423), UINT64_C(0x0001E87463CB4E23), UINT64_C(0x0001BCB9D95AA334)}, {UINT64_C(0x0008AD95903A42F5), UINT64_C(0x0002B77C076B1514), UINT64_C(0x00004EA8D39728A1), UINT64_C(0x00006196D1EAC34C), UINT64_C(0x00021AD5CD908FB5), UINT64_C(0x0009231E8FBDFA13), UINT64_C(0x0006F53F72D12265), UINT64_C(0x0004EEB89634BD92), UINT64_C(0x000467E16722B0C0), UINT64_C(0x000322B4828C8354)}}, {{UINT64_C(0x000749D2D2151628), UINT64_C(0x00017DB343621D73), UINT64_C(0x000165CD9CF505C3), UINT64_C(0x0006EF002B6F7508), UINT64_C(0x0006A5B3F2EBD640), UINT64_C(0x00088918A6F47361), UINT64_C(0x00024A4CC1F89F3D), UINT64_C(0x0002A883A0915ACB), UINT64_C(0x0000B430E4311864), UINT64_C(0x0002E5AFD5631755)}, {UINT64_C(0x000E6600C23AF414), UINT64_C(0x0004A68A06127530), UINT64_C(0x0000119CF5DBEFF9), UINT64_C(0x00031BD59339EC9D), UINT64_C(0x0007AFB0A0652755), UINT64_C(0x0004E54D473D5D91), UINT64_C(0x0006663BBC911425), UINT64_C(0x00060CD99F4A6814), UINT64_C(0x0004D70E317492DC), UINT64_C(0x00057C676F34207B)}}, {{UINT64_C(0x000FA45FEB394F79), UINT64_C(0x0002595780239750), UINT64_C(0x0006DAEAFB6AF370), UINT64_C(0x0004F71BE680332B), UINT64_C(0x0007A2B88BEC444F), UINT64_C(0x0006D282845556D8), UINT64_C(0x0003A48753C8FEB2), UINT64_C(0x0005314A5E71A50D), UINT64_C(0x00064B67D3BEDF37), UINT64_C(0x00049BB87F9AA6E0)}, {UINT64_C(0x000F9E3C83D99F56), UINT64_C(0x0002AFD6DA547B1C), UINT64_C(0x000799EBA75D7647), UINT64_C(0x00017702967C6572), UINT64_C(0x00036DAA4C258B87), UINT64_C(0x0005BAA7744D42CE), UINT64_C(0x0006706FA16409C8), UINT64_C(0x0003833BD25E3852), UINT64_C(0x0005B9B25E71D72C), UINT64_C(0x0000851A32EE02B9)}}, {{UINT64_C(0x00096C7F5422B60A), UINT64_C(0x0000A451DBBE6CC7), UINT64_C(0x0004DFB70D71B03F), UINT64_C(0x00047A85B6A73205), UINT64_C(0x000552D4E655E4A4), UINT64_C(0x00026F31F95A9399), UINT64_C(0x0001C446539B5383), UINT64_C(0x000544DB6B46DF8B), UINT64_C(0x0003348ADD036467), UINT64_C(0x0000AA2D0D6935D7)}, {UINT64_C(0x0007D5B7A1E58219), UINT64_C(0x0004617A5AB605AC), UINT64_C(0x0006A6AF7E81B995), UINT64_C(0x00042EE78EACBEE0), UINT64_C(0x00049DD85014D117), UINT64_C(0x0009591FD9314E76), UINT64_C(0x0005DB569F458EB8), UINT64_C(0x00051D4F2503D183), UINT64_C(0x00063FBB28BA6AD3), UINT64_C(0x0006D3AC67CC821C)}}, {{UINT64_C(0x000DB3F243061D75), UINT64_C(0x0006D73931E621F2), UINT64_C(0x0000B17170E27A4D), UINT64_C(0x00004483B525B3B3), UINT64_C(0x0000CEC6BF188345), UINT64_C(0x00028C93F5247B6F), UINT64_C(0x0004A6511A5DEF06), UINT64_C(0x00076B62AEAC63B1), UINT64_C(0x00074A604ED95C71), UINT64_C(0x00009EFCC184826A)}, {UINT64_C(0x0008BAC2B060443D), UINT64_C(0x000344E9D3B2EEA9), UINT64_C(0x00020435D407DCEB), UINT64_C(0x00022E3643D85699), UINT64_C(0x0001A1F508400E9C), UINT64_C(0x000D7CC9B1AC0494), UINT64_C(0x0004C1AD9E2EB052), UINT64_C(0x00009FBD9B150459), UINT64_C(0x000369468497704F), UINT64_C(0x0003FF2AC90D8014)}}, {{UINT64_C(0x000F26B79E392352), UINT64_C(0x0002B957BF938557), UINT64_C(0x000715D0978BD2B2), UINT64_C(0x00045531E667D86D), UINT64_C(0x00038962FCA00EDE), UINT64_C(0x000DC1791F176B3F), UINT64_C(0x000743403651C9FA), UINT64_C(0x0004ABD020A84523), UINT64_C(0x0006DECB17845C69), UINT64_C(0x0003DF12469D37F5)}, {UINT64_C(0x000FA8419C8A9D27), UINT64_C(0x000768869058EE8E), UINT64_C(0x0000D174A1CB1143), UINT64_C(0x00070F67326B9037), UINT64_C(0x00026979FA59E935), UINT64_C(0x000F4AA12B6BC96F), UINT64_C(0x000606751117A342), UINT64_C(0x00047A115AF10FB7), UINT64_C(0x0006DF7816619F79), UINT64_C(0x00072158DA5671BF)}}, {{UINT64_C(0x000ECAFE87CBB23D), UINT64_C(0x000512A524D4D77C), UINT64_C(0x0005FF1AF3F9CDCC), UINT64_C(0x0005A5222E7CCBCA), UINT64_C(0x00037F25D366C5D3), UINT64_C(0x000DEE9CD4A0BD44), UINT64_C(0x0001BA906B38FE5F), UINT64_C(0x0002479A4422043C), UINT64_C(0x0007F85530950F05), UINT64_C(0x00026843F9CA979A)}, {UINT64_C(0x000E6EBFB1D7D79A), UINT64_C(0x0001962262421C26), UINT64_C(0x000749C75E0896B7), UINT64_C(0x00072656E0591FB4), UINT64_C(0x00048C25570B4B5D), UINT64_C(0x000C0F6689F57006), UINT64_C(0x000106B77BE98B19), UINT64_C(0x00070FD9ADA250C6), UINT64_C(0x0004B2AC835CA2CF), UINT64_C(0x0005FD38C57539D3)}}, }, { {{UINT64_C(0x00078CF823118058), UINT64_C(0x000084E70B90249E), UINT64_C(0x000340E63640803E), UINT64_C(0x000259F3BA46031B), UINT64_C(0x0004025A533D8FB6), UINT64_C(0x00021525975D8B46), UINT64_C(0x00016415CB875BF3), UINT64_C(0x00037D3C94CF88C2), UINT64_C(0x0001303423D046C3), UINT64_C(0x00064D6CA6CF50E4)}, {UINT64_C(0x0001C4F51365236C), UINT64_C(0x00074C650114C6D7), UINT64_C(0x00030B74EB231DBC), UINT64_C(0x000108DDE7A79F07), UINT64_C(0x0005C84883DAAC53), UINT64_C(0x000F4FFFB87D65C4), UINT64_C(0x0003A077D6424776), UINT64_C(0x00074EF17A8FF930), UINT64_C(0x0001C70531DAACC1), UINT64_C(0x0004FDAB70943349)}}, {{UINT64_C(0x000D10852C9532B6), UINT64_C(0x000043AAC71DC676), UINT64_C(0x0000699B3F568856), UINT64_C(0x00062AA64E24D6D0), UINT64_C(0x0000AC30CB5E809D), UINT64_C(0x0003DF891FADF9D0), UINT64_C(0x0002E8AEFD6E009D), UINT64_C(0x000763BB5C596056), UINT64_C(0x00027648417EC3B3), UINT64_C(0x00026FFF568DBEC6)}, {UINT64_C(0x00046866CD52C51B), UINT64_C(0x00074EBD129DAF5E), UINT64_C(0x0007E8A44CB2D0FF), UINT64_C(0x0001754AF2E0C3E1), UINT64_C(0x00075DF74CCBA4EB), UINT64_C(0x0007015D1AC6F756), UINT64_C(0x0007CC58CB459B84), UINT64_C(0x0004431C9AFC9478), UINT64_C(0x0001496EF18E492E), UINT64_C(0x00040F52B9782D09)}}, {{UINT64_C(0x0005432D2ABFAEFB), UINT64_C(0x000219E9F74B6891), UINT64_C(0x000772FBB5A56EDD), UINT64_C(0x0003F9B32B854A6E), UINT64_C(0x0000E23A82F7F4DB), UINT64_C(0x00079910F350CA56), UINT64_C(0x0002F2CBD94634FD), UINT64_C(0x00062DE8463F621C), UINT64_C(0x00018A84A27F47AC), UINT64_C(0x000492918B0A6CFC)}, {UINT64_C(0x000917028ABF0C6C), UINT64_C(0x0005885BCB7EC09C), UINT64_C(0x00007B7029F86047), UINT64_C(0x0004E980E40CB14D), UINT64_C(0x0002414620471CAF), UINT64_C(0x000638833F454BE0), UINT64_C(0x0007530E1D810E0C), UINT64_C(0x00007BC1509E4C84), UINT64_C(0x000234FE03106A25), UINT64_C(0x0007B3C1744922CE)}}, {{UINT64_C(0x0001D6F26560D816), UINT64_C(0x000761F53B7DED62), UINT64_C(0x0003F63729C380A1), UINT64_C(0x0000D9AABEB1F8E4), UINT64_C(0x0002FC799030E923), UINT64_C(0x00090EB9E83FC112), UINT64_C(0x000276A6C7B64189), UINT64_C(0x0005C92C57117936), UINT64_C(0x0003A76769F60AB1), UINT64_C(0x0000214C6BFF3AB2)}, {UINT64_C(0x000F91FA223FB871), UINT64_C(0x00072F8E905BA3A7), UINT64_C(0x00054D9829B0E1C4), UINT64_C(0x000041AADCD2F042), UINT64_C(0x0006B33B8DBF5DAC), UINT64_C(0x0005E138CA79ABDB), UINT64_C(0x0007F91015FD64B0), UINT64_C(0x0003E42D44B48D18), UINT64_C(0x0003070F61FC98CE), UINT64_C(0x0003ECFBC333B9A7)}}, {{UINT64_C(0x000A1C5F63F4003A), UINT64_C(0x00073E65E07CAEF9), UINT64_C(0x0007EE53E05454BD), UINT64_C(0x0002832BB0CB8A80), UINT64_C(0x0007F92B5F28C3C9), UINT64_C(0x000B198CFA188FC6), UINT64_C(0x0001B4972BD5EA15), UINT64_C(0x0003371055BFF265), UINT64_C(0x00040289DB496278), UINT64_C(0x000037FB8AEF99C7)}, {UINT64_C(0x0003E8BA240F2657), UINT64_C(0x000507715E41F403), UINT64_C(0x00000AC5E34F938B), UINT64_C(0x00010AC246A10935), UINT64_C(0x00035E92D9586CD7), UINT64_C(0x000A927B7C112162), UINT64_C(0x0001E320A6A23B35), UINT64_C(0x0002AEA76305FB4D), UINT64_C(0x00027FC7B4E55E7B), UINT64_C(0x0007F605FDDB3012)}}, {{UINT64_C(0x0007B3BEE04C4C80), UINT64_C(0x0005EC1698F3E6D0), UINT64_C(0x00058683E8514BF8), UINT64_C(0x00003490978C1C15), UINT64_C(0x0003FD63AD3797AF), UINT64_C(0x00078C4971CAD19E), UINT64_C(0x0006E7EC2A846823), UINT64_C(0x00077586A76BAADD), UINT64_C(0x00022BF1CA7743E1), UINT64_C(0x000719DBF8CE1E82)}, {UINT64_C(0x000E187887A1EB86), UINT64_C(0x0006E15CE17F34FE), UINT64_C(0x000165A9C070F6B8), UINT64_C(0x000235BE0B50B7A1), UINT64_C(0x0000701631632860), UINT64_C(0x0001520CD1B97E69), UINT64_C(0x000324D126195433), UINT64_C(0x000695BD1FBD3083), UINT64_C(0x0007D0E98F84E4E6), UINT64_C(0x000076D0FD61BE2C)}}, {{UINT64_C(0x0001C135C074F082), UINT64_C(0x0001B1C98964C70E), UINT64_C(0x00070F16F51C63DE), UINT64_C(0x00065C546121FD21), UINT64_C(0x0006E0EA00711AC1), UINT64_C(0x00019C4ED64CA43A), UINT64_C(0x0007B5F5DE4D83CD), UINT64_C(0x0004A3289E196D3B), UINT64_C(0x000379BD42718428), UINT64_C(0x00028B586AD8AC43)}, {UINT64_C(0x00081CF90B74F2A0), UINT64_C(0x0002D685FCE339CF), UINT64_C(0x00029BACF289048F), UINT64_C(0x00031B11C9F022B9), UINT64_C(0x000723747A599137), UINT64_C(0x00008CAE4A9C10E7), UINT64_C(0x000252D22A179598), UINT64_C(0x000462BF1945C2A5), UINT64_C(0x0005E7BF4B6F8B7E), UINT64_C(0x0004A5CC544E7A94)}}, {{UINT64_C(0x0002CE082C195DF7), UINT64_C(0x0000B2902F1DD4F4), UINT64_C(0x0002EBCE1E8E6C3E), UINT64_C(0x0003DBB93DD984FC), UINT64_C(0x000294BCFA46D91A), UINT64_C(0x000E47F5EB6C49F2), UINT64_C(0x00027D01A275F685), UINT64_C(0x0002A8AB31F7A7C5), UINT64_C(0x000065DEDCCEB9FE), UINT64_C(0x0007EE40D2F05D3F)}, {UINT64_C(0x000AA9F92E841F87), UINT64_C(0x00025B8A866BCAA0), UINT64_C(0x000456616AD0616E), UINT64_C(0x000019C95CBF2929), UINT64_C(0x00018B84E8563743), UINT64_C(0x000D9BBA3F123075), UINT64_C(0x0003C88C52754F28), UINT64_C(0x0002A84A28E16C62), UINT64_C(0x00006C4CBF9BD1BE), UINT64_C(0x00014E2ED761883C)}}, {{UINT64_C(0x000DD43327A5EC62), UINT64_C(0x00037A88C2CE8F10), UINT64_C(0x00079FB7AF273687), UINT64_C(0x0005C217AE2F9294), UINT64_C(0x0007B658E58E2D4D), UINT64_C(0x0001B9F8E201BDE2), UINT64_C(0x00003AF8B1C4F58C), UINT64_C(0x000023F0302D4943), UINT64_C(0x0000F016949D42FE), UINT64_C(0x0005DA77793E30DF)}, {UINT64_C(0x0009A4A03292A077), UINT64_C(0x0005E38597159B13), UINT64_C(0x000438CD4AA3B94B), UINT64_C(0x00039E50FBBA527D), UINT64_C(0x00032E5CFA99121B), UINT64_C(0x000CE6179D42746B), UINT64_C(0x000201FC90B2780E), UINT64_C(0x0002129922687B60), UINT64_C(0x0001410E58988022), UINT64_C(0x0005E3F21AE57B91)}}, {{UINT64_C(0x000EE44D178CCA07), UINT64_C(0x0002290775707084), UINT64_C(0x000256E01D88B556), UINT64_C(0x0001EF98ED0CEE11), UINT64_C(0x0003BD6824481F73), UINT64_C(0x000BAAFD1FEBD7AB), UINT64_C(0x0006C5370AC07A93), UINT64_C(0x00039FFED4B7C601), UINT64_C(0x00039A6B4153D857), UINT64_C(0x00077A6BC55E5234)}, {UINT64_C(0x000816AA9A09968B), UINT64_C(0x0007BDB9C7F2EAF9), UINT64_C(0x00032ACE09E1CBDC), UINT64_C(0x000522E8C19D3EEB), UINT64_C(0x0003827A069B97BD), UINT64_C(0x0006716F9981A71A), UINT64_C(0x000554503B7BA012), UINT64_C(0x000074637BF2E394), UINT64_C(0x000615A2194548E8), UINT64_C(0x000006C523A794B4)}}, {{UINT64_C(0x000A0B318735C445), UINT64_C(0x00055C3BC1A59729), UINT64_C(0x000355C87CF06A80), UINT64_C(0x0000ABBB95628B32), UINT64_C(0x00073A2D28549A3A), UINT64_C(0x000CC8F16C0B5FB6), UINT64_C(0x0005190FEF2C780C), UINT64_C(0x000485C8686725FF), UINT64_C(0x000212610F06DB7C), UINT64_C(0x000186C78ED4F0AC)}, {UINT64_C(0x00051A0699ABFB29), UINT64_C(0x0004079D38322CB8), UINT64_C(0x0004E0C463922EE4), UINT64_C(0x0005EC25735A7F4C), UINT64_C(0x00030ACD8B3755D5), UINT64_C(0x0004533C09F622E8), UINT64_C(0x00065BD64578113C), UINT64_C(0x000011679C79532B), UINT64_C(0x000270C486D96F98), UINT64_C(0x00064FCDA161257D)}}, {{UINT64_C(0x000A95E15137A104), UINT64_C(0x000184008DF11135), UINT64_C(0x00005609A6FCBD2E), UINT64_C(0x0004EDFE7BC6F8F9), UINT64_C(0x00053CA3D1760E75), UINT64_C(0x000EA2FB5A31F0F3), UINT64_C(0x00077ABE20D50F91), UINT64_C(0x0007C0E34B46F175), UINT64_C(0x0007A94E7592DB90), UINT64_C(0x000249BEAED5FC42)}, {UINT64_C(0x000F85AF26A73A5A), UINT64_C(0x0002B83D21F3C411), UINT64_C(0x000069FD92DFF608), UINT64_C(0x000407178D3E9436), UINT64_C(0x0000D6C1A603C407), UINT64_C(0x000C556CBD53BF39), UINT64_C(0x0000802C8ABE0ADC), UINT64_C(0x00024A5E6F60B0DA), UINT64_C(0x0007DB9843929DA3), UINT64_C(0x0001FF410E9D19C7)}}, {{UINT64_C(0x00094E812DBE8C32), UINT64_C(0x0006D33ED80BCDA2), UINT64_C(0x00002D936BC7580C), UINT64_C(0x00043D349744E6D4), UINT64_C(0x00020A0DEB1F77B4), UINT64_C(0x00031B3519BBF1AA), UINT64_C(0x0007A520ED4CEF61), UINT64_C(0x000043394E7A87E8), UINT64_C(0x00040764584AEB95), UINT64_C(0x0003155C9B8CCF57)}, {UINT64_C(0x000C17DA9E28ADF8), UINT64_C(0x0003424BBFF78B37), UINT64_C(0x0003CC6A19FFC5FF), UINT64_C(0x0002CB497A44C566), UINT64_C(0x00022DDAD26DE223), UINT64_C(0x000AC080F18A0065), UINT64_C(0x000575057C11015D), UINT64_C(0x00078021729DE91B), UINT64_C(0x0005796ED9E76DA3), UINT64_C(0x0006FE4AB6E74734)}}, {{UINT64_C(0x0005F849D235CCE0), UINT64_C(0x000436E70A0D70E1), UINT64_C(0x00035E68AA2BDD02), UINT64_C(0x0003E7FE63874EA2), UINT64_C(0x00026C88F7884563), UINT64_C(0x000FCD9BAE21D5B1), UINT64_C(0x0005C69101494E3A), UINT64_C(0x00037DB907EEE3A2), UINT64_C(0x00064C59AE199A08), UINT64_C(0x00039423CE12F5BB)}, {UINT64_C(0x0000AAAF7EEE09F7), UINT64_C(0x0004C5314B2C4D75), UINT64_C(0x0003EC74B3A6D36C), UINT64_C(0x000620CA51245767), UINT64_C(0x00044F419AE83224), UINT64_C(0x00080A722E02A693), UINT64_C(0x0007A360EBC5DBD9), UINT64_C(0x000381727BCF6E58), UINT64_C(0x000617B700F3ADF6), UINT64_C(0x0000FA1A09F64950)}}, {{UINT64_C(0x00096F84C0BDFF5B), UINT64_C(0x0006E5B26C5065BB), UINT64_C(0x0001952942E39562), UINT64_C(0x000653E9892230FF), UINT64_C(0x0000F763C13E4999), UINT64_C(0x0009F0784B215E56), UINT64_C(0x000270D42201B3A3), UINT64_C(0x00045740B9AF7F09), UINT64_C(0x000229B251B5D908), UINT64_C(0x000657F560FDA230)}, {UINT64_C(0x00031EFD1B4B981B), UINT64_C(0x0007B1F5B3F7B1EA), UINT64_C(0x000170AF323B8DC9), UINT64_C(0x00055F77521B9F83), UINT64_C(0x0003B381A7CCCC0F), UINT64_C(0x00086767112D35DD), UINT64_C(0x0000C15A5CC603CB), UINT64_C(0x00026C0095FA28DE), UINT64_C(0x0005178C03D1D4CC), UINT64_C(0x0006A499CD28196A)}}, {{UINT64_C(0x0009617A9ECA8281), UINT64_C(0x0002F03DC8FC403F), UINT64_C(0x0005A200AB22733A), UINT64_C(0x000402BA3A81D989), UINT64_C(0x0006690A4DAA9371), UINT64_C(0x0001CC8F6D90CC2C), UINT64_C(0x000293AC50B59125), UINT64_C(0x0004D1A882B9D469), UINT64_C(0x00014C4DF2707168), UINT64_C(0x0005A3C384944E0D)}, {UINT64_C(0x000B2CD4D51F74FF), UINT64_C(0x00021EB289F478F1), UINT64_C(0x0004BF9CA3A7AC0A), UINT64_C(0x0003DB4F626C2310), UINT64_C(0x0005CBF13B00CCC4), UINT64_C(0x00029073A697E0B9), UINT64_C(0x0002C5D67FD6CD73), UINT64_C(0x0005D10BAA363615), UINT64_C(0x000051A608EA619E), UINT64_C(0x0004155A6B02D3FB)}}, }, { {{UINT64_C(0x000B63BE2E2471B6), UINT64_C(0x000793F7C56B8C12), UINT64_C(0x00003A61A28C6343), UINT64_C(0x00073E8EF4E8B82C), UINT64_C(0x000770A1A8474CE7), UINT64_C(0x000B2231CECAFDB4), UINT64_C(0x0006E5A738D66F01), UINT64_C(0x0002489688C31B78), UINT64_C(0x00060068F8F76B83), UINT64_C(0x0003D6F5D74A6F06)}, {UINT64_C(0x0002EEDB0339BF8A), UINT64_C(0x0006213ECE2A8CBB), UINT64_C(0x0006876AC31EC71D), UINT64_C(0x0001ADFE07733CDB), UINT64_C(0x000192FE0B2619CE), UINT64_C(0x00000B3F7CB6D64F), UINT64_C(0x000193DD7BC97D28), UINT64_C(0x0005572F38C9E619), UINT64_C(0x000117122583880C), UINT64_C(0x0003F2E95F7AD5BD)}}, {{UINT64_C(0x0005C60618A27AB4), UINT64_C(0x00041A118681EEDE), UINT64_C(0x000264B9365ED5C1), UINT64_C(0x000257E09A79B510), UINT64_C(0x0007087B4DFA9B18), UINT64_C(0x000BC4BD3F5B7665), UINT64_C(0x00047988ECDAA2B4), UINT64_C(0x00038D5A0D231327), UINT64_C(0x00061EBA028CB516), UINT64_C(0x00034DFCB32D1C33)}, {UINT64_C(0x0007BF2B53E6F733), UINT64_C(0x0007363F62FE6A5D), UINT64_C(0x00009E88E9E4BBC7), UINT64_C(0x00053137DF685DF0), UINT64_C(0x0000D26EEFA89EB2), UINT64_C(0x00060E84ECFF317A), UINT64_C(0x000562FC49406706), UINT64_C(0x0004010FC39B719E), UINT64_C(0x00059BF4CE26C533), UINT64_C(0x00016B0A194ADE86)}}, {{UINT64_C(0x00025D428CB55AB4), UINT64_C(0x000349C469FB2C47), UINT64_C(0x00011112758D3875), UINT64_C(0x0005BBB75049ADD3), UINT64_C(0x00013E42E4FC95BB), UINT64_C(0x00063D2C733F5E50), UINT64_C(0x00071ECB0DB2E6CD), UINT64_C(0x00047F5C9C428E03), UINT64_C(0x0000C8ACA14009B2), UINT64_C(0x0000FEBA85C091ED)}, {UINT64_C(0x000319368C78D149), UINT64_C(0x0000A97A3731C17E), UINT64_C(0x0005734AA19A7BF7), UINT64_C(0x0004110947FCD175), UINT64_C(0x00027E988A2F1542), UINT64_C(0x0001405032878E0A), UINT64_C(0x00035BAF2C56A5E2), UINT64_C(0x000539BA8560A8C0), UINT64_C(0x0006BE84D2118DA9), UINT64_C(0x0005E0476ABA3F5B)}}, {{UINT64_C(0x0003AA4CC1DD3F97), UINT64_C(0x00063185FB6A0D5E), UINT64_C(0x0007EAE973FA7134), UINT64_C(0x0000D566EB4BA56E), UINT64_C(0x000432A20DAAF7BF), UINT64_C(0x000C99D6D0DE97D6), UINT64_C(0x00040CD8D71B4231), UINT64_C(0x00061DBA01336D9F), UINT64_C(0x00010DC031C5661D), UINT64_C(0x0007DBFCC3C94CE7)}, {UINT64_C(0x00092DCF6D493BCC), UINT64_C(0x00008741DFAF5D31), UINT64_C(0x0002E2A67554DF10), UINT64_C(0x0005119B1E5ADE23), UINT64_C(0x000501601DB80686), UINT64_C(0x00016AF164683AA7), UINT64_C(0x00013250FB11AA12), UINT64_C(0x00070A10DFF37326), UINT64_C(0x0000F9D812FF4EAB), UINT64_C(0x00002035714DCE83)}}, {{UINT64_C(0x0007CA219AED5320), UINT64_C(0x0000DC5D44C110A5), UINT64_C(0x000211982529953C), UINT64_C(0x000330BE049F485C), UINT64_C(0x0006B006A9948E28), UINT64_C(0x0000B04E018D4DC0), UINT64_C(0x000215F49B9F8FF2), UINT64_C(0x00079CE3A3D8E522), UINT64_C(0x0006EDC3EA4A4987), UINT64_C(0x0006F9FD6811BC4F)}, {UINT64_C(0x000FEF3CB3BE843C), UINT64_C(0x0005B9E17892CE3D), UINT64_C(0x0005168AA844E7A9), UINT64_C(0x000600B2314595D6), UINT64_C(0x000477B0AFD0F4F6), UINT64_C(0x00053D8F4E812FCD), UINT64_C(0x00049909798B2B0F), UINT64_C(0x0000B0BD698B1D5E), UINT64_C(0x000009B704E143DF), UINT64_C(0x00043C8ABB658E21)}}, {{UINT64_C(0x0009311B2D0959AA), UINT64_C(0x000408C67EBE4373), UINT64_C(0x0004708398C93D1C), UINT64_C(0x0005CEEB3BA4DF18), UINT64_C(0x00059663D0C68975), UINT64_C(0x000D6F23DB87CD7A), UINT64_C(0x0007FE452E537133), UINT64_C(0x000067D1FF579E76), UINT64_C(0x000678700E4625F3), UINT64_C(0x000512B5A1BD51F9)}, {UINT64_C(0x000E28A401845C37), UINT64_C(0x0005334538459412), UINT64_C(0x000415EEBEE74BD9), UINT64_C(0x00014AFBBC227A22), UINT64_C(0x000214A015E7D9E7), UINT64_C(0x000139325A047952), UINT64_C(0x00029504D6930EAE), UINT64_C(0x0005D1BCA17818E8), UINT64_C(0x0002DD22238F7A8E), UINT64_C(0x0004F8349B5B0ED3)}}, {{UINT64_C(0x00034C0AE7DDF681), UINT64_C(0x0007688311AB02D5), UINT64_C(0x0002EB0E8A6E1F1D), UINT64_C(0x0005FF8BCF6AAEB8), UINT64_C(0x0002CAD1E56904C4), UINT64_C(0x000FA16935A53E47), UINT64_C(0x00002881197DC9DD), UINT64_C(0x0005C925AAAF6DA8), UINT64_C(0x0006034B84FE7D23), UINT64_C(0x0005D6AE622F2E8E)}, {UINT64_C(0x00065068FCC0ACD6), UINT64_C(0x000070B371C8C2DF), UINT64_C(0x0003DA0FCB5BFD98), UINT64_C(0x0005B4F3426521A8), UINT64_C(0x000689F815FC00FE), UINT64_C(0x0002E666CEEBA0E2), UINT64_C(0x0001E39832C0990E), UINT64_C(0x000574558F79940A), UINT64_C(0x00076D485F8B12D9), UINT64_C(0x000156F30CEE05D5)}}, {{UINT64_C(0x0007D87AFB920C3D), UINT64_C(0x0002A9E23A083533), UINT64_C(0x0001543E5ED3B5D9), UINT64_C(0x0000B974928CFC56), UINT64_C(0x0002CF48F5FC7EE6), UINT64_C(0x000CE1C3C95C8368), UINT64_C(0x000333FD6C3D7D3F), UINT64_C(0x00044589E3099078), UINT64_C(0x0001F34D2E96B01D), UINT64_C(0x00017EAC450F370E)}, {UINT64_C(0x0001B2713A497273), UINT64_C(0x00030B002E865A54), UINT64_C(0x000182D7C612D473), UINT64_C(0x00026397A5C46946), UINT64_C(0x000187CB68D83F11), UINT64_C(0x00077ADF60174A14), UINT64_C(0x0002BC33B9BC9135), UINT64_C(0x00036AD6BE31C9F9), UINT64_C(0x0001AC5D650B5D13), UINT64_C(0x0003F43A72E4D5E3)}}, {{UINT64_C(0x000EF6C11E20B6EA), UINT64_C(0x0005905102070C81), UINT64_C(0x00024652608509D4), UINT64_C(0x000205B6D7FBB6A0), UINT64_C(0x00032589FE0677BD), UINT64_C(0x00085D8055C79F1F), UINT64_C(0x00004E43893D83E7), UINT64_C(0x00013EDB219CA7D3), UINT64_C(0x0007BF9B35859660), UINT64_C(0x0005DF7DCB816251)}, {UINT64_C(0x0001EF55471D4356), UINT64_C(0x000540AF79AD9A97), UINT64_C(0x00060EB528DDF6D9), UINT64_C(0x000328BCC97D7964), UINT64_C(0x000706B99B540A23), UINT64_C(0x0007753141D6BF4E), UINT64_C(0x000256E51FDE35B1), UINT64_C(0x0005324363DCFDED), UINT64_C(0x0004E0FE9820F921), UINT64_C(0x000368ECFA81C767)}}, {{UINT64_C(0x000AE3882AC0F8F0), UINT64_C(0x00023952C3BBED16), UINT64_C(0x0002208B0CCB771B), UINT64_C(0x00032499978C3D1E), UINT64_C(0x0000B08DEF9DE24A), UINT64_C(0x00014733B64362CB), UINT64_C(0x00044CEB44FBCD29), UINT64_C(0x00062081D15BFA79), UINT64_C(0x000612FF02BEFFD5), UINT64_C(0x00016207454BB815)}, {UINT64_C(0x000E140447F99D22), UINT64_C(0x0004415B5CE2B9E2), UINT64_C(0x000497FECE7E53B5), UINT64_C(0x0003BBA75954C646), UINT64_C(0x00075267384AD185), UINT64_C(0x000BE077D1B86BB1), UINT64_C(0x0000A186FFAE61F0), UINT64_C(0x0007E20C811F4FAE), UINT64_C(0x0004F69AD42F56BF), UINT64_C(0x00006F7B76AEA2AF)}}, {{UINT64_C(0x000BEDEC2A48D51F), UINT64_C(0x00040C00234C90E7), UINT64_C(0x0003BC8777CA6ECC), UINT64_C(0x0000D79570C70B74), UINT64_C(0x000157D50E130D10), UINT64_C(0x0003932A1F3A8446), UINT64_C(0x000520C248ECB88C), UINT64_C(0x00073A8FF16D17F0), UINT64_C(0x0006B070CCE2E887), UINT64_C(0x00006F6D81DF9ECD)}, {UINT64_C(0x0007C3E53178DAC6), UINT64_C(0x0000802C2D20978A), UINT64_C(0x0005CC0D9E0C57C8), UINT64_C(0x0000A2DB47B4AA42), UINT64_C(0x0000D0C16DEAE477), UINT64_C(0x00030AECB867C0D4), UINT64_C(0x0006545EF5ADABE6), UINT64_C(0x0006207530AC956A), UINT64_C(0x0004B667DB2FBFC5), UINT64_C(0x0007231A93C94578)}}, {{UINT64_C(0x0006EE7B285AAF99), UINT64_C(0x000184C97496A4CA), UINT64_C(0x0000E820762561C8), UINT64_C(0x0003069976AB441A), UINT64_C(0x0002F2D34AB64E3A), UINT64_C(0x0008DA8798C4984C), UINT64_C(0x00018E10EC261ED8), UINT64_C(0x0005572CDE59EF3B), UINT64_C(0x0005243583492A31), UINT64_C(0x000553EBD5BD4F76)}, {UINT64_C(0x00003CD44541889B), UINT64_C(0x0000A15FD3B46A03), UINT64_C(0x0002445DDC01C49C), UINT64_C(0x0000FF7AB524990D), UINT64_C(0x00067DD44CEF1BC4), UINT64_C(0x00011A6A854E822E), UINT64_C(0x00020922345D9089), UINT64_C(0x00004F8BE8B1C52C), UINT64_C(0x000334AD5EA9B90D), UINT64_C(0x0004E5FE9C90028A)}}, {{UINT64_C(0x000068C177996387), UINT64_C(0x000019B13C995F39), UINT64_C(0x00065BFEAB3691E1), UINT64_C(0x0003CEAA9FF90919), UINT64_C(0x00070CE531ADC5B6), UINT64_C(0x000E2CEBFDBB5331), UINT64_C(0x0000D202455F41D3), UINT64_C(0x000671180605FF9D), UINT64_C(0x00011AD81B928580), UINT64_C(0x00028FC16864D6F0)}, {UINT64_C(0x000A61CD60DAEB8D), UINT64_C(0x000365700D8B7834), UINT64_C(0x00057BC9FDF724EE), UINT64_C(0x0001F7A1B9F925AF), UINT64_C(0x0007AA4AEFCA0359), UINT64_C(0x00034A27F50833A0), UINT64_C(0x0000ED7927DFB95D), UINT64_C(0x0007B8F116040DEA), UINT64_C(0x000117F98382AC39), UINT64_C(0x00020171F463D451)}}, {{UINT64_C(0x00059264A9F49C09), UINT64_C(0x00044F0F00815067), UINT64_C(0x000151E20E3CE2F3), UINT64_C(0x0003CB10A0F261AA), UINT64_C(0x00019DAE7938AAE9), UINT64_C(0x000FA6C983FECF4D), UINT64_C(0x0000A4A7CA460046), UINT64_C(0x00069CD684FAA9A3), UINT64_C(0x0005962FD31973AC), UINT64_C(0x0001A315E3CE66B5)}, {UINT64_C(0x0001EE33900F6430), UINT64_C(0x00064BE92C2C1CDD), UINT64_C(0x00011FCA5905D7B7), UINT64_C(0x0001664E4C15055D), UINT64_C(0x000124F50846C1DD), UINT64_C(0x0005A95B64C89DD6), UINT64_C(0x000635C7B470A25B), UINT64_C(0x00044199D92D72BC), UINT64_C(0x000317D8CC4D6593), UINT64_C(0x0004A1E8E879471E)}}, {{UINT64_C(0x00070F53D415523F), UINT64_C(0x00008843EE85FF0C), UINT64_C(0x0001E10C523BB14C), UINT64_C(0x0004756E413F0932), UINT64_C(0x0003DE85A220DF46), UINT64_C(0x000E272251866340), UINT64_C(0x00008C97549ABE3D), UINT64_C(0x0003998C7C359F9D), UINT64_C(0x00018EC0C21FA45C), UINT64_C(0x0007A6A308E8E50C)}, {UINT64_C(0x0002370A35276C0F), UINT64_C(0x0002729B26DBEA22), UINT64_C(0x0000D95854453918), UINT64_C(0x0000FEBB57C7378F), UINT64_C(0x0002E3F0D283969D), UINT64_C(0x000875CC00175050), UINT64_C(0x00050E7B3F62B00A), UINT64_C(0x0006E1A11C5C2BEA), UINT64_C(0x0003461785DC962F), UINT64_C(0x00006A29E20D62BD)}}, {{UINT64_C(0x000537C77DAC5528), UINT64_C(0x00008C1BE92F83C6), UINT64_C(0x000611D61F939CC5), UINT64_C(0x00067A47050E3CE6), UINT64_C(0x0006FC68EE4297A6), UINT64_C(0x00076CC8299AC1F1), UINT64_C(0x000798EF7F4F028F), UINT64_C(0x0003D929F2A08907), UINT64_C(0x0007F626DB8181AE), UINT64_C(0x00038C7518A169E3)}, {UINT64_C(0x0003C2C303DDCFAE), UINT64_C(0x0005A51351AFA1EB), UINT64_C(0x00033D8168A6178F), UINT64_C(0x0002BAE4B7BD921A), UINT64_C(0x00079BB0E6C13360), UINT64_C(0x0002FEC8223E6E6A), UINT64_C(0x00057EB3E02985A1), UINT64_C(0x0006A5F6F23E337D), UINT64_C(0x0000B51AD9A8DF7E), UINT64_C(0x0007C85F9D74F60E)}}, }, { {{UINT64_C(0x000373002424FC6B), UINT64_C(0x000265A533B8CF47), UINT64_C(0x00015EAD4A0AE37C), UINT64_C(0x00022EEEA45AEA56), UINT64_C(0x0005CA0E0AF3AAE5), UINT64_C(0x000216AD75D115B7), UINT64_C(0x0002B2885E63BCC1), UINT64_C(0x00001DEB58FCEA8C), UINT64_C(0x00050D28722A0E55), UINT64_C(0x00016C1C97050E66)}, {UINT64_C(0x000BACBCDEEAFAB6), UINT64_C(0x000210A7858140DE), UINT64_C(0x0006E228E5AB34EE), UINT64_C(0x00038068E28B5065), UINT64_C(0x0002BDB4015D78E6), UINT64_C(0x000E7DF0E5A47C2C), UINT64_C(0x000091791C6E0564), UINT64_C(0x00047E8BA82005E7), UINT64_C(0x0002E2976DD2714D), UINT64_C(0x00029F182BE6C8A5)}}, {{UINT64_C(0x000D83B94CB40D60), UINT64_C(0x000182EE55A47AB2), UINT64_C(0x0002A9A2A11F16C0), UINT64_C(0x00050CC737555D01), UINT64_C(0x000189A2DA48966B), UINT64_C(0x000A973CE36E61C1), UINT64_C(0x0004AF3A17E7233F), UINT64_C(0x00045CB6428ED4F1), UINT64_C(0x0001768287382675), UINT64_C(0x0000C6B22C10147C)}, {UINT64_C(0x000401DB5A4C6A3E), UINT64_C(0x00023EE16B73E10C), UINT64_C(0x0002FEA5C8440A34), UINT64_C(0x00018E7129952281), UINT64_C(0x0001A31C2F9C5948), UINT64_C(0x0006685938AF9BD8), UINT64_C(0x0002F4C9F4721C11), UINT64_C(0x0006D88254B2B220), UINT64_C(0x00007BC40460348E), UINT64_C(0x0001773137A2404B)}}, {{UINT64_C(0x000C6B4D1144D64A), UINT64_C(0x0006D90E0E79B31D), UINT64_C(0x00068DA0056E18D5), UINT64_C(0x0005340F7E02D070), UINT64_C(0x0001D5DF828F1380), UINT64_C(0x000636F195DCDB2B), UINT64_C(0x0000E7E7E014119C), UINT64_C(0x0007B435A9FBE2C0), UINT64_C(0x00076EB85EA1EFBB), UINT64_C(0x00022AA0A0C698A1)}, {UINT64_C(0x000B9CB571CA9CF0), UINT64_C(0x0004B86CE22A5E6D), UINT64_C(0x0006E4462F85131B), UINT64_C(0x0002F155E75A2EED), UINT64_C(0x00063F764F24AC73), UINT64_C(0x000FFA94474DEF2E), UINT64_C(0x0004A1B60F2E7A47), UINT64_C(0x00063EE08D47164B), UINT64_C(0x0005ECDC6B2A7E48), UINT64_C(0x00071C6910C71824)}}, {{UINT64_C(0x0007813E229F97CB), UINT64_C(0x00043ADE3B460997), UINT64_C(0x0005E8C96137590A), UINT64_C(0x000484EEC3127431), UINT64_C(0x0003A512D58F34EC), UINT64_C(0x000B47722D5ECC77), UINT64_C(0x00076E35AE2C410D), UINT64_C(0x000142A4F3860A59), UINT64_C(0x0005AD2423E3E88D), UINT64_C(0x00032A4A2C6376BD)}, {UINT64_C(0x0009DB45FC2C575A), UINT64_C(0x0007CF11E987B02F), UINT64_C(0x000329AE7B16D79A), UINT64_C(0x0006BA1FDDBA003F), UINT64_C(0x00072F40C3D1D0E1), UINT64_C(0x000A2168272DEAEB), UINT64_C(0x00040B3BC5E98BE4), UINT64_C(0x0005426244ED0D94), UINT64_C(0x000610D19F336894), UINT64_C(0x0001EC5B0CD24773)}}, {{UINT64_C(0x000126DC95FF47CB), UINT64_C(0x0006D821C64139FD), UINT64_C(0x00036D6653EA637C), UINT64_C(0x0005A97F942DD0FF), UINT64_C(0x00000318724B076A), UINT64_C(0x000ED3C1F9BBE805), UINT64_C(0x0002E76961D49FCA), UINT64_C(0x000759A40326E7D9), UINT64_C(0x0002641EFF076C29), UINT64_C(0x00006CA5347A2017)}, {UINT64_C(0x00010765B5C69CBC), UINT64_C(0x0001782241147DAD), UINT64_C(0x000104E6A5297609), UINT64_C(0x0006495BFD0C4503), UINT64_C(0x0006B9D0D10CA297), UINT64_C(0x00034803A8F4A7B8), UINT64_C(0x00069B1A0E7F94AF), UINT64_C(0x00076E9131740435), UINT64_C(0x00079E1647538E00), UINT64_C(0x000381FB07DCC831)}}, {{UINT64_C(0x0000623E19A529B0), UINT64_C(0x0002A1F34419A0BA), UINT64_C(0x0007450BB7C4CEEC), UINT64_C(0x000724D0766E901A), UINT64_C(0x0006FDCF27272EFB), UINT64_C(0x000E99E1E2856702), UINT64_C(0x0006AF1B534CF0E7), UINT64_C(0x00024538A8F87630), UINT64_C(0x0002DBFF74B7F80D), UINT64_C(0x0006689E4424A84F)}, {UINT64_C(0x000A25CFDE9D7DDB), UINT64_C(0x00025B06D5477447), UINT64_C(0x00040103EF10F2A9), UINT64_C(0x0000589A19B6B3E8), UINT64_C(0x0001001736EC3E24), UINT64_C(0x000B77124673C96A), UINT64_C(0x00053B0645C3104F), UINT64_C(0x00066AEE9346C15C), UINT64_C(0x000336D117178F21), UINT64_C(0x0004C8732602283A)}}, {{UINT64_C(0x000B072ABBE3BA75), UINT64_C(0x00015A08F89BDB09), UINT64_C(0x00034F423F9E09E0), UINT64_C(0x0001EF27A09841EF), UINT64_C(0x00065B203436FF75), UINT64_C(0x00018864D568B13F), UINT64_C(0x00069449D057FB4C), UINT64_C(0x000005868A6A3CD5), UINT64_C(0x0007932D29BB522B), UINT64_C(0x0001069BF48AA2B7)}, {UINT64_C(0x000EE21FDCDDE7C7), UINT64_C(0x0006CAF6E905C045), UINT64_C(0x00031A72930255A6), UINT64_C(0x00076FCF5F4A6F74), UINT64_C(0x00001AA0517A0131), UINT64_C(0x00040DDFF2E11FAF), UINT64_C(0x0004A5512DFF3F02), UINT64_C(0x00055F08A9212CD2), UINT64_C(0x000519761093F184), UINT64_C(0x00027B6A1B2A1EF7)}}, {{UINT64_C(0x000EA5C61B6DBC4E), UINT64_C(0x00051A4DCC7D6792), UINT64_C(0x0003357B7EAF7670), UINT64_C(0x000554E802A50353), UINT64_C(0x00072BF41E70B24F), UINT64_C(0x000049E5C8DA1177), UINT64_C(0x00037C5CB7FD16BA), UINT64_C(0x0003803F2EEEF15D), UINT64_C(0x000146D4B548675B), UINT64_C(0x0000E11A2717E6B2)}, {UINT64_C(0x000C794070988A0A), UINT64_C(0x0002A32EF7BCEEB5), UINT64_C(0x00050C772349C586), UINT64_C(0x0000FA8C6654583D), UINT64_C(0x000385E544F610DF), UINT64_C(0x000C27780562C065), UINT64_C(0x0004D0E5952E5D7A), UINT64_C(0x00022358D60920AE), UINT64_C(0x000647D3BCA69083), UINT64_C(0x000663401832196F)}}, {{UINT64_C(0x0002E9B7160E3961), UINT64_C(0x0000CFDD2754F2C2), UINT64_C(0x000737ED6627095B), UINT64_C(0x0000907EAC442E04), UINT64_C(0x0004BFDDFD6D0E23), UINT64_C(0x0009C97A7D587EEF), UINT64_C(0x000543F2822FAFB5), UINT64_C(0x0003FDF6AF5D7A19), UINT64_C(0x0000FC963721698D), UINT64_C(0x000179F21E6577FB)}, {UINT64_C(0x00025DABF637CE7B), UINT64_C(0x0000DEF29AADAC3D), UINT64_C(0x0001737E91658123), UINT64_C(0x000249402C7B4BC4), UINT64_C(0x0001F964C1BA2B35), UINT64_C(0x0006547130478601), UINT64_C(0x00004A763BB9F26E), UINT64_C(0x0002DEE0532A3ABA), UINT64_C(0x0000FB73209B3189), UINT64_C(0x000323CB18309CBF)}}, {{UINT64_C(0x000F430885B15B6B), UINT64_C(0x00075D059AEC5A1E), UINT64_C(0x0004453A277EFFCE), UINT64_C(0x00064F823D9E2950), UINT64_C(0x00073827A14B9299), UINT64_C(0x0001C133BA90B752), UINT64_C(0x0002FE7DB431EADF), UINT64_C(0x0007321007818326), UINT64_C(0x00071653A5874521), UINT64_C(0x000797A5565F102D)}, {UINT64_C(0x00036CFD54EEA72C), UINT64_C(0x0000808016DA4E23), UINT64_C(0x0003D2134B084DFE), UINT64_C(0x00011B5581647A89), UINT64_C(0x00052FAD726D60BB), UINT64_C(0x000DCFDB5420868A), UINT64_C(0x000750548DD329FF), UINT64_C(0x00019FE6DA0749CC), UINT64_C(0x00005B85FA39A2C1), UINT64_C(0x00023AE3BBD89F61)}}, {{UINT64_C(0x000CA8883C4EF58F), UINT64_C(0x0006E759199F54FA), UINT64_C(0x00055E8867F4288D), UINT64_C(0x000225E439FE7035), UINT64_C(0x00040EE9678BC4D1), UINT64_C(0x000E0C8FEC05A2E2), UINT64_C(0x000586D8C13D487A), UINT64_C(0x00008B4A7E530498), UINT64_C(0x0001E781B4E18C6D), UINT64_C(0x00017D763BE7083C)}, {UINT64_C(0x000A451105CF54F0), UINT64_C(0x000637BF27522C26), UINT64_C(0x0006042AB901CB43), UINT64_C(0x0000F3A157D77CEC), UINT64_C(0x00040B5652E5D030), UINT64_C(0x0003F395A2C01F02), UINT64_C(0x00041B950FC573CA), UINT64_C(0x0007DED4FDDEA439), UINT64_C(0x00012CAC59609158), UINT64_C(0x0000EC63DC4F41D8)}}, {{UINT64_C(0x000027B04D23C68B), UINT64_C(0x000525B4F2B59AFC), UINT64_C(0x0001473B3791B81E), UINT64_C(0x0004234680C59597), UINT64_C(0x00049B5B1E7B7404), UINT64_C(0x000CA846EE9B6288), UINT64_C(0x0002F4D705212A30), UINT64_C(0x000435199A6D217F), UINT64_C(0x0002C022FF19EE1F), UINT64_C(0x0003594F8F0758A9)}, {UINT64_C(0x000968170931C47A), UINT64_C(0x000621AD96C9DEDE), UINT64_C(0x0001F40DB9806854), UINT64_C(0x0006535786069F3A), UINT64_C(0x0002BAAF09744048), UINT64_C(0x000CE1A02746C6D1), UINT64_C(0x000159007061AA2D), UINT64_C(0x000679FCA2D81FCD), UINT64_C(0x000418AC9FB46B4D), UINT64_C(0x000308BE060423D1)}}, {{UINT64_C(0x0000C4AC87AF9AD9), UINT64_C(0x0000CDECE641A609), UINT64_C(0x0001E12CC58F8FCD), UINT64_C(0x000510A219809940), UINT64_C(0x0006DA7CEA8384F8), UINT64_C(0x000AB5F0694566E0), UINT64_C(0x0001CC9EE803A140), UINT64_C(0x0000F9FBB28BDD1E), UINT64_C(0x0007F4EFEB56B1DE), UINT64_C(0x000277916C4688BF)}, {UINT64_C(0x000D23553900C111), UINT64_C(0x0002646A893D2545), UINT64_C(0x0003F85DED9F79E4), UINT64_C(0x0003D6EBC7956C87), UINT64_C(0x00042C8421E33668), UINT64_C(0x0000CE0FCEE92113), UINT64_C(0x00062F37FB71D455), UINT64_C(0x0002B5C2D8B8E0D9), UINT64_C(0x0001F89A7B791F03), UINT64_C(0x00026E0534AAFC55)}}, {{UINT64_C(0x0002995D9382FB5B), UINT64_C(0x0007C05714B2BDCD), UINT64_C(0x00055EFDFFD811CA), UINT64_C(0x0000C43B6FA2E22F), UINT64_C(0x0003930FE770F72D), UINT64_C(0x00082F4073A9EB83), UINT64_C(0x00028C90A8534165), UINT64_C(0x00020C6D2C543EAE), UINT64_C(0x0003F98A8E8F71B7), UINT64_C(0x0007B8FB4D43C48C)}, {UINT64_C(0x000C54F1DA463909), UINT64_C(0x000482EC99C805E1), UINT64_C(0x000301F27ED477A1), UINT64_C(0x0005CA99320599DA), UINT64_C(0x0003F84676223EB7), UINT64_C(0x00001D5F50BC87AC), UINT64_C(0x0006D360C6473C45), UINT64_C(0x00078FE24EB5EF6D), UINT64_C(0x0003E18E1D8C918F), UINT64_C(0x0000BAAA9526A788)}}, {{UINT64_C(0x0003CFAC186FC15D), UINT64_C(0x0004079422F8115B), UINT64_C(0x00015745819F82E6), UINT64_C(0x0003618BCA6799CF), UINT64_C(0x000147DCBEB05016), UINT64_C(0x0008E01C4060F0AE), UINT64_C(0x0006DD9C9ABCADD5), UINT64_C(0x00055C9418FA0C56), UINT64_C(0x0004ADEDA517CF14), UINT64_C(0x0000A4AEB8D1A937)}, {UINT64_C(0x0004727D18C04C1D), UINT64_C(0x000459FEB8D4258F), UINT64_C(0x000134BF4171D346), UINT64_C(0x000686442480B1AF), UINT64_C(0x000739A7BBB7AB37), UINT64_C(0x000F61BC7DC00473), UINT64_C(0x0003746597B948CE), UINT64_C(0x000125EAB46F1D2B), UINT64_C(0x000033F4805B72AE), UINT64_C(0x000584748C0B9409)}}, {{UINT64_C(0x00092A49D3069003), UINT64_C(0x0005840D8AF17ED6), UINT64_C(0x000174B6F581B1E5), UINT64_C(0x000163189D301971), UINT64_C(0x0000018D239951ED), UINT64_C(0x0009B7C92C641D5C), UINT64_C(0x000289C88DD6E0A4), UINT64_C(0x0000CE7ED79D24F4), UINT64_C(0x0007F5A09563A4B9), UINT64_C(0x0007A4A25F6B4D5C)}, {UINT64_C(0x00002966A02D81D0), UINT64_C(0x00079C7EA96452D3), UINT64_C(0x0007C34AB0AA795A), UINT64_C(0x00050A1B57CC0E57), UINT64_C(0x0007DE8829195BCB), UINT64_C(0x0006242A9B8D0EC5), UINT64_C(0x0005DD50FAD307D9), UINT64_C(0x0001B700B637CA0B), UINT64_C(0x0003455689EBE7C1), UINT64_C(0x0002782C47D2932F)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 6 * ASSERT: a = -3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(t0, X); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(t1, Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(t2, Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t3, X, Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, t3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t4, Y, Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, X, Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, b, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(X3, X3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, t2, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t2, t2, t3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, b, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Z3, Z3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Z3, Z3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t0, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t0, t0, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t0, t4, t4); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, t0, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, Z3); } /*- * out1 = (arg1 == 0) ? 0 : nz * NB: this is not a "mod p equiv" 0, but literal 0 * NB: this is not a real Fiat function, just named that way for consistency. */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_nonzero(limb_t *out1, const fe_t arg1) { limb_t x1 = 0; int i; for (i = 0; i < LIMB_CNT; i++) x1 |= arg1[i]; *out1 = x1; } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed.op3 * https://eprint.iacr.org/2015/1060 Alg 5 * ASSERT: a = -3 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_tc26_gost_3410_2012_512_paramSetA_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t4, Y2, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, t4, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, X2, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, Y3, X1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, b, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, X3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Z3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, b, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, Z1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t2, t1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t0, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, t4, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t2, t0, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(X3, t3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, X3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, t4, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, t1); /* if P is inf, throw all that away and take Q */ fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(R->X, nz, Q->X, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 4 * ASSERT: a = -3 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t2, Z1, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, Y1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t5, Y2, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t4, t4, t5); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t5, t1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t4, t4, t5); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, X1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, X2, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(X3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, b, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, X3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Z3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, b, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, t2, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t2, t1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t0, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, t4, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t2, t0, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(X3, t3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, X3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, t4, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, t1); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[64], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 64) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[103], const unsigned char in[64]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 102; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[513], const unsigned char in[64]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 513; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[64], const unsigned char b[64], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[513] = {0}; int8_t bnaf[513] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 512; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[64], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[102] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 101; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(out->Y, lut.Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[64]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 9; i >= 0; i--) { for (j = 0; i != 9 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 12; j++) { if (j * 10 + i > 102) continue; d = rnaf[j * 10 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(out->Y, lut.Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[64], unsigned char outy[64], const unsigned char a[64], const unsigned char b[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes(P.Y, iny); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes(P.Y, iny); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[64] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_tc26_gost_3410_2012_512_paramSetA( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(n, b_n, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_tc26_gost_3410_2012_512_paramSetA(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_tc26_gost_3410_2012_512_paramSetA(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 64) != 64) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #else /* __SIZEOF_INT128__ */ #include #include #define LIMB_BITS 32 #define LIMB_CNT 23 /* Field elements */ typedef uint32_t fe_t[LIMB_CNT]; typedef uint32_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETA_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) #define fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(c, a, b) \ fiat_id_tc26_gost_3410_2012_512_paramSetA_add(c, a, b); \ fiat_id_tc26_gost_3410_2012_512_paramSetA_carry(c, c) #define fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(c, a, b) \ fiat_id_tc26_gost_3410_2012_512_paramSetA_sub(c, a, b); \ fiat_id_tc26_gost_3410_2012_512_paramSetA_carry(c, c) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: unsaturated_solinas --static --use-value-barrier id_tc26_gost_3410_2012_512_paramSetA 32 '(auto)' '2^512 - 569' */ /* curve description: id_tc26_gost_3410_2012_512_paramSetA */ /* machine_wordsize = 32 (from "32") */ /* requested operations: (all) */ /* n = 23 (from "(auto)") */ /* s-c = 2^512 - [(1, 569)] (from "2^512 - 569") */ /* tight_bounds_multiplier = 1 (from "") */ /* */ /* Computed values: */ /* carry_chain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 1] */ /* eval z = z[0] + (z[1] << 23) + (z[2] << 45) + (z[3] << 67) + (z[4] << 90) + (z[5] << 112) + (z[6] << 134) + (z[7] << 156) + (z[8] << 179) + (z[9] << 201) + (z[10] << 223) + (z[11] << 245) + (z[12] << 0x10c) + (z[13] << 0x122) + (z[14] << 0x138) + (z[15] << 0x14e) + (z[16] << 0x165) + (z[17] << 0x17b) + (z[18] << 0x191) + (z[19] << 0x1a7) + (z[20] << 0x1be) + (z[21] << 0x1d4) + (z[22] << 0x1ea) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) + (z[56] << 0x1c0) + (z[57] << 0x1c8) + (z[58] << 0x1d0) + (z[59] << 0x1d8) + (z[60] << 0x1e0) + (z[61] << 0x1e8) + (z[62] << 0x1f0) + (z[63] << 0x1f8) */ /* balance = [0xfffb8e, 0x7ffffe, 0x7ffffe, 0xfffffe, 0x7ffffe, 0x7ffffe, 0x7ffffe, 0xfffffe, 0x7ffffe, 0x7ffffe, 0x7ffffe, 0xfffffe, 0x7ffffe, 0x7ffffe, 0x7ffffe, 0xfffffe, 0x7ffffe, 0x7ffffe, 0x7ffffe, 0xfffffe, 0x7ffffe, 0x7ffffe, 0x7ffffe] */ #include typedef unsigned char fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1; typedef signed char fiat_id_tc26_gost_3410_2012_512_paramSetA_int1; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETA_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint32_t fiat_id_tc26_gost_3410_2012_512_paramSetA_value_barrier_u32(uint32_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_tc26_gost_3410_2012_512_paramSetA_value_barrier_u32(x) (x) #endif /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^22 * out2 = ⌊(arg1 + arg2 + arg3) / 2^22⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x3fffff] * arg3: [0x0 ~> 0x3fffff] * Output Bounds: * out1: [0x0 ~> 0x3fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint32_t x1; uint32_t x2; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT32_C(0x3fffff)); x3 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x1 >> 22); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^22 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^22⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x3fffff] * arg3: [0x0 ~> 0x3fffff] * Output Bounds: * out1: [0x0 ~> 0x3fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, uint32_t arg2, uint32_t arg3) { int32_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetA_int1 x2; uint32_t x3; x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_int1)(x1 >> 22); x3 = (x1 & UINT32_C(0x3fffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u23 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^23 * out2 = ⌊(arg1 + arg2 + arg3) / 2^23⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7fffff] * arg3: [0x0 ~> 0x7fffff] * Output Bounds: * out1: [0x0 ~> 0x7fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u23( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint32_t x1; uint32_t x2; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT32_C(0x7fffff)); x3 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x1 >> 23); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u23 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^23 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^23⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7fffff] * arg3: [0x0 ~> 0x7fffff] * Output Bounds: * out1: [0x0 ~> 0x7fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u23( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, uint32_t arg2, uint32_t arg3) { int32_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetA_int1 x2; uint32_t x3; x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_int1)(x1 >> 23); x3 = (x1 & UINT32_C(0x7fffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, uint32_t arg2, uint32_t arg3) { fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x1; uint32_t x2; uint32_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_int1)(0x0 - x1) & UINT32_C(0xffffffff)); x3 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_value_barrier_u32(x2) & arg3) | (fiat_id_tc26_gost_3410_2012_512_paramSetA_value_barrier_u32((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul multiplies two field elements and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] * arg2: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] * Output Bounds: * out1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul( uint32_t out1[23], const uint32_t arg1[23], const uint32_t arg2[23]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint64_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint64_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; uint64_t x110; uint64_t x111; uint64_t x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; uint64_t x129; uint64_t x130; uint64_t x131; uint64_t x132; uint64_t x133; uint64_t x134; uint64_t x135; uint64_t x136; uint64_t x137; uint64_t x138; uint64_t x139; uint64_t x140; uint64_t x141; uint64_t x142; uint64_t x143; uint64_t x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; uint64_t x150; uint64_t x151; uint64_t x152; uint64_t x153; uint64_t x154; uint64_t x155; uint64_t x156; uint64_t x157; uint64_t x158; uint64_t x159; uint64_t x160; uint64_t x161; uint64_t x162; uint64_t x163; uint64_t x164; uint64_t x165; uint64_t x166; uint64_t x167; uint64_t x168; uint64_t x169; uint64_t x170; uint64_t x171; uint64_t x172; uint64_t x173; uint64_t x174; uint64_t x175; uint64_t x176; uint64_t x177; uint64_t x178; uint64_t x179; uint64_t x180; uint64_t x181; uint64_t x182; uint64_t x183; uint64_t x184; uint64_t x185; uint64_t x186; uint64_t x187; uint64_t x188; uint64_t x189; uint64_t x190; uint64_t x191; uint64_t x192; uint64_t x193; uint64_t x194; uint64_t x195; uint64_t x196; uint64_t x197; uint64_t x198; uint64_t x199; uint64_t x200; uint64_t x201; uint64_t x202; uint64_t x203; uint64_t x204; uint64_t x205; uint64_t x206; uint64_t x207; uint64_t x208; uint64_t x209; uint64_t x210; uint64_t x211; uint64_t x212; uint64_t x213; uint64_t x214; uint64_t x215; uint64_t x216; uint64_t x217; uint64_t x218; uint64_t x219; uint64_t x220; uint64_t x221; uint64_t x222; uint64_t x223; uint64_t x224; uint64_t x225; uint64_t x226; uint64_t x227; uint64_t x228; uint64_t x229; uint64_t x230; uint64_t x231; uint64_t x232; uint64_t x233; uint64_t x234; uint64_t x235; uint64_t x236; uint64_t x237; uint64_t x238; uint64_t x239; uint64_t x240; uint64_t x241; uint64_t x242; uint64_t x243; uint64_t x244; uint64_t x245; uint64_t x246; uint64_t x247; uint64_t x248; uint64_t x249; uint64_t x250; uint64_t x251; uint64_t x252; uint64_t x253; uint64_t x254; uint64_t x255; uint64_t x256; uint64_t x257; uint64_t x258; uint64_t x259; uint64_t x260; uint64_t x261; uint64_t x262; uint64_t x263; uint64_t x264; uint64_t x265; uint64_t x266; uint64_t x267; uint64_t x268; uint64_t x269; uint64_t x270; uint64_t x271; uint64_t x272; uint64_t x273; uint64_t x274; uint64_t x275; uint64_t x276; uint64_t x277; uint64_t x278; uint64_t x279; uint64_t x280; uint64_t x281; uint64_t x282; uint64_t x283; uint64_t x284; uint64_t x285; uint64_t x286; uint64_t x287; uint64_t x288; uint64_t x289; uint64_t x290; uint64_t x291; uint64_t x292; uint64_t x293; uint64_t x294; uint64_t x295; uint64_t x296; uint64_t x297; uint64_t x298; uint64_t x299; uint64_t x300; uint64_t x301; uint64_t x302; uint64_t x303; uint64_t x304; uint64_t x305; uint64_t x306; uint64_t x307; uint64_t x308; uint64_t x309; uint64_t x310; uint64_t x311; uint64_t x312; uint64_t x313; uint64_t x314; uint64_t x315; uint64_t x316; uint64_t x317; uint64_t x318; uint64_t x319; uint64_t x320; uint64_t x321; uint64_t x322; uint64_t x323; uint64_t x324; uint64_t x325; uint64_t x326; uint64_t x327; uint64_t x328; uint64_t x329; uint64_t x330; uint64_t x331; uint64_t x332; uint64_t x333; uint64_t x334; uint64_t x335; uint64_t x336; uint64_t x337; uint64_t x338; uint64_t x339; uint64_t x340; uint64_t x341; uint64_t x342; uint64_t x343; uint64_t x344; uint64_t x345; uint64_t x346; uint64_t x347; uint64_t x348; uint64_t x349; uint64_t x350; uint64_t x351; uint64_t x352; uint64_t x353; uint64_t x354; uint64_t x355; uint64_t x356; uint64_t x357; uint64_t x358; uint64_t x359; uint64_t x360; uint64_t x361; uint64_t x362; uint64_t x363; uint64_t x364; uint64_t x365; uint64_t x366; uint64_t x367; uint64_t x368; uint64_t x369; uint64_t x370; uint64_t x371; uint64_t x372; uint64_t x373; uint64_t x374; uint64_t x375; uint64_t x376; uint64_t x377; uint64_t x378; uint64_t x379; uint64_t x380; uint64_t x381; uint64_t x382; uint64_t x383; uint64_t x384; uint64_t x385; uint64_t x386; uint64_t x387; uint64_t x388; uint64_t x389; uint64_t x390; uint64_t x391; uint64_t x392; uint64_t x393; uint64_t x394; uint64_t x395; uint64_t x396; uint64_t x397; uint64_t x398; uint64_t x399; uint64_t x400; uint64_t x401; uint64_t x402; uint64_t x403; uint64_t x404; uint64_t x405; uint64_t x406; uint64_t x407; uint64_t x408; uint64_t x409; uint64_t x410; uint64_t x411; uint64_t x412; uint64_t x413; uint64_t x414; uint64_t x415; uint64_t x416; uint64_t x417; uint64_t x418; uint64_t x419; uint64_t x420; uint64_t x421; uint64_t x422; uint64_t x423; uint64_t x424; uint64_t x425; uint64_t x426; uint64_t x427; uint64_t x428; uint64_t x429; uint64_t x430; uint64_t x431; uint64_t x432; uint64_t x433; uint64_t x434; uint64_t x435; uint64_t x436; uint64_t x437; uint64_t x438; uint64_t x439; uint64_t x440; uint64_t x441; uint64_t x442; uint64_t x443; uint64_t x444; uint64_t x445; uint64_t x446; uint64_t x447; uint64_t x448; uint64_t x449; uint64_t x450; uint64_t x451; uint64_t x452; uint64_t x453; uint64_t x454; uint64_t x455; uint64_t x456; uint64_t x457; uint64_t x458; uint64_t x459; uint64_t x460; uint64_t x461; uint64_t x462; uint64_t x463; uint64_t x464; uint64_t x465; uint64_t x466; uint64_t x467; uint64_t x468; uint64_t x469; uint64_t x470; uint64_t x471; uint64_t x472; uint64_t x473; uint64_t x474; uint64_t x475; uint64_t x476; uint64_t x477; uint64_t x478; uint64_t x479; uint64_t x480; uint64_t x481; uint64_t x482; uint64_t x483; uint64_t x484; uint64_t x485; uint64_t x486; uint64_t x487; uint64_t x488; uint64_t x489; uint64_t x490; uint64_t x491; uint64_t x492; uint64_t x493; uint64_t x494; uint64_t x495; uint64_t x496; uint64_t x497; uint64_t x498; uint64_t x499; uint64_t x500; uint64_t x501; uint64_t x502; uint64_t x503; uint64_t x504; uint64_t x505; uint64_t x506; uint64_t x507; uint64_t x508; uint64_t x509; uint64_t x510; uint64_t x511; uint64_t x512; uint64_t x513; uint64_t x514; uint64_t x515; uint64_t x516; uint64_t x517; uint64_t x518; uint64_t x519; uint64_t x520; uint64_t x521; uint64_t x522; uint64_t x523; uint64_t x524; uint64_t x525; uint64_t x526; uint64_t x527; uint64_t x528; uint64_t x529; uint64_t x530; uint64_t x531; uint32_t x532; uint64_t x533; uint64_t x534; uint64_t x535; uint64_t x536; uint64_t x537; uint64_t x538; uint64_t x539; uint64_t x540; uint64_t x541; uint64_t x542; uint64_t x543; uint64_t x544; uint64_t x545; uint64_t x546; uint64_t x547; uint64_t x548; uint64_t x549; uint64_t x550; uint64_t x551; uint64_t x552; uint64_t x553; uint64_t x554; uint64_t x555; uint64_t x556; uint32_t x557; uint64_t x558; uint64_t x559; uint32_t x560; uint64_t x561; uint64_t x562; uint32_t x563; uint64_t x564; uint64_t x565; uint32_t x566; uint64_t x567; uint64_t x568; uint32_t x569; uint64_t x570; uint64_t x571; uint32_t x572; uint64_t x573; uint64_t x574; uint32_t x575; uint64_t x576; uint64_t x577; uint32_t x578; uint64_t x579; uint64_t x580; uint32_t x581; uint64_t x582; uint64_t x583; uint32_t x584; uint64_t x585; uint64_t x586; uint32_t x587; uint64_t x588; uint64_t x589; uint32_t x590; uint64_t x591; uint64_t x592; uint32_t x593; uint64_t x594; uint64_t x595; uint32_t x596; uint64_t x597; uint64_t x598; uint32_t x599; uint64_t x600; uint64_t x601; uint32_t x602; uint64_t x603; uint64_t x604; uint32_t x605; uint64_t x606; uint64_t x607; uint32_t x608; uint64_t x609; uint64_t x610; uint32_t x611; uint64_t x612; uint64_t x613; uint32_t x614; uint64_t x615; uint64_t x616; uint32_t x617; uint64_t x618; uint32_t x619; uint32_t x620; uint64_t x621; uint64_t x622; uint32_t x623; uint32_t x624; uint32_t x625; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x626; uint32_t x627; uint32_t x628; x1 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[22]))); x2 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[21]))); x3 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[20])) * 0x2)); x4 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[19]))); x5 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[18]))); x6 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[17]))); x7 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[16])) * 0x2)); x8 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[15]))); x9 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[14]))); x10 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[13]))); x11 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[12])) * 0x2)); x12 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[11]))); x13 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[10]))); x14 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[9]))); x15 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[8])) * 0x2)); x16 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[7]))); x17 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[6]))); x18 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[5]))); x19 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[4])) * 0x2)); x20 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[3]))); x21 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[2]))); x22 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[1])) * 0x2)); x23 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[22]))); x24 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[21])) * 0x2)); x25 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[20])) * 0x2)); x26 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[19]))); x27 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[18]))); x28 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[17])) * 0x2)); x29 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[16])) * 0x2)); x30 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[15]))); x31 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[14]))); x32 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[13])) * 0x2)); x33 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[12])) * 0x2)); x34 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[11]))); x35 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[10]))); x36 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[9])) * 0x2)); x37 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[8])) * 0x2)); x38 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[7]))); x39 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[6]))); x40 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[5])) * 0x2)); x41 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[4])) * 0x2)); x42 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[3]))); x43 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[2])) * 0x2)); x44 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[22])) * 0x2)); x45 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[21])) * 0x2)); x46 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[20])) * 0x2)); x47 = (UINT16_C(0x239) * ((uint64_t)(arg1[20]) * (arg2[19]))); x48 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[18])) * 0x2)); x49 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[17])) * 0x2)); x50 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[16])) * 0x2)); x51 = (UINT16_C(0x239) * ((uint64_t)(arg1[20]) * (arg2[15]))); x52 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[14])) * 0x2)); x53 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[13])) * 0x2)); x54 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[12])) * 0x2)); x55 = (UINT16_C(0x239) * ((uint64_t)(arg1[20]) * (arg2[11]))); x56 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[10])) * 0x2)); x57 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[9])) * 0x2)); x58 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[8])) * 0x2)); x59 = (UINT16_C(0x239) * ((uint64_t)(arg1[20]) * (arg2[7]))); x60 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[6])) * 0x2)); x61 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[5])) * 0x2)); x62 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[4])) * 0x2)); x63 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[3])) * 0x2)); x64 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[22]))); x65 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[21]))); x66 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[20]))); x67 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[19]))); x68 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[18]))); x69 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[17]))); x70 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[16]))); x71 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[15]))); x72 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[14]))); x73 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[13]))); x74 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[12]))); x75 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[11]))); x76 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[10]))); x77 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[9]))); x78 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[8]))); x79 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[7]))); x80 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[6]))); x81 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[5]))); x82 = (UINT16_C(0x239) * (((uint64_t)(arg1[19]) * (arg2[4])) * 0x2)); x83 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[22]))); x84 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[21]))); x85 = (UINT16_C(0x239) * (((uint64_t)(arg1[18]) * (arg2[20])) * 0x2)); x86 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[19]))); x87 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[18]))); x88 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[17]))); x89 = (UINT16_C(0x239) * (((uint64_t)(arg1[18]) * (arg2[16])) * 0x2)); x90 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[15]))); x91 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[14]))); x92 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[13]))); x93 = (UINT16_C(0x239) * (((uint64_t)(arg1[18]) * (arg2[12])) * 0x2)); x94 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[11]))); x95 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[10]))); x96 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[9]))); x97 = (UINT16_C(0x239) * (((uint64_t)(arg1[18]) * (arg2[8])) * 0x2)); x98 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[7]))); x99 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[6]))); x100 = (UINT16_C(0x239) * (((uint64_t)(arg1[18]) * (arg2[5])) * 0x2)); x101 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[22]))); x102 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[21])) * 0x2)); x103 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[20])) * 0x2)); x104 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[19]))); x105 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[18]))); x106 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[17])) * 0x2)); x107 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[16])) * 0x2)); x108 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[15]))); x109 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[14]))); x110 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[13])) * 0x2)); x111 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[12])) * 0x2)); x112 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[11]))); x113 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[10]))); x114 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[9])) * 0x2)); x115 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[8])) * 0x2)); x116 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[7]))); x117 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[6])) * 0x2)); x118 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[22])) * 0x2)); x119 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[21])) * 0x2)); x120 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[20])) * 0x2)); x121 = (UINT16_C(0x239) * ((uint64_t)(arg1[16]) * (arg2[19]))); x122 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[18])) * 0x2)); x123 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[17])) * 0x2)); x124 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[16])) * 0x2)); x125 = (UINT16_C(0x239) * ((uint64_t)(arg1[16]) * (arg2[15]))); x126 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[14])) * 0x2)); x127 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[13])) * 0x2)); x128 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[12])) * 0x2)); x129 = (UINT16_C(0x239) * ((uint64_t)(arg1[16]) * (arg2[11]))); x130 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[10])) * 0x2)); x131 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[9])) * 0x2)); x132 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[8])) * 0x2)); x133 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[7])) * 0x2)); x134 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[22]))); x135 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[21]))); x136 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[20]))); x137 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[19]))); x138 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[18]))); x139 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[17]))); x140 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[16]))); x141 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[15]))); x142 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[14]))); x143 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[13]))); x144 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[12]))); x145 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[11]))); x146 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[10]))); x147 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[9]))); x148 = (UINT16_C(0x239) * (((uint64_t)(arg1[15]) * (arg2[8])) * 0x2)); x149 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[22]))); x150 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[21]))); x151 = (UINT16_C(0x239) * (((uint64_t)(arg1[14]) * (arg2[20])) * 0x2)); x152 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[19]))); x153 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[18]))); x154 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[17]))); x155 = (UINT16_C(0x239) * (((uint64_t)(arg1[14]) * (arg2[16])) * 0x2)); x156 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[15]))); x157 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[14]))); x158 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[13]))); x159 = (UINT16_C(0x239) * (((uint64_t)(arg1[14]) * (arg2[12])) * 0x2)); x160 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[11]))); x161 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[10]))); x162 = (UINT16_C(0x239) * (((uint64_t)(arg1[14]) * (arg2[9])) * 0x2)); x163 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[22]))); x164 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[21])) * 0x2)); x165 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[20])) * 0x2)); x166 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[19]))); x167 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[18]))); x168 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[17])) * 0x2)); x169 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[16])) * 0x2)); x170 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[15]))); x171 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[14]))); x172 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[13])) * 0x2)); x173 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[12])) * 0x2)); x174 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[11]))); x175 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[10])) * 0x2)); x176 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[22])) * 0x2)); x177 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[21])) * 0x2)); x178 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[20])) * 0x2)); x179 = (UINT16_C(0x239) * ((uint64_t)(arg1[12]) * (arg2[19]))); x180 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[18])) * 0x2)); x181 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[17])) * 0x2)); x182 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[16])) * 0x2)); x183 = (UINT16_C(0x239) * ((uint64_t)(arg1[12]) * (arg2[15]))); x184 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[14])) * 0x2)); x185 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[13])) * 0x2)); x186 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[12])) * 0x2)); x187 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[11])) * 0x2)); x188 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[22]))); x189 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[21]))); x190 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[20]))); x191 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[19]))); x192 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[18]))); x193 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[17]))); x194 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[16]))); x195 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[15]))); x196 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[14]))); x197 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[13]))); x198 = (UINT16_C(0x239) * (((uint64_t)(arg1[11]) * (arg2[12])) * 0x2)); x199 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[22]))); x200 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[21]))); x201 = (UINT16_C(0x239) * (((uint64_t)(arg1[10]) * (arg2[20])) * 0x2)); x202 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[19]))); x203 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[18]))); x204 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[17]))); x205 = (UINT16_C(0x239) * (((uint64_t)(arg1[10]) * (arg2[16])) * 0x2)); x206 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[15]))); x207 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[14]))); x208 = (UINT16_C(0x239) * (((uint64_t)(arg1[10]) * (arg2[13])) * 0x2)); x209 = (UINT16_C(0x239) * ((uint64_t)(arg1[9]) * (arg2[22]))); x210 = (UINT16_C(0x239) * (((uint64_t)(arg1[9]) * (arg2[21])) * 0x2)); x211 = (UINT16_C(0x239) * (((uint64_t)(arg1[9]) * (arg2[20])) * 0x2)); x212 = (UINT16_C(0x239) * ((uint64_t)(arg1[9]) * (arg2[19]))); x213 = (UINT16_C(0x239) * ((uint64_t)(arg1[9]) * (arg2[18]))); x214 = (UINT16_C(0x239) * (((uint64_t)(arg1[9]) * (arg2[17])) * 0x2)); x215 = (UINT16_C(0x239) * (((uint64_t)(arg1[9]) * (arg2[16])) * 0x2)); x216 = (UINT16_C(0x239) * ((uint64_t)(arg1[9]) * (arg2[15]))); x217 = (UINT16_C(0x239) * (((uint64_t)(arg1[9]) * (arg2[14])) * 0x2)); x218 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[22])) * 0x2)); x219 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[21])) * 0x2)); x220 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[20])) * 0x2)); x221 = (UINT16_C(0x239) * ((uint64_t)(arg1[8]) * (arg2[19]))); x222 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[18])) * 0x2)); x223 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[17])) * 0x2)); x224 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[16])) * 0x2)); x225 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[15])) * 0x2)); x226 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[22]))); x227 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[21]))); x228 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[20]))); x229 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[19]))); x230 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[18]))); x231 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[17]))); x232 = (UINT16_C(0x239) * (((uint64_t)(arg1[7]) * (arg2[16])) * 0x2)); x233 = (UINT16_C(0x239) * ((uint64_t)(arg1[6]) * (arg2[22]))); x234 = (UINT16_C(0x239) * ((uint64_t)(arg1[6]) * (arg2[21]))); x235 = (UINT16_C(0x239) * (((uint64_t)(arg1[6]) * (arg2[20])) * 0x2)); x236 = (UINT16_C(0x239) * ((uint64_t)(arg1[6]) * (arg2[19]))); x237 = (UINT16_C(0x239) * ((uint64_t)(arg1[6]) * (arg2[18]))); x238 = (UINT16_C(0x239) * (((uint64_t)(arg1[6]) * (arg2[17])) * 0x2)); x239 = (UINT16_C(0x239) * ((uint64_t)(arg1[5]) * (arg2[22]))); x240 = (UINT16_C(0x239) * (((uint64_t)(arg1[5]) * (arg2[21])) * 0x2)); x241 = (UINT16_C(0x239) * (((uint64_t)(arg1[5]) * (arg2[20])) * 0x2)); x242 = (UINT16_C(0x239) * ((uint64_t)(arg1[5]) * (arg2[19]))); x243 = (UINT16_C(0x239) * (((uint64_t)(arg1[5]) * (arg2[18])) * 0x2)); x244 = (UINT16_C(0x239) * (((uint64_t)(arg1[4]) * (arg2[22])) * 0x2)); x245 = (UINT16_C(0x239) * (((uint64_t)(arg1[4]) * (arg2[21])) * 0x2)); x246 = (UINT16_C(0x239) * (((uint64_t)(arg1[4]) * (arg2[20])) * 0x2)); x247 = (UINT16_C(0x239) * (((uint64_t)(arg1[4]) * (arg2[19])) * 0x2)); x248 = (UINT16_C(0x239) * ((uint64_t)(arg1[3]) * (arg2[22]))); x249 = (UINT16_C(0x239) * ((uint64_t)(arg1[3]) * (arg2[21]))); x250 = (UINT16_C(0x239) * (((uint64_t)(arg1[3]) * (arg2[20])) * 0x2)); x251 = (UINT16_C(0x239) * ((uint64_t)(arg1[2]) * (arg2[22]))); x252 = (UINT16_C(0x239) * (((uint64_t)(arg1[2]) * (arg2[21])) * 0x2)); x253 = (UINT16_C(0x239) * (((uint64_t)(arg1[1]) * (arg2[22])) * 0x2)); x254 = ((uint64_t)(arg1[22]) * (arg2[0])); x255 = ((uint64_t)(arg1[21]) * ((arg2[1]) * 0x2)); x256 = ((uint64_t)(arg1[21]) * (arg2[0])); x257 = ((uint64_t)(arg1[20]) * ((arg2[2]) * 0x2)); x258 = ((uint64_t)(arg1[20]) * ((arg2[1]) * 0x2)); x259 = ((uint64_t)(arg1[20]) * (arg2[0])); x260 = ((uint64_t)(arg1[19]) * (arg2[3])); x261 = ((uint64_t)(arg1[19]) * (arg2[2])); x262 = ((uint64_t)(arg1[19]) * (arg2[1])); x263 = ((uint64_t)(arg1[19]) * (arg2[0])); x264 = ((uint64_t)(arg1[18]) * ((arg2[4]) * 0x2)); x265 = ((uint64_t)(arg1[18]) * (arg2[3])); x266 = ((uint64_t)(arg1[18]) * (arg2[2])); x267 = ((uint64_t)(arg1[18]) * ((arg2[1]) * 0x2)); x268 = ((uint64_t)(arg1[18]) * (arg2[0])); x269 = ((uint64_t)(arg1[17]) * ((arg2[5]) * 0x2)); x270 = ((uint64_t)(arg1[17]) * ((arg2[4]) * 0x2)); x271 = ((uint64_t)(arg1[17]) * (arg2[3])); x272 = ((uint64_t)(arg1[17]) * ((arg2[2]) * 0x2)); x273 = ((uint64_t)(arg1[17]) * ((arg2[1]) * 0x2)); x274 = ((uint64_t)(arg1[17]) * (arg2[0])); x275 = ((uint64_t)(arg1[16]) * ((arg2[6]) * 0x2)); x276 = ((uint64_t)(arg1[16]) * ((arg2[5]) * 0x2)); x277 = ((uint64_t)(arg1[16]) * ((arg2[4]) * 0x2)); x278 = ((uint64_t)(arg1[16]) * ((arg2[3]) * 0x2)); x279 = ((uint64_t)(arg1[16]) * ((arg2[2]) * 0x2)); x280 = ((uint64_t)(arg1[16]) * ((arg2[1]) * 0x2)); x281 = ((uint64_t)(arg1[16]) * (arg2[0])); x282 = ((uint64_t)(arg1[15]) * (arg2[7])); x283 = ((uint64_t)(arg1[15]) * (arg2[6])); x284 = ((uint64_t)(arg1[15]) * (arg2[5])); x285 = ((uint64_t)(arg1[15]) * ((arg2[4]) * 0x2)); x286 = ((uint64_t)(arg1[15]) * (arg2[3])); x287 = ((uint64_t)(arg1[15]) * (arg2[2])); x288 = ((uint64_t)(arg1[15]) * (arg2[1])); x289 = ((uint64_t)(arg1[15]) * (arg2[0])); x290 = ((uint64_t)(arg1[14]) * ((arg2[8]) * 0x2)); x291 = ((uint64_t)(arg1[14]) * (arg2[7])); x292 = ((uint64_t)(arg1[14]) * (arg2[6])); x293 = ((uint64_t)(arg1[14]) * ((arg2[5]) * 0x2)); x294 = ((uint64_t)(arg1[14]) * ((arg2[4]) * 0x2)); x295 = ((uint64_t)(arg1[14]) * (arg2[3])); x296 = ((uint64_t)(arg1[14]) * (arg2[2])); x297 = ((uint64_t)(arg1[14]) * ((arg2[1]) * 0x2)); x298 = ((uint64_t)(arg1[14]) * (arg2[0])); x299 = ((uint64_t)(arg1[13]) * ((arg2[9]) * 0x2)); x300 = ((uint64_t)(arg1[13]) * ((arg2[8]) * 0x2)); x301 = ((uint64_t)(arg1[13]) * (arg2[7])); x302 = ((uint64_t)(arg1[13]) * ((arg2[6]) * 0x2)); x303 = ((uint64_t)(arg1[13]) * ((arg2[5]) * 0x2)); x304 = ((uint64_t)(arg1[13]) * ((arg2[4]) * 0x2)); x305 = ((uint64_t)(arg1[13]) * (arg2[3])); x306 = ((uint64_t)(arg1[13]) * ((arg2[2]) * 0x2)); x307 = ((uint64_t)(arg1[13]) * ((arg2[1]) * 0x2)); x308 = ((uint64_t)(arg1[13]) * (arg2[0])); x309 = ((uint64_t)(arg1[12]) * ((arg2[10]) * 0x2)); x310 = ((uint64_t)(arg1[12]) * ((arg2[9]) * 0x2)); x311 = ((uint64_t)(arg1[12]) * ((arg2[8]) * 0x2)); x312 = ((uint64_t)(arg1[12]) * ((arg2[7]) * 0x2)); x313 = ((uint64_t)(arg1[12]) * ((arg2[6]) * 0x2)); x314 = ((uint64_t)(arg1[12]) * ((arg2[5]) * 0x2)); x315 = ((uint64_t)(arg1[12]) * ((arg2[4]) * 0x2)); x316 = ((uint64_t)(arg1[12]) * ((arg2[3]) * 0x2)); x317 = ((uint64_t)(arg1[12]) * ((arg2[2]) * 0x2)); x318 = ((uint64_t)(arg1[12]) * ((arg2[1]) * 0x2)); x319 = ((uint64_t)(arg1[12]) * (arg2[0])); x320 = ((uint64_t)(arg1[11]) * (arg2[11])); x321 = ((uint64_t)(arg1[11]) * (arg2[10])); x322 = ((uint64_t)(arg1[11]) * (arg2[9])); x323 = ((uint64_t)(arg1[11]) * ((arg2[8]) * 0x2)); x324 = ((uint64_t)(arg1[11]) * (arg2[7])); x325 = ((uint64_t)(arg1[11]) * (arg2[6])); x326 = ((uint64_t)(arg1[11]) * (arg2[5])); x327 = ((uint64_t)(arg1[11]) * ((arg2[4]) * 0x2)); x328 = ((uint64_t)(arg1[11]) * (arg2[3])); x329 = ((uint64_t)(arg1[11]) * (arg2[2])); x330 = ((uint64_t)(arg1[11]) * (arg2[1])); x331 = ((uint64_t)(arg1[11]) * (arg2[0])); x332 = ((uint64_t)(arg1[10]) * ((arg2[12]) * 0x2)); x333 = ((uint64_t)(arg1[10]) * (arg2[11])); x334 = ((uint64_t)(arg1[10]) * (arg2[10])); x335 = ((uint64_t)(arg1[10]) * ((arg2[9]) * 0x2)); x336 = ((uint64_t)(arg1[10]) * ((arg2[8]) * 0x2)); x337 = ((uint64_t)(arg1[10]) * (arg2[7])); x338 = ((uint64_t)(arg1[10]) * (arg2[6])); x339 = ((uint64_t)(arg1[10]) * ((arg2[5]) * 0x2)); x340 = ((uint64_t)(arg1[10]) * ((arg2[4]) * 0x2)); x341 = ((uint64_t)(arg1[10]) * (arg2[3])); x342 = ((uint64_t)(arg1[10]) * (arg2[2])); x343 = ((uint64_t)(arg1[10]) * ((arg2[1]) * 0x2)); x344 = ((uint64_t)(arg1[10]) * (arg2[0])); x345 = ((uint64_t)(arg1[9]) * ((arg2[13]) * 0x2)); x346 = ((uint64_t)(arg1[9]) * ((arg2[12]) * 0x2)); x347 = ((uint64_t)(arg1[9]) * (arg2[11])); x348 = ((uint64_t)(arg1[9]) * ((arg2[10]) * 0x2)); x349 = ((uint64_t)(arg1[9]) * ((arg2[9]) * 0x2)); x350 = ((uint64_t)(arg1[9]) * ((arg2[8]) * 0x2)); x351 = ((uint64_t)(arg1[9]) * (arg2[7])); x352 = ((uint64_t)(arg1[9]) * ((arg2[6]) * 0x2)); x353 = ((uint64_t)(arg1[9]) * ((arg2[5]) * 0x2)); x354 = ((uint64_t)(arg1[9]) * ((arg2[4]) * 0x2)); x355 = ((uint64_t)(arg1[9]) * (arg2[3])); x356 = ((uint64_t)(arg1[9]) * ((arg2[2]) * 0x2)); x357 = ((uint64_t)(arg1[9]) * ((arg2[1]) * 0x2)); x358 = ((uint64_t)(arg1[9]) * (arg2[0])); x359 = ((uint64_t)(arg1[8]) * ((arg2[14]) * 0x2)); x360 = ((uint64_t)(arg1[8]) * ((arg2[13]) * 0x2)); x361 = ((uint64_t)(arg1[8]) * ((arg2[12]) * 0x2)); x362 = ((uint64_t)(arg1[8]) * ((arg2[11]) * 0x2)); x363 = ((uint64_t)(arg1[8]) * ((arg2[10]) * 0x2)); x364 = ((uint64_t)(arg1[8]) * ((arg2[9]) * 0x2)); x365 = ((uint64_t)(arg1[8]) * ((arg2[8]) * 0x2)); x366 = ((uint64_t)(arg1[8]) * ((arg2[7]) * 0x2)); x367 = ((uint64_t)(arg1[8]) * ((arg2[6]) * 0x2)); x368 = ((uint64_t)(arg1[8]) * ((arg2[5]) * 0x2)); x369 = ((uint64_t)(arg1[8]) * ((arg2[4]) * 0x2)); x370 = ((uint64_t)(arg1[8]) * ((arg2[3]) * 0x2)); x371 = ((uint64_t)(arg1[8]) * ((arg2[2]) * 0x2)); x372 = ((uint64_t)(arg1[8]) * ((arg2[1]) * 0x2)); x373 = ((uint64_t)(arg1[8]) * (arg2[0])); x374 = ((uint64_t)(arg1[7]) * (arg2[15])); x375 = ((uint64_t)(arg1[7]) * (arg2[14])); x376 = ((uint64_t)(arg1[7]) * (arg2[13])); x377 = ((uint64_t)(arg1[7]) * ((arg2[12]) * 0x2)); x378 = ((uint64_t)(arg1[7]) * (arg2[11])); x379 = ((uint64_t)(arg1[7]) * (arg2[10])); x380 = ((uint64_t)(arg1[7]) * (arg2[9])); x381 = ((uint64_t)(arg1[7]) * ((arg2[8]) * 0x2)); x382 = ((uint64_t)(arg1[7]) * (arg2[7])); x383 = ((uint64_t)(arg1[7]) * (arg2[6])); x384 = ((uint64_t)(arg1[7]) * (arg2[5])); x385 = ((uint64_t)(arg1[7]) * ((arg2[4]) * 0x2)); x386 = ((uint64_t)(arg1[7]) * (arg2[3])); x387 = ((uint64_t)(arg1[7]) * (arg2[2])); x388 = ((uint64_t)(arg1[7]) * (arg2[1])); x389 = ((uint64_t)(arg1[7]) * (arg2[0])); x390 = ((uint64_t)(arg1[6]) * ((arg2[16]) * 0x2)); x391 = ((uint64_t)(arg1[6]) * (arg2[15])); x392 = ((uint64_t)(arg1[6]) * (arg2[14])); x393 = ((uint64_t)(arg1[6]) * ((arg2[13]) * 0x2)); x394 = ((uint64_t)(arg1[6]) * ((arg2[12]) * 0x2)); x395 = ((uint64_t)(arg1[6]) * (arg2[11])); x396 = ((uint64_t)(arg1[6]) * (arg2[10])); x397 = ((uint64_t)(arg1[6]) * ((arg2[9]) * 0x2)); x398 = ((uint64_t)(arg1[6]) * ((arg2[8]) * 0x2)); x399 = ((uint64_t)(arg1[6]) * (arg2[7])); x400 = ((uint64_t)(arg1[6]) * (arg2[6])); x401 = ((uint64_t)(arg1[6]) * ((arg2[5]) * 0x2)); x402 = ((uint64_t)(arg1[6]) * ((arg2[4]) * 0x2)); x403 = ((uint64_t)(arg1[6]) * (arg2[3])); x404 = ((uint64_t)(arg1[6]) * (arg2[2])); x405 = ((uint64_t)(arg1[6]) * ((arg2[1]) * 0x2)); x406 = ((uint64_t)(arg1[6]) * (arg2[0])); x407 = ((uint64_t)(arg1[5]) * ((arg2[17]) * 0x2)); x408 = ((uint64_t)(arg1[5]) * ((arg2[16]) * 0x2)); x409 = ((uint64_t)(arg1[5]) * (arg2[15])); x410 = ((uint64_t)(arg1[5]) * ((arg2[14]) * 0x2)); x411 = ((uint64_t)(arg1[5]) * ((arg2[13]) * 0x2)); x412 = ((uint64_t)(arg1[5]) * ((arg2[12]) * 0x2)); x413 = ((uint64_t)(arg1[5]) * (arg2[11])); x414 = ((uint64_t)(arg1[5]) * ((arg2[10]) * 0x2)); x415 = ((uint64_t)(arg1[5]) * ((arg2[9]) * 0x2)); x416 = ((uint64_t)(arg1[5]) * ((arg2[8]) * 0x2)); x417 = ((uint64_t)(arg1[5]) * (arg2[7])); x418 = ((uint64_t)(arg1[5]) * ((arg2[6]) * 0x2)); x419 = ((uint64_t)(arg1[5]) * ((arg2[5]) * 0x2)); x420 = ((uint64_t)(arg1[5]) * ((arg2[4]) * 0x2)); x421 = ((uint64_t)(arg1[5]) * (arg2[3])); x422 = ((uint64_t)(arg1[5]) * ((arg2[2]) * 0x2)); x423 = ((uint64_t)(arg1[5]) * ((arg2[1]) * 0x2)); x424 = ((uint64_t)(arg1[5]) * (arg2[0])); x425 = ((uint64_t)(arg1[4]) * ((arg2[18]) * 0x2)); x426 = ((uint64_t)(arg1[4]) * ((arg2[17]) * 0x2)); x427 = ((uint64_t)(arg1[4]) * ((arg2[16]) * 0x2)); x428 = ((uint64_t)(arg1[4]) * ((arg2[15]) * 0x2)); x429 = ((uint64_t)(arg1[4]) * ((arg2[14]) * 0x2)); x430 = ((uint64_t)(arg1[4]) * ((arg2[13]) * 0x2)); x431 = ((uint64_t)(arg1[4]) * ((arg2[12]) * 0x2)); x432 = ((uint64_t)(arg1[4]) * ((arg2[11]) * 0x2)); x433 = ((uint64_t)(arg1[4]) * ((arg2[10]) * 0x2)); x434 = ((uint64_t)(arg1[4]) * ((arg2[9]) * 0x2)); x435 = ((uint64_t)(arg1[4]) * ((arg2[8]) * 0x2)); x436 = ((uint64_t)(arg1[4]) * ((arg2[7]) * 0x2)); x437 = ((uint64_t)(arg1[4]) * ((arg2[6]) * 0x2)); x438 = ((uint64_t)(arg1[4]) * ((arg2[5]) * 0x2)); x439 = ((uint64_t)(arg1[4]) * ((arg2[4]) * 0x2)); x440 = ((uint64_t)(arg1[4]) * ((arg2[3]) * 0x2)); x441 = ((uint64_t)(arg1[4]) * ((arg2[2]) * 0x2)); x442 = ((uint64_t)(arg1[4]) * ((arg2[1]) * 0x2)); x443 = ((uint64_t)(arg1[4]) * (arg2[0])); x444 = ((uint64_t)(arg1[3]) * (arg2[19])); x445 = ((uint64_t)(arg1[3]) * (arg2[18])); x446 = ((uint64_t)(arg1[3]) * (arg2[17])); x447 = ((uint64_t)(arg1[3]) * ((arg2[16]) * 0x2)); x448 = ((uint64_t)(arg1[3]) * (arg2[15])); x449 = ((uint64_t)(arg1[3]) * (arg2[14])); x450 = ((uint64_t)(arg1[3]) * (arg2[13])); x451 = ((uint64_t)(arg1[3]) * ((arg2[12]) * 0x2)); x452 = ((uint64_t)(arg1[3]) * (arg2[11])); x453 = ((uint64_t)(arg1[3]) * (arg2[10])); x454 = ((uint64_t)(arg1[3]) * (arg2[9])); x455 = ((uint64_t)(arg1[3]) * ((arg2[8]) * 0x2)); x456 = ((uint64_t)(arg1[3]) * (arg2[7])); x457 = ((uint64_t)(arg1[3]) * (arg2[6])); x458 = ((uint64_t)(arg1[3]) * (arg2[5])); x459 = ((uint64_t)(arg1[3]) * ((arg2[4]) * 0x2)); x460 = ((uint64_t)(arg1[3]) * (arg2[3])); x461 = ((uint64_t)(arg1[3]) * (arg2[2])); x462 = ((uint64_t)(arg1[3]) * (arg2[1])); x463 = ((uint64_t)(arg1[3]) * (arg2[0])); x464 = ((uint64_t)(arg1[2]) * ((arg2[20]) * 0x2)); x465 = ((uint64_t)(arg1[2]) * (arg2[19])); x466 = ((uint64_t)(arg1[2]) * (arg2[18])); x467 = ((uint64_t)(arg1[2]) * ((arg2[17]) * 0x2)); x468 = ((uint64_t)(arg1[2]) * ((arg2[16]) * 0x2)); x469 = ((uint64_t)(arg1[2]) * (arg2[15])); x470 = ((uint64_t)(arg1[2]) * (arg2[14])); x471 = ((uint64_t)(arg1[2]) * ((arg2[13]) * 0x2)); x472 = ((uint64_t)(arg1[2]) * ((arg2[12]) * 0x2)); x473 = ((uint64_t)(arg1[2]) * (arg2[11])); x474 = ((uint64_t)(arg1[2]) * (arg2[10])); x475 = ((uint64_t)(arg1[2]) * ((arg2[9]) * 0x2)); x476 = ((uint64_t)(arg1[2]) * ((arg2[8]) * 0x2)); x477 = ((uint64_t)(arg1[2]) * (arg2[7])); x478 = ((uint64_t)(arg1[2]) * (arg2[6])); x479 = ((uint64_t)(arg1[2]) * ((arg2[5]) * 0x2)); x480 = ((uint64_t)(arg1[2]) * ((arg2[4]) * 0x2)); x481 = ((uint64_t)(arg1[2]) * (arg2[3])); x482 = ((uint64_t)(arg1[2]) * (arg2[2])); x483 = ((uint64_t)(arg1[2]) * ((arg2[1]) * 0x2)); x484 = ((uint64_t)(arg1[2]) * (arg2[0])); x485 = ((uint64_t)(arg1[1]) * ((arg2[21]) * 0x2)); x486 = ((uint64_t)(arg1[1]) * ((arg2[20]) * 0x2)); x487 = ((uint64_t)(arg1[1]) * (arg2[19])); x488 = ((uint64_t)(arg1[1]) * ((arg2[18]) * 0x2)); x489 = ((uint64_t)(arg1[1]) * ((arg2[17]) * 0x2)); x490 = ((uint64_t)(arg1[1]) * ((arg2[16]) * 0x2)); x491 = ((uint64_t)(arg1[1]) * (arg2[15])); x492 = ((uint64_t)(arg1[1]) * ((arg2[14]) * 0x2)); x493 = ((uint64_t)(arg1[1]) * ((arg2[13]) * 0x2)); x494 = ((uint64_t)(arg1[1]) * ((arg2[12]) * 0x2)); x495 = ((uint64_t)(arg1[1]) * (arg2[11])); x496 = ((uint64_t)(arg1[1]) * ((arg2[10]) * 0x2)); x497 = ((uint64_t)(arg1[1]) * ((arg2[9]) * 0x2)); x498 = ((uint64_t)(arg1[1]) * ((arg2[8]) * 0x2)); x499 = ((uint64_t)(arg1[1]) * (arg2[7])); x500 = ((uint64_t)(arg1[1]) * ((arg2[6]) * 0x2)); x501 = ((uint64_t)(arg1[1]) * ((arg2[5]) * 0x2)); x502 = ((uint64_t)(arg1[1]) * ((arg2[4]) * 0x2)); x503 = ((uint64_t)(arg1[1]) * (arg2[3])); x504 = ((uint64_t)(arg1[1]) * ((arg2[2]) * 0x2)); x505 = ((uint64_t)(arg1[1]) * ((arg2[1]) * 0x2)); x506 = ((uint64_t)(arg1[1]) * (arg2[0])); x507 = ((uint64_t)(arg1[0]) * (arg2[22])); x508 = ((uint64_t)(arg1[0]) * (arg2[21])); x509 = ((uint64_t)(arg1[0]) * (arg2[20])); x510 = ((uint64_t)(arg1[0]) * (arg2[19])); x511 = ((uint64_t)(arg1[0]) * (arg2[18])); x512 = ((uint64_t)(arg1[0]) * (arg2[17])); x513 = ((uint64_t)(arg1[0]) * (arg2[16])); x514 = ((uint64_t)(arg1[0]) * (arg2[15])); x515 = ((uint64_t)(arg1[0]) * (arg2[14])); x516 = ((uint64_t)(arg1[0]) * (arg2[13])); x517 = ((uint64_t)(arg1[0]) * (arg2[12])); x518 = ((uint64_t)(arg1[0]) * (arg2[11])); x519 = ((uint64_t)(arg1[0]) * (arg2[10])); x520 = ((uint64_t)(arg1[0]) * (arg2[9])); x521 = ((uint64_t)(arg1[0]) * (arg2[8])); x522 = ((uint64_t)(arg1[0]) * (arg2[7])); x523 = ((uint64_t)(arg1[0]) * (arg2[6])); x524 = ((uint64_t)(arg1[0]) * (arg2[5])); x525 = ((uint64_t)(arg1[0]) * (arg2[4])); x526 = ((uint64_t)(arg1[0]) * (arg2[3])); x527 = ((uint64_t)(arg1[0]) * (arg2[2])); x528 = ((uint64_t)(arg1[0]) * (arg2[1])); x529 = ((uint64_t)(arg1[0]) * (arg2[0])); x530 = (x529 + (x253 + (x252 + (x250 + (x247 + (x243 + (x238 + (x232 + (x225 + (x217 + (x208 + (x198 + (x187 + (x175 + (x162 + (x148 + (x133 + (x117 + (x100 + (x82 + (x63 + (x43 + x22)))))))))))))))))))))); x531 = (x530 >> 23); x532 = (uint32_t)(x530 & UINT32_C(0x7fffff)); x533 = (x507 + (x485 + (x464 + (x444 + (x425 + (x407 + (x390 + (x374 + (x359 + (x345 + (x332 + (x320 + (x309 + (x299 + (x290 + (x282 + (x275 + (x269 + (x264 + (x260 + (x257 + (x255 + x254)))))))))))))))))))))); x534 = (x508 + (x486 + (x465 + (x445 + (x426 + (x408 + (x391 + (x375 + (x360 + (x346 + (x333 + (x321 + (x310 + (x300 + (x291 + (x283 + (x276 + (x270 + (x265 + (x261 + (x258 + (x256 + x1)))))))))))))))))))))); x535 = (x509 + (x487 + (x466 + (x446 + (x427 + (x409 + (x392 + (x376 + (x361 + (x347 + (x334 + (x322 + (x311 + (x301 + (x292 + (x284 + (x277 + (x271 + (x266 + (x262 + (x259 + (x23 + x2)))))))))))))))))))))); x536 = (x510 + (x488 + (x467 + (x447 + (x428 + (x410 + (x393 + (x377 + (x362 + (x348 + (x335 + (x323 + (x312 + (x302 + (x293 + (x285 + (x278 + (x272 + (x267 + (x263 + (x44 + (x24 + x3)))))))))))))))))))))); x537 = (x511 + (x489 + (x468 + (x448 + (x429 + (x411 + (x394 + (x378 + (x363 + (x349 + (x336 + (x324 + (x313 + (x303 + (x294 + (x286 + (x279 + (x273 + (x268 + (x64 + (x45 + (x25 + x4)))))))))))))))))))))); x538 = (x512 + (x490 + (x469 + (x449 + (x430 + (x412 + (x395 + (x379 + (x364 + (x350 + (x337 + (x325 + (x314 + (x304 + (x295 + (x287 + (x280 + (x274 + (x83 + (x65 + (x46 + (x26 + x5)))))))))))))))))))))); x539 = (x513 + (x491 + (x470 + (x450 + (x431 + (x413 + (x396 + (x380 + (x365 + (x351 + (x338 + (x326 + (x315 + (x305 + (x296 + (x288 + (x281 + (x101 + (x84 + (x66 + (x47 + (x27 + x6)))))))))))))))))))))); x540 = (x514 + (x492 + (x471 + (x451 + (x432 + (x414 + (x397 + (x381 + (x366 + (x352 + (x339 + (x327 + (x316 + (x306 + (x297 + (x289 + (x118 + (x102 + (x85 + (x67 + (x48 + (x28 + x7)))))))))))))))))))))); x541 = (x515 + (x493 + (x472 + (x452 + (x433 + (x415 + (x398 + (x382 + (x367 + (x353 + (x340 + (x328 + (x317 + (x307 + (x298 + (x134 + (x119 + (x103 + (x86 + (x68 + (x49 + (x29 + x8)))))))))))))))))))))); x542 = (x516 + (x494 + (x473 + (x453 + (x434 + (x416 + (x399 + (x383 + (x368 + (x354 + (x341 + (x329 + (x318 + (x308 + (x149 + (x135 + (x120 + (x104 + (x87 + (x69 + (x50 + (x30 + x9)))))))))))))))))))))); x543 = (x517 + (x495 + (x474 + (x454 + (x435 + (x417 + (x400 + (x384 + (x369 + (x355 + (x342 + (x330 + (x319 + (x163 + (x150 + (x136 + (x121 + (x105 + (x88 + (x70 + (x51 + (x31 + x10)))))))))))))))))))))); x544 = (x518 + (x496 + (x475 + (x455 + (x436 + (x418 + (x401 + (x385 + (x370 + (x356 + (x343 + (x331 + (x176 + (x164 + (x151 + (x137 + (x122 + (x106 + (x89 + (x71 + (x52 + (x32 + x11)))))))))))))))))))))); x545 = (x519 + (x497 + (x476 + (x456 + (x437 + (x419 + (x402 + (x386 + (x371 + (x357 + (x344 + (x188 + (x177 + (x165 + (x152 + (x138 + (x123 + (x107 + (x90 + (x72 + (x53 + (x33 + x12)))))))))))))))))))))); x546 = (x520 + (x498 + (x477 + (x457 + (x438 + (x420 + (x403 + (x387 + (x372 + (x358 + (x199 + (x189 + (x178 + (x166 + (x153 + (x139 + (x124 + (x108 + (x91 + (x73 + (x54 + (x34 + x13)))))))))))))))))))))); x547 = (x521 + (x499 + (x478 + (x458 + (x439 + (x421 + (x404 + (x388 + (x373 + (x209 + (x200 + (x190 + (x179 + (x167 + (x154 + (x140 + (x125 + (x109 + (x92 + (x74 + (x55 + (x35 + x14)))))))))))))))))))))); x548 = (x522 + (x500 + (x479 + (x459 + (x440 + (x422 + (x405 + (x389 + (x218 + (x210 + (x201 + (x191 + (x180 + (x168 + (x155 + (x141 + (x126 + (x110 + (x93 + (x75 + (x56 + (x36 + x15)))))))))))))))))))))); x549 = (x523 + (x501 + (x480 + (x460 + (x441 + (x423 + (x406 + (x226 + (x219 + (x211 + (x202 + (x192 + (x181 + (x169 + (x156 + (x142 + (x127 + (x111 + (x94 + (x76 + (x57 + (x37 + x16)))))))))))))))))))))); x550 = (x524 + (x502 + (x481 + (x461 + (x442 + (x424 + (x233 + (x227 + (x220 + (x212 + (x203 + (x193 + (x182 + (x170 + (x157 + (x143 + (x128 + (x112 + (x95 + (x77 + (x58 + (x38 + x17)))))))))))))))))))))); x551 = (x525 + (x503 + (x482 + (x462 + (x443 + (x239 + (x234 + (x228 + (x221 + (x213 + (x204 + (x194 + (x183 + (x171 + (x158 + (x144 + (x129 + (x113 + (x96 + (x78 + (x59 + (x39 + x18)))))))))))))))))))))); x552 = (x526 + (x504 + (x483 + (x463 + (x244 + (x240 + (x235 + (x229 + (x222 + (x214 + (x205 + (x195 + (x184 + (x172 + (x159 + (x145 + (x130 + (x114 + (x97 + (x79 + (x60 + (x40 + x19)))))))))))))))))))))); x553 = (x527 + (x505 + (x484 + (x248 + (x245 + (x241 + (x236 + (x230 + (x223 + (x215 + (x206 + (x196 + (x185 + (x173 + (x160 + (x146 + (x131 + (x115 + (x98 + (x80 + (x61 + (x41 + x20)))))))))))))))))))))); x554 = (x528 + (x506 + (x251 + (x249 + (x246 + (x242 + (x237 + (x231 + (x224 + (x216 + (x207 + (x197 + (x186 + (x174 + (x161 + (x147 + (x132 + (x116 + (x99 + (x81 + (x62 + (x42 + x21)))))))))))))))))))))); x555 = (x531 + x554); x556 = (x555 >> 22); x557 = (uint32_t)(x555 & UINT32_C(0x3fffff)); x558 = (x556 + x553); x559 = (x558 >> 22); x560 = (uint32_t)(x558 & UINT32_C(0x3fffff)); x561 = (x559 + x552); x562 = (x561 >> 23); x563 = (uint32_t)(x561 & UINT32_C(0x7fffff)); x564 = (x562 + x551); x565 = (x564 >> 22); x566 = (uint32_t)(x564 & UINT32_C(0x3fffff)); x567 = (x565 + x550); x568 = (x567 >> 22); x569 = (uint32_t)(x567 & UINT32_C(0x3fffff)); x570 = (x568 + x549); x571 = (x570 >> 22); x572 = (uint32_t)(x570 & UINT32_C(0x3fffff)); x573 = (x571 + x548); x574 = (x573 >> 23); x575 = (uint32_t)(x573 & UINT32_C(0x7fffff)); x576 = (x574 + x547); x577 = (x576 >> 22); x578 = (uint32_t)(x576 & UINT32_C(0x3fffff)); x579 = (x577 + x546); x580 = (x579 >> 22); x581 = (uint32_t)(x579 & UINT32_C(0x3fffff)); x582 = (x580 + x545); x583 = (x582 >> 22); x584 = (uint32_t)(x582 & UINT32_C(0x3fffff)); x585 = (x583 + x544); x586 = (x585 >> 23); x587 = (uint32_t)(x585 & UINT32_C(0x7fffff)); x588 = (x586 + x543); x589 = (x588 >> 22); x590 = (uint32_t)(x588 & UINT32_C(0x3fffff)); x591 = (x589 + x542); x592 = (x591 >> 22); x593 = (uint32_t)(x591 & UINT32_C(0x3fffff)); x594 = (x592 + x541); x595 = (x594 >> 22); x596 = (uint32_t)(x594 & UINT32_C(0x3fffff)); x597 = (x595 + x540); x598 = (x597 >> 23); x599 = (uint32_t)(x597 & UINT32_C(0x7fffff)); x600 = (x598 + x539); x601 = (x600 >> 22); x602 = (uint32_t)(x600 & UINT32_C(0x3fffff)); x603 = (x601 + x538); x604 = (x603 >> 22); x605 = (uint32_t)(x603 & UINT32_C(0x3fffff)); x606 = (x604 + x537); x607 = (x606 >> 22); x608 = (uint32_t)(x606 & UINT32_C(0x3fffff)); x609 = (x607 + x536); x610 = (x609 >> 23); x611 = (uint32_t)(x609 & UINT32_C(0x7fffff)); x612 = (x610 + x535); x613 = (x612 >> 22); x614 = (uint32_t)(x612 & UINT32_C(0x3fffff)); x615 = (x613 + x534); x616 = (x615 >> 22); x617 = (uint32_t)(x615 & UINT32_C(0x3fffff)); x618 = (x616 + x533); x619 = (uint32_t)(x618 >> 22); x620 = (uint32_t)(x618 & UINT32_C(0x3fffff)); x621 = ((uint64_t)UINT16_C(0x239) * x619); x622 = (x532 + x621); x623 = (uint32_t)(x622 >> 23); x624 = (uint32_t)(x622 & UINT32_C(0x7fffff)); x625 = (x623 + x557); x626 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x625 >> 22); x627 = (x625 & UINT32_C(0x3fffff)); x628 = (x626 + x560); out1[0] = x624; out1[1] = x627; out1[2] = x628; out1[3] = x563; out1[4] = x566; out1[5] = x569; out1[6] = x572; out1[7] = x575; out1[8] = x578; out1[9] = x581; out1[10] = x584; out1[11] = x587; out1[12] = x590; out1[13] = x593; out1[14] = x596; out1[15] = x599; out1[16] = x602; out1[17] = x605; out1[18] = x608; out1[19] = x611; out1[20] = x614; out1[21] = x617; out1[22] = x620; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square squares a field element and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg1) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] * Output Bounds: * out1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square( uint32_t out1[23], const uint32_t arg1[23]) { uint64_t x1; uint64_t x2; uint32_t x3; uint64_t x4; uint64_t x5; uint32_t x6; uint64_t x7; uint64_t x8; uint32_t x9; uint64_t x10; uint64_t x11; uint32_t x12; uint64_t x13; uint64_t x14; uint32_t x15; uint64_t x16; uint64_t x17; uint32_t x18; uint64_t x19; uint64_t x20; uint32_t x21; uint64_t x22; uint64_t x23; uint32_t x24; uint64_t x25; uint64_t x26; uint32_t x27; uint64_t x28; uint64_t x29; uint32_t x30; uint64_t x31; uint64_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint64_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; uint64_t x110; uint64_t x111; uint64_t x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; uint64_t x129; uint64_t x130; uint64_t x131; uint64_t x132; uint64_t x133; uint64_t x134; uint64_t x135; uint64_t x136; uint64_t x137; uint64_t x138; uint64_t x139; uint64_t x140; uint64_t x141; uint64_t x142; uint64_t x143; uint64_t x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; uint64_t x150; uint64_t x151; uint64_t x152; uint64_t x153; uint64_t x154; uint64_t x155; uint64_t x156; uint64_t x157; uint64_t x158; uint64_t x159; uint64_t x160; uint64_t x161; uint64_t x162; uint64_t x163; uint64_t x164; uint64_t x165; uint64_t x166; uint64_t x167; uint64_t x168; uint64_t x169; uint64_t x170; uint64_t x171; uint64_t x172; uint64_t x173; uint64_t x174; uint64_t x175; uint64_t x176; uint64_t x177; uint64_t x178; uint64_t x179; uint64_t x180; uint64_t x181; uint64_t x182; uint64_t x183; uint64_t x184; uint64_t x185; uint64_t x186; uint64_t x187; uint64_t x188; uint64_t x189; uint64_t x190; uint64_t x191; uint64_t x192; uint64_t x193; uint64_t x194; uint64_t x195; uint64_t x196; uint64_t x197; uint64_t x198; uint64_t x199; uint64_t x200; uint64_t x201; uint64_t x202; uint64_t x203; uint64_t x204; uint64_t x205; uint64_t x206; uint64_t x207; uint64_t x208; uint64_t x209; uint64_t x210; uint64_t x211; uint64_t x212; uint64_t x213; uint64_t x214; uint64_t x215; uint64_t x216; uint64_t x217; uint64_t x218; uint64_t x219; uint64_t x220; uint64_t x221; uint64_t x222; uint64_t x223; uint64_t x224; uint64_t x225; uint64_t x226; uint64_t x227; uint64_t x228; uint64_t x229; uint64_t x230; uint64_t x231; uint64_t x232; uint64_t x233; uint64_t x234; uint64_t x235; uint64_t x236; uint64_t x237; uint64_t x238; uint64_t x239; uint64_t x240; uint64_t x241; uint64_t x242; uint64_t x243; uint64_t x244; uint64_t x245; uint64_t x246; uint64_t x247; uint64_t x248; uint64_t x249; uint64_t x250; uint64_t x251; uint64_t x252; uint64_t x253; uint64_t x254; uint64_t x255; uint64_t x256; uint64_t x257; uint64_t x258; uint64_t x259; uint64_t x260; uint64_t x261; uint64_t x262; uint64_t x263; uint64_t x264; uint64_t x265; uint64_t x266; uint64_t x267; uint64_t x268; uint64_t x269; uint64_t x270; uint64_t x271; uint64_t x272; uint64_t x273; uint64_t x274; uint64_t x275; uint64_t x276; uint64_t x277; uint64_t x278; uint64_t x279; uint64_t x280; uint64_t x281; uint64_t x282; uint64_t x283; uint64_t x284; uint64_t x285; uint64_t x286; uint64_t x287; uint64_t x288; uint64_t x289; uint64_t x290; uint64_t x291; uint64_t x292; uint64_t x293; uint64_t x294; uint64_t x295; uint64_t x296; uint64_t x297; uint64_t x298; uint64_t x299; uint64_t x300; uint64_t x301; uint64_t x302; uint64_t x303; uint64_t x304; uint64_t x305; uint64_t x306; uint64_t x307; uint64_t x308; uint64_t x309; uint64_t x310; uint64_t x311; uint64_t x312; uint64_t x313; uint64_t x314; uint64_t x315; uint64_t x316; uint64_t x317; uint64_t x318; uint64_t x319; uint64_t x320; uint64_t x321; uint64_t x322; uint32_t x323; uint64_t x324; uint64_t x325; uint64_t x326; uint64_t x327; uint64_t x328; uint64_t x329; uint64_t x330; uint64_t x331; uint64_t x332; uint64_t x333; uint64_t x334; uint64_t x335; uint64_t x336; uint64_t x337; uint64_t x338; uint64_t x339; uint64_t x340; uint64_t x341; uint64_t x342; uint64_t x343; uint64_t x344; uint64_t x345; uint64_t x346; uint64_t x347; uint32_t x348; uint64_t x349; uint64_t x350; uint32_t x351; uint64_t x352; uint64_t x353; uint32_t x354; uint64_t x355; uint64_t x356; uint32_t x357; uint64_t x358; uint64_t x359; uint32_t x360; uint64_t x361; uint64_t x362; uint32_t x363; uint64_t x364; uint64_t x365; uint32_t x366; uint64_t x367; uint64_t x368; uint32_t x369; uint64_t x370; uint64_t x371; uint32_t x372; uint64_t x373; uint64_t x374; uint32_t x375; uint64_t x376; uint64_t x377; uint32_t x378; uint64_t x379; uint64_t x380; uint32_t x381; uint64_t x382; uint64_t x383; uint32_t x384; uint64_t x385; uint64_t x386; uint32_t x387; uint64_t x388; uint64_t x389; uint32_t x390; uint64_t x391; uint64_t x392; uint32_t x393; uint64_t x394; uint64_t x395; uint32_t x396; uint64_t x397; uint64_t x398; uint32_t x399; uint64_t x400; uint64_t x401; uint32_t x402; uint64_t x403; uint64_t x404; uint32_t x405; uint64_t x406; uint64_t x407; uint32_t x408; uint64_t x409; uint32_t x410; uint32_t x411; uint64_t x412; uint64_t x413; uint32_t x414; uint32_t x415; uint32_t x416; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x417; uint32_t x418; uint32_t x419; x1 = ((uint64_t)(arg1[22]) * UINT16_C(0x239)); x2 = (x1 * 0x2); x3 = ((arg1[22]) * 0x2); x4 = ((uint64_t)(arg1[21]) * UINT16_C(0x239)); x5 = (x4 * 0x2); x6 = ((arg1[21]) * 0x2); x7 = ((uint64_t)(arg1[20]) * UINT16_C(0x239)); x8 = (x7 * 0x2); x9 = ((arg1[20]) * 0x2); x10 = ((uint64_t)(arg1[19]) * UINT16_C(0x239)); x11 = (x10 * 0x2); x12 = ((arg1[19]) * 0x2); x13 = ((uint64_t)(arg1[18]) * UINT16_C(0x239)); x14 = (x13 * 0x2); x15 = ((arg1[18]) * 0x2); x16 = ((uint64_t)(arg1[17]) * UINT16_C(0x239)); x17 = (x16 * 0x2); x18 = ((arg1[17]) * 0x2); x19 = ((uint64_t)(arg1[16]) * UINT16_C(0x239)); x20 = (x19 * 0x2); x21 = ((arg1[16]) * 0x2); x22 = ((uint64_t)(arg1[15]) * UINT16_C(0x239)); x23 = (x22 * 0x2); x24 = ((arg1[15]) * 0x2); x25 = ((uint64_t)(arg1[14]) * UINT16_C(0x239)); x26 = (x25 * 0x2); x27 = ((arg1[14]) * 0x2); x28 = ((uint64_t)(arg1[13]) * UINT16_C(0x239)); x29 = (x28 * 0x2); x30 = ((arg1[13]) * 0x2); x31 = ((uint64_t)(arg1[12]) * UINT16_C(0x239)); x32 = (x31 * 0x2); x33 = ((arg1[12]) * 0x2); x34 = ((arg1[11]) * 0x2); x35 = ((arg1[10]) * 0x2); x36 = ((arg1[9]) * 0x2); x37 = ((arg1[8]) * 0x2); x38 = ((arg1[7]) * 0x2); x39 = ((arg1[6]) * 0x2); x40 = ((arg1[5]) * 0x2); x41 = ((arg1[4]) * 0x2); x42 = ((arg1[3]) * 0x2); x43 = ((arg1[2]) * 0x2); x44 = ((arg1[1]) * 0x2); x45 = ((arg1[22]) * x1); x46 = ((arg1[21]) * x2); x47 = ((arg1[21]) * (x4 * 0x2)); x48 = ((arg1[20]) * (x2 * 0x2)); x49 = ((arg1[20]) * (x5 * 0x2)); x50 = ((arg1[20]) * (x7 * 0x2)); x51 = ((arg1[19]) * x2); x52 = ((arg1[19]) * x5); x53 = ((arg1[19]) * x8); x54 = ((arg1[19]) * x10); x55 = ((arg1[18]) * x2); x56 = ((arg1[18]) * x5); x57 = ((arg1[18]) * (x8 * 0x2)); x58 = ((arg1[18]) * x11); x59 = ((arg1[18]) * x13); x60 = ((arg1[17]) * x2); x61 = ((arg1[17]) * (x5 * 0x2)); x62 = ((arg1[17]) * (x8 * 0x2)); x63 = ((arg1[17]) * x11); x64 = ((arg1[17]) * x14); x65 = ((arg1[17]) * (x16 * 0x2)); x66 = ((arg1[16]) * (x2 * 0x2)); x67 = ((arg1[16]) * (x5 * 0x2)); x68 = ((arg1[16]) * (x8 * 0x2)); x69 = ((arg1[16]) * x11); x70 = ((arg1[16]) * (x14 * 0x2)); x71 = ((arg1[16]) * (x17 * 0x2)); x72 = ((arg1[16]) * (x19 * 0x2)); x73 = ((arg1[15]) * x2); x74 = ((arg1[15]) * x5); x75 = ((arg1[15]) * x8); x76 = ((arg1[15]) * x11); x77 = ((arg1[15]) * x14); x78 = ((arg1[15]) * x17); x79 = ((arg1[15]) * x20); x80 = ((arg1[15]) * x22); x81 = ((arg1[14]) * x2); x82 = ((arg1[14]) * x5); x83 = ((arg1[14]) * (x8 * 0x2)); x84 = ((arg1[14]) * x11); x85 = ((arg1[14]) * x14); x86 = ((arg1[14]) * x17); x87 = ((arg1[14]) * (x20 * 0x2)); x88 = ((arg1[14]) * x23); x89 = ((arg1[14]) * x25); x90 = ((arg1[13]) * x2); x91 = ((arg1[13]) * (x5 * 0x2)); x92 = ((arg1[13]) * (x8 * 0x2)); x93 = ((arg1[13]) * x11); x94 = ((arg1[13]) * x14); x95 = ((arg1[13]) * (x17 * 0x2)); x96 = ((arg1[13]) * (x20 * 0x2)); x97 = ((arg1[13]) * x23); x98 = ((arg1[13]) * x26); x99 = ((arg1[13]) * (x28 * 0x2)); x100 = ((arg1[12]) * (x2 * 0x2)); x101 = ((arg1[12]) * (x5 * 0x2)); x102 = ((arg1[12]) * (x8 * 0x2)); x103 = ((arg1[12]) * x11); x104 = ((arg1[12]) * (x14 * 0x2)); x105 = ((arg1[12]) * (x17 * 0x2)); x106 = ((arg1[12]) * (x20 * 0x2)); x107 = ((arg1[12]) * x23); x108 = ((arg1[12]) * (x26 * 0x2)); x109 = ((arg1[12]) * (x29 * 0x2)); x110 = ((arg1[12]) * (x31 * 0x2)); x111 = ((arg1[11]) * x2); x112 = ((arg1[11]) * x5); x113 = ((arg1[11]) * x8); x114 = ((arg1[11]) * x11); x115 = ((arg1[11]) * x14); x116 = ((arg1[11]) * x17); x117 = ((arg1[11]) * x20); x118 = ((arg1[11]) * x23); x119 = ((arg1[11]) * x26); x120 = ((arg1[11]) * x29); x121 = ((arg1[11]) * (x32 * 0x2)); x122 = ((uint64_t)(arg1[11]) * (arg1[11])); x123 = ((arg1[10]) * x2); x124 = ((arg1[10]) * x5); x125 = ((arg1[10]) * (x8 * 0x2)); x126 = ((arg1[10]) * x11); x127 = ((arg1[10]) * x14); x128 = ((arg1[10]) * x17); x129 = ((arg1[10]) * (x20 * 0x2)); x130 = ((arg1[10]) * x23); x131 = ((arg1[10]) * x26); x132 = ((arg1[10]) * (x29 * 0x2)); x133 = ((uint64_t)(arg1[10]) * (x33 * 0x2)); x134 = ((uint64_t)(arg1[10]) * x34); x135 = ((uint64_t)(arg1[10]) * (arg1[10])); x136 = ((arg1[9]) * x2); x137 = ((arg1[9]) * (x5 * 0x2)); x138 = ((arg1[9]) * (x8 * 0x2)); x139 = ((arg1[9]) * x11); x140 = ((arg1[9]) * x14); x141 = ((arg1[9]) * (x17 * 0x2)); x142 = ((arg1[9]) * (x20 * 0x2)); x143 = ((arg1[9]) * x23); x144 = ((arg1[9]) * (x26 * 0x2)); x145 = ((uint64_t)(arg1[9]) * (x30 * 0x2)); x146 = ((uint64_t)(arg1[9]) * (x33 * 0x2)); x147 = ((uint64_t)(arg1[9]) * x34); x148 = ((uint64_t)(arg1[9]) * (x35 * 0x2)); x149 = ((uint64_t)(arg1[9]) * ((arg1[9]) * 0x2)); x150 = ((arg1[8]) * (x2 * 0x2)); x151 = ((arg1[8]) * (x5 * 0x2)); x152 = ((arg1[8]) * (x8 * 0x2)); x153 = ((arg1[8]) * x11); x154 = ((arg1[8]) * (x14 * 0x2)); x155 = ((arg1[8]) * (x17 * 0x2)); x156 = ((arg1[8]) * (x20 * 0x2)); x157 = ((arg1[8]) * (x23 * 0x2)); x158 = ((uint64_t)(arg1[8]) * (x27 * 0x2)); x159 = ((uint64_t)(arg1[8]) * (x30 * 0x2)); x160 = ((uint64_t)(arg1[8]) * (x33 * 0x2)); x161 = ((uint64_t)(arg1[8]) * (x34 * 0x2)); x162 = ((uint64_t)(arg1[8]) * (x35 * 0x2)); x163 = ((uint64_t)(arg1[8]) * (x36 * 0x2)); x164 = ((uint64_t)(arg1[8]) * ((arg1[8]) * 0x2)); x165 = ((arg1[7]) * x2); x166 = ((arg1[7]) * x5); x167 = ((arg1[7]) * x8); x168 = ((arg1[7]) * x11); x169 = ((arg1[7]) * x14); x170 = ((arg1[7]) * x17); x171 = ((arg1[7]) * (x20 * 0x2)); x172 = ((uint64_t)(arg1[7]) * x24); x173 = ((uint64_t)(arg1[7]) * x27); x174 = ((uint64_t)(arg1[7]) * x30); x175 = ((uint64_t)(arg1[7]) * (x33 * 0x2)); x176 = ((uint64_t)(arg1[7]) * x34); x177 = ((uint64_t)(arg1[7]) * x35); x178 = ((uint64_t)(arg1[7]) * x36); x179 = ((uint64_t)(arg1[7]) * (x37 * 0x2)); x180 = ((uint64_t)(arg1[7]) * (arg1[7])); x181 = ((arg1[6]) * x2); x182 = ((arg1[6]) * x5); x183 = ((arg1[6]) * (x8 * 0x2)); x184 = ((arg1[6]) * x11); x185 = ((arg1[6]) * x14); x186 = ((arg1[6]) * (x17 * 0x2)); x187 = ((uint64_t)(arg1[6]) * (x21 * 0x2)); x188 = ((uint64_t)(arg1[6]) * x24); x189 = ((uint64_t)(arg1[6]) * x27); x190 = ((uint64_t)(arg1[6]) * (x30 * 0x2)); x191 = ((uint64_t)(arg1[6]) * (x33 * 0x2)); x192 = ((uint64_t)(arg1[6]) * x34); x193 = ((uint64_t)(arg1[6]) * x35); x194 = ((uint64_t)(arg1[6]) * (x36 * 0x2)); x195 = ((uint64_t)(arg1[6]) * (x37 * 0x2)); x196 = ((uint64_t)(arg1[6]) * x38); x197 = ((uint64_t)(arg1[6]) * (arg1[6])); x198 = ((arg1[5]) * x2); x199 = ((arg1[5]) * (x5 * 0x2)); x200 = ((arg1[5]) * (x8 * 0x2)); x201 = ((arg1[5]) * x11); x202 = ((arg1[5]) * (x14 * 0x2)); x203 = ((uint64_t)(arg1[5]) * (x18 * 0x2)); x204 = ((uint64_t)(arg1[5]) * (x21 * 0x2)); x205 = ((uint64_t)(arg1[5]) * x24); x206 = ((uint64_t)(arg1[5]) * (x27 * 0x2)); x207 = ((uint64_t)(arg1[5]) * (x30 * 0x2)); x208 = ((uint64_t)(arg1[5]) * (x33 * 0x2)); x209 = ((uint64_t)(arg1[5]) * x34); x210 = ((uint64_t)(arg1[5]) * (x35 * 0x2)); x211 = ((uint64_t)(arg1[5]) * (x36 * 0x2)); x212 = ((uint64_t)(arg1[5]) * (x37 * 0x2)); x213 = ((uint64_t)(arg1[5]) * x38); x214 = ((uint64_t)(arg1[5]) * (x39 * 0x2)); x215 = ((uint64_t)(arg1[5]) * ((arg1[5]) * 0x2)); x216 = ((arg1[4]) * (x2 * 0x2)); x217 = ((arg1[4]) * (x5 * 0x2)); x218 = ((arg1[4]) * (x8 * 0x2)); x219 = ((arg1[4]) * (x11 * 0x2)); x220 = ((uint64_t)(arg1[4]) * (x15 * 0x2)); x221 = ((uint64_t)(arg1[4]) * (x18 * 0x2)); x222 = ((uint64_t)(arg1[4]) * (x21 * 0x2)); x223 = ((uint64_t)(arg1[4]) * (x24 * 0x2)); x224 = ((uint64_t)(arg1[4]) * (x27 * 0x2)); x225 = ((uint64_t)(arg1[4]) * (x30 * 0x2)); x226 = ((uint64_t)(arg1[4]) * (x33 * 0x2)); x227 = ((uint64_t)(arg1[4]) * (x34 * 0x2)); x228 = ((uint64_t)(arg1[4]) * (x35 * 0x2)); x229 = ((uint64_t)(arg1[4]) * (x36 * 0x2)); x230 = ((uint64_t)(arg1[4]) * (x37 * 0x2)); x231 = ((uint64_t)(arg1[4]) * (x38 * 0x2)); x232 = ((uint64_t)(arg1[4]) * (x39 * 0x2)); x233 = ((uint64_t)(arg1[4]) * (x40 * 0x2)); x234 = ((uint64_t)(arg1[4]) * ((arg1[4]) * 0x2)); x235 = ((arg1[3]) * x2); x236 = ((arg1[3]) * x5); x237 = ((arg1[3]) * (x8 * 0x2)); x238 = ((uint64_t)(arg1[3]) * x12); x239 = ((uint64_t)(arg1[3]) * x15); x240 = ((uint64_t)(arg1[3]) * x18); x241 = ((uint64_t)(arg1[3]) * (x21 * 0x2)); x242 = ((uint64_t)(arg1[3]) * x24); x243 = ((uint64_t)(arg1[3]) * x27); x244 = ((uint64_t)(arg1[3]) * x30); x245 = ((uint64_t)(arg1[3]) * (x33 * 0x2)); x246 = ((uint64_t)(arg1[3]) * x34); x247 = ((uint64_t)(arg1[3]) * x35); x248 = ((uint64_t)(arg1[3]) * x36); x249 = ((uint64_t)(arg1[3]) * (x37 * 0x2)); x250 = ((uint64_t)(arg1[3]) * x38); x251 = ((uint64_t)(arg1[3]) * x39); x252 = ((uint64_t)(arg1[3]) * x40); x253 = ((uint64_t)(arg1[3]) * (x41 * 0x2)); x254 = ((uint64_t)(arg1[3]) * (arg1[3])); x255 = ((arg1[2]) * x2); x256 = ((arg1[2]) * (x5 * 0x2)); x257 = ((uint64_t)(arg1[2]) * (x9 * 0x2)); x258 = ((uint64_t)(arg1[2]) * x12); x259 = ((uint64_t)(arg1[2]) * x15); x260 = ((uint64_t)(arg1[2]) * (x18 * 0x2)); x261 = ((uint64_t)(arg1[2]) * (x21 * 0x2)); x262 = ((uint64_t)(arg1[2]) * x24); x263 = ((uint64_t)(arg1[2]) * x27); x264 = ((uint64_t)(arg1[2]) * (x30 * 0x2)); x265 = ((uint64_t)(arg1[2]) * (x33 * 0x2)); x266 = ((uint64_t)(arg1[2]) * x34); x267 = ((uint64_t)(arg1[2]) * x35); x268 = ((uint64_t)(arg1[2]) * (x36 * 0x2)); x269 = ((uint64_t)(arg1[2]) * (x37 * 0x2)); x270 = ((uint64_t)(arg1[2]) * x38); x271 = ((uint64_t)(arg1[2]) * x39); x272 = ((uint64_t)(arg1[2]) * (x40 * 0x2)); x273 = ((uint64_t)(arg1[2]) * (x41 * 0x2)); x274 = ((uint64_t)(arg1[2]) * x42); x275 = ((uint64_t)(arg1[2]) * (arg1[2])); x276 = ((arg1[1]) * (x2 * 0x2)); x277 = ((uint64_t)(arg1[1]) * (x6 * 0x2)); x278 = ((uint64_t)(arg1[1]) * (x9 * 0x2)); x279 = ((uint64_t)(arg1[1]) * x12); x280 = ((uint64_t)(arg1[1]) * (x15 * 0x2)); x281 = ((uint64_t)(arg1[1]) * (x18 * 0x2)); x282 = ((uint64_t)(arg1[1]) * (x21 * 0x2)); x283 = ((uint64_t)(arg1[1]) * x24); x284 = ((uint64_t)(arg1[1]) * (x27 * 0x2)); x285 = ((uint64_t)(arg1[1]) * (x30 * 0x2)); x286 = ((uint64_t)(arg1[1]) * (x33 * 0x2)); x287 = ((uint64_t)(arg1[1]) * x34); x288 = ((uint64_t)(arg1[1]) * (x35 * 0x2)); x289 = ((uint64_t)(arg1[1]) * (x36 * 0x2)); x290 = ((uint64_t)(arg1[1]) * (x37 * 0x2)); x291 = ((uint64_t)(arg1[1]) * x38); x292 = ((uint64_t)(arg1[1]) * (x39 * 0x2)); x293 = ((uint64_t)(arg1[1]) * (x40 * 0x2)); x294 = ((uint64_t)(arg1[1]) * (x41 * 0x2)); x295 = ((uint64_t)(arg1[1]) * x42); x296 = ((uint64_t)(arg1[1]) * (x43 * 0x2)); x297 = ((uint64_t)(arg1[1]) * ((arg1[1]) * 0x2)); x298 = ((uint64_t)(arg1[0]) * x3); x299 = ((uint64_t)(arg1[0]) * x6); x300 = ((uint64_t)(arg1[0]) * x9); x301 = ((uint64_t)(arg1[0]) * x12); x302 = ((uint64_t)(arg1[0]) * x15); x303 = ((uint64_t)(arg1[0]) * x18); x304 = ((uint64_t)(arg1[0]) * x21); x305 = ((uint64_t)(arg1[0]) * x24); x306 = ((uint64_t)(arg1[0]) * x27); x307 = ((uint64_t)(arg1[0]) * x30); x308 = ((uint64_t)(arg1[0]) * x33); x309 = ((uint64_t)(arg1[0]) * x34); x310 = ((uint64_t)(arg1[0]) * x35); x311 = ((uint64_t)(arg1[0]) * x36); x312 = ((uint64_t)(arg1[0]) * x37); x313 = ((uint64_t)(arg1[0]) * x38); x314 = ((uint64_t)(arg1[0]) * x39); x315 = ((uint64_t)(arg1[0]) * x40); x316 = ((uint64_t)(arg1[0]) * x41); x317 = ((uint64_t)(arg1[0]) * x42); x318 = ((uint64_t)(arg1[0]) * x43); x319 = ((uint64_t)(arg1[0]) * x44); x320 = ((uint64_t)(arg1[0]) * (arg1[0])); x321 = (x320 + (x276 + (x256 + (x237 + (x219 + (x202 + (x186 + (x171 + (x157 + (x144 + (x132 + x121))))))))))); x322 = (x321 >> 23); x323 = (uint32_t)(x321 & UINT32_C(0x7fffff)); x324 = (x298 + (x277 + (x257 + (x238 + (x220 + (x203 + (x187 + (x172 + (x158 + (x145 + (x133 + x122))))))))))); x325 = (x299 + (x278 + (x258 + (x239 + (x221 + (x204 + (x188 + (x173 + (x159 + (x146 + (x134 + x45))))))))))); x326 = (x300 + (x279 + (x259 + (x240 + (x222 + (x205 + (x189 + (x174 + (x160 + (x147 + (x135 + x46))))))))))); x327 = (x301 + (x280 + (x260 + (x241 + (x223 + (x206 + (x190 + (x175 + (x161 + (x148 + (x48 + x47))))))))))); x328 = (x302 + (x281 + (x261 + (x242 + (x224 + (x207 + (x191 + (x176 + (x162 + (x149 + (x51 + x49))))))))))); x329 = (x303 + (x282 + (x262 + (x243 + (x225 + (x208 + (x192 + (x177 + (x163 + (x55 + (x52 + x50))))))))))); x330 = (x304 + (x283 + (x263 + (x244 + (x226 + (x209 + (x193 + (x178 + (x164 + (x60 + (x56 + x53))))))))))); x331 = (x305 + (x284 + (x264 + (x245 + (x227 + (x210 + (x194 + (x179 + (x66 + (x61 + (x57 + x54))))))))))); x332 = (x306 + (x285 + (x265 + (x246 + (x228 + (x211 + (x195 + (x180 + (x73 + (x67 + (x62 + x58))))))))))); x333 = (x307 + (x286 + (x266 + (x247 + (x229 + (x212 + (x196 + (x81 + (x74 + (x68 + (x63 + x59))))))))))); x334 = (x308 + (x287 + (x267 + (x248 + (x230 + (x213 + (x197 + (x90 + (x82 + (x75 + (x69 + x64))))))))))); x335 = (x309 + (x288 + (x268 + (x249 + (x231 + (x214 + (x100 + (x91 + (x83 + (x76 + (x70 + x65))))))))))); x336 = (x310 + (x289 + (x269 + (x250 + (x232 + (x215 + (x111 + (x101 + (x92 + (x84 + (x77 + x71))))))))))); x337 = (x311 + (x290 + (x270 + (x251 + (x233 + (x123 + (x112 + (x102 + (x93 + (x85 + (x78 + x72))))))))))); x338 = (x312 + (x291 + (x271 + (x252 + (x234 + (x136 + (x124 + (x113 + (x103 + (x94 + (x86 + x79))))))))))); x339 = (x313 + (x292 + (x272 + (x253 + (x150 + (x137 + (x125 + (x114 + (x104 + (x95 + (x87 + x80))))))))))); x340 = (x314 + (x293 + (x273 + (x254 + (x165 + (x151 + (x138 + (x126 + (x115 + (x105 + (x96 + x88))))))))))); x341 = (x315 + (x294 + (x274 + (x181 + (x166 + (x152 + (x139 + (x127 + (x116 + (x106 + (x97 + x89))))))))))); x342 = (x316 + (x295 + (x275 + (x198 + (x182 + (x167 + (x153 + (x140 + (x128 + (x117 + (x107 + x98))))))))))); x343 = (x317 + (x296 + (x216 + (x199 + (x183 + (x168 + (x154 + (x141 + (x129 + (x118 + (x108 + x99))))))))))); x344 = (x318 + (x297 + (x235 + (x217 + (x200 + (x184 + (x169 + (x155 + (x142 + (x130 + (x119 + x109))))))))))); x345 = (x319 + (x255 + (x236 + (x218 + (x201 + (x185 + (x170 + (x156 + (x143 + (x131 + (x120 + x110))))))))))); x346 = (x322 + x345); x347 = (x346 >> 22); x348 = (uint32_t)(x346 & UINT32_C(0x3fffff)); x349 = (x347 + x344); x350 = (x349 >> 22); x351 = (uint32_t)(x349 & UINT32_C(0x3fffff)); x352 = (x350 + x343); x353 = (x352 >> 23); x354 = (uint32_t)(x352 & UINT32_C(0x7fffff)); x355 = (x353 + x342); x356 = (x355 >> 22); x357 = (uint32_t)(x355 & UINT32_C(0x3fffff)); x358 = (x356 + x341); x359 = (x358 >> 22); x360 = (uint32_t)(x358 & UINT32_C(0x3fffff)); x361 = (x359 + x340); x362 = (x361 >> 22); x363 = (uint32_t)(x361 & UINT32_C(0x3fffff)); x364 = (x362 + x339); x365 = (x364 >> 23); x366 = (uint32_t)(x364 & UINT32_C(0x7fffff)); x367 = (x365 + x338); x368 = (x367 >> 22); x369 = (uint32_t)(x367 & UINT32_C(0x3fffff)); x370 = (x368 + x337); x371 = (x370 >> 22); x372 = (uint32_t)(x370 & UINT32_C(0x3fffff)); x373 = (x371 + x336); x374 = (x373 >> 22); x375 = (uint32_t)(x373 & UINT32_C(0x3fffff)); x376 = (x374 + x335); x377 = (x376 >> 23); x378 = (uint32_t)(x376 & UINT32_C(0x7fffff)); x379 = (x377 + x334); x380 = (x379 >> 22); x381 = (uint32_t)(x379 & UINT32_C(0x3fffff)); x382 = (x380 + x333); x383 = (x382 >> 22); x384 = (uint32_t)(x382 & UINT32_C(0x3fffff)); x385 = (x383 + x332); x386 = (x385 >> 22); x387 = (uint32_t)(x385 & UINT32_C(0x3fffff)); x388 = (x386 + x331); x389 = (x388 >> 23); x390 = (uint32_t)(x388 & UINT32_C(0x7fffff)); x391 = (x389 + x330); x392 = (x391 >> 22); x393 = (uint32_t)(x391 & UINT32_C(0x3fffff)); x394 = (x392 + x329); x395 = (x394 >> 22); x396 = (uint32_t)(x394 & UINT32_C(0x3fffff)); x397 = (x395 + x328); x398 = (x397 >> 22); x399 = (uint32_t)(x397 & UINT32_C(0x3fffff)); x400 = (x398 + x327); x401 = (x400 >> 23); x402 = (uint32_t)(x400 & UINT32_C(0x7fffff)); x403 = (x401 + x326); x404 = (x403 >> 22); x405 = (uint32_t)(x403 & UINT32_C(0x3fffff)); x406 = (x404 + x325); x407 = (x406 >> 22); x408 = (uint32_t)(x406 & UINT32_C(0x3fffff)); x409 = (x407 + x324); x410 = (uint32_t)(x409 >> 22); x411 = (uint32_t)(x409 & UINT32_C(0x3fffff)); x412 = ((uint64_t)UINT16_C(0x239) * x410); x413 = (x323 + x412); x414 = (uint32_t)(x413 >> 23); x415 = (uint32_t)(x413 & UINT32_C(0x7fffff)); x416 = (x414 + x348); x417 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x416 >> 22); x418 = (x416 & UINT32_C(0x3fffff)); x419 = (x417 + x351); out1[0] = x415; out1[1] = x418; out1[2] = x419; out1[3] = x354; out1[4] = x357; out1[5] = x360; out1[6] = x363; out1[7] = x366; out1[8] = x369; out1[9] = x372; out1[10] = x375; out1[11] = x378; out1[12] = x381; out1[13] = x384; out1[14] = x387; out1[15] = x390; out1[16] = x393; out1[17] = x396; out1[18] = x399; out1[19] = x402; out1[20] = x405; out1[21] = x408; out1[22] = x411; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_carry reduces a field element. * Postconditions: * eval out1 mod m = eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] * Output Bounds: * out1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_carry( uint32_t out1[23], const uint32_t arg1[23]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint32_t x29; uint32_t x30; uint32_t x31; uint32_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; x1 = (arg1[0]); x2 = ((x1 >> 23) + (arg1[1])); x3 = ((x2 >> 22) + (arg1[2])); x4 = ((x3 >> 22) + (arg1[3])); x5 = ((x4 >> 23) + (arg1[4])); x6 = ((x5 >> 22) + (arg1[5])); x7 = ((x6 >> 22) + (arg1[6])); x8 = ((x7 >> 22) + (arg1[7])); x9 = ((x8 >> 23) + (arg1[8])); x10 = ((x9 >> 22) + (arg1[9])); x11 = ((x10 >> 22) + (arg1[10])); x12 = ((x11 >> 22) + (arg1[11])); x13 = ((x12 >> 23) + (arg1[12])); x14 = ((x13 >> 22) + (arg1[13])); x15 = ((x14 >> 22) + (arg1[14])); x16 = ((x15 >> 22) + (arg1[15])); x17 = ((x16 >> 23) + (arg1[16])); x18 = ((x17 >> 22) + (arg1[17])); x19 = ((x18 >> 22) + (arg1[18])); x20 = ((x19 >> 22) + (arg1[19])); x21 = ((x20 >> 23) + (arg1[20])); x22 = ((x21 >> 22) + (arg1[21])); x23 = ((x22 >> 22) + (arg1[22])); x24 = ((x1 & UINT32_C(0x7fffff)) + (UINT16_C(0x239) * (x23 >> 22))); x25 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x24 >> 23) + (x2 & UINT32_C(0x3fffff))); x26 = (x24 & UINT32_C(0x7fffff)); x27 = (x25 & UINT32_C(0x3fffff)); x28 = ((fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x25 >> 22) + (x3 & UINT32_C(0x3fffff))); x29 = (x4 & UINT32_C(0x7fffff)); x30 = (x5 & UINT32_C(0x3fffff)); x31 = (x6 & UINT32_C(0x3fffff)); x32 = (x7 & UINT32_C(0x3fffff)); x33 = (x8 & UINT32_C(0x7fffff)); x34 = (x9 & UINT32_C(0x3fffff)); x35 = (x10 & UINT32_C(0x3fffff)); x36 = (x11 & UINT32_C(0x3fffff)); x37 = (x12 & UINT32_C(0x7fffff)); x38 = (x13 & UINT32_C(0x3fffff)); x39 = (x14 & UINT32_C(0x3fffff)); x40 = (x15 & UINT32_C(0x3fffff)); x41 = (x16 & UINT32_C(0x7fffff)); x42 = (x17 & UINT32_C(0x3fffff)); x43 = (x18 & UINT32_C(0x3fffff)); x44 = (x19 & UINT32_C(0x3fffff)); x45 = (x20 & UINT32_C(0x7fffff)); x46 = (x21 & UINT32_C(0x3fffff)); x47 = (x22 & UINT32_C(0x3fffff)); x48 = (x23 & UINT32_C(0x3fffff)); out1[0] = x26; out1[1] = x27; out1[2] = x28; out1[3] = x29; out1[4] = x30; out1[5] = x31; out1[6] = x32; out1[7] = x33; out1[8] = x34; out1[9] = x35; out1[10] = x36; out1[11] = x37; out1[12] = x38; out1[13] = x39; out1[14] = x40; out1[15] = x41; out1[16] = x42; out1[17] = x43; out1[18] = x44; out1[19] = x45; out1[20] = x46; out1[21] = x47; out1[22] = x48; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_add adds two field elements. * Postconditions: * eval out1 mod m = (eval arg1 + eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * arg2: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * Output Bounds: * out1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_add( uint32_t out1[23], const uint32_t arg1[23], const uint32_t arg2[23]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; x1 = ((arg1[0]) + (arg2[0])); x2 = ((arg1[1]) + (arg2[1])); x3 = ((arg1[2]) + (arg2[2])); x4 = ((arg1[3]) + (arg2[3])); x5 = ((arg1[4]) + (arg2[4])); x6 = ((arg1[5]) + (arg2[5])); x7 = ((arg1[6]) + (arg2[6])); x8 = ((arg1[7]) + (arg2[7])); x9 = ((arg1[8]) + (arg2[8])); x10 = ((arg1[9]) + (arg2[9])); x11 = ((arg1[10]) + (arg2[10])); x12 = ((arg1[11]) + (arg2[11])); x13 = ((arg1[12]) + (arg2[12])); x14 = ((arg1[13]) + (arg2[13])); x15 = ((arg1[14]) + (arg2[14])); x16 = ((arg1[15]) + (arg2[15])); x17 = ((arg1[16]) + (arg2[16])); x18 = ((arg1[17]) + (arg2[17])); x19 = ((arg1[18]) + (arg2[18])); x20 = ((arg1[19]) + (arg2[19])); x21 = ((arg1[20]) + (arg2[20])); x22 = ((arg1[21]) + (arg2[21])); x23 = ((arg1[22]) + (arg2[22])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; out1[11] = x12; out1[12] = x13; out1[13] = x14; out1[14] = x15; out1[15] = x16; out1[16] = x17; out1[17] = x18; out1[18] = x19; out1[19] = x20; out1[20] = x21; out1[21] = x22; out1[22] = x23; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_sub subtracts two field elements. * Postconditions: * eval out1 mod m = (eval arg1 - eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * arg2: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * Output Bounds: * out1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_sub( uint32_t out1[23], const uint32_t arg1[23], const uint32_t arg2[23]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; x1 = ((UINT32_C(0xfffb8e) + (arg1[0])) - (arg2[0])); x2 = ((UINT32_C(0x7ffffe) + (arg1[1])) - (arg2[1])); x3 = ((UINT32_C(0x7ffffe) + (arg1[2])) - (arg2[2])); x4 = ((UINT32_C(0xfffffe) + (arg1[3])) - (arg2[3])); x5 = ((UINT32_C(0x7ffffe) + (arg1[4])) - (arg2[4])); x6 = ((UINT32_C(0x7ffffe) + (arg1[5])) - (arg2[5])); x7 = ((UINT32_C(0x7ffffe) + (arg1[6])) - (arg2[6])); x8 = ((UINT32_C(0xfffffe) + (arg1[7])) - (arg2[7])); x9 = ((UINT32_C(0x7ffffe) + (arg1[8])) - (arg2[8])); x10 = ((UINT32_C(0x7ffffe) + (arg1[9])) - (arg2[9])); x11 = ((UINT32_C(0x7ffffe) + (arg1[10])) - (arg2[10])); x12 = ((UINT32_C(0xfffffe) + (arg1[11])) - (arg2[11])); x13 = ((UINT32_C(0x7ffffe) + (arg1[12])) - (arg2[12])); x14 = ((UINT32_C(0x7ffffe) + (arg1[13])) - (arg2[13])); x15 = ((UINT32_C(0x7ffffe) + (arg1[14])) - (arg2[14])); x16 = ((UINT32_C(0xfffffe) + (arg1[15])) - (arg2[15])); x17 = ((UINT32_C(0x7ffffe) + (arg1[16])) - (arg2[16])); x18 = ((UINT32_C(0x7ffffe) + (arg1[17])) - (arg2[17])); x19 = ((UINT32_C(0x7ffffe) + (arg1[18])) - (arg2[18])); x20 = ((UINT32_C(0xfffffe) + (arg1[19])) - (arg2[19])); x21 = ((UINT32_C(0x7ffffe) + (arg1[20])) - (arg2[20])); x22 = ((UINT32_C(0x7ffffe) + (arg1[21])) - (arg2[21])); x23 = ((UINT32_C(0x7ffffe) + (arg1[22])) - (arg2[22])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; out1[11] = x12; out1[12] = x13; out1[13] = x14; out1[14] = x15; out1[15] = x16; out1[16] = x17; out1[17] = x18; out1[18] = x19; out1[19] = x20; out1[20] = x21; out1[21] = x22; out1[22] = x23; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_opp negates a field element. * Postconditions: * eval out1 mod m = -eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * Output Bounds: * out1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_opp( uint32_t out1[23], const uint32_t arg1[23]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; x1 = (UINT32_C(0xfffb8e) - (arg1[0])); x2 = (UINT32_C(0x7ffffe) - (arg1[1])); x3 = (UINT32_C(0x7ffffe) - (arg1[2])); x4 = (UINT32_C(0xfffffe) - (arg1[3])); x5 = (UINT32_C(0x7ffffe) - (arg1[4])); x6 = (UINT32_C(0x7ffffe) - (arg1[5])); x7 = (UINT32_C(0x7ffffe) - (arg1[6])); x8 = (UINT32_C(0xfffffe) - (arg1[7])); x9 = (UINT32_C(0x7ffffe) - (arg1[8])); x10 = (UINT32_C(0x7ffffe) - (arg1[9])); x11 = (UINT32_C(0x7ffffe) - (arg1[10])); x12 = (UINT32_C(0xfffffe) - (arg1[11])); x13 = (UINT32_C(0x7ffffe) - (arg1[12])); x14 = (UINT32_C(0x7ffffe) - (arg1[13])); x15 = (UINT32_C(0x7ffffe) - (arg1[14])); x16 = (UINT32_C(0xfffffe) - (arg1[15])); x17 = (UINT32_C(0x7ffffe) - (arg1[16])); x18 = (UINT32_C(0x7ffffe) - (arg1[17])); x19 = (UINT32_C(0x7ffffe) - (arg1[18])); x20 = (UINT32_C(0xfffffe) - (arg1[19])); x21 = (UINT32_C(0x7ffffe) - (arg1[20])); x22 = (UINT32_C(0x7ffffe) - (arg1[21])); x23 = (UINT32_C(0x7ffffe) - (arg1[22])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; out1[11] = x12; out1[12] = x13; out1[13] = x14; out1[14] = x15; out1[15] = x16; out1[16] = x17; out1[17] = x18; out1[18] = x19; out1[19] = x20; out1[20] = x21; out1[21] = x22; out1[22] = x23; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( uint32_t out1[23], fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 arg1, const uint32_t arg2[23], const uint32_t arg3[23]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x9, arg1, (arg2[8]), (arg3[8])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x10, arg1, (arg2[9]), (arg3[9])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x11, arg1, (arg2[10]), (arg3[10])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x12, arg1, (arg2[11]), (arg3[11])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x13, arg1, (arg2[12]), (arg3[12])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x14, arg1, (arg2[13]), (arg3[13])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x15, arg1, (arg2[14]), (arg3[14])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x16, arg1, (arg2[15]), (arg3[15])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x17, arg1, (arg2[16]), (arg3[16])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x18, arg1, (arg2[17]), (arg3[17])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x19, arg1, (arg2[18]), (arg3[18])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x20, arg1, (arg2[19]), (arg3[19])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x21, arg1, (arg2[20]), (arg3[20])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x22, arg1, (arg2[21]), (arg3[21])); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32( &x23, arg1, (arg2[22]), (arg3[22])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; out1[11] = x12; out1[12] = x13; out1[13] = x14; out1[14] = x15; out1[15] = x16; out1[16] = x17; out1[17] = x18; out1[18] = x19; out1[19] = x20; out1[20] = x21; out1[21] = x22; out1[22] = x23; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes serializes a field element to bytes in little-endian order. * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..63] * * Input Bounds: * arg1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes( uint8_t out1[64], const uint32_t arg1[23]) { uint32_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x2; uint32_t x3; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x4; uint32_t x5; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x6; uint32_t x7; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x8; uint32_t x9; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x10; uint32_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x12; uint32_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x14; uint32_t x15; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x16; uint32_t x17; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x18; uint32_t x19; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x20; uint32_t x21; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x22; uint32_t x23; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x24; uint32_t x25; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x26; uint32_t x27; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x28; uint32_t x29; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x30; uint32_t x31; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x32; uint32_t x33; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x34; uint32_t x35; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x36; uint32_t x37; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x38; uint32_t x39; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x40; uint32_t x41; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x42; uint32_t x43; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x44; uint32_t x45; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x46; uint32_t x47; uint32_t x48; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x49; uint32_t x50; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x51; uint32_t x52; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x53; uint32_t x54; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x55; uint32_t x56; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x57; uint32_t x58; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x59; uint32_t x60; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x61; uint32_t x62; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x63; uint32_t x64; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x65; uint32_t x66; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x67; uint32_t x68; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x69; uint32_t x70; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x71; uint32_t x72; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x73; uint32_t x74; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x75; uint32_t x76; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x77; uint32_t x78; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x79; uint32_t x80; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x81; uint32_t x82; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x83; uint32_t x84; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x85; uint32_t x86; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x87; uint32_t x88; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x89; uint32_t x90; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x91; uint32_t x92; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x93; uint32_t x94; uint32_t x95; uint32_t x96; uint32_t x97; uint32_t x98; uint32_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; uint32_t x104; uint32_t x105; uint32_t x106; uint32_t x107; uint32_t x108; uint32_t x109; uint32_t x110; uint32_t x111; uint32_t x112; uint32_t x113; uint8_t x114; uint32_t x115; uint8_t x116; uint8_t x117; uint32_t x118; uint8_t x119; uint32_t x120; uint8_t x121; uint32_t x122; uint8_t x123; uint8_t x124; uint32_t x125; uint8_t x126; uint32_t x127; uint8_t x128; uint32_t x129; uint8_t x130; uint8_t x131; uint32_t x132; uint8_t x133; uint32_t x134; uint8_t x135; uint32_t x136; uint8_t x137; uint8_t x138; uint32_t x139; uint8_t x140; uint32_t x141; uint8_t x142; uint8_t x143; uint8_t x144; uint32_t x145; uint8_t x146; uint8_t x147; uint32_t x148; uint8_t x149; uint32_t x150; uint8_t x151; uint32_t x152; uint8_t x153; uint8_t x154; uint32_t x155; uint8_t x156; uint32_t x157; uint8_t x158; uint32_t x159; uint8_t x160; uint8_t x161; uint32_t x162; uint8_t x163; uint32_t x164; uint8_t x165; uint32_t x166; uint8_t x167; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x168; uint32_t x169; uint8_t x170; uint32_t x171; uint8_t x172; uint8_t x173; uint32_t x174; uint8_t x175; uint32_t x176; uint8_t x177; uint32_t x178; uint8_t x179; uint8_t x180; uint32_t x181; uint8_t x182; uint32_t x183; uint8_t x184; uint32_t x185; uint8_t x186; uint8_t x187; uint32_t x188; uint8_t x189; uint32_t x190; uint8_t x191; uint32_t x192; uint8_t x193; uint8_t x194; uint32_t x195; uint8_t x196; uint32_t x197; uint8_t x198; uint8_t x199; uint8_t x200; uint32_t x201; uint8_t x202; uint8_t x203; uint32_t x204; uint8_t x205; uint32_t x206; uint8_t x207; uint32_t x208; uint8_t x209; uint8_t x210; uint32_t x211; uint8_t x212; uint32_t x213; uint8_t x214; uint32_t x215; uint8_t x216; uint8_t x217; uint32_t x218; uint8_t x219; uint32_t x220; uint8_t x221; uint32_t x222; uint8_t x223; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x224; uint32_t x225; uint8_t x226; uint32_t x227; uint8_t x228; uint8_t x229; uint32_t x230; uint8_t x231; uint32_t x232; uint8_t x233; uint32_t x234; uint8_t x235; uint8_t x236; uint32_t x237; uint8_t x238; uint32_t x239; uint8_t x240; uint32_t x241; uint8_t x242; uint8_t x243; uint32_t x244; uint8_t x245; uint32_t x246; uint8_t x247; uint32_t x248; uint8_t x249; uint8_t x250; uint32_t x251; uint8_t x252; uint32_t x253; uint8_t x254; uint8_t x255; fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u23( &x1, &x2, 0x0, (arg1[0]), UINT32_C(0x7ffdc7)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x3, &x4, x2, (arg1[1]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x5, &x6, x4, (arg1[2]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u23( &x7, &x8, x6, (arg1[3]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x9, &x10, x8, (arg1[4]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x11, &x12, x10, (arg1[5]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x13, &x14, x12, (arg1[6]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u23( &x15, &x16, x14, (arg1[7]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x17, &x18, x16, (arg1[8]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x19, &x20, x18, (arg1[9]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x21, &x22, x20, (arg1[10]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u23( &x23, &x24, x22, (arg1[11]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x25, &x26, x24, (arg1[12]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x27, &x28, x26, (arg1[13]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x29, &x30, x28, (arg1[14]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u23( &x31, &x32, x30, (arg1[15]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x33, &x34, x32, (arg1[16]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x35, &x36, x34, (arg1[17]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x37, &x38, x36, (arg1[18]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u23( &x39, &x40, x38, (arg1[19]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x41, &x42, x40, (arg1[20]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x43, &x44, x42, (arg1[21]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_subborrowx_u22( &x45, &x46, x44, (arg1[22]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_cmovznz_u32(&x47, x46, 0x0, UINT32_C(0xffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u23( &x48, &x49, 0x0, x1, (x47 & UINT32_C(0x7ffdc7))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x50, &x51, x49, x3, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x52, &x53, x51, x5, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u23( &x54, &x55, x53, x7, (x47 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x56, &x57, x55, x9, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x58, &x59, x57, x11, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x60, &x61, x59, x13, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u23( &x62, &x63, x61, x15, (x47 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x64, &x65, x63, x17, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x66, &x67, x65, x19, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x68, &x69, x67, x21, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u23( &x70, &x71, x69, x23, (x47 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x72, &x73, x71, x25, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x74, &x75, x73, x27, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x76, &x77, x75, x29, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u23( &x78, &x79, x77, x31, (x47 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x80, &x81, x79, x33, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x82, &x83, x81, x35, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x84, &x85, x83, x37, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u23( &x86, &x87, x85, x39, (x47 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x88, &x89, x87, x41, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x90, &x91, x89, x43, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetA_addcarryx_u22( &x92, &x93, x91, x45, (x47 & UINT32_C(0x3fffff))); x94 = (x92 << 2); x95 = (x90 << 4); x96 = (x88 << 6); x97 = (x86 << 7); x98 = (x84 * (uint32_t)0x2); x99 = (x82 << 3); x100 = (x80 << 5); x101 = (x78 << 6); x102 = (x74 << 2); x103 = (x72 << 4); x104 = (x70 << 5); x105 = (x68 << 7); x106 = (x66 * (uint32_t)0x2); x107 = (x64 << 3); x108 = (x62 << 4); x109 = (x60 << 6); x110 = (x56 << 2); x111 = (x54 << 3); x112 = (x52 << 5); x113 = (x50 << 7); x114 = (uint8_t)(x48 & UINT8_C(0xff)); x115 = (x48 >> 8); x116 = (uint8_t)(x115 & UINT8_C(0xff)); x117 = (uint8_t)(x115 >> 8); x118 = (x113 + (uint32_t)x117); x119 = (uint8_t)(x118 & UINT8_C(0xff)); x120 = (x118 >> 8); x121 = (uint8_t)(x120 & UINT8_C(0xff)); x122 = (x120 >> 8); x123 = (uint8_t)(x122 & UINT8_C(0xff)); x124 = (uint8_t)(x122 >> 8); x125 = (x112 + (uint32_t)x124); x126 = (uint8_t)(x125 & UINT8_C(0xff)); x127 = (x125 >> 8); x128 = (uint8_t)(x127 & UINT8_C(0xff)); x129 = (x127 >> 8); x130 = (uint8_t)(x129 & UINT8_C(0xff)); x131 = (uint8_t)(x129 >> 8); x132 = (x111 + (uint32_t)x131); x133 = (uint8_t)(x132 & UINT8_C(0xff)); x134 = (x132 >> 8); x135 = (uint8_t)(x134 & UINT8_C(0xff)); x136 = (x134 >> 8); x137 = (uint8_t)(x136 & UINT8_C(0xff)); x138 = (uint8_t)(x136 >> 8); x139 = (x110 + (uint32_t)x138); x140 = (uint8_t)(x139 & UINT8_C(0xff)); x141 = (x139 >> 8); x142 = (uint8_t)(x141 & UINT8_C(0xff)); x143 = (uint8_t)(x141 >> 8); x144 = (uint8_t)(x58 & UINT8_C(0xff)); x145 = (x58 >> 8); x146 = (uint8_t)(x145 & UINT8_C(0xff)); x147 = (uint8_t)(x145 >> 8); x148 = (x109 + (uint32_t)x147); x149 = (uint8_t)(x148 & UINT8_C(0xff)); x150 = (x148 >> 8); x151 = (uint8_t)(x150 & UINT8_C(0xff)); x152 = (x150 >> 8); x153 = (uint8_t)(x152 & UINT8_C(0xff)); x154 = (uint8_t)(x152 >> 8); x155 = (x108 + (uint32_t)x154); x156 = (uint8_t)(x155 & UINT8_C(0xff)); x157 = (x155 >> 8); x158 = (uint8_t)(x157 & UINT8_C(0xff)); x159 = (x157 >> 8); x160 = (uint8_t)(x159 & UINT8_C(0xff)); x161 = (uint8_t)(x159 >> 8); x162 = (x107 + (uint32_t)x161); x163 = (uint8_t)(x162 & UINT8_C(0xff)); x164 = (x162 >> 8); x165 = (uint8_t)(x164 & UINT8_C(0xff)); x166 = (x164 >> 8); x167 = (uint8_t)(x166 & UINT8_C(0xff)); x168 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x166 >> 8); x169 = (x106 + (uint32_t)x168); x170 = (uint8_t)(x169 & UINT8_C(0xff)); x171 = (x169 >> 8); x172 = (uint8_t)(x171 & UINT8_C(0xff)); x173 = (uint8_t)(x171 >> 8); x174 = (x105 + (uint32_t)x173); x175 = (uint8_t)(x174 & UINT8_C(0xff)); x176 = (x174 >> 8); x177 = (uint8_t)(x176 & UINT8_C(0xff)); x178 = (x176 >> 8); x179 = (uint8_t)(x178 & UINT8_C(0xff)); x180 = (uint8_t)(x178 >> 8); x181 = (x104 + (uint32_t)x180); x182 = (uint8_t)(x181 & UINT8_C(0xff)); x183 = (x181 >> 8); x184 = (uint8_t)(x183 & UINT8_C(0xff)); x185 = (x183 >> 8); x186 = (uint8_t)(x185 & UINT8_C(0xff)); x187 = (uint8_t)(x185 >> 8); x188 = (x103 + (uint32_t)x187); x189 = (uint8_t)(x188 & UINT8_C(0xff)); x190 = (x188 >> 8); x191 = (uint8_t)(x190 & UINT8_C(0xff)); x192 = (x190 >> 8); x193 = (uint8_t)(x192 & UINT8_C(0xff)); x194 = (uint8_t)(x192 >> 8); x195 = (x102 + (uint32_t)x194); x196 = (uint8_t)(x195 & UINT8_C(0xff)); x197 = (x195 >> 8); x198 = (uint8_t)(x197 & UINT8_C(0xff)); x199 = (uint8_t)(x197 >> 8); x200 = (uint8_t)(x76 & UINT8_C(0xff)); x201 = (x76 >> 8); x202 = (uint8_t)(x201 & UINT8_C(0xff)); x203 = (uint8_t)(x201 >> 8); x204 = (x101 + (uint32_t)x203); x205 = (uint8_t)(x204 & UINT8_C(0xff)); x206 = (x204 >> 8); x207 = (uint8_t)(x206 & UINT8_C(0xff)); x208 = (x206 >> 8); x209 = (uint8_t)(x208 & UINT8_C(0xff)); x210 = (uint8_t)(x208 >> 8); x211 = (x100 + (uint32_t)x210); x212 = (uint8_t)(x211 & UINT8_C(0xff)); x213 = (x211 >> 8); x214 = (uint8_t)(x213 & UINT8_C(0xff)); x215 = (x213 >> 8); x216 = (uint8_t)(x215 & UINT8_C(0xff)); x217 = (uint8_t)(x215 >> 8); x218 = (x99 + (uint32_t)x217); x219 = (uint8_t)(x218 & UINT8_C(0xff)); x220 = (x218 >> 8); x221 = (uint8_t)(x220 & UINT8_C(0xff)); x222 = (x220 >> 8); x223 = (uint8_t)(x222 & UINT8_C(0xff)); x224 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x222 >> 8); x225 = (x98 + (uint32_t)x224); x226 = (uint8_t)(x225 & UINT8_C(0xff)); x227 = (x225 >> 8); x228 = (uint8_t)(x227 & UINT8_C(0xff)); x229 = (uint8_t)(x227 >> 8); x230 = (x97 + (uint32_t)x229); x231 = (uint8_t)(x230 & UINT8_C(0xff)); x232 = (x230 >> 8); x233 = (uint8_t)(x232 & UINT8_C(0xff)); x234 = (x232 >> 8); x235 = (uint8_t)(x234 & UINT8_C(0xff)); x236 = (uint8_t)(x234 >> 8); x237 = (x96 + (uint32_t)x236); x238 = (uint8_t)(x237 & UINT8_C(0xff)); x239 = (x237 >> 8); x240 = (uint8_t)(x239 & UINT8_C(0xff)); x241 = (x239 >> 8); x242 = (uint8_t)(x241 & UINT8_C(0xff)); x243 = (uint8_t)(x241 >> 8); x244 = (x95 + (uint32_t)x243); x245 = (uint8_t)(x244 & UINT8_C(0xff)); x246 = (x244 >> 8); x247 = (uint8_t)(x246 & UINT8_C(0xff)); x248 = (x246 >> 8); x249 = (uint8_t)(x248 & UINT8_C(0xff)); x250 = (uint8_t)(x248 >> 8); x251 = (x94 + (uint32_t)x250); x252 = (uint8_t)(x251 & UINT8_C(0xff)); x253 = (x251 >> 8); x254 = (uint8_t)(x253 & UINT8_C(0xff)); x255 = (uint8_t)(x253 >> 8); out1[0] = x114; out1[1] = x116; out1[2] = x119; out1[3] = x121; out1[4] = x123; out1[5] = x126; out1[6] = x128; out1[7] = x130; out1[8] = x133; out1[9] = x135; out1[10] = x137; out1[11] = x140; out1[12] = x142; out1[13] = x143; out1[14] = x144; out1[15] = x146; out1[16] = x149; out1[17] = x151; out1[18] = x153; out1[19] = x156; out1[20] = x158; out1[21] = x160; out1[22] = x163; out1[23] = x165; out1[24] = x167; out1[25] = x170; out1[26] = x172; out1[27] = x175; out1[28] = x177; out1[29] = x179; out1[30] = x182; out1[31] = x184; out1[32] = x186; out1[33] = x189; out1[34] = x191; out1[35] = x193; out1[36] = x196; out1[37] = x198; out1[38] = x199; out1[39] = x200; out1[40] = x202; out1[41] = x205; out1[42] = x207; out1[43] = x209; out1[44] = x212; out1[45] = x214; out1[46] = x216; out1[47] = x219; out1[48] = x221; out1[49] = x223; out1[50] = x226; out1[51] = x228; out1[52] = x231; out1[53] = x233; out1[54] = x235; out1[55] = x238; out1[56] = x240; out1[57] = x242; out1[58] = x245; out1[59] = x247; out1[60] = x249; out1[61] = x252; out1[62] = x254; out1[63] = x255; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes deserializes a field element from bytes in little-endian order. * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes( uint32_t out1[23], const uint8_t arg1[64]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint8_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint32_t x29; uint32_t x30; uint32_t x31; uint32_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; uint8_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; uint32_t x55; uint32_t x56; uint32_t x57; uint32_t x58; uint32_t x59; uint32_t x60; uint32_t x61; uint32_t x62; uint32_t x63; uint8_t x64; uint32_t x65; uint32_t x66; uint32_t x67; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint8_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint8_t x78; uint32_t x79; uint32_t x80; uint32_t x81; uint32_t x82; uint8_t x83; uint32_t x84; uint32_t x85; uint32_t x86; uint32_t x87; uint32_t x88; uint8_t x89; uint32_t x90; uint32_t x91; uint32_t x92; uint32_t x93; uint8_t x94; uint32_t x95; uint32_t x96; uint32_t x97; uint32_t x98; uint8_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; uint8_t x104; uint32_t x105; uint32_t x106; uint32_t x107; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x108; uint32_t x109; uint32_t x110; uint32_t x111; uint32_t x112; uint8_t x113; uint32_t x114; uint32_t x115; uint32_t x116; uint32_t x117; uint8_t x118; uint32_t x119; uint32_t x120; uint32_t x121; uint32_t x122; uint8_t x123; uint32_t x124; uint32_t x125; uint32_t x126; uint32_t x127; uint32_t x128; uint8_t x129; uint32_t x130; uint32_t x131; uint32_t x132; uint32_t x133; uint8_t x134; uint32_t x135; uint32_t x136; uint32_t x137; uint32_t x138; uint8_t x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint8_t x144; uint32_t x145; uint32_t x146; uint32_t x147; fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1 x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; uint8_t x153; uint32_t x154; uint32_t x155; uint32_t x156; uint32_t x157; uint8_t x158; uint32_t x159; uint32_t x160; uint32_t x161; uint32_t x162; uint8_t x163; uint32_t x164; uint32_t x165; x1 = ((uint32_t)(arg1[63]) << 14); x2 = ((uint32_t)(arg1[62]) << 6); x3 = ((uint32_t)(arg1[61]) << 20); x4 = ((uint32_t)(arg1[60]) << 12); x5 = ((uint32_t)(arg1[59]) << 4); x6 = ((uint32_t)(arg1[58]) << 18); x7 = ((uint32_t)(arg1[57]) << 10); x8 = ((uint32_t)(arg1[56]) << 2); x9 = ((uint32_t)(arg1[55]) << 17); x10 = ((uint32_t)(arg1[54]) << 9); x11 = ((uint32_t)(arg1[53]) * 0x2); x12 = ((uint32_t)(arg1[52]) << 15); x13 = ((uint32_t)(arg1[51]) << 7); x14 = ((uint32_t)(arg1[50]) << 21); x15 = ((uint32_t)(arg1[49]) << 13); x16 = ((uint32_t)(arg1[48]) << 5); x17 = ((uint32_t)(arg1[47]) << 19); x18 = ((uint32_t)(arg1[46]) << 11); x19 = ((uint32_t)(arg1[45]) << 3); x20 = ((uint32_t)(arg1[44]) << 18); x21 = ((uint32_t)(arg1[43]) << 10); x22 = ((uint32_t)(arg1[42]) << 2); x23 = ((uint32_t)(arg1[41]) << 16); x24 = ((uint32_t)(arg1[40]) << 8); x25 = (arg1[39]); x26 = ((uint32_t)(arg1[38]) << 14); x27 = ((uint32_t)(arg1[37]) << 6); x28 = ((uint32_t)(arg1[36]) << 20); x29 = ((uint32_t)(arg1[35]) << 12); x30 = ((uint32_t)(arg1[34]) << 4); x31 = ((uint32_t)(arg1[33]) << 19); x32 = ((uint32_t)(arg1[32]) << 11); x33 = ((uint32_t)(arg1[31]) << 3); x34 = ((uint32_t)(arg1[30]) << 17); x35 = ((uint32_t)(arg1[29]) << 9); x36 = ((uint32_t)(arg1[28]) * 0x2); x37 = ((uint32_t)(arg1[27]) << 15); x38 = ((uint32_t)(arg1[26]) << 7); x39 = ((uint32_t)(arg1[25]) << 21); x40 = ((uint32_t)(arg1[24]) << 13); x41 = ((uint32_t)(arg1[23]) << 5); x42 = ((uint32_t)(arg1[22]) << 20); x43 = ((uint32_t)(arg1[21]) << 12); x44 = ((uint32_t)(arg1[20]) << 4); x45 = ((uint32_t)(arg1[19]) << 18); x46 = ((uint32_t)(arg1[18]) << 10); x47 = ((uint32_t)(arg1[17]) << 2); x48 = ((uint32_t)(arg1[16]) << 16); x49 = ((uint32_t)(arg1[15]) << 8); x50 = (arg1[14]); x51 = ((uint32_t)(arg1[13]) << 14); x52 = ((uint32_t)(arg1[12]) << 6); x53 = ((uint32_t)(arg1[11]) << 21); x54 = ((uint32_t)(arg1[10]) << 13); x55 = ((uint32_t)(arg1[9]) << 5); x56 = ((uint32_t)(arg1[8]) << 19); x57 = ((uint32_t)(arg1[7]) << 11); x58 = ((uint32_t)(arg1[6]) << 3); x59 = ((uint32_t)(arg1[5]) << 17); x60 = ((uint32_t)(arg1[4]) << 9); x61 = ((uint32_t)(arg1[3]) * 0x2); x62 = ((uint32_t)(arg1[2]) << 16); x63 = ((uint32_t)(arg1[1]) << 8); x64 = (arg1[0]); x65 = (x63 + (uint32_t)x64); x66 = (x62 + x65); x67 = (x66 & UINT32_C(0x7fffff)); x68 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x66 >> 23); x69 = (x61 + (uint32_t)x68); x70 = (x60 + x69); x71 = (x59 + x70); x72 = (x71 & UINT32_C(0x3fffff)); x73 = (uint8_t)(x71 >> 22); x74 = (x58 + (uint32_t)x73); x75 = (x57 + x74); x76 = (x56 + x75); x77 = (x76 & UINT32_C(0x3fffff)); x78 = (uint8_t)(x76 >> 22); x79 = (x55 + (uint32_t)x78); x80 = (x54 + x79); x81 = (x53 + x80); x82 = (x81 & UINT32_C(0x7fffff)); x83 = (uint8_t)(x81 >> 23); x84 = (x52 + (uint32_t)x83); x85 = (x51 + x84); x86 = (x49 + (uint32_t)x50); x87 = (x48 + x86); x88 = (x87 & UINT32_C(0x3fffff)); x89 = (uint8_t)(x87 >> 22); x90 = (x47 + (uint32_t)x89); x91 = (x46 + x90); x92 = (x45 + x91); x93 = (x92 & UINT32_C(0x3fffff)); x94 = (uint8_t)(x92 >> 22); x95 = (x44 + (uint32_t)x94); x96 = (x43 + x95); x97 = (x42 + x96); x98 = (x97 & UINT32_C(0x7fffff)); x99 = (uint8_t)(x97 >> 23); x100 = (x41 + (uint32_t)x99); x101 = (x40 + x100); x102 = (x39 + x101); x103 = (x102 & UINT32_C(0x3fffff)); x104 = (uint8_t)(x102 >> 22); x105 = (x38 + (uint32_t)x104); x106 = (x37 + x105); x107 = (x106 & UINT32_C(0x3fffff)); x108 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x106 >> 22); x109 = (x36 + (uint32_t)x108); x110 = (x35 + x109); x111 = (x34 + x110); x112 = (x111 & UINT32_C(0x3fffff)); x113 = (uint8_t)(x111 >> 22); x114 = (x33 + (uint32_t)x113); x115 = (x32 + x114); x116 = (x31 + x115); x117 = (x116 & UINT32_C(0x7fffff)); x118 = (uint8_t)(x116 >> 23); x119 = (x30 + (uint32_t)x118); x120 = (x29 + x119); x121 = (x28 + x120); x122 = (x121 & UINT32_C(0x3fffff)); x123 = (uint8_t)(x121 >> 22); x124 = (x27 + (uint32_t)x123); x125 = (x26 + x124); x126 = (x24 + (uint32_t)x25); x127 = (x23 + x126); x128 = (x127 & UINT32_C(0x3fffff)); x129 = (uint8_t)(x127 >> 22); x130 = (x22 + (uint32_t)x129); x131 = (x21 + x130); x132 = (x20 + x131); x133 = (x132 & UINT32_C(0x7fffff)); x134 = (uint8_t)(x132 >> 23); x135 = (x19 + (uint32_t)x134); x136 = (x18 + x135); x137 = (x17 + x136); x138 = (x137 & UINT32_C(0x3fffff)); x139 = (uint8_t)(x137 >> 22); x140 = (x16 + (uint32_t)x139); x141 = (x15 + x140); x142 = (x14 + x141); x143 = (x142 & UINT32_C(0x3fffff)); x144 = (uint8_t)(x142 >> 22); x145 = (x13 + (uint32_t)x144); x146 = (x12 + x145); x147 = (x146 & UINT32_C(0x3fffff)); x148 = (fiat_id_tc26_gost_3410_2012_512_paramSetA_uint1)(x146 >> 22); x149 = (x11 + (uint32_t)x148); x150 = (x10 + x149); x151 = (x9 + x150); x152 = (x151 & UINT32_C(0x7fffff)); x153 = (uint8_t)(x151 >> 23); x154 = (x8 + (uint32_t)x153); x155 = (x7 + x154); x156 = (x6 + x155); x157 = (x156 & UINT32_C(0x3fffff)); x158 = (uint8_t)(x156 >> 22); x159 = (x5 + (uint32_t)x158); x160 = (x4 + x159); x161 = (x3 + x160); x162 = (x161 & UINT32_C(0x3fffff)); x163 = (uint8_t)(x161 >> 22); x164 = (x2 + (uint32_t)x163); x165 = (x1 + x164); out1[0] = x67; out1[1] = x72; out1[2] = x77; out1[3] = x82; out1[4] = x85; out1[5] = x88; out1[6] = x93; out1[7] = x98; out1[8] = x103; out1[9] = x107; out1[10] = x112; out1[11] = x117; out1[12] = x122; out1[13] = x125; out1[14] = x128; out1[15] = x133; out1[16] = x138; out1[17] = x143; out1[18] = x147; out1[19] = x152; out1[20] = x157; out1[21] = x162; out1[22] = x165; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_tc26_gost_3410_2012_512_paramSetA/fe_inv.op3 * custom repunit addition chain */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t102, t12, t198, t2, t200, t24, t3, t400, t48, t502, t6, t96; fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t2, acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t3, acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t3); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t6, acc, t3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t6); for (i = 0; i < 5; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t12, acc, t6); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t12); for (i = 0; i < 11; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t24, acc, t12); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t24); for (i = 0; i < 23; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t48, acc, t24); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t48); for (i = 0; i < 47; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t96, acc, t48); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t96); for (i = 0; i < 5; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t102, acc, t6); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t102); for (i = 0; i < 95; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t198, acc, t96); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t198); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t200, acc, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t200); for (i = 0; i < 199; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t400, acc, t200); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t400); for (i = 0; i < 101; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t502, acc, t102); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, t502); for (i = 0; i < 3; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(acc, acc, t3); for (i = 0; i < 4; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(output, acc, t1); } /* curve coefficient constants */ static const limb_t const_one[23] = { UINT32_C(0x00000001), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000)}; static const limb_t const_b[23] = { UINT32_C(0x0071C760), UINT32_C(0x0020F0B4), UINT32_C(0x000A818C), UINT32_C(0x007DC8EC), UINT32_C(0x003E753A), UINT32_C(0x001D862E), UINT32_C(0x00036A43), UINT32_C(0x00457401), UINT32_C(0x002C2996), UINT32_C(0x00398693), UINT32_C(0x00396121), UINT32_C(0x00132F71), UINT32_C(0x000FD0B6), UINT32_C(0x002F4207), UINT32_C(0x0030E879), UINT32_C(0x0051D872), UINT32_C(0x0025C12B), UINT32_C(0x003E3B46), UINT32_C(0x0015B333), UINT32_C(0x00037A16), UINT32_C(0x00321B77), UINT32_C(0x0005DEDF), UINT32_C(0x003A3094)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[11][16] = { { {{UINT32_C(0x00000003), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000)}, {UINT32_C(0x0015F2A4), UINT32_C(0x001396A4), UINT32_C(0x00044D2C), UINT32_C(0x0046BEB7), UINT32_C(0x003F97F0), UINT32_C(0x00298028), UINT32_C(0x0038E907), UINT32_C(0x005E6A50), UINT32_C(0x001D27AE), UINT32_C(0x0027E81B), UINT32_C(0x002C4D7C), UINT32_C(0x00490EF8), UINT32_C(0x001CBEFA), UINT32_C(0x0020193F), UINT32_C(0x002BC177), UINT32_C(0x004EB3C6), UINT32_C(0x0032F0E4), UINT32_C(0x000A1CD9), UINT32_C(0x000B712A), UINT32_C(0x004C3710), UINT32_C(0x000DAB8E), UINT32_C(0x003E87A8), UINT32_C(0x001D40F3)}}, {{UINT32_C(0x004B87C3), UINT32_C(0x0028D0F9), UINT32_C(0x0020B709), UINT32_C(0x000A89D0), UINT32_C(0x0033EE84), UINT32_C(0x003AEC55), UINT32_C(0x000C2241), UINT32_C(0x0032F57B), UINT32_C(0x002BAEC9), UINT32_C(0x002696E9), UINT32_C(0x00250816), UINT32_C(0x005D2A1E), UINT32_C(0x001F488F), UINT32_C(0x0010A475), UINT32_C(0x0028A117), UINT32_C(0x00302585), UINT32_C(0x002D8AB6), UINT32_C(0x002CFF09), UINT32_C(0x002EDAD2), UINT32_C(0x006A726B), UINT32_C(0x002899FA), UINT32_C(0x002B2712), UINT32_C(0x00287FC6)}, {UINT32_C(0x000D90D6), UINT32_C(0x002FD8A3), UINT32_C(0x003892E6), UINT32_C(0x0049F6D8), UINT32_C(0x001BDC46), UINT32_C(0x0014C636), UINT32_C(0x002531B7), UINT32_C(0x007AC2FE), UINT32_C(0x002DDD59), UINT32_C(0x0033E260), UINT32_C(0x00275EFC), UINT32_C(0x0075988E), UINT32_C(0x003333F7), UINT32_C(0x0020678F), UINT32_C(0x000FBFA3), UINT32_C(0x00235FE1), UINT32_C(0x0020F1D2), UINT32_C(0x00373098), UINT32_C(0x000C4DDA), UINT32_C(0x00606E9E), UINT32_C(0x00118DFC), UINT32_C(0x000417EC), UINT32_C(0x000F2D71)}}, {{UINT32_C(0x007F1E5F), UINT32_C(0x001419C8), UINT32_C(0x002CF1D7), UINT32_C(0x000E5B8F), UINT32_C(0x00025B6A), UINT32_C(0x00099E5B), UINT32_C(0x001804DC), UINT32_C(0x002F7572), UINT32_C(0x002A640E), UINT32_C(0x000FB103), UINT32_C(0x00291840), UINT32_C(0x007FD916), UINT32_C(0x0005B8C9), UINT32_C(0x00131C59), UINT32_C(0x0031C148), UINT32_C(0x002BF81B), UINT32_C(0x00139B07), UINT32_C(0x002FF2FF), UINT32_C(0x00049C2D), UINT32_C(0x0011BB6C), UINT32_C(0x002B0A64), UINT32_C(0x001D12B8), UINT32_C(0x0015A2A0)}, {UINT32_C(0x0006CBC6), UINT32_C(0x0027724E), UINT32_C(0x00302B5D), UINT32_C(0x001BC2F1), UINT32_C(0x003F55C0), UINT32_C(0x003AA25F), UINT32_C(0x00232F00), UINT32_C(0x0074A629), UINT32_C(0x00037B4E), UINT32_C(0x0024E8BE), UINT32_C(0x002A188A), UINT32_C(0x002CB205), UINT32_C(0x0003ED36), UINT32_C(0x001C4269), UINT32_C(0x002BD5C1), UINT32_C(0x0026AD6C), UINT32_C(0x001235FE), UINT32_C(0x001CF2C0), UINT32_C(0x0024E745), UINT32_C(0x0068766F), UINT32_C(0x002BE51F), UINT32_C(0x001B57A0), UINT32_C(0x001E35B3)}}, {{UINT32_C(0x005256E0), UINT32_C(0x003F836F), UINT32_C(0x00373455), UINT32_C(0x0075BA3A), UINT32_C(0x002108B7), UINT32_C(0x001C82BE), UINT32_C(0x00267DD8), UINT32_C(0x004ECEBF), UINT32_C(0x002F62E6), UINT32_C(0x000A8F9E), UINT32_C(0x000CDAFA), UINT32_C(0x0043A073), UINT32_C(0x00313659), UINT32_C(0x00154A30), UINT32_C(0x0016402E), UINT32_C(0x001175DB), UINT32_C(0x000E2798), UINT32_C(0x001F5060), UINT32_C(0x0033E5EC), UINT32_C(0x001D0B54), UINT32_C(0x001ADD71), UINT32_C(0x0023DAD9), UINT32_C(0x001E1CA5)}, {UINT32_C(0x00755E5A), UINT32_C(0x00183470), UINT32_C(0x0023F0D4), UINT32_C(0x00313928), UINT32_C(0x002DD729), UINT32_C(0x001D3E91), UINT32_C(0x0035AE71), UINT32_C(0x005318A6), UINT32_C(0x002F3EDB), UINT32_C(0x00289630), UINT32_C(0x0038D891), UINT32_C(0x007CF062), UINT32_C(0x0038EE6A), UINT32_C(0x0013AFF2), UINT32_C(0x002E68F8), UINT32_C(0x0064FAA0), UINT32_C(0x003BF0E8), UINT32_C(0x000AA0E7), UINT32_C(0x0002840F), UINT32_C(0x003DE33E), UINT32_C(0x0022D493), UINT32_C(0x003F570B), UINT32_C(0x002197B3)}}, {{UINT32_C(0x003642A2), UINT32_C(0x00299DCA), UINT32_C(0x003D77E1), UINT32_C(0x00489D30), UINT32_C(0x0027522E), UINT32_C(0x00240D64), UINT32_C(0x002F9F74), UINT32_C(0x0019C938), UINT32_C(0x00296297), UINT32_C(0x001E1814), UINT32_C(0x0004E1B7), UINT32_C(0x0023D69C), UINT32_C(0x0003213C), UINT32_C(0x0004FF86), UINT32_C(0x001C3786), UINT32_C(0x00304EA3), UINT32_C(0x0014189F), UINT32_C(0x0006EA0F), UINT32_C(0x00069315), UINT32_C(0x0011E349), UINT32_C(0x00397B6C), UINT32_C(0x0000F3CD), UINT32_C(0x002183EC)}, {UINT32_C(0x002E3C8E), UINT32_C(0x00250F3A), UINT32_C(0x003F23C0), UINT32_C(0x000E6089), UINT32_C(0x001AA647), UINT32_C(0x001449A0), UINT32_C(0x001EE430), UINT32_C(0x006EFFDC), UINT32_C(0x002D388D), UINT32_C(0x0019E36B), UINT32_C(0x001D016D), UINT32_C(0x000829C5), UINT32_C(0x00391C21), UINT32_C(0x00271FC6), UINT32_C(0x002F3A60), UINT32_C(0x0019B88F), UINT32_C(0x001CF454), UINT32_C(0x002B6D5C), UINT32_C(0x001DAE4B), UINT32_C(0x0014A040), UINT32_C(0x002920C3), UINT32_C(0x0017BC1F), UINT32_C(0x0019D5E3)}}, {{UINT32_C(0x00135C5B), UINT32_C(0x001DC3CE), UINT32_C(0x0004C781), UINT32_C(0x00080E30), UINT32_C(0x0009851D), UINT32_C(0x00350569), UINT32_C(0x002E8442), UINT32_C(0x001051D8), UINT32_C(0x0004FD70), UINT32_C(0x00134424), UINT32_C(0x000F2B29), UINT32_C(0x00685F52), UINT32_C(0x002DDECE), UINT32_C(0x00008902), UINT32_C(0x002F4764), UINT32_C(0x000E5C3D), UINT32_C(0x0032A0B9), UINT32_C(0x001A6033), UINT32_C(0x0012A3E6), UINT32_C(0x006BF5EC), UINT32_C(0x003D93F8), UINT32_C(0x00360B6E), UINT32_C(0x0018B3FC)}, {UINT32_C(0x004ECF79), UINT32_C(0x0000B2AA), UINT32_C(0x003FB9C2), UINT32_C(0x0078CE6D), UINT32_C(0x001215D4), UINT32_C(0x0038E3DD), UINT32_C(0x000C3346), UINT32_C(0x004C9060), UINT32_C(0x003D3143), UINT32_C(0x00243B10), UINT32_C(0x00259423), UINT32_C(0x006A2B73), UINT32_C(0x0028505D), UINT32_C(0x000AE48C), UINT32_C(0x0000C6EE), UINT32_C(0x00572490), UINT32_C(0x0027D956), UINT32_C(0x0014406A), UINT32_C(0x0033BE99), UINT32_C(0x0018C2FA), UINT32_C(0x002F3AF0), UINT32_C(0x001405C5), UINT32_C(0x00064B19)}}, {{UINT32_C(0x001F2EBD), UINT32_C(0x000510C7), UINT32_C(0x0019AE41), UINT32_C(0x007CB53E), UINT32_C(0x003AB38E), UINT32_C(0x003266F9), UINT32_C(0x00208EB6), UINT32_C(0x006D10F3), UINT32_C(0x001D6C3A), UINT32_C(0x002D7D80), UINT32_C(0x000B3C9D), UINT32_C(0x0048BDA2), UINT32_C(0x0014CC2E), UINT32_C(0x00156682), UINT32_C(0x000BAEBC), UINT32_C(0x0032A9C9), UINT32_C(0x001FD4D5), UINT32_C(0x00323040), UINT32_C(0x00282E72), UINT32_C(0x003CE90A), UINT32_C(0x0007C3A6), UINT32_C(0x0004F672), UINT32_C(0x0019034A)}, {UINT32_C(0x004DEA72), UINT32_C(0x00355CF9), UINT32_C(0x002BBD82), UINT32_C(0x004625D7), UINT32_C(0x0035A89F), UINT32_C(0x002CE049), UINT32_C(0x001D8906), UINT32_C(0x0000050C), UINT32_C(0x00357091), UINT32_C(0x001D1A1C), UINT32_C(0x001A15E2), UINT32_C(0x002C9AA7), UINT32_C(0x001B1721), UINT32_C(0x003B7772), UINT32_C(0x003075BA), UINT32_C(0x003ACE9C), UINT32_C(0x0018B5B9), UINT32_C(0x001483A0), UINT32_C(0x002B8443), UINT32_C(0x000D0833), UINT32_C(0x0011414E), UINT32_C(0x00377005), UINT32_C(0x001FE0BC)}}, {{UINT32_C(0x00614D45), UINT32_C(0x000FACE1), UINT32_C(0x002E03FD), UINT32_C(0x00104582), UINT32_C(0x0027B6D8), UINT32_C(0x002E45CA), UINT32_C(0x003DC391), UINT32_C(0x000278F0), UINT32_C(0x00150F86), UINT32_C(0x002EDE47), UINT32_C(0x0025399C), UINT32_C(0x004DCCC4), UINT32_C(0x00186E7C), UINT32_C(0x000987AE), UINT32_C(0x00082ECC), UINT32_C(0x007B6EE3), UINT32_C(0x00097785), UINT32_C(0x003E0986), UINT32_C(0x001C91ED), UINT32_C(0x0061A3C8), UINT32_C(0x00291652), UINT32_C(0x00089F6C), UINT32_C(0x000C0F4E)}, {UINT32_C(0x00341422), UINT32_C(0x0016F7F9), UINT32_C(0x002A2213), UINT32_C(0x000CC4C8), UINT32_C(0x002A5108), UINT32_C(0x0014C3FF), UINT32_C(0x002A84FF), UINT32_C(0x007C98C9), UINT32_C(0x001C8206), UINT32_C(0x0031B7CB), UINT32_C(0x0037BB04), UINT32_C(0x003E3334), UINT32_C(0x0029AEB3), UINT32_C(0x003E65DA), UINT32_C(0x0020EE26), UINT32_C(0x00779AF6), UINT32_C(0x00288AFE), UINT32_C(0x000D4B8D), UINT32_C(0x001DB51B), UINT32_C(0x003BF6A3), UINT32_C(0x00381A92), UINT32_C(0x0011D531), UINT32_C(0x00247F4E)}}, {{UINT32_C(0x00709AE6), UINT32_C(0x00252549), UINT32_C(0x0007EE34), UINT32_C(0x005D8045), UINT32_C(0x0038367B), UINT32_C(0x0035CCF0), UINT32_C(0x0005CD45), UINT32_C(0x0072DFB7), UINT32_C(0x00059B58), UINT32_C(0x002BB6E5), UINT32_C(0x003546BA), UINT32_C(0x001567C4), UINT32_C(0x003C5F98), UINT32_C(0x002503E9), UINT32_C(0x003AB5A8), UINT32_C(0x002858EB), UINT32_C(0x001535BC), UINT32_C(0x002DC366), UINT32_C(0x0034ED0D), UINT32_C(0x00277DED), UINT32_C(0x00016E7E), UINT32_C(0x001A35D9), UINT32_C(0x00234EA3)}, {UINT32_C(0x0003CF55), UINT32_C(0x0026EE0D), UINT32_C(0x0025529F), UINT32_C(0x0031335F), UINT32_C(0x00305D60), UINT32_C(0x00148F61), UINT32_C(0x00343772), UINT32_C(0x004BD619), UINT32_C(0x0012E0C0), UINT32_C(0x0013EA6E), UINT32_C(0x001A3BC0), UINT32_C(0x0069B10D), UINT32_C(0x002CCEED), UINT32_C(0x002B62B5), UINT32_C(0x003456E2), UINT32_C(0x0005151D), UINT32_C(0x00374FB6), UINT32_C(0x000F4CCC), UINT32_C(0x001978D4), UINT32_C(0x003FA7E6), UINT32_C(0x00266D24), UINT32_C(0x00248D2B), UINT32_C(0x00161AD6)}}, {{UINT32_C(0x0032C9A3), UINT32_C(0x002C7C77), UINT32_C(0x000E3F02), UINT32_C(0x003E504E), UINT32_C(0x001351CC), UINT32_C(0x00177427), UINT32_C(0x0020C8E9), UINT32_C(0x0019A4C7), UINT32_C(0x000B0C5D), UINT32_C(0x001F549F), UINT32_C(0x003B0C1B), UINT32_C(0x0021F5DE), UINT32_C(0x000075B2), UINT32_C(0x0036927D), UINT32_C(0x00185855), UINT32_C(0x004BD125), UINT32_C(0x0014BBC7), UINT32_C(0x001C0CC6), UINT32_C(0x0022540C), UINT32_C(0x00552107), UINT32_C(0x002283DD), UINT32_C(0x0006BA78), UINT32_C(0x0013823D)}, {UINT32_C(0x001F97DE), UINT32_C(0x0028B5D5), UINT32_C(0x0030F546), UINT32_C(0x0001A0B0), UINT32_C(0x0010CC6D), UINT32_C(0x001610C3), UINT32_C(0x00245BEB), UINT32_C(0x003016D1), UINT32_C(0x001B8316), UINT32_C(0x0016BA74), UINT32_C(0x002C99F7), UINT32_C(0x001CC511), UINT32_C(0x0017550A), UINT32_C(0x0002060A), UINT32_C(0x00256CB7), UINT32_C(0x0040BF9E), UINT32_C(0x0016677B), UINT32_C(0x0007D673), UINT32_C(0x00182B4F), UINT32_C(0x002E8ADB), UINT32_C(0x001CBED4), UINT32_C(0x002D048B), UINT32_C(0x000C037A)}}, {{UINT32_C(0x005B2170), UINT32_C(0x002A20E5), UINT32_C(0x003A2CC9), UINT32_C(0x002D459D), UINT32_C(0x001DECC6), UINT32_C(0x0031C1FE), UINT32_C(0x000CE89C), UINT32_C(0x0028CB4A), UINT32_C(0x00228929), UINT32_C(0x000C455B), UINT32_C(0x00288443), UINT32_C(0x0019205F), UINT32_C(0x0023421A), UINT32_C(0x00352E01), UINT32_C(0x001E5137), UINT32_C(0x0074C0C9), UINT32_C(0x0003A0D7), UINT32_C(0x003A7F32), UINT32_C(0x002BDAAB), UINT32_C(0x0038CE1E), UINT32_C(0x000991A9), UINT32_C(0x0031AAF9), UINT32_C(0x0036FF6B)}, {UINT32_C(0x006C89E0), UINT32_C(0x00256380), UINT32_C(0x001F7866), UINT32_C(0x000F7CD3), UINT32_C(0x001E0162), UINT32_C(0x001A7772), UINT32_C(0x000474B0), UINT32_C(0x001B3366), UINT32_C(0x0024C27D), UINT32_C(0x0033397C), UINT32_C(0x002DDFF7), UINT32_C(0x0003D06F), UINT32_C(0x003CE689), UINT32_C(0x00087AFA), UINT32_C(0x00135BED), UINT32_C(0x001E1302), UINT32_C(0x003FD153), UINT32_C(0x003F3F3D), UINT32_C(0x0005DB43), UINT32_C(0x006193C9), UINT32_C(0x00174036), UINT32_C(0x00258D52), UINT32_C(0x00046F1F)}}, {{UINT32_C(0x0049FC14), UINT32_C(0x00007614), UINT32_C(0x001F7037), UINT32_C(0x00592750), UINT32_C(0x00290B61), UINT32_C(0x000960A8), UINT32_C(0x00194FF1), UINT32_C(0x00139CAC), UINT32_C(0x003E0952), UINT32_C(0x00270EC5), UINT32_C(0x00088B6C), UINT32_C(0x004C78F1), UINT32_C(0x001D53F4), UINT32_C(0x003170C1), UINT32_C(0x001BD840), UINT32_C(0x00705662), UINT32_C(0x0020DE92), UINT32_C(0x00128651), UINT32_C(0x003E0D7F), UINT32_C(0x007F2363), UINT32_C(0x00029F44), UINT32_C(0x001B5FCC), UINT32_C(0x0012DCB6)}, {UINT32_C(0x00715C01), UINT32_C(0x003BA447), UINT32_C(0x0014B2CF), UINT32_C(0x000D0598), UINT32_C(0x0021BD5E), UINT32_C(0x003B2771), UINT32_C(0x001C4456), UINT32_C(0x000B7702), UINT32_C(0x0034AD46), UINT32_C(0x0020B4D4), UINT32_C(0x0034C10F), UINT32_C(0x00211BEE), UINT32_C(0x00229380), UINT32_C(0x000F7D2E), UINT32_C(0x001DCFEE), UINT32_C(0x00667394), UINT32_C(0x00181E9B), UINT32_C(0x000423C4), UINT32_C(0x001ECE77), UINT32_C(0x00170479), UINT32_C(0x0032353F), UINT32_C(0x00164DF6), UINT32_C(0x0016F1DE)}}, {{UINT32_C(0x0075C5F8), UINT32_C(0x000385BF), UINT32_C(0x0031DD89), UINT32_C(0x006E52CD), UINT32_C(0x0007AB18), UINT32_C(0x001DB7D7), UINT32_C(0x00181DB9), UINT32_C(0x003116D9), UINT32_C(0x002F42C8), UINT32_C(0x001008A8), UINT32_C(0x000955A8), UINT32_C(0x0016157F), UINT32_C(0x00366962), UINT32_C(0x00374B18), UINT32_C(0x003DA6A4), UINT32_C(0x004DD8AE), UINT32_C(0x00303056), UINT32_C(0x000814A3), UINT32_C(0x001FD98E), UINT32_C(0x0054633B), UINT32_C(0x00196306), UINT32_C(0x0036BE52), UINT32_C(0x001CFF52)}, {UINT32_C(0x006F6BD4), UINT32_C(0x00363198), UINT32_C(0x0027A4A2), UINT32_C(0x002E0CC3), UINT32_C(0x003815C9), UINT32_C(0x003F3192), UINT32_C(0x0037B67C), UINT32_C(0x0030F20C), UINT32_C(0x002A1B35), UINT32_C(0x0016C2B1), UINT32_C(0x0010040B), UINT32_C(0x006D50BA), UINT32_C(0x0015627B), UINT32_C(0x00236233), UINT32_C(0x002BD95D), UINT32_C(0x0068647C), UINT32_C(0x003DB8B8), UINT32_C(0x00090EB1), UINT32_C(0x001829ED), UINT32_C(0x003AA621), UINT32_C(0x00281854), UINT32_C(0x000579E2), UINT32_C(0x0027CDA0)}}, {{UINT32_C(0x0056E4C3), UINT32_C(0x000E21FF), UINT32_C(0x0024F3B1), UINT32_C(0x002D126D), UINT32_C(0x00125D7C), UINT32_C(0x0011EF67), UINT32_C(0x000BD798), UINT32_C(0x00018629), UINT32_C(0x001299FE), UINT32_C(0x0016DCCD), UINT32_C(0x001DB60A), UINT32_C(0x002AB062), UINT32_C(0x003E7DDD), UINT32_C(0x002F1BF6), UINT32_C(0x000F1421), UINT32_C(0x007DDEFC), UINT32_C(0x0022F932), UINT32_C(0x00327FBB), UINT32_C(0x001E3684), UINT32_C(0x000F04E8), UINT32_C(0x0028B9F5), UINT32_C(0x0000AC17), UINT32_C(0x001B586E)}, {UINT32_C(0x0029C581), UINT32_C(0x001F0CDD), UINT32_C(0x000C57C8), UINT32_C(0x005909C4), UINT32_C(0x003A26ED), UINT32_C(0x0032886A), UINT32_C(0x0002D003), UINT32_C(0x0047BC86), UINT32_C(0x0004B488), UINT32_C(0x0028EAC9), UINT32_C(0x00007E5F), UINT32_C(0x002AFB2F), UINT32_C(0x0029FDA2), UINT32_C(0x00161194), UINT32_C(0x0003E7BC), UINT32_C(0x000F8369), UINT32_C(0x000E94CC), UINT32_C(0x0037E9AD), UINT32_C(0x0007994D), UINT32_C(0x00620DA2), UINT32_C(0x001C54F1), UINT32_C(0x0003054F), UINT32_C(0x000F164E)}}, {{UINT32_C(0x00485A6F), UINT32_C(0x0004577D), UINT32_C(0x003E3EB4), UINT32_C(0x006C4E40), UINT32_C(0x00032DFF), UINT32_C(0x0036D9C3), UINT32_C(0x003133C3), UINT32_C(0x003BD1C9), UINT32_C(0x002755D5), UINT32_C(0x00118134), UINT32_C(0x001160F0), UINT32_C(0x00059163), UINT32_C(0x003EB8FC), UINT32_C(0x00056FC9), UINT32_C(0x0028AED8), UINT32_C(0x003179B5), UINT32_C(0x003FBF05), UINT32_C(0x00011E59), UINT32_C(0x00011744), UINT32_C(0x003470B0), UINT32_C(0x00135BDE), UINT32_C(0x00158952), UINT32_C(0x0000E6DB)}, {UINT32_C(0x00532F1F), UINT32_C(0x003906A8), UINT32_C(0x002A32FC), UINT32_C(0x00227E49), UINT32_C(0x00058EDF), UINT32_C(0x003D7DB2), UINT32_C(0x0023DC29), UINT32_C(0x0070553D), UINT32_C(0x0004329B), UINT32_C(0x003549B6), UINT32_C(0x003EC868), UINT32_C(0x000D7C98), UINT32_C(0x00368C50), UINT32_C(0x000F57E5), UINT32_C(0x00126458), UINT32_C(0x004D62F6), UINT32_C(0x0031CEF3), UINT32_C(0x00204DE0), UINT32_C(0x00072E81), UINT32_C(0x007DA6C8), UINT32_C(0x003D4C1E), UINT32_C(0x003FAAA5), UINT32_C(0x0018B7EB)}}, {{UINT32_C(0x005B2BEF), UINT32_C(0x002EEA64), UINT32_C(0x0035ADEF), UINT32_C(0x00037B6A), UINT32_C(0x003D7F26), UINT32_C(0x003F7AE8), UINT32_C(0x0016082B), UINT32_C(0x004D0845), UINT32_C(0x003213FD), UINT32_C(0x002B907C), UINT32_C(0x0009D773), UINT32_C(0x0032EB9F), UINT32_C(0x000B9447), UINT32_C(0x000FF14B), UINT32_C(0x002CC862), UINT32_C(0x000EE902), UINT32_C(0x001A1E93), UINT32_C(0x003B5022), UINT32_C(0x0007EC85), UINT32_C(0x00773A1A), UINT32_C(0x001E3782), UINT32_C(0x001F2F23), UINT32_C(0x00371A25)}, {UINT32_C(0x00500C90), UINT32_C(0x00012947), UINT32_C(0x00276B35), UINT32_C(0x00055EB4), UINT32_C(0x000B22A3), UINT32_C(0x001C3032), UINT32_C(0x0034B27D), UINT32_C(0x0058FC68), UINT32_C(0x001DB835), UINT32_C(0x0000E22D), UINT32_C(0x0026AF65), UINT32_C(0x005F11AC), UINT32_C(0x002AB077), UINT32_C(0x0016A2BF), UINT32_C(0x002DE969), UINT32_C(0x0014F0F9), UINT32_C(0x00142DA0), UINT32_C(0x00197B6C), UINT32_C(0x00098CD4), UINT32_C(0x0076AB0A), UINT32_C(0x003EDF05), UINT32_C(0x00165EF4), UINT32_C(0x002E8B63)}}, }, { {{UINT32_C(0x0043FF72), UINT32_C(0x00371016), UINT32_C(0x00088C3D), UINT32_C(0x003D3831), UINT32_C(0x0029E105), UINT32_C(0x000874C9), UINT32_C(0x0028AD35), UINT32_C(0x0050A745), UINT32_C(0x00129E17), UINT32_C(0x0006826F), UINT32_C(0x0003A7E7), UINT32_C(0x005A9957), UINT32_C(0x003F5A11), UINT32_C(0x001E0D75), UINT32_C(0x00132E4A), UINT32_C(0x001CACF1), UINT32_C(0x00106741), UINT32_C(0x0035B4A8), UINT32_C(0x0038B784), UINT32_C(0x007346F0), UINT32_C(0x003DB373), UINT32_C(0x001CED8B), UINT32_C(0x003B3CAB)}, {UINT32_C(0x0005ACA1), UINT32_C(0x0003F976), UINT32_C(0x000C0B13), UINT32_C(0x007066AA), UINT32_C(0x0037D80F), UINT32_C(0x00150B30), UINT32_C(0x0022F326), UINT32_C(0x0034AEAA), UINT32_C(0x0008FECE), UINT32_C(0x0038E83F), UINT32_C(0x003A6384), UINT32_C(0x0015A868), UINT32_C(0x000D1591), UINT32_C(0x00111853), UINT32_C(0x0007CCDC), UINT32_C(0x00088671), UINT32_C(0x000325D9), UINT32_C(0x0030192A), UINT32_C(0x0001A7CA), UINT32_C(0x00363760), UINT32_C(0x001F97E8), UINT32_C(0x002C79F3), UINT32_C(0x001B4F8F)}}, {{UINT32_C(0x006A80D4), UINT32_C(0x0039A871), UINT32_C(0x001DED13), UINT32_C(0x003F5D25), UINT32_C(0x0009BD11), UINT32_C(0x0015E36E), UINT32_C(0x000EE574), UINT32_C(0x006F2527), UINT32_C(0x0004BD44), UINT32_C(0x003A9039), UINT32_C(0x00158327), UINT32_C(0x0007B459), UINT32_C(0x002C3FC0), UINT32_C(0x002902E4), UINT32_C(0x002368B3), UINT32_C(0x0054306B), UINT32_C(0x002E6771), UINT32_C(0x0000025A), UINT32_C(0x00359E84), UINT32_C(0x00753A6D), UINT32_C(0x001F1043), UINT32_C(0x00198B2D), UINT32_C(0x001D7912)}, {UINT32_C(0x007E5CCB), UINT32_C(0x000738A9), UINT32_C(0x00164BE0), UINT32_C(0x001D6B62), UINT32_C(0x000EF92E), UINT32_C(0x00280CB8), UINT32_C(0x0037C2AD), UINT32_C(0x00569D4A), UINT32_C(0x00279D0C), UINT32_C(0x002F59F7), UINT32_C(0x003DAC74), UINT32_C(0x0042978C), UINT32_C(0x0010DA80), UINT32_C(0x00217A9D), UINT32_C(0x00336498), UINT32_C(0x00239BFB), UINT32_C(0x00367CF4), UINT32_C(0x00002665), UINT32_C(0x0012FC23), UINT32_C(0x006B55F4), UINT32_C(0x0008389E), UINT32_C(0x0010C55C), UINT32_C(0x003917A5)}}, {{UINT32_C(0x000B001B), UINT32_C(0x0036253F), UINT32_C(0x00364099), UINT32_C(0x00403910), UINT32_C(0x002FD274), UINT32_C(0x00240152), UINT32_C(0x002222A5), UINT32_C(0x00038A33), UINT32_C(0x0015B0C3), UINT32_C(0x001BA804), UINT32_C(0x000B91C9), UINT32_C(0x001E1D50), UINT32_C(0x002C6A3F), UINT32_C(0x0002DA6D), UINT32_C(0x0031CDE7), UINT32_C(0x005F8ABA), UINT32_C(0x0032F16C), UINT32_C(0x0005F59E), UINT32_C(0x0027FB7F), UINT32_C(0x003F4395), UINT32_C(0x0005567B), UINT32_C(0x00037388), UINT32_C(0x0031BC7C)}, {UINT32_C(0x0021EB64), UINT32_C(0x000F56D8), UINT32_C(0x00063940), UINT32_C(0x007222D6), UINT32_C(0x002072C6), UINT32_C(0x002E61E2), UINT32_C(0x0016F379), UINT32_C(0x0027EADF), UINT32_C(0x003A6BD2), UINT32_C(0x002F0B3A), UINT32_C(0x002FFAE6), UINT32_C(0x007DBBB0), UINT32_C(0x00003399), UINT32_C(0x0015CF91), UINT32_C(0x00284363), UINT32_C(0x003DC09B), UINT32_C(0x00305937), UINT32_C(0x001A75E2), UINT32_C(0x0028D44C), UINT32_C(0x0052188E), UINT32_C(0x003F5117), UINT32_C(0x002A7B19), UINT32_C(0x000F38A9)}}, {{UINT32_C(0x0068B2E0), UINT32_C(0x0017FFC5), UINT32_C(0x0027AFC3), UINT32_C(0x000A45A1), UINT32_C(0x001227B7), UINT32_C(0x000976FE), UINT32_C(0x003CC399), UINT32_C(0x00111C12), UINT32_C(0x0021CDEC), UINT32_C(0x000290FA), UINT32_C(0x000E0DC4), UINT32_C(0x004B8791), UINT32_C(0x003123B8), UINT32_C(0x00257E85), UINT32_C(0x0031095C), UINT32_C(0x00009042), UINT32_C(0x002E0671), UINT32_C(0x002EDE50), UINT32_C(0x002522AF), UINT32_C(0x002113DA), UINT32_C(0x002136C8), UINT32_C(0x003A4426), UINT32_C(0x00375E38)}, {UINT32_C(0x004B72D7), UINT32_C(0x00317636), UINT32_C(0x002C6B14), UINT32_C(0x0023C200), UINT32_C(0x00229CA0), UINT32_C(0x0018AB4E), UINT32_C(0x0038DE7C), UINT32_C(0x0071C6F7), UINT32_C(0x0006D850), UINT32_C(0x0007F5A9), UINT32_C(0x001ADEAD), UINT32_C(0x00171F68), UINT32_C(0x0018927F), UINT32_C(0x001A4C5E), UINT32_C(0x0000DDCC), UINT32_C(0x0038263E), UINT32_C(0x003C1F7F), UINT32_C(0x001B3C9A), UINT32_C(0x003488F3), UINT32_C(0x0023C421), UINT32_C(0x002F2417), UINT32_C(0x00068EDA), UINT32_C(0x00073EC6)}}, {{UINT32_C(0x00740829), UINT32_C(0x003BBE8D), UINT32_C(0x00073E98), UINT32_C(0x00356FAD), UINT32_C(0x003B7DDB), UINT32_C(0x002DC94B), UINT32_C(0x0030C9A3), UINT32_C(0x001B8A3C), UINT32_C(0x0023BCCD), UINT32_C(0x0003F076), UINT32_C(0x003A8A39), UINT32_C(0x0067C926), UINT32_C(0x00057C86), UINT32_C(0x0027A91E), UINT32_C(0x0006BFD0), UINT32_C(0x00268025), UINT32_C(0x0026C695), UINT32_C(0x0030F65C), UINT32_C(0x0007A146), UINT32_C(0x001C03BD), UINT32_C(0x001A48A6), UINT32_C(0x00327209), UINT32_C(0x00331030)}, {UINT32_C(0x004BBAF6), UINT32_C(0x0014ED13), UINT32_C(0x00201E53), UINT32_C(0x0019209B), UINT32_C(0x0018CD1E), UINT32_C(0x000DEF6D), UINT32_C(0x00038012), UINT32_C(0x0045882E), UINT32_C(0x003736AB), UINT32_C(0x001E713A), UINT32_C(0x002C4DFB), UINT32_C(0x003F0EEF), UINT32_C(0x002CFF2D), UINT32_C(0x003250F5), UINT32_C(0x00078ABA), UINT32_C(0x00678753), UINT32_C(0x00056E90), UINT32_C(0x00198BB5), UINT32_C(0x003CE0AD), UINT32_C(0x007FA3C4), UINT32_C(0x00393AC2), UINT32_C(0x00207404), UINT32_C(0x001C83C6)}}, {{UINT32_C(0x0006EF83), UINT32_C(0x0015F1B3), UINT32_C(0x0012AA0F), UINT32_C(0x0014518C), UINT32_C(0x002839B7), UINT32_C(0x000D1D3A), UINT32_C(0x0004C1BA), UINT32_C(0x005F75C2), UINT32_C(0x000D10B9), UINT32_C(0x0013D894), UINT32_C(0x000DB952), UINT32_C(0x000B1478), UINT32_C(0x000CB9AA), UINT32_C(0x0011AD2E), UINT32_C(0x002894C3), UINT32_C(0x0011DD4E), UINT32_C(0x000303E2), UINT32_C(0x001EEC21), UINT32_C(0x001A194B), UINT32_C(0x005970C2), UINT32_C(0x00271263), UINT32_C(0x0037CD83), UINT32_C(0x0000E91B)}, {UINT32_C(0x0002F7FB), UINT32_C(0x0037D3D0), UINT32_C(0x00167E4D), UINT32_C(0x002B340E), UINT32_C(0x0029810C), UINT32_C(0x000F2744), UINT32_C(0x000500A9), UINT32_C(0x0077B334), UINT32_C(0x0033BBF3), UINT32_C(0x0035F681), UINT32_C(0x002A089F), UINT32_C(0x0005BD0A), UINT32_C(0x0034B55C), UINT32_C(0x001C94F6), UINT32_C(0x003E80FE), UINT32_C(0x0012E6AD), UINT32_C(0x002E5578), UINT32_C(0x000FCD23), UINT32_C(0x003D81BB), UINT32_C(0x000E9FC4), UINT32_C(0x002DCA2E), UINT32_C(0x00163735), UINT32_C(0x00331F02)}}, {{UINT32_C(0x006924AC), UINT32_C(0x0035ADA0), UINT32_C(0x001100A8), UINT32_C(0x00267DEA), UINT32_C(0x00271C3D), UINT32_C(0x0028011C), UINT32_C(0x0033F146), UINT32_C(0x00380BD9), UINT32_C(0x001E9B99), UINT32_C(0x0038A9B3), UINT32_C(0x0023055C), UINT32_C(0x00402C40), UINT32_C(0x000E057B), UINT32_C(0x002F5047), UINT32_C(0x0030ABB8), UINT32_C(0x00177283), UINT32_C(0x00151E5A), UINT32_C(0x0026A491), UINT32_C(0x00346A9D), UINT32_C(0x006A2686), UINT32_C(0x0010AE09), UINT32_C(0x0031479F), UINT32_C(0x003F9361)}, {UINT32_C(0x0022A729), UINT32_C(0x001A0AB6), UINT32_C(0x003A1834), UINT32_C(0x004ADEAE), UINT32_C(0x0025C51B), UINT32_C(0x00380B76), UINT32_C(0x00109BCA), UINT32_C(0x00326C1B), UINT32_C(0x002680D8), UINT32_C(0x003F48F6), UINT32_C(0x000DCE07), UINT32_C(0x000D0CDC), UINT32_C(0x0024513C), UINT32_C(0x001AAF42), UINT32_C(0x000F88A1), UINT32_C(0x007680CC), UINT32_C(0x00032E52), UINT32_C(0x00028B7A), UINT32_C(0x0028F444), UINT32_C(0x0013B5EA), UINT32_C(0x000BE2FE), UINT32_C(0x00382F79), UINT32_C(0x0026D469)}}, {{UINT32_C(0x002EF810), UINT32_C(0x003D7CA9), UINT32_C(0x0012A7CA), UINT32_C(0x0066ED19), UINT32_C(0x003B6782), UINT32_C(0x001A688B), UINT32_C(0x00057236), UINT32_C(0x003AB1DD), UINT32_C(0x002DCA9F), UINT32_C(0x00318D65), UINT32_C(0x002C3201), UINT32_C(0x002651F2), UINT32_C(0x0002585A), UINT32_C(0x00110B33), UINT32_C(0x002FC48F), UINT32_C(0x0027FF7F), UINT32_C(0x000C314B), UINT32_C(0x00306B0F), UINT32_C(0x002BCD62), UINT32_C(0x000E5451), UINT32_C(0x00372C81), UINT32_C(0x0008B694), UINT32_C(0x001640E1)}, {UINT32_C(0x005D5544), UINT32_C(0x00050CE4), UINT32_C(0x0017634F), UINT32_C(0x0013A04A), UINT32_C(0x00106FDB), UINT32_C(0x001DFA5D), UINT32_C(0x002B04EB), UINT32_C(0x0049FF7C), UINT32_C(0x0026E744), UINT32_C(0x003D42A5), UINT32_C(0x002B0FD6), UINT32_C(0x0076FAC0), UINT32_C(0x003ACF9E), UINT32_C(0x000B293A), UINT32_C(0x00120F10), UINT32_C(0x0056D4D7), UINT32_C(0x003229A1), UINT32_C(0x001C7884), UINT32_C(0x003CE57D), UINT32_C(0x003C86A7), UINT32_C(0x001588C1), UINT32_C(0x0000D548), UINT32_C(0x0011BB4A)}}, {{UINT32_C(0x0036250B), UINT32_C(0x00274CE1), UINT32_C(0x003F5FE8), UINT32_C(0x00112AFF), UINT32_C(0x0004D6DD), UINT32_C(0x0037A903), UINT32_C(0x00211DC3), UINT32_C(0x0030C9D5), UINT32_C(0x003F5472), UINT32_C(0x00198593), UINT32_C(0x000093E8), UINT32_C(0x001F8BFF), UINT32_C(0x0000C9FF), UINT32_C(0x003D63D2), UINT32_C(0x00003D23), UINT32_C(0x00153CAB), UINT32_C(0x003CA8E7), UINT32_C(0x000F7F9C), UINT32_C(0x0017381E), UINT32_C(0x003B2121), UINT32_C(0x0006A36E), UINT32_C(0x0020DF0D), UINT32_C(0x002DCC34)}, {UINT32_C(0x001DDE59), UINT32_C(0x00100B9E), UINT32_C(0x001387EC), UINT32_C(0x001F5F47), UINT32_C(0x0037E7AF), UINT32_C(0x00193274), UINT32_C(0x002F43DE), UINT32_C(0x0018E845), UINT32_C(0x002C7EEB), UINT32_C(0x0031E7AD), UINT32_C(0x0003754D), UINT32_C(0x00107B6F), UINT32_C(0x0006C7A7), UINT32_C(0x002EFA28), UINT32_C(0x00230679), UINT32_C(0x003BA29A), UINT32_C(0x003EB83E), UINT32_C(0x000E3477), UINT32_C(0x00312658), UINT32_C(0x006C10E6), UINT32_C(0x00372B67), UINT32_C(0x000F6596), UINT32_C(0x00380597)}}, {{UINT32_C(0x00555AFE), UINT32_C(0x000C7849), UINT32_C(0x00042F9D), UINT32_C(0x0007EDFA), UINT32_C(0x000C752B), UINT32_C(0x00137CA0), UINT32_C(0x002A9FBE), UINT32_C(0x00565768), UINT32_C(0x00015078), UINT32_C(0x0037865E), UINT32_C(0x0022585A), UINT32_C(0x005C7329), UINT32_C(0x00230050), UINT32_C(0x002EAD2B), UINT32_C(0x001FFAB6), UINT32_C(0x007012D8), UINT32_C(0x00118E18), UINT32_C(0x0031CBE8), UINT32_C(0x0034B659), UINT32_C(0x000C9258), UINT32_C(0x00123325), UINT32_C(0x001F45F2), UINT32_C(0x002B0B5E)}, {UINT32_C(0x0063E131), UINT32_C(0x002CEABB), UINT32_C(0x0003CF06), UINT32_C(0x005C2801), UINT32_C(0x0014448A), UINT32_C(0x001F4570), UINT32_C(0x001DE032), UINT32_C(0x007965E9), UINT32_C(0x001C2619), UINT32_C(0x001A84C4), UINT32_C(0x003CA51E), UINT32_C(0x005F8927), UINT32_C(0x001ED00E), UINT32_C(0x0018ABCE), UINT32_C(0x00282492), UINT32_C(0x002A4526), UINT32_C(0x001D6653), UINT32_C(0x000D9615), UINT32_C(0x0011E6F0), UINT32_C(0x00671D54), UINT32_C(0x00340830), UINT32_C(0x001EF0D7), UINT32_C(0x002FBB7B)}}, {{UINT32_C(0x00348880), UINT32_C(0x0032B440), UINT32_C(0x003867FD), UINT32_C(0x0041325C), UINT32_C(0x000CDBC2), UINT32_C(0x00065444), UINT32_C(0x0028F475), UINT32_C(0x001DA4B4), UINT32_C(0x00109841), UINT32_C(0x003B0866), UINT32_C(0x001E6A77), UINT32_C(0x005D249E), UINT32_C(0x0039C59B), UINT32_C(0x003A6F13), UINT32_C(0x0038A7E4), UINT32_C(0x005AE286), UINT32_C(0x002F9473), UINT32_C(0x00023261), UINT32_C(0x003A0DB2), UINT32_C(0x001E7F01), UINT32_C(0x0036BF40), UINT32_C(0x000E2AEC), UINT32_C(0x000C8DE1)}, {UINT32_C(0x0053791C), UINT32_C(0x0025ADBE), UINT32_C(0x001DF305), UINT32_C(0x005CB9A7), UINT32_C(0x002A8658), UINT32_C(0x00101F47), UINT32_C(0x00329A71), UINT32_C(0x006E7F78), UINT32_C(0x003CB686), UINT32_C(0x002818C0), UINT32_C(0x0013DEA8), UINT32_C(0x0001AD5E), UINT32_C(0x002F79EF), UINT32_C(0x002D66C0), UINT32_C(0x001DABD2), UINT32_C(0x00602B71), UINT32_C(0x002903C7), UINT32_C(0x00385466), UINT32_C(0x001CDB64), UINT32_C(0x0075CE9A), UINT32_C(0x002430BD), UINT32_C(0x00176946), UINT32_C(0x000E2BC5)}}, {{UINT32_C(0x007C9263), UINT32_C(0x002D6DC4), UINT32_C(0x003D3ACD), UINT32_C(0x003EBF76), UINT32_C(0x003E1EFB), UINT32_C(0x002E4716), UINT32_C(0x000F0DD6), UINT32_C(0x003B4748), UINT32_C(0x00073A35), UINT32_C(0x003EB153), UINT32_C(0x003DBAE5), UINT32_C(0x00091752), UINT32_C(0x00152A69), UINT32_C(0x003A6B6D), UINT32_C(0x00190CE0), UINT32_C(0x000C4F96), UINT32_C(0x002AEE5B), UINT32_C(0x002D6E94), UINT32_C(0x00298B92), UINT32_C(0x002FC509), UINT32_C(0x000EA268), UINT32_C(0x000701E4), UINT32_C(0x003CBD22)}, {UINT32_C(0x0068BB5F), UINT32_C(0x003E426A), UINT32_C(0x000ABA98), UINT32_C(0x0063696E), UINT32_C(0x000CA3AE), UINT32_C(0x0030D3D9), UINT32_C(0x000E9E5C), UINT32_C(0x0046B796), UINT32_C(0x00098D02), UINT32_C(0x001C097A), UINT32_C(0x00322587), UINT32_C(0x004192A0), UINT32_C(0x00117CF5), UINT32_C(0x0019B330), UINT32_C(0x001C614E), UINT32_C(0x007DC495), UINT32_C(0x0010F1B4), UINT32_C(0x00303802), UINT32_C(0x0039F211), UINT32_C(0x00330A82), UINT32_C(0x002DD8DA), UINT32_C(0x002D36F2), UINT32_C(0x00017BC2)}}, {{UINT32_C(0x0049325F), UINT32_C(0x003DB33B), UINT32_C(0x0029EBF5), UINT32_C(0x001C7997), UINT32_C(0x0033F6E9), UINT32_C(0x0030C1AD), UINT32_C(0x00361DDF), UINT32_C(0x0034088E), UINT32_C(0x002A26DB), UINT32_C(0x00050A8F), UINT32_C(0x002D5CB6), UINT32_C(0x002B3ACD), UINT32_C(0x002F102C), UINT32_C(0x001D8F3E), UINT32_C(0x0036E06F), UINT32_C(0x005F6B74), UINT32_C(0x0003DC5F), UINT32_C(0x003135D7), UINT32_C(0x0038E39F), UINT32_C(0x007B5A1E), UINT32_C(0x000355D0), UINT32_C(0x0016256E), UINT32_C(0x00091FAA)}, {UINT32_C(0x004EEA23), UINT32_C(0x002F50B1), UINT32_C(0x001CBFB6), UINT32_C(0x0077CA4A), UINT32_C(0x002E434E), UINT32_C(0x003F8B6D), UINT32_C(0x0033265D), UINT32_C(0x006DC04A), UINT32_C(0x0017B7FE), UINT32_C(0x00156470), UINT32_C(0x001C0AB3), UINT32_C(0x002B82A3), UINT32_C(0x0025ED15), UINT32_C(0x00345415), UINT32_C(0x00006AE3), UINT32_C(0x006A18D6), UINT32_C(0x000651B4), UINT32_C(0x00324AF0), UINT32_C(0x0019FD45), UINT32_C(0x00756504), UINT32_C(0x000D0EB8), UINT32_C(0x001080DF), UINT32_C(0x00117135)}}, {{UINT32_C(0x0002201B), UINT32_C(0x002573D3), UINT32_C(0x002B796D), UINT32_C(0x000F77C6), UINT32_C(0x001FA05B), UINT32_C(0x0004EA6D), UINT32_C(0x003790D1), UINT32_C(0x004517CB), UINT32_C(0x003D97B6), UINT32_C(0x0015B191), UINT32_C(0x00311E57), UINT32_C(0x0037CE58), UINT32_C(0x00151409), UINT32_C(0x000D6BCF), UINT32_C(0x000C5CA5), UINT32_C(0x0063737A), UINT32_C(0x00299B77), UINT32_C(0x000C37E1), UINT32_C(0x000F27AA), UINT32_C(0x0057C9C2), UINT32_C(0x0030EDD0), UINT32_C(0x003C12B9), UINT32_C(0x003AE308)}, {UINT32_C(0x00154AEB), UINT32_C(0x0008F6CC), UINT32_C(0x001668D8), UINT32_C(0x004663DD), UINT32_C(0x000D8D93), UINT32_C(0x001CE5F0), UINT32_C(0x0021BF83), UINT32_C(0x006BAE95), UINT32_C(0x002855B3), UINT32_C(0x00335B55), UINT32_C(0x001408AA), UINT32_C(0x0004E3E5), UINT32_C(0x0028E855), UINT32_C(0x0014E502), UINT32_C(0x0008E67D), UINT32_C(0x006EDAAA), UINT32_C(0x001D9F0F), UINT32_C(0x0009DC94), UINT32_C(0x003A18E2), UINT32_C(0x0007FA8E), UINT32_C(0x003E00BB), UINT32_C(0x002A56FF), UINT32_C(0x00038554)}}, {{UINT32_C(0x007A0037), UINT32_C(0x003D491D), UINT32_C(0x003C391C), UINT32_C(0x006294C3), UINT32_C(0x00303F10), UINT32_C(0x0026A8E1), UINT32_C(0x0028D44A), UINT32_C(0x004CD241), UINT32_C(0x001AC12E), UINT32_C(0x0032802C), UINT32_C(0x0017518C), UINT32_C(0x004B7FF7), UINT32_C(0x00184785), UINT32_C(0x000C137F), UINT32_C(0x0020C5E6), UINT32_C(0x002E88CB), UINT32_C(0x00109C0D), UINT32_C(0x003AF23C), UINT32_C(0x0037A943), UINT32_C(0x00209953), UINT32_C(0x0015B4E0), UINT32_C(0x00069845), UINT32_C(0x00093EA8)}, {UINT32_C(0x0004A991), UINT32_C(0x003F0551), UINT32_C(0x000D6C31), UINT32_C(0x006F47D6), UINT32_C(0x00007E9B), UINT32_C(0x0027E38C), UINT32_C(0x0033BB37), UINT32_C(0x0013496D), UINT32_C(0x001A3F2A), UINT32_C(0x0014FCBA), UINT32_C(0x002722F6), UINT32_C(0x005676F1), UINT32_C(0x00213E52), UINT32_C(0x003DF1C7), UINT32_C(0x00228B30), UINT32_C(0x006856C0), UINT32_C(0x0022A73D), UINT32_C(0x0000B650), UINT32_C(0x000EABEB), UINT32_C(0x00714726), UINT32_C(0x00128875), UINT32_C(0x000EB41C), UINT32_C(0x0018CA4B)}}, {{UINT32_C(0x007BD9EC), UINT32_C(0x001763E0), UINT32_C(0x003A0DDC), UINT32_C(0x00731C43), UINT32_C(0x00293989), UINT32_C(0x00347EFA), UINT32_C(0x00115B21), UINT32_C(0x003B45B4), UINT32_C(0x000DA37F), UINT32_C(0x002C87D5), UINT32_C(0x001C53C2), UINT32_C(0x007822F8), UINT32_C(0x0008496E), UINT32_C(0x003D3CB7), UINT32_C(0x0008A383), UINT32_C(0x00735A84), UINT32_C(0x000876BD), UINT32_C(0x00141FF0), UINT32_C(0x003567B3), UINT32_C(0x00785465), UINT32_C(0x0030D346), UINT32_C(0x0032C983), UINT32_C(0x0016542B)}, {UINT32_C(0x00175998), UINT32_C(0x00105962), UINT32_C(0x0027690D), UINT32_C(0x0053CEA1), UINT32_C(0x0027FE4A), UINT32_C(0x000377CE), UINT32_C(0x00029F12), UINT32_C(0x00791342), UINT32_C(0x001CD5D3), UINT32_C(0x0024804D), UINT32_C(0x00318CBD), UINT32_C(0x000AC20C), UINT32_C(0x002261A2), UINT32_C(0x00017C07), UINT32_C(0x0006AED6), UINT32_C(0x0001AE5E), UINT32_C(0x00230EA0), UINT32_C(0x00390D91), UINT32_C(0x0009C7FB), UINT32_C(0x002F102A), UINT32_C(0x00291350), UINT32_C(0x003DA578), UINT32_C(0x0013E6DE)}}, }, { {{UINT32_C(0x005C8DD6), UINT32_C(0x002A3738), UINT32_C(0x00365D8C), UINT32_C(0x0063DB9C), UINT32_C(0x00113081), UINT32_C(0x002F34E7), UINT32_C(0x003E646D), UINT32_C(0x0019B42D), UINT32_C(0x0006CC4B), UINT32_C(0x0037967A), UINT32_C(0x0037B63A), UINT32_C(0x00346973), UINT32_C(0x00175BB7), UINT32_C(0x001BAEA5), UINT32_C(0x002D90D6), UINT32_C(0x00235EC5), UINT32_C(0x0022B7D3), UINT32_C(0x0006C0A7), UINT32_C(0x000D9373), UINT32_C(0x003362B4), UINT32_C(0x00167362), UINT32_C(0x00228FA8), UINT32_C(0x002DC7CC)}, {UINT32_C(0x00772F9B), UINT32_C(0x00383B30), UINT32_C(0x001FE31B), UINT32_C(0x0039283D), UINT32_C(0x0030E99D), UINT32_C(0x0019398C), UINT32_C(0x000E05D7), UINT32_C(0x001CB0B3), UINT32_C(0x0031A3E1), UINT32_C(0x00335E57), UINT32_C(0x003D185F), UINT32_C(0x004F30A8), UINT32_C(0x002CC2DA), UINT32_C(0x003CB4EE), UINT32_C(0x000D7F61), UINT32_C(0x006B8EDA), UINT32_C(0x0020C99D), UINT32_C(0x00342D58), UINT32_C(0x003BCF21), UINT32_C(0x00043EE8), UINT32_C(0x003937C7), UINT32_C(0x002B2687), UINT32_C(0x003099B7)}}, {{UINT32_C(0x006F3863), UINT32_C(0x00216888), UINT32_C(0x00117F80), UINT32_C(0x003AECB0), UINT32_C(0x003CB3C3), UINT32_C(0x0009172C), UINT32_C(0x00351EE1), UINT32_C(0x000AD459), UINT32_C(0x00342449), UINT32_C(0x000A95A1), UINT32_C(0x00362F69), UINT32_C(0x0044683C), UINT32_C(0x0012100A), UINT32_C(0x000038C6), UINT32_C(0x0003DA8C), UINT32_C(0x004920F7), UINT32_C(0x001F5E72), UINT32_C(0x003F8B01), UINT32_C(0x001B2E28), UINT32_C(0x007828AE), UINT32_C(0x003B1AA3), UINT32_C(0x002304AF), UINT32_C(0x002983E5)}, {UINT32_C(0x0059F3AD), UINT32_C(0x0005EBDB), UINT32_C(0x0038F715), UINT32_C(0x007427DF), UINT32_C(0x0035EE7F), UINT32_C(0x001A4B0D), UINT32_C(0x0014E6C7), UINT32_C(0x00699A32), UINT32_C(0x00015674), UINT32_C(0x003DC67D), UINT32_C(0x0001CDA8), UINT32_C(0x003C45B2), UINT32_C(0x001BE065), UINT32_C(0x000C2772), UINT32_C(0x002184E2), UINT32_C(0x005C0469), UINT32_C(0x0024F0B3), UINT32_C(0x002374A4), UINT32_C(0x0031DE85), UINT32_C(0x006B53DE), UINT32_C(0x000F651C), UINT32_C(0x003071EB), UINT32_C(0x0029A433)}}, {{UINT32_C(0x0030A82F), UINT32_C(0x000EF962), UINT32_C(0x00227761), UINT32_C(0x006D7F9E), UINT32_C(0x000081BE), UINT32_C(0x000FEE69), UINT32_C(0x000752C8), UINT32_C(0x00748DEE), UINT32_C(0x00387116), UINT32_C(0x00287C41), UINT32_C(0x00027434), UINT32_C(0x00664A85), UINT32_C(0x001D3DE1), UINT32_C(0x003D565F), UINT32_C(0x003B7ED9), UINT32_C(0x0065C3BB), UINT32_C(0x0023180A), UINT32_C(0x000E41D1), UINT32_C(0x001016CD), UINT32_C(0x0065F0C5), UINT32_C(0x0017A834), UINT32_C(0x0000A4AB), UINT32_C(0x001FC477)}, {UINT32_C(0x004855D4), UINT32_C(0x001D815B), UINT32_C(0x00366682), UINT32_C(0x004FEE42), UINT32_C(0x001DD612), UINT32_C(0x0025BA93), UINT32_C(0x000E1804), UINT32_C(0x0007B46D), UINT32_C(0x00079E19), UINT32_C(0x00263779), UINT32_C(0x001FDFA2), UINT32_C(0x0078741F), UINT32_C(0x0037B69E), UINT32_C(0x0018E0A2), UINT32_C(0x0037F5D9), UINT32_C(0x000C71E4), UINT32_C(0x001F6109), UINT32_C(0x0002A965), UINT32_C(0x00358A62), UINT32_C(0x00790CBB), UINT32_C(0x001FC664), UINT32_C(0x00027F06), UINT32_C(0x0026A40A)}}, {{UINT32_C(0x0060807F), UINT32_C(0x003DF3AE), UINT32_C(0x000BE26F), UINT32_C(0x005110E1), UINT32_C(0x003B1A48), UINT32_C(0x00326EEB), UINT32_C(0x001E337A), UINT32_C(0x0030A675), UINT32_C(0x003F5F8B), UINT32_C(0x000CD0BA), UINT32_C(0x002297FB), UINT32_C(0x000379BD), UINT32_C(0x0015C430), UINT32_C(0x003FE28A), UINT32_C(0x00280CE2), UINT32_C(0x0010A09A), UINT32_C(0x000BB43D), UINT32_C(0x003BF3E8), UINT32_C(0x000D2A25), UINT32_C(0x00553C3D), UINT32_C(0x003A4814), UINT32_C(0x0023D406), UINT32_C(0x00130434)}, {UINT32_C(0x00012725), UINT32_C(0x00034675), UINT32_C(0x0030625E), UINT32_C(0x0068204C), UINT32_C(0x00007FF0), UINT32_C(0x000353D6), UINT32_C(0x00374D41), UINT32_C(0x002B0AEC), UINT32_C(0x002D4C90), UINT32_C(0x0023B516), UINT32_C(0x003D5FE1), UINT32_C(0x001BF1AF), UINT32_C(0x0026188F), UINT32_C(0x000277E9), UINT32_C(0x0009EDC0), UINT32_C(0x00419F60), UINT32_C(0x003B901E), UINT32_C(0x00036C9A), UINT32_C(0x001C2868), UINT32_C(0x0039BD67), UINT32_C(0x001E1FAC), UINT32_C(0x0018E5C8), UINT32_C(0x000D5B85)}}, {{UINT32_C(0x000B4E46), UINT32_C(0x001C91BB), UINT32_C(0x000E149E), UINT32_C(0x000CF26B), UINT32_C(0x00239A61), UINT32_C(0x001413C1), UINT32_C(0x0039D982), UINT32_C(0x0031DC48), UINT32_C(0x000CB5E3), UINT32_C(0x00177633), UINT32_C(0x003594BF), UINT32_C(0x00220B88), UINT32_C(0x003EE0E1), UINT32_C(0x0001C29C), UINT32_C(0x00332288), UINT32_C(0x001AC903), UINT32_C(0x002EA788), UINT32_C(0x002CF324), UINT32_C(0x000A068A), UINT32_C(0x00192C4F), UINT32_C(0x003620B1), UINT32_C(0x003A15B7), UINT32_C(0x001846FF)}, {UINT32_C(0x0037EA0F), UINT32_C(0x000E365F), UINT32_C(0x000AB7DB), UINT32_C(0x0073FC69), UINT32_C(0x0030E576), UINT32_C(0x001F51C5), UINT32_C(0x003E4C0F), UINT32_C(0x007734A2), UINT32_C(0x000B6D61), UINT32_C(0x0007F20A), UINT32_C(0x0016676C), UINT32_C(0x000742AB), UINT32_C(0x0024CACD), UINT32_C(0x00263F7C), UINT32_C(0x001FBB60), UINT32_C(0x005126DE), UINT32_C(0x001B0843), UINT32_C(0x0027E640), UINT32_C(0x002B6416), UINT32_C(0x000E461C), UINT32_C(0x0035712F), UINT32_C(0x00021FD4), UINT32_C(0x003DFB53)}}, {{UINT32_C(0x0078AFC0), UINT32_C(0x00344524), UINT32_C(0x00032570), UINT32_C(0x005274D4), UINT32_C(0x001BE8C7), UINT32_C(0x0000F7FC), UINT32_C(0x003A3CD2), UINT32_C(0x00224B02), UINT32_C(0x003CB849), UINT32_C(0x00318F23), UINT32_C(0x000B31C5), UINT32_C(0x00172883), UINT32_C(0x000E290F), UINT32_C(0x00058FCA), UINT32_C(0x0029D5B9), UINT32_C(0x000EE887), UINT32_C(0x0008C23A), UINT32_C(0x000B4641), UINT32_C(0x0019F308), UINT32_C(0x00368406), UINT32_C(0x003235C5), UINT32_C(0x000F6048), UINT32_C(0x00334FC7)}, {UINT32_C(0x00721229), UINT32_C(0x0028E47C), UINT32_C(0x0006F2DC), UINT32_C(0x006E7CFF), UINT32_C(0x00184C72), UINT32_C(0x003AF41E), UINT32_C(0x000EC9A0), UINT32_C(0x0008E682), UINT32_C(0x00294028), UINT32_C(0x0010CBE0), UINT32_C(0x00325E8D), UINT32_C(0x00229C6E), UINT32_C(0x0007AE13), UINT32_C(0x0012B92A), UINT32_C(0x001A6F8B), UINT32_C(0x00445E9E), UINT32_C(0x0038E62B), UINT32_C(0x000CCE4E), UINT32_C(0x0016D227), UINT32_C(0x005AEC2B), UINT32_C(0x002CB9C3), UINT32_C(0x000E9EE2), UINT32_C(0x00151064)}}, {{UINT32_C(0x00219F11), UINT32_C(0x000EEE99), UINT32_C(0x000F0E81), UINT32_C(0x0014202D), UINT32_C(0x0017D47D), UINT32_C(0x0013E996), UINT32_C(0x001FC4D3), UINT32_C(0x007153BF), UINT32_C(0x003B0646), UINT32_C(0x003CCDA8), UINT32_C(0x002DB80C), UINT32_C(0x005A6567), UINT32_C(0x00301938), UINT32_C(0x000B2A1D), UINT32_C(0x002C1CD4), UINT32_C(0x0036D153), UINT32_C(0x00002DE7), UINT32_C(0x001C0718), UINT32_C(0x001398D4), UINT32_C(0x001C18B0), UINT32_C(0x000531C6), UINT32_C(0x00270891), UINT32_C(0x001D12C0)}, {UINT32_C(0x006BF552), UINT32_C(0x00379C8C), UINT32_C(0x00124703), UINT32_C(0x001685D6), UINT32_C(0x000B4D76), UINT32_C(0x00354333), UINT32_C(0x003FD16E), UINT32_C(0x0078F567), UINT32_C(0x00228610), UINT32_C(0x002410D3), UINT32_C(0x0037EE2A), UINT32_C(0x002FF2A5), UINT32_C(0x001EA65B), UINT32_C(0x003FE56C), UINT32_C(0x00086D94), UINT32_C(0x0016F8D9), UINT32_C(0x00253D0C), UINT32_C(0x00110729), UINT32_C(0x00251056), UINT32_C(0x00771AF9), UINT32_C(0x00330BB2), UINT32_C(0x0030D723), UINT32_C(0x0010B52C)}}, {{UINT32_C(0x0059EEDD), UINT32_C(0x00224DDB), UINT32_C(0x00224843), UINT32_C(0x00062307), UINT32_C(0x001C385D), UINT32_C(0x00214646), UINT32_C(0x002E9EF9), UINT32_C(0x00069FC2), UINT32_C(0x0034E86C), UINT32_C(0x002DE7F8), UINT32_C(0x0011547F), UINT32_C(0x00592112), UINT32_C(0x003BA86D), UINT32_C(0x003E5946), UINT32_C(0x001999D6), UINT32_C(0x0019972E), UINT32_C(0x000BEC90), UINT32_C(0x001A2575), UINT32_C(0x000C3FB3), UINT32_C(0x0016B2B8), UINT32_C(0x000F91C3), UINT32_C(0x003BE22B), UINT32_C(0x00259437)}, {UINT32_C(0x00511BD4), UINT32_C(0x00114679), UINT32_C(0x003320B0), UINT32_C(0x006912DE), UINT32_C(0x00209607), UINT32_C(0x0010EA82), UINT32_C(0x001756FD), UINT32_C(0x0067C9A7), UINT32_C(0x00386F00), UINT32_C(0x0019C5A2), UINT32_C(0x000C1F54), UINT32_C(0x0060CBC7), UINT32_C(0x001DA7B9), UINT32_C(0x00063F18), UINT32_C(0x003D8253), UINT32_C(0x006757E9), UINT32_C(0x001F28E4), UINT32_C(0x003F4512), UINT32_C(0x0015BA1B), UINT32_C(0x00296BBE), UINT32_C(0x001E7448), UINT32_C(0x0027173C), UINT32_C(0x00385C41)}}, {{UINT32_C(0x001A30EE), UINT32_C(0x003F8DAD), UINT32_C(0x000A157B), UINT32_C(0x002E76B6), UINT32_C(0x0003B33B), UINT32_C(0x00067B4F), UINT32_C(0x00338572), UINT32_C(0x004A7886), UINT32_C(0x000AF814), UINT32_C(0x00231F5B), UINT32_C(0x003A7866), UINT32_C(0x001BC9D8), UINT32_C(0x002EC718), UINT32_C(0x000F7210), UINT32_C(0x0038A200), UINT32_C(0x0024BD8B), UINT32_C(0x0025403D), UINT32_C(0x002338A0), UINT32_C(0x00197FC8), UINT32_C(0x007EFFC4), UINT32_C(0x002C8ED2), UINT32_C(0x002F359C), UINT32_C(0x0007199C)}, {UINT32_C(0x003AA840), UINT32_C(0x001FEBA5), UINT32_C(0x00204035), UINT32_C(0x001437DE), UINT32_C(0x0030877E), UINT32_C(0x001DC9D8), UINT32_C(0x0022F529), UINT32_C(0x004AA308), UINT32_C(0x0008CF16), UINT32_C(0x00227F26), UINT32_C(0x0030EA93), UINT32_C(0x00444D20), UINT32_C(0x000FC049), UINT32_C(0x0025FECC), UINT32_C(0x00366A3B), UINT32_C(0x0075F2C6), UINT32_C(0x002D58DE), UINT32_C(0x00037A47), UINT32_C(0x001143E7), UINT32_C(0x0066F889), UINT32_C(0x001AA585), UINT32_C(0x0008637C), UINT32_C(0x00285D24)}}, {{UINT32_C(0x001684FD), UINT32_C(0x0026202E), UINT32_C(0x00229298), UINT32_C(0x0038BA17), UINT32_C(0x001143E4), UINT32_C(0x0004C67B), UINT32_C(0x0009A1D3), UINT32_C(0x00359003), UINT32_C(0x0000CF20), UINT32_C(0x003C8E67), UINT32_C(0x0025DDF6), UINT32_C(0x00167020), UINT32_C(0x000C3320), UINT32_C(0x0032FD4F), UINT32_C(0x001D4DDD), UINT32_C(0x002ABE07), UINT32_C(0x0015D694), UINT32_C(0x002025E4), UINT32_C(0x0024B490), UINT32_C(0x00237C45), UINT32_C(0x000F2232), UINT32_C(0x00172623), UINT32_C(0x003F2420)}, {UINT32_C(0x0031C43A), UINT32_C(0x002504F9), UINT32_C(0x002A5346), UINT32_C(0x00085709), UINT32_C(0x00181464), UINT32_C(0x0016AE98), UINT32_C(0x0005937D), UINT32_C(0x007E227E), UINT32_C(0x0021E344), UINT32_C(0x002D37F2), UINT32_C(0x003BABA8), UINT32_C(0x0076BA1E), UINT32_C(0x001E9354), UINT32_C(0x001FB1CD), UINT32_C(0x002FA365), UINT32_C(0x0037F2A0), UINT32_C(0x00150FF4), UINT32_C(0x0001D5DC), UINT32_C(0x003D537E), UINT32_C(0x003F0F28), UINT32_C(0x002C7BEA), UINT32_C(0x003C8613), UINT32_C(0x0032181B)}}, {{UINT32_C(0x004FDBFF), UINT32_C(0x00279110), UINT32_C(0x0014218E), UINT32_C(0x006FF570), UINT32_C(0x000BEE6D), UINT32_C(0x001AC4BF), UINT32_C(0x00168284), UINT32_C(0x00204FD9), UINT32_C(0x0009E49A), UINT32_C(0x00375F6C), UINT32_C(0x00188591), UINT32_C(0x00711953), UINT32_C(0x003F4432), UINT32_C(0x00196529), UINT32_C(0x00394538), UINT32_C(0x0018F2F6), UINT32_C(0x002CA7B0), UINT32_C(0x00013757), UINT32_C(0x001F2763), UINT32_C(0x001F675A), UINT32_C(0x002051A1), UINT32_C(0x003E27EB), UINT32_C(0x001862D5)}, {UINT32_C(0x00762CA4), UINT32_C(0x0008C476), UINT32_C(0x00324E43), UINT32_C(0x002A5BED), UINT32_C(0x002FCB16), UINT32_C(0x003A2EC2), UINT32_C(0x000DAC89), UINT32_C(0x001B1EA8), UINT32_C(0x00270A0C), UINT32_C(0x000F92C4), UINT32_C(0x00137059), UINT32_C(0x0002C67B), UINT32_C(0x001DE35A), UINT32_C(0x0003AEB0), UINT32_C(0x0032086D), UINT32_C(0x00622727), UINT32_C(0x003663F6), UINT32_C(0x00143F44), UINT32_C(0x0007E1A6), UINT32_C(0x0052B971), UINT32_C(0x002A4520), UINT32_C(0x003B35C1), UINT32_C(0x000E5F13)}}, {{UINT32_C(0x00377631), UINT32_C(0x00160066), UINT32_C(0x003F8625), UINT32_C(0x0008A975), UINT32_C(0x0011C7DC), UINT32_C(0x002AC5AE), UINT32_C(0x001D6AD4), UINT32_C(0x00457D6D), UINT32_C(0x000D9162), UINT32_C(0x0029BE2C), UINT32_C(0x0023E49C), UINT32_C(0x003CE982), UINT32_C(0x0029BD3F), UINT32_C(0x002FA98A), UINT32_C(0x000AAF8F), UINT32_C(0x0051BA4C), UINT32_C(0x000AAA3A), UINT32_C(0x00035AC4), UINT32_C(0x00326C9D), UINT32_C(0x0001BBF9), UINT32_C(0x00259EE8), UINT32_C(0x00363291), UINT32_C(0x00354D7C)}, {UINT32_C(0x0004BACF), UINT32_C(0x00021298), UINT32_C(0x000BD9F4), UINT32_C(0x0043D1FD), UINT32_C(0x00144099), UINT32_C(0x0031DC66), UINT32_C(0x0038FF58), UINT32_C(0x001EDFDE), UINT32_C(0x000CDE37), UINT32_C(0x0011D4F2), UINT32_C(0x001830F3), UINT32_C(0x0066B396), UINT32_C(0x002B5740), UINT32_C(0x0000FE1B), UINT32_C(0x0018CA75), UINT32_C(0x000543A1), UINT32_C(0x0001F8BB), UINT32_C(0x003AD189), UINT32_C(0x002324CF), UINT32_C(0x004D2C11), UINT32_C(0x002F4CEB), UINT32_C(0x00158CE7), UINT32_C(0x000CC8E6)}}, {{UINT32_C(0x0001F545), UINT32_C(0x000BAFC9), UINT32_C(0x00256984), UINT32_C(0x005BA1BD), UINT32_C(0x00186CC4), UINT32_C(0x00354258), UINT32_C(0x002C995A), UINT32_C(0x00634432), UINT32_C(0x001C8DFD), UINT32_C(0x0006A9F8), UINT32_C(0x003413FA), UINT32_C(0x00407583), UINT32_C(0x00364359), UINT32_C(0x00360343), UINT32_C(0x0004E81D), UINT32_C(0x0023B9E2), UINT32_C(0x00044AAC), UINT32_C(0x003E4F02), UINT32_C(0x000253E4), UINT32_C(0x004E1D95), UINT32_C(0x0008B230), UINT32_C(0x00045AB3), UINT32_C(0x00036815)}, {UINT32_C(0x003912F5), UINT32_C(0x0038574B), UINT32_C(0x0004AD86), UINT32_C(0x00463316), UINT32_C(0x000037D8), UINT32_C(0x001023FC), UINT32_C(0x00031DE0), UINT32_C(0x007EC789), UINT32_C(0x000081EF), UINT32_C(0x002ABA70), UINT32_C(0x00355BFB), UINT32_C(0x00306CB6), UINT32_C(0x00146C52), UINT32_C(0x000D5AD0), UINT32_C(0x003681F1), UINT32_C(0x0063A37A), UINT32_C(0x001B646E), UINT32_C(0x000A931F), UINT32_C(0x0023DD86), UINT32_C(0x006F9AFA), UINT32_C(0x0008A0BB), UINT32_C(0x0011BD6F), UINT32_C(0x00169519)}}, {{UINT32_C(0x00183D98), UINT32_C(0x003953F2), UINT32_C(0x00003F5C), UINT32_C(0x001D61CC), UINT32_C(0x0029E894), UINT32_C(0x0008FD62), UINT32_C(0x00124F02), UINT32_C(0x005D5510), UINT32_C(0x002CBB48), UINT32_C(0x0027C8EC), UINT32_C(0x002DA8A4), UINT32_C(0x00506092), UINT32_C(0x000D2ECA), UINT32_C(0x00080CB3), UINT32_C(0x00370B1F), UINT32_C(0x00264230), UINT32_C(0x00254B5D), UINT32_C(0x0030D35B), UINT32_C(0x00237E95), UINT32_C(0x003D3219), UINT32_C(0x000F1EE0), UINT32_C(0x0016F356), UINT32_C(0x000433B4)}, {UINT32_C(0x002EDDFD), UINT32_C(0x0028836F), UINT32_C(0x0004B480), UINT32_C(0x00268786), UINT32_C(0x002F536C), UINT32_C(0x002AF788), UINT32_C(0x003B32BC), UINT32_C(0x003B16D5), UINT32_C(0x002C983E), UINT32_C(0x00009C26), UINT32_C(0x00267D08), UINT32_C(0x0020E60C), UINT32_C(0x000ECF45), UINT32_C(0x00278142), UINT32_C(0x001746F3), UINT32_C(0x0054A790), UINT32_C(0x0035C6AA), UINT32_C(0x00272DAC), UINT32_C(0x002BA52D), UINT32_C(0x0038B5A4), UINT32_C(0x003725B3), UINT32_C(0x003565DC), UINT32_C(0x001FF559)}}, {{UINT32_C(0x0065D9D6), UINT32_C(0x00344FC2), UINT32_C(0x0000870B), UINT32_C(0x00699985), UINT32_C(0x002A5C08), UINT32_C(0x002D5249), UINT32_C(0x002CB5FE), UINT32_C(0x007C94CD), UINT32_C(0x001208B8), UINT32_C(0x00034BB9), UINT32_C(0x000F21F9), UINT32_C(0x0010B487), UINT32_C(0x001D773A), UINT32_C(0x0037E3B0), UINT32_C(0x002176D0), UINT32_C(0x0052166E), UINT32_C(0x002F70E0), UINT32_C(0x001BED82), UINT32_C(0x00286120), UINT32_C(0x007331ED), UINT32_C(0x001507E2), UINT32_C(0x003FD862), UINT32_C(0x000A5BC5)}, {UINT32_C(0x00763783), UINT32_C(0x0011EC7B), UINT32_C(0x0006ECDB), UINT32_C(0x00596D37), UINT32_C(0x002D6D59), UINT32_C(0x001FB1F1), UINT32_C(0x0010DD1F), UINT32_C(0x003F277E), UINT32_C(0x00091B7A), UINT32_C(0x003FFE47), UINT32_C(0x0003D49D), UINT32_C(0x0071AF1E), UINT32_C(0x00173FA2), UINT32_C(0x001B76EC), UINT32_C(0x001D5248), UINT32_C(0x0059BE83), UINT32_C(0x003F4D6A), UINT32_C(0x001CE0D3), UINT32_C(0x003FDBAF), UINT32_C(0x00554CAA), UINT32_C(0x002FAF76), UINT32_C(0x0004DD7D), UINT32_C(0x0025BFE6)}}, {{UINT32_C(0x0078E507), UINT32_C(0x003B0516), UINT32_C(0x00239513), UINT32_C(0x0026B945), UINT32_C(0x002F7EA4), UINT32_C(0x00258DAA), UINT32_C(0x002CA54E), UINT32_C(0x0038F70D), UINT32_C(0x0000EA33), UINT32_C(0x002CC019), UINT32_C(0x00322C57), UINT32_C(0x007E5F7D), UINT32_C(0x001BD5E1), UINT32_C(0x002300D9), UINT32_C(0x000A82FB), UINT32_C(0x007B959B), UINT32_C(0x00200D1E), UINT32_C(0x001F252C), UINT32_C(0x0021984A), UINT32_C(0x0015C036), UINT32_C(0x0016A72F), UINT32_C(0x00003E13), UINT32_C(0x0015AA73)}, {UINT32_C(0x007C9D6A), UINT32_C(0x003E1441), UINT32_C(0x0011A00F), UINT32_C(0x0079A490), UINT32_C(0x0012D007), UINT32_C(0x003C8625), UINT32_C(0x001E5649), UINT32_C(0x004491D7), UINT32_C(0x00076136), UINT32_C(0x003E7528), UINT32_C(0x00353C0B), UINT32_C(0x0008E4BD), UINT32_C(0x003422E8), UINT32_C(0x00338BFD), UINT32_C(0x0027F2D6), UINT32_C(0x00772362), UINT32_C(0x00359B33), UINT32_C(0x003A501D), UINT32_C(0x00154AFF), UINT32_C(0x0049526D), UINT32_C(0x002761DE), UINT32_C(0x00309735), UINT32_C(0x00060B95)}}, }, { {{UINT32_C(0x00523B9F), UINT32_C(0x001A6BE6), UINT32_C(0x00036EDD), UINT32_C(0x0076AA2F), UINT32_C(0x003FD0E2), UINT32_C(0x00385A57), UINT32_C(0x00098667), UINT32_C(0x0013DD67), UINT32_C(0x0012B434), UINT32_C(0x00000973), UINT32_C(0x003CF995), UINT32_C(0x0045926B), UINT32_C(0x0002CF3D), UINT32_C(0x001B1027), UINT32_C(0x003876F6), UINT32_C(0x0039998A), UINT32_C(0x00398D3B), UINT32_C(0x000598D3), UINT32_C(0x0009E59F), UINT32_C(0x003DA91C), UINT32_C(0x0027F8FE), UINT32_C(0x001992EF), UINT32_C(0x001BD1E4)}, {UINT32_C(0x005E09D8), UINT32_C(0x0027291C), UINT32_C(0x00042E2C), UINT32_C(0x005186A7), UINT32_C(0x00151430), UINT32_C(0x002A705A), UINT32_C(0x00312685), UINT32_C(0x001C5CD7), UINT32_C(0x002BC485), UINT32_C(0x0006B1B4), UINT32_C(0x003ED133), UINT32_C(0x006BA1BB), UINT32_C(0x0012B561), UINT32_C(0x001C6829), UINT32_C(0x0038F88D), UINT32_C(0x000FAFDF), UINT32_C(0x003A8F9C), UINT32_C(0x003B8278), UINT32_C(0x00075330), UINT32_C(0x00723D70), UINT32_C(0x0013971C), UINT32_C(0x0002A3A0), UINT32_C(0x0032D46E)}}, {{UINT32_C(0x004A84E3), UINT32_C(0x000F993B), UINT32_C(0x0038E50F), UINT32_C(0x006F9D6C), UINT32_C(0x00222DDA), UINT32_C(0x00201C17), UINT32_C(0x003D690B), UINT32_C(0x00685E56), UINT32_C(0x003AE821), UINT32_C(0x00160832), UINT32_C(0x00267374), UINT32_C(0x0014A440), UINT32_C(0x00286466), UINT32_C(0x0037B81C), UINT32_C(0x0034FB56), UINT32_C(0x000A60A9), UINT32_C(0x00361F71), UINT32_C(0x002768E5), UINT32_C(0x002D9ADF), UINT32_C(0x00351ED3), UINT32_C(0x0026B155), UINT32_C(0x002ACF8B), UINT32_C(0x000CAB49)}, {UINT32_C(0x002E7818), UINT32_C(0x00050DDB), UINT32_C(0x002F8281), UINT32_C(0x000426DB), UINT32_C(0x003BF6C0), UINT32_C(0x002F18B3), UINT32_C(0x000FDF15), UINT32_C(0x004326C8), UINT32_C(0x0034A233), UINT32_C(0x003F8BB5), UINT32_C(0x00252744), UINT32_C(0x005D0622), UINT32_C(0x000600E0), UINT32_C(0x000C538E), UINT32_C(0x002B9B96), UINT32_C(0x00240977), UINT32_C(0x00266E45), UINT32_C(0x000ED85F), UINT32_C(0x0016D56E), UINT32_C(0x005934A8), UINT32_C(0x000DE008), UINT32_C(0x000B7A70), UINT32_C(0x00333A6E)}}, {{UINT32_C(0x0062AA91), UINT32_C(0x0004AD0D), UINT32_C(0x00290514), UINT32_C(0x0035EF4E), UINT32_C(0x003F0059), UINT32_C(0x0036F603), UINT32_C(0x001E8A95), UINT32_C(0x004E5E21), UINT32_C(0x003AAAD3), UINT32_C(0x001864B4), UINT32_C(0x00314695), UINT32_C(0x0061F315), UINT32_C(0x003E5320), UINT32_C(0x000A6A70), UINT32_C(0x00312DDA), UINT32_C(0x000CA432), UINT32_C(0x00089AF4), UINT32_C(0x0027EE81), UINT32_C(0x003314B2), UINT32_C(0x00569617), UINT32_C(0x00369C83), UINT32_C(0x00333762), UINT32_C(0x0004C25B)}, {UINT32_C(0x0029163B), UINT32_C(0x0010F6C4), UINT32_C(0x003CFA87), UINT32_C(0x00413607), UINT32_C(0x0004D631), UINT32_C(0x0029CC9A), UINT32_C(0x0009B191), UINT32_C(0x0012E650), UINT32_C(0x0007576E), UINT32_C(0x002FAEF9), UINT32_C(0x001E71A7), UINT32_C(0x006D93A4), UINT32_C(0x00110BDB), UINT32_C(0x003C8A96), UINT32_C(0x000AB70A), UINT32_C(0x00161FF3), UINT32_C(0x00309EAC), UINT32_C(0x000887FB), UINT32_C(0x00199FC7), UINT32_C(0x007B0C04), UINT32_C(0x00030951), UINT32_C(0x00138445), UINT32_C(0x002C19E3)}}, {{UINT32_C(0x001D9920), UINT32_C(0x0035A7F8), UINT32_C(0x0026F037), UINT32_C(0x00352EE6), UINT32_C(0x0036FF52), UINT32_C(0x000DA4B7), UINT32_C(0x000D5800), UINT32_C(0x0012D75B), UINT32_C(0x001E4378), UINT32_C(0x0006FB97), UINT32_C(0x003489D8), UINT32_C(0x007291B9), UINT32_C(0x002611FF), UINT32_C(0x0029220F), UINT32_C(0x003180AF), UINT32_C(0x003B64F1), UINT32_C(0x0029D493), UINT32_C(0x0029061E), UINT32_C(0x00287F20), UINT32_C(0x000A8410), UINT32_C(0x003B766F), UINT32_C(0x00194E12), UINT32_C(0x001C9672)}, {UINT32_C(0x002BEBD9), UINT32_C(0x0034C959), UINT32_C(0x00372BCE), UINT32_C(0x0077E3FE), UINT32_C(0x002A76EF), UINT32_C(0x003B1215), UINT32_C(0x0017D01E), UINT32_C(0x001F6D6E), UINT32_C(0x001AF581), UINT32_C(0x002135B9), UINT32_C(0x0023AE9B), UINT32_C(0x00643EE2), UINT32_C(0x00309B0B), UINT32_C(0x00149E24), UINT32_C(0x002B829C), UINT32_C(0x0014D460), UINT32_C(0x0035AAB8), UINT32_C(0x001D64A4), UINT32_C(0x003C4123), UINT32_C(0x005FD0BE), UINT32_C(0x002680CE), UINT32_C(0x0032FC91), UINT32_C(0x000D5EFA)}}, {{UINT32_C(0x0042107B), UINT32_C(0x002D79CB), UINT32_C(0x000E25C7), UINT32_C(0x0015D835), UINT32_C(0x0025EACC), UINT32_C(0x0038E784), UINT32_C(0x00133C3A), UINT32_C(0x0009780F), UINT32_C(0x0007A2B3), UINT32_C(0x003A0803), UINT32_C(0x00381D55), UINT32_C(0x00282268), UINT32_C(0x0020B921), UINT32_C(0x0037F7AC), UINT32_C(0x0013B76D), UINT32_C(0x003CE92F), UINT32_C(0x0025ECD4), UINT32_C(0x0030B106), UINT32_C(0x001D9F81), UINT32_C(0x006798C4), UINT32_C(0x000CF158), UINT32_C(0x003CAF9C), UINT32_C(0x003824DB)}, {UINT32_C(0x007F6848), UINT32_C(0x0034A534), UINT32_C(0x0001B343), UINT32_C(0x006BF10C), UINT32_C(0x0008FCF1), UINT32_C(0x000025F0), UINT32_C(0x00105280), UINT32_C(0x0058FEE9), UINT32_C(0x0006B688), UINT32_C(0x001BEC79), UINT32_C(0x003D6BC7), UINT32_C(0x001DBC3E), UINT32_C(0x00298412), UINT32_C(0x002CAF5F), UINT32_C(0x003C0536), UINT32_C(0x006D0ED6), UINT32_C(0x002790F7), UINT32_C(0x0016B380), UINT32_C(0x000EA2CC), UINT32_C(0x007F2385), UINT32_C(0x001FC33E), UINT32_C(0x0001295D), UINT32_C(0x002EC02F)}}, {{UINT32_C(0x001F7939), UINT32_C(0x002AC3E2), UINT32_C(0x001660F9), UINT32_C(0x00663A40), UINT32_C(0x001A8A13), UINT32_C(0x0023C8EF), UINT32_C(0x003AB7B7), UINT32_C(0x0039E16F), UINT32_C(0x001FA47B), UINT32_C(0x0025AB8D), UINT32_C(0x00384015), UINT32_C(0x003CE1A6), UINT32_C(0x0005F145), UINT32_C(0x000C1E4B), UINT32_C(0x001A72DB), UINT32_C(0x00203492), UINT32_C(0x003DE59E), UINT32_C(0x0010CD81), UINT32_C(0x002D2FAE), UINT32_C(0x0021F48A), UINT32_C(0x001C1285), UINT32_C(0x002EC41B), UINT32_C(0x001E8B07)}, {UINT32_C(0x0018D1F3), UINT32_C(0x002EC53A), UINT32_C(0x00190D62), UINT32_C(0x0018FCFD), UINT32_C(0x000A3EE7), UINT32_C(0x0039D235), UINT32_C(0x00217FF2), UINT32_C(0x00142817), UINT32_C(0x002FB4F7), UINT32_C(0x001BB01D), UINT32_C(0x000BF067), UINT32_C(0x0052C1A1), UINT32_C(0x001029DF), UINT32_C(0x003B77AC), UINT32_C(0x001C5446), UINT32_C(0x000A8528), UINT32_C(0x00076849), UINT32_C(0x0024957C), UINT32_C(0x00255F16), UINT32_C(0x00464713), UINT32_C(0x0014A68E), UINT32_C(0x002A0E25), UINT32_C(0x0027874C)}}, {{UINT32_C(0x00165C60), UINT32_C(0x000F1947), UINT32_C(0x00358DAC), UINT32_C(0x003112AB), UINT32_C(0x003CED7D), UINT32_C(0x0007D95D), UINT32_C(0x001BFB25), UINT32_C(0x0038039B), UINT32_C(0x002C49B9), UINT32_C(0x00226B1D), UINT32_C(0x00307B50), UINT32_C(0x002A8A6B), UINT32_C(0x003A8D6F), UINT32_C(0x002D72F9), UINT32_C(0x002F321D), UINT32_C(0x00530076), UINT32_C(0x002D8361), UINT32_C(0x002D2B58), UINT32_C(0x0032030C), UINT32_C(0x0032F5E5), UINT32_C(0x00164CE3), UINT32_C(0x0026D5D1), UINT32_C(0x0020444C)}, {UINT32_C(0x002ABBE4), UINT32_C(0x003519D8), UINT32_C(0x00151482), UINT32_C(0x00773260), UINT32_C(0x0034B1AD), UINT32_C(0x00250B9E), UINT32_C(0x00302049), UINT32_C(0x00385164), UINT32_C(0x003E74F7), UINT32_C(0x0023B51F), UINT32_C(0x001A3158), UINT32_C(0x00527F9C), UINT32_C(0x003CABD3), UINT32_C(0x002F9178), UINT32_C(0x0006BAE5), UINT32_C(0x00600F3B), UINT32_C(0x002DF1B8), UINT32_C(0x000D590F), UINT32_C(0x00194149), UINT32_C(0x005DE8B8), UINT32_C(0x002325D5), UINT32_C(0x003EDBFF), UINT32_C(0x000AAFE1)}}, {{UINT32_C(0x001A50FC), UINT32_C(0x00280217), UINT32_C(0x003A5F1B), UINT32_C(0x00412D41), UINT32_C(0x00285345), UINT32_C(0x002DBBAD), UINT32_C(0x000FF377), UINT32_C(0x0059899D), UINT32_C(0x0029B472), UINT32_C(0x00072A4A), UINT32_C(0x0028DC22), UINT32_C(0x001611B6), UINT32_C(0x003C3760), UINT32_C(0x0001466B), UINT32_C(0x003D8FA9), UINT32_C(0x00573081), UINT32_C(0x0013FB11), UINT32_C(0x00203758), UINT32_C(0x002E6367), UINT32_C(0x00482CF9), UINT32_C(0x003178F6), UINT32_C(0x001073E8), UINT32_C(0x001997C3)}, {UINT32_C(0x0073FDFD), UINT32_C(0x002EFF90), UINT32_C(0x0014EBAD), UINT32_C(0x000F3618), UINT32_C(0x00162A1A), UINT32_C(0x00270E47), UINT32_C(0x0010A3E7), UINT32_C(0x00345497), UINT32_C(0x002C126D), UINT32_C(0x0036F8A6), UINT32_C(0x00166505), UINT32_C(0x0005C77A), UINT32_C(0x00197ED6), UINT32_C(0x00192ECC), UINT32_C(0x00233375), UINT32_C(0x003E0030), UINT32_C(0x000D5706), UINT32_C(0x0009709A), UINT32_C(0x003D8884), UINT32_C(0x00244795), UINT32_C(0x000B3F0C), UINT32_C(0x002420C0), UINT32_C(0x00286796)}}, {{UINT32_C(0x000CAAE5), UINT32_C(0x00094457), UINT32_C(0x00152528), UINT32_C(0x001E3DB2), UINT32_C(0x0005EC25), UINT32_C(0x000BF941), UINT32_C(0x002A007F), UINT32_C(0x00504FD8), UINT32_C(0x003ED863), UINT32_C(0x003A902A), UINT32_C(0x0014F2EA), UINT32_C(0x0015DB81), UINT32_C(0x00280472), UINT32_C(0x003D790F), UINT32_C(0x00349779), UINT32_C(0x006EB09F), UINT32_C(0x00209701), UINT32_C(0x00377E4F), UINT32_C(0x002E600B), UINT32_C(0x00152371), UINT32_C(0x000BA435), UINT32_C(0x001FEF62), UINT32_C(0x0027E7F6)}, {UINT32_C(0x00599CB9), UINT32_C(0x001549AA), UINT32_C(0x0013AF70), UINT32_C(0x00234B56), UINT32_C(0x00248CC3), UINT32_C(0x0032259C), UINT32_C(0x00203D97), UINT32_C(0x006AA891), UINT32_C(0x0005CEFE), UINT32_C(0x00199005), UINT32_C(0x001990D3), UINT32_C(0x00334DF5), UINT32_C(0x001B0BB0), UINT32_C(0x0011DD6C), UINT32_C(0x0038F1E0), UINT32_C(0x004EE490), UINT32_C(0x003C3321), UINT32_C(0x001F139B), UINT32_C(0x0006C59B), UINT32_C(0x00195C36), UINT32_C(0x00013ED7), UINT32_C(0x00020142), UINT32_C(0x0034FF5C)}}, {{UINT32_C(0x002C93FF), UINT32_C(0x000319F9), UINT32_C(0x00002CB9), UINT32_C(0x002D18F3), UINT32_C(0x001DCA23), UINT32_C(0x000C5093), UINT32_C(0x001EFF04), UINT32_C(0x0075CFF0), UINT32_C(0x00064EA8), UINT32_C(0x0004571C), UINT32_C(0x0019B187), UINT32_C(0x0053F3E7), UINT32_C(0x002BFCD9), UINT32_C(0x00100147), UINT32_C(0x00381877), UINT32_C(0x0032E5D6), UINT32_C(0x002EC006), UINT32_C(0x00238ED2), UINT32_C(0x0032C67B), UINT32_C(0x00001663), UINT32_C(0x003C176A), UINT32_C(0x0014E21C), UINT32_C(0x00399D5E)}, {UINT32_C(0x004E0B57), UINT32_C(0x001C2F95), UINT32_C(0x00363DC0), UINT32_C(0x0009DC71), UINT32_C(0x00151A34), UINT32_C(0x003159C5), UINT32_C(0x00201355), UINT32_C(0x00455C7C), UINT32_C(0x00070906), UINT32_C(0x002195FD), UINT32_C(0x001CE30A), UINT32_C(0x0073CADB), UINT32_C(0x0005C318), UINT32_C(0x00037022), UINT32_C(0x00053E6C), UINT32_C(0x0078D811), UINT32_C(0x002D5455), UINT32_C(0x000B37E3), UINT32_C(0x003A1081), UINT32_C(0x005948E6), UINT32_C(0x0032F5E3), UINT32_C(0x003F1006), UINT32_C(0x0029C6C7)}}, {{UINT32_C(0x006A53F5), UINT32_C(0x00234585), UINT32_C(0x003B1248), UINT32_C(0x0031E22D), UINT32_C(0x0014C277), UINT32_C(0x001E4E41), UINT32_C(0x000C1028), UINT32_C(0x004CFB54), UINT32_C(0x000EA3E8), UINT32_C(0x00091AA9), UINT32_C(0x0026A9C7), UINT32_C(0x003266E7), UINT32_C(0x002E72A8), UINT32_C(0x002340FE), UINT32_C(0x00306573), UINT32_C(0x006B9E9A), UINT32_C(0x0035D59F), UINT32_C(0x001DB09E), UINT32_C(0x0005F131), UINT32_C(0x0002A91F), UINT32_C(0x003D10FA), UINT32_C(0x002D44C4), UINT32_C(0x001A9029)}, {UINT32_C(0x004DC2D6), UINT32_C(0x000485AA), UINT32_C(0x00357F02), UINT32_C(0x00109ABD), UINT32_C(0x00277446), UINT32_C(0x002B2567), UINT32_C(0x003C69A7), UINT32_C(0x0031AA5D), UINT32_C(0x00308E0D), UINT32_C(0x000CDB91), UINT32_C(0x001A3AB7), UINT32_C(0x0043A830), UINT32_C(0x002FC1D1), UINT32_C(0x001FA04C), UINT32_C(0x002B3C22), UINT32_C(0x00400E6C), UINT32_C(0x00088655), UINT32_C(0x000D2E38), UINT32_C(0x002BEDE7), UINT32_C(0x0041F67A), UINT32_C(0x002EB40A), UINT32_C(0x00263E54), UINT32_C(0x000736A8)}}, {{UINT32_C(0x00524DB7), UINT32_C(0x00329BD6), UINT32_C(0x002BC43F), UINT32_C(0x00407E56), UINT32_C(0x0006BA61), UINT32_C(0x001A5FC7), UINT32_C(0x000FC681), UINT32_C(0x001A5E17), UINT32_C(0x002AD8E2), UINT32_C(0x003C1B1E), UINT32_C(0x003028BA), UINT32_C(0x002CE10A), UINT32_C(0x0013F30E), UINT32_C(0x001966B5), UINT32_C(0x001C1DF1), UINT32_C(0x00540907), UINT32_C(0x0029361C), UINT32_C(0x000E7B5C), UINT32_C(0x00303DDE), UINT32_C(0x0059FB60), UINT32_C(0x00151554), UINT32_C(0x002838BD), UINT32_C(0x003D9CFA)}, {UINT32_C(0x002063F9), UINT32_C(0x002731CA), UINT32_C(0x002003F0), UINT32_C(0x0079F9F9), UINT32_C(0x00347AC8), UINT32_C(0x0021973A), UINT32_C(0x001280CE), UINT32_C(0x00323A60), UINT32_C(0x00098D3C), UINT32_C(0x00306D49), UINT32_C(0x000109EC), UINT32_C(0x00511419), UINT32_C(0x0010C7B4), UINT32_C(0x001D2E21), UINT32_C(0x003991C3), UINT32_C(0x003C5990), UINT32_C(0x001DB860), UINT32_C(0x0014EC41), UINT32_C(0x00088BAC), UINT32_C(0x00448C44), UINT32_C(0x00084966), UINT32_C(0x0031E904), UINT32_C(0x000524F2)}}, {{UINT32_C(0x0049E3D3), UINT32_C(0x00181A3B), UINT32_C(0x0011AA50), UINT32_C(0x007021E5), UINT32_C(0x00316EC7), UINT32_C(0x0029A769), UINT32_C(0x003F4C5A), UINT32_C(0x006AA0ED), UINT32_C(0x003E7379), UINT32_C(0x00150459), UINT32_C(0x0035CBC7), UINT32_C(0x005DEBB1), UINT32_C(0x00053C63), UINT32_C(0x000AA5E3), UINT32_C(0x0013545F), UINT32_C(0x00019A93), UINT32_C(0x0029934B), UINT32_C(0x000A94D0), UINT32_C(0x00260B29), UINT32_C(0x00298F53), UINT32_C(0x00377D15), UINT32_C(0x0029F246), UINT32_C(0x002F33B2)}, {UINT32_C(0x0066FE62), UINT32_C(0x001037AD), UINT32_C(0x00370077), UINT32_C(0x00421175), UINT32_C(0x001E861C), UINT32_C(0x00033773), UINT32_C(0x002BFEA4), UINT32_C(0x0000380F), UINT32_C(0x0001544C), UINT32_C(0x00272751), UINT32_C(0x003FB134), UINT32_C(0x0039C926), UINT32_C(0x002CAB64), UINT32_C(0x0026F1D5), UINT32_C(0x00273824), UINT32_C(0x004BDF14), UINT32_C(0x001E4097), UINT32_C(0x00281D77), UINT32_C(0x00273464), UINT32_C(0x0005EB84), UINT32_C(0x002942CD), UINT32_C(0x003938B5), UINT32_C(0x00333CCF)}}, {{UINT32_C(0x000B8466), UINT32_C(0x00335B47), UINT32_C(0x001C7C5F), UINT32_C(0x00130B87), UINT32_C(0x0002C697), UINT32_C(0x0011F099), UINT32_C(0x001909FC), UINT32_C(0x007C440B), UINT32_C(0x0006E6CD), UINT32_C(0x003604F5), UINT32_C(0x000A3664), UINT32_C(0x000E9448), UINT32_C(0x00375564), UINT32_C(0x00100ABB), UINT32_C(0x000A2BD1), UINT32_C(0x00610611), UINT32_C(0x000B0919), UINT32_C(0x00192DA1), UINT32_C(0x000CA6A0), UINT32_C(0x0022EC21), UINT32_C(0x0010021B), UINT32_C(0x0014AC0F), UINT32_C(0x003C3561)}, {UINT32_C(0x001DE844), UINT32_C(0x000339F0), UINT32_C(0x00338277), UINT32_C(0x0039E865), UINT32_C(0x000C918F), UINT32_C(0x001B9202), UINT32_C(0x0039DB51), UINT32_C(0x0035E972), UINT32_C(0x00269806), UINT32_C(0x001A4703), UINT32_C(0x00128E3F), UINT32_C(0x0059736B), UINT32_C(0x0009133A), UINT32_C(0x000988FA), UINT32_C(0x003F5D17), UINT32_C(0x0075D549), UINT32_C(0x0035AF8B), UINT32_C(0x000EBF87), UINT32_C(0x002B5241), UINT32_C(0x001A47E1), UINT32_C(0x003FAD0B), UINT32_C(0x003F031A), UINT32_C(0x0000856D)}}, {{UINT32_C(0x007BA242), UINT32_C(0x003F139F), UINT32_C(0x0011DEFD), UINT32_C(0x0023DE43), UINT32_C(0x00295AA0), UINT32_C(0x003AB6CE), UINT32_C(0x0000492A), UINT32_C(0x00038F1C), UINT32_C(0x001F3BEB), UINT32_C(0x000DEADE), UINT32_C(0x003039CC), UINT32_C(0x00546C46), UINT32_C(0x000F8C59), UINT32_C(0x00364F5D), UINT32_C(0x00278A38), UINT32_C(0x0003D22C), UINT32_C(0x000FDC4B), UINT32_C(0x0001BEAF), UINT32_C(0x00025B08), UINT32_C(0x0008F72C), UINT32_C(0x0027C5E7), UINT32_C(0x00252A05), UINT32_C(0x00107A50)}, {UINT32_C(0x000EBA8F), UINT32_C(0x0027A1D4), UINT32_C(0x003EF3A3), UINT32_C(0x007BCF49), UINT32_C(0x003D3105), UINT32_C(0x0023E6FD), UINT32_C(0x00359B97), UINT32_C(0x0028F42A), UINT32_C(0x003E23D6), UINT32_C(0x00178851), UINT32_C(0x0037642F), UINT32_C(0x0042E04B), UINT32_C(0x00376AFD), UINT32_C(0x00198F42), UINT32_C(0x002F89CF), UINT32_C(0x000E495C), UINT32_C(0x002116C6), UINT32_C(0x00369883), UINT32_C(0x0005445E), UINT32_C(0x0028D909), UINT32_C(0x001123BE), UINT32_C(0x00395238), UINT32_C(0x000BDBC0)}}, {{UINT32_C(0x0079A5E7), UINT32_C(0x001C3E7B), UINT32_C(0x00184F53), UINT32_C(0x003BBC86), UINT32_C(0x0010D687), UINT32_C(0x00038850), UINT32_C(0x0038E20E), UINT32_C(0x003E53AE), UINT32_C(0x0004A94C), UINT32_C(0x002AEB4D), UINT32_C(0x003AEB1A), UINT32_C(0x00448BCC), UINT32_C(0x0004DB71), UINT32_C(0x0003778D), UINT32_C(0x003944F0), UINT32_C(0x000CC500), UINT32_C(0x00008E46), UINT32_C(0x000F5C40), UINT32_C(0x00110507), UINT32_C(0x001F1E48), UINT32_C(0x003628D5), UINT32_C(0x00052A96), UINT32_C(0x003B94D2)}, {UINT32_C(0x0004ABCF), UINT32_C(0x000A3BC2), UINT32_C(0x0001C80A), UINT32_C(0x007BDA93), UINT32_C(0x000ECD4F), UINT32_C(0x003F215D), UINT32_C(0x000EBBE2), UINT32_C(0x005395FC), UINT32_C(0x00074168), UINT32_C(0x0022A24A), UINT32_C(0x001A1B35), UINT32_C(0x0077FFE0), UINT32_C(0x003C9950), UINT32_C(0x0028A73C), UINT32_C(0x001AC592), UINT32_C(0x0023CB0D), UINT32_C(0x003F12D3), UINT32_C(0x0030ED1B), UINT32_C(0x002E878C), UINT32_C(0x003BA03C), UINT32_C(0x003CDBA8), UINT32_C(0x0021E634), UINT32_C(0x000F8610)}}, }, { {{UINT32_C(0x00374EA0), UINT32_C(0x003D49A3), UINT32_C(0x001F7E76), UINT32_C(0x001D6B9E), UINT32_C(0x002592C5), UINT32_C(0x000E14A2), UINT32_C(0x00190C56), UINT32_C(0x0063DAE2), UINT32_C(0x0039CB00), UINT32_C(0x001A96B0), UINT32_C(0x001112B0), UINT32_C(0x00125D57), UINT32_C(0x003E073B), UINT32_C(0x003BA300), UINT32_C(0x0010434F), UINT32_C(0x00584798), UINT32_C(0x00328C4D), UINT32_C(0x002C908E), UINT32_C(0x003F37C6), UINT32_C(0x0050852E), UINT32_C(0x000E2E46), UINT32_C(0x003A1A63), UINT32_C(0x001C643D)}, {UINT32_C(0x00147D83), UINT32_C(0x000590DE), UINT32_C(0x001A30E1), UINT32_C(0x003223D8), UINT32_C(0x00092F2B), UINT32_C(0x002B60EE), UINT32_C(0x00044972), UINT32_C(0x0024B04F), UINT32_C(0x000F8784), UINT32_C(0x00015A35), UINT32_C(0x001E5404), UINT32_C(0x003B76C0), UINT32_C(0x0024ECFE), UINT32_C(0x00101933), UINT32_C(0x0029FDFB), UINT32_C(0x00224043), UINT32_C(0x00059771), UINT32_C(0x0035FA07), UINT32_C(0x00044AFE), UINT32_C(0x00168A97), UINT32_C(0x001D4795), UINT32_C(0x0016C054), UINT32_C(0x00202B01)}}, {{UINT32_C(0x0063E7A6), UINT32_C(0x0034C8D6), UINT32_C(0x00280787), UINT32_C(0x001A7385), UINT32_C(0x003ABD2E), UINT32_C(0x00185E3E), UINT32_C(0x0000C346), UINT32_C(0x0075FF68), UINT32_C(0x00117390), UINT32_C(0x00234323), UINT32_C(0x00327433), UINT32_C(0x003FED4A), UINT32_C(0x003946EE), UINT32_C(0x00036FEB), UINT32_C(0x000C0F57), UINT32_C(0x00359C4A), UINT32_C(0x00092D1D), UINT32_C(0x0001A134), UINT32_C(0x002AD6D7), UINT32_C(0x0012395F), UINT32_C(0x003F988A), UINT32_C(0x001ACCFF), UINT32_C(0x002123C1)}, {UINT32_C(0x002D5A19), UINT32_C(0x00156939), UINT32_C(0x00222C1A), UINT32_C(0x00619366), UINT32_C(0x0016036D), UINT32_C(0x0033459B), UINT32_C(0x00062D47), UINT32_C(0x004B8C12), UINT32_C(0x001B95CF), UINT32_C(0x00117F5F), UINT32_C(0x003F80DA), UINT32_C(0x00050A50), UINT32_C(0x003942D5), UINT32_C(0x00385EAE), UINT32_C(0x0033AB22), UINT32_C(0x00537468), UINT32_C(0x000DFF4B), UINT32_C(0x001879D6), UINT32_C(0x002388A7), UINT32_C(0x000FCEA6), UINT32_C(0x00375E35), UINT32_C(0x003398B3), UINT32_C(0x003F30BA)}}, {{UINT32_C(0x003598D4), UINT32_C(0x0019A9A3), UINT32_C(0x003A267B), UINT32_C(0x002B12CC), UINT32_C(0x003839D5), UINT32_C(0x003B8D33), UINT32_C(0x0025BF3A), UINT32_C(0x00438430), UINT32_C(0x00189C5B), UINT32_C(0x003F2C8B), UINT32_C(0x003A8177), UINT32_C(0x007055A3), UINT32_C(0x002E6730), UINT32_C(0x00341821), UINT32_C(0x002142DE), UINT32_C(0x0010BC51), UINT32_C(0x000D1EA0), UINT32_C(0x0015FEF0), UINT32_C(0x00329B9B), UINT32_C(0x000508A4), UINT32_C(0x0001C1B9), UINT32_C(0x001FF600), UINT32_C(0x00328E8E)}, {UINT32_C(0x00717603), UINT32_C(0x0033F89C), UINT32_C(0x0025C76B), UINT32_C(0x0018607B), UINT32_C(0x001303E9), UINT32_C(0x000F2CB5), UINT32_C(0x000F8CE4), UINT32_C(0x0011128F), UINT32_C(0x00216CE5), UINT32_C(0x003B4AEC), UINT32_C(0x0027F704), UINT32_C(0x005A2623), UINT32_C(0x002A1412), UINT32_C(0x0037E07D), UINT32_C(0x0007F5BF), UINT32_C(0x006BFF5F), UINT32_C(0x0000D2EA), UINT32_C(0x0028D09E), UINT32_C(0x0030FECE), UINT32_C(0x007CE886), UINT32_C(0x00163AD8), UINT32_C(0x00007318), UINT32_C(0x002C4F8D)}}, {{UINT32_C(0x0022EF26), UINT32_C(0x0011DF21), UINT32_C(0x001A21E7), UINT32_C(0x0067A5B1), UINT32_C(0x00327468), UINT32_C(0x0031BA5C), UINT32_C(0x00156DC9), UINT32_C(0x001E7E4E), UINT32_C(0x003FB583), UINT32_C(0x001EB61F), UINT32_C(0x002ABBA4), UINT32_C(0x0040FEC8), UINT32_C(0x0004C5FF), UINT32_C(0x0010F939), UINT32_C(0x003D4DA2), UINT32_C(0x005C0941), UINT32_C(0x0013C311), UINT32_C(0x000BA027), UINT32_C(0x001845CC), UINT32_C(0x006FF264), UINT32_C(0x0038AC88), UINT32_C(0x003463D6), UINT32_C(0x000EADB9)}, {UINT32_C(0x000B056C), UINT32_C(0x00288DB2), UINT32_C(0x001C02CF), UINT32_C(0x000BB175), UINT32_C(0x0018F094), UINT32_C(0x0027806D), UINT32_C(0x00355563), UINT32_C(0x0054C2AD), UINT32_C(0x001CCE8E), UINT32_C(0x002E2B85), UINT32_C(0x00073F85), UINT32_C(0x006D02CB), UINT32_C(0x0033434A), UINT32_C(0x003DA80B), UINT32_C(0x001550B8), UINT32_C(0x0053A65C), UINT32_C(0x003624AD), UINT32_C(0x00078142), UINT32_C(0x0017BFE5), UINT32_C(0x002EF056), UINT32_C(0x00126C8F), UINT32_C(0x00377035), UINT32_C(0x003C5FD9)}}, {{UINT32_C(0x00692F52), UINT32_C(0x002D345A), UINT32_C(0x001014B5), UINT32_C(0x004A6F1C), UINT32_C(0x00279FEB), UINT32_C(0x00057359), UINT32_C(0x0005EE89), UINT32_C(0x000B0567), UINT32_C(0x002B38D3), UINT32_C(0x00243C26), UINT32_C(0x0000FE1B), UINT32_C(0x001499CE), UINT32_C(0x00326C87), UINT32_C(0x003808D0), UINT32_C(0x0024E577), UINT32_C(0x00559968), UINT32_C(0x0014EF5F), UINT32_C(0x00091017), UINT32_C(0x000A4B95), UINT32_C(0x0079EB0D), UINT32_C(0x000498F0), UINT32_C(0x002F7F3A), UINT32_C(0x00024E38)}, {UINT32_C(0x000590D7), UINT32_C(0x000C5AFF), UINT32_C(0x0021F7AF), UINT32_C(0x00667CCB), UINT32_C(0x0038AC0E), UINT32_C(0x0023A769), UINT32_C(0x003E7C3D), UINT32_C(0x0052FB04), UINT32_C(0x002DE7EC), UINT32_C(0x002F29F5), UINT32_C(0x0023207B), UINT32_C(0x000CDF9D), UINT32_C(0x002B4365), UINT32_C(0x003A2FBF), UINT32_C(0x0011FB18), UINT32_C(0x0063AFCF), UINT32_C(0x0015B1DD), UINT32_C(0x0033B40C), UINT32_C(0x00012F31), UINT32_C(0x00087C46), UINT32_C(0x00099C9E), UINT32_C(0x0016BC64), UINT32_C(0x0032AD86)}}, {{UINT32_C(0x00483715), UINT32_C(0x00368333), UINT32_C(0x00246073), UINT32_C(0x005FB045), UINT32_C(0x003A117A), UINT32_C(0x002FBC81), UINT32_C(0x0009FFFF), UINT32_C(0x003826CF), UINT32_C(0x00040665), UINT32_C(0x00248D34), UINT32_C(0x0020F6F7), UINT32_C(0x0064C39E), UINT32_C(0x000DDC2A), UINT32_C(0x0027F7AD), UINT32_C(0x002A0468), UINT32_C(0x004233A3), UINT32_C(0x0039012C), UINT32_C(0x001733DF), UINT32_C(0x002EFFEF), UINT32_C(0x00799097), UINT32_C(0x001FF171), UINT32_C(0x0018ED19), UINT32_C(0x0026CCEE)}, {UINT32_C(0x0046E82C), UINT32_C(0x003D6F41), UINT32_C(0x001B2A06), UINT32_C(0x001FF2C3), UINT32_C(0x003F0F50), UINT32_C(0x0001A930), UINT32_C(0x003BF063), UINT32_C(0x002EE18D), UINT32_C(0x001CCFE3), UINT32_C(0x0036F969), UINT32_C(0x00149AD4), UINT32_C(0x0016E5BE), UINT32_C(0x001F9762), UINT32_C(0x0022D061), UINT32_C(0x0012E3B7), UINT32_C(0x0003E984), UINT32_C(0x003B3250), UINT32_C(0x0038C6B2), UINT32_C(0x00159530), UINT32_C(0x0073861F), UINT32_C(0x00251136), UINT32_C(0x00123D52), UINT32_C(0x0027A418)}}, {{UINT32_C(0x003F3D56), UINT32_C(0x0035580A), UINT32_C(0x00315B32), UINT32_C(0x00683B54), UINT32_C(0x002E6B1B), UINT32_C(0x0030E284), UINT32_C(0x001A147C), UINT32_C(0x0057017E), UINT32_C(0x003F1CE4), UINT32_C(0x000739F3), UINT32_C(0x000BE2D0), UINT32_C(0x00237229), UINT32_C(0x0035DB98), UINT32_C(0x00013B31), UINT32_C(0x000885D5), UINT32_C(0x00734416), UINT32_C(0x002BCB46), UINT32_C(0x0025B709), UINT32_C(0x001F5588), UINT32_C(0x007AFB72), UINT32_C(0x000A3B67), UINT32_C(0x002F51E5), UINT32_C(0x0037F6D4)}, {UINT32_C(0x0058DC2B), UINT32_C(0x003BC578), UINT32_C(0x003EFB94), UINT32_C(0x007AB5C0), UINT32_C(0x0033698C), UINT32_C(0x00384E73), UINT32_C(0x0018C54E), UINT32_C(0x0006017C), UINT32_C(0x00169895), UINT32_C(0x0032C34C), UINT32_C(0x001B77D2), UINT32_C(0x00668DCD), UINT32_C(0x0029D00C), UINT32_C(0x0035521D), UINT32_C(0x000871E7), UINT32_C(0x000881E9), UINT32_C(0x003F9CC2), UINT32_C(0x00273AEA), UINT32_C(0x000AFA2B), UINT32_C(0x00519C25), UINT32_C(0x00284813), UINT32_C(0x002F3204), UINT32_C(0x003A63D7)}}, {{UINT32_C(0x00024391), UINT32_C(0x003BA776), UINT32_C(0x00033874), UINT32_C(0x0034FBCF), UINT32_C(0x00303978), UINT32_C(0x00022D87), UINT32_C(0x0005FC7A), UINT32_C(0x004D7ABB), UINT32_C(0x003F68E7), UINT32_C(0x0017EC8C), UINT32_C(0x00051303), UINT32_C(0x006259DA), UINT32_C(0x0021F4E5), UINT32_C(0x00121632), UINT32_C(0x0031BBFE), UINT32_C(0x0079B8A1), UINT32_C(0x003AE333), UINT32_C(0x0006A0FC), UINT32_C(0x00055308), UINT32_C(0x00601907), UINT32_C(0x002EA623), UINT32_C(0x003B33BA), UINT32_C(0x00349F3F)}, {UINT32_C(0x0001E557), UINT32_C(0x000C8304), UINT32_C(0x0002EDBE), UINT32_C(0x001EFF0A), UINT32_C(0x003B6349), UINT32_C(0x00228976), UINT32_C(0x00317095), UINT32_C(0x00482B44), UINT32_C(0x002287BF), UINT32_C(0x00244B82), UINT32_C(0x003CFA63), UINT32_C(0x001D099B), UINT32_C(0x0023EB12), UINT32_C(0x00188057), UINT32_C(0x000D5E10), UINT32_C(0x005205C6), UINT32_C(0x002A8F5F), UINT32_C(0x002AB102), UINT32_C(0x00151E7A), UINT32_C(0x0031464E), UINT32_C(0x0016ACF5), UINT32_C(0x003C570E), UINT32_C(0x003D5498)}}, {{UINT32_C(0x00528A5E), UINT32_C(0x001D1A41), UINT32_C(0x001D0B03), UINT32_C(0x006E975C), UINT32_C(0x000C8044), UINT32_C(0x0026C6AB), UINT32_C(0x001E178A), UINT32_C(0x0066B411), UINT32_C(0x00047104), UINT32_C(0x00204D14), UINT32_C(0x00228536), UINT32_C(0x000D099C), UINT32_C(0x000838AB), UINT32_C(0x001BC3DC), UINT32_C(0x0029FCE8), UINT32_C(0x00029FD9), UINT32_C(0x002E687A), UINT32_C(0x003E8AE4), UINT32_C(0x002DD424), UINT32_C(0x00432788), UINT32_C(0x0008979F), UINT32_C(0x0039EDD9), UINT32_C(0x001751D6)}, {UINT32_C(0x00492D65), UINT32_C(0x001A7DE1), UINT32_C(0x0014FD58), UINT32_C(0x000C2887), UINT32_C(0x00170FFC), UINT32_C(0x0002CD82), UINT32_C(0x000C7EB0), UINT32_C(0x007BC59A), UINT32_C(0x00027399), UINT32_C(0x0007595A), UINT32_C(0x0006B074), UINT32_C(0x00362BD4), UINT32_C(0x001D090F), UINT32_C(0x0005CC42), UINT32_C(0x00350E6D), UINT32_C(0x000520BA), UINT32_C(0x003511C8), UINT32_C(0x00263B84), UINT32_C(0x0012CB4B), UINT32_C(0x00395148), UINT32_C(0x001557BE), UINT32_C(0x001A47CB), UINT32_C(0x00314464)}}, {{UINT32_C(0x0043F2F2), UINT32_C(0x00194797), UINT32_C(0x00164AF2), UINT32_C(0x0039D872), UINT32_C(0x000104A3), UINT32_C(0x0016929A), UINT32_C(0x00282C81), UINT32_C(0x005F9C2C), UINT32_C(0x002A5D4B), UINT32_C(0x003192B8), UINT32_C(0x002E15CB), UINT32_C(0x004F6E26), UINT32_C(0x001DBE42), UINT32_C(0x0011C09D), UINT32_C(0x0036F64F), UINT32_C(0x004483FB), UINT32_C(0x00060CCE), UINT32_C(0x003148C2), UINT32_C(0x001EE90A), UINT32_C(0x003E6042), UINT32_C(0x002E64B1), UINT32_C(0x002C44F1), UINT32_C(0x002F2B60)}, {UINT32_C(0x005DC792), UINT32_C(0x00397CAD), UINT32_C(0x0018311A), UINT32_C(0x000DB83D), UINT32_C(0x003A7FE0), UINT32_C(0x0036E2B7), UINT32_C(0x00208A0B), UINT32_C(0x00725417), UINT32_C(0x00055265), UINT32_C(0x0028A5C2), UINT32_C(0x002D7738), UINT32_C(0x0008626D), UINT32_C(0x00267142), UINT32_C(0x00335A17), UINT32_C(0x003E2E6A), UINT32_C(0x0023C202), UINT32_C(0x001CEC16), UINT32_C(0x0007C3CA), UINT32_C(0x0026178F), UINT32_C(0x007AF6B1), UINT32_C(0x003EC4B0), UINT32_C(0x000A5C59), UINT32_C(0x0005CC1B)}}, {{UINT32_C(0x006D6CE3), UINT32_C(0x003CDDFA), UINT32_C(0x003536DB), UINT32_C(0x003AFD9F), UINT32_C(0x00097B34), UINT32_C(0x0005ECD4), UINT32_C(0x0034AA4D), UINT32_C(0x003B05FC), UINT32_C(0x0009BBAD), UINT32_C(0x003FDCEE), UINT32_C(0x0033D997), UINT32_C(0x0003C160), UINT32_C(0x003B6D37), UINT32_C(0x00315C67), UINT32_C(0x002362F6), UINT32_C(0x001A9401), UINT32_C(0x0014E9AD), UINT32_C(0x0033DA3E), UINT32_C(0x001BCD3C), UINT32_C(0x002D9F1B), UINT32_C(0x0030DD6A), UINT32_C(0x003EC5E7), UINT32_C(0x00308176)}, {UINT32_C(0x003069BB), UINT32_C(0x0021C759), UINT32_C(0x0015A982), UINT32_C(0x000433F9), UINT32_C(0x000F0415), UINT32_C(0x0019193B), UINT32_C(0x000CB74A), UINT32_C(0x00550A79), UINT32_C(0x002D6049), UINT32_C(0x00207DAA), UINT32_C(0x000496F6), UINT32_C(0x00492EB6), UINT32_C(0x003490BF), UINT32_C(0x003D7E1A), UINT32_C(0x0029D71A), UINT32_C(0x001A99C6), UINT32_C(0x003442EC), UINT32_C(0x001FE876), UINT32_C(0x00307A44), UINT32_C(0x005B4A4F), UINT32_C(0x000DC29C), UINT32_C(0x0038C4EF), UINT32_C(0x002E915D)}}, {{UINT32_C(0x000BEB8C), UINT32_C(0x00061A56), UINT32_C(0x000D8268), UINT32_C(0x00421E9B), UINT32_C(0x001AD305), UINT32_C(0x002C0C54), UINT32_C(0x002B4A5F), UINT32_C(0x003DF358), UINT32_C(0x001523F3), UINT32_C(0x0028B368), UINT32_C(0x00276FD0), UINT32_C(0x00442093), UINT32_C(0x000817D3), UINT32_C(0x002AE36B), UINT32_C(0x003C22DE), UINT32_C(0x0058669C), UINT32_C(0x000D7F6C), UINT32_C(0x00279A1A), UINT32_C(0x000D107C), UINT32_C(0x0021DE92), UINT32_C(0x00246CC9), UINT32_C(0x0034B4A4), UINT32_C(0x000EFACA)}, {UINT32_C(0x00694EEC), UINT32_C(0x003C5044), UINT32_C(0x0016ECB7), UINT32_C(0x00412A48), UINT32_C(0x0017E21D), UINT32_C(0x001C1E82), UINT32_C(0x002BA6CD), UINT32_C(0x001CF647), UINT32_C(0x00306F34), UINT32_C(0x00146470), UINT32_C(0x00196674), UINT32_C(0x001418A3), UINT32_C(0x002CFE68), UINT32_C(0x0026B0A5), UINT32_C(0x000747E1), UINT32_C(0x0000076E), UINT32_C(0x002C52FE), UINT32_C(0x00381158), UINT32_C(0x003CB4BD), UINT32_C(0x000E909B), UINT32_C(0x0009F542), UINT32_C(0x000CB347), UINT32_C(0x0016D579)}}, {{UINT32_C(0x0069D866), UINT32_C(0x0027D233), UINT32_C(0x0035A8F4), UINT32_C(0x006BC550), UINT32_C(0x0018DA15), UINT32_C(0x0030CE9E), UINT32_C(0x0015D2E1), UINT32_C(0x005388CB), UINT32_C(0x0032AC42), UINT32_C(0x001EDFA9), UINT32_C(0x00041ADC), UINT32_C(0x000232D9), UINT32_C(0x00278158), UINT32_C(0x003B9C91), UINT32_C(0x001DD2A0), UINT32_C(0x0033F780), UINT32_C(0x003E5C50), UINT32_C(0x00075CF3), UINT32_C(0x0015E7C2), UINT32_C(0x00440ADA), UINT32_C(0x0016D15D), UINT32_C(0x000586C1), UINT32_C(0x002A016C)}, {UINT32_C(0x004AE04A), UINT32_C(0x003E7BC9), UINT32_C(0x00096110), UINT32_C(0x00066932), UINT32_C(0x001B3038), UINT32_C(0x001A7311), UINT32_C(0x002F1AEF), UINT32_C(0x0068EA21), UINT32_C(0x00095E5D), UINT32_C(0x0009883B), UINT32_C(0x00033990), UINT32_C(0x0024C0B3), UINT32_C(0x0029A84D), UINT32_C(0x0005EBA4), UINT32_C(0x00311E64), UINT32_C(0x0013FEAE), UINT32_C(0x0008156B), UINT32_C(0x002F4EE6), UINT32_C(0x000DF329), UINT32_C(0x001AE70A), UINT32_C(0x002847DD), UINT32_C(0x0018E0D7), UINT32_C(0x002BD42E)}}, {{UINT32_C(0x000B9710), UINT32_C(0x001F475F), UINT32_C(0x000999F5), UINT32_C(0x0032B55C), UINT32_C(0x002E7C12), UINT32_C(0x00264CED), UINT32_C(0x00094F0A), UINT32_C(0x005A4E16), UINT32_C(0x000BECA0), UINT32_C(0x00349B97), UINT32_C(0x003CE972), UINT32_C(0x002B59D3), UINT32_C(0x002F203F), UINT32_C(0x000F211F), UINT32_C(0x003B07F1), UINT32_C(0x00786C83), UINT32_C(0x0001D952), UINT32_C(0x002B793E), UINT32_C(0x0033C2B1), UINT32_C(0x005E8A36), UINT32_C(0x0036E5E2), UINT32_C(0x00156A46), UINT32_C(0x00362C8F)}, {UINT32_C(0x00317544), UINT32_C(0x000AEC08), UINT32_C(0x003109AC), UINT32_C(0x004EC46A), UINT32_C(0x00214545), UINT32_C(0x00338B7B), UINT32_C(0x0016C802), UINT32_C(0x004E4271), UINT32_C(0x003A07D9), UINT32_C(0x00019D25), UINT32_C(0x00198775), UINT32_C(0x0049A8C4), UINT32_C(0x00215656), UINT32_C(0x0009570A), UINT32_C(0x0004BCC8), UINT32_C(0x006ED97E), UINT32_C(0x003721B2), UINT32_C(0x001AB6C7), UINT32_C(0x00219EDF), UINT32_C(0x004291B1), UINT32_C(0x0021788D), UINT32_C(0x003CA653), UINT32_C(0x002C51F0)}}, {{UINT32_C(0x00549A73), UINT32_C(0x001585E0), UINT32_C(0x001219AF), UINT32_C(0x00278B73), UINT32_C(0x000AB916), UINT32_C(0x003FB445), UINT32_C(0x003FC327), UINT32_C(0x00487904), UINT32_C(0x0008835A), UINT32_C(0x0013EBDD), UINT32_C(0x002B6722), UINT32_C(0x005F61F3), UINT32_C(0x0033C0B6), UINT32_C(0x00387E43), UINT32_C(0x000DC4FF), UINT32_C(0x00220AA8), UINT32_C(0x002411BD), UINT32_C(0x002D9844), UINT32_C(0x003BD35D), UINT32_C(0x000878BC), UINT32_C(0x001548F6), UINT32_C(0x003F932E), UINT32_C(0x00189EAF)}, {UINT32_C(0x00243BBC), UINT32_C(0x00080398), UINT32_C(0x0010A82F), UINT32_C(0x006AB89B), UINT32_C(0x00021339), UINT32_C(0x00291FC3), UINT32_C(0x00145BA0), UINT32_C(0x005378D0), UINT32_C(0x0015B299), UINT32_C(0x00057581), UINT32_C(0x002112C0), UINT32_C(0x00642C8E), UINT32_C(0x003981D5), UINT32_C(0x0020F113), UINT32_C(0x00354642), UINT32_C(0x007C7721), UINT32_C(0x000CEDDA), UINT32_C(0x00220C78), UINT32_C(0x000FA861), UINT32_C(0x004B62AA), UINT32_C(0x000C4398), UINT32_C(0x001A528A), UINT32_C(0x001FA9C0)}}, {{UINT32_C(0x00213FA6), UINT32_C(0x00303120), UINT32_C(0x002AB912), UINT32_C(0x00604140), UINT32_C(0x0025C250), UINT32_C(0x003C2A6C), UINT32_C(0x00322291), UINT32_C(0x0013477E), UINT32_C(0x001F06C8), UINT32_C(0x003B3F6A), UINT32_C(0x00283A23), UINT32_C(0x0038B2D8), UINT32_C(0x0029DD45), UINT32_C(0x002EBAA8), UINT32_C(0x001B3724), UINT32_C(0x00678E35), UINT32_C(0x00096D14), UINT32_C(0x0027B787), UINT32_C(0x0007AA23), UINT32_C(0x0025F092), UINT32_C(0x002170F1), UINT32_C(0x001BC371), UINT32_C(0x003AED1A)}, {UINT32_C(0x00425B32), UINT32_C(0x00286AA0), UINT32_C(0x00023581), UINT32_C(0x006EE73F), UINT32_C(0x001E5A3B), UINT32_C(0x0030D82F), UINT32_C(0x002D1CA8), UINT32_C(0x006A5FF6), UINT32_C(0x001470F9), UINT32_C(0x00161816), UINT32_C(0x002350CB), UINT32_C(0x00113D17), UINT32_C(0x003F9A5E), UINT32_C(0x003C7C27), UINT32_C(0x00276EA7), UINT32_C(0x000CC5E8), UINT32_C(0x003022F0), UINT32_C(0x00293E6C), UINT32_C(0x001948B1), UINT32_C(0x00043775), UINT32_C(0x003051DB), UINT32_C(0x003D4E8F), UINT32_C(0x0016EAD0)}}, }, { {{UINT32_C(0x000E7229), UINT32_C(0x001A6628), UINT32_C(0x003C1B89), UINT32_C(0x001DEF3A), UINT32_C(0x0005F8AB), UINT32_C(0x00178896), UINT32_C(0x00120D1F), UINT32_C(0x00035812), UINT32_C(0x002204C7), UINT32_C(0x0025B252), UINT32_C(0x002627D9), UINT32_C(0x00295A6A), UINT32_C(0x00064F84), UINT32_C(0x002DD46E), UINT32_C(0x0018C55B), UINT32_C(0x0076AC5A), UINT32_C(0x0024BECB), UINT32_C(0x000D610A), UINT32_C(0x003CF93D), UINT32_C(0x0025BA10), UINT32_C(0x0001D8FF), UINT32_C(0x00111DC7), UINT32_C(0x001BA971)}, {UINT32_C(0x00079874), UINT32_C(0x002A9BC0), UINT32_C(0x000AE07A), UINT32_C(0x002B976D), UINT32_C(0x0037698A), UINT32_C(0x001EFD5D), UINT32_C(0x00355FBE), UINT32_C(0x000FC35F), UINT32_C(0x003A64A2), UINT32_C(0x0037BE03), UINT32_C(0x002E85B5), UINT32_C(0x001D3118), UINT32_C(0x0027921A), UINT32_C(0x000C7471), UINT32_C(0x002BCAB5), UINT32_C(0x0033AB97), UINT32_C(0x0001C915), UINT32_C(0x0019A901), UINT32_C(0x001D2E71), UINT32_C(0x002A197E), UINT32_C(0x00115A8D), UINT32_C(0x0024BF73), UINT32_C(0x0003CC85)}}, {{UINT32_C(0x002895B2), UINT32_C(0x00320735), UINT32_C(0x000CFB47), UINT32_C(0x003DB761), UINT32_C(0x0024C433), UINT32_C(0x0013E23C), UINT32_C(0x002BF3DF), UINT32_C(0x0050A160), UINT32_C(0x000ED8DF), UINT32_C(0x00023DC8), UINT32_C(0x0022ADA6), UINT32_C(0x0055A62F), UINT32_C(0x00118219), UINT32_C(0x00055FC7), UINT32_C(0x0016FC9A), UINT32_C(0x0019CDAC), UINT32_C(0x001F6533), UINT32_C(0x0039DEF8), UINT32_C(0x00365EB0), UINT32_C(0x001DE6A4), UINT32_C(0x002EC097), UINT32_C(0x0014ABA8), UINT32_C(0x003B186E)}, {UINT32_C(0x0076F84F), UINT32_C(0x000A6360), UINT32_C(0x00389AFC), UINT32_C(0x007F347C), UINT32_C(0x0010F3A6), UINT32_C(0x0020172F), UINT32_C(0x002456C5), UINT32_C(0x0074D6FD), UINT32_C(0x003EBC5A), UINT32_C(0x0015702D), UINT32_C(0x002C322D), UINT32_C(0x0062EC4A), UINT32_C(0x001C6321), UINT32_C(0x001ECEE0), UINT32_C(0x000C4DCD), UINT32_C(0x00385F54), UINT32_C(0x0015A2F6), UINT32_C(0x003EA398), UINT32_C(0x00154A9E), UINT32_C(0x0035549D), UINT32_C(0x002902A3), UINT32_C(0x000E87D8), UINT32_C(0x002197A4)}}, {{UINT32_C(0x000E5E61), UINT32_C(0x0004D26C), UINT32_C(0x0006E668), UINT32_C(0x00001B95), UINT32_C(0x0022CEB8), UINT32_C(0x002AD340), UINT32_C(0x00178FFF), UINT32_C(0x0068E92D), UINT32_C(0x001CE560), UINT32_C(0x00314785), UINT32_C(0x003C340C), UINT32_C(0x000E0359), UINT32_C(0x0012093F), UINT32_C(0x00126D05), UINT32_C(0x0001A73F), UINT32_C(0x006AADBB), UINT32_C(0x002D01CE), UINT32_C(0x001E4C4C), UINT32_C(0x0019B1E1), UINT32_C(0x001E252E), UINT32_C(0x0027C32F), UINT32_C(0x0027F7C8), UINT32_C(0x00274554)}, {UINT32_C(0x0047C011), UINT32_C(0x0016AC83), UINT32_C(0x001C5FD0), UINT32_C(0x002B42DE), UINT32_C(0x00108C9B), UINT32_C(0x003E5C82), UINT32_C(0x001F47C2), UINT32_C(0x0067643D), UINT32_C(0x00253B0C), UINT32_C(0x003B23F4), UINT32_C(0x00285E6A), UINT32_C(0x0000127F), UINT32_C(0x001AFEDD), UINT32_C(0x001639C8), UINT32_C(0x0035C65D), UINT32_C(0x003890F9), UINT32_C(0x0026D0AD), UINT32_C(0x0024695D), UINT32_C(0x0033FF31), UINT32_C(0x00166142), UINT32_C(0x0032EBDF), UINT32_C(0x000D509E), UINT32_C(0x00190DE4)}}, {{UINT32_C(0x005E3F2E), UINT32_C(0x0010C08C), UINT32_C(0x0010E26F), UINT32_C(0x0025A315), UINT32_C(0x0009E64F), UINT32_C(0x00002605), UINT32_C(0x003601E3), UINT32_C(0x00634D76), UINT32_C(0x003BFCD4), UINT32_C(0x00123253), UINT32_C(0x001D94E0), UINT32_C(0x003E9F61), UINT32_C(0x0025A1E6), UINT32_C(0x00075853), UINT32_C(0x001EC114), UINT32_C(0x00470547), UINT32_C(0x003E437A), UINT32_C(0x0019ED05), UINT32_C(0x00061623), UINT32_C(0x0038D391), UINT32_C(0x0031CCDE), UINT32_C(0x003374B4), UINT32_C(0x0007C7B9)}, {UINT32_C(0x00512F62), UINT32_C(0x002E17FE), UINT32_C(0x0036CB08), UINT32_C(0x001BDB9E), UINT32_C(0x00394D71), UINT32_C(0x002A7EF7), UINT32_C(0x002E6818), UINT32_C(0x005F5A88), UINT32_C(0x00311E36), UINT32_C(0x002A6BB1), UINT32_C(0x0019CD43), UINT32_C(0x0045542F), UINT32_C(0x002B8CEA), UINT32_C(0x000FA346), UINT32_C(0x002E1A7A), UINT32_C(0x000BD16F), UINT32_C(0x00245C8D), UINT32_C(0x00314F13), UINT32_C(0x000FFBE8), UINT32_C(0x0056B54A), UINT32_C(0x00382922), UINT32_C(0x0035F251), UINT32_C(0x003ACEB3)}}, {{UINT32_C(0x003E11B5), UINT32_C(0x0002716B), UINT32_C(0x002750E4), UINT32_C(0x003740A5), UINT32_C(0x00338906), UINT32_C(0x0013B5F0), UINT32_C(0x0027CFAE), UINT32_C(0x004AA6D3), UINT32_C(0x0039E3B9), UINT32_C(0x002D1B9F), UINT32_C(0x000035D9), UINT32_C(0x001E459B), UINT32_C(0x000CF781), UINT32_C(0x0020167F), UINT32_C(0x001BB777), UINT32_C(0x0038BA4C), UINT32_C(0x0028F2E3), UINT32_C(0x0037D8D5), UINT32_C(0x001ECF87), UINT32_C(0x004E758A), UINT32_C(0x002AA667), UINT32_C(0x002E97A6), UINT32_C(0x00352507)}, {UINT32_C(0x00283BBD), UINT32_C(0x00263775), UINT32_C(0x000C63C9), UINT32_C(0x00001EE4), UINT32_C(0x003ACBBF), UINT32_C(0x00162A58), UINT32_C(0x0007B4FE), UINT32_C(0x00351728), UINT32_C(0x001973F1), UINT32_C(0x002770E0), UINT32_C(0x003116FA), UINT32_C(0x0046EBBD), UINT32_C(0x002C2896), UINT32_C(0x0036E872), UINT32_C(0x0013137C), UINT32_C(0x002F444F), UINT32_C(0x003B3375), UINT32_C(0x0003C6AB), UINT32_C(0x000FCBE7), UINT32_C(0x006D9063), UINT32_C(0x0020E15A), UINT32_C(0x000D5454), UINT32_C(0x0037BDB0)}}, {{UINT32_C(0x00439E00), UINT32_C(0x001E43D1), UINT32_C(0x003DE476), UINT32_C(0x00148953), UINT32_C(0x0025C9E8), UINT32_C(0x001B6D92), UINT32_C(0x000AA405), UINT32_C(0x0040CB85), UINT32_C(0x00310A15), UINT32_C(0x003D0034), UINT32_C(0x001ACFB7), UINT32_C(0x00171502), UINT32_C(0x0034B2C2), UINT32_C(0x0027FB5D), UINT32_C(0x003B0085), UINT32_C(0x00344898), UINT32_C(0x003CA33C), UINT32_C(0x001BAF56), UINT32_C(0x00021B32), UINT32_C(0x00448603), UINT32_C(0x00091BA6), UINT32_C(0x000BAFC4), UINT32_C(0x0013D5A4)}, {UINT32_C(0x00780D50), UINT32_C(0x0004D808), UINT32_C(0x002F1F9D), UINT32_C(0x006E9B4E), UINT32_C(0x001EDD73), UINT32_C(0x000A2602), UINT32_C(0x0032564D), UINT32_C(0x000A5962), UINT32_C(0x002D65F0), UINT32_C(0x001FF6E8), UINT32_C(0x00263DE7), UINT32_C(0x0028B02D), UINT32_C(0x000E0A8D), UINT32_C(0x002AE55E), UINT32_C(0x002EAA0B), UINT32_C(0x00508B9C), UINT32_C(0x002CA2CC), UINT32_C(0x0039B8A4), UINT32_C(0x000CF2D9), UINT32_C(0x002B0C05), UINT32_C(0x0036C4C9), UINT32_C(0x00115406), UINT32_C(0x003A4458)}}, {{UINT32_C(0x001A9FEF), UINT32_C(0x0017C5B8), UINT32_C(0x0014F927), UINT32_C(0x0033E7CA), UINT32_C(0x001DE04B), UINT32_C(0x0021489F), UINT32_C(0x003223E7), UINT32_C(0x007F4816), UINT32_C(0x0016233A), UINT32_C(0x000E408A), UINT32_C(0x0025911C), UINT32_C(0x006CFEEF), UINT32_C(0x00162D98), UINT32_C(0x001FB3B2), UINT32_C(0x000CAFE2), UINT32_C(0x00140C69), UINT32_C(0x00373513), UINT32_C(0x0005EFAF), UINT32_C(0x00318C8D), UINT32_C(0x001ED26D), UINT32_C(0x0023E013), UINT32_C(0x000E235E), UINT32_C(0x002D6FB0)}, {UINT32_C(0x004D9693), UINT32_C(0x0018038F), UINT32_C(0x001CF661), UINT32_C(0x002F57EB), UINT32_C(0x001E346F), UINT32_C(0x0030F7B0), UINT32_C(0x001DD4F8), UINT32_C(0x002D4964), UINT32_C(0x003D7230), UINT32_C(0x000FA730), UINT32_C(0x001D142C), UINT32_C(0x002276EA), UINT32_C(0x001BA178), UINT32_C(0x001466BF), UINT32_C(0x000BF8C5), UINT32_C(0x0040D605), UINT32_C(0x002D85AB), UINT32_C(0x001F11D4), UINT32_C(0x0016C7D7), UINT32_C(0x000AA5D0), UINT32_C(0x00359550), UINT32_C(0x0029A075), UINT32_C(0x00122CA4)}}, {{UINT32_C(0x0072B845), UINT32_C(0x001BEE64), UINT32_C(0x0030577D), UINT32_C(0x006BAF51), UINT32_C(0x0024885D), UINT32_C(0x002BA5B1), UINT32_C(0x00236704), UINT32_C(0x000346DC), UINT32_C(0x002A639E), UINT32_C(0x003AF226), UINT32_C(0x002EA89E), UINT32_C(0x0026AF84), UINT32_C(0x00004D4C), UINT32_C(0x0003640E), UINT32_C(0x001D8986), UINT32_C(0x000E2826), UINT32_C(0x000D1018), UINT32_C(0x002CB972), UINT32_C(0x0009688A), UINT32_C(0x000489A0), UINT32_C(0x002E4F56), UINT32_C(0x003DD33C), UINT32_C(0x003609BA)}, {UINT32_C(0x001692AF), UINT32_C(0x002C1F96), UINT32_C(0x003792D8), UINT32_C(0x00069079), UINT32_C(0x0016ED4A), UINT32_C(0x003B5304), UINT32_C(0x000FA6CC), UINT32_C(0x0018593E), UINT32_C(0x0000C409), UINT32_C(0x0004E36E), UINT32_C(0x0003E4B0), UINT32_C(0x0018A207), UINT32_C(0x00146BF4), UINT32_C(0x001CBDA5), UINT32_C(0x0011B878), UINT32_C(0x0062A10E), UINT32_C(0x0002D181), UINT32_C(0x001D3599), UINT32_C(0x00185943), UINT32_C(0x00609AB4), UINT32_C(0x002218D4), UINT32_C(0x003653F8), UINT32_C(0x0019F9FD)}}, {{UINT32_C(0x002ED6C7), UINT32_C(0x003C5236), UINT32_C(0x00186569), UINT32_C(0x00428772), UINT32_C(0x003A69E3), UINT32_C(0x00087BF9), UINT32_C(0x003E9E5F), UINT32_C(0x003AE8B4), UINT32_C(0x003504F3), UINT32_C(0x000A8276), UINT32_C(0x003C584F), UINT32_C(0x0069143D), UINT32_C(0x002C8325), UINT32_C(0x000FFE9F), UINT32_C(0x00191129), UINT32_C(0x00319B36), UINT32_C(0x00115E02), UINT32_C(0x0016E07A), UINT32_C(0x002FA414), UINT32_C(0x0014619E), UINT32_C(0x0012CD22), UINT32_C(0x002D0E0D), UINT32_C(0x00125784)}, {UINT32_C(0x00642A65), UINT32_C(0x00203D55), UINT32_C(0x0016C315), UINT32_C(0x003CF7A9), UINT32_C(0x003071DE), UINT32_C(0x00106DAE), UINT32_C(0x000B2C7D), UINT32_C(0x0047BA31), UINT32_C(0x002CA388), UINT32_C(0x0029FBFC), UINT32_C(0x00390EAC), UINT32_C(0x0057CD61), UINT32_C(0x0021CF36), UINT32_C(0x0034A05C), UINT32_C(0x00008B13), UINT32_C(0x00793DB5), UINT32_C(0x0017E8E7), UINT32_C(0x0035D12F), UINT32_C(0x003D6716), UINT32_C(0x004C990F), UINT32_C(0x003B6448), UINT32_C(0x000A7F2C), UINT32_C(0x0025B5C5)}}, {{UINT32_C(0x005E98D9), UINT32_C(0x0026DFA6), UINT32_C(0x000864C2), UINT32_C(0x002E69DF), UINT32_C(0x00364C2C), UINT32_C(0x000D5FD3), UINT32_C(0x001356CE), UINT32_C(0x00454A4C), UINT32_C(0x003B0302), UINT32_C(0x0016D23C), UINT32_C(0x000B4AAA), UINT32_C(0x0057F380), UINT32_C(0x0007CFAC), UINT32_C(0x0027103B), UINT32_C(0x000CAA2B), UINT32_C(0x005B3BDE), UINT32_C(0x000D252E), UINT32_C(0x002FC387), UINT32_C(0x001B39E0), UINT32_C(0x003C0113), UINT32_C(0x0009ADA1), UINT32_C(0x002D5182), UINT32_C(0x00029B37)}, {UINT32_C(0x003B5C86), UINT32_C(0x002985B6), UINT32_C(0x00193F46), UINT32_C(0x007D3FF4), UINT32_C(0x0017EA07), UINT32_C(0x003167A4), UINT32_C(0x0028ECD5), UINT32_C(0x00102560), UINT32_C(0x0014D8CD), UINT32_C(0x0009D70A), UINT32_C(0x0036C65B), UINT32_C(0x0077810C), UINT32_C(0x0038B843), UINT32_C(0x000AAA4F), UINT32_C(0x000423CC), UINT32_C(0x00609B5A), UINT32_C(0x000B047D), UINT32_C(0x0032FCF2), UINT32_C(0x00341089), UINT32_C(0x002F82CA), UINT32_C(0x0012D7A7), UINT32_C(0x002D3F89), UINT32_C(0x00189DD5)}}, {{UINT32_C(0x0066582F), UINT32_C(0x00257453), UINT32_C(0x00210314), UINT32_C(0x0062A225), UINT32_C(0x00165C3B), UINT32_C(0x002E6592), UINT32_C(0x002F1436), UINT32_C(0x005EE3F8), UINT32_C(0x0007F555), UINT32_C(0x0020F441), UINT32_C(0x0034ED55), UINT32_C(0x00308313), UINT32_C(0x0034A8DF), UINT32_C(0x0019301D), UINT32_C(0x00173FDB), UINT32_C(0x00144214), UINT32_C(0x0019892A), UINT32_C(0x0027897A), UINT32_C(0x0021A061), UINT32_C(0x007D24B8), UINT32_C(0x0037F3B1), UINT32_C(0x00248CC2), UINT32_C(0x00373DB3)}, {UINT32_C(0x000BF27A), UINT32_C(0x0039D46B), UINT32_C(0x001AD6FE), UINT32_C(0x00475AC8), UINT32_C(0x00063B06), UINT32_C(0x00233FD2), UINT32_C(0x0035C0AF), UINT32_C(0x006C6594), UINT32_C(0x002F3CD2), UINT32_C(0x0015DF1B), UINT32_C(0x002DF565), UINT32_C(0x0022D72E), UINT32_C(0x0004B112), UINT32_C(0x00022C9B), UINT32_C(0x00217D30), UINT32_C(0x00586404), UINT32_C(0x00175C8A), UINT32_C(0x003CD70E), UINT32_C(0x003F9D96), UINT32_C(0x007351B7), UINT32_C(0x00328F89), UINT32_C(0x00339645), UINT32_C(0x00147D37)}}, {{UINT32_C(0x0006ACC7), UINT32_C(0x0017F7BC), UINT32_C(0x00043BCE), UINT32_C(0x00259C1D), UINT32_C(0x002CDB37), UINT32_C(0x0007238C), UINT32_C(0x00375E6F), UINT32_C(0x00022971), UINT32_C(0x001B4942), UINT32_C(0x003E301A), UINT32_C(0x00389E0C), UINT32_C(0x0014070B), UINT32_C(0x0029DEFC), UINT32_C(0x002DDAC4), UINT32_C(0x00236616), UINT32_C(0x0000A23A), UINT32_C(0x003BA71B), UINT32_C(0x00230957), UINT32_C(0x002229EB), UINT32_C(0x0073C8F9), UINT32_C(0x0025DF6A), UINT32_C(0x002BADCB), UINT32_C(0x000F1344)}, {UINT32_C(0x001BEE3F), UINT32_C(0x001FA015), UINT32_C(0x000CFE6E), UINT32_C(0x006FB0F7), UINT32_C(0x003C54F5), UINT32_C(0x003503D8), UINT32_C(0x000B28FC), UINT32_C(0x0001F5C0), UINT32_C(0x00104298), UINT32_C(0x003AF43A), UINT32_C(0x003A5408), UINT32_C(0x0018DAC0), UINT32_C(0x0032EE35), UINT32_C(0x0031C65F), UINT32_C(0x000B31F5), UINT32_C(0x0018B829), UINT32_C(0x000133FD), UINT32_C(0x00280CF1), UINT32_C(0x00206DF2), UINT32_C(0x0009D76F), UINT32_C(0x001DC987), UINT32_C(0x00365635), UINT32_C(0x0014E280)}}, {{UINT32_C(0x0052A016), UINT32_C(0x0006F577), UINT32_C(0x001C0241), UINT32_C(0x005E5024), UINT32_C(0x000DA944), UINT32_C(0x000855A1), UINT32_C(0x002A89F3), UINT32_C(0x000E86B5), UINT32_C(0x000CEF59), UINT32_C(0x003E508E), UINT32_C(0x00384B7E), UINT32_C(0x0032AAA5), UINT32_C(0x0018FF8F), UINT32_C(0x002CD18E), UINT32_C(0x00040821), UINT32_C(0x00189644), UINT32_C(0x002DEB40), UINT32_C(0x00132C27), UINT32_C(0x000B3030), UINT32_C(0x0054A603), UINT32_C(0x0006BBED), UINT32_C(0x0031D103), UINT32_C(0x002F003F)}, {UINT32_C(0x001E656D), UINT32_C(0x002FF583), UINT32_C(0x0012A61F), UINT32_C(0x00346DBE), UINT32_C(0x002A6FB1), UINT32_C(0x0011FD3B), UINT32_C(0x0001276C), UINT32_C(0x006148C0), UINT32_C(0x00016501), UINT32_C(0x000C96D4), UINT32_C(0x003DB630), UINT32_C(0x00492C8D), UINT32_C(0x00057FDE), UINT32_C(0x000CF96C), UINT32_C(0x000164CA), UINT32_C(0x004FCB96), UINT32_C(0x00385504), UINT32_C(0x003E5188), UINT32_C(0x00286382), UINT32_C(0x0041E093), UINT32_C(0x0002DAB5), UINT32_C(0x0010BB0F), UINT32_C(0x0000784C)}}, {{UINT32_C(0x0075746D), UINT32_C(0x003F9D7D), UINT32_C(0x002D54D0), UINT32_C(0x000CA2BA), UINT32_C(0x0034E004), UINT32_C(0x00145EDC), UINT32_C(0x0024946A), UINT32_C(0x002B2267), UINT32_C(0x0029D5D7), UINT32_C(0x001BD561), UINT32_C(0x00040FF1), UINT32_C(0x007A8818), UINT32_C(0x000347CA), UINT32_C(0x00368968), UINT32_C(0x003DFBFD), UINT32_C(0x0045E779), UINT32_C(0x0028CB15), UINT32_C(0x0006FE47), UINT32_C(0x002AE3AD), UINT32_C(0x000C1917), UINT32_C(0x001A6E74), UINT32_C(0x000C0AAF), UINT32_C(0x001EAD78)}, {UINT32_C(0x0013957A), UINT32_C(0x000B13A3), UINT32_C(0x002FC29D), UINT32_C(0x00318258), UINT32_C(0x000316AF), UINT32_C(0x00159186), UINT32_C(0x002F9ACE), UINT32_C(0x002617A1), UINT32_C(0x002DA110), UINT32_C(0x0024827F), UINT32_C(0x0014B7E3), UINT32_C(0x005A1108), UINT32_C(0x002AD5AB), UINT32_C(0x001F8CD8), UINT32_C(0x00280CBB), UINT32_C(0x000F3352), UINT32_C(0x0021699D), UINT32_C(0x003D79ED), UINT32_C(0x000F2342), UINT32_C(0x000A46DF), UINT32_C(0x000765C5), UINT32_C(0x001562AA), UINT32_C(0x001933BE)}}, {{UINT32_C(0x00771DC4), UINT32_C(0x00105963), UINT32_C(0x0013309E), UINT32_C(0x002D5F9C), UINT32_C(0x003816E4), UINT32_C(0x00183FD1), UINT32_C(0x0024CC65), UINT32_C(0x004C32C8), UINT32_C(0x00023344), UINT32_C(0x00127581), UINT32_C(0x00170A08), UINT32_C(0x003E271B), UINT32_C(0x00376C4A), UINT32_C(0x00378FA8), UINT32_C(0x0038BD67), UINT32_C(0x006DD9F1), UINT32_C(0x0013CB77), UINT32_C(0x00110A9A), UINT32_C(0x0011B015), UINT32_C(0x003AB2F7), UINT32_C(0x00203C14), UINT32_C(0x0037D1D9), UINT32_C(0x0017F513)}, {UINT32_C(0x00383DC1), UINT32_C(0x0032B2DC), UINT32_C(0x003F0168), UINT32_C(0x00279081), UINT32_C(0x001E4F82), UINT32_C(0x00183A42), UINT32_C(0x000BFB80), UINT32_C(0x005A12C9), UINT32_C(0x00186FCD), UINT32_C(0x002E7365), UINT32_C(0x0026CDDE), UINT32_C(0x007856A6), UINT32_C(0x00241080), UINT32_C(0x000BB921), UINT32_C(0x003E1A85), UINT32_C(0x0062D604), UINT32_C(0x000BB5D8), UINT32_C(0x0026B482), UINT32_C(0x0019F5D5), UINT32_C(0x0028F3DC), UINT32_C(0x00143FEB), UINT32_C(0x003E5ADA), UINT32_C(0x00253DEF)}}, {{UINT32_C(0x006BA123), UINT32_C(0x000A781D), UINT32_C(0x000B7D51), UINT32_C(0x00740F38), UINT32_C(0x002940F6), UINT32_C(0x00157C6F), UINT32_C(0x003E02CE), UINT32_C(0x007207C6), UINT32_C(0x001B64BC), UINT32_C(0x00372F37), UINT32_C(0x003A87CB), UINT32_C(0x002D7712), UINT32_C(0x001B97D4), UINT32_C(0x00391CB2), UINT32_C(0x003AB655), UINT32_C(0x00002E6F), UINT32_C(0x002C7D2F), UINT32_C(0x002AA52F), UINT32_C(0x0032378F), UINT32_C(0x0072D63D), UINT32_C(0x0038FA33), UINT32_C(0x003C9DB3), UINT32_C(0x0008013D)}, {UINT32_C(0x0002066C), UINT32_C(0x0035DFEF), UINT32_C(0x001BC43F), UINT32_C(0x0029FB46), UINT32_C(0x0013F28B), UINT32_C(0x002A9E1C), UINT32_C(0x00316CE9), UINT32_C(0x002537F0), UINT32_C(0x002F07AC), UINT32_C(0x0037B3FA), UINT32_C(0x000BB76B), UINT32_C(0x0049349E), UINT32_C(0x00330713), UINT32_C(0x002755E1), UINT32_C(0x002928A9), UINT32_C(0x00636D8A), UINT32_C(0x0036549D), UINT32_C(0x00119414), UINT32_C(0x002CF725), UINT32_C(0x0037181E), UINT32_C(0x0001A2BC), UINT32_C(0x0019DA46), UINT32_C(0x003B690A)}}, }, { {{UINT32_C(0x0032A280), UINT32_C(0x001CB2CC), UINT32_C(0x000F9796), UINT32_C(0x00007D75), UINT32_C(0x001AF2EB), UINT32_C(0x003C758A), UINT32_C(0x003A6728), UINT32_C(0x0043B3E9), UINT32_C(0x00188CE5), UINT32_C(0x0029D0A4), UINT32_C(0x000113A0), UINT32_C(0x0022343F), UINT32_C(0x000890D8), UINT32_C(0x0012176A), UINT32_C(0x002971B0), UINT32_C(0x00785A55), UINT32_C(0x0001C0B7), UINT32_C(0x00273262), UINT32_C(0x002D06D6), UINT32_C(0x0006C271), UINT32_C(0x001E07EA), UINT32_C(0x003A1542), UINT32_C(0x0026C181)}, {UINT32_C(0x00414498), UINT32_C(0x0014CB47), UINT32_C(0x000FFCA6), UINT32_C(0x002D51CC), UINT32_C(0x000008D4), UINT32_C(0x00244EA0), UINT32_C(0x002F062C), UINT32_C(0x000336A8), UINT32_C(0x00150722), UINT32_C(0x0019F588), UINT32_C(0x000CB860), UINT32_C(0x00604BC3), UINT32_C(0x0008902B), UINT32_C(0x003D5ADC), UINT32_C(0x00088D53), UINT32_C(0x000A2728), UINT32_C(0x003852C8), UINT32_C(0x001CE562), UINT32_C(0x003D7474), UINT32_C(0x000E17F9), UINT32_C(0x000ADBDE), UINT32_C(0x0002F321), UINT32_C(0x002B5370)}}, {{UINT32_C(0x00720956), UINT32_C(0x0012FE7D), UINT32_C(0x003A4010), UINT32_C(0x0005E1F1), UINT32_C(0x002FCF68), UINT32_C(0x0001CA0D), UINT32_C(0x001F9A09), UINT32_C(0x00476576), UINT32_C(0x001BBE6F), UINT32_C(0x00157A43), UINT32_C(0x00041B45), UINT32_C(0x0069B21A), UINT32_C(0x0011A874), UINT32_C(0x00237329), UINT32_C(0x0010ABF2), UINT32_C(0x004A1BCF), UINT32_C(0x00248B43), UINT32_C(0x0039B567), UINT32_C(0x00162490), UINT32_C(0x002F2BDB), UINT32_C(0x00296C0C), UINT32_C(0x000A4FEE), UINT32_C(0x0004AD98)}, {UINT32_C(0x004454EB), UINT32_C(0x002C8099), UINT32_C(0x0010E84D), UINT32_C(0x002E2241), UINT32_C(0x003207CA), UINT32_C(0x000F5910), UINT32_C(0x0003F04F), UINT32_C(0x00392613), UINT32_C(0x000ADE9F), UINT32_C(0x003DBD57), UINT32_C(0x0030B86D), UINT32_C(0x0009CC16), UINT32_C(0x000A209A), UINT32_C(0x003C2AFA), UINT32_C(0x00035E76), UINT32_C(0x005F940A), UINT32_C(0x002B2161), UINT32_C(0x000C7D9D), UINT32_C(0x00363B77), UINT32_C(0x0077A201), UINT32_C(0x00399B44), UINT32_C(0x0008E94D), UINT32_C(0x00008286)}}, {{UINT32_C(0x002B92BC), UINT32_C(0x0006153E), UINT32_C(0x0000F8C6), UINT32_C(0x005F1B6C), UINT32_C(0x0003BA49), UINT32_C(0x001A925E), UINT32_C(0x000F9BBA), UINT32_C(0x00055F92), UINT32_C(0x002FBD92), UINT32_C(0x002177A5), UINT32_C(0x003FB8F5), UINT32_C(0x005D4BF2), UINT32_C(0x002146D4), UINT32_C(0x0036976B), UINT32_C(0x0022B1BA), UINT32_C(0x0032F949), UINT32_C(0x000965FD), UINT32_C(0x001E9F3E), UINT32_C(0x002DA23B), UINT32_C(0x00107070), UINT32_C(0x00398A1E), UINT32_C(0x00069BFE), UINT32_C(0x002FDDC0)}, {UINT32_C(0x0072B741), UINT32_C(0x003D395C), UINT32_C(0x003A9B25), UINT32_C(0x00294646), UINT32_C(0x00021148), UINT32_C(0x0015DA45), UINT32_C(0x00113C40), UINT32_C(0x00419E05), UINT32_C(0x003F3B62), UINT32_C(0x001F8475), UINT32_C(0x0006EE22), UINT32_C(0x0066BC79), UINT32_C(0x0008B7CC), UINT32_C(0x00023931), UINT32_C(0x00167FA8), UINT32_C(0x003BD93E), UINT32_C(0x0039EE3D), UINT32_C(0x001DFEEA), UINT32_C(0x001FDCFE), UINT32_C(0x00613DB2), UINT32_C(0x00160B1F), UINT32_C(0x001970FE), UINT32_C(0x0023B0DD)}}, {{UINT32_C(0x0023C1BA), UINT32_C(0x002E5121), UINT32_C(0x002C52E9), UINT32_C(0x007811E3), UINT32_C(0x0001A384), UINT32_C(0x002EABE1), UINT32_C(0x0024FBC8), UINT32_C(0x0045D98F), UINT32_C(0x001C8207), UINT32_C(0x0033DA7A), UINT32_C(0x0030B201), UINT32_C(0x0023DFB3), UINT32_C(0x0014CD7A), UINT32_C(0x000B9A13), UINT32_C(0x0029ED72), UINT32_C(0x003FDD61), UINT32_C(0x002FAEDB), UINT32_C(0x0016FDA9), UINT32_C(0x0006A7E0), UINT32_C(0x003CCE59), UINT32_C(0x00059683), UINT32_C(0x0034B4B3), UINT32_C(0x00344F10)}, {UINT32_C(0x0064F192), UINT32_C(0x00121A7B), UINT32_C(0x001023D3), UINT32_C(0x004802FA), UINT32_C(0x000C0C74), UINT32_C(0x003436B0), UINT32_C(0x0028F327), UINT32_C(0x00104D43), UINT32_C(0x000B6D47), UINT32_C(0x003D9F11), UINT32_C(0x0038A86E), UINT32_C(0x0024B31C), UINT32_C(0x000D71F6), UINT32_C(0x0001075B), UINT32_C(0x00131E0B), UINT32_C(0x006451D8), UINT32_C(0x0023646D), UINT32_C(0x00185996), UINT32_C(0x00143B48), UINT32_C(0x0076F1C1), UINT32_C(0x000E8DA3), UINT32_C(0x002EB768), UINT32_C(0x003FBF6F)}}, {{UINT32_C(0x004D2204), UINT32_C(0x002A5EA9), UINT32_C(0x00019369), UINT32_C(0x0070CD74), UINT32_C(0x001A76B1), UINT32_C(0x003815C4), UINT32_C(0x002E68F7), UINT32_C(0x005398A8), UINT32_C(0x0020AB8F), UINT32_C(0x00185D53), UINT32_C(0x00168C1D), UINT32_C(0x00274E1A), UINT32_C(0x000524F2), UINT32_C(0x003D9B1A), UINT32_C(0x0012E5AB), UINT32_C(0x004C1050), UINT32_C(0x0032ABC0), UINT32_C(0x0025971D), UINT32_C(0x003AC08F), UINT32_C(0x002F1AFC), UINT32_C(0x001407B9), UINT32_C(0x00277B2E), UINT32_C(0x001B1F71)}, {UINT32_C(0x000D2E98), UINT32_C(0x0030B33B), UINT32_C(0x003037E7), UINT32_C(0x00425F13), UINT32_C(0x002EBDC3), UINT32_C(0x001D9BE6), UINT32_C(0x00111CD4), UINT32_C(0x007D7418), UINT32_C(0x001F1C08), UINT32_C(0x0027B843), UINT32_C(0x002D41E6), UINT32_C(0x004D0FDD), UINT32_C(0x00162312), UINT32_C(0x000A0EB8), UINT32_C(0x0004819A), UINT32_C(0x001E097B), UINT32_C(0x0000A336), UINT32_C(0x000C49B4), UINT32_C(0x001F6549), UINT32_C(0x0065532D), UINT32_C(0x00175C84), UINT32_C(0x0008B3CF), UINT32_C(0x001D68D8)}}, {{UINT32_C(0x007E2EF2), UINT32_C(0x000CB9A8), UINT32_C(0x000968E6), UINT32_C(0x00367210), UINT32_C(0x00079EA4), UINT32_C(0x00115BCE), UINT32_C(0x002F228C), UINT32_C(0x007BE5BF), UINT32_C(0x003C8A27), UINT32_C(0x000C8607), UINT32_C(0x00319827), UINT32_C(0x006BF356), UINT32_C(0x00222BCA), UINT32_C(0x002D52EC), UINT32_C(0x001634C9), UINT32_C(0x00422BB5), UINT32_C(0x0020B569), UINT32_C(0x002745C9), UINT32_C(0x002547E2), UINT32_C(0x00692CC6), UINT32_C(0x00366369), UINT32_C(0x000C2F45), UINT32_C(0x002DCB38)}, {UINT32_C(0x00432E57), UINT32_C(0x003BCE51), UINT32_C(0x002F50A1), UINT32_C(0x00010E21), UINT32_C(0x000B5704), UINT32_C(0x003603EC), UINT32_C(0x003DC6B0), UINT32_C(0x001D3C66), UINT32_C(0x003E876A), UINT32_C(0x001D2475), UINT32_C(0x003D0CFE), UINT32_C(0x00752FD6), UINT32_C(0x001389EE), UINT32_C(0x002682A3), UINT32_C(0x00006DE0), UINT32_C(0x00466661), UINT32_C(0x0025CA0B), UINT32_C(0x003A47DE), UINT32_C(0x001DBDDD), UINT32_C(0x00584C8D), UINT32_C(0x00097729), UINT32_C(0x003A3D36), UINT32_C(0x0026D79A)}}, {{UINT32_C(0x0046DC32), UINT32_C(0x0039E30E), UINT32_C(0x001A553F), UINT32_C(0x00631635), UINT32_C(0x00137523), UINT32_C(0x0011F122), UINT32_C(0x0002887F), UINT32_C(0x0039C6A2), UINT32_C(0x003D3F52), UINT32_C(0x000E5C16), UINT32_C(0x001B4338), UINT32_C(0x001104AD), UINT32_C(0x0026AD2E), UINT32_C(0x000C1BE9), UINT32_C(0x000082A2), UINT32_C(0x0036D7B0), UINT32_C(0x003E62E1), UINT32_C(0x002AC82D), UINT32_C(0x00354EEE), UINT32_C(0x001B7162), UINT32_C(0x002F1507), UINT32_C(0x00064946), UINT32_C(0x002B777F)}, {UINT32_C(0x00755CF4), UINT32_C(0x002F3F9D), UINT32_C(0x0027FBE0), UINT32_C(0x00250D1C), UINT32_C(0x003AD66C), UINT32_C(0x00220A36), UINT32_C(0x00324DD9), UINT32_C(0x000FD4E3), UINT32_C(0x002FB653), UINT32_C(0x001407E0), UINT32_C(0x0007BD23), UINT32_C(0x001BCA1B), UINT32_C(0x0023529D), UINT32_C(0x000512E2), UINT32_C(0x00322089), UINT32_C(0x0052FB0B), UINT32_C(0x00159218), UINT32_C(0x000A2629), UINT32_C(0x001ECC37), UINT32_C(0x000D691D), UINT32_C(0x001CDC35), UINT32_C(0x0025DECE), UINT32_C(0x0008B229)}}, {{UINT32_C(0x00042A2E), UINT32_C(0x0002BECD), UINT32_C(0x000CE644), UINT32_C(0x007EB2C8), UINT32_C(0x000CDB86), UINT32_C(0x0038243C), UINT32_C(0x0013980F), UINT32_C(0x007DB14B), UINT32_C(0x003AF52F), UINT32_C(0x0034D34E), UINT32_C(0x00328903), UINT32_C(0x0012E910), UINT32_C(0x002F165C), UINT32_C(0x001F951B), UINT32_C(0x003DCC69), UINT32_C(0x006A2790), UINT32_C(0x001419B1), UINT32_C(0x003CD6D6), UINT32_C(0x000A88DC), UINT32_C(0x0065E513), UINT32_C(0x00038EAB), UINT32_C(0x000DA64E), UINT32_C(0x001E4802)}, {UINT32_C(0x00411E28), UINT32_C(0x0038A31B), UINT32_C(0x000EA13F), UINT32_C(0x00692375), UINT32_C(0x003972E4), UINT32_C(0x003C7618), UINT32_C(0x0030675C), UINT32_C(0x000471A7), UINT32_C(0x001EAA31), UINT32_C(0x000332B8), UINT32_C(0x000BA219), UINT32_C(0x005949F6), UINT32_C(0x000721E9), UINT32_C(0x000B0539), UINT32_C(0x00351BFD), UINT32_C(0x006AF8C8), UINT32_C(0x001749B7), UINT32_C(0x001B4221), UINT32_C(0x00346E9F), UINT32_C(0x001D138C), UINT32_C(0x00315C0E), UINT32_C(0x003AE1BD), UINT32_C(0x001E5845)}}, {{UINT32_C(0x0073DD11), UINT32_C(0x0038D066), UINT32_C(0x003B6E1E), UINT32_C(0x0058D879), UINT32_C(0x003FC188), UINT32_C(0x0026EA01), UINT32_C(0x003A5E72), UINT32_C(0x003EAE27), UINT32_C(0x0017EC7B), UINT32_C(0x0021435A), UINT32_C(0x0030A0EF), UINT32_C(0x00226F77), UINT32_C(0x00319511), UINT32_C(0x000EECC9), UINT32_C(0x00184FB1), UINT32_C(0x00485367), UINT32_C(0x0012DBCE), UINT32_C(0x00296D94), UINT32_C(0x001ECEF1), UINT32_C(0x0048A6EF), UINT32_C(0x000C1378), UINT32_C(0x000486F3), UINT32_C(0x00294CB6)}, {UINT32_C(0x00659E15), UINT32_C(0x0021AFE5), UINT32_C(0x00035B7D), UINT32_C(0x0014905A), UINT32_C(0x00190940), UINT32_C(0x0028A11C), UINT32_C(0x003C2EC5), UINT32_C(0x0061D9FF), UINT32_C(0x003C91F9), UINT32_C(0x000C24F9), UINT32_C(0x0021D20C), UINT32_C(0x0069147F), UINT32_C(0x002C2485), UINT32_C(0x001F02A6), UINT32_C(0x001E436B), UINT32_C(0x0070B5EC), UINT32_C(0x003C8887), UINT32_C(0x000479C4), UINT32_C(0x00329212), UINT32_C(0x00023848), UINT32_C(0x000FD9D8), UINT32_C(0x001CA129), UINT32_C(0x002842CB)}}, {{UINT32_C(0x007B92F5), UINT32_C(0x0037A067), UINT32_C(0x000074AF), UINT32_C(0x005B2F28), UINT32_C(0x000CBF5F), UINT32_C(0x00077719), UINT32_C(0x0015F2E0), UINT32_C(0x0016A3E7), UINT32_C(0x001CEB10), UINT32_C(0x0022F6C6), UINT32_C(0x003D1FA9), UINT32_C(0x004CD931), UINT32_C(0x001D7522), UINT32_C(0x001781A9), UINT32_C(0x003443CE), UINT32_C(0x006FA88B), UINT32_C(0x001564BA), UINT32_C(0x00110D1F), UINT32_C(0x0012896B), UINT32_C(0x000B6064), UINT32_C(0x00253009), UINT32_C(0x0007C604), UINT32_C(0x003E79C8)}, {UINT32_C(0x0022EAC3), UINT32_C(0x001D3CBB), UINT32_C(0x001660EB), UINT32_C(0x00530D25), UINT32_C(0x001DDD46), UINT32_C(0x0038675B), UINT32_C(0x00270FCB), UINT32_C(0x0070D781), UINT32_C(0x0036DB98), UINT32_C(0x0010E11B), UINT32_C(0x0019CA07), UINT32_C(0x004B0308), UINT32_C(0x003E92E0), UINT32_C(0x00039F79), UINT32_C(0x002FAD1D), UINT32_C(0x0017B8FE), UINT32_C(0x001C8122), UINT32_C(0x0013FAE1), UINT32_C(0x00095301), UINT32_C(0x003B1103), UINT32_C(0x00031A89), UINT32_C(0x001447C4), UINT32_C(0x0009D34F)}}, {{UINT32_C(0x007C8A6B), UINT32_C(0x002A2FE8), UINT32_C(0x0035E593), UINT32_C(0x004E1D4D), UINT32_C(0x0015A0B8), UINT32_C(0x0020842D), UINT32_C(0x0018D50D), UINT32_C(0x001081D4), UINT32_C(0x00126A85), UINT32_C(0x0005E191), UINT32_C(0x001BEF59), UINT32_C(0x005AA8B6), UINT32_C(0x003A3A60), UINT32_C(0x000ABF90), UINT32_C(0x0006196E), UINT32_C(0x00150E95), UINT32_C(0x000CB2DC), UINT32_C(0x000DDCD3), UINT32_C(0x003E2A72), UINT32_C(0x00582EAB), UINT32_C(0x0035F095), UINT32_C(0x0010E8B9), UINT32_C(0x002F9603)}, {UINT32_C(0x00381ED7), UINT32_C(0x000655D9), UINT32_C(0x00270A8E), UINT32_C(0x00048245), UINT32_C(0x00309CD3), UINT32_C(0x0017ED44), UINT32_C(0x001D450E), UINT32_C(0x000312BA), UINT32_C(0x0005985D), UINT32_C(0x00358C0C), UINT32_C(0x002A7087), UINT32_C(0x0072F6C5), UINT32_C(0x00198D4B), UINT32_C(0x00266DA7), UINT32_C(0x0030D13D), UINT32_C(0x00164FAF), UINT32_C(0x001B3D2A), UINT32_C(0x00054328), UINT32_C(0x00297C8D), UINT32_C(0x0024974D), UINT32_C(0x000C4C24), UINT32_C(0x00233778), UINT32_C(0x000A3C4F)}}, {{UINT32_C(0x0019EECE), UINT32_C(0x00162127), UINT32_C(0x001040AF), UINT32_C(0x001C475E), UINT32_C(0x00239506), UINT32_C(0x0009AF50), UINT32_C(0x001C9807), UINT32_C(0x003FA8CC), UINT32_C(0x003128F6), UINT32_C(0x00045734), UINT32_C(0x001442AC), UINT32_C(0x0047E27E), UINT32_C(0x003215CF), UINT32_C(0x00140684), UINT32_C(0x0023566D), UINT32_C(0x0062EA4E), UINT32_C(0x0026B67A), UINT32_C(0x00295AF8), UINT32_C(0x0006E548), UINT32_C(0x0040F0F6), UINT32_C(0x003FA25A), UINT32_C(0x003841B6), UINT32_C(0x0034374F)}, {UINT32_C(0x0011DBC4), UINT32_C(0x001EE6DB), UINT32_C(0x00351C56), UINT32_C(0x003D4083), UINT32_C(0x001009D6), UINT32_C(0x003E9349), UINT32_C(0x00010A11), UINT32_C(0x00382D27), UINT32_C(0x003D7132), UINT32_C(0x001999FC), UINT32_C(0x003911D4), UINT32_C(0x0045D805), UINT32_C(0x0001B235), UINT32_C(0x00258644), UINT32_C(0x001B1DA8), UINT32_C(0x007D367D), UINT32_C(0x002106B2), UINT32_C(0x00096B2D), UINT32_C(0x001A078D), UINT32_C(0x007CE535), UINT32_C(0x003C6BB8), UINT32_C(0x0021FC86), UINT32_C(0x00388E7F)}}, {{UINT32_C(0x003C849A), UINT32_C(0x00339DA9), UINT32_C(0x0001B56C), UINT32_C(0x0018B48F), UINT32_C(0x0036B241), UINT32_C(0x001C3E99), UINT32_C(0x001DC79F), UINT32_C(0x006E4794), UINT32_C(0x0014AD70), UINT32_C(0x0020AF6F), UINT32_C(0x00286589), UINT32_C(0x0000AA9B), UINT32_C(0x00287B90), UINT32_C(0x0036D3BA), UINT32_C(0x002CB788), UINT32_C(0x0036DAF5), UINT32_C(0x000DA427), UINT32_C(0x0003CD59), UINT32_C(0x00026B18), UINT32_C(0x002DA542), UINT32_C(0x0010AEF9), UINT32_C(0x003EA11A), UINT32_C(0x003453B3)}, {UINT32_C(0x001D0091), UINT32_C(0x0020390C), UINT32_C(0x002D251A), UINT32_C(0x0043EFFA), UINT32_C(0x00284188), UINT32_C(0x00326C4E), UINT32_C(0x001965D5), UINT32_C(0x0052E6EE), UINT32_C(0x0000616F), UINT32_C(0x002561A4), UINT32_C(0x003AD411), UINT32_C(0x0036D206), UINT32_C(0x000E1BD3), UINT32_C(0x001392B2), UINT32_C(0x002A8475), UINT32_C(0x0066EFA5), UINT32_C(0x0037E866), UINT32_C(0x001BBD62), UINT32_C(0x001D1550), UINT32_C(0x0032E625), UINT32_C(0x00302306), UINT32_C(0x001E0DDA), UINT32_C(0x001CF60C)}}, {{UINT32_C(0x0023F415), UINT32_C(0x0034D9CF), UINT32_C(0x0024E53D), UINT32_C(0x000875AF), UINT32_C(0x00052504), UINT32_C(0x003FD275), UINT32_C(0x0030C106), UINT32_C(0x006F3F46), UINT32_C(0x000B6725), UINT32_C(0x001DB8D9), UINT32_C(0x0028E8F0), UINT32_C(0x00172728), UINT32_C(0x0028DA5A), UINT32_C(0x0032E926), UINT32_C(0x002D0A85), UINT32_C(0x000530D4), UINT32_C(0x0035DC87), UINT32_C(0x002D07D2), UINT32_C(0x003F882E), UINT32_C(0x005C838F), UINT32_C(0x0026F2BF), UINT32_C(0x003EEE58), UINT32_C(0x00071443)}, {UINT32_C(0x002CB0FF), UINT32_C(0x003E64EA), UINT32_C(0x0018EDB8), UINT32_C(0x003B4182), UINT32_C(0x001FC937), UINT32_C(0x002AAFB7), UINT32_C(0x002EA0F1), UINT32_C(0x0049D653), UINT32_C(0x000F4A39), UINT32_C(0x000B926E), UINT32_C(0x0010CA2F), UINT32_C(0x002208C8), UINT32_C(0x0039DE49), UINT32_C(0x000161ED), UINT32_C(0x0007EAFC), UINT32_C(0x00514FED), UINT32_C(0x00039404), UINT32_C(0x0018883A), UINT32_C(0x00023262), UINT32_C(0x0016E9C1), UINT32_C(0x003C573A), UINT32_C(0x002FB6FD), UINT32_C(0x00386202)}}, {{UINT32_C(0x005D99DB), UINT32_C(0x00001D29), UINT32_C(0x000AF82D), UINT32_C(0x00444767), UINT32_C(0x0015C5E2), UINT32_C(0x002A81B3), UINT32_C(0x0024A5EF), UINT32_C(0x006F6AF5), UINT32_C(0x001EBBCB), UINT32_C(0x00305276), UINT32_C(0x001A7F7A), UINT32_C(0x006B1587), UINT32_C(0x0010BC41), UINT32_C(0x00233733), UINT32_C(0x0015633F), UINT32_C(0x006476A7), UINT32_C(0x00104F63), UINT32_C(0x001F393B), UINT32_C(0x00255507), UINT32_C(0x00708297), UINT32_C(0x000DB54C), UINT32_C(0x001A8A1D), UINT32_C(0x001A9756)}, {UINT32_C(0x0033896F), UINT32_C(0x00011688), UINT32_C(0x001FBDA0), UINT32_C(0x002D7B5B), UINT32_C(0x00345043), UINT32_C(0x000409DD), UINT32_C(0x0023A47B), UINT32_C(0x0018CE42), UINT32_C(0x00005C57), UINT32_C(0x0010E46C), UINT32_C(0x0016395D), UINT32_C(0x0029A5E5), UINT32_C(0x00063854), UINT32_C(0x002F12A1), UINT32_C(0x00013E1B), UINT32_C(0x00407727), UINT32_C(0x001EEAAC), UINT32_C(0x0039D044), UINT32_C(0x0023C5C8), UINT32_C(0x003BB777), UINT32_C(0x00206B48), UINT32_C(0x0020CD62), UINT32_C(0x002C7DE1)}}, {{UINT32_C(0x00431425), UINT32_C(0x003E66AF), UINT32_C(0x0039AA06), UINT32_C(0x0061F4D9), UINT32_C(0x001789C9), UINT32_C(0x002ECAAC), UINT32_C(0x0003F0C7), UINT32_C(0x0019C0FC), UINT32_C(0x00131E10), UINT32_C(0x001FDEC5), UINT32_C(0x00375C20), UINT32_C(0x0038CDA3), UINT32_C(0x0019FA41), UINT32_C(0x00339E14), UINT32_C(0x002C2643), UINT32_C(0x0060E1EB), UINT32_C(0x001F88C5), UINT32_C(0x002C520C), UINT32_C(0x000ED4A1), UINT32_C(0x0009B12C), UINT32_C(0x003385E8), UINT32_C(0x0007CEC0), UINT32_C(0x0025145A)}, {UINT32_C(0x000C4BBC), UINT32_C(0x001CA76E), UINT32_C(0x00053791), UINT32_C(0x0071B24B), UINT32_C(0x002AEE0E), UINT32_C(0x003D38BC), UINT32_C(0x0014DF23), UINT32_C(0x00714100), UINT32_C(0x002621B3), UINT32_C(0x003EA6E9), UINT32_C(0x003351FD), UINT32_C(0x002F67A6), UINT32_C(0x003DD342), UINT32_C(0x002B6916), UINT32_C(0x0018E95C), UINT32_C(0x004F0EF0), UINT32_C(0x00063803), UINT32_C(0x0031C884), UINT32_C(0x0029F497), UINT32_C(0x0076FCD3), UINT32_C(0x0008E8DE), UINT32_C(0x00375097), UINT32_C(0x0034BF55)}}, }, { {{UINT32_C(0x00101002), UINT32_C(0x003E5E72), UINT32_C(0x0008B02E), UINT32_C(0x0050FB59), UINT32_C(0x0018AB92), UINT32_C(0x003EE716), UINT32_C(0x00097228), UINT32_C(0x0049BDB3), UINT32_C(0x003AF4F6), UINT32_C(0x003EC3F2), UINT32_C(0x000A2168), UINT32_C(0x002E9535), UINT32_C(0x001B90E4), UINT32_C(0x002BA88C), UINT32_C(0x00326E95), UINT32_C(0x003FEB7E), UINT32_C(0x002017BC), UINT32_C(0x000D0EEE), UINT32_C(0x0014761F), UINT32_C(0x0047526E), UINT32_C(0x00180227), UINT32_C(0x000611B5), UINT32_C(0x0035BCC9)}, {UINT32_C(0x0065BB6C), UINT32_C(0x00254EB1), UINT32_C(0x00213662), UINT32_C(0x000C625D), UINT32_C(0x00291EF8), UINT32_C(0x00123964), UINT32_C(0x003C6A2D), UINT32_C(0x003CEFF9), UINT32_C(0x00263687), UINT32_C(0x0011917B), UINT32_C(0x000E22CF), UINT32_C(0x002846F8), UINT32_C(0x0034AE34), UINT32_C(0x001EA233), UINT32_C(0x001EA70A), UINT32_C(0x001C002F), UINT32_C(0x0008295D), UINT32_C(0x00358F85), UINT32_C(0x001292A5), UINT32_C(0x006FF9AD), UINT32_C(0x0006C51D), UINT32_C(0x0010C570), UINT32_C(0x003F9016)}}, {{UINT32_C(0x00520C83), UINT32_C(0x0011B38F), UINT32_C(0x003659FA), UINT32_C(0x004B70A4), UINT32_C(0x002D7D78), UINT32_C(0x00317E0C), UINT32_C(0x002BCC8A), UINT32_C(0x00170479), UINT32_C(0x003049C8), UINT32_C(0x0035330F), UINT32_C(0x00292CAC), UINT32_C(0x00659C79), UINT32_C(0x000953DA), UINT32_C(0x002839AC), UINT32_C(0x000EEC75), UINT32_C(0x0034FE7A), UINT32_C(0x003DA567), UINT32_C(0x003E416C), UINT32_C(0x00007AD5), UINT32_C(0x00787665), UINT32_C(0x0023F8AC), UINT32_C(0x0022688F), UINT32_C(0x002F4735)}, {UINT32_C(0x0048FDB2), UINT32_C(0x001EC71C), UINT32_C(0x003D8930), UINT32_C(0x00650536), UINT32_C(0x0022A057), UINT32_C(0x0034D941), UINT32_C(0x0033DA64), UINT32_C(0x002D8AF7), UINT32_C(0x0015A74D), UINT32_C(0x0002EE4D), UINT32_C(0x0020F500), UINT32_C(0x00050ADE), UINT32_C(0x0021DCE1), UINT32_C(0x00006CC2), UINT32_C(0x00004AF7), UINT32_C(0x00385379), UINT32_C(0x0014D7FD), UINT32_C(0x0035F5DC), UINT32_C(0x002CE71C), UINT32_C(0x004F1273), UINT32_C(0x00235AF5), UINT32_C(0x00073649), UINT32_C(0x001C5B77)}}, {{UINT32_C(0x002D1D21), UINT32_C(0x003D3AFA), UINT32_C(0x003484FE), UINT32_C(0x003B8AEF), UINT32_C(0x0028E325), UINT32_C(0x00180681), UINT32_C(0x0008D952), UINT32_C(0x0004222B), UINT32_C(0x002EC06C), UINT32_C(0x00196929), UINT32_C(0x0003F38C), UINT32_C(0x004A5049), UINT32_C(0x000D9B6D), UINT32_C(0x001C481B), UINT32_C(0x003A16BA), UINT32_C(0x007F7383), UINT32_C(0x0016E539), UINT32_C(0x003CB657), UINT32_C(0x000CB3E0), UINT32_C(0x0017CB6E), UINT32_C(0x00282B60), UINT32_C(0x00168672), UINT32_C(0x0021396D)}, {UINT32_C(0x00230B59), UINT32_C(0x002A3F7A), UINT32_C(0x002CEDD4), UINT32_C(0x0046B9E4), UINT32_C(0x0010DAFC), UINT32_C(0x0030ED59), UINT32_C(0x0034B350), UINT32_C(0x004C3909), UINT32_C(0x000D0E93), UINT32_C(0x003A3458), UINT32_C(0x00030157), UINT32_C(0x003E191D), UINT32_C(0x002A17A1), UINT32_C(0x001C795E), UINT32_C(0x00019E14), UINT32_C(0x00448635), UINT32_C(0x00364727), UINT32_C(0x002B17DB), UINT32_C(0x00013693), UINT32_C(0x0050F600), UINT32_C(0x0013ADED), UINT32_C(0x00267B88), UINT32_C(0x0012E874)}}, {{UINT32_C(0x00491237), UINT32_C(0x000A3228), UINT32_C(0x0006A16F), UINT32_C(0x002BCC52), UINT32_C(0x002A58B0), UINT32_C(0x00223C2F), UINT32_C(0x000ECF49), UINT32_C(0x00310D98), UINT32_C(0x000E07C8), UINT32_C(0x0027A178), UINT32_C(0x002F51C1), UINT32_C(0x001D757E), UINT32_C(0x003D1406), UINT32_C(0x003F45BF), UINT32_C(0x003C049A), UINT32_C(0x00247F57), UINT32_C(0x001B4EA7), UINT32_C(0x002C3AA4), UINT32_C(0x0000C59A), UINT32_C(0x002C0BF5), UINT32_C(0x0004E1EC), UINT32_C(0x003B5C4F), UINT32_C(0x002ED5BD)}, {UINT32_C(0x000DA809), UINT32_C(0x003F3B14), UINT32_C(0x00317876), UINT32_C(0x004FBBD1), UINT32_C(0x00145987), UINT32_C(0x0034043D), UINT32_C(0x0004E8DF), UINT32_C(0x0040B9A8), UINT32_C(0x003FB500), UINT32_C(0x00102180), UINT32_C(0x00002AD5), UINT32_C(0x000948B6), UINT32_C(0x0024E856), UINT32_C(0x001346B2), UINT32_C(0x001224DE), UINT32_C(0x00780CFE), UINT32_C(0x003527A8), UINT32_C(0x0015A63D), UINT32_C(0x00350B6B), UINT32_C(0x0019D0B1), UINT32_C(0x00125F42), UINT32_C(0x000C970B), UINT32_C(0x0030D16C)}}, {{UINT32_C(0x005B8DD0), UINT32_C(0x002EFE9A), UINT32_C(0x002160B2), UINT32_C(0x006C25E9), UINT32_C(0x003648EE), UINT32_C(0x000F0498), UINT32_C(0x002E36A5), UINT32_C(0x0048709D), UINT32_C(0x003F3212), UINT32_C(0x0032A4D7), UINT32_C(0x0037EA02), UINT32_C(0x003554EF), UINT32_C(0x00080AFA), UINT32_C(0x0009F4D8), UINT32_C(0x000A370E), UINT32_C(0x0074C856), UINT32_C(0x00302B5C), UINT32_C(0x000F4BED), UINT32_C(0x00286A2A), UINT32_C(0x001B7967), UINT32_C(0x001EA28E), UINT32_C(0x0005C511), UINT32_C(0x0036A76A)}, {UINT32_C(0x00470560), UINT32_C(0x002A01F5), UINT32_C(0x0000571A), UINT32_C(0x0049D849), UINT32_C(0x001EC4A9), UINT32_C(0x0032B83B), UINT32_C(0x001A8DF4), UINT32_C(0x00495FB3), UINT32_C(0x000BD33C), UINT32_C(0x000857FC), UINT32_C(0x00128475), UINT32_C(0x003B8705), UINT32_C(0x00243166), UINT32_C(0x001BCEBA), UINT32_C(0x0028F42F), UINT32_C(0x00530ED6), UINT32_C(0x001D8A5C), UINT32_C(0x001FC74F), UINT32_C(0x002D4804), UINT32_C(0x000367B6), UINT32_C(0x000327AF), UINT32_C(0x002863D0), UINT32_C(0x000900E7)}}, {{UINT32_C(0x00780229), UINT32_C(0x001EF630), UINT32_C(0x000510ED), UINT32_C(0x006460B5), UINT32_C(0x000A8636), UINT32_C(0x00358DE6), UINT32_C(0x001EAE5F), UINT32_C(0x0054B5EB), UINT32_C(0x0024DDD6), UINT32_C(0x003EDDBF), UINT32_C(0x00373B40), UINT32_C(0x0026ABAC), UINT32_C(0x003A5597), UINT32_C(0x002BE3A2), UINT32_C(0x00167777), UINT32_C(0x0045D31B), UINT32_C(0x0032440D), UINT32_C(0x0015429F), UINT32_C(0x003A681A), UINT32_C(0x001D0AA3), UINT32_C(0x0036BA5B), UINT32_C(0x0025EA57), UINT32_C(0x00343F81)}, {UINT32_C(0x0013FCD6), UINT32_C(0x0032B515), UINT32_C(0x00205A39), UINT32_C(0x006417AA), UINT32_C(0x00188962), UINT32_C(0x0030F077), UINT32_C(0x0030D896), UINT32_C(0x00618839), UINT32_C(0x000924CE), UINT32_C(0x00313575), UINT32_C(0x002445E3), UINT32_C(0x0004EECA), UINT32_C(0x002B4A7C), UINT32_C(0x0009D939), UINT32_C(0x0013DD92), UINT32_C(0x0023A94B), UINT32_C(0x0022A525), UINT32_C(0x002EC641), UINT32_C(0x000F31A9), UINT32_C(0x001D3493), UINT32_C(0x003DF626), UINT32_C(0x003C1521), UINT32_C(0x000E392E)}}, {{UINT32_C(0x0066600B), UINT32_C(0x0004FDF8), UINT32_C(0x0007D4BD), UINT32_C(0x0026B138), UINT32_C(0x002EA81D), UINT32_C(0x00333EF4), UINT32_C(0x0015A59C), UINT32_C(0x0051B0C0), UINT32_C(0x0035D122), UINT32_C(0x003DA6C3), UINT32_C(0x003E2C86), UINT32_C(0x003CB4B4), UINT32_C(0x00044B44), UINT32_C(0x003424DE), UINT32_C(0x001D32E6), UINT32_C(0x002521D8), UINT32_C(0x003CCEC2), UINT32_C(0x000276F5), UINT32_C(0x00220217), UINT32_C(0x00008BA1), UINT32_C(0x000321CB), UINT32_C(0x00286E09), UINT32_C(0x0004C3E0)}, {UINT32_C(0x002B8D50), UINT32_C(0x002E3BC1), UINT32_C(0x000F2753), UINT32_C(0x007FCE93), UINT32_C(0x003EF16C), UINT32_C(0x0035426B), UINT32_C(0x00206746), UINT32_C(0x007FCFC3), UINT32_C(0x003C1D6C), UINT32_C(0x0037F851), UINT32_C(0x0014034B), UINT32_C(0x005C71B5), UINT32_C(0x002AA534), UINT32_C(0x003695A5), UINT32_C(0x001CC377), UINT32_C(0x004B40F1), UINT32_C(0x003B0DD3), UINT32_C(0x0003CC25), UINT32_C(0x00296BD9), UINT32_C(0x0076050E), UINT32_C(0x0030853C), UINT32_C(0x0023CDDF), UINT32_C(0x0005051F)}}, {{UINT32_C(0x001FAC05), UINT32_C(0x0038BF66), UINT32_C(0x00106AE1), UINT32_C(0x005F6C39), UINT32_C(0x002BCFD1), UINT32_C(0x0012C446), UINT32_C(0x002014B7), UINT32_C(0x0022CDD4), UINT32_C(0x002C0E46), UINT32_C(0x000068BA), UINT32_C(0x0009B619), UINT32_C(0x00112EBA), UINT32_C(0x001134DE), UINT32_C(0x00382BD9), UINT32_C(0x0038AB24), UINT32_C(0x003EFC51), UINT32_C(0x00125A98), UINT32_C(0x00166AE1), UINT32_C(0x001204D8), UINT32_C(0x00395F99), UINT32_C(0x0022EC93), UINT32_C(0x000C2334), UINT32_C(0x000F0DB3)}, {UINT32_C(0x0065FB58), UINT32_C(0x0026949F), UINT32_C(0x00284E96), UINT32_C(0x000E9B6C), UINT32_C(0x003DCCC0), UINT32_C(0x00276266), UINT32_C(0x0011C074), UINT32_C(0x0006165B), UINT32_C(0x003618B9), UINT32_C(0x000C1873), UINT32_C(0x00210655), UINT32_C(0x0068168F), UINT32_C(0x002A5321), UINT32_C(0x00130FA1), UINT32_C(0x00288227), UINT32_C(0x00405D32), UINT32_C(0x002C76A2), UINT32_C(0x003544A1), UINT32_C(0x0021FFEE), UINT32_C(0x00372D2B), UINT32_C(0x001A438E), UINT32_C(0x002F5590), UINT32_C(0x001BBD78)}}, {{UINT32_C(0x000324B7), UINT32_C(0x0005A62F), UINT32_C(0x003F767B), UINT32_C(0x006E0320), UINT32_C(0x0000FF7D), UINT32_C(0x001365D4), UINT32_C(0x0034C36F), UINT32_C(0x000AC0F4), UINT32_C(0x00037C47), UINT32_C(0x00022A9D), UINT32_C(0x001C6BCF), UINT32_C(0x000C25F1), UINT32_C(0x0019449E), UINT32_C(0x00272780), UINT32_C(0x00107BA2), UINT32_C(0x003A5F5D), UINT32_C(0x0010F210), UINT32_C(0x001A8365), UINT32_C(0x000FA62A), UINT32_C(0x000EEFAD), UINT32_C(0x00080B72), UINT32_C(0x003ABCCF), UINT32_C(0x00019B10)}, {UINT32_C(0x0076B572), UINT32_C(0x003D6F9E), UINT32_C(0x000ADEC4), UINT32_C(0x00516D49), UINT32_C(0x003E0BD1), UINT32_C(0x00139E71), UINT32_C(0x00339678), UINT32_C(0x006ABDF0), UINT32_C(0x0038E886), UINT32_C(0x002299CE), UINT32_C(0x00367195), UINT32_C(0x0043A05B), UINT32_C(0x00361D28), UINT32_C(0x000796D9), UINT32_C(0x00373012), UINT32_C(0x001EC4D3), UINT32_C(0x001008A0), UINT32_C(0x002E74DD), UINT32_C(0x003C82F9), UINT32_C(0x004054A4), UINT32_C(0x0032570C), UINT32_C(0x00101897), UINT32_C(0x00118C2D)}}, {{UINT32_C(0x00462F42), UINT32_C(0x00057E48), UINT32_C(0x001278B3), UINT32_C(0x0026CC97), UINT32_C(0x001E327A), UINT32_C(0x001598F9), UINT32_C(0x003DEF1B), UINT32_C(0x00079209), UINT32_C(0x0033F716), UINT32_C(0x003B919D), UINT32_C(0x003706F3), UINT32_C(0x00399A35), UINT32_C(0x0036C21D), UINT32_C(0x00323DF4), UINT32_C(0x000A940E), UINT32_C(0x000D518E), UINT32_C(0x000D882E), UINT32_C(0x003C191A), UINT32_C(0x00244FC8), UINT32_C(0x0005C226), UINT32_C(0x000509F7), UINT32_C(0x000F698A), UINT32_C(0x00007583)}, {UINT32_C(0x007336DD), UINT32_C(0x002AE10E), UINT32_C(0x00262EEC), UINT32_C(0x0040454E), UINT32_C(0x003352A6), UINT32_C(0x002A34DE), UINT32_C(0x0033BCE4), UINT32_C(0x0024FD39), UINT32_C(0x001319FB), UINT32_C(0x001AE5AA), UINT32_C(0x00315D5B), UINT32_C(0x002C46BE), UINT32_C(0x001DF5A0), UINT32_C(0x002C4B31), UINT32_C(0x0034A43A), UINT32_C(0x004D4DD6), UINT32_C(0x000116D9), UINT32_C(0x000E599A), UINT32_C(0x0033B481), UINT32_C(0x0072C084), UINT32_C(0x003602A6), UINT32_C(0x000FA6A0), UINT32_C(0x00193096)}}, {{UINT32_C(0x001FA23E), UINT32_C(0x0017DD44), UINT32_C(0x002B9851), UINT32_C(0x0078D9BF), UINT32_C(0x00300461), UINT32_C(0x000E650F), UINT32_C(0x0003235A), UINT32_C(0x001E10FD), UINT32_C(0x00191997), UINT32_C(0x00347E5B), UINT32_C(0x000EF26D), UINT32_C(0x00722710), UINT32_C(0x00091296), UINT32_C(0x0000DAC3), UINT32_C(0x00364C90), UINT32_C(0x00153FD5), UINT32_C(0x00386DE4), UINT32_C(0x0010D8C8), UINT32_C(0x001F9824), UINT32_C(0x000ADEC8), UINT32_C(0x003F9D31), UINT32_C(0x0022F161), UINT32_C(0x000FB294)}, {UINT32_C(0x007CFE80), UINT32_C(0x002929EF), UINT32_C(0x001E66B0), UINT32_C(0x003A9598), UINT32_C(0x00040870), UINT32_C(0x00110507), UINT32_C(0x0002B8C7), UINT32_C(0x00218FE2), UINT32_C(0x0024A402), UINT32_C(0x00082D52), UINT32_C(0x0014DAF9), UINT32_C(0x003244A6), UINT32_C(0x000583BF), UINT32_C(0x00215F1C), UINT32_C(0x0035F85B), UINT32_C(0x000DE2B3), UINT32_C(0x0004BC8F), UINT32_C(0x000E7228), UINT32_C(0x002E9933), UINT32_C(0x0007BDB8), UINT32_C(0x001F7F0F), UINT32_C(0x003332AF), UINT32_C(0x00156268)}}, {{UINT32_C(0x0002E3E7), UINT32_C(0x0025FA60), UINT32_C(0x001FB4E6), UINT32_C(0x0016C3C6), UINT32_C(0x00247D0E), UINT32_C(0x002D8D5E), UINT32_C(0x0006A675), UINT32_C(0x00149DD3), UINT32_C(0x0014833C), UINT32_C(0x002071D1), UINT32_C(0x00267269), UINT32_C(0x005E8399), UINT32_C(0x0015D1BF), UINT32_C(0x002573DB), UINT32_C(0x000E94C4), UINT32_C(0x0053F0CB), UINT32_C(0x000E6C01), UINT32_C(0x002C9873), UINT32_C(0x0003E40E), UINT32_C(0x002DC625), UINT32_C(0x000EE009), UINT32_C(0x0037B3C1), UINT32_C(0x00314D3B)}, {UINT32_C(0x0012F52A), UINT32_C(0x00212A59), UINT32_C(0x0039A45C), UINT32_C(0x000237A1), UINT32_C(0x0002467E), UINT32_C(0x003AD286), UINT32_C(0x0014E2EE), UINT32_C(0x0079D3D0), UINT32_C(0x001D7205), UINT32_C(0x0019A1C3), UINT32_C(0x001A753E), UINT32_C(0x00648E5B), UINT32_C(0x001DA22B), UINT32_C(0x0032CBC7), UINT32_C(0x001A0350), UINT32_C(0x0051025A), UINT32_C(0x003A3047), UINT32_C(0x001814DC), UINT32_C(0x0015F660), UINT32_C(0x00384509), UINT32_C(0x0028C315), UINT32_C(0x0014D207), UINT32_C(0x001BFC3C)}}, {{UINT32_C(0x000BF619), UINT32_C(0x001B0A4A), UINT32_C(0x002F5B04), UINT32_C(0x00066718), UINT32_C(0x000F956B), UINT32_C(0x00148057), UINT32_C(0x003D7C40), UINT32_C(0x002D779F), UINT32_C(0x000D96BA), UINT32_C(0x0034F9E9), UINT32_C(0x000ABC81), UINT32_C(0x00612100), UINT32_C(0x00094453), UINT32_C(0x001A7A84), UINT32_C(0x00395C2A), UINT32_C(0x001CCF9C), UINT32_C(0x001909AB), UINT32_C(0x000127F4), UINT32_C(0x003CC47F), UINT32_C(0x0053B36F), UINT32_C(0x001168B8), UINT32_C(0x003E681B), UINT32_C(0x0033586A)}, {UINT32_C(0x003405C5), UINT32_C(0x0014C1F8), UINT32_C(0x00217C04), UINT32_C(0x0044F686), UINT32_C(0x003B975D), UINT32_C(0x001566BE), UINT32_C(0x000C3966), UINT32_C(0x00442F22), UINT32_C(0x002EEC1C), UINT32_C(0x001FBB59), UINT32_C(0x002C7F08), UINT32_C(0x005C2547), UINT32_C(0x002E399A), UINT32_C(0x00357E26), UINT32_C(0x00182B2F), UINT32_C(0x00428509), UINT32_C(0x0001036A), UINT32_C(0x000C10BF), UINT32_C(0x0038CF9D), UINT32_C(0x0037AD35), UINT32_C(0x000ED96E), UINT32_C(0x001A6435), UINT32_C(0x003E4F02)}}, {{UINT32_C(0x0041EB8E), UINT32_C(0x000024BF), UINT32_C(0x003694DF), UINT32_C(0x00511BE5), UINT32_C(0x000A954F), UINT32_C(0x00206AB1), UINT32_C(0x003CF939), UINT32_C(0x00513701), UINT32_C(0x000E6080), UINT32_C(0x002108CE), UINT32_C(0x0020017E), UINT32_C(0x00105B07), UINT32_C(0x0011EE5F), UINT32_C(0x003E26E6), UINT32_C(0x000DCD93), UINT32_C(0x0008016D), UINT32_C(0x003FE138), UINT32_C(0x0003D710), UINT32_C(0x002881A3), UINT32_C(0x002E6638), UINT32_C(0x0013554C), UINT32_C(0x001A9737), UINT32_C(0x002F29B7)}, {UINT32_C(0x0072FA30), UINT32_C(0x003860AB), UINT32_C(0x002A3A9B), UINT32_C(0x0046D4D4), UINT32_C(0x002C8E1C), UINT32_C(0x000B27C5), UINT32_C(0x002FB5F3), UINT32_C(0x006E389E), UINT32_C(0x0032BF68), UINT32_C(0x002F2032), UINT32_C(0x003D0E8B), UINT32_C(0x005EFF1B), UINT32_C(0x000E77F7), UINT32_C(0x0032D4D9), UINT32_C(0x000EE3B7), UINT32_C(0x002DD781), UINT32_C(0x002C515F), UINT32_C(0x001196A0), UINT32_C(0x003C1961), UINT32_C(0x00484EBE), UINT32_C(0x0007BCF4), UINT32_C(0x002FA36A), UINT32_C(0x00385130)}}, {{UINT32_C(0x000B2CC6), UINT32_C(0x000E1DAF), UINT32_C(0x003ADA49), UINT32_C(0x0067C22D), UINT32_C(0x002135BF), UINT32_C(0x0034F418), UINT32_C(0x002F97CB), UINT32_C(0x003D4E4F), UINT32_C(0x00389246), UINT32_C(0x000605C0), UINT32_C(0x0005A49F), UINT32_C(0x00289A5C), UINT32_C(0x0019305F), UINT32_C(0x002BDB2B), UINT32_C(0x0037F1CC), UINT32_C(0x007C489D), UINT32_C(0x001CC3B8), UINT32_C(0x0022BE49), UINT32_C(0x0004F6FE), UINT32_C(0x004CDB36), UINT32_C(0x001ECD22), UINT32_C(0x00347FCC), UINT32_C(0x00121B6E)}, {UINT32_C(0x0038250C), UINT32_C(0x003A9B9A), UINT32_C(0x0031B884), UINT32_C(0x0038B4E2), UINT32_C(0x002903F8), UINT32_C(0x000D4406), UINT32_C(0x0003337E), UINT32_C(0x000571CA), UINT32_C(0x0020FC99), UINT32_C(0x002BEC49), UINT32_C(0x0004A324), UINT32_C(0x0063E39A), UINT32_C(0x00248D5A), UINT32_C(0x0034EE85), UINT32_C(0x0012C541), UINT32_C(0x0036DF11), UINT32_C(0x001A9D56), UINT32_C(0x00114AD8), UINT32_C(0x002B0978), UINT32_C(0x004376FE), UINT32_C(0x0019DA75), UINT32_C(0x0036CC96), UINT32_C(0x002821E1)}}, {{UINT32_C(0x003C6DB0), UINT32_C(0x00394096), UINT32_C(0x0015D4D8), UINT32_C(0x00624F58), UINT32_C(0x003A01CB), UINT32_C(0x002C9112), UINT32_C(0x003A878F), UINT32_C(0x00184B32), UINT32_C(0x001888A3), UINT32_C(0x00026E10), UINT32_C(0x000E5D54), UINT32_C(0x0055695D), UINT32_C(0x0004DC05), UINT32_C(0x001B0A95), UINT32_C(0x00230372), UINT32_C(0x000B124E), UINT32_C(0x0011DE6A), UINT32_C(0x000F2458), UINT32_C(0x002C9259), UINT32_C(0x00290AC1), UINT32_C(0x0020440B), UINT32_C(0x00114828), UINT32_C(0x002B166A)}, {UINT32_C(0x0032B46D), UINT32_C(0x00207B45), UINT32_C(0x000473C9), UINT32_C(0x007FBBBF), UINT32_C(0x0015AFF8), UINT32_C(0x0039EB60), UINT32_C(0x0035D816), UINT32_C(0x000B1D9F), UINT32_C(0x0037A1A2), UINT32_C(0x000D8711), UINT32_C(0x0002DFDE), UINT32_C(0x001CBEC4), UINT32_C(0x002A1716), UINT32_C(0x003B7011), UINT32_C(0x002CED5F), UINT32_C(0x006BA8F2), UINT32_C(0x0002B544), UINT32_C(0x000C2201), UINT32_C(0x001B97B2), UINT32_C(0x0068B05E), UINT32_C(0x002ECFAD), UINT32_C(0x0014D41E), UINT32_C(0x00319D72)}}, }, { {{UINT32_C(0x00000297), UINT32_C(0x0028EE9D), UINT32_C(0x0025F457), UINT32_C(0x003A1C7F), UINT32_C(0x003D187E), UINT32_C(0x0016AAC2), UINT32_C(0x0018DA90), UINT32_C(0x0032CC34), UINT32_C(0x0000C9FE), UINT32_C(0x00083A39), UINT32_C(0x000ABFD1), UINT32_C(0x00056518), UINT32_C(0x0020E915), UINT32_C(0x0037F36C), UINT32_C(0x001C3CE8), UINT32_C(0x0016154B), UINT32_C(0x000D8F76), UINT32_C(0x001349C7), UINT32_C(0x002C5B2D), UINT32_C(0x00302ADF), UINT32_C(0x00347C0F), UINT32_C(0x001AD83E), UINT32_C(0x00337C01)}, {UINT32_C(0x0044DBD8), UINT32_C(0x00161F8E), UINT32_C(0x003A4EAF), UINT32_C(0x007E41EE), UINT32_C(0x0020D593), UINT32_C(0x002B1752), UINT32_C(0x0008C520), UINT32_C(0x000F746C), UINT32_C(0x00251428), UINT32_C(0x00336F1A), UINT32_C(0x002F850D), UINT32_C(0x00363B2F), UINT32_C(0x003C91B4), UINT32_C(0x00373CAD), UINT32_C(0x00114941), UINT32_C(0x007F0C1B), UINT32_C(0x000AB3AA), UINT32_C(0x000B5CDA), UINT32_C(0x003A4CD6), UINT32_C(0x0013C09D), UINT32_C(0x003CFDAB), UINT32_C(0x0030F023), UINT32_C(0x002F9D40)}}, {{UINT32_C(0x0016AB0F), UINT32_C(0x0002549A), UINT32_C(0x00324067), UINT32_C(0x001CAA0D), UINT32_C(0x001D43DA), UINT32_C(0x002D4798), UINT32_C(0x002FABBD), UINT32_C(0x00524E09), UINT32_C(0x003E65A7), UINT32_C(0x000E6579), UINT32_C(0x0006B2BA), UINT32_C(0x007B52B6), UINT32_C(0x0017769B), UINT32_C(0x0013CA17), UINT32_C(0x00179C6F), UINT32_C(0x005068DF), UINT32_C(0x00329383), UINT32_C(0x001C707E), UINT32_C(0x001906BF), UINT32_C(0x0076817B), UINT32_C(0x0010ED4F), UINT32_C(0x00185468), UINT32_C(0x003C4A19)}, {UINT32_C(0x003A29A3), UINT32_C(0x0007D7E2), UINT32_C(0x000C6BC2), UINT32_C(0x007A5479), UINT32_C(0x0001F1CF), UINT32_C(0x0039F9E1), UINT32_C(0x00044B37), UINT32_C(0x005AA886), UINT32_C(0x002CDE04), UINT32_C(0x002B1FD3), UINT32_C(0x003036AE), UINT32_C(0x004BC454), UINT32_C(0x000E6063), UINT32_C(0x003E513C), UINT32_C(0x00142E11), UINT32_C(0x006EB792), UINT32_C(0x002A88A8), UINT32_C(0x003EE121), UINT32_C(0x000CAFA1), UINT32_C(0x0069BADD), UINT32_C(0x003F3982), UINT32_C(0x001A3478), UINT32_C(0x00051F0B)}}, {{UINT32_C(0x0065CD56), UINT32_C(0x002C822B), UINT32_C(0x002F6B9C), UINT32_C(0x000A1BB8), UINT32_C(0x000AAF79), UINT32_C(0x000EA4D3), UINT32_C(0x00077BC8), UINT32_C(0x004E72DE), UINT32_C(0x00344B0B), UINT32_C(0x001E3ED5), UINT32_C(0x0038E0C9), UINT32_C(0x00798666), UINT32_C(0x002C7240), UINT32_C(0x00033538), UINT32_C(0x003C3C44), UINT32_C(0x00400702), UINT32_C(0x00200573), UINT32_C(0x003E2A4D), UINT32_C(0x0004ADF5), UINT32_C(0x007BCBC6), UINT32_C(0x001D81E3), UINT32_C(0x000E60C8), UINT32_C(0x0033E777)}, {UINT32_C(0x0034AD00), UINT32_C(0x001B4772), UINT32_C(0x0003423A), UINT32_C(0x003B4DC7), UINT32_C(0x0020F3E4), UINT32_C(0x0039B171), UINT32_C(0x00127CDB), UINT32_C(0x003DCC1F), UINT32_C(0x002BC848), UINT32_C(0x00370405), UINT32_C(0x00012BF7), UINT32_C(0x002C5599), UINT32_C(0x0014AB0C), UINT32_C(0x00103733), UINT32_C(0x0002C167), UINT32_C(0x0072597A), UINT32_C(0x001A940B), UINT32_C(0x000AA67E), UINT32_C(0x0027936D), UINT32_C(0x006B2D36), UINT32_C(0x00236515), UINT32_C(0x003318C3), UINT32_C(0x0000665D)}}, {{UINT32_C(0x007BF246), UINT32_C(0x0038A54E), UINT32_C(0x0017A2C6), UINT32_C(0x002DF25B), UINT32_C(0x0022DEB2), UINT32_C(0x003B118A), UINT32_C(0x00285430), UINT32_C(0x007EDA78), UINT32_C(0x0020F2EC), UINT32_C(0x002DC0F9), UINT32_C(0x000824DC), UINT32_C(0x0035CC91), UINT32_C(0x002C8632), UINT32_C(0x001D44DC), UINT32_C(0x0018CA86), UINT32_C(0x004A0FAD), UINT32_C(0x002945F8), UINT32_C(0x0002D0D5), UINT32_C(0x001B8CB7), UINT32_C(0x002990A6), UINT32_C(0x0019DEB1), UINT32_C(0x0025B0F2), UINT32_C(0x000568B1)}, {UINT32_C(0x001B65CD), UINT32_C(0x000CDCF7), UINT32_C(0x000C0170), UINT32_C(0x00180F0B), UINT32_C(0x0016BD33), UINT32_C(0x002FFA3C), UINT32_C(0x00040868), UINT32_C(0x005D604E), UINT32_C(0x00100FF9), UINT32_C(0x00336B67), UINT32_C(0x003FF1A5), UINT32_C(0x0066724B), UINT32_C(0x003B381E), UINT32_C(0x002868B1), UINT32_C(0x0010D47B), UINT32_C(0x00776DC4), UINT32_C(0x00246BA9), UINT32_C(0x002AD2CD), UINT32_C(0x002AAF38), UINT32_C(0x000D0446), UINT32_C(0x002F27BB), UINT32_C(0x002943E1), UINT32_C(0x000F4F81)}}, {{UINT32_C(0x003D4A9C), UINT32_C(0x00024A6D), UINT32_C(0x0014B9E1), UINT32_C(0x0052698E), UINT32_C(0x0030AB88), UINT32_C(0x003B378D), UINT32_C(0x003E866C), UINT32_C(0x006C9349), UINT32_C(0x00290E01), UINT32_C(0x001477AD), UINT32_C(0x0000E581), UINT32_C(0x001E06CC), UINT32_C(0x00310918), UINT32_C(0x003193C5), UINT32_C(0x002B6332), UINT32_C(0x005EA944), UINT32_C(0x001F5E4B), UINT32_C(0x0014F9B3), UINT32_C(0x000E2522), UINT32_C(0x004FCF6F), UINT32_C(0x002A3D76), UINT32_C(0x00048DB9), UINT32_C(0x001D02E8)}, {UINT32_C(0x0037AF28), UINT32_C(0x0029FE6C), UINT32_C(0x0009EDFC), UINT32_C(0x0027B89F), UINT32_C(0x00301D20), UINT32_C(0x0032442E), UINT32_C(0x00200E28), UINT32_C(0x002D5E74), UINT32_C(0x0012B052), UINT32_C(0x003A45F3), UINT32_C(0x00317F8E), UINT32_C(0x001621A4), UINT32_C(0x0017C898), UINT32_C(0x00337293), UINT32_C(0x0017DFB5), UINT32_C(0x0071E94B), UINT32_C(0x001F139A), UINT32_C(0x001769A4), UINT32_C(0x003BA6FF), UINT32_C(0x005D3122), UINT32_C(0x002F863F), UINT32_C(0x000395F4), UINT32_C(0x00259438)}}, {{UINT32_C(0x00698800), UINT32_C(0x003C6A37), UINT32_C(0x0021F1BB), UINT32_C(0x004E8C9D), UINT32_C(0x00033DB6), UINT32_C(0x000A7B27), UINT32_C(0x000E7C3D), UINT32_C(0x00611E5A), UINT32_C(0x0008E6DC), UINT32_C(0x001B99B7), UINT32_C(0x00011169), UINT32_C(0x000C1DEC), UINT32_C(0x002423CA), UINT32_C(0x00017B20), UINT32_C(0x000AB665), UINT32_C(0x002626D4), UINT32_C(0x0023799A), UINT32_C(0x002806DE), UINT32_C(0x003692DB), UINT32_C(0x002B1EC8), UINT32_C(0x000E1414), UINT32_C(0x0026B167), UINT32_C(0x00169029)}, {UINT32_C(0x0013B973), UINT32_C(0x003B4AF9), UINT32_C(0x0031ACC0), UINT32_C(0x00393363), UINT32_C(0x000B4D81), UINT32_C(0x0015A3AE), UINT32_C(0x002B3D90), UINT32_C(0x001BCC23), UINT32_C(0x000CC79D), UINT32_C(0x003E07EC), UINT32_C(0x002EE5FF), UINT32_C(0x0045B99C), UINT32_C(0x0001C279), UINT32_C(0x001A54B4), UINT32_C(0x00175534), UINT32_C(0x004FEA24), UINT32_C(0x0010F58E), UINT32_C(0x00343EB1), UINT32_C(0x0039ED8E), UINT32_C(0x0022AE96), UINT32_C(0x0023467E), UINT32_C(0x00318A7F), UINT32_C(0x0029E05C)}}, {{UINT32_C(0x006B581B), UINT32_C(0x002F4135), UINT32_C(0x0007FED7), UINT32_C(0x0060C57B), UINT32_C(0x003393FD), UINT32_C(0x00093667), UINT32_C(0x0004FA1F), UINT32_C(0x0054919F), UINT32_C(0x00229F53), UINT32_C(0x001AB18E), UINT32_C(0x0011D07D), UINT32_C(0x0002443C), UINT32_C(0x002AA483), UINT32_C(0x0008DA57), UINT32_C(0x0038A821), UINT32_C(0x007861E9), UINT32_C(0x0024D8C3), UINT32_C(0x00309579), UINT32_C(0x002A1002), UINT32_C(0x007B324A), UINT32_C(0x00291FD3), UINT32_C(0x002937C2), UINT32_C(0x00310CCC)}, {UINT32_C(0x007B71A6), UINT32_C(0x003EB7A5), UINT32_C(0x00395509), UINT32_C(0x003F58C6), UINT32_C(0x002932CB), UINT32_C(0x003417F8), UINT32_C(0x000AD82F), UINT32_C(0x00251085), UINT32_C(0x0006F21E), UINT32_C(0x001588B0), UINT32_C(0x000C136A), UINT32_C(0x004E6BB6), UINT32_C(0x000C7C60), UINT32_C(0x0015A2FF), UINT32_C(0x001965F4), UINT32_C(0x006B3224), UINT32_C(0x00280D4B), UINT32_C(0x000374E1), UINT32_C(0x00187558), UINT32_C(0x007A1057), UINT32_C(0x0001A4DB), UINT32_C(0x00392A05), UINT32_C(0x002B7342)}}, {{UINT32_C(0x00102D12), UINT32_C(0x00157E1D), UINT32_C(0x003819E1), UINT32_C(0x000436EA), UINT32_C(0x0033F4FE), UINT32_C(0x0004D63C), UINT32_C(0x003A559C), UINT32_C(0x005758F8), UINT32_C(0x0032A48C), UINT32_C(0x0036F300), UINT32_C(0x003C06D5), UINT32_C(0x004AC77E), UINT32_C(0x0012DD43), UINT32_C(0x001CDBEB), UINT32_C(0x000CBE11), UINT32_C(0x0003CB34), UINT32_C(0x003F6859), UINT32_C(0x00144DCF), UINT32_C(0x000BDC01), UINT32_C(0x0038921F), UINT32_C(0x00161041), UINT32_C(0x000B8BE6), UINT32_C(0x002AC248)}, {UINT32_C(0x0067DD3E), UINT32_C(0x0036DB63), UINT32_C(0x0037BA32), UINT32_C(0x000AF959), UINT32_C(0x0025B293), UINT32_C(0x0010059F), UINT32_C(0x0035780D), UINT32_C(0x0046380C), UINT32_C(0x0018452D), UINT32_C(0x002B5B67), UINT32_C(0x0016B7B2), UINT32_C(0x007AF664), UINT32_C(0x003C1F41), UINT32_C(0x00097E6F), UINT32_C(0x003205A1), UINT32_C(0x00725EFF), UINT32_C(0x003E2E86), UINT32_C(0x0038F16D), UINT32_C(0x000B458E), UINT32_C(0x00385D51), UINT32_C(0x00006670), UINT32_C(0x0008BCC1), UINT32_C(0x00098C17)}}, {{UINT32_C(0x006DBF88), UINT32_C(0x002D6BB0), UINT32_C(0x003DFE61), UINT32_C(0x003DF76A), UINT32_C(0x00035BAA), UINT32_C(0x000984CF), UINT32_C(0x00054134), UINT32_C(0x00556ECD), UINT32_C(0x001F1973), UINT32_C(0x0006D2EA), UINT32_C(0x002F57DA), UINT32_C(0x0024A56A), UINT32_C(0x002A7755), UINT32_C(0x000305FD), UINT32_C(0x001C8FD6), UINT32_C(0x00481CAF), UINT32_C(0x003D0B45), UINT32_C(0x000D68BC), UINT32_C(0x0039248B), UINT32_C(0x00290881), UINT32_C(0x001C8DB5), UINT32_C(0x000250CE), UINT32_C(0x000A5C50)}, {UINT32_C(0x005313E5), UINT32_C(0x002F268C), UINT32_C(0x001D3B3E), UINT32_C(0x001FE5D2), UINT32_C(0x0006955A), UINT32_C(0x00336B39), UINT32_C(0x00290B6C), UINT32_C(0x00183F14), UINT32_C(0x0025ED57), UINT32_C(0x0006E18E), UINT32_C(0x00245AB9), UINT32_C(0x000AFADF), UINT32_C(0x001B239A), UINT32_C(0x003D1824), UINT32_C(0x00286527), UINT32_C(0x00619C72), UINT32_C(0x00341914), UINT32_C(0x00191683), UINT32_C(0x00365835), UINT32_C(0x006A9C8D), UINT32_C(0x000DCB56), UINT32_C(0x003D7D6F), UINT32_C(0x00312DA6)}}, {{UINT32_C(0x002A34A8), UINT32_C(0x0011A273), UINT32_C(0x002EF0E7), UINT32_C(0x0056ED5F), UINT32_C(0x0022B29F), UINT32_C(0x003BC53B), UINT32_C(0x00374AF6), UINT32_C(0x001209F7), UINT32_C(0x00087894), UINT32_C(0x001D51AC), UINT32_C(0x001C55D9), UINT32_C(0x0007EA51), UINT32_C(0x0027A416), UINT32_C(0x002199BF), UINT32_C(0x00398181), UINT32_C(0x0050725A), UINT32_C(0x00016D8B), UINT32_C(0x00185F36), UINT32_C(0x0022B389), UINT32_C(0x00670F14), UINT32_C(0x003EE89C), UINT32_C(0x00208598), UINT32_C(0x0037FA4E)}, {UINT32_C(0x002CBD11), UINT32_C(0x0025CA10), UINT32_C(0x0025A5C4), UINT32_C(0x0073CCEA), UINT32_C(0x001D4A0C), UINT32_C(0x003E1189), UINT32_C(0x0012D18F), UINT32_C(0x00202D6B), UINT32_C(0x0005142A), UINT32_C(0x000673EF), UINT32_C(0x00230DED), UINT32_C(0x005C9EF1), UINT32_C(0x00199F43), UINT32_C(0x000951F1), UINT32_C(0x0001FA9B), UINT32_C(0x0042FDCE), UINT32_C(0x003CF250), UINT32_C(0x00333B05), UINT32_C(0x003487E6), UINT32_C(0x001A46EF), UINT32_C(0x0009221A), UINT32_C(0x001601FA), UINT32_C(0x000A8F97)}}, {{UINT32_C(0x0029B1A4), UINT32_C(0x001A205E), UINT32_C(0x0010D45B), UINT32_C(0x00009969), UINT32_C(0x003B86E1), UINT32_C(0x00263695), UINT32_C(0x0038303F), UINT32_C(0x000F276E), UINT32_C(0x003DD7EE), UINT32_C(0x0003D7B5), UINT32_C(0x0019C4B1), UINT32_C(0x003248D5), UINT32_C(0x0021E8FE), UINT32_C(0x000FC768), UINT32_C(0x001F35EC), UINT32_C(0x002FB73B), UINT32_C(0x001B945A), UINT32_C(0x00164C1B), UINT32_C(0x002F277F), UINT32_C(0x005EAE78), UINT32_C(0x00071711), UINT32_C(0x000C61BB), UINT32_C(0x000AB2C0)}, {UINT32_C(0x0016DF7A), UINT32_C(0x0015DC01), UINT32_C(0x002BA091), UINT32_C(0x0011F44E), UINT32_C(0x000B08D7), UINT32_C(0x002E9923), UINT32_C(0x00092787), UINT32_C(0x002ADBB4), UINT32_C(0x003D7AA5), UINT32_C(0x0009E226), UINT32_C(0x002384F8), UINT32_C(0x003614F7), UINT32_C(0x003BEA0C), UINT32_C(0x002456BB), UINT32_C(0x00107C57), UINT32_C(0x004A575C), UINT32_C(0x000760C6), UINT32_C(0x0034DEA3), UINT32_C(0x002C29AE), UINT32_C(0x007702EC), UINT32_C(0x000797DD), UINT32_C(0x002C2EC2), UINT32_C(0x000B53B4)}}, {{UINT32_C(0x004E14DC), UINT32_C(0x000DCCE7), UINT32_C(0x00268B67), UINT32_C(0x00671423), UINT32_C(0x000C36E7), UINT32_C(0x002EF482), UINT32_C(0x0002A811), UINT32_C(0x004F450D), UINT32_C(0x0019D6E8), UINT32_C(0x00379047), UINT32_C(0x0024CF74), UINT32_C(0x0017F363), UINT32_C(0x00242D1C), UINT32_C(0x000034DF), UINT32_C(0x002AEC5D), UINT32_C(0x0016D8E1), UINT32_C(0x0015B2FA), UINT32_C(0x00347EF8), UINT32_C(0x00075A03), UINT32_C(0x006AFAC1), UINT32_C(0x0010C4CC), UINT32_C(0x00216803), UINT32_C(0x001AA96E)}, {UINT32_C(0x0057B948), UINT32_C(0x002E3492), UINT32_C(0x002E8BEB), UINT32_C(0x00500CA7), UINT32_C(0x002A1860), UINT32_C(0x001B6814), UINT32_C(0x0019C85F), UINT32_C(0x0061C4ED), UINT32_C(0x002EF6B7), UINT32_C(0x0038C2BF), UINT32_C(0x003C380D), UINT32_C(0x0011C0C0), UINT32_C(0x0011337C), UINT32_C(0x0015C779), UINT32_C(0x00136724), UINT32_C(0x00050BF7), UINT32_C(0x0005558D), UINT32_C(0x002EC289), UINT32_C(0x003637CA), UINT32_C(0x004B8113), UINT32_C(0x001A69CC), UINT32_C(0x00301379), UINT32_C(0x003F1AD7)}}, {{UINT32_C(0x0012C055), UINT32_C(0x000EB55E), UINT32_C(0x000D7834), UINT32_C(0x0027B02C), UINT32_C(0x003B78F0), UINT32_C(0x0010001F), UINT32_C(0x002DD1EC), UINT32_C(0x0044CC9D), UINT32_C(0x003F406F), UINT32_C(0x002BBD9B), UINT32_C(0x003D495E), UINT32_C(0x002D8896), UINT32_C(0x0030CB6A), UINT32_C(0x001B5E53), UINT32_C(0x002AD9F8), UINT32_C(0x001E75BF), UINT32_C(0x000F94EA), UINT32_C(0x00057B4C), UINT32_C(0x00370072), UINT32_C(0x0014B385), UINT32_C(0x0005ACED), UINT32_C(0x002C28F0), UINT32_C(0x003AB7D9)}, {UINT32_C(0x0020CF13), UINT32_C(0x00225C38), UINT32_C(0x002B6293), UINT32_C(0x0013F808), UINT32_C(0x00344CB9), UINT32_C(0x0033719D), UINT32_C(0x002FE2B6), UINT32_C(0x00282CB5), UINT32_C(0x00175559), UINT32_C(0x000403EA), UINT32_C(0x00359279), UINT32_C(0x005D8812), UINT32_C(0x000B1A40), UINT32_C(0x003EE682), UINT32_C(0x0016E724), UINT32_C(0x002FB1C5), UINT32_C(0x002F6BEE), UINT32_C(0x0022778B), UINT32_C(0x0019AEA3), UINT32_C(0x003D80A9), UINT32_C(0x0032D9D1), UINT32_C(0x003BF23F), UINT32_C(0x002DBA08)}}, {{UINT32_C(0x00475A5B), UINT32_C(0x000AF126), UINT32_C(0x000E8D05), UINT32_C(0x0037AAD9), UINT32_C(0x003350FF), UINT32_C(0x003B6DF1), UINT32_C(0x000C70D2), UINT32_C(0x0031341A), UINT32_C(0x00166A1F), UINT32_C(0x003D3DBE), UINT32_C(0x0021F7E8), UINT32_C(0x006D14A1), UINT32_C(0x0039D159), UINT32_C(0x001EFA80), UINT32_C(0x0032B317), UINT32_C(0x0024939B), UINT32_C(0x001C82DD), UINT32_C(0x00061D7A), UINT32_C(0x00147571), UINT32_C(0x004FFE3E), UINT32_C(0x000965DE), UINT32_C(0x0028C381), UINT32_C(0x000DFE6C)}, {UINT32_C(0x0035EAA0), UINT32_C(0x0009123B), UINT32_C(0x0032E9E6), UINT32_C(0x00084111), UINT32_C(0x0000F226), UINT32_C(0x003CD924), UINT32_C(0x000ABC8B), UINT32_C(0x00538B5D), UINT32_C(0x00023291), UINT32_C(0x000DB4A0), UINT32_C(0x00010030), UINT32_C(0x00328332), UINT32_C(0x001A2589), UINT32_C(0x00233EA0), UINT32_C(0x0017BE31), UINT32_C(0x00586460), UINT32_C(0x0012777E), UINT32_C(0x002D359E), UINT32_C(0x000D0BCC), UINT32_C(0x00245915), UINT32_C(0x000F3FAB), UINT32_C(0x00232DCC), UINT32_C(0x0026CC0F)}}, {{UINT32_C(0x006107A0), UINT32_C(0x00348213), UINT32_C(0x001DB8EE), UINT32_C(0x003152F3), UINT32_C(0x0029336E), UINT32_C(0x001572BD), UINT32_C(0x002314E4), UINT32_C(0x0050D309), UINT32_C(0x002101EA), UINT32_C(0x0000EDBA), UINT32_C(0x0011643A), UINT32_C(0x002A8161), UINT32_C(0x00169D2D), UINT32_C(0x00105B84), UINT32_C(0x0007A268), UINT32_C(0x00602253), UINT32_C(0x000EAF07), UINT32_C(0x000BF9C0), UINT32_C(0x001F44D9), UINT32_C(0x0000BADF), UINT32_C(0x000B6708), UINT32_C(0x000F4EDA), UINT32_C(0x0027E80B)}, {UINT32_C(0x0079EA50), UINT32_C(0x0012030F), UINT32_C(0x00175D43), UINT32_C(0x005CD824), UINT32_C(0x00334D4F), UINT32_C(0x002AEE35), UINT32_C(0x0021CFB0), UINT32_C(0x00199622), UINT32_C(0x000CA221), UINT32_C(0x0007BC44), UINT32_C(0x0029CBBF), UINT32_C(0x0019F06C), UINT32_C(0x0034ECA6), UINT32_C(0x0027BE0E), UINT32_C(0x002FE495), UINT32_C(0x00705DBB), UINT32_C(0x002F6511), UINT32_C(0x000D66C8), UINT32_C(0x000C392A), UINT32_C(0x0014BBEE), UINT32_C(0x0007F420), UINT32_C(0x0020EF1F), UINT32_C(0x002DD2C3)}}, {{UINT32_C(0x001F311E), UINT32_C(0x0035E164), UINT32_C(0x000D7E33), UINT32_C(0x004EE0A2), UINT32_C(0x001B027B), UINT32_C(0x003AF8A9), UINT32_C(0x000897E1), UINT32_C(0x004E7636), UINT32_C(0x002CFEBD), UINT32_C(0x00349E23), UINT32_C(0x003A2005), UINT32_C(0x0033A740), UINT32_C(0x000273B7), UINT32_C(0x00018397), UINT32_C(0x0002783F), UINT32_C(0x00201E98), UINT32_C(0x0009D39F), UINT32_C(0x000A5722), UINT32_C(0x002D49F8), UINT32_C(0x00798C09), UINT32_C(0x000C4014), UINT32_C(0x0007D8C3), UINT32_C(0x002F570F)}, {UINT32_C(0x00477116), UINT32_C(0x00161163), UINT32_C(0x002DF7BB), UINT32_C(0x001DD1D7), UINT32_C(0x003A92DB), UINT32_C(0x0036ACFC), UINT32_C(0x00211278), UINT32_C(0x0055790C), UINT32_C(0x000B98E9), UINT32_C(0x002EB711), UINT32_C(0x0009D7B7), UINT32_C(0x003CD366), UINT32_C(0x000622E0), UINT32_C(0x000D9307), UINT32_C(0x0001BD5F), UINT32_C(0x0073A35F), UINT32_C(0x003FC1C3), UINT32_C(0x0025C15B), UINT32_C(0x00359419), UINT32_C(0x006A6138), UINT32_C(0x002A142D), UINT32_C(0x000BBEDD), UINT32_C(0x0008A742)}}, }, { {{UINT32_C(0x00020495), UINT32_C(0x0029C46F), UINT32_C(0x0015C863), UINT32_C(0x001A9BE1), UINT32_C(0x002541BC), UINT32_C(0x003083D6), UINT32_C(0x000E2B6E), UINT32_C(0x004DEA6D), UINT32_C(0x00233C05), UINT32_C(0x00093178), UINT32_C(0x00300C16), UINT32_C(0x0047A8A8), UINT32_C(0x003EEE62), UINT32_C(0x003A3FFE), UINT32_C(0x002D8A6E), UINT32_C(0x003747DF), UINT32_C(0x0023EBEC), UINT32_C(0x003A703F), UINT32_C(0x00057635), UINT32_C(0x004C2FF0), UINT32_C(0x0013DB65), UINT32_C(0x0028F19D), UINT32_C(0x00333AB2)}, {UINT32_C(0x0000A454), UINT32_C(0x0003242C), UINT32_C(0x00263770), UINT32_C(0x0070C7F5), UINT32_C(0x0007B940), UINT32_C(0x00062CBB), UINT32_C(0x000BB7CC), UINT32_C(0x00001E3F), UINT32_C(0x00107BEF), UINT32_C(0x0024BD77), UINT32_C(0x0003307A), UINT32_C(0x003C6EC5), UINT32_C(0x00357523), UINT32_C(0x003FE203), UINT32_C(0x002F4B77), UINT32_C(0x0039AB29), UINT32_C(0x00009871), UINT32_C(0x003024E6), UINT32_C(0x001EAE16), UINT32_C(0x003F3D08), UINT32_C(0x0029A969), UINT32_C(0x001642E9), UINT32_C(0x003925FE)}}, {{UINT32_C(0x000C8333), UINT32_C(0x00134BA7), UINT32_C(0x0009B871), UINT32_C(0x0004CDC4), UINT32_C(0x00289CA0), UINT32_C(0x001FC8D2), UINT32_C(0x0039D91B), UINT32_C(0x0038FC3D), UINT32_C(0x0019773B), UINT32_C(0x0006D4DF), UINT32_C(0x0006221A), UINT32_C(0x004F1A1C), UINT32_C(0x0010AF9E), UINT32_C(0x0018553A), UINT32_C(0x00130550), UINT32_C(0x00111A01), UINT32_C(0x003C7519), UINT32_C(0x00287566), UINT32_C(0x001644E8), UINT32_C(0x0041602D), UINT32_C(0x0032CDC1), UINT32_C(0x001C2B40), UINT32_C(0x0030A48F)}, {UINT32_C(0x0042DCF0), UINT32_C(0x0008B28F), UINT32_C(0x003EC6F9), UINT32_C(0x006A8D26), UINT32_C(0x0034DBA9), UINT32_C(0x002BD050), UINT32_C(0x003FE19C), UINT32_C(0x0030096C), UINT32_C(0x0013965D), UINT32_C(0x00010C86), UINT32_C(0x003C6698), UINT32_C(0x00731549), UINT32_C(0x000AAA24), UINT32_C(0x0010C344), UINT32_C(0x003F7448), UINT32_C(0x000C5964), UINT32_C(0x0019616E), UINT32_C(0x0035336F), UINT32_C(0x000723D5), UINT32_C(0x00244786), UINT32_C(0x002452D1), UINT32_C(0x001F0B6A), UINT32_C(0x0031D0BC)}}, {{UINT32_C(0x001ABEAE), UINT32_C(0x00140094), UINT32_C(0x0025F718), UINT32_C(0x001FFB06), UINT32_C(0x002CE72A), UINT32_C(0x000678CF), UINT32_C(0x0007D404), UINT32_C(0x0073CB92), UINT32_C(0x000A9FC4), UINT32_C(0x000668BB), UINT32_C(0x0027BD0D), UINT32_C(0x002BDE2E), UINT32_C(0x003EDD2C), UINT32_C(0x00154AE6), UINT32_C(0x00290863), UINT32_C(0x00334512), UINT32_C(0x001E546A), UINT32_C(0x002467D8), UINT32_C(0x0006CBDB), UINT32_C(0x002139AD), UINT32_C(0x001CED3F), UINT32_C(0x00217DC2), UINT32_C(0x001F626B)}, {UINT32_C(0x00390DFD), UINT32_C(0x0002F8B3), UINT32_C(0x000E30AF), UINT32_C(0x0005D7A3), UINT32_C(0x001EFA22), UINT32_C(0x002CAFDB), UINT32_C(0x00004971), UINT32_C(0x002EFBEA), UINT32_C(0x001F4ACB), UINT32_C(0x00302B99), UINT32_C(0x001DFC66), UINT32_C(0x007364F2), UINT32_C(0x00371C65), UINT32_C(0x0028108D), UINT32_C(0x003C66ED), UINT32_C(0x005D7568), UINT32_C(0x00212DC4), UINT32_C(0x0011A56E), UINT32_C(0x0034EE5A), UINT32_C(0x0031E1D4), UINT32_C(0x003CF9C2), UINT32_C(0x003EB41F), UINT32_C(0x003C84A7)}}, {{UINT32_C(0x007FF718), UINT32_C(0x00032692), UINT32_C(0x002F052E), UINT32_C(0x00755B72), UINT32_C(0x003D2345), UINT32_C(0x0038E6DD), UINT32_C(0x0025DC5A), UINT32_C(0x0065158E), UINT32_C(0x0035F9E0), UINT32_C(0x0019A28C), UINT32_C(0x00178B35), UINT32_C(0x0044D5B8), UINT32_C(0x0039CE59), UINT32_C(0x00379216), UINT32_C(0x00098649), UINT32_C(0x00105E9E), UINT32_C(0x0037A436), UINT32_C(0x0035A4A6), UINT32_C(0x00087244), UINT32_C(0x002AA631), UINT32_C(0x001E9EDB), UINT32_C(0x000A2622), UINT32_C(0x001D1531)}, {UINT32_C(0x003C8CB9), UINT32_C(0x003D6118), UINT32_C(0x00179E49), UINT32_C(0x002B0C0C), UINT32_C(0x0039C364), UINT32_C(0x002CA57A), UINT32_C(0x003F8C54), UINT32_C(0x001FB453), UINT32_C(0x003C0C82), UINT32_C(0x003B2FF0), UINT32_C(0x003A2B7F), UINT32_C(0x0058C732), UINT32_C(0x000C6E03), UINT32_C(0x0030EAAB), UINT32_C(0x002A43FC), UINT32_C(0x0029DF25), UINT32_C(0x00002B4F), UINT32_C(0x0022A3CA), UINT32_C(0x00104844), UINT32_C(0x004A0B3B), UINT32_C(0x001849CB), UINT32_C(0x001C4653), UINT32_C(0x002F1596)}}, {{UINT32_C(0x001D4A19), UINT32_C(0x0035FDF4), UINT32_C(0x000F8F5B), UINT32_C(0x003FF4B0), UINT32_C(0x00157527), UINT32_C(0x0015F4FF), UINT32_C(0x00337DA4), UINT32_C(0x002BC44F), UINT32_C(0x00223C67), UINT32_C(0x001B663C), UINT32_C(0x00281B4B), UINT32_C(0x0078BDF6), UINT32_C(0x000D0B3B), UINT32_C(0x00099BBB), UINT32_C(0x002A4438), UINT32_C(0x00512DEC), UINT32_C(0x0007055E), UINT32_C(0x002AF2F0), UINT32_C(0x002C9105), UINT32_C(0x0023E635), UINT32_C(0x001CB35B), UINT32_C(0x0028C1C2), UINT32_C(0x002DE4D1)}, {UINT32_C(0x00140ADA), UINT32_C(0x0011EC68), UINT32_C(0x0018DFDD), UINT32_C(0x006F5E0E), UINT32_C(0x00185618), UINT32_C(0x000B38F8), UINT32_C(0x0003AC86), UINT32_C(0x00345A9C), UINT32_C(0x0018811B), UINT32_C(0x0034EF90), UINT32_C(0x00309FA7), UINT32_C(0x002657B1), UINT32_C(0x0026A02F), UINT32_C(0x003FB112), UINT32_C(0x003E8E9A), UINT32_C(0x004E6284), UINT32_C(0x00310F7A), UINT32_C(0x0013E7DA), UINT32_C(0x0014C174), UINT32_C(0x0038C1FC), UINT32_C(0x0026EC4A), UINT32_C(0x0018C688), UINT32_C(0x002A438F)}}, {{UINT32_C(0x004F0ACF), UINT32_C(0x001C15FB), UINT32_C(0x003CD5C1), UINT32_C(0x000D2292), UINT32_C(0x0025B6A8), UINT32_C(0x00221999), UINT32_C(0x0016BA08), UINT32_C(0x00792A56), UINT32_C(0x00215FF2), UINT32_C(0x002B39F1), UINT32_C(0x000F2F96), UINT32_C(0x00025D28), UINT32_C(0x0029609E), UINT32_C(0x00351C7F), UINT32_C(0x000A603D), UINT32_C(0x003F3CD9), UINT32_C(0x00024C3B), UINT32_C(0x000C25E9), UINT32_C(0x002157FF), UINT32_C(0x003E3F6F), UINT32_C(0x0015898B), UINT32_C(0x0007923F), UINT32_C(0x0011A75F)}, {UINT32_C(0x001B8989), UINT32_C(0x0036B95E), UINT32_C(0x000B28EB), UINT32_C(0x006F0F0E), UINT32_C(0x001BB501), UINT32_C(0x0029744C), UINT32_C(0x002C2A82), UINT32_C(0x006278D2), UINT32_C(0x0006D540), UINT32_C(0x00338072), UINT32_C(0x0023F135), UINT32_C(0x006B3C7F), UINT32_C(0x003F9CA2), UINT32_C(0x003069ED), UINT32_C(0x001454A7), UINT32_C(0x001CEA39), UINT32_C(0x000EDAE9), UINT32_C(0x002BF356), UINT32_C(0x003B1BD9), UINT32_C(0x00073EF3), UINT32_C(0x003041D7), UINT32_C(0x00096064), UINT32_C(0x00142C76)}}, {{UINT32_C(0x0068FFC6), UINT32_C(0x003C11C5), UINT32_C(0x0031DD2F), UINT32_C(0x002086BC), UINT32_C(0x00213A20), UINT32_C(0x000198C3), UINT32_C(0x003C70AA), UINT32_C(0x0064A691), UINT32_C(0x003F88A6), UINT32_C(0x0010B222), UINT32_C(0x001133AE), UINT32_C(0x0000D81A), UINT32_C(0x0008B4F2), UINT32_C(0x0037B644), UINT32_C(0x0020B08F), UINT32_C(0x002B77A7), UINT32_C(0x000AEF1B), UINT32_C(0x002AB9A7), UINT32_C(0x001FFD9C), UINT32_C(0x002D2887), UINT32_C(0x001829D4), UINT32_C(0x00291E60), UINT32_C(0x0024DD09)}, {UINT32_C(0x005A1EE9), UINT32_C(0x000858BD), UINT32_C(0x0006666A), UINT32_C(0x00665E27), UINT32_C(0x001E2D76), UINT32_C(0x00151594), UINT32_C(0x003CBB31), UINT32_C(0x00274D76), UINT32_C(0x00385369), UINT32_C(0x002D97F4), UINT32_C(0x00213614), UINT32_C(0x005429E7), UINT32_C(0x001A6A17), UINT32_C(0x00022689), UINT32_C(0x0007C22E), UINT32_C(0x000CB237), UINT32_C(0x003B33BC), UINT32_C(0x003A2CF2), UINT32_C(0x001014A7), UINT32_C(0x004AFB82), UINT32_C(0x003DB97C), UINT32_C(0x0016FCCC), UINT32_C(0x001D22CE)}}, {{UINT32_C(0x00583D1F), UINT32_C(0x001CAB29), UINT32_C(0x0021DFFC), UINT32_C(0x00579859), UINT32_C(0x00239960), UINT32_C(0x00287022), UINT32_C(0x000FBF8A), UINT32_C(0x00522225), UINT32_C(0x00084A9F), UINT32_C(0x0024948B), UINT32_C(0x002CC83C), UINT32_C(0x0067C4AC), UINT32_C(0x0034836D), UINT32_C(0x00216546), UINT32_C(0x00364159), UINT32_C(0x003ADB5A), UINT32_C(0x0003CEB5), UINT32_C(0x00345B44), UINT32_C(0x002138FD), UINT32_C(0x001743CA), UINT32_C(0x00069ABD), UINT32_C(0x0023EC4A), UINT32_C(0x00050B88)}, {UINT32_C(0x006438C3), UINT32_C(0x00369425), UINT32_C(0x00279B67), UINT32_C(0x000D0143), UINT32_C(0x001F364D), UINT32_C(0x00177C5D), UINT32_C(0x00095B66), UINT32_C(0x002B4C4F), UINT32_C(0x002C159D), UINT32_C(0x0004AD5B), UINT32_C(0x00177C82), UINT32_C(0x0033A0E4), UINT32_C(0x003ACCD6), UINT32_C(0x0034623F), UINT32_C(0x000F5D74), UINT32_C(0x00680AEF), UINT32_C(0x002D31E0), UINT32_C(0x000BB398), UINT32_C(0x00233354), UINT32_C(0x00253484), UINT32_C(0x00385E50), UINT32_C(0x000F78CF), UINT32_C(0x000322BA)}}, {{UINT32_C(0x00724124), UINT32_C(0x0030C69A), UINT32_C(0x00310E26), UINT32_C(0x00278477), UINT32_C(0x0012FFD4), UINT32_C(0x0005570F), UINT32_C(0x003EBD03), UINT32_C(0x006F51F4), UINT32_C(0x00043A21), UINT32_C(0x001A4CEA), UINT32_C(0x00172D44), UINT32_C(0x00696C4A), UINT32_C(0x003FA9A1), UINT32_C(0x0026633B), UINT32_C(0x0005F2B7), UINT32_C(0x0002C7C4), UINT32_C(0x0003A452), UINT32_C(0x003F240B), UINT32_C(0x003CBC7E), UINT32_C(0x00074F43), UINT32_C(0x002F68A2), UINT32_C(0x000623F6), UINT32_C(0x001D4282)}, {UINT32_C(0x0014B428), UINT32_C(0x003E7D33), UINT32_C(0x002520C7), UINT32_C(0x0041CCF2), UINT32_C(0x00233BAB), UINT32_C(0x001589F9), UINT32_C(0x000D2E6E), UINT32_C(0x001FFD7C), UINT32_C(0x001DCFD2), UINT32_C(0x00390FFE), UINT32_C(0x00031026), UINT32_C(0x00772372), UINT32_C(0x0010F507), UINT32_C(0x0039D935), UINT32_C(0x0011504F), UINT32_C(0x0041B316), UINT32_C(0x001B31F1), UINT32_C(0x00309FCB), UINT32_C(0x002D1468), UINT32_C(0x00238297), UINT32_C(0x001B6605), UINT32_C(0x001B59F9), UINT32_C(0x000B6C96)}}, {{UINT32_C(0x0043F6C2), UINT32_C(0x000763DF), UINT32_C(0x00308091), UINT32_C(0x006DDCFF), UINT32_C(0x002FC758), UINT32_C(0x001EFF60), UINT32_C(0x0018180E), UINT32_C(0x005F0A71), UINT32_C(0x001E4437), UINT32_C(0x000EADD7), UINT32_C(0x0012CA06), UINT32_C(0x0024EF90), UINT32_C(0x00188475), UINT32_C(0x0018B6D9), UINT32_C(0x001DEA6E), UINT32_C(0x0044FC14), UINT32_C(0x003D1458), UINT32_C(0x0031E96A), UINT32_C(0x000E2DAF), UINT32_C(0x00628BB3), UINT32_C(0x002A2193), UINT32_C(0x00011F06), UINT32_C(0x000C91E9)}, {UINT32_C(0x00482FED), UINT32_C(0x002528F8), UINT32_C(0x002FD25C), UINT32_C(0x00261308), UINT32_C(0x00139233), UINT32_C(0x00302E3F), UINT32_C(0x002A13B0), UINT32_C(0x007DEDA6), UINT32_C(0x0011FB4F), UINT32_C(0x0008FBA1), UINT32_C(0x00196CC9), UINT32_C(0x0051E7E4), UINT32_C(0x0005A421), UINT32_C(0x003784E4), UINT32_C(0x00174AFF), UINT32_C(0x004725BC), UINT32_C(0x0004CD05), UINT32_C(0x0026FA6B), UINT32_C(0x001805BF), UINT32_C(0x0017519D), UINT32_C(0x001A7B71), UINT32_C(0x00280018), UINT32_C(0x0026EC17)}}, {{UINT32_C(0x001C205B), UINT32_C(0x002CCC69), UINT32_C(0x0030F0E5), UINT32_C(0x00192A4E), UINT32_C(0x003D1B67), UINT32_C(0x0020DAE2), UINT32_C(0x000769DE), UINT32_C(0x001BFA4D), UINT32_C(0x000B7649), UINT32_C(0x000C1B2B), UINT32_C(0x0038C90F), UINT32_C(0x001D0BF8), UINT32_C(0x000577CB), UINT32_C(0x00190B4F), UINT32_C(0x003E238F), UINT32_C(0x0052DFF8), UINT32_C(0x0010D0F0), UINT32_C(0x000218C9), UINT32_C(0x0013F89C), UINT32_C(0x00714803), UINT32_C(0x003A6F8C), UINT32_C(0x00353B6D), UINT32_C(0x002FFEEA)}, {UINT32_C(0x0030C7D2), UINT32_C(0x000CA103), UINT32_C(0x0021611C), UINT32_C(0x00188899), UINT32_C(0x001F54E9), UINT32_C(0x00010620), UINT32_C(0x000AE01A), UINT32_C(0x007A2DB9), UINT32_C(0x002A9401), UINT32_C(0x00209C63), UINT32_C(0x00389F5D), UINT32_C(0x00196FFF), UINT32_C(0x002CE291), UINT32_C(0x00340A01), UINT32_C(0x003FF906), UINT32_C(0x002C42FC), UINT32_C(0x0037C6A3), UINT32_C(0x001146A7), UINT32_C(0x00044BAD), UINT32_C(0x0063D883), UINT32_C(0x000BAB16), UINT32_C(0x001FF085), UINT32_C(0x00140B79)}}, {{UINT32_C(0x0032C0E7), UINT32_C(0x00208DFF), UINT32_C(0x002F6660), UINT32_C(0x0070C915), UINT32_C(0x002D9AF5), UINT32_C(0x0012AB64), UINT32_C(0x0015326E), UINT32_C(0x001E8920), UINT32_C(0x0031383C), UINT32_C(0x000E45C6), UINT32_C(0x003FF494), UINT32_C(0x00792407), UINT32_C(0x0021A39A), UINT32_C(0x003EFC30), UINT32_C(0x0008C932), UINT32_C(0x0031D0D5), UINT32_C(0x0013E9B1), UINT32_C(0x0016F25F), UINT32_C(0x00251F58), UINT32_C(0x001D0CCC), UINT32_C(0x00189479), UINT32_C(0x001E2A1D), UINT32_C(0x001548E8)}, {UINT32_C(0x007ED4E4), UINT32_C(0x003831E3), UINT32_C(0x0036B65B), UINT32_C(0x00173DB0), UINT32_C(0x0030B4B3), UINT32_C(0x003B0A38), UINT32_C(0x00176695), UINT32_C(0x0022F024), UINT32_C(0x002DC536), UINT32_C(0x0026D641), UINT32_C(0x003845E6), UINT32_C(0x006AE213), UINT32_C(0x000F1253), UINT32_C(0x0035B8B4), UINT32_C(0x002D1D2C), UINT32_C(0x0026072B), UINT32_C(0x000C4DFF), UINT32_C(0x00098C06), UINT32_C(0x003973E5), UINT32_C(0x006E815F), UINT32_C(0x0035E739), UINT32_C(0x0004E25A), UINT32_C(0x00323E06)}}, {{UINT32_C(0x0018218E), UINT32_C(0x001C5A05), UINT32_C(0x00156FEA), UINT32_C(0x000DEF36), UINT32_C(0x003405AB), UINT32_C(0x000C8D8A), UINT32_C(0x003D4CE6), UINT32_C(0x0036C6B1), UINT32_C(0x0026347B), UINT32_C(0x002BEC62), UINT32_C(0x00135B49), UINT32_C(0x004ED20D), UINT32_C(0x002BCE15), UINT32_C(0x000A503C), UINT32_C(0x0030279F), UINT32_C(0x00124E30), UINT32_C(0x003AF38A), UINT32_C(0x0008EB83), UINT32_C(0x00141065), UINT32_C(0x004DF4DC), UINT32_C(0x00176DD3), UINT32_C(0x000FCB73), UINT32_C(0x000229CD)}, {UINT32_C(0x0004041C), UINT32_C(0x003CAB13), UINT32_C(0x0029B3E4), UINT32_C(0x001B70DE), UINT32_C(0x00009B3A), UINT32_C(0x002C70AC), UINT32_C(0x00272EDA), UINT32_C(0x0010407E), UINT32_C(0x000645F0), UINT32_C(0x001E2E70), UINT32_C(0x000502A8), UINT32_C(0x00794831), UINT32_C(0x003AE5DE), UINT32_C(0x002799EA), UINT32_C(0x001CAFA4), UINT32_C(0x006E7B51), UINT32_C(0x0008984E), UINT32_C(0x0012EF3F), UINT32_C(0x000025E7), UINT32_C(0x000DDA10), UINT32_C(0x00119536), UINT32_C(0x003D6D8D), UINT32_C(0x0006C12F)}}, {{UINT32_C(0x00435EE4), UINT32_C(0x000163D6), UINT32_C(0x00377C11), UINT32_C(0x003BD7D6), UINT32_C(0x002E05F5), UINT32_C(0x001FBA80), UINT32_C(0x00107C07), UINT32_C(0x00681A61), UINT32_C(0x0005189C), UINT32_C(0x0002C249), UINT32_C(0x003607CD), UINT32_C(0x000957D6), UINT32_C(0x003F952A), UINT32_C(0x0008ECBA), UINT32_C(0x001E29E1), UINT32_C(0x0033462B), UINT32_C(0x0022898D), UINT32_C(0x001AABD5), UINT32_C(0x002E885C), UINT32_C(0x000A2647), UINT32_C(0x0037A37C), UINT32_C(0x00297E79), UINT32_C(0x002A2CA3)}, {UINT32_C(0x002C1A17), UINT32_C(0x00158B61), UINT32_C(0x0016816F), UINT32_C(0x0053A5A8), UINT32_C(0x001547B2), UINT32_C(0x0030AC66), UINT32_C(0x00202C4C), UINT32_C(0x00274C07), UINT32_C(0x000D322E), UINT32_C(0x0004A3E0), UINT32_C(0x000F7BC7), UINT32_C(0x00102196), UINT32_C(0x000C81FB), UINT32_C(0x00358316), UINT32_C(0x00063F2B), UINT32_C(0x007FF11C), UINT32_C(0x0025FFE3), UINT32_C(0x00256744), UINT32_C(0x002E91A0), UINT32_C(0x0064976E), UINT32_C(0x0038C948), UINT32_C(0x00396FAC), UINT32_C(0x0037CF6E)}}, {{UINT32_C(0x00794F1D), UINT32_C(0x002B6A50), UINT32_C(0x00120AE4), UINT32_C(0x001CEC0F), UINT32_C(0x00383F87), UINT32_C(0x00216277), UINT32_C(0x00286CEA), UINT32_C(0x00103D5A), UINT32_C(0x002AA574), UINT32_C(0x003D3491), UINT32_C(0x0022931D), UINT32_C(0x00489498), UINT32_C(0x0032EEF4), UINT32_C(0x000CA2AA), UINT32_C(0x00080A27), UINT32_C(0x007FA661), UINT32_C(0x00094E9A), UINT32_C(0x003EE29E), UINT32_C(0x002AC21C), UINT32_C(0x001CE359), UINT32_C(0x003330FC), UINT32_C(0x001C6ADE), UINT32_C(0x00187790)}, {UINT32_C(0x00340EF5), UINT32_C(0x000BDD62), UINT32_C(0x00333909), UINT32_C(0x0039146A), UINT32_C(0x0038BB2E), UINT32_C(0x00030F37), UINT32_C(0x00143B07), UINT32_C(0x0031CC3D), UINT32_C(0x002B5B5C), UINT32_C(0x00005892), UINT32_C(0x00052BD0), UINT32_C(0x000A282B), UINT32_C(0x0030D9C5), UINT32_C(0x001004FC), UINT32_C(0x0038922A), UINT32_C(0x000241A2), UINT32_C(0x000053C3), UINT32_C(0x002C02CA), UINT32_C(0x002D4F8F), UINT32_C(0x004AB17B), UINT32_C(0x003667C0), UINT32_C(0x0004EF7E), UINT32_C(0x000080E4)}}, {{UINT32_C(0x005FA89B), UINT32_C(0x001D2F7D), UINT32_C(0x0019B385), UINT32_C(0x0053B863), UINT32_C(0x0022E414), UINT32_C(0x0011C620), UINT32_C(0x001F0CA5), UINT32_C(0x001B475A), UINT32_C(0x003E5B07), UINT32_C(0x0020C305), UINT32_C(0x0018A591), UINT32_C(0x007DE564), UINT32_C(0x001F654F), UINT32_C(0x003F1044), UINT32_C(0x000D7B16), UINT32_C(0x004E51E7), UINT32_C(0x00267972), UINT32_C(0x002A42F3), UINT32_C(0x000159C2), UINT32_C(0x0016007C), UINT32_C(0x000F9CA8), UINT32_C(0x00021184), UINT32_C(0x0007FCE7)}, {UINT32_C(0x00045B0F), UINT32_C(0x000002C5), UINT32_C(0x0033642B), UINT32_C(0x0038378F), UINT32_C(0x001F29A8), UINT32_C(0x0018130B), UINT32_C(0x00340B0B), UINT32_C(0x007667B7), UINT32_C(0x0038B986), UINT32_C(0x00218A5C), UINT32_C(0x0020D3E4), UINT32_C(0x002B84EB), UINT32_C(0x001DBF61), UINT32_C(0x0006E45C), UINT32_C(0x000C2528), UINT32_C(0x003D5B87), UINT32_C(0x003B9631), UINT32_C(0x0016FFC9), UINT32_C(0x002577D8), UINT32_C(0x00084014), UINT32_C(0x00326179), UINT32_C(0x002B97FC), UINT32_C(0x0017D9B9)}}, }, { {{UINT32_C(0x0024FC6B), UINT32_C(0x00260048), UINT32_C(0x0027A39B), UINT32_C(0x004A6771), UINT32_C(0x002F8996), UINT32_C(0x00250571), UINT32_C(0x0022BD5A), UINT32_C(0x0016BA95), UINT32_C(0x00177752), UINT32_C(0x003AAE54), UINT32_C(0x000382BC), UINT32_C(0x002DBDCA), UINT32_C(0x00175D11), UINT32_C(0x000485AB), UINT32_C(0x00263BCC), UINT32_C(0x002CA217), UINT32_C(0x0033AA31), UINT32_C(0x001EB58F), UINT32_C(0x001CAA07), UINT32_C(0x00439150), UINT32_C(0x003350D2), UINT32_C(0x002E0A1C), UINT32_C(0x000B60E4)}, {UINT32_C(0x006AFAB6), UINT32_C(0x001979BD), UINT32_C(0x00206F5D), UINT32_C(0x004F0B02), UINT32_C(0x001DC842), UINT32_C(0x0032D59A), UINT32_C(0x001DC451), UINT32_C(0x0022D419), UINT32_C(0x00003471), UINT32_C(0x00178E67), UINT32_C(0x002D0057), UINT32_C(0x006162BD), UINT32_C(0x000E5A47), UINT32_C(0x00139F7C), UINT32_C(0x0006E056), UINT32_C(0x00245E47), UINT32_C(0x0000179C), UINT32_C(0x0028BA82), UINT32_C(0x00229B1F), UINT32_C(0x003B6E93), UINT32_C(0x0012AE29), UINT32_C(0x0017CD91), UINT32_C(0x0014F8C1)}}, {{UINT32_C(0x00340D60), UINT32_C(0x00077299), UINT32_C(0x003D596C), UINT32_C(0x005CAB48), UINT32_C(0x0018060B), UINT32_C(0x00108F8B), UINT32_C(0x00155345), UINT32_C(0x00555740), UINT32_C(0x0006639B), UINT32_C(0x000966BA), UINT32_C(0x0028B692), UINT32_C(0x000E0989), UINT32_C(0x000E36E6), UINT32_C(0x003EA5CF), UINT32_C(0x003E7233), UINT32_C(0x002BCE85), UINT32_C(0x003B53C6), UINT32_C(0x000B6428), UINT32_C(0x000CEB17), UINT32_C(0x001439C1), UINT32_C(0x003E1768), UINT32_C(0x00182028), UINT32_C(0x00063591)}, {UINT32_C(0x004C6A3E), UINT32_C(0x0003B6B4), UINT32_C(0x00308620), UINT32_C(0x0042D6E7), UINT32_C(0x000688FB), UINT32_C(0x00242205), UINT32_C(0x0015FD4B), UINT32_C(0x006548A0), UINT32_C(0x00073894), UINT32_C(0x00059483), UINT32_C(0x00070BE7), UINT32_C(0x005EC1A3), UINT32_C(0x00138AF9), UINT32_C(0x00059A16), UINT32_C(0x000721C1), UINT32_C(0x003D327D), UINT32_C(0x000AC881), UINT32_C(0x0008254B), UINT32_C(0x00291DB6), UINT32_C(0x00202301), UINT32_C(0x002587BC), UINT32_C(0x002F4480), UINT32_C(0x000BB989)}}, {{UINT32_C(0x0044D64A), UINT32_C(0x00169A22), UINT32_C(0x00198EE3), UINT32_C(0x001C1CF3), UINT32_C(0x001ABB64), UINT32_C(0x0002B70C), UINT32_C(0x000D1B40), UINT32_C(0x0000B41C), UINT32_C(0x001A07BF), UINT32_C(0x0031380A), UINT32_C(0x0037E0A3), UINT32_C(0x005959D5), UINT32_C(0x00195DCD), UINT32_C(0x00318DBC), UINT32_C(0x00014119), UINT32_C(0x0039F9F8), UINT32_C(0x002F8B00), UINT32_C(0x00035A9F), UINT32_C(0x001F77ED), UINT32_C(0x0042F50F), UINT32_C(0x0010F6EB), UINT32_C(0x00018D31), UINT32_C(0x00115505)}, {UINT32_C(0x004A9CF0), UINT32_C(0x00396AE3), UINT32_C(0x002F36DC), UINT32_C(0x0059C454), UINT32_C(0x002372E1), UINT32_C(0x0017C289), UINT32_C(0x001DC88C), UINT32_C(0x00568BBB), UINT32_C(0x0038AAF3), UINT32_C(0x000AC735), UINT32_C(0x001D93C9), UINT32_C(0x0079763F), UINT32_C(0x000474DE), UINT32_C(0x001FFEA5), UINT32_C(0x0032E7A4), UINT32_C(0x00286D83), UINT32_C(0x001C592E), UINT32_C(0x002E08D4), UINT32_C(0x003C918F), UINT32_C(0x00635953), UINT32_C(0x00125ECD), UINT32_C(0x00218E30), UINT32_C(0x0038E348)}}, {{UINT32_C(0x001F97CB), UINT32_C(0x00027C45), UINT32_C(0x0004CBBC), UINT32_C(0x003C768C), UINT32_C(0x002150EB), UINT32_C(0x00309BAC), UINT32_C(0x001BD192), UINT32_C(0x00449D0C), UINT32_C(0x00027761), UINT32_C(0x00334EC9), UINT32_C(0x0004B563), UINT32_C(0x0063BBA5), UINT32_C(0x0022D5EC), UINT32_C(0x0036D1DC), UINT32_C(0x0022C410), UINT32_C(0x005B8D6B), UINT32_C(0x00182967), UINT32_C(0x002A4F38), UINT32_C(0x00111A50), UINT32_C(0x00211F1F), UINT32_C(0x001EDAD2), UINT32_C(0x0018C6ED), UINT32_C(0x00195251)}, {UINT32_C(0x002C575A), UINT32_C(0x00368BF8), UINT32_C(0x001817CE), UINT32_C(0x0023D30F), UINT32_C(0x00335F3C), UINT32_C(0x003D8B6B), UINT32_C(0x0036535C), UINT32_C(0x006E800F), UINT32_C(0x001D0FEE), UINT32_C(0x001D0E1D), UINT32_C(0x001030F4), UINT32_C(0x00575F2F), UINT32_C(0x000272DE), UINT32_C(0x0012885A), UINT32_C(0x001E98BE), UINT32_C(0x0002CEF1), UINT32_C(0x00343652), UINT32_C(0x0026244E), UINT32_C(0x00112950), UINT32_C(0x000CF99B), UINT32_C(0x0039E10D), UINT32_C(0x0019A48E), UINT32_C(0x000F62D8)}}, {{UINT32_C(0x007F47CB), UINT32_C(0x000DB92B), UINT32_C(0x001CFE89), UINT32_C(0x00438C82), UINT32_C(0x002F9B60), UINT32_C(0x0029F531), UINT32_C(0x0036DACC), UINT32_C(0x000B743F), UINT32_C(0x0014BFCA), UINT32_C(0x003076AB), UINT32_C(0x00061C92), UINT32_C(0x00402803), UINT32_C(0x001F9BBE), UINT32_C(0x002BB4F0), UINT32_C(0x001D49FC), UINT32_C(0x0039DA58), UINT32_C(0x001B9F65), UINT32_C(0x001A4032), UINT32_C(0x001853D6), UINT32_C(0x0077F83B), UINT32_C(0x000BA641), UINT32_C(0x0028F440), UINT32_C(0x00036529)}, {UINT32_C(0x00469CBC), UINT32_C(0x000ECB6B), UINT32_C(0x003ED688), UINT32_C(0x00448228), UINT32_C(0x000125E0), UINT32_C(0x001294BB), UINT32_C(0x003209CD), UINT32_C(0x00431140), UINT32_C(0x0024ADFE), UINT32_C(0x000A297C), UINT32_C(0x00343443), UINT32_C(0x003DC6B9), UINT32_C(0x003A8F4A), UINT32_C(0x003CD200), UINT32_C(0x0027F94A), UINT32_C(0x0026C683), UINT32_C(0x001010D7), UINT32_C(0x00291317), UINT32_C(0x001C01DB), UINT32_C(0x00323A9C), UINT32_C(0x0018F9E1), UINT32_C(0x000FB990), UINT32_C(0x001C0FD8)}}, {{UINT32_C(0x002529B0), UINT32_C(0x00047C33), UINT32_C(0x00105D03), UINT32_C(0x00668833), UINT32_C(0x001D8A87), UINT32_C(0x001BE267), UINT32_C(0x002E8A17), UINT32_C(0x001BA406), UINT32_C(0x0012683B), UINT32_C(0x0032EFBE), UINT32_C(0x0033C9C9), UINT32_C(0x003816FD), UINT32_C(0x001E2856), UINT32_C(0x001FA678), UINT32_C(0x0034CF0E), UINT32_C(0x002BC6D4), UINT32_C(0x0021D8C3), UINT32_C(0x00138A8F), UINT32_C(0x00301A91), UINT32_C(0x007BA5BF), UINT32_C(0x0027ADBF), UINT32_C(0x00084950), UINT32_C(0x003344F2)}, {UINT32_C(0x001D7DDB), UINT32_C(0x000B9FBD), UINT32_C(0x003A23D1), UINT32_C(0x000DAA8E), UINT32_C(0x0015296C), UINT32_C(0x00378879), UINT32_C(0x00080207), UINT32_C(0x006DACFA), UINT32_C(0x002C4D0C), UINT32_C(0x0003E240), UINT32_C(0x0005CDBB), UINT32_C(0x004B5100), UINT32_C(0x0024673C), UINT32_C(0x003EDDC4), UINT32_C(0x001C3104), UINT32_C(0x004EC191), UINT32_C(0x001B0572), UINT32_C(0x002EE934), UINT32_C(0x001E439A), UINT32_C(0x0008B8BC), UINT32_C(0x001D336D), UINT32_C(0x000C0450), UINT32_C(0x00264399)}}, {{UINT32_C(0x0063BA75), UINT32_C(0x000E5577), UINT32_C(0x002D84D8), UINT32_C(0x0011F137), UINT32_C(0x003C0568), UINT32_C(0x001FCF04), UINT32_C(0x00369E84), UINT32_C(0x0026107B), UINT32_C(0x003793D0), UINT32_C(0x002FF753), UINT32_C(0x00080D0D), UINT32_C(0x0009FE5B), UINT32_C(0x000D568B), UINT32_C(0x00306219), UINT32_C(0x00057FB4), UINT32_C(0x00251274), UINT32_C(0x0028F357), UINT32_C(0x001868A6), UINT32_C(0x00245601), UINT32_C(0x00694DDA), UINT32_C(0x001BF932), UINT32_C(0x00291545), UINT32_C(0x000834DF)}, {UINT32_C(0x005DE7C7), UINT32_C(0x00043FB9), UINT32_C(0x002022F7), UINT32_C(0x006DD20B), UINT32_C(0x0034DB2B), UINT32_C(0x0009812A), UINT32_C(0x000634E5), UINT32_C(0x00529BDD), UINT32_C(0x0037E7AF), UINT32_C(0x0020131E), UINT32_C(0x0028145E), UINT32_C(0x007D781A), UINT32_C(0x003F2E11), UINT32_C(0x00090377), UINT32_C(0x001FF3F0), UINT32_C(0x0029544B), UINT32_C(0x0004B34A), UINT32_C(0x00308A92), UINT32_C(0x00230957), UINT32_C(0x0030849F), UINT32_C(0x003BD197), UINT32_C(0x0036543D), UINT32_C(0x0013DB50)}}, {{UINT32_C(0x006DBC4E), UINT32_C(0x000B8C36), UINT32_C(0x0033C975), UINT32_C(0x001B98FA), UINT32_C(0x000E1469), UINT32_C(0x003F57BB), UINT32_C(0x00366AF6), UINT32_C(0x002940D4), UINT32_C(0x002A7401), UINT32_C(0x000B24FA), UINT32_C(0x003D079C), UINT32_C(0x000BBF2B), UINT32_C(0x001C8DA1), UINT32_C(0x00281279), UINT32_C(0x003FD16B), UINT32_C(0x005F172D), UINT32_C(0x003BC575), UINT32_C(0x0003F2EE), UINT32_C(0x000EB6E0), UINT32_C(0x0025AA43), UINT32_C(0x0019146D), UINT32_C(0x000E2FCD), UINT32_C(0x000708D1)}, {UINT32_C(0x00188A0A), UINT32_C(0x003280E1), UINT32_C(0x00375AE3), UINT32_C(0x005DEF79), UINT32_C(0x0030CA8C), UINT32_C(0x0011A4E2), UINT32_C(0x001A18EE), UINT32_C(0x0015160F), UINT32_C(0x003D4633), UINT32_C(0x00210DF1), UINT32_C(0x0039513D), UINT32_C(0x00032B85), UINT32_C(0x0000562C), UINT32_C(0x002B09DE), UINT32_C(0x0012E5D7), UINT32_C(0x00343965), UINT32_C(0x002482BA), UINT32_C(0x00358D60), UINT32_C(0x00210688), UINT32_C(0x001DE534), UINT32_C(0x0037E47D), UINT32_C(0x00306432), UINT32_C(0x00331A00)}}, {{UINT32_C(0x000E3961), UINT32_C(0x00136E2C), UINT32_C(0x00396117), UINT32_C(0x003A4EA9), UINT32_C(0x002B633F), UINT32_C(0x00331384), UINT32_C(0x000E6FDA), UINT32_C(0x00110B81), UINT32_C(0x00083F56), UINT32_C(0x0010E231), UINT32_C(0x00377F5B), UINT32_C(0x00777CBF), UINT32_C(0x0027D587), UINT32_C(0x0016725E), UINT32_C(0x0022FAFB), UINT32_C(0x0050FCA0), UINT32_C(0x0035E866), UINT32_C(0x001F6AF5), UINT32_C(0x00131AFF), UINT32_C(0x0031B90B), UINT32_C(0x003D8FC9), UINT32_C(0x003CCAEF), UINT32_C(0x000BCF90)}, {UINT32_C(0x0037CE7B), UINT32_C(0x003B57EC), UINT32_C(0x00161E92), UINT32_C(0x0065355B), UINT32_C(0x0024637B), UINT32_C(0x0008B2C0), UINT32_C(0x0002E6FD), UINT32_C(0x001ED2F1), UINT32_C(0x0024A016), UINT32_C(0x0022B354), UINT32_C(0x0019306E), UINT32_C(0x003009F9), UINT32_C(0x00130478), UINT32_C(0x0039951C), UINT32_C(0x003B9F26), UINT32_C(0x00129D8E), UINT32_C(0x0028EAE8), UINT32_C(0x002E0532), UINT32_C(0x002312B7), UINT32_C(0x001904D9), UINT32_C(0x001F8FB7), UINT32_C(0x00306139), UINT32_C(0x00191E58)}}, {{UINT32_C(0x00315B6B), UINT32_C(0x0006110B), UINT32_C(0x002D0F7A), UINT32_C(0x000B35D8), UINT32_C(0x0039DD74), UINT32_C(0x0013BF7F), UINT32_C(0x00088A74), UINT32_C(0x00678A54), UINT32_C(0x0027C11E), UINT32_C(0x0039299C), UINT32_C(0x0009E852), UINT32_C(0x003A9738), UINT32_C(0x003BA90B), UINT32_C(0x003C704C), UINT32_C(0x00031EAD), UINT32_C(0x003F9F6D), UINT32_C(0x00060C99), UINT32_C(0x00210078), UINT32_C(0x000A43CC), UINT32_C(0x001D2C3A), UINT32_C(0x0016F165), UINT32_C(0x002CBE20), UINT32_C(0x003CBD2A)}, {UINT32_C(0x006EA72C), UINT32_C(0x0019FAA9), UINT32_C(0x0027119B), UINT32_C(0x00002DB4), UINT32_C(0x003FC202), UINT32_C(0x00258426), UINT32_C(0x0017A426), UINT32_C(0x00591EA2), UINT32_C(0x000DAAC0), UINT32_C(0x00160BB2), UINT32_C(0x002B5C9B), UINT32_C(0x0034552F), UINT32_C(0x00354208), UINT32_C(0x003F73F6), UINT32_C(0x001D329F), UINT32_C(0x00541523), UINT32_C(0x001D2733), UINT32_C(0x003E6DA0), UINT32_C(0x00058267), UINT32_C(0x002FD1CD), UINT32_C(0x003085B8), UINT32_C(0x0037B13E), UINT32_C(0x0011D71D)}}, {{UINT32_C(0x004EF58F), UINT32_C(0x00111078), UINT32_C(0x002A7D65), UINT32_C(0x0032333E), UINT32_C(0x0011BB9D), UINT32_C(0x0033FA14), UINT32_C(0x001ABD10), UINT32_C(0x007F9C0D), UINT32_C(0x0012F21C), UINT32_C(0x003C4D14), UINT32_C(0x003A59E2), UINT32_C(0x0017140E), UINT32_C(0x003EC05A), UINT32_C(0x002B8323), UINT32_C(0x0013D487), UINT32_C(0x0061B630), UINT32_C(0x000C1262), UINT32_C(0x0034A7E5), UINT32_C(0x0018DA22), UINT32_C(0x000DA70C), UINT32_C(0x001E1E78), UINT32_C(0x0037CE10), UINT32_C(0x000BEBB1)}, {UINT32_C(0x004F54F0), UINT32_C(0x000A220B), UINT32_C(0x00161352), UINT32_C(0x007E4EA4), UINT32_C(0x002878DE), UINT32_C(0x001C80E5), UINT32_C(0x000C0855), UINT32_C(0x0075DF3B), UINT32_C(0x0039D0AB), UINT32_C(0x001D0301), UINT32_C(0x001594B9), UINT32_C(0x0078140B), UINT32_C(0x001A2C01), UINT32_C(0x0028FCE5), UINT32_C(0x003C573C), UINT32_C(0x0006E543), UINT32_C(0x003A90E6), UINT32_C(0x002D4FDD), UINT32_C(0x0022B1F7), UINT32_C(0x0062CB04), UINT32_C(0x002C12CA), UINT32_C(0x00389E83), UINT32_C(0x0007631E)}}, {{UINT32_C(0x0023C68B), UINT32_C(0x000F609A), UINT32_C(0x000D7E01), UINT32_C(0x0069E56B), UINT32_C(0x0003D496), UINT32_C(0x001BC8DC), UINT32_C(0x00328E76), UINT32_C(0x00316565), UINT32_C(0x0011A340), UINT32_C(0x00374048), UINT32_C(0x0016C79E), UINT32_C(0x0014449B), UINT32_C(0x002EE9B6), UINT32_C(0x00032A11), UINT32_C(0x001212A3), UINT32_C(0x003D35C1), UINT32_C(0x003485FD), UINT32_C(0x001199A6), UINT32_C(0x001C3F0D), UINT32_C(0x0017F8CF), UINT32_C(0x0014AC02), UINT32_C(0x001E0EB1), UINT32_C(0x001ACA7C)}, {UINT32_C(0x0031C47A), UINT32_C(0x00102E12), UINT32_C(0x002F6F4B), UINT32_C(0x005B2D93), UINT32_C(0x000A9886), UINT32_C(0x001CC034), UINT32_C(0x0023E81B), UINT32_C(0x0001A7CE), UINT32_C(0x0029ABC3), UINT32_C(0x0004048C), UINT32_C(0x002BC25D), UINT32_C(0x00368ABA), UINT32_C(0x0002746C), UINT32_C(0x00373868), UINT32_C(0x00061AA2), UINT32_C(0x0056401C), UINT32_C(0x00207F34), UINT32_C(0x001FCA2D), UINT32_C(0x00169B9E), UINT32_C(0x0064FDA3), UINT32_C(0x0028C18A), UINT32_C(0x000C0847), UINT32_C(0x001845F0)}}, {{UINT32_C(0x002F9AD9), UINT32_C(0x0009590F), UINT32_C(0x00130486), UINT32_C(0x0059CC83), UINT32_C(0x0039A337), UINT32_C(0x0022C7C7), UINT32_C(0x0003C259), UINT32_C(0x00602650), UINT32_C(0x0008510C), UINT32_C(0x00384F8A), UINT32_C(0x001F3AA0), UINT32_C(0x003706DA), UINT32_C(0x00069456), UINT32_C(0x0002AD7C), UINT32_C(0x00003A14), UINT32_C(0x007327BA), UINT32_C(0x002F7478), UINT32_C(0x001FBB28), UINT32_C(0x0023BC3E), UINT32_C(0x007F5AB5), UINT32_C(0x001FFF4E), UINT32_C(0x00188D11), UINT32_C(0x0013BC8B)}, {UINT32_C(0x0000C111), UINT32_C(0x0006AA72), UINT32_C(0x0012A2E9), UINT32_C(0x0055127A), UINT32_C(0x003C8991), UINT32_C(0x0036CFBC), UINT32_C(0x0037F0BB), UINT32_C(0x00655B21), UINT32_C(0x002B75E3), UINT32_C(0x00336687), UINT32_C(0x00210878), UINT32_C(0x00089C2C), UINT32_C(0x003CEE92), UINT32_C(0x00143383), UINT32_C(0x00371D45), UINT32_C(0x000BCDFE), UINT32_C(0x00238367), UINT32_C(0x001C2D8B), UINT32_C(0x003E06AD), UINT32_C(0x0053DBC8), UINT32_C(0x002A9F89), UINT32_C(0x002955F8), UINT32_C(0x00137029)}}, {{UINT32_C(0x0002FB5B), UINT32_C(0x0032BB27), UINT32_C(0x001EE694), UINT32_C(0x002E2965), UINT32_C(0x00395F01), UINT32_C(0x003FEC08), UINT32_C(0x003ABDFB), UINT32_C(0x0068B88B), UINT32_C(0x00221DB7), UINT32_C(0x000F72D1), UINT32_C(0x0003F9DC), UINT32_C(0x005C1B93), UINT32_C(0x00073A9E), UINT32_C(0x00160BD0), UINT32_C(0x00053416), UINT32_C(0x0023242A), UINT32_C(0x0010FAB9), UINT32_C(0x0006D2C5), UINT32_C(0x00236E83), UINT32_C(0x0054747B), UINT32_C(0x00063F98), UINT32_C(0x001A8789), UINT32_C(0x003DC7DA)}, {UINT32_C(0x00463909), UINT32_C(0x0029E3B4), UINT32_C(0x0002F0E2), UINT32_C(0x00593390), UINT32_C(0x0034320B), UINT32_C(0x003F6A3B), UINT32_C(0x002603E4), UINT32_C(0x00016676), UINT32_C(0x00254C99), UINT32_C(0x0023EB7B), UINT32_C(0x00119D88), UINT32_C(0x003D63F8), UINT32_C(0x00350BC8), UINT32_C(0x00140757), UINT32_C(0x002473C4), UINT32_C(0x0034D831), UINT32_C(0x0017BDB7), UINT32_C(0x003E24EB), UINT32_C(0x00231FE3), UINT32_C(0x0070EC64), UINT32_C(0x00043E18), UINT32_C(0x002A4D4F), UINT32_C(0x0005D554)}}, {{UINT32_C(0x006FC15D), UINT32_C(0x001F5830), UINT32_C(0x0008AD9E), UINT32_C(0x002845F0), UINT32_C(0x001CD01E), UINT32_C(0x0000CFC1), UINT32_C(0x0032AE8B), UINT32_C(0x0019E673), UINT32_C(0x0030C5E5), UINT32_C(0x00050166), UINT32_C(0x00372FAC), UINT32_C(0x00057147), UINT32_C(0x0004060F), UINT32_C(0x00163807), UINT32_C(0x002BCADD), UINT32_C(0x00376726), UINT32_C(0x0028315B), UINT32_C(0x0009418F), UINT32_C(0x001E2957), UINT32_C(0x006D28BE), UINT32_C(0x001BCADE), UINT32_C(0x0031A352), UINT32_C(0x00052575)}, {UINT32_C(0x00404C1D), UINT32_C(0x0024FA31), UINT32_C(0x0012C7A3), UINT32_C(0x007D71A8), UINT32_C(0x0028D167), UINT32_C(0x0020B8E9), UINT32_C(0x0032697E), UINT32_C(0x00202C6B), UINT32_C(0x00032212), UINT32_C(0x003AB37D), UINT32_C(0x0029EEED), UINT32_C(0x00239F39), UINT32_C(0x0007DC00), UINT32_C(0x003BD86F), UINT32_C(0x003B948C), UINT32_C(0x005D1965), UINT32_C(0x003C74AD), UINT32_C(0x001EAB46), UINT32_C(0x00255C49), UINT32_C(0x002402DB), UINT32_C(0x0004833F), UINT32_C(0x00181728), UINT32_C(0x002C23A4)}}, {{UINT32_C(0x00069003), UINT32_C(0x001493A6), UINT32_C(0x003F6B49), UINT32_C(0x001B15E2), UINT32_C(0x003CB610), UINT32_C(0x003AC0D8), UINT32_C(0x0012E96D), UINT32_C(0x004C065C), UINT32_C(0x00318C4E), UINT32_C(0x00151ED2), UINT32_C(0x002348E6), UINT32_C(0x006AE001), UINT32_C(0x0012C641), UINT32_C(0x00126DF2), UINT32_C(0x001D6E0A), UINT32_C(0x00227223), UINT32_C(0x003493D1), UINT32_C(0x0027ED79), UINT32_C(0x00097233), UINT32_C(0x0004AB1D), UINT32_C(0x002E7F5A), UINT32_C(0x003ED69A), UINT32_C(0x003D2512)}, {UINT32_C(0x002D81D0), UINT32_C(0x0012CD40), UINT32_C(0x00296981), UINT32_C(0x007D52C8), UINT32_C(0x002B5E71), UINT32_C(0x0018553C), UINT32_C(0x003F8695), UINT32_C(0x00730395), UINT32_C(0x00050DAB), UINT32_C(0x0015BCBA), UINT32_C(0x00220A46), UINT32_C(0x00762FDE), UINT32_C(0x0029B8D0), UINT32_C(0x0025890A), UINT32_C(0x002D307D), UINT32_C(0x0077543E), UINT32_C(0x001F282E), UINT32_C(0x00300B63), UINT32_C(0x000F826D), UINT32_C(0x00344F5F), UINT32_C(0x0017B455), UINT32_C(0x000FA526), UINT32_C(0x0013C162)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 6 * ASSERT: a = -3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(t0, X); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(t1, Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_square(t2, Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t3, X, Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, t3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t4, Y, Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, X, Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, b, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(X3, X3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, t2, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t2, t2, t3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, b, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Z3, Z3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Z3, Z3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t0, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t0, t0, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t0, t4, t4); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, t0, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, Z3); } /*- * out1 = (arg1 == 0) ? 0 : nz * NB: this is not a "mod p equiv" 0, but literal 0 * NB: this is not a real Fiat function, just named that way for consistency. */ static void fiat_id_tc26_gost_3410_2012_512_paramSetA_nonzero(limb_t *out1, const fe_t arg1) { limb_t x1 = 0; int i; for (i = 0; i < LIMB_CNT; i++) x1 |= arg1[i]; *out1 = x1; } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed.op3 * https://eprint.iacr.org/2015/1060 Alg 5 * ASSERT: a = -3 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_tc26_gost_3410_2012_512_paramSetA_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t4, Y2, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, t4, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, X2, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, Y3, X1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, b, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, X3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Z3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, b, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, Z1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t2, t1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t0, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, t4, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t2, t0, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(X3, t3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, X3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, t4, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, t1); /* if P is inf, throw all that away and take Q */ fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(R->X, nz, Q->X, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 4 * ASSERT: a = -3 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t2, Z1, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t3, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t4, Y1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t5, Y2, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t4, t4, t5); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t5, t1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t4, t4, t5); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, X1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, X2, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(X3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, b, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, X3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Z3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(X3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, b, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, t2, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t2, t1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t1, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(t0, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, t4, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t2, t0, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Y3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(X3, t3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_sub(X3, X3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(Z3, t4, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(t1, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_add(Z3, Z3, t1); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[64], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 64) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[103], const unsigned char in[64]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 102; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[513], const unsigned char in[64]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 513; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[64], const unsigned char b[64], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[513] = {0}; int8_t bnaf[513] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 512; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[64], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[102] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 101; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(out->Y, lut.Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[64]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 10; i >= 0; i--) { for (j = 0; i != 10 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 11; j++) { if (j * 11 + i > 102) continue; d = rnaf[j * 11 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(out->Y, lut.Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_tc26_gost_3410_2012_512_paramSetA_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetA_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetA_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetA_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[64], unsigned char outy[64], const unsigned char a[64], const unsigned char b[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes(P.Y, iny); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetA_from_bytes(P.Y, iny); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetA_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[64] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_tc26_gost_3410_2012_512_paramSetA( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(n, b_n, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_tc26_gost_3410_2012_512_paramSetA(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_tc26_gost_3410_2012_512_paramSetA(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 64) != 64) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #endif /* __SIZEOF_INT128__ */ libengine-gost-openssl-3.0.2/ecp_id_tc26_gost_3410_2012_512_paramSetB.c000066400000000000000000044112031446070765000250420ustar00rootroot00000000000000/* Autogenerated: ECCKiila https://gitlab.com/nisec/ecckiila */ /*- * MIT License * * Copyright (c) 2020 Luis Rivera-Zamarripa, JesÃēs-Javier Chi-Domínguez, Billy Bob Brumley * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ #if defined(__SIZEOF_INT128__) && !defined(PEDANTIC) #include #include #define LIMB_BITS 64 #define LIMB_CNT 8 /* Field elements */ typedef uint64_t fe_t[LIMB_CNT]; typedef uint64_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETB_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: word_by_word_montgomery --static --use-value-barrier id_tc26_gost_3410_2012_512_paramSetB 64 '2^511 + 111' */ /* curve description: id_tc26_gost_3410_2012_512_paramSetB */ /* machine_wordsize = 64 (from "64") */ /* requested operations: (all) */ /* m = 0x8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f (from "2^511 + 111") */ /* */ /* NOTE: In addition to the bounds specified above each function, all */ /* functions synthesized for this Montgomery arithmetic require the */ /* input to be strictly less than the prime modulus (m), and also */ /* require the input to be in the unique saturated representation. */ /* All functions also ensure that these two properties are true of */ /* return values. */ /* */ /* Computed values: */ /* eval z = z[0] + (z[1] << 64) + (z[2] << 128) + (z[3] << 192) + (z[4] << 256) + (z[5] << 0x140) + (z[6] << 0x180) + (z[7] << 0x1c0) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) + (z[56] << 0x1c0) + (z[57] << 0x1c8) + (z[58] << 0x1d0) + (z[59] << 0x1d8) + (z[60] << 0x1e0) + (z[61] << 0x1e8) + (z[62] << 0x1f0) + (z[63] << 0x1f8) */ #include typedef unsigned char fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1; typedef signed char fiat_id_tc26_gost_3410_2012_512_paramSetB_int1; typedef signed __int128 fiat_id_tc26_gost_3410_2012_512_paramSetB_int128; typedef unsigned __int128 fiat_id_tc26_gost_3410_2012_512_paramSetB_uint128; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETB_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint64_t fiat_id_tc26_gost_3410_2012_512_paramSetB_value_barrier_u64(uint64_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_tc26_gost_3410_2012_512_paramSetB_value_barrier_u64(x) (x) #endif /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^64 * out2 = ⌊(arg1 + arg2 + arg3) / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_tc26_gost_3410_2012_512_paramSetB_uint128 x1; uint64_t x2; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x3; x1 = ((arg1 + (fiat_id_tc26_gost_3410_2012_512_paramSetB_uint128)arg2) + arg3); x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); x3 = (fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1)(x1 >> 64); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^64 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_tc26_gost_3410_2012_512_paramSetB_int128 x1; fiat_id_tc26_gost_3410_2012_512_paramSetB_int1 x2; uint64_t x3; x1 = ((arg2 - (fiat_id_tc26_gost_3410_2012_512_paramSetB_int128)arg1) - arg3); x2 = (fiat_id_tc26_gost_3410_2012_512_paramSetB_int1)(x1 >> 64); x3 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64 is a multiplication, returning the full double-width result. * Postconditions: * out1 = (arg1 * arg2) mod 2^64 * out2 = ⌊arg1 * arg2 / 2^64⌋ * * Input Bounds: * arg1: [0x0 ~> 0xffffffffffffffff] * arg2: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] * out2: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(uint64_t *out1, uint64_t *out2, uint64_t arg1, uint64_t arg2) { fiat_id_tc26_gost_3410_2012_512_paramSetB_uint128 x1; uint64_t x2; uint64_t x3; x1 = ((fiat_id_tc26_gost_3410_2012_512_paramSetB_uint128)arg1 * arg2); x2 = (uint64_t)(x1 & UINT64_C(0xffffffffffffffff)); x3 = (uint64_t)(x1 >> 64); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1; uint64_t x2; uint64_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_tc26_gost_3410_2012_512_paramSetB_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); x3 = ((fiat_id_tc26_gost_3410_2012_512_paramSetB_value_barrier_u64(x2) & arg3) | (fiat_id_tc26_gost_3410_2012_512_paramSetB_value_barrier_u64((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_mul multiplies two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_mul( uint64_t out1[8], const uint64_t arg1[8], const uint64_t arg2[8]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x26; uint64_t x27; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x28; uint64_t x29; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x30; uint64_t x31; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x32; uint64_t x33; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x34; uint64_t x35; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x36; uint64_t x37; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x47; uint64_t x48; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x49; uint64_t x50; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x51; uint64_t x52; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x53; uint64_t x54; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x55; uint64_t x56; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x57; uint64_t x58; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x59; uint64_t x60; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x61; uint64_t x62; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x81; uint64_t x82; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x83; uint64_t x84; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x85; uint64_t x86; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x87; uint64_t x88; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x89; uint64_t x90; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x91; uint64_t x92; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x93; uint64_t x94; uint64_t x95; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x96; uint64_t x97; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x98; uint64_t x99; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x100; uint64_t x101; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x102; uint64_t x103; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x104; uint64_t x105; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x106; uint64_t x107; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x108; uint64_t x109; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x110; uint64_t x111; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; uint64_t x119; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x120; uint64_t x121; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x122; uint64_t x123; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x124; uint64_t x125; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x126; uint64_t x127; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x128; uint64_t x129; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x130; uint64_t x131; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x132; uint64_t x133; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x134; uint64_t x135; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x136; uint64_t x137; uint64_t x138; uint64_t x139; uint64_t x140; uint64_t x141; uint64_t x142; uint64_t x143; uint64_t x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; uint64_t x150; uint64_t x151; uint64_t x152; uint64_t x153; uint64_t x154; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x155; uint64_t x156; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x157; uint64_t x158; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x159; uint64_t x160; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x161; uint64_t x162; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x163; uint64_t x164; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x165; uint64_t x166; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x167; uint64_t x168; uint64_t x169; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x170; uint64_t x171; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x172; uint64_t x173; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x174; uint64_t x175; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x176; uint64_t x177; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x178; uint64_t x179; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x180; uint64_t x181; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x182; uint64_t x183; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x184; uint64_t x185; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x186; uint64_t x187; uint64_t x188; uint64_t x189; uint64_t x190; uint64_t x191; uint64_t x192; uint64_t x193; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x194; uint64_t x195; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x196; uint64_t x197; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x198; uint64_t x199; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x200; uint64_t x201; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x202; uint64_t x203; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x204; uint64_t x205; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x206; uint64_t x207; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x208; uint64_t x209; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x210; uint64_t x211; uint64_t x212; uint64_t x213; uint64_t x214; uint64_t x215; uint64_t x216; uint64_t x217; uint64_t x218; uint64_t x219; uint64_t x220; uint64_t x221; uint64_t x222; uint64_t x223; uint64_t x224; uint64_t x225; uint64_t x226; uint64_t x227; uint64_t x228; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x229; uint64_t x230; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x231; uint64_t x232; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x233; uint64_t x234; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x235; uint64_t x236; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x237; uint64_t x238; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x239; uint64_t x240; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x241; uint64_t x242; uint64_t x243; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x244; uint64_t x245; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x246; uint64_t x247; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x248; uint64_t x249; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x250; uint64_t x251; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x252; uint64_t x253; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x254; uint64_t x255; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x256; uint64_t x257; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x258; uint64_t x259; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x260; uint64_t x261; uint64_t x262; uint64_t x263; uint64_t x264; uint64_t x265; uint64_t x266; uint64_t x267; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x268; uint64_t x269; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x270; uint64_t x271; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x272; uint64_t x273; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x274; uint64_t x275; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x276; uint64_t x277; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x278; uint64_t x279; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x280; uint64_t x281; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x282; uint64_t x283; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x284; uint64_t x285; uint64_t x286; uint64_t x287; uint64_t x288; uint64_t x289; uint64_t x290; uint64_t x291; uint64_t x292; uint64_t x293; uint64_t x294; uint64_t x295; uint64_t x296; uint64_t x297; uint64_t x298; uint64_t x299; uint64_t x300; uint64_t x301; uint64_t x302; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x303; uint64_t x304; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x305; uint64_t x306; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x307; uint64_t x308; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x309; uint64_t x310; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x311; uint64_t x312; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x313; uint64_t x314; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x315; uint64_t x316; uint64_t x317; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x318; uint64_t x319; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x320; uint64_t x321; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x322; uint64_t x323; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x324; uint64_t x325; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x326; uint64_t x327; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x328; uint64_t x329; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x330; uint64_t x331; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x332; uint64_t x333; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x334; uint64_t x335; uint64_t x336; uint64_t x337; uint64_t x338; uint64_t x339; uint64_t x340; uint64_t x341; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x342; uint64_t x343; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x344; uint64_t x345; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x346; uint64_t x347; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x348; uint64_t x349; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x350; uint64_t x351; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x352; uint64_t x353; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x354; uint64_t x355; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x356; uint64_t x357; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x358; uint64_t x359; uint64_t x360; uint64_t x361; uint64_t x362; uint64_t x363; uint64_t x364; uint64_t x365; uint64_t x366; uint64_t x367; uint64_t x368; uint64_t x369; uint64_t x370; uint64_t x371; uint64_t x372; uint64_t x373; uint64_t x374; uint64_t x375; uint64_t x376; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x377; uint64_t x378; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x379; uint64_t x380; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x381; uint64_t x382; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x383; uint64_t x384; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x385; uint64_t x386; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x387; uint64_t x388; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x389; uint64_t x390; uint64_t x391; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x392; uint64_t x393; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x394; uint64_t x395; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x396; uint64_t x397; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x398; uint64_t x399; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x400; uint64_t x401; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x402; uint64_t x403; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x404; uint64_t x405; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x406; uint64_t x407; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x408; uint64_t x409; uint64_t x410; uint64_t x411; uint64_t x412; uint64_t x413; uint64_t x414; uint64_t x415; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x416; uint64_t x417; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x418; uint64_t x419; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x420; uint64_t x421; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x422; uint64_t x423; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x424; uint64_t x425; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x426; uint64_t x427; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x428; uint64_t x429; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x430; uint64_t x431; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x432; uint64_t x433; uint64_t x434; uint64_t x435; uint64_t x436; uint64_t x437; uint64_t x438; uint64_t x439; uint64_t x440; uint64_t x441; uint64_t x442; uint64_t x443; uint64_t x444; uint64_t x445; uint64_t x446; uint64_t x447; uint64_t x448; uint64_t x449; uint64_t x450; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x451; uint64_t x452; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x453; uint64_t x454; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x455; uint64_t x456; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x457; uint64_t x458; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x459; uint64_t x460; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x461; uint64_t x462; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x463; uint64_t x464; uint64_t x465; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x466; uint64_t x467; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x468; uint64_t x469; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x470; uint64_t x471; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x472; uint64_t x473; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x474; uint64_t x475; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x476; uint64_t x477; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x478; uint64_t x479; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x480; uint64_t x481; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x482; uint64_t x483; uint64_t x484; uint64_t x485; uint64_t x486; uint64_t x487; uint64_t x488; uint64_t x489; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x490; uint64_t x491; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x492; uint64_t x493; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x494; uint64_t x495; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x496; uint64_t x497; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x498; uint64_t x499; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x500; uint64_t x501; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x502; uint64_t x503; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x504; uint64_t x505; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x506; uint64_t x507; uint64_t x508; uint64_t x509; uint64_t x510; uint64_t x511; uint64_t x512; uint64_t x513; uint64_t x514; uint64_t x515; uint64_t x516; uint64_t x517; uint64_t x518; uint64_t x519; uint64_t x520; uint64_t x521; uint64_t x522; uint64_t x523; uint64_t x524; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x525; uint64_t x526; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x527; uint64_t x528; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x529; uint64_t x530; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x531; uint64_t x532; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x533; uint64_t x534; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x535; uint64_t x536; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x537; uint64_t x538; uint64_t x539; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x540; uint64_t x541; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x542; uint64_t x543; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x544; uint64_t x545; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x546; uint64_t x547; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x548; uint64_t x549; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x550; uint64_t x551; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x552; uint64_t x553; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x554; uint64_t x555; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x556; uint64_t x557; uint64_t x558; uint64_t x559; uint64_t x560; uint64_t x561; uint64_t x562; uint64_t x563; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x564; uint64_t x565; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x566; uint64_t x567; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x568; uint64_t x569; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x570; uint64_t x571; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x572; uint64_t x573; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x574; uint64_t x575; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x576; uint64_t x577; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x578; uint64_t x579; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x580; uint64_t x581; uint64_t x582; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x583; uint64_t x584; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x585; uint64_t x586; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x587; uint64_t x588; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x589; uint64_t x590; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x591; uint64_t x592; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x593; uint64_t x594; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x595; uint64_t x596; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x597; uint64_t x598; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x599; uint64_t x600; uint64_t x601; uint64_t x602; uint64_t x603; uint64_t x604; uint64_t x605; uint64_t x606; uint64_t x607; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[0]); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x9, &x10, x8, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x11, &x12, x8, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x13, &x14, x8, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x15, &x16, x8, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x17, &x18, x8, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x19, &x20, x8, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x21, &x22, x8, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x23, &x24, x8, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x25, &x26, 0x0, x24, x21); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x27, &x28, x26, x22, x19); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x29, &x30, x28, x20, x17); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x31, &x32, x30, x18, x15); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x33, &x34, x32, x16, x13); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x35, &x36, x34, x14, x11); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x37, &x38, x36, x12, x9); x39 = (x38 + x10); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x40, &x41, x23, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x42, &x43, x40, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x44, &x45, x40, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x46, &x47, 0x0, x23, x44); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x48, &x49, x47, x25, x45); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x50, &x51, x49, x27, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x52, &x53, x51, x29, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x54, &x55, x53, x31, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x56, &x57, x55, x33, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x58, &x59, x57, x35, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x60, &x61, x59, x37, x42); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x62, &x63, x61, x39, x43); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x64, &x65, x1, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x66, &x67, x1, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x68, &x69, x1, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x70, &x71, x1, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x72, &x73, x1, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x74, &x75, x1, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x76, &x77, x1, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x78, &x79, x1, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x80, &x81, 0x0, x79, x76); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x82, &x83, x81, x77, x74); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x84, &x85, x83, x75, x72); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x86, &x87, x85, x73, x70); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x88, &x89, x87, x71, x68); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x90, &x91, x89, x69, x66); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x92, &x93, x91, x67, x64); x94 = (x93 + x65); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x95, &x96, 0x0, x48, x78); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x97, &x98, x96, x50, x80); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x99, &x100, x98, x52, x82); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x101, &x102, x100, x54, x84); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x103, &x104, x102, x56, x86); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x105, &x106, x104, x58, x88); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x107, &x108, x106, x60, x90); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x109, &x110, x108, x62, x92); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x111, &x112, x110, x63, x94); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x113, &x114, x95, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x115, &x116, x113, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x117, &x118, x113, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x119, &x120, 0x0, x95, x117); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x121, &x122, x120, x97, x118); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x123, &x124, x122, x99, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x125, &x126, x124, x101, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x127, &x128, x126, x103, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x129, &x130, x128, x105, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x131, &x132, x130, x107, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x133, &x134, x132, x109, x115); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x135, &x136, x134, x111, x116); x137 = ((uint64_t)x136 + x112); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x138, &x139, x2, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x140, &x141, x2, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x142, &x143, x2, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x144, &x145, x2, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x146, &x147, x2, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x148, &x149, x2, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x150, &x151, x2, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x152, &x153, x2, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x154, &x155, 0x0, x153, x150); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x156, &x157, x155, x151, x148); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x158, &x159, x157, x149, x146); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x160, &x161, x159, x147, x144); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x162, &x163, x161, x145, x142); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x164, &x165, x163, x143, x140); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x166, &x167, x165, x141, x138); x168 = (x167 + x139); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x169, &x170, 0x0, x121, x152); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x171, &x172, x170, x123, x154); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x173, &x174, x172, x125, x156); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x175, &x176, x174, x127, x158); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x177, &x178, x176, x129, x160); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x179, &x180, x178, x131, x162); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x181, &x182, x180, x133, x164); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x183, &x184, x182, x135, x166); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x185, &x186, x184, x137, x168); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x187, &x188, x169, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x189, &x190, x187, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x191, &x192, x187, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x193, &x194, 0x0, x169, x191); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x195, &x196, x194, x171, x192); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x197, &x198, x196, x173, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x199, &x200, x198, x175, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x201, &x202, x200, x177, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x203, &x204, x202, x179, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x205, &x206, x204, x181, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x207, &x208, x206, x183, x189); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x209, &x210, x208, x185, x190); x211 = ((uint64_t)x210 + x186); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x212, &x213, x3, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x214, &x215, x3, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x216, &x217, x3, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x218, &x219, x3, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x220, &x221, x3, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x222, &x223, x3, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x224, &x225, x3, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x226, &x227, x3, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x228, &x229, 0x0, x227, x224); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x230, &x231, x229, x225, x222); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x232, &x233, x231, x223, x220); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x234, &x235, x233, x221, x218); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x236, &x237, x235, x219, x216); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x238, &x239, x237, x217, x214); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x240, &x241, x239, x215, x212); x242 = (x241 + x213); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x243, &x244, 0x0, x195, x226); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x245, &x246, x244, x197, x228); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x247, &x248, x246, x199, x230); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x249, &x250, x248, x201, x232); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x251, &x252, x250, x203, x234); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x253, &x254, x252, x205, x236); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x255, &x256, x254, x207, x238); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x257, &x258, x256, x209, x240); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x259, &x260, x258, x211, x242); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x261, &x262, x243, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x263, &x264, x261, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x265, &x266, x261, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x267, &x268, 0x0, x243, x265); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x269, &x270, x268, x245, x266); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x271, &x272, x270, x247, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x273, &x274, x272, x249, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x275, &x276, x274, x251, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x277, &x278, x276, x253, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x279, &x280, x278, x255, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x281, &x282, x280, x257, x263); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x283, &x284, x282, x259, x264); x285 = ((uint64_t)x284 + x260); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x286, &x287, x4, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x288, &x289, x4, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x290, &x291, x4, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x292, &x293, x4, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x294, &x295, x4, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x296, &x297, x4, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x298, &x299, x4, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x300, &x301, x4, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x302, &x303, 0x0, x301, x298); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x304, &x305, x303, x299, x296); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x306, &x307, x305, x297, x294); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x308, &x309, x307, x295, x292); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x310, &x311, x309, x293, x290); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x312, &x313, x311, x291, x288); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x314, &x315, x313, x289, x286); x316 = (x315 + x287); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x317, &x318, 0x0, x269, x300); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x319, &x320, x318, x271, x302); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x321, &x322, x320, x273, x304); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x323, &x324, x322, x275, x306); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x325, &x326, x324, x277, x308); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x327, &x328, x326, x279, x310); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x329, &x330, x328, x281, x312); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x331, &x332, x330, x283, x314); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x333, &x334, x332, x285, x316); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x335, &x336, x317, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x337, &x338, x335, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x339, &x340, x335, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x341, &x342, 0x0, x317, x339); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x343, &x344, x342, x319, x340); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x345, &x346, x344, x321, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x347, &x348, x346, x323, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x349, &x350, x348, x325, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x351, &x352, x350, x327, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x353, &x354, x352, x329, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x355, &x356, x354, x331, x337); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x357, &x358, x356, x333, x338); x359 = ((uint64_t)x358 + x334); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x360, &x361, x5, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x362, &x363, x5, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x364, &x365, x5, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x366, &x367, x5, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x368, &x369, x5, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x370, &x371, x5, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x372, &x373, x5, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x374, &x375, x5, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x376, &x377, 0x0, x375, x372); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x378, &x379, x377, x373, x370); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x380, &x381, x379, x371, x368); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x382, &x383, x381, x369, x366); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x384, &x385, x383, x367, x364); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x386, &x387, x385, x365, x362); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x388, &x389, x387, x363, x360); x390 = (x389 + x361); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x391, &x392, 0x0, x343, x374); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x393, &x394, x392, x345, x376); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x395, &x396, x394, x347, x378); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x397, &x398, x396, x349, x380); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x399, &x400, x398, x351, x382); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x401, &x402, x400, x353, x384); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x403, &x404, x402, x355, x386); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x405, &x406, x404, x357, x388); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x407, &x408, x406, x359, x390); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x409, &x410, x391, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x411, &x412, x409, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x413, &x414, x409, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x415, &x416, 0x0, x391, x413); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x417, &x418, x416, x393, x414); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x419, &x420, x418, x395, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x421, &x422, x420, x397, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x423, &x424, x422, x399, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x425, &x426, x424, x401, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x427, &x428, x426, x403, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x429, &x430, x428, x405, x411); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x431, &x432, x430, x407, x412); x433 = ((uint64_t)x432 + x408); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x434, &x435, x6, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x436, &x437, x6, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x438, &x439, x6, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x440, &x441, x6, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x442, &x443, x6, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x444, &x445, x6, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x446, &x447, x6, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x448, &x449, x6, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x450, &x451, 0x0, x449, x446); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x452, &x453, x451, x447, x444); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x454, &x455, x453, x445, x442); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x456, &x457, x455, x443, x440); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x458, &x459, x457, x441, x438); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x460, &x461, x459, x439, x436); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x462, &x463, x461, x437, x434); x464 = (x463 + x435); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x465, &x466, 0x0, x417, x448); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x467, &x468, x466, x419, x450); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x469, &x470, x468, x421, x452); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x471, &x472, x470, x423, x454); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x473, &x474, x472, x425, x456); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x475, &x476, x474, x427, x458); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x477, &x478, x476, x429, x460); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x479, &x480, x478, x431, x462); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x481, &x482, x480, x433, x464); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x483, &x484, x465, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x485, &x486, x483, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x487, &x488, x483, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x489, &x490, 0x0, x465, x487); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x491, &x492, x490, x467, x488); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x493, &x494, x492, x469, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x495, &x496, x494, x471, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x497, &x498, x496, x473, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x499, &x500, x498, x475, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x501, &x502, x500, x477, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x503, &x504, x502, x479, x485); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x505, &x506, x504, x481, x486); x507 = ((uint64_t)x506 + x482); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x508, &x509, x7, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x510, &x511, x7, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x512, &x513, x7, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x514, &x515, x7, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x516, &x517, x7, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x518, &x519, x7, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x520, &x521, x7, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x522, &x523, x7, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x524, &x525, 0x0, x523, x520); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x526, &x527, x525, x521, x518); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x528, &x529, x527, x519, x516); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x530, &x531, x529, x517, x514); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x532, &x533, x531, x515, x512); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x534, &x535, x533, x513, x510); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x536, &x537, x535, x511, x508); x538 = (x537 + x509); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x539, &x540, 0x0, x491, x522); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x541, &x542, x540, x493, x524); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x543, &x544, x542, x495, x526); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x545, &x546, x544, x497, x528); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x547, &x548, x546, x499, x530); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x549, &x550, x548, x501, x532); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x551, &x552, x550, x503, x534); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x553, &x554, x552, x505, x536); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x555, &x556, x554, x507, x538); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x557, &x558, x539, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x559, &x560, x557, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x561, &x562, x557, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x563, &x564, 0x0, x539, x561); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x565, &x566, x564, x541, x562); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x567, &x568, x566, x543, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x569, &x570, x568, x545, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x571, &x572, x570, x547, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x573, &x574, x572, x549, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x575, &x576, x574, x551, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x577, &x578, x576, x553, x559); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x579, &x580, x578, x555, x560); x581 = ((uint64_t)x580 + x556); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x582, &x583, 0x0, x565, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x584, &x585, x583, x567, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x586, &x587, x585, x569, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x588, &x589, x587, x571, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x590, &x591, x589, x573, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x592, &x593, x591, x575, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x594, &x595, x593, x577, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x596, &x597, x595, x579, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x598, &x599, x597, x581, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x600, x599, x582, x565); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x601, x599, x584, x567); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x602, x599, x586, x569); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x603, x599, x588, x571); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x604, x599, x590, x573); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x605, x599, x592, x575); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x606, x599, x594, x577); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x607, x599, x596, x579); out1[0] = x600; out1[1] = x601; out1[2] = x602; out1[3] = x603; out1[4] = x604; out1[5] = x605; out1[6] = x606; out1[7] = x607; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_square squares a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_square( uint64_t out1[8], const uint64_t arg1[8]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x26; uint64_t x27; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x28; uint64_t x29; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x30; uint64_t x31; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x32; uint64_t x33; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x34; uint64_t x35; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x36; uint64_t x37; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x47; uint64_t x48; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x49; uint64_t x50; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x51; uint64_t x52; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x53; uint64_t x54; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x55; uint64_t x56; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x57; uint64_t x58; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x59; uint64_t x60; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x61; uint64_t x62; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x81; uint64_t x82; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x83; uint64_t x84; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x85; uint64_t x86; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x87; uint64_t x88; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x89; uint64_t x90; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x91; uint64_t x92; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x93; uint64_t x94; uint64_t x95; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x96; uint64_t x97; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x98; uint64_t x99; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x100; uint64_t x101; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x102; uint64_t x103; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x104; uint64_t x105; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x106; uint64_t x107; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x108; uint64_t x109; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x110; uint64_t x111; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; uint64_t x119; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x120; uint64_t x121; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x122; uint64_t x123; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x124; uint64_t x125; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x126; uint64_t x127; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x128; uint64_t x129; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x130; uint64_t x131; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x132; uint64_t x133; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x134; uint64_t x135; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x136; uint64_t x137; uint64_t x138; uint64_t x139; uint64_t x140; uint64_t x141; uint64_t x142; uint64_t x143; uint64_t x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; uint64_t x150; uint64_t x151; uint64_t x152; uint64_t x153; uint64_t x154; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x155; uint64_t x156; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x157; uint64_t x158; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x159; uint64_t x160; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x161; uint64_t x162; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x163; uint64_t x164; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x165; uint64_t x166; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x167; uint64_t x168; uint64_t x169; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x170; uint64_t x171; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x172; uint64_t x173; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x174; uint64_t x175; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x176; uint64_t x177; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x178; uint64_t x179; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x180; uint64_t x181; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x182; uint64_t x183; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x184; uint64_t x185; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x186; uint64_t x187; uint64_t x188; uint64_t x189; uint64_t x190; uint64_t x191; uint64_t x192; uint64_t x193; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x194; uint64_t x195; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x196; uint64_t x197; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x198; uint64_t x199; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x200; uint64_t x201; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x202; uint64_t x203; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x204; uint64_t x205; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x206; uint64_t x207; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x208; uint64_t x209; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x210; uint64_t x211; uint64_t x212; uint64_t x213; uint64_t x214; uint64_t x215; uint64_t x216; uint64_t x217; uint64_t x218; uint64_t x219; uint64_t x220; uint64_t x221; uint64_t x222; uint64_t x223; uint64_t x224; uint64_t x225; uint64_t x226; uint64_t x227; uint64_t x228; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x229; uint64_t x230; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x231; uint64_t x232; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x233; uint64_t x234; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x235; uint64_t x236; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x237; uint64_t x238; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x239; uint64_t x240; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x241; uint64_t x242; uint64_t x243; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x244; uint64_t x245; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x246; uint64_t x247; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x248; uint64_t x249; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x250; uint64_t x251; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x252; uint64_t x253; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x254; uint64_t x255; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x256; uint64_t x257; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x258; uint64_t x259; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x260; uint64_t x261; uint64_t x262; uint64_t x263; uint64_t x264; uint64_t x265; uint64_t x266; uint64_t x267; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x268; uint64_t x269; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x270; uint64_t x271; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x272; uint64_t x273; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x274; uint64_t x275; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x276; uint64_t x277; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x278; uint64_t x279; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x280; uint64_t x281; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x282; uint64_t x283; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x284; uint64_t x285; uint64_t x286; uint64_t x287; uint64_t x288; uint64_t x289; uint64_t x290; uint64_t x291; uint64_t x292; uint64_t x293; uint64_t x294; uint64_t x295; uint64_t x296; uint64_t x297; uint64_t x298; uint64_t x299; uint64_t x300; uint64_t x301; uint64_t x302; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x303; uint64_t x304; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x305; uint64_t x306; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x307; uint64_t x308; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x309; uint64_t x310; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x311; uint64_t x312; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x313; uint64_t x314; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x315; uint64_t x316; uint64_t x317; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x318; uint64_t x319; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x320; uint64_t x321; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x322; uint64_t x323; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x324; uint64_t x325; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x326; uint64_t x327; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x328; uint64_t x329; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x330; uint64_t x331; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x332; uint64_t x333; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x334; uint64_t x335; uint64_t x336; uint64_t x337; uint64_t x338; uint64_t x339; uint64_t x340; uint64_t x341; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x342; uint64_t x343; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x344; uint64_t x345; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x346; uint64_t x347; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x348; uint64_t x349; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x350; uint64_t x351; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x352; uint64_t x353; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x354; uint64_t x355; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x356; uint64_t x357; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x358; uint64_t x359; uint64_t x360; uint64_t x361; uint64_t x362; uint64_t x363; uint64_t x364; uint64_t x365; uint64_t x366; uint64_t x367; uint64_t x368; uint64_t x369; uint64_t x370; uint64_t x371; uint64_t x372; uint64_t x373; uint64_t x374; uint64_t x375; uint64_t x376; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x377; uint64_t x378; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x379; uint64_t x380; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x381; uint64_t x382; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x383; uint64_t x384; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x385; uint64_t x386; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x387; uint64_t x388; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x389; uint64_t x390; uint64_t x391; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x392; uint64_t x393; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x394; uint64_t x395; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x396; uint64_t x397; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x398; uint64_t x399; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x400; uint64_t x401; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x402; uint64_t x403; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x404; uint64_t x405; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x406; uint64_t x407; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x408; uint64_t x409; uint64_t x410; uint64_t x411; uint64_t x412; uint64_t x413; uint64_t x414; uint64_t x415; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x416; uint64_t x417; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x418; uint64_t x419; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x420; uint64_t x421; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x422; uint64_t x423; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x424; uint64_t x425; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x426; uint64_t x427; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x428; uint64_t x429; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x430; uint64_t x431; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x432; uint64_t x433; uint64_t x434; uint64_t x435; uint64_t x436; uint64_t x437; uint64_t x438; uint64_t x439; uint64_t x440; uint64_t x441; uint64_t x442; uint64_t x443; uint64_t x444; uint64_t x445; uint64_t x446; uint64_t x447; uint64_t x448; uint64_t x449; uint64_t x450; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x451; uint64_t x452; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x453; uint64_t x454; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x455; uint64_t x456; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x457; uint64_t x458; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x459; uint64_t x460; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x461; uint64_t x462; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x463; uint64_t x464; uint64_t x465; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x466; uint64_t x467; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x468; uint64_t x469; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x470; uint64_t x471; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x472; uint64_t x473; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x474; uint64_t x475; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x476; uint64_t x477; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x478; uint64_t x479; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x480; uint64_t x481; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x482; uint64_t x483; uint64_t x484; uint64_t x485; uint64_t x486; uint64_t x487; uint64_t x488; uint64_t x489; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x490; uint64_t x491; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x492; uint64_t x493; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x494; uint64_t x495; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x496; uint64_t x497; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x498; uint64_t x499; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x500; uint64_t x501; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x502; uint64_t x503; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x504; uint64_t x505; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x506; uint64_t x507; uint64_t x508; uint64_t x509; uint64_t x510; uint64_t x511; uint64_t x512; uint64_t x513; uint64_t x514; uint64_t x515; uint64_t x516; uint64_t x517; uint64_t x518; uint64_t x519; uint64_t x520; uint64_t x521; uint64_t x522; uint64_t x523; uint64_t x524; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x525; uint64_t x526; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x527; uint64_t x528; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x529; uint64_t x530; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x531; uint64_t x532; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x533; uint64_t x534; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x535; uint64_t x536; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x537; uint64_t x538; uint64_t x539; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x540; uint64_t x541; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x542; uint64_t x543; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x544; uint64_t x545; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x546; uint64_t x547; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x548; uint64_t x549; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x550; uint64_t x551; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x552; uint64_t x553; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x554; uint64_t x555; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x556; uint64_t x557; uint64_t x558; uint64_t x559; uint64_t x560; uint64_t x561; uint64_t x562; uint64_t x563; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x564; uint64_t x565; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x566; uint64_t x567; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x568; uint64_t x569; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x570; uint64_t x571; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x572; uint64_t x573; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x574; uint64_t x575; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x576; uint64_t x577; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x578; uint64_t x579; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x580; uint64_t x581; uint64_t x582; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x583; uint64_t x584; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x585; uint64_t x586; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x587; uint64_t x588; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x589; uint64_t x590; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x591; uint64_t x592; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x593; uint64_t x594; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x595; uint64_t x596; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x597; uint64_t x598; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x599; uint64_t x600; uint64_t x601; uint64_t x602; uint64_t x603; uint64_t x604; uint64_t x605; uint64_t x606; uint64_t x607; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[0]); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x9, &x10, x8, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x11, &x12, x8, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x13, &x14, x8, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x15, &x16, x8, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x17, &x18, x8, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x19, &x20, x8, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x21, &x22, x8, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x23, &x24, x8, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x25, &x26, 0x0, x24, x21); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x27, &x28, x26, x22, x19); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x29, &x30, x28, x20, x17); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x31, &x32, x30, x18, x15); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x33, &x34, x32, x16, x13); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x35, &x36, x34, x14, x11); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x37, &x38, x36, x12, x9); x39 = (x38 + x10); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x40, &x41, x23, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x42, &x43, x40, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x44, &x45, x40, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x46, &x47, 0x0, x23, x44); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x48, &x49, x47, x25, x45); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x50, &x51, x49, x27, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x52, &x53, x51, x29, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x54, &x55, x53, x31, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x56, &x57, x55, x33, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x58, &x59, x57, x35, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x60, &x61, x59, x37, x42); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x62, &x63, x61, x39, x43); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x64, &x65, x1, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x66, &x67, x1, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x68, &x69, x1, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x70, &x71, x1, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x72, &x73, x1, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x74, &x75, x1, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x76, &x77, x1, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x78, &x79, x1, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x80, &x81, 0x0, x79, x76); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x82, &x83, x81, x77, x74); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x84, &x85, x83, x75, x72); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x86, &x87, x85, x73, x70); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x88, &x89, x87, x71, x68); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x90, &x91, x89, x69, x66); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x92, &x93, x91, x67, x64); x94 = (x93 + x65); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x95, &x96, 0x0, x48, x78); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x97, &x98, x96, x50, x80); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x99, &x100, x98, x52, x82); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x101, &x102, x100, x54, x84); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x103, &x104, x102, x56, x86); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x105, &x106, x104, x58, x88); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x107, &x108, x106, x60, x90); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x109, &x110, x108, x62, x92); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x111, &x112, x110, x63, x94); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x113, &x114, x95, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x115, &x116, x113, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x117, &x118, x113, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x119, &x120, 0x0, x95, x117); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x121, &x122, x120, x97, x118); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x123, &x124, x122, x99, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x125, &x126, x124, x101, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x127, &x128, x126, x103, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x129, &x130, x128, x105, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x131, &x132, x130, x107, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x133, &x134, x132, x109, x115); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x135, &x136, x134, x111, x116); x137 = ((uint64_t)x136 + x112); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x138, &x139, x2, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x140, &x141, x2, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x142, &x143, x2, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x144, &x145, x2, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x146, &x147, x2, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x148, &x149, x2, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x150, &x151, x2, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x152, &x153, x2, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x154, &x155, 0x0, x153, x150); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x156, &x157, x155, x151, x148); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x158, &x159, x157, x149, x146); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x160, &x161, x159, x147, x144); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x162, &x163, x161, x145, x142); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x164, &x165, x163, x143, x140); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x166, &x167, x165, x141, x138); x168 = (x167 + x139); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x169, &x170, 0x0, x121, x152); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x171, &x172, x170, x123, x154); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x173, &x174, x172, x125, x156); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x175, &x176, x174, x127, x158); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x177, &x178, x176, x129, x160); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x179, &x180, x178, x131, x162); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x181, &x182, x180, x133, x164); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x183, &x184, x182, x135, x166); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x185, &x186, x184, x137, x168); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x187, &x188, x169, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x189, &x190, x187, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x191, &x192, x187, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x193, &x194, 0x0, x169, x191); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x195, &x196, x194, x171, x192); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x197, &x198, x196, x173, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x199, &x200, x198, x175, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x201, &x202, x200, x177, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x203, &x204, x202, x179, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x205, &x206, x204, x181, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x207, &x208, x206, x183, x189); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x209, &x210, x208, x185, x190); x211 = ((uint64_t)x210 + x186); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x212, &x213, x3, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x214, &x215, x3, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x216, &x217, x3, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x218, &x219, x3, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x220, &x221, x3, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x222, &x223, x3, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x224, &x225, x3, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x226, &x227, x3, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x228, &x229, 0x0, x227, x224); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x230, &x231, x229, x225, x222); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x232, &x233, x231, x223, x220); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x234, &x235, x233, x221, x218); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x236, &x237, x235, x219, x216); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x238, &x239, x237, x217, x214); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x240, &x241, x239, x215, x212); x242 = (x241 + x213); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x243, &x244, 0x0, x195, x226); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x245, &x246, x244, x197, x228); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x247, &x248, x246, x199, x230); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x249, &x250, x248, x201, x232); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x251, &x252, x250, x203, x234); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x253, &x254, x252, x205, x236); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x255, &x256, x254, x207, x238); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x257, &x258, x256, x209, x240); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x259, &x260, x258, x211, x242); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x261, &x262, x243, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x263, &x264, x261, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x265, &x266, x261, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x267, &x268, 0x0, x243, x265); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x269, &x270, x268, x245, x266); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x271, &x272, x270, x247, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x273, &x274, x272, x249, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x275, &x276, x274, x251, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x277, &x278, x276, x253, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x279, &x280, x278, x255, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x281, &x282, x280, x257, x263); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x283, &x284, x282, x259, x264); x285 = ((uint64_t)x284 + x260); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x286, &x287, x4, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x288, &x289, x4, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x290, &x291, x4, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x292, &x293, x4, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x294, &x295, x4, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x296, &x297, x4, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x298, &x299, x4, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x300, &x301, x4, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x302, &x303, 0x0, x301, x298); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x304, &x305, x303, x299, x296); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x306, &x307, x305, x297, x294); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x308, &x309, x307, x295, x292); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x310, &x311, x309, x293, x290); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x312, &x313, x311, x291, x288); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x314, &x315, x313, x289, x286); x316 = (x315 + x287); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x317, &x318, 0x0, x269, x300); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x319, &x320, x318, x271, x302); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x321, &x322, x320, x273, x304); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x323, &x324, x322, x275, x306); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x325, &x326, x324, x277, x308); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x327, &x328, x326, x279, x310); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x329, &x330, x328, x281, x312); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x331, &x332, x330, x283, x314); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x333, &x334, x332, x285, x316); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x335, &x336, x317, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x337, &x338, x335, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x339, &x340, x335, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x341, &x342, 0x0, x317, x339); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x343, &x344, x342, x319, x340); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x345, &x346, x344, x321, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x347, &x348, x346, x323, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x349, &x350, x348, x325, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x351, &x352, x350, x327, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x353, &x354, x352, x329, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x355, &x356, x354, x331, x337); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x357, &x358, x356, x333, x338); x359 = ((uint64_t)x358 + x334); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x360, &x361, x5, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x362, &x363, x5, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x364, &x365, x5, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x366, &x367, x5, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x368, &x369, x5, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x370, &x371, x5, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x372, &x373, x5, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x374, &x375, x5, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x376, &x377, 0x0, x375, x372); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x378, &x379, x377, x373, x370); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x380, &x381, x379, x371, x368); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x382, &x383, x381, x369, x366); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x384, &x385, x383, x367, x364); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x386, &x387, x385, x365, x362); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x388, &x389, x387, x363, x360); x390 = (x389 + x361); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x391, &x392, 0x0, x343, x374); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x393, &x394, x392, x345, x376); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x395, &x396, x394, x347, x378); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x397, &x398, x396, x349, x380); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x399, &x400, x398, x351, x382); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x401, &x402, x400, x353, x384); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x403, &x404, x402, x355, x386); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x405, &x406, x404, x357, x388); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x407, &x408, x406, x359, x390); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x409, &x410, x391, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x411, &x412, x409, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x413, &x414, x409, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x415, &x416, 0x0, x391, x413); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x417, &x418, x416, x393, x414); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x419, &x420, x418, x395, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x421, &x422, x420, x397, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x423, &x424, x422, x399, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x425, &x426, x424, x401, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x427, &x428, x426, x403, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x429, &x430, x428, x405, x411); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x431, &x432, x430, x407, x412); x433 = ((uint64_t)x432 + x408); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x434, &x435, x6, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x436, &x437, x6, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x438, &x439, x6, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x440, &x441, x6, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x442, &x443, x6, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x444, &x445, x6, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x446, &x447, x6, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x448, &x449, x6, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x450, &x451, 0x0, x449, x446); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x452, &x453, x451, x447, x444); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x454, &x455, x453, x445, x442); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x456, &x457, x455, x443, x440); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x458, &x459, x457, x441, x438); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x460, &x461, x459, x439, x436); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x462, &x463, x461, x437, x434); x464 = (x463 + x435); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x465, &x466, 0x0, x417, x448); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x467, &x468, x466, x419, x450); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x469, &x470, x468, x421, x452); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x471, &x472, x470, x423, x454); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x473, &x474, x472, x425, x456); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x475, &x476, x474, x427, x458); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x477, &x478, x476, x429, x460); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x479, &x480, x478, x431, x462); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x481, &x482, x480, x433, x464); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x483, &x484, x465, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x485, &x486, x483, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x487, &x488, x483, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x489, &x490, 0x0, x465, x487); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x491, &x492, x490, x467, x488); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x493, &x494, x492, x469, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x495, &x496, x494, x471, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x497, &x498, x496, x473, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x499, &x500, x498, x475, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x501, &x502, x500, x477, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x503, &x504, x502, x479, x485); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x505, &x506, x504, x481, x486); x507 = ((uint64_t)x506 + x482); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x508, &x509, x7, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x510, &x511, x7, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x512, &x513, x7, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x514, &x515, x7, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x516, &x517, x7, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x518, &x519, x7, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x520, &x521, x7, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x522, &x523, x7, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x524, &x525, 0x0, x523, x520); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x526, &x527, x525, x521, x518); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x528, &x529, x527, x519, x516); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x530, &x531, x529, x517, x514); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x532, &x533, x531, x515, x512); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x534, &x535, x533, x513, x510); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x536, &x537, x535, x511, x508); x538 = (x537 + x509); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x539, &x540, 0x0, x491, x522); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x541, &x542, x540, x493, x524); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x543, &x544, x542, x495, x526); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x545, &x546, x544, x497, x528); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x547, &x548, x546, x499, x530); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x549, &x550, x548, x501, x532); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x551, &x552, x550, x503, x534); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x553, &x554, x552, x505, x536); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x555, &x556, x554, x507, x538); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x557, &x558, x539, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x559, &x560, x557, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x561, &x562, x557, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x563, &x564, 0x0, x539, x561); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x565, &x566, x564, x541, x562); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x567, &x568, x566, x543, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x569, &x570, x568, x545, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x571, &x572, x570, x547, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x573, &x574, x572, x549, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x575, &x576, x574, x551, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x577, &x578, x576, x553, x559); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x579, &x580, x578, x555, x560); x581 = ((uint64_t)x580 + x556); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x582, &x583, 0x0, x565, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x584, &x585, x583, x567, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x586, &x587, x585, x569, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x588, &x589, x587, x571, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x590, &x591, x589, x573, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x592, &x593, x591, x575, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x594, &x595, x593, x577, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x596, &x597, x595, x579, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x598, &x599, x597, x581, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x600, x599, x582, x565); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x601, x599, x584, x567); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x602, x599, x586, x569); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x603, x599, x588, x571); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x604, x599, x590, x573); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x605, x599, x592, x575); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x606, x599, x594, x577); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x607, x599, x596, x579); out1[0] = x600; out1[1] = x601; out1[2] = x602; out1[3] = x603; out1[4] = x604; out1[5] = x605; out1[6] = x606; out1[7] = x607; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_add adds two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_add( uint64_t out1[8], const uint64_t arg1[8], const uint64_t arg2[8]) { uint64_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2; uint64_t x3; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x4; uint64_t x5; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x6; uint64_t x7; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x8; uint64_t x9; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x10; uint64_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x12; uint64_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x14; uint64_t x15; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x16; uint64_t x17; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x18; uint64_t x19; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x20; uint64_t x21; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x22; uint64_t x23; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x24; uint64_t x25; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x26; uint64_t x27; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x28; uint64_t x29; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x30; uint64_t x31; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x32; uint64_t x33; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x9, &x10, x8, (arg1[4]), (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x11, &x12, x10, (arg1[5]), (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x13, &x14, x12, (arg1[6]), (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x15, &x16, x14, (arg1[7]), (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x17, &x18, 0x0, x1, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x19, &x20, x18, x3, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x21, &x22, x20, x5, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x23, &x24, x22, x7, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x25, &x26, x24, x9, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x27, &x28, x26, x11, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x29, &x30, x28, x13, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x31, &x32, x30, x15, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x33, &x34, x32, x16, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x35, x34, x17, x1); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x36, x34, x19, x3); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x37, x34, x21, x5); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x38, x34, x23, x7); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x39, x34, x25, x9); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x40, x34, x27, x11); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x41, x34, x29, x13); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x42, x34, x31, x15); out1[0] = x35; out1[1] = x36; out1[2] = x37; out1[3] = x38; out1[4] = x39; out1[5] = x40; out1[6] = x41; out1[7] = x42; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_sub subtracts two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_sub( uint64_t out1[8], const uint64_t arg1[8], const uint64_t arg2[8]) { uint64_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2; uint64_t x3; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x4; uint64_t x5; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x6; uint64_t x7; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x8; uint64_t x9; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x10; uint64_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x12; uint64_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x14; uint64_t x15; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x16; uint64_t x17; uint64_t x18; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x19; uint64_t x20; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x21; uint64_t x22; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x23; uint64_t x24; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x25; uint64_t x26; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x27; uint64_t x28; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x29; uint64_t x30; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x31; uint64_t x32; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x33; fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x9, &x10, x8, (arg1[4]), (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x11, &x12, x10, (arg1[5]), (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x13, &x14, x12, (arg1[6]), (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x15, &x16, x14, (arg1[7]), (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64( &x17, x16, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x18, &x19, 0x0, x1, (x17 & UINT8_C(0x6f))); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x20, &x21, x19, x3, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x22, &x23, x21, x5, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x24, &x25, x23, x7, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x26, &x27, x25, x9, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x28, &x29, x27, x11, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x30, &x31, x29, x13, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x32, &x33, x31, x15, (x17 & UINT64_C(0x8000000000000000))); out1[0] = x18; out1[1] = x20; out1[2] = x22; out1[3] = x24; out1[4] = x26; out1[5] = x28; out1[6] = x30; out1[7] = x32; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_opp negates a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_opp( uint64_t out1[8], const uint64_t arg1[8]) { uint64_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2; uint64_t x3; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x4; uint64_t x5; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x6; uint64_t x7; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x8; uint64_t x9; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x10; uint64_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x12; uint64_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x14; uint64_t x15; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x16; uint64_t x17; uint64_t x18; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x19; uint64_t x20; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x21; uint64_t x22; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x23; uint64_t x24; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x25; uint64_t x26; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x27; uint64_t x28; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x29; uint64_t x30; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x31; uint64_t x32; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x33; fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x1, &x2, 0x0, 0x0, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x3, &x4, x2, 0x0, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x5, &x6, x4, 0x0, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x7, &x8, x6, 0x0, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x9, &x10, x8, 0x0, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x11, &x12, x10, 0x0, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x13, &x14, x12, 0x0, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x15, &x16, x14, 0x0, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64( &x17, x16, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x18, &x19, 0x0, x1, (x17 & UINT8_C(0x6f))); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x20, &x21, x19, x3, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x22, &x23, x21, x5, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x24, &x25, x23, x7, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x26, &x27, x25, x9, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x28, &x29, x27, x11, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x30, &x31, x29, x13, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x32, &x33, x31, x15, (x17 & UINT64_C(0x8000000000000000))); out1[0] = x18; out1[1] = x20; out1[2] = x22; out1[3] = x24; out1[4] = x26; out1[5] = x28; out1[6] = x30; out1[7] = x32; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery translates a field element out of the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval out1 mod m = (eval arg1 * ((2^64)âģš mod m)^8) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery( uint64_t out1[8], const uint64_t arg1[8]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x9; uint64_t x10; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x19; uint64_t x20; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x21; uint64_t x22; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x31; uint64_t x32; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x33; uint64_t x34; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x43; uint64_t x44; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x45; uint64_t x46; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x55; uint64_t x56; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x57; uint64_t x58; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x67; uint64_t x68; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x69; uint64_t x70; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x71; uint64_t x72; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x73; uint64_t x74; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x75; uint64_t x76; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x77; uint64_t x78; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x79; uint64_t x80; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x81; uint64_t x82; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint64_t x89; uint64_t x90; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x91; uint64_t x92; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x93; uint64_t x94; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x95; uint64_t x96; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x97; uint64_t x98; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x99; uint64_t x100; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x101; uint64_t x102; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x103; uint64_t x104; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x105; uint64_t x106; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x107; uint64_t x108; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x109; uint64_t x110; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x111; uint64_t x112; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x113; uint64_t x114; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x115; uint64_t x116; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x117; uint64_t x118; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x127; uint64_t x128; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x129; uint64_t x130; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x131; uint64_t x132; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x133; uint64_t x134; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x135; uint64_t x136; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x137; uint64_t x138; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x139; uint64_t x140; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x141; uint64_t x142; uint64_t x143; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x144; uint64_t x145; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x146; uint64_t x147; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x148; uint64_t x149; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x150; uint64_t x151; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x152; uint64_t x153; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x154; uint64_t x155; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x156; uint64_t x157; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x158; uint64_t x159; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x160; uint64_t x161; uint64_t x162; uint64_t x163; uint64_t x164; uint64_t x165; uint64_t x166; uint64_t x167; uint64_t x168; x1 = (arg1[0]); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x2, &x3, x1, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x4, &x5, x2, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x6, &x7, x2, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x8, &x9, 0x0, x1, x6); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x10, &x11, 0x0, (x9 + x7), (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x12, &x13, x10, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x14, &x15, x12, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x16, &x17, x12, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x18, &x19, 0x0, x5, x14); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x20, &x21, 0x0, x10, x16); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x22, &x23, 0x0, (((uint64_t)x21 + x11) + x17), (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x24, &x25, x22, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x26, &x27, x24, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x28, &x29, x24, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x30, &x31, 0x0, (x19 + x15), x26); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x32, &x33, 0x0, x22, x28); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x34, &x35, 0x0, (((uint64_t)x33 + x23) + x29), (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x36, &x37, x34, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x38, &x39, x36, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x40, &x41, x36, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x42, &x43, 0x0, (x31 + x27), x38); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x44, &x45, 0x0, x34, x40); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x46, &x47, 0x0, (((uint64_t)x45 + x35) + x41), (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x48, &x49, x46, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x50, &x51, x48, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x52, &x53, x48, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x54, &x55, 0x0, (x43 + x39), x50); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x56, &x57, 0x0, x46, x52); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x58, &x59, 0x0, (((uint64_t)x57 + x47) + x53), (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x60, &x61, x58, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x62, &x63, x60, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x64, &x65, x60, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x66, &x67, 0x0, (x55 + x51), x62); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x68, &x69, 0x0, x58, x64); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x70, &x71, 0x0, (((uint64_t)x69 + x59) + x65), (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x72, &x73, x71, x4, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x74, &x75, x73, x18, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x76, &x77, x75, x30, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x78, &x79, x77, x42, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x80, &x81, x79, x54, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x82, &x83, x81, x66, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x84, &x85, x70, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x86, &x87, x84, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x88, &x89, x84, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x90, &x91, 0x0, x70, x88); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x92, &x93, x91, x72, x89); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x94, &x95, x93, x74, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x96, &x97, x95, x76, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x98, &x99, x97, x78, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x100, &x101, x99, x80, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x102, &x103, x101, x82, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x104, &x105, x103, (x83 + (x67 + x63)), x86); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x106, &x107, 0x0, x92, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x108, &x109, x107, x94, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x110, &x111, x109, x96, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x112, &x113, x111, x98, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x114, &x115, x113, x100, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x116, &x117, x115, x102, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x118, &x119, x117, x104, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x120, &x121, x106, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x122, &x123, x120, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x124, &x125, x120, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x126, &x127, 0x0, x106, x124); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x128, &x129, x127, x108, x125); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x130, &x131, x129, x110, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x132, &x133, x131, x112, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x134, &x135, x133, x114, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x136, &x137, x135, x116, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x138, &x139, x137, x118, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x140, &x141, x139, (x119 + (x105 + x87)), x122); x142 = (x141 + x123); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x143, &x144, 0x0, x128, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x145, &x146, x144, x130, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x147, &x148, x146, x132, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x149, &x150, x148, x134, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x151, &x152, x150, x136, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x153, &x154, x152, x138, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x155, &x156, x154, x140, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x157, &x158, x156, x142, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x159, &x160, x158, 0x0, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x161, x160, x143, x128); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x162, x160, x145, x130); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x163, x160, x147, x132); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x164, x160, x149, x134); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x165, x160, x151, x136); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x166, x160, x153, x138); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x167, x160, x155, x140); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x168, x160, x157, x142); out1[0] = x161; out1[1] = x162; out1[2] = x163; out1[3] = x164; out1[4] = x165; out1[5] = x166; out1[6] = x167; out1[7] = x168; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery translates a field element into the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery( uint64_t out1[8], const uint64_t arg1[8]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x12; uint64_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x22; uint64_t x23; uint64_t x24; uint64_t x25; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x26; uint64_t x27; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x28; uint64_t x29; uint64_t x30; uint64_t x31; uint64_t x32; uint64_t x33; uint64_t x34; uint64_t x35; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x36; uint64_t x37; uint64_t x38; uint64_t x39; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x40; uint64_t x41; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x50; uint64_t x51; uint64_t x52; uint64_t x53; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x54; uint64_t x55; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x64; uint64_t x65; uint64_t x66; uint64_t x67; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x68; uint64_t x69; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x78; uint64_t x79; uint64_t x80; uint64_t x81; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x82; uint64_t x83; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x84; uint64_t x85; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x86; uint64_t x87; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x88; uint64_t x89; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x90; uint64_t x91; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x92; uint64_t x93; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x94; uint64_t x95; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x104; uint64_t x105; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x106; uint64_t x107; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x108; uint64_t x109; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x110; uint64_t x111; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x112; uint64_t x113; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x114; uint64_t x115; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x116; uint64_t x117; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x118; uint64_t x119; uint64_t x120; uint64_t x121; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x122; uint64_t x123; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x124; uint64_t x125; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x126; uint64_t x127; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x128; uint64_t x129; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x130; uint64_t x131; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x132; uint64_t x133; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x134; uint64_t x135; uint64_t x136; uint64_t x137; uint64_t x138; uint64_t x139; uint64_t x140; uint64_t x141; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x142; uint64_t x143; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x144; uint64_t x145; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x146; uint64_t x147; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x148; uint64_t x149; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x150; uint64_t x151; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x152; uint64_t x153; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x154; uint64_t x155; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x156; uint64_t x157; uint64_t x158; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x159; uint64_t x160; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x161; uint64_t x162; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x163; uint64_t x164; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x165; uint64_t x166; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x167; uint64_t x168; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x169; uint64_t x170; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x171; uint64_t x172; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x173; uint64_t x174; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x175; uint64_t x176; uint64_t x177; uint64_t x178; uint64_t x179; uint64_t x180; uint64_t x181; uint64_t x182; uint64_t x183; fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x1, &x2, (arg1[0]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x3, &x4, x1, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x5, &x6, x3, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x7, &x8, x3, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x9, &x10, (arg1[1]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x11, &x12, 0x0, x1, x7); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x13, &x14, 0x0, ((x12 + x2) + x8), x9); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x15, &x16, x13, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x17, &x18, x15, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x19, &x20, x15, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x21, &x22, 0x0, x6, x17); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x23, &x24, (arg1[2]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x25, &x26, 0x0, x13, x19); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x27, &x28, 0x0, ((x26 + (x14 + x10)) + x20), x23); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x29, &x30, x27, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x31, &x32, x29, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x33, &x34, x29, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x35, &x36, 0x0, (x22 + x18), x31); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x37, &x38, (arg1[3]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x39, &x40, 0x0, x27, x33); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x41, &x42, 0x0, ((x40 + (x28 + x24)) + x34), x37); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x43, &x44, x41, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x45, &x46, x43, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x47, &x48, x43, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x49, &x50, 0x0, (x36 + x32), x45); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x51, &x52, (arg1[4]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x53, &x54, 0x0, x41, x47); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x55, &x56, 0x0, ((x54 + (x42 + x38)) + x48), x51); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x57, &x58, x55, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x59, &x60, x57, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x61, &x62, x57, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x63, &x64, 0x0, (x50 + x46), x59); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x65, &x66, (arg1[5]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x67, &x68, 0x0, x55, x61); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x69, &x70, 0x0, ((x68 + (x56 + x52)) + x62), x65); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x71, &x72, x69, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x73, &x74, x71, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x75, &x76, x71, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x77, &x78, 0x0, (x64 + x60), x73); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x79, &x80, (arg1[6]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x81, &x82, 0x0, x69, x75); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x83, &x84, 0x0, ((x82 + (x70 + x66)) + x76), x79); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x85, &x86, x84, x5, x80); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x87, &x88, x86, x21, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x89, &x90, x88, x35, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x91, &x92, x90, x49, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x93, &x94, x92, x63, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x95, &x96, x94, x77, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x97, &x98, x83, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x99, &x100, x97, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x101, &x102, x97, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x103, &x104, 0x0, x83, x101); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x105, &x106, x104, x85, x102); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x107, &x108, x106, x87, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x109, &x110, x108, x89, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x111, &x112, x110, x91, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x113, &x114, x112, x93, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x115, &x116, x114, x95, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x117, &x118, x116, (x96 + (x78 + x74)), x99); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x119, &x120, (arg1[7]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x121, &x122, 0x0, x105, x119); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x123, &x124, x122, x107, x120); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x125, &x126, x124, x109, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x127, &x128, x126, x111, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x129, &x130, x128, x113, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x131, &x132, x130, x115, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x133, &x134, x132, x117, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x135, &x136, x121, UINT64_C(0x4e6a171024e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64( &x137, &x138, x135, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u64(&x139, &x140, x135, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x141, &x142, 0x0, x121, x139); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x143, &x144, x142, x123, x140); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x145, &x146, x144, x125, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x147, &x148, x146, x127, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x149, &x150, x148, x129, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x151, &x152, x150, x131, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64(&x153, &x154, x152, x133, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u64( &x155, &x156, x154, (x134 + (x118 + x100)), x137); x157 = (x156 + x138); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x158, &x159, 0x0, x143, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x160, &x161, x159, x145, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x162, &x163, x161, x147, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x164, &x165, x163, x149, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x166, &x167, x165, x151, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x168, &x169, x167, x153, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x170, &x171, x169, x155, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64( &x172, &x173, x171, x157, UINT64_C(0x8000000000000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u64(&x174, &x175, x173, 0x0, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x176, x175, x158, x143); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x177, x175, x160, x145); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x178, x175, x162, x147); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x179, x175, x164, x149); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x180, x175, x166, x151); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x181, x175, x168, x153); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x182, x175, x170, x155); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x183, x175, x172, x157); out1[0] = x176; out1[1] = x177; out1[2] = x178; out1[3] = x179; out1[4] = x180; out1[5] = x181; out1[6] = x182; out1[7] = x183; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_nonzero( uint64_t *out1, const uint64_t arg1[8]) { uint64_t x1; x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | (arg1[7])))))))); *out1 = x1; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( uint64_t out1[8], fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 arg1, const uint64_t arg2[8], const uint64_t arg3[8]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x5, arg1, (arg2[4]), (arg3[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x6, arg1, (arg2[5]), (arg3[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x7, arg1, (arg2[6]), (arg3[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u64(&x8, arg1, (arg2[7]), (arg3[7])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..63] * * Input Bounds: * arg1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes( uint8_t out1[64], const uint64_t arg1[8]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint8_t x9; uint64_t x10; uint8_t x11; uint64_t x12; uint8_t x13; uint64_t x14; uint8_t x15; uint64_t x16; uint8_t x17; uint64_t x18; uint8_t x19; uint64_t x20; uint8_t x21; uint8_t x22; uint8_t x23; uint64_t x24; uint8_t x25; uint64_t x26; uint8_t x27; uint64_t x28; uint8_t x29; uint64_t x30; uint8_t x31; uint64_t x32; uint8_t x33; uint64_t x34; uint8_t x35; uint8_t x36; uint8_t x37; uint64_t x38; uint8_t x39; uint64_t x40; uint8_t x41; uint64_t x42; uint8_t x43; uint64_t x44; uint8_t x45; uint64_t x46; uint8_t x47; uint64_t x48; uint8_t x49; uint8_t x50; uint8_t x51; uint64_t x52; uint8_t x53; uint64_t x54; uint8_t x55; uint64_t x56; uint8_t x57; uint64_t x58; uint8_t x59; uint64_t x60; uint8_t x61; uint64_t x62; uint8_t x63; uint8_t x64; uint8_t x65; uint64_t x66; uint8_t x67; uint64_t x68; uint8_t x69; uint64_t x70; uint8_t x71; uint64_t x72; uint8_t x73; uint64_t x74; uint8_t x75; uint64_t x76; uint8_t x77; uint8_t x78; uint8_t x79; uint64_t x80; uint8_t x81; uint64_t x82; uint8_t x83; uint64_t x84; uint8_t x85; uint64_t x86; uint8_t x87; uint64_t x88; uint8_t x89; uint64_t x90; uint8_t x91; uint8_t x92; uint8_t x93; uint64_t x94; uint8_t x95; uint64_t x96; uint8_t x97; uint64_t x98; uint8_t x99; uint64_t x100; uint8_t x101; uint64_t x102; uint8_t x103; uint64_t x104; uint8_t x105; uint8_t x106; uint8_t x107; uint64_t x108; uint8_t x109; uint64_t x110; uint8_t x111; uint64_t x112; uint8_t x113; uint64_t x114; uint8_t x115; uint64_t x116; uint8_t x117; uint64_t x118; uint8_t x119; uint8_t x120; x1 = (arg1[7]); x2 = (arg1[6]); x3 = (arg1[5]); x4 = (arg1[4]); x5 = (arg1[3]); x6 = (arg1[2]); x7 = (arg1[1]); x8 = (arg1[0]); x9 = (uint8_t)(x8 & UINT8_C(0xff)); x10 = (x8 >> 8); x11 = (uint8_t)(x10 & UINT8_C(0xff)); x12 = (x10 >> 8); x13 = (uint8_t)(x12 & UINT8_C(0xff)); x14 = (x12 >> 8); x15 = (uint8_t)(x14 & UINT8_C(0xff)); x16 = (x14 >> 8); x17 = (uint8_t)(x16 & UINT8_C(0xff)); x18 = (x16 >> 8); x19 = (uint8_t)(x18 & UINT8_C(0xff)); x20 = (x18 >> 8); x21 = (uint8_t)(x20 & UINT8_C(0xff)); x22 = (uint8_t)(x20 >> 8); x23 = (uint8_t)(x7 & UINT8_C(0xff)); x24 = (x7 >> 8); x25 = (uint8_t)(x24 & UINT8_C(0xff)); x26 = (x24 >> 8); x27 = (uint8_t)(x26 & UINT8_C(0xff)); x28 = (x26 >> 8); x29 = (uint8_t)(x28 & UINT8_C(0xff)); x30 = (x28 >> 8); x31 = (uint8_t)(x30 & UINT8_C(0xff)); x32 = (x30 >> 8); x33 = (uint8_t)(x32 & UINT8_C(0xff)); x34 = (x32 >> 8); x35 = (uint8_t)(x34 & UINT8_C(0xff)); x36 = (uint8_t)(x34 >> 8); x37 = (uint8_t)(x6 & UINT8_C(0xff)); x38 = (x6 >> 8); x39 = (uint8_t)(x38 & UINT8_C(0xff)); x40 = (x38 >> 8); x41 = (uint8_t)(x40 & UINT8_C(0xff)); x42 = (x40 >> 8); x43 = (uint8_t)(x42 & UINT8_C(0xff)); x44 = (x42 >> 8); x45 = (uint8_t)(x44 & UINT8_C(0xff)); x46 = (x44 >> 8); x47 = (uint8_t)(x46 & UINT8_C(0xff)); x48 = (x46 >> 8); x49 = (uint8_t)(x48 & UINT8_C(0xff)); x50 = (uint8_t)(x48 >> 8); x51 = (uint8_t)(x5 & UINT8_C(0xff)); x52 = (x5 >> 8); x53 = (uint8_t)(x52 & UINT8_C(0xff)); x54 = (x52 >> 8); x55 = (uint8_t)(x54 & UINT8_C(0xff)); x56 = (x54 >> 8); x57 = (uint8_t)(x56 & UINT8_C(0xff)); x58 = (x56 >> 8); x59 = (uint8_t)(x58 & UINT8_C(0xff)); x60 = (x58 >> 8); x61 = (uint8_t)(x60 & UINT8_C(0xff)); x62 = (x60 >> 8); x63 = (uint8_t)(x62 & UINT8_C(0xff)); x64 = (uint8_t)(x62 >> 8); x65 = (uint8_t)(x4 & UINT8_C(0xff)); x66 = (x4 >> 8); x67 = (uint8_t)(x66 & UINT8_C(0xff)); x68 = (x66 >> 8); x69 = (uint8_t)(x68 & UINT8_C(0xff)); x70 = (x68 >> 8); x71 = (uint8_t)(x70 & UINT8_C(0xff)); x72 = (x70 >> 8); x73 = (uint8_t)(x72 & UINT8_C(0xff)); x74 = (x72 >> 8); x75 = (uint8_t)(x74 & UINT8_C(0xff)); x76 = (x74 >> 8); x77 = (uint8_t)(x76 & UINT8_C(0xff)); x78 = (uint8_t)(x76 >> 8); x79 = (uint8_t)(x3 & UINT8_C(0xff)); x80 = (x3 >> 8); x81 = (uint8_t)(x80 & UINT8_C(0xff)); x82 = (x80 >> 8); x83 = (uint8_t)(x82 & UINT8_C(0xff)); x84 = (x82 >> 8); x85 = (uint8_t)(x84 & UINT8_C(0xff)); x86 = (x84 >> 8); x87 = (uint8_t)(x86 & UINT8_C(0xff)); x88 = (x86 >> 8); x89 = (uint8_t)(x88 & UINT8_C(0xff)); x90 = (x88 >> 8); x91 = (uint8_t)(x90 & UINT8_C(0xff)); x92 = (uint8_t)(x90 >> 8); x93 = (uint8_t)(x2 & UINT8_C(0xff)); x94 = (x2 >> 8); x95 = (uint8_t)(x94 & UINT8_C(0xff)); x96 = (x94 >> 8); x97 = (uint8_t)(x96 & UINT8_C(0xff)); x98 = (x96 >> 8); x99 = (uint8_t)(x98 & UINT8_C(0xff)); x100 = (x98 >> 8); x101 = (uint8_t)(x100 & UINT8_C(0xff)); x102 = (x100 >> 8); x103 = (uint8_t)(x102 & UINT8_C(0xff)); x104 = (x102 >> 8); x105 = (uint8_t)(x104 & UINT8_C(0xff)); x106 = (uint8_t)(x104 >> 8); x107 = (uint8_t)(x1 & UINT8_C(0xff)); x108 = (x1 >> 8); x109 = (uint8_t)(x108 & UINT8_C(0xff)); x110 = (x108 >> 8); x111 = (uint8_t)(x110 & UINT8_C(0xff)); x112 = (x110 >> 8); x113 = (uint8_t)(x112 & UINT8_C(0xff)); x114 = (x112 >> 8); x115 = (uint8_t)(x114 & UINT8_C(0xff)); x116 = (x114 >> 8); x117 = (uint8_t)(x116 & UINT8_C(0xff)); x118 = (x116 >> 8); x119 = (uint8_t)(x118 & UINT8_C(0xff)); x120 = (uint8_t)(x118 >> 8); out1[0] = x9; out1[1] = x11; out1[2] = x13; out1[3] = x15; out1[4] = x17; out1[5] = x19; out1[6] = x21; out1[7] = x22; out1[8] = x23; out1[9] = x25; out1[10] = x27; out1[11] = x29; out1[12] = x31; out1[13] = x33; out1[14] = x35; out1[15] = x36; out1[16] = x37; out1[17] = x39; out1[18] = x41; out1[19] = x43; out1[20] = x45; out1[21] = x47; out1[22] = x49; out1[23] = x50; out1[24] = x51; out1[25] = x53; out1[26] = x55; out1[27] = x57; out1[28] = x59; out1[29] = x61; out1[30] = x63; out1[31] = x64; out1[32] = x65; out1[33] = x67; out1[34] = x69; out1[35] = x71; out1[36] = x73; out1[37] = x75; out1[38] = x77; out1[39] = x78; out1[40] = x79; out1[41] = x81; out1[42] = x83; out1[43] = x85; out1[44] = x87; out1[45] = x89; out1[46] = x91; out1[47] = x92; out1[48] = x93; out1[49] = x95; out1[50] = x97; out1[51] = x99; out1[52] = x101; out1[53] = x103; out1[54] = x105; out1[55] = x106; out1[56] = x107; out1[57] = x109; out1[58] = x111; out1[59] = x113; out1[60] = x115; out1[61] = x117; out1[62] = x119; out1[63] = x120; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. * Preconditions: * 0 ≤ bytes_eval arg1 < m * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes( uint64_t out1[8], const uint8_t arg1[64]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint8_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint8_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint8_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint8_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint8_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint8_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint8_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint8_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint64_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; uint64_t x110; uint64_t x111; uint64_t x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; uint64_t x119; uint64_t x120; x1 = ((uint64_t)(arg1[63]) << 56); x2 = ((uint64_t)(arg1[62]) << 48); x3 = ((uint64_t)(arg1[61]) << 40); x4 = ((uint64_t)(arg1[60]) << 32); x5 = ((uint64_t)(arg1[59]) << 24); x6 = ((uint64_t)(arg1[58]) << 16); x7 = ((uint64_t)(arg1[57]) << 8); x8 = (arg1[56]); x9 = ((uint64_t)(arg1[55]) << 56); x10 = ((uint64_t)(arg1[54]) << 48); x11 = ((uint64_t)(arg1[53]) << 40); x12 = ((uint64_t)(arg1[52]) << 32); x13 = ((uint64_t)(arg1[51]) << 24); x14 = ((uint64_t)(arg1[50]) << 16); x15 = ((uint64_t)(arg1[49]) << 8); x16 = (arg1[48]); x17 = ((uint64_t)(arg1[47]) << 56); x18 = ((uint64_t)(arg1[46]) << 48); x19 = ((uint64_t)(arg1[45]) << 40); x20 = ((uint64_t)(arg1[44]) << 32); x21 = ((uint64_t)(arg1[43]) << 24); x22 = ((uint64_t)(arg1[42]) << 16); x23 = ((uint64_t)(arg1[41]) << 8); x24 = (arg1[40]); x25 = ((uint64_t)(arg1[39]) << 56); x26 = ((uint64_t)(arg1[38]) << 48); x27 = ((uint64_t)(arg1[37]) << 40); x28 = ((uint64_t)(arg1[36]) << 32); x29 = ((uint64_t)(arg1[35]) << 24); x30 = ((uint64_t)(arg1[34]) << 16); x31 = ((uint64_t)(arg1[33]) << 8); x32 = (arg1[32]); x33 = ((uint64_t)(arg1[31]) << 56); x34 = ((uint64_t)(arg1[30]) << 48); x35 = ((uint64_t)(arg1[29]) << 40); x36 = ((uint64_t)(arg1[28]) << 32); x37 = ((uint64_t)(arg1[27]) << 24); x38 = ((uint64_t)(arg1[26]) << 16); x39 = ((uint64_t)(arg1[25]) << 8); x40 = (arg1[24]); x41 = ((uint64_t)(arg1[23]) << 56); x42 = ((uint64_t)(arg1[22]) << 48); x43 = ((uint64_t)(arg1[21]) << 40); x44 = ((uint64_t)(arg1[20]) << 32); x45 = ((uint64_t)(arg1[19]) << 24); x46 = ((uint64_t)(arg1[18]) << 16); x47 = ((uint64_t)(arg1[17]) << 8); x48 = (arg1[16]); x49 = ((uint64_t)(arg1[15]) << 56); x50 = ((uint64_t)(arg1[14]) << 48); x51 = ((uint64_t)(arg1[13]) << 40); x52 = ((uint64_t)(arg1[12]) << 32); x53 = ((uint64_t)(arg1[11]) << 24); x54 = ((uint64_t)(arg1[10]) << 16); x55 = ((uint64_t)(arg1[9]) << 8); x56 = (arg1[8]); x57 = ((uint64_t)(arg1[7]) << 56); x58 = ((uint64_t)(arg1[6]) << 48); x59 = ((uint64_t)(arg1[5]) << 40); x60 = ((uint64_t)(arg1[4]) << 32); x61 = ((uint64_t)(arg1[3]) << 24); x62 = ((uint64_t)(arg1[2]) << 16); x63 = ((uint64_t)(arg1[1]) << 8); x64 = (arg1[0]); x65 = (x63 + (uint64_t)x64); x66 = (x62 + x65); x67 = (x61 + x66); x68 = (x60 + x67); x69 = (x59 + x68); x70 = (x58 + x69); x71 = (x57 + x70); x72 = (x55 + (uint64_t)x56); x73 = (x54 + x72); x74 = (x53 + x73); x75 = (x52 + x74); x76 = (x51 + x75); x77 = (x50 + x76); x78 = (x49 + x77); x79 = (x47 + (uint64_t)x48); x80 = (x46 + x79); x81 = (x45 + x80); x82 = (x44 + x81); x83 = (x43 + x82); x84 = (x42 + x83); x85 = (x41 + x84); x86 = (x39 + (uint64_t)x40); x87 = (x38 + x86); x88 = (x37 + x87); x89 = (x36 + x88); x90 = (x35 + x89); x91 = (x34 + x90); x92 = (x33 + x91); x93 = (x31 + (uint64_t)x32); x94 = (x30 + x93); x95 = (x29 + x94); x96 = (x28 + x95); x97 = (x27 + x96); x98 = (x26 + x97); x99 = (x25 + x98); x100 = (x23 + (uint64_t)x24); x101 = (x22 + x100); x102 = (x21 + x101); x103 = (x20 + x102); x104 = (x19 + x103); x105 = (x18 + x104); x106 = (x17 + x105); x107 = (x15 + (uint64_t)x16); x108 = (x14 + x107); x109 = (x13 + x108); x110 = (x12 + x109); x111 = (x11 + x110); x112 = (x10 + x111); x113 = (x9 + x112); x114 = (x7 + (uint64_t)x8); x115 = (x6 + x114); x116 = (x5 + x115); x117 = (x4 + x116); x118 = (x3 + x117); x119 = (x2 + x118); x120 = (x1 + x119); out1[0] = x71; out1[1] = x78; out1[2] = x85; out1[3] = x92; out1[4] = x99; out1[5] = x106; out1[6] = x113; out1[7] = x120; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_tc26_gost_3410_2012_512_paramSetB/fe_inv.op3 * sliding window w=5 */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t13, t3; fiat_id_tc26_gost_3410_2012_512_paramSetB_square(acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t3, t1, acc); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t13, t3, acc); for (i = 0; i < 4; i++) fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t13, t13, acc); fiat_id_tc26_gost_3410_2012_512_paramSetB_square(acc, t1); for (i = 0; i < 505; i++) fiat_id_tc26_gost_3410_2012_512_paramSetB_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(acc, acc, t3); for (i = 0; i < 5; i++) fiat_id_tc26_gost_3410_2012_512_paramSetB_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(output, acc, t13); } /* curve coefficient constants */ static const limb_t const_one[8] = { UINT64_C(0xFFFFFFFFFFFFFF91), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0x7FFFFFFFFFFFFFFF)}; static const limb_t const_b[8] = { UINT64_C(0xDBE748C318A75DD6), UINT64_C(0xC954A7809097BFC1), UINT64_C(0x6553CD27E2D5A471), UINT64_C(0xB99B326049435CF3), UINT64_C(0xE9EAC8A216D2C5E7), UINT64_C(0x260B45A102D0CC51), UINT64_C(0x8636181D6C5BD56D), UINT64_C(0x638259A12C5765BC)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[14][16] = { { {{UINT64_C(0xFFFFFFFFFFFFFEB3), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0xFFFFFFFFFFFFFFFF), UINT64_C(0x7FFFFFFFFFFFFFFF)}, {UINT64_C(0x9F34E17E2383127B), UINT64_C(0x4C79D571CF48CEEA), UINT64_C(0xA33463BC494E1BED), UINT64_C(0x9D80747F3A5DA27F), UINT64_C(0xDCBD09DDC2F4174A), UINT64_C(0xE8307A8C2147B2E0), UINT64_C(0xD1D3CCEDDBCF9AC9), UINT64_C(0x778FFEC2E98DEFF1)}}, {{UINT64_C(0xCE514E6BB67DA584), UINT64_C(0xEB51443BE19C2094), UINT64_C(0xC8E8F54B9B071A6E), UINT64_C(0x239C53FDBED2A243), UINT64_C(0x67D47B7B2AE8E157), UINT64_C(0x046DE3B75550826E), UINT64_C(0x2F7DD21E17723575), UINT64_C(0x0E6EABDD11E8E247)}, {UINT64_C(0xF204F0D648600734), UINT64_C(0x04B3054C343D6475), UINT64_C(0x707BD9D8F7E6D181), UINT64_C(0x535CEC326B353E20), UINT64_C(0xA185FA95108C5FE7), UINT64_C(0x7033EBFAB573367F), UINT64_C(0xEC54E36B46552D77), UINT64_C(0x235E6C1A729C9EBA)}}, {{UINT64_C(0xECDCEE638B28C0DC), UINT64_C(0xD4E35B4036AE99A1), UINT64_C(0xDACC813D464A3D2F), UINT64_C(0x8D92802ADBAF282E), UINT64_C(0x652CFF9C7D8757F2), UINT64_C(0x2C1BCBD97F5A8471), UINT64_C(0x010192E216C3679A), UINT64_C(0x562694967529DB85)}, {UINT64_C(0x7480BB90D5F89B94), UINT64_C(0xE01FE3D81E46EDE6), UINT64_C(0xC18431634E57E6F5), UINT64_C(0x5F8C688491C2DF63), UINT64_C(0x42E01ED65FA2DC4D), UINT64_C(0x629C95CD8FF5A769), UINT64_C(0x0E8C16376EAB4807), UINT64_C(0x1C41FB660ABD9BB6)}}, {{UINT64_C(0x6B509B4F6ED32E5F), UINT64_C(0xC62AFB2567C95F17), UINT64_C(0x352D4B7A5CE4762A), UINT64_C(0x331358159AFA6ACC), UINT64_C(0x168B565406D550B2), UINT64_C(0x254DCCE0B528DF40), UINT64_C(0x422ADB9A222C9415), UINT64_C(0x6FC0F2CE3D2F923E)}, {UINT64_C(0x3CC0872359359CE7), UINT64_C(0x1779C0CD91A4DC50), UINT64_C(0x1205971EC8B9922D), UINT64_C(0x199F8198C13192A7), UINT64_C(0xA43FBDBF492DB7AA), UINT64_C(0x9E173427E82BEEC8), UINT64_C(0x1E9014993850D54E), UINT64_C(0x603774B7F761EC57)}}, {{UINT64_C(0x23B79C802BDEF3A9), UINT64_C(0x2217119AD19A5F2C), UINT64_C(0x49194CE156B09A50), UINT64_C(0xEE7D88A221329201), UINT64_C(0x1C45A959D0BBED28), UINT64_C(0x1BA5DAD5780FA0D1), UINT64_C(0x17D7C7946959608D), UINT64_C(0x7DA394237E4E9B1F)}, {UINT64_C(0x435F5C5547508CA7), UINT64_C(0x84583489516AD549), UINT64_C(0x09DDC49D02BAE814), UINT64_C(0xCD566B6E260B4D97), UINT64_C(0x8C11211EE38DF931), UINT64_C(0x7D5FC8D005D473F8), UINT64_C(0x48C9D7CD865C76F2), UINT64_C(0x2D4517372A6D5599)}}, {{UINT64_C(0x5F8B137B29C4EACD), UINT64_C(0x5CB8477C99075883), UINT64_C(0xBC6736A750A641C4), UINT64_C(0xF96B6D0E81B0881D), UINT64_C(0x8E9C2612E561FC8F), UINT64_C(0x8F742744284E20B7), UINT64_C(0xBC8C5BE7D4DD11EE), UINT64_C(0x414709E782B2EF56)}, {UINT64_C(0xE4D6BC0A6DF555F2), UINT64_C(0x916E0A8038EE529F), UINT64_C(0xBBE312733414117E), UINT64_C(0x2D7BF9CD3154234A), UINT64_C(0x79B9CFA91852E8EE), UINT64_C(0x62653E8C1BD9C07A), UINT64_C(0x35FE04F67C7AFF7E), UINT64_C(0x746C1E87E70AE283)}}, {{UINT64_C(0x1F5857A198366BA5), UINT64_C(0x96781D84414DECAD), UINT64_C(0xB39DD88866CF983E), UINT64_C(0xDE1050ACCAC19B5F), UINT64_C(0x5A58BFA88B2AA408), UINT64_C(0xA0A6E9613C440DED), UINT64_C(0xBAAEC3DFC67D0412), UINT64_C(0x0E37C0E06759674E)}, {UINT64_C(0x1E623E7563880D22), UINT64_C(0x3BE27CF8F0ACB4B6), UINT64_C(0x5E6ABD4F4F69642E), UINT64_C(0x3E92D34D13CADA08), UINT64_C(0x56C644290127C48B), UINT64_C(0x620FC35B7F3C5746), UINT64_C(0x6870F3DEEF94C612), UINT64_C(0x219C5A5A2606F4A4)}}, {{UINT64_C(0x0AD4ACAA1625FE00), UINT64_C(0xD7DEE6BB9BEE03FF), UINT64_C(0x72A27D3B2E594A2C), UINT64_C(0x471EFD78AAB1C0E5), UINT64_C(0xBDE8465E37857650), UINT64_C(0x1CA721C2BD9F5885), UINT64_C(0x361E6F8A6073DCEF), UINT64_C(0x2BA435E30A7CF8E9)}, {UINT64_C(0xC7B032BD1C6893FA), UINT64_C(0xFA9C30E809D4E403), UINT64_C(0xB03AF5BD20293A47), UINT64_C(0x21EBC61BE008F02D), UINT64_C(0x0A50151D73D59E63), UINT64_C(0x18D1A3F678D260DB), UINT64_C(0xE8E3C3F47D79BA96), UINT64_C(0x51FAED3775A06F31)}}, {{UINT64_C(0xECD4B979E8BCBC8B), UINT64_C(0x7529023CF803878F), UINT64_C(0xAD84E1849A8B8850), UINT64_C(0xF1E004F8CCF88146), UINT64_C(0x27406240C194F3F5), UINT64_C(0x175AB72FE366D6B0), UINT64_C(0x1A44BC8513BBCC48), UINT64_C(0x7930F86912F138C6)}, {UINT64_C(0x1943A86518E4DCD0), UINT64_C(0x747F6C7CBCE9F068), UINT64_C(0x5A306F6454D067F7), UINT64_C(0xD1A8EF54EDB2062A), UINT64_C(0x60E6ACAEA42F21B3), UINT64_C(0x9218654F3B2D2C26), UINT64_C(0xEDE14471E8B2778E), UINT64_C(0x7B868D318CEE6931)}}, {{UINT64_C(0x0957A4F6B368FF42), UINT64_C(0xF9F134FD004C85FC), UINT64_C(0x3A6B8A4719017E1D), UINT64_C(0x673A45EA7D50A61E), UINT64_C(0x4A26DA494E18EE86), UINT64_C(0xAF7DD8FDDF0C17A6), UINT64_C(0xD24BF75A7E7277C3), UINT64_C(0x5EF832A1BF72613C)}, {UINT64_C(0x2E9C8E083300EE10), UINT64_C(0xCCA04C068763AB4E), UINT64_C(0x5F8DBC28A6B7D854), UINT64_C(0xC6CD3DE84025C222), UINT64_C(0xEFD30CC10DFE44A5), UINT64_C(0xC2CD44421D7BE70F), UINT64_C(0x06F8D46B45CCED5D), UINT64_C(0x2D74D0D62EF0C653)}}, {{UINT64_C(0x151B24DFB26E78B9), UINT64_C(0xC57E81560BB1ED51), UINT64_C(0x57BAADA59C13974B), UINT64_C(0x98336FB820CC5AF3), UINT64_C(0x1DA5BD290C790E28), UINT64_C(0x877AA9358C6E2539), UINT64_C(0x1673F15109AEE9D2), UINT64_C(0x519FB4EE0AEE66D8)}, {UINT64_C(0x2B798F206AA8D898), UINT64_C(0xC3DFB5ECBA86008C), UINT64_C(0xF780333B343A8CBF), UINT64_C(0xFF22F62AB6D2056E), UINT64_C(0x97F3006E182EF2A6), UINT64_C(0x3C5ADB493064AC5E), UINT64_C(0x89C8C032C9D64C70), UINT64_C(0x1A9ABDED243DB254)}}, {{UINT64_C(0xA84B636211A375BF), UINT64_C(0x598270A6620A2252), UINT64_C(0xB183EC9D13A0EFF8), UINT64_C(0x2F7BEBD4B755AD35), UINT64_C(0xEBA848EDC53EFD69), UINT64_C(0x12059A246FAEC1B6), UINT64_C(0xBA6340A47A290D7B), UINT64_C(0x2284943263DF6036)}, {UINT64_C(0x4702BCB62AA27F19), UINT64_C(0x8DDE49209B6D66D6), UINT64_C(0xC3D4A80BBDC2DC5D), UINT64_C(0xE51AC2D6691A8BD4), UINT64_C(0x794853518F4211FC), UINT64_C(0x163CD093A9D14C71), UINT64_C(0x4B38A2B189A0E099), UINT64_C(0x166732459E98054E)}}, {{UINT64_C(0xFB44107131FBB6B8), UINT64_C(0x79A8775C42AD947A), UINT64_C(0xA8C9E486E72D0384), UINT64_C(0x9AF7F292840A1DDB), UINT64_C(0x07E9DB522DB1B47D), UINT64_C(0x0698669ABA81EBAD), UINT64_C(0xA48E2F032DC06B76), UINT64_C(0x1B06024879B9161A)}, {UINT64_C(0xD47BADE113C53A83), UINT64_C(0x9C1F4DD068727195), UINT64_C(0x14A2FC601293376B), UINT64_C(0x8A63967EDC206930), UINT64_C(0x5D9DFE3898E46F8B), UINT64_C(0x9199E19385CF7B41), UINT64_C(0x3E8DF54D113D1605), UINT64_C(0x14D3C202303789E1)}}, {{UINT64_C(0x11A727D4626710EB), UINT64_C(0x38481EC13EB613F1), UINT64_C(0xB824F8315625E925), UINT64_C(0x3FEFE4F7D03D016B), UINT64_C(0xCE196037BF1FE74C), UINT64_C(0xE5518F38E956E95F), UINT64_C(0x84E24D4523E1AE46), UINT64_C(0x29D1DB5A3E0F63A1)}, {UINT64_C(0x380BF7874FAE4F08), UINT64_C(0xB4E5D477ED8B6A7C), UINT64_C(0xABA43C3ADC035A0D), UINT64_C(0x7B88050825134A5C), UINT64_C(0x2DB4554865D5A8CF), UINT64_C(0x776B78B67EDE5F4D), UINT64_C(0x4CB5848179297E21), UINT64_C(0x1E1911058BE6DBD4)}}, {{UINT64_C(0x4D1054373E98C38E), UINT64_C(0xAE4B330CB2E8BE84), UINT64_C(0xB1A22A3DE16CA9CD), UINT64_C(0xE78B43CB1DAF0B8D), UINT64_C(0x509D9C345CB2B278), UINT64_C(0x9A1342B329F9FFFD), UINT64_C(0x8159F45273A20A3F), UINT64_C(0x35043A47CA064DAD)}, {UINT64_C(0xE000710E040E7978), UINT64_C(0x2A1DA585FAF394BB), UINT64_C(0xF9423EE651524252), UINT64_C(0xD95CE5EF181ACF8B), UINT64_C(0x0097A9B5613B5947), UINT64_C(0x6F088D14AB442CD0), UINT64_C(0x4E225BACCAE96A8E), UINT64_C(0x753B77B9EE82591B)}}, {{UINT64_C(0x41D5FEEC43969A20), UINT64_C(0xC7E1DFA25B57402C), UINT64_C(0xC43BFFDD9C098C51), UINT64_C(0xAC5E73942954A8F5), UINT64_C(0xD420A646B2E1308E), UINT64_C(0x13476158D7CAE952), UINT64_C(0x6A48FA12E7B188C1), UINT64_C(0x1CF2DE71EC53C308)}, {UINT64_C(0xAA44CF54653FB0FE), UINT64_C(0x4E05A63D450317F4), UINT64_C(0x8B59BAA6E3AA21DA), UINT64_C(0xFA3A1CDA11F7840D), UINT64_C(0x220F39B639DB678D), UINT64_C(0x6D497E96759CDCA0), UINT64_C(0x0ADF3F2969FA5114), UINT64_C(0x7836181D15349213)}}, }, { {{UINT64_C(0x1F11E63C5D6F9B3E), UINT64_C(0x4569A6DAA403A073), UINT64_C(0x1B585729FE26A8BD), UINT64_C(0x2185B4E45F41FAA7), UINT64_C(0x3887350C6E99E6E1), UINT64_C(0x92F63CA599CFFB22), UINT64_C(0x94E93270A52F6381), UINT64_C(0x489EE2DFD0A380FC)}, {UINT64_C(0x45F7836AB988D87D), UINT64_C(0xA44DCA0C337BEFA3), UINT64_C(0x6F42243655657370), UINT64_C(0xE5299B33C16D6547), UINT64_C(0x74A82B2F1E5AAB47), UINT64_C(0x795A79B9CFA92CDB), UINT64_C(0x2EE0F1BE4981A557), UINT64_C(0x3F7A2AC5F5637DEF)}}, {{UINT64_C(0x78CF079D3A0FEA31), UINT64_C(0xF5A54C8C6F9069B7), UINT64_C(0x24C79868D8C02F14), UINT64_C(0x43DDB340F36B384F), UINT64_C(0x8AF55E5EAD874F73), UINT64_C(0x29E81ACA5856DB97), UINT64_C(0xB23D0E00702DF822), UINT64_C(0x58EF4F993D029F4B)}, {UINT64_C(0x0B28FA62F26CA389), UINT64_C(0xD3288224ECFF83DF), UINT64_C(0x5D8F23193FD82EB2), UINT64_C(0x68E3D3C53D1CB29F), UINT64_C(0x8DF1A753EC26BE41), UINT64_C(0xB2074622C2C7412F), UINT64_C(0x3A8D35048D5018F7), UINT64_C(0x0B0D2D49FD309F9B)}}, {{UINT64_C(0xE997DD069319D09A), UINT64_C(0xF8A2189FDA1726DB), UINT64_C(0x3AD35868266E7222), UINT64_C(0x0116610C0F42E1A2), UINT64_C(0xF23385ACE93CC223), UINT64_C(0xE06DE4F68D221503), UINT64_C(0x0C963EF8A36EE6D9), UINT64_C(0x13B707C8C297BB1A)}, {UINT64_C(0x1067542415B7BEF0), UINT64_C(0x9C064518AB4ECC7E), UINT64_C(0x324CDF0C83247132), UINT64_C(0xA9A416204CE15206), UINT64_C(0x0641C526F0EC82B3), UINT64_C(0xD952D947F165B832), UINT64_C(0xF6E4EF5B56C3BC3C), UINT64_C(0x528479A6EF1F3728)}}, {{UINT64_C(0xF84BE5DCA64A2C9B), UINT64_C(0xC20AD405B92B2A9D), UINT64_C(0xC965A45A829BA060), UINT64_C(0x5041E47FD9F58ABF), UINT64_C(0x360FB8E29E6AEB4E), UINT64_C(0xDC3B93DEB995DDB3), UINT64_C(0x7FB0501FFA2C89E5), UINT64_C(0x1883F0179C9B058F)}, {UINT64_C(0x9FC09649ABF2EABC), UINT64_C(0x051F9AA2D2ADFBBE), UINT64_C(0x000B4689F2471B9C), UINT64_C(0x2C21C96A23DB9E67), UINT64_C(0x840F2A03D9D7C226), UINT64_C(0xE728B0702E660925), UINT64_C(0x1ED21D55A8258042), UINT64_C(0x20DE972E8DA89F47)}}, {{UINT64_C(0x3003BD09D3DE31B6), UINT64_C(0x6883729E83781375), UINT64_C(0x882F56AEA7E281ED), UINT64_C(0x936861D399873D07), UINT64_C(0x68DB9DF0E329D05A), UINT64_C(0xEFD44FB8B6ED5B00), UINT64_C(0x095DF018DE7AFD7D), UINT64_C(0x11DD7E7431FEE4D2)}, {UINT64_C(0x59256A82052E3502), UINT64_C(0xB12A68CD967C4F10), UINT64_C(0xF56E1410F921E058), UINT64_C(0xF7E2CED1D9721852), UINT64_C(0xE62F6371DE8CBE99), UINT64_C(0x51BB6086BDCF5383), UINT64_C(0xDE865C7F05F1C9EF), UINT64_C(0x2F4D471E59C9DB82)}}, {{UINT64_C(0x5238E20B60A83A69), UINT64_C(0xE8ED22D8241F9EE4), UINT64_C(0x94609C9FC44B4D6B), UINT64_C(0x8CB4F484738B047F), UINT64_C(0x1DA037763A311894), UINT64_C(0x3B2301D7FFEDBEDE), UINT64_C(0xBE0D9731C28BFA7B), UINT64_C(0x03E672B78E73852C)}, {UINT64_C(0xA1A4A97DAA676638), UINT64_C(0x1CC2C685473A0CAB), UINT64_C(0x31FE11382E95739F), UINT64_C(0x090AEB0D090C8025), UINT64_C(0x9F0A7073645B652E), UINT64_C(0xC03ABF85E83798BD), UINT64_C(0x71FBC2D748F4C4C3), UINT64_C(0x56AE0E1E0D38C5BA)}}, {{UINT64_C(0xDAFDB67CF2C2C6C1), UINT64_C(0xFD6B132ECF3D93C2), UINT64_C(0xA6FD14BDAE365613), UINT64_C(0x0B5A2A4A2B04AD13), UINT64_C(0x2AA0470A36B30288), UINT64_C(0xBC9849382A2BB583), UINT64_C(0xC05200992DE94268), UINT64_C(0x2CD5FBBB49E1A2C3)}, {UINT64_C(0x082C8F94AAD935D9), UINT64_C(0x20AECE5C51A9454D), UINT64_C(0x5BE24C7E19E2401F), UINT64_C(0x7BECBAF1A327A3BB), UINT64_C(0x39E76F20B6300E64), UINT64_C(0x5D151BA79CBC4DCE), UINT64_C(0x07726284B5D04C2A), UINT64_C(0x4D8BD241B721A54D)}}, {{UINT64_C(0xD28B4A8E9BB85232), UINT64_C(0x4F965F03CAD53584), UINT64_C(0xDAE3617BDD1B0F12), UINT64_C(0xDB8660B36777B034), UINT64_C(0xC67184DD5F952B6A), UINT64_C(0x0ADCC669CE065AD2), UINT64_C(0x1FC9CB4677CE4665), UINT64_C(0x0A01B64D2234474A)}, {UINT64_C(0x0A749E821D915F94), UINT64_C(0xF0D212C9425F6ECA), UINT64_C(0x0C23D0141281CD10), UINT64_C(0x0C933FD429DB5FC8), UINT64_C(0x80DDA2EFBA5D8406), UINT64_C(0x8C1402D5338183C4), UINT64_C(0x6E06C3E2D4B5A7F9), UINT64_C(0x64E3E1AB8506CA5C)}}, {{UINT64_C(0xAC11D879C94EA8D3), UINT64_C(0xDD8B6BA31F28B33F), UINT64_C(0x647E69ADAEEAD88D), UINT64_C(0xB49B31E13933567E), UINT64_C(0xBB12FE39EE7A3136), UINT64_C(0x28FF74A3C80837A7), UINT64_C(0x0A932C81B75677A8), UINT64_C(0x53D93D35C29F7F54)}, {UINT64_C(0x284971943AC6D6AE), UINT64_C(0x220B50C702D7F721), UINT64_C(0xDA33488CC1FC3346), UINT64_C(0xDD86F1ECF9ED4655), UINT64_C(0xAC1853B2632DB517), UINT64_C(0x3736EA466F0C3545), UINT64_C(0x3D92A7782D45B919), UINT64_C(0x5D9F56743D09DB84)}}, {{UINT64_C(0x00D301679AF99589), UINT64_C(0x0B5213F3C5B73D12), UINT64_C(0x8A5A80AD39E67DBF), UINT64_C(0xE2C58969F837F8F4), UINT64_C(0x9DDF8923D4EE1D6C), UINT64_C(0x1AE3E0AF33DF50BB), UINT64_C(0x7FBAA73B4E518813), UINT64_C(0x1CE6C9B65F7BB71D)}, {UINT64_C(0xB12B057D66EB4A4E), UINT64_C(0x1C88E248382599E5), UINT64_C(0x5384C3E84E5081A6), UINT64_C(0xB7992A1C9E4ABC53), UINT64_C(0xC0582520044BF086), UINT64_C(0xE14418EBA7DB6B58), UINT64_C(0x312673ADC31464E1), UINT64_C(0x27DEAEFF5FEAD6E3)}}, {{UINT64_C(0x55C37C50ADE2EA17), UINT64_C(0x1E1596544F0C5622), UINT64_C(0x6C96793CF2BD8529), UINT64_C(0x2B5624195AF8E077), UINT64_C(0x47F6A01952A39000), UINT64_C(0xC364F4D4163EFA85), UINT64_C(0xD3116C3358BE9780), UINT64_C(0x4DBED7419F098FF2)}, {UINT64_C(0xB0DD4831486D49D8), UINT64_C(0x84A0C54975913B1C), UINT64_C(0xB4A793263E2FA892), UINT64_C(0x9E24FB33F8E1FCD2), UINT64_C(0xE9E35346BB163DE8), UINT64_C(0x04B20FA159EA0DF0), UINT64_C(0xB4D02BC4B8742A03), UINT64_C(0x081FA0376C2841D9)}}, {{UINT64_C(0x514F4ACBFBA142D2), UINT64_C(0x996B6E0394E5F474), UINT64_C(0x5223E730CE24CA53), UINT64_C(0x527581EA4F5B06A0), UINT64_C(0x31E6DD1A6A33B429), UINT64_C(0x93A4E1C1F6375ACD), UINT64_C(0x6C726FF3949ED4F7), UINT64_C(0x4E416E72F8F882F8)}, {UINT64_C(0x26FEC8642FD16999), UINT64_C(0x41DF4A57ABA0E3A7), UINT64_C(0x15E54D3FB4FAF8AC), UINT64_C(0xE4318BDC6F3F282A), UINT64_C(0x07C320CDF014698B), UINT64_C(0x71B738303468CBCE), UINT64_C(0x1FD1AF59D640CFD9), UINT64_C(0x0CF151AED34059EF)}}, {{UINT64_C(0xB7107CE7A2B3DF22), UINT64_C(0xC1A4E08B90B45D70), UINT64_C(0xC86AFB665E20257F), UINT64_C(0xDD33CC9611CE1970), UINT64_C(0x44C20C485F20F903), UINT64_C(0x87FECE7F936A4522), UINT64_C(0x867932E942105DEA), UINT64_C(0x31AEE1F547E2F4AB)}, {UINT64_C(0x4CE020DF55B1D8A3), UINT64_C(0x5841BB8C9B33E4D6), UINT64_C(0x99C6EF8407E5C052), UINT64_C(0x0F6F0DEFBB139F7B), UINT64_C(0x5E608798366377C5), UINT64_C(0xDE403CF3101AFF93), UINT64_C(0x164B26D14B69DBFC), UINT64_C(0x190A876646229B9E)}}, {{UINT64_C(0xAC7B1FA185A61975), UINT64_C(0x975ACE540A3C0E98), UINT64_C(0xB80D922D173A29D7), UINT64_C(0x71AA4F0C955E0187), UINT64_C(0xDB3716B93556BA4D), UINT64_C(0x81E375E0248C6ECE), UINT64_C(0x4CCE97876AFD16A4), UINT64_C(0x67A717E803564374)}, {UINT64_C(0xE0FD3F7DE94E08C5), UINT64_C(0xDA2A587271CA98AD), UINT64_C(0x34A8EAD7BA15DEF3), UINT64_C(0xD83A9987C8EE8AC0), UINT64_C(0x64167A82D9CE22C6), UINT64_C(0x7EE988EDE859A064), UINT64_C(0xD8B9D231603E188F), UINT64_C(0x40C992660248F567)}}, {{UINT64_C(0x4059BE67387928A0), UINT64_C(0x5063C31E1412407D), UINT64_C(0x78ABE79BC37FB4AD), UINT64_C(0xA9A4E76A0DF5F4D6), UINT64_C(0x1F4CCCFCF0C3C9C8), UINT64_C(0x44A6D446BB2D774F), UINT64_C(0x1B77494E4991F3D4), UINT64_C(0x41F3A74CC5908739)}, {UINT64_C(0xB371AB6CC6B26A88), UINT64_C(0x01E7AD15454963FE), UINT64_C(0x12A6652C43898DC2), UINT64_C(0xC9CFD8BA1EE1BBD9), UINT64_C(0x22037206C5437711), UINT64_C(0x327F948D062E81FD), UINT64_C(0xA2FF4F469C87B698), UINT64_C(0x1E83A7F94EB0808E)}}, {{UINT64_C(0xE2F16272B80F91DF), UINT64_C(0xA0265684B186EBD1), UINT64_C(0x207DAD692E7D6A85), UINT64_C(0xEFABE500F27F03D4), UINT64_C(0xEDD0F81D0244072F), UINT64_C(0x4CA26C63944AEDEA), UINT64_C(0xD8D01D46E874F15F), UINT64_C(0x73E39EED5A1130AE)}, {UINT64_C(0xED9953FA0E5EC45F), UINT64_C(0x0F62DDD4B4D672DA), UINT64_C(0x5115FE6F89507053), UINT64_C(0x58968A298354B66C), UINT64_C(0xB37024D572ADF8E8), UINT64_C(0xD7EC1D4A4D98186B), UINT64_C(0xB5B41AD67F418AC8), UINT64_C(0x2C0959C568B72616)}}, }, { {{UINT64_C(0x1DD33DD599EF1F4E), UINT64_C(0x2F2951AF3CB93CF3), UINT64_C(0x7BB75D5798F20535), UINT64_C(0x64C36788BF95DDDE), UINT64_C(0x74B787C95E211976), UINT64_C(0xB464F818BE8D9E4F), UINT64_C(0x2631F72191BEB188), UINT64_C(0x3581CB615EC2BFD7)}, {UINT64_C(0x56A35D67C41A6EF1), UINT64_C(0x5895E76EF69A3D49), UINT64_C(0x03192D2F8B97FDA2), UINT64_C(0x11240C0BA0A94FA9), UINT64_C(0x4DC27F38BDDB31E7), UINT64_C(0x038AE33D69A0D11A), UINT64_C(0x9F3A13EE857974B5), UINT64_C(0x2ACA765E0222E516)}}, {{UINT64_C(0xFA06EFB5D2421565), UINT64_C(0xC199817D8AB1719F), UINT64_C(0x44325F2F48C3D0C4), UINT64_C(0xDD6C11655A80BBEF), UINT64_C(0x3079192402A61986), UINT64_C(0xEBD53E2A3A7E4B1E), UINT64_C(0xDD3E7657C7AB55DB), UINT64_C(0x43EA2DB27A09B71B)}, {UINT64_C(0x9002748E0A3AE7D5), UINT64_C(0x0590F7C65B23AE62), UINT64_C(0x44EE4FA64A2305B0), UINT64_C(0x914591BDABA335D8), UINT64_C(0x5888289FAB32FC4D), UINT64_C(0xA5FED8476E19B810), UINT64_C(0x255C3F9917DB4A48), UINT64_C(0x0431EEB86F25750A)}}, {{UINT64_C(0xB398FF44D0A38E64), UINT64_C(0x5FBAD7B905E41904), UINT64_C(0xBA57597B357B82CD), UINT64_C(0x18BE4419A929E6BC), UINT64_C(0x3F3F6D35A98B452D), UINT64_C(0x27425C5F58D546DA), UINT64_C(0x61A1BBDAC446022B), UINT64_C(0x3EA60775689D15AF)}, {UINT64_C(0xDD0970423F8C1B93), UINT64_C(0x951AAC5631E09914), UINT64_C(0x99C77D0F647CCFAC), UINT64_C(0xF3CB5C7A6102DEE7), UINT64_C(0x2C1CAACBF9484E59), UINT64_C(0x7EBD7135405766AC), UINT64_C(0x267C325CB0C58371), UINT64_C(0x48FDF94DC2F52776)}}, {{UINT64_C(0xF64427884EE6EE71), UINT64_C(0x49D6F157C09D8FAF), UINT64_C(0x159F7AA23C93BF65), UINT64_C(0x992387CF0B5464C4), UINT64_C(0xFC15173BDEDA026E), UINT64_C(0x90B860E6C989FD74), UINT64_C(0xCC08BC0C2E98CC2D), UINT64_C(0x089D2D48C85BC472)}, {UINT64_C(0x9087C7463953E507), UINT64_C(0x54F480A390F97B85), UINT64_C(0x83D619939F9CC5D0), UINT64_C(0x0C55DE44C1970015), UINT64_C(0xC45D5EA1DF669193), UINT64_C(0x5DEFF1E7FDCF23AB), UINT64_C(0x2B38D4792A211F3D), UINT64_C(0x099279253E31284F)}}, {{UINT64_C(0x30454C23C38EFF1A), UINT64_C(0x706FD470FEC8424E), UINT64_C(0xA216319733467A08), UINT64_C(0x7C8A4D4380E6DB64), UINT64_C(0x505D89BFE9AB850B), UINT64_C(0xC10CFEFF5E8DF0CB), UINT64_C(0x3EB45DF716304B39), UINT64_C(0x3AAE23FE527C325B)}, {UINT64_C(0x65DBB826C153DA5D), UINT64_C(0xB8EC2676FFCCCC80), UINT64_C(0x4538FBAB1C8BA8C2), UINT64_C(0x6FA94E5266FD20CA), UINT64_C(0x480D857EA9B7513F), UINT64_C(0xDB1C611C82814908), UINT64_C(0x0F1F21FF53F81AA5), UINT64_C(0x20696D2DE1A47218)}}, {{UINT64_C(0xF31AA6227AB6E8D8), UINT64_C(0x3D12F32B686BB479), UINT64_C(0xACA48C8A3BF6E8F8), UINT64_C(0x39D4F322FCECFCC0), UINT64_C(0xCBD2E493C8BBCADE), UINT64_C(0x18E2A8E75C695155), UINT64_C(0x4047ED16DF022D32), UINT64_C(0x1040565ECD6CDB7C)}, {UINT64_C(0x1B72EA4764515BD6), UINT64_C(0x0DC58AE89320C9CB), UINT64_C(0xEE53907B5310CDBD), UINT64_C(0x7C2C62A154FE7719), UINT64_C(0xA04150808AE9C75E), UINT64_C(0x2BFC37801E8A0123), UINT64_C(0xBBCB26FECE6823AD), UINT64_C(0x5E4B59A0D61B79A7)}}, {{UINT64_C(0x8C93F97590C0C1CA), UINT64_C(0x0871A9018F518A16), UINT64_C(0x6477E523964CACE1), UINT64_C(0xE52D22C8A77046AC), UINT64_C(0x4FE86722F9911C69), UINT64_C(0x8B03B1960E21642C), UINT64_C(0xDD3523EFEEA31DF9), UINT64_C(0x4D4EDD43D896AE4F)}, {UINT64_C(0xEB5C2968B8CB58A3), UINT64_C(0x5C6C5B639AF9580A), UINT64_C(0x20759CEB3A166247), UINT64_C(0x812FBE1B0F964024), UINT64_C(0xBB295EBA816BFC2C), UINT64_C(0x355256260BC4C607), UINT64_C(0x411799ED7D134609), UINT64_C(0x7ECBDA128615FBAA)}}, {{UINT64_C(0x45EB69B3E7C6C149), UINT64_C(0x9D414F65F40D6D9C), UINT64_C(0x3FC4D2A66AD70201), UINT64_C(0x039F56D22E2EB20A), UINT64_C(0xAE25D395CE4F7AB7), UINT64_C(0xD69AE8511B640F4F), UINT64_C(0x912BA30CCF08596A), UINT64_C(0x7C552E1CFB7DA74A)}, {UINT64_C(0x57F7B3CC298071AC), UINT64_C(0x7B38B1865029FCFB), UINT64_C(0x43D0A21DDBD1AFDA), UINT64_C(0x2165A125CFDCE1D5), UINT64_C(0xC2422D76099E931C), UINT64_C(0x3940B3F9D220528D), UINT64_C(0xA530E1E05892DDF1), UINT64_C(0x5D1060BBC5EDB806)}}, {{UINT64_C(0x03C39CB0DA19A7BF), UINT64_C(0x9227C95735061C5A), UINT64_C(0xB86AE697E6733C8E), UINT64_C(0x4790AB411D91D056), UINT64_C(0x82599E6E91944712), UINT64_C(0xE6EEAB302126986F), UINT64_C(0xF6CF67704C7C86DD), UINT64_C(0x0962C8E081C7F520)}, {UINT64_C(0x7275701A3E672910), UINT64_C(0xCC253D25555D4EAA), UINT64_C(0xC87804A50F307D6F), UINT64_C(0xA6C402695E6E364D), UINT64_C(0x5A4DB5779DE73155), UINT64_C(0x8513BC0545B03B16), UINT64_C(0x7EDB8B9F5CB1A5DF), UINT64_C(0x5686C42AD4905C9B)}}, {{UINT64_C(0x1B9368C4C1288660), UINT64_C(0x5F83CD353BCEFEDB), UINT64_C(0xB4656091C33CD356), UINT64_C(0x2284D9074920232F), UINT64_C(0x87816B0695B4CBCA), UINT64_C(0xA35A7191EF2D4546), UINT64_C(0xF9E71B1D296E871A), UINT64_C(0x72A7B9C35330AF13)}, {UINT64_C(0xAC61BC6F401BE940), UINT64_C(0x0634D9D70DD2350E), UINT64_C(0xE27626F00CE45A7C), UINT64_C(0x9B38569F3493FA74), UINT64_C(0x3F23C7036EC9DC13), UINT64_C(0x8BF8FF129C62D952), UINT64_C(0x5D53A2D258132258), UINT64_C(0x1FC830A533A57773)}}, {{UINT64_C(0xAE58A3B90F294E33), UINT64_C(0xF12E0FC4AEF8F84C), UINT64_C(0x78C5BDDE649D16FF), UINT64_C(0x12645CA18827C75F), UINT64_C(0x1288C5667F97ABED), UINT64_C(0x0CAD8E5DC1E2781E), UINT64_C(0x24B69A1DBC92FF24), UINT64_C(0x7068305D545221B2)}, {UINT64_C(0x7A9A3F7C40F6201C), UINT64_C(0x5B7E5FA25EFACD4C), UINT64_C(0x85FACB2ED6275627), UINT64_C(0xDD0FBA635BBE856B), UINT64_C(0x030826B1B2E456FD), UINT64_C(0x0FF397E85F898479), UINT64_C(0x68ECAA4EBFAE4984), UINT64_C(0x4EB40475CAC01FD8)}}, {{UINT64_C(0x141804F12BC4C766), UINT64_C(0xD84A76DAC8FB07C1), UINT64_C(0x29376B5BC83676A9), UINT64_C(0x3D3A00EB3749490C), UINT64_C(0xA5EB6CF7C5F439B6), UINT64_C(0x16266439EA156432), UINT64_C(0x1CF83E2503161D4B), UINT64_C(0x37603F2295E3E8A3)}, {UINT64_C(0x62EE26ECE920EDDA), UINT64_C(0xCD7734A30FC4DF7D), UINT64_C(0x0EF3E6C9D7FBCA6B), UINT64_C(0xCF2460DA87F1873A), UINT64_C(0x005110721895CF1C), UINT64_C(0xB92A8E934F11854B), UINT64_C(0x985562510C665D9D), UINT64_C(0x3CD64282174A7FF2)}}, {{UINT64_C(0x39243EA7B9F9E43F), UINT64_C(0x973D4582270D2DB1), UINT64_C(0xEB8B50330541FF4C), UINT64_C(0xED5F52A09F309D70), UINT64_C(0xE978FBAE123F45B6), UINT64_C(0x0A79B6930015781D), UINT64_C(0xC5DA0CCF5C9A03FB), UINT64_C(0x1C6E4F58F16D4CE1)}, {UINT64_C(0x09674C2E89CB89DB), UINT64_C(0xB3D147B1C94A4D96), UINT64_C(0x936F3F8827D24C12), UINT64_C(0x44E8C741A8C4BA25), UINT64_C(0x249A28AE920FDDE8), UINT64_C(0x274F2B4E229B2C19), UINT64_C(0x94C203EEFF4EC64D), UINT64_C(0x53284B1F43358F20)}}, {{UINT64_C(0xE3AB8BAADCCFF94D), UINT64_C(0xF038D9A5F97449EE), UINT64_C(0xE4A45DCF5EF19F06), UINT64_C(0xFFF8AD9A17EF6368), UINT64_C(0x0CEB6B85ADDF0B6E), UINT64_C(0x6C7B60B196AC1BA3), UINT64_C(0xED84F897A25F77F8), UINT64_C(0x1EE6167155886360)}, {UINT64_C(0x08B44F387BA18315), UINT64_C(0x8A9FFAE9F3D0E0C4), UINT64_C(0x82807E7DE5886E61), UINT64_C(0xF15402F351E94C78), UINT64_C(0x45969D9F96A8AF2E), UINT64_C(0xA8E0ED89F4956ACC), UINT64_C(0xB5334DECF2D21764), UINT64_C(0x2B274E2F861C26B7)}}, {{UINT64_C(0xC2E3A80299E77118), UINT64_C(0xFFE72B90C6DE1B4D), UINT64_C(0xCCB21D53E29458FB), UINT64_C(0xD233AF10511F0279), UINT64_C(0xC301B7EAB9B907B3), UINT64_C(0x59DB1F45D7B55600), UINT64_C(0x7173318B3A386844), UINT64_C(0x403ABED7D9AB6F85)}, {UINT64_C(0x0CFE2CFC14698FC9), UINT64_C(0x40A4198934CE5939), UINT64_C(0x0F5FA8499ABA363C), UINT64_C(0x99C045AB8CC887D9), UINT64_C(0x1E7563F5E8DF250B), UINT64_C(0x2624A5DCD3B78407), UINT64_C(0x7D80CA6D1954A966), UINT64_C(0x789BD6854C8995C2)}}, {{UINT64_C(0xBA8D937683A05A40), UINT64_C(0xDD238C0E0572668D), UINT64_C(0x5B41446FE0AD7EAA), UINT64_C(0x6D1AD6B463F9C64D), UINT64_C(0xF5FE99AA8830CE1C), UINT64_C(0x5BB1E7DFF2B77D66), UINT64_C(0x7382CA41F7E63961), UINT64_C(0x56D6F922555032C4)}, {UINT64_C(0xF9EAA991AC45C214), UINT64_C(0x2A4B717266146EA4), UINT64_C(0x5667D61FD14553F5), UINT64_C(0x996E8D8B3F7D071A), UINT64_C(0xCB023EA5E2229B97), UINT64_C(0xA446A954398EA3C6), UINT64_C(0x733E3D79AAF9ABF2), UINT64_C(0x2B4FAE8E47503BBD)}}, }, { {{UINT64_C(0x24E9082DEBEFDC12), UINT64_C(0x86997EA924FDCD6E), UINT64_C(0x1512918803145F3F), UINT64_C(0xC829D42CA16A167D), UINT64_C(0x55C0A31CFDFACB6F), UINT64_C(0x1A728DB45B93FB73), UINT64_C(0x7A187912467A55D2), UINT64_C(0x7934C39C1E8843D3)}, {UINT64_C(0x688D9927F35497AA), UINT64_C(0x2176E4E45A745926), UINT64_C(0xA60F1ED74FF0DA29), UINT64_C(0xE1EF2081E66F5F74), UINT64_C(0xCDE36E799EE53EFF), UINT64_C(0xFCD1D1BF855244FF), UINT64_C(0xD55CDB2E464A4040), UINT64_C(0x39BC13F11E64BB0B)}}, {{UINT64_C(0x828B353965D70320), UINT64_C(0x921019C6954FE3CC), UINT64_C(0xC2B142C839DFC1EA), UINT64_C(0x7A619A1CBAD22A43), UINT64_C(0xE08FA3AED827C06E), UINT64_C(0xAC645EFF88BAA42F), UINT64_C(0x514723BA294F3582), UINT64_C(0x6FD17829AA355FD2)}, {UINT64_C(0x6366853C11D05C79), UINT64_C(0xE225500B17D185C9), UINT64_C(0xAEEC2174FA47EADA), UINT64_C(0x9737ECC06666332F), UINT64_C(0xD0638BC9E33AA72A), UINT64_C(0x4889AB0DF6CF4E24), UINT64_C(0x2912E4A0039E3190), UINT64_C(0x411CFB3CC035D955)}}, {{UINT64_C(0xE59D745B0B3BD0D0), UINT64_C(0x62AB04F90653222F), UINT64_C(0xE6421BB743E0EC6C), UINT64_C(0x6F3E477015E65B27), UINT64_C(0x90FB7585D82704E6), UINT64_C(0xCF7FD882E9A129DF), UINT64_C(0xFA8E1B9DD3D0023A), UINT64_C(0x12861B4ADE4307E5)}, {UINT64_C(0x9DC0D3D9B86CF424), UINT64_C(0xCFC0A60FC2DBE006), UINT64_C(0x5933BAA82B9F470A), UINT64_C(0x112F153CCAB8113B), UINT64_C(0x1AEDA34056B279C1), UINT64_C(0x1408A037BE13DFA3), UINT64_C(0x10D90850C06D3674), UINT64_C(0x3DB6999EAF30AE4A)}}, {{UINT64_C(0xAB96F01356348084), UINT64_C(0x403955438C167F42), UINT64_C(0xE1385C9F2280FEB8), UINT64_C(0x3667162576D2C4AA), UINT64_C(0x76E313444D4D667B), UINT64_C(0x906B5973EF0B171D), UINT64_C(0x229BCCFAEBCCA769), UINT64_C(0x36462E608A9A561C)}, {UINT64_C(0xFD5116FD4FE428A6), UINT64_C(0xE92C088AF3846007), UINT64_C(0x8AC5F8BE218A0D1E), UINT64_C(0x59A97369DDF329CE), UINT64_C(0xEA2D262ECAB484D5), UINT64_C(0x6F95E17ABD10F3EC), UINT64_C(0x6FFBEC38E08DDB7E), UINT64_C(0x55E8DE216446BB5D)}}, {{UINT64_C(0xA5D6141A0CB565AE), UINT64_C(0x8786B494F9091FE2), UINT64_C(0x89B1900F1D6C9279), UINT64_C(0x425AD0F5C21934C0), UINT64_C(0xF781FBF6E2201D3E), UINT64_C(0x7210043361E0191D), UINT64_C(0x186A39995B3E5491), UINT64_C(0x6DF058E695E49235)}, {UINT64_C(0x82D37E0234559E42), UINT64_C(0x4AE4A8ACA0E7F1D4), UINT64_C(0x9941A84CB34AAED2), UINT64_C(0x4DA92D325484ECE0), UINT64_C(0x6F1FB58CEB7C740E), UINT64_C(0xEC6FAE864965B6CC), UINT64_C(0x179E84801CEFF73B), UINT64_C(0x58ED2BB372724658)}}, {{UINT64_C(0xD6FA5A23AC30848E), UINT64_C(0xFE58E2D353705571), UINT64_C(0x43368F7247EF14E7), UINT64_C(0x7DDA0F48694E6BB3), UINT64_C(0x0DFA9BF9E9B7CEF9), UINT64_C(0xA3BD4B239803203F), UINT64_C(0x3F0EAF0DAA1B561C), UINT64_C(0x6E8678F311C56C8F)}, {UINT64_C(0x4E574AFBB4272D39), UINT64_C(0xDD9622A926A589E0), UINT64_C(0xCF41D02818E2B544), UINT64_C(0x7FE65A44479B717E), UINT64_C(0x38D34C1FABDE58B1), UINT64_C(0x4A8B1A4920E02EE5), UINT64_C(0x6C2C5AF126D927F1), UINT64_C(0x08E02884CE4D534A)}}, {{UINT64_C(0xF47477733C9034CE), UINT64_C(0x92B208B8A8CDA587), UINT64_C(0xDDB5A865A8A5D6F6), UINT64_C(0xE3C3150E09FFBBCA), UINT64_C(0x120720D671780DEE), UINT64_C(0x6977608D1CB5E7E7), UINT64_C(0x52261203DBE5697A), UINT64_C(0x1C88E9C4184E7B19)}, {UINT64_C(0x6BE6C1909927BFC6), UINT64_C(0xA1452123F431A9E8), UINT64_C(0x62BC5BF4B949ED5C), UINT64_C(0xD57633C02BCF732C), UINT64_C(0xA3723F7C0AE4563A), UINT64_C(0x5449AFCE031958EA), UINT64_C(0xE3BF9985A6580D6F), UINT64_C(0x34B0D3206B471AA6)}}, {{UINT64_C(0xEE28E9FC46BF771F), UINT64_C(0xDCD3C06EF23B38E6), UINT64_C(0x894E78648D62D86B), UINT64_C(0xF226C4DAC0209FC3), UINT64_C(0xEEB85A816EC4D3B1), UINT64_C(0x837F8A033ABEC007), UINT64_C(0x622C40BC18C1A3EA), UINT64_C(0x49A59CB2279C341A)}, {UINT64_C(0xC3833ABAD38DC85B), UINT64_C(0xC512B7213E303976), UINT64_C(0x80CB1ADFA43BA4BF), UINT64_C(0x6C8A15748FAD6957), UINT64_C(0xB5305AE5A0DC03A1), UINT64_C(0xA63FE0FCA78753F7), UINT64_C(0x81C2BCE17D4EB934), UINT64_C(0x4ED73812AD66F6FB)}}, {{UINT64_C(0xAC25AB81CA09A5D2), UINT64_C(0x1E000EFCB6EE3D0D), UINT64_C(0x7EDA899F148738A5), UINT64_C(0xEE70DFB44ABD3CA0), UINT64_C(0xA9F18AF3371F70BD), UINT64_C(0xA2D64FE430E796BC), UINT64_C(0x77E4219038943DC4), UINT64_C(0x35AEB8A206EB5CFC)}, {UINT64_C(0x95D36C2EDA26DB57), UINT64_C(0xEEF40F183A546E88), UINT64_C(0xAD4D846BE5D07294), UINT64_C(0x80BE6BA895158FF2), UINT64_C(0xC15AC73FC85F84EA), UINT64_C(0xBAFC39522044951E), UINT64_C(0xEA750E8DA14C51AE), UINT64_C(0x1817F004524FC6FA)}}, {{UINT64_C(0x9C835DB314555CD7), UINT64_C(0x76A92FC0299196F6), UINT64_C(0x35CDF54D6618F1A6), UINT64_C(0x4B77E5A0B3260002), UINT64_C(0x321C2EAFA837BDB2), UINT64_C(0x559AE831D5D4A743), UINT64_C(0x0EB18D7FE116E5CC), UINT64_C(0x3FE7D2921945E60E)}, {UINT64_C(0x4CA61AEF649D5551), UINT64_C(0x7C3CFBFF95257CC3), UINT64_C(0x8AF04A7466A5D03B), UINT64_C(0xA0C95ADEFC3B143A), UINT64_C(0x515258CEA61B0143), UINT64_C(0xF1959D4B43A147BD), UINT64_C(0xAAE3EF4C43B761E4), UINT64_C(0x731F5D9EBB8BEA3A)}}, {{UINT64_C(0x483D5F556283C8DA), UINT64_C(0x0CE48F6FC067AF22), UINT64_C(0xBA767432CFB3FEF8), UINT64_C(0x1AD7F214463510B2), UINT64_C(0xDCFDB1A77D448527), UINT64_C(0x3EEFAEDD119BA281), UINT64_C(0x9D5F25467B6597AB), UINT64_C(0x03515E65B8AE2AC1)}, {UINT64_C(0x91A17476A768A2E9), UINT64_C(0x921B21AA1C0B8745), UINT64_C(0xE1B0AB68D1636FB2), UINT64_C(0x35AF62C10A933BC5), UINT64_C(0x24432C7B6CCA56F8), UINT64_C(0x88976C8FE142C3D6), UINT64_C(0x1BAC1E5DC0EEC621), UINT64_C(0x2760B03A7EB64467)}}, {{UINT64_C(0xCEFCAB97535D9B1E), UINT64_C(0x2DDF1964EFC85889), UINT64_C(0x62276E0267FC56FE), UINT64_C(0xD33D4E1F9EA27125), UINT64_C(0xD11F07263EAB0BFD), UINT64_C(0xCEF5BD00B4E5A283), UINT64_C(0x107CB2FBA5ECFF20), UINT64_C(0x1D110BEC85321266)}, {UINT64_C(0x5CD67BCAB9C05938), UINT64_C(0x023B2FD6EC9ED6BA), UINT64_C(0x473FEF71C44D68BE), UINT64_C(0x6DB457A124006876), UINT64_C(0xA56C47E35979901A), UINT64_C(0x971F5FE7006B786D), UINT64_C(0xD894B21C8E3630E4), UINT64_C(0x56B8610DFF0AD8ED)}}, {{UINT64_C(0xDC5748066A9AD8B6), UINT64_C(0x39B1553AA33AA074), UINT64_C(0x55233DAA71EF2A51), UINT64_C(0x6186F6F0CCC11692), UINT64_C(0x949F7A8D51E7F2B8), UINT64_C(0x9ED94F29BF2FF9B7), UINT64_C(0x54ED16DA3B90382D), UINT64_C(0x065D09754014335A)}, {UINT64_C(0x95DA36F27B737144), UINT64_C(0xE0A7C458DDD9C1E0), UINT64_C(0x0DCE291C69B64234), UINT64_C(0xF943B7278689DEF3), UINT64_C(0x1CB8375C24F80B28), UINT64_C(0x60EFAA298902EC28), UINT64_C(0x036BD90F673F34AF), UINT64_C(0x687B36FB02B1A208)}}, {{UINT64_C(0x1704A5980C031EE5), UINT64_C(0x325E60968288EC60), UINT64_C(0x588F58A116EFC6F9), UINT64_C(0xA1EA547F2C520574), UINT64_C(0x2633CB8F7FD9F40A), UINT64_C(0x736D8CFA3AA1C0DD), UINT64_C(0x189E74DA92B3300E), UINT64_C(0x6C92BE1892172793)}, {UINT64_C(0x3B67DADFC6E25307), UINT64_C(0x170BF45CCCF961F7), UINT64_C(0xF07F48B5B2C0629E), UINT64_C(0xACB40994974F7169), UINT64_C(0x29AD746C871177C5), UINT64_C(0x1AD449E2E3AE7857), UINT64_C(0xAFB63CB9AE9BE21F), UINT64_C(0x0E6C676CB08FAEEC)}}, {{UINT64_C(0xA60E0D9F60CABC21), UINT64_C(0xBDFC43CF8BA79177), UINT64_C(0x8362D84B7BEECCF8), UINT64_C(0x0CC9E6BA29F8FBE4), UINT64_C(0xCA90958A4801BF01), UINT64_C(0xCB84005EF13C6356), UINT64_C(0x9CA6408B90AE5AB9), UINT64_C(0x293582F2E668357C)}, {UINT64_C(0xAA3A680AFFCEB4F6), UINT64_C(0x19CE2D54F18508A5), UINT64_C(0x74027BA5F430A62C), UINT64_C(0x7248CB8EDCB846D8), UINT64_C(0x608F15E83D3779E2), UINT64_C(0x21B8A43852BB6633), UINT64_C(0x64B4C82EA95BDE4F), UINT64_C(0x75169F73CA13D8B1)}}, {{UINT64_C(0xDC6C53C97435D441), UINT64_C(0x621030CD630885A0), UINT64_C(0x9F761C574CA9BBE8), UINT64_C(0x3CBD7B5189453166), UINT64_C(0xE80014E453EED18D), UINT64_C(0xAB31FE34FD48C287), UINT64_C(0xB908AA720B1F2C06), UINT64_C(0x2A849D2EDA592359)}, {UINT64_C(0x688DAA1B9B7DA75A), UINT64_C(0x779B963B42D4659B), UINT64_C(0x44BCCBE10DA7F5E1), UINT64_C(0x96F4FE4E0E283A19), UINT64_C(0x00239F780F532628), UINT64_C(0xA8E1A47FB2BD3F1E), UINT64_C(0x23D8F15049D504AD), UINT64_C(0x36F4D7ADA818FB1A)}}, }, { {{UINT64_C(0xED7AAC766FA6665A), UINT64_C(0x593FD44FCD7ABC00), UINT64_C(0xB70DAA5DE5940EBE), UINT64_C(0xBBD56469E6CEB5B5), UINT64_C(0x17B54A104EC6EC19), UINT64_C(0x2411F294F288553F), UINT64_C(0x0108208281534194), UINT64_C(0x3CFFCF3F98F85E1E)}, {UINT64_C(0x0B82B0FD07E62220), UINT64_C(0x99B5CC1950F91B0E), UINT64_C(0x2C60F9383AE5C675), UINT64_C(0x6A25B099F42E3EEA), UINT64_C(0x498948A8329D208C), UINT64_C(0x45226E626A343691), UINT64_C(0x053643F68B8E9C2D), UINT64_C(0x56E1E5644A938DA8)}}, {{UINT64_C(0x144DA6782242A19C), UINT64_C(0x0860A384C072E8A2), UINT64_C(0xD782A875318A08B7), UINT64_C(0xAC99802E8D318C54), UINT64_C(0x329437A2307DA17A), UINT64_C(0x35656A126696DC0F), UINT64_C(0xC5A9914AE2152828), UINT64_C(0x3BCBD2FC841C814B)}, {UINT64_C(0x7D2FCF55590C6FC2), UINT64_C(0xCCCF43156197DABE), UINT64_C(0xF4701C360E2EB665), UINT64_C(0x9D4F5A7CE9400A11), UINT64_C(0x815C62182F49F529), UINT64_C(0x264A9BEFB015260A), UINT64_C(0x279A03B8177E94AB), UINT64_C(0x115481E6F6E2518A)}}, {{UINT64_C(0x2FE0C370BB65B1C1), UINT64_C(0x620FC63EAABD8550), UINT64_C(0xA6EDA03F9660303A), UINT64_C(0xC15FD5C5802B6899), UINT64_C(0x6DFBBCA530FD19A1), UINT64_C(0x2BC0DDA1C5394AAB), UINT64_C(0xFC6196340CF41B04), UINT64_C(0x64DDF00E7DBCB198)}, {UINT64_C(0x78B289F692602D0B), UINT64_C(0x123CC6A5E4A24732), UINT64_C(0x5F2DB53B70913278), UINT64_C(0xD55AE856C27EAC92), UINT64_C(0xCC82E112085696BA), UINT64_C(0xA421C17967F01774), UINT64_C(0x7DEEF7FDE602BAF7), UINT64_C(0x00A730B335E94ADA)}}, {{UINT64_C(0x586D8DC81DAC6F8B), UINT64_C(0x89A56AC618F1FE48), UINT64_C(0x51231A77F2A8BFA5), UINT64_C(0xD36BE5FECA562E8C), UINT64_C(0x5DFE328F9A6268D9), UINT64_C(0x3110144C781FA0B4), UINT64_C(0x6A18A1907ACBE702), UINT64_C(0x68F941C2D70C4B5F)}, {UINT64_C(0xCE3C1DE30A19654D), UINT64_C(0xCE96C00049AD2799), UINT64_C(0x9AD7B0F306E913EE), UINT64_C(0x625C4FC1472A1C37), UINT64_C(0x1E25E3AC967BBD4D), UINT64_C(0xE516CD882042C162), UINT64_C(0x1483A10EC3197E40), UINT64_C(0x60815A8A84E5FAED)}}, {{UINT64_C(0x3413EEA8D1313B07), UINT64_C(0x4B6C2CCF49BC14B0), UINT64_C(0x56C78C84C33BE839), UINT64_C(0x00980F4F0DC481C6), UINT64_C(0xA34D712C5E96BAE7), UINT64_C(0xEA386C4AEB0574F5), UINT64_C(0x834334AB6BB4DC04), UINT64_C(0x140F220947404A42)}, {UINT64_C(0x970B7DE3CC6F8D14), UINT64_C(0x7C9A38E9CCD6A840), UINT64_C(0x7C1C4638A63FAF90), UINT64_C(0x36AFEA841F10834E), UINT64_C(0xA9AA4A1515765F2A), UINT64_C(0xB20B2249D9240C98), UINT64_C(0x20116417D03ABC25), UINT64_C(0x69B3430037A8893D)}}, {{UINT64_C(0x710FB0751021F8CA), UINT64_C(0xF90919DD64008516), UINT64_C(0xB0ED31722CCC8FFC), UINT64_C(0xC6ADC85B78988C41), UINT64_C(0x1CDE6A9D0A1B81A9), UINT64_C(0x9ABC5114C80CAC9E), UINT64_C(0x877E608243A7B1A7), UINT64_C(0x0CA1F0D151BD9782)}, {UINT64_C(0xFBB662BB6E6AACB7), UINT64_C(0xDCAB0D7796CD1A74), UINT64_C(0x603F2717DC56300E), UINT64_C(0x327251B0FE92F7E4), UINT64_C(0x07E0CBED7031603A), UINT64_C(0xA0F296ECD04C19FD), UINT64_C(0x3296BF9BB8C5E0AB), UINT64_C(0x41E72DDB49E5E7B6)}}, {{UINT64_C(0x47E9562CCE99C0C5), UINT64_C(0x4C5FD161BA5372BF), UINT64_C(0x05D1B7B15C808664), UINT64_C(0x9DBE76B6539F8180), UINT64_C(0x646C3DDFDDBD7BC3), UINT64_C(0x06032B9697376739), UINT64_C(0xB71DD971696BDA3D), UINT64_C(0x75061EB81D340FD0)}, {UINT64_C(0x6FD064FDE6A7DCA5), UINT64_C(0x79A316508DB01DE3), UINT64_C(0xB1B65A8DF6483911), UINT64_C(0xAF2BBE1CA9DE2C37), UINT64_C(0x6B663C9E85CB42C5), UINT64_C(0x464FEDFEB583E78E), UINT64_C(0x393C00F8FFDF93CB), UINT64_C(0x61CC9A6D9F96CF15)}}, {{UINT64_C(0x40EDC986CA774807), UINT64_C(0x8B2A531C4C334C01), UINT64_C(0x72D378C4CEB21FD6), UINT64_C(0x169C54E43833D841), UINT64_C(0xCC830E8E82FE513F), UINT64_C(0xBDC4ECD7ABF34DD7), UINT64_C(0xB5349484AEDD9FF5), UINT64_C(0x12D7ADB3A404055B)}, {UINT64_C(0x88027C00637B7C24), UINT64_C(0x755587A6C0EB319D), UINT64_C(0x3F24E32F2027178A), UINT64_C(0xB912054EA4FE8F8D), UINT64_C(0x6AACA9115C9A68D6), UINT64_C(0x14772328235CF842), UINT64_C(0x6D3020A80C0175F8), UINT64_C(0x587768A73E0F7418)}}, {{UINT64_C(0x57E3A1F91154C74A), UINT64_C(0x80157FF5B85FB8E8), UINT64_C(0xBEDB658DEE5DEFEC), UINT64_C(0x65C0AA98067E9A0E), UINT64_C(0xAF9A507A229A5289), UINT64_C(0x6A13ACF0F954DD94), UINT64_C(0xB5F3A18D53DC4C19), UINT64_C(0x06AEB3F585AF938F)}, {UINT64_C(0x503F06228C9BB087), UINT64_C(0xEA19AC85E3FEA015), UINT64_C(0xE446CD70403FB8FC), UINT64_C(0x1BDDC810DF5B398F), UINT64_C(0x0CAF818FAD2CAEC6), UINT64_C(0x06983E52807AB004), UINT64_C(0xA6B33E3C79428650), UINT64_C(0x182E3D46231BAE71)}}, {{UINT64_C(0xAF54B735B309DC4B), UINT64_C(0x494F7441805890F1), UINT64_C(0x3CCD5F0CF87271F6), UINT64_C(0x2914763B7638102B), UINT64_C(0x3CA50D01FD258079), UINT64_C(0x6D9A3D4777CDD6A9), UINT64_C(0xD81373B81F4A05CE), UINT64_C(0x16B258DBCCD443ED)}, {UINT64_C(0xC9D4009FA3805FEE), UINT64_C(0x5EC56730225FA57D), UINT64_C(0x4A51A79BAC17E4C0), UINT64_C(0xB389FBA3E7750942), UINT64_C(0x2B137D6E1AB7E8BE), UINT64_C(0x3953702AD8C26EFE), UINT64_C(0x6D86ED3EB79F2828), UINT64_C(0x36ECEEE86D6A62C0)}}, {{UINT64_C(0xF97E85FB6B8B9B02), UINT64_C(0x3319D570C6F128F6), UINT64_C(0xDAB74E23B4CA56DD), UINT64_C(0x50CA71EF81FCBB47), UINT64_C(0xBFC19F2EAAD7F910), UINT64_C(0x96650F9BDB3772F4), UINT64_C(0x5823F134B6F26494), UINT64_C(0x1B899B3ECBFBD2E3)}, {UINT64_C(0xD1589C42F6CF8F8A), UINT64_C(0x3168AAF534DDB625), UINT64_C(0x4C73053572ABDA08), UINT64_C(0x8B1C24C7F82913C3), UINT64_C(0xD7D80F27239FBCD3), UINT64_C(0xB18B4F056B7C205D), UINT64_C(0x2864763FD92056A6), UINT64_C(0x0B3DDC7BBCDB3022)}}, {{UINT64_C(0x1AB037D6207F772B), UINT64_C(0xF050DD3488767BFA), UINT64_C(0xFEF182FF79ABF05E), UINT64_C(0xAAFCFD0F4B25067B), UINT64_C(0x1EB7623534E155B0), UINT64_C(0xA3B921C965CEF7A6), UINT64_C(0x6CBD50B3D9216B0A), UINT64_C(0x3E298A719E578A9A)}, {UINT64_C(0xC0DEE8511CCE9059), UINT64_C(0x397344BBEBA49DE2), UINT64_C(0x45A60A85B08513DE), UINT64_C(0x55D314F9F0D07F9B), UINT64_C(0xBF6D4D5112D12611), UINT64_C(0x49F9BCF130A7E8DE), UINT64_C(0xDB0A90585435D109), UINT64_C(0x4DE5C43F0F706CF2)}}, {{UINT64_C(0x7FF298D670B6D62B), UINT64_C(0xB2FF0AD4E67688D3), UINT64_C(0x5E63A6B2805652BD), UINT64_C(0x32D81219AD74922A), UINT64_C(0x77D2E3A3A9CCCC31), UINT64_C(0x031D571B2CF2EEE0), UINT64_C(0x471653BD4FC7C9EA), UINT64_C(0x2322CC680AFC2A13)}, {UINT64_C(0x3D152EFF08C6D70E), UINT64_C(0xBEC9CBCFBEC5DBD9), UINT64_C(0x41BD49626496310F), UINT64_C(0xD23FC983B1A88E6B), UINT64_C(0x5B622EDC5EF464E2), UINT64_C(0xC6500ADDFFCC97BB), UINT64_C(0xF2CCD3EFAA783FF4), UINT64_C(0x51AD36047CE05CC1)}}, {{UINT64_C(0x4796EE8324C48E44), UINT64_C(0xB4D448B0BBA7BC62), UINT64_C(0x2F356E4A1C32B713), UINT64_C(0x980D6DCA32050781), UINT64_C(0xB52B1826B5F6C099), UINT64_C(0x01F7D68DA144D7F5), UINT64_C(0x09ABC596A23999CB), UINT64_C(0x17C069DD66246640)}, {UINT64_C(0xB7D7F96C1F7E37A6), UINT64_C(0x57E198C0E46AAD16), UINT64_C(0xB2088DF9D1C0DF8C), UINT64_C(0x0CC38EE43FDEC190), UINT64_C(0x68DD1FC4FB2D9B68), UINT64_C(0x0AD94674AD1D73C0), UINT64_C(0x9529C7DF1B92B955), UINT64_C(0x6711E3610D141F7C)}}, {{UINT64_C(0x1B1A51593B87C175), UINT64_C(0x7F62A639029FF8F9), UINT64_C(0xA2E37638C69ADEFB), UINT64_C(0x3AC773C658E309A0), UINT64_C(0x9E7A85FD22EFD710), UINT64_C(0xD29E2F3DA60E5275), UINT64_C(0xC4734B9B1163C9ED), UINT64_C(0x09D3204A9CBEEE57)}, {UINT64_C(0xB2339F8D0B8A97AA), UINT64_C(0xC19C67A67AE97B4D), UINT64_C(0x8C0E823F65425033), UINT64_C(0x447F972A8B186D7F), UINT64_C(0x43385E2932A6C164), UINT64_C(0x95049508E9E78569), UINT64_C(0x2AF8C598A074B68F), UINT64_C(0x18AC97B85CD5E2F7)}}, {{UINT64_C(0xFAE6158901DEB288), UINT64_C(0x33F684F3885B8EA2), UINT64_C(0x89A90618CFA425B5), UINT64_C(0x8F5D3C2EFBBF5B15), UINT64_C(0x379803C6C2B6CB28), UINT64_C(0xFE683EA3990CE2DB), UINT64_C(0xC1B3C21F7B6E4E0C), UINT64_C(0x6F152C2EEA3513DC)}, {UINT64_C(0x235053389AB792CA), UINT64_C(0xC64C7F27282A67AF), UINT64_C(0x6FCBDE656498B24F), UINT64_C(0x6FB7F7FCA1612A06), UINT64_C(0xFD575B9F45C74402), UINT64_C(0x6EAD0805A709A516), UINT64_C(0xCA6208AED4EF066B), UINT64_C(0x23880ECE93954E65)}}, }, { {{UINT64_C(0x2B13B8B87FB1977A), UINT64_C(0xEA6510AD21B7871A), UINT64_C(0xDBDCB0E8882483C7), UINT64_C(0x5E2E96644C379245), UINT64_C(0x581D4429EBAF2C56), UINT64_C(0xA929CBB0CA79FCCF), UINT64_C(0xE74D3D662009377F), UINT64_C(0x664661A5610CC0D1)}, {UINT64_C(0x1F778C190570237A), UINT64_C(0x905AEB861769A370), UINT64_C(0xF51B013BD6C06AEE), UINT64_C(0xDF0D890543EFB668), UINT64_C(0xDD082BC311E4D5DA), UINT64_C(0x58AA1283D7BE0C1D), UINT64_C(0x97F20D6B941E9230), UINT64_C(0x486C960C8BB614AD)}}, {{UINT64_C(0x0B573B944CE9052B), UINT64_C(0x88B5C4CBD78F10E5), UINT64_C(0xB131989B77DCA0EB), UINT64_C(0x7F405D8081E63C3B), UINT64_C(0xCC31F1853818CA2D), UINT64_C(0x42F386A2FE177EA8), UINT64_C(0x1B7DD56E9D888B2A), UINT64_C(0x3A6D84D3C8E873E8)}, {UINT64_C(0xBCFEF8777E3FBCD6), UINT64_C(0x5DA67B53B36F3F68), UINT64_C(0xE840229A5827FE5A), UINT64_C(0x17689956B989407B), UINT64_C(0xAD6E3F87AFE27325), UINT64_C(0x62027C70DB1E1A3E), UINT64_C(0x86A2C9097EBB4747), UINT64_C(0x47ADC4CC4A919D6B)}}, {{UINT64_C(0x92381565A4CA0F15), UINT64_C(0x67FB0C76C08705DB), UINT64_C(0x661DA00403BA6D54), UINT64_C(0xF875EF2477C5C4F7), UINT64_C(0x0769B11C4157A282), UINT64_C(0x8ADB10ACFAF534C6), UINT64_C(0x0312147B9CCD6AB2), UINT64_C(0x75390C00D67A443F)}, {UINT64_C(0x0F5A29A021A1047C), UINT64_C(0xCABB96FB83A146B8), UINT64_C(0x1375356A2A3F2F48), UINT64_C(0xDEAB754483C57DB4), UINT64_C(0x1AB71412F5AFA2F1), UINT64_C(0x21D94B4873B58749), UINT64_C(0xBA87E6D5FF2F369A), UINT64_C(0x4B3B90B6DBAE0E08)}}, {{UINT64_C(0xB8648E3F9116F02B), UINT64_C(0xA5E5A03BCEF02B4F), UINT64_C(0x21EB9835A70F456A), UINT64_C(0x44865319C8A7C423), UINT64_C(0x57DB3941BCD6C0AD), UINT64_C(0x20D97A3A7D371806), UINT64_C(0xBE61AA4F0F8A3D51), UINT64_C(0x7A6E0BBA13CB7D2B)}, {UINT64_C(0xB3B98673EEA5D6FB), UINT64_C(0x534EB45F87B03BAC), UINT64_C(0x6CEB244FA9508557), UINT64_C(0xA47FBAC7F209CC15), UINT64_C(0x41EBF99D1FC65C19), UINT64_C(0xD1477A867341650F), UINT64_C(0xC4E6EB8EB361E0F8), UINT64_C(0x68FAF82ED2B3D548)}}, {{UINT64_C(0xB9CCA467F92B039B), UINT64_C(0x9F7180AF0E6F2A2B), UINT64_C(0xC3084870ADA011F8), UINT64_C(0xC814D1DC882D7A38), UINT64_C(0x3A145072D51C1D14), UINT64_C(0x595AC55BD70F8B08), UINT64_C(0x67308D0571EFED45), UINT64_C(0x2C660B9822DBFA33)}, {UINT64_C(0xC8EB4EECAF8F2980), UINT64_C(0xBC8F2D726145AB09), UINT64_C(0x1A0A9D53C22D5E84), UINT64_C(0x8E6460089ECD643E), UINT64_C(0x6C704F66B541E2D8), UINT64_C(0xEED597AA31995198), UINT64_C(0xB9032FA3619126C2), UINT64_C(0x0CA4AEABB0A08F01)}}, {{UINT64_C(0xF48A003DDB421144), UINT64_C(0x4A7FA5929885A445), UINT64_C(0x040AA1C28E8FA3DB), UINT64_C(0xCE94D87491A15B11), UINT64_C(0x79490F6DF0E875B7), UINT64_C(0x743A531D70318E86), UINT64_C(0xE88CA2AFC4630CD1), UINT64_C(0x6E2FE529F5C5D4AD)}, {UINT64_C(0x619A4F46FE062D25), UINT64_C(0xCE1B5FADBD747C4F), UINT64_C(0x3C4283663D512728), UINT64_C(0x7FE8790871AFAEC7), UINT64_C(0xB70063103DB8315E), UINT64_C(0x97A0397B7195E9B1), UINT64_C(0x51EB939F84870127), UINT64_C(0x768A3CD7517A32EE)}}, {{UINT64_C(0x25234FFA257E424F), UINT64_C(0x5D80ACE8AD164952), UINT64_C(0x4B15F3867B4C0F5D), UINT64_C(0x71963894F95006BD), UINT64_C(0x4781B77869963C75), UINT64_C(0xDECD94FBFD339850), UINT64_C(0x1533454E11A9D79C), UINT64_C(0x3B17EC4092BFCA33)}, {UINT64_C(0x58D0672A12A30834), UINT64_C(0x807B665B3E66F5D6), UINT64_C(0xCD732AE8B164B077), UINT64_C(0xED26F82EF1F732BE), UINT64_C(0x4E65CB2E75A7B899), UINT64_C(0x2EA2BE743C72F22E), UINT64_C(0x60CD26F64068CEFE), UINT64_C(0x63734AC01FEBEFAA)}}, {{UINT64_C(0x290E6008E7203401), UINT64_C(0x3497CEA1A67A0F47), UINT64_C(0xB079862C641F5B86), UINT64_C(0xDF3CB4837A0D51D1), UINT64_C(0x4CC0DCD1BC8D25B7), UINT64_C(0x1034F5FFBDFAC20F), UINT64_C(0xC5896F316881DBFB), UINT64_C(0x2C6BD4A168A39778)}, {UINT64_C(0x6FAB7060F5CEDBE3), UINT64_C(0xC51F3245F7141245), UINT64_C(0xA3FFA5A4C3EF1EEF), UINT64_C(0x2FC2A0C7206172D5), UINT64_C(0x6616FCFF094E55D7), UINT64_C(0xC3F309FF22EA071F), UINT64_C(0x0685AADBDD267FAA), UINT64_C(0x0AE3722A6BC770C0)}}, {{UINT64_C(0x7B11DD6AE67270FB), UINT64_C(0x0128A3510016905D), UINT64_C(0x9CE64782BFE007A0), UINT64_C(0x7324986D7714E091), UINT64_C(0x3E796B16269E4410), UINT64_C(0x707A148C9A97AD36), UINT64_C(0xBE29A34087D5B9AC), UINT64_C(0x2F92E67EF0D882B4)}, {UINT64_C(0xB9F0664257636C75), UINT64_C(0xA803EF99FB7F18EB), UINT64_C(0x4B8A1D791E9BF04A), UINT64_C(0x4C43526D062068D6), UINT64_C(0xCA59CFF0800F0FF9), UINT64_C(0x8BE857C3E4389A8E), UINT64_C(0x5042CF565383EDE8), UINT64_C(0x06791C9A0E02F40E)}}, {{UINT64_C(0x18A74ACEF5D076B4), UINT64_C(0x050C2161E41EC2CF), UINT64_C(0xECC5823D484F2CD0), UINT64_C(0x63B7B1BDAA7C332A), UINT64_C(0xAC6A274DABEE9CD9), UINT64_C(0xEAC874F87B7A7DB1), UINT64_C(0x0FA4B8E8734BEA81), UINT64_C(0x1ADA0B97243D05BA)}, {UINT64_C(0x724C084F822C8BC9), UINT64_C(0xAE697A1BA117425F), UINT64_C(0x391728042CD06676), UINT64_C(0x87B4F92023213E25), UINT64_C(0xCBA8C7A1FC373ED4), UINT64_C(0xDAC6B96BD2F10FD2), UINT64_C(0xCC175798FD265CFF), UINT64_C(0x1631D89CB731090A)}}, {{UINT64_C(0xB639A2086D19CB56), UINT64_C(0x78F0F35342A88733), UINT64_C(0xC6BC527BE0323B20), UINT64_C(0x3406CEDD6DE64954), UINT64_C(0xAA89168BBAF8A735), UINT64_C(0x7F68CEA02D7B04AB), UINT64_C(0x6EAD81B25EEC36D4), UINT64_C(0x1C41724EBBCE0784)}, {UINT64_C(0xDA5383AD831BEE83), UINT64_C(0xA8B7BEE3F3C29716), UINT64_C(0x5B7E054035ACA35B), UINT64_C(0x8F006F3FB8F21324), UINT64_C(0x915849F8A7B700CB), UINT64_C(0x77C5B34DA455A08B), UINT64_C(0x13BA7C32D6D73C0B), UINT64_C(0x65D599C96936AC88)}}, {{UINT64_C(0xF636CFE84DA5FFF8), UINT64_C(0xE5FD754ED1E6E947), UINT64_C(0x8F960362388A72F1), UINT64_C(0x95B55A07381C1C38), UINT64_C(0x31E1D02D1DF2F860), UINT64_C(0xC03243C712EA25F5), UINT64_C(0x5FD87B58C28C0062), UINT64_C(0x5769E94D9D950661)}, {UINT64_C(0xF88C7CCF6509E6E7), UINT64_C(0x8A021BABD3971A21), UINT64_C(0x2655B4AA9B284C2F), UINT64_C(0xC3E14580C7050955), UINT64_C(0x63B332E290E60DDF), UINT64_C(0x6AB86D32F1CD1B51), UINT64_C(0x9896AC1113BC748E), UINT64_C(0x516D4D4A40FC1EBC)}}, {{UINT64_C(0xC27DBB0A8F7B417D), UINT64_C(0xEE24827A770CF92D), UINT64_C(0x22E08B645F9A2A6B), UINT64_C(0xAE739513E10F76A1), UINT64_C(0xEC6E2D9DFF544277), UINT64_C(0x470C22B7740DB83A), UINT64_C(0x643B7953EE4F1E82), UINT64_C(0x664094975556FB59)}, {UINT64_C(0x4C15C4CB728114E6), UINT64_C(0xEFF1BB9F1F29EF7F), UINT64_C(0x8E00B92A259562ED), UINT64_C(0xF28B146C9838D769), UINT64_C(0x3D7C8FFF206622CC), UINT64_C(0xD521181D86457FAD), UINT64_C(0xBF56F6639D9A3085), UINT64_C(0x11BA1FEDA24B415A)}}, {{UINT64_C(0x149597F7035701C5), UINT64_C(0x055B1C4B6361CC7E), UINT64_C(0x10DF1572C221AF72), UINT64_C(0x6941B1E9C3D3A167), UINT64_C(0x29985CAB38D00AF6), UINT64_C(0xDD9B839119E385F7), UINT64_C(0x65268E33F2E81932), UINT64_C(0x4FC872735C07CEF9)}, {UINT64_C(0xE1644429EA012B70), UINT64_C(0x639FA8744BDF6ACE), UINT64_C(0x7BAE6AFFF65480CF), UINT64_C(0xB9CA15AF606EFF3A), UINT64_C(0x10F5918AC04C5263), UINT64_C(0x50F27E68ED3D0F98), UINT64_C(0x647C1AD33134D7FA), UINT64_C(0x08EF017DF869EEFB)}}, {{UINT64_C(0xD474B5FDF229A34B), UINT64_C(0x03819D4E29E0A164), UINT64_C(0x0D24139A8D0910B9), UINT64_C(0xB4F45C8D9C2D8E8D), UINT64_C(0x10E4BEA22F21718A), UINT64_C(0xD3D7ECDE63DA06E8), UINT64_C(0xB2AAB06AF148B0ED), UINT64_C(0x630152B1AABD0F7A)}, {UINT64_C(0xCF4D05C23B1563B4), UINT64_C(0xBFA58B4E6F355349), UINT64_C(0x2FA4A29C04D1A769), UINT64_C(0xF4E15F9D1AEDA992), UINT64_C(0x0FDABCEB877819C9), UINT64_C(0x5EDFCC1CC3EDB0A3), UINT64_C(0x76625DC7D1DBCF40), UINT64_C(0x3E558CF02A7BD819)}}, {{UINT64_C(0x07C7924F07A883A0), UINT64_C(0x18484807010EA080), UINT64_C(0xDF8602FEB6B2B992), UINT64_C(0x38A2EFDCAA03AA11), UINT64_C(0x60B0031119B2BB14), UINT64_C(0x9E12E7FE15E28BF3), UINT64_C(0x2AC0917BBB0271CD), UINT64_C(0x24126EAE1558FAAD)}, {UINT64_C(0x2EB303EF19170EDF), UINT64_C(0x6945946BF5779AD2), UINT64_C(0xE4E5635A31B7DF96), UINT64_C(0x2B371D13D6AC3252), UINT64_C(0x38E781988116C539), UINT64_C(0x76DF4A2C6C89FAF6), UINT64_C(0xDFB6755D6F233984), UINT64_C(0x0CBF63F6D382985D)}}, }, { {{UINT64_C(0x936D53BC56B39FA7), UINT64_C(0x751274EC511D5744), UINT64_C(0xDAF4432AF29D41C2), UINT64_C(0x717A68C1014F8954), UINT64_C(0x6D5D3F05736F4024), UINT64_C(0x52E785F812D037D9), UINT64_C(0xC04CBA1902CA06C4), UINT64_C(0x432078069259A368)}, {UINT64_C(0x1211482B2BE51135), UINT64_C(0x5B473F6EE4D32066), UINT64_C(0x91991C8E4ADE99FC), UINT64_C(0x124378E84865136B), UINT64_C(0xAF791646BFFFC5CC), UINT64_C(0xB7DBA11536D38141), UINT64_C(0x0E8794265BD595B7), UINT64_C(0x39B7D642CACC032E)}}, {{UINT64_C(0x76ACE7C8D756CE1D), UINT64_C(0x4BEC8290F8A89F09), UINT64_C(0xE8FE848C690139DA), UINT64_C(0x8C5CB5CC6A541656), UINT64_C(0x6127BB25A79F1A2B), UINT64_C(0x955551CCE17D0549), UINT64_C(0x648A32E958E7C3FD), UINT64_C(0x366035A5A60D449C)}, {UINT64_C(0xA4CF0CCB67A48368), UINT64_C(0xCF7D74F7BE344234), UINT64_C(0x006DFFB48CFFCCCE), UINT64_C(0xBBC66664FB55072B), UINT64_C(0xAA51DDD15EFD8AF6), UINT64_C(0x88D0CFD46F004C47), UINT64_C(0xD18C2DBFD97BBB13), UINT64_C(0x5E5982001E7E68D2)}}, {{UINT64_C(0xFF9FB488466B58D2), UINT64_C(0x153A751DA8041078), UINT64_C(0xD7E96CB3D5817ADF), UINT64_C(0x56A7A135511775D8), UINT64_C(0xB48FB40677E5DE7A), UINT64_C(0x4DE670FB997A6721), UINT64_C(0x446019B586EFBADA), UINT64_C(0x403CC005FA535082)}, {UINT64_C(0xF85BFEE2C2FA986D), UINT64_C(0xF2B77B880E0C320B), UINT64_C(0xAEFE19728FE98FA0), UINT64_C(0x291FD9C7E8DB8196), UINT64_C(0x7C3AB36DF579D9D0), UINT64_C(0x7F202BEF764622DD), UINT64_C(0xDFD4DE34804CEBFF), UINT64_C(0x25CA634E683B7281)}}, {{UINT64_C(0x2E3BCCC2EEB585DE), UINT64_C(0x728BAD6D9C7AB9D7), UINT64_C(0xE298BC835C38CDF1), UINT64_C(0x0D88D423B610385E), UINT64_C(0x5710F23571744E3A), UINT64_C(0xD9312CC99681CFF4), UINT64_C(0x1C46AB4AF3D5B3BC), UINT64_C(0x48BE540BE2631926)}, {UINT64_C(0xBFAB35A15CCDF14D), UINT64_C(0x16C3216CD778F586), UINT64_C(0x2A60480004128BB2), UINT64_C(0x05505889A7D2E1AA), UINT64_C(0xBE8B94BE1DE7C7B4), UINT64_C(0x53E72EBF05BB8DEC), UINT64_C(0x1A38C5DA2870C597), UINT64_C(0x76F0E77BDD36B123)}}, {{UINT64_C(0xC13D1E8A83B68DC3), UINT64_C(0x5F7291EFA93D168B), UINT64_C(0xD1C56274CA88F0F6), UINT64_C(0x58EDFC8C868E3651), UINT64_C(0x9D8F42AF70692949), UINT64_C(0x65903C3381B6E052), UINT64_C(0xAD71B078262E1F70), UINT64_C(0x7A60D3BBC40DC22F)}, {UINT64_C(0x6B64F0DBBA1FC54F), UINT64_C(0x6DDB148C81F84A0B), UINT64_C(0xCFBD966253955B40), UINT64_C(0x67D49D079B35DB3B), UINT64_C(0x6ED336DDA8EF7DB2), UINT64_C(0x7AAF4B8A03F2A331), UINT64_C(0x9751DBE15C3873CA), UINT64_C(0x78479B108193A7ED)}}, {{UINT64_C(0xB05EDD9A487DB2BF), UINT64_C(0xF905159158F7E778), UINT64_C(0xBD643BE6DC23CBF4), UINT64_C(0xBCE094ECC1EA2427), UINT64_C(0x2A3F3B4B4EB1BD95), UINT64_C(0xBA8FC9DC6F5E1428), UINT64_C(0x7DC28C949F053047), UINT64_C(0x58117A0CC553DC91)}, {UINT64_C(0x4888B1E8D4A6137C), UINT64_C(0x5DC05984F8DCBD03), UINT64_C(0xAE2C8657D2F55576), UINT64_C(0x54721BEFFC4DA255), UINT64_C(0x0A326693802C9EBF), UINT64_C(0xA33294AA91186DF0), UINT64_C(0x716BD76FB822390D), UINT64_C(0x7F023C0B7C4AA61B)}}, {{UINT64_C(0x6506DA35046A8017), UINT64_C(0x23083C16F785115E), UINT64_C(0x7858113724051BBD), UINT64_C(0xCD36D48F5088EBFE), UINT64_C(0x23F7F0A35E542ACC), UINT64_C(0x720187957D015B1E), UINT64_C(0xA69E68D438D2D742), UINT64_C(0x36808A3B023B5C20)}, {UINT64_C(0x660D03D61FEAB6D8), UINT64_C(0x77A1E18558D53E94), UINT64_C(0x67425F4E74024E57), UINT64_C(0x3B9160080CC26788), UINT64_C(0x0C7D287EE3643998), UINT64_C(0xB0D98DD127B3B31F), UINT64_C(0xBA621971BB980CFC), UINT64_C(0x77591087404A2DE1)}}, {{UINT64_C(0xB768C63DC15C3D38), UINT64_C(0x281AEC4D54DBA325), UINT64_C(0xBB51D2E450C9B1F3), UINT64_C(0x086BB9BBE7268C94), UINT64_C(0x9E0AF3510C7ED37A), UINT64_C(0xDBC8852839145AA3), UINT64_C(0xA70373BEB1AB786C), UINT64_C(0x273AC4D90A73090A)}, {UINT64_C(0xD618DB6AC280E9F5), UINT64_C(0x9D874643A9685A4B), UINT64_C(0x7EF799B48A9C1951), UINT64_C(0xAEAE400CFFBA36BB), UINT64_C(0x889119CB145DC10A), UINT64_C(0x08B052FF1BF7AE53), UINT64_C(0xDEF76EC0E3F04B93), UINT64_C(0x35A13BB206DC2CC5)}}, {{UINT64_C(0x97C54E1C613C9FD0), UINT64_C(0x7D4BEB4142581F50), UINT64_C(0x9401F44A5BCA7CAF), UINT64_C(0x5FD7E0B036115D18), UINT64_C(0x714FC514CD0DCE05), UINT64_C(0xF3B737082AB3265E), UINT64_C(0x118FB47A8798EA8B), UINT64_C(0x79A1F4CDFE5C2BFF)}, {UINT64_C(0xC0D3ABAA103FF4DC), UINT64_C(0xF5D504ED146D121C), UINT64_C(0x38B7419B842CABA1), UINT64_C(0xE1730788907320F6), UINT64_C(0x0037793BE111875F), UINT64_C(0x715042EA0AAB7249), UINT64_C(0xF57D27EF15630B39), UINT64_C(0x3B5033305D0153CA)}}, {{UINT64_C(0x44E75F39C8AAD5E3), UINT64_C(0x3890E8AE506B9C14), UINT64_C(0xDDA7D91F38915D2F), UINT64_C(0x412802B85F28E467), UINT64_C(0x08FF3E17711B51DC), UINT64_C(0x0F23C1EF81C96D4A), UINT64_C(0x7B8E28A157511A7E), UINT64_C(0x6020037042C2BACF)}, {UINT64_C(0x5457AA668559DC01), UINT64_C(0xDB0CBC6FBB083219), UINT64_C(0x316C4876F981BE19), UINT64_C(0xA04412B99B98D6AC), UINT64_C(0x20964CB82D95C876), UINT64_C(0xF643F29E51009C2C), UINT64_C(0x5316D85A30C43DD3), UINT64_C(0x104EB0C846A82D48)}}, {{UINT64_C(0xC05ADD9A0B183769), UINT64_C(0x14E8EC7A653E726A), UINT64_C(0xE5311F878D457375), UINT64_C(0xCC1585A825D9120D), UINT64_C(0x04F39BE371A945BC), UINT64_C(0xFBFAD37418298210), UINT64_C(0x95F0BD1E3A9D2053), UINT64_C(0x1EAEEFEDC056D70E)}, {UINT64_C(0x3274833C1E6E949A), UINT64_C(0xA38EA2CAC1D152E6), UINT64_C(0xE77A10271B9A48BA), UINT64_C(0xD44CF88669B03ED3), UINT64_C(0xB52D35E72D9D2B8F), UINT64_C(0xFA67F927F99BD52B), UINT64_C(0x3910D907DF337872), UINT64_C(0x53E3909C90BF7A7F)}}, {{UINT64_C(0xC558DB4E8FC5B40A), UINT64_C(0x330982A37511657E), UINT64_C(0x81A476210B883053), UINT64_C(0xB1F534713F3DB1D4), UINT64_C(0x8A2B835A0C804E24), UINT64_C(0xF8537A453012783B), UINT64_C(0xC761FC419DC2A56A), UINT64_C(0x50369DCB2C12BE25)}, {UINT64_C(0x19877D98CA00D808), UINT64_C(0x305586B51DA7BD8F), UINT64_C(0x683BF46E0FB6F9E7), UINT64_C(0xF23F54577E53ECB1), UINT64_C(0xA09A090117EE25E8), UINT64_C(0x61AF93055BAA52EC), UINT64_C(0xC12B74BEA8104024), UINT64_C(0x6BDABBAA60A876E3)}}, {{UINT64_C(0x0EC8ADDA438800F3), UINT64_C(0xA47197E64FBF0259), UINT64_C(0x324E06961767F99F), UINT64_C(0x0E455BC2E440710A), UINT64_C(0xFE2316897A5984F7), UINT64_C(0x7706D5C73CF323D8), UINT64_C(0x6DFE4B08FFC9FB5E), UINT64_C(0x5E912EC78F9D5207)}, {UINT64_C(0x9B71034DD7D1AC99), UINT64_C(0x5786B8AD33D5ABF4), UINT64_C(0x70E625B7426E2B80), UINT64_C(0x71D53ABB6A33883F), UINT64_C(0xB42DE25AAA10AA82), UINT64_C(0x709B3CDFC313C9F3), UINT64_C(0x49F3BBC799A04BD3), UINT64_C(0x5B56D9BB3390B190)}}, {{UINT64_C(0xA4D655E505DAE0B4), UINT64_C(0x3402DB147016EDE7), UINT64_C(0x58D4EFC5117097DC), UINT64_C(0x4F397AFC61AE9FDC), UINT64_C(0x3EE32FBE85DE0E4A), UINT64_C(0xE5C9410018F9DA9B), UINT64_C(0x6248B57030778D74), UINT64_C(0x569D70C9FF879B98)}, {UINT64_C(0x385FD4C879A7786F), UINT64_C(0x779353B992C6E962), UINT64_C(0x9C9103FB5AA82E08), UINT64_C(0x128BD7DDEC3B37D1), UINT64_C(0xCC0376F898AE8C82), UINT64_C(0xDD33B1A3289AFB7D), UINT64_C(0x2B3A6BE5F1D2F3AC), UINT64_C(0x2B342E8F58C1DCA0)}}, {{UINT64_C(0x4ADA9F0F924940FC), UINT64_C(0x636260E5BD4E799E), UINT64_C(0x10650FC885ECD23F), UINT64_C(0x04765F0532AE8105), UINT64_C(0x22F515E9DEEBFAF2), UINT64_C(0xFB6611B1EA6ED3BA), UINT64_C(0x2D260305B116A647), UINT64_C(0x540A895ACEB63ED4)}, {UINT64_C(0xA5C897EC65640BD2), UINT64_C(0x1D82AD214EB90B65), UINT64_C(0x2A00C3C3A2BD6C71), UINT64_C(0xD9BE5D85A185CE8C), UINT64_C(0x0FA039FEE02E9DCD), UINT64_C(0xAD1DC7C0806B50C1), UINT64_C(0xA78992C20C6AB58F), UINT64_C(0x7D58FDA7FBE348EA)}}, {{UINT64_C(0x07E652776F4DBDFC), UINT64_C(0xC35157C0E4E35AA2), UINT64_C(0x9844955DFAF9CF8D), UINT64_C(0xD1832D2FE577A918), UINT64_C(0xCDD6CCFD212A678C), UINT64_C(0x19406763262F2BC7), UINT64_C(0x1B5FE0FC7DCF82E3), UINT64_C(0x72FCB51228083B97)}, {UINT64_C(0x2EB13174CAE3C67A), UINT64_C(0x571DBD3528F8CB44), UINT64_C(0x3F3514DA7B2F56B1), UINT64_C(0xC59066972E1D4CD8), UINT64_C(0x9F9589DA3709FD27), UINT64_C(0x539CBA98DCF0E714), UINT64_C(0xC6FDBE8236D31BAC), UINT64_C(0x22501C258860078E)}}, }, { {{UINT64_C(0xB6BAA4C5E7462A35), UINT64_C(0x4CABEF232DE0E694), UINT64_C(0xE595F2CE67A94587), UINT64_C(0x0B4D6B8065DE13EF), UINT64_C(0x6ED1FA63B88601AA), UINT64_C(0x63DAF3EF254800DF), UINT64_C(0x15F07C6B6EDECF60), UINT64_C(0x746CB00F49F82DF6)}, {UINT64_C(0x4860833FF95DC407), UINT64_C(0x245FDFB1D4D68D59), UINT64_C(0xFD7E134628C585C1), UINT64_C(0x3307AAE7AA744D74), UINT64_C(0xAB21F1D527C71537), UINT64_C(0x1BED3B9C541ADB51), UINT64_C(0x48E656280B804584), UINT64_C(0x10213DC396C62E82)}}, {{UINT64_C(0xA971A3219E900795), UINT64_C(0x41151E65A28AD250), UINT64_C(0x88FBF84CB46F0286), UINT64_C(0xCE5E34E32C5AA2BF), UINT64_C(0xC30F0784FE74FBD6), UINT64_C(0xA19ACA519DDDC5BB), UINT64_C(0x30CB6369D954B6AF), UINT64_C(0x20C72B2B1BA9F34A)}, {UINT64_C(0x0D9F6CC9421721EE), UINT64_C(0x5239E3D2701F3853), UINT64_C(0x48CF795D10A37D0D), UINT64_C(0x2822ACF8C1454415), UINT64_C(0x9EF24913F9392C27), UINT64_C(0x9317897633F3F273), UINT64_C(0x0AD1CAB2AADFE5DB), UINT64_C(0x2454195102019622)}}, {{UINT64_C(0x577E8E89122FE6A1), UINT64_C(0xDFED3EF029DCABC8), UINT64_C(0x91B0AE211F1EC613), UINT64_C(0xF4FB2E9F43EC585C), UINT64_C(0x402F8D435AFDC7FC), UINT64_C(0x7DF6E3F43BFC6DDF), UINT64_C(0x4B14B20B2094F2CE), UINT64_C(0x6621FA23C9F3FCE9)}, {UINT64_C(0xC167636B61482134), UINT64_C(0xC2D96AF4BD89AA34), UINT64_C(0x4D19C54777A1383E), UINT64_C(0x86476C72994B20EC), UINT64_C(0xD71188DA3611027E), UINT64_C(0xEEB9CB25BFA77EA0), UINT64_C(0x63E037067A9FFDFB), UINT64_C(0x52FBC7359E1F711D)}}, {{UINT64_C(0x4D58058F9DCD39C8), UINT64_C(0x742DCAC8560A57E3), UINT64_C(0x51314E8AC40593C3), UINT64_C(0xAA35CAF4BBE9F40F), UINT64_C(0xD0D06ACC7B4DF87C), UINT64_C(0xE02B48CB897586CC), UINT64_C(0x30AB25AB9F14AB3B), UINT64_C(0x77B9D8A22DCFFD42)}, {UINT64_C(0xDE1678E743F00508), UINT64_C(0x2F82D94EE59D0799), UINT64_C(0x1D68DC5F7D85FF61), UINT64_C(0xCCD286EAA577E85E), UINT64_C(0x7820217205653CE9), UINT64_C(0x80BCF42C4B096045), UINT64_C(0x983AC1DA8D9DC78C), UINT64_C(0x48ADE8D1757F008E)}}, {{UINT64_C(0xFE9CADC1F131C430), UINT64_C(0xCB4FACAED4ACF7F9), UINT64_C(0xA75B35B64B81AA0C), UINT64_C(0xDB73BF2A6132294C), UINT64_C(0xDC1998EE35FC4FBC), UINT64_C(0x1125CF55F1A96BA6), UINT64_C(0x800577A81AC0769D), UINT64_C(0x0AF21977E4CDAC1C)}, {UINT64_C(0x12CAE81D91DD37F9), UINT64_C(0x81F5BAF61A432775), UINT64_C(0x62A87C5D81CBCB7D), UINT64_C(0x781596EF2D311E47), UINT64_C(0xADA41A240EA6CE86), UINT64_C(0x064E561D9198BFEE), UINT64_C(0xD2EBB0D78784FC32), UINT64_C(0x60F7F749E00D527A)}}, {{UINT64_C(0xB6220879F9F5101B), UINT64_C(0x8E51E911ED750B14), UINT64_C(0x5A0FF85156B8B8BB), UINT64_C(0x6EFDB4CCE97F0F1B), UINT64_C(0xEF4E3272CFEE47C1), UINT64_C(0xFB33D3FFDB73FA56), UINT64_C(0x8702D241D5C182A7), UINT64_C(0x1342C905B061F4C9)}, {UINT64_C(0xCCFDFF8B40B3B920), UINT64_C(0xE01ADAA1234F25BE), UINT64_C(0x6EE2AFD9CA98B24D), UINT64_C(0x833C8017933CF022), UINT64_C(0x9446CDC88B7E88DA), UINT64_C(0x08A83DEB0252B0C4), UINT64_C(0x5AFAE687983B95BF), UINT64_C(0x417A1691BBF76F93)}}, {{UINT64_C(0xF1100073E270155C), UINT64_C(0x913B27AB37D73458), UINT64_C(0x0723B646F8799368), UINT64_C(0x891C7858B8599816), UINT64_C(0xBDCF3C7AAD13A257), UINT64_C(0xF473BEE8106E5B5A), UINT64_C(0xB093D48427722F06), UINT64_C(0x33895F5C8E4CF84D)}, {UINT64_C(0x530F59FE1A92A242), UINT64_C(0x703FDC05D5444E38), UINT64_C(0xEC6FB903A9B55C56), UINT64_C(0x102929BAECEFEF64), UINT64_C(0x76B9B329BFC1F153), UINT64_C(0x3F794AD77A32A9E4), UINT64_C(0x9A344BD7AD9D9F76), UINT64_C(0x1281308B8F22FE76)}}, {{UINT64_C(0xDBAD1D0455D6DFC4), UINT64_C(0x1674C09F78FB03A6), UINT64_C(0x10F038F004F4EB90), UINT64_C(0xD6F8CEBAC933F8C3), UINT64_C(0x6D3018D6322E4AE8), UINT64_C(0x3C0E8DD865FB0400), UINT64_C(0x0E04FEA5F8603F6E), UINT64_C(0x417F6C35CF3D2FBA)}, {UINT64_C(0x4F62D458C6DBF972), UINT64_C(0x1D66CC0B3C69018C), UINT64_C(0xDB741BC64F1297A2), UINT64_C(0x7EEDA8D5DDEC7115), UINT64_C(0x0B5D07B39A910CA8), UINT64_C(0x5D74BC7E3D0FA9E7), UINT64_C(0x0F3D10634DC25E76), UINT64_C(0x7BDF3F13DDD0F35E)}}, {{UINT64_C(0xF4B8E8F949A8E647), UINT64_C(0xD2045FF4C9C7F249), UINT64_C(0xA73E20731DFCE331), UINT64_C(0x538FE0C260186A35), UINT64_C(0xF6931385D44D55DC), UINT64_C(0xAA0FAE8BBD2D5D5C), UINT64_C(0xA1DF24510CE9E7B7), UINT64_C(0x453B0239F6E915DF)}, {UINT64_C(0x92E689FD4BD5604D), UINT64_C(0x302F7B7CEA5FB1A5), UINT64_C(0x9A065527C6C18BD5), UINT64_C(0xB6B9302338018472), UINT64_C(0xEC4F8E47775EFE83), UINT64_C(0x5EFED6CD5D557E9F), UINT64_C(0x883149A7F32DB82A), UINT64_C(0x32BB4DD5A83BA057)}}, {{UINT64_C(0xB45FB2398CE494A6), UINT64_C(0x6E80D72B015A171F), UINT64_C(0xE17A3D2B846810F0), UINT64_C(0x86A2C703C689398E), UINT64_C(0x163CC0EAF84177D3), UINT64_C(0xCFC5453608485195), UINT64_C(0x49ED48E3AEA228CD), UINT64_C(0x51D4CD9A5E05A3FA)}, {UINT64_C(0xD75C938E0A28C1F0), UINT64_C(0xE18FCBDB0D986264), UINT64_C(0x0E29546B0129A474), UINT64_C(0x718C5F10B4E6503E), UINT64_C(0x5BFFEF16E89FFD06), UINT64_C(0xD87F3E8D7ABFEFBE), UINT64_C(0x3E6EEBD8B05607DF), UINT64_C(0x1B3135D4030FC02D)}}, {{UINT64_C(0x1FCA9768AFD466ED), UINT64_C(0x3711CD99DDE4FE72), UINT64_C(0xFA6A96FBA0BC2449), UINT64_C(0xB4E3322DDF617AD1), UINT64_C(0x652400B538997D42), UINT64_C(0xE4033FDD5869744E), UINT64_C(0x5E56CF67F8CF5A3F), UINT64_C(0x0B68F41839950DFD)}, {UINT64_C(0x31F316B3921A1064), UINT64_C(0x084CF2C3860AB95E), UINT64_C(0x4FAE7CBD33A08792), UINT64_C(0x13E887AE5C2F1F4F), UINT64_C(0x1B4D941C5A2C1393), UINT64_C(0xE7043946BFDDC322), UINT64_C(0x2D73CD5BA801A880), UINT64_C(0x6CDC6BC245019EB0)}}, {{UINT64_C(0x68D9AE8272A9BDDF), UINT64_C(0x3EA7B5D0C4F79A39), UINT64_C(0x8A9E525DBFA9189D), UINT64_C(0xC4BCDB4F08088070), UINT64_C(0xD4F1B3D0F0019D99), UINT64_C(0xCD3981D03A21C513), UINT64_C(0x4A85B07A51146A17), UINT64_C(0x44E11FCBAC9373DE)}, {UINT64_C(0x45C28B85406B1F1D), UINT64_C(0x7669767BA598A7AB), UINT64_C(0xE4DC8F54CABA790E), UINT64_C(0x7259E49F4002264B), UINT64_C(0x54142E6D78A9F0E3), UINT64_C(0xFC3843172D74E9B1), UINT64_C(0x949A6E31471BA3C1), UINT64_C(0x2196E341269DBD46)}}, {{UINT64_C(0xF090B2141C85C152), UINT64_C(0xC66553E02980953D), UINT64_C(0x50050906908B9243), UINT64_C(0x489B07B818F1B4C3), UINT64_C(0x39C781DE4A6A7071), UINT64_C(0xC3FCC6B415FAF2A8), UINT64_C(0xC9A9D650DF30D339), UINT64_C(0x2BCF89690DC87B05)}, {UINT64_C(0x6BD111010D36DD59), UINT64_C(0x9AFD4507AF38D4C5), UINT64_C(0xE9A345A31FEE36E3), UINT64_C(0x141074A837454BA6), UINT64_C(0x89747031F603533F), UINT64_C(0xAB75320E897F9FA2), UINT64_C(0x52927CDF594481A4), UINT64_C(0x2C8FB10BBC2244A3)}}, {{UINT64_C(0x456358B81C40C77E), UINT64_C(0x26A15EA81732ED35), UINT64_C(0x36F26CBB9AEA6548), UINT64_C(0x6589AC51D7FAD4C1), UINT64_C(0x4804A1BC9067988D), UINT64_C(0x633F203E4219111A), UINT64_C(0xCD90D01C123C4BBE), UINT64_C(0x617EEF2782519788)}, {UINT64_C(0x8A7F22A79DDFBBB9), UINT64_C(0xF8CEDC4EC8F9E873), UINT64_C(0x547A5995F8B00FFD), UINT64_C(0xC6780AC53132F91D), UINT64_C(0xAD7113506DD34140), UINT64_C(0x1C0A71EC83D8A3E6), UINT64_C(0x687D67C786E0466B), UINT64_C(0x7CE57B02BD67492F)}}, {{UINT64_C(0xEF5A0FECC4A0F3CF), UINT64_C(0xCEB2194BE3C2A79F), UINT64_C(0x7371FF56D37AFB50), UINT64_C(0x881C254A68CFB693), UINT64_C(0x31F411B17A5B61F5), UINT64_C(0xC2141EEB13E15910), UINT64_C(0xD4B5D01575C6566F), UINT64_C(0x1335132C60C17F10)}, {UINT64_C(0x49A2D9CBF9EED825), UINT64_C(0x0514441AE7C41C5A), UINT64_C(0xCE9F19F7636BA847), UINT64_C(0x5517505744F44B74), UINT64_C(0x0ED9CB8AD26F9DEA), UINT64_C(0xBBB248C084BD07A6), UINT64_C(0x2C867FB19CD8A6C1), UINT64_C(0x230B41222186DB7C)}}, {{UINT64_C(0xC59AF140BC6B2647), UINT64_C(0xCD781156D5CA9D30), UINT64_C(0x479CFCF804C5C668), UINT64_C(0xEAC4A5C0B08BEEC5), UINT64_C(0x8772B60E6C67636A), UINT64_C(0x99266F13631A6EF3), UINT64_C(0x4DADE9DE0D368B05), UINT64_C(0x2F9488CBE42CB970)}, {UINT64_C(0x4882B1D4B6FB1965), UINT64_C(0x6423BBB4AF24AD57), UINT64_C(0xE52B487EC406CF8F), UINT64_C(0x502802ADD49D4935), UINT64_C(0x6832E21624D5128F), UINT64_C(0x42190CD4670EAE40), UINT64_C(0xA2D4FDB439258F40), UINT64_C(0x6127E350C5CADEEA)}}, }, { {{UINT64_C(0x160D95BD896F045C), UINT64_C(0xBB8AA2C5406D8CA3), UINT64_C(0x1B4E10B394F274E5), UINT64_C(0xE6D305446332DB6B), UINT64_C(0x95250D6A5AAE23C5), UINT64_C(0x67458318FC831AC1), UINT64_C(0x05D21C9B63510D9A), UINT64_C(0x2416562C20F2A3CC)}, {UINT64_C(0x8B666C7AD6DE2B6D), UINT64_C(0xC49D98D0E54B6B3C), UINT64_C(0x73315C3F90558A8E), UINT64_C(0x212910AD44E631C4), UINT64_C(0x7D2EBB7EBB053E42), UINT64_C(0x396AD2614FEF86C3), UINT64_C(0x90DA355C5E410BED), UINT64_C(0x344A24DD43C9183F)}}, {{UINT64_C(0x509715496AC2509A), UINT64_C(0xFCAF5541FDA9F8AF), UINT64_C(0xDDFDC6A9B3F2B1F5), UINT64_C(0xBCA36B59B7DA428B), UINT64_C(0xB55602BE357DCA59), UINT64_C(0x803C92A1CE692E5D), UINT64_C(0xCD723C3D6DC19967), UINT64_C(0x3EE4BC03F741820F)}, {UINT64_C(0x70113C23BB103F3B), UINT64_C(0x35FA914436553268), UINT64_C(0x505B79171C026E84), UINT64_C(0xA43E12561ED89D68), UINT64_C(0xC8AE5CFBC87289BE), UINT64_C(0xD573E0CF2B9C5072), UINT64_C(0x709B1C4B475FA7A4), UINT64_C(0x505ADF5981D07D11)}}, {{UINT64_C(0x1BC79E6AA4AFD6AC), UINT64_C(0x156C1B3626866C93), UINT64_C(0x6E4F2FB690A70847), UINT64_C(0x745824E0E37556C2), UINT64_C(0x384788E85BF6585C), UINT64_C(0xAD6A726B87EFA785), UINT64_C(0xD93A3B7E40FEB98E), UINT64_C(0x4BA6A352282EB335)}, {UINT64_C(0x36EE7727937FA288), UINT64_C(0xF1334DD2C0513862), UINT64_C(0x7AF1B32E30FB68F5), UINT64_C(0x2B0BAEFE3196B14D), UINT64_C(0x5E7BA8D721E84FA0), UINT64_C(0x4DA767CD256AE375), UINT64_C(0xA8D467F8E0F658DB), UINT64_C(0x7709039E20DB1855)}}, {{UINT64_C(0x6155BDC4B26EE5F4), UINT64_C(0xF0CFD2B7C48A3913), UINT64_C(0x75AABCA163BFB3E5), UINT64_C(0x9232746DC525DA22), UINT64_C(0x5F00A6CD333F2B14), UINT64_C(0xB3216C2BF8ECA91E), UINT64_C(0x9A1F1EE8F6E4FF19), UINT64_C(0x3C76ADCFB0074F5D)}, {UINT64_C(0xA414BFFB45309788), UINT64_C(0x83EF3C3F86539F4F), UINT64_C(0x0AB8CEEA576C4A69), UINT64_C(0xA01CC45813BEF0E4), UINT64_C(0x855B7F00EA181987), UINT64_C(0xA97F14A9E30F184F), UINT64_C(0xB17DF2F0554D467D), UINT64_C(0x29F0A944D6C8100D)}}, {{UINT64_C(0x57796871C7D083C9), UINT64_C(0xB83CD7FF0DA74190), UINT64_C(0xA077968F97DC4A71), UINT64_C(0xC27429EC08ACDC2D), UINT64_C(0x04996DF62B52DFEE), UINT64_C(0x13511C3A1C182059), UINT64_C(0xCC27218ACEFA8F7F), UINT64_C(0x0757BD45A0E51331)}, {UINT64_C(0x05F1D65D453DD761), UINT64_C(0x71D57417F3C5F5DF), UINT64_C(0x0C1E204338FA1AE7), UINT64_C(0xA68A6F2E36E7BB29), UINT64_C(0x3F3CA00F221EA420), UINT64_C(0x840830F61484F503), UINT64_C(0xA011EA6118380FC5), UINT64_C(0x63E08325D4D5F0B4)}}, {{UINT64_C(0xAC4F176AA5352F43), UINT64_C(0x2C0A1D79F5346C89), UINT64_C(0x3F16B2ECEA7357BC), UINT64_C(0x1FE6E8239CB644F4), UINT64_C(0x54E68BB4E2C9912E), UINT64_C(0x82B35E8E98E581AE), UINT64_C(0xD855E028D6611B81), UINT64_C(0x3D420591A8C7ABE1)}, {UINT64_C(0x71326CB4A4D7C106), UINT64_C(0x5BA8407F7E21F3EA), UINT64_C(0xD33581D740DA0D53), UINT64_C(0x7AB205460C1E7D99), UINT64_C(0x71438057CB0075B5), UINT64_C(0x2F9AD50CCB952FEE), UINT64_C(0xFDCF4A128B942A98), UINT64_C(0x025CFA1BD8BB5BE5)}}, {{UINT64_C(0x2BF4ABF727BF5931), UINT64_C(0x78BD4315D080A1BA), UINT64_C(0x1EB55607F12B24D0), UINT64_C(0xB7BC25D68E8BAB49), UINT64_C(0x01B666AE60E68A74), UINT64_C(0x9E1E74179058E10D), UINT64_C(0x5D2493D0AB695D1E), UINT64_C(0x714D7BB5271B7FBF)}, {UINT64_C(0x869B52F63BD07521), UINT64_C(0x3413A47C038E8A90), UINT64_C(0x2B7724D4C2B6D60D), UINT64_C(0xD500A48CB984B181), UINT64_C(0xDCD8259499ED9E13), UINT64_C(0x33C480BA09397DD9), UINT64_C(0xF98DA63DB36CB025), UINT64_C(0x0593108A0C33FD92)}}, {{UINT64_C(0xE3BBCCB7F01AB893), UINT64_C(0x3D8D3BD26CE61B0B), UINT64_C(0xB030CE07FC00DB91), UINT64_C(0x78ADD938AA51D38B), UINT64_C(0x8FA757976CAF34CC), UINT64_C(0x28C34C7E494B4CCE), UINT64_C(0xECD5F38579091116), UINT64_C(0x455FD9533512B9B1)}, {UINT64_C(0x1D2150EF3CD57BE0), UINT64_C(0xF130B2A043CEF565), UINT64_C(0x1146159CFA4A4082), UINT64_C(0xDE949D6AD6BB7E30), UINT64_C(0xEB8984ED40A2A53B), UINT64_C(0xB9E72FE4B920CDBE), UINT64_C(0xA507DDCAB43A51A9), UINT64_C(0x3EB7D79F6C7C6F7F)}}, {{UINT64_C(0xDF75FE14DD356637), UINT64_C(0x4B21206BFBC9E9DB), UINT64_C(0x0A33BCF3A729BB2F), UINT64_C(0xA61A363C686F49F2), UINT64_C(0x426A460334BD498C), UINT64_C(0xE87EDA60705F7CD3), UINT64_C(0xF9D24A5AE633E9A7), UINT64_C(0x52063D93A4325C1D)}, {UINT64_C(0x02890EEC23EEB132), UINT64_C(0x00430E865D39DDFD), UINT64_C(0x118E18F6A1E47638), UINT64_C(0xBB38E8C75806CD2F), UINT64_C(0xB7E5375EF7CE9486), UINT64_C(0x73DAA9EBFDE35E82), UINT64_C(0x117E476182070D71), UINT64_C(0x317DF0BE915BBD57)}}, {{UINT64_C(0xF691548725B74127), UINT64_C(0x4333E7F518162D83), UINT64_C(0xB435BEF9A429665E), UINT64_C(0xEEE9B7B720B9D358), UINT64_C(0x436ABB8BF8D1D44F), UINT64_C(0xD1219F9ABF38B81F), UINT64_C(0x7CEE70639035DE38), UINT64_C(0x34129008B341FFDA)}, {UINT64_C(0x6595A1B099745C5B), UINT64_C(0x07DF297A2C0685BB), UINT64_C(0xEE85C714998110AD), UINT64_C(0xD251E587E2A8AD4E), UINT64_C(0x9A38F9DCEC4D02C1), UINT64_C(0x60DA566FCCDAF4C8), UINT64_C(0x1BD9A21A90B08CA2), UINT64_C(0x6D9414AEE97F4EA0)}}, {{UINT64_C(0xCBFAA86174973250), UINT64_C(0xC58A0F6BAB15AA60), UINT64_C(0xC00F822DFDB7A15D), UINT64_C(0xAEA74910FA067DEF), UINT64_C(0x3750367B81F3EFC5), UINT64_C(0x3183E3E8AFC6EC7C), UINT64_C(0xFB62717ADA10CD9F), UINT64_C(0x40431C1D6EEC9774)}, {UINT64_C(0x423E731005914824), UINT64_C(0xA4F7A9789DE23908), UINT64_C(0xC151A73C7D5D18AA), UINT64_C(0x1B85B7CBED1EAC6B), UINT64_C(0xF25CAF8C075066C4), UINT64_C(0x99508D708004809B), UINT64_C(0x6BEDC19F212271C6), UINT64_C(0x2CCDAB3977A5AE84)}}, {{UINT64_C(0x14203BEC23389925), UINT64_C(0xFBCA94CFCF059388), UINT64_C(0x17626B408124F30F), UINT64_C(0x2208F6E5C1C98EB6), UINT64_C(0x9B385200961F4C48), UINT64_C(0x1C9F33E8002E5C7A), UINT64_C(0xC426A94058B6DD91), UINT64_C(0x6DF740E51CEC7286)}, {UINT64_C(0xF939798687E56C60), UINT64_C(0x84425935587728F6), UINT64_C(0x394A3A012FE267FB), UINT64_C(0xB9C6481FD451CD8E), UINT64_C(0xA6AB4F4B5340AAC8), UINT64_C(0xD7FD96759B85FF63), UINT64_C(0x3D3AE591AC5AEC86), UINT64_C(0x43283823B96673F7)}}, {{UINT64_C(0x24214D2374E61BA9), UINT64_C(0xB41CFB58F69ED123), UINT64_C(0x8E91FE0254F5F407), UINT64_C(0xFB9899364F84200B), UINT64_C(0xAAE985CE024E62F0), UINT64_C(0x896815EDA0BB20F6), UINT64_C(0x3536095B3DF1E5BC), UINT64_C(0x31C5AFA09E1EB847)}, {UINT64_C(0x5C32910FC2B9B4F0), UINT64_C(0x32ABA81450DBB2E8), UINT64_C(0x17E2B52F6AAF8A27), UINT64_C(0x142E63AC111CD6C3), UINT64_C(0x15D5F29722B6D227), UINT64_C(0x22380A783C14CE28), UINT64_C(0x29F4951C5249F727), UINT64_C(0x24C25987274839DE)}}, {{UINT64_C(0x13F552E914C6CA73), UINT64_C(0xCE9659270B154556), UINT64_C(0x330E6D5983EE34E2), UINT64_C(0xFB7B6051E8035AD6), UINT64_C(0xC58FBCA85B2D081D), UINT64_C(0x254FEDD191D78C8E), UINT64_C(0x0438FF98CF877F74), UINT64_C(0x479CEE4A8BB12DC9)}, {UINT64_C(0x1855A1C37A0CBCDD), UINT64_C(0x3667FFBB000FFC35), UINT64_C(0xC053A4BFF880E9C0), UINT64_C(0xF8E1BCC105AEFE0E), UINT64_C(0x1AFEE0F20B65DBBC), UINT64_C(0x63ACB97B9E945F96), UINT64_C(0xDFC8096580B8F0BA), UINT64_C(0x12A145EBE919BE03)}}, {{UINT64_C(0x8BBD02E8C6008C86), UINT64_C(0xB7ACE6C4516BDD2F), UINT64_C(0x914AE008E5036467), UINT64_C(0xD06CF39287987C22), UINT64_C(0x0F78C12DC71FFCB4), UINT64_C(0xB4612FBBCBF7A3B3), UINT64_C(0xB6E692557B711004), UINT64_C(0x68CEE9EC1EA5ED45)}, {UINT64_C(0x45E4A8D15009FAD4), UINT64_C(0x1D303BD7B1458DF2), UINT64_C(0x388523D9BE13EFBE), UINT64_C(0xAC9F6D4AC15147CD), UINT64_C(0x551F34709ECFA216), UINT64_C(0x0FF1AA33AC9311F4), UINT64_C(0x34EED866B8D84926), UINT64_C(0x6BD5ED1C72C2CC5C)}}, {{UINT64_C(0xA283EC1A9BDD8695), UINT64_C(0x451A730BA599147A), UINT64_C(0x9B6CC56ADA71F52B), UINT64_C(0xB1002CF577D55722), UINT64_C(0x354328CD07A8D105), UINT64_C(0x86B04CA87A21026C), UINT64_C(0x53BADA3D50EC9794), UINT64_C(0x0BD230C8BBC32D2B)}, {UINT64_C(0x322E97FAF7E3C388), UINT64_C(0xA0F06207AD6FEB4F), UINT64_C(0x3B05C04E9A128AA1), UINT64_C(0x05DE3C902214D1AB), UINT64_C(0x632C92A7E69A562B), UINT64_C(0xE9F9DEE06BEFC0B6), UINT64_C(0xD269F54763E05275), UINT64_C(0x04B2E1AB6C56EC35)}}, }, { {{UINT64_C(0x9DB921FCFEB514D4), UINT64_C(0x00AC3CB4485F4F30), UINT64_C(0x0DAFF6F9FED6B15B), UINT64_C(0x74C16AF59A5E67CB), UINT64_C(0xAA73C142A8275392), UINT64_C(0xBF53E45446A65634), UINT64_C(0x2819387F03D87479), UINT64_C(0x4BC9293DB495DDDB)}, {UINT64_C(0x755EC69618AE902B), UINT64_C(0x147291751E9C6398), UINT64_C(0x82396B3F29508353), UINT64_C(0x932903AE08614C4D), UINT64_C(0xA4B24D6450BC308A), UINT64_C(0xA89DAA2F88BDA41E), UINT64_C(0x94FC7C4684F8A09A), UINT64_C(0x1054948EB4931402)}}, {{UINT64_C(0xF3E0BB8F8A7BA306), UINT64_C(0xC31FDE41A45240B6), UINT64_C(0x05AD7E1AE1755B86), UINT64_C(0xDDBFC1F9BCDD1230), UINT64_C(0x8006BDBBB4F8B744), UINT64_C(0x865829028ADE1D9A), UINT64_C(0x8FEFE3B7078339E6), UINT64_C(0x342996F446216EA5)}, {UINT64_C(0xE0E1B5B39B3D4651), UINT64_C(0xB2FC080CAABBE714), UINT64_C(0xC720BD5EA522F01C), UINT64_C(0x11D0543B95F65EBE), UINT64_C(0x0880103C484D4123), UINT64_C(0xD3F969F396976F8B), UINT64_C(0x614855B7FDBA1CC1), UINT64_C(0x56D4EEFEB3EC4B2E)}}, {{UINT64_C(0x029DC51C3894EB7E), UINT64_C(0xF4AAE8789D9876B7), UINT64_C(0x0FCD3C74E2388A33), UINT64_C(0xAD4C4CF791E31014), UINT64_C(0x34F61FF111977D22), UINT64_C(0x984416FD7AAFC8D7), UINT64_C(0x4A4413615DAE6048), UINT64_C(0x50D2387B7B1AFA0C)}, {UINT64_C(0xD8BE85A1BB8211DB), UINT64_C(0x195092C3DD31FED9), UINT64_C(0x1F6FE6ABC1764C23), UINT64_C(0x6A25DE233F067D75), UINT64_C(0x8DB614AAA244AA1D), UINT64_C(0xAB0D747325B11975), UINT64_C(0x714067C5C036EA42), UINT64_C(0x379935D66F3B1132)}}, {{UINT64_C(0x1E8339D48E762CB5), UINT64_C(0x1857091C0DF30209), UINT64_C(0x2E4AC9A729523926), UINT64_C(0x5983F6D2B7D5A5BB), UINT64_C(0xA99D8D11F31262FE), UINT64_C(0xE722945DA5CAB7C2), UINT64_C(0x3196BFBDE8767862), UINT64_C(0x43707848A59924F6)}, {UINT64_C(0x8F0E368AC78D8788), UINT64_C(0x50811A264BF7DA53), UINT64_C(0x9E0CB8FEDCA664FF), UINT64_C(0xD2B8DFA082EDADD5), UINT64_C(0x09C457724A0C48E4), UINT64_C(0x6EC46A5C22511381), UINT64_C(0xF5810BB4313E87CC), UINT64_C(0x20C5F006AB5A6BAB)}}, {{UINT64_C(0x76C6F60AD87A06AF), UINT64_C(0xAB7144AD78FDEBB5), UINT64_C(0x956C36E75646A659), UINT64_C(0x5477D0F6B785E745), UINT64_C(0xFE9FF2324594BC06), UINT64_C(0x1783B9A03039A102), UINT64_C(0xD41E6C5A90DB0AB3), UINT64_C(0x43749FB47550121F)}, {UINT64_C(0xB7C6D143D17CA661), UINT64_C(0xB1591F572B73135D), UINT64_C(0xF03232C9C62DFF62), UINT64_C(0xD3D1C629CAF25761), UINT64_C(0xF633733F4B67D224), UINT64_C(0xCFBBC0D0764EBF02), UINT64_C(0x41CC07DD63C7EE19), UINT64_C(0x53BC8A63E8B36CB5)}}, {{UINT64_C(0x1E9F596C74CAF7FF), UINT64_C(0x8088EF968C049872), UINT64_C(0x3A9EA96ECE1208BF), UINT64_C(0x892C44E715DAF25D), UINT64_C(0xAF6E1EBF5E996AE4), UINT64_C(0x0A6EEE3CBAC1A746), UINT64_C(0x9D471CB1CAF162F6), UINT64_C(0x13F7192AE6BE08F1)}, {UINT64_C(0xCE44C77A49FBB46D), UINT64_C(0xA7B9136F5A04A72E), UINT64_C(0x6CA33EC42B937703), UINT64_C(0xD4B3AAB5E8685FFF), UINT64_C(0x8EFE02B3E7207EF1), UINT64_C(0xB138C46DB83D0E5A), UINT64_C(0xB73E636AF6C29885), UINT64_C(0x5C1E124272567A55)}}, {{UINT64_C(0xDD967B6A15137904), UINT64_C(0x4588BAA76969B92D), UINT64_C(0x99580A4C5E2BA269), UINT64_C(0xE80802B4915645CD), UINT64_C(0x7246F3F2FB6591AE), UINT64_C(0x68C2F8C6CC25F464), UINT64_C(0xB5172E904905AE3C), UINT64_C(0x6860BBDD675591B3)}, {UINT64_C(0x68BE15C0626489DF), UINT64_C(0x65EA3D880C737BEB), UINT64_C(0x9EF8B6CC32B5081D), UINT64_C(0xA6238BB1B16FF753), UINT64_C(0x22191589E17264C8), UINT64_C(0xDBDAE7A3903E28DC), UINT64_C(0xB36FCD91F2DBCB8E), UINT64_C(0x01EBFAC475D33835)}}, {{UINT64_C(0x7B0EE204BC820AEC), UINT64_C(0x500DA7FC8568C4E8), UINT64_C(0x992A6429B0961D29), UINT64_C(0xA3CAE853E65D7FDA), UINT64_C(0x7B6F5E7934197E58), UINT64_C(0x90D37EACC4E849CB), UINT64_C(0xE01D14AF0106FD33), UINT64_C(0x4BE8367980027E17)}, {UINT64_C(0xA412BA38A85EE145), UINT64_C(0x219D461E5097CD50), UINT64_C(0xAD42175C29ECFCDA), UINT64_C(0xB1DEF962D04FAEFA), UINT64_C(0x5B527A4BA95983C1), UINT64_C(0x48A06C96BB20AB6D), UINT64_C(0x7BAD34CD1FB83513), UINT64_C(0x458294DFFDF018ED)}}, {{UINT64_C(0x1D1EBD7EA695A157), UINT64_C(0x296DD049C52D5ED9), UINT64_C(0x8958F5B00BE33F05), UINT64_C(0x6B7F7204D37E60D7), UINT64_C(0x446F7B95C668C85A), UINT64_C(0xB6E53B2020F60396), UINT64_C(0x5738FF4E8E621E73), UINT64_C(0x05DBD4958CD9F00C)}, {UINT64_C(0x645AD9D6CFECAA9D), UINT64_C(0x01CB8E093CEF6673), UINT64_C(0x2851ED4E06D13DA7), UINT64_C(0x61FE9A95CB18DFCB), UINT64_C(0x62CC060FF903CBFE), UINT64_C(0x121B6E4EF14B0B1B), UINT64_C(0x8CAB6654C4DEC6F3), UINT64_C(0x718809984B40D6D4)}}, {{UINT64_C(0xEE5CA2A49583FB84), UINT64_C(0xEF16CD074462D044), UINT64_C(0x1C1D599921EBB18F), UINT64_C(0x66D7586B0AACAD30), UINT64_C(0x8EDF0A452EB12D8B), UINT64_C(0x1A320A44223DE805), UINT64_C(0x0A389DA0A0C2F092), UINT64_C(0x274FF5417E68A2D9)}, {UINT64_C(0x6CC34B5330395E54), UINT64_C(0x881E630B8C112729), UINT64_C(0x801E1CAD70E4C811), UINT64_C(0xA527AE8291C2E90A), UINT64_C(0x93179BC8562AE094), UINT64_C(0xCE68A130148F4F44), UINT64_C(0xD8CA2ED032F8CCFD), UINT64_C(0x0415FDA40527F82B)}}, {{UINT64_C(0x9F5CA1FD25AED793), UINT64_C(0x5B95B9AA09C49711), UINT64_C(0x386C8FBBB968168C), UINT64_C(0xC6B27D7DBDC778F4), UINT64_C(0xBD5439A2321A9D97), UINT64_C(0xEA40A5FEDC4BA6A0), UINT64_C(0x94913F0F962508AA), UINT64_C(0x0D2DD91AB247396E)}, {UINT64_C(0x1F459CF117C64EFF), UINT64_C(0x02E10B550137E003), UINT64_C(0xFC375FE460F82DFB), UINT64_C(0x9CCA9D6E4631ECED), UINT64_C(0x575C197CE5053FDA), UINT64_C(0x2EA3ECEE0A5B9670), UINT64_C(0xE69DECA1A6F50038), UINT64_C(0x32F452FBE8EDDA74)}}, {{UINT64_C(0x20980611D9E4C490), UINT64_C(0x827D79F174825DDD), UINT64_C(0xB4604E04218E0B22), UINT64_C(0x0A7E5E3A1F4F1752), UINT64_C(0x50260245243D8298), UINT64_C(0xEBF01C841A2101B7), UINT64_C(0x369E69AE69E1A262), UINT64_C(0x5FD078684C1C960A)}, {UINT64_C(0xC542D34BA8F15793), UINT64_C(0x08F14B8FE393381E), UINT64_C(0xB6E06E97F855CD9F), UINT64_C(0x47A195EDA6CEE8C0), UINT64_C(0x8776F026B05A740D), UINT64_C(0x811D7AD6AC8EC060), UINT64_C(0xA61E5D2729002EFB), UINT64_C(0x3D51D70E0C78E746)}}, {{UINT64_C(0xC0D70275C99E1438), UINT64_C(0x0E95C0ECFD5EE6B2), UINT64_C(0xE14F58B039E6733E), UINT64_C(0x057B179EB4941C24), UINT64_C(0x5E12F07F93C0A5EF), UINT64_C(0xF600367D05E72CAB), UINT64_C(0x89FCB008899F259F), UINT64_C(0x2654687C9C3E30E7)}, {UINT64_C(0x85B7F9B73F148638), UINT64_C(0x8088F4F29EAEE0B4), UINT64_C(0xA741D2703A7CAFD7), UINT64_C(0x8973A806DB5B5339), UINT64_C(0xAAF4E75C22DDCAA9), UINT64_C(0xA2450A79CBB763CB), UINT64_C(0xBE1B3F2A016E5E3D), UINT64_C(0x4B1061B2CCECC258)}}, {{UINT64_C(0x2F28689AC9C8A23A), UINT64_C(0xD8FB298059341E8C), UINT64_C(0xD3617B26375ACDAD), UINT64_C(0x314FA469513ED120), UINT64_C(0xFEB30225E2F8DF55), UINT64_C(0x29E001AF1F639D66), UINT64_C(0xA175DDD4DBDC9737), UINT64_C(0x6A778E4F8015C048)}, {UINT64_C(0x4612651ECC55DBA8), UINT64_C(0xE853ADDE2B3C7B06), UINT64_C(0x14B2D0B76E0B2E41), UINT64_C(0xCA4F0872EE804E0B), UINT64_C(0xEA2AFCA5F893D931), UINT64_C(0x6EB018919BE51B1A), UINT64_C(0xB0D8500D1F2769F1), UINT64_C(0x1303BA01A47FFC13)}}, {{UINT64_C(0xBED58425B43811EA), UINT64_C(0x57D7E5364E52E1D6), UINT64_C(0x93DE67FEBF5EF913), UINT64_C(0x2CCDA4E32713FC52), UINT64_C(0xC5C1B6F08F1FA4BB), UINT64_C(0xA267A790A725295F), UINT64_C(0x13BB7D112D219844), UINT64_C(0x7FAF96A275415602)}, {UINT64_C(0x7879EDF44E4C3CE4), UINT64_C(0x9CD59A0D3BF094F7), UINT64_C(0xD7976DEB4A882A52), UINT64_C(0x19EBBC10BA65AFBA), UINT64_C(0xABC373502D48D187), UINT64_C(0x5D5CA6C31236B5F9), UINT64_C(0xDFA55AC2915EAF61), UINT64_C(0x6C54515EE8735632)}}, {{UINT64_C(0xB1CD06DEDC21B326), UINT64_C(0xD6F6F904E4AE6148), UINT64_C(0x941B7545FA13BE52), UINT64_C(0xD527042FDF7CE61B), UINT64_C(0x1AB4495ED9C9BBDB), UINT64_C(0xA5CBE7C5BF6582BE), UINT64_C(0x1D0B5BA241A1DA90), UINT64_C(0x6F99305C0A810954)}, {UINT64_C(0x866C254F40D3954D), UINT64_C(0x5DEBFF4D2E5A123D), UINT64_C(0x14AB6FB8AD23124C), UINT64_C(0xAE3C32B6C6B13624), UINT64_C(0x74075FF6707528BA), UINT64_C(0x55DA7227E91D5097), UINT64_C(0x450D38486A9C3469), UINT64_C(0x15818A1E2313EBA2)}}, }, { {{UINT64_C(0x27BE68B414125D01), UINT64_C(0x875491142482BF94), UINT64_C(0xE8B709318D0C8AF2), UINT64_C(0xF38D32BF11344A8B), UINT64_C(0xCB7CDFD163136143), UINT64_C(0x717954CDA17D7DE5), UINT64_C(0xD65BDD447C10DF5E), UINT64_C(0x15C45F814E821D20)}, {UINT64_C(0x7D425E66D9C326C4), UINT64_C(0xEEA0D61A1C7B4BCD), UINT64_C(0x41A8654A8707E9C8), UINT64_C(0xBA9E8F7C0B4A8F46), UINT64_C(0xB96A24FCF2739871), UINT64_C(0xA9BA022FFD9C9D58), UINT64_C(0x59F7C2972C9AE418), UINT64_C(0x6B82C284B0CDD468)}}, {{UINT64_C(0xD4C5486A58483FA2), UINT64_C(0x8F140259EDC6A022), UINT64_C(0xE451FB0CC43116F8), UINT64_C(0x5368FE4765DF7628), UINT64_C(0x0F0DCC6DBC70855A), UINT64_C(0x0E726D87472BFE81), UINT64_C(0x9C64B7163C024F88), UINT64_C(0x1ABAE0D814FF6089)}, {UINT64_C(0xC0ABA6B3B5A15618), UINT64_C(0x71FAA6DF65CE0681), UINT64_C(0x3199E2C939A6F5BF), UINT64_C(0xD8EBFEDA85BCF47E), UINT64_C(0xC3D57D3BC262A35F), UINT64_C(0xF0D6338E0269DFDE), UINT64_C(0x09072E1E0E6D0BF0), UINT64_C(0x0980E2914128B1BA)}}, {{UINT64_C(0x6A2023F84DE44CB0), UINT64_C(0xEA995754247A7D5B), UINT64_C(0xD850D17999102324), UINT64_C(0x126FDFE2A906B038), UINT64_C(0x4C3B3696577DF168), UINT64_C(0x9D3A9E079E3853EA), UINT64_C(0xBC21A51E40ACE3A1), UINT64_C(0x165065A3C51DD652)}, {UINT64_C(0xF5B255B9E4BBD96B), UINT64_C(0xC1E91F803D94F9D6), UINT64_C(0x7DDB5BB784768FCE), UINT64_C(0x33F7ADF65CA35823), UINT64_C(0x3667E17433097882), UINT64_C(0x5FDC3BA18F241DC1), UINT64_C(0x41F5C737172CD7FC), UINT64_C(0x64D4116E7986FE8D)}}, {{UINT64_C(0x2FF0F5058C89DED4), UINT64_C(0x06507852BBBD0897), UINT64_C(0x628865211FAD2908), UINT64_C(0xB8A1362E9F5F4D13), UINT64_C(0x83075FE66E9856FD), UINT64_C(0x06B0BA277CCEDC4D), UINT64_C(0x09B81B5152750DD5), UINT64_C(0x12A96BB0CB59D8F1)}, {UINT64_C(0xCA4BC3A5DB43958B), UINT64_C(0x6456C11B94C12E88), UINT64_C(0x7EFA99FFAC330EE6), UINT64_C(0x56973CADF40AEBEC), UINT64_C(0x62522E6BC5D73A2A), UINT64_C(0xF4538CA890F4378B), UINT64_C(0xE5447FCB1BA585B1), UINT64_C(0x6C3F50C218376AB9)}}, {{UINT64_C(0xC0156EB6E1720FC1), UINT64_C(0xE0F821EEFFEE4BA3), UINT64_C(0xC0B4EF97D0B530C5), UINT64_C(0x003BB1161A47CDAA), UINT64_C(0xA5837856464EC84B), UINT64_C(0xD65BA195E0E63A97), UINT64_C(0xB22C0F5FA375112F), UINT64_C(0x18D81698A7F7BDC1)}, {UINT64_C(0x5FD3C5E591E78A50), UINT64_C(0xE5EE4EB997D10A66), UINT64_C(0xF74BD0859FA305DA), UINT64_C(0x519BC6765485E038), UINT64_C(0x7D3E6E21DE116ECE), UINT64_C(0x10D68B8C4221F32B), UINT64_C(0xE41D74A9565C1614), UINT64_C(0x191561DD2E728554)}}, {{UINT64_C(0x527CD25501C9BD19), UINT64_C(0x01879769913FA68C), UINT64_C(0xE9BF7700D76B7FCB), UINT64_C(0xCEA4EE4102B92508), UINT64_C(0x739154CC34D015A1), UINT64_C(0xD1F1F1AC44C3F451), UINT64_C(0x1DF5A4AA7905A732), UINT64_C(0x081AFEB8B67F7057)}, {UINT64_C(0x8A0EDEC0671D0F79), UINT64_C(0xE99B4B79442928EE), UINT64_C(0x4A722AC72C1557B0), UINT64_C(0x95070ED603021BBE), UINT64_C(0x9E1E6418672C3F05), UINT64_C(0x8733726389B0C1A6), UINT64_C(0xB67B8831008A3B13), UINT64_C(0x4F44986BB059BE83)}}, {{UINT64_C(0x09A5B3C92CB15C97), UINT64_C(0x43E1B906F9B4777D), UINT64_C(0x3BAB3A6466A5BC88), UINT64_C(0x276632BB7D82E655), UINT64_C(0xD09388D1D97D5CE2), UINT64_C(0x26B0339DCA1248C5), UINT64_C(0x05F0A24111F2A8BB), UINT64_C(0x1F498EBAB7F68A8A)}, {UINT64_C(0x265C09CFD0DD019B), UINT64_C(0x01A0FE11958B91C2), UINT64_C(0xF55D56ED5A389069), UINT64_C(0x9E5DE2CA1A18A889), UINT64_C(0x4F4C9D39065A1799), UINT64_C(0xB5CB916F7213B184), UINT64_C(0x1941E104B5D0926E), UINT64_C(0x6EC375E82E03CFB8)}}, {{UINT64_C(0x80F444EDB57B1B5D), UINT64_C(0x2E5315E77D4EFD6C), UINT64_C(0x9272EBA7868CC07F), UINT64_C(0x19EC814D31A8EA6E), UINT64_C(0x9EE92D03F29FCDBF), UINT64_C(0xDBF8AB6B2E8408C3), UINT64_C(0xA0E845FBA103D807), UINT64_C(0x2A6A6B311CA3992E)}, {UINT64_C(0xF58B6F6C1C391D76), UINT64_C(0x9E385BB213687C07), UINT64_C(0xF6EE205B6BAEBBF5), UINT64_C(0xB2D7D412A706C6C5), UINT64_C(0xCFE32A97CD887640), UINT64_C(0x2783CFE9D93A1136), UINT64_C(0x601DE429F4D34FA7), UINT64_C(0x1E433BB86EA85459)}}, {{UINT64_C(0x8BCB9073D618AD6A), UINT64_C(0x84CDBD19996FE814), UINT64_C(0xB1F5FFDB166793B9), UINT64_C(0x5FA22BADEDE62FB4), UINT64_C(0xC1C1C3947019C1EB), UINT64_C(0x7A02619108AA77F0), UINT64_C(0x026EE69DA32E5855), UINT64_C(0x5356399780B81284)}, {UINT64_C(0xF46C064F5E0B9ABB), UINT64_C(0x39332D2CE8A0FE23), UINT64_C(0xBD50EE1C0BE9ECC5), UINT64_C(0x9B4A4CC08DE1B166), UINT64_C(0x4BBA7B7B56713AAF), UINT64_C(0x2CA8EF64F1C76C54), UINT64_C(0x1022D9F4CEB309E8), UINT64_C(0x4F1375BC15A18D10)}}, {{UINT64_C(0x09CF4EBA9198331C), UINT64_C(0x232CA52D7D60EA39), UINT64_C(0x2C4780892FC3A96E), UINT64_C(0xC7F9A36C80CB5721), UINT64_C(0xEDA98A0C2D8802BE), UINT64_C(0xC74130483C41B152), UINT64_C(0x479DF24FA74D701C), UINT64_C(0x7A92C3F151869D52)}, {UINT64_C(0xC1AB98B3F00BA577), UINT64_C(0x5A687BA4B7778354), UINT64_C(0xF5A77B64157FB1D2), UINT64_C(0xB9F746AE81BBAFEE), UINT64_C(0xBA33EBDC1BEE9D2D), UINT64_C(0x6FE41BC1D046655C), UINT64_C(0x2A8CB913ACC3A496), UINT64_C(0x7CBC537D6AC2B374)}}, {{UINT64_C(0x55C19B5E538ED4B1), UINT64_C(0x6AA0E45661891DAE), UINT64_C(0xD77CA0C2CD971AE7), UINT64_C(0xB23434F770294F78), UINT64_C(0x3B87D75914D25513), UINT64_C(0x2A37CFD28B94F435), UINT64_C(0xF63B09623F3F32FF), UINT64_C(0x6387EFB998B5916A)}, {UINT64_C(0xB2826971F35951D8), UINT64_C(0xD1DDCB0A996C5518), UINT64_C(0xA5E88B2D3669304A), UINT64_C(0xEA5685BDC53DEDB7), UINT64_C(0x2DD72E086A446FA0), UINT64_C(0xFA2689EFEA074FF8), UINT64_C(0xC3430BBE7A8302C3), UINT64_C(0x098A5073E98D1CD5)}}, {{UINT64_C(0xCF5D95C244EE6CC4), UINT64_C(0x5D5278B5CE04027F), UINT64_C(0xEA0F4D01C1D26E0E), UINT64_C(0xA79154F3AB2E71FB), UINT64_C(0x27BBA6EEDC59126C), UINT64_C(0x269EB8B7632BEE8F), UINT64_C(0xD589400853BB6C55), UINT64_C(0x7698DA12222DDE2B)}, {UINT64_C(0x826DF5A3B5D03BC6), UINT64_C(0xFAADAD56E126406F), UINT64_C(0x2EC70B6468849D5F), UINT64_C(0x9DDF89911D799E78), UINT64_C(0xB2AEAFC5D4DE8AC5), UINT64_C(0x7A167F8FE114AD71), UINT64_C(0x9DCD07BC13AA2EDF), UINT64_C(0x531A5A3D6651BD12)}}, {{UINT64_C(0xDE7CE2AD82E7C32C), UINT64_C(0x2C9908EA2D0742C3), UINT64_C(0xDA528D69056F7C69), UINT64_C(0x1FE6E3EB704BFDCD), UINT64_C(0x9C1EEDDF79B0F586), UINT64_C(0x0F6F81FB481E83F6), UINT64_C(0x17DB66C0E007286E), UINT64_C(0x3607EC131802CD99)}, {UINT64_C(0xCCB2B85C6F216120), UINT64_C(0x7B9EA544E51C2036), UINT64_C(0xB14CD3615428771E), UINT64_C(0x978C458E03C6BD02), UINT64_C(0xEA43C163EACEB25A), UINT64_C(0xB590D2D76B85CBB9), UINT64_C(0x10B8EB8619C45D61), UINT64_C(0x2E5AF3E0A1FC40DE)}}, {{UINT64_C(0x465C626190D2EA3E), UINT64_C(0x6B10583C3E11EFC6), UINT64_C(0x1E3A113224958F6C), UINT64_C(0xCB895C3BB3336EA5), UINT64_C(0xCA995E605F89EEA1), UINT64_C(0x725FB30B199719B0), UINT64_C(0xC6897E80F8061D92), UINT64_C(0x56680A532CFBFB75)}, {UINT64_C(0xA770755DD13E5E25), UINT64_C(0xC33F71B0FB78D704), UINT64_C(0x7B2322E7A101B288), UINT64_C(0x03ED4A92C1075A9E), UINT64_C(0xBF4359844B8CB0D4), UINT64_C(0x6C61DDF360F8188C), UINT64_C(0x760339E14D04EA1B), UINT64_C(0x18B7FE1346CE38BC)}}, {{UINT64_C(0x7AA91562838C109E), UINT64_C(0xBBCAE1A4EF910EAF), UINT64_C(0xF3CAD5ADA3F53427), UINT64_C(0xF8FA6F08AA559EE9), UINT64_C(0x35DF7AA59B872C03), UINT64_C(0x0A3C67898F1C0B48), UINT64_C(0xE4106F6F3B1F9ABD), UINT64_C(0x51EE882B7DAA3EA0)}, {UINT64_C(0xFAE35FE0A97C031B), UINT64_C(0x265CC7A22FB341D9), UINT64_C(0xF99D1646F7515098), UINT64_C(0x3630DCFCA70C3101), UINT64_C(0x0D492AE5984A7736), UINT64_C(0x1E46ACB5A65956C5), UINT64_C(0x87E193D09C39921B), UINT64_C(0x1AA85A4B71406E88)}}, {{UINT64_C(0x6875F76226B55827), UINT64_C(0xC6E92CB628C694F4), UINT64_C(0xC3DA1CFB57E83283), UINT64_C(0x2DAD4640FC91E16A), UINT64_C(0x27238EDF079E48FB), UINT64_C(0x8262F37E4676F002), UINT64_C(0xF1DF56857E20A097), UINT64_C(0x710B88301D647DBF)}, {UINT64_C(0xF521938F55F50EC5), UINT64_C(0x86E72C2D5A65EC57), UINT64_C(0x72E72E109E067563), UINT64_C(0x1C572F372941350F), UINT64_C(0x0234F61327E00FBF), UINT64_C(0xA33CCF1AE0605A65), UINT64_C(0xFDB2433A9BE4C255), UINT64_C(0x18374CEBDD7E45CD)}}, }, { {{UINT64_C(0x9E00FC840CEEC3F3), UINT64_C(0xA758AA230D2268DF), UINT64_C(0x5C9B3794D36F482D), UINT64_C(0xEE3F79CFE90303E7), UINT64_C(0x22573217D1BB3495), UINT64_C(0x6D5C2063D2242A7E), UINT64_C(0x339BEDB8876A074A), UINT64_C(0x6326870395CD5AA2)}, {UINT64_C(0xA86B4EF91B0CAE7B), UINT64_C(0x420985B43DB7D12D), UINT64_C(0x99A3BB296B1CEED3), UINT64_C(0x2113B00F3569FA9E), UINT64_C(0x2C5924208E8BF2D8), UINT64_C(0xF74DD63B00DB962B), UINT64_C(0x8F0523E59758035F), UINT64_C(0x4EA1D81A448F83C0)}}, {{UINT64_C(0x01183057AAB1F908), UINT64_C(0xAF94AE9A324AC197), UINT64_C(0x6BF3B50D23710A59), UINT64_C(0x9B65A594C39A3428), UINT64_C(0x345E5C522210C08A), UINT64_C(0x6D728DD623216FE9), UINT64_C(0x9D09327B2E4F42C2), UINT64_C(0x47504F6209505F44)}, {UINT64_C(0x24F03D12FB3AD9B5), UINT64_C(0x70E8DE3C439F3E25), UINT64_C(0x1FE89F0EAE5A62FE), UINT64_C(0x3B518A064B98CDA2), UINT64_C(0x725AE18CC70FF3F3), UINT64_C(0x45765C3502BA4952), UINT64_C(0xBAA6488DA7C32E49), UINT64_C(0x5D277639C5A2E6D7)}}, {{UINT64_C(0xE3818693BD6F5DF9), UINT64_C(0x482D93578307A5AD), UINT64_C(0x82B507F2323D211C), UINT64_C(0x9E382A7192967D94), UINT64_C(0x4327BB2AB3BFF973), UINT64_C(0x911FF5F4AC87D95A), UINT64_C(0xD21289613BEF8BFB), UINT64_C(0x43E2ED58B8FA196B)}, {UINT64_C(0x74359D2CD5D4F65F), UINT64_C(0x7FE8B0D1401FC20D), UINT64_C(0xAA9C0EBCC012734A), UINT64_C(0x54BB07EDBC05E810), UINT64_C(0x09744AB894C9B39B), UINT64_C(0x1B29E64A47E3E6E7), UINT64_C(0x82082F863B728BB9), UINT64_C(0x5DA4AF1DE159E167)}}, {{UINT64_C(0xD838425EF80E5A20), UINT64_C(0x1701F0F47AA52E54), UINT64_C(0x2BC3E0243B0EF4D7), UINT64_C(0x13DED370BD8C9C7E), UINT64_C(0x93A9BCB03853E414), UINT64_C(0xBA7528320B81BBA1), UINT64_C(0xBE267CE569F51EC3), UINT64_C(0x2DD1339181D034EB)}, {UINT64_C(0x78E02B77EAB11B6E), UINT64_C(0xDC2C14F2D67C3B1C), UINT64_C(0x3407014C87193F9F), UINT64_C(0xA5187CAC580D2A6C), UINT64_C(0xA76AD3CB254FB63B), UINT64_C(0x16A7A635FA5EC4B7), UINT64_C(0x8B1E623D358A7E00), UINT64_C(0x12DED0AEE428EB45)}}, {{UINT64_C(0xEC93FF3E42D2628B), UINT64_C(0xF3E153F84D6D15AD), UINT64_C(0x9C1D3EE7B269AFEF), UINT64_C(0x1DC9ED6B2596D285), UINT64_C(0x1D99A25FDA973D5C), UINT64_C(0x6D0CC657575656A3), UINT64_C(0xB5FBD5739BE5B314), UINT64_C(0x2D0AF3814BCB4F6B)}, {UINT64_C(0x813C697542992580), UINT64_C(0x5F35F31BD9C88B9F), UINT64_C(0xD62AC131F1315EA8), UINT64_C(0x6898E20F20AEAF30), UINT64_C(0x85A2C8AF733A3518), UINT64_C(0x60BB0AE042DFC623), UINT64_C(0x5BE9C6827F5A3320), UINT64_C(0x781531140795B27B)}}, {{UINT64_C(0xEBA2445D5BFB1A8F), UINT64_C(0x23CA73DBE3A37647), UINT64_C(0x1D41C8EA09D6A2E8), UINT64_C(0x837CB597B9CA389A), UINT64_C(0x66B0A05A1DAF5EF4), UINT64_C(0xD1EC0B2B79720DD3), UINT64_C(0xA4EBD63334EC20E5), UINT64_C(0x3CBE3C4B96CB4933)}, {UINT64_C(0x5DFBCA31EAB154BD), UINT64_C(0xA95532F9086B4B02), UINT64_C(0xD6D5A0140ECE8177), UINT64_C(0xA2BD7647C1701606), UINT64_C(0xA051332728947FD0), UINT64_C(0x941ADE30FB8D79A4), UINT64_C(0xE793B659A5399FC5), UINT64_C(0x0CBA91FE7A2DAACF)}}, {{UINT64_C(0x6EDE3A1AF5D6C8A5), UINT64_C(0x18C47EFC5B8C138E), UINT64_C(0x997CB33C7B418D78), UINT64_C(0x5269B9B083E40686), UINT64_C(0x85054DDC8A20DE43), UINT64_C(0x0FF62C389485BF29), UINT64_C(0x8D769D160EF78B00), UINT64_C(0x53D4361998B54D2D)}, {UINT64_C(0x7CAC1C68C6B6FC2F), UINT64_C(0x4F4FB16BBA127B4F), UINT64_C(0x613B15EFB003EE2B), UINT64_C(0x51D36B347121BA05), UINT64_C(0xA33E6C3670C1BD53), UINT64_C(0x0D786268EEF75FCD), UINT64_C(0xEE9064EC425A7776), UINT64_C(0x640F4FE31B720CA1)}}, {{UINT64_C(0x0D80E5DCDE5EB014), UINT64_C(0x8B87C2C5FB6F0966), UINT64_C(0x440E812F7F7A8B3D), UINT64_C(0x4129E117D930CD64), UINT64_C(0x19224A1FBB1AD89B), UINT64_C(0xFF6582C11B9CF977), UINT64_C(0x0C279A282ED4B99F), UINT64_C(0x5985FA3261859FE3)}, {UINT64_C(0xE807ADC1FD425835), UINT64_C(0xD0F0F7C652CC2AFA), UINT64_C(0xF3B06F655C43ECC0), UINT64_C(0xC308696A5F15A3D0), UINT64_C(0x00DC3AA797174601), UINT64_C(0x8FC6B2DE81B1A96F), UINT64_C(0x0E4646A22071B8F4), UINT64_C(0x4D8B4DA5E92B7E14)}}, {{UINT64_C(0xA371921925133E4D), UINT64_C(0x76EC51481211714A), UINT64_C(0xB5C0EC5675C6B433), UINT64_C(0xE1DFD7B314240932), UINT64_C(0x319F8E99239466CA), UINT64_C(0xA6D0F9EC35FED9C2), UINT64_C(0x19FC4B44C41F492E), UINT64_C(0x36D24698B8CF87F2)}, {UINT64_C(0x789735C0C74D1AAA), UINT64_C(0x0C0DBF5F6B21C410), UINT64_C(0x157DEB3C4DCAACF0), UINT64_C(0xA7D53A569826FE13), UINT64_C(0xB4F2E8848E151D58), UINT64_C(0x6CD528BDA51FDECE), UINT64_C(0x7EF7FA0E6F669DBD), UINT64_C(0x5250D79D666F1F7B)}}, {{UINT64_C(0xC33D5CC302CBADB6), UINT64_C(0xF51C5ABFC56345D9), UINT64_C(0x0B2FED493B5E86CE), UINT64_C(0x86599A1D480D2793), UINT64_C(0x15CA7826A8F96CB6), UINT64_C(0x0577868C5DA5D7C0), UINT64_C(0x0292603BF8B7F740), UINT64_C(0x49C31FB585445AB2)}, {UINT64_C(0xCFF51BEBEFDB9DA0), UINT64_C(0x1C552A239DA2096C), UINT64_C(0x6FAC5D64416FD3D7), UINT64_C(0x7F6CD9A75F5F2D95), UINT64_C(0x98BD5C7F1E91AB28), UINT64_C(0x95132D69DAC6FFA2), UINT64_C(0x5611638C4C6BDC19), UINT64_C(0x79320E840DDCBF9E)}}, {{UINT64_C(0x2B07BCB228AD172D), UINT64_C(0xFBD855539AABAAA7), UINT64_C(0x466FF9B8715A69DA), UINT64_C(0xA5EE097A5DF8355B), UINT64_C(0x5E81EF3694527A84), UINT64_C(0x0FD8285862E79307), UINT64_C(0xF77154C67A0154D8), UINT64_C(0x706EA85717F87D8C)}, {UINT64_C(0x696280B6EDF504A7), UINT64_C(0x8E2FDF940D58FD9E), UINT64_C(0x4582C0650A6463DF), UINT64_C(0x5DC2DECD68B7389B), UINT64_C(0x98D77559D2CFCF3C), UINT64_C(0x4E652C83E277A1EA), UINT64_C(0x81FA94F722B153DC), UINT64_C(0x6B86C4CB27250748)}}, {{UINT64_C(0x31FA2A569050FD42), UINT64_C(0x72FEACD1FDCEFA17), UINT64_C(0xDC60ED6384A8F817), UINT64_C(0x584DADB824332D2E), UINT64_C(0x44D7CF2E3C47EB6B), UINT64_C(0x905E2D0E9A6BC268), UINT64_C(0x501FE4486EF013BE), UINT64_C(0x733E11DA999445A7)}, {UINT64_C(0x7EBF9F56B4A90B6B), UINT64_C(0x526D56854364F578), UINT64_C(0xBF9B3EF7BE950B53), UINT64_C(0x6C5EEE0A73D295F8), UINT64_C(0x4A79F9A73F9CFD38), UINT64_C(0xA8C15D285C348121), UINT64_C(0xDB33882F7BC3EEA7), UINT64_C(0x164B6C981C95C7DB)}}, {{UINT64_C(0x99A0B2F1876E8E37), UINT64_C(0x9540376E7D53142D), UINT64_C(0x9D87809D6F20C705), UINT64_C(0x1305C33BB0FDE5DE), UINT64_C(0x172DFA23DF9311EB), UINT64_C(0xC55A603CB8B9A7ED), UINT64_C(0xF4426DA9398CDDF1), UINT64_C(0x7EE621B093395515)}, {UINT64_C(0xBBD0B9E97190296B), UINT64_C(0x244FFECC817E9802), UINT64_C(0x572B5387071D598F), UINT64_C(0x8314EF61D2B681E2), UINT64_C(0x8F8CA790639B8713), UINT64_C(0x81FD3C40F265F881), UINT64_C(0x05EC87EA78DB97D0), UINT64_C(0x7C279328E4CB4B7D)}}, {{UINT64_C(0xF385F057A3B4A536), UINT64_C(0x14C2337F4844689C), UINT64_C(0x3523F9A98B5FFFB0), UINT64_C(0xF5E10A66A5E078C2), UINT64_C(0xC5DDD8699EEAC34E), UINT64_C(0x16348B68ED24D386), UINT64_C(0x90992D06EBB0A580), UINT64_C(0x001BD2DB047485A9)}, {UINT64_C(0x871A178BDABC2B30), UINT64_C(0xEC9674EC6B5F7DC4), UINT64_C(0xBB3B1C57AC23E5B0), UINT64_C(0x6DBB053044A658A1), UINT64_C(0x28B031C961E53517), UINT64_C(0xC1AB8ED564182250), UINT64_C(0xDA3FE27ED1333B9E), UINT64_C(0x4652F37C71AD4520)}}, {{UINT64_C(0xB9C2F8947B2186CC), UINT64_C(0xFA2E5BE557CF825F), UINT64_C(0x71A9C72326232D47), UINT64_C(0xD990D5D4EB1F6B74), UINT64_C(0x0526A74FEE869587), UINT64_C(0xB29047B179F385E3), UINT64_C(0xE9555EB37588AABE), UINT64_C(0x379D31BAE8EDC982)}, {UINT64_C(0xD1354749DEC275F9), UINT64_C(0xDC58001638EAAC97), UINT64_C(0x23B6F54D894811E9), UINT64_C(0x8A2356F8838B2AE0), UINT64_C(0x5ECBE0750332F83F), UINT64_C(0x1DE54B95F248814B), UINT64_C(0x3B4D634D963938AE), UINT64_C(0x4C8888A57A5F8CB0)}}, {{UINT64_C(0xC6A93408866B8E1D), UINT64_C(0x33DCDEAC3FA8DDAC), UINT64_C(0x7F21F9115DBEC7A8), UINT64_C(0x4C54D4CB888CF7C1), UINT64_C(0x3FBBB373B81E81C5), UINT64_C(0x2946B9BBC50F3415), UINT64_C(0x8EA5487B72265924), UINT64_C(0x3D570399BDEBBFEC)}, {UINT64_C(0x86C128FF1939A079), UINT64_C(0x4B37E0819509F043), UINT64_C(0x429912317209D23F), UINT64_C(0x22D2D20768A1134B), UINT64_C(0xA5AF7A3834D6A734), UINT64_C(0x752A81902ED7FCBF), UINT64_C(0x11CC587080FD1D18), UINT64_C(0x1D9ACAE3D189B4DD)}}, }, { {{UINT64_C(0xE47BFD7FBD6BEAA4), UINT64_C(0x6D4E6C1256A13CBF), UINT64_C(0x66944291955E8CFA), UINT64_C(0xA5D03765E17CB432), UINT64_C(0xB39957CC87350701), UINT64_C(0x5442D545C31F2D8B), UINT64_C(0xB260AC7DA27161B7), UINT64_C(0x633DBFE5272AA5A0)}, {UINT64_C(0x6273DAA0CC5C98C5), UINT64_C(0x18117A87F7F5EE34), UINT64_C(0x70638CFDFFC6434F), UINT64_C(0xC3F386EE540FDE06), UINT64_C(0xA97159E3D18B02F7), UINT64_C(0x10E18495EB612449), UINT64_C(0xD572354C3D9E5A31), UINT64_C(0x2642E9F29A2301C1)}}, {{UINT64_C(0x01048593442143BC), UINT64_C(0x015299B112B5CE6C), UINT64_C(0x7DB0D76F5F5AEA95), UINT64_C(0xE9E3DA6FD2FB7690), UINT64_C(0x6E4C64AB8904CCF0), UINT64_C(0xDCBD06CCA49B6CCD), UINT64_C(0x7258A3FCB0ABB0C1), UINT64_C(0x07DF0E9459FC214B)}, {UINT64_C(0x58804CBF1E7CC675), UINT64_C(0x26CB78C2E80CFBF9), UINT64_C(0xD0A31AF09AE03E99), UINT64_C(0x121F1D3D5C86A88D), UINT64_C(0x421726042507EBB7), UINT64_C(0x1C0477822BBA126B), UINT64_C(0xE85C59C8102027F2), UINT64_C(0x461D9C09CD8232E8)}}, {{UINT64_C(0x97B3842A200770DE), UINT64_C(0x4647F3FE77C0536B), UINT64_C(0x37CC9562BF7476D9), UINT64_C(0x90D29C5C2DEA54A8), UINT64_C(0xCD666644C21BF888), UINT64_C(0xEAE36F2FC5CF18C8), UINT64_C(0x903D889AFD93F2C5), UINT64_C(0x037ADD7EE5F67DF4)}, {UINT64_C(0xD38FA2DC995AC5D0), UINT64_C(0x69D19EA198A2A549), UINT64_C(0xEC7814C75E8F6D58), UINT64_C(0xDD241DB2247C0E89), UINT64_C(0x5421BE26E5CF278B), UINT64_C(0xCF675E38EDACBA69), UINT64_C(0x397356A121F9C045), UINT64_C(0x317C547F49E0BF07)}}, {{UINT64_C(0x2EB59913F5C55ABA), UINT64_C(0x805C61A199485E9B), UINT64_C(0x94D81C7EB4C7CEE9), UINT64_C(0x2DD3516FA9DEE0B1), UINT64_C(0x4C59CC213353561D), UINT64_C(0x375C19F35EE9F7B9), UINT64_C(0x89DE4E4127FC9486), UINT64_C(0x68487AFF24995DF5)}, {UINT64_C(0x15B98DF06D549CB6), UINT64_C(0x4B884EDE9B4544BA), UINT64_C(0xE2CEA2061B3D89C5), UINT64_C(0xCE8945D22648786B), UINT64_C(0x0B209B7CF1272125), UINT64_C(0xEAB0849A2BAFF0D1), UINT64_C(0xE5F18031E971F89E), UINT64_C(0x4379379C766B7A2F)}}, {{UINT64_C(0xFC10C84729B51FB0), UINT64_C(0x148AE7AF1E012F1A), UINT64_C(0x75A5A6FDA20D8DBE), UINT64_C(0x30148FCB8FA0842C), UINT64_C(0x0A64E438126F8253), UINT64_C(0x72C3C042AECD60D4), UINT64_C(0x6C3589C838A21DFB), UINT64_C(0x64BA45946BB0D5D0)}, {UINT64_C(0x6E818AA1D464168A), UINT64_C(0x96C68C331743888E), UINT64_C(0x0D52C73F0672EC8E), UINT64_C(0x56F9E940A8B446E9), UINT64_C(0x68F43782C0E008C5), UINT64_C(0x7C0D8BFE96201134), UINT64_C(0x66C97894B3F5942B), UINT64_C(0x08579CF989BE1E99)}}, {{UINT64_C(0xE863C3A92828506B), UINT64_C(0x18C6E29D9DF36CD1), UINT64_C(0xA2DF177DC2AD4DFB), UINT64_C(0xD0E200A208B5F6B6), UINT64_C(0x6BE0AF7577B670DB), UINT64_C(0x750E92FDBD46EEB0), UINT64_C(0x21E21B3787F96AD1), UINT64_C(0x0C4F884EC89C7708)}, {UINT64_C(0xBCCD3155630AF761), UINT64_C(0x769F9CED19F3528A), UINT64_C(0x2572864DBF9CAC65), UINT64_C(0xD276411CF43268F0), UINT64_C(0x12D9FDCFA2C48843), UINT64_C(0x320A13DF7AAF1CBC), UINT64_C(0x3D4DCB95630820CF), UINT64_C(0x5F471E2128553384)}}, {{UINT64_C(0xC14F1D4D9C6DCC7D), UINT64_C(0x9CEA8E3ABC2EA2FA), UINT64_C(0xD854AEC04F1DE28B), UINT64_C(0x5FAFDDCEB0EF66E2), UINT64_C(0xD5BAF034A190ADC7), UINT64_C(0xFEB3DE5F052D641A), UINT64_C(0xA336FD9A51F9F744), UINT64_C(0x11E7DE0F2E516669)}, {UINT64_C(0x46B240270CD862CD), UINT64_C(0xDB3CE4A222667C9F), UINT64_C(0xDF1BD2A28E3438CF), UINT64_C(0xC20E6ECB94E0825A), UINT64_C(0x086782224EDF3C36), UINT64_C(0xCD547458D86E0625), UINT64_C(0xED9FFDFAC1C8975A), UINT64_C(0x7709A34E60FF6B18)}}, {{UINT64_C(0xEE6F55D70D6EF8BE), UINT64_C(0x6BA29662C47749F3), UINT64_C(0x505BEBB2CB5824F0), UINT64_C(0xDAA39E017CE139AF), UINT64_C(0xC73FFE67BA4EAAF5), UINT64_C(0x1AC8354F1216FBC5), UINT64_C(0xFA600D707C029B38), UINT64_C(0x1DEF1E98B77E8711)}, {UINT64_C(0x9EA77FEF2199269A), UINT64_C(0xCC5F3E27A4B5E402), UINT64_C(0x998BF96FFE20DCF6), UINT64_C(0xCF543A7154252277), UINT64_C(0x9D767F8771A66685), UINT64_C(0x0E1AA8F5860B1EC4), UINT64_C(0x3979C3949437E2D0), UINT64_C(0x55CBC282855C635C)}}, {{UINT64_C(0x798D8087DB0F28BC), UINT64_C(0x80BE50E690209D22), UINT64_C(0x6B14A1E169AE2A50), UINT64_C(0x504AD87B21B5A02E), UINT64_C(0xBF92B62181938DD3), UINT64_C(0x1A209438E927A712), UINT64_C(0x3DFC548A3C613F5E), UINT64_C(0x1E6E3311A3C2CC7E)}, {UINT64_C(0xE46AC0C4A91BB2B2), UINT64_C(0xAC89BB09DF9BA7FD), UINT64_C(0xC87555DD04403839), UINT64_C(0xB1460C86C6BB4379), UINT64_C(0x3AD253EF5FC6E594), UINT64_C(0xB66B2FB7393CB89B), UINT64_C(0x1411B9FDE1BAB087), UINT64_C(0x084DD6CD22C9CE4C)}}, {{UINT64_C(0x676D50EEE480DDEB), UINT64_C(0x588EC4BBD14909D0), UINT64_C(0x509A74A7B5DD3FC6), UINT64_C(0xE616EEF3AA6870F2), UINT64_C(0x76F235D998C5A7E5), UINT64_C(0x7A925C5577FFB2E6), UINT64_C(0x0A78A158955213B7), UINT64_C(0x07B068B928FB60B7)}, {UINT64_C(0x7610C82150380E64), UINT64_C(0x6E7C80CE282776C2), UINT64_C(0x9F67368AEEBD3250), UINT64_C(0x932F6E9985FB7863), UINT64_C(0x41FCC562924A519D), UINT64_C(0xC099DE16B499B4AF), UINT64_C(0x10764D48AC9C7E76), UINT64_C(0x66C85BF9A1BABCE6)}}, {{UINT64_C(0xB080963FF5CB951F), UINT64_C(0xD9A5580B2A16F27F), UINT64_C(0x5840499D4FCEE6ED), UINT64_C(0x5F4704D64F3B33D4), UINT64_C(0x02A1399382256A05), UINT64_C(0x5713E01992365A7E), UINT64_C(0x4A2F7BA66F38944B), UINT64_C(0x14B58D5BA47662D3)}, {UINT64_C(0xC219E3005900EFC8), UINT64_C(0x45707A504FE2DFC9), UINT64_C(0x0CE4FACD6863DF90), UINT64_C(0xEDB31912C6BCDA9C), UINT64_C(0x3E24A0D685B6CF7C), UINT64_C(0x6365ACDA358DDF3B), UINT64_C(0x10FD0871F2CB0823), UINT64_C(0x51D58D3D1DAFE4C7)}}, {{UINT64_C(0xE5B64EF4291B51D2), UINT64_C(0x70C52EDB1A7A445D), UINT64_C(0x758D0DC9C1E8DF63), UINT64_C(0x55328AB30677FE82), UINT64_C(0xAF4221FF7F3A1866), UINT64_C(0xDE1BA1098C04E9CA), UINT64_C(0x26F0D0864C577D77), UINT64_C(0x6D5D3FB16D494F73)}, {UINT64_C(0x3C0153EB451F8B8C), UINT64_C(0x6A9B03D15FD3ED6A), UINT64_C(0xDF442C11175180C3), UINT64_C(0xB205EB514DD99376), UINT64_C(0x28E9C5FFEB489DE3), UINT64_C(0x225CEB0944766908), UINT64_C(0x1DB1F7E7EB193B68), UINT64_C(0x364B9E6BDF27292C)}}, {{UINT64_C(0xDC6E723D728F33A8), UINT64_C(0x8ABEB28A3A0930B3), UINT64_C(0x584B13CAD024D8B7), UINT64_C(0xDCDC5BB7DBDE780E), UINT64_C(0xA2AD762B161D9801), UINT64_C(0x46EBC8A96CE5F18A), UINT64_C(0x97A0BA527EB1CD22), UINT64_C(0x58BC4DAAE22D91D5)}, {UINT64_C(0xC06F0B259F01D49D), UINT64_C(0x8236F2AD3533732B), UINT64_C(0xE3DF9BF57C6C24F4), UINT64_C(0xD60FBCC76AA1E1F0), UINT64_C(0x8DDBB9A2B70A307F), UINT64_C(0x61BB56B1C6071C49), UINT64_C(0x8D3446D71ABF19BD), UINT64_C(0x44AF2FD846387989)}}, {{UINT64_C(0x25ACEB4C86B1B8AE), UINT64_C(0xB5B0A7E367CFD1AA), UINT64_C(0x87B3C5CBB0F063B4), UINT64_C(0x7F4292746F03BE41), UINT64_C(0x412836E0D82D7749), UINT64_C(0xD9B1603B535225CC), UINT64_C(0xCBF1A8271590B41F), UINT64_C(0x47C32D83FE159BF9)}, {UINT64_C(0x7A147456369026E5), UINT64_C(0x4A21DAB12691A87D), UINT64_C(0x006D3EA461818C2D), UINT64_C(0x56006BDFD548A261), UINT64_C(0x8632A9091D7DA713), UINT64_C(0x859839DD26E387A5), UINT64_C(0x41E4D9D97FF52CF4), UINT64_C(0x0E21329F85A8F21E)}}, {{UINT64_C(0xDF4AF1E0626902CA), UINT64_C(0x339CD3CDEC50A5FF), UINT64_C(0x44B2ABBA98DD7A01), UINT64_C(0x47A4DA46CC7AC1A8), UINT64_C(0xA69253411EA0F3A8), UINT64_C(0x46F82C17C23AA0AC), UINT64_C(0xF0394E44386897AA), UINT64_C(0x601F9A559D5AA759)}, {UINT64_C(0x194F939FEF324E1E), UINT64_C(0x188BE442E2F35782), UINT64_C(0x4B2FA7C15683B3DD), UINT64_C(0x9F2737A644300367), UINT64_C(0xB72F7E8AAFDF269E), UINT64_C(0x5FFD87557A8A5232), UINT64_C(0xA1641CF043299A6C), UINT64_C(0x1FDA30D5C4D1E057)}}, {{UINT64_C(0x926373C4D94B7DD2), UINT64_C(0xE9882CA7FAA5C280), UINT64_C(0x358F82F6C1D821E2), UINT64_C(0xDF9818268812649A), UINT64_C(0x96ED450710D267E1), UINT64_C(0x72253BD1F7DF2D84), UINT64_C(0x78F13C381F09BC6D), UINT64_C(0x023C79F015D1F353)}, {UINT64_C(0x5E357E1A65E1924F), UINT64_C(0x827A8C8318CC9432), UINT64_C(0x9A2FF5D68696C800), UINT64_C(0xDE825B6AE26AB439), UINT64_C(0x34C74673A646B303), UINT64_C(0xFBFD424E50657C92), UINT64_C(0xAAD263D91F96EEC2), UINT64_C(0x78D93F6C42FF59EC)}}, }, { {{UINT64_C(0xEF807EEB4ACCAC90), UINT64_C(0xEA3708EC83EFEFD0), UINT64_C(0xB3F56C3DAC470AEC), UINT64_C(0x0467461D4BB6B4A8), UINT64_C(0x9E2D3152455704F7), UINT64_C(0x957F5FF695097282), UINT64_C(0x1BBA5CCAAEADBFBC), UINT64_C(0x5D64A8B0829F221F)}, {UINT64_C(0x63B30E25DC012583), UINT64_C(0x739D6C4D6E8E7E4B), UINT64_C(0x4DB4BA8A108F21C6), UINT64_C(0xE4D0991D8E217429), UINT64_C(0x0DFEC43E747D489D), UINT64_C(0x759C611C3F6623D2), UINT64_C(0xBB3166AE1C16C550), UINT64_C(0x1097FE4146E761A6)}}, {{UINT64_C(0x5CACE9282774936E), UINT64_C(0x7D88CE3C97A7BC86), UINT64_C(0x7B5F9D752732B6C7), UINT64_C(0x31E096D2A9623A78), UINT64_C(0xED0B1A7F8F2A6C6F), UINT64_C(0x47F31AC08A38C329), UINT64_C(0x65FE20B48AE3E440), UINT64_C(0x5BB3DF728FF8D87D)}, {UINT64_C(0x5C361D56394AF7A9), UINT64_C(0x37A958024A967882), UINT64_C(0x02037A09C3D24749), UINT64_C(0x623CF773A9EB6A87), UINT64_C(0x4D09B042CC9980AC), UINT64_C(0xC1EF17CA4C258646), UINT64_C(0x054C55D4EA522FA1), UINT64_C(0x756B405D1459D247)}}, {{UINT64_C(0xC88B5D92FF7BCBB8), UINT64_C(0x37E62C2A33BB4D7F), UINT64_C(0x63DBECFC93850D2E), UINT64_C(0x282E18965DAF279B), UINT64_C(0x90226257B2FD8FA2), UINT64_C(0x68215F8C69A65468), UINT64_C(0xAEBF43D556338A49), UINT64_C(0x035A40A038D7D063)}, {UINT64_C(0xEEEE462E61C724FC), UINT64_C(0x660F015BA58C2B0C), UINT64_C(0x627E0736E16621D4), UINT64_C(0xD423ADA85D724668), UINT64_C(0xF98AB83A6B777C4C), UINT64_C(0x4F5FEC825DC968EE), UINT64_C(0x4AC7CAAADF9BE0BE), UINT64_C(0x6F7E06DCCADCF93D)}}, {{UINT64_C(0xCF90CB74DE36D484), UINT64_C(0xD511A70F0ED61EEE), UINT64_C(0xDBF5689E33798A5C), UINT64_C(0x81900CF3DAA5D75E), UINT64_C(0x854460AA84CA34C5), UINT64_C(0x3C00E7B539220C74), UINT64_C(0x4E7CE464AB33422B), UINT64_C(0x22221BD4AB536B00)}, {UINT64_C(0x718695F4E50DFFEE), UINT64_C(0x466D642CD103C522), UINT64_C(0xA01B70706EC72083), UINT64_C(0xD29C046DCB7675DD), UINT64_C(0xA2AF1025605F249C), UINT64_C(0x3BD414BDEA9111DF), UINT64_C(0x8DCEC5097D037C23), UINT64_C(0x750E0282176546F8)}}, {{UINT64_C(0x452C27FF824344A7), UINT64_C(0x85E64CC2EC399A05), UINT64_C(0xBE15D09E3442039C), UINT64_C(0x875022BB6A323861), UINT64_C(0xD984BF9D61866CC9), UINT64_C(0x4007F668EE6E8271), UINT64_C(0x090E14CCF107566D), UINT64_C(0x08C2354A1131FCD8)}, {UINT64_C(0xF9C862998F5FFF23), UINT64_C(0x97788808AC995497), UINT64_C(0xBF6CB8B5D43FDCB9), UINT64_C(0xC75BD147B72DFB91), UINT64_C(0xA537A636E15359C6), UINT64_C(0x313458F393F6292F), UINT64_C(0x096B68662BF3CE59), UINT64_C(0x5618ACC8275BB1A8)}}, {{UINT64_C(0x434DBAD76DD4F47F), UINT64_C(0x7F24804B93A13416), UINT64_C(0x54864638DCFDC8FB), UINT64_C(0x94D15AAB8DBB2A99), UINT64_C(0xC60D064A3B08BE5D), UINT64_C(0x8D52AF0377113B1C), UINT64_C(0x795F3549E649649D), UINT64_C(0x6C50A7B3A2F7B890)}, {UINT64_C(0x1243D102BA7BE66C), UINT64_C(0xD52A9D6524A4F3D5), UINT64_C(0x84F3A7D8D940B299), UINT64_C(0x2D0D05610A6C5F96), UINT64_C(0x6814730955AF49E6), UINT64_C(0x1AD2CC292D484160), UINT64_C(0xD983666441613C8C), UINT64_C(0x116D32D9E1444926)}}, {{UINT64_C(0xBFB347E11FC8967F), UINT64_C(0xAB2F0DE9AFD35E6A), UINT64_C(0x77C822B93D717B63), UINT64_C(0xBA49F6D5EFE76953), UINT64_C(0xC4FF8395C3729C1E), UINT64_C(0x5E5251991792651B), UINT64_C(0xEF736F1E220793FE), UINT64_C(0x0C1364DEADA2DF7C)}, {UINT64_C(0xE364A0295E0A04FB), UINT64_C(0x078CF4CC02A1CB8F), UINT64_C(0x2C6EDCEC884EB5E8), UINT64_C(0x361E83F134DA48A0), UINT64_C(0x543FD798AE22EE07), UINT64_C(0x80A0521A72A9D550), UINT64_C(0xCEEB2763D5D883DE), UINT64_C(0x4633AE13744C8616)}}, {{UINT64_C(0x386138C2EFC180BF), UINT64_C(0x62884C835025C16C), UINT64_C(0xC846079F3AEF27D9), UINT64_C(0x85AC6CC58815E30E), UINT64_C(0x45705559D26A2BD0), UINT64_C(0xEF1649A0EEDB70C4), UINT64_C(0x2596F146E4641EFD), UINT64_C(0x61E89F8E93C7B04A)}, {UINT64_C(0x6EBD7C9F071CA85D), UINT64_C(0x5C9951AE1C15ACD1), UINT64_C(0x9DE96A7C8AE934A1), UINT64_C(0x4B32645D481D190E), UINT64_C(0x8D0E2B25A79C0B4A), UINT64_C(0x8EF7BB2ACD74DA50), UINT64_C(0x9481D2DB07920CC8), UINT64_C(0x1BD7A22E8736C183)}}, {{UINT64_C(0xD4F2750064FCB568), UINT64_C(0xD92CBB705C300E98), UINT64_C(0x5A971902CAA8D9B9), UINT64_C(0xA5542DF51C4824C9), UINT64_C(0x7B469D1BC84D2CCD), UINT64_C(0xD3FBFEBBA2566F40), UINT64_C(0x89511F69E8FA73C0), UINT64_C(0x6FFD125BB162F797)}, {UINT64_C(0x961C9532C0FA653C), UINT64_C(0x007BD198BDB0C77A), UINT64_C(0x1853303BEEFC3BE3), UINT64_C(0x6D50323FC4A33E36), UINT64_C(0x9798C97AE367E4C9), UINT64_C(0x9E146B0712A538A8), UINT64_C(0xBFB3E8194996D58B), UINT64_C(0x5438D6F69022E072)}}, {{UINT64_C(0xC58B1061DD4E810B), UINT64_C(0x7966E96A8FD29C69), UINT64_C(0x7E2D9FD42E65F9B6), UINT64_C(0xA8F68084FC48055F), UINT64_C(0x545CAE012DC5A983), UINT64_C(0xC9D198C8A2596608), UINT64_C(0xF9D9BF5D4208B520), UINT64_C(0x1C0C3F5A7E6883FF)}, {UINT64_C(0x06D7B98305CD4D87), UINT64_C(0x899A60E89E9F9F35), UINT64_C(0x1465EAD55119AAC1), UINT64_C(0x3EDF1E360F329991), UINT64_C(0x86BCB01EA0646C43), UINT64_C(0xA6EF27F3EF4EBCEB), UINT64_C(0xEAF04AE654EB8E6B), UINT64_C(0x48051E6208227047)}}, {{UINT64_C(0xA84EFDA5F245F1E6), UINT64_C(0x49759EF3EB80F18C), UINT64_C(0xFB8A3A4B1142EE5C), UINT64_C(0x62907A8FB9EE65D6), UINT64_C(0xC5FD7DC9D68D862F), UINT64_C(0x1F791D0FE1C81BAD), UINT64_C(0xFED4DEA38C4757BA), UINT64_C(0x041A50E32FA4C20E)}, {UINT64_C(0xB8F7EE7AF454E68E), UINT64_C(0xB68F9599CBAB4836), UINT64_C(0x3FB9C650F1872586), UINT64_C(0xF967C7689FDDEF61), UINT64_C(0x8A2683AF70E86E8E), UINT64_C(0xAFD29242E523AD78), UINT64_C(0xBA4EECA59DD43A6C), UINT64_C(0x374478967BB2E1AE)}}, {{UINT64_C(0xE5378393F86EFABC), UINT64_C(0x336470CA45F692E9), UINT64_C(0xC5F0022C66E0FBDF), UINT64_C(0x189D81D53ECD3196), UINT64_C(0x416D97CB771F9C1C), UINT64_C(0xBF2B6B77223448F1), UINT64_C(0xA4F6355ABE42A9A6), UINT64_C(0x1C15439AB9956AAC)}, {UINT64_C(0x020CA3197DBFC8B8), UINT64_C(0x25A1DFD15C7E4025), UINT64_C(0x5CF6FAD84D06AAA0), UINT64_C(0x8221BAD8AC1B211B), UINT64_C(0x68E7DBA3AE4C7F7B), UINT64_C(0x4C167FA9FEF7CB4B), UINT64_C(0x207A14B8A34935DE), UINT64_C(0x1476CCBD645A14C2)}}, {{UINT64_C(0xF0467D8954E05676), UINT64_C(0xA1987E17E04530FF), UINT64_C(0x1E3010C22E3A997C), UINT64_C(0x4001E89FEBEF74A7), UINT64_C(0x60C6556632572D28), UINT64_C(0x410C49D0A562BF8F), UINT64_C(0xFE591AD0782CE10C), UINT64_C(0x272DE301C3016AA6)}, {UINT64_C(0x7AEFA3F7D3FD089D), UINT64_C(0x5141E3CFC68CE61E), UINT64_C(0xEC6F871E919EF2CB), UINT64_C(0x9E1F2C4FB15754CA), UINT64_C(0x4E053A03B367A8E1), UINT64_C(0xB5447BAB7A946A07), UINT64_C(0xCA9D154A5934AC68), UINT64_C(0x2C24448B9DCC05A4)}}, {{UINT64_C(0xDDDCC6F77230B721), UINT64_C(0x3AB7517BD59A4D7D), UINT64_C(0x0202A42773E75A94), UINT64_C(0xEB9CBB02F45E584C), UINT64_C(0x879F20404D193D46), UINT64_C(0x897A3D49FD5CCEC5), UINT64_C(0x7B22D3AD5E795234), UINT64_C(0x103A74B935E6EA1D)}, {UINT64_C(0x83AD405EDE267F29), UINT64_C(0x9C0750BCCD4EF83E), UINT64_C(0x1192B08CAAF8C955), UINT64_C(0xD983183C93618DC5), UINT64_C(0x3F142E9F51FA4692), UINT64_C(0xF9242D3EA9E77124), UINT64_C(0x044F55EAC733EFCE), UINT64_C(0x3FCE259EBFB0E74D)}}, {{UINT64_C(0xB4A72C274E061902), UINT64_C(0x46D496858271B5ED), UINT64_C(0xE640CD1CC565B666), UINT64_C(0xFEE64A698C432368), UINT64_C(0x9B245FBA7C9309AA), UINT64_C(0x2489BB011FD0DCD7), UINT64_C(0xBE612E5CB4ADB680), UINT64_C(0x7B828C731905845A)}, {UINT64_C(0xB205C233AE7E8E5F), UINT64_C(0x67C2AC050DDE4865), UINT64_C(0xC29416F4556BCEFF), UINT64_C(0x3A94801DE7DE42B2), UINT64_C(0xC79768DB8E9195AD), UINT64_C(0xF701EAE5702232BD), UINT64_C(0x7093880E769E819E), UINT64_C(0x07385CFB85575FE1)}}, {{UINT64_C(0xBE89A89F552D7645), UINT64_C(0xC1406B554C7C1F2D), UINT64_C(0x123A5BB39C11B663), UINT64_C(0x1925904A275B4F27), UINT64_C(0x94D3368711F1A12B), UINT64_C(0x446FD57BD3F31833), UINT64_C(0x0FF6FF5DA29D4040), UINT64_C(0x35355FF6AE52039A)}, {UINT64_C(0x74B055757DE14B02), UINT64_C(0xD2E7C9637A47B576), UINT64_C(0x0D391E9DE99D0433), UINT64_C(0xA4DC392950CCA807), UINT64_C(0x81694449A2AF3088), UINT64_C(0x9222E26555474A7F), UINT64_C(0xAB5C44522C2AD9EE), UINT64_C(0x5810784DF7EC7C2A)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 6 * ASSERT: a = -3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetB_square(t0, X); fiat_id_tc26_gost_3410_2012_512_paramSetB_square(t1, Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_square(t2, Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t3, X, Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, t3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t4, Y, Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, X, Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, b, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(X3, X3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, t2, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t2, t2, t3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, b, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Z3, Z3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Z3, Z3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t0, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t0, t0, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t0, t4, t4); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, t0, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, Z3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed.op3 * https://eprint.iacr.org/2015/1060 Alg 5 * ASSERT: a = -3 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_tc26_gost_3410_2012_512_paramSetB_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t4, Y2, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, t4, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, X2, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, Y3, X1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, b, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, X3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Z3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, b, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, Z1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t2, t1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t0, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, t4, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t2, t0, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(X3, t3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, X3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, t4, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, t1); /* if P is inf, throw all that away and take Q */ fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(R->X, nz, Q->X, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 4 * ASSERT: a = -3 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t2, Z1, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, Y1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t5, Y2, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t4, t4, t5); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t5, t1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t4, t4, t5); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, X1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, X2, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(X3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, b, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, X3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Z3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, b, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, t2, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t2, t1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t0, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, t4, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t2, t0, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(X3, t3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, X3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, t4, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, t1); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[64], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 64) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[103], const unsigned char in[64]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 102; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[513], const unsigned char in[64]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 513; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[64], const unsigned char b[64], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[513] = {0}; int8_t bnaf[513] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 512; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetB_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[64], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[102] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 101; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(out->Y, lut.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetB_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[64]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 7; i >= 0; i--) { for (j = 0; i != 7 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 14; j++) { if (j * 8 + i > 102) continue; d = rnaf[j * 8 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(out->Y, lut.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetB_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[64], unsigned char outy[64], const unsigned char a[64], const unsigned char b[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes(P.Y, iny); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery(P.X, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery(P.Y, P.Y); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.X, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.Y, P.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.X, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.Y, P.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes(P.Y, iny); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery(P.X, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery(P.Y, P.Y); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.X, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.Y, P.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[64] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_tc26_gost_3410_2012_512_paramSetB( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(n, b_n, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_tc26_gost_3410_2012_512_paramSetB(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_tc26_gost_3410_2012_512_paramSetB(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 64) != 64) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #else /* __SIZEOF_INT128__ */ #include #include #define LIMB_BITS 32 #define LIMB_CNT 16 /* Field elements */ typedef uint32_t fe_t[LIMB_CNT]; typedef uint32_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETB_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: word_by_word_montgomery --static --use-value-barrier id_tc26_gost_3410_2012_512_paramSetB 32 '2^511 + 111' */ /* curve description: id_tc26_gost_3410_2012_512_paramSetB */ /* machine_wordsize = 32 (from "32") */ /* requested operations: (all) */ /* m = 0x8000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006f (from "2^511 + 111") */ /* */ /* NOTE: In addition to the bounds specified above each function, all */ /* functions synthesized for this Montgomery arithmetic require the */ /* input to be strictly less than the prime modulus (m), and also */ /* require the input to be in the unique saturated representation. */ /* All functions also ensure that these two properties are true of */ /* return values. */ /* */ /* Computed values: */ /* eval z = z[0] + (z[1] << 32) + (z[2] << 64) + (z[3] << 96) + (z[4] << 128) + (z[5] << 160) + (z[6] << 192) + (z[7] << 224) + (z[8] << 256) + (z[9] << 0x120) + (z[10] << 0x140) + (z[11] << 0x160) + (z[12] << 0x180) + (z[13] << 0x1a0) + (z[14] << 0x1c0) + (z[15] << 0x1e0) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) + (z[56] << 0x1c0) + (z[57] << 0x1c8) + (z[58] << 0x1d0) + (z[59] << 0x1d8) + (z[60] << 0x1e0) + (z[61] << 0x1e8) + (z[62] << 0x1f0) + (z[63] << 0x1f8) */ #include typedef unsigned char fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1; typedef signed char fiat_id_tc26_gost_3410_2012_512_paramSetB_int1; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETB_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint32_t fiat_id_tc26_gost_3410_2012_512_paramSetB_value_barrier_u32(uint32_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_tc26_gost_3410_2012_512_paramSetB_value_barrier_u32(x) (x) #endif /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^32 * out2 = ⌊(arg1 + arg2 + arg3) / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint64_t x1; uint32_t x2; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x3; x1 = ((arg1 + (uint64_t)arg2) + arg3); x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); x3 = (fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1)(x1 >> 32); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^32 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 arg1, uint32_t arg2, uint32_t arg3) { int64_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetB_int1 x2; uint32_t x3; x1 = ((arg2 - (int64_t)arg1) - arg3); x2 = (fiat_id_tc26_gost_3410_2012_512_paramSetB_int1)(x1 >> 32); x3 = (uint32_t)(x1 & UINT32_C(0xffffffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32 is a multiplication, returning the full double-width result. * Postconditions: * out1 = (arg1 * arg2) mod 2^32 * out2 = ⌊arg1 * arg2 / 2^32⌋ * * Input Bounds: * arg1: [0x0 ~> 0xffffffff] * arg2: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] * out2: [0x0 ~> 0xffffffff] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(uint32_t *out1, uint32_t *out2, uint32_t arg1, uint32_t arg2) { uint64_t x1; uint32_t x2; uint32_t x3; x1 = ((uint64_t)arg1 * arg2); x2 = (uint32_t)(x1 & UINT32_C(0xffffffff)); x3 = (uint32_t)(x1 >> 32); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 arg1, uint32_t arg2, uint32_t arg3) { fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1; uint32_t x2; uint32_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_tc26_gost_3410_2012_512_paramSetB_int1)(0x0 - x1) & UINT32_C(0xffffffff)); x3 = ((fiat_id_tc26_gost_3410_2012_512_paramSetB_value_barrier_u32(x2) & arg3) | (fiat_id_tc26_gost_3410_2012_512_paramSetB_value_barrier_u32((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_mul multiplies two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_mul( uint32_t out1[16], const uint32_t arg1[16], const uint32_t arg2[16]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint32_t x29; uint32_t x30; uint32_t x31; uint32_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x50; uint32_t x51; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x52; uint32_t x53; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x54; uint32_t x55; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x56; uint32_t x57; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x58; uint32_t x59; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x60; uint32_t x61; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x62; uint32_t x63; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x64; uint32_t x65; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x66; uint32_t x67; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x68; uint32_t x69; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x70; uint32_t x71; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x72; uint32_t x73; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x74; uint32_t x75; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x76; uint32_t x77; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x78; uint32_t x79; uint32_t x80; uint32_t x81; uint32_t x82; uint32_t x83; uint32_t x84; uint32_t x85; uint32_t x86; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x87; uint32_t x88; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x89; uint32_t x90; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x91; uint32_t x92; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x93; uint32_t x94; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x95; uint32_t x96; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x97; uint32_t x98; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x99; uint32_t x100; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x101; uint32_t x102; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x103; uint32_t x104; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x105; uint32_t x106; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x107; uint32_t x108; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x109; uint32_t x110; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x111; uint32_t x112; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x113; uint32_t x114; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x115; uint32_t x116; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x117; uint32_t x118; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x119; uint32_t x120; uint32_t x121; uint32_t x122; uint32_t x123; uint32_t x124; uint32_t x125; uint32_t x126; uint32_t x127; uint32_t x128; uint32_t x129; uint32_t x130; uint32_t x131; uint32_t x132; uint32_t x133; uint32_t x134; uint32_t x135; uint32_t x136; uint32_t x137; uint32_t x138; uint32_t x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; uint32_t x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x153; uint32_t x154; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x155; uint32_t x156; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x157; uint32_t x158; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x159; uint32_t x160; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x161; uint32_t x162; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x163; uint32_t x164; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x165; uint32_t x166; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x167; uint32_t x168; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x169; uint32_t x170; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x171; uint32_t x172; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x173; uint32_t x174; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x175; uint32_t x176; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x177; uint32_t x178; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x179; uint32_t x180; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x181; uint32_t x182; uint32_t x183; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x184; uint32_t x185; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x186; uint32_t x187; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x188; uint32_t x189; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x190; uint32_t x191; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x192; uint32_t x193; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x194; uint32_t x195; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x196; uint32_t x197; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x198; uint32_t x199; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x200; uint32_t x201; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x202; uint32_t x203; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x204; uint32_t x205; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x206; uint32_t x207; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x208; uint32_t x209; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x210; uint32_t x211; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x212; uint32_t x213; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x214; uint32_t x215; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x216; uint32_t x217; uint32_t x218; uint32_t x219; uint32_t x220; uint32_t x221; uint32_t x222; uint32_t x223; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x224; uint32_t x225; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x226; uint32_t x227; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x228; uint32_t x229; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x230; uint32_t x231; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x232; uint32_t x233; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x234; uint32_t x235; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x236; uint32_t x237; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x238; uint32_t x239; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x240; uint32_t x241; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x242; uint32_t x243; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x244; uint32_t x245; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x246; uint32_t x247; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x248; uint32_t x249; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x250; uint32_t x251; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x252; uint32_t x253; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x254; uint32_t x255; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x256; uint32_t x257; uint32_t x258; uint32_t x259; uint32_t x260; uint32_t x261; uint32_t x262; uint32_t x263; uint32_t x264; uint32_t x265; uint32_t x266; uint32_t x267; uint32_t x268; uint32_t x269; uint32_t x270; uint32_t x271; uint32_t x272; uint32_t x273; uint32_t x274; uint32_t x275; uint32_t x276; uint32_t x277; uint32_t x278; uint32_t x279; uint32_t x280; uint32_t x281; uint32_t x282; uint32_t x283; uint32_t x284; uint32_t x285; uint32_t x286; uint32_t x287; uint32_t x288; uint32_t x289; uint32_t x290; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x291; uint32_t x292; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x293; uint32_t x294; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x295; uint32_t x296; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x297; uint32_t x298; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x299; uint32_t x300; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x301; uint32_t x302; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x303; uint32_t x304; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x305; uint32_t x306; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x307; uint32_t x308; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x309; uint32_t x310; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x311; uint32_t x312; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x313; uint32_t x314; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x315; uint32_t x316; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x317; uint32_t x318; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x319; uint32_t x320; uint32_t x321; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x322; uint32_t x323; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x324; uint32_t x325; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x326; uint32_t x327; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x328; uint32_t x329; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x330; uint32_t x331; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x332; uint32_t x333; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x334; uint32_t x335; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x336; uint32_t x337; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x338; uint32_t x339; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x340; uint32_t x341; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x342; uint32_t x343; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x344; uint32_t x345; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x346; uint32_t x347; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x348; uint32_t x349; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x350; uint32_t x351; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x352; uint32_t x353; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x354; uint32_t x355; uint32_t x356; uint32_t x357; uint32_t x358; uint32_t x359; uint32_t x360; uint32_t x361; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x362; uint32_t x363; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x364; uint32_t x365; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x366; uint32_t x367; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x368; uint32_t x369; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x370; uint32_t x371; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x372; uint32_t x373; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x374; uint32_t x375; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x376; uint32_t x377; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x378; uint32_t x379; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x380; uint32_t x381; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x382; uint32_t x383; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x384; uint32_t x385; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x386; uint32_t x387; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x388; uint32_t x389; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x390; uint32_t x391; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x392; uint32_t x393; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x394; uint32_t x395; uint32_t x396; uint32_t x397; uint32_t x398; uint32_t x399; uint32_t x400; uint32_t x401; uint32_t x402; uint32_t x403; uint32_t x404; uint32_t x405; uint32_t x406; uint32_t x407; uint32_t x408; uint32_t x409; uint32_t x410; uint32_t x411; uint32_t x412; uint32_t x413; uint32_t x414; uint32_t x415; uint32_t x416; uint32_t x417; uint32_t x418; uint32_t x419; uint32_t x420; uint32_t x421; uint32_t x422; uint32_t x423; uint32_t x424; uint32_t x425; uint32_t x426; uint32_t x427; uint32_t x428; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x429; uint32_t x430; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x431; uint32_t x432; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x433; uint32_t x434; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x435; uint32_t x436; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x437; uint32_t x438; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x439; uint32_t x440; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x441; uint32_t x442; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x443; uint32_t x444; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x445; uint32_t x446; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x447; uint32_t x448; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x449; uint32_t x450; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x451; uint32_t x452; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x453; uint32_t x454; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x455; uint32_t x456; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x457; uint32_t x458; uint32_t x459; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x460; uint32_t x461; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x462; uint32_t x463; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x464; uint32_t x465; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x466; uint32_t x467; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x468; uint32_t x469; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x470; uint32_t x471; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x472; uint32_t x473; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x474; uint32_t x475; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x476; uint32_t x477; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x478; uint32_t x479; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x480; uint32_t x481; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x482; uint32_t x483; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x484; uint32_t x485; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x486; uint32_t x487; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x488; uint32_t x489; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x490; uint32_t x491; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x492; uint32_t x493; uint32_t x494; uint32_t x495; uint32_t x496; uint32_t x497; uint32_t x498; uint32_t x499; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x500; uint32_t x501; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x502; uint32_t x503; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x504; uint32_t x505; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x506; uint32_t x507; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x508; uint32_t x509; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x510; uint32_t x511; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x512; uint32_t x513; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x514; uint32_t x515; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x516; uint32_t x517; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x518; uint32_t x519; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x520; uint32_t x521; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x522; uint32_t x523; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x524; uint32_t x525; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x526; uint32_t x527; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x528; uint32_t x529; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x530; uint32_t x531; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x532; uint32_t x533; uint32_t x534; uint32_t x535; uint32_t x536; uint32_t x537; uint32_t x538; uint32_t x539; uint32_t x540; uint32_t x541; uint32_t x542; uint32_t x543; uint32_t x544; uint32_t x545; uint32_t x546; uint32_t x547; uint32_t x548; uint32_t x549; uint32_t x550; uint32_t x551; uint32_t x552; uint32_t x553; uint32_t x554; uint32_t x555; uint32_t x556; uint32_t x557; uint32_t x558; uint32_t x559; uint32_t x560; uint32_t x561; uint32_t x562; uint32_t x563; uint32_t x564; uint32_t x565; uint32_t x566; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x567; uint32_t x568; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x569; uint32_t x570; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x571; uint32_t x572; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x573; uint32_t x574; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x575; uint32_t x576; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x577; uint32_t x578; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x579; uint32_t x580; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x581; uint32_t x582; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x583; uint32_t x584; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x585; uint32_t x586; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x587; uint32_t x588; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x589; uint32_t x590; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x591; uint32_t x592; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x593; uint32_t x594; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x595; uint32_t x596; uint32_t x597; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x598; uint32_t x599; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x600; uint32_t x601; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x602; uint32_t x603; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x604; uint32_t x605; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x606; uint32_t x607; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x608; uint32_t x609; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x610; uint32_t x611; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x612; uint32_t x613; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x614; uint32_t x615; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x616; uint32_t x617; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x618; uint32_t x619; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x620; uint32_t x621; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x622; uint32_t x623; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x624; uint32_t x625; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x626; uint32_t x627; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x628; uint32_t x629; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x630; uint32_t x631; uint32_t x632; uint32_t x633; uint32_t x634; uint32_t x635; uint32_t x636; uint32_t x637; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x638; uint32_t x639; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x640; uint32_t x641; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x642; uint32_t x643; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x644; uint32_t x645; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x646; uint32_t x647; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x648; uint32_t x649; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x650; uint32_t x651; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x652; uint32_t x653; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x654; uint32_t x655; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x656; uint32_t x657; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x658; uint32_t x659; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x660; uint32_t x661; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x662; uint32_t x663; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x664; uint32_t x665; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x666; uint32_t x667; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x668; uint32_t x669; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x670; uint32_t x671; uint32_t x672; uint32_t x673; uint32_t x674; uint32_t x675; uint32_t x676; uint32_t x677; uint32_t x678; uint32_t x679; uint32_t x680; uint32_t x681; uint32_t x682; uint32_t x683; uint32_t x684; uint32_t x685; uint32_t x686; uint32_t x687; uint32_t x688; uint32_t x689; uint32_t x690; uint32_t x691; uint32_t x692; uint32_t x693; uint32_t x694; uint32_t x695; uint32_t x696; uint32_t x697; uint32_t x698; uint32_t x699; uint32_t x700; uint32_t x701; uint32_t x702; uint32_t x703; uint32_t x704; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x705; uint32_t x706; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x707; uint32_t x708; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x709; uint32_t x710; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x711; uint32_t x712; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x713; uint32_t x714; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x715; uint32_t x716; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x717; uint32_t x718; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x719; uint32_t x720; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x721; uint32_t x722; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x723; uint32_t x724; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x725; uint32_t x726; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x727; uint32_t x728; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x729; uint32_t x730; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x731; uint32_t x732; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x733; uint32_t x734; uint32_t x735; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x736; uint32_t x737; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x738; uint32_t x739; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x740; uint32_t x741; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x742; uint32_t x743; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x744; uint32_t x745; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x746; uint32_t x747; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x748; uint32_t x749; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x750; uint32_t x751; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x752; uint32_t x753; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x754; uint32_t x755; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x756; uint32_t x757; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x758; uint32_t x759; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x760; uint32_t x761; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x762; uint32_t x763; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x764; uint32_t x765; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x766; uint32_t x767; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x768; uint32_t x769; uint32_t x770; uint32_t x771; uint32_t x772; uint32_t x773; uint32_t x774; uint32_t x775; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x776; uint32_t x777; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x778; uint32_t x779; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x780; uint32_t x781; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x782; uint32_t x783; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x784; uint32_t x785; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x786; uint32_t x787; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x788; uint32_t x789; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x790; uint32_t x791; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x792; uint32_t x793; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x794; uint32_t x795; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x796; uint32_t x797; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x798; uint32_t x799; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x800; uint32_t x801; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x802; uint32_t x803; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x804; uint32_t x805; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x806; uint32_t x807; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x808; uint32_t x809; uint32_t x810; uint32_t x811; uint32_t x812; uint32_t x813; uint32_t x814; uint32_t x815; uint32_t x816; uint32_t x817; uint32_t x818; uint32_t x819; uint32_t x820; uint32_t x821; uint32_t x822; uint32_t x823; uint32_t x824; uint32_t x825; uint32_t x826; uint32_t x827; uint32_t x828; uint32_t x829; uint32_t x830; uint32_t x831; uint32_t x832; uint32_t x833; uint32_t x834; uint32_t x835; uint32_t x836; uint32_t x837; uint32_t x838; uint32_t x839; uint32_t x840; uint32_t x841; uint32_t x842; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x843; uint32_t x844; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x845; uint32_t x846; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x847; uint32_t x848; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x849; uint32_t x850; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x851; uint32_t x852; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x853; uint32_t x854; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x855; uint32_t x856; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x857; uint32_t x858; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x859; uint32_t x860; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x861; uint32_t x862; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x863; uint32_t x864; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x865; uint32_t x866; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x867; uint32_t x868; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x869; uint32_t x870; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x871; uint32_t x872; uint32_t x873; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x874; uint32_t x875; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x876; uint32_t x877; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x878; uint32_t x879; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x880; uint32_t x881; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x882; uint32_t x883; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x884; uint32_t x885; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x886; uint32_t x887; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x888; uint32_t x889; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x890; uint32_t x891; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x892; uint32_t x893; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x894; uint32_t x895; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x896; uint32_t x897; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x898; uint32_t x899; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x900; uint32_t x901; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x902; uint32_t x903; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x904; uint32_t x905; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x906; uint32_t x907; uint32_t x908; uint32_t x909; uint32_t x910; uint32_t x911; uint32_t x912; uint32_t x913; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x914; uint32_t x915; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x916; uint32_t x917; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x918; uint32_t x919; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x920; uint32_t x921; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x922; uint32_t x923; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x924; uint32_t x925; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x926; uint32_t x927; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x928; uint32_t x929; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x930; uint32_t x931; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x932; uint32_t x933; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x934; uint32_t x935; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x936; uint32_t x937; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x938; uint32_t x939; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x940; uint32_t x941; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x942; uint32_t x943; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x944; uint32_t x945; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x946; uint32_t x947; uint32_t x948; uint32_t x949; uint32_t x950; uint32_t x951; uint32_t x952; uint32_t x953; uint32_t x954; uint32_t x955; uint32_t x956; uint32_t x957; uint32_t x958; uint32_t x959; uint32_t x960; uint32_t x961; uint32_t x962; uint32_t x963; uint32_t x964; uint32_t x965; uint32_t x966; uint32_t x967; uint32_t x968; uint32_t x969; uint32_t x970; uint32_t x971; uint32_t x972; uint32_t x973; uint32_t x974; uint32_t x975; uint32_t x976; uint32_t x977; uint32_t x978; uint32_t x979; uint32_t x980; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x981; uint32_t x982; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x983; uint32_t x984; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x985; uint32_t x986; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x987; uint32_t x988; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x989; uint32_t x990; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x991; uint32_t x992; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x993; uint32_t x994; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x995; uint32_t x996; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x997; uint32_t x998; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x999; uint32_t x1000; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1001; uint32_t x1002; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1003; uint32_t x1004; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1005; uint32_t x1006; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1007; uint32_t x1008; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1009; uint32_t x1010; uint32_t x1011; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1012; uint32_t x1013; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1014; uint32_t x1015; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1016; uint32_t x1017; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1018; uint32_t x1019; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1020; uint32_t x1021; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1022; uint32_t x1023; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1024; uint32_t x1025; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1026; uint32_t x1027; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1028; uint32_t x1029; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1030; uint32_t x1031; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1032; uint32_t x1033; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1034; uint32_t x1035; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1036; uint32_t x1037; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1038; uint32_t x1039; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1040; uint32_t x1041; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1042; uint32_t x1043; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1044; uint32_t x1045; uint32_t x1046; uint32_t x1047; uint32_t x1048; uint32_t x1049; uint32_t x1050; uint32_t x1051; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1052; uint32_t x1053; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1054; uint32_t x1055; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1056; uint32_t x1057; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1058; uint32_t x1059; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1060; uint32_t x1061; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1062; uint32_t x1063; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1064; uint32_t x1065; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1066; uint32_t x1067; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1068; uint32_t x1069; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1070; uint32_t x1071; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1072; uint32_t x1073; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1074; uint32_t x1075; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1076; uint32_t x1077; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1078; uint32_t x1079; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1080; uint32_t x1081; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1082; uint32_t x1083; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1084; uint32_t x1085; uint32_t x1086; uint32_t x1087; uint32_t x1088; uint32_t x1089; uint32_t x1090; uint32_t x1091; uint32_t x1092; uint32_t x1093; uint32_t x1094; uint32_t x1095; uint32_t x1096; uint32_t x1097; uint32_t x1098; uint32_t x1099; uint32_t x1100; uint32_t x1101; uint32_t x1102; uint32_t x1103; uint32_t x1104; uint32_t x1105; uint32_t x1106; uint32_t x1107; uint32_t x1108; uint32_t x1109; uint32_t x1110; uint32_t x1111; uint32_t x1112; uint32_t x1113; uint32_t x1114; uint32_t x1115; uint32_t x1116; uint32_t x1117; uint32_t x1118; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1119; uint32_t x1120; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1121; uint32_t x1122; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1123; uint32_t x1124; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1125; uint32_t x1126; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1127; uint32_t x1128; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1129; uint32_t x1130; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1131; uint32_t x1132; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1133; uint32_t x1134; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1135; uint32_t x1136; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1137; uint32_t x1138; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1139; uint32_t x1140; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1141; uint32_t x1142; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1143; uint32_t x1144; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1145; uint32_t x1146; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1147; uint32_t x1148; uint32_t x1149; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1150; uint32_t x1151; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1152; uint32_t x1153; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1154; uint32_t x1155; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1156; uint32_t x1157; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1158; uint32_t x1159; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1160; uint32_t x1161; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1162; uint32_t x1163; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1164; uint32_t x1165; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1166; uint32_t x1167; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1168; uint32_t x1169; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1170; uint32_t x1171; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1172; uint32_t x1173; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1174; uint32_t x1175; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1176; uint32_t x1177; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1178; uint32_t x1179; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1180; uint32_t x1181; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1182; uint32_t x1183; uint32_t x1184; uint32_t x1185; uint32_t x1186; uint32_t x1187; uint32_t x1188; uint32_t x1189; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1190; uint32_t x1191; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1192; uint32_t x1193; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1194; uint32_t x1195; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1196; uint32_t x1197; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1198; uint32_t x1199; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1200; uint32_t x1201; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1202; uint32_t x1203; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1204; uint32_t x1205; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1206; uint32_t x1207; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1208; uint32_t x1209; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1210; uint32_t x1211; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1212; uint32_t x1213; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1214; uint32_t x1215; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1216; uint32_t x1217; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1218; uint32_t x1219; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1220; uint32_t x1221; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1222; uint32_t x1223; uint32_t x1224; uint32_t x1225; uint32_t x1226; uint32_t x1227; uint32_t x1228; uint32_t x1229; uint32_t x1230; uint32_t x1231; uint32_t x1232; uint32_t x1233; uint32_t x1234; uint32_t x1235; uint32_t x1236; uint32_t x1237; uint32_t x1238; uint32_t x1239; uint32_t x1240; uint32_t x1241; uint32_t x1242; uint32_t x1243; uint32_t x1244; uint32_t x1245; uint32_t x1246; uint32_t x1247; uint32_t x1248; uint32_t x1249; uint32_t x1250; uint32_t x1251; uint32_t x1252; uint32_t x1253; uint32_t x1254; uint32_t x1255; uint32_t x1256; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1257; uint32_t x1258; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1259; uint32_t x1260; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1261; uint32_t x1262; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1263; uint32_t x1264; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1265; uint32_t x1266; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1267; uint32_t x1268; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1269; uint32_t x1270; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1271; uint32_t x1272; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1273; uint32_t x1274; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1275; uint32_t x1276; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1277; uint32_t x1278; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1279; uint32_t x1280; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1281; uint32_t x1282; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1283; uint32_t x1284; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1285; uint32_t x1286; uint32_t x1287; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1288; uint32_t x1289; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1290; uint32_t x1291; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1292; uint32_t x1293; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1294; uint32_t x1295; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1296; uint32_t x1297; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1298; uint32_t x1299; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1300; uint32_t x1301; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1302; uint32_t x1303; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1304; uint32_t x1305; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1306; uint32_t x1307; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1308; uint32_t x1309; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1310; uint32_t x1311; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1312; uint32_t x1313; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1314; uint32_t x1315; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1316; uint32_t x1317; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1318; uint32_t x1319; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1320; uint32_t x1321; uint32_t x1322; uint32_t x1323; uint32_t x1324; uint32_t x1325; uint32_t x1326; uint32_t x1327; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1328; uint32_t x1329; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1330; uint32_t x1331; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1332; uint32_t x1333; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1334; uint32_t x1335; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1336; uint32_t x1337; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1338; uint32_t x1339; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1340; uint32_t x1341; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1342; uint32_t x1343; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1344; uint32_t x1345; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1346; uint32_t x1347; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1348; uint32_t x1349; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1350; uint32_t x1351; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1352; uint32_t x1353; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1354; uint32_t x1355; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1356; uint32_t x1357; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1358; uint32_t x1359; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1360; uint32_t x1361; uint32_t x1362; uint32_t x1363; uint32_t x1364; uint32_t x1365; uint32_t x1366; uint32_t x1367; uint32_t x1368; uint32_t x1369; uint32_t x1370; uint32_t x1371; uint32_t x1372; uint32_t x1373; uint32_t x1374; uint32_t x1375; uint32_t x1376; uint32_t x1377; uint32_t x1378; uint32_t x1379; uint32_t x1380; uint32_t x1381; uint32_t x1382; uint32_t x1383; uint32_t x1384; uint32_t x1385; uint32_t x1386; uint32_t x1387; uint32_t x1388; uint32_t x1389; uint32_t x1390; uint32_t x1391; uint32_t x1392; uint32_t x1393; uint32_t x1394; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1395; uint32_t x1396; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1397; uint32_t x1398; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1399; uint32_t x1400; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1401; uint32_t x1402; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1403; uint32_t x1404; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1405; uint32_t x1406; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1407; uint32_t x1408; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1409; uint32_t x1410; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1411; uint32_t x1412; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1413; uint32_t x1414; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1415; uint32_t x1416; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1417; uint32_t x1418; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1419; uint32_t x1420; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1421; uint32_t x1422; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1423; uint32_t x1424; uint32_t x1425; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1426; uint32_t x1427; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1428; uint32_t x1429; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1430; uint32_t x1431; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1432; uint32_t x1433; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1434; uint32_t x1435; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1436; uint32_t x1437; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1438; uint32_t x1439; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1440; uint32_t x1441; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1442; uint32_t x1443; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1444; uint32_t x1445; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1446; uint32_t x1447; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1448; uint32_t x1449; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1450; uint32_t x1451; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1452; uint32_t x1453; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1454; uint32_t x1455; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1456; uint32_t x1457; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1458; uint32_t x1459; uint32_t x1460; uint32_t x1461; uint32_t x1462; uint32_t x1463; uint32_t x1464; uint32_t x1465; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1466; uint32_t x1467; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1468; uint32_t x1469; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1470; uint32_t x1471; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1472; uint32_t x1473; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1474; uint32_t x1475; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1476; uint32_t x1477; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1478; uint32_t x1479; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1480; uint32_t x1481; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1482; uint32_t x1483; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1484; uint32_t x1485; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1486; uint32_t x1487; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1488; uint32_t x1489; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1490; uint32_t x1491; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1492; uint32_t x1493; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1494; uint32_t x1495; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1496; uint32_t x1497; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1498; uint32_t x1499; uint32_t x1500; uint32_t x1501; uint32_t x1502; uint32_t x1503; uint32_t x1504; uint32_t x1505; uint32_t x1506; uint32_t x1507; uint32_t x1508; uint32_t x1509; uint32_t x1510; uint32_t x1511; uint32_t x1512; uint32_t x1513; uint32_t x1514; uint32_t x1515; uint32_t x1516; uint32_t x1517; uint32_t x1518; uint32_t x1519; uint32_t x1520; uint32_t x1521; uint32_t x1522; uint32_t x1523; uint32_t x1524; uint32_t x1525; uint32_t x1526; uint32_t x1527; uint32_t x1528; uint32_t x1529; uint32_t x1530; uint32_t x1531; uint32_t x1532; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1533; uint32_t x1534; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1535; uint32_t x1536; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1537; uint32_t x1538; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1539; uint32_t x1540; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1541; uint32_t x1542; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1543; uint32_t x1544; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1545; uint32_t x1546; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1547; uint32_t x1548; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1549; uint32_t x1550; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1551; uint32_t x1552; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1553; uint32_t x1554; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1555; uint32_t x1556; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1557; uint32_t x1558; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1559; uint32_t x1560; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1561; uint32_t x1562; uint32_t x1563; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1564; uint32_t x1565; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1566; uint32_t x1567; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1568; uint32_t x1569; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1570; uint32_t x1571; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1572; uint32_t x1573; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1574; uint32_t x1575; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1576; uint32_t x1577; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1578; uint32_t x1579; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1580; uint32_t x1581; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1582; uint32_t x1583; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1584; uint32_t x1585; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1586; uint32_t x1587; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1588; uint32_t x1589; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1590; uint32_t x1591; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1592; uint32_t x1593; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1594; uint32_t x1595; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1596; uint32_t x1597; uint32_t x1598; uint32_t x1599; uint32_t x1600; uint32_t x1601; uint32_t x1602; uint32_t x1603; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1604; uint32_t x1605; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1606; uint32_t x1607; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1608; uint32_t x1609; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1610; uint32_t x1611; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1612; uint32_t x1613; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1614; uint32_t x1615; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1616; uint32_t x1617; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1618; uint32_t x1619; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1620; uint32_t x1621; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1622; uint32_t x1623; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1624; uint32_t x1625; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1626; uint32_t x1627; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1628; uint32_t x1629; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1630; uint32_t x1631; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1632; uint32_t x1633; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1634; uint32_t x1635; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1636; uint32_t x1637; uint32_t x1638; uint32_t x1639; uint32_t x1640; uint32_t x1641; uint32_t x1642; uint32_t x1643; uint32_t x1644; uint32_t x1645; uint32_t x1646; uint32_t x1647; uint32_t x1648; uint32_t x1649; uint32_t x1650; uint32_t x1651; uint32_t x1652; uint32_t x1653; uint32_t x1654; uint32_t x1655; uint32_t x1656; uint32_t x1657; uint32_t x1658; uint32_t x1659; uint32_t x1660; uint32_t x1661; uint32_t x1662; uint32_t x1663; uint32_t x1664; uint32_t x1665; uint32_t x1666; uint32_t x1667; uint32_t x1668; uint32_t x1669; uint32_t x1670; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1671; uint32_t x1672; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1673; uint32_t x1674; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1675; uint32_t x1676; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1677; uint32_t x1678; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1679; uint32_t x1680; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1681; uint32_t x1682; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1683; uint32_t x1684; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1685; uint32_t x1686; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1687; uint32_t x1688; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1689; uint32_t x1690; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1691; uint32_t x1692; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1693; uint32_t x1694; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1695; uint32_t x1696; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1697; uint32_t x1698; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1699; uint32_t x1700; uint32_t x1701; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1702; uint32_t x1703; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1704; uint32_t x1705; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1706; uint32_t x1707; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1708; uint32_t x1709; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1710; uint32_t x1711; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1712; uint32_t x1713; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1714; uint32_t x1715; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1716; uint32_t x1717; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1718; uint32_t x1719; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1720; uint32_t x1721; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1722; uint32_t x1723; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1724; uint32_t x1725; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1726; uint32_t x1727; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1728; uint32_t x1729; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1730; uint32_t x1731; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1732; uint32_t x1733; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1734; uint32_t x1735; uint32_t x1736; uint32_t x1737; uint32_t x1738; uint32_t x1739; uint32_t x1740; uint32_t x1741; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1742; uint32_t x1743; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1744; uint32_t x1745; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1746; uint32_t x1747; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1748; uint32_t x1749; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1750; uint32_t x1751; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1752; uint32_t x1753; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1754; uint32_t x1755; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1756; uint32_t x1757; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1758; uint32_t x1759; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1760; uint32_t x1761; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1762; uint32_t x1763; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1764; uint32_t x1765; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1766; uint32_t x1767; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1768; uint32_t x1769; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1770; uint32_t x1771; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1772; uint32_t x1773; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1774; uint32_t x1775; uint32_t x1776; uint32_t x1777; uint32_t x1778; uint32_t x1779; uint32_t x1780; uint32_t x1781; uint32_t x1782; uint32_t x1783; uint32_t x1784; uint32_t x1785; uint32_t x1786; uint32_t x1787; uint32_t x1788; uint32_t x1789; uint32_t x1790; uint32_t x1791; uint32_t x1792; uint32_t x1793; uint32_t x1794; uint32_t x1795; uint32_t x1796; uint32_t x1797; uint32_t x1798; uint32_t x1799; uint32_t x1800; uint32_t x1801; uint32_t x1802; uint32_t x1803; uint32_t x1804; uint32_t x1805; uint32_t x1806; uint32_t x1807; uint32_t x1808; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1809; uint32_t x1810; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1811; uint32_t x1812; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1813; uint32_t x1814; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1815; uint32_t x1816; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1817; uint32_t x1818; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1819; uint32_t x1820; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1821; uint32_t x1822; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1823; uint32_t x1824; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1825; uint32_t x1826; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1827; uint32_t x1828; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1829; uint32_t x1830; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1831; uint32_t x1832; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1833; uint32_t x1834; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1835; uint32_t x1836; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1837; uint32_t x1838; uint32_t x1839; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1840; uint32_t x1841; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1842; uint32_t x1843; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1844; uint32_t x1845; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1846; uint32_t x1847; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1848; uint32_t x1849; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1850; uint32_t x1851; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1852; uint32_t x1853; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1854; uint32_t x1855; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1856; uint32_t x1857; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1858; uint32_t x1859; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1860; uint32_t x1861; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1862; uint32_t x1863; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1864; uint32_t x1865; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1866; uint32_t x1867; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1868; uint32_t x1869; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1870; uint32_t x1871; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1872; uint32_t x1873; uint32_t x1874; uint32_t x1875; uint32_t x1876; uint32_t x1877; uint32_t x1878; uint32_t x1879; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1880; uint32_t x1881; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1882; uint32_t x1883; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1884; uint32_t x1885; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1886; uint32_t x1887; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1888; uint32_t x1889; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1890; uint32_t x1891; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1892; uint32_t x1893; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1894; uint32_t x1895; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1896; uint32_t x1897; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1898; uint32_t x1899; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1900; uint32_t x1901; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1902; uint32_t x1903; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1904; uint32_t x1905; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1906; uint32_t x1907; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1908; uint32_t x1909; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1910; uint32_t x1911; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1912; uint32_t x1913; uint32_t x1914; uint32_t x1915; uint32_t x1916; uint32_t x1917; uint32_t x1918; uint32_t x1919; uint32_t x1920; uint32_t x1921; uint32_t x1922; uint32_t x1923; uint32_t x1924; uint32_t x1925; uint32_t x1926; uint32_t x1927; uint32_t x1928; uint32_t x1929; uint32_t x1930; uint32_t x1931; uint32_t x1932; uint32_t x1933; uint32_t x1934; uint32_t x1935; uint32_t x1936; uint32_t x1937; uint32_t x1938; uint32_t x1939; uint32_t x1940; uint32_t x1941; uint32_t x1942; uint32_t x1943; uint32_t x1944; uint32_t x1945; uint32_t x1946; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1947; uint32_t x1948; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1949; uint32_t x1950; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1951; uint32_t x1952; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1953; uint32_t x1954; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1955; uint32_t x1956; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1957; uint32_t x1958; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1959; uint32_t x1960; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1961; uint32_t x1962; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1963; uint32_t x1964; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1965; uint32_t x1966; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1967; uint32_t x1968; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1969; uint32_t x1970; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1971; uint32_t x1972; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1973; uint32_t x1974; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1975; uint32_t x1976; uint32_t x1977; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1978; uint32_t x1979; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1980; uint32_t x1981; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1982; uint32_t x1983; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1984; uint32_t x1985; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1986; uint32_t x1987; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1988; uint32_t x1989; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1990; uint32_t x1991; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1992; uint32_t x1993; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1994; uint32_t x1995; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1996; uint32_t x1997; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1998; uint32_t x1999; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2000; uint32_t x2001; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2002; uint32_t x2003; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2004; uint32_t x2005; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2006; uint32_t x2007; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2008; uint32_t x2009; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2010; uint32_t x2011; uint32_t x2012; uint32_t x2013; uint32_t x2014; uint32_t x2015; uint32_t x2016; uint32_t x2017; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2018; uint32_t x2019; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2020; uint32_t x2021; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2022; uint32_t x2023; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2024; uint32_t x2025; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2026; uint32_t x2027; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2028; uint32_t x2029; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2030; uint32_t x2031; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2032; uint32_t x2033; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2034; uint32_t x2035; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2036; uint32_t x2037; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2038; uint32_t x2039; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2040; uint32_t x2041; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2042; uint32_t x2043; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2044; uint32_t x2045; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2046; uint32_t x2047; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2048; uint32_t x2049; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2050; uint32_t x2051; uint32_t x2052; uint32_t x2053; uint32_t x2054; uint32_t x2055; uint32_t x2056; uint32_t x2057; uint32_t x2058; uint32_t x2059; uint32_t x2060; uint32_t x2061; uint32_t x2062; uint32_t x2063; uint32_t x2064; uint32_t x2065; uint32_t x2066; uint32_t x2067; uint32_t x2068; uint32_t x2069; uint32_t x2070; uint32_t x2071; uint32_t x2072; uint32_t x2073; uint32_t x2074; uint32_t x2075; uint32_t x2076; uint32_t x2077; uint32_t x2078; uint32_t x2079; uint32_t x2080; uint32_t x2081; uint32_t x2082; uint32_t x2083; uint32_t x2084; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2085; uint32_t x2086; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2087; uint32_t x2088; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2089; uint32_t x2090; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2091; uint32_t x2092; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2093; uint32_t x2094; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2095; uint32_t x2096; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2097; uint32_t x2098; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2099; uint32_t x2100; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2101; uint32_t x2102; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2103; uint32_t x2104; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2105; uint32_t x2106; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2107; uint32_t x2108; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2109; uint32_t x2110; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2111; uint32_t x2112; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2113; uint32_t x2114; uint32_t x2115; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2116; uint32_t x2117; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2118; uint32_t x2119; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2120; uint32_t x2121; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2122; uint32_t x2123; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2124; uint32_t x2125; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2126; uint32_t x2127; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2128; uint32_t x2129; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2130; uint32_t x2131; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2132; uint32_t x2133; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2134; uint32_t x2135; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2136; uint32_t x2137; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2138; uint32_t x2139; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2140; uint32_t x2141; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2142; uint32_t x2143; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2144; uint32_t x2145; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2146; uint32_t x2147; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2148; uint32_t x2149; uint32_t x2150; uint32_t x2151; uint32_t x2152; uint32_t x2153; uint32_t x2154; uint32_t x2155; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2156; uint32_t x2157; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2158; uint32_t x2159; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2160; uint32_t x2161; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2162; uint32_t x2163; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2164; uint32_t x2165; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2166; uint32_t x2167; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2168; uint32_t x2169; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2170; uint32_t x2171; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2172; uint32_t x2173; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2174; uint32_t x2175; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2176; uint32_t x2177; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2178; uint32_t x2179; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2180; uint32_t x2181; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2182; uint32_t x2183; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2184; uint32_t x2185; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2186; uint32_t x2187; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2188; uint32_t x2189; uint32_t x2190; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2191; uint32_t x2192; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2193; uint32_t x2194; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2195; uint32_t x2196; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2197; uint32_t x2198; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2199; uint32_t x2200; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2201; uint32_t x2202; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2203; uint32_t x2204; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2205; uint32_t x2206; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2207; uint32_t x2208; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2209; uint32_t x2210; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2211; uint32_t x2212; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2213; uint32_t x2214; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2215; uint32_t x2216; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2217; uint32_t x2218; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2219; uint32_t x2220; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2221; uint32_t x2222; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2223; uint32_t x2224; uint32_t x2225; uint32_t x2226; uint32_t x2227; uint32_t x2228; uint32_t x2229; uint32_t x2230; uint32_t x2231; uint32_t x2232; uint32_t x2233; uint32_t x2234; uint32_t x2235; uint32_t x2236; uint32_t x2237; uint32_t x2238; uint32_t x2239; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[8]); x9 = (arg1[9]); x10 = (arg1[10]); x11 = (arg1[11]); x12 = (arg1[12]); x13 = (arg1[13]); x14 = (arg1[14]); x15 = (arg1[15]); x16 = (arg1[0]); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x17, &x18, x16, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x19, &x20, x16, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x21, &x22, x16, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x23, &x24, x16, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x25, &x26, x16, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x27, &x28, x16, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x29, &x30, x16, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x31, &x32, x16, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x33, &x34, x16, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x35, &x36, x16, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x37, &x38, x16, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x39, &x40, x16, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x41, &x42, x16, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x43, &x44, x16, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x45, &x46, x16, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x47, &x48, x16, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x49, &x50, 0x0, x48, x45); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x51, &x52, x50, x46, x43); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x53, &x54, x52, x44, x41); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x55, &x56, x54, x42, x39); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x57, &x58, x56, x40, x37); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x59, &x60, x58, x38, x35); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x61, &x62, x60, x36, x33); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x63, &x64, x62, x34, x31); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x65, &x66, x64, x32, x29); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x67, &x68, x66, x30, x27); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x69, &x70, x68, x28, x25); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x71, &x72, x70, x26, x23); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x73, &x74, x72, x24, x21); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x75, &x76, x74, x22, x19); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x77, &x78, x76, x20, x17); x79 = (x78 + x18); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x80, &x81, x47, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x82, &x83, x80, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x84, &x85, x80, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x86, &x87, 0x0, x47, x84); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x88, &x89, x87, x49, x85); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x90, &x91, x89, x51, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x92, &x93, x91, x53, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x94, &x95, x93, x55, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x96, &x97, x95, x57, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x98, &x99, x97, x59, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x100, &x101, x99, x61, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x102, &x103, x101, x63, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x104, &x105, x103, x65, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x106, &x107, x105, x67, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x108, &x109, x107, x69, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x110, &x111, x109, x71, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x112, &x113, x111, x73, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x114, &x115, x113, x75, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x116, &x117, x115, x77, x82); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x118, &x119, x117, x79, x83); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x120, &x121, x1, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x122, &x123, x1, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x124, &x125, x1, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x126, &x127, x1, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x128, &x129, x1, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x130, &x131, x1, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x132, &x133, x1, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x134, &x135, x1, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x136, &x137, x1, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x138, &x139, x1, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x140, &x141, x1, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x142, &x143, x1, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x144, &x145, x1, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x146, &x147, x1, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x148, &x149, x1, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x150, &x151, x1, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x152, &x153, 0x0, x151, x148); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x154, &x155, x153, x149, x146); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x156, &x157, x155, x147, x144); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x158, &x159, x157, x145, x142); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x160, &x161, x159, x143, x140); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x162, &x163, x161, x141, x138); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x164, &x165, x163, x139, x136); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x166, &x167, x165, x137, x134); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x168, &x169, x167, x135, x132); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x170, &x171, x169, x133, x130); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x172, &x173, x171, x131, x128); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x174, &x175, x173, x129, x126); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x176, &x177, x175, x127, x124); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x178, &x179, x177, x125, x122); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x180, &x181, x179, x123, x120); x182 = (x181 + x121); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x183, &x184, 0x0, x88, x150); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x185, &x186, x184, x90, x152); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x187, &x188, x186, x92, x154); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x189, &x190, x188, x94, x156); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x191, &x192, x190, x96, x158); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x193, &x194, x192, x98, x160); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x195, &x196, x194, x100, x162); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x197, &x198, x196, x102, x164); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x199, &x200, x198, x104, x166); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x201, &x202, x200, x106, x168); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x203, &x204, x202, x108, x170); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x205, &x206, x204, x110, x172); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x207, &x208, x206, x112, x174); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x209, &x210, x208, x114, x176); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x211, &x212, x210, x116, x178); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x213, &x214, x212, x118, x180); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x215, &x216, x214, x119, x182); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x217, &x218, x183, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x219, &x220, x217, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x221, &x222, x217, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x223, &x224, 0x0, x183, x221); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x225, &x226, x224, x185, x222); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x227, &x228, x226, x187, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x229, &x230, x228, x189, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x231, &x232, x230, x191, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x233, &x234, x232, x193, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x235, &x236, x234, x195, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x237, &x238, x236, x197, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x239, &x240, x238, x199, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x241, &x242, x240, x201, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x243, &x244, x242, x203, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x245, &x246, x244, x205, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x247, &x248, x246, x207, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x249, &x250, x248, x209, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x251, &x252, x250, x211, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x253, &x254, x252, x213, x219); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x255, &x256, x254, x215, x220); x257 = ((uint32_t)x256 + x216); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x258, &x259, x2, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x260, &x261, x2, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x262, &x263, x2, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x264, &x265, x2, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x266, &x267, x2, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x268, &x269, x2, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x270, &x271, x2, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x272, &x273, x2, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x274, &x275, x2, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x276, &x277, x2, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x278, &x279, x2, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x280, &x281, x2, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x282, &x283, x2, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x284, &x285, x2, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x286, &x287, x2, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x288, &x289, x2, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x290, &x291, 0x0, x289, x286); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x292, &x293, x291, x287, x284); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x294, &x295, x293, x285, x282); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x296, &x297, x295, x283, x280); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x298, &x299, x297, x281, x278); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x300, &x301, x299, x279, x276); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x302, &x303, x301, x277, x274); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x304, &x305, x303, x275, x272); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x306, &x307, x305, x273, x270); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x308, &x309, x307, x271, x268); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x310, &x311, x309, x269, x266); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x312, &x313, x311, x267, x264); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x314, &x315, x313, x265, x262); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x316, &x317, x315, x263, x260); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x318, &x319, x317, x261, x258); x320 = (x319 + x259); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x321, &x322, 0x0, x225, x288); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x323, &x324, x322, x227, x290); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x325, &x326, x324, x229, x292); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x327, &x328, x326, x231, x294); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x329, &x330, x328, x233, x296); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x331, &x332, x330, x235, x298); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x333, &x334, x332, x237, x300); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x335, &x336, x334, x239, x302); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x337, &x338, x336, x241, x304); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x339, &x340, x338, x243, x306); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x341, &x342, x340, x245, x308); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x343, &x344, x342, x247, x310); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x345, &x346, x344, x249, x312); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x347, &x348, x346, x251, x314); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x349, &x350, x348, x253, x316); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x351, &x352, x350, x255, x318); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x353, &x354, x352, x257, x320); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x355, &x356, x321, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x357, &x358, x355, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x359, &x360, x355, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x361, &x362, 0x0, x321, x359); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x363, &x364, x362, x323, x360); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x365, &x366, x364, x325, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x367, &x368, x366, x327, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x369, &x370, x368, x329, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x371, &x372, x370, x331, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x373, &x374, x372, x333, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x375, &x376, x374, x335, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x377, &x378, x376, x337, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x379, &x380, x378, x339, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x381, &x382, x380, x341, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x383, &x384, x382, x343, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x385, &x386, x384, x345, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x387, &x388, x386, x347, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x389, &x390, x388, x349, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x391, &x392, x390, x351, x357); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x393, &x394, x392, x353, x358); x395 = ((uint32_t)x394 + x354); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x396, &x397, x3, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x398, &x399, x3, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x400, &x401, x3, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x402, &x403, x3, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x404, &x405, x3, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x406, &x407, x3, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x408, &x409, x3, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x410, &x411, x3, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x412, &x413, x3, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x414, &x415, x3, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x416, &x417, x3, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x418, &x419, x3, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x420, &x421, x3, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x422, &x423, x3, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x424, &x425, x3, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x426, &x427, x3, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x428, &x429, 0x0, x427, x424); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x430, &x431, x429, x425, x422); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x432, &x433, x431, x423, x420); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x434, &x435, x433, x421, x418); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x436, &x437, x435, x419, x416); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x438, &x439, x437, x417, x414); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x440, &x441, x439, x415, x412); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x442, &x443, x441, x413, x410); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x444, &x445, x443, x411, x408); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x446, &x447, x445, x409, x406); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x448, &x449, x447, x407, x404); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x450, &x451, x449, x405, x402); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x452, &x453, x451, x403, x400); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x454, &x455, x453, x401, x398); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x456, &x457, x455, x399, x396); x458 = (x457 + x397); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x459, &x460, 0x0, x363, x426); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x461, &x462, x460, x365, x428); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x463, &x464, x462, x367, x430); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x465, &x466, x464, x369, x432); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x467, &x468, x466, x371, x434); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x469, &x470, x468, x373, x436); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x471, &x472, x470, x375, x438); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x473, &x474, x472, x377, x440); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x475, &x476, x474, x379, x442); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x477, &x478, x476, x381, x444); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x479, &x480, x478, x383, x446); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x481, &x482, x480, x385, x448); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x483, &x484, x482, x387, x450); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x485, &x486, x484, x389, x452); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x487, &x488, x486, x391, x454); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x489, &x490, x488, x393, x456); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x491, &x492, x490, x395, x458); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x493, &x494, x459, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x495, &x496, x493, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x497, &x498, x493, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x499, &x500, 0x0, x459, x497); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x501, &x502, x500, x461, x498); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x503, &x504, x502, x463, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x505, &x506, x504, x465, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x507, &x508, x506, x467, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x509, &x510, x508, x469, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x511, &x512, x510, x471, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x513, &x514, x512, x473, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x515, &x516, x514, x475, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x517, &x518, x516, x477, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x519, &x520, x518, x479, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x521, &x522, x520, x481, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x523, &x524, x522, x483, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x525, &x526, x524, x485, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x527, &x528, x526, x487, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x529, &x530, x528, x489, x495); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x531, &x532, x530, x491, x496); x533 = ((uint32_t)x532 + x492); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x534, &x535, x4, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x536, &x537, x4, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x538, &x539, x4, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x540, &x541, x4, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x542, &x543, x4, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x544, &x545, x4, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x546, &x547, x4, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x548, &x549, x4, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x550, &x551, x4, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x552, &x553, x4, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x554, &x555, x4, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x556, &x557, x4, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x558, &x559, x4, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x560, &x561, x4, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x562, &x563, x4, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x564, &x565, x4, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x566, &x567, 0x0, x565, x562); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x568, &x569, x567, x563, x560); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x570, &x571, x569, x561, x558); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x572, &x573, x571, x559, x556); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x574, &x575, x573, x557, x554); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x576, &x577, x575, x555, x552); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x578, &x579, x577, x553, x550); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x580, &x581, x579, x551, x548); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x582, &x583, x581, x549, x546); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x584, &x585, x583, x547, x544); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x586, &x587, x585, x545, x542); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x588, &x589, x587, x543, x540); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x590, &x591, x589, x541, x538); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x592, &x593, x591, x539, x536); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x594, &x595, x593, x537, x534); x596 = (x595 + x535); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x597, &x598, 0x0, x501, x564); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x599, &x600, x598, x503, x566); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x601, &x602, x600, x505, x568); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x603, &x604, x602, x507, x570); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x605, &x606, x604, x509, x572); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x607, &x608, x606, x511, x574); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x609, &x610, x608, x513, x576); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x611, &x612, x610, x515, x578); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x613, &x614, x612, x517, x580); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x615, &x616, x614, x519, x582); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x617, &x618, x616, x521, x584); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x619, &x620, x618, x523, x586); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x621, &x622, x620, x525, x588); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x623, &x624, x622, x527, x590); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x625, &x626, x624, x529, x592); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x627, &x628, x626, x531, x594); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x629, &x630, x628, x533, x596); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x631, &x632, x597, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x633, &x634, x631, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x635, &x636, x631, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x637, &x638, 0x0, x597, x635); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x639, &x640, x638, x599, x636); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x641, &x642, x640, x601, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x643, &x644, x642, x603, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x645, &x646, x644, x605, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x647, &x648, x646, x607, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x649, &x650, x648, x609, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x651, &x652, x650, x611, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x653, &x654, x652, x613, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x655, &x656, x654, x615, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x657, &x658, x656, x617, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x659, &x660, x658, x619, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x661, &x662, x660, x621, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x663, &x664, x662, x623, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x665, &x666, x664, x625, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x667, &x668, x666, x627, x633); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x669, &x670, x668, x629, x634); x671 = ((uint32_t)x670 + x630); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x672, &x673, x5, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x674, &x675, x5, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x676, &x677, x5, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x678, &x679, x5, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x680, &x681, x5, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x682, &x683, x5, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x684, &x685, x5, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x686, &x687, x5, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x688, &x689, x5, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x690, &x691, x5, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x692, &x693, x5, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x694, &x695, x5, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x696, &x697, x5, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x698, &x699, x5, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x700, &x701, x5, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x702, &x703, x5, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x704, &x705, 0x0, x703, x700); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x706, &x707, x705, x701, x698); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x708, &x709, x707, x699, x696); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x710, &x711, x709, x697, x694); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x712, &x713, x711, x695, x692); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x714, &x715, x713, x693, x690); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x716, &x717, x715, x691, x688); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x718, &x719, x717, x689, x686); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x720, &x721, x719, x687, x684); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x722, &x723, x721, x685, x682); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x724, &x725, x723, x683, x680); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x726, &x727, x725, x681, x678); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x728, &x729, x727, x679, x676); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x730, &x731, x729, x677, x674); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x732, &x733, x731, x675, x672); x734 = (x733 + x673); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x735, &x736, 0x0, x639, x702); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x737, &x738, x736, x641, x704); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x739, &x740, x738, x643, x706); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x741, &x742, x740, x645, x708); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x743, &x744, x742, x647, x710); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x745, &x746, x744, x649, x712); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x747, &x748, x746, x651, x714); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x749, &x750, x748, x653, x716); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x751, &x752, x750, x655, x718); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x753, &x754, x752, x657, x720); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x755, &x756, x754, x659, x722); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x757, &x758, x756, x661, x724); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x759, &x760, x758, x663, x726); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x761, &x762, x760, x665, x728); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x763, &x764, x762, x667, x730); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x765, &x766, x764, x669, x732); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x767, &x768, x766, x671, x734); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x769, &x770, x735, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x771, &x772, x769, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x773, &x774, x769, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x775, &x776, 0x0, x735, x773); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x777, &x778, x776, x737, x774); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x779, &x780, x778, x739, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x781, &x782, x780, x741, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x783, &x784, x782, x743, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x785, &x786, x784, x745, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x787, &x788, x786, x747, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x789, &x790, x788, x749, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x791, &x792, x790, x751, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x793, &x794, x792, x753, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x795, &x796, x794, x755, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x797, &x798, x796, x757, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x799, &x800, x798, x759, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x801, &x802, x800, x761, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x803, &x804, x802, x763, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x805, &x806, x804, x765, x771); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x807, &x808, x806, x767, x772); x809 = ((uint32_t)x808 + x768); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x810, &x811, x6, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x812, &x813, x6, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x814, &x815, x6, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x816, &x817, x6, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x818, &x819, x6, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x820, &x821, x6, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x822, &x823, x6, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x824, &x825, x6, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x826, &x827, x6, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x828, &x829, x6, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x830, &x831, x6, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x832, &x833, x6, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x834, &x835, x6, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x836, &x837, x6, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x838, &x839, x6, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x840, &x841, x6, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x842, &x843, 0x0, x841, x838); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x844, &x845, x843, x839, x836); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x846, &x847, x845, x837, x834); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x848, &x849, x847, x835, x832); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x850, &x851, x849, x833, x830); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x852, &x853, x851, x831, x828); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x854, &x855, x853, x829, x826); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x856, &x857, x855, x827, x824); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x858, &x859, x857, x825, x822); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x860, &x861, x859, x823, x820); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x862, &x863, x861, x821, x818); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x864, &x865, x863, x819, x816); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x866, &x867, x865, x817, x814); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x868, &x869, x867, x815, x812); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x870, &x871, x869, x813, x810); x872 = (x871 + x811); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x873, &x874, 0x0, x777, x840); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x875, &x876, x874, x779, x842); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x877, &x878, x876, x781, x844); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x879, &x880, x878, x783, x846); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x881, &x882, x880, x785, x848); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x883, &x884, x882, x787, x850); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x885, &x886, x884, x789, x852); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x887, &x888, x886, x791, x854); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x889, &x890, x888, x793, x856); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x891, &x892, x890, x795, x858); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x893, &x894, x892, x797, x860); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x895, &x896, x894, x799, x862); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x897, &x898, x896, x801, x864); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x899, &x900, x898, x803, x866); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x901, &x902, x900, x805, x868); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x903, &x904, x902, x807, x870); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x905, &x906, x904, x809, x872); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x907, &x908, x873, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x909, &x910, x907, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x911, &x912, x907, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x913, &x914, 0x0, x873, x911); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x915, &x916, x914, x875, x912); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x917, &x918, x916, x877, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x919, &x920, x918, x879, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x921, &x922, x920, x881, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x923, &x924, x922, x883, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x925, &x926, x924, x885, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x927, &x928, x926, x887, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x929, &x930, x928, x889, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x931, &x932, x930, x891, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x933, &x934, x932, x893, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x935, &x936, x934, x895, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x937, &x938, x936, x897, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x939, &x940, x938, x899, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x941, &x942, x940, x901, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x943, &x944, x942, x903, x909); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x945, &x946, x944, x905, x910); x947 = ((uint32_t)x946 + x906); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x948, &x949, x7, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x950, &x951, x7, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x952, &x953, x7, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x954, &x955, x7, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x956, &x957, x7, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x958, &x959, x7, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x960, &x961, x7, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x962, &x963, x7, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x964, &x965, x7, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x966, &x967, x7, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x968, &x969, x7, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x970, &x971, x7, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x972, &x973, x7, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x974, &x975, x7, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x976, &x977, x7, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x978, &x979, x7, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x980, &x981, 0x0, x979, x976); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x982, &x983, x981, x977, x974); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x984, &x985, x983, x975, x972); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x986, &x987, x985, x973, x970); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x988, &x989, x987, x971, x968); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x990, &x991, x989, x969, x966); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x992, &x993, x991, x967, x964); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x994, &x995, x993, x965, x962); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x996, &x997, x995, x963, x960); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x998, &x999, x997, x961, x958); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1000, &x1001, x999, x959, x956); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1002, &x1003, x1001, x957, x954); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1004, &x1005, x1003, x955, x952); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1006, &x1007, x1005, x953, x950); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1008, &x1009, x1007, x951, x948); x1010 = (x1009 + x949); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1011, &x1012, 0x0, x915, x978); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1013, &x1014, x1012, x917, x980); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1015, &x1016, x1014, x919, x982); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1017, &x1018, x1016, x921, x984); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1019, &x1020, x1018, x923, x986); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1021, &x1022, x1020, x925, x988); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1023, &x1024, x1022, x927, x990); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1025, &x1026, x1024, x929, x992); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1027, &x1028, x1026, x931, x994); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1029, &x1030, x1028, x933, x996); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1031, &x1032, x1030, x935, x998); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1033, &x1034, x1032, x937, x1000); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1035, &x1036, x1034, x939, x1002); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1037, &x1038, x1036, x941, x1004); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1039, &x1040, x1038, x943, x1006); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1041, &x1042, x1040, x945, x1008); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1043, &x1044, x1042, x947, x1010); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1045, &x1046, x1011, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1047, &x1048, x1045, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1049, &x1050, x1045, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1051, &x1052, 0x0, x1011, x1049); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1053, &x1054, x1052, x1013, x1050); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1055, &x1056, x1054, x1015, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1057, &x1058, x1056, x1017, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1059, &x1060, x1058, x1019, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1061, &x1062, x1060, x1021, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1063, &x1064, x1062, x1023, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1065, &x1066, x1064, x1025, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1067, &x1068, x1066, x1027, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1069, &x1070, x1068, x1029, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1071, &x1072, x1070, x1031, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1073, &x1074, x1072, x1033, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1075, &x1076, x1074, x1035, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1077, &x1078, x1076, x1037, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1079, &x1080, x1078, x1039, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1081, &x1082, x1080, x1041, x1047); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1083, &x1084, x1082, x1043, x1048); x1085 = ((uint32_t)x1084 + x1044); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1086, &x1087, x8, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1088, &x1089, x8, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1090, &x1091, x8, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1092, &x1093, x8, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1094, &x1095, x8, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1096, &x1097, x8, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1098, &x1099, x8, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1100, &x1101, x8, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1102, &x1103, x8, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1104, &x1105, x8, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1106, &x1107, x8, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1108, &x1109, x8, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1110, &x1111, x8, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1112, &x1113, x8, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1114, &x1115, x8, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1116, &x1117, x8, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1118, &x1119, 0x0, x1117, x1114); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1120, &x1121, x1119, x1115, x1112); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1122, &x1123, x1121, x1113, x1110); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1124, &x1125, x1123, x1111, x1108); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1126, &x1127, x1125, x1109, x1106); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1128, &x1129, x1127, x1107, x1104); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1130, &x1131, x1129, x1105, x1102); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1132, &x1133, x1131, x1103, x1100); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1134, &x1135, x1133, x1101, x1098); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1136, &x1137, x1135, x1099, x1096); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1138, &x1139, x1137, x1097, x1094); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1140, &x1141, x1139, x1095, x1092); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1142, &x1143, x1141, x1093, x1090); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1144, &x1145, x1143, x1091, x1088); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1146, &x1147, x1145, x1089, x1086); x1148 = (x1147 + x1087); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1149, &x1150, 0x0, x1053, x1116); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1151, &x1152, x1150, x1055, x1118); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1153, &x1154, x1152, x1057, x1120); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1155, &x1156, x1154, x1059, x1122); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1157, &x1158, x1156, x1061, x1124); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1159, &x1160, x1158, x1063, x1126); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1161, &x1162, x1160, x1065, x1128); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1163, &x1164, x1162, x1067, x1130); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1165, &x1166, x1164, x1069, x1132); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1167, &x1168, x1166, x1071, x1134); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1169, &x1170, x1168, x1073, x1136); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1171, &x1172, x1170, x1075, x1138); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1173, &x1174, x1172, x1077, x1140); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1175, &x1176, x1174, x1079, x1142); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1177, &x1178, x1176, x1081, x1144); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1179, &x1180, x1178, x1083, x1146); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1181, &x1182, x1180, x1085, x1148); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1183, &x1184, x1149, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1185, &x1186, x1183, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1187, &x1188, x1183, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1189, &x1190, 0x0, x1149, x1187); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1191, &x1192, x1190, x1151, x1188); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1193, &x1194, x1192, x1153, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1195, &x1196, x1194, x1155, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1197, &x1198, x1196, x1157, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1199, &x1200, x1198, x1159, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1201, &x1202, x1200, x1161, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1203, &x1204, x1202, x1163, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1205, &x1206, x1204, x1165, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1207, &x1208, x1206, x1167, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1209, &x1210, x1208, x1169, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1211, &x1212, x1210, x1171, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1213, &x1214, x1212, x1173, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1215, &x1216, x1214, x1175, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1217, &x1218, x1216, x1177, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1219, &x1220, x1218, x1179, x1185); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1221, &x1222, x1220, x1181, x1186); x1223 = ((uint32_t)x1222 + x1182); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1224, &x1225, x9, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1226, &x1227, x9, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1228, &x1229, x9, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1230, &x1231, x9, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1232, &x1233, x9, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1234, &x1235, x9, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1236, &x1237, x9, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1238, &x1239, x9, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1240, &x1241, x9, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1242, &x1243, x9, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1244, &x1245, x9, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1246, &x1247, x9, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1248, &x1249, x9, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1250, &x1251, x9, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1252, &x1253, x9, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1254, &x1255, x9, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1256, &x1257, 0x0, x1255, x1252); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1258, &x1259, x1257, x1253, x1250); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1260, &x1261, x1259, x1251, x1248); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1262, &x1263, x1261, x1249, x1246); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1264, &x1265, x1263, x1247, x1244); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1266, &x1267, x1265, x1245, x1242); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1268, &x1269, x1267, x1243, x1240); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1270, &x1271, x1269, x1241, x1238); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1272, &x1273, x1271, x1239, x1236); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1274, &x1275, x1273, x1237, x1234); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1276, &x1277, x1275, x1235, x1232); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1278, &x1279, x1277, x1233, x1230); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1280, &x1281, x1279, x1231, x1228); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1282, &x1283, x1281, x1229, x1226); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1284, &x1285, x1283, x1227, x1224); x1286 = (x1285 + x1225); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1287, &x1288, 0x0, x1191, x1254); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1289, &x1290, x1288, x1193, x1256); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1291, &x1292, x1290, x1195, x1258); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1293, &x1294, x1292, x1197, x1260); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1295, &x1296, x1294, x1199, x1262); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1297, &x1298, x1296, x1201, x1264); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1299, &x1300, x1298, x1203, x1266); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1301, &x1302, x1300, x1205, x1268); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1303, &x1304, x1302, x1207, x1270); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1305, &x1306, x1304, x1209, x1272); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1307, &x1308, x1306, x1211, x1274); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1309, &x1310, x1308, x1213, x1276); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1311, &x1312, x1310, x1215, x1278); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1313, &x1314, x1312, x1217, x1280); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1315, &x1316, x1314, x1219, x1282); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1317, &x1318, x1316, x1221, x1284); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1319, &x1320, x1318, x1223, x1286); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1321, &x1322, x1287, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1323, &x1324, x1321, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1325, &x1326, x1321, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1327, &x1328, 0x0, x1287, x1325); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1329, &x1330, x1328, x1289, x1326); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1331, &x1332, x1330, x1291, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1333, &x1334, x1332, x1293, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1335, &x1336, x1334, x1295, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1337, &x1338, x1336, x1297, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1339, &x1340, x1338, x1299, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1341, &x1342, x1340, x1301, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1343, &x1344, x1342, x1303, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1345, &x1346, x1344, x1305, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1347, &x1348, x1346, x1307, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1349, &x1350, x1348, x1309, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1351, &x1352, x1350, x1311, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1353, &x1354, x1352, x1313, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1355, &x1356, x1354, x1315, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1357, &x1358, x1356, x1317, x1323); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1359, &x1360, x1358, x1319, x1324); x1361 = ((uint32_t)x1360 + x1320); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1362, &x1363, x10, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1364, &x1365, x10, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1366, &x1367, x10, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1368, &x1369, x10, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1370, &x1371, x10, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1372, &x1373, x10, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1374, &x1375, x10, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1376, &x1377, x10, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1378, &x1379, x10, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1380, &x1381, x10, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1382, &x1383, x10, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1384, &x1385, x10, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1386, &x1387, x10, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1388, &x1389, x10, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1390, &x1391, x10, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1392, &x1393, x10, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1394, &x1395, 0x0, x1393, x1390); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1396, &x1397, x1395, x1391, x1388); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1398, &x1399, x1397, x1389, x1386); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1400, &x1401, x1399, x1387, x1384); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1402, &x1403, x1401, x1385, x1382); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1404, &x1405, x1403, x1383, x1380); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1406, &x1407, x1405, x1381, x1378); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1408, &x1409, x1407, x1379, x1376); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1410, &x1411, x1409, x1377, x1374); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1412, &x1413, x1411, x1375, x1372); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1414, &x1415, x1413, x1373, x1370); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1416, &x1417, x1415, x1371, x1368); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1418, &x1419, x1417, x1369, x1366); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1420, &x1421, x1419, x1367, x1364); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1422, &x1423, x1421, x1365, x1362); x1424 = (x1423 + x1363); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1425, &x1426, 0x0, x1329, x1392); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1427, &x1428, x1426, x1331, x1394); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1429, &x1430, x1428, x1333, x1396); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1431, &x1432, x1430, x1335, x1398); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1433, &x1434, x1432, x1337, x1400); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1435, &x1436, x1434, x1339, x1402); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1437, &x1438, x1436, x1341, x1404); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1439, &x1440, x1438, x1343, x1406); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1441, &x1442, x1440, x1345, x1408); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1443, &x1444, x1442, x1347, x1410); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1445, &x1446, x1444, x1349, x1412); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1447, &x1448, x1446, x1351, x1414); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1449, &x1450, x1448, x1353, x1416); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1451, &x1452, x1450, x1355, x1418); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1453, &x1454, x1452, x1357, x1420); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1455, &x1456, x1454, x1359, x1422); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1457, &x1458, x1456, x1361, x1424); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1459, &x1460, x1425, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1461, &x1462, x1459, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1463, &x1464, x1459, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1465, &x1466, 0x0, x1425, x1463); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1467, &x1468, x1466, x1427, x1464); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1469, &x1470, x1468, x1429, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1471, &x1472, x1470, x1431, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1473, &x1474, x1472, x1433, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1475, &x1476, x1474, x1435, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1477, &x1478, x1476, x1437, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1479, &x1480, x1478, x1439, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1481, &x1482, x1480, x1441, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1483, &x1484, x1482, x1443, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1485, &x1486, x1484, x1445, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1487, &x1488, x1486, x1447, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1489, &x1490, x1488, x1449, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1491, &x1492, x1490, x1451, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1493, &x1494, x1492, x1453, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1495, &x1496, x1494, x1455, x1461); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1497, &x1498, x1496, x1457, x1462); x1499 = ((uint32_t)x1498 + x1458); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1500, &x1501, x11, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1502, &x1503, x11, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1504, &x1505, x11, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1506, &x1507, x11, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1508, &x1509, x11, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1510, &x1511, x11, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1512, &x1513, x11, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1514, &x1515, x11, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1516, &x1517, x11, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1518, &x1519, x11, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1520, &x1521, x11, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1522, &x1523, x11, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1524, &x1525, x11, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1526, &x1527, x11, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1528, &x1529, x11, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1530, &x1531, x11, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1532, &x1533, 0x0, x1531, x1528); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1534, &x1535, x1533, x1529, x1526); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1536, &x1537, x1535, x1527, x1524); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1538, &x1539, x1537, x1525, x1522); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1540, &x1541, x1539, x1523, x1520); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1542, &x1543, x1541, x1521, x1518); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1544, &x1545, x1543, x1519, x1516); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1546, &x1547, x1545, x1517, x1514); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1548, &x1549, x1547, x1515, x1512); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1550, &x1551, x1549, x1513, x1510); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1552, &x1553, x1551, x1511, x1508); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1554, &x1555, x1553, x1509, x1506); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1556, &x1557, x1555, x1507, x1504); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1558, &x1559, x1557, x1505, x1502); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1560, &x1561, x1559, x1503, x1500); x1562 = (x1561 + x1501); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1563, &x1564, 0x0, x1467, x1530); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1565, &x1566, x1564, x1469, x1532); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1567, &x1568, x1566, x1471, x1534); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1569, &x1570, x1568, x1473, x1536); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1571, &x1572, x1570, x1475, x1538); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1573, &x1574, x1572, x1477, x1540); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1575, &x1576, x1574, x1479, x1542); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1577, &x1578, x1576, x1481, x1544); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1579, &x1580, x1578, x1483, x1546); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1581, &x1582, x1580, x1485, x1548); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1583, &x1584, x1582, x1487, x1550); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1585, &x1586, x1584, x1489, x1552); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1587, &x1588, x1586, x1491, x1554); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1589, &x1590, x1588, x1493, x1556); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1591, &x1592, x1590, x1495, x1558); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1593, &x1594, x1592, x1497, x1560); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1595, &x1596, x1594, x1499, x1562); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1597, &x1598, x1563, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1599, &x1600, x1597, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1601, &x1602, x1597, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1603, &x1604, 0x0, x1563, x1601); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1605, &x1606, x1604, x1565, x1602); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1607, &x1608, x1606, x1567, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1609, &x1610, x1608, x1569, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1611, &x1612, x1610, x1571, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1613, &x1614, x1612, x1573, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1615, &x1616, x1614, x1575, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1617, &x1618, x1616, x1577, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1619, &x1620, x1618, x1579, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1621, &x1622, x1620, x1581, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1623, &x1624, x1622, x1583, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1625, &x1626, x1624, x1585, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1627, &x1628, x1626, x1587, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1629, &x1630, x1628, x1589, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1631, &x1632, x1630, x1591, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1633, &x1634, x1632, x1593, x1599); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1635, &x1636, x1634, x1595, x1600); x1637 = ((uint32_t)x1636 + x1596); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1638, &x1639, x12, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1640, &x1641, x12, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1642, &x1643, x12, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1644, &x1645, x12, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1646, &x1647, x12, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1648, &x1649, x12, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1650, &x1651, x12, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1652, &x1653, x12, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1654, &x1655, x12, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1656, &x1657, x12, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1658, &x1659, x12, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1660, &x1661, x12, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1662, &x1663, x12, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1664, &x1665, x12, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1666, &x1667, x12, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1668, &x1669, x12, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1670, &x1671, 0x0, x1669, x1666); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1672, &x1673, x1671, x1667, x1664); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1674, &x1675, x1673, x1665, x1662); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1676, &x1677, x1675, x1663, x1660); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1678, &x1679, x1677, x1661, x1658); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1680, &x1681, x1679, x1659, x1656); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1682, &x1683, x1681, x1657, x1654); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1684, &x1685, x1683, x1655, x1652); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1686, &x1687, x1685, x1653, x1650); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1688, &x1689, x1687, x1651, x1648); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1690, &x1691, x1689, x1649, x1646); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1692, &x1693, x1691, x1647, x1644); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1694, &x1695, x1693, x1645, x1642); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1696, &x1697, x1695, x1643, x1640); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1698, &x1699, x1697, x1641, x1638); x1700 = (x1699 + x1639); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1701, &x1702, 0x0, x1605, x1668); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1703, &x1704, x1702, x1607, x1670); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1705, &x1706, x1704, x1609, x1672); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1707, &x1708, x1706, x1611, x1674); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1709, &x1710, x1708, x1613, x1676); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1711, &x1712, x1710, x1615, x1678); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1713, &x1714, x1712, x1617, x1680); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1715, &x1716, x1714, x1619, x1682); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1717, &x1718, x1716, x1621, x1684); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1719, &x1720, x1718, x1623, x1686); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1721, &x1722, x1720, x1625, x1688); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1723, &x1724, x1722, x1627, x1690); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1725, &x1726, x1724, x1629, x1692); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1727, &x1728, x1726, x1631, x1694); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1729, &x1730, x1728, x1633, x1696); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1731, &x1732, x1730, x1635, x1698); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1733, &x1734, x1732, x1637, x1700); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1735, &x1736, x1701, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1737, &x1738, x1735, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1739, &x1740, x1735, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1741, &x1742, 0x0, x1701, x1739); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1743, &x1744, x1742, x1703, x1740); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1745, &x1746, x1744, x1705, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1747, &x1748, x1746, x1707, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1749, &x1750, x1748, x1709, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1751, &x1752, x1750, x1711, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1753, &x1754, x1752, x1713, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1755, &x1756, x1754, x1715, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1757, &x1758, x1756, x1717, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1759, &x1760, x1758, x1719, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1761, &x1762, x1760, x1721, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1763, &x1764, x1762, x1723, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1765, &x1766, x1764, x1725, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1767, &x1768, x1766, x1727, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1769, &x1770, x1768, x1729, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1771, &x1772, x1770, x1731, x1737); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1773, &x1774, x1772, x1733, x1738); x1775 = ((uint32_t)x1774 + x1734); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1776, &x1777, x13, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1778, &x1779, x13, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1780, &x1781, x13, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1782, &x1783, x13, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1784, &x1785, x13, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1786, &x1787, x13, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1788, &x1789, x13, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1790, &x1791, x13, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1792, &x1793, x13, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1794, &x1795, x13, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1796, &x1797, x13, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1798, &x1799, x13, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1800, &x1801, x13, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1802, &x1803, x13, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1804, &x1805, x13, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1806, &x1807, x13, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1808, &x1809, 0x0, x1807, x1804); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1810, &x1811, x1809, x1805, x1802); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1812, &x1813, x1811, x1803, x1800); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1814, &x1815, x1813, x1801, x1798); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1816, &x1817, x1815, x1799, x1796); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1818, &x1819, x1817, x1797, x1794); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1820, &x1821, x1819, x1795, x1792); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1822, &x1823, x1821, x1793, x1790); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1824, &x1825, x1823, x1791, x1788); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1826, &x1827, x1825, x1789, x1786); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1828, &x1829, x1827, x1787, x1784); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1830, &x1831, x1829, x1785, x1782); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1832, &x1833, x1831, x1783, x1780); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1834, &x1835, x1833, x1781, x1778); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1836, &x1837, x1835, x1779, x1776); x1838 = (x1837 + x1777); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1839, &x1840, 0x0, x1743, x1806); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1841, &x1842, x1840, x1745, x1808); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1843, &x1844, x1842, x1747, x1810); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1845, &x1846, x1844, x1749, x1812); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1847, &x1848, x1846, x1751, x1814); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1849, &x1850, x1848, x1753, x1816); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1851, &x1852, x1850, x1755, x1818); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1853, &x1854, x1852, x1757, x1820); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1855, &x1856, x1854, x1759, x1822); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1857, &x1858, x1856, x1761, x1824); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1859, &x1860, x1858, x1763, x1826); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1861, &x1862, x1860, x1765, x1828); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1863, &x1864, x1862, x1767, x1830); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1865, &x1866, x1864, x1769, x1832); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1867, &x1868, x1866, x1771, x1834); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1869, &x1870, x1868, x1773, x1836); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1871, &x1872, x1870, x1775, x1838); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1873, &x1874, x1839, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1875, &x1876, x1873, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1877, &x1878, x1873, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1879, &x1880, 0x0, x1839, x1877); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1881, &x1882, x1880, x1841, x1878); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1883, &x1884, x1882, x1843, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1885, &x1886, x1884, x1845, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1887, &x1888, x1886, x1847, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1889, &x1890, x1888, x1849, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1891, &x1892, x1890, x1851, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1893, &x1894, x1892, x1853, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1895, &x1896, x1894, x1855, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1897, &x1898, x1896, x1857, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1899, &x1900, x1898, x1859, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1901, &x1902, x1900, x1861, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1903, &x1904, x1902, x1863, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1905, &x1906, x1904, x1865, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1907, &x1908, x1906, x1867, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1909, &x1910, x1908, x1869, x1875); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1911, &x1912, x1910, x1871, x1876); x1913 = ((uint32_t)x1912 + x1872); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1914, &x1915, x14, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1916, &x1917, x14, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1918, &x1919, x14, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1920, &x1921, x14, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1922, &x1923, x14, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1924, &x1925, x14, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1926, &x1927, x14, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1928, &x1929, x14, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1930, &x1931, x14, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1932, &x1933, x14, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1934, &x1935, x14, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1936, &x1937, x14, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1938, &x1939, x14, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1940, &x1941, x14, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1942, &x1943, x14, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1944, &x1945, x14, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1946, &x1947, 0x0, x1945, x1942); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1948, &x1949, x1947, x1943, x1940); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1950, &x1951, x1949, x1941, x1938); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1952, &x1953, x1951, x1939, x1936); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1954, &x1955, x1953, x1937, x1934); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1956, &x1957, x1955, x1935, x1932); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1958, &x1959, x1957, x1933, x1930); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1960, &x1961, x1959, x1931, x1928); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1962, &x1963, x1961, x1929, x1926); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1964, &x1965, x1963, x1927, x1924); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1966, &x1967, x1965, x1925, x1922); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1968, &x1969, x1967, x1923, x1920); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1970, &x1971, x1969, x1921, x1918); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1972, &x1973, x1971, x1919, x1916); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1974, &x1975, x1973, x1917, x1914); x1976 = (x1975 + x1915); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1977, &x1978, 0x0, x1881, x1944); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1979, &x1980, x1978, x1883, x1946); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1981, &x1982, x1980, x1885, x1948); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1983, &x1984, x1982, x1887, x1950); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1985, &x1986, x1984, x1889, x1952); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1987, &x1988, x1986, x1891, x1954); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1989, &x1990, x1988, x1893, x1956); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1991, &x1992, x1990, x1895, x1958); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1993, &x1994, x1992, x1897, x1960); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1995, &x1996, x1994, x1899, x1962); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1997, &x1998, x1996, x1901, x1964); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1999, &x2000, x1998, x1903, x1966); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2001, &x2002, x2000, x1905, x1968); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2003, &x2004, x2002, x1907, x1970); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2005, &x2006, x2004, x1909, x1972); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2007, &x2008, x2006, x1911, x1974); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2009, &x2010, x2008, x1913, x1976); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2011, &x2012, x1977, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2013, &x2014, x2011, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2015, &x2016, x2011, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2017, &x2018, 0x0, x1977, x2015); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2019, &x2020, x2018, x1979, x2016); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2021, &x2022, x2020, x1981, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2023, &x2024, x2022, x1983, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2025, &x2026, x2024, x1985, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2027, &x2028, x2026, x1987, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2029, &x2030, x2028, x1989, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2031, &x2032, x2030, x1991, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2033, &x2034, x2032, x1993, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2035, &x2036, x2034, x1995, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2037, &x2038, x2036, x1997, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2039, &x2040, x2038, x1999, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2041, &x2042, x2040, x2001, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2043, &x2044, x2042, x2003, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2045, &x2046, x2044, x2005, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2047, &x2048, x2046, x2007, x2013); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2049, &x2050, x2048, x2009, x2014); x2051 = ((uint32_t)x2050 + x2010); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2052, &x2053, x15, (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2054, &x2055, x15, (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2056, &x2057, x15, (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2058, &x2059, x15, (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2060, &x2061, x15, (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2062, &x2063, x15, (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2064, &x2065, x15, (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2066, &x2067, x15, (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2068, &x2069, x15, (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2070, &x2071, x15, (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2072, &x2073, x15, (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2074, &x2075, x15, (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2076, &x2077, x15, (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2078, &x2079, x15, (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2080, &x2081, x15, (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2082, &x2083, x15, (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2084, &x2085, 0x0, x2083, x2080); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2086, &x2087, x2085, x2081, x2078); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2088, &x2089, x2087, x2079, x2076); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2090, &x2091, x2089, x2077, x2074); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2092, &x2093, x2091, x2075, x2072); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2094, &x2095, x2093, x2073, x2070); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2096, &x2097, x2095, x2071, x2068); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2098, &x2099, x2097, x2069, x2066); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2100, &x2101, x2099, x2067, x2064); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2102, &x2103, x2101, x2065, x2062); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2104, &x2105, x2103, x2063, x2060); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2106, &x2107, x2105, x2061, x2058); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2108, &x2109, x2107, x2059, x2056); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2110, &x2111, x2109, x2057, x2054); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2112, &x2113, x2111, x2055, x2052); x2114 = (x2113 + x2053); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2115, &x2116, 0x0, x2019, x2082); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2117, &x2118, x2116, x2021, x2084); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2119, &x2120, x2118, x2023, x2086); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2121, &x2122, x2120, x2025, x2088); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2123, &x2124, x2122, x2027, x2090); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2125, &x2126, x2124, x2029, x2092); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2127, &x2128, x2126, x2031, x2094); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2129, &x2130, x2128, x2033, x2096); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2131, &x2132, x2130, x2035, x2098); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2133, &x2134, x2132, x2037, x2100); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2135, &x2136, x2134, x2039, x2102); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2137, &x2138, x2136, x2041, x2104); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2139, &x2140, x2138, x2043, x2106); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2141, &x2142, x2140, x2045, x2108); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2143, &x2144, x2142, x2047, x2110); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2145, &x2146, x2144, x2049, x2112); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2147, &x2148, x2146, x2051, x2114); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2149, &x2150, x2115, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2151, &x2152, x2149, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2153, &x2154, x2149, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2155, &x2156, 0x0, x2115, x2153); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2157, &x2158, x2156, x2117, x2154); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2159, &x2160, x2158, x2119, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2161, &x2162, x2160, x2121, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2163, &x2164, x2162, x2123, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2165, &x2166, x2164, x2125, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2167, &x2168, x2166, x2127, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2169, &x2170, x2168, x2129, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2171, &x2172, x2170, x2131, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2173, &x2174, x2172, x2133, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2175, &x2176, x2174, x2135, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2177, &x2178, x2176, x2137, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2179, &x2180, x2178, x2139, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2181, &x2182, x2180, x2141, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2183, &x2184, x2182, x2143, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2185, &x2186, x2184, x2145, x2151); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2187, &x2188, x2186, x2147, x2152); x2189 = ((uint32_t)x2188 + x2148); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x2190, &x2191, 0x0, x2157, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2192, &x2193, x2191, x2159, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2194, &x2195, x2193, x2161, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2196, &x2197, x2195, x2163, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2198, &x2199, x2197, x2165, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2200, &x2201, x2199, x2167, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2202, &x2203, x2201, x2169, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2204, &x2205, x2203, x2171, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2206, &x2207, x2205, x2173, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2208, &x2209, x2207, x2175, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2210, &x2211, x2209, x2177, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2212, &x2213, x2211, x2179, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2214, &x2215, x2213, x2181, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2216, &x2217, x2215, x2183, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2218, &x2219, x2217, x2185, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x2220, &x2221, x2219, x2187, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2222, &x2223, x2221, x2189, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2224, x2223, x2190, x2157); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2225, x2223, x2192, x2159); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2226, x2223, x2194, x2161); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2227, x2223, x2196, x2163); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2228, x2223, x2198, x2165); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2229, x2223, x2200, x2167); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2230, x2223, x2202, x2169); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2231, x2223, x2204, x2171); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2232, x2223, x2206, x2173); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2233, x2223, x2208, x2175); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2234, x2223, x2210, x2177); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2235, x2223, x2212, x2179); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2236, x2223, x2214, x2181); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2237, x2223, x2216, x2183); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2238, x2223, x2218, x2185); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2239, x2223, x2220, x2187); out1[0] = x2224; out1[1] = x2225; out1[2] = x2226; out1[3] = x2227; out1[4] = x2228; out1[5] = x2229; out1[6] = x2230; out1[7] = x2231; out1[8] = x2232; out1[9] = x2233; out1[10] = x2234; out1[11] = x2235; out1[12] = x2236; out1[13] = x2237; out1[14] = x2238; out1[15] = x2239; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_square squares a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) * eval (from_montgomery arg1)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_square( uint32_t out1[16], const uint32_t arg1[16]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint32_t x29; uint32_t x30; uint32_t x31; uint32_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x50; uint32_t x51; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x52; uint32_t x53; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x54; uint32_t x55; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x56; uint32_t x57; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x58; uint32_t x59; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x60; uint32_t x61; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x62; uint32_t x63; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x64; uint32_t x65; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x66; uint32_t x67; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x68; uint32_t x69; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x70; uint32_t x71; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x72; uint32_t x73; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x74; uint32_t x75; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x76; uint32_t x77; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x78; uint32_t x79; uint32_t x80; uint32_t x81; uint32_t x82; uint32_t x83; uint32_t x84; uint32_t x85; uint32_t x86; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x87; uint32_t x88; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x89; uint32_t x90; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x91; uint32_t x92; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x93; uint32_t x94; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x95; uint32_t x96; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x97; uint32_t x98; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x99; uint32_t x100; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x101; uint32_t x102; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x103; uint32_t x104; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x105; uint32_t x106; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x107; uint32_t x108; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x109; uint32_t x110; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x111; uint32_t x112; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x113; uint32_t x114; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x115; uint32_t x116; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x117; uint32_t x118; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x119; uint32_t x120; uint32_t x121; uint32_t x122; uint32_t x123; uint32_t x124; uint32_t x125; uint32_t x126; uint32_t x127; uint32_t x128; uint32_t x129; uint32_t x130; uint32_t x131; uint32_t x132; uint32_t x133; uint32_t x134; uint32_t x135; uint32_t x136; uint32_t x137; uint32_t x138; uint32_t x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; uint32_t x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x153; uint32_t x154; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x155; uint32_t x156; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x157; uint32_t x158; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x159; uint32_t x160; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x161; uint32_t x162; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x163; uint32_t x164; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x165; uint32_t x166; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x167; uint32_t x168; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x169; uint32_t x170; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x171; uint32_t x172; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x173; uint32_t x174; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x175; uint32_t x176; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x177; uint32_t x178; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x179; uint32_t x180; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x181; uint32_t x182; uint32_t x183; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x184; uint32_t x185; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x186; uint32_t x187; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x188; uint32_t x189; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x190; uint32_t x191; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x192; uint32_t x193; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x194; uint32_t x195; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x196; uint32_t x197; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x198; uint32_t x199; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x200; uint32_t x201; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x202; uint32_t x203; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x204; uint32_t x205; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x206; uint32_t x207; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x208; uint32_t x209; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x210; uint32_t x211; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x212; uint32_t x213; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x214; uint32_t x215; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x216; uint32_t x217; uint32_t x218; uint32_t x219; uint32_t x220; uint32_t x221; uint32_t x222; uint32_t x223; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x224; uint32_t x225; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x226; uint32_t x227; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x228; uint32_t x229; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x230; uint32_t x231; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x232; uint32_t x233; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x234; uint32_t x235; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x236; uint32_t x237; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x238; uint32_t x239; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x240; uint32_t x241; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x242; uint32_t x243; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x244; uint32_t x245; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x246; uint32_t x247; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x248; uint32_t x249; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x250; uint32_t x251; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x252; uint32_t x253; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x254; uint32_t x255; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x256; uint32_t x257; uint32_t x258; uint32_t x259; uint32_t x260; uint32_t x261; uint32_t x262; uint32_t x263; uint32_t x264; uint32_t x265; uint32_t x266; uint32_t x267; uint32_t x268; uint32_t x269; uint32_t x270; uint32_t x271; uint32_t x272; uint32_t x273; uint32_t x274; uint32_t x275; uint32_t x276; uint32_t x277; uint32_t x278; uint32_t x279; uint32_t x280; uint32_t x281; uint32_t x282; uint32_t x283; uint32_t x284; uint32_t x285; uint32_t x286; uint32_t x287; uint32_t x288; uint32_t x289; uint32_t x290; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x291; uint32_t x292; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x293; uint32_t x294; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x295; uint32_t x296; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x297; uint32_t x298; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x299; uint32_t x300; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x301; uint32_t x302; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x303; uint32_t x304; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x305; uint32_t x306; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x307; uint32_t x308; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x309; uint32_t x310; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x311; uint32_t x312; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x313; uint32_t x314; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x315; uint32_t x316; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x317; uint32_t x318; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x319; uint32_t x320; uint32_t x321; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x322; uint32_t x323; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x324; uint32_t x325; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x326; uint32_t x327; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x328; uint32_t x329; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x330; uint32_t x331; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x332; uint32_t x333; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x334; uint32_t x335; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x336; uint32_t x337; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x338; uint32_t x339; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x340; uint32_t x341; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x342; uint32_t x343; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x344; uint32_t x345; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x346; uint32_t x347; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x348; uint32_t x349; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x350; uint32_t x351; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x352; uint32_t x353; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x354; uint32_t x355; uint32_t x356; uint32_t x357; uint32_t x358; uint32_t x359; uint32_t x360; uint32_t x361; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x362; uint32_t x363; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x364; uint32_t x365; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x366; uint32_t x367; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x368; uint32_t x369; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x370; uint32_t x371; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x372; uint32_t x373; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x374; uint32_t x375; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x376; uint32_t x377; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x378; uint32_t x379; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x380; uint32_t x381; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x382; uint32_t x383; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x384; uint32_t x385; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x386; uint32_t x387; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x388; uint32_t x389; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x390; uint32_t x391; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x392; uint32_t x393; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x394; uint32_t x395; uint32_t x396; uint32_t x397; uint32_t x398; uint32_t x399; uint32_t x400; uint32_t x401; uint32_t x402; uint32_t x403; uint32_t x404; uint32_t x405; uint32_t x406; uint32_t x407; uint32_t x408; uint32_t x409; uint32_t x410; uint32_t x411; uint32_t x412; uint32_t x413; uint32_t x414; uint32_t x415; uint32_t x416; uint32_t x417; uint32_t x418; uint32_t x419; uint32_t x420; uint32_t x421; uint32_t x422; uint32_t x423; uint32_t x424; uint32_t x425; uint32_t x426; uint32_t x427; uint32_t x428; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x429; uint32_t x430; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x431; uint32_t x432; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x433; uint32_t x434; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x435; uint32_t x436; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x437; uint32_t x438; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x439; uint32_t x440; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x441; uint32_t x442; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x443; uint32_t x444; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x445; uint32_t x446; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x447; uint32_t x448; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x449; uint32_t x450; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x451; uint32_t x452; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x453; uint32_t x454; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x455; uint32_t x456; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x457; uint32_t x458; uint32_t x459; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x460; uint32_t x461; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x462; uint32_t x463; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x464; uint32_t x465; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x466; uint32_t x467; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x468; uint32_t x469; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x470; uint32_t x471; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x472; uint32_t x473; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x474; uint32_t x475; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x476; uint32_t x477; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x478; uint32_t x479; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x480; uint32_t x481; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x482; uint32_t x483; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x484; uint32_t x485; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x486; uint32_t x487; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x488; uint32_t x489; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x490; uint32_t x491; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x492; uint32_t x493; uint32_t x494; uint32_t x495; uint32_t x496; uint32_t x497; uint32_t x498; uint32_t x499; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x500; uint32_t x501; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x502; uint32_t x503; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x504; uint32_t x505; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x506; uint32_t x507; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x508; uint32_t x509; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x510; uint32_t x511; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x512; uint32_t x513; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x514; uint32_t x515; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x516; uint32_t x517; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x518; uint32_t x519; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x520; uint32_t x521; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x522; uint32_t x523; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x524; uint32_t x525; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x526; uint32_t x527; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x528; uint32_t x529; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x530; uint32_t x531; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x532; uint32_t x533; uint32_t x534; uint32_t x535; uint32_t x536; uint32_t x537; uint32_t x538; uint32_t x539; uint32_t x540; uint32_t x541; uint32_t x542; uint32_t x543; uint32_t x544; uint32_t x545; uint32_t x546; uint32_t x547; uint32_t x548; uint32_t x549; uint32_t x550; uint32_t x551; uint32_t x552; uint32_t x553; uint32_t x554; uint32_t x555; uint32_t x556; uint32_t x557; uint32_t x558; uint32_t x559; uint32_t x560; uint32_t x561; uint32_t x562; uint32_t x563; uint32_t x564; uint32_t x565; uint32_t x566; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x567; uint32_t x568; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x569; uint32_t x570; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x571; uint32_t x572; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x573; uint32_t x574; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x575; uint32_t x576; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x577; uint32_t x578; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x579; uint32_t x580; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x581; uint32_t x582; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x583; uint32_t x584; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x585; uint32_t x586; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x587; uint32_t x588; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x589; uint32_t x590; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x591; uint32_t x592; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x593; uint32_t x594; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x595; uint32_t x596; uint32_t x597; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x598; uint32_t x599; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x600; uint32_t x601; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x602; uint32_t x603; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x604; uint32_t x605; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x606; uint32_t x607; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x608; uint32_t x609; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x610; uint32_t x611; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x612; uint32_t x613; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x614; uint32_t x615; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x616; uint32_t x617; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x618; uint32_t x619; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x620; uint32_t x621; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x622; uint32_t x623; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x624; uint32_t x625; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x626; uint32_t x627; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x628; uint32_t x629; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x630; uint32_t x631; uint32_t x632; uint32_t x633; uint32_t x634; uint32_t x635; uint32_t x636; uint32_t x637; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x638; uint32_t x639; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x640; uint32_t x641; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x642; uint32_t x643; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x644; uint32_t x645; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x646; uint32_t x647; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x648; uint32_t x649; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x650; uint32_t x651; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x652; uint32_t x653; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x654; uint32_t x655; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x656; uint32_t x657; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x658; uint32_t x659; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x660; uint32_t x661; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x662; uint32_t x663; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x664; uint32_t x665; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x666; uint32_t x667; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x668; uint32_t x669; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x670; uint32_t x671; uint32_t x672; uint32_t x673; uint32_t x674; uint32_t x675; uint32_t x676; uint32_t x677; uint32_t x678; uint32_t x679; uint32_t x680; uint32_t x681; uint32_t x682; uint32_t x683; uint32_t x684; uint32_t x685; uint32_t x686; uint32_t x687; uint32_t x688; uint32_t x689; uint32_t x690; uint32_t x691; uint32_t x692; uint32_t x693; uint32_t x694; uint32_t x695; uint32_t x696; uint32_t x697; uint32_t x698; uint32_t x699; uint32_t x700; uint32_t x701; uint32_t x702; uint32_t x703; uint32_t x704; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x705; uint32_t x706; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x707; uint32_t x708; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x709; uint32_t x710; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x711; uint32_t x712; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x713; uint32_t x714; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x715; uint32_t x716; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x717; uint32_t x718; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x719; uint32_t x720; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x721; uint32_t x722; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x723; uint32_t x724; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x725; uint32_t x726; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x727; uint32_t x728; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x729; uint32_t x730; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x731; uint32_t x732; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x733; uint32_t x734; uint32_t x735; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x736; uint32_t x737; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x738; uint32_t x739; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x740; uint32_t x741; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x742; uint32_t x743; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x744; uint32_t x745; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x746; uint32_t x747; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x748; uint32_t x749; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x750; uint32_t x751; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x752; uint32_t x753; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x754; uint32_t x755; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x756; uint32_t x757; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x758; uint32_t x759; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x760; uint32_t x761; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x762; uint32_t x763; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x764; uint32_t x765; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x766; uint32_t x767; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x768; uint32_t x769; uint32_t x770; uint32_t x771; uint32_t x772; uint32_t x773; uint32_t x774; uint32_t x775; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x776; uint32_t x777; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x778; uint32_t x779; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x780; uint32_t x781; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x782; uint32_t x783; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x784; uint32_t x785; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x786; uint32_t x787; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x788; uint32_t x789; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x790; uint32_t x791; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x792; uint32_t x793; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x794; uint32_t x795; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x796; uint32_t x797; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x798; uint32_t x799; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x800; uint32_t x801; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x802; uint32_t x803; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x804; uint32_t x805; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x806; uint32_t x807; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x808; uint32_t x809; uint32_t x810; uint32_t x811; uint32_t x812; uint32_t x813; uint32_t x814; uint32_t x815; uint32_t x816; uint32_t x817; uint32_t x818; uint32_t x819; uint32_t x820; uint32_t x821; uint32_t x822; uint32_t x823; uint32_t x824; uint32_t x825; uint32_t x826; uint32_t x827; uint32_t x828; uint32_t x829; uint32_t x830; uint32_t x831; uint32_t x832; uint32_t x833; uint32_t x834; uint32_t x835; uint32_t x836; uint32_t x837; uint32_t x838; uint32_t x839; uint32_t x840; uint32_t x841; uint32_t x842; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x843; uint32_t x844; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x845; uint32_t x846; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x847; uint32_t x848; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x849; uint32_t x850; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x851; uint32_t x852; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x853; uint32_t x854; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x855; uint32_t x856; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x857; uint32_t x858; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x859; uint32_t x860; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x861; uint32_t x862; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x863; uint32_t x864; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x865; uint32_t x866; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x867; uint32_t x868; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x869; uint32_t x870; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x871; uint32_t x872; uint32_t x873; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x874; uint32_t x875; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x876; uint32_t x877; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x878; uint32_t x879; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x880; uint32_t x881; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x882; uint32_t x883; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x884; uint32_t x885; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x886; uint32_t x887; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x888; uint32_t x889; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x890; uint32_t x891; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x892; uint32_t x893; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x894; uint32_t x895; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x896; uint32_t x897; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x898; uint32_t x899; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x900; uint32_t x901; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x902; uint32_t x903; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x904; uint32_t x905; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x906; uint32_t x907; uint32_t x908; uint32_t x909; uint32_t x910; uint32_t x911; uint32_t x912; uint32_t x913; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x914; uint32_t x915; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x916; uint32_t x917; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x918; uint32_t x919; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x920; uint32_t x921; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x922; uint32_t x923; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x924; uint32_t x925; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x926; uint32_t x927; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x928; uint32_t x929; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x930; uint32_t x931; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x932; uint32_t x933; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x934; uint32_t x935; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x936; uint32_t x937; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x938; uint32_t x939; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x940; uint32_t x941; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x942; uint32_t x943; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x944; uint32_t x945; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x946; uint32_t x947; uint32_t x948; uint32_t x949; uint32_t x950; uint32_t x951; uint32_t x952; uint32_t x953; uint32_t x954; uint32_t x955; uint32_t x956; uint32_t x957; uint32_t x958; uint32_t x959; uint32_t x960; uint32_t x961; uint32_t x962; uint32_t x963; uint32_t x964; uint32_t x965; uint32_t x966; uint32_t x967; uint32_t x968; uint32_t x969; uint32_t x970; uint32_t x971; uint32_t x972; uint32_t x973; uint32_t x974; uint32_t x975; uint32_t x976; uint32_t x977; uint32_t x978; uint32_t x979; uint32_t x980; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x981; uint32_t x982; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x983; uint32_t x984; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x985; uint32_t x986; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x987; uint32_t x988; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x989; uint32_t x990; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x991; uint32_t x992; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x993; uint32_t x994; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x995; uint32_t x996; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x997; uint32_t x998; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x999; uint32_t x1000; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1001; uint32_t x1002; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1003; uint32_t x1004; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1005; uint32_t x1006; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1007; uint32_t x1008; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1009; uint32_t x1010; uint32_t x1011; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1012; uint32_t x1013; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1014; uint32_t x1015; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1016; uint32_t x1017; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1018; uint32_t x1019; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1020; uint32_t x1021; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1022; uint32_t x1023; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1024; uint32_t x1025; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1026; uint32_t x1027; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1028; uint32_t x1029; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1030; uint32_t x1031; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1032; uint32_t x1033; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1034; uint32_t x1035; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1036; uint32_t x1037; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1038; uint32_t x1039; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1040; uint32_t x1041; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1042; uint32_t x1043; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1044; uint32_t x1045; uint32_t x1046; uint32_t x1047; uint32_t x1048; uint32_t x1049; uint32_t x1050; uint32_t x1051; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1052; uint32_t x1053; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1054; uint32_t x1055; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1056; uint32_t x1057; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1058; uint32_t x1059; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1060; uint32_t x1061; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1062; uint32_t x1063; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1064; uint32_t x1065; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1066; uint32_t x1067; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1068; uint32_t x1069; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1070; uint32_t x1071; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1072; uint32_t x1073; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1074; uint32_t x1075; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1076; uint32_t x1077; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1078; uint32_t x1079; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1080; uint32_t x1081; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1082; uint32_t x1083; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1084; uint32_t x1085; uint32_t x1086; uint32_t x1087; uint32_t x1088; uint32_t x1089; uint32_t x1090; uint32_t x1091; uint32_t x1092; uint32_t x1093; uint32_t x1094; uint32_t x1095; uint32_t x1096; uint32_t x1097; uint32_t x1098; uint32_t x1099; uint32_t x1100; uint32_t x1101; uint32_t x1102; uint32_t x1103; uint32_t x1104; uint32_t x1105; uint32_t x1106; uint32_t x1107; uint32_t x1108; uint32_t x1109; uint32_t x1110; uint32_t x1111; uint32_t x1112; uint32_t x1113; uint32_t x1114; uint32_t x1115; uint32_t x1116; uint32_t x1117; uint32_t x1118; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1119; uint32_t x1120; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1121; uint32_t x1122; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1123; uint32_t x1124; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1125; uint32_t x1126; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1127; uint32_t x1128; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1129; uint32_t x1130; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1131; uint32_t x1132; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1133; uint32_t x1134; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1135; uint32_t x1136; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1137; uint32_t x1138; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1139; uint32_t x1140; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1141; uint32_t x1142; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1143; uint32_t x1144; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1145; uint32_t x1146; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1147; uint32_t x1148; uint32_t x1149; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1150; uint32_t x1151; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1152; uint32_t x1153; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1154; uint32_t x1155; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1156; uint32_t x1157; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1158; uint32_t x1159; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1160; uint32_t x1161; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1162; uint32_t x1163; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1164; uint32_t x1165; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1166; uint32_t x1167; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1168; uint32_t x1169; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1170; uint32_t x1171; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1172; uint32_t x1173; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1174; uint32_t x1175; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1176; uint32_t x1177; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1178; uint32_t x1179; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1180; uint32_t x1181; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1182; uint32_t x1183; uint32_t x1184; uint32_t x1185; uint32_t x1186; uint32_t x1187; uint32_t x1188; uint32_t x1189; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1190; uint32_t x1191; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1192; uint32_t x1193; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1194; uint32_t x1195; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1196; uint32_t x1197; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1198; uint32_t x1199; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1200; uint32_t x1201; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1202; uint32_t x1203; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1204; uint32_t x1205; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1206; uint32_t x1207; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1208; uint32_t x1209; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1210; uint32_t x1211; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1212; uint32_t x1213; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1214; uint32_t x1215; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1216; uint32_t x1217; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1218; uint32_t x1219; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1220; uint32_t x1221; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1222; uint32_t x1223; uint32_t x1224; uint32_t x1225; uint32_t x1226; uint32_t x1227; uint32_t x1228; uint32_t x1229; uint32_t x1230; uint32_t x1231; uint32_t x1232; uint32_t x1233; uint32_t x1234; uint32_t x1235; uint32_t x1236; uint32_t x1237; uint32_t x1238; uint32_t x1239; uint32_t x1240; uint32_t x1241; uint32_t x1242; uint32_t x1243; uint32_t x1244; uint32_t x1245; uint32_t x1246; uint32_t x1247; uint32_t x1248; uint32_t x1249; uint32_t x1250; uint32_t x1251; uint32_t x1252; uint32_t x1253; uint32_t x1254; uint32_t x1255; uint32_t x1256; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1257; uint32_t x1258; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1259; uint32_t x1260; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1261; uint32_t x1262; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1263; uint32_t x1264; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1265; uint32_t x1266; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1267; uint32_t x1268; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1269; uint32_t x1270; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1271; uint32_t x1272; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1273; uint32_t x1274; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1275; uint32_t x1276; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1277; uint32_t x1278; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1279; uint32_t x1280; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1281; uint32_t x1282; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1283; uint32_t x1284; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1285; uint32_t x1286; uint32_t x1287; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1288; uint32_t x1289; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1290; uint32_t x1291; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1292; uint32_t x1293; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1294; uint32_t x1295; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1296; uint32_t x1297; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1298; uint32_t x1299; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1300; uint32_t x1301; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1302; uint32_t x1303; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1304; uint32_t x1305; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1306; uint32_t x1307; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1308; uint32_t x1309; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1310; uint32_t x1311; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1312; uint32_t x1313; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1314; uint32_t x1315; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1316; uint32_t x1317; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1318; uint32_t x1319; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1320; uint32_t x1321; uint32_t x1322; uint32_t x1323; uint32_t x1324; uint32_t x1325; uint32_t x1326; uint32_t x1327; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1328; uint32_t x1329; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1330; uint32_t x1331; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1332; uint32_t x1333; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1334; uint32_t x1335; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1336; uint32_t x1337; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1338; uint32_t x1339; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1340; uint32_t x1341; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1342; uint32_t x1343; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1344; uint32_t x1345; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1346; uint32_t x1347; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1348; uint32_t x1349; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1350; uint32_t x1351; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1352; uint32_t x1353; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1354; uint32_t x1355; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1356; uint32_t x1357; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1358; uint32_t x1359; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1360; uint32_t x1361; uint32_t x1362; uint32_t x1363; uint32_t x1364; uint32_t x1365; uint32_t x1366; uint32_t x1367; uint32_t x1368; uint32_t x1369; uint32_t x1370; uint32_t x1371; uint32_t x1372; uint32_t x1373; uint32_t x1374; uint32_t x1375; uint32_t x1376; uint32_t x1377; uint32_t x1378; uint32_t x1379; uint32_t x1380; uint32_t x1381; uint32_t x1382; uint32_t x1383; uint32_t x1384; uint32_t x1385; uint32_t x1386; uint32_t x1387; uint32_t x1388; uint32_t x1389; uint32_t x1390; uint32_t x1391; uint32_t x1392; uint32_t x1393; uint32_t x1394; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1395; uint32_t x1396; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1397; uint32_t x1398; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1399; uint32_t x1400; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1401; uint32_t x1402; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1403; uint32_t x1404; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1405; uint32_t x1406; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1407; uint32_t x1408; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1409; uint32_t x1410; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1411; uint32_t x1412; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1413; uint32_t x1414; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1415; uint32_t x1416; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1417; uint32_t x1418; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1419; uint32_t x1420; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1421; uint32_t x1422; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1423; uint32_t x1424; uint32_t x1425; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1426; uint32_t x1427; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1428; uint32_t x1429; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1430; uint32_t x1431; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1432; uint32_t x1433; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1434; uint32_t x1435; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1436; uint32_t x1437; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1438; uint32_t x1439; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1440; uint32_t x1441; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1442; uint32_t x1443; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1444; uint32_t x1445; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1446; uint32_t x1447; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1448; uint32_t x1449; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1450; uint32_t x1451; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1452; uint32_t x1453; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1454; uint32_t x1455; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1456; uint32_t x1457; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1458; uint32_t x1459; uint32_t x1460; uint32_t x1461; uint32_t x1462; uint32_t x1463; uint32_t x1464; uint32_t x1465; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1466; uint32_t x1467; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1468; uint32_t x1469; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1470; uint32_t x1471; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1472; uint32_t x1473; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1474; uint32_t x1475; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1476; uint32_t x1477; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1478; uint32_t x1479; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1480; uint32_t x1481; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1482; uint32_t x1483; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1484; uint32_t x1485; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1486; uint32_t x1487; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1488; uint32_t x1489; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1490; uint32_t x1491; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1492; uint32_t x1493; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1494; uint32_t x1495; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1496; uint32_t x1497; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1498; uint32_t x1499; uint32_t x1500; uint32_t x1501; uint32_t x1502; uint32_t x1503; uint32_t x1504; uint32_t x1505; uint32_t x1506; uint32_t x1507; uint32_t x1508; uint32_t x1509; uint32_t x1510; uint32_t x1511; uint32_t x1512; uint32_t x1513; uint32_t x1514; uint32_t x1515; uint32_t x1516; uint32_t x1517; uint32_t x1518; uint32_t x1519; uint32_t x1520; uint32_t x1521; uint32_t x1522; uint32_t x1523; uint32_t x1524; uint32_t x1525; uint32_t x1526; uint32_t x1527; uint32_t x1528; uint32_t x1529; uint32_t x1530; uint32_t x1531; uint32_t x1532; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1533; uint32_t x1534; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1535; uint32_t x1536; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1537; uint32_t x1538; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1539; uint32_t x1540; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1541; uint32_t x1542; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1543; uint32_t x1544; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1545; uint32_t x1546; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1547; uint32_t x1548; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1549; uint32_t x1550; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1551; uint32_t x1552; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1553; uint32_t x1554; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1555; uint32_t x1556; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1557; uint32_t x1558; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1559; uint32_t x1560; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1561; uint32_t x1562; uint32_t x1563; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1564; uint32_t x1565; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1566; uint32_t x1567; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1568; uint32_t x1569; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1570; uint32_t x1571; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1572; uint32_t x1573; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1574; uint32_t x1575; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1576; uint32_t x1577; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1578; uint32_t x1579; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1580; uint32_t x1581; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1582; uint32_t x1583; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1584; uint32_t x1585; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1586; uint32_t x1587; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1588; uint32_t x1589; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1590; uint32_t x1591; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1592; uint32_t x1593; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1594; uint32_t x1595; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1596; uint32_t x1597; uint32_t x1598; uint32_t x1599; uint32_t x1600; uint32_t x1601; uint32_t x1602; uint32_t x1603; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1604; uint32_t x1605; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1606; uint32_t x1607; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1608; uint32_t x1609; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1610; uint32_t x1611; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1612; uint32_t x1613; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1614; uint32_t x1615; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1616; uint32_t x1617; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1618; uint32_t x1619; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1620; uint32_t x1621; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1622; uint32_t x1623; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1624; uint32_t x1625; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1626; uint32_t x1627; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1628; uint32_t x1629; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1630; uint32_t x1631; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1632; uint32_t x1633; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1634; uint32_t x1635; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1636; uint32_t x1637; uint32_t x1638; uint32_t x1639; uint32_t x1640; uint32_t x1641; uint32_t x1642; uint32_t x1643; uint32_t x1644; uint32_t x1645; uint32_t x1646; uint32_t x1647; uint32_t x1648; uint32_t x1649; uint32_t x1650; uint32_t x1651; uint32_t x1652; uint32_t x1653; uint32_t x1654; uint32_t x1655; uint32_t x1656; uint32_t x1657; uint32_t x1658; uint32_t x1659; uint32_t x1660; uint32_t x1661; uint32_t x1662; uint32_t x1663; uint32_t x1664; uint32_t x1665; uint32_t x1666; uint32_t x1667; uint32_t x1668; uint32_t x1669; uint32_t x1670; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1671; uint32_t x1672; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1673; uint32_t x1674; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1675; uint32_t x1676; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1677; uint32_t x1678; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1679; uint32_t x1680; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1681; uint32_t x1682; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1683; uint32_t x1684; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1685; uint32_t x1686; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1687; uint32_t x1688; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1689; uint32_t x1690; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1691; uint32_t x1692; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1693; uint32_t x1694; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1695; uint32_t x1696; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1697; uint32_t x1698; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1699; uint32_t x1700; uint32_t x1701; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1702; uint32_t x1703; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1704; uint32_t x1705; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1706; uint32_t x1707; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1708; uint32_t x1709; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1710; uint32_t x1711; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1712; uint32_t x1713; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1714; uint32_t x1715; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1716; uint32_t x1717; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1718; uint32_t x1719; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1720; uint32_t x1721; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1722; uint32_t x1723; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1724; uint32_t x1725; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1726; uint32_t x1727; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1728; uint32_t x1729; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1730; uint32_t x1731; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1732; uint32_t x1733; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1734; uint32_t x1735; uint32_t x1736; uint32_t x1737; uint32_t x1738; uint32_t x1739; uint32_t x1740; uint32_t x1741; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1742; uint32_t x1743; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1744; uint32_t x1745; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1746; uint32_t x1747; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1748; uint32_t x1749; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1750; uint32_t x1751; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1752; uint32_t x1753; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1754; uint32_t x1755; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1756; uint32_t x1757; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1758; uint32_t x1759; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1760; uint32_t x1761; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1762; uint32_t x1763; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1764; uint32_t x1765; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1766; uint32_t x1767; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1768; uint32_t x1769; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1770; uint32_t x1771; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1772; uint32_t x1773; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1774; uint32_t x1775; uint32_t x1776; uint32_t x1777; uint32_t x1778; uint32_t x1779; uint32_t x1780; uint32_t x1781; uint32_t x1782; uint32_t x1783; uint32_t x1784; uint32_t x1785; uint32_t x1786; uint32_t x1787; uint32_t x1788; uint32_t x1789; uint32_t x1790; uint32_t x1791; uint32_t x1792; uint32_t x1793; uint32_t x1794; uint32_t x1795; uint32_t x1796; uint32_t x1797; uint32_t x1798; uint32_t x1799; uint32_t x1800; uint32_t x1801; uint32_t x1802; uint32_t x1803; uint32_t x1804; uint32_t x1805; uint32_t x1806; uint32_t x1807; uint32_t x1808; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1809; uint32_t x1810; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1811; uint32_t x1812; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1813; uint32_t x1814; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1815; uint32_t x1816; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1817; uint32_t x1818; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1819; uint32_t x1820; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1821; uint32_t x1822; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1823; uint32_t x1824; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1825; uint32_t x1826; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1827; uint32_t x1828; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1829; uint32_t x1830; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1831; uint32_t x1832; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1833; uint32_t x1834; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1835; uint32_t x1836; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1837; uint32_t x1838; uint32_t x1839; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1840; uint32_t x1841; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1842; uint32_t x1843; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1844; uint32_t x1845; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1846; uint32_t x1847; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1848; uint32_t x1849; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1850; uint32_t x1851; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1852; uint32_t x1853; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1854; uint32_t x1855; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1856; uint32_t x1857; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1858; uint32_t x1859; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1860; uint32_t x1861; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1862; uint32_t x1863; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1864; uint32_t x1865; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1866; uint32_t x1867; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1868; uint32_t x1869; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1870; uint32_t x1871; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1872; uint32_t x1873; uint32_t x1874; uint32_t x1875; uint32_t x1876; uint32_t x1877; uint32_t x1878; uint32_t x1879; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1880; uint32_t x1881; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1882; uint32_t x1883; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1884; uint32_t x1885; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1886; uint32_t x1887; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1888; uint32_t x1889; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1890; uint32_t x1891; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1892; uint32_t x1893; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1894; uint32_t x1895; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1896; uint32_t x1897; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1898; uint32_t x1899; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1900; uint32_t x1901; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1902; uint32_t x1903; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1904; uint32_t x1905; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1906; uint32_t x1907; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1908; uint32_t x1909; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1910; uint32_t x1911; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1912; uint32_t x1913; uint32_t x1914; uint32_t x1915; uint32_t x1916; uint32_t x1917; uint32_t x1918; uint32_t x1919; uint32_t x1920; uint32_t x1921; uint32_t x1922; uint32_t x1923; uint32_t x1924; uint32_t x1925; uint32_t x1926; uint32_t x1927; uint32_t x1928; uint32_t x1929; uint32_t x1930; uint32_t x1931; uint32_t x1932; uint32_t x1933; uint32_t x1934; uint32_t x1935; uint32_t x1936; uint32_t x1937; uint32_t x1938; uint32_t x1939; uint32_t x1940; uint32_t x1941; uint32_t x1942; uint32_t x1943; uint32_t x1944; uint32_t x1945; uint32_t x1946; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1947; uint32_t x1948; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1949; uint32_t x1950; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1951; uint32_t x1952; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1953; uint32_t x1954; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1955; uint32_t x1956; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1957; uint32_t x1958; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1959; uint32_t x1960; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1961; uint32_t x1962; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1963; uint32_t x1964; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1965; uint32_t x1966; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1967; uint32_t x1968; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1969; uint32_t x1970; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1971; uint32_t x1972; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1973; uint32_t x1974; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1975; uint32_t x1976; uint32_t x1977; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1978; uint32_t x1979; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1980; uint32_t x1981; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1982; uint32_t x1983; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1984; uint32_t x1985; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1986; uint32_t x1987; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1988; uint32_t x1989; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1990; uint32_t x1991; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1992; uint32_t x1993; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1994; uint32_t x1995; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1996; uint32_t x1997; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x1998; uint32_t x1999; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2000; uint32_t x2001; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2002; uint32_t x2003; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2004; uint32_t x2005; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2006; uint32_t x2007; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2008; uint32_t x2009; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2010; uint32_t x2011; uint32_t x2012; uint32_t x2013; uint32_t x2014; uint32_t x2015; uint32_t x2016; uint32_t x2017; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2018; uint32_t x2019; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2020; uint32_t x2021; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2022; uint32_t x2023; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2024; uint32_t x2025; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2026; uint32_t x2027; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2028; uint32_t x2029; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2030; uint32_t x2031; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2032; uint32_t x2033; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2034; uint32_t x2035; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2036; uint32_t x2037; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2038; uint32_t x2039; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2040; uint32_t x2041; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2042; uint32_t x2043; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2044; uint32_t x2045; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2046; uint32_t x2047; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2048; uint32_t x2049; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2050; uint32_t x2051; uint32_t x2052; uint32_t x2053; uint32_t x2054; uint32_t x2055; uint32_t x2056; uint32_t x2057; uint32_t x2058; uint32_t x2059; uint32_t x2060; uint32_t x2061; uint32_t x2062; uint32_t x2063; uint32_t x2064; uint32_t x2065; uint32_t x2066; uint32_t x2067; uint32_t x2068; uint32_t x2069; uint32_t x2070; uint32_t x2071; uint32_t x2072; uint32_t x2073; uint32_t x2074; uint32_t x2075; uint32_t x2076; uint32_t x2077; uint32_t x2078; uint32_t x2079; uint32_t x2080; uint32_t x2081; uint32_t x2082; uint32_t x2083; uint32_t x2084; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2085; uint32_t x2086; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2087; uint32_t x2088; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2089; uint32_t x2090; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2091; uint32_t x2092; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2093; uint32_t x2094; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2095; uint32_t x2096; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2097; uint32_t x2098; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2099; uint32_t x2100; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2101; uint32_t x2102; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2103; uint32_t x2104; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2105; uint32_t x2106; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2107; uint32_t x2108; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2109; uint32_t x2110; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2111; uint32_t x2112; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2113; uint32_t x2114; uint32_t x2115; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2116; uint32_t x2117; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2118; uint32_t x2119; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2120; uint32_t x2121; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2122; uint32_t x2123; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2124; uint32_t x2125; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2126; uint32_t x2127; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2128; uint32_t x2129; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2130; uint32_t x2131; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2132; uint32_t x2133; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2134; uint32_t x2135; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2136; uint32_t x2137; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2138; uint32_t x2139; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2140; uint32_t x2141; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2142; uint32_t x2143; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2144; uint32_t x2145; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2146; uint32_t x2147; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2148; uint32_t x2149; uint32_t x2150; uint32_t x2151; uint32_t x2152; uint32_t x2153; uint32_t x2154; uint32_t x2155; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2156; uint32_t x2157; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2158; uint32_t x2159; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2160; uint32_t x2161; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2162; uint32_t x2163; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2164; uint32_t x2165; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2166; uint32_t x2167; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2168; uint32_t x2169; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2170; uint32_t x2171; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2172; uint32_t x2173; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2174; uint32_t x2175; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2176; uint32_t x2177; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2178; uint32_t x2179; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2180; uint32_t x2181; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2182; uint32_t x2183; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2184; uint32_t x2185; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2186; uint32_t x2187; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2188; uint32_t x2189; uint32_t x2190; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2191; uint32_t x2192; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2193; uint32_t x2194; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2195; uint32_t x2196; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2197; uint32_t x2198; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2199; uint32_t x2200; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2201; uint32_t x2202; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2203; uint32_t x2204; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2205; uint32_t x2206; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2207; uint32_t x2208; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2209; uint32_t x2210; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2211; uint32_t x2212; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2213; uint32_t x2214; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2215; uint32_t x2216; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2217; uint32_t x2218; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2219; uint32_t x2220; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2221; uint32_t x2222; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2223; uint32_t x2224; uint32_t x2225; uint32_t x2226; uint32_t x2227; uint32_t x2228; uint32_t x2229; uint32_t x2230; uint32_t x2231; uint32_t x2232; uint32_t x2233; uint32_t x2234; uint32_t x2235; uint32_t x2236; uint32_t x2237; uint32_t x2238; uint32_t x2239; x1 = (arg1[1]); x2 = (arg1[2]); x3 = (arg1[3]); x4 = (arg1[4]); x5 = (arg1[5]); x6 = (arg1[6]); x7 = (arg1[7]); x8 = (arg1[8]); x9 = (arg1[9]); x10 = (arg1[10]); x11 = (arg1[11]); x12 = (arg1[12]); x13 = (arg1[13]); x14 = (arg1[14]); x15 = (arg1[15]); x16 = (arg1[0]); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x17, &x18, x16, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x19, &x20, x16, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x21, &x22, x16, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x23, &x24, x16, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x25, &x26, x16, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x27, &x28, x16, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x29, &x30, x16, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x31, &x32, x16, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x33, &x34, x16, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x35, &x36, x16, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x37, &x38, x16, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x39, &x40, x16, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x41, &x42, x16, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x43, &x44, x16, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x45, &x46, x16, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x47, &x48, x16, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x49, &x50, 0x0, x48, x45); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x51, &x52, x50, x46, x43); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x53, &x54, x52, x44, x41); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x55, &x56, x54, x42, x39); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x57, &x58, x56, x40, x37); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x59, &x60, x58, x38, x35); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x61, &x62, x60, x36, x33); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x63, &x64, x62, x34, x31); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x65, &x66, x64, x32, x29); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x67, &x68, x66, x30, x27); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x69, &x70, x68, x28, x25); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x71, &x72, x70, x26, x23); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x73, &x74, x72, x24, x21); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x75, &x76, x74, x22, x19); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x77, &x78, x76, x20, x17); x79 = (x78 + x18); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x80, &x81, x47, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x82, &x83, x80, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x84, &x85, x80, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x86, &x87, 0x0, x47, x84); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x88, &x89, x87, x49, x85); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x90, &x91, x89, x51, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x92, &x93, x91, x53, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x94, &x95, x93, x55, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x96, &x97, x95, x57, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x98, &x99, x97, x59, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x100, &x101, x99, x61, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x102, &x103, x101, x63, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x104, &x105, x103, x65, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x106, &x107, x105, x67, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x108, &x109, x107, x69, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x110, &x111, x109, x71, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x112, &x113, x111, x73, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x114, &x115, x113, x75, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x116, &x117, x115, x77, x82); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x118, &x119, x117, x79, x83); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x120, &x121, x1, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x122, &x123, x1, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x124, &x125, x1, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x126, &x127, x1, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x128, &x129, x1, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x130, &x131, x1, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x132, &x133, x1, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x134, &x135, x1, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x136, &x137, x1, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x138, &x139, x1, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x140, &x141, x1, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x142, &x143, x1, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x144, &x145, x1, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x146, &x147, x1, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x148, &x149, x1, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x150, &x151, x1, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x152, &x153, 0x0, x151, x148); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x154, &x155, x153, x149, x146); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x156, &x157, x155, x147, x144); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x158, &x159, x157, x145, x142); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x160, &x161, x159, x143, x140); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x162, &x163, x161, x141, x138); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x164, &x165, x163, x139, x136); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x166, &x167, x165, x137, x134); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x168, &x169, x167, x135, x132); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x170, &x171, x169, x133, x130); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x172, &x173, x171, x131, x128); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x174, &x175, x173, x129, x126); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x176, &x177, x175, x127, x124); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x178, &x179, x177, x125, x122); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x180, &x181, x179, x123, x120); x182 = (x181 + x121); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x183, &x184, 0x0, x88, x150); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x185, &x186, x184, x90, x152); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x187, &x188, x186, x92, x154); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x189, &x190, x188, x94, x156); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x191, &x192, x190, x96, x158); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x193, &x194, x192, x98, x160); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x195, &x196, x194, x100, x162); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x197, &x198, x196, x102, x164); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x199, &x200, x198, x104, x166); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x201, &x202, x200, x106, x168); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x203, &x204, x202, x108, x170); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x205, &x206, x204, x110, x172); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x207, &x208, x206, x112, x174); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x209, &x210, x208, x114, x176); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x211, &x212, x210, x116, x178); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x213, &x214, x212, x118, x180); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x215, &x216, x214, x119, x182); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x217, &x218, x183, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x219, &x220, x217, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x221, &x222, x217, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x223, &x224, 0x0, x183, x221); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x225, &x226, x224, x185, x222); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x227, &x228, x226, x187, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x229, &x230, x228, x189, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x231, &x232, x230, x191, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x233, &x234, x232, x193, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x235, &x236, x234, x195, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x237, &x238, x236, x197, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x239, &x240, x238, x199, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x241, &x242, x240, x201, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x243, &x244, x242, x203, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x245, &x246, x244, x205, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x247, &x248, x246, x207, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x249, &x250, x248, x209, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x251, &x252, x250, x211, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x253, &x254, x252, x213, x219); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x255, &x256, x254, x215, x220); x257 = ((uint32_t)x256 + x216); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x258, &x259, x2, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x260, &x261, x2, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x262, &x263, x2, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x264, &x265, x2, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x266, &x267, x2, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x268, &x269, x2, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x270, &x271, x2, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x272, &x273, x2, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x274, &x275, x2, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x276, &x277, x2, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x278, &x279, x2, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x280, &x281, x2, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x282, &x283, x2, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x284, &x285, x2, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x286, &x287, x2, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x288, &x289, x2, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x290, &x291, 0x0, x289, x286); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x292, &x293, x291, x287, x284); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x294, &x295, x293, x285, x282); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x296, &x297, x295, x283, x280); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x298, &x299, x297, x281, x278); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x300, &x301, x299, x279, x276); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x302, &x303, x301, x277, x274); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x304, &x305, x303, x275, x272); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x306, &x307, x305, x273, x270); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x308, &x309, x307, x271, x268); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x310, &x311, x309, x269, x266); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x312, &x313, x311, x267, x264); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x314, &x315, x313, x265, x262); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x316, &x317, x315, x263, x260); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x318, &x319, x317, x261, x258); x320 = (x319 + x259); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x321, &x322, 0x0, x225, x288); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x323, &x324, x322, x227, x290); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x325, &x326, x324, x229, x292); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x327, &x328, x326, x231, x294); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x329, &x330, x328, x233, x296); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x331, &x332, x330, x235, x298); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x333, &x334, x332, x237, x300); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x335, &x336, x334, x239, x302); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x337, &x338, x336, x241, x304); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x339, &x340, x338, x243, x306); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x341, &x342, x340, x245, x308); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x343, &x344, x342, x247, x310); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x345, &x346, x344, x249, x312); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x347, &x348, x346, x251, x314); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x349, &x350, x348, x253, x316); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x351, &x352, x350, x255, x318); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x353, &x354, x352, x257, x320); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x355, &x356, x321, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x357, &x358, x355, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x359, &x360, x355, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x361, &x362, 0x0, x321, x359); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x363, &x364, x362, x323, x360); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x365, &x366, x364, x325, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x367, &x368, x366, x327, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x369, &x370, x368, x329, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x371, &x372, x370, x331, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x373, &x374, x372, x333, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x375, &x376, x374, x335, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x377, &x378, x376, x337, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x379, &x380, x378, x339, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x381, &x382, x380, x341, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x383, &x384, x382, x343, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x385, &x386, x384, x345, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x387, &x388, x386, x347, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x389, &x390, x388, x349, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x391, &x392, x390, x351, x357); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x393, &x394, x392, x353, x358); x395 = ((uint32_t)x394 + x354); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x396, &x397, x3, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x398, &x399, x3, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x400, &x401, x3, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x402, &x403, x3, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x404, &x405, x3, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x406, &x407, x3, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x408, &x409, x3, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x410, &x411, x3, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x412, &x413, x3, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x414, &x415, x3, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x416, &x417, x3, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x418, &x419, x3, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x420, &x421, x3, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x422, &x423, x3, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x424, &x425, x3, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x426, &x427, x3, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x428, &x429, 0x0, x427, x424); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x430, &x431, x429, x425, x422); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x432, &x433, x431, x423, x420); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x434, &x435, x433, x421, x418); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x436, &x437, x435, x419, x416); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x438, &x439, x437, x417, x414); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x440, &x441, x439, x415, x412); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x442, &x443, x441, x413, x410); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x444, &x445, x443, x411, x408); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x446, &x447, x445, x409, x406); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x448, &x449, x447, x407, x404); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x450, &x451, x449, x405, x402); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x452, &x453, x451, x403, x400); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x454, &x455, x453, x401, x398); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x456, &x457, x455, x399, x396); x458 = (x457 + x397); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x459, &x460, 0x0, x363, x426); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x461, &x462, x460, x365, x428); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x463, &x464, x462, x367, x430); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x465, &x466, x464, x369, x432); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x467, &x468, x466, x371, x434); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x469, &x470, x468, x373, x436); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x471, &x472, x470, x375, x438); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x473, &x474, x472, x377, x440); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x475, &x476, x474, x379, x442); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x477, &x478, x476, x381, x444); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x479, &x480, x478, x383, x446); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x481, &x482, x480, x385, x448); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x483, &x484, x482, x387, x450); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x485, &x486, x484, x389, x452); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x487, &x488, x486, x391, x454); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x489, &x490, x488, x393, x456); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x491, &x492, x490, x395, x458); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x493, &x494, x459, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x495, &x496, x493, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x497, &x498, x493, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x499, &x500, 0x0, x459, x497); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x501, &x502, x500, x461, x498); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x503, &x504, x502, x463, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x505, &x506, x504, x465, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x507, &x508, x506, x467, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x509, &x510, x508, x469, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x511, &x512, x510, x471, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x513, &x514, x512, x473, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x515, &x516, x514, x475, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x517, &x518, x516, x477, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x519, &x520, x518, x479, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x521, &x522, x520, x481, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x523, &x524, x522, x483, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x525, &x526, x524, x485, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x527, &x528, x526, x487, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x529, &x530, x528, x489, x495); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x531, &x532, x530, x491, x496); x533 = ((uint32_t)x532 + x492); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x534, &x535, x4, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x536, &x537, x4, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x538, &x539, x4, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x540, &x541, x4, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x542, &x543, x4, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x544, &x545, x4, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x546, &x547, x4, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x548, &x549, x4, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x550, &x551, x4, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x552, &x553, x4, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x554, &x555, x4, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x556, &x557, x4, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x558, &x559, x4, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x560, &x561, x4, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x562, &x563, x4, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x564, &x565, x4, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x566, &x567, 0x0, x565, x562); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x568, &x569, x567, x563, x560); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x570, &x571, x569, x561, x558); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x572, &x573, x571, x559, x556); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x574, &x575, x573, x557, x554); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x576, &x577, x575, x555, x552); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x578, &x579, x577, x553, x550); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x580, &x581, x579, x551, x548); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x582, &x583, x581, x549, x546); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x584, &x585, x583, x547, x544); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x586, &x587, x585, x545, x542); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x588, &x589, x587, x543, x540); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x590, &x591, x589, x541, x538); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x592, &x593, x591, x539, x536); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x594, &x595, x593, x537, x534); x596 = (x595 + x535); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x597, &x598, 0x0, x501, x564); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x599, &x600, x598, x503, x566); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x601, &x602, x600, x505, x568); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x603, &x604, x602, x507, x570); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x605, &x606, x604, x509, x572); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x607, &x608, x606, x511, x574); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x609, &x610, x608, x513, x576); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x611, &x612, x610, x515, x578); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x613, &x614, x612, x517, x580); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x615, &x616, x614, x519, x582); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x617, &x618, x616, x521, x584); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x619, &x620, x618, x523, x586); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x621, &x622, x620, x525, x588); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x623, &x624, x622, x527, x590); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x625, &x626, x624, x529, x592); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x627, &x628, x626, x531, x594); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x629, &x630, x628, x533, x596); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x631, &x632, x597, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x633, &x634, x631, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x635, &x636, x631, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x637, &x638, 0x0, x597, x635); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x639, &x640, x638, x599, x636); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x641, &x642, x640, x601, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x643, &x644, x642, x603, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x645, &x646, x644, x605, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x647, &x648, x646, x607, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x649, &x650, x648, x609, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x651, &x652, x650, x611, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x653, &x654, x652, x613, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x655, &x656, x654, x615, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x657, &x658, x656, x617, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x659, &x660, x658, x619, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x661, &x662, x660, x621, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x663, &x664, x662, x623, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x665, &x666, x664, x625, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x667, &x668, x666, x627, x633); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x669, &x670, x668, x629, x634); x671 = ((uint32_t)x670 + x630); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x672, &x673, x5, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x674, &x675, x5, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x676, &x677, x5, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x678, &x679, x5, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x680, &x681, x5, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x682, &x683, x5, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x684, &x685, x5, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x686, &x687, x5, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x688, &x689, x5, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x690, &x691, x5, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x692, &x693, x5, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x694, &x695, x5, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x696, &x697, x5, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x698, &x699, x5, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x700, &x701, x5, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x702, &x703, x5, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x704, &x705, 0x0, x703, x700); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x706, &x707, x705, x701, x698); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x708, &x709, x707, x699, x696); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x710, &x711, x709, x697, x694); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x712, &x713, x711, x695, x692); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x714, &x715, x713, x693, x690); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x716, &x717, x715, x691, x688); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x718, &x719, x717, x689, x686); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x720, &x721, x719, x687, x684); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x722, &x723, x721, x685, x682); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x724, &x725, x723, x683, x680); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x726, &x727, x725, x681, x678); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x728, &x729, x727, x679, x676); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x730, &x731, x729, x677, x674); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x732, &x733, x731, x675, x672); x734 = (x733 + x673); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x735, &x736, 0x0, x639, x702); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x737, &x738, x736, x641, x704); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x739, &x740, x738, x643, x706); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x741, &x742, x740, x645, x708); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x743, &x744, x742, x647, x710); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x745, &x746, x744, x649, x712); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x747, &x748, x746, x651, x714); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x749, &x750, x748, x653, x716); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x751, &x752, x750, x655, x718); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x753, &x754, x752, x657, x720); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x755, &x756, x754, x659, x722); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x757, &x758, x756, x661, x724); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x759, &x760, x758, x663, x726); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x761, &x762, x760, x665, x728); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x763, &x764, x762, x667, x730); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x765, &x766, x764, x669, x732); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x767, &x768, x766, x671, x734); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x769, &x770, x735, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x771, &x772, x769, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x773, &x774, x769, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x775, &x776, 0x0, x735, x773); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x777, &x778, x776, x737, x774); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x779, &x780, x778, x739, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x781, &x782, x780, x741, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x783, &x784, x782, x743, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x785, &x786, x784, x745, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x787, &x788, x786, x747, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x789, &x790, x788, x749, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x791, &x792, x790, x751, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x793, &x794, x792, x753, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x795, &x796, x794, x755, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x797, &x798, x796, x757, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x799, &x800, x798, x759, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x801, &x802, x800, x761, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x803, &x804, x802, x763, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x805, &x806, x804, x765, x771); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x807, &x808, x806, x767, x772); x809 = ((uint32_t)x808 + x768); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x810, &x811, x6, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x812, &x813, x6, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x814, &x815, x6, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x816, &x817, x6, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x818, &x819, x6, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x820, &x821, x6, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x822, &x823, x6, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x824, &x825, x6, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x826, &x827, x6, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x828, &x829, x6, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x830, &x831, x6, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x832, &x833, x6, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x834, &x835, x6, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x836, &x837, x6, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x838, &x839, x6, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x840, &x841, x6, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x842, &x843, 0x0, x841, x838); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x844, &x845, x843, x839, x836); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x846, &x847, x845, x837, x834); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x848, &x849, x847, x835, x832); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x850, &x851, x849, x833, x830); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x852, &x853, x851, x831, x828); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x854, &x855, x853, x829, x826); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x856, &x857, x855, x827, x824); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x858, &x859, x857, x825, x822); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x860, &x861, x859, x823, x820); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x862, &x863, x861, x821, x818); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x864, &x865, x863, x819, x816); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x866, &x867, x865, x817, x814); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x868, &x869, x867, x815, x812); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x870, &x871, x869, x813, x810); x872 = (x871 + x811); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x873, &x874, 0x0, x777, x840); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x875, &x876, x874, x779, x842); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x877, &x878, x876, x781, x844); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x879, &x880, x878, x783, x846); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x881, &x882, x880, x785, x848); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x883, &x884, x882, x787, x850); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x885, &x886, x884, x789, x852); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x887, &x888, x886, x791, x854); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x889, &x890, x888, x793, x856); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x891, &x892, x890, x795, x858); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x893, &x894, x892, x797, x860); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x895, &x896, x894, x799, x862); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x897, &x898, x896, x801, x864); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x899, &x900, x898, x803, x866); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x901, &x902, x900, x805, x868); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x903, &x904, x902, x807, x870); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x905, &x906, x904, x809, x872); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x907, &x908, x873, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x909, &x910, x907, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x911, &x912, x907, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x913, &x914, 0x0, x873, x911); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x915, &x916, x914, x875, x912); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x917, &x918, x916, x877, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x919, &x920, x918, x879, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x921, &x922, x920, x881, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x923, &x924, x922, x883, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x925, &x926, x924, x885, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x927, &x928, x926, x887, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x929, &x930, x928, x889, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x931, &x932, x930, x891, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x933, &x934, x932, x893, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x935, &x936, x934, x895, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x937, &x938, x936, x897, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x939, &x940, x938, x899, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x941, &x942, x940, x901, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x943, &x944, x942, x903, x909); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x945, &x946, x944, x905, x910); x947 = ((uint32_t)x946 + x906); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x948, &x949, x7, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x950, &x951, x7, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x952, &x953, x7, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x954, &x955, x7, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x956, &x957, x7, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x958, &x959, x7, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x960, &x961, x7, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x962, &x963, x7, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x964, &x965, x7, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x966, &x967, x7, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x968, &x969, x7, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x970, &x971, x7, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x972, &x973, x7, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x974, &x975, x7, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x976, &x977, x7, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x978, &x979, x7, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x980, &x981, 0x0, x979, x976); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x982, &x983, x981, x977, x974); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x984, &x985, x983, x975, x972); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x986, &x987, x985, x973, x970); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x988, &x989, x987, x971, x968); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x990, &x991, x989, x969, x966); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x992, &x993, x991, x967, x964); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x994, &x995, x993, x965, x962); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x996, &x997, x995, x963, x960); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x998, &x999, x997, x961, x958); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1000, &x1001, x999, x959, x956); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1002, &x1003, x1001, x957, x954); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1004, &x1005, x1003, x955, x952); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1006, &x1007, x1005, x953, x950); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1008, &x1009, x1007, x951, x948); x1010 = (x1009 + x949); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1011, &x1012, 0x0, x915, x978); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1013, &x1014, x1012, x917, x980); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1015, &x1016, x1014, x919, x982); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1017, &x1018, x1016, x921, x984); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1019, &x1020, x1018, x923, x986); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1021, &x1022, x1020, x925, x988); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1023, &x1024, x1022, x927, x990); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1025, &x1026, x1024, x929, x992); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1027, &x1028, x1026, x931, x994); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1029, &x1030, x1028, x933, x996); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1031, &x1032, x1030, x935, x998); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1033, &x1034, x1032, x937, x1000); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1035, &x1036, x1034, x939, x1002); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1037, &x1038, x1036, x941, x1004); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1039, &x1040, x1038, x943, x1006); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1041, &x1042, x1040, x945, x1008); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1043, &x1044, x1042, x947, x1010); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1045, &x1046, x1011, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1047, &x1048, x1045, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1049, &x1050, x1045, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1051, &x1052, 0x0, x1011, x1049); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1053, &x1054, x1052, x1013, x1050); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1055, &x1056, x1054, x1015, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1057, &x1058, x1056, x1017, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1059, &x1060, x1058, x1019, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1061, &x1062, x1060, x1021, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1063, &x1064, x1062, x1023, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1065, &x1066, x1064, x1025, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1067, &x1068, x1066, x1027, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1069, &x1070, x1068, x1029, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1071, &x1072, x1070, x1031, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1073, &x1074, x1072, x1033, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1075, &x1076, x1074, x1035, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1077, &x1078, x1076, x1037, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1079, &x1080, x1078, x1039, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1081, &x1082, x1080, x1041, x1047); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1083, &x1084, x1082, x1043, x1048); x1085 = ((uint32_t)x1084 + x1044); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1086, &x1087, x8, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1088, &x1089, x8, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1090, &x1091, x8, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1092, &x1093, x8, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1094, &x1095, x8, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1096, &x1097, x8, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1098, &x1099, x8, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1100, &x1101, x8, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1102, &x1103, x8, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1104, &x1105, x8, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1106, &x1107, x8, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1108, &x1109, x8, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1110, &x1111, x8, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1112, &x1113, x8, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1114, &x1115, x8, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1116, &x1117, x8, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1118, &x1119, 0x0, x1117, x1114); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1120, &x1121, x1119, x1115, x1112); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1122, &x1123, x1121, x1113, x1110); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1124, &x1125, x1123, x1111, x1108); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1126, &x1127, x1125, x1109, x1106); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1128, &x1129, x1127, x1107, x1104); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1130, &x1131, x1129, x1105, x1102); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1132, &x1133, x1131, x1103, x1100); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1134, &x1135, x1133, x1101, x1098); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1136, &x1137, x1135, x1099, x1096); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1138, &x1139, x1137, x1097, x1094); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1140, &x1141, x1139, x1095, x1092); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1142, &x1143, x1141, x1093, x1090); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1144, &x1145, x1143, x1091, x1088); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1146, &x1147, x1145, x1089, x1086); x1148 = (x1147 + x1087); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1149, &x1150, 0x0, x1053, x1116); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1151, &x1152, x1150, x1055, x1118); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1153, &x1154, x1152, x1057, x1120); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1155, &x1156, x1154, x1059, x1122); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1157, &x1158, x1156, x1061, x1124); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1159, &x1160, x1158, x1063, x1126); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1161, &x1162, x1160, x1065, x1128); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1163, &x1164, x1162, x1067, x1130); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1165, &x1166, x1164, x1069, x1132); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1167, &x1168, x1166, x1071, x1134); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1169, &x1170, x1168, x1073, x1136); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1171, &x1172, x1170, x1075, x1138); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1173, &x1174, x1172, x1077, x1140); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1175, &x1176, x1174, x1079, x1142); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1177, &x1178, x1176, x1081, x1144); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1179, &x1180, x1178, x1083, x1146); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1181, &x1182, x1180, x1085, x1148); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1183, &x1184, x1149, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1185, &x1186, x1183, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1187, &x1188, x1183, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1189, &x1190, 0x0, x1149, x1187); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1191, &x1192, x1190, x1151, x1188); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1193, &x1194, x1192, x1153, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1195, &x1196, x1194, x1155, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1197, &x1198, x1196, x1157, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1199, &x1200, x1198, x1159, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1201, &x1202, x1200, x1161, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1203, &x1204, x1202, x1163, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1205, &x1206, x1204, x1165, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1207, &x1208, x1206, x1167, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1209, &x1210, x1208, x1169, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1211, &x1212, x1210, x1171, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1213, &x1214, x1212, x1173, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1215, &x1216, x1214, x1175, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1217, &x1218, x1216, x1177, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1219, &x1220, x1218, x1179, x1185); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1221, &x1222, x1220, x1181, x1186); x1223 = ((uint32_t)x1222 + x1182); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1224, &x1225, x9, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1226, &x1227, x9, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1228, &x1229, x9, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1230, &x1231, x9, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1232, &x1233, x9, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1234, &x1235, x9, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1236, &x1237, x9, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1238, &x1239, x9, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1240, &x1241, x9, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1242, &x1243, x9, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1244, &x1245, x9, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1246, &x1247, x9, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1248, &x1249, x9, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1250, &x1251, x9, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1252, &x1253, x9, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1254, &x1255, x9, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1256, &x1257, 0x0, x1255, x1252); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1258, &x1259, x1257, x1253, x1250); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1260, &x1261, x1259, x1251, x1248); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1262, &x1263, x1261, x1249, x1246); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1264, &x1265, x1263, x1247, x1244); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1266, &x1267, x1265, x1245, x1242); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1268, &x1269, x1267, x1243, x1240); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1270, &x1271, x1269, x1241, x1238); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1272, &x1273, x1271, x1239, x1236); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1274, &x1275, x1273, x1237, x1234); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1276, &x1277, x1275, x1235, x1232); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1278, &x1279, x1277, x1233, x1230); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1280, &x1281, x1279, x1231, x1228); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1282, &x1283, x1281, x1229, x1226); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1284, &x1285, x1283, x1227, x1224); x1286 = (x1285 + x1225); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1287, &x1288, 0x0, x1191, x1254); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1289, &x1290, x1288, x1193, x1256); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1291, &x1292, x1290, x1195, x1258); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1293, &x1294, x1292, x1197, x1260); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1295, &x1296, x1294, x1199, x1262); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1297, &x1298, x1296, x1201, x1264); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1299, &x1300, x1298, x1203, x1266); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1301, &x1302, x1300, x1205, x1268); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1303, &x1304, x1302, x1207, x1270); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1305, &x1306, x1304, x1209, x1272); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1307, &x1308, x1306, x1211, x1274); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1309, &x1310, x1308, x1213, x1276); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1311, &x1312, x1310, x1215, x1278); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1313, &x1314, x1312, x1217, x1280); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1315, &x1316, x1314, x1219, x1282); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1317, &x1318, x1316, x1221, x1284); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1319, &x1320, x1318, x1223, x1286); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1321, &x1322, x1287, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1323, &x1324, x1321, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1325, &x1326, x1321, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1327, &x1328, 0x0, x1287, x1325); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1329, &x1330, x1328, x1289, x1326); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1331, &x1332, x1330, x1291, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1333, &x1334, x1332, x1293, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1335, &x1336, x1334, x1295, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1337, &x1338, x1336, x1297, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1339, &x1340, x1338, x1299, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1341, &x1342, x1340, x1301, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1343, &x1344, x1342, x1303, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1345, &x1346, x1344, x1305, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1347, &x1348, x1346, x1307, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1349, &x1350, x1348, x1309, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1351, &x1352, x1350, x1311, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1353, &x1354, x1352, x1313, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1355, &x1356, x1354, x1315, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1357, &x1358, x1356, x1317, x1323); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1359, &x1360, x1358, x1319, x1324); x1361 = ((uint32_t)x1360 + x1320); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1362, &x1363, x10, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1364, &x1365, x10, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1366, &x1367, x10, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1368, &x1369, x10, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1370, &x1371, x10, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1372, &x1373, x10, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1374, &x1375, x10, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1376, &x1377, x10, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1378, &x1379, x10, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1380, &x1381, x10, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1382, &x1383, x10, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1384, &x1385, x10, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1386, &x1387, x10, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1388, &x1389, x10, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1390, &x1391, x10, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1392, &x1393, x10, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1394, &x1395, 0x0, x1393, x1390); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1396, &x1397, x1395, x1391, x1388); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1398, &x1399, x1397, x1389, x1386); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1400, &x1401, x1399, x1387, x1384); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1402, &x1403, x1401, x1385, x1382); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1404, &x1405, x1403, x1383, x1380); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1406, &x1407, x1405, x1381, x1378); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1408, &x1409, x1407, x1379, x1376); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1410, &x1411, x1409, x1377, x1374); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1412, &x1413, x1411, x1375, x1372); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1414, &x1415, x1413, x1373, x1370); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1416, &x1417, x1415, x1371, x1368); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1418, &x1419, x1417, x1369, x1366); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1420, &x1421, x1419, x1367, x1364); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1422, &x1423, x1421, x1365, x1362); x1424 = (x1423 + x1363); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1425, &x1426, 0x0, x1329, x1392); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1427, &x1428, x1426, x1331, x1394); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1429, &x1430, x1428, x1333, x1396); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1431, &x1432, x1430, x1335, x1398); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1433, &x1434, x1432, x1337, x1400); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1435, &x1436, x1434, x1339, x1402); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1437, &x1438, x1436, x1341, x1404); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1439, &x1440, x1438, x1343, x1406); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1441, &x1442, x1440, x1345, x1408); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1443, &x1444, x1442, x1347, x1410); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1445, &x1446, x1444, x1349, x1412); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1447, &x1448, x1446, x1351, x1414); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1449, &x1450, x1448, x1353, x1416); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1451, &x1452, x1450, x1355, x1418); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1453, &x1454, x1452, x1357, x1420); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1455, &x1456, x1454, x1359, x1422); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1457, &x1458, x1456, x1361, x1424); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1459, &x1460, x1425, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1461, &x1462, x1459, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1463, &x1464, x1459, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1465, &x1466, 0x0, x1425, x1463); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1467, &x1468, x1466, x1427, x1464); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1469, &x1470, x1468, x1429, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1471, &x1472, x1470, x1431, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1473, &x1474, x1472, x1433, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1475, &x1476, x1474, x1435, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1477, &x1478, x1476, x1437, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1479, &x1480, x1478, x1439, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1481, &x1482, x1480, x1441, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1483, &x1484, x1482, x1443, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1485, &x1486, x1484, x1445, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1487, &x1488, x1486, x1447, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1489, &x1490, x1488, x1449, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1491, &x1492, x1490, x1451, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1493, &x1494, x1492, x1453, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1495, &x1496, x1494, x1455, x1461); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1497, &x1498, x1496, x1457, x1462); x1499 = ((uint32_t)x1498 + x1458); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1500, &x1501, x11, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1502, &x1503, x11, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1504, &x1505, x11, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1506, &x1507, x11, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1508, &x1509, x11, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1510, &x1511, x11, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1512, &x1513, x11, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1514, &x1515, x11, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1516, &x1517, x11, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1518, &x1519, x11, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1520, &x1521, x11, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1522, &x1523, x11, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1524, &x1525, x11, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1526, &x1527, x11, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1528, &x1529, x11, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1530, &x1531, x11, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1532, &x1533, 0x0, x1531, x1528); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1534, &x1535, x1533, x1529, x1526); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1536, &x1537, x1535, x1527, x1524); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1538, &x1539, x1537, x1525, x1522); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1540, &x1541, x1539, x1523, x1520); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1542, &x1543, x1541, x1521, x1518); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1544, &x1545, x1543, x1519, x1516); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1546, &x1547, x1545, x1517, x1514); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1548, &x1549, x1547, x1515, x1512); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1550, &x1551, x1549, x1513, x1510); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1552, &x1553, x1551, x1511, x1508); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1554, &x1555, x1553, x1509, x1506); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1556, &x1557, x1555, x1507, x1504); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1558, &x1559, x1557, x1505, x1502); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1560, &x1561, x1559, x1503, x1500); x1562 = (x1561 + x1501); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1563, &x1564, 0x0, x1467, x1530); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1565, &x1566, x1564, x1469, x1532); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1567, &x1568, x1566, x1471, x1534); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1569, &x1570, x1568, x1473, x1536); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1571, &x1572, x1570, x1475, x1538); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1573, &x1574, x1572, x1477, x1540); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1575, &x1576, x1574, x1479, x1542); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1577, &x1578, x1576, x1481, x1544); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1579, &x1580, x1578, x1483, x1546); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1581, &x1582, x1580, x1485, x1548); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1583, &x1584, x1582, x1487, x1550); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1585, &x1586, x1584, x1489, x1552); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1587, &x1588, x1586, x1491, x1554); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1589, &x1590, x1588, x1493, x1556); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1591, &x1592, x1590, x1495, x1558); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1593, &x1594, x1592, x1497, x1560); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1595, &x1596, x1594, x1499, x1562); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1597, &x1598, x1563, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1599, &x1600, x1597, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1601, &x1602, x1597, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1603, &x1604, 0x0, x1563, x1601); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1605, &x1606, x1604, x1565, x1602); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1607, &x1608, x1606, x1567, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1609, &x1610, x1608, x1569, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1611, &x1612, x1610, x1571, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1613, &x1614, x1612, x1573, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1615, &x1616, x1614, x1575, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1617, &x1618, x1616, x1577, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1619, &x1620, x1618, x1579, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1621, &x1622, x1620, x1581, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1623, &x1624, x1622, x1583, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1625, &x1626, x1624, x1585, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1627, &x1628, x1626, x1587, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1629, &x1630, x1628, x1589, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1631, &x1632, x1630, x1591, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1633, &x1634, x1632, x1593, x1599); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1635, &x1636, x1634, x1595, x1600); x1637 = ((uint32_t)x1636 + x1596); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1638, &x1639, x12, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1640, &x1641, x12, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1642, &x1643, x12, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1644, &x1645, x12, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1646, &x1647, x12, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1648, &x1649, x12, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1650, &x1651, x12, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1652, &x1653, x12, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1654, &x1655, x12, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1656, &x1657, x12, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1658, &x1659, x12, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1660, &x1661, x12, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1662, &x1663, x12, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1664, &x1665, x12, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1666, &x1667, x12, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1668, &x1669, x12, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1670, &x1671, 0x0, x1669, x1666); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1672, &x1673, x1671, x1667, x1664); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1674, &x1675, x1673, x1665, x1662); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1676, &x1677, x1675, x1663, x1660); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1678, &x1679, x1677, x1661, x1658); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1680, &x1681, x1679, x1659, x1656); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1682, &x1683, x1681, x1657, x1654); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1684, &x1685, x1683, x1655, x1652); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1686, &x1687, x1685, x1653, x1650); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1688, &x1689, x1687, x1651, x1648); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1690, &x1691, x1689, x1649, x1646); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1692, &x1693, x1691, x1647, x1644); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1694, &x1695, x1693, x1645, x1642); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1696, &x1697, x1695, x1643, x1640); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1698, &x1699, x1697, x1641, x1638); x1700 = (x1699 + x1639); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1701, &x1702, 0x0, x1605, x1668); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1703, &x1704, x1702, x1607, x1670); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1705, &x1706, x1704, x1609, x1672); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1707, &x1708, x1706, x1611, x1674); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1709, &x1710, x1708, x1613, x1676); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1711, &x1712, x1710, x1615, x1678); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1713, &x1714, x1712, x1617, x1680); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1715, &x1716, x1714, x1619, x1682); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1717, &x1718, x1716, x1621, x1684); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1719, &x1720, x1718, x1623, x1686); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1721, &x1722, x1720, x1625, x1688); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1723, &x1724, x1722, x1627, x1690); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1725, &x1726, x1724, x1629, x1692); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1727, &x1728, x1726, x1631, x1694); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1729, &x1730, x1728, x1633, x1696); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1731, &x1732, x1730, x1635, x1698); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1733, &x1734, x1732, x1637, x1700); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1735, &x1736, x1701, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1737, &x1738, x1735, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1739, &x1740, x1735, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1741, &x1742, 0x0, x1701, x1739); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1743, &x1744, x1742, x1703, x1740); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1745, &x1746, x1744, x1705, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1747, &x1748, x1746, x1707, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1749, &x1750, x1748, x1709, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1751, &x1752, x1750, x1711, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1753, &x1754, x1752, x1713, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1755, &x1756, x1754, x1715, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1757, &x1758, x1756, x1717, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1759, &x1760, x1758, x1719, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1761, &x1762, x1760, x1721, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1763, &x1764, x1762, x1723, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1765, &x1766, x1764, x1725, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1767, &x1768, x1766, x1727, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1769, &x1770, x1768, x1729, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1771, &x1772, x1770, x1731, x1737); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1773, &x1774, x1772, x1733, x1738); x1775 = ((uint32_t)x1774 + x1734); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1776, &x1777, x13, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1778, &x1779, x13, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1780, &x1781, x13, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1782, &x1783, x13, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1784, &x1785, x13, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1786, &x1787, x13, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1788, &x1789, x13, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1790, &x1791, x13, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1792, &x1793, x13, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1794, &x1795, x13, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1796, &x1797, x13, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1798, &x1799, x13, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1800, &x1801, x13, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1802, &x1803, x13, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1804, &x1805, x13, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1806, &x1807, x13, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1808, &x1809, 0x0, x1807, x1804); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1810, &x1811, x1809, x1805, x1802); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1812, &x1813, x1811, x1803, x1800); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1814, &x1815, x1813, x1801, x1798); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1816, &x1817, x1815, x1799, x1796); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1818, &x1819, x1817, x1797, x1794); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1820, &x1821, x1819, x1795, x1792); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1822, &x1823, x1821, x1793, x1790); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1824, &x1825, x1823, x1791, x1788); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1826, &x1827, x1825, x1789, x1786); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1828, &x1829, x1827, x1787, x1784); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1830, &x1831, x1829, x1785, x1782); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1832, &x1833, x1831, x1783, x1780); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1834, &x1835, x1833, x1781, x1778); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1836, &x1837, x1835, x1779, x1776); x1838 = (x1837 + x1777); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1839, &x1840, 0x0, x1743, x1806); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1841, &x1842, x1840, x1745, x1808); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1843, &x1844, x1842, x1747, x1810); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1845, &x1846, x1844, x1749, x1812); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1847, &x1848, x1846, x1751, x1814); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1849, &x1850, x1848, x1753, x1816); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1851, &x1852, x1850, x1755, x1818); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1853, &x1854, x1852, x1757, x1820); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1855, &x1856, x1854, x1759, x1822); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1857, &x1858, x1856, x1761, x1824); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1859, &x1860, x1858, x1763, x1826); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1861, &x1862, x1860, x1765, x1828); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1863, &x1864, x1862, x1767, x1830); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1865, &x1866, x1864, x1769, x1832); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1867, &x1868, x1866, x1771, x1834); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1869, &x1870, x1868, x1773, x1836); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1871, &x1872, x1870, x1775, x1838); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1873, &x1874, x1839, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1875, &x1876, x1873, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1877, &x1878, x1873, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1879, &x1880, 0x0, x1839, x1877); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1881, &x1882, x1880, x1841, x1878); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1883, &x1884, x1882, x1843, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1885, &x1886, x1884, x1845, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1887, &x1888, x1886, x1847, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1889, &x1890, x1888, x1849, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1891, &x1892, x1890, x1851, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1893, &x1894, x1892, x1853, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1895, &x1896, x1894, x1855, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1897, &x1898, x1896, x1857, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1899, &x1900, x1898, x1859, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1901, &x1902, x1900, x1861, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1903, &x1904, x1902, x1863, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1905, &x1906, x1904, x1865, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1907, &x1908, x1906, x1867, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1909, &x1910, x1908, x1869, x1875); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1911, &x1912, x1910, x1871, x1876); x1913 = ((uint32_t)x1912 + x1872); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1914, &x1915, x14, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1916, &x1917, x14, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1918, &x1919, x14, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1920, &x1921, x14, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1922, &x1923, x14, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1924, &x1925, x14, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1926, &x1927, x14, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1928, &x1929, x14, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1930, &x1931, x14, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1932, &x1933, x14, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1934, &x1935, x14, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1936, &x1937, x14, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1938, &x1939, x14, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1940, &x1941, x14, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1942, &x1943, x14, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1944, &x1945, x14, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1946, &x1947, 0x0, x1945, x1942); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1948, &x1949, x1947, x1943, x1940); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1950, &x1951, x1949, x1941, x1938); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1952, &x1953, x1951, x1939, x1936); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1954, &x1955, x1953, x1937, x1934); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1956, &x1957, x1955, x1935, x1932); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1958, &x1959, x1957, x1933, x1930); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1960, &x1961, x1959, x1931, x1928); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1962, &x1963, x1961, x1929, x1926); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1964, &x1965, x1963, x1927, x1924); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1966, &x1967, x1965, x1925, x1922); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1968, &x1969, x1967, x1923, x1920); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1970, &x1971, x1969, x1921, x1918); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1972, &x1973, x1971, x1919, x1916); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1974, &x1975, x1973, x1917, x1914); x1976 = (x1975 + x1915); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x1977, &x1978, 0x0, x1881, x1944); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1979, &x1980, x1978, x1883, x1946); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1981, &x1982, x1980, x1885, x1948); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1983, &x1984, x1982, x1887, x1950); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1985, &x1986, x1984, x1889, x1952); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1987, &x1988, x1986, x1891, x1954); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1989, &x1990, x1988, x1893, x1956); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1991, &x1992, x1990, x1895, x1958); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1993, &x1994, x1992, x1897, x1960); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1995, &x1996, x1994, x1899, x1962); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1997, &x1998, x1996, x1901, x1964); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1999, &x2000, x1998, x1903, x1966); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2001, &x2002, x2000, x1905, x1968); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2003, &x2004, x2002, x1907, x1970); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2005, &x2006, x2004, x1909, x1972); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2007, &x2008, x2006, x1911, x1974); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2009, &x2010, x2008, x1913, x1976); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2011, &x2012, x1977, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2013, &x2014, x2011, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2015, &x2016, x2011, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2017, &x2018, 0x0, x1977, x2015); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2019, &x2020, x2018, x1979, x2016); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2021, &x2022, x2020, x1981, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2023, &x2024, x2022, x1983, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2025, &x2026, x2024, x1985, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2027, &x2028, x2026, x1987, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2029, &x2030, x2028, x1989, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2031, &x2032, x2030, x1991, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2033, &x2034, x2032, x1993, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2035, &x2036, x2034, x1995, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2037, &x2038, x2036, x1997, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2039, &x2040, x2038, x1999, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2041, &x2042, x2040, x2001, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2043, &x2044, x2042, x2003, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2045, &x2046, x2044, x2005, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2047, &x2048, x2046, x2007, x2013); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2049, &x2050, x2048, x2009, x2014); x2051 = ((uint32_t)x2050 + x2010); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2052, &x2053, x15, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2054, &x2055, x15, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2056, &x2057, x15, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2058, &x2059, x15, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2060, &x2061, x15, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2062, &x2063, x15, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2064, &x2065, x15, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2066, &x2067, x15, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2068, &x2069, x15, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2070, &x2071, x15, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2072, &x2073, x15, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2074, &x2075, x15, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2076, &x2077, x15, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2078, &x2079, x15, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2080, &x2081, x15, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2082, &x2083, x15, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2084, &x2085, 0x0, x2083, x2080); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2086, &x2087, x2085, x2081, x2078); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2088, &x2089, x2087, x2079, x2076); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2090, &x2091, x2089, x2077, x2074); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2092, &x2093, x2091, x2075, x2072); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2094, &x2095, x2093, x2073, x2070); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2096, &x2097, x2095, x2071, x2068); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2098, &x2099, x2097, x2069, x2066); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2100, &x2101, x2099, x2067, x2064); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2102, &x2103, x2101, x2065, x2062); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2104, &x2105, x2103, x2063, x2060); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2106, &x2107, x2105, x2061, x2058); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2108, &x2109, x2107, x2059, x2056); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2110, &x2111, x2109, x2057, x2054); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2112, &x2113, x2111, x2055, x2052); x2114 = (x2113 + x2053); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2115, &x2116, 0x0, x2019, x2082); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2117, &x2118, x2116, x2021, x2084); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2119, &x2120, x2118, x2023, x2086); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2121, &x2122, x2120, x2025, x2088); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2123, &x2124, x2122, x2027, x2090); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2125, &x2126, x2124, x2029, x2092); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2127, &x2128, x2126, x2031, x2094); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2129, &x2130, x2128, x2033, x2096); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2131, &x2132, x2130, x2035, x2098); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2133, &x2134, x2132, x2037, x2100); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2135, &x2136, x2134, x2039, x2102); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2137, &x2138, x2136, x2041, x2104); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2139, &x2140, x2138, x2043, x2106); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2141, &x2142, x2140, x2045, x2108); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2143, &x2144, x2142, x2047, x2110); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2145, &x2146, x2144, x2049, x2112); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2147, &x2148, x2146, x2051, x2114); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2149, &x2150, x2115, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2151, &x2152, x2149, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2153, &x2154, x2149, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2155, &x2156, 0x0, x2115, x2153); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2157, &x2158, x2156, x2117, x2154); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2159, &x2160, x2158, x2119, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2161, &x2162, x2160, x2121, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2163, &x2164, x2162, x2123, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2165, &x2166, x2164, x2125, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2167, &x2168, x2166, x2127, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2169, &x2170, x2168, x2129, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2171, &x2172, x2170, x2131, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2173, &x2174, x2172, x2133, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2175, &x2176, x2174, x2135, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2177, &x2178, x2176, x2137, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2179, &x2180, x2178, x2139, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2181, &x2182, x2180, x2141, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x2183, &x2184, x2182, x2143, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2185, &x2186, x2184, x2145, x2151); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x2187, &x2188, x2186, x2147, x2152); x2189 = ((uint32_t)x2188 + x2148); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x2190, &x2191, 0x0, x2157, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2192, &x2193, x2191, x2159, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2194, &x2195, x2193, x2161, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2196, &x2197, x2195, x2163, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2198, &x2199, x2197, x2165, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2200, &x2201, x2199, x2167, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2202, &x2203, x2201, x2169, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2204, &x2205, x2203, x2171, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2206, &x2207, x2205, x2173, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2208, &x2209, x2207, x2175, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2210, &x2211, x2209, x2177, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2212, &x2213, x2211, x2179, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2214, &x2215, x2213, x2181, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2216, &x2217, x2215, x2183, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2218, &x2219, x2217, x2185, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x2220, &x2221, x2219, x2187, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x2222, &x2223, x2221, x2189, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2224, x2223, x2190, x2157); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2225, x2223, x2192, x2159); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2226, x2223, x2194, x2161); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2227, x2223, x2196, x2163); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2228, x2223, x2198, x2165); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2229, x2223, x2200, x2167); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2230, x2223, x2202, x2169); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2231, x2223, x2204, x2171); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2232, x2223, x2206, x2173); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2233, x2223, x2208, x2175); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2234, x2223, x2210, x2177); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2235, x2223, x2212, x2179); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2236, x2223, x2214, x2181); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2237, x2223, x2216, x2183); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2238, x2223, x2218, x2185); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2239, x2223, x2220, x2187); out1[0] = x2224; out1[1] = x2225; out1[2] = x2226; out1[3] = x2227; out1[4] = x2228; out1[5] = x2229; out1[6] = x2230; out1[7] = x2231; out1[8] = x2232; out1[9] = x2233; out1[10] = x2234; out1[11] = x2235; out1[12] = x2236; out1[13] = x2237; out1[14] = x2238; out1[15] = x2239; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_add adds two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) + eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_add( uint32_t out1[16], const uint32_t arg1[16], const uint32_t arg2[16]) { uint32_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2; uint32_t x3; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x4; uint32_t x5; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x6; uint32_t x7; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x8; uint32_t x9; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x10; uint32_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x12; uint32_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x14; uint32_t x15; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x16; uint32_t x17; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x18; uint32_t x19; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x20; uint32_t x21; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x22; uint32_t x23; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x24; uint32_t x25; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x26; uint32_t x27; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x28; uint32_t x29; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x30; uint32_t x31; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x32; uint32_t x33; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x34; uint32_t x35; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x36; uint32_t x37; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x38; uint32_t x39; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x40; uint32_t x41; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x42; uint32_t x43; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x44; uint32_t x45; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x46; uint32_t x47; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x48; uint32_t x49; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x50; uint32_t x51; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x52; uint32_t x53; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x54; uint32_t x55; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x56; uint32_t x57; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x58; uint32_t x59; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x60; uint32_t x61; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x62; uint32_t x63; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x64; uint32_t x65; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x66; uint32_t x67; uint32_t x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint32_t x78; uint32_t x79; uint32_t x80; uint32_t x81; uint32_t x82; fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x9, &x10, x8, (arg1[4]), (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x11, &x12, x10, (arg1[5]), (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x13, &x14, x12, (arg1[6]), (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x15, &x16, x14, (arg1[7]), (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x17, &x18, x16, (arg1[8]), (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x19, &x20, x18, (arg1[9]), (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x21, &x22, x20, (arg1[10]), (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x23, &x24, x22, (arg1[11]), (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x25, &x26, x24, (arg1[12]), (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x27, &x28, x26, (arg1[13]), (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x29, &x30, x28, (arg1[14]), (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x31, &x32, x30, (arg1[15]), (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x33, &x34, 0x0, x1, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x35, &x36, x34, x3, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x37, &x38, x36, x5, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x39, &x40, x38, x7, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x41, &x42, x40, x9, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x43, &x44, x42, x11, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x45, &x46, x44, x13, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x47, &x48, x46, x15, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x49, &x50, x48, x17, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x51, &x52, x50, x19, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x53, &x54, x52, x21, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x55, &x56, x54, x23, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x57, &x58, x56, x25, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x59, &x60, x58, x27, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x61, &x62, x60, x29, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x63, &x64, x62, x31, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x65, &x66, x64, x32, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x67, x66, x33, x1); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x68, x66, x35, x3); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x69, x66, x37, x5); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x70, x66, x39, x7); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x71, x66, x41, x9); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x72, x66, x43, x11); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x73, x66, x45, x13); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x74, x66, x47, x15); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x75, x66, x49, x17); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x76, x66, x51, x19); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x77, x66, x53, x21); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x78, x66, x55, x23); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x79, x66, x57, x25); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x80, x66, x59, x27); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x81, x66, x61, x29); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x82, x66, x63, x31); out1[0] = x67; out1[1] = x68; out1[2] = x69; out1[3] = x70; out1[4] = x71; out1[5] = x72; out1[6] = x73; out1[7] = x74; out1[8] = x75; out1[9] = x76; out1[10] = x77; out1[11] = x78; out1[12] = x79; out1[13] = x80; out1[14] = x81; out1[15] = x82; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_sub subtracts two field elements in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * 0 ≤ eval arg2 < m * Postconditions: * eval (from_montgomery out1) mod m = (eval (from_montgomery arg1) - eval (from_montgomery arg2)) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_sub( uint32_t out1[16], const uint32_t arg1[16], const uint32_t arg2[16]) { uint32_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2; uint32_t x3; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x4; uint32_t x5; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x6; uint32_t x7; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x8; uint32_t x9; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x10; uint32_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x12; uint32_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x14; uint32_t x15; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x16; uint32_t x17; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x18; uint32_t x19; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x20; uint32_t x21; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x22; uint32_t x23; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x24; uint32_t x25; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x26; uint32_t x27; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x28; uint32_t x29; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x30; uint32_t x31; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x32; uint32_t x33; uint32_t x34; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x35; uint32_t x36; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x37; uint32_t x38; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x39; uint32_t x40; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x41; uint32_t x42; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x43; uint32_t x44; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x45; uint32_t x46; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x47; uint32_t x48; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x49; uint32_t x50; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x51; uint32_t x52; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x53; uint32_t x54; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x55; uint32_t x56; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x57; uint32_t x58; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x59; uint32_t x60; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x61; uint32_t x62; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x63; uint32_t x64; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x65; fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x1, &x2, 0x0, (arg1[0]), (arg2[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x3, &x4, x2, (arg1[1]), (arg2[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x5, &x6, x4, (arg1[2]), (arg2[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x7, &x8, x6, (arg1[3]), (arg2[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x9, &x10, x8, (arg1[4]), (arg2[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x11, &x12, x10, (arg1[5]), (arg2[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x13, &x14, x12, (arg1[6]), (arg2[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x15, &x16, x14, (arg1[7]), (arg2[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x17, &x18, x16, (arg1[8]), (arg2[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x19, &x20, x18, (arg1[9]), (arg2[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x21, &x22, x20, (arg1[10]), (arg2[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x23, &x24, x22, (arg1[11]), (arg2[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x25, &x26, x24, (arg1[12]), (arg2[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x27, &x28, x26, (arg1[13]), (arg2[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x29, &x30, x28, (arg1[14]), (arg2[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x31, &x32, x30, (arg1[15]), (arg2[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x33, x32, 0x0, UINT32_C(0xffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x34, &x35, 0x0, x1, (x33 & UINT8_C(0x6f))); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x36, &x37, x35, x3, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x38, &x39, x37, x5, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x40, &x41, x39, x7, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x42, &x43, x41, x9, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x44, &x45, x43, x11, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x46, &x47, x45, x13, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x48, &x49, x47, x15, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x50, &x51, x49, x17, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x52, &x53, x51, x19, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x54, &x55, x53, x21, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x56, &x57, x55, x23, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x58, &x59, x57, x25, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x60, &x61, x59, x27, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x62, &x63, x61, x29, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x64, &x65, x63, x31, (x33 & UINT32_C(0x80000000))); out1[0] = x34; out1[1] = x36; out1[2] = x38; out1[3] = x40; out1[4] = x42; out1[5] = x44; out1[6] = x46; out1[7] = x48; out1[8] = x50; out1[9] = x52; out1[10] = x54; out1[11] = x56; out1[12] = x58; out1[13] = x60; out1[14] = x62; out1[15] = x64; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_opp negates a field element in the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = -eval (from_montgomery arg1) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_opp( uint32_t out1[16], const uint32_t arg1[16]) { uint32_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x2; uint32_t x3; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x4; uint32_t x5; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x6; uint32_t x7; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x8; uint32_t x9; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x10; uint32_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x12; uint32_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x14; uint32_t x15; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x16; uint32_t x17; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x18; uint32_t x19; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x20; uint32_t x21; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x22; uint32_t x23; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x24; uint32_t x25; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x26; uint32_t x27; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x28; uint32_t x29; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x30; uint32_t x31; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x32; uint32_t x33; uint32_t x34; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x35; uint32_t x36; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x37; uint32_t x38; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x39; uint32_t x40; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x41; uint32_t x42; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x43; uint32_t x44; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x45; uint32_t x46; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x47; uint32_t x48; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x49; uint32_t x50; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x51; uint32_t x52; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x53; uint32_t x54; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x55; uint32_t x56; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x57; uint32_t x58; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x59; uint32_t x60; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x61; uint32_t x62; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x63; uint32_t x64; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x65; fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x1, &x2, 0x0, 0x0, (arg1[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x3, &x4, x2, 0x0, (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x5, &x6, x4, 0x0, (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x7, &x8, x6, 0x0, (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x9, &x10, x8, 0x0, (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x11, &x12, x10, 0x0, (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x13, &x14, x12, 0x0, (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x15, &x16, x14, 0x0, (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x17, &x18, x16, 0x0, (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x19, &x20, x18, 0x0, (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x21, &x22, x20, 0x0, (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x23, &x24, x22, 0x0, (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x25, &x26, x24, 0x0, (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x27, &x28, x26, 0x0, (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x29, &x30, x28, 0x0, (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x31, &x32, x30, 0x0, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x33, x32, 0x0, UINT32_C(0xffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x34, &x35, 0x0, x1, (x33 & UINT8_C(0x6f))); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x36, &x37, x35, x3, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x38, &x39, x37, x5, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x40, &x41, x39, x7, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x42, &x43, x41, x9, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x44, &x45, x43, x11, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x46, &x47, x45, x13, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x48, &x49, x47, x15, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x50, &x51, x49, x17, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x52, &x53, x51, x19, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x54, &x55, x53, x21, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x56, &x57, x55, x23, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x58, &x59, x57, x25, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x60, &x61, x59, x27, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x62, &x63, x61, x29, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x64, &x65, x63, x31, (x33 & UINT32_C(0x80000000))); out1[0] = x34; out1[1] = x36; out1[2] = x38; out1[3] = x40; out1[4] = x42; out1[5] = x44; out1[6] = x46; out1[7] = x48; out1[8] = x50; out1[9] = x52; out1[10] = x54; out1[11] = x56; out1[12] = x58; out1[13] = x60; out1[14] = x62; out1[15] = x64; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery translates a field element out of the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval out1 mod m = (eval arg1 * ((2^32)âģš mod m)^16) mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery( uint32_t out1[16], const uint32_t arg1[16]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x9; uint32_t x10; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x19; uint32_t x20; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x21; uint32_t x22; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x23; uint32_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint32_t x29; uint32_t x30; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x31; uint32_t x32; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x33; uint32_t x34; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x43; uint32_t x44; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x45; uint32_t x46; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x47; uint32_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x55; uint32_t x56; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x57; uint32_t x58; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x59; uint32_t x60; uint32_t x61; uint32_t x62; uint32_t x63; uint32_t x64; uint32_t x65; uint32_t x66; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x67; uint32_t x68; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x69; uint32_t x70; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint32_t x78; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x79; uint32_t x80; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x81; uint32_t x82; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x83; uint32_t x84; uint32_t x85; uint32_t x86; uint32_t x87; uint32_t x88; uint32_t x89; uint32_t x90; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x91; uint32_t x92; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x93; uint32_t x94; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x95; uint32_t x96; uint32_t x97; uint32_t x98; uint32_t x99; uint32_t x100; uint32_t x101; uint32_t x102; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x103; uint32_t x104; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x105; uint32_t x106; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x107; uint32_t x108; uint32_t x109; uint32_t x110; uint32_t x111; uint32_t x112; uint32_t x113; uint32_t x114; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x115; uint32_t x116; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x117; uint32_t x118; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x119; uint32_t x120; uint32_t x121; uint32_t x122; uint32_t x123; uint32_t x124; uint32_t x125; uint32_t x126; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x127; uint32_t x128; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x129; uint32_t x130; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x131; uint32_t x132; uint32_t x133; uint32_t x134; uint32_t x135; uint32_t x136; uint32_t x137; uint32_t x138; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x139; uint32_t x140; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x141; uint32_t x142; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; uint32_t x148; uint32_t x149; uint32_t x150; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x151; uint32_t x152; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x153; uint32_t x154; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x155; uint32_t x156; uint32_t x157; uint32_t x158; uint32_t x159; uint32_t x160; uint32_t x161; uint32_t x162; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x163; uint32_t x164; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x165; uint32_t x166; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x167; uint32_t x168; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x169; uint32_t x170; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x171; uint32_t x172; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x173; uint32_t x174; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x175; uint32_t x176; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x177; uint32_t x178; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x179; uint32_t x180; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x181; uint32_t x182; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x183; uint32_t x184; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x185; uint32_t x186; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x187; uint32_t x188; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x189; uint32_t x190; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x191; uint32_t x192; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x193; uint32_t x194; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x195; uint32_t x196; uint32_t x197; uint32_t x198; uint32_t x199; uint32_t x200; uint32_t x201; uint32_t x202; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x203; uint32_t x204; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x205; uint32_t x206; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x207; uint32_t x208; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x209; uint32_t x210; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x211; uint32_t x212; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x213; uint32_t x214; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x215; uint32_t x216; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x217; uint32_t x218; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x219; uint32_t x220; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x221; uint32_t x222; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x223; uint32_t x224; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x225; uint32_t x226; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x227; uint32_t x228; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x229; uint32_t x230; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x231; uint32_t x232; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x233; uint32_t x234; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x235; uint32_t x236; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x237; uint32_t x238; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x239; uint32_t x240; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x241; uint32_t x242; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x243; uint32_t x244; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x245; uint32_t x246; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x247; uint32_t x248; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x249; uint32_t x250; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x251; uint32_t x252; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x253; uint32_t x254; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x255; uint32_t x256; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x257; uint32_t x258; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x259; uint32_t x260; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x261; uint32_t x262; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x263; uint32_t x264; uint32_t x265; uint32_t x266; uint32_t x267; uint32_t x268; uint32_t x269; uint32_t x270; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x271; uint32_t x272; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x273; uint32_t x274; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x275; uint32_t x276; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x277; uint32_t x278; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x279; uint32_t x280; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x281; uint32_t x282; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x283; uint32_t x284; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x285; uint32_t x286; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x287; uint32_t x288; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x289; uint32_t x290; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x291; uint32_t x292; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x293; uint32_t x294; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x295; uint32_t x296; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x297; uint32_t x298; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x299; uint32_t x300; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x301; uint32_t x302; uint32_t x303; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x304; uint32_t x305; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x306; uint32_t x307; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x308; uint32_t x309; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x310; uint32_t x311; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x312; uint32_t x313; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x314; uint32_t x315; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x316; uint32_t x317; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x318; uint32_t x319; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x320; uint32_t x321; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x322; uint32_t x323; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x324; uint32_t x325; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x326; uint32_t x327; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x328; uint32_t x329; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x330; uint32_t x331; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x332; uint32_t x333; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x334; uint32_t x335; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x336; uint32_t x337; uint32_t x338; uint32_t x339; uint32_t x340; uint32_t x341; uint32_t x342; uint32_t x343; uint32_t x344; uint32_t x345; uint32_t x346; uint32_t x347; uint32_t x348; uint32_t x349; uint32_t x350; uint32_t x351; uint32_t x352; x1 = (arg1[0]); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x2, &x3, x1, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x4, &x5, x2, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x6, &x7, x2, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x8, &x9, 0x0, x1, x6); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x10, &x11, 0x0, (x9 + x7), (arg1[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x12, &x13, x10, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x14, &x15, x12, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x16, &x17, x12, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x18, &x19, 0x0, x5, x14); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x20, &x21, 0x0, x10, x16); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x22, &x23, 0x0, (((uint32_t)x21 + x11) + x17), (arg1[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x24, &x25, x22, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x26, &x27, x24, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x28, &x29, x24, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x30, &x31, 0x0, (x19 + x15), x26); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x32, &x33, 0x0, x22, x28); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x34, &x35, 0x0, (((uint32_t)x33 + x23) + x29), (arg1[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x36, &x37, x34, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x38, &x39, x36, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x40, &x41, x36, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x42, &x43, 0x0, (x31 + x27), x38); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x44, &x45, 0x0, x34, x40); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x46, &x47, 0x0, (((uint32_t)x45 + x35) + x41), (arg1[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x48, &x49, x46, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x50, &x51, x48, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x52, &x53, x48, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x54, &x55, 0x0, (x43 + x39), x50); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x56, &x57, 0x0, x46, x52); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x58, &x59, 0x0, (((uint32_t)x57 + x47) + x53), (arg1[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x60, &x61, x58, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x62, &x63, x60, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x64, &x65, x60, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x66, &x67, 0x0, (x55 + x51), x62); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x68, &x69, 0x0, x58, x64); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x70, &x71, 0x0, (((uint32_t)x69 + x59) + x65), (arg1[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x72, &x73, x70, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x74, &x75, x72, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x76, &x77, x72, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x78, &x79, 0x0, (x67 + x63), x74); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x80, &x81, 0x0, x70, x76); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x82, &x83, 0x0, (((uint32_t)x81 + x71) + x77), (arg1[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x84, &x85, x82, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x86, &x87, x84, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x88, &x89, x84, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x90, &x91, 0x0, (x79 + x75), x86); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x92, &x93, 0x0, x82, x88); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x94, &x95, 0x0, (((uint32_t)x93 + x83) + x89), (arg1[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x96, &x97, x94, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x98, &x99, x96, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x100, &x101, x96, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x102, &x103, 0x0, (x91 + x87), x98); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x104, &x105, 0x0, x94, x100); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x106, &x107, 0x0, (((uint32_t)x105 + x95) + x101), (arg1[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x108, &x109, x106, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x110, &x111, x108, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x112, &x113, x108, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x114, &x115, 0x0, (x103 + x99), x110); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x116, &x117, 0x0, x106, x112); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x118, &x119, 0x0, (((uint32_t)x117 + x107) + x113), (arg1[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x120, &x121, x118, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x122, &x123, x120, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x124, &x125, x120, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x126, &x127, 0x0, (x115 + x111), x122); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x128, &x129, 0x0, x118, x124); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x130, &x131, 0x0, (((uint32_t)x129 + x119) + x125), (arg1[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x132, &x133, x130, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x134, &x135, x132, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x136, &x137, x132, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x138, &x139, 0x0, (x127 + x123), x134); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x140, &x141, 0x0, x130, x136); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x142, &x143, 0x0, (((uint32_t)x141 + x131) + x137), (arg1[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x144, &x145, x142, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x146, &x147, x144, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x148, &x149, x144, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x150, &x151, 0x0, (x139 + x135), x146); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x152, &x153, 0x0, x142, x148); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x154, &x155, 0x0, (((uint32_t)x153 + x143) + x149), (arg1[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x156, &x157, x154, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x158, &x159, x156, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x160, &x161, x156, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x162, &x163, 0x0, (x151 + x147), x158); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x164, &x165, 0x0, x154, x160); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x166, &x167, 0x0, (((uint32_t)x165 + x155) + x161), (arg1[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x168, &x169, x167, x4, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x170, &x171, x169, x18, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x172, &x173, x171, x30, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x174, &x175, x173, x42, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x176, &x177, x175, x54, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x178, &x179, x177, x66, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x180, &x181, x179, x78, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x182, &x183, x181, x90, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x184, &x185, x183, x102, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x186, &x187, x185, x114, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x188, &x189, x187, x126, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x190, &x191, x189, x138, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x192, &x193, x191, x150, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x194, &x195, x193, x162, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x196, &x197, x166, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x198, &x199, x196, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x200, &x201, x196, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x202, &x203, 0x0, x166, x200); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x204, &x205, x203, x168, x201); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x206, &x207, x205, x170, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x208, &x209, x207, x172, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x210, &x211, x209, x174, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x212, &x213, x211, x176, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x214, &x215, x213, x178, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x216, &x217, x215, x180, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x218, &x219, x217, x182, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x220, &x221, x219, x184, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x222, &x223, x221, x186, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x224, &x225, x223, x188, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x226, &x227, x225, x190, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x228, &x229, x227, x192, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x230, &x231, x229, x194, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x232, &x233, x231, (x195 + (x163 + x159)), x198); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x234, &x235, 0x0, x204, (arg1[15])); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x236, &x237, x235, x206, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x238, &x239, x237, x208, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x240, &x241, x239, x210, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x242, &x243, x241, x212, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x244, &x245, x243, x214, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x246, &x247, x245, x216, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x248, &x249, x247, x218, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x250, &x251, x249, x220, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x252, &x253, x251, x222, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x254, &x255, x253, x224, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x256, &x257, x255, x226, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x258, &x259, x257, x228, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x260, &x261, x259, x230, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x262, &x263, x261, x232, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x264, &x265, x234, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x266, &x267, x264, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x268, &x269, x264, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x270, &x271, 0x0, x234, x268); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x272, &x273, x271, x236, x269); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x274, &x275, x273, x238, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x276, &x277, x275, x240, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x278, &x279, x277, x242, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x280, &x281, x279, x244, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x282, &x283, x281, x246, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x284, &x285, x283, x248, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x286, &x287, x285, x250, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x288, &x289, x287, x252, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x290, &x291, x289, x254, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x292, &x293, x291, x256, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x294, &x295, x293, x258, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x296, &x297, x295, x260, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x298, &x299, x297, x262, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x300, &x301, x299, (x263 + (x233 + x199)), x266); x302 = (x301 + x267); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x303, &x304, 0x0, x272, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x305, &x306, x304, x274, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x307, &x308, x306, x276, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x309, &x310, x308, x278, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x311, &x312, x310, x280, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x313, &x314, x312, x282, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x315, &x316, x314, x284, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x317, &x318, x316, x286, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x319, &x320, x318, x288, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x321, &x322, x320, x290, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x323, &x324, x322, x292, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x325, &x326, x324, x294, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x327, &x328, x326, x296, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x329, &x330, x328, x298, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x331, &x332, x330, x300, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x333, &x334, x332, x302, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x335, &x336, x334, 0x0, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x337, x336, x303, x272); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x338, x336, x305, x274); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x339, x336, x307, x276); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x340, x336, x309, x278); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x341, x336, x311, x280); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x342, x336, x313, x282); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x343, x336, x315, x284); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x344, x336, x317, x286); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x345, x336, x319, x288); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x346, x336, x321, x290); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x347, x336, x323, x292); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x348, x336, x325, x294); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x349, x336, x327, x296); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x350, x336, x329, x298); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x351, x336, x331, x300); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x352, x336, x333, x302); out1[0] = x337; out1[1] = x338; out1[2] = x339; out1[3] = x340; out1[4] = x341; out1[5] = x342; out1[6] = x343; out1[7] = x344; out1[8] = x345; out1[9] = x346; out1[10] = x347; out1[11] = x348; out1[12] = x349; out1[13] = x350; out1[14] = x351; out1[15] = x352; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery translates a field element into the Montgomery domain. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * eval (from_montgomery out1) mod m = eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery( uint32_t out1[16], const uint32_t arg1[16]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x12; uint32_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x22; uint32_t x23; uint32_t x24; uint32_t x25; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x26; uint32_t x27; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x28; uint32_t x29; uint32_t x30; uint32_t x31; uint32_t x32; uint32_t x33; uint32_t x34; uint32_t x35; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x36; uint32_t x37; uint32_t x38; uint32_t x39; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x40; uint32_t x41; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x50; uint32_t x51; uint32_t x52; uint32_t x53; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x54; uint32_t x55; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x56; uint32_t x57; uint32_t x58; uint32_t x59; uint32_t x60; uint32_t x61; uint32_t x62; uint32_t x63; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x64; uint32_t x65; uint32_t x66; uint32_t x67; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x68; uint32_t x69; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x70; uint32_t x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x78; uint32_t x79; uint32_t x80; uint32_t x81; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x82; uint32_t x83; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x84; uint32_t x85; uint32_t x86; uint32_t x87; uint32_t x88; uint32_t x89; uint32_t x90; uint32_t x91; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x92; uint32_t x93; uint32_t x94; uint32_t x95; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x96; uint32_t x97; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x98; uint32_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; uint32_t x104; uint32_t x105; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x106; uint32_t x107; uint32_t x108; uint32_t x109; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x110; uint32_t x111; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x112; uint32_t x113; uint32_t x114; uint32_t x115; uint32_t x116; uint32_t x117; uint32_t x118; uint32_t x119; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x120; uint32_t x121; uint32_t x122; uint32_t x123; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x124; uint32_t x125; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x126; uint32_t x127; uint32_t x128; uint32_t x129; uint32_t x130; uint32_t x131; uint32_t x132; uint32_t x133; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x134; uint32_t x135; uint32_t x136; uint32_t x137; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x138; uint32_t x139; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x140; uint32_t x141; uint32_t x142; uint32_t x143; uint32_t x144; uint32_t x145; uint32_t x146; uint32_t x147; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x148; uint32_t x149; uint32_t x150; uint32_t x151; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x152; uint32_t x153; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x154; uint32_t x155; uint32_t x156; uint32_t x157; uint32_t x158; uint32_t x159; uint32_t x160; uint32_t x161; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x162; uint32_t x163; uint32_t x164; uint32_t x165; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x166; uint32_t x167; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x168; uint32_t x169; uint32_t x170; uint32_t x171; uint32_t x172; uint32_t x173; uint32_t x174; uint32_t x175; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x176; uint32_t x177; uint32_t x178; uint32_t x179; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x180; uint32_t x181; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x182; uint32_t x183; uint32_t x184; uint32_t x185; uint32_t x186; uint32_t x187; uint32_t x188; uint32_t x189; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x190; uint32_t x191; uint32_t x192; uint32_t x193; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x194; uint32_t x195; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x196; uint32_t x197; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x198; uint32_t x199; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x200; uint32_t x201; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x202; uint32_t x203; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x204; uint32_t x205; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x206; uint32_t x207; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x208; uint32_t x209; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x210; uint32_t x211; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x212; uint32_t x213; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x214; uint32_t x215; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x216; uint32_t x217; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x218; uint32_t x219; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x220; uint32_t x221; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x222; uint32_t x223; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x224; uint32_t x225; uint32_t x226; uint32_t x227; uint32_t x228; uint32_t x229; uint32_t x230; uint32_t x231; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x232; uint32_t x233; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x234; uint32_t x235; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x236; uint32_t x237; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x238; uint32_t x239; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x240; uint32_t x241; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x242; uint32_t x243; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x244; uint32_t x245; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x246; uint32_t x247; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x248; uint32_t x249; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x250; uint32_t x251; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x252; uint32_t x253; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x254; uint32_t x255; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x256; uint32_t x257; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x258; uint32_t x259; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x260; uint32_t x261; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x262; uint32_t x263; uint32_t x264; uint32_t x265; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x266; uint32_t x267; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x268; uint32_t x269; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x270; uint32_t x271; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x272; uint32_t x273; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x274; uint32_t x275; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x276; uint32_t x277; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x278; uint32_t x279; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x280; uint32_t x281; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x282; uint32_t x283; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x284; uint32_t x285; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x286; uint32_t x287; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x288; uint32_t x289; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x290; uint32_t x291; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x292; uint32_t x293; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x294; uint32_t x295; uint32_t x296; uint32_t x297; uint32_t x298; uint32_t x299; uint32_t x300; uint32_t x301; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x302; uint32_t x303; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x304; uint32_t x305; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x306; uint32_t x307; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x308; uint32_t x309; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x310; uint32_t x311; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x312; uint32_t x313; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x314; uint32_t x315; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x316; uint32_t x317; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x318; uint32_t x319; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x320; uint32_t x321; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x322; uint32_t x323; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x324; uint32_t x325; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x326; uint32_t x327; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x328; uint32_t x329; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x330; uint32_t x331; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x332; uint32_t x333; uint32_t x334; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x335; uint32_t x336; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x337; uint32_t x338; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x339; uint32_t x340; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x341; uint32_t x342; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x343; uint32_t x344; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x345; uint32_t x346; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x347; uint32_t x348; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x349; uint32_t x350; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x351; uint32_t x352; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x353; uint32_t x354; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x355; uint32_t x356; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x357; uint32_t x358; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x359; uint32_t x360; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x361; uint32_t x362; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x363; uint32_t x364; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x365; uint32_t x366; fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 x367; uint32_t x368; uint32_t x369; uint32_t x370; uint32_t x371; uint32_t x372; uint32_t x373; uint32_t x374; uint32_t x375; uint32_t x376; uint32_t x377; uint32_t x378; uint32_t x379; uint32_t x380; uint32_t x381; uint32_t x382; uint32_t x383; fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x1, &x2, (arg1[0]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x3, &x4, x1, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x5, &x6, x3, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x7, &x8, x3, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x9, &x10, (arg1[1]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x11, &x12, 0x0, x1, x7); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x13, &x14, 0x0, ((x12 + x2) + x8), x9); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x15, &x16, x13, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x17, &x18, x15, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x19, &x20, x15, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x21, &x22, 0x0, x6, x17); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x23, &x24, (arg1[2]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x25, &x26, 0x0, x13, x19); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x27, &x28, 0x0, ((x26 + (x14 + x10)) + x20), x23); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x29, &x30, x27, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x31, &x32, x29, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x33, &x34, x29, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x35, &x36, 0x0, (x22 + x18), x31); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x37, &x38, (arg1[3]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x39, &x40, 0x0, x27, x33); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x41, &x42, 0x0, ((x40 + (x28 + x24)) + x34), x37); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x43, &x44, x41, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x45, &x46, x43, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x47, &x48, x43, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x49, &x50, 0x0, (x36 + x32), x45); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x51, &x52, (arg1[4]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x53, &x54, 0x0, x41, x47); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x55, &x56, 0x0, ((x54 + (x42 + x38)) + x48), x51); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x57, &x58, x55, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x59, &x60, x57, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x61, &x62, x57, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x63, &x64, 0x0, (x50 + x46), x59); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x65, &x66, (arg1[5]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x67, &x68, 0x0, x55, x61); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x69, &x70, 0x0, ((x68 + (x56 + x52)) + x62), x65); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x71, &x72, x69, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x73, &x74, x71, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x75, &x76, x71, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x77, &x78, 0x0, (x64 + x60), x73); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x79, &x80, (arg1[6]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x81, &x82, 0x0, x69, x75); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x83, &x84, 0x0, ((x82 + (x70 + x66)) + x76), x79); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x85, &x86, x83, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x87, &x88, x85, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x89, &x90, x85, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x91, &x92, 0x0, (x78 + x74), x87); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x93, &x94, (arg1[7]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x95, &x96, 0x0, x83, x89); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x97, &x98, 0x0, ((x96 + (x84 + x80)) + x90), x93); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x99, &x100, x97, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x101, &x102, x99, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x103, &x104, x99, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x105, &x106, 0x0, (x92 + x88), x101); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x107, &x108, (arg1[8]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x109, &x110, 0x0, x97, x103); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x111, &x112, 0x0, ((x110 + (x98 + x94)) + x104), x107); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x113, &x114, x111, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x115, &x116, x113, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x117, &x118, x113, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x119, &x120, 0x0, (x106 + x102), x115); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x121, &x122, (arg1[9]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x123, &x124, 0x0, x111, x117); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x125, &x126, 0x0, ((x124 + (x112 + x108)) + x118), x121); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x127, &x128, x125, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x129, &x130, x127, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x131, &x132, x127, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x133, &x134, 0x0, (x120 + x116), x129); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x135, &x136, (arg1[10]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x137, &x138, 0x0, x125, x131); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x139, &x140, 0x0, ((x138 + (x126 + x122)) + x132), x135); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x141, &x142, x139, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x143, &x144, x141, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x145, &x146, x141, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x147, &x148, 0x0, (x134 + x130), x143); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x149, &x150, (arg1[11]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x151, &x152, 0x0, x139, x145); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x153, &x154, 0x0, ((x152 + (x140 + x136)) + x146), x149); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x155, &x156, x153, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x157, &x158, x155, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x159, &x160, x155, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x161, &x162, 0x0, (x148 + x144), x157); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x163, &x164, (arg1[12]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x165, &x166, 0x0, x153, x159); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x167, &x168, 0x0, ((x166 + (x154 + x150)) + x160), x163); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x169, &x170, x167, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x171, &x172, x169, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x173, &x174, x169, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x175, &x176, 0x0, (x162 + x158), x171); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x177, &x178, (arg1[13]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x179, &x180, 0x0, x167, x173); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x181, &x182, 0x0, ((x180 + (x168 + x164)) + x174), x177); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x183, &x184, x181, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x185, &x186, x183, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x187, &x188, x183, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x189, &x190, 0x0, (x176 + x172), x185); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x191, &x192, (arg1[14]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x193, &x194, 0x0, x181, x187); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x195, &x196, 0x0, ((x194 + (x182 + x178)) + x188), x191); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x197, &x198, x196, x5, x192); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x199, &x200, x198, x21, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x201, &x202, x200, x35, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x203, &x204, x202, x49, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x205, &x206, x204, x63, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x207, &x208, x206, x77, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x209, &x210, x208, x91, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x211, &x212, x210, x105, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x213, &x214, x212, x119, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x215, &x216, x214, x133, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x217, &x218, x216, x147, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x219, &x220, x218, x161, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x221, &x222, x220, x175, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x223, &x224, x222, x189, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x225, &x226, x195, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x227, &x228, x225, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x229, &x230, x225, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x231, &x232, 0x0, x195, x229); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x233, &x234, x232, x197, x230); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x235, &x236, x234, x199, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x237, &x238, x236, x201, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x239, &x240, x238, x203, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x241, &x242, x240, x205, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x243, &x244, x242, x207, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x245, &x246, x244, x209, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x247, &x248, x246, x211, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x249, &x250, x248, x213, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x251, &x252, x250, x215, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x253, &x254, x252, x217, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x255, &x256, x254, x219, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x257, &x258, x256, x221, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x259, &x260, x258, x223, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x261, &x262, x260, (x224 + (x190 + x186)), x227); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x263, &x264, (arg1[15]), UINT16_C(0xc084)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x265, &x266, 0x0, x233, x263); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x267, &x268, x266, x235, x264); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x269, &x270, x268, x237, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x271, &x272, x270, x239, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x273, &x274, x272, x241, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x275, &x276, x274, x243, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x277, &x278, x276, x245, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x279, &x280, x278, x247, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x281, &x282, x280, x249, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x283, &x284, x282, x251, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x285, &x286, x284, x253, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x287, &x288, x286, x255, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x289, &x290, x288, x257, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x291, &x292, x290, x259, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x293, &x294, x292, x261, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x295, &x296, x265, UINT32_C(0x24e6a171)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x297, &x298, x295, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_mulx_u32(&x299, &x300, x295, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x301, &x302, 0x0, x265, x299); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x303, &x304, x302, x267, x300); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x305, &x306, x304, x269, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x307, &x308, x306, x271, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x309, &x310, x308, x273, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x311, &x312, x310, x275, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x313, &x314, x312, x277, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x315, &x316, x314, x279, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x317, &x318, x316, x281, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x319, &x320, x318, x283, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x321, &x322, x320, x285, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x323, &x324, x322, x287, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x325, &x326, x324, x289, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x327, &x328, x326, x291, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32(&x329, &x330, x328, x293, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_addcarryx_u32( &x331, &x332, x330, (x294 + (x262 + x228)), x297); x333 = (x332 + x298); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x334, &x335, 0x0, x303, UINT8_C(0x6f)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x336, &x337, x335, x305, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x338, &x339, x337, x307, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x340, &x341, x339, x309, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x342, &x343, x341, x311, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x344, &x345, x343, x313, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x346, &x347, x345, x315, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x348, &x349, x347, x317, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x350, &x351, x349, x319, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x352, &x353, x351, x321, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x354, &x355, x353, x323, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x356, &x357, x355, x325, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x358, &x359, x357, x327, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x360, &x361, x359, x329, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x362, &x363, x361, x331, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32( &x364, &x365, x363, x333, UINT32_C(0x80000000)); fiat_id_tc26_gost_3410_2012_512_paramSetB_subborrowx_u32(&x366, &x367, x365, 0x0, 0x0); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x368, x367, x334, x303); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x369, x367, x336, x305); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x370, x367, x338, x307); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x371, x367, x340, x309); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x372, x367, x342, x311); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x373, x367, x344, x313); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x374, x367, x346, x315); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x375, x367, x348, x317); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x376, x367, x350, x319); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x377, x367, x352, x321); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x378, x367, x354, x323); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x379, x367, x356, x325); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x380, x367, x358, x327); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x381, x367, x360, x329); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x382, x367, x362, x331); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x383, x367, x364, x333); out1[0] = x368; out1[1] = x369; out1[2] = x370; out1[3] = x371; out1[4] = x372; out1[5] = x373; out1[6] = x374; out1[7] = x375; out1[8] = x376; out1[9] = x377; out1[10] = x378; out1[11] = x379; out1[12] = x380; out1[13] = x381; out1[14] = x382; out1[15] = x383; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_nonzero outputs a single non-zero word if the input is non-zero and zero otherwise. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = 0 ↔ eval (from_montgomery arg1) mod m = 0 * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_nonzero( uint32_t *out1, const uint32_t arg1[16]) { uint32_t x1; x1 = ((arg1[0]) | ((arg1[1]) | ((arg1[2]) | ((arg1[3]) | ((arg1[4]) | ((arg1[5]) | ((arg1[6]) | ((arg1[7]) | ((arg1[8]) | ((arg1[9]) | ((arg1[10]) | ((arg1[11]) | ((arg1[12]) | ((arg1[13]) | ((arg1[14]) | (arg1[15])))))))))))))))); *out1 = x1; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( uint32_t out1[16], fiat_id_tc26_gost_3410_2012_512_paramSetB_uint1 arg1, const uint32_t arg2[16], const uint32_t arg3[16]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x9, arg1, (arg2[8]), (arg3[8])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32(&x10, arg1, (arg2[9]), (arg3[9])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32( &x11, arg1, (arg2[10]), (arg3[10])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32( &x12, arg1, (arg2[11]), (arg3[11])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32( &x13, arg1, (arg2[12]), (arg3[12])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32( &x14, arg1, (arg2[13]), (arg3[13])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32( &x15, arg1, (arg2[14]), (arg3[14])); fiat_id_tc26_gost_3410_2012_512_paramSetB_cmovznz_u32( &x16, arg1, (arg2[15]), (arg3[15])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; out1[11] = x12; out1[12] = x13; out1[13] = x14; out1[14] = x15; out1[15] = x16; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes serializes a field element NOT in the Montgomery domain to bytes in little-endian order. * Preconditions: * 0 ≤ eval arg1 < m * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..63] * * Input Bounds: * arg1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes( uint8_t out1[64], const uint32_t arg1[16]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint8_t x17; uint32_t x18; uint8_t x19; uint32_t x20; uint8_t x21; uint8_t x22; uint8_t x23; uint32_t x24; uint8_t x25; uint32_t x26; uint8_t x27; uint8_t x28; uint8_t x29; uint32_t x30; uint8_t x31; uint32_t x32; uint8_t x33; uint8_t x34; uint8_t x35; uint32_t x36; uint8_t x37; uint32_t x38; uint8_t x39; uint8_t x40; uint8_t x41; uint32_t x42; uint8_t x43; uint32_t x44; uint8_t x45; uint8_t x46; uint8_t x47; uint32_t x48; uint8_t x49; uint32_t x50; uint8_t x51; uint8_t x52; uint8_t x53; uint32_t x54; uint8_t x55; uint32_t x56; uint8_t x57; uint8_t x58; uint8_t x59; uint32_t x60; uint8_t x61; uint32_t x62; uint8_t x63; uint8_t x64; uint8_t x65; uint32_t x66; uint8_t x67; uint32_t x68; uint8_t x69; uint8_t x70; uint8_t x71; uint32_t x72; uint8_t x73; uint32_t x74; uint8_t x75; uint8_t x76; uint8_t x77; uint32_t x78; uint8_t x79; uint32_t x80; uint8_t x81; uint8_t x82; uint8_t x83; uint32_t x84; uint8_t x85; uint32_t x86; uint8_t x87; uint8_t x88; uint8_t x89; uint32_t x90; uint8_t x91; uint32_t x92; uint8_t x93; uint8_t x94; uint8_t x95; uint32_t x96; uint8_t x97; uint32_t x98; uint8_t x99; uint8_t x100; uint8_t x101; uint32_t x102; uint8_t x103; uint32_t x104; uint8_t x105; uint8_t x106; uint8_t x107; uint32_t x108; uint8_t x109; uint32_t x110; uint8_t x111; uint8_t x112; x1 = (arg1[15]); x2 = (arg1[14]); x3 = (arg1[13]); x4 = (arg1[12]); x5 = (arg1[11]); x6 = (arg1[10]); x7 = (arg1[9]); x8 = (arg1[8]); x9 = (arg1[7]); x10 = (arg1[6]); x11 = (arg1[5]); x12 = (arg1[4]); x13 = (arg1[3]); x14 = (arg1[2]); x15 = (arg1[1]); x16 = (arg1[0]); x17 = (uint8_t)(x16 & UINT8_C(0xff)); x18 = (x16 >> 8); x19 = (uint8_t)(x18 & UINT8_C(0xff)); x20 = (x18 >> 8); x21 = (uint8_t)(x20 & UINT8_C(0xff)); x22 = (uint8_t)(x20 >> 8); x23 = (uint8_t)(x15 & UINT8_C(0xff)); x24 = (x15 >> 8); x25 = (uint8_t)(x24 & UINT8_C(0xff)); x26 = (x24 >> 8); x27 = (uint8_t)(x26 & UINT8_C(0xff)); x28 = (uint8_t)(x26 >> 8); x29 = (uint8_t)(x14 & UINT8_C(0xff)); x30 = (x14 >> 8); x31 = (uint8_t)(x30 & UINT8_C(0xff)); x32 = (x30 >> 8); x33 = (uint8_t)(x32 & UINT8_C(0xff)); x34 = (uint8_t)(x32 >> 8); x35 = (uint8_t)(x13 & UINT8_C(0xff)); x36 = (x13 >> 8); x37 = (uint8_t)(x36 & UINT8_C(0xff)); x38 = (x36 >> 8); x39 = (uint8_t)(x38 & UINT8_C(0xff)); x40 = (uint8_t)(x38 >> 8); x41 = (uint8_t)(x12 & UINT8_C(0xff)); x42 = (x12 >> 8); x43 = (uint8_t)(x42 & UINT8_C(0xff)); x44 = (x42 >> 8); x45 = (uint8_t)(x44 & UINT8_C(0xff)); x46 = (uint8_t)(x44 >> 8); x47 = (uint8_t)(x11 & UINT8_C(0xff)); x48 = (x11 >> 8); x49 = (uint8_t)(x48 & UINT8_C(0xff)); x50 = (x48 >> 8); x51 = (uint8_t)(x50 & UINT8_C(0xff)); x52 = (uint8_t)(x50 >> 8); x53 = (uint8_t)(x10 & UINT8_C(0xff)); x54 = (x10 >> 8); x55 = (uint8_t)(x54 & UINT8_C(0xff)); x56 = (x54 >> 8); x57 = (uint8_t)(x56 & UINT8_C(0xff)); x58 = (uint8_t)(x56 >> 8); x59 = (uint8_t)(x9 & UINT8_C(0xff)); x60 = (x9 >> 8); x61 = (uint8_t)(x60 & UINT8_C(0xff)); x62 = (x60 >> 8); x63 = (uint8_t)(x62 & UINT8_C(0xff)); x64 = (uint8_t)(x62 >> 8); x65 = (uint8_t)(x8 & UINT8_C(0xff)); x66 = (x8 >> 8); x67 = (uint8_t)(x66 & UINT8_C(0xff)); x68 = (x66 >> 8); x69 = (uint8_t)(x68 & UINT8_C(0xff)); x70 = (uint8_t)(x68 >> 8); x71 = (uint8_t)(x7 & UINT8_C(0xff)); x72 = (x7 >> 8); x73 = (uint8_t)(x72 & UINT8_C(0xff)); x74 = (x72 >> 8); x75 = (uint8_t)(x74 & UINT8_C(0xff)); x76 = (uint8_t)(x74 >> 8); x77 = (uint8_t)(x6 & UINT8_C(0xff)); x78 = (x6 >> 8); x79 = (uint8_t)(x78 & UINT8_C(0xff)); x80 = (x78 >> 8); x81 = (uint8_t)(x80 & UINT8_C(0xff)); x82 = (uint8_t)(x80 >> 8); x83 = (uint8_t)(x5 & UINT8_C(0xff)); x84 = (x5 >> 8); x85 = (uint8_t)(x84 & UINT8_C(0xff)); x86 = (x84 >> 8); x87 = (uint8_t)(x86 & UINT8_C(0xff)); x88 = (uint8_t)(x86 >> 8); x89 = (uint8_t)(x4 & UINT8_C(0xff)); x90 = (x4 >> 8); x91 = (uint8_t)(x90 & UINT8_C(0xff)); x92 = (x90 >> 8); x93 = (uint8_t)(x92 & UINT8_C(0xff)); x94 = (uint8_t)(x92 >> 8); x95 = (uint8_t)(x3 & UINT8_C(0xff)); x96 = (x3 >> 8); x97 = (uint8_t)(x96 & UINT8_C(0xff)); x98 = (x96 >> 8); x99 = (uint8_t)(x98 & UINT8_C(0xff)); x100 = (uint8_t)(x98 >> 8); x101 = (uint8_t)(x2 & UINT8_C(0xff)); x102 = (x2 >> 8); x103 = (uint8_t)(x102 & UINT8_C(0xff)); x104 = (x102 >> 8); x105 = (uint8_t)(x104 & UINT8_C(0xff)); x106 = (uint8_t)(x104 >> 8); x107 = (uint8_t)(x1 & UINT8_C(0xff)); x108 = (x1 >> 8); x109 = (uint8_t)(x108 & UINT8_C(0xff)); x110 = (x108 >> 8); x111 = (uint8_t)(x110 & UINT8_C(0xff)); x112 = (uint8_t)(x110 >> 8); out1[0] = x17; out1[1] = x19; out1[2] = x21; out1[3] = x22; out1[4] = x23; out1[5] = x25; out1[6] = x27; out1[7] = x28; out1[8] = x29; out1[9] = x31; out1[10] = x33; out1[11] = x34; out1[12] = x35; out1[13] = x37; out1[14] = x39; out1[15] = x40; out1[16] = x41; out1[17] = x43; out1[18] = x45; out1[19] = x46; out1[20] = x47; out1[21] = x49; out1[22] = x51; out1[23] = x52; out1[24] = x53; out1[25] = x55; out1[26] = x57; out1[27] = x58; out1[28] = x59; out1[29] = x61; out1[30] = x63; out1[31] = x64; out1[32] = x65; out1[33] = x67; out1[34] = x69; out1[35] = x70; out1[36] = x71; out1[37] = x73; out1[38] = x75; out1[39] = x76; out1[40] = x77; out1[41] = x79; out1[42] = x81; out1[43] = x82; out1[44] = x83; out1[45] = x85; out1[46] = x87; out1[47] = x88; out1[48] = x89; out1[49] = x91; out1[50] = x93; out1[51] = x94; out1[52] = x95; out1[53] = x97; out1[54] = x99; out1[55] = x100; out1[56] = x101; out1[57] = x103; out1[58] = x105; out1[59] = x106; out1[60] = x107; out1[61] = x109; out1[62] = x111; out1[63] = x112; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes deserializes a field element NOT in the Montgomery domain from bytes in little-endian order. * Preconditions: * 0 ≤ bytes_eval arg1 < m * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * 0 ≤ eval out1 < m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes( uint32_t out1[16], const uint8_t arg1[64]) { uint32_t x1; uint32_t x2; uint32_t x3; uint8_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint8_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint8_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint8_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint8_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint8_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint8_t x28; uint32_t x29; uint32_t x30; uint32_t x31; uint8_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint8_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint8_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint8_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint8_t x48; uint32_t x49; uint32_t x50; uint32_t x51; uint8_t x52; uint32_t x53; uint32_t x54; uint32_t x55; uint8_t x56; uint32_t x57; uint32_t x58; uint32_t x59; uint8_t x60; uint32_t x61; uint32_t x62; uint32_t x63; uint8_t x64; uint32_t x65; uint32_t x66; uint32_t x67; uint32_t x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint32_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint32_t x78; uint32_t x79; uint32_t x80; uint32_t x81; uint32_t x82; uint32_t x83; uint32_t x84; uint32_t x85; uint32_t x86; uint32_t x87; uint32_t x88; uint32_t x89; uint32_t x90; uint32_t x91; uint32_t x92; uint32_t x93; uint32_t x94; uint32_t x95; uint32_t x96; uint32_t x97; uint32_t x98; uint32_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; uint32_t x104; uint32_t x105; uint32_t x106; uint32_t x107; uint32_t x108; uint32_t x109; uint32_t x110; uint32_t x111; uint32_t x112; x1 = ((uint32_t)(arg1[63]) << 24); x2 = ((uint32_t)(arg1[62]) << 16); x3 = ((uint32_t)(arg1[61]) << 8); x4 = (arg1[60]); x5 = ((uint32_t)(arg1[59]) << 24); x6 = ((uint32_t)(arg1[58]) << 16); x7 = ((uint32_t)(arg1[57]) << 8); x8 = (arg1[56]); x9 = ((uint32_t)(arg1[55]) << 24); x10 = ((uint32_t)(arg1[54]) << 16); x11 = ((uint32_t)(arg1[53]) << 8); x12 = (arg1[52]); x13 = ((uint32_t)(arg1[51]) << 24); x14 = ((uint32_t)(arg1[50]) << 16); x15 = ((uint32_t)(arg1[49]) << 8); x16 = (arg1[48]); x17 = ((uint32_t)(arg1[47]) << 24); x18 = ((uint32_t)(arg1[46]) << 16); x19 = ((uint32_t)(arg1[45]) << 8); x20 = (arg1[44]); x21 = ((uint32_t)(arg1[43]) << 24); x22 = ((uint32_t)(arg1[42]) << 16); x23 = ((uint32_t)(arg1[41]) << 8); x24 = (arg1[40]); x25 = ((uint32_t)(arg1[39]) << 24); x26 = ((uint32_t)(arg1[38]) << 16); x27 = ((uint32_t)(arg1[37]) << 8); x28 = (arg1[36]); x29 = ((uint32_t)(arg1[35]) << 24); x30 = ((uint32_t)(arg1[34]) << 16); x31 = ((uint32_t)(arg1[33]) << 8); x32 = (arg1[32]); x33 = ((uint32_t)(arg1[31]) << 24); x34 = ((uint32_t)(arg1[30]) << 16); x35 = ((uint32_t)(arg1[29]) << 8); x36 = (arg1[28]); x37 = ((uint32_t)(arg1[27]) << 24); x38 = ((uint32_t)(arg1[26]) << 16); x39 = ((uint32_t)(arg1[25]) << 8); x40 = (arg1[24]); x41 = ((uint32_t)(arg1[23]) << 24); x42 = ((uint32_t)(arg1[22]) << 16); x43 = ((uint32_t)(arg1[21]) << 8); x44 = (arg1[20]); x45 = ((uint32_t)(arg1[19]) << 24); x46 = ((uint32_t)(arg1[18]) << 16); x47 = ((uint32_t)(arg1[17]) << 8); x48 = (arg1[16]); x49 = ((uint32_t)(arg1[15]) << 24); x50 = ((uint32_t)(arg1[14]) << 16); x51 = ((uint32_t)(arg1[13]) << 8); x52 = (arg1[12]); x53 = ((uint32_t)(arg1[11]) << 24); x54 = ((uint32_t)(arg1[10]) << 16); x55 = ((uint32_t)(arg1[9]) << 8); x56 = (arg1[8]); x57 = ((uint32_t)(arg1[7]) << 24); x58 = ((uint32_t)(arg1[6]) << 16); x59 = ((uint32_t)(arg1[5]) << 8); x60 = (arg1[4]); x61 = ((uint32_t)(arg1[3]) << 24); x62 = ((uint32_t)(arg1[2]) << 16); x63 = ((uint32_t)(arg1[1]) << 8); x64 = (arg1[0]); x65 = (x63 + (uint32_t)x64); x66 = (x62 + x65); x67 = (x61 + x66); x68 = (x59 + (uint32_t)x60); x69 = (x58 + x68); x70 = (x57 + x69); x71 = (x55 + (uint32_t)x56); x72 = (x54 + x71); x73 = (x53 + x72); x74 = (x51 + (uint32_t)x52); x75 = (x50 + x74); x76 = (x49 + x75); x77 = (x47 + (uint32_t)x48); x78 = (x46 + x77); x79 = (x45 + x78); x80 = (x43 + (uint32_t)x44); x81 = (x42 + x80); x82 = (x41 + x81); x83 = (x39 + (uint32_t)x40); x84 = (x38 + x83); x85 = (x37 + x84); x86 = (x35 + (uint32_t)x36); x87 = (x34 + x86); x88 = (x33 + x87); x89 = (x31 + (uint32_t)x32); x90 = (x30 + x89); x91 = (x29 + x90); x92 = (x27 + (uint32_t)x28); x93 = (x26 + x92); x94 = (x25 + x93); x95 = (x23 + (uint32_t)x24); x96 = (x22 + x95); x97 = (x21 + x96); x98 = (x19 + (uint32_t)x20); x99 = (x18 + x98); x100 = (x17 + x99); x101 = (x15 + (uint32_t)x16); x102 = (x14 + x101); x103 = (x13 + x102); x104 = (x11 + (uint32_t)x12); x105 = (x10 + x104); x106 = (x9 + x105); x107 = (x7 + (uint32_t)x8); x108 = (x6 + x107); x109 = (x5 + x108); x110 = (x3 + (uint32_t)x4); x111 = (x2 + x110); x112 = (x1 + x111); out1[0] = x67; out1[1] = x70; out1[2] = x73; out1[3] = x76; out1[4] = x79; out1[5] = x82; out1[6] = x85; out1[7] = x88; out1[8] = x91; out1[9] = x94; out1[10] = x97; out1[11] = x100; out1[12] = x103; out1[13] = x106; out1[14] = x109; out1[15] = x112; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_tc26_gost_3410_2012_512_paramSetB/fe_inv.op3 * sliding window w=5 */ static void fiat_id_tc26_gost_3410_2012_512_paramSetB_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t13, t3; fiat_id_tc26_gost_3410_2012_512_paramSetB_square(acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t3, t1, acc); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t13, t3, acc); for (i = 0; i < 4; i++) fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t13, t13, acc); fiat_id_tc26_gost_3410_2012_512_paramSetB_square(acc, t1); for (i = 0; i < 505; i++) fiat_id_tc26_gost_3410_2012_512_paramSetB_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(acc, acc, t3); for (i = 0; i < 5; i++) fiat_id_tc26_gost_3410_2012_512_paramSetB_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(output, acc, t13); } /* curve coefficient constants */ static const limb_t const_one[16] = { UINT32_C(0xFFFFFF91), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0x7FFFFFFF)}; static const limb_t const_b[16] = { UINT32_C(0x18A75DD6), UINT32_C(0xDBE748C3), UINT32_C(0x9097BFC1), UINT32_C(0xC954A780), UINT32_C(0xE2D5A471), UINT32_C(0x6553CD27), UINT32_C(0x49435CF3), UINT32_C(0xB99B3260), UINT32_C(0x16D2C5E7), UINT32_C(0xE9EAC8A2), UINT32_C(0x02D0CC51), UINT32_C(0x260B45A1), UINT32_C(0x6C5BD56D), UINT32_C(0x8636181D), UINT32_C(0x2C5765BC), UINT32_C(0x638259A1)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[14][16] = { { {{UINT32_C(0xFFFFFEB3), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0xFFFFFFFF), UINT32_C(0x7FFFFFFF)}, {UINT32_C(0x2383127B), UINT32_C(0x9F34E17E), UINT32_C(0xCF48CEEA), UINT32_C(0x4C79D571), UINT32_C(0x494E1BED), UINT32_C(0xA33463BC), UINT32_C(0x3A5DA27F), UINT32_C(0x9D80747F), UINT32_C(0xC2F4174A), UINT32_C(0xDCBD09DD), UINT32_C(0x2147B2E0), UINT32_C(0xE8307A8C), UINT32_C(0xDBCF9AC9), UINT32_C(0xD1D3CCED), UINT32_C(0xE98DEFF1), UINT32_C(0x778FFEC2)}}, {{UINT32_C(0xB67DA584), UINT32_C(0xCE514E6B), UINT32_C(0xE19C2094), UINT32_C(0xEB51443B), UINT32_C(0x9B071A6E), UINT32_C(0xC8E8F54B), UINT32_C(0xBED2A243), UINT32_C(0x239C53FD), UINT32_C(0x2AE8E157), UINT32_C(0x67D47B7B), UINT32_C(0x5550826E), UINT32_C(0x046DE3B7), UINT32_C(0x17723575), UINT32_C(0x2F7DD21E), UINT32_C(0x11E8E247), UINT32_C(0x0E6EABDD)}, {UINT32_C(0x48600734), UINT32_C(0xF204F0D6), UINT32_C(0x343D6475), UINT32_C(0x04B3054C), UINT32_C(0xF7E6D181), UINT32_C(0x707BD9D8), UINT32_C(0x6B353E20), UINT32_C(0x535CEC32), UINT32_C(0x108C5FE7), UINT32_C(0xA185FA95), UINT32_C(0xB573367F), UINT32_C(0x7033EBFA), UINT32_C(0x46552D77), UINT32_C(0xEC54E36B), UINT32_C(0x729C9EBA), UINT32_C(0x235E6C1A)}}, {{UINT32_C(0x8B28C0DC), UINT32_C(0xECDCEE63), UINT32_C(0x36AE99A1), UINT32_C(0xD4E35B40), UINT32_C(0x464A3D2F), UINT32_C(0xDACC813D), UINT32_C(0xDBAF282E), UINT32_C(0x8D92802A), UINT32_C(0x7D8757F2), UINT32_C(0x652CFF9C), UINT32_C(0x7F5A8471), UINT32_C(0x2C1BCBD9), UINT32_C(0x16C3679A), UINT32_C(0x010192E2), UINT32_C(0x7529DB85), UINT32_C(0x56269496)}, {UINT32_C(0xD5F89B94), UINT32_C(0x7480BB90), UINT32_C(0x1E46EDE6), UINT32_C(0xE01FE3D8), UINT32_C(0x4E57E6F5), UINT32_C(0xC1843163), UINT32_C(0x91C2DF63), UINT32_C(0x5F8C6884), UINT32_C(0x5FA2DC4D), UINT32_C(0x42E01ED6), UINT32_C(0x8FF5A769), UINT32_C(0x629C95CD), UINT32_C(0x6EAB4807), UINT32_C(0x0E8C1637), UINT32_C(0x0ABD9BB6), UINT32_C(0x1C41FB66)}}, {{UINT32_C(0x6ED32E5F), UINT32_C(0x6B509B4F), UINT32_C(0x67C95F17), UINT32_C(0xC62AFB25), UINT32_C(0x5CE4762A), UINT32_C(0x352D4B7A), UINT32_C(0x9AFA6ACC), UINT32_C(0x33135815), UINT32_C(0x06D550B2), UINT32_C(0x168B5654), UINT32_C(0xB528DF40), UINT32_C(0x254DCCE0), UINT32_C(0x222C9415), UINT32_C(0x422ADB9A), UINT32_C(0x3D2F923E), UINT32_C(0x6FC0F2CE)}, {UINT32_C(0x59359CE7), UINT32_C(0x3CC08723), UINT32_C(0x91A4DC50), UINT32_C(0x1779C0CD), UINT32_C(0xC8B9922D), UINT32_C(0x1205971E), UINT32_C(0xC13192A7), UINT32_C(0x199F8198), UINT32_C(0x492DB7AA), UINT32_C(0xA43FBDBF), UINT32_C(0xE82BEEC8), UINT32_C(0x9E173427), UINT32_C(0x3850D54E), UINT32_C(0x1E901499), UINT32_C(0xF761EC57), UINT32_C(0x603774B7)}}, {{UINT32_C(0x2BDEF3A9), UINT32_C(0x23B79C80), UINT32_C(0xD19A5F2C), UINT32_C(0x2217119A), UINT32_C(0x56B09A50), UINT32_C(0x49194CE1), UINT32_C(0x21329201), UINT32_C(0xEE7D88A2), UINT32_C(0xD0BBED28), UINT32_C(0x1C45A959), UINT32_C(0x780FA0D1), UINT32_C(0x1BA5DAD5), UINT32_C(0x6959608D), UINT32_C(0x17D7C794), UINT32_C(0x7E4E9B1F), UINT32_C(0x7DA39423)}, {UINT32_C(0x47508CA7), UINT32_C(0x435F5C55), UINT32_C(0x516AD549), UINT32_C(0x84583489), UINT32_C(0x02BAE814), UINT32_C(0x09DDC49D), UINT32_C(0x260B4D97), UINT32_C(0xCD566B6E), UINT32_C(0xE38DF931), UINT32_C(0x8C11211E), UINT32_C(0x05D473F8), UINT32_C(0x7D5FC8D0), UINT32_C(0x865C76F2), UINT32_C(0x48C9D7CD), UINT32_C(0x2A6D5599), UINT32_C(0x2D451737)}}, {{UINT32_C(0x29C4EACD), UINT32_C(0x5F8B137B), UINT32_C(0x99075883), UINT32_C(0x5CB8477C), UINT32_C(0x50A641C4), UINT32_C(0xBC6736A7), UINT32_C(0x81B0881D), UINT32_C(0xF96B6D0E), UINT32_C(0xE561FC8F), UINT32_C(0x8E9C2612), UINT32_C(0x284E20B7), UINT32_C(0x8F742744), UINT32_C(0xD4DD11EE), UINT32_C(0xBC8C5BE7), UINT32_C(0x82B2EF56), UINT32_C(0x414709E7)}, {UINT32_C(0x6DF555F2), UINT32_C(0xE4D6BC0A), UINT32_C(0x38EE529F), UINT32_C(0x916E0A80), UINT32_C(0x3414117E), UINT32_C(0xBBE31273), UINT32_C(0x3154234A), UINT32_C(0x2D7BF9CD), UINT32_C(0x1852E8EE), UINT32_C(0x79B9CFA9), UINT32_C(0x1BD9C07A), UINT32_C(0x62653E8C), UINT32_C(0x7C7AFF7E), UINT32_C(0x35FE04F6), UINT32_C(0xE70AE283), UINT32_C(0x746C1E87)}}, {{UINT32_C(0x98366BA5), UINT32_C(0x1F5857A1), UINT32_C(0x414DECAD), UINT32_C(0x96781D84), UINT32_C(0x66CF983E), UINT32_C(0xB39DD888), UINT32_C(0xCAC19B5F), UINT32_C(0xDE1050AC), UINT32_C(0x8B2AA408), UINT32_C(0x5A58BFA8), UINT32_C(0x3C440DED), UINT32_C(0xA0A6E961), UINT32_C(0xC67D0412), UINT32_C(0xBAAEC3DF), UINT32_C(0x6759674E), UINT32_C(0x0E37C0E0)}, {UINT32_C(0x63880D22), UINT32_C(0x1E623E75), UINT32_C(0xF0ACB4B6), UINT32_C(0x3BE27CF8), UINT32_C(0x4F69642E), UINT32_C(0x5E6ABD4F), UINT32_C(0x13CADA08), UINT32_C(0x3E92D34D), UINT32_C(0x0127C48B), UINT32_C(0x56C64429), UINT32_C(0x7F3C5746), UINT32_C(0x620FC35B), UINT32_C(0xEF94C612), UINT32_C(0x6870F3DE), UINT32_C(0x2606F4A4), UINT32_C(0x219C5A5A)}}, {{UINT32_C(0x1625FE00), UINT32_C(0x0AD4ACAA), UINT32_C(0x9BEE03FF), UINT32_C(0xD7DEE6BB), UINT32_C(0x2E594A2C), UINT32_C(0x72A27D3B), UINT32_C(0xAAB1C0E5), UINT32_C(0x471EFD78), UINT32_C(0x37857650), UINT32_C(0xBDE8465E), UINT32_C(0xBD9F5885), UINT32_C(0x1CA721C2), UINT32_C(0x6073DCEF), UINT32_C(0x361E6F8A), UINT32_C(0x0A7CF8E9), UINT32_C(0x2BA435E3)}, {UINT32_C(0x1C6893FA), UINT32_C(0xC7B032BD), UINT32_C(0x09D4E403), UINT32_C(0xFA9C30E8), UINT32_C(0x20293A47), UINT32_C(0xB03AF5BD), UINT32_C(0xE008F02D), UINT32_C(0x21EBC61B), UINT32_C(0x73D59E63), UINT32_C(0x0A50151D), UINT32_C(0x78D260DB), UINT32_C(0x18D1A3F6), UINT32_C(0x7D79BA96), UINT32_C(0xE8E3C3F4), UINT32_C(0x75A06F31), UINT32_C(0x51FAED37)}}, {{UINT32_C(0xE8BCBC8B), UINT32_C(0xECD4B979), UINT32_C(0xF803878F), UINT32_C(0x7529023C), UINT32_C(0x9A8B8850), UINT32_C(0xAD84E184), UINT32_C(0xCCF88146), UINT32_C(0xF1E004F8), UINT32_C(0xC194F3F5), UINT32_C(0x27406240), UINT32_C(0xE366D6B0), UINT32_C(0x175AB72F), UINT32_C(0x13BBCC48), UINT32_C(0x1A44BC85), UINT32_C(0x12F138C6), UINT32_C(0x7930F869)}, {UINT32_C(0x18E4DCD0), UINT32_C(0x1943A865), UINT32_C(0xBCE9F068), UINT32_C(0x747F6C7C), UINT32_C(0x54D067F7), UINT32_C(0x5A306F64), UINT32_C(0xEDB2062A), UINT32_C(0xD1A8EF54), UINT32_C(0xA42F21B3), UINT32_C(0x60E6ACAE), UINT32_C(0x3B2D2C26), UINT32_C(0x9218654F), UINT32_C(0xE8B2778E), UINT32_C(0xEDE14471), UINT32_C(0x8CEE6931), UINT32_C(0x7B868D31)}}, {{UINT32_C(0xB368FF42), UINT32_C(0x0957A4F6), UINT32_C(0x004C85FC), UINT32_C(0xF9F134FD), UINT32_C(0x19017E1D), UINT32_C(0x3A6B8A47), UINT32_C(0x7D50A61E), UINT32_C(0x673A45EA), UINT32_C(0x4E18EE86), UINT32_C(0x4A26DA49), UINT32_C(0xDF0C17A6), UINT32_C(0xAF7DD8FD), UINT32_C(0x7E7277C3), UINT32_C(0xD24BF75A), UINT32_C(0xBF72613C), UINT32_C(0x5EF832A1)}, {UINT32_C(0x3300EE10), UINT32_C(0x2E9C8E08), UINT32_C(0x8763AB4E), UINT32_C(0xCCA04C06), UINT32_C(0xA6B7D854), UINT32_C(0x5F8DBC28), UINT32_C(0x4025C222), UINT32_C(0xC6CD3DE8), UINT32_C(0x0DFE44A5), UINT32_C(0xEFD30CC1), UINT32_C(0x1D7BE70F), UINT32_C(0xC2CD4442), UINT32_C(0x45CCED5D), UINT32_C(0x06F8D46B), UINT32_C(0x2EF0C653), UINT32_C(0x2D74D0D6)}}, {{UINT32_C(0xB26E78B9), UINT32_C(0x151B24DF), UINT32_C(0x0BB1ED51), UINT32_C(0xC57E8156), UINT32_C(0x9C13974B), UINT32_C(0x57BAADA5), UINT32_C(0x20CC5AF3), UINT32_C(0x98336FB8), UINT32_C(0x0C790E28), UINT32_C(0x1DA5BD29), UINT32_C(0x8C6E2539), UINT32_C(0x877AA935), UINT32_C(0x09AEE9D2), UINT32_C(0x1673F151), UINT32_C(0x0AEE66D8), UINT32_C(0x519FB4EE)}, {UINT32_C(0x6AA8D898), UINT32_C(0x2B798F20), UINT32_C(0xBA86008C), UINT32_C(0xC3DFB5EC), UINT32_C(0x343A8CBF), UINT32_C(0xF780333B), UINT32_C(0xB6D2056E), UINT32_C(0xFF22F62A), UINT32_C(0x182EF2A6), UINT32_C(0x97F3006E), UINT32_C(0x3064AC5E), UINT32_C(0x3C5ADB49), UINT32_C(0xC9D64C70), UINT32_C(0x89C8C032), UINT32_C(0x243DB254), UINT32_C(0x1A9ABDED)}}, {{UINT32_C(0x11A375BF), UINT32_C(0xA84B6362), UINT32_C(0x620A2252), UINT32_C(0x598270A6), UINT32_C(0x13A0EFF8), UINT32_C(0xB183EC9D), UINT32_C(0xB755AD35), UINT32_C(0x2F7BEBD4), UINT32_C(0xC53EFD69), UINT32_C(0xEBA848ED), UINT32_C(0x6FAEC1B6), UINT32_C(0x12059A24), UINT32_C(0x7A290D7B), UINT32_C(0xBA6340A4), UINT32_C(0x63DF6036), UINT32_C(0x22849432)}, {UINT32_C(0x2AA27F19), UINT32_C(0x4702BCB6), UINT32_C(0x9B6D66D6), UINT32_C(0x8DDE4920), UINT32_C(0xBDC2DC5D), UINT32_C(0xC3D4A80B), UINT32_C(0x691A8BD4), UINT32_C(0xE51AC2D6), UINT32_C(0x8F4211FC), UINT32_C(0x79485351), UINT32_C(0xA9D14C71), UINT32_C(0x163CD093), UINT32_C(0x89A0E099), UINT32_C(0x4B38A2B1), UINT32_C(0x9E98054E), UINT32_C(0x16673245)}}, {{UINT32_C(0x31FBB6B8), UINT32_C(0xFB441071), UINT32_C(0x42AD947A), UINT32_C(0x79A8775C), UINT32_C(0xE72D0384), UINT32_C(0xA8C9E486), UINT32_C(0x840A1DDB), UINT32_C(0x9AF7F292), UINT32_C(0x2DB1B47D), UINT32_C(0x07E9DB52), UINT32_C(0xBA81EBAD), UINT32_C(0x0698669A), UINT32_C(0x2DC06B76), UINT32_C(0xA48E2F03), UINT32_C(0x79B9161A), UINT32_C(0x1B060248)}, {UINT32_C(0x13C53A83), UINT32_C(0xD47BADE1), UINT32_C(0x68727195), UINT32_C(0x9C1F4DD0), UINT32_C(0x1293376B), UINT32_C(0x14A2FC60), UINT32_C(0xDC206930), UINT32_C(0x8A63967E), UINT32_C(0x98E46F8B), UINT32_C(0x5D9DFE38), UINT32_C(0x85CF7B41), UINT32_C(0x9199E193), UINT32_C(0x113D1605), UINT32_C(0x3E8DF54D), UINT32_C(0x303789E1), UINT32_C(0x14D3C202)}}, {{UINT32_C(0x626710EB), UINT32_C(0x11A727D4), UINT32_C(0x3EB613F1), UINT32_C(0x38481EC1), UINT32_C(0x5625E925), UINT32_C(0xB824F831), UINT32_C(0xD03D016B), UINT32_C(0x3FEFE4F7), UINT32_C(0xBF1FE74C), UINT32_C(0xCE196037), UINT32_C(0xE956E95F), UINT32_C(0xE5518F38), UINT32_C(0x23E1AE46), UINT32_C(0x84E24D45), UINT32_C(0x3E0F63A1), UINT32_C(0x29D1DB5A)}, {UINT32_C(0x4FAE4F08), UINT32_C(0x380BF787), UINT32_C(0xED8B6A7C), UINT32_C(0xB4E5D477), UINT32_C(0xDC035A0D), UINT32_C(0xABA43C3A), UINT32_C(0x25134A5C), UINT32_C(0x7B880508), UINT32_C(0x65D5A8CF), UINT32_C(0x2DB45548), UINT32_C(0x7EDE5F4D), UINT32_C(0x776B78B6), UINT32_C(0x79297E21), UINT32_C(0x4CB58481), UINT32_C(0x8BE6DBD4), UINT32_C(0x1E191105)}}, {{UINT32_C(0x3E98C38E), UINT32_C(0x4D105437), UINT32_C(0xB2E8BE84), UINT32_C(0xAE4B330C), UINT32_C(0xE16CA9CD), UINT32_C(0xB1A22A3D), UINT32_C(0x1DAF0B8D), UINT32_C(0xE78B43CB), UINT32_C(0x5CB2B278), UINT32_C(0x509D9C34), UINT32_C(0x29F9FFFD), UINT32_C(0x9A1342B3), UINT32_C(0x73A20A3F), UINT32_C(0x8159F452), UINT32_C(0xCA064DAD), UINT32_C(0x35043A47)}, {UINT32_C(0x040E7978), UINT32_C(0xE000710E), UINT32_C(0xFAF394BB), UINT32_C(0x2A1DA585), UINT32_C(0x51524252), UINT32_C(0xF9423EE6), UINT32_C(0x181ACF8B), UINT32_C(0xD95CE5EF), UINT32_C(0x613B5947), UINT32_C(0x0097A9B5), UINT32_C(0xAB442CD0), UINT32_C(0x6F088D14), UINT32_C(0xCAE96A8E), UINT32_C(0x4E225BAC), UINT32_C(0xEE82591B), UINT32_C(0x753B77B9)}}, {{UINT32_C(0x43969A20), UINT32_C(0x41D5FEEC), UINT32_C(0x5B57402C), UINT32_C(0xC7E1DFA2), UINT32_C(0x9C098C51), UINT32_C(0xC43BFFDD), UINT32_C(0x2954A8F5), UINT32_C(0xAC5E7394), UINT32_C(0xB2E1308E), UINT32_C(0xD420A646), UINT32_C(0xD7CAE952), UINT32_C(0x13476158), UINT32_C(0xE7B188C1), UINT32_C(0x6A48FA12), UINT32_C(0xEC53C308), UINT32_C(0x1CF2DE71)}, {UINT32_C(0x653FB0FE), UINT32_C(0xAA44CF54), UINT32_C(0x450317F4), UINT32_C(0x4E05A63D), UINT32_C(0xE3AA21DA), UINT32_C(0x8B59BAA6), UINT32_C(0x11F7840D), UINT32_C(0xFA3A1CDA), UINT32_C(0x39DB678D), UINT32_C(0x220F39B6), UINT32_C(0x759CDCA0), UINT32_C(0x6D497E96), UINT32_C(0x69FA5114), UINT32_C(0x0ADF3F29), UINT32_C(0x15349213), UINT32_C(0x7836181D)}}, }, { {{UINT32_C(0x5D6F9B3E), UINT32_C(0x1F11E63C), UINT32_C(0xA403A073), UINT32_C(0x4569A6DA), UINT32_C(0xFE26A8BD), UINT32_C(0x1B585729), UINT32_C(0x5F41FAA7), UINT32_C(0x2185B4E4), UINT32_C(0x6E99E6E1), UINT32_C(0x3887350C), UINT32_C(0x99CFFB22), UINT32_C(0x92F63CA5), UINT32_C(0xA52F6381), UINT32_C(0x94E93270), UINT32_C(0xD0A380FC), UINT32_C(0x489EE2DF)}, {UINT32_C(0xB988D87D), UINT32_C(0x45F7836A), UINT32_C(0x337BEFA3), UINT32_C(0xA44DCA0C), UINT32_C(0x55657370), UINT32_C(0x6F422436), UINT32_C(0xC16D6547), UINT32_C(0xE5299B33), UINT32_C(0x1E5AAB47), UINT32_C(0x74A82B2F), UINT32_C(0xCFA92CDB), UINT32_C(0x795A79B9), UINT32_C(0x4981A557), UINT32_C(0x2EE0F1BE), UINT32_C(0xF5637DEF), UINT32_C(0x3F7A2AC5)}}, {{UINT32_C(0x3A0FEA31), UINT32_C(0x78CF079D), UINT32_C(0x6F9069B7), UINT32_C(0xF5A54C8C), UINT32_C(0xD8C02F14), UINT32_C(0x24C79868), UINT32_C(0xF36B384F), UINT32_C(0x43DDB340), UINT32_C(0xAD874F73), UINT32_C(0x8AF55E5E), UINT32_C(0x5856DB97), UINT32_C(0x29E81ACA), UINT32_C(0x702DF822), UINT32_C(0xB23D0E00), UINT32_C(0x3D029F4B), UINT32_C(0x58EF4F99)}, {UINT32_C(0xF26CA389), UINT32_C(0x0B28FA62), UINT32_C(0xECFF83DF), UINT32_C(0xD3288224), UINT32_C(0x3FD82EB2), UINT32_C(0x5D8F2319), UINT32_C(0x3D1CB29F), UINT32_C(0x68E3D3C5), UINT32_C(0xEC26BE41), UINT32_C(0x8DF1A753), UINT32_C(0xC2C7412F), UINT32_C(0xB2074622), UINT32_C(0x8D5018F7), UINT32_C(0x3A8D3504), UINT32_C(0xFD309F9B), UINT32_C(0x0B0D2D49)}}, {{UINT32_C(0x9319D09A), UINT32_C(0xE997DD06), UINT32_C(0xDA1726DB), UINT32_C(0xF8A2189F), UINT32_C(0x266E7222), UINT32_C(0x3AD35868), UINT32_C(0x0F42E1A2), UINT32_C(0x0116610C), UINT32_C(0xE93CC223), UINT32_C(0xF23385AC), UINT32_C(0x8D221503), UINT32_C(0xE06DE4F6), UINT32_C(0xA36EE6D9), UINT32_C(0x0C963EF8), UINT32_C(0xC297BB1A), UINT32_C(0x13B707C8)}, {UINT32_C(0x15B7BEF0), UINT32_C(0x10675424), UINT32_C(0xAB4ECC7E), UINT32_C(0x9C064518), UINT32_C(0x83247132), UINT32_C(0x324CDF0C), UINT32_C(0x4CE15206), UINT32_C(0xA9A41620), UINT32_C(0xF0EC82B3), UINT32_C(0x0641C526), UINT32_C(0xF165B832), UINT32_C(0xD952D947), UINT32_C(0x56C3BC3C), UINT32_C(0xF6E4EF5B), UINT32_C(0xEF1F3728), UINT32_C(0x528479A6)}}, {{UINT32_C(0xA64A2C9B), UINT32_C(0xF84BE5DC), UINT32_C(0xB92B2A9D), UINT32_C(0xC20AD405), UINT32_C(0x829BA060), UINT32_C(0xC965A45A), UINT32_C(0xD9F58ABF), UINT32_C(0x5041E47F), UINT32_C(0x9E6AEB4E), UINT32_C(0x360FB8E2), UINT32_C(0xB995DDB3), UINT32_C(0xDC3B93DE), UINT32_C(0xFA2C89E5), UINT32_C(0x7FB0501F), UINT32_C(0x9C9B058F), UINT32_C(0x1883F017)}, {UINT32_C(0xABF2EABC), UINT32_C(0x9FC09649), UINT32_C(0xD2ADFBBE), UINT32_C(0x051F9AA2), UINT32_C(0xF2471B9C), UINT32_C(0x000B4689), UINT32_C(0x23DB9E67), UINT32_C(0x2C21C96A), UINT32_C(0xD9D7C226), UINT32_C(0x840F2A03), UINT32_C(0x2E660925), UINT32_C(0xE728B070), UINT32_C(0xA8258042), UINT32_C(0x1ED21D55), UINT32_C(0x8DA89F47), UINT32_C(0x20DE972E)}}, {{UINT32_C(0xD3DE31B6), UINT32_C(0x3003BD09), UINT32_C(0x83781375), UINT32_C(0x6883729E), UINT32_C(0xA7E281ED), UINT32_C(0x882F56AE), UINT32_C(0x99873D07), UINT32_C(0x936861D3), UINT32_C(0xE329D05A), UINT32_C(0x68DB9DF0), UINT32_C(0xB6ED5B00), UINT32_C(0xEFD44FB8), UINT32_C(0xDE7AFD7D), UINT32_C(0x095DF018), UINT32_C(0x31FEE4D2), UINT32_C(0x11DD7E74)}, {UINT32_C(0x052E3502), UINT32_C(0x59256A82), UINT32_C(0x967C4F10), UINT32_C(0xB12A68CD), UINT32_C(0xF921E058), UINT32_C(0xF56E1410), UINT32_C(0xD9721852), UINT32_C(0xF7E2CED1), UINT32_C(0xDE8CBE99), UINT32_C(0xE62F6371), UINT32_C(0xBDCF5383), UINT32_C(0x51BB6086), UINT32_C(0x05F1C9EF), UINT32_C(0xDE865C7F), UINT32_C(0x59C9DB82), UINT32_C(0x2F4D471E)}}, {{UINT32_C(0x60A83A69), UINT32_C(0x5238E20B), UINT32_C(0x241F9EE4), UINT32_C(0xE8ED22D8), UINT32_C(0xC44B4D6B), UINT32_C(0x94609C9F), UINT32_C(0x738B047F), UINT32_C(0x8CB4F484), UINT32_C(0x3A311894), UINT32_C(0x1DA03776), UINT32_C(0xFFEDBEDE), UINT32_C(0x3B2301D7), UINT32_C(0xC28BFA7B), UINT32_C(0xBE0D9731), UINT32_C(0x8E73852C), UINT32_C(0x03E672B7)}, {UINT32_C(0xAA676638), UINT32_C(0xA1A4A97D), UINT32_C(0x473A0CAB), UINT32_C(0x1CC2C685), UINT32_C(0x2E95739F), UINT32_C(0x31FE1138), UINT32_C(0x090C8025), UINT32_C(0x090AEB0D), UINT32_C(0x645B652E), UINT32_C(0x9F0A7073), UINT32_C(0xE83798BD), UINT32_C(0xC03ABF85), UINT32_C(0x48F4C4C3), UINT32_C(0x71FBC2D7), UINT32_C(0x0D38C5BA), UINT32_C(0x56AE0E1E)}}, {{UINT32_C(0xF2C2C6C1), UINT32_C(0xDAFDB67C), UINT32_C(0xCF3D93C2), UINT32_C(0xFD6B132E), UINT32_C(0xAE365613), UINT32_C(0xA6FD14BD), UINT32_C(0x2B04AD13), UINT32_C(0x0B5A2A4A), UINT32_C(0x36B30288), UINT32_C(0x2AA0470A), UINT32_C(0x2A2BB583), UINT32_C(0xBC984938), UINT32_C(0x2DE94268), UINT32_C(0xC0520099), UINT32_C(0x49E1A2C3), UINT32_C(0x2CD5FBBB)}, {UINT32_C(0xAAD935D9), UINT32_C(0x082C8F94), UINT32_C(0x51A9454D), UINT32_C(0x20AECE5C), UINT32_C(0x19E2401F), UINT32_C(0x5BE24C7E), UINT32_C(0xA327A3BB), UINT32_C(0x7BECBAF1), UINT32_C(0xB6300E64), UINT32_C(0x39E76F20), UINT32_C(0x9CBC4DCE), UINT32_C(0x5D151BA7), UINT32_C(0xB5D04C2A), UINT32_C(0x07726284), UINT32_C(0xB721A54D), UINT32_C(0x4D8BD241)}}, {{UINT32_C(0x9BB85232), UINT32_C(0xD28B4A8E), UINT32_C(0xCAD53584), UINT32_C(0x4F965F03), UINT32_C(0xDD1B0F12), UINT32_C(0xDAE3617B), UINT32_C(0x6777B034), UINT32_C(0xDB8660B3), UINT32_C(0x5F952B6A), UINT32_C(0xC67184DD), UINT32_C(0xCE065AD2), UINT32_C(0x0ADCC669), UINT32_C(0x77CE4665), UINT32_C(0x1FC9CB46), UINT32_C(0x2234474A), UINT32_C(0x0A01B64D)}, {UINT32_C(0x1D915F94), UINT32_C(0x0A749E82), UINT32_C(0x425F6ECA), UINT32_C(0xF0D212C9), UINT32_C(0x1281CD10), UINT32_C(0x0C23D014), UINT32_C(0x29DB5FC8), UINT32_C(0x0C933FD4), UINT32_C(0xBA5D8406), UINT32_C(0x80DDA2EF), UINT32_C(0x338183C4), UINT32_C(0x8C1402D5), UINT32_C(0xD4B5A7F9), UINT32_C(0x6E06C3E2), UINT32_C(0x8506CA5C), UINT32_C(0x64E3E1AB)}}, {{UINT32_C(0xC94EA8D3), UINT32_C(0xAC11D879), UINT32_C(0x1F28B33F), UINT32_C(0xDD8B6BA3), UINT32_C(0xAEEAD88D), UINT32_C(0x647E69AD), UINT32_C(0x3933567E), UINT32_C(0xB49B31E1), UINT32_C(0xEE7A3136), UINT32_C(0xBB12FE39), UINT32_C(0xC80837A7), UINT32_C(0x28FF74A3), UINT32_C(0xB75677A8), UINT32_C(0x0A932C81), UINT32_C(0xC29F7F54), UINT32_C(0x53D93D35)}, {UINT32_C(0x3AC6D6AE), UINT32_C(0x28497194), UINT32_C(0x02D7F721), UINT32_C(0x220B50C7), UINT32_C(0xC1FC3346), UINT32_C(0xDA33488C), UINT32_C(0xF9ED4655), UINT32_C(0xDD86F1EC), UINT32_C(0x632DB517), UINT32_C(0xAC1853B2), UINT32_C(0x6F0C3545), UINT32_C(0x3736EA46), UINT32_C(0x2D45B919), UINT32_C(0x3D92A778), UINT32_C(0x3D09DB84), UINT32_C(0x5D9F5674)}}, {{UINT32_C(0x9AF99589), UINT32_C(0x00D30167), UINT32_C(0xC5B73D12), UINT32_C(0x0B5213F3), UINT32_C(0x39E67DBF), UINT32_C(0x8A5A80AD), UINT32_C(0xF837F8F4), UINT32_C(0xE2C58969), UINT32_C(0xD4EE1D6C), UINT32_C(0x9DDF8923), UINT32_C(0x33DF50BB), UINT32_C(0x1AE3E0AF), UINT32_C(0x4E518813), UINT32_C(0x7FBAA73B), UINT32_C(0x5F7BB71D), UINT32_C(0x1CE6C9B6)}, {UINT32_C(0x66EB4A4E), UINT32_C(0xB12B057D), UINT32_C(0x382599E5), UINT32_C(0x1C88E248), UINT32_C(0x4E5081A6), UINT32_C(0x5384C3E8), UINT32_C(0x9E4ABC53), UINT32_C(0xB7992A1C), UINT32_C(0x044BF086), UINT32_C(0xC0582520), UINT32_C(0xA7DB6B58), UINT32_C(0xE14418EB), UINT32_C(0xC31464E1), UINT32_C(0x312673AD), UINT32_C(0x5FEAD6E3), UINT32_C(0x27DEAEFF)}}, {{UINT32_C(0xADE2EA17), UINT32_C(0x55C37C50), UINT32_C(0x4F0C5622), UINT32_C(0x1E159654), UINT32_C(0xF2BD8529), UINT32_C(0x6C96793C), UINT32_C(0x5AF8E077), UINT32_C(0x2B562419), UINT32_C(0x52A39000), UINT32_C(0x47F6A019), UINT32_C(0x163EFA85), UINT32_C(0xC364F4D4), UINT32_C(0x58BE9780), UINT32_C(0xD3116C33), UINT32_C(0x9F098FF2), UINT32_C(0x4DBED741)}, {UINT32_C(0x486D49D8), UINT32_C(0xB0DD4831), UINT32_C(0x75913B1C), UINT32_C(0x84A0C549), UINT32_C(0x3E2FA892), UINT32_C(0xB4A79326), UINT32_C(0xF8E1FCD2), UINT32_C(0x9E24FB33), UINT32_C(0xBB163DE8), UINT32_C(0xE9E35346), UINT32_C(0x59EA0DF0), UINT32_C(0x04B20FA1), UINT32_C(0xB8742A03), UINT32_C(0xB4D02BC4), UINT32_C(0x6C2841D9), UINT32_C(0x081FA037)}}, {{UINT32_C(0xFBA142D2), UINT32_C(0x514F4ACB), UINT32_C(0x94E5F474), UINT32_C(0x996B6E03), UINT32_C(0xCE24CA53), UINT32_C(0x5223E730), UINT32_C(0x4F5B06A0), UINT32_C(0x527581EA), UINT32_C(0x6A33B429), UINT32_C(0x31E6DD1A), UINT32_C(0xF6375ACD), UINT32_C(0x93A4E1C1), UINT32_C(0x949ED4F7), UINT32_C(0x6C726FF3), UINT32_C(0xF8F882F8), UINT32_C(0x4E416E72)}, {UINT32_C(0x2FD16999), UINT32_C(0x26FEC864), UINT32_C(0xABA0E3A7), UINT32_C(0x41DF4A57), UINT32_C(0xB4FAF8AC), UINT32_C(0x15E54D3F), UINT32_C(0x6F3F282A), UINT32_C(0xE4318BDC), UINT32_C(0xF014698B), UINT32_C(0x07C320CD), UINT32_C(0x3468CBCE), UINT32_C(0x71B73830), UINT32_C(0xD640CFD9), UINT32_C(0x1FD1AF59), UINT32_C(0xD34059EF), UINT32_C(0x0CF151AE)}}, {{UINT32_C(0xA2B3DF22), UINT32_C(0xB7107CE7), UINT32_C(0x90B45D70), UINT32_C(0xC1A4E08B), UINT32_C(0x5E20257F), UINT32_C(0xC86AFB66), UINT32_C(0x11CE1970), UINT32_C(0xDD33CC96), UINT32_C(0x5F20F903), UINT32_C(0x44C20C48), UINT32_C(0x936A4522), UINT32_C(0x87FECE7F), UINT32_C(0x42105DEA), UINT32_C(0x867932E9), UINT32_C(0x47E2F4AB), UINT32_C(0x31AEE1F5)}, {UINT32_C(0x55B1D8A3), UINT32_C(0x4CE020DF), UINT32_C(0x9B33E4D6), UINT32_C(0x5841BB8C), UINT32_C(0x07E5C052), UINT32_C(0x99C6EF84), UINT32_C(0xBB139F7B), UINT32_C(0x0F6F0DEF), UINT32_C(0x366377C5), UINT32_C(0x5E608798), UINT32_C(0x101AFF93), UINT32_C(0xDE403CF3), UINT32_C(0x4B69DBFC), UINT32_C(0x164B26D1), UINT32_C(0x46229B9E), UINT32_C(0x190A8766)}}, {{UINT32_C(0x85A61975), UINT32_C(0xAC7B1FA1), UINT32_C(0x0A3C0E98), UINT32_C(0x975ACE54), UINT32_C(0x173A29D7), UINT32_C(0xB80D922D), UINT32_C(0x955E0187), UINT32_C(0x71AA4F0C), UINT32_C(0x3556BA4D), UINT32_C(0xDB3716B9), UINT32_C(0x248C6ECE), UINT32_C(0x81E375E0), UINT32_C(0x6AFD16A4), UINT32_C(0x4CCE9787), UINT32_C(0x03564374), UINT32_C(0x67A717E8)}, {UINT32_C(0xE94E08C5), UINT32_C(0xE0FD3F7D), UINT32_C(0x71CA98AD), UINT32_C(0xDA2A5872), UINT32_C(0xBA15DEF3), UINT32_C(0x34A8EAD7), UINT32_C(0xC8EE8AC0), UINT32_C(0xD83A9987), UINT32_C(0xD9CE22C6), UINT32_C(0x64167A82), UINT32_C(0xE859A064), UINT32_C(0x7EE988ED), UINT32_C(0x603E188F), UINT32_C(0xD8B9D231), UINT32_C(0x0248F567), UINT32_C(0x40C99266)}}, {{UINT32_C(0x387928A0), UINT32_C(0x4059BE67), UINT32_C(0x1412407D), UINT32_C(0x5063C31E), UINT32_C(0xC37FB4AD), UINT32_C(0x78ABE79B), UINT32_C(0x0DF5F4D6), UINT32_C(0xA9A4E76A), UINT32_C(0xF0C3C9C8), UINT32_C(0x1F4CCCFC), UINT32_C(0xBB2D774F), UINT32_C(0x44A6D446), UINT32_C(0x4991F3D4), UINT32_C(0x1B77494E), UINT32_C(0xC5908739), UINT32_C(0x41F3A74C)}, {UINT32_C(0xC6B26A88), UINT32_C(0xB371AB6C), UINT32_C(0x454963FE), UINT32_C(0x01E7AD15), UINT32_C(0x43898DC2), UINT32_C(0x12A6652C), UINT32_C(0x1EE1BBD9), UINT32_C(0xC9CFD8BA), UINT32_C(0xC5437711), UINT32_C(0x22037206), UINT32_C(0x062E81FD), UINT32_C(0x327F948D), UINT32_C(0x9C87B698), UINT32_C(0xA2FF4F46), UINT32_C(0x4EB0808E), UINT32_C(0x1E83A7F9)}}, {{UINT32_C(0xB80F91DF), UINT32_C(0xE2F16272), UINT32_C(0xB186EBD1), UINT32_C(0xA0265684), UINT32_C(0x2E7D6A85), UINT32_C(0x207DAD69), UINT32_C(0xF27F03D4), UINT32_C(0xEFABE500), UINT32_C(0x0244072F), UINT32_C(0xEDD0F81D), UINT32_C(0x944AEDEA), UINT32_C(0x4CA26C63), UINT32_C(0xE874F15F), UINT32_C(0xD8D01D46), UINT32_C(0x5A1130AE), UINT32_C(0x73E39EED)}, {UINT32_C(0x0E5EC45F), UINT32_C(0xED9953FA), UINT32_C(0xB4D672DA), UINT32_C(0x0F62DDD4), UINT32_C(0x89507053), UINT32_C(0x5115FE6F), UINT32_C(0x8354B66C), UINT32_C(0x58968A29), UINT32_C(0x72ADF8E8), UINT32_C(0xB37024D5), UINT32_C(0x4D98186B), UINT32_C(0xD7EC1D4A), UINT32_C(0x7F418AC8), UINT32_C(0xB5B41AD6), UINT32_C(0x68B72616), UINT32_C(0x2C0959C5)}}, }, { {{UINT32_C(0x99EF1F4E), UINT32_C(0x1DD33DD5), UINT32_C(0x3CB93CF3), UINT32_C(0x2F2951AF), UINT32_C(0x98F20535), UINT32_C(0x7BB75D57), UINT32_C(0xBF95DDDE), UINT32_C(0x64C36788), UINT32_C(0x5E211976), UINT32_C(0x74B787C9), UINT32_C(0xBE8D9E4F), UINT32_C(0xB464F818), UINT32_C(0x91BEB188), UINT32_C(0x2631F721), UINT32_C(0x5EC2BFD7), UINT32_C(0x3581CB61)}, {UINT32_C(0xC41A6EF1), UINT32_C(0x56A35D67), UINT32_C(0xF69A3D49), UINT32_C(0x5895E76E), UINT32_C(0x8B97FDA2), UINT32_C(0x03192D2F), UINT32_C(0xA0A94FA9), UINT32_C(0x11240C0B), UINT32_C(0xBDDB31E7), UINT32_C(0x4DC27F38), UINT32_C(0x69A0D11A), UINT32_C(0x038AE33D), UINT32_C(0x857974B5), UINT32_C(0x9F3A13EE), UINT32_C(0x0222E516), UINT32_C(0x2ACA765E)}}, {{UINT32_C(0xD2421565), UINT32_C(0xFA06EFB5), UINT32_C(0x8AB1719F), UINT32_C(0xC199817D), UINT32_C(0x48C3D0C4), UINT32_C(0x44325F2F), UINT32_C(0x5A80BBEF), UINT32_C(0xDD6C1165), UINT32_C(0x02A61986), UINT32_C(0x30791924), UINT32_C(0x3A7E4B1E), UINT32_C(0xEBD53E2A), UINT32_C(0xC7AB55DB), UINT32_C(0xDD3E7657), UINT32_C(0x7A09B71B), UINT32_C(0x43EA2DB2)}, {UINT32_C(0x0A3AE7D5), UINT32_C(0x9002748E), UINT32_C(0x5B23AE62), UINT32_C(0x0590F7C6), UINT32_C(0x4A2305B0), UINT32_C(0x44EE4FA6), UINT32_C(0xABA335D8), UINT32_C(0x914591BD), UINT32_C(0xAB32FC4D), UINT32_C(0x5888289F), UINT32_C(0x6E19B810), UINT32_C(0xA5FED847), UINT32_C(0x17DB4A48), UINT32_C(0x255C3F99), UINT32_C(0x6F25750A), UINT32_C(0x0431EEB8)}}, {{UINT32_C(0xD0A38E64), UINT32_C(0xB398FF44), UINT32_C(0x05E41904), UINT32_C(0x5FBAD7B9), UINT32_C(0x357B82CD), UINT32_C(0xBA57597B), UINT32_C(0xA929E6BC), UINT32_C(0x18BE4419), UINT32_C(0xA98B452D), UINT32_C(0x3F3F6D35), UINT32_C(0x58D546DA), UINT32_C(0x27425C5F), UINT32_C(0xC446022B), UINT32_C(0x61A1BBDA), UINT32_C(0x689D15AF), UINT32_C(0x3EA60775)}, {UINT32_C(0x3F8C1B93), UINT32_C(0xDD097042), UINT32_C(0x31E09914), UINT32_C(0x951AAC56), UINT32_C(0x647CCFAC), UINT32_C(0x99C77D0F), UINT32_C(0x6102DEE7), UINT32_C(0xF3CB5C7A), UINT32_C(0xF9484E59), UINT32_C(0x2C1CAACB), UINT32_C(0x405766AC), UINT32_C(0x7EBD7135), UINT32_C(0xB0C58371), UINT32_C(0x267C325C), UINT32_C(0xC2F52776), UINT32_C(0x48FDF94D)}}, {{UINT32_C(0x4EE6EE71), UINT32_C(0xF6442788), UINT32_C(0xC09D8FAF), UINT32_C(0x49D6F157), UINT32_C(0x3C93BF65), UINT32_C(0x159F7AA2), UINT32_C(0x0B5464C4), UINT32_C(0x992387CF), UINT32_C(0xDEDA026E), UINT32_C(0xFC15173B), UINT32_C(0xC989FD74), UINT32_C(0x90B860E6), UINT32_C(0x2E98CC2D), UINT32_C(0xCC08BC0C), UINT32_C(0xC85BC472), UINT32_C(0x089D2D48)}, {UINT32_C(0x3953E507), UINT32_C(0x9087C746), UINT32_C(0x90F97B85), UINT32_C(0x54F480A3), UINT32_C(0x9F9CC5D0), UINT32_C(0x83D61993), UINT32_C(0xC1970015), UINT32_C(0x0C55DE44), UINT32_C(0xDF669193), UINT32_C(0xC45D5EA1), UINT32_C(0xFDCF23AB), UINT32_C(0x5DEFF1E7), UINT32_C(0x2A211F3D), UINT32_C(0x2B38D479), UINT32_C(0x3E31284F), UINT32_C(0x09927925)}}, {{UINT32_C(0xC38EFF1A), UINT32_C(0x30454C23), UINT32_C(0xFEC8424E), UINT32_C(0x706FD470), UINT32_C(0x33467A08), UINT32_C(0xA2163197), UINT32_C(0x80E6DB64), UINT32_C(0x7C8A4D43), UINT32_C(0xE9AB850B), UINT32_C(0x505D89BF), UINT32_C(0x5E8DF0CB), UINT32_C(0xC10CFEFF), UINT32_C(0x16304B39), UINT32_C(0x3EB45DF7), UINT32_C(0x527C325B), UINT32_C(0x3AAE23FE)}, {UINT32_C(0xC153DA5D), UINT32_C(0x65DBB826), UINT32_C(0xFFCCCC80), UINT32_C(0xB8EC2676), UINT32_C(0x1C8BA8C2), UINT32_C(0x4538FBAB), UINT32_C(0x66FD20CA), UINT32_C(0x6FA94E52), UINT32_C(0xA9B7513F), UINT32_C(0x480D857E), UINT32_C(0x82814908), UINT32_C(0xDB1C611C), UINT32_C(0x53F81AA5), UINT32_C(0x0F1F21FF), UINT32_C(0xE1A47218), UINT32_C(0x20696D2D)}}, {{UINT32_C(0x7AB6E8D8), UINT32_C(0xF31AA622), UINT32_C(0x686BB479), UINT32_C(0x3D12F32B), UINT32_C(0x3BF6E8F8), UINT32_C(0xACA48C8A), UINT32_C(0xFCECFCC0), UINT32_C(0x39D4F322), UINT32_C(0xC8BBCADE), UINT32_C(0xCBD2E493), UINT32_C(0x5C695155), UINT32_C(0x18E2A8E7), UINT32_C(0xDF022D32), UINT32_C(0x4047ED16), UINT32_C(0xCD6CDB7C), UINT32_C(0x1040565E)}, {UINT32_C(0x64515BD6), UINT32_C(0x1B72EA47), UINT32_C(0x9320C9CB), UINT32_C(0x0DC58AE8), UINT32_C(0x5310CDBD), UINT32_C(0xEE53907B), UINT32_C(0x54FE7719), UINT32_C(0x7C2C62A1), UINT32_C(0x8AE9C75E), UINT32_C(0xA0415080), UINT32_C(0x1E8A0123), UINT32_C(0x2BFC3780), UINT32_C(0xCE6823AD), UINT32_C(0xBBCB26FE), UINT32_C(0xD61B79A7), UINT32_C(0x5E4B59A0)}}, {{UINT32_C(0x90C0C1CA), UINT32_C(0x8C93F975), UINT32_C(0x8F518A16), UINT32_C(0x0871A901), UINT32_C(0x964CACE1), UINT32_C(0x6477E523), UINT32_C(0xA77046AC), UINT32_C(0xE52D22C8), UINT32_C(0xF9911C69), UINT32_C(0x4FE86722), UINT32_C(0x0E21642C), UINT32_C(0x8B03B196), UINT32_C(0xEEA31DF9), UINT32_C(0xDD3523EF), UINT32_C(0xD896AE4F), UINT32_C(0x4D4EDD43)}, {UINT32_C(0xB8CB58A3), UINT32_C(0xEB5C2968), UINT32_C(0x9AF9580A), UINT32_C(0x5C6C5B63), UINT32_C(0x3A166247), UINT32_C(0x20759CEB), UINT32_C(0x0F964024), UINT32_C(0x812FBE1B), UINT32_C(0x816BFC2C), UINT32_C(0xBB295EBA), UINT32_C(0x0BC4C607), UINT32_C(0x35525626), UINT32_C(0x7D134609), UINT32_C(0x411799ED), UINT32_C(0x8615FBAA), UINT32_C(0x7ECBDA12)}}, {{UINT32_C(0xE7C6C149), UINT32_C(0x45EB69B3), UINT32_C(0xF40D6D9C), UINT32_C(0x9D414F65), UINT32_C(0x6AD70201), UINT32_C(0x3FC4D2A6), UINT32_C(0x2E2EB20A), UINT32_C(0x039F56D2), UINT32_C(0xCE4F7AB7), UINT32_C(0xAE25D395), UINT32_C(0x1B640F4F), UINT32_C(0xD69AE851), UINT32_C(0xCF08596A), UINT32_C(0x912BA30C), UINT32_C(0xFB7DA74A), UINT32_C(0x7C552E1C)}, {UINT32_C(0x298071AC), UINT32_C(0x57F7B3CC), UINT32_C(0x5029FCFB), UINT32_C(0x7B38B186), UINT32_C(0xDBD1AFDA), UINT32_C(0x43D0A21D), UINT32_C(0xCFDCE1D5), UINT32_C(0x2165A125), UINT32_C(0x099E931C), UINT32_C(0xC2422D76), UINT32_C(0xD220528D), UINT32_C(0x3940B3F9), UINT32_C(0x5892DDF1), UINT32_C(0xA530E1E0), UINT32_C(0xC5EDB806), UINT32_C(0x5D1060BB)}}, {{UINT32_C(0xDA19A7BF), UINT32_C(0x03C39CB0), UINT32_C(0x35061C5A), UINT32_C(0x9227C957), UINT32_C(0xE6733C8E), UINT32_C(0xB86AE697), UINT32_C(0x1D91D056), UINT32_C(0x4790AB41), UINT32_C(0x91944712), UINT32_C(0x82599E6E), UINT32_C(0x2126986F), UINT32_C(0xE6EEAB30), UINT32_C(0x4C7C86DD), UINT32_C(0xF6CF6770), UINT32_C(0x81C7F520), UINT32_C(0x0962C8E0)}, {UINT32_C(0x3E672910), UINT32_C(0x7275701A), UINT32_C(0x555D4EAA), UINT32_C(0xCC253D25), UINT32_C(0x0F307D6F), UINT32_C(0xC87804A5), UINT32_C(0x5E6E364D), UINT32_C(0xA6C40269), UINT32_C(0x9DE73155), UINT32_C(0x5A4DB577), UINT32_C(0x45B03B16), UINT32_C(0x8513BC05), UINT32_C(0x5CB1A5DF), UINT32_C(0x7EDB8B9F), UINT32_C(0xD4905C9B), UINT32_C(0x5686C42A)}}, {{UINT32_C(0xC1288660), UINT32_C(0x1B9368C4), UINT32_C(0x3BCEFEDB), UINT32_C(0x5F83CD35), UINT32_C(0xC33CD356), UINT32_C(0xB4656091), UINT32_C(0x4920232F), UINT32_C(0x2284D907), UINT32_C(0x95B4CBCA), UINT32_C(0x87816B06), UINT32_C(0xEF2D4546), UINT32_C(0xA35A7191), UINT32_C(0x296E871A), UINT32_C(0xF9E71B1D), UINT32_C(0x5330AF13), UINT32_C(0x72A7B9C3)}, {UINT32_C(0x401BE940), UINT32_C(0xAC61BC6F), UINT32_C(0x0DD2350E), UINT32_C(0x0634D9D7), UINT32_C(0x0CE45A7C), UINT32_C(0xE27626F0), UINT32_C(0x3493FA74), UINT32_C(0x9B38569F), UINT32_C(0x6EC9DC13), UINT32_C(0x3F23C703), UINT32_C(0x9C62D952), UINT32_C(0x8BF8FF12), UINT32_C(0x58132258), UINT32_C(0x5D53A2D2), UINT32_C(0x33A57773), UINT32_C(0x1FC830A5)}}, {{UINT32_C(0x0F294E33), UINT32_C(0xAE58A3B9), UINT32_C(0xAEF8F84C), UINT32_C(0xF12E0FC4), UINT32_C(0x649D16FF), UINT32_C(0x78C5BDDE), UINT32_C(0x8827C75F), UINT32_C(0x12645CA1), UINT32_C(0x7F97ABED), UINT32_C(0x1288C566), UINT32_C(0xC1E2781E), UINT32_C(0x0CAD8E5D), UINT32_C(0xBC92FF24), UINT32_C(0x24B69A1D), UINT32_C(0x545221B2), UINT32_C(0x7068305D)}, {UINT32_C(0x40F6201C), UINT32_C(0x7A9A3F7C), UINT32_C(0x5EFACD4C), UINT32_C(0x5B7E5FA2), UINT32_C(0xD6275627), UINT32_C(0x85FACB2E), UINT32_C(0x5BBE856B), UINT32_C(0xDD0FBA63), UINT32_C(0xB2E456FD), UINT32_C(0x030826B1), UINT32_C(0x5F898479), UINT32_C(0x0FF397E8), UINT32_C(0xBFAE4984), UINT32_C(0x68ECAA4E), UINT32_C(0xCAC01FD8), UINT32_C(0x4EB40475)}}, {{UINT32_C(0x2BC4C766), UINT32_C(0x141804F1), UINT32_C(0xC8FB07C1), UINT32_C(0xD84A76DA), UINT32_C(0xC83676A9), UINT32_C(0x29376B5B), UINT32_C(0x3749490C), UINT32_C(0x3D3A00EB), UINT32_C(0xC5F439B6), UINT32_C(0xA5EB6CF7), UINT32_C(0xEA156432), UINT32_C(0x16266439), UINT32_C(0x03161D4B), UINT32_C(0x1CF83E25), UINT32_C(0x95E3E8A3), UINT32_C(0x37603F22)}, {UINT32_C(0xE920EDDA), UINT32_C(0x62EE26EC), UINT32_C(0x0FC4DF7D), UINT32_C(0xCD7734A3), UINT32_C(0xD7FBCA6B), UINT32_C(0x0EF3E6C9), UINT32_C(0x87F1873A), UINT32_C(0xCF2460DA), UINT32_C(0x1895CF1C), UINT32_C(0x00511072), UINT32_C(0x4F11854B), UINT32_C(0xB92A8E93), UINT32_C(0x0C665D9D), UINT32_C(0x98556251), UINT32_C(0x174A7FF2), UINT32_C(0x3CD64282)}}, {{UINT32_C(0xB9F9E43F), UINT32_C(0x39243EA7), UINT32_C(0x270D2DB1), UINT32_C(0x973D4582), UINT32_C(0x0541FF4C), UINT32_C(0xEB8B5033), UINT32_C(0x9F309D70), UINT32_C(0xED5F52A0), UINT32_C(0x123F45B6), UINT32_C(0xE978FBAE), UINT32_C(0x0015781D), UINT32_C(0x0A79B693), UINT32_C(0x5C9A03FB), UINT32_C(0xC5DA0CCF), UINT32_C(0xF16D4CE1), UINT32_C(0x1C6E4F58)}, {UINT32_C(0x89CB89DB), UINT32_C(0x09674C2E), UINT32_C(0xC94A4D96), UINT32_C(0xB3D147B1), UINT32_C(0x27D24C12), UINT32_C(0x936F3F88), UINT32_C(0xA8C4BA25), UINT32_C(0x44E8C741), UINT32_C(0x920FDDE8), UINT32_C(0x249A28AE), UINT32_C(0x229B2C19), UINT32_C(0x274F2B4E), UINT32_C(0xFF4EC64D), UINT32_C(0x94C203EE), UINT32_C(0x43358F20), UINT32_C(0x53284B1F)}}, {{UINT32_C(0xDCCFF94D), UINT32_C(0xE3AB8BAA), UINT32_C(0xF97449EE), UINT32_C(0xF038D9A5), UINT32_C(0x5EF19F06), UINT32_C(0xE4A45DCF), UINT32_C(0x17EF6368), UINT32_C(0xFFF8AD9A), UINT32_C(0xADDF0B6E), UINT32_C(0x0CEB6B85), UINT32_C(0x96AC1BA3), UINT32_C(0x6C7B60B1), UINT32_C(0xA25F77F8), UINT32_C(0xED84F897), UINT32_C(0x55886360), UINT32_C(0x1EE61671)}, {UINT32_C(0x7BA18315), UINT32_C(0x08B44F38), UINT32_C(0xF3D0E0C4), UINT32_C(0x8A9FFAE9), UINT32_C(0xE5886E61), UINT32_C(0x82807E7D), UINT32_C(0x51E94C78), UINT32_C(0xF15402F3), UINT32_C(0x96A8AF2E), UINT32_C(0x45969D9F), UINT32_C(0xF4956ACC), UINT32_C(0xA8E0ED89), UINT32_C(0xF2D21764), UINT32_C(0xB5334DEC), UINT32_C(0x861C26B7), UINT32_C(0x2B274E2F)}}, {{UINT32_C(0x99E77118), UINT32_C(0xC2E3A802), UINT32_C(0xC6DE1B4D), UINT32_C(0xFFE72B90), UINT32_C(0xE29458FB), UINT32_C(0xCCB21D53), UINT32_C(0x511F0279), UINT32_C(0xD233AF10), UINT32_C(0xB9B907B3), UINT32_C(0xC301B7EA), UINT32_C(0xD7B55600), UINT32_C(0x59DB1F45), UINT32_C(0x3A386844), UINT32_C(0x7173318B), UINT32_C(0xD9AB6F85), UINT32_C(0x403ABED7)}, {UINT32_C(0x14698FC9), UINT32_C(0x0CFE2CFC), UINT32_C(0x34CE5939), UINT32_C(0x40A41989), UINT32_C(0x9ABA363C), UINT32_C(0x0F5FA849), UINT32_C(0x8CC887D9), UINT32_C(0x99C045AB), UINT32_C(0xE8DF250B), UINT32_C(0x1E7563F5), UINT32_C(0xD3B78407), UINT32_C(0x2624A5DC), UINT32_C(0x1954A966), UINT32_C(0x7D80CA6D), UINT32_C(0x4C8995C2), UINT32_C(0x789BD685)}}, {{UINT32_C(0x83A05A40), UINT32_C(0xBA8D9376), UINT32_C(0x0572668D), UINT32_C(0xDD238C0E), UINT32_C(0xE0AD7EAA), UINT32_C(0x5B41446F), UINT32_C(0x63F9C64D), UINT32_C(0x6D1AD6B4), UINT32_C(0x8830CE1C), UINT32_C(0xF5FE99AA), UINT32_C(0xF2B77D66), UINT32_C(0x5BB1E7DF), UINT32_C(0xF7E63961), UINT32_C(0x7382CA41), UINT32_C(0x555032C4), UINT32_C(0x56D6F922)}, {UINT32_C(0xAC45C214), UINT32_C(0xF9EAA991), UINT32_C(0x66146EA4), UINT32_C(0x2A4B7172), UINT32_C(0xD14553F5), UINT32_C(0x5667D61F), UINT32_C(0x3F7D071A), UINT32_C(0x996E8D8B), UINT32_C(0xE2229B97), UINT32_C(0xCB023EA5), UINT32_C(0x398EA3C6), UINT32_C(0xA446A954), UINT32_C(0xAAF9ABF2), UINT32_C(0x733E3D79), UINT32_C(0x47503BBD), UINT32_C(0x2B4FAE8E)}}, }, { {{UINT32_C(0xEBEFDC12), UINT32_C(0x24E9082D), UINT32_C(0x24FDCD6E), UINT32_C(0x86997EA9), UINT32_C(0x03145F3F), UINT32_C(0x15129188), UINT32_C(0xA16A167D), UINT32_C(0xC829D42C), UINT32_C(0xFDFACB6F), UINT32_C(0x55C0A31C), UINT32_C(0x5B93FB73), UINT32_C(0x1A728DB4), UINT32_C(0x467A55D2), UINT32_C(0x7A187912), UINT32_C(0x1E8843D3), UINT32_C(0x7934C39C)}, {UINT32_C(0xF35497AA), UINT32_C(0x688D9927), UINT32_C(0x5A745926), UINT32_C(0x2176E4E4), UINT32_C(0x4FF0DA29), UINT32_C(0xA60F1ED7), UINT32_C(0xE66F5F74), UINT32_C(0xE1EF2081), UINT32_C(0x9EE53EFF), UINT32_C(0xCDE36E79), UINT32_C(0x855244FF), UINT32_C(0xFCD1D1BF), UINT32_C(0x464A4040), UINT32_C(0xD55CDB2E), UINT32_C(0x1E64BB0B), UINT32_C(0x39BC13F1)}}, {{UINT32_C(0x65D70320), UINT32_C(0x828B3539), UINT32_C(0x954FE3CC), UINT32_C(0x921019C6), UINT32_C(0x39DFC1EA), UINT32_C(0xC2B142C8), UINT32_C(0xBAD22A43), UINT32_C(0x7A619A1C), UINT32_C(0xD827C06E), UINT32_C(0xE08FA3AE), UINT32_C(0x88BAA42F), UINT32_C(0xAC645EFF), UINT32_C(0x294F3582), UINT32_C(0x514723BA), UINT32_C(0xAA355FD2), UINT32_C(0x6FD17829)}, {UINT32_C(0x11D05C79), UINT32_C(0x6366853C), UINT32_C(0x17D185C9), UINT32_C(0xE225500B), UINT32_C(0xFA47EADA), UINT32_C(0xAEEC2174), UINT32_C(0x6666332F), UINT32_C(0x9737ECC0), UINT32_C(0xE33AA72A), UINT32_C(0xD0638BC9), UINT32_C(0xF6CF4E24), UINT32_C(0x4889AB0D), UINT32_C(0x039E3190), UINT32_C(0x2912E4A0), UINT32_C(0xC035D955), UINT32_C(0x411CFB3C)}}, {{UINT32_C(0x0B3BD0D0), UINT32_C(0xE59D745B), UINT32_C(0x0653222F), UINT32_C(0x62AB04F9), UINT32_C(0x43E0EC6C), UINT32_C(0xE6421BB7), UINT32_C(0x15E65B27), UINT32_C(0x6F3E4770), UINT32_C(0xD82704E6), UINT32_C(0x90FB7585), UINT32_C(0xE9A129DF), UINT32_C(0xCF7FD882), UINT32_C(0xD3D0023A), UINT32_C(0xFA8E1B9D), UINT32_C(0xDE4307E5), UINT32_C(0x12861B4A)}, {UINT32_C(0xB86CF424), UINT32_C(0x9DC0D3D9), UINT32_C(0xC2DBE006), UINT32_C(0xCFC0A60F), UINT32_C(0x2B9F470A), UINT32_C(0x5933BAA8), UINT32_C(0xCAB8113B), UINT32_C(0x112F153C), UINT32_C(0x56B279C1), UINT32_C(0x1AEDA340), UINT32_C(0xBE13DFA3), UINT32_C(0x1408A037), UINT32_C(0xC06D3674), UINT32_C(0x10D90850), UINT32_C(0xAF30AE4A), UINT32_C(0x3DB6999E)}}, {{UINT32_C(0x56348084), UINT32_C(0xAB96F013), UINT32_C(0x8C167F42), UINT32_C(0x40395543), UINT32_C(0x2280FEB8), UINT32_C(0xE1385C9F), UINT32_C(0x76D2C4AA), UINT32_C(0x36671625), UINT32_C(0x4D4D667B), UINT32_C(0x76E31344), UINT32_C(0xEF0B171D), UINT32_C(0x906B5973), UINT32_C(0xEBCCA769), UINT32_C(0x229BCCFA), UINT32_C(0x8A9A561C), UINT32_C(0x36462E60)}, {UINT32_C(0x4FE428A6), UINT32_C(0xFD5116FD), UINT32_C(0xF3846007), UINT32_C(0xE92C088A), UINT32_C(0x218A0D1E), UINT32_C(0x8AC5F8BE), UINT32_C(0xDDF329CE), UINT32_C(0x59A97369), UINT32_C(0xCAB484D5), UINT32_C(0xEA2D262E), UINT32_C(0xBD10F3EC), UINT32_C(0x6F95E17A), UINT32_C(0xE08DDB7E), UINT32_C(0x6FFBEC38), UINT32_C(0x6446BB5D), UINT32_C(0x55E8DE21)}}, {{UINT32_C(0x0CB565AE), UINT32_C(0xA5D6141A), UINT32_C(0xF9091FE2), UINT32_C(0x8786B494), UINT32_C(0x1D6C9279), UINT32_C(0x89B1900F), UINT32_C(0xC21934C0), UINT32_C(0x425AD0F5), UINT32_C(0xE2201D3E), UINT32_C(0xF781FBF6), UINT32_C(0x61E0191D), UINT32_C(0x72100433), UINT32_C(0x5B3E5491), UINT32_C(0x186A3999), UINT32_C(0x95E49235), UINT32_C(0x6DF058E6)}, {UINT32_C(0x34559E42), UINT32_C(0x82D37E02), UINT32_C(0xA0E7F1D4), UINT32_C(0x4AE4A8AC), UINT32_C(0xB34AAED2), UINT32_C(0x9941A84C), UINT32_C(0x5484ECE0), UINT32_C(0x4DA92D32), UINT32_C(0xEB7C740E), UINT32_C(0x6F1FB58C), UINT32_C(0x4965B6CC), UINT32_C(0xEC6FAE86), UINT32_C(0x1CEFF73B), UINT32_C(0x179E8480), UINT32_C(0x72724658), UINT32_C(0x58ED2BB3)}}, {{UINT32_C(0xAC30848E), UINT32_C(0xD6FA5A23), UINT32_C(0x53705571), UINT32_C(0xFE58E2D3), UINT32_C(0x47EF14E7), UINT32_C(0x43368F72), UINT32_C(0x694E6BB3), UINT32_C(0x7DDA0F48), UINT32_C(0xE9B7CEF9), UINT32_C(0x0DFA9BF9), UINT32_C(0x9803203F), UINT32_C(0xA3BD4B23), UINT32_C(0xAA1B561C), UINT32_C(0x3F0EAF0D), UINT32_C(0x11C56C8F), UINT32_C(0x6E8678F3)}, {UINT32_C(0xB4272D39), UINT32_C(0x4E574AFB), UINT32_C(0x26A589E0), UINT32_C(0xDD9622A9), UINT32_C(0x18E2B544), UINT32_C(0xCF41D028), UINT32_C(0x479B717E), UINT32_C(0x7FE65A44), UINT32_C(0xABDE58B1), UINT32_C(0x38D34C1F), UINT32_C(0x20E02EE5), UINT32_C(0x4A8B1A49), UINT32_C(0x26D927F1), UINT32_C(0x6C2C5AF1), UINT32_C(0xCE4D534A), UINT32_C(0x08E02884)}}, {{UINT32_C(0x3C9034CE), UINT32_C(0xF4747773), UINT32_C(0xA8CDA587), UINT32_C(0x92B208B8), UINT32_C(0xA8A5D6F6), UINT32_C(0xDDB5A865), UINT32_C(0x09FFBBCA), UINT32_C(0xE3C3150E), UINT32_C(0x71780DEE), UINT32_C(0x120720D6), UINT32_C(0x1CB5E7E7), UINT32_C(0x6977608D), UINT32_C(0xDBE5697A), UINT32_C(0x52261203), UINT32_C(0x184E7B19), UINT32_C(0x1C88E9C4)}, {UINT32_C(0x9927BFC6), UINT32_C(0x6BE6C190), UINT32_C(0xF431A9E8), UINT32_C(0xA1452123), UINT32_C(0xB949ED5C), UINT32_C(0x62BC5BF4), UINT32_C(0x2BCF732C), UINT32_C(0xD57633C0), UINT32_C(0x0AE4563A), UINT32_C(0xA3723F7C), UINT32_C(0x031958EA), UINT32_C(0x5449AFCE), UINT32_C(0xA6580D6F), UINT32_C(0xE3BF9985), UINT32_C(0x6B471AA6), UINT32_C(0x34B0D320)}}, {{UINT32_C(0x46BF771F), UINT32_C(0xEE28E9FC), UINT32_C(0xF23B38E6), UINT32_C(0xDCD3C06E), UINT32_C(0x8D62D86B), UINT32_C(0x894E7864), UINT32_C(0xC0209FC3), UINT32_C(0xF226C4DA), UINT32_C(0x6EC4D3B1), UINT32_C(0xEEB85A81), UINT32_C(0x3ABEC007), UINT32_C(0x837F8A03), UINT32_C(0x18C1A3EA), UINT32_C(0x622C40BC), UINT32_C(0x279C341A), UINT32_C(0x49A59CB2)}, {UINT32_C(0xD38DC85B), UINT32_C(0xC3833ABA), UINT32_C(0x3E303976), UINT32_C(0xC512B721), UINT32_C(0xA43BA4BF), UINT32_C(0x80CB1ADF), UINT32_C(0x8FAD6957), UINT32_C(0x6C8A1574), UINT32_C(0xA0DC03A1), UINT32_C(0xB5305AE5), UINT32_C(0xA78753F7), UINT32_C(0xA63FE0FC), UINT32_C(0x7D4EB934), UINT32_C(0x81C2BCE1), UINT32_C(0xAD66F6FB), UINT32_C(0x4ED73812)}}, {{UINT32_C(0xCA09A5D2), UINT32_C(0xAC25AB81), UINT32_C(0xB6EE3D0D), UINT32_C(0x1E000EFC), UINT32_C(0x148738A5), UINT32_C(0x7EDA899F), UINT32_C(0x4ABD3CA0), UINT32_C(0xEE70DFB4), UINT32_C(0x371F70BD), UINT32_C(0xA9F18AF3), UINT32_C(0x30E796BC), UINT32_C(0xA2D64FE4), UINT32_C(0x38943DC4), UINT32_C(0x77E42190), UINT32_C(0x06EB5CFC), UINT32_C(0x35AEB8A2)}, {UINT32_C(0xDA26DB57), UINT32_C(0x95D36C2E), UINT32_C(0x3A546E88), UINT32_C(0xEEF40F18), UINT32_C(0xE5D07294), UINT32_C(0xAD4D846B), UINT32_C(0x95158FF2), UINT32_C(0x80BE6BA8), UINT32_C(0xC85F84EA), UINT32_C(0xC15AC73F), UINT32_C(0x2044951E), UINT32_C(0xBAFC3952), UINT32_C(0xA14C51AE), UINT32_C(0xEA750E8D), UINT32_C(0x524FC6FA), UINT32_C(0x1817F004)}}, {{UINT32_C(0x14555CD7), UINT32_C(0x9C835DB3), UINT32_C(0x299196F6), UINT32_C(0x76A92FC0), UINT32_C(0x6618F1A6), UINT32_C(0x35CDF54D), UINT32_C(0xB3260002), UINT32_C(0x4B77E5A0), UINT32_C(0xA837BDB2), UINT32_C(0x321C2EAF), UINT32_C(0xD5D4A743), UINT32_C(0x559AE831), UINT32_C(0xE116E5CC), UINT32_C(0x0EB18D7F), UINT32_C(0x1945E60E), UINT32_C(0x3FE7D292)}, {UINT32_C(0x649D5551), UINT32_C(0x4CA61AEF), UINT32_C(0x95257CC3), UINT32_C(0x7C3CFBFF), UINT32_C(0x66A5D03B), UINT32_C(0x8AF04A74), UINT32_C(0xFC3B143A), UINT32_C(0xA0C95ADE), UINT32_C(0xA61B0143), UINT32_C(0x515258CE), UINT32_C(0x43A147BD), UINT32_C(0xF1959D4B), UINT32_C(0x43B761E4), UINT32_C(0xAAE3EF4C), UINT32_C(0xBB8BEA3A), UINT32_C(0x731F5D9E)}}, {{UINT32_C(0x6283C8DA), UINT32_C(0x483D5F55), UINT32_C(0xC067AF22), UINT32_C(0x0CE48F6F), UINT32_C(0xCFB3FEF8), UINT32_C(0xBA767432), UINT32_C(0x463510B2), UINT32_C(0x1AD7F214), UINT32_C(0x7D448527), UINT32_C(0xDCFDB1A7), UINT32_C(0x119BA281), UINT32_C(0x3EEFAEDD), UINT32_C(0x7B6597AB), UINT32_C(0x9D5F2546), UINT32_C(0xB8AE2AC1), UINT32_C(0x03515E65)}, {UINT32_C(0xA768A2E9), UINT32_C(0x91A17476), UINT32_C(0x1C0B8745), UINT32_C(0x921B21AA), UINT32_C(0xD1636FB2), UINT32_C(0xE1B0AB68), UINT32_C(0x0A933BC5), UINT32_C(0x35AF62C1), UINT32_C(0x6CCA56F8), UINT32_C(0x24432C7B), UINT32_C(0xE142C3D6), UINT32_C(0x88976C8F), UINT32_C(0xC0EEC621), UINT32_C(0x1BAC1E5D), UINT32_C(0x7EB64467), UINT32_C(0x2760B03A)}}, {{UINT32_C(0x535D9B1E), UINT32_C(0xCEFCAB97), UINT32_C(0xEFC85889), UINT32_C(0x2DDF1964), UINT32_C(0x67FC56FE), UINT32_C(0x62276E02), UINT32_C(0x9EA27125), UINT32_C(0xD33D4E1F), UINT32_C(0x3EAB0BFD), UINT32_C(0xD11F0726), UINT32_C(0xB4E5A283), UINT32_C(0xCEF5BD00), UINT32_C(0xA5ECFF20), UINT32_C(0x107CB2FB), UINT32_C(0x85321266), UINT32_C(0x1D110BEC)}, {UINT32_C(0xB9C05938), UINT32_C(0x5CD67BCA), UINT32_C(0xEC9ED6BA), UINT32_C(0x023B2FD6), UINT32_C(0xC44D68BE), UINT32_C(0x473FEF71), UINT32_C(0x24006876), UINT32_C(0x6DB457A1), UINT32_C(0x5979901A), UINT32_C(0xA56C47E3), UINT32_C(0x006B786D), UINT32_C(0x971F5FE7), UINT32_C(0x8E3630E4), UINT32_C(0xD894B21C), UINT32_C(0xFF0AD8ED), UINT32_C(0x56B8610D)}}, {{UINT32_C(0x6A9AD8B6), UINT32_C(0xDC574806), UINT32_C(0xA33AA074), UINT32_C(0x39B1553A), UINT32_C(0x71EF2A51), UINT32_C(0x55233DAA), UINT32_C(0xCCC11692), UINT32_C(0x6186F6F0), UINT32_C(0x51E7F2B8), UINT32_C(0x949F7A8D), UINT32_C(0xBF2FF9B7), UINT32_C(0x9ED94F29), UINT32_C(0x3B90382D), UINT32_C(0x54ED16DA), UINT32_C(0x4014335A), UINT32_C(0x065D0975)}, {UINT32_C(0x7B737144), UINT32_C(0x95DA36F2), UINT32_C(0xDDD9C1E0), UINT32_C(0xE0A7C458), UINT32_C(0x69B64234), UINT32_C(0x0DCE291C), UINT32_C(0x8689DEF3), UINT32_C(0xF943B727), UINT32_C(0x24F80B28), UINT32_C(0x1CB8375C), UINT32_C(0x8902EC28), UINT32_C(0x60EFAA29), UINT32_C(0x673F34AF), UINT32_C(0x036BD90F), UINT32_C(0x02B1A208), UINT32_C(0x687B36FB)}}, {{UINT32_C(0x0C031EE5), UINT32_C(0x1704A598), UINT32_C(0x8288EC60), UINT32_C(0x325E6096), UINT32_C(0x16EFC6F9), UINT32_C(0x588F58A1), UINT32_C(0x2C520574), UINT32_C(0xA1EA547F), UINT32_C(0x7FD9F40A), UINT32_C(0x2633CB8F), UINT32_C(0x3AA1C0DD), UINT32_C(0x736D8CFA), UINT32_C(0x92B3300E), UINT32_C(0x189E74DA), UINT32_C(0x92172793), UINT32_C(0x6C92BE18)}, {UINT32_C(0xC6E25307), UINT32_C(0x3B67DADF), UINT32_C(0xCCF961F7), UINT32_C(0x170BF45C), UINT32_C(0xB2C0629E), UINT32_C(0xF07F48B5), UINT32_C(0x974F7169), UINT32_C(0xACB40994), UINT32_C(0x871177C5), UINT32_C(0x29AD746C), UINT32_C(0xE3AE7857), UINT32_C(0x1AD449E2), UINT32_C(0xAE9BE21F), UINT32_C(0xAFB63CB9), UINT32_C(0xB08FAEEC), UINT32_C(0x0E6C676C)}}, {{UINT32_C(0x60CABC21), UINT32_C(0xA60E0D9F), UINT32_C(0x8BA79177), UINT32_C(0xBDFC43CF), UINT32_C(0x7BEECCF8), UINT32_C(0x8362D84B), UINT32_C(0x29F8FBE4), UINT32_C(0x0CC9E6BA), UINT32_C(0x4801BF01), UINT32_C(0xCA90958A), UINT32_C(0xF13C6356), UINT32_C(0xCB84005E), UINT32_C(0x90AE5AB9), UINT32_C(0x9CA6408B), UINT32_C(0xE668357C), UINT32_C(0x293582F2)}, {UINT32_C(0xFFCEB4F6), UINT32_C(0xAA3A680A), UINT32_C(0xF18508A5), UINT32_C(0x19CE2D54), UINT32_C(0xF430A62C), UINT32_C(0x74027BA5), UINT32_C(0xDCB846D8), UINT32_C(0x7248CB8E), UINT32_C(0x3D3779E2), UINT32_C(0x608F15E8), UINT32_C(0x52BB6633), UINT32_C(0x21B8A438), UINT32_C(0xA95BDE4F), UINT32_C(0x64B4C82E), UINT32_C(0xCA13D8B1), UINT32_C(0x75169F73)}}, {{UINT32_C(0x7435D441), UINT32_C(0xDC6C53C9), UINT32_C(0x630885A0), UINT32_C(0x621030CD), UINT32_C(0x4CA9BBE8), UINT32_C(0x9F761C57), UINT32_C(0x89453166), UINT32_C(0x3CBD7B51), UINT32_C(0x53EED18D), UINT32_C(0xE80014E4), UINT32_C(0xFD48C287), UINT32_C(0xAB31FE34), UINT32_C(0x0B1F2C06), UINT32_C(0xB908AA72), UINT32_C(0xDA592359), UINT32_C(0x2A849D2E)}, {UINT32_C(0x9B7DA75A), UINT32_C(0x688DAA1B), UINT32_C(0x42D4659B), UINT32_C(0x779B963B), UINT32_C(0x0DA7F5E1), UINT32_C(0x44BCCBE1), UINT32_C(0x0E283A19), UINT32_C(0x96F4FE4E), UINT32_C(0x0F532628), UINT32_C(0x00239F78), UINT32_C(0xB2BD3F1E), UINT32_C(0xA8E1A47F), UINT32_C(0x49D504AD), UINT32_C(0x23D8F150), UINT32_C(0xA818FB1A), UINT32_C(0x36F4D7AD)}}, }, { {{UINT32_C(0x6FA6665A), UINT32_C(0xED7AAC76), UINT32_C(0xCD7ABC00), UINT32_C(0x593FD44F), UINT32_C(0xE5940EBE), UINT32_C(0xB70DAA5D), UINT32_C(0xE6CEB5B5), UINT32_C(0xBBD56469), UINT32_C(0x4EC6EC19), UINT32_C(0x17B54A10), UINT32_C(0xF288553F), UINT32_C(0x2411F294), UINT32_C(0x81534194), UINT32_C(0x01082082), UINT32_C(0x98F85E1E), UINT32_C(0x3CFFCF3F)}, {UINT32_C(0x07E62220), UINT32_C(0x0B82B0FD), UINT32_C(0x50F91B0E), UINT32_C(0x99B5CC19), UINT32_C(0x3AE5C675), UINT32_C(0x2C60F938), UINT32_C(0xF42E3EEA), UINT32_C(0x6A25B099), UINT32_C(0x329D208C), UINT32_C(0x498948A8), UINT32_C(0x6A343691), UINT32_C(0x45226E62), UINT32_C(0x8B8E9C2D), UINT32_C(0x053643F6), UINT32_C(0x4A938DA8), UINT32_C(0x56E1E564)}}, {{UINT32_C(0x2242A19C), UINT32_C(0x144DA678), UINT32_C(0xC072E8A2), UINT32_C(0x0860A384), UINT32_C(0x318A08B7), UINT32_C(0xD782A875), UINT32_C(0x8D318C54), UINT32_C(0xAC99802E), UINT32_C(0x307DA17A), UINT32_C(0x329437A2), UINT32_C(0x6696DC0F), UINT32_C(0x35656A12), UINT32_C(0xE2152828), UINT32_C(0xC5A9914A), UINT32_C(0x841C814B), UINT32_C(0x3BCBD2FC)}, {UINT32_C(0x590C6FC2), UINT32_C(0x7D2FCF55), UINT32_C(0x6197DABE), UINT32_C(0xCCCF4315), UINT32_C(0x0E2EB665), UINT32_C(0xF4701C36), UINT32_C(0xE9400A11), UINT32_C(0x9D4F5A7C), UINT32_C(0x2F49F529), UINT32_C(0x815C6218), UINT32_C(0xB015260A), UINT32_C(0x264A9BEF), UINT32_C(0x177E94AB), UINT32_C(0x279A03B8), UINT32_C(0xF6E2518A), UINT32_C(0x115481E6)}}, {{UINT32_C(0xBB65B1C1), UINT32_C(0x2FE0C370), UINT32_C(0xAABD8550), UINT32_C(0x620FC63E), UINT32_C(0x9660303A), UINT32_C(0xA6EDA03F), UINT32_C(0x802B6899), UINT32_C(0xC15FD5C5), UINT32_C(0x30FD19A1), UINT32_C(0x6DFBBCA5), UINT32_C(0xC5394AAB), UINT32_C(0x2BC0DDA1), UINT32_C(0x0CF41B04), UINT32_C(0xFC619634), UINT32_C(0x7DBCB198), UINT32_C(0x64DDF00E)}, {UINT32_C(0x92602D0B), UINT32_C(0x78B289F6), UINT32_C(0xE4A24732), UINT32_C(0x123CC6A5), UINT32_C(0x70913278), UINT32_C(0x5F2DB53B), UINT32_C(0xC27EAC92), UINT32_C(0xD55AE856), UINT32_C(0x085696BA), UINT32_C(0xCC82E112), UINT32_C(0x67F01774), UINT32_C(0xA421C179), UINT32_C(0xE602BAF7), UINT32_C(0x7DEEF7FD), UINT32_C(0x35E94ADA), UINT32_C(0x00A730B3)}}, {{UINT32_C(0x1DAC6F8B), UINT32_C(0x586D8DC8), UINT32_C(0x18F1FE48), UINT32_C(0x89A56AC6), UINT32_C(0xF2A8BFA5), UINT32_C(0x51231A77), UINT32_C(0xCA562E8C), UINT32_C(0xD36BE5FE), UINT32_C(0x9A6268D9), UINT32_C(0x5DFE328F), UINT32_C(0x781FA0B4), UINT32_C(0x3110144C), UINT32_C(0x7ACBE702), UINT32_C(0x6A18A190), UINT32_C(0xD70C4B5F), UINT32_C(0x68F941C2)}, {UINT32_C(0x0A19654D), UINT32_C(0xCE3C1DE3), UINT32_C(0x49AD2799), UINT32_C(0xCE96C000), UINT32_C(0x06E913EE), UINT32_C(0x9AD7B0F3), UINT32_C(0x472A1C37), UINT32_C(0x625C4FC1), UINT32_C(0x967BBD4D), UINT32_C(0x1E25E3AC), UINT32_C(0x2042C162), UINT32_C(0xE516CD88), UINT32_C(0xC3197E40), UINT32_C(0x1483A10E), UINT32_C(0x84E5FAED), UINT32_C(0x60815A8A)}}, {{UINT32_C(0xD1313B07), UINT32_C(0x3413EEA8), UINT32_C(0x49BC14B0), UINT32_C(0x4B6C2CCF), UINT32_C(0xC33BE839), UINT32_C(0x56C78C84), UINT32_C(0x0DC481C6), UINT32_C(0x00980F4F), UINT32_C(0x5E96BAE7), UINT32_C(0xA34D712C), UINT32_C(0xEB0574F5), UINT32_C(0xEA386C4A), UINT32_C(0x6BB4DC04), UINT32_C(0x834334AB), UINT32_C(0x47404A42), UINT32_C(0x140F2209)}, {UINT32_C(0xCC6F8D14), UINT32_C(0x970B7DE3), UINT32_C(0xCCD6A840), UINT32_C(0x7C9A38E9), UINT32_C(0xA63FAF90), UINT32_C(0x7C1C4638), UINT32_C(0x1F10834E), UINT32_C(0x36AFEA84), UINT32_C(0x15765F2A), UINT32_C(0xA9AA4A15), UINT32_C(0xD9240C98), UINT32_C(0xB20B2249), UINT32_C(0xD03ABC25), UINT32_C(0x20116417), UINT32_C(0x37A8893D), UINT32_C(0x69B34300)}}, {{UINT32_C(0x1021F8CA), UINT32_C(0x710FB075), UINT32_C(0x64008516), UINT32_C(0xF90919DD), UINT32_C(0x2CCC8FFC), UINT32_C(0xB0ED3172), UINT32_C(0x78988C41), UINT32_C(0xC6ADC85B), UINT32_C(0x0A1B81A9), UINT32_C(0x1CDE6A9D), UINT32_C(0xC80CAC9E), UINT32_C(0x9ABC5114), UINT32_C(0x43A7B1A7), UINT32_C(0x877E6082), UINT32_C(0x51BD9782), UINT32_C(0x0CA1F0D1)}, {UINT32_C(0x6E6AACB7), UINT32_C(0xFBB662BB), UINT32_C(0x96CD1A74), UINT32_C(0xDCAB0D77), UINT32_C(0xDC56300E), UINT32_C(0x603F2717), UINT32_C(0xFE92F7E4), UINT32_C(0x327251B0), UINT32_C(0x7031603A), UINT32_C(0x07E0CBED), UINT32_C(0xD04C19FD), UINT32_C(0xA0F296EC), UINT32_C(0xB8C5E0AB), UINT32_C(0x3296BF9B), UINT32_C(0x49E5E7B6), UINT32_C(0x41E72DDB)}}, {{UINT32_C(0xCE99C0C5), UINT32_C(0x47E9562C), UINT32_C(0xBA5372BF), UINT32_C(0x4C5FD161), UINT32_C(0x5C808664), UINT32_C(0x05D1B7B1), UINT32_C(0x539F8180), UINT32_C(0x9DBE76B6), UINT32_C(0xDDBD7BC3), UINT32_C(0x646C3DDF), UINT32_C(0x97376739), UINT32_C(0x06032B96), UINT32_C(0x696BDA3D), UINT32_C(0xB71DD971), UINT32_C(0x1D340FD0), UINT32_C(0x75061EB8)}, {UINT32_C(0xE6A7DCA5), UINT32_C(0x6FD064FD), UINT32_C(0x8DB01DE3), UINT32_C(0x79A31650), UINT32_C(0xF6483911), UINT32_C(0xB1B65A8D), UINT32_C(0xA9DE2C37), UINT32_C(0xAF2BBE1C), UINT32_C(0x85CB42C5), UINT32_C(0x6B663C9E), UINT32_C(0xB583E78E), UINT32_C(0x464FEDFE), UINT32_C(0xFFDF93CB), UINT32_C(0x393C00F8), UINT32_C(0x9F96CF15), UINT32_C(0x61CC9A6D)}}, {{UINT32_C(0xCA774807), UINT32_C(0x40EDC986), UINT32_C(0x4C334C01), UINT32_C(0x8B2A531C), UINT32_C(0xCEB21FD6), UINT32_C(0x72D378C4), UINT32_C(0x3833D841), UINT32_C(0x169C54E4), UINT32_C(0x82FE513F), UINT32_C(0xCC830E8E), UINT32_C(0xABF34DD7), UINT32_C(0xBDC4ECD7), UINT32_C(0xAEDD9FF5), UINT32_C(0xB5349484), UINT32_C(0xA404055B), UINT32_C(0x12D7ADB3)}, {UINT32_C(0x637B7C24), UINT32_C(0x88027C00), UINT32_C(0xC0EB319D), UINT32_C(0x755587A6), UINT32_C(0x2027178A), UINT32_C(0x3F24E32F), UINT32_C(0xA4FE8F8D), UINT32_C(0xB912054E), UINT32_C(0x5C9A68D6), UINT32_C(0x6AACA911), UINT32_C(0x235CF842), UINT32_C(0x14772328), UINT32_C(0x0C0175F8), UINT32_C(0x6D3020A8), UINT32_C(0x3E0F7418), UINT32_C(0x587768A7)}}, {{UINT32_C(0x1154C74A), UINT32_C(0x57E3A1F9), UINT32_C(0xB85FB8E8), UINT32_C(0x80157FF5), UINT32_C(0xEE5DEFEC), UINT32_C(0xBEDB658D), UINT32_C(0x067E9A0E), UINT32_C(0x65C0AA98), UINT32_C(0x229A5289), UINT32_C(0xAF9A507A), UINT32_C(0xF954DD94), UINT32_C(0x6A13ACF0), UINT32_C(0x53DC4C19), UINT32_C(0xB5F3A18D), UINT32_C(0x85AF938F), UINT32_C(0x06AEB3F5)}, {UINT32_C(0x8C9BB087), UINT32_C(0x503F0622), UINT32_C(0xE3FEA015), UINT32_C(0xEA19AC85), UINT32_C(0x403FB8FC), UINT32_C(0xE446CD70), UINT32_C(0xDF5B398F), UINT32_C(0x1BDDC810), UINT32_C(0xAD2CAEC6), UINT32_C(0x0CAF818F), UINT32_C(0x807AB004), UINT32_C(0x06983E52), UINT32_C(0x79428650), UINT32_C(0xA6B33E3C), UINT32_C(0x231BAE71), UINT32_C(0x182E3D46)}}, {{UINT32_C(0xB309DC4B), UINT32_C(0xAF54B735), UINT32_C(0x805890F1), UINT32_C(0x494F7441), UINT32_C(0xF87271F6), UINT32_C(0x3CCD5F0C), UINT32_C(0x7638102B), UINT32_C(0x2914763B), UINT32_C(0xFD258079), UINT32_C(0x3CA50D01), UINT32_C(0x77CDD6A9), UINT32_C(0x6D9A3D47), UINT32_C(0x1F4A05CE), UINT32_C(0xD81373B8), UINT32_C(0xCCD443ED), UINT32_C(0x16B258DB)}, {UINT32_C(0xA3805FEE), UINT32_C(0xC9D4009F), UINT32_C(0x225FA57D), UINT32_C(0x5EC56730), UINT32_C(0xAC17E4C0), UINT32_C(0x4A51A79B), UINT32_C(0xE7750942), UINT32_C(0xB389FBA3), UINT32_C(0x1AB7E8BE), UINT32_C(0x2B137D6E), UINT32_C(0xD8C26EFE), UINT32_C(0x3953702A), UINT32_C(0xB79F2828), UINT32_C(0x6D86ED3E), UINT32_C(0x6D6A62C0), UINT32_C(0x36ECEEE8)}}, {{UINT32_C(0x6B8B9B02), UINT32_C(0xF97E85FB), UINT32_C(0xC6F128F6), UINT32_C(0x3319D570), UINT32_C(0xB4CA56DD), UINT32_C(0xDAB74E23), UINT32_C(0x81FCBB47), UINT32_C(0x50CA71EF), UINT32_C(0xAAD7F910), UINT32_C(0xBFC19F2E), UINT32_C(0xDB3772F4), UINT32_C(0x96650F9B), UINT32_C(0xB6F26494), UINT32_C(0x5823F134), UINT32_C(0xCBFBD2E3), UINT32_C(0x1B899B3E)}, {UINT32_C(0xF6CF8F8A), UINT32_C(0xD1589C42), UINT32_C(0x34DDB625), UINT32_C(0x3168AAF5), UINT32_C(0x72ABDA08), UINT32_C(0x4C730535), UINT32_C(0xF82913C3), UINT32_C(0x8B1C24C7), UINT32_C(0x239FBCD3), UINT32_C(0xD7D80F27), UINT32_C(0x6B7C205D), UINT32_C(0xB18B4F05), UINT32_C(0xD92056A6), UINT32_C(0x2864763F), UINT32_C(0xBCDB3022), UINT32_C(0x0B3DDC7B)}}, {{UINT32_C(0x207F772B), UINT32_C(0x1AB037D6), UINT32_C(0x88767BFA), UINT32_C(0xF050DD34), UINT32_C(0x79ABF05E), UINT32_C(0xFEF182FF), UINT32_C(0x4B25067B), UINT32_C(0xAAFCFD0F), UINT32_C(0x34E155B0), UINT32_C(0x1EB76235), UINT32_C(0x65CEF7A6), UINT32_C(0xA3B921C9), UINT32_C(0xD9216B0A), UINT32_C(0x6CBD50B3), UINT32_C(0x9E578A9A), UINT32_C(0x3E298A71)}, {UINT32_C(0x1CCE9059), UINT32_C(0xC0DEE851), UINT32_C(0xEBA49DE2), UINT32_C(0x397344BB), UINT32_C(0xB08513DE), UINT32_C(0x45A60A85), UINT32_C(0xF0D07F9B), UINT32_C(0x55D314F9), UINT32_C(0x12D12611), UINT32_C(0xBF6D4D51), UINT32_C(0x30A7E8DE), UINT32_C(0x49F9BCF1), UINT32_C(0x5435D109), UINT32_C(0xDB0A9058), UINT32_C(0x0F706CF2), UINT32_C(0x4DE5C43F)}}, {{UINT32_C(0x70B6D62B), UINT32_C(0x7FF298D6), UINT32_C(0xE67688D3), UINT32_C(0xB2FF0AD4), UINT32_C(0x805652BD), UINT32_C(0x5E63A6B2), UINT32_C(0xAD74922A), UINT32_C(0x32D81219), UINT32_C(0xA9CCCC31), UINT32_C(0x77D2E3A3), UINT32_C(0x2CF2EEE0), UINT32_C(0x031D571B), UINT32_C(0x4FC7C9EA), UINT32_C(0x471653BD), UINT32_C(0x0AFC2A13), UINT32_C(0x2322CC68)}, {UINT32_C(0x08C6D70E), UINT32_C(0x3D152EFF), UINT32_C(0xBEC5DBD9), UINT32_C(0xBEC9CBCF), UINT32_C(0x6496310F), UINT32_C(0x41BD4962), UINT32_C(0xB1A88E6B), UINT32_C(0xD23FC983), UINT32_C(0x5EF464E2), UINT32_C(0x5B622EDC), UINT32_C(0xFFCC97BB), UINT32_C(0xC6500ADD), UINT32_C(0xAA783FF4), UINT32_C(0xF2CCD3EF), UINT32_C(0x7CE05CC1), UINT32_C(0x51AD3604)}}, {{UINT32_C(0x24C48E44), UINT32_C(0x4796EE83), UINT32_C(0xBBA7BC62), UINT32_C(0xB4D448B0), UINT32_C(0x1C32B713), UINT32_C(0x2F356E4A), UINT32_C(0x32050781), UINT32_C(0x980D6DCA), UINT32_C(0xB5F6C099), UINT32_C(0xB52B1826), UINT32_C(0xA144D7F5), UINT32_C(0x01F7D68D), UINT32_C(0xA23999CB), UINT32_C(0x09ABC596), UINT32_C(0x66246640), UINT32_C(0x17C069DD)}, {UINT32_C(0x1F7E37A6), UINT32_C(0xB7D7F96C), UINT32_C(0xE46AAD16), UINT32_C(0x57E198C0), UINT32_C(0xD1C0DF8C), UINT32_C(0xB2088DF9), UINT32_C(0x3FDEC190), UINT32_C(0x0CC38EE4), UINT32_C(0xFB2D9B68), UINT32_C(0x68DD1FC4), UINT32_C(0xAD1D73C0), UINT32_C(0x0AD94674), UINT32_C(0x1B92B955), UINT32_C(0x9529C7DF), UINT32_C(0x0D141F7C), UINT32_C(0x6711E361)}}, {{UINT32_C(0x3B87C175), UINT32_C(0x1B1A5159), UINT32_C(0x029FF8F9), UINT32_C(0x7F62A639), UINT32_C(0xC69ADEFB), UINT32_C(0xA2E37638), UINT32_C(0x58E309A0), UINT32_C(0x3AC773C6), UINT32_C(0x22EFD710), UINT32_C(0x9E7A85FD), UINT32_C(0xA60E5275), UINT32_C(0xD29E2F3D), UINT32_C(0x1163C9ED), UINT32_C(0xC4734B9B), UINT32_C(0x9CBEEE57), UINT32_C(0x09D3204A)}, {UINT32_C(0x0B8A97AA), UINT32_C(0xB2339F8D), UINT32_C(0x7AE97B4D), UINT32_C(0xC19C67A6), UINT32_C(0x65425033), UINT32_C(0x8C0E823F), UINT32_C(0x8B186D7F), UINT32_C(0x447F972A), UINT32_C(0x32A6C164), UINT32_C(0x43385E29), UINT32_C(0xE9E78569), UINT32_C(0x95049508), UINT32_C(0xA074B68F), UINT32_C(0x2AF8C598), UINT32_C(0x5CD5E2F7), UINT32_C(0x18AC97B8)}}, {{UINT32_C(0x01DEB288), UINT32_C(0xFAE61589), UINT32_C(0x885B8EA2), UINT32_C(0x33F684F3), UINT32_C(0xCFA425B5), UINT32_C(0x89A90618), UINT32_C(0xFBBF5B15), UINT32_C(0x8F5D3C2E), UINT32_C(0xC2B6CB28), UINT32_C(0x379803C6), UINT32_C(0x990CE2DB), UINT32_C(0xFE683EA3), UINT32_C(0x7B6E4E0C), UINT32_C(0xC1B3C21F), UINT32_C(0xEA3513DC), UINT32_C(0x6F152C2E)}, {UINT32_C(0x9AB792CA), UINT32_C(0x23505338), UINT32_C(0x282A67AF), UINT32_C(0xC64C7F27), UINT32_C(0x6498B24F), UINT32_C(0x6FCBDE65), UINT32_C(0xA1612A06), UINT32_C(0x6FB7F7FC), UINT32_C(0x45C74402), UINT32_C(0xFD575B9F), UINT32_C(0xA709A516), UINT32_C(0x6EAD0805), UINT32_C(0xD4EF066B), UINT32_C(0xCA6208AE), UINT32_C(0x93954E65), UINT32_C(0x23880ECE)}}, }, { {{UINT32_C(0x7FB1977A), UINT32_C(0x2B13B8B8), UINT32_C(0x21B7871A), UINT32_C(0xEA6510AD), UINT32_C(0x882483C7), UINT32_C(0xDBDCB0E8), UINT32_C(0x4C379245), UINT32_C(0x5E2E9664), UINT32_C(0xEBAF2C56), UINT32_C(0x581D4429), UINT32_C(0xCA79FCCF), UINT32_C(0xA929CBB0), UINT32_C(0x2009377F), UINT32_C(0xE74D3D66), UINT32_C(0x610CC0D1), UINT32_C(0x664661A5)}, {UINT32_C(0x0570237A), UINT32_C(0x1F778C19), UINT32_C(0x1769A370), UINT32_C(0x905AEB86), UINT32_C(0xD6C06AEE), UINT32_C(0xF51B013B), UINT32_C(0x43EFB668), UINT32_C(0xDF0D8905), UINT32_C(0x11E4D5DA), UINT32_C(0xDD082BC3), UINT32_C(0xD7BE0C1D), UINT32_C(0x58AA1283), UINT32_C(0x941E9230), UINT32_C(0x97F20D6B), UINT32_C(0x8BB614AD), UINT32_C(0x486C960C)}}, {{UINT32_C(0x4CE9052B), UINT32_C(0x0B573B94), UINT32_C(0xD78F10E5), UINT32_C(0x88B5C4CB), UINT32_C(0x77DCA0EB), UINT32_C(0xB131989B), UINT32_C(0x81E63C3B), UINT32_C(0x7F405D80), UINT32_C(0x3818CA2D), UINT32_C(0xCC31F185), UINT32_C(0xFE177EA8), UINT32_C(0x42F386A2), UINT32_C(0x9D888B2A), UINT32_C(0x1B7DD56E), UINT32_C(0xC8E873E8), UINT32_C(0x3A6D84D3)}, {UINT32_C(0x7E3FBCD6), UINT32_C(0xBCFEF877), UINT32_C(0xB36F3F68), UINT32_C(0x5DA67B53), UINT32_C(0x5827FE5A), UINT32_C(0xE840229A), UINT32_C(0xB989407B), UINT32_C(0x17689956), UINT32_C(0xAFE27325), UINT32_C(0xAD6E3F87), UINT32_C(0xDB1E1A3E), UINT32_C(0x62027C70), UINT32_C(0x7EBB4747), UINT32_C(0x86A2C909), UINT32_C(0x4A919D6B), UINT32_C(0x47ADC4CC)}}, {{UINT32_C(0xA4CA0F15), UINT32_C(0x92381565), UINT32_C(0xC08705DB), UINT32_C(0x67FB0C76), UINT32_C(0x03BA6D54), UINT32_C(0x661DA004), UINT32_C(0x77C5C4F7), UINT32_C(0xF875EF24), UINT32_C(0x4157A282), UINT32_C(0x0769B11C), UINT32_C(0xFAF534C6), UINT32_C(0x8ADB10AC), UINT32_C(0x9CCD6AB2), UINT32_C(0x0312147B), UINT32_C(0xD67A443F), UINT32_C(0x75390C00)}, {UINT32_C(0x21A1047C), UINT32_C(0x0F5A29A0), UINT32_C(0x83A146B8), UINT32_C(0xCABB96FB), UINT32_C(0x2A3F2F48), UINT32_C(0x1375356A), UINT32_C(0x83C57DB4), UINT32_C(0xDEAB7544), UINT32_C(0xF5AFA2F1), UINT32_C(0x1AB71412), UINT32_C(0x73B58749), UINT32_C(0x21D94B48), UINT32_C(0xFF2F369A), UINT32_C(0xBA87E6D5), UINT32_C(0xDBAE0E08), UINT32_C(0x4B3B90B6)}}, {{UINT32_C(0x9116F02B), UINT32_C(0xB8648E3F), UINT32_C(0xCEF02B4F), UINT32_C(0xA5E5A03B), UINT32_C(0xA70F456A), UINT32_C(0x21EB9835), UINT32_C(0xC8A7C423), UINT32_C(0x44865319), UINT32_C(0xBCD6C0AD), UINT32_C(0x57DB3941), UINT32_C(0x7D371806), UINT32_C(0x20D97A3A), UINT32_C(0x0F8A3D51), UINT32_C(0xBE61AA4F), UINT32_C(0x13CB7D2B), UINT32_C(0x7A6E0BBA)}, {UINT32_C(0xEEA5D6FB), UINT32_C(0xB3B98673), UINT32_C(0x87B03BAC), UINT32_C(0x534EB45F), UINT32_C(0xA9508557), UINT32_C(0x6CEB244F), UINT32_C(0xF209CC15), UINT32_C(0xA47FBAC7), UINT32_C(0x1FC65C19), UINT32_C(0x41EBF99D), UINT32_C(0x7341650F), UINT32_C(0xD1477A86), UINT32_C(0xB361E0F8), UINT32_C(0xC4E6EB8E), UINT32_C(0xD2B3D548), UINT32_C(0x68FAF82E)}}, {{UINT32_C(0xF92B039B), UINT32_C(0xB9CCA467), UINT32_C(0x0E6F2A2B), UINT32_C(0x9F7180AF), UINT32_C(0xADA011F8), UINT32_C(0xC3084870), UINT32_C(0x882D7A38), UINT32_C(0xC814D1DC), UINT32_C(0xD51C1D14), UINT32_C(0x3A145072), UINT32_C(0xD70F8B08), UINT32_C(0x595AC55B), UINT32_C(0x71EFED45), UINT32_C(0x67308D05), UINT32_C(0x22DBFA33), UINT32_C(0x2C660B98)}, {UINT32_C(0xAF8F2980), UINT32_C(0xC8EB4EEC), UINT32_C(0x6145AB09), UINT32_C(0xBC8F2D72), UINT32_C(0xC22D5E84), UINT32_C(0x1A0A9D53), UINT32_C(0x9ECD643E), UINT32_C(0x8E646008), UINT32_C(0xB541E2D8), UINT32_C(0x6C704F66), UINT32_C(0x31995198), UINT32_C(0xEED597AA), UINT32_C(0x619126C2), UINT32_C(0xB9032FA3), UINT32_C(0xB0A08F01), UINT32_C(0x0CA4AEAB)}}, {{UINT32_C(0xDB421144), UINT32_C(0xF48A003D), UINT32_C(0x9885A445), UINT32_C(0x4A7FA592), UINT32_C(0x8E8FA3DB), UINT32_C(0x040AA1C2), UINT32_C(0x91A15B11), UINT32_C(0xCE94D874), UINT32_C(0xF0E875B7), UINT32_C(0x79490F6D), UINT32_C(0x70318E86), UINT32_C(0x743A531D), UINT32_C(0xC4630CD1), UINT32_C(0xE88CA2AF), UINT32_C(0xF5C5D4AD), UINT32_C(0x6E2FE529)}, {UINT32_C(0xFE062D25), UINT32_C(0x619A4F46), UINT32_C(0xBD747C4F), UINT32_C(0xCE1B5FAD), UINT32_C(0x3D512728), UINT32_C(0x3C428366), UINT32_C(0x71AFAEC7), UINT32_C(0x7FE87908), UINT32_C(0x3DB8315E), UINT32_C(0xB7006310), UINT32_C(0x7195E9B1), UINT32_C(0x97A0397B), UINT32_C(0x84870127), UINT32_C(0x51EB939F), UINT32_C(0x517A32EE), UINT32_C(0x768A3CD7)}}, {{UINT32_C(0x257E424F), UINT32_C(0x25234FFA), UINT32_C(0xAD164952), UINT32_C(0x5D80ACE8), UINT32_C(0x7B4C0F5D), UINT32_C(0x4B15F386), UINT32_C(0xF95006BD), UINT32_C(0x71963894), UINT32_C(0x69963C75), UINT32_C(0x4781B778), UINT32_C(0xFD339850), UINT32_C(0xDECD94FB), UINT32_C(0x11A9D79C), UINT32_C(0x1533454E), UINT32_C(0x92BFCA33), UINT32_C(0x3B17EC40)}, {UINT32_C(0x12A30834), UINT32_C(0x58D0672A), UINT32_C(0x3E66F5D6), UINT32_C(0x807B665B), UINT32_C(0xB164B077), UINT32_C(0xCD732AE8), UINT32_C(0xF1F732BE), UINT32_C(0xED26F82E), UINT32_C(0x75A7B899), UINT32_C(0x4E65CB2E), UINT32_C(0x3C72F22E), UINT32_C(0x2EA2BE74), UINT32_C(0x4068CEFE), UINT32_C(0x60CD26F6), UINT32_C(0x1FEBEFAA), UINT32_C(0x63734AC0)}}, {{UINT32_C(0xE7203401), UINT32_C(0x290E6008), UINT32_C(0xA67A0F47), UINT32_C(0x3497CEA1), UINT32_C(0x641F5B86), UINT32_C(0xB079862C), UINT32_C(0x7A0D51D1), UINT32_C(0xDF3CB483), UINT32_C(0xBC8D25B7), UINT32_C(0x4CC0DCD1), UINT32_C(0xBDFAC20F), UINT32_C(0x1034F5FF), UINT32_C(0x6881DBFB), UINT32_C(0xC5896F31), UINT32_C(0x68A39778), UINT32_C(0x2C6BD4A1)}, {UINT32_C(0xF5CEDBE3), UINT32_C(0x6FAB7060), UINT32_C(0xF7141245), UINT32_C(0xC51F3245), UINT32_C(0xC3EF1EEF), UINT32_C(0xA3FFA5A4), UINT32_C(0x206172D5), UINT32_C(0x2FC2A0C7), UINT32_C(0x094E55D7), UINT32_C(0x6616FCFF), UINT32_C(0x22EA071F), UINT32_C(0xC3F309FF), UINT32_C(0xDD267FAA), UINT32_C(0x0685AADB), UINT32_C(0x6BC770C0), UINT32_C(0x0AE3722A)}}, {{UINT32_C(0xE67270FB), UINT32_C(0x7B11DD6A), UINT32_C(0x0016905D), UINT32_C(0x0128A351), UINT32_C(0xBFE007A0), UINT32_C(0x9CE64782), UINT32_C(0x7714E091), UINT32_C(0x7324986D), UINT32_C(0x269E4410), UINT32_C(0x3E796B16), UINT32_C(0x9A97AD36), UINT32_C(0x707A148C), UINT32_C(0x87D5B9AC), UINT32_C(0xBE29A340), UINT32_C(0xF0D882B4), UINT32_C(0x2F92E67E)}, {UINT32_C(0x57636C75), UINT32_C(0xB9F06642), UINT32_C(0xFB7F18EB), UINT32_C(0xA803EF99), UINT32_C(0x1E9BF04A), UINT32_C(0x4B8A1D79), UINT32_C(0x062068D6), UINT32_C(0x4C43526D), UINT32_C(0x800F0FF9), UINT32_C(0xCA59CFF0), UINT32_C(0xE4389A8E), UINT32_C(0x8BE857C3), UINT32_C(0x5383EDE8), UINT32_C(0x5042CF56), UINT32_C(0x0E02F40E), UINT32_C(0x06791C9A)}}, {{UINT32_C(0xF5D076B4), UINT32_C(0x18A74ACE), UINT32_C(0xE41EC2CF), UINT32_C(0x050C2161), UINT32_C(0x484F2CD0), UINT32_C(0xECC5823D), UINT32_C(0xAA7C332A), UINT32_C(0x63B7B1BD), UINT32_C(0xABEE9CD9), UINT32_C(0xAC6A274D), UINT32_C(0x7B7A7DB1), UINT32_C(0xEAC874F8), UINT32_C(0x734BEA81), UINT32_C(0x0FA4B8E8), UINT32_C(0x243D05BA), UINT32_C(0x1ADA0B97)}, {UINT32_C(0x822C8BC9), UINT32_C(0x724C084F), UINT32_C(0xA117425F), UINT32_C(0xAE697A1B), UINT32_C(0x2CD06676), UINT32_C(0x39172804), UINT32_C(0x23213E25), UINT32_C(0x87B4F920), UINT32_C(0xFC373ED4), UINT32_C(0xCBA8C7A1), UINT32_C(0xD2F10FD2), UINT32_C(0xDAC6B96B), UINT32_C(0xFD265CFF), UINT32_C(0xCC175798), UINT32_C(0xB731090A), UINT32_C(0x1631D89C)}}, {{UINT32_C(0x6D19CB56), UINT32_C(0xB639A208), UINT32_C(0x42A88733), UINT32_C(0x78F0F353), UINT32_C(0xE0323B20), UINT32_C(0xC6BC527B), UINT32_C(0x6DE64954), UINT32_C(0x3406CEDD), UINT32_C(0xBAF8A735), UINT32_C(0xAA89168B), UINT32_C(0x2D7B04AB), UINT32_C(0x7F68CEA0), UINT32_C(0x5EEC36D4), UINT32_C(0x6EAD81B2), UINT32_C(0xBBCE0784), UINT32_C(0x1C41724E)}, {UINT32_C(0x831BEE83), UINT32_C(0xDA5383AD), UINT32_C(0xF3C29716), UINT32_C(0xA8B7BEE3), UINT32_C(0x35ACA35B), UINT32_C(0x5B7E0540), UINT32_C(0xB8F21324), UINT32_C(0x8F006F3F), UINT32_C(0xA7B700CB), UINT32_C(0x915849F8), UINT32_C(0xA455A08B), UINT32_C(0x77C5B34D), UINT32_C(0xD6D73C0B), UINT32_C(0x13BA7C32), UINT32_C(0x6936AC88), UINT32_C(0x65D599C9)}}, {{UINT32_C(0x4DA5FFF8), UINT32_C(0xF636CFE8), UINT32_C(0xD1E6E947), UINT32_C(0xE5FD754E), UINT32_C(0x388A72F1), UINT32_C(0x8F960362), UINT32_C(0x381C1C38), UINT32_C(0x95B55A07), UINT32_C(0x1DF2F860), UINT32_C(0x31E1D02D), UINT32_C(0x12EA25F5), UINT32_C(0xC03243C7), UINT32_C(0xC28C0062), UINT32_C(0x5FD87B58), UINT32_C(0x9D950661), UINT32_C(0x5769E94D)}, {UINT32_C(0x6509E6E7), UINT32_C(0xF88C7CCF), UINT32_C(0xD3971A21), UINT32_C(0x8A021BAB), UINT32_C(0x9B284C2F), UINT32_C(0x2655B4AA), UINT32_C(0xC7050955), UINT32_C(0xC3E14580), UINT32_C(0x90E60DDF), UINT32_C(0x63B332E2), UINT32_C(0xF1CD1B51), UINT32_C(0x6AB86D32), UINT32_C(0x13BC748E), UINT32_C(0x9896AC11), UINT32_C(0x40FC1EBC), UINT32_C(0x516D4D4A)}}, {{UINT32_C(0x8F7B417D), UINT32_C(0xC27DBB0A), UINT32_C(0x770CF92D), UINT32_C(0xEE24827A), UINT32_C(0x5F9A2A6B), UINT32_C(0x22E08B64), UINT32_C(0xE10F76A1), UINT32_C(0xAE739513), UINT32_C(0xFF544277), UINT32_C(0xEC6E2D9D), UINT32_C(0x740DB83A), UINT32_C(0x470C22B7), UINT32_C(0xEE4F1E82), UINT32_C(0x643B7953), UINT32_C(0x5556FB59), UINT32_C(0x66409497)}, {UINT32_C(0x728114E6), UINT32_C(0x4C15C4CB), UINT32_C(0x1F29EF7F), UINT32_C(0xEFF1BB9F), UINT32_C(0x259562ED), UINT32_C(0x8E00B92A), UINT32_C(0x9838D769), UINT32_C(0xF28B146C), UINT32_C(0x206622CC), UINT32_C(0x3D7C8FFF), UINT32_C(0x86457FAD), UINT32_C(0xD521181D), UINT32_C(0x9D9A3085), UINT32_C(0xBF56F663), UINT32_C(0xA24B415A), UINT32_C(0x11BA1FED)}}, {{UINT32_C(0x035701C5), UINT32_C(0x149597F7), UINT32_C(0x6361CC7E), UINT32_C(0x055B1C4B), UINT32_C(0xC221AF72), UINT32_C(0x10DF1572), UINT32_C(0xC3D3A167), UINT32_C(0x6941B1E9), UINT32_C(0x38D00AF6), UINT32_C(0x29985CAB), UINT32_C(0x19E385F7), UINT32_C(0xDD9B8391), UINT32_C(0xF2E81932), UINT32_C(0x65268E33), UINT32_C(0x5C07CEF9), UINT32_C(0x4FC87273)}, {UINT32_C(0xEA012B70), UINT32_C(0xE1644429), UINT32_C(0x4BDF6ACE), UINT32_C(0x639FA874), UINT32_C(0xF65480CF), UINT32_C(0x7BAE6AFF), UINT32_C(0x606EFF3A), UINT32_C(0xB9CA15AF), UINT32_C(0xC04C5263), UINT32_C(0x10F5918A), UINT32_C(0xED3D0F98), UINT32_C(0x50F27E68), UINT32_C(0x3134D7FA), UINT32_C(0x647C1AD3), UINT32_C(0xF869EEFB), UINT32_C(0x08EF017D)}}, {{UINT32_C(0xF229A34B), UINT32_C(0xD474B5FD), UINT32_C(0x29E0A164), UINT32_C(0x03819D4E), UINT32_C(0x8D0910B9), UINT32_C(0x0D24139A), UINT32_C(0x9C2D8E8D), UINT32_C(0xB4F45C8D), UINT32_C(0x2F21718A), UINT32_C(0x10E4BEA2), UINT32_C(0x63DA06E8), UINT32_C(0xD3D7ECDE), UINT32_C(0xF148B0ED), UINT32_C(0xB2AAB06A), UINT32_C(0xAABD0F7A), UINT32_C(0x630152B1)}, {UINT32_C(0x3B1563B4), UINT32_C(0xCF4D05C2), UINT32_C(0x6F355349), UINT32_C(0xBFA58B4E), UINT32_C(0x04D1A769), UINT32_C(0x2FA4A29C), UINT32_C(0x1AEDA992), UINT32_C(0xF4E15F9D), UINT32_C(0x877819C9), UINT32_C(0x0FDABCEB), UINT32_C(0xC3EDB0A3), UINT32_C(0x5EDFCC1C), UINT32_C(0xD1DBCF40), UINT32_C(0x76625DC7), UINT32_C(0x2A7BD819), UINT32_C(0x3E558CF0)}}, {{UINT32_C(0x07A883A0), UINT32_C(0x07C7924F), UINT32_C(0x010EA080), UINT32_C(0x18484807), UINT32_C(0xB6B2B992), UINT32_C(0xDF8602FE), UINT32_C(0xAA03AA11), UINT32_C(0x38A2EFDC), UINT32_C(0x19B2BB14), UINT32_C(0x60B00311), UINT32_C(0x15E28BF3), UINT32_C(0x9E12E7FE), UINT32_C(0xBB0271CD), UINT32_C(0x2AC0917B), UINT32_C(0x1558FAAD), UINT32_C(0x24126EAE)}, {UINT32_C(0x19170EDF), UINT32_C(0x2EB303EF), UINT32_C(0xF5779AD2), UINT32_C(0x6945946B), UINT32_C(0x31B7DF96), UINT32_C(0xE4E5635A), UINT32_C(0xD6AC3252), UINT32_C(0x2B371D13), UINT32_C(0x8116C539), UINT32_C(0x38E78198), UINT32_C(0x6C89FAF6), UINT32_C(0x76DF4A2C), UINT32_C(0x6F233984), UINT32_C(0xDFB6755D), UINT32_C(0xD382985D), UINT32_C(0x0CBF63F6)}}, }, { {{UINT32_C(0x56B39FA7), UINT32_C(0x936D53BC), UINT32_C(0x511D5744), UINT32_C(0x751274EC), UINT32_C(0xF29D41C2), UINT32_C(0xDAF4432A), UINT32_C(0x014F8954), UINT32_C(0x717A68C1), UINT32_C(0x736F4024), UINT32_C(0x6D5D3F05), UINT32_C(0x12D037D9), UINT32_C(0x52E785F8), UINT32_C(0x02CA06C4), UINT32_C(0xC04CBA19), UINT32_C(0x9259A368), UINT32_C(0x43207806)}, {UINT32_C(0x2BE51135), UINT32_C(0x1211482B), UINT32_C(0xE4D32066), UINT32_C(0x5B473F6E), UINT32_C(0x4ADE99FC), UINT32_C(0x91991C8E), UINT32_C(0x4865136B), UINT32_C(0x124378E8), UINT32_C(0xBFFFC5CC), UINT32_C(0xAF791646), UINT32_C(0x36D38141), UINT32_C(0xB7DBA115), UINT32_C(0x5BD595B7), UINT32_C(0x0E879426), UINT32_C(0xCACC032E), UINT32_C(0x39B7D642)}}, {{UINT32_C(0xD756CE1D), UINT32_C(0x76ACE7C8), UINT32_C(0xF8A89F09), UINT32_C(0x4BEC8290), UINT32_C(0x690139DA), UINT32_C(0xE8FE848C), UINT32_C(0x6A541656), UINT32_C(0x8C5CB5CC), UINT32_C(0xA79F1A2B), UINT32_C(0x6127BB25), UINT32_C(0xE17D0549), UINT32_C(0x955551CC), UINT32_C(0x58E7C3FD), UINT32_C(0x648A32E9), UINT32_C(0xA60D449C), UINT32_C(0x366035A5)}, {UINT32_C(0x67A48368), UINT32_C(0xA4CF0CCB), UINT32_C(0xBE344234), UINT32_C(0xCF7D74F7), UINT32_C(0x8CFFCCCE), UINT32_C(0x006DFFB4), UINT32_C(0xFB55072B), UINT32_C(0xBBC66664), UINT32_C(0x5EFD8AF6), UINT32_C(0xAA51DDD1), UINT32_C(0x6F004C47), UINT32_C(0x88D0CFD4), UINT32_C(0xD97BBB13), UINT32_C(0xD18C2DBF), UINT32_C(0x1E7E68D2), UINT32_C(0x5E598200)}}, {{UINT32_C(0x466B58D2), UINT32_C(0xFF9FB488), UINT32_C(0xA8041078), UINT32_C(0x153A751D), UINT32_C(0xD5817ADF), UINT32_C(0xD7E96CB3), UINT32_C(0x511775D8), UINT32_C(0x56A7A135), UINT32_C(0x77E5DE7A), UINT32_C(0xB48FB406), UINT32_C(0x997A6721), UINT32_C(0x4DE670FB), UINT32_C(0x86EFBADA), UINT32_C(0x446019B5), UINT32_C(0xFA535082), UINT32_C(0x403CC005)}, {UINT32_C(0xC2FA986D), UINT32_C(0xF85BFEE2), UINT32_C(0x0E0C320B), UINT32_C(0xF2B77B88), UINT32_C(0x8FE98FA0), UINT32_C(0xAEFE1972), UINT32_C(0xE8DB8196), UINT32_C(0x291FD9C7), UINT32_C(0xF579D9D0), UINT32_C(0x7C3AB36D), UINT32_C(0x764622DD), UINT32_C(0x7F202BEF), UINT32_C(0x804CEBFF), UINT32_C(0xDFD4DE34), UINT32_C(0x683B7281), UINT32_C(0x25CA634E)}}, {{UINT32_C(0xEEB585DE), UINT32_C(0x2E3BCCC2), UINT32_C(0x9C7AB9D7), UINT32_C(0x728BAD6D), UINT32_C(0x5C38CDF1), UINT32_C(0xE298BC83), UINT32_C(0xB610385E), UINT32_C(0x0D88D423), UINT32_C(0x71744E3A), UINT32_C(0x5710F235), UINT32_C(0x9681CFF4), UINT32_C(0xD9312CC9), UINT32_C(0xF3D5B3BC), UINT32_C(0x1C46AB4A), UINT32_C(0xE2631926), UINT32_C(0x48BE540B)}, {UINT32_C(0x5CCDF14D), UINT32_C(0xBFAB35A1), UINT32_C(0xD778F586), UINT32_C(0x16C3216C), UINT32_C(0x04128BB2), UINT32_C(0x2A604800), UINT32_C(0xA7D2E1AA), UINT32_C(0x05505889), UINT32_C(0x1DE7C7B4), UINT32_C(0xBE8B94BE), UINT32_C(0x05BB8DEC), UINT32_C(0x53E72EBF), UINT32_C(0x2870C597), UINT32_C(0x1A38C5DA), UINT32_C(0xDD36B123), UINT32_C(0x76F0E77B)}}, {{UINT32_C(0x83B68DC3), UINT32_C(0xC13D1E8A), UINT32_C(0xA93D168B), UINT32_C(0x5F7291EF), UINT32_C(0xCA88F0F6), UINT32_C(0xD1C56274), UINT32_C(0x868E3651), UINT32_C(0x58EDFC8C), UINT32_C(0x70692949), UINT32_C(0x9D8F42AF), UINT32_C(0x81B6E052), UINT32_C(0x65903C33), UINT32_C(0x262E1F70), UINT32_C(0xAD71B078), UINT32_C(0xC40DC22F), UINT32_C(0x7A60D3BB)}, {UINT32_C(0xBA1FC54F), UINT32_C(0x6B64F0DB), UINT32_C(0x81F84A0B), UINT32_C(0x6DDB148C), UINT32_C(0x53955B40), UINT32_C(0xCFBD9662), UINT32_C(0x9B35DB3B), UINT32_C(0x67D49D07), UINT32_C(0xA8EF7DB2), UINT32_C(0x6ED336DD), UINT32_C(0x03F2A331), UINT32_C(0x7AAF4B8A), UINT32_C(0x5C3873CA), UINT32_C(0x9751DBE1), UINT32_C(0x8193A7ED), UINT32_C(0x78479B10)}}, {{UINT32_C(0x487DB2BF), UINT32_C(0xB05EDD9A), UINT32_C(0x58F7E778), UINT32_C(0xF9051591), UINT32_C(0xDC23CBF4), UINT32_C(0xBD643BE6), UINT32_C(0xC1EA2427), UINT32_C(0xBCE094EC), UINT32_C(0x4EB1BD95), UINT32_C(0x2A3F3B4B), UINT32_C(0x6F5E1428), UINT32_C(0xBA8FC9DC), UINT32_C(0x9F053047), UINT32_C(0x7DC28C94), UINT32_C(0xC553DC91), UINT32_C(0x58117A0C)}, {UINT32_C(0xD4A6137C), UINT32_C(0x4888B1E8), UINT32_C(0xF8DCBD03), UINT32_C(0x5DC05984), UINT32_C(0xD2F55576), UINT32_C(0xAE2C8657), UINT32_C(0xFC4DA255), UINT32_C(0x54721BEF), UINT32_C(0x802C9EBF), UINT32_C(0x0A326693), UINT32_C(0x91186DF0), UINT32_C(0xA33294AA), UINT32_C(0xB822390D), UINT32_C(0x716BD76F), UINT32_C(0x7C4AA61B), UINT32_C(0x7F023C0B)}}, {{UINT32_C(0x046A8017), UINT32_C(0x6506DA35), UINT32_C(0xF785115E), UINT32_C(0x23083C16), UINT32_C(0x24051BBD), UINT32_C(0x78581137), UINT32_C(0x5088EBFE), UINT32_C(0xCD36D48F), UINT32_C(0x5E542ACC), UINT32_C(0x23F7F0A3), UINT32_C(0x7D015B1E), UINT32_C(0x72018795), UINT32_C(0x38D2D742), UINT32_C(0xA69E68D4), UINT32_C(0x023B5C20), UINT32_C(0x36808A3B)}, {UINT32_C(0x1FEAB6D8), UINT32_C(0x660D03D6), UINT32_C(0x58D53E94), UINT32_C(0x77A1E185), UINT32_C(0x74024E57), UINT32_C(0x67425F4E), UINT32_C(0x0CC26788), UINT32_C(0x3B916008), UINT32_C(0xE3643998), UINT32_C(0x0C7D287E), UINT32_C(0x27B3B31F), UINT32_C(0xB0D98DD1), UINT32_C(0xBB980CFC), UINT32_C(0xBA621971), UINT32_C(0x404A2DE1), UINT32_C(0x77591087)}}, {{UINT32_C(0xC15C3D38), UINT32_C(0xB768C63D), UINT32_C(0x54DBA325), UINT32_C(0x281AEC4D), UINT32_C(0x50C9B1F3), UINT32_C(0xBB51D2E4), UINT32_C(0xE7268C94), UINT32_C(0x086BB9BB), UINT32_C(0x0C7ED37A), UINT32_C(0x9E0AF351), UINT32_C(0x39145AA3), UINT32_C(0xDBC88528), UINT32_C(0xB1AB786C), UINT32_C(0xA70373BE), UINT32_C(0x0A73090A), UINT32_C(0x273AC4D9)}, {UINT32_C(0xC280E9F5), UINT32_C(0xD618DB6A), UINT32_C(0xA9685A4B), UINT32_C(0x9D874643), UINT32_C(0x8A9C1951), UINT32_C(0x7EF799B4), UINT32_C(0xFFBA36BB), UINT32_C(0xAEAE400C), UINT32_C(0x145DC10A), UINT32_C(0x889119CB), UINT32_C(0x1BF7AE53), UINT32_C(0x08B052FF), UINT32_C(0xE3F04B93), UINT32_C(0xDEF76EC0), UINT32_C(0x06DC2CC5), UINT32_C(0x35A13BB2)}}, {{UINT32_C(0x613C9FD0), UINT32_C(0x97C54E1C), UINT32_C(0x42581F50), UINT32_C(0x7D4BEB41), UINT32_C(0x5BCA7CAF), UINT32_C(0x9401F44A), UINT32_C(0x36115D18), UINT32_C(0x5FD7E0B0), UINT32_C(0xCD0DCE05), UINT32_C(0x714FC514), UINT32_C(0x2AB3265E), UINT32_C(0xF3B73708), UINT32_C(0x8798EA8B), UINT32_C(0x118FB47A), UINT32_C(0xFE5C2BFF), UINT32_C(0x79A1F4CD)}, {UINT32_C(0x103FF4DC), UINT32_C(0xC0D3ABAA), UINT32_C(0x146D121C), UINT32_C(0xF5D504ED), UINT32_C(0x842CABA1), UINT32_C(0x38B7419B), UINT32_C(0x907320F6), UINT32_C(0xE1730788), UINT32_C(0xE111875F), UINT32_C(0x0037793B), UINT32_C(0x0AAB7249), UINT32_C(0x715042EA), UINT32_C(0x15630B39), UINT32_C(0xF57D27EF), UINT32_C(0x5D0153CA), UINT32_C(0x3B503330)}}, {{UINT32_C(0xC8AAD5E3), UINT32_C(0x44E75F39), UINT32_C(0x506B9C14), UINT32_C(0x3890E8AE), UINT32_C(0x38915D2F), UINT32_C(0xDDA7D91F), UINT32_C(0x5F28E467), UINT32_C(0x412802B8), UINT32_C(0x711B51DC), UINT32_C(0x08FF3E17), UINT32_C(0x81C96D4A), UINT32_C(0x0F23C1EF), UINT32_C(0x57511A7E), UINT32_C(0x7B8E28A1), UINT32_C(0x42C2BACF), UINT32_C(0x60200370)}, {UINT32_C(0x8559DC01), UINT32_C(0x5457AA66), UINT32_C(0xBB083219), UINT32_C(0xDB0CBC6F), UINT32_C(0xF981BE19), UINT32_C(0x316C4876), UINT32_C(0x9B98D6AC), UINT32_C(0xA04412B9), UINT32_C(0x2D95C876), UINT32_C(0x20964CB8), UINT32_C(0x51009C2C), UINT32_C(0xF643F29E), UINT32_C(0x30C43DD3), UINT32_C(0x5316D85A), UINT32_C(0x46A82D48), UINT32_C(0x104EB0C8)}}, {{UINT32_C(0x0B183769), UINT32_C(0xC05ADD9A), UINT32_C(0x653E726A), UINT32_C(0x14E8EC7A), UINT32_C(0x8D457375), UINT32_C(0xE5311F87), UINT32_C(0x25D9120D), UINT32_C(0xCC1585A8), UINT32_C(0x71A945BC), UINT32_C(0x04F39BE3), UINT32_C(0x18298210), UINT32_C(0xFBFAD374), UINT32_C(0x3A9D2053), UINT32_C(0x95F0BD1E), UINT32_C(0xC056D70E), UINT32_C(0x1EAEEFED)}, {UINT32_C(0x1E6E949A), UINT32_C(0x3274833C), UINT32_C(0xC1D152E6), UINT32_C(0xA38EA2CA), UINT32_C(0x1B9A48BA), UINT32_C(0xE77A1027), UINT32_C(0x69B03ED3), UINT32_C(0xD44CF886), UINT32_C(0x2D9D2B8F), UINT32_C(0xB52D35E7), UINT32_C(0xF99BD52B), UINT32_C(0xFA67F927), UINT32_C(0xDF337872), UINT32_C(0x3910D907), UINT32_C(0x90BF7A7F), UINT32_C(0x53E3909C)}}, {{UINT32_C(0x8FC5B40A), UINT32_C(0xC558DB4E), UINT32_C(0x7511657E), UINT32_C(0x330982A3), UINT32_C(0x0B883053), UINT32_C(0x81A47621), UINT32_C(0x3F3DB1D4), UINT32_C(0xB1F53471), UINT32_C(0x0C804E24), UINT32_C(0x8A2B835A), UINT32_C(0x3012783B), UINT32_C(0xF8537A45), UINT32_C(0x9DC2A56A), UINT32_C(0xC761FC41), UINT32_C(0x2C12BE25), UINT32_C(0x50369DCB)}, {UINT32_C(0xCA00D808), UINT32_C(0x19877D98), UINT32_C(0x1DA7BD8F), UINT32_C(0x305586B5), UINT32_C(0x0FB6F9E7), UINT32_C(0x683BF46E), UINT32_C(0x7E53ECB1), UINT32_C(0xF23F5457), UINT32_C(0x17EE25E8), UINT32_C(0xA09A0901), UINT32_C(0x5BAA52EC), UINT32_C(0x61AF9305), UINT32_C(0xA8104024), UINT32_C(0xC12B74BE), UINT32_C(0x60A876E3), UINT32_C(0x6BDABBAA)}}, {{UINT32_C(0x438800F3), UINT32_C(0x0EC8ADDA), UINT32_C(0x4FBF0259), UINT32_C(0xA47197E6), UINT32_C(0x1767F99F), UINT32_C(0x324E0696), UINT32_C(0xE440710A), UINT32_C(0x0E455BC2), UINT32_C(0x7A5984F7), UINT32_C(0xFE231689), UINT32_C(0x3CF323D8), UINT32_C(0x7706D5C7), UINT32_C(0xFFC9FB5E), UINT32_C(0x6DFE4B08), UINT32_C(0x8F9D5207), UINT32_C(0x5E912EC7)}, {UINT32_C(0xD7D1AC99), UINT32_C(0x9B71034D), UINT32_C(0x33D5ABF4), UINT32_C(0x5786B8AD), UINT32_C(0x426E2B80), UINT32_C(0x70E625B7), UINT32_C(0x6A33883F), UINT32_C(0x71D53ABB), UINT32_C(0xAA10AA82), UINT32_C(0xB42DE25A), UINT32_C(0xC313C9F3), UINT32_C(0x709B3CDF), UINT32_C(0x99A04BD3), UINT32_C(0x49F3BBC7), UINT32_C(0x3390B190), UINT32_C(0x5B56D9BB)}}, {{UINT32_C(0x05DAE0B4), UINT32_C(0xA4D655E5), UINT32_C(0x7016EDE7), UINT32_C(0x3402DB14), UINT32_C(0x117097DC), UINT32_C(0x58D4EFC5), UINT32_C(0x61AE9FDC), UINT32_C(0x4F397AFC), UINT32_C(0x85DE0E4A), UINT32_C(0x3EE32FBE), UINT32_C(0x18F9DA9B), UINT32_C(0xE5C94100), UINT32_C(0x30778D74), UINT32_C(0x6248B570), UINT32_C(0xFF879B98), UINT32_C(0x569D70C9)}, {UINT32_C(0x79A7786F), UINT32_C(0x385FD4C8), UINT32_C(0x92C6E962), UINT32_C(0x779353B9), UINT32_C(0x5AA82E08), UINT32_C(0x9C9103FB), UINT32_C(0xEC3B37D1), UINT32_C(0x128BD7DD), UINT32_C(0x98AE8C82), UINT32_C(0xCC0376F8), UINT32_C(0x289AFB7D), UINT32_C(0xDD33B1A3), UINT32_C(0xF1D2F3AC), UINT32_C(0x2B3A6BE5), UINT32_C(0x58C1DCA0), UINT32_C(0x2B342E8F)}}, {{UINT32_C(0x924940FC), UINT32_C(0x4ADA9F0F), UINT32_C(0xBD4E799E), UINT32_C(0x636260E5), UINT32_C(0x85ECD23F), UINT32_C(0x10650FC8), UINT32_C(0x32AE8105), UINT32_C(0x04765F05), UINT32_C(0xDEEBFAF2), UINT32_C(0x22F515E9), UINT32_C(0xEA6ED3BA), UINT32_C(0xFB6611B1), UINT32_C(0xB116A647), UINT32_C(0x2D260305), UINT32_C(0xCEB63ED4), UINT32_C(0x540A895A)}, {UINT32_C(0x65640BD2), UINT32_C(0xA5C897EC), UINT32_C(0x4EB90B65), UINT32_C(0x1D82AD21), UINT32_C(0xA2BD6C71), UINT32_C(0x2A00C3C3), UINT32_C(0xA185CE8C), UINT32_C(0xD9BE5D85), UINT32_C(0xE02E9DCD), UINT32_C(0x0FA039FE), UINT32_C(0x806B50C1), UINT32_C(0xAD1DC7C0), UINT32_C(0x0C6AB58F), UINT32_C(0xA78992C2), UINT32_C(0xFBE348EA), UINT32_C(0x7D58FDA7)}}, {{UINT32_C(0x6F4DBDFC), UINT32_C(0x07E65277), UINT32_C(0xE4E35AA2), UINT32_C(0xC35157C0), UINT32_C(0xFAF9CF8D), UINT32_C(0x9844955D), UINT32_C(0xE577A918), UINT32_C(0xD1832D2F), UINT32_C(0x212A678C), UINT32_C(0xCDD6CCFD), UINT32_C(0x262F2BC7), UINT32_C(0x19406763), UINT32_C(0x7DCF82E3), UINT32_C(0x1B5FE0FC), UINT32_C(0x28083B97), UINT32_C(0x72FCB512)}, {UINT32_C(0xCAE3C67A), UINT32_C(0x2EB13174), UINT32_C(0x28F8CB44), UINT32_C(0x571DBD35), UINT32_C(0x7B2F56B1), UINT32_C(0x3F3514DA), UINT32_C(0x2E1D4CD8), UINT32_C(0xC5906697), UINT32_C(0x3709FD27), UINT32_C(0x9F9589DA), UINT32_C(0xDCF0E714), UINT32_C(0x539CBA98), UINT32_C(0x36D31BAC), UINT32_C(0xC6FDBE82), UINT32_C(0x8860078E), UINT32_C(0x22501C25)}}, }, { {{UINT32_C(0xE7462A35), UINT32_C(0xB6BAA4C5), UINT32_C(0x2DE0E694), UINT32_C(0x4CABEF23), UINT32_C(0x67A94587), UINT32_C(0xE595F2CE), UINT32_C(0x65DE13EF), UINT32_C(0x0B4D6B80), UINT32_C(0xB88601AA), UINT32_C(0x6ED1FA63), UINT32_C(0x254800DF), UINT32_C(0x63DAF3EF), UINT32_C(0x6EDECF60), UINT32_C(0x15F07C6B), UINT32_C(0x49F82DF6), UINT32_C(0x746CB00F)}, {UINT32_C(0xF95DC407), UINT32_C(0x4860833F), UINT32_C(0xD4D68D59), UINT32_C(0x245FDFB1), UINT32_C(0x28C585C1), UINT32_C(0xFD7E1346), UINT32_C(0xAA744D74), UINT32_C(0x3307AAE7), UINT32_C(0x27C71537), UINT32_C(0xAB21F1D5), UINT32_C(0x541ADB51), UINT32_C(0x1BED3B9C), UINT32_C(0x0B804584), UINT32_C(0x48E65628), UINT32_C(0x96C62E82), UINT32_C(0x10213DC3)}}, {{UINT32_C(0x9E900795), UINT32_C(0xA971A321), UINT32_C(0xA28AD250), UINT32_C(0x41151E65), UINT32_C(0xB46F0286), UINT32_C(0x88FBF84C), UINT32_C(0x2C5AA2BF), UINT32_C(0xCE5E34E3), UINT32_C(0xFE74FBD6), UINT32_C(0xC30F0784), UINT32_C(0x9DDDC5BB), UINT32_C(0xA19ACA51), UINT32_C(0xD954B6AF), UINT32_C(0x30CB6369), UINT32_C(0x1BA9F34A), UINT32_C(0x20C72B2B)}, {UINT32_C(0x421721EE), UINT32_C(0x0D9F6CC9), UINT32_C(0x701F3853), UINT32_C(0x5239E3D2), UINT32_C(0x10A37D0D), UINT32_C(0x48CF795D), UINT32_C(0xC1454415), UINT32_C(0x2822ACF8), UINT32_C(0xF9392C27), UINT32_C(0x9EF24913), UINT32_C(0x33F3F273), UINT32_C(0x93178976), UINT32_C(0xAADFE5DB), UINT32_C(0x0AD1CAB2), UINT32_C(0x02019622), UINT32_C(0x24541951)}}, {{UINT32_C(0x122FE6A1), UINT32_C(0x577E8E89), UINT32_C(0x29DCABC8), UINT32_C(0xDFED3EF0), UINT32_C(0x1F1EC613), UINT32_C(0x91B0AE21), UINT32_C(0x43EC585C), UINT32_C(0xF4FB2E9F), UINT32_C(0x5AFDC7FC), UINT32_C(0x402F8D43), UINT32_C(0x3BFC6DDF), UINT32_C(0x7DF6E3F4), UINT32_C(0x2094F2CE), UINT32_C(0x4B14B20B), UINT32_C(0xC9F3FCE9), UINT32_C(0x6621FA23)}, {UINT32_C(0x61482134), UINT32_C(0xC167636B), UINT32_C(0xBD89AA34), UINT32_C(0xC2D96AF4), UINT32_C(0x77A1383E), UINT32_C(0x4D19C547), UINT32_C(0x994B20EC), UINT32_C(0x86476C72), UINT32_C(0x3611027E), UINT32_C(0xD71188DA), UINT32_C(0xBFA77EA0), UINT32_C(0xEEB9CB25), UINT32_C(0x7A9FFDFB), UINT32_C(0x63E03706), UINT32_C(0x9E1F711D), UINT32_C(0x52FBC735)}}, {{UINT32_C(0x9DCD39C8), UINT32_C(0x4D58058F), UINT32_C(0x560A57E3), UINT32_C(0x742DCAC8), UINT32_C(0xC40593C3), UINT32_C(0x51314E8A), UINT32_C(0xBBE9F40F), UINT32_C(0xAA35CAF4), UINT32_C(0x7B4DF87C), UINT32_C(0xD0D06ACC), UINT32_C(0x897586CC), UINT32_C(0xE02B48CB), UINT32_C(0x9F14AB3B), UINT32_C(0x30AB25AB), UINT32_C(0x2DCFFD42), UINT32_C(0x77B9D8A2)}, {UINT32_C(0x43F00508), UINT32_C(0xDE1678E7), UINT32_C(0xE59D0799), UINT32_C(0x2F82D94E), UINT32_C(0x7D85FF61), UINT32_C(0x1D68DC5F), UINT32_C(0xA577E85E), UINT32_C(0xCCD286EA), UINT32_C(0x05653CE9), UINT32_C(0x78202172), UINT32_C(0x4B096045), UINT32_C(0x80BCF42C), UINT32_C(0x8D9DC78C), UINT32_C(0x983AC1DA), UINT32_C(0x757F008E), UINT32_C(0x48ADE8D1)}}, {{UINT32_C(0xF131C430), UINT32_C(0xFE9CADC1), UINT32_C(0xD4ACF7F9), UINT32_C(0xCB4FACAE), UINT32_C(0x4B81AA0C), UINT32_C(0xA75B35B6), UINT32_C(0x6132294C), UINT32_C(0xDB73BF2A), UINT32_C(0x35FC4FBC), UINT32_C(0xDC1998EE), UINT32_C(0xF1A96BA6), UINT32_C(0x1125CF55), UINT32_C(0x1AC0769D), UINT32_C(0x800577A8), UINT32_C(0xE4CDAC1C), UINT32_C(0x0AF21977)}, {UINT32_C(0x91DD37F9), UINT32_C(0x12CAE81D), UINT32_C(0x1A432775), UINT32_C(0x81F5BAF6), UINT32_C(0x81CBCB7D), UINT32_C(0x62A87C5D), UINT32_C(0x2D311E47), UINT32_C(0x781596EF), UINT32_C(0x0EA6CE86), UINT32_C(0xADA41A24), UINT32_C(0x9198BFEE), UINT32_C(0x064E561D), UINT32_C(0x8784FC32), UINT32_C(0xD2EBB0D7), UINT32_C(0xE00D527A), UINT32_C(0x60F7F749)}}, {{UINT32_C(0xF9F5101B), UINT32_C(0xB6220879), UINT32_C(0xED750B14), UINT32_C(0x8E51E911), UINT32_C(0x56B8B8BB), UINT32_C(0x5A0FF851), UINT32_C(0xE97F0F1B), UINT32_C(0x6EFDB4CC), UINT32_C(0xCFEE47C1), UINT32_C(0xEF4E3272), UINT32_C(0xDB73FA56), UINT32_C(0xFB33D3FF), UINT32_C(0xD5C182A7), UINT32_C(0x8702D241), UINT32_C(0xB061F4C9), UINT32_C(0x1342C905)}, {UINT32_C(0x40B3B920), UINT32_C(0xCCFDFF8B), UINT32_C(0x234F25BE), UINT32_C(0xE01ADAA1), UINT32_C(0xCA98B24D), UINT32_C(0x6EE2AFD9), UINT32_C(0x933CF022), UINT32_C(0x833C8017), UINT32_C(0x8B7E88DA), UINT32_C(0x9446CDC8), UINT32_C(0x0252B0C4), UINT32_C(0x08A83DEB), UINT32_C(0x983B95BF), UINT32_C(0x5AFAE687), UINT32_C(0xBBF76F93), UINT32_C(0x417A1691)}}, {{UINT32_C(0xE270155C), UINT32_C(0xF1100073), UINT32_C(0x37D73458), UINT32_C(0x913B27AB), UINT32_C(0xF8799368), UINT32_C(0x0723B646), UINT32_C(0xB8599816), UINT32_C(0x891C7858), UINT32_C(0xAD13A257), UINT32_C(0xBDCF3C7A), UINT32_C(0x106E5B5A), UINT32_C(0xF473BEE8), UINT32_C(0x27722F06), UINT32_C(0xB093D484), UINT32_C(0x8E4CF84D), UINT32_C(0x33895F5C)}, {UINT32_C(0x1A92A242), UINT32_C(0x530F59FE), UINT32_C(0xD5444E38), UINT32_C(0x703FDC05), UINT32_C(0xA9B55C56), UINT32_C(0xEC6FB903), UINT32_C(0xECEFEF64), UINT32_C(0x102929BA), UINT32_C(0xBFC1F153), UINT32_C(0x76B9B329), UINT32_C(0x7A32A9E4), UINT32_C(0x3F794AD7), UINT32_C(0xAD9D9F76), UINT32_C(0x9A344BD7), UINT32_C(0x8F22FE76), UINT32_C(0x1281308B)}}, {{UINT32_C(0x55D6DFC4), UINT32_C(0xDBAD1D04), UINT32_C(0x78FB03A6), UINT32_C(0x1674C09F), UINT32_C(0x04F4EB90), UINT32_C(0x10F038F0), UINT32_C(0xC933F8C3), UINT32_C(0xD6F8CEBA), UINT32_C(0x322E4AE8), UINT32_C(0x6D3018D6), UINT32_C(0x65FB0400), UINT32_C(0x3C0E8DD8), UINT32_C(0xF8603F6E), UINT32_C(0x0E04FEA5), UINT32_C(0xCF3D2FBA), UINT32_C(0x417F6C35)}, {UINT32_C(0xC6DBF972), UINT32_C(0x4F62D458), UINT32_C(0x3C69018C), UINT32_C(0x1D66CC0B), UINT32_C(0x4F1297A2), UINT32_C(0xDB741BC6), UINT32_C(0xDDEC7115), UINT32_C(0x7EEDA8D5), UINT32_C(0x9A910CA8), UINT32_C(0x0B5D07B3), UINT32_C(0x3D0FA9E7), UINT32_C(0x5D74BC7E), UINT32_C(0x4DC25E76), UINT32_C(0x0F3D1063), UINT32_C(0xDDD0F35E), UINT32_C(0x7BDF3F13)}}, {{UINT32_C(0x49A8E647), UINT32_C(0xF4B8E8F9), UINT32_C(0xC9C7F249), UINT32_C(0xD2045FF4), UINT32_C(0x1DFCE331), UINT32_C(0xA73E2073), UINT32_C(0x60186A35), UINT32_C(0x538FE0C2), UINT32_C(0xD44D55DC), UINT32_C(0xF6931385), UINT32_C(0xBD2D5D5C), UINT32_C(0xAA0FAE8B), UINT32_C(0x0CE9E7B7), UINT32_C(0xA1DF2451), UINT32_C(0xF6E915DF), UINT32_C(0x453B0239)}, {UINT32_C(0x4BD5604D), UINT32_C(0x92E689FD), UINT32_C(0xEA5FB1A5), UINT32_C(0x302F7B7C), UINT32_C(0xC6C18BD5), UINT32_C(0x9A065527), UINT32_C(0x38018472), UINT32_C(0xB6B93023), UINT32_C(0x775EFE83), UINT32_C(0xEC4F8E47), UINT32_C(0x5D557E9F), UINT32_C(0x5EFED6CD), UINT32_C(0xF32DB82A), UINT32_C(0x883149A7), UINT32_C(0xA83BA057), UINT32_C(0x32BB4DD5)}}, {{UINT32_C(0x8CE494A6), UINT32_C(0xB45FB239), UINT32_C(0x015A171F), UINT32_C(0x6E80D72B), UINT32_C(0x846810F0), UINT32_C(0xE17A3D2B), UINT32_C(0xC689398E), UINT32_C(0x86A2C703), UINT32_C(0xF84177D3), UINT32_C(0x163CC0EA), UINT32_C(0x08485195), UINT32_C(0xCFC54536), UINT32_C(0xAEA228CD), UINT32_C(0x49ED48E3), UINT32_C(0x5E05A3FA), UINT32_C(0x51D4CD9A)}, {UINT32_C(0x0A28C1F0), UINT32_C(0xD75C938E), UINT32_C(0x0D986264), UINT32_C(0xE18FCBDB), UINT32_C(0x0129A474), UINT32_C(0x0E29546B), UINT32_C(0xB4E6503E), UINT32_C(0x718C5F10), UINT32_C(0xE89FFD06), UINT32_C(0x5BFFEF16), UINT32_C(0x7ABFEFBE), UINT32_C(0xD87F3E8D), UINT32_C(0xB05607DF), UINT32_C(0x3E6EEBD8), UINT32_C(0x030FC02D), UINT32_C(0x1B3135D4)}}, {{UINT32_C(0xAFD466ED), UINT32_C(0x1FCA9768), UINT32_C(0xDDE4FE72), UINT32_C(0x3711CD99), UINT32_C(0xA0BC2449), UINT32_C(0xFA6A96FB), UINT32_C(0xDF617AD1), UINT32_C(0xB4E3322D), UINT32_C(0x38997D42), UINT32_C(0x652400B5), UINT32_C(0x5869744E), UINT32_C(0xE4033FDD), UINT32_C(0xF8CF5A3F), UINT32_C(0x5E56CF67), UINT32_C(0x39950DFD), UINT32_C(0x0B68F418)}, {UINT32_C(0x921A1064), UINT32_C(0x31F316B3), UINT32_C(0x860AB95E), UINT32_C(0x084CF2C3), UINT32_C(0x33A08792), UINT32_C(0x4FAE7CBD), UINT32_C(0x5C2F1F4F), UINT32_C(0x13E887AE), UINT32_C(0x5A2C1393), UINT32_C(0x1B4D941C), UINT32_C(0xBFDDC322), UINT32_C(0xE7043946), UINT32_C(0xA801A880), UINT32_C(0x2D73CD5B), UINT32_C(0x45019EB0), UINT32_C(0x6CDC6BC2)}}, {{UINT32_C(0x72A9BDDF), UINT32_C(0x68D9AE82), UINT32_C(0xC4F79A39), UINT32_C(0x3EA7B5D0), UINT32_C(0xBFA9189D), UINT32_C(0x8A9E525D), UINT32_C(0x08088070), UINT32_C(0xC4BCDB4F), UINT32_C(0xF0019D99), UINT32_C(0xD4F1B3D0), UINT32_C(0x3A21C513), UINT32_C(0xCD3981D0), UINT32_C(0x51146A17), UINT32_C(0x4A85B07A), UINT32_C(0xAC9373DE), UINT32_C(0x44E11FCB)}, {UINT32_C(0x406B1F1D), UINT32_C(0x45C28B85), UINT32_C(0xA598A7AB), UINT32_C(0x7669767B), UINT32_C(0xCABA790E), UINT32_C(0xE4DC8F54), UINT32_C(0x4002264B), UINT32_C(0x7259E49F), UINT32_C(0x78A9F0E3), UINT32_C(0x54142E6D), UINT32_C(0x2D74E9B1), UINT32_C(0xFC384317), UINT32_C(0x471BA3C1), UINT32_C(0x949A6E31), UINT32_C(0x269DBD46), UINT32_C(0x2196E341)}}, {{UINT32_C(0x1C85C152), UINT32_C(0xF090B214), UINT32_C(0x2980953D), UINT32_C(0xC66553E0), UINT32_C(0x908B9243), UINT32_C(0x50050906), UINT32_C(0x18F1B4C3), UINT32_C(0x489B07B8), UINT32_C(0x4A6A7071), UINT32_C(0x39C781DE), UINT32_C(0x15FAF2A8), UINT32_C(0xC3FCC6B4), UINT32_C(0xDF30D339), UINT32_C(0xC9A9D650), UINT32_C(0x0DC87B05), UINT32_C(0x2BCF8969)}, {UINT32_C(0x0D36DD59), UINT32_C(0x6BD11101), UINT32_C(0xAF38D4C5), UINT32_C(0x9AFD4507), UINT32_C(0x1FEE36E3), UINT32_C(0xE9A345A3), UINT32_C(0x37454BA6), UINT32_C(0x141074A8), UINT32_C(0xF603533F), UINT32_C(0x89747031), UINT32_C(0x897F9FA2), UINT32_C(0xAB75320E), UINT32_C(0x594481A4), UINT32_C(0x52927CDF), UINT32_C(0xBC2244A3), UINT32_C(0x2C8FB10B)}}, {{UINT32_C(0x1C40C77E), UINT32_C(0x456358B8), UINT32_C(0x1732ED35), UINT32_C(0x26A15EA8), UINT32_C(0x9AEA6548), UINT32_C(0x36F26CBB), UINT32_C(0xD7FAD4C1), UINT32_C(0x6589AC51), UINT32_C(0x9067988D), UINT32_C(0x4804A1BC), UINT32_C(0x4219111A), UINT32_C(0x633F203E), UINT32_C(0x123C4BBE), UINT32_C(0xCD90D01C), UINT32_C(0x82519788), UINT32_C(0x617EEF27)}, {UINT32_C(0x9DDFBBB9), UINT32_C(0x8A7F22A7), UINT32_C(0xC8F9E873), UINT32_C(0xF8CEDC4E), UINT32_C(0xF8B00FFD), UINT32_C(0x547A5995), UINT32_C(0x3132F91D), UINT32_C(0xC6780AC5), UINT32_C(0x6DD34140), UINT32_C(0xAD711350), UINT32_C(0x83D8A3E6), UINT32_C(0x1C0A71EC), UINT32_C(0x86E0466B), UINT32_C(0x687D67C7), UINT32_C(0xBD67492F), UINT32_C(0x7CE57B02)}}, {{UINT32_C(0xC4A0F3CF), UINT32_C(0xEF5A0FEC), UINT32_C(0xE3C2A79F), UINT32_C(0xCEB2194B), UINT32_C(0xD37AFB50), UINT32_C(0x7371FF56), UINT32_C(0x68CFB693), UINT32_C(0x881C254A), UINT32_C(0x7A5B61F5), UINT32_C(0x31F411B1), UINT32_C(0x13E15910), UINT32_C(0xC2141EEB), UINT32_C(0x75C6566F), UINT32_C(0xD4B5D015), UINT32_C(0x60C17F10), UINT32_C(0x1335132C)}, {UINT32_C(0xF9EED825), UINT32_C(0x49A2D9CB), UINT32_C(0xE7C41C5A), UINT32_C(0x0514441A), UINT32_C(0x636BA847), UINT32_C(0xCE9F19F7), UINT32_C(0x44F44B74), UINT32_C(0x55175057), UINT32_C(0xD26F9DEA), UINT32_C(0x0ED9CB8A), UINT32_C(0x84BD07A6), UINT32_C(0xBBB248C0), UINT32_C(0x9CD8A6C1), UINT32_C(0x2C867FB1), UINT32_C(0x2186DB7C), UINT32_C(0x230B4122)}}, {{UINT32_C(0xBC6B2647), UINT32_C(0xC59AF140), UINT32_C(0xD5CA9D30), UINT32_C(0xCD781156), UINT32_C(0x04C5C668), UINT32_C(0x479CFCF8), UINT32_C(0xB08BEEC5), UINT32_C(0xEAC4A5C0), UINT32_C(0x6C67636A), UINT32_C(0x8772B60E), UINT32_C(0x631A6EF3), UINT32_C(0x99266F13), UINT32_C(0x0D368B05), UINT32_C(0x4DADE9DE), UINT32_C(0xE42CB970), UINT32_C(0x2F9488CB)}, {UINT32_C(0xB6FB1965), UINT32_C(0x4882B1D4), UINT32_C(0xAF24AD57), UINT32_C(0x6423BBB4), UINT32_C(0xC406CF8F), UINT32_C(0xE52B487E), UINT32_C(0xD49D4935), UINT32_C(0x502802AD), UINT32_C(0x24D5128F), UINT32_C(0x6832E216), UINT32_C(0x670EAE40), UINT32_C(0x42190CD4), UINT32_C(0x39258F40), UINT32_C(0xA2D4FDB4), UINT32_C(0xC5CADEEA), UINT32_C(0x6127E350)}}, }, { {{UINT32_C(0x896F045C), UINT32_C(0x160D95BD), UINT32_C(0x406D8CA3), UINT32_C(0xBB8AA2C5), UINT32_C(0x94F274E5), UINT32_C(0x1B4E10B3), UINT32_C(0x6332DB6B), UINT32_C(0xE6D30544), UINT32_C(0x5AAE23C5), UINT32_C(0x95250D6A), UINT32_C(0xFC831AC1), UINT32_C(0x67458318), UINT32_C(0x63510D9A), UINT32_C(0x05D21C9B), UINT32_C(0x20F2A3CC), UINT32_C(0x2416562C)}, {UINT32_C(0xD6DE2B6D), UINT32_C(0x8B666C7A), UINT32_C(0xE54B6B3C), UINT32_C(0xC49D98D0), UINT32_C(0x90558A8E), UINT32_C(0x73315C3F), UINT32_C(0x44E631C4), UINT32_C(0x212910AD), UINT32_C(0xBB053E42), UINT32_C(0x7D2EBB7E), UINT32_C(0x4FEF86C3), UINT32_C(0x396AD261), UINT32_C(0x5E410BED), UINT32_C(0x90DA355C), UINT32_C(0x43C9183F), UINT32_C(0x344A24DD)}}, {{UINT32_C(0x6AC2509A), UINT32_C(0x50971549), UINT32_C(0xFDA9F8AF), UINT32_C(0xFCAF5541), UINT32_C(0xB3F2B1F5), UINT32_C(0xDDFDC6A9), UINT32_C(0xB7DA428B), UINT32_C(0xBCA36B59), UINT32_C(0x357DCA59), UINT32_C(0xB55602BE), UINT32_C(0xCE692E5D), UINT32_C(0x803C92A1), UINT32_C(0x6DC19967), UINT32_C(0xCD723C3D), UINT32_C(0xF741820F), UINT32_C(0x3EE4BC03)}, {UINT32_C(0xBB103F3B), UINT32_C(0x70113C23), UINT32_C(0x36553268), UINT32_C(0x35FA9144), UINT32_C(0x1C026E84), UINT32_C(0x505B7917), UINT32_C(0x1ED89D68), UINT32_C(0xA43E1256), UINT32_C(0xC87289BE), UINT32_C(0xC8AE5CFB), UINT32_C(0x2B9C5072), UINT32_C(0xD573E0CF), UINT32_C(0x475FA7A4), UINT32_C(0x709B1C4B), UINT32_C(0x81D07D11), UINT32_C(0x505ADF59)}}, {{UINT32_C(0xA4AFD6AC), UINT32_C(0x1BC79E6A), UINT32_C(0x26866C93), UINT32_C(0x156C1B36), UINT32_C(0x90A70847), UINT32_C(0x6E4F2FB6), UINT32_C(0xE37556C2), UINT32_C(0x745824E0), UINT32_C(0x5BF6585C), UINT32_C(0x384788E8), UINT32_C(0x87EFA785), UINT32_C(0xAD6A726B), UINT32_C(0x40FEB98E), UINT32_C(0xD93A3B7E), UINT32_C(0x282EB335), UINT32_C(0x4BA6A352)}, {UINT32_C(0x937FA288), UINT32_C(0x36EE7727), UINT32_C(0xC0513862), UINT32_C(0xF1334DD2), UINT32_C(0x30FB68F5), UINT32_C(0x7AF1B32E), UINT32_C(0x3196B14D), UINT32_C(0x2B0BAEFE), UINT32_C(0x21E84FA0), UINT32_C(0x5E7BA8D7), UINT32_C(0x256AE375), UINT32_C(0x4DA767CD), UINT32_C(0xE0F658DB), UINT32_C(0xA8D467F8), UINT32_C(0x20DB1855), UINT32_C(0x7709039E)}}, {{UINT32_C(0xB26EE5F4), UINT32_C(0x6155BDC4), UINT32_C(0xC48A3913), UINT32_C(0xF0CFD2B7), UINT32_C(0x63BFB3E5), UINT32_C(0x75AABCA1), UINT32_C(0xC525DA22), UINT32_C(0x9232746D), UINT32_C(0x333F2B14), UINT32_C(0x5F00A6CD), UINT32_C(0xF8ECA91E), UINT32_C(0xB3216C2B), UINT32_C(0xF6E4FF19), UINT32_C(0x9A1F1EE8), UINT32_C(0xB0074F5D), UINT32_C(0x3C76ADCF)}, {UINT32_C(0x45309788), UINT32_C(0xA414BFFB), UINT32_C(0x86539F4F), UINT32_C(0x83EF3C3F), UINT32_C(0x576C4A69), UINT32_C(0x0AB8CEEA), UINT32_C(0x13BEF0E4), UINT32_C(0xA01CC458), UINT32_C(0xEA181987), UINT32_C(0x855B7F00), UINT32_C(0xE30F184F), UINT32_C(0xA97F14A9), UINT32_C(0x554D467D), UINT32_C(0xB17DF2F0), UINT32_C(0xD6C8100D), UINT32_C(0x29F0A944)}}, {{UINT32_C(0xC7D083C9), UINT32_C(0x57796871), UINT32_C(0x0DA74190), UINT32_C(0xB83CD7FF), UINT32_C(0x97DC4A71), UINT32_C(0xA077968F), UINT32_C(0x08ACDC2D), UINT32_C(0xC27429EC), UINT32_C(0x2B52DFEE), UINT32_C(0x04996DF6), UINT32_C(0x1C182059), UINT32_C(0x13511C3A), UINT32_C(0xCEFA8F7F), UINT32_C(0xCC27218A), UINT32_C(0xA0E51331), UINT32_C(0x0757BD45)}, {UINT32_C(0x453DD761), UINT32_C(0x05F1D65D), UINT32_C(0xF3C5F5DF), UINT32_C(0x71D57417), UINT32_C(0x38FA1AE7), UINT32_C(0x0C1E2043), UINT32_C(0x36E7BB29), UINT32_C(0xA68A6F2E), UINT32_C(0x221EA420), UINT32_C(0x3F3CA00F), UINT32_C(0x1484F503), UINT32_C(0x840830F6), UINT32_C(0x18380FC5), UINT32_C(0xA011EA61), UINT32_C(0xD4D5F0B4), UINT32_C(0x63E08325)}}, {{UINT32_C(0xA5352F43), UINT32_C(0xAC4F176A), UINT32_C(0xF5346C89), UINT32_C(0x2C0A1D79), UINT32_C(0xEA7357BC), UINT32_C(0x3F16B2EC), UINT32_C(0x9CB644F4), UINT32_C(0x1FE6E823), UINT32_C(0xE2C9912E), UINT32_C(0x54E68BB4), UINT32_C(0x98E581AE), UINT32_C(0x82B35E8E), UINT32_C(0xD6611B81), UINT32_C(0xD855E028), UINT32_C(0xA8C7ABE1), UINT32_C(0x3D420591)}, {UINT32_C(0xA4D7C106), UINT32_C(0x71326CB4), UINT32_C(0x7E21F3EA), UINT32_C(0x5BA8407F), UINT32_C(0x40DA0D53), UINT32_C(0xD33581D7), UINT32_C(0x0C1E7D99), UINT32_C(0x7AB20546), UINT32_C(0xCB0075B5), UINT32_C(0x71438057), UINT32_C(0xCB952FEE), UINT32_C(0x2F9AD50C), UINT32_C(0x8B942A98), UINT32_C(0xFDCF4A12), UINT32_C(0xD8BB5BE5), UINT32_C(0x025CFA1B)}}, {{UINT32_C(0x27BF5931), UINT32_C(0x2BF4ABF7), UINT32_C(0xD080A1BA), UINT32_C(0x78BD4315), UINT32_C(0xF12B24D0), UINT32_C(0x1EB55607), UINT32_C(0x8E8BAB49), UINT32_C(0xB7BC25D6), UINT32_C(0x60E68A74), UINT32_C(0x01B666AE), UINT32_C(0x9058E10D), UINT32_C(0x9E1E7417), UINT32_C(0xAB695D1E), UINT32_C(0x5D2493D0), UINT32_C(0x271B7FBF), UINT32_C(0x714D7BB5)}, {UINT32_C(0x3BD07521), UINT32_C(0x869B52F6), UINT32_C(0x038E8A90), UINT32_C(0x3413A47C), UINT32_C(0xC2B6D60D), UINT32_C(0x2B7724D4), UINT32_C(0xB984B181), UINT32_C(0xD500A48C), UINT32_C(0x99ED9E13), UINT32_C(0xDCD82594), UINT32_C(0x09397DD9), UINT32_C(0x33C480BA), UINT32_C(0xB36CB025), UINT32_C(0xF98DA63D), UINT32_C(0x0C33FD92), UINT32_C(0x0593108A)}}, {{UINT32_C(0xF01AB893), UINT32_C(0xE3BBCCB7), UINT32_C(0x6CE61B0B), UINT32_C(0x3D8D3BD2), UINT32_C(0xFC00DB91), UINT32_C(0xB030CE07), UINT32_C(0xAA51D38B), UINT32_C(0x78ADD938), UINT32_C(0x6CAF34CC), UINT32_C(0x8FA75797), UINT32_C(0x494B4CCE), UINT32_C(0x28C34C7E), UINT32_C(0x79091116), UINT32_C(0xECD5F385), UINT32_C(0x3512B9B1), UINT32_C(0x455FD953)}, {UINT32_C(0x3CD57BE0), UINT32_C(0x1D2150EF), UINT32_C(0x43CEF565), UINT32_C(0xF130B2A0), UINT32_C(0xFA4A4082), UINT32_C(0x1146159C), UINT32_C(0xD6BB7E30), UINT32_C(0xDE949D6A), UINT32_C(0x40A2A53B), UINT32_C(0xEB8984ED), UINT32_C(0xB920CDBE), UINT32_C(0xB9E72FE4), UINT32_C(0xB43A51A9), UINT32_C(0xA507DDCA), UINT32_C(0x6C7C6F7F), UINT32_C(0x3EB7D79F)}}, {{UINT32_C(0xDD356637), UINT32_C(0xDF75FE14), UINT32_C(0xFBC9E9DB), UINT32_C(0x4B21206B), UINT32_C(0xA729BB2F), UINT32_C(0x0A33BCF3), UINT32_C(0x686F49F2), UINT32_C(0xA61A363C), UINT32_C(0x34BD498C), UINT32_C(0x426A4603), UINT32_C(0x705F7CD3), UINT32_C(0xE87EDA60), UINT32_C(0xE633E9A7), UINT32_C(0xF9D24A5A), UINT32_C(0xA4325C1D), UINT32_C(0x52063D93)}, {UINT32_C(0x23EEB132), UINT32_C(0x02890EEC), UINT32_C(0x5D39DDFD), UINT32_C(0x00430E86), UINT32_C(0xA1E47638), UINT32_C(0x118E18F6), UINT32_C(0x5806CD2F), UINT32_C(0xBB38E8C7), UINT32_C(0xF7CE9486), UINT32_C(0xB7E5375E), UINT32_C(0xFDE35E82), UINT32_C(0x73DAA9EB), UINT32_C(0x82070D71), UINT32_C(0x117E4761), UINT32_C(0x915BBD57), UINT32_C(0x317DF0BE)}}, {{UINT32_C(0x25B74127), UINT32_C(0xF6915487), UINT32_C(0x18162D83), UINT32_C(0x4333E7F5), UINT32_C(0xA429665E), UINT32_C(0xB435BEF9), UINT32_C(0x20B9D358), UINT32_C(0xEEE9B7B7), UINT32_C(0xF8D1D44F), UINT32_C(0x436ABB8B), UINT32_C(0xBF38B81F), UINT32_C(0xD1219F9A), UINT32_C(0x9035DE38), UINT32_C(0x7CEE7063), UINT32_C(0xB341FFDA), UINT32_C(0x34129008)}, {UINT32_C(0x99745C5B), UINT32_C(0x6595A1B0), UINT32_C(0x2C0685BB), UINT32_C(0x07DF297A), UINT32_C(0x998110AD), UINT32_C(0xEE85C714), UINT32_C(0xE2A8AD4E), UINT32_C(0xD251E587), UINT32_C(0xEC4D02C1), UINT32_C(0x9A38F9DC), UINT32_C(0xCCDAF4C8), UINT32_C(0x60DA566F), UINT32_C(0x90B08CA2), UINT32_C(0x1BD9A21A), UINT32_C(0xE97F4EA0), UINT32_C(0x6D9414AE)}}, {{UINT32_C(0x74973250), UINT32_C(0xCBFAA861), UINT32_C(0xAB15AA60), UINT32_C(0xC58A0F6B), UINT32_C(0xFDB7A15D), UINT32_C(0xC00F822D), UINT32_C(0xFA067DEF), UINT32_C(0xAEA74910), UINT32_C(0x81F3EFC5), UINT32_C(0x3750367B), UINT32_C(0xAFC6EC7C), UINT32_C(0x3183E3E8), UINT32_C(0xDA10CD9F), UINT32_C(0xFB62717A), UINT32_C(0x6EEC9774), UINT32_C(0x40431C1D)}, {UINT32_C(0x05914824), UINT32_C(0x423E7310), UINT32_C(0x9DE23908), UINT32_C(0xA4F7A978), UINT32_C(0x7D5D18AA), UINT32_C(0xC151A73C), UINT32_C(0xED1EAC6B), UINT32_C(0x1B85B7CB), UINT32_C(0x075066C4), UINT32_C(0xF25CAF8C), UINT32_C(0x8004809B), UINT32_C(0x99508D70), UINT32_C(0x212271C6), UINT32_C(0x6BEDC19F), UINT32_C(0x77A5AE84), UINT32_C(0x2CCDAB39)}}, {{UINT32_C(0x23389925), UINT32_C(0x14203BEC), UINT32_C(0xCF059388), UINT32_C(0xFBCA94CF), UINT32_C(0x8124F30F), UINT32_C(0x17626B40), UINT32_C(0xC1C98EB6), UINT32_C(0x2208F6E5), UINT32_C(0x961F4C48), UINT32_C(0x9B385200), UINT32_C(0x002E5C7A), UINT32_C(0x1C9F33E8), UINT32_C(0x58B6DD91), UINT32_C(0xC426A940), UINT32_C(0x1CEC7286), UINT32_C(0x6DF740E5)}, {UINT32_C(0x87E56C60), UINT32_C(0xF9397986), UINT32_C(0x587728F6), UINT32_C(0x84425935), UINT32_C(0x2FE267FB), UINT32_C(0x394A3A01), UINT32_C(0xD451CD8E), UINT32_C(0xB9C6481F), UINT32_C(0x5340AAC8), UINT32_C(0xA6AB4F4B), UINT32_C(0x9B85FF63), UINT32_C(0xD7FD9675), UINT32_C(0xAC5AEC86), UINT32_C(0x3D3AE591), UINT32_C(0xB96673F7), UINT32_C(0x43283823)}}, {{UINT32_C(0x74E61BA9), UINT32_C(0x24214D23), UINT32_C(0xF69ED123), UINT32_C(0xB41CFB58), UINT32_C(0x54F5F407), UINT32_C(0x8E91FE02), UINT32_C(0x4F84200B), UINT32_C(0xFB989936), UINT32_C(0x024E62F0), UINT32_C(0xAAE985CE), UINT32_C(0xA0BB20F6), UINT32_C(0x896815ED), UINT32_C(0x3DF1E5BC), UINT32_C(0x3536095B), UINT32_C(0x9E1EB847), UINT32_C(0x31C5AFA0)}, {UINT32_C(0xC2B9B4F0), UINT32_C(0x5C32910F), UINT32_C(0x50DBB2E8), UINT32_C(0x32ABA814), UINT32_C(0x6AAF8A27), UINT32_C(0x17E2B52F), UINT32_C(0x111CD6C3), UINT32_C(0x142E63AC), UINT32_C(0x22B6D227), UINT32_C(0x15D5F297), UINT32_C(0x3C14CE28), UINT32_C(0x22380A78), UINT32_C(0x5249F727), UINT32_C(0x29F4951C), UINT32_C(0x274839DE), UINT32_C(0x24C25987)}}, {{UINT32_C(0x14C6CA73), UINT32_C(0x13F552E9), UINT32_C(0x0B154556), UINT32_C(0xCE965927), UINT32_C(0x83EE34E2), UINT32_C(0x330E6D59), UINT32_C(0xE8035AD6), UINT32_C(0xFB7B6051), UINT32_C(0x5B2D081D), UINT32_C(0xC58FBCA8), UINT32_C(0x91D78C8E), UINT32_C(0x254FEDD1), UINT32_C(0xCF877F74), UINT32_C(0x0438FF98), UINT32_C(0x8BB12DC9), UINT32_C(0x479CEE4A)}, {UINT32_C(0x7A0CBCDD), UINT32_C(0x1855A1C3), UINT32_C(0x000FFC35), UINT32_C(0x3667FFBB), UINT32_C(0xF880E9C0), UINT32_C(0xC053A4BF), UINT32_C(0x05AEFE0E), UINT32_C(0xF8E1BCC1), UINT32_C(0x0B65DBBC), UINT32_C(0x1AFEE0F2), UINT32_C(0x9E945F96), UINT32_C(0x63ACB97B), UINT32_C(0x80B8F0BA), UINT32_C(0xDFC80965), UINT32_C(0xE919BE03), UINT32_C(0x12A145EB)}}, {{UINT32_C(0xC6008C86), UINT32_C(0x8BBD02E8), UINT32_C(0x516BDD2F), UINT32_C(0xB7ACE6C4), UINT32_C(0xE5036467), UINT32_C(0x914AE008), UINT32_C(0x87987C22), UINT32_C(0xD06CF392), UINT32_C(0xC71FFCB4), UINT32_C(0x0F78C12D), UINT32_C(0xCBF7A3B3), UINT32_C(0xB4612FBB), UINT32_C(0x7B711004), UINT32_C(0xB6E69255), UINT32_C(0x1EA5ED45), UINT32_C(0x68CEE9EC)}, {UINT32_C(0x5009FAD4), UINT32_C(0x45E4A8D1), UINT32_C(0xB1458DF2), UINT32_C(0x1D303BD7), UINT32_C(0xBE13EFBE), UINT32_C(0x388523D9), UINT32_C(0xC15147CD), UINT32_C(0xAC9F6D4A), UINT32_C(0x9ECFA216), UINT32_C(0x551F3470), UINT32_C(0xAC9311F4), UINT32_C(0x0FF1AA33), UINT32_C(0xB8D84926), UINT32_C(0x34EED866), UINT32_C(0x72C2CC5C), UINT32_C(0x6BD5ED1C)}}, {{UINT32_C(0x9BDD8695), UINT32_C(0xA283EC1A), UINT32_C(0xA599147A), UINT32_C(0x451A730B), UINT32_C(0xDA71F52B), UINT32_C(0x9B6CC56A), UINT32_C(0x77D55722), UINT32_C(0xB1002CF5), UINT32_C(0x07A8D105), UINT32_C(0x354328CD), UINT32_C(0x7A21026C), UINT32_C(0x86B04CA8), UINT32_C(0x50EC9794), UINT32_C(0x53BADA3D), UINT32_C(0xBBC32D2B), UINT32_C(0x0BD230C8)}, {UINT32_C(0xF7E3C388), UINT32_C(0x322E97FA), UINT32_C(0xAD6FEB4F), UINT32_C(0xA0F06207), UINT32_C(0x9A128AA1), UINT32_C(0x3B05C04E), UINT32_C(0x2214D1AB), UINT32_C(0x05DE3C90), UINT32_C(0xE69A562B), UINT32_C(0x632C92A7), UINT32_C(0x6BEFC0B6), UINT32_C(0xE9F9DEE0), UINT32_C(0x63E05275), UINT32_C(0xD269F547), UINT32_C(0x6C56EC35), UINT32_C(0x04B2E1AB)}}, }, { {{UINT32_C(0xFEB514D4), UINT32_C(0x9DB921FC), UINT32_C(0x485F4F30), UINT32_C(0x00AC3CB4), UINT32_C(0xFED6B15B), UINT32_C(0x0DAFF6F9), UINT32_C(0x9A5E67CB), UINT32_C(0x74C16AF5), UINT32_C(0xA8275392), UINT32_C(0xAA73C142), UINT32_C(0x46A65634), UINT32_C(0xBF53E454), UINT32_C(0x03D87479), UINT32_C(0x2819387F), UINT32_C(0xB495DDDB), UINT32_C(0x4BC9293D)}, {UINT32_C(0x18AE902B), UINT32_C(0x755EC696), UINT32_C(0x1E9C6398), UINT32_C(0x14729175), UINT32_C(0x29508353), UINT32_C(0x82396B3F), UINT32_C(0x08614C4D), UINT32_C(0x932903AE), UINT32_C(0x50BC308A), UINT32_C(0xA4B24D64), UINT32_C(0x88BDA41E), UINT32_C(0xA89DAA2F), UINT32_C(0x84F8A09A), UINT32_C(0x94FC7C46), UINT32_C(0xB4931402), UINT32_C(0x1054948E)}}, {{UINT32_C(0x8A7BA306), UINT32_C(0xF3E0BB8F), UINT32_C(0xA45240B6), UINT32_C(0xC31FDE41), UINT32_C(0xE1755B86), UINT32_C(0x05AD7E1A), UINT32_C(0xBCDD1230), UINT32_C(0xDDBFC1F9), UINT32_C(0xB4F8B744), UINT32_C(0x8006BDBB), UINT32_C(0x8ADE1D9A), UINT32_C(0x86582902), UINT32_C(0x078339E6), UINT32_C(0x8FEFE3B7), UINT32_C(0x46216EA5), UINT32_C(0x342996F4)}, {UINT32_C(0x9B3D4651), UINT32_C(0xE0E1B5B3), UINT32_C(0xAABBE714), UINT32_C(0xB2FC080C), UINT32_C(0xA522F01C), UINT32_C(0xC720BD5E), UINT32_C(0x95F65EBE), UINT32_C(0x11D0543B), UINT32_C(0x484D4123), UINT32_C(0x0880103C), UINT32_C(0x96976F8B), UINT32_C(0xD3F969F3), UINT32_C(0xFDBA1CC1), UINT32_C(0x614855B7), UINT32_C(0xB3EC4B2E), UINT32_C(0x56D4EEFE)}}, {{UINT32_C(0x3894EB7E), UINT32_C(0x029DC51C), UINT32_C(0x9D9876B7), UINT32_C(0xF4AAE878), UINT32_C(0xE2388A33), UINT32_C(0x0FCD3C74), UINT32_C(0x91E31014), UINT32_C(0xAD4C4CF7), UINT32_C(0x11977D22), UINT32_C(0x34F61FF1), UINT32_C(0x7AAFC8D7), UINT32_C(0x984416FD), UINT32_C(0x5DAE6048), UINT32_C(0x4A441361), UINT32_C(0x7B1AFA0C), UINT32_C(0x50D2387B)}, {UINT32_C(0xBB8211DB), UINT32_C(0xD8BE85A1), UINT32_C(0xDD31FED9), UINT32_C(0x195092C3), UINT32_C(0xC1764C23), UINT32_C(0x1F6FE6AB), UINT32_C(0x3F067D75), UINT32_C(0x6A25DE23), UINT32_C(0xA244AA1D), UINT32_C(0x8DB614AA), UINT32_C(0x25B11975), UINT32_C(0xAB0D7473), UINT32_C(0xC036EA42), UINT32_C(0x714067C5), UINT32_C(0x6F3B1132), UINT32_C(0x379935D6)}}, {{UINT32_C(0x8E762CB5), UINT32_C(0x1E8339D4), UINT32_C(0x0DF30209), UINT32_C(0x1857091C), UINT32_C(0x29523926), UINT32_C(0x2E4AC9A7), UINT32_C(0xB7D5A5BB), UINT32_C(0x5983F6D2), UINT32_C(0xF31262FE), UINT32_C(0xA99D8D11), UINT32_C(0xA5CAB7C2), UINT32_C(0xE722945D), UINT32_C(0xE8767862), UINT32_C(0x3196BFBD), UINT32_C(0xA59924F6), UINT32_C(0x43707848)}, {UINT32_C(0xC78D8788), UINT32_C(0x8F0E368A), UINT32_C(0x4BF7DA53), UINT32_C(0x50811A26), UINT32_C(0xDCA664FF), UINT32_C(0x9E0CB8FE), UINT32_C(0x82EDADD5), UINT32_C(0xD2B8DFA0), UINT32_C(0x4A0C48E4), UINT32_C(0x09C45772), UINT32_C(0x22511381), UINT32_C(0x6EC46A5C), UINT32_C(0x313E87CC), UINT32_C(0xF5810BB4), UINT32_C(0xAB5A6BAB), UINT32_C(0x20C5F006)}}, {{UINT32_C(0xD87A06AF), UINT32_C(0x76C6F60A), UINT32_C(0x78FDEBB5), UINT32_C(0xAB7144AD), UINT32_C(0x5646A659), UINT32_C(0x956C36E7), UINT32_C(0xB785E745), UINT32_C(0x5477D0F6), UINT32_C(0x4594BC06), UINT32_C(0xFE9FF232), UINT32_C(0x3039A102), UINT32_C(0x1783B9A0), UINT32_C(0x90DB0AB3), UINT32_C(0xD41E6C5A), UINT32_C(0x7550121F), UINT32_C(0x43749FB4)}, {UINT32_C(0xD17CA661), UINT32_C(0xB7C6D143), UINT32_C(0x2B73135D), UINT32_C(0xB1591F57), UINT32_C(0xC62DFF62), UINT32_C(0xF03232C9), UINT32_C(0xCAF25761), UINT32_C(0xD3D1C629), UINT32_C(0x4B67D224), UINT32_C(0xF633733F), UINT32_C(0x764EBF02), UINT32_C(0xCFBBC0D0), UINT32_C(0x63C7EE19), UINT32_C(0x41CC07DD), UINT32_C(0xE8B36CB5), UINT32_C(0x53BC8A63)}}, {{UINT32_C(0x74CAF7FF), UINT32_C(0x1E9F596C), UINT32_C(0x8C049872), UINT32_C(0x8088EF96), UINT32_C(0xCE1208BF), UINT32_C(0x3A9EA96E), UINT32_C(0x15DAF25D), UINT32_C(0x892C44E7), UINT32_C(0x5E996AE4), UINT32_C(0xAF6E1EBF), UINT32_C(0xBAC1A746), UINT32_C(0x0A6EEE3C), UINT32_C(0xCAF162F6), UINT32_C(0x9D471CB1), UINT32_C(0xE6BE08F1), UINT32_C(0x13F7192A)}, {UINT32_C(0x49FBB46D), UINT32_C(0xCE44C77A), UINT32_C(0x5A04A72E), UINT32_C(0xA7B9136F), UINT32_C(0x2B937703), UINT32_C(0x6CA33EC4), UINT32_C(0xE8685FFF), UINT32_C(0xD4B3AAB5), UINT32_C(0xE7207EF1), UINT32_C(0x8EFE02B3), UINT32_C(0xB83D0E5A), UINT32_C(0xB138C46D), UINT32_C(0xF6C29885), UINT32_C(0xB73E636A), UINT32_C(0x72567A55), UINT32_C(0x5C1E1242)}}, {{UINT32_C(0x15137904), UINT32_C(0xDD967B6A), UINT32_C(0x6969B92D), UINT32_C(0x4588BAA7), UINT32_C(0x5E2BA269), UINT32_C(0x99580A4C), UINT32_C(0x915645CD), UINT32_C(0xE80802B4), UINT32_C(0xFB6591AE), UINT32_C(0x7246F3F2), UINT32_C(0xCC25F464), UINT32_C(0x68C2F8C6), UINT32_C(0x4905AE3C), UINT32_C(0xB5172E90), UINT32_C(0x675591B3), UINT32_C(0x6860BBDD)}, {UINT32_C(0x626489DF), UINT32_C(0x68BE15C0), UINT32_C(0x0C737BEB), UINT32_C(0x65EA3D88), UINT32_C(0x32B5081D), UINT32_C(0x9EF8B6CC), UINT32_C(0xB16FF753), UINT32_C(0xA6238BB1), UINT32_C(0xE17264C8), UINT32_C(0x22191589), UINT32_C(0x903E28DC), UINT32_C(0xDBDAE7A3), UINT32_C(0xF2DBCB8E), UINT32_C(0xB36FCD91), UINT32_C(0x75D33835), UINT32_C(0x01EBFAC4)}}, {{UINT32_C(0xBC820AEC), UINT32_C(0x7B0EE204), UINT32_C(0x8568C4E8), UINT32_C(0x500DA7FC), UINT32_C(0xB0961D29), UINT32_C(0x992A6429), UINT32_C(0xE65D7FDA), UINT32_C(0xA3CAE853), UINT32_C(0x34197E58), UINT32_C(0x7B6F5E79), UINT32_C(0xC4E849CB), UINT32_C(0x90D37EAC), UINT32_C(0x0106FD33), UINT32_C(0xE01D14AF), UINT32_C(0x80027E17), UINT32_C(0x4BE83679)}, {UINT32_C(0xA85EE145), UINT32_C(0xA412BA38), UINT32_C(0x5097CD50), UINT32_C(0x219D461E), UINT32_C(0x29ECFCDA), UINT32_C(0xAD42175C), UINT32_C(0xD04FAEFA), UINT32_C(0xB1DEF962), UINT32_C(0xA95983C1), UINT32_C(0x5B527A4B), UINT32_C(0xBB20AB6D), UINT32_C(0x48A06C96), UINT32_C(0x1FB83513), UINT32_C(0x7BAD34CD), UINT32_C(0xFDF018ED), UINT32_C(0x458294DF)}}, {{UINT32_C(0xA695A157), UINT32_C(0x1D1EBD7E), UINT32_C(0xC52D5ED9), UINT32_C(0x296DD049), UINT32_C(0x0BE33F05), UINT32_C(0x8958F5B0), UINT32_C(0xD37E60D7), UINT32_C(0x6B7F7204), UINT32_C(0xC668C85A), UINT32_C(0x446F7B95), UINT32_C(0x20F60396), UINT32_C(0xB6E53B20), UINT32_C(0x8E621E73), UINT32_C(0x5738FF4E), UINT32_C(0x8CD9F00C), UINT32_C(0x05DBD495)}, {UINT32_C(0xCFECAA9D), UINT32_C(0x645AD9D6), UINT32_C(0x3CEF6673), UINT32_C(0x01CB8E09), UINT32_C(0x06D13DA7), UINT32_C(0x2851ED4E), UINT32_C(0xCB18DFCB), UINT32_C(0x61FE9A95), UINT32_C(0xF903CBFE), UINT32_C(0x62CC060F), UINT32_C(0xF14B0B1B), UINT32_C(0x121B6E4E), UINT32_C(0xC4DEC6F3), UINT32_C(0x8CAB6654), UINT32_C(0x4B40D6D4), UINT32_C(0x71880998)}}, {{UINT32_C(0x9583FB84), UINT32_C(0xEE5CA2A4), UINT32_C(0x4462D044), UINT32_C(0xEF16CD07), UINT32_C(0x21EBB18F), UINT32_C(0x1C1D5999), UINT32_C(0x0AACAD30), UINT32_C(0x66D7586B), UINT32_C(0x2EB12D8B), UINT32_C(0x8EDF0A45), UINT32_C(0x223DE805), UINT32_C(0x1A320A44), UINT32_C(0xA0C2F092), UINT32_C(0x0A389DA0), UINT32_C(0x7E68A2D9), UINT32_C(0x274FF541)}, {UINT32_C(0x30395E54), UINT32_C(0x6CC34B53), UINT32_C(0x8C112729), UINT32_C(0x881E630B), UINT32_C(0x70E4C811), UINT32_C(0x801E1CAD), UINT32_C(0x91C2E90A), UINT32_C(0xA527AE82), UINT32_C(0x562AE094), UINT32_C(0x93179BC8), UINT32_C(0x148F4F44), UINT32_C(0xCE68A130), UINT32_C(0x32F8CCFD), UINT32_C(0xD8CA2ED0), UINT32_C(0x0527F82B), UINT32_C(0x0415FDA4)}}, {{UINT32_C(0x25AED793), UINT32_C(0x9F5CA1FD), UINT32_C(0x09C49711), UINT32_C(0x5B95B9AA), UINT32_C(0xB968168C), UINT32_C(0x386C8FBB), UINT32_C(0xBDC778F4), UINT32_C(0xC6B27D7D), UINT32_C(0x321A9D97), UINT32_C(0xBD5439A2), UINT32_C(0xDC4BA6A0), UINT32_C(0xEA40A5FE), UINT32_C(0x962508AA), UINT32_C(0x94913F0F), UINT32_C(0xB247396E), UINT32_C(0x0D2DD91A)}, {UINT32_C(0x17C64EFF), UINT32_C(0x1F459CF1), UINT32_C(0x0137E003), UINT32_C(0x02E10B55), UINT32_C(0x60F82DFB), UINT32_C(0xFC375FE4), UINT32_C(0x4631ECED), UINT32_C(0x9CCA9D6E), UINT32_C(0xE5053FDA), UINT32_C(0x575C197C), UINT32_C(0x0A5B9670), UINT32_C(0x2EA3ECEE), UINT32_C(0xA6F50038), UINT32_C(0xE69DECA1), UINT32_C(0xE8EDDA74), UINT32_C(0x32F452FB)}}, {{UINT32_C(0xD9E4C490), UINT32_C(0x20980611), UINT32_C(0x74825DDD), UINT32_C(0x827D79F1), UINT32_C(0x218E0B22), UINT32_C(0xB4604E04), UINT32_C(0x1F4F1752), UINT32_C(0x0A7E5E3A), UINT32_C(0x243D8298), UINT32_C(0x50260245), UINT32_C(0x1A2101B7), UINT32_C(0xEBF01C84), UINT32_C(0x69E1A262), UINT32_C(0x369E69AE), UINT32_C(0x4C1C960A), UINT32_C(0x5FD07868)}, {UINT32_C(0xA8F15793), UINT32_C(0xC542D34B), UINT32_C(0xE393381E), UINT32_C(0x08F14B8F), UINT32_C(0xF855CD9F), UINT32_C(0xB6E06E97), UINT32_C(0xA6CEE8C0), UINT32_C(0x47A195ED), UINT32_C(0xB05A740D), UINT32_C(0x8776F026), UINT32_C(0xAC8EC060), UINT32_C(0x811D7AD6), UINT32_C(0x29002EFB), UINT32_C(0xA61E5D27), UINT32_C(0x0C78E746), UINT32_C(0x3D51D70E)}}, {{UINT32_C(0xC99E1438), UINT32_C(0xC0D70275), UINT32_C(0xFD5EE6B2), UINT32_C(0x0E95C0EC), UINT32_C(0x39E6733E), UINT32_C(0xE14F58B0), UINT32_C(0xB4941C24), UINT32_C(0x057B179E), UINT32_C(0x93C0A5EF), UINT32_C(0x5E12F07F), UINT32_C(0x05E72CAB), UINT32_C(0xF600367D), UINT32_C(0x899F259F), UINT32_C(0x89FCB008), UINT32_C(0x9C3E30E7), UINT32_C(0x2654687C)}, {UINT32_C(0x3F148638), UINT32_C(0x85B7F9B7), UINT32_C(0x9EAEE0B4), UINT32_C(0x8088F4F2), UINT32_C(0x3A7CAFD7), UINT32_C(0xA741D270), UINT32_C(0xDB5B5339), UINT32_C(0x8973A806), UINT32_C(0x22DDCAA9), UINT32_C(0xAAF4E75C), UINT32_C(0xCBB763CB), UINT32_C(0xA2450A79), UINT32_C(0x016E5E3D), UINT32_C(0xBE1B3F2A), UINT32_C(0xCCECC258), UINT32_C(0x4B1061B2)}}, {{UINT32_C(0xC9C8A23A), UINT32_C(0x2F28689A), UINT32_C(0x59341E8C), UINT32_C(0xD8FB2980), UINT32_C(0x375ACDAD), UINT32_C(0xD3617B26), UINT32_C(0x513ED120), UINT32_C(0x314FA469), UINT32_C(0xE2F8DF55), UINT32_C(0xFEB30225), UINT32_C(0x1F639D66), UINT32_C(0x29E001AF), UINT32_C(0xDBDC9737), UINT32_C(0xA175DDD4), UINT32_C(0x8015C048), UINT32_C(0x6A778E4F)}, {UINT32_C(0xCC55DBA8), UINT32_C(0x4612651E), UINT32_C(0x2B3C7B06), UINT32_C(0xE853ADDE), UINT32_C(0x6E0B2E41), UINT32_C(0x14B2D0B7), UINT32_C(0xEE804E0B), UINT32_C(0xCA4F0872), UINT32_C(0xF893D931), UINT32_C(0xEA2AFCA5), UINT32_C(0x9BE51B1A), UINT32_C(0x6EB01891), UINT32_C(0x1F2769F1), UINT32_C(0xB0D8500D), UINT32_C(0xA47FFC13), UINT32_C(0x1303BA01)}}, {{UINT32_C(0xB43811EA), UINT32_C(0xBED58425), UINT32_C(0x4E52E1D6), UINT32_C(0x57D7E536), UINT32_C(0xBF5EF913), UINT32_C(0x93DE67FE), UINT32_C(0x2713FC52), UINT32_C(0x2CCDA4E3), UINT32_C(0x8F1FA4BB), UINT32_C(0xC5C1B6F0), UINT32_C(0xA725295F), UINT32_C(0xA267A790), UINT32_C(0x2D219844), UINT32_C(0x13BB7D11), UINT32_C(0x75415602), UINT32_C(0x7FAF96A2)}, {UINT32_C(0x4E4C3CE4), UINT32_C(0x7879EDF4), UINT32_C(0x3BF094F7), UINT32_C(0x9CD59A0D), UINT32_C(0x4A882A52), UINT32_C(0xD7976DEB), UINT32_C(0xBA65AFBA), UINT32_C(0x19EBBC10), UINT32_C(0x2D48D187), UINT32_C(0xABC37350), UINT32_C(0x1236B5F9), UINT32_C(0x5D5CA6C3), UINT32_C(0x915EAF61), UINT32_C(0xDFA55AC2), UINT32_C(0xE8735632), UINT32_C(0x6C54515E)}}, {{UINT32_C(0xDC21B326), UINT32_C(0xB1CD06DE), UINT32_C(0xE4AE6148), UINT32_C(0xD6F6F904), UINT32_C(0xFA13BE52), UINT32_C(0x941B7545), UINT32_C(0xDF7CE61B), UINT32_C(0xD527042F), UINT32_C(0xD9C9BBDB), UINT32_C(0x1AB4495E), UINT32_C(0xBF6582BE), UINT32_C(0xA5CBE7C5), UINT32_C(0x41A1DA90), UINT32_C(0x1D0B5BA2), UINT32_C(0x0A810954), UINT32_C(0x6F99305C)}, {UINT32_C(0x40D3954D), UINT32_C(0x866C254F), UINT32_C(0x2E5A123D), UINT32_C(0x5DEBFF4D), UINT32_C(0xAD23124C), UINT32_C(0x14AB6FB8), UINT32_C(0xC6B13624), UINT32_C(0xAE3C32B6), UINT32_C(0x707528BA), UINT32_C(0x74075FF6), UINT32_C(0xE91D5097), UINT32_C(0x55DA7227), UINT32_C(0x6A9C3469), UINT32_C(0x450D3848), UINT32_C(0x2313EBA2), UINT32_C(0x15818A1E)}}, }, { {{UINT32_C(0x14125D01), UINT32_C(0x27BE68B4), UINT32_C(0x2482BF94), UINT32_C(0x87549114), UINT32_C(0x8D0C8AF2), UINT32_C(0xE8B70931), UINT32_C(0x11344A8B), UINT32_C(0xF38D32BF), UINT32_C(0x63136143), UINT32_C(0xCB7CDFD1), UINT32_C(0xA17D7DE5), UINT32_C(0x717954CD), UINT32_C(0x7C10DF5E), UINT32_C(0xD65BDD44), UINT32_C(0x4E821D20), UINT32_C(0x15C45F81)}, {UINT32_C(0xD9C326C4), UINT32_C(0x7D425E66), UINT32_C(0x1C7B4BCD), UINT32_C(0xEEA0D61A), UINT32_C(0x8707E9C8), UINT32_C(0x41A8654A), UINT32_C(0x0B4A8F46), UINT32_C(0xBA9E8F7C), UINT32_C(0xF2739871), UINT32_C(0xB96A24FC), UINT32_C(0xFD9C9D58), UINT32_C(0xA9BA022F), UINT32_C(0x2C9AE418), UINT32_C(0x59F7C297), UINT32_C(0xB0CDD468), UINT32_C(0x6B82C284)}}, {{UINT32_C(0x58483FA2), UINT32_C(0xD4C5486A), UINT32_C(0xEDC6A022), UINT32_C(0x8F140259), UINT32_C(0xC43116F8), UINT32_C(0xE451FB0C), UINT32_C(0x65DF7628), UINT32_C(0x5368FE47), UINT32_C(0xBC70855A), UINT32_C(0x0F0DCC6D), UINT32_C(0x472BFE81), UINT32_C(0x0E726D87), UINT32_C(0x3C024F88), UINT32_C(0x9C64B716), UINT32_C(0x14FF6089), UINT32_C(0x1ABAE0D8)}, {UINT32_C(0xB5A15618), UINT32_C(0xC0ABA6B3), UINT32_C(0x65CE0681), UINT32_C(0x71FAA6DF), UINT32_C(0x39A6F5BF), UINT32_C(0x3199E2C9), UINT32_C(0x85BCF47E), UINT32_C(0xD8EBFEDA), UINT32_C(0xC262A35F), UINT32_C(0xC3D57D3B), UINT32_C(0x0269DFDE), UINT32_C(0xF0D6338E), UINT32_C(0x0E6D0BF0), UINT32_C(0x09072E1E), UINT32_C(0x4128B1BA), UINT32_C(0x0980E291)}}, {{UINT32_C(0x4DE44CB0), UINT32_C(0x6A2023F8), UINT32_C(0x247A7D5B), UINT32_C(0xEA995754), UINT32_C(0x99102324), UINT32_C(0xD850D179), UINT32_C(0xA906B038), UINT32_C(0x126FDFE2), UINT32_C(0x577DF168), UINT32_C(0x4C3B3696), UINT32_C(0x9E3853EA), UINT32_C(0x9D3A9E07), UINT32_C(0x40ACE3A1), UINT32_C(0xBC21A51E), UINT32_C(0xC51DD652), UINT32_C(0x165065A3)}, {UINT32_C(0xE4BBD96B), UINT32_C(0xF5B255B9), UINT32_C(0x3D94F9D6), UINT32_C(0xC1E91F80), UINT32_C(0x84768FCE), UINT32_C(0x7DDB5BB7), UINT32_C(0x5CA35823), UINT32_C(0x33F7ADF6), UINT32_C(0x33097882), UINT32_C(0x3667E174), UINT32_C(0x8F241DC1), UINT32_C(0x5FDC3BA1), UINT32_C(0x172CD7FC), UINT32_C(0x41F5C737), UINT32_C(0x7986FE8D), UINT32_C(0x64D4116E)}}, {{UINT32_C(0x8C89DED4), UINT32_C(0x2FF0F505), UINT32_C(0xBBBD0897), UINT32_C(0x06507852), UINT32_C(0x1FAD2908), UINT32_C(0x62886521), UINT32_C(0x9F5F4D13), UINT32_C(0xB8A1362E), UINT32_C(0x6E9856FD), UINT32_C(0x83075FE6), UINT32_C(0x7CCEDC4D), UINT32_C(0x06B0BA27), UINT32_C(0x52750DD5), UINT32_C(0x09B81B51), UINT32_C(0xCB59D8F1), UINT32_C(0x12A96BB0)}, {UINT32_C(0xDB43958B), UINT32_C(0xCA4BC3A5), UINT32_C(0x94C12E88), UINT32_C(0x6456C11B), UINT32_C(0xAC330EE6), UINT32_C(0x7EFA99FF), UINT32_C(0xF40AEBEC), UINT32_C(0x56973CAD), UINT32_C(0xC5D73A2A), UINT32_C(0x62522E6B), UINT32_C(0x90F4378B), UINT32_C(0xF4538CA8), UINT32_C(0x1BA585B1), UINT32_C(0xE5447FCB), UINT32_C(0x18376AB9), UINT32_C(0x6C3F50C2)}}, {{UINT32_C(0xE1720FC1), UINT32_C(0xC0156EB6), UINT32_C(0xFFEE4BA3), UINT32_C(0xE0F821EE), UINT32_C(0xD0B530C5), UINT32_C(0xC0B4EF97), UINT32_C(0x1A47CDAA), UINT32_C(0x003BB116), UINT32_C(0x464EC84B), UINT32_C(0xA5837856), UINT32_C(0xE0E63A97), UINT32_C(0xD65BA195), UINT32_C(0xA375112F), UINT32_C(0xB22C0F5F), UINT32_C(0xA7F7BDC1), UINT32_C(0x18D81698)}, {UINT32_C(0x91E78A50), UINT32_C(0x5FD3C5E5), UINT32_C(0x97D10A66), UINT32_C(0xE5EE4EB9), UINT32_C(0x9FA305DA), UINT32_C(0xF74BD085), UINT32_C(0x5485E038), UINT32_C(0x519BC676), UINT32_C(0xDE116ECE), UINT32_C(0x7D3E6E21), UINT32_C(0x4221F32B), UINT32_C(0x10D68B8C), UINT32_C(0x565C1614), UINT32_C(0xE41D74A9), UINT32_C(0x2E728554), UINT32_C(0x191561DD)}}, {{UINT32_C(0x01C9BD19), UINT32_C(0x527CD255), UINT32_C(0x913FA68C), UINT32_C(0x01879769), UINT32_C(0xD76B7FCB), UINT32_C(0xE9BF7700), UINT32_C(0x02B92508), UINT32_C(0xCEA4EE41), UINT32_C(0x34D015A1), UINT32_C(0x739154CC), UINT32_C(0x44C3F451), UINT32_C(0xD1F1F1AC), UINT32_C(0x7905A732), UINT32_C(0x1DF5A4AA), UINT32_C(0xB67F7057), UINT32_C(0x081AFEB8)}, {UINT32_C(0x671D0F79), UINT32_C(0x8A0EDEC0), UINT32_C(0x442928EE), UINT32_C(0xE99B4B79), UINT32_C(0x2C1557B0), UINT32_C(0x4A722AC7), UINT32_C(0x03021BBE), UINT32_C(0x95070ED6), UINT32_C(0x672C3F05), UINT32_C(0x9E1E6418), UINT32_C(0x89B0C1A6), UINT32_C(0x87337263), UINT32_C(0x008A3B13), UINT32_C(0xB67B8831), UINT32_C(0xB059BE83), UINT32_C(0x4F44986B)}}, {{UINT32_C(0x2CB15C97), UINT32_C(0x09A5B3C9), UINT32_C(0xF9B4777D), UINT32_C(0x43E1B906), UINT32_C(0x66A5BC88), UINT32_C(0x3BAB3A64), UINT32_C(0x7D82E655), UINT32_C(0x276632BB), UINT32_C(0xD97D5CE2), UINT32_C(0xD09388D1), UINT32_C(0xCA1248C5), UINT32_C(0x26B0339D), UINT32_C(0x11F2A8BB), UINT32_C(0x05F0A241), UINT32_C(0xB7F68A8A), UINT32_C(0x1F498EBA)}, {UINT32_C(0xD0DD019B), UINT32_C(0x265C09CF), UINT32_C(0x958B91C2), UINT32_C(0x01A0FE11), UINT32_C(0x5A389069), UINT32_C(0xF55D56ED), UINT32_C(0x1A18A889), UINT32_C(0x9E5DE2CA), UINT32_C(0x065A1799), UINT32_C(0x4F4C9D39), UINT32_C(0x7213B184), UINT32_C(0xB5CB916F), UINT32_C(0xB5D0926E), UINT32_C(0x1941E104), UINT32_C(0x2E03CFB8), UINT32_C(0x6EC375E8)}}, {{UINT32_C(0xB57B1B5D), UINT32_C(0x80F444ED), UINT32_C(0x7D4EFD6C), UINT32_C(0x2E5315E7), UINT32_C(0x868CC07F), UINT32_C(0x9272EBA7), UINT32_C(0x31A8EA6E), UINT32_C(0x19EC814D), UINT32_C(0xF29FCDBF), UINT32_C(0x9EE92D03), UINT32_C(0x2E8408C3), UINT32_C(0xDBF8AB6B), UINT32_C(0xA103D807), UINT32_C(0xA0E845FB), UINT32_C(0x1CA3992E), UINT32_C(0x2A6A6B31)}, {UINT32_C(0x1C391D76), UINT32_C(0xF58B6F6C), UINT32_C(0x13687C07), UINT32_C(0x9E385BB2), UINT32_C(0x6BAEBBF5), UINT32_C(0xF6EE205B), UINT32_C(0xA706C6C5), UINT32_C(0xB2D7D412), UINT32_C(0xCD887640), UINT32_C(0xCFE32A97), UINT32_C(0xD93A1136), UINT32_C(0x2783CFE9), UINT32_C(0xF4D34FA7), UINT32_C(0x601DE429), UINT32_C(0x6EA85459), UINT32_C(0x1E433BB8)}}, {{UINT32_C(0xD618AD6A), UINT32_C(0x8BCB9073), UINT32_C(0x996FE814), UINT32_C(0x84CDBD19), UINT32_C(0x166793B9), UINT32_C(0xB1F5FFDB), UINT32_C(0xEDE62FB4), UINT32_C(0x5FA22BAD), UINT32_C(0x7019C1EB), UINT32_C(0xC1C1C394), UINT32_C(0x08AA77F0), UINT32_C(0x7A026191), UINT32_C(0xA32E5855), UINT32_C(0x026EE69D), UINT32_C(0x80B81284), UINT32_C(0x53563997)}, {UINT32_C(0x5E0B9ABB), UINT32_C(0xF46C064F), UINT32_C(0xE8A0FE23), UINT32_C(0x39332D2C), UINT32_C(0x0BE9ECC5), UINT32_C(0xBD50EE1C), UINT32_C(0x8DE1B166), UINT32_C(0x9B4A4CC0), UINT32_C(0x56713AAF), UINT32_C(0x4BBA7B7B), UINT32_C(0xF1C76C54), UINT32_C(0x2CA8EF64), UINT32_C(0xCEB309E8), UINT32_C(0x1022D9F4), UINT32_C(0x15A18D10), UINT32_C(0x4F1375BC)}}, {{UINT32_C(0x9198331C), UINT32_C(0x09CF4EBA), UINT32_C(0x7D60EA39), UINT32_C(0x232CA52D), UINT32_C(0x2FC3A96E), UINT32_C(0x2C478089), UINT32_C(0x80CB5721), UINT32_C(0xC7F9A36C), UINT32_C(0x2D8802BE), UINT32_C(0xEDA98A0C), UINT32_C(0x3C41B152), UINT32_C(0xC7413048), UINT32_C(0xA74D701C), UINT32_C(0x479DF24F), UINT32_C(0x51869D52), UINT32_C(0x7A92C3F1)}, {UINT32_C(0xF00BA577), UINT32_C(0xC1AB98B3), UINT32_C(0xB7778354), UINT32_C(0x5A687BA4), UINT32_C(0x157FB1D2), UINT32_C(0xF5A77B64), UINT32_C(0x81BBAFEE), UINT32_C(0xB9F746AE), UINT32_C(0x1BEE9D2D), UINT32_C(0xBA33EBDC), UINT32_C(0xD046655C), UINT32_C(0x6FE41BC1), UINT32_C(0xACC3A496), UINT32_C(0x2A8CB913), UINT32_C(0x6AC2B374), UINT32_C(0x7CBC537D)}}, {{UINT32_C(0x538ED4B1), UINT32_C(0x55C19B5E), UINT32_C(0x61891DAE), UINT32_C(0x6AA0E456), UINT32_C(0xCD971AE7), UINT32_C(0xD77CA0C2), UINT32_C(0x70294F78), UINT32_C(0xB23434F7), UINT32_C(0x14D25513), UINT32_C(0x3B87D759), UINT32_C(0x8B94F435), UINT32_C(0x2A37CFD2), UINT32_C(0x3F3F32FF), UINT32_C(0xF63B0962), UINT32_C(0x98B5916A), UINT32_C(0x6387EFB9)}, {UINT32_C(0xF35951D8), UINT32_C(0xB2826971), UINT32_C(0x996C5518), UINT32_C(0xD1DDCB0A), UINT32_C(0x3669304A), UINT32_C(0xA5E88B2D), UINT32_C(0xC53DEDB7), UINT32_C(0xEA5685BD), UINT32_C(0x6A446FA0), UINT32_C(0x2DD72E08), UINT32_C(0xEA074FF8), UINT32_C(0xFA2689EF), UINT32_C(0x7A8302C3), UINT32_C(0xC3430BBE), UINT32_C(0xE98D1CD5), UINT32_C(0x098A5073)}}, {{UINT32_C(0x44EE6CC4), UINT32_C(0xCF5D95C2), UINT32_C(0xCE04027F), UINT32_C(0x5D5278B5), UINT32_C(0xC1D26E0E), UINT32_C(0xEA0F4D01), UINT32_C(0xAB2E71FB), UINT32_C(0xA79154F3), UINT32_C(0xDC59126C), UINT32_C(0x27BBA6EE), UINT32_C(0x632BEE8F), UINT32_C(0x269EB8B7), UINT32_C(0x53BB6C55), UINT32_C(0xD5894008), UINT32_C(0x222DDE2B), UINT32_C(0x7698DA12)}, {UINT32_C(0xB5D03BC6), UINT32_C(0x826DF5A3), UINT32_C(0xE126406F), UINT32_C(0xFAADAD56), UINT32_C(0x68849D5F), UINT32_C(0x2EC70B64), UINT32_C(0x1D799E78), UINT32_C(0x9DDF8991), UINT32_C(0xD4DE8AC5), UINT32_C(0xB2AEAFC5), UINT32_C(0xE114AD71), UINT32_C(0x7A167F8F), UINT32_C(0x13AA2EDF), UINT32_C(0x9DCD07BC), UINT32_C(0x6651BD12), UINT32_C(0x531A5A3D)}}, {{UINT32_C(0x82E7C32C), UINT32_C(0xDE7CE2AD), UINT32_C(0x2D0742C3), UINT32_C(0x2C9908EA), UINT32_C(0x056F7C69), UINT32_C(0xDA528D69), UINT32_C(0x704BFDCD), UINT32_C(0x1FE6E3EB), UINT32_C(0x79B0F586), UINT32_C(0x9C1EEDDF), UINT32_C(0x481E83F6), UINT32_C(0x0F6F81FB), UINT32_C(0xE007286E), UINT32_C(0x17DB66C0), UINT32_C(0x1802CD99), UINT32_C(0x3607EC13)}, {UINT32_C(0x6F216120), UINT32_C(0xCCB2B85C), UINT32_C(0xE51C2036), UINT32_C(0x7B9EA544), UINT32_C(0x5428771E), UINT32_C(0xB14CD361), UINT32_C(0x03C6BD02), UINT32_C(0x978C458E), UINT32_C(0xEACEB25A), UINT32_C(0xEA43C163), UINT32_C(0x6B85CBB9), UINT32_C(0xB590D2D7), UINT32_C(0x19C45D61), UINT32_C(0x10B8EB86), UINT32_C(0xA1FC40DE), UINT32_C(0x2E5AF3E0)}}, {{UINT32_C(0x90D2EA3E), UINT32_C(0x465C6261), UINT32_C(0x3E11EFC6), UINT32_C(0x6B10583C), UINT32_C(0x24958F6C), UINT32_C(0x1E3A1132), UINT32_C(0xB3336EA5), UINT32_C(0xCB895C3B), UINT32_C(0x5F89EEA1), UINT32_C(0xCA995E60), UINT32_C(0x199719B0), UINT32_C(0x725FB30B), UINT32_C(0xF8061D92), UINT32_C(0xC6897E80), UINT32_C(0x2CFBFB75), UINT32_C(0x56680A53)}, {UINT32_C(0xD13E5E25), UINT32_C(0xA770755D), UINT32_C(0xFB78D704), UINT32_C(0xC33F71B0), UINT32_C(0xA101B288), UINT32_C(0x7B2322E7), UINT32_C(0xC1075A9E), UINT32_C(0x03ED4A92), UINT32_C(0x4B8CB0D4), UINT32_C(0xBF435984), UINT32_C(0x60F8188C), UINT32_C(0x6C61DDF3), UINT32_C(0x4D04EA1B), UINT32_C(0x760339E1), UINT32_C(0x46CE38BC), UINT32_C(0x18B7FE13)}}, {{UINT32_C(0x838C109E), UINT32_C(0x7AA91562), UINT32_C(0xEF910EAF), UINT32_C(0xBBCAE1A4), UINT32_C(0xA3F53427), UINT32_C(0xF3CAD5AD), UINT32_C(0xAA559EE9), UINT32_C(0xF8FA6F08), UINT32_C(0x9B872C03), UINT32_C(0x35DF7AA5), UINT32_C(0x8F1C0B48), UINT32_C(0x0A3C6789), UINT32_C(0x3B1F9ABD), UINT32_C(0xE4106F6F), UINT32_C(0x7DAA3EA0), UINT32_C(0x51EE882B)}, {UINT32_C(0xA97C031B), UINT32_C(0xFAE35FE0), UINT32_C(0x2FB341D9), UINT32_C(0x265CC7A2), UINT32_C(0xF7515098), UINT32_C(0xF99D1646), UINT32_C(0xA70C3101), UINT32_C(0x3630DCFC), UINT32_C(0x984A7736), UINT32_C(0x0D492AE5), UINT32_C(0xA65956C5), UINT32_C(0x1E46ACB5), UINT32_C(0x9C39921B), UINT32_C(0x87E193D0), UINT32_C(0x71406E88), UINT32_C(0x1AA85A4B)}}, {{UINT32_C(0x26B55827), UINT32_C(0x6875F762), UINT32_C(0x28C694F4), UINT32_C(0xC6E92CB6), UINT32_C(0x57E83283), UINT32_C(0xC3DA1CFB), UINT32_C(0xFC91E16A), UINT32_C(0x2DAD4640), UINT32_C(0x079E48FB), UINT32_C(0x27238EDF), UINT32_C(0x4676F002), UINT32_C(0x8262F37E), UINT32_C(0x7E20A097), UINT32_C(0xF1DF5685), UINT32_C(0x1D647DBF), UINT32_C(0x710B8830)}, {UINT32_C(0x55F50EC5), UINT32_C(0xF521938F), UINT32_C(0x5A65EC57), UINT32_C(0x86E72C2D), UINT32_C(0x9E067563), UINT32_C(0x72E72E10), UINT32_C(0x2941350F), UINT32_C(0x1C572F37), UINT32_C(0x27E00FBF), UINT32_C(0x0234F613), UINT32_C(0xE0605A65), UINT32_C(0xA33CCF1A), UINT32_C(0x9BE4C255), UINT32_C(0xFDB2433A), UINT32_C(0xDD7E45CD), UINT32_C(0x18374CEB)}}, }, { {{UINT32_C(0x0CEEC3F3), UINT32_C(0x9E00FC84), UINT32_C(0x0D2268DF), UINT32_C(0xA758AA23), UINT32_C(0xD36F482D), UINT32_C(0x5C9B3794), UINT32_C(0xE90303E7), UINT32_C(0xEE3F79CF), UINT32_C(0xD1BB3495), UINT32_C(0x22573217), UINT32_C(0xD2242A7E), UINT32_C(0x6D5C2063), UINT32_C(0x876A074A), UINT32_C(0x339BEDB8), UINT32_C(0x95CD5AA2), UINT32_C(0x63268703)}, {UINT32_C(0x1B0CAE7B), UINT32_C(0xA86B4EF9), UINT32_C(0x3DB7D12D), UINT32_C(0x420985B4), UINT32_C(0x6B1CEED3), UINT32_C(0x99A3BB29), UINT32_C(0x3569FA9E), UINT32_C(0x2113B00F), UINT32_C(0x8E8BF2D8), UINT32_C(0x2C592420), UINT32_C(0x00DB962B), UINT32_C(0xF74DD63B), UINT32_C(0x9758035F), UINT32_C(0x8F0523E5), UINT32_C(0x448F83C0), UINT32_C(0x4EA1D81A)}}, {{UINT32_C(0xAAB1F908), UINT32_C(0x01183057), UINT32_C(0x324AC197), UINT32_C(0xAF94AE9A), UINT32_C(0x23710A59), UINT32_C(0x6BF3B50D), UINT32_C(0xC39A3428), UINT32_C(0x9B65A594), UINT32_C(0x2210C08A), UINT32_C(0x345E5C52), UINT32_C(0x23216FE9), UINT32_C(0x6D728DD6), UINT32_C(0x2E4F42C2), UINT32_C(0x9D09327B), UINT32_C(0x09505F44), UINT32_C(0x47504F62)}, {UINT32_C(0xFB3AD9B5), UINT32_C(0x24F03D12), UINT32_C(0x439F3E25), UINT32_C(0x70E8DE3C), UINT32_C(0xAE5A62FE), UINT32_C(0x1FE89F0E), UINT32_C(0x4B98CDA2), UINT32_C(0x3B518A06), UINT32_C(0xC70FF3F3), UINT32_C(0x725AE18C), UINT32_C(0x02BA4952), UINT32_C(0x45765C35), UINT32_C(0xA7C32E49), UINT32_C(0xBAA6488D), UINT32_C(0xC5A2E6D7), UINT32_C(0x5D277639)}}, {{UINT32_C(0xBD6F5DF9), UINT32_C(0xE3818693), UINT32_C(0x8307A5AD), UINT32_C(0x482D9357), UINT32_C(0x323D211C), UINT32_C(0x82B507F2), UINT32_C(0x92967D94), UINT32_C(0x9E382A71), UINT32_C(0xB3BFF973), UINT32_C(0x4327BB2A), UINT32_C(0xAC87D95A), UINT32_C(0x911FF5F4), UINT32_C(0x3BEF8BFB), UINT32_C(0xD2128961), UINT32_C(0xB8FA196B), UINT32_C(0x43E2ED58)}, {UINT32_C(0xD5D4F65F), UINT32_C(0x74359D2C), UINT32_C(0x401FC20D), UINT32_C(0x7FE8B0D1), UINT32_C(0xC012734A), UINT32_C(0xAA9C0EBC), UINT32_C(0xBC05E810), UINT32_C(0x54BB07ED), UINT32_C(0x94C9B39B), UINT32_C(0x09744AB8), UINT32_C(0x47E3E6E7), UINT32_C(0x1B29E64A), UINT32_C(0x3B728BB9), UINT32_C(0x82082F86), UINT32_C(0xE159E167), UINT32_C(0x5DA4AF1D)}}, {{UINT32_C(0xF80E5A20), UINT32_C(0xD838425E), UINT32_C(0x7AA52E54), UINT32_C(0x1701F0F4), UINT32_C(0x3B0EF4D7), UINT32_C(0x2BC3E024), UINT32_C(0xBD8C9C7E), UINT32_C(0x13DED370), UINT32_C(0x3853E414), UINT32_C(0x93A9BCB0), UINT32_C(0x0B81BBA1), UINT32_C(0xBA752832), UINT32_C(0x69F51EC3), UINT32_C(0xBE267CE5), UINT32_C(0x81D034EB), UINT32_C(0x2DD13391)}, {UINT32_C(0xEAB11B6E), UINT32_C(0x78E02B77), UINT32_C(0xD67C3B1C), UINT32_C(0xDC2C14F2), UINT32_C(0x87193F9F), UINT32_C(0x3407014C), UINT32_C(0x580D2A6C), UINT32_C(0xA5187CAC), UINT32_C(0x254FB63B), UINT32_C(0xA76AD3CB), UINT32_C(0xFA5EC4B7), UINT32_C(0x16A7A635), UINT32_C(0x358A7E00), UINT32_C(0x8B1E623D), UINT32_C(0xE428EB45), UINT32_C(0x12DED0AE)}}, {{UINT32_C(0x42D2628B), UINT32_C(0xEC93FF3E), UINT32_C(0x4D6D15AD), UINT32_C(0xF3E153F8), UINT32_C(0xB269AFEF), UINT32_C(0x9C1D3EE7), UINT32_C(0x2596D285), UINT32_C(0x1DC9ED6B), UINT32_C(0xDA973D5C), UINT32_C(0x1D99A25F), UINT32_C(0x575656A3), UINT32_C(0x6D0CC657), UINT32_C(0x9BE5B314), UINT32_C(0xB5FBD573), UINT32_C(0x4BCB4F6B), UINT32_C(0x2D0AF381)}, {UINT32_C(0x42992580), UINT32_C(0x813C6975), UINT32_C(0xD9C88B9F), UINT32_C(0x5F35F31B), UINT32_C(0xF1315EA8), UINT32_C(0xD62AC131), UINT32_C(0x20AEAF30), UINT32_C(0x6898E20F), UINT32_C(0x733A3518), UINT32_C(0x85A2C8AF), UINT32_C(0x42DFC623), UINT32_C(0x60BB0AE0), UINT32_C(0x7F5A3320), UINT32_C(0x5BE9C682), UINT32_C(0x0795B27B), UINT32_C(0x78153114)}}, {{UINT32_C(0x5BFB1A8F), UINT32_C(0xEBA2445D), UINT32_C(0xE3A37647), UINT32_C(0x23CA73DB), UINT32_C(0x09D6A2E8), UINT32_C(0x1D41C8EA), UINT32_C(0xB9CA389A), UINT32_C(0x837CB597), UINT32_C(0x1DAF5EF4), UINT32_C(0x66B0A05A), UINT32_C(0x79720DD3), UINT32_C(0xD1EC0B2B), UINT32_C(0x34EC20E5), UINT32_C(0xA4EBD633), UINT32_C(0x96CB4933), UINT32_C(0x3CBE3C4B)}, {UINT32_C(0xEAB154BD), UINT32_C(0x5DFBCA31), UINT32_C(0x086B4B02), UINT32_C(0xA95532F9), UINT32_C(0x0ECE8177), UINT32_C(0xD6D5A014), UINT32_C(0xC1701606), UINT32_C(0xA2BD7647), UINT32_C(0x28947FD0), UINT32_C(0xA0513327), UINT32_C(0xFB8D79A4), UINT32_C(0x941ADE30), UINT32_C(0xA5399FC5), UINT32_C(0xE793B659), UINT32_C(0x7A2DAACF), UINT32_C(0x0CBA91FE)}}, {{UINT32_C(0xF5D6C8A5), UINT32_C(0x6EDE3A1A), UINT32_C(0x5B8C138E), UINT32_C(0x18C47EFC), UINT32_C(0x7B418D78), UINT32_C(0x997CB33C), UINT32_C(0x83E40686), UINT32_C(0x5269B9B0), UINT32_C(0x8A20DE43), UINT32_C(0x85054DDC), UINT32_C(0x9485BF29), UINT32_C(0x0FF62C38), UINT32_C(0x0EF78B00), UINT32_C(0x8D769D16), UINT32_C(0x98B54D2D), UINT32_C(0x53D43619)}, {UINT32_C(0xC6B6FC2F), UINT32_C(0x7CAC1C68), UINT32_C(0xBA127B4F), UINT32_C(0x4F4FB16B), UINT32_C(0xB003EE2B), UINT32_C(0x613B15EF), UINT32_C(0x7121BA05), UINT32_C(0x51D36B34), UINT32_C(0x70C1BD53), UINT32_C(0xA33E6C36), UINT32_C(0xEEF75FCD), UINT32_C(0x0D786268), UINT32_C(0x425A7776), UINT32_C(0xEE9064EC), UINT32_C(0x1B720CA1), UINT32_C(0x640F4FE3)}}, {{UINT32_C(0xDE5EB014), UINT32_C(0x0D80E5DC), UINT32_C(0xFB6F0966), UINT32_C(0x8B87C2C5), UINT32_C(0x7F7A8B3D), UINT32_C(0x440E812F), UINT32_C(0xD930CD64), UINT32_C(0x4129E117), UINT32_C(0xBB1AD89B), UINT32_C(0x19224A1F), UINT32_C(0x1B9CF977), UINT32_C(0xFF6582C1), UINT32_C(0x2ED4B99F), UINT32_C(0x0C279A28), UINT32_C(0x61859FE3), UINT32_C(0x5985FA32)}, {UINT32_C(0xFD425835), UINT32_C(0xE807ADC1), UINT32_C(0x52CC2AFA), UINT32_C(0xD0F0F7C6), UINT32_C(0x5C43ECC0), UINT32_C(0xF3B06F65), UINT32_C(0x5F15A3D0), UINT32_C(0xC308696A), UINT32_C(0x97174601), UINT32_C(0x00DC3AA7), UINT32_C(0x81B1A96F), UINT32_C(0x8FC6B2DE), UINT32_C(0x2071B8F4), UINT32_C(0x0E4646A2), UINT32_C(0xE92B7E14), UINT32_C(0x4D8B4DA5)}}, {{UINT32_C(0x25133E4D), UINT32_C(0xA3719219), UINT32_C(0x1211714A), UINT32_C(0x76EC5148), UINT32_C(0x75C6B433), UINT32_C(0xB5C0EC56), UINT32_C(0x14240932), UINT32_C(0xE1DFD7B3), UINT32_C(0x239466CA), UINT32_C(0x319F8E99), UINT32_C(0x35FED9C2), UINT32_C(0xA6D0F9EC), UINT32_C(0xC41F492E), UINT32_C(0x19FC4B44), UINT32_C(0xB8CF87F2), UINT32_C(0x36D24698)}, {UINT32_C(0xC74D1AAA), UINT32_C(0x789735C0), UINT32_C(0x6B21C410), UINT32_C(0x0C0DBF5F), UINT32_C(0x4DCAACF0), UINT32_C(0x157DEB3C), UINT32_C(0x9826FE13), UINT32_C(0xA7D53A56), UINT32_C(0x8E151D58), UINT32_C(0xB4F2E884), UINT32_C(0xA51FDECE), UINT32_C(0x6CD528BD), UINT32_C(0x6F669DBD), UINT32_C(0x7EF7FA0E), UINT32_C(0x666F1F7B), UINT32_C(0x5250D79D)}}, {{UINT32_C(0x02CBADB6), UINT32_C(0xC33D5CC3), UINT32_C(0xC56345D9), UINT32_C(0xF51C5ABF), UINT32_C(0x3B5E86CE), UINT32_C(0x0B2FED49), UINT32_C(0x480D2793), UINT32_C(0x86599A1D), UINT32_C(0xA8F96CB6), UINT32_C(0x15CA7826), UINT32_C(0x5DA5D7C0), UINT32_C(0x0577868C), UINT32_C(0xF8B7F740), UINT32_C(0x0292603B), UINT32_C(0x85445AB2), UINT32_C(0x49C31FB5)}, {UINT32_C(0xEFDB9DA0), UINT32_C(0xCFF51BEB), UINT32_C(0x9DA2096C), UINT32_C(0x1C552A23), UINT32_C(0x416FD3D7), UINT32_C(0x6FAC5D64), UINT32_C(0x5F5F2D95), UINT32_C(0x7F6CD9A7), UINT32_C(0x1E91AB28), UINT32_C(0x98BD5C7F), UINT32_C(0xDAC6FFA2), UINT32_C(0x95132D69), UINT32_C(0x4C6BDC19), UINT32_C(0x5611638C), UINT32_C(0x0DDCBF9E), UINT32_C(0x79320E84)}}, {{UINT32_C(0x28AD172D), UINT32_C(0x2B07BCB2), UINT32_C(0x9AABAAA7), UINT32_C(0xFBD85553), UINT32_C(0x715A69DA), UINT32_C(0x466FF9B8), UINT32_C(0x5DF8355B), UINT32_C(0xA5EE097A), UINT32_C(0x94527A84), UINT32_C(0x5E81EF36), UINT32_C(0x62E79307), UINT32_C(0x0FD82858), UINT32_C(0x7A0154D8), UINT32_C(0xF77154C6), UINT32_C(0x17F87D8C), UINT32_C(0x706EA857)}, {UINT32_C(0xEDF504A7), UINT32_C(0x696280B6), UINT32_C(0x0D58FD9E), UINT32_C(0x8E2FDF94), UINT32_C(0x0A6463DF), UINT32_C(0x4582C065), UINT32_C(0x68B7389B), UINT32_C(0x5DC2DECD), UINT32_C(0xD2CFCF3C), UINT32_C(0x98D77559), UINT32_C(0xE277A1EA), UINT32_C(0x4E652C83), UINT32_C(0x22B153DC), UINT32_C(0x81FA94F7), UINT32_C(0x27250748), UINT32_C(0x6B86C4CB)}}, {{UINT32_C(0x9050FD42), UINT32_C(0x31FA2A56), UINT32_C(0xFDCEFA17), UINT32_C(0x72FEACD1), UINT32_C(0x84A8F817), UINT32_C(0xDC60ED63), UINT32_C(0x24332D2E), UINT32_C(0x584DADB8), UINT32_C(0x3C47EB6B), UINT32_C(0x44D7CF2E), UINT32_C(0x9A6BC268), UINT32_C(0x905E2D0E), UINT32_C(0x6EF013BE), UINT32_C(0x501FE448), UINT32_C(0x999445A7), UINT32_C(0x733E11DA)}, {UINT32_C(0xB4A90B6B), UINT32_C(0x7EBF9F56), UINT32_C(0x4364F578), UINT32_C(0x526D5685), UINT32_C(0xBE950B53), UINT32_C(0xBF9B3EF7), UINT32_C(0x73D295F8), UINT32_C(0x6C5EEE0A), UINT32_C(0x3F9CFD38), UINT32_C(0x4A79F9A7), UINT32_C(0x5C348121), UINT32_C(0xA8C15D28), UINT32_C(0x7BC3EEA7), UINT32_C(0xDB33882F), UINT32_C(0x1C95C7DB), UINT32_C(0x164B6C98)}}, {{UINT32_C(0x876E8E37), UINT32_C(0x99A0B2F1), UINT32_C(0x7D53142D), UINT32_C(0x9540376E), UINT32_C(0x6F20C705), UINT32_C(0x9D87809D), UINT32_C(0xB0FDE5DE), UINT32_C(0x1305C33B), UINT32_C(0xDF9311EB), UINT32_C(0x172DFA23), UINT32_C(0xB8B9A7ED), UINT32_C(0xC55A603C), UINT32_C(0x398CDDF1), UINT32_C(0xF4426DA9), UINT32_C(0x93395515), UINT32_C(0x7EE621B0)}, {UINT32_C(0x7190296B), UINT32_C(0xBBD0B9E9), UINT32_C(0x817E9802), UINT32_C(0x244FFECC), UINT32_C(0x071D598F), UINT32_C(0x572B5387), UINT32_C(0xD2B681E2), UINT32_C(0x8314EF61), UINT32_C(0x639B8713), UINT32_C(0x8F8CA790), UINT32_C(0xF265F881), UINT32_C(0x81FD3C40), UINT32_C(0x78DB97D0), UINT32_C(0x05EC87EA), UINT32_C(0xE4CB4B7D), UINT32_C(0x7C279328)}}, {{UINT32_C(0xA3B4A536), UINT32_C(0xF385F057), UINT32_C(0x4844689C), UINT32_C(0x14C2337F), UINT32_C(0x8B5FFFB0), UINT32_C(0x3523F9A9), UINT32_C(0xA5E078C2), UINT32_C(0xF5E10A66), UINT32_C(0x9EEAC34E), UINT32_C(0xC5DDD869), UINT32_C(0xED24D386), UINT32_C(0x16348B68), UINT32_C(0xEBB0A580), UINT32_C(0x90992D06), UINT32_C(0x047485A9), UINT32_C(0x001BD2DB)}, {UINT32_C(0xDABC2B30), UINT32_C(0x871A178B), UINT32_C(0x6B5F7DC4), UINT32_C(0xEC9674EC), UINT32_C(0xAC23E5B0), UINT32_C(0xBB3B1C57), UINT32_C(0x44A658A1), UINT32_C(0x6DBB0530), UINT32_C(0x61E53517), UINT32_C(0x28B031C9), UINT32_C(0x64182250), UINT32_C(0xC1AB8ED5), UINT32_C(0xD1333B9E), UINT32_C(0xDA3FE27E), UINT32_C(0x71AD4520), UINT32_C(0x4652F37C)}}, {{UINT32_C(0x7B2186CC), UINT32_C(0xB9C2F894), UINT32_C(0x57CF825F), UINT32_C(0xFA2E5BE5), UINT32_C(0x26232D47), UINT32_C(0x71A9C723), UINT32_C(0xEB1F6B74), UINT32_C(0xD990D5D4), UINT32_C(0xEE869587), UINT32_C(0x0526A74F), UINT32_C(0x79F385E3), UINT32_C(0xB29047B1), UINT32_C(0x7588AABE), UINT32_C(0xE9555EB3), UINT32_C(0xE8EDC982), UINT32_C(0x379D31BA)}, {UINT32_C(0xDEC275F9), UINT32_C(0xD1354749), UINT32_C(0x38EAAC97), UINT32_C(0xDC580016), UINT32_C(0x894811E9), UINT32_C(0x23B6F54D), UINT32_C(0x838B2AE0), UINT32_C(0x8A2356F8), UINT32_C(0x0332F83F), UINT32_C(0x5ECBE075), UINT32_C(0xF248814B), UINT32_C(0x1DE54B95), UINT32_C(0x963938AE), UINT32_C(0x3B4D634D), UINT32_C(0x7A5F8CB0), UINT32_C(0x4C8888A5)}}, {{UINT32_C(0x866B8E1D), UINT32_C(0xC6A93408), UINT32_C(0x3FA8DDAC), UINT32_C(0x33DCDEAC), UINT32_C(0x5DBEC7A8), UINT32_C(0x7F21F911), UINT32_C(0x888CF7C1), UINT32_C(0x4C54D4CB), UINT32_C(0xB81E81C5), UINT32_C(0x3FBBB373), UINT32_C(0xC50F3415), UINT32_C(0x2946B9BB), UINT32_C(0x72265924), UINT32_C(0x8EA5487B), UINT32_C(0xBDEBBFEC), UINT32_C(0x3D570399)}, {UINT32_C(0x1939A079), UINT32_C(0x86C128FF), UINT32_C(0x9509F043), UINT32_C(0x4B37E081), UINT32_C(0x7209D23F), UINT32_C(0x42991231), UINT32_C(0x68A1134B), UINT32_C(0x22D2D207), UINT32_C(0x34D6A734), UINT32_C(0xA5AF7A38), UINT32_C(0x2ED7FCBF), UINT32_C(0x752A8190), UINT32_C(0x80FD1D18), UINT32_C(0x11CC5870), UINT32_C(0xD189B4DD), UINT32_C(0x1D9ACAE3)}}, }, { {{UINT32_C(0xBD6BEAA4), UINT32_C(0xE47BFD7F), UINT32_C(0x56A13CBF), UINT32_C(0x6D4E6C12), UINT32_C(0x955E8CFA), UINT32_C(0x66944291), UINT32_C(0xE17CB432), UINT32_C(0xA5D03765), UINT32_C(0x87350701), UINT32_C(0xB39957CC), UINT32_C(0xC31F2D8B), UINT32_C(0x5442D545), UINT32_C(0xA27161B7), UINT32_C(0xB260AC7D), UINT32_C(0x272AA5A0), UINT32_C(0x633DBFE5)}, {UINT32_C(0xCC5C98C5), UINT32_C(0x6273DAA0), UINT32_C(0xF7F5EE34), UINT32_C(0x18117A87), UINT32_C(0xFFC6434F), UINT32_C(0x70638CFD), UINT32_C(0x540FDE06), UINT32_C(0xC3F386EE), UINT32_C(0xD18B02F7), UINT32_C(0xA97159E3), UINT32_C(0xEB612449), UINT32_C(0x10E18495), UINT32_C(0x3D9E5A31), UINT32_C(0xD572354C), UINT32_C(0x9A2301C1), UINT32_C(0x2642E9F2)}}, {{UINT32_C(0x442143BC), UINT32_C(0x01048593), UINT32_C(0x12B5CE6C), UINT32_C(0x015299B1), UINT32_C(0x5F5AEA95), UINT32_C(0x7DB0D76F), UINT32_C(0xD2FB7690), UINT32_C(0xE9E3DA6F), UINT32_C(0x8904CCF0), UINT32_C(0x6E4C64AB), UINT32_C(0xA49B6CCD), UINT32_C(0xDCBD06CC), UINT32_C(0xB0ABB0C1), UINT32_C(0x7258A3FC), UINT32_C(0x59FC214B), UINT32_C(0x07DF0E94)}, {UINT32_C(0x1E7CC675), UINT32_C(0x58804CBF), UINT32_C(0xE80CFBF9), UINT32_C(0x26CB78C2), UINT32_C(0x9AE03E99), UINT32_C(0xD0A31AF0), UINT32_C(0x5C86A88D), UINT32_C(0x121F1D3D), UINT32_C(0x2507EBB7), UINT32_C(0x42172604), UINT32_C(0x2BBA126B), UINT32_C(0x1C047782), UINT32_C(0x102027F2), UINT32_C(0xE85C59C8), UINT32_C(0xCD8232E8), UINT32_C(0x461D9C09)}}, {{UINT32_C(0x200770DE), UINT32_C(0x97B3842A), UINT32_C(0x77C0536B), UINT32_C(0x4647F3FE), UINT32_C(0xBF7476D9), UINT32_C(0x37CC9562), UINT32_C(0x2DEA54A8), UINT32_C(0x90D29C5C), UINT32_C(0xC21BF888), UINT32_C(0xCD666644), UINT32_C(0xC5CF18C8), UINT32_C(0xEAE36F2F), UINT32_C(0xFD93F2C5), UINT32_C(0x903D889A), UINT32_C(0xE5F67DF4), UINT32_C(0x037ADD7E)}, {UINT32_C(0x995AC5D0), UINT32_C(0xD38FA2DC), UINT32_C(0x98A2A549), UINT32_C(0x69D19EA1), UINT32_C(0x5E8F6D58), UINT32_C(0xEC7814C7), UINT32_C(0x247C0E89), UINT32_C(0xDD241DB2), UINT32_C(0xE5CF278B), UINT32_C(0x5421BE26), UINT32_C(0xEDACBA69), UINT32_C(0xCF675E38), UINT32_C(0x21F9C045), UINT32_C(0x397356A1), UINT32_C(0x49E0BF07), UINT32_C(0x317C547F)}}, {{UINT32_C(0xF5C55ABA), UINT32_C(0x2EB59913), UINT32_C(0x99485E9B), UINT32_C(0x805C61A1), UINT32_C(0xB4C7CEE9), UINT32_C(0x94D81C7E), UINT32_C(0xA9DEE0B1), UINT32_C(0x2DD3516F), UINT32_C(0x3353561D), UINT32_C(0x4C59CC21), UINT32_C(0x5EE9F7B9), UINT32_C(0x375C19F3), UINT32_C(0x27FC9486), UINT32_C(0x89DE4E41), UINT32_C(0x24995DF5), UINT32_C(0x68487AFF)}, {UINT32_C(0x6D549CB6), UINT32_C(0x15B98DF0), UINT32_C(0x9B4544BA), UINT32_C(0x4B884EDE), UINT32_C(0x1B3D89C5), UINT32_C(0xE2CEA206), UINT32_C(0x2648786B), UINT32_C(0xCE8945D2), UINT32_C(0xF1272125), UINT32_C(0x0B209B7C), UINT32_C(0x2BAFF0D1), UINT32_C(0xEAB0849A), UINT32_C(0xE971F89E), UINT32_C(0xE5F18031), UINT32_C(0x766B7A2F), UINT32_C(0x4379379C)}}, {{UINT32_C(0x29B51FB0), UINT32_C(0xFC10C847), UINT32_C(0x1E012F1A), UINT32_C(0x148AE7AF), UINT32_C(0xA20D8DBE), UINT32_C(0x75A5A6FD), UINT32_C(0x8FA0842C), UINT32_C(0x30148FCB), UINT32_C(0x126F8253), UINT32_C(0x0A64E438), UINT32_C(0xAECD60D4), UINT32_C(0x72C3C042), UINT32_C(0x38A21DFB), UINT32_C(0x6C3589C8), UINT32_C(0x6BB0D5D0), UINT32_C(0x64BA4594)}, {UINT32_C(0xD464168A), UINT32_C(0x6E818AA1), UINT32_C(0x1743888E), UINT32_C(0x96C68C33), UINT32_C(0x0672EC8E), UINT32_C(0x0D52C73F), UINT32_C(0xA8B446E9), UINT32_C(0x56F9E940), UINT32_C(0xC0E008C5), UINT32_C(0x68F43782), UINT32_C(0x96201134), UINT32_C(0x7C0D8BFE), UINT32_C(0xB3F5942B), UINT32_C(0x66C97894), UINT32_C(0x89BE1E99), UINT32_C(0x08579CF9)}}, {{UINT32_C(0x2828506B), UINT32_C(0xE863C3A9), UINT32_C(0x9DF36CD1), UINT32_C(0x18C6E29D), UINT32_C(0xC2AD4DFB), UINT32_C(0xA2DF177D), UINT32_C(0x08B5F6B6), UINT32_C(0xD0E200A2), UINT32_C(0x77B670DB), UINT32_C(0x6BE0AF75), UINT32_C(0xBD46EEB0), UINT32_C(0x750E92FD), UINT32_C(0x87F96AD1), UINT32_C(0x21E21B37), UINT32_C(0xC89C7708), UINT32_C(0x0C4F884E)}, {UINT32_C(0x630AF761), UINT32_C(0xBCCD3155), UINT32_C(0x19F3528A), UINT32_C(0x769F9CED), UINT32_C(0xBF9CAC65), UINT32_C(0x2572864D), UINT32_C(0xF43268F0), UINT32_C(0xD276411C), UINT32_C(0xA2C48843), UINT32_C(0x12D9FDCF), UINT32_C(0x7AAF1CBC), UINT32_C(0x320A13DF), UINT32_C(0x630820CF), UINT32_C(0x3D4DCB95), UINT32_C(0x28553384), UINT32_C(0x5F471E21)}}, {{UINT32_C(0x9C6DCC7D), UINT32_C(0xC14F1D4D), UINT32_C(0xBC2EA2FA), UINT32_C(0x9CEA8E3A), UINT32_C(0x4F1DE28B), UINT32_C(0xD854AEC0), UINT32_C(0xB0EF66E2), UINT32_C(0x5FAFDDCE), UINT32_C(0xA190ADC7), UINT32_C(0xD5BAF034), UINT32_C(0x052D641A), UINT32_C(0xFEB3DE5F), UINT32_C(0x51F9F744), UINT32_C(0xA336FD9A), UINT32_C(0x2E516669), UINT32_C(0x11E7DE0F)}, {UINT32_C(0x0CD862CD), UINT32_C(0x46B24027), UINT32_C(0x22667C9F), UINT32_C(0xDB3CE4A2), UINT32_C(0x8E3438CF), UINT32_C(0xDF1BD2A2), UINT32_C(0x94E0825A), UINT32_C(0xC20E6ECB), UINT32_C(0x4EDF3C36), UINT32_C(0x08678222), UINT32_C(0xD86E0625), UINT32_C(0xCD547458), UINT32_C(0xC1C8975A), UINT32_C(0xED9FFDFA), UINT32_C(0x60FF6B18), UINT32_C(0x7709A34E)}}, {{UINT32_C(0x0D6EF8BE), UINT32_C(0xEE6F55D7), UINT32_C(0xC47749F3), UINT32_C(0x6BA29662), UINT32_C(0xCB5824F0), UINT32_C(0x505BEBB2), UINT32_C(0x7CE139AF), UINT32_C(0xDAA39E01), UINT32_C(0xBA4EAAF5), UINT32_C(0xC73FFE67), UINT32_C(0x1216FBC5), UINT32_C(0x1AC8354F), UINT32_C(0x7C029B38), UINT32_C(0xFA600D70), UINT32_C(0xB77E8711), UINT32_C(0x1DEF1E98)}, {UINT32_C(0x2199269A), UINT32_C(0x9EA77FEF), UINT32_C(0xA4B5E402), UINT32_C(0xCC5F3E27), UINT32_C(0xFE20DCF6), UINT32_C(0x998BF96F), UINT32_C(0x54252277), UINT32_C(0xCF543A71), UINT32_C(0x71A66685), UINT32_C(0x9D767F87), UINT32_C(0x860B1EC4), UINT32_C(0x0E1AA8F5), UINT32_C(0x9437E2D0), UINT32_C(0x3979C394), UINT32_C(0x855C635C), UINT32_C(0x55CBC282)}}, {{UINT32_C(0xDB0F28BC), UINT32_C(0x798D8087), UINT32_C(0x90209D22), UINT32_C(0x80BE50E6), UINT32_C(0x69AE2A50), UINT32_C(0x6B14A1E1), UINT32_C(0x21B5A02E), UINT32_C(0x504AD87B), UINT32_C(0x81938DD3), UINT32_C(0xBF92B621), UINT32_C(0xE927A712), UINT32_C(0x1A209438), UINT32_C(0x3C613F5E), UINT32_C(0x3DFC548A), UINT32_C(0xA3C2CC7E), UINT32_C(0x1E6E3311)}, {UINT32_C(0xA91BB2B2), UINT32_C(0xE46AC0C4), UINT32_C(0xDF9BA7FD), UINT32_C(0xAC89BB09), UINT32_C(0x04403839), UINT32_C(0xC87555DD), UINT32_C(0xC6BB4379), UINT32_C(0xB1460C86), UINT32_C(0x5FC6E594), UINT32_C(0x3AD253EF), UINT32_C(0x393CB89B), UINT32_C(0xB66B2FB7), UINT32_C(0xE1BAB087), UINT32_C(0x1411B9FD), UINT32_C(0x22C9CE4C), UINT32_C(0x084DD6CD)}}, {{UINT32_C(0xE480DDEB), UINT32_C(0x676D50EE), UINT32_C(0xD14909D0), UINT32_C(0x588EC4BB), UINT32_C(0xB5DD3FC6), UINT32_C(0x509A74A7), UINT32_C(0xAA6870F2), UINT32_C(0xE616EEF3), UINT32_C(0x98C5A7E5), UINT32_C(0x76F235D9), UINT32_C(0x77FFB2E6), UINT32_C(0x7A925C55), UINT32_C(0x955213B7), UINT32_C(0x0A78A158), UINT32_C(0x28FB60B7), UINT32_C(0x07B068B9)}, {UINT32_C(0x50380E64), UINT32_C(0x7610C821), UINT32_C(0x282776C2), UINT32_C(0x6E7C80CE), UINT32_C(0xEEBD3250), UINT32_C(0x9F67368A), UINT32_C(0x85FB7863), UINT32_C(0x932F6E99), UINT32_C(0x924A519D), UINT32_C(0x41FCC562), UINT32_C(0xB499B4AF), UINT32_C(0xC099DE16), UINT32_C(0xAC9C7E76), UINT32_C(0x10764D48), UINT32_C(0xA1BABCE6), UINT32_C(0x66C85BF9)}}, {{UINT32_C(0xF5CB951F), UINT32_C(0xB080963F), UINT32_C(0x2A16F27F), UINT32_C(0xD9A5580B), UINT32_C(0x4FCEE6ED), UINT32_C(0x5840499D), UINT32_C(0x4F3B33D4), UINT32_C(0x5F4704D6), UINT32_C(0x82256A05), UINT32_C(0x02A13993), UINT32_C(0x92365A7E), UINT32_C(0x5713E019), UINT32_C(0x6F38944B), UINT32_C(0x4A2F7BA6), UINT32_C(0xA47662D3), UINT32_C(0x14B58D5B)}, {UINT32_C(0x5900EFC8), UINT32_C(0xC219E300), UINT32_C(0x4FE2DFC9), UINT32_C(0x45707A50), UINT32_C(0x6863DF90), UINT32_C(0x0CE4FACD), UINT32_C(0xC6BCDA9C), UINT32_C(0xEDB31912), UINT32_C(0x85B6CF7C), UINT32_C(0x3E24A0D6), UINT32_C(0x358DDF3B), UINT32_C(0x6365ACDA), UINT32_C(0xF2CB0823), UINT32_C(0x10FD0871), UINT32_C(0x1DAFE4C7), UINT32_C(0x51D58D3D)}}, {{UINT32_C(0x291B51D2), UINT32_C(0xE5B64EF4), UINT32_C(0x1A7A445D), UINT32_C(0x70C52EDB), UINT32_C(0xC1E8DF63), UINT32_C(0x758D0DC9), UINT32_C(0x0677FE82), UINT32_C(0x55328AB3), UINT32_C(0x7F3A1866), UINT32_C(0xAF4221FF), UINT32_C(0x8C04E9CA), UINT32_C(0xDE1BA109), UINT32_C(0x4C577D77), UINT32_C(0x26F0D086), UINT32_C(0x6D494F73), UINT32_C(0x6D5D3FB1)}, {UINT32_C(0x451F8B8C), UINT32_C(0x3C0153EB), UINT32_C(0x5FD3ED6A), UINT32_C(0x6A9B03D1), UINT32_C(0x175180C3), UINT32_C(0xDF442C11), UINT32_C(0x4DD99376), UINT32_C(0xB205EB51), UINT32_C(0xEB489DE3), UINT32_C(0x28E9C5FF), UINT32_C(0x44766908), UINT32_C(0x225CEB09), UINT32_C(0xEB193B68), UINT32_C(0x1DB1F7E7), UINT32_C(0xDF27292C), UINT32_C(0x364B9E6B)}}, {{UINT32_C(0x728F33A8), UINT32_C(0xDC6E723D), UINT32_C(0x3A0930B3), UINT32_C(0x8ABEB28A), UINT32_C(0xD024D8B7), UINT32_C(0x584B13CA), UINT32_C(0xDBDE780E), UINT32_C(0xDCDC5BB7), UINT32_C(0x161D9801), UINT32_C(0xA2AD762B), UINT32_C(0x6CE5F18A), UINT32_C(0x46EBC8A9), UINT32_C(0x7EB1CD22), UINT32_C(0x97A0BA52), UINT32_C(0xE22D91D5), UINT32_C(0x58BC4DAA)}, {UINT32_C(0x9F01D49D), UINT32_C(0xC06F0B25), UINT32_C(0x3533732B), UINT32_C(0x8236F2AD), UINT32_C(0x7C6C24F4), UINT32_C(0xE3DF9BF5), UINT32_C(0x6AA1E1F0), UINT32_C(0xD60FBCC7), UINT32_C(0xB70A307F), UINT32_C(0x8DDBB9A2), UINT32_C(0xC6071C49), UINT32_C(0x61BB56B1), UINT32_C(0x1ABF19BD), UINT32_C(0x8D3446D7), UINT32_C(0x46387989), UINT32_C(0x44AF2FD8)}}, {{UINT32_C(0x86B1B8AE), UINT32_C(0x25ACEB4C), UINT32_C(0x67CFD1AA), UINT32_C(0xB5B0A7E3), UINT32_C(0xB0F063B4), UINT32_C(0x87B3C5CB), UINT32_C(0x6F03BE41), UINT32_C(0x7F429274), UINT32_C(0xD82D7749), UINT32_C(0x412836E0), UINT32_C(0x535225CC), UINT32_C(0xD9B1603B), UINT32_C(0x1590B41F), UINT32_C(0xCBF1A827), UINT32_C(0xFE159BF9), UINT32_C(0x47C32D83)}, {UINT32_C(0x369026E5), UINT32_C(0x7A147456), UINT32_C(0x2691A87D), UINT32_C(0x4A21DAB1), UINT32_C(0x61818C2D), UINT32_C(0x006D3EA4), UINT32_C(0xD548A261), UINT32_C(0x56006BDF), UINT32_C(0x1D7DA713), UINT32_C(0x8632A909), UINT32_C(0x26E387A5), UINT32_C(0x859839DD), UINT32_C(0x7FF52CF4), UINT32_C(0x41E4D9D9), UINT32_C(0x85A8F21E), UINT32_C(0x0E21329F)}}, {{UINT32_C(0x626902CA), UINT32_C(0xDF4AF1E0), UINT32_C(0xEC50A5FF), UINT32_C(0x339CD3CD), UINT32_C(0x98DD7A01), UINT32_C(0x44B2ABBA), UINT32_C(0xCC7AC1A8), UINT32_C(0x47A4DA46), UINT32_C(0x1EA0F3A8), UINT32_C(0xA6925341), UINT32_C(0xC23AA0AC), UINT32_C(0x46F82C17), UINT32_C(0x386897AA), UINT32_C(0xF0394E44), UINT32_C(0x9D5AA759), UINT32_C(0x601F9A55)}, {UINT32_C(0xEF324E1E), UINT32_C(0x194F939F), UINT32_C(0xE2F35782), UINT32_C(0x188BE442), UINT32_C(0x5683B3DD), UINT32_C(0x4B2FA7C1), UINT32_C(0x44300367), UINT32_C(0x9F2737A6), UINT32_C(0xAFDF269E), UINT32_C(0xB72F7E8A), UINT32_C(0x7A8A5232), UINT32_C(0x5FFD8755), UINT32_C(0x43299A6C), UINT32_C(0xA1641CF0), UINT32_C(0xC4D1E057), UINT32_C(0x1FDA30D5)}}, {{UINT32_C(0xD94B7DD2), UINT32_C(0x926373C4), UINT32_C(0xFAA5C280), UINT32_C(0xE9882CA7), UINT32_C(0xC1D821E2), UINT32_C(0x358F82F6), UINT32_C(0x8812649A), UINT32_C(0xDF981826), UINT32_C(0x10D267E1), UINT32_C(0x96ED4507), UINT32_C(0xF7DF2D84), UINT32_C(0x72253BD1), UINT32_C(0x1F09BC6D), UINT32_C(0x78F13C38), UINT32_C(0x15D1F353), UINT32_C(0x023C79F0)}, {UINT32_C(0x65E1924F), UINT32_C(0x5E357E1A), UINT32_C(0x18CC9432), UINT32_C(0x827A8C83), UINT32_C(0x8696C800), UINT32_C(0x9A2FF5D6), UINT32_C(0xE26AB439), UINT32_C(0xDE825B6A), UINT32_C(0xA646B303), UINT32_C(0x34C74673), UINT32_C(0x50657C92), UINT32_C(0xFBFD424E), UINT32_C(0x1F96EEC2), UINT32_C(0xAAD263D9), UINT32_C(0x42FF59EC), UINT32_C(0x78D93F6C)}}, }, { {{UINT32_C(0x4ACCAC90), UINT32_C(0xEF807EEB), UINT32_C(0x83EFEFD0), UINT32_C(0xEA3708EC), UINT32_C(0xAC470AEC), UINT32_C(0xB3F56C3D), UINT32_C(0x4BB6B4A8), UINT32_C(0x0467461D), UINT32_C(0x455704F7), UINT32_C(0x9E2D3152), UINT32_C(0x95097282), UINT32_C(0x957F5FF6), UINT32_C(0xAEADBFBC), UINT32_C(0x1BBA5CCA), UINT32_C(0x829F221F), UINT32_C(0x5D64A8B0)}, {UINT32_C(0xDC012583), UINT32_C(0x63B30E25), UINT32_C(0x6E8E7E4B), UINT32_C(0x739D6C4D), UINT32_C(0x108F21C6), UINT32_C(0x4DB4BA8A), UINT32_C(0x8E217429), UINT32_C(0xE4D0991D), UINT32_C(0x747D489D), UINT32_C(0x0DFEC43E), UINT32_C(0x3F6623D2), UINT32_C(0x759C611C), UINT32_C(0x1C16C550), UINT32_C(0xBB3166AE), UINT32_C(0x46E761A6), UINT32_C(0x1097FE41)}}, {{UINT32_C(0x2774936E), UINT32_C(0x5CACE928), UINT32_C(0x97A7BC86), UINT32_C(0x7D88CE3C), UINT32_C(0x2732B6C7), UINT32_C(0x7B5F9D75), UINT32_C(0xA9623A78), UINT32_C(0x31E096D2), UINT32_C(0x8F2A6C6F), UINT32_C(0xED0B1A7F), UINT32_C(0x8A38C329), UINT32_C(0x47F31AC0), UINT32_C(0x8AE3E440), UINT32_C(0x65FE20B4), UINT32_C(0x8FF8D87D), UINT32_C(0x5BB3DF72)}, {UINT32_C(0x394AF7A9), UINT32_C(0x5C361D56), UINT32_C(0x4A967882), UINT32_C(0x37A95802), UINT32_C(0xC3D24749), UINT32_C(0x02037A09), UINT32_C(0xA9EB6A87), UINT32_C(0x623CF773), UINT32_C(0xCC9980AC), UINT32_C(0x4D09B042), UINT32_C(0x4C258646), UINT32_C(0xC1EF17CA), UINT32_C(0xEA522FA1), UINT32_C(0x054C55D4), UINT32_C(0x1459D247), UINT32_C(0x756B405D)}}, {{UINT32_C(0xFF7BCBB8), UINT32_C(0xC88B5D92), UINT32_C(0x33BB4D7F), UINT32_C(0x37E62C2A), UINT32_C(0x93850D2E), UINT32_C(0x63DBECFC), UINT32_C(0x5DAF279B), UINT32_C(0x282E1896), UINT32_C(0xB2FD8FA2), UINT32_C(0x90226257), UINT32_C(0x69A65468), UINT32_C(0x68215F8C), UINT32_C(0x56338A49), UINT32_C(0xAEBF43D5), UINT32_C(0x38D7D063), UINT32_C(0x035A40A0)}, {UINT32_C(0x61C724FC), UINT32_C(0xEEEE462E), UINT32_C(0xA58C2B0C), UINT32_C(0x660F015B), UINT32_C(0xE16621D4), UINT32_C(0x627E0736), UINT32_C(0x5D724668), UINT32_C(0xD423ADA8), UINT32_C(0x6B777C4C), UINT32_C(0xF98AB83A), UINT32_C(0x5DC968EE), UINT32_C(0x4F5FEC82), UINT32_C(0xDF9BE0BE), UINT32_C(0x4AC7CAAA), UINT32_C(0xCADCF93D), UINT32_C(0x6F7E06DC)}}, {{UINT32_C(0xDE36D484), UINT32_C(0xCF90CB74), UINT32_C(0x0ED61EEE), UINT32_C(0xD511A70F), UINT32_C(0x33798A5C), UINT32_C(0xDBF5689E), UINT32_C(0xDAA5D75E), UINT32_C(0x81900CF3), UINT32_C(0x84CA34C5), UINT32_C(0x854460AA), UINT32_C(0x39220C74), UINT32_C(0x3C00E7B5), UINT32_C(0xAB33422B), UINT32_C(0x4E7CE464), UINT32_C(0xAB536B00), UINT32_C(0x22221BD4)}, {UINT32_C(0xE50DFFEE), UINT32_C(0x718695F4), UINT32_C(0xD103C522), UINT32_C(0x466D642C), UINT32_C(0x6EC72083), UINT32_C(0xA01B7070), UINT32_C(0xCB7675DD), UINT32_C(0xD29C046D), UINT32_C(0x605F249C), UINT32_C(0xA2AF1025), UINT32_C(0xEA9111DF), UINT32_C(0x3BD414BD), UINT32_C(0x7D037C23), UINT32_C(0x8DCEC509), UINT32_C(0x176546F8), UINT32_C(0x750E0282)}}, {{UINT32_C(0x824344A7), UINT32_C(0x452C27FF), UINT32_C(0xEC399A05), UINT32_C(0x85E64CC2), UINT32_C(0x3442039C), UINT32_C(0xBE15D09E), UINT32_C(0x6A323861), UINT32_C(0x875022BB), UINT32_C(0x61866CC9), UINT32_C(0xD984BF9D), UINT32_C(0xEE6E8271), UINT32_C(0x4007F668), UINT32_C(0xF107566D), UINT32_C(0x090E14CC), UINT32_C(0x1131FCD8), UINT32_C(0x08C2354A)}, {UINT32_C(0x8F5FFF23), UINT32_C(0xF9C86299), UINT32_C(0xAC995497), UINT32_C(0x97788808), UINT32_C(0xD43FDCB9), UINT32_C(0xBF6CB8B5), UINT32_C(0xB72DFB91), UINT32_C(0xC75BD147), UINT32_C(0xE15359C6), UINT32_C(0xA537A636), UINT32_C(0x93F6292F), UINT32_C(0x313458F3), UINT32_C(0x2BF3CE59), UINT32_C(0x096B6866), UINT32_C(0x275BB1A8), UINT32_C(0x5618ACC8)}}, {{UINT32_C(0x6DD4F47F), UINT32_C(0x434DBAD7), UINT32_C(0x93A13416), UINT32_C(0x7F24804B), UINT32_C(0xDCFDC8FB), UINT32_C(0x54864638), UINT32_C(0x8DBB2A99), UINT32_C(0x94D15AAB), UINT32_C(0x3B08BE5D), UINT32_C(0xC60D064A), UINT32_C(0x77113B1C), UINT32_C(0x8D52AF03), UINT32_C(0xE649649D), UINT32_C(0x795F3549), UINT32_C(0xA2F7B890), UINT32_C(0x6C50A7B3)}, {UINT32_C(0xBA7BE66C), UINT32_C(0x1243D102), UINT32_C(0x24A4F3D5), UINT32_C(0xD52A9D65), UINT32_C(0xD940B299), UINT32_C(0x84F3A7D8), UINT32_C(0x0A6C5F96), UINT32_C(0x2D0D0561), UINT32_C(0x55AF49E6), UINT32_C(0x68147309), UINT32_C(0x2D484160), UINT32_C(0x1AD2CC29), UINT32_C(0x41613C8C), UINT32_C(0xD9836664), UINT32_C(0xE1444926), UINT32_C(0x116D32D9)}}, {{UINT32_C(0x1FC8967F), UINT32_C(0xBFB347E1), UINT32_C(0xAFD35E6A), UINT32_C(0xAB2F0DE9), UINT32_C(0x3D717B63), UINT32_C(0x77C822B9), UINT32_C(0xEFE76953), UINT32_C(0xBA49F6D5), UINT32_C(0xC3729C1E), UINT32_C(0xC4FF8395), UINT32_C(0x1792651B), UINT32_C(0x5E525199), UINT32_C(0x220793FE), UINT32_C(0xEF736F1E), UINT32_C(0xADA2DF7C), UINT32_C(0x0C1364DE)}, {UINT32_C(0x5E0A04FB), UINT32_C(0xE364A029), UINT32_C(0x02A1CB8F), UINT32_C(0x078CF4CC), UINT32_C(0x884EB5E8), UINT32_C(0x2C6EDCEC), UINT32_C(0x34DA48A0), UINT32_C(0x361E83F1), UINT32_C(0xAE22EE07), UINT32_C(0x543FD798), UINT32_C(0x72A9D550), UINT32_C(0x80A0521A), UINT32_C(0xD5D883DE), UINT32_C(0xCEEB2763), UINT32_C(0x744C8616), UINT32_C(0x4633AE13)}}, {{UINT32_C(0xEFC180BF), UINT32_C(0x386138C2), UINT32_C(0x5025C16C), UINT32_C(0x62884C83), UINT32_C(0x3AEF27D9), UINT32_C(0xC846079F), UINT32_C(0x8815E30E), UINT32_C(0x85AC6CC5), UINT32_C(0xD26A2BD0), UINT32_C(0x45705559), UINT32_C(0xEEDB70C4), UINT32_C(0xEF1649A0), UINT32_C(0xE4641EFD), UINT32_C(0x2596F146), UINT32_C(0x93C7B04A), UINT32_C(0x61E89F8E)}, {UINT32_C(0x071CA85D), UINT32_C(0x6EBD7C9F), UINT32_C(0x1C15ACD1), UINT32_C(0x5C9951AE), UINT32_C(0x8AE934A1), UINT32_C(0x9DE96A7C), UINT32_C(0x481D190E), UINT32_C(0x4B32645D), UINT32_C(0xA79C0B4A), UINT32_C(0x8D0E2B25), UINT32_C(0xCD74DA50), UINT32_C(0x8EF7BB2A), UINT32_C(0x07920CC8), UINT32_C(0x9481D2DB), UINT32_C(0x8736C183), UINT32_C(0x1BD7A22E)}}, {{UINT32_C(0x64FCB568), UINT32_C(0xD4F27500), UINT32_C(0x5C300E98), UINT32_C(0xD92CBB70), UINT32_C(0xCAA8D9B9), UINT32_C(0x5A971902), UINT32_C(0x1C4824C9), UINT32_C(0xA5542DF5), UINT32_C(0xC84D2CCD), UINT32_C(0x7B469D1B), UINT32_C(0xA2566F40), UINT32_C(0xD3FBFEBB), UINT32_C(0xE8FA73C0), UINT32_C(0x89511F69), UINT32_C(0xB162F797), UINT32_C(0x6FFD125B)}, {UINT32_C(0xC0FA653C), UINT32_C(0x961C9532), UINT32_C(0xBDB0C77A), UINT32_C(0x007BD198), UINT32_C(0xEEFC3BE3), UINT32_C(0x1853303B), UINT32_C(0xC4A33E36), UINT32_C(0x6D50323F), UINT32_C(0xE367E4C9), UINT32_C(0x9798C97A), UINT32_C(0x12A538A8), UINT32_C(0x9E146B07), UINT32_C(0x4996D58B), UINT32_C(0xBFB3E819), UINT32_C(0x9022E072), UINT32_C(0x5438D6F6)}}, {{UINT32_C(0xDD4E810B), UINT32_C(0xC58B1061), UINT32_C(0x8FD29C69), UINT32_C(0x7966E96A), UINT32_C(0x2E65F9B6), UINT32_C(0x7E2D9FD4), UINT32_C(0xFC48055F), UINT32_C(0xA8F68084), UINT32_C(0x2DC5A983), UINT32_C(0x545CAE01), UINT32_C(0xA2596608), UINT32_C(0xC9D198C8), UINT32_C(0x4208B520), UINT32_C(0xF9D9BF5D), UINT32_C(0x7E6883FF), UINT32_C(0x1C0C3F5A)}, {UINT32_C(0x05CD4D87), UINT32_C(0x06D7B983), UINT32_C(0x9E9F9F35), UINT32_C(0x899A60E8), UINT32_C(0x5119AAC1), UINT32_C(0x1465EAD5), UINT32_C(0x0F329991), UINT32_C(0x3EDF1E36), UINT32_C(0xA0646C43), UINT32_C(0x86BCB01E), UINT32_C(0xEF4EBCEB), UINT32_C(0xA6EF27F3), UINT32_C(0x54EB8E6B), UINT32_C(0xEAF04AE6), UINT32_C(0x08227047), UINT32_C(0x48051E62)}}, {{UINT32_C(0xF245F1E6), UINT32_C(0xA84EFDA5), UINT32_C(0xEB80F18C), UINT32_C(0x49759EF3), UINT32_C(0x1142EE5C), UINT32_C(0xFB8A3A4B), UINT32_C(0xB9EE65D6), UINT32_C(0x62907A8F), UINT32_C(0xD68D862F), UINT32_C(0xC5FD7DC9), UINT32_C(0xE1C81BAD), UINT32_C(0x1F791D0F), UINT32_C(0x8C4757BA), UINT32_C(0xFED4DEA3), UINT32_C(0x2FA4C20E), UINT32_C(0x041A50E3)}, {UINT32_C(0xF454E68E), UINT32_C(0xB8F7EE7A), UINT32_C(0xCBAB4836), UINT32_C(0xB68F9599), UINT32_C(0xF1872586), UINT32_C(0x3FB9C650), UINT32_C(0x9FDDEF61), UINT32_C(0xF967C768), UINT32_C(0x70E86E8E), UINT32_C(0x8A2683AF), UINT32_C(0xE523AD78), UINT32_C(0xAFD29242), UINT32_C(0x9DD43A6C), UINT32_C(0xBA4EECA5), UINT32_C(0x7BB2E1AE), UINT32_C(0x37447896)}}, {{UINT32_C(0xF86EFABC), UINT32_C(0xE5378393), UINT32_C(0x45F692E9), UINT32_C(0x336470CA), UINT32_C(0x66E0FBDF), UINT32_C(0xC5F0022C), UINT32_C(0x3ECD3196), UINT32_C(0x189D81D5), UINT32_C(0x771F9C1C), UINT32_C(0x416D97CB), UINT32_C(0x223448F1), UINT32_C(0xBF2B6B77), UINT32_C(0xBE42A9A6), UINT32_C(0xA4F6355A), UINT32_C(0xB9956AAC), UINT32_C(0x1C15439A)}, {UINT32_C(0x7DBFC8B8), UINT32_C(0x020CA319), UINT32_C(0x5C7E4025), UINT32_C(0x25A1DFD1), UINT32_C(0x4D06AAA0), UINT32_C(0x5CF6FAD8), UINT32_C(0xAC1B211B), UINT32_C(0x8221BAD8), UINT32_C(0xAE4C7F7B), UINT32_C(0x68E7DBA3), UINT32_C(0xFEF7CB4B), UINT32_C(0x4C167FA9), UINT32_C(0xA34935DE), UINT32_C(0x207A14B8), UINT32_C(0x645A14C2), UINT32_C(0x1476CCBD)}}, {{UINT32_C(0x54E05676), UINT32_C(0xF0467D89), UINT32_C(0xE04530FF), UINT32_C(0xA1987E17), UINT32_C(0x2E3A997C), UINT32_C(0x1E3010C2), UINT32_C(0xEBEF74A7), UINT32_C(0x4001E89F), UINT32_C(0x32572D28), UINT32_C(0x60C65566), UINT32_C(0xA562BF8F), UINT32_C(0x410C49D0), UINT32_C(0x782CE10C), UINT32_C(0xFE591AD0), UINT32_C(0xC3016AA6), UINT32_C(0x272DE301)}, {UINT32_C(0xD3FD089D), UINT32_C(0x7AEFA3F7), UINT32_C(0xC68CE61E), UINT32_C(0x5141E3CF), UINT32_C(0x919EF2CB), UINT32_C(0xEC6F871E), UINT32_C(0xB15754CA), UINT32_C(0x9E1F2C4F), UINT32_C(0xB367A8E1), UINT32_C(0x4E053A03), UINT32_C(0x7A946A07), UINT32_C(0xB5447BAB), UINT32_C(0x5934AC68), UINT32_C(0xCA9D154A), UINT32_C(0x9DCC05A4), UINT32_C(0x2C24448B)}}, {{UINT32_C(0x7230B721), UINT32_C(0xDDDCC6F7), UINT32_C(0xD59A4D7D), UINT32_C(0x3AB7517B), UINT32_C(0x73E75A94), UINT32_C(0x0202A427), UINT32_C(0xF45E584C), UINT32_C(0xEB9CBB02), UINT32_C(0x4D193D46), UINT32_C(0x879F2040), UINT32_C(0xFD5CCEC5), UINT32_C(0x897A3D49), UINT32_C(0x5E795234), UINT32_C(0x7B22D3AD), UINT32_C(0x35E6EA1D), UINT32_C(0x103A74B9)}, {UINT32_C(0xDE267F29), UINT32_C(0x83AD405E), UINT32_C(0xCD4EF83E), UINT32_C(0x9C0750BC), UINT32_C(0xAAF8C955), UINT32_C(0x1192B08C), UINT32_C(0x93618DC5), UINT32_C(0xD983183C), UINT32_C(0x51FA4692), UINT32_C(0x3F142E9F), UINT32_C(0xA9E77124), UINT32_C(0xF9242D3E), UINT32_C(0xC733EFCE), UINT32_C(0x044F55EA), UINT32_C(0xBFB0E74D), UINT32_C(0x3FCE259E)}}, {{UINT32_C(0x4E061902), UINT32_C(0xB4A72C27), UINT32_C(0x8271B5ED), UINT32_C(0x46D49685), UINT32_C(0xC565B666), UINT32_C(0xE640CD1C), UINT32_C(0x8C432368), UINT32_C(0xFEE64A69), UINT32_C(0x7C9309AA), UINT32_C(0x9B245FBA), UINT32_C(0x1FD0DCD7), UINT32_C(0x2489BB01), UINT32_C(0xB4ADB680), UINT32_C(0xBE612E5C), UINT32_C(0x1905845A), UINT32_C(0x7B828C73)}, {UINT32_C(0xAE7E8E5F), UINT32_C(0xB205C233), UINT32_C(0x0DDE4865), UINT32_C(0x67C2AC05), UINT32_C(0x556BCEFF), UINT32_C(0xC29416F4), UINT32_C(0xE7DE42B2), UINT32_C(0x3A94801D), UINT32_C(0x8E9195AD), UINT32_C(0xC79768DB), UINT32_C(0x702232BD), UINT32_C(0xF701EAE5), UINT32_C(0x769E819E), UINT32_C(0x7093880E), UINT32_C(0x85575FE1), UINT32_C(0x07385CFB)}}, {{UINT32_C(0x552D7645), UINT32_C(0xBE89A89F), UINT32_C(0x4C7C1F2D), UINT32_C(0xC1406B55), UINT32_C(0x9C11B663), UINT32_C(0x123A5BB3), UINT32_C(0x275B4F27), UINT32_C(0x1925904A), UINT32_C(0x11F1A12B), UINT32_C(0x94D33687), UINT32_C(0xD3F31833), UINT32_C(0x446FD57B), UINT32_C(0xA29D4040), UINT32_C(0x0FF6FF5D), UINT32_C(0xAE52039A), UINT32_C(0x35355FF6)}, {UINT32_C(0x7DE14B02), UINT32_C(0x74B05575), UINT32_C(0x7A47B576), UINT32_C(0xD2E7C963), UINT32_C(0xE99D0433), UINT32_C(0x0D391E9D), UINT32_C(0x50CCA807), UINT32_C(0xA4DC3929), UINT32_C(0xA2AF3088), UINT32_C(0x81694449), UINT32_C(0x55474A7F), UINT32_C(0x9222E265), UINT32_C(0x2C2AD9EE), UINT32_C(0xAB5C4452), UINT32_C(0xF7EC7C2A), UINT32_C(0x5810784D)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 6 * ASSERT: a = -3 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetB_square(t0, X); fiat_id_tc26_gost_3410_2012_512_paramSetB_square(t1, Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_square(t2, Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t3, X, Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, t3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t4, Y, Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, X, Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, b, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(X3, X3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, t2, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t2, t2, t3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, b, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Z3, Z3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Z3, Z3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t0, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t0, t0, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t0, t4, t4); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, t0, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, Z3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed.op3 * https://eprint.iacr.org/2015/1060 Alg 5 * ASSERT: a = -3 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; fe_t X3; fe_t Y3; fe_t Z3; limb_t nz; /* check P for affine inf */ fiat_id_tc26_gost_3410_2012_512_paramSetB_nonzero(&nz, P->Y); /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t4, Y2, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, t4, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, X2, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, Y3, X1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, b, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, X3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Z3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, b, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, Z1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t2, t1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t0, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, t4, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t2, t0, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(X3, t3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, X3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, t4, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, t1); /* if P is inf, throw all that away and take Q */ fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(R->X, nz, Q->X, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(R->Y, nz, Q->Y, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(R->Z, nz, Q->Z, Z3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj.op3 * https://eprint.iacr.org/2015/1060 Alg 4 * ASSERT: a = -3 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3, t4, t5; /* constants */ const limb_t *b = const_b; /* set pointers for legacy curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t2, Z1, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t3, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t3, t3, t4); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t4, Y1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t5, Y2, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t4, t4, t5); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t5, t1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t4, t4, t5); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, X1, Z1); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, X2, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(X3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, b, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, X3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Z3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(X3, t1, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, b, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, t2, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t2, t1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(Y3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, Y3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, t1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t1, t0, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(t0, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(t0, t0, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, t4, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t2, t0, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Y3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Y3, Y3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(X3, t3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetB_sub(X3, X3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(Z3, t4, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(t1, t3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetB_add(Z3, Z3, t1); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; fe_copy(precomp[0].X, P->X); fe_copy(precomp[0].Y, P->Y); fe_copy(precomp[0].Z, const_one); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[64], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 64) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[103], const unsigned char in[64]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 102; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[513], const unsigned char in[64]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 513; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[64], const unsigned char b[64], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[513] = {0}; int8_t bnaf[513] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 512; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(Q.Y, Q.Y); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); } if (flipped) { /* correct sign */ fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(Q.Y, Q.Y); } /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetB_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[64], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[102] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 101; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(out->Y, lut.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, precomp[0].X); fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(lut.Y, precomp[0].Y); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetB_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[64]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.Z); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 7; i >= 0; i--) { for (j = 0; i != 7 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 14; j++) { if (j * 8 + i > 102) continue; d = rnaf[j * 8 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(out->Y, lut.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(lut.Y, is_neg, lut.Y, out->Y); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fe_copy(lut.X, lut_cmb[0][0].X); fiat_id_tc26_gost_3410_2012_512_paramSetB_opp(lut.Y, lut_cmb[0][0].Y); point_add_mixed(&R, &Q, &lut); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetB_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetB_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[64], unsigned char outy[64], const unsigned char a[64], const unsigned char b[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes(P.Y, iny); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery(P.X, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery(P.Y, P.Y); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.X, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.Y, P.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.X, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.Y, P.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_bytes(P.Y, iny); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery(P.X, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_montgomery(P.Y, P.Y); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.X, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_from_montgomery(P.Y, P.Y); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetB_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[64] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_tc26_gost_3410_2012_512_paramSetB( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(n, b_n, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_tc26_gost_3410_2012_512_paramSetB(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_tc26_gost_3410_2012_512_paramSetB(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 64) != 64) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #endif /* __SIZEOF_INT128__ */ libengine-gost-openssl-3.0.2/ecp_id_tc26_gost_3410_2012_512_paramSetC.c000066400000000000000000023244131446070765000250470ustar00rootroot00000000000000/* Autogenerated: ECCKiila https://gitlab.com/nisec/ecckiila */ /*- * MIT License * * Copyright (c) 2020 Luis Rivera-Zamarripa, JesÃēs-Javier Chi-Domínguez, Billy Bob Brumley * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in all * copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ #if defined(__SIZEOF_INT128__) && !defined(PEDANTIC) #include #include #define LIMB_BITS 64 #define LIMB_CNT 10 /* Field elements */ typedef uint64_t fe_t[LIMB_CNT]; typedef uint64_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETC_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) #define fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(c, a, b) \ fiat_id_tc26_gost_3410_2012_512_paramSetC_add(c, a, b); \ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry(c, c) #define fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(c, a, b) \ fiat_id_tc26_gost_3410_2012_512_paramSetC_sub(c, a, b); \ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry(c, c) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t T; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; fe_t T; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: unsaturated_solinas --static --use-value-barrier id_tc26_gost_3410_2012_512_paramSetC 64 '(auto)' '2^512 - 569' */ /* curve description: id_tc26_gost_3410_2012_512_paramSetC */ /* machine_wordsize = 64 (from "64") */ /* requested operations: (all) */ /* n = 10 (from "(auto)") */ /* s-c = 2^512 - [(1, 569)] (from "2^512 - 569") */ /* tight_bounds_multiplier = 1 (from "") */ /* */ /* Computed values: */ /* carry_chain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1] */ /* eval z = z[0] + (z[1] << 52) + (z[2] << 103) + (z[3] << 154) + (z[4] << 205) + (z[5] << 256) + (z[6] << 0x134) + (z[7] << 0x167) + (z[8] << 0x19a) + (z[9] << 0x1cd) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) + (z[56] << 0x1c0) + (z[57] << 0x1c8) + (z[58] << 0x1d0) + (z[59] << 0x1d8) + (z[60] << 0x1e0) + (z[61] << 0x1e8) + (z[62] << 0x1f0) + (z[63] << 0x1f8) */ /* balance = [0x1ffffffffffb8e, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0x1ffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe, 0xffffffffffffe] */ #include typedef unsigned char fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1; typedef signed char fiat_id_tc26_gost_3410_2012_512_paramSetC_int1; typedef signed __int128 fiat_id_tc26_gost_3410_2012_512_paramSetC_int128; typedef unsigned __int128 fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETC_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint64_t fiat_id_tc26_gost_3410_2012_512_paramSetC_value_barrier_u64(uint64_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_tc26_gost_3410_2012_512_paramSetC_value_barrier_u64(x) (x) #endif /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u52 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^52 * out2 = ⌊(arg1 + arg2 + arg3) / 2^52⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xfffffffffffff] * arg3: [0x0 ~> 0xfffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xfffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u52( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, uint64_t arg2, uint64_t arg3) { uint64_t x1; uint64_t x2; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT64_C(0xfffffffffffff)); x3 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x1 >> 52); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u52 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^52 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^52⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xfffffffffffff] * arg3: [0x0 ~> 0xfffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xfffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u52( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, uint64_t arg2, uint64_t arg3) { int64_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetC_int1 x2; uint64_t x3; x1 = ((int64_t)(arg2 - (int64_t)arg1) - (int64_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_int1)(x1 >> 52); x3 = (x1 & UINT64_C(0xfffffffffffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u51 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^51 * out2 = ⌊(arg1 + arg2 + arg3) / 2^51⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7ffffffffffff] * arg3: [0x0 ~> 0x7ffffffffffff] * Output Bounds: * out1: [0x0 ~> 0x7ffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u51( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, uint64_t arg2, uint64_t arg3) { uint64_t x1; uint64_t x2; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT64_C(0x7ffffffffffff)); x3 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x1 >> 51); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u51 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^51 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^51⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7ffffffffffff] * arg3: [0x0 ~> 0x7ffffffffffff] * Output Bounds: * out1: [0x0 ~> 0x7ffffffffffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u51( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, uint64_t arg2, uint64_t arg3) { int64_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetC_int1 x2; uint64_t x3; x1 = ((int64_t)(arg2 - (int64_t)arg1) - (int64_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_int1)(x1 >> 51); x3 = (x1 & UINT64_C(0x7ffffffffffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffffffffffff] * arg3: [0x0 ~> 0xffffffffffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffffffffffff] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64( uint64_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, uint64_t arg2, uint64_t arg3) { fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x1; uint64_t x2; uint64_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_int1)(0x0 - x1) & UINT64_C(0xffffffffffffffff)); x3 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_value_barrier_u64(x2) & arg3) | (fiat_id_tc26_gost_3410_2012_512_paramSetC_value_barrier_u64((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul multiplies two field elements and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * arg2: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul( uint64_t out1[10], const uint64_t arg1[10], const uint64_t arg2[10]) { fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x1; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x2; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x3; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x4; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x5; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x6; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x7; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x8; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x9; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x10; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x11; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x12; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x13; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x14; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x15; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x16; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x17; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x18; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x19; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x20; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x21; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x22; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x23; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x24; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x25; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x26; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x27; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x28; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x29; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x30; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x31; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x32; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x33; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x34; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x35; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x36; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x37; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x38; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x39; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x40; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x41; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x42; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x43; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x44; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x45; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x46; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x47; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x48; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x49; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x50; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x51; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x52; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x53; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x54; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x55; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x56; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x57; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x58; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x59; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x60; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x61; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x62; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x63; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x64; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x65; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x66; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x67; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x68; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x69; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x70; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x71; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x72; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x73; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x74; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x75; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x76; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x77; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x78; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x79; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x80; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x81; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x82; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x83; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x84; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x85; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x86; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x87; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x88; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x89; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x90; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x91; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x92; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x93; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x94; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x95; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x96; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x97; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x98; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x99; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x100; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x101; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x102; uint64_t x103; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x104; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x105; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x106; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x107; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x108; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x109; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x110; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x111; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x112; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x113; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x114; uint64_t x115; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x116; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x117; uint64_t x118; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x119; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x120; uint64_t x121; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x122; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x123; uint64_t x124; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x125; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x126; uint64_t x127; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x128; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x129; uint64_t x130; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x131; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x132; uint64_t x133; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x134; uint64_t x135; uint64_t x136; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x137; uint64_t x138; uint64_t x139; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x140; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x141; uint64_t x142; uint64_t x143; uint64_t x144; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x145; uint64_t x146; uint64_t x147; x1 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * (arg2[9]))); x2 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * (arg2[8]))); x3 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * (arg2[7]))); x4 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * (arg2[6])) * 0x2)); x5 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * (arg2[5]))); x6 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * (arg2[4]))); x7 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * (arg2[3]))); x8 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * (arg2[2]))); x9 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * (arg2[1])) * 0x2)); x10 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * (arg2[9]))); x11 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * (arg2[8]))); x12 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * (arg2[7])) * 0x2)); x13 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * (arg2[6])) * 0x2)); x14 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * (arg2[5]))); x15 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * (arg2[4]))); x16 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * (arg2[3]))); x17 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * (arg2[2])) * 0x2)); x18 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * (arg2[9]))); x19 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * (arg2[8])) * 0x2)); x20 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * (arg2[7])) * 0x2)); x21 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * (arg2[6])) * 0x2)); x22 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * (arg2[5]))); x23 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * (arg2[4]))); x24 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * (arg2[3])) * 0x2)); x25 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (arg2[9])) * 0x2)); x26 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (arg2[8])) * 0x2)); x27 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (arg2[7])) * 0x2)); x28 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (arg2[6])) * 0x2)); x29 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (arg2[5]))); x30 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (arg2[4])) * 0x2)); x31 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * (arg2[9]))); x32 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * (arg2[8]))); x33 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * (arg2[7]))); x34 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * (arg2[6]))); x35 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * (arg2[5]))); x36 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (arg2[9]))); x37 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (arg2[8]))); x38 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (arg2[7]))); x39 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (arg2[6])) * 0x2)); x40 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * (arg2[9]))); x41 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * (arg2[8]))); x42 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * (arg2[7])) * 0x2)); x43 = (UINT16_C(0x239) * ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * (arg2[9]))); x44 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * (arg2[8])) * 0x2)); x45 = (UINT16_C(0x239) * (((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * (arg2[9])) * 0x2)); x46 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * (arg2[0])); x47 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * ((arg2[1]) * 0x2)); x48 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * (arg2[0])); x49 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * ((arg2[2]) * 0x2)); x50 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * ((arg2[1]) * 0x2)); x51 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * (arg2[0])); x52 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * ((arg2[3]) * 0x2)); x53 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * ((arg2[2]) * 0x2)); x54 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * ((arg2[1]) * 0x2)); x55 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (arg2[0])); x56 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * (arg2[4])); x57 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * (arg2[3])); x58 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * (arg2[2])); x59 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * (arg2[1])); x60 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * (arg2[0])); x61 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (arg2[5])); x62 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (arg2[4])); x63 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (arg2[3])); x64 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (arg2[2])); x65 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * ((arg2[1]) * 0x2)); x66 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (arg2[0])); x67 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * ((arg2[6]) * 0x2)); x68 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * (arg2[5])); x69 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * (arg2[4])); x70 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * (arg2[3])); x71 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * ((arg2[2]) * 0x2)); x72 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * ((arg2[1]) * 0x2)); x73 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * (arg2[0])); x74 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * ((arg2[7]) * 0x2)); x75 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * ((arg2[6]) * 0x2)); x76 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * (arg2[5])); x77 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * (arg2[4])); x78 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * ((arg2[3]) * 0x2)); x79 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * ((arg2[2]) * 0x2)); x80 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * ((arg2[1]) * 0x2)); x81 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * (arg2[0])); x82 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * ((arg2[8]) * 0x2)); x83 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * ((arg2[7]) * 0x2)); x84 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * ((arg2[6]) * 0x2)); x85 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * (arg2[5])); x86 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * ((arg2[4]) * 0x2)); x87 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * ((arg2[3]) * 0x2)); x88 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * ((arg2[2]) * 0x2)); x89 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * ((arg2[1]) * 0x2)); x90 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * (arg2[0])); x91 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg2[9])); x92 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg2[8])); x93 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg2[7])); x94 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg2[6])); x95 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg2[5])); x96 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg2[4])); x97 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg2[3])); x98 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg2[2])); x99 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg2[1])); x100 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg2[0])); x101 = (x100 + (x45 + (x44 + (x42 + (x39 + (x35 + (x30 + (x24 + (x17 + x9))))))))); x102 = (x101 >> 52); x103 = (uint64_t)(x101 & UINT64_C(0xfffffffffffff)); x104 = (x91 + (x82 + (x74 + (x67 + (x61 + (x56 + (x52 + (x49 + (x47 + x46))))))))); x105 = (x92 + (x83 + (x75 + (x68 + (x62 + (x57 + (x53 + (x50 + (x48 + x1))))))))); x106 = (x93 + (x84 + (x76 + (x69 + (x63 + (x58 + (x54 + (x51 + (x10 + x2))))))))); x107 = (x94 + (x85 + (x77 + (x70 + (x64 + (x59 + (x55 + (x18 + (x11 + x3))))))))); x108 = (x95 + (x86 + (x78 + (x71 + (x65 + (x60 + (x25 + (x19 + (x12 + x4))))))))); x109 = (x96 + (x87 + (x79 + (x72 + (x66 + (x31 + (x26 + (x20 + (x13 + x5))))))))); x110 = (x97 + (x88 + (x80 + (x73 + (x36 + (x32 + (x27 + (x21 + (x14 + x6))))))))); x111 = (x98 + (x89 + (x81 + (x40 + (x37 + (x33 + (x28 + (x22 + (x15 + x7))))))))); x112 = (x99 + (x90 + (x43 + (x41 + (x38 + (x34 + (x29 + (x23 + (x16 + x8))))))))); x113 = (x102 + x112); x114 = (x113 >> 51); x115 = (uint64_t)(x113 & UINT64_C(0x7ffffffffffff)); x116 = (x114 + x111); x117 = (x116 >> 51); x118 = (uint64_t)(x116 & UINT64_C(0x7ffffffffffff)); x119 = (x117 + x110); x120 = (x119 >> 51); x121 = (uint64_t)(x119 & UINT64_C(0x7ffffffffffff)); x122 = (x120 + x109); x123 = (x122 >> 51); x124 = (uint64_t)(x122 & UINT64_C(0x7ffffffffffff)); x125 = (x123 + x108); x126 = (x125 >> 52); x127 = (uint64_t)(x125 & UINT64_C(0xfffffffffffff)); x128 = (x126 + x107); x129 = (x128 >> 51); x130 = (uint64_t)(x128 & UINT64_C(0x7ffffffffffff)); x131 = (x129 + x106); x132 = (x131 >> 51); x133 = (uint64_t)(x131 & UINT64_C(0x7ffffffffffff)); x134 = (x132 + x105); x135 = (uint64_t)(x134 >> 51); x136 = (uint64_t)(x134 & UINT64_C(0x7ffffffffffff)); x137 = (x135 + x104); x138 = (uint64_t)(x137 >> 51); x139 = (uint64_t)(x137 & UINT64_C(0x7ffffffffffff)); x140 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)UINT16_C(0x239) * x138); x141 = (x103 + x140); x142 = (uint64_t)(x141 >> 52); x143 = (uint64_t)(x141 & UINT64_C(0xfffffffffffff)); x144 = (x142 + x115); x145 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x144 >> 51); x146 = (x144 & UINT64_C(0x7ffffffffffff)); x147 = (x145 + x118); out1[0] = x143; out1[1] = x146; out1[2] = x147; out1[3] = x121; out1[4] = x124; out1[5] = x127; out1[6] = x130; out1[7] = x133; out1[8] = x136; out1[9] = x139; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square squares a field element and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg1) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square( uint64_t out1[10], const uint64_t arg1[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x19; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x20; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x21; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x22; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x23; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x24; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x25; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x26; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x27; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x28; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x29; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x30; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x31; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x32; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x33; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x34; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x35; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x36; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x37; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x38; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x39; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x40; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x41; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x42; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x43; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x44; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x45; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x46; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x47; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x48; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x49; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x50; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x51; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x52; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x53; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x54; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x55; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x56; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x57; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x58; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x59; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x60; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x61; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x62; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x63; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x64; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x65; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x66; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x67; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x68; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x69; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x70; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x71; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x72; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x73; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x74; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x75; uint64_t x76; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x77; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x78; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x79; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x80; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x81; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x82; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x83; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x84; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x85; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x86; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x87; uint64_t x88; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x89; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x90; uint64_t x91; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x92; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x93; uint64_t x94; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x95; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x96; uint64_t x97; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x98; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x99; uint64_t x100; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x101; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x102; uint64_t x103; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x104; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x105; uint64_t x106; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x107; uint64_t x108; uint64_t x109; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x110; uint64_t x111; uint64_t x112; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x113; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128 x114; uint64_t x115; uint64_t x116; uint64_t x117; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x118; uint64_t x119; uint64_t x120; x1 = ((arg1[9]) * UINT16_C(0x239)); x2 = (x1 * 0x2); x3 = ((arg1[9]) * 0x2); x4 = ((arg1[8]) * UINT16_C(0x239)); x5 = (x4 * 0x2); x6 = ((arg1[8]) * 0x2); x7 = ((arg1[7]) * UINT16_C(0x239)); x8 = (x7 * 0x2); x9 = ((arg1[7]) * 0x2); x10 = ((arg1[6]) * UINT16_C(0x239)); x11 = (x10 * 0x2); x12 = ((arg1[6]) * 0x2); x13 = ((arg1[5]) * UINT16_C(0x239)); x14 = ((arg1[5]) * 0x2); x15 = ((arg1[4]) * 0x2); x16 = ((arg1[3]) * 0x2); x17 = ((arg1[2]) * 0x2); x18 = ((arg1[1]) * 0x2); x19 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[9]) * x1); x20 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * x2); x21 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[8]) * x4); x22 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * x2); x23 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * (x5 * 0x2)); x24 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[7]) * (x7 * 0x2)); x25 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (x2 * 0x2)); x26 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (x5 * 0x2)); x27 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (x8 * 0x2)); x28 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[6]) * (x10 * 0x2)); x29 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * x2); x30 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * x5); x31 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * x8); x32 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * x11); x33 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[5]) * x13); x34 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * x2); x35 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * x5); x36 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * x8); x37 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (x11 * 0x2)); x38 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * x14); x39 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[4]) * (arg1[4])); x40 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * x2); x41 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * x5); x42 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * (x8 * 0x2)); x43 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * (x12 * 0x2)); x44 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * x14); x45 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * x15); x46 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[3]) * (arg1[3])); x47 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * x2); x48 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * (x5 * 0x2)); x49 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * (x9 * 0x2)); x50 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * (x12 * 0x2)); x51 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * x14); x52 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * x15); x53 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * (x16 * 0x2)); x54 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[2]) * ((arg1[2]) * 0x2)); x55 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * (x2 * 0x2)); x56 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * (x6 * 0x2)); x57 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * (x9 * 0x2)); x58 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * (x12 * 0x2)); x59 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * x14); x60 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * (x15 * 0x2)); x61 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * (x16 * 0x2)); x62 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * (x17 * 0x2)); x63 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[1]) * ((arg1[1]) * 0x2)); x64 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * x3); x65 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * x6); x66 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * x9); x67 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * x12); x68 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * x14); x69 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * x15); x70 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * x16); x71 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * x17); x72 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * x18); x73 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)(arg1[0]) * (arg1[0])); x74 = (x73 + (x55 + (x48 + (x42 + (x37 + x33))))); x75 = (x74 >> 52); x76 = (uint64_t)(x74 & UINT64_C(0xfffffffffffff)); x77 = (x64 + (x56 + (x49 + (x43 + x38)))); x78 = (x65 + (x57 + (x50 + (x44 + (x39 + x19))))); x79 = (x66 + (x58 + (x51 + (x45 + x20)))); x80 = (x67 + (x59 + (x52 + (x46 + (x22 + x21))))); x81 = (x68 + (x60 + (x53 + (x25 + x23)))); x82 = (x69 + (x61 + (x54 + (x29 + (x26 + x24))))); x83 = (x70 + (x62 + (x34 + (x30 + x27)))); x84 = (x71 + (x63 + (x40 + (x35 + (x31 + x28))))); x85 = (x72 + (x47 + (x41 + (x36 + x32)))); x86 = (x75 + x85); x87 = (x86 >> 51); x88 = (uint64_t)(x86 & UINT64_C(0x7ffffffffffff)); x89 = (x87 + x84); x90 = (x89 >> 51); x91 = (uint64_t)(x89 & UINT64_C(0x7ffffffffffff)); x92 = (x90 + x83); x93 = (x92 >> 51); x94 = (uint64_t)(x92 & UINT64_C(0x7ffffffffffff)); x95 = (x93 + x82); x96 = (x95 >> 51); x97 = (uint64_t)(x95 & UINT64_C(0x7ffffffffffff)); x98 = (x96 + x81); x99 = (x98 >> 52); x100 = (uint64_t)(x98 & UINT64_C(0xfffffffffffff)); x101 = (x99 + x80); x102 = (x101 >> 51); x103 = (uint64_t)(x101 & UINT64_C(0x7ffffffffffff)); x104 = (x102 + x79); x105 = (x104 >> 51); x106 = (uint64_t)(x104 & UINT64_C(0x7ffffffffffff)); x107 = (x105 + x78); x108 = (uint64_t)(x107 >> 51); x109 = (uint64_t)(x107 & UINT64_C(0x7ffffffffffff)); x110 = (x108 + x77); x111 = (uint64_t)(x110 >> 51); x112 = (uint64_t)(x110 & UINT64_C(0x7ffffffffffff)); x113 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint128)UINT16_C(0x239) * x111); x114 = (x76 + x113); x115 = (uint64_t)(x114 >> 52); x116 = (uint64_t)(x114 & UINT64_C(0xfffffffffffff)); x117 = (x115 + x88); x118 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x117 >> 51); x119 = (x117 & UINT64_C(0x7ffffffffffff)); x120 = (x118 + x91); out1[0] = x116; out1[1] = x119; out1[2] = x120; out1[3] = x94; out1[4] = x97; out1[5] = x100; out1[6] = x103; out1[7] = x106; out1[8] = x109; out1[9] = x112; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_carry reduces a field element. * Postconditions: * eval out1 mod m = eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_carry( uint64_t out1[10], const uint64_t arg1[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; x1 = (arg1[0]); x2 = ((x1 >> 52) + (arg1[1])); x3 = ((x2 >> 51) + (arg1[2])); x4 = ((x3 >> 51) + (arg1[3])); x5 = ((x4 >> 51) + (arg1[4])); x6 = ((x5 >> 51) + (arg1[5])); x7 = ((x6 >> 52) + (arg1[6])); x8 = ((x7 >> 51) + (arg1[7])); x9 = ((x8 >> 51) + (arg1[8])); x10 = ((x9 >> 51) + (arg1[9])); x11 = ((x1 & UINT64_C(0xfffffffffffff)) + (UINT16_C(0x239) * (x10 >> 51))); x12 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x11 >> 52) + (x2 & UINT64_C(0x7ffffffffffff))); x13 = (x11 & UINT64_C(0xfffffffffffff)); x14 = (x12 & UINT64_C(0x7ffffffffffff)); x15 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x12 >> 51) + (x3 & UINT64_C(0x7ffffffffffff))); x16 = (x4 & UINT64_C(0x7ffffffffffff)); x17 = (x5 & UINT64_C(0x7ffffffffffff)); x18 = (x6 & UINT64_C(0xfffffffffffff)); x19 = (x7 & UINT64_C(0x7ffffffffffff)); x20 = (x8 & UINT64_C(0x7ffffffffffff)); x21 = (x9 & UINT64_C(0x7ffffffffffff)); x22 = (x10 & UINT64_C(0x7ffffffffffff)); out1[0] = x13; out1[1] = x14; out1[2] = x15; out1[3] = x16; out1[4] = x17; out1[5] = x18; out1[6] = x19; out1[7] = x20; out1[8] = x21; out1[9] = x22; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_add adds two field elements. * Postconditions: * eval out1 mod m = (eval arg1 + eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * arg2: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_add( uint64_t out1[10], const uint64_t arg1[10], const uint64_t arg2[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; x1 = ((arg1[0]) + (arg2[0])); x2 = ((arg1[1]) + (arg2[1])); x3 = ((arg1[2]) + (arg2[2])); x4 = ((arg1[3]) + (arg2[3])); x5 = ((arg1[4]) + (arg2[4])); x6 = ((arg1[5]) + (arg2[5])); x7 = ((arg1[6]) + (arg2[6])); x8 = ((arg1[7]) + (arg2[7])); x9 = ((arg1[8]) + (arg2[8])); x10 = ((arg1[9]) + (arg2[9])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_sub subtracts two field elements. * Postconditions: * eval out1 mod m = (eval arg1 - eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * arg2: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_sub( uint64_t out1[10], const uint64_t arg1[10], const uint64_t arg2[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; x1 = ((UINT64_C(0x1ffffffffffb8e) + (arg1[0])) - (arg2[0])); x2 = ((UINT64_C(0xffffffffffffe) + (arg1[1])) - (arg2[1])); x3 = ((UINT64_C(0xffffffffffffe) + (arg1[2])) - (arg2[2])); x4 = ((UINT64_C(0xffffffffffffe) + (arg1[3])) - (arg2[3])); x5 = ((UINT64_C(0xffffffffffffe) + (arg1[4])) - (arg2[4])); x6 = ((UINT64_C(0x1ffffffffffffe) + (arg1[5])) - (arg2[5])); x7 = ((UINT64_C(0xffffffffffffe) + (arg1[6])) - (arg2[6])); x8 = ((UINT64_C(0xffffffffffffe) + (arg1[7])) - (arg2[7])); x9 = ((UINT64_C(0xffffffffffffe) + (arg1[8])) - (arg2[8])); x10 = ((UINT64_C(0xffffffffffffe) + (arg1[9])) - (arg2[9])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_opp negates a field element. * Postconditions: * eval out1 mod m = -eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x30000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000], [0x0 ~> 0x18000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_opp( uint64_t out1[10], const uint64_t arg1[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; x1 = (UINT64_C(0x1ffffffffffb8e) - (arg1[0])); x2 = (UINT64_C(0xffffffffffffe) - (arg1[1])); x3 = (UINT64_C(0xffffffffffffe) - (arg1[2])); x4 = (UINT64_C(0xffffffffffffe) - (arg1[3])); x5 = (UINT64_C(0xffffffffffffe) - (arg1[4])); x6 = (UINT64_C(0x1ffffffffffffe) - (arg1[5])); x7 = (UINT64_C(0xffffffffffffe) - (arg1[6])); x8 = (UINT64_C(0xffffffffffffe) - (arg1[7])); x9 = (UINT64_C(0xffffffffffffe) - (arg1[8])); x10 = (UINT64_C(0xffffffffffffe) - (arg1[9])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * arg3: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff], [0x0 ~> 0xffffffffffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( uint64_t out1[10], fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, const uint64_t arg2[10], const uint64_t arg3[10]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64(&x1, arg1, (arg2[0]), (arg3[0])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64(&x2, arg1, (arg2[1]), (arg3[1])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64(&x3, arg1, (arg2[2]), (arg3[2])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64(&x4, arg1, (arg2[3]), (arg3[3])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64(&x5, arg1, (arg2[4]), (arg3[4])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64(&x6, arg1, (arg2[5]), (arg3[5])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64(&x7, arg1, (arg2[6]), (arg3[6])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64(&x8, arg1, (arg2[7]), (arg3[7])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64(&x9, arg1, (arg2[8]), (arg3[8])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64(&x10, arg1, (arg2[9]), (arg3[9])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes serializes a field element to bytes in little-endian order. * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..63] * * Input Bounds: * arg1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes( uint8_t out1[64], const uint64_t arg1[10]) { uint64_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x2; uint64_t x3; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x4; uint64_t x5; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x6; uint64_t x7; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x8; uint64_t x9; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x10; uint64_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x12; uint64_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x14; uint64_t x15; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x16; uint64_t x17; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x18; uint64_t x19; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x20; uint64_t x21; uint64_t x22; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x23; uint64_t x24; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x25; uint64_t x26; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x27; uint64_t x28; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x29; uint64_t x30; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x31; uint64_t x32; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x33; uint64_t x34; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x35; uint64_t x36; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x37; uint64_t x38; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x39; uint64_t x40; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint8_t x50; uint64_t x51; uint8_t x52; uint64_t x53; uint8_t x54; uint64_t x55; uint8_t x56; uint64_t x57; uint8_t x58; uint64_t x59; uint8_t x60; uint8_t x61; uint64_t x62; uint8_t x63; uint64_t x64; uint8_t x65; uint64_t x66; uint8_t x67; uint64_t x68; uint8_t x69; uint64_t x70; uint8_t x71; uint64_t x72; uint8_t x73; uint8_t x74; uint64_t x75; uint8_t x76; uint64_t x77; uint8_t x78; uint64_t x79; uint8_t x80; uint64_t x81; uint8_t x82; uint64_t x83; uint8_t x84; uint64_t x85; uint8_t x86; uint64_t x87; uint8_t x88; uint8_t x89; uint64_t x90; uint8_t x91; uint64_t x92; uint8_t x93; uint64_t x94; uint8_t x95; uint64_t x96; uint8_t x97; uint64_t x98; uint8_t x99; uint64_t x100; uint8_t x101; uint8_t x102; uint64_t x103; uint8_t x104; uint64_t x105; uint8_t x106; uint64_t x107; uint8_t x108; uint64_t x109; uint8_t x110; uint64_t x111; uint8_t x112; uint64_t x113; uint8_t x114; uint8_t x115; uint8_t x116; uint64_t x117; uint8_t x118; uint64_t x119; uint8_t x120; uint64_t x121; uint8_t x122; uint64_t x123; uint8_t x124; uint64_t x125; uint8_t x126; uint8_t x127; uint64_t x128; uint8_t x129; uint64_t x130; uint8_t x131; uint64_t x132; uint8_t x133; uint64_t x134; uint8_t x135; uint64_t x136; uint8_t x137; uint64_t x138; uint8_t x139; uint8_t x140; uint64_t x141; uint8_t x142; uint64_t x143; uint8_t x144; uint64_t x145; uint8_t x146; uint64_t x147; uint8_t x148; uint64_t x149; uint8_t x150; uint64_t x151; uint8_t x152; uint64_t x153; uint8_t x154; uint8_t x155; uint64_t x156; uint8_t x157; uint64_t x158; uint8_t x159; uint64_t x160; uint8_t x161; uint64_t x162; uint8_t x163; uint64_t x164; uint8_t x165; uint64_t x166; uint8_t x167; uint8_t x168; uint64_t x169; uint8_t x170; uint64_t x171; uint8_t x172; uint64_t x173; uint8_t x174; uint64_t x175; uint8_t x176; uint64_t x177; uint8_t x178; uint64_t x179; uint8_t x180; uint8_t x181; fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u52( &x1, &x2, 0x0, (arg1[0]), UINT64_C(0xffffffffffdc7)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u51( &x3, &x4, x2, (arg1[1]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u51( &x5, &x6, x4, (arg1[2]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u51( &x7, &x8, x6, (arg1[3]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u51( &x9, &x10, x8, (arg1[4]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u52( &x11, &x12, x10, (arg1[5]), UINT64_C(0xfffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u51( &x13, &x14, x12, (arg1[6]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u51( &x15, &x16, x14, (arg1[7]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u51( &x17, &x18, x16, (arg1[8]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u51( &x19, &x20, x18, (arg1[9]), UINT64_C(0x7ffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u64( &x21, x20, 0x0, UINT64_C(0xffffffffffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u52( &x22, &x23, 0x0, x1, (x21 & UINT64_C(0xffffffffffdc7))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u51( &x24, &x25, x23, x3, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u51( &x26, &x27, x25, x5, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u51( &x28, &x29, x27, x7, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u51( &x30, &x31, x29, x9, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u52( &x32, &x33, x31, x11, (x21 & UINT64_C(0xfffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u51( &x34, &x35, x33, x13, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u51( &x36, &x37, x35, x15, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u51( &x38, &x39, x37, x17, (x21 & UINT64_C(0x7ffffffffffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u51( &x40, &x41, x39, x19, (x21 & UINT64_C(0x7ffffffffffff))); x42 = (x40 << 5); x43 = (x38 << 2); x44 = (x36 << 7); x45 = (x34 << 4); x46 = (x30 << 5); x47 = (x28 << 2); x48 = (x26 << 7); x49 = (x24 << 4); x50 = (uint8_t)(x22 & UINT8_C(0xff)); x51 = (x22 >> 8); x52 = (uint8_t)(x51 & UINT8_C(0xff)); x53 = (x51 >> 8); x54 = (uint8_t)(x53 & UINT8_C(0xff)); x55 = (x53 >> 8); x56 = (uint8_t)(x55 & UINT8_C(0xff)); x57 = (x55 >> 8); x58 = (uint8_t)(x57 & UINT8_C(0xff)); x59 = (x57 >> 8); x60 = (uint8_t)(x59 & UINT8_C(0xff)); x61 = (uint8_t)(x59 >> 8); x62 = (x49 + (uint64_t)x61); x63 = (uint8_t)(x62 & UINT8_C(0xff)); x64 = (x62 >> 8); x65 = (uint8_t)(x64 & UINT8_C(0xff)); x66 = (x64 >> 8); x67 = (uint8_t)(x66 & UINT8_C(0xff)); x68 = (x66 >> 8); x69 = (uint8_t)(x68 & UINT8_C(0xff)); x70 = (x68 >> 8); x71 = (uint8_t)(x70 & UINT8_C(0xff)); x72 = (x70 >> 8); x73 = (uint8_t)(x72 & UINT8_C(0xff)); x74 = (uint8_t)(x72 >> 8); x75 = (x48 + (uint64_t)x74); x76 = (uint8_t)(x75 & UINT8_C(0xff)); x77 = (x75 >> 8); x78 = (uint8_t)(x77 & UINT8_C(0xff)); x79 = (x77 >> 8); x80 = (uint8_t)(x79 & UINT8_C(0xff)); x81 = (x79 >> 8); x82 = (uint8_t)(x81 & UINT8_C(0xff)); x83 = (x81 >> 8); x84 = (uint8_t)(x83 & UINT8_C(0xff)); x85 = (x83 >> 8); x86 = (uint8_t)(x85 & UINT8_C(0xff)); x87 = (x85 >> 8); x88 = (uint8_t)(x87 & UINT8_C(0xff)); x89 = (uint8_t)(x87 >> 8); x90 = (x47 + (uint64_t)x89); x91 = (uint8_t)(x90 & UINT8_C(0xff)); x92 = (x90 >> 8); x93 = (uint8_t)(x92 & UINT8_C(0xff)); x94 = (x92 >> 8); x95 = (uint8_t)(x94 & UINT8_C(0xff)); x96 = (x94 >> 8); x97 = (uint8_t)(x96 & UINT8_C(0xff)); x98 = (x96 >> 8); x99 = (uint8_t)(x98 & UINT8_C(0xff)); x100 = (x98 >> 8); x101 = (uint8_t)(x100 & UINT8_C(0xff)); x102 = (uint8_t)(x100 >> 8); x103 = (x46 + (uint64_t)x102); x104 = (uint8_t)(x103 & UINT8_C(0xff)); x105 = (x103 >> 8); x106 = (uint8_t)(x105 & UINT8_C(0xff)); x107 = (x105 >> 8); x108 = (uint8_t)(x107 & UINT8_C(0xff)); x109 = (x107 >> 8); x110 = (uint8_t)(x109 & UINT8_C(0xff)); x111 = (x109 >> 8); x112 = (uint8_t)(x111 & UINT8_C(0xff)); x113 = (x111 >> 8); x114 = (uint8_t)(x113 & UINT8_C(0xff)); x115 = (uint8_t)(x113 >> 8); x116 = (uint8_t)(x32 & UINT8_C(0xff)); x117 = (x32 >> 8); x118 = (uint8_t)(x117 & UINT8_C(0xff)); x119 = (x117 >> 8); x120 = (uint8_t)(x119 & UINT8_C(0xff)); x121 = (x119 >> 8); x122 = (uint8_t)(x121 & UINT8_C(0xff)); x123 = (x121 >> 8); x124 = (uint8_t)(x123 & UINT8_C(0xff)); x125 = (x123 >> 8); x126 = (uint8_t)(x125 & UINT8_C(0xff)); x127 = (uint8_t)(x125 >> 8); x128 = (x45 + (uint64_t)x127); x129 = (uint8_t)(x128 & UINT8_C(0xff)); x130 = (x128 >> 8); x131 = (uint8_t)(x130 & UINT8_C(0xff)); x132 = (x130 >> 8); x133 = (uint8_t)(x132 & UINT8_C(0xff)); x134 = (x132 >> 8); x135 = (uint8_t)(x134 & UINT8_C(0xff)); x136 = (x134 >> 8); x137 = (uint8_t)(x136 & UINT8_C(0xff)); x138 = (x136 >> 8); x139 = (uint8_t)(x138 & UINT8_C(0xff)); x140 = (uint8_t)(x138 >> 8); x141 = (x44 + (uint64_t)x140); x142 = (uint8_t)(x141 & UINT8_C(0xff)); x143 = (x141 >> 8); x144 = (uint8_t)(x143 & UINT8_C(0xff)); x145 = (x143 >> 8); x146 = (uint8_t)(x145 & UINT8_C(0xff)); x147 = (x145 >> 8); x148 = (uint8_t)(x147 & UINT8_C(0xff)); x149 = (x147 >> 8); x150 = (uint8_t)(x149 & UINT8_C(0xff)); x151 = (x149 >> 8); x152 = (uint8_t)(x151 & UINT8_C(0xff)); x153 = (x151 >> 8); x154 = (uint8_t)(x153 & UINT8_C(0xff)); x155 = (uint8_t)(x153 >> 8); x156 = (x43 + (uint64_t)x155); x157 = (uint8_t)(x156 & UINT8_C(0xff)); x158 = (x156 >> 8); x159 = (uint8_t)(x158 & UINT8_C(0xff)); x160 = (x158 >> 8); x161 = (uint8_t)(x160 & UINT8_C(0xff)); x162 = (x160 >> 8); x163 = (uint8_t)(x162 & UINT8_C(0xff)); x164 = (x162 >> 8); x165 = (uint8_t)(x164 & UINT8_C(0xff)); x166 = (x164 >> 8); x167 = (uint8_t)(x166 & UINT8_C(0xff)); x168 = (uint8_t)(x166 >> 8); x169 = (x42 + (uint64_t)x168); x170 = (uint8_t)(x169 & UINT8_C(0xff)); x171 = (x169 >> 8); x172 = (uint8_t)(x171 & UINT8_C(0xff)); x173 = (x171 >> 8); x174 = (uint8_t)(x173 & UINT8_C(0xff)); x175 = (x173 >> 8); x176 = (uint8_t)(x175 & UINT8_C(0xff)); x177 = (x175 >> 8); x178 = (uint8_t)(x177 & UINT8_C(0xff)); x179 = (x177 >> 8); x180 = (uint8_t)(x179 & UINT8_C(0xff)); x181 = (uint8_t)(x179 >> 8); out1[0] = x50; out1[1] = x52; out1[2] = x54; out1[3] = x56; out1[4] = x58; out1[5] = x60; out1[6] = x63; out1[7] = x65; out1[8] = x67; out1[9] = x69; out1[10] = x71; out1[11] = x73; out1[12] = x76; out1[13] = x78; out1[14] = x80; out1[15] = x82; out1[16] = x84; out1[17] = x86; out1[18] = x88; out1[19] = x91; out1[20] = x93; out1[21] = x95; out1[22] = x97; out1[23] = x99; out1[24] = x101; out1[25] = x104; out1[26] = x106; out1[27] = x108; out1[28] = x110; out1[29] = x112; out1[30] = x114; out1[31] = x115; out1[32] = x116; out1[33] = x118; out1[34] = x120; out1[35] = x122; out1[36] = x124; out1[37] = x126; out1[38] = x129; out1[39] = x131; out1[40] = x133; out1[41] = x135; out1[42] = x137; out1[43] = x139; out1[44] = x142; out1[45] = x144; out1[46] = x146; out1[47] = x148; out1[48] = x150; out1[49] = x152; out1[50] = x154; out1[51] = x157; out1[52] = x159; out1[53] = x161; out1[54] = x163; out1[55] = x165; out1[56] = x167; out1[57] = x170; out1[58] = x172; out1[59] = x174; out1[60] = x176; out1[61] = x178; out1[62] = x180; out1[63] = x181; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes deserializes a field element from bytes in little-endian order. * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x10000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000], [0x0 ~> 0x8000000000000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes( uint64_t out1[10], const uint8_t arg1[64]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint8_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint8_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint8_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint8_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint8_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; uint64_t x110; uint8_t x111; uint64_t x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint8_t x128; uint64_t x129; uint64_t x130; uint64_t x131; uint64_t x132; uint64_t x133; uint64_t x134; uint64_t x135; uint8_t x136; uint64_t x137; uint64_t x138; uint64_t x139; uint64_t x140; uint64_t x141; uint64_t x142; x1 = ((uint64_t)(arg1[63]) << 43); x2 = ((uint64_t)(arg1[62]) << 35); x3 = ((uint64_t)(arg1[61]) << 27); x4 = ((uint64_t)(arg1[60]) << 19); x5 = ((uint64_t)(arg1[59]) << 11); x6 = ((uint64_t)(arg1[58]) << 3); x7 = ((uint64_t)(arg1[57]) << 46); x8 = ((uint64_t)(arg1[56]) << 38); x9 = ((uint64_t)(arg1[55]) << 30); x10 = ((uint64_t)(arg1[54]) << 22); x11 = ((uint64_t)(arg1[53]) << 14); x12 = ((uint64_t)(arg1[52]) << 6); x13 = ((uint64_t)(arg1[51]) << 49); x14 = ((uint64_t)(arg1[50]) << 41); x15 = ((uint64_t)(arg1[49]) << 33); x16 = ((uint64_t)(arg1[48]) << 25); x17 = ((uint64_t)(arg1[47]) << 17); x18 = ((uint64_t)(arg1[46]) << 9); x19 = ((uint64_t)(arg1[45]) * 0x2); x20 = ((uint64_t)(arg1[44]) << 44); x21 = ((uint64_t)(arg1[43]) << 36); x22 = ((uint64_t)(arg1[42]) << 28); x23 = ((uint64_t)(arg1[41]) << 20); x24 = ((uint64_t)(arg1[40]) << 12); x25 = ((uint64_t)(arg1[39]) << 4); x26 = ((uint64_t)(arg1[38]) << 48); x27 = ((uint64_t)(arg1[37]) << 40); x28 = ((uint64_t)(arg1[36]) << 32); x29 = ((uint64_t)(arg1[35]) << 24); x30 = ((uint64_t)(arg1[34]) << 16); x31 = ((uint64_t)(arg1[33]) << 8); x32 = (arg1[32]); x33 = ((uint64_t)(arg1[31]) << 43); x34 = ((uint64_t)(arg1[30]) << 35); x35 = ((uint64_t)(arg1[29]) << 27); x36 = ((uint64_t)(arg1[28]) << 19); x37 = ((uint64_t)(arg1[27]) << 11); x38 = ((uint64_t)(arg1[26]) << 3); x39 = ((uint64_t)(arg1[25]) << 46); x40 = ((uint64_t)(arg1[24]) << 38); x41 = ((uint64_t)(arg1[23]) << 30); x42 = ((uint64_t)(arg1[22]) << 22); x43 = ((uint64_t)(arg1[21]) << 14); x44 = ((uint64_t)(arg1[20]) << 6); x45 = ((uint64_t)(arg1[19]) << 49); x46 = ((uint64_t)(arg1[18]) << 41); x47 = ((uint64_t)(arg1[17]) << 33); x48 = ((uint64_t)(arg1[16]) << 25); x49 = ((uint64_t)(arg1[15]) << 17); x50 = ((uint64_t)(arg1[14]) << 9); x51 = ((uint64_t)(arg1[13]) * 0x2); x52 = ((uint64_t)(arg1[12]) << 44); x53 = ((uint64_t)(arg1[11]) << 36); x54 = ((uint64_t)(arg1[10]) << 28); x55 = ((uint64_t)(arg1[9]) << 20); x56 = ((uint64_t)(arg1[8]) << 12); x57 = ((uint64_t)(arg1[7]) << 4); x58 = ((uint64_t)(arg1[6]) << 48); x59 = ((uint64_t)(arg1[5]) << 40); x60 = ((uint64_t)(arg1[4]) << 32); x61 = ((uint64_t)(arg1[3]) << 24); x62 = ((uint64_t)(arg1[2]) << 16); x63 = ((uint64_t)(arg1[1]) << 8); x64 = (arg1[0]); x65 = (x63 + (uint64_t)x64); x66 = (x62 + x65); x67 = (x61 + x66); x68 = (x60 + x67); x69 = (x59 + x68); x70 = (x58 + x69); x71 = (x70 & UINT64_C(0xfffffffffffff)); x72 = (uint8_t)(x70 >> 52); x73 = (x57 + (uint64_t)x72); x74 = (x56 + x73); x75 = (x55 + x74); x76 = (x54 + x75); x77 = (x53 + x76); x78 = (x52 + x77); x79 = (x78 & UINT64_C(0x7ffffffffffff)); x80 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x78 >> 51); x81 = (x51 + (uint64_t)x80); x82 = (x50 + x81); x83 = (x49 + x82); x84 = (x48 + x83); x85 = (x47 + x84); x86 = (x46 + x85); x87 = (x45 + x86); x88 = (x87 & UINT64_C(0x7ffffffffffff)); x89 = (uint8_t)(x87 >> 51); x90 = (x44 + (uint64_t)x89); x91 = (x43 + x90); x92 = (x42 + x91); x93 = (x41 + x92); x94 = (x40 + x93); x95 = (x39 + x94); x96 = (x95 & UINT64_C(0x7ffffffffffff)); x97 = (uint8_t)(x95 >> 51); x98 = (x38 + (uint64_t)x97); x99 = (x37 + x98); x100 = (x36 + x99); x101 = (x35 + x100); x102 = (x34 + x101); x103 = (x33 + x102); x104 = (x31 + (uint64_t)x32); x105 = (x30 + x104); x106 = (x29 + x105); x107 = (x28 + x106); x108 = (x27 + x107); x109 = (x26 + x108); x110 = (x109 & UINT64_C(0xfffffffffffff)); x111 = (uint8_t)(x109 >> 52); x112 = (x25 + (uint64_t)x111); x113 = (x24 + x112); x114 = (x23 + x113); x115 = (x22 + x114); x116 = (x21 + x115); x117 = (x20 + x116); x118 = (x117 & UINT64_C(0x7ffffffffffff)); x119 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x117 >> 51); x120 = (x19 + (uint64_t)x119); x121 = (x18 + x120); x122 = (x17 + x121); x123 = (x16 + x122); x124 = (x15 + x123); x125 = (x14 + x124); x126 = (x13 + x125); x127 = (x126 & UINT64_C(0x7ffffffffffff)); x128 = (uint8_t)(x126 >> 51); x129 = (x12 + (uint64_t)x128); x130 = (x11 + x129); x131 = (x10 + x130); x132 = (x9 + x131); x133 = (x8 + x132); x134 = (x7 + x133); x135 = (x134 & UINT64_C(0x7ffffffffffff)); x136 = (uint8_t)(x134 >> 51); x137 = (x6 + (uint64_t)x136); x138 = (x5 + x137); x139 = (x4 + x138); x140 = (x3 + x139); x141 = (x2 + x140); x142 = (x1 + x141); out1[0] = x71; out1[1] = x79; out1[2] = x88; out1[3] = x96; out1[4] = x103; out1[5] = x110; out1[6] = x118; out1[7] = x127; out1[8] = x135; out1[9] = x142; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_tc26_gost_3410_2012_512_paramSetC/fe_inv.op3 * custom repunit addition chain */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t102, t12, t198, t2, t200, t24, t3, t400, t48, t502, t6, t96; fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t2, acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t3, acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t3); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t6, acc, t3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t6); for (i = 0; i < 5; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t12, acc, t6); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t12); for (i = 0; i < 11; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t24, acc, t12); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t24); for (i = 0; i < 23; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t48, acc, t24); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t48); for (i = 0; i < 47; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t96, acc, t48); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t96); for (i = 0; i < 5; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t102, acc, t6); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t102); for (i = 0; i < 95; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t198, acc, t96); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t198); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t200, acc, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t200); for (i = 0; i < 199; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t400, acc, t200); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t400); for (i = 0; i < 101; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t502, acc, t102); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t502); for (i = 0; i < 3; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(acc, acc, t3); for (i = 0; i < 4; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(output, acc, t1); } /* curve coefficient constants */ static const limb_t const_one[10] = { UINT64_C(0x0000000000000001), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000)}; static const limb_t const_d[10] = { UINT64_C(0x00002DBB33EE7550), UINT64_C(0x00042BC2A22B4CA3), UINT64_C(0x00073C6D3D23419F), UINT64_C(0x0001ACC138B390F9), UINT64_C(0x0005359CF0528AE0), UINT64_C(0x0008A0621050439C), UINT64_C(0x00054198E31EBDE2), UINT64_C(0x0006B7FC9B56805A), UINT64_C(0x000367C4E973CF37), UINT64_C(0x0004F27AEC600BEC)}; static const limb_t const_S[10] = { UINT64_C(0x0003F4913304621E), UINT64_C(0x0000F50F57752CD7), UINT64_C(0x000430E4B0B72F98), UINT64_C(0x000794CFB1D31BC1), UINT64_C(0x0006B298C3EB5D47), UINT64_C(0x0005D7E77BEBEF18), UINT64_C(0x0002AF99C7385087), UINT64_C(0x00005200D92A5FE9), UINT64_C(0x0007260EC5A30C32), UINT64_C(0x0000C36144E7FD04)}; static const limb_t const_T[10] = { UINT64_C(0x0002B249DDFD1271), UINT64_C(0x0004B1F5C5B1E21B), UINT64_C(0x00028A1234DB359A), UINT64_C(0x00004775897342D4), UINT64_C(0x0006339A280DC1D0), UINT64_C(0x000C1ABB02B80B44), UINT64_C(0x00038AEED0851FA5), UINT64_C(0x000273FF6F391564), UINT64_C(0x00033BF626E8A289), UINT64_C(0x0004D3147CBAACA7)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[8][16] = { { {{UINT64_C(0x0000000000000012), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000), UINT64_C(0x0000000000000000)}, {UINT64_C(0x000303EE73001A3D), UINT64_C(0x000404B2BAAE7600), UINT64_C(0x00072E65E120AC45), UINT64_C(0x00027BAFC1A31744), UINT64_C(0x000116EA5B2867BC), UINT64_C(0x0006117F7B386695), UINT64_C(0x000501794368D9A5), UINT64_C(0x0007403C541FBF61), UINT64_C(0x0005785AE6564ADD), UINT64_C(0x000234D7BCE8FD8F)}, {UINT64_C(0x000646C41601E12E), UINT64_C(0x0000549120444C03), UINT64_C(0x00014329D44C1CE3), UINT64_C(0x0004B25B9D77A2D8), UINT64_C(0x00039C7A68D74B3D), UINT64_C(0x000D3AF6A9F7367C), UINT64_C(0x00021A86BD5F4DA0), UINT64_C(0x0002843DEA3B74DD), UINT64_C(0x000276643211439A), UINT64_C(0x0007B72B4861D41A)}}, {{UINT64_C(0x000DDC3263F14838), UINT64_C(0x0001CBD1F17B2BCB), UINT64_C(0x0002BAFA22A82009), UINT64_C(0x0005322387667A03), UINT64_C(0x00055B751CB96A65), UINT64_C(0x000A0DFD0340FDE7), UINT64_C(0x0005C48FB27C4503), UINT64_C(0x000268CD738A33D9), UINT64_C(0x0001B2D195DC6145), UINT64_C(0x00006EA96DB2EACC)}, {UINT64_C(0x000BBCD609E2FF0C), UINT64_C(0x0005F4AE7E31E8D1), UINT64_C(0x000360BD6E15CC1F), UINT64_C(0x000409CF3A7414FB), UINT64_C(0x00031EE2AD0268C7), UINT64_C(0x0005CB4FB4D93FBB), UINT64_C(0x0003CADF6924D45D), UINT64_C(0x0001C5874E363854), UINT64_C(0x00037EFA0AF03B97), UINT64_C(0x00001148D12E29B3)}, {UINT64_C(0x000E0DB54C224325), UINT64_C(0x00010454C4B66E25), UINT64_C(0x000648D062587B3B), UINT64_C(0x0003D2EE25796057), UINT64_C(0x00004BB47D7FDE7C), UINT64_C(0x000244DB1E9D557B), UINT64_C(0x0006BE33D5802F21), UINT64_C(0x00042132C57B6D1F), UINT64_C(0x0003D487A5698542), UINT64_C(0x0007C1540EB060D1)}}, {{UINT64_C(0x00079342FE30B9C8), UINT64_C(0x00041A8C6FF7B725), UINT64_C(0x00075CAE2380D311), UINT64_C(0x00038F8B24FD7BC3), UINT64_C(0x0004844218778181), UINT64_C(0x000C42D63D57509A), UINT64_C(0x000535D988A70AAF), UINT64_C(0x0001A3FD38C3746A), UINT64_C(0x0001E914A2CBA533), UINT64_C(0x0004D2080711F2B0)}, {UINT64_C(0x0009F2BA98B41E21), UINT64_C(0x000615CCDD4A12CF), UINT64_C(0x0003EE0BB3543CA8), UINT64_C(0x00015A62A2476E14), UINT64_C(0x00061C939A6ECEDD), UINT64_C(0x000BE481A4C0C342), UINT64_C(0x000795DEC470D8C2), UINT64_C(0x0000ABE2CB782E96), UINT64_C(0x0007A7D6BF78D7EE), UINT64_C(0x0004E3A1B9FC9045)}, {UINT64_C(0x000BAEA9645E541E), UINT64_C(0x0002D492585BA0C5), UINT64_C(0x000114FE72026DC5), UINT64_C(0x00053A929E20E410), UINT64_C(0x00060E85CF97390E), UINT64_C(0x0007D39ADBD8478A), UINT64_C(0x0002063C667C0601), UINT64_C(0x000742C442708702), UINT64_C(0x0000A2426FB29578), UINT64_C(0x00048CBFCAE1F773)}}, {{UINT64_C(0x000A0BBFED323C86), UINT64_C(0x0006F7539EA3736E), UINT64_C(0x0005DF9B59EA30BF), UINT64_C(0x0005D9C303700CA0), UINT64_C(0x0001AB39B96006A3), UINT64_C(0x000D38FB4C2CE047), UINT64_C(0x0004257F3B363F21), UINT64_C(0x00018E0BAF6472A8), UINT64_C(0x000483ACD523D9F5), UINT64_C(0x00036FACA6C25759)}, {UINT64_C(0x000231905C4CD0FD), UINT64_C(0x00016CA0261FB96E), UINT64_C(0x00031D0ECAC833D3), UINT64_C(0x0003E05643F857D5), UINT64_C(0x000040F272FCC47D), UINT64_C(0x00067E5354B2A5B5), UINT64_C(0x0000AE3CF45E8B10), UINT64_C(0x000599F3DD49B217), UINT64_C(0x000626891D86B28E), UINT64_C(0x0003E3F07489D3C0)}, {UINT64_C(0x000C646BFDF7F340), UINT64_C(0x0001913CBD57D3CE), UINT64_C(0x00004B9386B4B830), UINT64_C(0x0007C9304B89B5D0), UINT64_C(0x00007520EC2D81FB), UINT64_C(0x0000D50731E5F0DF), UINT64_C(0x0006129D0F7AD03D), UINT64_C(0x0002FA03D5A61196), UINT64_C(0x0001A9011556D653), UINT64_C(0x0002A7D6F6C7BDB0)}}, {{UINT64_C(0x00061D011098A411), UINT64_C(0x000260BCC6C7F863), UINT64_C(0x0000E1117CD19373), UINT64_C(0x0004B68FE728DDED), UINT64_C(0x0002AA52ACFB998D), UINT64_C(0x00015AD84E849B1A), UINT64_C(0x0002CBCDF89B3EA6), UINT64_C(0x00067ABD295869C6), UINT64_C(0x0000C524BC70CA4A), UINT64_C(0x0004C62E5FE7557E)}, {UINT64_C(0x0007CFBEC39A14E2), UINT64_C(0x000626369976E030), UINT64_C(0x00032365D9DEE36F), UINT64_C(0x000734EC026C36B6), UINT64_C(0x00075F2357A20A57), UINT64_C(0x0006C63528ED47F5), UINT64_C(0x0000E985E6F0FA99), UINT64_C(0x00059351FE01E099), UINT64_C(0x0002C483F70283A2), UINT64_C(0x0004E1A30B241A78)}, {UINT64_C(0x0003579D4EB3F8B7), UINT64_C(0x000127186D359C4A), UINT64_C(0x000625FBDA161934), UINT64_C(0x000786DE6F454C06), UINT64_C(0x00032BA63340A9DB), UINT64_C(0x0000CC026D945494), UINT64_C(0x000079206668566B), UINT64_C(0x00046E3529640A46), UINT64_C(0x000533DFE4808D98), UINT64_C(0x0001202AEF1AA871)}}, {{UINT64_C(0x000D5A034C320711), UINT64_C(0x00046D5DEC9CBE0A), UINT64_C(0x0002FD14714E2D8B), UINT64_C(0x00071E0CE392B781), UINT64_C(0x0006EE842039DCC6), UINT64_C(0x0002AFE7EEFBE82E), UINT64_C(0x0001706CA91CE495), UINT64_C(0x0005B0F58587732F), UINT64_C(0x0003BA85FDED0A5B), UINT64_C(0x00054CEBB3898127)}, {UINT64_C(0x000A6C4C3C22D5DC), UINT64_C(0x0003FD092008F2AF), UINT64_C(0x000678C1C38BE060), UINT64_C(0x00029494E571D7ED), UINT64_C(0x000679B640BD621E), UINT64_C(0x000E89487D97914B), UINT64_C(0x0003B91C01A032CB), UINT64_C(0x0005715AFC07377B), UINT64_C(0x0006AB64B7814DA4), UINT64_C(0x0005E7734E1241FA)}, {UINT64_C(0x000EBC29D557AFE2), UINT64_C(0x00015EA9E492702C), UINT64_C(0x00039B8FF4CB3E25), UINT64_C(0x0005D3DA87AD6898), UINT64_C(0x0001B20F6958F437), UINT64_C(0x000FE179ED072875), UINT64_C(0x0003299FC0106D8A), UINT64_C(0x00063AB8C98927F6), UINT64_C(0x0004425DDEB4A8FE), UINT64_C(0x00021FCE1531E24E)}}, {{UINT64_C(0x0007745E07BBFFEF), UINT64_C(0x0007125991A3183C), UINT64_C(0x000288F58C85404B), UINT64_C(0x0005F0E01F988465), UINT64_C(0x00058A085EA50075), UINT64_C(0x00006AB7768A5A2B), UINT64_C(0x00043ABF68337850), UINT64_C(0x00075B86C98A35FB), UINT64_C(0x000612842EA8B184), UINT64_C(0x000109A8BB7AB3ED)}, {UINT64_C(0x0004F08D1A6DDAC3), UINT64_C(0x0005B2B420BFE682), UINT64_C(0x00010DFAF256A129), UINT64_C(0x0001B6CDADBEB8E5), UINT64_C(0x0006F611F5281A54), UINT64_C(0x000A1B472B862641), UINT64_C(0x000335A2003B6703), UINT64_C(0x00008AD4CAD5F73B), UINT64_C(0x0007A0EC3F0E578C), UINT64_C(0x00023141F13E5FA2)}, {UINT64_C(0x0005188CBAD97549), UINT64_C(0x0001F6C5FC0F255B), UINT64_C(0x00036A526CAC9622), UINT64_C(0x0000BB287D684ADB), UINT64_C(0x0006F28BF1F5FA01), UINT64_C(0x000D7D8997333372), UINT64_C(0x000236EF8A6D2653), UINT64_C(0x0000C2BF98DACC6E), UINT64_C(0x0002FA4352B452E0), UINT64_C(0x00043FDC45864176)}}, {{UINT64_C(0x000EA137F595EE0D), UINT64_C(0x000179D93A5775A9), UINT64_C(0x0001E0372E081E93), UINT64_C(0x0003A69DAD123CC1), UINT64_C(0x00025A2C66DE635D), UINT64_C(0x0002EEA6D51CD899), UINT64_C(0x0003138B80BA676F), UINT64_C(0x000411B2C78B4F07), UINT64_C(0x0007AAE1E0D50C65), UINT64_C(0x000528F5BDE8B6D3)}, {UINT64_C(0x000D742C7F0B19BD), UINT64_C(0x0006DBF28C91828A), UINT64_C(0x00076FE332464CA9), UINT64_C(0x0001873DC4EBC9D9), UINT64_C(0x00014016F9C485A4), UINT64_C(0x000F894AD46EB122), UINT64_C(0x0006AE2B805EB995), UINT64_C(0x00004C6AF846DDB3), UINT64_C(0x0004C43621B2FA9D), UINT64_C(0x0001C9C1089132C7)}, {UINT64_C(0x0007B12746972BA5), UINT64_C(0x00010D7707EB91D0), UINT64_C(0x00057125FEF70465), UINT64_C(0x000722135480EB9A), UINT64_C(0x000439824482D29B), UINT64_C(0x00019B590375A86B), UINT64_C(0x000732235FA4483D), UINT64_C(0x00035CD4C74AE3F3), UINT64_C(0x00076A29C3A22075), UINT64_C(0x0001E3D85B615311)}}, {{UINT64_C(0x0005CCC96BFF3A5F), UINT64_C(0x0001D6DCC8ACE7EF), UINT64_C(0x0001B8A8497C7E75), UINT64_C(0x0001448EF2271B21), UINT64_C(0x000469E763024DA6), UINT64_C(0x000C1E4859EDB4E8), UINT64_C(0x00022B32D11EA0B8), UINT64_C(0x0007833F6716976E), UINT64_C(0x00056E62E2CC647C), UINT64_C(0x00060A6CC7E8F469)}, {UINT64_C(0x000A5D20AC5EDF20), UINT64_C(0x0006BD1CB9C662A5), UINT64_C(0x000053F695AD3F0C), UINT64_C(0x0003BB68B21BAC80), UINT64_C(0x0006FA23083E49C3), UINT64_C(0x000960F58A7F49C4), UINT64_C(0x000534DF3026534A), UINT64_C(0x00068C4D4E5AFD06), UINT64_C(0x00003C47E39095B9), UINT64_C(0x000113AD9DE11151)}, {UINT64_C(0x000AD10BAF7B6E7F), UINT64_C(0x0005FBD2F1D1D0A6), UINT64_C(0x00064E2BF5A74481), UINT64_C(0x00000C9DED412AB9), UINT64_C(0x0006DF76D2881747), UINT64_C(0x000F68ADE96EFAEE), UINT64_C(0x0007CF2EE2DD3D95), UINT64_C(0x00029109B2E5028B), UINT64_C(0x000084C0C872E5AF), UINT64_C(0x00055EF1044EE901)}}, {{UINT64_C(0x0000978CD0735FB2), UINT64_C(0x0000A3B4EC3A861F), UINT64_C(0x00024123B8F06382), UINT64_C(0x00076C7DAA554F27), UINT64_C(0x0001B6A5E18D2E6A), UINT64_C(0x000947CC76EF8A46), UINT64_C(0x0001CA1CA453479A), UINT64_C(0x000072531851597A), UINT64_C(0x00005962E72A5B9F), UINT64_C(0x00035F4D1AE3ECEF)}, {UINT64_C(0x00063950B57813F3), UINT64_C(0x0003955052095B99), UINT64_C(0x0000910D0C16F997), UINT64_C(0x0006561C81D19E24), UINT64_C(0x0005BD32E2B1D2DC), UINT64_C(0x000B1BCFBCC703F8), UINT64_C(0x00044176746C4650), UINT64_C(0x00025ECF08C32C2B), UINT64_C(0x00034A09E20BB15C), UINT64_C(0x00059E3EA6051146)}, {UINT64_C(0x0005697698D05E0F), UINT64_C(0x00053B12113E48E9), UINT64_C(0x0003CCFD3B3F2E28), UINT64_C(0x0003B625F59D23B8), UINT64_C(0x0005E36ACA4E9712), UINT64_C(0x0003CD4602A4EB25), UINT64_C(0x0001F0A79E67888A), UINT64_C(0x0001A3BB856644D1), UINT64_C(0x0007BC8D45D9BE80), UINT64_C(0x000240C74D67C49F)}}, {{UINT64_C(0x000F4AB4ACE9FBFB), UINT64_C(0x0001323C2E448C11), UINT64_C(0x0007E627CF56EBD6), UINT64_C(0x0000AFD6CA7DE511), UINT64_C(0x0006DCC97293C201), UINT64_C(0x00045898E21442A0), UINT64_C(0x0004D8D6616961DB), UINT64_C(0x000120025DFF12D0), UINT64_C(0x00027486D92674F0), UINT64_C(0x0000E577FD8D1E8D)}, {UINT64_C(0x0008D1FF64347FD3), UINT64_C(0x0000B5503113ECB8), UINT64_C(0x0006A04E1F0AD932), UINT64_C(0x0005EFDB668B751C), UINT64_C(0x0007A75A308E95E9), UINT64_C(0x000DE0F991E7DCE0), UINT64_C(0x0001AC3243FB2D46), UINT64_C(0x0007C4CD25A8CCA1), UINT64_C(0x00020F39C66C4FB0), UINT64_C(0x00030EF201B6694C)}, {UINT64_C(0x000D02B23C415547), UINT64_C(0x000585D53C64FF35), UINT64_C(0x0003D4E05329F658), UINT64_C(0x0003E78544910FE9), UINT64_C(0x000145FA301F1487), UINT64_C(0x00084D749E22B3AC), UINT64_C(0x0005DB00726E0F27), UINT64_C(0x00049F8B12327E02), UINT64_C(0x00066FA6FAE6E30F), UINT64_C(0x000148864CA7B024)}}, {{UINT64_C(0x00072DB89831C22E), UINT64_C(0x000212B7A78FBD12), UINT64_C(0x00021EB595C4F6D8), UINT64_C(0x000230B818D0625E), UINT64_C(0x000432CEBFBE8326), UINT64_C(0x0005A4237390A4E7), UINT64_C(0x00048BC4F80E39D8), UINT64_C(0x0002C266EDA08C65), UINT64_C(0x0003003D1ACFB73A), UINT64_C(0x0003B25FB2316C33)}, {UINT64_C(0x0001309EB03AE17C), UINT64_C(0x0006B7D21F1AC8CA), UINT64_C(0x00030F22AD66CC64), UINT64_C(0x00068CAE1E8A8AE4), UINT64_C(0x000036B8E12F02A1), UINT64_C(0x00051A9A31790107), UINT64_C(0x0002BC64D9C75BC2), UINT64_C(0x00012E0A5E87C678), UINT64_C(0x0005A6B78E7A5666), UINT64_C(0x0007ADC780A85627)}, {UINT64_C(0x000623C20A48F7FB), UINT64_C(0x00068BD279754B54), UINT64_C(0x000214146A030D28), UINT64_C(0x0000BCF5046BE3DE), UINT64_C(0x0007F0B1C26980FD), UINT64_C(0x000E951243CBB013), UINT64_C(0x0003FEDEE8A79D6A), UINT64_C(0x00037CD9BA1B93CC), UINT64_C(0x00060FA57A12C244), UINT64_C(0x000342025E288D46)}}, {{UINT64_C(0x00060F5BE50D6219), UINT64_C(0x0004F425F334521F), UINT64_C(0x000084F4C30F8CB3), UINT64_C(0x0004572CAA850AB6), UINT64_C(0x0007491416856BB1), UINT64_C(0x000DD438508B179E), UINT64_C(0x0005AF1DAD1E9061), UINT64_C(0x00072FF71C440602), UINT64_C(0x000640C33C87D2DD), UINT64_C(0x0006CEED81188498)}, {UINT64_C(0x000EFB091DF854C6), UINT64_C(0x00028A1D31C19FA0), UINT64_C(0x0002A9A404668E0B), UINT64_C(0x000727F82CC27ACF), UINT64_C(0x000126282CC527D7), UINT64_C(0x00014FAB2CE4AC32), UINT64_C(0x0001FAFC4C09B367), UINT64_C(0x000252F0B2B54F3B), UINT64_C(0x0007E8131BAA6FF5), UINT64_C(0x000517793281415B)}, {UINT64_C(0x000BDEBEB66BDFE8), UINT64_C(0x0002CC5E9E8B6103), UINT64_C(0x00004B6B392825E5), UINT64_C(0x0002C59B6082CA61), UINT64_C(0x000540C66BBC2394), UINT64_C(0x0003927DEFBBC62D), UINT64_C(0x0001F26C16D6387C), UINT64_C(0x000086AB5563FC8E), UINT64_C(0x00064F3E8C626EBD), UINT64_C(0x0000C841CACA38C0)}}, {{UINT64_C(0x0000A508668F873E), UINT64_C(0x00005FDC5913D7CF), UINT64_C(0x00077CFFBBDCF5A1), UINT64_C(0x0003F77B2390B8D4), UINT64_C(0x0005594711779416), UINT64_C(0x0005ADA86CAF4491), UINT64_C(0x0007F7C714C93E3D), UINT64_C(0x0005186774E545D7), UINT64_C(0x0002C4325416B617), UINT64_C(0x0002EAF1D8B132CD)}, {UINT64_C(0x000AEBD507E37692), UINT64_C(0x000309A15EAB0693), UINT64_C(0x0005FF4C2A7A5D05), UINT64_C(0x000218CCB516CA7F), UINT64_C(0x000091C7C9915F63), UINT64_C(0x00004C73F619E0B9), UINT64_C(0x00018867BD8D792A), UINT64_C(0x00077DF8951E6F62), UINT64_C(0x0002FCA92BD5A710), UINT64_C(0x0003DE1F4CB64968)}, {UINT64_C(0x0007D8C68947865A), UINT64_C(0x00035B85E8AF7920), UINT64_C(0x000138BC855475E9), UINT64_C(0x00065B8343CF3C8E), UINT64_C(0x00072C46C618D9B0), UINT64_C(0x000DD020C6DF0D12), UINT64_C(0x000470F00A8FAEE1), UINT64_C(0x0005DAF00E2DC642), UINT64_C(0x00063930E56AAF60), UINT64_C(0x000286F9B967AAC9)}}, {{UINT64_C(0x000DD90F276D31AF), UINT64_C(0x0000EA6D5DBA194F), UINT64_C(0x000430D033491006), UINT64_C(0x0007F9FA0D60BE75), UINT64_C(0x0004B562950EEA1A), UINT64_C(0x000E6BCD0715D21E), UINT64_C(0x0000590F8E3023F7), UINT64_C(0x0001D19FD03857CA), UINT64_C(0x000620A7B51ED174), UINT64_C(0x0001D40D3102B572)}, {UINT64_C(0x00032D705F8518C5), UINT64_C(0x0000368F16F69285), UINT64_C(0x00031B1912C61DA8), UINT64_C(0x0006862322CE1F30), UINT64_C(0x00010660B97D08CF), UINT64_C(0x00035D64540A6D07), UINT64_C(0x0004199885EE5BEA), UINT64_C(0x00028D3C28F71406), UINT64_C(0x000098A7ED42E515), UINT64_C(0x0000033517091A8F)}, {UINT64_C(0x000BEEAD956FEED8), UINT64_C(0x0006D144B99B7E54), UINT64_C(0x0006620FDB6DADBF), UINT64_C(0x00065F15A8F5ECA2), UINT64_C(0x00024170192B151F), UINT64_C(0x0006068B65F5278C), UINT64_C(0x0006AB4CACC7BF25), UINT64_C(0x0006680608A271D0), UINT64_C(0x00025004C7539417), UINT64_C(0x000727215A3B6BFA)}}, {{UINT64_C(0x000FAA227F4F5AD3), UINT64_C(0x00048C30B1278D75), UINT64_C(0x0004C2380F042C08), UINT64_C(0x0006F4250A5404FA), UINT64_C(0x0000E5775C9D6EA4), UINT64_C(0x000C434ED2579348), UINT64_C(0x00043B279220C0B7), UINT64_C(0x00011C3AB979AF10), UINT64_C(0x000593B8B6831C9A), UINT64_C(0x0000C951C87E440D)}, {UINT64_C(0x0009E652CBEBE9EA), UINT64_C(0x0002D471C31CC4A7), UINT64_C(0x0001180C86178F58), UINT64_C(0x0004A1CBEE332A03), UINT64_C(0x0004F056D32EEC00), UINT64_C(0x000E9D6F5A148CC7), UINT64_C(0x00038F214F11933B), UINT64_C(0x0006AB7F8DF475B6), UINT64_C(0x00016E32A36F4E7A), UINT64_C(0x00002D0656419319)}, {UINT64_C(0x000FCD3F816A5978), UINT64_C(0x0006041C99F186A9), UINT64_C(0x0001D3D980EFB038), UINT64_C(0x0007E9FDEA9BE147), UINT64_C(0x00032BCE66E90B6D), UINT64_C(0x0001B6674476F1BF), UINT64_C(0x00051E25FEF557ED), UINT64_C(0x000029CDE03D236F), UINT64_C(0x000478BCDD0C953A), UINT64_C(0x0004BEBB6141C907)}}, }, { {{UINT64_C(0x0009E2E990726798), UINT64_C(0x00009676B8E190DC), UINT64_C(0x00048C9965EA2A0C), UINT64_C(0x0004EF181E315DD7), UINT64_C(0x00003A6A0FE2B108), UINT64_C(0x0004B4B789B5786E), UINT64_C(0x0001839D83E4BC52), UINT64_C(0x0003B9D09BE4ACFC), UINT64_C(0x000603A800326917), UINT64_C(0x0007C7926D46765A)}, {UINT64_C(0x000BDE461C54BBE9), UINT64_C(0x00030C12C7BE3000), UINT64_C(0x00068D49E4D38051), UINT64_C(0x000002424DFF63EE), UINT64_C(0x0006748D0F817A7A), UINT64_C(0x000DAAAC34BF5895), UINT64_C(0x0004BF755438F5F4), UINT64_C(0x00031C0109A0A789), UINT64_C(0x0000257084478A82), UINT64_C(0x0000EADEDC01C8B8)}, {UINT64_C(0x000BA95D208FC8C9), UINT64_C(0x000171FB35AEDA7D), UINT64_C(0x0002108B68CD61DE), UINT64_C(0x00032F4E1D4BC730), UINT64_C(0x0000FFB462AB7826), UINT64_C(0x000A3E9F4B3F7B0E), UINT64_C(0x0001E70DB7658F11), UINT64_C(0x00028C2EF3EEB807), UINT64_C(0x000753BD52CA29CE), UINT64_C(0x000547E50673926A)}}, {{UINT64_C(0x000F9CABD5C6650F), UINT64_C(0x00036740AC449DBC), UINT64_C(0x0004759192EC241F), UINT64_C(0x000381C0F9E7EAB2), UINT64_C(0x00063278E1545DA8), UINT64_C(0x000037A5B7E50AB6), UINT64_C(0x000476FAC0FF808E), UINT64_C(0x00036E5576C1E063), UINT64_C(0x00027A9D39B89A83), UINT64_C(0x0006F1DA42C4750F)}, {UINT64_C(0x0000C0B93DC3C004), UINT64_C(0x00035D0E6F5E38D1), UINT64_C(0x00061A730762CA71), UINT64_C(0x0003A620EFD387BE), UINT64_C(0x0003E2EC3540ED15), UINT64_C(0x000E424C214D117F), UINT64_C(0x0003E1325B0BB449), UINT64_C(0x0006FC7D1FC2FC7C), UINT64_C(0x00073F72D066FB57), UINT64_C(0x0004B2D6EC5C213B)}, {UINT64_C(0x000ACB4FC84F8936), UINT64_C(0x0000757CBE4C50D6), UINT64_C(0x00049E1C99C1E958), UINT64_C(0x0007D86D6FF27A95), UINT64_C(0x00029876C3EF1BD5), UINT64_C(0x000A9E00A5CBE886), UINT64_C(0x0000BD4E512C515F), UINT64_C(0x0005C75102170269), UINT64_C(0x0007807E85A235DA), UINT64_C(0x000293A17091A760)}}, {{UINT64_C(0x000308924C47EA21), UINT64_C(0x0007EFFEAF16E651), UINT64_C(0x0007D78EEF6B95C8), UINT64_C(0x000480EBCBF733D4), UINT64_C(0x0001F759131373D1), UINT64_C(0x000F52DAA6D26E12), UINT64_C(0x0001AA1A394183A6), UINT64_C(0x00031E24C017EBE3), UINT64_C(0x000134A7ECCB3DEC), UINT64_C(0x0001EAACFA806C01)}, {UINT64_C(0x0000C8DC99E4D9E5), UINT64_C(0x0000499FCD94685F), UINT64_C(0x0004FB45C9641579), UINT64_C(0x00014AE4737E13F2), UINT64_C(0x0005BAC25108C107), UINT64_C(0x000407F8F14C185F), UINT64_C(0x0003281019A9EC49), UINT64_C(0x00018C647189223F), UINT64_C(0x00077667AEF20006), UINT64_C(0x000342D230F93D40)}, {UINT64_C(0x000C9265EF97099F), UINT64_C(0x0002CB0A3B71869F), UINT64_C(0x0000DD18B78BEFAB), UINT64_C(0x000445C0E95393D6), UINT64_C(0x00022C17960D9AEB), UINT64_C(0x00055752E5A3E34F), UINT64_C(0x00029B02A7513832), UINT64_C(0x000115BB849BE596), UINT64_C(0x00070895A6FD0E07), UINT64_C(0x0002E9C698B128A0)}}, {{UINT64_C(0x0000460245EC561C), UINT64_C(0x000759CFCDC4304B), UINT64_C(0x0000354F11DD3770), UINT64_C(0x00034ECA59B714C8), UINT64_C(0x0006DEB5CFBFE8AA), UINT64_C(0x0009C83E53DD01E1), UINT64_C(0x000681045B1B2B4B), UINT64_C(0x00066B499D80354A), UINT64_C(0x0007B09A32C5EB10), UINT64_C(0x0007F5BFC7687E65)}, {UINT64_C(0x0007DBDD7509D7B6), UINT64_C(0x0001FF07267C40F7), UINT64_C(0x00020C1AAC3C0409), UINT64_C(0x0006148B211F9D4A), UINT64_C(0x0007D9183357E99A), UINT64_C(0x0005FB86106C8179), UINT64_C(0x00061566F3217886), UINT64_C(0x00064086D6797E68), UINT64_C(0x0000AAE710B5D9A0), UINT64_C(0x0003A7960D860C8C)}, {UINT64_C(0x000BA0F7583190C4), UINT64_C(0x00076FA655DA6153), UINT64_C(0x0006AD011EF06120), UINT64_C(0x0001B9919F914745), UINT64_C(0x0006933CC4A1F75E), UINT64_C(0x0008B0C001D798B5), UINT64_C(0x0003A7401C076C5F), UINT64_C(0x0002A5E88685994E), UINT64_C(0x00040E300EEB5F5B), UINT64_C(0x000401FE079260EE)}}, {{UINT64_C(0x000659914EBDF906), UINT64_C(0x0004AC87025B5364), UINT64_C(0x0000284A5CDE167E), UINT64_C(0x0003DCE5E16B1561), UINT64_C(0x000109507CE45C7B), UINT64_C(0x000E774890C7761C), UINT64_C(0x0005E1CED11C691A), UINT64_C(0x0000B979E77DA4D4), UINT64_C(0x0004EF607D7B0F58), UINT64_C(0x000597CD44BFB28F)}, {UINT64_C(0x000A69885D31FD12), UINT64_C(0x00077B176FC02779), UINT64_C(0x00032C80E3987695), UINT64_C(0x00075F209C1E30BB), UINT64_C(0x0001009FD731AAC0), UINT64_C(0x000D3EB5362EA2CF), UINT64_C(0x0001D6C33BB4F1EC), UINT64_C(0x0005811CB2ECEF96), UINT64_C(0x00057D8C6C5AE4E1), UINT64_C(0x0004B4EA22243336)}, {UINT64_C(0x000E6D776CDADB51), UINT64_C(0x00059CCC0F8E0BB1), UINT64_C(0x000788DF3C7AD498), UINT64_C(0x000142A89307C686), UINT64_C(0x00016B22FB5E10E8), UINT64_C(0x0004175AE2F3EB2B), UINT64_C(0x0002B10B599DE0CC), UINT64_C(0x0001EBE2F56C5287), UINT64_C(0x0001A33116E45EDF), UINT64_C(0x0004AE20B6AA13BB)}}, {{UINT64_C(0x000D4F1640E31025), UINT64_C(0x00005369F3A71705), UINT64_C(0x0006E57097B5B700), UINT64_C(0x000287C31DDA7EB0), UINT64_C(0x0006BD941635599D), UINT64_C(0x000958A013ADB362), UINT64_C(0x000797EC3AF59A21), UINT64_C(0x000532140C91BE6E), UINT64_C(0x0004936CF742D1B9), UINT64_C(0x0006D291755B4C5F)}, {UINT64_C(0x0000A926A8EE98B9), UINT64_C(0x00046DFF06B0EA14), UINT64_C(0x000422FF6FD967CC), UINT64_C(0x000779542C4521B1), UINT64_C(0x000469BEAB421801), UINT64_C(0x000E418E584BB6E2), UINT64_C(0x00009CA813EF2F4E), UINT64_C(0x0005F68592828DF0), UINT64_C(0x0000656C0BBF9122), UINT64_C(0x0000CCB05A025C71)}, {UINT64_C(0x000E98CF9AA86649), UINT64_C(0x0004280C51AC4674), UINT64_C(0x00069006DA4ABEB3), UINT64_C(0x00046B1CDF4D42C3), UINT64_C(0x00052325C9885550), UINT64_C(0x00030D64AFD848FD), UINT64_C(0x0002C8ACC81C6FC5), UINT64_C(0x00047CB0D16BECBB), UINT64_C(0x000424989DA2A6C5), UINT64_C(0x000168C78A279267)}}, {{UINT64_C(0x000D255173B3974D), UINT64_C(0x00078AB8051F9D89), UINT64_C(0x0005D31E2BD6FAF8), UINT64_C(0x0007DECEFF2FED16), UINT64_C(0x0000A995EBB1AF3C), UINT64_C(0x000EC88849F934DD), UINT64_C(0x0003F4357D1349BF), UINT64_C(0x0003003724CCAD86), UINT64_C(0x0005CC63A601A857), UINT64_C(0x000343B88A410741)}, {UINT64_C(0x000B861EBEC11DA3), UINT64_C(0x0002F7DA0CE66B58), UINT64_C(0x0004A05CFDD667EC), UINT64_C(0x000618C4234E4317), UINT64_C(0x00077E534DE5E42D), UINT64_C(0x000F510ACBE2E35B), UINT64_C(0x0004D176CC3F8974), UINT64_C(0x0004199583F06449), UINT64_C(0x0000406979E0EB70), UINT64_C(0x000695F16DD2B384)}, {UINT64_C(0x000B5F01887D972B), UINT64_C(0x000591009B9788BD), UINT64_C(0x0001CFB8C1E46165), UINT64_C(0x0005B8112A6084A0), UINT64_C(0x00049527793479C1), UINT64_C(0x000B187275AFF4A8), UINT64_C(0x00049D80550875EB), UINT64_C(0x00065B3359B96DBD), UINT64_C(0x0001FB8879675983), UINT64_C(0x0005DEBD62191D57)}}, {{UINT64_C(0x000D1CA24C4248EB), UINT64_C(0x0005F680B9DB4143), UINT64_C(0x000332A16BFB989D), UINT64_C(0x000753E5C1BD1DD6), UINT64_C(0x0004FB5069A3DD11), UINT64_C(0x000B36967D95CB7F), UINT64_C(0x0007C1A743B83E84), UINT64_C(0x0000AEE0A0745A8D), UINT64_C(0x0006C7A9C91323B2), UINT64_C(0x000528CD9463AAFB)}, {UINT64_C(0x000C466D9EBE068D), UINT64_C(0x00013A27797DC234), UINT64_C(0x00018F27D8B96428), UINT64_C(0x000024C1197D66BB), UINT64_C(0x00030D29442EEAC4), UINT64_C(0x000D7F436D88C8D7), UINT64_C(0x00041C67DD503E48), UINT64_C(0x00071B77621F3C37), UINT64_C(0x0001E384DE527534), UINT64_C(0x0004A3548D4230EF)}, {UINT64_C(0x0009D0F8D367877F), UINT64_C(0x000144D7265E0804), UINT64_C(0x0005645C59D64EAE), UINT64_C(0x000533EB925569B6), UINT64_C(0x0004DFD1C43D5A74), UINT64_C(0x000E0AA14014632B), UINT64_C(0x0005693798BB1AC4), UINT64_C(0x00000B28BE3E0068), UINT64_C(0x000379AAA7EAE112), UINT64_C(0x0000247F1C8CFD8E)}}, {{UINT64_C(0x000C15D58808355F), UINT64_C(0x0003A9B54B4046D8), UINT64_C(0x0003BE1A6AB6A8D7), UINT64_C(0x000699C7D04884C2), UINT64_C(0x00055A19B13E30E6), UINT64_C(0x000FBA511C14C314), UINT64_C(0x0007C4B1AB58948C), UINT64_C(0x00014F0D999CB430), UINT64_C(0x0007AFCB455F6D0F), UINT64_C(0x00013287261490BE)}, {UINT64_C(0x000C39060A09A6A6), UINT64_C(0x00068EFAAE7BEA33), UINT64_C(0x0000F39708828339), UINT64_C(0x00074458444BC73B), UINT64_C(0x0004EBB9FE3A3451), UINT64_C(0x0002963523524531), UINT64_C(0x0002BA9B39DAC86F), UINT64_C(0x000296C0868A96CA), UINT64_C(0x0000E1FD8D0A7823), UINT64_C(0x00010A911670FB07)}, {UINT64_C(0x000F856897F72F1E), UINT64_C(0x0000EEE5678607C6), UINT64_C(0x000517CD2197022F), UINT64_C(0x0004BEDF2B12DB4D), UINT64_C(0x00019C0AF97A5D1D), UINT64_C(0x000374FACB3B50F7), UINT64_C(0x0003917CBAD403FF), UINT64_C(0x0004C4704E757E6D), UINT64_C(0x00029A25D20AD24F), UINT64_C(0x000369770FC2A344)}}, {{UINT64_C(0x0008DA57843C3422), UINT64_C(0x000082AA03CF53E5), UINT64_C(0x0007396268B0FA19), UINT64_C(0x000148F2D5ECB6B4), UINT64_C(0x0000E4C3E6069C02), UINT64_C(0x0008A317BACC7D91), UINT64_C(0x00023FB0B882B0C6), UINT64_C(0x0003470CCBB116C6), UINT64_C(0x0001DD2C55D9FCCD), UINT64_C(0x0003D996E34873D8)}, {UINT64_C(0x000494440ECC3AB3), UINT64_C(0x0002540E1E629CBC), UINT64_C(0x0007355927AA0DA6), UINT64_C(0x000617CCFB6EB6C6), UINT64_C(0x00045DCD2CD0B597), UINT64_C(0x000A9351FEF0BD26), UINT64_C(0x0000E241A46E98C5), UINT64_C(0x00011AAC255B8C6D), UINT64_C(0x00077EB6092D7F54), UINT64_C(0x00006C19945480AB)}, {UINT64_C(0x0008B1824E089690), UINT64_C(0x0004658566F83B39), UINT64_C(0x0007A1E24B6B0E67), UINT64_C(0x0003546FE60DC8CA), UINT64_C(0x000527C86CABEAC9), UINT64_C(0x0006138EFAB370BD), UINT64_C(0x000367B7A18E4830), UINT64_C(0x0005F41E7F74F931), UINT64_C(0x00043CD498AEE92B), UINT64_C(0x00036640F17461CB)}}, {{UINT64_C(0x00014F84E18CA5AB), UINT64_C(0x000581E482520BE7), UINT64_C(0x0006D3C0B43466D5), UINT64_C(0x000717397C15F270), UINT64_C(0x0002926AAAE17414), UINT64_C(0x000CEE21A20BFDB7), UINT64_C(0x0005627F8C434E1F), UINT64_C(0x0007B06611540ADD), UINT64_C(0x00017C0766AD8FF8), UINT64_C(0x0001A6DF1F7CFD76)}, {UINT64_C(0x00048F19C87B8FFD), UINT64_C(0x000738685355DF41), UINT64_C(0x00062D4C85207B23), UINT64_C(0x0004DA81080542F4), UINT64_C(0x0002595A163374DE), UINT64_C(0x00077DF196F75779), UINT64_C(0x0003CC24DA342DED), UINT64_C(0x00071C8601CD59A9), UINT64_C(0x000575ED879C1606), UINT64_C(0x0003C9A80845E0C4)}, {UINT64_C(0x000E4341EC68E990), UINT64_C(0x00007DB9731C2EAE), UINT64_C(0x00050B4AC8A0C069), UINT64_C(0x00020F490D1B024D), UINT64_C(0x00067C6E1654BBA0), UINT64_C(0x0003EFDE035BD6AF), UINT64_C(0x0003C25584A7D506), UINT64_C(0x000591764CC32886), UINT64_C(0x0006FC9CB331260F), UINT64_C(0x00017E5D60885352)}}, {{UINT64_C(0x000731233C0BF910), UINT64_C(0x000329E61DB0C699), UINT64_C(0x0007BA2FF701A4E9), UINT64_C(0x000333EA1E17AEF2), UINT64_C(0x00004C20BB4E7B23), UINT64_C(0x00036D578DEB0B28), UINT64_C(0x0001EB9E5DFB52E4), UINT64_C(0x0004CA4959FA2735), UINT64_C(0x0001D94E469AE705), UINT64_C(0x00076C278152C2A0)}, {UINT64_C(0x00098E1BB8C2F143), UINT64_C(0x0004D297A9E0C320), UINT64_C(0x00076A7705B29809), UINT64_C(0x0001C4AB1E7AA3FB), UINT64_C(0x0007CEC0D37488E9), UINT64_C(0x000AF115EFF64680), UINT64_C(0x0000120EF3CBB216), UINT64_C(0x00054823751D4F6C), UINT64_C(0x0002AC54F606C3D7), UINT64_C(0x0001EBCEFB260725)}, {UINT64_C(0x000B771E27A53F81), UINT64_C(0x0006D54C547C8EC4), UINT64_C(0x0000011D3B796F70), UINT64_C(0x000103E44C9CDCE1), UINT64_C(0x0004C7BA40D38FA7), UINT64_C(0x00089A5EBD4841A3), UINT64_C(0x000684C71D5AEC65), UINT64_C(0x000605EEF1D5EAB1), UINT64_C(0x00067509EAF71EBE), UINT64_C(0x0005963E232F38F6)}}, {{UINT64_C(0x000BCAC8C9D8CB62), UINT64_C(0x000201763A59294E), UINT64_C(0x00019A01979C0FF2), UINT64_C(0x0004D0E0410F78A4), UINT64_C(0x0006EB9F8CAC287A), UINT64_C(0x000EA0768460F44C), UINT64_C(0x0005A455F94A712D), UINT64_C(0x0000BC93EBB5FFB3), UINT64_C(0x00020C65BD0C37ED), UINT64_C(0x000261BF4CEC1574)}, {UINT64_C(0x000FF07CB12EA13B), UINT64_C(0x00020429E9B2B0F9), UINT64_C(0x0004DFA80EA8ECD6), UINT64_C(0x00073BBBD56CD402), UINT64_C(0x0003919C06A06CA6), UINT64_C(0x000A50DFCA5441D8), UINT64_C(0x0002B9A99A9B237D), UINT64_C(0x000742A2E2D61162), UINT64_C(0x0002CA00A4309B93), UINT64_C(0x0000905C120B4320)}, {UINT64_C(0x00061578EB35918B), UINT64_C(0x0001446B3BE9D4A0), UINT64_C(0x0003D523BC8898B4), UINT64_C(0x00064BBE9875DB61), UINT64_C(0x0000D3A22E1BC0BA), UINT64_C(0x00061BADB8814627), UINT64_C(0x0001E3CC67E1C334), UINT64_C(0x0007D8BFF80A52C8), UINT64_C(0x0007C1A1B139325E), UINT64_C(0x000699D472241937)}}, {{UINT64_C(0x00025E7D1EB3C74B), UINT64_C(0x0007898AA108BC0E), UINT64_C(0x00047515F8ED8CD4), UINT64_C(0x0004D3B9580C495A), UINT64_C(0x0007180B924B02DC), UINT64_C(0x0000F661E19F6359), UINT64_C(0x000670BF44B39CC7), UINT64_C(0x0007FE66B0398776), UINT64_C(0x0007995A1E2AC824), UINT64_C(0x0006D5DC46677210)}, {UINT64_C(0x000FAAD726B55EA2), UINT64_C(0x00079D5D2BEE8A46), UINT64_C(0x00026095ED36BEE6), UINT64_C(0x0006B2CD7C0A5EAC), UINT64_C(0x0007363AADE3CBFF), UINT64_C(0x0008973FB787E167), UINT64_C(0x0007C0F634CBA455), UINT64_C(0x0000FA999E76881F), UINT64_C(0x000324C512E8946B), UINT64_C(0x000380D8788E7945)}, {UINT64_C(0x0008DB1A6DE4460C), UINT64_C(0x00062893735BF9A0), UINT64_C(0x000013BA32E02B7B), UINT64_C(0x00073C9F80B4A895), UINT64_C(0x0003C3F3C87AAFB2), UINT64_C(0x000827F36493E441), UINT64_C(0x000292EFAC99E138), UINT64_C(0x000022A4A4904138), UINT64_C(0x00024529ECB28E37), UINT64_C(0x00077421EE238C1B)}}, {{UINT64_C(0x000F7B9C6C9FCA63), UINT64_C(0x00034B8A0AAFC9BE), UINT64_C(0x0005DAE98DB7E24F), UINT64_C(0x00074C6CA22931E1), UINT64_C(0x0002A4921C14D883), UINT64_C(0x0006EFA91FA1CE71), UINT64_C(0x0003CE84355E0DCE), UINT64_C(0x000753C05DD0ADC7), UINT64_C(0x00017FAB49BE457E), UINT64_C(0x000352750D53DB1E)}, {UINT64_C(0x000C2F7461033645), UINT64_C(0x000513C3544B8E3B), UINT64_C(0x00052C0D08ECF672), UINT64_C(0x000724A3D76B9645), UINT64_C(0x0005EE3A414B8581), UINT64_C(0x0001B06B1A55E453), UINT64_C(0x000186401A4D8285), UINT64_C(0x00038DD6E8C786ED), UINT64_C(0x0002D70CAF4EE8DD), UINT64_C(0x0005D01B347C3A06)}, {UINT64_C(0x0001567FFD93F0D1), UINT64_C(0x000309252F65BB4A), UINT64_C(0x0005959B6ED014AB), UINT64_C(0x0004B43212E34585), UINT64_C(0x000438AFACBE2355), UINT64_C(0x0005CE8397224869), UINT64_C(0x0005A2F2198160CD), UINT64_C(0x00038CA3C93100EF), UINT64_C(0x0005B4E108E763BD), UINT64_C(0x00013AB825E9037B)}}, {{UINT64_C(0x00035B4D0F47A893), UINT64_C(0x0000F88590FD42E6), UINT64_C(0x0000D7368E95AC4C), UINT64_C(0x000195F98944B691), UINT64_C(0x000486CCF2B919EC), UINT64_C(0x0004A59D1C2A3F33), UINT64_C(0x000534076FD4DE0F), UINT64_C(0x00059369592A8078), UINT64_C(0x00075849457601A8), UINT64_C(0x0005BCFEF89B98B3)}, {UINT64_C(0x00082471AB978FF4), UINT64_C(0x000417A722D632A1), UINT64_C(0x000119FFFE762A0C), UINT64_C(0x000154FACAC33A86), UINT64_C(0x000629B146A09126), UINT64_C(0x00077F98E5A9B02A), UINT64_C(0x0007BFDF4C9B46F3), UINT64_C(0x0006F3CE86DA2075), UINT64_C(0x00043496F1F7058B), UINT64_C(0x000410C0161E3F69)}, {UINT64_C(0x00061C0DDD1D5193), UINT64_C(0x0005D358D2C1C9E2), UINT64_C(0x0000F247BBCF087E), UINT64_C(0x00075A43B2343359), UINT64_C(0x0001269D6EFC98D0), UINT64_C(0x0009DE5FF8C9C95C), UINT64_C(0x00051605D13327E2), UINT64_C(0x00033CB5838CF4A6), UINT64_C(0x0003A16E2B08FE9E), UINT64_C(0x0003650C080431E5)}}, }, { {{UINT64_C(0x00049602E45D0A93), UINT64_C(0x00059C589221A880), UINT64_C(0x00006BFB336EDCAF), UINT64_C(0x0005AD45223DDD99), UINT64_C(0x00057F8BFA84AC51), UINT64_C(0x000AB4970BF8F60A), UINT64_C(0x00067F4FB7299A69), UINT64_C(0x0006C45D1DA5576A), UINT64_C(0x0001DF5059D6F745), UINT64_C(0x0007522509A7E4C7)}, {UINT64_C(0x000754184C1EAC3E), UINT64_C(0x0001803402F7CD15), UINT64_C(0x0004F73F4944A6CF), UINT64_C(0x00046CEC832A58F1), UINT64_C(0x0005BF7C9110EC11), UINT64_C(0x0006BEE5D06C0C15), UINT64_C(0x00004D8B8B8F00B0), UINT64_C(0x00028C4D421BD379), UINT64_C(0x00075078416E153C), UINT64_C(0x000359B19C14F12F)}, {UINT64_C(0x000808DDF052F857), UINT64_C(0x000019692911893C), UINT64_C(0x00020F8AC2158528), UINT64_C(0x0006BF85B2D465D0), UINT64_C(0x0000E4B967AE33BF), UINT64_C(0x0006B2C044AA16CD), UINT64_C(0x0005714242B5BB0F), UINT64_C(0x0005D92812DAFB73), UINT64_C(0x0007AD2DCB20ECFF), UINT64_C(0x00077EEC1D3FA208)}}, {{UINT64_C(0x0002119238646FD8), UINT64_C(0x0005ABC2F8AF448B), UINT64_C(0x000453259E95D8E5), UINT64_C(0x0005B48782EBCAEE), UINT64_C(0x00038436F43CDFBF), UINT64_C(0x00048D16E429CE28), UINT64_C(0x000570D828600948), UINT64_C(0x0003453855620095), UINT64_C(0x0006AD331E478470), UINT64_C(0x000651BFAB5074BD)}, {UINT64_C(0x0005F4433BDB32D9), UINT64_C(0x000105218D10DE9D), UINT64_C(0x000584EFCC5C27E2), UINT64_C(0x00013201F8F88C14), UINT64_C(0x0005783EC5680875), UINT64_C(0x0005599CE7F06E7D), UINT64_C(0x000469D4A0F10D5A), UINT64_C(0x00066493C7BE869D), UINT64_C(0x000282E244723DA2), UINT64_C(0x000003DDA26211EF)}, {UINT64_C(0x0004777CF1747536), UINT64_C(0x0004BD8E40F0AAC6), UINT64_C(0x0007330BCEF012F6), UINT64_C(0x0005B417B099D130), UINT64_C(0x00008F04461BF63F), UINT64_C(0x0002FAB6C914DFFC), UINT64_C(0x00012387DF5AFEB9), UINT64_C(0x00060B418608D67A), UINT64_C(0x00028BA76C66CFD8), UINT64_C(0x00046A5D5B19C944)}}, {{UINT64_C(0x000D23E16E7EB572), UINT64_C(0x00046332FC8A601B), UINT64_C(0x00065A48317134CE), UINT64_C(0x00043B6D52860AED), UINT64_C(0x0006EEB80466982A), UINT64_C(0x0009E57FBD4942F2), UINT64_C(0x0001B441B9B92D52), UINT64_C(0x0003927622998150), UINT64_C(0x00032063CFE0CC69), UINT64_C(0x0001E7A8EAAD8648)}, {UINT64_C(0x0009791DBC2F7ADE), UINT64_C(0x0005B5AE56F669E8), UINT64_C(0x0004787844482C09), UINT64_C(0x000233D0503DE859), UINT64_C(0x0002980F93DB7782), UINT64_C(0x000E89640104583D), UINT64_C(0x000256749A55B356), UINT64_C(0x000346FB5377E7C7), UINT64_C(0x0005986D02625C7F), UINT64_C(0x0006501A5BE2B9EA)}, {UINT64_C(0x000DC86BCD571C18), UINT64_C(0x000295273CB7094B), UINT64_C(0x0002353CEEA64824), UINT64_C(0x0000EDE9FDAEF274), UINT64_C(0x0006FC2FE16F8340), UINT64_C(0x000E75263685AE89), UINT64_C(0x0002A6B522548B24), UINT64_C(0x00030B331A3CF122), UINT64_C(0x00040AA1996D71AF), UINT64_C(0x00021DA1E66C5828)}}, {{UINT64_C(0x0006237FE85D84B7), UINT64_C(0x0005D493978AA748), UINT64_C(0x0005606DB28D11E0), UINT64_C(0x0001404E7EE9A4A7), UINT64_C(0x0000009FCCF95887), UINT64_C(0x0001F35190486D07), UINT64_C(0x0005ABF1251A2823), UINT64_C(0x0007D9F90E1B9546), UINT64_C(0x000027D362BD3273), UINT64_C(0x0001D3276CA5DBCA)}, {UINT64_C(0x0005BCE59854F4F2), UINT64_C(0x00068A97823BA015), UINT64_C(0x00069C7B6BA3A2B9), UINT64_C(0x000391289E956A27), UINT64_C(0x0006D77C747BE4B3), UINT64_C(0x00030591F7C41921), UINT64_C(0x0002A1EB441BD53B), UINT64_C(0x00014CCBBA39D2CC), UINT64_C(0x0002A9EAEDC15CEF), UINT64_C(0x000175CD0B5E3DFD)}, {UINT64_C(0x00037ECC8CE85AE8), UINT64_C(0x0002D2E68B37C995), UINT64_C(0x0007756F4C412926), UINT64_C(0x00064C1755FD279C), UINT64_C(0x0005D142CA088513), UINT64_C(0x0005C77113983F17), UINT64_C(0x000667B020C82500), UINT64_C(0x000303A898E3AC4F), UINT64_C(0x0007E3C86D19C210), UINT64_C(0x0004249657F2E122)}}, {{UINT64_C(0x0001D1C5E353E5CA), UINT64_C(0x0002576EB624749B), UINT64_C(0x00065CDB175F1C9E), UINT64_C(0x0003A41B811E62CE), UINT64_C(0x000518CFEE6F53F7), UINT64_C(0x00098B04A4AC2F13), UINT64_C(0x0006AB7610983F96), UINT64_C(0x000746A4D621967E), UINT64_C(0x000350349EC927D2), UINT64_C(0x000222970DF1E1BE)}, {UINT64_C(0x0008906EEA836812), UINT64_C(0x0003114905108F3F), UINT64_C(0x0005C9663C445888), UINT64_C(0x0001C71F712BD33B), UINT64_C(0x00043D935A54A0DA), UINT64_C(0x0003646E9FDC729F), UINT64_C(0x0007210C4951848F), UINT64_C(0x00011FEF8E510953), UINT64_C(0x000346FAA21A5B8C), UINT64_C(0x00003AD57103DD51)}, {UINT64_C(0x00033864A36064D6), UINT64_C(0x000029B9EAFEDC2A), UINT64_C(0x0003BE3DEB0B5F9A), UINT64_C(0x0003B506AA541679), UINT64_C(0x0005B2A6B10327B0), UINT64_C(0x000157232B715DB2), UINT64_C(0x0001EA48E7F6FCF8), UINT64_C(0x00025E863CA33319), UINT64_C(0x0005C8D3F568BF16), UINT64_C(0x0004C5D907C3D1C8)}}, {{UINT64_C(0x00046AD26F23721E), UINT64_C(0x0002C765BDA314CE), UINT64_C(0x000752858F9EB295), UINT64_C(0x000513964D698E8F), UINT64_C(0x0001C85381B9C98C), UINT64_C(0x00007D077B6D8B14), UINT64_C(0x0002650BE441372D), UINT64_C(0x0007C92EF836C485), UINT64_C(0x0000F996ACD339F6), UINT64_C(0x0007E8564FED0A69)}, {UINT64_C(0x000E29A25F3371CF), UINT64_C(0x00008814C5A56ED5), UINT64_C(0x0000021D0DCD381D), UINT64_C(0x00076A6088860540), UINT64_C(0x0004219513890BB8), UINT64_C(0x0009B16B9A0A067F), UINT64_C(0x00047E7B85349C38), UINT64_C(0x00074B3FE445EC78), UINT64_C(0x000275D721E0622F), UINT64_C(0x0002A2EC646BA867)}, {UINT64_C(0x000BBDD3A720C17F), UINT64_C(0x0001B2C37BA0E3D1), UINT64_C(0x00054714236D0CC2), UINT64_C(0x00076964A35C7638), UINT64_C(0x000025052B296A76), UINT64_C(0x000C48304202EE65), UINT64_C(0x0006ED1F7DCB85DA), UINT64_C(0x0002FA4317B61178), UINT64_C(0x0006CEE7698DA4B8), UINT64_C(0x00044B0FF2267F23)}}, {{UINT64_C(0x000D747A3E22E2B1), UINT64_C(0x0003DEDA875D7CAE), UINT64_C(0x0006A21C6B5FE47D), UINT64_C(0x000412BD22E4D137), UINT64_C(0x00029DA6D3B3667F), UINT64_C(0x00048E20CB87439F), UINT64_C(0x000325A27394F2C8), UINT64_C(0x000428463E1D4FBF), UINT64_C(0x00041B300FF04818), UINT64_C(0x0001521958F0E161)}, {UINT64_C(0x000085DB6B7E977C), UINT64_C(0x00017CE01F10308D), UINT64_C(0x0000AC1CA092A153), UINT64_C(0x000415739EAB8C46), UINT64_C(0x0000C8CDF9774C54), UINT64_C(0x00051119A4D27CD6), UINT64_C(0x0003979EF4CABD4E), UINT64_C(0x000306E82DE011FD), UINT64_C(0x000130D235924305), UINT64_C(0x0004BC668226FA1A)}, {UINT64_C(0x00035460C289FE8C), UINT64_C(0x00077FC4B88D0A33), UINT64_C(0x00034B3A2F12DA46), UINT64_C(0x0000587252519A91), UINT64_C(0x00067696AD8CA13F), UINT64_C(0x0004B367ED30881B), UINT64_C(0x0006ECDC69A04362), UINT64_C(0x00062060141E8A58), UINT64_C(0x000446717A1D4C41), UINT64_C(0x00059C92F4144291)}}, {{UINT64_C(0x00090BCBA13F3FFA), UINT64_C(0x000459F76914A474), UINT64_C(0x00077DF9C1AB8451), UINT64_C(0x00027F4173658DE6), UINT64_C(0x000752A654451BBD), UINT64_C(0x0004389BF205F6A5), UINT64_C(0x0002A0F6E2CAC058), UINT64_C(0x000759DDCA3CF248), UINT64_C(0x0001DB6435DE0B7B), UINT64_C(0x0007A40E4FF1D274)}, {UINT64_C(0x000B40F9FEA2DF61), UINT64_C(0x000187FAF0A90648), UINT64_C(0x0007F429F69E5C3C), UINT64_C(0x0005E462DCD8F74D), UINT64_C(0x00002FB868905F55), UINT64_C(0x0006227264E559AC), UINT64_C(0x0005DCC2ACD4BE01), UINT64_C(0x0001754DD8D51BE7), UINT64_C(0x000254DBE11362D7), UINT64_C(0x00067071A34DAE0B)}, {UINT64_C(0x00052B353E84B78C), UINT64_C(0x000564D48962EE3B), UINT64_C(0x000566CE4AC9469E), UINT64_C(0x00022969A603533F), UINT64_C(0x00057CBF4F23DA31), UINT64_C(0x000F413FE6288E6F), UINT64_C(0x00043A5E06D777D3), UINT64_C(0x0000D59724B433B0), UINT64_C(0x0004AC5FF7A4F7F5), UINT64_C(0x0007581748BFBCFE)}}, {{UINT64_C(0x00051789D3E212FA), UINT64_C(0x0000BCEB94909B13), UINT64_C(0x00028C362BBCB45E), UINT64_C(0x00070EF351F3B7C0), UINT64_C(0x000666ECDEB8047E), UINT64_C(0x00078E439202364E), UINT64_C(0x0007E77E6140B4A9), UINT64_C(0x000482D5B04DDC11), UINT64_C(0x0001764AEFADC75A), UINT64_C(0x0006B47820ED7E1B)}, {UINT64_C(0x000E69076D92441D), UINT64_C(0x0007F96BE0ECA0A5), UINT64_C(0x0005B603DEE01A8E), UINT64_C(0x0002D1B5AEAB2F76), UINT64_C(0x0007A711B7087718), UINT64_C(0x000277D13CD92B5F), UINT64_C(0x0003AE287A233D24), UINT64_C(0x000666E9F9CC65A3), UINT64_C(0x000676645DDC4BCF), UINT64_C(0x0004C2FE8FE9D67B)}, {UINT64_C(0x00027D78672C6C00), UINT64_C(0x0002479A6D9CA279), UINT64_C(0x00072D4B69EE9EED), UINT64_C(0x000115C466A0FF92), UINT64_C(0x00040A74ED91DE82), UINT64_C(0x00007A983DF62653), UINT64_C(0x0003E0BD157BC637), UINT64_C(0x000257CF02231B18), UINT64_C(0x00021FB8D5B274BC), UINT64_C(0x00063F5ED86AF20B)}}, {{UINT64_C(0x000417CD2C573949), UINT64_C(0x0005C0A0F0D85A83), UINT64_C(0x0004BCA59A389EFA), UINT64_C(0x0004BC9A8EDBAE72), UINT64_C(0x00031DA12B0ED484), UINT64_C(0x000361F7E36F579E), UINT64_C(0x0002F55EEE1A1AB5), UINT64_C(0x0001FE95A3CDAB65), UINT64_C(0x0000BD0E2F996073), UINT64_C(0x00069840C7AEA37F)}, {UINT64_C(0x0008A8244C90AAE5), UINT64_C(0x000192938B5C4443), UINT64_C(0x00062E8381B8DA6E), UINT64_C(0x0002A57B4398E87B), UINT64_C(0x0001B401B603039D), UINT64_C(0x000F8931B08E2459), UINT64_C(0x0005FDE03EB7E448), UINT64_C(0x000042A4FFF29BE1), UINT64_C(0x0005548F632ED26F), UINT64_C(0x00007E01A00DDD53)}, {UINT64_C(0x00009C5F1271C360), UINT64_C(0x00014712324EDF39), UINT64_C(0x00024AF2050F1BB5), UINT64_C(0x0000FB6B43AD3C7B), UINT64_C(0x00066F4AA55F0B74), UINT64_C(0x000C69A365B54877), UINT64_C(0x0000D87DE69BA1D3), UINT64_C(0x00001F390592ACB1), UINT64_C(0x0002D3ACDCBEEC70), UINT64_C(0x0006A6C9430F6DC5)}}, {{UINT64_C(0x00076182951B9FCD), UINT64_C(0x00014DA2A6CA4A38), UINT64_C(0x00061C55C6BDE562), UINT64_C(0x0006ECA43E5605F8), UINT64_C(0x00006B6FFF6EC841), UINT64_C(0x0000713C0144812B), UINT64_C(0x00071F1D396EB0DD), UINT64_C(0x00071210D066A6DB), UINT64_C(0x000737CF73AC235F), UINT64_C(0x000056B844B68475)}, {UINT64_C(0x0008F1CEAD60A1D0), UINT64_C(0x0000444231BD8012), UINT64_C(0x000445D6A0ED8B97), UINT64_C(0x0002DD91F0EEE5C0), UINT64_C(0x0003766A3BF6B231), UINT64_C(0x000F5C93D686296E), UINT64_C(0x000233237F38DC42), UINT64_C(0x0007525D1A3497EA), UINT64_C(0x0001819B905D774A), UINT64_C(0x0007FFB178F7CE0F)}, {UINT64_C(0x000641A17722C8F1), UINT64_C(0x00079F1706850C02), UINT64_C(0x0006060CBB0518EB), UINT64_C(0x0002B66C8CB99F42), UINT64_C(0x00066E8E928880E6), UINT64_C(0x0001989CC847F22C), UINT64_C(0x0003469EEFF682ED), UINT64_C(0x0000D34A55978260), UINT64_C(0x00044C59D525236B), UINT64_C(0x000390050E10B720)}}, {{UINT64_C(0x00009CD2BD71F4DB), UINT64_C(0x00029F23BB9D8BE1), UINT64_C(0x0000FB44276A7039), UINT64_C(0x0005F4E44D6437E8), UINT64_C(0x0004E5D5F5C4BB02), UINT64_C(0x000662EA552904DE), UINT64_C(0x00072BFD95DA12F6), UINT64_C(0x0006E4A9CCE5BBB7), UINT64_C(0x00035D0BE00D7A94), UINT64_C(0x0001C01BCE0CD7F9)}, {UINT64_C(0x000C0AFD973DBCF3), UINT64_C(0x00064CE4BD3B9ACA), UINT64_C(0x0007702F5FC560D5), UINT64_C(0x0005E595BA3FBA8C), UINT64_C(0x0005B6BF254BF97D), UINT64_C(0x000576ABA05DA74C), UINT64_C(0x000010304EEBAB26), UINT64_C(0x00015D19F5797872), UINT64_C(0x00016D4017CFBF4A), UINT64_C(0x00026F6161725AEC)}, {UINT64_C(0x00087F397AEAE324), UINT64_C(0x0005FA83BB5E2D0C), UINT64_C(0x0007223E58B05D25), UINT64_C(0x0003870F05A9B0F5), UINT64_C(0x0001A6AE5BF4D17D), UINT64_C(0x000EC0FEC7C22B4D), UINT64_C(0x0004123EA40B3D05), UINT64_C(0x0006AB321BCED2BF), UINT64_C(0x0005EB8B088ADF8C), UINT64_C(0x0006D4D7B749D913)}}, {{UINT64_C(0x0004F5FA884DA730), UINT64_C(0x0000AF25F411BD67), UINT64_C(0x0003BA45D0584E3F), UINT64_C(0x0002185580D7028A), UINT64_C(0x00042C01189DCCED), UINT64_C(0x00008C6AE9B1ABB6), UINT64_C(0x00052E642E3C2B76), UINT64_C(0x0007310740FB3824), UINT64_C(0x000728038396164C), UINT64_C(0x000699C02D4658C4)}, {UINT64_C(0x00079389C8FD6F3C), UINT64_C(0x000334AEF7344570), UINT64_C(0x000242D78C5A1222), UINT64_C(0x0003C2A690D38351), UINT64_C(0x0001CF5ACE9C51A0), UINT64_C(0x00055B466F344A63), UINT64_C(0x0007E983BE7FDAE4), UINT64_C(0x00055CFA24140C02), UINT64_C(0x000069CB7B9C5BD2), UINT64_C(0x0006188710431607)}, {UINT64_C(0x00026F7B943A846D), UINT64_C(0x0002D01FFCEE4F40), UINT64_C(0x00018950D46B06FD), UINT64_C(0x000489C50B872A31), UINT64_C(0x0006350B0D584129), UINT64_C(0x0001F25CBB8B17E3), UINT64_C(0x0002C5C45781F165), UINT64_C(0x0005737448097914), UINT64_C(0x000511D83B88DD30), UINT64_C(0x000274954F75EF59)}}, {{UINT64_C(0x000ECDBAA9D6B470), UINT64_C(0x0004FEAEC5FC07C4), UINT64_C(0x00006ACFE89ADEF6), UINT64_C(0x0001DA4AAD513147), UINT64_C(0x00067D3AF31AE9ED), UINT64_C(0x000A4B232569B195), UINT64_C(0x0004CF616E4681F8), UINT64_C(0x000644769BD5A3D2), UINT64_C(0x00025E58B311AC44), UINT64_C(0x00052C8B011460F8)}, {UINT64_C(0x00045717702B786E), UINT64_C(0x00014A10820591ED), UINT64_C(0x00062D9363FA4EE1), UINT64_C(0x00022163012006D4), UINT64_C(0x000271B0D1CBDBE0), UINT64_C(0x00026F3A015A99D4), UINT64_C(0x0007C87580D2C201), UINT64_C(0x0001BF98F86FC444), UINT64_C(0x000138F3A6FA662A), UINT64_C(0x0001A06E15120B69)}, {UINT64_C(0x0008025E88D639DD), UINT64_C(0x0000E347C30AA122), UINT64_C(0x0002589D8BA62AC4), UINT64_C(0x0002E11924750A60), UINT64_C(0x0001FBEE719BDB54), UINT64_C(0x0004C0C9348C22B4), UINT64_C(0x00057FD26F80CAC8), UINT64_C(0x00019B358CE6D1E3), UINT64_C(0x00007A93D359D2C5), UINT64_C(0x00077158FA133E83)}}, {{UINT64_C(0x000D7DAFE61175ED), UINT64_C(0x0000E4504E665412), UINT64_C(0x0005FB729DDEE3EC), UINT64_C(0x000047F270C83BC2), UINT64_C(0x0005A73604DF6148), UINT64_C(0x000BD1E93DBD8BB5), UINT64_C(0x0000AC824EAD6B31), UINT64_C(0x0005FF3E8CE9DCC5), UINT64_C(0x00007CC6E8CFFAC1), UINT64_C(0x0002AFFEFFBB1A9A)}, {UINT64_C(0x00023316BB40DF6E), UINT64_C(0x000481B56A077501), UINT64_C(0x00013E2A0B14557D), UINT64_C(0x000595D27B53FF98), UINT64_C(0x0003C19B9D245EB2), UINT64_C(0x000FE22605BBBE16), UINT64_C(0x0005BBC13BECC9C3), UINT64_C(0x0005555CC21B1639), UINT64_C(0x0006C7E755F4FE0A), UINT64_C(0x00004CED449C0043)}, {UINT64_C(0x000F212C1FCCCAFA), UINT64_C(0x00065AA07D23A1F0), UINT64_C(0x000653B0A8787B0D), UINT64_C(0x0002764B66DA9938), UINT64_C(0x0001C729D799C70F), UINT64_C(0x000B8104F70D5296), UINT64_C(0x0002712DA31EC0BF), UINT64_C(0x00015C3C4923D483), UINT64_C(0x0005652F2FB13CB3), UINT64_C(0x00041664C0C8CDFC)}}, {{UINT64_C(0x00082999B7AC4DE8), UINT64_C(0x00058A2CECA252A7), UINT64_C(0x00020C73280A45C0), UINT64_C(0x000450DA84CA8CD7), UINT64_C(0x0007BF0E4090350D), UINT64_C(0x000ADF283C44352A), UINT64_C(0x0003E4DCFC4CEE6B), UINT64_C(0x000763CA01B20C07), UINT64_C(0x00074828372B938A), UINT64_C(0x00022EC150908F6A)}, {UINT64_C(0x0002582469359E84), UINT64_C(0x000228A33D25EEC6), UINT64_C(0x0006435073D85A7E), UINT64_C(0x000227840F93D3F5), UINT64_C(0x000262B1B8D3C804), UINT64_C(0x000340D7D4B65A82), UINT64_C(0x0003D2F31E1046E9), UINT64_C(0x0004F093EF407EAD), UINT64_C(0x0000739071C0CFCC), UINT64_C(0x00026D2395B09E2C)}, {UINT64_C(0x000F54E820DEB8D8), UINT64_C(0x000587F5BBC119C5), UINT64_C(0x00033CF484DE2CE4), UINT64_C(0x00072D6E48747C29), UINT64_C(0x0001FC0C06AF6484), UINT64_C(0x00072C72C472F425), UINT64_C(0x0006A997E7AC72B4), UINT64_C(0x000615BA71BDA74C), UINT64_C(0x000194736B2BCBEA), UINT64_C(0x00053764E1CF34DF)}}, }, { {{UINT64_C(0x000869A43C294C54), UINT64_C(0x0003CB29D7749693), UINT64_C(0x0007C4909DB7E1DF), UINT64_C(0x0005228EB2FBC6A3), UINT64_C(0x0001416FC12D302E), UINT64_C(0x00091471B10D8725), UINT64_C(0x0001E08AA9DECE88), UINT64_C(0x000587A018AD629C), UINT64_C(0x0006C4A4C27A1DCA), UINT64_C(0x0005C28EBD109BCD)}, {UINT64_C(0x000F17D6F444B156), UINT64_C(0x00010614A6278D4D), UINT64_C(0x00004E296EC65945), UINT64_C(0x000764A3D99A6C4C), UINT64_C(0x0003AC1DDF8C7862), UINT64_C(0x000A1BDC47EBAF83), UINT64_C(0x000575E7E4E6E02D), UINT64_C(0x000346FF3FA7D4EF), UINT64_C(0x0006490E0AA55F9E), UINT64_C(0x0003DE09135EA98D)}, {UINT64_C(0x0004B1218EED069B), UINT64_C(0x0003A6C9EA9923A4), UINT64_C(0x0001EC1877C85728), UINT64_C(0x000300A0F14A71F6), UINT64_C(0x0006ECECC49016EB), UINT64_C(0x00058EED82849105), UINT64_C(0x000400ECD17E513E), UINT64_C(0x00060825E3952E96), UINT64_C(0x000565AE484D0F5D), UINT64_C(0x000209AD7372BC07)}}, {{UINT64_C(0x000967088E9B527F), UINT64_C(0x0002672CB51B0152), UINT64_C(0x0000A1B79BAEC761), UINT64_C(0x0001174B982E833F), UINT64_C(0x00024E0D77B79A0D), UINT64_C(0x00047372BD137D72), UINT64_C(0x0000BD9098E4916F), UINT64_C(0x0002AE2E6C280D68), UINT64_C(0x000569AB6BDEC767), UINT64_C(0x0006EB14F61A266B)}, {UINT64_C(0x000468847FDDE1A1), UINT64_C(0x0007E47FFAC321C1), UINT64_C(0x000099E09961D0C8), UINT64_C(0x0007F115DEAE525D), UINT64_C(0x000694F77EF9636E), UINT64_C(0x00040F8DDE23159D), UINT64_C(0x0006680E30AEF9BB), UINT64_C(0x0006B528CEF988BE), UINT64_C(0x000518BE82D6063B), UINT64_C(0x00022B8C074B2105)}, {UINT64_C(0x0003A4C05B585761), UINT64_C(0x0003528539A1DAD4), UINT64_C(0x000540826053F31F), UINT64_C(0x0003BA075642B0C7), UINT64_C(0x000368D07DE9484A), UINT64_C(0x000B3D3E8D9BA85E), UINT64_C(0x0007550F9A53DD73), UINT64_C(0x000041A194358CC9), UINT64_C(0x0004F9F0386A50A1), UINT64_C(0x00041D37DCFBA507)}}, {{UINT64_C(0x00024FF20ED85567), UINT64_C(0x00026ACB40B58156), UINT64_C(0x0002C9398F6DD650), UINT64_C(0x00030160273B8447), UINT64_C(0x0002E3773B782B9F), UINT64_C(0x0007030F6938A06B), UINT64_C(0x0004E62A1384F897), UINT64_C(0x000225C672A35300), UINT64_C(0x0005C1F66CAD5B3A), UINT64_C(0x0005832B4574C046)}, {UINT64_C(0x0006B08E0399855F), UINT64_C(0x0000E9671A6388F9), UINT64_C(0x0006596FB4577230), UINT64_C(0x00041255210F89BD), UINT64_C(0x00058F5E2E72B2D8), UINT64_C(0x0003DEA57DF34241), UINT64_C(0x00021714F7980B29), UINT64_C(0x00033241DDA8B0E5), UINT64_C(0x000502E01B9EF7BE), UINT64_C(0x00027166556F5433)}, {UINT64_C(0x0002068F4390F72B), UINT64_C(0x000037FC7DD50F35), UINT64_C(0x0003D7105B085171), UINT64_C(0x0003F4A9D00E2D1B), UINT64_C(0x00036BA34F00ADB8), UINT64_C(0x000BAA7FD102D0DF), UINT64_C(0x0006D540C7AB1FE3), UINT64_C(0x0006D399320CD3FB), UINT64_C(0x00000969ECDCA36E), UINT64_C(0x000736A5F44C73E5)}}, {{UINT64_C(0x000A1EA8102BF7EA), UINT64_C(0x00076681D903FE4E), UINT64_C(0x00016827A8F7E29F), UINT64_C(0x000041D34C09DF5C), UINT64_C(0x0003C9643E4AE7F0), UINT64_C(0x000AA849BA118FEC), UINT64_C(0x0004F8B809BA8FD8), UINT64_C(0x0000D32D898D1E18), UINT64_C(0x00057AF4934DCD86), UINT64_C(0x000564F85C2CDDAD)}, {UINT64_C(0x000E180C6892618B), UINT64_C(0x0006FF7240030636), UINT64_C(0x000366CD397F1774), UINT64_C(0x0005728BDC33187B), UINT64_C(0x0000B3266F640DCE), UINT64_C(0x000128B8A25D3F67), UINT64_C(0x0007708EE6E8BF9F), UINT64_C(0x00046A93620B4A05), UINT64_C(0x0007290D084B52EC), UINT64_C(0x000739810783526B)}, {UINT64_C(0x000CC39B5FFAF5D7), UINT64_C(0x0003C6202DA25104), UINT64_C(0x00062CC8759BDEDE), UINT64_C(0x00036D29F17389AF), UINT64_C(0x00012C6A9C28C6C5), UINT64_C(0x0009DCE18E457FFC), UINT64_C(0x0004ECCE05180B2B), UINT64_C(0x000596ACCF512291), UINT64_C(0x00062945DAA66E26), UINT64_C(0x00050AD4823F6CFD)}}, {{UINT64_C(0x000A8CC651B80948), UINT64_C(0x0001E1750AC465BE), UINT64_C(0x000187C1C7A67AC8), UINT64_C(0x0006F89CE139F631), UINT64_C(0x00036828EE424F47), UINT64_C(0x000F2D70AE145D31), UINT64_C(0x0004B3577A19593F), UINT64_C(0x0001B7EA66A3F33D), UINT64_C(0x00077FC34430FB8C), UINT64_C(0x0007F27E8D488429)}, {UINT64_C(0x000F6CC160A3C9DE), UINT64_C(0x000192CEF1A784E0), UINT64_C(0x00055B5C5AEEC896), UINT64_C(0x0006D5903202D1D5), UINT64_C(0x00044EE2B9F57100), UINT64_C(0x00085703712819CA), UINT64_C(0x00050908533B6653), UINT64_C(0x0003454ED72A02D5), UINT64_C(0x00070AC25F6383E3), UINT64_C(0x00048EB15CD43A55)}, {UINT64_C(0x000A62A87FDE7680), UINT64_C(0x0001AF035CE0A44A), UINT64_C(0x0007F2C92A8D048E), UINT64_C(0x0000CEE23583E470), UINT64_C(0x00003B703640D1F1), UINT64_C(0x00098B27784DA23E), UINT64_C(0x0003A7C34610E147), UINT64_C(0x00073D1ABE50B09E), UINT64_C(0x0002938FFA96CAB7), UINT64_C(0x0003E1959EF246D8)}}, {{UINT64_C(0x0001869BB1B94C69), UINT64_C(0x00051734C75D4111), UINT64_C(0x00000E8A85605AF9), UINT64_C(0x00047660F7146E01), UINT64_C(0x00026CB57D10B81E), UINT64_C(0x0006DC6E8E61EABF), UINT64_C(0x00040BDBDDA25575), UINT64_C(0x000621970F444FB0), UINT64_C(0x0005A68915E84863), UINT64_C(0x0003FC0413B2B9DB)}, {UINT64_C(0x00057BA222699263), UINT64_C(0x0007645EE7373008), UINT64_C(0x0001A2F8038B610D), UINT64_C(0x000677556F7C8C70), UINT64_C(0x0004CE4E5D52ADBA), UINT64_C(0x000CAE8AF894C9EB), UINT64_C(0x000289D1174CA2E9), UINT64_C(0x00032825A0B38AD1), UINT64_C(0x0002D70424509A50), UINT64_C(0x000588C224908678)}, {UINT64_C(0x000EC8195559B033), UINT64_C(0x0004928CC1FABC5C), UINT64_C(0x0007E050DE738A9E), UINT64_C(0x0003E981A0A1EF6A), UINT64_C(0x00001FE76C501153), UINT64_C(0x000CB9239B643220), UINT64_C(0x0006875D72093E18), UINT64_C(0x00025CA8156C881B), UINT64_C(0x00048360BD70DA5F), UINT64_C(0x00012C76B37E5C67)}}, {{UINT64_C(0x000CADFF54C5FC61), UINT64_C(0x0003100C3F2C3EC2), UINT64_C(0x00072D1EA82213E6), UINT64_C(0x0007F17AA56C2E31), UINT64_C(0x0006CBE667300217), UINT64_C(0x000A75C32AC1D00C), UINT64_C(0x0000900399B302FC), UINT64_C(0x00066D6BDEE4B606), UINT64_C(0x00005EFA0E987CE1), UINT64_C(0x0002C879F735E948)}, {UINT64_C(0x0002780923AD1294), UINT64_C(0x00050A7906F38719), UINT64_C(0x0004D2CE3806BCDB), UINT64_C(0x0006D8F87C7B1F2D), UINT64_C(0x0005BC54F9F117E6), UINT64_C(0x000AFCE58A3CEADC), UINT64_C(0x000026B8F094B4FB), UINT64_C(0x000511D8D0A6A1C0), UINT64_C(0x00026046F65CA5CE), UINT64_C(0x0007B31882AB5612)}, {UINT64_C(0x00019F342DF704E3), UINT64_C(0x00053617515314C8), UINT64_C(0x000622A658FC7975), UINT64_C(0x0006453B59E91EF8), UINT64_C(0x00042BFDC9994A46), UINT64_C(0x000238C1575D2AF0), UINT64_C(0x00029CD2DC2AE52F), UINT64_C(0x000479332C429AD4), UINT64_C(0x000428FDA62FAFFA), UINT64_C(0x0007D90C15C992EF)}}, {{UINT64_C(0x000E4A20CED7FD14), UINT64_C(0x0004C97EA9E0328B), UINT64_C(0x0006E9445684BABF), UINT64_C(0x000151806F26ED39), UINT64_C(0x0001160C77905467), UINT64_C(0x000C6609DEA0FC1A), UINT64_C(0x0002A722284AD939), UINT64_C(0x00003ADBE879DBC4), UINT64_C(0x00015AC0555FD701), UINT64_C(0x0001F94BEBDB96D9)}, {UINT64_C(0x0004AAF2301F16D2), UINT64_C(0x0007F51734ABB20B), UINT64_C(0x00042C8A35243B42), UINT64_C(0x0001B3820B36100F), UINT64_C(0x000115444F5C6CAF), UINT64_C(0x000F3926D4333445), UINT64_C(0x000587A6557C80D0), UINT64_C(0x000665447A091344), UINT64_C(0x0003F84BD9CE1BCA), UINT64_C(0x0007200779A07D57)}, {UINT64_C(0x000C61B46E3949CF), UINT64_C(0x0000D8E735ED00B6), UINT64_C(0x00048A5E9F98CEA3), UINT64_C(0x00024C0D94F3C634), UINT64_C(0x000538D79B7A6393), UINT64_C(0x00021002B287137D), UINT64_C(0x000799366E30C2E8), UINT64_C(0x0006B1AF8463E70D), UINT64_C(0x00048CDE10CB3E51), UINT64_C(0x00017412D6535F95)}}, {{UINT64_C(0x000BAA4CCFEC442D), UINT64_C(0x0005DDC1184E8BA8), UINT64_C(0x0007D1F6A8B018EA), UINT64_C(0x000769A32FD77A23), UINT64_C(0x0002355FBFEE11A4), UINT64_C(0x000D2BB5D9500DE9), UINT64_C(0x000351D470C5EA4E), UINT64_C(0x0004BDBFBB0E40E5), UINT64_C(0x0001A757E0DE9DFA), UINT64_C(0x0005DD504BAB40E2)}, {UINT64_C(0x000D79053EF41593), UINT64_C(0x0000C6229EE33D5E), UINT64_C(0x0004C4A2E362ED5D), UINT64_C(0x0006D21696B79D70), UINT64_C(0x000530ED2DF8E89F), UINT64_C(0x00033E8AD160078D), UINT64_C(0x000188BB911588CC), UINT64_C(0x0001659B61A4C110), UINT64_C(0x0000AC04E00E10DC), UINT64_C(0x0007BAAFBA1435EF)}, {UINT64_C(0x000F5FC78EDB6AE0), UINT64_C(0x00053D7865FB725A), UINT64_C(0x0006ED24F885E307), UINT64_C(0x0005CE843771EF4F), UINT64_C(0x00058D6256C79CC2), UINT64_C(0x00010C8CBB613DE9), UINT64_C(0x0004D23EBA7C20F7), UINT64_C(0x0004AAB81D2BD1A4), UINT64_C(0x0007EAA3AAB8A668), UINT64_C(0x0003973523884C90)}}, {{UINT64_C(0x000D315BCC6A4EBE), UINT64_C(0x00023AE21C0D026D), UINT64_C(0x00074CC51E26A4A7), UINT64_C(0x0004EABBCED74E32), UINT64_C(0x0006B0E906F48456), UINT64_C(0x0001FD94BDF2BC16), UINT64_C(0x0002B3738B72AE1B), UINT64_C(0x0006DDA66FC3E72B), UINT64_C(0x0000A0BAE6CE73F8), UINT64_C(0x000649ACF7A899F4)}, {UINT64_C(0x000B963804F8D424), UINT64_C(0x0006F39A9330D7C7), UINT64_C(0x0004A7B044BBF992), UINT64_C(0x0003B6ACEE3101AE), UINT64_C(0x000380FD2850FBDA), UINT64_C(0x000A7E356E4721CB), UINT64_C(0x0006D74381BB53BD), UINT64_C(0x00077C758E87A472), UINT64_C(0x00034ED47B90A5C1), UINT64_C(0x000541B8694A1D57)}, {UINT64_C(0x000213F762157EAF), UINT64_C(0x0003DDFE58F8609F), UINT64_C(0x00051DB2894E81BD), UINT64_C(0x000217B6B6443ED1), UINT64_C(0x0003C3FD6874D805), UINT64_C(0x0009D6AC77E5E651), UINT64_C(0x000585C8D73CF003), UINT64_C(0x0001177F582F8B0D), UINT64_C(0x0006139F224E35C7), UINT64_C(0x00006B22BB7192B0)}}, {{UINT64_C(0x0005C1F05010C834), UINT64_C(0x0003113280A7C18B), UINT64_C(0x000402B6DBFA220A), UINT64_C(0x00046EABCF726FB6), UINT64_C(0x000175B743915725), UINT64_C(0x000E4CE9A3461CCF), UINT64_C(0x0001C5E283A38DED), UINT64_C(0x0004D6C8A05331E5), UINT64_C(0x0006D2583BCB0A6F), UINT64_C(0x0003AAA41153FCC0)}, {UINT64_C(0x000A352F702DDC40), UINT64_C(0x0007D7130B63AB8C), UINT64_C(0x00017012D62D24CA), UINT64_C(0x00036D6618341280), UINT64_C(0x00042CD7A92424EC), UINT64_C(0x0004455D81496370), UINT64_C(0x0002C71773A15E7B), UINT64_C(0x000319726F43A64E), UINT64_C(0x00061BA3963EE4E5), UINT64_C(0x0006EA9AD805A571)}, {UINT64_C(0x0001C51E5B6AE1BB), UINT64_C(0x0000940E67BDF3D8), UINT64_C(0x0004303CE5522A77), UINT64_C(0x0007682D028A84C6), UINT64_C(0x00054D741BEDE444), UINT64_C(0x00049041A3E00485), UINT64_C(0x00061D64B9E535C8), UINT64_C(0x00026B36E1180C79), UINT64_C(0x00037DC2FB4BBDCE), UINT64_C(0x0003E50BD67DF773)}}, {{UINT64_C(0x0009A8E363B551FC), UINT64_C(0x0003C8F4B97600B8), UINT64_C(0x0002AC4D3F80805A), UINT64_C(0x0007F634F89272C9), UINT64_C(0x0005018AAD3C2F10), UINT64_C(0x000839F5851BC891), UINT64_C(0x00051EB91313038C), UINT64_C(0x00008705A06CCCC9), UINT64_C(0x00055961D9C37E66), UINT64_C(0x00065992B370FB1A)}, {UINT64_C(0x000033C42B482130), UINT64_C(0x00001ED0534D30B9), UINT64_C(0x0003CCB1B89FEFCA), UINT64_C(0x00027E1B2B1E8762), UINT64_C(0x0001B4D9C8C9A94E), UINT64_C(0x000B112BA6074641), UINT64_C(0x0001600271D8DC7A), UINT64_C(0x0003D379BCAB026B), UINT64_C(0x000023990289F9BD), UINT64_C(0x00034CB0141402B9)}, {UINT64_C(0x000FC8B21E970F5A), UINT64_C(0x000645D4DAFEA6BA), UINT64_C(0x0004AB31A4584708), UINT64_C(0x00042A82D72C4005), UINT64_C(0x00018A07C94BFF8F), UINT64_C(0x000B940457D4526F), UINT64_C(0x0002B84EF0E2C65C), UINT64_C(0x00015EDE587F066A), UINT64_C(0x0007B339EA0568AD), UINT64_C(0x0000C15683B4ED21)}}, {{UINT64_C(0x000C2A3BC5E45C10), UINT64_C(0x00019DD27F647208), UINT64_C(0x0001CC4D0E9788D9), UINT64_C(0x000239D5295ABFF1), UINT64_C(0x00006A78F80338D3), UINT64_C(0x000D38F708F1447E), UINT64_C(0x0005402FECD5F832), UINT64_C(0x00003152B770F7D0), UINT64_C(0x000727F40CC0FE28), UINT64_C(0x000201310EEDAB24)}, {UINT64_C(0x0003A811FB4DE1FA), UINT64_C(0x0003F2DC5B4E9FC4), UINT64_C(0x00071A6F274F0FCE), UINT64_C(0x000767549B19F783), UINT64_C(0x00025B2A9BF40B8C), UINT64_C(0x000419CB0D40B471), UINT64_C(0x000160FCD458E327), UINT64_C(0x0001AED850052B97), UINT64_C(0x000655AB35DEDE29), UINT64_C(0x000502A05E2F8319)}, {UINT64_C(0x000338A047D08030), UINT64_C(0x00050A7982BB722B), UINT64_C(0x000383E0216F4B3F), UINT64_C(0x0004C7A4ED9B9E89), UINT64_C(0x0004E87685DC7649), UINT64_C(0x0006D484C7EBB3E3), UINT64_C(0x0006DE1BC9FDC618), UINT64_C(0x0005BD6D2BB413A0), UINT64_C(0x000049BD7BE1BE65), UINT64_C(0x00016C04FAA43BB8)}}, {{UINT64_C(0x00004480CB2786D2), UINT64_C(0x00016A7099089F43), UINT64_C(0x0004937243CD80DB), UINT64_C(0x00012750E73A6278), UINT64_C(0x000626538BE283B6), UINT64_C(0x00040FA0E5894E03), UINT64_C(0x0006BF9036149B73), UINT64_C(0x000340A6643F7198), UINT64_C(0x0000FDF9E90AE71F), UINT64_C(0x0002026C7AB86EA7)}, {UINT64_C(0x000D16EFFDC6C167), UINT64_C(0x00079987485ACAFE), UINT64_C(0x00044ECAA2B81CB1), UINT64_C(0x00012E547660B8E8), UINT64_C(0x0007B1BE4F5084D6), UINT64_C(0x00035ECD495C1561), UINT64_C(0x00019428F31961AD), UINT64_C(0x0003A909AF294BAC), UINT64_C(0x0002EBAA89C6DB55), UINT64_C(0x00074D7085DEC609)}, {UINT64_C(0x00012AC41AD9E34A), UINT64_C(0x0002CD879D1C83F1), UINT64_C(0x0001DB74B741FC14), UINT64_C(0x00066DA29E07A4EC), UINT64_C(0x00000D7E37FEFC54), UINT64_C(0x000A26B97A5598EA), UINT64_C(0x000615C93236E843), UINT64_C(0x000382BC16FB3B6F), UINT64_C(0x00025E0626E0106E), UINT64_C(0x0005854D6D92CC47)}}, {{UINT64_C(0x000B6DA23DC37DD7), UINT64_C(0x000627D60888F4D0), UINT64_C(0x000182E4C16CC439), UINT64_C(0x000190A2AEAAD64F), UINT64_C(0x00058A080ED83FEF), UINT64_C(0x000C475B09289638), UINT64_C(0x00000A2B7CF8481F), UINT64_C(0x00002B5319E8BC29), UINT64_C(0x00007FF5582B8B07), UINT64_C(0x00071CFF2B7D8A99)}, {UINT64_C(0x000799B83F3B4462), UINT64_C(0x00074ABE8CF43DF5), UINT64_C(0x00021C8FA0636722), UINT64_C(0x00057366BE84D1CC), UINT64_C(0x00004CD7BD66A8D7), UINT64_C(0x00071899B3473BA8), UINT64_C(0x0000747B62595049), UINT64_C(0x00006097B2D1993A), UINT64_C(0x0004CC30EDA24173), UINT64_C(0x00027116E4563311)}, {UINT64_C(0x0004C7419A1E733D), UINT64_C(0x0000541AD1C0EEBF), UINT64_C(0x0001BAB59CF44E81), UINT64_C(0x00056EA6AA62AA42), UINT64_C(0x000088CBEBB0E2E1), UINT64_C(0x0004D93FA0BF3D38), UINT64_C(0x0001F22C909EE410), UINT64_C(0x00006B1E6CAC473B), UINT64_C(0x00019E125E7B6046), UINT64_C(0x0001CFB3D7B37E4E)}}, {{UINT64_C(0x00048754583A8735), UINT64_C(0x0007C03868E916A6), UINT64_C(0x0007B4DCB70752B4), UINT64_C(0x0004EC5FBA952102), UINT64_C(0x00030F2C4A828172), UINT64_C(0x00023232F926F234), UINT64_C(0x0007257074636C00), UINT64_C(0x0007BBA1745B61D3), UINT64_C(0x0004606E90A58313), UINT64_C(0x0007E22E07DE154B)}, {UINT64_C(0x0006C2E97C0DBC05), UINT64_C(0x00054DEBDD212630), UINT64_C(0x0002C65F92437420), UINT64_C(0x00024DA821327EDC), UINT64_C(0x000580B8B7AD4E87), UINT64_C(0x0001CF81FE5285E9), UINT64_C(0x0006DD81D32634A6), UINT64_C(0x0003338A292D42A1), UINT64_C(0x000025E961008BC1), UINT64_C(0x00036D9C01BA5AB9)}, {UINT64_C(0x000DC6D75F088499), UINT64_C(0x0000A65C50F7E24F), UINT64_C(0x00045F9DC37DEEF4), UINT64_C(0x0007A85A69654899), UINT64_C(0x0004F6026DDF5B58), UINT64_C(0x00013EF829317A2A), UINT64_C(0x00021C7A10A33027), UINT64_C(0x000556BF6AB7F742), UINT64_C(0x0001388625C5DA4A), UINT64_C(0x000515466D6ABA32)}}, }, { {{UINT64_C(0x0006AEDBD4096564), UINT64_C(0x0004FA8B9BD472A8), UINT64_C(0x000518E920FABD7C), UINT64_C(0x00035641C8964A33), UINT64_C(0x0003B7F827A7DEB4), UINT64_C(0x00087747322CE9B7), UINT64_C(0x0000065AF64E2636), UINT64_C(0x0007E118D796640B), UINT64_C(0x00022A725F5CDAF8), UINT64_C(0x0006482AF75091E7)}, {UINT64_C(0x0004D5F5FBAF23D8), UINT64_C(0x00018961AF8EF02D), UINT64_C(0x0004410974A5C748), UINT64_C(0x0003671CA4C34023), UINT64_C(0x000198D894EF5FDF), UINT64_C(0x00045C045A1A5DA1), UINT64_C(0x00006A2E629F4DBD), UINT64_C(0x0005EF0CF4FEC9BD), UINT64_C(0x0002E56472C2285E), UINT64_C(0x000081F06DCB9DCB)}, {UINT64_C(0x000E80FFCADCC17A), UINT64_C(0x00005936ED4B05E0), UINT64_C(0x0005E5192BD5AE9E), UINT64_C(0x0004DAF3465C58CF), UINT64_C(0x0006378BB4FAF5A0), UINT64_C(0x000CD0DB0E0B2AB7), UINT64_C(0x00059295D7556578), UINT64_C(0x00017B233F34BAA3), UINT64_C(0x0002571548CAFBE4), UINT64_C(0x0005236D086B5D11)}}, {{UINT64_C(0x000C6C8A8FEAF23E), UINT64_C(0x00015B3EACB47609), UINT64_C(0x0001C051945F47AE), UINT64_C(0x0003BB72E86D1518), UINT64_C(0x0002F0317989531D), UINT64_C(0x000734207AD0F517), UINT64_C(0x000363F8254FFC55), UINT64_C(0x00016DC567D3F213), UINT64_C(0x0004C688524FC6D3), UINT64_C(0x000156E27F2C4E00)}, {UINT64_C(0x00094738AD2D4E84), UINT64_C(0x000308AECD530FE4), UINT64_C(0x0003502EB6F601CA), UINT64_C(0x0000A8DF04C92C06), UINT64_C(0x00050EB08481C052), UINT64_C(0x000AA7EB925117D8), UINT64_C(0x00049599E1644BCD), UINT64_C(0x0005C13296C44839), UINT64_C(0x000500DE14878BFC), UINT64_C(0x00071AD4469CF9E7)}, {UINT64_C(0x000E2FB921857436), UINT64_C(0x00043A88AF65DD1C), UINT64_C(0x0007AE448925AD60), UINT64_C(0x000665712480CF54), UINT64_C(0x0002182C680974A7), UINT64_C(0x000A0E7328765D70), UINT64_C(0x000268DF8BD38233), UINT64_C(0x0006919944C2A877), UINT64_C(0x0007783F5CA85F2D), UINT64_C(0x000739F3727C396A)}}, {{UINT64_C(0x000E191F38D6E32D), UINT64_C(0x0003D053DFEFE14D), UINT64_C(0x0006103BF922921F), UINT64_C(0x0002781AB0853980), UINT64_C(0x0004D1652DB90908), UINT64_C(0x0005E1F759009BDD), UINT64_C(0x00019A45C89003A3), UINT64_C(0x0006A14C19DCA07A), UINT64_C(0x0005D837A9C8F3A6), UINT64_C(0x0000DE43E792E061)}, {UINT64_C(0x000058271D24FD29), UINT64_C(0x00068BAB21F6CEE4), UINT64_C(0x0004478711E724E4), UINT64_C(0x0006CEF29CE967CC), UINT64_C(0x0004B50277D6D492), UINT64_C(0x0004164FBC658CA4), UINT64_C(0x0005AF1234A44C70), UINT64_C(0x0003BD47313B580F), UINT64_C(0x0006BC5D3649D3EC), UINT64_C(0x0007638ACC404B36)}, {UINT64_C(0x00025CAF5D092528), UINT64_C(0x00015409EDAAF2E8), UINT64_C(0x00058CB7B8A5B798), UINT64_C(0x0007CA6671CF0F3C), UINT64_C(0x00052C52122B9340), UINT64_C(0x000DB0C96E176FB1), UINT64_C(0x00055085B46D6018), UINT64_C(0x0002FDD65EB673C5), UINT64_C(0x0000B19A0B489654), UINT64_C(0x0002A275A7E071D2)}}, {{UINT64_C(0x0001A067462A7A3F), UINT64_C(0x0007CAA8EAE4E2D4), UINT64_C(0x0004DFDFC8AE5719), UINT64_C(0x0007F8F8369F764C), UINT64_C(0x0002A33657D7196B), UINT64_C(0x000ACE1F520DCA38), UINT64_C(0x00015FA3A1F57752), UINT64_C(0x00001065EF98FA0B), UINT64_C(0x0004F22D7351AD00), UINT64_C(0x0000B4988C661B8F)}, {UINT64_C(0x000C5FDC9DF374E1), UINT64_C(0x00033D547A4D226B), UINT64_C(0x0002DA94FE5AD02C), UINT64_C(0x0005207148BDD3C7), UINT64_C(0x0001521F51FF31A6), UINT64_C(0x00048B1F8084AD9F), UINT64_C(0x000169D55C98C3B6), UINT64_C(0x00016716681D2998), UINT64_C(0x00076D65C8585D2D), UINT64_C(0x000503C6F5CC1008)}, {UINT64_C(0x000CE3789E67601E), UINT64_C(0x0000F38B3450DF49), UINT64_C(0x0003E6488733B404), UINT64_C(0x000128DC95E3F8DB), UINT64_C(0x0003405A39A11293), UINT64_C(0x000E8E6112B3A418), UINT64_C(0x00046B9A7FFCE45B), UINT64_C(0x0005D9582699F55F), UINT64_C(0x000509DE86896EE8), UINT64_C(0x000253344BD2D25A)}}, {{UINT64_C(0x000A74347CE9D01B), UINT64_C(0x00044CA58D3D8F8A), UINT64_C(0x00050F0D0D68B95B), UINT64_C(0x00066CFA1182777D), UINT64_C(0x0000B0C791214C7B), UINT64_C(0x0002416F6ECE0445), UINT64_C(0x00049F613047A77F), UINT64_C(0x00070690C94185C7), UINT64_C(0x0006E6203DEAD6C4), UINT64_C(0x00030B26F58B9536)}, {UINT64_C(0x000A58FA609D2E01), UINT64_C(0x000678958763572F), UINT64_C(0x000767549D4EB411), UINT64_C(0x0007809D91FE5A98), UINT64_C(0x00013335B8563F17), UINT64_C(0x0009523C3394E0DA), UINT64_C(0x00048A10A1B96912), UINT64_C(0x000742BA8C558752), UINT64_C(0x00009B3582D1EFD9), UINT64_C(0x00016EAF2C3E1BD3)}, {UINT64_C(0x000E2DC67D5E5A88), UINT64_C(0x000598CF6F4EF704), UINT64_C(0x00011C238E331841), UINT64_C(0x0002E1CA17ED944C), UINT64_C(0x0007FEA87E3DB53D), UINT64_C(0x0000B99FCC76BB95), UINT64_C(0x0000BBF95F7E3AB4), UINT64_C(0x000445911CBCE6F1), UINT64_C(0x00062C0AEE9E79DF), UINT64_C(0x0001ABB8605E684D)}}, {{UINT64_C(0x0003871499B1866E), UINT64_C(0x00026E19448C89A9), UINT64_C(0x00007B6CB1356919), UINT64_C(0x0007B5EFC7773779), UINT64_C(0x00071541CD774F9C), UINT64_C(0x0000D81B8DC56F51), UINT64_C(0x000590BBF413B605), UINT64_C(0x000312F6FCC71713), UINT64_C(0x00040195ACA7265C), UINT64_C(0x00026C0F46908F3B)}, {UINT64_C(0x000C3CFC3518AB54), UINT64_C(0x0002C5FF27FA6953), UINT64_C(0x00009C03C91FECE0), UINT64_C(0x00063E758C4A409F), UINT64_C(0x00047ED48DD883AF), UINT64_C(0x000D3B409A02DCB3), UINT64_C(0x000710E2A1D5CBE9), UINT64_C(0x0007DC251BA3E052), UINT64_C(0x00045E9A29900763), UINT64_C(0x0000A7C951A4128D)}, {UINT64_C(0x000B48959A040E34), UINT64_C(0x000641FBFBA37FEE), UINT64_C(0x0006D6D531398A6F), UINT64_C(0x0005F4725764937E), UINT64_C(0x0000FB5E7D595AF7), UINT64_C(0x0002A0E33F31CD55), UINT64_C(0x000171D3C6F621A1), UINT64_C(0x00030886FC60A83C), UINT64_C(0x0002375FEAAB3B40), UINT64_C(0x000656142FE41FD8)}}, {{UINT64_C(0x00088D813F345513), UINT64_C(0x0006B33BA57A93E0), UINT64_C(0x0004C7985F7EFB17), UINT64_C(0x0000AD075424ADBA), UINT64_C(0x0004E8F7946DF6B2), UINT64_C(0x000C112D1F980523), UINT64_C(0x00049E755D0280A1), UINT64_C(0x0002D0BE2A1F153A), UINT64_C(0x0003488C3095B641), UINT64_C(0x0004DB1E9A0CD854)}, {UINT64_C(0x000827E184A33715), UINT64_C(0x00026FFF534D1DE2), UINT64_C(0x0005B116ED309D3B), UINT64_C(0x00040C8D9923F968), UINT64_C(0x000254D6262F127D), UINT64_C(0x000EB4C401A02B57), UINT64_C(0x0007C1A5CD19481B), UINT64_C(0x0004E994D22CB148), UINT64_C(0x0002FD14D8E9A6FF), UINT64_C(0x0003F3B0B506E8EF)}, {UINT64_C(0x0000ACBB2192D0D4), UINT64_C(0x0005AD437C1137DA), UINT64_C(0x000194DF8F4978FE), UINT64_C(0x000569F428FCD681), UINT64_C(0x000440AB84EBDA2E), UINT64_C(0x0000071ACB2B9B94), UINT64_C(0x00036495A727E109), UINT64_C(0x0002C7BBFBC4670C), UINT64_C(0x00070DF23A25F661), UINT64_C(0x00028B24AE967AD8)}}, {{UINT64_C(0x000A0F56D26C19CD), UINT64_C(0x0002199EFE6C17CF), UINT64_C(0x000234D29F1CA747), UINT64_C(0x00074E7EDAC788C6), UINT64_C(0x00056DEF769EC613), UINT64_C(0x0006DA5F9111D368), UINT64_C(0x00075019DED7070F), UINT64_C(0x000668904B9CC686), UINT64_C(0x0007BD2278E98141), UINT64_C(0x00074D7CE18B9D06)}, {UINT64_C(0x0001691EF1DB7743), UINT64_C(0x0005BDCB52513251), UINT64_C(0x0000880DFD58552F), UINT64_C(0x0001D6B3EE69BD0A), UINT64_C(0x0000DF5A88773C38), UINT64_C(0x000C094929962F60), UINT64_C(0x0001978F58542D2F), UINT64_C(0x0002477127820A19), UINT64_C(0x0004F630DFE1AD37), UINT64_C(0x000283387FC2588D)}, {UINT64_C(0x00073E4B175342B1), UINT64_C(0x0001E2EA2F8817F8), UINT64_C(0x0000E36E592D89B9), UINT64_C(0x000556985C76F3D1), UINT64_C(0x00017586947F1B9F), UINT64_C(0x00083894538720F0), UINT64_C(0x00049C8320EB6627), UINT64_C(0x00057FCF4E730A78), UINT64_C(0x0002A4BEEFAA0B93), UINT64_C(0x000294ECE9A722E1)}}, {{UINT64_C(0x000672F6D1495031), UINT64_C(0x0001BD8FDDE53EF6), UINT64_C(0x0002B91C714A2C13), UINT64_C(0x0003042764C1BE7A), UINT64_C(0x000215C56A0EDE6E), UINT64_C(0x000F01712E36F0AB), UINT64_C(0x000525EB2C91F5D9), UINT64_C(0x0004A7BAC5E8B947), UINT64_C(0x0005183B56926CBA), UINT64_C(0x0007D3EDAAAC8E27)}, {UINT64_C(0x000282A6939E11C3), UINT64_C(0x00066C4CBC6F5DBE), UINT64_C(0x0005123C70144F68), UINT64_C(0x0000354705754070), UINT64_C(0x0005BE6B2B681A76), UINT64_C(0x00054B5DD04806FF), UINT64_C(0x0004CE73D1EA7C82), UINT64_C(0x000692CC1053AB63), UINT64_C(0x000535AE1B4F5F42), UINT64_C(0x00060A6C280503D9)}, {UINT64_C(0x0005CCDAD02C3E6B), UINT64_C(0x000236AAF0C2208D), UINT64_C(0x0002A1B3DC123AD5), UINT64_C(0x0004808D9A85C7CB), UINT64_C(0x000620B632D048DE), UINT64_C(0x000DE4795B182DAC), UINT64_C(0x0006F740B4DDEBB6), UINT64_C(0x000527F4E1B71053), UINT64_C(0x0003711DE510B0C6), UINT64_C(0x0004C2397BB75FD4)}}, {{UINT64_C(0x0004234DA61A7380), UINT64_C(0x0007CFE09C0E115B), UINT64_C(0x000146042D1F85BF), UINT64_C(0x00076BA304771D0E), UINT64_C(0x000382E92D2CA568), UINT64_C(0x000F852C7DE31639), UINT64_C(0x0002B6DA101F3608), UINT64_C(0x0002354CDEB32A3D), UINT64_C(0x0006D1C3FABA408E), UINT64_C(0x00046A322AB41F71)}, {UINT64_C(0x000835486D6965D2), UINT64_C(0x0005DDC060C09641), UINT64_C(0x0006FE8F914611BF), UINT64_C(0x00056CBACCEE1D60), UINT64_C(0x00029652751B4958), UINT64_C(0x00030B1681FB22FD), UINT64_C(0x0004C26183389F35), UINT64_C(0x00064C5D6F3E855B), UINT64_C(0x00048CC11FAA68A2), UINT64_C(0x000303DF8C197245)}, {UINT64_C(0x000A93445489DD55), UINT64_C(0x00032C10E5A00644), UINT64_C(0x00010133787B6B48), UINT64_C(0x000294AF3FFBB10E), UINT64_C(0x00067150840A8E54), UINT64_C(0x00048B07F53AECD5), UINT64_C(0x0002BDABD1E806B9), UINT64_C(0x00077916BD0D716C), UINT64_C(0x0007251EACE82A30), UINT64_C(0x0005BD06E6166102)}}, {{UINT64_C(0x000198DAB8E7D26B), UINT64_C(0x0004B8CD7B0F6214), UINT64_C(0x0006F94FEBA66594), UINT64_C(0x0006D655AAE8E434), UINT64_C(0x00033CBDDA515A1D), UINT64_C(0x000FD360D05067E0), UINT64_C(0x0007D4B6026E8F95), UINT64_C(0x0006FA60F441F382), UINT64_C(0x000671F70F6E2FD4), UINT64_C(0x00058B341C31C7CD)}, {UINT64_C(0x0003B6DAB18C1F78), UINT64_C(0x000360A07E0CE4B7), UINT64_C(0x00037BA4F69CC30E), UINT64_C(0x00014F6DD6939E3B), UINT64_C(0x00071E66AFEA8A58), UINT64_C(0x000F5276CCE6483E), UINT64_C(0x0003F604318A4007), UINT64_C(0x0001FF31567FCF56), UINT64_C(0x0007687CFE2E27EA), UINT64_C(0x00043AF6AD6807D2)}, {UINT64_C(0x000152CC8C204025), UINT64_C(0x00032037F0153CD1), UINT64_C(0x0001E8B1E05EC419), UINT64_C(0x0001B7B6CEF81375), UINT64_C(0x00017E8291BDC455), UINT64_C(0x0002E282133836F4), UINT64_C(0x0001D9A6210E2D16), UINT64_C(0x000799CEE0857BEA), UINT64_C(0x00035D41A84A5412), UINT64_C(0x0006FFBCA27C28A6)}}, {{UINT64_C(0x0000430814E96BE9), UINT64_C(0x00057E73FB140B73), UINT64_C(0x00060128FAB5ADA4), UINT64_C(0x0007C05121085A5A), UINT64_C(0x000767DC265FE0E8), UINT64_C(0x00025029FD3C2D6F), UINT64_C(0x0004EF454786B123), UINT64_C(0x000208D275E826AD), UINT64_C(0x0006C327FB0C7286), UINT64_C(0x000424E515341DF4)}, {UINT64_C(0x0009BDDC8231AB6B), UINT64_C(0x0005CA9241F8E72F), UINT64_C(0x000773A7E6FE081D), UINT64_C(0x00024CAA53134E52), UINT64_C(0x0005AC81DCD4E91A), UINT64_C(0x00062F6FB283E86A), UINT64_C(0x00020E0D3D1EA811), UINT64_C(0x0000179B49545C71), UINT64_C(0x00051EA7921EDD08), UINT64_C(0x0001106F03625EEA)}, {UINT64_C(0x000F609CEB81873F), UINT64_C(0x00019BFC53A07BB7), UINT64_C(0x0002151A37FD339F), UINT64_C(0x0000247FAB99463B), UINT64_C(0x00028EB12503B657), UINT64_C(0x00000740156BCA3C), UINT64_C(0x0003050E54A17FC4), UINT64_C(0x00006A21FE8BE254), UINT64_C(0x000783205CEE4961), UINT64_C(0x0005DDAC46630BD0)}}, {{UINT64_C(0x000D0214026C8378), UINT64_C(0x00049B9512E7C6AB), UINT64_C(0x00052CAB42C95449), UINT64_C(0x0001712C0B2D3437), UINT64_C(0x000028712113EE6E), UINT64_C(0x0003C231B02FBAA4), UINT64_C(0x00034002A05D7466), UINT64_C(0x00047244849D6C0F), UINT64_C(0x00007A777E770EED), UINT64_C(0x0002FB5FBC1A501D)}, {UINT64_C(0x0007DD3F594FA92E), UINT64_C(0x00011F65F7B4DC87), UINT64_C(0x0006C8D5BC2A5CD3), UINT64_C(0x00045434BCA486D6), UINT64_C(0x0000916C2F835346), UINT64_C(0x000284317FF11104), UINT64_C(0x0000FED4B690D85B), UINT64_C(0x0004F7CD3C5275F4), UINT64_C(0x00072FCBE2A0E31E), UINT64_C(0x0006DCE382A2D3FC)}, {UINT64_C(0x00010A836271A17B), UINT64_C(0x000731E97701D7E1), UINT64_C(0x00074424AD4971CE), UINT64_C(0x0007F483B4D3226B), UINT64_C(0x0000B8D73CF87486), UINT64_C(0x0003747546D2B06B), UINT64_C(0x0006D6E9758543E8), UINT64_C(0x0002311DE6C16B96), UINT64_C(0x0000CBAF9CBD69A4), UINT64_C(0x000095BAD5DFF17A)}}, {{UINT64_C(0x000774E982F03894), UINT64_C(0x00068F7BA9BD2B4C), UINT64_C(0x0001BF739059F5EE), UINT64_C(0x00047AB5F6CF04EE), UINT64_C(0x00003AC811A5FFEF), UINT64_C(0x0005C95473A71B06), UINT64_C(0x00059B02D1C89D3A), UINT64_C(0x00011350FAAC38CB), UINT64_C(0x0002513847A831C2), UINT64_C(0x0007FA7D3DC337C4)}, {UINT64_C(0x000E029A8789C756), UINT64_C(0x0006C80112AA281C), UINT64_C(0x00008852BEC02592), UINT64_C(0x0003FBF12B155C1A), UINT64_C(0x0005E093259AD772), UINT64_C(0x0009A44E24E7366E), UINT64_C(0x0003BF1CA8CB8F83), UINT64_C(0x0006E16F8C3A71FD), UINT64_C(0x0001DBC1D6FDDDC1), UINT64_C(0x0005A28406D8B874)}, {UINT64_C(0x00052274D60C7FE9), UINT64_C(0x00009ADA801895BF), UINT64_C(0x000022D4D6202774), UINT64_C(0x00072D947EE0B5BD), UINT64_C(0x00051A0FEB7FDA2C), UINT64_C(0x000709284A66373B), UINT64_C(0x00013FB44E784E2E), UINT64_C(0x00043800043BC45B), UINT64_C(0x0006DEBFA915C8FE), UINT64_C(0x000184A44DB57776)}}, {{UINT64_C(0x000C6E45435B0D8B), UINT64_C(0x0007A4D96FC4C926), UINT64_C(0x0004DD4FFB13A623), UINT64_C(0x0002B97573D59BA4), UINT64_C(0x00064D5DAD519C4F), UINT64_C(0x000C54E3E0322075), UINT64_C(0x00025D680006D4FD), UINT64_C(0x000026C6C103CE9E), UINT64_C(0x0006A3C770AD980F), UINT64_C(0x00000AFFA7978989)}, {UINT64_C(0x0001BBC06890396F), UINT64_C(0x00059B7508BE77A3), UINT64_C(0x0002C2F34E1E88EF), UINT64_C(0x0000BA76CC4B6DC3), UINT64_C(0x00040CB93F2DB890), UINT64_C(0x00038DB1EAF02BA4), UINT64_C(0x00051A968FE1C009), UINT64_C(0x00079E490FDF2F6E), UINT64_C(0x00038810CC4881B6), UINT64_C(0x0002F52348865870)}, {UINT64_C(0x000FBCBADF123F77), UINT64_C(0x0005C24E5CE6F8C7), UINT64_C(0x00057CBE94145D7B), UINT64_C(0x0003D7A5F191DC9F), UINT64_C(0x000580576DE72DB2), UINT64_C(0x0003E11D99876CB6), UINT64_C(0x00071D9921E18FA4), UINT64_C(0x0002A74C8C214DE9), UINT64_C(0x000290E367E8106A), UINT64_C(0x0000A45E602E2A06)}}, {{UINT64_C(0x000C81708300B3A2), UINT64_C(0x00002EB6DD40141C), UINT64_C(0x00008EBFBAD275A0), UINT64_C(0x00009EB98ABECC72), UINT64_C(0x0001EA0CBBD24C18), UINT64_C(0x0005C085867DB19C), UINT64_C(0x00078A2DB60D1751), UINT64_C(0x00032A43EBAC70A1), UINT64_C(0x0002C402B12DA313), UINT64_C(0x0004F4B89ACDD13A)}, {UINT64_C(0x0004AC90A370FD35), UINT64_C(0x00027D715223E22B), UINT64_C(0x000564833F08968D), UINT64_C(0x0006A965DB0C2238), UINT64_C(0x0004C25626C5CCE9), UINT64_C(0x000E894C118288F1), UINT64_C(0x00004FDD61C59DF2), UINT64_C(0x0004F91479C26D34), UINT64_C(0x00022FDED1EDE6BC), UINT64_C(0x00053CC6F351DBD1)}, {UINT64_C(0x00041C1E5BF143DB), UINT64_C(0x00078318A8FC82ED), UINT64_C(0x00073CB01F7A1760), UINT64_C(0x0002BB276EE12092), UINT64_C(0x00062B5D062F3983), UINT64_C(0x0006C0699785ED64), UINT64_C(0x000705C5B8750987), UINT64_C(0x000734C5A5EBF1CC), UINT64_C(0x0006B535CD5FCA58), UINT64_C(0x000173A96CF5E5C2)}}, }, { {{UINT64_C(0x00013C7D530A0840), UINT64_C(0x00037CA09024BA99), UINT64_C(0x00000F02A724D26D), UINT64_C(0x0007486168F78DF3), UINT64_C(0x00057B6FBAF96B6F), UINT64_C(0x00020E874D64E405), UINT64_C(0x0001C5456BEE2684), UINT64_C(0x000700947727AE36), UINT64_C(0x0000AF081E60DF35), UINT64_C(0x00049F6D248190F3)}, {UINT64_C(0x000FACBF6A273B2E), UINT64_C(0x0000B50B6F61BB7F), UINT64_C(0x00016ED02D72CCBD), UINT64_C(0x000009999E37103A), UINT64_C(0x0006DEE9B338E1D0), UINT64_C(0x00076C4153F5F8EB), UINT64_C(0x0004FB473E4876B9), UINT64_C(0x00035CB573505218), UINT64_C(0x00040E4E17B314F1), UINT64_C(0x00064FADD17FB3C8)}, {UINT64_C(0x00090B27A6A17533), UINT64_C(0x00010DB043FC3678), UINT64_C(0x0005F8AAB7DA8EDB), UINT64_C(0x0005008B83D17311), UINT64_C(0x00075BB4482F1426), UINT64_C(0x000B1BCB5765DFFA), UINT64_C(0x000242DCC05593AD), UINT64_C(0x00045C4BE141A4D5), UINT64_C(0x0006EBC978B8CA73), UINT64_C(0x0004580E5DA2151A)}}, {{UINT64_C(0x000B09415B635B74), UINT64_C(0x000483E55C20EA00), UINT64_C(0x00070DEE5B80A6E0), UINT64_C(0x00072FD4450BC01C), UINT64_C(0x0007B300C6DCC536), UINT64_C(0x000754D2BB66E63F), UINT64_C(0x0001BF3C286F6A01), UINT64_C(0x00025F645BB8410D), UINT64_C(0x000298DF23B3BFD7), UINT64_C(0x0001774CB501031D)}, {UINT64_C(0x000271CB350C6048), UINT64_C(0x0007DCA7FD3BF959), UINT64_C(0x0000C41185459A7F), UINT64_C(0x0004BB079006A71E), UINT64_C(0x0001C3DA681DC428), UINT64_C(0x000E32A22D0BED67), UINT64_C(0x0001CF9C74CC48D7), UINT64_C(0x000754ED2FD148AF), UINT64_C(0x0006A6BF79732C29), UINT64_C(0x0000637BA0DEB58F)}, {UINT64_C(0x000AEEE5E5D5BF89), UINT64_C(0x0001BA9622F598CD), UINT64_C(0x00017E6C0ECF6116), UINT64_C(0x0001B6169A7A5686), UINT64_C(0x0000C74F9DCA999E), UINT64_C(0x000BAE9A5784B34D), UINT64_C(0x0003F1DCC80821EF), UINT64_C(0x0006A6297209394D), UINT64_C(0x000027BAECCEB3DB), UINT64_C(0x0006FBF5A0739FF7)}}, {{UINT64_C(0x000ADF4D9C8BE4C7), UINT64_C(0x0001F7C3F9B2DF52), UINT64_C(0x000054205B348462), UINT64_C(0x00058A2B0587B556), UINT64_C(0x0001031A5A79DB2E), UINT64_C(0x000CB7B60FC99B95), UINT64_C(0x00025FC96A4BB5A5), UINT64_C(0x0006C62B62F597A6), UINT64_C(0x00009CBDCB2DF127), UINT64_C(0x0002ACC07E9CED89)}, {UINT64_C(0x0000ED235FAE524A), UINT64_C(0x0003E231B9C1C59C), UINT64_C(0x0005FACE3761829C), UINT64_C(0x000417E0131C4B06), UINT64_C(0x000703508BE7FC97), UINT64_C(0x00047BA8D9CC12E6), UINT64_C(0x00040B532D99E9A0), UINT64_C(0x00013850B64F1991), UINT64_C(0x0005CDF168C10B39), UINT64_C(0x000358ABDF8E6B44)}, {UINT64_C(0x00042687C30120DE), UINT64_C(0x0006F4E854B5AC1D), UINT64_C(0x000060D24D07C886), UINT64_C(0x0006662BC5B4226E), UINT64_C(0x0000DD5E40422C53), UINT64_C(0x00066BA1A186AEA2), UINT64_C(0x0003D5A9977141C7), UINT64_C(0x0007210CB94D5A31), UINT64_C(0x0000575395147170), UINT64_C(0x0003EEF35D2347C4)}}, {{UINT64_C(0x00005FA6D194F912), UINT64_C(0x000656A4617A17B0), UINT64_C(0x0002B82DEF48F596), UINT64_C(0x000483AE1ABD8952), UINT64_C(0x0004FEA93C4AA27F), UINT64_C(0x000A79830ABCFA6B), UINT64_C(0x00030C8EA10D6328), UINT64_C(0x000150C9AB136C88), UINT64_C(0x00009F66838D7EB3), UINT64_C(0x000599AAECD736AC)}, {UINT64_C(0x000101FF4997777E), UINT64_C(0x0006FE6DA39F9EF7), UINT64_C(0x0005DD2FD55D5B90), UINT64_C(0x00001EBA3BFFA43E), UINT64_C(0x0003937F9AEAE09F), UINT64_C(0x000B6E4EB341745B), UINT64_C(0x0006A541793FEB35), UINT64_C(0x0004C99BA0510109), UINT64_C(0x0003ECAA464451F9), UINT64_C(0x000627CC2A28E33F)}, {UINT64_C(0x0006F5CF9EEF8083), UINT64_C(0x0003689B7AF03C8C), UINT64_C(0x00041C9C530F26AE), UINT64_C(0x0006F1B087DFAE9E), UINT64_C(0x0005ABB0337D1374), UINT64_C(0x000F05AA9CE380B8), UINT64_C(0x00039D858198471E), UINT64_C(0x0005CB4A29D7FAB0), UINT64_C(0x000794534C8BBACE), UINT64_C(0x00039CEB7D5953E0)}}, {{UINT64_C(0x000614976BAF39A3), UINT64_C(0x000325765D4DAD1B), UINT64_C(0x0006EC2EF5A9DFA1), UINT64_C(0x0004F0B8F0301A47), UINT64_C(0x000031D97E564E18), UINT64_C(0x0001C40ECB1A0617), UINT64_C(0x0000DEA316CA6102), UINT64_C(0x000232439090EE60), UINT64_C(0x0002901913C8FB0F), UINT64_C(0x000412FF556E2402)}, {UINT64_C(0x00064CE9BB2FE15E), UINT64_C(0x0005E645C62B940A), UINT64_C(0x0003113E7905C6AE), UINT64_C(0x0002BBDF7FB2C955), UINT64_C(0x0000CCF48175A91B), UINT64_C(0x00038BC3E1E69073), UINT64_C(0x00004538F90A325F), UINT64_C(0x00046BF9A7D85906), UINT64_C(0x0005D8AAA52E49AC), UINT64_C(0x0006F70CEB9DE4F0)}, {UINT64_C(0x000635FDDEEE55B1), UINT64_C(0x0002B647305EC4D0), UINT64_C(0x000785A1C6C0CC5B), UINT64_C(0x0000C28EEEF42FDF), UINT64_C(0x00070B6DF3CE31F0), UINT64_C(0x00075BB72FEDB524), UINT64_C(0x00044424339CD683), UINT64_C(0x000724049E9861DF), UINT64_C(0x000606B0D0C1B71C), UINT64_C(0x00072720DEDAF767)}}, {{UINT64_C(0x000AB553D62ECFB6), UINT64_C(0x00078C8B49E2EE27), UINT64_C(0x000712AB7130F07C), UINT64_C(0x0007517AB87454C5), UINT64_C(0x0007A2F222BFE5AF), UINT64_C(0x0009DF9AC8EF8D1E), UINT64_C(0x00070A0B9486719E), UINT64_C(0x0005FE0A5CBB6815), UINT64_C(0x0005A777CFBB6EAC), UINT64_C(0x00026AA3DEB05ED1)}, {UINT64_C(0x000178E658CAB163), UINT64_C(0x0006218B72D4439D), UINT64_C(0x0003E0E7508F98B6), UINT64_C(0x00053A2E9C0FE780), UINT64_C(0x0000862C90F4AB94), UINT64_C(0x0007D2A76495265C), UINT64_C(0x00007D6CA0B086A9), UINT64_C(0x00037E0CE123AE70), UINT64_C(0x0005E35005198C60), UINT64_C(0x00014DB9BE0C9BD4)}, {UINT64_C(0x00022AE27AE69A25), UINT64_C(0x0006BC61B880B6B7), UINT64_C(0x0002B9A770ACB37C), UINT64_C(0x0006A57A8181E7DE), UINT64_C(0x000515156749D33A), UINT64_C(0x000089265C87573A), UINT64_C(0x0002AAB0BA4334FD), UINT64_C(0x00036BFA753F183D), UINT64_C(0x0007D94CDD21BBEA), UINT64_C(0x00073D056E77BAD1)}}, {{UINT64_C(0x00054034D049A849), UINT64_C(0x0007A61F3DCAD52B), UINT64_C(0x0006AE0359F441AC), UINT64_C(0x0004FA71A2DB1D12), UINT64_C(0x0004A3AD2195FB05), UINT64_C(0x000DA575D0991F08), UINT64_C(0x0004483A3F583D4A), UINT64_C(0x00019E22FF97F896), UINT64_C(0x00045CE17079EB6F), UINT64_C(0x0003D843DC26F0B3)}, {UINT64_C(0x0005BB7830081F4A), UINT64_C(0x000535B970A5DEEC), UINT64_C(0x0006920157058AB1), UINT64_C(0x0005ABB6799CD9B0), UINT64_C(0x0004E722E0BE3E24), UINT64_C(0x00034B265793F314), UINT64_C(0x000721330570DC23), UINT64_C(0x0004426EF0F5B164), UINT64_C(0x0007D6F3A6CB44E7), UINT64_C(0x00056E34A5B334A3)}, {UINT64_C(0x0003F8C7FDA5799A), UINT64_C(0x000633A1AB544629), UINT64_C(0x00036C698257C6E1), UINT64_C(0x000671CB37471C6E), UINT64_C(0x0006309190EBE26A), UINT64_C(0x000073E0D3C3C947), UINT64_C(0x00075458F071D648), UINT64_C(0x0000304D50E4E6E2), UINT64_C(0x00025B9FCE5481C7), UINT64_C(0x000560854658E1E6)}}, {{UINT64_C(0x000AF006973EAE1E), UINT64_C(0x0003BA1CB36833ED), UINT64_C(0x000440038B6244FE), UINT64_C(0x0001ED4D4B28E0BB), UINT64_C(0x0004946559A45B7C), UINT64_C(0x000D7AC175A120AF), UINT64_C(0x0000C782441BE688), UINT64_C(0x0003FBE4F6759494), UINT64_C(0x0003227FCD0861C6), UINT64_C(0x000693E8E569DF61)}, {UINT64_C(0x000EF3D4D70D6006), UINT64_C(0x0003622B91C969F3), UINT64_C(0x00059E57B022C126), UINT64_C(0x0004E567BE39909D), UINT64_C(0x00025826F5172EBE), UINT64_C(0x000978FE696EB07D), UINT64_C(0x0007E55EC2C54F03), UINT64_C(0x0001F198F1EA9886), UINT64_C(0x00061284786511BB), UINT64_C(0x00054EBEEA2E481C)}, {UINT64_C(0x000F0108988CDC8A), UINT64_C(0x0006320933C6DB8E), UINT64_C(0x00069930CEF56158), UINT64_C(0x0003A35FC98F89A6), UINT64_C(0x00027BD07B67AAA5), UINT64_C(0x000A2124168772A7), UINT64_C(0x000108CBFCB7F765), UINT64_C(0x000190EA54B1EC2B), UINT64_C(0x000427DAAD72BFD4), UINT64_C(0x00073EB2D65C41BA)}}, {{UINT64_C(0x000A06A739424A7F), UINT64_C(0x0000F82BABC20278), UINT64_C(0x0005E0013C80B8BA), UINT64_C(0x00009213E9C746A9), UINT64_C(0x00077CCF7EE8DCA2), UINT64_C(0x00048553CE359952), UINT64_C(0x00068D83C7BB1BFC), UINT64_C(0x00023585472C1288), UINT64_C(0x000683CF0D405E14), UINT64_C(0x0004B248941E148A)}, {UINT64_C(0x000A7C88931485A3), UINT64_C(0x00030D7D59F36392), UINT64_C(0x0003096B037E2FE5), UINT64_C(0x00072B76E5C87A57), UINT64_C(0x000412333ADDB88D), UINT64_C(0x00075009989C68F4), UINT64_C(0x0005EE189974076A), UINT64_C(0x000060FFAFD8A128), UINT64_C(0x000120ACF08DA33F), UINT64_C(0x000571F558025BFD)}, {UINT64_C(0x000DA9D04CD700E8), UINT64_C(0x00057458C41B633D), UINT64_C(0x00014B6489FA7B39), UINT64_C(0x0003BD5C957593DD), UINT64_C(0x0001304CB1D79CF1), UINT64_C(0x0005E9BAF878A8A2), UINT64_C(0x000194C540C98A95), UINT64_C(0x0003B7B2BACEC32A), UINT64_C(0x0004F344F8DD4CDE), UINT64_C(0x000078EF34BD78A1)}}, {{UINT64_C(0x000FC67E2383EF8F), UINT64_C(0x000382B810E6F7BF), UINT64_C(0x00006C9F24B27C13), UINT64_C(0x000057D888D81661), UINT64_C(0x00054A699A1B1D6B), UINT64_C(0x0008FF73BB9232B4), UINT64_C(0x0003804878333A2B), UINT64_C(0x00044F051B58790E), UINT64_C(0x0000271D3AA9BD38), UINT64_C(0x00044CDE0EB6CF43)}, {UINT64_C(0x0000D62B3C3A5A19), UINT64_C(0x000141707504E91E), UINT64_C(0x0006515C33000546), UINT64_C(0x00017546C6B9FF00), UINT64_C(0x00045D82E76E1B8B), UINT64_C(0x000AE172E2EB811B), UINT64_C(0x000413704723E59F), UINT64_C(0x00070B4CE13230E2), UINT64_C(0x0000054BF697CE5A), UINT64_C(0x00063ECC547A49B9)}, {UINT64_C(0x000602372F14D11C), UINT64_C(0x000378921B1097ED), UINT64_C(0x00067C4238D607FA), UINT64_C(0x00021D2C859309EE), UINT64_C(0x0005847490A29E8E), UINT64_C(0x0002D093948C4994), UINT64_C(0x0000E23389BFC4DD), UINT64_C(0x0007DE892CA061E2), UINT64_C(0x0004BCEA3495B247), UINT64_C(0x00062F7532D3859D)}}, {{UINT64_C(0x00086B22DF769D24), UINT64_C(0x000247653B1384A5), UINT64_C(0x0007CA7B0BA8B67B), UINT64_C(0x00003DE749E6F9B6), UINT64_C(0x00060288E35E6723), UINT64_C(0x000132375704332A), UINT64_C(0x000090B7E04CAAD9), UINT64_C(0x000618FE2CC615F8), UINT64_C(0x00071C3FA82E1054), UINT64_C(0x0005ACCA0095992F)}, {UINT64_C(0x0008070A5524110A), UINT64_C(0x0002F514E36570A5), UINT64_C(0x0007FA5FFDAD9B18), UINT64_C(0x00040716460997F2), UINT64_C(0x0004A84076418D9B), UINT64_C(0x000191D0E25444E5), UINT64_C(0x0003F007A978D4FD), UINT64_C(0x00010583B27CE828), UINT64_C(0x00076188CFB16D13), UINT64_C(0x0004AB4850C52869)}, {UINT64_C(0x000CB5BB8406E9FB), UINT64_C(0x0006229079FE11A8), UINT64_C(0x00069D10E2374F64), UINT64_C(0x0003E0965719E097), UINT64_C(0x0003D8E4F1D6E86E), UINT64_C(0x000FEA5863BEBA3D), UINT64_C(0x0007D0430EF56C07), UINT64_C(0x000181949DFD703D), UINT64_C(0x0001339A965B35C2), UINT64_C(0x0003B56220F5C7F3)}}, {{UINT64_C(0x00066DEE74B6C3E6), UINT64_C(0x000383135AE75C98), UINT64_C(0x0004505F98DC1ACE), UINT64_C(0x00032C4BBDDAC89F), UINT64_C(0x00052AA09F53D136), UINT64_C(0x0004F3A390196005), UINT64_C(0x0004A5FCAC34F0E0), UINT64_C(0x0001EDC68C692D8B), UINT64_C(0x0002FD9E6D8EE76F), UINT64_C(0x00029FC1CCA2C8F6)}, {UINT64_C(0x00065029BC02DCE4), UINT64_C(0x00072FD6589B1B83), UINT64_C(0x00004147281085E5), UINT64_C(0x0003B32D6A3356B3), UINT64_C(0x00073F9780B33257), UINT64_C(0x0003D884CD344161), UINT64_C(0x00032F7D4EA15736), UINT64_C(0x0000F5FB646C3211), UINT64_C(0x000710946F78EE11), UINT64_C(0x00041450BEBEAFA8)}, {UINT64_C(0x0004B10D60B8A44B), UINT64_C(0x00074DF316AD0515), UINT64_C(0x00000BD0DA3A0140), UINT64_C(0x0002FA9736D69155), UINT64_C(0x0004AE7CB062A37A), UINT64_C(0x0003B28579544A9B), UINT64_C(0x00030DEF5D17E4D9), UINT64_C(0x0004FC0A27B77D73), UINT64_C(0x000103D226B1E92E), UINT64_C(0x0005050AA53E3D45)}}, {{UINT64_C(0x0004C96EE0523578), UINT64_C(0x0002657E40AE1BEA), UINT64_C(0x00032F4A192D817A), UINT64_C(0x0002963B113F0E7E), UINT64_C(0x0005E7C716A6D2E3), UINT64_C(0x00027EE6D4437F4B), UINT64_C(0x0001151EA99B216A), UINT64_C(0x0001183200C3345A), UINT64_C(0x0004620822162719), UINT64_C(0x0006FF98AC189C7F)}, {UINT64_C(0x0007835A38637315), UINT64_C(0x00021DCF392DA107), UINT64_C(0x00032E572F2009A7), UINT64_C(0x000551A3874139CB), UINT64_C(0x00054BA83808EC95), UINT64_C(0x000E3B367E07B1AA), UINT64_C(0x0001C425C58AF001), UINT64_C(0x0007FEBED49D81AD), UINT64_C(0x0005614216D95FD6), UINT64_C(0x0007059956FB58D9)}, {UINT64_C(0x0009A088527332D8), UINT64_C(0x0004EBFF217D2F53), UINT64_C(0x00068A2C41E7A6F9), UINT64_C(0x0007203B80A56ADA), UINT64_C(0x0003CCF4A503F5B5), UINT64_C(0x0009DE73564AAC98), UINT64_C(0x0007C64A2D2D5B63), UINT64_C(0x00066A514607F4F4), UINT64_C(0x0004F7B23A1883CE), UINT64_C(0x000478DBA2254062)}}, {{UINT64_C(0x000891C63EC17278), UINT64_C(0x0003A469EA7941A1), UINT64_C(0x0006CC724614C2A6), UINT64_C(0x00047368EAC894D3), UINT64_C(0x000332725D63A7FD), UINT64_C(0x000E1B3A2B255A5D), UINT64_C(0x0007DE48A07B22AC), UINT64_C(0x0001320FE5C7DF2A), UINT64_C(0x0007981EA9B5299F), UINT64_C(0x00064E3A11075FBC)}, {UINT64_C(0x000F356D82B65E1D), UINT64_C(0x000333902B0C3E91), UINT64_C(0x000236EE56D2F8F6), UINT64_C(0x00052D781547A66B), UINT64_C(0x00071ECC2B2D45FD), UINT64_C(0x00021D01072A8CFE), UINT64_C(0x00014250E888F3A4), UINT64_C(0x00041F6CCF6D58E7), UINT64_C(0x00012F704916CD11), UINT64_C(0x0001C16A5BA5DEB5)}, {UINT64_C(0x0007176D4A4BE8ED), UINT64_C(0x0003AC14FE6CB1C7), UINT64_C(0x0005BF2A9F3FDCA4), UINT64_C(0x000100A77E943894), UINT64_C(0x0001A1B89F7EB96B), UINT64_C(0x000AC24527F9F6BC), UINT64_C(0x0002AFDC6A5CC161), UINT64_C(0x0006C7233297DD8D), UINT64_C(0x0001EF7E4B64538A), UINT64_C(0x00064C28116F6D3D)}}, {{UINT64_C(0x000C28582D0EAF98), UINT64_C(0x000760A4D8C62392), UINT64_C(0x0002E99A28753318), UINT64_C(0x00036B4DD38D7C84), UINT64_C(0x0005CE1103FE9B19), UINT64_C(0x000A5E7E678EC657), UINT64_C(0x00001027FC495CC3), UINT64_C(0x000053D5EFE3F79A), UINT64_C(0x00078707798B4856), UINT64_C(0x0002BCB996DBB870)}, {UINT64_C(0x000DE9BE7A3B7D2F), UINT64_C(0x000326F8D8093FCF), UINT64_C(0x0006F4CA9EA85C42), UINT64_C(0x0002DA90D1D5EFAE), UINT64_C(0x000453D210C50A00), UINT64_C(0x000ED30D7AE954A3), UINT64_C(0x000667D3AF1FF3BD), UINT64_C(0x000610D4A9935FFA), UINT64_C(0x0007996E35B2EEE4), UINT64_C(0x0005851FBF41B9D7)}, {UINT64_C(0x0001CCB597D775B8), UINT64_C(0x0002E2D7080ACA82), UINT64_C(0x00026A27679CA594), UINT64_C(0x000767CAC5608B07), UINT64_C(0x0007D3E1C929A8EE), UINT64_C(0x0001C08248026B08), UINT64_C(0x00066E49F4282B91), UINT64_C(0x00043EC983912C70), UINT64_C(0x00047BE45E4D1D00), UINT64_C(0x0005D6619498C3D3)}}, {{UINT64_C(0x000D75F87926E2CA), UINT64_C(0x0004BCE95D143C30), UINT64_C(0x0007F9B22AB8D12A), UINT64_C(0x0005764F5D0427EC), UINT64_C(0x00053FC4AEC382EC), UINT64_C(0x000BEFAD0696C924), UINT64_C(0x0005C1A42613E0F9), UINT64_C(0x0006C63EA68E2641), UINT64_C(0x0005AE918E206EE4), UINT64_C(0x000201EB6276D205)}, {UINT64_C(0x00080526DEB4F23A), UINT64_C(0x0004A3E016C3560A), UINT64_C(0x00048954F4DFE4E5), UINT64_C(0x00033FAEECA38CED), UINT64_C(0x0001AABCF5F5B04D), UINT64_C(0x000624845CAC218D), UINT64_C(0x000727D5924F0D61), UINT64_C(0x00039A25A9A902B9), UINT64_C(0x00025354B1923A74), UINT64_C(0x00042D904B1EE6E2)}, {UINT64_C(0x0005EE12683D6873), UINT64_C(0x00020C302FB23D53), UINT64_C(0x00041183598E5E20), UINT64_C(0x000660C4A3602D69), UINT64_C(0x000428E3D7F7DA6B), UINT64_C(0x000FFDAB157CCECE), UINT64_C(0x0003ABD7DACF40F1), UINT64_C(0x0001F758B2026116), UINT64_C(0x00059CA09F80A28E), UINT64_C(0x00058050997A84C9)}}, }, { {{UINT64_C(0x00012BC79DE3583C), UINT64_C(0x00021865086663FD), UINT64_C(0x00004E4ABB33032F), UINT64_C(0x00079C1995D5F6AE), UINT64_C(0x0006843DC92E6F2C), UINT64_C(0x000E5AAB95A25A94), UINT64_C(0x000297E894CB3E2E), UINT64_C(0x0002F3E8D3C6A333), UINT64_C(0x0001389E783B3338), UINT64_C(0x0004D35F4985F35A)}, {UINT64_C(0x000924729178D442), UINT64_C(0x00072FEF9AC231D7), UINT64_C(0x0003255217E983F8), UINT64_C(0x00078D1ADD8547ED), UINT64_C(0x0007DD800A0126E4), UINT64_C(0x00040F7454BB5636), UINT64_C(0x00070028ED5FE73D), UINT64_C(0x0002FE6922362D32), UINT64_C(0x000517F433247DD5), UINT64_C(0x0003131BDB6DBD80)}, {UINT64_C(0x0009B880561B3C2F), UINT64_C(0x000528E3FF8E6EB8), UINT64_C(0x0002B3F6E8A064AA), UINT64_C(0x000306F6878089C4), UINT64_C(0x0007DC267AF352EA), UINT64_C(0x000EB92414BD9E20), UINT64_C(0x0003B288AD2E08DE), UINT64_C(0x000226D516C76AEC), UINT64_C(0x00040D85E3E81384), UINT64_C(0x0000D2240FB63716)}}, {{UINT64_C(0x000587DEFF3E2CA8), UINT64_C(0x0000ADE75F1C108A), UINT64_C(0x000077C7746D2B81), UINT64_C(0x0007F15AEEE1A36C), UINT64_C(0x000147D7174597BE), UINT64_C(0x000ADF5550885ADA), UINT64_C(0x0005AC4D1E2642DC), UINT64_C(0x00011B21A28D0DDD), UINT64_C(0x00041407BD6EAB82), UINT64_C(0x00048A1C814EF854)}, {UINT64_C(0x000EE63D584955CA), UINT64_C(0x0000DB6FC1D35A63), UINT64_C(0x0007990E3E93CF7D), UINT64_C(0x0006896872475C47), UINT64_C(0x0002FE85FB8B4F95), UINT64_C(0x0009A4386F393657), UINT64_C(0x0006D05838FAE08A), UINT64_C(0x0003B7E6453E11C6), UINT64_C(0x0004A2C032C2CE97), UINT64_C(0x0003289CB5A153DD)}, {UINT64_C(0x0002BD6E9F70C80A), UINT64_C(0x000231E61F2C2C8A), UINT64_C(0x0002A043498E6B5B), UINT64_C(0x00027EF36D2BD2C9), UINT64_C(0x000792B9E0D4EFFA), UINT64_C(0x000D609539828287), UINT64_C(0x0002DD2C1EC6C7BB), UINT64_C(0x00022B3BF91980DE), UINT64_C(0x0003C03DA1E5A7D9), UINT64_C(0x000084F0BEE586B4)}}, {{UINT64_C(0x000712E11D32F6C1), UINT64_C(0x0007699A1E2965D4), UINT64_C(0x0006F53B52261F62), UINT64_C(0x00010D991E106C19), UINT64_C(0x0005E1F7A164C33C), UINT64_C(0x0002D0C5F074BEB5), UINT64_C(0x000460F51489D3D8), UINT64_C(0x0002E479EAC4245A), UINT64_C(0x0002053DB40CA26B), UINT64_C(0x00007428215ABE9C)}, {UINT64_C(0x000B9A8A9F89A37F), UINT64_C(0x00043FEE2728E6A8), UINT64_C(0x0003BAD546C31F76), UINT64_C(0x0002F4CA0D786241), UINT64_C(0x0007291B2D3383A2), UINT64_C(0x0006C364B58F7471), UINT64_C(0x0000E1166DD243CD), UINT64_C(0x0003571ADDB675C5), UINT64_C(0x0005CEB2284920A6), UINT64_C(0x0003CE87A34C0993)}, {UINT64_C(0x000D7AC4BC491E76), UINT64_C(0x0006933E79C065C0), UINT64_C(0x0003962BB73B910D), UINT64_C(0x00025407D7F52984), UINT64_C(0x000587DBC6C6A8A0), UINT64_C(0x00003AE437D302CF), UINT64_C(0x0004A456DC9A70DC), UINT64_C(0x0003580FD7730DB6), UINT64_C(0x00006BDB32465E50), UINT64_C(0x000303101EF56592)}}, {{UINT64_C(0x000E210468EBF556), UINT64_C(0x0001E3325C2E6FFC), UINT64_C(0x0003EB88667F698C), UINT64_C(0x0004C7309F19C344), UINT64_C(0x00007B954D985C68), UINT64_C(0x000112B5D338E899), UINT64_C(0x000103AD36665F4C), UINT64_C(0x0005C48C27F780B9), UINT64_C(0x0006DFCD7AC7E7C2), UINT64_C(0x0005FBAB29982614)}, {UINT64_C(0x000050C0CB5724E2), UINT64_C(0x0003F7AB514CAA0F), UINT64_C(0x0004F45065DA591B), UINT64_C(0x000629B4E99E7B9F), UINT64_C(0x0007FF99B8004A8B), UINT64_C(0x00013A7E073C783C), UINT64_C(0x0005096EE21EAD2D), UINT64_C(0x00035AC55D5BC48A), UINT64_C(0x00052D7CCDDB8458), UINT64_C(0x00026359B210DDC3)}, {UINT64_C(0x00010EB7F4F37055), UINT64_C(0x00022C5837D27DF8), UINT64_C(0x00014DD44F017128), UINT64_C(0x0000762B8A81A083), UINT64_C(0x0006343F4E6B1730), UINT64_C(0x0006A070B31B593A), UINT64_C(0x00035A4CB671B136), UINT64_C(0x00034AA79F2E1C0D), UINT64_C(0x0002B801D09AF476), UINT64_C(0x0004D55933C87AC6)}}, {{UINT64_C(0x0000F5AF20BFA216), UINT64_C(0x00070CA3CC7423EA), UINT64_C(0x0003BDCF09AF2CF8), UINT64_C(0x00070852C08E07C8), UINT64_C(0x0002B67C67B7DC0D), UINT64_C(0x0004747A18E7911A), UINT64_C(0x0002AE9D138BEC06), UINT64_C(0x00029A908D7441B5), UINT64_C(0x0001CA2C87AB2C68), UINT64_C(0x0005D57E612AC9CA)}, {UINT64_C(0x000CB61AD6C38D3B), UINT64_C(0x000098910BDAA430), UINT64_C(0x0005A8F1058B45F9), UINT64_C(0x0001378B35FE5270), UINT64_C(0x0003B096F4B6729B), UINT64_C(0x000B715D3132EC7F), UINT64_C(0x0000BF368D7A6E35), UINT64_C(0x0003532D4AAC8584), UINT64_C(0x0007C03968D90FAB), UINT64_C(0x0003DD8235C48DCD)}, {UINT64_C(0x000865375C84BF5B), UINT64_C(0x0006F89F501226EA), UINT64_C(0x0003A9BA52948170), UINT64_C(0x0005125268D062C9), UINT64_C(0x000080351C14559D), UINT64_C(0x0002D7F2832CC046), UINT64_C(0x00072CD1CCBF4A78), UINT64_C(0x0006C2A3FAE0EA13), UINT64_C(0x00066FCF5DB7E22E), UINT64_C(0x00007019E17361A4)}}, {{UINT64_C(0x000E48E34B29F673), UINT64_C(0x000189AA11C7064C), UINT64_C(0x0000980567389DB8), UINT64_C(0x000140D89A2CB56F), UINT64_C(0x00066BB6C0F4791D), UINT64_C(0x00097F8E780B26F8), UINT64_C(0x00069029D6B5B3AB), UINT64_C(0x0001807A1948E6BC), UINT64_C(0x00026E19F742FADE), UINT64_C(0x000085F04C0FC570)}, {UINT64_C(0x0008A43FBB459AFB), UINT64_C(0x000080263E72058C), UINT64_C(0x00077C836CC06EA1), UINT64_C(0x0001B50F235F0EA1), UINT64_C(0x00022280D3BF0256), UINT64_C(0x000B12F3375A9340), UINT64_C(0x00056068C08F4DCC), UINT64_C(0x000188B7FEE30E53), UINT64_C(0x00034956976A7E2B), UINT64_C(0x0006F32B80C1218B)}, {UINT64_C(0x0002995C7D4906BD), UINT64_C(0x0004C47098446E5D), UINT64_C(0x000770566A516A0B), UINT64_C(0x0001E7E3FBA19859), UINT64_C(0x0005F7F7EEE25E7C), UINT64_C(0x00056AB023B1E34B), UINT64_C(0x00065C13925054D0), UINT64_C(0x0003F1A384F6EB8D), UINT64_C(0x0000C7DE81E37B03), UINT64_C(0x0007AB8E723005D9)}}, {{UINT64_C(0x000D9677AC1784B4), UINT64_C(0x0003B608C12C6E54), UINT64_C(0x00003773DBAACF6B), UINT64_C(0x000335230A701D3D), UINT64_C(0x000164DD69069B24), UINT64_C(0x000529717B200FBF), UINT64_C(0x00020FA9213B9796), UINT64_C(0x00057DB2FAFA5561), UINT64_C(0x0002139FA8922FB6), UINT64_C(0x00067569B0196555)}, {UINT64_C(0x0009839D81326E12), UINT64_C(0x0007F6B8CD121226), UINT64_C(0x00011EF52FEB2E87), UINT64_C(0x000499E40D596C14), UINT64_C(0x0001E15D66FB1681), UINT64_C(0x000CB2E1A771676B), UINT64_C(0x0005B8802822C88B), UINT64_C(0x0004AC4C2A3D2CE6), UINT64_C(0x000736AEEE38077F), UINT64_C(0x00048E797F51A1F0)}, {UINT64_C(0x000F3FFC1B7E0E25), UINT64_C(0x000741ECED05D3C2), UINT64_C(0x0002F761F2EE2FC5), UINT64_C(0x00001899845146F7), UINT64_C(0x0001F791E6351AD2), UINT64_C(0x000D38697A0353D4), UINT64_C(0x0005D13800614CC5), UINT64_C(0x00072BF23AE1C7DE), UINT64_C(0x0002F2F0CE9EEEC6), UINT64_C(0x0004BCAB345E5507)}}, {{UINT64_C(0x000447671491497E), UINT64_C(0x0000C80E0499549D), UINT64_C(0x0007383B83AE8A43), UINT64_C(0x00018D8798A60AE8), UINT64_C(0x0005A7634049A61D), UINT64_C(0x000CF3BA71A877FA), UINT64_C(0x00038992C781814F), UINT64_C(0x0004FA4F3F875472), UINT64_C(0x0006B3BE16D87909), UINT64_C(0x0007FBF24B86F9CF)}, {UINT64_C(0x0005D7ED1152D458), UINT64_C(0x0006A737D3EC8814), UINT64_C(0x0003336316E14A78), UINT64_C(0x0007540CA254140D), UINT64_C(0x000110B2DC2C19D2), UINT64_C(0x0003541AEE4CD459), UINT64_C(0x0006D62DA4142812), UINT64_C(0x00004D24768B69EF), UINT64_C(0x00017FEAA0883076), UINT64_C(0x00028A34309D30B8)}, {UINT64_C(0x00082AEA5AAA7679), UINT64_C(0x00069F5FFC2299F9), UINT64_C(0x00075584B5CBBAE3), UINT64_C(0x0007EB4016FF7E27), UINT64_C(0x00077F9D62577D9F), UINT64_C(0x0006DC60EBCA06A0), UINT64_C(0x0003C85F387E563B), UINT64_C(0x00015F9C0C733FB2), UINT64_C(0x00055561ADBDC642), UINT64_C(0x00014B6056050D92)}}, {{UINT64_C(0x000D1DDCB3D8676E), UINT64_C(0x00029A0A308DDECF), UINT64_C(0x0006A381EC144616), UINT64_C(0x0001160CA0BFEC27), UINT64_C(0x00061482EF8B50E3), UINT64_C(0x000EF6F13CBB5FD6), UINT64_C(0x00047895BA6C9BBE), UINT64_C(0x00025EC3CC939CD7), UINT64_C(0x0000C55182568086), UINT64_C(0x00028782AA420F85)}, {UINT64_C(0x0008812D8865EB1A), UINT64_C(0x0000A23A343939AB), UINT64_C(0x0007911CB6565C2A), UINT64_C(0x000542477B4639B9), UINT64_C(0x0004025D314B3748), UINT64_C(0x000F0FC98FF524B1), UINT64_C(0x0006AA3ED50EC301), UINT64_C(0x00067BEA284CE141), UINT64_C(0x00035FBE193BAF03), UINT64_C(0x000283F0131BFA47)}, {UINT64_C(0x0003691D5B656339), UINT64_C(0x00010FA865CCF6EB), UINT64_C(0x000039AFC5408E69), UINT64_C(0x000716574C1285D7), UINT64_C(0x000229C93E34D31C), UINT64_C(0x0009DCB9E5D6F976), UINT64_C(0x00035DEBA296DC50), UINT64_C(0x0000AE005B921892), UINT64_C(0x0002C8A31CBE1965), UINT64_C(0x0000ED87D30FCA21)}}, {{UINT64_C(0x0009C6090B0DB1A4), UINT64_C(0x00034B5A129C41C7), UINT64_C(0x00059562792D152D), UINT64_C(0x0000A11D7CE1D2F8), UINT64_C(0x00066B6939748922), UINT64_C(0x0002AD03A62C9001), UINT64_C(0x0007BBAEC39432F3), UINT64_C(0x0000F8A4915FF527), UINT64_C(0x0007DBE1A2997F40), UINT64_C(0x000439D5F39E64A8)}, {UINT64_C(0x0005C0D182E1AF93), UINT64_C(0x000153BBC2722775), UINT64_C(0x000211B8B306BA69), UINT64_C(0x0007D3A33C211B46), UINT64_C(0x0005650D03F0188D), UINT64_C(0x0003805179159F66), UINT64_C(0x0005B80FDEBBC150), UINT64_C(0x00023B752B2CCA19), UINT64_C(0x00056569DDD4BB09), UINT64_C(0x000630A1D0FE1331)}, {UINT64_C(0x000CC57A9BD01FD0), UINT64_C(0x00001A61B9AF718F), UINT64_C(0x0003E7AEFE584488), UINT64_C(0x00002846B6BF5441), UINT64_C(0x000032F196D04DD3), UINT64_C(0x0005855F89A5B1E2), UINT64_C(0x00034031211C8DC5), UINT64_C(0x00014993DFD465A0), UINT64_C(0x0001B4AFBB37974E), UINT64_C(0x00010725BF8ACC79)}}, {{UINT64_C(0x0008533407FDA6AE), UINT64_C(0x000192F807908397), UINT64_C(0x0006D0300B59435D), UINT64_C(0x0003D01EB7B22034), UINT64_C(0x0006AFEEF3F9CD09), UINT64_C(0x000E5025B96AF595), UINT64_C(0x0006A4A6BE18817B), UINT64_C(0x00011D766D6D736B), UINT64_C(0x000798906CAD57F4), UINT64_C(0x0005ABB11A884308)}, {UINT64_C(0x0005141D4E3FF7B2), UINT64_C(0x0007785D03C4C1D1), UINT64_C(0x0002E4309AA4BEDF), UINT64_C(0x0000D594EF832B4B), UINT64_C(0x00079F60B7615E57), UINT64_C(0x000AF439572259C7), UINT64_C(0x00039E6726C1C742), UINT64_C(0x00033EFCC7442133), UINT64_C(0x0001B48C7F680882), UINT64_C(0x0002FBAE97FB8296)}, {UINT64_C(0x0002D2C880F58DFD), UINT64_C(0x00002E893D015F3D), UINT64_C(0x000402A9AE8025AB), UINT64_C(0x0000616166212B68), UINT64_C(0x0005D8A9EFC3CCA1), UINT64_C(0x0007EC85775C4CD6), UINT64_C(0x00048D0978840129), UINT64_C(0x0002C54DE6A58362), UINT64_C(0x0006B650181206C2), UINT64_C(0x000781263825C8B9)}}, {{UINT64_C(0x00037F4695FB8F38), UINT64_C(0x00064899737EA849), UINT64_C(0x00005CA9511A1C0C), UINT64_C(0x0005B2332E230D2F), UINT64_C(0x0005BEFB537AF5C5), UINT64_C(0x000E66EDC4CC05A1), UINT64_C(0x0001F243387EED8D), UINT64_C(0x00060531AF1B8294), UINT64_C(0x00048207AF7FB47E), UINT64_C(0x0006467F4F208BC1)}, {UINT64_C(0x000ED253E56AD0B4), UINT64_C(0x0006FD900D9B4494), UINT64_C(0x000771FDB0B28644), UINT64_C(0x0006608E858B8864), UINT64_C(0x0002410ACFA4ECFD), UINT64_C(0x0006BCBCB4C454F1), UINT64_C(0x0004C982596786AF), UINT64_C(0x0007C7D414F13D62), UINT64_C(0x000400A18A4312B8), UINT64_C(0x0001C8AE8AAC6E97)}, {UINT64_C(0x00039A273DA14F76), UINT64_C(0x00007A039FC51A14), UINT64_C(0x00075AE649E4978D), UINT64_C(0x00068BBF1108ED62), UINT64_C(0x0001AC7CBC84A882), UINT64_C(0x000F007CBF2633B8), UINT64_C(0x0001A252213D53A3), UINT64_C(0x00060026357E6823), UINT64_C(0x0005559C92CD3AA6), UINT64_C(0x000363AFB26A540D)}}, {{UINT64_C(0x000C6D7AC27539AC), UINT64_C(0x0004CAF0243C7093), UINT64_C(0x0006E0AFE6D51B44), UINT64_C(0x0002FD11233BA456), UINT64_C(0x0002CF8D4FBEC26A), UINT64_C(0x000335E8B284BD21), UINT64_C(0x0004E3B0C6669531), UINT64_C(0x000268080A9578C0), UINT64_C(0x00001A56306692EA), UINT64_C(0x0001DC271C3ACEF7)}, {UINT64_C(0x0005D867CCE652DC), UINT64_C(0x000413FF399550DD), UINT64_C(0x0004AE5EB4FD02DD), UINT64_C(0x00052874EA4A9C83), UINT64_C(0x0004E30A566CC4F0), UINT64_C(0x0009ED469CD2FA26), UINT64_C(0x00079EED35A8B65B), UINT64_C(0x000064FF6AF426D8), UINT64_C(0x00013C73FCA107AB), UINT64_C(0x0006BCC1F527AE0B)}, {UINT64_C(0x000E8622B341115B), UINT64_C(0x0005F8B755945B8A), UINT64_C(0x000642734EB49580), UINT64_C(0x00002466340FFFFA), UINT64_C(0x0003E1295E9DB2EF), UINT64_C(0x000914081A805FD4), UINT64_C(0x0004A81CD7486D11), UINT64_C(0x0005D93E4C17C491), UINT64_C(0x0006919BA5ECC6B0), UINT64_C(0x000448FF91161C16)}}, {{UINT64_C(0x0003D9DFABF694F0), UINT64_C(0x00002EE322AB5B23), UINT64_C(0x0007E35695039192), UINT64_C(0x00016EB2F5322F0B), UINT64_C(0x0007FCF7BA70F363), UINT64_C(0x0007FBE02B2A3F5E), UINT64_C(0x00016937E666BFE0), UINT64_C(0x00063B8FCA96F14A), UINT64_C(0x000540136F4D10D5), UINT64_C(0x00039D97115CAD4A)}, {UINT64_C(0x000A782DAEA02C81), UINT64_C(0x0002FD925EE99F06), UINT64_C(0x00060F793F8913A6), UINT64_C(0x0001E83A9CDE3761), UINT64_C(0x0001467FC5C751CA), UINT64_C(0x000264902CF947E3), UINT64_C(0x00006FAA77E5A8BE), UINT64_C(0x00067F05EF979834), UINT64_C(0x0005311603B55490), UINT64_C(0x000074D079F64A01)}, {UINT64_C(0x0006D0D6BDA6A83D), UINT64_C(0x00002DDDDEE12D29), UINT64_C(0x0005927C12A4B6B7), UINT64_C(0x00071C3961F108DF), UINT64_C(0x00077B7833C53611), UINT64_C(0x0002FDE12520D971), UINT64_C(0x0007CB6A7953E587), UINT64_C(0x0004139054626FC8), UINT64_C(0x00079EAC5F05CF63), UINT64_C(0x00001D021BA677A6)}}, {{UINT64_C(0x000CAC0E21E72D01), UINT64_C(0x0002AAC8A7589E07), UINT64_C(0x0007A7F89C925218), UINT64_C(0x0005C69DE570605B), UINT64_C(0x0007C603800C1CEC), UINT64_C(0x0005CD221F6861F6), UINT64_C(0x000225A7F4668D5E), UINT64_C(0x00027C1F6FFB5628), UINT64_C(0x0007A72B7EAEB5A8), UINT64_C(0x0000B10838B451B8)}, {UINT64_C(0x000CE1FEA6AE6F93), UINT64_C(0x00019A7F14080E06), UINT64_C(0x0002CF09EEA75595), UINT64_C(0x0006DB5A156F82EC), UINT64_C(0x0002FBA8A7857009), UINT64_C(0x00013F8B71B7B21D), UINT64_C(0x00036BCBD874C4CE), UINT64_C(0x0003A12D4D39A34D), UINT64_C(0x00027EBC6E708CC4), UINT64_C(0x00046B288961C679)}, {UINT64_C(0x00084942A3FFE4F7), UINT64_C(0x00039331DB0EFDD2), UINT64_C(0x0003BC5E8D64D32A), UINT64_C(0x0002F14504F246A2), UINT64_C(0x0005D0B970850BFE), UINT64_C(0x000DDBFD50853040), UINT64_C(0x00053F2BB46E95D8), UINT64_C(0x0006217469553610), UINT64_C(0x0001AA60880F4C92), UINT64_C(0x0001BB031C7CDCAD)}}, {{UINT64_C(0x00043577337ED415), UINT64_C(0x0001168CF60C5FCC), UINT64_C(0x0004F7F95837B2D6), UINT64_C(0x00056BA25D4F23A3), UINT64_C(0x0005C14460B0F4E0), UINT64_C(0x0002B00069045903), UINT64_C(0x00004B0C5A39B1AA), UINT64_C(0x0003FBB985D77FA8), UINT64_C(0x00049239EE5946D9), UINT64_C(0x00057387CD1049E9)}, {UINT64_C(0x000B952D15EE6357), UINT64_C(0x0002DB9A48C1B600), UINT64_C(0x0002D0190D4ADBBA), UINT64_C(0x00047F14E4566F50), UINT64_C(0x0001F163D4E86E1D), UINT64_C(0x000C92AF729F469E), UINT64_C(0x00007BD599CC0C16), UINT64_C(0x0006BC2F08CAE272), UINT64_C(0x00047553865EB8CC), UINT64_C(0x0001CE9F42F10932)}, {UINT64_C(0x000BCE2DA7F5610F), UINT64_C(0x0003B36D325EE2A8), UINT64_C(0x000726B58068AB44), UINT64_C(0x0004A0F44270ED1F), UINT64_C(0x00071571152CE6BE), UINT64_C(0x000565993B17157C), UINT64_C(0x00039843697248A3), UINT64_C(0x00051EDAD623656A), UINT64_C(0x0004E89907281D95), UINT64_C(0x0003514F571877C2)}}, }, { {{UINT64_C(0x000D2A3121F83A1D), UINT64_C(0x0002DA330B022D82), UINT64_C(0x00003B3EAB80FFD8), UINT64_C(0x00015D727FF11EA8), UINT64_C(0x000645E52899FB8C), UINT64_C(0x000C944BAFE40831), UINT64_C(0x0006EFC60BCB700D), UINT64_C(0x00049C8983D2F665), UINT64_C(0x00001D4D70FCC0D3), UINT64_C(0x0004D6ED234BFC0D)}, {UINT64_C(0x000B1C9F041D3F61), UINT64_C(0x0005D2FDE93EC1F5), UINT64_C(0x00076737DC0F744C), UINT64_C(0x00042230534666BE), UINT64_C(0x0003404E863515DA), UINT64_C(0x000C7436CCE8B116), UINT64_C(0x00005EA392999318), UINT64_C(0x0007905E98068490), UINT64_C(0x00010A805AD32FCC), UINT64_C(0x000023B7CE895D07)}, {UINT64_C(0x0003EFFB814E2197), UINT64_C(0x0000852A305BE11B), UINT64_C(0x00048396DD06C432), UINT64_C(0x000540D5C5935D99), UINT64_C(0x00035AEAD67940BE), UINT64_C(0x0008CA943925F507), UINT64_C(0x0006F245BE658554), UINT64_C(0x0000B5E763A6E0C5), UINT64_C(0x0002E795E93C44D8), UINT64_C(0x0006CC4B88C475C6)}}, {{UINT64_C(0x000C200B8B331922), UINT64_C(0x00004683E419F734), UINT64_C(0x0002C7E001FCD0C0), UINT64_C(0x0001479FD1FC8DF1), UINT64_C(0x000577647BF78E53), UINT64_C(0x0003AC981A6CC35C), UINT64_C(0x0002966643DF7AFF), UINT64_C(0x000673621471EFDC), UINT64_C(0x0007BF256881F54F), UINT64_C(0x000487F29B6DB344)}, {UINT64_C(0x00085CDB9629C5F6), UINT64_C(0x000604C1DBE92B8A), UINT64_C(0x0003BBE72A278D3D), UINT64_C(0x000767DE37996D84), UINT64_C(0x0000DFE0B1187EE4), UINT64_C(0x0004DE0ADC2458BC), UINT64_C(0x00003CCCC4C709E4), UINT64_C(0x00045A74FFEA1E3D), UINT64_C(0x00015B4EE2B662A6), UINT64_C(0x000181EFB7AE8968)}, {UINT64_C(0x0009F028A704590F), UINT64_C(0x0005F2BA1A40E68C), UINT64_C(0x0001F65FEC8D20C2), UINT64_C(0x00020C79DAFC49DD), UINT64_C(0x0007EEFCC164D9D7), UINT64_C(0x000D456B93390094), UINT64_C(0x000185EADF32B9D0), UINT64_C(0x0004ED0525883825), UINT64_C(0x0007B8A0AEB853AE), UINT64_C(0x0000D9511CB1B787)}}, {{UINT64_C(0x000CDF0DB3694899), UINT64_C(0x00023B940D7CF533), UINT64_C(0x0006B84827681417), UINT64_C(0x0006F9B4F46F0E96), UINT64_C(0x000515DA23E8AC6B), UINT64_C(0x00095847795BB758), UINT64_C(0x0003F4CCA41B8228), UINT64_C(0x0006186E4E9093AC), UINT64_C(0x00077309478974B1), UINT64_C(0x0005B4F6C6F8FEFA)}, {UINT64_C(0x0001443F74773B5C), UINT64_C(0x00063FFF59FDE6B6), UINT64_C(0x0001F16F0B9EEC52), UINT64_C(0x000051FCDC5A3486), UINT64_C(0x0003DB748AF8F2E5), UINT64_C(0x000B5783C6DC2D30), UINT64_C(0x0002DAB21D8CC130), UINT64_C(0x0005F25B88234552), UINT64_C(0x0004FF796B7D456D), UINT64_C(0x0006080EB1FC5C27)}, {UINT64_C(0x000A9AA635E4EF7D), UINT64_C(0x000108EC067C691F), UINT64_C(0x00004D22357BAE6A), UINT64_C(0x000337A3327BC99C), UINT64_C(0x0000A68F7BADF67C), UINT64_C(0x000AC18F7DFA19B2), UINT64_C(0x0005C678FBE8EB52), UINT64_C(0x0001D8F2C4E8BB6E), UINT64_C(0x0000DA44F24F2716), UINT64_C(0x00030A3DE2A3A421)}}, {{UINT64_C(0x000F5BCB25CF4FB5), UINT64_C(0x00037F879FD958AF), UINT64_C(0x0001AD917C6DE29F), UINT64_C(0x000162FF07F36826), UINT64_C(0x00067919212F631A), UINT64_C(0x000BFD3793A355FB), UINT64_C(0x0005755B1ABED696), UINT64_C(0x000144F83C26744A), UINT64_C(0x0004BCAD8857D421), UINT64_C(0x00016302D4EADAE5)}, {UINT64_C(0x0007E6C00E672C8D), UINT64_C(0x00038DE62F3282ED), UINT64_C(0x0004B4D7588B4274), UINT64_C(0x0000DE769DFD42DE), UINT64_C(0x00031736034810B0), UINT64_C(0x00042D1D02CFDE19), UINT64_C(0x0003D5001378BC45), UINT64_C(0x00063303C6FB6962), UINT64_C(0x00033FF632B306CC), UINT64_C(0x0007FCD2720CF3DD)}, {UINT64_C(0x0000D3E05FE45941), UINT64_C(0x0001EE7BCFC54EA8), UINT64_C(0x00073BF8104FCCCD), UINT64_C(0x0006E128F079E6C4), UINT64_C(0x0006FE2C64E04ED7), UINT64_C(0x0007C13D9F8F4E55), UINT64_C(0x00073AA7BE299340), UINT64_C(0x00065D2152375AFE), UINT64_C(0x000389EB4ABE5495), UINT64_C(0x00044A45040B455F)}}, {{UINT64_C(0x000A15B31548EDEF), UINT64_C(0x0004BE66E39BFE46), UINT64_C(0x0000A4F48F221DE4), UINT64_C(0x0003D1DB970835AB), UINT64_C(0x00031933E3DE57CB), UINT64_C(0x000978578FEEE453), UINT64_C(0x0002C30F392DC6A7), UINT64_C(0x0000C948C85AE181), UINT64_C(0x000200560FFD6366), UINT64_C(0x0001230F26094A57)}, {UINT64_C(0x00071F959A90337C), UINT64_C(0x000208552F478DC7), UINT64_C(0x0005788AC4EBB26B), UINT64_C(0x0002B9FBF27C3470), UINT64_C(0x00004FF4C8B12365), UINT64_C(0x0006D2BCE6204D47), UINT64_C(0x0001E8AAA0A8023E), UINT64_C(0x000797C24FED76B7), UINT64_C(0x00026173EF326E46), UINT64_C(0x0006133FB5B5B999)}, {UINT64_C(0x00012BC7A048AF37), UINT64_C(0x0000FD0301EC2E53), UINT64_C(0x0002C070DD9CD038), UINT64_C(0x0007F2EFAC327986), UINT64_C(0x00026CE631FC9FEF), UINT64_C(0x000277F1E2BB1725), UINT64_C(0x00010E40E88E18E3), UINT64_C(0x00039310E1B26218), UINT64_C(0x0003985E2F2FBFEB), UINT64_C(0x000268DC44A02ADF)}}, {{UINT64_C(0x000DEA78EADAEEC1), UINT64_C(0x0003DB0BE77C03ED), UINT64_C(0x0003EDF67A38D25B), UINT64_C(0x0005019B365A8A38), UINT64_C(0x0005197BFB9FF59C), UINT64_C(0x00083D36F0A5A16A), UINT64_C(0x0005152E257CA37F), UINT64_C(0x0006A2BEE626DAA6), UINT64_C(0x00033AE983C20B72), UINT64_C(0x0004D9B705EAAD1C)}, {UINT64_C(0x000874E06D7B5C24), UINT64_C(0x00064390163770B6), UINT64_C(0x0005698AF98FF650), UINT64_C(0x0005B8EBB355D77A), UINT64_C(0x0000AE7C70732C73), UINT64_C(0x000E19D3D98FABDD), UINT64_C(0x00079DEDA37DA75D), UINT64_C(0x00004B710B1674C5), UINT64_C(0x00040619A55A5DEF), UINT64_C(0x000779DCC6F44704)}, {UINT64_C(0x000504F35721DEFB), UINT64_C(0x0004A3C0C7E7284A), UINT64_C(0x0002EB38ABD01FCB), UINT64_C(0x0004CE3322295DF1), UINT64_C(0x00031DB27F499399), UINT64_C(0x00018AABC6E0C983), UINT64_C(0x0000AF5EF9B55762), UINT64_C(0x0005322B53AAAACA), UINT64_C(0x0007762A5164BC03), UINT64_C(0x0007F960E2AF4304)}}, {{UINT64_C(0x0004FE2209D880A9), UINT64_C(0x0003B71CEB098483), UINT64_C(0x0006F0A21F537C16), UINT64_C(0x0002CF6EB8FF1658), UINT64_C(0x0005494E50B58CA1), UINT64_C(0x0004438EA9A0A3E8), UINT64_C(0x0003E7417D2F3188), UINT64_C(0x0006C48A60BD0440), UINT64_C(0x0006AD71A29DB30C), UINT64_C(0x0001AC8E5A50D6AA)}, {UINT64_C(0x000C73B8887E050B), UINT64_C(0x0003885D576CDAD0), UINT64_C(0x0004A689C810C4FB), UINT64_C(0x000694592DB886B1), UINT64_C(0x00063944B776872E), UINT64_C(0x000AA2F2A130E0FC), UINT64_C(0x00008DD2C544EA7E), UINT64_C(0x000210E4D0FC740D), UINT64_C(0x0001E222C1CAA921), UINT64_C(0x00071E84DB222363)}, {UINT64_C(0x0006F9367DF1009D), UINT64_C(0x0006CBC0A10D4FD2), UINT64_C(0x000610447BE01C43), UINT64_C(0x0000F58331DDCDD9), UINT64_C(0x00041CDDB6D56BDD), UINT64_C(0x00011776CAFBC4AC), UINT64_C(0x000374788FA28EB8), UINT64_C(0x0000E99592B60098), UINT64_C(0x0001448FF0C15C26), UINT64_C(0x0006667044FC0ECF)}}, {{UINT64_C(0x0009F8C30043EA50), UINT64_C(0x000112BE297E6871), UINT64_C(0x0002F61BC12D1B08), UINT64_C(0x00022B45B0DF4504), UINT64_C(0x0004A8355FC774A3), UINT64_C(0x0009F24537D203A0), UINT64_C(0x0000F00050E3A31C), UINT64_C(0x00060D19D82588C3), UINT64_C(0x00035A326B654F92), UINT64_C(0x00069365E53B389A)}, {UINT64_C(0x00050A34F9BCA230), UINT64_C(0x000768F7A199C03D), UINT64_C(0x000204C0AADFC49C), UINT64_C(0x00025CAC2599062C), UINT64_C(0x00077F593DCC6037), UINT64_C(0x000D311959EB3E67), UINT64_C(0x000092B89479AFDF), UINT64_C(0x0005B67AD89C4F22), UINT64_C(0x0003626EAED6B185), UINT64_C(0x00067832EC55B3C6)}, {UINT64_C(0x000C1593CEFCECC1), UINT64_C(0x0000A4A2957784F8), UINT64_C(0x00026ABBB5309788), UINT64_C(0x00074F0F59146003), UINT64_C(0x000387E735C3C669), UINT64_C(0x000593E8E4DEBA0C), UINT64_C(0x0002E24A801D3568), UINT64_C(0x0005256747685BDB), UINT64_C(0x000013566542C53E), UINT64_C(0x00048E7E32CD1AD3)}}, {{UINT64_C(0x0007D4DBA5C3CC2A), UINT64_C(0x0005759B789AA3A3), UINT64_C(0x0006F22E17510467), UINT64_C(0x00040F3252F7511B), UINT64_C(0x000528AEF4908B9A), UINT64_C(0x000B8EAE9E5BCEE1), UINT64_C(0x0006942B0FECB4DD), UINT64_C(0x00033E6A3D8BD112), UINT64_C(0x0004CC49DD25E389), UINT64_C(0x000445C577D06042)}, {UINT64_C(0x0007C40A37BEFD01), UINT64_C(0x000730CA5186A539), UINT64_C(0x0005C36B6EDBB6B6), UINT64_C(0x0004CE95B4DA9CD6), UINT64_C(0x0002E2AD0BAECB4F), UINT64_C(0x0009E94D245C6F84), UINT64_C(0x00073894E220EBEA), UINT64_C(0x0001E10C1571B9C0), UINT64_C(0x0002A750557B17A9), UINT64_C(0x0002F468854DE098)}, {UINT64_C(0x0006D012DA4D1F3B), UINT64_C(0x000065FA17AAA85D), UINT64_C(0x000126D6EC4C4597), UINT64_C(0x00062F36E6EDE0C7), UINT64_C(0x0000B9419F244E94), UINT64_C(0x00089B6AA6EA58BD), UINT64_C(0x00067307208BE7E2), UINT64_C(0x00065FD90ED40D58), UINT64_C(0x0002493AE4798B62), UINT64_C(0x0005C947F9A199F6)}}, {{UINT64_C(0x000C9CA5529BDF08), UINT64_C(0x0006474FD3A96C71), UINT64_C(0x00032737E53C8C69), UINT64_C(0x0007F1A1D1EDAE8C), UINT64_C(0x0007E44ED2C4B89C), UINT64_C(0x00039AC19F0C716A), UINT64_C(0x00041F9F39F47EBF), UINT64_C(0x0007591E503A89BC), UINT64_C(0x0007E4B3B038BA83), UINT64_C(0x0002D77047632306)}, {UINT64_C(0x000E44217D6E3B7F), UINT64_C(0x00025C90B5976AEE), UINT64_C(0x0001F4EF248E8C6D), UINT64_C(0x0006AF1D1868F663), UINT64_C(0x000038AC35E161DE), UINT64_C(0x0006647522C34933), UINT64_C(0x0005FBBBB3C26A48), UINT64_C(0x000226EA1BC6B125), UINT64_C(0x000061EA27678E69), UINT64_C(0x0007204A98E37606)}, {UINT64_C(0x000782E217103AF0), UINT64_C(0x0005F858671BD8FE), UINT64_C(0x0004929B9196468A), UINT64_C(0x0004EA71EE645DFD), UINT64_C(0x00044AAB314B679F), UINT64_C(0x0000B22073C603B6), UINT64_C(0x0004B1C1D90F53B3), UINT64_C(0x0000F1B4FA3F48F3), UINT64_C(0x000128359405A8D0), UINT64_C(0x00007D5F6710B1AF)}}, {{UINT64_C(0x000306DD32F8B559), UINT64_C(0x0007C415E4D67E45), UINT64_C(0x00056A49257A4333), UINT64_C(0x00018F1224742086), UINT64_C(0x000542B30DD86DDC), UINT64_C(0x0001645F932983EF), UINT64_C(0x0007213FC2770A7F), UINT64_C(0x0005126F605B77F9), UINT64_C(0x00041CEEB5B0DE9E), UINT64_C(0x0003C305D884EC37)}, {UINT64_C(0x000769826ECC1E95), UINT64_C(0x00058DF57466B622), UINT64_C(0x0002788C60F1A684), UINT64_C(0x00010C568F251DA8), UINT64_C(0x00075B0E37E05118), UINT64_C(0x000165CB8643BF09), UINT64_C(0x0006155F1C1AEE2D), UINT64_C(0x0006CF1B4EF316A8), UINT64_C(0x000061E8F6B5FB5F), UINT64_C(0x0000893F44E63C16)}, {UINT64_C(0x000CDF32871DF406), UINT64_C(0x00078311BD087EFE), UINT64_C(0x00067873B3557364), UINT64_C(0x000636BE32D35E5A), UINT64_C(0x0006195801D0D6BB), UINT64_C(0x0002735B3B4EB70E), UINT64_C(0x000363C1BD256DF7), UINT64_C(0x0004C37F9069C166), UINT64_C(0x000706B70FC69919), UINT64_C(0x0005402BC0A1784B)}}, {{UINT64_C(0x000C3C3A75895A83), UINT64_C(0x0002AF5E20173369), UINT64_C(0x00016058BB908BA2), UINT64_C(0x00006422CFBDCBA5), UINT64_C(0x0003532C8DAA68D7), UINT64_C(0x0001718B0498E976), UINT64_C(0x0001037F828D1CB5), UINT64_C(0x0004ADFBAC138E46), UINT64_C(0x000264F5D9AA2DBF), UINT64_C(0x000661862DCF83A4)}, {UINT64_C(0x000B4401A412DE9C), UINT64_C(0x0004C413E9A0630F), UINT64_C(0x0001E24FC9E6E3F3), UINT64_C(0x00077A8E0FD8D9C4), UINT64_C(0x0001BC33A8CA2E97), UINT64_C(0x0008030A67A41045), UINT64_C(0x00039F744B6ECFD1), UINT64_C(0x00072432DDCFFE36), UINT64_C(0x0007DD91D0BBE6D8), UINT64_C(0x000078AB20170916)}, {UINT64_C(0x000498F6F8BD5A53), UINT64_C(0x0000D1C46916C0CF), UINT64_C(0x0005F54960938342), UINT64_C(0x000447AA84AB04D2), UINT64_C(0x000724A5EB675B6E), UINT64_C(0x000EA0E318325878), UINT64_C(0x00066B113C4AA80B), UINT64_C(0x000253461B0BF6BE), UINT64_C(0x0004DB77BC24C66A), UINT64_C(0x0001AC7EDE0A50F4)}}, {{UINT64_C(0x00044A5984167BC5), UINT64_C(0x0003C2E2EF77D4C4), UINT64_C(0x0000B0E5F803C46E), UINT64_C(0x00036C49B84AF0A1), UINT64_C(0x0000C05A8C33C661), UINT64_C(0x00096D04429DE51D), UINT64_C(0x0001CD77226DEF8B), UINT64_C(0x0005AF209A481396), UINT64_C(0x0004DD604CDFFC41), UINT64_C(0x0000DE719B2B2635)}, {UINT64_C(0x00038429D5339495), UINT64_C(0x00059B744E7203F8), UINT64_C(0x00054083470E63F2), UINT64_C(0x00020168D78F5F9F), UINT64_C(0x00060B7BBD5EEA39), UINT64_C(0x0006C9580366396A), UINT64_C(0x00047B4DABFD7116), UINT64_C(0x00007CB92CE4EB12), UINT64_C(0x000171CBBFFF880B), UINT64_C(0x00032AEA49629D50)}, {UINT64_C(0x0002327365257623), UINT64_C(0x0002901F27D0F318), UINT64_C(0x0007EEC27D093A11), UINT64_C(0x0000C431CC4582E3), UINT64_C(0x00032FC5091EC7C3), UINT64_C(0x0009F1205282C2B4), UINT64_C(0x0006A99198CE7309), UINT64_C(0x000181D401A1E0EB), UINT64_C(0x00000BFBAE47E38F), UINT64_C(0x0001B85974A394FD)}}, {{UINT64_C(0x00003D98BB92DE0A), UINT64_C(0x00012FC6BEE98813), UINT64_C(0x0003C727A73BB1DB), UINT64_C(0x000594A927D8CBF4), UINT64_C(0x0002F609AA953DBA), UINT64_C(0x000BFB4CF73D47D7), UINT64_C(0x0006F4AC381AE6B8), UINT64_C(0x0000D2B0C81B4EFB), UINT64_C(0x0005455F0C358D6D), UINT64_C(0x0000F023E512DEEE)}, {UINT64_C(0x00069BD7FC6E5CF7), UINT64_C(0x0002D72F5A73331E), UINT64_C(0x00030CAB8A2D6416), UINT64_C(0x0001594D14FA77F2), UINT64_C(0x000631869D3D020D), UINT64_C(0x00002E08CCBFD994), UINT64_C(0x00046F03B754307B), UINT64_C(0x00067146A1F6ED5B), UINT64_C(0x0000B02B94197421), UINT64_C(0x000751016B4BD0BC)}, {UINT64_C(0x000E6EFCC4EDE7FE), UINT64_C(0x0004ADD3198030A1), UINT64_C(0x00047734A17278D8), UINT64_C(0x0000F92F45E7CE85), UINT64_C(0x0003F6D367D00160), UINT64_C(0x000E13DFE99432BE), UINT64_C(0x000187A2AF6E1412), UINT64_C(0x0006A191CEED3ACE), UINT64_C(0x00058147D849A2BA), UINT64_C(0x0001BC9A9B916364)}}, {{UINT64_C(0x00000199D348C776), UINT64_C(0x00027B8B4CFED803), UINT64_C(0x0005BF0AB8D43407), UINT64_C(0x0007B10CAF37EC50), UINT64_C(0x00033B53F6C30777), UINT64_C(0x000E87F6475537F5), UINT64_C(0x00001D4A155ABBCB), UINT64_C(0x0003CB17A764EA6A), UINT64_C(0x00013523EE4327E1), UINT64_C(0x000753B39ECFEACE)}, {UINT64_C(0x00042F46C4C2845F), UINT64_C(0x000664A9551B6369), UINT64_C(0x0000C9CC8349A824), UINT64_C(0x000574459D0ED534), UINT64_C(0x0001A18730E01DA7), UINT64_C(0x00082CA89B83E7F8), UINT64_C(0x0006AEE1395800DC), UINT64_C(0x00020195766F2D74), UINT64_C(0x00027864BA955A16), UINT64_C(0x00056478A31843AB)}, {UINT64_C(0x0003D3FE4F04AC87), UINT64_C(0x0002E5E52E60EFDD), UINT64_C(0x00060730A36559C5), UINT64_C(0x0006A427612AD123), UINT64_C(0x0003A36F820D7FE6), UINT64_C(0x00089AD1F5C273D7), UINT64_C(0x0002D21C3309431D), UINT64_C(0x00079250B4AEAD6F), UINT64_C(0x0003F475A1168016), UINT64_C(0x000092AD39E48D5D)}}, {{UINT64_C(0x000C1CB7EACBBE5F), UINT64_C(0x0004783A6E7DF912), UINT64_C(0x0005830AE2E3AE77), UINT64_C(0x00020AEE82D43F9A), UINT64_C(0x0001F837EDBC8314), UINT64_C(0x000A1D23C74DA695), UINT64_C(0x0005E6AEAC19A780), UINT64_C(0x0007852725690C30), UINT64_C(0x0006807B0774F532), UINT64_C(0x00004DB69C9F9C33)}, {UINT64_C(0x000F824529D58522), UINT64_C(0x000241E1A2206190), UINT64_C(0x0007C5225BAD2B57), UINT64_C(0x00067F90115B53BF), UINT64_C(0x00066BD04E108B4E), UINT64_C(0x00033F9F0CC81B9C), UINT64_C(0x0003C0A7A3FFBC22), UINT64_C(0x0002670D5CC34121), UINT64_C(0x0002CF6BBD4DBD78), UINT64_C(0x000644ED07DFB2C5)}, {UINT64_C(0x0002A7ACB34B8F5D), UINT64_C(0x00048474BD048B62), UINT64_C(0x0004D4C75CE04805), UINT64_C(0x0001DB57B655BA7F), UINT64_C(0x0007755297FAB4DC), UINT64_C(0x000CBABD48415893), UINT64_C(0x0006810FE1CA637E), UINT64_C(0x0000F699DDD6AC1F), UINT64_C(0x000451C6EABA4EA0), UINT64_C(0x0007E1DB71EC0558)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj_ed_eone.op3 * https://www.hyperelliptic.org/EFD/g1p/auto-code/twisted/extended-1/doubling/dbl-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ /* set pointers for Edwards curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(t0, X); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(t1, Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(t2, Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(t3, t2, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(X3, X, Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(Y3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(T3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(Z3, T3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(Y3, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t2, Y3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t3, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, Z3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, Z3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Z3, t2, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, Y3, t3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed_ed_eone.op3 * https://hyperelliptic.org/EFD/g1p/auto-code/twisted/extended/addition/madd-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ const limb_t *d = const_d; /* set pointers for Edwards curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *T1 = Q->T; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *T2 = P->T; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *T3 = R->T; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t2, d, T2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t2, T1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(X3, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(Y3, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t3, T3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(T3, t3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(t3, Z1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(Z3, Z1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t1, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, T3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, t3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, T3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Z3, Z3, t3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj_ed_eone.op3 * https://hyperelliptic.org/EFD/g1p/auto-code/twisted/extended/addition/add-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ const limb_t *d = const_d; /* set pointers for Edwards curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *T1 = Q->T; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *T2 = P->T; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *T3 = R->T; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t2, d, T2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t2, T1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t3, Z1, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(X3, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(Y3, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(Z3, T3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(T3, Z3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(Z3, t3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(t3, t3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t1, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, T3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, t3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, T3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Z3, Z3, t3); } /*- * from P projective Edwards to Q projective legacy: Q=P OK * Autogenerated: op3/edwards2legacy_gost.op3 * https://tools.ietf.org/html/rfc7836#section-5.2 */ static void point_edwards2legacy(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0; /* constants */ const limb_t *T = const_T; const limb_t *S = const_S; const limb_t *X1 = P->X; const limb_t *Y1 = P->Y; const limb_t *Z1 = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(T3, Z1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t0, Z1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, S, T3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, Z1, T3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Z3, X1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t0, t0, T); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(t0, T3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, X1, t0); } /*- * from P affine legacy to Q projective Edwards: Q=P not OK * Autogenerated: op3/legacy2edwards_gost.op3 * https://tools.ietf.org/html/rfc7836#section-5.2 */ static void point_legacy2edwards(pt_prj_t *Q, const pt_aff_t *P) { /* constants */ const limb_t *T = const_T; const limb_t *S = const_S; const limb_t *X1 = P->X; const limb_t *Y1 = P->Y; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(T3, X1, T); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(Y3, T3, S); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, T3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Z3, Y1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(T3, T3, S); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, Y1, T3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(Z3, Z3); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; /* move from legacy affine to Edwards projective */ point_legacy2edwards(&precomp[0], P); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[64], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 64) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[103], const unsigned char in[64]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 102; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[513], const unsigned char in[64]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 513; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[64], const unsigned char b[64], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[513] = {0}; int8_t bnaf[513] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 512; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.T, Q.T); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.T, &precomp[d].T); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.T, Q.T); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.T, &lut_cmb[0][d].T); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.T); fe_copy(Q.Z, const_one); } if (flipped) { /* correct sign */ fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.T, Q.T); } /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetC_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[64], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[102] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.T, diff, Q.T, precomp[j].T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 101; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.T, diff, lut.T, precomp[j].T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(out->X, lut.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(out->T, lut.T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(lut.X, is_neg, lut.X, out->X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(lut.T, is_neg, lut.T, out->T); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(lut.X, precomp[0].X); fe_copy(lut.Y, precomp[0].Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(lut.T, precomp[0].T); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.T, scalar[0] & 1, lut.T, Q.T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); point_double(&Q, &Q); point_double(&Q, &Q); /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetC_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[64]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.T); fe_copy(Q.Z, const_one); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 14; i >= 0; i--) { for (j = 0; i != 14 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 8; j++) { if (j * 15 + i > 102) continue; d = rnaf[j * 15 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.T, diff, lut.T, lut_cmb[j][k].T); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(out->X, lut.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(out->T, lut.T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(lut.X, is_neg, lut.X, out->X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(lut.T, is_neg, lut.T, out->T); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(lut.X, lut_cmb[0][0].X); fe_copy(lut.Y, lut_cmb[0][0].Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(lut.T, lut_cmb[0][0].T); point_add_mixed(&R, &Q, &lut); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.T, scalar[0] & 1, R.T, Q.T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetC_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[64], unsigned char outy[64], const unsigned char a[64], const unsigned char b[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes(P.Y, iny); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes(P.Y, iny); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[64] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_tc26_gost_3410_2012_512_paramSetC( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(n, b_n, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_tc26_gost_3410_2012_512_paramSetC(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_tc26_gost_3410_2012_512_paramSetC(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 64) != 64) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #else /* __SIZEOF_INT128__ */ #include #include #define LIMB_BITS 32 #define LIMB_CNT 23 /* Field elements */ typedef uint32_t fe_t[LIMB_CNT]; typedef uint32_t limb_t; #ifdef OPENSSL_NO_ASM #define FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETC_NO_ASM #endif #define fe_copy(d, s) memcpy(d, s, sizeof(fe_t)) #define fe_set_zero(d) memset(d, 0, sizeof(fe_t)) #define fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(c, a, b) \ fiat_id_tc26_gost_3410_2012_512_paramSetC_add(c, a, b); \ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry(c, c) #define fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(c, a, b) \ fiat_id_tc26_gost_3410_2012_512_paramSetC_sub(c, a, b); \ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry(c, c) /* Projective points */ typedef struct { fe_t X; fe_t Y; fe_t T; fe_t Z; } pt_prj_t; /* Affine points */ typedef struct { fe_t X; fe_t Y; fe_t T; } pt_aff_t; /* BEGIN verbatim fiat code https://github.com/mit-plv/fiat-crypto */ /*- * MIT License * * Copyright (c) 2020 the fiat-crypto authors (see the AUTHORS file) * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal * in the Software without restriction, including without limitation the rights * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the Software is * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * 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. */ /* Autogenerated: unsaturated_solinas --static --use-value-barrier id_tc26_gost_3410_2012_512_paramSetC 32 '(auto)' '2^512 - 569' */ /* curve description: id_tc26_gost_3410_2012_512_paramSetC */ /* machine_wordsize = 32 (from "32") */ /* requested operations: (all) */ /* n = 23 (from "(auto)") */ /* s-c = 2^512 - [(1, 569)] (from "2^512 - 569") */ /* tight_bounds_multiplier = 1 (from "") */ /* */ /* Computed values: */ /* carry_chain = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 0, 1] */ /* eval z = z[0] + (z[1] << 23) + (z[2] << 45) + (z[3] << 67) + (z[4] << 90) + (z[5] << 112) + (z[6] << 134) + (z[7] << 156) + (z[8] << 179) + (z[9] << 201) + (z[10] << 223) + (z[11] << 245) + (z[12] << 0x10c) + (z[13] << 0x122) + (z[14] << 0x138) + (z[15] << 0x14e) + (z[16] << 0x165) + (z[17] << 0x17b) + (z[18] << 0x191) + (z[19] << 0x1a7) + (z[20] << 0x1be) + (z[21] << 0x1d4) + (z[22] << 0x1ea) */ /* bytes_eval z = z[0] + (z[1] << 8) + (z[2] << 16) + (z[3] << 24) + (z[4] << 32) + (z[5] << 40) + (z[6] << 48) + (z[7] << 56) + (z[8] << 64) + (z[9] << 72) + (z[10] << 80) + (z[11] << 88) + (z[12] << 96) + (z[13] << 104) + (z[14] << 112) + (z[15] << 120) + (z[16] << 128) + (z[17] << 136) + (z[18] << 144) + (z[19] << 152) + (z[20] << 160) + (z[21] << 168) + (z[22] << 176) + (z[23] << 184) + (z[24] << 192) + (z[25] << 200) + (z[26] << 208) + (z[27] << 216) + (z[28] << 224) + (z[29] << 232) + (z[30] << 240) + (z[31] << 248) + (z[32] << 256) + (z[33] << 0x108) + (z[34] << 0x110) + (z[35] << 0x118) + (z[36] << 0x120) + (z[37] << 0x128) + (z[38] << 0x130) + (z[39] << 0x138) + (z[40] << 0x140) + (z[41] << 0x148) + (z[42] << 0x150) + (z[43] << 0x158) + (z[44] << 0x160) + (z[45] << 0x168) + (z[46] << 0x170) + (z[47] << 0x178) + (z[48] << 0x180) + (z[49] << 0x188) + (z[50] << 0x190) + (z[51] << 0x198) + (z[52] << 0x1a0) + (z[53] << 0x1a8) + (z[54] << 0x1b0) + (z[55] << 0x1b8) + (z[56] << 0x1c0) + (z[57] << 0x1c8) + (z[58] << 0x1d0) + (z[59] << 0x1d8) + (z[60] << 0x1e0) + (z[61] << 0x1e8) + (z[62] << 0x1f0) + (z[63] << 0x1f8) */ /* balance = [0xfffb8e, 0x7ffffe, 0x7ffffe, 0xfffffe, 0x7ffffe, 0x7ffffe, 0x7ffffe, 0xfffffe, 0x7ffffe, 0x7ffffe, 0x7ffffe, 0xfffffe, 0x7ffffe, 0x7ffffe, 0x7ffffe, 0xfffffe, 0x7ffffe, 0x7ffffe, 0x7ffffe, 0xfffffe, 0x7ffffe, 0x7ffffe, 0x7ffffe] */ #include typedef unsigned char fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1; typedef signed char fiat_id_tc26_gost_3410_2012_512_paramSetC_int1; #if (-1 & 3) != 3 #error "This code only works on a two's complement system" #endif #if !defined(FIAT_ID_TC26_GOST_3410_2012_512_PARAMSETC_NO_ASM) && \ (defined(__GNUC__) || defined(__clang__)) static __inline__ uint32_t fiat_id_tc26_gost_3410_2012_512_paramSetC_value_barrier_u32(uint32_t a) { __asm__("" : "+r"(a) : /* no inputs */); return a; } #else #define fiat_id_tc26_gost_3410_2012_512_paramSetC_value_barrier_u32(x) (x) #endif /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^22 * out2 = ⌊(arg1 + arg2 + arg3) / 2^22⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x3fffff] * arg3: [0x0 ~> 0x3fffff] * Output Bounds: * out1: [0x0 ~> 0x3fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint32_t x1; uint32_t x2; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT32_C(0x3fffff)); x3 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x1 >> 22); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^22 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^22⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x3fffff] * arg3: [0x0 ~> 0x3fffff] * Output Bounds: * out1: [0x0 ~> 0x3fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, uint32_t arg2, uint32_t arg3) { int32_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetC_int1 x2; uint32_t x3; x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_int1)(x1 >> 22); x3 = (x1 & UINT32_C(0x3fffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u23 is an addition with carry. * Postconditions: * out1 = (arg1 + arg2 + arg3) mod 2^23 * out2 = ⌊(arg1 + arg2 + arg3) / 2^23⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7fffff] * arg3: [0x0 ~> 0x7fffff] * Output Bounds: * out1: [0x0 ~> 0x7fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u23( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, uint32_t arg2, uint32_t arg3) { uint32_t x1; uint32_t x2; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x3; x1 = ((arg1 + arg2) + arg3); x2 = (x1 & UINT32_C(0x7fffff)); x3 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x1 >> 23); *out1 = x2; *out2 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u23 is a subtraction with borrow. * Postconditions: * out1 = (-arg1 + arg2 + -arg3) mod 2^23 * out2 = -⌊(-arg1 + arg2 + -arg3) / 2^23⌋ * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0x7fffff] * arg3: [0x0 ~> 0x7fffff] * Output Bounds: * out1: [0x0 ~> 0x7fffff] * out2: [0x0 ~> 0x1] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u23( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 *out2, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, uint32_t arg2, uint32_t arg3) { int32_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetC_int1 x2; uint32_t x3; x1 = ((int32_t)(arg2 - arg1) - (int32_t)arg3); x2 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_int1)(x1 >> 23); x3 = (x1 & UINT32_C(0x7fffff)); *out1 = x3; *out2 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(0x0 - x2); } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32 is a single-word conditional move. * Postconditions: * out1 = (if arg1 = 0 then arg2 else arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [0x0 ~> 0xffffffff] * arg3: [0x0 ~> 0xffffffff] * Output Bounds: * out1: [0x0 ~> 0xffffffff] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( uint32_t *out1, fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, uint32_t arg2, uint32_t arg3) { fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x1; uint32_t x2; uint32_t x3; x1 = (!(!arg1)); x2 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_int1)(0x0 - x1) & UINT32_C(0xffffffff)); x3 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_value_barrier_u32(x2) & arg3) | (fiat_id_tc26_gost_3410_2012_512_paramSetC_value_barrier_u32((~x2)) & arg2)); *out1 = x3; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul multiplies two field elements and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] * arg2: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] * Output Bounds: * out1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul( uint32_t out1[23], const uint32_t arg1[23], const uint32_t arg2[23]) { uint64_t x1; uint64_t x2; uint64_t x3; uint64_t x4; uint64_t x5; uint64_t x6; uint64_t x7; uint64_t x8; uint64_t x9; uint64_t x10; uint64_t x11; uint64_t x12; uint64_t x13; uint64_t x14; uint64_t x15; uint64_t x16; uint64_t x17; uint64_t x18; uint64_t x19; uint64_t x20; uint64_t x21; uint64_t x22; uint64_t x23; uint64_t x24; uint64_t x25; uint64_t x26; uint64_t x27; uint64_t x28; uint64_t x29; uint64_t x30; uint64_t x31; uint64_t x32; uint64_t x33; uint64_t x34; uint64_t x35; uint64_t x36; uint64_t x37; uint64_t x38; uint64_t x39; uint64_t x40; uint64_t x41; uint64_t x42; uint64_t x43; uint64_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint64_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; uint64_t x110; uint64_t x111; uint64_t x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; uint64_t x129; uint64_t x130; uint64_t x131; uint64_t x132; uint64_t x133; uint64_t x134; uint64_t x135; uint64_t x136; uint64_t x137; uint64_t x138; uint64_t x139; uint64_t x140; uint64_t x141; uint64_t x142; uint64_t x143; uint64_t x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; uint64_t x150; uint64_t x151; uint64_t x152; uint64_t x153; uint64_t x154; uint64_t x155; uint64_t x156; uint64_t x157; uint64_t x158; uint64_t x159; uint64_t x160; uint64_t x161; uint64_t x162; uint64_t x163; uint64_t x164; uint64_t x165; uint64_t x166; uint64_t x167; uint64_t x168; uint64_t x169; uint64_t x170; uint64_t x171; uint64_t x172; uint64_t x173; uint64_t x174; uint64_t x175; uint64_t x176; uint64_t x177; uint64_t x178; uint64_t x179; uint64_t x180; uint64_t x181; uint64_t x182; uint64_t x183; uint64_t x184; uint64_t x185; uint64_t x186; uint64_t x187; uint64_t x188; uint64_t x189; uint64_t x190; uint64_t x191; uint64_t x192; uint64_t x193; uint64_t x194; uint64_t x195; uint64_t x196; uint64_t x197; uint64_t x198; uint64_t x199; uint64_t x200; uint64_t x201; uint64_t x202; uint64_t x203; uint64_t x204; uint64_t x205; uint64_t x206; uint64_t x207; uint64_t x208; uint64_t x209; uint64_t x210; uint64_t x211; uint64_t x212; uint64_t x213; uint64_t x214; uint64_t x215; uint64_t x216; uint64_t x217; uint64_t x218; uint64_t x219; uint64_t x220; uint64_t x221; uint64_t x222; uint64_t x223; uint64_t x224; uint64_t x225; uint64_t x226; uint64_t x227; uint64_t x228; uint64_t x229; uint64_t x230; uint64_t x231; uint64_t x232; uint64_t x233; uint64_t x234; uint64_t x235; uint64_t x236; uint64_t x237; uint64_t x238; uint64_t x239; uint64_t x240; uint64_t x241; uint64_t x242; uint64_t x243; uint64_t x244; uint64_t x245; uint64_t x246; uint64_t x247; uint64_t x248; uint64_t x249; uint64_t x250; uint64_t x251; uint64_t x252; uint64_t x253; uint64_t x254; uint64_t x255; uint64_t x256; uint64_t x257; uint64_t x258; uint64_t x259; uint64_t x260; uint64_t x261; uint64_t x262; uint64_t x263; uint64_t x264; uint64_t x265; uint64_t x266; uint64_t x267; uint64_t x268; uint64_t x269; uint64_t x270; uint64_t x271; uint64_t x272; uint64_t x273; uint64_t x274; uint64_t x275; uint64_t x276; uint64_t x277; uint64_t x278; uint64_t x279; uint64_t x280; uint64_t x281; uint64_t x282; uint64_t x283; uint64_t x284; uint64_t x285; uint64_t x286; uint64_t x287; uint64_t x288; uint64_t x289; uint64_t x290; uint64_t x291; uint64_t x292; uint64_t x293; uint64_t x294; uint64_t x295; uint64_t x296; uint64_t x297; uint64_t x298; uint64_t x299; uint64_t x300; uint64_t x301; uint64_t x302; uint64_t x303; uint64_t x304; uint64_t x305; uint64_t x306; uint64_t x307; uint64_t x308; uint64_t x309; uint64_t x310; uint64_t x311; uint64_t x312; uint64_t x313; uint64_t x314; uint64_t x315; uint64_t x316; uint64_t x317; uint64_t x318; uint64_t x319; uint64_t x320; uint64_t x321; uint64_t x322; uint64_t x323; uint64_t x324; uint64_t x325; uint64_t x326; uint64_t x327; uint64_t x328; uint64_t x329; uint64_t x330; uint64_t x331; uint64_t x332; uint64_t x333; uint64_t x334; uint64_t x335; uint64_t x336; uint64_t x337; uint64_t x338; uint64_t x339; uint64_t x340; uint64_t x341; uint64_t x342; uint64_t x343; uint64_t x344; uint64_t x345; uint64_t x346; uint64_t x347; uint64_t x348; uint64_t x349; uint64_t x350; uint64_t x351; uint64_t x352; uint64_t x353; uint64_t x354; uint64_t x355; uint64_t x356; uint64_t x357; uint64_t x358; uint64_t x359; uint64_t x360; uint64_t x361; uint64_t x362; uint64_t x363; uint64_t x364; uint64_t x365; uint64_t x366; uint64_t x367; uint64_t x368; uint64_t x369; uint64_t x370; uint64_t x371; uint64_t x372; uint64_t x373; uint64_t x374; uint64_t x375; uint64_t x376; uint64_t x377; uint64_t x378; uint64_t x379; uint64_t x380; uint64_t x381; uint64_t x382; uint64_t x383; uint64_t x384; uint64_t x385; uint64_t x386; uint64_t x387; uint64_t x388; uint64_t x389; uint64_t x390; uint64_t x391; uint64_t x392; uint64_t x393; uint64_t x394; uint64_t x395; uint64_t x396; uint64_t x397; uint64_t x398; uint64_t x399; uint64_t x400; uint64_t x401; uint64_t x402; uint64_t x403; uint64_t x404; uint64_t x405; uint64_t x406; uint64_t x407; uint64_t x408; uint64_t x409; uint64_t x410; uint64_t x411; uint64_t x412; uint64_t x413; uint64_t x414; uint64_t x415; uint64_t x416; uint64_t x417; uint64_t x418; uint64_t x419; uint64_t x420; uint64_t x421; uint64_t x422; uint64_t x423; uint64_t x424; uint64_t x425; uint64_t x426; uint64_t x427; uint64_t x428; uint64_t x429; uint64_t x430; uint64_t x431; uint64_t x432; uint64_t x433; uint64_t x434; uint64_t x435; uint64_t x436; uint64_t x437; uint64_t x438; uint64_t x439; uint64_t x440; uint64_t x441; uint64_t x442; uint64_t x443; uint64_t x444; uint64_t x445; uint64_t x446; uint64_t x447; uint64_t x448; uint64_t x449; uint64_t x450; uint64_t x451; uint64_t x452; uint64_t x453; uint64_t x454; uint64_t x455; uint64_t x456; uint64_t x457; uint64_t x458; uint64_t x459; uint64_t x460; uint64_t x461; uint64_t x462; uint64_t x463; uint64_t x464; uint64_t x465; uint64_t x466; uint64_t x467; uint64_t x468; uint64_t x469; uint64_t x470; uint64_t x471; uint64_t x472; uint64_t x473; uint64_t x474; uint64_t x475; uint64_t x476; uint64_t x477; uint64_t x478; uint64_t x479; uint64_t x480; uint64_t x481; uint64_t x482; uint64_t x483; uint64_t x484; uint64_t x485; uint64_t x486; uint64_t x487; uint64_t x488; uint64_t x489; uint64_t x490; uint64_t x491; uint64_t x492; uint64_t x493; uint64_t x494; uint64_t x495; uint64_t x496; uint64_t x497; uint64_t x498; uint64_t x499; uint64_t x500; uint64_t x501; uint64_t x502; uint64_t x503; uint64_t x504; uint64_t x505; uint64_t x506; uint64_t x507; uint64_t x508; uint64_t x509; uint64_t x510; uint64_t x511; uint64_t x512; uint64_t x513; uint64_t x514; uint64_t x515; uint64_t x516; uint64_t x517; uint64_t x518; uint64_t x519; uint64_t x520; uint64_t x521; uint64_t x522; uint64_t x523; uint64_t x524; uint64_t x525; uint64_t x526; uint64_t x527; uint64_t x528; uint64_t x529; uint64_t x530; uint64_t x531; uint32_t x532; uint64_t x533; uint64_t x534; uint64_t x535; uint64_t x536; uint64_t x537; uint64_t x538; uint64_t x539; uint64_t x540; uint64_t x541; uint64_t x542; uint64_t x543; uint64_t x544; uint64_t x545; uint64_t x546; uint64_t x547; uint64_t x548; uint64_t x549; uint64_t x550; uint64_t x551; uint64_t x552; uint64_t x553; uint64_t x554; uint64_t x555; uint64_t x556; uint32_t x557; uint64_t x558; uint64_t x559; uint32_t x560; uint64_t x561; uint64_t x562; uint32_t x563; uint64_t x564; uint64_t x565; uint32_t x566; uint64_t x567; uint64_t x568; uint32_t x569; uint64_t x570; uint64_t x571; uint32_t x572; uint64_t x573; uint64_t x574; uint32_t x575; uint64_t x576; uint64_t x577; uint32_t x578; uint64_t x579; uint64_t x580; uint32_t x581; uint64_t x582; uint64_t x583; uint32_t x584; uint64_t x585; uint64_t x586; uint32_t x587; uint64_t x588; uint64_t x589; uint32_t x590; uint64_t x591; uint64_t x592; uint32_t x593; uint64_t x594; uint64_t x595; uint32_t x596; uint64_t x597; uint64_t x598; uint32_t x599; uint64_t x600; uint64_t x601; uint32_t x602; uint64_t x603; uint64_t x604; uint32_t x605; uint64_t x606; uint64_t x607; uint32_t x608; uint64_t x609; uint64_t x610; uint32_t x611; uint64_t x612; uint64_t x613; uint32_t x614; uint64_t x615; uint64_t x616; uint32_t x617; uint64_t x618; uint32_t x619; uint32_t x620; uint64_t x621; uint64_t x622; uint32_t x623; uint32_t x624; uint32_t x625; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x626; uint32_t x627; uint32_t x628; x1 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[22]))); x2 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[21]))); x3 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[20])) * 0x2)); x4 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[19]))); x5 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[18]))); x6 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[17]))); x7 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[16])) * 0x2)); x8 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[15]))); x9 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[14]))); x10 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[13]))); x11 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[12])) * 0x2)); x12 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[11]))); x13 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[10]))); x14 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[9]))); x15 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[8])) * 0x2)); x16 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[7]))); x17 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[6]))); x18 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[5]))); x19 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[4])) * 0x2)); x20 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[3]))); x21 = (UINT16_C(0x239) * ((uint64_t)(arg1[22]) * (arg2[2]))); x22 = (UINT16_C(0x239) * (((uint64_t)(arg1[22]) * (arg2[1])) * 0x2)); x23 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[22]))); x24 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[21])) * 0x2)); x25 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[20])) * 0x2)); x26 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[19]))); x27 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[18]))); x28 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[17])) * 0x2)); x29 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[16])) * 0x2)); x30 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[15]))); x31 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[14]))); x32 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[13])) * 0x2)); x33 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[12])) * 0x2)); x34 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[11]))); x35 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[10]))); x36 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[9])) * 0x2)); x37 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[8])) * 0x2)); x38 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[7]))); x39 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[6]))); x40 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[5])) * 0x2)); x41 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[4])) * 0x2)); x42 = (UINT16_C(0x239) * ((uint64_t)(arg1[21]) * (arg2[3]))); x43 = (UINT16_C(0x239) * (((uint64_t)(arg1[21]) * (arg2[2])) * 0x2)); x44 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[22])) * 0x2)); x45 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[21])) * 0x2)); x46 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[20])) * 0x2)); x47 = (UINT16_C(0x239) * ((uint64_t)(arg1[20]) * (arg2[19]))); x48 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[18])) * 0x2)); x49 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[17])) * 0x2)); x50 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[16])) * 0x2)); x51 = (UINT16_C(0x239) * ((uint64_t)(arg1[20]) * (arg2[15]))); x52 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[14])) * 0x2)); x53 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[13])) * 0x2)); x54 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[12])) * 0x2)); x55 = (UINT16_C(0x239) * ((uint64_t)(arg1[20]) * (arg2[11]))); x56 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[10])) * 0x2)); x57 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[9])) * 0x2)); x58 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[8])) * 0x2)); x59 = (UINT16_C(0x239) * ((uint64_t)(arg1[20]) * (arg2[7]))); x60 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[6])) * 0x2)); x61 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[5])) * 0x2)); x62 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[4])) * 0x2)); x63 = (UINT16_C(0x239) * (((uint64_t)(arg1[20]) * (arg2[3])) * 0x2)); x64 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[22]))); x65 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[21]))); x66 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[20]))); x67 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[19]))); x68 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[18]))); x69 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[17]))); x70 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[16]))); x71 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[15]))); x72 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[14]))); x73 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[13]))); x74 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[12]))); x75 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[11]))); x76 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[10]))); x77 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[9]))); x78 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[8]))); x79 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[7]))); x80 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[6]))); x81 = (UINT16_C(0x239) * ((uint64_t)(arg1[19]) * (arg2[5]))); x82 = (UINT16_C(0x239) * (((uint64_t)(arg1[19]) * (arg2[4])) * 0x2)); x83 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[22]))); x84 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[21]))); x85 = (UINT16_C(0x239) * (((uint64_t)(arg1[18]) * (arg2[20])) * 0x2)); x86 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[19]))); x87 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[18]))); x88 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[17]))); x89 = (UINT16_C(0x239) * (((uint64_t)(arg1[18]) * (arg2[16])) * 0x2)); x90 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[15]))); x91 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[14]))); x92 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[13]))); x93 = (UINT16_C(0x239) * (((uint64_t)(arg1[18]) * (arg2[12])) * 0x2)); x94 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[11]))); x95 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[10]))); x96 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[9]))); x97 = (UINT16_C(0x239) * (((uint64_t)(arg1[18]) * (arg2[8])) * 0x2)); x98 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[7]))); x99 = (UINT16_C(0x239) * ((uint64_t)(arg1[18]) * (arg2[6]))); x100 = (UINT16_C(0x239) * (((uint64_t)(arg1[18]) * (arg2[5])) * 0x2)); x101 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[22]))); x102 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[21])) * 0x2)); x103 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[20])) * 0x2)); x104 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[19]))); x105 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[18]))); x106 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[17])) * 0x2)); x107 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[16])) * 0x2)); x108 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[15]))); x109 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[14]))); x110 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[13])) * 0x2)); x111 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[12])) * 0x2)); x112 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[11]))); x113 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[10]))); x114 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[9])) * 0x2)); x115 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[8])) * 0x2)); x116 = (UINT16_C(0x239) * ((uint64_t)(arg1[17]) * (arg2[7]))); x117 = (UINT16_C(0x239) * (((uint64_t)(arg1[17]) * (arg2[6])) * 0x2)); x118 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[22])) * 0x2)); x119 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[21])) * 0x2)); x120 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[20])) * 0x2)); x121 = (UINT16_C(0x239) * ((uint64_t)(arg1[16]) * (arg2[19]))); x122 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[18])) * 0x2)); x123 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[17])) * 0x2)); x124 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[16])) * 0x2)); x125 = (UINT16_C(0x239) * ((uint64_t)(arg1[16]) * (arg2[15]))); x126 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[14])) * 0x2)); x127 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[13])) * 0x2)); x128 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[12])) * 0x2)); x129 = (UINT16_C(0x239) * ((uint64_t)(arg1[16]) * (arg2[11]))); x130 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[10])) * 0x2)); x131 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[9])) * 0x2)); x132 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[8])) * 0x2)); x133 = (UINT16_C(0x239) * (((uint64_t)(arg1[16]) * (arg2[7])) * 0x2)); x134 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[22]))); x135 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[21]))); x136 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[20]))); x137 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[19]))); x138 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[18]))); x139 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[17]))); x140 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[16]))); x141 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[15]))); x142 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[14]))); x143 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[13]))); x144 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[12]))); x145 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[11]))); x146 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[10]))); x147 = (UINT16_C(0x239) * ((uint64_t)(arg1[15]) * (arg2[9]))); x148 = (UINT16_C(0x239) * (((uint64_t)(arg1[15]) * (arg2[8])) * 0x2)); x149 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[22]))); x150 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[21]))); x151 = (UINT16_C(0x239) * (((uint64_t)(arg1[14]) * (arg2[20])) * 0x2)); x152 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[19]))); x153 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[18]))); x154 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[17]))); x155 = (UINT16_C(0x239) * (((uint64_t)(arg1[14]) * (arg2[16])) * 0x2)); x156 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[15]))); x157 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[14]))); x158 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[13]))); x159 = (UINT16_C(0x239) * (((uint64_t)(arg1[14]) * (arg2[12])) * 0x2)); x160 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[11]))); x161 = (UINT16_C(0x239) * ((uint64_t)(arg1[14]) * (arg2[10]))); x162 = (UINT16_C(0x239) * (((uint64_t)(arg1[14]) * (arg2[9])) * 0x2)); x163 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[22]))); x164 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[21])) * 0x2)); x165 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[20])) * 0x2)); x166 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[19]))); x167 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[18]))); x168 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[17])) * 0x2)); x169 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[16])) * 0x2)); x170 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[15]))); x171 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[14]))); x172 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[13])) * 0x2)); x173 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[12])) * 0x2)); x174 = (UINT16_C(0x239) * ((uint64_t)(arg1[13]) * (arg2[11]))); x175 = (UINT16_C(0x239) * (((uint64_t)(arg1[13]) * (arg2[10])) * 0x2)); x176 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[22])) * 0x2)); x177 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[21])) * 0x2)); x178 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[20])) * 0x2)); x179 = (UINT16_C(0x239) * ((uint64_t)(arg1[12]) * (arg2[19]))); x180 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[18])) * 0x2)); x181 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[17])) * 0x2)); x182 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[16])) * 0x2)); x183 = (UINT16_C(0x239) * ((uint64_t)(arg1[12]) * (arg2[15]))); x184 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[14])) * 0x2)); x185 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[13])) * 0x2)); x186 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[12])) * 0x2)); x187 = (UINT16_C(0x239) * (((uint64_t)(arg1[12]) * (arg2[11])) * 0x2)); x188 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[22]))); x189 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[21]))); x190 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[20]))); x191 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[19]))); x192 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[18]))); x193 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[17]))); x194 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[16]))); x195 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[15]))); x196 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[14]))); x197 = (UINT16_C(0x239) * ((uint64_t)(arg1[11]) * (arg2[13]))); x198 = (UINT16_C(0x239) * (((uint64_t)(arg1[11]) * (arg2[12])) * 0x2)); x199 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[22]))); x200 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[21]))); x201 = (UINT16_C(0x239) * (((uint64_t)(arg1[10]) * (arg2[20])) * 0x2)); x202 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[19]))); x203 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[18]))); x204 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[17]))); x205 = (UINT16_C(0x239) * (((uint64_t)(arg1[10]) * (arg2[16])) * 0x2)); x206 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[15]))); x207 = (UINT16_C(0x239) * ((uint64_t)(arg1[10]) * (arg2[14]))); x208 = (UINT16_C(0x239) * (((uint64_t)(arg1[10]) * (arg2[13])) * 0x2)); x209 = (UINT16_C(0x239) * ((uint64_t)(arg1[9]) * (arg2[22]))); x210 = (UINT16_C(0x239) * (((uint64_t)(arg1[9]) * (arg2[21])) * 0x2)); x211 = (UINT16_C(0x239) * (((uint64_t)(arg1[9]) * (arg2[20])) * 0x2)); x212 = (UINT16_C(0x239) * ((uint64_t)(arg1[9]) * (arg2[19]))); x213 = (UINT16_C(0x239) * ((uint64_t)(arg1[9]) * (arg2[18]))); x214 = (UINT16_C(0x239) * (((uint64_t)(arg1[9]) * (arg2[17])) * 0x2)); x215 = (UINT16_C(0x239) * (((uint64_t)(arg1[9]) * (arg2[16])) * 0x2)); x216 = (UINT16_C(0x239) * ((uint64_t)(arg1[9]) * (arg2[15]))); x217 = (UINT16_C(0x239) * (((uint64_t)(arg1[9]) * (arg2[14])) * 0x2)); x218 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[22])) * 0x2)); x219 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[21])) * 0x2)); x220 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[20])) * 0x2)); x221 = (UINT16_C(0x239) * ((uint64_t)(arg1[8]) * (arg2[19]))); x222 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[18])) * 0x2)); x223 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[17])) * 0x2)); x224 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[16])) * 0x2)); x225 = (UINT16_C(0x239) * (((uint64_t)(arg1[8]) * (arg2[15])) * 0x2)); x226 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[22]))); x227 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[21]))); x228 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[20]))); x229 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[19]))); x230 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[18]))); x231 = (UINT16_C(0x239) * ((uint64_t)(arg1[7]) * (arg2[17]))); x232 = (UINT16_C(0x239) * (((uint64_t)(arg1[7]) * (arg2[16])) * 0x2)); x233 = (UINT16_C(0x239) * ((uint64_t)(arg1[6]) * (arg2[22]))); x234 = (UINT16_C(0x239) * ((uint64_t)(arg1[6]) * (arg2[21]))); x235 = (UINT16_C(0x239) * (((uint64_t)(arg1[6]) * (arg2[20])) * 0x2)); x236 = (UINT16_C(0x239) * ((uint64_t)(arg1[6]) * (arg2[19]))); x237 = (UINT16_C(0x239) * ((uint64_t)(arg1[6]) * (arg2[18]))); x238 = (UINT16_C(0x239) * (((uint64_t)(arg1[6]) * (arg2[17])) * 0x2)); x239 = (UINT16_C(0x239) * ((uint64_t)(arg1[5]) * (arg2[22]))); x240 = (UINT16_C(0x239) * (((uint64_t)(arg1[5]) * (arg2[21])) * 0x2)); x241 = (UINT16_C(0x239) * (((uint64_t)(arg1[5]) * (arg2[20])) * 0x2)); x242 = (UINT16_C(0x239) * ((uint64_t)(arg1[5]) * (arg2[19]))); x243 = (UINT16_C(0x239) * (((uint64_t)(arg1[5]) * (arg2[18])) * 0x2)); x244 = (UINT16_C(0x239) * (((uint64_t)(arg1[4]) * (arg2[22])) * 0x2)); x245 = (UINT16_C(0x239) * (((uint64_t)(arg1[4]) * (arg2[21])) * 0x2)); x246 = (UINT16_C(0x239) * (((uint64_t)(arg1[4]) * (arg2[20])) * 0x2)); x247 = (UINT16_C(0x239) * (((uint64_t)(arg1[4]) * (arg2[19])) * 0x2)); x248 = (UINT16_C(0x239) * ((uint64_t)(arg1[3]) * (arg2[22]))); x249 = (UINT16_C(0x239) * ((uint64_t)(arg1[3]) * (arg2[21]))); x250 = (UINT16_C(0x239) * (((uint64_t)(arg1[3]) * (arg2[20])) * 0x2)); x251 = (UINT16_C(0x239) * ((uint64_t)(arg1[2]) * (arg2[22]))); x252 = (UINT16_C(0x239) * (((uint64_t)(arg1[2]) * (arg2[21])) * 0x2)); x253 = (UINT16_C(0x239) * (((uint64_t)(arg1[1]) * (arg2[22])) * 0x2)); x254 = ((uint64_t)(arg1[22]) * (arg2[0])); x255 = ((uint64_t)(arg1[21]) * ((arg2[1]) * 0x2)); x256 = ((uint64_t)(arg1[21]) * (arg2[0])); x257 = ((uint64_t)(arg1[20]) * ((arg2[2]) * 0x2)); x258 = ((uint64_t)(arg1[20]) * ((arg2[1]) * 0x2)); x259 = ((uint64_t)(arg1[20]) * (arg2[0])); x260 = ((uint64_t)(arg1[19]) * (arg2[3])); x261 = ((uint64_t)(arg1[19]) * (arg2[2])); x262 = ((uint64_t)(arg1[19]) * (arg2[1])); x263 = ((uint64_t)(arg1[19]) * (arg2[0])); x264 = ((uint64_t)(arg1[18]) * ((arg2[4]) * 0x2)); x265 = ((uint64_t)(arg1[18]) * (arg2[3])); x266 = ((uint64_t)(arg1[18]) * (arg2[2])); x267 = ((uint64_t)(arg1[18]) * ((arg2[1]) * 0x2)); x268 = ((uint64_t)(arg1[18]) * (arg2[0])); x269 = ((uint64_t)(arg1[17]) * ((arg2[5]) * 0x2)); x270 = ((uint64_t)(arg1[17]) * ((arg2[4]) * 0x2)); x271 = ((uint64_t)(arg1[17]) * (arg2[3])); x272 = ((uint64_t)(arg1[17]) * ((arg2[2]) * 0x2)); x273 = ((uint64_t)(arg1[17]) * ((arg2[1]) * 0x2)); x274 = ((uint64_t)(arg1[17]) * (arg2[0])); x275 = ((uint64_t)(arg1[16]) * ((arg2[6]) * 0x2)); x276 = ((uint64_t)(arg1[16]) * ((arg2[5]) * 0x2)); x277 = ((uint64_t)(arg1[16]) * ((arg2[4]) * 0x2)); x278 = ((uint64_t)(arg1[16]) * ((arg2[3]) * 0x2)); x279 = ((uint64_t)(arg1[16]) * ((arg2[2]) * 0x2)); x280 = ((uint64_t)(arg1[16]) * ((arg2[1]) * 0x2)); x281 = ((uint64_t)(arg1[16]) * (arg2[0])); x282 = ((uint64_t)(arg1[15]) * (arg2[7])); x283 = ((uint64_t)(arg1[15]) * (arg2[6])); x284 = ((uint64_t)(arg1[15]) * (arg2[5])); x285 = ((uint64_t)(arg1[15]) * ((arg2[4]) * 0x2)); x286 = ((uint64_t)(arg1[15]) * (arg2[3])); x287 = ((uint64_t)(arg1[15]) * (arg2[2])); x288 = ((uint64_t)(arg1[15]) * (arg2[1])); x289 = ((uint64_t)(arg1[15]) * (arg2[0])); x290 = ((uint64_t)(arg1[14]) * ((arg2[8]) * 0x2)); x291 = ((uint64_t)(arg1[14]) * (arg2[7])); x292 = ((uint64_t)(arg1[14]) * (arg2[6])); x293 = ((uint64_t)(arg1[14]) * ((arg2[5]) * 0x2)); x294 = ((uint64_t)(arg1[14]) * ((arg2[4]) * 0x2)); x295 = ((uint64_t)(arg1[14]) * (arg2[3])); x296 = ((uint64_t)(arg1[14]) * (arg2[2])); x297 = ((uint64_t)(arg1[14]) * ((arg2[1]) * 0x2)); x298 = ((uint64_t)(arg1[14]) * (arg2[0])); x299 = ((uint64_t)(arg1[13]) * ((arg2[9]) * 0x2)); x300 = ((uint64_t)(arg1[13]) * ((arg2[8]) * 0x2)); x301 = ((uint64_t)(arg1[13]) * (arg2[7])); x302 = ((uint64_t)(arg1[13]) * ((arg2[6]) * 0x2)); x303 = ((uint64_t)(arg1[13]) * ((arg2[5]) * 0x2)); x304 = ((uint64_t)(arg1[13]) * ((arg2[4]) * 0x2)); x305 = ((uint64_t)(arg1[13]) * (arg2[3])); x306 = ((uint64_t)(arg1[13]) * ((arg2[2]) * 0x2)); x307 = ((uint64_t)(arg1[13]) * ((arg2[1]) * 0x2)); x308 = ((uint64_t)(arg1[13]) * (arg2[0])); x309 = ((uint64_t)(arg1[12]) * ((arg2[10]) * 0x2)); x310 = ((uint64_t)(arg1[12]) * ((arg2[9]) * 0x2)); x311 = ((uint64_t)(arg1[12]) * ((arg2[8]) * 0x2)); x312 = ((uint64_t)(arg1[12]) * ((arg2[7]) * 0x2)); x313 = ((uint64_t)(arg1[12]) * ((arg2[6]) * 0x2)); x314 = ((uint64_t)(arg1[12]) * ((arg2[5]) * 0x2)); x315 = ((uint64_t)(arg1[12]) * ((arg2[4]) * 0x2)); x316 = ((uint64_t)(arg1[12]) * ((arg2[3]) * 0x2)); x317 = ((uint64_t)(arg1[12]) * ((arg2[2]) * 0x2)); x318 = ((uint64_t)(arg1[12]) * ((arg2[1]) * 0x2)); x319 = ((uint64_t)(arg1[12]) * (arg2[0])); x320 = ((uint64_t)(arg1[11]) * (arg2[11])); x321 = ((uint64_t)(arg1[11]) * (arg2[10])); x322 = ((uint64_t)(arg1[11]) * (arg2[9])); x323 = ((uint64_t)(arg1[11]) * ((arg2[8]) * 0x2)); x324 = ((uint64_t)(arg1[11]) * (arg2[7])); x325 = ((uint64_t)(arg1[11]) * (arg2[6])); x326 = ((uint64_t)(arg1[11]) * (arg2[5])); x327 = ((uint64_t)(arg1[11]) * ((arg2[4]) * 0x2)); x328 = ((uint64_t)(arg1[11]) * (arg2[3])); x329 = ((uint64_t)(arg1[11]) * (arg2[2])); x330 = ((uint64_t)(arg1[11]) * (arg2[1])); x331 = ((uint64_t)(arg1[11]) * (arg2[0])); x332 = ((uint64_t)(arg1[10]) * ((arg2[12]) * 0x2)); x333 = ((uint64_t)(arg1[10]) * (arg2[11])); x334 = ((uint64_t)(arg1[10]) * (arg2[10])); x335 = ((uint64_t)(arg1[10]) * ((arg2[9]) * 0x2)); x336 = ((uint64_t)(arg1[10]) * ((arg2[8]) * 0x2)); x337 = ((uint64_t)(arg1[10]) * (arg2[7])); x338 = ((uint64_t)(arg1[10]) * (arg2[6])); x339 = ((uint64_t)(arg1[10]) * ((arg2[5]) * 0x2)); x340 = ((uint64_t)(arg1[10]) * ((arg2[4]) * 0x2)); x341 = ((uint64_t)(arg1[10]) * (arg2[3])); x342 = ((uint64_t)(arg1[10]) * (arg2[2])); x343 = ((uint64_t)(arg1[10]) * ((arg2[1]) * 0x2)); x344 = ((uint64_t)(arg1[10]) * (arg2[0])); x345 = ((uint64_t)(arg1[9]) * ((arg2[13]) * 0x2)); x346 = ((uint64_t)(arg1[9]) * ((arg2[12]) * 0x2)); x347 = ((uint64_t)(arg1[9]) * (arg2[11])); x348 = ((uint64_t)(arg1[9]) * ((arg2[10]) * 0x2)); x349 = ((uint64_t)(arg1[9]) * ((arg2[9]) * 0x2)); x350 = ((uint64_t)(arg1[9]) * ((arg2[8]) * 0x2)); x351 = ((uint64_t)(arg1[9]) * (arg2[7])); x352 = ((uint64_t)(arg1[9]) * ((arg2[6]) * 0x2)); x353 = ((uint64_t)(arg1[9]) * ((arg2[5]) * 0x2)); x354 = ((uint64_t)(arg1[9]) * ((arg2[4]) * 0x2)); x355 = ((uint64_t)(arg1[9]) * (arg2[3])); x356 = ((uint64_t)(arg1[9]) * ((arg2[2]) * 0x2)); x357 = ((uint64_t)(arg1[9]) * ((arg2[1]) * 0x2)); x358 = ((uint64_t)(arg1[9]) * (arg2[0])); x359 = ((uint64_t)(arg1[8]) * ((arg2[14]) * 0x2)); x360 = ((uint64_t)(arg1[8]) * ((arg2[13]) * 0x2)); x361 = ((uint64_t)(arg1[8]) * ((arg2[12]) * 0x2)); x362 = ((uint64_t)(arg1[8]) * ((arg2[11]) * 0x2)); x363 = ((uint64_t)(arg1[8]) * ((arg2[10]) * 0x2)); x364 = ((uint64_t)(arg1[8]) * ((arg2[9]) * 0x2)); x365 = ((uint64_t)(arg1[8]) * ((arg2[8]) * 0x2)); x366 = ((uint64_t)(arg1[8]) * ((arg2[7]) * 0x2)); x367 = ((uint64_t)(arg1[8]) * ((arg2[6]) * 0x2)); x368 = ((uint64_t)(arg1[8]) * ((arg2[5]) * 0x2)); x369 = ((uint64_t)(arg1[8]) * ((arg2[4]) * 0x2)); x370 = ((uint64_t)(arg1[8]) * ((arg2[3]) * 0x2)); x371 = ((uint64_t)(arg1[8]) * ((arg2[2]) * 0x2)); x372 = ((uint64_t)(arg1[8]) * ((arg2[1]) * 0x2)); x373 = ((uint64_t)(arg1[8]) * (arg2[0])); x374 = ((uint64_t)(arg1[7]) * (arg2[15])); x375 = ((uint64_t)(arg1[7]) * (arg2[14])); x376 = ((uint64_t)(arg1[7]) * (arg2[13])); x377 = ((uint64_t)(arg1[7]) * ((arg2[12]) * 0x2)); x378 = ((uint64_t)(arg1[7]) * (arg2[11])); x379 = ((uint64_t)(arg1[7]) * (arg2[10])); x380 = ((uint64_t)(arg1[7]) * (arg2[9])); x381 = ((uint64_t)(arg1[7]) * ((arg2[8]) * 0x2)); x382 = ((uint64_t)(arg1[7]) * (arg2[7])); x383 = ((uint64_t)(arg1[7]) * (arg2[6])); x384 = ((uint64_t)(arg1[7]) * (arg2[5])); x385 = ((uint64_t)(arg1[7]) * ((arg2[4]) * 0x2)); x386 = ((uint64_t)(arg1[7]) * (arg2[3])); x387 = ((uint64_t)(arg1[7]) * (arg2[2])); x388 = ((uint64_t)(arg1[7]) * (arg2[1])); x389 = ((uint64_t)(arg1[7]) * (arg2[0])); x390 = ((uint64_t)(arg1[6]) * ((arg2[16]) * 0x2)); x391 = ((uint64_t)(arg1[6]) * (arg2[15])); x392 = ((uint64_t)(arg1[6]) * (arg2[14])); x393 = ((uint64_t)(arg1[6]) * ((arg2[13]) * 0x2)); x394 = ((uint64_t)(arg1[6]) * ((arg2[12]) * 0x2)); x395 = ((uint64_t)(arg1[6]) * (arg2[11])); x396 = ((uint64_t)(arg1[6]) * (arg2[10])); x397 = ((uint64_t)(arg1[6]) * ((arg2[9]) * 0x2)); x398 = ((uint64_t)(arg1[6]) * ((arg2[8]) * 0x2)); x399 = ((uint64_t)(arg1[6]) * (arg2[7])); x400 = ((uint64_t)(arg1[6]) * (arg2[6])); x401 = ((uint64_t)(arg1[6]) * ((arg2[5]) * 0x2)); x402 = ((uint64_t)(arg1[6]) * ((arg2[4]) * 0x2)); x403 = ((uint64_t)(arg1[6]) * (arg2[3])); x404 = ((uint64_t)(arg1[6]) * (arg2[2])); x405 = ((uint64_t)(arg1[6]) * ((arg2[1]) * 0x2)); x406 = ((uint64_t)(arg1[6]) * (arg2[0])); x407 = ((uint64_t)(arg1[5]) * ((arg2[17]) * 0x2)); x408 = ((uint64_t)(arg1[5]) * ((arg2[16]) * 0x2)); x409 = ((uint64_t)(arg1[5]) * (arg2[15])); x410 = ((uint64_t)(arg1[5]) * ((arg2[14]) * 0x2)); x411 = ((uint64_t)(arg1[5]) * ((arg2[13]) * 0x2)); x412 = ((uint64_t)(arg1[5]) * ((arg2[12]) * 0x2)); x413 = ((uint64_t)(arg1[5]) * (arg2[11])); x414 = ((uint64_t)(arg1[5]) * ((arg2[10]) * 0x2)); x415 = ((uint64_t)(arg1[5]) * ((arg2[9]) * 0x2)); x416 = ((uint64_t)(arg1[5]) * ((arg2[8]) * 0x2)); x417 = ((uint64_t)(arg1[5]) * (arg2[7])); x418 = ((uint64_t)(arg1[5]) * ((arg2[6]) * 0x2)); x419 = ((uint64_t)(arg1[5]) * ((arg2[5]) * 0x2)); x420 = ((uint64_t)(arg1[5]) * ((arg2[4]) * 0x2)); x421 = ((uint64_t)(arg1[5]) * (arg2[3])); x422 = ((uint64_t)(arg1[5]) * ((arg2[2]) * 0x2)); x423 = ((uint64_t)(arg1[5]) * ((arg2[1]) * 0x2)); x424 = ((uint64_t)(arg1[5]) * (arg2[0])); x425 = ((uint64_t)(arg1[4]) * ((arg2[18]) * 0x2)); x426 = ((uint64_t)(arg1[4]) * ((arg2[17]) * 0x2)); x427 = ((uint64_t)(arg1[4]) * ((arg2[16]) * 0x2)); x428 = ((uint64_t)(arg1[4]) * ((arg2[15]) * 0x2)); x429 = ((uint64_t)(arg1[4]) * ((arg2[14]) * 0x2)); x430 = ((uint64_t)(arg1[4]) * ((arg2[13]) * 0x2)); x431 = ((uint64_t)(arg1[4]) * ((arg2[12]) * 0x2)); x432 = ((uint64_t)(arg1[4]) * ((arg2[11]) * 0x2)); x433 = ((uint64_t)(arg1[4]) * ((arg2[10]) * 0x2)); x434 = ((uint64_t)(arg1[4]) * ((arg2[9]) * 0x2)); x435 = ((uint64_t)(arg1[4]) * ((arg2[8]) * 0x2)); x436 = ((uint64_t)(arg1[4]) * ((arg2[7]) * 0x2)); x437 = ((uint64_t)(arg1[4]) * ((arg2[6]) * 0x2)); x438 = ((uint64_t)(arg1[4]) * ((arg2[5]) * 0x2)); x439 = ((uint64_t)(arg1[4]) * ((arg2[4]) * 0x2)); x440 = ((uint64_t)(arg1[4]) * ((arg2[3]) * 0x2)); x441 = ((uint64_t)(arg1[4]) * ((arg2[2]) * 0x2)); x442 = ((uint64_t)(arg1[4]) * ((arg2[1]) * 0x2)); x443 = ((uint64_t)(arg1[4]) * (arg2[0])); x444 = ((uint64_t)(arg1[3]) * (arg2[19])); x445 = ((uint64_t)(arg1[3]) * (arg2[18])); x446 = ((uint64_t)(arg1[3]) * (arg2[17])); x447 = ((uint64_t)(arg1[3]) * ((arg2[16]) * 0x2)); x448 = ((uint64_t)(arg1[3]) * (arg2[15])); x449 = ((uint64_t)(arg1[3]) * (arg2[14])); x450 = ((uint64_t)(arg1[3]) * (arg2[13])); x451 = ((uint64_t)(arg1[3]) * ((arg2[12]) * 0x2)); x452 = ((uint64_t)(arg1[3]) * (arg2[11])); x453 = ((uint64_t)(arg1[3]) * (arg2[10])); x454 = ((uint64_t)(arg1[3]) * (arg2[9])); x455 = ((uint64_t)(arg1[3]) * ((arg2[8]) * 0x2)); x456 = ((uint64_t)(arg1[3]) * (arg2[7])); x457 = ((uint64_t)(arg1[3]) * (arg2[6])); x458 = ((uint64_t)(arg1[3]) * (arg2[5])); x459 = ((uint64_t)(arg1[3]) * ((arg2[4]) * 0x2)); x460 = ((uint64_t)(arg1[3]) * (arg2[3])); x461 = ((uint64_t)(arg1[3]) * (arg2[2])); x462 = ((uint64_t)(arg1[3]) * (arg2[1])); x463 = ((uint64_t)(arg1[3]) * (arg2[0])); x464 = ((uint64_t)(arg1[2]) * ((arg2[20]) * 0x2)); x465 = ((uint64_t)(arg1[2]) * (arg2[19])); x466 = ((uint64_t)(arg1[2]) * (arg2[18])); x467 = ((uint64_t)(arg1[2]) * ((arg2[17]) * 0x2)); x468 = ((uint64_t)(arg1[2]) * ((arg2[16]) * 0x2)); x469 = ((uint64_t)(arg1[2]) * (arg2[15])); x470 = ((uint64_t)(arg1[2]) * (arg2[14])); x471 = ((uint64_t)(arg1[2]) * ((arg2[13]) * 0x2)); x472 = ((uint64_t)(arg1[2]) * ((arg2[12]) * 0x2)); x473 = ((uint64_t)(arg1[2]) * (arg2[11])); x474 = ((uint64_t)(arg1[2]) * (arg2[10])); x475 = ((uint64_t)(arg1[2]) * ((arg2[9]) * 0x2)); x476 = ((uint64_t)(arg1[2]) * ((arg2[8]) * 0x2)); x477 = ((uint64_t)(arg1[2]) * (arg2[7])); x478 = ((uint64_t)(arg1[2]) * (arg2[6])); x479 = ((uint64_t)(arg1[2]) * ((arg2[5]) * 0x2)); x480 = ((uint64_t)(arg1[2]) * ((arg2[4]) * 0x2)); x481 = ((uint64_t)(arg1[2]) * (arg2[3])); x482 = ((uint64_t)(arg1[2]) * (arg2[2])); x483 = ((uint64_t)(arg1[2]) * ((arg2[1]) * 0x2)); x484 = ((uint64_t)(arg1[2]) * (arg2[0])); x485 = ((uint64_t)(arg1[1]) * ((arg2[21]) * 0x2)); x486 = ((uint64_t)(arg1[1]) * ((arg2[20]) * 0x2)); x487 = ((uint64_t)(arg1[1]) * (arg2[19])); x488 = ((uint64_t)(arg1[1]) * ((arg2[18]) * 0x2)); x489 = ((uint64_t)(arg1[1]) * ((arg2[17]) * 0x2)); x490 = ((uint64_t)(arg1[1]) * ((arg2[16]) * 0x2)); x491 = ((uint64_t)(arg1[1]) * (arg2[15])); x492 = ((uint64_t)(arg1[1]) * ((arg2[14]) * 0x2)); x493 = ((uint64_t)(arg1[1]) * ((arg2[13]) * 0x2)); x494 = ((uint64_t)(arg1[1]) * ((arg2[12]) * 0x2)); x495 = ((uint64_t)(arg1[1]) * (arg2[11])); x496 = ((uint64_t)(arg1[1]) * ((arg2[10]) * 0x2)); x497 = ((uint64_t)(arg1[1]) * ((arg2[9]) * 0x2)); x498 = ((uint64_t)(arg1[1]) * ((arg2[8]) * 0x2)); x499 = ((uint64_t)(arg1[1]) * (arg2[7])); x500 = ((uint64_t)(arg1[1]) * ((arg2[6]) * 0x2)); x501 = ((uint64_t)(arg1[1]) * ((arg2[5]) * 0x2)); x502 = ((uint64_t)(arg1[1]) * ((arg2[4]) * 0x2)); x503 = ((uint64_t)(arg1[1]) * (arg2[3])); x504 = ((uint64_t)(arg1[1]) * ((arg2[2]) * 0x2)); x505 = ((uint64_t)(arg1[1]) * ((arg2[1]) * 0x2)); x506 = ((uint64_t)(arg1[1]) * (arg2[0])); x507 = ((uint64_t)(arg1[0]) * (arg2[22])); x508 = ((uint64_t)(arg1[0]) * (arg2[21])); x509 = ((uint64_t)(arg1[0]) * (arg2[20])); x510 = ((uint64_t)(arg1[0]) * (arg2[19])); x511 = ((uint64_t)(arg1[0]) * (arg2[18])); x512 = ((uint64_t)(arg1[0]) * (arg2[17])); x513 = ((uint64_t)(arg1[0]) * (arg2[16])); x514 = ((uint64_t)(arg1[0]) * (arg2[15])); x515 = ((uint64_t)(arg1[0]) * (arg2[14])); x516 = ((uint64_t)(arg1[0]) * (arg2[13])); x517 = ((uint64_t)(arg1[0]) * (arg2[12])); x518 = ((uint64_t)(arg1[0]) * (arg2[11])); x519 = ((uint64_t)(arg1[0]) * (arg2[10])); x520 = ((uint64_t)(arg1[0]) * (arg2[9])); x521 = ((uint64_t)(arg1[0]) * (arg2[8])); x522 = ((uint64_t)(arg1[0]) * (arg2[7])); x523 = ((uint64_t)(arg1[0]) * (arg2[6])); x524 = ((uint64_t)(arg1[0]) * (arg2[5])); x525 = ((uint64_t)(arg1[0]) * (arg2[4])); x526 = ((uint64_t)(arg1[0]) * (arg2[3])); x527 = ((uint64_t)(arg1[0]) * (arg2[2])); x528 = ((uint64_t)(arg1[0]) * (arg2[1])); x529 = ((uint64_t)(arg1[0]) * (arg2[0])); x530 = (x529 + (x253 + (x252 + (x250 + (x247 + (x243 + (x238 + (x232 + (x225 + (x217 + (x208 + (x198 + (x187 + (x175 + (x162 + (x148 + (x133 + (x117 + (x100 + (x82 + (x63 + (x43 + x22)))))))))))))))))))))); x531 = (x530 >> 23); x532 = (uint32_t)(x530 & UINT32_C(0x7fffff)); x533 = (x507 + (x485 + (x464 + (x444 + (x425 + (x407 + (x390 + (x374 + (x359 + (x345 + (x332 + (x320 + (x309 + (x299 + (x290 + (x282 + (x275 + (x269 + (x264 + (x260 + (x257 + (x255 + x254)))))))))))))))))))))); x534 = (x508 + (x486 + (x465 + (x445 + (x426 + (x408 + (x391 + (x375 + (x360 + (x346 + (x333 + (x321 + (x310 + (x300 + (x291 + (x283 + (x276 + (x270 + (x265 + (x261 + (x258 + (x256 + x1)))))))))))))))))))))); x535 = (x509 + (x487 + (x466 + (x446 + (x427 + (x409 + (x392 + (x376 + (x361 + (x347 + (x334 + (x322 + (x311 + (x301 + (x292 + (x284 + (x277 + (x271 + (x266 + (x262 + (x259 + (x23 + x2)))))))))))))))))))))); x536 = (x510 + (x488 + (x467 + (x447 + (x428 + (x410 + (x393 + (x377 + (x362 + (x348 + (x335 + (x323 + (x312 + (x302 + (x293 + (x285 + (x278 + (x272 + (x267 + (x263 + (x44 + (x24 + x3)))))))))))))))))))))); x537 = (x511 + (x489 + (x468 + (x448 + (x429 + (x411 + (x394 + (x378 + (x363 + (x349 + (x336 + (x324 + (x313 + (x303 + (x294 + (x286 + (x279 + (x273 + (x268 + (x64 + (x45 + (x25 + x4)))))))))))))))))))))); x538 = (x512 + (x490 + (x469 + (x449 + (x430 + (x412 + (x395 + (x379 + (x364 + (x350 + (x337 + (x325 + (x314 + (x304 + (x295 + (x287 + (x280 + (x274 + (x83 + (x65 + (x46 + (x26 + x5)))))))))))))))))))))); x539 = (x513 + (x491 + (x470 + (x450 + (x431 + (x413 + (x396 + (x380 + (x365 + (x351 + (x338 + (x326 + (x315 + (x305 + (x296 + (x288 + (x281 + (x101 + (x84 + (x66 + (x47 + (x27 + x6)))))))))))))))))))))); x540 = (x514 + (x492 + (x471 + (x451 + (x432 + (x414 + (x397 + (x381 + (x366 + (x352 + (x339 + (x327 + (x316 + (x306 + (x297 + (x289 + (x118 + (x102 + (x85 + (x67 + (x48 + (x28 + x7)))))))))))))))))))))); x541 = (x515 + (x493 + (x472 + (x452 + (x433 + (x415 + (x398 + (x382 + (x367 + (x353 + (x340 + (x328 + (x317 + (x307 + (x298 + (x134 + (x119 + (x103 + (x86 + (x68 + (x49 + (x29 + x8)))))))))))))))))))))); x542 = (x516 + (x494 + (x473 + (x453 + (x434 + (x416 + (x399 + (x383 + (x368 + (x354 + (x341 + (x329 + (x318 + (x308 + (x149 + (x135 + (x120 + (x104 + (x87 + (x69 + (x50 + (x30 + x9)))))))))))))))))))))); x543 = (x517 + (x495 + (x474 + (x454 + (x435 + (x417 + (x400 + (x384 + (x369 + (x355 + (x342 + (x330 + (x319 + (x163 + (x150 + (x136 + (x121 + (x105 + (x88 + (x70 + (x51 + (x31 + x10)))))))))))))))))))))); x544 = (x518 + (x496 + (x475 + (x455 + (x436 + (x418 + (x401 + (x385 + (x370 + (x356 + (x343 + (x331 + (x176 + (x164 + (x151 + (x137 + (x122 + (x106 + (x89 + (x71 + (x52 + (x32 + x11)))))))))))))))))))))); x545 = (x519 + (x497 + (x476 + (x456 + (x437 + (x419 + (x402 + (x386 + (x371 + (x357 + (x344 + (x188 + (x177 + (x165 + (x152 + (x138 + (x123 + (x107 + (x90 + (x72 + (x53 + (x33 + x12)))))))))))))))))))))); x546 = (x520 + (x498 + (x477 + (x457 + (x438 + (x420 + (x403 + (x387 + (x372 + (x358 + (x199 + (x189 + (x178 + (x166 + (x153 + (x139 + (x124 + (x108 + (x91 + (x73 + (x54 + (x34 + x13)))))))))))))))))))))); x547 = (x521 + (x499 + (x478 + (x458 + (x439 + (x421 + (x404 + (x388 + (x373 + (x209 + (x200 + (x190 + (x179 + (x167 + (x154 + (x140 + (x125 + (x109 + (x92 + (x74 + (x55 + (x35 + x14)))))))))))))))))))))); x548 = (x522 + (x500 + (x479 + (x459 + (x440 + (x422 + (x405 + (x389 + (x218 + (x210 + (x201 + (x191 + (x180 + (x168 + (x155 + (x141 + (x126 + (x110 + (x93 + (x75 + (x56 + (x36 + x15)))))))))))))))))))))); x549 = (x523 + (x501 + (x480 + (x460 + (x441 + (x423 + (x406 + (x226 + (x219 + (x211 + (x202 + (x192 + (x181 + (x169 + (x156 + (x142 + (x127 + (x111 + (x94 + (x76 + (x57 + (x37 + x16)))))))))))))))))))))); x550 = (x524 + (x502 + (x481 + (x461 + (x442 + (x424 + (x233 + (x227 + (x220 + (x212 + (x203 + (x193 + (x182 + (x170 + (x157 + (x143 + (x128 + (x112 + (x95 + (x77 + (x58 + (x38 + x17)))))))))))))))))))))); x551 = (x525 + (x503 + (x482 + (x462 + (x443 + (x239 + (x234 + (x228 + (x221 + (x213 + (x204 + (x194 + (x183 + (x171 + (x158 + (x144 + (x129 + (x113 + (x96 + (x78 + (x59 + (x39 + x18)))))))))))))))))))))); x552 = (x526 + (x504 + (x483 + (x463 + (x244 + (x240 + (x235 + (x229 + (x222 + (x214 + (x205 + (x195 + (x184 + (x172 + (x159 + (x145 + (x130 + (x114 + (x97 + (x79 + (x60 + (x40 + x19)))))))))))))))))))))); x553 = (x527 + (x505 + (x484 + (x248 + (x245 + (x241 + (x236 + (x230 + (x223 + (x215 + (x206 + (x196 + (x185 + (x173 + (x160 + (x146 + (x131 + (x115 + (x98 + (x80 + (x61 + (x41 + x20)))))))))))))))))))))); x554 = (x528 + (x506 + (x251 + (x249 + (x246 + (x242 + (x237 + (x231 + (x224 + (x216 + (x207 + (x197 + (x186 + (x174 + (x161 + (x147 + (x132 + (x116 + (x99 + (x81 + (x62 + (x42 + x21)))))))))))))))))))))); x555 = (x531 + x554); x556 = (x555 >> 22); x557 = (uint32_t)(x555 & UINT32_C(0x3fffff)); x558 = (x556 + x553); x559 = (x558 >> 22); x560 = (uint32_t)(x558 & UINT32_C(0x3fffff)); x561 = (x559 + x552); x562 = (x561 >> 23); x563 = (uint32_t)(x561 & UINT32_C(0x7fffff)); x564 = (x562 + x551); x565 = (x564 >> 22); x566 = (uint32_t)(x564 & UINT32_C(0x3fffff)); x567 = (x565 + x550); x568 = (x567 >> 22); x569 = (uint32_t)(x567 & UINT32_C(0x3fffff)); x570 = (x568 + x549); x571 = (x570 >> 22); x572 = (uint32_t)(x570 & UINT32_C(0x3fffff)); x573 = (x571 + x548); x574 = (x573 >> 23); x575 = (uint32_t)(x573 & UINT32_C(0x7fffff)); x576 = (x574 + x547); x577 = (x576 >> 22); x578 = (uint32_t)(x576 & UINT32_C(0x3fffff)); x579 = (x577 + x546); x580 = (x579 >> 22); x581 = (uint32_t)(x579 & UINT32_C(0x3fffff)); x582 = (x580 + x545); x583 = (x582 >> 22); x584 = (uint32_t)(x582 & UINT32_C(0x3fffff)); x585 = (x583 + x544); x586 = (x585 >> 23); x587 = (uint32_t)(x585 & UINT32_C(0x7fffff)); x588 = (x586 + x543); x589 = (x588 >> 22); x590 = (uint32_t)(x588 & UINT32_C(0x3fffff)); x591 = (x589 + x542); x592 = (x591 >> 22); x593 = (uint32_t)(x591 & UINT32_C(0x3fffff)); x594 = (x592 + x541); x595 = (x594 >> 22); x596 = (uint32_t)(x594 & UINT32_C(0x3fffff)); x597 = (x595 + x540); x598 = (x597 >> 23); x599 = (uint32_t)(x597 & UINT32_C(0x7fffff)); x600 = (x598 + x539); x601 = (x600 >> 22); x602 = (uint32_t)(x600 & UINT32_C(0x3fffff)); x603 = (x601 + x538); x604 = (x603 >> 22); x605 = (uint32_t)(x603 & UINT32_C(0x3fffff)); x606 = (x604 + x537); x607 = (x606 >> 22); x608 = (uint32_t)(x606 & UINT32_C(0x3fffff)); x609 = (x607 + x536); x610 = (x609 >> 23); x611 = (uint32_t)(x609 & UINT32_C(0x7fffff)); x612 = (x610 + x535); x613 = (x612 >> 22); x614 = (uint32_t)(x612 & UINT32_C(0x3fffff)); x615 = (x613 + x534); x616 = (x615 >> 22); x617 = (uint32_t)(x615 & UINT32_C(0x3fffff)); x618 = (x616 + x533); x619 = (uint32_t)(x618 >> 22); x620 = (uint32_t)(x618 & UINT32_C(0x3fffff)); x621 = ((uint64_t)UINT16_C(0x239) * x619); x622 = (x532 + x621); x623 = (uint32_t)(x622 >> 23); x624 = (uint32_t)(x622 & UINT32_C(0x7fffff)); x625 = (x623 + x557); x626 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x625 >> 22); x627 = (x625 & UINT32_C(0x3fffff)); x628 = (x626 + x560); out1[0] = x624; out1[1] = x627; out1[2] = x628; out1[3] = x563; out1[4] = x566; out1[5] = x569; out1[6] = x572; out1[7] = x575; out1[8] = x578; out1[9] = x581; out1[10] = x584; out1[11] = x587; out1[12] = x590; out1[13] = x593; out1[14] = x596; out1[15] = x599; out1[16] = x602; out1[17] = x605; out1[18] = x608; out1[19] = x611; out1[20] = x614; out1[21] = x617; out1[22] = x620; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square squares a field element and reduces the result. * Postconditions: * eval out1 mod m = (eval arg1 * eval arg1) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] * Output Bounds: * out1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square( uint32_t out1[23], const uint32_t arg1[23]) { uint64_t x1; uint64_t x2; uint32_t x3; uint64_t x4; uint64_t x5; uint32_t x6; uint64_t x7; uint64_t x8; uint32_t x9; uint64_t x10; uint64_t x11; uint32_t x12; uint64_t x13; uint64_t x14; uint32_t x15; uint64_t x16; uint64_t x17; uint32_t x18; uint64_t x19; uint64_t x20; uint32_t x21; uint64_t x22; uint64_t x23; uint32_t x24; uint64_t x25; uint64_t x26; uint32_t x27; uint64_t x28; uint64_t x29; uint32_t x30; uint64_t x31; uint64_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint64_t x45; uint64_t x46; uint64_t x47; uint64_t x48; uint64_t x49; uint64_t x50; uint64_t x51; uint64_t x52; uint64_t x53; uint64_t x54; uint64_t x55; uint64_t x56; uint64_t x57; uint64_t x58; uint64_t x59; uint64_t x60; uint64_t x61; uint64_t x62; uint64_t x63; uint64_t x64; uint64_t x65; uint64_t x66; uint64_t x67; uint64_t x68; uint64_t x69; uint64_t x70; uint64_t x71; uint64_t x72; uint64_t x73; uint64_t x74; uint64_t x75; uint64_t x76; uint64_t x77; uint64_t x78; uint64_t x79; uint64_t x80; uint64_t x81; uint64_t x82; uint64_t x83; uint64_t x84; uint64_t x85; uint64_t x86; uint64_t x87; uint64_t x88; uint64_t x89; uint64_t x90; uint64_t x91; uint64_t x92; uint64_t x93; uint64_t x94; uint64_t x95; uint64_t x96; uint64_t x97; uint64_t x98; uint64_t x99; uint64_t x100; uint64_t x101; uint64_t x102; uint64_t x103; uint64_t x104; uint64_t x105; uint64_t x106; uint64_t x107; uint64_t x108; uint64_t x109; uint64_t x110; uint64_t x111; uint64_t x112; uint64_t x113; uint64_t x114; uint64_t x115; uint64_t x116; uint64_t x117; uint64_t x118; uint64_t x119; uint64_t x120; uint64_t x121; uint64_t x122; uint64_t x123; uint64_t x124; uint64_t x125; uint64_t x126; uint64_t x127; uint64_t x128; uint64_t x129; uint64_t x130; uint64_t x131; uint64_t x132; uint64_t x133; uint64_t x134; uint64_t x135; uint64_t x136; uint64_t x137; uint64_t x138; uint64_t x139; uint64_t x140; uint64_t x141; uint64_t x142; uint64_t x143; uint64_t x144; uint64_t x145; uint64_t x146; uint64_t x147; uint64_t x148; uint64_t x149; uint64_t x150; uint64_t x151; uint64_t x152; uint64_t x153; uint64_t x154; uint64_t x155; uint64_t x156; uint64_t x157; uint64_t x158; uint64_t x159; uint64_t x160; uint64_t x161; uint64_t x162; uint64_t x163; uint64_t x164; uint64_t x165; uint64_t x166; uint64_t x167; uint64_t x168; uint64_t x169; uint64_t x170; uint64_t x171; uint64_t x172; uint64_t x173; uint64_t x174; uint64_t x175; uint64_t x176; uint64_t x177; uint64_t x178; uint64_t x179; uint64_t x180; uint64_t x181; uint64_t x182; uint64_t x183; uint64_t x184; uint64_t x185; uint64_t x186; uint64_t x187; uint64_t x188; uint64_t x189; uint64_t x190; uint64_t x191; uint64_t x192; uint64_t x193; uint64_t x194; uint64_t x195; uint64_t x196; uint64_t x197; uint64_t x198; uint64_t x199; uint64_t x200; uint64_t x201; uint64_t x202; uint64_t x203; uint64_t x204; uint64_t x205; uint64_t x206; uint64_t x207; uint64_t x208; uint64_t x209; uint64_t x210; uint64_t x211; uint64_t x212; uint64_t x213; uint64_t x214; uint64_t x215; uint64_t x216; uint64_t x217; uint64_t x218; uint64_t x219; uint64_t x220; uint64_t x221; uint64_t x222; uint64_t x223; uint64_t x224; uint64_t x225; uint64_t x226; uint64_t x227; uint64_t x228; uint64_t x229; uint64_t x230; uint64_t x231; uint64_t x232; uint64_t x233; uint64_t x234; uint64_t x235; uint64_t x236; uint64_t x237; uint64_t x238; uint64_t x239; uint64_t x240; uint64_t x241; uint64_t x242; uint64_t x243; uint64_t x244; uint64_t x245; uint64_t x246; uint64_t x247; uint64_t x248; uint64_t x249; uint64_t x250; uint64_t x251; uint64_t x252; uint64_t x253; uint64_t x254; uint64_t x255; uint64_t x256; uint64_t x257; uint64_t x258; uint64_t x259; uint64_t x260; uint64_t x261; uint64_t x262; uint64_t x263; uint64_t x264; uint64_t x265; uint64_t x266; uint64_t x267; uint64_t x268; uint64_t x269; uint64_t x270; uint64_t x271; uint64_t x272; uint64_t x273; uint64_t x274; uint64_t x275; uint64_t x276; uint64_t x277; uint64_t x278; uint64_t x279; uint64_t x280; uint64_t x281; uint64_t x282; uint64_t x283; uint64_t x284; uint64_t x285; uint64_t x286; uint64_t x287; uint64_t x288; uint64_t x289; uint64_t x290; uint64_t x291; uint64_t x292; uint64_t x293; uint64_t x294; uint64_t x295; uint64_t x296; uint64_t x297; uint64_t x298; uint64_t x299; uint64_t x300; uint64_t x301; uint64_t x302; uint64_t x303; uint64_t x304; uint64_t x305; uint64_t x306; uint64_t x307; uint64_t x308; uint64_t x309; uint64_t x310; uint64_t x311; uint64_t x312; uint64_t x313; uint64_t x314; uint64_t x315; uint64_t x316; uint64_t x317; uint64_t x318; uint64_t x319; uint64_t x320; uint64_t x321; uint64_t x322; uint32_t x323; uint64_t x324; uint64_t x325; uint64_t x326; uint64_t x327; uint64_t x328; uint64_t x329; uint64_t x330; uint64_t x331; uint64_t x332; uint64_t x333; uint64_t x334; uint64_t x335; uint64_t x336; uint64_t x337; uint64_t x338; uint64_t x339; uint64_t x340; uint64_t x341; uint64_t x342; uint64_t x343; uint64_t x344; uint64_t x345; uint64_t x346; uint64_t x347; uint32_t x348; uint64_t x349; uint64_t x350; uint32_t x351; uint64_t x352; uint64_t x353; uint32_t x354; uint64_t x355; uint64_t x356; uint32_t x357; uint64_t x358; uint64_t x359; uint32_t x360; uint64_t x361; uint64_t x362; uint32_t x363; uint64_t x364; uint64_t x365; uint32_t x366; uint64_t x367; uint64_t x368; uint32_t x369; uint64_t x370; uint64_t x371; uint32_t x372; uint64_t x373; uint64_t x374; uint32_t x375; uint64_t x376; uint64_t x377; uint32_t x378; uint64_t x379; uint64_t x380; uint32_t x381; uint64_t x382; uint64_t x383; uint32_t x384; uint64_t x385; uint64_t x386; uint32_t x387; uint64_t x388; uint64_t x389; uint32_t x390; uint64_t x391; uint64_t x392; uint32_t x393; uint64_t x394; uint64_t x395; uint32_t x396; uint64_t x397; uint64_t x398; uint32_t x399; uint64_t x400; uint64_t x401; uint32_t x402; uint64_t x403; uint64_t x404; uint32_t x405; uint64_t x406; uint64_t x407; uint32_t x408; uint64_t x409; uint32_t x410; uint32_t x411; uint64_t x412; uint64_t x413; uint32_t x414; uint32_t x415; uint32_t x416; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x417; uint32_t x418; uint32_t x419; x1 = ((uint64_t)(arg1[22]) * UINT16_C(0x239)); x2 = (x1 * 0x2); x3 = ((arg1[22]) * 0x2); x4 = ((uint64_t)(arg1[21]) * UINT16_C(0x239)); x5 = (x4 * 0x2); x6 = ((arg1[21]) * 0x2); x7 = ((uint64_t)(arg1[20]) * UINT16_C(0x239)); x8 = (x7 * 0x2); x9 = ((arg1[20]) * 0x2); x10 = ((uint64_t)(arg1[19]) * UINT16_C(0x239)); x11 = (x10 * 0x2); x12 = ((arg1[19]) * 0x2); x13 = ((uint64_t)(arg1[18]) * UINT16_C(0x239)); x14 = (x13 * 0x2); x15 = ((arg1[18]) * 0x2); x16 = ((uint64_t)(arg1[17]) * UINT16_C(0x239)); x17 = (x16 * 0x2); x18 = ((arg1[17]) * 0x2); x19 = ((uint64_t)(arg1[16]) * UINT16_C(0x239)); x20 = (x19 * 0x2); x21 = ((arg1[16]) * 0x2); x22 = ((uint64_t)(arg1[15]) * UINT16_C(0x239)); x23 = (x22 * 0x2); x24 = ((arg1[15]) * 0x2); x25 = ((uint64_t)(arg1[14]) * UINT16_C(0x239)); x26 = (x25 * 0x2); x27 = ((arg1[14]) * 0x2); x28 = ((uint64_t)(arg1[13]) * UINT16_C(0x239)); x29 = (x28 * 0x2); x30 = ((arg1[13]) * 0x2); x31 = ((uint64_t)(arg1[12]) * UINT16_C(0x239)); x32 = (x31 * 0x2); x33 = ((arg1[12]) * 0x2); x34 = ((arg1[11]) * 0x2); x35 = ((arg1[10]) * 0x2); x36 = ((arg1[9]) * 0x2); x37 = ((arg1[8]) * 0x2); x38 = ((arg1[7]) * 0x2); x39 = ((arg1[6]) * 0x2); x40 = ((arg1[5]) * 0x2); x41 = ((arg1[4]) * 0x2); x42 = ((arg1[3]) * 0x2); x43 = ((arg1[2]) * 0x2); x44 = ((arg1[1]) * 0x2); x45 = ((arg1[22]) * x1); x46 = ((arg1[21]) * x2); x47 = ((arg1[21]) * (x4 * 0x2)); x48 = ((arg1[20]) * (x2 * 0x2)); x49 = ((arg1[20]) * (x5 * 0x2)); x50 = ((arg1[20]) * (x7 * 0x2)); x51 = ((arg1[19]) * x2); x52 = ((arg1[19]) * x5); x53 = ((arg1[19]) * x8); x54 = ((arg1[19]) * x10); x55 = ((arg1[18]) * x2); x56 = ((arg1[18]) * x5); x57 = ((arg1[18]) * (x8 * 0x2)); x58 = ((arg1[18]) * x11); x59 = ((arg1[18]) * x13); x60 = ((arg1[17]) * x2); x61 = ((arg1[17]) * (x5 * 0x2)); x62 = ((arg1[17]) * (x8 * 0x2)); x63 = ((arg1[17]) * x11); x64 = ((arg1[17]) * x14); x65 = ((arg1[17]) * (x16 * 0x2)); x66 = ((arg1[16]) * (x2 * 0x2)); x67 = ((arg1[16]) * (x5 * 0x2)); x68 = ((arg1[16]) * (x8 * 0x2)); x69 = ((arg1[16]) * x11); x70 = ((arg1[16]) * (x14 * 0x2)); x71 = ((arg1[16]) * (x17 * 0x2)); x72 = ((arg1[16]) * (x19 * 0x2)); x73 = ((arg1[15]) * x2); x74 = ((arg1[15]) * x5); x75 = ((arg1[15]) * x8); x76 = ((arg1[15]) * x11); x77 = ((arg1[15]) * x14); x78 = ((arg1[15]) * x17); x79 = ((arg1[15]) * x20); x80 = ((arg1[15]) * x22); x81 = ((arg1[14]) * x2); x82 = ((arg1[14]) * x5); x83 = ((arg1[14]) * (x8 * 0x2)); x84 = ((arg1[14]) * x11); x85 = ((arg1[14]) * x14); x86 = ((arg1[14]) * x17); x87 = ((arg1[14]) * (x20 * 0x2)); x88 = ((arg1[14]) * x23); x89 = ((arg1[14]) * x25); x90 = ((arg1[13]) * x2); x91 = ((arg1[13]) * (x5 * 0x2)); x92 = ((arg1[13]) * (x8 * 0x2)); x93 = ((arg1[13]) * x11); x94 = ((arg1[13]) * x14); x95 = ((arg1[13]) * (x17 * 0x2)); x96 = ((arg1[13]) * (x20 * 0x2)); x97 = ((arg1[13]) * x23); x98 = ((arg1[13]) * x26); x99 = ((arg1[13]) * (x28 * 0x2)); x100 = ((arg1[12]) * (x2 * 0x2)); x101 = ((arg1[12]) * (x5 * 0x2)); x102 = ((arg1[12]) * (x8 * 0x2)); x103 = ((arg1[12]) * x11); x104 = ((arg1[12]) * (x14 * 0x2)); x105 = ((arg1[12]) * (x17 * 0x2)); x106 = ((arg1[12]) * (x20 * 0x2)); x107 = ((arg1[12]) * x23); x108 = ((arg1[12]) * (x26 * 0x2)); x109 = ((arg1[12]) * (x29 * 0x2)); x110 = ((arg1[12]) * (x31 * 0x2)); x111 = ((arg1[11]) * x2); x112 = ((arg1[11]) * x5); x113 = ((arg1[11]) * x8); x114 = ((arg1[11]) * x11); x115 = ((arg1[11]) * x14); x116 = ((arg1[11]) * x17); x117 = ((arg1[11]) * x20); x118 = ((arg1[11]) * x23); x119 = ((arg1[11]) * x26); x120 = ((arg1[11]) * x29); x121 = ((arg1[11]) * (x32 * 0x2)); x122 = ((uint64_t)(arg1[11]) * (arg1[11])); x123 = ((arg1[10]) * x2); x124 = ((arg1[10]) * x5); x125 = ((arg1[10]) * (x8 * 0x2)); x126 = ((arg1[10]) * x11); x127 = ((arg1[10]) * x14); x128 = ((arg1[10]) * x17); x129 = ((arg1[10]) * (x20 * 0x2)); x130 = ((arg1[10]) * x23); x131 = ((arg1[10]) * x26); x132 = ((arg1[10]) * (x29 * 0x2)); x133 = ((uint64_t)(arg1[10]) * (x33 * 0x2)); x134 = ((uint64_t)(arg1[10]) * x34); x135 = ((uint64_t)(arg1[10]) * (arg1[10])); x136 = ((arg1[9]) * x2); x137 = ((arg1[9]) * (x5 * 0x2)); x138 = ((arg1[9]) * (x8 * 0x2)); x139 = ((arg1[9]) * x11); x140 = ((arg1[9]) * x14); x141 = ((arg1[9]) * (x17 * 0x2)); x142 = ((arg1[9]) * (x20 * 0x2)); x143 = ((arg1[9]) * x23); x144 = ((arg1[9]) * (x26 * 0x2)); x145 = ((uint64_t)(arg1[9]) * (x30 * 0x2)); x146 = ((uint64_t)(arg1[9]) * (x33 * 0x2)); x147 = ((uint64_t)(arg1[9]) * x34); x148 = ((uint64_t)(arg1[9]) * (x35 * 0x2)); x149 = ((uint64_t)(arg1[9]) * ((arg1[9]) * 0x2)); x150 = ((arg1[8]) * (x2 * 0x2)); x151 = ((arg1[8]) * (x5 * 0x2)); x152 = ((arg1[8]) * (x8 * 0x2)); x153 = ((arg1[8]) * x11); x154 = ((arg1[8]) * (x14 * 0x2)); x155 = ((arg1[8]) * (x17 * 0x2)); x156 = ((arg1[8]) * (x20 * 0x2)); x157 = ((arg1[8]) * (x23 * 0x2)); x158 = ((uint64_t)(arg1[8]) * (x27 * 0x2)); x159 = ((uint64_t)(arg1[8]) * (x30 * 0x2)); x160 = ((uint64_t)(arg1[8]) * (x33 * 0x2)); x161 = ((uint64_t)(arg1[8]) * (x34 * 0x2)); x162 = ((uint64_t)(arg1[8]) * (x35 * 0x2)); x163 = ((uint64_t)(arg1[8]) * (x36 * 0x2)); x164 = ((uint64_t)(arg1[8]) * ((arg1[8]) * 0x2)); x165 = ((arg1[7]) * x2); x166 = ((arg1[7]) * x5); x167 = ((arg1[7]) * x8); x168 = ((arg1[7]) * x11); x169 = ((arg1[7]) * x14); x170 = ((arg1[7]) * x17); x171 = ((arg1[7]) * (x20 * 0x2)); x172 = ((uint64_t)(arg1[7]) * x24); x173 = ((uint64_t)(arg1[7]) * x27); x174 = ((uint64_t)(arg1[7]) * x30); x175 = ((uint64_t)(arg1[7]) * (x33 * 0x2)); x176 = ((uint64_t)(arg1[7]) * x34); x177 = ((uint64_t)(arg1[7]) * x35); x178 = ((uint64_t)(arg1[7]) * x36); x179 = ((uint64_t)(arg1[7]) * (x37 * 0x2)); x180 = ((uint64_t)(arg1[7]) * (arg1[7])); x181 = ((arg1[6]) * x2); x182 = ((arg1[6]) * x5); x183 = ((arg1[6]) * (x8 * 0x2)); x184 = ((arg1[6]) * x11); x185 = ((arg1[6]) * x14); x186 = ((arg1[6]) * (x17 * 0x2)); x187 = ((uint64_t)(arg1[6]) * (x21 * 0x2)); x188 = ((uint64_t)(arg1[6]) * x24); x189 = ((uint64_t)(arg1[6]) * x27); x190 = ((uint64_t)(arg1[6]) * (x30 * 0x2)); x191 = ((uint64_t)(arg1[6]) * (x33 * 0x2)); x192 = ((uint64_t)(arg1[6]) * x34); x193 = ((uint64_t)(arg1[6]) * x35); x194 = ((uint64_t)(arg1[6]) * (x36 * 0x2)); x195 = ((uint64_t)(arg1[6]) * (x37 * 0x2)); x196 = ((uint64_t)(arg1[6]) * x38); x197 = ((uint64_t)(arg1[6]) * (arg1[6])); x198 = ((arg1[5]) * x2); x199 = ((arg1[5]) * (x5 * 0x2)); x200 = ((arg1[5]) * (x8 * 0x2)); x201 = ((arg1[5]) * x11); x202 = ((arg1[5]) * (x14 * 0x2)); x203 = ((uint64_t)(arg1[5]) * (x18 * 0x2)); x204 = ((uint64_t)(arg1[5]) * (x21 * 0x2)); x205 = ((uint64_t)(arg1[5]) * x24); x206 = ((uint64_t)(arg1[5]) * (x27 * 0x2)); x207 = ((uint64_t)(arg1[5]) * (x30 * 0x2)); x208 = ((uint64_t)(arg1[5]) * (x33 * 0x2)); x209 = ((uint64_t)(arg1[5]) * x34); x210 = ((uint64_t)(arg1[5]) * (x35 * 0x2)); x211 = ((uint64_t)(arg1[5]) * (x36 * 0x2)); x212 = ((uint64_t)(arg1[5]) * (x37 * 0x2)); x213 = ((uint64_t)(arg1[5]) * x38); x214 = ((uint64_t)(arg1[5]) * (x39 * 0x2)); x215 = ((uint64_t)(arg1[5]) * ((arg1[5]) * 0x2)); x216 = ((arg1[4]) * (x2 * 0x2)); x217 = ((arg1[4]) * (x5 * 0x2)); x218 = ((arg1[4]) * (x8 * 0x2)); x219 = ((arg1[4]) * (x11 * 0x2)); x220 = ((uint64_t)(arg1[4]) * (x15 * 0x2)); x221 = ((uint64_t)(arg1[4]) * (x18 * 0x2)); x222 = ((uint64_t)(arg1[4]) * (x21 * 0x2)); x223 = ((uint64_t)(arg1[4]) * (x24 * 0x2)); x224 = ((uint64_t)(arg1[4]) * (x27 * 0x2)); x225 = ((uint64_t)(arg1[4]) * (x30 * 0x2)); x226 = ((uint64_t)(arg1[4]) * (x33 * 0x2)); x227 = ((uint64_t)(arg1[4]) * (x34 * 0x2)); x228 = ((uint64_t)(arg1[4]) * (x35 * 0x2)); x229 = ((uint64_t)(arg1[4]) * (x36 * 0x2)); x230 = ((uint64_t)(arg1[4]) * (x37 * 0x2)); x231 = ((uint64_t)(arg1[4]) * (x38 * 0x2)); x232 = ((uint64_t)(arg1[4]) * (x39 * 0x2)); x233 = ((uint64_t)(arg1[4]) * (x40 * 0x2)); x234 = ((uint64_t)(arg1[4]) * ((arg1[4]) * 0x2)); x235 = ((arg1[3]) * x2); x236 = ((arg1[3]) * x5); x237 = ((arg1[3]) * (x8 * 0x2)); x238 = ((uint64_t)(arg1[3]) * x12); x239 = ((uint64_t)(arg1[3]) * x15); x240 = ((uint64_t)(arg1[3]) * x18); x241 = ((uint64_t)(arg1[3]) * (x21 * 0x2)); x242 = ((uint64_t)(arg1[3]) * x24); x243 = ((uint64_t)(arg1[3]) * x27); x244 = ((uint64_t)(arg1[3]) * x30); x245 = ((uint64_t)(arg1[3]) * (x33 * 0x2)); x246 = ((uint64_t)(arg1[3]) * x34); x247 = ((uint64_t)(arg1[3]) * x35); x248 = ((uint64_t)(arg1[3]) * x36); x249 = ((uint64_t)(arg1[3]) * (x37 * 0x2)); x250 = ((uint64_t)(arg1[3]) * x38); x251 = ((uint64_t)(arg1[3]) * x39); x252 = ((uint64_t)(arg1[3]) * x40); x253 = ((uint64_t)(arg1[3]) * (x41 * 0x2)); x254 = ((uint64_t)(arg1[3]) * (arg1[3])); x255 = ((arg1[2]) * x2); x256 = ((arg1[2]) * (x5 * 0x2)); x257 = ((uint64_t)(arg1[2]) * (x9 * 0x2)); x258 = ((uint64_t)(arg1[2]) * x12); x259 = ((uint64_t)(arg1[2]) * x15); x260 = ((uint64_t)(arg1[2]) * (x18 * 0x2)); x261 = ((uint64_t)(arg1[2]) * (x21 * 0x2)); x262 = ((uint64_t)(arg1[2]) * x24); x263 = ((uint64_t)(arg1[2]) * x27); x264 = ((uint64_t)(arg1[2]) * (x30 * 0x2)); x265 = ((uint64_t)(arg1[2]) * (x33 * 0x2)); x266 = ((uint64_t)(arg1[2]) * x34); x267 = ((uint64_t)(arg1[2]) * x35); x268 = ((uint64_t)(arg1[2]) * (x36 * 0x2)); x269 = ((uint64_t)(arg1[2]) * (x37 * 0x2)); x270 = ((uint64_t)(arg1[2]) * x38); x271 = ((uint64_t)(arg1[2]) * x39); x272 = ((uint64_t)(arg1[2]) * (x40 * 0x2)); x273 = ((uint64_t)(arg1[2]) * (x41 * 0x2)); x274 = ((uint64_t)(arg1[2]) * x42); x275 = ((uint64_t)(arg1[2]) * (arg1[2])); x276 = ((arg1[1]) * (x2 * 0x2)); x277 = ((uint64_t)(arg1[1]) * (x6 * 0x2)); x278 = ((uint64_t)(arg1[1]) * (x9 * 0x2)); x279 = ((uint64_t)(arg1[1]) * x12); x280 = ((uint64_t)(arg1[1]) * (x15 * 0x2)); x281 = ((uint64_t)(arg1[1]) * (x18 * 0x2)); x282 = ((uint64_t)(arg1[1]) * (x21 * 0x2)); x283 = ((uint64_t)(arg1[1]) * x24); x284 = ((uint64_t)(arg1[1]) * (x27 * 0x2)); x285 = ((uint64_t)(arg1[1]) * (x30 * 0x2)); x286 = ((uint64_t)(arg1[1]) * (x33 * 0x2)); x287 = ((uint64_t)(arg1[1]) * x34); x288 = ((uint64_t)(arg1[1]) * (x35 * 0x2)); x289 = ((uint64_t)(arg1[1]) * (x36 * 0x2)); x290 = ((uint64_t)(arg1[1]) * (x37 * 0x2)); x291 = ((uint64_t)(arg1[1]) * x38); x292 = ((uint64_t)(arg1[1]) * (x39 * 0x2)); x293 = ((uint64_t)(arg1[1]) * (x40 * 0x2)); x294 = ((uint64_t)(arg1[1]) * (x41 * 0x2)); x295 = ((uint64_t)(arg1[1]) * x42); x296 = ((uint64_t)(arg1[1]) * (x43 * 0x2)); x297 = ((uint64_t)(arg1[1]) * ((arg1[1]) * 0x2)); x298 = ((uint64_t)(arg1[0]) * x3); x299 = ((uint64_t)(arg1[0]) * x6); x300 = ((uint64_t)(arg1[0]) * x9); x301 = ((uint64_t)(arg1[0]) * x12); x302 = ((uint64_t)(arg1[0]) * x15); x303 = ((uint64_t)(arg1[0]) * x18); x304 = ((uint64_t)(arg1[0]) * x21); x305 = ((uint64_t)(arg1[0]) * x24); x306 = ((uint64_t)(arg1[0]) * x27); x307 = ((uint64_t)(arg1[0]) * x30); x308 = ((uint64_t)(arg1[0]) * x33); x309 = ((uint64_t)(arg1[0]) * x34); x310 = ((uint64_t)(arg1[0]) * x35); x311 = ((uint64_t)(arg1[0]) * x36); x312 = ((uint64_t)(arg1[0]) * x37); x313 = ((uint64_t)(arg1[0]) * x38); x314 = ((uint64_t)(arg1[0]) * x39); x315 = ((uint64_t)(arg1[0]) * x40); x316 = ((uint64_t)(arg1[0]) * x41); x317 = ((uint64_t)(arg1[0]) * x42); x318 = ((uint64_t)(arg1[0]) * x43); x319 = ((uint64_t)(arg1[0]) * x44); x320 = ((uint64_t)(arg1[0]) * (arg1[0])); x321 = (x320 + (x276 + (x256 + (x237 + (x219 + (x202 + (x186 + (x171 + (x157 + (x144 + (x132 + x121))))))))))); x322 = (x321 >> 23); x323 = (uint32_t)(x321 & UINT32_C(0x7fffff)); x324 = (x298 + (x277 + (x257 + (x238 + (x220 + (x203 + (x187 + (x172 + (x158 + (x145 + (x133 + x122))))))))))); x325 = (x299 + (x278 + (x258 + (x239 + (x221 + (x204 + (x188 + (x173 + (x159 + (x146 + (x134 + x45))))))))))); x326 = (x300 + (x279 + (x259 + (x240 + (x222 + (x205 + (x189 + (x174 + (x160 + (x147 + (x135 + x46))))))))))); x327 = (x301 + (x280 + (x260 + (x241 + (x223 + (x206 + (x190 + (x175 + (x161 + (x148 + (x48 + x47))))))))))); x328 = (x302 + (x281 + (x261 + (x242 + (x224 + (x207 + (x191 + (x176 + (x162 + (x149 + (x51 + x49))))))))))); x329 = (x303 + (x282 + (x262 + (x243 + (x225 + (x208 + (x192 + (x177 + (x163 + (x55 + (x52 + x50))))))))))); x330 = (x304 + (x283 + (x263 + (x244 + (x226 + (x209 + (x193 + (x178 + (x164 + (x60 + (x56 + x53))))))))))); x331 = (x305 + (x284 + (x264 + (x245 + (x227 + (x210 + (x194 + (x179 + (x66 + (x61 + (x57 + x54))))))))))); x332 = (x306 + (x285 + (x265 + (x246 + (x228 + (x211 + (x195 + (x180 + (x73 + (x67 + (x62 + x58))))))))))); x333 = (x307 + (x286 + (x266 + (x247 + (x229 + (x212 + (x196 + (x81 + (x74 + (x68 + (x63 + x59))))))))))); x334 = (x308 + (x287 + (x267 + (x248 + (x230 + (x213 + (x197 + (x90 + (x82 + (x75 + (x69 + x64))))))))))); x335 = (x309 + (x288 + (x268 + (x249 + (x231 + (x214 + (x100 + (x91 + (x83 + (x76 + (x70 + x65))))))))))); x336 = (x310 + (x289 + (x269 + (x250 + (x232 + (x215 + (x111 + (x101 + (x92 + (x84 + (x77 + x71))))))))))); x337 = (x311 + (x290 + (x270 + (x251 + (x233 + (x123 + (x112 + (x102 + (x93 + (x85 + (x78 + x72))))))))))); x338 = (x312 + (x291 + (x271 + (x252 + (x234 + (x136 + (x124 + (x113 + (x103 + (x94 + (x86 + x79))))))))))); x339 = (x313 + (x292 + (x272 + (x253 + (x150 + (x137 + (x125 + (x114 + (x104 + (x95 + (x87 + x80))))))))))); x340 = (x314 + (x293 + (x273 + (x254 + (x165 + (x151 + (x138 + (x126 + (x115 + (x105 + (x96 + x88))))))))))); x341 = (x315 + (x294 + (x274 + (x181 + (x166 + (x152 + (x139 + (x127 + (x116 + (x106 + (x97 + x89))))))))))); x342 = (x316 + (x295 + (x275 + (x198 + (x182 + (x167 + (x153 + (x140 + (x128 + (x117 + (x107 + x98))))))))))); x343 = (x317 + (x296 + (x216 + (x199 + (x183 + (x168 + (x154 + (x141 + (x129 + (x118 + (x108 + x99))))))))))); x344 = (x318 + (x297 + (x235 + (x217 + (x200 + (x184 + (x169 + (x155 + (x142 + (x130 + (x119 + x109))))))))))); x345 = (x319 + (x255 + (x236 + (x218 + (x201 + (x185 + (x170 + (x156 + (x143 + (x131 + (x120 + x110))))))))))); x346 = (x322 + x345); x347 = (x346 >> 22); x348 = (uint32_t)(x346 & UINT32_C(0x3fffff)); x349 = (x347 + x344); x350 = (x349 >> 22); x351 = (uint32_t)(x349 & UINT32_C(0x3fffff)); x352 = (x350 + x343); x353 = (x352 >> 23); x354 = (uint32_t)(x352 & UINT32_C(0x7fffff)); x355 = (x353 + x342); x356 = (x355 >> 22); x357 = (uint32_t)(x355 & UINT32_C(0x3fffff)); x358 = (x356 + x341); x359 = (x358 >> 22); x360 = (uint32_t)(x358 & UINT32_C(0x3fffff)); x361 = (x359 + x340); x362 = (x361 >> 22); x363 = (uint32_t)(x361 & UINT32_C(0x3fffff)); x364 = (x362 + x339); x365 = (x364 >> 23); x366 = (uint32_t)(x364 & UINT32_C(0x7fffff)); x367 = (x365 + x338); x368 = (x367 >> 22); x369 = (uint32_t)(x367 & UINT32_C(0x3fffff)); x370 = (x368 + x337); x371 = (x370 >> 22); x372 = (uint32_t)(x370 & UINT32_C(0x3fffff)); x373 = (x371 + x336); x374 = (x373 >> 22); x375 = (uint32_t)(x373 & UINT32_C(0x3fffff)); x376 = (x374 + x335); x377 = (x376 >> 23); x378 = (uint32_t)(x376 & UINT32_C(0x7fffff)); x379 = (x377 + x334); x380 = (x379 >> 22); x381 = (uint32_t)(x379 & UINT32_C(0x3fffff)); x382 = (x380 + x333); x383 = (x382 >> 22); x384 = (uint32_t)(x382 & UINT32_C(0x3fffff)); x385 = (x383 + x332); x386 = (x385 >> 22); x387 = (uint32_t)(x385 & UINT32_C(0x3fffff)); x388 = (x386 + x331); x389 = (x388 >> 23); x390 = (uint32_t)(x388 & UINT32_C(0x7fffff)); x391 = (x389 + x330); x392 = (x391 >> 22); x393 = (uint32_t)(x391 & UINT32_C(0x3fffff)); x394 = (x392 + x329); x395 = (x394 >> 22); x396 = (uint32_t)(x394 & UINT32_C(0x3fffff)); x397 = (x395 + x328); x398 = (x397 >> 22); x399 = (uint32_t)(x397 & UINT32_C(0x3fffff)); x400 = (x398 + x327); x401 = (x400 >> 23); x402 = (uint32_t)(x400 & UINT32_C(0x7fffff)); x403 = (x401 + x326); x404 = (x403 >> 22); x405 = (uint32_t)(x403 & UINT32_C(0x3fffff)); x406 = (x404 + x325); x407 = (x406 >> 22); x408 = (uint32_t)(x406 & UINT32_C(0x3fffff)); x409 = (x407 + x324); x410 = (uint32_t)(x409 >> 22); x411 = (uint32_t)(x409 & UINT32_C(0x3fffff)); x412 = ((uint64_t)UINT16_C(0x239) * x410); x413 = (x323 + x412); x414 = (uint32_t)(x413 >> 23); x415 = (uint32_t)(x413 & UINT32_C(0x7fffff)); x416 = (x414 + x348); x417 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x416 >> 22); x418 = (x416 & UINT32_C(0x3fffff)); x419 = (x417 + x351); out1[0] = x415; out1[1] = x418; out1[2] = x419; out1[3] = x354; out1[4] = x357; out1[5] = x360; out1[6] = x363; out1[7] = x366; out1[8] = x369; out1[9] = x372; out1[10] = x375; out1[11] = x378; out1[12] = x381; out1[13] = x384; out1[14] = x387; out1[15] = x390; out1[16] = x393; out1[17] = x396; out1[18] = x399; out1[19] = x402; out1[20] = x405; out1[21] = x408; out1[22] = x411; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_carry reduces a field element. * Postconditions: * eval out1 mod m = eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] * Output Bounds: * out1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_carry( uint32_t out1[23], const uint32_t arg1[23]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint32_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint32_t x29; uint32_t x30; uint32_t x31; uint32_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; x1 = (arg1[0]); x2 = ((x1 >> 23) + (arg1[1])); x3 = ((x2 >> 22) + (arg1[2])); x4 = ((x3 >> 22) + (arg1[3])); x5 = ((x4 >> 23) + (arg1[4])); x6 = ((x5 >> 22) + (arg1[5])); x7 = ((x6 >> 22) + (arg1[6])); x8 = ((x7 >> 22) + (arg1[7])); x9 = ((x8 >> 23) + (arg1[8])); x10 = ((x9 >> 22) + (arg1[9])); x11 = ((x10 >> 22) + (arg1[10])); x12 = ((x11 >> 22) + (arg1[11])); x13 = ((x12 >> 23) + (arg1[12])); x14 = ((x13 >> 22) + (arg1[13])); x15 = ((x14 >> 22) + (arg1[14])); x16 = ((x15 >> 22) + (arg1[15])); x17 = ((x16 >> 23) + (arg1[16])); x18 = ((x17 >> 22) + (arg1[17])); x19 = ((x18 >> 22) + (arg1[18])); x20 = ((x19 >> 22) + (arg1[19])); x21 = ((x20 >> 23) + (arg1[20])); x22 = ((x21 >> 22) + (arg1[21])); x23 = ((x22 >> 22) + (arg1[22])); x24 = ((x1 & UINT32_C(0x7fffff)) + (UINT16_C(0x239) * (x23 >> 22))); x25 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x24 >> 23) + (x2 & UINT32_C(0x3fffff))); x26 = (x24 & UINT32_C(0x7fffff)); x27 = (x25 & UINT32_C(0x3fffff)); x28 = ((fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x25 >> 22) + (x3 & UINT32_C(0x3fffff))); x29 = (x4 & UINT32_C(0x7fffff)); x30 = (x5 & UINT32_C(0x3fffff)); x31 = (x6 & UINT32_C(0x3fffff)); x32 = (x7 & UINT32_C(0x3fffff)); x33 = (x8 & UINT32_C(0x7fffff)); x34 = (x9 & UINT32_C(0x3fffff)); x35 = (x10 & UINT32_C(0x3fffff)); x36 = (x11 & UINT32_C(0x3fffff)); x37 = (x12 & UINT32_C(0x7fffff)); x38 = (x13 & UINT32_C(0x3fffff)); x39 = (x14 & UINT32_C(0x3fffff)); x40 = (x15 & UINT32_C(0x3fffff)); x41 = (x16 & UINT32_C(0x7fffff)); x42 = (x17 & UINT32_C(0x3fffff)); x43 = (x18 & UINT32_C(0x3fffff)); x44 = (x19 & UINT32_C(0x3fffff)); x45 = (x20 & UINT32_C(0x7fffff)); x46 = (x21 & UINT32_C(0x3fffff)); x47 = (x22 & UINT32_C(0x3fffff)); x48 = (x23 & UINT32_C(0x3fffff)); out1[0] = x26; out1[1] = x27; out1[2] = x28; out1[3] = x29; out1[4] = x30; out1[5] = x31; out1[6] = x32; out1[7] = x33; out1[8] = x34; out1[9] = x35; out1[10] = x36; out1[11] = x37; out1[12] = x38; out1[13] = x39; out1[14] = x40; out1[15] = x41; out1[16] = x42; out1[17] = x43; out1[18] = x44; out1[19] = x45; out1[20] = x46; out1[21] = x47; out1[22] = x48; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_add adds two field elements. * Postconditions: * eval out1 mod m = (eval arg1 + eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * arg2: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * Output Bounds: * out1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_add( uint32_t out1[23], const uint32_t arg1[23], const uint32_t arg2[23]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; x1 = ((arg1[0]) + (arg2[0])); x2 = ((arg1[1]) + (arg2[1])); x3 = ((arg1[2]) + (arg2[2])); x4 = ((arg1[3]) + (arg2[3])); x5 = ((arg1[4]) + (arg2[4])); x6 = ((arg1[5]) + (arg2[5])); x7 = ((arg1[6]) + (arg2[6])); x8 = ((arg1[7]) + (arg2[7])); x9 = ((arg1[8]) + (arg2[8])); x10 = ((arg1[9]) + (arg2[9])); x11 = ((arg1[10]) + (arg2[10])); x12 = ((arg1[11]) + (arg2[11])); x13 = ((arg1[12]) + (arg2[12])); x14 = ((arg1[13]) + (arg2[13])); x15 = ((arg1[14]) + (arg2[14])); x16 = ((arg1[15]) + (arg2[15])); x17 = ((arg1[16]) + (arg2[16])); x18 = ((arg1[17]) + (arg2[17])); x19 = ((arg1[18]) + (arg2[18])); x20 = ((arg1[19]) + (arg2[19])); x21 = ((arg1[20]) + (arg2[20])); x22 = ((arg1[21]) + (arg2[21])); x23 = ((arg1[22]) + (arg2[22])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; out1[11] = x12; out1[12] = x13; out1[13] = x14; out1[14] = x15; out1[15] = x16; out1[16] = x17; out1[17] = x18; out1[18] = x19; out1[19] = x20; out1[20] = x21; out1[21] = x22; out1[22] = x23; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_sub subtracts two field elements. * Postconditions: * eval out1 mod m = (eval arg1 - eval arg2) mod m * * Input Bounds: * arg1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * arg2: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * Output Bounds: * out1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_sub( uint32_t out1[23], const uint32_t arg1[23], const uint32_t arg2[23]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; x1 = ((UINT32_C(0xfffb8e) + (arg1[0])) - (arg2[0])); x2 = ((UINT32_C(0x7ffffe) + (arg1[1])) - (arg2[1])); x3 = ((UINT32_C(0x7ffffe) + (arg1[2])) - (arg2[2])); x4 = ((UINT32_C(0xfffffe) + (arg1[3])) - (arg2[3])); x5 = ((UINT32_C(0x7ffffe) + (arg1[4])) - (arg2[4])); x6 = ((UINT32_C(0x7ffffe) + (arg1[5])) - (arg2[5])); x7 = ((UINT32_C(0x7ffffe) + (arg1[6])) - (arg2[6])); x8 = ((UINT32_C(0xfffffe) + (arg1[7])) - (arg2[7])); x9 = ((UINT32_C(0x7ffffe) + (arg1[8])) - (arg2[8])); x10 = ((UINT32_C(0x7ffffe) + (arg1[9])) - (arg2[9])); x11 = ((UINT32_C(0x7ffffe) + (arg1[10])) - (arg2[10])); x12 = ((UINT32_C(0xfffffe) + (arg1[11])) - (arg2[11])); x13 = ((UINT32_C(0x7ffffe) + (arg1[12])) - (arg2[12])); x14 = ((UINT32_C(0x7ffffe) + (arg1[13])) - (arg2[13])); x15 = ((UINT32_C(0x7ffffe) + (arg1[14])) - (arg2[14])); x16 = ((UINT32_C(0xfffffe) + (arg1[15])) - (arg2[15])); x17 = ((UINT32_C(0x7ffffe) + (arg1[16])) - (arg2[16])); x18 = ((UINT32_C(0x7ffffe) + (arg1[17])) - (arg2[17])); x19 = ((UINT32_C(0x7ffffe) + (arg1[18])) - (arg2[18])); x20 = ((UINT32_C(0xfffffe) + (arg1[19])) - (arg2[19])); x21 = ((UINT32_C(0x7ffffe) + (arg1[20])) - (arg2[20])); x22 = ((UINT32_C(0x7ffffe) + (arg1[21])) - (arg2[21])); x23 = ((UINT32_C(0x7ffffe) + (arg1[22])) - (arg2[22])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; out1[11] = x12; out1[12] = x13; out1[13] = x14; out1[14] = x15; out1[15] = x16; out1[16] = x17; out1[17] = x18; out1[18] = x19; out1[19] = x20; out1[20] = x21; out1[21] = x22; out1[22] = x23; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_opp negates a field element. * Postconditions: * eval out1 mod m = -eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * Output Bounds: * out1: [[0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0x1800000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000], [0x0 ~> 0xc00000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_opp( uint32_t out1[23], const uint32_t arg1[23]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; x1 = (UINT32_C(0xfffb8e) - (arg1[0])); x2 = (UINT32_C(0x7ffffe) - (arg1[1])); x3 = (UINT32_C(0x7ffffe) - (arg1[2])); x4 = (UINT32_C(0xfffffe) - (arg1[3])); x5 = (UINT32_C(0x7ffffe) - (arg1[4])); x6 = (UINT32_C(0x7ffffe) - (arg1[5])); x7 = (UINT32_C(0x7ffffe) - (arg1[6])); x8 = (UINT32_C(0xfffffe) - (arg1[7])); x9 = (UINT32_C(0x7ffffe) - (arg1[8])); x10 = (UINT32_C(0x7ffffe) - (arg1[9])); x11 = (UINT32_C(0x7ffffe) - (arg1[10])); x12 = (UINT32_C(0xfffffe) - (arg1[11])); x13 = (UINT32_C(0x7ffffe) - (arg1[12])); x14 = (UINT32_C(0x7ffffe) - (arg1[13])); x15 = (UINT32_C(0x7ffffe) - (arg1[14])); x16 = (UINT32_C(0xfffffe) - (arg1[15])); x17 = (UINT32_C(0x7ffffe) - (arg1[16])); x18 = (UINT32_C(0x7ffffe) - (arg1[17])); x19 = (UINT32_C(0x7ffffe) - (arg1[18])); x20 = (UINT32_C(0xfffffe) - (arg1[19])); x21 = (UINT32_C(0x7ffffe) - (arg1[20])); x22 = (UINT32_C(0x7ffffe) - (arg1[21])); x23 = (UINT32_C(0x7ffffe) - (arg1[22])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; out1[11] = x12; out1[12] = x13; out1[13] = x14; out1[14] = x15; out1[15] = x16; out1[16] = x17; out1[17] = x18; out1[18] = x19; out1[19] = x20; out1[20] = x21; out1[21] = x22; out1[22] = x23; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz is a multi-limb conditional select. * Postconditions: * eval out1 = (if arg1 = 0 then eval arg2 else eval arg3) * * Input Bounds: * arg1: [0x0 ~> 0x1] * arg2: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * arg3: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] * Output Bounds: * out1: [[0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff], [0x0 ~> 0xffffffff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( uint32_t out1[23], fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 arg1, const uint32_t arg2[23], const uint32_t arg3[23]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x1, arg1, (arg2[0]), (arg3[0])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x2, arg1, (arg2[1]), (arg3[1])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x3, arg1, (arg2[2]), (arg3[2])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x4, arg1, (arg2[3]), (arg3[3])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x5, arg1, (arg2[4]), (arg3[4])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x6, arg1, (arg2[5]), (arg3[5])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x7, arg1, (arg2[6]), (arg3[6])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x8, arg1, (arg2[7]), (arg3[7])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x9, arg1, (arg2[8]), (arg3[8])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x10, arg1, (arg2[9]), (arg3[9])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x11, arg1, (arg2[10]), (arg3[10])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x12, arg1, (arg2[11]), (arg3[11])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x13, arg1, (arg2[12]), (arg3[12])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x14, arg1, (arg2[13]), (arg3[13])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x15, arg1, (arg2[14]), (arg3[14])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x16, arg1, (arg2[15]), (arg3[15])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x17, arg1, (arg2[16]), (arg3[16])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x18, arg1, (arg2[17]), (arg3[17])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x19, arg1, (arg2[18]), (arg3[18])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x20, arg1, (arg2[19]), (arg3[19])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x21, arg1, (arg2[20]), (arg3[20])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x22, arg1, (arg2[21]), (arg3[21])); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32( &x23, arg1, (arg2[22]), (arg3[22])); out1[0] = x1; out1[1] = x2; out1[2] = x3; out1[3] = x4; out1[4] = x5; out1[5] = x6; out1[6] = x7; out1[7] = x8; out1[8] = x9; out1[9] = x10; out1[10] = x11; out1[11] = x12; out1[12] = x13; out1[13] = x14; out1[14] = x15; out1[15] = x16; out1[16] = x17; out1[17] = x18; out1[18] = x19; out1[19] = x20; out1[20] = x21; out1[21] = x22; out1[22] = x23; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes serializes a field element to bytes in little-endian order. * Postconditions: * out1 = map (Îģ x, ⌊((eval arg1 mod m) mod 2^(8 * (x + 1))) / 2^(8 * x)⌋) [0..63] * * Input Bounds: * arg1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] * Output Bounds: * out1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes( uint8_t out1[64], const uint32_t arg1[23]) { uint32_t x1; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x2; uint32_t x3; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x4; uint32_t x5; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x6; uint32_t x7; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x8; uint32_t x9; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x10; uint32_t x11; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x12; uint32_t x13; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x14; uint32_t x15; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x16; uint32_t x17; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x18; uint32_t x19; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x20; uint32_t x21; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x22; uint32_t x23; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x24; uint32_t x25; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x26; uint32_t x27; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x28; uint32_t x29; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x30; uint32_t x31; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x32; uint32_t x33; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x34; uint32_t x35; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x36; uint32_t x37; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x38; uint32_t x39; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x40; uint32_t x41; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x42; uint32_t x43; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x44; uint32_t x45; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x46; uint32_t x47; uint32_t x48; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x49; uint32_t x50; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x51; uint32_t x52; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x53; uint32_t x54; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x55; uint32_t x56; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x57; uint32_t x58; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x59; uint32_t x60; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x61; uint32_t x62; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x63; uint32_t x64; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x65; uint32_t x66; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x67; uint32_t x68; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x69; uint32_t x70; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x71; uint32_t x72; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x73; uint32_t x74; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x75; uint32_t x76; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x77; uint32_t x78; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x79; uint32_t x80; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x81; uint32_t x82; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x83; uint32_t x84; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x85; uint32_t x86; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x87; uint32_t x88; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x89; uint32_t x90; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x91; uint32_t x92; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x93; uint32_t x94; uint32_t x95; uint32_t x96; uint32_t x97; uint32_t x98; uint32_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; uint32_t x104; uint32_t x105; uint32_t x106; uint32_t x107; uint32_t x108; uint32_t x109; uint32_t x110; uint32_t x111; uint32_t x112; uint32_t x113; uint8_t x114; uint32_t x115; uint8_t x116; uint8_t x117; uint32_t x118; uint8_t x119; uint32_t x120; uint8_t x121; uint32_t x122; uint8_t x123; uint8_t x124; uint32_t x125; uint8_t x126; uint32_t x127; uint8_t x128; uint32_t x129; uint8_t x130; uint8_t x131; uint32_t x132; uint8_t x133; uint32_t x134; uint8_t x135; uint32_t x136; uint8_t x137; uint8_t x138; uint32_t x139; uint8_t x140; uint32_t x141; uint8_t x142; uint8_t x143; uint8_t x144; uint32_t x145; uint8_t x146; uint8_t x147; uint32_t x148; uint8_t x149; uint32_t x150; uint8_t x151; uint32_t x152; uint8_t x153; uint8_t x154; uint32_t x155; uint8_t x156; uint32_t x157; uint8_t x158; uint32_t x159; uint8_t x160; uint8_t x161; uint32_t x162; uint8_t x163; uint32_t x164; uint8_t x165; uint32_t x166; uint8_t x167; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x168; uint32_t x169; uint8_t x170; uint32_t x171; uint8_t x172; uint8_t x173; uint32_t x174; uint8_t x175; uint32_t x176; uint8_t x177; uint32_t x178; uint8_t x179; uint8_t x180; uint32_t x181; uint8_t x182; uint32_t x183; uint8_t x184; uint32_t x185; uint8_t x186; uint8_t x187; uint32_t x188; uint8_t x189; uint32_t x190; uint8_t x191; uint32_t x192; uint8_t x193; uint8_t x194; uint32_t x195; uint8_t x196; uint32_t x197; uint8_t x198; uint8_t x199; uint8_t x200; uint32_t x201; uint8_t x202; uint8_t x203; uint32_t x204; uint8_t x205; uint32_t x206; uint8_t x207; uint32_t x208; uint8_t x209; uint8_t x210; uint32_t x211; uint8_t x212; uint32_t x213; uint8_t x214; uint32_t x215; uint8_t x216; uint8_t x217; uint32_t x218; uint8_t x219; uint32_t x220; uint8_t x221; uint32_t x222; uint8_t x223; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x224; uint32_t x225; uint8_t x226; uint32_t x227; uint8_t x228; uint8_t x229; uint32_t x230; uint8_t x231; uint32_t x232; uint8_t x233; uint32_t x234; uint8_t x235; uint8_t x236; uint32_t x237; uint8_t x238; uint32_t x239; uint8_t x240; uint32_t x241; uint8_t x242; uint8_t x243; uint32_t x244; uint8_t x245; uint32_t x246; uint8_t x247; uint32_t x248; uint8_t x249; uint8_t x250; uint32_t x251; uint8_t x252; uint32_t x253; uint8_t x254; uint8_t x255; fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u23( &x1, &x2, 0x0, (arg1[0]), UINT32_C(0x7ffdc7)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x3, &x4, x2, (arg1[1]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x5, &x6, x4, (arg1[2]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u23( &x7, &x8, x6, (arg1[3]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x9, &x10, x8, (arg1[4]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x11, &x12, x10, (arg1[5]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x13, &x14, x12, (arg1[6]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u23( &x15, &x16, x14, (arg1[7]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x17, &x18, x16, (arg1[8]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x19, &x20, x18, (arg1[9]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x21, &x22, x20, (arg1[10]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u23( &x23, &x24, x22, (arg1[11]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x25, &x26, x24, (arg1[12]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x27, &x28, x26, (arg1[13]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x29, &x30, x28, (arg1[14]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u23( &x31, &x32, x30, (arg1[15]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x33, &x34, x32, (arg1[16]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x35, &x36, x34, (arg1[17]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x37, &x38, x36, (arg1[18]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u23( &x39, &x40, x38, (arg1[19]), UINT32_C(0x7fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x41, &x42, x40, (arg1[20]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x43, &x44, x42, (arg1[21]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_subborrowx_u22( &x45, &x46, x44, (arg1[22]), UINT32_C(0x3fffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_cmovznz_u32(&x47, x46, 0x0, UINT32_C(0xffffffff)); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u23( &x48, &x49, 0x0, x1, (x47 & UINT32_C(0x7ffdc7))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x50, &x51, x49, x3, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x52, &x53, x51, x5, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u23( &x54, &x55, x53, x7, (x47 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x56, &x57, x55, x9, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x58, &x59, x57, x11, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x60, &x61, x59, x13, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u23( &x62, &x63, x61, x15, (x47 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x64, &x65, x63, x17, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x66, &x67, x65, x19, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x68, &x69, x67, x21, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u23( &x70, &x71, x69, x23, (x47 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x72, &x73, x71, x25, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x74, &x75, x73, x27, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x76, &x77, x75, x29, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u23( &x78, &x79, x77, x31, (x47 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x80, &x81, x79, x33, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x82, &x83, x81, x35, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x84, &x85, x83, x37, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u23( &x86, &x87, x85, x39, (x47 & UINT32_C(0x7fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x88, &x89, x87, x41, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x90, &x91, x89, x43, (x47 & UINT32_C(0x3fffff))); fiat_id_tc26_gost_3410_2012_512_paramSetC_addcarryx_u22( &x92, &x93, x91, x45, (x47 & UINT32_C(0x3fffff))); x94 = (x92 << 2); x95 = (x90 << 4); x96 = (x88 << 6); x97 = (x86 << 7); x98 = (x84 * (uint32_t)0x2); x99 = (x82 << 3); x100 = (x80 << 5); x101 = (x78 << 6); x102 = (x74 << 2); x103 = (x72 << 4); x104 = (x70 << 5); x105 = (x68 << 7); x106 = (x66 * (uint32_t)0x2); x107 = (x64 << 3); x108 = (x62 << 4); x109 = (x60 << 6); x110 = (x56 << 2); x111 = (x54 << 3); x112 = (x52 << 5); x113 = (x50 << 7); x114 = (uint8_t)(x48 & UINT8_C(0xff)); x115 = (x48 >> 8); x116 = (uint8_t)(x115 & UINT8_C(0xff)); x117 = (uint8_t)(x115 >> 8); x118 = (x113 + (uint32_t)x117); x119 = (uint8_t)(x118 & UINT8_C(0xff)); x120 = (x118 >> 8); x121 = (uint8_t)(x120 & UINT8_C(0xff)); x122 = (x120 >> 8); x123 = (uint8_t)(x122 & UINT8_C(0xff)); x124 = (uint8_t)(x122 >> 8); x125 = (x112 + (uint32_t)x124); x126 = (uint8_t)(x125 & UINT8_C(0xff)); x127 = (x125 >> 8); x128 = (uint8_t)(x127 & UINT8_C(0xff)); x129 = (x127 >> 8); x130 = (uint8_t)(x129 & UINT8_C(0xff)); x131 = (uint8_t)(x129 >> 8); x132 = (x111 + (uint32_t)x131); x133 = (uint8_t)(x132 & UINT8_C(0xff)); x134 = (x132 >> 8); x135 = (uint8_t)(x134 & UINT8_C(0xff)); x136 = (x134 >> 8); x137 = (uint8_t)(x136 & UINT8_C(0xff)); x138 = (uint8_t)(x136 >> 8); x139 = (x110 + (uint32_t)x138); x140 = (uint8_t)(x139 & UINT8_C(0xff)); x141 = (x139 >> 8); x142 = (uint8_t)(x141 & UINT8_C(0xff)); x143 = (uint8_t)(x141 >> 8); x144 = (uint8_t)(x58 & UINT8_C(0xff)); x145 = (x58 >> 8); x146 = (uint8_t)(x145 & UINT8_C(0xff)); x147 = (uint8_t)(x145 >> 8); x148 = (x109 + (uint32_t)x147); x149 = (uint8_t)(x148 & UINT8_C(0xff)); x150 = (x148 >> 8); x151 = (uint8_t)(x150 & UINT8_C(0xff)); x152 = (x150 >> 8); x153 = (uint8_t)(x152 & UINT8_C(0xff)); x154 = (uint8_t)(x152 >> 8); x155 = (x108 + (uint32_t)x154); x156 = (uint8_t)(x155 & UINT8_C(0xff)); x157 = (x155 >> 8); x158 = (uint8_t)(x157 & UINT8_C(0xff)); x159 = (x157 >> 8); x160 = (uint8_t)(x159 & UINT8_C(0xff)); x161 = (uint8_t)(x159 >> 8); x162 = (x107 + (uint32_t)x161); x163 = (uint8_t)(x162 & UINT8_C(0xff)); x164 = (x162 >> 8); x165 = (uint8_t)(x164 & UINT8_C(0xff)); x166 = (x164 >> 8); x167 = (uint8_t)(x166 & UINT8_C(0xff)); x168 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x166 >> 8); x169 = (x106 + (uint32_t)x168); x170 = (uint8_t)(x169 & UINT8_C(0xff)); x171 = (x169 >> 8); x172 = (uint8_t)(x171 & UINT8_C(0xff)); x173 = (uint8_t)(x171 >> 8); x174 = (x105 + (uint32_t)x173); x175 = (uint8_t)(x174 & UINT8_C(0xff)); x176 = (x174 >> 8); x177 = (uint8_t)(x176 & UINT8_C(0xff)); x178 = (x176 >> 8); x179 = (uint8_t)(x178 & UINT8_C(0xff)); x180 = (uint8_t)(x178 >> 8); x181 = (x104 + (uint32_t)x180); x182 = (uint8_t)(x181 & UINT8_C(0xff)); x183 = (x181 >> 8); x184 = (uint8_t)(x183 & UINT8_C(0xff)); x185 = (x183 >> 8); x186 = (uint8_t)(x185 & UINT8_C(0xff)); x187 = (uint8_t)(x185 >> 8); x188 = (x103 + (uint32_t)x187); x189 = (uint8_t)(x188 & UINT8_C(0xff)); x190 = (x188 >> 8); x191 = (uint8_t)(x190 & UINT8_C(0xff)); x192 = (x190 >> 8); x193 = (uint8_t)(x192 & UINT8_C(0xff)); x194 = (uint8_t)(x192 >> 8); x195 = (x102 + (uint32_t)x194); x196 = (uint8_t)(x195 & UINT8_C(0xff)); x197 = (x195 >> 8); x198 = (uint8_t)(x197 & UINT8_C(0xff)); x199 = (uint8_t)(x197 >> 8); x200 = (uint8_t)(x76 & UINT8_C(0xff)); x201 = (x76 >> 8); x202 = (uint8_t)(x201 & UINT8_C(0xff)); x203 = (uint8_t)(x201 >> 8); x204 = (x101 + (uint32_t)x203); x205 = (uint8_t)(x204 & UINT8_C(0xff)); x206 = (x204 >> 8); x207 = (uint8_t)(x206 & UINT8_C(0xff)); x208 = (x206 >> 8); x209 = (uint8_t)(x208 & UINT8_C(0xff)); x210 = (uint8_t)(x208 >> 8); x211 = (x100 + (uint32_t)x210); x212 = (uint8_t)(x211 & UINT8_C(0xff)); x213 = (x211 >> 8); x214 = (uint8_t)(x213 & UINT8_C(0xff)); x215 = (x213 >> 8); x216 = (uint8_t)(x215 & UINT8_C(0xff)); x217 = (uint8_t)(x215 >> 8); x218 = (x99 + (uint32_t)x217); x219 = (uint8_t)(x218 & UINT8_C(0xff)); x220 = (x218 >> 8); x221 = (uint8_t)(x220 & UINT8_C(0xff)); x222 = (x220 >> 8); x223 = (uint8_t)(x222 & UINT8_C(0xff)); x224 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x222 >> 8); x225 = (x98 + (uint32_t)x224); x226 = (uint8_t)(x225 & UINT8_C(0xff)); x227 = (x225 >> 8); x228 = (uint8_t)(x227 & UINT8_C(0xff)); x229 = (uint8_t)(x227 >> 8); x230 = (x97 + (uint32_t)x229); x231 = (uint8_t)(x230 & UINT8_C(0xff)); x232 = (x230 >> 8); x233 = (uint8_t)(x232 & UINT8_C(0xff)); x234 = (x232 >> 8); x235 = (uint8_t)(x234 & UINT8_C(0xff)); x236 = (uint8_t)(x234 >> 8); x237 = (x96 + (uint32_t)x236); x238 = (uint8_t)(x237 & UINT8_C(0xff)); x239 = (x237 >> 8); x240 = (uint8_t)(x239 & UINT8_C(0xff)); x241 = (x239 >> 8); x242 = (uint8_t)(x241 & UINT8_C(0xff)); x243 = (uint8_t)(x241 >> 8); x244 = (x95 + (uint32_t)x243); x245 = (uint8_t)(x244 & UINT8_C(0xff)); x246 = (x244 >> 8); x247 = (uint8_t)(x246 & UINT8_C(0xff)); x248 = (x246 >> 8); x249 = (uint8_t)(x248 & UINT8_C(0xff)); x250 = (uint8_t)(x248 >> 8); x251 = (x94 + (uint32_t)x250); x252 = (uint8_t)(x251 & UINT8_C(0xff)); x253 = (x251 >> 8); x254 = (uint8_t)(x253 & UINT8_C(0xff)); x255 = (uint8_t)(x253 >> 8); out1[0] = x114; out1[1] = x116; out1[2] = x119; out1[3] = x121; out1[4] = x123; out1[5] = x126; out1[6] = x128; out1[7] = x130; out1[8] = x133; out1[9] = x135; out1[10] = x137; out1[11] = x140; out1[12] = x142; out1[13] = x143; out1[14] = x144; out1[15] = x146; out1[16] = x149; out1[17] = x151; out1[18] = x153; out1[19] = x156; out1[20] = x158; out1[21] = x160; out1[22] = x163; out1[23] = x165; out1[24] = x167; out1[25] = x170; out1[26] = x172; out1[27] = x175; out1[28] = x177; out1[29] = x179; out1[30] = x182; out1[31] = x184; out1[32] = x186; out1[33] = x189; out1[34] = x191; out1[35] = x193; out1[36] = x196; out1[37] = x198; out1[38] = x199; out1[39] = x200; out1[40] = x202; out1[41] = x205; out1[42] = x207; out1[43] = x209; out1[44] = x212; out1[45] = x214; out1[46] = x216; out1[47] = x219; out1[48] = x221; out1[49] = x223; out1[50] = x226; out1[51] = x228; out1[52] = x231; out1[53] = x233; out1[54] = x235; out1[55] = x238; out1[56] = x240; out1[57] = x242; out1[58] = x245; out1[59] = x247; out1[60] = x249; out1[61] = x252; out1[62] = x254; out1[63] = x255; } /* * The function fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes deserializes a field element from bytes in little-endian order. * Postconditions: * eval out1 mod m = bytes_eval arg1 mod m * * Input Bounds: * arg1: [[0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff], [0x0 ~> 0xff]] * Output Bounds: * out1: [[0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x800000], [0x0 ~> 0x400000], [0x0 ~> 0x400000], [0x0 ~> 0x400000]] */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes( uint32_t out1[23], const uint8_t arg1[64]) { uint32_t x1; uint32_t x2; uint32_t x3; uint32_t x4; uint32_t x5; uint32_t x6; uint32_t x7; uint32_t x8; uint32_t x9; uint32_t x10; uint32_t x11; uint32_t x12; uint32_t x13; uint32_t x14; uint32_t x15; uint32_t x16; uint32_t x17; uint32_t x18; uint32_t x19; uint32_t x20; uint32_t x21; uint32_t x22; uint32_t x23; uint32_t x24; uint8_t x25; uint32_t x26; uint32_t x27; uint32_t x28; uint32_t x29; uint32_t x30; uint32_t x31; uint32_t x32; uint32_t x33; uint32_t x34; uint32_t x35; uint32_t x36; uint32_t x37; uint32_t x38; uint32_t x39; uint32_t x40; uint32_t x41; uint32_t x42; uint32_t x43; uint32_t x44; uint32_t x45; uint32_t x46; uint32_t x47; uint32_t x48; uint32_t x49; uint8_t x50; uint32_t x51; uint32_t x52; uint32_t x53; uint32_t x54; uint32_t x55; uint32_t x56; uint32_t x57; uint32_t x58; uint32_t x59; uint32_t x60; uint32_t x61; uint32_t x62; uint32_t x63; uint8_t x64; uint32_t x65; uint32_t x66; uint32_t x67; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x68; uint32_t x69; uint32_t x70; uint32_t x71; uint32_t x72; uint8_t x73; uint32_t x74; uint32_t x75; uint32_t x76; uint32_t x77; uint8_t x78; uint32_t x79; uint32_t x80; uint32_t x81; uint32_t x82; uint8_t x83; uint32_t x84; uint32_t x85; uint32_t x86; uint32_t x87; uint32_t x88; uint8_t x89; uint32_t x90; uint32_t x91; uint32_t x92; uint32_t x93; uint8_t x94; uint32_t x95; uint32_t x96; uint32_t x97; uint32_t x98; uint8_t x99; uint32_t x100; uint32_t x101; uint32_t x102; uint32_t x103; uint8_t x104; uint32_t x105; uint32_t x106; uint32_t x107; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x108; uint32_t x109; uint32_t x110; uint32_t x111; uint32_t x112; uint8_t x113; uint32_t x114; uint32_t x115; uint32_t x116; uint32_t x117; uint8_t x118; uint32_t x119; uint32_t x120; uint32_t x121; uint32_t x122; uint8_t x123; uint32_t x124; uint32_t x125; uint32_t x126; uint32_t x127; uint32_t x128; uint8_t x129; uint32_t x130; uint32_t x131; uint32_t x132; uint32_t x133; uint8_t x134; uint32_t x135; uint32_t x136; uint32_t x137; uint32_t x138; uint8_t x139; uint32_t x140; uint32_t x141; uint32_t x142; uint32_t x143; uint8_t x144; uint32_t x145; uint32_t x146; uint32_t x147; fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1 x148; uint32_t x149; uint32_t x150; uint32_t x151; uint32_t x152; uint8_t x153; uint32_t x154; uint32_t x155; uint32_t x156; uint32_t x157; uint8_t x158; uint32_t x159; uint32_t x160; uint32_t x161; uint32_t x162; uint8_t x163; uint32_t x164; uint32_t x165; x1 = ((uint32_t)(arg1[63]) << 14); x2 = ((uint32_t)(arg1[62]) << 6); x3 = ((uint32_t)(arg1[61]) << 20); x4 = ((uint32_t)(arg1[60]) << 12); x5 = ((uint32_t)(arg1[59]) << 4); x6 = ((uint32_t)(arg1[58]) << 18); x7 = ((uint32_t)(arg1[57]) << 10); x8 = ((uint32_t)(arg1[56]) << 2); x9 = ((uint32_t)(arg1[55]) << 17); x10 = ((uint32_t)(arg1[54]) << 9); x11 = ((uint32_t)(arg1[53]) * 0x2); x12 = ((uint32_t)(arg1[52]) << 15); x13 = ((uint32_t)(arg1[51]) << 7); x14 = ((uint32_t)(arg1[50]) << 21); x15 = ((uint32_t)(arg1[49]) << 13); x16 = ((uint32_t)(arg1[48]) << 5); x17 = ((uint32_t)(arg1[47]) << 19); x18 = ((uint32_t)(arg1[46]) << 11); x19 = ((uint32_t)(arg1[45]) << 3); x20 = ((uint32_t)(arg1[44]) << 18); x21 = ((uint32_t)(arg1[43]) << 10); x22 = ((uint32_t)(arg1[42]) << 2); x23 = ((uint32_t)(arg1[41]) << 16); x24 = ((uint32_t)(arg1[40]) << 8); x25 = (arg1[39]); x26 = ((uint32_t)(arg1[38]) << 14); x27 = ((uint32_t)(arg1[37]) << 6); x28 = ((uint32_t)(arg1[36]) << 20); x29 = ((uint32_t)(arg1[35]) << 12); x30 = ((uint32_t)(arg1[34]) << 4); x31 = ((uint32_t)(arg1[33]) << 19); x32 = ((uint32_t)(arg1[32]) << 11); x33 = ((uint32_t)(arg1[31]) << 3); x34 = ((uint32_t)(arg1[30]) << 17); x35 = ((uint32_t)(arg1[29]) << 9); x36 = ((uint32_t)(arg1[28]) * 0x2); x37 = ((uint32_t)(arg1[27]) << 15); x38 = ((uint32_t)(arg1[26]) << 7); x39 = ((uint32_t)(arg1[25]) << 21); x40 = ((uint32_t)(arg1[24]) << 13); x41 = ((uint32_t)(arg1[23]) << 5); x42 = ((uint32_t)(arg1[22]) << 20); x43 = ((uint32_t)(arg1[21]) << 12); x44 = ((uint32_t)(arg1[20]) << 4); x45 = ((uint32_t)(arg1[19]) << 18); x46 = ((uint32_t)(arg1[18]) << 10); x47 = ((uint32_t)(arg1[17]) << 2); x48 = ((uint32_t)(arg1[16]) << 16); x49 = ((uint32_t)(arg1[15]) << 8); x50 = (arg1[14]); x51 = ((uint32_t)(arg1[13]) << 14); x52 = ((uint32_t)(arg1[12]) << 6); x53 = ((uint32_t)(arg1[11]) << 21); x54 = ((uint32_t)(arg1[10]) << 13); x55 = ((uint32_t)(arg1[9]) << 5); x56 = ((uint32_t)(arg1[8]) << 19); x57 = ((uint32_t)(arg1[7]) << 11); x58 = ((uint32_t)(arg1[6]) << 3); x59 = ((uint32_t)(arg1[5]) << 17); x60 = ((uint32_t)(arg1[4]) << 9); x61 = ((uint32_t)(arg1[3]) * 0x2); x62 = ((uint32_t)(arg1[2]) << 16); x63 = ((uint32_t)(arg1[1]) << 8); x64 = (arg1[0]); x65 = (x63 + (uint32_t)x64); x66 = (x62 + x65); x67 = (x66 & UINT32_C(0x7fffff)); x68 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x66 >> 23); x69 = (x61 + (uint32_t)x68); x70 = (x60 + x69); x71 = (x59 + x70); x72 = (x71 & UINT32_C(0x3fffff)); x73 = (uint8_t)(x71 >> 22); x74 = (x58 + (uint32_t)x73); x75 = (x57 + x74); x76 = (x56 + x75); x77 = (x76 & UINT32_C(0x3fffff)); x78 = (uint8_t)(x76 >> 22); x79 = (x55 + (uint32_t)x78); x80 = (x54 + x79); x81 = (x53 + x80); x82 = (x81 & UINT32_C(0x7fffff)); x83 = (uint8_t)(x81 >> 23); x84 = (x52 + (uint32_t)x83); x85 = (x51 + x84); x86 = (x49 + (uint32_t)x50); x87 = (x48 + x86); x88 = (x87 & UINT32_C(0x3fffff)); x89 = (uint8_t)(x87 >> 22); x90 = (x47 + (uint32_t)x89); x91 = (x46 + x90); x92 = (x45 + x91); x93 = (x92 & UINT32_C(0x3fffff)); x94 = (uint8_t)(x92 >> 22); x95 = (x44 + (uint32_t)x94); x96 = (x43 + x95); x97 = (x42 + x96); x98 = (x97 & UINT32_C(0x7fffff)); x99 = (uint8_t)(x97 >> 23); x100 = (x41 + (uint32_t)x99); x101 = (x40 + x100); x102 = (x39 + x101); x103 = (x102 & UINT32_C(0x3fffff)); x104 = (uint8_t)(x102 >> 22); x105 = (x38 + (uint32_t)x104); x106 = (x37 + x105); x107 = (x106 & UINT32_C(0x3fffff)); x108 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x106 >> 22); x109 = (x36 + (uint32_t)x108); x110 = (x35 + x109); x111 = (x34 + x110); x112 = (x111 & UINT32_C(0x3fffff)); x113 = (uint8_t)(x111 >> 22); x114 = (x33 + (uint32_t)x113); x115 = (x32 + x114); x116 = (x31 + x115); x117 = (x116 & UINT32_C(0x7fffff)); x118 = (uint8_t)(x116 >> 23); x119 = (x30 + (uint32_t)x118); x120 = (x29 + x119); x121 = (x28 + x120); x122 = (x121 & UINT32_C(0x3fffff)); x123 = (uint8_t)(x121 >> 22); x124 = (x27 + (uint32_t)x123); x125 = (x26 + x124); x126 = (x24 + (uint32_t)x25); x127 = (x23 + x126); x128 = (x127 & UINT32_C(0x3fffff)); x129 = (uint8_t)(x127 >> 22); x130 = (x22 + (uint32_t)x129); x131 = (x21 + x130); x132 = (x20 + x131); x133 = (x132 & UINT32_C(0x7fffff)); x134 = (uint8_t)(x132 >> 23); x135 = (x19 + (uint32_t)x134); x136 = (x18 + x135); x137 = (x17 + x136); x138 = (x137 & UINT32_C(0x3fffff)); x139 = (uint8_t)(x137 >> 22); x140 = (x16 + (uint32_t)x139); x141 = (x15 + x140); x142 = (x14 + x141); x143 = (x142 & UINT32_C(0x3fffff)); x144 = (uint8_t)(x142 >> 22); x145 = (x13 + (uint32_t)x144); x146 = (x12 + x145); x147 = (x146 & UINT32_C(0x3fffff)); x148 = (fiat_id_tc26_gost_3410_2012_512_paramSetC_uint1)(x146 >> 22); x149 = (x11 + (uint32_t)x148); x150 = (x10 + x149); x151 = (x9 + x150); x152 = (x151 & UINT32_C(0x7fffff)); x153 = (uint8_t)(x151 >> 23); x154 = (x8 + (uint32_t)x153); x155 = (x7 + x154); x156 = (x6 + x155); x157 = (x156 & UINT32_C(0x3fffff)); x158 = (uint8_t)(x156 >> 22); x159 = (x5 + (uint32_t)x158); x160 = (x4 + x159); x161 = (x3 + x160); x162 = (x161 & UINT32_C(0x3fffff)); x163 = (uint8_t)(x161 >> 22); x164 = (x2 + (uint32_t)x163); x165 = (x1 + x164); out1[0] = x67; out1[1] = x72; out1[2] = x77; out1[3] = x82; out1[4] = x85; out1[5] = x88; out1[6] = x93; out1[7] = x98; out1[8] = x103; out1[9] = x107; out1[10] = x112; out1[11] = x117; out1[12] = x122; out1[13] = x125; out1[14] = x128; out1[15] = x133; out1[16] = x138; out1[17] = x143; out1[18] = x147; out1[19] = x152; out1[20] = x157; out1[21] = x162; out1[22] = x165; } /* END verbatim fiat code */ /*- * Finite field inversion via FLT. * NB: this is not a real Fiat function, just named that way for consistency. * Autogenerated: ecp/id_tc26_gost_3410_2012_512_paramSetC/fe_inv.op3 * custom repunit addition chain */ static void fiat_id_tc26_gost_3410_2012_512_paramSetC_inv(fe_t output, const fe_t t1) { int i; /* temporary variables */ fe_t acc, t102, t12, t198, t2, t200, t24, t3, t400, t48, t502, t6, t96; fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t2, acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t3, acc, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t3); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t6, acc, t3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t6); for (i = 0; i < 5; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t12, acc, t6); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t12); for (i = 0; i < 11; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t24, acc, t12); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t24); for (i = 0; i < 23; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t48, acc, t24); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t48); for (i = 0; i < 47; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t96, acc, t48); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t96); for (i = 0; i < 5; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t102, acc, t6); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t102); for (i = 0; i < 95; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t198, acc, t96); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t198); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t200, acc, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t200); for (i = 0; i < 199; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t400, acc, t200); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t400); for (i = 0; i < 101; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t502, acc, t102); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, t502); for (i = 0; i < 3; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(acc, acc, t3); for (i = 0; i < 4; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(acc, acc, t1); for (i = 0; i < 2; i++) fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(acc, acc); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(output, acc, t1); } /* curve coefficient constants */ static const limb_t const_one[23] = { UINT32_C(0x00000001), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000)}; static const limb_t const_d[23] = { UINT32_C(0x006E7550), UINT32_C(0x001B7667), UINT32_C(0x00265181), UINT32_C(0x00054456), UINT32_C(0x0033F0AF), UINT32_C(0x001E91A0), UINT32_C(0x001E78DA), UINT32_C(0x002CE43E), UINT32_C(0x0016609C), UINT32_C(0x0028AE03), UINT32_C(0x00273C14), UINT32_C(0x001CE535), UINT32_C(0x00210504), UINT32_C(0x000A2818), UINT32_C(0x0031EBDE), UINT32_C(0x00506638), UINT32_C(0x001A016A), UINT32_C(0x003FC9B5), UINT32_C(0x001E6FAD), UINT32_C(0x00274B9E), UINT32_C(0x0036367C), UINT32_C(0x0018C017), UINT32_C(0x002793D7)}; static const limb_t const_S[23] = { UINT32_C(0x0004621E), UINT32_C(0x00292266), UINT32_C(0x00166B9F), UINT32_C(0x001EAEEA), UINT32_C(0x003303D4), UINT32_C(0x00185B97), UINT32_C(0x001861C9), UINT32_C(0x0074C6F0), UINT32_C(0x000A67D8), UINT32_C(0x0035D47F), UINT32_C(0x002630FA), UINT32_C(0x0078C6B2), UINT32_C(0x0037BEBE), UINT32_C(0x001D75F9), UINT32_C(0x00338508), UINT32_C(0x002BE671), UINT32_C(0x00297FA5), UINT32_C(0x00200D92), UINT32_C(0x00186414), UINT32_C(0x00762D18), UINT32_C(0x00027260), UINT32_C(0x0009CFFA), UINT32_C(0x00061B0A)}; static const limb_t const_T[23] = { UINT32_C(0x007D1271), UINT32_C(0x002493BB), UINT32_C(0x00310D95), UINT32_C(0x006B8B63), UINT32_C(0x003352C7), UINT32_C(0x001A6D9A), UINT32_C(0x00051424), UINT32_C(0x005CD0B5), UINT32_C(0x0023BAC4), UINT32_C(0x001C1D00), UINT32_C(0x00268A03), UINT32_C(0x005A2633), UINT32_C(0x00302B80), UINT32_C(0x001706AE), UINT32_C(0x000851FA), UINT32_C(0x0062BBB4), UINT32_C(0x00245591), UINT32_C(0x003FF6F3), UINT32_C(0x0005129C), UINT32_C(0x00313745), UINT32_C(0x0013B3BF), UINT32_C(0x00397559), UINT32_C(0x002698A3)}; /* LUT for scalar multiplication by comb interleaving */ static const pt_aff_t lut_cmb[7][16] = { { {{UINT32_C(0x00000012), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000), UINT32_C(0x00000000)}, {UINT32_C(0x00001A3D), UINT32_C(0x0007DCE6), UINT32_C(0x003B0018), UINT32_C(0x0065755C), UINT32_C(0x0008B012), UINT32_C(0x00309056), UINT32_C(0x000E5CCB), UINT32_C(0x0068C5D1), UINT32_C(0x003DD7E0), UINT32_C(0x00067BC4), UINT32_C(0x003A96CA), UINT32_C(0x0034A916), UINT32_C(0x0037B386), UINT32_C(0x0015845F), UINT32_C(0x00368D9A), UINT32_C(0x00405E50), UINT32_C(0x003EFD86), UINT32_C(0x0003C541), UINT32_C(0x0015BBD0), UINT32_C(0x005732B2), UINT32_C(0x0007D785), UINT32_C(0x0039D1FB), UINT32_C(0x0011A6BD)}, {UINT32_C(0x0001E12E), UINT32_C(0x000D882C), UINT32_C(0x002601B2), UINT32_C(0x00224088), UINT32_C(0x001C6152), UINT32_C(0x002A260E), UINT32_C(0x00028653), UINT32_C(0x005DE8B6), UINT32_C(0x00192DCE), UINT32_C(0x0034B3D9), UINT32_C(0x001E9A35), UINT32_C(0x0033E39C), UINT32_C(0x002A9F73), UINT32_C(0x00034EBD), UINT32_C(0x0015F4DA), UINT32_C(0x0006A1AF), UINT32_C(0x002DD375), UINT32_C(0x0003DEA3), UINT32_C(0x000734A1), UINT32_C(0x0021908A), UINT32_C(0x000D2766), UINT32_C(0x0010C3A8), UINT32_C(0x003DB95A)}}, {{UINT32_C(0x00714838), UINT32_C(0x003864C7), UINT32_C(0x0015E5EE), UINT32_C(0x0023E2F6), UINT32_C(0x0001272F), UINT32_C(0x00115410), UINT32_C(0x003575F4), UINT32_C(0x00599E80), UINT32_C(0x001911C3), UINT32_C(0x0016A65A), UINT32_C(0x001D472E), UINT32_C(0x006F3D5B), UINT32_C(0x0010340F), UINT32_C(0x000E837F), UINT32_C(0x0027C450), UINT32_C(0x007123EC), UINT32_C(0x0028CF66), UINT32_C(0x000CD738), UINT32_C(0x00028A9A), UINT32_C(0x000CAEE3), UINT32_C(0x00261B2D), UINT32_C(0x001B65D5), UINT32_C(0x0003754B)}, {UINT32_C(0x0062FF0C), UINT32_C(0x0039AC13), UINT32_C(0x003468DD), UINT32_C(0x005CFC63), UINT32_C(0x0003F7D2), UINT32_C(0x00370AE6), UINT32_C(0x0036C17A), UINT32_C(0x001D053E), UINT32_C(0x0004E79D), UINT32_C(0x00268C78), UINT32_C(0x0038AB40), UINT32_C(0x007DDB1E), UINT32_C(0x003B4D93), UINT32_C(0x003572D3), UINT32_C(0x00124D45), UINT32_C(0x0072B7DA), UINT32_C(0x0018E151), UINT32_C(0x001874E3), UINT32_C(0x00372E71), UINT32_C(0x00505781), UINT32_C(0x0019B7EF), UINT32_C(0x00225C53), UINT32_C(0x00008A46)}, {UINT32_C(0x00224325), UINT32_C(0x001B6A98), UINT32_C(0x003712F0), UINT32_C(0x0029896C), UINT32_C(0x00276411), UINT32_C(0x00312C3D), UINT32_C(0x003C91A0), UINT32_C(0x005E5815), UINT32_C(0x00297712), UINT32_C(0x003DE7C7), UINT32_C(0x002D1F5F), UINT32_C(0x002BD84B), UINT32_C(0x0031E9D5), UINT32_C(0x00049136), UINT32_C(0x001802F2), UINT32_C(0x002F8CF5), UINT32_C(0x002DB47F), UINT32_C(0x00132C57), UINT32_C(0x000A8508), UINT32_C(0x003D2B4C), UINT32_C(0x0028BD48), UINT32_C(0x001D60C1), UINT32_C(0x003E0AA0)}}, {{UINT32_C(0x0030B9C8), UINT32_C(0x002685FC), UINT32_C(0x001B92BC), UINT32_C(0x0018DFEF), UINT32_C(0x0022306A), UINT32_C(0x0011C069), UINT32_C(0x003EB95C), UINT32_C(0x003F5EF0), UINT32_C(0x0007C592), UINT32_C(0x00381817), UINT32_C(0x0010861D), UINT32_C(0x0004D484), UINT32_C(0x0023D575), UINT32_C(0x003F10B5), UINT32_C(0x000A70AA), UINT32_C(0x004D7662), UINT32_C(0x000DD1AA), UINT32_C(0x003FD38C), UINT32_C(0x000A6668), UINT32_C(0x0025165D), UINT32_C(0x00181E91), UINT32_C(0x000E23E5), UINT32_C(0x00269040)}, {UINT32_C(0x00341E21), UINT32_C(0x00257531), UINT32_C(0x000967CF), UINT32_C(0x0019BA94), UINT32_C(0x00151857), UINT32_C(0x0019AA1E), UINT32_C(0x0007DC17), UINT32_C(0x0011DB85), UINT32_C(0x002D3151), UINT32_C(0x002CEDD2), UINT32_C(0x0024E69B), UINT32_C(0x001A161C), UINT32_C(0x001A4C0C), UINT32_C(0x000AF920), UINT32_C(0x00070D8C), UINT32_C(0x006577B1), UINT32_C(0x0020BA5B), UINT32_C(0x003E2CB7), UINT32_C(0x002FDC2A), UINT32_C(0x0035FBC6), UINT32_C(0x0022FA7D), UINT32_C(0x0033F920), UINT32_C(0x00271D0D)}, {UINT32_C(0x005E541E), UINT32_C(0x001D52C8), UINT32_C(0x001062DD), UINT32_C(0x0024B0B7), UINT32_C(0x0038AB52), UINT32_C(0x00390136), UINT32_C(0x000229FC), UINT32_C(0x00083904), UINT32_C(0x001D494F), UINT32_C(0x003390EA), UINT32_C(0x002173E5), UINT32_C(0x003C560E), UINT32_C(0x002DBD84), UINT32_C(0x0005F4E6), UINT32_C(0x0027C060), UINT32_C(0x00018F19), UINT32_C(0x00021C09), UINT32_C(0x002C4427), UINT32_C(0x002AF1D0), UINT32_C(0x00137D94), UINT32_C(0x00398A24), UINT32_C(0x0015C3EE), UINT32_C(0x002465FE)}}, {{UINT32_C(0x00323C86), UINT32_C(0x00177FDA), UINT32_C(0x0039B750), UINT32_C(0x00273D46), UINT32_C(0x0017FBDD), UINT32_C(0x002CF518), UINT32_C(0x000BBF36), UINT32_C(0x005C0328), UINT32_C(0x002CE181), UINT32_C(0x00006A3B), UINT32_C(0x000E6E58), UINT32_C(0x000239AB), UINT32_C(0x0034C2CE), UINT32_C(0x00074E3E), UINT32_C(0x003363F2), UINT32_C(0x00095FCE), UINT32_C(0x0011CAA2), UINT32_C(0x0020BAF6), UINT32_C(0x0033EA63), UINT32_C(0x0066A91E), UINT32_C(0x002CC83A), UINT32_C(0x000D84AE), UINT32_C(0x001B7D65)}, {UINT32_C(0x004CD0FD), UINT32_C(0x002320B8), UINT32_C(0x001CB711), UINT32_C(0x00404C3F), UINT32_C(0x003A65B2), UINT32_C(0x00256419), UINT32_C(0x00163A1D), UINT32_C(0x007E15F5), UINT32_C(0x00302B21), UINT32_C(0x000C47D7), UINT32_C(0x003C9CBF), UINT32_C(0x002DA840), UINT32_C(0x00354B2A), UINT32_C(0x00019F94), UINT32_C(0x0005E8B1), UINT32_C(0x002B8F3D), UINT32_C(0x0026C85C), UINT32_C(0x001F3DD4), UINT32_C(0x00251D66), UINT32_C(0x0048EC35), UINT32_C(0x00206268), UINT32_C(0x002913A7), UINT32_C(0x001F1F83)}, {UINT32_C(0x0077F340), UINT32_C(0x0008D7FB), UINT32_C(0x0029E763), UINT32_C(0x00797AAF), UINT32_C(0x00060644), UINT32_C(0x00035A5C), UINT32_C(0x00009727), UINT32_C(0x00626D74), UINT32_C(0x00249825), UINT32_C(0x00181FBF), UINT32_C(0x00083B0B), UINT32_C(0x0006F875), UINT32_C(0x00331E5F), UINT32_C(0x00343541), UINT32_C(0x0037AD03), UINT32_C(0x0004A743), UINT32_C(0x0018465B), UINT32_C(0x00203D5A), UINT32_C(0x002CA6BE), UINT32_C(0x0008AAB6), UINT32_C(0x00181A90), UINT32_C(0x002D8F7B), UINT32_C(0x00153EB7)}}, {{UINT32_C(0x0018A411), UINT32_C(0x003A0221), UINT32_C(0x003C31B0), UINT32_C(0x00798D8F), UINT32_C(0x002E6982), UINT32_C(0x003E68C9), UINT32_C(0x0011C222), UINT32_C(0x004A377B), UINT32_C(0x001B47F3), UINT32_C(0x003998D9), UINT32_C(0x0014AB3E), UINT32_C(0x0058D2AA), UINT32_C(0x0004E849), UINT32_C(0x001856B6), UINT32_C(0x0009B3EA), UINT32_C(0x0032F37E), UINT32_C(0x0021A719), UINT32_C(0x002BD295), UINT32_C(0x0014959E), UINT32_C(0x0025E386), UINT32_C(0x003F0C52), UINT32_C(0x003FCEAA), UINT32_C(0x00263172)}, {UINT32_C(0x001A14E2), UINT32_C(0x001F7D87), UINT32_C(0x0030183E), UINT32_C(0x006D32ED), UINT32_C(0x002DF898), UINT32_C(0x002CEF71), UINT32_C(0x002646CB), UINT32_C(0x001B0DAD), UINT32_C(0x001A7601), UINT32_C(0x0020A57E), UINT32_C(0x0008D5E8), UINT32_C(0x003FAF5F), UINT32_C(0x00128ED4), UINT32_C(0x0025B18D), UINT32_C(0x002F0FA9), UINT32_C(0x003A6179), UINT32_C(0x00078264), UINT32_C(0x00351FE0), UINT32_C(0x00074564), UINT32_C(0x001FB814), UINT32_C(0x003C2C48), UINT32_C(0x00164834), UINT32_C(0x00270D18)}, {UINT32_C(0x0033F8B7), UINT32_C(0x002F3A9D), UINT32_C(0x000E251A), UINT32_C(0x0030DA6B), UINT32_C(0x0026849C), UINT32_C(0x002D0B0C), UINT32_C(0x002C4BF7), UINT32_C(0x00515301), UINT32_C(0x00036F37), UINT32_C(0x000A9DBF), UINT32_C(0x00298CD0), UINT32_C(0x0024A32B), UINT32_C(0x0026D945), UINT32_C(0x002C3300), UINT32_C(0x00268566), UINT32_C(0x001E4819), UINT32_C(0x00102918), UINT32_C(0x00235296), UINT32_C(0x001B311B), UINT32_C(0x007F2404), UINT32_C(0x0038D33D), UINT32_C(0x001E3550), UINT32_C(0x00090157)}}, {{UINT32_C(0x00320711), UINT32_C(0x00340698), UINT32_C(0x001F056A), UINT32_C(0x003BD939), UINT32_C(0x003171B5), UINT32_C(0x0038A716), UINT32_C(0x0015FA28), UINT32_C(0x0064ADE0), UINT32_C(0x000F0671), UINT32_C(0x001DCC6E), UINT32_C(0x0021080E), UINT32_C(0x004176EE), UINT32_C(0x003EEFBE), UINT32_C(0x0014ABF9), UINT32_C(0x0011CE49), UINT32_C(0x005C1B2A), UINT32_C(0x001DCCBC), UINT32_C(0x000F5858), UINT32_C(0x0014B76C), UINT32_C(0x002FEF68), UINT32_C(0x0013BBA8), UINT32_C(0x00271302), UINT32_C(0x002A675D)}, {UINT32_C(0x0022D5DC), UINT32_C(0x00189878), UINT32_C(0x003957D3), UINT32_C(0x00124011), UINT32_C(0x000C0FF4), UINT32_C(0x0021C5F0), UINT32_C(0x001CF183), UINT32_C(0x005C75FB), UINT32_C(0x000A4A72), UINT32_C(0x001621E5), UINT32_C(0x002D902F), UINT32_C(0x000A5E79), UINT32_C(0x0007D979), UINT32_C(0x002FA252), UINT32_C(0x001A032C), UINT32_C(0x006E4700), UINT32_C(0x001CDDED), UINT32_C(0x0015AFC0), UINT32_C(0x001B495C), UINT32_C(0x0025BC0A), UINT32_C(0x003D6AB6), UINT32_C(0x001C2483), UINT32_C(0x002F3B9A)}, {UINT32_C(0x0057AFE2), UINT32_C(0x003853AA), UINT32_C(0x00381675), UINT32_C(0x0053C924), UINT32_C(0x0004A57A), UINT32_C(0x003A659F), UINT32_C(0x0007371F), UINT32_C(0x006B5A26), UINT32_C(0x0029ED43), UINT32_C(0x000F437B), UINT32_C(0x0003DA56), UINT32_C(0x0043A9B2), UINT32_C(0x001ED072), UINT32_C(0x002BF85E), UINT32_C(0x000106D8), UINT32_C(0x004A67F0), UINT32_C(0x00249FD9), UINT32_C(0x002B8C98), UINT32_C(0x0011FD8E), UINT32_C(0x006EF5A5), UINT32_C(0x00274425), UINT32_C(0x002A63C4), UINT32_C(0x0010FE70)}}, {{UINT32_C(0x003BFFEF), UINT32_C(0x0028BC0F), UINT32_C(0x000C1E3B), UINT32_C(0x00332346), UINT32_C(0x00097C49), UINT32_C(0x000642A0), UINT32_C(0x001511EB), UINT32_C(0x00662119), UINT32_C(0x0038700F), UINT32_C(0x0010075B), UINT32_C(0x000217A9), UINT32_C(0x00515D8A), UINT32_C(0x003768A5), UINT32_C(0x00001AAD), UINT32_C(0x00033785), UINT32_C(0x000EAFDA), UINT32_C(0x0028D7EE), UINT32_C(0x00386C98), UINT32_C(0x002309D6), UINT32_C(0x00217545), UINT32_C(0x0036E128), UINT32_C(0x0036F567), UINT32_C(0x00084D45)}, {UINT32_C(0x006DDAC3), UINT32_C(0x00211A34), UINT32_C(0x00334127), UINT32_C(0x0068417F), UINT32_C(0x002536CA), UINT32_C(0x00392B50), UINT32_C(0x00121BF5), UINT32_C(0x006FAE39), UINT32_C(0x001B66D6), UINT32_C(0x0001A543), UINT32_C(0x00047D4A), UINT32_C(0x00320EF6), UINT32_C(0x0032B862), UINT32_C(0x000E86D1), UINT32_C(0x0003B670), UINT32_C(0x004D6880), UINT32_C(0x0017DCED), UINT32_C(0x002D4CAD), UINT32_C(0x002F1822), UINT32_C(0x0061F872), UINT32_C(0x00117A0E), UINT32_C(0x00227CBF), UINT32_C(0x00118A0F)}, {UINT32_C(0x00597549), UINT32_C(0x00311975), UINT32_C(0x0012ADA8), UINT32_C(0x000BF81E), UINT32_C(0x000447DB), UINT32_C(0x0036564B), UINT32_C(0x0036D4A4), UINT32_C(0x005A12B6), UINT32_C(0x001D943E), UINT32_C(0x001FA011), UINT32_C(0x0022FC7D), UINT32_C(0x001B96F2), UINT32_C(0x00197333), UINT32_C(0x000F5F62), UINT32_C(0x0026D265), UINT32_C(0x000DBBE2), UINT32_C(0x002B31B9), UINT32_C(0x002BF98D), UINT32_C(0x0025C030), UINT32_C(0x001A95A2), UINT32_C(0x003B2FA4), UINT32_C(0x000B0C82), UINT32_C(0x0021FEE2)}}, {{UINT32_C(0x0015EE0D), UINT32_C(0x00026FEB), UINT32_C(0x003AD4F5), UINT32_C(0x003274AE), UINT32_C(0x001265E7), UINT32_C(0x0017040F), UINT32_C(0x0013C06E), UINT32_C(0x00448F30), UINT32_C(0x00134ED6), UINT32_C(0x002635D7), UINT32_C(0x000B19B7), UINT32_C(0x0044CA5A), UINT32_C(0x002D51CD), UINT32_C(0x003CBBA9), UINT32_C(0x000BA676), UINT32_C(0x0044E2E0), UINT32_C(0x002D3C1D), UINT32_C(0x001B2C78), UINT32_C(0x0018CB04), UINT32_C(0x000F06A8), UINT32_C(0x0029FAAE), UINT32_C(0x003BD16D), UINT32_C(0x002947AD)}, {UINT32_C(0x000B19BD), UINT32_C(0x002858FE), UINT32_C(0x0001456B), UINT32_C(0x00651923), UINT32_C(0x00153B6F), UINT32_C(0x00192326), UINT32_C(0x001EDFC6), UINT32_C(0x003AF276), UINT32_C(0x00039EE2), UINT32_C(0x00085A43), UINT32_C(0x0005BE71), UINT32_C(0x00091140), UINT32_C(0x002D46EB), UINT32_C(0x0017E252), UINT32_C(0x0005EB99), UINT32_C(0x002B8AE0), UINT32_C(0x001B76CF), UINT32_C(0x0006AF84), UINT32_C(0x00353A13), UINT32_C(0x00310D97), UINT32_C(0x0023CC43), UINT32_C(0x00112265), UINT32_C(0x000E4E08)}, {UINT32_C(0x00172BA5), UINT32_C(0x00224E8D), UINT32_C(0x0008E83D), UINT32_C(0x006E0FD7), UINT32_C(0x000CA435), UINT32_C(0x003F7B82), UINT32_C(0x002AE24B), UINT32_C(0x00203AE6), UINT32_C(0x001109AA), UINT32_C(0x002D29BE), UINT32_C(0x00209120), UINT32_C(0x00435C39), UINT32_C(0x0010375A), UINT32_C(0x003466D6), UINT32_C(0x003A4483), UINT32_C(0x004C88D7), UINT32_C(0x002B8FCF), UINT32_C(0x000D4C74), UINT32_C(0x0000EAD7), UINT32_C(0x004E1D11), UINT32_C(0x0008F6A2), UINT32_C(0x0036C2A6), UINT32_C(0x000F1EC2)}}, {{UINT32_C(0x007F3A5F), UINT32_C(0x001992D7), UINT32_C(0x0033F7AE), UINT32_C(0x00399159), UINT32_C(0x000EA75B), UINT32_C(0x0024BE3F), UINT32_C(0x00137150), UINT32_C(0x0009C6C8), UINT32_C(0x00224779), UINT32_C(0x0024DA62), UINT32_C(0x0039D8C0), UINT32_C(0x00274469), UINT32_C(0x00059EDB), UINT32_C(0x00230792), UINT32_C(0x0011EA0B), UINT32_C(0x000ACCB4), UINT32_C(0x001A5DB9), UINT32_C(0x0033F671), UINT32_C(0x0008F9E0), UINT32_C(0x00171663), UINT32_C(0x0034D6E6), UINT32_C(0x000FD1E8), UINT32_C(0x00305366)}, {UINT32_C(0x005EDF20), UINT32_C(0x003A4158), UINT32_C(0x003152D2), UINT32_C(0x0039738C), UINT32_C(0x00219AF4), UINT32_C(0x000AD69F), UINT32_C(0x0000A7ED), UINT32_C(0x0006EB20), UINT32_C(0x001DB459), UINT32_C(0x00249C37), UINT32_C(0x0008C20F), UINT32_C(0x004E26FA), UINT32_C(0x0018A7F4), UINT32_C(0x002A583D), UINT32_C(0x00026534), UINT32_C(0x004D37CC), UINT32_C(0x002BF41A), UINT32_C(0x0004D4E5), UINT32_C(0x002B73A3), UINT32_C(0x003F1C84), UINT32_C(0x002883C4), UINT32_C(0x003BC222), UINT32_C(0x00089D6C)}, {UINT32_C(0x007B6E7F), UINT32_C(0x0022175E), UINT32_C(0x00285356), UINT32_C(0x0025E3A3), UINT32_C(0x001037EF), UINT32_C(0x003AD3A2), UINT32_C(0x001C9C57), UINT32_C(0x00504AAE), UINT32_C(0x00064EF6), UINT32_C(0x00017470), UINT32_C(0x001DB4A2), UINT32_C(0x005776DF), UINT32_C(0x001E96EF), UINT32_C(0x0017DA2B), UINT32_C(0x002DD3D9), UINT32_C(0x0073CBB8), UINT32_C(0x00140A2F), UINT32_C(0x00109B2E), UINT32_C(0x000B5EA4), UINT32_C(0x00064397), UINT32_C(0x0000884C), UINT32_C(0x00089DD2), UINT32_C(0x002AF788)}}, {{UINT32_C(0x00735FB2), UINT32_C(0x002F19A0), UINT32_C(0x00030F84), UINT32_C(0x0069D875), UINT32_C(0x0030428E), UINT32_C(0x001C7831), UINT32_C(0x00348247), UINT32_C(0x001553C9), UINT32_C(0x00363ED5), UINT32_C(0x0012E6AE), UINT32_C(0x00297863), UINT32_C(0x005231B6), UINT32_C(0x00076EF8), UINT32_C(0x002A51F3), UINT32_C(0x00053479), UINT32_C(0x00728729), UINT32_C(0x000565E8), UINT32_C(0x00253185), UINT32_C(0x00373E1C), UINT32_C(0x00173952), UINT32_C(0x00378596), UINT32_C(0x0035C7D9), UINT32_C(0x001AFA68)}, {UINT32_C(0x007813F3), UINT32_C(0x0032A16A), UINT32_C(0x002DCCB1), UINT32_C(0x0020A412), UINT32_C(0x0032EE55), UINT32_C(0x00060B7C), UINT32_C(0x0001221A), UINT32_C(0x00746789), UINT32_C(0x002B0E40), UINT32_C(0x001D2DCC), UINT32_C(0x000CB8AC), UINT32_C(0x001FC5BD), UINT32_C(0x003BCC70), UINT32_C(0x0002C6F3), UINT32_C(0x0006C465), UINT32_C(0x00105D9D), UINT32_C(0x000CB0AE), UINT32_C(0x002CF08C), UINT32_C(0x0022B897), UINT32_C(0x004F105D), UINT32_C(0x002334A0), UINT32_C(0x000C0A22), UINT32_C(0x002CF1F5)}, {UINT32_C(0x00505E0F), UINT32_C(0x0012ED31), UINT32_C(0x002474AB), UINT32_C(0x0024227C), UINT32_C(0x000514EC), UINT32_C(0x001D9F97), UINT32_C(0x000799FA), UINT32_C(0x006748EE), UINT32_C(0x001B12FA), UINT32_C(0x00297127), UINT32_C(0x001AB293), UINT32_C(0x00592DE3), UINT32_C(0x00202A4E), UINT32_C(0x0028F351), UINT32_C(0x00267888), UINT32_C(0x007C29E7), UINT32_C(0x00191344), UINT32_C(0x003BB856), UINT32_C(0x003D0068), UINT32_C(0x006A2ECD), UINT32_C(0x000FFBC8), UINT32_C(0x001ACF89), UINT32_C(0x0012063A)}}, {{UINT32_C(0x0069FBFB), UINT32_C(0x00156959), UINT32_C(0x000608FA), UINT32_C(0x00785C89), UINT32_C(0x003AC4C8), UINT32_C(0x0027AB75), UINT32_C(0x001FCC4F), UINT32_C(0x001F7944), UINT32_C(0x0017EB65), UINT32_C(0x003C2011), UINT32_C(0x00325CA4), UINT32_C(0x001506DC), UINT32_C(0x000E2144), UINT32_C(0x002D1626), UINT32_C(0x0016961D), UINT32_C(0x00363598), UINT32_C(0x003C4B42), UINT32_C(0x000025DF), UINT32_C(0x0029E048), UINT32_C(0x0036C933), UINT32_C(0x0006A748), UINT32_C(0x003B1A3D), UINT32_C(0x00072BBF)}, {UINT32_C(0x00347FD3), UINT32_C(0x0023FEC8), UINT32_C(0x00365C46), UINT32_C(0x00206227), UINT32_C(0x002642D5), UINT32_C(0x000F856C), UINT32_C(0x000D409C), UINT32_C(0x0022DD47), UINT32_C(0x0037EDB3), UINT32_C(0x00295E9B), UINT32_C(0x00168C23), UINT32_C(0x006707A7), UINT32_C(0x00191E7D), UINT32_C(0x001B783E), UINT32_C(0x003FB2D4), UINT32_C(0x006B0C90), UINT32_C(0x00233284), UINT32_C(0x000CD25A), UINT32_C(0x001F61F1), UINT32_C(0x004E3362), UINT32_C(0x002620F3), UINT32_C(0x00036CD2), UINT32_C(0x00187790)}, {UINT32_C(0x00415547), UINT32_C(0x00056478), UINT32_C(0x003F9AE8), UINT32_C(0x002A78C9), UINT32_C(0x000B1617), UINT32_C(0x002994FB), UINT32_C(0x0017A9C0), UINT32_C(0x002443FA), UINT32_C(0x0033C2A2), UINT32_C(0x00314877), UINT32_C(0x003E8C07), UINT32_C(0x001D6145), UINT32_C(0x0009E22B), UINT32_C(0x001E135D), UINT32_C(0x0026E0F2), UINT32_C(0x0076C01C), UINT32_C(0x0009F80A), UINT32_C(0x0038B123), UINT32_C(0x00061F27), UINT32_C(0x0037D737), UINT32_C(0x001266FA), UINT32_C(0x00194F60), UINT32_C(0x000A4432)}}, {{UINT32_C(0x0031C22E), UINT32_C(0x001B7130), UINT32_C(0x001E8939), UINT32_C(0x006F4F1F), UINT32_C(0x001B084A), UINT32_C(0x000AE27B), UINT32_C(0x00243D6B), UINT32_C(0x00341897), UINT32_C(0x00185C0C), UINT32_C(0x00283264), UINT32_C(0x0033AFEF), UINT32_C(0x00273C32), UINT32_C(0x0037390A), UINT32_C(0x00216908), UINT32_C(0x0000E39D), UINT32_C(0x0022F13E), UINT32_C(0x00023196), UINT32_C(0x00266EDA), UINT32_C(0x002E74B0), UINT32_C(0x0068D67D), UINT32_C(0x0019B003), UINT32_C(0x002462D8), UINT32_C(0x001D92FD)}, {UINT32_C(0x003AE17C), UINT32_C(0x00213D60), UINT32_C(0x00246509), UINT32_C(0x00243E35), UINT32_C(0x000C9ADF), UINT32_C(0x0016B366), UINT32_C(0x00061E45), UINT32_C(0x0022A2B9), UINT32_C(0x0006570F), UINT32_C(0x00302A1D), UINT32_C(0x002E384B), UINT32_C(0x00083836), UINT32_C(0x00231790), UINT32_C(0x000946A6), UINT32_C(0x001C75BC), UINT32_C(0x002F1936), UINT32_C(0x001F19E1), UINT32_C(0x0020A5E8), UINT32_C(0x002CCC4B), UINT32_C(0x003C73D2), UINT32_C(0x0013DA6B), UINT32_C(0x000150AC), UINT32_C(0x003D6E3C)}, {UINT32_C(0x0048F7FB), UINT32_C(0x00078414), UINT32_C(0x0025AA31), UINT32_C(0x0024F2EA), UINT32_C(0x00251A2F), UINT32_C(0x00350186), UINT32_C(0x00242828), UINT32_C(0x001AF8F7), UINT32_C(0x001E7A82), UINT32_C(0x00180FD1), UINT32_C(0x002C709A), UINT32_C(0x00009FF0), UINT32_C(0x00243CBB), UINT32_C(0x002BA544), UINT32_C(0x000A79D6), UINT32_C(0x007FB7BA), UINT32_C(0x002E4F31), UINT32_C(0x000D9BA1), UINT32_C(0x000488DF), UINT32_C(0x002BD096), UINT32_C(0x002360FA), UINT32_C(0x003C511A), UINT32_C(0x001A1012)}}, {{UINT32_C(0x000D6219), UINT32_C(0x001EB7CA), UINT32_C(0x00290FB0), UINT32_C(0x004BE668), UINT32_C(0x001673D0), UINT32_C(0x002187C6), UINT32_C(0x002109E9), UINT32_C(0x002142AD), UINT32_C(0x002B9655), UINT32_C(0x0016BB18), UINT32_C(0x000505A1), UINT32_C(0x003CF749), UINT32_C(0x000508B1), UINT32_C(0x0007750E), UINT32_C(0x0011E906), UINT32_C(0x006BC76B), UINT32_C(0x0010180A), UINT32_C(0x003F71C4), UINT32_C(0x0025BBCB), UINT32_C(0x0019E43E), UINT32_C(0x000C640C), UINT32_C(0x00023109), UINT32_C(0x0036776C)}, {UINT32_C(0x007854C6), UINT32_C(0x0036123B), UINT32_C(0x000FD077), UINT32_C(0x003A6383), UINT32_C(0x00016A28), UINT32_C(0x00023347), UINT32_C(0x00355348), UINT32_C(0x00309EB3), UINT32_C(0x0013FC16), UINT32_C(0x00127D7E), UINT32_C(0x000A0B31), UINT32_C(0x00619126), UINT32_C(0x0032CE4A), UINT32_C(0x001C53EA), UINT32_C(0x00009B36), UINT32_C(0x007EBF13), UINT32_C(0x00153CEC), UINT32_C(0x002F0B2B), UINT32_C(0x001FEA94), UINT32_C(0x0018DD53), UINT32_C(0x002DFE81), UINT32_C(0x00250282), UINT32_C(0x0028BBC9)}, {UINT32_C(0x006BDFE8), UINT32_C(0x003D7D6C), UINT32_C(0x003081DE), UINT32_C(0x003D3D16), UINT32_C(0x003CAB31), UINT32_C(0x001C9412), UINT32_C(0x001096D6), UINT32_C(0x0020B298), UINT32_C(0x0022CDB0), UINT32_C(0x00023945), UINT32_C(0x00319AEF), UINT32_C(0x00316D40), UINT32_C(0x001EFBBC), UINT32_C(0x0030E49F), UINT32_C(0x002D6387), UINT32_C(0x007C9B05), UINT32_C(0x000FF238), UINT32_C(0x002AB556), UINT32_C(0x001D7A21), UINT32_C(0x00746313), UINT32_C(0x002064F3), UINT32_C(0x00159471), UINT32_C(0x0006420E)}}, {{UINT32_C(0x000F873E), UINT32_C(0x000A10CD), UINT32_C(0x002BE785), UINT32_C(0x0038B227), UINT32_C(0x0034217F), UINT32_C(0x001DEE7A), UINT32_C(0x000EF9FF), UINT32_C(0x00642E35), UINT32_C(0x003BBD91), UINT32_C(0x00394167), UINT32_C(0x0011C45D), UINT32_C(0x00248D59), UINT32_C(0x0006CAF4), UINT32_C(0x00356B6A), UINT32_C(0x000C93E3), UINT32_C(0x007DF1C5), UINT32_C(0x0015175F), UINT32_C(0x0006774E), UINT32_C(0x002C2F46), UINT32_C(0x0012A0B5), UINT32_C(0x0026AC43), UINT32_C(0x00316265), UINT32_C(0x0017578E)}, {UINT32_C(0x00637692), UINT32_C(0x0017AA0F), UINT32_C(0x000349D7), UINT32_C(0x0042BD56), UINT32_C(0x0020AC26), UINT32_C(0x00153D2E), UINT32_C(0x003BFE98), UINT32_C(0x0045B29F), UINT32_C(0x000C665A), UINT32_C(0x0015F634), UINT32_C(0x0031F264), UINT32_C(0x0005C891), UINT32_C(0x003F619E), UINT32_C(0x0028131C), UINT32_C(0x0018D792), UINT32_C(0x006219EF), UINT32_C(0x0039BD88), UINT32_C(0x001F8951), UINT32_C(0x000E21DF), UINT32_C(0x00495EAD), UINT32_C(0x00342FCA), UINT32_C(0x00196C92), UINT32_C(0x001EF0FA)}, {UINT32_C(0x0047865A), UINT32_C(0x00318D12), UINT32_C(0x003C903E), UINT32_C(0x000BD15E), UINT32_C(0x003D2D6E), UINT32_C(0x0002AA3A), UINT32_C(0x00227179), UINT32_C(0x0073CF23), UINT32_C(0x002DC1A1), UINT32_C(0x000D9B0C), UINT32_C(0x0011B186), UINT32_C(0x0068972C), UINT32_C(0x000C6DF0), UINT32_C(0x00077408), UINT32_C(0x0028FAEE), UINT32_C(0x001C3C02), UINT32_C(0x0037190A), UINT32_C(0x002F00E2), UINT32_C(0x001EC176), UINT32_C(0x00072B55), UINT32_C(0x0024E393), UINT32_C(0x0032CF55), UINT32_C(0x001437CD)}}, {{UINT32_C(0x006D31AF), UINT32_C(0x00321E4E), UINT32_C(0x000CA7EE), UINT32_C(0x005ABB74), UINT32_C(0x0000C3A9), UINT32_C(0x0019A488), UINT32_C(0x001861A0), UINT32_C(0x00582F9D), UINT32_C(0x003CFD06), UINT32_C(0x002EA1AF), UINT32_C(0x0018A543), UINT32_C(0x0010F4B5), UINT32_C(0x0010715D), UINT32_C(0x001F9AF3), UINT32_C(0x0023023F), UINT32_C(0x001643E3), UINT32_C(0x00215F28), UINT32_C(0x0019FD03), UINT32_C(0x0022E874), UINT32_C(0x003DA8F6), UINT32_C(0x0039620A), UINT32_C(0x0022056A), UINT32_C(0x000EA069)}, {UINT32_C(0x000518C5), UINT32_C(0x001AE0BF), UINT32_C(0x00094299), UINT32_C(0x001E2DED), UINT32_C(0x003500DA), UINT32_C(0x0009630E), UINT32_C(0x00063632), UINT32_C(0x003387CC), UINT32_C(0x00031191), UINT32_C(0x00108CFD), UINT32_C(0x00182E5F), UINT32_C(0x00683906), UINT32_C(0x000540A6), UINT32_C(0x0028D759), UINT32_C(0x001EE5BE), UINT32_C(0x00066621), UINT32_C(0x001C501A), UINT32_C(0x0013C28F), UINT32_C(0x000A2AA3), UINT32_C(0x003F6A17), UINT32_C(0x0007898A), UINT32_C(0x002E1235), UINT32_C(0x000019A8)}, {UINT32_C(0x006FEED8), UINT32_C(0x001D5B2A), UINT32_C(0x003F2A5F), UINT32_C(0x00097336), UINT32_C(0x0037FB45), UINT32_C(0x002DB6D6), UINT32_C(0x002CC41F), UINT32_C(0x003D7B28), UINT32_C(0x002F8AD4), UINT32_C(0x003151FC), UINT32_C(0x001C064A), UINT32_C(0x003C6241), UINT32_C(0x00365F52), UINT32_C(0x001581A2), UINT32_C(0x000C7BF2), UINT32_C(0x002AD32B), UINT32_C(0x0009C743), UINT32_C(0x0000608A), UINT32_C(0x00282F9A), UINT32_C(0x00263A9C), UINT32_C(0x003D2500), UINT32_C(0x003476D7), UINT32_C(0x0039390A)}}, {{UINT32_C(0x004F5AD3), UINT32_C(0x001444FE), UINT32_C(0x0006BAFD), UINT32_C(0x0061624F), UINT32_C(0x00011230), UINT32_C(0x00078216), UINT32_C(0x00298470), UINT32_C(0x0015013E), UINT32_C(0x003A1285), UINT32_C(0x0016EA4D), UINT32_C(0x001DD727), UINT32_C(0x001A40E5), UINT32_C(0x002D2579), UINT32_C(0x001F10D3), UINT32_C(0x00220C0B), UINT32_C(0x000EC9E4), UINT32_C(0x0026BC42), UINT32_C(0x0003AB97), UINT32_C(0x00393447), UINT32_C(0x0045B418), UINT32_C(0x0006D93B), UINT32_C(0x0010FC88), UINT32_C(0x00064A8E)}, {UINT32_C(0x006BE9EA), UINT32_C(0x000CA597), UINT32_C(0x002253CF), UINT32_C(0x00638639), UINT32_C(0x002B0B51), UINT32_C(0x00030BC7), UINT32_C(0x00323019), UINT32_C(0x000CCA80), UINT32_C(0x0010E5F7), UINT32_C(0x002EC009), UINT32_C(0x0015B4CB), UINT32_C(0x00663CF0), UINT32_C(0x0035A148), UINT32_C(0x002FA75B), UINT32_C(0x00311933), UINT32_C(0x0063C853), UINT32_C(0x0011D6D9), UINT32_C(0x0037F8DF), UINT32_C(0x001CF5AA), UINT32_C(0x00151B7A), UINT32_C(0x000C96E3), UINT32_C(0x002C8326), UINT32_C(0x00016832)}, {UINT32_C(0x006A5978), UINT32_C(0x001A7F02), UINT32_C(0x000354FE), UINT32_C(0x003933E3), UINT32_C(0x00071810), UINT32_C(0x000077D8), UINT32_C(0x0033A7B3), UINT32_C(0x0026F851), UINT32_C(0x0034FEF5), UINT32_C(0x0010B6DF), UINT32_C(0x003399BA), UINT32_C(0x000DFB2B), UINT32_C(0x0034476F), UINT32_C(0x00346D99), UINT32_C(0x002F557E), UINT32_C(0x0047897F), UINT32_C(0x00348DBE), UINT32_C(0x001CDE03), UINT32_C(0x002A740A), UINT32_C(0x0066E864), UINT32_C(0x0003C78B), UINT32_C(0x00028392), UINT32_C(0x0025F5DB)}}, }, { {{UINT32_C(0x0017286E), UINT32_C(0x000F5A5C), UINT32_C(0x0039B3CA), UINT32_C(0x001F9077), UINT32_C(0x001B296D), UINT32_C(0x0005DC87), UINT32_C(0x001D0F98), UINT32_C(0x0064781E), UINT32_C(0x00093D05), UINT32_C(0x00126B0F), UINT32_C(0x000BBA75), UINT32_C(0x0044F9E6), UINT32_C(0x0028E04B), UINT32_C(0x0020A55E), UINT32_C(0x0012F73B), UINT32_C(0x002CF153), UINT32_C(0x0021678C), UINT32_C(0x002F8222), UINT32_C(0x0015DD38), UINT32_C(0x00687C5D), UINT32_C(0x0027B303), UINT32_C(0x003155B8), UINT32_C(0x002B5FB6)}, {UINT32_C(0x0041E5E6), UINT32_C(0x0006CE3F), UINT32_C(0x000699C4), UINT32_C(0x001B1A07), UINT32_C(0x0008BE9D), UINT32_C(0x000A3A3E), UINT32_C(0x00229979), UINT32_C(0x005014A4), UINT32_C(0x0002F0CB), UINT32_C(0x003B52A9), UINT32_C(0x00083FDD), UINT32_C(0x0047E479), UINT32_C(0x0009DD35), UINT32_C(0x00391B43), UINT32_C(0x0021E9C2), UINT32_C(0x004D6C1F), UINT32_C(0x000D8AB1), UINT32_C(0x002AC33D), UINT32_C(0x003F840F), UINT32_C(0x00713093), UINT32_C(0x001F7D6C), UINT32_C(0x0000637C), UINT32_C(0x002A1B17)}, {UINT32_C(0x002A0728), UINT32_C(0x0022B9B0), UINT32_C(0x00120094), UINT32_C(0x006AF4E8), UINT32_C(0x003A01D1), UINT32_C(0x002767DB), UINT32_C(0x00238927), UINT32_C(0x0068635D), UINT32_C(0x0003EA0A), UINT32_C(0x000FE41F), UINT32_C(0x003CB1CE), UINT32_C(0x00133FA4), UINT32_C(0x002B3010), UINT32_C(0x000D5D89), UINT32_C(0x000F339F), UINT32_C(0x005D46A1), UINT32_C(0x00290D2D), UINT32_C(0x001FC5BE), UINT32_C(0x0003A00F), UINT32_C(0x0062DC95), UINT32_C(0x0037CAB9), UINT32_C(0x002A05E9), UINT32_C(0x002BBC6F)}}, {{UINT32_C(0x00706744), UINT32_C(0x0019DB10), UINT32_C(0x003F9B5C), UINT32_C(0x000F3E76), UINT32_C(0x001B2506), UINT32_C(0x00127BDF), UINT32_C(0x000EB38D), UINT32_C(0x00042E3C), UINT32_C(0x0003DF4C), UINT32_C(0x003B146C), UINT32_C(0x00395196), UINT32_C(0x0018E1D3), UINT32_C(0x000F2464), UINT32_C(0x00307EFB), UINT32_C(0x002A190A), UINT32_C(0x0058D3B4), UINT32_C(0x0012C74A), UINT32_C(0x00195650), UINT32_C(0x000C0BF0), UINT32_C(0x001892B5), UINT32_C(0x0006770F), UINT32_C(0x001A228B), UINT32_C(0x003113A8)}, {UINT32_C(0x007384A0), UINT32_C(0x00041291), UINT32_C(0x00123686), UINT32_C(0x001AD842), UINT32_C(0x001E3157), UINT32_C(0x0007A754), UINT32_C(0x000905E0), UINT32_C(0x003BC7D8), UINT32_C(0x00116FE2), UINT32_C(0x002D132F), UINT32_C(0x000E6646), UINT32_C(0x0064D804), UINT32_C(0x001BA830), UINT32_C(0x003695CB), UINT32_C(0x00173E41), UINT32_C(0x005CFDBC), UINT32_C(0x002188CF), UINT32_C(0x001C1011), UINT32_C(0x0019A6D6), UINT32_C(0x004789C9), UINT32_C(0x0032435A), UINT32_C(0x002B1970), UINT32_C(0x003D40A8)}, {UINT32_C(0x00334E7F), UINT32_C(0x000C23F4), UINT32_C(0x00160B20), UINT32_C(0x003BF3EA), UINT32_C(0x003B5299), UINT32_C(0x001D3EC2), UINT32_C(0x0036DAE9), UINT32_C(0x0058023B), UINT32_C(0x000B5EAF), UINT32_C(0x00371744), UINT32_C(0x000EF4D7), UINT32_C(0x0008817F), UINT32_C(0x0002BE7F), UINT32_C(0x001EB13E), UINT32_C(0x002D1A5F), UINT32_C(0x0069630F), UINT32_C(0x00093D58), UINT32_C(0x0036D385), UINT32_C(0x002A3045), UINT32_C(0x0025C26B), UINT32_C(0x00111E19), UINT32_C(0x001756BF), UINT32_C(0x0035B39D)}}, {{UINT32_C(0x00545C3C), UINT32_C(0x00137D2C), UINT32_C(0x000E7FAB), UINT32_C(0x000EB9AF), UINT32_C(0x002789FC), UINT32_C(0x001EF592), UINT32_C(0x0034210A), UINT32_C(0x002A5180), UINT32_C(0x0023EDAE), UINT32_C(0x000307F6), UINT32_C(0x0023CFAC), UINT32_C(0x001BF315), UINT32_C(0x0020B287), UINT32_C(0x000A3DE8), UINT32_C(0x00189938), UINT32_C(0x00378524), UINT32_C(0x002DEDDF), UINT32_C(0x00215405), UINT32_C(0x001398B5), UINT32_C(0x004827A1), UINT32_C(0x0018A82A), UINT32_C(0x000AB6B7), UINT32_C(0x00214B8A)}, {UINT32_C(0x001B6EE1), UINT32_C(0x00134930), UINT32_C(0x002CB43D), UINT32_C(0x004DC974), UINT32_C(0x0031EAF7), UINT32_C(0x003BDA7E), UINT32_C(0x0033618E), UINT32_C(0x004A982D), UINT32_C(0x001B6E94), UINT32_C(0x000D4749), UINT32_C(0x0007D19B), UINT32_C(0x005FAAB5), UINT32_C(0x003F714A), UINT32_C(0x000E57A9), UINT32_C(0x0028FDD3), UINT32_C(0x0075BD17), UINT32_C(0x003D774F), UINT32_C(0x000E4D55), UINT32_C(0x003CA227), UINT32_C(0x000DF34F), UINT32_C(0x0028970F), UINT32_C(0x0036F5EA), UINT32_C(0x0022BC1B)}, {UINT32_C(0x00475039), UINT32_C(0x00230014), UINT32_C(0x001FEA38), UINT32_C(0x005CCC55), UINT32_C(0x003C6941), UINT32_C(0x0022517F), UINT32_C(0x002D30E5), UINT32_C(0x00309B25), UINT32_C(0x00034CC8), UINT32_C(0x00356ED5), UINT32_C(0x0014FCA5), UINT32_C(0x0036104B), UINT32_C(0x001D0F11), UINT32_C(0x00273D12), UINT32_C(0x00170F1B), UINT32_C(0x0076D103), UINT32_C(0x001F613D), UINT32_C(0x001C9D53), UINT32_C(0x001F1400), UINT32_C(0x0076A382), UINT32_C(0x0025000D), UINT32_C(0x003B5419), UINT32_C(0x0015987C)}}, {{UINT32_C(0x007F4AC5), UINT32_C(0x0008E500), UINT32_C(0x00016BA4), UINT32_C(0x007474E5), UINT32_C(0x0009CFB4), UINT32_C(0x001D6BB8), UINT32_C(0x003B23DD), UINT32_C(0x005DB100), UINT32_C(0x0008843B), UINT32_C(0x0012DA0A), UINT32_C(0x0024794D), UINT32_C(0x0026577B), UINT32_C(0x00240E5E), UINT32_C(0x00346C8E), UINT32_C(0x0027DC8C), UINT32_C(0x00634650), UINT32_C(0x00195F50), UINT32_C(0x00071E58), UINT32_C(0x000A83CF), UINT32_C(0x001B8E3D), UINT32_C(0x001D4281), UINT32_C(0x0014D35D), UINT32_C(0x002C222C)}, {UINT32_C(0x0020B3A0), UINT32_C(0x0006028D), UINT32_C(0x002EB45A), UINT32_C(0x003DF458), UINT32_C(0x001D376C), UINT32_C(0x0018C400), UINT32_C(0x002C3A24), UINT32_C(0x00319F9A), UINT32_C(0x00022C40), UINT32_C(0x0002F8C6), UINT32_C(0x0022E290), UINT32_C(0x0026FD32), UINT32_C(0x00035216), UINT32_C(0x001D9C11), UINT32_C(0x001789F2), UINT32_C(0x000B1E8A), UINT32_C(0x000A64CD), UINT32_C(0x002909D1), UINT32_C(0x003F99FB), UINT32_C(0x0053ECE7), UINT32_C(0x00067860), UINT32_C(0x002534B2), UINT32_C(0x003F2F3F)}, {UINT32_C(0x00231268), UINT32_C(0x000ED62F), UINT32_C(0x0031D715), UINT32_C(0x00518514), UINT32_C(0x003D37EF), UINT32_C(0x00083CBE), UINT32_C(0x001E2CE4), UINT32_C(0x007EC3F7), UINT32_C(0x0038FE97), UINT32_C(0x0018E538), UINT32_C(0x0014EF47), UINT32_C(0x007E9282), UINT32_C(0x002D63F2), UINT32_C(0x003161B4), UINT32_C(0x0039ADC6), UINT32_C(0x0007BA2A), UINT32_C(0x001FF255), UINT32_C(0x001874F8), UINT32_C(0x000AF0FD), UINT32_C(0x002AAAB7), UINT32_C(0x00298743), UINT32_C(0x00333D31), UINT32_C(0x000E50E3)}}, {{UINT32_C(0x000F76FA), UINT32_C(0x001833CD), UINT32_C(0x0016A2D3), UINT32_C(0x006A2D69), UINT32_C(0x0002F385), UINT32_C(0x001F8454), UINT32_C(0x003FE32A), UINT32_C(0x004BABD6), UINT32_C(0x0003FDDB), UINT32_C(0x0012096E), UINT32_C(0x0024DC23), UINT32_C(0x00636CE5), UINT32_C(0x00055CB4), UINT32_C(0x0004F203), UINT32_C(0x0022C2DF), UINT32_C(0x00599D77), UINT32_C(0x0038B010), UINT32_C(0x003624FA), UINT32_C(0x002121D8), UINT32_C(0x006EB595), UINT32_C(0x000EB1AE), UINT32_C(0x0033B6F0), UINT32_C(0x001072A8)}, {UINT32_C(0x00660A55), UINT32_C(0x000C0424), UINT32_C(0x0013326F), UINT32_C(0x00530EFA), UINT32_C(0x00038052), UINT32_C(0x003A7413), UINT32_C(0x0000B6CF), UINT32_C(0x0025BA64), UINT32_C(0x0006A2BE), UINT32_C(0x0039B086), UINT32_C(0x0007574E), UINT32_C(0x0018FDBB), UINT32_C(0x000714B1), UINT32_C(0x0026708B), UINT32_C(0x000515A5), UINT32_C(0x0043DEFC), UINT32_C(0x002CE885), UINT32_C(0x00171175), UINT32_C(0x002570F1), UINT32_C(0x004EE75A), UINT32_C(0x001930E0), UINT32_C(0x00155BBD), UINT32_C(0x000C64C5)}, {UINT32_C(0x0034919D), UINT32_C(0x001443DB), UINT32_C(0x003E9123), UINT32_C(0x000E1842), UINT32_C(0x003545C9), UINT32_C(0x00098DB4), UINT32_C(0x00184A4D), UINT32_C(0x005DAFC4), UINT32_C(0x00098F85), UINT32_C(0x001EA9C6), UINT32_C(0x0023826A), UINT32_C(0x0069B06D), UINT32_C(0x001DFBA9), UINT32_C(0x000798BE), UINT32_C(0x000AE8AF), UINT32_C(0x00236B65), UINT32_C(0x001846C8), UINT32_C(0x003AB8DD), UINT32_C(0x002C7DB0), UINT32_C(0x00074EA7), UINT32_C(0x002DF25B), UINT32_C(0x001C28C7), UINT32_C(0x0025B6DE)}}, {{UINT32_C(0x0063C056), UINT32_C(0x000F0F64), UINT32_C(0x0003AF88), UINT32_C(0x0026EF3F), UINT32_C(0x000ACF8A), UINT32_C(0x003B178B), UINT32_C(0x001A1B3F), UINT32_C(0x002802BE), UINT32_C(0x00141F1B), UINT32_C(0x001188F2), UINT32_C(0x003B7121), UINT32_C(0x0004B6A3), UINT32_C(0x0017E723), UINT32_C(0x0015DF00), UINT32_C(0x00395BAE), UINT32_C(0x0012A3E3), UINT32_C(0x000D5B27), UINT32_C(0x000EF7A7), UINT32_C(0x00108148), UINT32_C(0x0027EAAD), UINT32_C(0x000BC9DC), UINT32_C(0x00229BC0), UINT32_C(0x003E724E)}, {UINT32_C(0x0065E7F8), UINT32_C(0x001505D9), UINT32_C(0x002AC40C), UINT32_C(0x003163A4), UINT32_C(0x003EDF4D), UINT32_C(0x0004F661), UINT32_C(0x003262E7), UINT32_C(0x003B5607), UINT32_C(0x002D19B3), UINT32_C(0x00107A09), UINT32_C(0x000F13CC), UINT32_C(0x004C7800), UINT32_C(0x0035B8E6), UINT32_C(0x00254CD7), UINT32_C(0x0006103F), UINT32_C(0x0041F4F8), UINT32_C(0x00122E7D), UINT32_C(0x00201C99), UINT32_C(0x003F9160), UINT32_C(0x0056128E), UINT32_C(0x0032FA32), UINT32_C(0x0019A4A9), UINT32_C(0x002E0115)}, {UINT32_C(0x0012D79A), UINT32_C(0x000A6E34), UINT32_C(0x0008D368), UINT32_C(0x001977F5), UINT32_C(0x0011E966), UINT32_C(0x00123FE5), UINT32_C(0x00343FAC), UINT32_C(0x0012E1C9), UINT32_C(0x001AFF6C), UINT32_C(0x0023C0EC), UINT32_C(0x003A2A35), UINT32_C(0x005016A3), UINT32_C(0x002CF3B6), UINT32_C(0x00078BE6), UINT32_C(0x0008BE88), UINT32_C(0x005FC4FE), UINT32_C(0x00002694), UINT32_C(0x00258B13), UINT32_C(0x000ABDAE), UINT32_C(0x004B9DF4), UINT32_C(0x00187A2F), UINT32_C(0x0036EC5B), UINT32_C(0x002B7DF6)}}, {{UINT32_C(0x006DAE2C), UINT32_C(0x00032CF3), UINT32_C(0x002D7562), UINT32_C(0x0032FF5D), UINT32_C(0x00070816), UINT32_C(0x000D011D), UINT32_C(0x000E17B7), UINT32_C(0x0038556C), UINT32_C(0x003DA262), UINT32_C(0x000AC037), UINT32_C(0x00112AE7), UINT32_C(0x001EB223), UINT32_C(0x002587C3), UINT32_C(0x001A3F55), UINT32_C(0x0022E756), UINT32_C(0x007D6544), UINT32_C(0x0035E36C), UINT32_C(0x00298741), UINT32_C(0x001945D2), UINT32_C(0x007E68FA), UINT32_C(0x003F5793), UINT32_C(0x0013306C), UINT32_C(0x00021451)}, {UINT32_C(0x007CB839), UINT32_C(0x001964D3), UINT32_C(0x0007ED8E), UINT32_C(0x003AEF58), UINT32_C(0x002BC177), UINT32_C(0x000F6696), UINT32_C(0x0001CAEB), UINT32_C(0x00509C2B), UINT32_C(0x003F5DBB), UINT32_C(0x001131ED), UINT32_C(0x00151301), UINT32_C(0x0031F44F), UINT32_C(0x001D60F9), UINT32_C(0x001A36A3), UINT32_C(0x002696D3), UINT32_C(0x00713749), UINT32_C(0x000415F4), UINT32_C(0x000C2E1E), UINT32_C(0x0018E7EE), UINT32_C(0x006737C5), UINT32_C(0x00071BB7), UINT32_C(0x0008C358), UINT32_C(0x001F1407)}, {UINT32_C(0x0042C734), UINT32_C(0x00009034), UINT32_C(0x001689FC), UINT32_C(0x00066E68), UINT32_C(0x0018F756), UINT32_C(0x001DCFDF), UINT32_C(0x00083DCC), UINT32_C(0x003841C9), UINT32_C(0x000DD192), UINT32_C(0x00122593), UINT32_C(0x0031A8DD), UINT32_C(0x00341616), UINT32_C(0x00196D74), UINT32_C(0x000B8D12), UINT32_C(0x000B5714), UINT32_C(0x006030FC), UINT32_C(0x00390678), UINT32_C(0x003AB96C), UINT32_C(0x00053F6E), UINT32_C(0x002C04AB), UINT32_C(0x001D12C3), UINT32_C(0x0035009E), UINT32_C(0x003DC316)}}, {{UINT32_C(0x003D2EE8), UINT32_C(0x000EDDF2), UINT32_C(0x0016BD70), UINT32_C(0x00320C0C), UINT32_C(0x00052F43), UINT32_C(0x002FA0A8), UINT32_C(0x00065472), UINT32_C(0x00029362), UINT32_C(0x002C27A2), UINT32_C(0x0005E1BB), UINT32_C(0x0019992C), UINT32_C(0x00030905), UINT32_C(0x000BF0F4), UINT32_C(0x00209691), UINT32_C(0x00350247), UINT32_C(0x0057E044), UINT32_C(0x000E41CD), UINT32_C(0x0017F9EE), UINT32_C(0x00078967), UINT32_C(0x006ACE99), UINT32_C(0x0007C820), UINT32_C(0x00113D5C), UINT32_C(0x0038DA0A)}, {UINT32_C(0x00083FE6), UINT32_C(0x001C1BC1), UINT32_C(0x000EB8D8), UINT32_C(0x0007692B), UINT32_C(0x00281516), UINT32_C(0x00155672), UINT32_C(0x000D8B29), UINT32_C(0x003E13E4), UINT32_C(0x003138BC), UINT32_C(0x003CACE6), UINT32_C(0x0035FA0F), UINT32_C(0x0023164A), UINT32_C(0x000EC9E6), UINT32_C(0x0023B1C7), UINT32_C(0x00225BFF), UINT32_C(0x007740C9), UINT32_C(0x0030F788), UINT32_C(0x00006D8C), UINT32_C(0x0002D6BD), UINT32_C(0x002603CE), UINT32_C(0x0005485E), UINT32_C(0x000E66C9), UINT32_C(0x00019E3E)}, {UINT32_C(0x001300D5), UINT32_C(0x002C1C24), UINT32_C(0x0032064C), UINT32_C(0x0043F0E6), UINT32_C(0x000860BC), UINT32_C(0x0014A553), UINT32_C(0x0036075B), UINT32_C(0x001987D7), UINT32_C(0x002754F6), UINT32_C(0x00385EEF), UINT32_C(0x0013D858), UINT32_C(0x002C23BB), UINT32_C(0x0032C81D), UINT32_C(0x000E6F7D), UINT32_C(0x003C8EB3), UINT32_C(0x003644D0), UINT32_C(0x0013D21A), UINT32_C(0x0031FB11), UINT32_C(0x0028B7B0), UINT32_C(0x000E500E), UINT32_C(0x001DA66D), UINT32_C(0x0020B336), UINT32_C(0x00364559)}}, {{UINT32_C(0x0008F24B), UINT32_C(0x003022F1), UINT32_C(0x00292D14), UINT32_C(0x00009DB0), UINT32_C(0x0012884B), UINT32_C(0x002CB622), UINT32_C(0x0009D61F), UINT32_C(0x0010FF0B), UINT32_C(0x0005C248), UINT32_C(0x00128DF1), UINT32_C(0x0014DD06), UINT32_C(0x0006C833), UINT32_C(0x00177E25), UINT32_C(0x00037C0E), UINT32_C(0x0029C2CD), UINT32_C(0x00072DE1), UINT32_C(0x001F0312), UINT32_C(0x0013FA86), UINT32_C(0x002E1D55), UINT32_C(0x000102DE), UINT32_C(0x00326586), UINT32_C(0x00089C95), UINT32_C(0x000D11CA)}, {UINT32_C(0x001E5A41), UINT32_C(0x0014B02F), UINT32_C(0x002AFDA8), UINT32_C(0x003C8A99), UINT32_C(0x00304A64), UINT32_C(0x00254B15), UINT32_C(0x0001DEB3), UINT32_C(0x00481E27), UINT32_C(0x0032A61C), UINT32_C(0x000D6970), UINT32_C(0x00182CAA), UINT32_C(0x0034EC0A), UINT32_C(0x0019A25D), UINT32_C(0x001C8588), UINT32_C(0x003F689B), UINT32_C(0x00233BD8), UINT32_C(0x003ABCAA), UINT32_C(0x0033E7AF), UINT32_C(0x00375FA3), UINT32_C(0x001C8D11), UINT32_C(0x0021737A), UINT32_C(0x00102C76), UINT32_C(0x000C7526)}, {UINT32_C(0x00352E1E), UINT32_C(0x002092B9), UINT32_C(0x0008105C), UINT32_C(0x007FB15D), UINT32_C(0x00255DD0), UINT32_C(0x000F061B), UINT32_C(0x0016C72F), UINT32_C(0x006E33F5), UINT32_C(0x003A9DD5), UINT32_C(0x0039695D), UINT32_C(0x003502FE), UINT32_C(0x003A705F), UINT32_C(0x00370221), UINT32_C(0x0030642F), UINT32_C(0x00163D04), UINT32_C(0x007BF9AC), UINT32_C(0x000A4C37), UINT32_C(0x001E0389), UINT32_C(0x001214FF), UINT32_C(0x001FF3D6), UINT32_C(0x003D5C3D), UINT32_C(0x0028CF11), UINT32_C(0x001AAA6A)}}, {{UINT32_C(0x005BF790), UINT32_C(0x0007D0F3), UINT32_C(0x0001C51D), UINT32_C(0x0020772C), UINT32_C(0x00200268), UINT32_C(0x0001B52F), UINT32_C(0x00279ABE), UINT32_C(0x001F71CF), UINT32_C(0x00375D44), UINT32_C(0x000F0F65), UINT32_C(0x0027410E), UINT32_C(0x003D9BE0), UINT32_C(0x002C960C), UINT32_C(0x00003C9C), UINT32_C(0x003A7A25), UINT32_C(0x004F1756), UINT32_C(0x002CBE23), UINT32_C(0x0004069A), UINT32_C(0x00182C17), UINT32_C(0x005CFAF2), UINT32_C(0x00026993), UINT32_C(0x0009DA3A), UINT32_C(0x0039F360)}, {UINT32_C(0x00364E82), UINT32_C(0x000346D3), UINT32_C(0x003D3445), UINT32_C(0x0000A6B7), UINT32_C(0x00037BD7), UINT32_C(0x001658EC), UINT32_C(0x0000B914), UINT32_C(0x006FA605), UINT32_C(0x001454EB), UINT32_C(0x002CE3C8), UINT32_C(0x003D9ACC), UINT32_C(0x007AF12D), UINT32_C(0x0021D6DC), UINT32_C(0x002CC083), UINT32_C(0x001879BA), UINT32_C(0x0051EE63), UINT32_C(0x0019F677), UINT32_C(0x0010AD1F), UINT32_C(0x002A0F9B), UINT32_C(0x0041EA60), UINT32_C(0x00277936), UINT32_C(0x00380AD2), UINT32_C(0x001D4704)}, {UINT32_C(0x004BFEC6), UINT32_C(0x0001B656), UINT32_C(0x002537A7), UINT32_C(0x0074F164), UINT32_C(0x003DAAEE), UINT32_C(0x0030B1B3), UINT32_C(0x0028EFD7), UINT32_C(0x0063000E), UINT32_C(0x002E7006), UINT32_C(0x0006D43F), UINT32_C(0x003A92B0), UINT32_C(0x005CBF0D), UINT32_C(0x001B3D1C), UINT32_C(0x00155A03), UINT32_C(0x0013BCFB), UINT32_C(0x0022E3EA), UINT32_C(0x0009A093), UINT32_C(0x00372B6D), UINT32_C(0x003B3D4A), UINT32_C(0x0022BBAE), UINT32_C(0x002C8021), UINT32_C(0x002F7ACB), UINT32_C(0x002885FE)}}, {{UINT32_C(0x003234EF), UINT32_C(0x0029B8C5), UINT32_C(0x001AE10C), UINT32_C(0x0016CD11), UINT32_C(0x003ACD42), UINT32_C(0x0009111E), UINT32_C(0x002E5197), UINT32_C(0x000CF7DD), UINT32_C(0x0002A45E), UINT32_C(0x0013DCB9), UINT32_C(0x0011DF8A), UINT32_C(0x0041E6A2), UINT32_C(0x003D6BEC), UINT32_C(0x0019831C), UINT32_C(0x0026F1BD), UINT32_C(0x001F02BE), UINT32_C(0x00291AD9), UINT32_C(0x000AEAD3), UINT32_C(0x000655DB), UINT32_C(0x004C8DC1), UINT32_C(0x0027BF77), UINT32_C(0x0017E4AD), UINT32_C(0x00376E83)}, {UINT32_C(0x006C4C88), UINT32_C(0x003238DA), UINT32_C(0x000D5920), UINT32_C(0x002DB750), UINT32_C(0x0035FA90), UINT32_C(0x000C2BC9), UINT32_C(0x002DB3D0), UINT32_C(0x00373A80), UINT32_C(0x002E0271), UINT32_C(0x003818B5), UINT32_C(0x003209D6), UINT32_C(0x003D0A96), UINT32_C(0x0007BE66), UINT32_C(0x00306A1A), UINT32_C(0x001E42D6), UINT32_C(0x0021C5C7), UINT32_C(0x00255B61), UINT32_C(0x002E2400), UINT32_C(0x000B30C1), UINT32_C(0x0012F49E), UINT32_C(0x000E248A), UINT32_C(0x003BBE77), UINT32_C(0x0008EEED)}, {UINT32_C(0x0014067A), UINT32_C(0x002CF299), UINT32_C(0x00082BEF), UINT32_C(0x00130694), UINT32_C(0x0018C073), UINT32_C(0x000CA3AA), UINT32_C(0x00128835), UINT32_C(0x0023457E), UINT32_C(0x000FF51F), UINT32_C(0x003F8C44), UINT32_C(0x003FA288), UINT32_C(0x00269665), UINT32_C(0x00080B90), UINT32_C(0x000CFEE1), UINT32_C(0x003F3285), UINT32_C(0x000DF6EE), UINT32_C(0x000B1087), UINT32_C(0x00107D3D), UINT32_C(0x00311E7D), UINT32_C(0x007CA53C), UINT32_C(0x0033FCA6), UINT32_C(0x00263A19), UINT32_C(0x00363624)}}, {{UINT32_C(0x001DDC6C), UINT32_C(0x003A0EDE), UINT32_C(0x001408D0), UINT32_C(0x001EEE7B), UINT32_C(0x001405FC), UINT32_C(0x00128750), UINT32_C(0x002CA34C), UINT32_C(0x0000FBEA), UINT32_C(0x0006137A), UINT32_C(0x00370D1A), UINT32_C(0x003B6A04), UINT32_C(0x00057D79), UINT32_C(0x0028B50F), UINT32_C(0x0013A132), UINT32_C(0x0007EB68), UINT32_C(0x007A7017), UINT32_C(0x002517C9), UINT32_C(0x00219256), UINT32_C(0x003E617C), UINT32_C(0x00456ECE), UINT32_C(0x0011278F), UINT32_C(0x001624F1), UINT32_C(0x0003C0F7)}, {UINT32_C(0x000AF6C0), UINT32_C(0x003DA705), UINT32_C(0x000CC5A4), UINT32_C(0x00045A7B), UINT32_C(0x0030E620), UINT32_C(0x0005489D), UINT32_C(0x00350783), UINT32_C(0x00053DBD), UINT32_C(0x0016C68B), UINT32_C(0x002D182B), UINT32_C(0x00294A05), UINT32_C(0x00749DE2), UINT32_C(0x000DDD4D), UINT32_C(0x003B31A2), UINT32_C(0x00197D97), UINT32_C(0x006BBE3E), UINT32_C(0x003FF605), UINT32_C(0x00049D4F), UINT32_C(0x00312E4D), UINT32_C(0x003F5019), UINT32_C(0x003E1C7F), UINT32_C(0x003D1C1D), UINT32_C(0x003D261E)}, {UINT32_C(0x0026418D), UINT32_C(0x00292458), UINT32_C(0x001A1FC4), UINT32_C(0x00617DF6), UINT32_C(0x0024EEF7), UINT32_C(0x000F2BD5), UINT32_C(0x0034E0B9), UINT32_C(0x006C6D66), UINT32_C(0x00074BA2), UINT32_C(0x001A4D76), UINT32_C(0x00306BE0), UINT32_C(0x0002376E), UINT32_C(0x0005EF92), UINT32_C(0x003EBB91), UINT32_C(0x0024BA60), UINT32_C(0x001BA73C), UINT32_C(0x00222A6B), UINT32_C(0x0018DAEF), UINT32_C(0x00141DE7), UINT32_C(0x00390908), UINT32_C(0x0035530C), UINT32_C(0x0002CD8D), UINT32_C(0x00077882)}}, {{UINT32_C(0x00440DE3), UINT32_C(0x002D9BF2), UINT32_C(0x000C1E19), UINT32_C(0x0013C1C8), UINT32_C(0x00318020), UINT32_C(0x001DCAEC), UINT32_C(0x00064315), UINT32_C(0x00335FB3), UINT32_C(0x00146401), UINT32_C(0x0035671E), UINT32_C(0x0008E31D), UINT32_C(0x0069E0DB), UINT32_C(0x00071FA1), UINT32_C(0x0039CF3B), UINT32_C(0x0018E811), UINT32_C(0x002DB19F), UINT32_C(0x001279C0), UINT32_C(0x0029FDEB), UINT32_C(0x002EF592), UINT32_C(0x005F5F4A), UINT32_C(0x000A323A), UINT32_C(0x002C8BBB), UINT32_C(0x00326780)}, {UINT32_C(0x000CB270), UINT32_C(0x00086BD0), UINT32_C(0x0036C911), UINT32_C(0x0005F16E), UINT32_C(0x00359A7C), UINT32_C(0x0033FFDF), UINT32_C(0x002FE3CF), UINT32_C(0x00286EBC), UINT32_C(0x00282C12), UINT32_C(0x0032282A), UINT32_C(0x002231DA), UINT32_C(0x00000319), UINT32_C(0x003D8930), UINT32_C(0x002056B8), UINT32_C(0x003104E7), UINT32_C(0x0006E83C), UINT32_C(0x0003636A), UINT32_C(0x0024CB95), UINT32_C(0x002DE038), UINT32_C(0x00081E87), UINT32_C(0x0034B889), UINT32_C(0x000F9915), UINT32_C(0x00310022)}, {UINT32_C(0x0040A26D), UINT32_C(0x002410E6), UINT32_C(0x0033665C), UINT32_C(0x005EB45D), UINT32_C(0x0001C554), UINT32_C(0x00031D73), UINT32_C(0x000EA84F), UINT32_C(0x006564D6), UINT32_C(0x001F3357), UINT32_C(0x0020481A), UINT32_C(0x00180940), UINT32_C(0x003BF11D), UINT32_C(0x002AF372), UINT32_C(0x002559BC), UINT32_C(0x00178008), UINT32_C(0x000A361C), UINT32_C(0x0037281D), UINT32_C(0x000742C0), UINT32_C(0x003B03D2), UINT32_C(0x005EBA80), UINT32_C(0x003348EE), UINT32_C(0x00332C9E), UINT32_C(0x00131D23)}}, {{UINT32_C(0x004F558D), UINT32_C(0x00110D2E), UINT32_C(0x0010B290), UINT32_C(0x00298F39), UINT32_C(0x001A9DD0), UINT32_C(0x00045042), UINT32_C(0x00074453), UINT32_C(0x0031D6D7), UINT32_C(0x0007787F), UINT32_C(0x002DAAA8), UINT32_C(0x003148F0), UINT32_C(0x00014722), UINT32_C(0x001A5F6A), UINT32_C(0x00101BC3), UINT32_C(0x00127243), UINT32_C(0x007D18A1), UINT32_C(0x002A51D2), UINT32_C(0x0025ED49), UINT32_C(0x003D93AC), UINT32_C(0x0000A172), UINT32_C(0x002D4427), UINT32_C(0x0035288C), UINT32_C(0x000733E5)}, {UINT32_C(0x004F5F03), UINT32_C(0x003E1845), UINT32_C(0x0006AEB2), UINT32_C(0x0072B386), UINT32_C(0x00309DB4), UINT32_C(0x002E4AE4), UINT32_C(0x001C33C4), UINT32_C(0x0064AA28), UINT32_C(0x003A80E7), UINT32_C(0x0018D735), UINT32_C(0x0035E7AB), UINT32_C(0x0049C50A), UINT32_C(0x0011BF7D), UINT32_C(0x001CF85A), UINT32_C(0x00310DD1), UINT32_C(0x00755DE3), UINT32_C(0x001EF133), UINT32_C(0x0019EC22), UINT32_C(0x00093BF1), UINT32_C(0x0079C3FF), UINT32_C(0x0035788E), UINT32_C(0x003BCE6D), UINT32_C(0x00319941)}, {UINT32_C(0x00320489), UINT32_C(0x0013DD6F), UINT32_C(0x0030C812), UINT32_C(0x0058EFB4), UINT32_C(0x00199A57), UINT32_C(0x0001DCC5), UINT32_C(0x00397377), UINT32_C(0x006262B8), UINT32_C(0x002B88C5), UINT32_C(0x0009A7A2), UINT32_C(0x000243A8), UINT32_C(0x000FE111), UINT32_C(0x00388C89), UINT32_C(0x0011A2E9), UINT32_C(0x00227DAE), UINT32_C(0x004E02B8), UINT32_C(0x0004E7BC), UINT32_C(0x0003B33F), UINT32_C(0x0003C0C6), UINT32_C(0x0025DF7E), UINT32_C(0x003A82E0), UINT32_C(0x003930EE), UINT32_C(0x0013C142)}}, {{UINT32_C(0x0066CDFE), UINT32_C(0x000F2EAC), UINT32_C(0x00131171), UINT32_C(0x000D830C), UINT32_C(0x00073ABF), UINT32_C(0x0006D5DB), UINT32_C(0x0019F2ED), UINT32_C(0x007D8846), UINT32_C(0x002CDE7E), UINT32_C(0x001F8420), UINT32_C(0x00248809), UINT32_C(0x0070E344), UINT32_C(0x00068413), UINT32_C(0x000706E0), UINT32_C(0x002454A6), UINT32_C(0x003C1F38), UINT32_C(0x0020840E), UINT32_C(0x00308F2A), UINT32_C(0x003B026E), UINT32_C(0x0055D941), UINT32_C(0x0026CD7D), UINT32_C(0x00041FFB), UINT32_C(0x0016E182)}, {UINT32_C(0x00498EA7), UINT32_C(0x0028466B), UINT32_C(0x002EE6E4), UINT32_C(0x005ADB8E), UINT32_C(0x0034DF94), UINT32_C(0x0016E8FA), UINT32_C(0x000DD486), UINT32_C(0x0022172A), UINT32_C(0x0026F797), UINT32_C(0x003EA2F7), UINT32_C(0x003F32FE), UINT32_C(0x00761C80), UINT32_C(0x00141A4B), UINT32_C(0x003A2DC0), UINT32_C(0x003F2489), UINT32_C(0x00284EBF), UINT32_C(0x00324946), UINT32_C(0x00098DC6), UINT32_C(0x00140160), UINT32_C(0x001637DD), UINT32_C(0x0032460F), UINT32_C(0x001DCD38), UINT32_C(0x0024F529)}, {UINT32_C(0x0033F90C), UINT32_C(0x000B2B06), UINT32_C(0x0010AC6C), UINT32_C(0x000D4C79), UINT32_C(0x0028ACCF), UINT32_C(0x003882B8), UINT32_C(0x003627FD), UINT32_C(0x0077768C), UINT32_C(0x00060B8A), UINT32_C(0x00175AB9), UINT32_C(0x0020A7D7), UINT32_C(0x0036E54C), UINT32_C(0x0026B20A), UINT32_C(0x000E710C), UINT32_C(0x0024597D), UINT32_C(0x0019E845), UINT32_C(0x0028672C), UINT32_C(0x0021B0CC), UINT32_C(0x0023D9E3), UINT32_C(0x001692C6), UINT32_C(0x0001D045), UINT32_C(0x00097657), UINT32_C(0x000370F6)}}, {{UINT32_C(0x007B9005), UINT32_C(0x0027B1D5), UINT32_C(0x0030BCA5), UINT32_C(0x0033E7A3), UINT32_C(0x00260D50), UINT32_C(0x000425F4), UINT32_C(0x002BF81B), UINT32_C(0x0056DC12), UINT32_C(0x001C3248), UINT32_C(0x0023BE6A), UINT32_C(0x0031838D), UINT32_C(0x006C6DD9), UINT32_C(0x002FD065), UINT32_C(0x003EC34D), UINT32_C(0x001B79C8), UINT32_C(0x0061CFCC), UINT32_C(0x002C377E), UINT32_C(0x0005C2A1), UINT32_C(0x00142560), UINT32_C(0x0007DCCB), UINT32_C(0x00238949), UINT32_C(0x0011710D), UINT32_C(0x0036AE4C)}, {UINT32_C(0x002C3F57), UINT32_C(0x0007550E), UINT32_C(0x00145D0D), UINT32_C(0x00172C44), UINT32_C(0x00166B15), UINT32_C(0x003F673A), UINT32_C(0x001F41B9), UINT32_C(0x0038E3E7), UINT32_C(0x000ED8FE), UINT32_C(0x0026F447), UINT32_C(0x00141659), UINT32_C(0x004024EA), UINT32_C(0x0014C9B2), UINT32_C(0x0021B32A), UINT32_C(0x00362710), UINT32_C(0x00791C00), UINT32_C(0x0012A6F2), UINT32_C(0x003E23AE), UINT32_C(0x00359C46), UINT32_C(0x0056019B), UINT32_C(0x0024CD68), UINT32_C(0x0018639D), UINT32_C(0x000AA1E5)}, {UINT32_C(0x003EB03A), UINT32_C(0x0005BD4E), UINT32_C(0x0026A08D), UINT32_C(0x00767FC9), UINT32_C(0x000AE7A8), UINT32_C(0x00302EFF), UINT32_C(0x000E751E), UINT32_C(0x000221EB), UINT32_C(0x0013D036), UINT32_C(0x000B5F88), UINT32_C(0x00195DE4), UINT32_C(0x007C1167), UINT32_C(0x000F8BFB), UINT32_C(0x002A2BF5), UINT32_C(0x001374E2), UINT32_C(0x005BAA0D), UINT32_C(0x0034A333), UINT32_C(0x002DB57E), UINT32_C(0x002A02CC), UINT32_C(0x00497D58), UINT32_C(0x000647E9), UINT32_C(0x00212584), UINT32_C(0x0028AE2E)}}, }, { {{UINT32_C(0x0056CAA9), UINT32_C(0x002ED942), UINT32_C(0x00066832), UINT32_C(0x000E005C), UINT32_C(0x000212C9), UINT32_C(0x000A5796), UINT32_C(0x0039920F), UINT32_C(0x00085F1D), UINT32_C(0x00361285), UINT32_C(0x00307080), UINT32_C(0x00062627), UINT32_C(0x007D6AAA), UINT32_C(0x002FAD3A), UINT32_C(0x001F916B), UINT32_C(0x0019CDED), UINT32_C(0x0060F8EF), UINT32_C(0x00006CD6), UINT32_C(0x0009A576), UINT32_C(0x0004244C), UINT32_C(0x0056B6F1), UINT32_C(0x0027D5EC), UINT32_C(0x001C22FE), UINT32_C(0x0020CA2B)}, {UINT32_C(0x00638473), UINT32_C(0x0028A459), UINT32_C(0x0008F882), UINT32_C(0x00300359), UINT32_C(0x001A0569), UINT32_C(0x000733C8), UINT32_C(0x000AA690), UINT32_C(0x002854FD), UINT32_C(0x003A42AB), UINT32_C(0x00005D85), UINT32_C(0x003EC955), UINT32_C(0x00276DAB), UINT32_C(0x002C69D6), UINT32_C(0x0028E861), UINT32_C(0x003C6252), UINT32_C(0x001693C6), UINT32_C(0x00067C90), UINT32_C(0x00135D5A), UINT32_C(0x0019BAA5), UINT32_C(0x00638A4D), UINT32_C(0x001C54F3), UINT32_C(0x0036958E), UINT32_C(0x00229409)}, {UINT32_C(0x003694AD), UINT32_C(0x003CDD1D), UINT32_C(0x002BB2CB), UINT32_C(0x000F907F), UINT32_C(0x00217793), UINT32_C(0x001C10F3), UINT32_C(0x0007C509), UINT32_C(0x0055ED5B), UINT32_C(0x003FC009), UINT32_C(0x0013833E), UINT32_C(0x000AFDAF), UINT32_C(0x0003DFB2), UINT32_C(0x002EBC1F), UINT32_C(0x00268005), UINT32_C(0x0028835F), UINT32_C(0x002FE0AF), UINT32_C(0x002E65E7), UINT32_C(0x002D7AC4), UINT32_C(0x0016B704), UINT32_C(0x0034371A), UINT32_C(0x00333D73), UINT32_C(0x00117F49), UINT32_C(0x003508FB)}}, {{UINT32_C(0x0024288F), UINT32_C(0x00003DD4), UINT32_C(0x00121C5C), UINT32_C(0x00771CBC), UINT32_C(0x003BF063), UINT32_C(0x0002294B), UINT32_C(0x0031319F), UINT32_C(0x00643727), UINT32_C(0x00319F6F), UINT32_C(0x0008B82B), UINT32_C(0x00101D49), UINT32_C(0x00546EE5), UINT32_C(0x00238C40), UINT32_C(0x00030CAC), UINT32_C(0x00190408), UINT32_C(0x007C0F5A), UINT32_C(0x0015EAFD), UINT32_C(0x00024A8F), UINT32_C(0x00365016), UINT32_C(0x002D2DBA), UINT32_C(0x001F751C), UINT32_C(0x0003964A), UINT32_C(0x002F92CB)}, {UINT32_C(0x00561A15), UINT32_C(0x003B4C37), UINT32_C(0x001C36B5), UINT32_C(0x002ED2E4), UINT32_C(0x0002231B), UINT32_C(0x001ADAF5), UINT32_C(0x00270194), UINT32_C(0x0009DBF0), UINT32_C(0x00287239), UINT32_C(0x00080B2D), UINT32_C(0x002EB25E), UINT32_C(0x0032ED93), UINT32_C(0x00164DC0), UINT32_C(0x002F327A), UINT32_C(0x00130078), UINT32_C(0x001841D3), UINT32_C(0x00049BC2), UINT32_C(0x00048E93), UINT32_C(0x001B59E7), UINT32_C(0x006243C6), UINT32_C(0x00394260), UINT32_C(0x0017BC8D), UINT32_C(0x00176B2A)}, {UINT32_C(0x00041022), UINT32_C(0x0006B154), UINT32_C(0x0027CADC), UINT32_C(0x00627B5A), UINT32_C(0x001965DA), UINT32_C(0x002D1BDB), UINT32_C(0x001B16FE), UINT32_C(0x0016A869), UINT32_C(0x002540EA), UINT32_C(0x003B4B72), UINT32_C(0x0013ECCC), UINT32_C(0x00581A5A), UINT32_C(0x002C2192), UINT32_C(0x002588BF), UINT32_C(0x001CC31E), UINT32_C(0x0053D1B3), UINT32_C(0x003845C2), UINT32_C(0x00234BBE), UINT32_C(0x0007ABDF), UINT32_C(0x00567DC1), UINT32_C(0x00204D8E), UINT32_C(0x00161734), UINT32_C(0x00062C35)}}, {{UINT32_C(0x000DD434), UINT32_C(0x0027577F), UINT32_C(0x00224BAB), UINT32_C(0x001F24C1), UINT32_C(0x00225696), UINT32_C(0x00241E15), UINT32_C(0x001CEBF5), UINT32_C(0x005549C7), UINT32_C(0x003C9373), UINT32_C(0x002DCBA3), UINT32_C(0x002A3CBA), UINT32_C(0x001EE227), UINT32_C(0x0020FD58), UINT32_C(0x0007BFF7), UINT32_C(0x00341B3D), UINT32_C(0x0047E8D4), UINT32_C(0x0011C543), UINT32_C(0x00386E9E), UINT32_C(0x00232B8F), UINT32_C(0x0043836A), UINT32_C(0x0001E14C), UINT32_C(0x00136E35), UINT32_C(0x002D423A)}, {UINT32_C(0x005DA3DC), UINT32_C(0x003E4B5E), UINT32_C(0x00182E1B), UINT32_C(0x004D3F17), UINT32_C(0x00358964), UINT32_C(0x002F6CDB), UINT32_C(0x000FA963), UINT32_C(0x00530F85), UINT32_C(0x003FCE01), UINT32_C(0x0027B181), UINT32_C(0x0016C4E2), UINT32_C(0x001A24B7), UINT32_C(0x003A2690), UINT32_C(0x002BAD95), UINT32_C(0x000A878E), UINT32_C(0x0049FA0F), UINT32_C(0x00200790), UINT32_C(0x0007745A), UINT32_C(0x001A19FB), UINT32_C(0x00524E6F), UINT32_C(0x00167AEF), UINT32_C(0x00318813), UINT32_C(0x000BF477)}, {UINT32_C(0x00446FFB), UINT32_C(0x000E720D), UINT32_C(0x0013A7AD), UINT32_C(0x002F3160), UINT32_C(0x0020ACA2), UINT32_C(0x0031E19F), UINT32_C(0x002C99C7), UINT32_C(0x0053FC61), UINT32_C(0x000B444B), UINT32_C(0x000432E3), UINT32_C(0x0020DFE5), UINT32_C(0x0000DCBD), UINT32_C(0x002A6660), UINT32_C(0x0035A737), UINT32_C(0x0016191B), UINT32_C(0x006DFEF3), UINT32_C(0x0007D074), UINT32_C(0x0015B6DA), UINT32_C(0x000E1D85), UINT32_C(0x0040898C), UINT32_C(0x000F18DD), UINT32_C(0x0016A189), UINT32_C(0x00259E34)}}, {{UINT32_C(0x004D2036), UINT32_C(0x00198B36), UINT32_C(0x0006CEDC), UINT32_C(0x0028C725), UINT32_C(0x003381EA), UINT32_C(0x0037C857), UINT32_C(0x00239AE3), UINT32_C(0x000B8343), UINT32_C(0x0013B8A1), UINT32_C(0x0004CA9C), UINT32_C(0x00341F6F), UINT32_C(0x002C9D36), UINT32_C(0x0002B4CE), UINT32_C(0x000F979A), UINT32_C(0x00005E1A), UINT32_C(0x0003C162), UINT32_C(0x000C805D), UINT32_C(0x00171240), UINT32_C(0x00200E07), UINT32_C(0x005B5010), UINT32_C(0x0019D606), UINT32_C(0x00226023), UINT32_C(0x0023D266)}, {UINT32_C(0x00240CF2), UINT32_C(0x002268F3), UINT32_C(0x0025D159), UINT32_C(0x003C1B6F), UINT32_C(0x00214C16), UINT32_C(0x0022D5EA), UINT32_C(0x001D06D1), UINT32_C(0x007104A8), UINT32_C(0x002198F4), UINT32_C(0x002EAE4A), UINT32_C(0x001A0374), UINT32_C(0x00128B26), UINT32_C(0x00156B81), UINT32_C(0x00380AB8), UINT32_C(0x00000B34), UINT32_C(0x0032FD36), UINT32_C(0x0035997F), UINT32_C(0x001DDD23), UINT32_C(0x000F9701), UINT32_C(0x003D11DD), UINT32_C(0x00219A73), UINT32_C(0x0009572E), UINT32_C(0x0007E79A)}, {UINT32_C(0x004E4AD4), UINT32_C(0x0038839D), UINT32_C(0x0031F346), UINT32_C(0x00188C54), UINT32_C(0x000CE5E2), UINT32_C(0x000BCB59), UINT32_C(0x0036662E), UINT32_C(0x007DF8FB), UINT32_C(0x000E4805), UINT32_C(0x0038EDC7), UINT32_C(0x00209BB0), UINT32_C(0x006A5B00), UINT32_C(0x0005DC69), UINT32_C(0x001AE66C), UINT32_C(0x00175257), UINT32_C(0x006D0BBF), UINT32_C(0x00158611), UINT32_C(0x003EFEA8), UINT32_C(0x000E0C1D), UINT32_C(0x0050DC3B), UINT32_C(0x00008337), UINT32_C(0x001869C2), UINT32_C(0x003FD81D)}}, {{UINT32_C(0x0050CB64), UINT32_C(0x002429A6), UINT32_C(0x00382136), UINT32_C(0x0054F357), UINT32_C(0x003794A8), UINT32_C(0x001F187A), UINT32_C(0x000F2E75), UINT32_C(0x001AC75C), UINT32_C(0x002C3E90), UINT32_C(0x002E6B5E), UINT32_C(0x0039AC0E), UINT32_C(0x004F180B), UINT32_C(0x0020C545), UINT32_C(0x003FD3EB), UINT32_C(0x000C1453), UINT32_C(0x0017FAB0), UINT32_C(0x002E55DE), UINT32_C(0x0031C1C1), UINT32_C(0x002659CA), UINT32_C(0x0053E22F), UINT32_C(0x00377EA4), UINT32_C(0x0011C7AF), UINT32_C(0x0005E66B)}, {UINT32_C(0x005F2793), UINT32_C(0x000FABF6), UINT32_C(0x00138DB2), UINT32_C(0x0003EF56), UINT32_C(0x003C44CD), UINT32_C(0x002D1772), UINT32_C(0x00296103), UINT32_C(0x0010A045), UINT32_C(0x003F081B), UINT32_C(0x0003CA53), UINT32_C(0x00319331), UINT32_C(0x001F65B4), UINT32_C(0x002E09B1), UINT32_C(0x003544F7), UINT32_C(0x002E0977), UINT32_C(0x007A91C1), UINT32_C(0x000E98E1), UINT32_C(0x003C2830), UINT32_C(0x001F751E), UINT32_C(0x000FE9DE), UINT32_C(0x00104CA6), UINT32_C(0x00084E9F), UINT32_C(0x002EDF68)}, {UINT32_C(0x001753AE), UINT32_C(0x0015176B), UINT32_C(0x001D49C2), UINT32_C(0x005271F0), UINT32_C(0x000E3B9D), UINT32_C(0x002A9E63), UINT32_C(0x00147498), UINT32_C(0x0028C096), UINT32_C(0x0038F62A), UINT32_C(0x001E8789), UINT32_C(0x001E1D5C), UINT32_C(0x003504A2), UINT32_C(0x0026FE76), UINT32_C(0x001C16A5), UINT32_C(0x001B3F89), UINT32_C(0x0043DB5A), UINT32_C(0x00106CD7), UINT32_C(0x00317E3F), UINT32_C(0x00332597), UINT32_C(0x003737FB), UINT32_C(0x003F7130), UINT32_C(0x002A1EA9), UINT32_C(0x003BE9DE)}}, {{UINT32_C(0x003FC808), UINT32_C(0x002F762E), UINT32_C(0x003004D3), UINT32_C(0x00384DB9), UINT32_C(0x002349A4), UINT32_C(0x0032B0E8), UINT32_C(0x00152A07), UINT32_C(0x00361460), UINT32_C(0x0039BDD3), UINT32_C(0x0017D898), UINT32_C(0x00228C11), UINT32_C(0x0061443C), UINT32_C(0x0033C414), UINT32_C(0x001922E8), UINT32_C(0x0033EB75), UINT32_C(0x006856CB), UINT32_C(0x000D4491), UINT32_C(0x00089ED9), UINT32_C(0x001713B8), UINT32_C(0x000737CA), UINT32_C(0x0037B4BB), UINT32_C(0x00137C25), UINT32_C(0x00157928)}, {UINT32_C(0x005C5870), UINT32_C(0x0013A25A), UINT32_C(0x001376B2), UINT32_C(0x007F3687), UINT32_C(0x000DD1CA), UINT32_C(0x00144BD1), UINT32_C(0x00205B88), UINT32_C(0x0030B67A), UINT32_C(0x002F2ED7), UINT32_C(0x002BBB97), UINT32_C(0x0006DE0E), UINT32_C(0x0042D5EF), UINT32_C(0x0020BC9E), UINT32_C(0x001DFACA), UINT32_C(0x00176018), UINT32_C(0x00557358), UINT32_C(0x000A2A03), UINT32_C(0x0017F6AA), UINT32_C(0x001A348A), UINT32_C(0x0063CCCE), UINT32_C(0x0019E3CD), UINT32_C(0x001CAF72), UINT32_C(0x0008A7AC)}, {UINT32_C(0x00073284), UINT32_C(0x0016A772), UINT32_C(0x001B02B4), UINT32_C(0x003DCC2C), UINT32_C(0x001275AC), UINT32_C(0x0013EC26), UINT32_C(0x0039548F), UINT32_C(0x0032AC62), UINT32_C(0x002E6D0F), UINT32_C(0x0020A687), UINT32_C(0x0034013D), UINT32_C(0x002FBD07), UINT32_C(0x0027B2FE), UINT32_C(0x000AB0F8), UINT32_C(0x000DFCFE), UINT32_C(0x004B5DB3), UINT32_C(0x0031570E), UINT32_C(0x002A4886), UINT32_C(0x000AA957), UINT32_C(0x005D7580), UINT32_C(0x001EBED6), UINT32_C(0x00253717), UINT32_C(0x001A649B)}}, {{UINT32_C(0x006C4CB2), UINT32_C(0x001FB3E4), UINT32_C(0x0015B9F8), UINT32_C(0x00361781), UINT32_C(0x002C10D3), UINT32_C(0x001D9D87), UINT32_C(0x0034274C), UINT32_C(0x0021EBF4), UINT32_C(0x0033DC87), UINT32_C(0x000ADD4D), UINT32_C(0x003051CC), UINT32_C(0x0069D7F2), UINT32_C(0x002CFFFE), UINT32_C(0x0014E44A), UINT32_C(0x00049CA0), UINT32_C(0x003CBED6), UINT32_C(0x001BF1E2), UINT32_C(0x0014C23E), UINT32_C(0x000B6EB5), UINT32_C(0x002DB65D), UINT32_C(0x0005CB32), UINT32_C(0x00038B9C), UINT32_C(0x0007883B)}, {UINT32_C(0x003EF9A6), UINT32_C(0x001E1E72), UINT32_C(0x00118E1F), UINT32_C(0x000DD4EE), UINT32_C(0x001621A6), UINT32_C(0x003726A5), UINT32_C(0x0005CB81), UINT32_C(0x0066CE7A), UINT32_C(0x000248A4), UINT32_C(0x002D7AFD), UINT32_C(0x0014ACD8), UINT32_C(0x0025639C), UINT32_C(0x0009A8A5), UINT32_C(0x003318F4), UINT32_C(0x000F0BF7), UINT32_C(0x005062DE), UINT32_C(0x000024A9), UINT32_C(0x000E22D2), UINT32_C(0x001E48E9), UINT32_C(0x0021E288), UINT32_C(0x0036DB79), UINT32_C(0x002F277C), UINT32_C(0x002B4193)}, {UINT32_C(0x001EA6FE), UINT32_C(0x0031EE3B), UINT32_C(0x00045D18), UINT32_C(0x007B886D), UINT32_C(0x003AB025), UINT32_C(0x003CB9DC), UINT32_C(0x001E395D), UINT32_C(0x003B02BB), UINT32_C(0x00117981), UINT32_C(0x0019571F), UINT32_C(0x0012104C), UINT32_C(0x0015B662), UINT32_C(0x002C613A), UINT32_C(0x00070FFA), UINT32_C(0x000F20BB), UINT32_C(0x0070246F), UINT32_C(0x003AE4D8), UINT32_C(0x002C3692), UINT32_C(0x002BA766), UINT32_C(0x006979EC), UINT32_C(0x001EE4FA), UINT32_C(0x003FC3AE), UINT32_C(0x00097753)}}, {{UINT32_C(0x004F1DE3), UINT32_C(0x000C6911), UINT32_C(0x000A47C8), UINT32_C(0x001D1BD1), UINT32_C(0x002F9D0E), UINT32_C(0x00028B6C), UINT32_C(0x0030B56D), UINT32_C(0x007338C9), UINT32_C(0x000444B1), UINT32_C(0x0039A863), UINT32_C(0x0014FD9B), UINT32_C(0x0029BA71), UINT32_C(0x002F8E1D), UINT32_C(0x0012C499), UINT32_C(0x00073FFA), UINT32_C(0x000C56D4), UINT32_C(0x0014A736), UINT32_C(0x003A7177), UINT32_C(0x001CE30C), UINT32_C(0x003AAF39), UINT32_C(0x0022B563), UINT32_C(0x0036E7CC), UINT32_C(0x0037AFCD)}, {UINT32_C(0x0058F41D), UINT32_C(0x00140257), UINT32_C(0x00211567), UINT32_C(0x007DDA65), UINT32_C(0x0022C062), UINT32_C(0x001ED494), UINT32_C(0x0018952B), UINT32_C(0x00649D74), UINT32_C(0x0029BEC2), UINT32_C(0x0020C9DA), UINT32_C(0x0017B4BC), UINT32_C(0x0068E1EE), UINT32_C(0x0008D396), UINT32_C(0x00101E55), UINT32_C(0x00179EF9), UINT32_C(0x00704D7B), UINT32_C(0x00225FE0), UINT32_C(0x0033AD09), UINT32_C(0x000D6F51), UINT32_C(0x00617587), UINT32_C(0x00014347), UINT32_C(0x0006D488), UINT32_C(0x000A58EA)}, {UINT32_C(0x0062169E), UINT32_C(0x003EC8CD), UINT32_C(0x00241534), UINT32_C(0x006F5F65), UINT32_C(0x002B9962), UINT32_C(0x00142663), UINT32_C(0x00088E95), UINT32_C(0x00730FE3), UINT32_C(0x00331A06), UINT32_C(0x0027E7BD), UINT32_C(0x00364306), UINT32_C(0x003E391E), UINT32_C(0x00313667), UINT32_C(0x00198427), UINT32_C(0x00226ADA), UINT32_C(0x00566F4B), UINT32_C(0x0021A27C), UINT32_C(0x0017BBD7), UINT32_C(0x003D41DB), UINT32_C(0x0028BB58), UINT32_C(0x003278B2), UINT32_C(0x0006E057), UINT32_C(0x0003C841)}}, {{UINT32_C(0x00687D5D), UINT32_C(0x003309EF), UINT32_C(0x00346CE5), UINT32_C(0x001FF1AB), UINT32_C(0x003D2116), UINT32_C(0x0018305D), UINT32_C(0x00049468), UINT32_C(0x0061BCEB), UINT32_C(0x00157FA5), UINT32_C(0x00036CFD), UINT32_C(0x0017B473), UINT32_C(0x00536514), UINT32_C(0x0035BE53), UINT32_C(0x0031FBF4), UINT32_C(0x00138689), UINT32_C(0x00459FC3), UINT32_C(0x00382E53), UINT32_C(0x0009DCE1), UINT32_C(0x001E636A), UINT32_C(0x002622FE), UINT32_C(0x0014A044), UINT32_C(0x00145177), UINT32_C(0x002C68B2)}, {UINT32_C(0x0007CDE9), UINT32_C(0x0005E108), UINT32_C(0x000D8163), UINT32_C(0x003F9A62), UINT32_C(0x001C6BBE), UINT32_C(0x00202790), UINT32_C(0x000B515C), UINT32_C(0x0006A300), UINT32_C(0x0015F9A6), UINT32_C(0x002A1527), UINT32_C(0x003A73EB), UINT32_C(0x006F181C), UINT32_C(0x00175B8C), UINT32_C(0x002A4DA4), UINT32_C(0x000768F8), UINT32_C(0x000E56E3), UINT32_C(0x0029B426), UINT32_C(0x0011186F), UINT32_C(0x003175D0), UINT32_C(0x0029B106), UINT32_C(0x001EF0B9), UINT32_C(0x001139E2), UINT32_C(0x0035ACA5)}, {UINT32_C(0x004B2AE1), UINT32_C(0x001424F0), UINT32_C(0x00110341), UINT32_C(0x000C7518), UINT32_C(0x001685E7), UINT32_C(0x0016192F), UINT32_C(0x0028CF4C), UINT32_C(0x00637208), UINT32_C(0x003FCBD2), UINT32_C(0x00348A0E), UINT32_C(0x0034BDB7), UINT32_C(0x000E99F6), UINT32_C(0x001472CD), UINT32_C(0x000F1FAA), UINT32_C(0x00102EA2), UINT32_C(0x00579D10), UINT32_C(0x00229C04), UINT32_C(0x000DA721), UINT32_C(0x000C0D5E), UINT32_C(0x004201F5), UINT32_C(0x00013FC8), UINT32_C(0x000DFA6E), UINT32_C(0x00260016)}}, {{UINT32_C(0x0071785F), UINT32_C(0x002A6790), UINT32_C(0x00374B9A), UINT32_C(0x005C47E4), UINT32_C(0x00295CBC), UINT32_C(0x0017C2F6), UINT32_C(0x002DD473), UINT32_C(0x0003079A), UINT32_C(0x001B4CD6), UINT32_C(0x0024C5E5), UINT32_C(0x00319F1C), UINT32_C(0x00436F1D), UINT32_C(0x001A1EF6), UINT32_C(0x0003D299), UINT32_C(0x00382BA2), UINT32_C(0x0060E409), UINT32_C(0x00023098), UINT32_C(0x00171EBD), UINT32_C(0x0020240F), UINT32_C(0x00330D1E), UINT32_C(0x0017E024), UINT32_C(0x0009AC85), UINT32_C(0x001B14B7)}, {UINT32_C(0x003C69F8), UINT32_C(0x00119EF1), UINT32_C(0x002E2839), UINT32_C(0x00778F4B), UINT32_C(0x00039F0C), UINT32_C(0x0023A6C4), UINT32_C(0x003F874D), UINT32_C(0x005E260A), UINT32_C(0x003D33F7), UINT32_C(0x002C9846), UINT32_C(0x00187047), UINT32_C(0x007B8C63), UINT32_C(0x00273788), UINT32_C(0x000A168B), UINT32_C(0x003C94CF), UINT32_C(0x0058BB90), UINT32_C(0x000B16B8), UINT32_C(0x003E3A1E), UINT32_C(0x0018E21B), UINT32_C(0x007A9202), UINT32_C(0x00302517), UINT32_C(0x00154F91), UINT32_C(0x000846A0)}, {UINT32_C(0x001A0FDE), UINT32_C(0x00153D67), UINT32_C(0x00336333), UINT32_C(0x003C90A4), UINT32_C(0x00094797), UINT32_C(0x00312D2A), UINT32_C(0x001003F0), UINT32_C(0x007FBC25), UINT32_C(0x0003DF24), UINT32_C(0x00237AC4), UINT32_C(0x00194267), UINT32_C(0x002396ED), UINT32_C(0x00024617), UINT32_C(0x0016C8CB), UINT32_C(0x00152D85), UINT32_C(0x0016D3DE), UINT32_C(0x00262957), UINT32_C(0x00311596), UINT32_C(0x003EC838), UINT32_C(0x001975C2), UINT32_C(0x0034FE59), UINT32_C(0x00113D00), UINT32_C(0x002243AC)}}, {{UINT32_C(0x0068A405), UINT32_C(0x0034C98B), UINT32_C(0x0007E397), UINT32_C(0x00558483), UINT32_C(0x000956CE), UINT32_C(0x002E1CCA), UINT32_C(0x0005043D), UINT32_C(0x00476A5E), UINT32_C(0x0028457F), UINT32_C(0x003988DF), UINT32_C(0x0037A1BC), UINT32_C(0x0047942D), UINT32_C(0x00124D2E), UINT32_C(0x003AE5E0), UINT32_C(0x000B4291), UINT32_C(0x004D22EB), UINT32_C(0x0014B7CF), UINT32_C(0x0028B3D4), UINT32_C(0x003CCB59), UINT32_C(0x00190521), UINT32_C(0x000A108D), UINT32_C(0x003A6057), UINT32_C(0x00172D60)}, {UINT32_C(0x002B251D), UINT32_C(0x0013D428), UINT32_C(0x000AE878), UINT32_C(0x005FA00D), UINT32_C(0x00260531), UINT32_C(0x00329563), UINT32_C(0x000216C5), UINT32_C(0x000D16BE), UINT32_C(0x0009E37E), UINT32_C(0x003F37E0), UINT32_C(0x001AEF12), UINT32_C(0x0064E859), UINT32_C(0x0019915B), UINT32_C(0x0005BFF9), UINT32_C(0x003958ED), UINT32_C(0x000C4E03), UINT32_C(0x0008B99A), UINT32_C(0x001C38F2), UINT32_C(0x003D7DC0), UINT32_C(0x002F8014), UINT32_C(0x001CEC59), UINT32_C(0x0034AB43), UINT32_C(0x0013D729)}, {UINT32_C(0x006F3BD9), UINT32_C(0x00150F71), UINT32_C(0x002A3F95), UINT32_C(0x0068E792), UINT32_C(0x0016CF11), UINT32_C(0x001B8A33), UINT32_C(0x002E5920), UINT32_C(0x0038F685), UINT32_C(0x002CDF4A), UINT32_C(0x0027CB65), UINT32_C(0x002DF482), UINT32_C(0x000A0B78), UINT32_C(0x00309C5F), UINT32_C(0x003B06D3), UINT32_C(0x0013DAE0), UINT32_C(0x00554BDE), UINT32_C(0x0017EC53), UINT32_C(0x000F50F5), UINT32_C(0x00101EF0), UINT32_C(0x005F28DB), UINT32_C(0x0015CC1A), UINT32_C(0x001980C3), UINT32_C(0x00249DA3)}}, {{UINT32_C(0x004C93F1), UINT32_C(0x00388A39), UINT32_C(0x0030EEC8), UINT32_C(0x0052FC35), UINT32_C(0x000B0CAE), UINT32_C(0x002F3E40), UINT32_C(0x003A2ACD), UINT32_C(0x0028C4D5), UINT32_C(0x001DA5F9), UINT32_C(0x000586CA), UINT32_C(0x00119027), UINT32_C(0x0016CDC0), UINT32_C(0x0025236C), UINT32_C(0x0018A357), UINT32_C(0x0000B64B), UINT32_C(0x0076882B), UINT32_C(0x003182B1), UINT32_C(0x0037246C), UINT32_C(0x0003FB39), UINT32_C(0x002C988C), UINT32_C(0x00231B0B), UINT32_C(0x003E5BBF), UINT32_C(0x0000F374)}, {UINT32_C(0x00010D9D), UINT32_C(0x001FF389), UINT32_C(0x001538D1), UINT32_C(0x0041BD6C), UINT32_C(0x001301B2), UINT32_C(0x001DCB4A), UINT32_C(0x0008FABC), UINT32_C(0x00611765), UINT32_C(0x001A717F), UINT32_C(0x00182FF9), UINT32_C(0x0029A9C1), UINT32_C(0x002B99C3), UINT32_C(0x00017CA7), UINT32_C(0x00032AA1), UINT32_C(0x002EA89D), UINT32_C(0x00088D80), UINT32_C(0x0011EC29), UINT32_C(0x003A56BE), UINT32_C(0x000032B8), UINT32_C(0x001406E5), UINT32_C(0x0038401C), UINT32_C(0x001ACB38), UINT32_C(0x000CB5E9)}, {UINT32_C(0x0066E5AB), UINT32_C(0x00161A19), UINT32_C(0x00057829), UINT32_C(0x005F11AE), UINT32_C(0x0022507E), UINT32_C(0x00113755), UINT32_C(0x00218956), UINT32_C(0x007E85BC), UINT32_C(0x003A29F5), UINT32_C(0x001A56EA), UINT32_C(0x002F8A9F), UINT32_C(0x0030B6F2), UINT32_C(0x001F6A48), UINT32_C(0x003C6B9C), UINT32_C(0x00331944), UINT32_C(0x0012724E), UINT32_C(0x000154FE), UINT32_C(0x001A08F6), UINT32_C(0x00053CE3), UINT32_C(0x000110DA), UINT32_C(0x00189838), UINT32_C(0x000C6556), UINT32_C(0x0026E926)}}, {{UINT32_C(0x0056B198), UINT32_C(0x002E9D6F), UINT32_C(0x00384104), UINT32_C(0x002CB192), UINT32_C(0x0011E1D2), UINT32_C(0x000C3007), UINT32_C(0x00331D92), UINT32_C(0x0072B899), UINT32_C(0x002DFE85), UINT32_C(0x0019F7AE), UINT32_C(0x00228032), UINT32_C(0x001A709B), UINT32_C(0x00394A71), UINT32_C(0x00011DCB), UINT32_C(0x0025119C), UINT32_C(0x00673C0F), UINT32_C(0x000703EE), UINT32_C(0x003905C2), UINT32_C(0x0004CBE0), UINT32_C(0x003038F7), UINT32_C(0x00218611), UINT32_C(0x00344F8B), UINT32_C(0x0006EF8F)}, {UINT32_C(0x0008B7AB), UINT32_C(0x001C7936), UINT32_C(0x000AF677), UINT32_C(0x0038D1C4), UINT32_C(0x000D1982), UINT32_C(0x00008DE6), UINT32_C(0x001D8CD8), UINT32_C(0x002DAF00), UINT32_C(0x002139DC), UINT32_C(0x000C0A4C), UINT32_C(0x00103BF4), UINT32_C(0x00132620), UINT32_C(0x001E360F), UINT32_C(0x0020BE7E), UINT32_C(0x002F6F7B), UINT32_C(0x00045610), UINT32_C(0x003B63BF), UINT32_C(0x00065305), UINT32_C(0x0030A74A), UINT32_C(0x0072846A), UINT32_C(0x0009D52F), UINT32_C(0x00360AFC), UINT32_C(0x0015C630)}, {UINT32_C(0x001BB7E7), UINT32_C(0x0038CFC8), UINT32_C(0x00105C2D), UINT32_C(0x004F800D), UINT32_C(0x002813AF), UINT32_C(0x003D95F7), UINT32_C(0x000B5E3E), UINT32_C(0x0065C148), UINT32_C(0x0017B5EB), UINT32_C(0x000B59AB), UINT32_C(0x000D6920), UINT32_C(0x001459AF), UINT32_C(0x002201A2), UINT32_C(0x00066541), UINT32_C(0x001D0BA3), UINT32_C(0x00337E0F), UINT32_C(0x003BE92F), UINT32_C(0x000375C3), UINT32_C(0x0035FBBD), UINT32_C(0x005F0B0F), UINT32_C(0x000E891B), UINT32_C(0x00131D3F), UINT32_C(0x0014ED75)}}, {{UINT32_C(0x0050D8D5), UINT32_C(0x002E5561), UINT32_C(0x0031562B), UINT32_C(0x00395B3A), UINT32_C(0x002D062A), UINT32_C(0x00329C94), UINT32_C(0x001BED6E), UINT32_C(0x0064208E), UINT32_C(0x00302BDB), UINT32_C(0x0038A686), UINT32_C(0x001E41F5), UINT32_C(0x001078F7), UINT32_C(0x003A3FCC), UINT32_C(0x00061B38), UINT32_C(0x003A908E), UINT32_C(0x005A12D7), UINT32_C(0x0002303D), UINT32_C(0x00141E31), UINT32_C(0x0009E463), UINT32_C(0x0073510F), UINT32_C(0x003C92B0), UINT32_C(0x00083485), UINT32_C(0x00037A81)}, {UINT32_C(0x0019B1B8), UINT32_C(0x0038CD53), UINT32_C(0x000E197C), UINT32_C(0x0009FF2F), UINT32_C(0x003BCD33), UINT32_C(0x00302C2A), UINT32_C(0x00054200), UINT32_C(0x0079B52B), UINT32_C(0x0039D05F), UINT32_C(0x001F9C10), UINT32_C(0x0029B440), UINT32_C(0x003D8482), UINT32_C(0x001C2BD2), UINT32_C(0x0019BD77), UINT32_C(0x0010755E), UINT32_C(0x006CAE47), UINT32_C(0x0001B82A), UINT32_C(0x003DF53B), UINT32_C(0x00018A7F), UINT32_C(0x005FC8AB), UINT32_C(0x000BFFCF), UINT32_C(0x00169679), UINT32_C(0x00067097)}, {UINT32_C(0x000935D3), UINT32_C(0x0010F268), UINT32_C(0x00288B71), UINT32_C(0x00303DEB), UINT32_C(0x002E4A85), UINT32_C(0x0001813E), UINT32_C(0x003CDD05), UINT32_C(0x0001AD0A), UINT32_C(0x0014AA02), UINT32_C(0x0019FD4A), UINT32_C(0x00200BBD), UINT32_C(0x00331B4F), UINT32_C(0x000FCCBE), UINT32_C(0x001F30DB), UINT32_C(0x000BDF6F), UINT32_C(0x007AB775), UINT32_C(0x0021BE2D), UINT32_C(0x000ED4B7), UINT32_C(0x00384794), UINT32_C(0x00784F1A), UINT32_C(0x003F3A79), UINT32_C(0x0003D50F), UINT32_C(0x00064F82)}}, {{UINT32_C(0x0055E16A), UINT32_C(0x0009CBF4), UINT32_C(0x0007F387), UINT32_C(0x0008D055), UINT32_C(0x001DE49D), UINT32_C(0x003DF914), UINT32_C(0x003ED04E), UINT32_C(0x006CA4BC), UINT32_C(0x0028FCE3), UINT32_C(0x003273A4), UINT32_C(0x002DF89A), UINT32_C(0x00230A46), UINT32_C(0x0018E30C), UINT32_C(0x002CE6F1), UINT32_C(0x0002DB57), UINT32_C(0x007890F7), UINT32_C(0x0022D4F9), UINT32_C(0x0038DC8F), UINT32_C(0x00376FF1), UINT32_C(0x0012231A), UINT32_C(0x00074880), UINT32_C(0x0012A080), UINT32_C(0x00056DC5)}, {UINT32_C(0x003DBBF8), UINT32_C(0x00196819), UINT32_C(0x0024DB6E), UINT32_C(0x007A739A), UINT32_C(0x002C4BD5), UINT32_C(0x00241E7E), UINT32_C(0x0038C332), UINT32_C(0x000E069B), UINT32_C(0x0011A877), UINT32_C(0x000BB5F3), UINT32_C(0x0000613F), UINT32_C(0x001D700E), UINT32_C(0x00154F4E), UINT32_C(0x00232AA4), UINT32_C(0x00159C2A), UINT32_C(0x00203C23), UINT32_C(0x002AC285), UINT32_C(0x002F4ED7), UINT32_C(0x003914CE), UINT32_C(0x001B8C64), UINT32_C(0x000C5894), UINT32_C(0x003A7D72), UINT32_C(0x0021EFB5)}, {UINT32_C(0x0034EA4D), UINT32_C(0x001BA7B1), UINT32_C(0x003C1624), UINT32_C(0x00332852), UINT32_C(0x003E94DA), UINT32_C(0x00000887), UINT32_C(0x000BFE68), UINT32_C(0x004AD4CA), UINT32_C(0x000B742B), UINT32_C(0x00158248), UINT32_C(0x00285B88), UINT32_C(0x006EDD6B), UINT32_C(0x00200BAB), UINT32_C(0x00248DD5), UINT32_C(0x001035A8), UINT32_C(0x001F2081), UINT32_C(0x0007B194), UINT32_C(0x0011B74D), UINT32_C(0x00152BCC), UINT32_C(0x005F5821), UINT32_C(0x001FE674), UINT32_C(0x000239A6), UINT32_C(0x0034BB24)}}, {{UINT32_C(0x0072B20F), UINT32_C(0x000BF7F4), UINT32_C(0x00178C52), UINT32_C(0x00776657), UINT32_C(0x0004BFE5), UINT32_C(0x000AA36B), UINT32_C(0x003719B7), UINT32_C(0x004C2095), UINT32_C(0x00355126), UINT32_C(0x001B6111), UINT32_C(0x00172806), UINT32_C(0x0052CE54), UINT32_C(0x0008F0A0), UINT32_C(0x002B3884), UINT32_C(0x002B7196), UINT32_C(0x003A0409), UINT32_C(0x00124BAA), UINT32_C(0x001E7741), UINT32_C(0x00128DC5), UINT32_C(0x00301368), UINT32_C(0x0002A859), UINT32_C(0x00145DD3), UINT32_C(0x001A5AE5)}, {UINT32_C(0x004943B1), UINT32_C(0x0036FA8C), UINT32_C(0x002BCCB8), UINT32_C(0x00702644), UINT32_C(0x00253FD2), UINT32_C(0x00185CBE), UINT32_C(0x00047A35), UINT32_C(0x002AF03C), UINT32_C(0x001AE6F9), UINT32_C(0x001FBB03), UINT32_C(0x0024ABE9), UINT32_C(0x0023A32D), UINT32_C(0x002165FE), UINT32_C(0x0025287B), UINT32_C(0x0013905E), UINT32_C(0x005CFE02), UINT32_C(0x0007F1F9), UINT32_C(0x003E1E1E), UINT32_C(0x0007A483), UINT32_C(0x001BF89E), UINT32_C(0x0010168F), UINT32_C(0x00062F67), UINT32_C(0x00133007)}, {UINT32_C(0x007D5697), UINT32_C(0x00312189), UINT32_C(0x0015FC12), UINT32_C(0x003C037B), UINT32_C(0x00175465), UINT32_C(0x000F4B83), UINT32_C(0x0021DF66), UINT32_C(0x002A624D), UINT32_C(0x0034D443), UINT32_C(0x001E79DD), UINT32_C(0x00321A3F), UINT32_C(0x0018DC79), UINT32_C(0x001A5D56), UINT32_C(0x003541AF), UINT32_C(0x00070013), UINT32_C(0x0024CB38), UINT32_C(0x00065D92), UINT32_C(0x0020B271), UINT32_C(0x001EC105), UINT32_C(0x001E7C11), UINT32_C(0x00122C84), UINT32_C(0x0007B7C1), UINT32_C(0x002FDB93)}}, }, { {{UINT32_C(0x0044839B), UINT32_C(0x003198F6), UINT32_C(0x003BD372), UINT32_C(0x007ED128), UINT32_C(0x00206115), UINT32_C(0x003FDD6A), UINT32_C(0x0022F00A), UINT32_C(0x00117144), UINT32_C(0x001588A8), UINT32_C(0x001FF57F), UINT32_C(0x00289324), UINT32_C(0x00690294), UINT32_C(0x002D2809), UINT32_C(0x001DC9A7), UINT32_C(0x000B6923), UINT32_C(0x004B99EF), UINT32_C(0x003488AB), UINT32_C(0x001F4972), UINT32_C(0x000FFB73), UINT32_C(0x0059A57D), UINT32_C(0x000F6194), UINT32_C(0x000B6F28), UINT32_C(0x0025388B)}, {UINT32_C(0x0064E5A1), UINT32_C(0x0013FE4F), UINT32_C(0x0008ECCD), UINT32_C(0x00005C77), UINT32_C(0x0001B9C8), UINT32_C(0x00162316), UINT32_C(0x0020528F), UINT32_C(0x002DEDD0), UINT32_C(0x00191713), UINT32_C(0x0030317D), UINT32_C(0x0039A24F), UINT32_C(0x002EB466), UINT32_C(0x000EA8D0), UINT32_C(0x000E5D27), UINT32_C(0x003FED4F), UINT32_C(0x0040531E), UINT32_C(0x000FBA2C), UINT32_C(0x00234E5D), UINT32_C(0x0003D16D), UINT32_C(0x007F1872), UINT32_C(0x00256C50), UINT32_C(0x00316CFD), UINT32_C(0x002401F9)}, {UINT32_C(0x000275D5), UINT32_C(0x001F7882), UINT32_C(0x0025E59C), UINT32_C(0x0001B773), UINT32_C(0x0024FF1D), UINT32_C(0x000D98CD), UINT32_C(0x000B7E40), UINT32_C(0x006E438E), UINT32_C(0x00355F20), UINT32_C(0x0019A7AE), UINT32_C(0x00290722), UINT32_C(0x00174B19), UINT32_C(0x00318264), UINT32_C(0x00049CAA), UINT32_C(0x003F743B), UINT32_C(0x004FA60E), UINT32_C(0x0021E560), UINT32_C(0x002DDBD1), UINT32_C(0x00279C3F), UINT32_C(0x002A0542), UINT32_C(0x001C4F6E), UINT32_C(0x003F3D08), UINT32_C(0x001A9CB4)}}, {{UINT32_C(0x0044D3B6), UINT32_C(0x0011A0B0), UINT32_C(0x00223464), UINT32_C(0x00616311), UINT32_C(0x00045B71), UINT32_C(0x00221B75), UINT32_C(0x000DDB07), UINT32_C(0x0036CCED), UINT32_C(0x00310543), UINT32_C(0x001C0449), UINT32_C(0x001A5298), UINT32_C(0x007F7212), UINT32_C(0x0027112E), UINT32_C(0x003341D5), UINT32_C(0x001BB277), UINT32_C(0x0047B3A6), UINT32_C(0x002631FE), UINT32_C(0x000EC73F), UINT32_C(0x003BEA8E), UINT32_C(0x0011ACAD), UINT32_C(0x00056AB4), UINT32_C(0x00332F4E), UINT32_C(0x0020F040)}, {UINT32_C(0x00729FF7), UINT32_C(0x00084FDB), UINT32_C(0x000AF943), UINT32_C(0x0069EFD1), UINT32_C(0x000F6B0C), UINT32_C(0x002C5DA9), UINT32_C(0x003FE069), UINT32_C(0x0072A537), UINT32_C(0x000A3F33), UINT32_C(0x001C0A53), UINT32_C(0x002F3282), UINT32_C(0x006C96EB), UINT32_C(0x0039033F), UINT32_C(0x0004147A), UINT32_C(0x002F27E0), UINT32_C(0x000752BF), UINT32_C(0x00061145), UINT32_C(0x002CD663), UINT32_C(0x0031DFD9), UINT32_C(0x007E357F), UINT32_C(0x001E8721), UINT32_C(0x00265FEF), UINT32_C(0x00077889)}, {UINT32_C(0x0033FAD5), UINT32_C(0x0016E6ED), UINT32_C(0x0016F2EF), UINT32_C(0x001B964B), UINT32_C(0x001A2ECA), UINT32_C(0x003E0C81), UINT32_C(0x003FE7D9), UINT32_C(0x0069AB34), UINT32_C(0x002B4E22), UINT32_C(0x003B9125), UINT32_C(0x003129C9), UINT32_C(0x006B5E95), UINT32_C(0x003E450D), UINT32_C(0x003C0221), UINT32_C(0x00246870), UINT32_C(0x0012331E), UINT32_C(0x00368335), UINT32_C(0x003842E7), UINT32_C(0x001CD463), UINT32_C(0x00375065), UINT32_C(0x001AFC4F), UINT32_C(0x0018C552), UINT32_C(0x003DF99D)}}, {{UINT32_C(0x0076C909), UINT32_C(0x002ECC28), UINT32_C(0x003E534C), UINT32_C(0x006E5B56), UINT32_C(0x003472BC), UINT32_C(0x002ED648), UINT32_C(0x001800E5), UINT32_C(0x0062EB01), UINT32_C(0x00388368), UINT32_C(0x0017E589), UINT32_C(0x000EE455), UINT32_C(0x00752271), UINT32_C(0x0007DB0E), UINT32_C(0x0004CE3B), UINT32_C(0x001BC93D), UINT32_C(0x00266E9B), UINT32_C(0x001A633F), UINT32_C(0x00080153), UINT32_C(0x00100613), UINT32_C(0x001B334A), UINT32_C(0x001081C5), UINT32_C(0x003CEACA), UINT32_C(0x0028BC5F)}, {UINT32_C(0x004FB1B3), UINT32_C(0x001F97A9), UINT32_C(0x00159D7E), UINT32_C(0x00459CF9), UINT32_C(0x000CBC43), UINT32_C(0x00132E42), UINT32_C(0x003F3662), UINT32_C(0x0032762F), UINT32_C(0x003F6792), UINT32_C(0x00147465), UINT32_C(0x00064E92), UINT32_C(0x007B5ED9), UINT32_C(0x002CDCB9), UINT32_C(0x003B3F08), UINT32_C(0x00307A15), UINT32_C(0x00760D9B), UINT32_C(0x00145A0B), UINT32_C(0x00101514), UINT32_C(0x0036AC7F), UINT32_C(0x0046C8CA), UINT32_C(0x0009D1F6), UINT32_C(0x00065054), UINT32_C(0x000DEBF1)}, {UINT32_C(0x004F598C), UINT32_C(0x002DEC24), UINT32_C(0x000EFF2A), UINT32_C(0x001F3645), UINT32_C(0x0027F317), UINT32_C(0x003DAF78), UINT32_C(0x002BC2DB), UINT32_C(0x0004EA69), UINT32_C(0x00279343), UINT32_C(0x00337BF6), UINT32_C(0x00117316), UINT32_C(0x00616D27), UINT32_C(0x00378EC8), UINT32_C(0x0025D729), UINT32_C(0x00265316), UINT32_C(0x003D0829), UINT32_C(0x00396E01), UINT32_C(0x002AE96D), UINT32_C(0x003445E4), UINT32_C(0x001E9F9A), UINT32_C(0x0030EDDC), UINT32_C(0x002E073A), UINT32_C(0x0021B311)}}, {{UINT32_C(0x002CC32D), UINT32_C(0x000D826A), UINT32_C(0x0026E228), UINT32_C(0x000D6206), UINT32_C(0x00227832), UINT32_C(0x002140D7), UINT32_C(0x002068C2), UINT32_C(0x005C5008), UINT32_C(0x0025521D), UINT32_C(0x00281FA5), UINT32_C(0x00051E83), UINT32_C(0x00105A03), UINT32_C(0x003232E0), UINT32_C(0x003D0E47), UINT32_C(0x003BD547), UINT32_C(0x0065100C), UINT32_C(0x00113B09), UINT32_C(0x0024F1FA), UINT32_C(0x0030CDA7), UINT32_C(0x0053D618), UINT32_C(0x000A2A17), UINT32_C(0x000BD8B1), UINT32_C(0x0020FB2C)}, {UINT32_C(0x005A2225), UINT32_C(0x00391B43), UINT32_C(0x000B1CFF), UINT32_C(0x007DCE4C), UINT32_C(0x00193C2C), UINT32_C(0x003BFBCF), UINT32_C(0x001040C3), UINT32_C(0x001E82A9), UINT32_C(0x003D9486), UINT32_C(0x003AF831), UINT32_C(0x00217A7A), UINT32_C(0x006F3F26), UINT32_C(0x002E52C2), UINT32_C(0x0038837E), UINT32_C(0x00256BB5), UINT32_C(0x001D310D), UINT32_C(0x000D911E), UINT32_C(0x0012DD9B), UINT32_C(0x001D3C60), UINT32_C(0x0042AE12), UINT32_C(0x001AA290), UINT32_C(0x0011D773), UINT32_C(0x0008A556)}, {UINT32_C(0x003DB239), UINT32_C(0x003C331E), UINT32_C(0x002C1ABE), UINT32_C(0x0054F6FD), UINT32_C(0x0029390C), UINT32_C(0x002F6790), UINT32_C(0x002CD02B), UINT32_C(0x007AFE3F), UINT32_C(0x0012B2C3), UINT32_C(0x002287BB), UINT32_C(0x00114FE8), UINT32_C(0x002CC8AC), UINT32_C(0x002CADBB), UINT32_C(0x001A33BE), UINT32_C(0x0037BE86), UINT32_C(0x000AA64F), UINT32_C(0x000CDB97), UINT32_C(0x003CF948), UINT32_C(0x001BB280), UINT32_C(0x000BD3AD), UINT32_C(0x001C0A26), UINT32_C(0x001857F5), UINT32_C(0x002270FB)}}, {{UINT32_C(0x00588772), UINT32_C(0x0034A3BF), UINT32_C(0x002B2057), UINT32_C(0x000D6822), UINT32_C(0x000ED9FF), UINT32_C(0x00385C48), UINT32_C(0x003A74B9), UINT32_C(0x005A12D2), UINT32_C(0x00079DD4), UINT32_C(0x002B2E76), UINT32_C(0x00000E28), UINT32_C(0x000E1C30), UINT32_C(0x003339AE), UINT32_C(0x00248CCE), UINT32_C(0x003445A9), UINT32_C(0x0028093C), UINT32_C(0x00256A7E), UINT32_C(0x0018F19E), UINT32_C(0x00385218), UINT32_C(0x0057D410), UINT32_C(0x002DBF86), UINT32_C(0x001F5ECA), UINT32_C(0x001CACDD)}, {UINT32_C(0x00265C7D), UINT32_C(0x0028705E), UINT32_C(0x00384F7D), UINT32_C(0x0018D471), UINT32_C(0x001527DF), UINT32_C(0x003DA983), UINT32_C(0x001DDE7F), UINT32_C(0x002A71F4), UINT32_C(0x001B4521), UINT32_C(0x0003DCB4), UINT32_C(0x00328F6D), UINT32_C(0x00195CDD), UINT32_C(0x0016F6B4), UINT32_C(0x0002550C), UINT32_C(0x00181F0F), UINT32_C(0x00279602), UINT32_C(0x0000592B), UINT32_C(0x000A8FC2), UINT32_C(0x00173822), UINT32_C(0x00528D2F), UINT32_C(0x003BB20B), UINT32_C(0x001CB21C), UINT32_C(0x002E0800)}, {UINT32_C(0x0067C867), UINT32_C(0x0024B417), UINT32_C(0x000D83F0), UINT32_C(0x00584B7B), UINT32_C(0x002C2DCD), UINT32_C(0x003925C8), UINT32_C(0x0035374E), UINT32_C(0x00273444), UINT32_C(0x001ED50E), UINT32_C(0x0019DC39), UINT32_C(0x00012047), UINT32_C(0x004B56F7), UINT32_C(0x001F477D), UINT32_C(0x000C0B39), UINT32_C(0x00103A52), UINT32_C(0x003B6571), UINT32_C(0x000F7CB4), UINT32_C(0x003F0E6A), UINT32_C(0x003100B6), UINT32_C(0x0077750C), UINT32_C(0x002A6650), UINT32_C(0x001B8E63), UINT32_C(0x00356E38)}}, {{UINT32_C(0x00294CC0), UINT32_C(0x001ABF5C), UINT32_C(0x0022AB9B), UINT32_C(0x00575222), UINT32_C(0x00251493), UINT32_C(0x002E554C), UINT32_C(0x0027F012), UINT32_C(0x0071924E), UINT32_C(0x0023D76D), UINT32_C(0x00230B9E), UINT32_C(0x00295210), UINT32_C(0x00783EB9), UINT32_C(0x003D2EB1), UINT32_C(0x0034E19B), UINT32_C(0x0021E2D1), UINT32_C(0x0050A8CA), UINT32_C(0x0018C513), UINT32_C(0x00167437), UINT32_C(0x002F383C), UINT32_C(0x0071AE6B), UINT32_C(0x0005632B), UINT32_C(0x00097273), UINT32_C(0x0039C267)}, {UINT32_C(0x0056E019), UINT32_C(0x00310B20), UINT32_C(0x00308BD2), UINT32_C(0x00786653), UINT32_C(0x00396A2E), UINT32_C(0x0007FF67), UINT32_C(0x003BFBA0), UINT32_C(0x00328BB8), UINT32_C(0x0024DDEC), UINT32_C(0x002F538D), UINT32_C(0x003BCCD8), UINT32_C(0x006635E3), UINT32_C(0x0023177E), UINT32_C(0x00045322), UINT32_C(0x002E32D2), UINT32_C(0x004EC3F8), UINT32_C(0x001E2DE3), UINT32_C(0x00245612), UINT32_C(0x003C6038), UINT32_C(0x004D683D), UINT32_C(0x0012B6CB), UINT32_C(0x00027583), UINT32_C(0x002B048C)}, {UINT32_C(0x0078D023), UINT32_C(0x002E23CC), UINT32_C(0x000772AC), UINT32_C(0x003B5B53), UINT32_C(0x0029ED11), UINT32_C(0x003ED08F), UINT32_C(0x00071E5C), UINT32_C(0x00428132), UINT32_C(0x00315335), UINT32_C(0x0000402B), UINT32_C(0x000822D3), UINT32_C(0x007B1B14), UINT32_C(0x0035A437), UINT32_C(0x00206234), UINT32_C(0x0032B6E0), UINT32_C(0x0055555C), UINT32_C(0x0027CFBE), UINT32_C(0x0004A5EA), UINT32_C(0x000556CE), UINT32_C(0x0031DFEB), UINT32_C(0x001DB053), UINT32_C(0x000E8BAC), UINT32_C(0x000C0D49)}}, {{UINT32_C(0x004AA9D1), UINT32_C(0x002779EA), UINT32_C(0x001B86F9), UINT32_C(0x0072282A), UINT32_C(0x001EBBE9), UINT32_C(0x0018B46D), UINT32_C(0x0026FF2C), UINT32_C(0x003F0CC7), UINT32_C(0x00212453), UINT32_C(0x0034244B), UINT32_C(0x0009799C), UINT32_C(0x004F49C4), UINT32_C(0x000C1DEA), UINT32_C(0x0035B3DF), UINT32_C(0x000BDBDF), UINT32_C(0x001F15A7), UINT32_C(0x0037371D), UINT32_C(0x0020EBE1), UINT32_C(0x0002EA33), UINT32_C(0x0009840B), UINT32_C(0x001DD721), UINT32_C(0x002EA8B9), UINT32_C(0x000B48AD)}, {UINT32_C(0x00234472), UINT32_C(0x0005EFDD), UINT32_C(0x0021B297), UINT32_C(0x002E57AF), UINT32_C(0x00131F56), UINT32_C(0x003DE1F4), UINT32_C(0x003D96B7), UINT32_C(0x003AA17F), UINT32_C(0x0017742D), UINT32_C(0x00026100), UINT32_C(0x00337A96), UINT32_C(0x004EA9E0), UINT32_C(0x0027EA1C), UINT32_C(0x001F7FA1), UINT32_C(0x0032FFCB), UINT32_C(0x007DD72A), UINT32_C(0x0035BB87), UINT32_C(0x00318CC2), UINT32_C(0x003F5009), UINT32_C(0x00766DE0), UINT32_C(0x00391596), UINT32_C(0x000DFBB0), UINT32_C(0x002A498F)}, {UINT32_C(0x0068F40A), UINT32_C(0x0034745D), UINT32_C(0x003B263F), UINT32_C(0x00370D88), UINT32_C(0x000B7E85), UINT32_C(0x00165B40), UINT32_C(0x000F819E), UINT32_C(0x005987AB), UINT32_C(0x00108717), UINT32_C(0x002A8421), UINT32_C(0x000B286F), UINT32_C(0x004B94FD), UINT32_C(0x001DCD66), UINT32_C(0x0004CFEC), UINT32_C(0x0021944B), UINT32_C(0x00187F0D), UINT32_C(0x000E4A62), UINT32_C(0x00307E74), UINT32_C(0x0006FCD6), UINT32_C(0x004495F4), UINT32_C(0x0031D0FE), UINT32_C(0x002D69FC), UINT32_C(0x000B5770)}}, {{UINT32_C(0x0042173B), UINT32_C(0x002F2767), UINT32_C(0x003D5FCF), UINT32_C(0x0049931C), UINT32_C(0x0009BCA8), UINT32_C(0x001886FD), UINT32_C(0x00110F6D), UINT32_C(0x003C1F29), UINT32_C(0x002C545A), UINT32_C(0x0033EF6F), UINT32_C(0x0018E372), UINT32_C(0x0075FA4C), UINT32_C(0x0018BB09), UINT32_C(0x0026F270), UINT32_C(0x00346DE4), UINT32_C(0x0028FAC0), UINT32_C(0x0023E410), UINT32_C(0x0027B61C), UINT32_C(0x0014EA05), UINT32_C(0x00438310), UINT32_C(0x002CAD7B), UINT32_C(0x001FD7F3), UINT32_C(0x000B3F41)}, {UINT32_C(0x0010995C), UINT32_C(0x00168EA0), UINT32_C(0x0013CA45), UINT32_C(0x002F2095), UINT32_C(0x0031AB84), UINT32_C(0x0032FB0A), UINT32_C(0x00042BB8), UINT32_C(0x0008933C), UINT32_C(0x00097983), UINT32_C(0x00065857), UINT32_C(0x00150488), UINT32_C(0x001F3B0B), UINT32_C(0x0029F9DE), UINT32_C(0x00298C42), UINT32_C(0x00291103), UINT32_C(0x007B8240), UINT32_C(0x00185C19), UINT32_C(0x000A0A6A), UINT32_C(0x000D566B), UINT32_C(0x000742CE), UINT32_C(0x001D215F), UINT32_C(0x003F50AC), UINT32_C(0x0022911C)}, {UINT32_C(0x0045E864), UINT32_C(0x00015742), UINT32_C(0x00161854), UINT32_C(0x007B3D4F), UINT32_C(0x0021EEAE), UINT32_C(0x00296CE2), UINT32_C(0x003346C6), UINT32_C(0x00734650), UINT32_C(0x001106CC), UINT32_C(0x001BF45E), UINT32_C(0x001F7D96), UINT32_C(0x0045F811), UINT32_C(0x003B405E), UINT32_C(0x000DE8B5), UINT32_C(0x00178A69), UINT32_C(0x006CFE39), UINT32_C(0x003F339A), UINT32_C(0x00262A13), UINT32_C(0x0002FB7C), UINT32_C(0x00669A06), UINT32_C(0x002CB49B), UINT32_C(0x000DD528), UINT32_C(0x0026C657)}}, {{UINT32_C(0x005A4314), UINT32_C(0x0033DCDD), UINT32_C(0x003024FC), UINT32_C(0x003FA63F), UINT32_C(0x00296FCE), UINT32_C(0x001613FF), UINT32_C(0x001601C8), UINT32_C(0x0018EC14), UINT32_C(0x00176101), UINT32_C(0x0016707A), UINT32_C(0x00323522), UINT32_C(0x006451EF), UINT32_C(0x0038E06E), UINT32_C(0x000BBED9), UINT32_C(0x00325EF6), UINT32_C(0x005506AE), UINT32_C(0x00173417), UINT32_C(0x0030CE7F), UINT32_C(0x000E2A20), UINT32_C(0x0065E329), UINT32_C(0x00052AB8), UINT32_C(0x001DC041), UINT32_C(0x000C6341)}, {UINT32_C(0x0044DD3D), UINT32_C(0x002AF1BC), UINT32_C(0x0009FA4B), UINT32_C(0x00334B00), UINT32_C(0x003F42E3), UINT32_C(0x0002593C), UINT32_C(0x00229E96), UINT32_C(0x006D61D4), UINT32_C(0x002B2FD7), UINT32_C(0x0022C1A9), UINT32_C(0x00290FC9), UINT32_C(0x00728BC5), UINT32_C(0x003CC825), UINT32_C(0x002F498D), UINT32_C(0x00343407), UINT32_C(0x00205470), UINT32_C(0x000675EC), UINT32_C(0x002ED6F5), UINT32_C(0x00063C9F), UINT32_C(0x005D0188), UINT32_C(0x0026F6B5), UINT32_C(0x00063702), UINT32_C(0x0003A29D)}, {UINT32_C(0x0035F788), UINT32_C(0x0024E672), UINT32_C(0x0028C708), UINT32_C(0x003BBCE6), UINT32_C(0x00138643), UINT32_C(0x000A192E), UINT32_C(0x000582FA), UINT32_C(0x00192093), UINT32_C(0x0029B4D3), UINT32_C(0x002443E6), UINT32_C(0x003FB121), UINT32_C(0x00581657), UINT32_C(0x002CD1A9), UINT32_C(0x00110FB0), UINT32_C(0x00299AA9), UINT32_C(0x001FD531), UINT32_C(0x0002E546), UINT32_C(0x001E08DB), UINT32_C(0x001D678E), UINT32_C(0x0043BD67), UINT32_C(0x001A8272), UINT32_C(0x0022C90A), UINT32_C(0x0007CC59)}}, {{UINT32_C(0x003C1C05), UINT32_C(0x00371D27), UINT32_C(0x001EE674), UINT32_C(0x006687DD), UINT32_C(0x001B5B64), UINT32_C(0x0037B7A6), UINT32_C(0x00110B63), UINT32_C(0x004D3034), UINT32_C(0x00034E37), UINT32_C(0x003361C7), UINT32_C(0x0029A6D0), UINT32_C(0x005A8F45), UINT32_C(0x0002097C), UINT32_C(0x000EA46A), UINT32_C(0x001C9C63), UINT32_C(0x00510D99), UINT32_C(0x000FB932), UINT32_C(0x000D6720), UINT32_C(0x000487B1), UINT32_C(0x003D00ED), UINT32_C(0x000851E4), UINT32_C(0x000997F2), UINT32_C(0x00320424)}, {UINT32_C(0x0061B9A6), UINT32_C(0x001B989A), UINT32_C(0x0038839A), UINT32_C(0x0038318C), UINT32_C(0x000A4E7A), UINT32_C(0x00316981), UINT32_C(0x00262D85), UINT32_C(0x00404D09), UINT32_C(0x00382ABE), UINT32_C(0x000DCD89), UINT32_C(0x001791BB), UINT32_C(0x002076BF), UINT32_C(0x00097C30), UINT32_C(0x0038D1B5), UINT32_C(0x0030A092), UINT32_C(0x00563AEB), UINT32_C(0x0027026C), UINT32_C(0x000E6AF4), UINT32_C(0x0037D8D5), UINT32_C(0x006D9346), UINT32_C(0x001E7C0C), UINT32_C(0x001B5D43), UINT32_C(0x0035B6ED)}, {UINT32_C(0x007FF888), UINT32_C(0x00222708), UINT32_C(0x001FA371), UINT32_C(0x000DCC52), UINT32_C(0x0005815A), UINT32_C(0x001F9620), UINT32_C(0x000061B0), UINT32_C(0x00078FA0), UINT32_C(0x0024CC30), UINT32_C(0x0015B96E), UINT32_C(0x0021510C), UINT32_C(0x00382242), UINT32_C(0x0030063A), UINT32_C(0x0036F011), UINT32_C(0x0037B5D5), UINT32_C(0x0002EB1A), UINT32_C(0x0026488B), UINT32_C(0x003568B8), UINT32_C(0x0003E1F1), UINT32_C(0x00517C59), UINT32_C(0x0030A3A0), UINT32_C(0x0025590A), UINT32_C(0x001142DE)}}, {{UINT32_C(0x005982A8), UINT32_C(0x00370C8F), UINT32_C(0x000AF64E), UINT32_C(0x0002E275), UINT32_C(0x001EEE4F), UINT32_C(0x00246CAD), UINT32_C(0x002AC24B), UINT32_C(0x00334875), UINT32_C(0x00174AA6), UINT32_C(0x002C27C8), UINT32_C(0x000EA109), UINT32_C(0x002BB331), UINT32_C(0x002AE934), UINT32_C(0x00254289), UINT32_C(0x003CA630), UINT32_C(0x003660D8), UINT32_C(0x0002C93F), UINT32_C(0x0018A01E), UINT32_C(0x0031D7A9), UINT32_C(0x002BD9F0), UINT32_C(0x002B8049), UINT32_C(0x00350D91), UINT32_C(0x00294E97)}, {UINT32_C(0x00129088), UINT32_C(0x0028094D), UINT32_C(0x00357F4D), UINT32_C(0x006B6FFF), UINT32_C(0x001B77FC), UINT32_C(0x00021A12), UINT32_C(0x00214A39), UINT32_C(0x007DAD9D), UINT32_C(0x0003BCA3), UINT32_C(0x0032A844), UINT32_C(0x002DC466), UINT32_C(0x005640CE), UINT32_C(0x003A5766), UINT32_C(0x00209AE0), UINT32_C(0x00388583), UINT32_C(0x005AA61F), UINT32_C(0x003917FE), UINT32_C(0x0020DB8C), UINT32_C(0x002576DC), UINT32_C(0x0046380E), UINT32_C(0x002B7CE8), UINT32_C(0x000B5A77), UINT32_C(0x00136232)}, {UINT32_C(0x00059DD5), UINT32_C(0x00298A36), UINT32_C(0x002A6FC3), UINT32_C(0x0030E5AA), UINT32_C(0x00308A3F), UINT32_C(0x002D40E1), UINT32_C(0x002E7DE9), UINT32_C(0x000807B9), UINT32_C(0x000E3F2E), UINT32_C(0x00227438), UINT32_C(0x00210CE9), UINT32_C(0x002EFE56), UINT32_C(0x00252E80), UINT32_C(0x0038C0F1), UINT32_C(0x00175105), UINT32_C(0x000E6782), UINT32_C(0x000B3A10), UINT32_C(0x0011D347), UINT32_C(0x0006498F), UINT32_C(0x001484B8), UINT32_C(0x00092D66), UINT32_C(0x001CAD6A), UINT32_C(0x003E1628)}}, {{UINT32_C(0x001FA2D3), UINT32_C(0x001AD4F5), UINT32_C(0x001BA2BF), UINT32_C(0x00584C68), UINT32_C(0x003C80CD), UINT32_C(0x002A3CE1), UINT32_C(0x000E01C2), UINT32_C(0x002DD8BE), UINT32_C(0x0017C543), UINT32_C(0x002C4E30), UINT32_C(0x0034AECE), UINT32_C(0x00437F0A), UINT32_C(0x000104C7), UINT32_C(0x002AA667), UINT32_C(0x003C16D7), UINT32_C(0x001848BB), UINT32_C(0x001D7152), UINT32_C(0x002A413C), UINT32_C(0x003C17CC), UINT32_C(0x00412579), UINT32_C(0x0018306D), UINT32_C(0x00032A9E), UINT32_C(0x0008EDED)}, {UINT32_C(0x0068A027), UINT32_C(0x00272D65), UINT32_C(0x0035ED0F), UINT32_C(0x006BD7E7), UINT32_C(0x003673DF), UINT32_C(0x002FA6B9), UINT32_C(0x002B9424), UINT32_C(0x0016DE59), UINT32_C(0x0024F12D), UINT32_C(0x0030F5A6), UINT32_C(0x0016B74C), UINT32_C(0x002CCEE0), UINT32_C(0x00316F68), UINT32_C(0x0028D420), UINT32_C(0x002A7F25), UINT32_C(0x001FA3FC), UINT32_C(0x0036B1F5), UINT32_C(0x003ABC71), UINT32_C(0x002E10FE), UINT32_C(0x005F45AF), UINT32_C(0x0030575C), UINT32_C(0x003847B7), UINT32_C(0x000DD252)}, {UINT32_C(0x002FA0BD), UINT32_C(0x003EB306), UINT32_C(0x00096877), UINT32_C(0x00521BA1), UINT32_C(0x001C63BC), UINT32_C(0x0032E251), UINT32_C(0x0003FA86), UINT32_C(0x006BC4D8), UINT32_C(0x000F02D8), UINT32_C(0x002FF844), UINT32_C(0x00242017), UINT32_C(0x0073E523), UINT32_C(0x00080EB0), UINT32_C(0x0022B8DE), UINT32_C(0x003BB4D3), UINT32_C(0x0013C01E), UINT32_C(0x0033830B), UINT32_C(0x003CFD23), UINT32_C(0x00294978), UINT32_C(0x00102D1C), UINT32_C(0x000E4A57), UINT32_C(0x001089DC), UINT32_C(0x003D1440)}}, {{UINT32_C(0x00166AD2), UINT32_C(0x001851E7), UINT32_C(0x003A69AC), UINT32_C(0x00138038), UINT32_C(0x002CBBE9), UINT32_C(0x000E1B01), UINT32_C(0x002D813B), UINT32_C(0x0055062F), UINT32_C(0x0011E135), UINT32_C(0x001B55A0), UINT32_C(0x0038C972), UINT32_C(0x006FFEDB), UINT32_C(0x002EFC51), UINT32_C(0x0037167E), UINT32_C(0x000651CA), UINT32_C(0x002FAAD0), UINT32_C(0x00319A64), UINT32_C(0x001AB9E5), UINT32_C(0x0019EA91), UINT32_C(0x00571C6A), UINT32_C(0x001B9B34), UINT32_C(0x0032C40D), UINT32_C(0x00120211)}, {UINT32_C(0x003FCA5A), UINT32_C(0x002E874F), UINT32_C(0x0016F8D3), UINT32_C(0x005ED189), UINT32_C(0x00322122), UINT32_C(0x000EC018), UINT32_C(0x000CE754), UINT32_C(0x00487A23), UINT32_C(0x000D1100), UINT32_C(0x002AC3BB), UINT32_C(0x002B538F), UINT32_C(0x004F45D1), UINT32_C(0x001EB758), UINT32_C(0x003B112B), UINT32_C(0x003E180B), UINT32_C(0x005A4B85), UINT32_C(0x001D03F0), UINT32_C(0x002069E1), UINT32_C(0x0011A16E), UINT32_C(0x004F3D33), UINT32_C(0x000381CC), UINT32_C(0x00094BB5), UINT32_C(0x00250B30)}, {UINT32_C(0x001C2C25), UINT32_C(0x002E0B68), UINT32_C(0x0025AC97), UINT32_C(0x0004E260), UINT32_C(0x002EB2AB), UINT32_C(0x00309F16), UINT32_C(0x002ECEDF), UINT32_C(0x0062F833), UINT32_C(0x001E0F90), UINT32_C(0x00294A6E), UINT32_C(0x00253BC6), UINT32_C(0x00341FBD), UINT32_C(0x001FB3C9), UINT32_C(0x0038047A), UINT32_C(0x003CD92B), UINT32_C(0x002F682E), UINT32_C(0x000553EA), UINT32_C(0x00160B6F), UINT32_C(0x00346039), UINT32_C(0x003E514D), UINT32_C(0x0024F021), UINT32_C(0x003E913F), UINT32_C(0x00129CFE)}}, {{UINT32_C(0x001EFBD4), UINT32_C(0x003B8B42), UINT32_C(0x000EF579), UINT32_C(0x005902FB), UINT32_C(0x003522F1), UINT32_C(0x0005610C), UINT32_C(0x00170E18), UINT32_C(0x001AFDFC), UINT32_C(0x00204D62), UINT32_C(0x00391959), UINT32_C(0x00179E48), UINT32_C(0x002FF462), UINT32_C(0x00063CE3), UINT32_C(0x00111EA8), UINT32_C(0x001AADCF), UINT32_C(0x000BD1D2), UINT32_C(0x00367F3C), UINT32_C(0x0011E570), UINT32_C(0x000BA7B7), UINT32_C(0x0026D561), UINT32_C(0x0015CF3E), UINT32_C(0x0016E814), UINT32_C(0x003FEC7E)}, {UINT32_C(0x00410519), UINT32_C(0x0034D54F), UINT32_C(0x003C2FFF), UINT32_C(0x004F910F), UINT32_C(0x0011C414), UINT32_C(0x0015AF5E), UINT32_C(0x003D949C), UINT32_C(0x003F1B53), UINT32_C(0x000091AD), UINT32_C(0x00264BB8), UINT32_C(0x00189713), UINT32_C(0x00338935), UINT32_C(0x001CFC31), UINT32_C(0x003530FD), UINT32_C(0x003D8864), UINT32_C(0x00571F5C), UINT32_C(0x00066F17), UINT32_C(0x000C820B), UINT32_C(0x000A514A), UINT32_C(0x0053ED14), UINT32_C(0x0008908D), UINT32_C(0x002A9AA4), UINT32_C(0x003723D1)}, {UINT32_C(0x00530A55), UINT32_C(0x0023CCA3), UINT32_C(0x00382430), UINT32_C(0x006AF068), UINT32_C(0x0035651E), UINT32_C(0x0014F6EC), UINT32_C(0x002AEAAB), UINT32_C(0x00487304), UINT32_C(0x00156CAA), UINT32_C(0x000C009A), UINT32_C(0x0010EF4B), UINT32_C(0x0026FC2D), UINT32_C(0x0010F060), UINT32_C(0x00095637), UINT32_C(0x00288A9C), UINT32_C(0x007E1314), UINT32_C(0x000A00CE), UINT32_C(0x0002F2C3), UINT32_C(0x000BE1F6), UINT32_C(0x0054175B), UINT32_C(0x000AFAA6), UINT32_C(0x00232E71), UINT32_C(0x002B55E0)}}, {{UINT32_C(0x0001E7A5), UINT32_C(0x0004FD57), UINT32_C(0x0022F6FF), UINT32_C(0x004CC21B), UINT32_C(0x000D5FC7), UINT32_C(0x001FD78E), UINT32_C(0x003A2EBE), UINT32_C(0x00183905), UINT32_C(0x000C129E), UINT32_C(0x003765A9), UINT32_C(0x000A6E98), UINT32_C(0x00797796), UINT32_C(0x0024F429), UINT32_C(0x0036F1E4), UINT32_C(0x003DE415), UINT32_C(0x0060A080), UINT32_C(0x003D9A0F), UINT32_C(0x00348EE1), UINT32_C(0x003B8D4C), UINT32_C(0x003B94F9), UINT32_C(0x000A52CE), UINT32_C(0x0036391F), UINT32_C(0x00219DCA)}, {UINT32_C(0x0000155E), UINT32_C(0x00001CFD), UINT32_C(0x001A8F93), UINT32_C(0x00743A5A), UINT32_C(0x0013DF56), UINT32_C(0x0035856C), UINT32_C(0x001E2621), UINT32_C(0x001DF2FD), UINT32_C(0x0017FC31), UINT32_C(0x0007F36B), UINT32_C(0x002516F7), UINT32_C(0x006F4EDA), UINT32_C(0x0004D8DA), UINT32_C(0x003BB017), UINT32_C(0x0017812B), UINT32_C(0x002E8803), UINT32_C(0x00331E37), UINT32_C(0x001476EC), UINT32_C(0x003B6795), UINT32_C(0x001D82CF), UINT32_C(0x00055A4D), UINT32_C(0x001E2E87), UINT32_C(0x0023FEA8)}, {UINT32_C(0x002DEA12), UINT32_C(0x00158ECD), UINT32_C(0x001FC69F), UINT32_C(0x00672AE8), UINT32_C(0x001E897D), UINT32_C(0x001F295F), UINT32_C(0x0027C7CF), UINT32_C(0x002F1854), UINT32_C(0x002DD29A), UINT32_C(0x00224DFF), UINT32_C(0x00228DE0), UINT32_C(0x0009A2B0), UINT32_C(0x00113CF4), UINT32_C(0x0030BD96), UINT32_C(0x0029A4AB), UINT32_C(0x006DD2C6), UINT32_C(0x000E0F85), UINT32_C(0x001BA973), UINT32_C(0x003AEEC2), UINT32_C(0x00440748), UINT32_C(0x003C3422), UINT32_C(0x0004A832), UINT32_C(0x003A30EB)}}, {{UINT32_C(0x001F1DE4), UINT32_C(0x0018B067), UINT32_C(0x002FFBA1), UINT32_C(0x007C943A), UINT32_C(0x003A18D1), UINT32_C(0x001108E9), UINT32_C(0x00284491), UINT32_C(0x00156A7B), UINT32_C(0x00148D8E), UINT32_C(0x00125467), UINT32_C(0x001947CE), UINT32_C(0x0048136E), UINT32_C(0x0014138D), UINT32_C(0x00303877), UINT32_C(0x00013932), UINT32_C(0x00055FE2), UINT32_C(0x00202719), UINT32_C(0x001586AE), UINT32_C(0x002D4502), UINT32_C(0x0071913C), UINT32_C(0x001B1B1C), UINT32_C(0x00056028), UINT32_C(0x00151696)}, {UINT32_C(0x0076C4DF), UINT32_C(0x001348D7), UINT32_C(0x00276BB5), UINT32_C(0x001D589A), UINT32_C(0x00390F8D), UINT32_C(0x0029442B), UINT32_C(0x0000B75D), UINT32_C(0x00036E35), UINT32_C(0x003201CC), UINT32_C(0x002A33F2), UINT32_C(0x001F44DA), UINT32_C(0x000F6817), UINT32_C(0x0009DD39), UINT32_C(0x00291EE0), UINT32_C(0x003B94B2), UINT32_C(0x00628085), UINT32_C(0x003DA89E), UINT32_C(0x001935A1), UINT32_C(0x001682E4), UINT32_C(0x003D96A4), UINT32_C(0x00266B1C), UINT32_C(0x000B66B4), UINT32_C(0x000892A2)}, {UINT32_C(0x003AFE25), UINT32_C(0x00055237), UINT32_C(0x00193631), UINT32_C(0x000ADE15), UINT32_C(0x00176B32), UINT32_C(0x0008E9B8), UINT32_C(0x0010652A), UINT32_C(0x001C79FD), UINT32_C(0x0012262B), UINT32_C(0x000811E4), UINT32_C(0x00371D92), UINT32_C(0x00000BE1), UINT32_C(0x000F024E), UINT32_C(0x003270AF), UINT32_C(0x003A0AEA), UINT32_C(0x005156EE), UINT32_C(0x003A8504), UINT32_C(0x00159140), UINT32_C(0x000A6703), UINT32_C(0x00125BF7), UINT32_C(0x003B1A1B), UINT32_C(0x0014C0D0), UINT32_C(0x0029EE7F)}}, }, { {{UINT32_C(0x000CEE3A), UINT32_C(0x003D7321), UINT32_C(0x00023142), UINT32_C(0x003544C4), UINT32_C(0x003F91BD), UINT32_C(0x0010A3EC), UINT32_C(0x00082B20), UINT32_C(0x0078FFE7), UINT32_C(0x003864F1), UINT32_C(0x003B8041), UINT32_C(0x001D9DC2), UINT32_C(0x0007B678), UINT32_C(0x0031A85D), UINT32_C(0x0026740B), UINT32_C(0x003B73EA), UINT32_C(0x00554F39), UINT32_C(0x0024C5A9), UINT32_C(0x001017C6), UINT32_C(0x0015253B), UINT32_C(0x0078B21A), UINT32_C(0x001046AA), UINT32_C(0x00345729), UINT32_C(0x0019F681)}, {UINT32_C(0x00181CB6), UINT32_C(0x001C63A7), UINT32_C(0x003CC749), UINT32_C(0x00688EB7), UINT32_C(0x003206DC), UINT32_C(0x002E4E99), UINT32_C(0x0004E7E3), UINT32_C(0x005C52DA), UINT32_C(0x00206DFE), UINT32_C(0x001645C1), UINT32_C(0x003C7BEB), UINT32_C(0x000204B2), UINT32_C(0x00012DAF), UINT32_C(0x00349503), UINT32_C(0x0034618E), UINT32_C(0x00231A9D), UINT32_C(0x0029B7B6), UINT32_C(0x002A40B2), UINT32_C(0x003C911A), UINT32_C(0x0014E5CA), UINT32_C(0x00168D52), UINT32_C(0x0005511B), UINT32_C(0x002F1520)}, {UINT32_C(0x007821FA), UINT32_C(0x0036926C), UINT32_C(0x000D7AF9), UINT32_C(0x006EC97B), UINT32_C(0x00045F92), UINT32_C(0x002447D1), UINT32_C(0x0026C242), UINT32_C(0x00319411), UINT32_C(0x003B8DAD), UINT32_C(0x001E3305), UINT32_C(0x0017AA9C), UINT32_C(0x001725D0), UINT32_C(0x00244567), UINT32_C(0x0005476C), UINT32_C(0x0001EFF9), UINT32_C(0x006A1091), UINT32_C(0x0024FA36), UINT32_C(0x00039DCF), UINT32_C(0x00208642), UINT32_C(0x003C7246), UINT32_C(0x003FA637), UINT32_C(0x002BB676), UINT32_C(0x00259D44)}}, {{UINT32_C(0x001143E0), UINT32_C(0x000BE934), UINT32_C(0x00092033), UINT32_C(0x0022ACE8), UINT32_C(0x0007276F), UINT32_C(0x000F73BC), UINT32_C(0x00201D0F), UINT32_C(0x00226977), UINT32_C(0x00012645), UINT32_C(0x00275465), UINT32_C(0x0028E554), UINT32_C(0x005CBE2C), UINT32_C(0x0021F1F6), UINT32_C(0x003D5FE6), UINT32_C(0x001DC930), UINT32_C(0x0077C3DA), UINT32_C(0x00097BE2), UINT32_C(0x000D819D), UINT32_C(0x0001C8A3), UINT32_C(0x0019CED0), UINT32_C(0x00134484), UINT32_C(0x000F4F11), UINT32_C(0x001DF685)}, {UINT32_C(0x000009BC), UINT32_C(0x0011EDA2), UINT32_C(0x000D29DF), UINT32_C(0x003DD661), UINT32_C(0x002C252E), UINT32_C(0x00113EDA), UINT32_C(0x003DF35D), UINT32_C(0x002DED2E), UINT32_C(0x002B0755), UINT32_C(0x00333F8A), UINT32_C(0x0013C151), UINT32_C(0x0057FEA3), UINT32_C(0x0015DAC1), UINT32_C(0x003EB220), UINT32_C(0x0003B1EA), UINT32_C(0x007C1A9B), UINT32_C(0x003CE6E5), UINT32_C(0x003CAD4F), UINT32_C(0x0012B472), UINT32_C(0x00652857), UINT32_C(0x0007E9D3), UINT32_C(0x0024534D), UINT32_C(0x00213675)}, {UINT32_C(0x0048F0D3), UINT32_C(0x0022CD16), UINT32_C(0x000AD0B2), UINT32_C(0x00354F10), UINT32_C(0x00349FB2), UINT32_C(0x00305A14), UINT32_C(0x001BDA8F), UINT32_C(0x007E0240), UINT32_C(0x001C187D), UINT32_C(0x003E456C), UINT32_C(0x00228C2A), UINT32_C(0x00518D87), UINT32_C(0x0031FEE5), UINT32_C(0x0018BEB8), UINT32_C(0x001E38EB), UINT32_C(0x003553A2), UINT32_C(0x003C0940), UINT32_C(0x003DE9BA), UINT32_C(0x00120769), UINT32_C(0x0076BFBD), UINT32_C(0x003CEEF0), UINT32_C(0x001B431A), UINT32_C(0x001E3982)}}, {{UINT32_C(0x00516136), UINT32_C(0x0029DF1B), UINT32_C(0x002D8BBF), UINT32_C(0x00309D5F), UINT32_C(0x00259D4B), UINT32_C(0x00038377), UINT32_C(0x003833E1), UINT32_C(0x004338BB), UINT32_C(0x001D9308), UINT32_C(0x0006D82F), UINT32_C(0x000B6B51), UINT32_C(0x005BA357), UINT32_C(0x00320D4C), UINT32_C(0x00259A92), UINT32_C(0x001D9241), UINT32_C(0x0078B989), UINT32_C(0x00045C59), UINT32_C(0x00037E70), UINT32_C(0x002B41F8), UINT32_C(0x0040B045), UINT32_C(0x003CC5AB), UINT32_C(0x003A6093), UINT32_C(0x002EB114)}, {UINT32_C(0x002FD13F), UINT32_C(0x0031B6B2), UINT32_C(0x0038071A), UINT32_C(0x00008F7E), UINT32_C(0x002227F0), UINT32_C(0x002C8CB9), UINT32_C(0x0002C017), UINT32_C(0x00452659), UINT32_C(0x000CCF76), UINT32_C(0x000F095B), UINT32_C(0x003A4DFD), UINT32_C(0x0072E9C3), UINT32_C(0x0010B61E), UINT32_C(0x000C0898), UINT32_C(0x0024C173), UINT32_C(0x000A2663), UINT32_C(0x00060CDB), UINT32_C(0x00096AE3), UINT32_C(0x0013F6F3), UINT32_C(0x004B3363), UINT32_C(0x001F342B), UINT32_C(0x000C8DE7), UINT32_C(0x00251CCD)}, {UINT32_C(0x00291E81), UINT32_C(0x00087E94), UINT32_C(0x00397163), UINT32_C(0x0041EE95), UINT32_C(0x00174BBE), UINT32_C(0x00116EA7), UINT32_C(0x003F0F93), UINT32_C(0x004C9F35), UINT32_C(0x0028B7F6), UINT32_C(0x0005ADCA), UINT32_C(0x00148DEC), UINT32_C(0x00599D15), UINT32_C(0x0024B8E7), UINT32_C(0x003FB84F), UINT32_C(0x003DA2F2), UINT32_C(0x003BCD26), UINT32_C(0x003A6E5E), UINT32_C(0x00198E0F), UINT32_C(0x002481B2), UINT32_C(0x0052634A), UINT32_C(0x0022D3F8), UINT32_C(0x00291EF1), UINT32_C(0x0007CC09)}}, {{UINT32_C(0x00103033), UINT32_C(0x002ADD30), UINT32_C(0x001859A0), UINT32_C(0x0015A086), UINT32_C(0x00061C02), UINT32_C(0x0010E7A8), UINT32_C(0x003EAFF4), UINT32_C(0x00767D34), UINT32_C(0x0010AB16), UINT32_C(0x001F8467), UINT32_C(0x0026AFAB), UINT32_C(0x000D90E0), UINT32_C(0x0026D163), UINT32_C(0x001708CF), UINT32_C(0x00041DBD), UINT32_C(0x0016BB95), UINT32_C(0x00375E2C), UINT32_C(0x0003BCA5), UINT32_C(0x0004AAE7), UINT32_C(0x003072CC), UINT32_C(0x0005E256), UINT32_C(0x0015AC55), UINT32_C(0x003BABC8)}, {UINT32_C(0x004B5126), UINT32_C(0x00221DBC), UINT32_C(0x00061E51), UINT32_C(0x001A65B2), UINT32_C(0x00144A5D), UINT32_C(0x00053B47), UINT32_C(0x0035282A), UINT32_C(0x00361203), UINT32_C(0x0034A24A), UINT32_C(0x00265DCD), UINT32_C(0x0011E3E4), UINT32_C(0x0071F53C), UINT32_C(0x001617A7), UINT32_C(0x001B3CFC), UINT32_C(0x0037ACD5), UINT32_C(0x003D79A9), UINT32_C(0x002F6062), UINT32_C(0x000E6254), UINT32_C(0x0013609B), UINT32_C(0x006B6554), UINT32_C(0x0035F594), UINT32_C(0x000ABD87), UINT32_C(0x002EDABF)}, {UINT32_C(0x00261ED9), UINT32_C(0x002DA8C6), UINT32_C(0x001E0A7A), UINT32_C(0x00169981), UINT32_C(0x001CF370), UINT32_C(0x003E78E4), UINT32_C(0x001DC822), UINT32_C(0x005C5907), UINT32_C(0x000C84AA), UINT32_C(0x001B3D8D), UINT32_C(0x00235FF6), UINT32_C(0x003183F8), UINT32_C(0x001DC3F5), UINT32_C(0x003CD3E8), UINT32_C(0x0038AA8A), UINT32_C(0x00298326), UINT32_C(0x0023EE8A), UINT32_C(0x00219AC4), UINT32_C(0x002FFA3E), UINT32_C(0x006FB3B6), UINT32_C(0x0026C478), UINT32_C(0x0001E8FD), UINT32_C(0x0028FC8A)}}, {{UINT32_C(0x0074BF78), UINT32_C(0x0021A4A0), UINT32_C(0x0007F0AA), UINT32_C(0x004357AC), UINT32_C(0x001FE0E7), UINT32_C(0x0028EE47), UINT32_C(0x0028C433), UINT32_C(0x002DC428), UINT32_C(0x001801EA), UINT32_C(0x001C3DCA), UINT32_C(0x0036E321), UINT32_C(0x0076CD18), UINT32_C(0x000FE126), UINT32_C(0x001F3CFA), UINT32_C(0x003B1976), UINT32_C(0x007FB0F7), UINT32_C(0x0022F2C9), UINT32_C(0x00197985), UINT32_C(0x0007146F), UINT32_C(0x007D7DCB), UINT32_C(0x000400AF), UINT32_C(0x00344938), UINT32_C(0x002E00BD)}, {UINT32_C(0x0033B420), UINT32_C(0x002CBFC9), UINT32_C(0x001EBE71), UINT32_C(0x000E5302), UINT32_C(0x00074DB3), UINT32_C(0x00130287), UINT32_C(0x000026B2), UINT32_C(0x00514208), UINT32_C(0x002E49CD), UINT32_C(0x000B2A5B), UINT32_C(0x003C750F), UINT32_C(0x003ED5AC), UINT32_C(0x0039B88B), UINT32_C(0x002B90DA), UINT32_C(0x0005740F), UINT32_C(0x00279855), UINT32_C(0x00083537), UINT32_C(0x000AECE4), UINT32_C(0x00284E3D), UINT32_C(0x007EBF4B), UINT32_C(0x000753F0), UINT32_C(0x00361832), UINT32_C(0x001F793F)}, {UINT32_C(0x003A939A), UINT32_C(0x00052334), UINT32_C(0x00356449), UINT32_C(0x0024BFBB), UINT32_C(0x0036BE0F), UINT32_C(0x00367B2C), UINT32_C(0x0004E8D1), UINT32_C(0x0067E56C), UINT32_C(0x00279DE5), UINT32_C(0x00090171), UINT32_C(0x0015DDDE), UINT32_C(0x002A246D), UINT32_C(0x00062B11), UINT32_C(0x00036BDB), UINT32_C(0x001714B6), UINT32_C(0x007CBB2A), UINT32_C(0x001969BA), UINT32_C(0x0027CA13), UINT32_C(0x0028B9DE), UINT32_C(0x005E3B1A), UINT32_C(0x00078AE7), UINT32_C(0x001351F5), UINT32_C(0x0000DA62)}}, {{UINT32_C(0x00053172), UINT32_C(0x002A2BFC), UINT32_C(0x0033E860), UINT32_C(0x00638ADF), UINT32_C(0x0022FDA9), UINT32_C(0x00161786), UINT32_C(0x002313FD), UINT32_C(0x00502AB2), UINT32_C(0x001C6DA3), UINT32_C(0x00235635), UINT32_C(0x0008ED5B), UINT32_C(0x001E342B), UINT32_C(0x0013C148), UINT32_C(0x002E6A9C), UINT32_C(0x003897F3), UINT32_C(0x005843F7), UINT32_C(0x00123DFD), UINT32_C(0x003C9807), UINT32_C(0x0005F065), UINT32_C(0x000D45E4), UINT32_C(0x002690E3), UINT32_C(0x00341A20), UINT32_C(0x000927BF)}, {UINT32_C(0x0015F913), UINT32_C(0x0030564F), UINT32_C(0x002F86A0), UINT32_C(0x000C54CB), UINT32_C(0x0017E098), UINT32_C(0x001C24F2), UINT32_C(0x0017111F), UINT32_C(0x00021C5D), UINT32_C(0x001BE2D3), UINT32_C(0x000FD2C4), UINT32_C(0x001E935E), UINT32_C(0x003CE41D), UINT32_C(0x00086058), UINT32_C(0x001B00C8), UINT32_C(0x00285196), UINT32_C(0x00011DA1), UINT32_C(0x002F1A16), UINT32_C(0x00126ABE), UINT32_C(0x00042FD8), UINT32_C(0x002EDBF1), UINT32_C(0x003A75C6), UINT32_C(0x000D1C7C), UINT32_C(0x00367832)}, {UINT32_C(0x00293AEE), UINT32_C(0x00021495), UINT32_C(0x001BB0F5), UINT32_C(0x00566C32), UINT32_C(0x00196DDA), UINT32_C(0x000D10CE), UINT32_C(0x000C6555), UINT32_C(0x001E8E54), UINT32_C(0x0014FA41), UINT32_C(0x003CA61A), UINT32_C(0x0008C270), UINT32_C(0x0041A922), UINT32_C(0x0010DDE3), UINT32_C(0x003C22D8), UINT32_C(0x00143053), UINT32_C(0x000C9DAC), UINT32_C(0x00117939), UINT32_C(0x0016BA60), UINT32_C(0x0028B353), UINT32_C(0x003C642B), UINT32_C(0x0020C6F4), UINT32_C(0x0003F370), UINT32_C(0x00196768)}}, {{UINT32_C(0x0065E8F6), UINT32_C(0x0009C4A7), UINT32_C(0x000A1D99), UINT32_C(0x007D4B7B), UINT32_C(0x0015F315), UINT32_C(0x003FC1AA), UINT32_C(0x002468FA), UINT32_C(0x005C1056), UINT32_C(0x000F4362), UINT32_C(0x002C7799), UINT32_C(0x0022A7D7), UINT32_C(0x0071EC9D), UINT32_C(0x001ACB59), UINT32_C(0x001E9B82), UINT32_C(0x000369EA), UINT32_C(0x0052D8AB), UINT32_C(0x002884D6), UINT32_C(0x000AA6B5), UINT32_C(0x00110D92), UINT32_C(0x005882B4), UINT32_C(0x0018CB6D), UINT32_C(0x002F7663), UINT32_C(0x001B502E)}, {UINT32_C(0x006415D4), UINT32_C(0x0036A62C), UINT32_C(0x002F8E5C), UINT32_C(0x00310D30), UINT32_C(0x0011EE1E), UINT32_C(0x00271CB7), UINT32_C(0x0022D267), UINT32_C(0x00094EFA), UINT32_C(0x00398684), UINT32_C(0x003F1B86), UINT32_C(0x00165A66), UINT32_C(0x005BB638), UINT32_C(0x0034D02F), UINT32_C(0x003E6EBE), UINT32_C(0x000DE3C6), UINT32_C(0x004138E0), UINT32_C(0x002EECEC), UINT32_C(0x0024EE9D), UINT32_C(0x001E8C7F), UINT32_C(0x005CEBE9), UINT32_C(0x000A4E0F), UINT32_C(0x001BC6CD), UINT32_C(0x0036B315)}, {UINT32_C(0x004FDAB7), UINT32_C(0x003E5AE6), UINT32_C(0x000C6A3B), UINT32_C(0x002C4AA9), UINT32_C(0x00269D75), UINT32_C(0x000D8807), UINT32_C(0x000B5F32), UINT32_C(0x006B8D06), UINT32_C(0x0031AE80), UINT32_C(0x0025B3E0), UINT32_C(0x0039541F), UINT32_C(0x0000F3ED), UINT32_C(0x003A4AF4), UINT32_C(0x001A6C5B), UINT32_C(0x000C602B), UINT32_C(0x0011FF53), UINT32_C(0x002F09C9), UINT32_C(0x00054583), UINT32_C(0x00214187), UINT32_C(0x0036D12F), UINT32_C(0x003950DC), UINT32_C(0x000AED90), UINT32_C(0x003F5A51)}}, {{UINT32_C(0x00056FA9), UINT32_C(0x002A8CF1), UINT32_C(0x0001DDAD), UINT32_C(0x0046E6FF), UINT32_C(0x003B910B), UINT32_C(0x002CADE7), UINT32_C(0x000D73A3), UINT32_C(0x00338292), UINT32_C(0x000BBF55), UINT32_C(0x0033F714), UINT32_C(0x0004D83C), UINT32_C(0x007DF50D), UINT32_C(0x0037ABD1), UINT32_C(0x00103E5A), UINT32_C(0x00042BB5), UINT32_C(0x00663AFA), UINT32_C(0x00197069), UINT32_C(0x002B5674), UINT32_C(0x003B0D57), UINT32_C(0x0045359A), UINT32_C(0x0010B12C), UINT32_C(0x000F3CA0), UINT32_C(0x0025512A)}, {UINT32_C(0x002BD66C), UINT32_C(0x002285D6), UINT32_C(0x001D66BD), UINT32_C(0x006BD87F), UINT32_C(0x002DC0F9), UINT32_C(0x003AE7AB), UINT32_C(0x00361A39), UINT32_C(0x0011B741), UINT32_C(0x00206C9F), UINT32_C(0x0025662E), UINT32_C(0x000C70F7), UINT32_C(0x003F36E4), UINT32_C(0x002ACA51), UINT32_C(0x000C34AF), UINT32_C(0x0024625C), UINT32_C(0x006500C7), UINT32_C(0x00198FCB), UINT32_C(0x0012CFCA), UINT32_C(0x0009EE1C), UINT32_C(0x00277608), UINT32_C(0x00213658), UINT32_C(0x0030604D), UINT32_C(0x002EF50F)}, {UINT32_C(0x00092ABD), UINT32_C(0x001446D1), UINT32_C(0x003F6A06), UINT32_C(0x0046565B), UINT32_C(0x0003E584), UINT32_C(0x00159E89), UINT32_C(0x003DEBC5), UINT32_C(0x00735F29), UINT32_C(0x0031EB5E), UINT32_C(0x000434A9), UINT32_C(0x002797DF), UINT32_C(0x006DEA2C), UINT32_C(0x002A9686), UINT32_C(0x00118EFA), UINT32_C(0x00050279), UINT32_C(0x003045AD), UINT32_C(0x0034874B), UINT32_C(0x003D78ED), UINT32_C(0x0018FEC5), UINT32_C(0x003D2A5A), UINT32_C(0x0030D04B), UINT32_C(0x003A21F3), UINT32_C(0x0031E2CC)}}, {{UINT32_C(0x000F8BDB), UINT32_C(0x0033A04E), UINT32_C(0x0014B261), UINT32_C(0x003ABAE0), UINT32_C(0x0003F54D), UINT32_C(0x00168473), UINT32_C(0x001C33A5), UINT32_C(0x001CB69A), UINT32_C(0x000FEEE3), UINT32_C(0x0031C38B), UINT32_C(0x00219E20), UINT32_C(0x004DE49D), UINT32_C(0x003DCBEE), UINT32_C(0x00052411), UINT32_C(0x003D8935), UINT32_C(0x000D0029), UINT32_C(0x00227D70), UINT32_C(0x002A8E3F), UINT32_C(0x000204A8), UINT32_C(0x00320844), UINT32_C(0x000DD3B6), UINT32_C(0x003D0841), UINT32_C(0x002C6C6C)}, {UINT32_C(0x005C03EC), UINT32_C(0x002B2C46), UINT32_C(0x00293F5B), UINT32_C(0x007F7BDE), UINT32_C(0x003ADCB5), UINT32_C(0x0017241D), UINT32_C(0x001FD746), UINT32_C(0x003529B7), UINT32_C(0x003332DC), UINT32_C(0x002763A5), UINT32_C(0x001E887A), UINT32_C(0x00130EB1), UINT32_C(0x002394CE), UINT32_C(0x000B8EF4), UINT32_C(0x000E932D), UINT32_C(0x00527CBE), UINT32_C(0x003F139A), UINT32_C(0x003BFA19), UINT32_C(0x00336A1D), UINT32_C(0x0066E2AC), UINT32_C(0x00098186), UINT32_C(0x00047A1A), UINT32_C(0x0004788C)}, {UINT32_C(0x0009A196), UINT32_C(0x0035EBC2), UINT32_C(0x00265402), UINT32_C(0x007A08A2), UINT32_C(0x002CDBA0), UINT32_C(0x0023627E), UINT32_C(0x0002433D), UINT32_C(0x0046191A), UINT32_C(0x003DCF82), UINT32_C(0x00034EE3), UINT32_C(0x002B144C), UINT32_C(0x000FC454), UINT32_C(0x00149146), UINT32_C(0x0002C1B7), UINT32_C(0x000707A7), UINT32_C(0x0029E68D), UINT32_C(0x000F78F8), UINT32_C(0x0024EB1B), UINT32_C(0x00116A27), UINT32_C(0x00722F40), UINT32_C(0x000C507F), UINT32_C(0x000737D8), UINT32_C(0x001FABC6)}}, {{UINT32_C(0x002E0A9F), UINT32_C(0x00047AD4), UINT32_C(0x00395FF2), UINT32_C(0x0070C4CD), UINT32_C(0x001FB3C7), UINT32_C(0x0001E8F1), UINT32_C(0x00025684), UINT32_C(0x0046A16B), UINT32_C(0x000BE275), UINT32_C(0x001CA806), UINT32_C(0x00017814), UINT32_C(0x00255A20), UINT32_C(0x001A997F), UINT32_C(0x001AD072), UINT32_C(0x003CFEB6), UINT32_C(0x003C6C9C), UINT32_C(0x001F796B), UINT32_C(0x003CEE03), UINT32_C(0x0003882E), UINT32_C(0x006A3D22), UINT32_C(0x0039A895), UINT32_C(0x003BEFAB), UINT32_C(0x001E8B14)}, {UINT32_C(0x002481A8), UINT32_C(0x000FD69E), UINT32_C(0x001BB1B7), UINT32_C(0x006E58A2), UINT32_C(0x001FF0FF), UINT32_C(0x000786C3), UINT32_C(0x0016526A), UINT32_C(0x00617928), UINT32_C(0x0010511F), UINT32_C(0x00088530), UINT32_C(0x00397BC8), UINT32_C(0x0034BA73), UINT32_C(0x0004BEE5), UINT32_C(0x00274402), UINT32_C(0x0004DCC0), UINT32_C(0x00246DC1), UINT32_C(0x00001408), UINT32_C(0x002DC300), UINT32_C(0x0028EE1F), UINT32_C(0x00609A3C), UINT32_C(0x0009B999), UINT32_C(0x00203ECD), UINT32_C(0x0022AA2D)}, {UINT32_C(0x003580E7), UINT32_C(0x00155DCD), UINT32_C(0x0013457A), UINT32_C(0x002C90EB), UINT32_C(0x0026470A), UINT32_C(0x00122727), UINT32_C(0x0037BD5C), UINT32_C(0x005D220D), UINT32_C(0x00152493), UINT32_C(0x0018A293), UINT32_C(0x00392995), UINT32_C(0x00151E64), UINT32_C(0x002E37DC), UINT32_C(0x002E9EC6), UINT32_C(0x001A205E), UINT32_C(0x000701D8), UINT32_C(0x001CB000), UINT32_C(0x00120BE4), UINT32_C(0x0031B0D9), UINT32_C(0x005B9235), UINT32_C(0x00005267), UINT32_C(0x000B7C49), UINT32_C(0x00155B65)}}, {{UINT32_C(0x003005AF), UINT32_C(0x00222462), UINT32_C(0x0034D58A), UINT32_C(0x002AEF89), UINT32_C(0x002BA06B), UINT32_C(0x001C9A9E), UINT32_C(0x001E894B), UINT32_C(0x00406001), UINT32_C(0x0010BF30), UINT32_C(0x002867EA), UINT32_C(0x003F0EC9), UINT32_C(0x0032D6F1), UINT32_C(0x002C15E9), UINT32_C(0x0012CFC5), UINT32_C(0x00191373), UINT32_C(0x0024A43B), UINT32_C(0x002C8AB3), UINT32_C(0x0025E47F), UINT32_C(0x003A9B91), UINT32_C(0x002DC4AC), UINT32_C(0x001821EA), UINT32_C(0x0019E718), UINT32_C(0x003570EC)}, {UINT32_C(0x00049A08), UINT32_C(0x0029C93F), UINT32_C(0x00311736), UINT32_C(0x004A3E8D), UINT32_C(0x00076459), UINT32_C(0x0024E089), UINT32_C(0x000D1295), UINT32_C(0x0065B4DA), UINT32_C(0x00199D52), UINT32_C(0x0007CE98), UINT32_C(0x00284B76), UINT32_C(0x00797A7F), UINT32_C(0x00219D91), UINT32_C(0x00288E07), UINT32_C(0x000BA4F1), UINT32_C(0x001089DA), UINT32_C(0x0003C7B7), UINT32_C(0x0037C99E), UINT32_C(0x00376B77), UINT32_C(0x0028C9E0), UINT32_C(0x003AF66B), UINT32_C(0x0015F094), UINT32_C(0x000887F7)}, {UINT32_C(0x004D57FB), UINT32_C(0x00142BB6), UINT32_C(0x000680E9), UINT32_C(0x0019ED70), UINT32_C(0x0031F674), UINT32_C(0x003D4AD2), UINT32_C(0x00023E39), UINT32_C(0x006D62CE), UINT32_C(0x001F2AF6), UINT32_C(0x0018DCD2), UINT32_C(0x00087694), UINT32_C(0x0004D412), UINT32_C(0x0022EF3A), UINT32_C(0x00024D6F), UINT32_C(0x0016C5BC), UINT32_C(0x00499A4A), UINT32_C(0x003C726B), UINT32_C(0x0021F3CF), UINT32_C(0x0023BB7D), UINT32_C(0x0060BA2C), UINT32_C(0x003B5906), UINT32_C(0x0019F5B1), UINT32_C(0x0022E2B1)}}, {{UINT32_C(0x001A18D3), UINT32_C(0x0002DF53), UINT32_C(0x003C65F2), UINT32_C(0x00252D1F), UINT32_C(0x0005D4E4), UINT32_C(0x0037F7AD), UINT32_C(0x002B96C8), UINT32_C(0x004A99EF), UINT32_C(0x0034622E), UINT32_C(0x003DC7C3), UINT32_C(0x0025C9EA), UINT32_C(0x002950F3), UINT32_C(0x002D17D0), UINT32_C(0x002BA2B1), UINT32_C(0x0016FD3F), UINT32_C(0x002D1E9B), UINT32_C(0x003D33A4), UINT32_C(0x0020B37E), UINT32_C(0x001F2455), UINT32_C(0x0039CB42), UINT32_C(0x00074719), UINT32_C(0x0006C7E3), UINT32_C(0x000B524B)}, {UINT32_C(0x003E735C), UINT32_C(0x001CD19B), UINT32_C(0x000A2B03), UINT32_C(0x0004DADA), UINT32_C(0x001D7F00), UINT32_C(0x001BB1CD), UINT32_C(0x0031EC2D), UINT32_C(0x0060CB29), UINT32_C(0x00305DAD), UINT32_C(0x002A2E31), UINT32_C(0x002A51BD), UINT32_C(0x0064BA52), UINT32_C(0x000A34DE), UINT32_C(0x000C8DBD), UINT32_C(0x00335FA7), UINT32_C(0x00335FE1), UINT32_C(0x0033C874), UINT32_C(0x0003E276), UINT32_C(0x002026D5), UINT32_C(0x00096E2B), UINT32_C(0x000276E3), UINT32_C(0x0038EF96), UINT32_C(0x003FBD7E)}, {UINT32_C(0x0079E37A), UINT32_C(0x001890D4), UINT32_C(0x00250177), UINT32_C(0x0047BB39), UINT32_C(0x0029268C), UINT32_C(0x002479AB), UINT32_C(0x00244958), UINT32_C(0x00270A4B), UINT32_C(0x001A146F), UINT32_C(0x000E6E93), UINT32_C(0x001688FB), UINT32_C(0x00728526), UINT32_C(0x001CECAB), UINT32_C(0x0026F68E), UINT32_C(0x001480E6), UINT32_C(0x0078FACC), UINT32_C(0x00234FE3), UINT32_C(0x001CB3A6), UINT32_C(0x0003F46F), UINT32_C(0x0031231A), UINT32_C(0x001C154C), UINT32_C(0x003F8810), UINT32_C(0x001DA5AD)}}, {{UINT32_C(0x003DDB7A), UINT32_C(0x0002E3D3), UINT32_C(0x002553BF), UINT32_C(0x004415BB), UINT32_C(0x00329C70), UINT32_C(0x0022CB5A), UINT32_C(0x0019FC2C), UINT32_C(0x000F789E), UINT32_C(0x0025AD01), UINT32_C(0x0023FC89), UINT32_C(0x00297284), UINT32_C(0x0052CFEE), UINT32_C(0x0023B149), UINT32_C(0x000D9DC2), UINT32_C(0x002F141C), UINT32_C(0x000144A6), UINT32_C(0x0034AA72), UINT32_C(0x00071093), UINT32_C(0x003304EB), UINT32_C(0x0072FE7F), UINT32_C(0x00098781), UINT32_C(0x001FC2EE), UINT32_C(0x001AA3B0)}, {UINT32_C(0x00784FC3), UINT32_C(0x00109969), UINT32_C(0x0027287E), UINT32_C(0x006DB5D4), UINT32_C(0x000ACF5E), UINT32_C(0x00032B46), UINT32_C(0x0037A8DC), UINT32_C(0x004CE91B), UINT32_C(0x0036E3B8), UINT32_C(0x002D9C83), UINT32_C(0x0004C6A9), UINT32_C(0x002A278F), UINT32_C(0x003E2154), UINT32_C(0x001E5587), UINT32_C(0x0026D619), UINT32_C(0x00749796), UINT32_C(0x002DE56E), UINT32_C(0x001CA040), UINT32_C(0x000F01A0), UINT32_C(0x000A33E5), UINT32_C(0x00398839), UINT32_C(0x0025A737), UINT32_C(0x00342BA0)}, {UINT32_C(0x000DD5DB), UINT32_C(0x0035AF7C), UINT32_C(0x000ADFC4), UINT32_C(0x002D82EC), UINT32_C(0x001F65FA), UINT32_C(0x000E30C7), UINT32_C(0x0003A776), UINT32_C(0x0011585E), UINT32_C(0x002736DB), UINT32_C(0x003AF607), UINT32_C(0x000EC2A5), UINT32_C(0x003DB029), UINT32_C(0x003B1ACF), UINT32_C(0x0025DB0F), UINT32_C(0x0001FC2D), UINT32_C(0x0009BB8A), UINT32_C(0x000C442B), UINT32_C(0x000B14D4), UINT32_C(0x000B2FA5), UINT32_C(0x002930AA), UINT32_C(0x001A33E5), UINT32_C(0x0007711E), UINT32_C(0x0014AAEA)}}, {{UINT32_C(0x004E9DDC), UINT32_C(0x00249BD7), UINT32_C(0x00399ACA), UINT32_C(0x00001C89), UINT32_C(0x00399AD6), UINT32_C(0x001CA0C4), UINT32_C(0x0033F687), UINT32_C(0x00167529), UINT32_C(0x003E6664), UINT32_C(0x00247D4A), UINT32_C(0x003E497D), UINT32_C(0x006BEC07), UINT32_C(0x00321482), UINT32_C(0x00261DC6), UINT32_C(0x001AFB91), UINT32_C(0x000CCE08), UINT32_C(0x00154873), UINT32_C(0x001FA9C6), UINT32_C(0x0031D6B7), UINT32_C(0x001DB078), UINT32_C(0x0007F410), UINT32_C(0x002B5D77), UINT32_C(0x001CEFE7)}, {UINT32_C(0x0078A938), UINT32_C(0x00079CA6), UINT32_C(0x0004A11B), UINT32_C(0x0000BBD2), UINT32_C(0x0014D1B9), UINT32_C(0x0032E71F), UINT32_C(0x00228788), UINT32_C(0x0043BDCB), UINT32_C(0x00052FE3), UINT32_C(0x0032E261), UINT32_C(0x003EA511), UINT32_C(0x006940B9), UINT32_C(0x000DD8A7), UINT32_C(0x0035310F), UINT32_C(0x0016AD6A), UINT32_C(0x0051AD87), UINT32_C(0x0034DB37), UINT32_C(0x0039F114), UINT32_C(0x000435BA), UINT32_C(0x0075A182), UINT32_C(0x00319B60), UINT32_C(0x0007D2C9), UINT32_C(0x003B06E6)}, {UINT32_C(0x004768E1), UINT32_C(0x001CC336), UINT32_C(0x003299A7), UINT32_C(0x005DFF8F), UINT32_C(0x00004B15), UINT32_C(0x00222007), UINT32_C(0x0035CA8E), UINT32_C(0x001DA643), UINT32_C(0x00267E34), UINT32_C(0x001EC2B8), UINT32_C(0x000189F4), UINT32_C(0x00721823), UINT32_C(0x000225C4), UINT32_C(0x001F0249), UINT32_C(0x003A75ED), UINT32_C(0x0043CA56), UINT32_C(0x0025AC50), UINT32_C(0x0000E327), UINT32_C(0x003352D9), UINT32_C(0x004B96F8), UINT32_C(0x0027419D), UINT32_C(0x0023A16C), UINT32_C(0x0031DA1B)}}, {{UINT32_C(0x00487D70), UINT32_C(0x003AAA4A), UINT32_C(0x0026A8EB), UINT32_C(0x005FBEDD), UINT32_C(0x002A0595), UINT32_C(0x0022F25C), UINT32_C(0x003A6FD8), UINT32_C(0x00451396), UINT32_C(0x00306E44), UINT32_C(0x000F3B8F), UINT32_C(0x002912A8), UINT32_C(0x0050F308), UINT32_C(0x0007E373), UINT32_C(0x0007762D), UINT32_C(0x001A5294), UINT32_C(0x00331113), UINT32_C(0x0026941A), UINT32_C(0x0025F44E), UINT32_C(0x003862FA), UINT32_C(0x0010D40E), UINT32_C(0x00289A47), UINT32_C(0x00099A16), UINT32_C(0x00207317)}, {UINT32_C(0x001B1BDB), UINT32_C(0x00304B63), UINT32_C(0x000E1EED), UINT32_C(0x0053C2DF), UINT32_C(0x003F16DC), UINT32_C(0x00063BAB), UINT32_C(0x0021F5CC), UINT32_C(0x0003D7B7), UINT32_C(0x000B4008), UINT32_C(0x00174E48), UINT32_C(0x00341AE6), UINT32_C(0x0023DF07), UINT32_C(0x002FF147), UINT32_C(0x0007214D), UINT32_C(0x0011768A), UINT32_C(0x00756B3F), UINT32_C(0x000DB5D9), UINT32_C(0x003F42F9), UINT32_C(0x00062571), UINT32_C(0x007558EC), UINT32_C(0x002AEDF3), UINT32_C(0x001F12E2), UINT32_C(0x002C1D2E)}, {UINT32_C(0x00424EEA), UINT32_C(0x0008E4E0), UINT32_C(0x00276315), UINT32_C(0x0010C7CE), UINT32_C(0x0010FB31), UINT32_C(0x0005DB4C), UINT32_C(0x002E33CE), UINT32_C(0x0029F3F7), UINT32_C(0x001931C4), UINT32_C(0x0006A41D), UINT32_C(0x002E7D33), UINT32_C(0x0031344C), UINT32_C(0x00148E02), UINT32_C(0x00387E14), UINT32_C(0x000EA259), UINT32_C(0x00485845), UINT32_C(0x0018ECF9), UINT32_C(0x001365B8), UINT32_C(0x0009B445), UINT32_C(0x00008051), UINT32_C(0x00327427), UINT32_C(0x001F7091), UINT32_C(0x0018B432)}}, {{UINT32_C(0x005F7787), UINT32_C(0x00170455), UINT32_C(0x00340DE5), UINT32_C(0x0062A794), UINT32_C(0x002C24C5), UINT32_C(0x0010BDA3), UINT32_C(0x002BFBBE), UINT32_C(0x0031B953), UINT32_C(0x002717CF), UINT32_C(0x0009262E), UINT32_C(0x002A4512), UINT32_C(0x00072DE4), UINT32_C(0x0025410B), UINT32_C(0x002BB34C), UINT32_C(0x000633A9), UINT32_C(0x007482DB), UINT32_C(0x002D93B4), UINT32_C(0x003DD3EC), UINT32_C(0x000C66CF), UINT32_C(0x00203EB1), UINT32_C(0x0024ED0D), UINT32_C(0x003397CD), UINT32_C(0x000F7881)}, {UINT32_C(0x00127E99), UINT32_C(0x003FDC31), UINT32_C(0x000D6B1B), UINT32_C(0x0067DD99), UINT32_C(0x0020B17C), UINT32_C(0x0019B464), UINT32_C(0x001B54BD), UINT32_C(0x0079ADB3), UINT32_C(0x001DF680), UINT32_C(0x00244323), UINT32_C(0x0011F742), UINT32_C(0x00305CDB), UINT32_C(0x00078D7A), UINT32_C(0x0000769B), UINT32_C(0x001CAE8B), UINT32_C(0x002F49E1), UINT32_C(0x002C7F9F), UINT32_C(0x0038FE3A), UINT32_C(0x0039CF05), UINT32_C(0x0079BF1E), UINT32_C(0x00308D34), UINT32_C(0x003DEE92), UINT32_C(0x0011514A)}, {UINT32_C(0x00382385), UINT32_C(0x0013BD1F), UINT32_C(0x003811CF), UINT32_C(0x00292587), UINT32_C(0x00322E94), UINT32_C(0x0026DD80), UINT32_C(0x002E2F48), UINT32_C(0x00230F38), UINT32_C(0x0017BA53), UINT32_C(0x000E1B94), UINT32_C(0x001E3431), UINT32_C(0x0012A183), UINT32_C(0x003003E9), UINT32_C(0x0039A0BD), UINT32_C(0x001C4811), UINT32_C(0x001E6DB1), UINT32_C(0x0001D16F), UINT32_C(0x002EF639), UINT32_C(0x003595BC), UINT32_C(0x00635C14), UINT32_C(0x000F1141), UINT32_C(0x00276EF2), UINT32_C(0x0026F1AB)}}, }, { {{UINT32_C(0x0063583C), UINT32_C(0x00178F3B), UINT32_C(0x0031FE89), UINT32_C(0x004A10CC), UINT32_C(0x0025E861), UINT32_C(0x001D9981), UINT32_C(0x00209C95), UINT32_C(0x00757DAB), UINT32_C(0x000E0CCA), UINT32_C(0x0026F2CF), UINT32_C(0x000F724B), UINT32_C(0x0054A684), UINT32_C(0x00395A25), UINT32_C(0x003B96AA), UINT32_C(0x000CB3E2), UINT32_C(0x0025FA25), UINT32_C(0x001A8CCD), UINT32_C(0x003E8D3C), UINT32_C(0x002670BC), UINT32_C(0x0073C1D9), UINT32_C(0x002D1389), UINT32_C(0x00130BE6), UINT32_C(0x00269AFA)}, {UINT32_C(0x0078D442), UINT32_C(0x0008E522), UINT32_C(0x0018EBC9), UINT32_C(0x005F3584), UINT32_C(0x003F1CBF), UINT32_C(0x000BF4C1), UINT32_C(0x00164AA4), UINT32_C(0x006151FB), UINT32_C(0x00068D6E), UINT32_C(0x00126E4F), UINT32_C(0x00200280), UINT32_C(0x0031B7DD), UINT32_C(0x00054BB5), UINT32_C(0x003503DD), UINT32_C(0x0015FE73), UINT32_C(0x00400A3B), UINT32_C(0x0018B4CB), UINT32_C(0x00269223), UINT32_C(0x003BAABF), UINT32_C(0x00219923), UINT32_C(0x0000517F), UINT32_C(0x0036DB7B), UINT32_C(0x001898DE)}, {UINT32_C(0x001B3C2F), UINT32_C(0x003100AC), UINT32_C(0x00375C4D), UINT32_C(0x0047FF1C), UINT32_C(0x001554A3), UINT32_C(0x00345032), UINT32_C(0x000567ED), UINT32_C(0x00602271), UINT32_C(0x00037B43), UINT32_C(0x00352EA6), UINT32_C(0x00099EBC), UINT32_C(0x007107DC), UINT32_C(0x00014BD9), UINT32_C(0x003BAE49), UINT32_C(0x0012E08D), UINT32_C(0x006CA22B), UINT32_C(0x001DABB1), UINT32_C(0x002D516C), UINT32_C(0x00270889), UINT32_C(0x002F1F40), UINT32_C(0x000B40D8), UINT32_C(0x001F6C6E), UINT32_C(0x00069120)}}, {{UINT32_C(0x003E2CA8), UINT32_C(0x000FBDFE), UINT32_C(0x0008452C), UINT32_C(0x004EBE38), UINT32_C(0x003022B7), UINT32_C(0x003A3695), UINT32_C(0x0000EF8E), UINT32_C(0x003868DB), UINT32_C(0x0038AD77), UINT32_C(0x00197BEF), UINT32_C(0x0035C5D1), UINT32_C(0x0056D147), UINT32_C(0x00150885), UINT32_C(0x0032B7D5), UINT32_C(0x0022642D), UINT32_C(0x006B1347), UINT32_C(0x00343776), UINT32_C(0x00321A28), UINT32_C(0x00170446), UINT32_C(0x003DEB75), UINT32_C(0x002A4140), UINT32_C(0x00029DF0), UINT32_C(0x002450E4)}, {UINT32_C(0x004955CA), UINT32_C(0x000C7AB0), UINT32_C(0x002D31F7), UINT32_C(0x005F83A6), UINT32_C(0x002FA36D), UINT32_C(0x001F49E7), UINT32_C(0x003F321C), UINT32_C(0x0011D711), UINT32_C(0x0004B439), UINT32_C(0x0034F95D), UINT32_C(0x00217EE2), UINT32_C(0x0032BAFE), UINT32_C(0x0006F393), UINT32_C(0x002A690E), UINT32_C(0x000FAE08), UINT32_C(0x0034160E), UINT32_C(0x0038471B), UINT32_C(0x003E6453), UINT32_C(0x001D2EED), UINT32_C(0x00019616), UINT32_C(0x002ECA2C), UINT32_C(0x002B42A7), UINT32_C(0x001944E5)}, {UINT32_C(0x0070C80A), UINT32_C(0x003ADD3E), UINT32_C(0x00164515), UINT32_C(0x004C3E58), UINT32_C(0x002B68C7), UINT32_C(0x0024C735), UINT32_C(0x00154086), UINT32_C(0x004AF4B2), UINT32_C(0x003F79B6), UINT32_C(0x000EFFA4), UINT32_C(0x002E7835), UINT32_C(0x00143F92), UINT32_C(0x00139828), UINT32_C(0x002F5825), UINT32_C(0x002C6C7B), UINT32_C(0x00374B07), UINT32_C(0x00260379), UINT32_C(0x0033BF91), UINT32_C(0x000FB28A), UINT32_C(0x006D0F2D), UINT32_C(0x001A3C03), UINT32_C(0x003DCB0D), UINT32_C(0x00042785)}}, {{UINT32_C(0x0032F6C1), UINT32_C(0x0025C23A), UINT32_C(0x0032EA38), UINT32_C(0x00343C52), UINT32_C(0x002C5DA6), UINT32_C(0x0029130F), UINT32_C(0x001DEA76), UINT32_C(0x00041B06), UINT32_C(0x0006CC8F), UINT32_C(0x000C33C2), UINT32_C(0x003DE859), UINT32_C(0x0075ADE1), UINT32_C(0x001F074B), UINT32_C(0x0020B431), UINT32_C(0x00089D3D), UINT32_C(0x00183D45), UINT32_C(0x0010916A), UINT32_C(0x00079EAC), UINT32_C(0x0004D6B9), UINT32_C(0x006DA065), UINT32_C(0x000E2053), UINT32_C(0x0002B57D), UINT32_C(0x0003A141)}, {UINT32_C(0x0009A37F), UINT32_C(0x0035153F), UINT32_C(0x0033545C), UINT32_C(0x005C4E51), UINT32_C(0x002ED0FF), UINT32_C(0x0023618F), UINT32_C(0x001775AA), UINT32_C(0x005E1890), UINT32_C(0x003A6506), UINT32_C(0x00383A25), UINT32_C(0x0006CB4C), UINT32_C(0x00238F29), UINT32_C(0x000B58F7), UINT32_C(0x0035B0D9), UINT32_C(0x001D243C), UINT32_C(0x0038459B), UINT32_C(0x0019D714), UINT32_C(0x0031ADDB), UINT32_C(0x00014CD5), UINT32_C(0x00114249), UINT32_C(0x0009DCEB), UINT32_C(0x00069813), UINT32_C(0x001E743D)}, {UINT32_C(0x00491E76), UINT32_C(0x00358978), UINT32_C(0x0032E06B), UINT32_C(0x007CF380), UINT32_C(0x0021BA4C), UINT32_C(0x001B9DC8), UINT32_C(0x00072C57), UINT32_C(0x007D4A61), UINT32_C(0x002A03EB), UINT32_C(0x002A8A04), UINT32_C(0x0036F1B1), UINT32_C(0x00167D87), UINT32_C(0x00037D30), UINT32_C(0x00300EB9), UINT32_C(0x0009A70D), UINT32_C(0x002915B7), UINT32_C(0x000C36DA), UINT32_C(0x0000FD77), UINT32_C(0x003CA0D6), UINT32_C(0x00599232), UINT32_C(0x000906BD), UINT32_C(0x003DEACB), UINT32_C(0x00181880)}}, {{UINT32_C(0x006BF556), UINT32_C(0x000208D1), UINT32_C(0x0037FE71), UINT32_C(0x0064B85C), UINT32_C(0x0031878C), UINT32_C(0x00333FB4), UINT32_C(0x0007D710), UINT32_C(0x004670D1), UINT32_C(0x0023984F), UINT32_C(0x0005C689), UINT32_C(0x00255366), UINT32_C(0x0044C87B), UINT32_C(0x001D338E), UINT32_C(0x003044AD), UINT32_C(0x002665F4), UINT32_C(0x0040EB4D), UINT32_C(0x001E02E4), UINT32_C(0x0008C27F), UINT32_C(0x000F8571), UINT32_C(0x006BD63F), UINT32_C(0x000A6DFC), UINT32_C(0x0013304C), UINT32_C(0x002FDD59)}, {UINT32_C(0x005724E2), UINT32_C(0x00218196), UINT32_C(0x00150782), UINT32_C(0x0056A299), UINT32_C(0x00236FDE), UINT32_C(0x0032ED2C), UINT32_C(0x0039E8A0), UINT32_C(0x00679EE7), UINT32_C(0x0014DA74), UINT32_C(0x0004A8BC), UINT32_C(0x00266E00), UINT32_C(0x0041E7FF), UINT32_C(0x002073C7), UINT32_C(0x00344E9F), UINT32_C(0x0021EAD2), UINT32_C(0x00425BB8), UINT32_C(0x002F122A), UINT32_C(0x002C55D5), UINT32_C(0x0008B0D6), UINT32_C(0x00666EDC), UINT32_C(0x0021D2D7), UINT32_C(0x002421BB), UINT32_C(0x00131ACD)}, {UINT32_C(0x00737055), UINT32_C(0x001D6FE9), UINT32_C(0x003EFC08), UINT32_C(0x00306FA4), UINT32_C(0x002508B1), UINT32_C(0x002780B8), UINT32_C(0x00329BA8), UINT32_C(0x00206820), UINT32_C(0x003B15C5), UINT32_C(0x00317300), UINT32_C(0x000FD39A), UINT32_C(0x0049D634), UINT32_C(0x000B31B5), UINT32_C(0x0019A81C), UINT32_C(0x00271B13), UINT32_C(0x0056932D), UINT32_C(0x00387035), UINT32_C(0x002A79F2), UINT32_C(0x0028ECD2), UINT32_C(0x000E84D7), UINT32_C(0x00232B80), UINT32_C(0x002790F5), UINT32_C(0x0026AAC9)}}, {{UINT32_C(0x003FA216), UINT32_C(0x002B5E41), UINT32_C(0x0011F507), UINT32_C(0x004798E8), UINT32_C(0x001F1C32), UINT32_C(0x0004D796), UINT32_C(0x00077B9E), UINT32_C(0x002381F2), UINT32_C(0x00042960), UINT32_C(0x003DC0DE), UINT32_C(0x001F19ED), UINT32_C(0x0008D2B6), UINT32_C(0x00218E79), UINT32_C(0x00191D1E), UINT32_C(0x0038BEC0), UINT32_C(0x002BA744), UINT32_C(0x001106D5), UINT32_C(0x002908D7), UINT32_C(0x0018D0A6), UINT32_C(0x00643D59), UINT32_C(0x00251CA2), UINT32_C(0x00025593), UINT32_C(0x002EABF3)}, {UINT32_C(0x00438D3B), UINT32_C(0x002C35AD), UINT32_C(0x00121865), UINT32_C(0x002217B5), UINT32_C(0x003F2262), UINT32_C(0x0002C5A2), UINT32_C(0x000B51E2), UINT32_C(0x007F949C), UINT32_C(0x001BC59A), UINT32_C(0x002729B2), UINT32_C(0x0025BD2D), UINT32_C(0x0063FBB0), UINT32_C(0x0013132E), UINT32_C(0x0016DC57), UINT32_C(0x0017A6E3), UINT32_C(0x002FCDA3), UINT32_C(0x00321610), UINT32_C(0x0032D4AA), UINT32_C(0x001F56D4), UINT32_C(0x004B46C8), UINT32_C(0x0026FC03), UINT32_C(0x002B891B), UINT32_C(0x001EEC11)}, {UINT32_C(0x0004BF5B), UINT32_C(0x000A6EB9), UINT32_C(0x00137543), UINT32_C(0x003EA024), UINT32_C(0x002E1BE2), UINT32_C(0x00294A40), UINT32_C(0x00175374), UINT32_C(0x003418B2), UINT32_C(0x00092934), UINT32_C(0x000559DA), UINT32_C(0x000D4705), UINT32_C(0x00023080), UINT32_C(0x002832CC), UINT32_C(0x0020B5FC), UINT32_C(0x000BF4A7), UINT32_C(0x004B3473), UINT32_C(0x0003A84F), UINT32_C(0x002A3FAE), UINT32_C(0x00045DB0), UINT32_C(0x007AEDBF), UINT32_C(0x001266FC), UINT32_C(0x0002E6C3), UINT32_C(0x000380CF)}}, {{UINT32_C(0x0029F673), UINT32_C(0x0011C696), UINT32_C(0x00032672), UINT32_C(0x0054238E), UINT32_C(0x00370626), UINT32_C(0x00339C4E), UINT32_C(0x0031300A), UINT32_C(0x000B2D5B), UINT32_C(0x00206C4D), UINT32_C(0x000791D2), UINT32_C(0x002DB03D), UINT32_C(0x0037C66B), UINT32_C(0x002780B2), UINT32_C(0x002E5FE3), UINT32_C(0x002B5B3A), UINT32_C(0x00240A75), UINT32_C(0x00239AF3), UINT32_C(0x0007A194), UINT32_C(0x0035BC60), UINT32_C(0x004FBA17), UINT32_C(0x003826E1), UINT32_C(0x00181F8A), UINT32_C(0x00042F82)}, {UINT32_C(0x00459AFB), UINT32_C(0x00087F76), UINT32_C(0x0002C645), UINT32_C(0x004C7CE4), UINT32_C(0x00142200), UINT32_C(0x00366037), UINT32_C(0x001EF906), UINT32_C(0x0057C3A8), UINT32_C(0x001A8791), UINT32_C(0x00302563), UINT32_C(0x002034EF), UINT32_C(0x001A0222), UINT32_C(0x003375A9), UINT32_C(0x0032C4BC), UINT32_C(0x0008F4DC), UINT32_C(0x00581A30), UINT32_C(0x000C394E), UINT32_C(0x000B7FEE), UINT32_C(0x003C5662), UINT32_C(0x0034BB53), UINT32_C(0x0005B495), UINT32_C(0x00018243), UINT32_C(0x0037995C)}, {UINT32_C(0x004906BD), UINT32_C(0x0032B8FA), UINT32_C(0x00372E94), UINT32_C(0x00613088), UINT32_C(0x00017311), UINT32_C(0x003528B5), UINT32_C(0x001EE0AC), UINT32_C(0x00686616), UINT32_C(0x0033F1FD), UINT32_C(0x0025E7C3), UINT32_C(0x003DFBB8), UINT32_C(0x001A5DF7), UINT32_C(0x00023B1E), UINT32_C(0x00015AAC), UINT32_C(0x0025054D), UINT32_C(0x001704E4), UINT32_C(0x001BAE37), UINT32_C(0x001A384F), UINT32_C(0x003606FC), UINT32_C(0x00740F1B), UINT32_C(0x002C8C7D), UINT32_C(0x0024600B), UINT32_C(0x003D5C73)}}, {{UINT32_C(0x001784B4), UINT32_C(0x002CEF58), UINT32_C(0x00372A6C), UINT32_C(0x00118258), UINT32_C(0x002D6ED8), UINT32_C(0x002DD567), UINT32_C(0x00106EE7), UINT32_C(0x001C074F), UINT32_C(0x001A9185), UINT32_C(0x0029B246), UINT32_C(0x00375A41), UINT32_C(0x007DF964), UINT32_C(0x0017B200), UINT32_C(0x00194A5C), UINT32_C(0x0013B979), UINT32_C(0x0003EA48), UINT32_C(0x00295585), UINT32_C(0x001B2FAF), UINT32_C(0x001F6D5F), UINT32_C(0x007D4491), UINT32_C(0x002AA139), UINT32_C(0x002032CA), UINT32_C(0x0033AB4D)}, {UINT32_C(0x00326E12), UINT32_C(0x00073B02), UINT32_C(0x0009134C), UINT32_C(0x00719A24), UINT32_C(0x0010FFDA), UINT32_C(0x0017F597), UINT32_C(0x00023DEA), UINT32_C(0x00565B05), UINT32_C(0x000CF206), UINT32_C(0x00316819), UINT32_C(0x001759BE), UINT32_C(0x003B59E1), UINT32_C(0x001A7716), UINT32_C(0x002F2CB8), UINT32_C(0x00022C88), UINT32_C(0x006E200A), UINT32_C(0x0034B39A), UINT32_C(0x0004C2A3), UINT32_C(0x000EFF2B), UINT32_C(0x007771C0), UINT32_C(0x0038736A), UINT32_C(0x003EA343), UINT32_C(0x002473CB)}, {UINT32_C(0x007E0E25), UINT32_C(0x003FF836), UINT32_C(0x0029E179), UINT32_C(0x0059DA0B), UINT32_C(0x0038BD07), UINT32_C(0x00397717), UINT32_C(0x0035EEC3), UINT32_C(0x001451BD), UINT32_C(0x000C4CC2), UINT32_C(0x0011AD20), UINT32_C(0x0024798D), UINT32_C(0x001EA1F7), UINT32_C(0x0017A035), UINT32_C(0x00174E1A), UINT32_C(0x000614CC), UINT32_C(0x00744E00), UINT32_C(0x00071F7A), UINT32_C(0x003F23AE), UINT32_C(0x001D8DCA), UINT32_C(0x000674F7), UINT32_C(0x0003AF2F), UINT32_C(0x0028BCAA), UINT32_C(0x0025E559)}}, {{UINT32_C(0x0011497E), UINT32_C(0x000ECE29), UINT32_C(0x002A4EA2), UINT32_C(0x001C0932), UINT32_C(0x00086320), UINT32_C(0x0001D745), UINT32_C(0x000E7077), UINT32_C(0x002982BA), UINT32_C(0x0006C3CC), UINT32_C(0x001A61D3), UINT32_C(0x0018D012), UINT32_C(0x003FD5A7), UINT32_C(0x00271A87), UINT32_C(0x003F3CEE), UINT32_C(0x00381814), UINT32_C(0x006264B1), UINT32_C(0x001D51C9), UINT32_C(0x0024F3F8), UINT32_C(0x0032133E), UINT32_C(0x0070B6C3), UINT32_C(0x0027EB3B), UINT32_C(0x00170DF3), UINT32_C(0x003FDF92)}, {UINT32_C(0x0052D458), UINT32_C(0x002FDA22), UINT32_C(0x00040A2E), UINT32_C(0x006FA7D9), UINT32_C(0x000F1A9C), UINT32_C(0x000B70A5), UINT32_C(0x001666C6), UINT32_C(0x00150503), UINT32_C(0x002A0651), UINT32_C(0x00019D2E), UINT32_C(0x002CB70B), UINT32_C(0x0022C910), UINT32_C(0x002EE4CD), UINT32_C(0x0008D506), UINT32_C(0x00014281), UINT32_C(0x00358B69), UINT32_C(0x002DA7BF), UINT32_C(0x00124768), UINT32_C(0x0020EC13), UINT32_C(0x00550441), UINT32_C(0x001C17FE), UINT32_C(0x00213A61), UINT32_C(0x001451A1)}, {UINT32_C(0x002A7679), UINT32_C(0x0015D4B5), UINT32_C(0x000CFCC1), UINT32_C(0x003FF845), UINT32_C(0x001C7A7D), UINT32_C(0x001AE5DD), UINT32_C(0x003EAB09), UINT32_C(0x003FDF89), UINT32_C(0x0035A00B), UINT32_C(0x0037D9FF), UINT32_C(0x00275895), UINT32_C(0x0035077F), UINT32_C(0x000EBCA0), UINT32_C(0x002DB718), UINT32_C(0x0007E563), UINT32_C(0x007217CE), UINT32_C(0x000CFEC9), UINT32_C(0x0039C0C7), UINT32_C(0x000C8457), UINT32_C(0x000D6DEE), UINT32_C(0x00095556), UINT32_C(0x002C0A1B), UINT32_C(0x000A5B02)}}, {{UINT32_C(0x0058676E), UINT32_C(0x003BB967), UINT32_C(0x002F67E8), UINT32_C(0x0014611B), UINT32_C(0x0002CA68), UINT32_C(0x00360A23), UINT32_C(0x003D4703), UINT32_C(0x002FFB09), UINT32_C(0x000B0650), UINT32_C(0x00350E32), UINT32_C(0x0020BBE2), UINT32_C(0x007EB614), UINT32_C(0x0013CBB5), UINT32_C(0x003BBDBC), UINT32_C(0x0026C9BB), UINT32_C(0x001E256E), UINT32_C(0x000E735E), UINT32_C(0x002C3CC9), UINT32_C(0x00010C97), UINT32_C(0x000C12B4), UINT32_C(0x00028C55), UINT32_C(0x0014841F), UINT32_C(0x00143C15)}, {UINT32_C(0x0065EB1A), UINT32_C(0x00025B10), UINT32_C(0x001CD5C4), UINT32_C(0x00746872), UINT32_C(0x00054288), UINT32_C(0x001B2B2E), UINT32_C(0x001F2239), UINT32_C(0x00518E6E), UINT32_C(0x002123BD), UINT32_C(0x0033748A), UINT32_C(0x00174C52), UINT32_C(0x00258C02), UINT32_C(0x0018FF52), UINT32_C(0x0007C3F2), UINT32_C(0x0010EC30), UINT32_C(0x002A8FB5), UINT32_C(0x00338507), UINT32_C(0x003EA284), UINT32_C(0x001E079E), UINT32_C(0x0070C9DD), UINT32_C(0x0023B5FB), UINT32_C(0x002637F4), UINT32_C(0x00141F80)}, {UINT32_C(0x00656339), UINT32_C(0x00123AB6), UINT32_C(0x003B759B), UINT32_C(0x0050CB99), UINT32_C(0x000D243E), UINT32_C(0x0022A047), UINT32_C(0x0030735F), UINT32_C(0x0004A175), UINT32_C(0x000B2BA6), UINT32_C(0x000D31CE), UINT32_C(0x00324F8D), UINT32_C(0x004BB229), UINT32_C(0x001E5D6F), UINT32_C(0x0002772E), UINT32_C(0x00296DC5), UINT32_C(0x00577AE8), UINT32_C(0x00086249), UINT32_C(0x002005B9), UINT32_C(0x0032CA2B), UINT32_C(0x0018E5F0), UINT32_C(0x0010AC8A), UINT32_C(0x00261F94), UINT32_C(0x00076C3E)}}, {{UINT32_C(0x000DB1A4), UINT32_C(0x000C1216), UINT32_C(0x0020E3CE), UINT32_C(0x00342538), UINT32_C(0x0025AD2D), UINT32_C(0x003C968A), UINT32_C(0x000B2AC4), UINT32_C(0x003874BE), UINT32_C(0x00108EBE), UINT32_C(0x00089221), UINT32_C(0x001A4E5D), UINT32_C(0x00000E6B), UINT32_C(0x003A62C9), UINT32_C(0x000CAB40), UINT32_C(0x0039432F), UINT32_C(0x006EEBB0), UINT32_C(0x003FD49F), UINT32_C(0x000A4915), UINT32_C(0x003E803E), UINT32_C(0x000D14CB), UINT32_C(0x00147DBE), UINT32_C(0x00273CC9), UINT32_C(0x0021CEAF)}, {UINT32_C(0x0061AF93), UINT32_C(0x0001A305), UINT32_C(0x0013BAAE), UINT32_C(0x007784E4), UINT32_C(0x000D254E), UINT32_C(0x0019835D), UINT32_C(0x00242371), UINT32_C(0x000846D1), UINT32_C(0x0029D19E), UINT32_C(0x000188DF), UINT32_C(0x000340FC), UINT32_C(0x007B3565), UINT32_C(0x00179159), UINT32_C(0x0000E014), UINT32_C(0x002BBC15), UINT32_C(0x006E03F7), UINT32_C(0x00332866), UINT32_C(0x003752B2), UINT32_C(0x0036128E), UINT32_C(0x004EEEA5), UINT32_C(0x0018D656), UINT32_C(0x0021FC26), UINT32_C(0x0031850E)}, {UINT32_C(0x00501FD0), UINT32_C(0x000AF537), UINT32_C(0x0038C7E6), UINT32_C(0x0043735E), UINT32_C(0x00110069), UINT32_C(0x003F2C22), UINT32_C(0x0017CF5D), UINT32_C(0x002FD510), UINT32_C(0x0014235B), UINT32_C(0x0004DD30), UINT32_C(0x003C65B4), UINT32_C(0x000F1032), UINT32_C(0x00389A5B), UINT32_C(0x00156157), UINT32_C(0x0011C8DC), UINT32_C(0x00500C48), UINT32_C(0x00119681), UINT32_C(0x00193DFD), UINT32_C(0x002E9C52), UINT32_C(0x007DD9BC), UINT32_C(0x003C9B4A), UINT32_C(0x003F1598), UINT32_C(0x0008392D)}}, {{UINT32_C(0x007DA6AE), UINT32_C(0x0026680F), UINT32_C(0x0001CBC2), UINT32_C(0x00700F21), UINT32_C(0x002BA64B), UINT32_C(0x0005ACA1), UINT32_C(0x000DA060), UINT32_C(0x006C880D), UINT32_C(0x00280F5B), UINT32_C(0x001CD097), UINT32_C(0x003BBCFE), UINT32_C(0x002CAEAF), UINT32_C(0x001B96AF), UINT32_C(0x002F9409), UINT32_C(0x00218817), UINT32_C(0x002929AF), UINT32_C(0x0035CDAF), UINT32_C(0x001766D6), UINT32_C(0x002FE847), UINT32_C(0x0003656A), UINT32_C(0x00047989), UINT32_C(0x00351086), UINT32_C(0x002D5D88)}, {UINT32_C(0x003FF7B2), UINT32_C(0x00283A9C), UINT32_C(0x0020E8A8), UINT32_C(0x003A0789), UINT32_C(0x001BFDE1), UINT32_C(0x000D525F), UINT32_C(0x0035C861), UINT32_C(0x0060CAD2), UINT32_C(0x002ACA77), UINT32_C(0x0015E571), UINT32_C(0x00182DD8), UINT32_C(0x004E3F9F), UINT32_C(0x00157225), UINT32_C(0x000ABD0E), UINT32_C(0x002C1C74), UINT32_C(0x006799C9), UINT32_C(0x001084CD), UINT32_C(0x002FCC74), UINT32_C(0x001104CF), UINT32_C(0x0063FB40), UINT32_C(0x000B1B48), UINT32_C(0x002FF705), UINT32_C(0x0017DD74)}, {UINT32_C(0x00758DFD), UINT32_C(0x00259101), UINT32_C(0x002F9E96), UINT32_C(0x00127A02), UINT32_C(0x003560BA), UINT32_C(0x00174012), UINT32_C(0x00080553), UINT32_C(0x00084ADA), UINT32_C(0x0030B0B3), UINT32_C(0x003CCA10), UINT32_C(0x002A7BF0), UINT32_C(0x0066B5D8), UINT32_C(0x001775C4), UINT32_C(0x0025FB21), UINT32_C(0x00084012), UINT32_C(0x0023425E), UINT32_C(0x00160D8A), UINT32_C(0x0014DE6A), UINT32_C(0x000D84B1), UINT32_C(0x0000C090), UINT32_C(0x001CEB65), UINT32_C(0x00304B91), UINT32_C(0x003C0931)}}, {{UINT32_C(0x007B8F38), UINT32_C(0x003E8D2B), UINT32_C(0x0014249B), UINT32_C(0x0032E6FD), UINT32_C(0x00019922), UINT32_C(0x00288D0E), UINT32_C(0x0030B952), UINT32_C(0x0008C34B), UINT32_C(0x00191997), UINT32_C(0x002F5C5B), UINT32_C(0x003ED4DE), UINT32_C(0x002D0DBE), UINT32_C(0x001C4CC0), UINT32_C(0x003799BB), UINT32_C(0x0007EED8), UINT32_C(0x007C90CE), UINT32_C(0x002E0A50), UINT32_C(0x00131AF1), UINT32_C(0x0028FD81), UINT32_C(0x003D7BFD), UINT32_C(0x0020C820), UINT32_C(0x001E4117), UINT32_C(0x003233FA)}, {UINT32_C(0x006AD0B4), UINT32_C(0x0024A7CA), UINT32_C(0x00224A76), UINT32_C(0x00201B36), UINT32_C(0x00089BF6), UINT32_C(0x00185943), UINT32_C(0x000EE3FB), UINT32_C(0x0062E219), UINT32_C(0x00304742), UINT32_C(0x000ECFDC), UINT32_C(0x0002B3E9), UINT32_C(0x00278A41), UINT32_C(0x000B4C45), UINT32_C(0x003DAF2F), UINT32_C(0x0016786A), UINT32_C(0x00326096), UINT32_C(0x0004F58A), UINT32_C(0x003D414F), UINT32_C(0x002571F1), UINT32_C(0x000C5218), UINT32_C(0x000BC00A), UINT32_C(0x001558DD), UINT32_C(0x000E4574)}, {UINT32_C(0x00214F76), UINT32_C(0x00344E7B), UINT32_C(0x000D0A1C), UINT32_C(0x00073F8A), UINT32_C(0x0031A1E8), UINT32_C(0x0024F24B), UINT32_C(0x002EB5CC), UINT32_C(0x00423B58), UINT32_C(0x0005DF88), UINT32_C(0x000A882D), UINT32_C(0x001F2F21), UINT32_C(0x001DC1AC), UINT32_C(0x000BF263), UINT32_C(0x000FC01F), UINT32_C(0x0013D53A), UINT32_C(0x00689488), UINT32_C(0x0039A08C), UINT32_C(0x00026357), UINT32_C(0x00354D80), UINT32_C(0x00649669), UINT32_C(0x0006D559), UINT32_C(0x0024D4A8), UINT32_C(0x001B1D7D)}}, {{UINT32_C(0x007539AC), UINT32_C(0x001AF584), UINT32_C(0x003849E3), UINT32_C(0x00604878), UINT32_C(0x0028932B), UINT32_C(0x00336A8D), UINT32_C(0x002DC15F), UINT32_C(0x004EE915), UINT32_C(0x003E8891), UINT32_C(0x002C26A5), UINT32_C(0x002353EF), UINT32_C(0x00690ACF), UINT32_C(0x000B284B), UINT32_C(0x0004CD7A), UINT32_C(0x00266953), UINT32_C(0x0038EC31), UINT32_C(0x0015E302), UINT32_C(0x000080A9), UINT32_C(0x0025D49A), UINT32_C(0x00318334), UINT32_C(0x003B81A5), UINT32_C(0x0038759D), UINT32_C(0x000EE138)}, {UINT32_C(0x006652DC), UINT32_C(0x0030CF99), UINT32_C(0x00286EAE), UINT32_C(0x007E732A), UINT32_C(0x001BB04F), UINT32_C(0x001A7E81), UINT32_C(0x00395CBD), UINT32_C(0x0012A720), UINT32_C(0x00143A75), UINT32_C(0x000C4F0A), UINT32_C(0x0002959B), UINT32_C(0x005134E3), UINT32_C(0x0029CD2F), UINT32_C(0x002E7B51), UINT32_C(0x001A8B65), UINT32_C(0x0067BB4D), UINT32_C(0x00109B63), UINT32_C(0x000FF6AF), UINT32_C(0x000F5619), UINT32_C(0x001FE508), UINT32_C(0x000593C7), UINT32_C(0x002A4F5C), UINT32_C(0x0035E60F)}, {UINT32_C(0x0041115B), UINT32_C(0x000C4566), UINT32_C(0x002DC574), UINT32_C(0x006EAB28), UINT32_C(0x003017E2), UINT32_C(0x00275A4A), UINT32_C(0x002C84E6), UINT32_C(0x0003FFFE), UINT32_C(0x0012331A), UINT32_C(0x001B2EF0), UINT32_C(0x000A57A7), UINT32_C(0x007EA3E1), UINT32_C(0x0001A805), UINT32_C(0x00064502), UINT32_C(0x003486D1), UINT32_C(0x002A0735), UINT32_C(0x001F1246), UINT32_C(0x0013E4C1), UINT32_C(0x000D6176), UINT32_C(0x005D2F66), UINT32_C(0x000B6919), UINT32_C(0x00222C38), UINT32_C(0x002247FC)}}, {{UINT32_C(0x007694F0), UINT32_C(0x0033BF57), UINT32_C(0x002D919E), UINT32_C(0x00464556), UINT32_C(0x003240BB), UINT32_C(0x000A81C8), UINT32_C(0x003FC6AD), UINT32_C(0x004C8BC2), UINT32_C(0x0037597A), UINT32_C(0x000F3632), UINT32_C(0x003DEE9C), UINT32_C(0x007AF7FC), UINT32_C(0x0002B2A3), UINT32_C(0x0001FEF8), UINT32_C(0x00266BFE), UINT32_C(0x005A4DF9), UINT32_C(0x001BC528), UINT32_C(0x0038FCA9), UINT32_C(0x0021AB8E), UINT32_C(0x001B7A68), UINT32_C(0x00255401), UINT32_C(0x0022B95A), UINT32_C(0x001CECB8)}, {UINT32_C(0x00202C81), UINT32_C(0x00305B5D), UINT32_C(0x000F8353), UINT32_C(0x0024BDD3), UINT32_C(0x0034CBF6), UINT32_C(0x001FC489), UINT32_C(0x001C1EF2), UINT32_C(0x00378DD8), UINT32_C(0x00341D4E), UINT32_C(0x00351CA3), UINT32_C(0x001FF171), UINT32_C(0x003F1946), UINT32_C(0x0002CF94), UINT32_C(0x00389924), UINT32_C(0x003E5A8B), UINT32_C(0x001BEA9D), UINT32_C(0x001E60D0), UINT32_C(0x00305EF9), UINT32_C(0x0029219F), UINT32_C(0x00301DAA), UINT32_C(0x0000D311), UINT32_C(0x0033EC94), UINT32_C(0x0003A683)}, {UINT32_C(0x0026A83D), UINT32_C(0x0021AD7B), UINT32_C(0x001694B6), UINT32_C(0x003BBDC2), UINT32_C(0x0016E0B7), UINT32_C(0x0009525B), UINT32_C(0x003B24F8), UINT32_C(0x007C4237), UINT32_C(0x000E1CB0), UINT32_C(0x0013611E), UINT32_C(0x001E0CF1), UINT32_C(0x004B8F7B), UINT32_C(0x0012520D), UINT32_C(0x001CBF78), UINT32_C(0x00153E58), UINT32_C(0x0072DA9E), UINT32_C(0x0009BF23), UINT32_C(0x00390546), UINT32_C(0x001EC704), UINT32_C(0x0062F82E), UINT32_C(0x001379EA), UINT32_C(0x00374CEF), UINT32_C(0x0000E810)}}, {{UINT32_C(0x00672D01), UINT32_C(0x00181C43), UINT32_C(0x000F03E5), UINT32_C(0x00114EB1), UINT32_C(0x00030AAB), UINT32_C(0x000E4929), UINT32_C(0x003F4FF1), UINT32_C(0x005C1816), UINT32_C(0x00234EF2), UINT32_C(0x0001CECB), UINT32_C(0x0000E003), UINT32_C(0x000FB7C6), UINT32_C(0x0021F686), UINT32_C(0x00397348), UINT32_C(0x000668D5), UINT32_C(0x000969FD), UINT32_C(0x002D58A1), UINT32_C(0x0001F6FF), UINT32_C(0x002B509F), UINT32_C(0x005BF575), UINT32_C(0x001C7A72), UINT32_C(0x003168A3), UINT32_C(0x00058841)}, {UINT32_C(0x002E6F93), UINT32_C(0x0003FD4D), UINT32_C(0x00070367), UINT32_C(0x007E2810), UINT32_C(0x0032A669), UINT32_C(0x003753AA), UINT32_C(0x00059E13), UINT32_C(0x005BE0BB), UINT32_C(0x002DAD0A), UINT32_C(0x0017009D), UINT32_C(0x002A29E1), UINT32_C(0x0010EAFB), UINT32_C(0x00371B7B), UINT32_C(0x00384FE2), UINT32_C(0x00074C4C), UINT32_C(0x005AF2F6), UINT32_C(0x00268D35), UINT32_C(0x0012D4D3), UINT32_C(0x001988E8), UINT32_C(0x00637384), UINT32_C(0x003CA7EB), UINT32_C(0x0012C38C), UINT32_C(0x00235944)}, {UINT32_C(0x007FE4F7), UINT32_C(0x00128547), UINT32_C(0x003EE942), UINT32_C(0x0063B61D), UINT32_C(0x00254E4C), UINT32_C(0x0006B269), UINT32_C(0x002778BD), UINT32_C(0x003C91A8), UINT32_C(0x0038A282), UINT32_C(0x0010BFE5), UINT32_C(0x002E5C21), UINT32_C(0x000205D0), UINT32_C(0x00150853), UINT32_C(0x002376FF), UINT32_C(0x0006E95D), UINT32_C(0x004FCAED), UINT32_C(0x0014D842), UINT32_C(0x00174695), UINT32_C(0x00192588), UINT32_C(0x0004407A), UINT32_C(0x00169AA6), UINT32_C(0x0038F9B9), UINT32_C(0x000DD818)}}, {{UINT32_C(0x007ED415), UINT32_C(0x002AEE66), UINT32_C(0x002FE621), UINT32_C(0x0019EC18), UINT32_C(0x001AC45A), UINT32_C(0x002C1BD9), UINT32_C(0x0039EFF2), UINT32_C(0x0053C8E8), UINT32_C(0x0035D12E), UINT32_C(0x000F4E0A), UINT32_C(0x0011182C), UINT32_C(0x00481DC1), UINT32_C(0x00069045), UINT32_C(0x0028AC00), UINT32_C(0x00239B1A), UINT32_C(0x0012C316), UINT32_C(0x001DFEA0), UINT32_C(0x003B985D), UINT32_C(0x000DB2FE), UINT32_C(0x004F72CA), UINT32_C(0x0034C923), UINT32_C(0x001A2093), UINT32_C(0x002B9C3E)}, {UINT32_C(0x006E6357), UINT32_C(0x002A5A2B), UINT32_C(0x001B005C), UINT32_C(0x00349183), UINT32_C(0x00374B6E), UINT32_C(0x0006A56D), UINT32_C(0x0005A032), UINT32_C(0x00159BD4), UINT32_C(0x003F8A72), UINT32_C(0x0006E1D8), UINT32_C(0x0018F53A), UINT32_C(0x0034F1F1), UINT32_C(0x003729F4), UINT32_C(0x001B24AB), UINT32_C(0x001CC0C1), UINT32_C(0x001EF566), UINT32_C(0x002B89C8), UINT32_C(0x0002F08C), UINT32_C(0x003199AF), UINT32_C(0x001C32F5), UINT32_C(0x00194755), UINT32_C(0x0005E212), UINT32_C(0x000E74FA)}, {UINT32_C(0x0075610F), UINT32_C(0x001C5B4F), UINT32_C(0x0031545E), UINT32_C(0x005A64BD), UINT32_C(0x00288ECD), UINT32_C(0x00003455), UINT32_C(0x003E4D6B), UINT32_C(0x001C3B47), UINT32_C(0x00107A21), UINT32_C(0x000E6BE9), UINT32_C(0x001C454B), UINT32_C(0x002BE715), UINT32_C(0x0013B171), UINT32_C(0x000D5966), UINT32_C(0x0017248A), UINT32_C(0x006610DA), UINT32_C(0x000D95A9), UINT32_C(0x002DAD62), UINT32_C(0x003B2B47), UINT32_C(0x00483940), UINT32_C(0x00214E89), UINT32_C(0x002E30EF), UINT32_C(0x001A8A7A)}}, }, { {{UINT32_C(0x005710C2), UINT32_C(0x001C5AC3), UINT32_C(0x0032A560), UINT32_C(0x0008892C), UINT32_C(0x002827E3), UINT32_C(0x0034491A), UINT32_C(0x000CBDDB), UINT32_C(0x001226BC), UINT32_C(0x003DC095), UINT32_C(0x003DBF5D), UINT32_C(0x00207C8F), UINT32_C(0x0003AEE4), UINT32_C(0x00241676), UINT32_C(0x0019F64F), UINT32_C(0x0003A54C), UINT32_C(0x007CCE36), UINT32_C(0x00229653), UINT32_C(0x001AD488), UINT32_C(0x002FF51A), UINT32_C(0x003BAD16), UINT32_C(0x00269362), UINT32_C(0x0005CFD4), UINT32_C(0x002B0036)}, {UINT32_C(0x001D5B16), UINT32_C(0x0037F93D), UINT32_C(0x0011BE70), UINT32_C(0x00010F69), UINT32_C(0x000FD6A2), UINT32_C(0x00198F6D), UINT32_C(0x00306746), UINT32_C(0x00019354), UINT32_C(0x0005D19C), UINT32_C(0x002A4081), UINT32_C(0x002187BF), UINT32_C(0x0037CD1C), UINT32_C(0x000F42FE), UINT32_C(0x00384FBB), UINT32_C(0x003F74B7), UINT32_C(0x002CB87D), UINT32_C(0x002FA3D2), UINT32_C(0x003B9CBD), UINT32_C(0x0011ACE0), UINT32_C(0x004F2A0F), UINT32_C(0x0010CDFE), UINT32_C(0x0037DC56), UINT32_C(0x001CA343)}, {UINT32_C(0x002E9F4B), UINT32_C(0x0017B4E0), UINT32_C(0x00311C99), UINT32_C(0x0042E4B2), UINT32_C(0x00253B3C), UINT32_C(0x00056B7F), UINT32_C(0x00338DE4), UINT32_C(0x002BD82C), UINT32_C(0x00321B8D), UINT32_C(0x0038A72F), UINT32_C(0x0008F3D8), UINT32_C(0x001567CC), UINT32_C(0x0026AD64), UINT32_C(0x0020C5AF), UINT32_C(0x000CCD37), UINT32_C(0x00590CBB), UINT32_C(0x00313270), UINT32_C(0x003C5BA6), UINT32_C(0x00368F2D), UINT32_C(0x003060DD), UINT32_C(0x0036F8BC), UINT32_C(0x000F2893), UINT32_C(0x00334A0C)}}, {{UINT32_C(0x000DE443), UINT32_C(0x0032A8C8), UINT32_C(0x003EE1EE), UINT32_C(0x002FB8DA), UINT32_C(0x0001EC25), UINT32_C(0x001F2379), UINT32_C(0x002C120C), UINT32_C(0x00422DB7), UINT32_C(0x003AA20D), UINT32_C(0x00036834), UINT32_C(0x000B6FAB), UINT32_C(0x00579A73), UINT32_C(0x002C546A), UINT32_C(0x003CFCBB), UINT32_C(0x0015CCE3), UINT32_C(0x001DA981), UINT32_C(0x001D2DEC), UINT32_C(0x00155C8F), UINT32_C(0x0032C6DE), UINT32_C(0x001BBCC6), UINT32_C(0x00332AB7), UINT32_C(0x00221975), UINT32_C(0x0015380A)}, {UINT32_C(0x0079F763), UINT32_C(0x00086F41), UINT32_C(0x0027B078), UINT32_C(0x0072AE3A), UINT32_C(0x003377BB), UINT32_C(0x003C40F7), UINT32_C(0x0018F8C7), UINT32_C(0x00559BA1), UINT32_C(0x00387EE1), UINT32_C(0x000395F9), UINT32_C(0x0026C76D), UINT32_C(0x00438509), UINT32_C(0x00258967), UINT32_C(0x00102218), UINT32_C(0x0021EF58), UINT32_C(0x00187594), UINT32_C(0x00070C07), UINT32_C(0x001150ED), UINT32_C(0x001A248F), UINT32_C(0x0017CA07), UINT32_C(0x00305C05), UINT32_C(0x003B435D), UINT32_C(0x0003AB05)}, {UINT32_C(0x00269D6F), UINT32_C(0x0014041F), UINT32_C(0x001C654B), UINT32_C(0x001E5899), UINT32_C(0x000B839F), UINT32_C(0x000068FF), UINT32_C(0x001345C1), UINT32_C(0x0062C16D), UINT32_C(0x00095303), UINT32_C(0x00336B6B), UINT32_C(0x001F5076), UINT32_C(0x006B8DE7), UINT32_C(0x003033A5), UINT32_C(0x0031B05D), UINT32_C(0x000AAEBB), UINT32_C(0x00580DC0), UINT32_C(0x00216E2A), UINT32_C(0x000B00E8), UINT32_C(0x002FED70), UINT32_C(0x0067F7E7), UINT32_C(0x000E3F39), UINT32_C(0x0026A5C9), UINT32_C(0x001321C9)}}, {{UINT32_C(0x0075F516), UINT32_C(0x0019707B), UINT32_C(0x00284D76), UINT32_C(0x00135FD0), UINT32_C(0x003E3862), UINT32_C(0x00146ACB), UINT32_C(0x001C934B), UINT32_C(0x007030A4), UINT32_C(0x000CF8E7), UINT32_C(0x002CA64F), UINT32_C(0x003FDC6E), UINT32_C(0x0065C11E), UINT32_C(0x0016B6BB), UINT32_C(0x0018C069), UINT32_C(0x00171DC5), UINT32_C(0x005B5697), UINT32_C(0x001E8900), UINT32_C(0x001B6DAF), UINT32_C(0x00310BBC), UINT32_C(0x006BCF1D), UINT32_C(0x002F143F), UINT32_C(0x001905CA), UINT32_C(0x00017744)}, {UINT32_C(0x003D88D5), UINT32_C(0x000F9E5C), UINT32_C(0x003604CF), UINT32_C(0x000C36D2), UINT32_C(0x002CF504), UINT32_C(0x0039A798), UINT32_C(0x000BDED1), UINT32_C(0x001B8DC3), UINT32_C(0x0008E589), UINT32_C(0x003A11F2), UINT32_C(0x00200D8C), UINT32_C(0x00625D48), UINT32_C(0x000A9310), UINT32_C(0x003CD6F6), UINT32_C(0x00023EB4), UINT32_C(0x001CDCCF), UINT32_C(0x00126F0D), UINT32_C(0x0022C59F), UINT32_C(0x002ACC01), UINT32_C(0x005306AD), UINT32_C(0x002E74F2), UINT32_C(0x0005DF6D), UINT32_C(0x00285847)}, {UINT32_C(0x0065F342), UINT32_C(0x001EE28A), UINT32_C(0x00222BEB), UINT32_C(0x006CA69D), UINT32_C(0x000BB7F9), UINT32_C(0x0021BF78), UINT32_C(0x0003EC62), UINT32_C(0x0054A057), UINT32_C(0x00316B24), UINT32_C(0x000FF725), UINT32_C(0x00262490), UINT32_C(0x003AE835), UINT32_C(0x000DA133), UINT32_C(0x00120D05), UINT32_C(0x000F8110), UINT32_C(0x00347C18), UINT32_C(0x0014B405), UINT32_C(0x000E57EA), UINT32_C(0x001D3804), UINT32_C(0x001FB3A3), UINT32_C(0x0036FC24), UINT32_C(0x003107FA), UINT32_C(0x0002D52F)}}, {{UINT32_C(0x00730C26), UINT32_C(0x00033129), UINT32_C(0x00099E61), UINT32_C(0x00274495), UINT32_C(0x00067D5F), UINT32_C(0x0030E0F3), UINT32_C(0x00133EE6), UINT32_C(0x001CA496), UINT32_C(0x000D9AF5), UINT32_C(0x000E2809), UINT32_C(0x0039B916), UINT32_C(0x006CE2B0), UINT32_C(0x00022B22), UINT32_C(0x003C1D03), UINT32_C(0x00134443), UINT32_C(0x006C83E6), UINT32_C(0x0022E5D1), UINT32_C(0x00355465), UINT32_C(0x001393DE), UINT32_C(0x00297B8C), UINT32_C(0x000CCC36), UINT32_C(0x00384BA8), UINT32_C(0x0003C2A7)}, {UINT32_C(0x001F3E32), UINT32_C(0x003E6A39), UINT32_C(0x00274F66), UINT32_C(0x0065F067), UINT32_C(0x003DEE02), UINT32_C(0x001ADBA0), UINT32_C(0x003DD0D0), UINT32_C(0x00067633), UINT32_C(0x003371E3), UINT32_C(0x0018B039), UINT32_C(0x000FBD3F), UINT32_C(0x003FEF60), UINT32_C(0x000C13E7), UINT32_C(0x0035AFF4), UINT32_C(0x00248F86), UINT32_C(0x0075C8AC), UINT32_C(0x00010FB8), UINT32_C(0x0009A933), UINT32_C(0x00155411), UINT32_C(0x004DD6EA), UINT32_C(0x0018B242), UINT32_C(0x003F42B9), UINT32_C(0x00307AFB)}, {UINT32_C(0x0043D9DA), UINT32_C(0x002F1FAC), UINT32_C(0x002BEBF2), UINT32_C(0x001674C8), UINT32_C(0x002F5627), UINT32_C(0x000982A2), UINT32_C(0x001DD189), UINT32_C(0x0023CFE8), UINT32_C(0x001435E4), UINT32_C(0x002E3968), UINT32_C(0x00212138), UINT32_C(0x0037DAED), UINT32_C(0x001AF391), UINT32_C(0x00149EAC), UINT32_C(0x003F6739), UINT32_C(0x005A1D0B), UINT32_C(0x0003DA69), UINT32_C(0x002C06DC), UINT32_C(0x003A4339), UINT32_C(0x00603E6E), UINT32_C(0x00144A9B), UINT32_C(0x002E832B), UINT32_C(0x002DEC99)}}, {{UINT32_C(0x00262A7A), UINT32_C(0x0006D662), UINT32_C(0x00070E7F), UINT32_C(0x007D4FD4), UINT32_C(0x000363F2), UINT32_C(0x002DCD0B), UINT32_C(0x003F4BD3), UINT32_C(0x004B46BE), UINT32_C(0x0018690B), UINT32_C(0x000D990E), UINT32_C(0x000FAB11), UINT32_C(0x000F371C), UINT32_C(0x003CC586), UINT32_C(0x0027FA77), UINT32_C(0x00064076), UINT32_C(0x002B6788), UINT32_C(0x003FBD23), UINT32_C(0x0003E156), UINT32_C(0x000B4246), UINT32_C(0x0011F74C), UINT32_C(0x001580E7), UINT32_C(0x001AB7D6), UINT32_C(0x002FD3D2)}, {UINT32_C(0x0073791E), UINT32_C(0x0028FB9D), UINT32_C(0x002F8DA3), UINT32_C(0x00149495), UINT32_C(0x001EDDC0), UINT32_C(0x0022DA14), UINT32_C(0x000D1BE0), UINT32_C(0x000602F3), UINT32_C(0x00166D08), UINT32_C(0x001F0437), UINT32_C(0x0001CD0D), UINT32_C(0x002624C1), UINT32_C(0x002A961B), UINT32_C(0x00094F8B), UINT32_C(0x00315EBC), UINT32_C(0x00021B46), UINT32_C(0x001DB347), UINT32_C(0x00240821), UINT32_C(0x002271B3), UINT32_C(0x00475580), UINT32_C(0x00022765), UINT32_C(0x0030DDFA), UINT32_C(0x002DD431)}, {UINT32_C(0x0073CD42), UINT32_C(0x000AA556), UINT32_C(0x0012283B), UINT32_C(0x007C1AE9), UINT32_C(0x000379D4), UINT32_C(0x0022CBD1), UINT32_C(0x003AB652), UINT32_C(0x00694262), UINT32_C(0x003DAD8F), UINT32_C(0x003C497A), UINT32_C(0x001A32CF), UINT32_C(0x003C85F6), UINT32_C(0x0005431E), UINT32_C(0x002156D8), UINT32_C(0x002AF6B5), UINT32_C(0x00038046), UINT32_C(0x002E42CB), UINT32_C(0x00254F18), UINT32_C(0x0020D00F), UINT32_C(0x0030D955), UINT32_C(0x00071955), UINT32_C(0x000B6D41), UINT32_C(0x00285989)}}, {{UINT32_C(0x007E08FB), UINT32_C(0x00263A00), UINT32_C(0x000CADFC), UINT32_C(0x001DC808), UINT32_C(0x002FA272), UINT32_C(0x001FB53D), UINT32_C(0x0011F9BF), UINT32_C(0x003390F4), UINT32_C(0x0034E6F0), UINT32_C(0x0004D46C), UINT32_C(0x00054043), UINT32_C(0x001A0B56), UINT32_C(0x003D1A17), UINT32_C(0x001B584C), UINT32_C(0x0011ED5C), UINT32_C(0x007B2CBC), UINT32_C(0x000C420C), UINT32_C(0x002C7F8D), UINT32_C(0x001B1449), UINT32_C(0x006D4B4B), UINT32_C(0x00284BD2), UINT32_C(0x00097414), UINT32_C(0x001056CF)}, {UINT32_C(0x0073D3D1), UINT32_C(0x00088230), UINT32_C(0x000075FE), UINT32_C(0x003B85B2), UINT32_C(0x00172ED7), UINT32_C(0x000E1CD6), UINT32_C(0x002D09FB), UINT32_C(0x0073D157), UINT32_C(0x0009AE50), UINT32_C(0x0011E0DC), UINT32_C(0x000EE967), UINT32_C(0x002CFFF1), UINT32_C(0x0010B62C), UINT32_C(0x001BBB7A), UINT32_C(0x001A028C), UINT32_C(0x004CD9AF), UINT32_C(0x0011BCF9), UINT32_C(0x0027E62F), UINT32_C(0x000579BB), UINT32_C(0x007DC76F), UINT32_C(0x00332A43), UINT32_C(0x0023C822), UINT32_C(0x000141A7)}, {UINT32_C(0x00696277), UINT32_C(0x001B3A68), UINT32_C(0x002BB919), UINT32_C(0x00483ED8), UINT32_C(0x000E8365), UINT32_C(0x00099C62), UINT32_C(0x003C029F), UINT32_C(0x005155DA), UINT32_C(0x001F3BFC), UINT32_C(0x003F93BC), UINT32_C(0x0019B689), UINT32_C(0x00763BA9), UINT32_C(0x003D2F7A), UINT32_C(0x00398C78), UINT32_C(0x0038B6BF), UINT32_C(0x006C7737), UINT32_C(0x002EE2B2), UINT32_C(0x003AADE4), UINT32_C(0x002A6200), UINT32_C(0x0061FD04), UINT32_C(0x001F7254), UINT32_C(0x000C8C41), UINT32_C(0x0033394F)}}, {{UINT32_C(0x005E9802), UINT32_C(0x00264758), UINT32_C(0x001AB2B5), UINT32_C(0x002E4F89), UINT32_C(0x002C4ADC), UINT32_C(0x000094EF), UINT32_C(0x002689AD), UINT32_C(0x0046FA1A), UINT32_C(0x0030AFC9), UINT32_C(0x001796B4), UINT32_C(0x0007E5D9), UINT32_C(0x0042C248), UINT32_C(0x000F1E94), UINT32_C(0x0021F53B), UINT32_C(0x00261686), UINT32_C(0x003F1DDB), UINT32_C(0x0038C53A), UINT32_C(0x00085F45), UINT32_C(0x002D5719), UINT32_C(0x000E126B), UINT32_C(0x0008A053), UINT32_C(0x0001D8A2), UINT32_C(0x000CA742)}, {UINT32_C(0x0024D905), UINT32_C(0x000E9B9F), UINT32_C(0x0001793C), UINT32_C(0x0038DEEF), UINT32_C(0x00281C2C), UINT32_C(0x002A3E68), UINT32_C(0x002C3A89), UINT32_C(0x00474938), UINT32_C(0x00191AE2), UINT32_C(0x00059F41), UINT32_C(0x003170A5), UINT32_C(0x007B0894), UINT32_C(0x003188B8), UINT32_C(0x0004A286), UINT32_C(0x001330A6), UINT32_C(0x000F7B22), UINT32_C(0x000CCE16), UINT32_C(0x002F2EE2), UINT32_C(0x00195174), UINT32_C(0x005D1601), UINT32_C(0x001F40E0), UINT32_C(0x00291362), UINT32_C(0x0035C7DC)}, {UINT32_C(0x000B4C31), UINT32_C(0x003B561D), UINT32_C(0x000F3B3B), UINT32_C(0x0070FA44), UINT32_C(0x0007486A), UINT32_C(0x001DF356), UINT32_C(0x001935F2), UINT32_C(0x004FB6D9), UINT32_C(0x0027D7FD), UINT32_C(0x00350DC9), UINT32_C(0x000A3F69), UINT32_C(0x00449466), UINT32_C(0x00239BA4), UINT32_C(0x0028E2F3), UINT32_C(0x0026CBC7), UINT32_C(0x00036018), UINT32_C(0x003A9DCF), UINT32_C(0x0037B528), UINT32_C(0x001E2C6E), UINT32_C(0x003F6EC0), UINT32_C(0x003FD88F), UINT32_C(0x00068ADE), UINT32_C(0x0037FCE0)}}, {{UINT32_C(0x0050000E), UINT32_C(0x001E77A7), UINT32_C(0x0024B63E), UINT32_C(0x0048CCFE), UINT32_C(0x0038B910), UINT32_C(0x0019209B), UINT32_C(0x00253B08), UINT32_C(0x005B37AF), UINT32_C(0x0004506B), UINT32_C(0x001A4B14), UINT32_C(0x000FF3BF), UINT32_C(0x00085950), UINT32_C(0x002D6373), UINT32_C(0x000CDBBD), UINT32_C(0x00090934), UINT32_C(0x004CF09F), UINT32_C(0x0027CD34), UINT32_C(0x00371F39), UINT32_C(0x001C72B6), UINT32_C(0x006D2050), UINT32_C(0x002AC578), UINT32_C(0x000FB697), UINT32_C(0x0005FF6A)}, {UINT32_C(0x00599665), UINT32_C(0x002DDA7B), UINT32_C(0x00268815), UINT32_C(0x002942AC), UINT32_C(0x001DEC68), UINT32_C(0x002DBB5F), UINT32_C(0x000C7D78), UINT32_C(0x0057F19C), UINT32_C(0x0021DFB6), UINT32_C(0x000753FB), UINT32_C(0x001EB75C), UINT32_C(0x006BB8BB), UINT32_C(0x000F62D8), UINT32_C(0x00276AD4), UINT32_C(0x0018EBC3), UINT32_C(0x00214208), UINT32_C(0x001152DD), UINT32_C(0x001897CD), UINT32_C(0x002857D4), UINT32_C(0x0042470E), UINT32_C(0x0021C7EA), UINT32_C(0x000270FA), UINT32_C(0x002E73F0)}, {UINT32_C(0x0071D30B), UINT32_C(0x002E7B13), UINT32_C(0x0033F7E5), UINT32_C(0x00026176), UINT32_C(0x0024C588), UINT32_C(0x001EA175), UINT32_C(0x003B6645), UINT32_C(0x00291861), UINT32_C(0x000ED3A0), UINT32_C(0x0002A696), UINT32_C(0x0016C658), UINT32_C(0x003C9DCA), UINT32_C(0x001224F2), UINT32_C(0x0005AAC4), UINT32_C(0x001A509B), UINT32_C(0x002E50AA), UINT32_C(0x001912EC), UINT32_C(0x0039A83F), UINT32_C(0x002EEAC7), UINT32_C(0x0039F245), UINT32_C(0x0004ABA0), UINT32_C(0x0038D048), UINT32_C(0x00088CA8)}}, {{UINT32_C(0x00381541), UINT32_C(0x00204236), UINT32_C(0x000F7F85), UINT32_C(0x006ABC1B), UINT32_C(0x00309BD4), UINT32_C(0x001A5B8A), UINT32_C(0x003193B0), UINT32_C(0x007C3DBC), UINT32_C(0x0021AA72), UINT32_C(0x0025AB66), UINT32_C(0x0027C829), UINT32_C(0x0000DCB0), UINT32_C(0x001E5740), UINT32_C(0x0027A69E), UINT32_C(0x002A0916), UINT32_C(0x003558C0), UINT32_C(0x0008DEFA), UINT32_C(0x00001D63), UINT32_C(0x00302547), UINT32_C(0x0077415F), UINT32_C(0x0017C197), UINT32_C(0x0022627F), UINT32_C(0x000599E2)}, {UINT32_C(0x004DD359), UINT32_C(0x00246A2C), UINT32_C(0x0027E508), UINT32_C(0x006A3CA3), UINT32_C(0x00378EB4), UINT32_C(0x0026BEB6), UINT32_C(0x000844C3), UINT32_C(0x0055D1C5), UINT32_C(0x000BD3A3), UINT32_C(0x00337C41), UINT32_C(0x003DE17E), UINT32_C(0x004DF9BA), UINT32_C(0x0029B7C8), UINT32_C(0x00371C33), UINT32_C(0x001BC3B2), UINT32_C(0x0052B93E), UINT32_C(0x003F84C4), UINT32_C(0x00046C2D), UINT32_C(0x00381921), UINT32_C(0x00329932), UINT32_C(0x00029014), UINT32_C(0x00195E90), UINT32_C(0x00165863)}, {UINT32_C(0x003D4CE8), UINT32_C(0x0009AEA0), UINT32_C(0x000A6139), UINT32_C(0x00626AB6), UINT32_C(0x001921AD), UINT32_C(0x001DDCC3), UINT32_C(0x0010A346), UINT32_C(0x001C0DF5), UINT32_C(0x0022458F), UINT32_C(0x0029A8D6), UINT32_C(0x0023055B), UINT32_C(0x007FBC20), UINT32_C(0x0012BD87), UINT32_C(0x00105456), UINT32_C(0x0009B655), UINT32_C(0x0061C3AD), UINT32_C(0x00029CBB), UINT32_C(0x0037EC3D), UINT32_C(0x003A6374), UINT32_C(0x00604726), UINT32_C(0x0036C983), UINT32_C(0x002FB577), UINT32_C(0x0034D612)}}, {{UINT32_C(0x002E7DCC), UINT32_C(0x000D16B4), UINT32_C(0x0024096A), UINT32_C(0x0025C077), UINT32_C(0x00092685), UINT32_C(0x0031BC93), UINT32_C(0x002F71E3), UINT32_C(0x0006DB6D), UINT32_C(0x00314D92), UINT32_C(0x0031DCE1), UINT32_C(0x0021F441), UINT32_C(0x005C93B1), UINT32_C(0x000A56D1), UINT32_C(0x0007C7F7), UINT32_C(0x003AC8AA), UINT32_C(0x004FB13F), UINT32_C(0x00382F3C), UINT32_C(0x00346287), UINT32_C(0x0010C1C3), UINT32_C(0x003EB5C9), UINT32_C(0x00287A6F), UINT32_C(0x0018779D), UINT32_C(0x00239EAB)}, {UINT32_C(0x0041FD8F), UINT32_C(0x001E6522), UINT32_C(0x0022B56D), UINT32_C(0x0025ABCD), UINT32_C(0x00306D98), UINT32_C(0x00300F6B), UINT32_C(0x001655DA), UINT32_C(0x00272687), UINT32_C(0x0006B08D), UINT32_C(0x0023B809), UINT32_C(0x00138AAF), UINT32_C(0x001DF48C), UINT32_C(0x0011F659), UINT32_C(0x0009E92A), UINT32_C(0x003B30CC), UINT32_C(0x001DAEE5), UINT32_C(0x003A3F41), UINT32_C(0x0009DF14), UINT32_C(0x00214E4F), UINT32_C(0x001A4EE1), UINT32_C(0x000AF3F8), UINT32_C(0x003B84FD), UINT32_C(0x0027CB30)}, {UINT32_C(0x003FB85E), UINT32_C(0x002A5B7E), UINT32_C(0x000B3D6C), UINT32_C(0x0010AAED), UINT32_C(0x001DCC4D), UINT32_C(0x002372C6), UINT32_C(0x002990B7), UINT32_C(0x0029FD67), UINT32_C(0x00184F9D), UINT32_C(0x00213292), UINT32_C(0x0006D4F4), UINT32_C(0x004C67DD), UINT32_C(0x00170CE7), UINT32_C(0x00279FEF), UINT32_C(0x002AF75F), UINT32_C(0x002865F8), UINT32_C(0x003DF044), UINT32_C(0x003246C4), UINT32_C(0x000BBBCD), UINT32_C(0x0070D0BC), UINT32_C(0x0016FDF4), UINT32_C(0x002E1724), UINT32_C(0x0034D526)}}, {{UINT32_C(0x0068145B), UINT32_C(0x0010E47B), UINT32_C(0x0016AFBB), UINT32_C(0x006D5CA7), UINT32_C(0x001CBDAA), UINT32_C(0x003773D2), UINT32_C(0x00376C07), UINT32_C(0x00798761), UINT32_C(0x00122C25), UINT32_C(0x0000941E), UINT32_C(0x000B8B0C), UINT32_C(0x006E3CF0), UINT32_C(0x0037C29F), UINT32_C(0x003FCFE2), UINT32_C(0x00355C91), UINT32_C(0x006B5739), UINT32_C(0x000039E2), UINT32_C(0x000A6FB6), UINT32_C(0x00368629), UINT32_C(0x00439D33), UINT32_C(0x00051B6B), UINT32_C(0x003CCB53), UINT32_C(0x0021E090)}, {UINT32_C(0x0072B0D9), UINT32_C(0x00260FBA), UINT32_C(0x000A91DA), UINT32_C(0x000248F7), UINT32_C(0x003E3B08), UINT32_C(0x00233510), UINT32_C(0x000F7A4C), UINT32_C(0x00023CD1), UINT32_C(0x003BF83E), UINT32_C(0x003F97FF), UINT32_C(0x00387ABE), UINT32_C(0x006B4171), UINT32_C(0x000D77D6), UINT32_C(0x0028D310), UINT32_C(0x001FAD93), UINT32_C(0x006D40A9), UINT32_C(0x00109960), UINT32_C(0x001C700E), UINT32_C(0x0010A5D3), UINT32_C(0x00638AE3), UINT32_C(0x002B09EB), UINT32_C(0x0005F26C), UINT32_C(0x0001E411)}, {UINT32_C(0x000E2A67), UINT32_C(0x0016A28F), UINT32_C(0x00289716), UINT32_C(0x0078F0B2), UINT32_C(0x003797DA), UINT32_C(0x00268485), UINT32_C(0x00262E41), UINT32_C(0x00241F04), UINT32_C(0x00074EC0), UINT32_C(0x000D6EAC), UINT32_C(0x001E559F), UINT32_C(0x00153E46), UINT32_C(0x002FB890), UINT32_C(0x000CA628), UINT32_C(0x002A4016), UINT32_C(0x007D6524), UINT32_C(0x001EC8D1), UINT32_C(0x00286DC0), UINT32_C(0x00157657), UINT32_C(0x0079E5B8), UINT32_C(0x0039F963), UINT32_C(0x000CE35C), UINT32_C(0x003F1219)}}, {{UINT32_C(0x0000F57B), UINT32_C(0x0009DF26), UINT32_C(0x00222FE3), UINT32_C(0x002A30BE), UINT32_C(0x00379E2F), UINT32_C(0x000AAB5F), UINT32_C(0x002DEDC7), UINT32_C(0x00530A70), UINT32_C(0x001B01FA), UINT32_C(0x003D1B31), UINT32_C(0x002AD753), UINT32_C(0x0029A2AA), UINT32_C(0x0034373F), UINT32_C(0x002D9918), UINT32_C(0x002C76D1), UINT32_C(0x002F937A), UINT32_C(0x000EB50A), UINT32_C(0x003F8781), UINT32_C(0x002C7F91), UINT32_C(0x0004D41F), UINT32_C(0x003AEC45), UINT32_C(0x00369FC0), UINT32_C(0x00013605)}, {UINT32_C(0x0054C5BA), UINT32_C(0x00376F0D), UINT32_C(0x000F2327), UINT32_C(0x00202DD7), UINT32_C(0x0022B2CE), UINT32_C(0x003D8E25), UINT32_C(0x0030ED93), UINT32_C(0x005E7D9A), UINT32_C(0x00359051), UINT32_C(0x00330484), UINT32_C(0x001F4DA9), UINT32_C(0x000D5A03), UINT32_C(0x003772EE), UINT32_C(0x001FDD99), UINT32_C(0x00190D1C), UINT32_C(0x0064DE66), UINT32_C(0x00112698), UINT32_C(0x003D9DDF), UINT32_C(0x003B8E10), UINT32_C(0x000670E8), UINT32_C(0x001E9A00), UINT32_C(0x000D2726), UINT32_C(0x00344016)}, {UINT32_C(0x001EAEC6), UINT32_C(0x000A257F), UINT32_C(0x00368552), UINT32_C(0x00569140), UINT32_C(0x00240DF0), UINT32_C(0x002BE21B), UINT32_C(0x000AC85E), UINT32_C(0x0035C3D1), UINT32_C(0x0016FBDE), UINT32_C(0x0024ACF2), UINT32_C(0x003AA3F7), UINT32_C(0x006A54CF), UINT32_C(0x002AAD78), UINT32_C(0x003BE77F), UINT32_C(0x000CA38B), UINT32_C(0x0053D6D6), UINT32_C(0x00238462), UINT32_C(0x001E2258), UINT32_C(0x002E8075), UINT32_C(0x005C588D), UINT32_C(0x001BE563), UINT32_C(0x00362AF4), UINT32_C(0x000E1465)}}, {{UINT32_C(0x00544BA0), UINT32_C(0x00103EEE), UINT32_C(0x0012ACCC), UINT32_C(0x0004634F), UINT32_C(0x00326BCC), UINT32_C(0x00186BD9), UINT32_C(0x0001D886), UINT32_C(0x0006E9CD), UINT32_C(0x0028A635), UINT32_C(0x0018E4A4), UINT32_C(0x002FA643), UINT32_C(0x000C1175), UINT32_C(0x0039E179), UINT32_C(0x00255905), UINT32_C(0x000E38AE), UINT32_C(0x00075E7F), UINT32_C(0x003F2DF2), UINT32_C(0x000BF618), UINT32_C(0x0038EDDB), UINT32_C(0x003D531B), UINT32_C(0x00343EB7), UINT32_C(0x001D10D6), UINT32_C(0x0003039D)}, {UINT32_C(0x007286CB), UINT32_C(0x00262870), UINT32_C(0x00087C21), UINT32_C(0x0015F41E), UINT32_C(0x002D96DA), UINT32_C(0x0004A9E5), UINT32_C(0x00010055), UINT32_C(0x0063A621), UINT32_C(0x000E9F00), UINT32_C(0x000EE347), UINT32_C(0x0026AF40), UINT32_C(0x003E094E), UINT32_C(0x003B2228), UINT32_C(0x001A3CC1), UINT32_C(0x0030A53B), UINT32_C(0x00011EE4), UINT32_C(0x00218ED0), UINT32_C(0x0007142C), UINT32_C(0x00391F95), UINT32_C(0x002BB1FF), UINT32_C(0x001AA23A), UINT32_C(0x003C5218), UINT32_C(0x002F08BB)}, {UINT32_C(0x001EB5AC), UINT32_C(0x003F1C36), UINT32_C(0x001FD7A7), UINT32_C(0x00755608), UINT32_C(0x003353AE), UINT32_C(0x003D6966), UINT32_C(0x0017FDC3), UINT32_C(0x0000F856), UINT32_C(0x0009B134), UINT32_C(0x000C3D1A), UINT32_C(0x001E06FC), UINT32_C(0x00745D11), UINT32_C(0x003761CD), UINT32_C(0x0021FF5D), UINT32_C(0x0037240E), UINT32_C(0x003022F6), UINT32_C(0x0013DC00), UINT32_C(0x00308386), UINT32_C(0x00071C5F), UINT32_C(0x0010C125), UINT32_C(0x000192B4), UINT32_C(0x0019FF02), UINT32_C(0x003B2385)}}, {{UINT32_C(0x00417D4C), UINT32_C(0x003AECD5), UINT32_C(0x002E5B54), UINT32_C(0x00243DAE), UINT32_C(0x0003B5C3), UINT32_C(0x00242612), UINT32_C(0x001E0962), UINT32_C(0x004AC9D7), UINT32_C(0x0033B66D), UINT32_C(0x0013DC44), UINT32_C(0x0017552D), UINT32_C(0x006C3A48), UINT32_C(0x0036914E), UINT32_C(0x001C9CFD), UINT32_C(0x000862A1), UINT32_C(0x00260590), UINT32_C(0x002BEC73), UINT32_C(0x00263AA5), UINT32_C(0x0013BDC2), UINT32_C(0x007EAFCE), UINT32_C(0x001A9EA3), UINT32_C(0x000A9066), UINT32_C(0x00024A7F)}, {UINT32_C(0x007D40F1), UINT32_C(0x002268CC), UINT32_C(0x002A7B4D), UINT32_C(0x0017B592), UINT32_C(0x001B785F), UINT32_C(0x002CEBBB), UINT32_C(0x003FD10A), UINT32_C(0x0033D10F), UINT32_C(0x0005FF3D), UINT32_C(0x0002C3D3), UINT32_C(0x00171A74), UINT32_C(0x005E8507), UINT32_C(0x002D6928), UINT32_C(0x0007621E), UINT32_C(0x003F547B), UINT32_C(0x005E087B), UINT32_C(0x000FFDD4), UINT32_C(0x0036FEE1), UINT32_C(0x0028A970), UINT32_C(0x0049A969), UINT32_C(0x0008D33F), UINT32_C(0x0020BACA), UINT32_C(0x000F9E55)}, {UINT32_C(0x0001E00F), UINT32_C(0x003DC07C), UINT32_C(0x001BA800), UINT32_C(0x004AEE42), UINT32_C(0x0013E66A), UINT32_C(0x001C61D4), UINT32_C(0x00365B36), UINT32_C(0x000D2885), UINT32_C(0x00046EFC), UINT32_C(0x00088FB6), UINT32_C(0x0007F83B), UINT32_C(0x003E8670), UINT32_C(0x001539ED), UINT32_C(0x0039945D), UINT32_C(0x00052181), UINT32_C(0x00150E04), UINT32_C(0x003F8361), UINT32_C(0x0033D590), UINT32_C(0x002A7678), UINT32_C(0x001A0E6A), UINT32_C(0x0017FB3A), UINT32_C(0x0001B263), UINT32_C(0x003FB8CC)}}, {{UINT32_C(0x00441491), UINT32_C(0x000F0A65), UINT32_C(0x001689D6), UINT32_C(0x001482F7), UINT32_C(0x00147BF7), UINT32_C(0x003D0042), UINT32_C(0x002844D1), UINT32_C(0x005FD1B5), UINT32_C(0x00200A97), UINT32_C(0x00117C63), UINT32_C(0x003D90B5), UINT32_C(0x001D123E), UINT32_C(0x00044FA4), UINT32_C(0x003F2318), UINT32_C(0x0036FA13), UINT32_C(0x005A1AE5), UINT32_C(0x000811CA), UINT32_C(0x001E59EF), UINT32_C(0x0034D752), UINT32_C(0x00564B68), UINT32_C(0x001118FF), UINT32_C(0x0039B3EA), UINT32_C(0x0014D131)}, {UINT32_C(0x0013C497), UINT32_C(0x003C1203), UINT32_C(0x0017B8C9), UINT32_C(0x005F5C63), UINT32_C(0x001C40D9), UINT32_C(0x00337A68), UINT32_C(0x00200255), UINT32_C(0x007B6F12), UINT32_C(0x001F0C0A), UINT32_C(0x000D6663), UINT32_C(0x001F59C2), UINT32_C(0x00154C68), UINT32_C(0x00345E93), UINT32_C(0x003D89D5), UINT32_C(0x00342AEC), UINT32_C(0x006FD7F9), UINT32_C(0x0015325A), UINT32_C(0x001C82FE), UINT32_C(0x0032F5E8), UINT32_C(0x00078F1F), UINT32_C(0x0025FC9A), UINT32_C(0x003196C7), UINT32_C(0x0039E007)}, {UINT32_C(0x0039A6FC), UINT32_C(0x0011CEAB), UINT32_C(0x0012DC99), UINT32_C(0x005819B9), UINT32_C(0x0018EB3D), UINT32_C(0x00219D0B), UINT32_C(0x001627FA), UINT32_C(0x003FFC71), UINT32_C(0x000E2B28), UINT32_C(0x000516D9), UINT32_C(0x003B039D), UINT32_C(0x001E1B28), UINT32_C(0x00179D77), UINT32_C(0x002E37D9), UINT32_C(0x0003A1C1), UINT32_C(0x000D735B), UINT32_C(0x00360858), UINT32_C(0x0008AFC3), UINT32_C(0x0016FD4C), UINT32_C(0x000289D6), UINT32_C(0x001E9558), UINT32_C(0x000AF3EA), UINT32_C(0x003D50FE)}}, {{UINT32_C(0x0053D15A), UINT32_C(0x002C2F83), UINT32_C(0x00170ABE), UINT32_C(0x00712A78), UINT32_C(0x00103D0A), UINT32_C(0x0005BC7E), UINT32_C(0x002462B7), UINT32_C(0x00116FB3), UINT32_C(0x0032D4A0), UINT32_C(0x003CCDA0), UINT32_C(0x00088A2E), UINT32_C(0x00510F79), UINT32_C(0x00293310), UINT32_C(0x001D649F), UINT32_C(0x00315518), UINT32_C(0x002689D7), UINT32_C(0x00324D85), UINT32_C(0x00200963), UINT32_C(0x00086C95), UINT32_C(0x000B31F5), UINT32_C(0x0013C26E), UINT32_C(0x0003A95F), UINT32_C(0x0036130B)}, {UINT32_C(0x0011ED3F), UINT32_C(0x0022E8CD), UINT32_C(0x000AF23D), UINT32_C(0x000A28B1), UINT32_C(0x001C1B53), UINT32_C(0x0004BD1F), UINT32_C(0x000B0909), UINT32_C(0x006FD7AA), UINT32_C(0x001BA416), UINT32_C(0x0003F26B), UINT32_C(0x00305459), UINT32_C(0x0074C3EC), UINT32_C(0x00287773), UINT32_C(0x0034CC74), UINT32_C(0x002D85ED), UINT32_C(0x005C853F), UINT32_C(0x00049BB2), UINT32_C(0x000DF4CA), UINT32_C(0x0016E02A), UINT32_C(0x004D746D), UINT32_C(0x000B5669), UINT32_C(0x0011DAD1), UINT32_C(0x0016A410)}, {UINT32_C(0x00112679), UINT32_C(0x002ADF1B), UINT32_C(0x0008BDEA), UINT32_C(0x007D441A), UINT32_C(0x0037A3DB), UINT32_C(0x0008035D), UINT32_C(0x001D18DE), UINT32_C(0x00432D9E), UINT32_C(0x00217C8D), UINT32_C(0x0034B1CC), UINT32_C(0x00347E03), UINT32_C(0x007CEF1A), UINT32_C(0x003CA8B5), UINT32_C(0x000B5855), UINT32_C(0x0034A8BC), UINT32_C(0x003867CB), UINT32_C(0x00169433), UINT32_C(0x00134C66), UINT32_C(0x0011D943), UINT32_C(0x0061B8E4), UINT32_C(0x00383EDC), UINT32_C(0x00274AAD), UINT32_C(0x000AE283)}}, }}; /*- * Q := 2P, both projective, Q and P same pointers OK * Autogenerated: op3/dbl_proj_ed_eone.op3 * https://www.hyperelliptic.org/EFD/g1p/auto-code/twisted/extended-1/doubling/dbl-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_double(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ /* set pointers for Edwards curve arith */ const limb_t *X = P->X; const limb_t *Y = P->Y; const limb_t *Z = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(t0, X); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(t1, Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(t2, Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(t3, t2, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(X3, X, Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(Y3, X3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(T3, Y3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(Z3, T3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(Y3, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t2, Y3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t3, t0, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, Z3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, Z3, t3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Z3, t2, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, Y3, t3); } /*- * R := Q + P where R and Q are projective, P affine. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_mixed_ed_eone.op3 * https://hyperelliptic.org/EFD/g1p/auto-code/twisted/extended/addition/madd-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_add_mixed(pt_prj_t *R, const pt_prj_t *Q, const pt_aff_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ const limb_t *d = const_d; /* set pointers for Edwards curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *T1 = Q->T; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *T2 = P->T; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *T3 = R->T; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t2, d, T2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t2, T1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(X3, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(Y3, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t3, T3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(T3, t3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(t3, Z1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(Z3, Z1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t1, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, T3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, t3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, T3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Z3, Z3, t3); } /*- * R := Q + P all projective. * R and Q same pointers OK * R and P same pointers not OK * Autogenerated: op3/add_proj_ed_eone.op3 * https://hyperelliptic.org/EFD/g1p/auto-code/twisted/extended/addition/add-2008-hwcd.op3 * ASSERT: e = 1 */ static void point_add_proj(pt_prj_t *R, const pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0, t1, t2, t3; /* constants */ const limb_t *d = const_d; /* set pointers for Edwards curve arith */ const limb_t *X1 = Q->X; const limb_t *Y1 = Q->Y; const limb_t *T1 = Q->T; const limb_t *Z1 = Q->Z; const limb_t *X2 = P->X; const limb_t *Y2 = P->Y; const limb_t *T2 = P->T; const limb_t *Z2 = P->Z; limb_t *X3 = R->X; limb_t *Y3 = R->Y; limb_t *T3 = R->T; limb_t *Z3 = R->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t0, X1, X2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t1, Y1, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t2, d, T2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t2, T1, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t3, Z1, Z2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(X3, X1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(Y3, X2, Y2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(Z3, T3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(T3, Z3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(Z3, t3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(t3, t3, t2); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t1, t1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, T3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, t3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, T3, t1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Z3, Z3, t3); } /*- * from P projective Edwards to Q projective legacy: Q=P OK * Autogenerated: op3/edwards2legacy_gost.op3 * https://tools.ietf.org/html/rfc7836#section-5.2 */ static void point_edwards2legacy(pt_prj_t *Q, const pt_prj_t *P) { /* temporary variables */ fe_t t0; /* constants */ const limb_t *S = const_S; const limb_t *T = const_T; const limb_t *X1 = P->X; const limb_t *Y1 = P->Y; const limb_t *Z1 = P->Z; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(T3, Z1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(t0, Z1, Y1); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, S, T3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, Z1, T3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Z3, X1, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(t0, t0, T); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(t0, T3, t0); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, X1, t0); } /*- * from P affine legacy to Q projective Edwards: Q=P not OK * Autogenerated: op3/legacy2edwards_gost.op3 * https://tools.ietf.org/html/rfc7836#section-5.2 */ static void point_legacy2edwards(pt_prj_t *Q, const pt_aff_t *P) { /* constants */ const limb_t *S = const_S; const limb_t *T = const_T; const limb_t *X1 = P->X; const limb_t *Y1 = P->Y; limb_t *X3 = Q->X; limb_t *Y3 = Q->Y; limb_t *T3 = Q->T; limb_t *Z3 = Q->Z; /* the curve arith formula */ fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(T3, X1, T); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_add(Y3, T3, S); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, T3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Z3, Y1, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_sub(T3, T3, S); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, Y1, T3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(T3, X3, Y3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(X3, X3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(Y3, Y3, Z3); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_square(Z3, Z3); } /* constants */ #define RADIX 5 #define DRADIX (1 << RADIX) #define DRADIX_WNAF ((DRADIX) << 1) /*- * precomp for wnaf scalar multiplication: * precomp[0] = 1P * precomp[1] = 3P * precomp[2] = 5P * precomp[3] = 7P * precomp[4] = 9P * ... */ static void precomp_wnaf(pt_prj_t precomp[DRADIX / 2], const pt_aff_t *P) { int i; /* move from legacy affine to Edwards projective */ point_legacy2edwards(&precomp[0], P); point_double(&precomp[DRADIX / 2 - 1], &precomp[0]); for (i = 1; i < DRADIX / 2; i++) point_add_proj(&precomp[i], &precomp[DRADIX / 2 - 1], &precomp[i - 1]); } /* fetch a scalar bit */ static int scalar_get_bit(const unsigned char in[64], int idx) { int widx, rshift; widx = idx >> 3; rshift = idx & 0x7; if (idx < 0 || widx >= 64) return 0; return (in[widx] >> rshift) & 0x1; } /*- * Compute "regular" wnaf representation of a scalar. * See "Exponent Recoding and Regular Exponentiation Algorithms", * Tunstall et al., AfricaCrypt 2009, Alg 6. * It forces an odd scalar and outputs digits in * {\pm 1, \pm 3, \pm 5, \pm 7, \pm 9, ...} * i.e. signed odd digits with _no zeroes_ -- that makes it "regular". */ static void scalar_rwnaf(int8_t out[103], const unsigned char in[64]) { int i; int8_t window, d; window = (in[0] & (DRADIX_WNAF - 1)) | 1; for (i = 0; i < 102; i++) { d = (window & (DRADIX_WNAF - 1)) - DRADIX; out[i] = d; window = (window - d) >> RADIX; window += scalar_get_bit(in, (i + 1) * RADIX + 1) << 1; window += scalar_get_bit(in, (i + 1) * RADIX + 2) << 2; window += scalar_get_bit(in, (i + 1) * RADIX + 3) << 3; window += scalar_get_bit(in, (i + 1) * RADIX + 4) << 4; window += scalar_get_bit(in, (i + 1) * RADIX + 5) << 5; } out[i] = window; } /*- * Compute "textbook" wnaf representation of a scalar. * NB: not constant time */ static void scalar_wnaf(int8_t out[513], const unsigned char in[64]) { int i; int8_t window, d; window = in[0] & (DRADIX_WNAF - 1); for (i = 0; i < 513; i++) { d = 0; if ((window & 1) && ((d = window & (DRADIX_WNAF - 1)) & DRADIX)) d -= DRADIX_WNAF; out[i] = d; window = (window - d) >> 1; window += scalar_get_bit(in, i + 1 + RADIX) << RADIX; } } /*- * Simultaneous scalar multiplication: interleaved "textbook" wnaf. * NB: not constant time */ static void var_smul_wnaf_two(pt_aff_t *out, const unsigned char a[64], const unsigned char b[64], const pt_aff_t *P) { int i, d, is_neg, is_inf = 1, flipped = 0; int8_t anaf[513] = {0}; int8_t bnaf[513] = {0}; pt_prj_t Q = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_wnaf(anaf, a); scalar_wnaf(bnaf, b); for (i = 512; i >= 0; i--) { if (!is_inf) point_double(&Q, &Q); if ((d = bnaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.T, Q.T); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &precomp[d].X); fe_copy(Q.Y, &precomp[d].Y); fe_copy(Q.T, &precomp[d].T); fe_copy(Q.Z, &precomp[d].Z); is_inf = 0; } else point_add_proj(&Q, &Q, &precomp[d]); } if ((d = anaf[i])) { if ((is_neg = d < 0) != flipped) { fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.T, Q.T); flipped ^= 1; } d = (is_neg) ? (-d - 1) >> 1 : (d - 1) >> 1; if (is_inf) { /* initialize accumulator */ fe_copy(Q.X, &lut_cmb[0][d].X); fe_copy(Q.Y, &lut_cmb[0][d].Y); fe_copy(Q.T, &lut_cmb[0][d].T); fe_copy(Q.Z, const_one); is_inf = 0; } else point_add_mixed(&Q, &Q, &lut_cmb[0][d]); } } if (is_inf) { /* initialize accumulator to inf: all-zero scalars */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.T); fe_copy(Q.Z, const_one); } if (flipped) { /* correct sign */ fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(Q.T, Q.T); } /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetC_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Variable point scalar multiplication with "regular" wnaf. */ static void var_smul_rwnaf(pt_aff_t *out, const unsigned char scalar[64], const pt_aff_t *P) { int i, j, d, diff, is_neg; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, lut = {0}; pt_prj_t precomp[DRADIX / 2]; precomp_wnaf(precomp, P); scalar_rwnaf(rnaf, scalar); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif /* initialize accumulator to high digit */ d = (rnaf[102] - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.X, diff, Q.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Y, diff, Q.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.T, diff, Q.T, precomp[j].T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Z, diff, Q.Z, precomp[j].Z); } for (i = 101; i >= 0; i--) { for (j = 0; j < RADIX; j++) point_double(&Q, &Q); d = rnaf[i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (j = 0; j < DRADIX / 2; j++) { diff = (1 - (-(d ^ j) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.X, diff, lut.X, precomp[j].X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.Y, diff, lut.Y, precomp[j].Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.T, diff, lut.T, precomp[j].T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.Z, diff, lut.Z, precomp[j].Z); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(out->X, lut.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(out->T, lut.T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(lut.X, is_neg, lut.X, out->X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(lut.T, is_neg, lut.T, out->T); point_add_proj(&Q, &Q, &lut); } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(lut.X, precomp[0].X); fe_copy(lut.Y, precomp[0].Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(lut.T, precomp[0].T); fe_copy(lut.Z, precomp[0].Z); point_add_proj(&lut, &lut, &Q); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.X, scalar[0] & 1, lut.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Y, scalar[0] & 1, lut.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.T, scalar[0] & 1, lut.T, Q.T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Z, scalar[0] & 1, lut.Z, Q.Z); point_double(&Q, &Q); point_double(&Q, &Q); /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetC_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Fixed scalar multiplication: comb with interleaving. */ static void fixed_smul_cmb(pt_aff_t *out, const unsigned char scalar[64]) { int i, j, k, d, diff, is_neg = 0; int8_t rnaf[103] = {0}; pt_prj_t Q = {0}, R = {0}; pt_aff_t lut = {0}; scalar_rwnaf(rnaf, scalar); /* initalize accumulator to inf */ fe_set_zero(Q.X); fe_copy(Q.Y, const_one); fe_set_zero(Q.T); fe_copy(Q.Z, const_one); #if defined(_MSC_VER) /* result still unsigned: yes we know */ #pragma warning(push) #pragma warning(disable : 4146) #endif for (i = 17; i >= 0; i--) { for (j = 0; i != 17 && j < RADIX; j++) point_double(&Q, &Q); for (j = 0; j < 7; j++) { if (j * 18 + i > 102) continue; d = rnaf[j * 18 + i]; /* is_neg = (d < 0) ? 1 : 0 */ is_neg = (d >> (8 * sizeof(int) - 1)) & 1; /* d = abs(d) */ d = (d ^ -is_neg) + is_neg; d = (d - 1) >> 1; for (k = 0; k < DRADIX / 2; k++) { diff = (1 - (-(d ^ k) >> (8 * sizeof(int) - 1))) & 1; fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.X, diff, lut.X, lut_cmb[j][k].X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.Y, diff, lut.Y, lut_cmb[j][k].Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz( lut.T, diff, lut.T, lut_cmb[j][k].T); } /* negate lut point if digit is negative */ fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(out->X, lut.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(out->T, lut.T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(lut.X, is_neg, lut.X, out->X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(lut.T, is_neg, lut.T, out->T); point_add_mixed(&Q, &Q, &lut); } } #if defined(_MSC_VER) #pragma warning(pop) #endif /* conditionally subtract P if the scalar was even */ fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(lut.X, lut_cmb[0][0].X); fe_copy(lut.Y, lut_cmb[0][0].Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_opp(lut.T, lut_cmb[0][0].T); point_add_mixed(&R, &Q, &lut); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.X, scalar[0] & 1, R.X, Q.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Y, scalar[0] & 1, R.Y, Q.Y); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.T, scalar[0] & 1, R.T, Q.T); fiat_id_tc26_gost_3410_2012_512_paramSetC_selectznz(Q.Z, scalar[0] & 1, R.Z, Q.Z); /* move from Edwards projective to legacy projective */ point_edwards2legacy(&Q, &Q); /* convert to affine -- NB depends on coordinate system */ fiat_id_tc26_gost_3410_2012_512_paramSetC_inv(Q.Z, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->X, Q.X, Q.Z); fiat_id_tc26_gost_3410_2012_512_paramSetC_carry_mul(out->Y, Q.Y, Q.Z); } /*- * Wrapper: simultaneous scalar mutiplication. * outx, outy := a * G + b * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul_two(unsigned char outx[64], unsigned char outy[64], const unsigned char a[64], const unsigned char b[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes(P.Y, iny); /* simultaneous scalar multiplication */ var_smul_wnaf_two(&P, a, b, &P); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outy, P.Y); } /*- * Wrapper: fixed scalar mutiplication. * outx, outy := scalar * G * Everything is LE byte ordering. */ static void point_mul_g(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64]) { pt_aff_t P; /* fixed scmul function */ fixed_smul_cmb(&P, scalar); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outy, P.Y); } /*- * Wrapper: variable point scalar mutiplication. * outx, outy := scalar * P * where P = (inx, iny). * Everything is LE byte ordering. */ static void point_mul(unsigned char outx[64], unsigned char outy[64], const unsigned char scalar[64], const unsigned char inx[64], const unsigned char iny[64]) { pt_aff_t P; fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes(P.X, inx); fiat_id_tc26_gost_3410_2012_512_paramSetC_from_bytes(P.Y, iny); /* var scmul function */ var_smul_rwnaf(&P, scalar, &P); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outx, P.X); fiat_id_tc26_gost_3410_2012_512_paramSetC_to_bytes(outy, P.Y); } #include /* the zero field element */ static const unsigned char const_zb[64] = {0}; /*- * An OpenSSL wrapper for simultaneous scalar multiplication. * r := n * G + m * q */ int point_mul_two_id_tc26_gost_3410_2012_512_paramSetC( const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(n, b_n, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the simultaneous scalar multiplication */ point_mul_two(b_x, b_y, b_n, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for variable point scalar multiplication. * r := m * q */ int point_mul_id_tc26_gost_3410_2012_512_paramSetC(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_m[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL /* pull out coords as bytes */ || !EC_POINT_get_affine_coordinates(group, q, x, y, ctx) || BN_bn2lebinpad(x, b_x, 64) != 64 || BN_bn2lebinpad(y, b_y, 64) != 64 || BN_bn2lebinpad(m, b_m, 64) != 64) goto err; /* do the variable scalar multiplication */ point_mul(b_x, b_y, b_m, b_x, b_y); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } /*- * An OpenSSL wrapper for fixed scalar multiplication. * r := n * G */ int point_mul_g_id_tc26_gost_3410_2012_512_paramSetC(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx) { int ret = 0; unsigned char b_x[64]; unsigned char b_y[64]; unsigned char b_n[64]; BIGNUM *x = NULL, *y = NULL; BN_CTX_start(ctx); x = BN_CTX_get(ctx); if ((y = BN_CTX_get(ctx)) == NULL || BN_bn2lebinpad(n, b_n, 64) != 64) goto err; /* do the fixed scalar multiplication */ point_mul_g(b_x, b_y, b_n); /* check for infinity */ if (CRYPTO_memcmp(const_zb, b_x, 64) == 0 && CRYPTO_memcmp(const_zb, b_y, 64) == 0) { if (!EC_POINT_set_to_infinity(group, r)) goto err; } else { /* otherwise, pack the bytes into the result */ if (BN_lebin2bn(b_x, 64, x) == NULL || BN_lebin2bn(b_y, 64, y) == NULL || !EC_POINT_set_affine_coordinates(group, r, x, y, ctx)) goto err; } ret = 1; err: BN_CTX_end(ctx); return ret; } #endif /* __SIZEOF_INT128__ */ libengine-gost-openssl-3.0.2/etalon/000077500000000000000000000000001446070765000173765ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/etalon/M1000066400000000000000000000000771446070765000176020ustar00rootroot00000000000000012345678901234567890123456789012345678901234567890123456789012libengine-gost-openssl-3.0.2/etalon/M2000066400000000000000000000001101446070765000175670ustar00rootroot00000000000000Ņå âåōđč, Ņōđčáîæč âíķöč, âåūōú ņ ėîđ˙ ņōđåëāėč íā õđāáđû˙ īëúęû Čãîđåâûlibengine-gost-openssl-3.0.2/etalon/M3000066400000000000000000000000001446070765000175660ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/etalon/M4000066400000000000000000000001001446070765000175700ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/etalon/M5000066400000000000000000000001001446070765000175710ustar00rootroot00000000000000123456789012345678901234567890 123456789012345678901234567890 libengine-gost-openssl-3.0.2/etalon/M6000066400000000000000000000003001446070765000175740ustar00rootroot00000000000000123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 123456789012345678901234567890 libengine-gost-openssl-3.0.2/etalon/carry000066400000000000000000000002001446070765000204310ustar00rootroot00000000000000îîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîlibengine-gost-openssl-3.0.2/etalon/dgst.result000066400000000000000000000035071446070765000216040ustar00rootroot00000000000000md_gost12_512(M1)= 1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48 md_gost12_512(M2)= 1e88e62226bfca6f9994f1f2d51569e0daf8475a3b0fe61a5300eee46d961376035fe83549ada2b8620fcd7c496ce5b33f0cb9dddc2b6460143b03dabac9fb28 md_gost12_512(M3)= 8e945da209aa869f0455928529bcae4679e9873ab707b55315f56ceb98bef0a7362f715528356ee83cda5f2aac4c6ad2ba3a715c1bcd81cb8e9f90bf4c1c1a8a md_gost12_512(M4)= b0fd29ac1b0df441769ff3fdb8dc564df67721d6ac06fb28ceffb7bbaa7948c6c014ac999235b58cb26fb60fb112a145d7b4ade9ae566bf2611402c552d20db7 md_gost12_512(M5)= 363b449ec81ae40b3a407b125c3b1c2b768b50496bcb5f690b89e9007b06e4084182ed45d4072a67fec9d3421dab013da2aabc1d6528e8e775aec7b3457ac675 md_gost12_512(M6)= 8781dfc81d2db6a41d1857f3230b3ffe2bda574273ea1947189aaa5468470df1c4b374b1a2b56e59d11d213fea57e3514543b0ced9b20e553ae66425ec909cfd md_gost12_512(M7)= 03e12ae816c7f794929b7550781d22efc7bc724fd70e295f3123d157c4d577fdc325943ef2b999cc43205dc323fa930bddc60d44663d76844b779fd36aa89de3 md_gost12_512(carry)= 8b06f41e59907d9636e892caf5942fcdfb71fa31169a5e70f0edb873664df41c2cce6e06dc6755d15a61cdeb92bd607cc4aaca6732bf3568a23a210dd520fd41 md_gost12_256(M1)= 9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500 md_gost12_256(M2)= 9dd2fe4e90409e5da87f53976d7405b0c0cac628fc669a741d50063c557e8f50 md_gost12_256(M3)= 3f539a213e97c802cc229d474c6aa32a825a360b2a933a949fd925208d9ce1bb md_gost12_256(M4)= df1fda9ce83191390537358031db2ecaa6aa54cd0eda241dc107105e13636b95 md_gost12_256(M5)= f0a557f6a04a90ab1811c1b6e9b078e4163b74037c6cf59f52444a37f48e11d8 md_gost12_256(M6)= 2f4f651fe88fea46ec6f2223728d8dff3968893558ef00a310c23e7d1923ba0c md_gost12_256(M7)= 633b567983d60243837715e56cc52443ffff9824170ad60b613b2dd6fabf2f40 md_gost12_256(carry)= 81bb632fa31fcc38b4c379a662dbc58b9bed83f50d3a1b2ce7271ab02d25babb libengine-gost-openssl-3.0.2/etalon/gh.dat000066400000000000000000000001001446070765000204550ustar00rootroot00000000000000"3DUfw˙îŨĖģĒ™ˆ"3DUfwˆ™ĒģĖî˙ "3DUfwˆ™ĒģĖî˙ "3DUfwˆ™ĒģĖî˙ libengine-gost-openssl-3.0.2/etalon/mac.txt000066400000000000000000000004131446070765000206750ustar00rootroot00000000000000openssl dgst -mac magma-mac -macopt hexkey:ffeeddccbbaa99887766554433221100f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff magma.dat 154e7210 openssl dgst -mac grasshopper-mac -macopt hexkey:8899aabbccddeeff0011223344556677fedcba98765432100123456789abcdef gh.dat 336f4d296059fbe3 libengine-gost-openssl-3.0.2/etalon/magma.dat000066400000000000000000000000401446070765000211440ustar00rootroot00000000000000’Ūđk< YÛTĮø J˜û.g¨L‰@›ĩ~Alibengine-gost-openssl-3.0.2/etalon/make4Gb000077500000000000000000000006461446070765000206040ustar00rootroot00000000000000cat M5 M6 > tmp1 cat tmp1 tmp1 tmp1 tmp1 > tmp2 cat tmp2 tmp2 tmp2 tmp2 > tmp1 cat tmp1 tmp1 tmp1 tmp1 > tmp2 cat tmp2 tmp2 tmp2 tmp2 > tmp1 cat tmp1 tmp1 tmp1 tmp1 > tmp2 cat tmp2 tmp2 tmp2 tmp2 > tmp1 cat tmp1 tmp1 tmp1 tmp1 > tmp2 cat tmp2 tmp2 tmp2 tmp2 > tmp1 cat tmp1 tmp1 tmp1 tmp1 > tmp2 cat tmp2 tmp2 tmp2 tmp2 > tmp1 cat tmp1 tmp1 tmp1 tmp1 > tmp2 cat tmp2 tmp2 tmp2 tmp2 > tmp1 cat M2 tmp1 > M7 rm -f tmp1 tmp2 libengine-gost-openssl-3.0.2/example.conf000066400000000000000000000003001446070765000204070ustar00rootroot00000000000000openssl_conf = openssl_def [openssl_def] engines = engine_section [engine_section] gost = gost_section [gost_section] engine_id = gost dynamic_path = ./bin/gost.so default_algorithms = ALL libengine-gost-openssl-3.0.2/getopt.h000066400000000000000000000440751446070765000176010ustar00rootroot00000000000000#ifndef __GETOPT_H__ /** * DISCLAIMER * This file is part of the mingw-w64 runtime package. * * The mingw-w64 runtime package and its code is distributed in the hope that it * will be useful but WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESSED OR * IMPLIED ARE HEREBY DISCLAIMED. This includes but is not limited to * warranties of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. */ /* * Copyright (c) 2002 Todd C. Miller * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Sponsored in part by the Defense Advanced Research Projects * Agency (DARPA) and Air Force Research Laboratory, Air Force * Materiel Command, USAF, under agreement number F39502-99-1-0512. */ /*- * Copyright (c) 2000 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Dieter Baron and Thomas Klausner. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ #pragma warning(disable:4996) #define __GETOPT_H__ /* All the headers include this file. */ #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif #define REPLACE_GETOPT /* use this getopt as the system getopt(3) */ #ifdef REPLACE_GETOPT int opterr = 1; /* if error message should be printed */ int optind = 1; /* index into parent argv vector */ int optopt = '?'; /* character checked for validity */ #undef optreset /* see getopt.h */ #define optreset __mingw_optreset int optreset; /* reset getopt */ char *optarg; /* argument associated with option */ #endif //extern int optind; /* index of first non-option in argv */ //extern int optopt; /* single option character, as parsed */ //extern int opterr; /* flag to enable built-in diagnostics... */ // /* (user may set to zero, to suppress) */ // //extern char *optarg; /* pointer to argument of current option */ #define PRINT_ERROR ((opterr) && (*options != ':')) #define FLAG_PERMUTE 0x01 /* permute non-options to the end of argv */ #define FLAG_ALLARGS 0x02 /* treat non-options as args to option "-1" */ #define FLAG_LONGONLY 0x04 /* operate as getopt_long_only */ /* return values */ #define BADCH (int)'?' #define BADARG ((*options == ':') ? (int)':' : (int)'?') #define INORDER (int)1 #ifndef __CYGWIN__ #define __progname __argv[0] #else extern char __declspec(dllimport) *__progname; #endif #ifdef __CYGWIN__ static char EMSG[] = ""; #else #define EMSG "" #endif static int getopt_internal(int, char * const *, const char *, const struct option *, int *, int); static int parse_long_options(char * const *, const char *, const struct option *, int *, int); static int gcd(int, int); static void permute_args(int, int, int, char * const *); static char *place = EMSG; /* option letter processing */ /* XXX: set optreset to 1 rather than these two */ static int nonopt_start = -1; /* first non option argument (for permute) */ static int nonopt_end = -1; /* first option after non options (for permute) */ /* Error messages */ static const char recargchar[] = "option requires an argument -- %c"; static const char recargstring[] = "option requires an argument -- %s"; static const char ambig[] = "ambiguous option -- %.*s"; static const char noarg[] = "option doesn't take an argument -- %.*s"; static const char illoptchar[] = "unknown option -- %c"; static const char illoptstring[] = "unknown option -- %s"; static void _vwarnx(const char *fmt,va_list ap) { (void)fprintf(stderr,"%s: ",__progname); if (fmt != NULL) (void)vfprintf(stderr,fmt,ap); (void)fprintf(stderr,"\n"); } static void warnx(const char *fmt,...) { va_list ap; va_start(ap,fmt); _vwarnx(fmt,ap); va_end(ap); } /* * Compute the greatest common divisor of a and b. */ static int gcd(int a, int b) { int c; c = a % b; while (c != 0) { a = b; b = c; c = a % b; } return (b); } /* * Exchange the block from nonopt_start to nonopt_end with the block * from nonopt_end to opt_end (keeping the same order of arguments * in each block). */ static void permute_args(int panonopt_start, int panonopt_end, int opt_end, char * const *nargv) { int cyclelen, i, j, ncycle, nnonopts, nopts; char *swap; /* * compute lengths of blocks and number and size of cycles */ nnonopts = panonopt_end - panonopt_start; nopts = opt_end - panonopt_end; ncycle = gcd(nnonopts, nopts); cyclelen = (opt_end - panonopt_start) / ncycle; for (i = 0; i < ncycle; i++) { int cstart = panonopt_end+i; int pos = cstart; for (j = 0; j < cyclelen; j++) { if (pos >= panonopt_end) pos -= nnonopts; else pos += nopts; swap = nargv[pos]; /* LINTED const cast */ ((char **) nargv)[pos] = nargv[cstart]; /* LINTED const cast */ ((char **)nargv)[cstart] = swap; } } } #ifdef REPLACE_GETOPT /* * getopt -- * Parse argc/argv argument vector. * * [eventually this will replace the BSD getopt] */ int getopt(int nargc, char * const *nargv, const char *options) { /* * We don't pass FLAG_PERMUTE to getopt_internal() since * the BSD getopt(3) (unlike GNU) has never done this. * * Furthermore, since many privileged programs call getopt() * before dropping privileges it makes sense to keep things * as simple (and bug-free) as possible. */ return (getopt_internal(nargc, nargv, options, NULL, NULL, 0)); } #endif /* REPLACE_GETOPT */ //extern int getopt(int nargc, char * const *nargv, const char *options); #ifdef _BSD_SOURCE /* * BSD adds the non-standard `optreset' feature, for reinitialisation * of `getopt' parsing. We support this feature, for applications which * proclaim their BSD heritage, before including this header; however, * to maintain portability, developers are advised to avoid it. */ # define optreset __mingw_optreset extern int optreset; #endif #ifdef __cplusplus } #endif /* * POSIX requires the `getopt' API to be specified in `unistd.h'; * thus, `unistd.h' includes this header. However, we do not want * to expose the `getopt_long' or `getopt_long_only' APIs, when * included in this manner. Thus, close the standard __GETOPT_H__ * declarations block, and open an additional __GETOPT_LONG_H__ * specific block, only when *not* __UNISTD_H_SOURCED__, in which * to declare the extended API. */ #endif /* !defined(__GETOPT_H__) */ #if !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) #define __GETOPT_LONG_H__ #ifdef __cplusplus extern "C" { #endif struct option /* specification for a long form option... */ { const char *name; /* option name, without leading hyphens */ int has_arg; /* does it take an argument? */ int *flag; /* where to save its status, or NULL */ int val; /* its associated status value */ }; enum /* permitted values for its `has_arg' field... */ { no_argument = 0, /* option never takes an argument */ required_argument, /* option always requires an argument */ optional_argument /* option may take an argument */ }; /* * parse_long_options -- * Parse long options in argc/argv argument vector. * Returns -1 if short_too is set and the option does not match long_options. */ static int parse_long_options(char * const *nargv, const char *options, const struct option *long_options, int *idx, int short_too) { char *current_argv, *has_equal; size_t current_argv_len; int i, ambiguous, match; #define IDENTICAL_INTERPRETATION(_x, _y) \ (long_options[(_x)].has_arg == long_options[(_y)].has_arg && \ long_options[(_x)].flag == long_options[(_y)].flag && \ long_options[(_x)].val == long_options[(_y)].val) current_argv = place; match = -1; ambiguous = 0; optind++; if ((has_equal = strchr(current_argv, '=')) != NULL) { /* argument found (--option=arg) */ current_argv_len = has_equal - current_argv; has_equal++; } else current_argv_len = strlen(current_argv); for (i = 0; long_options[i].name; i++) { /* find matching long option */ if (strncmp(current_argv, long_options[i].name, current_argv_len)) continue; if (strlen(long_options[i].name) == current_argv_len) { /* exact match */ match = i; ambiguous = 0; break; } /* * If this is a known short option, don't allow * a partial match of a single character. */ if (short_too && current_argv_len == 1) continue; if (match == -1) /* partial match */ match = i; else if (!IDENTICAL_INTERPRETATION(i, match)) ambiguous = 1; } if (ambiguous) { /* ambiguous abbreviation */ if (PRINT_ERROR) warnx(ambig, (int)current_argv_len, current_argv); optopt = 0; return (BADCH); } if (match != -1) { /* option found */ if (long_options[match].has_arg == no_argument && has_equal) { if (PRINT_ERROR) warnx(noarg, (int)current_argv_len, current_argv); /* * XXX: GNU sets optopt to val regardless of flag */ if (long_options[match].flag == NULL) optopt = long_options[match].val; else optopt = 0; return (BADARG); } if (long_options[match].has_arg == required_argument || long_options[match].has_arg == optional_argument) { if (has_equal) optarg = has_equal; else if (long_options[match].has_arg == required_argument) { /* * optional argument doesn't use next nargv */ optarg = nargv[optind++]; } } if ((long_options[match].has_arg == required_argument) && (optarg == NULL)) { /* * Missing argument; leading ':' indicates no error * should be generated. */ if (PRINT_ERROR) warnx(recargstring, current_argv); /* * XXX: GNU sets optopt to val regardless of flag */ if (long_options[match].flag == NULL) optopt = long_options[match].val; else optopt = 0; --optind; return (BADARG); } } else { /* unknown option */ if (short_too) { --optind; return (-1); } if (PRINT_ERROR) warnx(illoptstring, current_argv); optopt = 0; return (BADCH); } if (idx) *idx = match; if (long_options[match].flag) { *long_options[match].flag = long_options[match].val; return (0); } else return (long_options[match].val); #undef IDENTICAL_INTERPRETATION } /* * getopt_internal -- * Parse argc/argv argument vector. Called by user level routines. */ static int getopt_internal(int nargc, char * const *nargv, const char *options, const struct option *long_options, int *idx, int flags) { char *oli; /* option letter list index */ int optchar, short_too; static int posixly_correct = -1; if (options == NULL) return (-1); /* * XXX Some GNU programs (like cvs) set optind to 0 instead of * XXX using optreset. Work around this braindamage. */ if (optind == 0) optind = optreset = 1; /* * Disable GNU extensions if POSIXLY_CORRECT is set or options * string begins with a '+'. * * CV, 2009-12-14: Check POSIXLY_CORRECT anew if optind == 0 or * optreset != 0 for GNU compatibility. */ if (posixly_correct == -1 || optreset != 0) posixly_correct = (getenv("POSIXLY_CORRECT") != NULL); if (*options == '-') flags |= FLAG_ALLARGS; else if (posixly_correct || *options == '+') flags &= ~FLAG_PERMUTE; if (*options == '+' || *options == '-') options++; optarg = NULL; if (optreset) nonopt_start = nonopt_end = -1; start: if (optreset || !*place) { /* update scanning pointer */ optreset = 0; if (optind >= nargc) { /* end of argument vector */ place = EMSG; if (nonopt_end != -1) { /* do permutation, if we have to */ permute_args(nonopt_start, nonopt_end, optind, nargv); optind -= nonopt_end - nonopt_start; } else if (nonopt_start != -1) { /* * If we skipped non-options, set optind * to the first of them. */ optind = nonopt_start; } nonopt_start = nonopt_end = -1; return (-1); } if (*(place = nargv[optind]) != '-' || (place[1] == '\0' && strchr(options, '-') == NULL)) { place = EMSG; /* found non-option */ if (flags & FLAG_ALLARGS) { /* * GNU extension: * return non-option as argument to option 1 */ optarg = nargv[optind++]; return (INORDER); } if (!(flags & FLAG_PERMUTE)) { /* * If no permutation wanted, stop parsing * at first non-option. */ return (-1); } /* do permutation */ if (nonopt_start == -1) nonopt_start = optind; else if (nonopt_end != -1) { permute_args(nonopt_start, nonopt_end, optind, nargv); nonopt_start = optind - (nonopt_end - nonopt_start); nonopt_end = -1; } optind++; /* process next argument */ goto start; } if (nonopt_start != -1 && nonopt_end == -1) nonopt_end = optind; /* * If we have "-" do nothing, if "--" we are done. */ if (place[1] != '\0' && *++place == '-' && place[1] == '\0') { optind++; place = EMSG; /* * We found an option (--), so if we skipped * non-options, we have to permute. */ if (nonopt_end != -1) { permute_args(nonopt_start, nonopt_end, optind, nargv); optind -= nonopt_end - nonopt_start; } nonopt_start = nonopt_end = -1; return (-1); } } /* * Check long options if: * 1) we were passed some * 2) the arg is not just "-" * 3) either the arg starts with -- we are getopt_long_only() */ if (long_options != NULL && place != nargv[optind] && (*place == '-' || (flags & FLAG_LONGONLY))) { short_too = 0; if (*place == '-') place++; /* --foo long option */ else if (*place != ':' && strchr(options, *place) != NULL) short_too = 1; /* could be short option too */ optchar = parse_long_options(nargv, options, long_options, idx, short_too); if (optchar != -1) { place = EMSG; return (optchar); } } if ((optchar = (int)*place++) == (int)':' || (optchar == (int)'-' && *place != '\0') || (oli = (char*)strchr(options, optchar)) == NULL) { /* * If the user specified "-" and '-' isn't listed in * options, return -1 (non-option) as per POSIX. * Otherwise, it is an unknown option character (or ':'). */ if (optchar == (int)'-' && *place == '\0') return (-1); if (!*place) ++optind; if (PRINT_ERROR) warnx(illoptchar, optchar); optopt = optchar; return (BADCH); } if (long_options != NULL && optchar == 'W' && oli[1] == ';') { /* -W long-option */ if (*place) /* no space */ /* NOTHING */; else if (++optind >= nargc) { /* no arg */ place = EMSG; if (PRINT_ERROR) warnx(recargchar, optchar); optopt = optchar; return (BADARG); } else /* white space */ place = nargv[optind]; optchar = parse_long_options(nargv, options, long_options, idx, 0); place = EMSG; return (optchar); } if (*++oli != ':') { /* doesn't take argument */ if (!*place) ++optind; } else { /* takes (optional) argument */ optarg = NULL; if (*place) /* no white space */ optarg = place; else if (oli[1] != ':') { /* arg not optional */ if (++optind >= nargc) { /* no arg */ place = EMSG; if (PRINT_ERROR) warnx(recargchar, optchar); optopt = optchar; return (BADARG); } else optarg = nargv[optind]; } place = EMSG; ++optind; } /* dump back option letter */ return (optchar); } /* * getopt_long -- * Parse argc/argv argument vector. */ int getopt_long(int nargc, char * const *nargv, const char *options, const struct option *long_options, int *idx) { return (getopt_internal(nargc, nargv, options, long_options, idx, FLAG_PERMUTE)); } /* * getopt_long_only -- * Parse argc/argv argument vector. */ int getopt_long_only(int nargc, char * const *nargv, const char *options, const struct option *long_options, int *idx) { return (getopt_internal(nargc, nargv, options, long_options, idx, FLAG_PERMUTE|FLAG_LONGONLY)); } //extern int getopt_long(int nargc, char * const *nargv, const char *options, // const struct option *long_options, int *idx); //extern int getopt_long_only(int nargc, char * const *nargv, const char *options, // const struct option *long_options, int *idx); /* * Previous MinGW implementation had... */ #ifndef HAVE_DECL_GETOPT /* * ...for the long form API only; keep this for compatibility. */ # define HAVE_DECL_GETOPT 1 #endif #ifdef __cplusplus } #endif #endif /* !defined(__UNISTD_H_SOURCED__) && !defined(__GETOPT_LONG_H__) */ libengine-gost-openssl-3.0.2/gost-engine.h000066400000000000000000000012241446070765000205030ustar00rootroot00000000000000/********************************************************************** * gost-engine.h * * GOST engine in library form * * * * Copyright (c) 2021 Richard Levitte * * This file is distributed under the same license as OpenSSL * * * **********************************************************************/ #ifndef GOST_ENGINE_H # define GOST_ENGINE_H void ENGINE_load_gost(void); #endif libengine-gost-openssl-3.0.2/gost.ec000066400000000000000000000000461446070765000174010ustar00rootroot00000000000000L GOST e_gost_err.h e_gost_err.c libengine-gost-openssl-3.0.2/gost.txt000066400000000000000000000151241446070765000176340ustar00rootroot00000000000000# Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy # in the file LICENSE in the source distribution or at # https://www.openssl.org/source/license.html # Function codes GOST_F_DECODE_GOST_ALGOR_PARAMS:100:decode_gost_algor_params GOST_F_ENCODE_GOST_ALGOR_PARAMS:101:encode_gost_algor_params GOST_F_FILL_GOST_EC_PARAMS:102:fill_GOST_EC_params GOST_F_GET_ENCRYPTION_PARAMS:103:get_encryption_params GOST_F_GOST2015_GET_ASN1_PARAMS:158:gost2015_get_asn1_params GOST_F_GOST2015_SET_ASN1_PARAMS:159:gost2015_set_asn1_params GOST_F_GOST89_GET_ASN1_PARAMETERS:104:gost89_get_asn1_parameters GOST_F_GOST89_SET_ASN1_PARAMETERS:105:gost89_set_asn1_parameters GOST_F_GOST_CIPHER_CTL:106:gost_cipher_ctl GOST_F_GOST_CMS_SET_KARI_SHARED_INFO:156:gost_cms_set_kari_shared_info GOST_F_GOST_CMS_SET_KTRI_SHARED_INFO:157:gost_cms_set_ktri_shared_info GOST_F_GOST_CMS_SET_SHARED_INFO:155:gost_cms_set_shared_info GOST_F_GOST_EC_COMPUTE_PUBLIC:107:gost_ec_compute_public GOST_F_GOST_EC_KEYGEN:108:gost_ec_keygen GOST_F_GOST_EC_SIGN:109:gost_ec_sign GOST_F_GOST_EC_VERIFY:110:gost_ec_verify GOST_F_GOST_ENCODE_CMS_PARAMS:161:gost_encode_cms_params GOST_F_GOST_GRASSHOPPER_CIPHER_CTL:111:gost_grasshopper_cipher_ctl GOST_F_GOST_GRASSHOPPER_CIPHER_DO_CTRACPKM_OMAC:160:\ gost_grasshopper_cipher_do_ctracpkm_omac GOST_F_GOST_GRASSHOPPER_CIPHER_DO_MGM:166:gost_grasshopper_cipher_do_mgm GOST_F_GOST_GRASSHOPPER_CIPHER_INIT_CTRACPKM_OMAC:162:\ gost_grasshopper_cipher_init_ctracpkm_omac GOST_F_GOST_GRASSHOPPER_MGM_CTRL:167:gost_grasshopper_mgm_ctrl GOST_F_GOST_GRASSHOPPER_SET_ASN1_PARAMETERS:112:\ gost_grasshopper_set_asn1_parameters GOST_F_GOST_IMIT_CTRL:113:gost_imit_ctrl GOST_F_GOST_IMIT_FINAL:114:gost_imit_final GOST_F_GOST_IMIT_UPDATE:115:gost_imit_update GOST_F_GOST_KDFTREE2012_256:149:gost_kdftree2012_256 GOST_F_GOST_KEXP15:143:gost_kexp15 GOST_F_GOST_KIMP15:148:gost_kimp15 GOST_F_GOST_MAGMA_CIPHER_DO_MGM:168:gost_magma_cipher_do_mgm GOST_F_GOST_MAGMA_MGM_CTRL:169:gost_magma_mgm_ctrl GOST_F_GOST_MGM128_AAD:170:gost_mgm128_aad GOST_F_GOST_MGM128_DECRYPT:171:gost_mgm128_decrypt GOST_F_GOST_MGM128_ENCRYPT:172:gost_mgm128_encrypt GOST_F_MAGMA_CIPHER_CTL:163:magma_cipher_ctl GOST_F_MAGMA_CIPHER_CTL_ACPKM_OMAC:164:magma_cipher_ctl_acpkm_omac GOST_F_MAGMA_CIPHER_INIT_CTR_ACPKM_OMAC:165:magma_cipher_init_ctr_acpkm_omac GOST_F_OMAC_ACPKM_IMIT_CTRL:144:omac_acpkm_imit_ctrl GOST_F_OMAC_ACPKM_IMIT_FINAL:145:omac_acpkm_imit_final GOST_F_OMAC_ACPKM_IMIT_UPDATE:146:omac_acpkm_imit_update GOST_F_OMAC_ACPKM_KEY:147:omac_acpkm_key GOST_F_OMAC_IMIT_CTRL:116:omac_imit_ctrl GOST_F_OMAC_IMIT_FINAL:117:omac_imit_final GOST_F_OMAC_IMIT_UPDATE:118:omac_imit_update GOST_F_OMAC_KEY:138:omac_key GOST_F_PARAM_COPY_GOST_EC:119:param_copy_gost_ec GOST_F_PKEY_GOST2001_PARAMGEN:120:pkey_gost2001_paramgen GOST_F_PKEY_GOST2012_PARAMGEN:121:pkey_gost2012_paramgen GOST_F_PKEY_GOST2018_DECRYPT:150:pkey_gost2018_decrypt GOST_F_PKEY_GOST2018_ENCRYPT:151:pkey_gost2018_encrypt GOST_F_PKEY_GOST_CTRL:122:pkey_gost_ctrl GOST_F_PKEY_GOST_DECRYPT:153:pkey_gost_decrypt GOST_F_PKEY_GOST_ECCP_DECRYPT:123:pkey_GOST_ECcp_decrypt GOST_F_PKEY_GOST_ECCP_ENCRYPT:124:pkey_GOST_ECcp_encrypt GOST_F_PKEY_GOST_EC_CTRL_STR_256:125:pkey_gost_ec_ctrl_str_256 GOST_F_PKEY_GOST_EC_CTRL_STR_512:126:pkey_gost_ec_ctrl_str_512 GOST_F_PKEY_GOST_EC_CTRL_STR_COMMON:154:pkey_gost_ec_ctrl_str_common GOST_F_PKEY_GOST_EC_DERIVE:127:pkey_gost_ec_derive GOST_F_PKEY_GOST_ENCRYPT:152:pkey_gost_encrypt GOST_F_PKEY_GOST_GRASSHOPPER_MAC_SIGNCTX_INIT:141:\ pkey_gost_grasshopper_mac_signctx_init GOST_F_PKEY_GOST_MAC_CTRL:128:pkey_gost_mac_ctrl GOST_F_PKEY_GOST_MAC_CTRL_STR:129:pkey_gost_mac_ctrl_str GOST_F_PKEY_GOST_MAC_KEYGEN_BASE:130:pkey_gost_mac_keygen_base GOST_F_PKEY_GOST_MAC_SIGNCTX_INIT:131:pkey_gost_mac_signctx_init GOST_F_PKEY_GOST_MAGMA_MAC_SIGNCTX_INIT:142:pkey_gost_magma_mac_signctx_init GOST_F_PKEY_GOST_OMAC_CTRL:139:pkey_gost_omac_ctrl GOST_F_PKEY_GOST_OMAC_CTRL_STR:140:pkey_gost_omac_ctrl_str GOST_F_PRINT_GOST_EC_PUB:132:print_gost_ec_pub GOST_F_PRIV_DECODE_GOST:133:priv_decode_gost GOST_F_PUB_DECODE_GOST_EC:134:pub_decode_gost_ec GOST_F_PUB_ENCODE_GOST_EC:135:pub_encode_gost_ec GOST_F_UNPACK_CP_SIGNATURE:136:unpack_cp_signature GOST_F_VKO_COMPUTE_KEY:137:VKO_compute_key #Reason codes GOST_R_BAD_KEY_PARAMETERS_FORMAT:100:bad key parameters format GOST_R_BAD_MAC:133:bad mac GOST_R_BAD_ORDER:132:bad order GOST_R_BAD_PKEY_PARAMETERS_FORMAT:101:bad pkey parameters format GOST_R_CANNOT_PACK_EPHEMERAL_KEY:102:cannot pack ephemeral key GOST_R_CANNOT_UNPACK_EPHEMERAL_KEY:136:cannot unpack ephemeral key GOST_R_CIPHER_NOT_FOUND:103:cipher not found GOST_R_CTRL_CALL_FAILED:104:ctrl call failed GOST_R_DATA_TOO_LARGE:141:data too large GOST_R_ERROR_COMPUTING_EXPORT_KEYS:135:error computing export keys GOST_R_ERROR_COMPUTING_SHARED_KEY:105:error computing shared key GOST_R_ERROR_DECODING_PUBLIC_KEY:138:error decoding public key GOST_R_ERROR_PARSING_KEY_TRANSPORT_INFO:106:error parsing key transport info GOST_R_ERROR_POINT_MUL:107:error point mul GOST_R_ERROR_SETTING_PEER_KEY:139:error setting peer key GOST_R_INCOMPATIBLE_ALGORITHMS:108:incompatible algorithms GOST_R_INCOMPATIBLE_PEER_KEY:109:incompatible peer key GOST_R_INVALID_BUFFER_SIZE:140:invalid buffer size GOST_R_INVALID_CIPHER:134:invalid cipher GOST_R_INVALID_CIPHER_PARAMS:110:invalid cipher params GOST_R_INVALID_CIPHER_PARAM_OID:111:invalid cipher param oid GOST_R_INVALID_DIGEST_TYPE:112:invalid digest type GOST_R_INVALID_IV_LENGTH:113:invalid iv length GOST_R_INVALID_MAC_KEY_LENGTH:114:invalid mac key length GOST_R_INVALID_MAC_KEY_SIZE:115:invalid mac key size GOST_R_INVALID_MAC_PARAMS:116:invalid mac params GOST_R_INVALID_MAC_SIZE:117:invalid mac size GOST_R_INVALID_PARAMSET:118:invalid paramset GOST_R_INVALID_TAG_LENGTH:142:invalid tag length GOST_R_KEY_IS_NOT_INITIALIZED:119:key is not initialized GOST_R_KEY_PARAMETERS_MISSING:120:key parameters missing GOST_R_MAC_KEY_NOT_SET:121:mac key not set GOST_R_NO_PARAMETERS_SET:122:no parameters set GOST_R_NO_PEER_KEY:123:no peer key GOST_R_NO_PRIVATE_PART_OF_NON_EPHEMERAL_KEYPAIR:124:\ no private part of non ephemeral keypair GOST_R_PUBLIC_KEY_UNDEFINED:125:public key undefined GOST_R_RNG_ERROR:126:rng error GOST_R_SIGNATURE_MISMATCH:127:signature mismatch GOST_R_SIGNATURE_PARTS_GREATER_THAN_Q:128:signature parts greater than q GOST_R_UKM_NOT_SET:129:ukm not set GOST_R_UNSUPPORTED_CIPHER_CTL_COMMAND:130:unsupported cipher ctl command GOST_R_UNSUPPORTED_PARAMETER_SET:131:unsupported parameter set GOST_R_UNSUPPORTED_RECIPIENT_INFO:137:unsupported recipient info libengine-gost-openssl-3.0.2/gost.txt.old000066400000000000000000000132041446070765000204060ustar00rootroot00000000000000# Copyright 1999-2020 The OpenSSL Project Authors. All Rights Reserved. # # Licensed under the OpenSSL license (the "License"). You may not use # this file except in compliance with the License. You can obtain a copy # in the file LICENSE in the source distribution or at # https://www.openssl.org/source/license.html # Function codes GOST_F_DECODE_GOST_ALGOR_PARAMS:100:decode_gost_algor_params GOST_F_ENCODE_GOST_ALGOR_PARAMS:101:encode_gost_algor_params GOST_F_FILL_GOST_EC_PARAMS:102:fill_GOST_EC_params GOST_F_GET_ENCRYPTION_PARAMS:103:get_encryption_params GOST_F_GOST2015_GET_ASN1_PARAMS:158:gost2015_get_asn1_params GOST_F_GOST2015_SET_ASN1_PARAMS:159:gost2015_set_asn1_params GOST_F_GOST89_GET_ASN1_PARAMETERS:104:gost89_get_asn1_parameters GOST_F_GOST89_SET_ASN1_PARAMETERS:105:gost89_set_asn1_parameters GOST_F_GOST_CIPHER_CTL:106:gost_cipher_ctl GOST_F_GOST_CMS_SET_KARI_SHARED_INFO:156:gost_cms_set_kari_shared_info GOST_F_GOST_CMS_SET_KTRI_SHARED_INFO:157:gost_cms_set_ktri_shared_info GOST_F_GOST_CMS_SET_SHARED_INFO:155:gost_cms_set_shared_info GOST_F_GOST_EC_COMPUTE_PUBLIC:107:gost_ec_compute_public GOST_F_GOST_EC_KEYGEN:108:gost_ec_keygen GOST_F_GOST_EC_SIGN:109:gost_ec_sign GOST_F_GOST_EC_VERIFY:110:gost_ec_verify GOST_F_GOST_GRASSHOPPER_CIPHER_CTL:111:gost_grasshopper_cipher_ctl GOST_F_GOST_GRASSHOPPER_SET_ASN1_PARAMETERS:112:\ gost_grasshopper_set_asn1_parameters GOST_F_GOST_IMIT_CTRL:113:gost_imit_ctrl GOST_F_GOST_IMIT_FINAL:114:gost_imit_final GOST_F_GOST_IMIT_UPDATE:115:gost_imit_update GOST_F_GOST_KDFTREE2012_256:149:gost_kdftree2012_256 GOST_F_GOST_KEXP15:143:gost_kexp15 GOST_F_GOST_KIMP15:148:gost_kimp15 GOST_F_OMAC_ACPKM_IMIT_CTRL:144:omac_acpkm_imit_ctrl GOST_F_OMAC_ACPKM_IMIT_FINAL:145:omac_acpkm_imit_final GOST_F_OMAC_ACPKM_IMIT_UPDATE:146:omac_acpkm_imit_update GOST_F_OMAC_ACPKM_KEY:147:omac_acpkm_key GOST_F_OMAC_IMIT_CTRL:116:omac_imit_ctrl GOST_F_OMAC_IMIT_FINAL:117:omac_imit_final GOST_F_OMAC_IMIT_UPDATE:118:omac_imit_update GOST_F_OMAC_KEY:138:omac_key GOST_F_PARAM_COPY_GOST_EC:119:param_copy_gost_ec GOST_F_PKEY_GOST2001_PARAMGEN:120:pkey_gost2001_paramgen GOST_F_PKEY_GOST2012_PARAMGEN:121:pkey_gost2012_paramgen GOST_F_PKEY_GOST2018_DECRYPT:150:pkey_gost2018_decrypt GOST_F_PKEY_GOST2018_ENCRYPT:151:pkey_gost2018_encrypt GOST_F_PKEY_GOST_CTRL:122:pkey_gost_ctrl GOST_F_PKEY_GOST_DECRYPT:153:pkey_gost_decrypt GOST_F_PKEY_GOST_ECCP_DECRYPT:123:pkey_GOST_ECcp_decrypt GOST_F_PKEY_GOST_ECCP_ENCRYPT:124:pkey_GOST_ECcp_encrypt GOST_F_PKEY_GOST_EC_CTRL_STR_256:125:pkey_gost_ec_ctrl_str_256 GOST_F_PKEY_GOST_EC_CTRL_STR_512:126:pkey_gost_ec_ctrl_str_512 GOST_F_PKEY_GOST_EC_CTRL_STR_COMMON:154:pkey_gost_ec_ctrl_str_common GOST_F_PKEY_GOST_EC_DERIVE:127:pkey_gost_ec_derive GOST_F_PKEY_GOST_ENCRYPT:152:pkey_gost_encrypt GOST_F_PKEY_GOST_GRASSHOPPER_MAC_SIGNCTX_INIT:141:\ pkey_gost_grasshopper_mac_signctx_init GOST_F_PKEY_GOST_MAC_CTRL:128:pkey_gost_mac_ctrl GOST_F_PKEY_GOST_MAC_CTRL_STR:129:pkey_gost_mac_ctrl_str GOST_F_PKEY_GOST_MAC_KEYGEN_BASE:130:pkey_gost_mac_keygen_base GOST_F_PKEY_GOST_MAC_SIGNCTX_INIT:131:pkey_gost_mac_signctx_init GOST_F_PKEY_GOST_MAGMA_MAC_SIGNCTX_INIT:142:pkey_gost_magma_mac_signctx_init GOST_F_PKEY_GOST_OMAC_CTRL:139:pkey_gost_omac_ctrl GOST_F_PKEY_GOST_OMAC_CTRL_STR:140:pkey_gost_omac_ctrl_str GOST_F_PRINT_GOST_EC_PUB:132:print_gost_ec_pub GOST_F_PRIV_DECODE_GOST:133:priv_decode_gost GOST_F_PUB_DECODE_GOST_EC:134:pub_decode_gost_ec GOST_F_PUB_ENCODE_GOST_EC:135:pub_encode_gost_ec GOST_F_UNPACK_CP_SIGNATURE:136:unpack_cp_signature GOST_F_VKO_COMPUTE_KEY:137:VKO_compute_key #Reason codes GOST_R_BAD_KEY_PARAMETERS_FORMAT:100:bad key parameters format GOST_R_BAD_MAC:133:bad mac GOST_R_BAD_ORDER:132:bad order GOST_R_BAD_PKEY_PARAMETERS_FORMAT:101:bad pkey parameters format GOST_R_CANNOT_PACK_EPHEMERAL_KEY:102:cannot pack ephemeral key GOST_R_CANNOT_UNPACK_EPHEMERAL_KEY:136:cannot unpack ephemeral key GOST_R_CIPHER_NOT_FOUND:103:cipher not found GOST_R_CTRL_CALL_FAILED:104:ctrl call failed GOST_R_ERROR_COMPUTING_EXPORT_KEYS:135:error computing export keys GOST_R_ERROR_COMPUTING_SHARED_KEY:105:error computing shared key GOST_R_ERROR_DECODING_PUBLIC_KEY:138:error decoding public key GOST_R_ERROR_PARSING_KEY_TRANSPORT_INFO:106:error parsing key transport info GOST_R_ERROR_POINT_MUL:107:error point mul GOST_R_ERROR_SETTING_PEER_KEY:139:error setting peer key GOST_R_INCOMPATIBLE_ALGORITHMS:108:incompatible algorithms GOST_R_INCOMPATIBLE_PEER_KEY:109:incompatible peer key GOST_R_INVALID_CIPHER:134:invalid cipher GOST_R_INVALID_CIPHER_PARAMS:110:invalid cipher params GOST_R_INVALID_CIPHER_PARAM_OID:111:invalid cipher param oid GOST_R_INVALID_DIGEST_TYPE:112:invalid digest type GOST_R_INVALID_IV_LENGTH:113:invalid iv length GOST_R_INVALID_MAC_KEY_LENGTH:114:invalid mac key length GOST_R_INVALID_MAC_KEY_SIZE:115:invalid mac key size GOST_R_INVALID_MAC_PARAMS:116:invalid mac params GOST_R_INVALID_MAC_SIZE:117:invalid mac size GOST_R_INVALID_PARAMSET:118:invalid paramset GOST_R_KEY_IS_NOT_INITIALIZED:119:key is not initialized GOST_R_KEY_PARAMETERS_MISSING:120:key parameters missing GOST_R_MAC_KEY_NOT_SET:121:mac key not set GOST_R_NO_PARAMETERS_SET:122:no parameters set GOST_R_NO_PEER_KEY:123:no peer key GOST_R_NO_PRIVATE_PART_OF_NON_EPHEMERAL_KEYPAIR:124:\ no private part of non ephemeral keypair GOST_R_PUBLIC_KEY_UNDEFINED:125:public key undefined GOST_R_RNG_ERROR:126:rng error GOST_R_SIGNATURE_MISMATCH:127:signature mismatch GOST_R_SIGNATURE_PARTS_GREATER_THAN_Q:128:signature parts greater than q GOST_R_UKM_NOT_SET:129:ukm not set GOST_R_UNSUPPORTED_CIPHER_CTL_COMMAND:130:unsupported cipher ctl command GOST_R_UNSUPPORTED_PARAMETER_SET:131:unsupported parameter set GOST_R_UNSUPPORTED_RECIPIENT_INFO:137:unsupported recipient info libengine-gost-openssl-3.0.2/gost12sum.1000066400000000000000000000041611446070765000200440ustar00rootroot00000000000000.\" Hey, Emacs! This is an -*- nroff -*- source file. .TH GOST12SUM 1 "02 Aug 2016" "Openssl" "Debian GNU/Linux" .SH NAME gost12sum \- generates or checks GOST R34.11-2012 message digests .SH SYNOPSIS .B gost12sum [\-bvl] [\-c [file]] | [file...] .SH DESCRIPTION .B gost12sum generates or checks GOST hash sums. The algorithm to generate the is reasonably fast and strong enough for most cases. Exact specification of the algorithm is in .I GOST R34.11-2012. Normally .B gost12sum generates checksums of all files given to it as a parameter and prints the checksums followed by the filenames. If, however, .B \-c is specified, only one filename parameter is allowed. This file should contain checksums and filenames to which these checksums refer to, and the files listed in that file are checked against the checksums listed there. See option .B \-c for more information. .SS OPTIONS .TP .B \-b Use binary mode. In unix environment, only difference between this and the normal mode is an asterisk preceding the filename in the output. .TP .B \-c Check gost hashes of all files listed in .I file against the checksum listed in the same file. The actual format of that file is the same as output of .B md5sum. That is, each line in the file describes a file. A line looks like: .B So, for example, if a file was created and its message digest calculated like so: .B echo foo > hash\-test\-file; gost12sum hash\-test\-file .B gost12sum would report: 3d4a51ee7713e6467442facefe06f153a303e7bdefbe7f9bdf2edb4ae9c866ff hash\-test\-file When invoked with \-c option .B gost12sum normally works silently unless error found. Use \-v if you want to see list of successfully checked files .TP .B \-v Be more verbose. Print filenames when checking (with \-c). .TP .B -l Use long (512-bit) hash instead of short (256-bit). .SH BUGS This manpage is not quite accurate and has formatting inconsistent with other manpages. .B gost12sum does not accept standard options like .BR \-\-help . .SH AUTHOR .B gost12sum utility written by Cryptocom LTD This manual page is written by Victor Wagner for Debian GNU/Linux libengine-gost-openssl-3.0.2/gost12sum.c000066400000000000000000000207461446070765000201350ustar00rootroot00000000000000/********************************************************************** * gost12sum.c * * Copyright (c) 2005-2019 Cryptocom LTD * * This file is distributed under same license as OpenSSL * * * * Implementation of GOST R 34.11-2012 hash function as * * command line utility more or less interface * * compatible with md5sum and sha1sum * * Doesn't need OpenSSL * **********************************************************************/ #include #include #ifdef _MSC_VER #include "getopt.h" # ifndef PATH_MAX # define PATH_MAX _MAX_PATH # endif #include typedef SSIZE_T ssize_t; #else #include #endif #include #include #ifdef _WIN32 # include #endif #include #include "gosthash2012.h" #define BUF_SIZE 262144 #define MAX_HASH_TXT_BYTES 128 #define gost_hash_ctx gost2012_hash_ctx typedef unsigned char byte; int hash_file(gost_hash_ctx * ctx, char *filename, char *sum, int mode, int hashsize); int hash_stream(gost_hash_ctx * ctx, int fd, char *sum, int hashsize); int get_line(FILE *f, char *hash, char *filename, int verbose, int *size); void help() { fprintf(stderr, "Calculates GOST R 34.11-2012 hash function\n\n"); fprintf(stderr, "gost12sum [-vl] [-c [file]]| [files]|-x\n" "\t-c check message digests (default is generate)\n" "\t-v verbose, print file names when checking\n" "\t-l use 512 bit hash (default 256 bit)\n" "\t-x read filenames from stdin rather than from arguments (256 bit only)\n" "\t-h print this help\n" "The input for -c should be the list of message digests and file names\n" "that is printed on stdout by this program when it generates digests.\n"); exit(3); } #ifndef O_BINARY # define O_BINARY 0 #endif int start_hash(gost_hash_ctx * ctx, int hashsize) { init_gost2012_hash_ctx(ctx, hashsize); return 1; } int hash_block(gost_hash_ctx * ctx, const byte * block, size_t length) { gost2012_hash_block(ctx, block, length); return 1; } int finish_hash(gost_hash_ctx * ctx, byte * hashval) { gost2012_finish_hash(ctx, hashval); return 1; } int main(int argc, char **argv) { int c, i; int verbose = 0; int errors = 0; int open_mode = O_RDONLY | O_BINARY; FILE *check_file = NULL; int filenames_from_stdin = 0; int hashsize = 32; gost_hash_ctx ctx; while ((c = getopt(argc, argv, "hxlvc::")) != -1) { switch (c) { case 'h': help(); exit(0); break; case 'v': verbose = 1; break; case 'l': hashsize = 64; break; case 'x': filenames_from_stdin = 1; break; case 'c': if (optarg) { check_file = fopen(optarg, "r"); if (!check_file) { perror(optarg); exit(2); } } else { check_file = stdin; } break; default: fprintf(stderr, "invalid option %c\n", optopt); help(); } } if (check_file) { char inhash[MAX_HASH_TXT_BYTES + 1], calcsum[MAX_HASH_TXT_BYTES + 1], filename[PATH_MAX]; int failcount = 0, count = 0; int expected_hash_size = 0; if (check_file == stdin && optind < argc) { check_file = fopen(argv[optind], "r"); if (!check_file) { perror(argv[optind]); exit(2); } } while (get_line (check_file, inhash, filename, verbose, &expected_hash_size)) { int error = 0; if (expected_hash_size == 0) { fprintf(stderr, "%s: invalid hash length\n", filename); errors++; count++; continue; } if (!hash_file (&ctx, filename, calcsum, open_mode, expected_hash_size)) { errors++; error = 1; } count++; if (error) continue; if (!strncmp(calcsum, inhash, expected_hash_size * 2 + 1)) { if (verbose) { fprintf(stderr, "%s\tOK\n", filename); } } else { if (verbose) { fprintf(stderr, "%s\tFAILED\n", filename); } else { fprintf(stderr, "%s: GOST hash sum check failed\n", filename); } failcount++; } } if (errors) { fprintf(stderr, "%s: WARNING %d of %d file(s) cannot be processed\n", argv[0], errors, count); } if (failcount) { fprintf(stderr, "%s: WARNING %d of %d processed file(s) failed GOST hash sum check\n", argv[0], failcount, count - errors); } exit((failcount || errors) ? 1 : 0); } else if (filenames_from_stdin) { char sum[MAX_HASH_TXT_BYTES + 1]; char filename[PATH_MAX + 1], *end; while (!feof(stdin)) { if (!fgets(filename, PATH_MAX, stdin)) break; for (end = filename; *end; end++) ; end--; for (; *end == '\n' || *end == '\r'; end--) *end = 0; if (!hash_file(&ctx, filename, sum, open_mode, hashsize)) { errors++; } else { printf("%s %s\n", sum, filename); } } } else if (optind == argc) { char sum[MAX_HASH_TXT_BYTES + 1]; if (!hash_stream(&ctx, fileno(stdin), sum, hashsize)) { perror("stdin"); exit(1); } printf("%s -\n", sum); exit(0); } else { for (i = optind; i < argc; i++) { char sum[MAX_HASH_TXT_BYTES + 1]; if (!hash_file(&ctx, argv[i], sum, open_mode, hashsize)) { errors++; } else { printf("%s %s\n", sum, argv[i]); } } } exit(errors ? 1 : 0); } int hash_file(gost_hash_ctx * ctx, char *filename, char *sum, int mode, int hashsize) { int fd; if ((fd = open(filename, mode)) < 0) { perror(filename); return 0; } if (!hash_stream(ctx, fd, sum, hashsize)) { perror(filename); close(fd); return 0; } close(fd); return 1; } int hash_stream(gost_hash_ctx * ctx, int fd, char *sum, int hashsize) { unsigned char buffer[BUF_SIZE]; ssize_t bytes; int i; start_hash(ctx, hashsize * 8); while ((bytes = read(fd, buffer, BUF_SIZE)) > 0) { hash_block(ctx, buffer, bytes); } if (bytes < 0) { return 0; } finish_hash(ctx, buffer); for (i = 0; i < hashsize; i++) { sprintf(sum + 2 * i, "%02x", buffer[i]); } return 1; } int get_line(FILE *f, char *hash, char *filename, int verbose, int *size) { int i, len; char *ptr = filename; char *spacepos = NULL; while (!feof(f)) { if (!fgets(filename, PATH_MAX, f)) return 0; ptr = filename; while (*ptr == ' ') ptr++; len = strlen(ptr); while (ptr[--len] == '\n' || ptr[len] == '\r') ptr[len] = 0; if (len == 0) goto nextline; spacepos = strchr(ptr, ' '); if (spacepos == NULL || strlen(spacepos + 1) == 0) goto nextline; *size = spacepos - ptr; for (i = 0; i < *size; i++) { if (ptr[i] < '0' || (ptr[i] > '9' && ptr[i] < 'A') || (ptr[i] > 'F' && ptr[i] < 'a') || ptr[i] > 'f') { goto nextline; } } if (*size > 128 || ((*size != 64) && (*size != 128))) { *size = 0; memset(hash, 0, MAX_HASH_TXT_BYTES + 1); } else { memcpy(hash, ptr, *size); hash[*size] = 0; } memmove(filename, spacepos + 1, strlen(spacepos)); *size /= 2; return 1; nextline: if (verbose) printf("Skipping line %s\n", filename); } return 0; } libengine-gost-openssl-3.0.2/gost89.c000066400000000000000000000626721446070765000174320ustar00rootroot00000000000000/********************************************************************** * gost89.c * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Implementation of GOST 28147-89 encryption algorithm * * No OpenSSL libraries required to compile and use * * this code * **********************************************************************/ #include #include #include #include "gost89.h" /*- Substitution blocks from RFC 4357 Note: our implementation of gost 28147-89 algorithm uses S-box matrix rotated 90 degrees counterclockwise, relative to examples given in RFC. */ /* Substitution blocks from test examples for GOST R 34.11-94*/ gost_subst_block GostR3411_94_TestParamSet = { {0X1, 0XF, 0XD, 0X0, 0X5, 0X7, 0XA, 0X4, 0X9, 0X2, 0X3, 0XE, 0X6, 0XB, 0X8, 0XC} , {0XD, 0XB, 0X4, 0X1, 0X3, 0XF, 0X5, 0X9, 0X0, 0XA, 0XE, 0X7, 0X6, 0X8, 0X2, 0XC} , {0X4, 0XB, 0XA, 0X0, 0X7, 0X2, 0X1, 0XD, 0X3, 0X6, 0X8, 0X5, 0X9, 0XC, 0XF, 0XE} , {0X6, 0XC, 0X7, 0X1, 0X5, 0XF, 0XD, 0X8, 0X4, 0XA, 0X9, 0XE, 0X0, 0X3, 0XB, 0X2} , {0X7, 0XD, 0XA, 0X1, 0X0, 0X8, 0X9, 0XF, 0XE, 0X4, 0X6, 0XC, 0XB, 0X2, 0X5, 0X3} , {0X5, 0X8, 0X1, 0XD, 0XA, 0X3, 0X4, 0X2, 0XE, 0XF, 0XC, 0X7, 0X6, 0X0, 0X9, 0XB} , {0XE, 0XB, 0X4, 0XC, 0X6, 0XD, 0XF, 0XA, 0X2, 0X3, 0X8, 0X1, 0X0, 0X7, 0X5, 0X9} , {0X4, 0XA, 0X9, 0X2, 0XD, 0X8, 0X0, 0XE, 0X6, 0XB, 0X1, 0XC, 0X7, 0XF, 0X5, 0X3} }; /* Substitution blocks for hash function 1.2.643.2.9.1.6.1 */ gost_subst_block GostR3411_94_CryptoProParamSet = { {0x1, 0x3, 0xA, 0x9, 0x5, 0xB, 0x4, 0xF, 0x8, 0x6, 0x7, 0xE, 0xD, 0x0, 0x2, 0xC} , {0xD, 0xE, 0x4, 0x1, 0x7, 0x0, 0x5, 0xA, 0x3, 0xC, 0x8, 0xF, 0x6, 0x2, 0x9, 0xB} , {0x7, 0x6, 0x2, 0x4, 0xD, 0x9, 0xF, 0x0, 0xA, 0x1, 0x5, 0xB, 0x8, 0xE, 0xC, 0x3} , {0x7, 0x6, 0x4, 0xB, 0x9, 0xC, 0x2, 0xA, 0x1, 0x8, 0x0, 0xE, 0xF, 0xD, 0x3, 0x5} , {0x4, 0xA, 0x7, 0xC, 0x0, 0xF, 0x2, 0x8, 0xE, 0x1, 0x6, 0x5, 0xD, 0xB, 0x9, 0x3} , {0x7, 0xF, 0xC, 0xE, 0x9, 0x4, 0x1, 0x0, 0x3, 0xB, 0x5, 0x2, 0x6, 0xA, 0x8, 0xD} , {0x5, 0xF, 0x4, 0x0, 0x2, 0xD, 0xB, 0x9, 0x1, 0x7, 0x6, 0x3, 0xC, 0xE, 0xA, 0x8} , {0xA, 0x4, 0x5, 0x6, 0x8, 0x1, 0x3, 0x7, 0xD, 0xC, 0xE, 0x0, 0x9, 0x2, 0xB, 0xF} }; /* Test paramset from GOST 28147 */ gost_subst_block Gost28147_TestParamSet = { {0xC, 0x6, 0x5, 0x2, 0xB, 0x0, 0x9, 0xD, 0x3, 0xE, 0x7, 0xA, 0xF, 0x4, 0x1, 0x8} , {0x9, 0xB, 0xC, 0x0, 0x3, 0x6, 0x7, 0x5, 0x4, 0x8, 0xE, 0xF, 0x1, 0xA, 0x2, 0xD} , {0x8, 0xF, 0x6, 0xB, 0x1, 0x9, 0xC, 0x5, 0xD, 0x3, 0x7, 0xA, 0x0, 0xE, 0x2, 0x4} , {0x3, 0xE, 0x5, 0x9, 0x6, 0x8, 0x0, 0xD, 0xA, 0xB, 0x7, 0xC, 0x2, 0x1, 0xF, 0x4} , {0xE, 0x9, 0xB, 0x2, 0x5, 0xF, 0x7, 0x1, 0x0, 0xD, 0xC, 0x6, 0xA, 0x4, 0x3, 0x8} , {0xD, 0x8, 0xE, 0xC, 0x7, 0x3, 0x9, 0xA, 0x1, 0x5, 0x2, 0x4, 0x6, 0xF, 0x0, 0xB} , {0xC, 0x9, 0xF, 0xE, 0x8, 0x1, 0x3, 0xA, 0x2, 0x7, 0x4, 0xD, 0x6, 0x0, 0xB, 0x5} , {0x4, 0x2, 0xF, 0x5, 0x9, 0x1, 0x0, 0x8, 0xE, 0x3, 0xB, 0xC, 0xD, 0x7, 0xA, 0x6} }; /* 1.2.643.2.2.31.1 */ gost_subst_block Gost28147_CryptoProParamSetA = { {0xB, 0xA, 0xF, 0x5, 0x0, 0xC, 0xE, 0x8, 0x6, 0x2, 0x3, 0x9, 0x1, 0x7, 0xD, 0x4} , {0x1, 0xD, 0x2, 0x9, 0x7, 0xA, 0x6, 0x0, 0x8, 0xC, 0x4, 0x5, 0xF, 0x3, 0xB, 0xE} , {0x3, 0xA, 0xD, 0xC, 0x1, 0x2, 0x0, 0xB, 0x7, 0x5, 0x9, 0x4, 0x8, 0xF, 0xE, 0x6} , {0xB, 0x5, 0x1, 0x9, 0x8, 0xD, 0xF, 0x0, 0xE, 0x4, 0x2, 0x3, 0xC, 0x7, 0xA, 0x6} , {0xE, 0x7, 0xA, 0xC, 0xD, 0x1, 0x3, 0x9, 0x0, 0x2, 0xB, 0x4, 0xF, 0x8, 0x5, 0x6} , {0xE, 0x4, 0x6, 0x2, 0xB, 0x3, 0xD, 0x8, 0xC, 0xF, 0x5, 0xA, 0x0, 0x7, 0x1, 0x9} , {0x3, 0x7, 0xE, 0x9, 0x8, 0xA, 0xF, 0x0, 0x5, 0x2, 0x6, 0xC, 0xB, 0x4, 0xD, 0x1} , {0x9, 0x6, 0x3, 0x2, 0x8, 0xB, 0x1, 0x7, 0xA, 0x4, 0xE, 0xF, 0xC, 0x0, 0xD, 0x5} }; /* 1.2.643.2.2.31.2 */ gost_subst_block Gost28147_CryptoProParamSetB = { {0x0, 0x4, 0xB, 0xE, 0x8, 0x3, 0x7, 0x1, 0xA, 0x2, 0x9, 0x6, 0xF, 0xD, 0x5, 0xC} , {0x5, 0x2, 0xA, 0xB, 0x9, 0x1, 0xC, 0x3, 0x7, 0x4, 0xD, 0x0, 0x6, 0xF, 0x8, 0xE} , {0x8, 0x3, 0x2, 0x6, 0x4, 0xD, 0xE, 0xB, 0xC, 0x1, 0x7, 0xF, 0xA, 0x0, 0x9, 0x5} , {0x2, 0x7, 0xC, 0xF, 0x9, 0x5, 0xA, 0xB, 0x1, 0x4, 0x0, 0xD, 0x6, 0x8, 0xE, 0x3} , {0x7, 0x5, 0x0, 0xD, 0xB, 0x6, 0x1, 0x2, 0x3, 0xA, 0xC, 0xF, 0x4, 0xE, 0x9, 0x8} , {0xE, 0xC, 0x0, 0xA, 0x9, 0x2, 0xD, 0xB, 0x7, 0x5, 0x8, 0xF, 0x3, 0x6, 0x1, 0x4} , {0x0, 0x1, 0x2, 0xA, 0x4, 0xD, 0x5, 0xC, 0x9, 0x7, 0x3, 0xF, 0xB, 0x8, 0x6, 0xE} , {0x8, 0x4, 0xB, 0x1, 0x3, 0x5, 0x0, 0x9, 0x2, 0xE, 0xA, 0xC, 0xD, 0x6, 0x7, 0xF} }; /* 1.2.643.2.2.31.3 */ gost_subst_block Gost28147_CryptoProParamSetC = { {0x7, 0x4, 0x0, 0x5, 0xA, 0x2, 0xF, 0xE, 0xC, 0x6, 0x1, 0xB, 0xD, 0x9, 0x3, 0x8} , {0xA, 0x9, 0x6, 0x8, 0xD, 0xE, 0x2, 0x0, 0xF, 0x3, 0x5, 0xB, 0x4, 0x1, 0xC, 0x7} , {0xC, 0x9, 0xB, 0x1, 0x8, 0xE, 0x2, 0x4, 0x7, 0x3, 0x6, 0x5, 0xA, 0x0, 0xF, 0xD} , {0x8, 0xD, 0xB, 0x0, 0x4, 0x5, 0x1, 0x2, 0x9, 0x3, 0xC, 0xE, 0x6, 0xF, 0xA, 0x7} , {0x3, 0x6, 0x0, 0x1, 0x5, 0xD, 0xA, 0x8, 0xB, 0x2, 0x9, 0x7, 0xE, 0xF, 0xC, 0x4} , {0x8, 0x2, 0x5, 0x0, 0x4, 0x9, 0xF, 0xA, 0x3, 0x7, 0xC, 0xD, 0x6, 0xE, 0x1, 0xB} , {0x0, 0x1, 0x7, 0xD, 0xB, 0x4, 0x5, 0x2, 0x8, 0xE, 0xF, 0xC, 0x9, 0xA, 0x6, 0x3} , {0x1, 0xB, 0xC, 0x2, 0x9, 0xD, 0x0, 0xF, 0x4, 0x5, 0x8, 0xE, 0xA, 0x7, 0x6, 0x3} }; /* 1.2.643.2.2.31.4 */ gost_subst_block Gost28147_CryptoProParamSetD = { {0x1, 0xA, 0x6, 0x8, 0xF, 0xB, 0x0, 0x4, 0xC, 0x3, 0x5, 0x9, 0x7, 0xD, 0x2, 0xE} , {0x3, 0x0, 0x6, 0xF, 0x1, 0xE, 0x9, 0x2, 0xD, 0x8, 0xC, 0x4, 0xB, 0xA, 0x5, 0x7} , {0x8, 0x0, 0xF, 0x3, 0x2, 0x5, 0xE, 0xB, 0x1, 0xA, 0x4, 0x7, 0xC, 0x9, 0xD, 0x6} , {0x0, 0xC, 0x8, 0x9, 0xD, 0x2, 0xA, 0xB, 0x7, 0x3, 0x6, 0x5, 0x4, 0xE, 0xF, 0x1} , {0x1, 0x5, 0xE, 0xC, 0xA, 0x7, 0x0, 0xD, 0x6, 0x2, 0xB, 0x4, 0x9, 0x3, 0xF, 0x8} , {0x1, 0xC, 0xB, 0x0, 0xF, 0xE, 0x6, 0x5, 0xA, 0xD, 0x4, 0x8, 0x9, 0x3, 0x7, 0x2} , {0xB, 0x6, 0x3, 0x4, 0xC, 0xF, 0xE, 0x2, 0x7, 0xD, 0x8, 0x0, 0x5, 0xA, 0x9, 0x1} , {0xF, 0xC, 0x2, 0xA, 0x6, 0x4, 0x5, 0x0, 0x7, 0x9, 0xE, 0xD, 0x1, 0xB, 0x8, 0x3} }; /* 1.2.643.7.1.2.5.1.1 */ gost_subst_block Gost28147_TC26ParamSetZ = { {0x1, 0x7, 0xe, 0xd, 0x0, 0x5, 0x8, 0x3, 0x4, 0xf, 0xa, 0x6, 0x9, 0xc, 0xb, 0x2} , {0x8, 0xe, 0x2, 0x5, 0x6, 0x9, 0x1, 0xc, 0xf, 0x4, 0xb, 0x0, 0xd, 0xa, 0x3, 0x7} , {0x5, 0xd, 0xf, 0x6, 0x9, 0x2, 0xc, 0xa, 0xb, 0x7, 0x8, 0x1, 0x4, 0x3, 0xe, 0x0} , {0x7, 0xf, 0x5, 0xa, 0x8, 0x1, 0x6, 0xd, 0x0, 0x9, 0x3, 0xe, 0xb, 0x4, 0x2, 0xc} , {0xc, 0x8, 0x2, 0x1, 0xd, 0x4, 0xf, 0x6, 0x7, 0x0, 0xa, 0x5, 0x3, 0xe, 0x9, 0xb} , {0xb, 0x3, 0x5, 0x8, 0x2, 0xf, 0xa, 0xd, 0xe, 0x1, 0x7, 0x4, 0xc, 0x9, 0x6, 0x0} , {0x6, 0x8, 0x2, 0x3, 0x9, 0xa, 0x5, 0xc, 0x1, 0xe, 0x4, 0x7, 0xb, 0xd, 0x0, 0xf} , {0xc, 0x4, 0x6, 0x2, 0xa, 0x5, 0xb, 0x9, 0xe, 0x8, 0xd, 0x7, 0x0, 0x3, 0xf, 0x1} }; const byte CryptoProKeyMeshingKey[] = { 0x69, 0x00, 0x72, 0x22, 0x64, 0xC9, 0x04, 0x23, 0x8D, 0x3A, 0xDB, 0x96, 0x46, 0xE9, 0x2A, 0xC4, 0x18, 0xFE, 0xAC, 0x94, 0x00, 0xED, 0x07, 0x12, 0xC0, 0x86, 0xDC, 0xC2, 0xEF, 0x4C, 0xA9, 0x2B }; const byte ACPKM_D_const[] = { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F, 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F, }; /* Initialization of gost_ctx subst blocks*/ void kboxinit(gost_ctx * c, const gost_subst_block * b) { int i; for (i = 0; i < 256; i++) { c->k87[i] = (word32) (b->k8[i >> 4] << 4 | b->k7[i & 15]) << 24; c->k65[i] = (b->k6[i >> 4] << 4 | b->k5[i & 15]) << 16; c->k43[i] = (b->k4[i >> 4] << 4 | b->k3[i & 15]) << 8; c->k21[i] = b->k2[i >> 4] << 4 | b->k1[i & 15]; } } /* Part of GOST 28147 algorithm moved into separate function */ static word32 f(gost_ctx * c, word32 x) { x = c->k87[x >> 24 & 255] | c->k65[x >> 16 & 255] | c->k43[x >> 8 & 255] | c->k21[x & 255]; /* Rotate left 11 bits */ return x << 11 | x >> (32 - 11); } /* Low-level encryption routine - encrypts one 64 bit block*/ void gostcrypt(gost_ctx * c, const byte * in, byte * out) { register word32 n1, n2; /* As named in the GOST */ n1 = in[0] | (in[1] << 8) | (in[2] << 16) | ((word32) in[3] << 24); n2 = in[4] | (in[5] << 8) | (in[6] << 16) | ((word32) in[7] << 24); /* Instead of swapping halves, swap names each round */ n2 ^= f(c, n1 + c->key[0] + c->mask[0]); n1 ^= f(c, n2 + c->key[1] + c->mask[1]); n2 ^= f(c, n1 + c->key[2] + c->mask[2]); n1 ^= f(c, n2 + c->key[3] + c->mask[3]); n2 ^= f(c, n1 + c->key[4] + c->mask[4]); n1 ^= f(c, n2 + c->key[5] + c->mask[5]); n2 ^= f(c, n1 + c->key[6] + c->mask[6]); n1 ^= f(c, n2 + c->key[7] + c->mask[7]); n2 ^= f(c, n1 + c->key[0] + c->mask[0]); n1 ^= f(c, n2 + c->key[1] + c->mask[1]); n2 ^= f(c, n1 + c->key[2] + c->mask[2]); n1 ^= f(c, n2 + c->key[3] + c->mask[3]); n2 ^= f(c, n1 + c->key[4] + c->mask[4]); n1 ^= f(c, n2 + c->key[5] + c->mask[5]); n2 ^= f(c, n1 + c->key[6] + c->mask[6]); n1 ^= f(c, n2 + c->key[7] + c->mask[7]); n2 ^= f(c, n1 + c->key[0] + c->mask[0]); n1 ^= f(c, n2 + c->key[1] + c->mask[1]); n2 ^= f(c, n1 + c->key[2] + c->mask[2]); n1 ^= f(c, n2 + c->key[3] + c->mask[3]); n2 ^= f(c, n1 + c->key[4] + c->mask[4]); n1 ^= f(c, n2 + c->key[5] + c->mask[5]); n2 ^= f(c, n1 + c->key[6] + c->mask[6]); n1 ^= f(c, n2 + c->key[7] + c->mask[7]); n2 ^= f(c, n1 + c->key[7] + c->mask[7]); n1 ^= f(c, n2 + c->key[6] + c->mask[6]); n2 ^= f(c, n1 + c->key[5] + c->mask[5]); n1 ^= f(c, n2 + c->key[4] + c->mask[4]); n2 ^= f(c, n1 + c->key[3] + c->mask[3]); n1 ^= f(c, n2 + c->key[2] + c->mask[2]); n2 ^= f(c, n1 + c->key[1] + c->mask[1]); n1 ^= f(c, n2 + c->key[0] + c->mask[0]); out[0] = (byte) (n2 & 0xff); out[1] = (byte) ((n2 >> 8) & 0xff); out[2] = (byte) ((n2 >> 16) & 0xff); out[3] = (byte) (n2 >> 24); out[4] = (byte) (n1 & 0xff); out[5] = (byte) ((n1 >> 8) & 0xff); out[6] = (byte) ((n1 >> 16) & 0xff); out[7] = (byte) (n1 >> 24); } /* Low-level encryption routine - encrypts one 64 bit block*/ void magmacrypt(gost_ctx * c, const byte * in, byte * out) { register word32 n1, n2; /* As named in the GOST */ n1 = in[7-0] | (in[7-1] << 8) | (in[7-2] << 16) | ((word32) in[7-3] << 24); n2 = in[7-4] | (in[7-5] << 8) | (in[7-6] << 16) | ((word32) in[7-7] << 24); /* Instead of swapping halves, swap names each round */ n2 ^= f(c, n1 + c->key[0] + c->mask[0]); n1 ^= f(c, n2 + c->key[1] + c->mask[1]); n2 ^= f(c, n1 + c->key[2] + c->mask[2]); n1 ^= f(c, n2 + c->key[3] + c->mask[3]); n2 ^= f(c, n1 + c->key[4] + c->mask[4]); n1 ^= f(c, n2 + c->key[5] + c->mask[5]); n2 ^= f(c, n1 + c->key[6] + c->mask[6]); n1 ^= f(c, n2 + c->key[7] + c->mask[7]); n2 ^= f(c, n1 + c->key[0] + c->mask[0]); n1 ^= f(c, n2 + c->key[1] + c->mask[1]); n2 ^= f(c, n1 + c->key[2] + c->mask[2]); n1 ^= f(c, n2 + c->key[3] + c->mask[3]); n2 ^= f(c, n1 + c->key[4] + c->mask[4]); n1 ^= f(c, n2 + c->key[5] + c->mask[5]); n2 ^= f(c, n1 + c->key[6] + c->mask[6]); n1 ^= f(c, n2 + c->key[7] + c->mask[7]); n2 ^= f(c, n1 + c->key[0] + c->mask[0]); n1 ^= f(c, n2 + c->key[1] + c->mask[1]); n2 ^= f(c, n1 + c->key[2] + c->mask[2]); n1 ^= f(c, n2 + c->key[3] + c->mask[3]); n2 ^= f(c, n1 + c->key[4] + c->mask[4]); n1 ^= f(c, n2 + c->key[5] + c->mask[5]); n2 ^= f(c, n1 + c->key[6] + c->mask[6]); n1 ^= f(c, n2 + c->key[7] + c->mask[7]); n2 ^= f(c, n1 + c->key[7] + c->mask[7]); n1 ^= f(c, n2 + c->key[6] + c->mask[6]); n2 ^= f(c, n1 + c->key[5] + c->mask[5]); n1 ^= f(c, n2 + c->key[4] + c->mask[4]); n2 ^= f(c, n1 + c->key[3] + c->mask[3]); n1 ^= f(c, n2 + c->key[2] + c->mask[2]); n2 ^= f(c, n1 + c->key[1] + c->mask[1]); n1 ^= f(c, n2 + c->key[0] + c->mask[0]); out[7-0] = (byte) (n2 & 0xff); out[7-1] = (byte) ((n2 >> 8) & 0xff); out[7-2] = (byte) ((n2 >> 16) & 0xff); out[7-3] = (byte) (n2 >> 24); out[7-4] = (byte) (n1 & 0xff); out[7-5] = (byte) ((n1 >> 8) & 0xff); out[7-6] = (byte) ((n1 >> 16) & 0xff); out[7-7] = (byte) (n1 >> 24); } /* Low-level decryption routine. Decrypts one 64-bit block */ void gostdecrypt(gost_ctx * c, const byte * in, byte * out) { register word32 n1, n2; /* As named in the GOST */ n1 = in[0] | (in[1] << 8) | (in[2] << 16) | ((word32) in[3] << 24); n2 = in[4] | (in[5] << 8) | (in[6] << 16) | ((word32) in[7] << 24); n2 ^= f(c, n1 + c->key[0] + c->mask[0]); n1 ^= f(c, n2 + c->key[1] + c->mask[1]); n2 ^= f(c, n1 + c->key[2] + c->mask[2]); n1 ^= f(c, n2 + c->key[3] + c->mask[3]); n2 ^= f(c, n1 + c->key[4] + c->mask[4]); n1 ^= f(c, n2 + c->key[5] + c->mask[5]); n2 ^= f(c, n1 + c->key[6] + c->mask[6]); n1 ^= f(c, n2 + c->key[7] + c->mask[7]); n2 ^= f(c, n1 + c->key[7] + c->mask[7]); n1 ^= f(c, n2 + c->key[6] + c->mask[6]); n2 ^= f(c, n1 + c->key[5] + c->mask[5]); n1 ^= f(c, n2 + c->key[4] + c->mask[4]); n2 ^= f(c, n1 + c->key[3] + c->mask[3]); n1 ^= f(c, n2 + c->key[2] + c->mask[2]); n2 ^= f(c, n1 + c->key[1] + c->mask[1]); n1 ^= f(c, n2 + c->key[0] + c->mask[0]); n2 ^= f(c, n1 + c->key[7] + c->mask[7]); n1 ^= f(c, n2 + c->key[6] + c->mask[6]); n2 ^= f(c, n1 + c->key[5] + c->mask[5]); n1 ^= f(c, n2 + c->key[4] + c->mask[4]); n2 ^= f(c, n1 + c->key[3] + c->mask[3]); n1 ^= f(c, n2 + c->key[2] + c->mask[2]); n2 ^= f(c, n1 + c->key[1] + c->mask[1]); n1 ^= f(c, n2 + c->key[0] + c->mask[0]); n2 ^= f(c, n1 + c->key[7] + c->mask[7]); n1 ^= f(c, n2 + c->key[6] + c->mask[6]); n2 ^= f(c, n1 + c->key[5] + c->mask[5]); n1 ^= f(c, n2 + c->key[4] + c->mask[4]); n2 ^= f(c, n1 + c->key[3] + c->mask[3]); n1 ^= f(c, n2 + c->key[2] + c->mask[2]); n2 ^= f(c, n1 + c->key[1] + c->mask[1]); n1 ^= f(c, n2 + c->key[0] + c->mask[0]); out[0] = (byte) (n2 & 0xff); out[1] = (byte) ((n2 >> 8) & 0xff); out[2] = (byte) ((n2 >> 16) & 0xff); out[3] = (byte) (n2 >> 24); out[4] = (byte) (n1 & 0xff); out[5] = (byte) ((n1 >> 8) & 0xff); out[6] = (byte) ((n1 >> 16) & 0xff); out[7] = (byte) (n1 >> 24); } /* Low-level decryption routine. Decrypts one 64-bit block */ void magmadecrypt(gost_ctx * c, const byte * in, byte * out) { register word32 n1, n2; /* As named in the GOST */ n1 = in[7-0] | (in[7-1] << 8) | (in[7-2] << 16) | ((word32) in[7-3] << 24); n2 = in[7-4] | (in[7-5] << 8) | (in[7-6] << 16) | ((word32) in[7-7] << 24); n2 ^= f(c, n1 + c->key[0] + c->mask[0]); n1 ^= f(c, n2 + c->key[1] + c->mask[1]); n2 ^= f(c, n1 + c->key[2] + c->mask[2]); n1 ^= f(c, n2 + c->key[3] + c->mask[3]); n2 ^= f(c, n1 + c->key[4] + c->mask[4]); n1 ^= f(c, n2 + c->key[5] + c->mask[5]); n2 ^= f(c, n1 + c->key[6] + c->mask[6]); n1 ^= f(c, n2 + c->key[7] + c->mask[7]); n2 ^= f(c, n1 + c->key[7] + c->mask[7]); n1 ^= f(c, n2 + c->key[6] + c->mask[6]); n2 ^= f(c, n1 + c->key[5] + c->mask[5]); n1 ^= f(c, n2 + c->key[4] + c->mask[4]); n2 ^= f(c, n1 + c->key[3] + c->mask[3]); n1 ^= f(c, n2 + c->key[2] + c->mask[2]); n2 ^= f(c, n1 + c->key[1] + c->mask[1]); n1 ^= f(c, n2 + c->key[0] + c->mask[0]); n2 ^= f(c, n1 + c->key[7] + c->mask[7]); n1 ^= f(c, n2 + c->key[6] + c->mask[6]); n2 ^= f(c, n1 + c->key[5] + c->mask[5]); n1 ^= f(c, n2 + c->key[4] + c->mask[4]); n2 ^= f(c, n1 + c->key[3] + c->mask[3]); n1 ^= f(c, n2 + c->key[2] + c->mask[2]); n2 ^= f(c, n1 + c->key[1] + c->mask[1]); n1 ^= f(c, n2 + c->key[0] + c->mask[0]); n2 ^= f(c, n1 + c->key[7] + c->mask[7]); n1 ^= f(c, n2 + c->key[6] + c->mask[6]); n2 ^= f(c, n1 + c->key[5] + c->mask[5]); n1 ^= f(c, n2 + c->key[4] + c->mask[4]); n2 ^= f(c, n1 + c->key[3] + c->mask[3]); n1 ^= f(c, n2 + c->key[2] + c->mask[2]); n2 ^= f(c, n1 + c->key[1] + c->mask[1]); n1 ^= f(c, n2 + c->key[0] + c->mask[0]); out[7-0] = (byte) (n2 & 0xff); out[7-1] = (byte) ((n2 >> 8) & 0xff); out[7-2] = (byte) ((n2 >> 16) & 0xff); out[7-3] = (byte) (n2 >> 24); out[7-4] = (byte) (n1 & 0xff); out[7-5] = (byte) ((n1 >> 8) & 0xff); out[7-6] = (byte) ((n1 >> 16) & 0xff); out[7-7] = (byte) (n1 >> 24); } /* Encrypts several blocks in ECB mode */ void gost_enc(gost_ctx * c, const byte * clear, byte * cipher, int blocks) { int i; for (i = 0; i < blocks; i++) { gostcrypt(c, clear, cipher); clear += 8; cipher += 8; } } /* Decrypts several blocks in ECB mode */ void gost_dec(gost_ctx * c, const byte * cipher, byte * clear, int blocks) { int i; for (i = 0; i < blocks; i++) { gostdecrypt(c, cipher, clear); clear += 8; cipher += 8; } } /* Encrypts several full blocks in CFB mode using 8byte IV */ void gost_enc_cfb(gost_ctx * ctx, const byte * iv, const byte * clear, byte * cipher, int blocks) { byte cur_iv[8]; byte gamma[8]; int i, j; const byte *in; byte *out; memcpy(cur_iv, iv, 8); for (i = 0, in = clear, out = cipher; i < blocks; i++, in += 8, out += 8) { gostcrypt(ctx, cur_iv, gamma); for (j = 0; j < 8; j++) { cur_iv[j] = out[j] = in[j] ^ gamma[j]; } } } /* Decrypts several full blocks in CFB mode using 8byte IV */ void gost_dec_cfb(gost_ctx * ctx, const byte * iv, const byte * cipher, byte * clear, int blocks) { byte cur_iv[8]; byte gamma[8]; int i, j; const byte *in; byte *out; memcpy(cur_iv, iv, 8); for (i = 0, in = cipher, out = clear; i < blocks; i++, in += 8, out += 8) { gostcrypt(ctx, cur_iv, gamma); for (j = 0; j < 8; j++) { out[j] = (cur_iv[j] = in[j]) ^ gamma[j]; } } } /* Encrypts one block using specified key */ void gost_enc_with_key(gost_ctx * c, byte * key, byte * inblock, byte * outblock) { gost_key_nomask(c, key); gostcrypt(c, inblock, outblock); } static void gost_key_impl(gost_ctx * c, const byte * k) { int i, j; for (i = 0, j = 0; i < 8; ++i, j += 4) { c->key[i] = (k[j] | (k[j + 1] << 8) | (k[j + 2] << 16) | ((word32) k[j + 3] << 24)) - c->mask[i]; } } /* Set 256 bit gost89 key into context */ void gost_key(gost_ctx * c, const byte * k) { RAND_priv_bytes((unsigned char *)c->mask, sizeof(c->mask)); gost_key_impl(c, k); } /* Set 256 bit gost89 key into context without key mask */ void gost_key_nomask(gost_ctx * c, const byte * k) { memset(c->mask, 0, sizeof(c->mask)); gost_key_impl(c, k); } /* Set 256 bit Magma key into context */ void magma_key(gost_ctx * c, const byte * k) { int i, j; RAND_priv_bytes((unsigned char *)c->mask, sizeof(c->mask)); for (i = 0, j = 0; i < 8; ++i, j += 4) { c->key[i] = (k[j + 3] | (k[j + 2] << 8) | (k[j + 1] << 16) | ((word32) k[j] << 24)) - c->mask[i]; } } void magma_master_key(gost_ctx *c, const byte *k) { memcpy(c->master_key, k, sizeof(c->master_key)); } /* Retrieve 256-bit gost89 key from context */ void gost_get_key(gost_ctx * c, byte * k) { int i, j; for (i = 0, j = 0; i < 8; i++, j += 4) { k[j] = (byte)((c->key[i] + c->mask[i]) & 0xFF); k[j+1] = (byte)(((c->key[i] + c->mask[i]) >> 8 )& 0xFF); k[j+2] = (byte)(((c->key[i] + c->mask[i]) >> 16) & 0xFF); k[j+3] = (byte)(((c->key[i] + c->mask[i]) >> 24) & 0xFF); } } /* Retrieve 256-bit magma key from context */ void magma_get_key(gost_ctx * c, byte * k) { int i, j; for (i = 0, j = 0; i < 8; i++, j += 4) { k[j + 3] = (byte) ((c->key[i] + c->mask[i]) & 0xFF); k[j + 2] = (byte) (((c->key[i] + c->mask[i]) >> 8) & 0xFF); k[j + 1] = (byte) (((c->key[i] + c->mask[i]) >> 16) & 0xFF); k[j + 0] = (byte) (((c->key[i] + c->mask[i]) >> 24) & 0xFF); } } /* Initalize context. Provides default value for subst_block */ void gost_init(gost_ctx * c, const gost_subst_block * b) { if (!b) { b = &GostR3411_94_TestParamSet; } kboxinit(c, b); } /* Cleans up key from context */ void gost_destroy(gost_ctx * c) { OPENSSL_cleanse(c->master_key, sizeof(c->master_key)); OPENSSL_cleanse(c->key, sizeof(c->key)); OPENSSL_cleanse(c->mask, sizeof(c->mask)); } /* * Compute GOST 28147 mac block Parameters gost_ctx *c - context initalized * with substitution blocks and key buffer - 8-byte mac state buffer block * 8-byte block to process. */ void mac_block(gost_ctx * c, byte * buffer, const byte * block) { register word32 n1, n2; /* As named in the GOST */ int i; for (i = 0; i < 8; i++) { buffer[i] ^= block[i]; } n1 = buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | ((word32) buffer[3] << 24); n2 = buffer[4] | (buffer[5] << 8) | (buffer[6] << 16) | ((word32) buffer[7] << 24); /* Instead of swapping halves, swap names each round */ n2 ^= f(c, n1 + c->key[0] + c->mask[0]); n1 ^= f(c, n2 + c->key[1] + c->mask[1]); n2 ^= f(c, n1 + c->key[2] + c->mask[2]); n1 ^= f(c, n2 + c->key[3] + c->mask[3]); n2 ^= f(c, n1 + c->key[4] + c->mask[4]); n1 ^= f(c, n2 + c->key[5] + c->mask[5]); n2 ^= f(c, n1 + c->key[6] + c->mask[6]); n1 ^= f(c, n2 + c->key[7] + c->mask[7]); n2 ^= f(c, n1 + c->key[0] + c->mask[0]); n1 ^= f(c, n2 + c->key[1] + c->mask[1]); n2 ^= f(c, n1 + c->key[2] + c->mask[2]); n1 ^= f(c, n2 + c->key[3] + c->mask[3]); n2 ^= f(c, n1 + c->key[4] + c->mask[4]); n1 ^= f(c, n2 + c->key[5] + c->mask[5]); n2 ^= f(c, n1 + c->key[6] + c->mask[6]); n1 ^= f(c, n2 + c->key[7] + c->mask[7]); buffer[0] = (byte) (n1 & 0xff); buffer[1] = (byte) ((n1 >> 8) & 0xff); buffer[2] = (byte) ((n1 >> 16) & 0xff); buffer[3] = (byte) (n1 >> 24); buffer[4] = (byte) (n2 & 0xff); buffer[5] = (byte) ((n2 >> 8) & 0xff); buffer[6] = (byte) ((n2 >> 16) & 0xff); buffer[7] = (byte) (n2 >> 24); } /* Get mac with specified number of bits from MAC state buffer */ void get_mac(byte * buffer, int nbits, byte * out) { int nbytes = nbits >> 3; int rembits = nbits & 7; int mask = rembits ? ((1 < rembits) - 1) : 0; int i; for (i = 0; i < nbytes; i++) out[i] = buffer[i]; if (rembits) out[i] = buffer[i] & mask; } /* * Compute mac of specified length (in bits) from data. Context should be * initialized with key and subst blocks */ int gost_mac(gost_ctx * ctx, int mac_len, const unsigned char *data, unsigned int data_len, unsigned char *mac) { byte buffer[8] = { 0, 0, 0, 0, 0, 0, 0, 0 }; byte buf2[8]; unsigned int i; for (i = 0; i + 8 <= data_len; i += 8) mac_block(ctx, buffer, data + i); if (i < data_len) { memset(buf2, 0, 8); memcpy(buf2, data + i, data_len - i); mac_block(ctx, buffer, buf2); i += 8; } if (i == 8) { memset(buf2, 0, 8); mac_block(ctx, buffer, buf2); } get_mac(buffer, mac_len, mac); return 1; } /* Compute MAC with non-zero IV. Used in some RFC 4357 algorithms */ int gost_mac_iv(gost_ctx * ctx, int mac_len, const unsigned char *iv, const unsigned char *data, unsigned int data_len, unsigned char *mac) { byte buffer[8]; byte buf2[8]; unsigned int i; memcpy(buffer, iv, 8); for (i = 0; i + 8 <= data_len; i += 8) mac_block(ctx, buffer, data + i); if (i < data_len) { memset(buf2, 0, 8); memcpy(buf2, data + i, data_len - i); mac_block(ctx, buffer, buf2); i += 8; } if (i == 8) { memset(buf2, 0, 8); mac_block(ctx, buffer, buf2); } get_mac(buffer, mac_len, mac); return 1; } /* Implements key meshing algorithm by modifing ctx and IV in place */ void cryptopro_key_meshing(gost_ctx * ctx, unsigned char *iv) { unsigned char newkey[32]; /* Set static keymeshing key */ /* "Decrypt" key with keymeshing key */ gost_dec(ctx, CryptoProKeyMeshingKey, newkey, 4); /* set new key */ gost_key(ctx, newkey); OPENSSL_cleanse(newkey, sizeof(newkey)); /* Encrypt iv with new key */ if (iv != NULL ) { unsigned char newiv[8]; gostcrypt(ctx, iv, newiv); memcpy(iv, newiv, 8); OPENSSL_cleanse(newiv, sizeof(newiv)); } } void acpkm_magma_key_meshing(gost_ctx * ctx) { unsigned char newkey[32]; int i; for (i = 0; i < 4; i++) { magmacrypt(ctx, ACPKM_D_const + 8 * i, newkey + 8 * i); } /* set new key */ magma_key(ctx, newkey); OPENSSL_cleanse(newkey, sizeof(newkey)); } libengine-gost-openssl-3.0.2/gost89.h000066400000000000000000000113311446070765000174210ustar00rootroot00000000000000/********************************************************************** * gost89.h * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Declarations for GOST 28147-89 encryption algorithm * * No OpenSSL libraries required to compile and use * * this code * **********************************************************************/ #ifndef GOST89_H # define GOST89_H /* Typedef for unsigned 32-bit integer */ # if __LONG_MAX__ > 2147483647L typedef unsigned int u4; # else typedef unsigned long u4; # endif /* Typedef for unsigned 8-bit integer */ typedef unsigned char byte; /* Internal representation of GOST substitution blocks */ typedef struct { byte k8[16]; byte k7[16]; byte k6[16]; byte k5[16]; byte k4[16]; byte k3[16]; byte k2[16]; byte k1[16]; } gost_subst_block; /* Cipher context includes key and preprocessed substitution block */ typedef struct { u4 master_key[8]; u4 key[8]; u4 mask[8]; /* Constant s-boxes -- set up in gost_init(). */ u4 k87[256], k65[256], k43[256], k21[256]; } gost_ctx; /* * Note: encrypt and decrypt expect full blocks--padding blocks is caller's * responsibility. All bulk encryption is done in ECB mode by these calls. * Other modes may be added easily enough. */ /* Encrypt several full blocks in ECB mode */ void gost_enc(gost_ctx * c, const byte * clear, byte * cipher, int blocks); /* Decrypt several full blocks in ECB mode */ void gost_dec(gost_ctx * c, const byte * cipher, byte * clear, int blocks); /* Encrypts several full blocks in CFB mode using 8byte IV */ void gost_enc_cfb(gost_ctx * ctx, const byte * iv, const byte * clear, byte * cipher, int blocks); /* Decrypts several full blocks in CFB mode using 8byte IV */ void gost_dec_cfb(gost_ctx * ctx, const byte * iv, const byte * cipher, byte * clear, int blocks); /* Encrypt one block */ void gostcrypt(gost_ctx * c, const byte * in, byte * out); /* Decrypt one block */ void gostdecrypt(gost_ctx * c, const byte * in, byte * out); /* Encrypt one block */ void magmacrypt(gost_ctx * c, const byte * in, byte * out); /* Decrypt one block */ void magmadecrypt(gost_ctx * c, const byte * in, byte * out); /* Set key into context */ void gost_key(gost_ctx * c, const byte * k); /* Set key into context without key mask */ void gost_key_nomask(gost_ctx * c, const byte * k); /* Set key into context */ void magma_key(gost_ctx * c, const byte * k); /* Set master 256-bit key to be used in TLSTREE calculation into context */ void magma_master_key(gost_ctx *c, const byte *k); /* Get key from context */ void gost_get_key(gost_ctx * c, byte * k); /* Set S-blocks into context */ void gost_init(gost_ctx * c, const gost_subst_block * b); /* Clean up context */ void gost_destroy(gost_ctx * c); /* Intermediate function used for calculate hash */ void gost_enc_with_key(gost_ctx *, byte * key, byte * inblock, byte * outblock); /* Compute MAC of given length in bits from data */ int gost_mac(gost_ctx * ctx, int mac_len, const unsigned char *data, unsigned int data_len, unsigned char *mac); /* * Compute MAC of given length in bits from data, using non-zero 8-byte IV * (non-standard, for use in CryptoPro key transport only */ int gost_mac_iv(gost_ctx * ctx, int mac_len, const unsigned char *iv, const unsigned char *data, unsigned int data_len, unsigned char *mac); /* Perform one step of MAC calculation like gostcrypt */ void mac_block(gost_ctx * c, byte * buffer, const byte * block); /* Extracts MAC value from mac state buffer */ void get_mac(byte * buffer, int nbits, byte * out); /* Implements cryptopro key meshing algorithm. Expect IV to be 8-byte size*/ void cryptopro_key_meshing(gost_ctx * ctx, unsigned char *iv); /* Parameter sets specified in RFC 4357 */ extern gost_subst_block GostR3411_94_TestParamSet; extern gost_subst_block GostR3411_94_CryptoProParamSet; extern gost_subst_block Gost28147_TestParamSet; extern gost_subst_block Gost28147_CryptoProParamSetA; extern gost_subst_block Gost28147_CryptoProParamSetB; extern gost_subst_block Gost28147_CryptoProParamSetC; extern gost_subst_block Gost28147_CryptoProParamSetD; extern gost_subst_block Gost28147_TC26ParamSetZ; extern const byte CryptoProKeyMeshingKey[]; typedef unsigned int word32; /* For tests. */ void kboxinit(gost_ctx * c, const gost_subst_block * b); void magma_get_key(gost_ctx * c, byte * k); void acpkm_magma_key_meshing(gost_ctx * ctx); #endif libengine-gost-openssl-3.0.2/gost_ameth.c000066400000000000000000001053301446070765000204140ustar00rootroot00000000000000/********************************************************************** * gost_ameth.c * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Implementation of RFC 4490/4491 ASN1 method * * for OpenSSL * * Requires OpenSSL 0.9.9 for compilation * **********************************************************************/ #include #include #include #include #include #include #ifndef OPENSSL_NO_CMS # include #endif #include "gost_lcl.h" #include "e_gost_err.h" #define PK_WRAP_PARAM "LEGACY_PK_WRAP" /* * Pack bignum into byte buffer of given size, filling all leading bytes by * zeros */ int store_bignum(const BIGNUM *bn, unsigned char *buf, int len) { int bytes = BN_num_bytes(bn); if (bytes > len) return 0; memset(buf, 0, len); BN_bn2bin(bn, buf + len - bytes); return 1; } static int pkey_bits_gost(const EVP_PKEY *pk) { if (!pk) return -1; switch (EVP_PKEY_base_id(pk)) { case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: case NID_id_GostR3410_2012_256: return 256; case NID_id_GostR3410_2012_512: return 512; } return -1; } static ASN1_STRING *encode_gost_algor_params(const EVP_PKEY *key) { ASN1_STRING *params = ASN1_STRING_new(); GOST_KEY_PARAMS *gkp = GOST_KEY_PARAMS_new(); int pkey_param_nid = NID_undef; void *key_ptr = EVP_PKEY_get0((EVP_PKEY *)key); int result = 0; if (!params || !gkp) { GOSTerr(GOST_F_ENCODE_GOST_ALGOR_PARAMS, ERR_R_MALLOC_FAILURE); goto err; } switch (EVP_PKEY_base_id(key)) { case NID_id_GostR3410_2012_256: pkey_param_nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(key_ptr)); switch (pkey_param_nid) { case NID_id_GostR3410_2001_TestParamSet: case NID_id_GostR3410_2001_CryptoPro_A_ParamSet: case NID_id_GostR3410_2001_CryptoPro_B_ParamSet: case NID_id_GostR3410_2001_CryptoPro_C_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet: gkp->hash_params = OBJ_nid2obj(NID_id_GostR3411_2012_256); } break; case NID_id_GostR3410_2012_512: pkey_param_nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(key_ptr)); switch (pkey_param_nid) { case NID_id_tc26_gost_3410_2012_512_paramSetTest: case NID_id_tc26_gost_3410_2012_512_paramSetA: case NID_id_tc26_gost_3410_2012_512_paramSetB: gkp->hash_params = OBJ_nid2obj(NID_id_GostR3411_2012_512); } break; case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: pkey_param_nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(key_ptr)); gkp->hash_params = OBJ_nid2obj(NID_id_GostR3411_94_CryptoProParamSet); break; } if (pkey_param_nid == NID_undef) { GOSTerr(GOST_F_ENCODE_GOST_ALGOR_PARAMS, GOST_R_INVALID_PARAMSET); goto err; } gkp->key_params = OBJ_nid2obj(pkey_param_nid); /* * gkp->cipher_params = OBJ_nid2obj(cipher_param_nid); */ params->length = i2d_GOST_KEY_PARAMS(gkp, ¶ms->data); if (params->length <= 0) { GOSTerr(GOST_F_ENCODE_GOST_ALGOR_PARAMS, ERR_R_MALLOC_FAILURE); goto err; } params->type = V_ASN1_SEQUENCE; result = 1; err: if (gkp) GOST_KEY_PARAMS_free(gkp); if (result == 0) { /* if error */ if (params) ASN1_STRING_free(params); return NULL; } return params; } static int gost_decode_nid_params(EVP_PKEY *pkey, int pkey_nid, int param_nid) { void *key_ptr = EVP_PKEY_get0(pkey); switch (pkey_nid) { case NID_id_GostR3410_2012_256: case NID_id_GostR3410_2012_512: case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: if (!key_ptr) { key_ptr = EC_KEY_new(); if (!EVP_PKEY_assign(pkey, pkey_nid, key_ptr)) { EC_KEY_free(key_ptr); break; } } return fill_GOST_EC_params(key_ptr, param_nid); } return 0; } /* * Parses GOST algorithm parameters from X509_ALGOR and modifies pkey setting * NID and parameters */ static int decode_gost_algor_params(EVP_PKEY *pkey, const X509_ALGOR *palg) { const ASN1_OBJECT *palg_obj = NULL; int ptype = V_ASN1_UNDEF; int pkey_nid = NID_undef, param_nid = NID_undef; ASN1_STRING *pval = NULL; const unsigned char *p; GOST_KEY_PARAMS *gkp = NULL; if (!pkey || !palg) return 0; X509_ALGOR_get0(&palg_obj, &ptype, (const void **)&pval, palg); if (ptype != V_ASN1_SEQUENCE) { GOSTerr(GOST_F_DECODE_GOST_ALGOR_PARAMS, GOST_R_BAD_KEY_PARAMETERS_FORMAT); return 0; } p = pval->data; pkey_nid = OBJ_obj2nid(palg_obj); gkp = d2i_GOST_KEY_PARAMS(NULL, &p, pval->length); if (!gkp) { GOSTerr(GOST_F_DECODE_GOST_ALGOR_PARAMS, GOST_R_BAD_PKEY_PARAMETERS_FORMAT); return 0; } param_nid = OBJ_obj2nid(gkp->key_params); GOST_KEY_PARAMS_free(gkp); if (!EVP_PKEY_set_type(pkey, pkey_nid)) { GOSTerr(GOST_F_DECODE_GOST_ALGOR_PARAMS, ERR_R_INTERNAL_ERROR); return 0; } return gost_decode_nid_params(pkey, pkey_nid, param_nid); } static int gost_set_priv_key(EVP_PKEY *pkey, BIGNUM *priv) { switch (EVP_PKEY_base_id(pkey)) { case NID_id_GostR3410_2012_512: case NID_id_GostR3410_2012_256: case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: { EC_KEY *ec = EVP_PKEY_get0(pkey); if (!ec) { ec = EC_KEY_new(); EVP_PKEY_assign(pkey, EVP_PKEY_base_id(pkey), ec); } if (!EC_KEY_set_private_key(ec, priv)) return 0; if (!EVP_PKEY_missing_parameters(pkey)) return gost_ec_compute_public(ec); break; } default: return 0; } return 1; } BIGNUM *gost_get0_priv_key(const EVP_PKEY *pkey) { switch (EVP_PKEY_base_id(pkey)) { case NID_id_GostR3410_2012_512: case NID_id_GostR3410_2012_256: case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: { EC_KEY *ec = EVP_PKEY_get0((EVP_PKEY *)pkey); if (ec) return (BIGNUM *)EC_KEY_get0_private_key(ec); break; } } return NULL; } /* * GOST CMS processing functions */ /* FIXME reaarange declarations */ static int pub_decode_gost_ec(EVP_PKEY *pk, const X509_PUBKEY *pub); static int gost_cms_set_kari_shared_info(EVP_PKEY_CTX *pctx, CMS_RecipientInfo *ri) { int ret = 0; X509_ALGOR *alg; ASN1_OCTET_STRING *ukm; /* Deal with originator */ X509_ALGOR *pubalg = NULL; ASN1_BIT_STRING *pubkey = NULL; EVP_PKEY *peer_key = NULL; X509_PUBKEY *tmp = NULL; int nid; unsigned char shared_key[64]; size_t shared_key_size = 64; const EVP_CIPHER *cipher = NULL; if (CMS_RecipientInfo_kari_get0_alg(ri, &alg, &ukm) == 0) goto err; if (CMS_RecipientInfo_kari_get0_orig_id(ri, &pubalg, &pubkey, NULL, NULL, NULL) == 0) goto err; nid = OBJ_obj2nid(alg->algorithm); if (alg->parameter->type != V_ASN1_SEQUENCE) goto err; switch (nid) { case NID_kuznyechik_kexp15: case NID_magma_kexp15: cipher = EVP_get_cipherbynid(nid); break; } if (cipher == NULL) { GOSTerr(GOST_F_GOST_CMS_SET_KARI_SHARED_INFO, GOST_R_CIPHER_NOT_FOUND); goto err; } if (EVP_PKEY_CTX_ctrl(pctx, -1, -1, EVP_PKEY_CTRL_SET_IV, ASN1_STRING_length(ukm), (void *)ASN1_STRING_get0_data(ukm)) <= 0) goto err; if (pubkey != NULL && pubalg != NULL) { const ASN1_OBJECT *paobj = NULL; int ptype = 0; const void *param = NULL; peer_key = EVP_PKEY_new(); tmp = X509_PUBKEY_new(); if ((peer_key == NULL) || (tmp == NULL)) { GOSTerr(GOST_F_GOST_CMS_SET_KARI_SHARED_INFO, ERR_R_MALLOC_FAILURE); goto err; } X509_ALGOR_get0(&paobj, &ptype, ¶m, pubalg); if (X509_PUBKEY_set0_param(tmp, (ASN1_OBJECT *)paobj, ptype, (void *)param, (unsigned char *)ASN1_STRING_get0_data(pubkey), ASN1_STRING_length(pubkey) ) == 0) { GOSTerr(GOST_F_GOST_CMS_SET_KARI_SHARED_INFO, GOST_R_PUBLIC_KEY_UNDEFINED); goto err; } if (pub_decode_gost_ec(peer_key, tmp) <= 0) { GOSTerr(GOST_F_GOST_CMS_SET_KARI_SHARED_INFO, GOST_R_ERROR_DECODING_PUBLIC_KEY); goto err; } if (EVP_PKEY_derive_set_peer(pctx, peer_key) <= 0) { GOSTerr(GOST_F_GOST_CMS_SET_KARI_SHARED_INFO, GOST_R_ERROR_SETTING_PEER_KEY); goto err; } } if (EVP_PKEY_derive(pctx, shared_key, &shared_key_size) <= 0) { GOSTerr(GOST_F_GOST_CMS_SET_KARI_SHARED_INFO, GOST_R_ERROR_COMPUTING_SHARED_KEY); goto err; } EVP_CIPHER_CTX_set_flags(CMS_RecipientInfo_kari_get0_ctx(ri), EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); if (EVP_DecryptInit_ex(CMS_RecipientInfo_kari_get0_ctx(ri), cipher, NULL, shared_key, ukm->data+24) == 0) goto err; ret = 1; err: EVP_PKEY_free(peer_key); if (ret == 0) { X509_PUBKEY_free(tmp); } return ret; } static int gost_cms_set_ktri_shared_info(EVP_PKEY_CTX *pctx, CMS_RecipientInfo *ri) { X509_ALGOR *alg; struct gost_pmeth_data *gctx = EVP_PKEY_CTX_get_data(pctx); CMS_RecipientInfo_ktri_get0_algs(ri, NULL, NULL, &alg); switch (OBJ_obj2nid(alg->algorithm)) { case NID_kuznyechik_kexp15: gctx->cipher_nid = NID_kuznyechik_ctr; break; case NID_magma_kexp15: gctx->cipher_nid = NID_magma_ctr; break; case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: case NID_id_GostR3410_2012_256: case NID_id_GostR3410_2012_512: gctx->cipher_nid = NID_id_Gost28147_89; break; default: GOSTerr(GOST_F_GOST_CMS_SET_KTRI_SHARED_INFO, GOST_R_UNSUPPORTED_RECIPIENT_INFO); return 0; } return 1; } static int gost_cms_set_shared_info(EVP_PKEY_CTX *pctx, CMS_RecipientInfo *ri) { switch(CMS_RecipientInfo_type(ri)) { case CMS_RECIPINFO_AGREE: return gost_cms_set_kari_shared_info(pctx, ri); break; case CMS_RECIPINFO_TRANS: return gost_cms_set_ktri_shared_info(pctx, ri); break; } GOSTerr(GOST_F_GOST_CMS_SET_SHARED_INFO, GOST_R_UNSUPPORTED_RECIPIENT_INFO); return 0; } static ASN1_STRING *gost_encode_cms_params(int ka_nid) { ASN1_STRING *ret = NULL; ASN1_STRING *params = ASN1_STRING_new(); /* It's a hack. We have only one OID here, so we can use * GOST_KEY_PARAMS which is a sequence of 3 OIDs, * the 1st one is mandatory and the rest are optional */ GOST_KEY_PARAMS *gkp = GOST_KEY_PARAMS_new(); if (params == NULL || gkp == NULL) { GOSTerr(GOST_F_GOST_ENCODE_CMS_PARAMS, ERR_R_MALLOC_FAILURE); goto end; } gkp->key_params = OBJ_nid2obj(ka_nid); params->length = i2d_GOST_KEY_PARAMS(gkp, ¶ms->data); if (params->length < 0) { GOSTerr(GOST_F_GOST_ENCODE_CMS_PARAMS, ERR_R_MALLOC_FAILURE); goto end; } params->type = V_ASN1_SEQUENCE; ret = params; end: GOST_KEY_PARAMS_free(gkp); if (ret == NULL) ASN1_STRING_free(params); return ret; } /* * Control function */ static int pkey_ctrl_gost(EVP_PKEY *pkey, int op, long arg1, void *arg2) { int nid = EVP_PKEY_base_id(pkey), md_nid = NID_undef; X509_ALGOR *alg1 = NULL, *alg2 = NULL; switch (nid) { case NID_id_GostR3410_2012_512: md_nid = NID_id_GostR3411_2012_512; break; case NID_id_GostR3410_2012_256: md_nid = NID_id_GostR3411_2012_256; break; case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: case NID_id_GostR3410_94: md_nid = NID_id_GostR3411_94; break; default: return -1; } switch (op) { case ASN1_PKEY_CTRL_PKCS7_SIGN: if (arg1 == 0) { PKCS7_SIGNER_INFO_get0_algs((PKCS7_SIGNER_INFO *)arg2, NULL, &alg1, &alg2); X509_ALGOR_set0(alg1, OBJ_nid2obj(md_nid), V_ASN1_NULL, 0); X509_ALGOR_set0(alg2, OBJ_nid2obj(nid), V_ASN1_NULL, 0); } return 1; #ifndef OPENSSL_NO_CMS case ASN1_PKEY_CTRL_CMS_SIGN: if (arg1 == 0) { CMS_SignerInfo_get0_algs((CMS_SignerInfo *)arg2, NULL, NULL, &alg1, &alg2); X509_ALGOR_set0(alg1, OBJ_nid2obj(md_nid), V_ASN1_NULL, 0); X509_ALGOR_set0(alg2, OBJ_nid2obj(nid), V_ASN1_NULL, 0); } return 1; #endif case ASN1_PKEY_CTRL_PKCS7_ENCRYPT: if (arg1 == 0) { /* Encryption */ ASN1_STRING *params = encode_gost_algor_params(pkey); if (!params) { return -1; } PKCS7_RECIP_INFO_get0_alg((PKCS7_RECIP_INFO *)arg2, &alg1); X509_ALGOR_set0(alg1, OBJ_nid2obj(EVP_PKEY_id(pkey)), V_ASN1_SEQUENCE, params); } return 1; #ifndef OPENSSL_NO_CMS case ASN1_PKEY_CTRL_CMS_ENVELOPE: if (arg1 == 0) { EVP_PKEY_CTX *pctx; CMS_RecipientInfo *ri = arg2; struct gost_pmeth_data *gctx = NULL; ASN1_STRING *params = NULL; pctx = CMS_RecipientInfo_get0_pkey_ctx(ri); if (!pctx) return 0; gctx = EVP_PKEY_CTX_get_data(pctx); switch (gctx->cipher_nid) { case NID_magma_ctr: case NID_kuznyechik_ctr: { int ka_nid; nid = (gctx->cipher_nid == NID_magma_ctr) ? NID_magma_kexp15 : NID_kuznyechik_kexp15; ka_nid = (EVP_PKEY_base_id(pkey) == NID_id_GostR3410_2012_256) ? NID_id_tc26_agreement_gost_3410_2012_256 : NID_id_tc26_agreement_gost_3410_2012_512; params = gost_encode_cms_params(ka_nid); } break; default: params = encode_gost_algor_params(pkey); break; } if (params == NULL) return -1; CMS_RecipientInfo_ktri_get0_algs((CMS_RecipientInfo *)arg2, NULL, NULL, &alg1); X509_ALGOR_set0(alg1, OBJ_nid2obj(nid), V_ASN1_SEQUENCE, params); } else { EVP_PKEY_CTX *pctx; CMS_RecipientInfo *ri = arg2; pctx = CMS_RecipientInfo_get0_pkey_ctx(ri); if (!pctx) return 0; return gost_cms_set_shared_info(pctx, ri); } return 1; #ifdef ASN1_PKEY_CTRL_CMS_RI_TYPE case ASN1_PKEY_CTRL_CMS_RI_TYPE: *(int *)arg2 = CMS_RECIPINFO_TRANS; return 1; case ASN1_PKEY_CTRL_CMS_IS_RI_TYPE_SUPPORTED: if (arg1 == CMS_RECIPINFO_AGREE || arg1 == CMS_RECIPINFO_TRANS) { *(int *)arg2 = 1; return 1; } else return 0; break; #endif #endif case ASN1_PKEY_CTRL_DEFAULT_MD_NID: *(int *)arg2 = md_nid; return 2; } return -2; } /* --------------------- free functions * ------------------------------*/ static void pkey_free_gost_ec(EVP_PKEY *key) { EC_KEY_free((EC_KEY *)EVP_PKEY_get0(key)); } /* ------------------ private key functions -----------------------------*/ static BIGNUM *unmask_priv_key(EVP_PKEY *pk, const unsigned char *buf, int len, int num_masks) { BIGNUM *pknum_masked = NULL, *q = NULL; const EC_KEY *key_ptr = (pk) ? EVP_PKEY_get0(pk) : NULL; const EC_GROUP *group = (key_ptr) ? EC_KEY_get0_group(key_ptr) : NULL; pknum_masked = BN_lebin2bn(buf, len, BN_secure_new()); if (!pknum_masked) return NULL; if (num_masks > 0) { /* * XXX Remove sign by gost94 */ const unsigned char *p = buf + num_masks * len; q = BN_new(); if (!q || !group || EC_GROUP_get_order(group, q, NULL) <= 0) { BN_free(pknum_masked); pknum_masked = NULL; goto end; } for (; p != buf; p -= len) { BIGNUM *mask = BN_lebin2bn(p, len, BN_secure_new()); BN_CTX *ctx = BN_CTX_secure_new(); BN_mod_mul(pknum_masked, pknum_masked, mask, q, ctx); BN_CTX_free(ctx); BN_free(mask); } } end: if (q) BN_free(q); return pknum_masked; } static int priv_decode_gost(EVP_PKEY *pk, const PKCS8_PRIV_KEY_INFO *p8inf) { const unsigned char *pkey_buf = NULL, *p = NULL; int priv_len = 0; BIGNUM *pk_num = NULL; int ret = 0; const X509_ALGOR *palg = NULL; const ASN1_OBJECT *palg_obj = NULL; ASN1_INTEGER *priv_key = NULL; int expected_key_len; if (!PKCS8_pkey_get0(&palg_obj, &pkey_buf, &priv_len, &palg, p8inf)) return 0; p = pkey_buf; if (!decode_gost_algor_params(pk, palg)) { return 0; } expected_key_len = pkey_bits_gost(pk) > 0 ? pkey_bits_gost(pk) / 8 : 0; if (expected_key_len == 0) { GOSTerr(GOST_F_PRIV_DECODE_GOST, EVP_R_DECODE_ERROR); return 0; } if (priv_len % expected_key_len == 0) { /* Key is not wrapped but masked */ pk_num = unmask_priv_key(pk, pkey_buf, expected_key_len, priv_len / expected_key_len - 1); } else if (V_ASN1_OCTET_STRING == *p) { /* New format - Little endian octet string */ ASN1_OCTET_STRING *s = d2i_ASN1_OCTET_STRING(NULL, &p, priv_len); if (!s || ((s->length != 32) && (s->length != 64))) { ASN1_STRING_free(s); GOSTerr(GOST_F_PRIV_DECODE_GOST, EVP_R_DECODE_ERROR); return 0; } pk_num = BN_lebin2bn(s->data, s->length, BN_secure_new()); ASN1_STRING_free(s); } else if (V_ASN1_INTEGER == *p) { priv_key = d2i_ASN1_INTEGER(NULL, &p, priv_len); if (!priv_key) { GOSTerr(GOST_F_PRIV_DECODE_GOST, EVP_R_DECODE_ERROR); return 0; } pk_num = ASN1_INTEGER_to_BN(priv_key, BN_secure_new()); ASN1_INTEGER_free(priv_key); } else if ((V_ASN1_SEQUENCE | V_ASN1_CONSTRUCTED) == *p) { MASKED_GOST_KEY *mgk = d2i_MASKED_GOST_KEY(NULL, &p, priv_len); if (!mgk) { GOSTerr(GOST_F_PRIV_DECODE_GOST, EVP_R_DECODE_ERROR); return 0; } priv_len = mgk->masked_priv_key->length; if (priv_len % expected_key_len) { MASKED_GOST_KEY_free(mgk); GOSTerr(GOST_F_PRIV_DECODE_GOST, EVP_R_DECODE_ERROR); return 0; } pk_num = unmask_priv_key(pk, mgk->masked_priv_key->data, expected_key_len, priv_len / expected_key_len - 1); MASKED_GOST_KEY_free(mgk); } else { GOSTerr(GOST_F_PRIV_DECODE_GOST, EVP_R_DECODE_ERROR); return 0; } if (pk_num == NULL) { GOSTerr(GOST_F_PRIV_DECODE_GOST, EVP_R_DECODE_ERROR); return 0; } ret = gost_set_priv_key(pk, pk_num); BN_free(pk_num); return ret; } /* ----------------------------------------------------------------------*/ static int priv_encode_gost(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pk) { ASN1_OBJECT *algobj = OBJ_nid2obj(EVP_PKEY_base_id(pk)); ASN1_STRING *params = NULL; unsigned char *buf = NULL; int key_len = pkey_bits_gost(pk), i = 0; /* unmasked private key */ const char *pk_format = get_gost_engine_param(GOST_PARAM_PK_FORMAT); key_len = (key_len < 0) ? 0 : key_len / 8; if (key_len == 0 || !(buf = OPENSSL_secure_malloc(key_len))) { return 0; } if (!store_bignum(gost_get0_priv_key(pk), buf, key_len)) { OPENSSL_secure_free(buf); return 0; } params = encode_gost_algor_params(pk); if (!params) { OPENSSL_secure_free(buf); return 0; } /* Convert buf to Little-endian */ for (i = 0; i < key_len / 2; i++) { unsigned char tmp = buf[i]; buf[i] = buf[key_len - 1 - i]; buf[key_len - 1 - i] = tmp; } if (pk_format != NULL && strcmp(pk_format, PK_WRAP_PARAM) == 0) { ASN1_STRING *octet = ASN1_STRING_new(); int priv_len = 0; unsigned char *priv_buf = NULL; if (!octet || !ASN1_OCTET_STRING_set(octet, buf, key_len)) { ASN1_STRING_free(octet); ASN1_STRING_free(params); OPENSSL_secure_free(buf); return 0; } priv_len = i2d_ASN1_OCTET_STRING(octet, &priv_buf); ASN1_STRING_free(octet); OPENSSL_secure_free(buf); return PKCS8_pkey_set0(p8, algobj, 0, V_ASN1_SEQUENCE, params, priv_buf, priv_len); } return PKCS8_pkey_set0(p8, algobj, 0, V_ASN1_SEQUENCE, params, buf, key_len); } /* --------- printing keys --------------------------------*/ static int print_gost_priv(BIO *out, const EVP_PKEY *pkey, int indent) { BIGNUM *key; if (!BIO_indent(out, indent, 128)) return 0; BIO_printf(out, "Private key: "); key = gost_get0_priv_key(pkey); if (!key) BIO_printf(out, ""); else BN_print(out, key); BIO_printf(out, "\n"); return 1; } static int print_gost_ec_pub(BIO *out, const EVP_PKEY *pkey, int indent) { BN_CTX *ctx; BIGNUM *X, *Y; const EC_POINT *pubkey; const EC_GROUP *group; EC_KEY *key = (EC_KEY *)EVP_PKEY_get0((EVP_PKEY *)pkey); int ok = 0; ctx = BN_CTX_new(); if (!ctx) { GOSTerr(GOST_F_PRINT_GOST_EC_PUB, ERR_R_MALLOC_FAILURE); return 0; } BN_CTX_start(ctx); X = BN_CTX_get(ctx); Y = BN_CTX_get(ctx); pubkey = (key) ? EC_KEY_get0_public_key(key) : NULL; group = (key) ? EC_KEY_get0_group(key) : NULL; if (!pubkey || !group) goto err; if (!EC_POINT_get_affine_coordinates(group, pubkey, X, Y, ctx)) { GOSTerr(GOST_F_PRINT_GOST_EC_PUB, ERR_R_EC_LIB); goto err; } if (!BIO_indent(out, indent, 128)) goto err; BIO_printf(out, "Public key:\n"); if (!BIO_indent(out, indent + 3, 128)) goto err; BIO_printf(out, "X:"); BN_print(out, X); BIO_printf(out, "\n"); if (!BIO_indent(out, indent + 3, 128)) goto err; BIO_printf(out, "Y:"); BN_print(out, Y); BIO_printf(out, "\n"); ok = 1; err: BN_CTX_end(ctx); BN_CTX_free(ctx); return ok; } static int print_gost_ec_param(BIO *out, const EVP_PKEY *pkey, int indent) { EC_KEY *ec = EVP_PKEY_get0((EVP_PKEY *)pkey); const EC_GROUP *group = (ec) ? EC_KEY_get0_group(ec) : NULL; int param_nid; if (!group) return 0; param_nid = EC_GROUP_get_curve_name(group); if (!BIO_indent(out, indent, 128)) return 0; BIO_printf(out, "Parameter set: %s\n", OBJ_nid2ln(param_nid)); return 1; } static int print_gost_ec(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx, int type) { if (type == 2) { if (print_gost_priv(out, pkey, indent) == 0) return 0; } if (type >= 1) { if (print_gost_ec_pub(out, pkey, indent) == 0) return 0; } return print_gost_ec_param(out, pkey, indent); } static int param_print_gost_ec(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx) { return print_gost_ec(out, pkey, indent, pctx, 0); } static int pub_print_gost_ec(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx) { return print_gost_ec(out, pkey, indent, pctx, 1); } static int priv_print_gost_ec(BIO *out, const EVP_PKEY *pkey, int indent, ASN1_PCTX *pctx) { return print_gost_ec(out, pkey, indent, pctx, 2); } /* ---------------------------------------------------------------------*/ static int param_missing_gost_ec(const EVP_PKEY *pk) { const EC_KEY *ec = EVP_PKEY_get0((EVP_PKEY *)pk); if (!ec) return 1; if (!EC_KEY_get0_group(ec)) return 1; return 0; } static int param_copy_gost_ec(EVP_PKEY *to, const EVP_PKEY *from) { EC_KEY *eto = EVP_PKEY_get0(to); const EC_KEY *efrom = EVP_PKEY_get0((EVP_PKEY *)from); if (EVP_PKEY_base_id(from) != EVP_PKEY_base_id(to)) { GOSTerr(GOST_F_PARAM_COPY_GOST_EC, GOST_R_INCOMPATIBLE_ALGORITHMS); return 0; } if (!efrom) { GOSTerr(GOST_F_PARAM_COPY_GOST_EC, GOST_R_KEY_PARAMETERS_MISSING); return 0; } if (!eto) { eto = EC_KEY_new(); if (!eto) { GOSTerr(GOST_F_PARAM_COPY_GOST_EC, ERR_R_MALLOC_FAILURE); return 0; } if (!EVP_PKEY_assign(to, EVP_PKEY_base_id(from), eto)) { GOSTerr(GOST_F_PARAM_COPY_GOST_EC, ERR_R_INTERNAL_ERROR); EC_KEY_free(eto); return 0; } } if (!EC_KEY_set_group(eto, EC_KEY_get0_group(efrom))) { GOSTerr(GOST_F_PARAM_COPY_GOST_EC, ERR_R_INTERNAL_ERROR); return 0; } if (EC_KEY_get0_private_key(eto)) { return gost_ec_compute_public(eto); } return 1; } static int param_cmp_gost_ec(const EVP_PKEY *a, const EVP_PKEY *b) { const EC_GROUP *group_a, *group_b; EC_KEY *ec_a = EVP_PKEY_get0((EVP_PKEY *)a); EC_KEY *ec_b = EVP_PKEY_get0((EVP_PKEY *)b); if (!ec_a || !ec_b) return 0; group_a = EC_KEY_get0_group(ec_a); group_b = EC_KEY_get0_group(ec_b); if (!group_a || !group_b) return 0; if (EC_GROUP_get_curve_name(group_a) == EC_GROUP_get_curve_name(group_b)) { return 1; } return 0; } /* ---------- Public key functions * --------------------------------------*/ static int pub_decode_gost_ec(EVP_PKEY *pk, const X509_PUBKEY *pub) { X509_ALGOR *palg = NULL; const unsigned char *pubkey_buf = NULL; unsigned char *databuf = NULL; ASN1_OBJECT *palgobj = NULL; int pub_len; EC_POINT *pub_key = NULL; BIGNUM *X = NULL, *Y = NULL; ASN1_OCTET_STRING *octet = NULL; size_t len; const EC_GROUP *group; int retval = 0; if (!X509_PUBKEY_get0_param(&palgobj, &pubkey_buf, &pub_len, &palg, pub)) goto ret; EVP_PKEY_assign(pk, OBJ_obj2nid(palgobj), NULL); if (!decode_gost_algor_params(pk, palg)) goto ret; group = EC_KEY_get0_group(EVP_PKEY_get0(pk)); octet = d2i_ASN1_OCTET_STRING(NULL, &pubkey_buf, pub_len); if (!octet) { GOSTerr(GOST_F_PUB_DECODE_GOST_EC, ERR_R_MALLOC_FAILURE); goto ret; } databuf = OPENSSL_malloc(octet->length); if (!databuf) { GOSTerr(GOST_F_PUB_DECODE_GOST_EC, ERR_R_MALLOC_FAILURE); goto ret; } BUF_reverse(databuf, octet->data, octet->length); len = octet->length / 2; Y = BN_bin2bn(databuf, len, NULL); X = BN_bin2bn(databuf + len, len, NULL); if (!X || !Y) { GOSTerr(GOST_F_PUB_DECODE_GOST_EC, ERR_R_BN_LIB); goto ret; } pub_key = EC_POINT_new(group); if (!EC_POINT_set_affine_coordinates(group, pub_key, X, Y, NULL)) { GOSTerr(GOST_F_PUB_DECODE_GOST_EC, ERR_R_EC_LIB); goto ret; } retval = EC_KEY_set_public_key(EVP_PKEY_get0(pk), pub_key); if (!retval) GOSTerr(GOST_F_PUB_DECODE_GOST_EC, ERR_R_EC_LIB); ret: EC_POINT_free(pub_key); BN_free(X); BN_free(Y); OPENSSL_free(databuf); ASN1_OCTET_STRING_free(octet); return retval; } static int pub_encode_gost_ec(X509_PUBKEY *pub, const EVP_PKEY *pk) { ASN1_OBJECT *algobj; ASN1_OCTET_STRING *octet = NULL; void *pval; unsigned char *buf = NULL, *databuf = NULL; int data_len, ret = -1; const EC_POINT *pub_key; BIGNUM *X = NULL, *Y = NULL, *order; const EC_KEY *ec = EVP_PKEY_get0((EVP_PKEY *)pk); int ptype = V_ASN1_SEQUENCE; ASN1_STRING *params; algobj = OBJ_nid2obj(EVP_PKEY_base_id(pk)); params = encode_gost_algor_params(pk); pval = params; order = BN_new(); if (order == NULL || EC_GROUP_get_order(EC_KEY_get0_group(ec), order, NULL) == 0) { GOSTerr(GOST_F_PUB_ENCODE_GOST_EC, ERR_R_MALLOC_FAILURE); goto err; } if (EC_GROUP_get_order(EC_KEY_get0_group(ec), order, NULL) == 0) { GOSTerr(GOST_F_PUB_ENCODE_GOST_EC, ERR_R_INTERNAL_ERROR); goto err; } pub_key = EC_KEY_get0_public_key(ec); if (!pub_key) { GOSTerr(GOST_F_PUB_ENCODE_GOST_EC, GOST_R_PUBLIC_KEY_UNDEFINED); goto err; } X = BN_new(); Y = BN_new(); if (!X || !Y) { GOSTerr(GOST_F_PUB_ENCODE_GOST_EC, ERR_R_MALLOC_FAILURE); goto err; } if (!EC_POINT_get_affine_coordinates(EC_KEY_get0_group(ec), pub_key, X, Y, NULL)) { GOSTerr(GOST_F_PUB_ENCODE_GOST_EC, ERR_R_INTERNAL_ERROR); goto err; } data_len = 2 * BN_num_bytes(order); databuf = OPENSSL_zalloc(data_len); if (databuf == NULL) { GOSTerr(GOST_F_PUB_ENCODE_GOST_EC, ERR_R_MALLOC_FAILURE); goto err; } store_bignum(X, databuf + data_len / 2, data_len / 2); store_bignum(Y, databuf, data_len / 2); BUF_reverse(databuf, NULL, data_len); octet = ASN1_OCTET_STRING_new(); if (octet == NULL) { GOSTerr(GOST_F_PUB_ENCODE_GOST_EC, ERR_R_MALLOC_FAILURE); goto err; } if (0 == ASN1_STRING_set(octet, databuf, data_len)) { GOSTerr(GOST_F_PUB_ENCODE_GOST_EC, ERR_R_MALLOC_FAILURE); goto err; } ret = i2d_ASN1_OCTET_STRING(octet, &buf); err: ASN1_BIT_STRING_free(octet); if (X) BN_free(X); if (Y) BN_free(Y); if (order) BN_free(order); if (databuf) OPENSSL_free(databuf); if (ret < 0) return 0; return X509_PUBKEY_set0_param(pub, algobj, ptype, pval, buf, ret); } static int pub_cmp_gost_ec(const EVP_PKEY *a, const EVP_PKEY *b) { const EC_KEY *ea = EVP_PKEY_get0((EVP_PKEY *)a); const EC_KEY *eb = EVP_PKEY_get0((EVP_PKEY *)b); const EC_POINT *ka, *kb; if (!ea || !eb) return 0; ka = EC_KEY_get0_public_key(ea); kb = EC_KEY_get0_public_key(eb); if (!ka || !kb) return 0; return (0 == EC_POINT_cmp(EC_KEY_get0_group(ea), ka, kb, NULL)); } static int pkey_size_gost(const EVP_PKEY *pk) { if (!pk) return -1; switch (EVP_PKEY_base_id(pk)) { case NID_id_GostR3410_94: case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: case NID_id_GostR3410_2012_256: return 64; case NID_id_GostR3410_2012_512: return 128; } return -1; } /* ---------------------- ASN1 METHOD for GOST MAC -------------------*/ static void mackey_free_gost(EVP_PKEY *pk) { OPENSSL_free(EVP_PKEY_get0(pk)); } static int mac_ctrl_gost(EVP_PKEY *pkey, int op, long arg1, void *arg2) { switch (op) { case ASN1_PKEY_CTRL_DEFAULT_MD_NID: if (arg2) { *(int *)arg2 = NID_id_Gost28147_89_MAC; return 2; } } return -2; } static int mac_ctrl_gost_12(EVP_PKEY *pkey, int op, long arg1, void *arg2) { switch (op) { case ASN1_PKEY_CTRL_DEFAULT_MD_NID: if (arg2) { *(int *)arg2 = NID_gost_mac_12; return 2; } } return -2; } static int mac_ctrl_magma(EVP_PKEY *pkey, int op, long arg1, void *arg2) { switch (op) { case ASN1_PKEY_CTRL_DEFAULT_MD_NID: if (arg2) { *(int *)arg2 = NID_magma_mac; return 2; } } return -2; } static int mac_ctrl_grasshopper(EVP_PKEY *pkey, int op, long arg1, void *arg2) { switch (op) { case ASN1_PKEY_CTRL_DEFAULT_MD_NID: if (arg2) { *(int *)arg2 = NID_grasshopper_mac; return 2; } } return -2; } static int gost2001_param_encode(const EVP_PKEY *pkey, unsigned char **pder) { int nid = EC_GROUP_get_curve_name(EC_KEY_get0_group (EVP_PKEY_get0((EVP_PKEY *)pkey))); return i2d_ASN1_OBJECT(OBJ_nid2obj(nid), pder); } static int gost2001_param_decode(EVP_PKEY *pkey, const unsigned char **pder, int derlen) { ASN1_OBJECT *obj = NULL; int nid; if (d2i_ASN1_OBJECT(&obj, pder, derlen) == NULL) { return 0; } nid = OBJ_obj2nid(obj); ASN1_OBJECT_free(obj); return gost_decode_nid_params(pkey, NID_id_GostR3410_2001, nid); } /* ----------------------------------------------------------------------*/ int register_ameth_gost(int nid, EVP_PKEY_ASN1_METHOD **ameth, const char *pemstr, const char *info) { *ameth = EVP_PKEY_asn1_new(nid, ASN1_PKEY_SIGPARAM_NULL, pemstr, info); if (!*ameth) return 0; switch (nid) { case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: EVP_PKEY_asn1_set_free(*ameth, pkey_free_gost_ec); EVP_PKEY_asn1_set_private(*ameth, priv_decode_gost, priv_encode_gost, priv_print_gost_ec); EVP_PKEY_asn1_set_param(*ameth, gost2001_param_decode, gost2001_param_encode, param_missing_gost_ec, param_copy_gost_ec, param_cmp_gost_ec, param_print_gost_ec); EVP_PKEY_asn1_set_public(*ameth, pub_decode_gost_ec, pub_encode_gost_ec, pub_cmp_gost_ec, pub_print_gost_ec, pkey_size_gost, pkey_bits_gost); EVP_PKEY_asn1_set_ctrl(*ameth, pkey_ctrl_gost); EVP_PKEY_asn1_set_security_bits(*ameth, pkey_bits_gost); break; case NID_id_GostR3410_2012_256: case NID_id_GostR3410_2012_512: EVP_PKEY_asn1_set_free(*ameth, pkey_free_gost_ec); EVP_PKEY_asn1_set_private(*ameth, priv_decode_gost, priv_encode_gost, priv_print_gost_ec); EVP_PKEY_asn1_set_param(*ameth, NULL, NULL, param_missing_gost_ec, param_copy_gost_ec, param_cmp_gost_ec, NULL); EVP_PKEY_asn1_set_public(*ameth, pub_decode_gost_ec, pub_encode_gost_ec, pub_cmp_gost_ec, pub_print_gost_ec, pkey_size_gost, pkey_bits_gost); EVP_PKEY_asn1_set_ctrl(*ameth, pkey_ctrl_gost); EVP_PKEY_asn1_set_security_bits(*ameth, pkey_bits_gost); break; case NID_id_Gost28147_89_MAC: EVP_PKEY_asn1_set_free(*ameth, mackey_free_gost); EVP_PKEY_asn1_set_ctrl(*ameth, mac_ctrl_gost); break; case NID_gost_mac_12: EVP_PKEY_asn1_set_free(*ameth, mackey_free_gost); EVP_PKEY_asn1_set_ctrl(*ameth, mac_ctrl_gost_12); break; case NID_magma_mac: EVP_PKEY_asn1_set_free(*ameth, mackey_free_gost); EVP_PKEY_asn1_set_ctrl(*ameth, mac_ctrl_magma); break; case NID_grasshopper_mac: EVP_PKEY_asn1_set_free(*ameth, mackey_free_gost); EVP_PKEY_asn1_set_ctrl(*ameth, mac_ctrl_grasshopper); break; } return 1; } libengine-gost-openssl-3.0.2/gost_asn1.c000066400000000000000000000062441446070765000201640ustar00rootroot00000000000000/********************************************************************** * gost_keytrans.c * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * ASN1 structure definition for GOST key transport * * Requires OpenSSL 0.9.9 for compilation * **********************************************************************/ #include #include #include #include "gost_lcl.h" ASN1_NDEF_SEQUENCE(GOST_KEY_TRANSPORT) = { ASN1_SIMPLE(GOST_KEY_TRANSPORT, key_info, GOST_KEY_INFO), ASN1_IMP(GOST_KEY_TRANSPORT, key_agreement_info, GOST_KEY_AGREEMENT_INFO, 0) } ASN1_NDEF_SEQUENCE_END(GOST_KEY_TRANSPORT) IMPLEMENT_ASN1_FUNCTIONS(GOST_KEY_TRANSPORT) ASN1_NDEF_SEQUENCE(GOST_KEY_INFO) = { ASN1_SIMPLE(GOST_KEY_INFO, encrypted_key, ASN1_OCTET_STRING), ASN1_SIMPLE(GOST_KEY_INFO, imit, ASN1_OCTET_STRING) } ASN1_NDEF_SEQUENCE_END(GOST_KEY_INFO) IMPLEMENT_ASN1_FUNCTIONS(GOST_KEY_INFO) ASN1_NDEF_SEQUENCE(GOST_KEY_AGREEMENT_INFO) = { ASN1_SIMPLE(GOST_KEY_AGREEMENT_INFO, cipher, ASN1_OBJECT), ASN1_IMP_OPT(GOST_KEY_AGREEMENT_INFO, ephem_key, X509_PUBKEY, 0), ASN1_SIMPLE(GOST_KEY_AGREEMENT_INFO, eph_iv, ASN1_OCTET_STRING) } ASN1_NDEF_SEQUENCE_END(GOST_KEY_AGREEMENT_INFO) IMPLEMENT_ASN1_FUNCTIONS(GOST_KEY_AGREEMENT_INFO) ASN1_NDEF_SEQUENCE(GOST_KEY_PARAMS) = { ASN1_SIMPLE(GOST_KEY_PARAMS, key_params, ASN1_OBJECT), ASN1_OPT(GOST_KEY_PARAMS, hash_params, ASN1_OBJECT), ASN1_OPT(GOST_KEY_PARAMS, cipher_params, ASN1_OBJECT), } ASN1_NDEF_SEQUENCE_END(GOST_KEY_PARAMS) IMPLEMENT_ASN1_FUNCTIONS(GOST_KEY_PARAMS) ASN1_NDEF_SEQUENCE(GOST_CIPHER_PARAMS) = { ASN1_SIMPLE(GOST_CIPHER_PARAMS, iv, ASN1_OCTET_STRING), ASN1_SIMPLE(GOST_CIPHER_PARAMS, enc_param_set, ASN1_OBJECT), } ASN1_NDEF_SEQUENCE_END(GOST_CIPHER_PARAMS) IMPLEMENT_ASN1_FUNCTIONS(GOST_CIPHER_PARAMS) ASN1_NDEF_SEQUENCE(GOST2015_CIPHER_PARAMS) = { ASN1_SIMPLE(GOST2015_CIPHER_PARAMS, ukm, ASN1_OCTET_STRING), } ASN1_NDEF_SEQUENCE_END(GOST2015_CIPHER_PARAMS) IMPLEMENT_ASN1_FUNCTIONS(GOST2015_CIPHER_PARAMS) ASN1_NDEF_SEQUENCE(GOST_CLIENT_KEY_EXCHANGE_PARAMS) = { /* FIXME incomplete */ ASN1_SIMPLE(GOST_CLIENT_KEY_EXCHANGE_PARAMS, gkt, GOST_KEY_TRANSPORT) } ASN1_NDEF_SEQUENCE_END(GOST_CLIENT_KEY_EXCHANGE_PARAMS) IMPLEMENT_ASN1_FUNCTIONS(GOST_CLIENT_KEY_EXCHANGE_PARAMS) ASN1_NDEF_SEQUENCE(MASKED_GOST_KEY) = { ASN1_SIMPLE(MASKED_GOST_KEY, masked_priv_key, ASN1_OCTET_STRING), ASN1_SIMPLE(MASKED_GOST_KEY, public_key, ASN1_OCTET_STRING) } ASN1_NDEF_SEQUENCE_END(MASKED_GOST_KEY) IMPLEMENT_ASN1_FUNCTIONS(MASKED_GOST_KEY) /* draft-smyshlyaev-tls12-gost-suites */ ASN1_NDEF_SEQUENCE(PSKeyTransport_gost) = { ASN1_SIMPLE(PSKeyTransport_gost, psexp, ASN1_OCTET_STRING), ASN1_SIMPLE(PSKeyTransport_gost, ephem_key, X509_PUBKEY), ASN1_OPT(PSKeyTransport_gost, ukm, ASN1_OCTET_STRING) } ASN1_NDEF_SEQUENCE_END(PSKeyTransport_gost) IMPLEMENT_ASN1_FUNCTIONS(PSKeyTransport_gost) libengine-gost-openssl-3.0.2/gost_crypt.c000066400000000000000000001453161446070765000204670ustar00rootroot00000000000000/********************************************************************** * gost_crypt.c - Initialize all ciphers * * * * Copyright (c) 2005-2006 Cryptocom LTD * * Copyright (c) 2020 Chikunov Vitaly * * This file is distributed under the same license as OpenSSL * * * * OpenSSL interface to GOST 28147-89 cipher functions * * Requires OpenSSL 0.9.9 for compilation * **********************************************************************/ #include #include "gost89.h" #include #include #include "e_gost_err.h" #include "gost_lcl.h" #include "gost_gost2015.h" #if !defined(CCGOST_DEBUG) && !defined(DEBUG) # ifndef NDEBUG # define NDEBUG # endif #endif #include static int gost_cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); static int gost_cipher_init_cbc(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); static int gost_cipher_init_cpa(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); static int gost_cipher_init_cp_12(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); /* Handles block of data in CFB mode */ static int gost_cipher_do_cfb(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl); /* Handles block of data in CBC mode */ static int gost_cipher_do_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl); /* Handles block of data in CNT mode */ static int gost_cipher_do_cnt(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl); /* Cleanup function */ static int gost_cipher_cleanup(EVP_CIPHER_CTX *); static int gost_magma_mgm_cleanup(EVP_CIPHER_CTX *c); /* set/get cipher parameters */ static int gost89_set_asn1_parameters(EVP_CIPHER_CTX *ctx, ASN1_TYPE *params); static int gost89_get_asn1_parameters(EVP_CIPHER_CTX *ctx, ASN1_TYPE *params); /* Control function */ static int gost_cipher_ctl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); static int magma_cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); static int magma_cipher_init_ctr_acpkm_omac(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); static int gost_magma_cipher_init_mgm(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); /* Handles block of data in CBC mode */ static int magma_cipher_do_ecb(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl); static int magma_cipher_do_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl); static int magma_cipher_do_ctr(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl); static int magma_cipher_do_ctr_acpkm_omac(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl); static int gost_magma_cipher_do_mgm(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t len); /* set/get cipher parameters */ static int magma_set_asn1_parameters(EVP_CIPHER_CTX *ctx, ASN1_TYPE *params); static int magma_get_asn1_parameters(EVP_CIPHER_CTX *ctx, ASN1_TYPE *params); /* Control function */ static int magma_cipher_ctl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); static int magma_cipher_ctl_acpkm_omac(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); static int gost_magma_mgm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr); /* * Single level template accessor. * Note: that you cannot template 0 value. */ #define TPL(st,field) ( \ ((st)->field) ? ((st)->field) : TPL_VAL(st,field) \ ) #define TPL_VAL(st,field) ( \ ((st)->template ? (st)->template->field : 0) \ ) EVP_CIPHER *GOST_init_cipher(GOST_cipher *c) { if (c->cipher) return c->cipher; /* Some sanity checking. */ int flags = c->flags | TPL_VAL(c, flags); int block_size = TPL(c, block_size); switch (flags & EVP_CIPH_MODE) { case EVP_CIPH_CBC_MODE: case EVP_CIPH_ECB_MODE: case EVP_CIPH_WRAP_MODE: OPENSSL_assert(block_size != 1); OPENSSL_assert(!(flags & EVP_CIPH_NO_PADDING)); break; default: OPENSSL_assert(block_size == 1); OPENSSL_assert(flags & EVP_CIPH_NO_PADDING); } if (TPL(c, iv_len)) OPENSSL_assert(flags & EVP_CIPH_CUSTOM_IV); else OPENSSL_assert(!(flags & EVP_CIPH_CUSTOM_IV)); EVP_CIPHER *cipher; if (!(cipher = EVP_CIPHER_meth_new(c->nid, block_size, TPL(c, key_len))) || !EVP_CIPHER_meth_set_iv_length(cipher, TPL(c, iv_len)) || !EVP_CIPHER_meth_set_flags(cipher, flags) || !EVP_CIPHER_meth_set_init(cipher, TPL(c, init)) || !EVP_CIPHER_meth_set_do_cipher(cipher, TPL(c, do_cipher)) || !EVP_CIPHER_meth_set_cleanup(cipher, TPL(c, cleanup)) || !EVP_CIPHER_meth_set_impl_ctx_size(cipher, TPL(c, ctx_size)) || !EVP_CIPHER_meth_set_set_asn1_params(cipher, TPL(c, set_asn1_parameters)) || !EVP_CIPHER_meth_set_get_asn1_params(cipher, TPL(c, get_asn1_parameters)) || !EVP_CIPHER_meth_set_ctrl(cipher, TPL(c, ctrl))) { EVP_CIPHER_meth_free(cipher); cipher = NULL; } c->cipher = cipher; return c->cipher; } void GOST_deinit_cipher(GOST_cipher *c) { if (c->cipher) { EVP_CIPHER_meth_free(c->cipher); c->cipher = NULL; } } static GOST_cipher gost_template_cipher = { .block_size = 8, .key_len = 32, .iv_len = 8, .flags = EVP_CIPH_CUSTOM_IV | EVP_CIPH_RAND_KEY | EVP_CIPH_ALWAYS_CALL_INIT, .cleanup = gost_cipher_cleanup, .ctx_size = sizeof(struct ossl_gost_cipher_ctx), .set_asn1_parameters = gost89_set_asn1_parameters, .get_asn1_parameters = gost89_get_asn1_parameters, .ctrl = gost_cipher_ctl, }; GOST_cipher Gost28147_89_cipher = { .nid = NID_id_Gost28147_89, .template = &gost_template_cipher, .block_size = 1, .flags = EVP_CIPH_CFB_MODE | EVP_CIPH_NO_PADDING, .init = gost_cipher_init, .do_cipher = gost_cipher_do_cfb, }; GOST_cipher Gost28147_89_cbc_cipher = { .nid = NID_gost89_cbc, .template = &gost_template_cipher, .flags = EVP_CIPH_CBC_MODE, .init = gost_cipher_init_cbc, .do_cipher = gost_cipher_do_cbc, }; GOST_cipher Gost28147_89_cnt_cipher = { .nid = NID_gost89_cnt, .template = &gost_template_cipher, .block_size = 1, .flags = EVP_CIPH_OFB_MODE | EVP_CIPH_NO_PADDING, .init = gost_cipher_init_cpa, .do_cipher = gost_cipher_do_cnt, }; GOST_cipher Gost28147_89_cnt_12_cipher = { .nid = NID_gost89_cnt_12, .template = &gost_template_cipher, .block_size = 1, .flags = EVP_CIPH_OFB_MODE | EVP_CIPH_NO_PADDING, .init = gost_cipher_init_cp_12, .do_cipher = gost_cipher_do_cnt, }; static GOST_cipher magma_template_cipher = { .block_size = 8, .key_len = 32, .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_ALWAYS_CALL_INIT, .cleanup = gost_cipher_cleanup, .ctx_size = sizeof(struct ossl_gost_cipher_ctx), .set_asn1_parameters = magma_set_asn1_parameters, .get_asn1_parameters = magma_get_asn1_parameters, .do_cipher = magma_cipher_do_ctr, .ctrl = magma_cipher_ctl, }; GOST_cipher magma_ctr_cipher = { .nid = NID_magma_ctr, .template = &magma_template_cipher, .block_size = 1, .iv_len = 4, .flags = EVP_CIPH_CTR_MODE | EVP_CIPH_CUSTOM_IV | EVP_CIPH_NO_PADDING, .init = magma_cipher_init, }; GOST_cipher magma_ctr_acpkm_cipher = { .nid = NID_magma_ctr_acpkm, .template = &magma_template_cipher, .block_size = 1, .iv_len = 4, .flags = EVP_CIPH_CTR_MODE | EVP_CIPH_CUSTOM_IV | EVP_CIPH_NO_PADDING, .init = magma_cipher_init, }; GOST_cipher magma_ctr_acpkm_omac_cipher = { .nid = NID_magma_ctr_acpkm_omac, .template = &magma_template_cipher, .block_size = 1, .iv_len = 4, .flags = EVP_CIPH_CTR_MODE | EVP_CIPH_CUSTOM_IV | EVP_CIPH_NO_PADDING | EVP_CIPH_CUSTOM_COPY | EVP_CIPH_FLAG_CUSTOM_CIPHER | EVP_CIPH_FLAG_CIPHER_WITH_MAC, .init = magma_cipher_init_ctr_acpkm_omac, .do_cipher = magma_cipher_do_ctr_acpkm_omac, .ctrl = magma_cipher_ctl_acpkm_omac, }; GOST_cipher magma_ecb_cipher = { .nid = NID_magma_ecb, .template = &magma_template_cipher, .flags = EVP_CIPH_ECB_MODE, .init = magma_cipher_init, .do_cipher = magma_cipher_do_ecb, }; GOST_cipher magma_mgm_cipher = { .nid = NID_undef, .template = &magma_template_cipher, .block_size = 1, .iv_len = 8, .flags = EVP_CIPH_NO_PADDING | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER | EVP_CIPH_CTRL_INIT | EVP_CIPH_FLAG_AEAD_CIPHER, .init = gost_magma_cipher_init_mgm, .do_cipher = gost_magma_cipher_do_mgm, .ctrl = gost_magma_mgm_ctrl, .cleanup = gost_magma_mgm_cleanup, .ctx_size = sizeof(gost_mgm_ctx) }; static void magma_NID_callback (int nid) { magma_mgm_cipher.nid = nid; } GOST_NID_JOB magma_mgm_NID = { .sn = SN_magma_mgm, .ln = SN_magma_mgm, .callback = magma_NID_callback, }; GOST_cipher magma_cbc_cipher = { .nid = NID_magma_cbc, .template = &gost_template_cipher, .iv_len = 8, .flags = EVP_CIPH_CBC_MODE | EVP_CIPH_CUSTOM_IV, .init = magma_cipher_init, .do_cipher = magma_cipher_do_cbc, }; /* Implementation of GOST 28147-89 in MAC (imitovstavka) mode */ /* Init functions which set specific parameters */ static int gost_imit_init_cpa(EVP_MD_CTX *ctx); static int gost_imit_init_cp_12(EVP_MD_CTX *ctx); /* process block of data */ static int gost_imit_update(EVP_MD_CTX *ctx, const void *data, size_t count); /* Return computed value */ static int gost_imit_final(EVP_MD_CTX *ctx, unsigned char *md); /* Copies context */ static int gost_imit_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from); static int gost_imit_cleanup(EVP_MD_CTX *ctx); /* Control function, knows how to set MAC key.*/ static int gost_imit_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr); GOST_digest Gost28147_89_MAC_digest = { .nid = NID_id_Gost28147_89_MAC, .result_size = 4, .input_blocksize = 8, .app_datasize = sizeof(struct ossl_gost_imit_ctx), .flags = EVP_MD_FLAG_XOF, .init = gost_imit_init_cpa, .update = gost_imit_update, .final = gost_imit_final, .copy = gost_imit_copy, .cleanup = gost_imit_cleanup, .ctrl = gost_imit_ctrl, }; GOST_digest Gost28147_89_mac_12_digest = { .nid = NID_gost_mac_12, .result_size = 4, .input_blocksize = 8, .app_datasize = sizeof(struct ossl_gost_imit_ctx), .flags = EVP_MD_FLAG_XOF, .init = gost_imit_init_cp_12, .update = gost_imit_update, .final = gost_imit_final, .copy = gost_imit_copy, .cleanup = gost_imit_cleanup, .ctrl = gost_imit_ctrl, }; /* * Correspondence between gost parameter OIDs and substitution blocks * NID field is filed by register_gost_NID function in engine.c * upon engine initialization */ static struct gost_cipher_info gost_cipher_list[] = { /*- NID *//* * Subst block *//* * Key meshing */ /* * {NID_id_GostR3411_94_CryptoProParamSet,&GostR3411_94_CryptoProParamSet,0}, */ {NID_id_Gost28147_89_CryptoPro_A_ParamSet, &Gost28147_CryptoProParamSetA, 1}, {NID_id_Gost28147_89_CryptoPro_B_ParamSet, &Gost28147_CryptoProParamSetB, 1}, {NID_id_Gost28147_89_CryptoPro_C_ParamSet, &Gost28147_CryptoProParamSetC, 1}, {NID_id_Gost28147_89_CryptoPro_D_ParamSet, &Gost28147_CryptoProParamSetD, 1}, {NID_id_tc26_gost_28147_param_Z, &Gost28147_TC26ParamSetZ, 1}, {NID_id_Gost28147_89_TestParamSet, &Gost28147_TestParamSet, 1}, {NID_undef, NULL, 0} }; /* * get encryption parameters from crypto network settings FIXME For now we * use environment var CRYPT_PARAMS as place to store these settings. * Actually, it is better to use engine control command, read from * configuration file to set them */ const struct gost_cipher_info *get_encryption_params(ASN1_OBJECT *obj) { int nid; struct gost_cipher_info *param; if (!obj) { const char *params = get_gost_engine_param(GOST_PARAM_CRYPT_PARAMS); if (!params || !strlen(params)) { int i; for (i = 0; gost_cipher_list[i].nid != NID_undef; i++) if (gost_cipher_list[i].nid == NID_id_tc26_gost_28147_param_Z) return &gost_cipher_list[i]; return &gost_cipher_list[0]; } nid = OBJ_txt2nid(params); if (nid == NID_undef) { GOSTerr(GOST_F_GET_ENCRYPTION_PARAMS, GOST_R_INVALID_CIPHER_PARAM_OID); ERR_add_error_data(3, "Unsupported CRYPT_PARAMS='", params, "' specified in environment or in config"); return NULL; } } else { nid = OBJ_obj2nid(obj); } for (param = gost_cipher_list; param->sblock != NULL && param->nid != nid; param++) ; if (!param->sblock) { GOSTerr(GOST_F_GET_ENCRYPTION_PARAMS, GOST_R_INVALID_CIPHER_PARAMS); return NULL; } return param; } /* Sets cipher param from paramset NID. */ static int gost_cipher_set_param(struct ossl_gost_cipher_ctx *c, int nid) { const struct gost_cipher_info *param; param = get_encryption_params((nid == NID_undef ? NULL : OBJ_nid2obj(nid))); if (!param) return 0; c->paramNID = param->nid; c->key_meshing = param->key_meshing; c->count = 0; gost_init(&(c->cctx), param->sblock); return 1; } /* Initializes EVP_CIPHER_CTX by paramset NID */ static int gost_cipher_init_param(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc, int paramNID, int mode) { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); if (EVP_CIPHER_CTX_get_app_data(ctx) == NULL) { if (!gost_cipher_set_param(c, paramNID)) return 0; EVP_CIPHER_CTX_set_app_data(ctx, EVP_CIPHER_CTX_get_cipher_data(ctx)); } if (key) gost_key(&(c->cctx), key); if (iv) { memcpy((unsigned char *)EVP_CIPHER_CTX_original_iv(ctx), iv, EVP_CIPHER_CTX_iv_length(ctx)); } memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_original_iv(ctx), EVP_CIPHER_CTX_iv_length(ctx)); return 1; } static int gost_cipher_init_cnt(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, gost_subst_block * block) { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); gost_init(&(c->cctx), block); c->key_meshing = 1; c->count = 0; if (key) gost_key(&(c->cctx), key); if (iv) { memcpy((unsigned char *)EVP_CIPHER_CTX_original_iv(ctx), iv, EVP_CIPHER_CTX_iv_length(ctx)); } memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_original_iv(ctx), EVP_CIPHER_CTX_iv_length(ctx)); return 1; } static int gost_cipher_init_cpa(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { return gost_cipher_init_cnt(ctx, key, iv, &Gost28147_CryptoProParamSetA); } static int gost_cipher_init_cp_12(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { return gost_cipher_init_cnt(ctx, key, iv, &Gost28147_TC26ParamSetZ); } /* Initializes EVP_CIPHER_CTX with default values */ static int gost_cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { return gost_cipher_init_param(ctx, key, iv, enc, NID_undef, EVP_CIPH_CFB_MODE); } /* Initializes EVP_CIPHER_CTX with default values */ static int gost_cipher_init_cbc(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { return gost_cipher_init_param(ctx, key, iv, enc, NID_undef, EVP_CIPH_CBC_MODE); } /* Initializes EVP_CIPHER_CTX with default values */ static int magma_cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); /* FIXME this is just initializtion check */ if (EVP_CIPHER_CTX_get_app_data(ctx) == NULL) { if (!gost_cipher_set_param(c, NID_id_tc26_gost_28147_param_Z)) return 0; EVP_CIPHER_CTX_set_app_data(ctx, EVP_CIPHER_CTX_get_cipher_data(ctx)); if (enc) { if (init_zero_kdf_seed(c->kdf_seed) == 0) return -1; } } if (key) { magma_key(&(c->cctx), key); magma_master_key(&(c->cctx), key); } if (iv) { memcpy((unsigned char *)EVP_CIPHER_CTX_original_iv(ctx), iv, EVP_CIPHER_CTX_iv_length(ctx)); } memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_original_iv(ctx), EVP_CIPHER_CTX_iv_length(ctx)); if (EVP_CIPHER_CTX_nid(ctx) == NID_magma_ctr_acpkm || EVP_CIPHER_CTX_nid(ctx) == NID_magma_ctr_acpkm_omac) { c->key_meshing = 1024; } else { c->key_meshing = 0; } return 1; } /* Initializes EVP_CIPHER_CTX with default values */ static int magma_cipher_init_ctr_acpkm_omac(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { if (key) { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); unsigned char cipher_key[32]; c->omac_ctx = EVP_MD_CTX_new(); if (c->omac_ctx == NULL) { GOSTerr(GOST_F_MAGMA_CIPHER_INIT_CTR_ACPKM_OMAC, ERR_R_MALLOC_FAILURE); return 0; } if (gost2015_acpkm_omac_init(NID_magma_mac, enc, key, c->omac_ctx, cipher_key, c->kdf_seed) != 1) { EVP_MD_CTX_free(c->omac_ctx); c->omac_ctx = NULL; return 0; } return magma_cipher_init(ctx, cipher_key, iv, enc); } return magma_cipher_init(ctx, key, iv, enc); } void gost_magma_encrypt_wrap(unsigned char *in, unsigned char *out, struct ossl_gost_cipher_ctx *c) { int i; unsigned char b[8]; unsigned char d[8]; for (i = 0; i < 8; i++) { b[7 - i] = in[i]; } gostcrypt(&(c->cctx), b, d); for (i = 0; i < 8; i++) { out[7 - i] = d[i]; } } /* ----------------------------------------------------------------------------------------------- */ /*! Đ¤ŅƒĐŊĐēŅ†Đ¸Ņ Ņ€ĐĩаĐģĐ¸ĐˇŅƒĐĩŅ‚ ĐžĐŋĐĩŅ€Đ°Ņ†Đ¸ŅŽ ҃ĐŧĐŊĐžĐļĐĩĐŊĐ¸Ņ Đ´Đ˛ŅƒŅ… ŅĐģĐĩĐŧĐĩĐŊŅ‚ĐžĐ˛ ĐēĐžĐŊĐĩ҇ĐŊĐžĐŗĐž ĐŋĐžĐģŅ \f$ \mathbb F_{2^{64}}\f$, ĐŋĐžŅ€ĐžĐļĐ´ĐĩĐŊĐŊĐžĐŗĐž ĐŊĐĩĐŋŅ€Đ¸Đ˛ĐžĐ´Đ¸ĐŧŅ‹Đŧ ĐŧĐŊĐžĐŗĐžŅ‡ĐģĐĩĐŊĐžĐŧ \f$ f(x) = x^{64} + x^4 + x^3 + x + 1 \in \mathbb F_2[x]\f$. ДĐģŅ ҃ĐŧĐŊĐžĐļĐĩĐŊĐ¸Ņ Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ŅŅ ĐŋŅ€ĐžŅŅ‚ĐĩĐšŅˆĐ°Ņ Ņ€ĐĩаĐģĐ¸ĐˇĐ°Ņ†Đ¸Ņ, ĐžŅĐŊОваĐŊĐŊĐ°Ņ ĐŊа ĐŋŅ€Đ¸Đ˛ĐĩĐ´ĐĩĐŊии ĐŋĐž ĐŧĐžĐ´ŅƒĐģŅŽ ĐŋĐžŅĐģĐĩ ĐēаĐļĐ´ĐžĐŗĐž ŅˆĐ°ĐŗĐ° аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧа. */ /* ----------------------------------------------------------------------------------------------- */ static void gf64_mul (uint64_t *result, uint64_t *arg1, uint64_t *arg2) { int i = 0; register uint64_t t, X0; uint64_t Z0 = 0; #ifdef L_ENDIAN X0 = BSWAP64(*arg1); #else X0 = *arg1; #endif #ifdef L_ENDIAN t = BSWAP64(*(arg2)); #else t = *(arg2); #endif for (i = 0; i < 63; i++) { if (t & 0x1) { Z0 ^= X0; } t >>= 1; if (X0 & 0x8000000000000000) { X0 <<= 1; X0 ^= 0x1b; } else { X0 <<= 1; } } if (t & 0x1) { Z0 ^= X0; } #ifdef L_ENDIAN *(result) = BSWAP64(Z0); #else *(result) = Z0; #endif } static int gost_magma_cipher_init_mgm(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { gost_mgm_ctx *mctx = (gost_mgm_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx); int bl; if (!iv && !key) return 1; if (key) { bl = EVP_CIPHER_CTX_iv_length(ctx); if (!gost_cipher_set_param(&mctx->ks.g_ks, NID_id_tc26_gost_28147_param_Z)) return 0; magma_key(&(mctx->ks.g_ks.cctx), key); gost_mgm128_init(&mctx->mgm, &mctx->ks, (block128_f) gost_magma_encrypt_wrap, gf64_mul, bl); /* * If we have an iv can set it directly, otherwise use saved IV. */ if (iv == NULL && mctx->iv_set) iv = mctx->iv; if (iv) { if (gost_mgm128_setiv(&mctx->mgm, iv, mctx->ivlen) != 1) return 0; mctx->iv_set = 1; } mctx->key_set = 1; } else { /* If key set use IV, otherwise copy */ if (mctx->key_set) { if (gost_mgm128_setiv(&mctx->mgm, iv, mctx->ivlen) != 1) return 0; } else memcpy(mctx->iv, iv, mctx->ivlen); mctx->iv_set = 1; } return 1; } /* * Wrapper around gostcrypt function from gost89.c which perform key meshing * when nesseccary */ static void gost_crypt_mesh(void *ctx, unsigned char *iv, unsigned char *buf) { struct ossl_gost_cipher_ctx *c = ctx; assert(c->count % 8 == 0 && c->count <= 1024); if (c->key_meshing && c->count == 1024) { cryptopro_key_meshing(&(c->cctx), iv); } gostcrypt(&(c->cctx), iv, buf); c->count = c->count % 1024 + 8; } static void gost_cnt_next(void *ctx, unsigned char *iv, unsigned char *buf) { struct ossl_gost_cipher_ctx *c = ctx; word32 g, go; unsigned char buf1[8]; assert(c->count % 8 == 0 && c->count <= 1024); if (c->key_meshing && c->count == 1024) { cryptopro_key_meshing(&(c->cctx), iv); } if (c->count == 0) { gostcrypt(&(c->cctx), iv, buf1); } else { memcpy(buf1, iv, 8); } g = buf1[0] | (buf1[1] << 8) | (buf1[2] << 16) | ((word32) buf1[3] << 24); g += 0x01010101; buf1[0] = (unsigned char)(g & 0xff); buf1[1] = (unsigned char)((g >> 8) & 0xff); buf1[2] = (unsigned char)((g >> 16) & 0xff); buf1[3] = (unsigned char)((g >> 24) & 0xff); g = buf1[4] | (buf1[5] << 8) | (buf1[6] << 16) | ((word32) buf1[7] << 24); go = g; g += 0x01010104; if (go > g) /* overflow */ g++; buf1[4] = (unsigned char)(g & 0xff); buf1[5] = (unsigned char)((g >> 8) & 0xff); buf1[6] = (unsigned char)((g >> 16) & 0xff); buf1[7] = (unsigned char)((g >> 24) & 0xff); memcpy(iv, buf1, 8); gostcrypt(&(c->cctx), buf1, buf); c->count = c->count % 1024 + 8; } /* GOST encryption in CBC mode */ static int gost_cipher_do_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { unsigned char b[8]; const unsigned char *in_ptr = in; unsigned char *out_ptr = out; int i; struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); if (EVP_CIPHER_CTX_encrypting(ctx)) { while (inl > 0) { for (i = 0; i < 8; i++) { b[i] = iv[i] ^ in_ptr[i]; } gostcrypt(&(c->cctx), b, out_ptr); memcpy(iv, out_ptr, 8); out_ptr += 8; in_ptr += 8; inl -= 8; } } else { while (inl > 0) { unsigned char tmpiv[8]; gostdecrypt(&(c->cctx), in_ptr, b); memcpy(tmpiv, in_ptr, 8); for (i = 0; i < 8; i++) { out_ptr[i] = iv[i] ^ b[i]; } memcpy(iv, tmpiv, 8); out_ptr += 8; in_ptr += 8; inl -= 8; } } return 1; } /* MAGMA encryption in ECB mode */ static int magma_cipher_do_ecb(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); if (EVP_CIPHER_CTX_encrypting(ctx)) { while (inl > 0) { magmacrypt(&(c->cctx), in, out); out += 8; in += 8; inl -= 8; } } else { while (inl > 0) { magmadecrypt(&(c->cctx), in, out); out += 8; in += 8; inl -= 8; } } return 1; } /* MAGMA encryption in CBC mode */ static int magma_cipher_do_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { unsigned char b[8]; unsigned char d[8]; const unsigned char *in_ptr = in; unsigned char *out_ptr = out; int i; struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); if (EVP_CIPHER_CTX_encrypting(ctx)) { while (inl > 0) { for (i = 0; i < 8; i++) { out_ptr[i] = iv[i] ^ in_ptr[i]; } magmacrypt(&(c->cctx), out_ptr, out_ptr); memcpy(iv, out_ptr, 8); out_ptr += 8; in_ptr += 8; inl -= 8; } } else { while (inl > 0) { magmadecrypt(&(c->cctx), in_ptr, b); memcpy(d, in_ptr, 8); for (i = 0; i < 8; i++) { out_ptr[i] = iv[i] ^ b[i]; } memcpy(iv, d, 8); out_ptr += 8; in_ptr += 8; inl -= 8; } } return 1; } /* increment counter (64-bit int) by 1 */ static void ctr64_inc(unsigned char *counter) { inc_counter(counter, 8); } #define MAGMA_BLOCK_SIZE 8 #define MAGMA_BLOCK_MASK (MAGMA_BLOCK_SIZE - 1) static inline void apply_acpkm_magma(struct ossl_gost_cipher_ctx * ctx, unsigned int *num) { if (!ctx->key_meshing || (*num < (unsigned int)ctx->key_meshing)) return; acpkm_magma_key_meshing(&ctx->cctx); *num &= MAGMA_BLOCK_MASK; } /* MAGMA encryption in CTR mode */ static int magma_cipher_do_ctr(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { const unsigned char *in_ptr = in; unsigned char *out_ptr = out; size_t j; struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx); unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); unsigned int num = EVP_CIPHER_CTX_num(ctx); size_t blocks, i, lasted = inl; /* Process partial blocks */ while ((num & MAGMA_BLOCK_MASK) && lasted) { *out_ptr++ = *in_ptr++ ^ buf[num & MAGMA_BLOCK_MASK]; --lasted; num++; } blocks = lasted / MAGMA_BLOCK_SIZE; /* Process full blocks */ for (i = 0; i < blocks; i++) { apply_acpkm_magma(c, &num); magmacrypt(&(c->cctx), iv, buf); for (j = 0; j < 8; j++) { out_ptr[j] = buf[j] ^ in_ptr[j]; } ctr64_inc(iv); c->count += MAGMA_BLOCK_SIZE; in_ptr += MAGMA_BLOCK_SIZE; out_ptr += MAGMA_BLOCK_SIZE; num += MAGMA_BLOCK_SIZE; lasted -= MAGMA_BLOCK_SIZE; } /* Process the rest of plaintext */ if (lasted > 0) { apply_acpkm_magma(c, &num); magmacrypt(&(c->cctx), iv, buf); for (i = 0; i < lasted; i++) out_ptr[i] = buf[i] ^ in_ptr[i]; ctr64_inc(iv); c->count += 8; num += lasted; } EVP_CIPHER_CTX_set_num(ctx, num); return inl; } /* MAGMA encryption in CTR mode */ static int magma_cipher_do_ctr_acpkm_omac(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); if (in == NULL && inl == 0) /* Final call */ return gost2015_final_call(ctx, c->omac_ctx, MAGMA_MAC_MAX_SIZE, c->tag, magma_cipher_do_ctr); if (in == NULL) return -1; /* As in and out can be the same pointer, process unencrypted here */ if (EVP_CIPHER_CTX_encrypting(ctx)) EVP_DigestSignUpdate(c->omac_ctx, in, inl); if (magma_cipher_do_ctr(ctx, out, in, inl) != inl) return -1; /* As in and out can be the same pointer, process decrypted here */ if (!EVP_CIPHER_CTX_encrypting(ctx)) EVP_DigestSignUpdate(c->omac_ctx, out, inl); return inl; } static int gost_magma_cipher_do_mgm(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t len) { gost_mgm_ctx *mctx = (gost_mgm_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx); int enc = EVP_CIPHER_CTX_encrypting(ctx); /* If not set up, return error */ if (!mctx->key_set) { GOSTerr(GOST_F_GOST_MAGMA_CIPHER_DO_MGM, GOST_R_BAD_ORDER); return -1; } if (!mctx->iv_set) { GOSTerr(GOST_F_GOST_MAGMA_CIPHER_DO_MGM, GOST_R_BAD_ORDER); return -1; } if (in) { if (out == NULL) { if (gost_mgm128_aad(&mctx->mgm, in, len)) return -1; } else if (enc) { if (gost_mgm128_encrypt(&mctx->mgm, in, out, len)) return -1; } else { if (gost_mgm128_decrypt(&mctx->mgm, in, out, len)) return -1; } return len; } else { if (!enc) { if (mctx->taglen < 0) return -1; if (gost_mgm128_finish(&mctx->mgm, EVP_CIPHER_CTX_buf_noconst(ctx), mctx->taglen) != 0) return -1; mctx->iv_set = 0; return 0; } gost_mgm128_tag(&mctx->mgm, EVP_CIPHER_CTX_buf_noconst(ctx), 8); mctx->taglen = 8; /* Don't reuse the IV */ mctx->iv_set = 0; return 0; } } /* GOST encryption in CFB mode */ static int gost_cipher_do_cfb(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { const unsigned char *in_ptr = in; unsigned char *out_ptr = out; size_t i = 0; size_t j = 0; unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx); unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); /* process partial block if any */ if (EVP_CIPHER_CTX_num(ctx)) { for (j = EVP_CIPHER_CTX_num(ctx), i = 0; j < 8 && i < inl; j++, i++, in_ptr++, out_ptr++) { if (!EVP_CIPHER_CTX_encrypting(ctx)) buf[j + 8] = *in_ptr; *out_ptr = buf[j] ^ (*in_ptr); if (EVP_CIPHER_CTX_encrypting(ctx)) buf[j + 8] = *out_ptr; } if (j == 8) { memcpy(iv, buf + 8, 8); EVP_CIPHER_CTX_set_num(ctx, 0); } else { EVP_CIPHER_CTX_set_num(ctx, j); return 1; } } for (; (inl - i) >= 8; i += 8, in_ptr += 8, out_ptr += 8) { /* * block cipher current iv */ gost_crypt_mesh(EVP_CIPHER_CTX_get_cipher_data(ctx), iv, buf); /* * xor next block of input text with it and output it */ /* * output this block */ if (!EVP_CIPHER_CTX_encrypting(ctx)) memcpy(iv, in_ptr, 8); for (j = 0; j < 8; j++) { out_ptr[j] = buf[j] ^ in_ptr[j]; } /* Encrypt */ /* Next iv is next block of cipher text */ if (EVP_CIPHER_CTX_encrypting(ctx)) memcpy(iv, out_ptr, 8); } /* Process rest of buffer */ if (i < inl) { gost_crypt_mesh(EVP_CIPHER_CTX_get_cipher_data(ctx), iv, buf); if (!EVP_CIPHER_CTX_encrypting(ctx)) memcpy(buf + 8, in_ptr, inl - i); for (j = 0; i < inl; j++, i++) { out_ptr[j] = buf[j] ^ in_ptr[j]; } EVP_CIPHER_CTX_set_num(ctx, j); if (EVP_CIPHER_CTX_encrypting(ctx)) memcpy(buf + 8, out_ptr, j); } else { EVP_CIPHER_CTX_set_num(ctx, 0); } return 1; } static int gost_cipher_do_cnt(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { const unsigned char *in_ptr = in; unsigned char *out_ptr = out; size_t i = 0; size_t j; unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx); unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); /* process partial block if any */ if (EVP_CIPHER_CTX_num(ctx)) { for (j = EVP_CIPHER_CTX_num(ctx), i = 0; j < 8 && i < inl; j++, i++, in_ptr++, out_ptr++) { *out_ptr = buf[j] ^ (*in_ptr); } if (j == 8) { EVP_CIPHER_CTX_set_num(ctx, 0); } else { EVP_CIPHER_CTX_set_num(ctx, j); return 1; } } for (; (inl - i) >= 8; i += 8, in_ptr += 8, out_ptr += 8) { /* * block cipher current iv */ /* Encrypt */ gost_cnt_next(EVP_CIPHER_CTX_get_cipher_data(ctx), iv, buf); /* * xor next block of input text with it and output it */ /* * output this block */ for (j = 0; j < 8; j++) { out_ptr[j] = buf[j] ^ in_ptr[j]; } } /* Process rest of buffer */ if (i < inl) { gost_cnt_next(EVP_CIPHER_CTX_get_cipher_data(ctx), iv, buf); for (j = 0; i < inl; j++, i++) { out_ptr[j] = buf[j] ^ in_ptr[j]; } EVP_CIPHER_CTX_set_num(ctx, j); } else { EVP_CIPHER_CTX_set_num(ctx, 0); } return 1; } /* Cleaning up of EVP_CIPHER_CTX */ static int gost_cipher_cleanup(EVP_CIPHER_CTX *ctx) { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); EVP_MD_CTX_free(c->omac_ctx); gost_destroy(&(c->cctx)); EVP_CIPHER_CTX_set_app_data(ctx, NULL); return 1; } static int gost_magma_mgm_cleanup(EVP_CIPHER_CTX *c) { gost_mgm_ctx *mctx = (gost_mgm_ctx *)EVP_CIPHER_CTX_get_cipher_data(c); if (mctx == NULL) return 0; gost_destroy(&mctx->ks.g_ks.cctx); OPENSSL_cleanse(&mctx->mgm, sizeof(mctx->mgm)); EVP_CIPHER_CTX_set_app_data(c, NULL); return 1; } static int gost_magma_mgm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) { gost_mgm_ctx *mctx = (gost_mgm_ctx *)EVP_CIPHER_CTX_get_cipher_data(c); unsigned char *buf, *iv; int ivlen, enc; switch (type) { case EVP_CTRL_INIT: ivlen = EVP_CIPHER_iv_length(EVP_CIPHER_CTX_cipher(c)); iv = EVP_CIPHER_CTX_iv_noconst(c); mctx->key_set = 0; mctx->iv_set = 0; mctx->ivlen = ivlen; mctx->iv = iv; mctx->taglen = -1; return 1; case EVP_CTRL_GET_IVLEN: *(int *)ptr = mctx->ivlen; return 1; case EVP_CTRL_AEAD_SET_IVLEN: if (arg <= 0) return 0; if ((arg > EVP_MAX_IV_LENGTH) && (arg > mctx->ivlen)) { // TODO: Allocate memory for IV or set error return 0; } mctx->ivlen = arg; return 1; case EVP_CTRL_AEAD_SET_TAG: buf = EVP_CIPHER_CTX_buf_noconst(c); enc = EVP_CIPHER_CTX_encrypting(c); if (arg <= 0 || arg != 8 || enc) { GOSTerr(GOST_F_GOST_MAGMA_MGM_CTRL, GOST_R_INVALID_TAG_LENGTH); return 0; } memcpy(buf, ptr, arg); mctx->taglen = arg; return 1; case EVP_CTRL_AEAD_GET_TAG: buf = EVP_CIPHER_CTX_buf_noconst(c); enc = EVP_CIPHER_CTX_encrypting(c); if (arg <= 0 || arg > 8 || !enc || mctx->taglen < 0) { GOSTerr(GOST_F_GOST_MAGMA_MGM_CTRL, GOST_R_INVALID_TAG_LENGTH); return 0; } memcpy(ptr, buf, arg); return 1; default: return -1; } } /* Control function for gost cipher */ static int gost_cipher_ctl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr) { switch (type) { case EVP_CTRL_RAND_KEY: { if (RAND_priv_bytes ((unsigned char *)ptr, EVP_CIPHER_CTX_key_length(ctx)) <= 0) { GOSTerr(GOST_F_GOST_CIPHER_CTL, GOST_R_RNG_ERROR); return -1; } break; } case EVP_CTRL_PBE_PRF_NID: if (ptr) { const char *params = get_gost_engine_param(GOST_PARAM_PBE_PARAMS); int nid = NID_id_tc26_hmac_gost_3411_2012_512; if (params) { if (!strcmp("md_gost12_256", params)) nid = NID_id_tc26_hmac_gost_3411_2012_256; else if (!strcmp("md_gost12_512", params)) nid = NID_id_tc26_hmac_gost_3411_2012_512; else if (!strcmp("md_gost94", params)) nid = NID_id_HMACGostR3411_94; } *((int *)ptr) = nid; return 1; } else { return 0; } case EVP_CTRL_SET_SBOX: if (ptr) { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); int nid; int cur_meshing; int ret; if (c == NULL) { return -1; } if (c->count != 0) { return -1; } nid = OBJ_txt2nid(ptr); if (nid == NID_undef) { return 0; } cur_meshing = c->key_meshing; ret = gost_cipher_set_param(c, nid); c->key_meshing = cur_meshing; return ret; } else { return 0; } case EVP_CTRL_KEY_MESH: { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); if (c == NULL) { return -1; } if (c->count != 0) { return -1; } c->key_meshing = arg; return 1; } default: GOSTerr(GOST_F_GOST_CIPHER_CTL, GOST_R_UNSUPPORTED_CIPHER_CTL_COMMAND); return -1; } return 1; } /* Decrement 8-byte sequence if needed */ int decrement_sequence(unsigned char *seq, int decrement) { if (decrement < 0 || decrement > 1) return 0; int j; if (decrement) { for (j = 7; j >= 0; j--) { if (seq[j] != 0) { seq[j]--; break; } else seq[j] = 0xFF; } } return 1; } /* Control function for gost cipher */ static int magma_cipher_ctl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr) { switch (type) { case EVP_CTRL_RAND_KEY: if (RAND_priv_bytes ((unsigned char *)ptr, EVP_CIPHER_CTX_key_length(ctx)) <= 0) { GOSTerr(GOST_F_MAGMA_CIPHER_CTL, GOST_R_RNG_ERROR); return -1; } break; case EVP_CTRL_KEY_MESH: { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); if (c == NULL) { return -1; } if (c->count != 0) { return -1; } c->key_meshing = arg; return 1; } case EVP_CTRL_TLSTREE: { unsigned char newkey[32]; int mode = EVP_CIPHER_CTX_mode(ctx); struct ossl_gost_cipher_ctx *ctr_ctx = NULL; gost_ctx *c = NULL; unsigned char adjusted_iv[8]; unsigned char seq[8]; int j, carry, decrement_arg; if (mode != EVP_CIPH_CTR_MODE) return -1; ctr_ctx = (struct ossl_gost_cipher_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx); c = &(ctr_ctx->cctx); /* * 'arg' parameter indicates what we should do with sequence value. * * When function called, seq is incremented after MAC calculation. * In ETM mode, we use seq 'as is' in the ctrl-function (arg = 0) * Otherwise we have to decrease it in the implementation (arg = 1). */ memcpy(seq, ptr, 8); decrement_arg = arg; if(!decrement_sequence(seq, decrement_arg)) { GOSTerr(GOST_F_MAGMA_CIPHER_CTL, GOST_R_CTRL_CALL_FAILED); return -1; } if (gost_tlstree(NID_magma_cbc, (const unsigned char *)c->master_key, newkey, (const unsigned char *)seq) > 0) { memset(adjusted_iv, 0, 8); memcpy(adjusted_iv, EVP_CIPHER_CTX_original_iv(ctx), 4); for (j = 3, carry = 0; j >= 0; j--) { int adj_byte = adjusted_iv[j] + seq[j+4] + carry; carry = (adj_byte > 255) ? 1 : 0; adjusted_iv[j] = adj_byte & 0xFF; } EVP_CIPHER_CTX_set_num(ctx, 0); memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), adjusted_iv, 8); magma_key(c, newkey); return 1; } } return -1; default: GOSTerr(GOST_F_MAGMA_CIPHER_CTL, GOST_R_UNSUPPORTED_CIPHER_CTL_COMMAND); return -1; } return 1; } static int magma_cipher_ctl_acpkm_omac(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr) { switch (type) { case EVP_CTRL_PROCESS_UNPROTECTED: { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); STACK_OF(X509_ATTRIBUTE) *x = ptr; return gost2015_process_unprotected_attributes(x, arg, MAGMA_MAC_MAX_SIZE, c->tag); } case EVP_CTRL_COPY: { EVP_CIPHER_CTX *out = ptr; struct ossl_gost_cipher_ctx *in_cctx = EVP_CIPHER_CTX_get_cipher_data(ctx); struct ossl_gost_cipher_ctx *out_cctx = EVP_CIPHER_CTX_get_cipher_data(out); if (in_cctx->omac_ctx == out_cctx->omac_ctx) { out_cctx->omac_ctx = EVP_MD_CTX_new(); if (out_cctx->omac_ctx == NULL) { GOSTerr(GOST_F_MAGMA_CIPHER_CTL_ACPKM_OMAC, ERR_R_MALLOC_FAILURE); return -1; } } return EVP_MD_CTX_copy(out_cctx->omac_ctx, in_cctx->omac_ctx); } default: return magma_cipher_ctl(ctx, type, arg, ptr); break; } } /* Set cipher parameters from ASN1 structure */ static int gost89_set_asn1_parameters(EVP_CIPHER_CTX *ctx, ASN1_TYPE *params) { int len = 0; unsigned char *buf = NULL; unsigned char *p = NULL; struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); GOST_CIPHER_PARAMS *gcp = GOST_CIPHER_PARAMS_new(); ASN1_OCTET_STRING *os = NULL; if (!gcp) { GOSTerr(GOST_F_GOST89_SET_ASN1_PARAMETERS, ERR_R_MALLOC_FAILURE); return 0; } if (!ASN1_OCTET_STRING_set (gcp->iv, EVP_CIPHER_CTX_iv(ctx), EVP_CIPHER_CTX_iv_length(ctx))) { GOST_CIPHER_PARAMS_free(gcp); GOSTerr(GOST_F_GOST89_SET_ASN1_PARAMETERS, ERR_R_MALLOC_FAILURE); return 0; } ASN1_OBJECT_free(gcp->enc_param_set); gcp->enc_param_set = OBJ_nid2obj(c->paramNID); len = i2d_GOST_CIPHER_PARAMS(gcp, NULL); p = buf = OPENSSL_malloc(len); if (!buf) { GOST_CIPHER_PARAMS_free(gcp); GOSTerr(GOST_F_GOST89_SET_ASN1_PARAMETERS, ERR_R_MALLOC_FAILURE); return 0; } i2d_GOST_CIPHER_PARAMS(gcp, &p); GOST_CIPHER_PARAMS_free(gcp); os = ASN1_OCTET_STRING_new(); if (!os || !ASN1_OCTET_STRING_set(os, buf, len)) { OPENSSL_free(buf); GOSTerr(GOST_F_GOST89_SET_ASN1_PARAMETERS, ERR_R_MALLOC_FAILURE); return 0; } OPENSSL_free(buf); ASN1_TYPE_set(params, V_ASN1_SEQUENCE, os); return 1; } /* Store parameters into ASN1 structure */ static int gost89_get_asn1_parameters(EVP_CIPHER_CTX *ctx, ASN1_TYPE *params) { int len; GOST_CIPHER_PARAMS *gcp = NULL; unsigned char *p; struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); int nid; if (ASN1_TYPE_get(params) != V_ASN1_SEQUENCE) { return -1; } p = params->value.sequence->data; gcp = d2i_GOST_CIPHER_PARAMS(NULL, (const unsigned char **)&p, params->value.sequence->length); len = gcp->iv->length; if (len != EVP_CIPHER_CTX_iv_length(ctx)) { GOST_CIPHER_PARAMS_free(gcp); GOSTerr(GOST_F_GOST89_GET_ASN1_PARAMETERS, GOST_R_INVALID_IV_LENGTH); return -1; } nid = OBJ_obj2nid(gcp->enc_param_set); if (nid == NID_undef) { GOST_CIPHER_PARAMS_free(gcp); GOSTerr(GOST_F_GOST89_GET_ASN1_PARAMETERS, GOST_R_INVALID_CIPHER_PARAM_OID); return -1; } if (!gost_cipher_set_param(c, nid)) { GOST_CIPHER_PARAMS_free(gcp); return -1; } /*XXX missing non-const accessor */ memcpy((unsigned char *)EVP_CIPHER_CTX_original_iv(ctx), gcp->iv->data, EVP_CIPHER_CTX_iv_length(ctx)); GOST_CIPHER_PARAMS_free(gcp); return 1; } #define MAGMA_UKM_LEN 12 static int magma_set_asn1_parameters (EVP_CIPHER_CTX *ctx, ASN1_TYPE *params) { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); c->key_meshing = 8192; return gost2015_set_asn1_params(params, EVP_CIPHER_CTX_original_iv(ctx), 4, c->kdf_seed); } static int magma_get_asn1_parameters(EVP_CIPHER_CTX *ctx, ASN1_TYPE *params) { struct ossl_gost_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); unsigned char iv[16]; c->key_meshing = 8192; if (gost2015_get_asn1_params(params, MAGMA_UKM_LEN, iv, 4, c->kdf_seed) < 0) return -1; memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, sizeof(iv)); memcpy((unsigned char *)EVP_CIPHER_CTX_original_iv(ctx), iv, sizeof(iv)); /* Key meshing 8 kb*/ c->key_meshing = 8192; return 1; } static int gost_imit_init(EVP_MD_CTX *ctx, gost_subst_block * block) { struct ossl_gost_imit_ctx *c = EVP_MD_CTX_md_data(ctx); memset(c->buffer, 0, sizeof(c->buffer)); memset(c->partial_block, 0, sizeof(c->partial_block)); c->count = 0; c->bytes_left = 0; c->key_meshing = 1; c->dgst_size = 4; gost_init(&(c->cctx), block); return 1; } static int gost_imit_init_cpa(EVP_MD_CTX *ctx) { return gost_imit_init(ctx, &Gost28147_CryptoProParamSetA); } static int gost_imit_init_cp_12(EVP_MD_CTX *ctx) { return gost_imit_init(ctx, &Gost28147_TC26ParamSetZ); } static void mac_block_mesh(struct ossl_gost_imit_ctx *c, const unsigned char *data) { /* * We are using NULL for iv because CryptoPro doesn't interpret * internal state of MAC algorithm as iv during keymeshing (but does * initialize internal state from iv in key transport */ assert(c->count % 8 == 0 && c->count <= 1024); if (c->key_meshing && c->count == 1024) { cryptopro_key_meshing(&(c->cctx), NULL); } mac_block(&(c->cctx), c->buffer, data); c->count = c->count % 1024 + 8; } static int gost_imit_update(EVP_MD_CTX *ctx, const void *data, size_t count) { struct ossl_gost_imit_ctx *c = EVP_MD_CTX_md_data(ctx); const unsigned char *p = data; size_t bytes = count; if (!(c->key_set)) { GOSTerr(GOST_F_GOST_IMIT_UPDATE, GOST_R_MAC_KEY_NOT_SET); return 0; } if (c->bytes_left) { size_t i; for (i = c->bytes_left; i < 8 && bytes > 0; bytes--, i++, p++) { c->partial_block[i] = *p; } if (i == 8) { mac_block_mesh(c, c->partial_block); } else { c->bytes_left = i; return 1; } } while (bytes > 8) { mac_block_mesh(c, p); p += 8; bytes -= 8; } if (bytes > 0) { memcpy(c->partial_block, p, bytes); } c->bytes_left = bytes; return 1; } static int gost_imit_final(EVP_MD_CTX *ctx, unsigned char *md) { struct ossl_gost_imit_ctx *c = EVP_MD_CTX_md_data(ctx); if (!c->key_set) { GOSTerr(GOST_F_GOST_IMIT_FINAL, GOST_R_MAC_KEY_NOT_SET); return 0; } if (c->count == 0 && c->bytes_left) { unsigned char buffer[8]; memset(buffer, 0, 8); gost_imit_update(ctx, buffer, 8); } if (c->bytes_left) { int i; for (i = c->bytes_left; i < 8; i++) { c->partial_block[i] = 0; } mac_block_mesh(c, c->partial_block); } get_mac(c->buffer, 8 * c->dgst_size, md); return 1; } static int gost_imit_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr) { switch (type) { case EVP_MD_CTRL_KEY_LEN: *((unsigned int *)(ptr)) = 32; return 1; case EVP_MD_CTRL_SET_KEY: { struct ossl_gost_imit_ctx *gost_imit_ctx = EVP_MD_CTX_md_data(ctx); if (EVP_MD_meth_get_init(EVP_MD_CTX_md(ctx)) (ctx) <= 0) { GOSTerr(GOST_F_GOST_IMIT_CTRL, GOST_R_MAC_KEY_NOT_SET); return 0; } EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_NO_INIT); if (arg == 0) { struct gost_mac_key *key = (struct gost_mac_key *)ptr; if (key->mac_param_nid != NID_undef) { const struct gost_cipher_info *param = get_encryption_params(OBJ_nid2obj(key->mac_param_nid)); if (param == NULL) { GOSTerr(GOST_F_GOST_IMIT_CTRL, GOST_R_INVALID_MAC_PARAMS); return 0; } gost_init(&(gost_imit_ctx->cctx), param->sblock); } gost_key(&(gost_imit_ctx->cctx), key->key); gost_imit_ctx->key_set = 1; return 1; } else if (arg == 32) { gost_key(&(gost_imit_ctx->cctx), ptr); gost_imit_ctx->key_set = 1; return 1; } GOSTerr(GOST_F_GOST_IMIT_CTRL, GOST_R_INVALID_MAC_KEY_SIZE); return 0; } case EVP_MD_CTRL_XOF_LEN: { struct ossl_gost_imit_ctx *c = EVP_MD_CTX_md_data(ctx); if (arg < 1 || arg > 8) { GOSTerr(GOST_F_GOST_IMIT_CTRL, GOST_R_INVALID_MAC_SIZE); return 0; } c->dgst_size = arg; return 1; } default: return 0; } } static int gost_imit_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) { if (EVP_MD_CTX_md_data(to) && EVP_MD_CTX_md_data(from)) { memcpy(EVP_MD_CTX_md_data(to), EVP_MD_CTX_md_data(from), sizeof(struct ossl_gost_imit_ctx)); } return 1; } /* Clean up imit ctx */ static int gost_imit_cleanup(EVP_MD_CTX *ctx) { memset(EVP_MD_CTX_md_data(ctx), 0, sizeof(struct ossl_gost_imit_ctx)); return 1; } /* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */ libengine-gost-openssl-3.0.2/gost_ctl.c000066400000000000000000000041601446070765000200770ustar00rootroot00000000000000/********************************************************************** * gost_ctl.c * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Implementation of control commands for GOST engine * * OpenSSL 0.9.9 libraries required * **********************************************************************/ #include #include #include #include #include #include #include "gost_lcl.h" static char *gost_params[GOST_PARAM_MAX + 1] = { NULL }; static const char *gost_envnames[] = { "CRYPT_PARAMS", "GOST_PBE_HMAC", "GOST_PK_FORMAT" }; void gost_param_free() { int i; for (i = 0; i <= GOST_PARAM_MAX; i++) { OPENSSL_free(gost_params[i]); gost_params[i] = NULL; } } int gost_control_func(ENGINE *e, int cmd, long i, void *p, void (*f) (void)) { int param = cmd - ENGINE_CMD_BASE; int ret = 0; if (param < 0 || param > GOST_PARAM_MAX) { return -1; } ret = gost_set_default_param(param, p); return ret; } const char *get_gost_engine_param(int param) { char *tmp; if (param < 0 || param >= GOST_PARAM_MAX) return NULL; if (gost_params[param] != NULL) { return gost_params[param]; } tmp = getenv(gost_envnames[param]); if (tmp) { OPENSSL_free(gost_params[param]); gost_params[param] = BUF_strdup(tmp); return gost_params[param]; } return NULL; } int gost_set_default_param(int param, const char *value) { const char *tmp; if (param < 0 || param >= GOST_PARAM_MAX) return 0; tmp = getenv(gost_envnames[param]); /* * if there is value in the environment, use it, else -passed string * */ if (!tmp) { tmp = value; } OPENSSL_free(gost_params[param]); gost_params[param] = BUF_strdup(tmp); return 1; } libengine-gost-openssl-3.0.2/gost_ec_keyx.c000066400000000000000000000613101446070765000207440ustar00rootroot00000000000000/********************************************************************** * gost_ec_keyx.c * * * * Copyright (c) 2005-2013 Cryptocom LTD * * Copyright (c) 2018,2020 Dmitry Belyavskiy * * Copyright (c) 2020 Billy Brumley * * * * This file is distributed under the same license as OpenSSL * * * * VK0 R 50.1.113-2016 / RFC 7836 * * KEG R 1323565.1.020-2018 * * VK0 34.10-2001 key exchange and GOST R 34.10-2001 (RFC 4357) * * based PKCS7/SMIME support * * Requires OpenSSL 0.9.9 for compilation * **********************************************************************/ #include #include #include #include #include #include "gost89.h" #include "e_gost_err.h" #include "gost_keywrap.h" #include "gost_lcl.h" /* Implementation of CryptoPro VKO 34.10-2001/2012 algorithm */ int VKO_compute_key(unsigned char *shared_key, const EC_POINT *pub_key, const EC_KEY *priv_key, const unsigned char *ukm, const size_t ukm_size, const int vko_dgst_nid) { unsigned char *databuf = NULL; BIGNUM *scalar = NULL, *X = NULL, *Y = NULL; const EC_GROUP *grp = NULL; EC_POINT *pnt = NULL; BN_CTX *ctx = NULL; EVP_MD_CTX *mdctx = NULL; const EVP_MD *md = NULL; int buf_len, half_len; int ret = 0; if ((ctx = BN_CTX_secure_new()) == NULL) { GOSTerr(GOST_F_VKO_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); return 0; } BN_CTX_start(ctx); md = EVP_get_digestbynid(vko_dgst_nid); if (!md) { GOSTerr(GOST_F_VKO_COMPUTE_KEY, GOST_R_INVALID_DIGEST_TYPE); goto err; } grp = EC_KEY_get0_group(priv_key); scalar = BN_CTX_get(ctx); X = BN_CTX_get(ctx); if ((Y = BN_CTX_get(ctx)) == NULL || (pnt = EC_POINT_new(grp)) == NULL || BN_lebin2bn(ukm, ukm_size, scalar) == NULL || !BN_mod_mul(scalar, scalar, EC_KEY_get0_private_key(priv_key), EC_GROUP_get0_order(grp), ctx)) goto err; #if 0 /*- * These two curves have cofactor 4; the rest have cofactor 1. * But currently gost_ec_point_mul takes care of the cofactor clearing, * hence this code is not needed. */ switch (EC_GROUP_get_curve_name(grp)) { case NID_id_tc26_gost_3410_2012_256_paramSetA: case NID_id_tc26_gost_3410_2012_512_paramSetC: if (!BN_lshift(scalar, scalar, 2)) goto err; break; } #endif if (!gost_ec_point_mul(grp, pnt, NULL, pub_key, scalar, ctx)) { GOSTerr(GOST_F_VKO_COMPUTE_KEY, GOST_R_ERROR_POINT_MUL); goto err; } if (!EC_POINT_get_affine_coordinates(grp, pnt, X, Y, ctx)) { GOSTerr(GOST_F_VKO_COMPUTE_KEY, ERR_R_EC_LIB); goto err; } half_len = BN_num_bytes(EC_GROUP_get0_field(grp)); buf_len = 2 * half_len; if ((databuf = OPENSSL_malloc(buf_len)) == NULL) { GOSTerr(GOST_F_VKO_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); goto err; } /* * Serialize elliptic curve point same way as we do it when saving key */ if (BN_bn2lebinpad(X, databuf, half_len) != half_len || BN_bn2lebinpad(Y, databuf + half_len, half_len) != half_len) goto err; if ((mdctx = EVP_MD_CTX_new()) == NULL) { GOSTerr(GOST_F_VKO_COMPUTE_KEY, ERR_R_MALLOC_FAILURE); goto err; } if (EVP_MD_CTX_init(mdctx) == 0 || EVP_DigestInit_ex(mdctx, md, NULL) == 0 || EVP_DigestUpdate(mdctx, databuf, buf_len) == 0 || EVP_DigestFinal_ex(mdctx, shared_key, NULL) == 0) { GOSTerr(GOST_F_VKO_COMPUTE_KEY, ERR_R_EVP_LIB); goto err; } ret = (EVP_MD_size(md) > 0) ? EVP_MD_size(md) : 0; err: BN_CTX_end(ctx); BN_CTX_free(ctx); EC_POINT_free(pnt); EVP_MD_CTX_free(mdctx); OPENSSL_free(databuf); return ret; } /* * KEG Algorithm described in R 1323565.1.020-2018 6.4.5.1. * keyout expected to be 64 bytes * */ static int gost_keg(const unsigned char *ukm_source, int pkey_nid, const EC_POINT *pub_key, const EC_KEY *priv_key, unsigned char *keyout) { /* Adjust UKM */ unsigned char real_ukm[16]; size_t keylen = 0; memset(real_ukm, 0, 16); if (memcmp(ukm_source, real_ukm, 16) == 0) real_ukm[15] = 1; else { memcpy(real_ukm, ukm_source, 16); BUF_reverse(real_ukm, NULL, 16); } switch (pkey_nid) { case NID_id_GostR3410_2012_512: keylen = VKO_compute_key(keyout, pub_key, priv_key, real_ukm, 16, NID_id_GostR3411_2012_512); return (keylen) ? keylen : 0; break; case NID_id_GostR3410_2012_256: { unsigned char tmpkey[32]; keylen = VKO_compute_key(tmpkey, pub_key, priv_key, real_ukm, 16, NID_id_GostR3411_2012_256); if (keylen == 0) return 0; if (gost_kdftree2012_256 (keyout, 64, tmpkey, 32, (const unsigned char *)"kdf tree", 8, ukm_source + 16, 8, 1) > 0) keylen = 64; else keylen = 0; OPENSSL_cleanse(tmpkey, 32); return (keylen) ? keylen : 0; } default: return 0; } } /* * EVP_PKEY_METHOD callback derive. * Implements VKO R 34.10-2001/2012 algorithms */ /* * Backend for EVP_PKEY_derive() * It have KEG mode (default) and VKO mode (enable by EVP_PKEY_CTRL_SET_VKO). */ int pkey_gost_ec_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen) { /* * Public key of peer in the ctx field peerkey * Our private key in the ctx pkey * ukm is in the algorithm specific context data */ EVP_PKEY *my_key = EVP_PKEY_CTX_get0_pkey(ctx); EVP_PKEY *peer_key = EVP_PKEY_CTX_get0_peerkey(ctx); struct gost_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx); int dgst_nid = NID_undef; if (!data || data->shared_ukm_size == 0) { GOSTerr(GOST_F_PKEY_GOST_EC_DERIVE, GOST_R_UKM_NOT_SET); return 0; } /* VKO */ if (data->vko_dgst_nid) { if (!key) { *keylen = data->vko_dgst_nid == NID_id_GostR3411_2012_256? 32 : 64; return 1; } *keylen = VKO_compute_key(key, EC_KEY_get0_public_key(EVP_PKEY_get0(peer_key)), (EC_KEY *)EVP_PKEY_get0(my_key), data->shared_ukm, data->shared_ukm_size, data->vko_dgst_nid); return (*keylen) ? 1 : 0; } /* * shared_ukm_size = 8 stands for pre-2018 cipher suites * It means 32 bytes of key length, 8 byte UKM, 32-bytes hash * * shared_ukm_size = 32 stands for post-2018 cipher suites * It means 64 bytes of shared_key, 16 bytes of UKM and either * 64 bytes of hash or 64 bytes of TLSTREE output * */ switch (data->shared_ukm_size) { case 8: { if (key == NULL) { *keylen = 32; return 1; } EVP_PKEY_get_default_digest_nid(my_key, &dgst_nid); if (dgst_nid == NID_id_GostR3411_2012_512) dgst_nid = NID_id_GostR3411_2012_256; *keylen = VKO_compute_key(key, EC_KEY_get0_public_key(EVP_PKEY_get0(peer_key)), (EC_KEY *)EVP_PKEY_get0(my_key), data->shared_ukm, 8, dgst_nid); return (*keylen) ? 1 : 0; } break; case 32: { if (key == NULL) { *keylen = 64; return 1; } *keylen = gost_keg(data->shared_ukm, EVP_PKEY_id(my_key), EC_KEY_get0_public_key(EVP_PKEY_get0(peer_key)), (EC_KEY *)EVP_PKEY_get0(my_key), key); return (*keylen) ? 1 : 0; } break; default: return 0; } } /* * Generates ephemeral key based on pubk algorithm computes shared key using * VKO and returns filled up GOST_KEY_TRANSPORT structure */ /* * EVP_PKEY_METHOD callback encrypt * Implementation of GOST2001/12 key transport, cryptopro variation */ static int pkey_GOST_ECcp_encrypt(EVP_PKEY_CTX *pctx, unsigned char *out, size_t *out_len, const unsigned char *key, size_t key_len) { GOST_KEY_TRANSPORT *gkt = NULL; EVP_PKEY *pubk = EVP_PKEY_CTX_get0_pkey(pctx); struct gost_pmeth_data *data = EVP_PKEY_CTX_get_data(pctx); int pkey_nid = EVP_PKEY_base_id(pubk); ASN1_OBJECT *crypt_params_obj = (pkey_nid == NID_id_GostR3410_2001 || pkey_nid == NID_id_GostR3410_2001DH) ? OBJ_nid2obj(NID_id_Gost28147_89_CryptoPro_A_ParamSet) : OBJ_nid2obj(NID_id_tc26_gost_28147_param_Z); const struct gost_cipher_info *param = get_encryption_params(crypt_params_obj); unsigned char ukm[8], shared_key[32], crypted_key[44]; int ret = 0; int key_is_ephemeral = 1; gost_ctx cctx; EVP_PKEY *sec_key = EVP_PKEY_CTX_get0_peerkey(pctx); int res_len = 0; if (data->shared_ukm_size) { memcpy(ukm, data->shared_ukm, 8); } else { if (RAND_bytes(ukm, 8) <= 0) { GOSTerr(GOST_F_PKEY_GOST_ECCP_ENCRYPT, GOST_R_RNG_ERROR); return 0; } } if (!param) goto err; /* Check for private key in the peer_key of context */ if (sec_key) { key_is_ephemeral = 0; if (!gost_get0_priv_key(sec_key)) { GOSTerr(GOST_F_PKEY_GOST_ECCP_ENCRYPT, GOST_R_NO_PRIVATE_PART_OF_NON_EPHEMERAL_KEYPAIR); goto err; } } else { key_is_ephemeral = 1; if (out) { sec_key = EVP_PKEY_new(); if (!EVP_PKEY_assign(sec_key, EVP_PKEY_base_id(pubk), EC_KEY_new()) || !EVP_PKEY_copy_parameters(sec_key, pubk) || !gost_ec_keygen(EVP_PKEY_get0(sec_key))) { GOSTerr(GOST_F_PKEY_GOST_ECCP_ENCRYPT, GOST_R_ERROR_COMPUTING_SHARED_KEY); goto err; } } } if (out) { int dgst_nid = NID_undef; EVP_PKEY_get_default_digest_nid(pubk, &dgst_nid); if (dgst_nid == NID_id_GostR3411_2012_512) dgst_nid = NID_id_GostR3411_2012_256; if (!VKO_compute_key(shared_key, EC_KEY_get0_public_key(EVP_PKEY_get0(pubk)), EVP_PKEY_get0(sec_key), ukm, 8, dgst_nid)) { GOSTerr(GOST_F_PKEY_GOST_ECCP_ENCRYPT, GOST_R_ERROR_COMPUTING_SHARED_KEY); goto err; } gost_init(&cctx, param->sblock); keyWrapCryptoPro(&cctx, shared_key, ukm, key, crypted_key); } gkt = GOST_KEY_TRANSPORT_new(); if (!gkt) { goto err; } if (!ASN1_OCTET_STRING_set(gkt->key_agreement_info->eph_iv, ukm, 8)) { goto err; } if (!ASN1_OCTET_STRING_set(gkt->key_info->imit, crypted_key + 40, 4)) { goto err; } if (!ASN1_OCTET_STRING_set (gkt->key_info->encrypted_key, crypted_key + 8, 32)) { goto err; } if (key_is_ephemeral) { if (!X509_PUBKEY_set (&gkt->key_agreement_info->ephem_key, out ? sec_key : pubk)) { GOSTerr(GOST_F_PKEY_GOST_ECCP_ENCRYPT, GOST_R_CANNOT_PACK_EPHEMERAL_KEY); goto err; } } ASN1_OBJECT_free(gkt->key_agreement_info->cipher); gkt->key_agreement_info->cipher = OBJ_nid2obj(param->nid); if (key_is_ephemeral) EVP_PKEY_free(sec_key); if (!key_is_ephemeral) { /* Set control "public key from client certificate used" */ if (EVP_PKEY_CTX_ctrl(pctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 3, NULL) <= 0) { GOSTerr(GOST_F_PKEY_GOST_ECCP_ENCRYPT, GOST_R_CTRL_CALL_FAILED); goto err; } } res_len = i2d_GOST_KEY_TRANSPORT(gkt, NULL); if (res_len <= 0) { GOSTerr(GOST_F_PKEY_GOST_ECCP_ENCRYPT, ERR_R_ASN1_LIB); goto err; } if (out == NULL) { *out_len = res_len; ret = 1; } else { if ((size_t)res_len > *out_len) { GOSTerr(GOST_F_PKEY_GOST_ECCP_ENCRYPT, GOST_R_INVALID_BUFFER_SIZE); goto err; } if ((*out_len = i2d_GOST_KEY_TRANSPORT(gkt, &out)) > 0) ret = 1; else GOSTerr(GOST_F_PKEY_GOST_ECCP_ENCRYPT, ERR_R_ASN1_LIB); } OPENSSL_cleanse(shared_key, sizeof(shared_key)); GOST_KEY_TRANSPORT_free(gkt); return ret; err: OPENSSL_cleanse(shared_key, sizeof(shared_key)); if (key_is_ephemeral) EVP_PKEY_free(sec_key); GOST_KEY_TRANSPORT_free(gkt); return -1; } /* * EVP_PKEY_METHOD callback decrypt * Implementation of GOST2018 key transport */ static int pkey_gost2018_encrypt(EVP_PKEY_CTX *pctx, unsigned char *out, size_t *out_len, const unsigned char *key, size_t key_len) { PSKeyTransport_gost *pst = NULL; EVP_PKEY *pubk = EVP_PKEY_CTX_get0_pkey(pctx); struct gost_pmeth_data *data = EVP_PKEY_CTX_get_data(pctx); int pkey_nid = EVP_PKEY_base_id(pubk); unsigned char expkeys[64]; EVP_PKEY *sec_key = NULL; int ret = 0; int mac_nid = NID_undef; size_t mac_len = 0; int exp_len = 0, iv_len = 0; unsigned char *exp_buf = NULL; int key_is_ephemeral = 0; int res_len = 0; switch (data->cipher_nid) { case NID_magma_ctr: mac_nid = NID_magma_mac; mac_len = 8; iv_len = 4; break; case NID_grasshopper_ctr: mac_nid = NID_grasshopper_mac; mac_len = 16; iv_len = 8; break; default: GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, GOST_R_INVALID_CIPHER); return -1; break; } exp_len = key_len + mac_len; exp_buf = OPENSSL_malloc(exp_len); if (!exp_buf) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, ERR_R_MALLOC_FAILURE); return -1; } sec_key = EVP_PKEY_CTX_get0_peerkey(pctx); if (!sec_key) { sec_key = EVP_PKEY_new(); if (sec_key == NULL) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, ERR_R_MALLOC_FAILURE ); goto err; } if (!EVP_PKEY_assign(sec_key, EVP_PKEY_base_id(pubk), EC_KEY_new()) || !EVP_PKEY_copy_parameters(sec_key, pubk) || !gost_ec_keygen(EVP_PKEY_get0(sec_key))) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, GOST_R_ERROR_COMPUTING_SHARED_KEY); goto err; } key_is_ephemeral = 1; } if (data->shared_ukm_size == 0) { if (RAND_bytes(data->shared_ukm, 32) <= 0) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, ERR_R_INTERNAL_ERROR); goto err; } data->shared_ukm_size = 32; } if (gost_keg(data->shared_ukm, pkey_nid, EC_KEY_get0_public_key(EVP_PKEY_get0(pubk)), EVP_PKEY_get0(sec_key), expkeys) <= 0) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, GOST_R_ERROR_COMPUTING_EXPORT_KEYS); goto err; } if (gost_kexp15(key, key_len, data->cipher_nid, expkeys + 32, mac_nid, expkeys + 0, data->shared_ukm + 24, iv_len, exp_buf, &exp_len) <= 0) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, GOST_R_CANNOT_PACK_EPHEMERAL_KEY); goto err; } pst = PSKeyTransport_gost_new(); if (!pst) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, ERR_R_MALLOC_FAILURE); goto err; } pst->ukm = ASN1_OCTET_STRING_new(); if (pst->ukm == NULL) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, ERR_R_MALLOC_FAILURE); goto err; } if (!ASN1_OCTET_STRING_set(pst->ukm, data->shared_ukm, data->shared_ukm_size)) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, ERR_R_MALLOC_FAILURE); goto err; } if (!ASN1_OCTET_STRING_set(pst->psexp, exp_buf, exp_len)) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, ERR_R_MALLOC_FAILURE); goto err; } if (!X509_PUBKEY_set(&pst->ephem_key, out ? sec_key : pubk)) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, GOST_R_CANNOT_PACK_EPHEMERAL_KEY); goto err; } res_len = i2d_PSKeyTransport_gost(pst, NULL); if (res_len <= 0) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, ERR_R_ASN1_LIB); goto err; } if (out == NULL) { *out_len = res_len; ret = 1; } else { if ((size_t)res_len > *out_len) { GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, GOST_R_INVALID_BUFFER_SIZE); goto err; } if ((*out_len = i2d_PSKeyTransport_gost(pst, &out)) > 0) ret = 1; else GOSTerr(GOST_F_PKEY_GOST2018_ENCRYPT, ERR_R_ASN1_LIB); } err: OPENSSL_cleanse(expkeys, sizeof(expkeys)); if (key_is_ephemeral) EVP_PKEY_free(sec_key); PSKeyTransport_gost_free(pst); OPENSSL_free(exp_buf); return ret; } int pkey_gost_encrypt(EVP_PKEY_CTX *pctx, unsigned char *out, size_t *out_len, const unsigned char *key, size_t key_len) { struct gost_pmeth_data *gctx = EVP_PKEY_CTX_get_data(pctx); switch (gctx->cipher_nid) { case NID_id_Gost28147_89: case NID_undef: /* FIXME */ return pkey_GOST_ECcp_encrypt(pctx, out, out_len, key, key_len); break; case NID_kuznyechik_ctr: case NID_magma_ctr: return pkey_gost2018_encrypt(pctx, out, out_len, key, key_len); break; default: GOSTerr(GOST_F_PKEY_GOST_ENCRYPT, ERR_R_INTERNAL_ERROR); return -1; } } /* * EVP_PKEY_METHOD callback decrypt * Implementation of GOST2001/12 key transport, cryptopro variation */ static int pkey_GOST_ECcp_decrypt(EVP_PKEY_CTX *pctx, unsigned char *key, size_t *key_len, const unsigned char *in, size_t in_len) { const unsigned char *p = in; EVP_PKEY *priv = EVP_PKEY_CTX_get0_pkey(pctx); GOST_KEY_TRANSPORT *gkt = NULL; int ret = 0; unsigned char wrappedKey[44]; unsigned char sharedKey[32]; gost_ctx ctx; const struct gost_cipher_info *param = NULL; EVP_PKEY *eph_key = NULL, *peerkey = NULL; int dgst_nid = NID_undef; gkt = d2i_GOST_KEY_TRANSPORT(NULL, (const unsigned char **)&p, in_len); if (!gkt) { GOSTerr(GOST_F_PKEY_GOST_ECCP_DECRYPT, GOST_R_ERROR_PARSING_KEY_TRANSPORT_INFO); return -1; } /* If key transport structure contains public key, use it */ eph_key = X509_PUBKEY_get(gkt->key_agreement_info->ephem_key); if (eph_key) { if (EVP_PKEY_derive_set_peer(pctx, eph_key) <= 0) { GOSTerr(GOST_F_PKEY_GOST_ECCP_DECRYPT, GOST_R_INCOMPATIBLE_PEER_KEY); goto err; } } else { /* Set control "public key from client certificate used" */ if (EVP_PKEY_CTX_ctrl(pctx, -1, -1, EVP_PKEY_CTRL_PEER_KEY, 3, NULL) <= 0) { GOSTerr(GOST_F_PKEY_GOST_ECCP_DECRYPT, GOST_R_CTRL_CALL_FAILED); goto err; } } peerkey = EVP_PKEY_CTX_get0_peerkey(pctx); if (!peerkey) { GOSTerr(GOST_F_PKEY_GOST_ECCP_DECRYPT, GOST_R_NO_PEER_KEY); goto err; } param = get_encryption_params(gkt->key_agreement_info->cipher); if (!param) { goto err; } gost_init(&ctx, param->sblock); OPENSSL_assert(gkt->key_agreement_info->eph_iv->length == 8); memcpy(wrappedKey, gkt->key_agreement_info->eph_iv->data, 8); OPENSSL_assert(gkt->key_info->encrypted_key->length == 32); memcpy(wrappedKey + 8, gkt->key_info->encrypted_key->data, 32); OPENSSL_assert(gkt->key_info->imit->length == 4); memcpy(wrappedKey + 40, gkt->key_info->imit->data, 4); EVP_PKEY_get_default_digest_nid(priv, &dgst_nid); if (dgst_nid == NID_id_GostR3411_2012_512) dgst_nid = NID_id_GostR3411_2012_256; if (!VKO_compute_key(sharedKey, EC_KEY_get0_public_key(EVP_PKEY_get0(peerkey)), EVP_PKEY_get0(priv), wrappedKey, 8, dgst_nid)) { GOSTerr(GOST_F_PKEY_GOST_ECCP_DECRYPT, GOST_R_ERROR_COMPUTING_SHARED_KEY); goto err; } if (!keyUnwrapCryptoPro(&ctx, sharedKey, wrappedKey, key)) { GOSTerr(GOST_F_PKEY_GOST_ECCP_DECRYPT, GOST_R_ERROR_COMPUTING_SHARED_KEY); goto err; } *key_len = 32; ret = 1; err: OPENSSL_cleanse(sharedKey, sizeof(sharedKey)); EVP_PKEY_free(eph_key); GOST_KEY_TRANSPORT_free(gkt); return ret; } /* * EVP_PKEY_METHOD callback decrypt * Implementation of GOST2018 key transport */ static int pkey_gost2018_decrypt(EVP_PKEY_CTX *pctx, unsigned char *key, size_t *key_len, const unsigned char *in, size_t in_len) { const unsigned char *p = in; struct gost_pmeth_data *data; EVP_PKEY *priv; PSKeyTransport_gost *pst = NULL; int ret = 0; unsigned char expkeys[64]; EVP_PKEY *eph_key = NULL; int pkey_nid; int mac_nid = NID_undef; int iv_len = 0; if (!(data = EVP_PKEY_CTX_get_data(pctx)) || !(priv = EVP_PKEY_CTX_get0_pkey(pctx))) { GOSTerr(GOST_F_PKEY_GOST2018_DECRYPT, GOST_R_ERROR_COMPUTING_EXPORT_KEYS); ret = 0; goto err; } pkey_nid = EVP_PKEY_base_id(priv); switch (data->cipher_nid) { case NID_magma_ctr: mac_nid = NID_magma_mac; iv_len = 4; break; case NID_grasshopper_ctr: mac_nid = NID_grasshopper_mac; iv_len = 8; break; default: GOSTerr(GOST_F_PKEY_GOST2018_DECRYPT, GOST_R_INVALID_CIPHER); return -1; break; } pst = d2i_PSKeyTransport_gost(NULL, (const unsigned char **)&p, in_len); if (!pst) { GOSTerr(GOST_F_PKEY_GOST2018_DECRYPT, GOST_R_ERROR_PARSING_KEY_TRANSPORT_INFO); return -1; } eph_key = X509_PUBKEY_get(pst->ephem_key); /* * TODO beldmit 1. Checks the next three conditions fulfilling and terminates the connection with fatal error if not. o Q_eph is on the same curve as server public key; o Q_eph is not equal to zero point; o q * Q_eph is not equal to zero point. */ if (eph_key == NULL) { GOSTerr(GOST_F_PKEY_GOST2018_DECRYPT, GOST_R_ERROR_COMPUTING_EXPORT_KEYS); ret = 0; goto err; } if (data->shared_ukm_size == 0 && pst->ukm != NULL) { if (EVP_PKEY_CTX_ctrl(pctx, -1, -1, EVP_PKEY_CTRL_SET_IV, ASN1_STRING_length(pst->ukm), (void *)ASN1_STRING_get0_data(pst->ukm)) < 0) { GOSTerr(GOST_F_PKEY_GOST2018_DECRYPT, GOST_R_UKM_NOT_SET); goto err; } } if (gost_keg(data->shared_ukm, pkey_nid, EC_KEY_get0_public_key(EVP_PKEY_get0(eph_key)), EVP_PKEY_get0(priv), expkeys) <= 0) { GOSTerr(GOST_F_PKEY_GOST2018_DECRYPT, GOST_R_ERROR_COMPUTING_EXPORT_KEYS); goto err; } if (gost_kimp15(ASN1_STRING_get0_data(pst->psexp), ASN1_STRING_length(pst->psexp), data->cipher_nid, expkeys + 32, mac_nid, expkeys + 0, data->shared_ukm + 24, iv_len, key) <= 0) { GOSTerr(GOST_F_PKEY_GOST2018_DECRYPT, GOST_R_CANNOT_UNPACK_EPHEMERAL_KEY); goto err; } *key_len = 32; ret = 1; err: OPENSSL_cleanse(expkeys, sizeof(expkeys)); EVP_PKEY_free(eph_key); PSKeyTransport_gost_free(pst); return ret; } int pkey_gost_decrypt(EVP_PKEY_CTX *pctx, unsigned char *key, size_t *key_len, const unsigned char *in, size_t in_len) { struct gost_pmeth_data *gctx = EVP_PKEY_CTX_get_data(pctx); if (key == NULL) { *key_len = 32; return 1; } if (key != NULL && *key_len < 32) { GOSTerr(GOST_F_PKEY_GOST_DECRYPT, GOST_R_INVALID_BUFFER_SIZE); return 0; } switch (gctx->cipher_nid) { case NID_id_Gost28147_89: case NID_undef: /* FIXME */ return pkey_GOST_ECcp_decrypt(pctx, key, key_len, in, in_len); case NID_kuznyechik_ctr: case NID_magma_ctr: return pkey_gost2018_decrypt(pctx, key, key_len, in, in_len); default: GOSTerr(GOST_F_PKEY_GOST_DECRYPT, ERR_R_INTERNAL_ERROR); return -1; } } /* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */ libengine-gost-openssl-3.0.2/gost_ec_sign.c000066400000000000000000000477021446070765000207350ustar00rootroot00000000000000/********************************************************************** * gost_ec_sign.c * * Copyright (c) 2005-2013 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Implementation of GOST R 34.10-2001 * * Requires OpenSSL 1.0.0+ for compilation * **********************************************************************/ #include "gost_lcl.h" #include #include #include #include #include "e_gost_err.h" #ifdef DEBUG_SIGN extern void dump_signature(const char *message, const unsigned char *buffer, size_t len); void dump_dsa_sig(const char *message, ECDSA_SIG *sig); #else # define dump_signature(a,b,c) # define dump_dsa_sig(a,b) #endif static R3410_ec_params *gost_nid2params(int nid) { R3410_ec_params *params; /* Map tc26-2012 256-bit parameters to cp-2001 parameters */ switch (nid) { case NID_id_tc26_gost_3410_2012_256_paramSetB: nid = NID_id_GostR3410_2001_CryptoPro_A_ParamSet; break; case NID_id_tc26_gost_3410_2012_256_paramSetC: nid = NID_id_GostR3410_2001_CryptoPro_B_ParamSet; break; case NID_id_tc26_gost_3410_2012_256_paramSetD: nid = NID_id_GostR3410_2001_CryptoPro_C_ParamSet; } /* Search nid in 2012 paramset */ params = R3410_2012_512_paramset; while (params->nid != NID_undef) { if (params->nid == nid) return params; params++; } /* Search nid in 2001 paramset */ params = R3410_2001_paramset; while (params->nid != NID_undef) { if (params->nid == nid) return params; params++; } return NULL; } void free_cached_groups() { R3410_ec_params *params; /* Search nid in 2012 paramset */ params = R3410_2012_512_paramset; while (params->nid != NID_undef) { EC_GROUP_free(params->group); params->group = NULL; params++; } /* Search nid in 2001 paramset */ params = R3410_2001_paramset; while (params->nid != NID_undef) { EC_GROUP_free(params->group); params->group = NULL; params++; } } /* * Fills EC_KEY structure hidden in the app_data field of DSA structure * with parameter information, extracted from parameter array in * params.c file. * * Also fils DSA->q field with copy of EC_GROUP order field to make * DSA_size function work */ int fill_GOST_EC_params(EC_KEY *eckey, int nid) { R3410_ec_params *params = gost_nid2params(nid); EC_GROUP *grp = NULL; EC_POINT *P = NULL; BIGNUM *p = NULL, *q = NULL, *a = NULL, *b = NULL, *x = NULL, *y = NULL, *cofactor = NULL; BN_CTX *ctx = NULL; int ok = 0; if (!eckey || !params) { GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, GOST_R_UNSUPPORTED_PARAMETER_SET); return 0; } if (params->group) { EC_GROUP_set_curve_name(params->group, nid); if (!EC_KEY_set_group(eckey, params->group)) { GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_INTERNAL_ERROR); goto end; } return 1; } if (!(ctx = BN_CTX_new())) { GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_MALLOC_FAILURE); return 0; } BN_CTX_start(ctx); p = BN_CTX_get(ctx); a = BN_CTX_get(ctx); b = BN_CTX_get(ctx); x = BN_CTX_get(ctx); y = BN_CTX_get(ctx); q = BN_CTX_get(ctx); cofactor = BN_CTX_get(ctx); if (!p || !a || !b || !x || !y || !q || !cofactor) { GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_MALLOC_FAILURE); goto end; } if (!BN_hex2bn(&p, params->p) || !BN_hex2bn(&a, params->a) || !BN_hex2bn(&b, params->b) || !BN_hex2bn(&cofactor, params->cofactor)) { GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_INTERNAL_ERROR); goto end; } grp = EC_GROUP_new_curve_GFp(p, a, b, ctx); if (!grp) { GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_MALLOC_FAILURE); goto end; } P = EC_POINT_new(grp); if (!P) { GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_MALLOC_FAILURE); goto end; } if (!BN_hex2bn(&x, params->x) || !BN_hex2bn(&y, params->y) || !EC_POINT_set_affine_coordinates(grp, P, x, y, ctx) || !BN_hex2bn(&q, params->q)) { GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_INTERNAL_ERROR); goto end; } if (!EC_GROUP_set_generator(grp, P, q, cofactor)) { GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_INTERNAL_ERROR); goto end; } EC_GROUP_set_curve_name(grp, nid); params->group = grp; if (!EC_KEY_set_group(eckey, grp)) { GOSTerr(GOST_F_FILL_GOST_EC_PARAMS, ERR_R_INTERNAL_ERROR); goto end; } ok = 1; end: EC_POINT_free(P); BN_CTX_end(ctx); BN_CTX_free(ctx); return ok; } /* * Computes gost_ec signature as ECDSA_SIG structure * */ ECDSA_SIG *gost_ec_sign(const unsigned char *dgst, int dlen, EC_KEY *eckey) { ECDSA_SIG *newsig = NULL, *ret = NULL; BIGNUM *md = NULL; BIGNUM *order = NULL; const EC_GROUP *group; const BIGNUM *priv_key; BIGNUM *r = NULL, *s = NULL, *X = NULL, *tmp = NULL, *tmp2 = NULL, *k = NULL, *e = NULL; BIGNUM *new_r = NULL, *new_s = NULL; EC_POINT *C = NULL; BN_CTX *ctx; OPENSSL_assert(dgst != NULL && eckey != NULL); if (!(ctx = BN_CTX_secure_new())) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_MALLOC_FAILURE); return NULL; } BN_CTX_start(ctx); OPENSSL_assert(dlen == 32 || dlen == 64); md = BN_lebin2bn(dgst, dlen, NULL); newsig = ECDSA_SIG_new(); if (!newsig || !md) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_MALLOC_FAILURE); goto err; } group = EC_KEY_get0_group(eckey); if (!group) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_INTERNAL_ERROR); goto err; } order = BN_CTX_get(ctx); if (!order || !EC_GROUP_get_order(group, order, ctx)) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_INTERNAL_ERROR); goto err; } priv_key = EC_KEY_get0_private_key(eckey); if (!priv_key) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_INTERNAL_ERROR); goto err; } e = BN_CTX_get(ctx); if (!e || !BN_mod(e, md, order, ctx)) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_INTERNAL_ERROR); goto err; } #ifdef DEBUG_SIGN fprintf(stderr, "digest as bignum="); BN_print_fp(stderr, md); fprintf(stderr, "\ndigest mod q="); BN_print_fp(stderr, e); fprintf(stderr, "\n"); #endif if (BN_is_zero(e)) { BN_one(e); } k = BN_CTX_get(ctx); C = EC_POINT_new(group); if (!k || !C) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_MALLOC_FAILURE); goto err; } do { do { if (!BN_rand_range(k, order)) { GOSTerr(GOST_F_GOST_EC_SIGN, GOST_R_RNG_ERROR); goto err; } if (!gost_ec_point_mul(group, C, k, NULL, NULL, ctx)) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_EC_LIB); goto err; } if (!X) X = BN_CTX_get(ctx); if (!r) r = BN_CTX_get(ctx); if (!X || !r) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_MALLOC_FAILURE); goto err; } if (!EC_POINT_get_affine_coordinates(group, C, X, NULL, ctx)) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_EC_LIB); goto err; } if (!BN_nnmod(r, X, order, ctx)) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_INTERNAL_ERROR); goto err; } } while (BN_is_zero(r)); /* s = (r*priv_key+k*e) mod order */ if (!tmp) tmp = BN_CTX_get(ctx); if (!tmp2) tmp2 = BN_CTX_get(ctx); if (!s) s = BN_CTX_get(ctx); if (!tmp || !tmp2 || !s) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_MALLOC_FAILURE); goto err; } if (!BN_mod_mul(tmp, priv_key, r, order, ctx) || !BN_mod_mul(tmp2, k, e, order, ctx) || !BN_mod_add(s, tmp, tmp2, order, ctx)) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_INTERNAL_ERROR); goto err; } } while (BN_is_zero(s)); new_s = BN_dup(s); new_r = BN_dup(r); if (!new_s || !new_r) { GOSTerr(GOST_F_GOST_EC_SIGN, ERR_R_MALLOC_FAILURE); goto err; } ECDSA_SIG_set0(newsig, new_r, new_s); ret = newsig; err: BN_CTX_end(ctx); BN_CTX_free(ctx); if (C) EC_POINT_free(C); if (md) BN_free(md); if (!ret && newsig) { ECDSA_SIG_free(newsig); } return ret; } /* * Verifies gost ec signature * */ int gost_ec_verify(const unsigned char *dgst, int dgst_len, ECDSA_SIG *sig, EC_KEY *ec) { BN_CTX *ctx; const EC_GROUP *group = (ec) ? EC_KEY_get0_group(ec) : NULL; BIGNUM *order; BIGNUM *md = NULL, *e = NULL, *R = NULL, *v = NULL, *z1 = NULL, *z2 = NULL; const BIGNUM *sig_s = NULL, *sig_r = NULL; BIGNUM *X = NULL, *tmp = NULL; EC_POINT *C = NULL; const EC_POINT *pub_key = NULL; int ok = 0; OPENSSL_assert(dgst != NULL && sig != NULL && group != NULL); if (!(ctx = BN_CTX_new())) { GOSTerr(GOST_F_GOST_EC_VERIFY, ERR_R_MALLOC_FAILURE); return 0; } BN_CTX_start(ctx); order = BN_CTX_get(ctx); e = BN_CTX_get(ctx); z1 = BN_CTX_get(ctx); z2 = BN_CTX_get(ctx); tmp = BN_CTX_get(ctx); X = BN_CTX_get(ctx); R = BN_CTX_get(ctx); v = BN_CTX_get(ctx); if (!order || !e || !z1 || !z2 || !tmp || !X || !R || !v) { GOSTerr(GOST_F_GOST_EC_VERIFY, ERR_R_MALLOC_FAILURE); goto err; } pub_key = EC_KEY_get0_public_key(ec); if (!pub_key || !EC_GROUP_get_order(group, order, ctx)) { GOSTerr(GOST_F_GOST_EC_VERIFY, ERR_R_INTERNAL_ERROR); goto err; } ECDSA_SIG_get0(sig, &sig_r, &sig_s); if (BN_is_zero(sig_s) || BN_is_zero(sig_r) || BN_is_negative(sig_s) || BN_is_negative(sig_r) || BN_ucmp(sig_s, order) >= 0 || BN_ucmp(sig_r, order) >= 0) { GOSTerr(GOST_F_GOST_EC_VERIFY, GOST_R_SIGNATURE_PARTS_GREATER_THAN_Q); goto err; } OPENSSL_assert(dgst_len == 32 || dgst_len == 64); md = BN_lebin2bn(dgst, dgst_len, NULL); if (!md || !BN_mod(e, md, order, ctx)) { GOSTerr(GOST_F_GOST_EC_VERIFY, ERR_R_INTERNAL_ERROR); goto err; } #ifdef DEBUG_SIGN fprintf(stderr, "digest as bignum: "); BN_print_fp(stderr, md); fprintf(stderr, "\ndigest mod q: "); BN_print_fp(stderr, e); #endif if (BN_is_zero(e) && !BN_one(e)) { GOSTerr(GOST_F_GOST_EC_VERIFY, ERR_R_INTERNAL_ERROR); goto err; } v = BN_mod_inverse(v, e, order, ctx); if (!v || !BN_mod_mul(z1, sig_s, v, order, ctx) || !BN_sub(tmp, order, sig_r) || !BN_mod_mul(z2, tmp, v, order, ctx)) { GOSTerr(GOST_F_GOST_EC_VERIFY, ERR_R_INTERNAL_ERROR); goto err; } #ifdef DEBUG_SIGN fprintf(stderr, "\nInverted digest value: "); BN_print_fp(stderr, v); fprintf(stderr, "\nz1: "); BN_print_fp(stderr, z1); fprintf(stderr, "\nz2: "); BN_print_fp(stderr, z2); #endif C = EC_POINT_new(group); if (!C) { GOSTerr(GOST_F_GOST_EC_VERIFY, ERR_R_MALLOC_FAILURE); goto err; } if (!gost_ec_point_mul(group, C, z1, pub_key, z2, ctx)) { GOSTerr(GOST_F_GOST_EC_VERIFY, ERR_R_EC_LIB); goto err; } if (!EC_POINT_get_affine_coordinates(group, C, X, NULL, ctx)) { GOSTerr(GOST_F_GOST_EC_VERIFY, ERR_R_EC_LIB); goto err; } if (!BN_mod(R, X, order, ctx)) { GOSTerr(GOST_F_GOST_EC_VERIFY, ERR_R_INTERNAL_ERROR); goto err; } #ifdef DEBUG_SIGN fprintf(stderr, "\nX="); BN_print_fp(stderr, X); fprintf(stderr, "\nX mod q="); BN_print_fp(stderr, R); fprintf(stderr, "\n"); #endif if (BN_cmp(R, sig_r) != 0) { GOSTerr(GOST_F_GOST_EC_VERIFY, GOST_R_SIGNATURE_MISMATCH); } else { ok = 1; } err: if (C) EC_POINT_free(C); BN_CTX_end(ctx); BN_CTX_free(ctx); if (md) BN_free(md); return ok; } /* * Computes GOST R 34.10-2001 public key * or GOST R 34.10-2012 public key * */ int gost_ec_compute_public(EC_KEY *ec) { const EC_GROUP *group = (ec) ? EC_KEY_get0_group(ec) : NULL; EC_POINT *pub_key = NULL; const BIGNUM *priv_key = NULL; BN_CTX *ctx = NULL; int ok = 0; if (!group) { GOSTerr(GOST_F_GOST_EC_COMPUTE_PUBLIC, GOST_R_KEY_IS_NOT_INITIALIZED); return 0; } ctx = BN_CTX_secure_new(); if (!ctx) { GOSTerr(GOST_F_GOST_EC_COMPUTE_PUBLIC, ERR_R_MALLOC_FAILURE); return 0; } BN_CTX_start(ctx); priv_key = EC_KEY_get0_private_key(ec); if (!priv_key) { GOSTerr(GOST_F_GOST_EC_COMPUTE_PUBLIC, ERR_R_EC_LIB); goto err; } pub_key = EC_POINT_new(group); if (!pub_key) { GOSTerr(GOST_F_GOST_EC_COMPUTE_PUBLIC, ERR_R_MALLOC_FAILURE); goto err; } if (!gost_ec_point_mul(group, pub_key, priv_key, NULL, NULL, ctx)) { GOSTerr(GOST_F_GOST_EC_COMPUTE_PUBLIC, ERR_R_EC_LIB); goto err; } if (!EC_KEY_set_public_key(ec, pub_key)) { GOSTerr(GOST_F_GOST_EC_COMPUTE_PUBLIC, ERR_R_EC_LIB); goto err; } ok = 1; err: if (pub_key) EC_POINT_free(pub_key); BN_CTX_end(ctx); BN_CTX_free(ctx); return ok; } int gost_ec_point_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx) { if (group == NULL || r == NULL || ctx == NULL) return 0; if (m != NULL && n != NULL) { /* verification */ if (q == NULL) return 0; switch(EC_GROUP_get_curve_name(group)) { case NID_id_GostR3410_2001_CryptoPro_A_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet: case NID_id_tc26_gost_3410_2012_256_paramSetB: return point_mul_two_id_GostR3410_2001_CryptoPro_A_ParamSet(group, r, n, q, m, ctx); case NID_id_GostR3410_2001_CryptoPro_B_ParamSet: case NID_id_tc26_gost_3410_2012_256_paramSetC: return point_mul_two_id_GostR3410_2001_CryptoPro_B_ParamSet(group, r, n, q, m, ctx); case NID_id_GostR3410_2001_CryptoPro_C_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet: case NID_id_tc26_gost_3410_2012_256_paramSetD: return point_mul_two_id_GostR3410_2001_CryptoPro_C_ParamSet(group, r, n, q, m, ctx); case NID_id_GostR3410_2001_TestParamSet: return point_mul_two_id_GostR3410_2001_TestParamSet(group, r, n, q, m, ctx); case NID_id_tc26_gost_3410_2012_256_paramSetA: return point_mul_two_id_tc26_gost_3410_2012_256_paramSetA(group, r, n, q, m, ctx); case NID_id_tc26_gost_3410_2012_512_paramSetA: return point_mul_two_id_tc26_gost_3410_2012_512_paramSetA(group, r, n, q, m, ctx); case NID_id_tc26_gost_3410_2012_512_paramSetB: return point_mul_two_id_tc26_gost_3410_2012_512_paramSetB(group, r, n, q, m, ctx); case NID_id_tc26_gost_3410_2012_512_paramSetC: return point_mul_two_id_tc26_gost_3410_2012_512_paramSetC(group, r, n, q, m, ctx); default: return EC_POINT_mul(group, r, n, q, m, ctx); } } else if (n != NULL) { /* mul g */ switch(EC_GROUP_get_curve_name(group)) { case NID_id_GostR3410_2001_CryptoPro_A_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet: case NID_id_tc26_gost_3410_2012_256_paramSetB: return point_mul_g_id_GostR3410_2001_CryptoPro_A_ParamSet(group, r, n, ctx); case NID_id_GostR3410_2001_CryptoPro_B_ParamSet: case NID_id_tc26_gost_3410_2012_256_paramSetC: return point_mul_g_id_GostR3410_2001_CryptoPro_B_ParamSet(group, r, n, ctx); case NID_id_GostR3410_2001_CryptoPro_C_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet: case NID_id_tc26_gost_3410_2012_256_paramSetD: return point_mul_g_id_GostR3410_2001_CryptoPro_C_ParamSet(group, r, n, ctx); case NID_id_GostR3410_2001_TestParamSet: return point_mul_g_id_GostR3410_2001_TestParamSet(group, r, n, ctx); case NID_id_tc26_gost_3410_2012_256_paramSetA: return point_mul_g_id_tc26_gost_3410_2012_256_paramSetA(group, r, n, ctx); case NID_id_tc26_gost_3410_2012_512_paramSetA: return point_mul_g_id_tc26_gost_3410_2012_512_paramSetA(group, r, n, ctx); case NID_id_tc26_gost_3410_2012_512_paramSetB: return point_mul_g_id_tc26_gost_3410_2012_512_paramSetB(group, r, n, ctx); case NID_id_tc26_gost_3410_2012_512_paramSetC: return point_mul_g_id_tc26_gost_3410_2012_512_paramSetC(group, r, n, ctx); default: return EC_POINT_mul(group, r, n, q, m, ctx); } } else if (m != NULL) { if (q == NULL) return 0; /* mul */ switch(EC_GROUP_get_curve_name(group)) { case NID_id_GostR3410_2001_CryptoPro_A_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet: case NID_id_tc26_gost_3410_2012_256_paramSetB: return point_mul_id_GostR3410_2001_CryptoPro_A_ParamSet(group, r, q, m, ctx); case NID_id_GostR3410_2001_CryptoPro_B_ParamSet: case NID_id_tc26_gost_3410_2012_256_paramSetC: return point_mul_id_GostR3410_2001_CryptoPro_B_ParamSet(group, r, q, m, ctx); case NID_id_GostR3410_2001_CryptoPro_C_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet: case NID_id_tc26_gost_3410_2012_256_paramSetD: return point_mul_id_GostR3410_2001_CryptoPro_C_ParamSet(group, r, q, m, ctx); case NID_id_GostR3410_2001_TestParamSet: return point_mul_id_GostR3410_2001_TestParamSet(group, r, q, m, ctx); case NID_id_tc26_gost_3410_2012_256_paramSetA: return point_mul_id_tc26_gost_3410_2012_256_paramSetA(group, r, q, m, ctx); case NID_id_tc26_gost_3410_2012_512_paramSetA: return point_mul_id_tc26_gost_3410_2012_512_paramSetA(group, r, q, m, ctx); case NID_id_tc26_gost_3410_2012_512_paramSetB: return point_mul_id_tc26_gost_3410_2012_512_paramSetB(group, r, q, m, ctx); case NID_id_tc26_gost_3410_2012_512_paramSetC: return point_mul_id_tc26_gost_3410_2012_512_paramSetC(group, r, q, m, ctx); default: return EC_POINT_mul(group, r, n, q, m, ctx); } } return 0; } /* * * Generates GOST R 34.10-2001 * or GOST R 34.10-2012 keypair * */ int gost_ec_keygen(EC_KEY *ec) { BIGNUM *order = NULL, *d = NULL; const EC_GROUP *group = (ec) ? EC_KEY_get0_group(ec) : NULL; int ok = 0; if (!group) { GOSTerr(GOST_F_GOST_EC_KEYGEN, ERR_R_INTERNAL_ERROR); return 0; } order = BN_new(); d = BN_secure_new(); if (!order || !d) { GOSTerr(GOST_F_GOST_EC_KEYGEN, ERR_R_MALLOC_FAILURE); goto end; } if (!EC_GROUP_get_order(group, order, NULL)) { GOSTerr(GOST_F_GOST_EC_KEYGEN, ERR_R_INTERNAL_ERROR); goto end; } do { if (!BN_rand_range(d, order)) { GOSTerr(GOST_F_GOST_EC_KEYGEN, GOST_R_RNG_ERROR); goto end; } } while (BN_is_zero(d)); if (!EC_KEY_set_private_key(ec, d)) { GOSTerr(GOST_F_GOST_EC_KEYGEN, ERR_R_INTERNAL_ERROR); goto end; } ok = 1; end: if (d) BN_free(d); if (order) BN_free(order); return (ok) ? gost_ec_compute_public(ec) : 0; } libengine-gost-openssl-3.0.2/gost_eng.c000066400000000000000000000341771446070765000201010ustar00rootroot00000000000000/********************************************************************** * gost_eng.c * * Main file of GOST engine * * * * Copyright (c) 2005-2006 Cryptocom LTD * * Copyright (c) 2020 Chikunov Vitaly * * * * This file is distributed under the same license as OpenSSL * * * **********************************************************************/ #include #include #include #include #include #include #include "e_gost_err.h" #include "gost_lcl.h" #include "gost-engine.h" #include "gost_grasshopper_cipher.h" static const char* engine_gost_id = "gost"; static const char* engine_gost_name = "Reference implementation of GOST engine"; const ENGINE_CMD_DEFN gost_cmds[] = { {GOST_CTRL_CRYPT_PARAMS, "CRYPT_PARAMS", "OID of default GOST 28147-89 parameters", ENGINE_CMD_FLAG_STRING}, {GOST_CTRL_PBE_PARAMS, "PBE_PARAMS", "Shortname of default digest alg for PBE", ENGINE_CMD_FLAG_STRING}, {GOST_CTRL_PK_FORMAT, "GOST_PK_FORMAT", "Private key format params", ENGINE_CMD_FLAG_STRING}, {0, NULL, NULL, 0} }; /* Symmetric cipher and digest function registrar */ static int gost_ciphers(ENGINE* e, const EVP_CIPHER** cipher, const int** nids, int nid); static int gost_digests(ENGINE* e, const EVP_MD** digest, const int** nids, int nid); static int gost_pkey_meths(ENGINE* e, EVP_PKEY_METHOD** pmeth, const int** nids, int nid); static int gost_pkey_asn1_meths(ENGINE* e, EVP_PKEY_ASN1_METHOD** ameth, const int** nids, int nid); static EVP_PKEY_METHOD* pmeth_GostR3410_2001 = NULL, * pmeth_GostR3410_2001DH = NULL, * pmeth_GostR3410_2012_256 = NULL, * pmeth_GostR3410_2012_512 = NULL, * pmeth_Gost28147_MAC = NULL, * pmeth_Gost28147_MAC_12 = NULL, * pmeth_magma_mac = NULL, * pmeth_grasshopper_mac = NULL, * pmeth_magma_mac_acpkm = NULL, * pmeth_grasshopper_mac_acpkm = NULL; static EVP_PKEY_ASN1_METHOD* ameth_GostR3410_2001 = NULL, * ameth_GostR3410_2001DH = NULL, * ameth_GostR3410_2012_256 = NULL, * ameth_GostR3410_2012_512 = NULL, * ameth_Gost28147_MAC = NULL, * ameth_Gost28147_MAC_12 = NULL, * ameth_magma_mac = NULL, * ameth_grasshopper_mac = NULL, * ameth_magma_mac_acpkm = NULL, * ameth_grasshopper_mac_acpkm = NULL; GOST_digest *gost_digest_array[] = { &GostR3411_94_digest, &Gost28147_89_MAC_digest, &GostR3411_2012_256_digest, &GostR3411_2012_512_digest, &Gost28147_89_mac_12_digest, &magma_mac_digest, &grasshopper_mac_digest, &kuznyechik_ctracpkm_omac_digest, }; GOST_cipher *gost_cipher_array[] = { &Gost28147_89_cipher, &Gost28147_89_cnt_cipher, &Gost28147_89_cnt_12_cipher, &Gost28147_89_cbc_cipher, &grasshopper_ecb_cipher, &grasshopper_cbc_cipher, &grasshopper_cfb_cipher, &grasshopper_ofb_cipher, &grasshopper_ctr_cipher, &magma_ecb_cipher, &grasshopper_mgm_cipher, &magma_cbc_cipher, &magma_ctr_cipher, &magma_ctr_acpkm_cipher, &magma_ctr_acpkm_omac_cipher, &magma_mgm_cipher, &grasshopper_ctr_acpkm_cipher, &grasshopper_ctr_acpkm_omac_cipher, &magma_kexp15_cipher, &kuznyechik_kexp15_cipher, }; static struct gost_meth_minfo { int nid; EVP_PKEY_METHOD **pmeth; EVP_PKEY_ASN1_METHOD **ameth; const char *pemstr; const char *info; } gost_meth_array[] = { { NID_id_GostR3410_2001, &pmeth_GostR3410_2001, &ameth_GostR3410_2001, "GOST2001", "GOST R 34.10-2001", }, { NID_id_GostR3410_2001DH, &pmeth_GostR3410_2001DH, &ameth_GostR3410_2001DH, "GOST2001 DH", "GOST R 34.10-2001 DH", }, { NID_id_Gost28147_89_MAC, &pmeth_Gost28147_MAC, &ameth_Gost28147_MAC, "GOST-MAC", "GOST 28147-89 MAC", }, { NID_id_GostR3410_2012_256, &pmeth_GostR3410_2012_256, &ameth_GostR3410_2012_256, "GOST2012_256", "GOST R 34.10-2012 with 256 bit key", }, { NID_id_GostR3410_2012_512, &pmeth_GostR3410_2012_512, &ameth_GostR3410_2012_512, "GOST2012_512", "GOST R 34.10-2012 with 512 bit key", }, { NID_gost_mac_12, &pmeth_Gost28147_MAC_12, &ameth_Gost28147_MAC_12, "GOST-MAC-12", "GOST 28147-89 MAC with 2012 params", }, { NID_magma_mac, &pmeth_magma_mac, &ameth_magma_mac, "MAGMA-MAC", "GOST R 34.13-2015 Magma MAC", }, { NID_grasshopper_mac, &pmeth_grasshopper_mac, &ameth_grasshopper_mac, "KUZNYECHIK-MAC", "GOST R 34.13-2015 Grasshopper MAC", }, { NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac, &pmeth_magma_mac_acpkm, &ameth_magma_mac_acpkm, "ID-TC26-CIPHER-GOSTR3412-2015-MAGMA-CTRACPKM-OMAC", "GOST R 34.13-2015 Magma MAC ACPKM", }, { NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac, &pmeth_grasshopper_mac_acpkm, &ameth_grasshopper_mac_acpkm, "ID-TC26-CIPHER-GOSTR3412-2015-KUZNYECHIK-CTRACPKM-OMAC", "GOST R 34.13-2015 Grasshopper MAC ACPKM", }, { 0 }, }; #ifndef OSSL_NELEM # define OSSL_NELEM(x) (sizeof(x)/sizeof((x)[0])) #endif static int known_digest_nids[OSSL_NELEM(gost_digest_array)]; static int known_cipher_nids[OSSL_NELEM(gost_cipher_array)]; /* `- 1' because of terminating zero element */ static int known_meths_nids[OSSL_NELEM(gost_meth_array) - 1]; /* ENGINE_DIGESTS_PTR callback installed by ENGINE_set_digests */ static int gost_digests(ENGINE *e, const EVP_MD **digest, const int **nids, int nid) { int i; if (!digest) { int *n = known_digest_nids; *nids = n; for (i = 0; i < OSSL_NELEM(gost_digest_array); i++) *n++ = gost_digest_array[i]->nid; return i; } for (i = 0; i < OSSL_NELEM(gost_digest_array); i++) if (nid == gost_digest_array[i]->nid) { *digest = GOST_init_digest(gost_digest_array[i]); return 1; } *digest = NULL; return 0; } /* ENGINE_CIPHERS_PTR callback installed by ENGINE_set_ciphers */ static int gost_ciphers(ENGINE *e, const EVP_CIPHER **cipher, const int **nids, int nid) { int i; if (!cipher) { int *n = known_cipher_nids; *nids = n; for (i = 0; i < OSSL_NELEM(gost_cipher_array); i++) *n++ = gost_cipher_array[i]->nid; return i; } for (i = 0; i < OSSL_NELEM(gost_cipher_array); i++) if (nid == gost_cipher_array[i]->nid) { *cipher = GOST_init_cipher(gost_cipher_array[i]); return 1; } *cipher = NULL; return 0; } static int gost_meth_nids(const int **nids) { struct gost_meth_minfo *info = gost_meth_array; int *n = known_meths_nids; *nids = n; for (; info->nid; info++) *n++ = info->nid; return OSSL_NELEM(known_meths_nids); } /* ENGINE_PKEY_METHS_PTR installed by ENGINE_set_pkey_meths */ static int gost_pkey_meths(ENGINE *e, EVP_PKEY_METHOD **pmeth, const int **nids, int nid) { struct gost_meth_minfo *info; if (!pmeth) return gost_meth_nids(nids); for (info = gost_meth_array; info->nid; info++) if (nid == info->nid) { *pmeth = *info->pmeth; return 1; } *pmeth = NULL; return 0; } /* ENGINE_PKEY_ASN1_METHS_PTR installed by ENGINE_set_pkey_asn1_meths */ static int gost_pkey_asn1_meths(ENGINE *e, EVP_PKEY_ASN1_METHOD **ameth, const int **nids, int nid) { struct gost_meth_minfo *info; if (!ameth) return gost_meth_nids(nids); for (info = gost_meth_array; info->nid; info++) if (nid == info->nid) { *ameth = *info->ameth; return 1; } *ameth = NULL; return 0; } static int gost_engine_init(ENGINE* e) { return 1; } static int gost_engine_finish(ENGINE* e) { return 1; } static void free_NIDs(); static int gost_engine_destroy(ENGINE* e) { int i; for (i = 0; i < OSSL_NELEM(gost_digest_array); i++) GOST_deinit_digest(gost_digest_array[i]); for (i = 0; i < OSSL_NELEM(gost_cipher_array); i++) GOST_deinit_cipher(gost_cipher_array[i]); gost_param_free(); struct gost_meth_minfo *minfo = gost_meth_array; for (; minfo->nid; minfo++) { *minfo->pmeth = NULL; *minfo->ameth = NULL; } free_cached_groups(); free_NIDs(); # ifndef BUILDING_GOST_PROVIDER ERR_unload_GOST_strings(); # endif return 1; } /* * Following is the glue that populates the ENGINE structure and that * binds it to OpenSSL libraries */ static GOST_NID_JOB *missing_NIDs[] = { &kuznyechik_mgm_NID, &magma_mgm_NID, }; static int create_NIDs() { int i; int new_nid = OBJ_new_nid(OSSL_NELEM(missing_NIDs)); for (i = 0; i < OSSL_NELEM(missing_NIDs); i++) { GOST_NID_JOB *job = missing_NIDs[i]; ASN1_OBJECT *obj = ASN1_OBJECT_create(new_nid + i, NULL, 0, job->sn, job->ln); job->asn1 = obj; if (!obj || OBJ_add_object(obj) == NID_undef) { OPENSSL_free(obj); return 0; } (*missing_NIDs[i]->callback)(new_nid + i); } return 1; } static void free_NIDs() { int i; for (i = 0; i < OSSL_NELEM(missing_NIDs); i++) { ASN1_OBJECT_free(missing_NIDs[i]->asn1); } } # ifndef BUILDING_GOST_PROVIDER static # endif int populate_gost_engine(ENGINE* e) { int ret = 0; if (e == NULL) goto end; if (!ENGINE_set_id(e, engine_gost_id)) { fprintf(stderr, "ENGINE_set_id failed\n"); goto end; } if (!ENGINE_set_name(e, engine_gost_name)) { fprintf(stderr, "ENGINE_set_name failed\n"); goto end; } if (!create_NIDs()) { fprintf(stderr, "NID creation failed\n"); goto end; } if (!ENGINE_set_digests(e, gost_digests)) { fprintf(stderr, "ENGINE_set_digests failed\n"); goto end; } if (!ENGINE_set_ciphers(e, gost_ciphers)) { fprintf(stderr, "ENGINE_set_ciphers failed\n"); goto end; } if (!ENGINE_set_pkey_meths(e, gost_pkey_meths)) { fprintf(stderr, "ENGINE_set_pkey_meths failed\n"); goto end; } if (!ENGINE_set_pkey_asn1_meths(e, gost_pkey_asn1_meths)) { fprintf(stderr, "ENGINE_set_pkey_asn1_meths failed\n"); goto end; } /* Control function and commands */ if (!ENGINE_set_cmd_defns(e, gost_cmds)) { fprintf(stderr, "ENGINE_set_cmd_defns failed\n"); goto end; } if (!ENGINE_set_ctrl_function(e, gost_control_func)) { fprintf(stderr, "ENGINE_set_ctrl_func failed\n"); goto end; } if (!ENGINE_set_destroy_function(e, gost_engine_destroy) || !ENGINE_set_init_function(e, gost_engine_init) || !ENGINE_set_finish_function(e, gost_engine_finish)) { goto end; } /* * "register" in "register_ameth_gost" and "register_pmeth_gost" is * not registering in an ENGINE sense, where things are hooked into * OpenSSL's library. "register_ameth_gost" and "register_pmeth_gost" * merely allocate and populate the method structures of this engine. */ struct gost_meth_minfo *minfo = gost_meth_array; for (; minfo->nid; minfo++) { /* This skip looks temporary. */ if (minfo->nid == NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac) continue; if (!register_ameth_gost(minfo->nid, minfo->ameth, minfo->pemstr, minfo->info)) goto end; if (!register_pmeth_gost(minfo->nid, minfo->pmeth, 0)) goto end; } ret = 1; end: return ret; } #ifndef BUILDING_GOST_PROVIDER static int bind_gost_engine(ENGINE* e) { int ret = 0; if (!ENGINE_register_ciphers(e) || !ENGINE_register_digests(e) || !ENGINE_register_pkey_meths(e)) goto end; int i; for (i = 0; i < OSSL_NELEM(gost_cipher_array); i++) { if (!EVP_add_cipher(GOST_init_cipher(gost_cipher_array[i]))) goto end; } for (i = 0; i < OSSL_NELEM(gost_digest_array); i++) { if (!EVP_add_digest(GOST_init_digest(gost_digest_array[i]))) goto end; } ENGINE_register_all_complete(); ERR_load_GOST_strings(); ret = 1; end: return ret; } static int check_gost_engine(ENGINE* e, const char* id) { if (id != NULL && strcmp(id, engine_gost_id) != 0) return 0; if (ameth_GostR3410_2001) { printf("GOST engine already loaded\n"); return 0; } return 1; } static int make_gost_engine(ENGINE* e, const char* id) { return check_gost_engine(e, id) && populate_gost_engine(e) && bind_gost_engine(e); } #ifndef BUILDING_ENGINE_AS_LIBRARY /* * When building gost-engine as a dynamically loadable module, these two * lines do everything that's needed, and OpenSSL's libcrypto will be able * to call its entry points, v_check and bind_engine. */ IMPLEMENT_DYNAMIC_BIND_FN(make_gost_engine) IMPLEMENT_DYNAMIC_CHECK_FN() #else /* * When building gost-engine as a shared library, the application that uses * it must manually call ENGINE_load_gost() for it to bind itself into the * libcrypto libraries. */ void ENGINE_load_gost(void) { ENGINE* toadd; int ret = 0; if ((toadd = ENGINE_new()) != NULL && (ret = make_gost_engine(toadd, engine_gost_id)) > 0) ENGINE_add(toadd); ENGINE_free(toadd); if (ret > 0) ERR_clear_error(); } #endif #endif /* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */ libengine-gost-openssl-3.0.2/gost_gost2015.c000066400000000000000000000365051446070765000206110ustar00rootroot00000000000000/* * Copyright (c) 2020 Dmitry Belyavskiy * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #include "gost_lcl.h" #include "gost_gost2015.h" #include "gost_grasshopper_defines.h" #include "gost_grasshopper_math.h" #include "e_gost_err.h" #include #include int gost2015_final_call(EVP_CIPHER_CTX *ctx, EVP_MD_CTX *omac_ctx, size_t mac_size, unsigned char *encrypted_mac, int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl)) { unsigned char calculated_mac[KUZNYECHIK_MAC_MAX_SIZE]; memset(calculated_mac, 0, KUZNYECHIK_MAC_MAX_SIZE); if (EVP_CIPHER_CTX_encrypting(ctx)) { EVP_DigestSignFinal(omac_ctx, calculated_mac, &mac_size); if (do_cipher(ctx, encrypted_mac, calculated_mac, mac_size) <= 0) { return -1; } } else { unsigned char expected_mac[KUZNYECHIK_MAC_MAX_SIZE]; memset(expected_mac, 0, KUZNYECHIK_MAC_MAX_SIZE); EVP_DigestSignFinal(omac_ctx, calculated_mac, &mac_size); if (do_cipher(ctx, expected_mac, encrypted_mac, mac_size) <= 0) { return -1; } if (CRYPTO_memcmp(expected_mac, calculated_mac, mac_size) != 0) return -1; } return 0; } /* * UKM = iv|kdf_seed * */ #define MAX_GOST2015_UKM_SIZE 16 #define KDF_SEED_SIZE 8 int gost2015_get_asn1_params(const ASN1_TYPE *params, size_t ukm_size, unsigned char *iv, size_t ukm_offset, unsigned char *kdf_seed) { int iv_len = 16; GOST2015_CIPHER_PARAMS *gcp = NULL; unsigned char *p = NULL; memset(iv, 0, iv_len); /* ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ Ņ‚Đ¸Đŋ params */ if (ASN1_TYPE_get(params) != V_ASN1_SEQUENCE) { GOSTerr(GOST_F_GOST2015_GET_ASN1_PARAMS, GOST_R_INVALID_CIPHER_PARAMS); return 0; } p = params->value.sequence->data; /* ИСвĐģĐĩĐēаĐĩĐŧ ŅŅ‚Ņ€ŅƒĐēŅ‚ŅƒŅ€Ņƒ ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€ĐžĐ˛ */ gcp = d2i_GOST2015_CIPHER_PARAMS(NULL, (const unsigned char **)&p, params->value.sequence->length); if (gcp == NULL) { GOSTerr(GOST_F_GOST2015_GET_ASN1_PARAMS, GOST_R_INVALID_CIPHER_PARAMS); return 0; } /* ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ Đ´ĐģиĐŊ҃ ŅĐ¸ĐŊŅ…Ņ€ĐžĐŋĐžŅŅ‹ĐģĐēи */ if (gcp->ukm->length != (int)ukm_size) { GOSTerr(GOST_F_GOST2015_GET_ASN1_PARAMS, GOST_R_INVALID_CIPHER_PARAMS); GOST2015_CIPHER_PARAMS_free(gcp); return 0; } memcpy(iv, gcp->ukm->data, ukm_offset); memcpy(kdf_seed, gcp->ukm->data+ukm_offset, KDF_SEED_SIZE); GOST2015_CIPHER_PARAMS_free(gcp); return 1; } int gost2015_set_asn1_params(ASN1_TYPE *params, const unsigned char *iv, size_t iv_size, const unsigned char *kdf_seed) { GOST2015_CIPHER_PARAMS *gcp = GOST2015_CIPHER_PARAMS_new(); int ret = 0, len = 0; ASN1_OCTET_STRING *os = NULL; unsigned char ukm_buf[MAX_GOST2015_UKM_SIZE]; unsigned char *buf = NULL; if (gcp == NULL) { GOSTerr(GOST_F_GOST2015_SET_ASN1_PARAMS, ERR_R_MALLOC_FAILURE); return 0; } memcpy(ukm_buf, iv, iv_size); memcpy(ukm_buf+iv_size, kdf_seed, KDF_SEED_SIZE); if (ASN1_STRING_set(gcp->ukm, ukm_buf, iv_size + KDF_SEED_SIZE) == 0) { GOSTerr(GOST_F_GOST2015_SET_ASN1_PARAMS, ERR_R_MALLOC_FAILURE); goto end; } len = i2d_GOST2015_CIPHER_PARAMS(gcp, &buf); if (len <= 0 || (os = ASN1_OCTET_STRING_new()) == NULL || ASN1_OCTET_STRING_set(os, buf, len) == 0) { goto end; } ASN1_TYPE_set(params, V_ASN1_SEQUENCE, os); ret = 1; end: OPENSSL_free(buf); if (ret <= 0 && os) ASN1_OCTET_STRING_free(os); GOST2015_CIPHER_PARAMS_free(gcp); return ret; } int gost2015_process_unprotected_attributes( STACK_OF(X509_ATTRIBUTE) *attrs, int encryption, size_t mac_len, unsigned char *final_tag) { if (encryption == 0) /*Decrypting*/ { ASN1_OCTET_STRING *osExpectedMac = X509at_get0_data_by_OBJ(attrs, OBJ_txt2obj(OID_GOST_CMS_MAC, 1), -3, V_ASN1_OCTET_STRING); if (!osExpectedMac || osExpectedMac->length != (int)mac_len) return -1; memcpy(final_tag, osExpectedMac->data, osExpectedMac->length); } else { if (attrs == NULL) return -1; return (X509at_add1_attr_by_OBJ(&attrs, OBJ_txt2obj(OID_GOST_CMS_MAC, 1), V_ASN1_OCTET_STRING, final_tag, mac_len) == NULL) ? -1 : 1; } return 1; } int gost2015_acpkm_omac_init(int nid, int enc, const unsigned char *inkey, EVP_MD_CTX *omac_ctx, unsigned char *outkey, unsigned char *kdf_seed) { int ret = 0; unsigned char keys[64]; const EVP_MD *md = EVP_get_digestbynid(nid); EVP_PKEY *mac_key; if (md == NULL) return 0; if (enc) { if (RAND_bytes(kdf_seed, 8) != 1) return 0; } if (gost_kdftree2012_256(keys, 64, inkey, 32, (const unsigned char *)"kdf tree", 8, kdf_seed, 8, 1) <= 0) return 0; mac_key = EVP_PKEY_new_mac_key(nid, NULL, keys+32, 32); if (mac_key == NULL) goto end; if (EVP_DigestInit_ex(omac_ctx, md, NULL) <= 0 || EVP_DigestSignInit(omac_ctx, NULL, md, NULL, mac_key) <= 0) goto end; memcpy(outkey, keys, 32); ret = 1; end: EVP_PKEY_free(mac_key); OPENSSL_cleanse(keys, sizeof(keys)); return ret; } int init_zero_kdf_seed(unsigned char *kdf_seed) { int is_zero_kdfseed = 1, i; for (i = 0; i < 8; i++) { if (kdf_seed[i] != 0) is_zero_kdfseed = 0; } return is_zero_kdfseed ? RAND_bytes(kdf_seed, 8) : 1; } void gost_mgm128_init(mgm128_context *ctx, void *key, block128_f block, mul128_f mul_gf, int blen) { memset(ctx, 0, sizeof(*ctx)); ctx->block = block; ctx->mul_gf = mul_gf; ctx->key = key; ctx->blocklen = blen; /* some precalculations place here * */ } int gost_mgm128_setiv(mgm128_context *ctx, const unsigned char *iv, size_t len) { ctx->len.u[0] = 0; /* AAD length */ ctx->len.u[1] = 0; /* message length */ ctx->ares = 0; ctx->mres = 0; ctx->ACi.u[0] = 0; ctx->ACi.u[1] = 0; ctx->sum.u[0] = 0; ctx->sum.u[1] = 0; memcpy(ctx->nonce.c, iv, ctx->blocklen); ctx->nonce.c[0] &= 0x7f; /* IV - random vector, but 1st bit should be 0 */ return 1; } int gost_mgm128_aad(mgm128_context *ctx, const unsigned char *aad, size_t len) { size_t i; unsigned int n; uint64_t alen = ctx->len.u[0]; block128_f block = ctx->block; mul128_f mul_gf = ctx->mul_gf; void *key = ctx->key; int bl = ctx->blocklen; if (ctx->len.u[1]) { GOSTerr(GOST_F_GOST_MGM128_AAD, GOST_R_BAD_ORDER); return -2; } if (alen == 0) { ctx->nonce.c[0] |= 0x80; (*block) (ctx->nonce.c, ctx->Zi.c, key); // Z_1 = E_K(1 || nonce) } alen += len; if (alen > ((ossl_uintmax_t)(1) << (bl * 4 - 3)) || // < 2^(n/2) (len stores in bytes) (sizeof(len) == 8 && alen < len)) { GOSTerr(GOST_F_GOST_MGM128_AAD, GOST_R_DATA_TOO_LARGE); return -1; } ctx->len.u[0] = alen; n = ctx->ares; if (n) { /* Finalize partial_data */ while (n && len) { ctx->ACi.c[n] = *(aad++); --len; n = (n + 1) % bl; } if (n == 0) { (*block) (ctx->Zi.c, ctx->Hi.c, key); // H_i = E_K(Z_i) mul_gf(ctx->mul.u, ctx->Hi.u, ctx->ACi.u); // H_i (x) A_i grasshopper_plus128((grasshopper_w128_t*)ctx->sum.u, // acc XOR (grasshopper_w128_t*)ctx->sum.u, (grasshopper_w128_t*)ctx->mul.u); inc_counter(ctx->Zi.c, bl / 2); // Z_{i+1} = incr_l(Z_i) } else { ctx->ares = n; return 0; } } while (len >= bl) { (*block) (ctx->Zi.c, ctx->Hi.c, key); // H_i = E_K(Z_i) mul_gf(ctx->mul.u, ctx->Hi.u, (uint64_t *)aad); // H_i (x) A_i grasshopper_plus128((grasshopper_w128_t*)ctx->sum.u, // acc XOR (grasshopper_w128_t*)ctx->sum.u, (grasshopper_w128_t*)ctx->mul.u); inc_counter(ctx->Zi.c, bl / 2); // Z_{i+1} = incr_l(Z_i) aad += bl; len -= bl; } if (len) { n = (unsigned int)len; for (i = 0; i < len; ++i) ctx->ACi.c[i] = aad[i]; } ctx->ares = n; return 0; } int gost_mgm128_encrypt(mgm128_context *ctx, const unsigned char *in, unsigned char *out, size_t len) { size_t i; unsigned int n, mres; uint64_t alen = ctx->len.u[0]; uint64_t mlen = ctx->len.u[1]; block128_f block = ctx->block; mul128_f mul_gf = ctx->mul_gf; void *key = ctx->key; int bl = ctx->blocklen; if (mlen == 0) { if (alen == 0) { ctx->nonce.c[0] |= 0x80; (*block) (ctx->nonce.c, ctx->Zi.c, key); // Z_1 = E_K(1 || nonce) } ctx->nonce.c[0] &= 0x7f; (*block) (ctx->nonce.c, ctx->Yi.c, key); // Y_1 = E_K(0 || nonce) } mlen += len; if (mlen > ((ossl_uintmax_t)(1) << (bl * 4 - 3)) || // < 2^(n/2) (len stores in bytes) (sizeof(len) == 8 && mlen < len) || (mlen + alen) > ((ossl_uintmax_t)(1) << (bl * 4 - 3))) { GOSTerr(GOST_F_GOST_MGM128_ENCRYPT, GOST_R_DATA_TOO_LARGE); return -1; } ctx->len.u[1] = mlen; mres = ctx->mres; if (ctx->ares) { /* First call to encrypt finalizes AAD */ memset(ctx->ACi.c + ctx->ares, 0, bl - ctx->ares); (*block) (ctx->Zi.c, ctx->Hi.c, key); // H_i = E_K(Z_i) mul_gf(ctx->mul.u, ctx->Hi.u, ctx->ACi.u); // H_i (x) A_i grasshopper_plus128((grasshopper_w128_t*)ctx->sum.u, // acc XOR (grasshopper_w128_t*)ctx->sum.u, (grasshopper_w128_t*)ctx->mul.u); inc_counter(ctx->Zi.c, bl / 2); // Z_{i+1} = incr_l(Z_i) ctx->ares = 0; } n = mres % bl; // TODO: replace with full blocks processing for (i = 0; i < len; ++i) { if (n == 0) { (*block) (ctx->Yi.c, ctx->EKi.c, key); // E_K(Y_i) inc_counter(ctx->Yi.c + bl / 2, bl / 2); // Y_i = incr_r(Y_{i-1}) } ctx->ACi.c[n] = out[i] = in[i] ^ ctx->EKi.c[n]; // C_i = P_i (xor) E_K(Y_i) mres = n = (n + 1) % bl; if (n == 0) { (*block) (ctx->Zi.c, ctx->Hi.c, key); // H_i = E_K(Z_i) mul_gf(ctx->mul.u, ctx->Hi.u, ctx->ACi.u); // H_i (x) C_i grasshopper_plus128((grasshopper_w128_t*)ctx->sum.u, // acc XOR (grasshopper_w128_t*)ctx->sum.u, (grasshopper_w128_t*)ctx->mul.u); inc_counter(ctx->Zi.c, bl / 2); // Z_{i+1} = incr_l(Z_i) } } ctx->mres = mres; return 0; } int gost_mgm128_decrypt(mgm128_context *ctx, const unsigned char *in, unsigned char *out, size_t len) { size_t i; unsigned int n, mres; uint64_t alen = ctx->len.u[0]; uint64_t mlen = ctx->len.u[1]; block128_f block = ctx->block; mul128_f mul_gf = ctx->mul_gf; void *key = ctx->key; int bl = ctx->blocklen; if (mlen == 0) { ctx->nonce.c[0] &= 0x7f; (*block) (ctx->nonce.c, ctx->Yi.c, key); // Y_1 = E_K(0 || nonce) } mlen += len; if (mlen > ((ossl_uintmax_t)(1) << (bl * 4 - 3)) || // < 2^(n/2) (len stores in bytes) (sizeof(len) == 8 && mlen < len) || (mlen + alen) > ((ossl_uintmax_t)(1) << (bl * 4 - 3))) { GOSTerr(GOST_F_GOST_MGM128_DECRYPT, GOST_R_DATA_TOO_LARGE); return -1; } ctx->len.u[1] = mlen; mres = ctx->mres; if (ctx->ares) { /* First call to encrypt finalizes AAD */ memset(ctx->ACi.c + ctx->ares, 0, bl - ctx->ares); (*block) (ctx->Zi.c, ctx->Hi.c, key); // H_i = E_K(Z_i) mul_gf(ctx->mul.u, ctx->Hi.u, ctx->ACi.u); // H_i (x) A_i grasshopper_plus128((grasshopper_w128_t*)ctx->sum.u, // acc XOR (grasshopper_w128_t*)ctx->sum.u, (grasshopper_w128_t*)ctx->mul.u); inc_counter(ctx->Zi.c, bl / 2); // Z_{i+1} = incr_l(Z_i) ctx->ares = 0; } n = mres % bl; // TODO: replace with full blocks processing for (i = 0; i < len; ++i) { uint8_t c; if (n == 0) { (*block) (ctx->Yi.c, ctx->EKi.c, key); // E_K(Y_i) inc_counter(ctx->Yi.c + bl / 2, bl / 2); // Y_i = incr_r(Y_{i-1}) } ctx->ACi.c[n] = c = in[i]; out[i] = c ^ ctx->EKi.c[n]; // P_i = C_i (xor) E_K(Y_i) mres = n = (n + 1) % bl; if (n == 0) { (*block) (ctx->Zi.c, ctx->Hi.c, key); // H_i = E_K(Z_i) mul_gf(ctx->mul.u, ctx->Hi.u, ctx->ACi.u); // H_i (x) C_i grasshopper_plus128((grasshopper_w128_t*)ctx->sum.u, // acc XOR (grasshopper_w128_t*)ctx->sum.u, (grasshopper_w128_t*)ctx->mul.u); inc_counter(ctx->Zi.c, bl / 2); // Z_{i+1} = incr_l(Z_i) } } ctx->mres = mres; return 0; } int gost_mgm128_finish(mgm128_context *ctx, const unsigned char *tag, size_t len) { uint64_t alen = ctx->len.u[0] << 3; uint64_t clen = ctx->len.u[1] << 3; block128_f block = ctx->block; mul128_f mul_gf = ctx->mul_gf; void *key = ctx->key; int bl = ctx->blocklen; if (ctx->mres || ctx->ares) { /* First call to encrypt finalizes AAD/ENC */ memset(ctx->ACi.c + ctx->ares + ctx->mres, 0, bl - (ctx->ares + ctx->mres)); (*block) (ctx->Zi.c, ctx->Hi.c, key); // H_i = E_K(Z_i) mul_gf(ctx->mul.u, ctx->Hi.u, ctx->ACi.u); // H_i (x) [A_i or C_i] grasshopper_plus128((grasshopper_w128_t*)ctx->sum.u, // acc XOR (grasshopper_w128_t*)ctx->sum.u, (grasshopper_w128_t*)ctx->mul.u); inc_counter(ctx->Zi.c, bl / 2); // Z_{i+1} = incr_l(Z_i) } #ifdef L_ENDIAN alen = BSWAP64(alen); clen = BSWAP64(clen); #endif if (bl == 16) { ctx->len.u[0] = alen; ctx->len.u[1] = clen; } else { // TODO: check for big-endian ctx->len.u[0] = (alen >> 32) | clen; ctx->len.u[1] = 0; } (*block) (ctx->Zi.c, ctx->Hi.c, key); // H_i = E_K(Z_i) mul_gf(ctx->mul.u, ctx->Hi.u, ctx->len.u); // H_i (x) (len(A) || len(C)) grasshopper_plus128((grasshopper_w128_t*)ctx->sum.u, // acc XOR (grasshopper_w128_t*)ctx->sum.u, (grasshopper_w128_t*)ctx->mul.u); (*block) (ctx->sum.c, ctx->tag.c, key); // E_K(sum) if (tag && len <= sizeof(ctx->tag)) return CRYPTO_memcmp(ctx->tag.c, tag, len); // MSB_S(E_K(sum)) else return -1; } void gost_mgm128_tag(mgm128_context *ctx, unsigned char *tag, size_t len) { gost_mgm128_finish(ctx, NULL, 0); memcpy(tag, ctx->tag.c, len <= sizeof(ctx->tag.c) ? len : sizeof(ctx->tag.c)); } libengine-gost-openssl-3.0.2/gost_gost2015.h000066400000000000000000000061511446070765000206100ustar00rootroot00000000000000/* * Copyright (c) 2020 Dmitry Belyavskiy * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifndef GOST_GOST2015_H #define GOST_GOST2015_H #include "gost_grasshopper_cipher.h" #include #include #include #define MAGMA_MAC_MAX_SIZE 8 #define KUZNYECHIK_MAC_MAX_SIZE 16 #define OID_GOST_CMS_MAC "1.2.643.7.1.0.6.1.1" #define SN_magma_mgm "magma-mgm" #define BSWAP64(x) \ (((x & 0xFF00000000000000ULL) >> 56) | \ ((x & 0x00FF000000000000ULL) >> 40) | \ ((x & 0x0000FF0000000000ULL) >> 24) | \ ((x & 0x000000FF00000000ULL) >> 8) | \ ((x & 0x00000000FF000000ULL) << 8) | \ ((x & 0x0000000000FF0000ULL) << 24) | \ ((x & 0x000000000000FF00ULL) << 40) | \ ((x & 0x00000000000000FFULL) << 56)) typedef void (*mul128_f) (uint64_t *result, uint64_t *arg1, uint64_t *arg2); typedef struct { union { uint64_t u[2]; uint32_t d[4]; uint8_t c[16]; } nonce, Yi, Zi, EKi, Hi, len, ACi, mul, sum, tag; unsigned int mres, ares; block128_f block; mul128_f mul_gf; int blocklen; void *key; } mgm128_context; typedef struct { union { struct ossl_gost_cipher_ctx g_ks; gost_grasshopper_cipher_ctx gh_ks; } ks; int key_set; int iv_set; mgm128_context mgm; unsigned char *iv; int ivlen; int taglen; int tlstree_mode; } gost_mgm_ctx; int gost2015_final_call(EVP_CIPHER_CTX *ctx, EVP_MD_CTX *omac_ctx, size_t mac_size, unsigned char *encrypted_mac, int (*do_cipher) (EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl)); /* IV is expected to be 16 bytes*/ int gost2015_get_asn1_params(const ASN1_TYPE *params, size_t ukm_size, unsigned char *iv, size_t ukm_offset, unsigned char *kdf_seed); int gost2015_set_asn1_params(ASN1_TYPE *params, const unsigned char *iv, size_t iv_size, const unsigned char *kdf_seed); int gost2015_process_unprotected_attributes(STACK_OF(X509_ATTRIBUTE) *attrs, int encryption, size_t mac_len, unsigned char *final_tag); int gost2015_acpkm_omac_init(int nid, int enc, const unsigned char *inkey, EVP_MD_CTX *omac_ctx, unsigned char *outkey, unsigned char *kdf_seed); int init_zero_kdf_seed(unsigned char *kdf_seed); /* enc/dec mgm mode */ void gost_mgm128_init(mgm128_context *ctx, void *key, block128_f block, mul128_f mul_gf, int blen); int gost_mgm128_setiv(mgm128_context *ctx, const unsigned char *iv, size_t len); int gost_mgm128_aad(mgm128_context *ctx, const unsigned char *aad, size_t len); int gost_mgm128_encrypt(mgm128_context *ctx, const unsigned char *in, unsigned char *out, size_t len); int gost_mgm128_decrypt(mgm128_context *ctx, const unsigned char *in, unsigned char *out, size_t len); int gost_mgm128_finish(mgm128_context *ctx, const unsigned char *tag, size_t len); void gost_mgm128_tag(mgm128_context *ctx, unsigned char *tag, size_t len); #endif libengine-gost-openssl-3.0.2/gost_grasshopper.h000066400000000000000000000006471446070765000216650ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * This file is distributed under the same license as OpenSSL */ #ifndef GOST_GRASSHOPPER_H #define GOST_GRASSHOPPER_H #if defined(__cplusplus) extern "C" { #endif #include "gost_grasshopper_defines.h" #include "gost_grasshopper_math.h" #include "gost_grasshopper_cipher.h" #include "gost_grasshopper_precompiled.h" #include "gost_grasshopper_core.h" #if defined(__cplusplus) } #endif #endif libengine-gost-openssl-3.0.2/gost_grasshopper_cipher.c000066400000000000000000001155361446070765000232160ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * Copyright (c) 2020 Vitaly Chikunov * This file is distributed under the same license as OpenSSL */ #include "gost_grasshopper_cipher.h" #include "gost_grasshopper_defines.h" #include "gost_grasshopper_math.h" #include "gost_grasshopper_core.h" #include "gost_gost2015.h" #include #include #include #include #include "gost_lcl.h" #include "e_gost_err.h" enum GRASSHOPPER_CIPHER_TYPE { GRASSHOPPER_CIPHER_ECB = 0, GRASSHOPPER_CIPHER_CBC, GRASSHOPPER_CIPHER_OFB, GRASSHOPPER_CIPHER_CFB, GRASSHOPPER_CIPHER_CTR, GRASSHOPPER_CIPHER_CTRACPKM, GRASSHOPPER_CIPHER_CTRACPKMOMAC, GRASSHOPPER_CIPHER_MGM, }; static GOST_cipher grasshopper_template_cipher = { .block_size = GRASSHOPPER_BLOCK_SIZE, .key_len = GRASSHOPPER_KEY_SIZE, .flags = EVP_CIPH_RAND_KEY | EVP_CIPH_ALWAYS_CALL_INIT, .cleanup = gost_grasshopper_cipher_cleanup, .ctx_size = sizeof(gost_grasshopper_cipher_ctx), .set_asn1_parameters = gost_grasshopper_set_asn1_parameters, .get_asn1_parameters = gost_grasshopper_get_asn1_parameters, .ctrl = gost_grasshopper_cipher_ctl, }; GOST_cipher grasshopper_ecb_cipher = { .nid = NID_grasshopper_ecb, .template = &grasshopper_template_cipher, .flags = EVP_CIPH_ECB_MODE, .init = gost_grasshopper_cipher_init_ecb, .do_cipher = gost_grasshopper_cipher_do_ecb, }; GOST_cipher grasshopper_cbc_cipher = { .nid = NID_grasshopper_cbc, .template = &grasshopper_template_cipher, .iv_len = 16, .flags = EVP_CIPH_CBC_MODE | EVP_CIPH_CUSTOM_IV, .init = gost_grasshopper_cipher_init_cbc, .do_cipher = gost_grasshopper_cipher_do_cbc, }; GOST_cipher grasshopper_ofb_cipher = { .nid = NID_grasshopper_ofb, .template = &grasshopper_template_cipher, .block_size = 1, .iv_len = 16, .flags = EVP_CIPH_OFB_MODE | EVP_CIPH_NO_PADDING | EVP_CIPH_CUSTOM_IV, .init = gost_grasshopper_cipher_init_ofb, .do_cipher = gost_grasshopper_cipher_do_ofb, }; GOST_cipher grasshopper_cfb_cipher = { .nid = NID_grasshopper_cfb, .template = &grasshopper_template_cipher, .block_size = 1, .iv_len = 16, .flags = EVP_CIPH_CFB_MODE | EVP_CIPH_NO_PADDING | EVP_CIPH_CUSTOM_IV, .init = gost_grasshopper_cipher_init_cfb, .do_cipher = gost_grasshopper_cipher_do_cfb, }; GOST_cipher grasshopper_ctr_cipher = { .nid = NID_grasshopper_ctr, .template = &grasshopper_template_cipher, .block_size = 1, .iv_len = 8, .flags = EVP_CIPH_CTR_MODE | EVP_CIPH_NO_PADDING | EVP_CIPH_CUSTOM_IV, .init = gost_grasshopper_cipher_init_ctr, .do_cipher = gost_grasshopper_cipher_do_ctr, .ctx_size = sizeof(gost_grasshopper_cipher_ctx_ctr), }; GOST_cipher grasshopper_ctr_acpkm_cipher = { .nid = NID_kuznyechik_ctr_acpkm, .template = &grasshopper_template_cipher, .block_size = 1, .iv_len = 8, .flags = EVP_CIPH_CTR_MODE | EVP_CIPH_NO_PADDING | EVP_CIPH_CUSTOM_IV, .init = gost_grasshopper_cipher_init_ctracpkm, .do_cipher = gost_grasshopper_cipher_do_ctracpkm, .ctx_size = sizeof(gost_grasshopper_cipher_ctx_ctr), }; GOST_cipher grasshopper_ctr_acpkm_omac_cipher = { .nid = NID_kuznyechik_ctr_acpkm_omac, .template = &grasshopper_template_cipher, .block_size = 1, .iv_len = 8, .flags = EVP_CIPH_CTR_MODE | EVP_CIPH_NO_PADDING | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER | EVP_CIPH_FLAG_CIPHER_WITH_MAC | EVP_CIPH_CUSTOM_COPY, .init = gost_grasshopper_cipher_init_ctracpkm_omac, .do_cipher = gost_grasshopper_cipher_do_ctracpkm_omac, .ctx_size = sizeof(gost_grasshopper_cipher_ctx_ctr), }; GOST_cipher grasshopper_mgm_cipher = { .nid = NID_undef, .template = &grasshopper_template_cipher, .block_size = 1, .iv_len = 16, .flags = EVP_CIPH_NO_PADDING | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER | EVP_CIPH_CTRL_INIT | EVP_CIPH_FLAG_AEAD_CIPHER, .cleanup = gost_grasshopper_mgm_cleanup, .ctrl = gost_grasshopper_mgm_ctrl, .init = gost_grasshopper_cipher_init_mgm, .do_cipher = gost_grasshopper_cipher_do_mgm, .ctx_size = sizeof(gost_mgm_ctx) }; static void kuznyechik_NID_callback (int nid) { grasshopper_mgm_cipher.nid = nid; } GOST_NID_JOB kuznyechik_mgm_NID = { .sn = SN_kuznyechik_mgm, .ln = SN_kuznyechik_mgm, .callback = kuznyechik_NID_callback, }; /* first 256 bit of D from draft-irtf-cfrg-re-keying-12 */ static const unsigned char ACPKM_D_2018[] = { 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, /* 64 bit */ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, /* 128 bit */ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f, /* 256 bit */ }; static void acpkm_next(gost_grasshopper_cipher_ctx * c) { unsigned char newkey[GRASSHOPPER_KEY_SIZE]; const int J = GRASSHOPPER_KEY_SIZE / GRASSHOPPER_BLOCK_SIZE; int n; for (n = 0; n < J; n++) { const unsigned char *D_n = &ACPKM_D_2018[n * GRASSHOPPER_BLOCK_SIZE]; grasshopper_encrypt_block(&c->encrypt_round_keys, (grasshopper_w128_t *) D_n, (grasshopper_w128_t *) & newkey[n * GRASSHOPPER_BLOCK_SIZE], &c->buffer); } gost_grasshopper_cipher_key(c, newkey); } /* Set 256 bit key into context */ static GRASSHOPPER_INLINE void gost_grasshopper_cipher_key(gost_grasshopper_cipher_ctx * c, const uint8_t *k) { int i; for (i = 0; i < 2; i++) { grasshopper_copy128(&c->key.k.k[i], (const grasshopper_w128_t *)(k + i * 16)); } grasshopper_set_encrypt_key(&c->encrypt_round_keys, &c->key); grasshopper_set_decrypt_key(&c->decrypt_round_keys, &c->key); } /* Set master 256-bit key to be used in TLSTREE calculation into context */ static GRASSHOPPER_INLINE void gost_grasshopper_master_key(gost_grasshopper_cipher_ctx * c, const uint8_t *k) { int i; for (i = 0; i < 2; i++) { grasshopper_copy128(&c->master_key.k.k[i], (const grasshopper_w128_t *)(k + i * 16)); } } /* Cleans up key from context */ static GRASSHOPPER_INLINE void gost_grasshopper_cipher_destroy(gost_grasshopper_cipher_ctx * c) { int i; for (i = 0; i < 2; i++) { grasshopper_zero128(&c->key.k.k[i]); grasshopper_zero128(&c->master_key.k.k[i]); } for (i = 0; i < GRASSHOPPER_ROUND_KEYS_COUNT; i++) { grasshopper_zero128(&c->encrypt_round_keys.k[i]); } for (i = 0; i < GRASSHOPPER_ROUND_KEYS_COUNT; i++) { grasshopper_zero128(&c->decrypt_round_keys.k[i]); } grasshopper_zero128(&c->buffer); } static GRASSHOPPER_INLINE void gost_grasshopper_cipher_destroy_ctr(gost_grasshopper_cipher_ctx * c) { gost_grasshopper_cipher_ctx_ctr *ctx = (gost_grasshopper_cipher_ctx_ctr *) c; if (ctx->omac_ctx) EVP_MD_CTX_free(ctx->omac_ctx); grasshopper_zero128(&ctx->partial_buffer); } static int gost_grasshopper_cipher_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { gost_grasshopper_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); if (EVP_CIPHER_CTX_get_app_data(ctx) == NULL) { EVP_CIPHER_CTX_set_app_data(ctx, EVP_CIPHER_CTX_get_cipher_data(ctx)); if (enc && c->type == GRASSHOPPER_CIPHER_CTRACPKM) { gost_grasshopper_cipher_ctx_ctr *ctr = EVP_CIPHER_CTX_get_cipher_data(ctx); if (init_zero_kdf_seed(ctr->kdf_seed) == 0) return -1; } } if (key != NULL) { gost_grasshopper_cipher_key(c, key); gost_grasshopper_master_key(c, key); } if (iv != NULL) { memcpy((unsigned char *)EVP_CIPHER_CTX_original_iv(ctx), iv, EVP_CIPHER_CTX_iv_length(ctx)); } memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), EVP_CIPHER_CTX_original_iv(ctx), EVP_CIPHER_CTX_iv_length(ctx)); grasshopper_zero128(&c->buffer); return 1; } static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_ecb(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { gost_grasshopper_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); c->type = GRASSHOPPER_CIPHER_ECB; return gost_grasshopper_cipher_init(ctx, key, iv, enc); } static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_cbc(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { gost_grasshopper_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); c->type = GRASSHOPPER_CIPHER_CBC; return gost_grasshopper_cipher_init(ctx, key, iv, enc); } static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_ofb(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { gost_grasshopper_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); c->type = GRASSHOPPER_CIPHER_OFB; return gost_grasshopper_cipher_init(ctx, key, iv, enc); } static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_cfb(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { gost_grasshopper_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); c->type = GRASSHOPPER_CIPHER_CFB; return gost_grasshopper_cipher_init(ctx, key, iv, enc); } static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_ctr(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { gost_grasshopper_cipher_ctx_ctr *c = EVP_CIPHER_CTX_get_cipher_data(ctx); c->c.type = GRASSHOPPER_CIPHER_CTR; EVP_CIPHER_CTX_set_num(ctx, 0); grasshopper_zero128(&c->partial_buffer); return gost_grasshopper_cipher_init(ctx, key, iv, enc); } static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_ctracpkm(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { gost_grasshopper_cipher_ctx_ctr *c = EVP_CIPHER_CTX_get_cipher_data(ctx); /* NB: setting type makes EVP do_cipher callback useless */ c->c.type = GRASSHOPPER_CIPHER_CTRACPKM; EVP_CIPHER_CTX_set_num(ctx, 0); c->section_size = 4096; return gost_grasshopper_cipher_init(ctx, key, iv, enc); } static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_ctracpkm_omac(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { gost_grasshopper_cipher_ctx_ctr *c = EVP_CIPHER_CTX_get_cipher_data(ctx); /* NB: setting type makes EVP do_cipher callback useless */ c->c.type = GRASSHOPPER_CIPHER_CTRACPKMOMAC; EVP_CIPHER_CTX_set_num(ctx, 0); c->section_size = 4096; if (key) { unsigned char cipher_key[32]; c->omac_ctx = EVP_MD_CTX_new(); if (c->omac_ctx == NULL) { GOSTerr(GOST_F_GOST_GRASSHOPPER_CIPHER_INIT_CTRACPKM_OMAC, ERR_R_MALLOC_FAILURE); return 0; } if (gost2015_acpkm_omac_init(NID_kuznyechik_mac, enc, key, c->omac_ctx, cipher_key, c->kdf_seed) != 1) { EVP_MD_CTX_free(c->omac_ctx); c->omac_ctx = NULL; return 0; } return gost_grasshopper_cipher_init(ctx, cipher_key, iv, enc); } return gost_grasshopper_cipher_init(ctx, key, iv, enc); } // TODO: const *in, const *c void gost_grasshopper_encrypt_wrap(unsigned char *in, unsigned char *out, gost_grasshopper_cipher_ctx *c) { grasshopper_encrypt_block(&c->encrypt_round_keys, (grasshopper_w128_t *) in, (grasshopper_w128_t *) out, &c->buffer); } /* ----------------------------------------------------------------------------------------------- */ /*! Đ¤ŅƒĐŊĐēŅ†Đ¸Ņ Ņ€ĐĩаĐģĐ¸ĐˇŅƒĐĩŅ‚ ĐžĐŋĐĩŅ€Đ°Ņ†Đ¸ŅŽ ҃ĐŧĐŊĐžĐļĐĩĐŊĐ¸Ņ Đ´Đ˛ŅƒŅ… ŅĐģĐĩĐŧĐĩĐŊŅ‚ĐžĐ˛ ĐēĐžĐŊĐĩ҇ĐŊĐžĐŗĐž ĐŋĐžĐģŅ \f$ \mathbb F_{2^{128}}\f$, ĐŋĐžŅ€ĐžĐļĐ´ĐĩĐŊĐŊĐžĐŗĐž ĐŊĐĩĐŋŅ€Đ¸Đ˛ĐžĐ´Đ¸ĐŧŅ‹Đŧ ĐŧĐŊĐžĐŗĐžŅ‡ĐģĐĩĐŊĐžĐŧ \f$ f(x) = x^{128} + x^7 + x^2 + x + 1 \in \mathbb F_2[x]\f$. ДĐģŅ ҃ĐŧĐŊĐžĐļĐĩĐŊĐ¸Ņ Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩŅ‚ŅŅ ĐŋŅ€ĐžŅŅ‚ĐĩĐšŅˆĐ°Ņ Ņ€ĐĩаĐģĐ¸ĐˇĐ°Ņ†Đ¸Ņ, ĐžŅĐŊОваĐŊĐŊĐ°Ņ ĐŊа ĐŋŅ€Đ¸Đ˛ĐĩĐ´ĐĩĐŊии ĐŋĐž ĐŧĐžĐ´ŅƒĐģŅŽ ĐŋĐžŅĐģĐĩ ĐēаĐļĐ´ĐžĐŗĐž ŅˆĐ°ĐŗĐ° аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧа. */ /* ----------------------------------------------------------------------------------------------- */ static void gf128_mul_uint64 (uint64_t *result, uint64_t *arg1, uint64_t *arg2) { int i = 0; register uint64_t t, X0, X1; uint64_t Z0 = 0, Z1 = 0; #ifdef L_ENDIAN X0 = BSWAP64(*(arg1 + 1)); X1 = BSWAP64(*arg1); #else X0 = *(arg1 + 1); X1 = *arg1; #endif //first 64 bits of arg1 #ifdef L_ENDIAN t = BSWAP64(*(arg2 + 1)); #else t = *(arg2 + 1); #endif for (i = 0; i < 64; i++) { if (t & 0x1) { Z0 ^= X0; Z1 ^= X1; } t >>= 1; if (X1 & 0x8000000000000000) { X1 <<= 1; X1 ^= X0>>63; X0 <<= 1; X0 ^= 0x87; } else { X1 <<= 1; X1 ^= X0>>63; X0 <<= 1; } } //second 64 bits of arg2 #ifdef L_ENDIAN t = BSWAP64(*arg2); #else t = *arg2; #endif for (i = 0; i < 63; i++) { if (t & 0x1) { Z0 ^= X0; Z1 ^= X1; } t >>= 1; if (X1 & 0x8000000000000000) { X1 <<= 1; X1 ^= X0>>63; X0 <<= 1; X0 ^= 0x87; } else { X1 <<= 1; X1 ^= X0>>63; X0 <<= 1; } } if (t & 0x1) { Z0 ^= X0; Z1 ^= X1; } #ifdef L_ENDIAN result[0] = BSWAP64(Z1); result[1] = BSWAP64(Z0); #else result[0] = Z1; result[1] = Z0; #endif } static GRASSHOPPER_INLINE int gost_grasshopper_cipher_init_mgm(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { gost_mgm_ctx *mctx = (gost_mgm_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx); int bl; if (!iv && !key) return 1; if (key) { bl = EVP_CIPHER_CTX_iv_length(ctx); gost_grasshopper_cipher_key(&mctx->ks.gh_ks, key); gost_mgm128_init(&mctx->mgm, &mctx->ks, (block128_f) gost_grasshopper_encrypt_wrap, gf128_mul_uint64, bl); /* * If we have an iv can set it directly, otherwise use saved IV. */ if (iv == NULL && mctx->iv_set) iv = mctx->iv; if (iv) { if (gost_mgm128_setiv(&mctx->mgm, iv, mctx->ivlen) != 1) return 0; mctx->iv_set = 1; } mctx->key_set = 1; } else { /* If key set use IV, otherwise copy */ if (mctx->key_set) { if (gost_mgm128_setiv(&mctx->mgm, iv, mctx->ivlen) != 1) return 0; } else memcpy(mctx->iv, iv, mctx->ivlen); mctx->iv_set = 1; } return 1; } static int gost_grasshopper_cipher_do_ecb(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { gost_grasshopper_cipher_ctx *c = (gost_grasshopper_cipher_ctx *) EVP_CIPHER_CTX_get_cipher_data(ctx); bool encrypting = (bool) EVP_CIPHER_CTX_encrypting(ctx); const unsigned char *current_in = in; unsigned char *current_out = out; size_t blocks = inl / GRASSHOPPER_BLOCK_SIZE; size_t i; for (i = 0; i < blocks; i++, current_in += GRASSHOPPER_BLOCK_SIZE, current_out += GRASSHOPPER_BLOCK_SIZE) { if (encrypting) { grasshopper_encrypt_block(&c->encrypt_round_keys, (grasshopper_w128_t *) current_in, (grasshopper_w128_t *) current_out, &c->buffer); } else { grasshopper_decrypt_block(&c->decrypt_round_keys, (grasshopper_w128_t *) current_in, (grasshopper_w128_t *) current_out, &c->buffer); } } return 1; } static int gost_grasshopper_cipher_do_cbc(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { gost_grasshopper_cipher_ctx *c = (gost_grasshopper_cipher_ctx *) EVP_CIPHER_CTX_get_cipher_data(ctx); unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); bool encrypting = (bool) EVP_CIPHER_CTX_encrypting(ctx); const unsigned char *current_in = in; unsigned char *current_out = out; size_t blocks = inl / GRASSHOPPER_BLOCK_SIZE; size_t i; grasshopper_w128_t *currentBlock; currentBlock = (grasshopper_w128_t *) iv; for (i = 0; i < blocks; i++, current_in += GRASSHOPPER_BLOCK_SIZE, current_out += GRASSHOPPER_BLOCK_SIZE) { grasshopper_w128_t *currentInputBlock = (grasshopper_w128_t *) current_in; grasshopper_w128_t *currentOutputBlock = (grasshopper_w128_t *) current_out; if (encrypting) { grasshopper_append128(currentBlock, currentInputBlock); grasshopper_encrypt_block(&c->encrypt_round_keys, currentBlock, currentOutputBlock, &c->buffer); grasshopper_copy128(currentBlock, currentOutputBlock); } else { grasshopper_w128_t tmp; grasshopper_copy128(&tmp, currentInputBlock); grasshopper_decrypt_block(&c->decrypt_round_keys, currentInputBlock, currentOutputBlock, &c->buffer); grasshopper_append128(currentOutputBlock, currentBlock); grasshopper_copy128(currentBlock, &tmp); } } return 1; } void inc_counter(unsigned char *counter, size_t counter_bytes) { unsigned int n = counter_bytes; do { unsigned char c; --n; c = counter[n]; ++c; counter[n] = c; if (c) return; } while (n); } /* increment counter (128-bit int) by 1 */ static void ctr128_inc(unsigned char *counter) { inc_counter(counter, 16); } static int gost_grasshopper_cipher_do_ctr(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { gost_grasshopper_cipher_ctx_ctr *c = (gost_grasshopper_cipher_ctx_ctr *) EVP_CIPHER_CTX_get_cipher_data(ctx); unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); const unsigned char *current_in = in; unsigned char *current_out = out; grasshopper_w128_t *currentInputBlock; grasshopper_w128_t *currentOutputBlock; unsigned int n = EVP_CIPHER_CTX_num(ctx); size_t lasted = inl; size_t i; size_t blocks; grasshopper_w128_t *iv_buffer; grasshopper_w128_t tmp; while (n && lasted) { *(current_out++) = *(current_in++) ^ c->partial_buffer.b[n]; --lasted; n = (n + 1) % GRASSHOPPER_BLOCK_SIZE; } EVP_CIPHER_CTX_set_num(ctx, n); blocks = lasted / GRASSHOPPER_BLOCK_SIZE; iv_buffer = (grasshopper_w128_t *) iv; // full parts for (i = 0; i < blocks; i++) { currentInputBlock = (grasshopper_w128_t *) current_in; currentOutputBlock = (grasshopper_w128_t *) current_out; grasshopper_encrypt_block(&c->c.encrypt_round_keys, iv_buffer, &c->partial_buffer, &c->c.buffer); grasshopper_plus128(&tmp, &c->partial_buffer, currentInputBlock); grasshopper_copy128(currentOutputBlock, &tmp); ctr128_inc(iv_buffer->b); current_in += GRASSHOPPER_BLOCK_SIZE; current_out += GRASSHOPPER_BLOCK_SIZE; lasted -= GRASSHOPPER_BLOCK_SIZE; } if (lasted > 0) { currentInputBlock = (grasshopper_w128_t *) current_in; currentOutputBlock = (grasshopper_w128_t *) current_out; grasshopper_encrypt_block(&c->c.encrypt_round_keys, iv_buffer, &c->partial_buffer, &c->c.buffer); for (i = 0; i < lasted; i++) { currentOutputBlock->b[i] = c->partial_buffer.b[i] ^ currentInputBlock->b[i]; } EVP_CIPHER_CTX_set_num(ctx, i); ctr128_inc(iv_buffer->b); } return inl; } #define GRASSHOPPER_BLOCK_MASK (GRASSHOPPER_BLOCK_SIZE - 1) static inline void apply_acpkm_grasshopper(gost_grasshopper_cipher_ctx_ctr * ctx, unsigned int *num) { if (!ctx->section_size || (*num < ctx->section_size)) return; acpkm_next(&ctx->c); *num &= GRASSHOPPER_BLOCK_MASK; } /* If meshing is not configured via ctrl (setting section_size) * this function works exactly like plain ctr */ static int gost_grasshopper_cipher_do_ctracpkm(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { gost_grasshopper_cipher_ctx_ctr *c = EVP_CIPHER_CTX_get_cipher_data(ctx); unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); unsigned int num = EVP_CIPHER_CTX_num(ctx); size_t blocks, i, lasted = inl; grasshopper_w128_t tmp; while ((num & GRASSHOPPER_BLOCK_MASK) && lasted) { *out++ = *in++ ^ c->partial_buffer.b[num & GRASSHOPPER_BLOCK_MASK]; --lasted; num++; } blocks = lasted / GRASSHOPPER_BLOCK_SIZE; // full parts for (i = 0; i < blocks; i++) { apply_acpkm_grasshopper(c, &num); grasshopper_encrypt_block(&c->c.encrypt_round_keys, (grasshopper_w128_t *) iv, (grasshopper_w128_t *) & c->partial_buffer, &c->c.buffer); grasshopper_plus128(&tmp, &c->partial_buffer, (grasshopper_w128_t *) in); grasshopper_copy128((grasshopper_w128_t *) out, &tmp); ctr128_inc(iv); in += GRASSHOPPER_BLOCK_SIZE; out += GRASSHOPPER_BLOCK_SIZE; num += GRASSHOPPER_BLOCK_SIZE; lasted -= GRASSHOPPER_BLOCK_SIZE; } // last part if (lasted > 0) { apply_acpkm_grasshopper(c, &num); grasshopper_encrypt_block(&c->c.encrypt_round_keys, (grasshopper_w128_t *) iv, &c->partial_buffer, &c->c.buffer); for (i = 0; i < lasted; i++) out[i] = c->partial_buffer.b[i] ^ in[i]; ctr128_inc(iv); num += lasted; } EVP_CIPHER_CTX_set_num(ctx, num); return inl; } static int gost_grasshopper_cipher_do_ctracpkm_omac(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { int result; gost_grasshopper_cipher_ctx_ctr *c = EVP_CIPHER_CTX_get_cipher_data(ctx); /* As in and out can be the same pointer, process unencrypted here */ if (EVP_CIPHER_CTX_encrypting(ctx)) EVP_DigestSignUpdate(c->omac_ctx, in, inl); if (in == NULL && inl == 0) { /* Final call */ return gost2015_final_call(ctx, c->omac_ctx, KUZNYECHIK_MAC_MAX_SIZE, c->tag, gost_grasshopper_cipher_do_ctracpkm); } if (in == NULL) { GOSTerr(GOST_F_GOST_GRASSHOPPER_CIPHER_DO_CTRACPKM_OMAC, ERR_R_EVP_LIB); return -1; } result = gost_grasshopper_cipher_do_ctracpkm(ctx, out, in, inl); /* As in and out can be the same pointer, process decrypted here */ if (!EVP_CIPHER_CTX_encrypting(ctx)) EVP_DigestSignUpdate(c->omac_ctx, out, inl); return result; } static int gost_grasshopper_cipher_do_mgm(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t len) { gost_mgm_ctx *mctx = (gost_mgm_ctx *)EVP_CIPHER_CTX_get_cipher_data(ctx); int enc = EVP_CIPHER_CTX_encrypting(ctx); /* If not set up, return error */ if (!mctx->key_set) { GOSTerr(GOST_F_GOST_GRASSHOPPER_CIPHER_DO_MGM, GOST_R_BAD_ORDER); return -1; } if (!mctx->iv_set) { GOSTerr(GOST_F_GOST_GRASSHOPPER_CIPHER_DO_MGM, GOST_R_BAD_ORDER); return -1; } if (in) { if (out == NULL) { if (gost_mgm128_aad(&mctx->mgm, in, len)) return -1; } else if (enc) { if (gost_mgm128_encrypt(&mctx->mgm, in, out, len)) return -1; } else { if (gost_mgm128_decrypt(&mctx->mgm, in, out, len)) return -1; } return len; } else { if (!enc) { if (mctx->taglen < 0) return -1; if (gost_mgm128_finish(&mctx->mgm, EVP_CIPHER_CTX_buf_noconst(ctx), mctx->taglen) != 0) return -1; mctx->iv_set = 0; return 0; } gost_mgm128_tag(&mctx->mgm, EVP_CIPHER_CTX_buf_noconst(ctx), 16); mctx->taglen = 16; /* Don't reuse the IV */ mctx->iv_set = 0; return 0; } } /* * Fixed 128-bit IV implementation make shift regiser redundant. */ static void gost_grasshopper_cnt_next(gost_grasshopper_cipher_ctx * ctx, grasshopper_w128_t * iv, grasshopper_w128_t * buf) { grasshopper_w128_t tmp; memcpy(&tmp, iv, 16); grasshopper_encrypt_block(&ctx->encrypt_round_keys, &tmp, buf, &ctx->buffer); memcpy(iv, buf, 16); } static int gost_grasshopper_cipher_do_ofb(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { gost_grasshopper_cipher_ctx *c = (gost_grasshopper_cipher_ctx *) EVP_CIPHER_CTX_get_cipher_data(ctx); const unsigned char *in_ptr = in; unsigned char *out_ptr = out; unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx); unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); int num = EVP_CIPHER_CTX_num(ctx); size_t i = 0; size_t j; /* process partial block if any */ if (num > 0) { for (j = (size_t)num, i = 0; j < GRASSHOPPER_BLOCK_SIZE && i < inl; j++, i++, in_ptr++, out_ptr++) { *out_ptr = buf[j] ^ (*in_ptr); } if (j == GRASSHOPPER_BLOCK_SIZE) { EVP_CIPHER_CTX_set_num(ctx, 0); } else { EVP_CIPHER_CTX_set_num(ctx, (int)j); return 1; } } for (; i + GRASSHOPPER_BLOCK_SIZE < inl; i += GRASSHOPPER_BLOCK_SIZE, in_ptr += GRASSHOPPER_BLOCK_SIZE, out_ptr += GRASSHOPPER_BLOCK_SIZE) { /* * block cipher current iv */ /* Encrypt */ gost_grasshopper_cnt_next(c, (grasshopper_w128_t *) iv, (grasshopper_w128_t *) buf); /* * xor next block of input text with it and output it */ /* * output this block */ for (j = 0; j < GRASSHOPPER_BLOCK_SIZE; j++) { out_ptr[j] = buf[j] ^ in_ptr[j]; } } /* Process rest of buffer */ if (i < inl) { gost_grasshopper_cnt_next(c, (grasshopper_w128_t *) iv, (grasshopper_w128_t *) buf); for (j = 0; i < inl; j++, i++) { out_ptr[j] = buf[j] ^ in_ptr[j]; } EVP_CIPHER_CTX_set_num(ctx, (int)j); } else { EVP_CIPHER_CTX_set_num(ctx, 0); } return 1; } static int gost_grasshopper_cipher_do_cfb(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { gost_grasshopper_cipher_ctx *c = (gost_grasshopper_cipher_ctx *) EVP_CIPHER_CTX_get_cipher_data(ctx); const unsigned char *in_ptr = in; unsigned char *out_ptr = out; unsigned char *buf = EVP_CIPHER_CTX_buf_noconst(ctx); unsigned char *iv = EVP_CIPHER_CTX_iv_noconst(ctx); bool encrypting = (bool) EVP_CIPHER_CTX_encrypting(ctx); int num = EVP_CIPHER_CTX_num(ctx); size_t i = 0; size_t j = 0; /* process partial block if any */ if (num > 0) { for (j = (size_t)num, i = 0; j < GRASSHOPPER_BLOCK_SIZE && i < inl; j++, i++, in_ptr++, out_ptr++) { if (!encrypting) { buf[j + GRASSHOPPER_BLOCK_SIZE] = *in_ptr; } *out_ptr = buf[j] ^ (*in_ptr); if (encrypting) { buf[j + GRASSHOPPER_BLOCK_SIZE] = *out_ptr; } } if (j == GRASSHOPPER_BLOCK_SIZE) { memcpy(iv, buf + GRASSHOPPER_BLOCK_SIZE, GRASSHOPPER_BLOCK_SIZE); EVP_CIPHER_CTX_set_num(ctx, 0); } else { EVP_CIPHER_CTX_set_num(ctx, (int)j); return 1; } } for (; i + GRASSHOPPER_BLOCK_SIZE < inl; i += GRASSHOPPER_BLOCK_SIZE, in_ptr += GRASSHOPPER_BLOCK_SIZE, out_ptr += GRASSHOPPER_BLOCK_SIZE) { /* * block cipher current iv */ grasshopper_encrypt_block(&c->encrypt_round_keys, (grasshopper_w128_t *) iv, (grasshopper_w128_t *) buf, &c->buffer); /* * xor next block of input text with it and output it */ /* * output this block */ if (!encrypting) { memcpy(iv, in_ptr, GRASSHOPPER_BLOCK_SIZE); } for (j = 0; j < GRASSHOPPER_BLOCK_SIZE; j++) { out_ptr[j] = buf[j] ^ in_ptr[j]; } /* Encrypt */ /* Next iv is next block of cipher text */ if (encrypting) { memcpy(iv, out_ptr, GRASSHOPPER_BLOCK_SIZE); } } /* Process rest of buffer */ if (i < inl) { grasshopper_encrypt_block(&c->encrypt_round_keys, (grasshopper_w128_t *) iv, (grasshopper_w128_t *) buf, &c->buffer); if (!encrypting) { memcpy(buf + GRASSHOPPER_BLOCK_SIZE, in_ptr, inl - i); } for (j = 0; i < inl; j++, i++) { out_ptr[j] = buf[j] ^ in_ptr[j]; } EVP_CIPHER_CTX_set_num(ctx, (int)j); if (encrypting) { memcpy(buf + GRASSHOPPER_BLOCK_SIZE, out_ptr, j); } } else { EVP_CIPHER_CTX_set_num(ctx, 0); } return 1; } static int gost_grasshopper_cipher_cleanup(EVP_CIPHER_CTX *ctx) { gost_grasshopper_cipher_ctx *c = (gost_grasshopper_cipher_ctx *) EVP_CIPHER_CTX_get_cipher_data(ctx); if (!c) return 1; if (EVP_CIPHER_CTX_mode(ctx) == EVP_CIPH_CTR_MODE) gost_grasshopper_cipher_destroy_ctr(c); EVP_CIPHER_CTX_set_app_data(ctx, NULL); return 1; } static int gost_grasshopper_set_asn1_parameters(EVP_CIPHER_CTX *ctx, ASN1_TYPE *params) { if (EVP_CIPHER_CTX_mode(ctx) == EVP_CIPH_CTR_MODE) { gost_grasshopper_cipher_ctx_ctr *ctr = EVP_CIPHER_CTX_get_cipher_data(ctx); /* CMS implies 256kb section_size */ ctr->section_size = 256*1024; return gost2015_set_asn1_params(params, EVP_CIPHER_CTX_original_iv(ctx), 8, ctr->kdf_seed); } return 0; } static GRASSHOPPER_INLINE int gost_grasshopper_get_asn1_parameters(EVP_CIPHER_CTX *ctx, ASN1_TYPE *params) { if (EVP_CIPHER_CTX_mode(ctx) == EVP_CIPH_CTR_MODE) { gost_grasshopper_cipher_ctx_ctr *ctr = EVP_CIPHER_CTX_get_cipher_data(ctx); int iv_len = 16; unsigned char iv[16]; if (gost2015_get_asn1_params(params, 16, iv, 8, ctr->kdf_seed) == 0) { return 0; } memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), iv, iv_len); memcpy((unsigned char *)EVP_CIPHER_CTX_original_iv(ctx), iv, iv_len); /* CMS implies 256kb section_size */ ctr->section_size = 256*1024; return 1; } return 0; } static int gost_grasshopper_mgm_cleanup(EVP_CIPHER_CTX *c) { gost_mgm_ctx *mctx = (gost_mgm_ctx *)EVP_CIPHER_CTX_get_cipher_data(c); if (mctx == NULL) return 0; gost_grasshopper_cipher_destroy(&mctx->ks.gh_ks); OPENSSL_cleanse(&mctx->mgm, sizeof(mctx->mgm)); if (mctx->iv != EVP_CIPHER_CTX_iv_noconst(c)) OPENSSL_free(mctx->iv); return 1; } static int gost_grasshopper_mgm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr) { gost_mgm_ctx *mctx = (gost_mgm_ctx *)EVP_CIPHER_CTX_get_cipher_data(c); unsigned char *buf, *iv; int ivlen, enc; switch (type) { case EVP_CTRL_INIT: ivlen = EVP_CIPHER_iv_length(EVP_CIPHER_CTX_cipher(c)); iv = EVP_CIPHER_CTX_iv_noconst(c); mctx->key_set = 0; mctx->iv_set = 0; mctx->ivlen = ivlen; mctx->iv = iv; mctx->taglen = -1; return 1; case EVP_CTRL_GET_IVLEN: *(int *)ptr = mctx->ivlen; return 1; case EVP_CTRL_AEAD_SET_IVLEN: if (arg <= 0) return 0; if ((arg > EVP_MAX_IV_LENGTH) && (arg > mctx->ivlen)) { // TODO: Allocate memory for IV or set error return 0; } mctx->ivlen = arg; return 1; case EVP_CTRL_AEAD_SET_TAG: buf = EVP_CIPHER_CTX_buf_noconst(c); enc = EVP_CIPHER_CTX_encrypting(c); if (arg <= 0 || arg != 16 || enc) { GOSTerr(GOST_F_GOST_GRASSHOPPER_MGM_CTRL, GOST_R_INVALID_TAG_LENGTH); return 0; } memcpy(buf, ptr, arg); mctx->taglen = arg; return 1; case EVP_CTRL_AEAD_GET_TAG: buf = EVP_CIPHER_CTX_buf_noconst(c); enc = EVP_CIPHER_CTX_encrypting(c); if (arg <= 0 || arg > 16 || !enc || mctx->taglen < 0) { GOSTerr(GOST_F_GOST_GRASSHOPPER_MGM_CTRL, GOST_R_INVALID_TAG_LENGTH); return 0; } memcpy(ptr, buf, arg); return 1; default: return -1; } } static int gost_grasshopper_cipher_ctl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr) { switch (type) { case EVP_CTRL_RAND_KEY:{ if (RAND_priv_bytes ((unsigned char *)ptr, EVP_CIPHER_CTX_key_length(ctx)) <= 0) { GOSTerr(GOST_F_GOST_GRASSHOPPER_CIPHER_CTL, GOST_R_RNG_ERROR); return -1; } break; } case EVP_CTRL_KEY_MESH:{ gost_grasshopper_cipher_ctx_ctr *c = EVP_CIPHER_CTX_get_cipher_data(ctx); if ((c->c.type != GRASSHOPPER_CIPHER_CTRACPKM && c->c.type != GRASSHOPPER_CIPHER_CTRACPKMOMAC) || (arg == 0) || (arg % GRASSHOPPER_BLOCK_SIZE)) return -1; c->section_size = arg; break; } case EVP_CTRL_TLSTREE: { unsigned char newkey[32]; int mode = EVP_CIPHER_CTX_mode(ctx); gost_grasshopper_cipher_ctx_ctr *ctr_ctx = NULL; gost_grasshopper_cipher_ctx *c = NULL; unsigned char adjusted_iv[16]; unsigned char seq[8]; int j, carry, decrement_arg; if (mode != EVP_CIPH_CTR_MODE) return -1; ctr_ctx = (gost_grasshopper_cipher_ctx_ctr *) EVP_CIPHER_CTX_get_cipher_data(ctx); c = &(ctr_ctx->c); /* * 'arg' parameter indicates what we should do with sequence value. * * When function called, seq is incremented after MAC calculation. * In ETM mode, we use seq 'as is' in the ctrl-function (arg = 0) * Otherwise we have to decrease it in the implementation (arg = 1). */ memcpy(seq, ptr, 8); decrement_arg = arg; if (!decrement_sequence(seq, decrement_arg)) { GOSTerr(GOST_F_GOST_GRASSHOPPER_CIPHER_CTL, GOST_R_CTRL_CALL_FAILED); return -1; } if (gost_tlstree(NID_grasshopper_cbc, c->master_key.k.b, newkey, (const unsigned char *)seq) > 0) { memset(adjusted_iv, 0, 16); memcpy(adjusted_iv, EVP_CIPHER_CTX_original_iv(ctx), 8); for(j=7,carry=0; j>=0; j--) { int adj_byte = adjusted_iv[j]+seq[j]+carry; carry = (adj_byte > 255) ? 1 : 0; adjusted_iv[j] = adj_byte & 0xFF; } EVP_CIPHER_CTX_set_num(ctx, 0); memcpy(EVP_CIPHER_CTX_iv_noconst(ctx), adjusted_iv, 16); gost_grasshopper_cipher_key(c, newkey); return 1; } } return -1; #if 0 case EVP_CTRL_AEAD_GET_TAG: case EVP_CTRL_AEAD_SET_TAG: { int taglen = arg; unsigned char *tag = ptr; gost_grasshopper_cipher_ctx *c = EVP_CIPHER_CTX_get_cipher_data(ctx); if (c->c.type != GRASSHOPPER_CIPHER_MGM) return -1; if (taglen > KUZNYECHIK_MAC_MAX_SIZE) { CRYPTOCOMerr(CRYPTOCOM_F_GOST_GRASSHOPPER_CIPHER_CTL, CRYPTOCOM_R_INVALID_TAG_LENGTH); return -1; } if (type == EVP_CTRL_AEAD_GET_TAG) memcpy(tag, c->final_tag, taglen); else memcpy(c->final_tag, tag, taglen); return 1; } #endif case EVP_CTRL_PROCESS_UNPROTECTED: { STACK_OF(X509_ATTRIBUTE) *x = ptr; gost_grasshopper_cipher_ctx_ctr *c = EVP_CIPHER_CTX_get_cipher_data(ctx); if (c->c.type != GRASSHOPPER_CIPHER_CTRACPKMOMAC) return -1; return gost2015_process_unprotected_attributes(x, arg, KUZNYECHIK_MAC_MAX_SIZE, c->tag); } case EVP_CTRL_COPY: { EVP_CIPHER_CTX *out = ptr; gost_grasshopper_cipher_ctx_ctr *out_cctx = EVP_CIPHER_CTX_get_cipher_data(out); gost_grasshopper_cipher_ctx_ctr *in_cctx = EVP_CIPHER_CTX_get_cipher_data(ctx); if (in_cctx->c.type != GRASSHOPPER_CIPHER_CTRACPKMOMAC) return -1; if (in_cctx->omac_ctx == out_cctx->omac_ctx) { out_cctx->omac_ctx = EVP_MD_CTX_new(); if (out_cctx->omac_ctx == NULL) { GOSTerr(GOST_F_GOST_GRASSHOPPER_CIPHER_CTL, ERR_R_MALLOC_FAILURE); return -1; } } return EVP_MD_CTX_copy(out_cctx->omac_ctx, in_cctx->omac_ctx); } default: GOSTerr(GOST_F_GOST_GRASSHOPPER_CIPHER_CTL, GOST_R_UNSUPPORTED_CIPHER_CTL_COMMAND); return -1; } return 1; } /* Called directly by CMAC_ACPKM_Init() */ const EVP_CIPHER *cipher_gost_grasshopper_ctracpkm() { return GOST_init_cipher(&grasshopper_ctr_acpkm_cipher); } /* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */ libengine-gost-openssl-3.0.2/gost_grasshopper_cipher.h000066400000000000000000000077341446070765000232230ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * This file is distributed under the same license as OpenSSL */ #ifndef GOST_GRASSHOPPER_CIPHER_H #define GOST_GRASSHOPPER_CIPHER_H #define SN_kuznyechik_mgm "kuznyechik-mgm" #if defined(__cplusplus) extern "C" { #endif #include "gost_grasshopper_defines.h" #include "gost_lcl.h" #include // not thread safe // because of buffers typedef struct { uint8_t type; grasshopper_key_t master_key; grasshopper_key_t key; grasshopper_round_keys_t encrypt_round_keys; grasshopper_round_keys_t decrypt_round_keys; grasshopper_w128_t buffer; } gost_grasshopper_cipher_ctx; typedef struct { gost_grasshopper_cipher_ctx c; grasshopper_w128_t partial_buffer; unsigned int section_size; /* After how much bytes mesh the key, if 0 never mesh and work like plain ctr. */ unsigned char kdf_seed[8]; unsigned char tag[16]; EVP_MD_CTX *omac_ctx; } gost_grasshopper_cipher_ctx_ctr; static void gost_grasshopper_cipher_key(gost_grasshopper_cipher_ctx* c, const uint8_t* k); static void gost_grasshopper_cipher_destroy(gost_grasshopper_cipher_ctx* c); static int gost_grasshopper_cipher_init_ecb(EVP_CIPHER_CTX* ctx, const unsigned char* key, const unsigned char* iv, int enc); static int gost_grasshopper_cipher_init_cbc(EVP_CIPHER_CTX* ctx, const unsigned char* key, const unsigned char* iv, int enc); static int gost_grasshopper_cipher_init_ofb(EVP_CIPHER_CTX* ctx, const unsigned char* key, const unsigned char* iv, int enc); static int gost_grasshopper_cipher_init_cfb(EVP_CIPHER_CTX* ctx, const unsigned char* key, const unsigned char* iv, int enc); static int gost_grasshopper_cipher_init_ctr(EVP_CIPHER_CTX* ctx, const unsigned char* key, const unsigned char* iv, int enc); static int gost_grasshopper_cipher_init_ctracpkm(EVP_CIPHER_CTX* ctx, const unsigned char* key, const unsigned char* iv, int enc); static int gost_grasshopper_cipher_init_ctracpkm_omac(EVP_CIPHER_CTX* ctx, const unsigned char* key, const unsigned char* iv, int enc); static int gost_grasshopper_cipher_init_mgm(EVP_CIPHER_CTX* ctx, const unsigned char* key, const unsigned char* iv, int enc); static int gost_grasshopper_cipher_init(EVP_CIPHER_CTX* ctx, const unsigned char* key, const unsigned char* iv, int enc); static int gost_grasshopper_cipher_do(EVP_CIPHER_CTX* ctx, unsigned char* out, const unsigned char* in, size_t inl); static int gost_grasshopper_cipher_do_ecb(EVP_CIPHER_CTX* ctx, unsigned char* out, const unsigned char* in, size_t inl); static int gost_grasshopper_cipher_do_cbc(EVP_CIPHER_CTX* ctx, unsigned char* out, const unsigned char* in, size_t inl); static int gost_grasshopper_cipher_do_ofb(EVP_CIPHER_CTX* ctx, unsigned char* out, const unsigned char* in, size_t inl); static int gost_grasshopper_cipher_do_cfb(EVP_CIPHER_CTX* ctx, unsigned char* out, const unsigned char* in, size_t inl); static int gost_grasshopper_cipher_do_ctr(EVP_CIPHER_CTX* ctx, unsigned char* out, const unsigned char* in, size_t inl); static int gost_grasshopper_cipher_do_ctracpkm(EVP_CIPHER_CTX* ctx, unsigned char* out, const unsigned char* in, size_t inl); static int gost_grasshopper_cipher_do_ctracpkm_omac(EVP_CIPHER_CTX* ctx, unsigned char* out, const unsigned char* in, size_t inl); static int gost_grasshopper_cipher_do_mgm(EVP_CIPHER_CTX* ctx, unsigned char* out, const unsigned char* in, size_t inl); static int gost_grasshopper_cipher_cleanup(EVP_CIPHER_CTX* ctx); static int gost_grasshopper_mgm_cleanup(EVP_CIPHER_CTX *c); static int gost_grasshopper_set_asn1_parameters(EVP_CIPHER_CTX* ctx, ASN1_TYPE* params); static int gost_grasshopper_get_asn1_parameters(EVP_CIPHER_CTX* ctx, ASN1_TYPE* params); static int gost_grasshopper_cipher_ctl(EVP_CIPHER_CTX* ctx, int type, int arg, void* ptr); static int gost_grasshopper_mgm_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr); const EVP_CIPHER* cipher_gost_grasshopper_ctracpkm(); #if defined(__cplusplus) } #endif #endif libengine-gost-openssl-3.0.2/gost_grasshopper_core.c000066400000000000000000000072131446070765000226640ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * This file is distributed under the same license as OpenSSL */ #if defined(__cplusplus) extern "C" { #endif #include "gost_grasshopper_core.h" #include "gost_grasshopper_math.h" #include "gost_grasshopper_precompiled.h" #include "gost_grasshopper_defines.h" static GRASSHOPPER_INLINE void grasshopper_l(grasshopper_w128_t* w) { unsigned int j; int i; // 16 rounds for (j = 0; j < sizeof(grasshopper_lvec) / sizeof(grasshopper_lvec[0]); j++) { uint8_t x; // An LFSR with 16 elements from GF(2^8) x = w->b[15]; // since lvec[15] = 1 for (i = 14; i >= 0; i--) { w->b[i + 1] = w->b[i]; x ^= grasshopper_galois_mul(w->b[i], grasshopper_lvec[i]); } w->b[0] = x; } } static GRASSHOPPER_INLINE void grasshopper_l_inv(grasshopper_w128_t* w) { unsigned int j; int i; // 16 rounds for (j = 0; j < sizeof(grasshopper_lvec) / sizeof(grasshopper_lvec[0]); j++) { uint8_t x = w->b[0]; for (i = 0; i < 15; i++) { w->b[i] = w->b[i + 1]; x ^= grasshopper_galois_mul(w->b[i], grasshopper_lvec[i]); } w->b[15] = x; } } // key setup void grasshopper_set_encrypt_key(grasshopper_round_keys_t* subkeys, const grasshopper_key_t* key) { grasshopper_w128_t c, x, y, z; int i; for (i = 0; i < 16; i++) { // this will be have to changed for little-endian systems x.b[i] = key->k.b[i]; y.b[i] = key->k.b[i + 16]; } grasshopper_copy128(&subkeys->k[0], &x); grasshopper_copy128(&subkeys->k[1], &y); for (i = 1; i <= 32; i++) { // C Value grasshopper_zero128(&c); c.b[15] = (uint8_t) i; // load round in lsb grasshopper_l(&c); grasshopper_plus128(&z, &x, &c); grasshopper_convert128(&z, grasshopper_pi); grasshopper_l(&z); grasshopper_append128(&z, &y); grasshopper_copy128(&y, &x); grasshopper_copy128(&x, &z); if ((i & 7) == 0) { int k = i >> 2; grasshopper_copy128(&subkeys->k[k], &x); grasshopper_copy128(&subkeys->k[k + 1], &y); } } // security++ grasshopper_zero128(&c); grasshopper_zero128(&x); grasshopper_zero128(&y); grasshopper_zero128(&z); } void grasshopper_set_decrypt_key(grasshopper_round_keys_t* subkeys, const grasshopper_key_t* key) { int i; grasshopper_set_encrypt_key(subkeys, key); for (i = 1; i < 10; i++) { grasshopper_l_inv(&subkeys->k[i]); } } void grasshopper_encrypt_block(grasshopper_round_keys_t* subkeys, grasshopper_w128_t* source, grasshopper_w128_t* target, grasshopper_w128_t* buffer) { int i; grasshopper_copy128(target, source); for (i = 0; i < 9; i++) { grasshopper_append128(target, &subkeys->k[i]); grasshopper_append128multi(buffer, target, grasshopper_pil_enc128); } grasshopper_append128(target, &subkeys->k[9]); } void grasshopper_decrypt_block(grasshopper_round_keys_t* subkeys, grasshopper_w128_t* source, grasshopper_w128_t* target, grasshopper_w128_t* buffer) { int i; grasshopper_copy128(target, source); grasshopper_append128multi(buffer, target, grasshopper_l_dec128); for (i = 9; i > 1; i--) { grasshopper_append128(target, &subkeys->k[i]); grasshopper_append128multi(buffer, target, grasshopper_pil_dec128); } grasshopper_append128(target, &subkeys->k[1]); grasshopper_convert128(target, grasshopper_pi_inv); grasshopper_append128(target, &subkeys->k[0]); } #if defined(__cplusplus) } #endif libengine-gost-openssl-3.0.2/gost_grasshopper_core.h000066400000000000000000000016741446070765000226760ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * This file is distributed under the same license as OpenSSL */ #ifndef GOST_GRASSHOPPER_CORE_H #define GOST_GRASSHOPPER_CORE_H #if defined(__cplusplus) extern "C" { #endif #include "gost_grasshopper_defines.h" static void grasshopper_l(grasshopper_w128_t* w); static void grasshopper_l_inv(grasshopper_w128_t* w); // key setup extern void grasshopper_set_encrypt_key(grasshopper_round_keys_t* subkeys, const grasshopper_key_t* key); extern void grasshopper_set_decrypt_key(grasshopper_round_keys_t* subkeys, const grasshopper_key_t* key); // single-block ecp ops extern void grasshopper_encrypt_block(grasshopper_round_keys_t* subkeys, grasshopper_w128_t* source, grasshopper_w128_t* target, grasshopper_w128_t* buffer); extern void grasshopper_decrypt_block(grasshopper_round_keys_t* subkeys, grasshopper_w128_t* source, grasshopper_w128_t* target, grasshopper_w128_t* buffer); #if defined(__cplusplus) } #endif #endif libengine-gost-openssl-3.0.2/gost_grasshopper_defines.c000066400000000000000000000115411446070765000233500ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * This file is distributed under the same license as OpenSSL */ #if defined(__cplusplus) extern "C" { #endif #include "gost_grasshopper_defines.h" // The S-Box from section 5.1.1 const uint8_t grasshopper_pi[0x100] = { 0xFC, 0xEE, 0xDD, 0x11, 0xCF, 0x6E, 0x31, 0x16, // 00..07 0xFB, 0xC4, 0xFA, 0xDA, 0x23, 0xC5, 0x04, 0x4D, // 08..0F 0xE9, 0x77, 0xF0, 0xDB, 0x93, 0x2E, 0x99, 0xBA, // 10..17 0x17, 0x36, 0xF1, 0xBB, 0x14, 0xCD, 0x5F, 0xC1, // 18..1F 0xF9, 0x18, 0x65, 0x5A, 0xE2, 0x5C, 0xEF, 0x21, // 20..27 0x81, 0x1C, 0x3C, 0x42, 0x8B, 0x01, 0x8E, 0x4F, // 28..2F 0x05, 0x84, 0x02, 0xAE, 0xE3, 0x6A, 0x8F, 0xA0, // 30..37 0x06, 0x0B, 0xED, 0x98, 0x7F, 0xD4, 0xD3, 0x1F, // 38..3F 0xEB, 0x34, 0x2C, 0x51, 0xEA, 0xC8, 0x48, 0xAB, // 40..47 0xF2, 0x2A, 0x68, 0xA2, 0xFD, 0x3A, 0xCE, 0xCC, // 48..4F 0xB5, 0x70, 0x0E, 0x56, 0x08, 0x0C, 0x76, 0x12, // 50..57 0xBF, 0x72, 0x13, 0x47, 0x9C, 0xB7, 0x5D, 0x87, // 58..5F 0x15, 0xA1, 0x96, 0x29, 0x10, 0x7B, 0x9A, 0xC7, // 60..67 0xF3, 0x91, 0x78, 0x6F, 0x9D, 0x9E, 0xB2, 0xB1, // 68..6F 0x32, 0x75, 0x19, 0x3D, 0xFF, 0x35, 0x8A, 0x7E, // 70..77 0x6D, 0x54, 0xC6, 0x80, 0xC3, 0xBD, 0x0D, 0x57, // 78..7F 0xDF, 0xF5, 0x24, 0xA9, 0x3E, 0xA8, 0x43, 0xC9, // 80..87 0xD7, 0x79, 0xD6, 0xF6, 0x7C, 0x22, 0xB9, 0x03, // 88..8F 0xE0, 0x0F, 0xEC, 0xDE, 0x7A, 0x94, 0xB0, 0xBC, // 90..97 0xDC, 0xE8, 0x28, 0x50, 0x4E, 0x33, 0x0A, 0x4A, // 98..9F 0xA7, 0x97, 0x60, 0x73, 0x1E, 0x00, 0x62, 0x44, // A0..A7 0x1A, 0xB8, 0x38, 0x82, 0x64, 0x9F, 0x26, 0x41, // A8..AF 0xAD, 0x45, 0x46, 0x92, 0x27, 0x5E, 0x55, 0x2F, // B0..B7 0x8C, 0xA3, 0xA5, 0x7D, 0x69, 0xD5, 0x95, 0x3B, // B8..BF 0x07, 0x58, 0xB3, 0x40, 0x86, 0xAC, 0x1D, 0xF7, // C0..C7 0x30, 0x37, 0x6B, 0xE4, 0x88, 0xD9, 0xE7, 0x89, // C8..CF 0xE1, 0x1B, 0x83, 0x49, 0x4C, 0x3F, 0xF8, 0xFE, // D0..D7 0x8D, 0x53, 0xAA, 0x90, 0xCA, 0xD8, 0x85, 0x61, // D8..DF 0x20, 0x71, 0x67, 0xA4, 0x2D, 0x2B, 0x09, 0x5B, // E0..E7 0xCB, 0x9B, 0x25, 0xD0, 0xBE, 0xE5, 0x6C, 0x52, // E8..EF 0x59, 0xA6, 0x74, 0xD2, 0xE6, 0xF4, 0xB4, 0xC0, // F0..F7 0xD1, 0x66, 0xAF, 0xC2, 0x39, 0x4B, 0x63, 0xB6, // F8..FF }; // Inverse S-Box const uint8_t grasshopper_pi_inv[0x100] = { 0xA5, 0x2D, 0x32, 0x8F, 0x0E, 0x30, 0x38, 0xC0, // 00..07 0x54, 0xE6, 0x9E, 0x39, 0x55, 0x7E, 0x52, 0x91, // 08..0F 0x64, 0x03, 0x57, 0x5A, 0x1C, 0x60, 0x07, 0x18, // 10..17 0x21, 0x72, 0xA8, 0xD1, 0x29, 0xC6, 0xA4, 0x3F, // 18..1F 0xE0, 0x27, 0x8D, 0x0C, 0x82, 0xEA, 0xAE, 0xB4, // 20..27 0x9A, 0x63, 0x49, 0xE5, 0x42, 0xE4, 0x15, 0xB7, // 28..2F 0xC8, 0x06, 0x70, 0x9D, 0x41, 0x75, 0x19, 0xC9, // 30..37 0xAA, 0xFC, 0x4D, 0xBF, 0x2A, 0x73, 0x84, 0xD5, // 38..3F 0xC3, 0xAF, 0x2B, 0x86, 0xA7, 0xB1, 0xB2, 0x5B, // 40..47 0x46, 0xD3, 0x9F, 0xFD, 0xD4, 0x0F, 0x9C, 0x2F, // 48..4F 0x9B, 0x43, 0xEF, 0xD9, 0x79, 0xB6, 0x53, 0x7F, // 50..57 0xC1, 0xF0, 0x23, 0xE7, 0x25, 0x5E, 0xB5, 0x1E, // 58..5F 0xA2, 0xDF, 0xA6, 0xFE, 0xAC, 0x22, 0xF9, 0xE2, // 60..67 0x4A, 0xBC, 0x35, 0xCA, 0xEE, 0x78, 0x05, 0x6B, // 68..6F 0x51, 0xE1, 0x59, 0xA3, 0xF2, 0x71, 0x56, 0x11, // 70..77 0x6A, 0x89, 0x94, 0x65, 0x8C, 0xBB, 0x77, 0x3C, // 78..7F 0x7B, 0x28, 0xAB, 0xD2, 0x31, 0xDE, 0xC4, 0x5F, // 80..87 0xCC, 0xCF, 0x76, 0x2C, 0xB8, 0xD8, 0x2E, 0x36, // 88..8F 0xDB, 0x69, 0xB3, 0x14, 0x95, 0xBE, 0x62, 0xA1, // 90..97 0x3B, 0x16, 0x66, 0xE9, 0x5C, 0x6C, 0x6D, 0xAD, // 98..9F 0x37, 0x61, 0x4B, 0xB9, 0xE3, 0xBA, 0xF1, 0xA0, // A0..A7 0x85, 0x83, 0xDA, 0x47, 0xC5, 0xB0, 0x33, 0xFA, // A8..AF 0x96, 0x6F, 0x6E, 0xC2, 0xF6, 0x50, 0xFF, 0x5D, // B0..B7 0xA9, 0x8E, 0x17, 0x1B, 0x97, 0x7D, 0xEC, 0x58, // B8..BF 0xF7, 0x1F, 0xFB, 0x7C, 0x09, 0x0D, 0x7A, 0x67, // C0..C7 0x45, 0x87, 0xDC, 0xE8, 0x4F, 0x1D, 0x4E, 0x04, // C8..CF 0xEB, 0xF8, 0xF3, 0x3E, 0x3D, 0xBD, 0x8A, 0x88, // D0..D7 0xDD, 0xCD, 0x0B, 0x13, 0x98, 0x02, 0x93, 0x80, // D8..DF 0x90, 0xD0, 0x24, 0x34, 0xCB, 0xED, 0xF4, 0xCE, // E0..E7 0x99, 0x10, 0x44, 0x40, 0x92, 0x3A, 0x01, 0x26, // E8..EF 0x12, 0x1A, 0x48, 0x68, 0xF5, 0x81, 0x8B, 0xC7, // F0..F7 0xD6, 0x20, 0x0A, 0x08, 0x00, 0x4C, 0xD7, 0x74 // F8..FF }; // Linear vector from sect 5.1.2 const uint8_t grasshopper_lvec[16] = { 0x94, 0x20, 0x85, 0x10, 0xC2, 0xC0, 0x01, 0xFB, 0x01, 0xC0, 0xC2, 0x10, 0x85, 0x20, 0x94, 0x01 }; #if defined(__cplusplus) } #endif libengine-gost-openssl-3.0.2/gost_grasshopper_defines.h000066400000000000000000000027011446070765000233530ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * This file is distributed under the same license as OpenSSL */ #ifndef GOST_GRASSHOPPER_DEFINES_H #define GOST_GRASSHOPPER_DEFINES_H #if defined(__cplusplus) extern "C" { #endif #include #include # if !defined(inline) && !defined(__cplusplus) # if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L # define GRASSHOPPER_INLINE inline # elif defined(__GNUC__) && __GNUC__ >= 2 # define GRASSHOPPER_INLINE __inline__ # define likely(x) __builtin_expect(!!(x), 1) # elif defined(_MSC_VER) # define GRASSHOPPER_INLINE __inline # else # define GRASSHOPPER_INLINE # endif # else # define GRASSHOPPER_INLINE inline # endif # if !defined(likely) # define likely(x) x # endif typedef union { uint8_t b[16]; uint64_t q[2]; uint32_t d[4]; uint16_t w[8]; } grasshopper_w128_t; typedef union { uint8_t b[32]; uint64_t q[4]; uint32_t d[8]; uint16_t w[16]; grasshopper_w128_t k[2]; } grasshopper_w256_t; typedef struct { grasshopper_w256_t k; } grasshopper_key_t; #define GRASSHOPPER_ROUND_KEYS_COUNT 10 typedef struct { grasshopper_w128_t k[GRASSHOPPER_ROUND_KEYS_COUNT]; } grasshopper_round_keys_t; extern const uint8_t grasshopper_pi[0x100]; extern const uint8_t grasshopper_pi_inv[0x100]; extern const uint8_t grasshopper_lvec[16]; #define GRASSHOPPER_BLOCK_SIZE (128/8) #define GRASSHOPPER_KEY_SIZE (256/8) #if defined(__cplusplus) } #endif #endif libengine-gost-openssl-3.0.2/gost_grasshopper_galois_precompiled.c000066400000000000000000000051011446070765000255670ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * This file is distributed under the same license as OpenSSL */ #include "gost_grasshopper_precompiled.h" #include "gost_grasshopper_defines.h" uint8_t grasshopper_galois_alpha_to[256] = { 1, 2, 4, 8, 16, 32, 64, 128, 195, 69, 138, 215, 109, 218, 119, 238, 31, 62, 124, 248, 51, 102, 204, 91, 182, 175, 157, 249, 49, 98, 196, 75, 150, 239, 29, 58, 116, 232, 19, 38, 76, 152, 243, 37, 74, 148, 235, 21, 42, 84, 168, 147, 229, 9, 18, 36, 72, 144, 227, 5, 10, 20, 40, 80, 160, 131, 197, 73, 146, 231, 13, 26, 52, 104, 208, 99, 198, 79, 158, 255, 61, 122, 244, 43, 86, 172, 155, 245, 41, 82, 164, 139, 213, 105, 210, 103, 206, 95, 190, 191, 189, 185, 177, 161, 129, 193, 65, 130, 199, 77, 154, 247, 45, 90, 180, 171, 149, 233, 17, 34, 68, 136, 211, 101, 202, 87, 174, 159, 253, 57, 114, 228, 11, 22, 44, 88, 176, 163, 133, 201, 81, 162, 135, 205, 89, 178, 167, 141, 217, 113, 226, 7, 14, 28, 56, 112, 224, 3, 6, 12, 24, 48, 96, 192, 67, 134, 207, 93, 186, 183, 173, 153, 241, 33, 66, 132, 203, 85, 170, 151, 237, 25, 50, 100, 200, 83, 166, 143, 221, 121, 242, 39, 78, 156, 251, 53, 106, 212, 107, 214, 111, 222, 127, 254, 63, 126, 252, 59, 118, 236, 27, 54, 108, 216, 115, 230, 15, 30, 60, 120, 240, 35, 70, 140, 219, 117, 234, 23, 46, 92, 184, 179, 165, 137, 209, 97, 194, 71, 142, 223, 125, 250, 55, 110, 220, 123, 246, 47, 94, 188, 187, 181, 169, 145, 225, 1, }; uint8_t grasshopper_galois_index_of[256] = { 255, 0, 1, 157, 2, 59, 158, 151, 3, 53, 60, 132, 159, 70, 152, 216, 4, 118, 54, 38, 61, 47, 133, 227, 160, 181, 71, 210, 153, 34, 217, 16, 5, 173, 119, 221, 55, 43, 39, 191, 62, 88, 48, 83, 134, 112, 228, 247, 161, 28, 182, 20, 72, 195, 211, 242, 154, 129, 35, 207, 218, 80, 17, 204, 6, 106, 174, 164, 120, 9, 222, 237, 56, 67, 44, 31, 40, 109, 192, 77, 63, 140, 89, 185, 49, 177, 84, 125, 135, 144, 113, 23, 229, 167, 248, 97, 162, 235, 29, 75, 183, 123, 21, 95, 73, 93, 196, 198, 212, 12, 243, 200, 155, 149, 130, 214, 36, 225, 208, 14, 219, 189, 81, 245, 18, 240, 205, 202, 7, 104, 107, 65, 175, 138, 165, 142, 121, 233, 10, 91, 223, 147, 238, 187, 57, 253, 68, 51, 45, 116, 32, 179, 41, 171, 110, 86, 193, 26, 78, 127, 64, 103, 141, 137, 90, 232, 186, 146, 50, 252, 178, 115, 85, 170, 126, 25, 136, 102, 145, 231, 114, 251, 24, 169, 230, 101, 168, 250, 249, 100, 98, 99, 163, 105, 236, 8, 30, 66, 76, 108, 184, 139, 124, 176, 22, 143, 96, 166, 74, 234, 94, 122, 197, 92, 199, 11, 213, 148, 13, 224, 244, 188, 201, 239, 156, 254, 150, 58, 131, 52, 215, 69, 37, 117, 226, 46, 209, 180, 15, 33, 220, 172, 190, 42, 82, 87, 246, 111, 19, 27, 241, 194, 206, 128, 203, 79, }; libengine-gost-openssl-3.0.2/gost_grasshopper_math.h000066400000000000000000000112751446070765000226750ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * This file is distributed under the same license as OpenSSL */ #ifndef GOST_GRASSHOPPER_MATH_H #define GOST_GRASSHOPPER_MATH_H #if defined(__cplusplus) extern "C" { #endif #include "gost_grasshopper_defines.h" #if defined(__SSE__) || defined(__SSE2__) || defined(__SSE2_MATH__) || defined(__SSE3__) || defined(__SSE_MATH__) \ || defined(__SSE4_1__)|| defined(__SSE4_2__)|| defined(__SSSE3__) #define GRASSHOPPER_SSE_SUPPORTED #endif #define GRASSHOPPER_MIN_BITS 8 #define GRASSHOPPER_MAX_BITS 128 #if UINTPTR_MAX == 0xff #define GRASSHOPPER_BITS 8 #elif UINTPTR_MAX == 0xffff #define GRASSHOPPER_BITS 16 #elif UINTPTR_MAX == 0xffffffff #define GRASSHOPPER_BITS 32 #elif UINTPTR_MAX == 0xffffffffffffffff #define GRASSHOPPER_BITS 64 #endif #define GRASSHOPPER_BIT_PARTS_8 (GRASSHOPPER_MAX_BITS / 8) #define GRASSHOPPER_BIT_PARTS_16 (GRASSHOPPER_MAX_BITS / 16) #define GRASSHOPPER_BIT_PARTS_32 (GRASSHOPPER_MAX_BITS / 32) #define GRASSHOPPER_BIT_PARTS_64 (GRASSHOPPER_MAX_BITS / 64) #define GRASSHOPPER_BIT_PARTS (GRASSHOPPER_MAX_BITS / GRASSHOPPER_BITS) #define GRASSHOPPER_MAX_BIT_PARTS (GRASSHOPPER_MAX_BITS / GRASSHOPPER_MIN_BITS) #define GRASSHOPPER_ACCESS_128_VALUE_8(key, part) ((key).b[(part)]) #define GRASSHOPPER_ACCESS_128_VALUE_16(key, part) ((key).w[(part)]) #define GRASSHOPPER_ACCESS_128_VALUE_32(key, part) ((key).d[(part)]) #define GRASSHOPPER_ACCESS_128_VALUE_64(key, part) ((key).q[(part)]) #if(GRASSHOPPER_BITS == 8) #define GRASSHOPPER_ACCESS_128_VALUE GRASSHOPPER_ACCESS_128_VALUE_8 #elif(GRASSHOPPER_BITS == 16) #define GRASSHOPPER_ACCESS_128_VALUE GRASSHOPPER_ACCESS_128_VALUE_16 #elif(GRASSHOPPER_BITS == 32) #define GRASSHOPPER_ACCESS_128_VALUE GRASSHOPPER_ACCESS_128_VALUE_32 #elif(GRASSHOPPER_BITS == 64) #define GRASSHOPPER_ACCESS_128_VALUE GRASSHOPPER_ACCESS_128_VALUE_64 #endif static GRASSHOPPER_INLINE void grasshopper_zero128(grasshopper_w128_t* x) { #if(GRASSHOPPER_BITS == 8 || GRASSHOPPER_BITS == 16) memset(&x, 0, sizeof(x)); #else int i; for (i = 0; i < GRASSHOPPER_BIT_PARTS; i++) { GRASSHOPPER_ACCESS_128_VALUE(*x, i) = 0; } #endif } static GRASSHOPPER_INLINE void grasshopper_copy128(grasshopper_w128_t* to, const grasshopper_w128_t* from) { #if(GRASSHOPPER_BITS == 8 || GRASSHOPPER_BITS == 16) __builtin_memcpy(&to, &from, sizeof(grasshopper_w128_t)); #else int i; for (i = 0; i < GRASSHOPPER_BIT_PARTS; i++) { GRASSHOPPER_ACCESS_128_VALUE(*to, i) = GRASSHOPPER_ACCESS_128_VALUE(*from, i); } #endif } static GRASSHOPPER_INLINE void grasshopper_append128(grasshopper_w128_t* x, const grasshopper_w128_t* y) { int i; #ifdef STRICT_ALIGNMENT for (i = 0; i < 16; i++) { GRASSHOPPER_ACCESS_128_VALUE_8(*x, i) ^= GRASSHOPPER_ACCESS_128_VALUE_8(*y, i); } #else for (i = 0; i < GRASSHOPPER_BIT_PARTS; i++) { GRASSHOPPER_ACCESS_128_VALUE(*x, i) ^= GRASSHOPPER_ACCESS_128_VALUE(*y, i); } #endif } static GRASSHOPPER_INLINE void grasshopper_plus128(grasshopper_w128_t* result, const grasshopper_w128_t* x, const grasshopper_w128_t* y) { grasshopper_copy128(result, x); grasshopper_append128(result, y); } // result & x must be different static GRASSHOPPER_INLINE void grasshopper_plus128multi(grasshopper_w128_t* result, const grasshopper_w128_t* x, const grasshopper_w128_t array[][256]) { int i; grasshopper_zero128(result); for (i = 0; i < GRASSHOPPER_MAX_BIT_PARTS; i++) { grasshopper_append128(result, &array[i][GRASSHOPPER_ACCESS_128_VALUE_8(*x, i)]); } } static GRASSHOPPER_INLINE void grasshopper_append128multi(grasshopper_w128_t* result, grasshopper_w128_t* x, const grasshopper_w128_t array[][256]) { grasshopper_plus128multi(result, x, array); grasshopper_copy128(x, result); } static GRASSHOPPER_INLINE void grasshopper_convert128(grasshopper_w128_t* x, const uint8_t* array) { int i; for (i = 0; i < GRASSHOPPER_MAX_BIT_PARTS; i++) { GRASSHOPPER_ACCESS_128_VALUE_8(*x, i) = array[GRASSHOPPER_ACCESS_128_VALUE_8(*x, i)]; } } #define GRASSHOPPER_GALOIS_POWER 8 #define GRASSHOPPER_GALOIS_FIELD_SIZE ((1 << GRASSHOPPER_GALOIS_POWER) - 1) extern uint8_t grasshopper_galois_alpha_to[256]; extern uint8_t grasshopper_galois_index_of[256]; static GRASSHOPPER_INLINE uint8_t grasshopper_galois_mul(uint8_t x, uint8_t y) { if (likely(x != 0 && y != 0)) { return grasshopper_galois_alpha_to[(grasshopper_galois_index_of[x] + grasshopper_galois_index_of[y]) % GRASSHOPPER_GALOIS_FIELD_SIZE]; } else { return 0; } } #if defined(__cplusplus) } #endif #endif libengine-gost-openssl-3.0.2/gost_grasshopper_precompiled.c000066400000000000000000035243031446070765000242460ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * This file is distributed under the same license as OpenSSL */ #include "gost_grasshopper_precompiled.h" #include "gost_grasshopper_defines.h" #include "gost_grasshopper_math.h" const grasshopper_w128_t grasshopper_pil_enc128[GRASSHOPPER_MAX_BIT_PARTS][256] = { { { 233, 251, 213, 12, 122, 192, 128, 150, 25, 17, 135, 147, 27, 201, 174, 181, }, { 25, 8, 224, 140, 178, 23, 26, 206, 123, 50, 252, 171, 248, 254, 242, 10, }, { 191, 203, 208, 162, 80, 178, 220, 119, 192, 189, 202, 239, 78, 136, 199, 137, }, { 98, 65, 16, 26, 94, 99, 66, 214, 105, 196, 18, 60, 211, 147, 19, 192, }, { 79, 56, 229, 34, 152, 101, 70, 47, 162, 158, 177, 215, 173, 191, 155, 54, }, { 56, 179, 57, 106, 17, 111, 74, 231, 60, 112, 151, 41, 47, 203, 192, 239, }, { 251, 31, 183, 194, 6, 125, 86, 77, 8, 53, 120, 253, 150, 15, 254, 104, }, { 74, 136, 248, 155, 195, 164, 121, 115, 199, 148, 231, 137, 163, 197, 9, 170, }, { 193, 50, 61, 141, 231, 7, 187, 51, 183, 65, 114, 38, 107, 159, 180, 223, }, { 106, 124, 153, 142, 24, 55, 155, 247, 32, 212, 35, 114, 29, 60, 126, 99, }, { 14, 92, 159, 251, 149, 107, 243, 73, 15, 28, 85, 155, 123, 66, 48, 75, }, { 151, 2, 56, 35, 205, 117, 231, 210, 110, 237, 63, 90, 62, 222, 221, 227, }, { 11, 236, 130, 66, 206, 170, 204, 21, 106, 22, 3, 197, 117, 56, 162, 215, }, { 165, 18, 59, 248, 106, 91, 211, 141, 152, 137, 4, 207, 13, 225, 250, 247, }, { 186, 123, 205, 27, 11, 115, 227, 43, 165, 183, 156, 177, 64, 242, 85, 21, }, { 51, 95, 187, 40, 223, 197, 134, 242, 86, 102, 148, 236, 90, 243, 98, 56, }, { 49, 193, 8, 13, 47, 208, 33, 107, 213, 98, 9, 30, 136, 168, 232, 96, }, { 237, 4, 112, 70, 89, 234, 13, 103, 220, 25, 126, 180, 124, 127, 121, 5, }, { 228, 118, 65, 33, 103, 85, 102, 235, 53, 11, 224, 131, 219, 28, 81, 138, }, { 88, 108, 154, 85, 191, 25, 175, 168, 214, 176, 24, 231, 46, 3, 89, 119, }, { 30, 38, 78, 16, 25, 195, 130, 11, 157, 60, 55, 7, 36, 223, 234, 206, }, { 201, 15, 180, 25, 161, 83, 98, 18, 254, 81, 67, 104, 165, 48, 217, 124, }, { 244, 12, 144, 202, 235, 253, 23, 169, 167, 43, 130, 31, 132, 129, 139, 15, }, { 255, 224, 18, 136, 37, 87, 219, 188, 205, 61, 129, 218, 241, 185, 41, 216, }, { 133, 230, 90, 237, 177, 200, 49, 9, 127, 201, 192, 52, 179, 24, 141, 62, }, { 211, 214, 95, 67, 155, 186, 109, 232, 166, 101, 141, 72, 230, 89, 228, 2, }, { 43, 24, 227, 87, 21, 57, 46, 145, 141, 86, 199, 62, 203, 193, 213, 30, }, { 48, 142, 176, 254, 87, 59, 147, 198, 117, 96, 166, 103, 225, 100, 173, 76, }, { 23, 84, 127, 119, 39, 124, 233, 135, 116, 46, 169, 48, 131, 188, 194, 65, }, { 18, 228, 98, 206, 124, 189, 214, 219, 17, 36, 255, 110, 141, 198, 80, 221, }, { 195, 172, 142, 168, 23, 18, 28, 170, 52, 69, 239, 212, 185, 196, 62, 135, }, { 31, 105, 246, 227, 97, 40, 48, 166, 61, 62, 152, 126, 77, 19, 175, 226, }, { 156, 238, 186, 97, 3, 223, 43, 199, 4, 251, 60, 159, 75, 230, 127, 52, }, { 26, 217, 235, 90, 58, 233, 15, 250, 88, 52, 206, 32, 67, 105, 61, 126, }, { 29, 247, 69, 198, 145, 61, 151, 63, 190, 58, 5, 140, 159, 72, 37, 186, }, { 182, 185, 225, 197, 110, 13, 183, 251, 41, 175, 84, 216, 233, 235, 239, 6, }, { 20, 133, 116, 161, 175, 130, 252, 179, 87, 40, 155, 187, 56, 43, 13, 53, }, { 81, 30, 171, 50, 129, 166, 196, 36, 63, 162, 134, 208, 137, 96, 113, 248, }, { 214, 102, 66, 250, 192, 123, 82, 180, 195, 111, 219, 22, 232, 35, 118, 158, }, { 86, 48, 5, 174, 42, 114, 92, 225, 217, 172, 77, 124, 85, 65, 105, 60, }, { 238, 213, 123, 144, 209, 20, 24, 83, 255, 31, 76, 63, 199, 232, 182, 113, }, { 160, 162, 38, 65, 49, 154, 236, 209, 253, 131, 82, 145, 3, 155, 104, 107, }, { 57, 252, 129, 153, 105, 132, 248, 74, 156, 114, 56, 80, 70, 7, 133, 195, }, { 172, 96, 10, 159, 84, 228, 184, 1, 113, 155, 154, 248, 170, 130, 210, 120, }, { 4, 255, 165, 74, 35, 42, 141, 241, 197, 8, 249, 39, 103, 182, 215, 176, }, { 207, 110, 162, 118, 114, 108, 72, 122, 184, 93, 39, 189, 16, 221, 132, 148, }, { 113, 234, 202, 39, 90, 53, 38, 160, 216, 226, 66, 43, 55, 153, 6, 49, }, { 110, 131, 60, 196, 59, 29, 22, 6, 229, 220, 218, 85, 122, 138, 169, 211, }, { 117, 21, 111, 109, 121, 31, 171, 81, 29, 234, 187, 12, 80, 47, 209, 129, }, { 155, 192, 20, 253, 168, 11, 179, 2, 226, 245, 247, 51, 151, 199, 103, 240, }, { 93, 220, 135, 236, 228, 216, 144, 244, 179, 186, 78, 185, 32, 121, 203, 235, }, { 232, 180, 109, 255, 2, 43, 50, 59, 185, 19, 40, 234, 114, 5, 235, 153, }, { 219, 235, 214, 215, 221, 238, 180, 201, 239, 117, 188, 6, 40, 246, 137, 161, }, { 130, 200, 244, 113, 26, 28, 169, 204, 153, 199, 11, 152, 111, 57, 149, 250, }, { 190, 132, 104, 81, 40, 89, 110, 218, 96, 191, 101, 150, 39, 68, 130, 165, }, { 184, 229, 126, 62, 251, 102, 68, 178, 38, 179, 1, 67, 146, 169, 223, 77, }, { 231, 167, 74, 247, 239, 171, 115, 223, 22, 13, 210, 8, 96, 139, 158, 254, }, { 37, 68, 124, 172, 128, 82, 221, 216, 130, 74, 146, 165, 176, 131, 229, 85, }, { 139, 186, 197, 22, 36, 163, 194, 64, 112, 213, 149, 175, 200, 90, 189, 117, }, { 59, 98, 50, 188, 153, 145, 95, 211, 31, 118, 165, 162, 148, 92, 15, 155, }, { 90, 242, 41, 112, 79, 12, 8, 49, 85, 180, 133, 21, 252, 88, 211, 47, }, { 199, 83, 43, 226, 52, 56, 145, 91, 241, 77, 22, 243, 222, 114, 233, 55, }, { 239, 154, 195, 99, 169, 255, 170, 254, 95, 29, 227, 70, 174, 36, 243, 93, }, { 50, 16, 3, 219, 167, 46, 52, 95, 246, 100, 59, 149, 51, 63, 39, 20, }, { 108, 29, 143, 225, 203, 8, 177, 159, 102, 216, 71, 167, 168, 209, 35, 139, }, { 142, 10, 216, 175, 127, 98, 253, 28, 21, 223, 195, 241, 198, 32, 47, 233, }, { 148, 211, 51, 245, 69, 139, 242, 230, 77, 235, 13, 209, 133, 73, 18, 151, }, { 147, 253, 157, 105, 238, 95, 106, 35, 171, 229, 198, 125, 89, 104, 10, 83, }, { 163, 115, 45, 151, 185, 100, 249, 229, 222, 133, 96, 26, 184, 12, 167, 31, }, { 103, 241, 13, 163, 5, 162, 125, 138, 12, 206, 68, 98, 221, 233, 129, 92, }, { 70, 74, 212, 69, 166, 218, 45, 163, 75, 140, 47, 224, 10, 220, 179, 185, }, { 157, 161, 2, 146, 123, 52, 153, 106, 164, 249, 147, 230, 34, 42, 58, 24, }, { 185, 170, 198, 205, 131, 141, 246, 31, 134, 177, 174, 58, 251, 101, 154, 97, }, { 115, 116, 121, 2, 170, 32, 129, 57, 91, 230, 223, 217, 229, 194, 140, 105, }, { 223, 20, 115, 157, 254, 196, 57, 56, 42, 125, 69, 33, 79, 64, 94, 17, }, { 229, 57, 249, 210, 31, 190, 212, 70, 149, 9, 79, 250, 178, 208, 20, 166, }, { 38, 149, 119, 122, 8, 172, 200, 236, 161, 76, 160, 46, 11, 20, 42, 33, }, { 222, 91, 203, 110, 134, 47, 139, 149, 138, 127, 234, 88, 38, 140, 27, 61, }, { 128, 86, 71, 84, 234, 9, 14, 85, 26, 195, 150, 106, 189, 98, 31, 162, }, { 221, 138, 192, 184, 14, 209, 158, 161, 169, 121, 216, 211, 157, 27, 212, 73, }, { 96, 223, 163, 63, 174, 118, 229, 79, 234, 192, 143, 206, 1, 200, 153, 152, }, { 197, 205, 152, 199, 196, 45, 54, 194, 114, 73, 139, 1, 12, 41, 99, 111, }, { 80, 81, 19, 193, 249, 77, 118, 137, 159, 160, 41, 169, 224, 172, 52, 212, }, { 187, 52, 117, 232, 115, 152, 81, 134, 5, 181, 51, 200, 41, 62, 16, 57, }, { 183, 246, 89, 54, 22, 230, 5, 86, 137, 173, 251, 161, 128, 39, 170, 42, }, { 13, 141, 148, 45, 29, 149, 230, 125, 44, 26, 103, 16, 192, 213, 255, 63, }, { 34, 106, 210, 48, 43, 134, 69, 29, 100, 68, 89, 9, 108, 162, 253, 145, }, { 240, 243, 53, 128, 200, 215, 154, 88, 98, 35, 123, 56, 227, 55, 92, 191, }, { 138, 245, 125, 229, 92, 72, 112, 237, 208, 215, 58, 214, 161, 150, 248, 89, }, { 152, 17, 31, 43, 32, 245, 166, 54, 193, 243, 197, 184, 44, 80, 168, 132, }, { 63, 157, 151, 246, 186, 187, 210, 34, 218, 126, 92, 133, 243, 234, 216, 43, }, { 217, 117, 101, 242, 45, 251, 19, 80, 108, 113, 33, 244, 250, 173, 3, 249, }, { 129, 25, 255, 167, 146, 226, 188, 248, 186, 193, 57, 19, 212, 174, 90, 142, }, { 61, 3, 36, 211, 74, 174, 117, 187, 89, 122, 193, 119, 33, 177, 82, 115, }, { 158, 112, 9, 68, 243, 202, 140, 94, 135, 255, 161, 109, 153, 189, 245, 108, }, { 9, 114, 49, 103, 62, 191, 107, 140, 233, 18, 158, 55, 167, 99, 40, 143, }, { 216, 58, 221, 1, 85, 16, 161, 253, 204, 115, 142, 141, 147, 97, 70, 213, }, { 119, 139, 220, 72, 137, 10, 12, 200, 158, 238, 38, 254, 130, 116, 91, 217, }, { 107, 51, 33, 125, 96, 220, 41, 90, 128, 214, 140, 11, 116, 240, 59, 79, }, { 225, 198, 92, 152, 60, 148, 89, 183, 80, 1, 182, 221, 213, 102, 195, 22, }, { 173, 47, 178, 108, 44, 15, 10, 172, 209, 153, 53, 129, 195, 78, 151, 84, }, { 224, 137, 228, 107, 68, 127, 235, 26, 240, 3, 25, 164, 188, 170, 134, 58, }, { 102, 190, 181, 80, 125, 73, 207, 39, 172, 204, 235, 27, 180, 37, 196, 112, }, { 248, 206, 188, 20, 142, 131, 67, 121, 43, 51, 74, 118, 45, 152, 49, 28, }, { 118, 196, 100, 187, 241, 225, 190, 101, 62, 236, 137, 135, 235, 184, 30, 245, }, { 67, 250, 201, 252, 253, 27, 18, 255, 46, 134, 121, 190, 4, 166, 33, 37, }, { 114, 59, 193, 241, 210, 203, 51, 148, 251, 228, 112, 160, 140, 14, 201, 69, }, { 247, 221, 155, 28, 99, 3, 2, 157, 132, 45, 176, 148, 63, 22, 68, 123, }, { 78, 119, 93, 209, 224, 142, 244, 130, 2, 156, 30, 174, 196, 115, 222, 26, }, { 220, 197, 120, 75, 118, 58, 44, 12, 9, 123, 119, 170, 244, 215, 145, 101, }, { 72, 22, 75, 190, 51, 177, 222, 234, 68, 144, 122, 123, 113, 158, 131, 242, }, { 218, 164, 110, 36, 165, 5, 6, 100, 79, 119, 19, 127, 65, 58, 204, 141, }, { 105, 173, 146, 88, 144, 201, 142, 195, 3, 210, 17, 249, 166, 171, 177, 23, }, { 176, 216, 247, 170, 189, 50, 157, 147, 111, 163, 48, 13, 92, 6, 178, 238, }, { 213, 183, 73, 44, 72, 133, 71, 128, 224, 105, 233, 157, 83, 180, 185, 234, }, { 246, 146, 35, 239, 27, 232, 176, 48, 36, 47, 31, 237, 86, 218, 1, 87, }, { 123, 73, 240, 150, 236, 116, 88, 24, 18, 246, 238, 151, 43, 109, 225, 202, }, { 65, 100, 122, 217, 13, 14, 181, 102, 173, 130, 228, 76, 214, 253, 171, 125, }, { 203, 145, 7, 60, 81, 70, 197, 139, 125, 85, 222, 154, 119, 107, 83, 36, }, { 149, 156, 139, 6, 61, 96, 64, 75, 237, 233, 162, 168, 236, 133, 87, 187, }, { 170, 1, 28, 240, 135, 219, 146, 105, 55, 151, 254, 45, 31, 111, 143, 144, }, { 230, 232, 242, 4, 151, 64, 193, 114, 182, 15, 125, 113, 9, 71, 219, 210, }, { 55, 160, 30, 98, 252, 239, 11, 3, 147, 110, 109, 203, 61, 69, 181, 136, }, { 33, 187, 217, 230, 163, 120, 80, 41, 71, 66, 107, 130, 215, 53, 50, 229, }, { 66, 181, 113, 15, 133, 240, 160, 82, 142, 132, 214, 199, 109, 106, 100, 9, }, { 215, 41, 250, 9, 184, 144, 224, 25, 99, 109, 116, 111, 129, 239, 51, 178, }, { 194, 227, 54, 91, 111, 249, 174, 7, 148, 71, 64, 173, 208, 8, 123, 171, }, { 116, 90, 215, 158, 1, 244, 25, 252, 189, 232, 20, 117, 57, 227, 148, 173, }, { 226, 23, 87, 78, 180, 106, 76, 131, 115, 7, 132, 86, 110, 241, 12, 98, }, { 145, 99, 46, 76, 30, 74, 205, 186, 40, 225, 91, 143, 139, 51, 128, 11, }, { 35, 37, 106, 195, 83, 109, 247, 176, 196, 70, 246, 112, 5, 110, 184, 189, }, { 192, 125, 133, 126, 159, 236, 9, 158, 23, 67, 221, 95, 2, 83, 241, 243, }, { 100, 32, 6, 117, 141, 92, 104, 190, 47, 200, 118, 233, 102, 126, 78, 40, }, { 15, 19, 39, 8, 237, 128, 65, 228, 175, 30, 250, 226, 18, 142, 117, 103, }, { 99, 14, 168, 233, 38, 136, 240, 123, 201, 198, 189, 69, 186, 95, 86, 236, }, { 168, 159, 175, 213, 119, 206, 53, 240, 180, 147, 99, 223, 205, 52, 5, 200, }, { 85, 225, 14, 120, 162, 140, 73, 213, 250, 170, 127, 247, 238, 214, 166, 72, }, { 189, 85, 99, 135, 160, 167, 123, 238, 67, 185, 87, 29, 156, 211, 77, 209, }, { 154, 143, 172, 14, 208, 224, 1, 175, 66, 247, 88, 74, 254, 11, 34, 220, }, { 3, 209, 11, 214, 136, 254, 21, 52, 35, 6, 50, 139, 187, 151, 207, 116, }, { 200, 64, 12, 234, 217, 184, 208, 191, 94, 83, 236, 17, 204, 252, 156, 80, }, { 196, 130, 32, 52, 188, 198, 132, 111, 210, 75, 36, 120, 101, 229, 38, 67, }, { 109, 82, 55, 18, 179, 227, 3, 50, 198, 218, 232, 222, 193, 29, 102, 167, }, { 146, 178, 37, 154, 150, 180, 216, 142, 11, 231, 105, 4, 48, 164, 79, 127, }, { 73, 89, 243, 77, 75, 90, 108, 71, 228, 146, 213, 2, 24, 82, 198, 222, }, { 159, 63, 177, 183, 139, 33, 62, 243, 39, 253, 14, 20, 240, 113, 176, 64, }, { 68, 212, 103, 96, 86, 207, 138, 58, 200, 136, 178, 18, 216, 135, 57, 225, }, { 45, 121, 245, 56, 198, 6, 4, 249, 203, 90, 163, 235, 126, 44, 136, 246, }, { 47, 231, 70, 29, 54, 19, 163, 96, 72, 94, 62, 25, 172, 119, 2, 174, }, { 54, 239, 166, 145, 132, 4, 185, 174, 51, 108, 194, 178, 84, 137, 240, 164, }, { 21, 202, 204, 82, 215, 105, 78, 30, 247, 42, 52, 194, 81, 231, 72, 25, }, { 24, 71, 88, 127, 202, 252, 168, 99, 219, 48, 83, 210, 145, 50, 183, 38, }, { 112, 165, 114, 212, 34, 222, 148, 13, 120, 224, 237, 82, 94, 85, 67, 29, }, { 254, 175, 170, 123, 93, 188, 105, 17, 109, 63, 46, 163, 152, 117, 108, 244, }, { 46, 168, 254, 238, 78, 248, 17, 205, 232, 92, 145, 96, 197, 187, 71, 130, }, { 92, 147, 63, 31, 156, 51, 34, 89, 19, 184, 225, 192, 73, 181, 142, 199, }, { 161, 237, 158, 178, 73, 113, 94, 124, 93, 129, 253, 232, 106, 87, 45, 71, }, { 166, 195, 48, 46, 226, 165, 198, 185, 187, 143, 54, 68, 182, 118, 53, 131, }, { 234, 42, 222, 218, 242, 62, 149, 162, 58, 23, 181, 24, 160, 94, 97, 193, }, { 27, 150, 83, 169, 66, 2, 189, 87, 248, 54, 97, 89, 42, 165, 120, 82, }, { 144, 44, 150, 191, 102, 161, 127, 23, 136, 227, 244, 246, 226, 255, 197, 39, }, { 164, 93, 131, 11, 18, 176, 97, 32, 56, 139, 171, 182, 100, 45, 191, 219, }, { 104, 226, 42, 171, 232, 34, 60, 110, 163, 208, 190, 128, 207, 103, 244, 59, }, { 87, 127, 189, 93, 82, 153, 238, 76, 121, 174, 226, 5, 60, 141, 44, 16, }, { 253, 126, 161, 173, 213, 66, 124, 37, 78, 57, 28, 40, 35, 226, 163, 128, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 53, 62, 173, 71, 12, 250, 172, 154, 16, 106, 240, 57, 239, 30, 63, 208, }, { 75, 199, 64, 104, 187, 79, 203, 222, 103, 150, 72, 240, 202, 9, 76, 134, }, { 71, 5, 108, 182, 222, 49, 159, 14, 235, 142, 128, 153, 99, 16, 246, 149, }, { 162, 60, 149, 100, 193, 143, 75, 72, 126, 135, 207, 99, 209, 192, 226, 51, }, { 131, 135, 76, 130, 98, 247, 27, 97, 57, 197, 164, 225, 6, 245, 208, 214, }, { 124, 103, 94, 10, 71, 160, 192, 221, 244, 248, 37, 59, 247, 76, 249, 14, }, { 210, 153, 231, 176, 227, 81, 223, 69, 6, 103, 34, 49, 143, 149, 161, 46, }, { 19, 171, 218, 61, 4, 86, 100, 118, 177, 38, 80, 23, 228, 10, 21, 241, }, { 126, 249, 237, 47, 183, 181, 103, 68, 119, 252, 184, 201, 37, 23, 115, 86, }, { 62, 210, 47, 5, 194, 80, 96, 143, 122, 124, 243, 252, 154, 38, 157, 7, }, { 122, 6, 72, 101, 148, 159, 234, 181, 178, 244, 65, 238, 66, 161, 164, 230, }, { 132, 169, 226, 30, 201, 35, 131, 164, 223, 203, 111, 77, 218, 212, 200, 18, }, { 22, 27, 199, 132, 95, 151, 91, 42, 212, 44, 6, 73, 234, 112, 135, 109, }, { 209, 72, 236, 102, 107, 175, 202, 113, 37, 97, 16, 186, 52, 2, 110, 90, }, { 177, 151, 79, 89, 197, 217, 47, 62, 207, 161, 159, 116, 53, 202, 247, 194, }, { 12, 194, 44, 222, 101, 126, 84, 208, 140, 24, 200, 105, 169, 25, 186, 19, }, { 41, 134, 80, 114, 229, 44, 137, 8, 14, 82, 90, 204, 25, 154, 95, 70, }, { 6, 97, 22, 111, 211, 63, 42, 104, 70, 12, 100, 213, 181, 237, 93, 232, }, { 44, 54, 77, 203, 190, 237, 182, 84, 107, 88, 12, 146, 23, 224, 205, 218, }, { 42, 87, 91, 164, 109, 210, 156, 60, 45, 84, 104, 71, 162, 13, 144, 50, }, { 205, 240, 17, 83, 130, 121, 239, 227, 59, 89, 186, 79, 194, 134, 14, 204, }, { 7, 46, 174, 156, 171, 212, 152, 197, 230, 14, 203, 172, 220, 33, 24, 196, }, { 16, 122, 209, 235, 140, 168, 113, 66, 146, 32, 98, 156, 95, 157, 218, 133, }, { 8, 61, 137, 148, 70, 84, 217, 33, 73, 16, 49, 78, 206, 175, 109, 163, }, { 249, 129, 4, 231, 246, 104, 241, 212, 139, 49, 229, 15, 68, 84, 116, 48, }, { 17, 53, 105, 24, 244, 67, 195, 239, 50, 34, 205, 229, 54, 81, 159, 169, }, { 40, 201, 232, 129, 157, 199, 59, 165, 174, 80, 245, 181, 112, 86, 26, 106, }, { 235, 101, 102, 41, 138, 213, 39, 15, 154, 21, 26, 97, 201, 146, 36, 237, }, { 135, 120, 233, 200, 65, 221, 150, 144, 252, 205, 93, 198, 97, 67, 7, 102, }, { 241, 188, 141, 115, 176, 60, 40, 245, 194, 33, 212, 65, 138, 251, 25, 147, }, { 198, 28, 147, 17, 76, 211, 35, 246, 81, 79, 185, 138, 183, 190, 172, 27, }, { 181, 104, 234, 19, 230, 243, 162, 207, 10, 169, 102, 83, 82, 124, 32, 114, }, { 111, 204, 132, 55, 67, 246, 164, 171, 69, 222, 117, 44, 19, 70, 236, 255, }, { 204, 191, 169, 160, 250, 146, 93, 78, 155, 91, 21, 54, 171, 74, 75, 224, }, { 52, 113, 21, 180, 116, 17, 30, 55, 176, 104, 95, 64, 134, 210, 122, 252, }, { 28, 184, 253, 53, 233, 214, 37, 146, 30, 56, 170, 245, 246, 132, 96, 150, }, { 77, 166, 86, 7, 104, 112, 225, 182, 33, 154, 44, 37, 127, 228, 17, 110, }, { 243, 34, 62, 86, 64, 41, 143, 108, 65, 37, 73, 179, 88, 160, 147, 203, }, { 150, 77, 128, 208, 181, 158, 85, 127, 206, 239, 144, 35, 87, 18, 152, 207, }, { 5, 176, 29, 185, 91, 193, 63, 92, 101, 10, 86, 94, 14, 122, 146, 156, }, { 97, 144, 27, 204, 214, 157, 87, 226, 74, 194, 32, 183, 104, 4, 220, 180, }, { 89, 35, 34, 166, 199, 242, 29, 5, 118, 178, 183, 158, 71, 207, 28, 91, }, { 134, 55, 81, 59, 57, 54, 36, 61, 92, 207, 242, 191, 8, 143, 66, 74, }, { 136, 107, 206, 192, 172, 93, 215, 116, 83, 211, 167, 36, 115, 205, 114, 1, }, { 179, 9, 252, 124, 53, 204, 136, 167, 76, 165, 2, 134, 231, 145, 125, 154, }, { 137, 36, 118, 51, 212, 182, 101, 217, 243, 209, 8, 93, 26, 1, 55, 45, }, { 252, 49, 25, 94, 173, 169, 206, 136, 238, 59, 179, 81, 74, 46, 230, 172, }, { 171, 78, 164, 3, 255, 48, 32, 196, 151, 149, 81, 84, 118, 163, 202, 188, }, { 83, 128, 24, 23, 113, 179, 99, 189, 188, 166, 27, 34, 91, 59, 251, 160, }, { 180, 39, 82, 224, 158, 24, 16, 98, 170, 171, 201, 42, 59, 176, 101, 94, }, { 227, 88, 239, 189, 204, 129, 254, 46, 211, 5, 43, 47, 7, 61, 73, 78, }, { 206, 33, 26, 133, 10, 135, 250, 215, 24, 95, 136, 196, 121, 17, 193, 184, }, { 82, 207, 160, 228, 9, 88, 209, 16, 28, 164, 180, 91, 50, 247, 190, 140, }, { 140, 148, 107, 138, 143, 119, 90, 133, 150, 219, 94, 3, 20, 123, 165, 177, }, { 58, 45, 138, 79, 225, 122, 237, 126, 191, 116, 10, 219, 253, 144, 74, 183, }, { 202, 222, 191, 207, 41, 173, 119, 38, 221, 87, 113, 227, 30, 167, 22, 8, }, { 84, 174, 182, 139, 218, 103, 251, 120, 90, 168, 208, 142, 135, 26, 227, 100, }, { 167, 140, 136, 221, 154, 78, 116, 20, 27, 141, 153, 61, 223, 186, 112, 175, }, { 153, 94, 167, 216, 88, 30, 20, 155, 97, 241, 106, 193, 69, 156, 237, 168, }, { 10, 163, 58, 177, 182, 65, 126, 184, 202, 20, 172, 188, 28, 244, 231, 251, }, { 64, 43, 194, 42, 117, 229, 7, 203, 13, 128, 75, 53, 191, 49, 238, 81, }, { 2, 158, 179, 37, 240, 21, 167, 153, 131, 4, 157, 242, 210, 91, 138, 88, }, { 91, 189, 145, 131, 55, 231, 186, 156, 245, 182, 42, 108, 149, 148, 150, 3, }, { 188, 26, 219, 116, 216, 76, 201, 67, 227, 187, 248, 100, 245, 31, 8, 253, }, { 120, 152, 251, 64, 100, 138, 77, 44, 49, 240, 220, 28, 144, 250, 46, 190, }, { 121, 215, 67, 179, 28, 97, 255, 129, 145, 242, 115, 101, 249, 54, 107, 146, }, { 245, 67, 40, 57, 147, 22, 165, 4, 7, 41, 45, 102, 237, 77, 206, 35, }, { 169, 208, 23, 38, 15, 37, 135, 93, 20, 145, 204, 166, 164, 248, 64, 228, }, { 236, 75, 200, 181, 33, 1, 191, 202, 124, 27, 209, 205, 21, 179, 60, 41, }, { 125, 40, 230, 249, 63, 75, 114, 112, 84, 250, 138, 66, 158, 128, 188, 34, }, { 69, 155, 223, 147, 46, 36, 56, 151, 104, 138, 29, 107, 177, 75, 124, 205, }, { 60, 76, 156, 32, 50, 69, 199, 22, 249, 120, 110, 14, 72, 125, 23, 95, }, { 101, 111, 190, 134, 245, 183, 218, 19, 143, 202, 217, 144, 15, 178, 11, 4, }, { 1, 79, 184, 243, 120, 235, 178, 173, 160, 2, 175, 121, 105, 204, 69, 44, }, { 36, 11, 196, 95, 248, 185, 111, 117, 34, 72, 61, 220, 217, 79, 160, 121, }, { 95, 66, 52, 201, 20, 205, 55, 109, 48, 190, 211, 75, 242, 34, 65, 179, }, { 127, 182, 85, 220, 207, 94, 213, 233, 215, 254, 23, 176, 76, 219, 54, 122, }, { 32, 244, 97, 21, 219, 147, 226, 132, 231, 64, 196, 251, 190, 249, 119, 201, }, { 174, 254, 185, 186, 164, 241, 31, 152, 242, 159, 7, 10, 120, 217, 88, 32, }, { 94, 13, 140, 58, 108, 38, 133, 192, 144, 188, 124, 50, 155, 238, 4, 159, }, { 175, 177, 1, 73, 220, 26, 173, 53, 82, 157, 168, 115, 17, 21, 29, 12, }, { 208, 7, 84, 149, 19, 68, 120, 220, 133, 99, 191, 195, 93, 206, 43, 118, }, { 178, 70, 68, 143, 77, 39, 58, 10, 236, 167, 173, 255, 142, 93, 56, 182, }, { 143, 69, 96, 92, 7, 137, 79, 177, 181, 221, 108, 136, 175, 236, 106, 197, }, { 39, 218, 207, 137, 112, 71, 122, 65, 1, 78, 15, 87, 98, 216, 111, 13, }, { 141, 219, 211, 121, 247, 156, 232, 40, 54, 217, 241, 122, 125, 183, 224, 157, }, { 76, 233, 238, 244, 16, 155, 83, 27, 129, 152, 131, 92, 22, 40, 84, 66, }, { 212, 248, 241, 223, 48, 110, 245, 45, 64, 107, 70, 228, 58, 120, 252, 198, }, { 250, 80, 15, 49, 126, 150, 228, 224, 168, 55, 215, 132, 255, 195, 187, 68, }, { 242, 109, 134, 165, 56, 194, 61, 193, 225, 39, 230, 202, 49, 108, 214, 231, }, }, { { 47, 54, 88, 234, 162, 12, 37, 207, 124, 217, 158, 73, 146, 211, 80, 54, }, { 72, 51, 214, 58, 126, 140, 130, 184, 244, 108, 135, 228, 11, 166, 159, 51, }, { 92, 156, 233, 118, 101, 162, 175, 217, 1, 114, 10, 84, 168, 129, 148, 156, }, { 12, 101, 21, 133, 9, 26, 27, 158, 83, 10, 123, 209, 97, 29, 184, 101, }, { 59, 153, 103, 166, 185, 34, 8, 174, 137, 199, 19, 249, 49, 244, 91, 153, }, { 98, 94, 241, 195, 170, 106, 61, 254, 36, 83, 171, 129, 193, 12, 189, 94, }, { 231, 239, 108, 42, 60, 194, 68, 110, 103, 117, 112, 89, 178, 214, 81, 239, }, { 66, 133, 40, 28, 146, 155, 117, 105, 111, 99, 32, 188, 187, 84, 123, 133, }, { 97, 214, 101, 115, 57, 141, 75, 56, 64, 176, 197, 36, 72, 154, 147, 214, }, { 26, 58, 115, 168, 240, 142, 211, 123, 95, 23, 3, 167, 141, 222, 135, 58, }, { 249, 246, 173, 64, 203, 251, 158, 222, 9, 100, 90, 177, 161, 3, 190, 246, }, { 18, 124, 212, 239, 254, 35, 193, 46, 61, 27, 81, 57, 114, 200, 87, 124, }, { 128, 234, 226, 250, 224, 66, 227, 25, 239, 192, 105, 244, 43, 163, 158, 234, }, { 130, 26, 187, 155, 2, 248, 6, 157, 22, 195, 156, 50, 100, 71, 170, 26, }, { 37, 128, 166, 204, 78, 27, 210, 30, 231, 214, 57, 17, 34, 33, 180, 128, }, { 226, 180, 19, 57, 74, 40, 222, 231, 203, 147, 194, 117, 234, 175, 35, 180, }, { 6, 211, 235, 163, 229, 13, 236, 79, 200, 5, 220, 137, 209, 239, 92, 211, }, { 36, 248, 107, 29, 63, 70, 65, 92, 122, 54, 162, 114, 228, 83, 174, 248, }, { 64, 117, 113, 125, 112, 33, 144, 237, 150, 96, 213, 122, 244, 176, 79, 117, }, { 138, 92, 28, 220, 12, 85, 20, 200, 116, 207, 206, 172, 155, 81, 122, 92, }, { 213, 72, 97, 26, 250, 16, 205, 215, 17, 94, 170, 93, 186, 70, 192, 72, }, { 119, 137, 3, 94, 192, 25, 131, 221, 76, 173, 189, 82, 164, 89, 172, 137, }, { 108, 203, 189, 39, 65, 202, 195, 228, 142, 90, 37, 150, 239, 245, 49, 203, }, { 236, 33, 95, 221, 161, 136, 32, 253, 97, 154, 76, 98, 196, 86, 175, 33, }, { 218, 165, 224, 47, 96, 237, 160, 143, 38, 183, 191, 41, 82, 205, 86, 165, }, { 169, 15, 81, 179, 167, 67, 42, 153, 91, 28, 43, 52, 104, 159, 146, 15, }, { 216, 85, 185, 78, 130, 87, 69, 11, 223, 180, 74, 239, 29, 41, 98, 85, }, { 116, 1, 151, 238, 83, 254, 245, 27, 40, 78, 211, 247, 45, 207, 130, 1, }, { 177, 197, 123, 122, 181, 119, 28, 102, 253, 8, 221, 85, 170, 165, 33, 197, }, { 200, 217, 52, 192, 158, 206, 97, 161, 27, 172, 238, 16, 32, 5, 1, 217, }, { 133, 177, 157, 233, 150, 168, 121, 144, 67, 38, 219, 216, 115, 218, 236, 177, }, { 167, 154, 29, 87, 76, 227, 212, 131, 241, 21, 165, 35, 70, 102, 30, 154, }, { 146, 150, 54, 21, 30, 97, 34, 55, 210, 219, 56, 205, 89, 107, 201, 150, }, { 222, 134, 82, 237, 103, 90, 169, 68, 23, 177, 150, 102, 204, 198, 62, 134, }, { 67, 253, 229, 205, 227, 198, 230, 43, 242, 131, 187, 223, 125, 38, 97, 253, }, { 56, 17, 243, 22, 42, 197, 126, 104, 237, 36, 125, 92, 184, 98, 117, 17, }, { 39, 112, 255, 173, 172, 161, 55, 154, 30, 213, 204, 215, 109, 197, 128, 112, }, { 238, 209, 6, 188, 67, 50, 197, 121, 152, 153, 185, 164, 139, 178, 155, 209, }, { 208, 19, 30, 9, 140, 250, 87, 94, 189, 184, 24, 113, 226, 63, 178, 19, }, { 115, 170, 177, 156, 199, 174, 138, 22, 125, 171, 148, 29, 58, 82, 196, 170, }, { 178, 77, 239, 202, 38, 144, 106, 160, 153, 235, 179, 240, 35, 51, 15, 77, }, { 251, 6, 244, 33, 41, 65, 123, 90, 240, 103, 175, 119, 238, 231, 138, 6, }, { 16, 140, 141, 142, 28, 153, 36, 170, 196, 24, 164, 255, 61, 44, 99, 140, }, { 230, 151, 161, 251, 77, 159, 215, 44, 250, 149, 235, 58, 116, 164, 75, 151, }, { 11, 206, 51, 247, 157, 74, 100, 147, 6, 239, 60, 59, 118, 128, 254, 206, }, { 152, 32, 200, 51, 242, 118, 213, 230, 73, 212, 159, 149, 233, 153, 45, 32, }, { 182, 110, 93, 8, 33, 39, 99, 107, 168, 237, 154, 191, 189, 56, 103, 110, }, { 17, 244, 64, 95, 109, 196, 183, 232, 89, 248, 63, 156, 251, 94, 121, 244, }, { 189, 160, 110, 255, 188, 109, 7, 248, 174, 2, 166, 132, 203, 184, 153, 160, }, { 15, 237, 129, 53, 154, 253, 109, 88, 55, 233, 21, 116, 232, 139, 150, 237, }, { 243, 64, 83, 102, 39, 236, 105, 15, 146, 107, 253, 233, 17, 241, 90, 64, }, { 93, 228, 36, 167, 20, 255, 60, 155, 156, 146, 145, 55, 110, 243, 142, 228, }, { 191, 80, 55, 158, 94, 215, 226, 124, 87, 1, 83, 66, 132, 92, 173, 80, }, { 71, 222, 87, 15, 228, 113, 239, 224, 195, 133, 146, 144, 227, 45, 9, 222, }, { 46, 78, 149, 59, 211, 81, 182, 141, 225, 57, 5, 42, 84, 161, 74, 78, }, { 193, 231, 94, 86, 225, 62, 224, 182, 228, 64, 39, 237, 25, 97, 203, 231, }, { 214, 192, 245, 170, 105, 247, 187, 17, 117, 189, 196, 248, 51, 208, 238, 192, }, { 33, 163, 20, 14, 73, 172, 219, 213, 214, 208, 16, 94, 188, 42, 220, 163, }, { 35, 83, 77, 111, 171, 22, 62, 81, 47, 211, 229, 152, 243, 206, 232, 83, }, { 244, 235, 117, 20, 179, 188, 22, 2, 199, 142, 186, 3, 6, 108, 28, 235, }, { 110, 59, 228, 70, 163, 112, 38, 96, 119, 89, 208, 80, 160, 17, 5, 59, }, { 142, 127, 174, 30, 11, 226, 29, 3, 69, 201, 231, 227, 5, 90, 18, 127, }, { 192, 159, 147, 135, 144, 99, 115, 244, 121, 160, 188, 142, 223, 19, 209, 159, }, { 144, 102, 111, 116, 252, 219, 199, 179, 43, 216, 205, 11, 22, 143, 253, 102, }, { 245, 147, 184, 197, 194, 225, 133, 64, 90, 110, 33, 96, 192, 30, 6, 147, }, { 90, 79, 2, 213, 128, 175, 67, 150, 201, 119, 214, 221, 121, 110, 200, 79, }, { 132, 201, 80, 56, 231, 245, 234, 210, 222, 198, 64, 187, 181, 168, 246, 201, }, { 25, 178, 231, 24, 99, 105, 165, 189, 59, 244, 109, 2, 4, 72, 169, 178, }, { 109, 179, 112, 246, 48, 151, 80, 166, 19, 186, 190, 245, 41, 135, 43, 179, }, { 117, 121, 90, 63, 34, 163, 102, 89, 181, 174, 72, 148, 235, 189, 152, 121, }, { 95, 20, 125, 198, 246, 69, 217, 31, 101, 145, 100, 241, 33, 23, 186, 20, }, { 224, 68, 74, 88, 168, 146, 59, 99, 50, 144, 55, 179, 165, 75, 23, 68, }, { 179, 53, 34, 27, 87, 205, 249, 226, 4, 11, 40, 147, 229, 65, 21, 53, }, { 82, 9, 165, 146, 142, 2, 81, 195, 171, 123, 132, 67, 134, 120, 24, 9, }, { 180, 158, 4, 105, 195, 157, 134, 239, 81, 238, 111, 121, 242, 220, 83, 158, }, { 50, 167, 13, 48, 198, 210, 137, 185, 118, 43, 218, 4, 8, 144, 145, 167, }, { 183, 22, 144, 217, 80, 122, 240, 41, 53, 13, 1, 220, 123, 74, 125, 22, }, { 198, 76, 120, 36, 117, 110, 159, 187, 177, 165, 96, 7, 14, 252, 141, 76, }, { 163, 185, 175, 149, 75, 84, 221, 72, 192, 19, 140, 108, 216, 109, 118, 185, }, { 80, 249, 252, 243, 108, 184, 180, 71, 82, 120, 113, 133, 201, 156, 44, 249, }, { 232, 2, 237, 31, 166, 63, 41, 54, 80, 156, 101, 45, 90, 93, 199, 2, }, { 106, 24, 86, 132, 164, 199, 47, 171, 70, 95, 249, 31, 62, 26, 109, 24, }, { 156, 3, 122, 241, 245, 193, 220, 45, 120, 210, 182, 218, 119, 146, 69, 3, }, { 87, 82, 218, 129, 248, 232, 203, 74, 7, 157, 54, 111, 222, 1, 106, 82, }, { 74, 195, 143, 91, 156, 54, 103, 60, 13, 111, 114, 34, 68, 66, 171, 195, }, { 111, 67, 41, 151, 210, 45, 181, 34, 234, 185, 75, 51, 102, 99, 31, 67, }, { 188, 216, 163, 46, 205, 48, 148, 186, 51, 226, 61, 231, 13, 202, 131, 216, }, { 103, 5, 142, 208, 220, 128, 167, 119, 136, 181, 25, 173, 153, 117, 207, 5, }, { 81, 129, 49, 34, 29, 229, 39, 5, 207, 152, 234, 230, 15, 238, 54, 129, }, { 153, 88, 5, 226, 131, 43, 70, 164, 212, 52, 4, 246, 47, 235, 55, 88, }, { 255, 37, 70, 227, 46, 246, 114, 145, 193, 97, 134, 56, 112, 236, 226, 37, }, { 91, 55, 207, 4, 241, 242, 208, 212, 84, 151, 77, 190, 191, 28, 210, 55, }, { 209, 107, 211, 216, 253, 167, 196, 28, 32, 88, 131, 18, 36, 77, 168, 107, }, { 27, 66, 190, 121, 129, 211, 64, 57, 194, 247, 152, 196, 75, 172, 157, 66, }, { 118, 241, 206, 143, 177, 68, 16, 159, 209, 77, 38, 49, 98, 43, 182, 241, }, { 100, 141, 26, 96, 79, 103, 209, 177, 236, 86, 119, 8, 16, 227, 225, 141, }, { 41, 229, 179, 73, 71, 1, 201, 128, 180, 220, 66, 192, 67, 60, 12, 229, }, { 89, 199, 150, 101, 19, 72, 53, 80, 173, 148, 184, 120, 240, 248, 230, 199, }, { 104, 232, 15, 229, 70, 125, 202, 47, 191, 92, 12, 217, 113, 254, 89, 232, }, { 57, 105, 62, 199, 91, 152, 237, 42, 112, 196, 230, 63, 126, 16, 111, 105, }, { 148, 69, 221, 182, 251, 108, 206, 120, 26, 222, 228, 68, 136, 132, 149, 69, }, { 75, 187, 66, 138, 237, 107, 244, 126, 144, 143, 233, 65, 130, 48, 177, 187, }, { 7, 171, 38, 114, 148, 80, 127, 13, 85, 229, 71, 234, 23, 157, 70, 171, }, { 113, 90, 232, 253, 37, 20, 111, 146, 132, 168, 97, 219, 117, 182, 240, 90, }, { 43, 21, 234, 40, 165, 187, 44, 4, 77, 223, 183, 6, 12, 216, 56, 21, }, { 38, 8, 50, 124, 221, 252, 164, 216, 131, 53, 87, 180, 171, 183, 154, 8, }, { 32, 219, 217, 223, 56, 241, 72, 151, 75, 48, 139, 61, 122, 88, 198, 219, }, { 250, 126, 57, 240, 88, 28, 232, 24, 109, 135, 52, 20, 40, 149, 144, 126, }, { 73, 75, 27, 235, 15, 209, 17, 250, 105, 140, 28, 135, 205, 212, 133, 75, }, { 34, 43, 128, 190, 218, 75, 173, 19, 178, 51, 126, 251, 53, 188, 242, 43, }, { 166, 226, 208, 134, 61, 190, 71, 193, 108, 245, 62, 64, 128, 20, 4, 226, }, { 205, 130, 75, 211, 232, 36, 251, 40, 183, 74, 92, 60, 120, 124, 115, 130, }, { 140, 143, 247, 127, 233, 88, 248, 135, 188, 202, 18, 37, 74, 190, 38, 143, }, { 215, 184, 56, 123, 24, 170, 40, 83, 232, 93, 95, 155, 245, 162, 244, 184, }, { 70, 166, 154, 222, 149, 44, 124, 162, 94, 101, 9, 243, 37, 95, 19, 166, }, { 136, 172, 69, 189, 238, 239, 241, 76, 141, 204, 59, 106, 212, 181, 78, 172, }, { 68, 86, 195, 191, 119, 150, 153, 38, 167, 102, 252, 53, 106, 187, 39, 86, }, { 194, 111, 202, 230, 114, 217, 150, 112, 128, 163, 73, 72, 144, 247, 229, 111, }, { 147, 238, 251, 196, 111, 60, 177, 117, 79, 59, 163, 174, 159, 25, 211, 238, }, { 246, 27, 44, 117, 81, 6, 243, 134, 62, 141, 79, 197, 73, 136, 40, 27, }, { 9, 62, 106, 150, 127, 240, 129, 23, 255, 236, 201, 253, 57, 100, 202, 62, }, { 164, 18, 137, 231, 223, 4, 162, 69, 149, 246, 203, 134, 207, 240, 48, 18, }, { 233, 122, 32, 206, 215, 98, 186, 116, 205, 124, 254, 78, 156, 47, 221, 122, }, { 42, 109, 39, 249, 212, 230, 191, 70, 208, 63, 44, 101, 202, 170, 34, 109, }, { 84, 218, 78, 49, 107, 15, 189, 140, 99, 126, 88, 202, 87, 151, 68, 218, }, { 162, 193, 98, 68, 58, 9, 78, 10, 93, 243, 23, 15, 30, 31, 108, 193, }, { 247, 99, 225, 164, 32, 91, 96, 196, 163, 109, 212, 166, 143, 250, 50, 99, }, { 207, 114, 18, 178, 10, 158, 30, 172, 78, 73, 169, 250, 55, 152, 71, 114, }, { 175, 220, 186, 16, 66, 78, 198, 214, 147, 25, 247, 189, 185, 112, 206, 220, }, { 253, 213, 31, 130, 204, 76, 151, 21, 56, 98, 115, 254, 63, 8, 214, 213, }, { 206, 10, 223, 99, 123, 195, 141, 238, 211, 169, 50, 153, 241, 234, 93, 10, }, { 19, 4, 25, 62, 143, 126, 82, 108, 160, 251, 202, 90, 180, 186, 77, 4, }, { 227, 204, 222, 232, 59, 117, 77, 165, 86, 115, 89, 22, 44, 221, 57, 204, }, { 139, 36, 209, 13, 125, 8, 135, 138, 233, 47, 85, 207, 93, 35, 96, 36, }, { 126, 183, 105, 200, 191, 233, 2, 202, 179, 65, 116, 175, 157, 61, 102, 183, }, { 237, 89, 146, 12, 208, 213, 179, 191, 252, 122, 215, 1, 2, 36, 181, 89, }, { 229, 31, 53, 75, 222, 120, 161, 234, 158, 118, 133, 159, 253, 50, 101, 31, }, { 184, 251, 17, 236, 202, 135, 157, 113, 2, 228, 20, 168, 147, 193, 235, 251, }, { 125, 63, 253, 120, 44, 14, 116, 12, 215, 162, 26, 10, 20, 171, 72, 63, }, { 150, 181, 132, 215, 25, 214, 43, 252, 227, 221, 17, 130, 199, 96, 161, 181, }, { 5, 91, 127, 19, 118, 234, 154, 137, 172, 230, 178, 44, 88, 121, 114, 91, }, { 24, 202, 42, 201, 18, 52, 54, 255, 166, 20, 246, 97, 194, 58, 179, 202, }, { 135, 65, 196, 136, 116, 18, 156, 20, 186, 37, 46, 30, 60, 62, 216, 65, }, { 107, 96, 155, 85, 213, 154, 188, 233, 219, 191, 98, 124, 248, 104, 119, 96, }, { 212, 48, 172, 203, 139, 77, 94, 149, 140, 190, 49, 62, 124, 52, 218, 48, }, { 4, 35, 178, 194, 7, 183, 9, 203, 49, 6, 41, 79, 158, 11, 104, 35, }, { 187, 115, 133, 92, 89, 96, 235, 183, 102, 7, 122, 13, 26, 87, 197, 115, }, { 55, 252, 114, 35, 176, 56, 19, 48, 218, 205, 104, 40, 80, 233, 227, 252, }, { 211, 155, 138, 185, 31, 29, 33, 152, 217, 91, 118, 212, 107, 169, 156, 155, }, { 155, 168, 92, 131, 97, 145, 163, 32, 45, 55, 241, 48, 96, 15, 3, 168, }, { 85, 162, 131, 224, 26, 82, 46, 206, 254, 158, 195, 169, 145, 229, 94, 162, }, { 58, 225, 170, 119, 200, 127, 155, 236, 20, 39, 136, 154, 247, 134, 65, 225, }, { 196, 188, 33, 69, 151, 212, 122, 63, 72, 166, 149, 193, 65, 24, 185, 188, }, { 158, 243, 35, 144, 23, 123, 57, 169, 129, 209, 67, 28, 56, 118, 113, 243, }, { 161, 73, 246, 244, 169, 238, 56, 204, 57, 16, 121, 170, 151, 137, 66, 73, }, { 129, 146, 47, 43, 145, 31, 112, 91, 114, 32, 242, 151, 237, 209, 132, 146, }, { 137, 212, 136, 108, 159, 178, 98, 14, 16, 44, 160, 9, 18, 199, 84, 212, }, { 20, 175, 63, 76, 27, 46, 45, 97, 245, 30, 141, 176, 163, 39, 11, 175, }, { 185, 131, 220, 61, 187, 218, 14, 51, 159, 4, 143, 203, 85, 179, 241, 131, }, { 172, 84, 46, 160, 209, 169, 176, 16, 247, 250, 153, 24, 48, 230, 224, 84, }, { 143, 7, 99, 207, 122, 191, 142, 65, 216, 41, 124, 128, 195, 40, 8, 7, }, { 240, 200, 199, 214, 180, 11, 31, 201, 246, 136, 147, 76, 152, 103, 116, 200, }, { 254, 93, 139, 50, 95, 171, 225, 211, 92, 129, 29, 91, 182, 158, 248, 93, }, { 1, 120, 205, 209, 113, 93, 147, 66, 157, 224, 155, 99, 198, 114, 26, 120, }, { 8, 70, 167, 71, 14, 173, 18, 85, 98, 12, 82, 158, 255, 22, 208, 70, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 13, 29, 216, 84, 120, 71, 136, 220, 206, 234, 224, 178, 167, 111, 162, 29, }, { 48, 87, 84, 81, 36, 104, 108, 61, 143, 40, 47, 194, 71, 116, 165, 87, }, { 45, 198, 1, 139, 64, 182, 192, 75, 133, 218, 107, 143, 221, 55, 100, 198, }, { 31, 97, 12, 187, 134, 100, 73, 242, 243, 241, 177, 139, 213, 167, 245, 97, }, { 53, 12, 43, 66, 82, 130, 246, 180, 35, 206, 157, 238, 31, 13, 215, 12, }, { 217, 45, 116, 159, 243, 10, 214, 73, 66, 84, 209, 140, 219, 91, 120, 45, }, { 219, 221, 45, 254, 17, 176, 51, 205, 187, 87, 36, 74, 148, 191, 76, 221, }, { 186, 11, 72, 141, 40, 61, 120, 245, 251, 231, 225, 110, 220, 37, 223, 11, }, { 61, 74, 140, 5, 92, 47, 228, 225, 65, 194, 207, 112, 224, 27, 7, 74, }, { 141, 247, 58, 174, 152, 5, 107, 197, 33, 42, 137, 70, 140, 204, 60, 247, }, { 54, 132, 191, 242, 193, 101, 128, 114, 71, 45, 243, 75, 150, 155, 249, 132, }, { 168, 119, 156, 98, 214, 30, 185, 219, 198, 252, 176, 87, 174, 237, 136, 119, }, { 195, 23, 7, 55, 3, 132, 5, 50, 29, 67, 210, 43, 86, 133, 255, 23, }, { 77, 104, 169, 41, 8, 102, 24, 49, 88, 138, 53, 200, 83, 223, 237, 104, }, { 165, 106, 68, 54, 174, 89, 49, 7, 8, 22, 80, 229, 9, 130, 42, 106, }, { 29, 145, 85, 218, 100, 222, 172, 118, 10, 242, 68, 77, 154, 67, 193, 145, }, { 60, 50, 65, 212, 45, 114, 119, 163, 220, 34, 84, 19, 38, 105, 29, 50, }, { 239, 169, 203, 109, 50, 111, 86, 59, 5, 121, 34, 199, 77, 192, 129, 169, }, { 69, 46, 14, 110, 6, 203, 10, 100, 58, 134, 103, 86, 172, 201, 61, 46, }, { 170, 135, 197, 3, 52, 164, 92, 95, 63, 255, 69, 145, 225, 9, 188, 135, }, { 124, 71, 48, 169, 93, 83, 231, 78, 74, 66, 129, 105, 210, 217, 82, 71, }, { 157, 123, 183, 32, 132, 156, 79, 111, 229, 50, 45, 185, 177, 224, 95, 123, }, { 44, 190, 204, 90, 49, 235, 83, 9, 24, 58, 240, 236, 27, 69, 126, 190, }, { 22, 95, 102, 45, 249, 148, 200, 229, 12, 29, 120, 118, 236, 195, 63, 95, }, { 3, 136, 148, 176, 147, 231, 118, 198, 100, 227, 110, 165, 137, 150, 46, 136, }, { 94, 108, 176, 23, 135, 24, 74, 93, 248, 113, 255, 146, 231, 101, 160, 108, }, { 78, 224, 61, 153, 155, 129, 110, 247, 60, 105, 91, 109, 218, 73, 195, 224, }, { 203, 81, 160, 112, 13, 41, 23, 103, 127, 79, 128, 181, 169, 147, 47, 81, }, { 62, 194, 24, 181, 207, 200, 146, 39, 37, 33, 161, 213, 105, 141, 41, 194, }, { 21, 215, 242, 157, 106, 115, 190, 35, 104, 254, 22, 211, 101, 85, 17, 215, }, { 252, 173, 210, 83, 189, 17, 4, 87, 165, 130, 232, 157, 249, 122, 204, 173, }, { 174, 164, 119, 193, 51, 19, 85, 148, 14, 249, 108, 222, 127, 2, 212, 164, }, { 99, 38, 60, 18, 219, 55, 174, 188, 185, 179, 48, 226, 7, 126, 167, 38, }, { 14, 149, 76, 228, 235, 160, 254, 26, 170, 9, 142, 23, 46, 249, 140, 149, }, { 127, 207, 164, 25, 206, 180, 145, 136, 46, 161, 239, 204, 91, 79, 124, 207, }, { 49, 47, 153, 128, 85, 53, 255, 127, 18, 200, 180, 161, 129, 6, 191, 47, }, { 223, 254, 159, 60, 22, 7, 58, 6, 138, 81, 13, 5, 10, 180, 36, 254, }, { 241, 176, 10, 7, 197, 86, 140, 139, 107, 104, 8, 47, 94, 21, 110, 176, }, { 96, 174, 168, 162, 72, 208, 216, 122, 221, 80, 94, 71, 142, 232, 137, 174, }, { 121, 28, 79, 186, 43, 185, 125, 199, 230, 164, 51, 69, 138, 160, 32, 28, }, { 154, 208, 145, 82, 16, 204, 48, 98, 176, 215, 106, 83, 166, 125, 25, 208, }, { 248, 142, 96, 145, 186, 166, 13, 156, 148, 132, 193, 210, 103, 113, 164, 142, }, { 76, 16, 100, 248, 121, 59, 139, 115, 197, 106, 174, 171, 149, 173, 247, 16, }, { 181, 230, 201, 184, 178, 192, 21, 173, 204, 14, 244, 26, 52, 174, 73, 230, }, { 65, 13, 188, 172, 1, 124, 3, 175, 11, 128, 78, 25, 50, 194, 85, 13, }, { 199, 52, 181, 245, 4, 51, 12, 249, 44, 69, 251, 100, 200, 142, 151, 52, }, { 122, 148, 219, 10, 184, 94, 11, 1, 130, 71, 93, 224, 3, 54, 14, 148, }, { 123, 236, 22, 219, 201, 3, 152, 67, 31, 167, 198, 131, 197, 68, 20, 236, }, { 10, 182, 254, 38, 236, 23, 247, 209, 155, 15, 167, 88, 176, 242, 228, 182, }, { 220, 118, 11, 140, 133, 224, 76, 192, 238, 178, 99, 160, 131, 34, 10, 118, }, { 221, 14, 198, 93, 244, 189, 223, 130, 115, 82, 248, 195, 69, 80, 16, 14, }, { 234, 242, 180, 126, 68, 133, 204, 178, 169, 159, 144, 235, 21, 185, 243, 242, }, { 120, 100, 130, 107, 90, 228, 238, 133, 123, 68, 168, 38, 76, 210, 58, 100, }, { 190, 40, 250, 79, 47, 138, 113, 62, 202, 225, 200, 33, 66, 46, 183, 40, }, { 134, 57, 9, 89, 5, 79, 15, 86, 39, 197, 181, 125, 250, 76, 194, 57, }, { 225, 60, 135, 137, 217, 207, 168, 33, 175, 112, 172, 208, 99, 57, 13, 60, }, { 151, 205, 73, 6, 104, 139, 184, 190, 126, 61, 138, 225, 1, 18, 187, 205, }, { 102, 125, 67, 1, 173, 221, 52, 53, 21, 85, 130, 206, 95, 7, 213, 125, }, { 235, 138, 121, 175, 53, 216, 95, 240, 52, 127, 11, 136, 211, 203, 233, 138, }, { 242, 56, 158, 183, 86, 177, 250, 77, 15, 139, 102, 138, 215, 131, 64, 56, }, { 176, 189, 182, 171, 196, 42, 143, 36, 96, 232, 70, 54, 108, 215, 59, 189, }, { 228, 103, 248, 154, 175, 37, 50, 168, 3, 150, 30, 252, 59, 64, 127, 103, }, { 28, 233, 152, 11, 21, 131, 63, 52, 151, 18, 223, 46, 92, 49, 219, 233, }, { 202, 41, 109, 161, 124, 116, 132, 37, 226, 175, 27, 214, 111, 225, 53, 41, }, { 210, 227, 71, 104, 110, 64, 178, 218, 68, 187, 237, 183, 173, 219, 134, 227, }, { 160, 49, 59, 37, 216, 179, 171, 142, 164, 240, 226, 201, 81, 251, 88, 49, }, { 30, 25, 193, 106, 247, 57, 218, 176, 110, 17, 42, 232, 19, 213, 239, 25, }, { 159, 139, 238, 65, 102, 38, 170, 235, 28, 49, 216, 127, 254, 4, 107, 139, }, { 86, 42, 23, 80, 137, 181, 88, 8, 154, 125, 173, 12, 24, 115, 112, 42, }, { 171, 255, 8, 210, 69, 249, 207, 29, 162, 31, 222, 242, 39, 123, 166, 255, }, { 201, 161, 249, 17, 239, 147, 242, 227, 134, 76, 117, 115, 230, 119, 27, 161, }, { 105, 144, 194, 52, 55, 32, 89, 109, 34, 188, 151, 186, 183, 140, 67, 144, }, { 145, 30, 162, 165, 141, 134, 84, 241, 182, 56, 86, 104, 208, 253, 231, 30, }, { 114, 210, 124, 77, 182, 243, 25, 84, 224, 75, 15, 126, 252, 32, 222, 210, }, { 83, 113, 104, 67, 255, 95, 194, 129, 54, 155, 31, 32, 64, 10, 2, 113, }, { 23, 39, 171, 252, 136, 201, 91, 167, 145, 253, 227, 21, 42, 177, 37, 39, }, { 79, 152, 240, 72, 234, 220, 253, 181, 161, 137, 192, 14, 28, 59, 217, 152, }, { 88, 191, 91, 180, 98, 21, 166, 18, 48, 116, 35, 27, 54, 138, 252, 191, }, { 2, 240, 89, 97, 226, 186, 229, 132, 249, 3, 245, 198, 79, 228, 52, 240, }, { 101, 245, 215, 177, 62, 58, 66, 243, 113, 182, 236, 107, 214, 145, 251, 245, }, { 112, 34, 37, 44, 84, 73, 252, 208, 25, 72, 250, 184, 179, 196, 234, 34, }, { 63, 186, 213, 100, 190, 149, 1, 101, 184, 193, 58, 182, 175, 255, 51, 186, }, { 51, 223, 192, 225, 183, 143, 26, 251, 235, 203, 65, 103, 206, 226, 139, 223, }, { 40, 157, 126, 152, 54, 92, 90, 194, 41, 60, 217, 163, 133, 78, 22, 157, }, { 197, 196, 236, 148, 230, 137, 233, 125, 213, 70, 14, 162, 135, 106, 163, 196, }, { 204, 250, 134, 2, 153, 121, 104, 106, 42, 170, 199, 95, 190, 14, 105, 250, }, { 173, 44, 227, 113, 160, 244, 35, 82, 106, 26, 2, 123, 246, 148, 250, 44, }, { 52, 116, 230, 147, 35, 223, 101, 246, 190, 46, 6, 141, 217, 127, 205, 116, }, { 149, 61, 16, 103, 138, 49, 93, 58, 135, 62, 127, 39, 78, 246, 143, 61, }, { 131, 98, 118, 74, 115, 165, 149, 223, 139, 35, 7, 81, 162, 53, 176, 98, }, }, { { 55, 249, 105, 27, 113, 24, 97, 205, 105, 25, 84, 214, 175, 203, 55, 82, }, { 147, 139, 3, 248, 216, 219, 74, 59, 3, 123, 90, 195, 82, 125, 147, 28, }, { 219, 69, 99, 78, 228, 135, 30, 87, 99, 192, 75, 25, 128, 6, 219, 26, }, { 56, 251, 32, 211, 20, 52, 141, 36, 32, 105, 15, 247, 78, 41, 56, 2, }, { 127, 55, 9, 173, 77, 68, 53, 161, 9, 162, 69, 12, 125, 176, 127, 84, }, { 182, 160, 114, 47, 166, 212, 62, 237, 114, 60, 155, 194, 40, 216, 182, 174, }, { 160, 129, 173, 150, 234, 71, 144, 240, 173, 8, 174, 102, 177, 145, 160, 207, }, { 183, 236, 51, 163, 198, 245, 96, 13, 51, 199, 179, 174, 59, 161, 183, 31, }, { 184, 238, 122, 107, 163, 217, 140, 228, 122, 183, 232, 143, 218, 67, 184, 79, }, { 197, 65, 241, 29, 46, 223, 5, 70, 241, 32, 253, 91, 129, 1, 197, 186, }, { 204, 40, 253, 123, 200, 53, 238, 170, 253, 15, 86, 209, 10, 54, 204, 202, }, { 84, 82, 112, 62, 54, 70, 243, 126, 112, 110, 247, 64, 245, 142, 84, 7, }, { 4, 243, 199, 117, 67, 132, 187, 6, 199, 106, 160, 115, 76, 39, 4, 129, }, { 177, 135, 118, 13, 69, 51, 103, 8, 118, 152, 67, 5, 81, 116, 177, 63, }, { 19, 158, 89, 64, 111, 54, 75, 251, 89, 165, 189, 187, 198, 23, 19, 81, }, { 178, 83, 181, 90, 229, 80, 133, 235, 181, 86, 59, 177, 100, 255, 178, 47, }, { 28, 156, 16, 136, 10, 26, 167, 18, 16, 213, 230, 154, 39, 245, 28, 1, }, { 168, 164, 224, 124, 108, 140, 37, 252, 224, 220, 45, 128, 41, 223, 168, 14, }, { 2, 152, 130, 219, 192, 66, 188, 3, 130, 53, 80, 216, 38, 242, 2, 161, }, { 32, 148, 247, 46, 93, 170, 145, 48, 247, 214, 73, 30, 37, 251, 32, 130, }, { 245, 159, 156, 36, 188, 32, 61, 110, 156, 157, 113, 74, 87, 102, 245, 121, }, { 69, 84, 171, 165, 153, 50, 4, 134, 171, 254, 26, 35, 21, 107, 69, 247, }, { 59, 47, 227, 132, 180, 87, 111, 199, 227, 167, 119, 67, 123, 162, 59, 18, }, { 63, 220, 36, 241, 247, 211, 212, 193, 36, 205, 215, 48, 55, 133, 63, 147, }, { 195, 42, 180, 179, 173, 25, 2, 67, 180, 127, 13, 240, 235, 212, 195, 154, }, { 47, 150, 190, 230, 56, 134, 125, 217, 190, 166, 18, 63, 196, 25, 47, 210, }, { 118, 94, 5, 203, 171, 174, 222, 77, 5, 141, 238, 134, 246, 135, 118, 36, }, { 75, 26, 163, 225, 156, 63, 182, 143, 163, 117, 105, 110, 231, 240, 75, 22, }, { 95, 163, 254, 131, 16, 238, 164, 145, 254, 116, 12, 18, 88, 75, 95, 214, }, { 151, 120, 196, 141, 155, 95, 241, 61, 196, 17, 250, 176, 30, 90, 151, 157, }, { 22, 33, 223, 185, 76, 147, 174, 29, 223, 52, 53, 164, 153, 73, 22, 97, }, { 162, 25, 47, 77, 42, 5, 44, 243, 47, 61, 254, 190, 151, 99, 162, 110, }, { 80, 161, 183, 75, 117, 194, 72, 120, 183, 4, 87, 51, 185, 169, 80, 134, }, { 106, 194, 21, 67, 161, 180, 121, 95, 21, 88, 8, 28, 209, 114, 106, 37, }, { 12, 214, 138, 159, 197, 79, 14, 10, 138, 190, 35, 149, 212, 105, 12, 64, }, { 113, 121, 1, 233, 72, 73, 135, 168, 1, 41, 54, 65, 143, 43, 113, 181, }, { 166, 234, 232, 56, 105, 129, 151, 245, 232, 87, 94, 205, 219, 68, 166, 239, }, { 138, 168, 149, 137, 241, 100, 8, 207, 149, 63, 52, 70, 42, 214, 138, 45, }, { 231, 77, 132, 232, 179, 55, 40, 117, 132, 195, 228, 157, 130, 8, 231, 153, }, { 236, 188, 10, 85, 149, 159, 127, 154, 10, 217, 31, 207, 47, 205, 236, 72, }, { 81, 237, 246, 199, 21, 227, 22, 152, 246, 255, 127, 95, 170, 208, 81, 55, }, { 121, 92, 76, 3, 206, 130, 50, 164, 76, 253, 181, 167, 23, 101, 121, 116, }, { 225, 38, 193, 70, 48, 241, 47, 112, 193, 156, 20, 54, 232, 221, 225, 185, }, { 27, 187, 20, 170, 233, 253, 254, 247, 20, 113, 62, 93, 94, 89, 27, 144, }, { 159, 93, 137, 103, 29, 148, 68, 49, 137, 197, 121, 86, 134, 20, 159, 92, }, { 116, 198, 135, 16, 107, 236, 98, 78, 135, 184, 190, 94, 208, 117, 116, 133, }, { 248, 5, 87, 55, 25, 78, 109, 132, 87, 216, 122, 179, 144, 118, 248, 136, }, { 90, 28, 120, 122, 51, 75, 65, 119, 120, 229, 132, 13, 7, 21, 90, 230, }, { 103, 88, 222, 80, 4, 218, 41, 181, 222, 29, 3, 229, 22, 98, 103, 212, }, { 54, 181, 40, 151, 17, 57, 63, 45, 40, 226, 124, 186, 188, 178, 54, 227, }, { 232, 79, 205, 32, 214, 27, 196, 156, 205, 179, 191, 188, 99, 234, 232, 201, }, { 96, 127, 218, 114, 231, 61, 112, 80, 218, 185, 219, 34, 111, 206, 96, 69, }, { 210, 44, 111, 40, 2, 109, 245, 187, 111, 239, 224, 147, 11, 49, 210, 106, }, { 165, 62, 43, 111, 201, 226, 117, 22, 43, 153, 38, 121, 238, 207, 165, 255, }, { 140, 195, 208, 39, 114, 162, 15, 202, 208, 96, 196, 237, 64, 3, 140, 13, }, { 189, 81, 252, 146, 128, 124, 105, 2, 252, 38, 96, 144, 133, 29, 189, 127, }, { 251, 209, 148, 96, 185, 45, 143, 103, 148, 22, 2, 7, 165, 253, 251, 152, }, { 186, 118, 248, 176, 99, 155, 48, 231, 248, 130, 184, 87, 252, 177, 186, 238, }, { 15, 2, 73, 200, 101, 44, 236, 233, 73, 112, 91, 33, 225, 226, 15, 80, }, { 79, 233, 100, 148, 223, 187, 13, 137, 100, 31, 201, 29, 171, 215, 79, 151, }, { 142, 91, 82, 252, 178, 224, 179, 201, 82, 85, 148, 53, 102, 241, 142, 172, }, { 137, 124, 86, 222, 81, 7, 234, 44, 86, 241, 76, 242, 31, 93, 137, 61, }, { 6, 107, 69, 174, 131, 198, 7, 5, 69, 95, 240, 171, 106, 213, 6, 32, }, { 229, 213, 6, 51, 115, 117, 148, 118, 6, 246, 180, 69, 164, 250, 229, 56, }, { 244, 211, 221, 168, 220, 1, 99, 142, 221, 102, 89, 38, 68, 31, 244, 200, }, { 199, 217, 115, 198, 238, 157, 185, 69, 115, 21, 173, 131, 167, 243, 199, 27, }, { 173, 27, 102, 133, 79, 41, 192, 26, 102, 77, 165, 159, 118, 129, 173, 62, }, { 203, 15, 249, 89, 43, 210, 183, 79, 249, 171, 142, 22, 115, 154, 203, 91, }, { 128, 21, 90, 184, 183, 237, 1, 192, 90, 222, 231, 120, 148, 106, 128, 77, }, { 240, 32, 26, 221, 159, 133, 216, 136, 26, 12, 249, 85, 8, 56, 240, 73, }, { 213, 11, 107, 10, 225, 138, 172, 94, 107, 75, 56, 84, 114, 157, 213, 251, }, { 7, 39, 4, 34, 227, 231, 89, 229, 4, 164, 216, 199, 121, 172, 7, 145, }, { 234, 215, 79, 251, 22, 89, 120, 159, 79, 134, 239, 100, 69, 24, 234, 104, }, { 86, 202, 242, 229, 246, 4, 79, 125, 242, 91, 167, 152, 211, 124, 86, 166, }, { 77, 113, 230, 79, 31, 249, 177, 138, 230, 42, 153, 197, 141, 37, 77, 54, }, { 85, 30, 49, 178, 86, 103, 173, 158, 49, 149, 223, 44, 230, 247, 85, 182, }, { 67, 63, 238, 11, 26, 244, 3, 131, 238, 161, 234, 136, 127, 190, 67, 215, }, { 26, 247, 85, 38, 137, 220, 160, 23, 85, 138, 22, 49, 77, 32, 26, 33, }, { 11, 241, 142, 189, 38, 168, 87, 239, 142, 26, 251, 82, 173, 197, 11, 209, }, { 227, 190, 67, 157, 240, 179, 147, 115, 67, 169, 68, 238, 206, 47, 227, 24, }, { 150, 52, 133, 1, 251, 126, 175, 221, 133, 234, 210, 220, 13, 35, 150, 44, }, { 39, 179, 243, 12, 190, 77, 200, 213, 243, 114, 145, 217, 92, 87, 39, 19, }, { 221, 46, 38, 224, 103, 65, 25, 82, 38, 159, 187, 178, 234, 211, 221, 58, }, { 68, 24, 234, 41, 249, 19, 90, 102, 234, 5, 50, 79, 6, 18, 68, 70, }, { 38, 255, 178, 128, 222, 108, 150, 53, 178, 137, 185, 181, 79, 46, 38, 162, }, { 53, 97, 235, 192, 177, 90, 221, 206, 235, 44, 4, 14, 137, 57, 53, 243, }, { 220, 98, 103, 108, 7, 96, 71, 178, 103, 100, 147, 222, 249, 170, 220, 139, }, { 164, 114, 106, 227, 169, 195, 43, 246, 106, 98, 14, 21, 253, 182, 164, 78, }, { 88, 132, 250, 161, 243, 9, 253, 116, 250, 208, 212, 213, 33, 231, 88, 71, }, { 207, 252, 62, 44, 104, 86, 12, 73, 62, 193, 46, 101, 63, 189, 207, 218, }, { 208, 180, 237, 243, 194, 47, 73, 184, 237, 218, 176, 75, 45, 195, 208, 203, }, { 124, 227, 202, 250, 237, 39, 215, 66, 202, 108, 61, 184, 72, 59, 124, 68, }, { 92, 119, 61, 212, 176, 141, 70, 114, 61, 186, 116, 166, 109, 192, 92, 198, }, { 126, 123, 72, 33, 45, 101, 107, 65, 72, 89, 109, 96, 110, 201, 126, 229, }, { 254, 110, 18, 153, 154, 136, 106, 129, 18, 135, 138, 24, 250, 163, 254, 168, }, { 170, 60, 98, 167, 172, 206, 153, 255, 98, 233, 125, 88, 15, 45, 170, 175, }, { 43, 101, 121, 147, 123, 2, 198, 223, 121, 204, 178, 76, 136, 62, 43, 83, }, { 201, 151, 123, 130, 235, 144, 11, 76, 123, 158, 222, 206, 85, 104, 201, 250, }, { 146, 199, 66, 116, 184, 250, 20, 219, 66, 128, 114, 175, 65, 4, 146, 173, }, { 202, 67, 184, 213, 75, 243, 233, 175, 184, 80, 166, 122, 96, 227, 202, 234, }, { 76, 61, 167, 195, 127, 216, 239, 106, 167, 209, 177, 169, 158, 92, 76, 135, }, { 157, 197, 11, 188, 221, 214, 248, 50, 11, 240, 41, 142, 160, 230, 157, 253, }, { 167, 166, 169, 180, 9, 160, 201, 21, 169, 172, 118, 161, 200, 61, 167, 94, }, { 89, 200, 187, 45, 147, 40, 163, 148, 187, 43, 252, 185, 50, 158, 89, 246, }, { 158, 17, 200, 235, 125, 181, 26, 209, 200, 62, 81, 58, 149, 109, 158, 237, }, { 29, 208, 81, 4, 106, 59, 249, 242, 81, 46, 206, 246, 52, 140, 29, 176, }, { 1, 76, 65, 140, 96, 33, 94, 224, 65, 251, 40, 108, 19, 121, 1, 177, }, { 194, 102, 245, 63, 205, 56, 92, 163, 245, 132, 37, 156, 248, 173, 194, 43, }, { 40, 177, 186, 196, 219, 97, 36, 60, 186, 2, 202, 248, 189, 181, 40, 67, }, { 180, 56, 240, 244, 102, 150, 130, 238, 240, 9, 203, 26, 14, 42, 180, 15, }, { 25, 35, 150, 113, 41, 191, 66, 244, 150, 68, 110, 133, 120, 171, 25, 49, }, { 133, 170, 220, 65, 148, 72, 228, 38, 220, 79, 111, 103, 203, 52, 133, 125, }, { 60, 8, 231, 166, 87, 176, 54, 34, 231, 3, 175, 132, 2, 14, 60, 131, }, { 64, 235, 45, 92, 186, 151, 225, 96, 45, 111, 146, 60, 74, 53, 64, 199, }, { 30, 4, 146, 83, 202, 88, 27, 17, 146, 224, 182, 66, 1, 7, 30, 160, }, { 149, 224, 70, 86, 91, 29, 77, 62, 70, 36, 170, 104, 56, 168, 149, 60, }, { 171, 112, 35, 43, 204, 239, 199, 31, 35, 18, 85, 52, 28, 84, 171, 30, }, { 179, 31, 244, 214, 133, 113, 219, 11, 244, 173, 19, 221, 119, 134, 179, 158, }, { 235, 155, 14, 119, 118, 120, 38, 127, 14, 125, 199, 8, 86, 97, 235, 217, }, { 250, 157, 213, 236, 217, 12, 209, 135, 213, 237, 42, 107, 182, 132, 250, 41, }, { 42, 41, 56, 31, 27, 35, 152, 63, 56, 55, 154, 32, 155, 71, 42, 226, }, { 172, 87, 39, 9, 47, 8, 158, 250, 39, 182, 141, 243, 101, 248, 172, 143, }, { 45, 14, 60, 61, 248, 196, 193, 218, 60, 147, 66, 231, 226, 235, 45, 115, }, { 37, 43, 113, 215, 126, 15, 116, 214, 113, 71, 193, 1, 122, 165, 37, 178, }, { 74, 86, 226, 109, 252, 30, 232, 111, 226, 142, 65, 2, 244, 137, 74, 167, }, { 176, 203, 55, 129, 37, 18, 57, 232, 55, 99, 107, 105, 66, 13, 176, 142, }, { 65, 167, 108, 208, 218, 182, 191, 128, 108, 148, 186, 80, 89, 76, 65, 118, }, { 48, 222, 109, 57, 146, 255, 56, 40, 109, 189, 140, 17, 214, 103, 48, 195, }, { 51, 10, 174, 110, 50, 156, 218, 203, 174, 115, 244, 165, 227, 236, 51, 211, }, { 101, 192, 92, 139, 196, 152, 149, 182, 92, 40, 83, 61, 48, 144, 101, 117, }, { 139, 228, 212, 5, 145, 69, 86, 47, 212, 196, 28, 42, 57, 175, 139, 156, }, { 239, 104, 201, 2, 53, 252, 157, 121, 201, 23, 103, 123, 26, 70, 239, 88, }, { 9, 105, 12, 102, 230, 234, 235, 236, 12, 47, 171, 138, 139, 55, 9, 112, }, { 155, 174, 78, 18, 94, 16, 255, 55, 78, 175, 217, 37, 202, 51, 155, 221, }, { 111, 125, 147, 186, 130, 17, 156, 185, 147, 201, 128, 3, 142, 44, 111, 21, }, { 132, 230, 157, 205, 244, 105, 186, 198, 157, 180, 71, 11, 216, 77, 132, 204, }, { 21, 245, 28, 238, 236, 240, 76, 254, 28, 250, 77, 16, 172, 194, 21, 113, }, { 117, 138, 198, 156, 11, 205, 60, 174, 198, 67, 150, 50, 195, 12, 117, 52, }, { 97, 51, 155, 254, 135, 28, 46, 176, 155, 66, 243, 78, 124, 183, 97, 244, }, { 249, 73, 22, 187, 121, 111, 51, 100, 22, 35, 82, 223, 131, 15, 249, 57, }, { 18, 210, 24, 204, 15, 23, 21, 27, 24, 94, 149, 215, 213, 110, 18, 224, }, { 112, 53, 64, 101, 40, 104, 217, 72, 64, 210, 30, 45, 156, 82, 112, 4, }, { 163, 85, 110, 193, 74, 36, 114, 19, 110, 198, 214, 210, 132, 26, 163, 223, }, { 156, 137, 74, 48, 189, 247, 166, 210, 74, 11, 1, 226, 179, 159, 156, 76, }, { 78, 165, 37, 24, 191, 154, 83, 105, 37, 228, 225, 113, 184, 174, 78, 38, }, { 169, 232, 161, 240, 12, 173, 123, 28, 161, 39, 5, 236, 58, 166, 169, 191, }, { 123, 196, 206, 216, 14, 192, 142, 167, 206, 200, 229, 127, 49, 151, 123, 213, }, { 71, 204, 41, 126, 89, 112, 184, 133, 41, 203, 74, 251, 51, 153, 71, 86, }, { 233, 3, 140, 172, 182, 58, 154, 124, 140, 72, 151, 208, 112, 147, 233, 120, }, { 122, 136, 143, 84, 110, 225, 208, 71, 143, 51, 205, 19, 34, 238, 122, 100, }, { 241, 108, 91, 81, 255, 164, 134, 104, 91, 247, 209, 57, 27, 65, 241, 248, }, { 196, 13, 176, 145, 78, 254, 91, 166, 176, 219, 213, 55, 146, 120, 196, 11, }, { 175, 131, 228, 94, 143, 107, 124, 25, 228, 120, 245, 71, 80, 115, 175, 159, }, { 104, 90, 151, 152, 97, 246, 197, 92, 151, 109, 88, 196, 247, 128, 104, 132, }, { 190, 133, 63, 197, 32, 31, 139, 225, 63, 232, 24, 36, 176, 150, 190, 111, }, { 191, 201, 126, 73, 64, 62, 213, 1, 126, 19, 48, 72, 163, 239, 191, 222, }, { 46, 218, 255, 106, 88, 167, 35, 57, 255, 93, 58, 83, 215, 96, 46, 99, }, { 72, 206, 96, 182, 60, 92, 84, 108, 96, 187, 17, 218, 210, 123, 72, 6, }, { 206, 176, 127, 160, 8, 119, 82, 169, 127, 58, 6, 9, 44, 196, 206, 107, }, { 61, 68, 166, 42, 55, 145, 104, 194, 166, 248, 135, 232, 17, 119, 61, 50, }, { 50, 70, 239, 226, 82, 189, 132, 43, 239, 136, 220, 201, 240, 149, 50, 98, }, { 230, 1, 197, 100, 211, 22, 118, 149, 197, 56, 204, 241, 145, 113, 230, 40, }, { 107, 142, 84, 207, 193, 149, 39, 191, 84, 163, 32, 112, 194, 11, 107, 148, }, { 187, 58, 185, 60, 3, 186, 110, 7, 185, 121, 144, 59, 239, 200, 187, 95, }, { 145, 19, 129, 35, 24, 153, 246, 56, 129, 78, 10, 27, 116, 143, 145, 189, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 131, 193, 153, 239, 23, 142, 227, 35, 153, 16, 159, 204, 161, 225, 131, 93, }, { 224, 106, 128, 202, 80, 208, 113, 144, 128, 103, 60, 90, 251, 164, 224, 8, }, { 130, 141, 216, 99, 119, 175, 189, 195, 216, 235, 183, 160, 178, 152, 130, 236, }, { 215, 147, 233, 209, 33, 200, 16, 93, 233, 126, 104, 140, 84, 111, 215, 90, }, { 242, 184, 152, 6, 95, 199, 100, 139, 152, 57, 169, 141, 46, 202, 242, 232, }, { 205, 100, 188, 247, 168, 20, 176, 74, 188, 244, 126, 189, 25, 79, 205, 123, }, { 120, 16, 13, 143, 174, 163, 108, 68, 13, 6, 157, 203, 4, 28, 120, 197, }, { 192, 254, 119, 228, 13, 122, 224, 160, 119, 177, 117, 68, 222, 95, 192, 138, }, { 99, 171, 25, 37, 71, 94, 146, 179, 25, 119, 163, 150, 90, 69, 99, 85, }, { 135, 50, 94, 154, 84, 10, 88, 37, 94, 122, 63, 191, 237, 198, 135, 220, }, { 252, 246, 144, 66, 90, 202, 214, 130, 144, 178, 218, 192, 220, 81, 252, 9, }, { 148, 172, 7, 218, 59, 60, 19, 222, 7, 223, 130, 4, 43, 209, 148, 141, }, { 8, 37, 77, 234, 134, 203, 181, 12, 77, 212, 131, 230, 152, 78, 8, 193, }, { 129, 89, 27, 52, 215, 204, 95, 32, 27, 37, 207, 20, 135, 19, 129, 252, }, { 23, 109, 158, 53, 44, 178, 240, 253, 158, 207, 29, 200, 138, 48, 23, 208, }, { 98, 231, 88, 169, 39, 127, 204, 83, 88, 140, 139, 250, 73, 60, 98, 228, }, { 216, 145, 160, 25, 68, 228, 252, 180, 160, 14, 51, 173, 181, 141, 216, 10, }, { 49, 146, 44, 181, 242, 222, 102, 200, 44, 70, 164, 125, 197, 30, 49, 114, }, { 16, 74, 154, 23, 207, 85, 169, 24, 154, 107, 197, 15, 243, 156, 16, 65, }, { 33, 216, 182, 162, 61, 139, 207, 208, 182, 45, 97, 114, 54, 130, 33, 51, }, { 218, 9, 34, 194, 132, 166, 64, 183, 34, 59, 99, 117, 147, 127, 218, 171, }, { 102, 20, 159, 220, 100, 251, 119, 85, 159, 230, 43, 137, 5, 27, 102, 101, }, { 57, 183, 97, 95, 116, 21, 211, 196, 97, 146, 39, 155, 93, 80, 57, 179, }, { 253, 186, 209, 206, 58, 235, 136, 98, 209, 73, 242, 172, 207, 40, 253, 184, }, { 14, 78, 8, 68, 5, 13, 178, 9, 8, 139, 115, 77, 242, 155, 14, 225, }, { 110, 49, 210, 54, 226, 48, 194, 89, 210, 50, 168, 111, 157, 85, 110, 164, }, { 143, 23, 19, 112, 210, 193, 237, 41, 19, 174, 188, 89, 117, 136, 143, 29, }, { 153, 54, 204, 201, 158, 82, 67, 52, 204, 154, 137, 253, 236, 193, 153, 124, }, { 109, 229, 17, 97, 66, 83, 32, 186, 17, 252, 208, 219, 168, 222, 109, 180, }, { 243, 244, 217, 138, 63, 230, 58, 107, 217, 194, 129, 225, 61, 179, 243, 89, }, { 222, 250, 229, 183, 199, 34, 251, 177, 229, 81, 195, 6, 223, 88, 222, 42, }, { 136, 48, 23, 82, 49, 38, 180, 204, 23, 10, 100, 158, 12, 36, 136, 140, }, { 13, 154, 203, 19, 165, 110, 80, 234, 203, 69, 11, 249, 199, 16, 13, 241, }, { 141, 143, 145, 171, 18, 131, 81, 42, 145, 155, 236, 129, 83, 122, 141, 188, }, { 212, 71, 42, 134, 129, 171, 242, 190, 42, 176, 16, 56, 97, 228, 212, 74, }, { 91, 80, 57, 246, 83, 106, 31, 151, 57, 30, 172, 97, 20, 108, 91, 87, }, { 209, 248, 172, 127, 162, 14, 23, 88, 172, 33, 152, 39, 62, 186, 209, 122, }, { 93, 59, 124, 88, 208, 172, 24, 146, 124, 65, 92, 202, 126, 185, 93, 119, }, { 3, 212, 195, 87, 160, 99, 226, 227, 195, 206, 120, 180, 53, 139, 3, 16, }, { 200, 219, 58, 14, 139, 177, 85, 172, 58, 101, 246, 162, 70, 17, 200, 75, }, { 193, 178, 54, 104, 109, 91, 190, 64, 54, 74, 93, 40, 205, 38, 193, 59, }, { 119, 18, 68, 71, 203, 143, 128, 173, 68, 118, 198, 234, 229, 254, 119, 149, }, { 58, 99, 162, 8, 212, 118, 49, 39, 162, 92, 95, 47, 104, 219, 58, 163, }, { 246, 75, 95, 115, 28, 67, 223, 141, 95, 83, 9, 254, 98, 237, 246, 105, }, { 185, 162, 59, 231, 195, 248, 210, 4, 59, 76, 192, 227, 201, 58, 185, 254, }, { 161, 205, 236, 26, 138, 102, 206, 16, 236, 243, 134, 10, 162, 232, 161, 126, }, { 198, 149, 50, 74, 142, 188, 231, 165, 50, 238, 133, 239, 180, 138, 198, 170, }, { 125, 175, 139, 118, 141, 6, 137, 162, 139, 151, 21, 212, 91, 66, 125, 245, }, { 36, 103, 48, 91, 30, 46, 42, 54, 48, 188, 233, 109, 105, 220, 36, 3, }, { 223, 182, 164, 59, 167, 3, 165, 81, 164, 170, 235, 106, 204, 33, 223, 155, }, { 100, 140, 29, 7, 164, 185, 203, 86, 29, 211, 123, 81, 35, 233, 100, 196, }, { 35, 64, 52, 121, 253, 201, 115, 211, 52, 24, 49, 170, 16, 112, 35, 146, }, { 115, 225, 131, 50, 136, 11, 59, 171, 131, 28, 102, 153, 169, 217, 115, 20, }, { 105, 22, 214, 20, 1, 215, 155, 188, 214, 150, 112, 168, 228, 249, 105, 53, }, { 24, 111, 215, 253, 73, 158, 28, 20, 215, 191, 70, 233, 107, 210, 24, 128, }, { 188, 29, 189, 30, 224, 93, 55, 226, 189, 221, 72, 252, 150, 100, 188, 206, }, { 66, 115, 175, 135, 122, 213, 93, 99, 175, 90, 194, 228, 108, 199, 66, 102, }, { 31, 72, 211, 223, 170, 121, 69, 241, 211, 27, 158, 46, 18, 126, 31, 17, }, { 152, 122, 141, 69, 254, 115, 29, 212, 141, 97, 161, 145, 255, 184, 152, 205, }, { 83, 117, 116, 28, 213, 161, 170, 155, 116, 202, 47, 135, 140, 34, 83, 150, }, { 228, 153, 71, 191, 19, 84, 202, 150, 71, 13, 156, 41, 183, 131, 228, 137, }, { 174, 207, 165, 210, 239, 74, 34, 249, 165, 131, 221, 43, 67, 10, 174, 46, }, { 217, 221, 225, 149, 36, 197, 162, 84, 225, 245, 27, 193, 166, 244, 217, 187, }, { 34, 12, 117, 245, 157, 232, 45, 51, 117, 227, 25, 198, 3, 9, 34, 35, }, { 82, 57, 53, 144, 181, 128, 244, 123, 53, 49, 7, 235, 159, 91, 82, 39, }, { 5, 191, 134, 249, 35, 165, 229, 230, 134, 145, 136, 31, 95, 94, 5, 48, }, { 108, 169, 80, 237, 34, 114, 126, 90, 80, 7, 248, 183, 187, 167, 108, 5, }, { 211, 96, 46, 164, 98, 76, 171, 91, 46, 20, 200, 255, 24, 72, 211, 219, }, { 255, 34, 83, 21, 250, 169, 52, 97, 83, 124, 162, 116, 233, 218, 255, 25, }, { 154, 226, 15, 158, 62, 49, 161, 215, 15, 84, 241, 73, 217, 74, 154, 108, }, { 44, 66, 125, 177, 152, 229, 159, 58, 125, 104, 106, 139, 241, 146, 44, 194, }, { 41, 253, 251, 72, 187, 64, 122, 220, 251, 249, 226, 148, 174, 204, 41, 242, }, { 94, 239, 191, 15, 112, 207, 250, 113, 191, 143, 36, 126, 75, 50, 94, 103, }, { 87, 134, 179, 105, 150, 37, 17, 157, 179, 160, 143, 244, 192, 5, 87, 23, }, { 237, 240, 75, 217, 245, 190, 33, 122, 75, 34, 55, 163, 60, 180, 237, 249, }, { 70, 128, 104, 242, 57, 81, 230, 101, 104, 48, 98, 151, 32, 224, 70, 231, }, { 52, 45, 170, 76, 209, 123, 131, 46, 170, 215, 44, 98, 154, 64, 52, 66, }, { 114, 173, 194, 190, 232, 42, 101, 75, 194, 231, 78, 245, 186, 160, 114, 165, }, { 181, 116, 177, 120, 6, 183, 220, 14, 177, 242, 227, 118, 29, 83, 181, 190, }, { 17, 6, 219, 155, 175, 116, 247, 248, 219, 144, 237, 99, 224, 229, 17, 240, }, { 226, 242, 2, 17, 144, 146, 205, 147, 2, 82, 108, 130, 221, 86, 226, 169, }, { 214, 223, 168, 93, 65, 233, 78, 189, 168, 133, 64, 224, 71, 22, 214, 235, }, { 238, 36, 136, 142, 85, 221, 195, 153, 136, 236, 79, 23, 9, 63, 238, 233, }, { 144, 95, 192, 175, 120, 184, 168, 216, 192, 181, 34, 119, 103, 246, 144, 12, }, { 20, 185, 93, 98, 140, 209, 18, 30, 93, 1, 101, 124, 191, 187, 20, 192, }, { 62, 144, 101, 125, 151, 242, 138, 33, 101, 54, 255, 92, 36, 252, 62, 34, }, { 134, 126, 31, 22, 52, 43, 6, 197, 31, 129, 23, 211, 254, 191, 134, 109, }, { 73, 130, 33, 58, 92, 125, 10, 140, 33, 64, 57, 182, 193, 2, 73, 183, }, { 247, 7, 30, 255, 124, 98, 129, 109, 30, 168, 33, 146, 113, 148, 247, 216, }, { 10, 189, 207, 49, 70, 137, 9, 15, 207, 225, 211, 62, 190, 188, 10, 96, }, }, { { 168, 120, 65, 154, 99, 154, 170, 204, 109, 107, 182, 45, 191, 99, 142, 27, }, { 180, 49, 173, 66, 201, 66, 55, 155, 198, 128, 41, 203, 192, 201, 21, 248, }, { 150, 222, 41, 213, 144, 213, 24, 16, 188, 237, 64, 210, 122, 144, 240, 78, }, { 30, 228, 124, 204, 55, 204, 164, 121, 151, 154, 39, 182, 215, 55, 226, 211, }, { 138, 151, 197, 13, 58, 13, 133, 71, 23, 6, 223, 52, 5, 58, 107, 173, }, { 245, 2, 205, 141, 45, 141, 230, 5, 84, 97, 20, 113, 176, 45, 51, 47, }, { 159, 152, 100, 143, 14, 143, 1, 191, 82, 51, 185, 121, 203, 14, 10, 150, }, { 165, 167, 239, 232, 4, 232, 193, 63, 251, 87, 252, 38, 157, 4, 134, 163, }, { 19, 59, 210, 190, 80, 190, 207, 138, 1, 166, 109, 189, 245, 80, 234, 107, }, { 57, 37, 83, 121, 56, 121, 4, 185, 139, 204, 161, 39, 170, 56, 40, 29, }, { 172, 225, 162, 178, 154, 178, 216, 144, 21, 137, 5, 141, 44, 154, 124, 123, }, { 45, 157, 186, 241, 163, 241, 125, 86, 208, 32, 155, 66, 48, 163, 148, 62, }, { 131, 209, 136, 87, 164, 87, 156, 232, 249, 216, 38, 159, 180, 164, 145, 117, }, { 134, 255, 35, 117, 242, 117, 19, 163, 159, 227, 201, 23, 115, 242, 190, 13, }, { 185, 238, 3, 48, 174, 48, 92, 104, 80, 188, 99, 192, 226, 174, 29, 64, }, { 118, 211, 69, 218, 137, 218, 122, 237, 173, 185, 50, 238, 4, 137, 162, 90, }, { 15, 114, 62, 102, 250, 102, 82, 221, 170, 77, 242, 91, 138, 250, 113, 136, }, { 90, 249, 183, 33, 133, 33, 250, 172, 99, 64, 245, 132, 96, 133, 235, 124, }, { 160, 137, 68, 202, 82, 202, 78, 116, 157, 108, 19, 174, 90, 82, 169, 219, }, { 146, 71, 202, 253, 105, 253, 106, 76, 196, 15, 243, 114, 233, 105, 2, 46, }, { 226, 160, 252, 27, 132, 27, 91, 211, 45, 37, 202, 108, 214, 132, 43, 36, }, { 52, 250, 253, 11, 95, 11, 111, 74, 29, 240, 235, 44, 136, 95, 32, 165, }, { 238, 200, 26, 99, 76, 99, 205, 55, 165, 192, 220, 79, 160, 76, 254, 132, }, { 109, 25, 146, 52, 232, 52, 81, 223, 92, 24, 250, 208, 20, 232, 111, 241, }, { 26, 125, 159, 228, 206, 228, 214, 37, 239, 120, 148, 22, 68, 206, 16, 179, }, { 36, 219, 247, 171, 61, 171, 100, 249, 62, 254, 98, 233, 129, 61, 110, 230, }, { 31, 83, 52, 198, 152, 198, 89, 110, 137, 67, 123, 158, 131, 152, 63, 203, }, { 210, 195, 226, 56, 34, 56, 70, 197, 72, 55, 146, 224, 205, 34, 249, 225, }, { 24, 208, 15, 240, 83, 240, 239, 11, 211, 9, 44, 70, 236, 83, 105, 131, }, { 55, 224, 37, 21, 109, 21, 171, 115, 63, 88, 15, 84, 116, 109, 132, 141, }, { 106, 154, 169, 2, 35, 2, 231, 186, 6, 82, 173, 8, 123, 35, 57, 185, }, { 63, 17, 32, 69, 92, 69, 79, 203, 207, 95, 170, 215, 145, 92, 163, 77, }, { 174, 76, 50, 166, 7, 166, 225, 190, 41, 248, 189, 221, 132, 7, 5, 75, }, { 16, 33, 10, 160, 98, 160, 11, 179, 35, 14, 137, 197, 9, 98, 78, 67, }, { 70, 176, 91, 249, 47, 249, 103, 251, 200, 171, 106, 98, 31, 47, 112, 159, }, { 108, 174, 218, 62, 71, 62, 172, 200, 66, 193, 166, 248, 64, 71, 178, 233, }, { 188, 192, 168, 18, 248, 18, 211, 35, 54, 135, 140, 72, 37, 248, 50, 56, }, { 104, 55, 57, 22, 190, 22, 222, 148, 58, 35, 21, 88, 211, 190, 64, 137, }, { 11, 235, 221, 78, 3, 78, 32, 129, 210, 175, 65, 251, 25, 3, 131, 232, }, { 62, 166, 104, 79, 243, 79, 178, 220, 209, 134, 246, 255, 197, 243, 126, 85, }, { 254, 233, 16, 195, 46, 195, 198, 132, 134, 206, 85, 138, 169, 46, 176, 199, }, { 169, 207, 9, 144, 204, 144, 87, 219, 115, 178, 234, 5, 235, 204, 83, 3, }, { 40, 179, 17, 211, 245, 211, 242, 29, 182, 27, 116, 202, 247, 245, 187, 70, }, { 124, 143, 208, 158, 37, 158, 167, 123, 97, 207, 47, 61, 73, 37, 252, 170, }, { 242, 129, 246, 187, 230, 187, 80, 96, 14, 43, 67, 169, 223, 230, 101, 103, }, { 191, 218, 112, 12, 202, 12, 23, 26, 20, 47, 104, 48, 217, 202, 150, 16, }, { 244, 181, 133, 135, 130, 135, 27, 18, 74, 184, 72, 89, 228, 130, 238, 55, }, { 203, 164, 165, 194, 222, 194, 84, 217, 133, 231, 226, 142, 117, 222, 77, 122, }, { 6, 52, 115, 60, 100, 60, 75, 114, 68, 147, 11, 240, 59, 100, 139, 80, }, { 248, 221, 99, 255, 74, 255, 141, 246, 194, 93, 94, 122, 146, 74, 59, 151, }, { 189, 119, 224, 24, 87, 24, 46, 52, 40, 94, 208, 96, 113, 87, 239, 32, }, { 117, 201, 157, 196, 187, 196, 190, 212, 143, 17, 214, 150, 248, 187, 6, 114, }, { 3, 26, 216, 30, 50, 30, 196, 57, 34, 168, 228, 120, 252, 50, 164, 40, }, { 76, 236, 206, 189, 131, 189, 186, 109, 4, 221, 119, 177, 82, 131, 46, 111, }, { 75, 111, 245, 139, 72, 139, 12, 8, 94, 151, 32, 105, 61, 72, 120, 39, }, { 192, 79, 120, 140, 221, 140, 116, 88, 87, 72, 163, 117, 108, 221, 206, 146, }, { 4, 153, 227, 40, 249, 40, 114, 92, 120, 226, 179, 160, 147, 249, 242, 96, }, { 179, 178, 150, 116, 2, 116, 129, 254, 156, 202, 126, 19, 175, 2, 67, 176, }, { 182, 156, 61, 86, 84, 86, 14, 181, 250, 241, 145, 155, 104, 84, 108, 200, }, { 81, 18, 106, 111, 134, 111, 218, 45, 177, 239, 180, 127, 121, 134, 104, 148, }, { 235, 230, 177, 65, 26, 65, 66, 124, 195, 251, 51, 199, 103, 26, 209, 252, }, { 152, 27, 95, 185, 197, 185, 183, 218, 8, 121, 238, 161, 164, 197, 92, 222, }, { 35, 88, 204, 157, 246, 157, 210, 156, 100, 180, 53, 49, 238, 246, 56, 174, }, { 171, 98, 153, 132, 81, 132, 110, 245, 79, 195, 82, 85, 67, 81, 42, 51, }, { 178, 5, 222, 126, 173, 126, 124, 233, 130, 19, 34, 59, 251, 173, 158, 168, }, { 153, 172, 23, 179, 106, 179, 74, 205, 22, 160, 178, 137, 240, 106, 129, 198, }, { 137, 141, 29, 19, 8, 19, 65, 126, 53, 174, 59, 76, 249, 8, 207, 133, }, { 223, 28, 76, 74, 69, 74, 45, 54, 222, 11, 216, 235, 239, 69, 241, 89, }, { 13, 223, 174, 114, 103, 114, 107, 243, 150, 60, 74, 11, 34, 103, 8, 184, }, { 49, 212, 86, 41, 9, 41, 224, 1, 123, 203, 4, 164, 79, 9, 15, 221, }, { 112, 231, 54, 230, 237, 230, 49, 159, 233, 42, 57, 30, 63, 237, 41, 10, }, { 115, 253, 238, 248, 223, 248, 245, 166, 203, 130, 221, 102, 195, 223, 141, 34, }, { 29, 254, 164, 210, 5, 210, 96, 64, 181, 50, 195, 206, 43, 5, 70, 251, }, { 141, 20, 254, 59, 241, 59, 51, 34, 77, 76, 136, 236, 106, 241, 61, 229, }, { 241, 155, 46, 165, 212, 165, 148, 89, 44, 131, 167, 209, 35, 212, 193, 79, }, { 125, 56, 152, 148, 138, 148, 90, 108, 127, 22, 115, 21, 29, 138, 33, 178, }, { 23, 162, 49, 150, 169, 150, 189, 214, 121, 68, 222, 29, 102, 169, 24, 11, }, { 44, 42, 242, 251, 12, 251, 128, 65, 206, 249, 199, 106, 100, 12, 73, 38, }, { 53, 77, 181, 1, 240, 1, 146, 93, 3, 41, 183, 4, 220, 240, 253, 189, }, { 136, 58, 85, 25, 167, 25, 188, 105, 43, 119, 103, 100, 173, 167, 18, 157, }, { 103, 69, 7, 112, 68, 112, 140, 73, 144, 110, 231, 3, 89, 68, 49, 1, }, { 225, 186, 36, 5, 182, 5, 159, 234, 15, 141, 46, 20, 42, 182, 143, 12, }, { 181, 134, 229, 72, 102, 72, 202, 140, 216, 89, 117, 227, 148, 102, 200, 224, }, { 100, 95, 223, 110, 118, 110, 72, 112, 178, 198, 3, 123, 165, 118, 149, 41, }, { 177, 31, 6, 96, 159, 96, 184, 208, 160, 187, 198, 67, 7, 159, 58, 128, }, { 8, 241, 5, 80, 49, 80, 228, 184, 240, 7, 165, 131, 229, 49, 39, 192, }, { 229, 35, 199, 45, 79, 45, 237, 182, 119, 111, 157, 180, 185, 79, 125, 108, }, { 28, 73, 236, 216, 170, 216, 157, 87, 171, 235, 159, 230, 127, 170, 155, 227, }, { 107, 45, 225, 8, 140, 8, 26, 173, 24, 139, 241, 32, 47, 140, 228, 161, }, { 92, 205, 196, 29, 225, 29, 177, 222, 39, 211, 254, 116, 91, 225, 96, 44, }, { 163, 147, 156, 212, 96, 212, 138, 77, 191, 196, 247, 214, 166, 96, 13, 243, }, { 122, 187, 163, 162, 65, 162, 236, 9, 37, 92, 36, 205, 114, 65, 119, 250, }, { 232, 252, 105, 95, 40, 95, 134, 69, 225, 83, 215, 191, 155, 40, 117, 212, }, { 218, 50, 231, 104, 19, 104, 162, 125, 184, 48, 55, 99, 40, 19, 222, 33, }, { 215, 237, 73, 26, 116, 26, 201, 142, 46, 12, 125, 104, 10, 116, 214, 153, }, { 250, 112, 243, 235, 215, 235, 180, 216, 254, 44, 230, 42, 58, 215, 66, 167, }, { 167, 10, 127, 252, 153, 252, 248, 17, 199, 38, 68, 118, 53, 153, 255, 147, }, { 127, 149, 8, 128, 23, 128, 99, 66, 67, 103, 203, 69, 181, 23, 88, 130, }, { 228, 148, 143, 39, 224, 39, 16, 161, 105, 182, 193, 156, 237, 224, 160, 116, }, { 143, 185, 110, 47, 108, 47, 10, 12, 113, 61, 48, 188, 194, 108, 68, 213, }, { 161, 62, 12, 192, 253, 192, 179, 99, 131, 181, 79, 134, 14, 253, 116, 195, }, { 82, 8, 178, 113, 180, 113, 30, 20, 147, 71, 80, 7, 133, 180, 204, 188, }, { 236, 101, 138, 119, 209, 119, 244, 25, 153, 177, 100, 31, 8, 209, 135, 180, }, { 59, 136, 195, 109, 165, 109, 61, 151, 183, 189, 25, 119, 2, 165, 81, 45, }, { 162, 36, 212, 222, 207, 222, 119, 90, 161, 29, 171, 254, 242, 207, 208, 235, }, { 95, 215, 28, 3, 211, 3, 117, 231, 5, 123, 26, 12, 167, 211, 196, 4, }, { 80, 165, 34, 101, 41, 101, 39, 58, 175, 54, 232, 87, 45, 41, 181, 140, }, { 74, 216, 189, 129, 231, 129, 241, 31, 64, 78, 124, 65, 105, 231, 165, 63, }, { 87, 38, 25, 83, 226, 83, 145, 95, 245, 124, 191, 143, 66, 226, 227, 196, }, { 85, 139, 137, 71, 127, 71, 168, 113, 201, 13, 7, 223, 234, 127, 154, 244, }, { 220, 6, 148, 84, 119, 84, 233, 15, 252, 163, 60, 147, 19, 119, 85, 113, }, { 222, 171, 4, 64, 234, 64, 208, 33, 192, 210, 132, 195, 187, 234, 44, 65, }, { 157, 53, 244, 155, 147, 155, 56, 145, 110, 66, 1, 41, 99, 147, 115, 166, }, { 231, 142, 87, 57, 210, 57, 212, 152, 75, 30, 37, 228, 17, 210, 4, 92, }, { 175, 251, 122, 172, 168, 172, 28, 169, 55, 33, 225, 245, 208, 168, 216, 83, }, { 151, 105, 97, 223, 63, 223, 229, 7, 162, 52, 28, 250, 46, 63, 45, 86, }, { 170, 213, 209, 142, 254, 142, 147, 226, 81, 26, 14, 125, 23, 254, 247, 43, }, { 38, 118, 103, 191, 160, 191, 93, 215, 2, 143, 218, 185, 41, 160, 23, 214, }, { 77, 91, 134, 183, 44, 183, 71, 122, 26, 4, 43, 153, 6, 44, 243, 119, }, { 84, 60, 193, 77, 208, 77, 85, 102, 215, 212, 91, 247, 190, 208, 71, 236, }, { 247, 175, 93, 153, 176, 153, 223, 43, 104, 16, 172, 33, 24, 176, 74, 31, }, { 217, 40, 63, 118, 33, 118, 102, 68, 154, 152, 211, 27, 212, 33, 122, 9, }, { 132, 82, 179, 97, 111, 97, 42, 141, 163, 146, 113, 71, 219, 111, 199, 61, }, { 65, 51, 96, 207, 228, 207, 209, 158, 146, 225, 61, 186, 112, 228, 38, 215, }, { 130, 102, 192, 93, 11, 93, 97, 255, 231, 1, 122, 183, 224, 11, 76, 109, }, { 214, 90, 1, 16, 219, 16, 52, 153, 48, 213, 33, 64, 94, 219, 11, 129, }, { 183, 43, 117, 92, 251, 92, 243, 162, 228, 40, 205, 179, 60, 251, 177, 208, }, { 219, 133, 175, 98, 188, 98, 95, 106, 166, 233, 107, 75, 124, 188, 3, 57, }, { 43, 169, 201, 205, 199, 205, 54, 36, 148, 179, 144, 178, 11, 199, 31, 110, }, { 166, 189, 55, 246, 54, 246, 5, 6, 217, 255, 24, 94, 97, 54, 34, 139, }, { 56, 146, 27, 115, 151, 115, 249, 174, 149, 21, 253, 15, 254, 151, 245, 5, }, { 206, 138, 14, 224, 136, 224, 219, 146, 227, 220, 13, 6, 178, 136, 98, 2, }, { 149, 196, 241, 203, 162, 203, 220, 41, 158, 69, 164, 170, 134, 162, 84, 102, }, { 113, 80, 126, 236, 66, 236, 204, 136, 247, 243, 101, 54, 107, 66, 244, 18, }, { 195, 85, 160, 146, 239, 146, 176, 97, 117, 224, 71, 13, 144, 239, 106, 186, }, { 142, 14, 38, 37, 195, 37, 247, 27, 111, 228, 108, 148, 150, 195, 153, 205, }, { 154, 182, 207, 173, 88, 173, 142, 244, 52, 8, 86, 241, 12, 88, 37, 238, }, { 239, 127, 82, 105, 227, 105, 48, 32, 187, 25, 128, 103, 244, 227, 35, 156, }, { 37, 108, 191, 161, 146, 161, 153, 238, 32, 39, 62, 193, 213, 146, 179, 254, }, { 164, 16, 167, 226, 171, 226, 60, 40, 229, 142, 160, 14, 201, 171, 91, 187, }, { 233, 75, 33, 85, 135, 85, 123, 82, 255, 138, 139, 151, 207, 135, 168, 204, }, { 60, 11, 248, 91, 110, 91, 139, 242, 237, 247, 78, 175, 109, 110, 7, 101, }, { 111, 180, 2, 32, 117, 32, 104, 241, 96, 105, 66, 128, 188, 117, 22, 193, }, { 2, 173, 144, 20, 157, 20, 57, 46, 60, 113, 184, 80, 168, 157, 121, 48, }, { 1, 183, 72, 10, 175, 10, 253, 23, 30, 217, 92, 40, 84, 175, 221, 24, }, { 10, 92, 149, 68, 172, 68, 221, 150, 204, 118, 29, 211, 77, 172, 94, 240, }, { 9, 70, 77, 90, 158, 90, 25, 175, 238, 222, 249, 171, 177, 158, 250, 216, }, { 148, 115, 185, 193, 13, 193, 33, 62, 128, 156, 248, 130, 210, 13, 137, 126, }, { 237, 210, 194, 125, 126, 125, 9, 14, 135, 104, 56, 55, 92, 126, 90, 172, }, { 89, 227, 111, 63, 183, 63, 62, 149, 65, 232, 17, 252, 156, 183, 79, 84, }, { 97, 113, 116, 76, 32, 76, 199, 59, 212, 253, 236, 243, 98, 32, 186, 81, }, { 105, 128, 113, 28, 17, 28, 35, 131, 36, 250, 73, 112, 135, 17, 157, 145, }, { 41, 4, 89, 217, 90, 217, 15, 10, 168, 194, 40, 226, 163, 90, 102, 94, }, { 176, 168, 78, 106, 48, 106, 69, 199, 190, 98, 154, 107, 83, 48, 231, 152, }, { 48, 99, 30, 35, 166, 35, 29, 22, 101, 18, 88, 140, 27, 166, 210, 197, }, { 96, 198, 60, 70, 143, 70, 58, 44, 202, 36, 176, 219, 54, 143, 103, 73, }, { 116, 126, 213, 206, 20, 206, 67, 195, 145, 200, 138, 190, 172, 20, 219, 106, }, { 34, 239, 132, 151, 89, 151, 47, 139, 122, 109, 105, 25, 186, 89, 229, 182, }, { 12, 104, 230, 120, 200, 120, 150, 228, 136, 229, 22, 35, 118, 200, 213, 160, }, { 205, 144, 214, 254, 186, 254, 31, 171, 193, 116, 233, 126, 78, 186, 198, 42, }, { 123, 12, 235, 168, 238, 168, 17, 30, 59, 133, 120, 229, 38, 238, 170, 226, }, { 91, 78, 255, 43, 42, 43, 7, 187, 125, 153, 169, 172, 52, 42, 54, 100, }, { 64, 132, 40, 197, 75, 197, 44, 137, 140, 56, 97, 146, 36, 75, 251, 207, }, { 227, 23, 180, 17, 43, 17, 166, 196, 51, 252, 150, 68, 130, 43, 246, 60, }, { 20, 184, 233, 136, 155, 136, 121, 239, 91, 236, 58, 101, 154, 155, 188, 35, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 253, 243, 200, 221, 28, 221, 2, 189, 164, 102, 177, 242, 85, 28, 20, 239, }, { 120, 22, 51, 182, 220, 182, 213, 39, 25, 45, 156, 157, 218, 220, 14, 202, }, { 173, 86, 234, 184, 53, 184, 37, 135, 11, 80, 89, 165, 120, 53, 161, 99, }, { 208, 110, 114, 44, 191, 44, 127, 235, 116, 70, 42, 176, 101, 191, 128, 209, }, { 145, 93, 18, 227, 91, 227, 174, 117, 230, 167, 23, 10, 21, 91, 166, 6, }, { 252, 68, 128, 215, 179, 215, 255, 170, 186, 191, 237, 218, 1, 179, 201, 247, }, { 249, 106, 43, 245, 229, 245, 112, 225, 220, 132, 2, 82, 198, 229, 230, 143, }, { 234, 81, 249, 75, 181, 75, 191, 107, 221, 34, 111, 239, 51, 181, 12, 228, }, { 133, 229, 251, 107, 192, 107, 215, 154, 189, 75, 45, 111, 143, 192, 26, 37, }, { 126, 34, 64, 138, 184, 138, 158, 85, 93, 190, 151, 109, 225, 184, 133, 154, }, { 119, 100, 13, 208, 38, 208, 135, 250, 179, 96, 110, 198, 80, 38, 127, 66, }, { 199, 204, 67, 186, 22, 186, 194, 61, 13, 2, 244, 173, 3, 22, 152, 218, }, { 197, 97, 211, 174, 139, 174, 251, 19, 49, 115, 76, 253, 171, 139, 225, 234, }, { 93, 122, 140, 23, 78, 23, 76, 201, 57, 10, 162, 92, 15, 78, 189, 52, }, { 58, 63, 139, 103, 10, 103, 192, 128, 169, 100, 69, 95, 86, 10, 140, 53, }, { 213, 64, 217, 14, 233, 14, 240, 160, 18, 125, 197, 56, 162, 233, 175, 169, }, { 102, 242, 79, 122, 235, 122, 113, 94, 142, 183, 187, 43, 13, 235, 236, 25, }, { 139, 32, 141, 7, 149, 7, 120, 80, 9, 223, 131, 28, 81, 149, 182, 181, }, { 73, 194, 101, 159, 213, 159, 53, 38, 98, 230, 152, 57, 149, 213, 1, 23, }, { 194, 226, 232, 152, 64, 152, 77, 118, 107, 57, 27, 37, 196, 64, 183, 162, }, { 198, 123, 11, 176, 185, 176, 63, 42, 19, 219, 168, 133, 87, 185, 69, 194, }, { 86, 145, 81, 89, 77, 89, 108, 72, 235, 165, 227, 167, 22, 77, 62, 220, }, { 78, 65, 94, 169, 30, 169, 131, 67, 56, 172, 207, 225, 250, 30, 87, 95, }, { 39, 193, 47, 181, 15, 181, 160, 192, 28, 86, 134, 145, 125, 15, 202, 206, }, { 230, 57, 31, 51, 125, 51, 41, 143, 85, 199, 121, 204, 69, 125, 217, 68, }, { 147, 240, 130, 247, 198, 247, 151, 91, 218, 214, 175, 90, 189, 198, 223, 54, }, { 187, 67, 147, 36, 51, 36, 101, 70, 108, 205, 219, 144, 74, 51, 100, 112, }, { 209, 217, 58, 38, 16, 38, 130, 252, 106, 159, 118, 152, 49, 16, 93, 201, }, { 99, 220, 228, 88, 189, 88, 254, 21, 232, 140, 84, 163, 202, 189, 195, 97, }, { 193, 248, 48, 134, 114, 134, 137, 79, 73, 145, 255, 93, 56, 114, 19, 138, }, { 69, 170, 131, 231, 29, 231, 163, 194, 234, 3, 142, 26, 227, 29, 212, 183, }, { 200, 190, 125, 220, 236, 220, 144, 224, 167, 79, 6, 246, 137, 236, 233, 82, }, { 22, 21, 121, 156, 6, 156, 64, 193, 103, 157, 130, 53, 50, 6, 197, 19, }, { 27, 202, 215, 238, 97, 238, 43, 50, 241, 161, 200, 62, 16, 97, 205, 171, }, { 32, 66, 20, 131, 196, 131, 22, 165, 70, 28, 209, 73, 18, 196, 156, 134, }, { 155, 1, 135, 167, 247, 167, 115, 227, 42, 209, 10, 217, 88, 247, 248, 246, }, { 243, 54, 190, 177, 73, 177, 173, 119, 16, 242, 31, 129, 139, 73, 184, 127, }, { 184, 89, 75, 58, 1, 58, 161, 127, 78, 101, 63, 232, 182, 1, 192, 88, }, { 240, 44, 102, 175, 123, 175, 105, 78, 50, 90, 251, 249, 119, 123, 28, 87, }, { 47, 48, 42, 229, 62, 229, 68, 120, 236, 81, 35, 18, 152, 62, 237, 14, }, { 186, 244, 219, 46, 156, 46, 152, 81, 114, 20, 135, 184, 30, 156, 185, 104, }, { 79, 246, 22, 163, 177, 163, 126, 84, 38, 117, 147, 201, 174, 177, 138, 71, }, { 190, 109, 56, 6, 101, 6, 234, 13, 10, 246, 52, 24, 141, 101, 75, 8, }, { 18, 140, 154, 180, 255, 180, 50, 157, 31, 127, 49, 149, 161, 255, 55, 115, }, { 67, 158, 240, 219, 121, 219, 232, 176, 174, 144, 133, 234, 216, 121, 95, 231, }, { 207, 61, 70, 234, 39, 234, 38, 133, 253, 5, 81, 46, 230, 39, 191, 26, }, { 201, 9, 53, 214, 67, 214, 109, 247, 185, 150, 90, 222, 221, 67, 52, 74, }, { 42, 30, 129, 199, 104, 199, 203, 51, 138, 106, 204, 154, 95, 104, 194, 118, }, { 17, 150, 66, 170, 205, 170, 246, 164, 61, 215, 213, 237, 93, 205, 147, 91, }, { 21, 15, 161, 130, 52, 130, 132, 248, 69, 53, 102, 77, 206, 52, 97, 59, }, { 246, 24, 21, 147, 31, 147, 34, 60, 118, 201, 240, 9, 76, 31, 151, 7, }, { 98, 107, 172, 82, 18, 82, 3, 2, 246, 85, 8, 139, 158, 18, 30, 121, }, { 204, 39, 158, 244, 21, 244, 226, 188, 223, 173, 181, 86, 26, 21, 27, 50, }, { 224, 13, 108, 15, 25, 15, 98, 253, 17, 84, 114, 60, 126, 25, 82, 20, }, { 140, 163, 182, 49, 94, 49, 206, 53, 83, 149, 212, 196, 62, 94, 224, 253, }, { 144, 234, 90, 233, 244, 233, 83, 98, 248, 126, 75, 34, 65, 244, 123, 30, }, { 71, 7, 19, 243, 128, 243, 154, 236, 214, 114, 54, 74, 75, 128, 173, 135, }, { 255, 94, 88, 201, 129, 201, 59, 147, 152, 23, 9, 162, 253, 129, 109, 223, }, { 129, 124, 24, 67, 57, 67, 165, 198, 197, 169, 158, 207, 28, 57, 232, 69, }, { 94, 96, 84, 9, 124, 9, 136, 240, 27, 162, 70, 36, 243, 124, 25, 28, }, { 251, 199, 187, 225, 120, 225, 73, 207, 224, 245, 186, 2, 110, 120, 159, 191, }, { 121, 161, 123, 188, 115, 188, 40, 48, 7, 244, 192, 181, 142, 115, 211, 210, }, { 54, 87, 109, 31, 194, 31, 86, 100, 33, 129, 83, 124, 32, 194, 89, 149, }, { 50, 206, 142, 55, 59, 55, 36, 56, 89, 99, 224, 220, 179, 59, 171, 245, }, { 14, 197, 118, 108, 85, 108, 175, 202, 180, 148, 174, 115, 222, 85, 172, 144, }, { 211, 116, 170, 50, 141, 50, 187, 210, 86, 238, 206, 200, 153, 141, 36, 249, }, { 51, 121, 198, 61, 148, 61, 217, 47, 71, 186, 188, 244, 231, 148, 118, 237, }, { 83, 191, 250, 123, 27, 123, 227, 3, 141, 158, 12, 47, 209, 27, 17, 164, }, { 135, 72, 107, 127, 93, 127, 238, 180, 129, 58, 149, 63, 39, 93, 99, 21, }, { 33, 245, 92, 137, 107, 137, 235, 178, 88, 197, 141, 97, 70, 107, 65, 158, }, { 212, 247, 145, 4, 70, 4, 13, 183, 12, 164, 153, 16, 246, 70, 114, 177, }, { 7, 131, 59, 54, 203, 54, 182, 101, 90, 74, 87, 216, 111, 203, 86, 72, }, { 72, 117, 45, 149, 122, 149, 200, 49, 124, 63, 196, 17, 193, 122, 220, 15, }, { 221, 177, 220, 94, 216, 94, 20, 24, 226, 122, 96, 187, 71, 216, 136, 105, }, { 110, 3, 74, 42, 218, 42, 149, 230, 126, 176, 30, 168, 232, 218, 203, 217, }, { 196, 214, 155, 164, 36, 164, 6, 4, 47, 170, 16, 213, 255, 36, 60, 242, }, { 88, 84, 39, 53, 24, 53, 195, 130, 95, 49, 77, 212, 200, 24, 146, 76, }, { 156, 130, 188, 145, 60, 145, 197, 134, 112, 155, 93, 1, 55, 60, 174, 190, }, { 5, 46, 171, 34, 86, 34, 143, 75, 102, 59, 239, 136, 199, 86, 47, 120, }, { 25, 103, 71, 250, 252, 250, 18, 28, 205, 208, 112, 110, 184, 252, 180, 155, }, { 216, 159, 119, 124, 142, 124, 155, 83, 132, 65, 143, 51, 128, 142, 167, 17, }, { 128, 203, 80, 73, 150, 73, 88, 209, 219, 112, 194, 231, 72, 150, 53, 93, }, { 158, 47, 44, 133, 161, 133, 252, 168, 76, 234, 229, 81, 159, 161, 215, 142, }, { 68, 29, 203, 237, 178, 237, 94, 213, 244, 218, 210, 50, 183, 178, 9, 175, }, { 202, 19, 237, 200, 113, 200, 169, 206, 155, 62, 190, 166, 33, 113, 144, 98, }, { 61, 188, 176, 81, 193, 81, 118, 229, 243, 46, 18, 135, 57, 193, 218, 125, }, { 46, 135, 98, 239, 145, 239, 185, 111, 242, 136, 127, 58, 204, 145, 48, 22, }, { 114, 74, 166, 242, 112, 242, 8, 177, 213, 91, 129, 78, 151, 112, 80, 58, }, { 66, 41, 184, 209, 214, 209, 21, 167, 176, 73, 217, 194, 140, 214, 130, 255, }, { 101, 232, 151, 100, 217, 100, 181, 103, 172, 31, 95, 83, 241, 217, 72, 49, }, }, { { 4, 195, 182, 129, 54, 62, 77, 222, 159, 190, 204, 146, 94, 114, 17, 143, }, { 197, 52, 41, 186, 51, 122, 33, 138, 39, 96, 155, 11, 144, 251, 50, 181, }, { 223, 123, 64, 155, 156, 225, 139, 100, 77, 61, 16, 168, 184, 45, 189, 183, }, { 183, 132, 39, 31, 101, 200, 102, 90, 38, 138, 121, 97, 24, 243, 196, 191, }, { 30, 140, 223, 160, 153, 165, 231, 48, 245, 227, 71, 49, 118, 164, 158, 141, }, { 38, 148, 20, 162, 94, 18, 167, 142, 67, 88, 5, 193, 196, 93, 112, 219, }, { 255, 172, 185, 25, 239, 210, 166, 91, 63, 132, 191, 178, 13, 59, 53, 69, }, { 200, 242, 252, 75, 133, 214, 116, 253, 18, 175, 63, 187, 132, 144, 148, 180, }, { 123, 181, 109, 213, 214, 32, 95, 121, 171, 155, 138, 72, 194, 17, 65, 132, }, { 122, 245, 161, 100, 58, 206, 221, 175, 252, 85, 185, 141, 52, 236, 212, 215, }, { 232, 37, 5, 201, 246, 229, 89, 194, 96, 22, 144, 161, 49, 134, 28, 70, }, { 160, 13, 155, 207, 124, 255, 153, 195, 121, 24, 86, 114, 36, 78, 237, 188, }, { 62, 91, 38, 34, 234, 150, 202, 15, 135, 90, 232, 43, 195, 178, 22, 127, }, { 233, 101, 201, 120, 26, 11, 219, 20, 55, 216, 163, 100, 199, 123, 137, 21, }, { 9, 5, 99, 112, 128, 146, 24, 169, 170, 113, 104, 34, 74, 25, 183, 142, }, { 24, 207, 50, 128, 180, 132, 109, 129, 196, 2, 237, 234, 7, 239, 102, 164, }, { 186, 66, 242, 238, 211, 100, 51, 45, 19, 69, 221, 209, 12, 152, 98, 190, }, { 131, 26, 245, 93, 248, 61, 241, 69, 242, 48, 172, 228, 72, 156, 25, 187, }, { 31, 204, 19, 17, 117, 75, 101, 230, 162, 45, 116, 244, 128, 89, 11, 222, }, { 51, 157, 243, 211, 92, 58, 159, 120, 178, 149, 76, 155, 215, 217, 176, 126, }, { 177, 199, 202, 63, 72, 233, 236, 235, 23, 107, 211, 186, 105, 184, 60, 150, }, { 182, 196, 235, 174, 137, 38, 228, 140, 113, 68, 74, 164, 238, 14, 81, 236, }, { 70, 46, 220, 231, 203, 71, 208, 207, 213, 80, 55, 239, 216, 103, 43, 14, }, { 120, 117, 250, 197, 33, 209, 26, 192, 82, 10, 223, 196, 27, 213, 61, 113, }, { 91, 98, 148, 87, 165, 19, 114, 70, 217, 34, 37, 82, 119, 7, 201, 118, }, { 128, 218, 98, 77, 15, 204, 180, 252, 11, 161, 249, 104, 145, 88, 101, 78, }, { 140, 92, 123, 13, 85, 142, 99, 93, 105, 160, 110, 29, 115, 206, 86, 28, }, { 235, 229, 146, 217, 1, 20, 28, 123, 153, 135, 197, 45, 232, 66, 96, 179, }, { 45, 17, 44, 115, 197, 159, 120, 72, 71, 118, 11, 170, 161, 125, 46, 243, }, { 251, 111, 15, 152, 217, 236, 235, 133, 160, 58, 115, 32, 83, 73, 36, 202, }, { 217, 56, 173, 187, 177, 192, 1, 213, 124, 220, 186, 115, 201, 102, 69, 158, }, { 224, 96, 170, 8, 154, 153, 195, 189, 157, 169, 203, 70, 141, 98, 62, 155, }, { 158, 86, 189, 237, 150, 105, 83, 204, 254, 66, 190, 89, 231, 252, 251, 195, }, { 54, 30, 137, 227, 134, 234, 80, 112, 122, 229, 179, 204, 127, 86, 52, 162, }, { 66, 237, 106, 102, 253, 121, 157, 17, 74, 238, 251, 125, 134, 21, 58, 129, }, { 67, 173, 166, 215, 17, 151, 31, 199, 29, 32, 200, 184, 112, 232, 175, 210, }, { 222, 59, 140, 42, 112, 15, 9, 178, 26, 243, 35, 109, 78, 208, 40, 228, }, { 175, 75, 21, 159, 209, 76, 11, 219, 226, 136, 148, 139, 31, 28, 162, 27, }, { 86, 164, 65, 166, 19, 191, 39, 49, 236, 237, 129, 226, 99, 108, 111, 119, }, { 219, 184, 246, 26, 170, 223, 198, 186, 210, 131, 220, 58, 230, 95, 172, 56, }, { 112, 48, 85, 4, 77, 173, 128, 191, 175, 181, 132, 35, 167, 49, 31, 172, }, { 63, 27, 234, 147, 6, 120, 72, 217, 208, 148, 219, 238, 53, 79, 131, 44, }, { 119, 51, 116, 149, 140, 98, 136, 216, 201, 154, 29, 61, 32, 135, 114, 214, }, { 117, 179, 47, 52, 151, 125, 79, 183, 103, 197, 123, 116, 15, 190, 155, 112, }, { 135, 217, 67, 220, 206, 3, 188, 155, 109, 142, 96, 118, 22, 238, 8, 52, }, { 147, 144, 104, 28, 32, 197, 6, 187, 203, 141, 26, 233, 243, 151, 93, 194, }, { 29, 76, 72, 176, 110, 84, 162, 137, 12, 114, 18, 189, 175, 96, 226, 120, }, { 253, 44, 226, 184, 244, 205, 97, 52, 145, 219, 217, 251, 34, 2, 220, 227, }, { 154, 149, 11, 108, 160, 87, 30, 18, 97, 252, 114, 203, 185, 142, 234, 76, }, { 234, 165, 94, 104, 237, 250, 158, 173, 206, 73, 246, 232, 30, 191, 245, 224, }, { 229, 227, 208, 56, 64, 73, 12, 181, 85, 217, 52, 17, 37, 237, 186, 71, }, { 85, 100, 214, 182, 228, 78, 98, 136, 21, 124, 212, 110, 186, 168, 19, 130, }, { 77, 171, 228, 54, 80, 202, 15, 9, 209, 126, 57, 132, 189, 71, 117, 38, }, { 47, 145, 119, 210, 222, 128, 191, 39, 233, 41, 109, 227, 142, 68, 199, 85, }, { 142, 220, 32, 172, 78, 145, 164, 50, 199, 255, 8, 84, 92, 247, 191, 186, }, { 171, 136, 163, 30, 231, 114, 70, 5, 125, 54, 88, 25, 65, 110, 179, 148, }, { 236, 230, 179, 72, 192, 219, 20, 28, 255, 168, 92, 51, 111, 244, 13, 201, }, { 100, 121, 126, 196, 163, 107, 58, 159, 9, 182, 254, 188, 66, 72, 74, 90, }, { 179, 71, 145, 158, 83, 246, 43, 132, 185, 52, 181, 243, 70, 129, 213, 48, }, { 213, 190, 180, 251, 235, 130, 214, 116, 30, 221, 45, 6, 43, 240, 118, 204, }, { 145, 16, 51, 189, 59, 218, 193, 212, 101, 210, 124, 160, 220, 174, 180, 100, }, { 94, 225, 238, 103, 127, 195, 189, 78, 17, 82, 218, 5, 223, 136, 77, 170, }, { 33, 151, 53, 51, 159, 221, 175, 233, 37, 119, 156, 223, 67, 235, 29, 161, }, { 73, 104, 82, 183, 102, 244, 66, 215, 78, 192, 245, 22, 227, 53, 100, 169, }, { 95, 161, 34, 214, 147, 45, 63, 152, 70, 156, 233, 192, 41, 117, 216, 249, }, { 101, 57, 178, 117, 79, 133, 184, 73, 94, 120, 205, 121, 180, 181, 223, 9, }, { 83, 39, 59, 150, 201, 111, 232, 57, 36, 157, 126, 181, 203, 227, 235, 171, }, { 39, 212, 216, 19, 178, 252, 37, 88, 20, 150, 54, 4, 50, 160, 229, 136, }, { 204, 49, 74, 202, 179, 232, 57, 35, 141, 17, 243, 41, 218, 226, 133, 59, }, { 97, 250, 4, 244, 121, 187, 245, 151, 193, 198, 1, 235, 234, 199, 206, 134, }, { 130, 90, 57, 236, 20, 211, 115, 147, 165, 254, 159, 33, 190, 97, 140, 232, }, { 207, 241, 221, 218, 68, 25, 124, 154, 116, 128, 166, 165, 3, 38, 249, 206, }, { 250, 47, 195, 41, 53, 2, 105, 83, 247, 244, 64, 229, 165, 180, 177, 153, }, { 191, 193, 136, 222, 9, 180, 252, 37, 219, 53, 34, 134, 164, 23, 230, 98, }, { 202, 114, 167, 234, 158, 201, 179, 146, 188, 240, 89, 242, 171, 169, 125, 18, }, { 78, 107, 115, 38, 167, 59, 74, 176, 40, 239, 108, 8, 100, 131, 9, 211, }, { 151, 83, 222, 157, 22, 251, 75, 101, 84, 51, 214, 123, 173, 229, 76, 77, }, { 155, 213, 199, 221, 76, 185, 156, 196, 54, 50, 65, 14, 79, 115, 127, 31, }, { 141, 28, 183, 188, 185, 96, 225, 139, 62, 110, 93, 216, 133, 51, 195, 79, }, { 104, 255, 103, 132, 249, 41, 237, 62, 107, 183, 105, 201, 160, 222, 121, 8, }, { 21, 9, 231, 113, 2, 40, 56, 246, 241, 205, 73, 90, 19, 132, 192, 165, }, { 252, 108, 46, 9, 24, 35, 227, 226, 198, 21, 234, 62, 212, 255, 73, 176, }, { 254, 236, 117, 168, 3, 60, 36, 141, 104, 74, 140, 119, 251, 198, 160, 22, }, { 88, 162, 3, 71, 82, 226, 55, 255, 32, 179, 112, 222, 174, 195, 181, 131, }, { 18, 10, 198, 224, 195, 231, 48, 145, 151, 226, 208, 68, 148, 50, 173, 223, }, { 27, 15, 165, 144, 67, 117, 40, 56, 61, 147, 184, 102, 222, 43, 26, 81, }, { 16, 138, 157, 65, 216, 248, 247, 254, 57, 189, 182, 13, 187, 11, 68, 121, }, { 193, 247, 159, 59, 5, 68, 108, 84, 184, 222, 87, 153, 206, 137, 35, 58, }, { 226, 224, 241, 169, 129, 134, 4, 210, 51, 246, 173, 15, 162, 91, 215, 61, }, { 25, 143, 254, 49, 88, 106, 239, 87, 147, 204, 222, 47, 241, 18, 243, 247, }, { 82, 103, 247, 39, 37, 129, 106, 239, 115, 83, 77, 112, 61, 30, 126, 248, }, { 239, 38, 36, 88, 55, 42, 81, 165, 6, 57, 9, 191, 182, 48, 113, 60, }, { 220, 187, 215, 139, 107, 16, 206, 221, 180, 172, 69, 36, 97, 233, 193, 66, }, { 240, 234, 55, 73, 66, 97, 52, 67, 164, 20, 125, 75, 54, 105, 122, 226, }, { 60, 219, 125, 131, 241, 137, 13, 96, 41, 5, 142, 98, 236, 139, 255, 217, }, { 156, 214, 230, 76, 141, 118, 148, 163, 80, 29, 216, 16, 200, 197, 18, 101, }, { 190, 129, 68, 111, 229, 90, 126, 243, 140, 251, 17, 67, 82, 234, 115, 49, }, { 56, 24, 203, 2, 199, 183, 64, 190, 182, 187, 66, 240, 178, 249, 238, 86, }, { 43, 82, 193, 83, 232, 190, 242, 249, 118, 151, 161, 113, 208, 54, 214, 218, }, { 201, 178, 48, 250, 105, 56, 246, 43, 69, 97, 12, 126, 114, 109, 1, 231, }, { 36, 20, 79, 3, 69, 13, 96, 225, 237, 7, 99, 136, 235, 100, 153, 125, }, { 152, 21, 80, 205, 187, 72, 217, 125, 207, 163, 20, 130, 150, 183, 3, 234, }, { 48, 93, 100, 195, 171, 203, 218, 193, 75, 4, 25, 23, 14, 29, 204, 139, }, { 12, 134, 25, 64, 90, 66, 215, 161, 98, 1, 151, 117, 226, 150, 51, 82, }, { 105, 191, 171, 53, 21, 199, 111, 232, 60, 121, 90, 12, 86, 35, 236, 91, }, { 84, 36, 26, 7, 8, 160, 224, 94, 66, 178, 231, 171, 76, 85, 134, 209, }, { 238, 102, 232, 233, 219, 196, 211, 115, 81, 247, 58, 122, 64, 205, 228, 111, }, { 181, 4, 124, 190, 126, 215, 161, 53, 136, 213, 31, 40, 55, 202, 45, 25, }, { 79, 43, 191, 151, 75, 213, 200, 102, 127, 33, 95, 205, 146, 126, 156, 128, }, { 57, 88, 7, 179, 43, 89, 194, 104, 225, 117, 113, 53, 68, 4, 123, 5, }, { 106, 127, 60, 37, 226, 54, 42, 81, 197, 232, 15, 128, 143, 231, 144, 174, }, { 28, 12, 132, 1, 130, 186, 32, 95, 91, 188, 33, 120, 89, 157, 119, 43, }, { 137, 223, 1, 61, 143, 94, 172, 85, 161, 208, 145, 74, 219, 65, 210, 192, }, { 102, 249, 37, 101, 184, 116, 253, 240, 167, 233, 152, 245, 109, 113, 163, 252, }, { 165, 142, 225, 255, 166, 47, 86, 203, 177, 104, 169, 37, 140, 193, 105, 96, }, { 228, 163, 28, 137, 172, 167, 142, 99, 2, 23, 7, 212, 211, 16, 47, 20, }, { 114, 176, 14, 165, 86, 178, 71, 208, 1, 234, 226, 106, 136, 8, 246, 10, }, { 246, 169, 218, 105, 111, 64, 190, 242, 149, 245, 215, 144, 71, 34, 130, 203, }, { 20, 73, 43, 192, 238, 198, 186, 32, 166, 3, 122, 159, 229, 121, 85, 246, }, { 2, 128, 91, 161, 27, 31, 199, 111, 174, 95, 102, 73, 47, 57, 233, 166, }, { 80, 231, 172, 134, 62, 158, 173, 128, 221, 12, 43, 57, 18, 39, 151, 94, }, { 189, 65, 211, 127, 18, 171, 59, 74, 117, 106, 68, 207, 139, 46, 15, 196, }, { 159, 22, 113, 92, 122, 135, 209, 26, 169, 140, 141, 156, 17, 1, 110, 144, }, { 227, 160, 61, 24, 109, 104, 134, 4, 100, 56, 158, 202, 84, 166, 66, 110, }, { 5, 131, 122, 48, 218, 208, 207, 8, 200, 112, 255, 87, 168, 143, 132, 220, }, { 7, 3, 33, 145, 193, 207, 8, 103, 102, 47, 153, 30, 135, 182, 109, 122, }, { 136, 159, 205, 140, 99, 176, 46, 131, 246, 30, 162, 143, 45, 188, 71, 147, }, { 203, 50, 107, 91, 114, 39, 49, 68, 235, 62, 106, 55, 93, 84, 232, 65, }, { 58, 152, 144, 163, 220, 168, 135, 209, 24, 228, 36, 185, 157, 192, 7, 240, }, { 133, 89, 24, 125, 213, 28, 123, 244, 195, 209, 6, 63, 57, 215, 225, 146, }, { 65, 45, 253, 118, 10, 136, 216, 168, 179, 127, 174, 241, 95, 209, 70, 116, }, { 42, 18, 13, 226, 4, 80, 112, 47, 33, 89, 146, 180, 38, 203, 67, 137, }, { 146, 208, 164, 173, 204, 43, 132, 109, 156, 67, 41, 44, 5, 106, 200, 145, }, { 185, 130, 101, 254, 36, 149, 118, 148, 234, 212, 136, 93, 213, 92, 30, 75, }, { 230, 35, 71, 40, 183, 184, 73, 12, 172, 72, 97, 157, 252, 41, 198, 178, }, { 242, 106, 108, 232, 89, 126, 243, 44, 10, 75, 27, 2, 25, 80, 147, 68, }, { 40, 146, 86, 67, 31, 79, 183, 64, 143, 6, 244, 253, 9, 242, 170, 47, }, { 125, 246, 128, 245, 251, 1, 213, 200, 154, 122, 32, 147, 179, 90, 185, 173, }, { 187, 2, 62, 95, 63, 138, 177, 251, 68, 139, 238, 20, 250, 101, 247, 237, }, { 243, 42, 160, 89, 181, 144, 113, 250, 93, 133, 40, 199, 239, 173, 6, 23, }, { 231, 99, 139, 153, 91, 86, 203, 218, 251, 134, 82, 88, 10, 212, 83, 225, }, { 173, 203, 78, 62, 202, 83, 204, 180, 76, 215, 242, 194, 48, 37, 75, 189, }, { 14, 6, 66, 225, 65, 93, 16, 206, 204, 94, 241, 60, 205, 175, 218, 244, }, { 118, 115, 184, 36, 96, 140, 10, 14, 158, 84, 46, 248, 214, 122, 231, 133, }, { 59, 216, 92, 18, 48, 70, 5, 7, 79, 42, 23, 124, 107, 61, 146, 163, }, { 109, 124, 29, 180, 35, 249, 34, 54, 163, 199, 150, 158, 8, 81, 253, 212, }, { 32, 215, 249, 130, 115, 51, 45, 63, 114, 185, 175, 26, 181, 22, 136, 242, }, { 169, 8, 248, 191, 252, 109, 129, 106, 211, 105, 62, 80, 110, 87, 90, 50, }, { 11, 133, 56, 209, 155, 141, 223, 198, 4, 46, 14, 107, 101, 32, 94, 40, }, { 206, 177, 17, 107, 168, 247, 254, 76, 35, 78, 149, 96, 245, 219, 108, 157, }, { 143, 156, 236, 29, 162, 127, 38, 228, 144, 49, 59, 145, 170, 10, 42, 233, }, { 148, 147, 73, 141, 225, 10, 14, 220, 173, 162, 131, 247, 116, 33, 48, 184, }, { 76, 235, 40, 135, 188, 36, 141, 223, 134, 176, 10, 65, 75, 186, 224, 117, }, { 41, 210, 154, 242, 243, 161, 53, 150, 216, 200, 199, 56, 255, 15, 63, 124, }, { 90, 34, 88, 230, 73, 253, 240, 144, 142, 236, 22, 151, 129, 250, 92, 37, }, { 180, 68, 176, 15, 146, 57, 35, 227, 223, 27, 44, 237, 193, 55, 184, 74, }, { 110, 188, 138, 164, 212, 8, 103, 143, 90, 86, 195, 18, 209, 149, 129, 33, }, { 26, 79, 105, 33, 175, 155, 170, 238, 106, 93, 139, 163, 40, 214, 143, 2, }, { 247, 233, 22, 216, 131, 174, 60, 36, 194, 59, 228, 85, 177, 223, 23, 152, }, { 103, 185, 233, 212, 84, 154, 127, 38, 240, 39, 171, 48, 155, 140, 54, 175, }, { 212, 254, 120, 74, 7, 108, 84, 162, 73, 19, 30, 195, 221, 13, 227, 159, }, { 184, 194, 169, 79, 200, 123, 244, 66, 189, 26, 187, 152, 35, 161, 139, 24, }, { 216, 120, 97, 10, 93, 46, 131, 3, 43, 18, 137, 182, 63, 155, 208, 205, }, { 138, 31, 150, 45, 120, 175, 233, 236, 88, 65, 196, 198, 2, 133, 174, 53, }, { 218, 248, 58, 171, 70, 49, 68, 108, 133, 77, 239, 255, 16, 162, 57, 107, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 61, 155, 177, 50, 29, 103, 143, 182, 126, 203, 189, 167, 26, 118, 106, 138, }, { 153, 85, 156, 124, 87, 166, 91, 171, 152, 109, 39, 71, 96, 74, 150, 185, }, { 211, 253, 89, 219, 198, 163, 92, 197, 47, 60, 135, 221, 90, 187, 142, 229, }, { 157, 150, 42, 253, 97, 152, 22, 117, 7, 211, 235, 213, 62, 56, 135, 54, }, { 126, 54, 23, 229, 12, 240, 144, 113, 99, 235, 117, 31, 106, 158, 197, 88, }, { 6, 67, 237, 32, 45, 33, 138, 177, 49, 225, 170, 219, 113, 75, 248, 41, }, { 209, 125, 2, 122, 221, 188, 155, 170, 129, 99, 225, 148, 117, 130, 103, 67, }, { 170, 200, 111, 175, 11, 156, 196, 211, 42, 248, 107, 220, 183, 147, 38, 199, }, { 164, 206, 45, 78, 74, 193, 212, 29, 230, 166, 154, 224, 122, 60, 252, 51, }, { 3, 192, 151, 16, 247, 241, 69, 185, 249, 145, 85, 140, 217, 196, 124, 245, }, { 35, 23, 110, 146, 132, 194, 104, 134, 139, 40, 250, 150, 108, 210, 244, 7, }, { 10, 197, 244, 96, 119, 99, 93, 16, 83, 224, 61, 174, 147, 221, 203, 123, }, { 124, 182, 76, 68, 23, 239, 87, 30, 205, 180, 19, 86, 69, 167, 44, 254, }, { 34, 87, 162, 35, 104, 44, 234, 80, 220, 230, 201, 83, 154, 47, 97, 84, }, { 55, 94, 69, 82, 106, 4, 210, 166, 45, 43, 128, 9, 137, 171, 161, 241, }, { 74, 168, 197, 167, 145, 5, 7, 110, 183, 81, 160, 154, 58, 241, 24, 92, }, { 46, 209, 187, 99, 50, 110, 61, 241, 190, 231, 94, 38, 120, 185, 82, 6, }, { 37, 84, 131, 178, 169, 227, 226, 55, 186, 201, 80, 77, 29, 153, 12, 46, }, { 248, 175, 152, 136, 46, 29, 174, 60, 89, 171, 38, 172, 138, 141, 88, 63, }, { 221, 251, 27, 58, 135, 254, 76, 11, 227, 98, 118, 225, 151, 20, 84, 17, }, { 49, 29, 168, 114, 71, 37, 88, 23, 28, 202, 42, 210, 248, 224, 89, 216, }, { 116, 243, 227, 133, 123, 147, 205, 97, 48, 11, 72, 177, 249, 67, 14, 35, }, { 89, 226, 207, 246, 190, 12, 181, 41, 119, 125, 67, 27, 88, 62, 32, 208, }, { 205, 113, 134, 123, 95, 6, 187, 245, 218, 223, 192, 236, 44, 31, 16, 104, }, { 93, 33, 121, 119, 136, 50, 248, 247, 232, 195, 143, 137, 6, 76, 49, 95, }, { 8, 69, 175, 193, 108, 124, 154, 127, 253, 191, 91, 231, 188, 228, 34, 221, }, { 127, 118, 219, 84, 224, 30, 18, 167, 52, 37, 70, 218, 156, 99, 80, 11, }, { 166, 78, 118, 239, 81, 222, 19, 114, 72, 249, 252, 169, 85, 5, 21, 149, }, { 249, 239, 84, 57, 194, 243, 44, 234, 14, 101, 21, 105, 124, 112, 205, 108, }, { 144, 80, 255, 12, 215, 52, 67, 2, 50, 28, 79, 101, 42, 83, 33, 55, }, { 15, 70, 142, 80, 173, 179, 146, 24, 155, 144, 194, 249, 59, 82, 79, 167, }, { 176, 135, 6, 142, 164, 7, 110, 61, 64, 165, 224, 127, 159, 69, 169, 197, }, { 172, 139, 130, 143, 38, 189, 78, 98, 27, 25, 193, 7, 198, 216, 222, 238, }, { 96, 186, 200, 69, 149, 85, 119, 65, 150, 8, 50, 46, 28, 58, 91, 213, }, { 108, 60, 209, 5, 207, 23, 160, 224, 244, 9, 165, 91, 254, 172, 104, 135, }, { 19, 74, 10, 81, 47, 9, 178, 71, 192, 44, 227, 129, 98, 207, 56, 140, }, { 188, 1, 31, 206, 254, 69, 185, 156, 34, 164, 119, 10, 125, 211, 154, 151, }, { 50, 221, 63, 98, 176, 212, 29, 174, 229, 91, 127, 94, 33, 36, 37, 45, }, { 241, 170, 251, 248, 174, 143, 182, 149, 243, 218, 78, 142, 192, 148, 239, 177, }, { 214, 126, 35, 235, 28, 115, 147, 205, 231, 76, 120, 138, 242, 52, 10, 57, }, { 68, 174, 135, 70, 208, 88, 23, 160, 123, 15, 81, 166, 247, 94, 194, 168, }, { 98, 58, 147, 228, 142, 74, 176, 46, 56, 87, 84, 103, 51, 3, 178, 115, }, { 168, 72, 52, 14, 16, 131, 3, 188, 132, 167, 13, 149, 152, 170, 207, 97, }, { 64, 109, 49, 199, 230, 102, 90, 126, 228, 177, 157, 52, 169, 44, 211, 39, }, { 149, 211, 133, 60, 13, 228, 140, 10, 250, 108, 176, 50, 130, 220, 165, 235, }, { 17, 202, 81, 240, 52, 22, 117, 40, 110, 115, 133, 200, 77, 246, 209, 42, }, { 139, 95, 90, 156, 148, 65, 107, 58, 15, 143, 247, 3, 244, 120, 59, 102, }, { 1, 64, 204, 177, 236, 238, 130, 214, 87, 206, 51, 197, 246, 253, 149, 83, }, { 13, 198, 213, 241, 182, 172, 85, 119, 53, 207, 164, 176, 20, 107, 166, 1, }, { 225, 32, 102, 185, 118, 119, 65, 107, 202, 103, 248, 131, 123, 159, 171, 200, }, { 107, 63, 240, 148, 14, 216, 168, 135, 146, 38, 60, 69, 121, 26, 5, 253, }, { 194, 55, 8, 43, 242, 181, 41, 237, 65, 79, 2, 21, 23, 77, 95, 207, }, { 92, 97, 181, 198, 100, 220, 122, 33, 191, 13, 188, 76, 240, 177, 164, 12, }, { 199, 180, 114, 27, 40, 101, 230, 229, 137, 63, 253, 66, 191, 194, 219, 19, }, { 132, 25, 212, 204, 57, 242, 249, 34, 148, 31, 53, 250, 207, 42, 116, 193, }, { 69, 238, 75, 247, 60, 182, 149, 118, 44, 193, 98, 99, 1, 163, 87, 251, }, { 121, 53, 54, 116, 205, 63, 152, 22, 5, 196, 236, 1, 237, 40, 168, 34, }, { 75, 232, 9, 22, 125, 235, 133, 184, 224, 159, 147, 95, 204, 12, 141, 15, }, { 72, 40, 158, 6, 138, 26, 192, 1, 25, 14, 198, 211, 21, 200, 241, 250, }, { 111, 252, 70, 21, 56, 230, 229, 89, 13, 152, 240, 215, 39, 104, 20, 114, }, { 167, 14, 186, 94, 189, 48, 145, 164, 31, 55, 207, 108, 163, 248, 128, 198, }, { 162, 141, 192, 110, 103, 224, 94, 172, 215, 71, 48, 59, 11, 119, 4, 26, }, { 192, 183, 83, 138, 233, 170, 238, 130, 239, 16, 100, 92, 56, 116, 182, 105, }, { 44, 81, 224, 194, 41, 113, 250, 158, 16, 184, 56, 111, 87, 128, 187, 160, }, { 129, 154, 174, 252, 227, 34, 54, 42, 92, 111, 202, 173, 103, 165, 240, 29, }, { 208, 61, 206, 203, 49, 82, 25, 124, 214, 173, 210, 81, 131, 127, 242, 16, }, { 23, 137, 188, 208, 25, 55, 255, 153, 95, 146, 47, 19, 60, 189, 41, 3, }, { 163, 205, 12, 223, 139, 14, 220, 122, 128, 137, 3, 254, 253, 138, 145, 73, }, { 210, 189, 149, 106, 42, 77, 222, 19, 120, 242, 180, 24, 172, 70, 27, 182, }, { 87, 228, 141, 23, 255, 81, 165, 231, 187, 35, 178, 39, 149, 145, 250, 36, }, { 113, 112, 153, 181, 161, 67, 2, 105, 248, 123, 183, 230, 81, 204, 138, 255, }, { 161, 77, 87, 126, 144, 17, 27, 21, 46, 214, 101, 183, 210, 179, 120, 239, }, { 195, 119, 196, 154, 30, 91, 171, 59, 22, 129, 49, 208, 225, 176, 202, 156, }, { 81, 167, 96, 55, 210, 112, 47, 86, 138, 194, 24, 252, 228, 218, 2, 13, }, { 53, 222, 30, 243, 113, 27, 21, 201, 131, 116, 230, 64, 166, 146, 72, 87, }, { 71, 110, 16, 86, 39, 169, 82, 25, 130, 158, 4, 42, 46, 154, 190, 93, }, { 245, 105, 77, 121, 152, 177, 251, 75, 108, 100, 130, 28, 158, 230, 254, 62, }, { 178, 7, 93, 47, 191, 24, 169, 82, 238, 250, 134, 54, 176, 124, 64, 99, }, { 215, 62, 239, 90, 240, 157, 17, 27, 176, 130, 75, 79, 4, 201, 159, 106, }, { 22, 201, 112, 97, 245, 217, 125, 79, 8, 92, 28, 214, 202, 64, 188, 80, }, { 134, 153, 143, 109, 34, 237, 62, 77, 58, 64, 83, 179, 224, 19, 157, 103, }, { 115, 240, 194, 20, 186, 92, 197, 6, 86, 36, 209, 175, 126, 245, 99, 89, }, { 196, 116, 229, 11, 223, 148, 163, 92, 112, 174, 168, 206, 102, 6, 167, 230, }, { 52, 158, 210, 66, 157, 245, 151, 31, 212, 186, 213, 133, 80, 111, 221, 4, }, { 198, 244, 190, 170, 196, 139, 100, 51, 222, 241, 206, 135, 73, 63, 78, 64, }, { 150, 19, 18, 44, 250, 21, 201, 179, 3, 253, 229, 190, 91, 24, 217, 30, }, { 237, 166, 127, 249, 44, 53, 150, 202, 168, 102, 111, 246, 153, 9, 152, 154, }, { 244, 41, 129, 200, 116, 95, 121, 157, 59, 170, 177, 217, 104, 27, 107, 109, }, { 174, 11, 217, 46, 61, 162, 137, 13, 181, 70, 167, 78, 233, 225, 55, 72, }, { 99, 122, 95, 85, 98, 164, 50, 248, 111, 153, 103, 162, 197, 254, 39, 32, }, }, { { 121, 128, 171, 231, 169, 111, 80, 151, 190, 32, 219, 90, 181, 26, 240, 180, }, { 145, 26, 151, 22, 20, 69, 159, 110, 96, 231, 239, 85, 10, 88, 98, 170, }, { 153, 220, 95, 147, 209, 50, 148, 48, 61, 55, 252, 103, 137, 9, 127, 206, }, { 185, 66, 249, 194, 67, 45, 184, 139, 138, 241, 176, 175, 192, 142, 11, 157, }, { 113, 70, 99, 98, 108, 24, 91, 201, 227, 240, 200, 104, 54, 75, 237, 208, }, { 234, 74, 14, 65, 29, 71, 189, 15, 88, 243, 64, 226, 239, 199, 4, 7, }, { 215, 86, 78, 167, 208, 204, 81, 2, 132, 244, 235, 242, 104, 217, 243, 39, }, { 149, 121, 243, 181, 151, 159, 123, 65, 175, 143, 7, 76, 170, 145, 141, 152, }, { 85, 187, 161, 144, 125, 221, 147, 93, 155, 94, 108, 185, 223, 5, 118, 177, }, { 218, 155, 251, 217, 198, 182, 135, 8, 85, 86, 42, 78, 99, 226, 74, 156, }, { 219, 243, 226, 129, 150, 97, 190, 115, 22, 76, 16, 217, 75, 65, 1, 113, }, { 181, 231, 85, 228, 5, 128, 87, 250, 24, 73, 75, 132, 227, 22, 249, 203, }, { 63, 204, 114, 86, 109, 230, 158, 251, 90, 51, 223, 253, 215, 155, 97, 57, }, { 84, 211, 184, 200, 45, 10, 170, 38, 216, 68, 86, 46, 247, 166, 61, 92, }, { 125, 227, 207, 68, 42, 181, 180, 184, 113, 72, 51, 67, 21, 211, 31, 134, }, { 213, 134, 124, 23, 112, 161, 35, 244, 2, 192, 159, 31, 56, 92, 101, 62, }, { 189, 33, 157, 97, 192, 247, 92, 164, 69, 153, 88, 182, 96, 71, 228, 175, }, { 169, 13, 170, 11, 10, 195, 174, 55, 48, 146, 150, 203, 5, 44, 49, 85, }, { 254, 102, 57, 43, 215, 115, 79, 156, 45, 248, 142, 159, 138, 172, 209, 253, }, { 59, 175, 22, 245, 238, 60, 122, 212, 149, 91, 55, 228, 119, 82, 142, 11, }, { 29, 130, 230, 183, 95, 148, 192, 182, 107, 193, 231, 216, 206, 153, 131, 115, }, { 54, 98, 163, 139, 248, 70, 172, 222, 68, 249, 246, 88, 124, 105, 55, 176, }, { 56, 23, 61, 29, 30, 134, 49, 89, 80, 117, 121, 158, 15, 116, 83, 255, }, { 7, 219, 79, 75, 115, 96, 175, 162, 10, 70, 166, 99, 216, 239, 50, 198, }, { 27, 49, 176, 164, 124, 35, 86, 111, 34, 157, 123, 44, 62, 213, 250, 88, }, { 251, 109, 68, 208, 4, 126, 146, 200, 161, 138, 92, 17, 2, 198, 117, 34, }, { 112, 46, 122, 58, 60, 207, 98, 178, 160, 234, 242, 255, 30, 232, 166, 61, }, { 137, 147, 12, 90, 152, 220, 130, 140, 135, 84, 218, 3, 76, 171, 69, 6, }, { 74, 233, 117, 151, 130, 36, 33, 29, 118, 171, 255, 140, 65, 25, 99, 219, }, { 174, 214, 229, 64, 121, 163, 1, 149, 58, 212, 48, 168, 221, 195, 3, 147, }, { 61, 28, 64, 230, 205, 139, 236, 13, 220, 7, 171, 16, 135, 30, 247, 32, }, { 41, 48, 119, 140, 7, 191, 30, 158, 169, 12, 101, 109, 226, 117, 34, 218, }, { 138, 43, 39, 178, 104, 102, 201, 1, 66, 122, 148, 121, 52, 141, 152, 242, }, { 205, 15, 231, 91, 252, 56, 62, 22, 229, 115, 170, 73, 126, 175, 66, 146, }, { 65, 151, 150, 250, 183, 233, 97, 206, 238, 85, 162, 196, 186, 110, 163, 75, }, { 206, 183, 204, 179, 12, 130, 117, 155, 32, 93, 228, 51, 6, 137, 159, 102, }, { 22, 252, 5, 218, 106, 89, 128, 101, 243, 63, 186, 144, 53, 238, 67, 227, }, { 108, 196, 133, 213, 51, 140, 155, 127, 136, 49, 47, 176, 248, 210, 110, 163, }, { 31, 82, 212, 7, 255, 249, 178, 64, 237, 245, 147, 53, 158, 28, 21, 106, }, { 224, 92, 244, 116, 120, 93, 196, 167, 131, 23, 39, 61, 60, 19, 143, 122, }, { 245, 24, 218, 70, 226, 190, 15, 79, 181, 6, 211, 215, 113, 219, 17, 109, }, { 176, 236, 40, 31, 214, 141, 138, 174, 148, 59, 153, 10, 107, 124, 93, 20, }, { 222, 248, 159, 122, 69, 108, 99, 39, 154, 62, 194, 87, 195, 43, 165, 174, }, { 3, 184, 43, 232, 240, 186, 75, 141, 197, 46, 78, 122, 120, 38, 221, 244, }, { 208, 141, 1, 236, 163, 172, 254, 160, 142, 178, 77, 145, 176, 54, 193, 225, }, { 142, 72, 67, 17, 235, 188, 45, 46, 141, 18, 124, 96, 148, 68, 119, 192, }, { 35, 38, 141, 185, 98, 165, 103, 54, 114, 232, 2, 178, 49, 161, 169, 167, }, { 10, 22, 250, 53, 101, 26, 121, 168, 219, 228, 103, 223, 211, 212, 139, 125, }, { 243, 171, 140, 85, 193, 9, 153, 150, 252, 90, 79, 35, 129, 151, 104, 70, }, { 6, 179, 86, 19, 35, 183, 150, 217, 73, 92, 156, 244, 240, 76, 121, 43, }, { 223, 144, 134, 34, 21, 187, 90, 92, 217, 36, 248, 192, 235, 136, 238, 67, }, { 77, 50, 58, 220, 241, 68, 142, 191, 124, 237, 89, 239, 153, 246, 81, 29, }, { 152, 180, 70, 203, 129, 229, 173, 75, 126, 45, 198, 240, 161, 170, 52, 35, }, { 151, 169, 193, 5, 55, 242, 9, 183, 41, 187, 115, 161, 250, 20, 27, 129, }, { 173, 110, 206, 168, 137, 25, 74, 24, 255, 250, 126, 210, 165, 229, 222, 103, }, { 21, 68, 46, 50, 154, 227, 203, 232, 54, 17, 244, 234, 77, 200, 158, 23, }, { 162, 115, 73, 102, 63, 14, 238, 228, 168, 108, 203, 131, 254, 91, 241, 197, }, { 171, 221, 152, 187, 170, 174, 220, 193, 182, 166, 226, 38, 85, 169, 167, 76, }, { 192, 194, 82, 37, 234, 66, 232, 28, 52, 209, 107, 245, 117, 148, 251, 41, }, { 182, 95, 126, 12, 245, 58, 28, 119, 221, 103, 5, 254, 155, 48, 36, 63, }, { 83, 8, 247, 131, 94, 106, 5, 132, 210, 2, 240, 77, 47, 73, 15, 154, }, { 237, 145, 65, 10, 110, 39, 18, 173, 82, 181, 230, 129, 55, 40, 54, 193, }, { 193, 170, 75, 125, 186, 149, 209, 103, 119, 203, 81, 98, 93, 55, 176, 196, }, { 225, 52, 237, 44, 40, 138, 253, 220, 192, 13, 29, 170, 20, 176, 196, 151, }, { 98, 177, 27, 67, 213, 76, 6, 248, 156, 189, 160, 118, 139, 207, 10, 236, }, { 36, 253, 194, 242, 17, 197, 200, 148, 120, 174, 164, 209, 233, 78, 155, 97, }, { 233, 242, 37, 169, 237, 253, 246, 130, 157, 221, 14, 152, 151, 225, 217, 243, }, { 101, 106, 84, 8, 166, 44, 169, 90, 150, 251, 6, 21, 83, 32, 56, 42, }, { 236, 249, 88, 82, 62, 240, 43, 214, 17, 175, 220, 22, 31, 139, 125, 44, }, { 93, 125, 105, 21, 184, 170, 152, 3, 198, 142, 127, 139, 92, 84, 107, 213, }, { 38, 45, 240, 66, 177, 168, 186, 98, 254, 154, 208, 60, 185, 203, 13, 120, }, { 190, 153, 182, 137, 48, 77, 23, 41, 128, 183, 22, 204, 24, 97, 57, 91, }, { 33, 246, 191, 9, 194, 200, 21, 192, 244, 220, 118, 95, 97, 36, 63, 190, }, { 75, 129, 108, 207, 210, 243, 24, 102, 53, 177, 197, 27, 105, 186, 40, 54, }, { 72, 57, 71, 39, 34, 73, 83, 235, 240, 159, 139, 97, 17, 156, 245, 194, }, { 202, 212, 168, 16, 143, 88, 145, 180, 239, 53, 12, 42, 166, 64, 112, 84, }, { 247, 200, 232, 246, 66, 211, 125, 185, 51, 50, 167, 58, 33, 94, 135, 116, }, { 124, 139, 214, 28, 122, 98, 141, 195, 50, 82, 9, 212, 61, 112, 84, 107, }, { 255, 14, 32, 115, 135, 164, 118, 231, 110, 226, 180, 8, 162, 15, 154, 16, }, { 32, 158, 166, 81, 146, 31, 44, 187, 183, 198, 76, 200, 73, 135, 116, 83, }, { 209, 229, 24, 180, 243, 123, 199, 219, 205, 168, 119, 6, 152, 149, 138, 12, }, { 133, 54, 160, 124, 222, 113, 109, 253, 21, 236, 33, 40, 111, 51, 183, 80, }, { 88, 118, 20, 238, 107, 167, 69, 87, 74, 252, 173, 5, 212, 62, 207, 10, }, { 73, 81, 94, 127, 114, 158, 106, 144, 179, 133, 177, 246, 57, 63, 190, 47, }, { 250, 5, 93, 136, 84, 169, 171, 179, 226, 144, 102, 134, 42, 101, 62, 207, }, { 135, 230, 146, 204, 126, 28, 31, 11, 147, 216, 85, 197, 63, 182, 33, 73, }, { 39, 69, 233, 26, 225, 127, 131, 25, 189, 128, 234, 171, 145, 104, 70, 149, }, { 232, 154, 60, 241, 189, 42, 207, 249, 222, 199, 52, 15, 191, 66, 146, 30, }, { 244, 112, 195, 30, 178, 105, 54, 52, 246, 28, 233, 64, 89, 120, 90, 128, }, { 90, 166, 38, 94, 203, 202, 55, 161, 204, 200, 217, 232, 132, 187, 89, 19, }, { 102, 210, 127, 224, 86, 150, 226, 215, 83, 213, 72, 111, 43, 6, 229, 222, }, { 240, 19, 167, 189, 49, 179, 210, 27, 57, 116, 1, 89, 249, 177, 181, 178, }, { 203, 188, 177, 72, 223, 143, 168, 207, 172, 47, 54, 189, 142, 227, 59, 185, }, { 14, 117, 158, 150, 230, 192, 157, 135, 20, 140, 143, 198, 115, 29, 100, 79, }, { 226, 140, 198, 196, 216, 48, 182, 81, 5, 35, 83, 208, 108, 150, 25, 99, }, { 87, 107, 147, 32, 221, 176, 225, 171, 29, 106, 24, 84, 143, 128, 224, 168, }, { 196, 161, 54, 134, 105, 152, 12, 51, 251, 185, 131, 236, 213, 93, 20, 27, }, { 155, 12, 109, 35, 113, 95, 230, 198, 187, 3, 136, 138, 217, 140, 233, 215, }, { 238, 41, 106, 226, 158, 157, 89, 32, 151, 155, 168, 251, 79, 14, 235, 53, }, { 26, 89, 169, 252, 44, 244, 111, 20, 97, 135, 65, 187, 22, 118, 177, 181, }, { 55, 10, 186, 211, 168, 145, 149, 165, 7, 227, 204, 207, 84, 202, 124, 93, }, { 46, 235, 56, 199, 116, 223, 177, 60, 163, 74, 195, 14, 58, 154, 16, 28, }, { 105, 207, 248, 46, 224, 129, 70, 43, 4, 67, 253, 62, 112, 184, 202, 124, }, { 139, 67, 62, 234, 56, 177, 240, 122, 1, 96, 174, 238, 28, 46, 211, 31, }, { 175, 190, 252, 24, 41, 116, 56, 238, 121, 206, 10, 63, 245, 96, 72, 126, }, { 194, 18, 96, 149, 74, 47, 154, 234, 178, 229, 31, 24, 37, 17, 109, 48, }, { 127, 51, 253, 244, 138, 216, 198, 78, 247, 124, 71, 174, 69, 86, 137, 159, }, { 100, 2, 77, 80, 246, 251, 144, 33, 213, 225, 60, 130, 123, 131, 115, 199, }, { 69, 244, 242, 89, 52, 51, 133, 225, 33, 61, 74, 221, 26, 167, 76, 121, }, { 20, 44, 55, 106, 202, 52, 242, 147, 117, 11, 206, 125, 101, 107, 213, 250, }, { 253, 222, 18, 195, 39, 201, 4, 17, 232, 214, 192, 229, 242, 138, 12, 9, }, { 172, 6, 215, 240, 217, 206, 115, 99, 188, 224, 68, 69, 141, 70, 149, 138, }, { 134, 142, 139, 148, 46, 203, 38, 112, 208, 194, 111, 82, 23, 21, 106, 164, }, { 118, 157, 44, 41, 31, 120, 244, 107, 233, 182, 110, 11, 238, 164, 223, 22, }, { 67, 71, 164, 74, 23, 132, 19, 56, 104, 97, 214, 41, 234, 235, 53, 82, }, { 80, 176, 220, 107, 174, 208, 78, 9, 23, 44, 190, 55, 87, 111, 210, 110, }, { 40, 88, 110, 212, 87, 104, 39, 229, 234, 22, 95, 250, 202, 214, 105, 55, }, { 170, 181, 129, 227, 250, 121, 229, 186, 245, 188, 216, 177, 125, 10, 236, 161, }, { 94, 197, 66, 253, 72, 16, 211, 142, 3, 160, 49, 241, 36, 114, 182, 33, }, { 221, 64, 180, 146, 181, 214, 40, 170, 95, 16, 140, 45, 187, 13, 120, 90, }, { 187, 146, 203, 114, 227, 64, 202, 125, 12, 197, 196, 66, 144, 11, 157, 132, }, { 150, 193, 216, 93, 103, 37, 48, 204, 106, 161, 73, 54, 210, 183, 80, 108, }, { 5, 11, 125, 251, 211, 13, 221, 84, 140, 114, 210, 142, 136, 106, 164, 223, }, { 123, 80, 153, 87, 9, 2, 34, 97, 56, 20, 175, 183, 229, 159, 102, 173, }, { 246, 160, 241, 174, 18, 4, 68, 194, 112, 40, 157, 173, 9, 253, 204, 153, }, { 43, 224, 69, 60, 167, 210, 108, 104, 47, 56, 17, 128, 178, 240, 180, 195, }, { 9, 174, 209, 221, 149, 160, 50, 37, 30, 202, 41, 165, 171, 242, 86, 137, }, { 199, 25, 29, 110, 153, 34, 71, 190, 62, 151, 205, 150, 173, 123, 201, 239, }, { 70, 76, 217, 177, 196, 137, 206, 108, 228, 19, 4, 167, 98, 129, 145, 141, }, { 13, 205, 181, 126, 22, 122, 214, 10, 209, 162, 193, 188, 11, 59, 185, 187, }, { 19, 247, 120, 33, 185, 84, 93, 49, 127, 77, 104, 30, 189, 132, 231, 60, }, { 97, 9, 48, 171, 37, 246, 77, 117, 89, 147, 238, 12, 243, 233, 215, 24, }, { 1, 104, 25, 88, 80, 215, 57, 123, 67, 26, 58, 151, 40, 163, 75, 237, }, { 239, 65, 115, 186, 206, 74, 96, 91, 212, 129, 146, 108, 103, 173, 160, 216, }, { 141, 240, 104, 249, 27, 6, 102, 163, 72, 60, 50, 26, 236, 98, 170, 52, }, { 211, 53, 42, 4, 83, 22, 181, 45, 75, 156, 3, 235, 200, 16, 28, 21, }, { 188, 73, 132, 57, 144, 32, 101, 223, 6, 131, 98, 33, 72, 228, 175, 66, }, { 241, 123, 190, 229, 97, 100, 235, 96, 122, 110, 59, 206, 209, 18, 254, 95, }, { 50, 1, 199, 40, 123, 156, 72, 241, 139, 145, 30, 65, 220, 160, 216, 130, }, { 92, 21, 112, 77, 232, 125, 161, 120, 133, 148, 69, 28, 116, 247, 32, 56, }, { 2, 208, 50, 176, 160, 109, 114, 246, 134, 52, 116, 237, 80, 133, 150, 25, }, { 177, 132, 49, 71, 134, 90, 179, 213, 215, 33, 163, 157, 67, 223, 22, 249, }, { 86, 3, 138, 120, 141, 103, 216, 208, 94, 112, 34, 195, 167, 35, 171, 69, }, { 81, 216, 197, 51, 254, 7, 119, 114, 84, 54, 132, 160, 127, 204, 153, 131, }, { 201, 108, 131, 248, 127, 226, 218, 57, 42, 27, 66, 80, 222, 102, 173, 160, }, { 214, 62, 87, 255, 128, 27, 104, 121, 199, 238, 209, 101, 64, 122, 184, 202, }, { 78, 138, 17, 52, 1, 254, 197, 50, 185, 195, 23, 149, 225, 208, 140, 233, }, { 200, 4, 154, 160, 47, 53, 227, 66, 105, 1, 120, 199, 246, 197, 230, 77, }, { 160, 163, 123, 214, 159, 99, 156, 18, 46, 88, 191, 110, 174, 222, 103, 220, }, { 49, 185, 236, 192, 139, 38, 3, 124, 78, 191, 80, 59, 164, 134, 5, 118, }, { 34, 78, 148, 225, 50, 114, 94, 77, 49, 242, 56, 37, 25, 2, 226, 74, }, { 165, 168, 6, 45, 76, 110, 65, 70, 162, 42, 109, 224, 38, 180, 195, 3, }, { 23, 148, 28, 130, 58, 142, 185, 30, 176, 37, 128, 7, 29, 77, 8, 14, }, { 51, 105, 222, 112, 43, 75, 113, 138, 200, 139, 36, 214, 244, 3, 147, 111, }, { 148, 17, 234, 237, 199, 72, 66, 58, 236, 149, 61, 219, 130, 50, 198, 117, }, { 235, 34, 23, 25, 77, 144, 132, 116, 27, 233, 122, 117, 199, 100, 79, 234, }, { 132, 94, 185, 36, 142, 166, 84, 134, 86, 246, 27, 191, 71, 144, 252, 189, }, { 8, 198, 200, 133, 197, 119, 11, 94, 93, 208, 19, 50, 131, 81, 29, 100, }, { 37, 149, 219, 170, 65, 18, 241, 239, 59, 180, 158, 70, 193, 237, 208, 140, }, { 249, 189, 118, 96, 164, 19, 224, 62, 39, 190, 40, 252, 82, 67, 227, 59, }, { 57, 127, 36, 69, 78, 81, 8, 34, 19, 111, 67, 9, 39, 215, 24, 18, }, { 96, 97, 41, 243, 117, 33, 116, 14, 26, 137, 212, 155, 219, 74, 156, 245, }, { 178, 60, 26, 175, 118, 224, 248, 88, 18, 15, 237, 231, 59, 249, 203, 13, }, { 212, 238, 101, 79, 32, 118, 26, 143, 65, 218, 165, 136, 16, 255, 46, 211, }, { 111, 124, 174, 61, 195, 54, 208, 242, 77, 31, 97, 202, 128, 244, 179, 87, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 109, 172, 156, 141, 99, 91, 162, 4, 203, 43, 21, 39, 208, 113, 37, 78, }, { 161, 203, 98, 142, 207, 180, 165, 105, 109, 66, 133, 249, 134, 125, 44, 49, }, { 18, 159, 97, 121, 233, 131, 100, 74, 60, 87, 82, 137, 149, 39, 172, 209, }, { 216, 75, 201, 105, 102, 219, 245, 254, 211, 98, 94, 163, 51, 103, 220, 133, }, { 163, 27, 80, 62, 111, 217, 215, 159, 235, 118, 241, 20, 214, 248, 186, 40, }, { 164, 192, 31, 117, 28, 185, 120, 61, 225, 48, 87, 119, 14, 23, 136, 238, }, { 207, 223, 213, 235, 92, 85, 76, 224, 99, 71, 222, 164, 46, 42, 212, 139, }, { 154, 100, 116, 123, 33, 136, 223, 189, 248, 25, 178, 29, 241, 47, 162, 58, }, { 204, 103, 254, 3, 172, 239, 7, 109, 166, 105, 144, 222, 86, 12, 9, 127, }, { 82, 96, 238, 219, 14, 189, 60, 255, 145, 24, 202, 218, 7, 234, 68, 119, }, { 28, 234, 255, 239, 15, 67, 249, 205, 40, 219, 221, 79, 230, 58, 200, 158, }, { 47, 131, 33, 159, 36, 8, 136, 71, 224, 80, 249, 153, 18, 57, 91, 241, }, { 126, 91, 228, 172, 218, 15, 255, 53, 180, 102, 125, 57, 109, 245, 194, 114, }, { 147, 202, 165, 166, 180, 40, 237, 152, 230, 211, 155, 184, 90, 221, 244, 179, }, { 66, 47, 189, 18, 71, 83, 42, 67, 43, 123, 236, 190, 194, 72, 126, 191, }, { 179, 84, 3, 247, 38, 55, 193, 35, 81, 21, 215, 112, 19, 90, 128, 224, }, { 24, 137, 155, 76, 140, 153, 29, 226, 231, 179, 53, 86, 70, 243, 39, 172, }, { 184, 42, 224, 154, 19, 250, 129, 240, 201, 235, 138, 56, 232, 45, 64, 112, }, { 252, 182, 11, 155, 119, 30, 61, 106, 171, 204, 250, 114, 218, 41, 71, 228, }, { 68, 156, 235, 1, 100, 228, 188, 154, 98, 39, 112, 74, 50, 4, 7, 148, }, { 230, 239, 162, 103, 91, 234, 82, 126, 202, 75, 187, 201, 204, 95, 246, 81, }, { 140, 152, 113, 161, 75, 209, 95, 216, 11, 38, 8, 141, 196, 193, 225, 217, }, { 198, 113, 4, 54, 201, 245, 126, 197, 125, 141, 247, 1, 133, 216, 130, 2, }, { 99, 217, 2, 27, 133, 155, 63, 131, 223, 167, 154, 225, 163, 108, 65, 1, }, { 191, 241, 175, 209, 96, 154, 46, 82, 195, 173, 44, 91, 48, 194, 114, 182, }, { 242, 195, 149, 13, 145, 222, 160, 237, 191, 64, 117, 180, 169, 52, 35, 171, }, { 44, 59, 10, 119, 212, 178, 195, 202, 37, 126, 183, 227, 106, 31, 134, 5, }, { 17, 39, 74, 145, 25, 57, 47, 199, 249, 121, 28, 243, 237, 1, 113, 37, }, { 115, 150, 81, 210, 204, 117, 41, 63, 101, 196, 188, 133, 102, 206, 123, 201, }, { 220, 40, 173, 202, 229, 1, 17, 209, 28, 10, 182, 186, 147, 174, 51, 183, }, { 217, 35, 208, 49, 54, 12, 204, 133, 144, 120, 100, 52, 27, 196, 151, 104, }, { 146, 162, 188, 254, 228, 255, 212, 227, 165, 201, 161, 47, 114, 126, 191, 94, }, { 62, 164, 107, 14, 61, 49, 167, 128, 25, 41, 229, 106, 255, 56, 42, 212, }, { 210, 93, 51, 92, 3, 193, 140, 86, 8, 134, 57, 124, 224, 179, 87, 248, }, { 89, 30, 13, 182, 59, 112, 124, 44, 9, 230, 151, 146, 252, 157, 132, 231, }, { 117, 37, 7, 193, 239, 194, 191, 230, 44, 152, 32, 113, 150, 130, 2, 226, }, { 25, 225, 130, 20, 220, 78, 36, 153, 164, 169, 15, 193, 110, 80, 108, 65, }, { 180, 143, 76, 188, 85, 87, 110, 129, 91, 83, 113, 19, 203, 181, 178, 38, }, { 129, 85, 196, 223, 93, 171, 137, 210, 218, 132, 201, 49, 207, 250, 88, 98, }, { 228, 63, 144, 215, 251, 135, 32, 136, 76, 127, 207, 36, 156, 218, 96, 72, }, { 229, 87, 137, 143, 171, 80, 25, 243, 15, 101, 245, 179, 180, 121, 43, 165, }, { 15, 29, 135, 206, 182, 23, 164, 252, 87, 150, 181, 81, 91, 190, 47, 162, }, { 71, 36, 192, 233, 148, 94, 247, 23, 167, 9, 62, 48, 74, 34, 218, 96, }, { 156, 215, 34, 104, 2, 63, 73, 100, 177, 69, 46, 233, 1, 99, 219, 17, }, { 42, 136, 92, 100, 247, 5, 85, 19, 108, 34, 43, 23, 154, 83, 255, 46, }, { 168, 101, 179, 83, 90, 20, 151, 76, 115, 136, 172, 92, 45, 143, 122, 184, }, { 91, 206, 63, 6, 155, 29, 14, 218, 143, 210, 227, 127, 172, 24, 18, 254, }, { 143, 32, 90, 73, 187, 107, 20, 85, 206, 8, 70, 247, 188, 231, 60, 45, }, { 4, 99, 100, 163, 131, 218, 228, 47, 207, 104, 232, 25, 160, 201, 239, 50, }, { 166, 16, 45, 197, 188, 212, 10, 203, 103, 4, 35, 154, 94, 146, 30, 247, }, { 114, 254, 72, 138, 156, 162, 16, 68, 38, 222, 134, 18, 78, 109, 48, 36, }, { 186, 250, 210, 42, 179, 151, 243, 6, 79, 223, 254, 213, 184, 168, 214, 105, }, { 48, 209, 245, 152, 219, 241, 58, 7, 13, 165, 106, 172, 140, 37, 78, 155, }, { 76, 90, 35, 132, 161, 147, 183, 196, 63, 247, 99, 120, 177, 85, 26, 240, }, { 130, 237, 239, 55, 173, 17, 194, 95, 31, 170, 135, 75, 183, 220, 133, 150, }, { 106, 119, 211, 198, 16, 59, 13, 166, 193, 109, 179, 68, 8, 158, 23, 136, }, { 136, 251, 21, 2, 200, 11, 187, 247, 196, 78, 224, 148, 100, 8, 14, 235, }, { 60, 116, 89, 190, 157, 92, 213, 118, 159, 29, 145, 135, 175, 189, 188, 205, }, { 110, 20, 183, 101, 147, 225, 233, 137, 14, 5, 91, 93, 168, 87, 248, 186, }, { 11, 126, 227, 109, 53, 205, 64, 211, 152, 254, 93, 72, 251, 119, 192, 144, }, { 158, 7, 16, 216, 162, 82, 59, 146, 55, 113, 90, 4, 81, 230, 77, 8, }, { 104, 167, 225, 118, 176, 86, 127, 80, 71, 89, 199, 169, 88, 27, 129, 145, }, { 103, 186, 102, 184, 6, 65, 219, 172, 16, 207, 114, 248, 3, 165, 174, 51, }, { 197, 201, 47, 222, 57, 79, 53, 72, 184, 163, 185, 123, 253, 254, 95, 246, }, { 116, 77, 30, 153, 191, 21, 134, 157, 111, 130, 26, 230, 190, 33, 73, 15, }, { 64, 255, 143, 162, 231, 62, 88, 181, 173, 79, 152, 83, 146, 205, 232, 166, }, { 12, 165, 172, 38, 70, 173, 239, 113, 146, 184, 251, 43, 35, 152, 242, 86, }, { 231, 135, 187, 63, 11, 61, 107, 5, 137, 81, 129, 94, 228, 252, 189, 188, }, { 157, 191, 59, 48, 82, 232, 112, 31, 242, 95, 20, 126, 41, 192, 144, 252, }, { 144, 114, 142, 78, 68, 146, 166, 21, 35, 253, 213, 194, 34, 251, 41, 71, }, { 122, 56, 128, 15, 89, 213, 27, 26, 123, 14, 149, 32, 205, 60, 45, 64, }, { 58, 199, 15, 173, 190, 235, 67, 175, 214, 65, 13, 115, 95, 241, 197, 230, }, { 53, 218, 136, 99, 8, 252, 231, 83, 129, 215, 184, 34, 4, 79, 234, 68, }, { 52, 178, 145, 59, 88, 43, 222, 40, 194, 205, 130, 181, 44, 236, 161, 169, }, { 159, 111, 9, 128, 242, 133, 2, 233, 116, 107, 96, 147, 121, 69, 6, 229, }, { 183, 55, 103, 84, 165, 237, 37, 12, 158, 125, 63, 105, 179, 147, 111, 210, }, { 248, 213, 111, 56, 244, 196, 217, 69, 100, 164, 18, 107, 122, 224, 168, 214, }, { 79, 226, 8, 108, 81, 41, 252, 73, 250, 217, 45, 2, 201, 115, 199, 4, }, { 107, 31, 202, 158, 64, 236, 52, 221, 130, 119, 137, 211, 32, 61, 92, 101, }, { 131, 133, 246, 111, 253, 198, 251, 36, 92, 176, 189, 220, 159, 127, 206, 123, }, { 95, 173, 91, 165, 24, 199, 234, 245, 64, 186, 11, 102, 12, 209, 253, 204, }, { 167, 120, 52, 157, 236, 3, 51, 176, 36, 30, 25, 13, 118, 49, 85, 26, }, { 30, 58, 205, 95, 175, 46, 139, 59, 174, 239, 169, 162, 182, 191, 94, 135, }, { 16, 79, 83, 201, 73, 238, 22, 188, 186, 99, 38, 100, 197, 162, 58, 200, }, { 195, 122, 121, 205, 26, 248, 163, 145, 241, 255, 37, 143, 13, 178, 38, 221, }, { 120, 232, 178, 191, 249, 184, 105, 236, 253, 58, 225, 205, 157, 185, 187, 89, }, { 45, 83, 19, 47, 132, 101, 250, 177, 102, 100, 141, 116, 66, 188, 205, 232, }, { 119, 245, 53, 113, 79, 175, 205, 16, 170, 172, 84, 156, 198, 7, 148, 251, }, { 227, 228, 223, 156, 136, 231, 143, 42, 70, 57, 105, 71, 68, 53, 82, 142, }, { 128, 61, 221, 135, 13, 124, 176, 169, 153, 158, 243, 166, 231, 89, 19, 143, }, }, { { 162, 200, 129, 226, 59, 179, 194, 101, 197, 35, 136, 168, 75, 160, 7, 252, }, { 126, 94, 186, 115, 31, 76, 148, 143, 114, 196, 83, 180, 103, 253, 230, 238, }, { 101, 207, 155, 11, 121, 216, 60, 193, 42, 254, 161, 150, 218, 235, 22, 221, }, { 9, 206, 31, 40, 34, 205, 217, 58, 137, 22, 239, 30, 107, 179, 80, 17, }, { 185, 89, 160, 154, 93, 39, 106, 43, 157, 25, 122, 138, 246, 182, 247, 207, }, { 170, 35, 162, 143, 220, 218, 124, 24, 161, 8, 6, 245, 146, 185, 221, 110, }, { 60, 64, 25, 23, 98, 9, 227, 111, 205, 37, 107, 159, 199, 162, 46, 49, }, { 146, 247, 75, 79, 44, 6, 192, 168, 94, 217, 42, 165, 216, 246, 158, 22, }, { 57, 241, 213, 133, 53, 120, 219, 247, 18, 236, 77, 19, 248, 229, 201, 251, }, { 240, 195, 100, 92, 75, 36, 10, 127, 178, 148, 111, 57, 154, 205, 184, 196, }, { 203, 120, 201, 83, 55, 215, 31, 6, 185, 2, 224, 172, 197, 191, 166, 250, }, { 254, 246, 207, 108, 119, 19, 37, 83, 253, 49, 100, 45, 105, 174, 216, 218, }, { 224, 214, 34, 134, 70, 246, 181, 133, 122, 194, 176, 131, 235, 255, 207, 35, }, { 2, 74, 120, 138, 73, 139, 206, 142, 25, 122, 194, 134, 167, 151, 215, 197, }, { 78, 97, 112, 222, 8, 249, 150, 66, 233, 62, 241, 185, 244, 171, 127, 4, }, { 74, 245, 128, 9, 154, 44, 201, 157, 219, 202, 182, 118, 121, 70, 18, 77, }, { 229, 103, 238, 20, 17, 135, 141, 29, 165, 11, 150, 15, 212, 184, 40, 233, }, { 63, 47, 93, 216, 238, 38, 74, 166, 57, 98, 200, 90, 210, 159, 115, 119, }, { 112, 107, 17, 67, 35, 123, 187, 163, 61, 97, 88, 160, 148, 158, 134, 240, }, { 12, 127, 211, 186, 117, 188, 225, 162, 86, 223, 201, 146, 84, 244, 183, 219, }, { 250, 98, 63, 187, 229, 198, 122, 140, 207, 197, 35, 226, 228, 67, 181, 147, }, { 192, 252, 174, 241, 92, 145, 8, 178, 41, 110, 205, 52, 9, 155, 33, 46, }, { 65, 113, 231, 171, 241, 106, 222, 41, 75, 166, 155, 238, 181, 98, 149, 153, }, { 161, 167, 197, 45, 183, 156, 107, 172, 49, 100, 43, 109, 94, 157, 90, 186, }, { 96, 126, 87, 153, 46, 169, 4, 89, 245, 55, 135, 26, 229, 172, 241, 23, }, { 167, 121, 77, 112, 108, 194, 250, 253, 26, 234, 174, 36, 116, 231, 224, 54, }, { 130, 226, 13, 149, 33, 212, 127, 82, 150, 143, 245, 31, 169, 196, 233, 241, }, { 83, 46, 217, 251, 181, 51, 175, 93, 154, 138, 134, 210, 99, 199, 53, 187, }, { 181, 38, 115, 32, 40, 155, 139, 137, 203, 198, 179, 24, 162, 66, 64, 20, }, { 158, 136, 152, 245, 89, 186, 33, 10, 8, 6, 227, 55, 140, 2, 41, 205, }, { 150, 99, 187, 152, 190, 211, 159, 119, 108, 45, 109, 106, 85, 27, 243, 95, }, { 76, 43, 8, 84, 65, 114, 88, 204, 240, 68, 51, 63, 83, 60, 168, 193, }, { 30, 32, 237, 234, 49, 229, 144, 214, 135, 243, 212, 174, 130, 81, 23, 249, }, { 103, 133, 227, 129, 48, 83, 242, 79, 51, 132, 99, 16, 125, 124, 193, 24, }, { 227, 185, 102, 73, 202, 217, 28, 76, 142, 133, 19, 70, 254, 194, 146, 101, }, { 42, 139, 215, 144, 180, 133, 205, 196, 46, 253, 49, 108, 156, 234, 227, 90, }, { 172, 253, 42, 210, 7, 132, 237, 73, 138, 134, 131, 188, 184, 195, 103, 226, }, { 67, 59, 159, 33, 184, 225, 16, 167, 82, 220, 89, 104, 18, 245, 66, 92, }, { 140, 215, 166, 165, 29, 227, 80, 126, 217, 42, 254, 11, 90, 167, 137, 239, }, { 199, 7, 26, 233, 66, 107, 254, 164, 239, 221, 41, 62, 145, 75, 17, 33, }, { 38, 244, 4, 42, 193, 57, 44, 102, 120, 34, 248, 254, 200, 30, 84, 129, }, { 41, 228, 147, 95, 56, 170, 100, 13, 218, 186, 146, 169, 137, 215, 190, 28, }, { 28, 106, 149, 96, 120, 110, 94, 88, 158, 137, 22, 40, 37, 198, 192, 60, }, { 77, 14, 52, 17, 132, 214, 63, 139, 29, 121, 82, 124, 225, 150, 34, 66, }, { 157, 231, 220, 58, 213, 149, 136, 195, 252, 65, 64, 242, 153, 63, 116, 139, }, { 242, 137, 28, 214, 2, 175, 196, 241, 171, 238, 173, 191, 61, 90, 111, 1, }, { 33, 15, 176, 50, 223, 195, 218, 112, 190, 145, 28, 244, 80, 206, 100, 142, }, { 109, 36, 184, 102, 158, 177, 130, 188, 78, 213, 47, 203, 3, 242, 204, 79, }, { 188, 232, 108, 8, 10, 86, 82, 179, 66, 208, 92, 6, 201, 241, 16, 5, }, { 154, 28, 104, 34, 203, 111, 126, 213, 58, 242, 164, 248, 1, 239, 68, 132, }, { 39, 209, 56, 111, 4, 157, 75, 33, 149, 31, 153, 189, 122, 180, 222, 2, }, { 20, 129, 182, 13, 159, 7, 224, 37, 250, 162, 152, 117, 252, 223, 26, 174, }, { 94, 116, 54, 4, 5, 43, 41, 184, 33, 104, 46, 3, 133, 153, 8, 227, }, { 228, 66, 210, 81, 212, 35, 234, 90, 72, 54, 247, 76, 102, 18, 162, 106, }, { 211, 134, 172, 228, 221, 108, 30, 129, 21, 127, 177, 75, 109, 148, 11, 143, }, { 225, 243, 30, 195, 131, 82, 210, 194, 151, 255, 209, 192, 89, 85, 69, 160, }, { 105, 176, 72, 177, 12, 100, 221, 99, 124, 33, 104, 4, 142, 31, 161, 6, }, { 73, 154, 196, 198, 22, 3, 96, 84, 47, 141, 21, 179, 108, 123, 79, 11, }, { 171, 6, 158, 202, 25, 126, 27, 95, 76, 53, 103, 182, 32, 19, 87, 237, }, { 179, 248, 251, 125, 243, 197, 26, 216, 224, 72, 54, 81, 136, 56, 250, 152, }, { 163, 237, 189, 167, 254, 23, 165, 34, 40, 30, 233, 235, 249, 10, 141, 127, }, { 11, 132, 103, 162, 107, 70, 23, 180, 144, 108, 45, 152, 204, 36, 135, 212, }, { 144, 189, 51, 197, 101, 141, 14, 38, 71, 163, 232, 35, 127, 97, 73, 211, }, { 252, 188, 183, 230, 62, 152, 235, 221, 228, 75, 166, 171, 206, 57, 15, 31, }, { 194, 182, 214, 123, 21, 26, 198, 60, 48, 20, 15, 178, 174, 12, 246, 235, }, { 128, 168, 117, 31, 104, 95, 177, 220, 143, 245, 55, 153, 14, 83, 62, 52, }, { 231, 45, 150, 158, 88, 12, 67, 147, 188, 113, 84, 137, 115, 47, 255, 44, }, { 99, 17, 19, 86, 162, 134, 173, 144, 1, 112, 36, 223, 240, 145, 172, 81, }, { 48, 63, 202, 173, 23, 181, 2, 205, 155, 250, 162, 13, 147, 86, 153, 234, }, { 34, 96, 244, 253, 83, 236, 115, 185, 74, 214, 191, 49, 69, 243, 57, 200, }, { 246, 29, 236, 1, 144, 122, 155, 46, 153, 26, 234, 112, 176, 183, 2, 72, }, { 168, 105, 218, 5, 149, 81, 178, 150, 184, 114, 196, 115, 53, 46, 10, 171, }, { 87, 186, 41, 44, 39, 230, 240, 130, 168, 126, 193, 29, 238, 42, 88, 242, }, { 142, 157, 222, 47, 84, 104, 158, 240, 192, 80, 60, 141, 253, 48, 94, 42, }, { 195, 147, 234, 62, 208, 190, 161, 123, 221, 41, 110, 241, 28, 166, 124, 104, }, { 198, 34, 38, 172, 135, 207, 153, 227, 2, 224, 72, 125, 35, 225, 155, 162, }, { 80, 65, 157, 52, 57, 28, 6, 148, 110, 205, 37, 23, 118, 250, 104, 253, }, { 117, 218, 221, 209, 116, 10, 131, 59, 226, 168, 126, 44, 171, 217, 97, 58, }, { 75, 208, 188, 76, 95, 136, 174, 218, 54, 247, 215, 53, 203, 236, 152, 206, }, { 108, 1, 132, 35, 91, 21, 229, 251, 163, 232, 78, 136, 177, 88, 70, 204, }, { 166, 92, 113, 53, 169, 102, 157, 186, 247, 215, 207, 103, 198, 77, 106, 181, }, { 164, 22, 9, 191, 224, 237, 83, 52, 238, 173, 13, 225, 97, 218, 189, 112, }, { 245, 114, 168, 206, 28, 85, 50, 231, 109, 93, 73, 181, 165, 138, 95, 14, }, { 248, 40, 71, 49, 172, 77, 180, 2, 214, 191, 225, 100, 67, 212, 98, 86, }, { 156, 194, 224, 127, 16, 49, 239, 132, 17, 124, 33, 177, 43, 149, 254, 8, }, { 210, 163, 144, 161, 24, 200, 121, 198, 248, 66, 208, 8, 223, 62, 129, 12, }, { 205, 166, 65, 14, 236, 137, 142, 87, 146, 140, 101, 229, 239, 197, 28, 118, }, { 220, 150, 59, 145, 36, 255, 86, 234, 183, 231, 219, 28, 44, 93, 225, 18, }, { 29, 79, 169, 37, 189, 202, 57, 31, 115, 180, 119, 107, 151, 108, 74, 191, }, { 131, 199, 49, 208, 228, 112, 24, 21, 123, 178, 148, 92, 27, 110, 99, 114, }, { 46, 31, 39, 71, 38, 80, 146, 27, 28, 9, 118, 163, 17, 7, 142, 19, }, { 241, 230, 88, 25, 142, 128, 109, 56, 95, 169, 14, 122, 40, 103, 50, 71, }, { 253, 153, 139, 163, 251, 60, 140, 154, 9, 118, 199, 232, 124, 147, 133, 156, }, { 129, 141, 73, 90, 173, 251, 214, 155, 98, 200, 86, 218, 188, 249, 180, 183, }, { 177, 178, 131, 247, 186, 78, 212, 86, 249, 50, 244, 215, 47, 175, 45, 93, }, { 79, 68, 76, 155, 205, 93, 241, 5, 4, 3, 144, 250, 70, 1, 245, 135, }, { 71, 175, 111, 246, 42, 52, 79, 120, 96, 40, 30, 167, 159, 24, 47, 21, }, { 19, 122, 2, 21, 129, 253, 22, 51, 60, 17, 124, 127, 100, 15, 42, 161, }, { 70, 138, 83, 179, 239, 144, 40, 63, 141, 21, 127, 228, 45, 178, 165, 150, }, { 91, 197, 250, 150, 82, 90, 17, 32, 254, 161, 8, 143, 186, 222, 239, 41, }, { 251, 71, 3, 254, 32, 98, 29, 203, 34, 248, 66, 161, 86, 233, 63, 16, }, { 237, 140, 205, 121, 246, 238, 51, 96, 193, 32, 24, 82, 13, 161, 242, 123, }, { 148, 41, 195, 18, 247, 88, 81, 249, 117, 87, 175, 236, 242, 140, 36, 154, }, { 37, 155, 64, 229, 77, 22, 133, 175, 140, 101, 91, 59, 221, 35, 9, 199, }, { 165, 51, 53, 250, 37, 73, 52, 115, 3, 144, 108, 162, 211, 112, 55, 243, }, { 221, 179, 7, 212, 225, 91, 49, 173, 90, 218, 186, 95, 158, 247, 107, 145, }, { 56, 212, 233, 192, 240, 220, 188, 176, 255, 209, 44, 80, 74, 79, 67, 120, }, { 88, 170, 190, 89, 222, 117, 184, 233, 10, 230, 171, 74, 175, 227, 178, 111, }, { 15, 16, 151, 117, 249, 147, 72, 107, 162, 152, 106, 87, 65, 201, 234, 157, }, { 218, 72, 179, 204, 255, 161, 199, 187, 156, 105, 94, 85, 6, 39, 91, 158, }, { 61, 101, 37, 82, 167, 173, 132, 40, 32, 24, 10, 220, 117, 8, 164, 178, }, { 232, 61, 1, 235, 161, 159, 11, 248, 30, 233, 62, 222, 50, 230, 21, 177, }, { 233, 24, 61, 174, 100, 59, 108, 191, 243, 212, 95, 157, 128, 76, 159, 50, }, { 24, 254, 101, 183, 234, 187, 1, 135, 172, 125, 81, 231, 168, 43, 173, 117, }, { 149, 12, 255, 87, 50, 252, 54, 190, 152, 106, 206, 175, 64, 38, 174, 25, }, { 238, 227, 137, 182, 122, 193, 154, 169, 53, 103, 187, 151, 24, 156, 175, 61, }, { 119, 144, 165, 91, 61, 129, 77, 181, 251, 210, 188, 170, 12, 78, 182, 255, }, { 114, 33, 105, 201, 106, 240, 117, 45, 36, 27, 154, 38, 51, 9, 81, 53, }, { 111, 110, 192, 236, 215, 58, 76, 50, 87, 175, 237, 77, 164, 101, 27, 138, }, { 81, 100, 161, 113, 252, 184, 97, 211, 131, 240, 68, 84, 196, 80, 226, 126, }, { 127, 123, 134, 54, 218, 232, 243, 200, 159, 249, 50, 247, 213, 87, 108, 109, }, { 223, 249, 127, 94, 168, 208, 255, 35, 67, 160, 120, 217, 57, 96, 188, 84, }, { 215, 18, 92, 51, 79, 185, 65, 94, 39, 139, 246, 132, 224, 121, 102, 198, }, { 212, 125, 24, 252, 195, 150, 232, 151, 211, 204, 85, 65, 245, 68, 59, 128, }, { 107, 250, 48, 59, 69, 239, 19, 237, 101, 91, 170, 130, 41, 136, 118, 195, }, { 58, 158, 145, 74, 185, 87, 114, 62, 230, 171, 238, 214, 237, 216, 148, 189, }, { 32, 42, 140, 119, 26, 103, 189, 55, 83, 172, 125, 183, 226, 100, 238, 13, }, { 10, 161, 91, 231, 174, 226, 112, 243, 125, 81, 76, 219, 126, 142, 13, 87, }, { 66, 30, 163, 100, 125, 69, 119, 224, 191, 225, 56, 43, 160, 95, 200, 223, }, { 204, 131, 125, 75, 41, 45, 233, 16, 127, 177, 4, 166, 93, 111, 150, 245, }, { 123, 239, 118, 225, 72, 61, 172, 23, 173, 13, 117, 56, 88, 186, 1, 36, }, { 143, 184, 226, 106, 145, 204, 249, 183, 45, 109, 93, 206, 79, 154, 212, 169, }, { 59, 187, 173, 15, 124, 243, 21, 121, 11, 150, 143, 149, 95, 114, 30, 62, }, { 125, 49, 254, 188, 147, 99, 61, 70, 134, 131, 240, 113, 114, 192, 187, 168, }, { 191, 135, 40, 199, 134, 121, 251, 122, 182, 151, 255, 195, 220, 204, 77, 67, }, { 208, 233, 232, 43, 81, 67, 183, 72, 225, 56, 18, 142, 120, 169, 86, 201, }, { 222, 220, 67, 27, 109, 116, 152, 100, 174, 157, 25, 154, 139, 202, 54, 215, }, { 202, 93, 245, 22, 242, 115, 120, 65, 84, 63, 129, 239, 119, 21, 44, 121, }, { 44, 85, 95, 205, 111, 219, 92, 149, 5, 115, 180, 37, 182, 144, 89, 214, }, { 25, 219, 89, 242, 47, 31, 102, 192, 65, 64, 48, 164, 26, 129, 39, 246, }, { 118, 181, 153, 30, 248, 37, 42, 242, 22, 239, 221, 233, 190, 228, 60, 124, }, { 18, 95, 62, 80, 68, 89, 113, 116, 209, 44, 29, 60, 214, 165, 160, 34, }, { 116, 255, 225, 148, 177, 174, 228, 124, 15, 149, 31, 111, 25, 115, 235, 185, }, { 213, 88, 36, 185, 6, 50, 143, 208, 62, 241, 52, 2, 71, 238, 177, 3, }, { 139, 44, 18, 189, 3, 25, 166, 104, 31, 153, 26, 1, 194, 119, 185, 224, }, { 7, 251, 180, 24, 30, 250, 246, 22, 198, 179, 228, 10, 152, 208, 48, 15, }, { 89, 143, 130, 28, 27, 209, 223, 174, 231, 219, 202, 9, 29, 73, 56, 236, }, { 176, 151, 191, 178, 127, 234, 179, 17, 20, 15, 149, 148, 157, 5, 167, 222, }, { 31, 5, 209, 175, 244, 65, 247, 145, 106, 206, 181, 237, 48, 251, 157, 122, }, { 97, 91, 107, 220, 235, 13, 99, 30, 24, 10, 230, 89, 87, 6, 123, 148, }, { 26, 180, 29, 61, 163, 48, 207, 9, 181, 7, 147, 97, 15, 188, 122, 176, }, { 200, 23, 141, 156, 187, 248, 182, 207, 77, 69, 67, 105, 208, 130, 251, 188, }, { 151, 70, 135, 221, 123, 119, 248, 48, 129, 16, 12, 41, 231, 177, 121, 220, }, { 23, 238, 242, 194, 19, 40, 73, 236, 14, 229, 59, 176, 233, 226, 71, 232, }, { 169, 76, 230, 64, 80, 245, 213, 209, 85, 79, 165, 48, 135, 132, 128, 40, }, { 145, 152, 15, 128, 160, 41, 105, 97, 170, 158, 137, 96, 205, 203, 195, 80, }, { 159, 173, 164, 176, 156, 30, 70, 77, 229, 59, 130, 116, 62, 168, 163, 78, }, { 27, 145, 33, 120, 102, 148, 168, 78, 88, 58, 242, 34, 189, 22, 240, 51, }, { 187, 19, 216, 16, 20, 172, 164, 165, 132, 99, 184, 12, 81, 33, 32, 10, }, { 209, 204, 212, 110, 148, 231, 208, 15, 12, 5, 115, 205, 202, 3, 220, 74, }, { 122, 202, 74, 164, 141, 153, 203, 80, 64, 48, 20, 123, 234, 16, 139, 167, }, { 180, 3, 79, 101, 237, 63, 236, 206, 38, 251, 210, 91, 16, 232, 202, 151, }, { 95, 81, 10, 65, 192, 143, 78, 255, 204, 85, 79, 64, 55, 51, 130, 96, }, { 113, 78, 45, 6, 230, 223, 220, 228, 208, 92, 57, 227, 38, 52, 12, 115, }, { 14, 53, 171, 48, 60, 55, 47, 44, 79, 165, 11, 20, 243, 99, 96, 30, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 120, 128, 50, 46, 196, 18, 5, 222, 89, 74, 214, 253, 77, 135, 92, 98, }, { 36, 190, 124, 160, 136, 178, 226, 232, 97, 88, 58, 120, 111, 137, 131, 68, }, { 64, 84, 219, 238, 52, 206, 185, 110, 166, 155, 250, 173, 7, 200, 31, 26, }, { 134, 118, 253, 66, 179, 1, 32, 141, 164, 123, 178, 208, 36, 41, 132, 184, }, { 82, 11, 229, 190, 112, 151, 200, 26, 119, 183, 231, 145, 209, 109, 191, 56, }, { 243, 172, 32, 147, 199, 11, 163, 182, 70, 211, 204, 252, 143, 240, 229, 130, }, { 17, 48, 122, 159, 200, 118, 216, 189, 37, 107, 190, 249, 195, 152, 253, 100, }, { 40, 193, 175, 26, 253, 14, 3, 74, 55, 135, 243, 234, 59, 125, 52, 159, }, { 92, 62, 78, 142, 76, 160, 231, 54, 56, 18, 236, 133, 34, 14, 223, 38, }, { 152, 86, 16, 168, 130, 228, 176, 91, 35, 136, 102, 126, 166, 120, 147, 65, }, { 193, 217, 146, 180, 153, 53, 111, 245, 196, 83, 172, 119, 187, 49, 171, 173, }, { 214, 55, 96, 118, 138, 29, 38, 25, 202, 182, 151, 199, 82, 211, 236, 69, }, { 3, 111, 68, 207, 140, 47, 169, 201, 244, 71, 163, 197, 21, 61, 93, 70, }, { 8, 235, 35, 109, 231, 105, 190, 125, 100, 43, 142, 93, 217, 25, 218, 146, }, { 174, 183, 82, 88, 78, 15, 35, 199, 147, 252, 65, 58, 31, 84, 176, 39, }, { 100, 234, 167, 78, 188, 124, 91, 134, 199, 195, 192, 213, 104, 65, 156, 94, }, { 45, 112, 99, 136, 170, 127, 59, 210, 232, 78, 213, 102, 4, 58, 211, 85, }, { 50, 117, 178, 39, 94, 62, 204, 67, 130, 128, 96, 139, 52, 193, 78, 47, }, { 6, 222, 136, 93, 219, 94, 145, 81, 43, 142, 133, 73, 42, 122, 186, 140, }, { 52, 171, 58, 122, 133, 96, 93, 18, 169, 14, 229, 194, 30, 187, 244, 163, }, { 93, 27, 114, 203, 137, 4, 128, 113, 213, 47, 141, 198, 144, 164, 85, 165, }, { 132, 60, 133, 200, 250, 138, 238, 3, 189, 1, 112, 86, 131, 190, 83, 125, }, { 49, 26, 246, 232, 210, 17, 101, 138, 118, 199, 195, 78, 33, 252, 19, 105, }, { 249, 13, 123, 116, 105, 233, 211, 69, 59, 130, 128, 39, 241, 126, 232, 213, }, { 147, 210, 119, 10, 233, 162, 167, 239, 179, 228, 75, 230, 106, 92, 20, 149, }, { 135, 83, 193, 7, 118, 165, 71, 202, 73, 70, 211, 147, 150, 131, 14, 59, }, { 155, 57, 84, 103, 14, 203, 25, 146, 215, 207, 197, 187, 179, 69, 206, 7, }, { 13, 90, 239, 255, 176, 24, 134, 229, 187, 226, 168, 209, 230, 94, 61, 88, }, { 207, 236, 57, 132, 165, 2, 64, 217, 139, 246, 167, 99, 72, 82, 203, 179, }, { 106, 223, 12, 126, 128, 75, 116, 170, 136, 102, 203, 193, 155, 34, 252, 64, }, { 189, 205, 80, 77, 207, 242, 53, 244, 175, 237, 61, 69, 123, 91, 154, 134, }, { 51, 80, 142, 98, 155, 154, 171, 4, 111, 189, 1, 200, 134, 107, 196, 172, }, { 219, 109, 143, 137, 58, 5, 160, 252, 113, 84, 63, 22, 180, 141, 209, 29, }, { 235, 82, 69, 36, 45, 176, 162, 49, 234, 174, 157, 27, 39, 219, 72, 247, }, { 206, 201, 5, 193, 96, 166, 39, 158, 102, 203, 198, 32, 250, 248, 65, 48, }, { 85, 240, 81, 166, 110, 109, 62, 12, 177, 4, 3, 155, 73, 189, 143, 55, }, { 22, 203, 206, 135, 214, 140, 46, 171, 227, 216, 90, 243, 91, 72, 205, 107, }, { 197, 77, 98, 99, 11, 224, 48, 42, 246, 167, 235, 184, 54, 220, 198, 228, }, { 72, 191, 248, 131, 211, 167, 7, 19, 194, 176, 116, 240, 222, 209, 197, 136, }, { 43, 174, 235, 213, 113, 33, 170, 131, 195, 192, 80, 47, 46, 64, 105, 217, }, { 16, 21, 70, 218, 13, 210, 191, 250, 200, 86, 223, 186, 113, 50, 119, 231, }, { 186, 54, 228, 85, 209, 8, 195, 226, 105, 94, 217, 79, 227, 139, 170, 137, }, { 121, 165, 14, 107, 1, 182, 98, 153, 180, 119, 183, 190, 255, 45, 214, 225, }, { 178, 221, 199, 56, 54, 97, 125, 159, 13, 117, 87, 18, 58, 146, 112, 27, }, { 1, 37, 60, 69, 197, 164, 103, 71, 237, 61, 97, 67, 178, 170, 138, 131, }, { 4, 148, 240, 215, 146, 213, 95, 223, 50, 244, 71, 207, 141, 237, 109, 73, }, { 184, 124, 156, 223, 152, 131, 13, 108, 112, 36, 27, 201, 68, 28, 125, 76, }, { 201, 50, 177, 217, 126, 92, 209, 136, 160, 120, 34, 42, 98, 40, 113, 63, }, { 236, 169, 241, 60, 51, 74, 84, 39, 44, 29, 121, 17, 191, 11, 120, 248, }, { 133, 25, 185, 141, 63, 46, 137, 68, 80, 60, 17, 21, 49, 20, 217, 254, }, { 244, 87, 148, 139, 217, 241, 85, 160, 128, 96, 40, 246, 23, 32, 213, 141, }, { 68, 192, 43, 57, 166, 27, 230, 177, 148, 111, 189, 98, 138, 37, 114, 83, }, { 90, 224, 198, 211, 151, 254, 118, 103, 19, 156, 105, 204, 8, 116, 101, 170, }, { 47, 58, 27, 2, 227, 244, 245, 92, 241, 52, 23, 224, 163, 173, 4, 144, }, { 5, 177, 204, 146, 87, 113, 56, 152, 223, 201, 38, 140, 63, 71, 231, 202, }, { 217, 39, 247, 3, 115, 142, 110, 114, 104, 46, 253, 144, 19, 26, 6, 216, }, { 104, 149, 116, 244, 201, 192, 186, 36, 145, 28, 9, 71, 60, 181, 43, 133, }, { 173, 216, 22, 151, 194, 32, 138, 14, 103, 187, 226, 255, 10, 105, 237, 97, }, { 53, 142, 6, 63, 64, 196, 58, 85, 68, 51, 132, 129, 172, 17, 126, 32, }, { 86, 159, 21, 105, 226, 66, 151, 197, 69, 67, 160, 94, 92, 128, 210, 113, }, { 196, 104, 94, 38, 206, 68, 87, 109, 27, 154, 138, 251, 132, 118, 76, 103, }, { 175, 146, 110, 29, 139, 171, 68, 128, 126, 193, 32, 121, 173, 254, 58, 164, }, { 21, 164, 138, 72, 90, 163, 135, 98, 23, 159, 249, 54, 78, 117, 144, 45, }, { 124, 20, 194, 249, 86, 199, 90, 1, 107, 190, 145, 50, 192, 106, 49, 43, }, { 110, 75, 252, 169, 18, 158, 43, 117, 186, 146, 140, 14, 22, 207, 145, 9, }, { 216, 2, 203, 70, 182, 42, 9, 53, 133, 19, 156, 211, 161, 176, 140, 91, }, { 247, 56, 208, 68, 85, 222, 252, 105, 116, 39, 139, 51, 2, 29, 136, 203, }, { 102, 160, 223, 196, 245, 247, 149, 8, 222, 185, 2, 83, 207, 214, 75, 155, }, { 137, 102, 106, 55, 74, 146, 104, 230, 6, 227, 216, 135, 101, 224, 110, 37, }, { 69, 229, 23, 124, 99, 191, 129, 246, 121, 82, 220, 33, 56, 143, 248, 208, }, { 239, 198, 181, 243, 191, 101, 253, 238, 216, 90, 218, 212, 170, 54, 37, 190, }, { 55, 196, 126, 181, 9, 79, 244, 219, 93, 73, 70, 7, 11, 134, 169, 229, }, { 141, 242, 154, 224, 216, 71, 55, 57, 52, 23, 159, 72, 232, 13, 3, 108, }, { 182, 73, 55, 239, 164, 180, 34, 64, 63, 129, 16, 221, 183, 127, 29, 82, }, { 255, 211, 243, 41, 178, 183, 66, 20, 16, 12, 5, 110, 219, 4, 82, 89, }, { 136, 67, 86, 114, 143, 54, 15, 161, 235, 222, 185, 196, 215, 74, 228, 166, }, { 234, 119, 121, 97, 232, 20, 197, 118, 7, 147, 252, 88, 149, 113, 194, 116, }, { 98, 52, 47, 19, 103, 34, 202, 215, 236, 77, 69, 156, 66, 59, 38, 210, }, { 226, 156, 90, 12, 15, 125, 123, 11, 99, 184, 114, 5, 76, 104, 24, 230, }, { 62, 10, 97, 157, 43, 130, 45, 225, 212, 95, 169, 25, 96, 53, 249, 244, }, { 84, 213, 109, 227, 171, 201, 89, 75, 92, 57, 98, 216, 251, 23, 5, 180, }, { 190, 162, 20, 130, 67, 221, 156, 61, 91, 170, 158, 128, 110, 102, 199, 192, }, { 183, 108, 11, 170, 97, 16, 69, 7, 210, 188, 113, 158, 5, 213, 151, 209, }, { 54, 225, 66, 240, 204, 235, 147, 156, 176, 116, 39, 68, 185, 44, 35, 102, }, { 230, 8, 170, 219, 157, 168, 36, 212, 81, 76, 53, 202, 193, 133, 117, 175, }, { 153, 115, 44, 237, 71, 64, 215, 28, 206, 181, 7, 61, 20, 210, 25, 194, }, { 160, 130, 249, 104, 114, 56, 12, 235, 220, 89, 74, 46, 236, 55, 208, 57, }, { 35, 69, 200, 184, 150, 72, 20, 254, 167, 235, 222, 114, 247, 89, 179, 75, }, { 138, 9, 46, 248, 198, 189, 193, 47, 242, 164, 123, 66, 112, 221, 51, 99, }, { 115, 4, 85, 140, 175, 84, 18, 106, 201, 38, 251, 101, 129, 163, 219, 182, }, }, { { 94, 89, 29, 141, 152, 251, 51, 84, 124, 212, 164, 27, 179, 130, 14, 178, }, { 144, 118, 190, 54, 193, 8, 86, 90, 244, 64, 56, 248, 76, 153, 15, 236, }, { 184, 174, 31, 57, 91, 203, 4, 75, 1, 151, 52, 78, 216, 82, 44, 159, }, { 24, 72, 222, 5, 118, 65, 143, 15, 83, 77, 4, 211, 205, 248, 160, 144, }, { 118, 129, 188, 130, 2, 56, 97, 69, 137, 3, 168, 173, 39, 73, 45, 193, }, { 196, 25, 26, 200, 158, 179, 144, 155, 36, 209, 159, 47, 218, 89, 121, 50, }, { 13, 35, 247, 219, 17, 31, 95, 174, 103, 248, 93, 150, 9, 200, 92, 70, }, { 132, 26, 15, 208, 140, 136, 127, 179, 111, 202, 62, 163, 6, 29, 255, 52, }, { 194, 11, 204, 88, 98, 50, 195, 232, 64, 83, 158, 107, 120, 103, 81, 22, }, { 52, 140, 90, 234, 68, 124, 191, 253, 95, 102, 183, 29, 36, 166, 179, 219, }, { 49, 151, 231, 50, 198, 92, 36, 86, 9, 165, 87, 123, 215, 135, 143, 237, }, { 36, 252, 206, 236, 161, 2, 244, 247, 61, 16, 14, 62, 19, 183, 115, 59, }, { 195, 12, 84, 96, 72, 236, 58, 160, 239, 108, 193, 117, 246, 211, 93, 24, }, { 199, 16, 113, 128, 224, 18, 88, 67, 22, 144, 126, 13, 139, 70, 109, 32, }, { 74, 53, 172, 107, 213, 123, 26, 189, 231, 94, 162, 64, 249, 6, 254, 106, }, { 7, 21, 78, 168, 214, 95, 170, 59, 203, 189, 94, 90, 44, 138, 36, 42, }, { 12, 36, 111, 227, 59, 193, 166, 230, 200, 199, 2, 136, 135, 124, 80, 72, }, { 72, 59, 95, 27, 129, 4, 43, 45, 122, 32, 28, 124, 38, 173, 230, 118, }, { 128, 6, 42, 48, 36, 118, 29, 80, 150, 54, 129, 219, 123, 136, 207, 12, }, { 215, 96, 229, 134, 5, 108, 19, 73, 116, 230, 199, 46, 188, 87, 173, 192, }, { 105, 220, 44, 47, 162, 38, 68, 113, 17, 243, 242, 36, 198, 59, 169, 123, }, { 238, 207, 72, 183, 80, 15, 243, 26, 76, 120, 45, 165, 145, 57, 66, 93, }, { 216, 77, 225, 45, 64, 12, 125, 119, 142, 96, 36, 132, 106, 52, 233, 154, }, { 27, 65, 181, 77, 8, 224, 71, 215, 97, 12, 229, 241, 156, 231, 180, 130, }, { 119, 134, 36, 186, 40, 230, 152, 13, 38, 60, 247, 179, 169, 253, 33, 207, }, { 145, 113, 38, 14, 235, 214, 175, 18, 91, 127, 103, 230, 194, 45, 3, 226, }, { 115, 154, 1, 90, 128, 24, 250, 238, 223, 192, 72, 203, 212, 104, 17, 247, }, { 232, 221, 158, 39, 172, 142, 160, 105, 40, 250, 44, 225, 51, 7, 106, 121, }, { 161, 225, 89, 4, 7, 84, 114, 12, 253, 229, 111, 131, 155, 30, 128, 1, }, { 83, 122, 234, 86, 137, 228, 108, 250, 27, 44, 249, 141, 186, 74, 82, 244, }, { 201, 58, 237, 19, 143, 172, 207, 53, 67, 41, 194, 185, 211, 145, 37, 116, }, { 141, 37, 221, 235, 53, 105, 66, 254, 241, 206, 220, 77, 114, 64, 147, 74, }, { 231, 240, 154, 140, 233, 238, 206, 87, 210, 124, 207, 75, 229, 100, 46, 35, }, { 127, 190, 110, 185, 187, 217, 92, 8, 23, 7, 74, 67, 83, 20, 65, 191, }, { 134, 20, 252, 160, 216, 247, 78, 35, 242, 180, 128, 159, 217, 182, 231, 40, }, { 112, 147, 106, 18, 254, 185, 50, 54, 237, 129, 169, 233, 133, 119, 5, 229, }, { 78, 41, 137, 139, 125, 133, 120, 94, 30, 162, 29, 56, 132, 147, 206, 82, }, { 31, 93, 144, 173, 160, 30, 37, 52, 152, 240, 90, 137, 225, 114, 132, 186, }, { 99, 234, 149, 92, 101, 102, 177, 228, 189, 182, 241, 232, 227, 121, 209, 23, }, { 230, 247, 2, 180, 195, 48, 55, 31, 125, 67, 144, 85, 107, 208, 34, 45, }, { 167, 243, 143, 148, 251, 213, 33, 127, 153, 103, 110, 199, 57, 32, 168, 37, }, { 53, 139, 194, 210, 110, 162, 70, 181, 240, 89, 232, 3, 170, 18, 191, 213, }, { 32, 224, 235, 12, 9, 252, 150, 20, 196, 236, 177, 70, 110, 34, 67, 3, }, { 15, 45, 4, 171, 69, 96, 110, 62, 250, 134, 227, 170, 214, 99, 68, 90, }, { 22, 98, 66, 150, 25, 255, 24, 121, 6, 244, 184, 103, 149, 47, 232, 196, }, { 243, 156, 43, 106, 164, 110, 231, 190, 73, 246, 201, 16, 175, 224, 222, 251, }, { 175, 203, 197, 151, 104, 234, 229, 122, 168, 92, 211, 55, 195, 201, 200, 85, }, { 34, 238, 24, 124, 93, 131, 167, 132, 89, 146, 15, 122, 177, 137, 91, 31, }, { 185, 169, 135, 1, 113, 21, 253, 3, 174, 168, 107, 80, 86, 230, 32, 145, }, { 30, 90, 8, 149, 138, 192, 220, 124, 55, 207, 5, 151, 111, 198, 136, 180, }, { 37, 251, 86, 212, 139, 220, 13, 191, 146, 47, 81, 32, 157, 3, 127, 53, }, { 186, 160, 236, 73, 15, 180, 53, 219, 156, 233, 138, 114, 7, 249, 52, 131, }, { 189, 181, 162, 225, 217, 235, 159, 224, 87, 84, 212, 40, 43, 115, 16, 169, }, { 142, 44, 182, 163, 75, 200, 138, 38, 195, 143, 61, 111, 35, 95, 135, 88, }, { 92, 87, 238, 253, 204, 132, 2, 196, 225, 170, 26, 39, 108, 41, 22, 174, }, { 65, 4, 141, 32, 56, 229, 22, 96, 228, 36, 254, 146, 82, 240, 138, 8, }, { 111, 206, 250, 191, 94, 167, 23, 2, 117, 113, 243, 96, 100, 5, 129, 95, }, { 66, 13, 230, 104, 70, 68, 222, 184, 214, 101, 31, 176, 3, 239, 158, 26, }, { 70, 17, 195, 136, 238, 186, 188, 91, 47, 153, 160, 200, 126, 122, 174, 34, }, { 43, 209, 202, 71, 228, 98, 154, 201, 199, 150, 237, 148, 197, 212, 55, 97, }, { 220, 81, 196, 205, 232, 242, 31, 148, 119, 156, 155, 252, 23, 161, 217, 162, }, { 223, 88, 175, 133, 150, 83, 215, 76, 69, 221, 122, 222, 70, 190, 205, 176, }, { 67, 10, 126, 80, 108, 154, 39, 240, 121, 90, 64, 174, 141, 91, 146, 20, }, { 227, 236, 191, 108, 65, 16, 172, 180, 43, 128, 112, 51, 152, 241, 30, 27, }, { 41, 223, 57, 55, 176, 29, 171, 89, 90, 232, 83, 168, 26, 127, 47, 125, }, { 180, 138, 112, 218, 96, 10, 162, 173, 201, 80, 54, 198, 95, 46, 124, 215, }, { 203, 52, 30, 99, 219, 211, 254, 165, 222, 87, 124, 133, 12, 58, 61, 104, }, { 50, 158, 140, 122, 184, 253, 236, 142, 59, 228, 182, 89, 134, 152, 155, 255, }, { 218, 67, 18, 93, 20, 115, 76, 231, 19, 30, 154, 184, 181, 159, 241, 134, }, { 234, 211, 109, 87, 248, 241, 145, 249, 181, 132, 146, 221, 236, 172, 114, 101, }, { 190, 188, 201, 169, 167, 74, 87, 56, 101, 21, 53, 10, 122, 108, 4, 187, }, { 3, 9, 107, 72, 126, 161, 200, 216, 50, 65, 225, 34, 81, 31, 20, 18, }, { 165, 253, 124, 228, 175, 170, 16, 239, 4, 25, 208, 251, 230, 139, 176, 57, }, { 164, 250, 228, 220, 133, 116, 233, 167, 171, 38, 143, 229, 104, 63, 188, 55, }, { 171, 215, 224, 119, 192, 20, 135, 153, 81, 160, 108, 79, 190, 92, 248, 109, }, { 100, 255, 219, 244, 179, 57, 27, 223, 118, 11, 175, 178, 207, 243, 245, 61, }, { 173, 197, 54, 231, 60, 149, 212, 234, 53, 34, 109, 11, 28, 98, 208, 73, }, { 79, 46, 17, 179, 87, 91, 129, 22, 177, 157, 66, 38, 10, 39, 194, 92, }, { 133, 29, 151, 232, 166, 86, 134, 251, 192, 245, 97, 189, 136, 169, 243, 58, }, { 160, 230, 193, 60, 45, 138, 139, 68, 82, 218, 48, 157, 21, 170, 140, 15, }, { 19, 121, 255, 78, 155, 223, 131, 210, 80, 55, 88, 1, 102, 14, 212, 242, }, { 212, 105, 142, 206, 123, 205, 219, 145, 70, 167, 38, 12, 237, 72, 185, 210, }, { 251, 164, 97, 105, 55, 81, 35, 187, 120, 205, 116, 224, 85, 9, 190, 139, }, { 174, 204, 93, 175, 66, 52, 28, 50, 7, 99, 140, 41, 77, 125, 196, 91, }, { 148, 106, 155, 214, 105, 246, 52, 185, 13, 188, 135, 128, 49, 12, 63, 212, }, { 222, 95, 55, 189, 188, 141, 46, 4, 234, 226, 37, 192, 200, 10, 193, 190, }, { 187, 167, 116, 113, 37, 106, 204, 147, 51, 214, 213, 108, 137, 77, 56, 141, }, { 206, 47, 163, 187, 89, 243, 101, 14, 136, 148, 156, 227, 255, 27, 1, 94, }, { 162, 232, 50, 76, 121, 245, 186, 212, 207, 164, 142, 161, 202, 1, 148, 19, }, { 241, 146, 216, 26, 240, 17, 214, 46, 212, 136, 119, 44, 112, 75, 198, 231, }, { 61, 179, 136, 209, 253, 157, 130, 176, 193, 98, 85, 243, 80, 251, 223, 165, }, { 182, 132, 131, 170, 52, 117, 147, 61, 84, 46, 136, 250, 128, 133, 100, 203, }, { 97, 228, 102, 44, 49, 25, 128, 116, 32, 200, 79, 212, 60, 210, 201, 11, }, { 54, 130, 169, 154, 16, 3, 142, 109, 194, 24, 9, 33, 251, 13, 171, 199, }, { 236, 193, 187, 199, 4, 112, 194, 138, 209, 6, 147, 153, 78, 146, 90, 65, }, { 200, 61, 117, 43, 165, 114, 54, 125, 236, 22, 157, 167, 93, 37, 41, 122, }, { 82, 125, 114, 110, 163, 58, 149, 178, 180, 19, 166, 147, 52, 254, 94, 250, }, { 178, 152, 166, 74, 156, 139, 241, 222, 173, 210, 55, 130, 253, 16, 84, 243, }, { 208, 117, 171, 46, 211, 51, 185, 114, 191, 91, 153, 116, 144, 221, 137, 234, }, { 114, 157, 153, 98, 170, 198, 3, 166, 112, 255, 23, 213, 90, 220, 29, 249, }, { 235, 212, 245, 111, 210, 47, 104, 177, 26, 187, 205, 195, 98, 24, 126, 107, }, { 150, 100, 104, 166, 61, 137, 5, 41, 144, 194, 57, 188, 238, 167, 39, 200, }, { 14, 42, 156, 147, 111, 190, 151, 118, 85, 185, 188, 180, 88, 215, 72, 84, }, { 226, 235, 39, 84, 107, 206, 85, 252, 132, 191, 47, 45, 22, 69, 18, 21, }, { 86, 97, 87, 142, 11, 196, 247, 81, 77, 239, 25, 235, 73, 107, 110, 194, }, { 76, 39, 122, 251, 41, 250, 73, 206, 131, 220, 163, 4, 91, 56, 214, 78, }, { 64, 3, 21, 24, 18, 59, 239, 40, 75, 27, 161, 140, 220, 68, 134, 6, }, { 55, 133, 49, 162, 58, 221, 119, 37, 109, 39, 86, 63, 117, 185, 167, 201, }, { 146, 120, 77, 70, 149, 119, 103, 202, 105, 62, 134, 196, 147, 50, 23, 240, }, { 68, 31, 48, 248, 186, 197, 141, 203, 178, 231, 30, 244, 161, 209, 182, 62, }, { 143, 43, 46, 155, 97, 22, 115, 110, 108, 176, 98, 113, 173, 235, 139, 86, }, { 89, 76, 83, 37, 78, 164, 153, 111, 183, 105, 250, 65, 159, 8, 42, 152, }, { 219, 68, 138, 101, 62, 173, 181, 175, 188, 33, 197, 166, 59, 43, 253, 136, }, { 109, 192, 9, 207, 10, 216, 38, 146, 232, 15, 77, 92, 187, 174, 153, 67, }, { 140, 34, 69, 211, 31, 183, 187, 182, 94, 241, 131, 83, 252, 244, 159, 68, }, { 211, 124, 192, 102, 173, 146, 113, 170, 141, 26, 120, 86, 193, 194, 157, 248, }, { 136, 62, 96, 51, 183, 73, 217, 85, 167, 13, 60, 43, 129, 97, 175, 124, }, { 71, 22, 91, 176, 196, 100, 69, 19, 128, 166, 255, 214, 240, 206, 162, 44, }, { 229, 254, 105, 252, 189, 145, 255, 199, 79, 2, 113, 119, 58, 207, 54, 63, }, { 47, 205, 239, 167, 76, 156, 248, 42, 62, 106, 82, 236, 184, 65, 7, 89, }, { 18, 126, 103, 118, 177, 1, 122, 154, 255, 8, 7, 31, 232, 186, 216, 252, }, { 139, 55, 11, 123, 201, 232, 17, 141, 149, 76, 221, 9, 208, 126, 187, 110, }, { 17, 119, 12, 62, 207, 160, 178, 66, 205, 73, 230, 61, 185, 165, 204, 238, }, { 84, 111, 164, 254, 95, 187, 198, 193, 208, 145, 167, 215, 150, 192, 118, 222, }, { 168, 222, 139, 63, 190, 181, 79, 65, 99, 225, 141, 109, 239, 67, 236, 127, }, { 135, 19, 100, 152, 242, 41, 183, 107, 93, 139, 223, 129, 87, 2, 235, 38, }, { 45, 195, 28, 215, 24, 227, 201, 186, 163, 20, 236, 208, 103, 234, 31, 69, }, { 93, 80, 118, 197, 230, 90, 251, 140, 78, 149, 69, 57, 226, 157, 26, 160, }, { 157, 85, 73, 237, 208, 23, 9, 244, 147, 184, 101, 110, 69, 81, 83, 170, }, { 57, 175, 173, 49, 85, 99, 224, 83, 56, 158, 234, 139, 45, 110, 239, 157, }, { 95, 94, 133, 181, 178, 37, 202, 28, 211, 235, 251, 5, 61, 54, 2, 188, }, { 38, 242, 61, 156, 245, 125, 197, 103, 160, 110, 176, 2, 204, 28, 107, 39, }, { 5, 27, 189, 216, 130, 32, 155, 171, 86, 195, 224, 102, 243, 33, 60, 54, }, { 213, 110, 22, 246, 81, 19, 34, 217, 233, 152, 121, 18, 99, 252, 181, 220, }, { 252, 177, 47, 193, 225, 14, 137, 128, 179, 112, 42, 186, 121, 131, 154, 161, }, { 25, 79, 70, 61, 92, 159, 118, 71, 252, 114, 91, 205, 67, 76, 172, 158, }, { 9, 63, 210, 59, 185, 225, 61, 77, 158, 4, 226, 238, 116, 93, 108, 126, }, { 179, 159, 62, 114, 182, 85, 8, 150, 2, 237, 104, 156, 115, 164, 88, 253, }, { 250, 163, 249, 81, 29, 143, 218, 243, 215, 242, 43, 254, 219, 189, 178, 133, }, { 239, 200, 208, 143, 122, 209, 10, 82, 227, 71, 114, 187, 31, 141, 78, 83, }, { 10, 54, 185, 115, 199, 64, 245, 149, 172, 69, 3, 204, 37, 66, 120, 108, }, { 48, 144, 127, 10, 236, 130, 221, 30, 166, 154, 8, 101, 89, 51, 131, 227, }, { 205, 38, 200, 243, 39, 82, 173, 214, 186, 213, 125, 193, 174, 4, 21, 76, }, { 214, 103, 125, 190, 47, 178, 234, 1, 219, 217, 152, 48, 50, 227, 161, 206, }, { 107, 210, 223, 95, 246, 89, 117, 225, 140, 141, 76, 24, 25, 144, 177, 103, }, { 8, 56, 74, 3, 147, 63, 196, 5, 49, 59, 189, 240, 250, 233, 96, 112, }, { 181, 141, 232, 226, 74, 212, 91, 229, 102, 111, 105, 216, 209, 154, 112, 217, }, { 110, 201, 98, 135, 116, 121, 238, 74, 218, 78, 172, 126, 234, 177, 141, 81, }, { 101, 248, 67, 204, 153, 231, 226, 151, 217, 52, 240, 172, 65, 71, 249, 51, }, { 245, 142, 253, 250, 88, 239, 180, 205, 45, 116, 200, 84, 13, 222, 246, 223, }, { 170, 208, 120, 79, 234, 202, 126, 209, 254, 159, 51, 81, 48, 232, 244, 99, }, { 116, 143, 79, 242, 86, 71, 80, 213, 20, 125, 22, 145, 248, 226, 53, 221, }, { 75, 50, 52, 83, 255, 165, 227, 245, 72, 97, 253, 94, 119, 178, 242, 100, }, { 255, 184, 68, 137, 159, 175, 65, 88, 129, 49, 203, 152, 40, 156, 142, 179, }, { 129, 1, 178, 8, 14, 168, 228, 24, 57, 9, 222, 197, 245, 60, 195, 2, }, { 193, 2, 167, 16, 28, 147, 11, 48, 114, 18, 127, 73, 41, 120, 69, 4, }, { 209, 114, 51, 22, 249, 237, 64, 58, 16, 100, 198, 106, 30, 105, 133, 228, }, { 40, 216, 161, 15, 154, 195, 82, 17, 245, 215, 12, 182, 148, 203, 35, 115, }, { 177, 145, 205, 2, 226, 42, 57, 6, 159, 147, 214, 160, 172, 15, 64, 225, }, { 155, 71, 159, 125, 44, 150, 90, 135, 247, 58, 100, 42, 231, 111, 123, 142, }, { 221, 86, 92, 245, 194, 44, 230, 220, 216, 163, 196, 226, 153, 21, 213, 172, }, { 35, 233, 128, 68, 119, 93, 94, 204, 246, 173, 80, 100, 63, 61, 87, 17, }, { 63, 189, 123, 161, 169, 226, 179, 32, 92, 28, 235, 207, 143, 80, 199, 185, }, { 2, 14, 243, 112, 84, 127, 49, 144, 157, 126, 190, 60, 223, 171, 24, 28, }, { 16, 112, 148, 6, 229, 126, 75, 10, 98, 118, 185, 35, 55, 17, 192, 224, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 26, 70, 45, 117, 34, 62, 190, 159, 206, 51, 186, 239, 18, 83, 184, 140, }, { 96, 227, 254, 20, 27, 199, 121, 60, 143, 247, 16, 202, 178, 102, 197, 5, }, { 90, 69, 56, 109, 48, 5, 81, 183, 133, 40, 27, 99, 206, 23, 62, 138, }, { 62, 186, 227, 153, 131, 60, 74, 104, 243, 35, 180, 209, 1, 228, 203, 183, }, { 106, 213, 71, 103, 220, 135, 140, 169, 35, 178, 19, 6, 151, 36, 189, 105, }, { 113, 148, 242, 42, 212, 103, 203, 126, 66, 190, 246, 247, 11, 195, 9, 235, }, { 117, 136, 215, 202, 124, 153, 169, 157, 187, 66, 73, 143, 118, 86, 57, 211, }, { 183, 131, 27, 146, 30, 171, 106, 117, 251, 17, 215, 228, 14, 49, 104, 197, }, { 122, 165, 211, 97, 57, 249, 199, 163, 65, 196, 170, 37, 160, 53, 125, 137, }, { 217, 74, 121, 21, 106, 210, 132, 63, 33, 95, 123, 154, 228, 128, 229, 148, }, { 108, 199, 145, 247, 32, 6, 223, 218, 71, 48, 18, 66, 53, 26, 149, 77, }, { 147, 127, 213, 126, 191, 169, 158, 130, 198, 1, 217, 218, 29, 134, 27, 254, }, { 69, 24, 168, 192, 144, 27, 116, 131, 29, 216, 65, 234, 47, 101, 186, 48, }, { 154, 64, 7, 69, 6, 72, 163, 207, 88, 5, 59, 52, 105, 219, 119, 128, }, { 137, 57, 248, 11, 157, 151, 32, 29, 8, 50, 99, 53, 15, 213, 163, 114, }, { 58, 166, 198, 121, 43, 194, 40, 139, 10, 223, 11, 169, 124, 113, 251, 143, }, { 120, 171, 32, 17, 109, 134, 246, 51, 220, 186, 20, 25, 127, 158, 101, 149, }, { 29, 83, 99, 221, 244, 97, 20, 164, 5, 142, 228, 181, 62, 217, 156, 166, }, { 138, 48, 147, 67, 227, 54, 232, 197, 58, 115, 130, 23, 94, 202, 183, 96, }, { 151, 99, 240, 158, 23, 87, 252, 97, 63, 253, 102, 162, 96, 19, 43, 198, }, { 248, 173, 10, 33, 73, 240, 235, 99, 74, 140, 149, 194, 4, 22, 170, 153, }, { 249, 170, 146, 25, 99, 46, 18, 43, 229, 179, 202, 220, 138, 162, 166, 151, }, { 88, 75, 203, 29, 100, 122, 96, 39, 24, 86, 165, 95, 17, 188, 38, 150, }, { 44, 196, 132, 239, 50, 61, 48, 242, 12, 43, 179, 206, 233, 94, 19, 75, }, { 6, 18, 214, 144, 252, 129, 83, 115, 100, 130, 1, 68, 162, 62, 40, 36, }, { 188, 178, 58, 217, 243, 53, 102, 168, 248, 107, 139, 54, 165, 199, 28, 167, }, { 156, 82, 209, 213, 250, 201, 240, 188, 60, 135, 58, 112, 203, 229, 95, 164, }, { 85, 104, 60, 198, 117, 101, 63, 137, 127, 174, 248, 201, 24, 116, 122, 208, }, { 124, 183, 5, 241, 197, 120, 148, 208, 37, 70, 171, 97, 2, 11, 85, 173, }, { 42, 214, 82, 127, 206, 188, 99, 129, 104, 169, 178, 138, 75, 96, 59, 111, }, { 59, 161, 94, 65, 1, 28, 209, 195, 165, 224, 84, 183, 242, 197, 247, 129, }, { 159, 91, 186, 157, 132, 104, 56, 100, 14, 198, 219, 82, 154, 250, 75, 182, }, { 198, 23, 233, 184, 202, 204, 161, 11, 185, 175, 33, 19, 5, 242, 97, 46, }, { 28, 84, 251, 229, 222, 191, 237, 236, 170, 177, 187, 171, 176, 109, 144, 168, }, { 254, 191, 220, 177, 181, 113, 184, 16, 46, 14, 148, 134, 166, 40, 130, 189, }, { 98, 237, 13, 100, 79, 184, 72, 172, 18, 137, 174, 246, 109, 205, 221, 25, }, { 125, 176, 157, 201, 239, 166, 109, 152, 138, 121, 244, 127, 140, 191, 89, 163, }, { 33, 231, 115, 52, 35, 34, 111, 92, 107, 211, 238, 88, 224, 150, 79, 13, }, { 192, 5, 63, 40, 54, 77, 242, 120, 221, 45, 32, 87, 167, 204, 73, 10, }, { 242, 155, 179, 82, 142, 176, 30, 246, 230, 201, 150, 14, 33, 84, 210, 245, }, { 247, 128, 14, 138, 12, 144, 133, 93, 176, 10, 118, 104, 210, 117, 238, 195, }, { 51, 153, 20, 66, 146, 35, 21, 198, 148, 219, 233, 71, 8, 44, 151, 241, }, { 152, 78, 244, 53, 82, 55, 146, 95, 197, 123, 133, 8, 182, 112, 111, 156, }, { 169, 217, 19, 7, 148, 107, 182, 9, 204, 222, 210, 115, 97, 247, 224, 113, }, { 130, 8, 217, 64, 112, 9, 44, 192, 11, 72, 63, 231, 164, 35, 215, 16, }, { 77, 32, 226, 195, 3, 36, 176, 134, 44, 227, 252, 26, 213, 140, 218, 64, }, { 244, 137, 101, 194, 114, 49, 77, 133, 130, 75, 151, 74, 131, 106, 250, 209, }, { 246, 135, 150, 178, 38, 78, 124, 21, 31, 53, 41, 118, 92, 193, 226, 205, }, { 20, 108, 177, 230, 77, 128, 41, 233, 155, 138, 6, 91, 74, 132, 240, 216, }, { 123, 162, 75, 89, 19, 39, 62, 235, 238, 251, 245, 59, 46, 129, 113, 135, }, { 121, 172, 184, 41, 71, 88, 15, 123, 115, 133, 75, 7, 241, 42, 105, 155, }, { 23, 101, 218, 174, 51, 33, 225, 49, 169, 203, 231, 121, 27, 155, 228, 202, }, { 240, 149, 64, 34, 218, 207, 47, 102, 123, 183, 40, 50, 254, 255, 202, 233, }, { 191, 187, 81, 145, 141, 148, 174, 112, 202, 42, 106, 20, 244, 216, 8, 181, }, { 207, 40, 59, 131, 115, 45, 156, 70, 39, 171, 195, 253, 113, 175, 13, 80, }, { 1, 7, 152, 56, 42, 222, 249, 72, 175, 63, 95, 30, 142, 180, 12, 14, }, { 237, 198, 35, 255, 46, 174, 59, 194, 126, 57, 204, 135, 192, 38, 86, 79, }, { 204, 33, 80, 203, 13, 140, 84, 158, 21, 234, 34, 223, 32, 176, 25, 66, }, { 21, 107, 41, 222, 103, 94, 208, 161, 52, 181, 89, 69, 196, 48, 252, 214, }, { 39, 245, 165, 164, 223, 163, 60, 47, 15, 81, 239, 28, 66, 168, 103, 41, }, { 163, 239, 170, 116, 83, 43, 67, 156, 96, 155, 209, 191, 68, 181, 152, 29, }, { 11, 49, 33, 75, 237, 158, 12, 221, 3, 122, 92, 210, 171, 246, 116, 98, }, { 56, 168, 53, 9, 127, 189, 25, 27, 151, 161, 181, 149, 163, 218, 227, 147, }, { 87, 102, 207, 182, 33, 26, 14, 25, 226, 208, 70, 245, 199, 223, 98, 204, }, { 103, 246, 176, 188, 205, 152, 211, 7, 68, 74, 78, 144, 158, 236, 225, 47, }, { 131, 15, 65, 120, 90, 215, 213, 136, 164, 119, 96, 249, 42, 151, 219, 30, }, { 60, 180, 16, 233, 215, 67, 123, 248, 110, 93, 10, 237, 222, 79, 211, 171, }, { 253, 182, 183, 249, 203, 208, 112, 200, 28, 79, 117, 164, 247, 55, 150, 175, }, { 172, 194, 174, 223, 22, 75, 45, 162, 154, 29, 50, 21, 146, 214, 220, 71, }, { 149, 109, 3, 238, 67, 40, 205, 241, 162, 131, 216, 158, 191, 184, 51, 218, }, { 81, 116, 25, 38, 221, 155, 93, 106, 134, 82, 71, 177, 101, 225, 74, 232, }, { 210, 123, 88, 94, 135, 76, 136, 226, 34, 37, 39, 72, 79, 118, 145, 246, }, { 225, 226, 76, 28, 21, 111, 157, 36, 182, 254, 206, 15, 71, 90, 6, 7, }, { 228, 249, 241, 196, 151, 79, 6, 143, 224, 61, 46, 105, 180, 123, 58, 49, }, { 166, 244, 23, 172, 209, 11, 216, 55, 54, 88, 49, 217, 183, 148, 164, 43, }, { 46, 202, 119, 159, 102, 66, 1, 98, 145, 85, 13, 242, 54, 245, 11, 87, }, { 158, 92, 34, 165, 174, 182, 193, 44, 161, 249, 132, 76, 20, 78, 71, 184, }, { 176, 150, 85, 58, 200, 244, 192, 78, 48, 172, 137, 190, 34, 187, 76, 239, }, { 4, 28, 37, 224, 168, 254, 98, 227, 249, 252, 191, 120, 125, 149, 48, 56, }, { 202, 51, 134, 91, 241, 13, 7, 237, 113, 104, 35, 155, 130, 142, 49, 102, }, { 224, 229, 212, 36, 63, 177, 100, 108, 25, 193, 145, 17, 201, 238, 10, 9, }, { 126, 185, 246, 129, 145, 7, 165, 64, 184, 56, 21, 93, 221, 160, 77, 177, }, { 102, 241, 40, 132, 231, 70, 42, 79, 235, 117, 17, 142, 16, 88, 237, 33, }, { 80, 115, 129, 30, 247, 69, 164, 34, 41, 109, 24, 175, 235, 85, 70, 230, }, { 73, 60, 199, 35, 171, 218, 210, 101, 213, 31, 67, 98, 168, 25, 234, 120, }, { 91, 66, 160, 85, 26, 219, 168, 255, 42, 23, 68, 125, 64, 163, 50, 132, }, { 153, 73, 108, 13, 120, 233, 107, 23, 106, 68, 218, 22, 56, 196, 99, 146, }, { 104, 219, 180, 23, 136, 248, 189, 57, 190, 204, 173, 58, 72, 143, 165, 117, }, { 233, 218, 6, 31, 134, 80, 89, 33, 135, 197, 115, 255, 189, 179, 102, 119, }, { 197, 30, 130, 240, 180, 109, 105, 211, 139, 238, 192, 49, 84, 237, 117, 60, }, }, { { 215, 72, 18, 163, 190, 41, 37, 217, 16, 236, 174, 223, 106, 45, 1, 252, }, { 99, 68, 17, 222, 96, 14, 130, 108, 146, 124, 242, 42, 32, 203, 160, 238, }, { 94, 19, 116, 34, 61, 13, 175, 114, 250, 39, 199, 35, 170, 210, 71, 221, }, { 170, 140, 35, 84, 138, 1, 27, 10, 153, 136, 19, 7, 199, 182, 93, 17, }, { 234, 31, 119, 95, 227, 42, 8, 199, 120, 183, 155, 214, 224, 52, 230, 207, }, { 42, 105, 139, 66, 88, 87, 61, 83, 152, 246, 192, 102, 137, 113, 232, 110, }, { 41, 22, 228, 115, 132, 134, 68, 117, 122, 75, 254, 20, 124, 121, 79, 49, }, { 156, 142, 194, 160, 175, 238, 117, 99, 166, 176, 9, 207, 101, 38, 50, 22, }, { 225, 74, 243, 87, 155, 198, 75, 176, 47, 212, 180, 23, 200, 189, 110, 251, }, { 164, 88, 22, 15, 85, 93, 211, 23, 43, 239, 126, 80, 51, 39, 255, 196, }, { 235, 139, 82, 241, 22, 101, 158, 100, 38, 220, 48, 248, 179, 141, 58, 250, }, { 104, 17, 149, 214, 24, 226, 193, 27, 197, 31, 221, 235, 8, 66, 40, 218, }, { 157, 26, 231, 14, 90, 161, 227, 192, 248, 219, 162, 225, 54, 159, 238, 35, }, { 174, 153, 183, 169, 216, 254, 6, 195, 34, 231, 250, 191, 72, 23, 171, 197, }, { 40, 130, 193, 221, 113, 201, 210, 214, 36, 32, 85, 58, 47, 192, 147, 4, }, { 183, 115, 108, 76, 2, 246, 222, 147, 96, 45, 98, 135, 191, 238, 6, 77, }, { 85, 70, 240, 42, 69, 225, 236, 5, 173, 68, 232, 226, 130, 91, 207, 233, }, { 208, 34, 233, 111, 48, 7, 65, 54, 73, 62, 121, 21, 16, 132, 80, 119, }, { 175, 13, 146, 7, 45, 177, 144, 96, 124, 140, 81, 145, 27, 174, 119, 240, }, { 98, 208, 52, 112, 149, 65, 20, 207, 204, 23, 89, 4, 115, 114, 124, 219, }, { 247, 224, 56, 71, 107, 221, 205, 94, 129, 18, 234, 86, 152, 108, 189, 147, }, { 239, 158, 198, 12, 68, 154, 131, 173, 157, 179, 217, 64, 60, 44, 204, 46, }, { 179, 102, 248, 177, 80, 9, 195, 90, 219, 66, 139, 63, 48, 79, 240, 153, }, { 46, 124, 31, 191, 10, 168, 32, 154, 35, 153, 41, 222, 6, 208, 30, 186, }, { 150, 79, 99, 6, 34, 77, 160, 183, 175, 184, 141, 32, 30, 22, 102, 23, }, { 31, 20, 5, 135, 161, 105, 42, 28, 69, 115, 228, 220, 222, 233, 32, 54, }, { 165, 204, 51, 161, 160, 18, 69, 180, 117, 132, 213, 126, 96, 158, 35, 241, }, { 36, 189, 190, 25, 135, 11, 245, 78, 42, 145, 173, 49, 125, 224, 74, 187, }, { 136, 207, 67, 47, 118, 107, 28, 8, 180, 160, 194, 210, 147, 70, 154, 20, }, { 254, 94, 246, 208, 58, 175, 97, 172, 106, 167, 80, 203, 22, 84, 78, 205, }, { 3, 127, 111, 49, 220, 209, 121, 38, 226, 189, 62, 114, 245, 8, 167, 95, }, { 134, 27, 118, 116, 169, 55, 212, 21, 6, 199, 175, 133, 103, 215, 56, 193, }, { 245, 11, 114, 216, 66, 67, 34, 219, 61, 196, 127, 10, 62, 221, 198, 249, }, { 240, 138, 195, 139, 229, 243, 169, 177, 216, 192, 61, 156, 226, 197, 236, 24, }, { 100, 46, 234, 18, 238, 32, 230, 131, 203, 174, 37, 224, 90, 98, 241, 101, }, { 33, 60, 15, 74, 32, 187, 126, 36, 207, 149, 239, 167, 161, 248, 96, 90, }, { 27, 1, 145, 122, 243, 150, 55, 213, 254, 28, 13, 100, 81, 72, 214, 226, }, { 29, 255, 79, 24, 136, 247, 197, 153, 249, 165, 113, 128, 120, 88, 91, 92, }, { 105, 133, 176, 120, 237, 173, 87, 184, 155, 116, 118, 197, 91, 251, 244, 239, }, { 137, 91, 102, 129, 131, 36, 138, 171, 234, 203, 105, 252, 192, 255, 70, 33, }, { 67, 236, 59, 58, 181, 250, 106, 235, 3, 130, 182, 163, 210, 138, 28, 129, }, { 216, 8, 2, 86, 148, 58, 123, 103, 252, 224, 104, 166, 205, 5, 127, 28, }, { 91, 146, 197, 113, 154, 189, 36, 24, 31, 35, 133, 181, 118, 202, 109, 60, }, { 209, 182, 204, 193, 197, 72, 215, 149, 23, 85, 210, 59, 67, 61, 140, 66, }, { 7, 106, 251, 204, 142, 46, 100, 239, 89, 210, 215, 202, 122, 169, 81, 139, }, { 10, 193, 161, 166, 141, 163, 213, 212, 9, 8, 132, 239, 123, 48, 84, 1, }, { 37, 41, 155, 183, 114, 68, 99, 237, 116, 250, 6, 31, 46, 89, 150, 142, }, { 163, 50, 237, 195, 219, 115, 183, 248, 114, 61, 169, 154, 73, 142, 174, 79, }, { 34, 67, 96, 123, 252, 106, 7, 2, 45, 40, 209, 213, 84, 240, 199, 5, }, { 97, 175, 91, 65, 73, 144, 109, 233, 46, 170, 103, 118, 134, 122, 219, 132, }, { 20, 65, 129, 143, 217, 133, 105, 107, 18, 16, 203, 29, 246, 96, 168, 2, }, { 166, 179, 92, 144, 124, 195, 60, 146, 151, 57, 235, 12, 149, 150, 132, 174, }, { 17, 192, 48, 220, 126, 53, 226, 1, 247, 20, 137, 139, 42, 120, 130, 227, }, { 2, 235, 74, 159, 41, 158, 239, 133, 188, 214, 149, 92, 166, 177, 123, 106, }, { 47, 232, 58, 17, 255, 231, 182, 57, 125, 242, 130, 240, 85, 105, 194, 143, }, { 202, 183, 93, 187, 54, 222, 224, 64, 233, 73, 223, 95, 18, 117, 90, 160, }, { 60, 195, 64, 82, 168, 76, 187, 189, 54, 48, 158, 39, 217, 160, 59, 6, }, { 78, 71, 97, 80, 182, 119, 219, 208, 83, 88, 229, 134, 211, 19, 25, 11, }, { 125, 196, 49, 247, 52, 40, 62, 211, 137, 100, 189, 216, 173, 155, 92, 237, }, { 185, 167, 89, 23, 221, 170, 22, 142, 210, 74, 15, 208, 75, 127, 164, 152, }, { 128, 229, 168, 22, 210, 86, 38, 89, 1, 126, 211, 97, 78, 199, 181, 127, }, { 4, 21, 148, 253, 82, 255, 29, 201, 187, 111, 233, 184, 143, 161, 246, 212, }, { 50, 23, 117, 9, 119, 16, 115, 160, 132, 87, 243, 112, 45, 49, 153, 211, }, { 198, 136, 34, 127, 192, 28, 199, 216, 231, 248, 39, 84, 64, 85, 131, 31, }, { 65, 7, 113, 165, 156, 100, 133, 110, 191, 84, 35, 255, 116, 59, 103, 235, }, { 11, 85, 132, 8, 120, 236, 67, 119, 87, 99, 47, 193, 40, 137, 136, 52, }, { 251, 223, 71, 131, 157, 31, 234, 198, 143, 163, 18, 93, 202, 76, 100, 44, }, { 111, 123, 110, 26, 150, 204, 165, 244, 156, 205, 10, 33, 114, 235, 121, 81, }, { 75, 198, 208, 3, 17, 199, 80, 186, 182, 92, 167, 16, 15, 11, 51, 234, }, { 220, 29, 150, 171, 198, 197, 102, 174, 71, 143, 129, 30, 66, 164, 137, 200, }, { 149, 48, 12, 55, 254, 156, 217, 145, 77, 5, 179, 82, 235, 30, 193, 72, }, { 132, 240, 60, 235, 128, 169, 59, 144, 186, 17, 58, 217, 193, 102, 67, 171, }, { 187, 76, 19, 136, 244, 52, 249, 11, 110, 156, 154, 140, 237, 206, 223, 242, }, { 199, 28, 7, 209, 53, 83, 81, 123, 185, 147, 140, 122, 19, 236, 95, 42, }, { 22, 170, 203, 16, 240, 27, 134, 238, 174, 198, 94, 65, 80, 209, 211, 104, }, { 222, 246, 220, 52, 239, 91, 137, 43, 251, 89, 20, 66, 228, 21, 242, 162, }, { 221, 137, 179, 5, 51, 138, 240, 13, 25, 228, 42, 48, 17, 29, 85, 253, }, { 103, 81, 133, 35, 50, 241, 159, 165, 41, 19, 27, 146, 175, 106, 86, 58, }, { 224, 222, 214, 249, 110, 137, 221, 19, 113, 191, 31, 57, 155, 4, 178, 206, }, { 244, 159, 87, 118, 183, 12, 180, 120, 99, 175, 212, 36, 109, 100, 26, 204, }, { 72, 185, 191, 50, 205, 22, 41, 156, 84, 225, 153, 98, 250, 3, 148, 181, }, { 230, 32, 8, 155, 21, 232, 47, 95, 118, 6, 99, 221, 178, 20, 63, 112, }, { 108, 4, 1, 43, 74, 29, 220, 210, 126, 112, 52, 83, 135, 227, 222, 14, }, { 89, 121, 143, 238, 179, 35, 203, 157, 163, 245, 16, 233, 208, 123, 22, 86, }, { 80, 199, 65, 121, 226, 81, 103, 111, 72, 64, 170, 116, 94, 67, 229, 8, }, { 120, 69, 128, 164, 147, 152, 181, 185, 108, 96, 255, 78, 113, 131, 118, 12, }, { 218, 227, 72, 201, 189, 164, 148, 226, 64, 54, 253, 250, 107, 180, 4, 118, }, { 180, 12, 3, 125, 222, 39, 167, 181, 130, 144, 92, 245, 74, 230, 161, 18, }, { 12, 63, 127, 196, 246, 194, 39, 152, 14, 177, 248, 11, 82, 32, 217, 191, }, { 242, 97, 137, 20, 204, 109, 70, 52, 100, 22, 168, 192, 68, 116, 151, 114, }, { 190, 205, 162, 219, 83, 132, 114, 97, 139, 152, 216, 26, 49, 214, 245, 19, }, { 243, 245, 172, 186, 57, 34, 208, 151, 58, 125, 3, 238, 23, 205, 75, 71, }, { 145, 37, 152, 202, 172, 99, 196, 88, 246, 106, 90, 234, 100, 191, 55, 156, }, { 92, 248, 62, 189, 20, 147, 64, 247, 70, 241, 82, 127, 12, 99, 60, 183, }, { 23, 62, 238, 190, 5, 84, 16, 77, 240, 173, 245, 111, 3, 104, 15, 93, }, { 127, 47, 123, 104, 29, 182, 209, 86, 53, 178, 40, 132, 11, 42, 39, 135, }, { 130, 14, 226, 137, 251, 200, 201, 220, 189, 168, 70, 61, 232, 118, 206, 21, }, { 192, 118, 252, 29, 187, 125, 53, 148, 224, 65, 91, 176, 105, 69, 14, 161, }, { 213, 163, 88, 60, 151, 183, 202, 92, 172, 58, 59, 131, 204, 156, 122, 150, }, { 217, 156, 39, 248, 97, 117, 237, 196, 162, 139, 195, 136, 158, 188, 163, 41, }, { 160, 77, 130, 242, 7, 162, 206, 222, 144, 128, 151, 232, 188, 134, 9, 16, }, { 168, 103, 105, 203, 163, 159, 244, 143, 37, 94, 134, 91, 97, 7, 38, 123, }, { 173, 230, 216, 152, 4, 47, 127, 229, 192, 90, 196, 205, 189, 31, 12, 154, }, { 186, 216, 54, 38, 1, 123, 111, 168, 48, 247, 49, 162, 190, 119, 3, 199, }, { 177, 141, 178, 46, 121, 151, 44, 223, 103, 148, 30, 99, 150, 254, 139, 243, }, { 227, 161, 185, 200, 178, 88, 164, 53, 147, 2, 33, 75, 110, 12, 21, 145, }, { 182, 231, 73, 226, 247, 185, 72, 48, 62, 70, 201, 169, 236, 87, 218, 120, }, { 32, 168, 42, 228, 213, 244, 232, 135, 145, 254, 68, 137, 242, 65, 188, 111, }, { 155, 228, 57, 108, 33, 192, 17, 140, 255, 98, 222, 5, 31, 143, 99, 157, }, { 133, 100, 25, 69, 117, 230, 173, 51, 228, 122, 145, 247, 146, 223, 159, 158, }, { 126, 187, 94, 198, 232, 249, 71, 245, 107, 217, 131, 170, 88, 147, 251, 178, }, { 96, 59, 126, 239, 188, 223, 251, 74, 112, 193, 204, 88, 213, 195, 7, 177, }, { 55, 150, 196, 90, 208, 160, 248, 202, 97, 83, 177, 230, 241, 41, 179, 50, }, { 196, 99, 104, 224, 233, 130, 40, 93, 91, 46, 178, 8, 230, 228, 248, 117, }, { 250, 75, 98, 45, 104, 80, 124, 101, 209, 200, 185, 115, 153, 245, 184, 25, }, { 81, 83, 100, 215, 23, 30, 241, 204, 22, 43, 1, 90, 13, 250, 57, 61, }, { 201, 200, 50, 138, 234, 15, 153, 102, 11, 244, 225, 45, 231, 125, 253, 255, }, { 1, 148, 37, 174, 245, 79, 150, 163, 94, 107, 171, 46, 83, 185, 220, 53, }, { 13, 171, 90, 106, 3, 141, 177, 59, 80, 218, 83, 37, 1, 153, 5, 138, }, { 138, 36, 9, 176, 95, 245, 243, 141, 8, 118, 87, 142, 53, 247, 225, 126, }, { 52, 233, 171, 107, 12, 113, 129, 236, 131, 238, 143, 148, 4, 33, 20, 109, }, { 77, 56, 14, 97, 106, 166, 162, 246, 177, 229, 219, 244, 38, 27, 190, 84, }, { 176, 25, 151, 128, 140, 216, 186, 124, 57, 255, 181, 77, 197, 71, 87, 198, }, { 73, 45, 154, 156, 56, 89, 191, 63, 10, 138, 50, 76, 169, 186, 72, 128, }, { 146, 90, 247, 251, 112, 178, 189, 126, 20, 215, 100, 152, 145, 183, 144, 195, }, { 24, 126, 254, 75, 47, 71, 78, 243, 28, 161, 51, 22, 164, 64, 113, 189, }, { 114, 132, 33, 2, 30, 59, 96, 109, 101, 104, 123, 161, 10, 179, 34, 13, }, { 83, 184, 46, 72, 62, 128, 30, 73, 170, 253, 148, 6, 171, 75, 66, 87, }, { 74, 82, 245, 173, 228, 136, 198, 25, 232, 55, 12, 62, 92, 178, 239, 223, }, { 141, 78, 242, 124, 209, 219, 151, 98, 81, 164, 128, 68, 79, 94, 176, 245, }, { 171, 24, 6, 250, 127, 78, 141, 169, 199, 227, 184, 41, 148, 15, 129, 36, }, { 144, 177, 189, 100, 89, 44, 82, 251, 168, 1, 241, 196, 55, 6, 235, 169, }, { 79, 211, 68, 254, 67, 56, 77, 115, 13, 51, 78, 168, 128, 170, 197, 62, }, { 154, 112, 28, 194, 212, 143, 135, 47, 161, 9, 117, 43, 76, 54, 191, 168, }, { 219, 119, 109, 103, 72, 235, 2, 65, 30, 93, 86, 212, 56, 13, 216, 67, }, { 214, 220, 55, 13, 75, 102, 179, 122, 78, 135, 5, 241, 57, 148, 221, 201, }, { 26, 149, 180, 212, 6, 217, 161, 118, 160, 119, 166, 74, 2, 241, 10, 215, }, { 188, 38, 232, 68, 122, 26, 157, 228, 55, 78, 77, 70, 151, 103, 142, 121, }, { 16, 84, 21, 114, 139, 122, 116, 162, 169, 127, 34, 165, 121, 193, 94, 214, }, { 147, 206, 210, 85, 133, 253, 43, 221, 74, 188, 207, 182, 194, 14, 76, 246, }, { 158, 101, 136, 63, 134, 112, 154, 230, 26, 102, 156, 147, 195, 151, 73, 124, }, { 151, 219, 70, 168, 215, 2, 54, 20, 241, 211, 38, 14, 77, 175, 186, 34, }, { 48, 252, 63, 150, 94, 142, 156, 37, 56, 129, 102, 44, 139, 128, 226, 185, }, { 30, 128, 32, 41, 84, 38, 188, 191, 27, 24, 79, 242, 141, 80, 252, 3, }, { 15, 64, 16, 245, 42, 19, 94, 190, 236, 12, 198, 121, 167, 40, 126, 224, }, { 102, 197, 160, 141, 199, 190, 9, 6, 119, 120, 176, 188, 252, 211, 138, 15, }, { 119, 5, 144, 81, 185, 139, 235, 7, 128, 108, 57, 55, 214, 171, 8, 236, }, { 64, 147, 84, 11, 105, 43, 19, 205, 225, 63, 136, 209, 39, 130, 187, 222, }, { 162, 166, 200, 109, 46, 60, 33, 91, 44, 86, 2, 180, 26, 55, 114, 122, }, { 193, 226, 217, 179, 78, 50, 163, 55, 190, 42, 240, 158, 58, 252, 210, 148, }, { 106, 250, 223, 73, 49, 124, 46, 158, 121, 201, 72, 183, 174, 243, 83, 176, }, { 18, 191, 95, 237, 162, 228, 155, 39, 21, 169, 183, 249, 223, 112, 37, 188, }, { 84, 210, 213, 132, 176, 174, 122, 166, 243, 47, 67, 204, 209, 226, 19, 220, }, { 95, 135, 81, 140, 200, 66, 57, 209, 164, 76, 108, 13, 249, 107, 155, 232, }, { 211, 93, 134, 94, 236, 214, 56, 16, 171, 131, 71, 103, 229, 140, 247, 40, }, { 101, 186, 207, 188, 27, 111, 112, 32, 149, 197, 142, 206, 9, 219, 45, 80, }, { 169, 243, 76, 101, 86, 208, 98, 44, 123, 53, 45, 117, 50, 190, 250, 78, }, { 61, 87, 101, 252, 93, 3, 45, 30, 104, 91, 53, 9, 138, 25, 231, 51, }, { 68, 134, 192, 246, 59, 212, 14, 4, 90, 80, 97, 105, 168, 35, 77, 10, }, { 129, 113, 141, 184, 39, 25, 176, 250, 95, 21, 120, 79, 29, 126, 105, 74, }, { 252, 181, 188, 79, 19, 49, 142, 41, 214, 113, 197, 151, 176, 229, 53, 167, }, { 223, 98, 249, 154, 26, 20, 31, 136, 165, 50, 191, 108, 183, 172, 46, 151, }, { 70, 109, 138, 105, 18, 74, 225, 129, 230, 134, 244, 53, 14, 146, 54, 96, }, { 248, 160, 40, 178, 65, 206, 147, 224, 109, 30, 44, 47, 63, 68, 195, 115, }, { 204, 73, 131, 217, 77, 191, 18, 12, 238, 240, 163, 187, 59, 101, 215, 30, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 82, 44, 11, 230, 203, 207, 136, 234, 244, 150, 63, 40, 248, 242, 158, 98, }, { 237, 117, 140, 147, 109, 4, 108, 40, 33, 101, 76, 28, 154, 157, 183, 68, }, { 228, 203, 66, 4, 60, 118, 192, 218, 202, 208, 246, 129, 20, 165, 68, 26, }, { 58, 61, 158, 48, 211, 45, 73, 241, 49, 137, 226, 195, 240, 176, 182, 184, }, { 115, 16, 4, 172, 235, 116, 246, 206, 59, 3, 208, 143, 89, 10, 254, 56, }, { 93, 108, 27, 19, 225, 220, 214, 84, 24, 154, 249, 81, 95, 218, 224, 130, }, { 110, 239, 75, 180, 99, 131, 51, 87, 194, 166, 161, 15, 33, 82, 165, 100, }, { 143, 165, 184, 227, 248, 69, 120, 231, 237, 114, 21, 24, 233, 239, 203, 159, }, { 191, 89, 135, 117, 166, 203, 228, 194, 213, 243, 115, 52, 98, 111, 41, 38, }, { 207, 54, 236, 232, 145, 110, 107, 42, 12, 77, 157, 201, 206, 109, 112, 65, }, { 184, 51, 124, 185, 40, 229, 128, 45, 140, 33, 164, 254, 24, 198, 120, 173, }, { 231, 180, 45, 53, 224, 167, 185, 252, 40, 109, 200, 243, 225, 173, 227, 69, }, { 249, 52, 13, 28, 180, 129, 5, 67, 51, 117, 135, 1, 108, 253, 31, 70, }, { 253, 33, 153, 225, 230, 126, 24, 138, 136, 26, 110, 185, 227, 92, 233, 146, }, { 181, 152, 38, 211, 43, 104, 49, 22, 220, 251, 247, 219, 25, 95, 125, 39, }, { 9, 190, 206, 151, 81, 114, 172, 242, 235, 181, 186, 157, 142, 56, 243, 94, }, { 71, 249, 175, 199, 231, 5, 119, 34, 184, 237, 95, 27, 93, 43, 234, 85, }, { 229, 95, 103, 170, 201, 57, 86, 121, 148, 187, 93, 175, 71, 28, 152, 47, }, { 49, 104, 26, 56, 171, 193, 10, 134, 102, 234, 205, 2, 216, 57, 62, 140, }, { 212, 55, 125, 146, 98, 248, 92, 255, 242, 81, 144, 173, 159, 37, 166, 163, }, { 232, 244, 61, 192, 202, 180, 231, 66, 196, 97, 14, 138, 70, 133, 157, 165, }, { 148, 164, 41, 153, 11, 211, 79, 50, 19, 110, 24, 124, 184, 167, 29, 125, }, { 28, 107, 106, 182, 125, 184, 83, 58, 167, 206, 218, 174, 43, 225, 135, 105, }, { 14, 212, 53, 91, 223, 92, 200, 29, 178, 103, 109, 87, 244, 145, 162, 213, }, { 203, 35, 120, 21, 195, 145, 118, 227, 183, 34, 116, 113, 65, 204, 134, 149, }, { 109, 144, 36, 133, 191, 82, 74, 113, 32, 27, 159, 125, 212, 90, 2, 59, }, { 54, 2, 225, 244, 37, 239, 110, 105, 63, 56, 26, 200, 162, 144, 111, 7, }, { 53, 125, 142, 197, 249, 62, 23, 79, 221, 133, 36, 186, 87, 152, 200, 88, }, { 116, 122, 255, 96, 101, 90, 146, 33, 98, 209, 7, 69, 35, 163, 175, 179, }, { 197, 247, 77, 78, 28, 205, 190, 254, 5, 69, 25, 38, 181, 93, 36, 64, }, { 117, 238, 218, 206, 144, 21, 4, 130, 60, 186, 172, 107, 112, 26, 115, 134, }, { 178, 242, 221, 31, 165, 70, 85, 249, 133, 41, 32, 17, 99, 246, 44, 172, }, { 210, 201, 163, 240, 25, 153, 174, 179, 245, 232, 236, 73, 182, 53, 43, 29, }, { 153, 15, 115, 243, 8, 94, 254, 9, 67, 180, 75, 89, 185, 62, 24, 247, }, { 35, 215, 69, 213, 9, 37, 145, 161, 115, 67, 122, 251, 7, 73, 27, 48, }, { 21, 213, 164, 33, 44, 202, 255, 200, 76, 123, 96, 51, 165, 217, 116, 55, }, { 8, 42, 235, 57, 164, 61, 58, 81, 181, 222, 17, 179, 221, 129, 47, 107, }, { 39, 194, 209, 40, 91, 218, 140, 104, 200, 44, 147, 67, 136, 232, 237, 228, }, { 25, 234, 219, 229, 218, 8, 216, 80, 66, 202, 152, 56, 247, 249, 173, 136, }, { 118, 145, 181, 255, 76, 196, 125, 164, 222, 7, 146, 25, 133, 18, 212, 217, }, { 57, 66, 241, 1, 15, 252, 48, 215, 211, 52, 220, 177, 5, 184, 17, 231, }, { 19, 43, 122, 67, 87, 171, 13, 132, 75, 194, 28, 215, 140, 201, 249, 137, }, { 5, 129, 177, 83, 167, 176, 139, 106, 229, 4, 66, 150, 220, 24, 42, 225, }, { 238, 10, 227, 162, 177, 213, 21, 14, 195, 216, 114, 110, 111, 149, 16, 27, }, { 87, 173, 186, 181, 108, 127, 3, 128, 17, 146, 125, 190, 36, 234, 180, 131, }, { 159, 241, 173, 145, 115, 63, 12, 69, 68, 13, 55, 189, 144, 46, 149, 73, }, { 189, 178, 205, 234, 143, 85, 11, 71, 105, 37, 230, 104, 196, 222, 82, 76, }, { 69, 18, 229, 88, 206, 155, 152, 167, 4, 59, 202, 71, 251, 154, 145, 63, }, { 255, 202, 211, 126, 207, 224, 247, 15, 52, 204, 251, 229, 69, 237, 146, 248, }, { 195, 9, 147, 44, 103, 172, 76, 178, 2, 252, 101, 194, 156, 77, 169, 254, }, { 59, 169, 187, 158, 38, 98, 223, 82, 111, 226, 73, 237, 163, 9, 106, 141, }, { 123, 58, 239, 149, 79, 73, 204, 159, 142, 221, 193, 60, 132, 139, 209, 83, }, { 142, 49, 157, 77, 13, 10, 238, 68, 179, 25, 190, 54, 186, 86, 23, 170, }, { 233, 96, 24, 110, 63, 251, 113, 225, 154, 10, 165, 164, 21, 60, 65, 144, }, { 200, 92, 23, 36, 31, 64, 15, 197, 85, 159, 74, 3, 180, 196, 33, 202, }, { 124, 80, 20, 89, 193, 103, 168, 112, 215, 15, 22, 246, 254, 34, 128, 216, }, { 107, 110, 250, 231, 196, 51, 184, 61, 39, 162, 227, 153, 253, 74, 143, 133, }, { 76, 172, 43, 207, 159, 233, 52, 85, 239, 142, 112, 218, 117, 162, 98, 97, }, { 131, 154, 199, 39, 14, 135, 95, 127, 227, 195, 237, 19, 187, 207, 18, 32, }, { 236, 225, 169, 61, 152, 75, 250, 139, 127, 14, 231, 50, 201, 36, 107, 113, }, { 112, 111, 107, 157, 55, 165, 143, 232, 217, 190, 238, 253, 172, 2, 89, 103, }, { 226, 53, 156, 102, 71, 23, 50, 150, 205, 105, 138, 101, 61, 181, 201, 164, }, { 241, 30, 230, 37, 16, 188, 63, 18, 134, 171, 150, 178, 177, 124, 48, 45, }, { 205, 221, 166, 119, 184, 240, 132, 175, 176, 155, 8, 149, 104, 220, 11, 43, }, { 90, 6, 224, 223, 111, 242, 178, 187, 65, 72, 46, 155, 37, 115, 177, 9, }, { 43, 253, 174, 236, 173, 24, 171, 240, 198, 157, 107, 72, 218, 200, 52, 91, }, { 194, 157, 182, 130, 146, 227, 218, 17, 92, 151, 206, 236, 207, 244, 117, 203, }, { 167, 39, 121, 62, 137, 140, 170, 49, 201, 82, 64, 34, 198, 47, 88, 155, }, { 161, 217, 167, 92, 242, 237, 88, 125, 206, 235, 60, 198, 239, 63, 213, 37, }, { 44, 151, 85, 32, 35, 54, 207, 31, 159, 79, 188, 130, 160, 97, 101, 208, }, { 6, 254, 222, 98, 123, 97, 242, 76, 7, 185, 124, 228, 41, 16, 141, 190, }, { 45, 3, 112, 142, 214, 121, 89, 188, 193, 36, 23, 172, 243, 216, 185, 229, }, { 62, 40, 10, 205, 129, 210, 84, 56, 138, 230, 11, 123, 127, 17, 64, 108, }, { 113, 251, 78, 51, 194, 234, 25, 75, 135, 213, 69, 211, 255, 187, 133, 82, }, { 63, 188, 47, 99, 116, 157, 194, 155, 212, 141, 160, 85, 44, 168, 156, 89, }, { 246, 116, 29, 233, 158, 146, 91, 253, 223, 121, 65, 120, 203, 213, 97, 166, }, { 206, 162, 201, 70, 100, 33, 253, 137, 82, 38, 54, 231, 157, 212, 172, 116, }, { 56, 214, 212, 175, 250, 179, 166, 116, 141, 95, 119, 159, 86, 1, 205, 210, }, { 51, 131, 80, 167, 130, 95, 229, 3, 218, 60, 88, 94, 126, 136, 69, 230, }, { 135, 143, 83, 218, 92, 120, 66, 182, 88, 172, 4, 171, 52, 110, 228, 244, }, { 66, 120, 30, 148, 64, 181, 252, 72, 93, 233, 29, 141, 129, 51, 192, 180, }, { 140, 218, 215, 210, 36, 148, 1, 193, 15, 207, 43, 106, 28, 231, 108, 192, }, { 38, 86, 244, 134, 174, 149, 26, 203, 150, 71, 56, 109, 219, 81, 49, 209, }, { 122, 174, 202, 59, 186, 6, 90, 60, 208, 182, 106, 18, 215, 50, 13, 102, }, { 172, 114, 253, 54, 241, 96, 233, 70, 158, 49, 111, 227, 238, 166, 208, 175, }, { 152, 155, 86, 93, 253, 17, 104, 170, 29, 223, 224, 119, 234, 135, 196, 194, }, { 121, 209, 165, 10, 102, 215, 35, 26, 50, 11, 84, 96, 34, 58, 170, 57, }, { 139, 176, 44, 30, 170, 186, 101, 46, 86, 29, 252, 160, 102, 78, 61, 75, }, { 88, 237, 170, 64, 70, 108, 93, 62, 253, 158, 187, 199, 131, 194, 202, 99, }, { 86, 57, 159, 27, 153, 48, 149, 35, 79, 249, 214, 144, 119, 83, 104, 182, }, }, { { 168, 44, 157, 30, 217, 126, 169, 179, 192, 1, 107, 61, 196, 163, 131, 180, }, { 180, 107, 164, 157, 108, 119, 20, 76, 23, 160, 128, 89, 210, 222, 57, 170, }, { 150, 149, 195, 214, 114, 143, 209, 216, 178, 71, 237, 40, 109, 34, 21, 206, }, { 30, 235, 156, 57, 10, 233, 67, 205, 99, 93, 154, 47, 212, 84, 165, 157, }, { 138, 210, 250, 85, 199, 134, 108, 39, 101, 230, 6, 76, 123, 95, 175, 208, }, { 245, 153, 80, 225, 83, 55, 29, 218, 111, 232, 97, 233, 73, 66, 177, 7, }, { 159, 54, 161, 38, 117, 249, 208, 9, 125, 79, 51, 3, 130, 115, 135, 39, }, { 165, 20, 118, 89, 99, 11, 151, 6, 164, 50, 87, 128, 108, 160, 47, 152, }, { 19, 211, 119, 126, 176, 156, 125, 120, 7, 110, 166, 146, 124, 87, 9, 177, }, { 57, 216, 193, 152, 23, 98, 198, 36, 55, 255, 204, 12, 77, 15, 89, 156, }, { 172, 183, 20, 169, 100, 125, 150, 215, 107, 58, 137, 171, 131, 241, 189, 113, }, { 45, 106, 41, 182, 27, 109, 5, 19, 117, 40, 32, 135, 213, 214, 159, 203, }, { 131, 113, 152, 165, 192, 240, 109, 246, 170, 238, 216, 103, 148, 14, 61, 57, }, { 134, 188, 162, 79, 195, 131, 45, 139, 91, 171, 227, 53, 178, 169, 237, 92, }, { 185, 83, 79, 218, 214, 2, 42, 249, 115, 147, 188, 228, 122, 221, 149, 134, }, { 118, 232, 200, 68, 147, 199, 112, 44, 197, 6, 185, 142, 221, 76, 140, 62, }, { 15, 148, 78, 253, 5, 149, 192, 135, 208, 207, 77, 246, 106, 42, 179, 175, }, { 90, 212, 82, 175, 54, 218, 10, 38, 234, 80, 64, 205, 105, 111, 253, 85, }, { 160, 217, 76, 179, 96, 120, 215, 123, 85, 119, 108, 210, 74, 7, 255, 253, }, { 146, 14, 74, 97, 207, 140, 238, 188, 25, 124, 15, 190, 42, 112, 43, 11, }, { 226, 209, 174, 40, 94, 168, 95, 198, 195, 189, 37, 237, 114, 71, 134, 115, }, { 52, 224, 42, 223, 173, 23, 248, 145, 83, 204, 240, 177, 229, 12, 245, 176, }, { 238, 191, 246, 50, 90, 173, 30, 106, 253, 240, 192, 148, 187, 177, 196, 255, }, { 109, 206, 110, 151, 154, 93, 115, 156, 87, 30, 24, 243, 47, 191, 249, 198, }, { 26, 112, 21, 142, 183, 234, 124, 169, 200, 102, 120, 185, 147, 6, 155, 88, }, { 36, 201, 75, 70, 28, 27, 4, 194, 186, 32, 254, 172, 58, 135, 13, 34, }, { 31, 189, 47, 100, 180, 153, 60, 212, 57, 35, 67, 235, 181, 161, 75, 61, }, { 210, 170, 13, 64, 78, 188, 152, 51, 59, 74, 55, 202, 208, 25, 77, 6, }, { 24, 220, 176, 52, 8, 10, 130, 155, 124, 154, 9, 242, 81, 47, 132, 219, }, { 55, 26, 60, 56, 172, 135, 121, 186, 189, 78, 88, 62, 70, 208, 4, 147, }, { 106, 175, 241, 199, 38, 206, 205, 211, 18, 167, 82, 234, 203, 49, 54, 32, }, { 63, 239, 237, 149, 21, 129, 7, 114, 40, 56, 95, 209, 200, 116, 120, 218, }, { 174, 27, 177, 19, 219, 157, 104, 229, 223, 198, 248, 224, 65, 216, 162, 242, }, { 16, 41, 97, 153, 177, 12, 252, 83, 233, 236, 14, 29, 223, 139, 248, 146, }, { 70, 147, 107, 44, 131, 211, 183, 217, 61, 241, 171, 169, 127, 18, 71, 75, }, { 108, 152, 221, 202, 36, 45, 12, 133, 13, 96, 193, 55, 78, 74, 23, 102, }, { 188, 158, 117, 48, 213, 113, 106, 132, 130, 214, 135, 182, 92, 122, 69, 227, }, { 104, 3, 84, 125, 153, 46, 51, 225, 166, 91, 35, 161, 9, 24, 41, 163, }, { 11, 15, 199, 74, 184, 150, 255, 227, 123, 244, 175, 96, 45, 120, 141, 106, }, { 62, 185, 94, 200, 171, 241, 120, 107, 114, 70, 134, 21, 169, 129, 150, 122, }, { 254, 150, 151, 171, 235, 161, 226, 57, 20, 28, 206, 137, 100, 58, 60, 109, }, { 169, 122, 46, 67, 103, 14, 214, 170, 154, 127, 178, 249, 165, 86, 109, 20, }, { 40, 167, 19, 92, 24, 30, 69, 110, 132, 109, 27, 213, 243, 113, 79, 174, }, { 124, 177, 188, 83, 149, 33, 240, 214, 228, 140, 207, 42, 145, 193, 239, 244, }, { 242, 248, 207, 177, 239, 164, 163, 149, 42, 81, 43, 240, 173, 204, 126, 225, }, { 191, 100, 99, 215, 212, 225, 235, 175, 108, 84, 47, 57, 255, 166, 180, 192, }, { 244, 207, 227, 188, 237, 71, 98, 195, 53, 150, 184, 45, 40, 183, 95, 167, }, { 203, 32, 14, 41, 248, 198, 101, 177, 29, 174, 231, 252, 224, 195, 39, 125, }, { 6, 55, 44, 13, 2, 227, 193, 86, 31, 199, 147, 221, 133, 123, 33, 70, }, { 248, 161, 187, 166, 233, 66, 35, 111, 11, 219, 93, 84, 225, 65, 29, 43, }, { 189, 200, 198, 109, 107, 1, 21, 157, 216, 168, 94, 114, 61, 143, 171, 67, }, { 117, 18, 222, 163, 146, 87, 241, 7, 43, 132, 17, 1, 126, 144, 125, 29, }, { 3, 250, 22, 231, 1, 144, 129, 43, 238, 130, 168, 143, 163, 220, 241, 35, }, { 76, 202, 31, 59, 133, 53, 55, 35, 28, 123, 221, 13, 51, 159, 36, 129, }, { 75, 171, 128, 107, 57, 166, 137, 108, 89, 194, 151, 20, 215, 17, 235, 103, }, { 192, 47, 201, 99, 64, 80, 154, 82, 102, 90, 72, 156, 205, 187, 170, 23, }, { 4, 155, 137, 183, 189, 3, 63, 100, 171, 59, 226, 150, 71, 82, 62, 197, }, { 179, 10, 59, 205, 208, 228, 170, 3, 82, 25, 202, 64, 54, 80, 246, 76, }, { 182, 199, 1, 39, 211, 151, 234, 126, 163, 92, 241, 18, 16, 247, 38, 41, }, { 81, 219, 149, 229, 142, 76, 245, 197, 145, 164, 239, 173, 68, 23, 112, 63, }, { 235, 114, 204, 216, 89, 222, 94, 23, 12, 181, 251, 198, 157, 22, 20, 154, }, { 152, 87, 62, 118, 201, 106, 110, 70, 56, 246, 121, 26, 102, 253, 72, 193, }, { 35, 168, 212, 22, 160, 136, 186, 141, 255, 153, 180, 181, 222, 9, 194, 196, }, { 171, 214, 139, 249, 216, 238, 40, 152, 46, 131, 195, 178, 103, 127, 114, 151, }, { 178, 92, 136, 144, 110, 148, 213, 26, 8, 103, 19, 132, 87, 165, 24, 236, }, { 153, 1, 141, 43, 119, 26, 17, 95, 98, 136, 160, 222, 7, 8, 166, 97, }, { 137, 40, 236, 178, 198, 22, 237, 12, 139, 100, 174, 195, 216, 131, 94, 243, }, { 223, 146, 230, 7, 244, 201, 166, 134, 95, 121, 11, 119, 120, 26, 225, 42, }, { 13, 56, 235, 71, 186, 117, 62, 181, 100, 51, 60, 189, 168, 3, 172, 44, }, { 49, 45, 16, 53, 174, 100, 184, 236, 162, 137, 203, 227, 195, 171, 37, 213, }, { 112, 223, 228, 73, 145, 36, 177, 122, 218, 193, 42, 83, 88, 55, 173, 120, }, { 115, 37, 242, 174, 144, 180, 48, 81, 52, 67, 130, 220, 251, 235, 92, 91, }, { 29, 17, 138, 222, 11, 121, 194, 230, 141, 223, 50, 160, 119, 136, 84, 190, }, { 141, 179, 101, 5, 123, 21, 210, 104, 32, 95, 76, 85, 159, 209, 96, 54, }, { 241, 2, 217, 86, 238, 52, 34, 190, 196, 211, 131, 127, 14, 16, 143, 194, }, { 125, 231, 15, 14, 43, 81, 143, 207, 190, 242, 22, 238, 240, 52, 1, 84, }, { 23, 72, 254, 201, 13, 159, 66, 28, 172, 85, 68, 4, 59, 5, 55, 116, }, { 44, 60, 154, 235, 165, 29, 122, 10, 47, 86, 249, 67, 180, 35, 113, 107, }, { 53, 182, 153, 130, 19, 103, 135, 136, 9, 178, 41, 117, 132, 249, 27, 16, }, { 136, 126, 95, 239, 120, 102, 146, 21, 209, 26, 119, 7, 185, 118, 176, 83, }, { 103, 151, 26, 128, 156, 187, 243, 102, 118, 148, 110, 87, 99, 50, 154, 12, }, { 225, 43, 184, 207, 95, 56, 222, 237, 45, 63, 141, 98, 209, 155, 119, 80, }, { 181, 61, 23, 192, 210, 7, 107, 85, 77, 222, 89, 157, 179, 43, 215, 10, }, { 100, 109, 12, 103, 157, 43, 114, 77, 152, 22, 198, 216, 192, 238, 107, 47, }, { 177, 166, 158, 119, 111, 4, 84, 49, 230, 229, 187, 11, 244, 121, 233, 207, }, { 8, 245, 209, 173, 185, 6, 126, 200, 149, 118, 7, 239, 142, 164, 124, 73, }, { 229, 176, 49, 120, 226, 59, 225, 137, 134, 4, 111, 244, 150, 201, 73, 149, }, { 28, 71, 57, 131, 181, 9, 189, 255, 215, 161, 235, 100, 22, 125, 186, 30, }, { 107, 249, 66, 154, 152, 190, 178, 202, 72, 217, 139, 46, 170, 196, 216, 128, }, { 92, 227, 126, 162, 52, 57, 203, 112, 245, 151, 211, 16, 236, 20, 220, 19, }, { 163, 35, 90, 84, 97, 232, 86, 80, 187, 245, 196, 93, 233, 219, 14, 222, }, { 122, 134, 144, 94, 151, 194, 49, 128, 251, 75, 92, 247, 20, 186, 206, 178, }, { 232, 136, 218, 63, 88, 78, 223, 60, 226, 55, 83, 73, 62, 202, 229, 185, }, { 218, 95, 220, 237, 247, 186, 230, 251, 174, 60, 48, 37, 94, 189, 49, 79, }, { 215, 103, 55, 170, 77, 207, 216, 78, 202, 15, 12, 152, 246, 190, 157, 99, }, { 250, 13, 30, 28, 86, 162, 221, 93, 191, 39, 44, 31, 35, 104, 2, 168, }, { 167, 184, 211, 227, 220, 235, 105, 52, 16, 206, 38, 203, 174, 137, 48, 27, }, { 127, 75, 170, 180, 148, 177, 113, 253, 10, 14, 103, 165, 50, 29, 30, 215, }, { 228, 230, 130, 37, 92, 75, 158, 144, 220, 122, 182, 48, 247, 60, 167, 53, }, { 143, 31, 192, 191, 196, 245, 44, 90, 148, 163, 61, 30, 93, 248, 127, 181, }, { 161, 143, 255, 238, 222, 8, 168, 98, 15, 9, 181, 22, 43, 242, 17, 93, }, { 82, 33, 131, 2, 143, 220, 116, 238, 127, 38, 71, 34, 231, 203, 129, 28, }, { 236, 19, 83, 136, 229, 77, 224, 88, 73, 12, 177, 223, 121, 152, 219, 124, }, { 59, 116, 100, 34, 168, 130, 56, 22, 131, 3, 189, 71, 143, 38, 70, 31, }, { 162, 117, 233, 9, 223, 152, 41, 73, 225, 139, 29, 153, 136, 46, 224, 126, }, { 95, 25, 104, 69, 53, 169, 74, 91, 27, 21, 123, 159, 79, 200, 45, 48, }, { 80, 141, 38, 184, 48, 60, 138, 220, 203, 218, 54, 105, 37, 226, 158, 159, }, { 74, 253, 51, 54, 135, 214, 246, 117, 3, 188, 78, 208, 182, 228, 5, 199, }, { 87, 236, 185, 232, 140, 175, 52, 147, 142, 99, 124, 112, 193, 108, 81, 121, }, { 85, 64, 28, 82, 51, 79, 202, 161, 58, 159, 13, 59, 3, 69, 78, 250, }, { 220, 104, 240, 224, 245, 89, 39, 173, 177, 251, 163, 248, 219, 198, 16, 9, }, { 222, 196, 85, 90, 74, 185, 217, 159, 5, 7, 210, 179, 25, 239, 15, 138, }, { 157, 154, 4, 156, 202, 25, 46, 59, 201, 179, 66, 72, 64, 90, 152, 164, }, { 231, 28, 148, 194, 93, 219, 31, 187, 50, 248, 30, 191, 84, 224, 86, 22, }, { 175, 77, 2, 78, 101, 237, 23, 252, 133, 184, 33, 36, 32, 45, 76, 82, }, { 151, 195, 112, 139, 204, 255, 174, 193, 232, 57, 52, 236, 12, 215, 251, 110, }, { 170, 128, 56, 164, 102, 158, 87, 129, 116, 253, 26, 118, 6, 138, 156, 55, }, { 38, 101, 238, 252, 163, 251, 250, 240, 14, 220, 143, 231, 248, 174, 18, 161, }, { 77, 156, 172, 102, 59, 69, 72, 58, 70, 5, 4, 201, 82, 106, 202, 33, }, { 84, 22, 175, 15, 141, 63, 181, 184, 96, 225, 212, 255, 98, 176, 160, 90, }, { 247, 53, 245, 91, 236, 215, 227, 232, 219, 20, 16, 162, 139, 107, 174, 132, }, { 217, 165, 202, 10, 246, 42, 103, 208, 64, 190, 152, 170, 253, 97, 192, 108, }, { 132, 16, 7, 245, 124, 99, 211, 185, 239, 87, 146, 126, 112, 128, 242, 223, }, { 65, 242, 244, 124, 63, 64, 9, 150, 120, 72, 225, 176, 155, 156, 136, 173, }, { 130, 39, 43, 248, 126, 128, 18, 239, 240, 144, 1, 163, 245, 251, 211, 153, }, { 214, 49, 132, 247, 243, 191, 167, 87, 144, 113, 213, 92, 151, 75, 115, 195, }, { 183, 145, 178, 122, 109, 231, 149, 103, 249, 34, 40, 214, 113, 2, 200, 137, }, { 219, 9, 111, 176, 73, 202, 153, 226, 244, 66, 233, 225, 63, 72, 223, 239, }, { 43, 93, 5, 187, 25, 142, 196, 69, 106, 239, 179, 90, 80, 173, 190, 141, }, { 166, 238, 96, 190, 98, 155, 22, 45, 74, 176, 255, 15, 207, 124, 222, 187, }, { 56, 142, 114, 197, 169, 18, 185, 61, 109, 129, 21, 200, 44, 250, 183, 60, }, { 206, 237, 52, 195, 251, 181, 37, 204, 236, 235, 220, 174, 198, 100, 247, 24, }, { 149, 111, 213, 49, 115, 31, 80, 243, 92, 197, 69, 167, 206, 254, 228, 237, }, { 113, 137, 87, 20, 47, 84, 206, 99, 128, 191, 243, 151, 57, 194, 67, 216, }, { 195, 213, 223, 132, 65, 192, 27, 121, 136, 216, 224, 19, 110, 103, 91, 52, }, { 142, 73, 115, 226, 122, 133, 83, 67, 206, 221, 228, 218, 60, 13, 145, 21, }, { 154, 251, 155, 204, 118, 138, 144, 116, 140, 10, 8, 81, 164, 212, 87, 66, }, { 239, 233, 69, 111, 228, 221, 97, 115, 167, 142, 25, 80, 218, 68, 42, 95, }, { 37, 159, 248, 27, 162, 107, 123, 219, 224, 94, 39, 104, 91, 114, 227, 130, }, { 164, 66, 197, 4, 221, 123, 232, 31, 254, 76, 142, 68, 13, 85, 193, 56, }, { 233, 222, 105, 98, 230, 62, 160, 37, 184, 73, 138, 141, 95, 63, 11, 25, }, { 60, 21, 251, 114, 20, 17, 134, 89, 198, 186, 247, 94, 107, 168, 137, 249, }, { 111, 98, 203, 45, 37, 189, 141, 174, 227, 226, 105, 184, 237, 150, 230, 69, }, { 2, 172, 165, 186, 191, 224, 254, 50, 180, 252, 113, 75, 194, 41, 31, 131, }, { 1, 86, 179, 93, 190, 112, 127, 25, 90, 126, 217, 196, 97, 245, 238, 160, }, { 10, 89, 116, 23, 6, 230, 128, 250, 33, 138, 118, 164, 76, 141, 99, 202, }, { 9, 163, 98, 240, 7, 118, 1, 209, 207, 8, 222, 43, 239, 81, 146, 233, }, { 148, 57, 102, 108, 205, 111, 47, 234, 6, 187, 156, 99, 175, 11, 10, 77, }, { 237, 69, 224, 213, 91, 61, 159, 65, 19, 114, 104, 27, 24, 109, 53, 220, }, { 89, 46, 68, 72, 55, 74, 139, 13, 4, 210, 232, 66, 202, 179, 12, 118, }, { 97, 160, 54, 141, 158, 88, 50, 48, 105, 83, 253, 138, 230, 73, 187, 74, }, { 105, 85, 231, 32, 39, 94, 76, 248, 252, 37, 250, 101, 104, 237, 199, 3, }, { 41, 241, 160, 1, 166, 110, 58, 119, 222, 19, 194, 17, 146, 132, 161, 14, }, { 176, 240, 45, 42, 209, 116, 43, 40, 188, 155, 98, 207, 149, 140, 7, 111, }, { 48, 123, 163, 104, 16, 20, 199, 245, 248, 247, 18, 39, 162, 94, 203, 117, }, { 96, 246, 133, 208, 32, 40, 77, 41, 51, 45, 36, 78, 135, 188, 85, 234, }, { 116, 68, 109, 254, 44, 39, 142, 30, 113, 250, 200, 197, 31, 101, 147, 189, }, { 34, 254, 103, 75, 30, 248, 197, 148, 165, 231, 109, 113, 191, 252, 44, 100, }, { 12, 110, 88, 26, 4, 5, 65, 172, 62, 77, 229, 121, 201, 246, 66, 140, }, { 205, 23, 34, 36, 250, 37, 164, 231, 2, 105, 116, 33, 101, 184, 6, 59, }, { 123, 208, 35, 3, 41, 178, 78, 153, 161, 53, 133, 51, 117, 79, 32, 18, }, { 91, 130, 225, 242, 136, 170, 117, 63, 176, 46, 153, 9, 8, 154, 19, 245, }, { 64, 164, 71, 33, 129, 48, 118, 143, 34, 54, 56, 116, 250, 105, 102, 13, }, { 227, 135, 29, 117, 224, 216, 32, 223, 153, 195, 252, 41, 19, 178, 104, 211, }, { 20, 178, 232, 46, 12, 15, 195, 55, 66, 215, 236, 139, 152, 217, 198, 87, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 253, 108, 129, 76, 234, 49, 99, 18, 250, 158, 102, 6, 199, 230, 205, 78, }, { 120, 42, 53, 228, 40, 34, 207, 178, 79, 183, 45, 188, 214, 147, 209, 49, }, { 173, 225, 167, 244, 218, 13, 233, 206, 49, 68, 80, 111, 226, 4, 83, 209, }, { 208, 6, 168, 250, 241, 92, 102, 1, 143, 182, 70, 129, 18, 48, 82, 133, }, { 145, 244, 92, 134, 206, 28, 111, 151, 247, 254, 167, 49, 137, 172, 218, 40, }, { 252, 58, 50, 17, 84, 65, 28, 11, 160, 224, 191, 194, 166, 19, 35, 238, }, { 249, 247, 8, 251, 87, 50, 92, 118, 81, 165, 132, 144, 128, 180, 243, 139, }, { 234, 36, 127, 133, 231, 174, 33, 14, 86, 203, 34, 2, 252, 227, 250, 58, }, { 133, 70, 180, 168, 194, 19, 172, 160, 181, 41, 75, 186, 17, 117, 28, 127, }, { 126, 29, 25, 233, 42, 193, 14, 228, 80, 112, 190, 97, 83, 232, 240, 119, }, { 119, 190, 123, 25, 45, 183, 15, 53, 159, 120, 96, 74, 188, 185, 98, 158, }, { 199, 78, 86, 51, 252, 195, 36, 29, 35, 227, 2, 133, 41, 53, 101, 241, }, { 197, 226, 243, 137, 67, 35, 218, 47, 151, 31, 115, 206, 235, 28, 122, 114, }, { 93, 181, 205, 255, 138, 73, 180, 105, 175, 233, 10, 212, 141, 225, 50, 179, }, { 58, 34, 215, 127, 22, 242, 71, 15, 217, 125, 100, 131, 238, 211, 168, 191, }, { 213, 203, 146, 16, 242, 47, 38, 124, 126, 243, 125, 211, 52, 151, 130, 224, }, { 102, 193, 169, 221, 34, 203, 140, 127, 44, 234, 183, 147, 2, 199, 116, 172, }, { 139, 132, 73, 8, 121, 246, 19, 62, 63, 152, 223, 136, 26, 170, 65, 112, }, { 73, 7, 37, 209, 134, 70, 119, 94, 237, 62, 230, 95, 21, 56, 244, 228, }, { 194, 131, 108, 217, 255, 176, 100, 96, 210, 166, 57, 215, 15, 146, 181, 148, }, { 198, 24, 229, 110, 66, 179, 91, 4, 121, 157, 219, 65, 72, 192, 139, 81, }, { 86, 186, 10, 181, 50, 223, 75, 138, 212, 29, 165, 180, 160, 153, 191, 217, }, { 78, 102, 186, 129, 58, 213, 201, 17, 168, 135, 172, 70, 241, 182, 59, 2, }, { 39, 51, 93, 161, 29, 139, 133, 233, 84, 162, 86, 35, 153, 91, 252, 1, }, { 230, 74, 39, 159, 227, 171, 96, 162, 104, 134, 199, 123, 53, 21, 184, 182, }, { 147, 88, 249, 60, 113, 252, 145, 165, 67, 2, 214, 122, 75, 133, 197, 171, }, { 187, 255, 234, 96, 105, 226, 212, 203, 199, 111, 205, 175, 184, 244, 138, 5, }, { 209, 80, 27, 167, 79, 44, 25, 24, 213, 200, 159, 69, 115, 197, 188, 37, }, { 99, 12, 147, 55, 33, 184, 204, 2, 221, 175, 140, 193, 36, 96, 164, 201, }, { 193, 121, 122, 62, 254, 32, 229, 75, 60, 36, 145, 88, 172, 78, 68, 183, }, { 69, 105, 125, 203, 130, 67, 54, 242, 211, 115, 3, 38, 220, 206, 182, 104, }, { 200, 218, 24, 206, 249, 86, 228, 154, 243, 44, 79, 115, 67, 31, 214, 94, }, { 22, 30, 77, 148, 179, 239, 61, 5, 246, 43, 157, 192, 90, 240, 217, 212, }, { 27, 38, 166, 211, 9, 154, 3, 176, 146, 24, 161, 125, 242, 243, 117, 248, }, { 32, 82, 194, 241, 161, 24, 59, 166, 17, 27, 28, 58, 125, 213, 51, 231, }, { 155, 173, 40, 145, 200, 250, 239, 109, 214, 116, 209, 149, 197, 33, 185, 226, }, { 243, 174, 124, 236, 81, 212, 220, 140, 112, 47, 242, 52, 204, 57, 144, 65, }, { 184, 5, 252, 135, 104, 114, 85, 224, 41, 237, 101, 32, 27, 40, 123, 38, }, { 240, 84, 106, 11, 80, 68, 93, 167, 158, 173, 90, 187, 111, 229, 97, 98, }, { 47, 198, 140, 12, 164, 141, 251, 33, 193, 212, 81, 204, 23, 255, 128, 72, }, { 186, 169, 89, 61, 215, 146, 171, 210, 157, 17, 20, 107, 217, 1, 100, 165, }, { 79, 48, 9, 220, 132, 165, 182, 8, 242, 249, 117, 130, 144, 67, 213, 162, }, { 190, 50, 208, 138, 106, 145, 148, 182, 54, 42, 246, 253, 158, 83, 90, 96, }, { 18, 133, 196, 35, 14, 236, 2, 97, 93, 16, 127, 86, 29, 162, 231, 17, }, { 67, 94, 81, 198, 128, 160, 247, 164, 204, 180, 144, 251, 89, 181, 151, 46, }, { 207, 187, 135, 158, 69, 197, 90, 213, 182, 149, 5, 106, 167, 145, 25, 184, }, { 201, 140, 171, 147, 71, 38, 155, 131, 169, 82, 150, 183, 34, 234, 56, 254, }, { 42, 11, 182, 230, 167, 254, 187, 92, 48, 145, 106, 158, 49, 88, 80, 45, }, { 17, 127, 210, 196, 15, 124, 131, 74, 179, 146, 215, 217, 190, 126, 22, 50, }, { 21, 228, 91, 115, 178, 127, 188, 46, 24, 169, 53, 79, 249, 44, 40, 247, }, { 246, 99, 70, 6, 82, 167, 156, 241, 129, 106, 201, 102, 234, 158, 64, 36, }, { 98, 90, 32, 106, 159, 200, 179, 27, 135, 209, 85, 5, 69, 149, 74, 105, }, { 204, 65, 145, 121, 68, 85, 219, 254, 88, 23, 173, 229, 4, 77, 232, 155, }, { 224, 125, 11, 146, 225, 72, 161, 244, 119, 65, 84, 166, 176, 110, 153, 240, }, { 140, 229, 214, 88, 197, 101, 173, 113, 122, 33, 149, 145, 254, 36, 142, 150, }, { 144, 162, 239, 219, 112, 108, 16, 142, 173, 128, 126, 245, 232, 89, 52, 136, }, { 71, 197, 216, 113, 61, 163, 200, 192, 103, 143, 114, 109, 30, 231, 169, 235, }, { 255, 192, 36, 246, 85, 209, 157, 32, 78, 98, 23, 77, 5, 207, 210, 205, }, { 129, 221, 61, 31, 127, 16, 147, 196, 30, 18, 169, 44, 86, 39, 34, 186, }, { 94, 79, 219, 24, 139, 217, 53, 66, 65, 107, 162, 91, 46, 61, 195, 144, }, { 251, 91, 173, 65, 232, 210, 162, 68, 229, 89, 245, 219, 66, 157, 236, 8, }, { 121, 124, 134, 185, 150, 82, 176, 171, 21, 201, 244, 120, 183, 102, 63, 145, }, { 54, 76, 143, 101, 18, 247, 6, 163, 231, 48, 129, 250, 39, 37, 234, 51, }, { 50, 215, 6, 210, 175, 244, 57, 199, 76, 11, 99, 108, 96, 119, 212, 246, }, { 14, 194, 253, 160, 187, 229, 191, 158, 138, 177, 148, 50, 11, 223, 93, 15, }, { 211, 252, 190, 29, 240, 204, 231, 42, 97, 52, 238, 14, 177, 236, 163, 166, }, { 51, 129, 181, 143, 17, 132, 70, 222, 22, 117, 186, 168, 1, 130, 58, 86, }, { 83, 119, 48, 95, 49, 172, 11, 247, 37, 88, 158, 230, 134, 62, 111, 188, }, { 135, 234, 17, 18, 125, 243, 82, 146, 1, 213, 58, 241, 211, 92, 3, 252, }, { 33, 4, 113, 172, 31, 104, 68, 191, 75, 101, 197, 254, 28, 32, 221, 71, }, { 212, 157, 33, 77, 76, 95, 89, 101, 36, 141, 164, 23, 85, 98, 108, 64, }, { 7, 97, 159, 80, 188, 147, 190, 79, 69, 185, 74, 25, 228, 142, 207, 230, }, { 72, 81, 150, 140, 56, 54, 8, 71, 183, 64, 63, 155, 116, 205, 26, 68, }, { 221, 62, 67, 189, 75, 41, 88, 180, 235, 133, 122, 60, 186, 51, 254, 169, }, { 110, 52, 120, 112, 155, 205, 242, 183, 185, 156, 176, 124, 140, 99, 8, 229, }, { 196, 180, 64, 212, 253, 83, 165, 54, 205, 97, 170, 10, 138, 233, 148, 210, }, { 88, 120, 247, 21, 137, 58, 244, 20, 94, 172, 49, 134, 171, 70, 226, 214, }, { 156, 204, 183, 193, 116, 105, 81, 34, 147, 205, 155, 140, 33, 175, 118, 4, }, { 5, 205, 58, 234, 3, 115, 64, 125, 241, 69, 59, 82, 38, 167, 208, 101, }, { 25, 138, 3, 105, 182, 122, 253, 130, 38, 228, 208, 54, 48, 218, 106, 123, }, { 216, 243, 121, 87, 72, 90, 24, 201, 26, 192, 65, 110, 156, 148, 46, 204, }, { 128, 139, 142, 66, 193, 96, 236, 221, 68, 108, 112, 232, 55, 210, 204, 26, }, { 158, 96, 18, 123, 203, 137, 175, 16, 39, 49, 234, 199, 227, 134, 105, 135, }, { 68, 63, 206, 150, 60, 51, 73, 235, 137, 13, 218, 226, 189, 59, 88, 200, }, { 202, 118, 189, 116, 70, 182, 26, 168, 71, 208, 62, 56, 129, 54, 201, 221, }, { 61, 67, 72, 47, 170, 97, 249, 64, 156, 196, 46, 154, 10, 93, 103, 89, }, { 46, 144, 63, 81, 26, 253, 132, 56, 155, 170, 136, 8, 118, 10, 110, 232, }, { 114, 115, 65, 243, 46, 196, 79, 72, 110, 61, 91, 24, 154, 30, 178, 251, }, { 66, 8, 226, 155, 62, 208, 136, 189, 150, 202, 73, 63, 56, 64, 121, 142, }, { 101, 59, 191, 58, 35, 91, 13, 84, 194, 104, 31, 28, 161, 27, 133, 143, }, }, { { 212, 25, 45, 212, 194, 195, 211, 156, 225, 93, 169, 24, 44, 209, 190, 143, }, { 64, 123, 203, 64, 148, 52, 166, 4, 80, 179, 20, 219, 107, 37, 96, 181, }, { 151, 192, 210, 151, 60, 123, 129, 132, 194, 113, 209, 135, 149, 15, 61, 183, }, { 77, 105, 182, 77, 217, 132, 29, 193, 207, 255, 67, 52, 235, 167, 138, 191, }, { 3, 162, 52, 3, 106, 140, 244, 28, 115, 159, 108, 68, 210, 251, 227, 141, }, { 209, 60, 113, 209, 124, 148, 12, 184, 116, 63, 29, 212, 153, 31, 88, 219, }, { 248, 8, 121, 248, 227, 172, 214, 238, 198, 220, 208, 71, 54, 72, 132, 69, }, { 202, 199, 38, 202, 192, 242, 84, 68, 25, 210, 151, 245, 20, 48, 175, 180, }, { 83, 183, 189, 83, 219, 181, 154, 25, 55, 112, 125, 217, 211, 70, 155, 132, }, { 102, 32, 39, 102, 10, 245, 222, 62, 158, 246, 198, 223, 216, 227, 85, 215, }, { 165, 15, 141, 165, 31, 37, 3, 46, 29, 127, 150, 53, 183, 119, 22, 70, }, { 16, 110, 66, 16, 37, 13, 200, 1, 20, 92, 5, 70, 106, 152, 24, 188, }, { 108, 106, 159, 108, 181, 91, 163, 118, 119, 50, 109, 132, 113, 188, 90, 127, }, { 144, 152, 23, 144, 206, 101, 71, 9, 180, 249, 45, 51, 188, 210, 216, 21, }, { 94, 165, 192, 94, 150, 5, 33, 220, 168, 60, 42, 54, 83, 196, 113, 142, }, { 189, 86, 238, 189, 201, 207, 175, 206, 3, 13, 112, 80, 232, 163, 2, 164, }, { 199, 213, 91, 199, 141, 66, 239, 129, 134, 158, 192, 26, 148, 178, 69, 190, }, { 32, 220, 132, 32, 74, 26, 83, 2, 40, 184, 10, 140, 212, 243, 48, 187, }, { 54, 53, 174, 54, 187, 204, 176, 59, 218, 25, 215, 66, 217, 94, 45, 222, }, { 230, 214, 114, 230, 225, 157, 81, 54, 62, 83, 238, 170, 14, 169, 149, 126, }, { 243, 157, 108, 243, 122, 199, 70, 19, 191, 109, 95, 32, 209, 255, 107, 150, }, { 120, 254, 44, 120, 8, 196, 89, 230, 102, 121, 248, 50, 224, 2, 68, 236, }, { 96, 167, 79, 96, 222, 46, 245, 6, 120, 11, 30, 87, 191, 214, 80, 14, }, { 12, 205, 208, 12, 107, 117, 86, 112, 15, 57, 115, 211, 206, 106, 10, 113, }, { 60, 127, 22, 60, 4, 98, 205, 115, 51, 221, 124, 25, 112, 1, 34, 118, }, { 127, 166, 233, 127, 250, 218, 159, 107, 16, 241, 4, 134, 201, 223, 161, 78, }, { 192, 141, 158, 192, 127, 92, 41, 12, 240, 22, 60, 174, 189, 111, 160, 28, }, { 250, 117, 224, 250, 175, 229, 207, 71, 37, 54, 152, 63, 170, 91, 135, 179, }, { 229, 116, 70, 229, 139, 17, 165, 42, 77, 204, 130, 238, 220, 82, 118, 243, }, { 44, 17, 84, 44, 33, 111, 5, 114, 39, 129, 121, 95, 26, 153, 58, 202, }, { 41, 52, 8, 41, 159, 56, 218, 86, 178, 227, 205, 147, 175, 87, 220, 158, }, { 206, 61, 215, 206, 88, 96, 102, 213, 28, 197, 7, 5, 239, 22, 169, 155, }, { 124, 4, 221, 124, 144, 86, 107, 119, 99, 110, 104, 194, 27, 36, 66, 195, }, { 7, 88, 197, 7, 242, 30, 198, 141, 118, 136, 252, 180, 41, 221, 229, 162, }, { 180, 190, 98, 180, 28, 237, 38, 154, 153, 86, 183, 79, 147, 7, 238, 129, }, { 129, 41, 248, 129, 205, 173, 98, 189, 48, 208, 12, 73, 152, 162, 32, 210, }, { 162, 87, 72, 162, 237, 59, 197, 163, 107, 247, 106, 129, 158, 170, 243, 228, }, { 240, 63, 88, 240, 16, 75, 178, 15, 204, 242, 51, 100, 3, 4, 136, 27, }, { 182, 195, 251, 182, 80, 164, 63, 51, 122, 188, 255, 55, 15, 20, 237, 119, }, { 67, 217, 255, 67, 254, 184, 82, 24, 35, 44, 120, 159, 185, 222, 131, 56, }, { 103, 255, 138, 103, 44, 48, 51, 139, 14, 131, 226, 227, 150, 11, 181, 172, }, { 89, 253, 5, 89, 100, 27, 231, 81, 222, 180, 214, 130, 122, 25, 148, 44, }, { 236, 156, 202, 236, 94, 51, 44, 126, 215, 151, 69, 241, 167, 246, 154, 214, }, { 134, 113, 61, 134, 63, 179, 164, 48, 70, 88, 240, 253, 177, 127, 197, 112, }, { 244, 197, 169, 244, 136, 217, 128, 158, 201, 229, 163, 148, 248, 34, 142, 52, }, { 246, 184, 48, 246, 196, 144, 153, 55, 42, 15, 235, 236, 100, 49, 141, 194, }, { 92, 216, 89, 92, 218, 76, 56, 117, 75, 214, 98, 78, 207, 215, 114, 120, }, { 146, 229, 142, 146, 130, 44, 94, 160, 87, 19, 101, 75, 32, 193, 219, 227, }, { 168, 29, 240, 168, 82, 149, 184, 235, 130, 51, 193, 218, 55, 245, 252, 76, }, { 207, 226, 122, 207, 126, 165, 139, 96, 140, 176, 35, 57, 161, 254, 73, 224, }, { 47, 179, 96, 47, 75, 227, 241, 110, 84, 30, 21, 27, 200, 98, 217, 71, }, { 233, 185, 150, 233, 224, 100, 243, 90, 66, 245, 241, 61, 18, 56, 124, 130, }, { 84, 239, 120, 84, 41, 171, 92, 148, 65, 248, 129, 109, 250, 155, 126, 38, }, { 143, 153, 177, 143, 234, 145, 45, 100, 220, 3, 55, 226, 202, 219, 41, 85, }, { 170, 96, 105, 170, 30, 220, 161, 66, 97, 217, 137, 162, 171, 230, 255, 186, }, { 36, 38, 117, 36, 210, 136, 97, 147, 45, 175, 154, 124, 47, 213, 54, 148, }, { 113, 22, 160, 113, 221, 230, 208, 178, 252, 34, 63, 45, 155, 166, 168, 201, }, { 101, 130, 19, 101, 96, 121, 42, 34, 237, 105, 170, 155, 10, 24, 182, 90, }, { 153, 112, 155, 153, 27, 71, 206, 93, 46, 162, 234, 44, 199, 118, 52, 48, }, { 150, 31, 127, 150, 26, 190, 108, 49, 82, 4, 245, 187, 219, 231, 221, 204, }, { 156, 85, 199, 156, 165, 16, 17, 121, 187, 192, 94, 224, 114, 184, 210, 100, }, { 221, 241, 161, 221, 23, 225, 90, 200, 123, 6, 110, 7, 87, 117, 82, 170, }, { 90, 95, 49, 90, 14, 151, 19, 77, 173, 43, 186, 198, 168, 226, 119, 161, }, { 128, 246, 85, 128, 235, 104, 143, 8, 160, 165, 40, 117, 214, 74, 192, 169, }, { 232, 102, 59, 232, 198, 161, 30, 239, 210, 128, 213, 1, 92, 208, 156, 249, }, { 80, 21, 137, 80, 177, 57, 110, 5, 68, 239, 17, 157, 1, 189, 120, 9, }, { 87, 77, 76, 87, 67, 39, 168, 136, 50, 103, 237, 41, 40, 96, 157, 171, }, { 228, 171, 235, 228, 173, 212, 72, 159, 221, 185, 166, 210, 146, 186, 150, 136, }, { 30, 222, 11, 30, 2, 49, 135, 216, 248, 143, 62, 237, 56, 225, 17, 59, }, { 132, 12, 164, 132, 115, 250, 189, 153, 165, 178, 184, 133, 45, 108, 198, 134, }, { 21, 75, 30, 21, 155, 90, 23, 37, 129, 62, 177, 138, 223, 86, 254, 232, }, { 65, 164, 102, 65, 178, 241, 75, 177, 192, 198, 48, 231, 37, 205, 128, 206, }, { 25, 134, 206, 25, 240, 47, 65, 85, 142, 7, 194, 89, 17, 60, 244, 153, }, { 38, 91, 236, 38, 158, 193, 120, 58, 206, 69, 210, 4, 179, 198, 53, 98, }, { 160, 42, 209, 160, 161, 114, 220, 10, 136, 29, 34, 249, 2, 185, 240, 18, }, { 11, 149, 21, 11, 153, 107, 144, 253, 121, 177, 143, 103, 231, 183, 239, 211, }, { 34, 161, 29, 34, 6, 83, 74, 171, 203, 82, 66, 244, 72, 224, 51, 77, }, { 157, 138, 106, 157, 131, 213, 252, 204, 43, 181, 122, 220, 60, 80, 50, 31, }, { 245, 26, 4, 245, 174, 28, 109, 43, 89, 144, 135, 168, 182, 202, 110, 79, }, { 218, 169, 100, 218, 229, 255, 156, 69, 13, 142, 146, 179, 126, 168, 183, 8, }, { 55, 234, 3, 55, 157, 9, 93, 142, 74, 108, 243, 126, 151, 182, 205, 165, }, { 167, 114, 20, 167, 83, 108, 26, 135, 254, 149, 222, 77, 43, 100, 21, 176, }, { 205, 159, 227, 205, 50, 236, 146, 201, 111, 90, 107, 65, 61, 237, 74, 22, }, { 99, 5, 123, 99, 180, 162, 1, 26, 11, 148, 114, 19, 109, 45, 179, 131, }, { 188, 137, 67, 188, 239, 10, 66, 123, 147, 120, 84, 108, 166, 75, 226, 223, }, { 226, 44, 131, 226, 121, 15, 99, 167, 59, 68, 126, 90, 245, 143, 147, 81, }, { 214, 100, 180, 214, 142, 138, 202, 53, 2, 183, 225, 96, 176, 194, 189, 121, }, { 148, 98, 230, 148, 86, 247, 117, 152, 177, 238, 189, 195, 71, 244, 222, 58, }, { 164, 208, 32, 164, 57, 224, 238, 155, 141, 10, 178, 9, 249, 159, 246, 61, }, { 136, 193, 116, 136, 24, 143, 235, 233, 170, 139, 203, 86, 227, 6, 204, 247, }, { 98, 218, 214, 98, 146, 103, 236, 175, 155, 225, 86, 47, 35, 197, 83, 248, }, { 46, 108, 205, 46, 109, 38, 28, 219, 196, 107, 49, 39, 134, 138, 57, 60, }, { 200, 186, 191, 200, 140, 187, 77, 237, 250, 56, 223, 141, 136, 35, 172, 66, }, { 24, 89, 99, 24, 214, 234, 172, 224, 30, 114, 230, 101, 95, 212, 20, 226, }, { 6, 135, 104, 6, 212, 219, 43, 56, 230, 253, 216, 136, 103, 53, 5, 217, }, { 22, 233, 42, 22, 241, 214, 227, 57, 242, 161, 221, 206, 13, 173, 29, 101, }, { 19, 204, 118, 19, 79, 129, 60, 29, 103, 195, 105, 2, 184, 99, 251, 49, }, { 210, 158, 69, 210, 22, 24, 248, 164, 7, 160, 113, 144, 75, 228, 187, 86, }, { 91, 128, 156, 91, 40, 82, 254, 248, 61, 94, 158, 250, 230, 10, 151, 218, }, { 255, 80, 188, 255, 17, 178, 16, 99, 176, 84, 44, 243, 31, 149, 97, 231, }, { 187, 209, 134, 187, 29, 20, 132, 246, 229, 240, 168, 216, 143, 150, 7, 125, }, { 194, 240, 7, 194, 51, 21, 48, 165, 19, 252, 116, 214, 33, 124, 163, 234, }, { 185, 172, 31, 185, 81, 93, 157, 95, 6, 26, 224, 160, 19, 133, 4, 139, }, { 191, 43, 119, 191, 133, 134, 182, 103, 224, 231, 56, 40, 116, 176, 1, 82, }, { 239, 62, 254, 239, 52, 191, 216, 98, 164, 8, 41, 181, 117, 13, 121, 91, }, { 220, 46, 12, 220, 49, 36, 183, 125, 235, 115, 74, 59, 25, 157, 178, 209, }, { 27, 251, 87, 27, 188, 102, 88, 252, 109, 237, 138, 33, 141, 47, 247, 111, }, { 39, 132, 65, 39, 184, 4, 149, 143, 94, 48, 246, 56, 253, 46, 213, 25, }, { 62, 2, 143, 62, 72, 43, 212, 218, 208, 55, 52, 97, 236, 18, 33, 128, }, { 231, 9, 223, 231, 199, 88, 188, 131, 174, 38, 202, 150, 64, 65, 117, 5, }, { 176, 68, 147, 176, 132, 127, 20, 11, 156, 65, 39, 191, 104, 33, 232, 174, }, { 105, 79, 195, 105, 11, 12, 124, 82, 226, 80, 217, 72, 196, 114, 188, 43, }, { 33, 3, 41, 33, 108, 223, 190, 183, 184, 205, 46, 176, 154, 27, 208, 192, }, { 15, 111, 228, 15, 1, 249, 162, 108, 124, 166, 31, 151, 28, 145, 233, 252, }, { 241, 224, 245, 241, 54, 142, 95, 186, 92, 135, 23, 88, 77, 236, 104, 96, }, { 26, 36, 250, 26, 154, 163, 181, 73, 253, 152, 174, 29, 195, 199, 23, 20, }, { 13, 18, 125, 13, 77, 176, 187, 197, 159, 76, 87, 239, 128, 130, 234, 10, }, { 166, 173, 185, 166, 117, 169, 247, 50, 110, 224, 250, 113, 101, 140, 245, 203, }, { 2, 125, 153, 2, 76, 73, 25, 169, 227, 234, 72, 120, 156, 19, 3, 246, }, { 106, 237, 247, 106, 97, 128, 136, 78, 145, 207, 181, 12, 22, 137, 95, 166, }, { 8, 55, 33, 8, 243, 231, 100, 225, 10, 46, 227, 35, 53, 76, 12, 94, }, { 76, 182, 27, 76, 255, 65, 240, 116, 95, 138, 103, 8, 165, 79, 106, 196, }, { 73, 147, 71, 73, 65, 22, 47, 80, 202, 232, 211, 196, 16, 129, 140, 144, }, { 145, 71, 186, 145, 232, 160, 170, 188, 36, 140, 9, 15, 242, 58, 56, 110, }, { 225, 142, 183, 225, 19, 131, 151, 187, 72, 219, 18, 30, 39, 116, 112, 220, }, { 139, 99, 64, 139, 114, 3, 31, 245, 217, 20, 167, 18, 49, 253, 47, 122, }, { 20, 148, 179, 20, 189, 159, 250, 144, 17, 75, 149, 182, 145, 190, 30, 147, }, { 149, 189, 75, 149, 112, 50, 152, 45, 33, 155, 153, 255, 9, 28, 62, 65, }, { 184, 115, 178, 184, 119, 152, 112, 234, 150, 111, 196, 156, 93, 109, 228, 240, }, { 158, 40, 94, 158, 233, 89, 8, 208, 88, 42, 22, 152, 238, 171, 209, 146, }, { 235, 196, 15, 235, 172, 45, 234, 243, 161, 31, 185, 69, 142, 43, 127, 116, }, { 110, 23, 6, 110, 249, 18, 186, 223, 148, 216, 37, 252, 237, 175, 89, 137, }, { 195, 47, 170, 195, 21, 208, 221, 16, 131, 137, 80, 234, 111, 148, 67, 145, }, { 152, 175, 54, 152, 61, 130, 35, 232, 190, 215, 206, 16, 137, 158, 212, 75, }, { 112, 201, 13, 112, 251, 35, 61, 7, 108, 87, 27, 17, 213, 78, 72, 178, }, { 114, 180, 148, 114, 183, 106, 36, 174, 143, 189, 83, 105, 73, 93, 75, 68, }, { 4, 250, 241, 4, 152, 146, 50, 145, 5, 23, 144, 240, 251, 38, 6, 47, }, { 237, 67, 103, 237, 120, 246, 193, 203, 71, 226, 97, 205, 233, 30, 122, 173, }, { 242, 66, 193, 242, 92, 2, 171, 166, 47, 24, 123, 28, 159, 23, 139, 237, }, { 71, 35, 14, 71, 102, 42, 96, 137, 38, 59, 232, 111, 66, 248, 133, 23, }, { 69, 94, 151, 69, 42, 99, 121, 32, 197, 209, 160, 23, 222, 235, 134, 225, }, { 154, 210, 175, 154, 113, 203, 58, 65, 93, 61, 134, 104, 21, 141, 215, 189, }, { 213, 198, 128, 213, 228, 6, 62, 41, 113, 40, 141, 36, 98, 57, 94, 244, }, { 217, 11, 80, 217, 143, 115, 104, 89, 126, 17, 254, 247, 172, 83, 84, 133, }, { 141, 228, 40, 141, 166, 216, 52, 205, 63, 233, 127, 154, 86, 200, 42, 163, }, { 59, 39, 211, 59, 246, 124, 11, 254, 69, 85, 128, 173, 89, 220, 199, 212, }, { 111, 200, 171, 111, 223, 215, 87, 106, 4, 173, 1, 192, 163, 71, 185, 242, }, { 78, 203, 130, 78, 179, 8, 233, 221, 188, 96, 47, 112, 57, 92, 105, 50, }, { 52, 72, 55, 52, 247, 133, 169, 146, 57, 243, 159, 58, 69, 77, 46, 40, }, { 116, 51, 252, 116, 99, 177, 15, 150, 105, 64, 139, 225, 46, 104, 78, 157, }, { 159, 247, 243, 159, 207, 156, 229, 101, 200, 95, 50, 164, 160, 67, 49, 233, }, { 125, 219, 112, 125, 182, 147, 134, 194, 243, 27, 76, 254, 85, 204, 162, 184, }, { 97, 120, 226, 97, 248, 235, 24, 179, 232, 126, 58, 107, 241, 62, 176, 117, }, { 49, 109, 107, 49, 73, 210, 118, 182, 172, 145, 43, 246, 240, 131, 200, 124, }, { 9, 232, 140, 9, 213, 34, 137, 84, 154, 91, 199, 31, 123, 164, 236, 37, }, { 18, 19, 219, 18, 105, 68, 209, 168, 247, 182, 77, 62, 246, 139, 27, 74, }, { 100, 93, 190, 100, 70, 188, 199, 151, 125, 28, 142, 167, 68, 240, 86, 33, }, { 215, 187, 25, 215, 168, 79, 39, 128, 146, 194, 197, 92, 254, 42, 93, 2, }, { 147, 58, 35, 147, 164, 233, 179, 21, 199, 102, 65, 119, 110, 41, 59, 152, }, { 58, 248, 126, 58, 208, 185, 230, 75, 213, 32, 164, 145, 23, 52, 39, 175, }, { 163, 136, 229, 163, 203, 254, 40, 22, 251, 130, 78, 189, 208, 66, 19, 159, }, { 173, 56, 172, 173, 236, 194, 103, 207, 23, 81, 117, 22, 130, 59, 26, 24, }, { 28, 163, 146, 28, 78, 120, 158, 113, 27, 101, 118, 149, 164, 242, 18, 205, }, { 126, 121, 68, 126, 220, 31, 114, 222, 128, 132, 32, 186, 135, 55, 65, 53, }, { 118, 78, 101, 118, 47, 248, 22, 63, 138, 170, 195, 153, 178, 123, 77, 107, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 51, 16, 242, 51, 5, 155, 111, 31, 79, 123, 99, 142, 108, 144, 203, 138, }, { 247, 103, 157, 247, 226, 85, 116, 130, 186, 122, 207, 208, 42, 217, 109, 185, }, { 40, 235, 165, 40, 185, 253, 55, 227, 34, 150, 233, 175, 225, 191, 60, 229, }, { 35, 126, 176, 35, 32, 150, 167, 30, 91, 39, 102, 200, 6, 8, 211, 54, }, { 178, 57, 10, 178, 200, 54, 13, 162, 127, 171, 111, 199, 244, 50, 235, 88, }, { 190, 244, 218, 190, 163, 67, 91, 210, 112, 146, 28, 20, 58, 88, 225, 41, }, { 66, 6, 82, 66, 216, 125, 191, 173, 179, 89, 92, 163, 247, 54, 99, 67, }, { 17, 177, 239, 17, 3, 200, 37, 180, 132, 41, 33, 122, 36, 112, 248, 199, }, { 196, 119, 111, 196, 231, 206, 27, 157, 245, 1, 172, 94, 70, 73, 166, 51, }, { 95, 122, 109, 95, 176, 192, 204, 105, 56, 73, 14, 10, 29, 44, 145, 245, }, { 48, 178, 198, 48, 111, 23, 155, 3, 60, 228, 15, 202, 190, 107, 40, 7, }, { 1, 223, 173, 1, 38, 197, 237, 181, 144, 117, 36, 60, 78, 232, 224, 123, }, { 216, 212, 253, 216, 169, 182, 133, 236, 238, 100, 218, 203, 226, 187, 180, 254, }, { 5, 37, 92, 5, 190, 87, 223, 36, 149, 98, 180, 204, 181, 206, 230, 84, }, { 50, 207, 95, 50, 35, 94, 130, 170, 223, 14, 71, 178, 34, 120, 43, 241, }, { 223, 140, 56, 223, 91, 168, 67, 97, 152, 236, 38, 127, 203, 102, 81, 92, }, { 186, 14, 43, 186, 59, 209, 105, 67, 117, 133, 140, 228, 193, 126, 231, 6, }, { 142, 70, 28, 142, 204, 84, 192, 209, 76, 118, 19, 222, 132, 51, 201, 46, }, { 115, 107, 57, 115, 145, 175, 201, 27, 31, 200, 119, 85, 7, 181, 171, 63, }, { 253, 45, 37, 253, 93, 251, 9, 202, 83, 190, 100, 139, 131, 134, 98, 17, }, { 140, 59, 133, 140, 128, 29, 217, 120, 175, 156, 91, 166, 24, 32, 202, 216, }, { 179, 230, 167, 179, 238, 243, 224, 23, 239, 222, 75, 251, 186, 218, 11, 35, }, { 86, 146, 225, 86, 101, 226, 69, 61, 162, 18, 201, 21, 102, 136, 125, 208, }, { 43, 73, 145, 43, 211, 113, 195, 255, 81, 9, 133, 235, 51, 68, 223, 104, }, { 130, 139, 204, 130, 167, 33, 150, 161, 67, 79, 96, 13, 74, 89, 195, 95, }, { 107, 50, 90, 107, 71, 69, 101, 251, 1, 186, 145, 48, 88, 97, 191, 221, }, { 135, 174, 144, 135, 25, 118, 73, 133, 214, 45, 212, 193, 255, 151, 37, 11, }, { 174, 154, 152, 174, 134, 78, 147, 211, 100, 206, 25, 82, 80, 192, 249, 149, }, { 70, 252, 163, 70, 64, 239, 141, 60, 182, 78, 204, 83, 12, 16, 101, 108, }, { 169, 194, 93, 169, 116, 80, 85, 94, 18, 70, 229, 230, 121, 29, 28, 55, }, { 224, 81, 26, 224, 53, 70, 122, 14, 216, 174, 54, 34, 105, 156, 144, 167, }, { 198, 10, 246, 198, 171, 135, 2, 52, 22, 235, 228, 38, 218, 90, 165, 197, }, { 175, 69, 53, 175, 160, 139, 126, 102, 244, 187, 61, 110, 30, 40, 25, 238, }, { 177, 155, 62, 177, 162, 186, 249, 190, 12, 52, 3, 131, 38, 201, 8, 213, }, { 14, 176, 73, 14, 39, 60, 79, 217, 236, 211, 59, 171, 82, 121, 9, 135, }, { 137, 30, 217, 137, 62, 74, 6, 92, 58, 254, 239, 106, 173, 238, 44, 140, }, { 121, 33, 129, 121, 46, 1, 180, 83, 246, 12, 220, 14, 174, 234, 164, 151, }, { 211, 65, 232, 211, 48, 221, 21, 17, 151, 213, 85, 172, 5, 12, 91, 45, }, { 45, 206, 249, 45, 7, 170, 232, 199, 183, 244, 93, 99, 84, 113, 218, 177, }, { 201, 101, 18, 201, 170, 126, 160, 88, 106, 77, 251, 177, 198, 203, 76, 57, }, { 10, 74, 184, 10, 191, 174, 125, 72, 233, 196, 171, 91, 169, 95, 15, 168, }, { 219, 118, 201, 219, 195, 58, 113, 240, 157, 251, 182, 143, 48, 64, 87, 115, }, { 123, 92, 24, 123, 98, 72, 173, 250, 21, 230, 148, 118, 50, 249, 167, 97, }, { 222, 83, 149, 222, 125, 109, 174, 212, 8, 153, 2, 67, 133, 142, 177, 39, }, { 72, 76, 234, 72, 103, 211, 194, 229, 90, 157, 247, 248, 94, 105, 108, 235, }, { 227, 243, 46, 227, 95, 202, 142, 18, 171, 49, 90, 102, 187, 103, 115, 42, }, { 75, 238, 222, 75, 13, 95, 54, 249, 41, 2, 155, 188, 140, 146, 143, 102, }, { 53, 151, 154, 53, 209, 64, 68, 39, 169, 134, 187, 6, 11, 165, 206, 83, }, { 138, 188, 237, 138, 84, 198, 242, 64, 73, 97, 131, 46, 127, 21, 207, 1, }, { 251, 170, 77, 251, 137, 32, 34, 242, 181, 67, 188, 3, 228, 179, 103, 200, }, { 133, 211, 9, 133, 85, 63, 80, 44, 53, 199, 156, 185, 99, 132, 38, 253, }, { 203, 24, 139, 203, 230, 55, 185, 241, 137, 167, 179, 201, 90, 216, 79, 207, }, { 183, 28, 86, 183, 118, 97, 210, 134, 234, 201, 219, 11, 65, 252, 13, 12, }, { 42, 150, 60, 42, 245, 180, 46, 74, 193, 124, 161, 215, 125, 172, 63, 19, }, { 171, 191, 196, 171, 56, 25, 76, 247, 241, 172, 173, 158, 229, 14, 31, 193, }, { 63, 221, 34, 63, 110, 238, 57, 111, 64, 66, 16, 93, 162, 250, 193, 251, }, { 57, 90, 74, 57, 186, 53, 18, 87, 166, 191, 200, 213, 197, 207, 196, 34, }, { 234, 27, 162, 234, 138, 232, 7, 70, 49, 106, 157, 121, 192, 195, 159, 15, }, { 181, 97, 207, 181, 58, 40, 203, 47, 9, 35, 147, 115, 221, 239, 14, 250, }, { 81, 202, 36, 81, 151, 252, 131, 176, 212, 154, 53, 161, 79, 85, 152, 114, }, { 155, 13, 2, 155, 87, 14, 215, 244, 205, 72, 162, 84, 91, 101, 55, 198, }, { 122, 131, 181, 122, 68, 141, 64, 79, 133, 147, 176, 74, 124, 17, 71, 26, }, { 161, 245, 124, 161, 135, 183, 49, 191, 24, 104, 6, 197, 76, 81, 16, 105, }, { 208, 227, 220, 208, 90, 81, 225, 13, 228, 74, 57, 232, 215, 247, 184, 160, }, { 74, 49, 115, 74, 43, 154, 219, 76, 185, 119, 191, 128, 194, 122, 111, 29, }, { 119, 145, 200, 119, 9, 61, 251, 138, 26, 223, 231, 165, 252, 147, 173, 16, }, { 93, 7, 244, 93, 252, 137, 213, 192, 219, 163, 70, 114, 129, 63, 146, 3, }, { 79, 20, 47, 79, 149, 205, 4, 104, 44, 21, 11, 76, 119, 180, 137, 73, }, { 29, 124, 63, 29, 104, 189, 115, 196, 139, 16, 82, 169, 234, 26, 242, 182, }, { 131, 84, 97, 131, 129, 228, 123, 20, 211, 58, 68, 49, 4, 177, 35, 36, }, { 82, 104, 16, 82, 253, 112, 119, 172, 167, 5, 89, 229, 157, 174, 123, 255, }, { 37, 249, 216, 37, 244, 77, 140, 38, 189, 218, 190, 64, 97, 61, 214, 239, }, { 254, 143, 17, 254, 55, 119, 253, 214, 32, 33, 8, 207, 81, 125, 129, 156, }, { 61, 160, 187, 61, 34, 167, 32, 198, 163, 168, 88, 37, 62, 233, 194, 13, }, { 88, 34, 168, 88, 66, 222, 10, 228, 78, 193, 242, 190, 52, 241, 116, 87, }, { 85, 48, 213, 85, 15, 110, 177, 33, 209, 141, 165, 81, 180, 115, 158, 93, }, { 249, 215, 212, 249, 197, 105, 59, 91, 86, 169, 244, 123, 120, 160, 100, 62, }, { 172, 231, 1, 172, 202, 7, 138, 122, 135, 36, 81, 42, 204, 211, 250, 99, }, { 252, 242, 136, 252, 123, 62, 228, 127, 195, 203, 64, 183, 205, 110, 130, 106, }, { 104, 144, 110, 104, 45, 201, 145, 231, 114, 37, 253, 116, 138, 154, 92, 80, }, { 193, 82, 51, 193, 89, 153, 196, 185, 96, 99, 24, 146, 243, 135, 64, 103, }, { 56, 133, 231, 56, 156, 240, 255, 226, 54, 202, 236, 233, 139, 39, 36, 89, }, { 117, 236, 81, 117, 69, 116, 226, 35, 249, 53, 175, 221, 96, 128, 174, 230, }, { 109, 181, 50, 109, 147, 158, 78, 195, 231, 71, 73, 184, 63, 84, 186, 4, }, { 31, 1, 166, 31, 36, 244, 106, 109, 104, 250, 26, 209, 118, 9, 241, 64, }, { 23, 54, 135, 23, 215, 19, 14, 140, 98, 212, 249, 242, 67, 69, 253, 30, }, { 68, 129, 58, 68, 12, 166, 148, 149, 85, 164, 132, 43, 144, 3, 102, 154, }, { 204, 64, 78, 204, 20, 41, 127, 124, 255, 47, 79, 125, 115, 5, 170, 109, }, { 197, 168, 194, 197, 193, 11, 246, 40, 101, 116, 136, 98, 8, 161, 70, 72, }, { 238, 225, 83, 238, 18, 122, 53, 215, 52, 125, 13, 137, 59, 229, 153, 32, }, }, { { 254, 80, 113, 124, 252, 155, 173, 9, 252, 94, 56, 63, 63, 104, 83, 27, }, { 109, 159, 216, 244, 238, 226, 209, 233, 238, 144, 60, 218, 218, 163, 188, 248, }, { 83, 148, 228, 1, 221, 146, 14, 58, 221, 184, 176, 166, 166, 36, 93, 78, }, { 171, 184, 20, 83, 17, 145, 244, 240, 17, 24, 197, 149, 149, 125, 95, 211, }, { 192, 91, 77, 137, 207, 235, 114, 218, 207, 118, 180, 67, 67, 239, 178, 173, }, { 125, 189, 166, 36, 110, 101, 59, 164, 110, 196, 39, 250, 250, 154, 70, 47, }, { 175, 81, 234, 103, 49, 192, 47, 114, 49, 13, 179, 157, 157, 226, 128, 150, }, { 114, 123, 198, 111, 22, 218, 95, 97, 22, 132, 122, 228, 228, 1, 45, 163, }, { 39, 147, 163, 64, 251, 208, 6, 152, 251, 194, 135, 78, 78, 20, 33, 107, }, { 249, 135, 46, 95, 196, 134, 188, 11, 196, 52, 137, 49, 49, 14, 69, 29, }, { 142, 190, 200, 9, 250, 136, 126, 41, 250, 49, 121, 223, 223, 199, 240, 123, }, { 138, 87, 54, 61, 218, 217, 165, 171, 218, 36, 15, 215, 215, 88, 47, 62, }, { 60, 158, 67, 239, 35, 185, 83, 146, 35, 195, 183, 120, 120, 41, 111, 117, }, { 80, 170, 69, 22, 197, 222, 196, 186, 197, 199, 119, 160, 160, 221, 148, 13, }, { 225, 180, 111, 231, 4, 163, 35, 129, 4, 74, 126, 1, 1, 202, 194, 64, }, { 65, 35, 229, 203, 77, 220, 104, 54, 77, 7, 144, 130, 130, 179, 41, 90, }, { 180, 92, 10, 200, 233, 169, 122, 120, 233, 12, 131, 171, 171, 223, 206, 136, }, { 215, 174, 108, 122, 119, 113, 137, 149, 119, 72, 30, 109, 109, 176, 94, 124, }, { 30, 79, 192, 150, 240, 189, 200, 73, 240, 128, 186, 60, 60, 245, 214, 219, }, { 35, 122, 93, 116, 219, 129, 221, 26, 219, 215, 241, 70, 70, 139, 254, 46, }, { 42, 192, 188, 17, 147, 166, 238, 28, 147, 105, 225, 84, 84, 33, 196, 36, }, { 117, 172, 153, 76, 46, 199, 78, 99, 46, 238, 203, 234, 234, 103, 59, 165, }, { 186, 49, 180, 142, 153, 147, 88, 124, 153, 216, 34, 183, 183, 19, 226, 132, }, { 134, 175, 247, 97, 186, 42, 11, 238, 186, 27, 149, 207, 207, 58, 141, 241, }, { 219, 86, 173, 38, 23, 130, 39, 208, 23, 119, 132, 117, 117, 210, 252, 179, }, { 118, 146, 56, 91, 54, 139, 132, 227, 54, 145, 12, 236, 236, 158, 242, 230, }, { 183, 98, 171, 223, 241, 229, 176, 248, 241, 115, 68, 173, 173, 38, 7, 203, }, { 47, 130, 156, 40, 187, 114, 115, 95, 187, 232, 107, 94, 94, 233, 92, 225, }, { 227, 33, 16, 253, 20, 106, 175, 192, 20, 161, 69, 5, 5, 100, 76, 131, }, { 81, 1, 155, 27, 205, 91, 130, 123, 205, 83, 139, 162, 162, 138, 211, 141, }, { 210, 236, 76, 67, 95, 165, 20, 214, 95, 201, 148, 103, 103, 120, 198, 185, }, { 177, 30, 42, 241, 193, 125, 231, 59, 193, 141, 9, 161, 161, 23, 86, 77, }, { 182, 201, 117, 210, 249, 96, 246, 57, 249, 231, 184, 175, 175, 113, 64, 75, }, { 3, 62, 161, 23, 24, 76, 202, 128, 24, 127, 199, 6, 6, 249, 201, 67, }, { 68, 97, 197, 242, 101, 8, 245, 117, 101, 134, 26, 136, 136, 123, 177, 159, }, { 154, 117, 72, 237, 90, 94, 79, 230, 90, 112, 20, 247, 247, 97, 213, 233, }, { 141, 128, 105, 30, 226, 196, 180, 169, 226, 78, 190, 217, 217, 62, 57, 56, }, { 234, 155, 241, 152, 92, 77, 156, 198, 92, 31, 85, 23, 23, 206, 118, 137, }, { 196, 178, 179, 189, 239, 186, 169, 88, 239, 99, 194, 75, 75, 112, 109, 232, }, { 173, 196, 149, 125, 33, 9, 163, 51, 33, 230, 136, 153, 153, 76, 14, 85, }, { 185, 15, 21, 153, 129, 223, 146, 252, 129, 167, 229, 177, 177, 234, 43, 199, }, { 226, 138, 206, 240, 28, 239, 233, 1, 28, 53, 185, 7, 7, 51, 11, 3, }, { 230, 99, 48, 196, 60, 190, 50, 131, 60, 32, 207, 15, 15, 172, 212, 70, }, { 153, 75, 233, 250, 66, 18, 133, 102, 66, 15, 211, 241, 241, 152, 28, 170, }, { 41, 254, 29, 6, 139, 234, 36, 156, 139, 22, 38, 82, 82, 216, 13, 103, }, { 169, 45, 107, 73, 1, 88, 120, 177, 1, 243, 254, 145, 145, 211, 209, 16, }, { 97, 103, 25, 168, 142, 17, 127, 172, 142, 175, 166, 194, 194, 193, 30, 55, }, { 208, 121, 51, 89, 79, 108, 152, 151, 79, 34, 175, 99, 99, 214, 72, 122, }, { 72, 153, 4, 174, 5, 251, 91, 48, 5, 185, 128, 144, 144, 25, 19, 80, }, { 241, 150, 17, 55, 132, 36, 201, 204, 132, 30, 101, 33, 33, 243, 56, 151, }, { 145, 90, 214, 146, 2, 176, 240, 161, 2, 37, 63, 225, 225, 101, 97, 32, }, { 101, 142, 231, 156, 174, 64, 164, 46, 174, 186, 208, 202, 202, 94, 193, 114, }, { 36, 173, 2, 87, 227, 156, 204, 24, 227, 189, 64, 72, 72, 237, 232, 40, }, { 156, 9, 201, 195, 106, 198, 24, 37, 106, 142, 89, 251, 251, 80, 132, 111, }, { 200, 74, 114, 225, 143, 73, 7, 29, 143, 92, 88, 83, 83, 18, 207, 39, }, { 20, 203, 128, 228, 160, 214, 49, 207, 160, 65, 109, 40, 40, 166, 37, 146, }, { 112, 238, 185, 117, 6, 19, 211, 32, 6, 111, 65, 224, 224, 175, 163, 96, }, { 57, 220, 99, 214, 11, 109, 206, 209, 11, 66, 61, 114, 114, 225, 247, 176, }, { 85, 232, 101, 47, 237, 10, 89, 249, 237, 70, 253, 170, 170, 21, 12, 200, }, { 19, 28, 223, 199, 152, 203, 32, 205, 152, 43, 220, 38, 38, 192, 51, 148, }, { 214, 5, 178, 119, 127, 244, 207, 84, 127, 220, 226, 111, 111, 231, 25, 252, }, { 251, 18, 81, 69, 212, 79, 48, 74, 212, 223, 178, 53, 53, 160, 203, 222, }, { 34, 209, 131, 121, 211, 4, 155, 219, 211, 67, 13, 68, 68, 220, 185, 174, }, { 218, 253, 115, 43, 31, 7, 97, 17, 31, 227, 120, 119, 119, 133, 187, 51, }, { 37, 6, 220, 90, 235, 25, 138, 217, 235, 41, 188, 74, 74, 186, 175, 168, }, { 231, 200, 238, 201, 52, 59, 116, 66, 52, 180, 51, 13, 13, 251, 147, 198, }, { 228, 246, 79, 222, 44, 119, 190, 194, 44, 203, 244, 11, 11, 2, 90, 133, }, { 163, 169, 43, 59, 81, 51, 129, 55, 81, 50, 41, 133, 133, 128, 34, 89, }, { 140, 43, 183, 19, 234, 65, 242, 104, 234, 218, 66, 219, 219, 105, 126, 184, }, { 25, 152, 159, 181, 200, 160, 217, 75, 200, 234, 11, 50, 50, 147, 192, 221, }, { 9, 186, 225, 101, 72, 39, 51, 6, 72, 190, 16, 18, 18, 170, 58, 10, }, { 45, 23, 227, 50, 171, 187, 255, 30, 171, 3, 80, 90, 90, 71, 210, 34, }, { 143, 21, 22, 4, 242, 13, 56, 232, 242, 165, 133, 221, 221, 144, 183, 251, }, { 148, 24, 246, 171, 42, 100, 109, 226, 42, 164, 181, 235, 235, 173, 249, 229, }, { 13, 83, 31, 81, 104, 118, 232, 132, 104, 171, 102, 26, 26, 53, 229, 79, }, { 133, 145, 86, 118, 162, 102, 193, 110, 162, 100, 82, 201, 201, 195, 68, 178, }, { 87, 125, 26, 53, 253, 195, 213, 184, 253, 173, 198, 174, 174, 187, 130, 11, }, { 150, 141, 137, 177, 58, 173, 225, 163, 58, 79, 142, 239, 239, 3, 119, 38, }, { 105, 118, 38, 192, 206, 179, 10, 107, 206, 133, 74, 210, 210, 60, 99, 189, }, { 248, 44, 240, 82, 204, 3, 250, 202, 204, 160, 117, 51, 51, 89, 2, 157, }, { 94, 199, 251, 80, 181, 228, 230, 190, 181, 19, 214, 188, 188, 17, 184, 1, }, { 14, 109, 190, 70, 112, 58, 34, 4, 112, 212, 161, 28, 28, 204, 44, 12, }, { 113, 69, 103, 120, 14, 150, 149, 225, 14, 251, 189, 226, 226, 248, 228, 224, }, { 122, 106, 249, 7, 86, 120, 42, 166, 86, 174, 150, 244, 244, 252, 80, 41, }, { 1, 171, 222, 13, 8, 133, 70, 193, 8, 148, 252, 2, 2, 87, 71, 128, }, { 224, 31, 177, 234, 12, 38, 101, 64, 12, 222, 130, 3, 3, 157, 133, 192, }, { 126, 131, 7, 51, 118, 41, 241, 36, 118, 187, 224, 252, 252, 99, 143, 108, }, { 147, 207, 169, 136, 18, 121, 124, 224, 18, 206, 4, 229, 229, 203, 239, 227, }, { 206, 54, 243, 207, 191, 209, 80, 222, 191, 162, 21, 95, 95, 35, 158, 161, }, { 159, 55, 104, 212, 114, 138, 210, 165, 114, 241, 158, 253, 253, 169, 77, 44, }, { 58, 226, 194, 193, 19, 33, 4, 81, 19, 61, 250, 116, 116, 24, 62, 243, }, { 209, 210, 237, 84, 71, 233, 222, 86, 71, 182, 83, 97, 97, 129, 15, 250, }, { 242, 168, 176, 32, 156, 104, 3, 76, 156, 97, 162, 39, 39, 10, 241, 212, }, { 207, 157, 45, 194, 183, 84, 22, 31, 183, 54, 233, 93, 93, 116, 217, 33, }, { 67, 182, 154, 209, 93, 21, 228, 119, 93, 236, 171, 134, 134, 29, 167, 153, }, { 201, 225, 172, 236, 135, 204, 65, 220, 135, 200, 164, 81, 81, 69, 136, 167, }, { 74, 12, 123, 180, 21, 50, 215, 113, 21, 82, 187, 148, 148, 183, 157, 147, }, { 189, 230, 235, 173, 161, 142, 73, 126, 161, 178, 147, 185, 185, 117, 244, 130, }, { 98, 89, 184, 191, 150, 93, 181, 44, 150, 208, 97, 196, 196, 56, 215, 116, }, { 172, 111, 75, 112, 41, 140, 229, 242, 41, 114, 116, 155, 155, 27, 73, 213, }, { 2, 149, 127, 26, 16, 201, 140, 65, 16, 235, 59, 4, 4, 174, 142, 195, }, { 55, 177, 221, 144, 123, 87, 236, 213, 123, 150, 156, 110, 110, 45, 219, 188, }, { 130, 70, 9, 85, 154, 123, 208, 108, 154, 14, 227, 199, 199, 165, 82, 180, }, { 193, 240, 147, 132, 199, 110, 52, 27, 199, 226, 72, 65, 65, 184, 245, 45, }, { 38, 56, 125, 77, 243, 85, 64, 89, 243, 86, 123, 76, 76, 67, 102, 235, }, { 187, 154, 106, 131, 145, 22, 30, 189, 145, 76, 222, 181, 181, 68, 165, 4, }, { 15, 198, 96, 75, 120, 191, 100, 197, 120, 64, 93, 30, 30, 155, 107, 140, }, { 212, 144, 205, 109, 111, 61, 67, 21, 111, 55, 217, 107, 107, 73, 151, 63, }, { 91, 133, 219, 105, 157, 48, 123, 253, 157, 146, 92, 182, 182, 217, 32, 196, }, { 99, 242, 102, 178, 158, 216, 243, 237, 158, 68, 157, 198, 198, 111, 144, 244, }, { 135, 4, 41, 108, 178, 175, 77, 47, 178, 143, 105, 205, 205, 109, 202, 113, }, { 191, 115, 148, 183, 177, 71, 197, 63, 177, 89, 168, 189, 189, 219, 122, 65, }, { 151, 38, 87, 188, 50, 40, 167, 98, 50, 219, 114, 237, 237, 84, 48, 166, }, { 70, 244, 186, 232, 117, 193, 121, 52, 117, 109, 33, 140, 140, 213, 63, 92, }, { 170, 19, 202, 94, 25, 20, 178, 49, 25, 140, 57, 151, 151, 42, 24, 83, }, { 79, 78, 91, 141, 61, 230, 74, 50, 61, 211, 49, 158, 158, 127, 5, 86, }, { 198, 39, 204, 167, 255, 115, 37, 25, 255, 136, 249, 79, 79, 222, 227, 43, }, { 78, 229, 133, 128, 53, 99, 12, 243, 53, 71, 205, 156, 156, 40, 66, 214, }, { 128, 211, 118, 79, 138, 178, 92, 45, 138, 229, 216, 195, 195, 11, 220, 119, }, { 127, 40, 217, 62, 126, 172, 183, 229, 126, 47, 28, 254, 254, 52, 200, 236, }, { 69, 202, 27, 255, 109, 141, 179, 180, 109, 18, 230, 138, 138, 44, 246, 31, }, { 235, 48, 47, 149, 84, 200, 218, 7, 84, 139, 169, 21, 21, 153, 49, 9, }, { 104, 221, 248, 205, 198, 54, 76, 170, 198, 17, 182, 208, 208, 107, 36, 61, }, { 16, 34, 126, 208, 128, 135, 234, 77, 128, 84, 27, 32, 32, 57, 250, 215, }, { 32, 68, 252, 99, 195, 205, 23, 154, 195, 168, 54, 64, 64, 114, 55, 109, }, { 95, 108, 37, 93, 189, 97, 160, 127, 189, 135, 42, 190, 190, 70, 255, 129, }, { 73, 50, 218, 163, 13, 126, 29, 241, 13, 45, 124, 146, 146, 78, 84, 208, }, { 211, 71, 146, 78, 87, 32, 82, 23, 87, 93, 104, 101, 101, 47, 129, 57, }, { 194, 206, 50, 147, 223, 34, 254, 155, 223, 157, 143, 71, 71, 65, 60, 110, }, { 86, 214, 196, 56, 245, 70, 147, 121, 245, 57, 58, 172, 172, 236, 197, 139, }, { 229, 93, 145, 211, 36, 242, 248, 3, 36, 95, 8, 9, 9, 85, 29, 5, }, { 188, 77, 53, 160, 169, 11, 15, 191, 169, 38, 111, 187, 187, 34, 179, 2, }, { 119, 57, 230, 86, 62, 14, 194, 34, 62, 5, 240, 238, 238, 201, 181, 102, }, { 21, 96, 94, 233, 168, 83, 119, 14, 168, 213, 145, 42, 42, 241, 98, 18, }, { 48, 102, 130, 179, 67, 74, 253, 215, 67, 252, 45, 96, 96, 75, 205, 186, }, { 176, 181, 244, 252, 201, 248, 161, 250, 201, 25, 245, 163, 163, 64, 17, 205, }, { 195, 101, 236, 158, 215, 167, 184, 90, 215, 9, 115, 69, 69, 22, 123, 238, }, { 166, 235, 11, 2, 121, 231, 28, 116, 121, 179, 163, 143, 143, 72, 186, 156, }, { 106, 72, 135, 215, 214, 255, 192, 235, 214, 250, 141, 212, 212, 197, 170, 254, }, { 110, 161, 121, 227, 246, 174, 27, 105, 246, 239, 251, 220, 220, 90, 117, 187, }, { 238, 114, 15, 172, 124, 28, 71, 68, 124, 10, 35, 31, 31, 81, 169, 204, }, { 149, 179, 40, 166, 34, 225, 43, 35, 34, 48, 73, 233, 233, 250, 190, 101, }, { 190, 216, 74, 186, 185, 194, 131, 254, 185, 205, 84, 191, 191, 140, 61, 193, }, { 56, 119, 189, 219, 3, 232, 136, 16, 3, 214, 193, 112, 112, 182, 176, 48, }, { 28, 218, 191, 140, 224, 116, 68, 8, 224, 107, 129, 56, 56, 91, 88, 24, }, { 216, 104, 12, 49, 15, 206, 237, 80, 15, 8, 67, 115, 115, 43, 53, 240, }, { 252, 197, 14, 102, 236, 82, 33, 72, 236, 181, 3, 59, 59, 198, 221, 216, }, { 107, 227, 89, 218, 222, 122, 134, 42, 222, 110, 113, 214, 214, 146, 237, 126, }, { 158, 156, 182, 217, 122, 15, 148, 100, 122, 101, 98, 255, 255, 254, 10, 172, }, { 243, 3, 110, 45, 148, 237, 69, 141, 148, 245, 94, 37, 37, 93, 182, 84, }, { 22, 94, 255, 254, 176, 31, 189, 142, 176, 170, 86, 44, 44, 8, 171, 81, }, { 246, 65, 78, 20, 188, 57, 216, 206, 188, 116, 212, 47, 47, 149, 46, 145, }, { 250, 185, 143, 72, 220, 202, 118, 139, 220, 75, 78, 55, 55, 247, 140, 94, }, { 29, 113, 97, 129, 232, 241, 2, 201, 232, 255, 125, 58, 58, 12, 31, 152, }, { 5, 66, 32, 57, 40, 212, 157, 67, 40, 129, 138, 10, 10, 200, 152, 197, }, { 10, 132, 64, 114, 80, 107, 249, 134, 80, 193, 215, 20, 20, 83, 243, 73, }, { 121, 84, 88, 16, 78, 52, 224, 38, 78, 209, 81, 242, 242, 5, 153, 106, }, { 62, 11, 60, 245, 51, 112, 223, 211, 51, 40, 140, 124, 124, 135, 225, 182, }, { 144, 241, 8, 159, 10, 53, 182, 96, 10, 177, 195, 227, 227, 50, 38, 160, }, { 152, 224, 55, 247, 74, 151, 195, 167, 74, 155, 47, 243, 243, 207, 91, 42, }, { 205, 8, 82, 216, 167, 157, 154, 94, 167, 221, 210, 89, 89, 218, 87, 226, }, { 203, 116, 211, 246, 151, 5, 205, 157, 151, 35, 159, 85, 85, 235, 6, 100, }, { 12, 248, 193, 92, 96, 243, 174, 69, 96, 63, 154, 24, 24, 98, 162, 207, }, { 54, 26, 3, 157, 115, 210, 170, 20, 115, 2, 96, 108, 108, 122, 156, 60, }, { 115, 208, 24, 98, 30, 95, 25, 160, 30, 16, 134, 230, 230, 86, 106, 35, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 157, 162, 23, 206, 98, 67, 94, 228, 98, 26, 165, 249, 249, 7, 195, 239, }, { 233, 165, 80, 143, 68, 1, 86, 70, 68, 96, 146, 17, 17, 55, 191, 202, }, { 146, 100, 119, 133, 26, 252, 58, 33, 26, 90, 248, 231, 231, 156, 168, 99, }, { 23, 245, 33, 243, 184, 154, 251, 79, 184, 62, 170, 46, 46, 95, 236, 209, }, { 7, 215, 95, 35, 56, 29, 17, 2, 56, 106, 177, 14, 14, 102, 22, 6, }, { 129, 120, 168, 66, 130, 55, 26, 236, 130, 113, 36, 193, 193, 92, 155, 247, }, { 237, 76, 174, 187, 100, 80, 141, 196, 100, 117, 228, 25, 25, 168, 96, 143, }, { 202, 223, 13, 251, 159, 128, 139, 92, 159, 183, 99, 87, 87, 188, 65, 228, }, { 116, 7, 71, 65, 38, 66, 8, 162, 38, 122, 55, 232, 232, 48, 124, 37, }, { 161, 60, 84, 33, 65, 250, 13, 118, 65, 217, 18, 129, 129, 46, 172, 154, }, { 93, 249, 90, 71, 173, 168, 44, 62, 173, 108, 17, 186, 186, 232, 113, 66, }, { 64, 136, 59, 198, 69, 89, 46, 247, 69, 147, 108, 128, 128, 228, 110, 218, }, { 120, 255, 134, 29, 70, 177, 166, 231, 70, 69, 173, 240, 240, 82, 222, 234, }, { 131, 237, 215, 88, 146, 254, 150, 173, 146, 154, 31, 197, 197, 242, 21, 52, }, { 221, 42, 44, 8, 39, 26, 112, 19, 39, 137, 201, 121, 121, 227, 173, 53, }, { 123, 193, 39, 10, 94, 253, 108, 103, 94, 58, 106, 246, 246, 171, 23, 169, }, { 66, 29, 68, 220, 85, 144, 162, 182, 85, 120, 87, 132, 132, 74, 224, 25, }, { 220, 129, 242, 5, 47, 159, 54, 210, 47, 29, 53, 123, 123, 180, 234, 181, }, { 240, 61, 207, 58, 140, 161, 143, 13, 140, 138, 153, 35, 35, 164, 127, 23, }, { 44, 188, 61, 63, 163, 62, 185, 223, 163, 151, 172, 88, 88, 16, 149, 162, }, { 92, 82, 132, 74, 165, 45, 106, 255, 165, 248, 237, 184, 184, 191, 54, 194, }, { 71, 95, 100, 229, 125, 68, 63, 245, 125, 249, 221, 142, 142, 130, 120, 220, }, { 164, 126, 116, 24, 105, 46, 144, 53, 105, 88, 152, 139, 139, 230, 52, 95, }, { 82, 63, 58, 12, 213, 23, 72, 251, 213, 44, 76, 164, 164, 115, 26, 206, }, { 90, 46, 5, 100, 149, 181, 61, 60, 149, 6, 160, 180, 180, 142, 103, 68, }, { 63, 160, 226, 248, 59, 245, 153, 18, 59, 188, 112, 126, 126, 208, 166, 54, }, { 217, 195, 210, 60, 7, 75, 171, 145, 7, 156, 191, 113, 113, 124, 114, 112, }, { 11, 47, 158, 127, 88, 238, 191, 71, 88, 85, 43, 22, 22, 4, 180, 201, }, { 46, 41, 66, 37, 179, 247, 53, 158, 179, 124, 151, 92, 92, 190, 27, 97, }, { 8, 17, 63, 104, 64, 162, 117, 199, 64, 42, 236, 16, 16, 253, 125, 138, }, { 96, 204, 199, 165, 134, 148, 57, 109, 134, 59, 90, 192, 192, 150, 89, 183, }, { 244, 212, 49, 14, 172, 240, 84, 143, 172, 159, 239, 43, 43, 59, 160, 82, }, { 75, 167, 165, 185, 29, 183, 145, 176, 29, 198, 71, 150, 150, 224, 218, 19, }, { 199, 140, 18, 170, 247, 246, 99, 216, 247, 28, 5, 77, 77, 137, 164, 171, }, { 6, 124, 129, 46, 48, 152, 87, 195, 48, 254, 77, 12, 12, 49, 81, 134, }, { 223, 191, 83, 18, 55, 211, 252, 82, 55, 98, 242, 125, 125, 77, 35, 246, }, { 53, 36, 162, 138, 107, 158, 96, 148, 107, 125, 167, 106, 106, 131, 85, 127, }, { 253, 110, 208, 107, 228, 215, 103, 137, 228, 33, 255, 57, 57, 145, 154, 88, }, { 17, 137, 160, 221, 136, 2, 172, 140, 136, 192, 231, 34, 34, 110, 189, 87, }, { 178, 32, 139, 230, 217, 49, 45, 187, 217, 242, 206, 167, 167, 238, 159, 14, }, { 197, 25, 109, 176, 231, 63, 239, 153, 231, 247, 62, 73, 73, 39, 42, 104, }, { 184, 164, 203, 148, 137, 90, 212, 61, 137, 51, 25, 179, 179, 189, 108, 71, }, { 181, 247, 212, 197, 225, 44, 60, 185, 225, 152, 127, 169, 169, 136, 137, 8, }, { 59, 73, 28, 204, 27, 164, 66, 144, 27, 169, 6, 118, 118, 79, 121, 115, }, { 40, 85, 195, 11, 131, 111, 98, 93, 131, 130, 218, 80, 80, 143, 74, 231, }, { 160, 151, 138, 44, 73, 127, 75, 183, 73, 77, 238, 131, 131, 121, 235, 26, }, { 232, 14, 142, 130, 76, 132, 16, 135, 76, 244, 110, 19, 19, 96, 248, 74, }, { 222, 20, 141, 31, 63, 86, 186, 147, 63, 246, 14, 127, 127, 26, 100, 118, }, { 31, 228, 30, 155, 248, 56, 142, 136, 248, 20, 70, 62, 62, 162, 145, 91, }, { 111, 10, 167, 238, 254, 43, 93, 168, 254, 123, 7, 222, 222, 13, 50, 59, }, { 89, 16, 164, 115, 141, 249, 247, 188, 141, 121, 103, 178, 178, 119, 174, 7, }, { 50, 243, 253, 169, 83, 131, 113, 150, 83, 23, 22, 100, 100, 229, 67, 121, }, { 132, 58, 136, 123, 170, 227, 135, 175, 170, 240, 174, 203, 203, 148, 3, 50, }, { 18, 183, 1, 202, 144, 78, 102, 12, 144, 191, 32, 36, 36, 151, 116, 20, }, { 136, 194, 73, 39, 202, 16, 41, 234, 202, 207, 52, 211, 211, 246, 161, 253, }, { 27, 13, 224, 175, 216, 105, 85, 10, 216, 1, 48, 54, 54, 61, 78, 30, }, { 88, 187, 122, 126, 133, 124, 177, 125, 133, 237, 155, 176, 176, 32, 233, 135, }, { 165, 213, 170, 21, 97, 171, 214, 244, 97, 204, 100, 137, 137, 177, 115, 223, }, { 4, 233, 254, 52, 32, 81, 219, 130, 32, 21, 118, 8, 8, 159, 223, 69, }, { 167, 64, 213, 15, 113, 98, 90, 181, 113, 39, 95, 141, 141, 31, 253, 28, }, { 213, 59, 19, 96, 103, 184, 5, 212, 103, 163, 37, 105, 105, 30, 208, 191, }, { 245, 127, 239, 3, 164, 117, 18, 78, 164, 11, 19, 41, 41, 108, 231, 210, }, { 77, 219, 36, 151, 45, 47, 198, 115, 45, 56, 10, 154, 154, 209, 139, 149, }, { 61, 53, 157, 226, 43, 60, 21, 83, 43, 87, 75, 122, 122, 126, 40, 245, }, { 168, 134, 181, 68, 9, 221, 62, 112, 9, 103, 2, 147, 147, 132, 150, 144, }, { 51, 88, 35, 164, 91, 6, 55, 87, 91, 131, 234, 102, 102, 178, 4, 249, }, { 33, 239, 34, 110, 203, 72, 81, 91, 203, 60, 202, 66, 66, 37, 112, 237, }, { 43, 107, 98, 28, 155, 35, 168, 221, 155, 253, 29, 86, 86, 118, 131, 164, }, { 76, 112, 250, 154, 37, 170, 128, 178, 37, 172, 246, 152, 152, 134, 204, 21, }, { 26, 166, 62, 162, 208, 236, 19, 203, 208, 149, 204, 52, 52, 106, 9, 158, }, { 103, 27, 152, 134, 190, 137, 40, 111, 190, 81, 235, 206, 206, 240, 79, 177, }, { 84, 67, 187, 34, 229, 143, 31, 56, 229, 210, 1, 168, 168, 66, 75, 72, }, { 236, 231, 112, 182, 108, 213, 203, 5, 108, 225, 24, 27, 27, 255, 39, 15, }, { 155, 222, 150, 224, 82, 219, 9, 39, 82, 228, 232, 245, 245, 54, 146, 105, }, { 162, 2, 245, 54, 89, 182, 199, 246, 89, 166, 213, 135, 135, 215, 101, 217, }, { 100, 37, 57, 145, 166, 197, 226, 239, 166, 46, 44, 200, 200, 9, 134, 242, }, { 239, 217, 209, 161, 116, 153, 1, 133, 116, 158, 223, 29, 29, 6, 238, 76, }, { 139, 252, 232, 48, 210, 92, 227, 106, 210, 176, 243, 213, 213, 15, 104, 190, }, { 108, 52, 6, 249, 230, 103, 151, 40, 230, 4, 192, 216, 216, 244, 251, 120, }, { 255, 251, 175, 113, 244, 30, 235, 200, 244, 202, 196, 61, 61, 63, 20, 155, }, { 247, 234, 144, 25, 180, 188, 158, 15, 180, 224, 40, 45, 45, 194, 105, 17, }, { 24, 51, 65, 184, 192, 37, 159, 138, 192, 126, 247, 48, 48, 196, 135, 93, }, { 179, 139, 85, 235, 209, 180, 107, 122, 209, 102, 50, 165, 165, 185, 216, 142, }, { 124, 22, 120, 41, 102, 224, 125, 101, 102, 80, 219, 248, 248, 205, 1, 175, }, { 204, 163, 140, 213, 175, 24, 220, 159, 175, 73, 46, 91, 91, 141, 16, 98, }, { 137, 105, 151, 42, 194, 149, 111, 43, 194, 91, 200, 209, 209, 161, 230, 125, }, { 174, 250, 52, 106, 57, 69, 105, 179, 57, 153, 79, 159, 159, 181, 199, 22, }, { 49, 205, 92, 190, 75, 207, 187, 22, 75, 104, 209, 98, 98, 28, 138, 58, }, { 52, 143, 124, 135, 99, 27, 38, 85, 99, 233, 91, 104, 104, 212, 18, 255, }, { 102, 176, 70, 139, 182, 12, 110, 174, 182, 197, 23, 204, 204, 167, 8, 49, }, }, { { 85, 149, 158, 177, 208, 161, 76, 217, 90, 47, 249, 28, 76, 242, 26, 82, }, { 250, 237, 135, 207, 133, 93, 129, 108, 85, 72, 139, 30, 129, 225, 88, 28, }, { 12, 190, 10, 86, 72, 172, 204, 114, 103, 92, 69, 88, 204, 241, 9, 26, }, { 82, 49, 123, 119, 250, 238, 59, 10, 175, 12, 251, 131, 59, 177, 142, 2, }, { 163, 198, 19, 40, 29, 80, 1, 199, 104, 59, 55, 90, 1, 226, 75, 84, }, { 115, 28, 171, 201, 247, 81, 79, 83, 226, 98, 160, 242, 79, 23, 199, 174, }, { 225, 156, 112, 151, 7, 237, 233, 117, 242, 231, 129, 184, 233, 109, 217, 207, }, { 129, 37, 32, 98, 2, 196, 70, 99, 76, 66, 236, 61, 70, 233, 145, 31, }, { 134, 129, 197, 164, 40, 139, 49, 176, 185, 97, 238, 162, 49, 170, 5, 79, }, { 2, 53, 3, 25, 28, 50, 34, 23, 78, 26, 65, 165, 34, 119, 226, 186, }, { 108, 7, 90, 163, 77, 133, 99, 100, 217, 249, 40, 221, 99, 117, 65, 202, }, { 223, 170, 81, 67, 176, 134, 177, 27, 132, 18, 82, 230, 177, 169, 22, 7, }, { 78, 228, 105, 233, 82, 17, 36, 192, 253, 128, 243, 186, 36, 126, 155, 129, }, { 232, 179, 156, 30, 121, 60, 112, 195, 46, 130, 135, 218, 112, 168, 166, 63, }, { 46, 93, 57, 28, 87, 56, 139, 214, 67, 37, 158, 63, 139, 250, 211, 81, }, { 61, 248, 194, 32, 165, 64, 107, 147, 31, 226, 83, 72, 107, 105, 92, 47, }, { 41, 249, 220, 218, 125, 119, 252, 5, 182, 6, 156, 160, 252, 185, 71, 1, }, { 125, 151, 162, 134, 163, 207, 161, 54, 203, 36, 164, 15, 161, 145, 44, 14, }, { 39, 114, 213, 149, 41, 233, 18, 96, 159, 64, 152, 93, 18, 63, 172, 161, }, { 53, 44, 206, 68, 213, 136, 227, 207, 228, 138, 148, 153, 227, 118, 82, 130, }, { 204, 15, 170, 127, 66, 254, 81, 94, 216, 213, 159, 145, 81, 58, 153, 121, }, { 214, 133, 189, 202, 206, 87, 40, 173, 88, 119, 84, 132, 40, 108, 105, 247, }, { 135, 122, 37, 73, 38, 146, 32, 90, 158, 108, 47, 17, 32, 112, 116, 18, }, { 201, 158, 76, 160, 116, 131, 4, 154, 99, 236, 220, 171, 4, 14, 239, 147, }, { 107, 163, 191, 101, 103, 202, 20, 183, 44, 218, 42, 66, 20, 54, 213, 154, }, { 50, 136, 43, 130, 255, 199, 148, 28, 17, 169, 150, 6, 148, 53, 198, 210, }, { 205, 244, 74, 146, 76, 231, 64, 180, 255, 216, 94, 34, 64, 224, 232, 36, }, { 35, 24, 211, 167, 17, 141, 86, 78, 3, 116, 26, 212, 86, 209, 171, 22, }, { 150, 234, 221, 108, 200, 216, 226, 8, 140, 177, 163, 195, 226, 148, 25, 214, }, { 180, 9, 238, 38, 215, 76, 165, 172, 168, 200, 120, 164, 165, 159, 195, 157, }, { 146, 128, 219, 94, 240, 188, 166, 38, 16, 133, 33, 74, 166, 122, 30, 97, }, { 198, 238, 165, 2, 46, 4, 251, 21, 109, 167, 25, 229, 251, 82, 117, 110, }, { 145, 78, 56, 170, 226, 151, 149, 219, 121, 146, 161, 92, 149, 215, 141, 134, }, { 228, 13, 150, 72, 49, 144, 188, 177, 73, 222, 194, 130, 188, 89, 175, 37, }, { 210, 239, 187, 248, 246, 51, 108, 131, 196, 67, 214, 13, 108, 130, 110, 64, }, { 86, 91, 125, 69, 194, 138, 127, 36, 51, 56, 121, 10, 127, 95, 137, 181, }, { 136, 10, 204, 235, 124, 21, 223, 213, 144, 39, 234, 95, 223, 44, 238, 239, }, { 111, 201, 185, 87, 95, 174, 80, 153, 176, 238, 168, 203, 80, 216, 210, 45, }, { 16, 107, 24, 200, 224, 83, 211, 184, 53, 208, 77, 97, 211, 62, 28, 153, }, { 89, 43, 148, 231, 152, 13, 128, 171, 61, 115, 188, 68, 128, 3, 19, 72, }, { 99, 119, 179, 1, 23, 2, 156, 235, 215, 178, 237, 147, 156, 41, 219, 55, }, { 202, 80, 175, 84, 102, 168, 55, 103, 10, 251, 92, 189, 55, 163, 124, 116, }, { 121, 253, 164, 180, 155, 171, 229, 24, 87, 16, 38, 134, 229, 127, 43, 185, }, { 178, 86, 235, 13, 243, 26, 195, 149, 122, 230, 187, 136, 195, 6, 38, 144, }, { 40, 2, 60, 55, 115, 110, 237, 239, 145, 11, 93, 19, 237, 99, 54, 92, }, { 234, 134, 159, 7, 101, 14, 82, 212, 96, 152, 198, 127, 82, 223, 68, 133, }, { 236, 217, 154, 44, 65, 88, 52, 237, 178, 182, 5, 83, 52, 70, 161, 136, }, { 42, 55, 63, 46, 111, 92, 207, 248, 223, 17, 28, 182, 207, 20, 212, 230, }, { 196, 219, 166, 27, 50, 54, 217, 2, 35, 189, 88, 64, 217, 37, 151, 212, }, { 167, 172, 21, 26, 37, 52, 69, 233, 244, 15, 181, 211, 69, 12, 76, 227, }, { 23, 207, 253, 14, 202, 28, 164, 107, 192, 243, 79, 254, 164, 125, 136, 201, }, { 95, 116, 145, 204, 188, 91, 230, 146, 239, 93, 127, 104, 230, 154, 246, 69, }, { 98, 140, 83, 236, 25, 27, 141, 1, 240, 191, 44, 32, 141, 243, 170, 106, }, { 93, 65, 146, 213, 160, 105, 196, 133, 161, 71, 62, 205, 196, 237, 20, 255, }, { 6, 95, 5, 43, 36, 86, 102, 57, 210, 46, 195, 44, 102, 153, 229, 13, }, { 58, 92, 39, 230, 143, 15, 28, 64, 234, 193, 81, 215, 28, 42, 200, 127, }, { 57, 146, 196, 18, 157, 36, 47, 189, 131, 214, 209, 193, 47, 135, 91, 152, }, { 161, 243, 16, 49, 1, 98, 35, 208, 38, 33, 118, 255, 35, 149, 169, 238, }, { 7, 164, 229, 198, 42, 79, 119, 211, 245, 35, 2, 159, 119, 67, 148, 80, }, { 109, 252, 186, 78, 67, 156, 114, 142, 254, 244, 233, 110, 114, 175, 48, 151, }, { 33, 45, 208, 190, 13, 191, 116, 89, 77, 110, 91, 113, 116, 166, 73, 172, }, { 186, 130, 231, 105, 131, 210, 75, 201, 129, 142, 124, 89, 75, 25, 40, 61, }, { 105, 150, 188, 124, 123, 248, 54, 160, 98, 192, 107, 231, 54, 65, 55, 32, }, { 55, 25, 205, 93, 201, 186, 193, 216, 170, 144, 213, 60, 193, 1, 176, 56, }, { 62, 54, 33, 212, 183, 107, 88, 110, 118, 245, 211, 94, 88, 196, 207, 200, }, { 37, 71, 214, 140, 53, 219, 48, 119, 209, 90, 217, 248, 48, 72, 78, 27, }, { 193, 74, 64, 196, 4, 75, 140, 198, 152, 132, 27, 122, 140, 17, 225, 62, }, { 247, 168, 109, 116, 195, 232, 92, 244, 21, 25, 15, 245, 92, 202, 32, 91, }, { 212, 176, 190, 211, 210, 101, 10, 186, 22, 109, 21, 33, 10, 27, 139, 77, }, { 112, 210, 72, 61, 229, 122, 124, 174, 139, 117, 32, 228, 124, 186, 84, 73, }, { 249, 35, 100, 59, 151, 118, 178, 145, 60, 95, 11, 8, 178, 76, 203, 251, }, { 155, 175, 55, 215, 142, 109, 63, 144, 204, 224, 39, 40, 63, 191, 97, 145, }, { 48, 189, 40, 155, 227, 245, 182, 11, 95, 179, 215, 163, 182, 66, 36, 104, }, { 248, 216, 132, 214, 153, 111, 163, 123, 27, 82, 202, 187, 163, 150, 186, 166, }, { 74, 142, 111, 219, 106, 117, 96, 238, 97, 180, 113, 51, 96, 144, 156, 54, }, { 45, 147, 218, 232, 69, 19, 184, 43, 42, 50, 30, 41, 184, 87, 64, 182, }, { 191, 19, 1, 182, 181, 175, 30, 13, 58, 183, 63, 99, 30, 45, 94, 215, }, { 64, 111, 96, 166, 6, 143, 202, 165, 212, 198, 247, 71, 202, 248, 112, 33, }, { 73, 64, 140, 47, 120, 94, 83, 19, 8, 163, 241, 37, 83, 61, 15, 209, }, { 94, 143, 113, 33, 178, 66, 247, 120, 200, 80, 190, 219, 247, 64, 135, 24, }, { 70, 48, 101, 141, 34, 217, 172, 156, 6, 232, 52, 107, 172, 97, 149, 44, }, { 174, 131, 249, 147, 91, 229, 220, 95, 40, 106, 179, 177, 220, 201, 51, 19, }, { 101, 40, 182, 42, 51, 84, 250, 210, 5, 156, 46, 191, 250, 176, 62, 58, }, { 36, 188, 54, 97, 59, 194, 33, 157, 246, 87, 24, 75, 33, 146, 63, 70, }, { 92, 186, 114, 56, 174, 112, 213, 111, 134, 74, 255, 126, 213, 55, 101, 162, }, { 114, 231, 75, 36, 249, 72, 94, 185, 197, 111, 97, 65, 94, 205, 182, 243, }, { 151, 17, 61, 129, 198, 193, 243, 226, 171, 188, 98, 112, 243, 78, 104, 139, }, { 175, 120, 25, 126, 85, 252, 205, 181, 15, 103, 114, 2, 205, 19, 66, 78, }, { 13, 69, 234, 187, 70, 181, 221, 152, 64, 81, 132, 235, 221, 43, 120, 71, }, { 185, 76, 4, 157, 145, 249, 120, 52, 232, 153, 252, 79, 120, 180, 187, 218, }, { 69, 254, 134, 121, 48, 242, 159, 97, 111, 255, 180, 125, 159, 204, 6, 203, }, { 118, 141, 77, 22, 193, 44, 26, 151, 89, 91, 227, 200, 26, 35, 177, 68, }, { 67, 161, 131, 82, 20, 164, 249, 88, 189, 209, 119, 81, 249, 85, 227, 198, }, { 81, 255, 152, 131, 232, 197, 8, 247, 198, 27, 123, 149, 8, 28, 29, 229, }, { 133, 79, 38, 80, 58, 160, 2, 77, 208, 118, 110, 180, 2, 7, 150, 168, }, { 90, 229, 119, 19, 138, 38, 179, 86, 84, 100, 60, 82, 179, 174, 128, 175, }, { 124, 108, 66, 107, 173, 214, 176, 220, 236, 41, 101, 188, 176, 75, 93, 83, }, { 208, 218, 184, 225, 234, 1, 78, 148, 138, 89, 151, 168, 78, 245, 140, 250, }, { 8, 212, 12, 100, 112, 200, 136, 92, 251, 104, 199, 209, 136, 31, 14, 173, }, { 5, 145, 230, 223, 54, 125, 85, 196, 187, 57, 67, 58, 85, 52, 118, 234, }, { 184, 183, 228, 112, 159, 224, 105, 222, 207, 148, 61, 252, 105, 110, 202, 135, }, { 15, 112, 233, 162, 90, 135, 255, 143, 14, 75, 197, 78, 255, 92, 154, 253, }, { 122, 51, 71, 64, 137, 128, 214, 229, 62, 7, 166, 144, 214, 210, 184, 94, }, { 255, 124, 97, 16, 179, 32, 212, 168, 238, 113, 200, 36, 212, 213, 46, 246, }, { 218, 59, 183, 156, 134, 251, 228, 223, 63, 43, 17, 220, 228, 157, 96, 237, }, { 219, 192, 87, 113, 136, 226, 245, 53, 24, 38, 208, 111, 245, 71, 17, 176, }, { 242, 57, 139, 171, 245, 149, 9, 48, 174, 32, 76, 207, 9, 254, 86, 177, }, { 153, 154, 52, 206, 146, 95, 29, 135, 130, 250, 102, 141, 29, 200, 131, 43, }, { 169, 39, 28, 85, 113, 170, 171, 140, 221, 73, 177, 46, 171, 138, 167, 67, }, { 84, 110, 126, 92, 222, 184, 93, 51, 125, 34, 56, 175, 93, 40, 107, 15, }, { 149, 36, 62, 152, 218, 243, 209, 245, 229, 166, 35, 213, 209, 57, 138, 49, }, { 104, 109, 92, 145, 117, 225, 39, 74, 69, 205, 170, 84, 39, 155, 70, 125, }, { 28, 213, 18, 158, 168, 255, 31, 202, 82, 140, 8, 57, 31, 207, 21, 131, }, { 106, 88, 95, 136, 105, 211, 5, 93, 11, 215, 235, 241, 5, 236, 164, 199, }, { 14, 139, 9, 79, 84, 158, 238, 101, 41, 70, 4, 253, 238, 134, 235, 160, }, { 147, 123, 59, 179, 254, 165, 183, 204, 55, 136, 224, 249, 183, 160, 111, 60, }, { 168, 220, 252, 184, 127, 179, 186, 102, 250, 68, 112, 157, 186, 80, 214, 30, }, { 207, 193, 73, 139, 80, 213, 98, 163, 177, 194, 31, 135, 98, 151, 10, 158, }, { 194, 132, 163, 48, 22, 96, 191, 59, 241, 147, 155, 108, 191, 188, 114, 217, }, { 203, 171, 79, 185, 104, 177, 38, 141, 45, 246, 157, 14, 38, 121, 13, 41, }, { 142, 85, 201, 192, 88, 67, 185, 236, 66, 9, 41, 115, 185, 181, 11, 226, }, { 51, 115, 203, 111, 241, 222, 133, 246, 54, 164, 87, 181, 133, 239, 183, 143, }, { 21, 250, 254, 23, 214, 46, 134, 124, 142, 233, 14, 91, 134, 10, 106, 115, }, { 137, 241, 44, 6, 114, 12, 206, 63, 183, 42, 43, 236, 206, 246, 159, 178, }, { 209, 33, 88, 12, 228, 24, 95, 126, 173, 84, 86, 27, 95, 47, 253, 167, }, { 26, 138, 23, 181, 140, 169, 121, 243, 128, 162, 203, 21, 121, 86, 240, 142, }, { 152, 97, 212, 35, 156, 70, 12, 109, 165, 247, 167, 62, 12, 18, 242, 118, }, { 206, 58, 169, 102, 94, 204, 115, 73, 150, 207, 222, 52, 115, 77, 123, 195, }, { 27, 113, 247, 88, 130, 176, 104, 25, 167, 175, 10, 166, 104, 140, 129, 211, }, { 227, 169, 115, 142, 27, 223, 203, 98, 188, 253, 192, 29, 203, 26, 59, 117, }, { 157, 240, 50, 252, 170, 59, 89, 169, 30, 206, 228, 4, 89, 38, 132, 156, }, { 140, 96, 202, 217, 68, 113, 155, 251, 12, 19, 104, 214, 155, 194, 233, 88, }, { 110, 50, 89, 186, 81, 183, 65, 115, 151, 227, 105, 120, 65, 2, 163, 112, }, { 102, 230, 85, 222, 33, 127, 201, 47, 108, 139, 174, 169, 201, 29, 173, 221, }, { 88, 208, 116, 10, 150, 20, 145, 65, 26, 126, 125, 247, 145, 217, 98, 21, }, { 154, 84, 215, 58, 128, 116, 46, 122, 235, 237, 230, 155, 46, 101, 16, 204, }, { 71, 203, 133, 96, 44, 192, 189, 118, 33, 229, 245, 216, 189, 187, 228, 113, }, { 24, 191, 20, 172, 144, 155, 91, 228, 206, 184, 138, 176, 91, 33, 18, 52, }, { 173, 77, 26, 103, 73, 206, 239, 162, 65, 125, 51, 167, 239, 100, 160, 244, }, { 30, 224, 17, 135, 180, 205, 61, 221, 28, 150, 73, 156, 61, 184, 247, 57, }, { 220, 100, 178, 183, 162, 173, 130, 230, 237, 5, 210, 240, 130, 4, 133, 224, }, { 164, 98, 246, 238, 55, 31, 118, 20, 157, 24, 53, 197, 118, 161, 223, 4, }, { 52, 215, 46, 169, 219, 145, 242, 37, 195, 135, 85, 42, 242, 172, 35, 223, }, { 253, 73, 98, 9, 175, 18, 246, 191, 160, 107, 137, 129, 246, 162, 204, 76, }, { 159, 197, 49, 229, 182, 9, 123, 190, 80, 212, 165, 161, 123, 81, 102, 38, }, { 143, 174, 41, 45, 86, 90, 168, 6, 101, 4, 232, 192, 168, 111, 122, 191, }, { 237, 34, 122, 193, 79, 65, 37, 7, 149, 187, 196, 224, 37, 156, 208, 213, }, { 241, 247, 104, 95, 231, 190, 58, 205, 199, 55, 204, 217, 58, 83, 197, 86, }, { 229, 246, 118, 165, 63, 137, 173, 91, 110, 211, 3, 49, 173, 131, 222, 120, }, { 31, 27, 241, 106, 186, 212, 44, 55, 59, 155, 136, 47, 44, 98, 134, 100, }, { 130, 235, 195, 150, 16, 239, 117, 158, 37, 85, 108, 43, 117, 68, 2, 248, }, { 240, 12, 136, 178, 233, 167, 43, 39, 224, 58, 13, 106, 43, 137, 180, 11, }, { 230, 56, 149, 81, 45, 162, 158, 166, 7, 196, 131, 39, 158, 46, 77, 159, }, { 195, 127, 67, 221, 24, 121, 174, 209, 214, 158, 90, 223, 174, 102, 3, 132, }, { 239, 23, 121, 216, 83, 115, 7, 16, 219, 161, 133, 69, 7, 235, 50, 111, }, { 29, 46, 242, 115, 166, 230, 14, 32, 117, 129, 201, 138, 14, 21, 100, 222, }, { 192, 177, 160, 41, 10, 82, 157, 44, 191, 137, 218, 201, 157, 203, 144, 99, }, { 246, 83, 141, 153, 205, 241, 77, 30, 50, 20, 206, 70, 77, 16, 81, 6, }, { 75, 117, 143, 54, 100, 108, 113, 4, 70, 185, 176, 128, 113, 74, 237, 107, }, { 238, 236, 153, 53, 93, 106, 22, 250, 252, 172, 68, 246, 22, 49, 67, 50, }, { 233, 72, 124, 243, 119, 37, 97, 41, 9, 143, 70, 105, 97, 114, 215, 98, }, { 226, 82, 147, 99, 21, 198, 218, 136, 155, 240, 1, 174, 218, 192, 74, 40, }, { 22, 52, 29, 227, 196, 5, 181, 129, 231, 254, 142, 77, 181, 167, 249, 148, }, { 83, 202, 155, 154, 244, 247, 42, 224, 136, 1, 58, 48, 42, 107, 255, 95, }, { 221, 159, 82, 90, 172, 180, 147, 12, 202, 8, 19, 67, 147, 222, 244, 189, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 1, 251, 224, 237, 14, 25, 17, 234, 39, 13, 193, 179, 17, 218, 113, 93, }, { 139, 196, 47, 31, 110, 62, 236, 40, 249, 48, 106, 73, 236, 129, 125, 8, }, { 243, 194, 107, 70, 251, 140, 24, 218, 137, 45, 141, 124, 24, 36, 39, 236, }, { 222, 81, 177, 174, 190, 159, 160, 241, 163, 31, 147, 85, 160, 115, 103, 90, }, { 87, 160, 157, 168, 204, 147, 110, 206, 20, 53, 184, 185, 110, 133, 248, 232, }, { 158, 62, 209, 8, 184, 16, 106, 84, 119, 217, 100, 18, 106, 139, 23, 123, }, { 56, 105, 36, 255, 147, 61, 62, 87, 164, 219, 16, 114, 62, 93, 42, 197, }, { 190, 232, 225, 91, 187, 182, 15, 231, 29, 186, 254, 208, 15, 247, 47, 138, }, { 138, 63, 207, 242, 96, 39, 253, 194, 222, 61, 171, 250, 253, 91, 12, 85, }, { 79, 31, 137, 4, 92, 8, 53, 42, 218, 141, 50, 9, 53, 164, 234, 220, }, { 162, 61, 243, 197, 19, 73, 16, 45, 79, 54, 246, 233, 16, 56, 58, 9, }, { 97, 66, 176, 24, 11, 48, 190, 252, 153, 168, 172, 54, 190, 94, 57, 141, }, { 156, 11, 210, 17, 164, 34, 72, 67, 57, 195, 37, 183, 72, 252, 245, 193, }, { 38, 137, 53, 120, 39, 240, 3, 138, 184, 77, 89, 238, 3, 229, 221, 252, }, { 96, 185, 80, 245, 5, 41, 175, 22, 190, 165, 109, 133, 175, 132, 72, 208, }, { 120, 6, 68, 89, 149, 178, 244, 242, 112, 29, 231, 53, 244, 165, 90, 228, }, { 217, 245, 84, 104, 148, 208, 215, 34, 86, 60, 145, 202, 215, 48, 243, 10, }, { 60, 3, 34, 205, 171, 89, 122, 121, 56, 239, 146, 251, 122, 179, 45, 114, }, { 251, 22, 103, 34, 139, 68, 144, 134, 114, 69, 74, 173, 144, 59, 41, 65, }, { 199, 21, 69, 239, 32, 29, 234, 255, 74, 170, 216, 86, 234, 136, 4, 51, }, { 254, 135, 129, 253, 189, 57, 197, 66, 201, 124, 9, 151, 197, 15, 95, 171, }, { 54, 226, 45, 176, 199, 163, 208, 50, 141, 157, 20, 143, 208, 219, 193, 101, }, { 160, 8, 240, 220, 15, 123, 50, 58, 1, 44, 183, 76, 50, 79, 216, 179, }, { 80, 4, 120, 110, 230, 220, 25, 29, 225, 22, 186, 38, 25, 198, 108, 184, }, { 245, 157, 110, 109, 223, 218, 126, 227, 91, 3, 78, 80, 126, 189, 194, 225, }, { 170, 233, 255, 161, 99, 129, 152, 113, 180, 94, 49, 56, 152, 39, 52, 164, }, { 211, 20, 91, 21, 248, 42, 125, 105, 227, 78, 23, 190, 125, 88, 31, 29, }, { 65, 148, 128, 75, 8, 150, 219, 79, 243, 203, 54, 244, 219, 34, 1, 124, }, { 127, 162, 161, 159, 191, 253, 131, 33, 133, 62, 229, 170, 131, 230, 206, 180, }, { 165, 153, 22, 3, 57, 6, 103, 254, 186, 21, 244, 118, 103, 123, 174, 89, }, { 176, 99, 232, 20, 239, 40, 225, 130, 52, 252, 250, 45, 225, 113, 196, 42, }, { 72, 187, 108, 194, 118, 71, 66, 249, 47, 174, 48, 150, 66, 231, 126, 140, }, { 32, 214, 48, 83, 3, 166, 101, 179, 106, 99, 154, 194, 101, 124, 56, 241, }, { 244, 102, 142, 128, 209, 195, 111, 9, 124, 14, 143, 227, 111, 103, 179, 188, }, { 11, 26, 239, 144, 98, 227, 187, 161, 146, 127, 71, 199, 187, 178, 157, 74, }, { 216, 14, 180, 133, 154, 201, 198, 200, 113, 49, 80, 121, 198, 234, 130, 87, }, { 183, 199, 13, 210, 197, 103, 150, 81, 193, 223, 248, 178, 150, 50, 80, 122, }, { 177, 152, 8, 249, 225, 49, 240, 104, 19, 241, 59, 158, 240, 171, 181, 119, }, { 213, 75, 94, 62, 220, 124, 27, 80, 49, 96, 212, 146, 27, 193, 250, 16, }, { 34, 227, 51, 74, 31, 148, 71, 164, 36, 121, 219, 103, 71, 11, 218, 75, }, { 76, 209, 106, 240, 78, 35, 6, 215, 179, 154, 178, 31, 6, 9, 121, 59, }, { 63, 205, 193, 57, 185, 114, 73, 132, 81, 248, 18, 237, 73, 30, 190, 149, }, { 117, 67, 174, 226, 211, 7, 41, 106, 48, 76, 99, 222, 41, 142, 34, 163, }, { 25, 68, 244, 65, 158, 130, 74, 14, 233, 181, 75, 3, 74, 251, 99, 105, }, { 116, 184, 78, 15, 221, 30, 56, 128, 23, 65, 162, 109, 56, 84, 83, 254, }, { 19, 165, 251, 60, 242, 120, 224, 69, 92, 199, 205, 119, 224, 147, 143, 126, }, { 215, 126, 93, 39, 192, 78, 57, 71, 127, 122, 149, 55, 57, 182, 24, 170, }, { 132, 180, 198, 189, 52, 185, 19, 167, 247, 123, 175, 7, 19, 221, 231, 245, }, { 123, 200, 167, 173, 135, 153, 199, 15, 25, 10, 103, 35, 199, 8, 201, 3, }, { 66, 90, 99, 191, 26, 189, 232, 178, 154, 220, 182, 226, 232, 143, 146, 155, }, { 17, 144, 248, 37, 238, 74, 194, 82, 18, 221, 140, 210, 194, 228, 109, 196, }, { 224, 103, 144, 122, 9, 244, 248, 159, 213, 234, 64, 11, 248, 183, 168, 146, }, { 113, 41, 168, 208, 235, 99, 109, 68, 172, 120, 225, 87, 109, 96, 37, 20, }, { 49, 70, 200, 118, 237, 236, 167, 225, 120, 190, 22, 16, 167, 152, 85, 53, }, { 103, 29, 181, 51, 47, 102, 216, 197, 75, 134, 111, 26, 216, 199, 220, 128, }, { 200, 101, 172, 77, 122, 154, 21, 112, 68, 225, 29, 24, 21, 212, 158, 206, }, { 77, 42, 138, 29, 64, 58, 23, 61, 148, 151, 115, 172, 23, 211, 8, 102, }, { 252, 178, 130, 228, 161, 11, 231, 85, 135, 102, 72, 50, 231, 120, 189, 17, }, { 179, 173, 11, 224, 253, 3, 210, 127, 93, 235, 122, 59, 210, 220, 87, 205, }, { 68, 5, 102, 148, 62, 235, 142, 139, 72, 242, 117, 206, 142, 22, 119, 150, }, { 197, 32, 70, 246, 60, 47, 200, 232, 4, 176, 153, 243, 200, 255, 230, 137, }, { 20, 1, 30, 250, 216, 55, 151, 150, 169, 228, 207, 232, 151, 208, 27, 46, }, { 43, 204, 223, 195, 97, 69, 222, 18, 248, 28, 221, 5, 222, 206, 165, 187, }, { 18, 94, 27, 209, 252, 97, 241, 175, 123, 202, 12, 196, 241, 73, 254, 35, }, { 182, 60, 237, 63, 203, 126, 135, 187, 230, 210, 57, 1, 135, 232, 33, 39, }, { 188, 221, 226, 66, 167, 132, 45, 240, 83, 160, 191, 117, 45, 128, 205, 48, }, { 141, 155, 42, 52, 74, 104, 138, 17, 43, 30, 169, 101, 138, 24, 152, 5, }, { 144, 181, 216, 71, 236, 142, 132, 49, 94, 159, 96, 239, 132, 13, 252, 219, }, { 119, 118, 173, 251, 207, 53, 11, 125, 126, 86, 34, 123, 11, 249, 192, 25, }, { 148, 223, 222, 117, 212, 234, 192, 31, 194, 171, 226, 102, 192, 227, 251, 108, }, { 231, 195, 117, 188, 35, 187, 143, 76, 32, 201, 66, 148, 143, 244, 60, 194, }, { 91, 30, 151, 254, 132, 63, 162, 188, 115, 105, 253, 225, 162, 116, 241, 242, }, { 100, 211, 86, 199, 61, 77, 235, 56, 34, 145, 239, 12, 235, 106, 79, 103, }, { 10, 225, 15, 125, 108, 250, 170, 75, 181, 114, 134, 116, 170, 104, 236, 23, }, { 171, 18, 31, 76, 109, 152, 137, 155, 147, 83, 240, 139, 137, 253, 69, 249, }, { 3, 206, 227, 244, 18, 43, 51, 253, 105, 23, 128, 22, 51, 173, 147, 231, }, { 128, 222, 192, 143, 12, 221, 87, 137, 107, 79, 45, 142, 87, 51, 224, 66, }, { 131, 16, 35, 123, 30, 246, 100, 116, 2, 88, 173, 152, 100, 158, 115, 165, }, { 166, 87, 245, 247, 43, 45, 84, 3, 211, 2, 116, 96, 84, 214, 61, 190, }, { 9, 47, 236, 137, 126, 209, 153, 182, 220, 101, 6, 98, 153, 197, 127, 240, }, { 172, 182, 250, 138, 71, 215, 254, 72, 102, 112, 242, 20, 254, 190, 209, 169, }, { 44, 104, 58, 5, 75, 10, 169, 193, 13, 63, 223, 154, 169, 141, 49, 235, }, { 126, 89, 65, 114, 177, 228, 146, 203, 162, 51, 36, 25, 146, 60, 191, 233, }, { 47, 166, 217, 241, 89, 33, 154, 60, 100, 40, 95, 140, 154, 32, 162, 12, }, { 181, 242, 14, 203, 217, 85, 180, 70, 143, 197, 185, 23, 180, 69, 178, 192, }, { 59, 167, 199, 11, 129, 22, 13, 170, 205, 204, 144, 100, 13, 240, 185, 34, }, { 189, 38, 2, 175, 169, 157, 60, 26, 116, 173, 126, 198, 60, 90, 188, 109, }, { 4, 106, 6, 50, 56, 100, 68, 46, 156, 52, 130, 137, 68, 238, 7, 183, }, { 235, 125, 127, 234, 107, 23, 67, 62, 71, 149, 7, 204, 67, 5, 53, 216, }, { 187, 121, 7, 132, 141, 203, 90, 35, 166, 131, 189, 234, 90, 195, 89, 96, }, }, { { 121, 26, 45, 109, 201, 59, 19, 225, 121, 88, 128, 128, 117, 128, 183, 54, }, { 145, 88, 203, 198, 254, 31, 177, 80, 145, 214, 26, 26, 29, 26, 137, 51, }, { 153, 9, 210, 188, 136, 121, 51, 194, 153, 233, 220, 220, 59, 220, 7, 156, }, { 185, 142, 182, 151, 147, 34, 126, 207, 185, 21, 66, 66, 163, 66, 122, 101, }, { 113, 75, 52, 23, 191, 93, 145, 115, 113, 103, 70, 70, 83, 70, 57, 153, }, { 234, 199, 113, 84, 203, 220, 99, 116, 234, 241, 74, 74, 128, 74, 252, 94, }, { 215, 217, 121, 82, 15, 98, 171, 198, 215, 108, 86, 86, 21, 86, 246, 239, }, { 149, 145, 38, 251, 197, 44, 240, 25, 149, 40, 121, 121, 14, 121, 206, 133, }, { 85, 5, 189, 1, 159, 53, 157, 55, 85, 101, 187, 187, 216, 187, 3, 214, }, { 218, 226, 39, 139, 60, 75, 233, 158, 218, 115, 155, 155, 84, 155, 94, 58, }, { 219, 65, 141, 21, 66, 55, 104, 29, 219, 173, 243, 243, 32, 243, 63, 246, }, { 181, 22, 66, 208, 222, 119, 189, 20, 181, 212, 231, 231, 150, 231, 179, 124, }, { 63, 155, 159, 249, 56, 70, 9, 119, 63, 226, 204, 204, 125, 204, 200, 234, }, { 84, 166, 23, 159, 225, 73, 28, 180, 84, 187, 211, 211, 172, 211, 98, 26, }, { 125, 211, 192, 80, 242, 8, 82, 168, 125, 166, 227, 227, 102, 227, 240, 128, }, { 213, 92, 238, 173, 243, 154, 106, 3, 213, 19, 134, 134, 253, 134, 52, 180, }, { 189, 71, 91, 170, 168, 17, 63, 134, 189, 235, 33, 33, 176, 33, 61, 211, }, { 169, 44, 132, 99, 127, 238, 185, 40, 169, 107, 13, 13, 239, 13, 165, 248, }, { 254, 172, 174, 157, 28, 35, 229, 218, 254, 113, 102, 102, 223, 102, 100, 117, }, { 59, 82, 114, 196, 3, 117, 72, 62, 59, 28, 175, 175, 110, 175, 143, 92, }, { 29, 153, 108, 45, 223, 229, 133, 191, 29, 97, 130, 130, 13, 130, 119, 72, }, { 54, 105, 44, 29, 48, 92, 10, 102, 54, 3, 98, 98, 47, 98, 39, 137, }, { 56, 116, 79, 165, 129, 241, 8, 120, 56, 189, 23, 23, 242, 23, 44, 203, }, { 7, 239, 208, 92, 185, 183, 1, 15, 7, 95, 219, 219, 143, 219, 228, 33, }, { 27, 213, 22, 239, 24, 46, 5, 51, 27, 224, 49, 49, 246, 49, 242, 165, }, { 251, 198, 233, 62, 89, 108, 37, 16, 251, 81, 109, 109, 184, 109, 66, 15, }, { 112, 232, 158, 137, 193, 33, 16, 240, 112, 185, 46, 46, 39, 46, 88, 85, }, { 137, 171, 224, 72, 100, 181, 244, 37, 137, 151, 147, 147, 119, 147, 216, 1, }, { 74, 25, 70, 211, 188, 40, 217, 77, 74, 123, 233, 233, 61, 233, 182, 197, }, { 174, 195, 84, 63, 198, 89, 184, 39, 174, 52, 214, 214, 96, 214, 65, 217, }, { 61, 30, 8, 6, 196, 190, 200, 178, 61, 157, 28, 28, 149, 28, 10, 177, }, { 41, 117, 215, 207, 19, 65, 78, 28, 41, 29, 48, 48, 202, 48, 146, 154, }, { 138, 141, 221, 41, 230, 49, 180, 99, 138, 54, 43, 43, 235, 43, 123, 150, }, { 205, 175, 197, 35, 105, 48, 47, 118, 205, 82, 15, 15, 151, 15, 101, 134, }, { 65, 110, 98, 200, 72, 202, 27, 153, 65, 229, 151, 151, 135, 151, 155, 253, }, { 206, 137, 248, 66, 235, 180, 111, 48, 206, 243, 183, 183, 11, 183, 198, 17, }, { 22, 238, 72, 54, 43, 7, 71, 107, 22, 255, 252, 252, 183, 252, 90, 112, }, { 108, 210, 88, 58, 96, 184, 20, 204, 108, 6, 196, 196, 94, 196, 78, 209, }, { 31, 28, 251, 210, 35, 29, 68, 122, 31, 30, 82, 82, 229, 82, 181, 19, }, { 224, 19, 255, 209, 65, 66, 32, 35, 224, 177, 92, 92, 78, 92, 176, 170, }, { 245, 219, 138, 134, 232, 193, 39, 14, 245, 239, 24, 24, 101, 24, 73, 77, }, { 176, 124, 5, 115, 155, 56, 125, 222, 176, 244, 236, 236, 241, 236, 149, 6, }, { 222, 43, 202, 182, 7, 120, 168, 215, 222, 141, 248, 248, 71, 248, 25, 140, }, { 3, 38, 61, 97, 130, 132, 64, 70, 3, 161, 184, 184, 156, 184, 163, 151, }, { 208, 54, 169, 14, 182, 213, 170, 201, 208, 51, 141, 141, 154, 141, 18, 206, }, { 142, 68, 48, 20, 221, 2, 245, 42, 142, 200, 72, 72, 248, 72, 60, 32, }, { 35, 161, 89, 74, 153, 223, 13, 75, 35, 93, 38, 38, 4, 38, 222, 110, }, { 10, 212, 142, 133, 138, 158, 67, 87, 10, 64, 22, 22, 206, 22, 76, 244, }, { 243, 151, 240, 68, 47, 10, 167, 130, 243, 110, 171, 171, 158, 171, 204, 160, }, { 6, 76, 122, 194, 199, 203, 128, 140, 6, 129, 179, 179, 251, 179, 133, 237, }, { 223, 136, 96, 40, 121, 4, 41, 84, 223, 83, 144, 144, 51, 144, 120, 64, }, { 77, 246, 150, 143, 5, 159, 216, 66, 77, 36, 50, 50, 178, 50, 82, 228, }, { 152, 170, 120, 34, 246, 5, 178, 65, 152, 55, 180, 180, 79, 180, 102, 80, }, { 151, 20, 177, 4, 57, 212, 49, 220, 151, 87, 169, 169, 230, 169, 12, 222, }, { 173, 229, 105, 94, 68, 221, 248, 97, 173, 149, 110, 110, 252, 110, 226, 78, }, { 21, 200, 117, 87, 169, 131, 7, 45, 21, 94, 68, 68, 43, 68, 249, 231, }, { 162, 91, 160, 120, 139, 12, 123, 252, 162, 245, 115, 115, 85, 115, 136, 192, }, { 171, 169, 19, 156, 131, 22, 120, 237, 171, 20, 221, 221, 7, 221, 103, 163, }, { 192, 148, 155, 250, 90, 25, 109, 46, 192, 77, 194, 194, 214, 194, 205, 83, }, { 182, 48, 127, 177, 92, 243, 253, 82, 182, 117, 95, 95, 10, 95, 16, 235, }, { 83, 73, 199, 195, 88, 254, 29, 187, 83, 228, 8, 8, 35, 8, 134, 59, }, { 237, 40, 161, 8, 114, 107, 98, 123, 237, 174, 145, 145, 15, 145, 24, 127, }, { 193, 55, 49, 100, 36, 101, 236, 173, 193, 147, 170, 170, 162, 170, 172, 159, }, { 225, 176, 85, 79, 63, 62, 161, 160, 225, 111, 52, 52, 58, 52, 209, 102, }, { 98, 207, 59, 130, 209, 21, 22, 210, 98, 184, 177, 177, 131, 177, 69, 147, }, { 36, 78, 137, 22, 32, 104, 12, 68, 36, 2, 253, 253, 139, 253, 58, 79, }, { 233, 225, 76, 53, 73, 88, 35, 50, 233, 80, 242, 242, 28, 242, 95, 201, }, { 101, 32, 235, 222, 104, 162, 23, 221, 101, 231, 106, 106, 12, 106, 161, 178, }, { 236, 139, 11, 150, 12, 23, 227, 248, 236, 112, 249, 249, 123, 249, 121, 179, }, { 93, 84, 164, 123, 233, 83, 31, 165, 93, 90, 125, 125, 254, 125, 141, 121, }, { 38, 203, 30, 233, 220, 144, 205, 129, 38, 125, 45, 45, 99, 45, 248, 20, }, { 190, 97, 102, 203, 42, 149, 127, 192, 190, 74, 153, 153, 44, 153, 158, 68, }, { 33, 36, 206, 181, 101, 39, 204, 142, 33, 34, 246, 246, 236, 246, 28, 53, }, { 75, 186, 236, 77, 194, 84, 88, 206, 75, 165, 129, 129, 73, 129, 215, 9, }, { 72, 156, 209, 44, 64, 208, 24, 136, 72, 4, 57, 57, 213, 57, 116, 158, }, { 202, 64, 21, 127, 208, 135, 46, 121, 202, 13, 212, 212, 24, 212, 129, 167, }, { 247, 94, 29, 121, 20, 57, 230, 203, 247, 144, 200, 200, 141, 200, 139, 22, }, { 124, 112, 106, 206, 140, 116, 211, 43, 124, 120, 139, 139, 18, 139, 145, 76, }, { 255, 15, 4, 3, 98, 95, 100, 89, 255, 175, 14, 14, 171, 14, 5, 185, }, { 32, 135, 100, 43, 27, 91, 77, 13, 32, 252, 158, 158, 152, 158, 125, 249, }, { 209, 149, 3, 144, 200, 169, 43, 74, 209, 237, 229, 229, 238, 229, 115, 2, }, { 133, 51, 20, 15, 41, 224, 55, 254, 133, 86, 54, 54, 66, 54, 17, 24, }, { 88, 62, 227, 216, 172, 28, 223, 111, 88, 122, 118, 118, 153, 118, 171, 3, }, { 73, 63, 123, 178, 62, 172, 153, 11, 73, 218, 81, 81, 161, 81, 21, 82, }, { 250, 101, 67, 160, 39, 16, 164, 147, 250, 143, 5, 5, 204, 5, 35, 195, }, { 135, 182, 131, 240, 213, 24, 246, 59, 135, 41, 230, 230, 170, 230, 211, 67, }, { 39, 104, 180, 119, 162, 236, 76, 2, 39, 163, 69, 69, 23, 69, 153, 216, }, { 232, 66, 230, 171, 55, 36, 162, 177, 232, 142, 154, 154, 104, 154, 62, 5, }, { 244, 120, 32, 24, 150, 189, 166, 141, 244, 49, 112, 112, 17, 112, 40, 129, }, { 90, 187, 116, 39, 80, 228, 30, 170, 90, 5, 166, 166, 113, 166, 105, 88, }, { 102, 6, 214, 191, 234, 38, 87, 155, 102, 70, 210, 210, 144, 210, 2, 37, }, { 240, 177, 205, 37, 173, 142, 231, 196, 240, 207, 19, 19, 2, 19, 111, 55, }, { 203, 227, 191, 225, 174, 251, 175, 250, 203, 211, 188, 188, 108, 188, 224, 107, }, { 14, 29, 99, 184, 177, 173, 2, 30, 14, 190, 117, 117, 221, 117, 11, 66, }, { 226, 150, 104, 46, 189, 186, 225, 230, 226, 206, 140, 140, 166, 140, 114, 241, }, { 87, 128, 42, 254, 99, 205, 92, 242, 87, 26, 107, 107, 48, 107, 193, 141, }, { 196, 93, 118, 199, 97, 42, 44, 103, 196, 179, 161, 161, 197, 161, 138, 229, }, { 155, 140, 69, 67, 116, 129, 242, 7, 155, 150, 12, 12, 211, 12, 197, 199, }, { 238, 14, 156, 105, 240, 239, 34, 61, 238, 15, 41, 41, 147, 41, 187, 232, }, { 26, 118, 188, 113, 102, 82, 132, 176, 26, 62, 89, 89, 130, 89, 147, 105, }, { 55, 202, 134, 131, 78, 32, 139, 229, 55, 221, 10, 10, 91, 10, 70, 69, }, { 46, 154, 7, 147, 170, 246, 79, 19, 46, 66, 235, 235, 69, 235, 118, 187, }, { 105, 184, 31, 153, 37, 247, 212, 6, 105, 38, 207, 207, 57, 207, 104, 171, }, { 139, 46, 119, 183, 152, 77, 53, 224, 139, 232, 67, 67, 159, 67, 26, 90, }, { 175, 96, 254, 161, 184, 37, 57, 164, 175, 234, 190, 190, 20, 190, 32, 21, }, { 194, 17, 12, 5, 166, 225, 172, 235, 194, 50, 18, 18, 62, 18, 15, 8, }, { 127, 86, 87, 175, 14, 240, 147, 109, 127, 217, 51, 51, 142, 51, 50, 219, }, { 100, 131, 65, 64, 22, 222, 150, 94, 100, 57, 2, 2, 120, 2, 192, 126, }, { 69, 167, 143, 245, 115, 249, 90, 208, 69, 27, 244, 244, 148, 244, 220, 75, }, { 20, 107, 223, 201, 215, 255, 134, 174, 20, 128, 44, 44, 95, 44, 152, 43, }, { 253, 138, 147, 252, 158, 167, 165, 156, 253, 208, 222, 222, 67, 222, 199, 226, }, { 172, 70, 195, 192, 58, 161, 121, 226, 172, 75, 6, 6, 136, 6, 131, 130, }, { 134, 21, 41, 110, 171, 100, 119, 184, 134, 247, 142, 142, 222, 142, 178, 143, }, { 118, 164, 228, 75, 6, 234, 144, 124, 118, 56, 157, 157, 220, 157, 221, 184, }, { 67, 235, 245, 55, 180, 50, 218, 92, 67, 154, 71, 71, 111, 71, 89, 166, }, { 80, 111, 250, 162, 218, 122, 93, 253, 80, 69, 176, 176, 191, 176, 37, 172, }, { 40, 214, 125, 81, 109, 61, 207, 159, 40, 195, 88, 88, 190, 88, 243, 86, }, { 170, 10, 185, 2, 253, 106, 249, 110, 170, 202, 181, 181, 115, 181, 6, 111, }, { 94, 114, 153, 26, 107, 215, 95, 227, 94, 251, 197, 197, 98, 197, 46, 238, }, { 221, 13, 247, 215, 133, 252, 232, 145, 221, 44, 64, 64, 219, 64, 186, 27, }, { 187, 11, 33, 104, 111, 218, 191, 10, 187, 106, 146, 146, 75, 146, 184, 62, }, { 150, 183, 27, 154, 71, 168, 176, 95, 150, 137, 193, 193, 146, 193, 109, 18, }, { 5, 106, 71, 163, 69, 79, 192, 202, 5, 32, 11, 11, 103, 11, 38, 122, }, { 123, 159, 186, 146, 53, 195, 210, 36, 123, 39, 80, 80, 157, 80, 117, 109, }, { 246, 253, 183, 231, 106, 69, 103, 72, 246, 78, 160, 160, 249, 160, 234, 218, }, { 43, 240, 64, 48, 239, 185, 143, 217, 43, 98, 224, 224, 34, 224, 80, 193, }, { 9, 242, 179, 228, 8, 26, 3, 17, 9, 225, 174, 174, 82, 174, 239, 99, }, { 199, 123, 75, 166, 227, 174, 108, 33, 199, 18, 25, 25, 89, 25, 41, 114, }, { 70, 129, 178, 148, 241, 125, 26, 150, 70, 186, 76, 76, 8, 76, 127, 220, }, { 13, 59, 94, 217, 51, 41, 66, 88, 13, 31, 205, 205, 65, 205, 168, 213, }, { 19, 132, 15, 149, 110, 72, 135, 161, 19, 223, 247, 247, 208, 247, 124, 10, }, { 97, 233, 6, 227, 83, 145, 86, 148, 97, 25, 9, 9, 31, 9, 230, 4, }, { 1, 163, 170, 158, 126, 124, 129, 131, 1, 222, 104, 104, 116, 104, 97, 204, }, { 239, 173, 54, 247, 142, 147, 163, 190, 239, 209, 65, 65, 231, 65, 218, 36, }, { 141, 98, 13, 117, 95, 134, 181, 108, 141, 105, 240, 240, 100, 240, 159, 183, }, { 211, 16, 148, 111, 52, 81, 234, 143, 211, 146, 53, 53, 6, 53, 177, 89, }, { 188, 228, 241, 52, 214, 109, 190, 5, 188, 53, 73, 73, 196, 73, 92, 31, }, { 241, 18, 103, 187, 211, 242, 102, 71, 241, 17, 123, 123, 118, 123, 14, 251, }, { 50, 160, 193, 32, 11, 111, 75, 47, 50, 253, 1, 1, 60, 1, 96, 63, }, { 92, 247, 14, 229, 151, 47, 158, 38, 92, 132, 21, 21, 138, 21, 236, 181, }, { 2, 133, 151, 255, 252, 248, 193, 197, 2, 127, 208, 208, 232, 208, 194, 91, }, { 177, 223, 175, 237, 229, 68, 252, 93, 177, 42, 132, 132, 133, 132, 244, 202, }, { 86, 35, 128, 96, 29, 177, 221, 113, 86, 196, 3, 3, 68, 3, 160, 65, }, { 81, 204, 80, 60, 164, 6, 220, 126, 81, 155, 216, 216, 203, 216, 68, 96, }, { 201, 102, 40, 30, 82, 3, 110, 63, 201, 172, 108, 108, 132, 108, 34, 48, }, { 214, 122, 211, 204, 113, 30, 42, 69, 214, 178, 62, 62, 97, 62, 151, 35, }, { 78, 208, 171, 238, 135, 27, 152, 4, 78, 133, 138, 138, 46, 138, 241, 115, }, { 200, 197, 130, 128, 44, 127, 239, 188, 200, 114, 4, 4, 240, 4, 67, 252, }, { 160, 222, 55, 135, 119, 244, 186, 57, 160, 138, 163, 163, 189, 163, 74, 155, }, { 49, 134, 252, 65, 137, 235, 11, 105, 49, 92, 185, 185, 160, 185, 195, 168, }, { 34, 2, 243, 212, 231, 163, 140, 200, 34, 131, 78, 78, 112, 78, 191, 162, }, { 165, 180, 112, 36, 50, 187, 122, 243, 165, 170, 168, 168, 218, 168, 108, 225, }, { 23, 77, 226, 168, 85, 123, 198, 232, 23, 33, 148, 148, 195, 148, 59, 188, }, { 51, 3, 107, 190, 117, 19, 202, 172, 51, 35, 105, 105, 72, 105, 1, 243, }, { 148, 50, 140, 101, 187, 80, 113, 154, 148, 246, 17, 17, 122, 17, 175, 73, }, { 235, 100, 219, 202, 181, 160, 226, 247, 235, 47, 34, 34, 244, 34, 157, 146, }, { 132, 144, 190, 145, 87, 156, 182, 125, 132, 136, 94, 94, 54, 94, 112, 212, }, { 8, 81, 25, 122, 118, 102, 130, 146, 8, 63, 198, 198, 38, 198, 142, 175, }, { 37, 237, 35, 136, 94, 20, 141, 199, 37, 220, 149, 149, 255, 149, 91, 131, }, { 249, 67, 126, 193, 165, 148, 228, 213, 249, 46, 189, 189, 80, 189, 128, 84, }, { 57, 215, 229, 59, 255, 141, 137, 251, 57, 99, 127, 127, 134, 127, 77, 7, }, { 96, 74, 172, 125, 45, 237, 215, 23, 96, 199, 97, 97, 107, 97, 135, 200, }, { 178, 249, 146, 140, 103, 192, 188, 27, 178, 139, 60, 60, 25, 60, 87, 93, }, { 212, 255, 68, 51, 141, 230, 235, 128, 212, 205, 238, 238, 137, 238, 85, 120, }, { 111, 244, 101, 91, 226, 60, 84, 138, 111, 167, 124, 124, 194, 124, 237, 70, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 109, 113, 242, 164, 30, 196, 149, 79, 109, 216, 172, 172, 42, 172, 47, 29, }, { 161, 125, 157, 25, 9, 136, 59, 186, 161, 84, 203, 203, 201, 203, 43, 87, }, { 18, 39, 165, 11, 16, 52, 6, 34, 18, 1, 159, 159, 164, 159, 29, 198, }, { 216, 103, 176, 116, 192, 179, 40, 91, 216, 12, 75, 75, 188, 75, 156, 97, }, { 163, 248, 10, 230, 245, 112, 250, 127, 163, 43, 27, 27, 33, 27, 233, 12, }, { 164, 23, 218, 186, 76, 199, 251, 112, 164, 116, 192, 192, 174, 192, 13, 45, }, { 207, 42, 82, 220, 149, 200, 238, 179, 207, 45, 223, 223, 127, 223, 167, 221, }, { 154, 47, 239, 221, 10, 253, 115, 132, 154, 72, 100, 100, 167, 100, 164, 11, }, { 204, 12, 111, 189, 23, 76, 174, 245, 204, 140, 103, 103, 227, 103, 4, 74, }, { 82, 234, 109, 93, 38, 130, 156, 56, 82, 58, 96, 96, 87, 96, 231, 247, }, { 28, 58, 198, 179, 161, 153, 4, 60, 28, 191, 234, 234, 121, 234, 22, 132, }, { 47, 57, 173, 13, 212, 138, 206, 144, 47, 156, 131, 131, 49, 131, 23, 119, }, { 126, 245, 253, 49, 112, 140, 18, 238, 126, 7, 91, 91, 250, 91, 83, 23, }, { 147, 221, 92, 57, 2, 231, 112, 149, 147, 169, 202, 202, 245, 202, 75, 104, }, { 66, 72, 95, 169, 202, 78, 91, 223, 66, 68, 47, 47, 27, 47, 56, 106, }, { 179, 90, 56, 18, 25, 188, 61, 152, 179, 85, 84, 84, 109, 84, 54, 145, }, { 24, 243, 43, 142, 154, 170, 69, 117, 24, 65, 137, 137, 106, 137, 81, 50, }, { 184, 45, 28, 9, 237, 94, 255, 76, 184, 203, 42, 42, 215, 42, 27, 169, }, { 252, 41, 57, 98, 224, 219, 36, 31, 252, 14, 182, 182, 55, 182, 166, 46, }, { 68, 4, 37, 107, 13, 133, 219, 83, 68, 197, 156, 156, 224, 156, 189, 135, }, { 230, 95, 133, 19, 134, 137, 160, 175, 230, 48, 239, 239, 181, 239, 53, 71, }, { 140, 193, 167, 235, 33, 250, 52, 239, 140, 183, 152, 152, 16, 152, 254, 123, }, { 198, 216, 225, 56, 157, 210, 237, 162, 198, 204, 113, 113, 45, 113, 72, 190, }, { 99, 108, 145, 28, 175, 105, 151, 81, 99, 102, 217, 217, 247, 217, 36, 95, }, { 191, 194, 204, 85, 84, 233, 254, 67, 191, 148, 241, 241, 88, 241, 255, 136, }, { 242, 52, 90, 218, 81, 118, 38, 1, 242, 176, 195, 195, 234, 195, 173, 108, }, { 44, 31, 144, 108, 86, 14, 142, 214, 44, 61, 59, 59, 173, 59, 180, 224, }, { 17, 1, 152, 106, 146, 176, 70, 100, 17, 160, 39, 39, 56, 39, 190, 81, }, { 115, 206, 163, 232, 67, 165, 80, 182, 115, 24, 150, 150, 187, 150, 251, 194, }, { 220, 174, 93, 73, 251, 128, 105, 18, 220, 242, 40, 40, 175, 40, 219, 215, }, { 217, 196, 26, 234, 190, 207, 169, 216, 217, 210, 35, 35, 200, 35, 253, 173, }, { 146, 126, 246, 167, 124, 155, 241, 22, 146, 119, 162, 162, 129, 162, 42, 164, }, { 62, 56, 53, 103, 70, 58, 136, 244, 62, 60, 164, 164, 9, 164, 169, 38, }, { 210, 179, 62, 241, 74, 45, 107, 12, 210, 76, 93, 93, 114, 93, 208, 149, }, { 89, 157, 73, 70, 210, 96, 94, 236, 89, 164, 30, 30, 237, 30, 202, 207, }, { 117, 130, 217, 42, 132, 110, 208, 58, 117, 153, 37, 37, 64, 37, 126, 47, }, { 25, 80, 129, 16, 228, 214, 196, 246, 25, 159, 225, 225, 30, 225, 48, 254, }, { 180, 181, 232, 78, 160, 11, 60, 151, 180, 10, 143, 143, 226, 143, 210, 176, }, { 129, 250, 249, 50, 18, 211, 118, 183, 129, 168, 85, 85, 81, 85, 86, 174, }, { 228, 218, 18, 236, 122, 113, 97, 106, 228, 79, 63, 63, 93, 63, 247, 28, }, { 229, 121, 184, 114, 4, 13, 224, 233, 229, 145, 87, 87, 41, 87, 150, 208, }, { 15, 190, 201, 38, 207, 209, 131, 157, 15, 96, 29, 29, 169, 29, 106, 142, }, { 71, 34, 24, 10, 143, 1, 155, 21, 71, 100, 36, 36, 124, 36, 30, 16, }, { 156, 99, 149, 31, 205, 54, 243, 8, 156, 201, 215, 215, 92, 215, 33, 230, }, { 42, 83, 234, 174, 145, 197, 14, 90, 42, 188, 136, 136, 86, 136, 49, 13, }, { 168, 143, 46, 253, 1, 146, 56, 171, 168, 181, 101, 101, 155, 101, 196, 52, }, { 91, 24, 222, 185, 46, 152, 159, 41, 91, 219, 206, 206, 5, 206, 8, 148, }, { 143, 231, 154, 138, 163, 126, 116, 169, 143, 22, 32, 32, 140, 32, 93, 236, }, { 4, 201, 237, 61, 59, 51, 65, 73, 4, 254, 99, 99, 19, 99, 71, 182, }, { 166, 146, 77, 69, 176, 63, 58, 181, 166, 11, 16, 16, 70, 16, 207, 118, }, { 114, 109, 9, 118, 61, 217, 209, 53, 114, 198, 254, 254, 207, 254, 154, 14, }, { 186, 168, 139, 246, 17, 166, 62, 137, 186, 180, 250, 250, 63, 250, 217, 242, }, { 48, 37, 86, 223, 247, 151, 138, 234, 48, 130, 209, 209, 212, 209, 162, 100, }, { 76, 85, 60, 17, 123, 227, 89, 193, 76, 250, 90, 90, 198, 90, 51, 40, }, { 130, 220, 196, 83, 144, 87, 54, 241, 130, 9, 237, 237, 205, 237, 245, 57, }, { 106, 158, 34, 248, 167, 115, 148, 64, 106, 135, 119, 119, 165, 119, 203, 60, }, { 136, 8, 74, 214, 26, 201, 117, 166, 136, 73, 251, 251, 3, 251, 185, 205, }, { 60, 189, 162, 152, 186, 194, 73, 49, 60, 67, 116, 116, 225, 116, 107, 125, }, { 110, 87, 207, 197, 156, 64, 213, 9, 110, 121, 20, 20, 182, 20, 140, 138, }, { 11, 119, 36, 27, 244, 226, 194, 212, 11, 158, 126, 126, 186, 126, 45, 56, }, { 158, 230, 2, 224, 49, 206, 50, 205, 158, 182, 7, 7, 180, 7, 227, 189, }, { 104, 27, 181, 7, 91, 139, 85, 133, 104, 248, 167, 167, 77, 167, 9, 103, }, { 103, 165, 124, 33, 148, 90, 214, 24, 103, 152, 186, 186, 228, 186, 99, 233, }, { 197, 254, 220, 89, 31, 86, 173, 228, 197, 109, 201, 201, 177, 201, 235, 41, }, { 116, 33, 115, 180, 250, 18, 81, 185, 116, 71, 77, 77, 52, 77, 31, 227, }, { 64, 205, 200, 86, 54, 182, 154, 26, 64, 59, 255, 255, 243, 255, 250, 49, }, { 12, 152, 244, 71, 77, 85, 195, 219, 12, 193, 165, 165, 53, 165, 201, 25, }, { 231, 252, 47, 141, 248, 245, 33, 44, 231, 238, 135, 135, 193, 135, 84, 139, }, { 157, 192, 63, 129, 179, 74, 114, 139, 157, 23, 191, 191, 40, 191, 64, 42, }, { 144, 251, 97, 88, 128, 99, 48, 211, 144, 8, 114, 114, 105, 114, 232, 255, }, { 122, 60, 16, 12, 75, 191, 83, 167, 122, 249, 56, 56, 233, 56, 20, 161, }, { 58, 241, 216, 90, 125, 9, 201, 189, 58, 194, 199, 199, 26, 199, 238, 144, }, { 53, 79, 17, 124, 178, 216, 74, 32, 53, 162, 218, 218, 179, 218, 132, 30, }, { 52, 236, 187, 226, 204, 164, 203, 163, 52, 124, 178, 178, 199, 178, 229, 210, }, { 159, 69, 168, 126, 79, 178, 179, 78, 159, 104, 111, 111, 192, 111, 130, 113, }, { 183, 147, 213, 47, 34, 143, 124, 209, 183, 171, 55, 55, 126, 55, 113, 39, }, { 248, 224, 212, 95, 219, 232, 101, 86, 248, 240, 213, 213, 36, 213, 225, 152, }, { 79, 115, 1, 112, 249, 103, 25, 135, 79, 91, 226, 226, 90, 226, 144, 191, }, { 107, 61, 136, 102, 217, 15, 21, 195, 107, 89, 31, 31, 209, 31, 170, 240, }, { 131, 127, 110, 205, 238, 43, 183, 114, 131, 215, 133, 133, 185, 133, 148, 245, }, { 95, 209, 51, 132, 21, 171, 222, 96, 95, 37, 173, 173, 22, 173, 79, 34, }, { 167, 49, 231, 219, 206, 67, 187, 54, 167, 213, 120, 120, 50, 120, 174, 186, }, { 30, 191, 81, 76, 93, 97, 197, 249, 30, 192, 58, 58, 145, 58, 212, 223, }, { 16, 162, 50, 244, 236, 204, 199, 231, 16, 126, 79, 79, 76, 79, 223, 157, }, { 195, 178, 166, 155, 216, 157, 45, 104, 195, 236, 122, 122, 74, 122, 110, 196, }, { 120, 185, 135, 243, 183, 71, 146, 98, 120, 134, 232, 232, 1, 232, 214, 250, }, { 45, 188, 58, 242, 40, 114, 15, 85, 45, 227, 83, 83, 217, 83, 213, 44, }, { 119, 7, 78, 213, 120, 150, 17, 255, 119, 230, 245, 245, 168, 245, 188, 116, }, { 227, 53, 194, 176, 195, 198, 96, 101, 227, 16, 228, 228, 210, 228, 19, 61, }, { 128, 89, 83, 172, 108, 175, 247, 52, 128, 118, 61, 61, 37, 61, 55, 98, }, }, { { 10, 175, 69, 110, 246, 115, 86, 251, 71, 28, 213, 200, 102, 44, 100, 181, }, { 202, 82, 104, 229, 36, 91, 217, 8, 235, 30, 224, 94, 172, 107, 47, 10, }, { 243, 128, 246, 117, 46, 106, 197, 203, 120, 88, 208, 207, 8, 149, 134, 137, }, { 23, 78, 203, 112, 6, 174, 181, 65, 113, 131, 16, 206, 221, 235, 103, 192, }, { 51, 125, 219, 254, 252, 66, 74, 56, 212, 90, 229, 89, 194, 210, 205, 54, }, { 95, 40, 235, 175, 49, 181, 136, 179, 248, 242, 57, 35, 227, 153, 240, 239, }, { 163, 177, 155, 131, 146, 116, 48, 31, 5, 184, 183, 64, 190, 54, 32, 104, }, { 55, 59, 39, 173, 33, 162, 215, 136, 67, 61, 248, 247, 254, 20, 154, 170, }, { 42, 218, 169, 179, 209, 127, 52, 50, 117, 162, 61, 241, 69, 211, 153, 223, }, { 201, 129, 41, 73, 13, 19, 192, 124, 20, 165, 153, 195, 189, 216, 128, 99, }, { 103, 10, 74, 91, 157, 188, 34, 92, 62, 221, 159, 120, 72, 183, 60, 75, }, { 211, 245, 26, 168, 9, 102, 167, 2, 74, 230, 56, 246, 43, 106, 123, 227, }, { 99, 76, 182, 8, 64, 92, 191, 236, 169, 186, 130, 214, 116, 113, 107, 215, }, { 132, 81, 202, 161, 65, 208, 214, 18, 95, 218, 59, 74, 176, 188, 37, 247, }, { 247, 198, 10, 38, 243, 138, 88, 123, 239, 63, 205, 97, 52, 83, 209, 21, }, { 60, 100, 93, 167, 113, 233, 55, 95, 81, 72, 187, 245, 151, 232, 155, 56, }, { 234, 39, 132, 56, 3, 87, 187, 193, 217, 160, 8, 103, 143, 148, 210, 96, }, { 101, 41, 52, 147, 18, 204, 141, 4, 148, 15, 112, 47, 86, 212, 246, 5, }, { 208, 38, 91, 4, 32, 46, 190, 118, 181, 93, 65, 107, 58, 217, 212, 138, }, { 158, 37, 249, 64, 69, 165, 177, 108, 1, 153, 154, 127, 38, 14, 222, 119, }, { 24, 87, 77, 41, 139, 5, 200, 38, 244, 145, 78, 98, 136, 209, 49, 206, }, { 244, 21, 75, 138, 218, 194, 65, 15, 16, 132, 180, 252, 37, 224, 126, 124, }, { 175, 123, 92, 118, 54, 151, 84, 12, 127, 17, 144, 113, 250, 191, 217, 15, }, { 204, 55, 234, 126, 118, 203, 235, 224, 214, 171, 18, 167, 142, 206, 178, 216, }, { 122, 235, 196, 69, 109, 97, 193, 230, 8, 66, 90, 126, 243, 112, 63, 62, }, { 131, 196, 119, 94, 181, 120, 82, 214, 55, 6, 95, 121, 157, 201, 221, 2, }, { 157, 246, 184, 236, 108, 237, 168, 24, 254, 34, 227, 226, 55, 189, 113, 30, }, { 129, 231, 9, 150, 58, 8, 253, 142, 157, 212, 176, 46, 131, 170, 23, 76, }, { 173, 88, 34, 190, 185, 231, 251, 84, 213, 195, 127, 38, 228, 220, 19, 65, }, { 169, 30, 222, 237, 100, 7, 102, 228, 66, 164, 98, 136, 216, 26, 68, 221, }, { 252, 153, 112, 44, 163, 193, 184, 172, 253, 74, 142, 99, 93, 175, 208, 135, }, { 115, 151, 192, 135, 178, 90, 142, 105, 176, 229, 246, 43, 132, 239, 244, 226, }, { 176, 185, 172, 160, 73, 58, 24, 238, 227, 92, 186, 32, 95, 27, 16, 52, }, { 119, 209, 60, 212, 111, 186, 19, 217, 39, 130, 235, 133, 184, 41, 163, 126, }, { 165, 212, 25, 24, 192, 228, 2, 247, 56, 13, 69, 185, 156, 147, 189, 186, }, { 70, 143, 153, 226, 28, 136, 246, 185, 89, 10, 225, 139, 100, 152, 164, 6, }, { 16, 219, 118, 143, 242, 6, 49, 133, 25, 95, 116, 253, 240, 158, 159, 53, }, { 43, 42, 150, 215, 119, 71, 130, 30, 32, 203, 171, 59, 74, 3, 252, 248, }, { 135, 130, 139, 13, 104, 152, 207, 102, 160, 97, 66, 215, 161, 15, 138, 158, }, { 249, 47, 179, 27, 216, 25, 147, 48, 63, 68, 5, 7, 110, 185, 226, 60, }, { 216, 170, 96, 162, 89, 45, 71, 213, 88, 147, 123, 244, 66, 150, 122, 113, }, { 128, 23, 54, 242, 156, 48, 75, 162, 200, 189, 38, 228, 140, 122, 114, 107, }, { 52, 232, 102, 1, 8, 234, 206, 252, 188, 134, 129, 106, 239, 167, 53, 195, }, { 49, 94, 165, 54, 115, 50, 229, 96, 126, 136, 10, 14, 220, 177, 7, 120, }, { 111, 134, 113, 253, 228, 191, 219, 255, 211, 19, 165, 231, 48, 248, 146, 176, }, { 77, 208, 227, 232, 76, 195, 22, 110, 75, 127, 162, 137, 13, 100, 165, 148, }, { 213, 144, 152, 51, 91, 246, 149, 234, 119, 83, 202, 15, 9, 207, 230, 49, }, { 166, 7, 88, 180, 233, 172, 27, 131, 199, 182, 60, 36, 141, 32, 18, 211, }, { 186, 22, 233, 206, 191, 73, 78, 21, 164, 64, 111, 232, 57, 55, 116, 129, }, { 98, 188, 137, 108, 230, 100, 9, 192, 252, 211, 20, 28, 123, 161, 14, 240, }, { 154, 99, 5, 19, 152, 69, 44, 220, 150, 254, 135, 209, 26, 200, 137, 235, }, { 97, 111, 200, 192, 207, 44, 16, 180, 3, 104, 109, 129, 106, 18, 161, 153, }, { 93, 11, 149, 103, 190, 197, 39, 235, 82, 32, 214, 116, 253, 250, 58, 161, }, { 168, 238, 225, 137, 194, 63, 208, 200, 23, 205, 244, 66, 215, 202, 33, 250, }, { 152, 64, 123, 219, 23, 53, 131, 132, 60, 44, 104, 134, 4, 171, 67, 165, }, { 33, 133, 211, 185, 129, 52, 212, 229, 103, 215, 126, 243, 44, 47, 152, 77, }, { 109, 165, 15, 53, 107, 207, 116, 167, 121, 193, 74, 176, 46, 155, 88, 254, }, { 250, 252, 242, 183, 241, 81, 138, 68, 192, 255, 124, 154, 127, 10, 77, 85, }, { 29, 225, 142, 30, 240, 221, 227, 186, 54, 159, 197, 6, 187, 199, 3, 117, }, { 226, 171, 191, 158, 122, 84, 66, 98, 52, 110, 50, 248, 247, 219, 124, 155, }, { 72, 102, 32, 223, 55, 27, 61, 242, 137, 113, 41, 237, 62, 114, 151, 47, }, { 147, 31, 1, 209, 71, 126, 99, 83, 46, 89, 43, 132, 109, 87, 66, 55, }, { 179, 106, 237, 12, 96, 114, 1, 154, 28, 231, 195, 189, 78, 168, 191, 93, }, { 87, 164, 208, 9, 72, 182, 113, 16, 21, 60, 3, 188, 155, 214, 94, 20, }, { 112, 68, 129, 43, 155, 18, 151, 29, 79, 94, 143, 182, 149, 92, 91, 139, }, { 25, 167, 114, 77, 45, 61, 126, 10, 161, 248, 216, 168, 135, 1, 84, 233, }, { 110, 118, 78, 153, 66, 135, 109, 211, 134, 122, 51, 45, 63, 40, 247, 151, }, { 188, 115, 107, 85, 237, 217, 124, 253, 153, 245, 157, 17, 27, 146, 233, 83, }, { 61, 148, 98, 195, 215, 209, 129, 115, 4, 33, 45, 63, 152, 56, 254, 31, }, { 19, 8, 55, 35, 219, 78, 40, 241, 230, 228, 13, 96, 225, 45, 48, 92, }, { 134, 114, 180, 105, 206, 160, 121, 74, 245, 8, 212, 29, 174, 223, 239, 185, }, { 219, 121, 33, 14, 112, 101, 94, 161, 167, 40, 2, 105, 83, 37, 213, 24, }, { 74, 69, 94, 23, 184, 107, 146, 170, 35, 163, 198, 186, 32, 17, 93, 97, }, { 3, 211, 65, 172, 41, 72, 25, 116, 255, 187, 121, 157, 17, 179, 175, 105, }, { 50, 141, 228, 154, 90, 122, 252, 20, 129, 51, 115, 147, 205, 2, 168, 17, }, { 187, 230, 214, 170, 25, 113, 248, 57, 241, 41, 249, 34, 54, 231, 17, 166, }, { 71, 127, 166, 134, 186, 176, 64, 149, 12, 99, 119, 65, 107, 72, 193, 33, }, { 89, 77, 105, 52, 99, 37, 186, 91, 197, 71, 203, 218, 193, 60, 109, 61, }, { 126, 173, 56, 22, 176, 129, 92, 86, 159, 37, 71, 208, 207, 182, 104, 162, }, { 228, 206, 61, 5, 40, 196, 112, 138, 9, 219, 192, 1, 213, 126, 225, 73, }, { 193, 13, 18, 239, 116, 16, 57, 223, 249, 107, 163, 92, 197, 151, 46, 152, }, { 69, 92, 216, 78, 53, 192, 239, 205, 166, 177, 152, 22, 117, 43, 11, 111, }, { 64, 234, 27, 121, 78, 24, 196, 81, 100, 191, 19, 114, 70, 61, 57, 212, }, { 156, 6, 135, 136, 202, 213, 30, 52, 171, 75, 117, 40, 56, 109, 20, 57, }, { 45, 79, 20, 76, 37, 215, 176, 246, 29, 126, 89, 194, 104, 166, 97, 42, }, { 218, 137, 30, 106, 214, 93, 232, 141, 242, 65, 148, 163, 92, 245, 176, 63, }, { 40, 249, 215, 123, 94, 15, 155, 106, 223, 112, 210, 166, 91, 176, 83, 145, }, { 192, 253, 45, 139, 210, 40, 143, 243, 172, 2, 53, 150, 202, 71, 75, 191, }, { 118, 33, 3, 176, 201, 130, 165, 245, 114, 235, 125, 79, 183, 249, 198, 89, }, { 223, 63, 221, 93, 173, 133, 195, 17, 48, 79, 31, 199, 111, 227, 130, 132, }, { 141, 45, 206, 99, 158, 235, 153, 157, 231, 125, 151, 31, 199, 35, 238, 43, }, { 139, 72, 76, 248, 204, 123, 171, 117, 218, 200, 101, 230, 229, 134, 115, 249, }, { 21, 109, 181, 184, 137, 222, 26, 25, 219, 81, 255, 153, 195, 136, 173, 142, }, { 91, 110, 23, 252, 236, 85, 21, 3, 111, 149, 36, 141, 223, 95, 167, 115, }, { 102, 250, 117, 63, 59, 132, 148, 112, 107, 180, 9, 178, 71, 103, 89, 108, }, { 181, 15, 111, 151, 50, 226, 51, 114, 33, 82, 49, 68, 108, 13, 34, 143, }, { 224, 136, 193, 86, 245, 36, 237, 58, 158, 188, 221, 175, 233, 184, 182, 213, }, { 108, 85, 48, 81, 205, 247, 194, 139, 44, 168, 220, 122, 33, 75, 61, 217, }, { 162, 65, 164, 231, 52, 76, 134, 51, 80, 209, 33, 138, 177, 230, 69, 79, }, { 212, 96, 167, 87, 253, 206, 35, 198, 34, 58, 92, 197, 6, 31, 131, 22, }, { 90, 158, 40, 152, 74, 109, 163, 47, 58, 252, 178, 71, 208, 143, 194, 84, }, { 191, 160, 42, 249, 196, 145, 101, 137, 102, 78, 228, 140, 10, 33, 70, 58, }, { 120, 200, 186, 141, 226, 17, 110, 190, 162, 144, 181, 41, 237, 19, 245, 112, }, { 30, 50, 207, 178, 217, 149, 250, 206, 201, 36, 188, 155, 170, 116, 172, 28, }, { 7, 149, 189, 255, 244, 168, 132, 196, 104, 220, 100, 51, 45, 117, 248, 245, }, { 130, 52, 72, 58, 19, 64, 228, 250, 98, 111, 201, 179, 146, 25, 184, 37, }, { 104, 19, 204, 2, 16, 23, 95, 59, 187, 207, 193, 212, 29, 141, 106, 69, }, { 18, 248, 8, 71, 125, 118, 158, 221, 179, 141, 155, 170, 238, 253, 85, 123, }, { 88, 189, 86, 80, 197, 29, 12, 119, 144, 46, 93, 16, 206, 236, 8, 26, }, { 143, 14, 176, 171, 17, 155, 54, 197, 77, 175, 120, 72, 217, 64, 36, 101, }, { 225, 120, 254, 50, 83, 28, 91, 22, 203, 213, 75, 101, 230, 104, 211, 242, }, { 54, 203, 24, 201, 135, 154, 97, 164, 22, 84, 110, 61, 241, 196, 255, 141, }, { 116, 2, 125, 120, 70, 242, 10, 173, 216, 57, 146, 24, 169, 154, 12, 23, }, { 255, 74, 49, 128, 138, 137, 161, 216, 2, 241, 247, 254, 76, 28, 127, 238, }, { 58, 1, 223, 60, 35, 121, 5, 183, 108, 253, 73, 12, 181, 77, 6, 234, }, { 121, 56, 133, 233, 68, 41, 216, 146, 247, 249, 35, 227, 226, 195, 144, 87, }, { 221, 28, 163, 149, 34, 245, 108, 73, 154, 157, 240, 144, 113, 128, 72, 202, }, { 84, 119, 145, 165, 97, 254, 104, 100, 234, 135, 122, 33, 138, 101, 241, 125, }, { 34, 86, 146, 21, 168, 124, 205, 145, 152, 108, 7, 110, 61, 156, 55, 36, }, { 5, 182, 195, 55, 123, 216, 43, 156, 194, 14, 139, 100, 51, 22, 50, 187, }, { 136, 155, 13, 84, 229, 51, 178, 1, 37, 115, 28, 123, 244, 53, 220, 144, }, { 6, 101, 130, 155, 82, 144, 50, 232, 61, 181, 242, 249, 34, 165, 157, 210, }, { 83, 226, 44, 90, 149, 86, 236, 160, 130, 91, 30, 18, 167, 16, 9, 136, }, { 149, 122, 131, 74, 21, 238, 81, 187, 19, 236, 217, 125, 79, 242, 223, 229, }, { 233, 244, 197, 148, 42, 31, 162, 181, 38, 27, 113, 250, 158, 39, 125, 9, }, { 236, 66, 6, 163, 81, 199, 137, 41, 228, 21, 250, 158, 173, 49, 79, 178, }, { 151, 89, 253, 130, 154, 158, 254, 227, 185, 62, 54, 42, 81, 145, 21, 171, }, { 209, 214, 100, 96, 134, 22, 8, 90, 224, 52, 215, 161, 53, 9, 177, 173, }, { 105, 227, 243, 102, 182, 47, 233, 23, 238, 166, 87, 30, 18, 93, 15, 98, }, { 106, 48, 178, 202, 159, 103, 240, 99, 17, 29, 46, 131, 3, 238, 160, 11, }, { 67, 57, 90, 213, 103, 80, 221, 37, 155, 4, 106, 239, 87, 142, 150, 189, }, { 65, 26, 36, 29, 232, 32, 114, 125, 49, 214, 133, 184, 73, 237, 92, 243, }, { 174, 139, 99, 18, 144, 175, 226, 32, 42, 120, 6, 187, 245, 111, 188, 40, }, { 12, 202, 199, 245, 164, 227, 100, 19, 122, 169, 39, 49, 68, 137, 249, 103, }, { 124, 142, 70, 222, 63, 241, 243, 14, 53, 247, 168, 135, 209, 213, 162, 236, }, { 94, 216, 212, 203, 151, 141, 62, 159, 173, 155, 175, 233, 236, 73, 149, 200, }, { 68, 172, 231, 42, 147, 248, 89, 225, 243, 216, 14, 220, 122, 251, 110, 72, }, { 37, 195, 47, 234, 92, 212, 73, 85, 240, 176, 99, 93, 16, 233, 207, 209, }, { 9, 124, 4, 194, 223, 59, 79, 143, 184, 167, 172, 85, 119, 159, 203, 220, }, { 189, 131, 84, 49, 75, 225, 202, 209, 204, 156, 11, 219, 20, 66, 140, 116, }, { 159, 213, 198, 36, 227, 157, 7, 64, 84, 240, 12, 181, 41, 222, 187, 80, }, { 46, 156, 85, 224, 12, 159, 169, 130, 226, 197, 32, 95, 121, 21, 206, 67, }, { 27, 132, 12, 133, 162, 77, 209, 82, 11, 42, 55, 255, 153, 98, 158, 167, }, { 215, 179, 230, 251, 212, 134, 58, 178, 221, 129, 37, 88, 23, 172, 44, 127, }, { 138, 184, 115, 156, 106, 67, 29, 89, 143, 161, 243, 44, 234, 86, 22, 222, }, { 13, 58, 248, 145, 2, 219, 210, 63, 47, 192, 177, 251, 75, 89, 156, 64, }, { 80, 49, 109, 246, 188, 30, 245, 212, 125, 224, 103, 143, 182, 163, 166, 225, }, { 36, 51, 16, 142, 250, 236, 255, 121, 165, 217, 245, 151, 31, 57, 170, 246, }, { 242, 112, 201, 17, 136, 82, 115, 231, 45, 49, 70, 5, 7, 69, 227, 174, }, { 56, 34, 161, 244, 172, 9, 170, 239, 198, 47, 166, 91, 171, 46, 204, 164, }, { 123, 27, 251, 33, 203, 89, 119, 202, 93, 43, 204, 180, 252, 160, 90, 25, }, { 161, 146, 229, 75, 29, 4, 159, 71, 175, 106, 88, 23, 160, 85, 234, 38, }, { 190, 80, 21, 157, 98, 169, 211, 165, 51, 39, 114, 70, 5, 241, 35, 29, }, { 167, 247, 103, 208, 79, 148, 173, 175, 146, 223, 170, 238, 130, 240, 119, 244, }, { 153, 176, 68, 191, 177, 13, 53, 168, 105, 69, 254, 76, 11, 123, 38, 130, }, { 241, 163, 136, 189, 161, 26, 106, 147, 210, 138, 63, 152, 22, 246, 76, 199, }, { 235, 215, 187, 92, 165, 111, 13, 237, 140, 201, 158, 173, 128, 68, 183, 71, }, { 57, 210, 158, 144, 10, 49, 28, 195, 147, 70, 48, 145, 164, 254, 169, 131, }, { 183, 44, 17, 95, 189, 146, 156, 42, 139, 128, 222, 19, 114, 110, 232, 193, }, { 28, 17, 177, 122, 86, 229, 85, 150, 99, 246, 83, 204, 180, 23, 102, 82, }, { 1, 240, 63, 100, 166, 56, 182, 44, 85, 105, 150, 202, 15, 208, 101, 39, }, { 239, 145, 71, 15, 120, 143, 144, 93, 27, 174, 131, 3, 188, 130, 224, 219, }, { 31, 194, 240, 214, 127, 173, 76, 226, 156, 77, 42, 81, 165, 164, 201, 59, }, { 146, 239, 62, 181, 225, 70, 213, 127, 123, 48, 189, 78, 98, 135, 39, 16, }, { 26, 116, 51, 225, 4, 117, 103, 126, 94, 67, 161, 53, 150, 178, 251, 128, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 133, 161, 245, 197, 231, 232, 96, 62, 10, 179, 173, 128, 191, 108, 64, 208, }, { 92, 251, 170, 3, 24, 253, 145, 199, 7, 73, 64, 190, 242, 42, 95, 134, }, { 237, 178, 57, 199, 247, 255, 63, 5, 177, 124, 108, 84, 162, 225, 42, 149, }, { 86, 84, 239, 109, 238, 142, 199, 60, 64, 85, 149, 118, 148, 6, 59, 51, }, { 195, 46, 108, 39, 251, 96, 150, 135, 83, 185, 76, 11, 219, 244, 228, 214, }, { 15, 25, 134, 89, 141, 171, 125, 103, 133, 18, 94, 172, 85, 58, 86, 14, }, { 232, 4, 250, 240, 140, 39, 20, 153, 115, 114, 231, 48, 145, 247, 24, 46, }, { 194, 222, 83, 67, 93, 88, 32, 171, 6, 208, 218, 193, 212, 36, 129, 241, }, { 217, 90, 95, 198, 255, 21, 241, 249, 13, 250, 237, 62, 77, 70, 31, 86, }, { 230, 237, 67, 205, 167, 180, 223, 210, 163, 9, 47, 86, 203, 29, 43, 7, }, { 182, 220, 46, 59, 27, 170, 42, 6, 222, 233, 72, 217, 125, 190, 141, 230, }, { 17, 43, 73, 235, 84, 62, 135, 169, 76, 54, 226, 55, 255, 78, 250, 18, }, { 198, 152, 175, 16, 128, 184, 189, 27, 145, 183, 199, 111, 232, 226, 214, 109, }, { 85, 135, 174, 193, 199, 198, 222, 72, 191, 238, 236, 235, 133, 181, 148, 90, }, { 148, 138, 188, 46, 179, 214, 231, 151, 70, 133, 79, 183, 64, 34, 186, 194, }, { 177, 73, 147, 196, 239, 2, 174, 194, 182, 53, 44, 234, 80, 203, 117, 19, }, { 75, 181, 97, 115, 30, 83, 36, 134, 118, 202, 80, 112, 47, 193, 56, 70, }, { 185, 197, 168, 98, 150, 1, 87, 97, 91, 251, 22, 117, 40, 132, 219, 232, }, { 79, 243, 157, 32, 195, 179, 185, 54, 225, 173, 77, 222, 19, 7, 111, 218, }, { 246, 54, 53, 66, 85, 178, 238, 87, 186, 86, 91, 171, 59, 131, 180, 50, }, { 155, 147, 58, 119, 62, 125, 154, 240, 195, 151, 17, 27, 21, 24, 236, 204, }, { 210, 5, 37, 204, 175, 94, 17, 46, 31, 143, 174, 60, 36, 186, 30, 196, }, { 127, 93, 7, 114, 22, 185, 234, 122, 202, 76, 209, 26, 192, 102, 13, 133, }, { 222, 207, 226, 57, 11, 189, 117, 61, 101, 38, 137, 13, 96, 51, 231, 163, }, { 117, 242, 66, 28, 224, 202, 188, 129, 141, 80, 4, 210, 166, 74, 105, 48, }, { 20, 157, 138, 220, 47, 230, 172, 53, 142, 56, 105, 83, 204, 88, 200, 169, }, { 32, 117, 236, 221, 39, 12, 98, 201, 50, 190, 232, 57, 35, 255, 253, 106, }, { 220, 236, 156, 241, 132, 205, 218, 101, 207, 244, 102, 90, 126, 80, 45, 237, }, { 172, 168, 29, 218, 31, 223, 77, 120, 128, 170, 233, 236, 235, 12, 118, 102, }, { 171, 61, 160, 37, 235, 119, 201, 188, 232, 118, 141, 223, 198, 121, 142, 147, }, { 248, 223, 140, 127, 126, 33, 37, 28, 106, 45, 147, 205, 97, 105, 135, 27, }, { 251, 12, 205, 211, 87, 105, 60, 104, 149, 150, 234, 80, 112, 218, 40, 114, }, { 205, 199, 213, 26, 208, 243, 93, 204, 131, 194, 132, 109, 129, 30, 215, 255, }, { 240, 83, 183, 217, 7, 34, 220, 191, 135, 227, 169, 82, 25, 38, 41, 224, }, { 238, 97, 120, 107, 222, 183, 38, 113, 78, 199, 21, 201, 179, 82, 133, 252, }, { 206, 20, 148, 182, 249, 187, 68, 184, 124, 121, 253, 240, 144, 173, 120, 150, }, { 229, 62, 2, 97, 142, 252, 198, 166, 92, 178, 86, 203, 218, 174, 132, 110, }, { 125, 126, 121, 186, 153, 201, 69, 34, 96, 158, 62, 77, 222, 5, 199, 203, }, { 184, 53, 151, 6, 48, 57, 225, 77, 14, 146, 128, 191, 39, 84, 190, 207, }, { 4, 70, 252, 83, 221, 224, 157, 176, 151, 103, 29, 174, 60, 198, 87, 156, }, { 170, 205, 159, 65, 77, 79, 127, 144, 189, 31, 27, 21, 201, 169, 235, 180, }, { 245, 229, 116, 238, 124, 250, 247, 35, 69, 237, 34, 54, 42, 48, 27, 91, }, { 199, 104, 144, 116, 38, 128, 11, 55, 196, 222, 81, 165, 231, 50, 179, 74, }, { 160, 98, 218, 47, 187, 60, 41, 107, 250, 3, 206, 221, 175, 133, 143, 1, }, { 66, 201, 101, 177, 193, 104, 107, 9, 206, 109, 252, 37, 88, 94, 243, 154, }, { 203, 162, 87, 129, 130, 99, 111, 36, 190, 119, 118, 148, 163, 187, 74, 45, }, { 113, 180, 190, 79, 61, 42, 33, 49, 26, 55, 25, 124, 154, 140, 62, 172, }, { 227, 91, 128, 250, 220, 108, 244, 78, 97, 7, 164, 50, 248, 11, 25, 188, }, { 253, 105, 79, 72, 5, 249, 14, 128, 168, 35, 24, 169, 82, 127, 181, 160, }, { 144, 204, 64, 125, 110, 54, 122, 39, 209, 226, 82, 25, 124, 228, 237, 94, }, { 2, 35, 126, 200, 143, 112, 175, 88, 170, 210, 239, 87, 30, 99, 202, 78, }, { 38, 16, 110, 70, 117, 156, 80, 33, 15, 11, 26, 192, 1, 90, 96, 184, }, { 150, 169, 194, 230, 60, 166, 72, 207, 236, 87, 160, 224, 94, 65, 112, 140, }, { 207, 228, 171, 210, 95, 131, 242, 148, 41, 16, 107, 58, 159, 125, 29, 177, }, { 137, 107, 50, 48, 67, 11, 4, 45, 112, 26, 138, 177, 251, 229, 185, 183, }, { 73, 150, 31, 187, 145, 35, 139, 222, 220, 24, 191, 39, 49, 162, 242, 8, }, { 47, 108, 106, 132, 170, 167, 31, 174, 183, 172, 182, 149, 118, 197, 171, 100, }, { 82, 18, 19, 62, 51, 110, 90, 140, 215, 50, 136, 216, 168, 192, 108, 175, }, { 180, 255, 80, 243, 148, 218, 133, 94, 116, 59, 167, 142, 99, 221, 71, 168, }, { 8, 140, 59, 166, 121, 3, 249, 163, 237, 206, 58, 159, 120, 79, 174, 251, }, { 63, 183, 28, 11, 88, 161, 46, 43, 174, 243, 194, 104, 134, 91, 52, 81, }, { 214, 67, 217, 159, 114, 190, 140, 158, 136, 232, 179, 146, 24, 124, 73, 88, }, { 35, 166, 173, 113, 14, 68, 123, 189, 205, 5, 145, 164, 50, 76, 82, 3, }, { 78, 3, 162, 68, 101, 139, 15, 26, 180, 196, 219, 20, 28, 215, 10, 253, }, { 96, 159, 247, 164, 105, 20, 166, 152, 86, 1, 251, 75, 101, 194, 196, 190, }, { 11, 95, 122, 10, 80, 75, 224, 215, 18, 117, 67, 2, 105, 252, 1, 146, }, { 196, 187, 209, 216, 15, 200, 18, 67, 59, 101, 40, 56, 246, 129, 28, 35, }, { 53, 24, 89, 101, 174, 210, 120, 208, 233, 239, 23, 160, 224, 119, 80, 228, }, { 14, 233, 185, 61, 43, 147, 203, 75, 208, 123, 200, 102, 90, 234, 51, 41, }, { 100, 217, 11, 247, 180, 244, 59, 40, 193, 102, 230, 229, 89, 4, 147, 34, }, { 59, 241, 224, 88, 133, 65, 179, 155, 57, 148, 223, 198, 186, 157, 99, 205, }, { 48, 174, 154, 82, 213, 10, 83, 76, 43, 225, 156, 196, 211, 97, 98, 95, }, { 197, 75, 238, 188, 169, 240, 164, 111, 110, 12, 190, 242, 249, 81, 121, 4, }, { 107, 192, 141, 174, 57, 95, 70, 79, 68, 116, 184, 73, 12, 62, 197, 44, }, { 145, 60, 127, 25, 200, 14, 204, 11, 132, 139, 196, 211, 115, 52, 136, 121, }, { 76, 32, 220, 140, 234, 251, 160, 66, 30, 22, 52, 67, 2, 180, 192, 179, }, { 178, 154, 210, 104, 198, 74, 183, 182, 73, 142, 85, 119, 65, 120, 218, 122, }, { 254, 186, 14, 228, 44, 177, 23, 244, 87, 152, 97, 52, 67, 204, 26, 201, }, { 231, 29, 124, 169, 1, 140, 105, 254, 246, 96, 185, 156, 196, 205, 78, 32, }, { 39, 224, 81, 34, 211, 164, 230, 13, 90, 98, 140, 10, 14, 138, 5, 159, }, { 140, 221, 241, 7, 56, 211, 47, 177, 178, 20, 1, 213, 200, 243, 139, 12, }, { 62, 71, 35, 111, 254, 153, 152, 7, 251, 154, 84, 162, 137, 139, 81, 118, }, { 41, 9, 232, 31, 248, 55, 45, 70, 138, 25, 68, 108, 84, 96, 54, 182, }, { 114, 103, 255, 227, 20, 98, 56, 69, 229, 140, 96, 225, 139, 63, 145, 197, }, { 44, 191, 43, 40, 131, 239, 6, 218, 72, 23, 207, 8, 103, 118, 4, 13, }, { 164, 36, 38, 124, 102, 220, 180, 219, 109, 100, 211, 115, 147, 67, 216, 157, }, { 142, 254, 143, 207, 183, 163, 128, 233, 24, 198, 238, 130, 214, 144, 65, 66, }, { 81, 193, 82, 146, 26, 38, 67, 248, 40, 137, 241, 69, 185, 115, 195, 198, }, { 200, 113, 22, 45, 171, 43, 118, 80, 65, 204, 15, 9, 178, 8, 229, 68, }, { 22, 190, 244, 20, 160, 150, 3, 109, 36, 234, 134, 4, 210, 59, 2, 231, }, }, { { 251, 213, 12, 122, 192, 128, 150, 25, 17, 135, 147, 27, 201, 174, 181, 252, }, { 8, 224, 140, 178, 23, 26, 206, 123, 50, 252, 171, 248, 254, 242, 10, 238, }, { 203, 208, 162, 80, 178, 220, 119, 192, 189, 202, 239, 78, 136, 199, 137, 221, }, { 65, 16, 26, 94, 99, 66, 214, 105, 196, 18, 60, 211, 147, 19, 192, 17, }, { 56, 229, 34, 152, 101, 70, 47, 162, 158, 177, 215, 173, 191, 155, 54, 207, }, { 179, 57, 106, 17, 111, 74, 231, 60, 112, 151, 41, 47, 203, 192, 239, 110, }, { 31, 183, 194, 6, 125, 86, 77, 8, 53, 120, 253, 150, 15, 254, 104, 49, }, { 136, 248, 155, 195, 164, 121, 115, 199, 148, 231, 137, 163, 197, 9, 170, 22, }, { 50, 61, 141, 231, 7, 187, 51, 183, 65, 114, 38, 107, 159, 180, 223, 251, }, { 124, 153, 142, 24, 55, 155, 247, 32, 212, 35, 114, 29, 60, 126, 99, 196, }, { 92, 159, 251, 149, 107, 243, 73, 15, 28, 85, 155, 123, 66, 48, 75, 250, }, { 2, 56, 35, 205, 117, 231, 210, 110, 237, 63, 90, 62, 222, 221, 227, 218, }, { 236, 130, 66, 206, 170, 204, 21, 106, 22, 3, 197, 117, 56, 162, 215, 35, }, { 18, 59, 248, 106, 91, 211, 141, 152, 137, 4, 207, 13, 225, 250, 247, 197, }, { 123, 205, 27, 11, 115, 227, 43, 165, 183, 156, 177, 64, 242, 85, 21, 4, }, { 95, 187, 40, 223, 197, 134, 242, 86, 102, 148, 236, 90, 243, 98, 56, 77, }, { 193, 8, 13, 47, 208, 33, 107, 213, 98, 9, 30, 136, 168, 232, 96, 233, }, { 4, 112, 70, 89, 234, 13, 103, 220, 25, 126, 180, 124, 127, 121, 5, 119, }, { 118, 65, 33, 103, 85, 102, 235, 53, 11, 224, 131, 219, 28, 81, 138, 240, }, { 108, 154, 85, 191, 25, 175, 168, 214, 176, 24, 231, 46, 3, 89, 119, 219, }, { 38, 78, 16, 25, 195, 130, 11, 157, 60, 55, 7, 36, 223, 234, 206, 147, }, { 15, 180, 25, 161, 83, 98, 18, 254, 81, 67, 104, 165, 48, 217, 124, 46, }, { 12, 144, 202, 235, 253, 23, 169, 167, 43, 130, 31, 132, 129, 139, 15, 153, }, { 224, 18, 136, 37, 87, 219, 188, 205, 61, 129, 218, 241, 185, 41, 216, 186, }, { 230, 90, 237, 177, 200, 49, 9, 127, 201, 192, 52, 179, 24, 141, 62, 23, }, { 214, 95, 67, 155, 186, 109, 232, 166, 101, 141, 72, 230, 89, 228, 2, 54, }, { 24, 227, 87, 21, 57, 46, 145, 141, 86, 199, 62, 203, 193, 213, 30, 241, }, { 142, 176, 254, 87, 59, 147, 198, 117, 96, 166, 103, 225, 100, 173, 76, 187, }, { 84, 127, 119, 39, 124, 233, 135, 116, 46, 169, 48, 131, 188, 194, 65, 20, }, { 228, 98, 206, 124, 189, 214, 219, 17, 36, 255, 110, 141, 198, 80, 221, 205, }, { 172, 142, 168, 23, 18, 28, 170, 52, 69, 239, 212, 185, 196, 62, 135, 95, }, { 105, 246, 227, 97, 40, 48, 166, 61, 62, 152, 126, 77, 19, 175, 226, 193, }, { 238, 186, 97, 3, 223, 43, 199, 4, 251, 60, 159, 75, 230, 127, 52, 249, }, { 217, 235, 90, 58, 233, 15, 250, 88, 52, 206, 32, 67, 105, 61, 126, 24, }, { 247, 69, 198, 145, 61, 151, 63, 190, 58, 5, 140, 159, 72, 37, 186, 101, }, { 185, 225, 197, 110, 13, 183, 251, 41, 175, 84, 216, 233, 235, 239, 6, 90, }, { 133, 116, 161, 175, 130, 252, 179, 87, 40, 155, 187, 56, 43, 13, 53, 226, }, { 30, 171, 50, 129, 166, 196, 36, 63, 162, 134, 208, 137, 96, 113, 248, 92, }, { 102, 66, 250, 192, 123, 82, 180, 195, 111, 219, 22, 232, 35, 118, 158, 239, }, { 48, 5, 174, 42, 114, 92, 225, 217, 172, 77, 124, 85, 65, 105, 60, 33, }, { 213, 123, 144, 209, 20, 24, 83, 255, 31, 76, 63, 199, 232, 182, 113, 129, }, { 162, 38, 65, 49, 154, 236, 209, 253, 131, 82, 145, 3, 155, 104, 107, 28, }, { 252, 129, 153, 105, 132, 248, 74, 156, 114, 56, 80, 70, 7, 133, 195, 60, }, { 96, 10, 159, 84, 228, 184, 1, 113, 155, 154, 248, 170, 130, 210, 120, 66, }, { 255, 165, 74, 35, 42, 141, 241, 197, 8, 249, 39, 103, 182, 215, 176, 139, }, { 110, 162, 118, 114, 108, 72, 122, 184, 93, 39, 189, 16, 221, 132, 148, 1, }, { 234, 202, 39, 90, 53, 38, 160, 216, 226, 66, 43, 55, 153, 6, 49, 142, }, { 131, 60, 196, 59, 29, 22, 6, 229, 220, 218, 85, 122, 138, 169, 211, 79, }, { 21, 111, 109, 121, 31, 171, 81, 29, 234, 187, 12, 80, 47, 209, 129, 5, }, { 192, 20, 253, 168, 11, 179, 2, 226, 245, 247, 51, 151, 199, 103, 240, 132, }, { 220, 135, 236, 228, 216, 144, 244, 179, 186, 78, 185, 32, 121, 203, 235, 2, }, { 180, 109, 255, 2, 43, 50, 59, 185, 19, 40, 234, 114, 5, 235, 153, 174, }, { 235, 214, 215, 221, 238, 180, 201, 239, 117, 188, 6, 40, 246, 137, 161, 227, }, { 200, 244, 113, 26, 28, 169, 204, 153, 199, 11, 152, 111, 57, 149, 250, 106, }, { 132, 104, 81, 40, 89, 110, 218, 96, 191, 101, 150, 39, 68, 130, 165, 143, }, { 229, 126, 62, 251, 102, 68, 178, 38, 179, 1, 67, 146, 169, 223, 77, 160, }, { 167, 74, 247, 239, 171, 115, 223, 22, 13, 210, 8, 96, 139, 158, 254, 6, }, { 68, 124, 172, 128, 82, 221, 216, 130, 74, 146, 165, 176, 131, 229, 85, 11, }, { 186, 197, 22, 36, 163, 194, 64, 112, 213, 149, 175, 200, 90, 189, 117, 237, }, { 98, 50, 188, 153, 145, 95, 211, 31, 118, 165, 162, 148, 92, 15, 155, 152, }, { 242, 41, 112, 79, 12, 8, 49, 85, 180, 133, 21, 252, 88, 211, 47, 127, }, { 83, 43, 226, 52, 56, 145, 91, 241, 77, 22, 243, 222, 114, 233, 55, 212, }, { 154, 195, 99, 169, 255, 170, 254, 95, 29, 227, 70, 174, 36, 243, 93, 211, }, { 16, 3, 219, 167, 46, 52, 95, 246, 100, 59, 149, 51, 63, 39, 20, 31, }, { 29, 143, 225, 203, 8, 177, 159, 102, 216, 71, 167, 168, 209, 35, 139, 235, }, { 10, 216, 175, 127, 98, 253, 28, 21, 223, 195, 241, 198, 32, 47, 233, 52, }, { 211, 51, 245, 69, 139, 242, 230, 77, 235, 13, 209, 133, 73, 18, 151, 44, }, { 253, 157, 105, 238, 95, 106, 35, 171, 229, 198, 125, 89, 104, 10, 83, 81, }, { 115, 45, 151, 185, 100, 249, 229, 222, 133, 96, 26, 184, 12, 167, 31, 234, }, { 241, 13, 163, 5, 162, 125, 138, 12, 206, 68, 98, 221, 233, 129, 92, 200, }, { 74, 212, 69, 166, 218, 45, 163, 75, 140, 47, 224, 10, 220, 179, 185, 72, }, { 161, 2, 146, 123, 52, 153, 106, 164, 249, 147, 230, 34, 42, 58, 24, 171, }, { 170, 198, 205, 131, 141, 246, 31, 134, 177, 174, 58, 251, 101, 154, 97, 242, }, { 116, 121, 2, 170, 32, 129, 57, 91, 230, 223, 217, 229, 194, 140, 105, 42, }, { 20, 115, 157, 254, 196, 57, 56, 42, 125, 69, 33, 79, 64, 94, 17, 104, }, { 57, 249, 210, 31, 190, 212, 70, 149, 9, 79, 250, 178, 208, 20, 166, 162, }, { 149, 119, 122, 8, 172, 200, 236, 161, 76, 160, 46, 11, 20, 42, 33, 253, }, { 91, 203, 110, 134, 47, 139, 149, 138, 127, 234, 88, 38, 140, 27, 61, 58, }, { 86, 71, 84, 234, 9, 14, 85, 26, 195, 150, 106, 189, 98, 31, 162, 206, }, { 138, 192, 184, 14, 209, 158, 161, 169, 121, 216, 211, 157, 27, 212, 73, 204, }, { 223, 163, 63, 174, 118, 229, 79, 234, 192, 143, 206, 1, 200, 153, 152, 181, }, { 205, 152, 199, 196, 45, 54, 194, 114, 73, 139, 1, 12, 41, 99, 111, 112, }, { 81, 19, 193, 249, 77, 118, 137, 159, 160, 41, 169, 224, 172, 52, 212, 14, }, { 52, 117, 232, 115, 152, 81, 134, 5, 181, 51, 200, 41, 62, 16, 57, 86, }, { 246, 89, 54, 22, 230, 5, 86, 137, 173, 251, 161, 128, 39, 170, 42, 8, }, { 141, 148, 45, 29, 149, 230, 125, 44, 26, 103, 16, 192, 213, 255, 63, 12, }, { 106, 210, 48, 43, 134, 69, 29, 100, 68, 89, 9, 108, 162, 253, 145, 118, }, { 243, 53, 128, 200, 215, 154, 88, 98, 35, 123, 56, 227, 55, 92, 191, 18, }, { 245, 125, 229, 92, 72, 112, 237, 208, 215, 58, 214, 161, 150, 248, 89, 191, }, { 17, 31, 43, 32, 245, 166, 54, 193, 243, 197, 184, 44, 80, 168, 132, 114, }, { 157, 151, 246, 186, 187, 210, 34, 218, 126, 92, 133, 243, 234, 216, 43, 19, }, { 117, 101, 242, 45, 251, 19, 80, 108, 113, 33, 244, 250, 173, 3, 249, 71, }, { 25, 255, 167, 146, 226, 188, 248, 186, 193, 57, 19, 212, 174, 90, 142, 156, }, { 3, 36, 211, 74, 174, 117, 187, 89, 122, 193, 119, 33, 177, 82, 115, 183, }, { 112, 9, 68, 243, 202, 140, 94, 135, 255, 161, 109, 153, 189, 245, 108, 93, }, { 114, 49, 103, 62, 191, 107, 140, 233, 18, 158, 55, 167, 99, 40, 143, 135, }, { 58, 221, 1, 85, 16, 161, 253, 204, 115, 142, 141, 147, 97, 70, 213, 21, }, { 139, 220, 72, 137, 10, 12, 200, 158, 238, 38, 254, 130, 116, 91, 217, 161, }, { 51, 33, 125, 96, 220, 41, 90, 128, 214, 140, 11, 116, 240, 59, 79, 150, }, { 198, 92, 152, 60, 148, 89, 183, 80, 1, 182, 221, 213, 102, 195, 22, 41, }, { 47, 178, 108, 44, 15, 10, 172, 209, 153, 53, 129, 195, 78, 151, 84, 16, }, { 137, 228, 107, 68, 127, 235, 26, 240, 3, 25, 164, 188, 170, 134, 58, 123, }, { 190, 181, 80, 125, 73, 207, 39, 172, 204, 235, 27, 180, 37, 196, 112, 154, }, { 206, 188, 20, 142, 131, 67, 121, 43, 51, 74, 118, 45, 152, 49, 28, 199, }, { 196, 100, 187, 241, 225, 190, 101, 62, 236, 137, 135, 235, 184, 30, 245, 243, }, { 250, 201, 252, 253, 27, 18, 255, 46, 134, 121, 190, 4, 166, 33, 37, 145, }, { 59, 193, 241, 210, 203, 51, 148, 251, 228, 112, 160, 140, 14, 201, 69, 120, }, { 221, 155, 28, 99, 3, 2, 157, 132, 45, 176, 148, 63, 22, 68, 123, 111, }, { 119, 93, 209, 224, 142, 244, 130, 2, 156, 30, 174, 196, 115, 222, 26, 157, }, { 197, 120, 75, 118, 58, 44, 12, 9, 123, 119, 170, 244, 215, 145, 101, 158, }, { 22, 75, 190, 51, 177, 222, 234, 68, 144, 122, 123, 113, 158, 131, 242, 178, }, { 164, 110, 36, 165, 5, 6, 100, 79, 119, 19, 127, 65, 58, 204, 141, 177, }, { 173, 146, 88, 144, 201, 142, 195, 3, 210, 17, 249, 166, 171, 177, 23, 50, }, { 216, 247, 170, 189, 50, 157, 147, 111, 163, 48, 13, 92, 6, 178, 238, 117, }, { 183, 73, 44, 72, 133, 71, 128, 224, 105, 233, 157, 83, 180, 185, 234, 25, }, { 146, 35, 239, 27, 232, 176, 48, 36, 47, 31, 237, 86, 218, 1, 87, 61, }, { 73, 240, 150, 236, 116, 88, 24, 18, 246, 238, 151, 43, 109, 225, 202, 255, }, { 100, 122, 217, 13, 14, 181, 102, 173, 130, 228, 76, 214, 253, 171, 125, 53, }, { 145, 7, 60, 81, 70, 197, 139, 125, 85, 222, 154, 119, 107, 83, 36, 138, }, { 156, 139, 6, 61, 96, 64, 75, 237, 233, 162, 168, 236, 133, 87, 187, 126, }, { 1, 28, 240, 135, 219, 146, 105, 55, 151, 254, 45, 31, 111, 143, 144, 109, }, { 232, 242, 4, 151, 64, 193, 114, 182, 15, 125, 113, 9, 71, 219, 210, 84, }, { 160, 30, 98, 252, 239, 11, 3, 147, 110, 109, 203, 61, 69, 181, 136, 198, }, { 187, 217, 230, 163, 120, 80, 41, 71, 66, 107, 130, 215, 53, 50, 229, 128, }, { 181, 113, 15, 133, 240, 160, 82, 142, 132, 214, 199, 109, 106, 100, 9, 195, }, { 41, 250, 9, 184, 144, 224, 25, 99, 109, 116, 111, 129, 239, 51, 178, 189, }, { 227, 54, 91, 111, 249, 174, 7, 148, 71, 64, 173, 208, 8, 123, 171, 13, }, { 90, 215, 158, 1, 244, 25, 252, 189, 232, 20, 117, 57, 227, 148, 173, 87, }, { 23, 87, 78, 180, 106, 76, 131, 115, 7, 132, 86, 110, 241, 12, 98, 223, }, { 99, 46, 76, 30, 74, 205, 186, 40, 225, 91, 143, 139, 51, 128, 11, 245, }, { 37, 106, 195, 83, 109, 247, 176, 196, 70, 246, 112, 5, 110, 184, 189, 36, }, { 125, 133, 126, 159, 236, 9, 158, 23, 67, 221, 95, 2, 83, 241, 243, 169, }, { 32, 6, 117, 141, 92, 104, 190, 47, 200, 118, 233, 102, 126, 78, 40, 62, }, { 19, 39, 8, 237, 128, 65, 228, 175, 30, 250, 226, 18, 142, 117, 103, 168, }, { 14, 168, 233, 38, 136, 240, 123, 201, 198, 189, 69, 186, 95, 86, 236, 67, }, { 159, 175, 213, 119, 206, 53, 240, 180, 147, 99, 223, 205, 52, 5, 200, 201, }, { 225, 14, 120, 162, 140, 73, 213, 250, 170, 127, 247, 238, 214, 166, 72, 215, }, { 85, 99, 135, 160, 167, 123, 238, 67, 185, 87, 29, 156, 211, 77, 209, 121, }, { 143, 172, 14, 208, 224, 1, 175, 66, 247, 88, 74, 254, 11, 34, 220, 214, }, { 209, 11, 214, 136, 254, 21, 52, 35, 6, 50, 139, 187, 151, 207, 116, 246, }, { 64, 12, 234, 217, 184, 208, 191, 94, 83, 236, 17, 204, 252, 156, 80, 124, }, { 130, 32, 52, 188, 198, 132, 111, 210, 75, 36, 120, 101, 229, 38, 67, 34, }, { 82, 55, 18, 179, 227, 3, 50, 198, 218, 232, 222, 193, 29, 102, 167, 185, }, { 178, 37, 154, 150, 180, 216, 142, 11, 231, 105, 4, 48, 164, 79, 127, 3, }, { 89, 243, 77, 75, 90, 108, 71, 228, 146, 213, 2, 24, 82, 198, 222, 224, }, { 63, 177, 183, 139, 33, 62, 243, 39, 253, 14, 20, 240, 113, 176, 64, 15, }, { 212, 103, 96, 86, 207, 138, 58, 200, 136, 178, 18, 216, 135, 57, 225, 236, }, { 121, 245, 56, 198, 6, 4, 249, 203, 90, 163, 235, 126, 44, 136, 246, 222, }, { 231, 70, 29, 54, 19, 163, 96, 72, 94, 62, 25, 172, 119, 2, 174, 122, }, { 239, 166, 145, 132, 4, 185, 174, 51, 108, 194, 178, 84, 137, 240, 164, 148, }, { 202, 204, 82, 215, 105, 78, 30, 247, 42, 52, 194, 81, 231, 72, 25, 176, }, { 71, 88, 127, 202, 252, 168, 99, 219, 48, 83, 210, 145, 50, 183, 38, 188, }, { 165, 114, 212, 34, 222, 148, 13, 120, 224, 237, 82, 94, 85, 67, 29, 220, }, { 175, 170, 123, 93, 188, 105, 17, 109, 63, 46, 163, 152, 117, 108, 244, 232, }, { 168, 254, 238, 78, 248, 17, 205, 232, 92, 145, 96, 197, 187, 71, 130, 40, }, { 147, 63, 31, 156, 51, 34, 89, 19, 184, 225, 192, 73, 181, 142, 199, 80, }, { 237, 158, 178, 73, 113, 94, 124, 93, 129, 253, 232, 106, 87, 45, 71, 78, }, { 195, 48, 46, 226, 165, 198, 185, 187, 143, 54, 68, 182, 118, 53, 131, 51, }, { 42, 222, 218, 242, 62, 149, 162, 58, 23, 181, 24, 160, 94, 97, 193, 10, }, { 150, 83, 169, 66, 2, 189, 87, 248, 54, 97, 89, 42, 165, 120, 82, 74, }, { 44, 150, 191, 102, 161, 127, 23, 136, 227, 244, 246, 226, 255, 197, 39, 167, }, { 93, 131, 11, 18, 176, 97, 32, 56, 139, 171, 182, 100, 45, 191, 219, 151, }, { 226, 42, 171, 232, 34, 60, 110, 163, 208, 190, 128, 207, 103, 244, 59, 96, }, { 127, 189, 93, 82, 153, 238, 76, 121, 174, 226, 5, 60, 141, 44, 16, 115, }, { 126, 161, 173, 213, 66, 124, 37, 78, 57, 28, 40, 35, 226, 163, 128, 30, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 62, 173, 71, 12, 250, 172, 154, 16, 106, 240, 57, 239, 30, 63, 208, 98, }, { 199, 64, 104, 187, 79, 203, 222, 103, 150, 72, 240, 202, 9, 76, 134, 68, }, { 5, 108, 182, 222, 49, 159, 14, 235, 142, 128, 153, 99, 16, 246, 149, 26, }, { 60, 149, 100, 193, 143, 75, 72, 126, 135, 207, 99, 209, 192, 226, 51, 184, }, { 135, 76, 130, 98, 247, 27, 97, 57, 197, 164, 225, 6, 245, 208, 214, 56, }, { 103, 94, 10, 71, 160, 192, 221, 244, 248, 37, 59, 247, 76, 249, 14, 130, }, { 153, 231, 176, 227, 81, 223, 69, 6, 103, 34, 49, 143, 149, 161, 46, 100, }, { 171, 218, 61, 4, 86, 100, 118, 177, 38, 80, 23, 228, 10, 21, 241, 159, }, { 249, 237, 47, 183, 181, 103, 68, 119, 252, 184, 201, 37, 23, 115, 86, 38, }, { 210, 47, 5, 194, 80, 96, 143, 122, 124, 243, 252, 154, 38, 157, 7, 65, }, { 6, 72, 101, 148, 159, 234, 181, 178, 244, 65, 238, 66, 161, 164, 230, 173, }, { 169, 226, 30, 201, 35, 131, 164, 223, 203, 111, 77, 218, 212, 200, 18, 69, }, { 27, 199, 132, 95, 151, 91, 42, 212, 44, 6, 73, 234, 112, 135, 109, 70, }, { 72, 236, 102, 107, 175, 202, 113, 37, 97, 16, 186, 52, 2, 110, 90, 146, }, { 151, 79, 89, 197, 217, 47, 62, 207, 161, 159, 116, 53, 202, 247, 194, 39, }, { 194, 44, 222, 101, 126, 84, 208, 140, 24, 200, 105, 169, 25, 186, 19, 94, }, { 134, 80, 114, 229, 44, 137, 8, 14, 82, 90, 204, 25, 154, 95, 70, 85, }, { 97, 22, 111, 211, 63, 42, 104, 70, 12, 100, 213, 181, 237, 93, 232, 47, }, { 54, 77, 203, 190, 237, 182, 84, 107, 88, 12, 146, 23, 224, 205, 218, 140, }, { 87, 91, 164, 109, 210, 156, 60, 45, 84, 104, 71, 162, 13, 144, 50, 163, }, { 240, 17, 83, 130, 121, 239, 227, 59, 89, 186, 79, 194, 134, 14, 204, 165, }, { 46, 174, 156, 171, 212, 152, 197, 230, 14, 203, 172, 220, 33, 24, 196, 125, }, { 122, 209, 235, 140, 168, 113, 66, 146, 32, 98, 156, 95, 157, 218, 133, 105, }, { 61, 137, 148, 70, 84, 217, 33, 73, 16, 49, 78, 206, 175, 109, 163, 213, }, { 129, 4, 231, 246, 104, 241, 212, 139, 49, 229, 15, 68, 84, 116, 48, 149, }, { 53, 105, 24, 244, 67, 195, 239, 50, 34, 205, 229, 54, 81, 159, 169, 59, }, { 201, 232, 129, 157, 199, 59, 165, 174, 80, 245, 181, 112, 86, 26, 106, 7, }, { 101, 102, 41, 138, 213, 39, 15, 154, 21, 26, 97, 201, 146, 36, 237, 88, }, { 120, 233, 200, 65, 221, 150, 144, 252, 205, 93, 198, 97, 67, 7, 102, 179, }, { 188, 141, 115, 176, 60, 40, 245, 194, 33, 212, 65, 138, 251, 25, 147, 64, }, { 28, 147, 17, 76, 211, 35, 246, 81, 79, 185, 138, 183, 190, 172, 27, 134, }, { 104, 234, 19, 230, 243, 162, 207, 10, 169, 102, 83, 82, 124, 32, 114, 172, }, { 204, 132, 55, 67, 246, 164, 171, 69, 222, 117, 44, 19, 70, 236, 255, 29, }, { 191, 169, 160, 250, 146, 93, 78, 155, 91, 21, 54, 171, 74, 75, 224, 247, }, { 113, 21, 180, 116, 17, 30, 55, 176, 104, 95, 64, 134, 210, 122, 252, 48, }, { 184, 253, 53, 233, 214, 37, 146, 30, 56, 170, 245, 246, 132, 96, 150, 55, }, { 166, 86, 7, 104, 112, 225, 182, 33, 154, 44, 37, 127, 228, 17, 110, 107, }, { 34, 62, 86, 64, 41, 143, 108, 65, 37, 73, 179, 88, 160, 147, 203, 228, }, { 77, 128, 208, 181, 158, 85, 127, 206, 239, 144, 35, 87, 18, 152, 207, 136, }, { 176, 29, 185, 91, 193, 63, 92, 101, 10, 86, 94, 14, 122, 146, 156, 217, }, { 144, 27, 204, 214, 157, 87, 226, 74, 194, 32, 183, 104, 4, 220, 180, 231, }, { 35, 34, 166, 199, 242, 29, 5, 118, 178, 183, 158, 71, 207, 28, 91, 137, }, { 55, 81, 59, 57, 54, 36, 61, 92, 207, 242, 191, 8, 143, 66, 74, 225, }, { 107, 206, 192, 172, 93, 215, 116, 83, 211, 167, 36, 115, 205, 114, 1, 27, }, { 9, 252, 124, 53, 204, 136, 167, 76, 165, 2, 134, 231, 145, 125, 154, 131, }, { 36, 118, 51, 212, 182, 101, 217, 243, 209, 8, 93, 26, 1, 55, 45, 73, }, { 49, 25, 94, 173, 169, 206, 136, 238, 59, 179, 81, 74, 46, 230, 172, 76, }, { 78, 164, 3, 255, 48, 32, 196, 151, 149, 81, 84, 118, 163, 202, 188, 63, }, { 128, 24, 23, 113, 179, 99, 189, 188, 166, 27, 34, 91, 59, 251, 160, 248, }, { 39, 82, 224, 158, 24, 16, 98, 170, 171, 201, 42, 59, 176, 101, 94, 254, }, { 88, 239, 189, 204, 129, 254, 46, 211, 5, 43, 47, 7, 61, 73, 78, 141, }, { 33, 26, 133, 10, 135, 250, 215, 24, 95, 136, 196, 121, 17, 193, 184, 83, }, { 207, 160, 228, 9, 88, 209, 16, 28, 164, 180, 91, 50, 247, 190, 140, 170, }, { 148, 107, 138, 143, 119, 90, 133, 150, 219, 94, 3, 20, 123, 165, 177, 144, }, { 45, 138, 79, 225, 122, 237, 126, 191, 116, 10, 219, 253, 144, 74, 183, 202, }, { 222, 191, 207, 41, 173, 119, 38, 221, 87, 113, 227, 30, 167, 22, 8, 216, }, { 174, 182, 139, 218, 103, 251, 120, 90, 168, 208, 142, 135, 26, 227, 100, 133, }, { 140, 136, 221, 154, 78, 116, 20, 27, 141, 153, 61, 223, 186, 112, 175, 97, }, { 94, 167, 216, 88, 30, 20, 155, 97, 241, 106, 193, 69, 156, 237, 168, 32, }, { 163, 58, 177, 182, 65, 126, 184, 202, 20, 172, 188, 28, 244, 231, 251, 113, }, { 43, 194, 42, 117, 229, 7, 203, 13, 128, 75, 53, 191, 49, 238, 81, 103, }, { 158, 179, 37, 240, 21, 167, 153, 131, 4, 157, 242, 210, 91, 138, 88, 164, }, { 189, 145, 131, 55, 231, 186, 156, 245, 182, 42, 108, 149, 148, 150, 3, 45, }, { 26, 219, 116, 216, 76, 201, 67, 227, 187, 248, 100, 245, 31, 8, 253, 43, }, { 152, 251, 64, 100, 138, 77, 44, 49, 240, 220, 28, 144, 250, 46, 190, 9, }, { 215, 67, 179, 28, 97, 255, 129, 145, 242, 115, 101, 249, 54, 107, 146, 91, }, { 67, 40, 57, 147, 22, 165, 4, 7, 41, 45, 102, 237, 77, 206, 35, 203, }, { 208, 23, 38, 15, 37, 135, 93, 20, 145, 204, 166, 164, 248, 64, 228, 155, }, { 75, 200, 181, 33, 1, 191, 202, 124, 27, 209, 205, 21, 179, 60, 41, 37, }, { 40, 230, 249, 63, 75, 114, 112, 84, 250, 138, 66, 158, 128, 188, 34, 208, }, { 155, 223, 147, 46, 36, 56, 151, 104, 138, 29, 107, 177, 75, 124, 205, 190, }, { 76, 156, 32, 50, 69, 199, 22, 249, 120, 110, 14, 72, 125, 23, 95, 229, }, { 111, 190, 134, 245, 183, 218, 19, 143, 202, 217, 144, 15, 178, 11, 4, 108, }, { 79, 184, 243, 120, 235, 178, 173, 160, 2, 175, 121, 105, 204, 69, 44, 82, }, { 11, 196, 95, 248, 185, 111, 117, 34, 72, 61, 220, 217, 79, 160, 121, 89, }, { 66, 52, 201, 20, 205, 55, 109, 48, 190, 211, 75, 242, 34, 65, 179, 166, }, { 182, 85, 220, 207, 94, 213, 233, 215, 254, 23, 176, 76, 219, 54, 122, 116, }, { 244, 97, 21, 219, 147, 226, 132, 231, 64, 196, 251, 190, 249, 119, 201, 210, }, { 254, 185, 186, 164, 241, 31, 152, 242, 159, 7, 10, 120, 217, 88, 32, 230, }, { 13, 140, 58, 108, 38, 133, 192, 144, 188, 124, 50, 155, 238, 4, 159, 244, }, { 177, 1, 73, 220, 26, 173, 53, 82, 157, 168, 115, 17, 21, 29, 12, 180, }, { 7, 84, 149, 19, 68, 120, 220, 133, 99, 191, 195, 93, 206, 43, 118, 192, }, { 70, 68, 143, 77, 39, 58, 10, 236, 167, 173, 255, 142, 93, 56, 182, 209, }, { 69, 96, 92, 7, 137, 79, 177, 181, 221, 108, 136, 175, 236, 106, 197, 102, }, { 218, 207, 137, 112, 71, 122, 65, 1, 78, 15, 87, 98, 216, 111, 13, 175, }, { 219, 211, 121, 247, 156, 232, 40, 54, 217, 241, 122, 125, 183, 224, 157, 194, }, { 233, 238, 244, 16, 155, 83, 27, 129, 152, 131, 92, 22, 40, 84, 66, 57, }, { 248, 241, 223, 48, 110, 245, 45, 64, 107, 70, 228, 58, 120, 252, 198, 75, }, { 80, 15, 49, 126, 150, 228, 224, 168, 55, 215, 132, 255, 195, 187, 68, 99, }, { 109, 134, 165, 56, 194, 61, 193, 225, 39, 230, 202, 49, 108, 214, 231, 182, }, }, }; const grasshopper_w128_t grasshopper_pil_dec128[GRASSHOPPER_MAX_BIT_PARTS][256] = { { { 165, 204, 14, 134, 194, 79, 186, 89, 59, 227, 239, 121, 130, 83, 17, 240, }, { 45, 3, 150, 148, 149, 108, 42, 182, 245, 156, 186, 231, 55, 131, 145, 189, }, { 50, 23, 177, 171, 166, 249, 17, 210, 3, 195, 142, 201, 144, 88, 146, 173, }, { 143, 165, 130, 68, 39, 150, 101, 191, 96, 218, 110, 89, 40, 81, 104, 132, }, { 14, 212, 52, 172, 224, 169, 41, 160, 159, 137, 118, 77, 249, 193, 19, 81, }, { 48, 252, 122, 210, 134, 64, 95, 104, 176, 55, 30, 17, 116, 180, 21, 113, }, { 56, 214, 208, 245, 6, 225, 164, 197, 57, 97, 27, 247, 98, 130, 76, 135, }, { 192, 118, 43, 206, 93, 195, 191, 99, 133, 220, 120, 68, 19, 149, 84, 7, }, { 84, 210, 219, 71, 9, 113, 125, 15, 182, 114, 193, 64, 151, 4, 242, 232, }, { 230, 32, 88, 217, 120, 10, 7, 159, 242, 152, 31, 241, 164, 186, 185, 254, }, { 158, 101, 145, 215, 244, 170, 119, 123, 9, 12, 44, 58, 118, 75, 120, 197, }, { 57, 66, 84, 40, 22, 92, 131, 152, 129, 27, 83, 155, 16, 244, 238, 233, }, { 85, 70, 95, 154, 25, 204, 90, 82, 14, 8, 137, 44, 229, 114, 80, 134, }, { 126, 187, 87, 133, 236, 168, 162, 233, 237, 75, 64, 96, 61, 6, 139, 156, }, { 82, 44, 69, 204, 105, 121, 175, 2, 160, 173, 178, 235, 120, 243, 184, 79, }, { 145, 37, 33, 166, 4, 190, 121, 134, 46, 255, 18, 27, 253, 252, 201, 250, }, { 100, 46, 161, 149, 143, 49, 34, 103, 6, 69, 223, 81, 227, 176, 231, 153, }, { 3, 127, 79, 164, 48, 4, 105, 231, 11, 142, 216, 180, 150, 154, 37, 178, }, { 87, 173, 148, 227, 57, 117, 20, 232, 189, 252, 25, 244, 1, 158, 215, 90, }, { 90, 6, 239, 235, 233, 216, 84, 175, 41, 251, 183, 13, 110, 197, 225, 185, }, { 28, 107, 104, 155, 3, 145, 82, 131, 253, 209, 236, 154, 49, 65, 38, 162, }, { 96, 59, 244, 103, 207, 128, 190, 208, 163, 110, 60, 34, 232, 171, 42, 226, }, { 7, 106, 26, 86, 112, 181, 245, 80, 174, 165, 59, 199, 157, 129, 232, 201, }, { 24, 126, 61, 105, 67, 32, 206, 52, 88, 250, 15, 233, 58, 90, 235, 217, }, { 33, 60, 105, 65, 85, 124, 77, 172, 217, 225, 92, 114, 42, 174, 5, 48, }, { 114, 132, 168, 80, 44, 184, 197, 243, 193, 54, 166, 245, 32, 43, 31, 17, }, { 168, 103, 117, 142, 18, 226, 250, 30, 175, 228, 65, 128, 237, 8, 39, 19, }, { 209, 182, 56, 93, 142, 255, 173, 167, 236, 10, 58, 39, 77, 143, 68, 70, }, { 41, 22, 195, 102, 213, 221, 182, 1, 80, 183, 89, 148, 60, 152, 92, 198, }, { 198, 136, 181, 69, 61, 203, 109, 110, 147, 3, 11, 239, 252, 98, 30, 160, }, { 164, 88, 138, 91, 210, 242, 157, 4, 131, 153, 167, 21, 240, 37, 179, 158, }, { 63, 188, 202, 163, 118, 84, 81, 149, 151, 196, 32, 48, 255, 3, 164, 78, }, { 224, 222, 198, 82, 24, 2, 213, 146, 228, 71, 108, 90, 75, 77, 243, 89, }, { 39, 194, 247, 202, 53, 116, 159, 161, 207, 62, 47, 217, 197, 89, 79, 151, }, { 141, 78, 73, 61, 7, 47, 43, 5, 211, 46, 254, 129, 204, 189, 239, 88, }, { 12, 63, 255, 213, 192, 16, 103, 26, 44, 125, 230, 149, 29, 45, 148, 141, }, { 130, 14, 249, 76, 247, 59, 37, 248, 244, 221, 192, 160, 71, 10, 94, 103, }, { 234, 31, 167, 12, 184, 26, 96, 133, 222, 229, 249, 100, 185, 151, 45, 115, }, { 174, 153, 235, 5, 114, 234, 40, 19, 185, 59, 50, 43, 2, 255, 109, 180, }, { 180, 12, 29, 21, 17, 115, 168, 157, 82, 53, 173, 26, 220, 73, 1, 177, }, { 154, 112, 196, 37, 180, 27, 235, 204, 172, 39, 207, 73, 125, 80, 181, 190, }, { 99, 68, 187, 195, 255, 132, 215, 55, 168, 224, 228, 150, 126, 49, 15, 80, }, { 73, 45, 55, 1, 26, 93, 8, 209, 243, 217, 101, 182, 212, 51, 118, 36, }, { 229, 95, 23, 125, 72, 14, 110, 120, 249, 22, 199, 69, 50, 32, 156, 76, }, { 66, 120, 210, 130, 170, 248, 154, 155, 113, 1, 184, 228, 84, 159, 10, 96, }, { 228, 203, 147, 160, 88, 179, 73, 37, 65, 108, 143, 41, 64, 86, 62, 34, }, { 21, 213, 70, 97, 147, 141, 142, 115, 204, 253, 161, 16, 85, 1, 221, 58, }, { 183, 115, 82, 177, 33, 119, 193, 122, 89, 187, 117, 174, 74, 211, 36, 3, }, { 200, 92, 129, 233, 221, 98, 68, 206, 12, 138, 125, 162, 5, 163, 13, 241, }, { 6, 254, 158, 139, 96, 8, 210, 13, 22, 223, 115, 171, 239, 247, 74, 167, }, { 112, 111, 99, 41, 12, 1, 139, 73, 114, 194, 54, 45, 196, 199, 152, 205, }, { 157, 26, 222, 115, 196, 174, 30, 156, 2, 130, 244, 142, 224, 209, 93, 119, }, { 65, 7, 157, 38, 154, 252, 243, 124, 122, 143, 96, 80, 194, 5, 47, 210, }, { 117, 238, 178, 6, 92, 13, 48, 163, 111, 147, 157, 50, 189, 170, 247, 216, }, { 25, 234, 185, 180, 83, 157, 233, 105, 224, 128, 71, 133, 72, 44, 73, 183, }, { 201, 200, 5, 52, 205, 223, 99, 147, 180, 240, 53, 206, 119, 213, 175, 159, }, { 170, 140, 190, 247, 50, 91, 180, 164, 28, 16, 209, 88, 9, 228, 160, 207, }, { 252, 181, 174, 201, 27, 147, 135, 17, 25, 150, 128, 192, 122, 12, 213, 251, }, { 77, 56, 98, 243, 90, 236, 148, 102, 86, 242, 134, 197, 223, 40, 187, 95, }, { 191, 89, 248, 150, 161, 214, 58, 215, 208, 237, 112, 72, 92, 229, 125, 245, }, { 42, 105, 140, 194, 229, 217, 223, 230, 91, 57, 129, 32, 170, 2, 121, 116, }, { 115, 16, 44, 141, 60, 5, 226, 174, 121, 76, 238, 153, 82, 93, 189, 127, }, { 132, 240, 103, 199, 151, 51, 247, 245, 226, 2, 179, 11, 168, 253, 20, 192, }, { 213, 163, 109, 175, 206, 78, 49, 16, 73, 33, 217, 84, 70, 148, 137, 61, }, { 195, 9, 100, 106, 109, 199, 214, 132, 142, 82, 160, 240, 133, 15, 113, 181, }, { 175, 13, 111, 216, 98, 87, 15, 78, 1, 65, 122, 71, 112, 137, 207, 218, }, { 43, 253, 8, 31, 245, 100, 248, 187, 227, 67, 201, 76, 216, 116, 219, 26, }, { 134, 27, 172, 190, 183, 138, 185, 79, 81, 246, 35, 211, 76, 17, 147, 28, }, { 167, 39, 197, 255, 226, 246, 244, 227, 136, 23, 127, 161, 102, 191, 150, 44, }, { 177, 141, 204, 58, 65, 127, 19, 119, 79, 100, 6, 5, 165, 36, 110, 164, }, { 178, 242, 131, 158, 113, 123, 122, 144, 68, 234, 222, 177, 51, 190, 75, 22, }, { 91, 146, 107, 54, 249, 101, 115, 242, 145, 129, 255, 97, 28, 179, 67, 215, }, { 70, 109, 135, 112, 234, 73, 6, 44, 212, 42, 91, 151, 95, 132, 199, 27, }, { 211, 93, 243, 36, 174, 70, 227, 29, 95, 254, 170, 255, 169, 99, 195, 154, }, { 159, 241, 21, 10, 228, 23, 80, 38, 177, 118, 100, 86, 4, 61, 218, 171, }, { 253, 33, 42, 20, 11, 46, 160, 76, 161, 236, 200, 172, 8, 122, 119, 149, }, { 212, 55, 233, 114, 222, 243, 22, 77, 241, 91, 145, 56, 52, 226, 43, 83, }, { 15, 64, 176, 113, 240, 20, 14, 253, 39, 243, 62, 33, 139, 183, 177, 63, }, { 156, 142, 90, 174, 212, 19, 57, 193, 186, 248, 188, 226, 146, 167, 255, 25, }, { 47, 232, 93, 237, 181, 213, 100, 12, 70, 104, 42, 63, 211, 111, 22, 97, }, { 155, 228, 64, 248, 164, 166, 204, 145, 20, 93, 135, 37, 15, 38, 23, 208, }, { 67, 236, 86, 95, 186, 69, 189, 198, 201, 123, 240, 136, 38, 233, 168, 14, }, { 239, 158, 118, 35, 232, 22, 219, 111, 195, 180, 82, 123, 192, 250, 66, 102, }, { 217, 156, 146, 122, 14, 94, 86, 10, 101, 92, 63, 193, 91, 185, 29, 176, }, { 121, 209, 77, 211, 156, 29, 87, 185, 67, 238, 123, 167, 160, 135, 99, 85, }, { 182, 231, 214, 108, 49, 202, 230, 39, 225, 193, 61, 194, 56, 165, 134, 109, }, { 83, 184, 193, 17, 121, 196, 136, 95, 24, 215, 250, 135, 10, 133, 26, 33, }, { 127, 47, 211, 88, 252, 21, 133, 180, 85, 49, 8, 12, 79, 112, 41, 242, }, { 193, 226, 175, 19, 77, 126, 152, 62, 61, 166, 48, 40, 97, 227, 246, 105, }, { 240, 138, 81, 28, 219, 131, 224, 11, 53, 235, 102, 85, 103, 33, 65, 118, }, { 35, 215, 162, 56, 117, 197, 3, 22, 106, 21, 204, 170, 206, 66, 130, 236, }, { 231, 180, 220, 4, 104, 183, 32, 194, 74, 226, 87, 157, 214, 204, 27, 144, }, { 37, 41, 60, 179, 21, 205, 209, 27, 124, 202, 191, 1, 33, 181, 200, 75, }, { 94, 19, 186, 25, 169, 105, 200, 24, 140, 208, 84, 126, 101, 222, 44, 194, }, { 181, 152, 153, 200, 1, 206, 143, 192, 234, 79, 229, 118, 174, 63, 163, 223, }, { 30, 128, 163, 226, 35, 40, 28, 57, 78, 37, 124, 66, 213, 173, 161, 126, }, { 162, 166, 20, 208, 178, 250, 79, 9, 149, 70, 212, 190, 31, 210, 249, 57, }, { 223, 98, 12, 241, 110, 86, 132, 7, 115, 131, 76, 106, 180, 78, 87, 23, }, { 166, 179, 65, 34, 242, 75, 211, 190, 48, 109, 55, 205, 20, 201, 52, 66, }, { 254, 94, 101, 176, 59, 42, 201, 171, 170, 98, 16, 24, 158, 224, 82, 39, }, { 172, 114, 32, 124, 82, 83, 102, 169, 10, 207, 162, 243, 230, 19, 234, 104, }, { 34, 67, 38, 229, 101, 120, 36, 75, 210, 111, 132, 198, 188, 52, 32, 130, }, { 249, 52, 127, 230, 75, 159, 60, 251, 4, 199, 43, 223, 3, 97, 186, 238, }, { 226, 53, 13, 43, 56, 187, 155, 40, 87, 179, 252, 130, 175, 161, 116, 133, }, { 74, 82, 120, 165, 42, 89, 97, 54, 248, 87, 189, 2, 66, 169, 83, 150, }, { 188, 38, 183, 50, 145, 210, 83, 48, 219, 99, 168, 252, 202, 127, 88, 71, }, { 53, 125, 171, 253, 214, 76, 228, 130, 173, 102, 181, 14, 13, 217, 122, 100, }, { 202, 183, 74, 144, 253, 219, 10, 116, 191, 126, 237, 122, 225, 79, 138, 45, }, { 238, 10, 242, 254, 248, 171, 252, 50, 123, 206, 26, 23, 178, 140, 224, 8, }, { 120, 69, 201, 14, 140, 160, 112, 228, 251, 148, 51, 203, 210, 241, 193, 59, }, { 5, 129, 209, 47, 80, 12, 187, 234, 29, 81, 171, 31, 121, 109, 111, 21, }, { 107, 110, 17, 228, 127, 37, 44, 154, 33, 182, 225, 112, 104, 7, 86, 166, }, { 81, 83, 10, 104, 89, 125, 198, 229, 171, 35, 106, 95, 238, 105, 157, 253, }, { 225, 74, 66, 143, 8, 191, 242, 207, 92, 61, 36, 54, 57, 59, 81, 55, }, { 89, 121, 160, 79, 217, 220, 61, 72, 34, 117, 111, 185, 248, 95, 196, 11, }, { 163, 50, 144, 13, 162, 71, 104, 84, 45, 60, 156, 210, 109, 164, 91, 87, }, { 242, 97, 154, 101, 251, 58, 174, 177, 134, 31, 246, 141, 131, 205, 198, 170, }, { 113, 251, 231, 244, 28, 188, 172, 20, 202, 184, 126, 65, 182, 177, 58, 163, }, { 86, 57, 16, 62, 41, 200, 51, 181, 5, 134, 81, 152, 115, 232, 117, 52, }, { 17, 192, 19, 147, 211, 60, 18, 196, 105, 214, 66, 99, 94, 26, 16, 65, }, { 106, 250, 149, 57, 111, 152, 11, 199, 153, 204, 169, 28, 26, 113, 244, 200, }, { 137, 91, 28, 207, 71, 158, 183, 178, 118, 5, 29, 242, 199, 166, 34, 35, }, { 148, 164, 240, 137, 84, 178, 194, 108, 51, 174, 185, 4, 132, 145, 166, 239, }, { 101, 186, 37, 72, 159, 140, 5, 58, 190, 63, 151, 61, 145, 198, 69, 247, }, { 140, 218, 205, 224, 23, 146, 12, 88, 107, 84, 182, 237, 190, 203, 77, 54, }, { 187, 76, 173, 100, 225, 103, 166, 96, 117, 198, 147, 59, 87, 254, 176, 142, }, { 119, 5, 121, 127, 124, 180, 126, 25, 220, 103, 13, 234, 89, 70, 112, 4, }, { 60, 195, 133, 7, 70, 80, 56, 114, 156, 74, 248, 132, 105, 153, 129, 252, }, { 123, 58, 134, 170, 188, 164, 25, 3, 240, 26, 235, 127, 68, 107, 228, 137, }, { 40, 130, 71, 187, 197, 96, 145, 92, 232, 205, 17, 248, 78, 238, 254, 168, }, { 171, 24, 58, 42, 34, 230, 147, 249, 164, 106, 153, 52, 123, 146, 2, 161, }, { 210, 201, 119, 249, 190, 251, 196, 64, 231, 132, 226, 147, 219, 21, 97, 244, }, { 49, 104, 254, 15, 150, 253, 120, 53, 8, 77, 86, 125, 6, 194, 183, 31, }, { 222, 246, 136, 44, 126, 235, 163, 90, 203, 249, 4, 6, 198, 56, 245, 121, }, { 196, 99, 126, 60, 29, 114, 35, 212, 32, 247, 155, 55, 24, 142, 153, 124, }, { 95, 135, 62, 196, 185, 212, 239, 69, 52, 170, 28, 18, 23, 168, 142, 172, }, { 204, 73, 212, 27, 157, 211, 216, 121, 169, 161, 158, 209, 14, 184, 192, 138, }, { 207, 54, 155, 191, 173, 215, 177, 158, 162, 47, 70, 101, 152, 34, 229, 56, }, { 118, 145, 253, 162, 108, 9, 89, 68, 100, 29, 69, 134, 43, 48, 210, 106, }, { 44, 151, 18, 73, 133, 209, 13, 235, 77, 230, 242, 139, 69, 245, 51, 211, }, { 184, 51, 226, 192, 209, 99, 207, 135, 126, 72, 75, 143, 193, 100, 149, 60, }, { 216, 8, 22, 167, 30, 227, 113, 87, 221, 38, 119, 173, 41, 207, 191, 222, }, { 46, 124, 217, 48, 165, 104, 67, 81, 254, 18, 98, 83, 161, 25, 180, 15, }, { 54, 2, 228, 89, 230, 72, 141, 101, 166, 232, 109, 186, 155, 67, 95, 214, }, { 219, 119, 89, 3, 46, 231, 24, 176, 214, 168, 175, 25, 191, 85, 154, 108, }, { 105, 133, 218, 157, 95, 156, 98, 32, 146, 66, 113, 168, 140, 235, 209, 122, }, { 179, 102, 7, 67, 97, 198, 93, 205, 252, 144, 150, 221, 65, 200, 233, 120, }, { 20, 65, 194, 188, 131, 48, 169, 46, 116, 135, 233, 124, 39, 119, 127, 84, }, { 149, 48, 116, 84, 68, 15, 229, 49, 139, 212, 241, 104, 246, 231, 4, 129, }, { 190, 205, 124, 75, 177, 107, 29, 138, 104, 151, 56, 36, 46, 147, 223, 155, }, { 98, 208, 63, 30, 239, 57, 240, 106, 16, 154, 172, 250, 12, 71, 173, 62, }, { 161, 217, 91, 116, 130, 254, 38, 238, 158, 200, 12, 10, 137, 72, 220, 139, }, { 59, 169, 159, 81, 54, 229, 205, 34, 50, 239, 195, 67, 244, 24, 105, 53, }, { 22, 170, 9, 197, 163, 137, 231, 148, 199, 115, 121, 164, 195, 155, 248, 136, }, { 102, 197, 106, 236, 175, 136, 108, 221, 181, 177, 79, 137, 7, 92, 96, 69, }, { 233, 96, 232, 168, 136, 30, 9, 98, 213, 107, 33, 208, 47, 13, 8, 193, }, { 92, 248, 113, 96, 137, 208, 134, 162, 63, 36, 196, 166, 129, 50, 171, 30, }, { 108, 4, 11, 178, 15, 144, 217, 202, 143, 19, 218, 183, 245, 134, 190, 111, }, { 109, 144, 143, 111, 31, 45, 254, 151, 55, 105, 146, 219, 135, 240, 28, 1, }, { 173, 230, 164, 161, 66, 238, 65, 244, 178, 181, 234, 159, 148, 101, 72, 6, }, { 55, 150, 96, 132, 246, 245, 170, 56, 30, 146, 37, 214, 233, 53, 253, 184, }, { 97, 175, 112, 186, 223, 61, 153, 141, 27, 20, 116, 78, 154, 221, 136, 140, }, { 75, 198, 252, 120, 58, 228, 70, 107, 64, 45, 245, 110, 48, 223, 241, 248, }, { 185, 167, 102, 29, 193, 222, 232, 218, 198, 50, 3, 227, 179, 18, 55, 82, }, { 227, 161, 137, 246, 40, 6, 188, 117, 239, 201, 180, 238, 221, 215, 214, 235, }, { 186, 216, 41, 185, 241, 218, 129, 61, 205, 188, 219, 87, 37, 136, 18, 224, }, { 241, 30, 213, 193, 203, 62, 199, 86, 141, 145, 46, 57, 21, 87, 227, 24, }, { 160, 77, 223, 169, 146, 67, 1, 179, 38, 178, 68, 102, 251, 62, 126, 229, }, { 133, 100, 227, 26, 135, 142, 208, 168, 90, 120, 251, 103, 218, 139, 182, 174, }, { 131, 154, 125, 145, 231, 134, 2, 165, 76, 167, 136, 204, 53, 124, 252, 9, }, { 218, 227, 221, 222, 62, 90, 63, 237, 110, 210, 231, 117, 205, 35, 56, 2, }, { 71, 249, 3, 173, 250, 244, 33, 113, 108, 80, 19, 251, 45, 242, 101, 117, }, { 197, 247, 250, 225, 13, 207, 4, 137, 152, 141, 211, 91, 106, 248, 59, 18, }, { 176, 25, 72, 231, 81, 194, 52, 42, 247, 30, 78, 105, 215, 82, 204, 202, }, { 51, 131, 53, 118, 182, 68, 54, 143, 187, 185, 198, 165, 226, 46, 48, 195, }, { 250, 75, 48, 66, 123, 155, 85, 28, 15, 73, 243, 107, 149, 251, 159, 92, }, { 150, 79, 59, 240, 116, 11, 140, 214, 128, 90, 41, 220, 96, 125, 33, 51, }, { 111, 123, 68, 22, 63, 148, 176, 45, 132, 157, 2, 3, 99, 28, 155, 221, }, { 110, 239, 192, 203, 47, 41, 151, 112, 60, 231, 74, 111, 17, 106, 57, 179, }, { 194, 157, 224, 183, 125, 122, 241, 217, 54, 40, 232, 156, 247, 121, 211, 219, }, { 246, 116, 207, 151, 187, 139, 50, 6, 35, 52, 21, 254, 136, 214, 11, 209, }, { 80, 199, 142, 181, 73, 192, 225, 184, 19, 89, 34, 51, 156, 31, 63, 147, }, { 255, 202, 225, 109, 43, 151, 238, 246, 18, 24, 88, 116, 236, 150, 240, 73, }, { 93, 108, 245, 189, 153, 109, 161, 255, 135, 94, 140, 202, 243, 68, 9, 112, }, { 169, 243, 241, 83, 2, 95, 221, 67, 23, 158, 9, 236, 159, 126, 133, 125, }, { 142, 49, 6, 153, 55, 43, 66, 226, 216, 160, 38, 53, 90, 39, 202, 234, }, { 23, 62, 141, 24, 179, 52, 192, 201, 127, 9, 49, 200, 177, 237, 90, 230, }, { 27, 1, 114, 205, 115, 36, 167, 211, 83, 116, 215, 93, 172, 192, 206, 107, }, { 151, 219, 191, 45, 100, 182, 171, 139, 56, 32, 97, 176, 18, 11, 131, 93, }, { 125, 196, 24, 33, 220, 172, 203, 14, 230, 197, 152, 212, 171, 156, 174, 46, }, { 236, 225, 57, 135, 216, 18, 178, 136, 200, 58, 138, 207, 86, 96, 103, 212, }, { 88, 237, 36, 146, 201, 97, 26, 21, 154, 15, 39, 213, 138, 41, 102, 101, }, { 247, 224, 75, 74, 171, 54, 21, 91, 155, 78, 93, 146, 250, 160, 169, 191, }, { 31, 20, 39, 63, 51, 149, 59, 100, 246, 95, 52, 46, 167, 219, 3, 16, }, { 251, 223, 180, 159, 107, 38, 114, 65, 183, 51, 187, 7, 231, 141, 61, 50, }, { 124, 80, 156, 252, 204, 17, 236, 83, 94, 191, 208, 184, 217, 234, 12, 64, }, { 9, 190, 46, 250, 144, 28, 220, 240, 49, 44, 77, 138, 100, 64, 251, 152, }, { 13, 171, 123, 8, 208, 173, 64, 71, 148, 7, 174, 249, 111, 91, 54, 227, }, { 122, 174, 2, 119, 172, 25, 62, 94, 72, 96, 163, 19, 54, 29, 70, 231, }, { 103, 81, 238, 49, 191, 53, 75, 128, 13, 203, 7, 229, 117, 42, 194, 43, }, { 69, 18, 200, 212, 218, 77, 111, 203, 223, 164, 131, 35, 201, 30, 226, 169, }, { 135, 143, 40, 99, 167, 55, 158, 18, 233, 140, 107, 191, 62, 103, 49, 114, }, { 220, 29, 67, 85, 94, 82, 237, 224, 120, 13, 148, 222, 34, 212, 114, 165, }, { 232, 244, 108, 117, 152, 163, 46, 63, 109, 17, 105, 188, 93, 123, 170, 175, }, { 79, 211, 169, 138, 122, 85, 218, 220, 229, 6, 22, 29, 59, 196, 60, 131, }, { 29, 255, 236, 70, 19, 44, 117, 222, 69, 171, 164, 246, 67, 55, 132, 204, }, { 78, 71, 45, 87, 106, 232, 253, 129, 93, 124, 94, 113, 73, 178, 158, 237, }, { 4, 21, 85, 242, 64, 177, 156, 183, 165, 43, 227, 115, 11, 27, 205, 123, }, { 235, 139, 35, 209, 168, 167, 71, 216, 102, 159, 177, 8, 203, 225, 143, 29, }, { 248, 160, 251, 59, 91, 34, 27, 166, 188, 189, 99, 179, 113, 23, 24, 128, }, { 243, 245, 30, 184, 235, 135, 137, 236, 62, 101, 190, 225, 241, 187, 100, 196, }, { 62, 40, 78, 126, 102, 233, 118, 200, 47, 190, 104, 92, 141, 117, 6, 32, }, { 61, 87, 1, 218, 86, 237, 31, 47, 36, 48, 176, 232, 27, 239, 35, 146, }, { 189, 178, 51, 239, 129, 111, 116, 109, 99, 25, 224, 144, 184, 9, 250, 41, }, { 138, 36, 83, 107, 119, 154, 222, 85, 125, 139, 197, 70, 81, 60, 7, 145, }, { 136, 207, 152, 18, 87, 35, 144, 239, 206, 127, 85, 158, 181, 208, 128, 77, }, { 221, 137, 199, 136, 78, 239, 202, 189, 192, 119, 220, 178, 80, 162, 208, 203, }, { 205, 221, 80, 198, 141, 110, 255, 36, 17, 219, 214, 189, 124, 206, 98, 228, }, { 11, 85, 229, 131, 176, 165, 146, 74, 130, 216, 221, 82, 128, 172, 124, 68, }, { 19, 43, 216, 234, 243, 133, 92, 126, 218, 34, 210, 187, 186, 246, 151, 157, }, { 152, 155, 15, 92, 148, 162, 165, 118, 31, 211, 95, 145, 153, 188, 50, 98, }, { 2, 235, 203, 121, 32, 185, 78, 186, 179, 244, 144, 216, 228, 236, 135, 220, }, { 147, 206, 234, 223, 36, 7, 55, 60, 157, 11, 130, 195, 25, 16, 78, 38, }, { 128, 229, 50, 53, 215, 130, 107, 66, 71, 41, 80, 120, 163, 230, 217, 187, }, { 144, 177, 165, 123, 20, 3, 94, 219, 150, 133, 90, 119, 143, 138, 107, 148, }, { 208, 34, 188, 128, 158, 66, 138, 250, 84, 112, 114, 75, 63, 249, 230, 40, }, { 36, 189, 184, 110, 5, 112, 246, 70, 196, 176, 247, 109, 83, 195, 106, 37, }, { 52, 233, 47, 32, 198, 241, 195, 223, 21, 28, 253, 98, 127, 175, 216, 10, }, { 203, 35, 206, 77, 237, 102, 45, 41, 7, 4, 165, 22, 147, 57, 40, 67, }, { 237, 117, 189, 90, 200, 175, 149, 213, 112, 64, 194, 163, 36, 22, 197, 186, }, { 244, 159, 4, 238, 155, 50, 124, 188, 144, 192, 133, 38, 108, 58, 140, 13, }, { 206, 162, 31, 98, 189, 106, 150, 195, 26, 85, 14, 9, 234, 84, 71, 86, }, { 153, 15, 139, 129, 132, 31, 130, 43, 167, 169, 23, 253, 235, 202, 144, 12, }, { 16, 84, 151, 78, 195, 129, 53, 153, 209, 172, 10, 15, 44, 108, 178, 47, }, { 68, 134, 76, 9, 202, 240, 72, 150, 103, 222, 203, 79, 187, 104, 64, 199, }, { 64, 147, 25, 251, 138, 65, 212, 33, 194, 245, 40, 60, 176, 115, 141, 188, }, { 146, 90, 110, 2, 52, 186, 16, 97, 37, 113, 202, 175, 107, 102, 236, 72, }, { 58, 61, 27, 140, 38, 88, 234, 127, 138, 149, 139, 47, 134, 110, 203, 91, }, { 1, 148, 132, 221, 16, 189, 39, 93, 184, 122, 72, 108, 114, 118, 162, 110, }, { 38, 86, 115, 23, 37, 201, 184, 252, 119, 68, 103, 181, 183, 47, 237, 249, }, { 18, 191, 92, 55, 227, 56, 123, 35, 98, 88, 154, 215, 200, 128, 53, 243, }, { 26, 149, 246, 16, 99, 153, 128, 142, 235, 14, 159, 49, 222, 182, 108, 5, }, { 72, 185, 179, 220, 10, 224, 47, 140, 75, 163, 45, 218, 166, 69, 212, 74, }, { 104, 17, 94, 64, 79, 33, 69, 125, 42, 56, 57, 196, 254, 157, 115, 20, }, { 245, 11, 128, 51, 139, 143, 91, 225, 40, 186, 205, 74, 30, 76, 46, 99, }, { 129, 113, 182, 232, 199, 63, 76, 31, 255, 83, 24, 20, 209, 144, 123, 213, }, { 139, 176, 215, 182, 103, 39, 249, 8, 197, 241, 141, 42, 35, 74, 165, 255, }, { 199, 28, 49, 152, 45, 118, 74, 51, 43, 121, 67, 131, 142, 20, 188, 206, }, { 214, 220, 34, 11, 254, 74, 88, 247, 66, 175, 1, 224, 208, 14, 172, 143, }, { 32, 168, 237, 156, 69, 193, 106, 241, 97, 155, 20, 30, 88, 216, 167, 94, }, { 10, 193, 97, 94, 160, 24, 181, 23, 58, 162, 149, 62, 242, 218, 222, 42, }, { 8, 42, 170, 39, 128, 161, 251, 173, 137, 86, 5, 230, 22, 54, 89, 246, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 76, 172, 230, 46, 74, 81, 179, 59, 238, 136, 206, 169, 173, 94, 25, 49, }, { 215, 72, 166, 214, 238, 247, 127, 170, 250, 213, 73, 140, 162, 120, 14, 225, }, { 116, 122, 54, 219, 76, 176, 23, 254, 215, 233, 213, 94, 207, 220, 85, 182, }, }, { { 204, 236, 24, 21, 27, 17, 151, 195, 240, 154, 125, 62, 119, 58, 147, 155, }, { 3, 82, 76, 50, 164, 145, 5, 205, 189, 123, 68, 14, 113, 173, 166, 35, }, { 23, 12, 154, 169, 24, 146, 57, 216, 173, 10, 242, 70, 120, 125, 2, 116, }, { 165, 67, 171, 4, 134, 104, 44, 60, 132, 131, 53, 23, 219, 123, 64, 152, }, { 212, 57, 61, 70, 114, 19, 191, 100, 81, 196, 24, 78, 121, 27, 234, 64, }, { 252, 133, 82, 179, 201, 21, 199, 78, 113, 38, 183, 222, 107, 120, 97, 238, }, { 214, 228, 244, 219, 11, 76, 185, 83, 135, 150, 96, 251, 39, 108, 46, 195, }, { 118, 81, 139, 137, 162, 84, 154, 251, 7, 152, 153, 254, 111, 35, 71, 62, }, { 210, 157, 165, 34, 249, 242, 181, 61, 232, 50, 144, 82, 155, 130, 101, 6, }, { 32, 78, 205, 196, 156, 185, 96, 246, 254, 105, 140, 1, 169, 124, 29, 231, }, { 101, 36, 64, 217, 72, 120, 175, 77, 197, 54, 155, 17, 171, 176, 14, 143, }, { 66, 65, 144, 214, 130, 238, 198, 24, 233, 128, 163, 183, 207, 143, 254, 142, }, { 70, 56, 193, 47, 112, 80, 202, 118, 134, 36, 83, 30, 115, 97, 181, 75, }, { 187, 50, 22, 51, 100, 139, 14, 194, 156, 43, 216, 123, 55, 195, 182, 5, }, { 44, 197, 62, 12, 73, 184, 116, 68, 79, 70, 95, 57, 174, 141, 192, 107, }, { 37, 184, 25, 146, 179, 201, 111, 98, 250, 228, 64, 19, 58, 72, 52, 130, }, { 46, 24, 247, 145, 48, 231, 114, 115, 153, 20, 39, 140, 240, 250, 4, 232, }, { 127, 44, 172, 23, 88, 37, 129, 221, 178, 58, 134, 212, 251, 230, 179, 215, }, { 173, 177, 9, 53, 161, 215, 52, 224, 90, 8, 22, 134, 96, 100, 214, 209, }, { 6, 164, 152, 100, 139, 225, 10, 89, 185, 246, 136, 28, 226, 153, 143, 70, }, { 107, 114, 122, 140, 228, 38, 189, 200, 162, 75, 48, 156, 242, 54, 23, 128, }, { 59, 201, 164, 165, 81, 42, 77, 156, 226, 76, 173, 127, 214, 240, 194, 31, }, { 106, 253, 255, 35, 57, 232, 190, 50, 201, 98, 12, 39, 221, 236, 117, 32, }, { 126, 163, 41, 184, 133, 235, 130, 39, 217, 19, 186, 111, 212, 60, 209, 119, }, { 60, 226, 185, 110, 7, 5, 68, 63, 48, 147, 25, 216, 27, 179, 47, 249, }, { 132, 130, 227, 111, 199, 31, 79, 48, 17, 195, 133, 173, 93, 221, 63, 223, }, { 103, 249, 137, 68, 49, 39, 169, 122, 19, 100, 227, 164, 245, 199, 202, 12, }, { 182, 54, 96, 84, 108, 68, 25, 138, 70, 45, 55, 248, 31, 232, 9, 41, }, { 22, 131, 31, 6, 197, 92, 58, 34, 198, 35, 206, 253, 87, 167, 96, 212, }, { 136, 9, 16, 167, 18, 30, 91, 130, 160, 236, 86, 149, 90, 44, 226, 83, }, { 88, 73, 124, 24, 146, 179, 232, 136, 158, 140, 190, 114, 159, 217, 67, 214, }, { 188, 25, 11, 248, 50, 164, 7, 97, 78, 244, 108, 220, 250, 128, 91, 227, }, { 222, 22, 86, 234, 44, 243, 161, 143, 89, 29, 67, 106, 156, 115, 184, 138, }, { 194, 186, 34, 64, 183, 79, 133, 70, 151, 231, 214, 179, 46, 188, 138, 148, }, { 78, 202, 99, 30, 87, 239, 210, 170, 88, 175, 112, 143, 200, 126, 35, 2, }, { 63, 176, 245, 92, 163, 148, 65, 242, 141, 232, 93, 214, 106, 30, 137, 218, }, { 14, 86, 58, 85, 172, 94, 18, 133, 103, 125, 171, 141, 89, 134, 25, 15, }, { 31, 254, 56, 152, 63, 45, 33, 4, 115, 129, 209, 215, 195, 98, 148, 61, }, { 153, 161, 18, 106, 129, 109, 104, 3, 180, 16, 44, 207, 192, 200, 111, 97, }, { 12, 139, 243, 200, 213, 1, 20, 178, 177, 47, 211, 56, 7, 241, 221, 140, }, { 112, 245, 19, 237, 41, 181, 144, 162, 190, 110, 17, 226, 141, 186, 200, 120, }, { 68, 229, 8, 178, 9, 15, 204, 65, 80, 118, 43, 171, 45, 22, 113, 200, }, { 45, 74, 187, 163, 148, 118, 119, 190, 36, 111, 99, 130, 129, 87, 162, 203, }, { 95, 98, 97, 211, 196, 156, 225, 43, 76, 83, 10, 213, 82, 154, 174, 48, }, { 120, 7, 177, 220, 14, 10, 136, 126, 96, 229, 50, 115, 54, 165, 94, 49, }, { 203, 199, 5, 222, 77, 62, 158, 96, 34, 69, 201, 153, 186, 121, 126, 125, }, { 213, 182, 184, 233, 175, 221, 188, 158, 58, 237, 36, 245, 86, 193, 136, 224, }, { 115, 167, 95, 223, 141, 36, 149, 111, 3, 21, 85, 236, 252, 23, 110, 91, }, { 92, 48, 45, 225, 96, 13, 228, 230, 241, 40, 78, 219, 35, 55, 8, 19, }, { 254, 88, 155, 46, 176, 74, 193, 121, 167, 116, 207, 107, 53, 15, 165, 109, }, { 111, 11, 43, 117, 22, 152, 177, 166, 205, 239, 192, 53, 78, 216, 92, 69, }, { 26, 8, 236, 206, 16, 93, 46, 144, 119, 12, 29, 197, 80, 86, 189, 88, }, { 7, 43, 29, 203, 86, 47, 9, 163, 210, 223, 180, 167, 205, 67, 237, 230, }, { 238, 127, 28, 76, 254, 247, 241, 2, 216, 161, 137, 138, 128, 49, 74, 255, }, { 234, 6, 77, 181, 12, 73, 253, 108, 183, 5, 121, 35, 60, 223, 1, 58, }, { 200, 149, 73, 236, 233, 175, 155, 173, 159, 62, 141, 151, 203, 212, 216, 94, }, { 140, 112, 65, 94, 224, 160, 87, 236, 207, 72, 166, 60, 230, 194, 169, 150, }, { 181, 100, 44, 102, 200, 213, 28, 71, 251, 86, 115, 246, 110, 69, 175, 10, }, { 56, 155, 232, 151, 245, 187, 72, 81, 95, 55, 233, 113, 167, 93, 100, 60, }, { 89, 198, 249, 183, 79, 125, 235, 114, 245, 165, 130, 201, 176, 3, 33, 118, }, { 105, 175, 179, 17, 157, 121, 187, 255, 116, 25, 72, 41, 172, 65, 211, 3, }, { 16, 39, 135, 98, 78, 189, 48, 123, 127, 213, 70, 225, 181, 62, 239, 146, }, { 240, 14, 161, 123, 28, 20, 211, 252, 192, 9, 100, 230, 108, 137, 188, 98, }, { 163, 231, 51, 96, 13, 137, 38, 101, 61, 117, 189, 11, 57, 226, 207, 222, }, { 9, 125, 39, 158, 250, 113, 27, 38, 181, 162, 31, 42, 148, 197, 244, 233, }, { 13, 4, 118, 103, 8, 207, 23, 72, 218, 6, 239, 131, 40, 43, 191, 44, }, { 253, 10, 215, 28, 20, 219, 196, 180, 26, 15, 139, 101, 68, 162, 3, 78, }, { 27, 135, 105, 97, 205, 147, 45, 106, 28, 37, 33, 126, 127, 140, 223, 248, }, { 39, 101, 208, 15, 202, 150, 105, 85, 44, 182, 56, 166, 100, 63, 240, 1, }, { 141, 255, 196, 241, 61, 110, 84, 22, 164, 97, 154, 135, 201, 24, 203, 54, }, { 242, 211, 104, 230, 101, 75, 213, 203, 22, 91, 28, 83, 50, 254, 120, 225, }, { 146, 1, 252, 105, 2, 67, 117, 18, 215, 224, 75, 80, 10, 122, 95, 11, }, { 109, 214, 226, 232, 111, 199, 183, 145, 27, 189, 184, 128, 16, 175, 152, 198, }, { 93, 191, 168, 78, 189, 195, 231, 28, 154, 1, 114, 96, 12, 237, 106, 179, }, { 241, 129, 36, 212, 193, 218, 208, 6, 171, 32, 88, 93, 67, 83, 222, 194, }, { 33, 193, 72, 107, 65, 119, 99, 12, 149, 64, 176, 186, 134, 166, 127, 71, }, { 55, 66, 87, 109, 132, 43, 89, 46, 83, 99, 126, 71, 209, 1, 31, 147, }, { 64, 156, 89, 75, 251, 177, 192, 47, 63, 210, 219, 2, 145, 248, 58, 13, }, { 142, 173, 136, 195, 153, 255, 81, 219, 25, 26, 222, 137, 184, 181, 109, 21, }, { 232, 219, 132, 40, 117, 22, 251, 91, 97, 87, 1, 150, 98, 168, 197, 185, }, { 228, 80, 119, 224, 160, 23, 239, 233, 208, 120, 210, 174, 101, 89, 24, 53, }, { 236, 162, 213, 209, 135, 168, 247, 53, 14, 243, 241, 63, 222, 70, 142, 124, }, { 158, 138, 15, 161, 215, 66, 97, 160, 102, 207, 152, 104, 13, 139, 130, 135, }, { 156, 87, 198, 60, 174, 29, 103, 151, 176, 157, 224, 221, 83, 252, 70, 4, }, { 209, 207, 233, 16, 93, 99, 176, 240, 85, 73, 212, 92, 234, 47, 195, 37, }, { 231, 2, 59, 210, 4, 134, 234, 36, 109, 3, 150, 160, 20, 244, 190, 22, }, { 184, 96, 90, 1, 192, 26, 11, 15, 33, 80, 156, 117, 70, 110, 16, 38, }, { 47, 151, 114, 62, 237, 41, 113, 137, 242, 61, 27, 55, 223, 32, 102, 72, }, { 226, 244, 239, 132, 43, 246, 229, 176, 105, 142, 90, 178, 135, 192, 151, 115, }, { 138, 212, 217, 58, 107, 65, 93, 181, 118, 190, 46, 32, 4, 91, 38, 208, }, { 215, 107, 113, 116, 214, 130, 186, 169, 236, 191, 92, 64, 8, 182, 76, 99, }, { 180, 235, 169, 201, 21, 27, 31, 189, 144, 127, 79, 77, 65, 159, 205, 170, }, { 41, 51, 234, 90, 102, 200, 123, 208, 75, 203, 147, 43, 61, 185, 233, 14, }, { 19, 117, 203, 80, 234, 44, 53, 182, 194, 174, 2, 239, 196, 147, 73, 177, }, { 152, 46, 151, 197, 92, 163, 107, 249, 223, 57, 16, 116, 239, 18, 13, 193, }, { 128, 251, 178, 150, 53, 161, 67, 94, 126, 103, 117, 4, 225, 51, 116, 26, }, { 166, 17, 231, 54, 34, 249, 41, 241, 57, 248, 113, 25, 170, 214, 230, 187, }, { 98, 15, 93, 18, 30, 87, 166, 238, 23, 233, 47, 182, 102, 243, 227, 105, }, { 179, 192, 180, 2, 67, 52, 22, 30, 66, 160, 251, 234, 140, 220, 32, 76, }, { 94, 237, 228, 124, 25, 82, 226, 209, 39, 122, 54, 110, 125, 64, 204, 144, }, { 114, 40, 218, 112, 80, 234, 150, 149, 104, 60, 105, 87, 211, 205, 12, 251, }, { 67, 206, 21, 121, 95, 32, 197, 226, 130, 169, 159, 12, 224, 85, 156, 46, }, { 52, 16, 27, 95, 32, 186, 92, 227, 238, 24, 58, 73, 160, 172, 185, 176, }, { 53, 159, 158, 240, 253, 116, 95, 25, 133, 49, 6, 242, 143, 118, 219, 16, }, { 82, 102, 23, 180, 204, 83, 246, 99, 150, 85, 229, 86, 122, 177, 17, 28, }, { 38, 234, 85, 160, 23, 88, 106, 175, 71, 159, 4, 29, 75, 229, 146, 161, }, { 125, 241, 101, 138, 33, 122, 135, 234, 100, 104, 254, 97, 165, 145, 119, 84, }, { 183, 185, 229, 251, 177, 138, 26, 112, 45, 4, 11, 67, 48, 50, 107, 137, }, { 10, 47, 107, 172, 94, 224, 30, 235, 8, 217, 91, 36, 229, 104, 82, 202, }, { 69, 106, 141, 29, 212, 193, 207, 187, 59, 95, 23, 16, 2, 204, 19, 104, }, { 129, 116, 55, 57, 232, 111, 64, 164, 21, 78, 73, 191, 206, 233, 22, 186, }, { 110, 132, 174, 218, 203, 86, 178, 92, 166, 198, 252, 142, 97, 2, 62, 229, }, { 83, 233, 146, 27, 17, 157, 245, 153, 253, 124, 217, 237, 85, 107, 115, 188, }, { 74, 179, 50, 231, 165, 81, 222, 196, 55, 11, 128, 38, 116, 144, 104, 199, }, { 121, 136, 52, 115, 211, 196, 139, 132, 11, 204, 14, 200, 25, 127, 60, 145, }, { 50, 180, 131, 59, 171, 91, 86, 186, 87, 238, 178, 85, 66, 53, 54, 246, }, { 97, 93, 17, 32, 186, 198, 163, 35, 170, 146, 107, 184, 23, 94, 69, 74, }, { 251, 174, 79, 120, 159, 58, 206, 237, 163, 249, 3, 121, 166, 59, 140, 8, }, { 57, 20, 109, 56, 40, 117, 75, 171, 52, 30, 213, 202, 136, 135, 6, 156, }, { 192, 103, 235, 221, 206, 16, 131, 113, 65, 181, 174, 6, 112, 203, 78, 23, }, { 250, 33, 202, 215, 66, 244, 205, 23, 200, 208, 63, 194, 137, 225, 238, 168, }, { 91, 27, 48, 42, 54, 34, 237, 69, 35, 247, 250, 124, 238, 116, 229, 245, }, { 164, 204, 46, 171, 91, 166, 47, 198, 239, 170, 9, 172, 244, 161, 34, 56, }, { 186, 189, 147, 156, 185, 69, 13, 56, 247, 2, 228, 192, 24, 25, 212, 165, }, { 218, 111, 7, 19, 222, 77, 173, 225, 54, 185, 179, 195, 32, 157, 243, 79, }, { 76, 23, 170, 131, 46, 176, 212, 157, 142, 253, 8, 58, 150, 9, 231, 129, }, { 5, 246, 212, 86, 47, 112, 15, 148, 4, 141, 204, 18, 147, 52, 41, 101, }, { 195, 53, 167, 239, 106, 129, 134, 188, 252, 206, 234, 8, 1, 102, 232, 52, }, { 58, 70, 33, 10, 140, 228, 78, 102, 137, 101, 145, 196, 249, 42, 160, 191, }, { 130, 38, 123, 11, 76, 254, 69, 105, 168, 53, 13, 177, 191, 68, 176, 153, }, { 24, 213, 37, 83, 105, 2, 40, 167, 161, 94, 101, 112, 14, 33, 121, 219, }, { 201, 26, 204, 67, 52, 97, 152, 87, 244, 23, 177, 44, 228, 14, 186, 254, }, { 104, 32, 54, 190, 64, 183, 184, 5, 31, 48, 116, 146, 131, 155, 177, 163, }, { 246, 170, 57, 31, 151, 245, 217, 165, 121, 255, 236, 250, 142, 16, 51, 36, }, { 99, 128, 216, 189, 195, 153, 165, 20, 124, 192, 19, 13, 73, 41, 129, 201, }, { 135, 208, 175, 93, 99, 142, 74, 253, 172, 184, 193, 163, 44, 112, 153, 252, }, { 73, 225, 126, 213, 1, 192, 219, 9, 138, 112, 196, 40, 5, 61, 206, 228, }, { 54, 205, 210, 194, 89, 229, 90, 212, 56, 74, 66, 252, 254, 219, 125, 51, }, { 145, 83, 176, 91, 166, 210, 112, 223, 106, 155, 15, 94, 123, 215, 249, 40, }, { 151, 247, 40, 63, 45, 51, 122, 134, 211, 109, 135, 66, 153, 78, 118, 110, }, { 51, 59, 6, 148, 118, 149, 85, 64, 60, 199, 142, 238, 109, 239, 84, 86, }, { 8, 242, 162, 49, 39, 191, 24, 220, 222, 139, 35, 145, 187, 31, 150, 73, }, { 124, 126, 224, 37, 252, 180, 132, 16, 15, 65, 194, 218, 138, 75, 21, 244, }, { 2, 221, 201, 157, 121, 95, 6, 55, 214, 82, 120, 181, 94, 119, 196, 131, }, { 119, 222, 14, 38, 127, 154, 153, 1, 108, 177, 165, 69, 64, 249, 37, 158, }, { 133, 13, 102, 192, 26, 209, 76, 202, 122, 234, 185, 22, 114, 7, 93, 127, }, { 102, 118, 12, 235, 236, 233, 170, 128, 120, 77, 223, 31, 218, 29, 168, 172, }, { 65, 19, 220, 228, 38, 127, 195, 213, 84, 251, 231, 185, 190, 34, 88, 173, }, { 48, 105, 74, 166, 210, 4, 80, 141, 129, 188, 202, 224, 28, 66, 242, 117, }, { 205, 99, 157, 186, 198, 223, 148, 57, 155, 179, 65, 133, 88, 224, 241, 59, }, { 208, 64, 108, 191, 128, 173, 179, 10, 62, 96, 232, 231, 197, 245, 161, 133, }, { 217, 61, 75, 33, 122, 220, 168, 44, 139, 194, 247, 205, 81, 48, 85, 108, }, { 169, 200, 88, 204, 83, 105, 56, 142, 53, 172, 230, 47, 220, 138, 157, 20, }, { 170, 154, 20, 254, 247, 248, 61, 67, 136, 215, 162, 33, 173, 39, 59, 55, }, { 197, 145, 63, 139, 225, 96, 140, 229, 69, 56, 98, 20, 227, 255, 103, 114, }, { 96, 210, 148, 143, 103, 8, 160, 217, 193, 187, 87, 3, 56, 132, 39, 234, }, { 248, 252, 3, 74, 59, 171, 203, 32, 30, 130, 71, 119, 215, 150, 42, 43, }, { 4, 121, 81, 249, 242, 190, 12, 110, 111, 164, 240, 169, 188, 238, 75, 197, }, { 144, 220, 53, 244, 123, 28, 115, 37, 1, 178, 51, 229, 84, 13, 155, 136, }, { 230, 141, 190, 125, 217, 72, 233, 222, 6, 42, 170, 27, 59, 46, 220, 182, }, { 150, 120, 173, 144, 240, 253, 121, 124, 184, 68, 187, 249, 182, 148, 20, 206, }, { 175, 108, 192, 168, 216, 136, 50, 215, 140, 90, 110, 51, 62, 19, 18, 82, }, { 198, 195, 115, 185, 69, 241, 137, 40, 248, 67, 38, 26, 146, 82, 193, 81, }, { 167, 158, 98, 153, 255, 55, 42, 11, 82, 209, 77, 162, 133, 12, 132, 27, }, { 161, 58, 250, 253, 116, 214, 32, 82, 235, 39, 197, 190, 103, 149, 11, 93, }, { 216, 178, 206, 142, 167, 18, 171, 214, 224, 235, 203, 118, 126, 234, 55, 204, }, { 30, 113, 189, 55, 226, 227, 34, 254, 24, 168, 237, 108, 236, 184, 246, 157, }, { 77, 152, 47, 44, 243, 126, 215, 103, 229, 212, 52, 129, 185, 211, 133, 33, }, { 100, 171, 197, 118, 149, 182, 172, 183, 174, 31, 167, 170, 132, 106, 108, 47, }, { 154, 243, 94, 88, 37, 252, 109, 206, 9, 107, 104, 193, 177, 101, 201, 66, }, { 227, 123, 106, 43, 246, 56, 230, 74, 2, 167, 102, 9, 168, 26, 245, 211, }, { 249, 115, 134, 229, 230, 101, 200, 218, 117, 171, 123, 204, 248, 76, 72, 139, }, { 247, 37, 188, 176, 74, 59, 218, 95, 18, 214, 208, 65, 161, 202, 81, 132, }, { 25, 90, 160, 252, 180, 204, 43, 93, 202, 119, 89, 203, 33, 251, 27, 123, }, { 131, 169, 254, 164, 145, 48, 70, 147, 195, 28, 49, 10, 144, 158, 210, 57, }, { 75, 60, 183, 72, 120, 159, 221, 62, 92, 34, 188, 157, 91, 74, 10, 103, }, { 79, 69, 230, 177, 138, 33, 209, 80, 51, 134, 76, 52, 231, 164, 65, 162, }, { 123, 85, 253, 238, 170, 155, 141, 179, 221, 158, 118, 125, 71, 8, 248, 18, }, { 239, 240, 153, 227, 35, 57, 242, 248, 179, 136, 181, 49, 175, 235, 40, 95, }, { 157, 216, 67, 147, 115, 211, 100, 109, 219, 180, 220, 102, 124, 38, 36, 164, }, { 116, 140, 66, 20, 219, 11, 156, 204, 209, 202, 225, 75, 49, 84, 131, 189, }, { 199, 76, 246, 22, 152, 63, 138, 210, 147, 106, 26, 161, 189, 136, 163, 241, }, { 202, 72, 128, 113, 144, 240, 157, 154, 73, 108, 245, 34, 149, 163, 28, 221, }, { 108, 89, 103, 71, 178, 9, 180, 107, 112, 148, 132, 59, 63, 117, 250, 102, }, { 243, 92, 237, 73, 184, 133, 214, 49, 125, 114, 32, 232, 29, 36, 26, 65, }, { 49, 230, 207, 9, 15, 202, 83, 119, 234, 149, 246, 91, 51, 152, 144, 213, }, { 62, 63, 112, 243, 126, 90, 66, 8, 230, 193, 97, 109, 69, 196, 235, 122, }, { 1, 143, 133, 175, 221, 206, 3, 250, 107, 41, 60, 187, 47, 218, 98, 160, }, { 219, 224, 130, 188, 3, 131, 174, 27, 93, 144, 143, 120, 15, 71, 145, 239, }, { 196, 30, 186, 36, 60, 174, 143, 31, 46, 17, 94, 175, 204, 37, 5, 210, }, { 225, 166, 163, 182, 143, 103, 224, 125, 212, 245, 30, 188, 246, 109, 49, 80, }, { 237, 45, 80, 126, 90, 102, 244, 207, 101, 218, 205, 132, 241, 156, 236, 220, }, { 224, 41, 38, 25, 82, 169, 227, 135, 191, 220, 34, 7, 217, 183, 83, 240, }, { 20, 94, 214, 155, 188, 3, 60, 21, 16, 113, 182, 72, 9, 208, 164, 87, }, { 223, 153, 211, 69, 241, 61, 162, 117, 50, 52, 127, 209, 179, 169, 218, 42, }, { 80, 187, 222, 41, 181, 12, 240, 84, 64, 7, 157, 227, 36, 198, 213, 159, }, { 190, 196, 194, 101, 75, 251, 1, 86, 152, 166, 20, 105, 164, 247, 159, 96, }, { 171, 21, 145, 81, 42, 54, 62, 185, 227, 254, 158, 154, 130, 253, 89, 151, }, { 174, 227, 69, 7, 5, 70, 49, 45, 231, 115, 82, 136, 17, 201, 112, 242, }, { 81, 52, 91, 134, 104, 194, 243, 174, 43, 46, 161, 88, 11, 28, 183, 63, }, { 18, 250, 78, 255, 55, 226, 54, 76, 169, 135, 62, 84, 235, 73, 43, 17, }, { 143, 34, 13, 108, 68, 49, 82, 33, 114, 51, 226, 50, 151, 111, 15, 181, }, { 29, 35, 241, 5, 70, 114, 39, 51, 165, 211, 169, 98, 157, 21, 80, 190, }, { 244, 119, 240, 130, 238, 170, 223, 146, 175, 173, 148, 79, 208, 103, 247, 167, }, { 211, 18, 32, 141, 36, 60, 182, 199, 131, 27, 172, 233, 180, 88, 7, 166, }, { 255, 215, 30, 129, 109, 132, 194, 131, 204, 93, 243, 208, 26, 213, 199, 205, }, { 71, 183, 68, 128, 173, 158, 201, 140, 237, 13, 111, 165, 92, 187, 215, 235, }, { 21, 209, 83, 52, 97, 205, 63, 239, 123, 88, 138, 243, 38, 10, 198, 247, }, { 139, 91, 92, 149, 182, 143, 94, 79, 29, 151, 18, 155, 43, 129, 68, 112, }, { 160, 181, 127, 82, 169, 24, 35, 168, 128, 14, 249, 5, 72, 79, 105, 253, }, { 245, 248, 117, 45, 51, 100, 220, 104, 196, 132, 168, 244, 255, 189, 149, 7, }, { 40, 188, 111, 245, 187, 6, 120, 42, 32, 226, 175, 144, 18, 99, 139, 174, }, { 87, 144, 195, 226, 227, 35, 249, 247, 146, 216, 41, 68, 233, 133, 56, 121, }, { 178, 79, 49, 173, 158, 250, 21, 228, 41, 137, 199, 81, 163, 6, 66, 236, }, { 36, 55, 156, 61, 110, 7, 108, 152, 145, 205, 124, 168, 21, 146, 86, 34, }, { 207, 190, 84, 39, 191, 128, 146, 14, 77, 225, 57, 48, 6, 151, 53, 184, }, { 137, 134, 149, 8, 207, 208, 88, 120, 203, 197, 106, 46, 117, 246, 128, 243, }, { 221, 68, 26, 216, 136, 98, 164, 66, 228, 102, 7, 100, 237, 222, 30, 169, }, { 85, 77, 10, 127, 154, 124, 255, 192, 68, 138, 81, 241, 183, 242, 252, 250, }, { 43, 238, 35, 199, 31, 151, 125, 231, 157, 153, 235, 158, 99, 206, 45, 141, }, { 155, 124, 219, 247, 248, 50, 110, 52, 98, 66, 84, 122, 158, 191, 171, 226, }, { 235, 137, 200, 26, 209, 135, 254, 150, 220, 44, 69, 152, 19, 5, 99, 154, }, { 206, 49, 209, 136, 98, 78, 145, 244, 38, 200, 5, 139, 41, 77, 87, 24, }, { 229, 223, 242, 79, 125, 217, 236, 19, 187, 81, 238, 21, 74, 131, 122, 149, }, { 177, 29, 125, 159, 58, 107, 16, 41, 148, 242, 131, 95, 210, 171, 228, 207, }, { 34, 147, 4, 89, 229, 230, 102, 193, 40, 59, 244, 180, 247, 11, 217, 100, }, { 189, 150, 142, 87, 239, 106, 4, 155, 37, 221, 80, 103, 213, 90, 57, 67, }, { 233, 84, 1, 135, 168, 216, 248, 161, 10, 126, 61, 45, 77, 114, 167, 25, }, { 35, 28, 129, 246, 56, 40, 101, 59, 67, 18, 200, 15, 216, 209, 187, 196, }, { 117, 3, 199, 187, 6, 197, 159, 54, 186, 227, 221, 240, 30, 142, 225, 29, }, { 159, 5, 138, 14, 10, 140, 98, 90, 13, 230, 164, 211, 34, 81, 224, 39, }, { 162, 104, 182, 207, 208, 71, 37, 159, 86, 92, 129, 176, 22, 56, 173, 126, }, { 15, 217, 191, 250, 113, 144, 17, 127, 12, 84, 151, 54, 118, 92, 123, 175, }, { 84, 194, 143, 208, 71, 178, 252, 58, 47, 163, 109, 74, 152, 40, 158, 90, }, { 134, 95, 42, 242, 190, 64, 73, 7, 199, 145, 253, 24, 3, 170, 251, 92, }, { 147, 142, 121, 198, 223, 141, 118, 232, 188, 201, 119, 235, 37, 160, 61, 171, }, { 90, 148, 181, 133, 235, 236, 238, 191, 72, 222, 198, 199, 193, 174, 135, 85, }, { 61, 109, 60, 193, 218, 203, 71, 197, 91, 186, 37, 99, 52, 105, 77, 89, }, { 148, 165, 100, 13, 137, 162, 127, 75, 110, 22, 195, 76, 232, 227, 208, 77, }, { 86, 31, 70, 77, 62, 237, 250, 13, 249, 241, 21, 255, 198, 95, 90, 217, }, { 191, 75, 71, 202, 150, 53, 2, 172, 243, 143, 40, 210, 139, 45, 253, 192, }, { 149, 42, 225, 162, 84, 108, 124, 177, 5, 63, 255, 247, 199, 57, 178, 237, }, { 185, 239, 223, 174, 29, 212, 8, 245, 74, 121, 160, 206, 105, 180, 114, 134, }, { 17, 168, 2, 205, 147, 115, 51, 129, 20, 252, 122, 90, 154, 228, 141, 50, }, { 11, 160, 238, 3, 131, 46, 29, 17, 99, 240, 103, 159, 202, 178, 48, 106, }, { 113, 122, 150, 66, 244, 123, 147, 88, 213, 71, 45, 89, 162, 96, 170, 216, }, { 176, 146, 248, 48, 231, 165, 19, 211, 255, 219, 191, 228, 253, 113, 134, 111, }, { 28, 172, 116, 170, 155, 188, 36, 201, 206, 250, 149, 217, 178, 207, 50, 30, }, { 220, 203, 159, 119, 85, 172, 167, 184, 143, 79, 59, 223, 194, 4, 124, 9, }, { 168, 71, 221, 99, 142, 167, 59, 116, 94, 133, 218, 148, 243, 80, 255, 180, }, { 193, 232, 110, 114, 19, 222, 128, 139, 42, 156, 146, 189, 95, 17, 44, 183, }, { 42, 97, 166, 104, 194, 89, 126, 29, 246, 176, 215, 37, 76, 20, 79, 45, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 172, 62, 140, 154, 124, 25, 55, 26, 49, 33, 42, 61, 79, 190, 180, 113, }, { 72, 110, 251, 122, 220, 14, 216, 243, 225, 89, 248, 147, 42, 231, 172, 68, }, { 122, 218, 120, 65, 119, 85, 142, 73, 182, 183, 74, 198, 104, 210, 154, 178, }, }, { { 71, 53, 239, 181, 239, 239, 48, 230, 175, 160, 137, 134, 19, 133, 95, 230, }, { 233, 99, 186, 228, 186, 186, 152, 103, 24, 214, 90, 148, 33, 124, 165, 103, }, { 143, 178, 142, 222, 142, 142, 247, 134, 184, 119, 100, 171, 110, 41, 21, 134, }, { 78, 226, 110, 252, 110, 110, 149, 173, 97, 248, 221, 68, 94, 105, 229, 173, }, { 3, 171, 118, 153, 118, 118, 122, 88, 111, 223, 28, 172, 216, 227, 62, 88, }, { 207, 202, 30, 237, 30, 30, 164, 89, 236, 94, 96, 210, 70, 73, 157, 89, }, { 12, 233, 27, 33, 27, 27, 43, 163, 127, 250, 112, 245, 230, 10, 248, 163, }, { 186, 174, 120, 50, 120, 120, 213, 167, 54, 187, 67, 206, 219, 231, 49, 167, }, { 18, 109, 193, 146, 193, 193, 137, 150, 95, 176, 168, 71, 154, 27, 183, 150, }, { 240, 170, 31, 209, 31, 31, 89, 107, 195, 21, 15, 217, 102, 136, 61, 107, }, { 43, 152, 44, 95, 44, 44, 128, 20, 174, 134, 255, 215, 201, 223, 107, 20, }, { 44, 213, 83, 217, 83, 83, 227, 45, 85, 15, 114, 40, 242, 58, 188, 45, }, { 50, 81, 137, 106, 137, 137, 65, 24, 117, 69, 170, 154, 142, 43, 243, 24, }, { 27, 186, 64, 219, 64, 64, 44, 221, 145, 232, 252, 133, 215, 247, 13, 221, }, { 210, 229, 178, 199, 178, 178, 124, 52, 163, 203, 164, 204, 226, 187, 236, 52, }, { 8, 15, 18, 62, 18, 18, 50, 194, 235, 172, 225, 166, 5, 12, 17, 194, }, { 221, 167, 223, 127, 223, 223, 45, 207, 179, 238, 200, 149, 220, 82, 42, 207, }, { 96, 68, 216, 203, 216, 216, 155, 81, 126, 220, 6, 164, 60, 80, 204, 81, }, { 114, 41, 25, 89, 25, 25, 18, 199, 33, 108, 174, 227, 166, 75, 123, 199, }, { 17, 198, 183, 11, 183, 183, 243, 206, 48, 111, 180, 235, 66, 248, 137, 206, }, { 6, 149, 236, 241, 236, 236, 244, 176, 222, 125, 56, 155, 115, 5, 124, 176, }, { 93, 87, 60, 25, 60, 60, 139, 178, 27, 188, 192, 103, 140, 146, 249, 178, }, { 224, 180, 59, 173, 59, 59, 61, 44, 214, 142, 14, 86, 108, 144, 31, 44, }, { 134, 101, 15, 151, 15, 15, 82, 205, 118, 47, 48, 105, 35, 197, 175, 205, }, { 170, 176, 92, 78, 92, 92, 177, 224, 35, 32, 66, 65, 209, 255, 19, 224, }, { 88, 105, 166, 113, 166, 166, 5, 90, 170, 30, 228, 80, 39, 116, 187, 90, }, { 36, 218, 65, 231, 65, 65, 209, 239, 190, 163, 147, 142, 247, 54, 173, 239, }, { 223, 212, 58, 145, 58, 58, 192, 30, 249, 197, 97, 93, 76, 81, 191, 30, }, { 105, 147, 89, 130, 89, 89, 62, 26, 176, 132, 82, 102, 113, 188, 118, 26, }, { 122, 38, 11, 103, 11, 11, 32, 5, 202, 192, 79, 69, 163, 71, 106, 5, }, { 103, 9, 167, 77, 167, 167, 248, 104, 133, 85, 139, 91, 7, 181, 27, 104, }, { 236, 93, 32, 140, 32, 32, 22, 143, 169, 116, 126, 163, 138, 154, 231, 143, }, { 48, 34, 108, 132, 108, 108, 172, 201, 63, 110, 3, 82, 30, 40, 102, 201, }, { 106, 56, 47, 27, 47, 47, 68, 66, 223, 91, 78, 202, 169, 95, 72, 66, }, { 14, 154, 254, 207, 254, 254, 198, 114, 53, 209, 217, 61, 118, 9, 109, 114, }, { 67, 211, 230, 170, 230, 230, 41, 135, 59, 246, 24, 213, 240, 131, 182, 135, }, { 45, 13, 192, 174, 192, 192, 116, 164, 112, 251, 199, 76, 186, 218, 23, 164, }, { 179, 121, 249, 123, 249, 249, 112, 236, 248, 227, 23, 12, 150, 11, 139, 236, }, { 228, 82, 50, 178, 50, 50, 36, 77, 66, 216, 159, 5, 143, 150, 246, 77, }, { 34, 79, 173, 22, 173, 173, 37, 95, 96, 222, 171, 21, 132, 51, 209, 95, }, { 171, 104, 207, 57, 207, 207, 38, 105, 6, 212, 247, 37, 153, 31, 184, 105, }, { 61, 19, 228, 210, 228, 228, 16, 227, 101, 96, 198, 195, 176, 194, 53, 227, }, { 52, 196, 101, 155, 101, 101, 181, 168, 171, 56, 146, 1, 253, 46, 143, 168, }, { 144, 238, 199, 26, 199, 199, 194, 58, 189, 201, 9, 125, 90, 216, 241, 58, }, { 151, 163, 184, 156, 184, 184, 161, 3, 70, 64, 132, 130, 97, 61, 38, 3, }, { 176, 210, 143, 226, 143, 143, 10, 180, 151, 60, 11, 160, 78, 232, 181, 180, }, { 229, 138, 161, 197, 161, 161, 179, 196, 103, 44, 42, 97, 199, 118, 93, 196, }, { 66, 11, 117, 221, 117, 117, 190, 14, 30, 2, 173, 177, 184, 99, 29, 14, }, { 121, 141, 125, 254, 125, 125, 90, 93, 165, 31, 83, 233, 123, 164, 84, 93, }, { 192, 136, 115, 85, 115, 115, 245, 162, 252, 123, 12, 139, 120, 160, 91, 162, }, { 24, 17, 54, 66, 54, 54, 86, 133, 254, 55, 224, 41, 15, 20, 51, 133, }, { 75, 220, 244, 148, 244, 244, 27, 69, 208, 90, 249, 115, 245, 143, 167, 69, }, { 247, 231, 96, 87, 96, 96, 58, 82, 56, 156, 130, 38, 93, 109, 234, 82, }, { 184, 221, 157, 220, 157, 157, 56, 118, 124, 144, 234, 6, 75, 228, 164, 118, }, { 166, 89, 71, 111, 71, 71, 154, 67, 92, 218, 50, 180, 55, 245, 235, 67, }, { 89, 177, 53, 6, 53, 53, 146, 211, 143, 234, 81, 52, 111, 148, 16, 211, }, { 100, 162, 209, 212, 209, 209, 130, 48, 234, 138, 151, 247, 223, 86, 37, 48, }, { 54, 183, 128, 117, 128, 128, 88, 121, 225, 19, 59, 201, 109, 45, 26, 121, }, { 180, 52, 134, 253, 134, 134, 19, 213, 3, 106, 154, 243, 173, 238, 92, 213, }, { 129, 40, 112, 17, 112, 112, 49, 244, 141, 166, 189, 150, 24, 32, 120, 244, }, { 9, 215, 129, 73, 129, 129, 165, 75, 206, 88, 84, 194, 77, 236, 186, 75, }, { 120, 85, 238, 137, 238, 238, 205, 212, 128, 235, 230, 141, 51, 68, 255, 212, }, { 237, 133, 179, 251, 179, 179, 129, 6, 140, 128, 203, 199, 194, 122, 76, 6, }, { 95, 36, 217, 247, 217, 217, 102, 99, 81, 151, 105, 175, 28, 145, 108, 99, }, { 218, 234, 160, 249, 160, 160, 78, 246, 72, 103, 69, 106, 231, 183, 253, 246, }, { 196, 110, 122, 74, 122, 122, 236, 195, 104, 45, 157, 216, 155, 166, 178, 195, }, { 41, 235, 201, 177, 201, 201, 109, 197, 228, 173, 86, 31, 89, 220, 254, 197, }, { 173, 253, 35, 200, 35, 35, 210, 217, 216, 169, 207, 190, 234, 26, 196, 217, }, { 7, 77, 127, 134, 127, 127, 99, 57, 251, 137, 141, 255, 59, 229, 215, 57, }, { 130, 131, 6, 136, 6, 6, 75, 172, 226, 121, 161, 58, 192, 195, 70, 172, }, { 226, 199, 222, 67, 222, 222, 208, 253, 156, 165, 167, 158, 252, 147, 138, 253, }, { 49, 250, 255, 243, 255, 255, 59, 64, 26, 154, 182, 54, 86, 200, 205, 64, }, { 23, 83, 91, 250, 91, 91, 7, 126, 238, 18, 140, 112, 49, 253, 245, 126, }, { 159, 172, 170, 162, 170, 170, 147, 193, 173, 236, 101, 36, 100, 49, 55, 193, }, { 11, 164, 100, 167, 100, 100, 72, 154, 132, 115, 253, 10, 221, 239, 47, 154, }, { 22, 139, 200, 141, 200, 200, 144, 247, 203, 230, 57, 20, 121, 29, 94, 247, }, { 127, 24, 145, 15, 145, 145, 174, 237, 123, 98, 107, 114, 8, 161, 40, 237, }, { 35, 151, 62, 97, 62, 62, 178, 214, 69, 42, 30, 113, 204, 211, 122, 214, }, { 107, 224, 188, 108, 188, 188, 211, 203, 250, 175, 251, 174, 225, 191, 227, 203, }, { 169, 27, 42, 215, 42, 42, 203, 184, 76, 255, 94, 237, 9, 28, 45, 184, }, { 139, 84, 135, 193, 135, 135, 238, 231, 44, 33, 245, 248, 141, 47, 252, 231, }, { 183, 159, 240, 100, 240, 240, 105, 141, 108, 181, 134, 95, 117, 13, 98, 141, }, { 19, 181, 82, 229, 82, 82, 30, 31, 122, 68, 29, 35, 210, 251, 28, 31, }, { 28, 247, 63, 93, 63, 63, 79, 228, 106, 97, 113, 122, 236, 18, 218, 228, }, { 251, 14, 123, 118, 123, 123, 17, 241, 71, 102, 242, 211, 187, 103, 18, 241, }, { 98, 55, 61, 37, 61, 61, 118, 128, 52, 247, 175, 108, 172, 83, 89, 128, }, { 242, 217, 250, 63, 250, 250, 180, 186, 137, 62, 166, 17, 246, 139, 168, 186, }, { 59, 134, 8, 35, 8, 8, 228, 83, 187, 29, 254, 88, 195, 199, 73, 83, }, { 154, 146, 48, 202, 48, 48, 29, 41, 28, 78, 65, 19, 207, 215, 117, 41, }, { 117, 100, 102, 223, 102, 102, 113, 254, 218, 229, 35, 28, 157, 174, 172, 254, }, { 234, 200, 204, 125, 204, 204, 226, 63, 119, 9, 70, 56, 249, 159, 155, 63, }, { 208, 150, 87, 41, 87, 87, 145, 229, 233, 224, 13, 4, 114, 184, 121, 229, }, { 42, 64, 191, 40, 191, 191, 23, 157, 139, 114, 74, 179, 129, 63, 192, 157, }, { 145, 54, 84, 109, 84, 84, 85, 179, 152, 61, 188, 25, 18, 56, 90, 179, }, { 2, 115, 229, 238, 229, 229, 237, 209, 74, 43, 169, 200, 144, 3, 149, 209, }, { 70, 237, 124, 194, 124, 124, 167, 111, 138, 84, 60, 226, 91, 101, 244, 111, }, { 167, 129, 212, 24, 212, 212, 13, 202, 121, 46, 135, 208, 127, 21, 64, 202, }, { 220, 127, 76, 8, 76, 76, 186, 70, 150, 26, 125, 241, 148, 178, 129, 70, }, { 39, 113, 55, 126, 55, 55, 171, 183, 209, 124, 143, 34, 47, 213, 147, 183, }, { 118, 207, 16, 70, 16, 16, 11, 166, 181, 58, 63, 176, 69, 77, 146, 166, }, { 164, 42, 162, 129, 162, 162, 119, 146, 22, 241, 155, 124, 167, 246, 126, 146, }, { 202, 244, 132, 133, 132, 132, 42, 177, 93, 252, 68, 229, 237, 175, 223, 177, }, { 150, 123, 43, 235, 43, 43, 54, 138, 99, 180, 49, 230, 41, 221, 141, 138, }, { 112, 90, 252, 183, 252, 252, 255, 22, 107, 71, 7, 43, 54, 72, 238, 22, }, { 84, 128, 189, 80, 189, 189, 46, 249, 213, 228, 148, 165, 193, 126, 67, 249, }, { 225, 108, 168, 218, 168, 168, 170, 165, 243, 122, 187, 50, 36, 112, 180, 165, }, { 111, 6, 181, 115, 181, 181, 202, 170, 110, 249, 106, 253, 2, 185, 10, 170, }, { 57, 245, 237, 205, 237, 237, 9, 130, 241, 54, 87, 144, 83, 196, 220, 130, }, { 51, 137, 26, 29, 26, 26, 214, 145, 80, 177, 31, 254, 198, 203, 88, 145, }, { 219, 50, 51, 142, 51, 51, 217, 127, 109, 147, 240, 14, 175, 87, 86, 127, }, { 160, 204, 171, 158, 171, 171, 110, 243, 130, 167, 10, 47, 68, 240, 151, 243, }, { 254, 48, 225, 30, 225, 225, 159, 25, 246, 196, 214, 228, 16, 129, 80, 25, }, { 178, 161, 106, 12, 106, 106, 231, 101, 221, 23, 162, 104, 222, 235, 32, 101, }, { 16, 30, 36, 124, 36, 36, 100, 71, 21, 155, 1, 143, 10, 24, 34, 71, }, { 113, 130, 111, 192, 111, 111, 104, 159, 78, 179, 178, 79, 126, 168, 69, 159, }, { 135, 189, 156, 224, 156, 156, 197, 68, 83, 219, 133, 13, 107, 37, 4, 68, }, { 53, 28, 246, 236, 246, 246, 34, 33, 142, 204, 39, 101, 181, 206, 36, 33, }, { 56, 45, 126, 186, 126, 126, 158, 11, 212, 194, 226, 244, 27, 36, 119, 11, }, { 82, 21, 81, 161, 81, 81, 218, 73, 11, 153, 172, 62, 178, 123, 63, 73, }, { 101, 122, 66, 163, 66, 66, 21, 185, 207, 126, 34, 147, 151, 182, 142, 185, }, { 222, 12, 169, 230, 169, 169, 87, 151, 220, 49, 212, 57, 4, 177, 20, 151, }, { 142, 106, 29, 169, 29, 29, 96, 15, 157, 131, 209, 207, 38, 201, 190, 15, }, { 168, 195, 185, 160, 185, 185, 92, 49, 105, 11, 235, 137, 65, 252, 134, 49, }, { 253, 155, 151, 135, 151, 151, 229, 65, 153, 27, 202, 72, 200, 98, 110, 65, }, { 46, 166, 182, 55, 182, 182, 14, 252, 31, 36, 219, 224, 98, 57, 41, 252, }, { 1, 216, 147, 119, 147, 147, 151, 137, 37, 244, 181, 100, 72, 224, 171, 137, }, { 248, 165, 13, 239, 13, 13, 107, 169, 40, 185, 238, 127, 99, 132, 44, 169, }, { 140, 25, 248, 71, 248, 248, 141, 222, 215, 168, 120, 7, 182, 202, 43, 222, }, { 187, 118, 235, 69, 235, 235, 66, 46, 19, 79, 246, 170, 147, 7, 154, 46, }, { 73, 175, 17, 122, 17, 17, 246, 148, 154, 113, 80, 187, 101, 140, 50, 148, }, { 68, 158, 153, 44, 153, 153, 74, 190, 192, 127, 149, 42, 203, 102, 97, 190, }, { 191, 144, 226, 90, 226, 226, 91, 79, 135, 25, 103, 249, 112, 1, 115, 79, }, { 239, 246, 86, 21, 86, 86, 108, 215, 198, 171, 98, 15, 82, 121, 217, 215, }, { 252, 67, 4, 240, 4, 4, 114, 200, 188, 239, 127, 44, 128, 130, 197, 200, }, { 58, 94, 155, 84, 155, 155, 115, 218, 158, 233, 75, 60, 139, 39, 226, 218, }, { 177, 10, 28, 149, 28, 28, 157, 61, 178, 200, 190, 196, 6, 8, 30, 61, }, { 249, 125, 158, 152, 158, 158, 252, 32, 13, 77, 91, 27, 43, 100, 135, 32, }, { 153, 57, 70, 83, 70, 70, 103, 113, 115, 145, 93, 191, 23, 52, 75, 113, }, { 216, 153, 69, 23, 69, 69, 163, 39, 2, 76, 236, 162, 119, 180, 104, 39, }, { 201, 95, 242, 28, 242, 242, 80, 233, 50, 35, 88, 73, 53, 76, 225, 233, }, { 97, 156, 75, 188, 75, 75, 12, 216, 91, 40, 179, 192, 116, 176, 103, 216, }, { 60, 203, 119, 165, 119, 119, 135, 106, 64, 148, 115, 167, 248, 34, 158, 106, }, { 137, 39, 98, 47, 98, 98, 3, 54, 102, 10, 92, 48, 29, 44, 105, 54, }, { 15, 66, 109, 184, 109, 109, 81, 251, 16, 37, 108, 89, 62, 233, 198, 251, }, { 92, 143, 175, 110, 175, 175, 28, 59, 62, 72, 117, 3, 196, 114, 82, 59, }, { 190, 72, 113, 45, 113, 113, 204, 198, 162, 237, 210, 157, 56, 225, 216, 198, }, { 194, 251, 150, 187, 150, 150, 24, 115, 182, 80, 165, 67, 232, 163, 206, 115, }, { 197, 182, 233, 61, 233, 233, 123, 74, 77, 217, 40, 188, 211, 70, 25, 74, }, { 136, 255, 241, 88, 241, 241, 148, 191, 67, 254, 233, 84, 85, 204, 194, 191, }, { 161, 20, 56, 233, 56, 56, 249, 122, 167, 83, 191, 75, 12, 16, 60, 122, }, { 29, 47, 172, 42, 172, 172, 216, 109, 79, 149, 196, 30, 164, 242, 113, 109, }, { 199, 197, 12, 211, 12, 12, 150, 155, 7, 242, 129, 116, 67, 69, 140, 155, }, { 108, 173, 195, 234, 195, 195, 176, 242, 1, 38, 118, 81, 218, 90, 52, 242, }, { 133, 206, 121, 14, 121, 121, 40, 149, 25, 240, 44, 197, 251, 38, 145, 149, }, { 157, 223, 79, 76, 79, 79, 126, 16, 231, 199, 204, 236, 244, 50, 162, 16, }, { 211, 61, 33, 176, 33, 33, 235, 189, 134, 63, 17, 168, 170, 91, 71, 189, }, { 209, 78, 196, 94, 196, 196, 6, 108, 204, 20, 184, 96, 58, 88, 210, 108, }, { 30, 132, 218, 179, 218, 218, 162, 53, 32, 74, 216, 178, 124, 17, 79, 53, }, { 62, 184, 146, 75, 146, 146, 106, 187, 10, 191, 218, 111, 104, 33, 11, 187, }, { 132, 22, 234, 121, 234, 234, 191, 28, 60, 4, 153, 161, 179, 198, 58, 28, }, { 47, 126, 37, 64, 37, 37, 153, 117, 58, 208, 110, 132, 42, 217, 130, 117, }, { 125, 107, 116, 225, 116, 116, 67, 60, 49, 73, 194, 186, 152, 162, 189, 60, }, { 116, 188, 245, 168, 245, 245, 230, 119, 255, 17, 150, 120, 213, 78, 7, 119, }, { 65, 160, 3, 68, 3, 3, 196, 86, 113, 221, 177, 29, 96, 128, 35, 86, }, { 80, 102, 180, 79, 180, 180, 55, 152, 65, 178, 5, 246, 34, 120, 170, 152, }, { 33, 228, 219, 143, 219, 219, 95, 7, 15, 1, 183, 185, 92, 208, 239, 7, }, { 85, 88, 46, 39, 46, 46, 185, 112, 240, 16, 33, 193, 137, 158, 232, 112, }, { 231, 249, 68, 43, 68, 68, 94, 21, 45, 7, 131, 169, 87, 117, 200, 21, }, { 205, 185, 251, 3, 251, 251, 73, 136, 166, 117, 201, 26, 214, 74, 8, 136, }, { 13, 49, 136, 86, 136, 136, 188, 42, 90, 14, 197, 145, 174, 234, 83, 42, }, { 124, 179, 231, 150, 231, 231, 212, 181, 20, 189, 119, 222, 208, 66, 22, 181, }, { 55, 111, 19, 2, 19, 19, 207, 240, 196, 231, 142, 173, 37, 205, 177, 240, }, { 26, 98, 211, 172, 211, 211, 187, 84, 180, 28, 73, 225, 159, 23, 166, 84, }, { 162, 191, 78, 112, 78, 78, 131, 34, 200, 140, 163, 231, 212, 243, 2, 34, }, { 175, 142, 198, 38, 198, 198, 63, 8, 146, 130, 102, 118, 122, 25, 81, 8, }, { 246, 63, 243, 32, 243, 243, 173, 219, 29, 104, 55, 66, 21, 141, 65, 219, }, { 232, 187, 41, 147, 41, 41, 15, 238, 61, 34, 239, 240, 105, 156, 14, 238, }, { 126, 192, 2, 120, 2, 2, 57, 100, 94, 150, 222, 22, 64, 65, 131, 100, }, { 94, 252, 74, 128, 74, 74, 241, 234, 116, 99, 220, 203, 84, 113, 199, 234, }, { 250, 214, 232, 1, 232, 232, 134, 120, 98, 146, 71, 183, 243, 135, 185, 120, }, { 181, 236, 21, 138, 21, 21, 132, 92, 38, 158, 47, 151, 229, 14, 247, 92, }, { 146, 157, 34, 244, 34, 34, 47, 235, 247, 226, 160, 181, 202, 219, 100, 235, }, { 86, 243, 88, 190, 88, 88, 195, 40, 159, 207, 61, 109, 81, 125, 214, 40, }, { 241, 114, 140, 166, 140, 140, 206, 226, 230, 225, 186, 189, 46, 104, 150, 226, }, { 4, 230, 9, 31, 9, 9, 25, 97, 148, 86, 145, 83, 227, 6, 233, 97, }, { 110, 222, 38, 4, 38, 38, 93, 35, 75, 13, 223, 153, 74, 89, 161, 35, }, { 165, 242, 49, 246, 49, 49, 224, 27, 51, 5, 46, 24, 239, 22, 213, 27, }, { 230, 33, 215, 92, 215, 215, 201, 156, 8, 243, 54, 205, 31, 149, 99, 156, }, { 200, 135, 97, 107, 97, 97, 199, 96, 23, 215, 237, 45, 125, 172, 74, 96, }, { 123, 254, 152, 16, 152, 152, 183, 140, 239, 52, 250, 33, 235, 167, 193, 140, }, { 115, 241, 138, 46, 138, 138, 133, 78, 4, 152, 27, 135, 238, 171, 208, 78, }, { 81, 190, 39, 56, 39, 39, 160, 17, 100, 70, 176, 146, 106, 152, 1, 17, }, { 149, 208, 93, 114, 93, 93, 76, 210, 12, 107, 45, 74, 241, 62, 179, 210, }, { 102, 209, 52, 58, 52, 52, 111, 225, 160, 161, 62, 63, 79, 85, 176, 225, }, { 214, 3, 187, 216, 187, 187, 101, 85, 55, 157, 53, 159, 1, 189, 5, 85, }, { 91, 194, 208, 232, 208, 208, 127, 2, 197, 193, 248, 252, 255, 151, 133, 2, }, { 227, 31, 77, 52, 77, 77, 71, 116, 185, 81, 18, 250, 180, 115, 33, 116, }, { 99, 239, 174, 82, 174, 174, 225, 9, 17, 3, 26, 8, 228, 179, 242, 9, }, { 155, 74, 163, 189, 163, 163, 138, 160, 57, 186, 244, 119, 135, 55, 222, 160, }, { 189, 227, 7, 180, 7, 7, 182, 158, 205, 50, 206, 49, 224, 2, 230, 158, }, { 119, 23, 131, 49, 131, 131, 156, 47, 144, 206, 138, 212, 13, 173, 57, 47, }, { 141, 193, 107, 48, 107, 107, 26, 87, 242, 92, 205, 99, 254, 42, 128, 87, }, { 188, 59, 148, 195, 148, 148, 33, 23, 232, 198, 123, 85, 168, 226, 77, 23, }, { 243, 1, 105, 72, 105, 105, 35, 51, 172, 202, 19, 117, 190, 107, 3, 51, }, { 244, 76, 22, 206, 22, 22, 64, 10, 87, 67, 158, 138, 133, 142, 212, 10, }, { 38, 169, 164, 9, 164, 164, 60, 62, 244, 136, 58, 70, 103, 53, 56, 62, }, { 212, 112, 94, 54, 94, 94, 136, 132, 125, 182, 156, 87, 145, 190, 144, 132, }, { 128, 240, 227, 102, 227, 227, 166, 125, 168, 82, 8, 242, 80, 192, 211, 125, }, { 147, 69, 177, 131, 177, 177, 184, 98, 210, 22, 21, 209, 130, 59, 207, 98, }, { 182, 71, 99, 19, 99, 99, 254, 4, 73, 65, 51, 59, 61, 237, 201, 4, }, { 21, 32, 190, 20, 190, 190, 234, 175, 164, 57, 37, 184, 161, 254, 96, 175, }, { 204, 97, 104, 116, 104, 104, 222, 1, 131, 129, 124, 126, 158, 170, 163, 1, }, { 172, 37, 176, 191, 176, 176, 69, 80, 253, 93, 122, 218, 162, 250, 111, 80, }, { 193, 80, 224, 34, 224, 224, 98, 43, 217, 143, 185, 239, 48, 64, 240, 43, }, { 238, 46, 197, 98, 197, 197, 251, 94, 227, 95, 215, 107, 26, 153, 114, 94, }, { 174, 86, 85, 81, 85, 85, 168, 129, 183, 118, 211, 18, 50, 249, 250, 129, }, { 156, 7, 220, 59, 220, 220, 233, 153, 194, 51, 121, 136, 188, 210, 9, 153, }, { 217, 65, 214, 96, 214, 214, 52, 174, 39, 184, 89, 198, 63, 84, 195, 174, }, { 163, 103, 221, 7, 221, 221, 20, 171, 237, 120, 22, 131, 156, 19, 169, 171, }, { 37, 2, 210, 144, 210, 210, 70, 102, 155, 87, 38, 234, 191, 214, 6, 102, }, { 235, 16, 95, 10, 95, 95, 117, 182, 82, 253, 243, 92, 177, 127, 48, 182, }, { 64, 120, 144, 51, 144, 144, 83, 223, 84, 41, 4, 121, 40, 96, 136, 223, }, { 72, 119, 130, 13, 130, 130, 97, 29, 191, 133, 229, 223, 45, 108, 153, 29, }, { 109, 117, 80, 157, 80, 80, 39, 123, 36, 210, 195, 53, 146, 186, 159, 123, }, { 40, 51, 90, 198, 90, 90, 250, 76, 193, 89, 227, 123, 17, 60, 85, 76, }, { 255, 232, 114, 105, 114, 114, 8, 144, 211, 48, 99, 128, 88, 97, 251, 144, }, { 10, 124, 247, 208, 247, 247, 223, 19, 161, 135, 72, 110, 149, 15, 132, 19, }, { 79, 58, 253, 139, 253, 253, 2, 36, 68, 12, 104, 32, 22, 137, 78, 36, }, { 25, 201, 165, 53, 165, 165, 193, 12, 219, 195, 85, 77, 71, 244, 152, 12, }, { 83, 205, 194, 214, 194, 194, 77, 192, 46, 109, 25, 90, 250, 155, 148, 192, }, { 245, 148, 133, 185, 133, 133, 215, 131, 114, 183, 43, 238, 205, 110, 127, 131, }, { 185, 5, 14, 171, 14, 14, 175, 255, 89, 100, 95, 98, 3, 4, 15, 255, }, { 203, 44, 23, 242, 23, 23, 189, 56, 120, 8, 241, 129, 165, 79, 116, 56, }, { 69, 70, 10, 91, 10, 10, 221, 55, 229, 139, 32, 78, 131, 134, 202, 55, }, { 87, 43, 203, 201, 203, 203, 84, 161, 186, 59, 136, 9, 25, 157, 125, 161, }, { 215, 219, 40, 175, 40, 40, 242, 220, 18, 105, 128, 251, 73, 93, 174, 220, }, { 104, 75, 202, 245, 202, 202, 169, 147, 149, 112, 231, 2, 57, 92, 221, 147, }, { 76, 145, 139, 18, 139, 139, 120, 124, 43, 211, 116, 140, 206, 106, 112, 124, }, { 32, 60, 72, 248, 72, 72, 200, 142, 42, 245, 2, 221, 20, 48, 68, 142, }, { 74, 4, 103, 227, 103, 103, 140, 204, 245, 174, 76, 23, 189, 111, 12, 204, }, { 5, 62, 154, 104, 154, 154, 142, 232, 177, 162, 36, 55, 171, 230, 66, 232, }, { 198, 29, 159, 164, 159, 159, 1, 18, 34, 6, 52, 16, 11, 165, 39, 18, }, { 20, 248, 45, 99, 45, 45, 125, 38, 129, 205, 144, 220, 233, 30, 203, 38, }, { 158, 116, 57, 213, 57, 57, 4, 72, 136, 24, 208, 64, 44, 209, 156, 72, }, { 213, 168, 205, 65, 205, 205, 31, 13, 88, 66, 41, 51, 217, 94, 59, 13, }, { 77, 73, 24, 101, 24, 24, 239, 245, 14, 39, 193, 232, 134, 138, 219, 245, }, { 206, 18, 141, 154, 141, 141, 51, 208, 201, 170, 213, 182, 14, 169, 54, 208, }, { 90, 26, 67, 159, 67, 67, 232, 139, 224, 53, 77, 152, 183, 119, 46, 139, }, { 63, 96, 1, 60, 1, 1, 253, 50, 47, 75, 111, 11, 32, 193, 160, 50, }, { 138, 140, 20, 182, 20, 20, 121, 110, 9, 213, 64, 156, 197, 207, 87, 110, }, { 131, 91, 149, 255, 149, 149, 220, 37, 199, 141, 20, 94, 136, 35, 237, 37, }, { 195, 35, 5, 204, 5, 5, 143, 250, 147, 164, 16, 39, 160, 67, 101, 250, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 148, 8, 206, 5, 206, 206, 219, 91, 41, 159, 152, 46, 185, 222, 24, 91, }, { 31, 92, 73, 196, 73, 73, 53, 188, 5, 190, 109, 214, 52, 241, 228, 188, }, { 152, 225, 213, 36, 213, 213, 240, 248, 86, 101, 232, 219, 95, 212, 224, 248, }, }, { { 171, 95, 15, 197, 151, 9, 124, 201, 66, 197, 57, 189, 253, 129, 135, 254, }, { 187, 165, 206, 222, 5, 221, 28, 248, 18, 222, 69, 97, 195, 223, 204, 43, }, { 131, 21, 207, 31, 57, 8, 140, 82, 202, 31, 255, 168, 158, 18, 213, 28, }, { 13, 229, 153, 102, 44, 195, 46, 210, 57, 102, 86, 36, 43, 5, 95, 6, }, { 58, 62, 176, 250, 191, 46, 156, 5, 210, 250, 84, 51, 42, 182, 40, 101, }, { 74, 157, 178, 187, 199, 71, 127, 146, 161, 187, 227, 98, 144, 239, 26, 11, }, { 232, 248, 133, 110, 185, 184, 53, 20, 206, 110, 147, 204, 168, 157, 160, 87, }, { 235, 49, 141, 169, 154, 223, 63, 13, 193, 169, 10, 75, 5, 58, 104, 44, }, { 143, 183, 239, 133, 181, 87, 164, 54, 246, 133, 222, 241, 111, 203, 115, 51, }, { 190, 61, 214, 84, 96, 116, 2, 211, 3, 84, 45, 43, 247, 245, 87, 166, }, { 15, 107, 40, 93, 175, 56, 34, 125, 51, 93, 184, 222, 92, 126, 110, 84, }, { 109, 188, 90, 60, 198, 126, 173, 116, 26, 60, 157, 169, 175, 2, 38, 189, }, { 10, 243, 48, 215, 202, 145, 60, 86, 34, 215, 208, 148, 104, 84, 245, 217, }, { 41, 13, 121, 38, 14, 157, 246, 45, 141, 38, 177, 104, 185, 79, 171, 203, }, { 23, 236, 104, 170, 116, 134, 114, 181, 75, 170, 250, 108, 125, 15, 225, 10, }, { 176, 17, 71, 245, 111, 208, 38, 24, 53, 245, 226, 136, 113, 87, 192, 219, }, { 197, 42, 93, 62, 114, 16, 219, 164, 87, 62, 61, 147, 255, 36, 105, 56, }, { 76, 204, 162, 246, 129, 137, 107, 160, 191, 246, 18, 175, 9, 98, 73, 253, }, { 195, 123, 77, 115, 52, 222, 207, 150, 73, 115, 204, 94, 102, 169, 58, 206, }, { 181, 137, 95, 127, 10, 121, 56, 51, 36, 127, 138, 194, 69, 125, 91, 86, }, { 116, 124, 163, 55, 189, 92, 251, 10, 103, 55, 168, 102, 84, 175, 80, 202, }, { 148, 249, 167, 181, 77, 142, 254, 231, 129, 181, 5, 196, 227, 29, 52, 22, }, { 29, 31, 88, 125, 190, 23, 78, 227, 105, 125, 42, 248, 21, 91, 20, 211, }, { 37, 175, 89, 188, 130, 194, 222, 73, 177, 188, 144, 49, 72, 150, 13, 228, }, { 72, 19, 3, 128, 68, 188, 115, 61, 171, 128, 13, 152, 231, 148, 43, 89, }, { 218, 187, 180, 120, 79, 252, 153, 232, 52, 120, 249, 145, 157, 4, 76, 185, }, { 221, 173, 29, 201, 169, 174, 139, 108, 47, 201, 127, 33, 222, 85, 230, 102, }, { 233, 191, 60, 146, 25, 36, 51, 162, 203, 146, 228, 177, 114, 65, 89, 126, }, { 234, 118, 52, 85, 58, 67, 57, 187, 196, 85, 125, 54, 223, 230, 145, 5, }, { 115, 106, 10, 134, 91, 14, 233, 142, 124, 134, 46, 214, 23, 254, 250, 21, }, { 46, 27, 208, 151, 232, 207, 228, 169, 150, 151, 55, 216, 250, 30, 1, 20, }, { 245, 231, 221, 19, 7, 175, 123, 247, 167, 19, 185, 52, 189, 198, 180, 132, }, { 38, 102, 81, 123, 161, 165, 212, 80, 190, 123, 9, 182, 229, 49, 197, 159, }, { 208, 72, 132, 175, 133, 109, 165, 190, 22, 175, 41, 5, 245, 80, 185, 96, }, { 196, 109, 228, 194, 210, 140, 221, 18, 82, 194, 74, 238, 37, 248, 144, 17, }, { 243, 182, 205, 94, 65, 97, 111, 197, 185, 94, 72, 249, 36, 75, 231, 114, }, { 123, 23, 139, 106, 18, 100, 217, 119, 84, 106, 16, 184, 8, 209, 62, 158, }, { 77, 139, 27, 10, 33, 21, 109, 22, 186, 10, 101, 210, 211, 190, 176, 212, }, { 69, 246, 154, 230, 104, 127, 93, 239, 146, 230, 91, 188, 204, 145, 116, 95, }, { 169, 209, 190, 254, 20, 242, 112, 102, 72, 254, 215, 71, 138, 250, 182, 172, }, { 94, 184, 210, 214, 144, 166, 7, 62, 229, 214, 128, 137, 64, 71, 51, 122, }, { 216, 53, 5, 67, 204, 7, 149, 71, 62, 67, 23, 107, 234, 127, 125, 235, }, { 126, 143, 147, 224, 119, 205, 199, 92, 69, 224, 120, 242, 60, 251, 165, 19, }, { 242, 241, 116, 162, 225, 253, 105, 115, 188, 162, 63, 132, 254, 151, 30, 91, }, { 144, 38, 6, 195, 136, 187, 230, 122, 149, 195, 26, 243, 13, 235, 86, 178, }, { 119, 181, 171, 240, 158, 59, 241, 19, 104, 240, 49, 225, 249, 8, 152, 177, }, { 83, 93, 75, 176, 188, 101, 41, 236, 220, 176, 214, 173, 107, 66, 108, 124, }, { 229, 29, 28, 8, 149, 123, 27, 198, 247, 8, 197, 232, 131, 152, 255, 81, }, { 73, 84, 186, 124, 228, 32, 117, 139, 174, 124, 122, 229, 61, 72, 210, 112, }, { 152, 91, 135, 47, 193, 209, 214, 131, 189, 47, 36, 157, 18, 196, 146, 57, }, { 19, 51, 201, 220, 177, 179, 106, 40, 95, 220, 229, 91, 147, 249, 131, 174, }, { 67, 167, 138, 171, 46, 177, 73, 221, 140, 171, 170, 113, 85, 28, 39, 169, }, { 220, 234, 164, 53, 9, 50, 141, 218, 42, 53, 8, 92, 4, 137, 31, 79, }, { 199, 164, 236, 5, 241, 235, 215, 11, 93, 5, 211, 105, 136, 95, 88, 106, }, { 160, 235, 134, 238, 253, 4, 70, 41, 101, 238, 158, 84, 79, 9, 139, 14, }, { 204, 16, 101, 46, 155, 230, 237, 235, 122, 46, 116, 128, 58, 215, 84, 154, }, { 20, 37, 96, 109, 87, 225, 120, 172, 68, 109, 99, 235, 208, 168, 41, 113, }, { 82, 26, 242, 76, 28, 249, 47, 90, 217, 76, 161, 208, 177, 158, 149, 85, }, { 47, 92, 105, 107, 72, 83, 226, 31, 147, 107, 64, 165, 32, 194, 248, 61, }, { 71, 120, 43, 221, 235, 132, 81, 64, 152, 221, 181, 70, 187, 234, 69, 13, }, { 166, 186, 150, 163, 187, 202, 82, 27, 123, 163, 111, 153, 214, 132, 216, 248, }, { 95, 255, 107, 42, 48, 58, 1, 136, 224, 42, 247, 244, 154, 155, 202, 83, }, { 227, 76, 12, 69, 211, 181, 15, 244, 233, 69, 52, 37, 26, 21, 172, 167, }, { 184, 108, 198, 25, 38, 186, 22, 225, 29, 25, 220, 230, 110, 120, 4, 80, }, { 167, 253, 47, 95, 27, 86, 84, 173, 126, 95, 24, 228, 12, 88, 33, 209, }, { 192, 178, 69, 180, 23, 185, 197, 143, 70, 180, 85, 217, 203, 14, 242, 181, }, { 35, 254, 73, 241, 196, 12, 202, 123, 175, 241, 97, 252, 209, 27, 94, 18, }, { 42, 196, 113, 225, 45, 250, 252, 52, 130, 225, 40, 239, 20, 232, 99, 176, }, { 98, 215, 114, 97, 105, 70, 143, 9, 41, 97, 37, 119, 243, 124, 72, 233, }, { 125, 70, 155, 39, 84, 170, 205, 69, 74, 39, 225, 117, 145, 92, 109, 104, }, { 49, 138, 57, 209, 213, 35, 166, 229, 245, 209, 243, 218, 152, 62, 36, 149, }, { 48, 205, 128, 45, 117, 191, 160, 83, 240, 45, 132, 167, 66, 226, 221, 188, }, { 193, 245, 252, 72, 183, 37, 195, 57, 67, 72, 34, 164, 17, 210, 11, 156, }, { 32, 55, 65, 54, 231, 107, 192, 98, 160, 54, 248, 123, 124, 188, 150, 105, }, { 138, 47, 247, 15, 208, 254, 186, 29, 231, 15, 182, 187, 91, 225, 232, 190, }, { 215, 94, 45, 30, 99, 63, 183, 58, 13, 30, 175, 181, 182, 1, 19, 191, }, { 61, 40, 25, 75, 89, 124, 142, 129, 201, 75, 210, 131, 105, 231, 130, 186, }, { 191, 122, 111, 168, 192, 232, 4, 101, 6, 168, 90, 86, 45, 41, 174, 143, }, { 198, 227, 85, 249, 81, 119, 209, 189, 88, 249, 164, 20, 82, 131, 161, 67, }, { 114, 45, 179, 122, 251, 146, 239, 56, 121, 122, 89, 171, 205, 34, 3, 60, }, { 219, 252, 13, 132, 239, 96, 159, 94, 49, 132, 142, 236, 71, 216, 181, 144, }, { 21, 98, 217, 145, 247, 125, 126, 26, 65, 145, 20, 150, 10, 116, 208, 88, }, { 153, 28, 62, 211, 97, 77, 208, 53, 184, 211, 83, 224, 200, 24, 107, 16, }, { 75, 218, 11, 71, 103, 219, 121, 36, 164, 71, 148, 31, 74, 51, 227, 34, }, { 52, 18, 33, 91, 176, 138, 184, 206, 228, 91, 155, 144, 172, 20, 191, 24, }, { 96, 89, 195, 90, 234, 189, 131, 166, 35, 90, 203, 141, 132, 7, 121, 187, }, { 146, 168, 183, 248, 11, 64, 234, 213, 159, 248, 244, 9, 122, 144, 103, 224, }, { 172, 73, 166, 116, 113, 91, 110, 77, 89, 116, 191, 13, 190, 208, 45, 33, }, { 110, 117, 82, 251, 229, 25, 167, 109, 21, 251, 4, 46, 2, 165, 238, 198, }, { 161, 172, 63, 18, 93, 152, 64, 159, 96, 18, 233, 41, 149, 213, 114, 39, }, { 129, 155, 126, 36, 186, 243, 128, 253, 192, 36, 17, 82, 233, 105, 228, 78, }, { 59, 121, 9, 6, 31, 178, 154, 179, 215, 6, 35, 78, 240, 106, 209, 76, }, { 25, 192, 249, 11, 123, 34, 86, 126, 125, 11, 53, 207, 251, 173, 118, 119, }, { 228, 90, 165, 244, 53, 231, 29, 112, 242, 244, 178, 149, 89, 68, 6, 120, }, { 44, 149, 97, 172, 107, 52, 232, 6, 156, 172, 217, 34, 141, 101, 48, 70, }, { 189, 244, 222, 147, 67, 19, 8, 202, 12, 147, 180, 172, 90, 82, 159, 221, }, { 182, 64, 87, 184, 41, 30, 50, 42, 43, 184, 19, 69, 232, 218, 147, 45, }, { 211, 129, 140, 104, 166, 10, 175, 167, 25, 104, 176, 130, 88, 247, 113, 27, }, { 231, 147, 173, 51, 22, 128, 23, 105, 253, 51, 43, 18, 244, 227, 206, 3, }, { 155, 146, 143, 232, 226, 182, 220, 154, 178, 232, 189, 26, 191, 99, 90, 66, }, { 140, 126, 231, 66, 150, 48, 174, 47, 249, 66, 71, 118, 194, 108, 187, 72, }, { 4, 223, 161, 118, 197, 53, 24, 157, 20, 118, 31, 55, 238, 246, 98, 164, }, { 134, 141, 215, 149, 92, 161, 146, 121, 219, 149, 151, 226, 170, 56, 78, 145, }, { 239, 238, 44, 223, 95, 234, 39, 144, 213, 223, 21, 124, 235, 204, 10, 136, }, { 50, 67, 49, 22, 246, 68, 172, 252, 250, 22, 106, 93, 53, 153, 236, 238, }, { 11, 180, 137, 43, 106, 13, 58, 224, 39, 43, 167, 233, 178, 136, 12, 240, }, { 158, 10, 151, 98, 135, 31, 194, 177, 163, 98, 213, 80, 139, 73, 193, 207, }, { 128, 220, 199, 216, 26, 111, 134, 75, 197, 216, 102, 47, 51, 181, 29, 103, }, { 28, 88, 225, 129, 30, 139, 72, 85, 108, 129, 93, 133, 207, 135, 237, 250, }, { 177, 86, 254, 9, 207, 76, 32, 174, 48, 9, 149, 245, 171, 139, 57, 242, }, { 212, 151, 37, 217, 64, 88, 189, 35, 2, 217, 54, 50, 27, 166, 219, 196, }, { 122, 80, 50, 150, 178, 248, 223, 193, 81, 150, 103, 197, 210, 13, 199, 183, }, { 91, 32, 202, 92, 245, 15, 25, 21, 244, 92, 232, 195, 116, 109, 168, 247, }, { 163, 34, 142, 41, 222, 99, 76, 48, 106, 41, 7, 211, 226, 174, 67, 117, }, { 249, 69, 253, 137, 139, 240, 83, 147, 155, 137, 152, 109, 76, 31, 18, 171, }, { 51, 4, 136, 234, 86, 216, 170, 74, 255, 234, 29, 32, 239, 69, 21, 199, }, { 104, 36, 66, 182, 163, 215, 179, 95, 11, 182, 245, 227, 155, 40, 189, 48, }, { 150, 119, 22, 142, 206, 117, 242, 72, 139, 142, 235, 62, 148, 102, 5, 68, }, { 70, 63, 146, 33, 75, 24, 87, 246, 157, 33, 194, 59, 97, 54, 188, 36, }, { 2, 142, 177, 59, 131, 251, 12, 175, 10, 59, 238, 250, 119, 123, 49, 82, }, { 255, 20, 237, 196, 205, 62, 71, 161, 133, 196, 105, 160, 213, 146, 65, 93, }, { 149, 190, 30, 73, 237, 18, 248, 81, 132, 73, 114, 185, 57, 193, 205, 63, }, { 100, 134, 98, 44, 47, 136, 155, 59, 55, 44, 212, 186, 106, 241, 27, 31, }, { 64, 110, 130, 108, 13, 214, 67, 196, 131, 108, 51, 246, 248, 187, 239, 210, }, { 65, 41, 59, 144, 173, 74, 69, 114, 134, 144, 68, 139, 34, 103, 22, 251, }, { 22, 171, 209, 86, 212, 26, 116, 3, 78, 86, 141, 17, 167, 211, 24, 35, }, { 14, 44, 145, 161, 15, 164, 36, 203, 54, 161, 207, 163, 134, 162, 151, 125, }, { 185, 43, 127, 229, 134, 38, 16, 87, 24, 229, 171, 155, 180, 164, 253, 121, }, { 253, 154, 92, 255, 78, 197, 75, 14, 143, 255, 135, 90, 162, 233, 112, 15, }, { 111, 50, 235, 7, 69, 133, 161, 219, 16, 7, 115, 83, 216, 121, 23, 239, }, { 145, 97, 191, 63, 40, 39, 224, 204, 144, 63, 109, 142, 215, 55, 175, 155, }, { 165, 115, 158, 100, 152, 173, 88, 2, 116, 100, 246, 30, 123, 35, 16, 131, }, { 207, 217, 109, 233, 184, 129, 231, 242, 117, 233, 237, 7, 151, 112, 156, 225, }, { 86, 197, 83, 58, 217, 204, 55, 199, 205, 58, 190, 231, 95, 104, 247, 241, }, { 186, 226, 119, 34, 165, 65, 26, 78, 23, 34, 50, 28, 25, 3, 53, 2, }, { 97, 30, 122, 166, 74, 33, 133, 16, 38, 166, 188, 240, 94, 219, 128, 146, }, { 24, 135, 64, 247, 219, 190, 80, 200, 120, 247, 66, 178, 33, 113, 143, 94, }, { 84, 75, 226, 1, 90, 55, 59, 104, 199, 1, 80, 29, 40, 19, 198, 163, }, { 139, 104, 78, 243, 112, 98, 188, 171, 226, 243, 193, 198, 129, 61, 17, 151, }, { 62, 225, 17, 140, 122, 27, 132, 152, 198, 140, 75, 4, 196, 64, 74, 193, }, { 90, 103, 115, 160, 85, 147, 31, 163, 241, 160, 159, 190, 174, 177, 81, 222, }, { 206, 158, 212, 21, 24, 29, 225, 68, 112, 21, 154, 122, 77, 172, 101, 200, }, { 247, 105, 108, 40, 132, 84, 119, 88, 173, 40, 87, 206, 202, 189, 133, 214, }, { 210, 198, 53, 148, 6, 150, 169, 17, 28, 148, 199, 255, 130, 43, 136, 50, }, { 130, 82, 118, 227, 153, 148, 138, 228, 207, 227, 136, 213, 68, 206, 44, 53, }, { 179, 216, 79, 50, 76, 183, 44, 1, 58, 50, 123, 15, 220, 240, 8, 160, }, { 180, 206, 230, 131, 170, 229, 62, 133, 33, 131, 253, 191, 159, 161, 162, 127, }, { 214, 25, 148, 226, 195, 163, 177, 140, 8, 226, 216, 200, 108, 221, 234, 150, }, { 225, 194, 189, 126, 80, 78, 3, 91, 227, 126, 218, 223, 109, 110, 157, 245, }, { 194, 60, 244, 143, 148, 66, 201, 32, 76, 143, 187, 35, 188, 117, 195, 231, }, { 93, 113, 218, 17, 179, 193, 13, 39, 234, 17, 25, 14, 237, 224, 251, 1, }, { 250, 140, 245, 78, 168, 151, 89, 138, 148, 78, 1, 234, 225, 184, 218, 208, }, { 164, 52, 39, 152, 56, 49, 94, 180, 113, 152, 129, 99, 161, 255, 233, 170, }, { 31, 145, 233, 70, 61, 236, 66, 76, 99, 70, 196, 2, 98, 32, 37, 129, }, { 12, 162, 32, 154, 140, 95, 40, 100, 60, 154, 33, 89, 241, 217, 166, 47, }, { 1, 71, 185, 252, 160, 156, 6, 182, 5, 252, 119, 125, 218, 220, 249, 41, }, { 45, 210, 216, 80, 203, 168, 238, 176, 153, 80, 174, 95, 87, 185, 201, 111, }, { 103, 79, 106, 235, 12, 239, 145, 34, 56, 235, 77, 61, 199, 86, 211, 100, }, { 226, 11, 181, 185, 115, 41, 9, 66, 236, 185, 67, 88, 192, 201, 85, 142, }, { 9, 58, 56, 16, 233, 246, 54, 79, 45, 16, 73, 19, 197, 243, 61, 162, }, { 87, 130, 234, 198, 121, 80, 49, 113, 200, 198, 201, 154, 133, 180, 14, 216, }, { 17, 189, 120, 231, 50, 72, 102, 135, 85, 231, 11, 161, 228, 130, 178, 252, }, { 183, 7, 238, 68, 137, 130, 52, 156, 46, 68, 100, 56, 50, 6, 106, 4, }, { 223, 35, 172, 242, 42, 85, 135, 195, 37, 242, 145, 219, 169, 46, 215, 52, }, { 106, 170, 243, 141, 32, 44, 191, 240, 1, 141, 27, 25, 236, 83, 140, 98, }, { 147, 239, 14, 4, 171, 220, 236, 99, 154, 4, 131, 116, 160, 76, 158, 201, }, { 36, 232, 224, 64, 34, 94, 216, 255, 180, 64, 231, 76, 146, 74, 244, 205, }, { 127, 200, 42, 28, 215, 81, 193, 234, 64, 28, 15, 143, 230, 39, 92, 58, }, { 102, 8, 211, 23, 172, 115, 151, 148, 61, 23, 58, 64, 29, 138, 42, 77, }, { 254, 83, 84, 56, 109, 162, 65, 23, 128, 56, 30, 221, 15, 78, 184, 116, }, { 7, 22, 169, 177, 230, 82, 18, 132, 27, 177, 134, 176, 67, 81, 170, 223, }, { 68, 177, 35, 26, 200, 227, 91, 89, 151, 26, 44, 193, 22, 77, 141, 118, }, { 63, 166, 168, 112, 218, 135, 130, 46, 195, 112, 60, 121, 30, 156, 179, 232, }, { 248, 2, 68, 117, 43, 108, 85, 37, 158, 117, 239, 16, 150, 195, 235, 130, }, { 6, 81, 16, 77, 70, 206, 20, 50, 30, 77, 241, 205, 153, 141, 83, 246, }, { 202, 65, 117, 99, 221, 40, 249, 217, 100, 99, 133, 77, 163, 90, 7, 108, }, { 173, 14, 31, 136, 209, 199, 104, 251, 92, 136, 200, 112, 100, 12, 212, 8, }, { 43, 131, 200, 29, 141, 102, 250, 130, 135, 29, 95, 146, 206, 52, 154, 153, }, { 174, 199, 23, 79, 242, 160, 98, 226, 83, 79, 81, 247, 201, 171, 28, 115, }, { 34, 185, 240, 13, 100, 144, 204, 205, 170, 13, 22, 129, 11, 199, 167, 59, }, { 57, 247, 184, 61, 156, 73, 150, 28, 221, 61, 205, 180, 135, 17, 224, 30, }, { 222, 100, 21, 14, 138, 201, 129, 117, 32, 14, 230, 166, 115, 242, 46, 29, }, { 30, 214, 80, 186, 157, 112, 68, 250, 102, 186, 179, 127, 184, 252, 220, 168, }, { 168, 150, 7, 2, 180, 110, 118, 208, 77, 2, 160, 58, 80, 38, 79, 133, }, { 88, 233, 194, 155, 214, 104, 19, 12, 251, 155, 113, 68, 217, 202, 96, 140, }, { 136, 161, 70, 52, 83, 5, 182, 178, 237, 52, 88, 65, 44, 154, 217, 236, }, { 154, 213, 54, 20, 66, 42, 218, 44, 183, 20, 202, 103, 101, 191, 163, 107, }, { 105, 99, 251, 74, 3, 75, 181, 233, 14, 74, 130, 158, 65, 244, 68, 25, }, { 40, 74, 192, 218, 174, 1, 240, 155, 136, 218, 198, 21, 99, 147, 82, 226, }, { 101, 193, 219, 208, 143, 20, 157, 141, 50, 208, 163, 199, 176, 45, 226, 54, }, { 213, 208, 156, 37, 224, 196, 187, 149, 7, 37, 65, 79, 193, 122, 34, 237, }, { 124, 1, 34, 219, 244, 54, 203, 243, 79, 219, 150, 8, 75, 128, 148, 65, }, { 188, 179, 103, 111, 227, 143, 14, 124, 9, 111, 195, 209, 128, 142, 102, 244, }, { 56, 176, 1, 193, 60, 213, 144, 170, 216, 193, 186, 201, 93, 205, 25, 55, }, { 79, 5, 170, 49, 162, 238, 97, 185, 176, 49, 139, 40, 164, 197, 129, 134, }, { 224, 133, 4, 130, 240, 210, 5, 237, 230, 130, 173, 162, 183, 178, 100, 220, }, { 39, 33, 232, 135, 1, 57, 210, 230, 187, 135, 126, 203, 63, 237, 60, 182, }, { 118, 242, 18, 12, 62, 167, 247, 165, 109, 12, 70, 156, 35, 212, 97, 152, }, { 120, 222, 131, 173, 49, 3, 211, 110, 91, 173, 137, 63, 165, 118, 246, 229, }, { 137, 230, 255, 200, 243, 153, 176, 4, 232, 200, 47, 60, 246, 70, 32, 197, }, { 141, 57, 94, 190, 54, 172, 168, 153, 252, 190, 48, 11, 24, 176, 66, 97, }, { 175, 128, 174, 179, 82, 60, 100, 84, 86, 179, 38, 138, 19, 119, 229, 90, }, { 159, 77, 46, 158, 39, 131, 196, 7, 166, 158, 162, 45, 81, 149, 56, 230, }, { 132, 3, 102, 174, 223, 90, 158, 214, 209, 174, 121, 24, 221, 67, 127, 195, }, { 230, 212, 20, 207, 182, 28, 17, 223, 248, 207, 92, 111, 46, 63, 55, 42, }, { 241, 56, 124, 101, 194, 154, 99, 106, 179, 101, 166, 3, 83, 48, 214, 32, }, { 99, 144, 203, 157, 201, 218, 137, 191, 44, 157, 82, 10, 41, 160, 177, 192, }, { 81, 211, 250, 139, 63, 158, 37, 67, 214, 139, 56, 87, 28, 57, 93, 46, }, { 200, 207, 196, 88, 94, 211, 245, 118, 110, 88, 107, 183, 212, 33, 54, 62, }, { 3, 201, 8, 199, 35, 103, 10, 25, 15, 199, 153, 135, 173, 167, 200, 123, }, { 237, 96, 157, 228, 220, 17, 43, 63, 223, 228, 251, 134, 156, 183, 59, 218, }, { 112, 163, 2, 65, 120, 105, 227, 151, 115, 65, 183, 81, 186, 89, 50, 110, }, { 60, 111, 160, 183, 249, 224, 136, 55, 204, 183, 165, 254, 179, 59, 123, 147, }, { 142, 240, 86, 121, 21, 203, 162, 128, 243, 121, 169, 140, 181, 23, 138, 26, }, { 217, 114, 188, 191, 108, 155, 147, 241, 59, 191, 96, 22, 48, 163, 132, 194, }, { 16, 250, 193, 27, 146, 212, 96, 49, 80, 27, 124, 220, 62, 94, 75, 213, }, { 26, 9, 241, 204, 88, 69, 92, 103, 114, 204, 172, 72, 86, 10, 190, 12, }, { 157, 195, 159, 165, 164, 120, 200, 168, 172, 165, 76, 215, 38, 238, 9, 180, }, { 238, 169, 149, 35, 255, 118, 33, 38, 208, 35, 98, 1, 49, 16, 243, 161, }, { 203, 6, 204, 159, 125, 180, 255, 111, 97, 159, 242, 48, 121, 134, 254, 69, }, { 151, 48, 175, 114, 110, 233, 244, 254, 142, 114, 156, 67, 78, 186, 252, 109, }, { 201, 136, 125, 164, 254, 79, 243, 192, 107, 164, 28, 202, 14, 253, 207, 23, }, { 121, 153, 58, 81, 145, 159, 213, 216, 94, 81, 254, 66, 127, 170, 15, 204, }, { 178, 159, 246, 206, 236, 43, 42, 183, 63, 206, 12, 114, 6, 44, 241, 137, }, { 53, 85, 152, 167, 16, 22, 190, 120, 225, 167, 236, 237, 118, 200, 70, 49, }, { 108, 251, 227, 192, 102, 226, 171, 194, 31, 192, 234, 212, 117, 222, 223, 148, }, { 156, 132, 38, 89, 4, 228, 206, 30, 169, 89, 59, 170, 252, 50, 240, 157, }, { 27, 78, 72, 48, 248, 217, 90, 209, 119, 48, 219, 53, 140, 214, 71, 37, }, { 5, 152, 24, 138, 101, 169, 30, 43, 17, 138, 104, 74, 52, 42, 155, 141, }, { 80, 148, 67, 119, 159, 2, 35, 245, 211, 119, 79, 42, 198, 229, 164, 7, }, { 240, 127, 197, 153, 98, 6, 101, 220, 182, 153, 209, 126, 137, 236, 47, 9, }, { 209, 15, 61, 83, 37, 241, 163, 8, 19, 83, 94, 120, 47, 140, 64, 73, }, { 18, 116, 112, 32, 17, 47, 108, 158, 90, 32, 146, 38, 73, 37, 122, 135, }, { 135, 202, 110, 105, 252, 61, 148, 207, 222, 105, 224, 159, 112, 228, 183, 184, }, { 8, 125, 129, 236, 73, 106, 48, 249, 40, 236, 62, 110, 31, 47, 196, 139, }, { 89, 174, 123, 103, 118, 244, 21, 186, 254, 103, 6, 57, 3, 22, 153, 165, }, { 252, 221, 229, 3, 238, 89, 77, 184, 138, 3, 240, 39, 120, 53, 137, 38, }, { 33, 112, 248, 202, 71, 247, 198, 212, 165, 202, 143, 6, 166, 96, 111, 64, }, { 133, 68, 223, 82, 127, 198, 152, 96, 212, 82, 14, 101, 7, 159, 134, 234, }, { 85, 12, 91, 253, 250, 171, 61, 222, 194, 253, 39, 96, 242, 207, 63, 138, }, { 78, 66, 19, 205, 2, 114, 103, 15, 181, 205, 252, 85, 126, 25, 120, 175, }, { 236, 39, 36, 24, 124, 141, 45, 137, 218, 24, 140, 251, 70, 107, 194, 243, }, { 251, 203, 76, 178, 8, 11, 95, 60, 145, 178, 118, 151, 59, 100, 35, 249, }, { 54, 156, 144, 96, 51, 113, 180, 97, 238, 96, 117, 106, 219, 111, 142, 74, }, { 117, 59, 26, 203, 29, 192, 253, 188, 98, 203, 223, 27, 142, 115, 169, 227, }, { 55, 219, 41, 156, 147, 237, 178, 215, 235, 156, 2, 23, 1, 179, 119, 99, }, { 92, 54, 99, 237, 19, 93, 11, 145, 239, 237, 110, 115, 55, 60, 2, 40, }, { 246, 46, 213, 212, 36, 200, 113, 238, 168, 212, 32, 179, 16, 97, 124, 255, }, { 244, 160, 100, 239, 167, 51, 125, 65, 162, 239, 206, 73, 103, 26, 77, 173, }, { 205, 87, 220, 210, 59, 122, 235, 93, 127, 210, 3, 253, 224, 11, 173, 179, }, { 107, 237, 74, 113, 128, 176, 185, 70, 4, 113, 108, 100, 54, 143, 117, 75, }, { 162, 101, 55, 213, 126, 255, 74, 134, 111, 213, 112, 174, 56, 114, 186, 92, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 170, 24, 182, 57, 55, 149, 122, 127, 71, 57, 78, 192, 39, 93, 126, 215, }, { 113, 228, 187, 189, 216, 245, 229, 33, 118, 189, 192, 44, 96, 133, 203, 71, }, { 66, 224, 51, 87, 142, 45, 79, 107, 137, 87, 221, 12, 143, 192, 222, 128, }, }, { { 194, 54, 191, 184, 184, 237, 248, 165, 255, 106, 45, 165, 74, 132, 82, 92, }, { 149, 139, 209, 154, 154, 10, 56, 45, 115, 198, 47, 45, 151, 36, 219, 77, }, { 166, 48, 84, 237, 237, 114, 219, 50, 98, 167, 40, 50, 188, 87, 38, 151, }, { 39, 207, 18, 83, 83, 88, 92, 143, 29, 7, 73, 143, 225, 114, 74, 200, }, { 224, 228, 248, 226, 226, 189, 251, 14, 225, 149, 150, 14, 120, 103, 69, 113, }, { 134, 81, 49, 12, 12, 77, 254, 48, 195, 87, 152, 48, 46, 129, 124, 6, }, { 6, 22, 102, 14, 14, 177, 106, 56, 2, 17, 29, 56, 35, 95, 215, 7, }, { 93, 135, 196, 48, 48, 247, 126, 192, 138, 159, 37, 192, 184, 65, 51, 24, }, { 9, 49, 153, 21, 21, 169, 139, 84, 7, 218, 200, 84, 149, 47, 48, 235, }, { 120, 251, 244, 216, 216, 192, 4, 230, 40, 151, 103, 230, 249, 6, 52, 108, }, { 244, 144, 111, 198, 198, 157, 68, 158, 237, 243, 216, 158, 178, 102, 242, 99, }, { 22, 199, 181, 159, 159, 79, 153, 57, 179, 105, 69, 57, 106, 52, 250, 174, }, { 25, 224, 74, 132, 132, 87, 120, 85, 182, 162, 144, 85, 220, 68, 29, 66, }, { 236, 200, 52, 254, 254, 28, 47, 126, 229, 183, 172, 126, 62, 217, 40, 127, }, { 105, 146, 54, 245, 245, 232, 228, 82, 39, 9, 219, 82, 224, 150, 222, 155, }, { 4, 165, 68, 181, 181, 222, 76, 145, 189, 30, 22, 145, 131, 106, 154, 187, }, { 143, 96, 168, 25, 25, 228, 117, 100, 196, 141, 80, 100, 187, 174, 76, 237, }, { 48, 176, 182, 112, 112, 193, 214, 3, 16, 136, 232, 3, 219, 189, 119, 56, }, { 57, 129, 47, 101, 101, 104, 93, 87, 23, 82, 32, 87, 78, 146, 71, 211, }, { 233, 213, 97, 247, 247, 20, 112, 90, 230, 79, 94, 90, 237, 72, 117, 154, }, { 3, 11, 51, 7, 7, 185, 53, 28, 1, 233, 239, 28, 240, 206, 138, 226, }, { 207, 162, 98, 24, 24, 154, 63, 96, 69, 174, 243, 96, 92, 193, 248, 12, }, { 112, 114, 124, 113, 113, 191, 156, 7, 145, 171, 75, 7, 60, 210, 195, 217, }, { 67, 201, 249, 6, 6, 199, 127, 24, 128, 202, 76, 24, 23, 161, 62, 3, }, { 85, 14, 76, 153, 153, 136, 230, 33, 51, 163, 9, 33, 125, 149, 196, 173, }, { 44, 77, 169, 253, 253, 158, 241, 114, 165, 210, 138, 114, 212, 104, 55, 159, }, { 18, 98, 241, 42, 42, 145, 213, 168, 14, 119, 83, 168, 233, 94, 96, 21, }, { 142, 216, 185, 165, 165, 50, 102, 209, 122, 107, 180, 209, 235, 85, 139, 179, }, { 213, 73, 27, 155, 155, 116, 114, 41, 242, 229, 140, 41, 112, 75, 111, 172, }, { 61, 36, 107, 208, 208, 182, 17, 198, 170, 76, 54, 198, 205, 248, 221, 104, }, { 210, 231, 108, 41, 41, 19, 11, 164, 78, 18, 117, 164, 3, 239, 127, 245, }, { 118, 100, 26, 127, 127, 14, 246, 63, 147, 186, 86, 63, 31, 141, 20, 222, }, { 24, 88, 91, 56, 56, 129, 107, 224, 8, 68, 116, 224, 140, 191, 218, 28, }, { 53, 173, 227, 121, 121, 201, 137, 39, 19, 112, 26, 39, 8, 44, 42, 221, }, { 7, 174, 119, 178, 178, 103, 121, 141, 188, 247, 249, 141, 115, 164, 16, 89, }, { 192, 133, 157, 3, 3, 130, 222, 12, 64, 101, 38, 12, 234, 177, 31, 224, }, { 247, 155, 92, 193, 193, 36, 113, 130, 236, 26, 55, 130, 66, 168, 120, 129, }, { 184, 126, 105, 219, 219, 66, 218, 234, 104, 242, 65, 234, 19, 183, 43, 140, }, { 114, 193, 94, 202, 202, 208, 186, 174, 46, 164, 64, 174, 156, 231, 142, 101, }, { 17, 105, 194, 45, 45, 40, 224, 180, 15, 158, 188, 180, 25, 144, 234, 247, }, { 180, 82, 165, 199, 199, 227, 14, 154, 108, 208, 123, 154, 85, 9, 70, 130, }, { 255, 18, 212, 104, 104, 91, 233, 99, 85, 38, 27, 99, 135, 124, 143, 52, }, { 26, 235, 121, 131, 131, 238, 77, 73, 183, 75, 127, 73, 44, 138, 151, 160, }, { 72, 75, 66, 168, 168, 1, 210, 229, 56, 31, 143, 229, 34, 187, 67, 84, }, { 170, 28, 152, 241, 241, 211, 15, 66, 102, 133, 18, 66, 250, 233, 75, 153, }, { 88, 154, 145, 57, 57, 255, 33, 228, 137, 103, 215, 228, 107, 208, 110, 253, }, { 147, 157, 183, 148, 148, 187, 82, 21, 113, 215, 50, 21, 180, 123, 12, 74, }, { 33, 217, 116, 93, 93, 233, 54, 183, 31, 22, 84, 183, 194, 45, 157, 207, }, { 221, 192, 147, 50, 50, 11, 234, 200, 75, 217, 160, 200, 181, 159, 152, 25, }, { 96, 163, 175, 224, 224, 65, 111, 6, 32, 211, 19, 6, 117, 185, 238, 112, }, { 12, 44, 204, 28, 28, 161, 212, 112, 4, 34, 58, 112, 70, 190, 109, 14, }, { 196, 32, 217, 182, 182, 92, 146, 157, 253, 123, 48, 157, 105, 219, 133, 91, }, { 154, 172, 46, 129, 129, 18, 217, 65, 118, 13, 250, 65, 33, 84, 60, 161, }, { 92, 63, 213, 140, 140, 33, 109, 117, 52, 121, 193, 117, 232, 186, 244, 70, }, { 83, 24, 42, 151, 151, 57, 140, 25, 49, 178, 20, 25, 94, 202, 19, 170, }, { 205, 17, 64, 163, 163, 245, 25, 201, 250, 161, 248, 201, 252, 244, 181, 176, }, { 50, 3, 148, 203, 203, 174, 240, 170, 175, 135, 227, 170, 123, 136, 58, 132, }, { 27, 83, 104, 63, 63, 56, 94, 252, 9, 173, 155, 252, 124, 113, 80, 254, }, { 90, 41, 179, 130, 130, 144, 7, 77, 54, 104, 220, 77, 203, 229, 35, 65, }, { 161, 158, 35, 95, 95, 21, 162, 191, 222, 80, 209, 191, 207, 243, 54, 206, }, { 229, 249, 173, 235, 235, 181, 164, 42, 226, 109, 100, 42, 171, 246, 24, 148, }, { 60, 156, 122, 108, 108, 96, 2, 115, 20, 170, 210, 115, 157, 3, 26, 54, }, { 151, 56, 243, 33, 33, 101, 30, 132, 204, 201, 36, 132, 55, 17, 150, 241, }, { 206, 26, 115, 164, 164, 76, 44, 213, 251, 72, 23, 213, 12, 58, 63, 82, }, { 109, 55, 114, 64, 64, 54, 168, 195, 154, 23, 205, 195, 99, 252, 68, 32, }, { 98, 16, 141, 91, 91, 46, 73, 175, 159, 220, 24, 175, 213, 140, 163, 204, }, { 245, 40, 126, 122, 122, 75, 87, 43, 83, 21, 60, 43, 226, 157, 53, 61, }, { 183, 89, 150, 192, 192, 90, 59, 134, 109, 57, 148, 134, 165, 199, 204, 96, }, { 226, 87, 218, 89, 89, 210, 221, 167, 94, 154, 157, 167, 216, 82, 8, 205, }, { 65, 122, 219, 189, 189, 168, 89, 177, 63, 197, 71, 177, 183, 148, 115, 191, }, { 113, 202, 109, 205, 205, 105, 143, 178, 47, 77, 175, 178, 108, 41, 4, 135, }, { 249, 4, 178, 102, 102, 234, 131, 91, 87, 55, 6, 91, 164, 35, 88, 51, }, { 234, 222, 82, 240, 240, 173, 69, 70, 231, 166, 177, 70, 29, 134, 255, 120, }, { 174, 185, 220, 68, 68, 13, 67, 211, 219, 155, 4, 211, 121, 131, 209, 34, }, { 228, 65, 188, 87, 87, 99, 183, 159, 92, 139, 128, 159, 251, 13, 223, 202, }, { 11, 130, 187, 174, 174, 198, 173, 253, 184, 213, 195, 253, 53, 26, 125, 87, }, { 222, 203, 160, 53, 53, 178, 223, 212, 74, 48, 79, 212, 69, 81, 18, 251, }, { 240, 53, 43, 115, 115, 67, 8, 15, 80, 237, 206, 15, 49, 12, 104, 216, }, { 212, 241, 10, 39, 39, 162, 97, 156, 76, 3, 104, 156, 32, 176, 168, 242, }, { 181, 234, 180, 123, 123, 53, 29, 47, 210, 54, 159, 47, 5, 242, 129, 220, }, { 164, 131, 118, 86, 86, 29, 253, 155, 221, 168, 35, 155, 28, 98, 107, 43, }, { 186, 205, 75, 96, 96, 45, 252, 67, 215, 253, 74, 67, 179, 130, 102, 48, }, { 232, 109, 112, 75, 75, 194, 99, 239, 88, 169, 186, 239, 189, 179, 178, 196, }, { 14, 159, 238, 167, 167, 206, 242, 217, 187, 45, 49, 217, 230, 139, 32, 178, }, { 156, 186, 72, 143, 143, 163, 179, 121, 116, 28, 231, 121, 2, 11, 235, 166, }, { 49, 8, 167, 204, 204, 23, 197, 182, 174, 110, 12, 182, 139, 70, 176, 102, }, { 121, 67, 229, 100, 100, 22, 23, 83, 150, 113, 131, 83, 169, 253, 243, 50, }, { 252, 25, 231, 111, 111, 226, 220, 127, 84, 207, 244, 127, 119, 178, 5, 214, }, { 77, 86, 23, 161, 161, 9, 141, 193, 59, 231, 125, 193, 241, 42, 30, 177, }, { 219, 214, 245, 60, 60, 186, 128, 240, 73, 200, 189, 240, 150, 192, 79, 30, }, { 117, 111, 41, 120, 120, 183, 195, 35, 146, 83, 185, 35, 239, 67, 158, 60, }, { 104, 42, 39, 73, 73, 62, 247, 231, 153, 239, 63, 231, 176, 109, 25, 197, }, { 21, 204, 134, 152, 152, 246, 172, 37, 178, 128, 170, 37, 154, 250, 112, 76, }, { 169, 23, 171, 246, 246, 106, 58, 94, 103, 108, 253, 94, 10, 39, 193, 123, }, { 1, 184, 17, 188, 188, 214, 19, 181, 190, 230, 228, 181, 80, 251, 199, 94, }, { 35, 106, 86, 230, 230, 134, 16, 30, 160, 25, 95, 30, 98, 24, 208, 115, }, { 178, 68, 195, 201, 201, 82, 100, 162, 110, 193, 102, 162, 118, 86, 145, 133, }, { 110, 60, 65, 71, 71, 143, 157, 223, 155, 254, 34, 223, 147, 50, 206, 194, }, { 242, 134, 9, 200, 200, 44, 46, 166, 239, 226, 197, 166, 145, 57, 37, 100, }, { 59, 50, 13, 222, 222, 7, 123, 254, 168, 93, 43, 254, 238, 167, 10, 111, }, { 82, 160, 59, 43, 43, 239, 159, 172, 143, 84, 240, 172, 14, 49, 212, 244, }, { 101, 190, 250, 233, 233, 73, 48, 34, 35, 43, 225, 34, 166, 40, 179, 149, }, { 75, 64, 113, 175, 175, 184, 231, 249, 57, 246, 96, 249, 210, 117, 201, 182, }, { 56, 57, 62, 217, 217, 190, 78, 226, 169, 180, 196, 226, 30, 105, 128, 141, }, { 42, 91, 207, 243, 243, 47, 155, 74, 167, 195, 151, 74, 247, 55, 224, 152, }, { 145, 46, 149, 47, 47, 212, 116, 188, 206, 216, 57, 188, 20, 78, 65, 246, }, { 214, 66, 40, 156, 156, 205, 71, 53, 243, 12, 99, 53, 128, 133, 229, 78, }, { 253, 161, 246, 211, 211, 52, 207, 202, 234, 41, 16, 202, 39, 73, 194, 136, }, { 248, 188, 163, 218, 218, 60, 144, 238, 233, 209, 226, 238, 244, 216, 159, 109, }, { 140, 107, 155, 30, 30, 93, 64, 120, 197, 100, 191, 120, 75, 96, 198, 15, }, { 80, 19, 25, 144, 144, 128, 185, 5, 48, 91, 251, 5, 174, 4, 153, 72, }, { 127, 85, 131, 106, 106, 167, 125, 107, 148, 96, 158, 107, 138, 162, 36, 53, }, { 89, 34, 128, 133, 133, 41, 50, 81, 55, 129, 51, 81, 59, 43, 169, 163, }, { 8, 137, 136, 169, 169, 127, 152, 225, 185, 60, 44, 225, 197, 212, 247, 181, }, { 217, 101, 215, 135, 135, 213, 166, 89, 246, 199, 182, 89, 54, 245, 2, 162, }, { 162, 149, 16, 88, 88, 172, 151, 163, 223, 185, 62, 163, 63, 61, 188, 44, }, { 251, 183, 144, 221, 221, 133, 165, 242, 232, 56, 13, 242, 4, 22, 21, 143, }, { 28, 253, 31, 141, 141, 95, 39, 113, 181, 90, 98, 113, 15, 213, 64, 167, }, { 41, 80, 252, 244, 244, 150, 174, 86, 166, 42, 120, 86, 7, 249, 106, 122, }, { 211, 95, 125, 149, 149, 197, 24, 17, 240, 244, 145, 17, 83, 20, 184, 171, }, { 111, 132, 80, 251, 251, 89, 142, 106, 37, 24, 198, 106, 195, 201, 9, 156, }, { 71, 108, 189, 179, 179, 25, 51, 137, 61, 212, 90, 137, 148, 203, 164, 184, }, { 84, 182, 93, 37, 37, 94, 245, 148, 141, 69, 237, 148, 45, 110, 3, 243, }, { 159, 177, 123, 136, 136, 26, 134, 101, 117, 245, 8, 101, 242, 197, 97, 68, }, { 23, 127, 164, 35, 35, 153, 138, 140, 13, 143, 161, 140, 58, 207, 61, 240, }, { 225, 92, 233, 94, 94, 107, 232, 187, 95, 115, 114, 187, 40, 156, 130, 47, }, { 124, 94, 176, 109, 109, 30, 72, 119, 149, 137, 113, 119, 122, 108, 174, 215, }, { 70, 212, 172, 15, 15, 207, 32, 60, 131, 50, 190, 60, 196, 48, 99, 230, }, { 188, 219, 45, 110, 110, 156, 150, 123, 213, 236, 87, 123, 144, 221, 177, 55, }, { 197, 152, 200, 10, 10, 138, 129, 40, 67, 157, 212, 40, 57, 32, 66, 5, }, { 34, 210, 71, 90, 90, 80, 3, 171, 30, 255, 187, 171, 50, 227, 23, 45, }, { 190, 104, 15, 213, 213, 243, 176, 210, 106, 227, 92, 210, 48, 232, 252, 139, }, { 150, 128, 226, 157, 157, 179, 13, 49, 114, 47, 192, 49, 103, 234, 81, 175, }, { 126, 237, 146, 214, 214, 113, 110, 222, 42, 134, 122, 222, 218, 89, 227, 107, }, { 29, 69, 14, 49, 49, 137, 52, 196, 11, 188, 134, 196, 95, 46, 135, 249, }, { 185, 198, 120, 103, 103, 148, 201, 95, 214, 20, 165, 95, 67, 76, 236, 210, }, { 157, 2, 89, 51, 51, 117, 160, 204, 202, 250, 3, 204, 82, 240, 44, 248, }, { 173, 178, 239, 67, 67, 180, 118, 207, 218, 114, 235, 207, 137, 77, 91, 192, }, { 108, 143, 99, 252, 252, 224, 187, 118, 36, 241, 41, 118, 51, 7, 131, 126, }, { 133, 90, 2, 11, 11, 244, 203, 44, 194, 190, 119, 44, 222, 79, 246, 228, }, { 209, 236, 95, 46, 46, 170, 62, 184, 79, 251, 154, 184, 243, 33, 245, 23, }, { 30, 78, 61, 54, 54, 48, 1, 216, 10, 85, 105, 216, 175, 224, 13, 27, }, { 165, 59, 103, 234, 234, 203, 238, 46, 99, 78, 199, 46, 76, 153, 172, 117, }, { 230, 242, 158, 236, 236, 12, 145, 54, 227, 132, 139, 54, 91, 56, 146, 118, }, { 46, 254, 139, 70, 70, 241, 215, 219, 26, 221, 129, 219, 116, 93, 122, 35, }, { 95, 52, 230, 139, 139, 152, 88, 105, 53, 144, 46, 105, 24, 116, 126, 164, }, { 97, 27, 190, 92, 92, 151, 124, 179, 158, 53, 247, 179, 37, 66, 41, 46, }, { 131, 76, 100, 5, 5, 69, 161, 20, 192, 175, 106, 20, 253, 16, 33, 227, }, { 68, 103, 142, 180, 180, 160, 6, 149, 60, 61, 181, 149, 100, 5, 46, 90, }, { 177, 79, 240, 206, 206, 235, 81, 190, 111, 40, 137, 190, 134, 152, 27, 103, }, { 239, 195, 7, 249, 249, 165, 26, 98, 228, 94, 67, 98, 206, 23, 162, 157, }, { 130, 244, 117, 185, 185, 147, 178, 161, 126, 73, 142, 161, 173, 235, 230, 189, }, { 54, 166, 208, 126, 126, 112, 188, 59, 18, 153, 245, 59, 248, 226, 160, 63, }, { 163, 45, 1, 228, 228, 122, 132, 22, 97, 95, 218, 22, 111, 198, 123, 114, }, { 175, 1, 205, 248, 248, 219, 80, 102, 101, 125, 224, 102, 41, 120, 22, 124, }, { 136, 206, 223, 171, 171, 131, 12, 233, 120, 122, 169, 233, 200, 10, 92, 180, }, { 137, 118, 206, 23, 23, 85, 31, 92, 198, 156, 77, 92, 152, 241, 155, 234, }, { 15, 39, 255, 27, 27, 24, 225, 108, 5, 203, 213, 108, 182, 112, 231, 236, }, { 31, 246, 44, 138, 138, 230, 18, 109, 180, 179, 141, 109, 255, 27, 202, 69, }, { 66, 113, 232, 186, 186, 17, 108, 173, 62, 44, 168, 173, 71, 90, 249, 93, }, { 246, 35, 77, 125, 125, 242, 98, 55, 82, 252, 211, 55, 18, 83, 191, 223, }, { 223, 115, 177, 137, 137, 100, 204, 97, 244, 214, 171, 97, 21, 170, 213, 165, }, { 58, 138, 28, 98, 98, 209, 104, 75, 22, 187, 207, 75, 190, 92, 205, 49, }, { 193, 61, 140, 191, 191, 84, 205, 185, 254, 131, 194, 185, 186, 74, 216, 190, }, { 40, 232, 237, 72, 72, 64, 189, 227, 24, 204, 156, 227, 87, 2, 173, 36, }, { 241, 141, 58, 207, 207, 149, 27, 186, 238, 11, 42, 186, 97, 247, 175, 134, }, { 203, 7, 38, 173, 173, 68, 115, 241, 248, 176, 229, 241, 223, 171, 98, 183, }, { 146, 37, 166, 40, 40, 109, 65, 160, 207, 49, 214, 160, 228, 128, 203, 20, }, { 135, 233, 32, 176, 176, 155, 237, 133, 125, 177, 124, 133, 126, 122, 187, 88, }, { 231, 74, 143, 80, 80, 218, 130, 131, 93, 98, 111, 131, 11, 195, 85, 40, }, { 62, 47, 88, 215, 215, 15, 36, 218, 171, 165, 217, 218, 61, 54, 87, 138, }, { 250, 15, 129, 97, 97, 83, 182, 71, 86, 222, 233, 71, 84, 237, 210, 209, }, { 13, 148, 221, 160, 160, 119, 199, 197, 186, 196, 222, 197, 22, 69, 170, 80, }, { 81, 171, 8, 44, 44, 86, 170, 176, 142, 189, 31, 176, 254, 255, 94, 22, }, { 182, 225, 135, 124, 124, 140, 40, 51, 211, 223, 112, 51, 245, 60, 11, 62, }, { 123, 240, 199, 223, 223, 121, 49, 250, 41, 126, 136, 250, 9, 200, 190, 142, }, { 116, 215, 56, 196, 196, 97, 208, 150, 44, 181, 93, 150, 191, 184, 89, 98, }, { 63, 151, 73, 107, 107, 217, 55, 111, 21, 67, 61, 111, 109, 205, 144, 212, }, { 47, 70, 154, 250, 250, 39, 196, 110, 164, 59, 101, 110, 36, 166, 189, 125, }, { 125, 230, 161, 209, 209, 200, 91, 194, 43, 111, 149, 194, 42, 151, 105, 137, }, { 187, 117, 90, 220, 220, 251, 239, 246, 105, 27, 174, 246, 227, 121, 161, 110, }, { 73, 243, 83, 20, 20, 215, 193, 80, 134, 249, 107, 80, 114, 64, 132, 10, }, { 43, 227, 222, 79, 79, 249, 136, 255, 25, 37, 115, 255, 167, 204, 39, 198, }, { 153, 167, 29, 134, 134, 171, 236, 93, 119, 228, 21, 93, 209, 154, 182, 67, }, { 2, 179, 34, 187, 187, 111, 38, 169, 191, 15, 11, 169, 160, 53, 77, 188, }, { 55, 30, 193, 194, 194, 166, 175, 142, 172, 127, 17, 142, 168, 25, 103, 97, }, { 179, 252, 210, 117, 117, 132, 119, 23, 208, 39, 130, 23, 38, 173, 86, 219, }, { 115, 121, 79, 118, 118, 6, 169, 27, 144, 66, 164, 27, 204, 28, 73, 59, }, { 100, 6, 235, 85, 85, 159, 35, 151, 157, 205, 5, 151, 246, 211, 116, 203, }, { 220, 120, 130, 142, 142, 221, 249, 125, 245, 63, 68, 125, 229, 100, 95, 71, }, { 216, 221, 198, 59, 59, 3, 181, 236, 72, 33, 82, 236, 102, 14, 197, 252, }, { 201, 180, 4, 22, 22, 43, 85, 88, 71, 191, 238, 88, 127, 158, 47, 11, }, { 171, 164, 137, 77, 77, 5, 28, 247, 216, 99, 246, 247, 170, 18, 140, 199, }, { 51, 187, 133, 119, 119, 120, 227, 31, 17, 97, 7, 31, 43, 115, 253, 218, }, { 107, 33, 20, 78, 78, 135, 194, 251, 152, 6, 208, 251, 64, 163, 147, 39, }, { 204, 169, 81, 31, 31, 35, 10, 124, 68, 71, 28, 124, 172, 15, 114, 238, }, { 144, 150, 132, 147, 147, 2, 103, 9, 112, 62, 221, 9, 68, 181, 134, 168, }, { 208, 84, 78, 146, 146, 124, 45, 13, 241, 29, 126, 13, 163, 218, 50, 73, }, { 172, 10, 254, 255, 255, 98, 101, 122, 100, 148, 15, 122, 217, 182, 156, 158, }, { 191, 208, 30, 105, 105, 37, 163, 103, 212, 5, 184, 103, 96, 19, 59, 213, }, { 218, 110, 228, 128, 128, 108, 147, 69, 247, 46, 89, 69, 198, 59, 136, 64, }, { 167, 136, 69, 81, 81, 164, 200, 135, 220, 65, 204, 135, 236, 172, 225, 201, }, { 94, 140, 247, 55, 55, 78, 75, 220, 139, 118, 202, 220, 72, 143, 185, 250, }, { 152, 31, 12, 58, 58, 125, 255, 232, 201, 2, 241, 232, 129, 97, 113, 29, }, { 122, 72, 214, 99, 99, 175, 34, 79, 151, 152, 108, 79, 89, 51, 121, 208, }, { 19, 218, 224, 150, 150, 71, 198, 29, 176, 145, 183, 29, 185, 165, 167, 75, }, { 106, 153, 5, 242, 242, 81, 209, 78, 38, 224, 52, 78, 16, 88, 84, 121, }, { 64, 194, 202, 1, 1, 126, 74, 4, 129, 35, 163, 4, 231, 111, 180, 225, }, { 168, 175, 186, 74, 74, 188, 41, 235, 217, 138, 25, 235, 90, 220, 6, 37, }, { 91, 145, 162, 62, 62, 70, 20, 248, 136, 142, 56, 248, 155, 30, 228, 31, }, { 235, 102, 67, 76, 76, 123, 86, 243, 89, 64, 85, 243, 77, 125, 56, 38, }, { 102, 181, 201, 238, 238, 240, 5, 62, 34, 194, 14, 62, 86, 230, 57, 119, }, { 86, 5, 127, 158, 158, 49, 211, 61, 50, 74, 230, 61, 141, 91, 78, 79, }, { 129, 255, 70, 190, 190, 42, 135, 189, 127, 160, 97, 189, 93, 37, 108, 95, }, { 119, 220, 11, 195, 195, 216, 229, 138, 45, 92, 178, 138, 79, 118, 211, 128, }, { 87, 189, 110, 34, 34, 231, 192, 136, 140, 172, 2, 136, 221, 160, 137, 17, }, { 78, 93, 36, 166, 166, 176, 184, 221, 58, 14, 146, 221, 1, 228, 148, 83, }, { 141, 211, 138, 162, 162, 139, 83, 205, 123, 130, 91, 205, 27, 155, 1, 81, }, { 176, 247, 225, 114, 114, 61, 66, 11, 209, 206, 109, 11, 214, 99, 220, 57, }, { 243, 62, 24, 116, 116, 250, 61, 19, 81, 4, 33, 19, 193, 194, 226, 58, }, { 148, 51, 192, 38, 38, 220, 43, 152, 205, 32, 203, 152, 199, 223, 28, 19, }, { 32, 97, 101, 225, 225, 63, 37, 2, 161, 240, 176, 2, 146, 214, 90, 145, }, { 36, 196, 33, 84, 84, 225, 105, 147, 28, 238, 166, 147, 17, 188, 192, 42, }, { 215, 250, 57, 32, 32, 27, 84, 128, 77, 234, 135, 128, 208, 126, 34, 16, }, { 20, 116, 151, 36, 36, 32, 191, 144, 12, 102, 78, 144, 202, 1, 183, 18, }, { 158, 9, 106, 52, 52, 204, 149, 208, 203, 19, 236, 208, 162, 62, 166, 26, }, { 5, 29, 85, 9, 9, 8, 95, 36, 3, 248, 242, 36, 211, 145, 93, 229, }, { 198, 147, 251, 13, 13, 51, 180, 52, 66, 116, 59, 52, 201, 238, 200, 231, }, { 237, 112, 37, 66, 66, 202, 60, 203, 91, 81, 72, 203, 110, 34, 239, 33, }, { 200, 12, 21, 170, 170, 253, 70, 237, 249, 89, 10, 237, 47, 101, 232, 85, }, { 155, 20, 63, 61, 61, 196, 202, 244, 200, 235, 30, 244, 113, 175, 251, 255, }, { 189, 99, 60, 210, 210, 74, 133, 206, 107, 10, 179, 206, 192, 38, 118, 105, }, { 132, 226, 19, 183, 183, 34, 216, 153, 124, 88, 147, 153, 142, 180, 49, 186, }, { 195, 142, 174, 4, 4, 59, 235, 16, 65, 140, 201, 16, 26, 127, 149, 2, }, { 202, 191, 55, 17, 17, 146, 96, 68, 70, 86, 1, 68, 143, 80, 165, 233, }, { 138, 125, 253, 16, 16, 236, 42, 64, 199, 117, 162, 64, 104, 63, 17, 8, }, { 52, 21, 242, 197, 197, 31, 154, 146, 173, 150, 254, 146, 88, 215, 237, 131, }, { 38, 119, 3, 239, 239, 142, 79, 58, 163, 225, 173, 58, 177, 137, 141, 150, }, { 16, 209, 211, 145, 145, 254, 243, 1, 177, 120, 88, 1, 73, 107, 45, 169, }, { 37, 124, 48, 232, 232, 55, 122, 38, 162, 8, 66, 38, 65, 71, 7, 116, }, { 227, 239, 203, 229, 229, 4, 206, 18, 224, 124, 121, 18, 136, 169, 207, 147, }, { 99, 168, 156, 231, 231, 248, 90, 26, 33, 58, 252, 26, 133, 119, 100, 146, }, { 10, 58, 170, 18, 18, 16, 190, 72, 6, 51, 39, 72, 101, 225, 186, 9, }, { 79, 229, 53, 26, 26, 102, 171, 104, 132, 232, 118, 104, 81, 31, 83, 13, }, { 139, 197, 236, 172, 172, 58, 57, 245, 121, 147, 70, 245, 56, 196, 214, 86, }, { 199, 43, 234, 177, 177, 229, 167, 129, 252, 146, 223, 129, 153, 21, 15, 185, }, { 103, 13, 216, 82, 82, 38, 22, 139, 156, 36, 234, 139, 6, 29, 254, 41, }, { 45, 245, 184, 65, 65, 72, 226, 199, 27, 52, 110, 199, 132, 147, 240, 193, }, { 254, 170, 197, 212, 212, 141, 250, 214, 235, 192, 255, 214, 215, 135, 72, 106, }, { 69, 223, 159, 8, 8, 118, 21, 32, 130, 219, 81, 32, 52, 254, 233, 4, }, { 160, 38, 50, 227, 227, 195, 177, 10, 96, 182, 53, 10, 159, 8, 241, 144, }, { 128, 71, 87, 2, 2, 252, 148, 8, 193, 70, 133, 8, 13, 222, 171, 1, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 74, 248, 96, 19, 19, 110, 244, 76, 135, 16, 132, 76, 130, 142, 14, 232, }, { 238, 123, 22, 69, 69, 115, 9, 215, 90, 184, 167, 215, 158, 236, 101, 195, }, { 76, 238, 6, 29, 29, 223, 158, 116, 133, 1, 153, 116, 161, 209, 217, 239, }, }, { { 216, 202, 32, 24, 166, 91, 156, 175, 120, 217, 29, 128, 140, 133, 59, 140, }, { 105, 16, 81, 76, 197, 6, 104, 24, 191, 49, 183, 135, 161, 124, 245, 161, }, { 192, 208, 27, 154, 176, 46, 205, 184, 183, 190, 223, 108, 33, 41, 3, 33, }, { 186, 255, 230, 171, 162, 137, 217, 97, 66, 161, 220, 30, 170, 105, 96, 170, }, { 22, 74, 237, 61, 65, 107, 90, 111, 201, 146, 236, 50, 205, 227, 159, 205, }, { 135, 9, 121, 82, 171, 59, 211, 236, 217, 79, 60, 39, 14, 73, 176, 14, }, { 88, 235, 50, 244, 199, 111, 171, 127, 162, 13, 54, 200, 178, 10, 57, 178, }, { 89, 36, 39, 139, 233, 236, 202, 54, 226, 255, 240, 156, 56, 231, 133, 56, }, { 196, 106, 79, 165, 8, 103, 138, 95, 116, 240, 65, 255, 76, 27, 182, 76, }, { 106, 130, 110, 205, 183, 64, 203, 195, 127, 228, 62, 123, 252, 136, 242, 252, }, { 5, 117, 65, 64, 150, 202, 38, 174, 131, 188, 88, 199, 231, 223, 9, 231, }, { 154, 102, 3, 144, 43, 132, 164, 85, 149, 148, 166, 12, 68, 58, 129, 68, }, { 6, 231, 126, 193, 228, 140, 133, 117, 67, 105, 209, 59, 186, 43, 14, 186, }, { 166, 95, 137, 22, 12, 181, 207, 145, 78, 136, 128, 97, 106, 247, 237, 106, }, { 13, 194, 233, 62, 37, 88, 168, 163, 198, 32, 167, 34, 61, 187, 160, 61, }, { 209, 178, 157, 25, 59, 74, 115, 235, 125, 183, 36, 49, 220, 12, 46, 220, }, { 67, 99, 54, 247, 163, 92, 89, 179, 173, 191, 125, 216, 66, 82, 6, 66, }, { 133, 84, 83, 172, 247, 254, 17, 126, 89, 104, 115, 143, 217, 80, 11, 217, }, { 65, 62, 28, 9, 255, 153, 155, 33, 45, 152, 50, 112, 149, 75, 189, 149, }, { 210, 32, 162, 152, 73, 12, 208, 48, 189, 98, 173, 205, 129, 248, 41, 129, }, { 44, 148, 25, 122, 130, 214, 180, 222, 81, 231, 27, 100, 89, 5, 253, 89, }, { 205, 18, 242, 164, 149, 118, 101, 27, 113, 158, 120, 78, 28, 146, 163, 28, }, { 11, 37, 151, 255, 193, 212, 45, 214, 133, 73, 118, 25, 135, 144, 174, 135, }, { 162, 229, 221, 41, 180, 252, 136, 118, 141, 198, 30, 242, 7, 197, 88, 7, }, { 56, 131, 222, 185, 159, 120, 44, 35, 24, 82, 184, 254, 67, 255, 217, 67, }, { 247, 204, 6, 227, 86, 203, 139, 170, 233, 235, 143, 24, 136, 116, 193, 136, }, { 75, 212, 158, 137, 16, 206, 215, 190, 232, 35, 130, 61, 152, 54, 175, 152, }, { 230, 174, 128, 96, 221, 175, 53, 249, 35, 226, 116, 69, 117, 81, 236, 117, }, { 231, 97, 149, 31, 243, 44, 84, 176, 99, 16, 178, 17, 255, 188, 80, 255, }, { 144, 140, 129, 16, 196, 211, 232, 202, 80, 47, 22, 65, 73, 71, 147, 73, }, { 26, 71, 17, 124, 74, 176, 147, 133, 79, 64, 141, 68, 122, 181, 131, 122, }, { 83, 206, 165, 11, 6, 187, 134, 169, 39, 68, 64, 209, 53, 154, 151, 53, }, { 163, 42, 200, 86, 154, 127, 233, 63, 205, 52, 216, 166, 141, 40, 228, 141, }, { 241, 43, 120, 34, 178, 71, 14, 223, 170, 130, 94, 35, 50, 95, 207, 50, }, { 253, 38, 132, 99, 185, 156, 199, 53, 44, 80, 63, 85, 133, 9, 211, 133, }, { 81, 147, 143, 245, 90, 126, 68, 59, 167, 99, 15, 121, 226, 131, 44, 226, }, { 41, 225, 88, 58, 20, 28, 146, 112, 210, 91, 67, 163, 190, 218, 244, 190, }, { 59, 17, 225, 56, 237, 62, 143, 248, 216, 135, 49, 2, 30, 11, 222, 30, }, { 130, 124, 56, 18, 61, 241, 245, 66, 90, 243, 100, 224, 233, 150, 185, 233, }, { 103, 64, 135, 243, 146, 24, 99, 96, 185, 196, 153, 89, 193, 51, 82, 193, }, { 139, 4, 133, 19, 160, 224, 26, 6, 95, 157, 93, 81, 185, 31, 172, 185, }, { 72, 70, 161, 8, 98, 136, 116, 101, 40, 246, 11, 193, 197, 194, 168, 197, }, { 42, 115, 103, 187, 102, 90, 49, 171, 18, 142, 202, 95, 227, 46, 243, 227, }, { 239, 214, 61, 97, 64, 190, 218, 189, 38, 140, 77, 244, 37, 216, 249, 37, }, { 112, 197, 127, 177, 253, 240, 88, 70, 48, 164, 179, 63, 134, 61, 113, 134, }, { 45, 91, 12, 5, 172, 85, 213, 151, 17, 21, 221, 48, 211, 232, 65, 211, }, { 49, 251, 99, 184, 2, 105, 195, 103, 29, 60, 129, 79, 19, 118, 204, 19, }, { 226, 20, 212, 95, 101, 230, 114, 30, 224, 172, 234, 214, 24, 99, 89, 24, }, { 134, 198, 108, 45, 133, 184, 178, 165, 153, 189, 250, 115, 132, 164, 12, 132, }, { 201, 168, 166, 155, 45, 63, 34, 252, 178, 208, 230, 221, 113, 160, 22, 113, }, { 176, 21, 100, 43, 77, 222, 149, 254, 135, 26, 108, 83, 167, 20, 114, 167, }, { 128, 33, 18, 236, 97, 52, 55, 208, 218, 212, 43, 72, 62, 143, 2, 62, }, { 245, 145, 44, 29, 10, 14, 73, 56, 105, 204, 192, 176, 95, 109, 122, 95, }, { 252, 233, 145, 28, 151, 31, 166, 124, 108, 162, 249, 1, 15, 228, 111, 15, }, { 96, 104, 236, 77, 88, 23, 135, 92, 186, 95, 142, 54, 241, 245, 224, 241, }, { 68, 75, 93, 73, 105, 83, 189, 143, 174, 36, 106, 183, 114, 148, 180, 114, }, { 12, 13, 252, 65, 11, 219, 201, 234, 134, 210, 97, 118, 183, 86, 28, 183, }, { 143, 190, 209, 44, 24, 169, 93, 225, 156, 211, 195, 194, 212, 45, 25, 212, }, { 164, 2, 163, 232, 80, 112, 13, 3, 206, 175, 207, 201, 189, 238, 86, 189, }, { 61, 246, 159, 249, 9, 178, 10, 141, 155, 238, 224, 57, 164, 32, 208, 164, }, { 98, 53, 198, 179, 4, 210, 69, 206, 58, 120, 193, 158, 38, 236, 91, 38, }, { 53, 65, 55, 135, 186, 32, 132, 128, 222, 114, 31, 220, 126, 68, 121, 126, }, { 224, 73, 254, 161, 57, 35, 176, 140, 96, 139, 165, 126, 207, 122, 226, 207, }, { 104, 223, 68, 51, 235, 133, 9, 81, 255, 195, 113, 211, 43, 145, 73, 43, }, { 220, 112, 116, 39, 30, 18, 219, 72, 187, 151, 131, 19, 225, 183, 142, 225, }, { 64, 241, 9, 118, 209, 26, 250, 104, 109, 106, 244, 36, 31, 166, 1, 31, }, { 160, 184, 247, 215, 232, 57, 74, 228, 13, 225, 81, 90, 208, 220, 227, 208, }, { 167, 144, 156, 105, 34, 54, 174, 216, 14, 122, 70, 53, 224, 26, 81, 224, }, { 159, 19, 66, 208, 189, 78, 130, 251, 22, 40, 254, 203, 163, 229, 136, 163, }, { 43, 188, 114, 196, 72, 217, 80, 226, 82, 124, 12, 11, 105, 195, 79, 105, }, { 174, 232, 33, 104, 191, 39, 65, 156, 11, 20, 127, 132, 176, 147, 68, 176, }, { 16, 173, 147, 252, 165, 231, 223, 26, 138, 251, 61, 9, 119, 200, 145, 119, }, { 254, 180, 187, 226, 203, 218, 100, 238, 236, 133, 182, 169, 216, 253, 212, 216, }, { 161, 119, 226, 168, 198, 186, 43, 173, 77, 19, 151, 14, 90, 49, 95, 90, }, { 199, 248, 112, 36, 122, 33, 41, 132, 180, 37, 200, 3, 17, 239, 177, 17, }, { 77, 51, 224, 72, 244, 66, 82, 203, 171, 74, 83, 6, 34, 29, 161, 34, }, { 170, 82, 117, 87, 7, 110, 6, 123, 200, 90, 225, 23, 221, 161, 241, 221, }, { 212, 199, 220, 89, 173, 128, 85, 69, 254, 11, 124, 246, 59, 211, 39, 59, }, { 66, 172, 35, 136, 141, 223, 56, 250, 237, 77, 187, 140, 200, 191, 186, 200, }, { 46, 201, 51, 132, 222, 19, 118, 76, 209, 192, 84, 204, 142, 28, 70, 142, }, { 73, 137, 180, 119, 76, 11, 21, 44, 104, 4, 205, 149, 79, 47, 20, 79, }, { 178, 72, 78, 213, 17, 27, 87, 108, 7, 61, 35, 251, 112, 13, 201, 112, }, { 119, 237, 20, 15, 55, 255, 188, 122, 51, 63, 164, 80, 182, 251, 195, 182, }, { 57, 76, 203, 198, 177, 251, 77, 106, 88, 160, 126, 170, 201, 18, 101, 201, }, { 173, 122, 30, 233, 205, 97, 226, 71, 203, 193, 246, 120, 237, 103, 67, 237, }, { 32, 153, 229, 59, 137, 13, 125, 52, 215, 53, 122, 18, 238, 83, 225, 238, }, { 207, 79, 216, 90, 201, 179, 167, 137, 241, 185, 55, 230, 203, 139, 24, 203, }, { 100, 210, 184, 114, 224, 94, 192, 187, 121, 17, 16, 165, 156, 199, 85, 156, }, { 155, 169, 22, 239, 5, 7, 197, 28, 213, 102, 96, 88, 206, 215, 61, 206, }, { 222, 45, 94, 217, 66, 215, 25, 218, 59, 176, 204, 187, 54, 174, 53, 54, }, { 127, 90, 188, 113, 132, 109, 50, 119, 118, 163, 91, 181, 108, 159, 106, 108, }, { 168, 15, 95, 169, 91, 171, 196, 233, 72, 125, 174, 191, 10, 184, 74, 10, }, { 182, 242, 26, 234, 169, 82, 16, 139, 196, 115, 189, 104, 29, 63, 124, 29, }, { 92, 81, 102, 203, 127, 38, 236, 152, 97, 67, 168, 91, 223, 56, 140, 223, }, { 165, 205, 182, 151, 126, 243, 108, 74, 142, 93, 9, 157, 55, 3, 234, 55, }, { 107, 77, 123, 178, 153, 195, 170, 138, 63, 22, 248, 47, 118, 101, 78, 118, }, { 211, 239, 183, 231, 103, 143, 177, 121, 253, 144, 107, 153, 11, 21, 149, 11, }, { 240, 228, 109, 93, 156, 196, 111, 150, 234, 112, 152, 119, 184, 178, 115, 184, }, { 93, 158, 115, 180, 81, 165, 141, 209, 33, 177, 110, 15, 85, 213, 48, 85, }, { 200, 103, 179, 228, 3, 188, 67, 181, 242, 34, 32, 137, 251, 77, 170, 251, }, { 197, 165, 90, 218, 38, 228, 235, 22, 52, 2, 135, 171, 198, 246, 10, 198, }, { 189, 215, 141, 21, 104, 134, 61, 93, 65, 58, 203, 113, 154, 175, 210, 154, }, { 195, 66, 36, 27, 194, 104, 110, 99, 119, 107, 86, 144, 124, 221, 4, 124, }, { 228, 243, 170, 158, 129, 106, 247, 107, 163, 197, 59, 237, 162, 72, 87, 162, }, { 175, 39, 52, 23, 145, 164, 32, 213, 75, 230, 185, 208, 58, 126, 248, 58, }, { 184, 162, 204, 85, 254, 76, 27, 243, 194, 134, 147, 182, 125, 112, 219, 125, }, { 203, 245, 140, 101, 113, 250, 224, 110, 50, 247, 169, 117, 166, 185, 173, 166, }, { 193, 31, 14, 229, 158, 173, 172, 241, 247, 76, 25, 56, 171, 196, 191, 171, }, { 181, 96, 37, 107, 219, 20, 179, 80, 4, 166, 52, 148, 64, 203, 123, 64, }, { 111, 247, 47, 141, 33, 138, 237, 109, 252, 88, 102, 188, 27, 87, 251, 27, }, { 76, 252, 245, 55, 218, 193, 51, 130, 235, 184, 149, 82, 168, 240, 29, 168, }, { 151, 164, 234, 174, 14, 220, 12, 246, 83, 180, 1, 46, 121, 129, 33, 121, }, { 136, 150, 186, 146, 210, 166, 185, 221, 159, 72, 212, 173, 228, 235, 171, 228, }, { 97, 167, 249, 50, 118, 148, 230, 21, 250, 173, 72, 98, 123, 24, 92, 123, }, { 87, 116, 241, 52, 190, 242, 193, 78, 228, 10, 222, 66, 88, 168, 34, 88, }, { 17, 98, 134, 131, 139, 100, 190, 83, 202, 9, 251, 93, 253, 37, 45, 253, }, { 153, 244, 60, 17, 89, 194, 7, 142, 85, 65, 47, 240, 25, 206, 134, 25, }, { 114, 152, 85, 79, 161, 53, 154, 212, 176, 131, 252, 151, 81, 36, 202, 81, }, { 131, 179, 45, 109, 19, 114, 148, 11, 26, 1, 162, 180, 99, 123, 5, 99, }, { 191, 138, 167, 235, 52, 67, 255, 207, 193, 29, 132, 217, 77, 182, 105, 77, }, { 85, 41, 219, 202, 226, 55, 3, 220, 100, 45, 145, 234, 143, 177, 153, 143, }, { 115, 87, 64, 48, 143, 182, 251, 157, 240, 113, 58, 195, 219, 201, 118, 219, }, { 157, 78, 104, 46, 225, 139, 64, 105, 150, 15, 177, 99, 116, 252, 51, 116, }, { 129, 238, 7, 147, 79, 183, 86, 153, 154, 38, 237, 28, 180, 98, 190, 180, }, { 63, 171, 181, 7, 85, 119, 200, 31, 27, 201, 175, 145, 115, 57, 107, 115, }, { 179, 135, 91, 170, 63, 152, 54, 37, 71, 207, 229, 175, 250, 224, 117, 250, }, { 187, 48, 243, 212, 140, 10, 184, 40, 2, 83, 26, 74, 32, 132, 220, 32, }, { 214, 154, 246, 167, 241, 69, 151, 215, 126, 44, 51, 94, 236, 202, 156, 236, }, { 234, 163, 124, 33, 214, 116, 252, 19, 165, 48, 21, 51, 194, 7, 240, 194, }, { 37, 236, 164, 123, 31, 199, 91, 154, 84, 137, 34, 213, 9, 140, 232, 9, }, { 206, 128, 205, 37, 231, 48, 198, 192, 177, 75, 241, 178, 65, 102, 164, 65, }, { 99, 250, 211, 204, 42, 81, 36, 135, 122, 138, 7, 202, 172, 1, 231, 172, }, { 69, 132, 72, 54, 71, 208, 220, 198, 238, 214, 172, 227, 248, 121, 8, 248, }, { 50, 105, 92, 57, 112, 47, 96, 188, 221, 233, 8, 179, 78, 130, 203, 78, }, { 215, 85, 227, 216, 223, 198, 246, 158, 62, 222, 245, 10, 102, 39, 32, 102, }, { 158, 220, 87, 175, 147, 205, 227, 178, 86, 218, 56, 159, 41, 8, 52, 41, }, { 8, 183, 168, 126, 179, 146, 142, 13, 69, 156, 255, 229, 218, 100, 169, 218, }, { 141, 227, 251, 210, 68, 108, 159, 115, 28, 244, 140, 106, 3, 52, 162, 3, }, { 121, 189, 194, 176, 96, 225, 183, 2, 53, 202, 138, 142, 214, 180, 100, 214, }, { 171, 157, 96, 40, 41, 237, 103, 50, 136, 168, 39, 67, 87, 76, 77, 87, }, { 54, 211, 8, 6, 200, 102, 39, 91, 30, 167, 150, 32, 35, 176, 126, 35, }, { 251, 193, 250, 162, 93, 16, 66, 64, 111, 57, 238, 110, 63, 34, 221, 63, }, { 236, 68, 2, 224, 50, 248, 121, 102, 230, 89, 196, 8, 120, 44, 254, 120, }, { 78, 161, 223, 201, 134, 4, 241, 16, 107, 159, 218, 250, 127, 233, 166, 127, }, { 126, 149, 169, 14, 170, 238, 83, 62, 54, 81, 157, 225, 230, 114, 214, 230, }, { 208, 125, 136, 102, 21, 201, 18, 162, 61, 69, 226, 101, 86, 225, 146, 86, }, { 108, 101, 16, 12, 83, 204, 78, 182, 60, 141, 239, 64, 70, 163, 252, 70, }, { 243, 118, 82, 220, 238, 130, 204, 77, 42, 165, 17, 139, 229, 70, 116, 229, }, { 95, 195, 89, 74, 13, 96, 79, 67, 161, 150, 33, 167, 130, 204, 139, 130, }, { 255, 123, 174, 157, 229, 89, 5, 167, 172, 119, 112, 253, 82, 16, 104, 82, }, { 138, 203, 144, 108, 142, 99, 123, 79, 31, 111, 155, 5, 51, 242, 16, 51, }, { 86, 187, 228, 75, 144, 113, 160, 7, 164, 248, 24, 22, 210, 69, 158, 210, }, { 221, 191, 97, 88, 48, 145, 186, 1, 251, 101, 69, 71, 107, 90, 50, 107, }, { 180, 175, 48, 20, 245, 151, 210, 25, 68, 84, 242, 192, 202, 38, 199, 202, }, { 4, 186, 84, 63, 184, 73, 71, 231, 195, 78, 158, 147, 109, 50, 181, 109, }, { 190, 69, 178, 148, 26, 192, 158, 134, 129, 239, 66, 141, 199, 91, 213, 199, }, { 27, 136, 4, 3, 100, 51, 242, 204, 15, 178, 75, 16, 240, 88, 63, 240, }, { 156, 129, 125, 81, 207, 8, 33, 32, 214, 253, 119, 55, 254, 17, 143, 254, }, { 94, 12, 76, 53, 35, 227, 46, 10, 225, 100, 231, 243, 8, 33, 55, 8, }, { 7, 40, 107, 190, 202, 15, 228, 60, 3, 155, 23, 111, 48, 198, 178, 48, }, { 140, 44, 238, 173, 106, 239, 254, 58, 92, 6, 74, 62, 137, 217, 30, 137, }, { 15, 159, 195, 192, 121, 157, 106, 49, 70, 7, 232, 138, 234, 162, 27, 234, }, { 109, 170, 5, 115, 125, 79, 47, 255, 124, 127, 41, 20, 204, 78, 64, 204, }, { 244, 94, 57, 98, 36, 141, 40, 113, 41, 62, 6, 228, 213, 128, 198, 213, }, { 38, 126, 155, 250, 109, 129, 248, 65, 148, 92, 171, 41, 84, 120, 239, 84, }, { 113, 10, 106, 206, 211, 115, 57, 15, 112, 86, 117, 107, 12, 208, 205, 12, }, { 28, 160, 111, 189, 174, 60, 22, 240, 12, 41, 92, 127, 192, 158, 141, 192, }, { 148, 54, 213, 47, 124, 154, 175, 45, 147, 97, 136, 210, 36, 117, 38, 36, }, { 34, 196, 207, 197, 213, 200, 191, 166, 87, 18, 53, 186, 57, 74, 90, 57, }, { 235, 108, 105, 94, 248, 247, 157, 90, 229, 194, 211, 103, 72, 234, 76, 72, }, { 188, 24, 152, 106, 70, 5, 92, 20, 1, 200, 13, 37, 16, 66, 110, 16, }, { 60, 57, 138, 134, 39, 49, 107, 196, 219, 28, 38, 109, 46, 205, 108, 46, }, { 21, 216, 210, 188, 51, 45, 249, 180, 9, 71, 101, 206, 144, 23, 152, 144, }, { 233, 49, 67, 160, 164, 50, 95, 200, 101, 229, 156, 207, 159, 243, 247, 159, }, { 2, 93, 42, 254, 92, 197, 194, 146, 128, 39, 79, 168, 215, 25, 187, 215, }, { 70, 22, 119, 183, 53, 150, 127, 29, 46, 3, 37, 31, 165, 141, 15, 165, }, { 218, 151, 10, 230, 250, 158, 94, 61, 248, 254, 82, 40, 91, 156, 128, 91, }, { 25, 213, 46, 253, 56, 246, 48, 94, 143, 149, 4, 184, 39, 65, 132, 39, }, { 219, 88, 31, 153, 212, 29, 63, 116, 184, 12, 148, 124, 209, 113, 60, 209, }, { 30, 253, 69, 67, 242, 249, 212, 98, 140, 14, 19, 215, 23, 135, 54, 23, }, { 23, 133, 248, 66, 111, 232, 59, 38, 137, 96, 42, 102, 71, 14, 35, 71, }, { 74, 27, 139, 246, 62, 77, 182, 247, 168, 209, 68, 105, 18, 219, 19, 18, }, { 10, 234, 130, 128, 239, 87, 76, 159, 197, 187, 176, 77, 13, 125, 18, 13, }, { 217, 5, 53, 103, 136, 216, 253, 230, 56, 43, 219, 212, 6, 104, 135, 6, }, { 137, 89, 175, 237, 252, 37, 216, 148, 223, 186, 18, 249, 110, 6, 23, 110, }, { 120, 114, 215, 207, 78, 98, 214, 75, 117, 56, 76, 218, 92, 89, 216, 92, }, { 118, 34, 1, 112, 25, 124, 221, 51, 115, 205, 98, 4, 60, 22, 127, 60, }, { 39, 177, 142, 133, 67, 2, 153, 8, 212, 174, 109, 125, 222, 149, 83, 222, }, { 24, 26, 59, 130, 22, 117, 81, 23, 207, 103, 194, 236, 173, 172, 56, 173, }, { 35, 11, 218, 186, 251, 75, 222, 239, 23, 224, 243, 238, 179, 167, 230, 179, }, { 242, 185, 71, 163, 192, 1, 173, 4, 106, 87, 215, 223, 111, 171, 200, 111, }, { 149, 249, 192, 80, 82, 25, 206, 100, 211, 147, 78, 134, 174, 152, 154, 174, }, { 213, 8, 201, 38, 131, 3, 52, 12, 190, 249, 186, 162, 177, 62, 155, 177, }, { 169, 192, 74, 214, 117, 40, 165, 160, 8, 143, 104, 235, 128, 85, 246, 128, }, { 132, 155, 70, 211, 217, 125, 112, 55, 25, 154, 181, 219, 83, 189, 183, 83, }, { 225, 134, 235, 222, 23, 160, 209, 197, 32, 121, 99, 42, 69, 151, 94, 69, }, { 29, 111, 122, 194, 128, 191, 119, 185, 76, 219, 154, 43, 74, 115, 49, 74, }, { 147, 30, 190, 145, 182, 149, 75, 17, 144, 250, 159, 189, 20, 179, 148, 20, }, { 40, 46, 77, 69, 58, 159, 243, 57, 146, 169, 133, 247, 52, 55, 72, 52, }, { 198, 55, 101, 91, 84, 162, 72, 205, 244, 215, 14, 87, 155, 2, 13, 155, }, { 123, 224, 232, 78, 60, 36, 117, 144, 181, 237, 197, 38, 1, 173, 223, 1, }, { 101, 29, 173, 13, 206, 221, 161, 242, 57, 227, 214, 241, 22, 42, 233, 22, }, { 117, 176, 62, 241, 107, 58, 126, 232, 179, 24, 235, 248, 97, 226, 120, 97, }, { 124, 200, 131, 240, 246, 43, 145, 172, 182, 118, 210, 73, 49, 107, 109, 49, }, { 227, 219, 193, 32, 75, 101, 19, 87, 160, 94, 44, 130, 146, 142, 229, 146, }, { 238, 25, 40, 30, 110, 61, 187, 244, 102, 126, 139, 160, 175, 53, 69, 175, }, { 33, 86, 240, 68, 167, 142, 28, 125, 151, 199, 188, 70, 100, 190, 93, 100, }, { 142, 113, 196, 83, 54, 42, 60, 168, 220, 33, 5, 150, 94, 192, 165, 94, }, { 249, 156, 208, 92, 1, 213, 128, 210, 239, 30, 161, 198, 232, 59, 102, 232, }, { 1, 207, 21, 127, 46, 131, 97, 73, 64, 242, 198, 84, 138, 237, 188, 138, }, { 91, 121, 13, 117, 181, 41, 8, 164, 98, 216, 191, 52, 239, 254, 62, 239, }, { 145, 67, 148, 111, 234, 80, 137, 131, 16, 221, 208, 21, 195, 170, 47, 195, }, { 20, 23, 199, 195, 29, 174, 152, 253, 73, 181, 163, 154, 26, 250, 36, 26, }, { 122, 47, 253, 49, 18, 167, 20, 217, 245, 31, 3, 114, 139, 64, 99, 139, }, { 246, 3, 19, 156, 120, 72, 234, 227, 169, 25, 73, 76, 2, 153, 125, 2, }, { 177, 218, 113, 84, 99, 93, 244, 183, 199, 232, 170, 7, 45, 249, 206, 45, }, { 183, 61, 15, 149, 135, 209, 113, 194, 132, 129, 123, 60, 151, 210, 192, 151, }, { 202, 58, 153, 26, 95, 121, 129, 39, 114, 5, 111, 33, 44, 84, 17, 44, }, { 90, 182, 24, 10, 155, 170, 105, 237, 34, 42, 121, 96, 101, 19, 130, 101, }, { 248, 83, 197, 35, 47, 86, 225, 155, 175, 236, 103, 146, 98, 214, 218, 98, }, { 204, 221, 231, 219, 187, 245, 4, 82, 49, 108, 190, 26, 150, 127, 31, 150, }, { 71, 217, 98, 200, 27, 21, 30, 84, 110, 241, 227, 75, 47, 96, 179, 47, }, { 150, 107, 255, 209, 32, 95, 109, 191, 19, 70, 199, 122, 243, 108, 157, 243, }, { 110, 56, 58, 242, 15, 9, 140, 36, 188, 170, 160, 232, 145, 186, 71, 145, }, { 19, 63, 172, 125, 215, 161, 124, 193, 74, 46, 180, 245, 42, 60, 150, 42, }, { 36, 35, 177, 4, 49, 68, 58, 211, 20, 123, 228, 129, 131, 97, 84, 131, }, { 116, 127, 43, 142, 69, 185, 31, 161, 243, 234, 45, 172, 235, 15, 196, 235, }, { 9, 120, 189, 1, 157, 17, 239, 68, 5, 110, 57, 177, 80, 137, 21, 80, }, { 3, 146, 63, 129, 114, 70, 163, 219, 192, 213, 137, 252, 93, 244, 7, 93, }, { 48, 52, 118, 199, 44, 234, 162, 46, 93, 206, 71, 27, 153, 155, 112, 153, }, { 80, 92, 154, 138, 116, 253, 37, 114, 231, 145, 201, 45, 104, 110, 144, 104, }, { 79, 110, 202, 182, 168, 135, 144, 89, 43, 109, 28, 174, 245, 4, 26, 245, }, { 14, 80, 214, 191, 87, 30, 11, 120, 6, 245, 46, 222, 96, 79, 167, 96, }, { 125, 7, 150, 143, 216, 168, 240, 229, 246, 132, 20, 29, 187, 134, 209, 187, }, { 185, 109, 217, 42, 208, 207, 122, 186, 130, 116, 85, 226, 247, 157, 103, 247, }, { 55, 28, 29, 121, 230, 229, 70, 18, 94, 85, 80, 116, 169, 93, 194, 169, }, { 84, 230, 206, 181, 204, 180, 98, 149, 36, 223, 87, 190, 5, 92, 37, 5, }, { 31, 50, 80, 60, 220, 122, 181, 43, 204, 252, 213, 131, 157, 106, 138, 157, }, { 194, 141, 49, 100, 236, 235, 15, 42, 55, 153, 144, 196, 246, 48, 184, 246, }, { 51, 166, 73, 70, 94, 172, 1, 245, 157, 27, 206, 231, 196, 111, 119, 196, }, { 58, 222, 244, 71, 195, 189, 238, 177, 152, 117, 247, 86, 148, 230, 98, 148, }, { 229, 60, 191, 225, 175, 233, 150, 34, 227, 55, 253, 185, 40, 165, 235, 40, }, { 232, 254, 86, 223, 138, 177, 62, 129, 37, 23, 90, 155, 21, 30, 75, 21, }, { 18, 240, 185, 2, 249, 34, 29, 136, 10, 220, 114, 161, 160, 209, 42, 160, }, { 146, 209, 171, 238, 152, 22, 42, 88, 208, 8, 89, 233, 158, 94, 40, 158, }, { 172, 181, 11, 150, 227, 226, 131, 14, 139, 51, 48, 44, 103, 138, 255, 103, }, { 52, 142, 34, 248, 148, 163, 229, 201, 158, 128, 217, 136, 244, 169, 197, 244, }, { 82, 1, 176, 116, 40, 56, 231, 224, 103, 182, 134, 133, 191, 119, 43, 191, }, { 237, 139, 23, 159, 28, 123, 24, 47, 166, 171, 2, 92, 242, 193, 66, 242, }, { 250, 14, 239, 221, 115, 147, 35, 9, 47, 203, 40, 58, 181, 207, 97, 181, }, { 152, 59, 41, 110, 119, 65, 102, 199, 21, 179, 233, 164, 147, 35, 58, 147, }, { 223, 226, 75, 166, 108, 84, 120, 147, 123, 66, 10, 239, 188, 67, 137, 188, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 102, 143, 146, 140, 188, 155, 2, 41, 249, 54, 95, 13, 75, 222, 238, 75, }, { 47, 6, 38, 251, 240, 144, 23, 5, 145, 50, 146, 152, 4, 241, 250, 4, }, { 62, 100, 160, 120, 123, 244, 169, 86, 91, 59, 105, 197, 249, 212, 215, 249, }, }, { { 81, 139, 192, 72, 65, 219, 157, 121, 4, 91, 179, 66, 110, 229, 24, 198, }, { 51, 234, 37, 39, 250, 129, 48, 231, 163, 6, 247, 18, 101, 143, 76, 54, }, { 164, 152, 90, 64, 72, 66, 179, 201, 59, 46, 25, 202, 156, 4, 154, 157, }, { 103, 235, 17, 215, 20, 151, 194, 89, 108, 137, 166, 57, 107, 128, 171, 75, }, { 10, 215, 43, 179, 157, 89, 222, 77, 85, 107, 7, 210, 192, 23, 61, 181, }, { 231, 51, 213, 125, 58, 28, 27, 17, 166, 59, 24, 161, 241, 194, 82, 32, }, { 40, 218, 172, 137, 49, 167, 254, 247, 151, 111, 28, 206, 134, 92, 244, 145, }, { 26, 204, 210, 55, 232, 112, 108, 68, 221, 236, 96, 193, 66, 142, 139, 128, }, { 108, 192, 97, 253, 170, 152, 190, 64, 208, 103, 42, 246, 10, 202, 165, 217, }, { 101, 208, 167, 38, 82, 59, 69, 241, 125, 64, 115, 3, 234, 58, 205, 5, }, { 250, 78, 69, 3, 59, 13, 159, 58, 161, 202, 79, 51, 82, 28, 64, 85, }, { 232, 110, 10, 118, 8, 136, 170, 155, 56, 132, 253, 26, 81, 63, 144, 46, }, { 172, 116, 199, 2, 147, 183, 234, 44, 127, 140, 203, 34, 221, 169, 193, 102, }, { 90, 160, 176, 98, 255, 212, 225, 96, 184, 181, 63, 141, 15, 175, 22, 84, }, { 169, 254, 51, 186, 60, 122, 133, 235, 180, 88, 41, 75, 189, 67, 62, 221, }, { 48, 45, 200, 79, 159, 123, 21, 27, 91, 74, 169, 53, 69, 104, 25, 95, }, { 139, 243, 180, 128, 144, 132, 165, 81, 118, 92, 50, 87, 251, 8, 247, 249, }, { 131, 31, 41, 194, 75, 113, 252, 180, 50, 254, 224, 191, 186, 165, 172, 2, }, { 239, 223, 72, 63, 225, 233, 66, 244, 226, 153, 202, 73, 176, 111, 9, 219, }, { 102, 23, 74, 78, 55, 193, 96, 13, 133, 12, 45, 36, 202, 221, 152, 108, }, { 20, 109, 86, 165, 249, 178, 127, 154, 170, 214, 14, 103, 67, 46, 122, 169, }, { 13, 102, 105, 250, 116, 56, 54, 34, 143, 118, 48, 129, 33, 71, 164, 64, }, { 5, 138, 244, 184, 175, 205, 111, 199, 203, 212, 226, 105, 96, 234, 255, 187, }, { 146, 248, 139, 223, 29, 14, 236, 233, 83, 252, 12, 177, 153, 97, 41, 16, }, { 122, 150, 129, 169, 21, 134, 70, 114, 107, 120, 241, 171, 200, 94, 185, 62, }, { 19, 220, 20, 236, 16, 211, 151, 245, 112, 203, 57, 52, 162, 126, 227, 92, }, { 216, 67, 194, 57, 151, 243, 191, 128, 99, 206, 84, 47, 20, 87, 137, 113, }, { 135, 105, 134, 227, 199, 234, 49, 39, 16, 175, 137, 203, 123, 18, 96, 158, }, { 181, 127, 248, 93, 30, 61, 163, 148, 90, 44, 245, 196, 191, 192, 31, 143, }, { 223, 242, 128, 112, 126, 146, 87, 239, 185, 211, 99, 124, 245, 7, 16, 132, }, { 145, 63, 102, 183, 120, 244, 201, 21, 171, 176, 82, 150, 185, 134, 124, 121, }, { 45, 80, 88, 49, 158, 106, 145, 48, 92, 187, 254, 167, 230, 182, 11, 42, }, { 160, 238, 245, 97, 196, 217, 126, 90, 25, 127, 112, 190, 93, 179, 86, 1, }, { 191, 168, 211, 238, 131, 100, 125, 217, 15, 71, 242, 22, 127, 215, 34, 58, }, { 36, 64, 158, 234, 102, 201, 106, 129, 241, 156, 167, 82, 6, 70, 99, 246, }, { 73, 124, 164, 142, 239, 7, 118, 149, 200, 126, 6, 185, 173, 209, 245, 8, }, { 238, 35, 19, 166, 194, 191, 224, 160, 11, 28, 65, 84, 17, 50, 58, 252, }, { 44, 172, 3, 168, 189, 60, 51, 100, 181, 62, 117, 186, 71, 235, 56, 13, }, { 29, 125, 144, 126, 1, 17, 132, 43, 7, 241, 87, 146, 163, 222, 18, 117, }, { 204, 46, 148, 156, 110, 65, 192, 26, 201, 24, 90, 72, 87, 121, 243, 216, }, { 124, 219, 152, 121, 223, 177, 12, 73, 88, 224, 77, 229, 136, 83, 19, 236, }, { 142, 121, 64, 56, 63, 73, 202, 150, 189, 136, 208, 62, 155, 226, 8, 66, }, { 184, 25, 145, 167, 106, 5, 149, 182, 213, 90, 197, 69, 158, 135, 187, 207, }, { 230, 207, 142, 228, 25, 74, 185, 69, 79, 190, 147, 188, 80, 159, 97, 7, }, { 244, 239, 193, 145, 42, 207, 140, 228, 214, 240, 33, 149, 83, 188, 177, 124, }, { 38, 123, 40, 27, 32, 101, 237, 41, 224, 85, 114, 104, 135, 252, 5, 184, }, { 27, 48, 137, 174, 203, 38, 206, 16, 52, 105, 235, 220, 227, 211, 184, 167, }, { 79, 49, 189, 94, 37, 48, 60, 174, 251, 230, 186, 247, 237, 220, 95, 218, }, { 213, 37, 171, 195, 227, 203, 137, 162, 236, 184, 100, 174, 53, 16, 45, 49, }, { 197, 62, 82, 71, 150, 226, 59, 171, 100, 63, 3, 189, 183, 137, 155, 4, }, { 80, 119, 155, 209, 98, 141, 63, 45, 237, 222, 56, 95, 207, 184, 43, 225, }, { 121, 81, 108, 193, 112, 124, 99, 142, 147, 52, 175, 140, 232, 185, 236, 87, }, { 119, 240, 232, 83, 97, 190, 112, 80, 228, 14, 193, 42, 233, 25, 29, 126, }, { 22, 86, 224, 84, 191, 30, 248, 50, 187, 31, 219, 93, 194, 148, 28, 231, }, { 82, 76, 45, 32, 36, 33, 184, 133, 252, 23, 237, 101, 78, 2, 77, 175, }, { 21, 145, 13, 60, 218, 228, 221, 206, 67, 83, 133, 122, 226, 115, 73, 142, }, { 155, 232, 77, 4, 229, 173, 23, 88, 254, 219, 85, 68, 121, 145, 65, 204, }, { 180, 131, 163, 196, 61, 107, 1, 192, 179, 169, 126, 217, 30, 157, 44, 168, }, { 62, 140, 76, 221, 142, 185, 6, 197, 44, 112, 199, 147, 68, 200, 232, 118, }, { 128, 216, 196, 170, 46, 139, 217, 72, 202, 178, 190, 152, 154, 66, 249, 107, }, { 54, 96, 209, 159, 85, 76, 95, 32, 104, 210, 21, 123, 5, 101, 179, 141, }, { 211, 104, 178, 19, 41, 252, 195, 153, 223, 32, 216, 224, 117, 29, 135, 227, }, { 43, 29, 65, 225, 84, 93, 219, 11, 111, 35, 66, 233, 166, 187, 161, 248, }, { 1, 252, 91, 153, 35, 86, 162, 84, 233, 133, 139, 29, 161, 93, 51, 39, }, { 153, 211, 251, 245, 163, 1, 144, 240, 239, 18, 128, 126, 248, 43, 39, 130, }, { 221, 201, 54, 129, 56, 62, 208, 71, 168, 26, 182, 70, 116, 189, 118, 202, }, { 246, 212, 119, 96, 108, 99, 11, 76, 199, 57, 244, 175, 210, 6, 215, 50, }, { 104, 182, 206, 220, 38, 3, 115, 211, 242, 54, 67, 130, 203, 125, 105, 69, }, { 18, 32, 79, 117, 51, 133, 53, 161, 153, 78, 178, 41, 3, 35, 208, 123, }, { 138, 15, 239, 25, 179, 210, 7, 5, 159, 217, 185, 74, 90, 85, 196, 222, }, { 9, 16, 198, 219, 248, 163, 251, 177, 173, 39, 89, 245, 224, 240, 104, 220, }, { 166, 163, 236, 177, 14, 238, 52, 97, 42, 231, 204, 240, 29, 190, 252, 211, }, { 114, 122, 28, 235, 206, 115, 31, 151, 47, 218, 35, 67, 137, 243, 226, 197, }, { 196, 194, 9, 222, 181, 180, 153, 255, 141, 186, 136, 160, 22, 212, 168, 35, }, { 58, 250, 227, 252, 2, 34, 203, 86, 14, 33, 174, 231, 133, 127, 36, 234, }, { 116, 55, 5, 59, 4, 68, 85, 172, 28, 66, 159, 13, 201, 254, 72, 23, }, { 193, 72, 253, 102, 26, 121, 246, 56, 70, 110, 106, 201, 118, 62, 87, 152, }, { 202, 99, 141, 76, 164, 118, 138, 33, 250, 128, 230, 6, 23, 116, 89, 10, }, { 185, 229, 202, 62, 73, 83, 55, 226, 60, 223, 78, 88, 63, 218, 136, 232, }, { 112, 65, 170, 26, 136, 223, 152, 63, 62, 19, 246, 121, 8, 73, 132, 139, }, { 188, 111, 62, 134, 230, 158, 88, 37, 247, 11, 172, 49, 95, 48, 119, 83, }, { 52, 91, 103, 110, 19, 224, 216, 136, 121, 27, 192, 65, 132, 223, 213, 195, }, { 106, 141, 120, 45, 96, 175, 244, 123, 227, 255, 150, 184, 74, 199, 15, 11, }, { 72, 128, 255, 23, 204, 81, 212, 193, 33, 251, 141, 164, 12, 140, 198, 47, }, { 95, 42, 68, 218, 80, 25, 142, 167, 115, 97, 221, 228, 111, 69, 233, 239, }, { 143, 133, 27, 161, 28, 31, 104, 194, 84, 13, 91, 35, 58, 191, 59, 101, }, { 105, 74, 149, 69, 5, 85, 209, 135, 27, 179, 200, 159, 106, 32, 90, 98, }, { 154, 20, 22, 157, 198, 251, 181, 12, 23, 94, 222, 89, 216, 204, 114, 235, }, { 218, 120, 116, 200, 209, 95, 56, 40, 114, 7, 129, 21, 149, 237, 239, 63, }, { 253, 255, 7, 74, 210, 108, 119, 85, 123, 215, 120, 96, 179, 76, 217, 160, }, { 57, 61, 14, 148, 103, 216, 238, 170, 246, 109, 240, 192, 165, 152, 113, 131, }, { 165, 100, 1, 217, 107, 20, 17, 157, 210, 171, 146, 215, 61, 89, 169, 186, }, { 252, 3, 92, 211, 241, 58, 213, 1, 146, 82, 243, 125, 18, 17, 234, 135, }, { 224, 130, 151, 52, 211, 125, 243, 126, 124, 38, 47, 242, 16, 146, 203, 213, }, { 12, 154, 50, 99, 87, 110, 148, 118, 102, 243, 187, 156, 128, 26, 151, 103, }, { 87, 198, 217, 152, 139, 236, 215, 66, 55, 195, 15, 12, 46, 232, 178, 20, }, { 84, 1, 52, 240, 238, 22, 242, 190, 207, 143, 81, 43, 14, 15, 231, 125, }, { 141, 190, 173, 80, 90, 179, 239, 106, 69, 196, 142, 25, 187, 5, 93, 43, }, { 210, 148, 233, 138, 10, 170, 97, 205, 54, 165, 83, 253, 212, 64, 180, 196, }, { 247, 40, 44, 249, 79, 53, 169, 24, 46, 188, 127, 178, 115, 91, 228, 21, }, { 94, 214, 31, 67, 115, 79, 44, 243, 154, 228, 86, 249, 206, 24, 218, 200, }, { 249, 137, 168, 107, 94, 247, 186, 198, 89, 134, 17, 20, 114, 251, 21, 60, }, { 242, 162, 216, 65, 224, 248, 198, 223, 229, 104, 157, 219, 19, 177, 27, 174, }, { 227, 69, 122, 92, 182, 135, 214, 130, 132, 106, 113, 213, 48, 117, 158, 188, }, { 59, 6, 184, 101, 33, 116, 105, 2, 231, 164, 37, 250, 36, 34, 23, 205, }, { 3, 199, 237, 104, 101, 250, 37, 252, 248, 76, 94, 39, 32, 231, 85, 105, }, { 161, 18, 174, 248, 231, 143, 220, 14, 240, 250, 251, 163, 252, 238, 101, 38, }, { 150, 142, 36, 254, 145, 149, 33, 122, 113, 173, 101, 197, 88, 214, 229, 140, }, { 170, 57, 222, 210, 89, 128, 160, 23, 76, 20, 119, 108, 157, 164, 107, 180, }, { 159, 158, 226, 37, 105, 54, 218, 203, 220, 138, 60, 48, 184, 38, 141, 80, }, { 70, 33, 123, 133, 221, 147, 199, 31, 86, 193, 227, 2, 13, 44, 55, 6, }, { 65, 144, 57, 204, 52, 242, 47, 112, 140, 220, 212, 81, 236, 124, 174, 243, }, { 42, 225, 26, 120, 119, 11, 121, 95, 134, 166, 201, 244, 7, 230, 146, 223, }, { 96, 90, 83, 158, 253, 246, 42, 54, 182, 148, 145, 106, 138, 208, 50, 190, }, { 229, 8, 99, 140, 124, 176, 156, 185, 183, 242, 205, 155, 112, 120, 52, 110, }, { 148, 181, 146, 15, 215, 57, 166, 210, 96, 100, 176, 255, 217, 108, 131, 194, }, { 190, 84, 136, 119, 160, 50, 223, 141, 230, 194, 121, 11, 222, 138, 17, 29, }, { 144, 195, 61, 46, 91, 162, 107, 65, 66, 53, 217, 139, 24, 219, 79, 94, }, { 47, 107, 238, 192, 216, 198, 22, 152, 77, 114, 43, 157, 103, 12, 109, 100, }, { 157, 165, 84, 212, 47, 154, 93, 99, 205, 67, 233, 10, 57, 156, 235, 30, }, { 129, 36, 159, 51, 13, 221, 123, 28, 35, 55, 53, 133, 59, 31, 202, 76, }, { 162, 213, 67, 144, 130, 117, 249, 242, 8, 182, 165, 132, 220, 9, 48, 79, }, { 118, 12, 179, 202, 66, 232, 210, 4, 13, 139, 74, 55, 72, 68, 46, 89, }, { 75, 71, 18, 127, 169, 171, 241, 61, 217, 183, 211, 131, 44, 107, 147, 70, }, { 228, 244, 56, 21, 95, 230, 62, 237, 94, 119, 70, 134, 209, 37, 7, 73, }, { 6, 77, 25, 208, 202, 55, 74, 59, 51, 152, 188, 78, 64, 13, 170, 210, }, { 85, 253, 111, 105, 205, 64, 80, 234, 38, 10, 218, 54, 175, 82, 212, 90, }, { 174, 79, 113, 243, 213, 27, 109, 132, 110, 69, 30, 24, 92, 19, 167, 40, }, { 28, 129, 203, 231, 34, 71, 38, 127, 238, 116, 220, 143, 2, 131, 33, 82, }, { 117, 203, 94, 162, 39, 18, 247, 248, 245, 199, 20, 16, 104, 163, 123, 48, }, { 91, 92, 235, 251, 220, 130, 67, 52, 81, 48, 180, 144, 174, 242, 37, 115, }, { 4, 118, 175, 33, 140, 155, 205, 147, 34, 81, 105, 116, 193, 183, 204, 156, }, { 39, 135, 115, 130, 3, 51, 79, 125, 9, 208, 249, 117, 38, 161, 54, 159, }, { 77, 10, 11, 175, 99, 156, 187, 6, 234, 47, 111, 205, 108, 102, 57, 148, }, { 156, 89, 15, 77, 12, 204, 255, 55, 36, 198, 98, 23, 152, 193, 216, 57, }, { 32, 54, 49, 203, 234, 82, 167, 18, 211, 205, 206, 38, 199, 241, 175, 106, }, { 83, 176, 118, 185, 7, 119, 26, 209, 21, 146, 102, 120, 239, 95, 126, 136, }, { 208, 175, 95, 123, 76, 6, 230, 101, 39, 108, 134, 199, 85, 250, 210, 138, }, { 149, 73, 201, 150, 244, 111, 4, 134, 137, 225, 59, 226, 120, 49, 176, 229, }, { 243, 94, 131, 216, 195, 174, 100, 139, 12, 237, 22, 198, 178, 236, 40, 137, }, { 133, 82, 48, 18, 129, 70, 182, 143, 1, 102, 92, 241, 250, 168, 6, 208, }, { 136, 52, 89, 232, 245, 126, 128, 173, 142, 16, 108, 112, 219, 239, 162, 144, }, { 176, 245, 12, 229, 177, 240, 204, 83, 145, 248, 23, 173, 223, 42, 224, 52, }, { 34, 13, 135, 58, 172, 254, 32, 186, 194, 4, 27, 28, 70, 75, 201, 36, }, { 11, 43, 112, 42, 190, 15, 124, 25, 188, 238, 140, 207, 97, 74, 14, 146, }, { 2, 59, 182, 241, 70, 172, 135, 168, 17, 201, 213, 58, 129, 186, 102, 78, }, { 201, 164, 96, 36, 193, 140, 175, 221, 2, 204, 184, 33, 55, 147, 12, 99, }, { 219, 132, 47, 81, 242, 9, 154, 124, 155, 130, 10, 8, 52, 176, 220, 24, }, { 182, 184, 21, 53, 123, 199, 134, 104, 162, 96, 171, 227, 159, 39, 74, 230, }, { 64, 108, 98, 85, 23, 164, 141, 36, 101, 89, 95, 76, 77, 33, 157, 212, }, { 78, 205, 230, 199, 6, 102, 158, 250, 18, 99, 49, 234, 76, 129, 108, 253, }, { 215, 30, 29, 50, 165, 103, 14, 10, 253, 113, 177, 148, 180, 170, 75, 127, }, { 171, 197, 133, 75, 122, 214, 2, 67, 165, 145, 252, 113, 60, 249, 88, 147, }, { 152, 47, 160, 108, 128, 87, 50, 164, 6, 151, 11, 99, 89, 118, 20, 165, }, { 200, 88, 59, 189, 226, 218, 13, 137, 235, 73, 51, 60, 150, 206, 63, 68, }, { 175, 179, 42, 106, 246, 77, 207, 208, 135, 192, 149, 5, 253, 78, 148, 15, }, { 163, 41, 24, 9, 161, 35, 91, 166, 225, 51, 46, 153, 125, 84, 3, 104, }, { 68, 26, 205, 116, 155, 63, 64, 183, 71, 8, 54, 56, 140, 150, 81, 72, }, { 132, 174, 107, 139, 162, 16, 20, 219, 232, 227, 215, 236, 91, 245, 53, 247, }, { 158, 98, 185, 188, 74, 96, 120, 159, 53, 15, 183, 45, 25, 123, 190, 119, }, { 226, 185, 33, 197, 149, 209, 116, 214, 109, 239, 250, 200, 145, 40, 173, 155, }, { 205, 210, 207, 5, 77, 23, 98, 78, 32, 157, 209, 85, 246, 36, 192, 255, }, { 251, 178, 30, 154, 24, 91, 61, 110, 72, 79, 196, 46, 243, 65, 115, 114, }, { 69, 230, 150, 237, 184, 105, 226, 227, 174, 141, 189, 37, 45, 203, 98, 111, }, { 35, 241, 220, 163, 143, 168, 130, 238, 43, 129, 144, 1, 231, 22, 250, 3, }, { 198, 249, 191, 47, 243, 24, 30, 87, 156, 115, 93, 154, 151, 110, 206, 109, }, { 61, 75, 161, 181, 235, 67, 35, 57, 212, 60, 153, 180, 100, 47, 189, 31, }, { 23, 170, 187, 205, 156, 72, 90, 102, 82, 154, 80, 64, 99, 201, 47, 192, }, { 235, 169, 231, 30, 109, 114, 143, 103, 192, 200, 163, 61, 113, 216, 197, 71, }, { 46, 151, 181, 89, 251, 144, 180, 204, 164, 247, 160, 128, 198, 81, 94, 67, }, { 203, 159, 214, 213, 135, 32, 40, 117, 19, 5, 109, 27, 182, 41, 106, 45, }, { 178, 206, 186, 20, 247, 92, 75, 251, 128, 49, 194, 151, 94, 144, 134, 122, }, { 92, 237, 169, 178, 53, 227, 171, 91, 139, 45, 131, 195, 79, 162, 188, 134, }, { 74, 187, 73, 230, 138, 253, 83, 105, 48, 50, 88, 158, 141, 54, 160, 97, }, { 100, 44, 252, 191, 113, 109, 231, 165, 148, 197, 248, 30, 75, 103, 254, 34, }, { 113, 189, 241, 131, 171, 137, 58, 107, 215, 150, 125, 100, 169, 20, 183, 172, }, { 53, 167, 60, 247, 48, 182, 122, 220, 144, 158, 75, 92, 37, 130, 230, 228, }, { 199, 5, 228, 182, 208, 78, 188, 3, 117, 246, 214, 135, 54, 51, 253, 74, }, { 7, 177, 66, 73, 233, 97, 232, 111, 218, 29, 55, 83, 225, 80, 153, 245, }, { 89, 103, 93, 10, 154, 46, 196, 156, 64, 249, 97, 170, 47, 72, 67, 61, }, { 56, 193, 85, 13, 68, 142, 76, 254, 31, 232, 123, 221, 4, 197, 66, 164, }, { 234, 85, 188, 135, 78, 36, 45, 51, 41, 77, 40, 32, 208, 133, 246, 96, }, { 55, 156, 138, 6, 118, 26, 253, 116, 129, 87, 158, 102, 164, 56, 128, 170, }, { 99, 157, 190, 246, 152, 12, 15, 202, 78, 216, 207, 77, 170, 55, 103, 215, }, { 24, 247, 100, 198, 174, 220, 235, 236, 204, 37, 181, 251, 195, 52, 237, 206, }, { 167, 95, 183, 40, 45, 184, 150, 53, 195, 98, 71, 237, 188, 227, 207, 244, }, { 88, 155, 6, 147, 185, 120, 102, 200, 169, 124, 234, 183, 142, 21, 112, 26, }, { 17, 231, 162, 29, 86, 127, 16, 93, 97, 2, 236, 14, 35, 196, 133, 18, }, { 245, 19, 154, 8, 9, 153, 46, 176, 63, 117, 170, 136, 242, 225, 130, 91, }, { 217, 191, 153, 160, 180, 165, 29, 212, 138, 75, 223, 50, 181, 10, 186, 86, }, { 233, 146, 81, 239, 43, 222, 8, 207, 209, 1, 118, 7, 240, 98, 163, 9, }, { 37, 188, 197, 115, 69, 159, 200, 213, 24, 25, 44, 79, 167, 27, 80, 209, }, { 248, 117, 243, 242, 125, 161, 24, 146, 176, 3, 154, 9, 211, 166, 38, 27, }, { 151, 114, 127, 103, 178, 195, 131, 46, 152, 40, 238, 216, 249, 139, 214, 171, }, { 177, 9, 87, 124, 146, 166, 110, 7, 120, 125, 156, 176, 126, 119, 211, 19, }, { 25, 11, 63, 95, 141, 138, 73, 184, 37, 160, 62, 230, 98, 105, 222, 233, }, { 15, 93, 223, 11, 50, 148, 177, 138, 158, 191, 229, 187, 160, 253, 194, 14, }, { 137, 200, 2, 113, 214, 40, 34, 249, 103, 149, 231, 109, 122, 178, 145, 183, }, { 220, 53, 109, 24, 27, 104, 114, 19, 65, 159, 61, 91, 213, 224, 69, 237, }, { 8, 236, 157, 66, 219, 245, 89, 229, 68, 162, 210, 232, 65, 173, 91, 251, }, { 241, 101, 53, 41, 133, 2, 227, 35, 29, 36, 195, 252, 51, 86, 78, 199, }, { 168, 2, 104, 35, 31, 44, 39, 191, 93, 221, 162, 86, 28, 30, 13, 250, }, { 14, 161, 132, 146, 17, 194, 19, 222, 119, 58, 110, 166, 1, 160, 241, 41, }, { 111, 7, 140, 149, 207, 98, 155, 188, 40, 43, 116, 209, 42, 45, 240, 176, }, { 125, 39, 195, 224, 252, 231, 174, 29, 177, 101, 198, 248, 41, 14, 32, 203, }, { 212, 217, 240, 90, 192, 157, 43, 246, 5, 61, 239, 179, 148, 77, 30, 22, }, { 189, 147, 101, 31, 197, 200, 250, 113, 30, 142, 39, 44, 254, 109, 68, 116, }, { 134, 149, 221, 122, 228, 188, 147, 115, 249, 42, 2, 214, 218, 79, 83, 185, }, { 236, 24, 165, 87, 132, 19, 103, 8, 26, 213, 148, 110, 144, 136, 92, 178, }, { 50, 22, 126, 190, 217, 215, 146, 179, 74, 131, 124, 15, 196, 210, 127, 17, }, { 126, 224, 46, 136, 153, 29, 139, 225, 73, 41, 152, 223, 9, 233, 117, 162, }, { 237, 228, 254, 206, 167, 69, 197, 92, 243, 80, 31, 115, 49, 213, 111, 149, }, { 110, 251, 215, 12, 236, 52, 57, 232, 193, 174, 255, 204, 139, 112, 195, 151, }, { 195, 115, 75, 151, 92, 213, 113, 144, 87, 167, 191, 243, 247, 132, 49, 214, }, { 33, 202, 106, 82, 201, 4, 5, 70, 58, 72, 69, 59, 102, 172, 156, 77, }, { 98, 97, 229, 111, 187, 90, 173, 158, 167, 93, 68, 80, 11, 106, 84, 240, }, { 206, 21, 34, 109, 40, 237, 71, 178, 216, 209, 143, 114, 214, 195, 149, 150, }, { 147, 4, 208, 70, 62, 88, 78, 189, 186, 121, 135, 172, 56, 60, 26, 55, }, { 76, 246, 80, 54, 64, 202, 25, 82, 3, 170, 228, 208, 205, 59, 10, 179, }, { 222, 14, 219, 233, 93, 196, 245, 187, 80, 86, 232, 97, 84, 90, 35, 163, }, { 63, 112, 23, 68, 173, 239, 164, 145, 197, 245, 76, 142, 229, 149, 219, 81, }, { 67, 171, 143, 61, 114, 94, 168, 216, 157, 21, 1, 107, 109, 198, 200, 189, }, { 115, 134, 71, 114, 237, 37, 189, 195, 198, 95, 168, 94, 40, 174, 209, 226, }, { 173, 136, 156, 155, 176, 225, 72, 120, 150, 9, 64, 63, 124, 244, 242, 65, }, { 240, 153, 110, 176, 166, 84, 65, 119, 244, 161, 72, 225, 146, 11, 125, 224, }, { 71, 221, 32, 28, 254, 197, 101, 75, 191, 68, 104, 31, 172, 113, 4, 33, }, { 60, 183, 250, 44, 200, 21, 129, 109, 61, 185, 18, 169, 197, 114, 142, 56, }, { 97, 166, 8, 7, 222, 160, 136, 98, 95, 17, 26, 119, 43, 141, 1, 153, }, { 86, 58, 130, 1, 168, 186, 117, 22, 222, 70, 132, 17, 143, 181, 129, 51, }, { 41, 38, 247, 16, 18, 241, 92, 163, 126, 234, 151, 211, 39, 1, 199, 182, }, { 123, 106, 218, 48, 54, 208, 228, 38, 130, 253, 122, 182, 105, 3, 138, 25, }, { 16, 27, 249, 132, 117, 41, 178, 9, 136, 135, 103, 19, 130, 153, 182, 53, }, { 255, 196, 177, 187, 148, 192, 240, 253, 106, 30, 173, 90, 50, 246, 191, 238, }, { 93, 17, 242, 43, 22, 181, 9, 15, 98, 168, 8, 222, 238, 255, 143, 161, }, { 49, 209, 147, 214, 188, 45, 183, 79, 178, 207, 34, 40, 228, 53, 42, 120, }, { 183, 68, 78, 172, 88, 145, 36, 60, 75, 229, 32, 254, 62, 122, 121, 193, }, { 179, 50, 225, 141, 212, 10, 233, 175, 105, 180, 73, 138, 255, 205, 181, 93, }, { 107, 113, 35, 180, 67, 249, 86, 47, 10, 122, 29, 165, 235, 154, 60, 44, }, { 192, 180, 166, 255, 57, 47, 84, 108, 175, 235, 225, 212, 215, 99, 100, 191, }, { 127, 28, 117, 17, 186, 75, 41, 181, 160, 172, 19, 194, 168, 180, 70, 133, }, { 30, 186, 125, 22, 100, 235, 161, 215, 255, 189, 9, 181, 131, 57, 71, 28, }, { 209, 83, 4, 226, 111, 80, 68, 49, 206, 233, 13, 218, 244, 167, 225, 173, }, { 120, 173, 55, 88, 83, 42, 193, 218, 122, 177, 36, 145, 73, 228, 223, 112, }, { 194, 143, 16, 14, 127, 131, 211, 196, 190, 34, 52, 238, 86, 217, 2, 241, }, { 187, 222, 124, 207, 15, 255, 176, 74, 45, 22, 155, 98, 190, 96, 238, 166, }, { 109, 60, 58, 100, 137, 206, 28, 20, 57, 226, 161, 235, 171, 151, 150, 254, }, { 225, 126, 204, 173, 240, 43, 81, 42, 149, 163, 164, 239, 177, 207, 248, 242, }, { 31, 70, 38, 143, 71, 189, 3, 131, 22, 56, 130, 168, 34, 100, 116, 59, }, { 130, 227, 114, 91, 104, 39, 94, 224, 219, 123, 107, 162, 27, 248, 159, 37, }, { 186, 34, 39, 86, 44, 169, 18, 30, 196, 147, 16, 127, 31, 61, 221, 129, }, { 140, 66, 246, 201, 121, 229, 77, 62, 172, 65, 5, 4, 26, 88, 110, 12, }, { 207, 233, 121, 244, 11, 187, 229, 230, 49, 84, 4, 111, 119, 158, 166, 177, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 254, 56, 234, 34, 183, 150, 82, 169, 131, 155, 38, 71, 147, 171, 140, 201, }, { 66, 87, 212, 164, 81, 8, 10, 140, 116, 144, 138, 118, 204, 155, 251, 154, }, { 214, 226, 70, 171, 134, 49, 172, 94, 20, 244, 58, 137, 21, 247, 120, 88, }, }, { { 165, 157, 133, 70, 138, 14, 97, 196, 66, 231, 180, 202, 192, 61, 244, 232, }, { 45, 48, 124, 177, 178, 150, 171, 134, 18, 63, 188, 16, 37, 230, 30, 241, }, { 50, 179, 41, 241, 230, 177, 83, 97, 202, 248, 160, 208, 90, 196, 150, 55, }, { 143, 194, 105, 85, 240, 130, 242, 125, 57, 182, 231, 255, 17, 58, 232, 47, }, { 14, 222, 227, 135, 83, 52, 112, 126, 210, 220, 29, 74, 43, 1, 4, 108, }, { 48, 27, 73, 7, 251, 122, 67, 115, 161, 145, 37, 9, 213, 69, 215, 35, }, { 56, 254, 10, 89, 143, 208, 3, 59, 206, 246, 116, 235, 172, 4, 16, 115, }, { 192, 108, 231, 28, 106, 43, 207, 15, 193, 1, 148, 36, 210, 215, 218, 140, }, { 84, 190, 27, 38, 244, 219, 229, 177, 246, 162, 166, 106, 97, 14, 56, 77, }, { 230, 69, 136, 126, 94, 88, 60, 218, 3, 229, 95, 130, 167, 80, 131, 51, }, { 158, 159, 223, 146, 247, 145, 122, 228, 51, 173, 230, 117, 69, 25, 100, 133, }, { 57, 170, 58, 34, 96, 84, 11, 50, 26, 35, 215, 102, 10, 165, 209, 121, }, { 85, 234, 43, 93, 27, 95, 237, 184, 34, 119, 5, 231, 199, 175, 249, 71, }, { 126, 225, 247, 53, 142, 87, 118, 8, 141, 243, 245, 95, 176, 9, 36, 138, }, { 82, 133, 187, 255, 211, 69, 213, 135, 75, 25, 234, 194, 51, 78, 251, 113, }, { 145, 21, 12, 110, 75, 33, 2, 147, 53, 164, 88, 178, 200, 185, 161, 227, }, { 100, 165, 82, 33, 15, 161, 166, 194, 87, 51, 131, 99, 180, 75, 239, 110, }, { 3, 252, 80, 141, 242, 79, 24, 27, 191, 188, 38, 84, 41, 32, 128, 30, }, { 87, 66, 75, 171, 6, 148, 253, 170, 73, 30, 128, 62, 72, 46, 184, 83, }, { 90, 96, 248, 161, 167, 239, 149, 207, 36, 126, 187, 32, 74, 15, 60, 33, }, { 28, 127, 5, 205, 166, 104, 224, 252, 103, 123, 58, 148, 86, 2, 8, 216, }, { 96, 54, 146, 14, 53, 244, 134, 230, 129, 225, 74, 18, 105, 138, 109, 70, }, { 7, 111, 144, 162, 200, 26, 56, 63, 105, 110, 239, 37, 244, 225, 2, 54, }, { 24, 236, 197, 226, 156, 61, 192, 216, 177, 169, 243, 229, 139, 195, 138, 240, }, { 33, 70, 255, 192, 252, 105, 203, 234, 171, 138, 36, 131, 129, 102, 91, 137, }, { 114, 151, 116, 68, 192, 168, 22, 100, 52, 70, 109, 204, 20, 137, 97, 242, }, { 168, 191, 54, 76, 43, 117, 9, 161, 47, 135, 143, 212, 194, 28, 112, 154, }, { 209, 49, 81, 219, 109, 56, 71, 150, 203, 26, 149, 174, 134, 244, 86, 38, }, { 41, 163, 188, 158, 136, 195, 139, 162, 196, 237, 117, 97, 248, 39, 156, 217, }, { 198, 87, 71, 197, 77, 181, 255, 57, 124, 186, 216, 140, 128, 151, 25, 176, }, { 164, 201, 181, 61, 101, 138, 105, 205, 150, 50, 23, 71, 102, 156, 53, 226, }, { 63, 145, 154, 251, 71, 202, 59, 4, 167, 152, 155, 206, 88, 229, 18, 69, }, { 224, 126, 40, 167, 121, 198, 12, 236, 190, 94, 19, 42, 245, 16, 64, 15, }, { 39, 125, 95, 25, 219, 247, 251, 220, 22, 49, 104, 43, 211, 38, 152, 181, }, { 141, 106, 9, 163, 237, 73, 226, 111, 82, 223, 98, 38, 158, 187, 169, 59, }, { 12, 118, 131, 113, 78, 255, 96, 108, 185, 181, 152, 147, 164, 128, 69, 120, }, { 130, 224, 218, 95, 81, 249, 154, 24, 84, 214, 220, 225, 19, 27, 108, 93, }, { 234, 51, 11, 15, 16, 167, 92, 182, 186, 80, 199, 17, 3, 208, 198, 75, }, { 174, 132, 150, 149, 12, 235, 57, 151, 146, 60, 195, 124, 144, 92, 179, 166, }, { 180, 192, 51, 129, 141, 29, 233, 93, 72, 252, 181, 64, 148, 30, 120, 66, }, { 154, 12, 31, 189, 205, 196, 90, 192, 229, 127, 47, 4, 152, 216, 230, 173, }, { 99, 202, 194, 131, 199, 187, 158, 253, 62, 93, 108, 70, 64, 170, 237, 88, }, { 73, 149, 46, 144, 189, 55, 13, 68, 69, 12, 63, 115, 145, 173, 241, 159, }, { 229, 185, 216, 243, 172, 23, 36, 193, 188, 89, 121, 214, 142, 112, 3, 45, }, { 66, 140, 61, 67, 59, 210, 85, 23, 149, 215, 72, 197, 193, 204, 182, 209, }, { 228, 237, 232, 136, 67, 147, 44, 200, 104, 140, 218, 91, 40, 209, 194, 39, }, { 21, 206, 118, 232, 61, 70, 168, 189, 220, 201, 200, 251, 137, 226, 14, 130, }, { 183, 60, 99, 12, 127, 82, 241, 70, 247, 64, 147, 20, 189, 62, 248, 92, }, { 200, 137, 164, 66, 30, 129, 143, 71, 174, 102, 197, 198, 171, 150, 29, 220, }, { 6, 59, 160, 217, 39, 158, 48, 54, 189, 187, 76, 168, 82, 64, 195, 60, }, { 112, 63, 20, 178, 221, 99, 6, 118, 95, 47, 232, 21, 155, 8, 32, 230, }, { 157, 99, 143, 31, 5, 222, 98, 255, 140, 17, 192, 33, 108, 57, 228, 155, }, { 65, 112, 109, 206, 201, 157, 77, 12, 42, 107, 110, 145, 232, 236, 54, 207, }, { 117, 248, 228, 230, 8, 178, 46, 91, 93, 40, 130, 233, 224, 104, 99, 196, }, { 25, 184, 245, 153, 115, 185, 200, 209, 101, 124, 80, 104, 45, 98, 75, 250, }, { 201, 221, 148, 57, 241, 5, 135, 78, 122, 179, 102, 75, 13, 55, 220, 214, }, { 170, 23, 86, 186, 54, 190, 25, 179, 68, 238, 10, 13, 77, 157, 49, 142, }, { 252, 1, 45, 106, 223, 174, 236, 16, 217, 37, 41, 190, 163, 18, 72, 215, }, { 77, 6, 238, 191, 135, 98, 45, 96, 147, 222, 246, 2, 76, 108, 115, 183, }, { 191, 217, 32, 82, 11, 248, 177, 14, 152, 39, 194, 246, 196, 127, 63, 12, }, { 42, 95, 236, 19, 122, 140, 147, 185, 123, 81, 83, 53, 209, 7, 28, 199, }, { 115, 195, 68, 63, 47, 44, 30, 109, 224, 147, 206, 65, 178, 40, 160, 248, }, { 132, 219, 122, 134, 118, 103, 170, 46, 233, 109, 144, 73, 65, 91, 175, 97, }, { 213, 162, 145, 244, 87, 109, 103, 178, 29, 200, 92, 223, 91, 53, 212, 14, }, { 195, 144, 183, 145, 152, 100, 215, 20, 126, 189, 178, 112, 251, 247, 90, 146, }, { 175, 208, 166, 238, 227, 111, 49, 158, 70, 233, 96, 241, 54, 253, 114, 172, }, { 43, 11, 220, 104, 149, 8, 155, 176, 175, 132, 240, 184, 119, 166, 221, 205, }, { 134, 115, 26, 112, 107, 172, 186, 60, 130, 4, 21, 144, 206, 218, 238, 117, }, { 167, 53, 229, 176, 151, 197, 113, 214, 41, 142, 49, 19, 79, 188, 181, 252, }, { 177, 7, 195, 213, 88, 204, 193, 112, 74, 251, 223, 188, 239, 126, 59, 96, }, { 178, 251, 147, 88, 170, 131, 217, 107, 245, 71, 249, 232, 198, 94, 187, 126, }, { 91, 52, 200, 218, 72, 107, 157, 198, 240, 171, 24, 173, 236, 174, 253, 43, }, { 70, 31, 253, 108, 1, 135, 117, 51, 67, 5, 129, 180, 28, 13, 52, 249, }, { 211, 153, 49, 45, 112, 243, 87, 132, 160, 115, 16, 119, 9, 117, 23, 50, }, { 159, 203, 239, 233, 24, 21, 114, 237, 231, 120, 69, 248, 227, 184, 165, 143, }, { 253, 85, 29, 17, 48, 42, 228, 25, 13, 240, 138, 51, 5, 179, 137, 221, }, { 212, 246, 161, 143, 184, 233, 111, 187, 201, 29, 255, 82, 253, 148, 21, 4, }, { 15, 138, 211, 252, 188, 176, 120, 119, 6, 9, 190, 199, 141, 160, 197, 102, }, { 156, 55, 191, 100, 234, 90, 106, 246, 88, 196, 99, 172, 202, 152, 37, 145, }, { 47, 152, 28, 71, 175, 93, 187, 148, 121, 86, 57, 201, 170, 103, 95, 229, }, { 155, 88, 47, 198, 34, 64, 82, 201, 49, 170, 140, 137, 62, 121, 39, 167, }, { 67, 216, 13, 56, 212, 86, 93, 30, 65, 2, 235, 72, 103, 109, 119, 219, }, { 239, 244, 251, 91, 197, 118, 116, 155, 184, 87, 173, 237, 120, 176, 133, 105, }, { 217, 212, 18, 133, 25, 146, 7, 222, 164, 125, 196, 76, 255, 181, 145, 118, }, { 121, 142, 103, 151, 70, 77, 78, 55, 228, 157, 26, 122, 68, 232, 38, 188, }, { 182, 104, 83, 119, 144, 214, 249, 79, 35, 149, 48, 153, 27, 159, 57, 86, }, { 83, 209, 139, 132, 60, 193, 221, 142, 159, 204, 73, 79, 149, 239, 58, 123, }, { 127, 181, 199, 78, 97, 211, 126, 1, 89, 38, 86, 210, 22, 168, 229, 128, }, { 193, 56, 215, 103, 133, 175, 199, 6, 21, 212, 55, 169, 116, 118, 27, 134, }, { 240, 119, 174, 27, 145, 81, 140, 124, 96, 144, 177, 45, 7, 146, 13, 175, }, { 35, 238, 159, 54, 225, 162, 219, 248, 192, 227, 161, 90, 14, 231, 26, 157, }, { 231, 17, 184, 5, 177, 220, 52, 211, 215, 48, 252, 15, 1, 241, 66, 57, }, { 37, 213, 63, 239, 198, 60, 235, 206, 125, 88, 237, 242, 92, 167, 217, 161, }, { 94, 243, 56, 142, 157, 186, 181, 235, 242, 172, 114, 81, 151, 206, 190, 9, }, { 181, 148, 3, 250, 98, 153, 225, 84, 156, 41, 22, 205, 50, 191, 185, 72, }, { 30, 215, 101, 59, 187, 163, 240, 238, 12, 18, 191, 77, 217, 131, 73, 204, }, { 162, 242, 21, 228, 66, 20, 89, 251, 43, 137, 91, 239, 52, 220, 246, 222, }, { 223, 239, 178, 92, 62, 12, 55, 232, 25, 198, 136, 228, 173, 245, 82, 74, }, { 166, 97, 213, 203, 120, 65, 121, 223, 253, 91, 146, 158, 233, 29, 116, 246, }, { 254, 169, 77, 156, 194, 101, 252, 2, 178, 76, 172, 103, 44, 147, 9, 195, }, { 172, 44, 246, 99, 17, 32, 41, 133, 249, 85, 70, 165, 31, 221, 242, 178, }, { 34, 186, 175, 77, 14, 38, 211, 241, 20, 54, 2, 215, 168, 70, 219, 151, }, { 249, 198, 221, 62, 10, 127, 196, 61, 219, 34, 67, 66, 216, 114, 11, 245, }, { 226, 214, 72, 81, 100, 13, 28, 254, 213, 55, 150, 243, 122, 145, 1, 27, }, { 74, 105, 126, 29, 79, 120, 21, 95, 250, 176, 25, 39, 184, 141, 113, 129, }, { 188, 37, 112, 223, 249, 183, 169, 21, 39, 155, 228, 162, 237, 95, 191, 18, }, { 53, 220, 185, 83, 46, 171, 107, 94, 163, 150, 79, 245, 174, 37, 148, 1, }, { 202, 33, 196, 180, 3, 74, 159, 85, 197, 15, 64, 31, 36, 23, 92, 200, }, { 238, 160, 203, 32, 42, 242, 124, 146, 108, 130, 14, 96, 222, 17, 68, 99, }, { 120, 218, 87, 236, 169, 201, 70, 62, 48, 72, 185, 247, 226, 73, 231, 182, }, { 5, 199, 240, 84, 213, 209, 40, 45, 2, 7, 106, 252, 123, 96, 67, 34, }, { 107, 47, 129, 221, 179, 17, 222, 181, 81, 58, 61, 164, 57, 235, 42, 8, }, { 81, 121, 235, 114, 33, 10, 205, 156, 244, 165, 204, 150, 26, 110, 123, 111, }, { 225, 42, 24, 220, 150, 66, 4, 229, 106, 139, 176, 167, 83, 177, 129, 5, }, { 89, 156, 168, 44, 85, 160, 141, 212, 155, 194, 157, 116, 99, 47, 188, 63, }, { 163, 166, 37, 159, 173, 144, 81, 242, 255, 92, 248, 98, 146, 125, 55, 212, }, { 242, 223, 206, 237, 140, 154, 156, 110, 11, 249, 52, 244, 136, 19, 76, 187, }, { 113, 107, 36, 201, 50, 231, 14, 127, 139, 250, 75, 152, 61, 169, 225, 236, }, { 86, 22, 123, 208, 233, 16, 245, 163, 157, 203, 35, 179, 238, 143, 121, 89, }, { 17, 93, 182, 199, 7, 19, 136, 153, 10, 27, 1, 138, 84, 35, 140, 170, }, { 106, 123, 177, 166, 92, 149, 214, 188, 133, 239, 158, 41, 159, 74, 235, 2, }, { 137, 249, 201, 140, 215, 28, 194, 75, 132, 13, 171, 87, 67, 122, 43, 19, }, { 148, 210, 252, 58, 158, 240, 42, 190, 55, 163, 50, 78, 179, 217, 226, 193, }, { 101, 241, 98, 90, 224, 37, 174, 203, 131, 230, 32, 238, 18, 234, 46, 100, }, { 140, 62, 57, 216, 2, 205, 234, 102, 134, 10, 193, 171, 56, 26, 104, 49, }, { 187, 74, 224, 125, 49, 173, 145, 42, 78, 245, 11, 135, 25, 190, 189, 36, }, { 119, 80, 132, 16, 21, 121, 62, 73, 54, 65, 7, 48, 111, 233, 34, 208, }, { 60, 109, 202, 118, 181, 133, 35, 31, 24, 36, 189, 154, 113, 197, 146, 91, }, { 123, 38, 7, 97, 91, 134, 94, 37, 143, 244, 159, 163, 203, 105, 103, 168, }, { 40, 247, 140, 229, 103, 71, 131, 171, 16, 56, 214, 236, 94, 134, 93, 211, }, { 171, 67, 102, 193, 217, 58, 17, 186, 144, 59, 169, 128, 235, 60, 240, 132, }, { 210, 205, 1, 86, 159, 119, 95, 141, 116, 166, 179, 250, 175, 212, 214, 56, }, { 49, 79, 121, 124, 20, 254, 75, 122, 117, 68, 134, 132, 115, 228, 22, 41, }, { 222, 187, 130, 39, 209, 136, 63, 225, 205, 19, 43, 105, 11, 84, 147, 64, }, { 196, 255, 39, 51, 80, 126, 239, 43, 23, 211, 93, 85, 15, 22, 88, 164, }, { 95, 167, 8, 245, 114, 62, 189, 226, 38, 121, 209, 220, 49, 111, 127, 3, }, { 204, 26, 100, 109, 36, 212, 175, 99, 120, 180, 12, 183, 118, 87, 159, 244, }, { 207, 230, 52, 224, 214, 155, 183, 120, 199, 8, 42, 227, 95, 119, 31, 234, }, { 118, 4, 180, 107, 250, 253, 54, 64, 226, 148, 164, 189, 201, 72, 227, 218, }, { 44, 100, 76, 202, 93, 18, 163, 143, 198, 234, 31, 157, 131, 71, 223, 251, }, { 184, 182, 176, 240, 195, 226, 137, 49, 241, 73, 45, 211, 48, 158, 61, 58, }, { 216, 128, 34, 254, 246, 22, 15, 215, 112, 168, 103, 193, 89, 20, 80, 124, }, { 46, 204, 44, 60, 64, 217, 179, 157, 173, 131, 154, 68, 12, 198, 158, 239, }, { 54, 32, 233, 222, 220, 228, 115, 69, 28, 42, 105, 161, 135, 5, 20, 31, }, { 219, 124, 114, 115, 4, 89, 23, 204, 207, 20, 65, 149, 112, 52, 208, 98, }, { 105, 135, 225, 43, 174, 218, 206, 167, 58, 83, 184, 125, 182, 106, 107, 28, }, { 179, 175, 163, 35, 69, 7, 209, 98, 33, 146, 90, 101, 96, 255, 122, 116, }, { 20, 154, 70, 147, 210, 194, 160, 180, 8, 28, 107, 118, 47, 67, 207, 136, }, { 149, 134, 204, 65, 113, 116, 34, 183, 227, 118, 145, 195, 21, 120, 35, 203, }, { 190, 141, 16, 41, 228, 124, 185, 7, 76, 242, 97, 123, 98, 222, 254, 6, }, { 98, 158, 242, 248, 40, 63, 150, 244, 234, 136, 207, 203, 230, 11, 44, 82, }, { 161, 14, 69, 105, 176, 91, 65, 224, 148, 53, 125, 187, 29, 252, 118, 192, }, { 59, 2, 90, 212, 125, 159, 27, 32, 113, 74, 82, 191, 133, 36, 144, 109, }, { 22, 50, 38, 101, 207, 9, 176, 166, 99, 117, 238, 175, 160, 194, 142, 156, }, { 102, 13, 50, 215, 18, 106, 182, 208, 60, 90, 6, 186, 59, 202, 174, 122, }, { 233, 207, 91, 130, 226, 232, 68, 173, 5, 236, 225, 69, 42, 240, 70, 85, }, { 92, 91, 88, 120, 128, 113, 165, 249, 153, 197, 247, 136, 24, 79, 255, 29, }, { 108, 64, 17, 127, 123, 11, 230, 138, 56, 84, 210, 129, 205, 10, 40, 62, }, { 109, 20, 33, 4, 148, 143, 238, 131, 236, 129, 113, 12, 107, 171, 233, 52, }, { 173, 120, 198, 24, 254, 164, 33, 140, 45, 128, 229, 40, 185, 124, 51, 184, }, { 55, 116, 217, 165, 51, 96, 123, 76, 200, 255, 202, 44, 33, 164, 213, 21, }, { 97, 98, 162, 117, 218, 112, 142, 239, 85, 52, 233, 159, 207, 43, 172, 76, }, { 75, 61, 78, 102, 160, 252, 29, 86, 46, 101, 186, 170, 30, 44, 176, 139, }, { 185, 226, 128, 139, 44, 102, 129, 56, 37, 156, 142, 94, 150, 63, 252, 48, }, { 227, 130, 120, 42, 139, 137, 20, 247, 1, 226, 53, 126, 220, 48, 192, 17, }, { 186, 30, 208, 6, 222, 41, 153, 35, 154, 32, 168, 10, 191, 31, 124, 46, }, { 241, 35, 158, 96, 126, 213, 132, 117, 180, 69, 18, 160, 161, 51, 204, 165, }, { 160, 90, 117, 18, 95, 223, 73, 233, 64, 224, 222, 54, 187, 93, 183, 202, }, { 133, 143, 74, 253, 153, 227, 162, 39, 61, 184, 51, 196, 231, 250, 110, 107, }, { 131, 180, 234, 36, 190, 125, 146, 17, 128, 3, 127, 108, 181, 186, 173, 87, }, { 218, 40, 66, 8, 235, 221, 31, 197, 27, 193, 226, 24, 214, 149, 17, 104, }, { 71, 75, 205, 23, 238, 3, 125, 58, 151, 208, 34, 57, 186, 172, 245, 243, }, { 197, 171, 23, 72, 191, 250, 231, 34, 195, 6, 254, 216, 169, 183, 153, 174, }, { 176, 83, 243, 174, 183, 72, 201, 121, 158, 46, 124, 49, 73, 223, 250, 106, }, { 51, 231, 25, 138, 9, 53, 91, 104, 30, 45, 3, 93, 252, 101, 87, 61, }, { 250, 58, 141, 179, 248, 48, 220, 38, 100, 158, 101, 22, 241, 82, 139, 235, }, { 150, 122, 156, 204, 131, 59, 58, 172, 92, 202, 183, 151, 60, 88, 163, 213, }, { 111, 188, 65, 242, 137, 68, 254, 145, 135, 232, 244, 213, 228, 42, 168, 32, }, { 110, 232, 113, 137, 102, 192, 246, 152, 83, 61, 87, 88, 66, 139, 105, 42, }, { 194, 196, 135, 234, 119, 224, 223, 29, 170, 104, 17, 253, 93, 86, 155, 152, }, { 246, 76, 14, 194, 182, 207, 188, 74, 221, 43, 253, 133, 85, 210, 206, 147, }, { 80, 45, 219, 9, 206, 142, 197, 149, 32, 112, 111, 27, 188, 207, 186, 101, }, { 255, 253, 125, 231, 45, 225, 244, 11, 102, 153, 15, 234, 138, 50, 200, 201, }, { 93, 15, 104, 3, 111, 245, 173, 240, 77, 16, 84, 5, 190, 238, 62, 23, }, { 169, 235, 6, 55, 196, 241, 1, 168, 251, 82, 44, 89, 100, 189, 177, 144, }, { 142, 150, 89, 46, 31, 6, 250, 116, 237, 99, 68, 114, 183, 155, 41, 37, }, { 23, 102, 22, 30, 32, 141, 184, 175, 183, 160, 77, 34, 6, 99, 79, 150, }, { 27, 16, 149, 111, 110, 114, 216, 195, 14, 21, 213, 177, 162, 227, 10, 238, }, { 151, 46, 172, 183, 108, 191, 50, 165, 136, 31, 20, 26, 154, 249, 98, 223, }, { 125, 29, 167, 184, 124, 24, 110, 19, 50, 79, 211, 11, 153, 41, 164, 148, }, { 236, 8, 171, 214, 55, 57, 108, 128, 7, 235, 139, 185, 81, 144, 5, 119, }, { 88, 200, 152, 87, 186, 36, 133, 221, 79, 23, 62, 249, 197, 142, 125, 53, }, { 247, 24, 62, 185, 89, 75, 180, 67, 9, 254, 94, 8, 243, 115, 15, 153, }, { 31, 131, 85, 64, 84, 39, 248, 231, 216, 199, 28, 192, 127, 34, 136, 198, }, { 251, 110, 189, 200, 23, 180, 212, 47, 176, 75, 198, 155, 87, 243, 74, 225, }, { 124, 73, 151, 195, 147, 156, 102, 26, 230, 154, 112, 134, 63, 136, 101, 158, }, { 9, 177, 115, 37, 155, 46, 72, 65, 187, 178, 242, 111, 223, 224, 6, 90, }, { 13, 34, 179, 10, 161, 123, 104, 101, 109, 96, 59, 30, 2, 33, 132, 114, }, { 122, 114, 55, 26, 180, 2, 86, 44, 91, 33, 60, 46, 109, 200, 166, 162, }, { 103, 89, 2, 172, 253, 238, 190, 217, 232, 143, 165, 55, 157, 107, 111, 112, }, { 69, 227, 173, 225, 243, 200, 109, 40, 252, 185, 167, 224, 53, 45, 180, 231, }, { 135, 39, 42, 11, 132, 40, 178, 53, 86, 209, 182, 29, 104, 123, 47, 127, }, { 220, 19, 226, 209, 204, 67, 47, 243, 166, 122, 174, 176, 132, 213, 210, 84, }, { 232, 155, 107, 249, 13, 108, 76, 164, 209, 57, 66, 200, 140, 81, 135, 95, }, { 79, 174, 142, 73, 154, 169, 61, 114, 248, 183, 115, 219, 195, 237, 50, 163, }, { 29, 43, 53, 182, 73, 236, 232, 245, 179, 174, 153, 25, 240, 163, 201, 210, }, { 78, 250, 190, 50, 117, 45, 53, 123, 44, 98, 208, 86, 101, 76, 243, 169, }, { 4, 147, 192, 47, 58, 85, 32, 36, 214, 210, 201, 113, 221, 193, 130, 40, }, { 235, 103, 59, 116, 255, 35, 84, 191, 110, 133, 100, 156, 165, 113, 7, 65, }, { 248, 146, 237, 69, 229, 251, 204, 52, 15, 247, 224, 207, 126, 211, 202, 255, }, { 243, 139, 254, 150, 99, 30, 148, 103, 223, 44, 151, 121, 46, 178, 141, 177, }, { 62, 197, 170, 128, 168, 78, 51, 13, 115, 77, 56, 67, 254, 68, 211, 79, }, { 61, 57, 250, 13, 90, 1, 43, 22, 204, 241, 30, 23, 215, 100, 83, 81, }, { 189, 113, 64, 164, 22, 51, 161, 28, 243, 78, 71, 47, 75, 254, 126, 24, }, { 138, 5, 153, 1, 37, 83, 218, 80, 59, 177, 141, 3, 106, 90, 171, 13, }, { 136, 173, 249, 247, 56, 152, 202, 66, 80, 216, 8, 218, 229, 219, 234, 25, }, { 221, 71, 210, 170, 35, 199, 39, 250, 114, 175, 13, 61, 34, 116, 19, 94, }, { 205, 78, 84, 22, 203, 80, 167, 106, 172, 97, 175, 58, 208, 246, 94, 254, }, { 11, 25, 19, 211, 134, 229, 88, 83, 208, 219, 119, 182, 80, 97, 71, 78, }, { 19, 245, 214, 49, 26, 216, 152, 139, 97, 114, 132, 83, 219, 162, 205, 190, }, { 152, 164, 127, 75, 208, 15, 74, 210, 142, 22, 170, 221, 23, 89, 167, 185, }, { 2, 168, 96, 246, 29, 203, 16, 18, 107, 105, 133, 217, 143, 129, 65, 20, }, { 147, 189, 108, 152, 86, 234, 18, 129, 94, 205, 221, 107, 71, 56, 224, 247, }, { 128, 72, 186, 169, 76, 50, 138, 10, 63, 191, 89, 56, 156, 154, 45, 73, }, { 144, 65, 60, 21, 164, 165, 10, 154, 225, 113, 251, 63, 110, 24, 96, 233, }, { 208, 101, 97, 160, 130, 188, 79, 159, 31, 207, 54, 35, 32, 85, 151, 44, }, { 36, 129, 15, 148, 41, 184, 227, 199, 169, 141, 78, 127, 250, 6, 24, 171, }, { 52, 136, 137, 40, 193, 47, 99, 87, 119, 67, 236, 120, 8, 132, 85, 11, }, { 203, 117, 244, 207, 236, 206, 151, 92, 17, 218, 227, 146, 130, 182, 157, 194, }, { 237, 92, 155, 173, 216, 189, 100, 137, 211, 62, 40, 52, 247, 49, 196, 125, }, { 244, 228, 110, 52, 171, 4, 172, 88, 182, 66, 120, 92, 218, 83, 143, 135, }, { 206, 178, 4, 155, 57, 31, 191, 113, 19, 221, 137, 110, 249, 214, 222, 224, }, { 153, 240, 79, 48, 63, 139, 66, 219, 90, 195, 9, 80, 177, 248, 102, 179, }, { 16, 9, 134, 188, 232, 151, 128, 144, 222, 206, 162, 7, 242, 130, 77, 160, }, { 68, 183, 157, 154, 28, 76, 101, 33, 40, 108, 4, 109, 147, 140, 117, 237, }, { 64, 36, 93, 181, 38, 25, 69, 5, 254, 190, 205, 28, 78, 77, 247, 197, }, { 146, 233, 92, 227, 185, 110, 26, 136, 138, 24, 126, 230, 225, 153, 33, 253, }, { 58, 86, 106, 175, 146, 27, 19, 41, 165, 159, 241, 50, 35, 133, 81, 103, }, { 1, 84, 48, 123, 239, 132, 8, 9, 212, 213, 163, 141, 166, 161, 193, 10, }, { 38, 41, 111, 98, 52, 115, 243, 213, 194, 228, 203, 166, 117, 135, 89, 191, }, { 18, 161, 230, 74, 245, 92, 144, 130, 181, 167, 39, 222, 125, 3, 12, 180, }, { 26, 68, 165, 20, 129, 246, 208, 202, 218, 192, 118, 60, 4, 66, 203, 228, }, { 72, 193, 30, 235, 82, 179, 5, 77, 145, 217, 156, 254, 55, 12, 48, 149, }, { 104, 211, 209, 80, 65, 94, 198, 174, 238, 134, 27, 240, 16, 203, 170, 22, }, { 245, 176, 94, 79, 68, 128, 164, 81, 98, 151, 219, 209, 124, 242, 78, 141, }, { 129, 28, 138, 210, 163, 182, 130, 3, 235, 106, 250, 181, 58, 59, 236, 67, }, { 139, 81, 169, 122, 202, 215, 210, 89, 239, 100, 46, 142, 204, 251, 106, 7, }, { 199, 3, 119, 190, 162, 49, 247, 48, 168, 111, 123, 1, 38, 54, 216, 186, }, { 214, 94, 193, 121, 165, 34, 127, 169, 162, 116, 122, 139, 114, 21, 84, 16, }, { 32, 18, 207, 187, 19, 237, 195, 227, 127, 95, 135, 14, 39, 199, 154, 131, }, { 10, 77, 35, 168, 105, 97, 80, 90, 4, 14, 212, 59, 246, 192, 134, 68, }, { 8, 229, 67, 94, 116, 170, 64, 72, 111, 103, 81, 226, 121, 65, 199, 80, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 76, 82, 222, 196, 104, 230, 37, 105, 71, 11, 85, 143, 234, 205, 178, 189, }, { 215, 10, 241, 2, 74, 166, 119, 160, 118, 161, 217, 6, 212, 180, 149, 26, }, { 116, 172, 212, 157, 231, 54, 38, 82, 137, 253, 33, 100, 70, 201, 162, 206, }, }, { { 153, 170, 22, 4, 194, 149, 140, 74, 99, 235, 240, 73, 33, 10, 173, 248, }, { 147, 227, 218, 163, 149, 181, 161, 151, 27, 25, 189, 127, 9, 53, 168, 56, }, { 136, 253, 43, 59, 166, 197, 33, 188, 175, 181, 173, 62, 101, 138, 68, 219, }, { 174, 22, 41, 108, 39, 26, 170, 225, 196, 2, 132, 204, 253, 238, 87, 92, }, { 139, 190, 9, 85, 224, 116, 205, 120, 187, 35, 81, 55, 105, 97, 164, 251, }, { 189, 130, 40, 166, 134, 148, 14, 46, 16, 184, 113, 181, 177, 220, 191, 254, }, { 105, 189, 36, 151, 6, 19, 178, 35, 169, 140, 135, 220, 103, 71, 213, 106, }, { 177, 77, 160, 221, 93, 21, 56, 184, 64, 165, 7, 145, 129, 246, 185, 126, }, { 110, 187, 126, 208, 9, 221, 76, 149, 141, 17, 232, 201, 123, 11, 55, 139, }, { 56, 48, 149, 125, 120, 191, 252, 249, 227, 98, 254, 168, 224, 37, 28, 4, }, { 62, 182, 209, 161, 244, 30, 231, 178, 203, 141, 197, 186, 248, 48, 31, 68, }, { 146, 99, 196, 56, 22, 218, 68, 106, 23, 107, 233, 120, 13, 108, 73, 153, }, { 149, 101, 158, 127, 25, 20, 186, 220, 51, 246, 134, 109, 17, 32, 171, 120, }, { 89, 7, 65, 184, 236, 82, 106, 62, 42, 248, 156, 76, 167, 239, 205, 47, }, { 49, 58, 123, 180, 105, 46, 61, 224, 143, 6, 79, 151, 196, 241, 249, 228, }, { 78, 214, 56, 91, 4, 163, 220, 131, 206, 73, 250, 41, 251, 122, 39, 76, }, { 211, 57, 86, 118, 143, 73, 66, 187, 157, 169, 153, 124, 202, 215, 136, 117, }, { 206, 161, 227, 50, 48, 152, 217, 219, 1, 234, 178, 47, 190, 125, 103, 214, }, { 160, 26, 157, 226, 57, 69, 149, 78, 140, 251, 90, 230, 197, 118, 80, 93, }, { 229, 5, 119, 133, 233, 169, 129, 237, 54, 50, 185, 254, 18, 106, 147, 112, }, { 213, 191, 18, 170, 3, 232, 89, 240, 181, 70, 162, 110, 210, 194, 139, 53, }, { 185, 199, 80, 143, 207, 235, 28, 92, 32, 179, 226, 169, 161, 123, 189, 63, }, { 164, 95, 229, 203, 112, 58, 135, 60, 188, 240, 201, 250, 213, 209, 82, 156, }, { 191, 65, 20, 83, 67, 74, 7, 23, 8, 92, 217, 187, 185, 110, 190, 127, }, { 45, 34, 208, 107, 85, 144, 67, 125, 31, 55, 48, 195, 180, 2, 247, 230, }, { 231, 198, 75, 112, 44, 119, 136, 212, 46, 214, 17, 240, 26, 216, 146, 241, }, { 220, 181, 252, 99, 18, 121, 152, 233, 217, 34, 19, 81, 246, 22, 110, 213, }, { 33, 237, 88, 16, 142, 17, 117, 235, 79, 42, 70, 231, 132, 40, 241, 102, }, { 249, 29, 220, 90, 213, 23, 255, 112, 166, 3, 198, 170, 98, 153, 157, 114, }, { 238, 204, 165, 185, 61, 230, 73, 205, 66, 178, 160, 207, 62, 12, 119, 17, }, { 98, 116, 246, 171, 210, 92, 122, 3, 221, 12, 158, 237, 75, 33, 49, 11, }, { 205, 226, 193, 92, 118, 41, 53, 31, 21, 124, 78, 38, 178, 150, 135, 246, }, { 103, 177, 144, 25, 24, 76, 141, 140, 225, 117, 89, 246, 95, 223, 210, 107, }, { 114, 163, 213, 15, 53, 99, 50, 8, 29, 32, 151, 157, 11, 248, 57, 137, }, { 155, 105, 42, 241, 7, 75, 133, 115, 123, 15, 88, 71, 41, 184, 172, 121, }, { 190, 193, 10, 200, 192, 37, 226, 234, 4, 46, 141, 188, 189, 55, 95, 222, }, { 235, 9, 195, 11, 247, 246, 190, 66, 126, 203, 103, 212, 42, 242, 148, 113, }, { 134, 241, 159, 181, 184, 154, 30, 19, 231, 76, 115, 20, 93, 18, 67, 218, }, { 131, 52, 249, 7, 114, 138, 233, 156, 219, 53, 180, 15, 73, 236, 160, 186, }, { 9, 10, 238, 201, 17, 145, 193, 25, 108, 100, 177, 63, 36, 212, 229, 224, }, { 84, 72, 215, 88, 180, 188, 185, 85, 118, 151, 190, 111, 147, 156, 42, 14, }, { 119, 102, 179, 189, 255, 115, 197, 135, 33, 89, 80, 134, 31, 6, 218, 233, }, { 64, 218, 140, 213, 26, 252, 227, 44, 134, 176, 36, 3, 195, 226, 32, 77, }, { 246, 145, 118, 79, 72, 39, 37, 34, 226, 136, 76, 135, 94, 88, 123, 210, }, { 90, 68, 99, 214, 170, 227, 134, 250, 62, 110, 96, 69, 171, 4, 45, 15, }, { 13, 79, 150, 224, 88, 238, 211, 107, 92, 111, 34, 35, 52, 115, 231, 33, }, { 250, 94, 254, 52, 147, 166, 19, 180, 178, 149, 58, 163, 110, 114, 125, 82, }, { 199, 171, 13, 251, 33, 9, 24, 194, 109, 142, 3, 16, 154, 169, 130, 54, }, { 101, 114, 172, 236, 221, 146, 132, 181, 249, 145, 241, 248, 87, 109, 211, 234, }, { 95, 129, 5, 100, 96, 243, 113, 117, 2, 23, 167, 94, 191, 250, 206, 111, }, { 210, 185, 72, 237, 12, 38, 167, 70, 145, 219, 205, 123, 206, 142, 105, 212, }, { 240, 23, 50, 147, 196, 134, 62, 105, 202, 103, 119, 149, 70, 77, 120, 146, }, { 148, 229, 128, 228, 154, 123, 95, 33, 63, 132, 210, 106, 21, 121, 74, 217, }, { 67, 153, 174, 187, 92, 77, 15, 232, 146, 38, 216, 10, 207, 9, 192, 109, }, { 68, 159, 244, 252, 83, 131, 241, 94, 182, 187, 183, 31, 211, 69, 34, 140, }, { 158, 172, 76, 67, 205, 91, 114, 252, 71, 118, 159, 92, 61, 70, 79, 25, }, { 233, 202, 255, 254, 50, 40, 183, 123, 102, 47, 207, 218, 34, 64, 149, 240, }, { 178, 14, 130, 179, 27, 164, 212, 124, 84, 51, 251, 152, 141, 29, 89, 94, }, { 42, 36, 138, 44, 90, 94, 189, 203, 59, 170, 95, 214, 168, 78, 21, 7, }, { 19, 148, 1, 202, 161, 142, 164, 207, 212, 186, 245, 121, 76, 50, 232, 162, }, { 55, 188, 63, 104, 229, 143, 38, 171, 167, 233, 116, 133, 220, 228, 250, 164, }, { 28, 24, 171, 223, 60, 190, 126, 157, 144, 49, 127, 84, 112, 243, 14, 2, }, { 180, 136, 198, 111, 151, 5, 207, 55, 124, 220, 192, 138, 149, 8, 90, 30, }, { 75, 19, 94, 233, 206, 179, 43, 12, 242, 48, 61, 50, 239, 132, 196, 44, }, { 127, 236, 67, 239, 109, 141, 225, 99, 65, 79, 181, 190, 63, 139, 222, 168, }, { 120, 234, 25, 168, 98, 67, 31, 213, 101, 210, 218, 171, 35, 199, 60, 73, }, { 204, 98, 223, 199, 245, 70, 208, 226, 25, 14, 26, 33, 182, 207, 102, 87, }, { 129, 247, 197, 242, 183, 84, 224, 165, 195, 209, 28, 1, 65, 94, 161, 59, }, { 172, 213, 21, 153, 226, 196, 163, 216, 220, 230, 44, 194, 245, 92, 86, 221, }, { 152, 42, 8, 159, 65, 250, 105, 183, 111, 153, 164, 78, 37, 83, 76, 89, }, { 86, 139, 235, 173, 113, 98, 176, 108, 110, 115, 22, 97, 155, 46, 43, 143, }, { 30, 219, 151, 42, 249, 96, 119, 164, 136, 213, 215, 90, 120, 65, 15, 131, }, { 48, 186, 101, 47, 234, 65, 216, 29, 131, 116, 27, 144, 192, 168, 24, 69, }, { 20, 146, 91, 141, 174, 64, 90, 121, 240, 39, 154, 108, 80, 126, 10, 67, }, { 197, 104, 49, 14, 228, 215, 17, 251, 117, 106, 171, 30, 146, 27, 131, 183, }, { 73, 208, 98, 28, 11, 109, 34, 53, 234, 212, 149, 60, 231, 54, 197, 173, }, { 176, 205, 190, 70, 222, 122, 221, 69, 76, 215, 83, 150, 133, 175, 88, 223, }, { 112, 96, 233, 250, 240, 189, 59, 49, 5, 196, 63, 147, 3, 74, 56, 8, }, { 11, 201, 210, 60, 212, 79, 200, 32, 116, 128, 25, 49, 44, 102, 228, 97, }, { 166, 156, 217, 62, 181, 228, 142, 5, 164, 20, 97, 244, 221, 99, 83, 29, }, { 175, 150, 55, 247, 164, 117, 79, 28, 200, 112, 208, 203, 249, 183, 182, 253, }, { 161, 154, 131, 121, 186, 42, 112, 179, 128, 137, 14, 225, 193, 47, 177, 252, }, { 23, 209, 121, 227, 232, 241, 182, 189, 228, 177, 102, 101, 92, 149, 234, 99, }, { 245, 210, 84, 33, 14, 150, 201, 230, 246, 30, 176, 142, 82, 179, 155, 242, }, { 253, 88, 164, 115, 156, 104, 237, 2, 150, 8, 85, 182, 114, 62, 159, 179, }, { 60, 117, 237, 84, 49, 192, 238, 139, 211, 105, 109, 180, 240, 130, 30, 197, }, { 202, 228, 155, 27, 121, 231, 203, 169, 49, 225, 33, 51, 174, 218, 101, 23, }, { 162, 217, 161, 23, 252, 155, 156, 119, 148, 31, 242, 232, 205, 196, 81, 220, }, { 74, 147, 64, 114, 77, 220, 206, 241, 254, 66, 105, 53, 235, 221, 37, 141, }, { 12, 207, 136, 123, 219, 129, 54, 150, 80, 29, 118, 36, 48, 42, 6, 128, }, { 24, 93, 211, 246, 117, 193, 108, 239, 160, 58, 236, 72, 96, 84, 12, 195, }, { 195, 238, 117, 210, 104, 118, 10, 176, 93, 133, 144, 12, 138, 14, 128, 247, }, { 71, 220, 214, 146, 21, 50, 29, 154, 162, 45, 75, 22, 223, 174, 194, 172, }, { 143, 251, 113, 124, 169, 11, 223, 10, 139, 40, 194, 43, 121, 198, 166, 58, }, { 242, 212, 14, 102, 1, 88, 55, 80, 210, 131, 223, 155, 78, 255, 121, 19, }, { 224, 192, 17, 55, 35, 185, 118, 98, 10, 75, 126, 229, 6, 148, 112, 16, }, { 61, 245, 243, 207, 178, 175, 11, 118, 223, 27, 57, 179, 244, 219, 255, 100, }, { 170, 83, 81, 69, 110, 101, 184, 147, 244, 9, 23, 208, 237, 73, 85, 157, }, { 87, 11, 245, 54, 242, 13, 85, 145, 98, 1, 66, 102, 159, 119, 202, 46, }, { 135, 113, 129, 46, 59, 245, 251, 238, 235, 62, 39, 19, 89, 75, 162, 123, }, { 182, 75, 250, 154, 82, 219, 198, 14, 100, 56, 104, 132, 157, 186, 91, 159, }, { 227, 131, 51, 89, 101, 8, 154, 166, 30, 221, 130, 236, 10, 127, 144, 48, }, { 35, 46, 100, 229, 75, 207, 124, 210, 87, 206, 238, 233, 140, 154, 240, 231, }, { 82, 206, 147, 132, 56, 29, 162, 30, 94, 120, 133, 125, 139, 137, 41, 78, }, { 142, 123, 111, 231, 42, 100, 58, 247, 135, 90, 150, 44, 125, 159, 71, 155, }, { 221, 53, 226, 248, 145, 22, 125, 20, 213, 80, 71, 86, 242, 79, 143, 116, }, { 44, 162, 206, 240, 214, 255, 166, 128, 19, 69, 100, 196, 176, 91, 22, 71, }, { 80, 13, 175, 113, 253, 195, 171, 39, 70, 156, 45, 115, 131, 59, 40, 207, }, { 236, 15, 153, 76, 248, 56, 64, 244, 90, 86, 8, 193, 54, 190, 118, 144, }, { 6, 134, 68, 220, 140, 161, 27, 75, 40, 239, 59, 18, 24, 21, 3, 64, }, { 145, 32, 230, 86, 80, 107, 168, 174, 3, 253, 21, 113, 1, 135, 169, 185, }, { 163, 89, 191, 140, 127, 244, 121, 138, 152, 109, 166, 239, 201, 157, 176, 125, }, { 255, 155, 152, 134, 89, 182, 228, 59, 142, 236, 253, 184, 122, 140, 158, 50, }, { 156, 111, 112, 182, 8, 133, 123, 197, 95, 146, 55, 82, 53, 244, 78, 152, }, { 43, 164, 148, 183, 217, 49, 88, 54, 55, 216, 11, 209, 172, 23, 244, 166, }, { 198, 43, 19, 96, 162, 102, 253, 63, 97, 252, 87, 23, 158, 240, 99, 151, }, { 57, 176, 139, 230, 251, 208, 25, 4, 239, 16, 170, 175, 228, 124, 253, 165, }, { 41, 103, 168, 66, 28, 239, 81, 15, 47, 60, 163, 223, 164, 165, 245, 39, }, { 91, 196, 125, 77, 41, 140, 99, 7, 50, 28, 52, 66, 175, 93, 204, 174, }, { 144, 160, 248, 205, 211, 4, 77, 83, 15, 143, 65, 118, 5, 222, 72, 24, }, { 88, 135, 95, 35, 111, 61, 143, 195, 38, 138, 200, 75, 163, 182, 44, 142, }, { 241, 151, 44, 8, 71, 233, 219, 148, 198, 21, 35, 146, 66, 20, 153, 51, }, { 223, 246, 222, 13, 84, 200, 116, 45, 205, 180, 239, 88, 250, 253, 142, 245, }, { 40, 231, 182, 217, 159, 128, 180, 242, 35, 78, 247, 216, 160, 252, 20, 134, }, { 96, 183, 202, 94, 23, 130, 115, 58, 197, 232, 54, 227, 67, 147, 48, 138, }, { 121, 106, 7, 51, 225, 44, 250, 40, 105, 160, 142, 172, 39, 158, 221, 232, }, { 118, 230, 173, 38, 124, 28, 32, 122, 45, 43, 4, 129, 27, 95, 59, 72, }, { 3, 67, 34, 110, 70, 177, 236, 196, 20, 150, 252, 9, 12, 235, 224, 32, }, { 200, 39, 167, 238, 188, 57, 194, 144, 41, 5, 137, 61, 166, 104, 100, 150, }, { 2, 195, 60, 245, 197, 222, 9, 57, 24, 228, 168, 14, 8, 178, 1, 129, }, { 18, 20, 31, 81, 34, 225, 65, 50, 216, 200, 161, 126, 72, 107, 9, 3, }, { 239, 76, 187, 34, 190, 137, 172, 48, 78, 192, 244, 200, 58, 85, 150, 176, }, { 70, 92, 200, 9, 150, 93, 248, 103, 174, 95, 31, 17, 219, 247, 35, 13, }, { 81, 141, 177, 234, 126, 172, 78, 218, 74, 238, 121, 116, 135, 98, 201, 110, }, { 219, 179, 166, 36, 29, 183, 102, 95, 253, 191, 124, 68, 234, 90, 140, 52, }, { 116, 37, 145, 211, 185, 194, 41, 67, 53, 207, 172, 143, 19, 237, 58, 201, }, { 15, 140, 170, 21, 157, 48, 218, 82, 68, 139, 138, 45, 60, 193, 230, 160, }, { 193, 45, 73, 39, 173, 168, 3, 137, 69, 97, 56, 2, 130, 188, 129, 118, }, { 141, 56, 77, 137, 108, 213, 214, 51, 147, 204, 106, 37, 113, 116, 167, 187, }, { 104, 61, 58, 12, 133, 124, 87, 222, 165, 254, 211, 219, 99, 30, 52, 203, }, { 183, 203, 228, 1, 209, 180, 35, 243, 104, 74, 60, 131, 153, 227, 186, 62, }, { 14, 12, 180, 142, 30, 95, 63, 175, 72, 249, 222, 42, 56, 152, 7, 1, }, { 93, 66, 57, 145, 165, 45, 120, 76, 26, 243, 15, 80, 183, 72, 207, 238, }, { 226, 3, 45, 194, 230, 103, 127, 91, 18, 175, 214, 235, 14, 38, 113, 145, }, { 192, 173, 87, 188, 46, 199, 230, 116, 73, 19, 108, 5, 134, 229, 96, 215, }, { 150, 38, 188, 17, 95, 165, 86, 24, 39, 96, 122, 100, 29, 203, 75, 88, }, { 173, 85, 11, 2, 97, 171, 70, 37, 208, 148, 120, 197, 241, 5, 183, 124, }, { 1, 128, 30, 155, 131, 111, 229, 253, 12, 114, 84, 7, 4, 89, 225, 161, }, { 36, 40, 62, 162, 68, 1, 130, 100, 115, 83, 129, 252, 144, 214, 18, 6, }, { 232, 74, 225, 101, 177, 71, 82, 134, 106, 93, 155, 221, 38, 25, 116, 81, }, { 140, 184, 83, 18, 239, 186, 51, 206, 159, 190, 62, 34, 117, 45, 70, 26, }, { 243, 84, 16, 253, 130, 55, 210, 173, 222, 241, 139, 156, 74, 166, 152, 178, }, { 167, 28, 199, 165, 54, 139, 107, 248, 168, 102, 53, 243, 217, 58, 178, 188, }, { 52, 255, 29, 6, 163, 62, 202, 111, 179, 127, 136, 140, 208, 15, 26, 132, }, { 230, 70, 85, 235, 175, 24, 109, 41, 34, 164, 69, 247, 30, 129, 115, 80, }, { 72, 80, 124, 135, 136, 2, 199, 200, 230, 166, 193, 59, 227, 111, 36, 12, }, { 186, 132, 114, 225, 137, 90, 240, 152, 52, 37, 30, 160, 173, 144, 93, 31, }, { 7, 6, 90, 71, 15, 206, 254, 182, 36, 157, 111, 21, 28, 76, 226, 225, }, { 252, 216, 186, 232, 31, 7, 8, 255, 154, 122, 1, 177, 118, 103, 126, 18, }, { 77, 149, 26, 53, 66, 18, 48, 71, 218, 223, 6, 32, 247, 145, 199, 108, }, { 25, 221, 205, 109, 246, 174, 137, 18, 172, 72, 184, 79, 100, 13, 237, 98, }, { 66, 25, 176, 32, 223, 34, 234, 21, 158, 84, 140, 13, 203, 80, 33, 204, }, { 117, 165, 143, 72, 58, 173, 204, 190, 57, 189, 248, 136, 23, 180, 219, 104, }, { 76, 21, 4, 174, 193, 125, 213, 186, 214, 173, 82, 39, 243, 200, 38, 205, }, { 169, 16, 115, 43, 40, 212, 84, 87, 224, 159, 235, 217, 225, 162, 181, 189, }, { 130, 180, 231, 156, 241, 229, 12, 97, 215, 71, 224, 8, 77, 181, 65, 27, }, { 247, 17, 104, 212, 203, 72, 192, 223, 238, 250, 24, 128, 90, 1, 154, 115, }, { 8, 138, 240, 82, 146, 254, 36, 228, 96, 22, 229, 56, 32, 141, 4, 65, }, { 79, 86, 38, 192, 135, 204, 57, 126, 194, 59, 174, 46, 255, 35, 198, 237, }, { 16, 215, 35, 164, 231, 63, 72, 11, 192, 44, 9, 112, 64, 217, 8, 130, }, { 59, 115, 183, 19, 62, 14, 16, 61, 247, 244, 2, 161, 236, 206, 252, 36, }, { 203, 100, 133, 128, 250, 136, 46, 84, 61, 147, 117, 52, 170, 131, 132, 182, }, { 32, 109, 70, 139, 13, 126, 144, 22, 67, 88, 18, 224, 128, 113, 16, 199, }, { 99, 244, 232, 48, 81, 51, 159, 254, 209, 126, 202, 234, 79, 120, 208, 170, }, { 115, 35, 203, 148, 182, 12, 215, 245, 17, 82, 195, 154, 15, 161, 216, 40, }, { 237, 143, 135, 215, 123, 87, 165, 9, 86, 36, 92, 198, 50, 231, 151, 49, }, { 234, 137, 221, 144, 116, 153, 91, 191, 114, 185, 51, 211, 46, 171, 117, 208, }, { 201, 167, 185, 117, 63, 86, 39, 109, 37, 119, 221, 58, 162, 49, 133, 55, }, { 50, 121, 89, 218, 47, 159, 209, 36, 155, 144, 179, 158, 200, 26, 25, 196, }, { 132, 50, 163, 64, 125, 68, 23, 42, 255, 168, 219, 26, 85, 160, 66, 91, }, { 83, 78, 141, 31, 187, 114, 71, 227, 82, 10, 209, 122, 143, 208, 200, 239, }, { 4, 69, 120, 41, 73, 127, 18, 114, 48, 11, 147, 28, 16, 167, 2, 193, }, { 124, 175, 97, 129, 43, 60, 13, 167, 85, 217, 73, 183, 51, 96, 62, 136, }, { 65, 90, 146, 78, 153, 147, 6, 209, 138, 194, 112, 4, 199, 187, 193, 236, }, { 39, 107, 28, 204, 2, 176, 110, 160, 103, 197, 125, 245, 156, 61, 242, 38, }, { 85, 200, 201, 195, 55, 211, 92, 168, 122, 229, 234, 104, 151, 197, 203, 175, }, { 207, 33, 253, 169, 179, 247, 60, 38, 13, 152, 230, 40, 186, 36, 134, 119, }, { 113, 224, 247, 97, 115, 210, 222, 204, 9, 182, 107, 148, 7, 19, 217, 169, }, { 17, 87, 61, 63, 100, 80, 173, 246, 204, 94, 93, 119, 68, 128, 233, 35, }, { 151, 166, 162, 138, 220, 202, 179, 229, 43, 18, 46, 99, 25, 146, 170, 249, }, { 217, 112, 154, 209, 216, 105, 111, 102, 229, 91, 212, 74, 226, 232, 141, 181, }, { 208, 122, 116, 24, 201, 248, 174, 127, 137, 63, 101, 117, 198, 60, 104, 85, }, { 168, 144, 109, 176, 171, 187, 177, 170, 236, 237, 191, 222, 229, 251, 84, 28, }, { 27, 30, 241, 152, 51, 112, 128, 43, 180, 172, 16, 65, 108, 191, 236, 227, }, { 22, 81, 103, 120, 107, 158, 83, 64, 232, 195, 50, 98, 88, 204, 11, 194, }, { 108, 120, 66, 37, 204, 3, 69, 172, 149, 245, 64, 199, 115, 185, 54, 10, }, { 47, 225, 236, 158, 144, 78, 74, 68, 7, 211, 152, 205, 188, 176, 246, 103, }, { 69, 31, 234, 103, 208, 236, 20, 163, 186, 201, 227, 24, 215, 28, 195, 45, }, { 51, 249, 71, 65, 172, 240, 52, 217, 151, 226, 231, 153, 204, 67, 248, 101, }, { 29, 152, 181, 68, 191, 209, 155, 96, 156, 67, 43, 83, 116, 170, 239, 163, }, { 254, 27, 134, 29, 218, 217, 1, 198, 130, 158, 169, 191, 126, 213, 127, 147, }, { 122, 41, 37, 93, 167, 157, 22, 236, 125, 54, 114, 165, 43, 117, 61, 200, }, { 100, 242, 178, 119, 94, 253, 97, 72, 245, 227, 165, 255, 83, 52, 50, 75, }, { 179, 142, 156, 40, 152, 203, 49, 129, 88, 65, 175, 159, 137, 68, 184, 255, }, { 31, 91, 137, 177, 122, 15, 146, 89, 132, 167, 131, 93, 124, 24, 238, 34, }, { 46, 97, 242, 5, 19, 33, 175, 185, 11, 161, 204, 202, 184, 233, 23, 198, }, { 228, 133, 105, 30, 106, 198, 100, 16, 58, 64, 237, 249, 22, 51, 114, 209, }, { 106, 254, 6, 249, 64, 162, 94, 231, 189, 26, 123, 213, 107, 172, 53, 74, }, { 125, 47, 127, 26, 168, 83, 232, 90, 89, 171, 29, 176, 55, 57, 223, 41, }, { 216, 240, 132, 74, 91, 6, 138, 155, 233, 41, 128, 77, 230, 177, 108, 20, }, { 194, 110, 107, 73, 235, 25, 239, 77, 81, 247, 196, 11, 142, 87, 97, 86, }, { 54, 60, 33, 243, 102, 224, 195, 86, 171, 155, 32, 130, 216, 189, 27, 5, }, { 248, 157, 194, 193, 86, 120, 26, 141, 170, 113, 146, 173, 102, 192, 124, 211, }, { 38, 235, 2, 87, 129, 223, 139, 93, 107, 183, 41, 242, 152, 100, 19, 135, }, { 63, 54, 207, 58, 119, 113, 2, 79, 199, 255, 145, 189, 252, 105, 254, 229, }, { 10, 73, 204, 167, 87, 32, 45, 221, 120, 242, 77, 54, 40, 63, 5, 192, }, { 159, 44, 82, 216, 78, 52, 151, 1, 75, 4, 203, 91, 57, 31, 174, 184, }, { 244, 82, 74, 186, 141, 249, 44, 27, 250, 108, 228, 137, 86, 234, 122, 83, }, { 26, 158, 239, 3, 176, 31, 101, 214, 184, 222, 68, 70, 104, 230, 13, 66, }, { 165, 223, 251, 80, 243, 85, 98, 193, 176, 130, 157, 253, 209, 136, 179, 61, }, { 97, 55, 212, 197, 148, 237, 150, 199, 201, 154, 98, 228, 71, 202, 209, 43, }, { 53, 127, 3, 157, 32, 81, 47, 146, 191, 13, 220, 139, 212, 86, 251, 37, }, { 123, 169, 59, 198, 36, 242, 243, 17, 113, 68, 38, 162, 47, 44, 220, 105, }, { 222, 118, 192, 150, 215, 167, 145, 208, 193, 198, 187, 95, 254, 164, 111, 84, }, { 181, 8, 216, 244, 20, 106, 42, 202, 112, 174, 148, 141, 145, 81, 187, 191, }, { 218, 51, 184, 191, 158, 216, 131, 162, 241, 205, 40, 67, 238, 3, 109, 149, }, { 188, 2, 54, 61, 5, 251, 235, 211, 28, 202, 37, 178, 181, 133, 94, 95, }, { 215, 124, 46, 95, 198, 54, 80, 201, 173, 162, 10, 96, 218, 112, 138, 180, }, { 171, 211, 79, 222, 237, 10, 93, 110, 248, 123, 67, 215, 233, 16, 180, 60, }, { 34, 174, 122, 126, 200, 160, 153, 47, 91, 188, 186, 238, 136, 195, 17, 70, }, { 102, 49, 142, 130, 155, 35, 104, 113, 237, 7, 13, 241, 91, 134, 51, 202, }, { 58, 243, 169, 136, 189, 97, 245, 192, 251, 134, 86, 166, 232, 151, 29, 133, }, { 154, 233, 52, 106, 132, 36, 96, 142, 119, 125, 12, 64, 45, 225, 77, 216, }, { 107, 126, 24, 98, 195, 205, 187, 26, 177, 104, 47, 210, 111, 245, 212, 235, }, { 5, 197, 102, 178, 202, 16, 247, 143, 60, 121, 199, 27, 20, 254, 227, 96, }, { 111, 59, 96, 75, 138, 178, 169, 104, 129, 99, 188, 206, 127, 82, 214, 42, }, { 128, 119, 219, 105, 52, 59, 5, 88, 207, 163, 72, 6, 69, 7, 64, 154, }, { 92, 194, 39, 10, 38, 66, 157, 177, 22, 129, 91, 87, 179, 17, 46, 79, }, { 251, 222, 224, 175, 16, 201, 246, 73, 190, 231, 110, 164, 106, 43, 156, 243, }, { 137, 125, 53, 160, 37, 170, 196, 65, 163, 199, 249, 57, 97, 211, 165, 122, }, { 94, 1, 27, 255, 227, 156, 148, 136, 14, 101, 243, 89, 187, 163, 47, 206, }, { 138, 62, 23, 206, 99, 27, 40, 133, 183, 81, 5, 48, 109, 56, 69, 90, }, { 187, 4, 108, 122, 10, 53, 21, 101, 56, 87, 74, 167, 169, 201, 188, 190, }, { 109, 248, 92, 190, 79, 108, 160, 81, 153, 135, 20, 192, 119, 224, 215, 171, }, { 157, 239, 110, 45, 139, 234, 158, 56, 83, 224, 99, 85, 49, 173, 175, 57, }, { 37, 168, 32, 57, 199, 110, 103, 153, 127, 33, 213, 251, 148, 143, 243, 167, }, { 196, 232, 47, 149, 103, 184, 244, 6, 121, 24, 255, 25, 150, 66, 98, 22, }, { 21, 18, 69, 22, 45, 47, 191, 132, 252, 85, 206, 107, 84, 39, 235, 226, }, { 133, 178, 189, 219, 254, 43, 242, 215, 243, 218, 143, 29, 81, 249, 163, 250, }, { 214, 252, 48, 196, 69, 89, 181, 52, 161, 208, 94, 103, 222, 41, 107, 21, }, { 225, 64, 15, 172, 160, 214, 147, 159, 6, 57, 42, 226, 2, 205, 145, 177, }, { 212, 63, 12, 49, 128, 135, 188, 13, 185, 52, 246, 105, 214, 155, 106, 148, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 209, 250, 106, 131, 74, 151, 75, 130, 133, 77, 49, 114, 194, 101, 137, 244, }, { 126, 108, 93, 116, 238, 226, 4, 158, 77, 61, 225, 185, 59, 210, 63, 9, }, { 184, 71, 78, 20, 76, 132, 249, 161, 44, 193, 182, 174, 165, 34, 92, 158, }, }, { { 165, 85, 164, 144, 198, 141, 47, 213, 113, 128, 4, 137, 203, 114, 27, 93, }, { 45, 144, 117, 78, 54, 249, 159, 23, 98, 135, 163, 90, 72, 138, 164, 21, }, { 50, 159, 76, 128, 157, 95, 212, 243, 191, 108, 59, 100, 174, 61, 24, 233, }, { 143, 11, 148, 109, 75, 177, 127, 21, 129, 30, 108, 221, 228, 172, 134, 211, }, { 14, 95, 138, 165, 181, 73, 93, 109, 231, 50, 85, 28, 206, 168, 114, 245, }, { 48, 65, 248, 250, 32, 198, 203, 102, 158, 39, 166, 96, 193, 5, 201, 206, }, { 56, 191, 109, 209, 145, 231, 183, 119, 26, 200, 151, 112, 190, 229, 11, 82, }, { 192, 199, 102, 110, 128, 158, 170, 91, 61, 156, 221, 67, 130, 20, 162, 190, }, { 84, 188, 96, 57, 217, 120, 160, 67, 35, 255, 208, 168, 94, 127, 249, 223, }, { 230, 24, 104, 76, 5, 114, 184, 99, 11, 123, 125, 15, 12, 90, 156, 226, }, { 158, 91, 39, 6, 85, 94, 105, 156, 187, 199, 161, 255, 204, 179, 72, 218, }, { 57, 208, 55, 236, 46, 74, 89, 220, 235, 12, 56, 114, 104, 249, 130, 160, }, { 85, 211, 58, 4, 102, 213, 78, 232, 210, 59, 127, 170, 136, 99, 112, 45, }, { 126, 226, 80, 196, 84, 68, 240, 131, 211, 97, 184, 252, 113, 161, 100, 81, }, { 82, 29, 127, 183, 221, 16, 129, 63, 64, 34, 180, 164, 239, 55, 73, 182, }, { 145, 107, 247, 158, 95, 186, 218, 90, 173, 49, 91, 225, 212, 7, 179, 221, }, { 100, 253, 152, 195, 249, 190, 107, 37, 189, 216, 118, 200, 159, 122, 48, 17, }, { 3, 177, 238, 71, 2, 52, 241, 62, 208, 143, 50, 6, 185, 36, 88, 213, }, { 87, 13, 142, 126, 219, 76, 81, 125, 243, 112, 226, 174, 231, 91, 161, 10, }, { 90, 227, 234, 156, 108, 49, 253, 46, 196, 205, 133, 180, 144, 215, 139, 42, }, { 28, 190, 215, 137, 169, 146, 186, 218, 13, 100, 170, 56, 95, 147, 228, 41, }, { 96, 130, 51, 55, 64, 79, 85, 204, 255, 78, 143, 192, 65, 10, 81, 95, }, { 7, 206, 69, 179, 187, 197, 207, 215, 146, 25, 203, 14, 103, 84, 57, 155, }, { 24, 193, 124, 125, 16, 99, 132, 51, 79, 242, 83, 48, 129, 227, 133, 103, }, { 33, 17, 75, 145, 62, 41, 221, 239, 164, 254, 107, 66, 233, 26, 7, 199, }, { 114, 99, 110, 27, 92, 148, 178, 123, 21, 24, 112, 228, 208, 49, 199, 131, }, { 168, 187, 192, 114, 113, 240, 131, 134, 70, 61, 99, 147, 188, 254, 49, 125, }, { 209, 151, 213, 5, 158, 113, 188, 210, 7, 69, 16, 97, 170, 11, 108, 183, }, { 41, 239, 222, 186, 143, 8, 161, 254, 32, 17, 90, 82, 150, 250, 197, 91, }, { 198, 102, 121, 224, 132, 246, 139, 39, 94, 65, 185, 79, 51, 92, 18, 215, }, { 164, 58, 254, 173, 121, 32, 193, 126, 128, 68, 171, 139, 29, 110, 146, 175, }, { 63, 113, 40, 98, 42, 34, 120, 160, 136, 209, 92, 126, 217, 177, 50, 201, }, { 224, 185, 119, 194, 1, 26, 153, 31, 104, 166, 25, 3, 189, 18, 44, 139, }, { 39, 176, 84, 31, 58, 65, 252, 147, 199, 35, 15, 78, 88, 82, 183, 174, }, { 141, 213, 32, 23, 246, 40, 96, 128, 160, 85, 241, 217, 139, 148, 87, 244, }, { 12, 129, 62, 223, 8, 208, 66, 248, 198, 121, 200, 24, 161, 144, 163, 210, }, { 130, 229, 240, 143, 252, 204, 211, 70, 182, 163, 11, 199, 147, 32, 172, 243, }, { 234, 153, 86, 147, 13, 162, 250, 155, 205, 2, 181, 23, 173, 202, 63, 48, }, { 174, 26, 223, 252, 117, 152, 162, 250, 37, 224, 7, 159, 13, 182, 129, 20, }, { 180, 5, 23, 251, 216, 98, 57, 92, 75, 89, 201, 171, 227, 109, 213, 84, }, { 154, 36, 140, 242, 236, 175, 87, 117, 249, 81, 88, 247, 18, 195, 41, 148, }, { 99, 51, 221, 112, 66, 123, 164, 242, 47, 193, 189, 198, 248, 46, 9, 138, }, { 73, 109, 237, 141, 207, 71, 244, 50, 223, 95, 213, 146, 215, 240, 148, 4, }, { 229, 169, 134, 11, 7, 70, 73, 93, 219, 244, 79, 9, 181, 126, 196, 55, }, { 66, 34, 150, 225, 124, 82, 121, 29, 139, 63, 214, 132, 17, 52, 14, 77, }, { 228, 198, 220, 54, 184, 235, 167, 246, 42, 48, 224, 11, 99, 98, 77, 197, }, { 21, 47, 24, 159, 167, 30, 40, 96, 120, 79, 52, 42, 246, 111, 175, 71, }, { 183, 180, 249, 188, 218, 86, 200, 98, 155, 214, 251, 173, 90, 73, 141, 129, }, { 200, 57, 243, 69, 49, 191, 214, 74, 185, 115, 236, 83, 253, 244, 96, 34, }, { 6, 161, 31, 142, 4, 104, 33, 124, 99, 221, 100, 12, 177, 72, 176, 105, }, { 112, 189, 218, 97, 225, 13, 173, 238, 52, 83, 237, 224, 191, 9, 22, 164, }, { 157, 234, 201, 65, 87, 106, 152, 162, 107, 72, 147, 249, 117, 151, 16, 15, }, { 65, 147, 120, 166, 126, 102, 136, 35, 91, 176, 228, 130, 168, 16, 86, 152, }, { 117, 173, 43, 168, 231, 81, 125, 172, 135, 1, 187, 234, 183, 101, 254, 24, }, { 25, 174, 38, 64, 175, 206, 106, 152, 190, 54, 252, 50, 87, 255, 12, 149, }, { 201, 86, 169, 120, 142, 18, 56, 225, 72, 183, 67, 81, 43, 232, 233, 208, }, { 170, 101, 116, 8, 204, 105, 156, 19, 103, 118, 254, 151, 211, 198, 224, 90, }, { 252, 7, 160, 75, 168, 136, 35, 197, 101, 194, 179, 59, 226, 129, 200, 162, }, { 77, 18, 70, 121, 118, 182, 202, 219, 157, 201, 44, 154, 9, 128, 245, 74, }, { 191, 74, 108, 151, 107, 119, 180, 115, 31, 57, 202, 189, 37, 169, 79, 29, }, { 42, 94, 48, 253, 141, 60, 80, 192, 240, 158, 104, 84, 47, 222, 157, 142, }, { 115, 12, 52, 38, 227, 57, 92, 208, 228, 220, 223, 230, 6, 45, 78, 113, }, { 132, 68, 239, 1, 248, 164, 242, 58, 213, 126, 111, 203, 34, 104, 28, 154, }, { 213, 232, 126, 241, 39, 128, 130, 59, 69, 211, 233, 105, 116, 123, 13, 249, }, { 195, 118, 136, 41, 130, 170, 91, 101, 237, 19, 239, 69, 59, 48, 250, 107, }, { 175, 117, 133, 193, 202, 53, 76, 81, 212, 36, 168, 157, 219, 170, 8, 230, }, { 43, 49, 106, 192, 50, 145, 190, 107, 1, 90, 199, 86, 249, 194, 20, 124, }, { 134, 154, 91, 123, 69, 61, 237, 175, 244, 53, 242, 207, 77, 80, 205, 189, }, { 167, 139, 16, 234, 123, 20, 48, 64, 80, 203, 153, 141, 164, 74, 202, 122, }, { 177, 21, 230, 50, 222, 62, 233, 30, 248, 11, 159, 161, 235, 1, 61, 232, }, { 178, 164, 8, 117, 220, 10, 24, 32, 40, 132, 173, 167, 82, 37, 101, 61, }, { 91, 140, 176, 161, 211, 156, 19, 133, 53, 9, 42, 182, 70, 203, 2, 216, }, { 70, 93, 61, 21, 197, 163, 71, 244, 201, 169, 47, 140, 207, 68, 111, 3, }, { 211, 73, 97, 127, 35, 232, 163, 71, 38, 14, 141, 101, 197, 51, 189, 144, }, { 159, 52, 125, 59, 234, 243, 135, 55, 74, 3, 14, 253, 26, 175, 193, 40, }, { 253, 104, 250, 118, 23, 37, 205, 110, 148, 6, 28, 57, 52, 157, 65, 80, }, { 212, 135, 36, 204, 152, 45, 108, 144, 180, 23, 70, 107, 162, 103, 132, 11, }, { 15, 48, 208, 152, 10, 228, 179, 198, 22, 246, 250, 30, 24, 180, 251, 7, }, { 156, 133, 147, 124, 232, 199, 118, 9, 154, 140, 60, 251, 163, 139, 153, 253, }, { 47, 78, 193, 52, 139, 96, 128, 130, 67, 204, 62, 94, 39, 178, 117, 50, }, { 155, 75, 214, 207, 83, 2, 185, 222, 8, 149, 247, 245, 196, 223, 160, 102, }, { 67, 77, 204, 220, 195, 255, 151, 182, 122, 251, 121, 134, 199, 40, 135, 191, }, { 239, 137, 167, 90, 11, 254, 42, 217, 126, 80, 227, 29, 165, 166, 215, 140, }, { 217, 105, 64, 46, 47, 80, 192, 195, 131, 170, 33, 113, 213, 235, 174, 43, }, { 121, 44, 21, 119, 239, 129, 63, 84, 65, 120, 115, 242, 22, 245, 93, 202, }, { 182, 219, 163, 129, 101, 251, 38, 201, 106, 18, 84, 175, 140, 85, 4, 115, }, { 83, 114, 37, 138, 98, 189, 111, 148, 177, 230, 27, 166, 57, 43, 192, 68, }, { 127, 141, 10, 249, 235, 233, 30, 40, 34, 165, 23, 254, 167, 189, 237, 163, }, { 193, 168, 60, 83, 63, 51, 68, 240, 204, 88, 114, 65, 84, 8, 43, 76, }, { 240, 134, 158, 148, 160, 88, 97, 61, 163, 187, 123, 35, 67, 17, 107, 112, }, { 35, 207, 255, 235, 131, 176, 194, 122, 133, 181, 246, 70, 134, 34, 214, 224, }, { 231, 119, 50, 113, 186, 223, 86, 200, 250, 191, 210, 13, 218, 70, 21, 16, }, { 37, 110, 224, 101, 135, 216, 227, 6, 230, 104, 146, 74, 55, 106, 102, 137, }, { 94, 156, 65, 104, 213, 192, 195, 199, 134, 91, 124, 188, 78, 167, 234, 100, }, { 181, 106, 77, 198, 103, 207, 215, 247, 186, 157, 102, 169, 53, 113, 92, 166, }, { 30, 96, 99, 243, 20, 11, 165, 79, 44, 47, 55, 60, 48, 171, 53, 14, }, { 162, 155, 225, 35, 125, 72, 224, 2, 227, 153, 207, 135, 172, 38, 34, 198, }, { 223, 200, 95, 160, 43, 56, 225, 191, 224, 119, 69, 125, 100, 163, 30, 66, }, { 166, 228, 74, 215, 196, 185, 222, 235, 161, 15, 54, 143, 114, 86, 67, 136, }, { 254, 217, 20, 49, 21, 17, 60, 80, 68, 137, 46, 63, 141, 185, 25, 133, }, { 172, 196, 107, 134, 200, 1, 189, 111, 4, 171, 154, 155, 98, 142, 80, 51, }, { 34, 160, 165, 214, 60, 29, 44, 209, 116, 113, 89, 68, 80, 62, 95, 18, }, { 249, 23, 81, 130, 174, 212, 243, 135, 214, 144, 229, 49, 234, 237, 32, 30, }, { 226, 103, 195, 184, 188, 131, 134, 138, 73, 237, 132, 7, 210, 42, 253, 172, }, { 74, 220, 3, 202, 205, 115, 5, 12, 15, 208, 231, 148, 110, 212, 204, 209, }, { 188, 251, 130, 208, 105, 67, 69, 77, 207, 182, 248, 187, 156, 141, 23, 200, }, { 53, 81, 9, 51, 38, 154, 27, 36, 45, 117, 240, 106, 201, 105, 33, 114, }, { 202, 231, 71, 63, 140, 38, 201, 223, 152, 56, 113, 87, 146, 204, 177, 5, }, { 238, 230, 253, 103, 180, 83, 196, 114, 143, 148, 76, 31, 115, 186, 94, 126, }, { 120, 67, 79, 74, 80, 44, 209, 255, 176, 188, 220, 240, 192, 233, 212, 56, }, { 5, 16, 241, 201, 6, 92, 208, 66, 179, 82, 86, 10, 8, 108, 232, 188, }, { 107, 205, 72, 91, 243, 90, 216, 227, 171, 46, 140, 214, 135, 206, 203, 22, }, { 81, 172, 145, 240, 223, 36, 112, 1, 144, 173, 134, 162, 86, 19, 17, 99, }, { 225, 214, 45, 255, 190, 183, 119, 180, 153, 98, 182, 1, 107, 14, 165, 121, }, { 89, 82, 4, 219, 110, 5, 12, 16, 20, 66, 183, 178, 41, 243, 211, 255, }, { 163, 244, 187, 30, 194, 229, 14, 169, 18, 93, 96, 133, 122, 58, 171, 52, }, { 242, 88, 42, 238, 29, 193, 126, 168, 130, 240, 230, 39, 44, 41, 186, 87, }, { 113, 210, 128, 92, 94, 160, 67, 69, 197, 151, 66, 226, 105, 21, 159, 86, }, { 86, 98, 212, 67, 100, 225, 191, 214, 2, 180, 77, 172, 49, 71, 40, 248, }, { 17, 80, 179, 107, 30, 239, 22, 137, 58, 217, 205, 34, 40, 31, 206, 9, }, { 106, 162, 18, 102, 76, 247, 54, 72, 90, 234, 35, 212, 81, 210, 66, 228, }, { 137, 170, 139, 227, 79, 217, 94, 105, 226, 195, 8, 209, 85, 228, 54, 186, }, { 148, 123, 6, 87, 89, 230, 10, 24, 30, 99, 13, 235, 220, 107, 91, 97, }, { 101, 146, 194, 254, 70, 19, 133, 142, 76, 28, 217, 202, 73, 102, 185, 227, }, { 140, 186, 122, 42, 73, 133, 142, 43, 81, 145, 94, 219, 93, 136, 222, 6, }, { 187, 53, 199, 99, 210, 134, 138, 154, 93, 175, 51, 181, 251, 217, 46, 83, }, { 119, 115, 159, 210, 90, 200, 98, 57, 166, 74, 38, 238, 216, 93, 47, 63, }, { 60, 192, 198, 37, 40, 22, 137, 158, 88, 94, 110, 120, 96, 149, 106, 28, }, { 123, 242, 161, 13, 82, 24, 32, 193, 96, 51, 238, 246, 121, 205, 140, 237, }, { 40, 128, 132, 135, 48, 165, 79, 85, 209, 213, 245, 80, 64, 230, 76, 169, }, { 171, 10, 46, 53, 115, 196, 114, 184, 150, 178, 81, 149, 5, 218, 105, 168, }, { 210, 38, 59, 66, 156, 69, 77, 236, 215, 202, 34, 103, 19, 47, 52, 98, }, { 49, 46, 162, 199, 159, 107, 37, 205, 111, 227, 9, 98, 23, 25, 64, 60, }, { 222, 167, 5, 157, 148, 149, 15, 20, 17, 179, 234, 127, 178, 191, 151, 176, }, { 196, 184, 205, 154, 57, 111, 148, 178, 127, 10, 36, 75, 92, 100, 195, 240, }, { 95, 243, 27, 85, 106, 109, 45, 108, 119, 159, 211, 190, 152, 187, 99, 150, }, { 204, 70, 88, 177, 136, 78, 232, 163, 251, 229, 21, 91, 35, 132, 1, 108, }, { 207, 247, 182, 246, 138, 122, 25, 157, 43, 106, 39, 93, 154, 160, 89, 185, }, { 118, 28, 197, 239, 229, 101, 140, 146, 87, 142, 137, 236, 14, 65, 166, 205, }, { 44, 255, 47, 115, 137, 84, 113, 188, 147, 67, 12, 88, 158, 150, 45, 231, }, { 184, 132, 41, 36, 208, 178, 123, 164, 141, 32, 1, 179, 66, 253, 118, 134, }, { 216, 6, 26, 19, 144, 253, 46, 104, 114, 110, 142, 115, 3, 247, 39, 217, }, { 46, 33, 155, 9, 52, 205, 110, 41, 178, 8, 145, 92, 241, 174, 252, 192, }, { 54, 224, 231, 116, 36, 174, 234, 26, 253, 250, 194, 108, 112, 77, 121, 167, }, { 219, 183, 244, 84, 146, 201, 223, 86, 162, 225, 188, 117, 186, 211, 127, 12, }, { 105, 19, 252, 33, 78, 195, 199, 118, 138, 101, 17, 210, 232, 246, 26, 49, }, { 179, 203, 82, 72, 99, 167, 246, 139, 217, 64, 2, 165, 132, 57, 236, 207, }, { 20, 64, 66, 162, 24, 179, 198, 203, 137, 139, 155, 40, 32, 115, 38, 181, }, { 149, 20, 92, 106, 230, 75, 228, 179, 239, 167, 162, 233, 10, 119, 210, 147, }, { 190, 37, 54, 170, 212, 218, 90, 216, 238, 253, 101, 191, 243, 181, 198, 239, }, { 98, 92, 135, 77, 253, 214, 74, 89, 222, 5, 18, 196, 46, 50, 128, 120, }, { 161, 42, 15, 100, 127, 124, 17, 60, 51, 22, 253, 129, 21, 2, 122, 19, }, { 59, 14, 131, 150, 147, 211, 70, 73, 202, 71, 165, 118, 7, 193, 83, 135, }, { 22, 158, 246, 216, 165, 42, 217, 94, 168, 192, 6, 44, 79, 75, 247, 146, }, { 102, 35, 44, 185, 68, 39, 116, 176, 156, 147, 235, 204, 240, 66, 225, 54, }, { 233, 40, 184, 212, 15, 150, 11, 165, 29, 141, 135, 17, 20, 238, 103, 229, }, { 92, 66, 245, 18, 104, 89, 220, 82, 167, 16, 225, 184, 33, 159, 59, 67, }, { 108, 3, 13, 232, 72, 159, 23, 52, 57, 55, 71, 216, 224, 154, 242, 141, }, { 109, 108, 87, 213, 247, 50, 249, 159, 200, 243, 232, 218, 54, 134, 123, 127, }, { 173, 171, 49, 187, 119, 172, 83, 196, 245, 111, 53, 153, 180, 146, 217, 193, }, { 55, 143, 189, 73, 155, 3, 4, 177, 12, 62, 109, 110, 166, 81, 240, 85, }, { 97, 237, 105, 10, 255, 226, 187, 103, 14, 138, 32, 194, 151, 22, 216, 173, }, { 75, 179, 89, 247, 114, 222, 235, 167, 254, 20, 72, 150, 184, 200, 69, 35, }, { 185, 235, 115, 25, 111, 31, 149, 15, 124, 228, 174, 177, 148, 225, 255, 116, }, { 227, 8, 153, 133, 3, 46, 104, 33, 184, 41, 43, 5, 4, 54, 116, 94, }, { 186, 90, 157, 94, 109, 43, 100, 49, 172, 107, 156, 183, 45, 197, 167, 161, }, { 241, 233, 196, 169, 31, 245, 143, 150, 82, 127, 212, 33, 149, 13, 226, 130, }, { 160, 69, 85, 89, 192, 209, 255, 151, 194, 210, 82, 131, 195, 30, 243, 225, }, { 133, 43, 181, 60, 71, 9, 28, 145, 36, 186, 192, 201, 244, 116, 149, 104, }, { 131, 138, 170, 178, 67, 97, 61, 237, 71, 103, 164, 197, 69, 60, 37, 1, }, { 218, 216, 174, 105, 45, 100, 49, 253, 83, 37, 19, 119, 108, 207, 246, 254, }, { 71, 50, 103, 40, 122, 14, 169, 95, 56, 109, 128, 142, 25, 88, 230, 241, }, { 197, 215, 151, 167, 134, 194, 122, 25, 142, 206, 139, 73, 138, 120, 74, 2, }, { 176, 122, 188, 15, 97, 147, 7, 181, 9, 207, 48, 163, 61, 29, 180, 26, }, { 51, 240, 22, 189, 34, 242, 58, 88, 78, 168, 148, 102, 120, 33, 145, 27, }, { 250, 166, 191, 197, 172, 224, 2, 185, 6, 31, 215, 55, 83, 201, 120, 203, }, { 150, 165, 178, 45, 228, 127, 21, 141, 63, 40, 144, 239, 179, 83, 138, 70, }, { 111, 178, 227, 175, 74, 171, 230, 10, 233, 184, 117, 222, 89, 190, 170, 88, }, { 110, 221, 185, 146, 245, 6, 8, 161, 24, 124, 218, 220, 143, 162, 35, 170, }, { 194, 25, 210, 20, 61, 7, 181, 206, 28, 215, 64, 71, 237, 44, 115, 153, }, { 246, 39, 129, 26, 164, 48, 64, 65, 192, 102, 31, 47, 242, 89, 219, 25, }, { 80, 195, 203, 205, 96, 137, 158, 170, 97, 105, 41, 160, 128, 15, 152, 145, }, { 255, 182, 78, 12, 170, 188, 210, 251, 181, 77, 129, 61, 91, 165, 144, 119, }, { 93, 45, 175, 47, 215, 244, 50, 249, 86, 212, 78, 186, 247, 131, 178, 177, }, { 169, 212, 154, 79, 206, 93, 109, 45, 183, 249, 204, 145, 106, 226, 184, 143, }, { 142, 100, 206, 80, 244, 28, 145, 190, 112, 218, 195, 223, 50, 176, 15, 33, }, { 23, 241, 172, 229, 26, 135, 55, 245, 89, 4, 169, 46, 153, 87, 126, 96, }, { 27, 112, 146, 58, 18, 87, 117, 13, 159, 125, 97, 54, 56, 199, 221, 178, }, { 151, 202, 232, 16, 91, 210, 251, 38, 206, 236, 63, 237, 101, 79, 3, 180, }, { 125, 83, 190, 131, 86, 112, 1, 189, 3, 238, 138, 250, 200, 133, 60, 132, }, { 236, 56, 73, 29, 9, 202, 219, 231, 174, 223, 209, 27, 28, 130, 143, 89, }, { 88, 61, 94, 230, 209, 168, 226, 187, 229, 134, 24, 176, 255, 239, 90, 13, }, { 247, 72, 219, 39, 27, 157, 174, 234, 49, 162, 176, 45, 36, 69, 82, 235, }, { 31, 15, 57, 206, 171, 166, 75, 228, 221, 235, 152, 62, 230, 183, 188, 252, }, { 251, 201, 229, 248, 19, 77, 236, 18, 247, 219, 120, 53, 133, 213, 241, 57, }, { 124, 60, 228, 190, 233, 221, 239, 22, 242, 42, 37, 248, 30, 153, 181, 118, }, { 9, 145, 207, 22, 14, 140, 146, 186, 117, 43, 158, 18, 169, 252, 75, 110, }, { 13, 238, 100, 226, 183, 125, 172, 83, 55, 189, 103, 26, 119, 140, 42, 32, }, { 122, 157, 251, 48, 237, 181, 206, 106, 145, 247, 65, 244, 175, 209, 5, 31, }, { 103, 76, 118, 132, 251, 138, 154, 27, 109, 87, 68, 206, 38, 94, 104, 196, }, { 69, 236, 211, 82, 199, 151, 182, 202, 25, 38, 29, 138, 118, 96, 55, 214, }, { 135, 245, 1, 70, 250, 144, 3, 4, 5, 241, 93, 205, 155, 76, 68, 79, }, { 220, 121, 177, 231, 41, 12, 16, 129, 48, 248, 119, 123, 221, 135, 70, 151, }, { 232, 71, 226, 233, 176, 59, 229, 14, 236, 73, 40, 19, 194, 242, 238, 23, }, { 79, 204, 242, 3, 203, 47, 213, 78, 188, 130, 177, 158, 102, 184, 36, 109, }, { 29, 209, 141, 180, 22, 63, 84, 113, 252, 160, 5, 58, 137, 143, 109, 219, }, { 78, 163, 168, 62, 116, 130, 59, 229, 77, 70, 30, 156, 176, 164, 173, 159, }, { 4, 127, 171, 244, 185, 241, 62, 233, 66, 150, 249, 8, 222, 112, 97, 78, }, { 235, 246, 12, 174, 178, 15, 20, 48, 60, 198, 26, 21, 123, 214, 182, 194, }, { 248, 120, 11, 191, 17, 121, 29, 44, 39, 84, 74, 51, 60, 241, 169, 236, }, { 243, 55, 112, 211, 162, 108, 144, 3, 115, 52, 73, 37, 250, 53, 51, 165, }, { 62, 30, 114, 95, 149, 143, 150, 11, 121, 21, 243, 124, 15, 173, 187, 59, }, { 61, 175, 156, 24, 151, 187, 103, 53, 169, 154, 193, 122, 182, 137, 227, 238, }, { 189, 148, 216, 237, 214, 238, 171, 230, 62, 114, 87, 185, 74, 145, 158, 58, }, { 138, 27, 101, 164, 77, 237, 175, 87, 50, 76, 58, 215, 236, 192, 110, 111, }, { 136, 197, 209, 222, 240, 116, 176, 194, 19, 7, 167, 211, 131, 248, 191, 72, }, { 221, 22, 235, 218, 150, 161, 254, 42, 193, 60, 216, 121, 11, 155, 207, 101, }, { 205, 41, 2, 140, 55, 227, 6, 8, 10, 33, 186, 89, 245, 152, 136, 158, }, { 11, 79, 123, 108, 179, 21, 141, 47, 84, 96, 3, 22, 198, 196, 154, 73, }, { 19, 142, 7, 17, 163, 118, 9, 28, 27, 146, 80, 38, 71, 39, 31, 46, }, { 152, 250, 56, 136, 81, 54, 72, 224, 216, 26, 197, 243, 125, 251, 248, 179, }, { 2, 222, 180, 122, 189, 153, 31, 149, 33, 75, 157, 4, 111, 56, 209, 39, }, { 147, 181, 67, 228, 226, 35, 197, 207, 140, 122, 198, 229, 187, 63, 98, 250, }, { 128, 59, 68, 245, 65, 85, 204, 211, 151, 232, 150, 195, 252, 24, 125, 212, }, { 144, 4, 173, 163, 224, 23, 52, 241, 92, 245, 244, 227, 2, 27, 58, 47, }, { 208, 248, 143, 56, 33, 220, 82, 121, 246, 129, 191, 99, 124, 23, 229, 69, }, { 36, 1, 186, 88, 56, 117, 13, 173, 23, 172, 61, 72, 225, 118, 239, 123, }, { 52, 62, 83, 14, 153, 55, 245, 143, 220, 177, 95, 104, 31, 117, 168, 128, }, { 203, 136, 29, 2, 51, 139, 39, 116, 105, 252, 222, 85, 68, 208, 56, 247, }, { 237, 87, 19, 32, 182, 103, 53, 76, 95, 27, 126, 25, 202, 158, 6, 171, }, { 244, 249, 53, 96, 25, 169, 95, 212, 225, 45, 130, 43, 157, 97, 10, 62, }, { 206, 152, 236, 203, 53, 215, 247, 54, 218, 174, 136, 95, 76, 188, 208, 75, }, { 153, 149, 98, 181, 238, 155, 166, 75, 41, 222, 106, 241, 171, 231, 113, 65, }, { 16, 63, 233, 86, 161, 66, 248, 34, 203, 29, 98, 32, 254, 3, 71, 251, }, { 68, 131, 137, 111, 120, 58, 88, 97, 232, 226, 178, 136, 160, 124, 190, 36, }, { 64, 252, 34, 155, 193, 203, 102, 136, 170, 116, 75, 128, 126, 12, 223, 106, }, { 146, 218, 25, 217, 93, 142, 43, 100, 125, 190, 105, 231, 109, 35, 235, 8, }, { 58, 97, 217, 171, 44, 126, 168, 226, 59, 131, 10, 116, 209, 221, 218, 117, }, { 1, 111, 90, 61, 191, 173, 238, 171, 241, 196, 175, 2, 214, 28, 137, 242, }, { 38, 223, 14, 34, 133, 236, 18, 56, 54, 231, 160, 76, 142, 78, 62, 92, }, { 18, 225, 93, 44, 28, 219, 231, 183, 234, 86, 255, 36, 145, 59, 150, 220, }, { 26, 31, 200, 7, 173, 250, 155, 166, 110, 185, 206, 52, 238, 219, 84, 64, }, { 72, 2, 183, 176, 112, 234, 26, 153, 46, 155, 122, 144, 1, 236, 29, 246, }, { 104, 124, 166, 28, 241, 110, 41, 221, 123, 161, 190, 208, 62, 234, 147, 195, }, { 245, 150, 111, 93, 166, 4, 177, 127, 16, 233, 45, 41, 75, 125, 131, 204, }, { 129, 84, 30, 200, 254, 248, 34, 120, 102, 44, 57, 193, 42, 4, 244, 38, }, { 139, 116, 63, 153, 242, 64, 65, 252, 195, 136, 149, 213, 58, 220, 231, 157, }, { 199, 9, 35, 221, 59, 91, 101, 140, 175, 133, 22, 77, 229, 64, 155, 37, }, { 214, 89, 144, 182, 37, 180, 115, 5, 149, 92, 219, 111, 205, 95, 85, 44, }, { 32, 126, 17, 172, 129, 132, 51, 68, 85, 58, 196, 64, 63, 6, 142, 53, }, { 10, 32, 33, 81, 12, 184, 99, 132, 165, 164, 172, 20, 16, 216, 19, 187, }, { 8, 254, 149, 43, 177, 33, 124, 17, 132, 239, 49, 16, 127, 224, 194, 156, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 76, 125, 28, 68, 201, 27, 36, 112, 108, 13, 131, 152, 223, 156, 124, 184, }, { 215, 54, 202, 139, 154, 25, 157, 174, 100, 152, 116, 109, 27, 67, 220, 222, }, { 116, 194, 113, 149, 88, 252, 147, 7, 118, 197, 20, 232, 97, 121, 119, 234, }, }, { { 81, 246, 95, 204, 201, 187, 75, 202, 126, 82, 234, 91, 103, 162, 239, 230, }, { 51, 174, 165, 3, 248, 114, 207, 16, 172, 219, 65, 6, 184, 102, 186, 103, }, { 164, 106, 21, 23, 82, 111, 194, 208, 112, 38, 203, 46, 148, 139, 142, 134, }, { 103, 222, 229, 165, 210, 126, 250, 255, 24, 74, 25, 137, 168, 206, 110, 173, }, { 10, 207, 62, 212, 5, 173, 252, 74, 87, 69, 167, 107, 238, 20, 118, 88, }, { 231, 132, 157, 252, 146, 151, 230, 9, 44, 124, 112, 59, 182, 13, 30, 89, }, { 40, 186, 248, 214, 20, 241, 118, 235, 159, 215, 217, 111, 62, 80, 27, 163, }, { 26, 85, 49, 118, 13, 25, 30, 36, 176, 51, 3, 236, 157, 52, 120, 167, }, { 108, 80, 183, 210, 54, 73, 161, 106, 204, 48, 37, 103, 93, 216, 193, 150, }, { 101, 92, 61, 32, 211, 137, 119, 130, 221, 52, 236, 64, 158, 202, 31, 107, }, { 250, 213, 107, 101, 125, 206, 11, 117, 147, 242, 52, 202, 106, 55, 44, 20, }, { 232, 205, 188, 66, 116, 141, 100, 102, 177, 250, 101, 132, 47, 19, 83, 45, }, { 172, 39, 243, 70, 86, 53, 179, 231, 226, 29, 153, 140, 76, 155, 137, 24, }, { 90, 120, 13, 187, 45, 140, 16, 95, 170, 40, 214, 181, 146, 180, 64, 221, }, { 169, 161, 236, 44, 181, 130, 205, 194, 40, 222, 43, 88, 59, 145, 178, 52, }, { 48, 109, 17, 37, 24, 31, 229, 178, 234, 154, 47, 74, 149, 96, 18, 194, }, { 139, 212, 42, 46, 164, 222, 71, 99, 224, 76, 85, 92, 235, 213, 223, 207, }, { 131, 153, 204, 127, 160, 132, 54, 84, 114, 119, 7, 254, 51, 197, 216, 81, }, { 239, 201, 123, 173, 150, 205, 151, 62, 190, 71, 34, 153, 110, 29, 25, 199, }, { 102, 159, 137, 6, 51, 228, 93, 32, 155, 117, 130, 12, 179, 204, 183, 206, }, { 20, 93, 124, 107, 10, 153, 59, 148, 174, 138, 141, 214, 31, 40, 236, 176, }, { 13, 203, 249, 59, 231, 237, 15, 18, 88, 248, 224, 118, 175, 26, 60, 178, }, { 5, 134, 31, 106, 227, 183, 126, 37, 202, 195, 178, 212, 119, 10, 59, 44, }, { 146, 66, 175, 126, 73, 170, 115, 229, 22, 62, 56, 252, 91, 231, 15, 205, }, { 122, 143, 19, 60, 61, 39, 23, 131, 167, 196, 93, 120, 116, 244, 92, 224, }, { 19, 89, 187, 132, 232, 217, 200, 204, 161, 55, 202, 203, 94, 38, 166, 90, }, { 216, 160, 173, 103, 108, 146, 129, 212, 91, 96, 74, 206, 186, 115, 65, 239, }, { 135, 94, 191, 182, 162, 169, 239, 174, 59, 139, 46, 175, 95, 205, 58, 30, }, { 181, 177, 118, 22, 187, 65, 135, 97, 20, 111, 244, 44, 252, 169, 89, 26, }, { 223, 164, 106, 136, 142, 210, 114, 140, 84, 221, 13, 211, 251, 125, 11, 5, }, { 145, 129, 27, 88, 169, 199, 89, 71, 80, 127, 86, 176, 118, 225, 167, 104, }, { 45, 60, 231, 188, 247, 70, 8, 206, 85, 20, 107, 187, 73, 90, 32, 143, }, { 160, 173, 102, 222, 80, 66, 27, 42, 57, 218, 226, 127, 248, 131, 108, 201, }, { 191, 126, 72, 194, 190, 236, 123, 43, 67, 42, 83, 71, 18, 189, 47, 66, }, { 36, 48, 109, 78, 18, 134, 222, 38, 68, 16, 162, 156, 138, 72, 254, 114, }, { 73, 33, 182, 63, 197, 85, 216, 147, 11, 31, 28, 126, 204, 146, 230, 135, }, { 238, 136, 23, 14, 119, 87, 48, 225, 61, 120, 185, 28, 117, 31, 192, 164, }, { 44, 125, 139, 31, 22, 220, 175, 17, 214, 43, 240, 62, 82, 88, 249, 236, }, { 29, 81, 246, 153, 239, 89, 237, 124, 191, 142, 68, 241, 220, 58, 50, 77, }, { 204, 253, 209, 12, 102, 11, 186, 64, 245, 234, 199, 24, 165, 91, 173, 95, }, { 124, 202, 184, 112, 62, 253, 67, 4, 43, 70, 129, 224, 46, 248, 207, 105, }, { 142, 82, 53, 68, 71, 105, 57, 70, 42, 143, 231, 136, 156, 223, 228, 227, }, { 184, 122, 143, 45, 92, 172, 136, 115, 76, 151, 20, 90, 83, 179, 101, 168, }, { 230, 197, 241, 95, 115, 13, 65, 214, 175, 67, 235, 190, 173, 15, 199, 58, }, { 244, 221, 38, 120, 122, 78, 46, 197, 141, 75, 186, 240, 232, 43, 184, 3, }, { 38, 178, 181, 203, 19, 113, 83, 91, 129, 110, 87, 85, 188, 76, 143, 180, }, { 27, 20, 93, 213, 236, 131, 185, 251, 51, 12, 152, 105, 134, 54, 161, 196, }, { 79, 100, 29, 115, 198, 143, 140, 20, 135, 157, 192, 230, 150, 158, 117, 14, }, { 213, 107, 84, 92, 139, 127, 142, 198, 3, 152, 170, 184, 21, 105, 125, 93, }, { 197, 241, 91, 254, 131, 203, 108, 168, 228, 238, 14, 63, 102, 73, 115, 162, }, { 80, 183, 51, 111, 40, 33, 236, 21, 253, 109, 113, 222, 124, 160, 54, 133, }, { 121, 76, 167, 26, 221, 74, 61, 33, 225, 133, 51, 52, 89, 242, 244, 69, }, { 119, 68, 234, 7, 218, 202, 24, 145, 255, 60, 189, 14, 219, 238, 96, 82, }, { 22, 223, 164, 238, 11, 110, 182, 233, 107, 244, 120, 31, 41, 44, 157, 118, }, { 82, 53, 235, 234, 41, 214, 97, 104, 56, 19, 132, 23, 74, 164, 71, 67, }, { 21, 28, 16, 200, 235, 3, 156, 75, 45, 181, 22, 83, 4, 42, 53, 211, }, { 155, 78, 37, 140, 172, 106, 165, 13, 7, 58, 241, 219, 152, 245, 209, 48, }, { 180, 240, 26, 181, 90, 219, 32, 190, 151, 80, 111, 169, 231, 171, 128, 121, }, { 62, 101, 92, 56, 31, 159, 192, 2, 244, 35, 161, 112, 23, 124, 134, 213, }, { 128, 90, 120, 89, 64, 233, 28, 246, 52, 54, 105, 178, 30, 195, 112, 244, }, { 54, 40, 186, 105, 27, 197, 177, 53, 102, 24, 243, 210, 207, 108, 129, 75, }, { 211, 46, 255, 16, 136, 165, 218, 65, 143, 26, 118, 32, 79, 101, 238, 212, }, { 43, 121, 76, 240, 244, 156, 92, 73, 217, 150, 183, 35, 19, 86, 179, 6, }, { 1, 65, 108, 163, 225, 154, 167, 223, 131, 63, 155, 133, 27, 2, 217, 99, }, { 153, 204, 253, 9, 173, 157, 40, 112, 194, 68, 4, 18, 174, 241, 160, 246, }, { 221, 38, 178, 13, 143, 37, 255, 241, 145, 163, 248, 26, 205, 121, 122, 195, }, { 246, 95, 254, 253, 123, 185, 163, 184, 72, 53, 79, 57, 222, 47, 201, 197, }, { 104, 151, 196, 27, 52, 100, 120, 144, 133, 204, 12, 54, 49, 208, 35, 217, }, { 18, 24, 215, 39, 9, 67, 111, 19, 34, 8, 81, 78, 69, 36, 127, 57, }, { 138, 149, 70, 141, 69, 68, 224, 188, 99, 115, 206, 217, 240, 215, 6, 172, }, { 9, 12, 138, 242, 229, 192, 214, 232, 17, 4, 201, 39, 195, 18, 222, 253, }, { 166, 232, 205, 146, 83, 152, 79, 173, 181, 88, 62, 231, 162, 143, 255, 64, }, { 114, 194, 245, 109, 57, 125, 102, 180, 53, 255, 15, 218, 172, 228, 91, 126, }, { 196, 176, 55, 93, 98, 81, 203, 119, 103, 209, 149, 186, 125, 75, 170, 193, }, { 58, 162, 47, 241, 29, 178, 25, 248, 189, 223, 136, 33, 123, 116, 100, 154, }, { 116, 135, 94, 33, 58, 167, 50, 51, 185, 125, 211, 66, 246, 232, 200, 247, }, { 193, 54, 40, 55, 129, 230, 181, 82, 173, 18, 39, 110, 10, 65, 145, 237, }, { 202, 184, 122, 64, 101, 209, 238, 199, 121, 104, 27, 128, 255, 87, 62, 214, }, { 185, 59, 227, 142, 189, 54, 47, 172, 207, 168, 143, 223, 72, 177, 188, 203, }, { 112, 64, 45, 232, 56, 138, 235, 201, 240, 129, 250, 19, 154, 224, 42, 184, }, { 188, 189, 252, 228, 94, 129, 81, 137, 5, 107, 61, 11, 63, 187, 135, 231, }, { 52, 170, 98, 236, 26, 50, 60, 72, 163, 102, 6, 27, 249, 104, 240, 141, }, { 106, 21, 28, 158, 53, 147, 245, 237, 64, 178, 249, 255, 7, 212, 82, 31, }, { 72, 96, 218, 156, 36, 207, 127, 76, 136, 32, 135, 251, 215, 144, 63, 228, }, { 95, 254, 18, 209, 206, 59, 110, 122, 96, 235, 100, 97, 229, 190, 123, 241, }, { 143, 19, 89, 231, 166, 243, 158, 153, 169, 176, 124, 13, 135, 221, 61, 128, }, { 105, 214, 168, 184, 213, 254, 223, 79, 6, 243, 151, 179, 42, 210, 250, 186, }, { 154, 15, 73, 47, 77, 240, 2, 210, 132, 5, 106, 94, 131, 247, 8, 83, }, { 218, 34, 117, 226, 109, 101, 12, 169, 158, 30, 191, 7, 140, 119, 48, 41, }, { 253, 209, 172, 138, 159, 142, 248, 45, 156, 79, 115, 215, 43, 57, 102, 254, }, { 57, 97, 155, 215, 253, 223, 51, 90, 251, 158, 230, 109, 86, 114, 204, 63, }, { 165, 43, 121, 180, 179, 245, 101, 15, 243, 25, 80, 171, 143, 137, 87, 229, }, { 252, 144, 192, 41, 126, 20, 95, 242, 31, 112, 232, 82, 48, 59, 191, 157, }, { 224, 128, 90, 19, 112, 215, 21, 81, 35, 193, 55, 38, 247, 3, 84, 179, }, { 12, 138, 149, 152, 6, 119, 168, 205, 219, 199, 123, 243, 180, 24, 229, 209, }, { 87, 179, 244, 128, 202, 97, 31, 77, 242, 208, 54, 195, 61, 174, 124, 111, }, { 84, 112, 64, 166, 42, 12, 53, 239, 180, 145, 88, 143, 16, 168, 212, 202, }, { 141, 145, 129, 98, 167, 4, 19, 228, 108, 206, 137, 196, 177, 217, 76, 70, }, { 210, 111, 147, 179, 105, 63, 125, 158, 12, 37, 237, 165, 84, 103, 55, 183, }, { 247, 30, 146, 94, 154, 35, 4, 103, 203, 10, 212, 188, 197, 45, 16, 166, }, { 94, 191, 126, 114, 47, 161, 201, 165, 227, 212, 255, 228, 254, 188, 162, 146, }, { 249, 22, 223, 67, 157, 163, 33, 215, 213, 179, 90, 134, 71, 49, 132, 177, }, { 242, 152, 141, 52, 121, 148, 122, 66, 1, 201, 102, 104, 178, 39, 43, 138, }, { 227, 67, 238, 53, 144, 186, 63, 243, 101, 128, 89, 106, 218, 5, 252, 22, }, { 59, 227, 67, 82, 252, 40, 190, 39, 62, 224, 19, 164, 96, 118, 189, 249, }, { 3, 195, 180, 38, 224, 109, 42, 162, 70, 65, 110, 76, 45, 6, 168, 165, }, { 161, 236, 10, 125, 177, 216, 188, 245, 186, 229, 121, 250, 227, 129, 181, 170, }, { 150, 133, 220, 183, 75, 135, 170, 31, 95, 194, 17, 173, 55, 239, 237, 130, }, { 170, 98, 88, 10, 85, 239, 231, 96, 110, 159, 69, 20, 22, 151, 26, 145, }, { 159, 137, 86, 69, 174, 71, 124, 247, 78, 198, 216, 138, 244, 253, 51, 127, }, { 70, 104, 151, 129, 35, 79, 90, 252, 150, 153, 9, 193, 85, 140, 171, 243, }, { 65, 108, 80, 110, 193, 15, 169, 164, 153, 36, 78, 220, 20, 130, 225, 25, }, { 42, 56, 32, 83, 21, 6, 251, 150, 90, 169, 44, 166, 8, 84, 106, 101, }, { 96, 218, 34, 74, 48, 62, 9, 167, 23, 247, 94, 148, 233, 192, 36, 71, }, { 229, 6, 69, 121, 147, 96, 107, 116, 233, 2, 133, 242, 128, 9, 111, 159, }, { 148, 7, 4, 50, 74, 112, 39, 98, 154, 188, 228, 100, 1, 235, 156, 68, }, { 190, 63, 36, 97, 95, 118, 220, 244, 192, 21, 200, 194, 9, 191, 246, 33, }, { 144, 192, 119, 251, 72, 93, 254, 152, 211, 64, 205, 53, 109, 227, 126, 11, }, { 47, 190, 63, 57, 246, 177, 133, 179, 144, 106, 158, 114, 127, 94, 81, 73, }, { 157, 11, 142, 192, 175, 176, 241, 138, 139, 184, 45, 67, 194, 249, 66, 185, }, { 129, 27, 20, 250, 161, 115, 187, 41, 183, 9, 242, 55, 5, 193, 169, 151, }, { 162, 47, 190, 91, 81, 181, 150, 87, 252, 164, 23, 182, 206, 135, 29, 15, }, { 118, 5, 134, 164, 59, 80, 191, 78, 124, 3, 38, 139, 192, 236, 185, 49, }, { 75, 163, 110, 186, 196, 162, 85, 238, 206, 97, 233, 183, 250, 150, 151, 65, }, { 228, 71, 41, 218, 114, 250, 204, 171, 106, 61, 30, 119, 155, 11, 182, 252, }, { 6, 69, 171, 76, 3, 218, 84, 135, 140, 130, 220, 152, 90, 12, 147, 137, }, { 85, 49, 44, 5, 203, 150, 146, 48, 55, 174, 195, 10, 11, 170, 13, 169, }, { 174, 165, 43, 195, 87, 194, 62, 154, 39, 99, 108, 69, 122, 159, 248, 222, }, { 28, 16, 154, 58, 14, 195, 74, 163, 60, 177, 223, 116, 199, 56, 235, 46, }, { 117, 198, 50, 130, 219, 61, 149, 236, 58, 66, 72, 199, 237, 234, 17, 148, }, { 91, 57, 97, 24, 204, 22, 183, 128, 41, 23, 77, 48, 137, 182, 153, 190, }, { 4, 199, 115, 201, 2, 45, 217, 250, 73, 252, 41, 81, 108, 8, 226, 79, }, { 39, 243, 217, 104, 242, 235, 244, 132, 2, 81, 204, 208, 167, 78, 86, 215, }, { 77, 230, 197, 246, 199, 120, 1, 105, 66, 227, 53, 47, 160, 154, 4, 200, }, { 156, 74, 226, 99, 78, 42, 86, 85, 8, 135, 182, 198, 217, 251, 155, 218, }, { 32, 247, 30, 135, 16, 171, 7, 220, 13, 236, 139, 205, 230, 64, 28, 61, }, { 83, 116, 135, 73, 200, 76, 198, 183, 187, 44, 31, 146, 81, 166, 158, 32, }, { 208, 237, 75, 54, 104, 200, 240, 227, 201, 91, 24, 108, 98, 99, 70, 113, }, { 149, 70, 104, 145, 171, 234, 128, 189, 25, 131, 127, 225, 26, 233, 69, 39, }, { 243, 217, 225, 151, 152, 14, 221, 157, 130, 246, 253, 237, 169, 37, 242, 233, }, { 133, 220, 103, 51, 163, 94, 98, 211, 254, 245, 219, 102, 105, 201, 75, 216, }, { 136, 23, 158, 8, 68, 179, 109, 193, 166, 13, 59, 16, 198, 211, 119, 106, }, { 176, 55, 105, 124, 88, 246, 249, 68, 222, 172, 70, 248, 139, 163, 98, 54, }, { 34, 117, 198, 2, 17, 92, 138, 161, 200, 146, 126, 4, 208, 68, 109, 251, }, { 11, 142, 82, 119, 228, 55, 91, 149, 212, 122, 60, 238, 245, 22, 175, 59, }, { 2, 130, 216, 133, 1, 247, 141, 125, 197, 126, 245, 201, 54, 4, 113, 198, }, { 201, 123, 206, 102, 133, 188, 196, 101, 63, 41, 117, 204, 210, 81, 150, 115, }, { 219, 99, 25, 65, 140, 255, 171, 118, 29, 33, 36, 130, 151, 117, 233, 74, }, { 182, 114, 194, 48, 91, 44, 173, 195, 82, 46, 154, 96, 209, 175, 241, 191, }, { 64, 45, 60, 205, 32, 149, 14, 123, 26, 27, 213, 89, 15, 128, 56, 122, }, { 78, 37, 113, 208, 39, 21, 43, 203, 4, 162, 91, 99, 141, 156, 172, 109, }, { 215, 233, 140, 217, 138, 136, 3, 187, 198, 230, 95, 113, 35, 109, 12, 155, }, { 171, 35, 52, 169, 180, 117, 64, 191, 237, 160, 222, 145, 13, 149, 195, 242, }, { 152, 141, 145, 170, 76, 7, 143, 175, 65, 123, 159, 151, 181, 243, 121, 149, }, { 200, 58, 162, 197, 100, 38, 99, 186, 188, 22, 238, 73, 201, 83, 79, 16, }, { 175, 228, 71, 96, 182, 88, 153, 69, 164, 92, 247, 192, 97, 157, 33, 189, }, { 163, 110, 210, 248, 176, 47, 49, 136, 127, 155, 140, 51, 213, 133, 196, 108, }, { 68, 234, 79, 4, 34, 184, 215, 129, 83, 231, 252, 8, 99, 136, 218, 53, }, { 132, 157, 11, 144, 66, 196, 197, 12, 125, 202, 64, 227, 114, 203, 146, 187, }, { 158, 200, 58, 230, 79, 221, 219, 40, 205, 249, 67, 15, 239, 255, 234, 28, }, { 226, 2, 130, 150, 113, 32, 152, 44, 230, 191, 194, 239, 193, 7, 37, 117, }, { 205, 188, 189, 175, 135, 145, 29, 159, 118, 213, 92, 157, 190, 89, 116, 60, }, { 251, 148, 7, 198, 156, 84, 172, 170, 16, 205, 175, 79, 113, 53, 245, 119, }, { 69, 171, 35, 167, 195, 34, 112, 94, 208, 216, 103, 141, 120, 138, 3, 86, }, { 35, 52, 170, 161, 240, 198, 45, 126, 75, 173, 229, 129, 203, 70, 180, 152, }, { 198, 50, 239, 216, 99, 166, 70, 10, 162, 175, 96, 115, 75, 79, 219, 7, }, { 61, 166, 232, 30, 255, 242, 234, 160, 178, 98, 207, 60, 58, 122, 46, 112, }, { 23, 158, 200, 77, 234, 244, 17, 54, 232, 203, 227, 154, 50, 46, 68, 21, }, { 235, 14, 8, 100, 148, 224, 78, 196, 247, 187, 11, 200, 2, 21, 251, 136, }, { 46, 255, 83, 154, 23, 43, 34, 108, 19, 85, 5, 247, 100, 92, 136, 42, }, { 203, 249, 22, 227, 132, 75, 73, 24, 250, 87, 128, 5, 228, 85, 231, 181, }, { 178, 181, 177, 249, 89, 1, 116, 57, 27, 210, 179, 49, 189, 167, 19, 240, }, { 92, 61, 166, 247, 46, 86, 68, 216, 38, 170, 10, 45, 200, 184, 211, 84, }, { 74, 226, 2, 25, 37, 56, 242, 49, 77, 94, 114, 50, 225, 148, 78, 34, }, { 100, 29, 81, 131, 50, 19, 208, 93, 94, 11, 119, 197, 133, 200, 198, 8, }, { 113, 1, 65, 75, 217, 16, 76, 22, 115, 190, 97, 150, 129, 226, 243, 219, }, { 53, 235, 14, 79, 251, 168, 155, 151, 32, 89, 157, 158, 226, 106, 41, 238, }, { 199, 115, 131, 123, 130, 60, 225, 213, 33, 144, 251, 246, 80, 77, 2, 100, }, { 7, 4, 199, 239, 226, 64, 243, 88, 15, 189, 71, 29, 65, 14, 74, 234, }, { 89, 187, 185, 157, 205, 225, 58, 253, 236, 105, 184, 249, 191, 178, 232, 120, }, { 56, 32, 247, 116, 28, 69, 148, 133, 120, 161, 125, 232, 77, 112, 21, 92, }, { 234, 79, 100, 199, 117, 122, 233, 27, 116, 132, 144, 77, 25, 23, 34, 235, }, { 55, 105, 214, 202, 250, 95, 22, 234, 229, 39, 104, 87, 212, 110, 88, 40, }, { 99, 25, 150, 108, 208, 83, 35, 5, 81, 182, 48, 216, 196, 198, 140, 226, }, { 24, 215, 233, 243, 12, 238, 147, 89, 117, 77, 246, 37, 171, 48, 9, 97, }, { 167, 169, 161, 49, 178, 2, 232, 114, 54, 103, 165, 98, 185, 141, 38, 35, }, { 88, 250, 213, 62, 44, 123, 157, 34, 111, 86, 35, 124, 164, 176, 49, 27, }, { 17, 219, 99, 1, 233, 46, 69, 177, 100, 73, 63, 2, 104, 34, 215, 156, }, { 245, 156, 74, 219, 155, 212, 137, 26, 14, 116, 33, 117, 243, 41, 97, 96, }, { 217, 225, 193, 196, 141, 8, 38, 11, 216, 95, 209, 75, 161, 113, 152, 140, }, { 233, 140, 208, 225, 149, 23, 195, 185, 50, 197, 254, 1, 52, 17, 138, 78, }, { 37, 113, 1, 237, 243, 28, 121, 249, 199, 47, 57, 25, 145, 74, 39, 17, }, { 248, 87, 179, 224, 124, 57, 134, 8, 86, 140, 193, 3, 92, 51, 93, 210, }, { 151, 196, 176, 20, 170, 29, 13, 192, 220, 253, 138, 40, 44, 237, 52, 225, }, { 177, 118, 5, 223, 185, 108, 94, 155, 93, 147, 221, 125, 144, 161, 187, 85, }, { 25, 150, 133, 80, 237, 116, 52, 134, 246, 114, 109, 160, 176, 50, 208, 2, }, { 15, 73, 33, 190, 230, 26, 130, 111, 157, 134, 21, 191, 153, 30, 77, 116, }, { 137, 86, 242, 171, 165, 41, 202, 30, 37, 50, 160, 149, 221, 209, 174, 9, }, { 220, 103, 222, 174, 110, 191, 88, 46, 18, 156, 99, 159, 214, 123, 163, 160, }, { 8, 77, 230, 81, 4, 90, 113, 55, 146, 59, 82, 162, 216, 16, 7, 158, }, { 241, 91, 57, 18, 153, 249, 80, 224, 71, 136, 8, 36, 159, 33, 131, 47, }, { 168, 224, 128, 143, 84, 24, 106, 29, 171, 225, 176, 221, 32, 147, 107, 87, }, { 14, 8, 77, 29, 7, 128, 37, 176, 30, 185, 142, 58, 130, 28, 148, 23, }, { 111, 147, 3, 244, 214, 36, 139, 200, 138, 113, 75, 43, 112, 222, 105, 51, }, { 125, 139, 212, 211, 223, 103, 228, 219, 168, 121, 26, 101, 53, 250, 22, 10, }, { 212, 42, 56, 255, 106, 229, 41, 25, 128, 167, 49, 61, 14, 107, 164, 62, }, { 189, 252, 144, 71, 191, 27, 246, 86, 134, 84, 166, 142, 36, 185, 94, 132, }, { 134, 31, 211, 21, 67, 51, 72, 113, 184, 180, 181, 42, 68, 207, 227, 125, }, { 236, 10, 207, 139, 118, 160, 189, 156, 248, 6, 76, 213, 67, 27, 177, 98, }, { 50, 239, 201, 160, 25, 232, 104, 207, 47, 228, 218, 131, 163, 100, 99, 4, }, { 126, 72, 96, 245, 63, 10, 206, 121, 238, 56, 116, 41, 24, 252, 190, 175, }, { 237, 75, 163, 40, 151, 58, 26, 67, 123, 57, 215, 80, 88, 25, 104, 1, }, { 110, 210, 111, 87, 55, 190, 44, 23, 9, 78, 208, 174, 107, 220, 176, 80, }, { 195, 180, 240, 178, 128, 17, 56, 47, 104, 108, 210, 167, 60, 69, 224, 43, }, { 33, 182, 114, 36, 241, 49, 160, 3, 142, 211, 16, 72, 253, 66, 197, 94, }, { 98, 88, 250, 207, 49, 201, 132, 218, 210, 137, 171, 93, 223, 196, 85, 129, }, { 206, 127, 9, 137, 103, 252, 55, 61, 48, 148, 50, 209, 147, 95, 220, 153, }, { 147, 3, 195, 221, 168, 48, 212, 58, 149, 1, 163, 121, 64, 229, 214, 174, }, { 76, 167, 169, 85, 38, 226, 166, 182, 193, 220, 174, 170, 187, 152, 221, 171, }, { 222, 229, 6, 43, 111, 72, 213, 83, 215, 226, 150, 86, 224, 127, 210, 102, }, { 63, 36, 48, 155, 254, 5, 103, 221, 119, 28, 58, 245, 12, 126, 95, 182, }, { 67, 238, 136, 235, 192, 248, 36, 217, 92, 90, 187, 21, 34, 134, 144, 223, }, { 115, 131, 153, 206, 216, 231, 193, 107, 182, 192, 148, 95, 183, 230, 130, 29, }, { 173, 102, 159, 229, 183, 175, 20, 56, 97, 34, 2, 9, 87, 153, 80, 123, }, { 240, 26, 85, 177, 120, 99, 247, 63, 196, 183, 147, 161, 132, 35, 90, 76, }, { 71, 41, 251, 34, 194, 213, 253, 35, 21, 166, 146, 68, 78, 142, 114, 144, }, { 60, 231, 132, 189, 30, 104, 77, 127, 49, 93, 84, 185, 33, 120, 247, 19, }, { 97, 155, 78, 233, 209, 164, 174, 120, 148, 200, 197, 17, 242, 194, 253, 36, }, { 86, 242, 152, 35, 43, 251, 184, 146, 113, 239, 173, 70, 38, 172, 165, 12, }, { 41, 251, 148, 117, 245, 107, 209, 52, 28, 232, 66, 234, 37, 82, 194, 192, }, { 123, 206, 127, 159, 220, 189, 176, 92, 36, 251, 198, 253, 111, 246, 133, 131, }, { 16, 154, 15, 162, 8, 180, 226, 110, 231, 118, 164, 135, 115, 32, 14, 255, }, { 255, 83, 116, 15, 158, 121, 117, 80, 89, 49, 134, 30, 29, 61, 23, 56, }, { 93, 124, 202, 84, 207, 204, 227, 7, 165, 149, 145, 168, 211, 186, 10, 55, }, { 49, 44, 125, 134, 249, 133, 66, 109, 105, 165, 180, 207, 142, 98, 203, 161, }, { 183, 51, 174, 147, 186, 182, 10, 28, 209, 17, 1, 229, 202, 173, 40, 220, }, { 179, 244, 221, 90, 184, 155, 211, 230, 152, 237, 40, 180, 166, 165, 202, 147, }, { 107, 84, 112, 61, 212, 9, 82, 50, 195, 141, 98, 122, 28, 214, 139, 124, }, { 192, 119, 68, 148, 96, 124, 18, 141, 46, 45, 188, 235, 17, 67, 72, 142, }, { 127, 9, 12, 86, 222, 144, 105, 166, 109, 7, 239, 172, 3, 254, 103, 204, }, { 30, 146, 66, 191, 15, 52, 199, 222, 249, 207, 42, 189, 241, 60, 154, 232, }, { 209, 172, 39, 149, 137, 82, 87, 60, 74, 100, 131, 233, 121, 97, 159, 18, }, { 120, 13, 203, 185, 60, 208, 154, 254, 98, 186, 168, 177, 66, 240, 45, 38, }, { 194, 245, 156, 17, 97, 139, 159, 240, 235, 83, 73, 34, 39, 71, 57, 72, }, { 187, 185, 59, 11, 188, 193, 162, 209, 10, 214, 122, 22, 126, 181, 205, 13, }, { 109, 17, 219, 113, 215, 211, 6, 181, 79, 15, 190, 226, 70, 218, 24, 245, }, { 225, 193, 54, 176, 145, 77, 178, 142, 160, 254, 172, 163, 236, 1, 141, 208, }, { 31, 211, 46, 28, 238, 174, 96, 1, 122, 240, 177, 56, 234, 62, 67, 139, }, { 130, 216, 160, 220, 65, 30, 145, 139, 241, 72, 156, 123, 40, 199, 1, 50, }, { 186, 248, 87, 168, 93, 91, 5, 14, 137, 233, 225, 147, 101, 183, 20, 110, }, { 140, 208, 237, 193, 70, 158, 180, 59, 239, 241, 18, 65, 170, 219, 149, 37, }, { 207, 62, 101, 42, 134, 102, 144, 226, 179, 171, 169, 84, 136, 93, 5, 250, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 254, 18, 24, 172, 127, 227, 210, 143, 218, 14, 29, 155, 6, 63, 206, 91, }, { 66, 175, 228, 72, 33, 98, 131, 6, 223, 101, 32, 144, 57, 132, 73, 188, }, { 214, 168, 224, 122, 107, 18, 164, 100, 69, 217, 196, 244, 56, 111, 213, 248, }, }, { { 216, 89, 224, 248, 210, 42, 202, 28, 23, 88, 37, 71, 114, 168, 29, 49, }, { 105, 182, 116, 56, 92, 100, 16, 239, 130, 238, 170, 233, 138, 83, 183, 192, }, { 192, 210, 65, 219, 74, 145, 208, 161, 85, 172, 94, 143, 61, 1, 223, 137, }, { 186, 191, 247, 92, 84, 8, 255, 199, 50, 164, 145, 78, 172, 32, 220, 142, }, { 22, 160, 198, 251, 119, 140, 74, 104, 141, 36, 60, 3, 168, 117, 236, 254, }, { 135, 104, 172, 254, 91, 165, 9, 244, 224, 160, 23, 207, 5, 209, 60, 108, }, { 88, 197, 158, 106, 31, 117, 235, 99, 113, 144, 240, 12, 229, 23, 54, 126, }, { 89, 99, 245, 126, 175, 209, 36, 86, 6, 197, 92, 186, 20, 194, 240, 115, }, { 196, 15, 46, 139, 207, 68, 106, 117, 74, 59, 171, 18, 127, 211, 65, 189, }, { 106, 159, 201, 4, 79, 75, 130, 176, 27, 17, 157, 240, 90, 239, 62, 215, }, { 5, 123, 4, 68, 53, 113, 117, 225, 104, 194, 89, 43, 179, 7, 88, 57, }, { 154, 152, 9, 153, 246, 111, 102, 168, 202, 150, 53, 44, 249, 127, 166, 237, }, { 6, 82, 185, 120, 38, 94, 231, 190, 241, 61, 110, 50, 99, 187, 209, 46, }, { 166, 233, 57, 47, 73, 102, 95, 174, 111, 199, 31, 27, 161, 91, 128, 2, }, { 13, 2, 218, 228, 252, 24, 194, 138, 86, 47, 112, 210, 55, 96, 167, 81, }, { 209, 134, 85, 76, 171, 231, 178, 66, 94, 224, 160, 8, 7, 26, 36, 84, }, { 67, 103, 130, 117, 148, 225, 99, 129, 170, 155, 188, 221, 122, 2, 125, 209, }, { 133, 231, 122, 214, 248, 46, 84, 158, 14, 10, 140, 96, 36, 184, 115, 118, }, { 65, 232, 84, 93, 55, 106, 62, 235, 68, 49, 39, 114, 91, 107, 50, 203, }, { 210, 175, 232, 112, 184, 200, 32, 29, 199, 31, 151, 17, 215, 166, 173, 67, }, { 44, 131, 79, 53, 238, 219, 148, 208, 217, 72, 120, 6, 147, 234, 27, 63, }, { 205, 208, 155, 63, 182, 137, 18, 43, 3, 131, 46, 93, 10, 97, 120, 216, }, { 11, 80, 99, 156, 218, 70, 37, 52, 167, 18, 30, 224, 84, 219, 118, 127, }, { 162, 52, 86, 127, 204, 179, 229, 122, 112, 80, 234, 134, 227, 137, 30, 54, }, { 56, 172, 95, 230, 58, 220, 131, 210, 186, 198, 223, 170, 26, 246, 184, 219, }, { 247, 243, 18, 241, 47, 222, 204, 147, 87, 239, 106, 88, 49, 254, 143, 25, }, { 75, 30, 92, 213, 93, 136, 212, 234, 148, 118, 149, 36, 254, 101, 130, 185, }, { 230, 167, 6, 102, 206, 168, 174, 112, 92, 163, 148, 223, 11, 229, 116, 196, }, { 231, 1, 109, 114, 126, 12, 97, 69, 43, 246, 56, 105, 250, 48, 178, 201, }, { 144, 110, 1, 17, 156, 141, 140, 169, 26, 209, 135, 122, 92, 113, 22, 159, }, { 26, 4, 119, 11, 59, 48, 71, 215, 172, 94, 224, 103, 110, 192, 141, 162, }, { 83, 149, 253, 246, 197, 51, 206, 87, 214, 130, 238, 236, 177, 204, 64, 1, }, { 163, 146, 61, 107, 124, 23, 42, 79, 7, 5, 70, 48, 18, 92, 216, 59, }, { 241, 161, 171, 137, 9, 128, 43, 45, 166, 210, 4, 106, 82, 69, 94, 55, }, { 253, 5, 26, 121, 69, 60, 38, 146, 135, 168, 216, 14, 148, 240, 63, 107, }, { 81, 26, 43, 222, 102, 184, 147, 61, 56, 40, 117, 67, 144, 165, 15, 27, }, { 41, 248, 75, 113, 219, 170, 225, 49, 177, 138, 33, 45, 32, 237, 67, 6, }, { 59, 133, 226, 218, 41, 243, 17, 141, 35, 57, 232, 179, 202, 74, 49, 204, }, { 130, 19, 168, 186, 110, 212, 124, 21, 136, 98, 78, 228, 182, 214, 100, 85, }, { 103, 157, 19, 224, 179, 83, 64, 58, 77, 62, 237, 34, 109, 143, 153, 134, }, { 139, 204, 29, 14, 23, 25, 4, 75, 193, 218, 203, 171, 195, 100, 93, 48, }, { 72, 55, 225, 233, 78, 167, 70, 181, 13, 137, 162, 61, 46, 217, 11, 174, }, { 42, 209, 246, 77, 200, 133, 115, 110, 40, 117, 22, 52, 240, 81, 202, 17, }, { 239, 120, 179, 210, 183, 101, 214, 46, 21, 27, 17, 144, 126, 87, 77, 161, }, { 112, 155, 190, 15, 116, 123, 197, 103, 183, 79, 125, 151, 52, 47, 179, 117, }, { 45, 37, 36, 33, 94, 127, 91, 229, 174, 29, 212, 176, 98, 63, 221, 50, }, { 49, 115, 234, 82, 67, 17, 251, 140, 243, 126, 90, 229, 111, 68, 129, 190, }, { 226, 122, 105, 54, 75, 125, 20, 164, 67, 52, 97, 66, 73, 55, 234, 240, }, { 134, 206, 199, 234, 235, 1, 198, 193, 151, 245, 187, 121, 244, 4, 250, 97, }, { 201, 13, 244, 111, 51, 92, 168, 255, 28, 20, 219, 192, 72, 179, 230, 236, }, { 176, 73, 255, 212, 62, 234, 21, 198, 226, 227, 35, 24, 9, 46, 108, 252, }, { 128, 156, 126, 146, 205, 95, 33, 127, 102, 200, 213, 75, 151, 191, 43, 79, }, { 245, 124, 196, 217, 140, 85, 145, 249, 185, 69, 241, 247, 16, 151, 192, 3, }, { 252, 163, 113, 109, 245, 152, 233, 167, 240, 253, 116, 184, 101, 37, 249, 102, }, { 96, 105, 193, 140, 37, 169, 104, 177, 203, 86, 47, 166, 255, 225, 142, 165, }, { 68, 147, 80, 25, 2, 27, 75, 10, 44, 243, 126, 89, 232, 108, 106, 242, }, { 12, 164, 177, 240, 76, 188, 13, 191, 33, 122, 220, 100, 198, 181, 97, 92, }, { 143, 17, 114, 94, 146, 204, 190, 159, 222, 77, 62, 54, 129, 182, 195, 4, }, { 164, 102, 239, 7, 234, 237, 2, 196, 129, 109, 132, 180, 128, 50, 207, 24, }, { 61, 215, 91, 162, 15, 173, 246, 51, 210, 4, 134, 129, 169, 241, 224, 226, }, { 98, 230, 23, 164, 134, 34, 53, 219, 37, 252, 180, 9, 222, 136, 193, 191, }, { 53, 174, 133, 2, 198, 196, 65, 88, 236, 233, 175, 120, 45, 150, 31, 138, }, { 224, 245, 191, 30, 232, 246, 73, 206, 173, 158, 250, 237, 104, 94, 165, 234, }, { 104, 16, 31, 44, 236, 192, 223, 218, 245, 187, 6, 95, 123, 134, 113, 205, }, { 220, 132, 143, 168, 87, 255, 112, 200, 8, 207, 208, 218, 48, 122, 131, 5, }, { 64, 78, 63, 73, 135, 206, 241, 222, 51, 100, 139, 196, 170, 190, 244, 198, }, { 160, 187, 128, 87, 111, 56, 184, 16, 158, 250, 113, 41, 194, 224, 81, 44, }, { 167, 79, 82, 59, 249, 194, 144, 155, 24, 146, 179, 173, 80, 142, 70, 15, }, { 159, 227, 13, 221, 195, 30, 19, 73, 162, 84, 108, 7, 74, 120, 254, 212, }, { 43, 119, 157, 89, 120, 33, 188, 91, 95, 32, 186, 130, 1, 132, 12, 28, }, { 174, 144, 231, 143, 128, 15, 232, 197, 81, 42, 54, 226, 37, 60, 127, 106, }, { 16, 242, 127, 131, 81, 210, 173, 214, 124, 25, 82, 49, 203, 206, 61, 208, }, { 254, 44, 167, 69, 86, 19, 180, 205, 30, 87, 239, 23, 68, 76, 182, 124, }, { 161, 29, 235, 67, 223, 156, 119, 37, 233, 175, 221, 159, 51, 53, 151, 33, }, { 199, 38, 147, 183, 220, 107, 248, 42, 211, 196, 156, 11, 175, 111, 200, 170, }, { 77, 76, 229, 173, 123, 214, 51, 84, 101, 75, 251, 22, 157, 222, 83, 151, }, { 170, 77, 136, 223, 5, 218, 82, 17, 78, 189, 195, 127, 103, 238, 225, 94, }, { 212, 253, 81, 8, 158, 150, 199, 163, 54, 34, 249, 35, 180, 29, 124, 109, }, { 66, 193, 233, 97, 36, 69, 172, 180, 221, 206, 16, 107, 139, 215, 187, 220, }, { 46, 12, 153, 29, 77, 80, 201, 186, 55, 226, 227, 169, 178, 131, 84, 37, }, { 73, 145, 138, 253, 254, 3, 137, 128, 122, 220, 14, 139, 223, 12, 205, 163, }, { 178, 198, 41, 252, 157, 97, 72, 172, 12, 73, 184, 183, 40, 71, 35, 230, }, { 119, 111, 108, 99, 226, 129, 237, 236, 49, 39, 191, 19, 166, 65, 164, 86, }, { 57, 10, 52, 242, 138, 120, 76, 231, 205, 147, 115, 28, 235, 35, 126, 214, }, { 173, 185, 90, 179, 147, 32, 122, 154, 200, 213, 1, 251, 245, 128, 246, 125, }, { 32, 39, 254, 197, 162, 103, 153, 111, 248, 50, 164, 98, 85, 95, 122, 99, }, { 207, 95, 77, 23, 21, 2, 79, 65, 237, 41, 181, 242, 43, 8, 55, 194, }, { 100, 180, 174, 220, 160, 124, 210, 101, 212, 193, 218, 59, 189, 51, 16, 145, }, { 155, 62, 98, 141, 70, 203, 169, 157, 189, 195, 153, 154, 8, 170, 96, 224, }, { 222, 11, 89, 128, 244, 116, 45, 162, 230, 101, 75, 117, 17, 19, 204, 31, }, { 127, 22, 178, 195, 43, 232, 90, 135, 15, 202, 150, 234, 34, 38, 91, 62, }, { 168, 194, 94, 247, 166, 81, 15, 123, 160, 23, 88, 208, 70, 135, 174, 68, }, { 182, 27, 70, 172, 24, 180, 242, 120, 19, 222, 77, 42, 106, 149, 189, 210, }, { 92, 24, 241, 58, 154, 160, 81, 183, 110, 7, 5, 145, 167, 197, 168, 74, }, { 165, 192, 132, 19, 90, 73, 205, 241, 246, 56, 40, 2, 113, 231, 9, 21, }, { 107, 57, 162, 16, 255, 239, 77, 133, 108, 68, 49, 70, 171, 58, 248, 218, }, { 211, 9, 131, 100, 8, 108, 239, 40, 176, 74, 59, 167, 38, 115, 107, 78, }, { 240, 7, 192, 157, 185, 36, 228, 24, 209, 135, 168, 220, 163, 144, 152, 58, }, { 93, 190, 154, 46, 42, 4, 158, 130, 25, 82, 169, 39, 86, 16, 110, 71, }, { 200, 171, 159, 123, 131, 248, 103, 202, 107, 65, 119, 118, 185, 102, 32, 225, }, { 197, 169, 69, 159, 127, 224, 165, 64, 61, 110, 7, 164, 142, 6, 135, 176, }, { 189, 75, 37, 48, 194, 242, 215, 76, 180, 204, 83, 202, 62, 78, 203, 173, }, { 195, 251, 252, 231, 89, 190, 66, 254, 204, 83, 105, 150, 237, 189, 86, 158, }, { 228, 40, 208, 78, 109, 35, 243, 26, 178, 9, 15, 112, 42, 140, 59, 222, }, { 175, 54, 140, 155, 48, 171, 39, 240, 38, 127, 154, 84, 212, 233, 185, 103, }, { 184, 48, 33, 116, 247, 131, 162, 173, 220, 14, 10, 225, 141, 73, 147, 148, }, { 203, 130, 34, 71, 144, 215, 245, 149, 242, 190, 64, 111, 105, 218, 169, 246, }, { 193, 116, 42, 207, 250, 53, 31, 148, 34, 249, 242, 57, 204, 212, 25, 132, }, { 181, 50, 251, 144, 11, 155, 96, 39, 138, 33, 122, 51, 186, 41, 52, 197, }, { 111, 228, 205, 64, 122, 58, 247, 81, 115, 211, 196, 219, 233, 232, 102, 238, }, { 76, 234, 142, 185, 203, 114, 252, 97, 18, 30, 87, 160, 108, 11, 149, 154, }, { 151, 154, 211, 125, 10, 119, 164, 34, 156, 185, 69, 254, 206, 31, 1, 188, }, { 136, 229, 160, 50, 4, 54, 150, 20, 88, 37, 252, 178, 19, 216, 212, 39, }, { 97, 207, 170, 152, 149, 13, 167, 132, 188, 3, 131, 16, 14, 52, 72, 168, }, { 87, 72, 146, 166, 64, 230, 116, 131, 201, 21, 27, 113, 243, 30, 222, 53, }, { 17, 84, 20, 151, 225, 118, 98, 227, 11, 76, 254, 135, 58, 27, 251, 221, }, { 153, 177, 180, 165, 229, 64, 244, 247, 83, 105, 2, 53, 41, 195, 47, 250, }, { 114, 20, 104, 39, 215, 240, 152, 13, 89, 229, 230, 56, 21, 70, 252, 111, }, { 131, 181, 195, 174, 222, 112, 179, 32, 255, 55, 226, 82, 71, 3, 162, 88, }, { 191, 196, 243, 24, 97, 121, 138, 38, 90, 102, 200, 101, 31, 39, 132, 183, }, { 85, 199, 68, 142, 227, 109, 41, 233, 39, 191, 128, 222, 210, 119, 145, 47, }, { 115, 178, 3, 51, 103, 84, 87, 56, 46, 176, 74, 142, 228, 147, 58, 98, }, { 157, 108, 219, 245, 96, 149, 78, 35, 76, 254, 247, 168, 107, 17, 177, 206, }, { 129, 58, 21, 134, 125, 251, 238, 74, 17, 157, 121, 253, 102, 106, 237, 66, }, { 63, 88, 141, 138, 172, 38, 171, 89, 60, 174, 29, 46, 136, 152, 175, 248, }, { 179, 96, 66, 232, 45, 197, 135, 153, 123, 28, 20, 1, 217, 146, 229, 235, }, { 187, 25, 156, 72, 228, 172, 48, 242, 69, 241, 61, 248, 93, 245, 26, 131, }, { 214, 114, 135, 32, 61, 29, 154, 201, 216, 136, 98, 140, 149, 116, 51, 119, }, { 234, 3, 183, 150, 130, 20, 163, 207, 125, 217, 72, 187, 205, 80, 21, 152, }, { 37, 92, 250, 129, 151, 22, 236, 142, 144, 240, 253, 73, 230, 88, 34, 90, }, { 206, 249, 38, 3, 165, 166, 128, 116, 154, 124, 25, 68, 218, 221, 241, 207, }, { 99, 64, 124, 176, 54, 134, 250, 238, 82, 169, 24, 191, 47, 93, 7, 178, }, { 69, 53, 59, 13, 178, 191, 132, 63, 91, 166, 210, 239, 25, 185, 172, 255, }, { 50, 90, 87, 110, 80, 62, 105, 211, 106, 129, 109, 252, 191, 248, 8, 169, }, { 215, 212, 236, 52, 141, 185, 85, 252, 175, 221, 206, 58, 100, 161, 245, 122, }, { 158, 69, 102, 201, 115, 186, 220, 124, 213, 1, 192, 177, 187, 173, 56, 217, }, { 8, 121, 222, 160, 201, 105, 183, 107, 62, 237, 41, 249, 132, 103, 255, 104, }, { 141, 158, 164, 118, 49, 71, 227, 245, 48, 231, 165, 153, 160, 223, 140, 30, }, { 121, 68, 11, 187, 13, 182, 189, 57, 254, 247, 248, 216, 65, 157, 138, 16, }, { 171, 235, 227, 203, 181, 126, 157, 36, 57, 232, 111, 201, 150, 59, 39, 83, }, { 54, 135, 56, 62, 213, 235, 211, 7, 117, 22, 152, 97, 253, 42, 150, 157, }, { 251, 87, 163, 1, 99, 98, 193, 44, 118, 149, 182, 60, 247, 75, 238, 69, }, { 236, 81, 14, 238, 164, 74, 68, 113, 140, 228, 38, 137, 174, 235, 196, 182, }, { 78, 101, 88, 145, 104, 249, 161, 11, 252, 180, 204, 15, 77, 98, 218, 128, }, { 126, 176, 217, 215, 155, 76, 149, 178, 120, 159, 58, 92, 211, 243, 157, 51, }, { 208, 32, 62, 88, 27, 67, 125, 119, 41, 181, 12, 190, 246, 207, 226, 89, }, { 108, 205, 112, 124, 105, 21, 101, 14, 234, 44, 243, 194, 57, 84, 239, 249, }, { 243, 46, 125, 161, 170, 11, 118, 71, 72, 120, 159, 197, 115, 44, 17, 45, }, { 95, 49, 76, 6, 137, 143, 195, 232, 247, 248, 50, 136, 119, 121, 33, 93, }, { 255, 138, 204, 81, 230, 183, 123, 248, 105, 2, 67, 161, 181, 153, 112, 113, }, { 138, 106, 118, 26, 167, 189, 203, 126, 182, 143, 103, 29, 50, 177, 155, 61, }, { 86, 238, 249, 178, 240, 66, 187, 182, 190, 64, 183, 199, 2, 203, 24, 56, }, { 221, 34, 228, 188, 231, 91, 191, 253, 127, 154, 124, 108, 193, 175, 69, 8, }, { 180, 148, 144, 132, 187, 63, 175, 18, 253, 116, 214, 133, 75, 252, 242, 200, }, { 4, 221, 111, 80, 133, 213, 186, 212, 31, 151, 245, 157, 66, 210, 158, 52, }, { 190, 98, 152, 12, 209, 221, 69, 19, 45, 51, 100, 211, 238, 242, 66, 186, }, { 27, 162, 28, 31, 139, 148, 136, 226, 219, 11, 76, 209, 159, 21, 75, 175, }, { 156, 202, 176, 225, 208, 49, 129, 22, 59, 171, 91, 30, 154, 196, 119, 195, }, { 94, 151, 39, 18, 57, 43, 12, 221, 128, 173, 158, 62, 134, 172, 231, 80, }, { 7, 244, 210, 108, 150, 250, 40, 139, 134, 104, 194, 132, 146, 110, 23, 35, }, { 140, 56, 207, 98, 129, 227, 44, 192, 71, 178, 9, 47, 81, 10, 74, 19, }, { 15, 141, 12, 204, 95, 147, 159, 224, 184, 133, 235, 125, 22, 9, 232, 75, }, { 109, 107, 27, 104, 217, 177, 170, 59, 157, 121, 95, 116, 200, 129, 41, 244, }, { 244, 218, 175, 205, 60, 241, 94, 204, 206, 16, 93, 65, 225, 66, 6, 14, }, { 38, 117, 71, 189, 132, 57, 126, 209, 9, 15, 202, 80, 54, 228, 171, 77, }, { 113, 61, 213, 27, 196, 223, 10, 82, 192, 26, 209, 33, 197, 250, 117, 120, }, { 28, 86, 206, 115, 29, 110, 160, 105, 93, 99, 142, 85, 13, 123, 92, 140, }, { 148, 179, 110, 65, 25, 88, 54, 125, 5, 70, 114, 231, 30, 163, 136, 171, }, { 34, 168, 40, 237, 1, 236, 196, 5, 22, 152, 63, 205, 116, 54, 53, 121, }, { 235, 165, 220, 130, 50, 176, 108, 250, 10, 140, 228, 13, 60, 133, 211, 149, }, { 188, 237, 78, 36, 114, 86, 24, 121, 195, 153, 255, 124, 207, 155, 13, 160, }, { 60, 113, 48, 182, 191, 9, 57, 6, 165, 81, 42, 55, 88, 36, 38, 239, }, { 21, 137, 123, 199, 100, 163, 216, 55, 20, 219, 11, 26, 120, 201, 101, 233, }, { 233, 42, 10, 170, 145, 59, 49, 144, 228, 38, 127, 162, 29, 236, 156, 143, }, { 2, 143, 214, 40, 163, 139, 93, 106, 238, 170, 155, 175, 33, 105, 79, 26, }, { 70, 28, 134, 49, 161, 144, 22, 96, 194, 89, 229, 246, 201, 5, 37, 232, }, { 218, 214, 54, 208, 113, 161, 151, 118, 249, 242, 190, 232, 83, 193, 82, 43, }, { 25, 45, 202, 55, 40, 31, 213, 136, 53, 161, 215, 126, 190, 124, 4, 181, }, { 219, 112, 93, 196, 193, 5, 88, 67, 142, 167, 18, 94, 162, 20, 148, 38, }, { 30, 217, 24, 91, 190, 229, 253, 3, 179, 201, 21, 250, 44, 18, 19, 150, }, { 23, 6, 173, 239, 199, 40, 133, 93, 250, 113, 144, 181, 89, 160, 42, 243, }, { 74, 184, 55, 193, 237, 44, 27, 223, 227, 35, 57, 146, 15, 176, 68, 180, }, { 10, 246, 8, 136, 106, 226, 234, 1, 208, 71, 178, 86, 165, 14, 176, 114, }, { 217, 255, 139, 236, 98, 142, 5, 41, 96, 13, 137, 241, 131, 125, 219, 60, }, { 137, 67, 203, 38, 180, 146, 89, 33, 47, 112, 80, 4, 226, 13, 18, 42, }, { 120, 226, 96, 175, 189, 18, 114, 12, 137, 162, 84, 110, 176, 72, 76, 29, }, { 118, 201, 7, 119, 82, 37, 34, 217, 70, 114, 19, 165, 87, 148, 98, 91, }, { 39, 211, 44, 169, 52, 157, 177, 228, 126, 90, 102, 230, 199, 49, 109, 64, }, { 24, 139, 161, 35, 152, 187, 26, 189, 66, 244, 123, 200, 79, 169, 194, 184, }, { 35, 14, 67, 249, 177, 72, 11, 48, 97, 205, 147, 123, 133, 227, 243, 116, }, { 242, 136, 22, 181, 26, 175, 185, 114, 63, 45, 51, 115, 130, 249, 215, 32, }, { 149, 21, 5, 85, 169, 252, 249, 72, 114, 19, 222, 81, 239, 118, 78, 166, }, { 213, 91, 58, 28, 46, 50, 8, 150, 65, 119, 85, 149, 69, 200, 186, 96, }, { 169, 100, 53, 227, 22, 245, 192, 78, 215, 66, 244, 102, 183, 82, 104, 73, }, { 132, 65, 17, 194, 72, 138, 155, 171, 121, 95, 32, 214, 213, 109, 181, 123, }, { 225, 83, 212, 10, 88, 82, 134, 251, 218, 203, 86, 91, 153, 139, 99, 231, }, { 29, 240, 165, 103, 173, 202, 111, 92, 42, 54, 34, 227, 252, 174, 154, 129, }, { 147, 71, 188, 45, 143, 162, 30, 246, 131, 46, 176, 99, 140, 205, 159, 136, }, { 40, 94, 32, 101, 107, 14, 46, 4, 198, 223, 141, 155, 209, 56, 133, 11, }, { 198, 128, 248, 163, 108, 207, 55, 31, 164, 145, 48, 189, 94, 186, 14, 167, }, { 123, 203, 221, 147, 174, 61, 224, 83, 16, 93, 99, 119, 96, 244, 197, 10, }, { 101, 18, 197, 200, 16, 216, 29, 80, 163, 148, 118, 141, 76, 230, 214, 156, }, { 117, 224, 186, 75, 65, 10, 176, 134, 223, 141, 36, 188, 135, 40, 235, 76, }, { 124, 63, 15, 255, 56, 199, 200, 216, 150, 53, 161, 243, 242, 154, 210, 41, }, { 227, 220, 2, 34, 251, 217, 219, 145, 52, 97, 205, 244, 184, 226, 44, 253, }, { 238, 222, 216, 198, 7, 193, 25, 27, 98, 78, 189, 38, 143, 130, 139, 172, }, { 33, 129, 149, 209, 18, 195, 86, 90, 143, 103, 8, 212, 164, 138, 188, 110, }, { 142, 183, 25, 74, 34, 104, 113, 170, 169, 24, 146, 128, 112, 99, 5, 9, }, { 249, 216, 117, 41, 192, 233, 156, 70, 152, 63, 45, 147, 214, 34, 161, 95, }, { 1, 166, 107, 20, 176, 164, 207, 53, 119, 85, 172, 182, 241, 213, 198, 13, }, { 91, 236, 35, 86, 12, 90, 121, 60, 232, 111, 199, 21, 53, 171, 191, 105, }, { 145, 200, 106, 5, 44, 41, 67, 156, 109, 132, 43, 204, 173, 164, 208, 146, }, { 20, 47, 16, 211, 212, 7, 23, 2, 99, 142, 167, 172, 137, 28, 163, 228, }, { 122, 109, 182, 135, 30, 153, 47, 102, 103, 8, 207, 193, 145, 33, 3, 7, }, { 246, 85, 121, 229, 159, 122, 3, 166, 32, 186, 198, 238, 192, 43, 73, 20, }, { 177, 239, 148, 192, 142, 78, 218, 243, 149, 182, 143, 174, 248, 251, 170, 241, }, { 183, 189, 45, 184, 168, 16, 61, 77, 100, 139, 225, 156, 155, 64, 123, 223, }, { 202, 36, 73, 83, 32, 115, 58, 160, 133, 235, 236, 217, 152, 15, 111, 251, }, { 90, 74, 72, 66, 188, 254, 182, 9, 159, 58, 107, 163, 196, 126, 121, 100, }, { 248, 126, 30, 61, 112, 77, 83, 115, 239, 106, 129, 37, 39, 247, 103, 82, }, { 204, 118, 240, 43, 6, 45, 221, 30, 116, 214, 130, 235, 251, 180, 190, 213, }, { 71, 186, 237, 37, 17, 52, 217, 85, 181, 12, 73, 64, 56, 208, 227, 229, }, { 150, 60, 184, 105, 186, 211, 107, 23, 235, 236, 233, 72, 63, 202, 199, 177, }, { 110, 66, 166, 84, 202, 158, 56, 100, 4, 134, 104, 109, 24, 61, 160, 227, }, { 19, 219, 194, 191, 66, 253, 63, 137, 229, 230, 101, 40, 27, 114, 180, 199, }, { 36, 250, 145, 149, 39, 178, 35, 187, 231, 165, 81, 255, 23, 141, 228, 87, }, { 116, 70, 209, 95, 241, 174, 127, 179, 168, 216, 136, 10, 118, 253, 45, 65, }, { 9, 223, 181, 180, 121, 205, 120, 94, 73, 184, 133, 79, 117, 178, 57, 101, }, { 3, 41, 189, 60, 19, 47, 146, 95, 153, 255, 55, 25, 208, 188, 137, 23, }, { 48, 213, 129, 70, 243, 181, 52, 185, 132, 43, 246, 83, 158, 145, 71, 179, }, { 80, 188, 64, 202, 214, 28, 92, 8, 79, 125, 217, 245, 97, 112, 201, 22, }, { 79, 195, 51, 133, 216, 93, 110, 62, 139, 225, 96, 185, 188, 183, 28, 141, }, { 14, 43, 103, 216, 239, 55, 80, 213, 207, 208, 71, 203, 231, 220, 46, 70, }, { 125, 153, 100, 235, 136, 99, 7, 237, 225, 96, 13, 69, 3, 79, 20, 36, }, { 185, 150, 74, 96, 71, 39, 109, 152, 171, 91, 166, 87, 124, 156, 85, 153, }, { 55, 33, 83, 42, 101, 79, 28, 50, 2, 67, 52, 215, 12, 255, 80, 144, }, { 84, 97, 47, 154, 83, 201, 230, 220, 80, 234, 44, 104, 35, 162, 87, 34, }, { 31, 127, 115, 79, 14, 65, 50, 54, 196, 156, 185, 76, 221, 199, 213, 155, }, { 194, 93, 151, 243, 233, 26, 141, 203, 187, 6, 197, 32, 28, 104, 144, 147, }, { 51, 252, 60, 122, 224, 154, 166, 230, 29, 212, 193, 74, 78, 45, 206, 164, }, { 58, 35, 137, 206, 153, 87, 222, 184, 84, 108, 68, 5, 59, 159, 247, 193, }, { 229, 142, 187, 90, 221, 135, 60, 47, 197, 92, 163, 198, 219, 89, 253, 211, }, { 232, 140, 97, 190, 33, 159, 254, 165, 147, 115, 211, 20, 236, 57, 90, 130, }, { 18, 125, 169, 171, 242, 89, 240, 188, 146, 179, 201, 158, 234, 167, 114, 202, }, { 146, 225, 215, 57, 63, 6, 209, 195, 244, 123, 28, 213, 125, 24, 89, 133, }, { 172, 31, 49, 167, 35, 132, 181, 175, 191, 128, 173, 77, 4, 85, 48, 112, }, { 52, 8, 238, 22, 118, 96, 142, 109, 155, 188, 3, 206, 220, 67, 217, 135, }, { 82, 51, 150, 226, 117, 151, 1, 98, 161, 215, 66, 90, 64, 25, 134, 12, }, { 237, 247, 101, 250, 20, 238, 139, 68, 251, 177, 138, 63, 95, 62, 2, 187, }, { 250, 241, 200, 21, 211, 198, 14, 25, 1, 192, 26, 138, 6, 158, 40, 72, }, { 152, 23, 223, 177, 85, 228, 59, 194, 36, 60, 174, 131, 216, 22, 233, 247, }, { 223, 173, 50, 148, 68, 208, 226, 151, 145, 48, 231, 195, 224, 198, 10, 18, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 102, 59, 120, 244, 3, 247, 143, 15, 58, 107, 65, 148, 156, 90, 95, 139, }, { 47, 170, 242, 9, 253, 244, 6, 143, 64, 183, 79, 31, 67, 86, 146, 40, }, { 62, 254, 230, 158, 28, 130, 100, 108, 75, 251, 177, 152, 121, 77, 105, 245, }, }, { { 194, 69, 185, 87, 133, 168, 219, 19, 42, 63, 176, 185, 176, 11, 123, 198, }, { 149, 89, 194, 32, 124, 83, 129, 33, 100, 86, 31, 194, 31, 109, 87, 54, }, { 166, 115, 147, 99, 41, 1, 66, 110, 145, 56, 155, 147, 155, 244, 53, 157, }, { 39, 120, 72, 61, 105, 32, 151, 94, 8, 12, 139, 72, 139, 245, 111, 75, }, { 224, 200, 102, 148, 227, 117, 89, 216, 140, 202, 72, 102, 72, 229, 134, 181, }, { 134, 156, 196, 18, 73, 209, 28, 70, 165, 22, 131, 196, 131, 20, 66, 32, }, { 6, 166, 91, 21, 10, 23, 167, 230, 117, 174, 227, 91, 227, 18, 93, 145, }, { 93, 53, 150, 72, 231, 194, 112, 219, 209, 88, 73, 150, 73, 80, 203, 128, }, { 9, 122, 33, 212, 27, 211, 152, 154, 68, 102, 118, 33, 118, 63, 40, 217, }, { 120, 47, 86, 199, 136, 239, 59, 102, 75, 143, 34, 86, 34, 171, 46, 5, }, { 244, 154, 127, 234, 223, 7, 13, 201, 113, 168, 71, 127, 71, 137, 139, 85, }, { 22, 48, 145, 204, 58, 127, 136, 242, 111, 185, 239, 145, 239, 98, 135, 46, }, { 25, 236, 235, 13, 43, 187, 183, 142, 94, 113, 122, 235, 122, 79, 242, 102, }, { 236, 71, 208, 190, 247, 91, 212, 215, 102, 85, 77, 208, 77, 193, 60, 84, }, { 105, 136, 216, 71, 187, 96, 122, 226, 24, 20, 94, 216, 94, 220, 177, 221, }, { 4, 196, 211, 167, 12, 26, 123, 5, 231, 117, 3, 211, 3, 28, 215, 95, }, { 143, 230, 229, 198, 82, 2, 132, 220, 225, 112, 245, 229, 245, 43, 106, 249, }, { 48, 121, 157, 168, 80, 184, 113, 60, 46, 57, 20, 157, 20, 144, 173, 2, }, { 57, 3, 188, 124, 75, 107, 233, 166, 106, 95, 98, 188, 98, 175, 133, 219, }, { 233, 178, 71, 64, 248, 166, 193, 66, 200, 172, 62, 71, 62, 218, 174, 108, }, { 3, 83, 204, 235, 5, 234, 178, 115, 219, 87, 144, 204, 144, 9, 207, 169, }, { 207, 251, 75, 36, 146, 97, 56, 140, 137, 44, 197, 75, 197, 40, 132, 64, }, { 112, 100, 51, 74, 144, 219, 205, 108, 70, 101, 36, 51, 36, 147, 67, 187, }, { 67, 78, 98, 9, 197, 137, 14, 35, 179, 11, 160, 98, 160, 10, 33, 16, }, { 85, 126, 243, 197, 255, 246, 134, 209, 220, 178, 79, 243, 79, 104, 166, 62, }, { 44, 96, 225, 91, 116, 254, 211, 39, 222, 177, 29, 225, 29, 196, 205, 92, }, { 18, 244, 66, 107, 54, 101, 243, 247, 136, 204, 236, 66, 236, 126, 80, 113, }, { 142, 215, 161, 159, 81, 229, 234, 76, 168, 252, 133, 161, 133, 44, 47, 158, }, { 213, 68, 108, 194, 188, 48, 61, 113, 12, 10, 47, 108, 47, 110, 185, 143, }, { 61, 199, 111, 219, 71, 113, 146, 163, 141, 42, 97, 111, 97, 179, 82, 132, }, { 210, 211, 115, 142, 181, 192, 244, 7, 48, 40, 188, 115, 188, 123, 161, 121, }, { 118, 194, 104, 95, 154, 204, 106, 138, 51, 203, 199, 104, 199, 129, 30, 42, }, { 24, 221, 175, 84, 40, 92, 217, 30, 23, 253, 10, 175, 10, 72, 183, 1, }, { 53, 140, 10, 86, 95, 69, 100, 169, 128, 192, 103, 10, 103, 139, 63, 58, }, { 7, 151, 31, 76, 9, 240, 201, 118, 60, 34, 147, 31, 147, 21, 24, 246, }, { 192, 39, 49, 229, 131, 165, 7, 240, 184, 228, 80, 49, 80, 5, 241, 8, }, { 247, 201, 179, 1, 218, 237, 191, 186, 170, 255, 215, 179, 215, 128, 68, 252, }, { 184, 8, 103, 34, 11, 74, 60, 150, 243, 107, 114, 103, 114, 174, 223, 13, }, { 114, 6, 187, 248, 150, 214, 17, 143, 212, 190, 196, 187, 196, 157, 201, 117, }, { 17, 167, 142, 128, 51, 143, 65, 132, 83, 155, 124, 142, 124, 119, 159, 216, }, { 180, 135, 209, 8, 31, 100, 177, 153, 25, 244, 119, 209, 119, 138, 101, 236, }, { 255, 130, 214, 140, 194, 217, 73, 176, 167, 21, 209, 214, 209, 184, 41, 66, }, { 26, 191, 39, 230, 46, 81, 5, 253, 133, 38, 234, 39, 234, 70, 61, 207, }, { 72, 86, 203, 111, 216, 87, 74, 90, 101, 182, 54, 203, 54, 59, 131, 7, }, { 170, 252, 37, 73, 61, 47, 207, 97, 123, 167, 158, 37, 158, 208, 143, 124, }, { 88, 192, 1, 182, 232, 63, 101, 78, 127, 161, 58, 1, 58, 75, 89, 184, }, { 147, 255, 153, 53, 118, 68, 38, 199, 17, 248, 252, 153, 252, 127, 10, 167, }, { 33, 222, 19, 40, 99, 55, 48, 184, 125, 162, 104, 19, 104, 231, 50, 218, }, { 221, 15, 9, 79, 164, 4, 203, 123, 1, 224, 41, 9, 41, 86, 212, 49, }, { 96, 242, 249, 147, 160, 179, 226, 120, 92, 114, 40, 249, 40, 227, 153, 4, }, { 12, 143, 182, 42, 20, 46, 141, 15, 234, 159, 5, 182, 5, 36, 186, 225, }, { 196, 227, 226, 66, 143, 191, 124, 245, 95, 145, 83, 226, 83, 25, 38, 87, }, { 154, 133, 184, 225, 109, 151, 190, 93, 85, 158, 138, 184, 138, 64, 34, 126, }, { 92, 4, 210, 17, 228, 37, 30, 75, 152, 212, 57, 210, 57, 87, 142, 231, }, { 83, 216, 168, 208, 245, 225, 33, 55, 169, 28, 172, 168, 172, 122, 251, 175, }, { 205, 153, 195, 150, 148, 108, 228, 111, 27, 247, 37, 195, 37, 38, 14, 142, }, { 50, 27, 21, 26, 86, 181, 173, 223, 188, 226, 244, 21, 244, 158, 39, 204, }, { 27, 142, 99, 191, 45, 182, 107, 109, 204, 170, 154, 99, 154, 65, 120, 168, }, { 90, 162, 137, 4, 238, 50, 185, 173, 237, 122, 218, 137, 218, 69, 211, 118, }, { 161, 228, 140, 47, 32, 241, 139, 24, 173, 26, 8, 140, 8, 225, 45, 107, }, { 229, 61, 241, 106, 236, 136, 76, 77, 34, 51, 59, 241, 59, 254, 20, 141, }, { 60, 246, 43, 130, 68, 150, 252, 51, 196, 166, 17, 43, 17, 180, 23, 227, }, { 151, 59, 74, 146, 122, 94, 93, 194, 246, 141, 255, 74, 255, 99, 221, 248, }, { 206, 202, 15, 125, 145, 134, 86, 28, 192, 160, 181, 15, 181, 47, 193, 39, }, { 109, 76, 11, 224, 183, 122, 1, 231, 255, 97, 93, 11, 93, 192, 102, 130, }, { 98, 144, 113, 33, 166, 190, 62, 155, 206, 169, 200, 113, 200, 237, 19, 202, }, { 245, 171, 59, 179, 220, 224, 99, 89, 56, 36, 55, 59, 55, 142, 206, 50, }, { 183, 212, 29, 227, 26, 142, 3, 234, 194, 163, 231, 29, 231, 131, 170, 69, }, { 226, 170, 238, 38, 229, 120, 133, 59, 30, 17, 168, 238, 168, 235, 12, 123, }, { 65, 44, 234, 187, 195, 132, 210, 192, 33, 208, 64, 234, 64, 4, 171, 222, }, { 113, 85, 119, 19, 147, 60, 163, 252, 15, 233, 84, 119, 84, 148, 6, 220, }, { 249, 36, 141, 153, 200, 206, 238, 86, 210, 187, 50, 141, 50, 170, 116, 211, }, { 234, 225, 139, 171, 253, 76, 115, 49, 19, 251, 174, 139, 174, 211, 97, 197, }, { 174, 56, 246, 238, 49, 53, 180, 100, 156, 210, 157, 246, 157, 204, 88, 35, }, { 228, 12, 181, 51, 239, 111, 34, 221, 107, 191, 75, 181, 75, 249, 81, 234, }, { 11, 24, 169, 102, 29, 222, 68, 121, 214, 189, 150, 169, 150, 49, 162, 23, }, { 222, 92, 197, 164, 161, 238, 121, 8, 218, 183, 185, 197, 185, 95, 27, 152, }, { 240, 94, 172, 77, 211, 29, 118, 204, 150, 221, 68, 172, 68, 149, 92, 10, }, { 212, 117, 40, 155, 191, 215, 83, 225, 69, 134, 95, 40, 95, 105, 252, 232, }, { 181, 182, 149, 81, 28, 131, 223, 9, 80, 120, 7, 149, 7, 141, 32, 139, }, { 164, 17, 27, 209, 47, 12, 158, 141, 3, 227, 123, 27, 123, 250, 191, 83, }, { 186, 106, 239, 144, 13, 71, 224, 117, 97, 176, 146, 239, 146, 160, 85, 195, }, { 232, 131, 3, 25, 251, 65, 175, 210, 129, 32, 78, 3, 78, 221, 235, 11, }, { 14, 237, 62, 152, 18, 35, 81, 236, 120, 68, 229, 62, 229, 42, 48, 47, }, { 156, 35, 227, 244, 103, 128, 25, 187, 32, 48, 105, 227, 105, 82, 127, 239, }, { 49, 72, 217, 241, 83, 95, 31, 172, 103, 181, 100, 217, 100, 151, 232, 101, }, { 121, 30, 18, 158, 139, 8, 85, 246, 2, 3, 82, 18, 82, 172, 107, 98, }, { 252, 209, 26, 103, 199, 51, 251, 195, 124, 66, 65, 26, 65, 177, 230, 235, }, { 77, 163, 92, 145, 215, 170, 95, 207, 203, 79, 69, 92, 69, 32, 17, 63, }, { 219, 169, 82, 90, 174, 19, 108, 157, 116, 78, 202, 82, 202, 68, 137, 160, }, { 117, 145, 164, 180, 159, 38, 216, 249, 232, 156, 87, 164, 87, 136, 209, 131, }, { 104, 185, 156, 30, 184, 135, 20, 114, 81, 152, 46, 156, 46, 219, 244, 186, }, { 21, 99, 93, 39, 63, 149, 58, 129, 180, 238, 127, 93, 127, 107, 72, 135, }, { 169, 175, 233, 162, 56, 197, 125, 18, 160, 240, 14, 233, 14, 217, 64, 213, }, { 1, 49, 68, 89, 3, 231, 110, 144, 73, 140, 112, 68, 112, 7, 69, 103, }, { 35, 188, 155, 154, 101, 58, 236, 91, 239, 121, 136, 155, 136, 233, 184, 20, }, { 178, 33, 138, 29, 21, 115, 22, 127, 108, 90, 148, 138, 148, 152, 56, 125, }, { 110, 31, 199, 11, 178, 144, 179, 148, 36, 54, 205, 199, 205, 201, 169, 43, }, { 242, 60, 36, 255, 213, 16, 170, 47, 4, 6, 164, 36, 164, 155, 214, 196, }, { 59, 97, 52, 206, 77, 102, 53, 69, 248, 132, 130, 52, 130, 161, 15, 21, }, { 82, 233, 236, 137, 246, 6, 79, 167, 224, 144, 220, 236, 220, 125, 190, 200, }, { 101, 7, 110, 109, 175, 78, 247, 237, 242, 139, 91, 110, 91, 248, 11, 60, }, { 75, 5, 7, 132, 221, 189, 248, 41, 190, 225, 166, 7, 166, 50, 76, 174, }, { 56, 50, 248, 37, 72, 140, 135, 54, 35, 211, 18, 248, 18, 168, 192, 188, }, { 42, 198, 186, 78, 126, 233, 116, 193, 171, 31, 254, 186, 254, 214, 144, 205, }, { 145, 157, 17, 135, 112, 73, 250, 36, 131, 35, 28, 17, 28, 113, 128, 105, }, { 214, 23, 160, 41, 185, 218, 143, 2, 215, 93, 191, 160, 191, 103, 118, 38, }, { 253, 224, 94, 62, 196, 212, 149, 83, 53, 206, 49, 94, 49, 182, 163, 140, }, { 248, 21, 201, 192, 203, 41, 128, 198, 155, 55, 66, 201, 66, 173, 49, 180, }, { 140, 181, 41, 45, 87, 232, 54, 175, 58, 39, 101, 41, 101, 34, 165, 80, }, { 80, 139, 100, 59, 240, 11, 147, 68, 114, 75, 60, 100, 60, 115, 52, 6, }, { 127, 184, 73, 139, 129, 31, 242, 16, 119, 173, 177, 73, 177, 190, 54, 243, }, { 89, 241, 69, 239, 235, 216, 11, 222, 54, 45, 74, 69, 74, 76, 28, 223, }, { 8, 75, 101, 141, 24, 52, 246, 10, 13, 234, 6, 101, 6, 56, 109, 190, }, { 217, 203, 218, 232, 168, 30, 176, 126, 230, 149, 42, 218, 42, 74, 3, 110, }, { 162, 183, 64, 196, 37, 27, 57, 107, 118, 77, 152, 64, 152, 232, 226, 194, }, { 251, 70, 5, 43, 206, 195, 50, 181, 64, 96, 210, 5, 210, 164, 254, 29, }, { 28, 25, 124, 243, 36, 70, 162, 27, 240, 136, 9, 124, 9, 84, 96, 94, }, { 41, 149, 118, 165, 123, 3, 198, 178, 112, 72, 110, 118, 110, 223, 95, 100, }, { 211, 226, 55, 215, 182, 39, 154, 151, 121, 164, 204, 55, 204, 124, 228, 30, }, { 111, 46, 131, 82, 177, 119, 221, 4, 109, 186, 189, 131, 189, 206, 236, 76, }, { 71, 138, 177, 174, 201, 147, 117, 38, 84, 126, 163, 177, 163, 22, 246, 79, }, { 84, 79, 183, 156, 252, 17, 232, 65, 149, 62, 63, 183, 63, 111, 227, 89, }, { 159, 112, 47, 31, 98, 106, 171, 200, 251, 103, 249, 47, 249, 91, 176, 70, }, { 23, 1, 213, 149, 57, 152, 230, 98, 38, 53, 159, 213, 159, 101, 194, 73, }, { 225, 249, 34, 205, 224, 146, 55, 72, 197, 70, 56, 34, 56, 226, 195, 210, }, { 124, 235, 133, 96, 132, 245, 64, 99, 172, 250, 33, 133, 33, 183, 249, 90, }, { 70, 187, 245, 247, 202, 116, 27, 182, 29, 242, 211, 245, 211, 17, 179, 40, }, { 188, 204, 180, 133, 7, 80, 71, 147, 20, 30, 113, 180, 113, 178, 8, 82, }, { 197, 210, 166, 27, 140, 88, 18, 101, 22, 29, 35, 166, 35, 30, 99, 48, }, { 34, 141, 223, 195, 102, 221, 130, 203, 166, 245, 248, 223, 248, 238, 253, 115, }, { 190, 174, 60, 55, 1, 93, 155, 112, 134, 197, 145, 60, 145, 188, 130, 156, }, { 150, 10, 14, 203, 121, 185, 51, 82, 191, 1, 143, 14, 143, 100, 152, 159, }, { 126, 137, 13, 210, 130, 248, 156, 128, 62, 33, 193, 13, 193, 185, 115, 148, }, { 29, 40, 56, 170, 39, 161, 204, 139, 185, 4, 121, 56, 121, 83, 37, 57, }, { 185, 57, 35, 123, 8, 173, 82, 6, 186, 231, 2, 35, 2, 169, 154, 106, }, { 157, 18, 167, 173, 100, 103, 119, 43, 105, 188, 25, 167, 25, 85, 58, 136, }, { 173, 107, 58, 5, 52, 223, 6, 23, 71, 133, 13, 58, 13, 197, 151, 138, }, { 108, 125, 79, 185, 180, 157, 111, 119, 182, 237, 45, 79, 45, 199, 35, 229, }, { 133, 207, 8, 249, 76, 59, 174, 53, 126, 65, 19, 8, 19, 29, 141, 137, }, { 209, 128, 191, 101, 176, 42, 70, 116, 235, 127, 44, 191, 44, 114, 110, 208, }, { 30, 123, 244, 65, 34, 75, 126, 248, 98, 83, 233, 244, 233, 90, 234, 144, }, { 165, 32, 95, 136, 44, 235, 240, 29, 74, 111, 11, 95, 11, 253, 250, 52, }, { 230, 110, 61, 129, 233, 98, 254, 62, 249, 100, 171, 61, 171, 247, 219, 36, }, { 46, 2, 105, 233, 114, 243, 15, 196, 76, 106, 253, 105, 253, 202, 71, 146, }, { 95, 87, 30, 250, 225, 207, 172, 56, 67, 131, 169, 30, 169, 94, 65, 78, }, { 97, 195, 189, 202, 163, 84, 140, 232, 21, 254, 88, 189, 88, 228, 220, 99, }, { 131, 105, 83, 236, 70, 44, 9, 211, 11, 239, 240, 83, 240, 15, 208, 24, }, { 68, 217, 125, 69, 204, 121, 199, 85, 143, 41, 51, 125, 51, 31, 57, 230, }, { 177, 114, 70, 246, 16, 153, 164, 12, 183, 13, 4, 70, 4, 145, 247, 212, }, { 239, 20, 28, 85, 242, 177, 102, 164, 189, 2, 221, 28, 221, 200, 243, 253, }, { 130, 88, 23, 181, 69, 203, 103, 67, 66, 99, 128, 23, 128, 8, 149, 127, }, { 54, 223, 198, 189, 90, 175, 214, 218, 91, 151, 247, 198, 247, 130, 240, 147, }, { 163, 134, 4, 157, 38, 252, 87, 251, 63, 193, 232, 4, 232, 239, 167, 165, }, { 175, 9, 178, 183, 50, 210, 218, 244, 213, 94, 237, 178, 237, 203, 29, 68, }, { 136, 113, 250, 138, 91, 242, 77, 170, 221, 82, 102, 250, 102, 62, 114, 15, }, { 137, 64, 190, 211, 88, 21, 35, 58, 148, 222, 22, 190, 22, 57, 55, 104, }, { 15, 220, 122, 193, 17, 196, 63, 124, 49, 200, 149, 122, 149, 45, 117, 72, }, { 31, 74, 176, 24, 33, 172, 16, 104, 43, 223, 153, 176, 153, 93, 175, 247, }, { 66, 127, 38, 80, 198, 110, 96, 179, 250, 135, 208, 38, 208, 13, 100, 119, }, { 246, 248, 247, 88, 217, 10, 209, 42, 227, 115, 167, 247, 167, 135, 1, 155, }, { 223, 109, 129, 253, 162, 9, 23, 152, 147, 59, 201, 129, 201, 88, 94, 255, }, { 58, 80, 112, 151, 78, 129, 91, 213, 177, 8, 242, 112, 242, 166, 74, 114, }, { 193, 22, 117, 188, 128, 66, 105, 96, 241, 104, 32, 117, 32, 2, 180, 111, }, { 40, 164, 50, 252, 120, 228, 168, 34, 57, 196, 30, 50, 30, 216, 26, 3, }, { 241, 111, 232, 20, 208, 250, 24, 92, 223, 81, 52, 232, 52, 146, 25, 109, }, { 203, 63, 152, 131, 158, 123, 67, 137, 110, 89, 198, 152, 198, 52, 83, 31, }, { 146, 206, 221, 108, 117, 163, 72, 87, 88, 116, 140, 221, 140, 120, 79, 192, }, { 135, 173, 128, 75, 74, 54, 114, 214, 236, 154, 243, 128, 243, 19, 7, 71, }, { 231, 95, 121, 216, 234, 133, 144, 174, 176, 232, 219, 121, 219, 240, 158, 67, }, { 62, 148, 163, 48, 66, 155, 32, 208, 86, 125, 241, 163, 241, 186, 157, 45, }, { 250, 119, 65, 114, 205, 36, 92, 37, 9, 236, 162, 65, 162, 163, 187, 122, }, { 13, 190, 242, 115, 23, 201, 227, 159, 163, 19, 117, 242, 117, 35, 255, 134, }, { 81, 186, 32, 98, 243, 236, 253, 212, 59, 199, 76, 32, 76, 116, 113, 97, }, { 182, 229, 89, 186, 25, 105, 109, 122, 139, 47, 151, 89, 151, 132, 239, 34, }, { 123, 124, 154, 44, 141, 5, 137, 21, 144, 216, 178, 154, 178, 162, 225, 172, }, { 116, 160, 224, 237, 156, 193, 182, 105, 161, 16, 39, 224, 39, 143, 148, 228, }, { 63, 165, 231, 105, 65, 124, 78, 64, 31, 241, 129, 231, 129, 189, 216, 74, }, { 47, 51, 45, 176, 113, 20, 97, 84, 5, 230, 141, 45, 141, 205, 2, 245, }, { 125, 218, 193, 57, 135, 18, 46, 243, 229, 118, 81, 193, 81, 176, 188, 61, }, { 187, 91, 171, 201, 14, 160, 142, 229, 40, 60, 226, 171, 226, 167, 16, 164, }, { 73, 103, 143, 54, 219, 176, 36, 202, 44, 58, 70, 143, 70, 60, 198, 96, }, { 43, 247, 254, 23, 125, 14, 26, 81, 226, 147, 142, 254, 142, 209, 213, 170, }, { 153, 214, 116, 10, 104, 125, 12, 46, 142, 201, 26, 116, 26, 73, 237, 215, }, { 2, 98, 136, 178, 6, 13, 220, 227, 146, 219, 224, 136, 224, 14, 138, 206, }, { 55, 238, 130, 228, 89, 72, 184, 74, 18, 27, 135, 130, 135, 133, 181, 244, }, { 179, 16, 206, 68, 22, 148, 120, 239, 37, 214, 228, 206, 228, 159, 125, 26, }, { 115, 55, 255, 161, 149, 49, 127, 31, 157, 50, 180, 255, 180, 154, 140, 18, }, { 100, 54, 42, 52, 172, 169, 153, 125, 187, 7, 43, 42, 43, 255, 78, 91, }, { 220, 62, 77, 22, 167, 227, 165, 235, 72, 108, 89, 77, 89, 81, 145, 86, }, { 216, 250, 158, 177, 171, 249, 222, 238, 175, 25, 90, 158, 90, 77, 70, 9, }, { 201, 93, 16, 49, 152, 118, 159, 106, 252, 130, 38, 16, 38, 58, 217, 209, }, { 171, 205, 97, 16, 62, 200, 161, 241, 50, 43, 238, 97, 238, 215, 202, 27, }, { 51, 42, 81, 67, 85, 82, 195, 79, 245, 110, 132, 81, 132, 153, 98, 171, }, { 107, 234, 80, 245, 189, 109, 166, 1, 138, 207, 190, 80, 190, 210, 59, 19, }, { 204, 168, 135, 207, 151, 139, 138, 255, 82, 123, 85, 135, 85, 33, 75, 233, }, { 144, 172, 85, 222, 115, 174, 148, 180, 202, 175, 108, 85, 108, 118, 197, 14, }, { 208, 177, 251, 60, 179, 205, 40, 228, 162, 243, 92, 251, 92, 117, 43, 183, }, { 172, 90, 126, 92, 55, 56, 104, 135, 14, 9, 125, 126, 125, 194, 210, 237, }, { 191, 159, 120, 110, 2, 186, 245, 224, 207, 73, 225, 120, 225, 187, 199, 251, }, { 218, 152, 22, 3, 173, 244, 2, 13, 61, 194, 186, 22, 186, 67, 204, 199, }, { 167, 66, 215, 58, 42, 230, 44, 254, 216, 180, 235, 215, 235, 243, 112, 250, }, { 94, 102, 90, 163, 226, 40, 194, 168, 10, 15, 217, 90, 217, 89, 4, 41, }, { 152, 231, 48, 83, 107, 154, 98, 190, 199, 69, 106, 48, 106, 78, 168, 176, }, { 122, 77, 222, 117, 142, 226, 231, 133, 217, 84, 194, 222, 194, 165, 164, 203, }, { 19, 197, 6, 50, 53, 130, 157, 103, 193, 64, 156, 6, 156, 121, 21, 22, }, { 106, 219, 20, 172, 190, 138, 200, 145, 195, 67, 206, 20, 206, 213, 126, 116, }, { 64, 29, 174, 226, 192, 99, 188, 80, 104, 92, 48, 174, 48, 3, 238, 185, }, { 168, 158, 173, 251, 59, 34, 19, 130, 233, 124, 126, 173, 126, 222, 5, 178, }, { 91, 147, 205, 93, 237, 213, 215, 61, 164, 246, 170, 205, 170, 66, 150, 17, }, { 235, 208, 207, 242, 254, 171, 29, 161, 90, 119, 222, 207, 222, 212, 36, 162, }, { 102, 84, 162, 134, 170, 164, 69, 158, 41, 220, 203, 162, 203, 241, 196, 149, }, { 86, 45, 63, 46, 250, 28, 52, 162, 7, 229, 223, 63, 223, 97, 105, 151, }, { 129, 11, 219, 94, 64, 33, 213, 48, 153, 52, 16, 219, 16, 1, 90, 214, }, { 119, 243, 44, 6, 153, 43, 4, 26, 122, 71, 183, 44, 183, 134, 91, 77, }, { 87, 28, 123, 119, 249, 251, 90, 50, 78, 105, 175, 123, 175, 102, 44, 240, }, { 78, 240, 144, 122, 210, 64, 237, 188, 16, 24, 213, 144, 213, 41, 222, 150, }, { 141, 132, 109, 116, 84, 15, 88, 63, 115, 171, 21, 109, 21, 37, 224, 55, }, { 176, 67, 2, 175, 19, 126, 202, 156, 254, 129, 116, 2, 116, 150, 178, 179, }, { 243, 13, 96, 166, 214, 247, 196, 191, 77, 138, 212, 96, 212, 156, 147, 163, }, { 148, 104, 134, 121, 127, 180, 239, 177, 45, 218, 111, 134, 111, 106, 18, 81, }, { 32, 239, 87, 113, 96, 208, 94, 40, 52, 46, 24, 87, 24, 224, 119, 189, }, { 36, 43, 132, 214, 108, 202, 37, 45, 211, 91, 27, 132, 27, 252, 160, 226, }, { 215, 38, 228, 112, 186, 61, 225, 146, 158, 209, 207, 228, 207, 96, 51, 65, }, { 20, 82, 25, 126, 60, 114, 84, 17, 253, 98, 15, 25, 15, 108, 13, 224, }, { 158, 65, 107, 70, 97, 141, 197, 88, 178, 235, 137, 107, 137, 92, 245, 33, }, { 5, 245, 151, 254, 15, 253, 21, 149, 174, 249, 115, 151, 115, 27, 146, 56, }, { 198, 129, 106, 240, 137, 178, 160, 22, 205, 74, 179, 106, 179, 23, 172, 153, }, { 237, 118, 148, 231, 244, 188, 186, 71, 47, 217, 61, 148, 61, 198, 121, 51, }, { 200, 108, 84, 104, 155, 145, 241, 250, 181, 14, 86, 84, 86, 61, 156, 182, }, { 155, 180, 252, 184, 110, 112, 208, 205, 28, 18, 250, 252, 250, 71, 103, 25, }, { 189, 253, 240, 220, 4, 183, 41, 3, 93, 146, 1, 240, 1, 181, 77, 53, }, { 132, 254, 76, 160, 79, 220, 192, 165, 55, 205, 99, 76, 99, 26, 200, 238, }, { 195, 116, 253, 14, 134, 79, 181, 131, 99, 179, 192, 253, 192, 12, 62, 161, }, { 202, 14, 220, 218, 157, 156, 45, 25, 39, 213, 182, 220, 182, 51, 22, 120, }, { 138, 19, 114, 56, 93, 255, 145, 73, 79, 137, 134, 114, 134, 48, 248, 193, }, { 52, 189, 78, 15, 92, 162, 10, 57, 201, 76, 23, 78, 23, 140, 122, 93, }, { 38, 73, 12, 100, 106, 199, 249, 206, 65, 128, 251, 12, 251, 242, 42, 44, }, { 16, 150, 202, 217, 48, 104, 47, 20, 26, 23, 12, 202, 12, 112, 218, 191, }, { 37, 26, 192, 143, 111, 45, 75, 189, 154, 215, 107, 192, 107, 251, 229, 133, }, { 227, 155, 170, 127, 230, 159, 235, 171, 87, 157, 216, 170, 216, 236, 73, 28, }, { 99, 161, 53, 120, 165, 89, 80, 11, 135, 37, 184, 53, 184, 234, 86, 173, }, { 10, 41, 237, 63, 30, 57, 42, 233, 159, 49, 230, 237, 230, 54, 231, 112, }, { 79, 193, 212, 35, 209, 167, 131, 44, 89, 148, 165, 212, 165, 46, 155, 241, }, { 139, 34, 54, 97, 94, 24, 255, 217, 6, 5, 246, 54, 246, 55, 189, 166, }, { 199, 176, 46, 169, 138, 85, 206, 134, 132, 198, 195, 46, 195, 16, 233, 254, }, { 103, 101, 230, 223, 169, 67, 43, 14, 96, 80, 187, 230, 187, 246, 129, 242, }, { 45, 81, 165, 2, 119, 25, 189, 183, 151, 61, 109, 165, 109, 195, 136, 59, }, { 254, 179, 146, 213, 193, 62, 39, 32, 238, 153, 161, 146, 161, 191, 108, 37, }, { 69, 232, 57, 28, 207, 158, 169, 197, 198, 165, 67, 57, 67, 24, 124, 129, }, { 160, 213, 200, 118, 35, 22, 229, 136, 228, 150, 120, 200, 120, 230, 104, 12, }, { 128, 58, 159, 7, 67, 198, 187, 160, 208, 184, 96, 159, 96, 6, 31, 177, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 74, 52, 67, 221, 222, 90, 150, 185, 247, 109, 214, 67, 214, 53, 9, 201, }, { 238, 37, 88, 12, 241, 86, 8, 52, 244, 142, 173, 88, 173, 207, 182, 154, }, { 76, 146, 24, 200, 212, 77, 49, 95, 130, 195, 53, 24, 53, 39, 84, 88, }, }, { { 171, 218, 127, 147, 117, 99, 59, 34, 183, 64, 166, 132, 194, 34, 9, 218, }, { 187, 217, 244, 166, 193, 27, 245, 225, 84, 162, 197, 36, 149, 225, 221, 217, }, { 131, 60, 14, 2, 132, 175, 3, 231, 34, 54, 176, 87, 166, 231, 8, 60, }, { 13, 140, 3, 64, 237, 196, 96, 208, 202, 15, 162, 114, 39, 208, 195, 140, }, { 58, 221, 211, 234, 178, 187, 159, 38, 82, 25, 65, 103, 224, 38, 46, 221, }, { 74, 212, 228, 97, 56, 16, 176, 42, 190, 242, 171, 129, 134, 42, 71, 212, }, { 232, 242, 202, 46, 141, 169, 57, 152, 139, 100, 199, 95, 6, 152, 184, 242, }, { 235, 214, 22, 71, 224, 64, 133, 168, 189, 78, 233, 65, 93, 168, 223, 214, }, { 143, 172, 248, 101, 243, 141, 182, 39, 250, 158, 8, 47, 9, 39, 87, 172, }, { 190, 181, 83, 29, 118, 227, 242, 177, 14, 220, 183, 6, 120, 177, 116, 181, }, { 15, 180, 42, 14, 26, 203, 9, 240, 238, 130, 150, 102, 244, 240, 56, 180, }, { 109, 134, 191, 254, 211, 23, 129, 31, 197, 6, 43, 52, 22, 31, 126, 134, }, { 10, 216, 141, 181, 173, 51, 14, 160, 180, 252, 228, 68, 25, 160, 145, 216, }, { 41, 250, 132, 182, 107, 42, 237, 213, 135, 209, 12, 217, 236, 213, 157, 250, }, { 23, 87, 5, 192, 244, 143, 160, 179, 157, 17, 37, 150, 105, 179, 134, 87, }, { 176, 29, 140, 52, 246, 206, 46, 81, 242, 249, 59, 106, 4, 81, 208, 29, }, { 197, 120, 28, 4, 203, 157, 6, 13, 68, 108, 163, 174, 143, 13, 16, 120, }, { 76, 156, 159, 179, 226, 1, 11, 74, 210, 166, 247, 189, 48, 74, 137, 156, }, { 195, 48, 103, 214, 17, 140, 189, 109, 40, 56, 255, 146, 57, 109, 222, 48, }, { 181, 113, 43, 143, 65, 54, 41, 1, 168, 135, 73, 72, 233, 1, 121, 113, }, { 116, 121, 101, 23, 167, 181, 253, 76, 164, 50, 130, 206, 3, 76, 92, 121, }, { 148, 107, 11, 194, 112, 32, 163, 84, 191, 39, 149, 193, 207, 84, 142, 107, }, { 29, 143, 136, 117, 89, 188, 174, 19, 41, 237, 193, 210, 112, 19, 23, 143, }, { 37, 106, 114, 209, 28, 8, 88, 21, 95, 121, 180, 161, 67, 21, 194, 106, }, { 72, 236, 205, 47, 207, 31, 217, 10, 154, 127, 159, 149, 85, 10, 188, 236, }, { 218, 207, 189, 63, 101, 46, 193, 62, 73, 12, 86, 104, 44, 62, 252, 207, }, { 221, 155, 51, 202, 37, 217, 175, 78, 55, 255, 16, 94, 18, 78, 174, 155, }, { 233, 238, 63, 9, 23, 79, 236, 136, 153, 195, 221, 85, 142, 136, 36, 238, }, { 234, 202, 227, 96, 122, 166, 80, 184, 175, 233, 243, 75, 213, 184, 67, 202, }, { 115, 45, 235, 226, 231, 66, 147, 60, 218, 193, 196, 248, 61, 60, 14, 45, }, { 46, 174, 10, 67, 43, 221, 131, 165, 249, 34, 74, 239, 210, 165, 207, 174, }, { 245, 125, 66, 91, 212, 21, 151, 139, 162, 137, 6, 141, 118, 139, 175, 125, }, { 38, 78, 174, 184, 113, 225, 228, 37, 105, 83, 154, 191, 24, 37, 165, 78, }, { 208, 23, 48, 138, 200, 29, 207, 158, 253, 240, 178, 44, 53, 158, 109, 23, }, { 196, 100, 233, 35, 81, 123, 211, 29, 86, 203, 185, 164, 7, 29, 140, 100, }, { 243, 53, 57, 137, 14, 4, 44, 235, 206, 221, 90, 177, 192, 235, 97, 53, }, { 123, 205, 79, 25, 189, 126, 244, 188, 74, 176, 20, 168, 247, 188, 100, 205, }, { 77, 128, 106, 148, 120, 231, 222, 90, 192, 1, 237, 183, 184, 90, 21, 128, }, { 69, 96, 206, 111, 34, 219, 185, 218, 80, 112, 61, 231, 114, 218, 127, 96, }, { 169, 226, 86, 221, 130, 108, 82, 2, 147, 205, 146, 144, 17, 2, 242, 226, }, { 94, 167, 61, 200, 161, 118, 172, 169, 21, 201, 160, 9, 180, 169, 166, 167, }, { 216, 247, 148, 113, 146, 33, 168, 30, 109, 129, 98, 124, 255, 30, 7, 247, }, { 126, 161, 232, 162, 10, 134, 243, 236, 16, 206, 102, 138, 26, 236, 205, 161, }, { 242, 41, 204, 174, 148, 226, 249, 251, 220, 122, 64, 187, 72, 251, 253, 41, }, { 144, 27, 89, 94, 93, 62, 113, 20, 247, 254, 253, 233, 170, 20, 187, 27, }, { 119, 93, 185, 126, 202, 92, 65, 124, 146, 24, 172, 208, 88, 124, 59, 93, }, { 83, 43, 62, 136, 76, 178, 204, 121, 223, 198, 2, 123, 147, 121, 101, 43, }, { 229, 126, 201, 110, 96, 109, 89, 72, 65, 107, 101, 45, 33, 72, 123, 126, }, { 73, 240, 56, 8, 85, 249, 12, 26, 136, 216, 133, 159, 221, 26, 32, 240, }, { 152, 251, 253, 165, 7, 2, 22, 148, 103, 143, 45, 185, 96, 148, 209, 251, }, { 19, 39, 87, 92, 217, 145, 114, 243, 213, 200, 77, 190, 12, 243, 179, 39, }, { 67, 40, 181, 189, 248, 202, 2, 186, 60, 36, 97, 219, 196, 186, 177, 40, }, { 220, 135, 198, 237, 191, 63, 122, 94, 37, 88, 10, 84, 154, 94, 50, 135, }, { 199, 64, 53, 74, 60, 146, 111, 45, 96, 225, 151, 186, 92, 45, 235, 64, }, { 160, 30, 7, 1, 66, 182, 224, 146, 17, 27, 88, 202, 83, 146, 4, 30, }, { 204, 132, 77, 216, 11, 71, 180, 157, 198, 186, 105, 244, 205, 157, 230, 132, }, { 20, 115, 217, 169, 153, 102, 28, 131, 171, 59, 11, 136, 50, 131, 225, 115, }, { 82, 55, 203, 175, 214, 84, 25, 105, 205, 97, 24, 113, 27, 105, 249, 55, }, { 47, 178, 255, 100, 177, 59, 86, 181, 235, 133, 80, 229, 90, 181, 83, 178, }, { 71, 88, 231, 33, 213, 212, 208, 250, 116, 253, 9, 243, 161, 250, 132, 88, }, { 166, 86, 124, 211, 152, 167, 91, 242, 125, 79, 4, 246, 229, 242, 202, 86, }, { 95, 187, 200, 239, 59, 144, 121, 185, 7, 110, 186, 3, 60, 185, 58, 187, }, { 227, 54, 178, 188, 186, 124, 226, 40, 45, 63, 57, 17, 151, 40, 181, 54, }, { 184, 253, 40, 207, 172, 242, 73, 209, 98, 136, 235, 58, 206, 209, 186, 253, }, { 167, 74, 137, 244, 2, 65, 142, 226, 111, 232, 30, 252, 109, 226, 86, 74, }, { 192, 20, 187, 191, 124, 101, 1, 93, 30, 18, 209, 140, 98, 93, 185, 20, }, { 35, 34, 9, 3, 198, 25, 227, 117, 51, 45, 232, 157, 245, 117, 12, 34, }, { 42, 222, 88, 223, 6, 195, 81, 229, 177, 251, 34, 199, 183, 229, 250, 222, }, { 98, 50, 149, 240, 201, 220, 136, 239, 43, 132, 189, 82, 226, 239, 70, 50, }, { 125, 133, 52, 203, 103, 111, 79, 220, 38, 228, 72, 148, 65, 220, 170, 133, }, { 49, 25, 171, 120, 133, 110, 68, 150, 244, 66, 191, 41, 113, 150, 35, 25, }, { 48, 5, 94, 95, 31, 136, 145, 134, 230, 229, 165, 35, 249, 134, 191, 5, }, { 193, 8, 78, 152, 230, 131, 212, 77, 12, 181, 203, 134, 234, 77, 37, 8, }, { 32, 6, 213, 106, 171, 240, 95, 69, 5, 7, 198, 131, 174, 69, 107, 6, }, { 138, 192, 95, 222, 68, 117, 177, 119, 160, 224, 122, 13, 228, 119, 254, 192, }, { 215, 67, 190, 127, 136, 234, 161, 238, 131, 3, 244, 26, 11, 238, 63, 67, }, { 61, 137, 93, 31, 242, 76, 241, 86, 44, 234, 7, 81, 222, 86, 124, 137, }, { 191, 169, 166, 58, 236, 5, 39, 161, 28, 123, 173, 12, 240, 161, 232, 169, }, { 198, 92, 192, 109, 166, 116, 186, 61, 114, 70, 141, 176, 212, 61, 119, 92, }, { 114, 49, 30, 197, 125, 164, 70, 44, 200, 102, 222, 242, 181, 44, 146, 49, }, { 219, 211, 72, 24, 255, 200, 20, 46, 91, 171, 76, 98, 164, 46, 96, 211, }, { 21, 111, 44, 142, 3, 128, 201, 147, 185, 156, 17, 130, 186, 147, 125, 111, }, { 153, 231, 8, 130, 157, 228, 195, 132, 117, 40, 55, 179, 232, 132, 77, 231, }, { 75, 200, 17, 70, 162, 246, 101, 58, 172, 85, 177, 139, 14, 58, 219, 200, }, { 52, 117, 12, 195, 50, 150, 67, 198, 174, 60, 205, 11, 156, 198, 138, 117, }, { 96, 10, 188, 190, 62, 211, 225, 207, 15, 9, 137, 70, 49, 207, 189, 10, }, { 146, 35, 112, 16, 170, 49, 24, 52, 211, 115, 201, 253, 121, 52, 64, 35, }, { 172, 142, 241, 102, 53, 148, 85, 82, 201, 179, 224, 178, 252, 82, 91, 142, }, { 110, 162, 99, 151, 190, 254, 61, 47, 243, 44, 5, 42, 77, 47, 25, 162, }, { 161, 2, 242, 38, 216, 80, 53, 130, 3, 188, 66, 192, 219, 130, 152, 2, }, { 129, 4, 39, 76, 115, 160, 106, 199, 6, 187, 132, 67, 117, 199, 243, 4, }, { 59, 193, 38, 205, 40, 93, 74, 54, 64, 190, 91, 109, 104, 54, 178, 193, }, { 25, 255, 218, 233, 116, 162, 124, 83, 97, 52, 169, 250, 21, 83, 34, 255, }, { 228, 98, 60, 73, 250, 139, 140, 88, 83, 204, 127, 39, 169, 88, 231, 98, }, { 44, 150, 35, 13, 220, 210, 234, 133, 221, 175, 126, 251, 1, 133, 52, 150, }, { 189, 145, 143, 116, 27, 10, 78, 129, 56, 246, 153, 24, 35, 129, 19, 145, }, { 182, 85, 247, 230, 44, 223, 149, 49, 158, 173, 103, 86, 178, 49, 30, 85, }, { 211, 51, 236, 227, 165, 244, 115, 174, 203, 218, 156, 50, 110, 174, 10, 51, }, { 231, 70, 224, 32, 151, 98, 48, 104, 101, 230, 81, 57, 242, 104, 128, 70, }, { 155, 223, 33, 204, 106, 235, 170, 164, 81, 165, 3, 167, 59, 164, 182, 223, }, { 140, 136, 36, 12, 158, 100, 10, 23, 204, 180, 38, 49, 82, 23, 48, 136, }, { 4, 112, 82, 156, 45, 30, 210, 64, 72, 217, 104, 40, 101, 64, 53, 112, }, { 134, 80, 169, 185, 51, 87, 4, 183, 120, 72, 194, 117, 75, 183, 161, 80, }, { 239, 166, 68, 219, 205, 94, 87, 232, 245, 151, 129, 105, 56, 232, 234, 166, }, { 50, 61, 119, 17, 232, 135, 248, 166, 194, 104, 145, 55, 42, 166, 68, 61, }, { 11, 196, 120, 146, 55, 213, 219, 176, 166, 91, 254, 78, 145, 176, 13, 196, }, { 158, 179, 134, 119, 221, 19, 173, 244, 11, 219, 113, 133, 214, 244, 31, 179, }, { 128, 24, 210, 107, 233, 70, 191, 215, 20, 28, 158, 73, 253, 215, 111, 24, }, { 28, 147, 125, 82, 195, 90, 123, 3, 59, 74, 219, 216, 248, 3, 139, 147, }, { 177, 1, 121, 19, 108, 40, 251, 65, 224, 94, 33, 96, 140, 65, 76, 1, }, { 212, 103, 98, 22, 229, 3, 29, 222, 181, 41, 218, 4, 80, 222, 88, 103, }, { 122, 209, 186, 62, 39, 152, 33, 172, 88, 23, 14, 162, 127, 172, 248, 209, }, { 91, 203, 154, 115, 22, 142, 171, 249, 79, 183, 210, 43, 89, 249, 15, 203, }, { 163, 58, 219, 104, 47, 95, 92, 162, 39, 49, 118, 212, 8, 162, 99, 58, }, { 249, 237, 180, 60, 163, 55, 34, 75, 122, 33, 190, 245, 217, 75, 240, 237, }, { 51, 33, 130, 54, 114, 97, 45, 182, 208, 207, 139, 61, 162, 182, 216, 33, }, { 104, 234, 24, 69, 100, 239, 134, 79, 159, 120, 89, 22, 251, 79, 215, 234, }, { 150, 83, 34, 140, 135, 47, 202, 116, 155, 170, 161, 213, 28, 116, 117, 83, }, { 70, 68, 18, 6, 79, 50, 5, 234, 102, 90, 19, 249, 41, 234, 24, 68, }, { 2, 56, 41, 78, 247, 15, 105, 32, 36, 141, 52, 20, 211, 32, 251, 56, }, { 255, 165, 207, 238, 121, 38, 153, 43, 22, 117, 226, 201, 111, 43, 62, 165, }, { 149, 119, 254, 229, 234, 198, 118, 68, 173, 128, 143, 203, 71, 68, 18, 119, }, { 100, 122, 238, 34, 19, 205, 51, 143, 71, 208, 225, 110, 84, 143, 136, 122, }, { 64, 12, 105, 212, 149, 35, 190, 138, 10, 14, 79, 197, 159, 138, 214, 12, }, { 65, 16, 156, 243, 15, 197, 107, 154, 24, 169, 85, 207, 23, 154, 74, 16, }, { 22, 75, 240, 231, 110, 105, 117, 163, 143, 182, 63, 156, 225, 163, 26, 75, }, { 14, 168, 223, 41, 128, 45, 220, 224, 252, 37, 140, 108, 124, 224, 164, 168, }, { 185, 225, 221, 232, 54, 20, 156, 193, 112, 47, 241, 48, 70, 193, 38, 225, }, { 253, 157, 230, 160, 142, 41, 240, 11, 50, 248, 214, 221, 188, 11, 197, 157, }, { 111, 190, 150, 176, 36, 24, 232, 63, 225, 139, 31, 32, 197, 63, 133, 190, }, { 145, 7, 172, 121, 199, 216, 164, 4, 229, 89, 231, 227, 34, 4, 39, 7, }, { 165, 114, 160, 186, 245, 78, 231, 194, 75, 101, 42, 232, 190, 194, 173, 114, }, { 207, 160, 145, 177, 102, 174, 8, 173, 240, 144, 71, 234, 150, 173, 129, 160, }, { 86, 71, 153, 51, 251, 74, 203, 41, 133, 184, 112, 89, 126, 41, 204, 71, }, { 186, 197, 1, 129, 91, 253, 32, 241, 70, 5, 223, 46, 29, 241, 65, 197, }, { 97, 22, 73, 153, 164, 53, 52, 223, 29, 174, 147, 76, 185, 223, 33, 22, }, { 24, 227, 47, 206, 238, 68, 169, 67, 115, 147, 179, 240, 157, 67, 190, 227, }, { 84, 127, 176, 125, 12, 69, 162, 9, 161, 53, 68, 77, 173, 9, 55, 127, }, { 139, 220, 170, 249, 222, 147, 100, 103, 178, 71, 96, 7, 108, 103, 98, 220, }, { 62, 173, 129, 118, 159, 165, 77, 102, 26, 192, 41, 79, 133, 102, 27, 173, }, { 90, 215, 111, 84, 140, 104, 126, 233, 93, 16, 200, 33, 209, 233, 147, 215, }, { 206, 188, 100, 150, 252, 72, 221, 189, 226, 55, 93, 224, 30, 189, 29, 188, }, { 247, 69, 107, 21, 35, 26, 254, 171, 134, 4, 50, 153, 165, 171, 84, 69, }, { 210, 47, 25, 196, 63, 18, 166, 190, 217, 125, 134, 56, 230, 190, 150, 47, }, { 130, 32, 251, 37, 30, 73, 214, 247, 48, 145, 170, 93, 46, 247, 148, 32, }, { 179, 57, 80, 93, 155, 39, 146, 97, 196, 211, 21, 116, 95, 97, 183, 57, }, { 180, 109, 222, 168, 219, 208, 252, 17, 186, 32, 83, 66, 97, 17, 229, 109, }, { 214, 95, 75, 88, 18, 12, 116, 254, 145, 164, 238, 16, 131, 254, 163, 95, }, { 225, 14, 155, 242, 77, 115, 139, 8, 9, 178, 13, 5, 68, 8, 78, 14, }, { 194, 44, 146, 241, 139, 106, 104, 125, 58, 159, 229, 152, 177, 125, 66, 44, }, { 93, 131, 225, 161, 204, 159, 16, 153, 35, 227, 142, 23, 239, 153, 193, 131, }, { 250, 201, 104, 85, 206, 222, 158, 123, 76, 11, 144, 235, 130, 123, 151, 201, }, { 164, 110, 85, 157, 111, 168, 50, 210, 89, 194, 48, 226, 54, 210, 49, 110, }, { 31, 183, 161, 59, 174, 179, 199, 51, 13, 96, 245, 198, 163, 51, 236, 183, }, { 12, 144, 246, 103, 119, 34, 181, 192, 216, 168, 184, 120, 175, 192, 95, 144, }, { 1, 28, 245, 39, 154, 230, 213, 16, 18, 167, 26, 10, 136, 16, 156, 28, }, { 45, 138, 214, 42, 70, 52, 63, 149, 207, 8, 100, 241, 137, 149, 168, 138, }, { 103, 94, 50, 75, 126, 36, 143, 191, 113, 250, 207, 112, 15, 191, 239, 94, }, { 226, 42, 71, 155, 32, 154, 55, 56, 63, 152, 35, 27, 31, 56, 41, 42, }, { 9, 252, 81, 220, 192, 218, 178, 144, 130, 214, 202, 90, 66, 144, 246, 252, }, { 87, 91, 108, 20, 97, 172, 30, 57, 151, 31, 106, 83, 246, 57, 80, 91, }, { 17, 31, 126, 18, 46, 158, 27, 211, 241, 69, 121, 170, 223, 211, 72, 31, }, { 183, 73, 2, 193, 182, 57, 64, 33, 140, 10, 125, 92, 58, 33, 130, 73, }, { 223, 163, 26, 132, 210, 214, 198, 110, 19, 114, 36, 74, 193, 110, 85, 163, }, { 106, 210, 49, 11, 147, 224, 239, 111, 187, 245, 109, 2, 40, 111, 44, 210, }, { 147, 63, 133, 55, 48, 215, 205, 36, 193, 212, 211, 247, 241, 36, 220, 63, }, { 36, 118, 135, 246, 134, 238, 141, 5, 77, 222, 174, 171, 203, 5, 94, 118, }, { 127, 189, 29, 133, 144, 96, 38, 252, 2, 105, 124, 128, 146, 252, 81, 189, }, { 102, 66, 199, 108, 228, 194, 90, 175, 99, 93, 213, 122, 135, 175, 115, 66, }, { 254, 185, 58, 201, 227, 192, 76, 59, 4, 210, 248, 195, 231, 59, 162, 185, }, { 7, 84, 142, 245, 64, 247, 110, 112, 126, 243, 70, 54, 62, 112, 82, 84, }, { 68, 124, 59, 72, 184, 61, 108, 202, 66, 215, 39, 237, 250, 202, 227, 124, }, { 63, 177, 116, 81, 5, 67, 152, 118, 8, 103, 51, 69, 13, 118, 135, 177, }, { 248, 241, 65, 27, 57, 209, 247, 91, 104, 134, 164, 255, 81, 91, 108, 241, }, { 6, 72, 123, 210, 218, 17, 187, 96, 108, 84, 92, 60, 182, 96, 206, 72, }, { 202, 204, 54, 10, 209, 86, 15, 253, 170, 238, 53, 200, 123, 253, 40, 204, }, { 173, 146, 4, 65, 175, 114, 128, 66, 219, 20, 250, 184, 116, 66, 199, 146, }, { 43, 194, 173, 248, 156, 37, 132, 245, 163, 92, 56, 205, 63, 245, 102, 194, }, { 174, 182, 216, 40, 194, 155, 60, 114, 237, 62, 212, 166, 47, 114, 160, 182, }, { 34, 62, 252, 36, 92, 255, 54, 101, 33, 138, 242, 151, 125, 101, 144, 62, }, { 57, 249, 15, 131, 223, 82, 35, 22, 100, 51, 111, 121, 187, 22, 73, 249, }, { 222, 191, 239, 163, 72, 48, 19, 126, 1, 213, 62, 64, 73, 126, 201, 191, }, { 30, 171, 84, 28, 52, 85, 18, 35, 31, 199, 239, 204, 43, 35, 112, 171, }, { 168, 254, 163, 250, 24, 138, 135, 18, 129, 106, 136, 154, 153, 18, 110, 254, }, { 88, 239, 70, 26, 123, 103, 23, 201, 121, 157, 252, 53, 2, 201, 104, 239, }, { 136, 248, 118, 144, 179, 122, 216, 87, 132, 109, 78, 25, 55, 87, 5, 248, }, { 154, 195, 212, 235, 240, 13, 127, 180, 67, 2, 25, 173, 179, 180, 42, 195, }, { 105, 246, 237, 98, 254, 9, 83, 95, 141, 223, 67, 28, 115, 95, 75, 246, }, { 40, 230, 113, 145, 241, 204, 56, 197, 149, 118, 22, 211, 100, 197, 1, 230, }, { 101, 102, 27, 5, 137, 43, 230, 159, 85, 119, 251, 100, 220, 159, 20, 102, }, { 213, 123, 151, 49, 127, 229, 200, 206, 167, 142, 192, 14, 216, 206, 196, 123, }, { 124, 153, 193, 236, 253, 137, 154, 204, 52, 67, 82, 158, 201, 204, 54, 153, }, { 188, 141, 122, 83, 129, 236, 155, 145, 42, 81, 131, 18, 171, 145, 143, 141, }, { 56, 229, 250, 164, 69, 180, 246, 6, 118, 148, 117, 115, 51, 6, 213, 229, }, { 79, 184, 67, 218, 143, 232, 183, 122, 228, 140, 217, 163, 107, 122, 238, 184, }, { 224, 18, 110, 213, 215, 149, 94, 24, 27, 21, 23, 15, 204, 24, 210, 18, }, { 39, 82, 91, 159, 235, 7, 49, 53, 123, 244, 128, 181, 144, 53, 57, 82, }, { 118, 65, 76, 89, 80, 186, 148, 108, 128, 191, 182, 218, 208, 108, 167, 65, }, { 120, 233, 147, 112, 208, 151, 72, 140, 124, 154, 58, 182, 172, 140, 3, 233, }, { 137, 228, 131, 183, 41, 156, 13, 71, 150, 202, 84, 19, 191, 71, 153, 228, }, { 141, 148, 209, 43, 4, 130, 223, 7, 222, 19, 60, 59, 218, 7, 172, 148, }, { 175, 170, 45, 15, 88, 125, 233, 98, 255, 153, 206, 172, 167, 98, 60, 170, }, { 159, 175, 115, 80, 71, 245, 120, 228, 25, 124, 107, 143, 94, 228, 131, 175, }, { 132, 104, 128, 247, 196, 88, 109, 151, 92, 197, 246, 97, 152, 151, 90, 104, }, { 230, 90, 21, 7, 13, 132, 229, 120, 119, 65, 75, 51, 122, 120, 28, 90, }, { 241, 13, 16, 199, 249, 11, 69, 203, 234, 80, 110, 165, 19, 203, 154, 13, }, { 99, 46, 96, 215, 83, 58, 93, 255, 57, 35, 167, 88, 106, 255, 218, 46, }, { 81, 19, 23, 198, 187, 189, 165, 89, 251, 75, 54, 111, 64, 89, 158, 19, }, { 200, 244, 31, 68, 38, 89, 102, 221, 142, 99, 1, 220, 168, 221, 211, 244, }, { 3, 36, 220, 105, 109, 233, 188, 48, 54, 42, 46, 30, 91, 48, 103, 36, }, { 237, 158, 109, 149, 58, 81, 62, 200, 209, 26, 181, 125, 235, 200, 17, 158, }, { 112, 9, 55, 139, 138, 171, 47, 12, 236, 235, 234, 230, 102, 12, 105, 9, }, { 60, 149, 168, 56, 104, 170, 36, 70, 62, 77, 29, 91, 86, 70, 224, 149, }, { 142, 176, 13, 66, 105, 107, 99, 55, 232, 57, 18, 37, 129, 55, 203, 176, }, { 217, 235, 97, 86, 8, 199, 125, 14, 127, 38, 120, 118, 119, 14, 155, 235, }, { 16, 3, 139, 53, 180, 120, 206, 195, 227, 226, 99, 160, 87, 195, 212, 3, }, { 26, 219, 6, 128, 25, 75, 192, 99, 87, 30, 135, 228, 78, 99, 69, 219, }, { 157, 151, 90, 30, 176, 250, 17, 196, 61, 241, 95, 155, 141, 196, 120, 151, }, { 238, 186, 177, 252, 87, 184, 130, 248, 231, 48, 155, 99, 176, 248, 118, 186, }, { 203, 208, 195, 45, 75, 176, 218, 237, 184, 73, 47, 194, 243, 237, 180, 208, }, { 151, 79, 215, 171, 29, 201, 31, 100, 137, 13, 187, 223, 148, 100, 233, 79, }, { 201, 232, 234, 99, 188, 191, 179, 205, 156, 196, 27, 214, 32, 205, 79, 232, }, { 121, 245, 102, 87, 74, 113, 157, 156, 110, 61, 32, 188, 36, 156, 159, 245, }, { 178, 37, 165, 122, 1, 193, 71, 113, 214, 116, 15, 126, 215, 113, 43, 37, }, { 53, 105, 249, 228, 168, 112, 150, 214, 188, 155, 215, 1, 20, 214, 22, 105, }, { 108, 154, 74, 217, 73, 241, 84, 15, 215, 161, 49, 62, 158, 15, 226, 154, }, { 156, 139, 175, 57, 42, 28, 196, 212, 47, 86, 69, 145, 5, 212, 228, 139, }, { 27, 199, 243, 167, 131, 173, 21, 115, 69, 185, 157, 238, 198, 115, 217, 199, }, { 5, 108, 167, 187, 183, 248, 7, 80, 90, 126, 114, 34, 237, 80, 169, 108, }, { 80, 15, 226, 225, 33, 91, 112, 73, 233, 236, 44, 101, 200, 73, 2, 15, }, { 240, 17, 229, 224, 99, 237, 144, 219, 248, 247, 116, 175, 155, 219, 6, 17, }, { 209, 11, 197, 173, 82, 251, 26, 142, 239, 87, 168, 38, 189, 142, 241, 11, }, { 18, 59, 162, 123, 67, 119, 167, 227, 199, 111, 87, 180, 132, 227, 47, 59, }, { 135, 76, 92, 158, 169, 177, 209, 167, 106, 239, 216, 127, 195, 167, 61, 76, }, { 8, 224, 164, 251, 90, 60, 103, 128, 144, 113, 208, 80, 202, 128, 106, 224, }, { 89, 243, 179, 61, 225, 129, 194, 217, 107, 58, 230, 63, 138, 217, 244, 243, }, { 252, 129, 19, 135, 20, 207, 37, 27, 32, 95, 204, 215, 52, 27, 89, 129, }, { 33, 26, 32, 77, 49, 22, 138, 85, 23, 160, 220, 137, 38, 85, 247, 26, }, { 133, 116, 117, 208, 94, 190, 184, 135, 78, 98, 236, 107, 16, 135, 198, 116, }, { 85, 99, 69, 90, 150, 163, 119, 25, 179, 146, 94, 71, 37, 25, 171, 99, }, { 78, 164, 182, 253, 21, 14, 98, 106, 246, 43, 195, 169, 227, 106, 114, 164, }, { 236, 130, 152, 178, 160, 183, 235, 216, 195, 189, 175, 119, 99, 216, 141, 130, }, { 251, 213, 157, 114, 84, 56, 75, 107, 94, 172, 138, 225, 10, 107, 11, 213, }, { 54, 77, 37, 141, 197, 153, 42, 230, 138, 177, 249, 31, 79, 230, 113, 77, }, { 117, 101, 144, 48, 61, 83, 40, 92, 182, 149, 152, 196, 139, 92, 192, 101, }, { 55, 81, 208, 170, 95, 127, 255, 246, 152, 22, 227, 21, 199, 246, 237, 81, }, { 92, 159, 20, 134, 86, 121, 197, 137, 49, 68, 148, 29, 103, 137, 93, 159, }, { 246, 89, 158, 50, 185, 252, 43, 187, 148, 163, 40, 147, 45, 187, 200, 89, }, { 244, 97, 183, 124, 78, 243, 66, 155, 176, 46, 28, 135, 254, 155, 51, 97, }, { 205, 152, 184, 255, 145, 161, 97, 141, 212, 29, 115, 254, 69, 141, 122, 152, }, { 107, 206, 196, 44, 9, 6, 58, 127, 169, 82, 119, 8, 160, 127, 176, 206, }, { 162, 38, 46, 79, 181, 185, 137, 178, 53, 150, 108, 222, 128, 178, 255, 38, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 170, 198, 138, 180, 239, 133, 238, 50, 165, 231, 188, 142, 74, 50, 149, 198, }, { 113, 21, 194, 172, 16, 77, 250, 28, 254, 76, 240, 236, 238, 28, 245, 21, }, { 66, 52, 64, 154, 98, 44, 215, 170, 46, 131, 123, 209, 76, 170, 45, 52, }, }, { { 71, 82, 217, 210, 105, 129, 66, 74, 78, 231, 83, 93, 169, 48, 71, 124, }, { 233, 219, 49, 92, 46, 223, 18, 151, 52, 63, 131, 21, 11, 152, 233, 28, }, { 143, 38, 190, 74, 37, 18, 202, 188, 135, 248, 88, 233, 127, 247, 143, 140, }, { 78, 74, 161, 84, 42, 5, 57, 225, 141, 182, 81, 211, 59, 149, 78, 46, }, { 3, 69, 146, 119, 218, 182, 210, 120, 45, 220, 193, 245, 241, 122, 3, 156, }, { 207, 124, 79, 91, 204, 239, 161, 46, 136, 145, 180, 206, 25, 164, 207, 127, }, { 12, 215, 13, 31, 238, 157, 206, 35, 180, 246, 130, 82, 66, 43, 12, 53, }, { 186, 51, 255, 175, 182, 58, 193, 184, 101, 1, 149, 190, 100, 213, 186, 63, }, { 18, 48, 240, 207, 134, 203, 246, 149, 69, 162, 4, 223, 231, 137, 18, 164, }, { 240, 52, 228, 79, 198, 245, 3, 249, 132, 229, 186, 226, 97, 89, 240, 2, }, { 43, 242, 188, 53, 251, 126, 51, 178, 19, 173, 75, 218, 190, 128, 43, 34, }, { 44, 250, 148, 246, 123, 2, 26, 106, 82, 35, 244, 160, 113, 227, 44, 173, }, { 50, 29, 105, 38, 19, 84, 34, 220, 163, 119, 114, 45, 212, 65, 50, 60, }, { 27, 40, 136, 73, 197, 79, 141, 62, 134, 243, 6, 81, 117, 44, 27, 246, }, { 210, 222, 32, 252, 126, 15, 75, 224, 84, 25, 243, 182, 77, 124, 210, 114, }, { 8, 154, 183, 171, 180, 87, 53, 131, 216, 164, 252, 221, 124, 50, 8, 38, }, { 221, 76, 191, 148, 74, 36, 87, 187, 205, 51, 176, 17, 254, 45, 221, 219, }, { 96, 119, 104, 248, 124, 98, 191, 219, 233, 188, 154, 213, 85, 155, 96, 107, }, { 114, 71, 152, 55, 250, 169, 73, 78, 172, 30, 158, 10, 178, 18, 114, 207, }, { 17, 117, 98, 184, 92, 125, 36, 237, 104, 126, 197, 42, 22, 243, 17, 56, }, { 6, 138, 231, 238, 119, 175, 103, 240, 90, 123, 65, 41, 33, 244, 6, 251, }, { 93, 248, 158, 182, 91, 29, 129, 92, 211, 225, 171, 95, 50, 139, 93, 254, }, { 224, 195, 73, 218, 109, 91, 105, 60, 247, 110, 129, 155, 153, 61, 224, 78, }, { 134, 62, 198, 204, 102, 150, 177, 23, 68, 169, 90, 103, 237, 82, 134, 222, }, { 170, 196, 82, 58, 29, 148, 171, 125, 22, 138, 174, 199, 156, 177, 170, 115, }, { 88, 55, 235, 47, 246, 4, 52, 212, 164, 70, 43, 131, 226, 5, 88, 153, }, { 36, 96, 35, 93, 207, 85, 47, 233, 138, 135, 8, 125, 13, 209, 36, 139, }, { 223, 139, 226, 206, 103, 65, 203, 235, 251, 26, 143, 183, 225, 192, 223, 51, }, { 105, 111, 16, 126, 63, 230, 196, 112, 42, 237, 152, 91, 199, 62, 105, 57, }, { 122, 221, 47, 156, 78, 254, 124, 205, 116, 186, 98, 215, 206, 32, 122, 233, }, { 103, 127, 64, 59, 252, 30, 150, 3, 168, 50, 37, 175, 154, 248, 103, 228, }, { 236, 20, 68, 197, 131, 198, 167, 31, 67, 152, 3, 201, 219, 22, 236, 123, }, { 48, 218, 52, 124, 62, 49, 190, 140, 149, 94, 77, 139, 203, 172, 48, 212, }, { 106, 42, 130, 9, 229, 80, 22, 8, 7, 49, 89, 174, 54, 68, 106, 165, }, { 14, 16, 80, 69, 195, 248, 82, 115, 130, 223, 189, 244, 93, 198, 14, 221, }, { 67, 31, 99, 102, 51, 75, 185, 234, 34, 181, 45, 210, 151, 41, 67, 111, }, { 45, 120, 91, 219, 140, 209, 84, 66, 73, 214, 10, 243, 159, 116, 45, 217, }, { 179, 43, 135, 41, 245, 190, 186, 19, 166, 80, 151, 48, 246, 112, 179, 109, }, { 228, 142, 243, 110, 55, 145, 146, 156, 155, 60, 255, 20, 167, 36, 228, 93, }, { 34, 234, 196, 179, 184, 250, 72, 25, 208, 252, 73, 84, 44, 37, 34, 112, }, { 171, 70, 157, 23, 234, 71, 229, 85, 13, 127, 80, 148, 114, 38, 171, 7, }, { 61, 143, 246, 78, 39, 127, 62, 135, 58, 93, 49, 138, 103, 16, 61, 149, }, { 52, 151, 142, 200, 100, 251, 69, 44, 249, 12, 51, 4, 245, 181, 52, 199, }, { 144, 67, 140, 183, 186, 151, 188, 34, 109, 89, 32, 55, 52, 194, 144, 105, }, { 151, 75, 164, 116, 58, 235, 149, 250, 44, 215, 159, 77, 251, 161, 151, 230, }, { 176, 110, 21, 94, 47, 8, 104, 107, 139, 140, 86, 197, 7, 10, 176, 241, }, { 229, 12, 60, 67, 192, 66, 220, 180, 128, 201, 1, 71, 73, 179, 229, 41, }, { 66, 157, 172, 75, 196, 152, 247, 194, 57, 64, 211, 129, 121, 190, 66, 27, }, { 121, 152, 189, 235, 148, 72, 174, 181, 89, 102, 163, 34, 63, 90, 121, 117, }, { 192, 238, 208, 51, 248, 196, 189, 117, 17, 187, 247, 105, 170, 245, 192, 214, }, { 24, 109, 26, 62, 31, 249, 95, 70, 171, 47, 199, 164, 132, 86, 24, 106, }, { 75, 133, 212, 205, 135, 28, 140, 105, 250, 17, 209, 15, 235, 27, 75, 73, }, { 247, 60, 204, 140, 70, 137, 42, 33, 197, 107, 5, 152, 174, 58, 247, 141, }, { 184, 244, 162, 245, 155, 95, 93, 232, 83, 40, 170, 24, 123, 56, 184, 215, }, { 166, 19, 95, 37, 243, 9, 101, 94, 162, 124, 44, 149, 222, 154, 166, 70, }, { 89, 181, 36, 2, 1, 215, 122, 252, 191, 179, 213, 208, 12, 146, 89, 237, }, { 100, 58, 210, 76, 38, 168, 68, 123, 133, 238, 228, 90, 107, 130, 100, 120, }, { 54, 80, 211, 146, 73, 158, 217, 124, 207, 37, 12, 162, 234, 88, 54, 47, }, { 180, 35, 175, 234, 117, 194, 147, 203, 231, 222, 40, 74, 57, 19, 180, 226, }, { 129, 54, 238, 15, 230, 234, 152, 207, 5, 39, 229, 29, 34, 49, 129, 81, }, { 9, 24, 120, 134, 67, 132, 123, 171, 195, 81, 2, 142, 146, 165, 9, 82, }, { 120, 26, 114, 198, 99, 155, 224, 157, 66, 147, 93, 113, 209, 205, 120, 1, }, { 237, 150, 139, 232, 116, 21, 233, 55, 88, 109, 253, 154, 53, 129, 237, 15, }, { 95, 63, 195, 236, 118, 120, 29, 12, 229, 200, 148, 249, 45, 102, 95, 22, }, { 218, 68, 151, 87, 202, 88, 126, 99, 140, 189, 15, 107, 49, 78, 218, 84, }, { 196, 163, 106, 135, 162, 14, 70, 213, 125, 233, 137, 230, 148, 236, 196, 197, }, { 41, 53, 225, 111, 214, 27, 175, 226, 37, 132, 116, 124, 161, 109, 41, 202, }, { 173, 204, 122, 249, 157, 232, 130, 165, 87, 4, 17, 189, 83, 210, 173, 252, }, { 7, 8, 40, 195, 128, 124, 41, 216, 65, 142, 191, 122, 207, 99, 7, 143, }, { 130, 115, 124, 120, 60, 92, 74, 183, 40, 251, 36, 232, 211, 75, 130, 205, }, { 226, 4, 20, 128, 64, 62, 245, 108, 193, 71, 190, 61, 134, 208, 226, 166, }, { 49, 88, 251, 81, 201, 226, 240, 164, 142, 171, 179, 216, 37, 59, 49, 160, }, { 23, 255, 133, 86, 43, 210, 67, 29, 50, 5, 132, 3, 55, 7, 23, 195, }, { 159, 209, 19, 223, 142, 188, 160, 121, 244, 115, 99, 144, 135, 147, 159, 192, }, { 11, 223, 37, 220, 110, 225, 231, 251, 245, 120, 61, 40, 141, 72, 11, 186, }, { 22, 125, 74, 123, 220, 1, 13, 53, 41, 240, 122, 80, 217, 144, 22, 183, }, { 127, 18, 90, 5, 227, 231, 201, 69, 3, 29, 226, 11, 30, 174, 127, 142, }, { 35, 104, 11, 158, 79, 41, 6, 49, 203, 9, 183, 7, 194, 178, 35, 4, }, { 107, 168, 77, 36, 18, 131, 88, 32, 28, 196, 167, 253, 216, 211, 107, 209, }, { 169, 129, 192, 77, 199, 34, 121, 5, 59, 86, 111, 50, 109, 203, 169, 239, }, { 139, 107, 4, 254, 127, 216, 49, 28, 235, 170, 38, 102, 65, 238, 139, 159, }, { 183, 102, 61, 157, 175, 116, 65, 179, 202, 2, 233, 191, 200, 105, 183, 126, }, { 19, 178, 63, 226, 113, 24, 184, 189, 94, 87, 250, 140, 9, 30, 19, 208, }, { 28, 32, 160, 138, 69, 51, 164, 230, 199, 125, 185, 43, 186, 79, 28, 121, }, { 251, 235, 193, 147, 168, 20, 228, 2, 113, 157, 135, 202, 236, 17, 251, 184, }, { 98, 176, 53, 162, 81, 7, 35, 139, 223, 149, 165, 115, 74, 118, 98, 131, }, { 242, 243, 185, 21, 235, 144, 159, 169, 178, 204, 133, 68, 126, 180, 242, 234, }, { 59, 5, 17, 160, 80, 208, 89, 119, 96, 38, 112, 163, 70, 228, 59, 110, }, { 154, 30, 102, 70, 35, 165, 21, 241, 131, 212, 227, 76, 87, 29, 154, 167, }, { 117, 79, 176, 244, 122, 213, 96, 150, 237, 144, 33, 112, 125, 113, 117, 64, }, { 234, 158, 163, 43, 244, 105, 192, 239, 25, 227, 66, 224, 250, 226, 234, 128, }, { 208, 25, 125, 166, 83, 106, 215, 176, 98, 48, 204, 16, 82, 145, 208, 154, }, { 42, 112, 115, 24, 12, 173, 125, 154, 8, 88, 181, 137, 80, 23, 42, 86, }, { 145, 193, 67, 154, 77, 68, 242, 10, 118, 172, 222, 100, 218, 85, 145, 29, }, { 2, 199, 93, 90, 45, 101, 156, 80, 54, 41, 63, 166, 31, 237, 2, 232, }, { 70, 208, 22, 255, 158, 82, 12, 98, 85, 18, 173, 14, 71, 167, 70, 8, }, { 167, 145, 144, 8, 4, 218, 43, 118, 185, 137, 210, 198, 48, 13, 167, 50, }, { 220, 206, 112, 185, 189, 247, 25, 147, 214, 198, 78, 66, 16, 186, 220, 175, }, { 39, 37, 177, 42, 21, 227, 253, 145, 167, 91, 201, 136, 252, 171, 39, 23, }, { 118, 10, 34, 131, 160, 99, 178, 238, 192, 76, 224, 133, 140, 11, 118, 220, }, { 164, 212, 2, 127, 222, 108, 249, 14, 148, 85, 19, 51, 193, 119, 164, 174, }, { 202, 179, 58, 194, 97, 246, 20, 166, 255, 54, 52, 18, 201, 42, 202, 24, }, { 150, 201, 107, 89, 205, 56, 219, 210, 55, 34, 97, 30, 21, 54, 150, 146, }, { 112, 128, 197, 109, 215, 204, 213, 30, 154, 55, 161, 172, 173, 255, 112, 39, }, { 84, 224, 230, 48, 24, 153, 250, 247, 16, 176, 169, 209, 160, 46, 84, 172, }, { 225, 65, 134, 247, 154, 136, 39, 20, 236, 155, 127, 200, 119, 170, 225, 58, }, { 111, 229, 247, 144, 72, 73, 163, 128, 112, 150, 217, 114, 230, 202, 111, 194, }, { 57, 194, 76, 250, 125, 181, 197, 39, 86, 15, 79, 5, 89, 9, 57, 134, }, { 51, 159, 166, 11, 228, 135, 108, 244, 184, 130, 140, 126, 58, 214, 51, 72, }, { 219, 198, 88, 122, 61, 139, 48, 75, 151, 72, 241, 56, 223, 217, 219, 32, }, { 160, 153, 184, 203, 132, 166, 2, 174, 248, 7, 109, 188, 255, 110, 160, 189, }, { 254, 36, 180, 10, 5, 13, 81, 138, 6, 58, 7, 22, 60, 159, 254, 223, }, { 178, 169, 72, 4, 2, 109, 244, 59, 189, 165, 105, 99, 24, 231, 178, 25, }, { 16, 247, 173, 149, 171, 174, 106, 197, 115, 139, 59, 121, 248, 100, 16, 76, }, { 113, 2, 10, 64, 32, 31, 155, 54, 129, 194, 95, 255, 67, 104, 113, 83, }, { 135, 188, 9, 225, 145, 69, 255, 63, 95, 92, 164, 52, 3, 197, 135, 170, }, { 53, 21, 65, 229, 147, 40, 11, 4, 226, 249, 205, 87, 27, 34, 53, 179, }, { 56, 64, 131, 215, 138, 102, 139, 15, 77, 250, 177, 86, 183, 158, 56, 242, }, { 82, 106, 1, 222, 111, 54, 157, 7, 74, 203, 232, 248, 129, 218, 82, 87, }, { 101, 184, 29, 97, 209, 123, 10, 83, 158, 27, 26, 9, 133, 21, 101, 12, }, { 222, 9, 45, 227, 144, 146, 133, 195, 224, 239, 113, 228, 15, 87, 222, 71, }, { 142, 164, 113, 103, 210, 193, 132, 148, 156, 13, 166, 186, 145, 96, 142, 248, }, { 168, 3, 15, 96, 48, 241, 55, 45, 32, 163, 145, 97, 131, 92, 168, 155, }, { 253, 97, 38, 125, 223, 187, 131, 242, 43, 230, 198, 227, 205, 229, 253, 67, }, { 46, 61, 201, 172, 86, 103, 134, 58, 100, 10, 203, 6, 110, 14, 46, 69, }, { 1, 130, 207, 45, 247, 211, 78, 40, 27, 245, 254, 83, 238, 151, 1, 116, }, { 248, 174, 83, 228, 114, 162, 54, 122, 92, 65, 70, 63, 29, 107, 248, 36, }, { 140, 99, 44, 61, 255, 164, 24, 196, 170, 36, 153, 28, 142, 141, 140, 16, }, { 187, 177, 48, 130, 65, 233, 143, 144, 126, 244, 107, 237, 138, 66, 187, 75, }, { 73, 66, 137, 151, 170, 121, 16, 57, 204, 56, 238, 169, 244, 246, 73, 161, }, { 68, 23, 75, 165, 179, 55, 144, 50, 99, 59, 146, 168, 88, 74, 68, 224, }, { 191, 252, 138, 54, 27, 35, 116, 48, 18, 166, 21, 98, 180, 91, 191, 88, }, { 239, 81, 214, 178, 89, 112, 117, 103, 110, 68, 194, 60, 42, 108, 239, 231, }, { 252, 227, 233, 80, 40, 104, 205, 218, 48, 19, 56, 176, 35, 114, 252, 55, }, { 58, 135, 222, 141, 167, 3, 23, 95, 123, 211, 142, 240, 168, 115, 58, 26, }, { 177, 236, 218, 115, 216, 219, 38, 67, 144, 121, 168, 150, 233, 157, 177, 133, }, { 249, 44, 156, 201, 133, 113, 120, 82, 71, 180, 184, 108, 243, 252, 249, 80, }, { 153, 91, 244, 49, 249, 19, 199, 137, 174, 8, 34, 185, 166, 103, 153, 59, }, { 216, 131, 202, 13, 231, 61, 226, 51, 186, 148, 48, 205, 46, 163, 216, 188, }, { 201, 246, 168, 181, 187, 64, 198, 222, 210, 234, 245, 231, 56, 80, 201, 132, }, { 97, 245, 167, 213, 139, 177, 241, 243, 242, 73, 100, 134, 187, 12, 97, 31, }, { 60, 13, 57, 99, 208, 172, 112, 175, 33, 168, 207, 217, 137, 135, 60, 225, }, { 137, 172, 89, 164, 82, 189, 173, 76, 221, 131, 25, 192, 94, 3, 137, 119, }, { 15, 146, 159, 104, 52, 43, 28, 91, 153, 42, 67, 167, 179, 81, 15, 169, }, { 92, 122, 81, 155, 172, 206, 207, 116, 200, 20, 85, 12, 220, 28, 92, 138, }, { 190, 126, 69, 27, 236, 240, 58, 24, 9, 83, 235, 49, 90, 204, 190, 44, }, { 194, 41, 141, 105, 213, 161, 33, 37, 39, 146, 200, 207, 181, 24, 194, 62, }, { 197, 33, 165, 170, 85, 221, 8, 253, 102, 28, 119, 181, 122, 123, 197, 177, }, { 136, 46, 150, 137, 165, 110, 227, 100, 198, 118, 231, 147, 176, 148, 136, 3, }, { 161, 27, 119, 230, 115, 117, 76, 134, 227, 242, 147, 239, 17, 249, 161, 201, }, { 29, 162, 111, 167, 178, 224, 234, 206, 220, 136, 71, 120, 84, 216, 29, 13, }, { 199, 230, 248, 240, 120, 184, 148, 173, 80, 53, 72, 19, 101, 150, 199, 89, }, { 108, 160, 101, 231, 146, 255, 113, 248, 93, 74, 24, 135, 23, 176, 108, 94, }, { 133, 123, 84, 187, 188, 32, 99, 111, 105, 117, 155, 146, 28, 40, 133, 66, }, { 157, 22, 78, 133, 163, 217, 60, 41, 194, 90, 92, 54, 152, 126, 157, 40, }, { 211, 92, 239, 209, 137, 220, 5, 200, 79, 236, 13, 229, 163, 235, 211, 6, }, { 209, 155, 178, 139, 164, 185, 153, 152, 121, 197, 50, 67, 188, 6, 209, 238, }, { 30, 231, 253, 208, 104, 86, 56, 182, 241, 84, 134, 141, 165, 162, 30, 145, }, { 62, 202, 100, 57, 253, 201, 236, 255, 23, 129, 240, 127, 150, 106, 62, 9, }, { 132, 249, 155, 150, 75, 243, 45, 71, 114, 128, 101, 193, 242, 191, 132, 54, }, { 47, 191, 6, 129, 161, 180, 200, 18, 127, 255, 53, 85, 128, 153, 47, 49, }, { 125, 213, 7, 95, 206, 130, 85, 21, 53, 52, 221, 173, 1, 67, 125, 102, }, { 116, 205, 127, 217, 141, 6, 46, 190, 246, 101, 223, 35, 147, 230, 116, 52, }, { 65, 216, 62, 60, 30, 46, 37, 186, 20, 156, 18, 116, 136, 196, 65, 135, }, { 80, 173, 92, 132, 66, 83, 1, 87, 124, 226, 215, 94, 158, 55, 80, 191, }, { 33, 175, 86, 196, 98, 76, 154, 97, 253, 32, 136, 161, 221, 95, 33, 236, }, { 85, 98, 41, 29, 239, 74, 180, 223, 11, 69, 87, 130, 78, 185, 85, 216, }, { 231, 203, 97, 25, 237, 39, 64, 228, 182, 224, 62, 225, 86, 94, 231, 193, }, { 205, 187, 18, 1, 225, 138, 61, 126, 190, 184, 139, 104, 6, 73, 205, 151, }, { 13, 85, 194, 50, 25, 78, 128, 11, 175, 3, 124, 1, 172, 188, 13, 65, }, { 124, 87, 200, 114, 57, 81, 27, 61, 46, 193, 35, 254, 239, 212, 124, 18, }, { 55, 210, 28, 191, 190, 77, 151, 84, 212, 208, 242, 241, 4, 207, 55, 91, }, { 26, 170, 71, 100, 50, 156, 195, 22, 157, 6, 248, 2, 155, 187, 26, 130, }, { 162, 94, 229, 145, 169, 195, 158, 254, 206, 46, 82, 26, 224, 131, 162, 85, }, { 175, 11, 39, 163, 176, 141, 30, 245, 97, 45, 46, 27, 76, 63, 175, 20, }, { 246, 190, 3, 161, 177, 90, 100, 9, 222, 158, 251, 203, 64, 173, 246, 249, }, { 232, 89, 254, 113, 217, 12, 92, 191, 47, 202, 125, 70, 229, 15, 232, 104, }, { 126, 144, 149, 40, 20, 52, 135, 109, 24, 232, 28, 88, 240, 57, 126, 250, }, { 94, 189, 12, 193, 129, 171, 83, 36, 254, 61, 106, 170, 195, 241, 94, 98, }, { 250, 105, 14, 190, 95, 199, 170, 42, 106, 104, 121, 153, 2, 134, 250, 204, }, { 181, 161, 96, 199, 130, 17, 221, 227, 252, 43, 214, 25, 215, 132, 181, 150, }, { 146, 132, 209, 237, 151, 242, 32, 114, 91, 112, 31, 145, 43, 47, 146, 129, }, { 86, 39, 187, 106, 53, 252, 102, 167, 38, 153, 150, 119, 191, 195, 86, 68, }, { 241, 182, 43, 98, 49, 38, 77, 209, 159, 16, 68, 177, 143, 206, 241, 118, }, { 4, 77, 186, 180, 90, 202, 251, 160, 108, 82, 126, 143, 62, 25, 4, 19, }, { 110, 103, 56, 189, 191, 154, 237, 168, 107, 99, 39, 33, 8, 93, 110, 182, }, { 165, 86, 205, 82, 41, 191, 183, 38, 143, 160, 237, 96, 47, 224, 165, 218, }, { 230, 73, 174, 52, 26, 244, 14, 204, 173, 21, 192, 178, 184, 201, 230, 181, }, { 200, 116, 103, 152, 76, 147, 136, 246, 201, 31, 11, 180, 214, 199, 200, 240, }, { 123, 95, 224, 177, 185, 45, 50, 229, 111, 79, 156, 132, 32, 183, 123, 157, }, { 115, 197, 87, 26, 13, 122, 7, 102, 183, 235, 96, 89, 92, 133, 115, 187, }, { 81, 47, 147, 169, 181, 128, 79, 127, 103, 23, 41, 13, 112, 160, 81, 203, }, { 149, 140, 249, 46, 23, 142, 9, 170, 26, 254, 160, 235, 228, 76, 149, 14, }, { 102, 253, 143, 22, 11, 205, 216, 43, 179, 199, 219, 252, 116, 111, 102, 144, }, { 214, 147, 154, 72, 36, 197, 176, 64, 56, 75, 141, 57, 115, 101, 214, 97, }, { 91, 114, 121, 88, 44, 178, 230, 172, 137, 154, 234, 118, 19, 127, 91, 5, }, { 227, 134, 219, 173, 183, 237, 187, 68, 218, 178, 64, 110, 104, 71, 227, 210, }, { 99, 50, 250, 143, 166, 212, 109, 163, 196, 96, 91, 32, 164, 225, 99, 247, }, { 155, 156, 169, 107, 212, 118, 91, 217, 152, 33, 29, 31, 185, 138, 155, 211, }, { 189, 59, 215, 108, 54, 70, 232, 96, 36, 143, 42, 196, 171, 182, 189, 176, }, { 119, 136, 237, 174, 87, 176, 252, 198, 219, 185, 30, 214, 98, 156, 119, 168, }, { 141, 225, 227, 16, 8, 119, 86, 236, 177, 209, 103, 79, 96, 26, 141, 100, }, { 188, 185, 24, 65, 193, 149, 166, 72, 63, 122, 212, 151, 69, 33, 188, 196, }, { 243, 113, 118, 56, 28, 67, 209, 129, 169, 57, 123, 23, 144, 35, 243, 158, }, { 244, 121, 94, 251, 156, 63, 248, 89, 232, 183, 196, 109, 95, 64, 244, 17, }, { 38, 167, 126, 7, 226, 48, 179, 185, 188, 174, 55, 219, 18, 60, 38, 99, }, { 212, 84, 199, 18, 9, 160, 44, 16, 14, 98, 178, 159, 108, 136, 212, 137, }, { 128, 180, 33, 34, 17, 57, 214, 231, 30, 210, 27, 78, 204, 166, 128, 37, }, { 147, 6, 30, 192, 96, 33, 110, 90, 64, 133, 225, 194, 197, 184, 147, 245, }, { 182, 228, 242, 176, 88, 167, 15, 155, 209, 247, 23, 236, 38, 254, 182, 10, }, { 21, 56, 216, 12, 6, 183, 223, 77, 4, 44, 187, 165, 40, 234, 21, 43, }, { 204, 57, 221, 44, 22, 89, 115, 86, 165, 77, 117, 59, 232, 222, 204, 227, }, { 172, 78, 181, 212, 106, 59, 204, 141, 76, 241, 239, 238, 189, 69, 172, 136, }, { 193, 108, 31, 30, 15, 23, 243, 93, 10, 78, 9, 58, 68, 98, 193, 162, }, { 238, 211, 25, 159, 174, 163, 59, 79, 117, 177, 60, 111, 196, 251, 238, 147, }, { 174, 137, 232, 142, 71, 94, 80, 221, 122, 216, 208, 72, 162, 168, 174, 96, }, { 156, 148, 129, 168, 84, 10, 114, 1, 217, 175, 162, 101, 118, 233, 156, 92, }, { 217, 1, 5, 32, 16, 238, 172, 27, 161, 97, 206, 158, 192, 52, 217, 200, }, { 163, 220, 42, 188, 94, 16, 208, 214, 213, 219, 172, 73, 14, 20, 163, 33, }, { 37, 226, 236, 112, 56, 134, 97, 193, 145, 114, 246, 46, 227, 70, 37, 255, }, { 235, 28, 108, 6, 3, 186, 142, 199, 2, 22, 188, 179, 20, 117, 235, 244, }, { 64, 90, 241, 17, 233, 253, 107, 146, 15, 105, 236, 39, 102, 83, 64, 243, }, { 72, 192, 70, 186, 93, 170, 94, 17, 215, 205, 16, 250, 26, 97, 72, 213, }, { 109, 34, 170, 202, 101, 44, 63, 208, 70, 191, 230, 212, 249, 39, 109, 42, }, { 40, 183, 46, 66, 33, 200, 225, 202, 62, 113, 138, 47, 79, 250, 40, 190, }, { 255, 166, 123, 39, 242, 222, 31, 162, 29, 207, 249, 69, 210, 8, 255, 171, }, { 10, 93, 234, 241, 153, 50, 169, 211, 238, 141, 195, 123, 99, 223, 10, 206, }, { 79, 200, 110, 121, 221, 214, 119, 201, 150, 67, 175, 128, 213, 2, 79, 90, }, { 25, 239, 213, 19, 232, 42, 17, 110, 176, 218, 57, 247, 106, 193, 25, 30, }, { 83, 232, 206, 243, 152, 229, 211, 47, 81, 62, 22, 171, 111, 77, 83, 35, }, { 245, 251, 145, 214, 107, 236, 182, 113, 243, 66, 58, 62, 177, 215, 245, 101, }, { 185, 118, 109, 216, 108, 140, 19, 192, 72, 221, 84, 75, 149, 175, 185, 163, }, { 203, 49, 245, 239, 150, 37, 90, 142, 228, 195, 202, 65, 39, 189, 203, 108, }, { 69, 149, 132, 136, 68, 228, 222, 26, 120, 206, 108, 251, 182, 221, 69, 148, }, { 87, 165, 116, 71, 194, 47, 40, 143, 61, 108, 104, 36, 81, 84, 87, 48, }, { 215, 17, 85, 101, 211, 22, 254, 104, 35, 190, 115, 106, 157, 242, 215, 21, }, { 104, 237, 223, 83, 200, 53, 138, 88, 49, 24, 102, 8, 41, 169, 104, 77, }, { 76, 141, 252, 14, 7, 96, 165, 177, 187, 159, 110, 117, 36, 120, 76, 198, }, { 32, 45, 153, 233, 149, 159, 212, 73, 230, 213, 118, 242, 51, 200, 32, 152, }, { 74, 7, 27, 224, 112, 207, 194, 65, 225, 228, 47, 92, 5, 140, 74, 61, }, { 5, 207, 117, 153, 173, 25, 181, 136, 119, 167, 128, 220, 208, 142, 5, 103, }, { 198, 100, 55, 221, 143, 107, 218, 133, 75, 192, 182, 64, 139, 1, 198, 45, }, { 20, 186, 23, 33, 241, 100, 145, 101, 31, 217, 69, 246, 198, 125, 20, 95, }, { 158, 83, 220, 242, 121, 111, 238, 81, 239, 134, 157, 195, 105, 4, 158, 180, }, { 213, 214, 8, 63, 254, 115, 98, 56, 21, 151, 76, 204, 130, 31, 213, 253, }, { 77, 15, 51, 35, 240, 179, 235, 153, 160, 106, 144, 38, 202, 239, 77, 178, }, { 206, 254, 128, 118, 59, 60, 239, 6, 147, 100, 74, 157, 247, 51, 206, 11, }, { 90, 240, 182, 117, 219, 97, 168, 132, 146, 111, 20, 37, 253, 232, 90, 113, }, { 63, 72, 171, 20, 10, 26, 162, 215, 12, 116, 14, 44, 120, 253, 63, 125, }, { 138, 233, 203, 211, 136, 11, 127, 52, 240, 95, 216, 53, 175, 121, 138, 235, }, { 131, 241, 179, 85, 203, 143, 4, 159, 51, 14, 218, 187, 61, 220, 131, 185, }, { 195, 171, 66, 68, 34, 114, 111, 13, 60, 103, 54, 156, 91, 143, 195, 74, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 148, 14, 54, 3, 224, 93, 71, 130, 1, 11, 94, 184, 10, 219, 148, 122, }, { 31, 101, 50, 253, 159, 133, 118, 158, 234, 161, 120, 222, 75, 53, 31, 229, }, { 152, 217, 59, 28, 14, 192, 137, 161, 181, 253, 220, 234, 72, 240, 152, 79, }, }, { { 204, 14, 134, 194, 79, 186, 89, 59, 227, 239, 121, 130, 83, 17, 240, 205, }, { 3, 150, 148, 149, 108, 42, 182, 245, 156, 186, 231, 55, 131, 145, 189, 91, }, { 23, 177, 171, 166, 249, 17, 210, 3, 195, 142, 201, 144, 88, 146, 173, 105, }, { 165, 130, 68, 39, 150, 101, 191, 96, 218, 110, 89, 40, 81, 104, 132, 190, }, { 212, 52, 172, 224, 169, 41, 160, 159, 137, 118, 77, 249, 193, 19, 81, 80, }, { 252, 122, 210, 134, 64, 95, 104, 176, 55, 30, 17, 116, 180, 21, 113, 52, }, { 214, 208, 245, 6, 225, 164, 197, 57, 97, 27, 247, 98, 130, 76, 135, 131, }, { 118, 43, 206, 93, 195, 191, 99, 133, 220, 120, 68, 19, 149, 84, 7, 208, }, { 210, 219, 71, 9, 113, 125, 15, 182, 114, 193, 64, 151, 4, 242, 232, 230, }, { 32, 88, 217, 120, 10, 7, 159, 242, 152, 31, 241, 164, 186, 185, 254, 174, }, { 101, 145, 215, 244, 170, 119, 123, 9, 12, 44, 58, 118, 75, 120, 197, 220, }, { 66, 84, 40, 22, 92, 131, 152, 129, 27, 83, 155, 16, 244, 238, 233, 76, }, { 70, 95, 154, 25, 204, 90, 82, 14, 8, 137, 44, 229, 114, 80, 134, 41, }, { 187, 87, 133, 236, 168, 162, 233, 237, 75, 64, 96, 61, 6, 139, 156, 149, }, { 44, 69, 204, 105, 121, 175, 2, 160, 173, 178, 235, 120, 243, 184, 79, 1, }, { 37, 33, 166, 4, 190, 121, 134, 46, 255, 18, 27, 253, 252, 201, 250, 67, }, { 46, 161, 149, 143, 49, 34, 103, 6, 69, 223, 81, 227, 176, 231, 153, 210, }, { 127, 79, 164, 48, 4, 105, 231, 11, 142, 216, 180, 150, 154, 37, 178, 146, }, { 173, 148, 227, 57, 117, 20, 232, 189, 252, 25, 244, 1, 158, 215, 90, 116, }, { 6, 239, 235, 233, 216, 84, 175, 41, 251, 183, 13, 110, 197, 225, 185, 182, }, { 107, 104, 155, 3, 145, 82, 131, 253, 209, 236, 154, 49, 65, 38, 162, 160, }, { 59, 244, 103, 207, 128, 190, 208, 163, 110, 60, 34, 232, 171, 42, 226, 104, }, { 106, 26, 86, 112, 181, 245, 80, 174, 165, 59, 199, 157, 129, 232, 201, 40, }, { 126, 61, 105, 67, 32, 206, 52, 88, 250, 15, 233, 58, 90, 235, 217, 26, }, { 60, 105, 65, 85, 124, 77, 172, 217, 225, 92, 114, 42, 174, 5, 48, 86, }, { 132, 168, 80, 44, 184, 197, 243, 193, 54, 166, 245, 32, 43, 31, 17, 152, }, { 103, 117, 142, 18, 226, 250, 30, 175, 228, 65, 128, 237, 8, 39, 19, 15, }, { 182, 56, 93, 142, 255, 173, 167, 236, 10, 58, 39, 77, 143, 68, 70, 178, }, { 22, 195, 102, 213, 221, 182, 1, 80, 183, 89, 148, 60, 152, 92, 198, 225, }, { 136, 181, 69, 61, 203, 109, 110, 147, 3, 11, 239, 252, 98, 30, 160, 55, }, { 88, 138, 91, 210, 242, 157, 4, 131, 153, 167, 21, 240, 37, 179, 158, 2, }, { 188, 202, 163, 118, 84, 81, 149, 151, 196, 32, 48, 255, 3, 164, 78, 171, }, { 222, 198, 82, 24, 2, 213, 146, 228, 71, 108, 90, 75, 77, 243, 89, 73, }, { 194, 247, 202, 53, 116, 159, 161, 207, 62, 47, 217, 197, 89, 79, 151, 177, }, { 78, 73, 61, 7, 47, 43, 5, 211, 46, 254, 129, 204, 189, 239, 88, 227, }, { 63, 255, 213, 192, 16, 103, 26, 44, 125, 230, 149, 29, 45, 148, 141, 13, }, { 14, 249, 76, 247, 59, 37, 248, 244, 221, 192, 160, 71, 10, 94, 103, 124, }, { 31, 167, 12, 184, 26, 96, 133, 222, 229, 249, 100, 185, 151, 45, 115, 163, }, { 153, 235, 5, 114, 234, 40, 19, 185, 59, 50, 43, 2, 255, 109, 180, 232, }, { 12, 29, 21, 17, 115, 168, 157, 82, 53, 173, 26, 220, 73, 1, 177, 175, }, { 112, 196, 37, 180, 27, 235, 204, 172, 39, 207, 73, 125, 80, 181, 190, 102, }, { 68, 187, 195, 255, 132, 215, 55, 168, 224, 228, 150, 126, 49, 15, 80, 250, }, { 45, 55, 1, 26, 93, 8, 209, 243, 217, 101, 182, 212, 51, 118, 36, 137, }, { 95, 23, 125, 72, 14, 110, 120, 249, 22, 199, 69, 50, 32, 156, 76, 60, }, { 120, 210, 130, 170, 248, 154, 155, 113, 1, 184, 228, 84, 159, 10, 96, 172, }, { 203, 147, 160, 88, 179, 73, 37, 65, 108, 143, 41, 64, 86, 62, 34, 243, }, { 213, 70, 97, 147, 141, 142, 115, 204, 253, 161, 16, 85, 1, 221, 58, 216, }, { 115, 82, 177, 33, 119, 193, 122, 89, 187, 117, 174, 74, 211, 36, 3, 61, }, { 92, 129, 233, 221, 98, 68, 206, 12, 138, 125, 162, 5, 163, 13, 241, 103, }, { 254, 158, 139, 96, 8, 210, 13, 22, 223, 115, 171, 239, 247, 74, 167, 231, }, { 111, 99, 41, 12, 1, 139, 73, 114, 194, 54, 45, 196, 199, 152, 205, 197, }, { 26, 222, 115, 196, 174, 30, 156, 2, 130, 244, 142, 224, 209, 93, 119, 78, }, { 7, 157, 38, 154, 252, 243, 124, 122, 143, 96, 80, 194, 5, 47, 210, 62, }, { 238, 178, 6, 92, 13, 48, 163, 111, 147, 157, 50, 189, 170, 247, 216, 176, }, { 234, 185, 180, 83, 157, 233, 105, 224, 128, 71, 133, 72, 44, 73, 183, 213, }, { 200, 5, 52, 205, 223, 99, 147, 180, 240, 53, 206, 119, 213, 175, 159, 168, }, { 140, 190, 247, 50, 91, 180, 164, 28, 16, 209, 88, 9, 228, 160, 207, 82, }, { 181, 174, 201, 27, 147, 135, 17, 25, 150, 128, 192, 122, 12, 213, 251, 233, }, { 56, 98, 243, 90, 236, 148, 102, 86, 242, 134, 197, 223, 40, 187, 95, 51, }, { 89, 248, 150, 161, 214, 58, 215, 208, 237, 112, 72, 92, 229, 125, 245, 138, }, { 105, 140, 194, 229, 217, 223, 230, 91, 57, 129, 32, 170, 2, 121, 116, 115, }, { 16, 44, 141, 60, 5, 226, 174, 121, 76, 238, 153, 82, 93, 189, 127, 87, }, { 240, 103, 199, 151, 51, 247, 245, 226, 2, 179, 11, 168, 253, 20, 192, 155, }, { 163, 109, 175, 206, 78, 49, 16, 73, 33, 217, 84, 70, 148, 137, 61, 8, }, { 9, 100, 106, 109, 199, 214, 132, 142, 82, 160, 240, 133, 15, 113, 181, 66, }, { 13, 111, 216, 98, 87, 15, 78, 1, 65, 122, 71, 112, 137, 207, 218, 39, }, { 253, 8, 31, 245, 100, 248, 187, 227, 67, 201, 76, 216, 116, 219, 26, 188, }, { 27, 172, 190, 183, 138, 185, 79, 81, 246, 35, 211, 76, 17, 147, 28, 198, }, { 39, 197, 255, 226, 246, 244, 227, 136, 23, 127, 161, 102, 191, 150, 44, 144, }, { 141, 204, 58, 65, 127, 19, 119, 79, 100, 6, 5, 165, 36, 110, 164, 218, }, { 242, 131, 158, 113, 123, 122, 144, 68, 234, 222, 177, 51, 190, 75, 22, 72, }, { 146, 107, 54, 249, 101, 115, 242, 145, 129, 255, 97, 28, 179, 67, 215, 121, }, { 109, 135, 112, 234, 73, 6, 44, 212, 42, 91, 151, 95, 132, 199, 27, 22, }, { 93, 243, 36, 174, 70, 227, 29, 95, 254, 170, 255, 169, 99, 195, 154, 239, }, { 241, 21, 10, 228, 23, 80, 38, 177, 118, 100, 86, 4, 61, 218, 171, 19, }, { 33, 42, 20, 11, 46, 160, 76, 161, 236, 200, 172, 8, 122, 119, 149, 38, }, { 55, 233, 114, 222, 243, 22, 77, 241, 91, 145, 56, 52, 226, 43, 83, 199, }, { 64, 176, 113, 240, 20, 14, 253, 39, 243, 62, 33, 139, 183, 177, 63, 159, }, { 142, 90, 174, 212, 19, 57, 193, 186, 248, 188, 226, 146, 167, 255, 25, 129, }, { 232, 93, 237, 181, 213, 100, 12, 70, 104, 42, 63, 211, 111, 22, 97, 6, }, { 228, 64, 248, 164, 166, 204, 145, 20, 93, 135, 37, 15, 38, 23, 208, 169, }, { 236, 86, 95, 186, 69, 189, 198, 201, 123, 240, 136, 38, 233, 168, 14, 99, }, { 158, 118, 35, 232, 22, 219, 111, 195, 180, 82, 123, 192, 250, 66, 102, 214, }, { 156, 146, 122, 14, 94, 86, 10, 101, 92, 63, 193, 91, 185, 29, 176, 5, }, { 209, 77, 211, 156, 29, 87, 185, 67, 238, 123, 167, 160, 135, 99, 85, 189, }, { 231, 214, 108, 49, 202, 230, 39, 225, 193, 61, 194, 56, 165, 134, 109, 242, }, { 184, 193, 17, 121, 196, 136, 95, 24, 215, 250, 135, 10, 133, 26, 33, 206, }, { 47, 211, 88, 252, 21, 133, 180, 85, 49, 8, 12, 79, 112, 41, 242, 90, }, { 226, 175, 19, 77, 126, 152, 62, 61, 166, 48, 40, 97, 227, 246, 105, 31, }, { 138, 81, 28, 219, 131, 224, 11, 53, 235, 102, 85, 103, 33, 65, 118, 228, }, { 215, 162, 56, 117, 197, 3, 22, 106, 21, 204, 170, 206, 66, 130, 236, 11, }, { 180, 220, 4, 104, 183, 32, 194, 74, 226, 87, 157, 214, 204, 27, 144, 97, }, { 41, 60, 179, 21, 205, 209, 27, 124, 202, 191, 1, 33, 181, 200, 75, 236, }, { 19, 186, 25, 169, 105, 200, 24, 140, 208, 84, 126, 101, 222, 44, 194, 12, }, { 152, 153, 200, 1, 206, 143, 192, 234, 79, 229, 118, 174, 63, 163, 223, 96, }, { 128, 163, 226, 35, 40, 28, 57, 78, 37, 124, 66, 213, 173, 161, 126, 253, }, { 166, 20, 208, 178, 250, 79, 9, 149, 70, 212, 190, 31, 210, 249, 57, 229, }, { 98, 12, 241, 110, 86, 132, 7, 115, 131, 76, 106, 180, 78, 87, 23, 226, }, { 179, 65, 34, 242, 75, 211, 190, 48, 109, 55, 205, 20, 201, 52, 66, 95, }, { 94, 101, 176, 59, 42, 201, 171, 170, 98, 16, 24, 158, 224, 82, 39, 180, }, { 114, 32, 124, 82, 83, 102, 169, 10, 207, 162, 243, 230, 19, 234, 104, 181, }, { 67, 38, 229, 101, 120, 36, 75, 210, 111, 132, 198, 188, 52, 32, 130, 196, }, { 52, 127, 230, 75, 159, 60, 251, 4, 199, 43, 223, 3, 97, 186, 238, 156, }, { 53, 13, 43, 56, 187, 155, 40, 87, 179, 252, 130, 175, 161, 116, 133, 20, }, { 82, 120, 165, 42, 89, 97, 54, 248, 87, 189, 2, 66, 169, 83, 150, 27, }, { 38, 183, 50, 145, 210, 83, 48, 219, 99, 168, 252, 202, 127, 88, 71, 24, }, { 125, 171, 253, 214, 76, 228, 130, 173, 102, 181, 14, 13, 217, 122, 100, 65, }, { 183, 74, 144, 253, 219, 10, 116, 191, 126, 237, 122, 225, 79, 138, 45, 58, }, { 10, 242, 254, 248, 171, 252, 50, 123, 206, 26, 23, 178, 140, 224, 8, 25, }, { 69, 201, 14, 140, 160, 112, 228, 251, 148, 51, 203, 210, 241, 193, 59, 114, }, { 129, 209, 47, 80, 12, 187, 234, 29, 81, 171, 31, 121, 109, 111, 21, 117, }, { 110, 17, 228, 127, 37, 44, 154, 33, 182, 225, 112, 104, 7, 86, 166, 77, }, { 83, 10, 104, 89, 125, 198, 229, 171, 35, 106, 95, 238, 105, 157, 253, 147, }, { 74, 66, 143, 8, 191, 242, 207, 92, 61, 36, 54, 57, 59, 81, 55, 134, }, { 121, 160, 79, 217, 220, 61, 72, 34, 117, 111, 185, 248, 95, 196, 11, 36, }, { 50, 144, 13, 162, 71, 104, 84, 45, 60, 156, 210, 109, 164, 91, 87, 42, }, { 97, 154, 101, 251, 58, 174, 177, 134, 31, 246, 141, 131, 205, 198, 170, 185, }, { 251, 231, 244, 28, 188, 172, 20, 202, 184, 126, 65, 182, 177, 58, 163, 10, }, { 57, 16, 62, 41, 200, 51, 181, 5, 134, 81, 152, 115, 232, 117, 52, 187, }, { 192, 19, 147, 211, 60, 18, 196, 105, 214, 66, 99, 94, 26, 16, 65, 98, }, { 250, 149, 57, 111, 152, 11, 199, 153, 204, 169, 28, 26, 113, 244, 200, 130, }, { 91, 28, 207, 71, 158, 183, 178, 118, 5, 29, 242, 199, 166, 34, 35, 89, }, { 164, 240, 137, 84, 178, 194, 108, 51, 174, 185, 4, 132, 145, 166, 239, 54, }, { 186, 37, 72, 159, 140, 5, 58, 190, 63, 151, 61, 145, 198, 69, 247, 29, }, { 218, 205, 224, 23, 146, 12, 88, 107, 84, 182, 237, 190, 203, 77, 54, 44, }, { 76, 173, 100, 225, 103, 166, 96, 117, 198, 147, 59, 87, 254, 176, 142, 48, }, { 5, 121, 127, 124, 180, 126, 25, 220, 103, 13, 234, 89, 70, 112, 4, 237, }, { 195, 133, 7, 70, 80, 56, 114, 156, 74, 248, 132, 105, 153, 129, 252, 57, }, { 58, 134, 170, 188, 164, 25, 3, 240, 26, 235, 127, 68, 107, 228, 137, 224, }, { 130, 71, 187, 197, 96, 145, 92, 232, 205, 17, 248, 78, 238, 254, 168, 46, }, { 24, 58, 42, 34, 230, 147, 249, 164, 106, 153, 52, 123, 146, 2, 161, 157, }, { 201, 119, 249, 190, 251, 196, 64, 231, 132, 226, 147, 219, 21, 97, 244, 32, }, { 104, 254, 15, 150, 253, 120, 53, 8, 77, 86, 125, 6, 194, 183, 31, 251, }, { 246, 136, 44, 126, 235, 163, 90, 203, 249, 4, 6, 198, 56, 245, 121, 45, }, { 99, 126, 60, 29, 114, 35, 212, 32, 247, 155, 55, 24, 142, 153, 124, 106, }, { 135, 62, 196, 185, 212, 239, 69, 52, 170, 28, 18, 23, 168, 142, 172, 195, }, { 73, 212, 27, 157, 211, 216, 121, 169, 161, 158, 209, 14, 184, 192, 138, 221, }, { 54, 155, 191, 173, 215, 177, 158, 162, 47, 70, 101, 152, 34, 229, 56, 79, }, { 145, 253, 162, 108, 9, 89, 68, 100, 29, 69, 134, 43, 48, 210, 106, 34, }, { 151, 18, 73, 133, 209, 13, 235, 77, 230, 242, 139, 69, 245, 51, 211, 148, }, { 51, 226, 192, 209, 99, 207, 135, 126, 72, 75, 143, 193, 100, 149, 60, 162, }, { 8, 22, 167, 30, 227, 113, 87, 221, 38, 119, 173, 41, 207, 191, 222, 202, }, { 124, 217, 48, 165, 104, 67, 81, 254, 18, 98, 83, 161, 25, 180, 15, 201, }, { 2, 228, 89, 230, 72, 141, 101, 166, 232, 109, 186, 155, 67, 95, 214, 211, }, { 119, 89, 3, 46, 231, 24, 176, 214, 168, 175, 25, 191, 85, 154, 108, 88, }, { 133, 218, 157, 95, 156, 98, 32, 146, 66, 113, 168, 140, 235, 209, 122, 16, }, { 102, 7, 67, 97, 198, 93, 205, 252, 144, 150, 221, 65, 200, 233, 120, 135, }, { 65, 194, 188, 131, 48, 169, 46, 116, 135, 233, 124, 39, 119, 127, 84, 23, }, { 48, 116, 84, 68, 15, 229, 49, 139, 212, 241, 104, 246, 231, 4, 129, 249, }, { 205, 124, 75, 177, 107, 29, 138, 104, 151, 56, 36, 46, 147, 223, 155, 69, }, { 208, 63, 30, 239, 57, 240, 106, 16, 154, 172, 250, 12, 71, 173, 62, 53, }, { 217, 91, 116, 130, 254, 38, 238, 158, 200, 12, 10, 137, 72, 220, 139, 119, }, { 169, 159, 81, 54, 229, 205, 34, 50, 239, 195, 67, 244, 24, 105, 53, 17, }, { 170, 9, 197, 163, 137, 231, 148, 199, 115, 121, 164, 195, 155, 248, 136, 74, }, { 197, 106, 236, 175, 136, 108, 221, 181, 177, 79, 137, 7, 92, 96, 69, 143, }, { 96, 232, 168, 136, 30, 9, 98, 213, 107, 33, 208, 47, 13, 8, 193, 49, }, { 248, 113, 96, 137, 208, 134, 162, 63, 36, 196, 166, 129, 50, 171, 30, 81, }, { 4, 11, 178, 15, 144, 217, 202, 143, 19, 218, 183, 245, 134, 190, 111, 101, }, { 144, 143, 111, 31, 45, 254, 151, 55, 105, 146, 219, 135, 240, 28, 1, 170, }, { 230, 164, 161, 66, 238, 65, 244, 178, 181, 234, 159, 148, 101, 72, 6, 122, }, { 150, 96, 132, 246, 245, 170, 56, 30, 146, 37, 214, 233, 53, 253, 184, 28, }, { 175, 112, 186, 223, 61, 153, 141, 27, 20, 116, 78, 154, 221, 136, 140, 167, }, { 198, 252, 120, 58, 228, 70, 107, 64, 45, 245, 110, 48, 223, 241, 248, 212, }, { 167, 102, 29, 193, 222, 232, 218, 198, 50, 3, 227, 179, 18, 55, 82, 109, }, { 161, 137, 246, 40, 6, 188, 117, 239, 201, 180, 238, 221, 215, 214, 235, 219, }, { 216, 41, 185, 241, 218, 129, 61, 205, 188, 219, 87, 37, 136, 18, 224, 255, }, { 30, 213, 193, 203, 62, 199, 86, 141, 145, 46, 57, 21, 87, 227, 24, 43, }, { 77, 223, 169, 146, 67, 1, 179, 38, 178, 68, 102, 251, 62, 126, 229, 184, }, { 100, 227, 26, 135, 142, 208, 168, 90, 120, 251, 103, 218, 139, 182, 174, 84, }, { 154, 125, 145, 231, 134, 2, 165, 76, 167, 136, 204, 53, 124, 252, 9, 179, }, { 227, 221, 222, 62, 90, 63, 237, 110, 210, 231, 117, 205, 35, 56, 2, 151, }, { 249, 3, 173, 250, 244, 33, 113, 108, 80, 19, 251, 45, 242, 101, 117, 217, }, { 247, 250, 225, 13, 207, 4, 137, 152, 141, 211, 91, 106, 248, 59, 18, 165, }, { 25, 72, 231, 81, 194, 52, 42, 247, 30, 78, 105, 215, 82, 204, 202, 21, }, { 131, 53, 118, 182, 68, 54, 143, 187, 185, 198, 165, 226, 46, 48, 195, 166, }, { 75, 48, 66, 123, 155, 85, 28, 15, 73, 243, 107, 149, 251, 159, 92, 14, }, { 79, 59, 240, 116, 11, 140, 214, 128, 90, 41, 220, 96, 125, 33, 51, 107, }, { 123, 68, 22, 63, 148, 176, 45, 132, 157, 2, 3, 99, 28, 155, 221, 247, }, { 239, 192, 203, 47, 41, 151, 112, 60, 231, 74, 111, 17, 106, 57, 179, 56, }, { 157, 224, 183, 125, 122, 241, 217, 54, 40, 232, 156, 247, 121, 211, 219, 141, }, { 116, 207, 151, 187, 139, 50, 6, 35, 52, 21, 254, 136, 214, 11, 209, 3, }, { 199, 142, 181, 73, 192, 225, 184, 19, 89, 34, 51, 156, 31, 63, 147, 92, }, { 202, 225, 109, 43, 151, 238, 246, 18, 24, 88, 116, 236, 150, 240, 73, 123, }, { 108, 245, 189, 153, 109, 161, 255, 135, 94, 140, 202, 243, 68, 9, 112, 158, }, { 243, 241, 83, 2, 95, 221, 67, 23, 158, 9, 236, 159, 126, 133, 125, 192, }, { 49, 6, 153, 55, 43, 66, 226, 216, 160, 38, 53, 90, 39, 202, 234, 113, }, { 62, 141, 24, 179, 52, 192, 201, 127, 9, 49, 200, 177, 237, 90, 230, 133, }, { 1, 114, 205, 115, 36, 167, 211, 83, 116, 215, 93, 172, 192, 206, 107, 136, }, { 219, 191, 45, 100, 182, 171, 139, 56, 32, 97, 176, 18, 11, 131, 93, 164, }, { 196, 24, 33, 220, 172, 203, 14, 230, 197, 152, 212, 171, 156, 174, 46, 7, }, { 225, 57, 135, 216, 18, 178, 136, 200, 58, 138, 207, 86, 96, 103, 212, 68, }, { 237, 36, 146, 201, 97, 26, 21, 154, 15, 39, 213, 138, 41, 102, 101, 235, }, { 224, 75, 74, 171, 54, 21, 91, 155, 78, 93, 146, 250, 160, 169, 191, 204, }, { 20, 39, 63, 51, 149, 59, 100, 246, 95, 52, 46, 167, 219, 3, 16, 50, }, { 223, 180, 159, 107, 38, 114, 65, 183, 51, 187, 7, 231, 141, 61, 50, 193, }, { 80, 156, 252, 204, 17, 236, 83, 94, 191, 208, 184, 217, 234, 12, 64, 200, }, { 190, 46, 250, 144, 28, 220, 240, 49, 44, 77, 138, 100, 64, 251, 152, 120, }, { 171, 123, 8, 208, 173, 64, 71, 148, 7, 174, 249, 111, 91, 54, 227, 194, }, { 174, 2, 119, 172, 25, 62, 94, 72, 96, 163, 19, 54, 29, 70, 231, 47, }, { 81, 238, 49, 191, 53, 75, 128, 13, 203, 7, 229, 117, 42, 194, 43, 64, }, { 18, 200, 212, 218, 77, 111, 203, 223, 164, 131, 35, 201, 30, 226, 169, 132, }, { 143, 40, 99, 167, 55, 158, 18, 233, 140, 107, 191, 62, 103, 49, 114, 9, }, { 29, 67, 85, 94, 82, 237, 224, 120, 13, 148, 222, 34, 212, 114, 165, 112, }, { 244, 108, 117, 152, 163, 46, 63, 109, 17, 105, 188, 93, 123, 170, 175, 254, }, { 211, 169, 138, 122, 85, 218, 220, 229, 6, 22, 29, 59, 196, 60, 131, 110, }, { 255, 236, 70, 19, 44, 117, 222, 69, 171, 164, 246, 67, 55, 132, 204, 111, }, { 71, 45, 87, 106, 232, 253, 129, 93, 124, 94, 113, 73, 178, 158, 237, 161, }, { 21, 85, 242, 64, 177, 156, 183, 165, 43, 227, 115, 11, 27, 205, 123, 186, }, { 139, 35, 209, 168, 167, 71, 216, 102, 159, 177, 8, 203, 225, 143, 29, 108, }, { 160, 251, 59, 91, 34, 27, 166, 188, 189, 99, 179, 113, 23, 24, 128, 83, }, { 245, 30, 184, 235, 135, 137, 236, 62, 101, 190, 225, 241, 187, 100, 196, 118, }, { 40, 78, 126, 102, 233, 118, 200, 47, 190, 104, 92, 141, 117, 6, 32, 100, }, { 87, 1, 218, 86, 237, 31, 47, 36, 48, 176, 232, 27, 239, 35, 146, 246, }, { 178, 51, 239, 129, 111, 116, 109, 99, 25, 224, 144, 184, 9, 250, 41, 215, }, { 36, 83, 107, 119, 154, 222, 85, 125, 139, 197, 70, 81, 60, 7, 145, 203, }, { 207, 152, 18, 87, 35, 144, 239, 206, 127, 85, 158, 181, 208, 128, 77, 150, }, { 137, 199, 136, 78, 239, 202, 189, 192, 119, 220, 178, 80, 162, 208, 203, 191, }, { 221, 80, 198, 141, 110, 255, 36, 17, 219, 214, 189, 124, 206, 98, 228, 18, }, { 85, 229, 131, 176, 165, 146, 74, 130, 216, 221, 82, 128, 172, 124, 68, 37, }, { 43, 216, 234, 243, 133, 92, 126, 218, 34, 210, 187, 186, 246, 151, 157, 63, }, { 155, 15, 92, 148, 162, 165, 118, 31, 211, 95, 145, 153, 188, 50, 98, 59, }, { 235, 203, 121, 32, 185, 78, 186, 179, 244, 144, 216, 228, 236, 135, 220, 93, }, { 206, 234, 223, 36, 7, 55, 60, 157, 11, 130, 195, 25, 16, 78, 38, 30, }, { 229, 50, 53, 215, 130, 107, 66, 71, 41, 80, 120, 163, 230, 217, 187, 33, }, { 177, 165, 123, 20, 3, 94, 219, 150, 133, 90, 119, 143, 138, 107, 148, 140, }, { 34, 188, 128, 158, 66, 138, 250, 84, 112, 114, 75, 63, 249, 230, 40, 125, }, { 189, 184, 110, 5, 112, 246, 70, 196, 176, 247, 109, 83, 195, 106, 37, 35, }, { 233, 47, 32, 198, 241, 195, 223, 21, 28, 253, 98, 127, 175, 216, 10, 142, }, { 35, 206, 77, 237, 102, 45, 41, 7, 4, 165, 22, 147, 57, 40, 67, 245, }, { 117, 189, 90, 200, 175, 149, 213, 112, 64, 194, 163, 36, 22, 197, 186, 139, }, { 159, 4, 238, 155, 50, 124, 188, 144, 192, 133, 38, 108, 58, 140, 13, 94, }, { 162, 31, 98, 189, 106, 150, 195, 26, 85, 14, 9, 234, 84, 71, 86, 128, }, { 15, 139, 129, 132, 31, 130, 43, 167, 169, 23, 253, 235, 202, 144, 12, 244, }, { 84, 151, 78, 195, 129, 53, 153, 209, 172, 10, 15, 44, 108, 178, 47, 173, }, { 134, 76, 9, 202, 240, 72, 150, 103, 222, 203, 79, 187, 104, 64, 199, 75, }, { 147, 25, 251, 138, 65, 212, 33, 194, 245, 40, 60, 176, 115, 141, 188, 241, }, { 90, 110, 2, 52, 186, 16, 97, 37, 113, 202, 175, 107, 102, 236, 72, 209, }, { 61, 27, 140, 38, 88, 234, 127, 138, 149, 139, 47, 134, 110, 203, 91, 222, }, { 148, 132, 221, 16, 189, 39, 93, 184, 122, 72, 108, 114, 118, 162, 110, 207, }, { 86, 115, 23, 37, 201, 184, 252, 119, 68, 103, 181, 183, 47, 237, 249, 126, }, { 191, 92, 55, 227, 56, 123, 35, 98, 88, 154, 215, 200, 128, 53, 243, 240, }, { 149, 246, 16, 99, 153, 128, 142, 235, 14, 159, 49, 222, 182, 108, 5, 71, }, { 185, 179, 220, 10, 224, 47, 140, 75, 163, 45, 218, 166, 69, 212, 74, 70, }, { 17, 94, 64, 79, 33, 69, 125, 42, 56, 57, 196, 254, 157, 115, 20, 223, }, { 11, 128, 51, 139, 143, 91, 225, 40, 186, 205, 74, 30, 76, 46, 99, 145, }, { 113, 182, 232, 199, 63, 76, 31, 255, 83, 24, 20, 209, 144, 123, 213, 238, }, { 176, 215, 182, 103, 39, 249, 8, 197, 241, 141, 42, 35, 74, 165, 255, 4, }, { 28, 49, 152, 45, 118, 74, 51, 43, 121, 67, 131, 142, 20, 188, 206, 248, }, { 220, 34, 11, 254, 74, 88, 247, 66, 175, 1, 224, 208, 14, 172, 143, 154, }, { 168, 237, 156, 69, 193, 106, 241, 97, 155, 20, 30, 88, 216, 167, 94, 153, }, { 193, 97, 94, 160, 24, 181, 23, 58, 162, 149, 62, 242, 218, 222, 42, 234, }, { 42, 170, 39, 128, 161, 251, 173, 137, 86, 5, 230, 22, 54, 89, 246, 183, }, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 172, 230, 46, 74, 81, 179, 59, 238, 136, 206, 169, 173, 94, 25, 49, 252, }, { 72, 166, 214, 238, 247, 127, 170, 250, 213, 73, 140, 162, 120, 14, 225, 85, }, { 122, 54, 219, 76, 176, 23, 254, 215, 233, 213, 94, 207, 220, 85, 182, 127, }, }, }; const grasshopper_w128_t grasshopper_l_dec128[GRASSHOPPER_MAX_BIT_PARTS][256] = { { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 1, 148, 132, 221, 16, 189, 39, 93, 184, 122, 72, 108, 114, 118, 162, 110, }, { 2, 235, 203, 121, 32, 185, 78, 186, 179, 244, 144, 216, 228, 236, 135, 220, }, { 3, 127, 79, 164, 48, 4, 105, 231, 11, 142, 216, 180, 150, 154, 37, 178, }, { 4, 21, 85, 242, 64, 177, 156, 183, 165, 43, 227, 115, 11, 27, 205, 123, }, { 5, 129, 209, 47, 80, 12, 187, 234, 29, 81, 171, 31, 121, 109, 111, 21, }, { 6, 254, 158, 139, 96, 8, 210, 13, 22, 223, 115, 171, 239, 247, 74, 167, }, { 7, 106, 26, 86, 112, 181, 245, 80, 174, 165, 59, 199, 157, 129, 232, 201, }, { 8, 42, 170, 39, 128, 161, 251, 173, 137, 86, 5, 230, 22, 54, 89, 246, }, { 9, 190, 46, 250, 144, 28, 220, 240, 49, 44, 77, 138, 100, 64, 251, 152, }, { 10, 193, 97, 94, 160, 24, 181, 23, 58, 162, 149, 62, 242, 218, 222, 42, }, { 11, 85, 229, 131, 176, 165, 146, 74, 130, 216, 221, 82, 128, 172, 124, 68, }, { 12, 63, 255, 213, 192, 16, 103, 26, 44, 125, 230, 149, 29, 45, 148, 141, }, { 13, 171, 123, 8, 208, 173, 64, 71, 148, 7, 174, 249, 111, 91, 54, 227, }, { 14, 212, 52, 172, 224, 169, 41, 160, 159, 137, 118, 77, 249, 193, 19, 81, }, { 15, 64, 176, 113, 240, 20, 14, 253, 39, 243, 62, 33, 139, 183, 177, 63, }, { 16, 84, 151, 78, 195, 129, 53, 153, 209, 172, 10, 15, 44, 108, 178, 47, }, { 17, 192, 19, 147, 211, 60, 18, 196, 105, 214, 66, 99, 94, 26, 16, 65, }, { 18, 191, 92, 55, 227, 56, 123, 35, 98, 88, 154, 215, 200, 128, 53, 243, }, { 19, 43, 216, 234, 243, 133, 92, 126, 218, 34, 210, 187, 186, 246, 151, 157, }, { 20, 65, 194, 188, 131, 48, 169, 46, 116, 135, 233, 124, 39, 119, 127, 84, }, { 21, 213, 70, 97, 147, 141, 142, 115, 204, 253, 161, 16, 85, 1, 221, 58, }, { 22, 170, 9, 197, 163, 137, 231, 148, 199, 115, 121, 164, 195, 155, 248, 136, }, { 23, 62, 141, 24, 179, 52, 192, 201, 127, 9, 49, 200, 177, 237, 90, 230, }, { 24, 126, 61, 105, 67, 32, 206, 52, 88, 250, 15, 233, 58, 90, 235, 217, }, { 25, 234, 185, 180, 83, 157, 233, 105, 224, 128, 71, 133, 72, 44, 73, 183, }, { 26, 149, 246, 16, 99, 153, 128, 142, 235, 14, 159, 49, 222, 182, 108, 5, }, { 27, 1, 114, 205, 115, 36, 167, 211, 83, 116, 215, 93, 172, 192, 206, 107, }, { 28, 107, 104, 155, 3, 145, 82, 131, 253, 209, 236, 154, 49, 65, 38, 162, }, { 29, 255, 236, 70, 19, 44, 117, 222, 69, 171, 164, 246, 67, 55, 132, 204, }, { 30, 128, 163, 226, 35, 40, 28, 57, 78, 37, 124, 66, 213, 173, 161, 126, }, { 31, 20, 39, 63, 51, 149, 59, 100, 246, 95, 52, 46, 167, 219, 3, 16, }, { 32, 168, 237, 156, 69, 193, 106, 241, 97, 155, 20, 30, 88, 216, 167, 94, }, { 33, 60, 105, 65, 85, 124, 77, 172, 217, 225, 92, 114, 42, 174, 5, 48, }, { 34, 67, 38, 229, 101, 120, 36, 75, 210, 111, 132, 198, 188, 52, 32, 130, }, { 35, 215, 162, 56, 117, 197, 3, 22, 106, 21, 204, 170, 206, 66, 130, 236, }, { 36, 189, 184, 110, 5, 112, 246, 70, 196, 176, 247, 109, 83, 195, 106, 37, }, { 37, 41, 60, 179, 21, 205, 209, 27, 124, 202, 191, 1, 33, 181, 200, 75, }, { 38, 86, 115, 23, 37, 201, 184, 252, 119, 68, 103, 181, 183, 47, 237, 249, }, { 39, 194, 247, 202, 53, 116, 159, 161, 207, 62, 47, 217, 197, 89, 79, 151, }, { 40, 130, 71, 187, 197, 96, 145, 92, 232, 205, 17, 248, 78, 238, 254, 168, }, { 41, 22, 195, 102, 213, 221, 182, 1, 80, 183, 89, 148, 60, 152, 92, 198, }, { 42, 105, 140, 194, 229, 217, 223, 230, 91, 57, 129, 32, 170, 2, 121, 116, }, { 43, 253, 8, 31, 245, 100, 248, 187, 227, 67, 201, 76, 216, 116, 219, 26, }, { 44, 151, 18, 73, 133, 209, 13, 235, 77, 230, 242, 139, 69, 245, 51, 211, }, { 45, 3, 150, 148, 149, 108, 42, 182, 245, 156, 186, 231, 55, 131, 145, 189, }, { 46, 124, 217, 48, 165, 104, 67, 81, 254, 18, 98, 83, 161, 25, 180, 15, }, { 47, 232, 93, 237, 181, 213, 100, 12, 70, 104, 42, 63, 211, 111, 22, 97, }, { 48, 252, 122, 210, 134, 64, 95, 104, 176, 55, 30, 17, 116, 180, 21, 113, }, { 49, 104, 254, 15, 150, 253, 120, 53, 8, 77, 86, 125, 6, 194, 183, 31, }, { 50, 23, 177, 171, 166, 249, 17, 210, 3, 195, 142, 201, 144, 88, 146, 173, }, { 51, 131, 53, 118, 182, 68, 54, 143, 187, 185, 198, 165, 226, 46, 48, 195, }, { 52, 233, 47, 32, 198, 241, 195, 223, 21, 28, 253, 98, 127, 175, 216, 10, }, { 53, 125, 171, 253, 214, 76, 228, 130, 173, 102, 181, 14, 13, 217, 122, 100, }, { 54, 2, 228, 89, 230, 72, 141, 101, 166, 232, 109, 186, 155, 67, 95, 214, }, { 55, 150, 96, 132, 246, 245, 170, 56, 30, 146, 37, 214, 233, 53, 253, 184, }, { 56, 214, 208, 245, 6, 225, 164, 197, 57, 97, 27, 247, 98, 130, 76, 135, }, { 57, 66, 84, 40, 22, 92, 131, 152, 129, 27, 83, 155, 16, 244, 238, 233, }, { 58, 61, 27, 140, 38, 88, 234, 127, 138, 149, 139, 47, 134, 110, 203, 91, }, { 59, 169, 159, 81, 54, 229, 205, 34, 50, 239, 195, 67, 244, 24, 105, 53, }, { 60, 195, 133, 7, 70, 80, 56, 114, 156, 74, 248, 132, 105, 153, 129, 252, }, { 61, 87, 1, 218, 86, 237, 31, 47, 36, 48, 176, 232, 27, 239, 35, 146, }, { 62, 40, 78, 126, 102, 233, 118, 200, 47, 190, 104, 92, 141, 117, 6, 32, }, { 63, 188, 202, 163, 118, 84, 81, 149, 151, 196, 32, 48, 255, 3, 164, 78, }, { 64, 147, 25, 251, 138, 65, 212, 33, 194, 245, 40, 60, 176, 115, 141, 188, }, { 65, 7, 157, 38, 154, 252, 243, 124, 122, 143, 96, 80, 194, 5, 47, 210, }, { 66, 120, 210, 130, 170, 248, 154, 155, 113, 1, 184, 228, 84, 159, 10, 96, }, { 67, 236, 86, 95, 186, 69, 189, 198, 201, 123, 240, 136, 38, 233, 168, 14, }, { 68, 134, 76, 9, 202, 240, 72, 150, 103, 222, 203, 79, 187, 104, 64, 199, }, { 69, 18, 200, 212, 218, 77, 111, 203, 223, 164, 131, 35, 201, 30, 226, 169, }, { 70, 109, 135, 112, 234, 73, 6, 44, 212, 42, 91, 151, 95, 132, 199, 27, }, { 71, 249, 3, 173, 250, 244, 33, 113, 108, 80, 19, 251, 45, 242, 101, 117, }, { 72, 185, 179, 220, 10, 224, 47, 140, 75, 163, 45, 218, 166, 69, 212, 74, }, { 73, 45, 55, 1, 26, 93, 8, 209, 243, 217, 101, 182, 212, 51, 118, 36, }, { 74, 82, 120, 165, 42, 89, 97, 54, 248, 87, 189, 2, 66, 169, 83, 150, }, { 75, 198, 252, 120, 58, 228, 70, 107, 64, 45, 245, 110, 48, 223, 241, 248, }, { 76, 172, 230, 46, 74, 81, 179, 59, 238, 136, 206, 169, 173, 94, 25, 49, }, { 77, 56, 98, 243, 90, 236, 148, 102, 86, 242, 134, 197, 223, 40, 187, 95, }, { 78, 71, 45, 87, 106, 232, 253, 129, 93, 124, 94, 113, 73, 178, 158, 237, }, { 79, 211, 169, 138, 122, 85, 218, 220, 229, 6, 22, 29, 59, 196, 60, 131, }, { 80, 199, 142, 181, 73, 192, 225, 184, 19, 89, 34, 51, 156, 31, 63, 147, }, { 81, 83, 10, 104, 89, 125, 198, 229, 171, 35, 106, 95, 238, 105, 157, 253, }, { 82, 44, 69, 204, 105, 121, 175, 2, 160, 173, 178, 235, 120, 243, 184, 79, }, { 83, 184, 193, 17, 121, 196, 136, 95, 24, 215, 250, 135, 10, 133, 26, 33, }, { 84, 210, 219, 71, 9, 113, 125, 15, 182, 114, 193, 64, 151, 4, 242, 232, }, { 85, 70, 95, 154, 25, 204, 90, 82, 14, 8, 137, 44, 229, 114, 80, 134, }, { 86, 57, 16, 62, 41, 200, 51, 181, 5, 134, 81, 152, 115, 232, 117, 52, }, { 87, 173, 148, 227, 57, 117, 20, 232, 189, 252, 25, 244, 1, 158, 215, 90, }, { 88, 237, 36, 146, 201, 97, 26, 21, 154, 15, 39, 213, 138, 41, 102, 101, }, { 89, 121, 160, 79, 217, 220, 61, 72, 34, 117, 111, 185, 248, 95, 196, 11, }, { 90, 6, 239, 235, 233, 216, 84, 175, 41, 251, 183, 13, 110, 197, 225, 185, }, { 91, 146, 107, 54, 249, 101, 115, 242, 145, 129, 255, 97, 28, 179, 67, 215, }, { 92, 248, 113, 96, 137, 208, 134, 162, 63, 36, 196, 166, 129, 50, 171, 30, }, { 93, 108, 245, 189, 153, 109, 161, 255, 135, 94, 140, 202, 243, 68, 9, 112, }, { 94, 19, 186, 25, 169, 105, 200, 24, 140, 208, 84, 126, 101, 222, 44, 194, }, { 95, 135, 62, 196, 185, 212, 239, 69, 52, 170, 28, 18, 23, 168, 142, 172, }, { 96, 59, 244, 103, 207, 128, 190, 208, 163, 110, 60, 34, 232, 171, 42, 226, }, { 97, 175, 112, 186, 223, 61, 153, 141, 27, 20, 116, 78, 154, 221, 136, 140, }, { 98, 208, 63, 30, 239, 57, 240, 106, 16, 154, 172, 250, 12, 71, 173, 62, }, { 99, 68, 187, 195, 255, 132, 215, 55, 168, 224, 228, 150, 126, 49, 15, 80, }, { 100, 46, 161, 149, 143, 49, 34, 103, 6, 69, 223, 81, 227, 176, 231, 153, }, { 101, 186, 37, 72, 159, 140, 5, 58, 190, 63, 151, 61, 145, 198, 69, 247, }, { 102, 197, 106, 236, 175, 136, 108, 221, 181, 177, 79, 137, 7, 92, 96, 69, }, { 103, 81, 238, 49, 191, 53, 75, 128, 13, 203, 7, 229, 117, 42, 194, 43, }, { 104, 17, 94, 64, 79, 33, 69, 125, 42, 56, 57, 196, 254, 157, 115, 20, }, { 105, 133, 218, 157, 95, 156, 98, 32, 146, 66, 113, 168, 140, 235, 209, 122, }, { 106, 250, 149, 57, 111, 152, 11, 199, 153, 204, 169, 28, 26, 113, 244, 200, }, { 107, 110, 17, 228, 127, 37, 44, 154, 33, 182, 225, 112, 104, 7, 86, 166, }, { 108, 4, 11, 178, 15, 144, 217, 202, 143, 19, 218, 183, 245, 134, 190, 111, }, { 109, 144, 143, 111, 31, 45, 254, 151, 55, 105, 146, 219, 135, 240, 28, 1, }, { 110, 239, 192, 203, 47, 41, 151, 112, 60, 231, 74, 111, 17, 106, 57, 179, }, { 111, 123, 68, 22, 63, 148, 176, 45, 132, 157, 2, 3, 99, 28, 155, 221, }, { 112, 111, 99, 41, 12, 1, 139, 73, 114, 194, 54, 45, 196, 199, 152, 205, }, { 113, 251, 231, 244, 28, 188, 172, 20, 202, 184, 126, 65, 182, 177, 58, 163, }, { 114, 132, 168, 80, 44, 184, 197, 243, 193, 54, 166, 245, 32, 43, 31, 17, }, { 115, 16, 44, 141, 60, 5, 226, 174, 121, 76, 238, 153, 82, 93, 189, 127, }, { 116, 122, 54, 219, 76, 176, 23, 254, 215, 233, 213, 94, 207, 220, 85, 182, }, { 117, 238, 178, 6, 92, 13, 48, 163, 111, 147, 157, 50, 189, 170, 247, 216, }, { 118, 145, 253, 162, 108, 9, 89, 68, 100, 29, 69, 134, 43, 48, 210, 106, }, { 119, 5, 121, 127, 124, 180, 126, 25, 220, 103, 13, 234, 89, 70, 112, 4, }, { 120, 69, 201, 14, 140, 160, 112, 228, 251, 148, 51, 203, 210, 241, 193, 59, }, { 121, 209, 77, 211, 156, 29, 87, 185, 67, 238, 123, 167, 160, 135, 99, 85, }, { 122, 174, 2, 119, 172, 25, 62, 94, 72, 96, 163, 19, 54, 29, 70, 231, }, { 123, 58, 134, 170, 188, 164, 25, 3, 240, 26, 235, 127, 68, 107, 228, 137, }, { 124, 80, 156, 252, 204, 17, 236, 83, 94, 191, 208, 184, 217, 234, 12, 64, }, { 125, 196, 24, 33, 220, 172, 203, 14, 230, 197, 152, 212, 171, 156, 174, 46, }, { 126, 187, 87, 133, 236, 168, 162, 233, 237, 75, 64, 96, 61, 6, 139, 156, }, { 127, 47, 211, 88, 252, 21, 133, 180, 85, 49, 8, 12, 79, 112, 41, 242, }, { 128, 229, 50, 53, 215, 130, 107, 66, 71, 41, 80, 120, 163, 230, 217, 187, }, { 129, 113, 182, 232, 199, 63, 76, 31, 255, 83, 24, 20, 209, 144, 123, 213, }, { 130, 14, 249, 76, 247, 59, 37, 248, 244, 221, 192, 160, 71, 10, 94, 103, }, { 131, 154, 125, 145, 231, 134, 2, 165, 76, 167, 136, 204, 53, 124, 252, 9, }, { 132, 240, 103, 199, 151, 51, 247, 245, 226, 2, 179, 11, 168, 253, 20, 192, }, { 133, 100, 227, 26, 135, 142, 208, 168, 90, 120, 251, 103, 218, 139, 182, 174, }, { 134, 27, 172, 190, 183, 138, 185, 79, 81, 246, 35, 211, 76, 17, 147, 28, }, { 135, 143, 40, 99, 167, 55, 158, 18, 233, 140, 107, 191, 62, 103, 49, 114, }, { 136, 207, 152, 18, 87, 35, 144, 239, 206, 127, 85, 158, 181, 208, 128, 77, }, { 137, 91, 28, 207, 71, 158, 183, 178, 118, 5, 29, 242, 199, 166, 34, 35, }, { 138, 36, 83, 107, 119, 154, 222, 85, 125, 139, 197, 70, 81, 60, 7, 145, }, { 139, 176, 215, 182, 103, 39, 249, 8, 197, 241, 141, 42, 35, 74, 165, 255, }, { 140, 218, 205, 224, 23, 146, 12, 88, 107, 84, 182, 237, 190, 203, 77, 54, }, { 141, 78, 73, 61, 7, 47, 43, 5, 211, 46, 254, 129, 204, 189, 239, 88, }, { 142, 49, 6, 153, 55, 43, 66, 226, 216, 160, 38, 53, 90, 39, 202, 234, }, { 143, 165, 130, 68, 39, 150, 101, 191, 96, 218, 110, 89, 40, 81, 104, 132, }, { 144, 177, 165, 123, 20, 3, 94, 219, 150, 133, 90, 119, 143, 138, 107, 148, }, { 145, 37, 33, 166, 4, 190, 121, 134, 46, 255, 18, 27, 253, 252, 201, 250, }, { 146, 90, 110, 2, 52, 186, 16, 97, 37, 113, 202, 175, 107, 102, 236, 72, }, { 147, 206, 234, 223, 36, 7, 55, 60, 157, 11, 130, 195, 25, 16, 78, 38, }, { 148, 164, 240, 137, 84, 178, 194, 108, 51, 174, 185, 4, 132, 145, 166, 239, }, { 149, 48, 116, 84, 68, 15, 229, 49, 139, 212, 241, 104, 246, 231, 4, 129, }, { 150, 79, 59, 240, 116, 11, 140, 214, 128, 90, 41, 220, 96, 125, 33, 51, }, { 151, 219, 191, 45, 100, 182, 171, 139, 56, 32, 97, 176, 18, 11, 131, 93, }, { 152, 155, 15, 92, 148, 162, 165, 118, 31, 211, 95, 145, 153, 188, 50, 98, }, { 153, 15, 139, 129, 132, 31, 130, 43, 167, 169, 23, 253, 235, 202, 144, 12, }, { 154, 112, 196, 37, 180, 27, 235, 204, 172, 39, 207, 73, 125, 80, 181, 190, }, { 155, 228, 64, 248, 164, 166, 204, 145, 20, 93, 135, 37, 15, 38, 23, 208, }, { 156, 142, 90, 174, 212, 19, 57, 193, 186, 248, 188, 226, 146, 167, 255, 25, }, { 157, 26, 222, 115, 196, 174, 30, 156, 2, 130, 244, 142, 224, 209, 93, 119, }, { 158, 101, 145, 215, 244, 170, 119, 123, 9, 12, 44, 58, 118, 75, 120, 197, }, { 159, 241, 21, 10, 228, 23, 80, 38, 177, 118, 100, 86, 4, 61, 218, 171, }, { 160, 77, 223, 169, 146, 67, 1, 179, 38, 178, 68, 102, 251, 62, 126, 229, }, { 161, 217, 91, 116, 130, 254, 38, 238, 158, 200, 12, 10, 137, 72, 220, 139, }, { 162, 166, 20, 208, 178, 250, 79, 9, 149, 70, 212, 190, 31, 210, 249, 57, }, { 163, 50, 144, 13, 162, 71, 104, 84, 45, 60, 156, 210, 109, 164, 91, 87, }, { 164, 88, 138, 91, 210, 242, 157, 4, 131, 153, 167, 21, 240, 37, 179, 158, }, { 165, 204, 14, 134, 194, 79, 186, 89, 59, 227, 239, 121, 130, 83, 17, 240, }, { 166, 179, 65, 34, 242, 75, 211, 190, 48, 109, 55, 205, 20, 201, 52, 66, }, { 167, 39, 197, 255, 226, 246, 244, 227, 136, 23, 127, 161, 102, 191, 150, 44, }, { 168, 103, 117, 142, 18, 226, 250, 30, 175, 228, 65, 128, 237, 8, 39, 19, }, { 169, 243, 241, 83, 2, 95, 221, 67, 23, 158, 9, 236, 159, 126, 133, 125, }, { 170, 140, 190, 247, 50, 91, 180, 164, 28, 16, 209, 88, 9, 228, 160, 207, }, { 171, 24, 58, 42, 34, 230, 147, 249, 164, 106, 153, 52, 123, 146, 2, 161, }, { 172, 114, 32, 124, 82, 83, 102, 169, 10, 207, 162, 243, 230, 19, 234, 104, }, { 173, 230, 164, 161, 66, 238, 65, 244, 178, 181, 234, 159, 148, 101, 72, 6, }, { 174, 153, 235, 5, 114, 234, 40, 19, 185, 59, 50, 43, 2, 255, 109, 180, }, { 175, 13, 111, 216, 98, 87, 15, 78, 1, 65, 122, 71, 112, 137, 207, 218, }, { 176, 25, 72, 231, 81, 194, 52, 42, 247, 30, 78, 105, 215, 82, 204, 202, }, { 177, 141, 204, 58, 65, 127, 19, 119, 79, 100, 6, 5, 165, 36, 110, 164, }, { 178, 242, 131, 158, 113, 123, 122, 144, 68, 234, 222, 177, 51, 190, 75, 22, }, { 179, 102, 7, 67, 97, 198, 93, 205, 252, 144, 150, 221, 65, 200, 233, 120, }, { 180, 12, 29, 21, 17, 115, 168, 157, 82, 53, 173, 26, 220, 73, 1, 177, }, { 181, 152, 153, 200, 1, 206, 143, 192, 234, 79, 229, 118, 174, 63, 163, 223, }, { 182, 231, 214, 108, 49, 202, 230, 39, 225, 193, 61, 194, 56, 165, 134, 109, }, { 183, 115, 82, 177, 33, 119, 193, 122, 89, 187, 117, 174, 74, 211, 36, 3, }, { 184, 51, 226, 192, 209, 99, 207, 135, 126, 72, 75, 143, 193, 100, 149, 60, }, { 185, 167, 102, 29, 193, 222, 232, 218, 198, 50, 3, 227, 179, 18, 55, 82, }, { 186, 216, 41, 185, 241, 218, 129, 61, 205, 188, 219, 87, 37, 136, 18, 224, }, { 187, 76, 173, 100, 225, 103, 166, 96, 117, 198, 147, 59, 87, 254, 176, 142, }, { 188, 38, 183, 50, 145, 210, 83, 48, 219, 99, 168, 252, 202, 127, 88, 71, }, { 189, 178, 51, 239, 129, 111, 116, 109, 99, 25, 224, 144, 184, 9, 250, 41, }, { 190, 205, 124, 75, 177, 107, 29, 138, 104, 151, 56, 36, 46, 147, 223, 155, }, { 191, 89, 248, 150, 161, 214, 58, 215, 208, 237, 112, 72, 92, 229, 125, 245, }, { 192, 118, 43, 206, 93, 195, 191, 99, 133, 220, 120, 68, 19, 149, 84, 7, }, { 193, 226, 175, 19, 77, 126, 152, 62, 61, 166, 48, 40, 97, 227, 246, 105, }, { 194, 157, 224, 183, 125, 122, 241, 217, 54, 40, 232, 156, 247, 121, 211, 219, }, { 195, 9, 100, 106, 109, 199, 214, 132, 142, 82, 160, 240, 133, 15, 113, 181, }, { 196, 99, 126, 60, 29, 114, 35, 212, 32, 247, 155, 55, 24, 142, 153, 124, }, { 197, 247, 250, 225, 13, 207, 4, 137, 152, 141, 211, 91, 106, 248, 59, 18, }, { 198, 136, 181, 69, 61, 203, 109, 110, 147, 3, 11, 239, 252, 98, 30, 160, }, { 199, 28, 49, 152, 45, 118, 74, 51, 43, 121, 67, 131, 142, 20, 188, 206, }, { 200, 92, 129, 233, 221, 98, 68, 206, 12, 138, 125, 162, 5, 163, 13, 241, }, { 201, 200, 5, 52, 205, 223, 99, 147, 180, 240, 53, 206, 119, 213, 175, 159, }, { 202, 183, 74, 144, 253, 219, 10, 116, 191, 126, 237, 122, 225, 79, 138, 45, }, { 203, 35, 206, 77, 237, 102, 45, 41, 7, 4, 165, 22, 147, 57, 40, 67, }, { 204, 73, 212, 27, 157, 211, 216, 121, 169, 161, 158, 209, 14, 184, 192, 138, }, { 205, 221, 80, 198, 141, 110, 255, 36, 17, 219, 214, 189, 124, 206, 98, 228, }, { 206, 162, 31, 98, 189, 106, 150, 195, 26, 85, 14, 9, 234, 84, 71, 86, }, { 207, 54, 155, 191, 173, 215, 177, 158, 162, 47, 70, 101, 152, 34, 229, 56, }, { 208, 34, 188, 128, 158, 66, 138, 250, 84, 112, 114, 75, 63, 249, 230, 40, }, { 209, 182, 56, 93, 142, 255, 173, 167, 236, 10, 58, 39, 77, 143, 68, 70, }, { 210, 201, 119, 249, 190, 251, 196, 64, 231, 132, 226, 147, 219, 21, 97, 244, }, { 211, 93, 243, 36, 174, 70, 227, 29, 95, 254, 170, 255, 169, 99, 195, 154, }, { 212, 55, 233, 114, 222, 243, 22, 77, 241, 91, 145, 56, 52, 226, 43, 83, }, { 213, 163, 109, 175, 206, 78, 49, 16, 73, 33, 217, 84, 70, 148, 137, 61, }, { 214, 220, 34, 11, 254, 74, 88, 247, 66, 175, 1, 224, 208, 14, 172, 143, }, { 215, 72, 166, 214, 238, 247, 127, 170, 250, 213, 73, 140, 162, 120, 14, 225, }, { 216, 8, 22, 167, 30, 227, 113, 87, 221, 38, 119, 173, 41, 207, 191, 222, }, { 217, 156, 146, 122, 14, 94, 86, 10, 101, 92, 63, 193, 91, 185, 29, 176, }, { 218, 227, 221, 222, 62, 90, 63, 237, 110, 210, 231, 117, 205, 35, 56, 2, }, { 219, 119, 89, 3, 46, 231, 24, 176, 214, 168, 175, 25, 191, 85, 154, 108, }, { 220, 29, 67, 85, 94, 82, 237, 224, 120, 13, 148, 222, 34, 212, 114, 165, }, { 221, 137, 199, 136, 78, 239, 202, 189, 192, 119, 220, 178, 80, 162, 208, 203, }, { 222, 246, 136, 44, 126, 235, 163, 90, 203, 249, 4, 6, 198, 56, 245, 121, }, { 223, 98, 12, 241, 110, 86, 132, 7, 115, 131, 76, 106, 180, 78, 87, 23, }, { 224, 222, 198, 82, 24, 2, 213, 146, 228, 71, 108, 90, 75, 77, 243, 89, }, { 225, 74, 66, 143, 8, 191, 242, 207, 92, 61, 36, 54, 57, 59, 81, 55, }, { 226, 53, 13, 43, 56, 187, 155, 40, 87, 179, 252, 130, 175, 161, 116, 133, }, { 227, 161, 137, 246, 40, 6, 188, 117, 239, 201, 180, 238, 221, 215, 214, 235, }, { 228, 203, 147, 160, 88, 179, 73, 37, 65, 108, 143, 41, 64, 86, 62, 34, }, { 229, 95, 23, 125, 72, 14, 110, 120, 249, 22, 199, 69, 50, 32, 156, 76, }, { 230, 32, 88, 217, 120, 10, 7, 159, 242, 152, 31, 241, 164, 186, 185, 254, }, { 231, 180, 220, 4, 104, 183, 32, 194, 74, 226, 87, 157, 214, 204, 27, 144, }, { 232, 244, 108, 117, 152, 163, 46, 63, 109, 17, 105, 188, 93, 123, 170, 175, }, { 233, 96, 232, 168, 136, 30, 9, 98, 213, 107, 33, 208, 47, 13, 8, 193, }, { 234, 31, 167, 12, 184, 26, 96, 133, 222, 229, 249, 100, 185, 151, 45, 115, }, { 235, 139, 35, 209, 168, 167, 71, 216, 102, 159, 177, 8, 203, 225, 143, 29, }, { 236, 225, 57, 135, 216, 18, 178, 136, 200, 58, 138, 207, 86, 96, 103, 212, }, { 237, 117, 189, 90, 200, 175, 149, 213, 112, 64, 194, 163, 36, 22, 197, 186, }, { 238, 10, 242, 254, 248, 171, 252, 50, 123, 206, 26, 23, 178, 140, 224, 8, }, { 239, 158, 118, 35, 232, 22, 219, 111, 195, 180, 82, 123, 192, 250, 66, 102, }, { 240, 138, 81, 28, 219, 131, 224, 11, 53, 235, 102, 85, 103, 33, 65, 118, }, { 241, 30, 213, 193, 203, 62, 199, 86, 141, 145, 46, 57, 21, 87, 227, 24, }, { 242, 97, 154, 101, 251, 58, 174, 177, 134, 31, 246, 141, 131, 205, 198, 170, }, { 243, 245, 30, 184, 235, 135, 137, 236, 62, 101, 190, 225, 241, 187, 100, 196, }, { 244, 159, 4, 238, 155, 50, 124, 188, 144, 192, 133, 38, 108, 58, 140, 13, }, { 245, 11, 128, 51, 139, 143, 91, 225, 40, 186, 205, 74, 30, 76, 46, 99, }, { 246, 116, 207, 151, 187, 139, 50, 6, 35, 52, 21, 254, 136, 214, 11, 209, }, { 247, 224, 75, 74, 171, 54, 21, 91, 155, 78, 93, 146, 250, 160, 169, 191, }, { 248, 160, 251, 59, 91, 34, 27, 166, 188, 189, 99, 179, 113, 23, 24, 128, }, { 249, 52, 127, 230, 75, 159, 60, 251, 4, 199, 43, 223, 3, 97, 186, 238, }, { 250, 75, 48, 66, 123, 155, 85, 28, 15, 73, 243, 107, 149, 251, 159, 92, }, { 251, 223, 180, 159, 107, 38, 114, 65, 183, 51, 187, 7, 231, 141, 61, 50, }, { 252, 181, 174, 201, 27, 147, 135, 17, 25, 150, 128, 192, 122, 12, 213, 251, }, { 253, 33, 42, 20, 11, 46, 160, 76, 161, 236, 200, 172, 8, 122, 119, 149, }, { 254, 94, 101, 176, 59, 42, 201, 171, 170, 98, 16, 24, 158, 224, 82, 39, }, { 255, 202, 225, 109, 43, 151, 238, 246, 18, 24, 88, 116, 236, 150, 240, 73, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 148, 165, 100, 13, 137, 162, 127, 75, 110, 22, 195, 76, 232, 227, 208, 77, }, { 235, 137, 200, 26, 209, 135, 254, 150, 220, 44, 69, 152, 19, 5, 99, 154, }, { 127, 44, 172, 23, 88, 37, 129, 221, 178, 58, 134, 212, 251, 230, 179, 215, }, { 21, 209, 83, 52, 97, 205, 63, 239, 123, 88, 138, 243, 38, 10, 198, 247, }, { 129, 116, 55, 57, 232, 111, 64, 164, 21, 78, 73, 191, 206, 233, 22, 186, }, { 254, 88, 155, 46, 176, 74, 193, 121, 167, 116, 207, 107, 53, 15, 165, 109, }, { 106, 253, 255, 35, 57, 232, 190, 50, 201, 98, 12, 39, 221, 236, 117, 32, }, { 42, 97, 166, 104, 194, 89, 126, 29, 246, 176, 215, 37, 76, 20, 79, 45, }, { 190, 196, 194, 101, 75, 251, 1, 86, 152, 166, 20, 105, 164, 247, 159, 96, }, { 193, 232, 110, 114, 19, 222, 128, 139, 42, 156, 146, 189, 95, 17, 44, 183, }, { 85, 77, 10, 127, 154, 124, 255, 192, 68, 138, 81, 241, 183, 242, 252, 250, }, { 63, 176, 245, 92, 163, 148, 65, 242, 141, 232, 93, 214, 106, 30, 137, 218, }, { 171, 21, 145, 81, 42, 54, 62, 185, 227, 254, 158, 154, 130, 253, 89, 151, }, { 212, 57, 61, 70, 114, 19, 191, 100, 81, 196, 24, 78, 121, 27, 234, 64, }, { 64, 156, 89, 75, 251, 177, 192, 47, 63, 210, 219, 2, 145, 248, 58, 13, }, { 84, 194, 143, 208, 71, 178, 252, 58, 47, 163, 109, 74, 152, 40, 158, 90, }, { 192, 103, 235, 221, 206, 16, 131, 113, 65, 181, 174, 6, 112, 203, 78, 23, }, { 191, 75, 71, 202, 150, 53, 2, 172, 243, 143, 40, 210, 139, 45, 253, 192, }, { 43, 238, 35, 199, 31, 151, 125, 231, 157, 153, 235, 158, 99, 206, 45, 141, }, { 65, 19, 220, 228, 38, 127, 195, 213, 84, 251, 231, 185, 190, 34, 88, 173, }, { 213, 182, 184, 233, 175, 221, 188, 158, 58, 237, 36, 245, 86, 193, 136, 224, }, { 170, 154, 20, 254, 247, 248, 61, 67, 136, 215, 162, 33, 173, 39, 59, 55, }, { 62, 63, 112, 243, 126, 90, 66, 8, 230, 193, 97, 109, 69, 196, 235, 122, }, { 126, 163, 41, 184, 133, 235, 130, 39, 217, 19, 186, 111, 212, 60, 209, 119, }, { 234, 6, 77, 181, 12, 73, 253, 108, 183, 5, 121, 35, 60, 223, 1, 58, }, { 149, 42, 225, 162, 84, 108, 124, 177, 5, 63, 255, 247, 199, 57, 178, 237, }, { 1, 143, 133, 175, 221, 206, 3, 250, 107, 41, 60, 187, 47, 218, 98, 160, }, { 107, 114, 122, 140, 228, 38, 189, 200, 162, 75, 48, 156, 242, 54, 23, 128, }, { 255, 215, 30, 129, 109, 132, 194, 131, 204, 93, 243, 208, 26, 213, 199, 205, }, { 128, 251, 178, 150, 53, 161, 67, 94, 126, 103, 117, 4, 225, 51, 116, 26, }, { 20, 94, 214, 155, 188, 3, 60, 21, 16, 113, 182, 72, 9, 208, 164, 87, }, { 168, 71, 221, 99, 142, 167, 59, 116, 94, 133, 218, 148, 243, 80, 255, 180, }, { 60, 226, 185, 110, 7, 5, 68, 63, 48, 147, 25, 216, 27, 179, 47, 249, }, { 67, 206, 21, 121, 95, 32, 197, 226, 130, 169, 159, 12, 224, 85, 156, 46, }, { 215, 107, 113, 116, 214, 130, 186, 169, 236, 191, 92, 64, 8, 182, 76, 99, }, { 189, 150, 142, 87, 239, 106, 4, 155, 37, 221, 80, 103, 213, 90, 57, 67, }, { 41, 51, 234, 90, 102, 200, 123, 208, 75, 203, 147, 43, 61, 185, 233, 14, }, { 86, 31, 70, 77, 62, 237, 250, 13, 249, 241, 21, 255, 198, 95, 90, 217, }, { 194, 186, 34, 64, 183, 79, 133, 70, 151, 231, 214, 179, 46, 188, 138, 148, }, { 130, 38, 123, 11, 76, 254, 69, 105, 168, 53, 13, 177, 191, 68, 176, 153, }, { 22, 131, 31, 6, 197, 92, 58, 34, 198, 35, 206, 253, 87, 167, 96, 212, }, { 105, 175, 179, 17, 157, 121, 187, 255, 116, 25, 72, 41, 172, 65, 211, 3, }, { 253, 10, 215, 28, 20, 219, 196, 180, 26, 15, 139, 101, 68, 162, 3, 78, }, { 151, 247, 40, 63, 45, 51, 122, 134, 211, 109, 135, 66, 153, 78, 118, 110, }, { 3, 82, 76, 50, 164, 145, 5, 205, 189, 123, 68, 14, 113, 173, 166, 35, }, { 124, 126, 224, 37, 252, 180, 132, 16, 15, 65, 194, 218, 138, 75, 21, 244, }, { 232, 219, 132, 40, 117, 22, 251, 91, 97, 87, 1, 150, 98, 168, 197, 185, }, { 252, 133, 82, 179, 201, 21, 199, 78, 113, 38, 183, 222, 107, 120, 97, 238, }, { 104, 32, 54, 190, 64, 183, 184, 5, 31, 48, 116, 146, 131, 155, 177, 163, }, { 23, 12, 154, 169, 24, 146, 57, 216, 173, 10, 242, 70, 120, 125, 2, 116, }, { 131, 169, 254, 164, 145, 48, 70, 147, 195, 28, 49, 10, 144, 158, 210, 57, }, { 233, 84, 1, 135, 168, 216, 248, 161, 10, 126, 61, 45, 77, 114, 167, 25, }, { 125, 241, 101, 138, 33, 122, 135, 234, 100, 104, 254, 97, 165, 145, 119, 84, }, { 2, 221, 201, 157, 121, 95, 6, 55, 214, 82, 120, 181, 94, 119, 196, 131, }, { 150, 120, 173, 144, 240, 253, 121, 124, 184, 68, 187, 249, 182, 148, 20, 206, }, { 214, 228, 244, 219, 11, 76, 185, 83, 135, 150, 96, 251, 39, 108, 46, 195, }, { 66, 65, 144, 214, 130, 238, 198, 24, 233, 128, 163, 183, 207, 143, 254, 142, }, { 61, 109, 60, 193, 218, 203, 71, 197, 91, 186, 37, 99, 52, 105, 77, 89, }, { 169, 200, 88, 204, 83, 105, 56, 142, 53, 172, 230, 47, 220, 138, 157, 20, }, { 195, 53, 167, 239, 106, 129, 134, 188, 252, 206, 234, 8, 1, 102, 232, 52, }, { 87, 144, 195, 226, 227, 35, 249, 247, 146, 216, 41, 68, 233, 133, 56, 121, }, { 40, 188, 111, 245, 187, 6, 120, 42, 32, 226, 175, 144, 18, 99, 139, 174, }, { 188, 25, 11, 248, 50, 164, 7, 97, 78, 244, 108, 220, 250, 128, 91, 227, }, { 147, 142, 121, 198, 223, 141, 118, 232, 188, 201, 119, 235, 37, 160, 61, 171, }, { 7, 43, 29, 203, 86, 47, 9, 163, 210, 223, 180, 167, 205, 67, 237, 230, }, { 120, 7, 177, 220, 14, 10, 136, 126, 96, 229, 50, 115, 54, 165, 94, 49, }, { 236, 162, 213, 209, 135, 168, 247, 53, 14, 243, 241, 63, 222, 70, 142, 124, }, { 134, 95, 42, 242, 190, 64, 73, 7, 199, 145, 253, 24, 3, 170, 251, 92, }, { 18, 250, 78, 255, 55, 226, 54, 76, 169, 135, 62, 84, 235, 73, 43, 17, }, { 109, 214, 226, 232, 111, 199, 183, 145, 27, 189, 184, 128, 16, 175, 152, 198, }, { 249, 115, 134, 229, 230, 101, 200, 218, 117, 171, 123, 204, 248, 76, 72, 139, }, { 185, 239, 223, 174, 29, 212, 8, 245, 74, 121, 160, 206, 105, 180, 114, 134, }, { 45, 74, 187, 163, 148, 118, 119, 190, 36, 111, 99, 130, 129, 87, 162, 203, }, { 82, 102, 23, 180, 204, 83, 246, 99, 150, 85, 229, 86, 122, 177, 17, 28, }, { 198, 195, 115, 185, 69, 241, 137, 40, 248, 67, 38, 26, 146, 82, 193, 81, }, { 172, 62, 140, 154, 124, 25, 55, 26, 49, 33, 42, 61, 79, 190, 180, 113, }, { 56, 155, 232, 151, 245, 187, 72, 81, 95, 55, 233, 113, 167, 93, 100, 60, }, { 71, 183, 68, 128, 173, 158, 201, 140, 237, 13, 111, 165, 92, 187, 215, 235, }, { 211, 18, 32, 141, 36, 60, 182, 199, 131, 27, 172, 233, 180, 88, 7, 166, }, { 199, 76, 246, 22, 152, 63, 138, 210, 147, 106, 26, 161, 189, 136, 163, 241, }, { 83, 233, 146, 27, 17, 157, 245, 153, 253, 124, 217, 237, 85, 107, 115, 188, }, { 44, 197, 62, 12, 73, 184, 116, 68, 79, 70, 95, 57, 174, 141, 192, 107, }, { 184, 96, 90, 1, 192, 26, 11, 15, 33, 80, 156, 117, 70, 110, 16, 38, }, { 210, 157, 165, 34, 249, 242, 181, 61, 232, 50, 144, 82, 155, 130, 101, 6, }, { 70, 56, 193, 47, 112, 80, 202, 118, 134, 36, 83, 30, 115, 97, 181, 75, }, { 57, 20, 109, 56, 40, 117, 75, 171, 52, 30, 213, 202, 136, 135, 6, 156, }, { 173, 177, 9, 53, 161, 215, 52, 224, 90, 8, 22, 134, 96, 100, 214, 209, }, { 237, 45, 80, 126, 90, 102, 244, 207, 101, 218, 205, 132, 241, 156, 236, 220, }, { 121, 136, 52, 115, 211, 196, 139, 132, 11, 204, 14, 200, 25, 127, 60, 145, }, { 6, 164, 152, 100, 139, 225, 10, 89, 185, 246, 136, 28, 226, 153, 143, 70, }, { 146, 1, 252, 105, 2, 67, 117, 18, 215, 224, 75, 80, 10, 122, 95, 11, }, { 248, 252, 3, 74, 59, 171, 203, 32, 30, 130, 71, 119, 215, 150, 42, 43, }, { 108, 89, 103, 71, 178, 9, 180, 107, 112, 148, 132, 59, 63, 117, 250, 102, }, { 19, 117, 203, 80, 234, 44, 53, 182, 194, 174, 2, 239, 196, 147, 73, 177, }, { 135, 208, 175, 93, 99, 142, 74, 253, 172, 184, 193, 163, 44, 112, 153, 252, }, { 59, 201, 164, 165, 81, 42, 77, 156, 226, 76, 173, 127, 214, 240, 194, 31, }, { 175, 108, 192, 168, 216, 136, 50, 215, 140, 90, 110, 51, 62, 19, 18, 82, }, { 208, 64, 108, 191, 128, 173, 179, 10, 62, 96, 232, 231, 197, 245, 161, 133, }, { 68, 229, 8, 178, 9, 15, 204, 65, 80, 118, 43, 171, 45, 22, 113, 200, }, { 46, 24, 247, 145, 48, 231, 114, 115, 153, 20, 39, 140, 240, 250, 4, 232, }, { 186, 189, 147, 156, 185, 69, 13, 56, 247, 2, 228, 192, 24, 25, 212, 165, }, { 197, 145, 63, 139, 225, 96, 140, 229, 69, 56, 98, 20, 227, 255, 103, 114, }, { 81, 52, 91, 134, 104, 194, 243, 174, 43, 46, 161, 88, 11, 28, 183, 63, }, { 17, 168, 2, 205, 147, 115, 51, 129, 20, 252, 122, 90, 154, 228, 141, 50, }, { 133, 13, 102, 192, 26, 209, 76, 202, 122, 234, 185, 22, 114, 7, 93, 127, }, { 250, 33, 202, 215, 66, 244, 205, 23, 200, 208, 63, 194, 137, 225, 238, 168, }, { 110, 132, 174, 218, 203, 86, 178, 92, 166, 198, 252, 142, 97, 2, 62, 229, }, { 4, 121, 81, 249, 242, 190, 12, 110, 111, 164, 240, 169, 188, 238, 75, 197, }, { 144, 220, 53, 244, 123, 28, 115, 37, 1, 178, 51, 229, 84, 13, 155, 136, }, { 239, 240, 153, 227, 35, 57, 242, 248, 179, 136, 181, 49, 175, 235, 40, 95, }, { 123, 85, 253, 238, 170, 155, 141, 179, 221, 158, 118, 125, 71, 8, 248, 18, }, { 111, 11, 43, 117, 22, 152, 177, 166, 205, 239, 192, 53, 78, 216, 92, 69, }, { 251, 174, 79, 120, 159, 58, 206, 237, 163, 249, 3, 121, 166, 59, 140, 8, }, { 132, 130, 227, 111, 199, 31, 79, 48, 17, 195, 133, 173, 93, 221, 63, 223, }, { 16, 39, 135, 98, 78, 189, 48, 123, 127, 213, 70, 225, 181, 62, 239, 146, }, { 122, 218, 120, 65, 119, 85, 142, 73, 182, 183, 74, 198, 104, 210, 154, 178, }, { 238, 127, 28, 76, 254, 247, 241, 2, 216, 161, 137, 138, 128, 49, 74, 255, }, { 145, 83, 176, 91, 166, 210, 112, 223, 106, 155, 15, 94, 123, 215, 249, 40, }, { 5, 246, 212, 86, 47, 112, 15, 148, 4, 141, 204, 18, 147, 52, 41, 101, }, { 69, 106, 141, 29, 212, 193, 207, 187, 59, 95, 23, 16, 2, 204, 19, 104, }, { 209, 207, 233, 16, 93, 99, 176, 240, 85, 73, 212, 92, 234, 47, 195, 37, }, { 174, 227, 69, 7, 5, 70, 49, 45, 231, 115, 82, 136, 17, 201, 112, 242, }, { 58, 70, 33, 10, 140, 228, 78, 102, 137, 101, 145, 196, 249, 42, 160, 191, }, { 80, 187, 222, 41, 181, 12, 240, 84, 64, 7, 157, 227, 36, 198, 213, 159, }, { 196, 30, 186, 36, 60, 174, 143, 31, 46, 17, 94, 175, 204, 37, 5, 210, }, { 187, 50, 22, 51, 100, 139, 14, 194, 156, 43, 216, 123, 55, 195, 182, 5, }, { 47, 151, 114, 62, 237, 41, 113, 137, 242, 61, 27, 55, 223, 32, 102, 72, }, { 229, 223, 242, 79, 125, 217, 236, 19, 187, 81, 238, 21, 74, 131, 122, 149, }, { 113, 122, 150, 66, 244, 123, 147, 88, 213, 71, 45, 89, 162, 96, 170, 216, }, { 14, 86, 58, 85, 172, 94, 18, 133, 103, 125, 171, 141, 89, 134, 25, 15, }, { 154, 243, 94, 88, 37, 252, 109, 206, 9, 107, 104, 193, 177, 101, 201, 66, }, { 240, 14, 161, 123, 28, 20, 211, 252, 192, 9, 100, 230, 108, 137, 188, 98, }, { 100, 171, 197, 118, 149, 182, 172, 183, 174, 31, 167, 170, 132, 106, 108, 47, }, { 27, 135, 105, 97, 205, 147, 45, 106, 28, 37, 33, 126, 127, 140, 223, 248, }, { 143, 34, 13, 108, 68, 49, 82, 33, 114, 51, 226, 50, 151, 111, 15, 181, }, { 207, 190, 84, 39, 191, 128, 146, 14, 77, 225, 57, 48, 6, 151, 53, 184, }, { 91, 27, 48, 42, 54, 34, 237, 69, 35, 247, 250, 124, 238, 116, 229, 245, }, { 36, 55, 156, 61, 110, 7, 108, 152, 145, 205, 124, 168, 21, 146, 86, 34, }, { 176, 146, 248, 48, 231, 165, 19, 211, 255, 219, 191, 228, 253, 113, 134, 111, }, { 218, 111, 7, 19, 222, 77, 173, 225, 54, 185, 179, 195, 32, 157, 243, 79, }, { 78, 202, 99, 30, 87, 239, 210, 170, 88, 175, 112, 143, 200, 126, 35, 2, }, { 49, 230, 207, 9, 15, 202, 83, 119, 234, 149, 246, 91, 51, 152, 144, 213, }, { 165, 67, 171, 4, 134, 104, 44, 60, 132, 131, 53, 23, 219, 123, 64, 152, }, { 177, 29, 125, 159, 58, 107, 16, 41, 148, 242, 131, 95, 210, 171, 228, 207, }, { 37, 184, 25, 146, 179, 201, 111, 98, 250, 228, 64, 19, 58, 72, 52, 130, }, { 90, 148, 181, 133, 235, 236, 238, 191, 72, 222, 198, 199, 193, 174, 135, 85, }, { 206, 49, 209, 136, 98, 78, 145, 244, 38, 200, 5, 139, 41, 77, 87, 24, }, { 164, 204, 46, 171, 91, 166, 47, 198, 239, 170, 9, 172, 244, 161, 34, 56, }, { 48, 105, 74, 166, 210, 4, 80, 141, 129, 188, 202, 224, 28, 66, 242, 117, }, { 79, 69, 230, 177, 138, 33, 209, 80, 51, 134, 76, 52, 231, 164, 65, 162, }, { 219, 224, 130, 188, 3, 131, 174, 27, 93, 144, 143, 120, 15, 71, 145, 239, }, { 155, 124, 219, 247, 248, 50, 110, 52, 98, 66, 84, 122, 158, 191, 171, 226, }, { 15, 217, 191, 250, 113, 144, 17, 127, 12, 84, 151, 54, 118, 92, 123, 175, }, { 112, 245, 19, 237, 41, 181, 144, 162, 190, 110, 17, 226, 141, 186, 200, 120, }, { 228, 80, 119, 224, 160, 23, 239, 233, 208, 120, 210, 174, 101, 89, 24, 53, }, { 142, 173, 136, 195, 153, 255, 81, 219, 25, 26, 222, 137, 184, 181, 109, 21, }, { 26, 8, 236, 206, 16, 93, 46, 144, 119, 12, 29, 197, 80, 86, 189, 88, }, { 101, 36, 64, 217, 72, 120, 175, 77, 197, 54, 155, 17, 171, 176, 14, 143, }, { 241, 129, 36, 212, 193, 218, 208, 6, 171, 32, 88, 93, 67, 83, 222, 194, }, { 77, 152, 47, 44, 243, 126, 215, 103, 229, 212, 52, 129, 185, 211, 133, 33, }, { 217, 61, 75, 33, 122, 220, 168, 44, 139, 194, 247, 205, 81, 48, 85, 108, }, { 166, 17, 231, 54, 34, 249, 41, 241, 57, 248, 113, 25, 170, 214, 230, 187, }, { 50, 180, 131, 59, 171, 91, 86, 186, 87, 238, 178, 85, 66, 53, 54, 246, }, { 88, 73, 124, 24, 146, 179, 232, 136, 158, 140, 190, 114, 159, 217, 67, 214, }, { 204, 236, 24, 21, 27, 17, 151, 195, 240, 154, 125, 62, 119, 58, 147, 155, }, { 179, 192, 180, 2, 67, 52, 22, 30, 66, 160, 251, 234, 140, 220, 32, 76, }, { 39, 101, 208, 15, 202, 150, 105, 85, 44, 182, 56, 166, 100, 63, 240, 1, }, { 103, 249, 137, 68, 49, 39, 169, 122, 19, 100, 227, 164, 245, 199, 202, 12, }, { 243, 92, 237, 73, 184, 133, 214, 49, 125, 114, 32, 232, 29, 36, 26, 65, }, { 140, 112, 65, 94, 224, 160, 87, 236, 207, 72, 166, 60, 230, 194, 169, 150, }, { 24, 213, 37, 83, 105, 2, 40, 167, 161, 94, 101, 112, 14, 33, 121, 219, }, { 114, 40, 218, 112, 80, 234, 150, 149, 104, 60, 105, 87, 211, 205, 12, 251, }, { 230, 141, 190, 125, 217, 72, 233, 222, 6, 42, 170, 27, 59, 46, 220, 182, }, { 153, 161, 18, 106, 129, 109, 104, 3, 180, 16, 44, 207, 192, 200, 111, 97, }, { 13, 4, 118, 103, 8, 207, 23, 72, 218, 6, 239, 131, 40, 43, 191, 44, }, { 25, 90, 160, 252, 180, 204, 43, 93, 202, 119, 89, 203, 33, 251, 27, 123, }, { 141, 255, 196, 241, 61, 110, 84, 22, 164, 97, 154, 135, 201, 24, 203, 54, }, { 242, 211, 104, 230, 101, 75, 213, 203, 22, 91, 28, 83, 50, 254, 120, 225, }, { 102, 118, 12, 235, 236, 233, 170, 128, 120, 77, 223, 31, 218, 29, 168, 172, }, { 12, 139, 243, 200, 213, 1, 20, 178, 177, 47, 211, 56, 7, 241, 221, 140, }, { 152, 46, 151, 197, 92, 163, 107, 249, 223, 57, 16, 116, 239, 18, 13, 193, }, { 231, 2, 59, 210, 4, 134, 234, 36, 109, 3, 150, 160, 20, 244, 190, 22, }, { 115, 167, 95, 223, 141, 36, 149, 111, 3, 21, 85, 236, 252, 23, 110, 91, }, { 51, 59, 6, 148, 118, 149, 85, 64, 60, 199, 142, 238, 109, 239, 84, 86, }, { 167, 158, 98, 153, 255, 55, 42, 11, 82, 209, 77, 162, 133, 12, 132, 27, }, { 216, 178, 206, 142, 167, 18, 171, 214, 224, 235, 203, 118, 126, 234, 55, 204, }, { 76, 23, 170, 131, 46, 176, 212, 157, 142, 253, 8, 58, 150, 9, 231, 129, }, { 38, 234, 85, 160, 23, 88, 106, 175, 71, 159, 4, 29, 75, 229, 146, 161, }, { 178, 79, 49, 173, 158, 250, 21, 228, 41, 137, 199, 81, 163, 6, 66, 236, }, { 205, 99, 157, 186, 198, 223, 148, 57, 155, 179, 65, 133, 88, 224, 241, 59, }, { 89, 198, 249, 183, 79, 125, 235, 114, 245, 165, 130, 201, 176, 3, 33, 118, }, { 118, 81, 139, 137, 162, 84, 154, 251, 7, 152, 153, 254, 111, 35, 71, 62, }, { 226, 244, 239, 132, 43, 246, 229, 176, 105, 142, 90, 178, 135, 192, 151, 115, }, { 157, 216, 67, 147, 115, 211, 100, 109, 219, 180, 220, 102, 124, 38, 36, 164, }, { 9, 125, 39, 158, 250, 113, 27, 38, 181, 162, 31, 42, 148, 197, 244, 233, }, { 99, 128, 216, 189, 195, 153, 165, 20, 124, 192, 19, 13, 73, 41, 129, 201, }, { 247, 37, 188, 176, 74, 59, 218, 95, 18, 214, 208, 65, 161, 202, 81, 132, }, { 136, 9, 16, 167, 18, 30, 91, 130, 160, 236, 86, 149, 90, 44, 226, 83, }, { 28, 172, 116, 170, 155, 188, 36, 201, 206, 250, 149, 217, 178, 207, 50, 30, }, { 92, 48, 45, 225, 96, 13, 228, 230, 241, 40, 78, 219, 35, 55, 8, 19, }, { 200, 149, 73, 236, 233, 175, 155, 173, 159, 62, 141, 151, 203, 212, 216, 94, }, { 183, 185, 229, 251, 177, 138, 26, 112, 45, 4, 11, 67, 48, 50, 107, 137, }, { 35, 28, 129, 246, 56, 40, 101, 59, 67, 18, 200, 15, 216, 209, 187, 196, }, { 73, 225, 126, 213, 1, 192, 219, 9, 138, 112, 196, 40, 5, 61, 206, 228, }, { 221, 68, 26, 216, 136, 98, 164, 66, 228, 102, 7, 100, 237, 222, 30, 169, }, { 162, 104, 182, 207, 208, 71, 37, 159, 86, 92, 129, 176, 22, 56, 173, 126, }, { 54, 205, 210, 194, 89, 229, 90, 212, 56, 74, 66, 252, 254, 219, 125, 51, }, { 34, 147, 4, 89, 229, 230, 102, 193, 40, 59, 244, 180, 247, 11, 217, 100, }, { 182, 54, 96, 84, 108, 68, 25, 138, 70, 45, 55, 248, 31, 232, 9, 41, }, { 201, 26, 204, 67, 52, 97, 152, 87, 244, 23, 177, 44, 228, 14, 186, 254, }, { 93, 191, 168, 78, 189, 195, 231, 28, 154, 1, 114, 96, 12, 237, 106, 179, }, { 55, 66, 87, 109, 132, 43, 89, 46, 83, 99, 126, 71, 209, 1, 31, 147, }, { 163, 231, 51, 96, 13, 137, 38, 101, 61, 117, 189, 11, 57, 226, 207, 222, }, { 220, 203, 159, 119, 85, 172, 167, 184, 143, 79, 59, 223, 194, 4, 124, 9, }, { 72, 110, 251, 122, 220, 14, 216, 243, 225, 89, 248, 147, 42, 231, 172, 68, }, { 8, 242, 162, 49, 39, 191, 24, 220, 222, 139, 35, 145, 187, 31, 150, 73, }, { 156, 87, 198, 60, 174, 29, 103, 151, 176, 157, 224, 221, 83, 252, 70, 4, }, { 227, 123, 106, 43, 246, 56, 230, 74, 2, 167, 102, 9, 168, 26, 245, 211, }, { 119, 222, 14, 38, 127, 154, 153, 1, 108, 177, 165, 69, 64, 249, 37, 158, }, { 29, 35, 241, 5, 70, 114, 39, 51, 165, 211, 169, 98, 157, 21, 80, 190, }, { 137, 134, 149, 8, 207, 208, 88, 120, 203, 197, 106, 46, 117, 246, 128, 243, }, { 246, 170, 57, 31, 151, 245, 217, 165, 121, 255, 236, 250, 142, 16, 51, 36, }, { 98, 15, 93, 18, 30, 87, 166, 238, 23, 233, 47, 182, 102, 243, 227, 105, }, { 222, 22, 86, 234, 44, 243, 161, 143, 89, 29, 67, 106, 156, 115, 184, 138, }, { 74, 179, 50, 231, 165, 81, 222, 196, 55, 11, 128, 38, 116, 144, 104, 199, }, { 53, 159, 158, 240, 253, 116, 95, 25, 133, 49, 6, 242, 143, 118, 219, 16, }, { 161, 58, 250, 253, 116, 214, 32, 82, 235, 39, 197, 190, 103, 149, 11, 93, }, { 203, 199, 5, 222, 77, 62, 158, 96, 34, 69, 201, 153, 186, 121, 126, 125, }, { 95, 98, 97, 211, 196, 156, 225, 43, 76, 83, 10, 213, 82, 154, 174, 48, }, { 32, 78, 205, 196, 156, 185, 96, 246, 254, 105, 140, 1, 169, 124, 29, 231, }, { 180, 235, 169, 201, 21, 27, 31, 189, 144, 127, 79, 77, 65, 159, 205, 170, }, { 244, 119, 240, 130, 238, 170, 223, 146, 175, 173, 148, 79, 208, 103, 247, 167, }, { 96, 210, 148, 143, 103, 8, 160, 217, 193, 187, 87, 3, 56, 132, 39, 234, }, { 31, 254, 56, 152, 63, 45, 33, 4, 115, 129, 209, 215, 195, 98, 148, 61, }, { 139, 91, 92, 149, 182, 143, 94, 79, 29, 151, 18, 155, 43, 129, 68, 112, }, { 225, 166, 163, 182, 143, 103, 224, 125, 212, 245, 30, 188, 246, 109, 49, 80, }, { 117, 3, 199, 187, 6, 197, 159, 54, 186, 227, 221, 240, 30, 142, 225, 29, }, { 10, 47, 107, 172, 94, 224, 30, 235, 8, 217, 91, 36, 229, 104, 82, 202, }, { 158, 138, 15, 161, 215, 66, 97, 160, 102, 207, 152, 104, 13, 139, 130, 135, }, { 138, 212, 217, 58, 107, 65, 93, 181, 118, 190, 46, 32, 4, 91, 38, 208, }, { 30, 113, 189, 55, 226, 227, 34, 254, 24, 168, 237, 108, 236, 184, 246, 157, }, { 97, 93, 17, 32, 186, 198, 163, 35, 170, 146, 107, 184, 23, 94, 69, 74, }, { 245, 248, 117, 45, 51, 100, 220, 104, 196, 132, 168, 244, 255, 189, 149, 7, }, { 159, 5, 138, 14, 10, 140, 98, 90, 13, 230, 164, 211, 34, 81, 224, 39, }, { 11, 160, 238, 3, 131, 46, 29, 17, 99, 240, 103, 159, 202, 178, 48, 106, }, { 116, 140, 66, 20, 219, 11, 156, 204, 209, 202, 225, 75, 49, 84, 131, 189, }, { 224, 41, 38, 25, 82, 169, 227, 135, 191, 220, 34, 7, 217, 183, 83, 240, }, { 160, 181, 127, 82, 169, 24, 35, 168, 128, 14, 249, 5, 72, 79, 105, 253, }, { 52, 16, 27, 95, 32, 186, 92, 227, 238, 24, 58, 73, 160, 172, 185, 176, }, { 75, 60, 183, 72, 120, 159, 221, 62, 92, 34, 188, 157, 91, 74, 10, 103, }, { 223, 153, 211, 69, 241, 61, 162, 117, 50, 52, 127, 209, 179, 169, 218, 42, }, { 181, 100, 44, 102, 200, 213, 28, 71, 251, 86, 115, 246, 110, 69, 175, 10, }, { 33, 193, 72, 107, 65, 119, 99, 12, 149, 64, 176, 186, 134, 166, 127, 71, }, { 94, 237, 228, 124, 25, 82, 226, 209, 39, 122, 54, 110, 125, 64, 204, 144, }, { 202, 72, 128, 113, 144, 240, 157, 154, 73, 108, 245, 34, 149, 163, 28, 221, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 32, 60, 72, 248, 72, 72, 200, 142, 42, 245, 2, 221, 20, 48, 68, 142, }, { 64, 120, 144, 51, 144, 144, 83, 223, 84, 41, 4, 121, 40, 96, 136, 223, }, { 96, 68, 216, 203, 216, 216, 155, 81, 126, 220, 6, 164, 60, 80, 204, 81, }, { 128, 240, 227, 102, 227, 227, 166, 125, 168, 82, 8, 242, 80, 192, 211, 125, }, { 160, 204, 171, 158, 171, 171, 110, 243, 130, 167, 10, 47, 68, 240, 151, 243, }, { 192, 136, 115, 85, 115, 115, 245, 162, 252, 123, 12, 139, 120, 160, 91, 162, }, { 224, 180, 59, 173, 59, 59, 61, 44, 214, 142, 14, 86, 108, 144, 31, 44, }, { 195, 35, 5, 204, 5, 5, 143, 250, 147, 164, 16, 39, 160, 67, 101, 250, }, { 227, 31, 77, 52, 77, 77, 71, 116, 185, 81, 18, 250, 180, 115, 33, 116, }, { 131, 91, 149, 255, 149, 149, 220, 37, 199, 141, 20, 94, 136, 35, 237, 37, }, { 163, 103, 221, 7, 221, 221, 20, 171, 237, 120, 22, 131, 156, 19, 169, 171, }, { 67, 211, 230, 170, 230, 230, 41, 135, 59, 246, 24, 213, 240, 131, 182, 135, }, { 99, 239, 174, 82, 174, 174, 225, 9, 17, 3, 26, 8, 228, 179, 242, 9, }, { 3, 171, 118, 153, 118, 118, 122, 88, 111, 223, 28, 172, 216, 227, 62, 88, }, { 35, 151, 62, 97, 62, 62, 178, 214, 69, 42, 30, 113, 204, 211, 122, 214, }, { 69, 70, 10, 91, 10, 10, 221, 55, 229, 139, 32, 78, 131, 134, 202, 55, }, { 101, 122, 66, 163, 66, 66, 21, 185, 207, 126, 34, 147, 151, 182, 142, 185, }, { 5, 62, 154, 104, 154, 154, 142, 232, 177, 162, 36, 55, 171, 230, 66, 232, }, { 37, 2, 210, 144, 210, 210, 70, 102, 155, 87, 38, 234, 191, 214, 6, 102, }, { 197, 182, 233, 61, 233, 233, 123, 74, 77, 217, 40, 188, 211, 70, 25, 74, }, { 229, 138, 161, 197, 161, 161, 179, 196, 103, 44, 42, 97, 199, 118, 93, 196, }, { 133, 206, 121, 14, 121, 121, 40, 149, 25, 240, 44, 197, 251, 38, 145, 149, }, { 165, 242, 49, 246, 49, 49, 224, 27, 51, 5, 46, 24, 239, 22, 213, 27, }, { 134, 101, 15, 151, 15, 15, 82, 205, 118, 47, 48, 105, 35, 197, 175, 205, }, { 166, 89, 71, 111, 71, 71, 154, 67, 92, 218, 50, 180, 55, 245, 235, 67, }, { 198, 29, 159, 164, 159, 159, 1, 18, 34, 6, 52, 16, 11, 165, 39, 18, }, { 230, 33, 215, 92, 215, 215, 201, 156, 8, 243, 54, 205, 31, 149, 99, 156, }, { 6, 149, 236, 241, 236, 236, 244, 176, 222, 125, 56, 155, 115, 5, 124, 176, }, { 38, 169, 164, 9, 164, 164, 60, 62, 244, 136, 58, 70, 103, 53, 56, 62, }, { 70, 237, 124, 194, 124, 124, 167, 111, 138, 84, 60, 226, 91, 101, 244, 111, }, { 102, 209, 52, 58, 52, 52, 111, 225, 160, 161, 62, 63, 79, 85, 176, 225, }, { 138, 140, 20, 182, 20, 20, 121, 110, 9, 213, 64, 156, 197, 207, 87, 110, }, { 170, 176, 92, 78, 92, 92, 177, 224, 35, 32, 66, 65, 209, 255, 19, 224, }, { 202, 244, 132, 133, 132, 132, 42, 177, 93, 252, 68, 229, 237, 175, 223, 177, }, { 234, 200, 204, 125, 204, 204, 226, 63, 119, 9, 70, 56, 249, 159, 155, 63, }, { 10, 124, 247, 208, 247, 247, 223, 19, 161, 135, 72, 110, 149, 15, 132, 19, }, { 42, 64, 191, 40, 191, 191, 23, 157, 139, 114, 74, 179, 129, 63, 192, 157, }, { 74, 4, 103, 227, 103, 103, 140, 204, 245, 174, 76, 23, 189, 111, 12, 204, }, { 106, 56, 47, 27, 47, 47, 68, 66, 223, 91, 78, 202, 169, 95, 72, 66, }, { 73, 175, 17, 122, 17, 17, 246, 148, 154, 113, 80, 187, 101, 140, 50, 148, }, { 105, 147, 89, 130, 89, 89, 62, 26, 176, 132, 82, 102, 113, 188, 118, 26, }, { 9, 215, 129, 73, 129, 129, 165, 75, 206, 88, 84, 194, 77, 236, 186, 75, }, { 41, 235, 201, 177, 201, 201, 109, 197, 228, 173, 86, 31, 89, 220, 254, 197, }, { 201, 95, 242, 28, 242, 242, 80, 233, 50, 35, 88, 73, 53, 76, 225, 233, }, { 233, 99, 186, 228, 186, 186, 152, 103, 24, 214, 90, 148, 33, 124, 165, 103, }, { 137, 39, 98, 47, 98, 98, 3, 54, 102, 10, 92, 48, 29, 44, 105, 54, }, { 169, 27, 42, 215, 42, 42, 203, 184, 76, 255, 94, 237, 9, 28, 45, 184, }, { 207, 202, 30, 237, 30, 30, 164, 89, 236, 94, 96, 210, 70, 73, 157, 89, }, { 239, 246, 86, 21, 86, 86, 108, 215, 198, 171, 98, 15, 82, 121, 217, 215, }, { 143, 178, 142, 222, 142, 142, 247, 134, 184, 119, 100, 171, 110, 41, 21, 134, }, { 175, 142, 198, 38, 198, 198, 63, 8, 146, 130, 102, 118, 122, 25, 81, 8, }, { 79, 58, 253, 139, 253, 253, 2, 36, 68, 12, 104, 32, 22, 137, 78, 36, }, { 111, 6, 181, 115, 181, 181, 202, 170, 110, 249, 106, 253, 2, 185, 10, 170, }, { 15, 66, 109, 184, 109, 109, 81, 251, 16, 37, 108, 89, 62, 233, 198, 251, }, { 47, 126, 37, 64, 37, 37, 153, 117, 58, 208, 110, 132, 42, 217, 130, 117, }, { 12, 233, 27, 33, 27, 27, 43, 163, 127, 250, 112, 245, 230, 10, 248, 163, }, { 44, 213, 83, 217, 83, 83, 227, 45, 85, 15, 114, 40, 242, 58, 188, 45, }, { 76, 145, 139, 18, 139, 139, 120, 124, 43, 211, 116, 140, 206, 106, 112, 124, }, { 108, 173, 195, 234, 195, 195, 176, 242, 1, 38, 118, 81, 218, 90, 52, 242, }, { 140, 25, 248, 71, 248, 248, 141, 222, 215, 168, 120, 7, 182, 202, 43, 222, }, { 172, 37, 176, 191, 176, 176, 69, 80, 253, 93, 122, 218, 162, 250, 111, 80, }, { 204, 97, 104, 116, 104, 104, 222, 1, 131, 129, 124, 126, 158, 170, 163, 1, }, { 236, 93, 32, 140, 32, 32, 22, 143, 169, 116, 126, 163, 138, 154, 231, 143, }, { 215, 219, 40, 175, 40, 40, 242, 220, 18, 105, 128, 251, 73, 93, 174, 220, }, { 247, 231, 96, 87, 96, 96, 58, 82, 56, 156, 130, 38, 93, 109, 234, 82, }, { 151, 163, 184, 156, 184, 184, 161, 3, 70, 64, 132, 130, 97, 61, 38, 3, }, { 183, 159, 240, 100, 240, 240, 105, 141, 108, 181, 134, 95, 117, 13, 98, 141, }, { 87, 43, 203, 201, 203, 203, 84, 161, 186, 59, 136, 9, 25, 157, 125, 161, }, { 119, 23, 131, 49, 131, 131, 156, 47, 144, 206, 138, 212, 13, 173, 57, 47, }, { 23, 83, 91, 250, 91, 91, 7, 126, 238, 18, 140, 112, 49, 253, 245, 126, }, { 55, 111, 19, 2, 19, 19, 207, 240, 196, 231, 142, 173, 37, 205, 177, 240, }, { 20, 248, 45, 99, 45, 45, 125, 38, 129, 205, 144, 220, 233, 30, 203, 38, }, { 52, 196, 101, 155, 101, 101, 181, 168, 171, 56, 146, 1, 253, 46, 143, 168, }, { 84, 128, 189, 80, 189, 189, 46, 249, 213, 228, 148, 165, 193, 126, 67, 249, }, { 116, 188, 245, 168, 245, 245, 230, 119, 255, 17, 150, 120, 213, 78, 7, 119, }, { 148, 8, 206, 5, 206, 206, 219, 91, 41, 159, 152, 46, 185, 222, 24, 91, }, { 180, 52, 134, 253, 134, 134, 19, 213, 3, 106, 154, 243, 173, 238, 92, 213, }, { 212, 112, 94, 54, 94, 94, 136, 132, 125, 182, 156, 87, 145, 190, 144, 132, }, { 244, 76, 22, 206, 22, 22, 64, 10, 87, 67, 158, 138, 133, 142, 212, 10, }, { 146, 157, 34, 244, 34, 34, 47, 235, 247, 226, 160, 181, 202, 219, 100, 235, }, { 178, 161, 106, 12, 106, 106, 231, 101, 221, 23, 162, 104, 222, 235, 32, 101, }, { 210, 229, 178, 199, 178, 178, 124, 52, 163, 203, 164, 204, 226, 187, 236, 52, }, { 242, 217, 250, 63, 250, 250, 180, 186, 137, 62, 166, 17, 246, 139, 168, 186, }, { 18, 109, 193, 146, 193, 193, 137, 150, 95, 176, 168, 71, 154, 27, 183, 150, }, { 50, 81, 137, 106, 137, 137, 65, 24, 117, 69, 170, 154, 142, 43, 243, 24, }, { 82, 21, 81, 161, 81, 81, 218, 73, 11, 153, 172, 62, 178, 123, 63, 73, }, { 114, 41, 25, 89, 25, 25, 18, 199, 33, 108, 174, 227, 166, 75, 123, 199, }, { 81, 190, 39, 56, 39, 39, 160, 17, 100, 70, 176, 146, 106, 152, 1, 17, }, { 113, 130, 111, 192, 111, 111, 104, 159, 78, 179, 178, 79, 126, 168, 69, 159, }, { 17, 198, 183, 11, 183, 183, 243, 206, 48, 111, 180, 235, 66, 248, 137, 206, }, { 49, 250, 255, 243, 255, 255, 59, 64, 26, 154, 182, 54, 86, 200, 205, 64, }, { 209, 78, 196, 94, 196, 196, 6, 108, 204, 20, 184, 96, 58, 88, 210, 108, }, { 241, 114, 140, 166, 140, 140, 206, 226, 230, 225, 186, 189, 46, 104, 150, 226, }, { 145, 54, 84, 109, 84, 84, 85, 179, 152, 61, 188, 25, 18, 56, 90, 179, }, { 177, 10, 28, 149, 28, 28, 157, 61, 178, 200, 190, 196, 6, 8, 30, 61, }, { 93, 87, 60, 25, 60, 60, 139, 178, 27, 188, 192, 103, 140, 146, 249, 178, }, { 125, 107, 116, 225, 116, 116, 67, 60, 49, 73, 194, 186, 152, 162, 189, 60, }, { 29, 47, 172, 42, 172, 172, 216, 109, 79, 149, 196, 30, 164, 242, 113, 109, }, { 61, 19, 228, 210, 228, 228, 16, 227, 101, 96, 198, 195, 176, 194, 53, 227, }, { 221, 167, 223, 127, 223, 223, 45, 207, 179, 238, 200, 149, 220, 82, 42, 207, }, { 253, 155, 151, 135, 151, 151, 229, 65, 153, 27, 202, 72, 200, 98, 110, 65, }, { 157, 223, 79, 76, 79, 79, 126, 16, 231, 199, 204, 236, 244, 50, 162, 16, }, { 189, 227, 7, 180, 7, 7, 182, 158, 205, 50, 206, 49, 224, 2, 230, 158, }, { 158, 116, 57, 213, 57, 57, 4, 72, 136, 24, 208, 64, 44, 209, 156, 72, }, { 190, 72, 113, 45, 113, 113, 204, 198, 162, 237, 210, 157, 56, 225, 216, 198, }, { 222, 12, 169, 230, 169, 169, 87, 151, 220, 49, 212, 57, 4, 177, 20, 151, }, { 254, 48, 225, 30, 225, 225, 159, 25, 246, 196, 214, 228, 16, 129, 80, 25, }, { 30, 132, 218, 179, 218, 218, 162, 53, 32, 74, 216, 178, 124, 17, 79, 53, }, { 62, 184, 146, 75, 146, 146, 106, 187, 10, 191, 218, 111, 104, 33, 11, 187, }, { 94, 252, 74, 128, 74, 74, 241, 234, 116, 99, 220, 203, 84, 113, 199, 234, }, { 126, 192, 2, 120, 2, 2, 57, 100, 94, 150, 222, 22, 64, 65, 131, 100, }, { 24, 17, 54, 66, 54, 54, 86, 133, 254, 55, 224, 41, 15, 20, 51, 133, }, { 56, 45, 126, 186, 126, 126, 158, 11, 212, 194, 226, 244, 27, 36, 119, 11, }, { 88, 105, 166, 113, 166, 166, 5, 90, 170, 30, 228, 80, 39, 116, 187, 90, }, { 120, 85, 238, 137, 238, 238, 205, 212, 128, 235, 230, 141, 51, 68, 255, 212, }, { 152, 225, 213, 36, 213, 213, 240, 248, 86, 101, 232, 219, 95, 212, 224, 248, }, { 184, 221, 157, 220, 157, 157, 56, 118, 124, 144, 234, 6, 75, 228, 164, 118, }, { 216, 153, 69, 23, 69, 69, 163, 39, 2, 76, 236, 162, 119, 180, 104, 39, }, { 248, 165, 13, 239, 13, 13, 107, 169, 40, 185, 238, 127, 99, 132, 44, 169, }, { 219, 50, 51, 142, 51, 51, 217, 127, 109, 147, 240, 14, 175, 87, 86, 127, }, { 251, 14, 123, 118, 123, 123, 17, 241, 71, 102, 242, 211, 187, 103, 18, 241, }, { 155, 74, 163, 189, 163, 163, 138, 160, 57, 186, 244, 119, 135, 55, 222, 160, }, { 187, 118, 235, 69, 235, 235, 66, 46, 19, 79, 246, 170, 147, 7, 154, 46, }, { 91, 194, 208, 232, 208, 208, 127, 2, 197, 193, 248, 252, 255, 151, 133, 2, }, { 123, 254, 152, 16, 152, 152, 183, 140, 239, 52, 250, 33, 235, 167, 193, 140, }, { 27, 186, 64, 219, 64, 64, 44, 221, 145, 232, 252, 133, 215, 247, 13, 221, }, { 59, 134, 8, 35, 8, 8, 228, 83, 187, 29, 254, 88, 195, 199, 73, 83, }, { 109, 117, 80, 157, 80, 80, 39, 123, 36, 210, 195, 53, 146, 186, 159, 123, }, { 77, 73, 24, 101, 24, 24, 239, 245, 14, 39, 193, 232, 134, 138, 219, 245, }, { 45, 13, 192, 174, 192, 192, 116, 164, 112, 251, 199, 76, 186, 218, 23, 164, }, { 13, 49, 136, 86, 136, 136, 188, 42, 90, 14, 197, 145, 174, 234, 83, 42, }, { 237, 133, 179, 251, 179, 179, 129, 6, 140, 128, 203, 199, 194, 122, 76, 6, }, { 205, 185, 251, 3, 251, 251, 73, 136, 166, 117, 201, 26, 214, 74, 8, 136, }, { 173, 253, 35, 200, 35, 35, 210, 217, 216, 169, 207, 190, 234, 26, 196, 217, }, { 141, 193, 107, 48, 107, 107, 26, 87, 242, 92, 205, 99, 254, 42, 128, 87, }, { 174, 86, 85, 81, 85, 85, 168, 129, 183, 118, 211, 18, 50, 249, 250, 129, }, { 142, 106, 29, 169, 29, 29, 96, 15, 157, 131, 209, 207, 38, 201, 190, 15, }, { 238, 46, 197, 98, 197, 197, 251, 94, 227, 95, 215, 107, 26, 153, 114, 94, }, { 206, 18, 141, 154, 141, 141, 51, 208, 201, 170, 213, 182, 14, 169, 54, 208, }, { 46, 166, 182, 55, 182, 182, 14, 252, 31, 36, 219, 224, 98, 57, 41, 252, }, { 14, 154, 254, 207, 254, 254, 198, 114, 53, 209, 217, 61, 118, 9, 109, 114, }, { 110, 222, 38, 4, 38, 38, 93, 35, 75, 13, 223, 153, 74, 89, 161, 35, }, { 78, 226, 110, 252, 110, 110, 149, 173, 97, 248, 221, 68, 94, 105, 229, 173, }, { 40, 51, 90, 198, 90, 90, 250, 76, 193, 89, 227, 123, 17, 60, 85, 76, }, { 8, 15, 18, 62, 18, 18, 50, 194, 235, 172, 225, 166, 5, 12, 17, 194, }, { 104, 75, 202, 245, 202, 202, 169, 147, 149, 112, 231, 2, 57, 92, 221, 147, }, { 72, 119, 130, 13, 130, 130, 97, 29, 191, 133, 229, 223, 45, 108, 153, 29, }, { 168, 195, 185, 160, 185, 185, 92, 49, 105, 11, 235, 137, 65, 252, 134, 49, }, { 136, 255, 241, 88, 241, 241, 148, 191, 67, 254, 233, 84, 85, 204, 194, 191, }, { 232, 187, 41, 147, 41, 41, 15, 238, 61, 34, 239, 240, 105, 156, 14, 238, }, { 200, 135, 97, 107, 97, 97, 199, 96, 23, 215, 237, 45, 125, 172, 74, 96, }, { 235, 16, 95, 10, 95, 95, 117, 182, 82, 253, 243, 92, 177, 127, 48, 182, }, { 203, 44, 23, 242, 23, 23, 189, 56, 120, 8, 241, 129, 165, 79, 116, 56, }, { 171, 104, 207, 57, 207, 207, 38, 105, 6, 212, 247, 37, 153, 31, 184, 105, }, { 139, 84, 135, 193, 135, 135, 238, 231, 44, 33, 245, 248, 141, 47, 252, 231, }, { 107, 224, 188, 108, 188, 188, 211, 203, 250, 175, 251, 174, 225, 191, 227, 203, }, { 75, 220, 244, 148, 244, 244, 27, 69, 208, 90, 249, 115, 245, 143, 167, 69, }, { 43, 152, 44, 95, 44, 44, 128, 20, 174, 134, 255, 215, 201, 223, 107, 20, }, { 11, 164, 100, 167, 100, 100, 72, 154, 132, 115, 253, 10, 221, 239, 47, 154, }, { 231, 249, 68, 43, 68, 68, 94, 21, 45, 7, 131, 169, 87, 117, 200, 21, }, { 199, 197, 12, 211, 12, 12, 150, 155, 7, 242, 129, 116, 67, 69, 140, 155, }, { 167, 129, 212, 24, 212, 212, 13, 202, 121, 46, 135, 208, 127, 21, 64, 202, }, { 135, 189, 156, 224, 156, 156, 197, 68, 83, 219, 133, 13, 107, 37, 4, 68, }, { 103, 9, 167, 77, 167, 167, 248, 104, 133, 85, 139, 91, 7, 181, 27, 104, }, { 71, 53, 239, 181, 239, 239, 48, 230, 175, 160, 137, 134, 19, 133, 95, 230, }, { 39, 113, 55, 126, 55, 55, 171, 183, 209, 124, 143, 34, 47, 213, 147, 183, }, { 7, 77, 127, 134, 127, 127, 99, 57, 251, 137, 141, 255, 59, 229, 215, 57, }, { 36, 218, 65, 231, 65, 65, 209, 239, 190, 163, 147, 142, 247, 54, 173, 239, }, { 4, 230, 9, 31, 9, 9, 25, 97, 148, 86, 145, 83, 227, 6, 233, 97, }, { 100, 162, 209, 212, 209, 209, 130, 48, 234, 138, 151, 247, 223, 86, 37, 48, }, { 68, 158, 153, 44, 153, 153, 74, 190, 192, 127, 149, 42, 203, 102, 97, 190, }, { 164, 42, 162, 129, 162, 162, 119, 146, 22, 241, 155, 124, 167, 246, 126, 146, }, { 132, 22, 234, 121, 234, 234, 191, 28, 60, 4, 153, 161, 179, 198, 58, 28, }, { 228, 82, 50, 178, 50, 50, 36, 77, 66, 216, 159, 5, 143, 150, 246, 77, }, { 196, 110, 122, 74, 122, 122, 236, 195, 104, 45, 157, 216, 155, 166, 178, 195, }, { 162, 191, 78, 112, 78, 78, 131, 34, 200, 140, 163, 231, 212, 243, 2, 34, }, { 130, 131, 6, 136, 6, 6, 75, 172, 226, 121, 161, 58, 192, 195, 70, 172, }, { 226, 199, 222, 67, 222, 222, 208, 253, 156, 165, 167, 158, 252, 147, 138, 253, }, { 194, 251, 150, 187, 150, 150, 24, 115, 182, 80, 165, 67, 232, 163, 206, 115, }, { 34, 79, 173, 22, 173, 173, 37, 95, 96, 222, 171, 21, 132, 51, 209, 95, }, { 2, 115, 229, 238, 229, 229, 237, 209, 74, 43, 169, 200, 144, 3, 149, 209, }, { 98, 55, 61, 37, 61, 61, 118, 128, 52, 247, 175, 108, 172, 83, 89, 128, }, { 66, 11, 117, 221, 117, 117, 190, 14, 30, 2, 173, 177, 184, 99, 29, 14, }, { 97, 156, 75, 188, 75, 75, 12, 216, 91, 40, 179, 192, 116, 176, 103, 216, }, { 65, 160, 3, 68, 3, 3, 196, 86, 113, 221, 177, 29, 96, 128, 35, 86, }, { 33, 228, 219, 143, 219, 219, 95, 7, 15, 1, 183, 185, 92, 208, 239, 7, }, { 1, 216, 147, 119, 147, 147, 151, 137, 37, 244, 181, 100, 72, 224, 171, 137, }, { 225, 108, 168, 218, 168, 168, 170, 165, 243, 122, 187, 50, 36, 112, 180, 165, }, { 193, 80, 224, 34, 224, 224, 98, 43, 217, 143, 185, 239, 48, 64, 240, 43, }, { 161, 20, 56, 233, 56, 56, 249, 122, 167, 83, 191, 75, 12, 16, 60, 122, }, { 129, 40, 112, 17, 112, 112, 49, 244, 141, 166, 189, 150, 24, 32, 120, 244, }, { 186, 174, 120, 50, 120, 120, 213, 167, 54, 187, 67, 206, 219, 231, 49, 167, }, { 154, 146, 48, 202, 48, 48, 29, 41, 28, 78, 65, 19, 207, 215, 117, 41, }, { 250, 214, 232, 1, 232, 232, 134, 120, 98, 146, 71, 183, 243, 135, 185, 120, }, { 218, 234, 160, 249, 160, 160, 78, 246, 72, 103, 69, 106, 231, 183, 253, 246, }, { 58, 94, 155, 84, 155, 155, 115, 218, 158, 233, 75, 60, 139, 39, 226, 218, }, { 26, 98, 211, 172, 211, 211, 187, 84, 180, 28, 73, 225, 159, 23, 166, 84, }, { 122, 38, 11, 103, 11, 11, 32, 5, 202, 192, 79, 69, 163, 71, 106, 5, }, { 90, 26, 67, 159, 67, 67, 232, 139, 224, 53, 77, 152, 183, 119, 46, 139, }, { 121, 141, 125, 254, 125, 125, 90, 93, 165, 31, 83, 233, 123, 164, 84, 93, }, { 89, 177, 53, 6, 53, 53, 146, 211, 143, 234, 81, 52, 111, 148, 16, 211, }, { 57, 245, 237, 205, 237, 237, 9, 130, 241, 54, 87, 144, 83, 196, 220, 130, }, { 25, 201, 165, 53, 165, 165, 193, 12, 219, 195, 85, 77, 71, 244, 152, 12, }, { 249, 125, 158, 152, 158, 158, 252, 32, 13, 77, 91, 27, 43, 100, 135, 32, }, { 217, 65, 214, 96, 214, 214, 52, 174, 39, 184, 89, 198, 63, 84, 195, 174, }, { 185, 5, 14, 171, 14, 14, 175, 255, 89, 100, 95, 98, 3, 4, 15, 255, }, { 153, 57, 70, 83, 70, 70, 103, 113, 115, 145, 93, 191, 23, 52, 75, 113, }, { 255, 232, 114, 105, 114, 114, 8, 144, 211, 48, 99, 128, 88, 97, 251, 144, }, { 223, 212, 58, 145, 58, 58, 192, 30, 249, 197, 97, 93, 76, 81, 191, 30, }, { 191, 144, 226, 90, 226, 226, 91, 79, 135, 25, 103, 249, 112, 1, 115, 79, }, { 159, 172, 170, 162, 170, 170, 147, 193, 173, 236, 101, 36, 100, 49, 55, 193, }, { 127, 24, 145, 15, 145, 145, 174, 237, 123, 98, 107, 114, 8, 161, 40, 237, }, { 95, 36, 217, 247, 217, 217, 102, 99, 81, 151, 105, 175, 28, 145, 108, 99, }, { 63, 96, 1, 60, 1, 1, 253, 50, 47, 75, 111, 11, 32, 193, 160, 50, }, { 31, 92, 73, 196, 73, 73, 53, 188, 5, 190, 109, 214, 52, 241, 228, 188, }, { 60, 203, 119, 165, 119, 119, 135, 106, 64, 148, 115, 167, 248, 34, 158, 106, }, { 28, 247, 63, 93, 63, 63, 79, 228, 106, 97, 113, 122, 236, 18, 218, 228, }, { 124, 179, 231, 150, 231, 231, 212, 181, 20, 189, 119, 222, 208, 66, 22, 181, }, { 92, 143, 175, 110, 175, 175, 28, 59, 62, 72, 117, 3, 196, 114, 82, 59, }, { 188, 59, 148, 195, 148, 148, 33, 23, 232, 198, 123, 85, 168, 226, 77, 23, }, { 156, 7, 220, 59, 220, 220, 233, 153, 194, 51, 121, 136, 188, 210, 9, 153, }, { 252, 67, 4, 240, 4, 4, 114, 200, 188, 239, 127, 44, 128, 130, 197, 200, }, { 220, 127, 76, 8, 76, 76, 186, 70, 150, 26, 125, 241, 148, 178, 129, 70, }, { 48, 34, 108, 132, 108, 108, 172, 201, 63, 110, 3, 82, 30, 40, 102, 201, }, { 16, 30, 36, 124, 36, 36, 100, 71, 21, 155, 1, 143, 10, 24, 34, 71, }, { 112, 90, 252, 183, 252, 252, 255, 22, 107, 71, 7, 43, 54, 72, 238, 22, }, { 80, 102, 180, 79, 180, 180, 55, 152, 65, 178, 5, 246, 34, 120, 170, 152, }, { 176, 210, 143, 226, 143, 143, 10, 180, 151, 60, 11, 160, 78, 232, 181, 180, }, { 144, 238, 199, 26, 199, 199, 194, 58, 189, 201, 9, 125, 90, 216, 241, 58, }, { 240, 170, 31, 209, 31, 31, 89, 107, 195, 21, 15, 217, 102, 136, 61, 107, }, { 208, 150, 87, 41, 87, 87, 145, 229, 233, 224, 13, 4, 114, 184, 121, 229, }, { 243, 1, 105, 72, 105, 105, 35, 51, 172, 202, 19, 117, 190, 107, 3, 51, }, { 211, 61, 33, 176, 33, 33, 235, 189, 134, 63, 17, 168, 170, 91, 71, 189, }, { 179, 121, 249, 123, 249, 249, 112, 236, 248, 227, 23, 12, 150, 11, 139, 236, }, { 147, 69, 177, 131, 177, 177, 184, 98, 210, 22, 21, 209, 130, 59, 207, 98, }, { 115, 241, 138, 46, 138, 138, 133, 78, 4, 152, 27, 135, 238, 171, 208, 78, }, { 83, 205, 194, 214, 194, 194, 77, 192, 46, 109, 25, 90, 250, 155, 148, 192, }, { 51, 137, 26, 29, 26, 26, 214, 145, 80, 177, 31, 254, 198, 203, 88, 145, }, { 19, 181, 82, 229, 82, 82, 30, 31, 122, 68, 29, 35, 210, 251, 28, 31, }, { 117, 100, 102, 223, 102, 102, 113, 254, 218, 229, 35, 28, 157, 174, 172, 254, }, { 85, 88, 46, 39, 46, 46, 185, 112, 240, 16, 33, 193, 137, 158, 232, 112, }, { 53, 28, 246, 236, 246, 246, 34, 33, 142, 204, 39, 101, 181, 206, 36, 33, }, { 21, 32, 190, 20, 190, 190, 234, 175, 164, 57, 37, 184, 161, 254, 96, 175, }, { 245, 148, 133, 185, 133, 133, 215, 131, 114, 183, 43, 238, 205, 110, 127, 131, }, { 213, 168, 205, 65, 205, 205, 31, 13, 88, 66, 41, 51, 217, 94, 59, 13, }, { 181, 236, 21, 138, 21, 21, 132, 92, 38, 158, 47, 151, 229, 14, 247, 92, }, { 149, 208, 93, 114, 93, 93, 76, 210, 12, 107, 45, 74, 241, 62, 179, 210, }, { 182, 71, 99, 19, 99, 99, 254, 4, 73, 65, 51, 59, 61, 237, 201, 4, }, { 150, 123, 43, 235, 43, 43, 54, 138, 99, 180, 49, 230, 41, 221, 141, 138, }, { 246, 63, 243, 32, 243, 243, 173, 219, 29, 104, 55, 66, 21, 141, 65, 219, }, { 214, 3, 187, 216, 187, 187, 101, 85, 55, 157, 53, 159, 1, 189, 5, 85, }, { 54, 183, 128, 117, 128, 128, 88, 121, 225, 19, 59, 201, 109, 45, 26, 121, }, { 22, 139, 200, 141, 200, 200, 144, 247, 203, 230, 57, 20, 121, 29, 94, 247, }, { 118, 207, 16, 70, 16, 16, 11, 166, 181, 58, 63, 176, 69, 77, 146, 166, }, { 86, 243, 88, 190, 88, 88, 195, 40, 159, 207, 61, 109, 81, 125, 214, 40, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 133, 68, 223, 82, 127, 198, 152, 96, 212, 82, 14, 101, 7, 159, 134, 234, }, { 201, 136, 125, 164, 254, 79, 243, 192, 107, 164, 28, 202, 14, 253, 207, 23, }, { 76, 204, 162, 246, 129, 137, 107, 160, 191, 246, 18, 175, 9, 98, 73, 253, }, { 81, 211, 250, 139, 63, 158, 37, 67, 214, 139, 56, 87, 28, 57, 93, 46, }, { 212, 151, 37, 217, 64, 88, 189, 35, 2, 217, 54, 50, 27, 166, 219, 196, }, { 152, 91, 135, 47, 193, 209, 214, 131, 189, 47, 36, 157, 18, 196, 146, 57, }, { 29, 31, 88, 125, 190, 23, 78, 227, 105, 125, 42, 248, 21, 91, 20, 211, }, { 162, 101, 55, 213, 126, 255, 74, 134, 111, 213, 112, 174, 56, 114, 186, 92, }, { 39, 33, 232, 135, 1, 57, 210, 230, 187, 135, 126, 203, 63, 237, 60, 182, }, { 107, 237, 74, 113, 128, 176, 185, 70, 4, 113, 108, 100, 54, 143, 117, 75, }, { 238, 169, 149, 35, 255, 118, 33, 38, 208, 35, 98, 1, 49, 16, 243, 161, }, { 243, 182, 205, 94, 65, 97, 111, 197, 185, 94, 72, 249, 36, 75, 231, 114, }, { 118, 242, 18, 12, 62, 167, 247, 165, 109, 12, 70, 156, 35, 212, 97, 152, }, { 58, 62, 176, 250, 191, 46, 156, 5, 210, 250, 84, 51, 42, 182, 40, 101, }, { 191, 122, 111, 168, 192, 232, 4, 101, 6, 168, 90, 86, 45, 41, 174, 143, }, { 135, 202, 110, 105, 252, 61, 148, 207, 222, 105, 224, 159, 112, 228, 183, 184, }, { 2, 142, 177, 59, 131, 251, 12, 175, 10, 59, 238, 250, 119, 123, 49, 82, }, { 78, 66, 19, 205, 2, 114, 103, 15, 181, 205, 252, 85, 126, 25, 120, 175, }, { 203, 6, 204, 159, 125, 180, 255, 111, 97, 159, 242, 48, 121, 134, 254, 69, }, { 214, 25, 148, 226, 195, 163, 177, 140, 8, 226, 216, 200, 108, 221, 234, 150, }, { 83, 93, 75, 176, 188, 101, 41, 236, 220, 176, 214, 173, 107, 66, 108, 124, }, { 31, 145, 233, 70, 61, 236, 66, 76, 99, 70, 196, 2, 98, 32, 37, 129, }, { 154, 213, 54, 20, 66, 42, 218, 44, 183, 20, 202, 103, 101, 191, 163, 107, }, { 37, 175, 89, 188, 130, 194, 222, 73, 177, 188, 144, 49, 72, 150, 13, 228, }, { 160, 235, 134, 238, 253, 4, 70, 41, 101, 238, 158, 84, 79, 9, 139, 14, }, { 236, 39, 36, 24, 124, 141, 45, 137, 218, 24, 140, 251, 70, 107, 194, 243, }, { 105, 99, 251, 74, 3, 75, 181, 233, 14, 74, 130, 158, 65, 244, 68, 25, }, { 116, 124, 163, 55, 189, 92, 251, 10, 103, 55, 168, 102, 84, 175, 80, 202, }, { 241, 56, 124, 101, 194, 154, 99, 106, 179, 101, 166, 3, 83, 48, 214, 32, }, { 189, 244, 222, 147, 67, 19, 8, 202, 12, 147, 180, 172, 90, 82, 159, 221, }, { 56, 176, 1, 193, 60, 213, 144, 170, 216, 193, 186, 201, 93, 205, 25, 55, }, { 205, 87, 220, 210, 59, 122, 235, 93, 127, 210, 3, 253, 224, 11, 173, 179, }, { 72, 19, 3, 128, 68, 188, 115, 61, 171, 128, 13, 152, 231, 148, 43, 89, }, { 4, 223, 161, 118, 197, 53, 24, 157, 20, 118, 31, 55, 238, 246, 98, 164, }, { 129, 155, 126, 36, 186, 243, 128, 253, 192, 36, 17, 82, 233, 105, 228, 78, }, { 156, 132, 38, 89, 4, 228, 206, 30, 169, 89, 59, 170, 252, 50, 240, 157, }, { 25, 192, 249, 11, 123, 34, 86, 126, 125, 11, 53, 207, 251, 173, 118, 119, }, { 85, 12, 91, 253, 250, 171, 61, 222, 194, 253, 39, 96, 242, 207, 63, 138, }, { 208, 72, 132, 175, 133, 109, 165, 190, 22, 175, 41, 5, 245, 80, 185, 96, }, { 111, 50, 235, 7, 69, 133, 161, 219, 16, 7, 115, 83, 216, 121, 23, 239, }, { 234, 118, 52, 85, 58, 67, 57, 187, 196, 85, 125, 54, 223, 230, 145, 5, }, { 166, 186, 150, 163, 187, 202, 82, 27, 123, 163, 111, 153, 214, 132, 216, 248, }, { 35, 254, 73, 241, 196, 12, 202, 123, 175, 241, 97, 252, 209, 27, 94, 18, }, { 62, 225, 17, 140, 122, 27, 132, 152, 198, 140, 75, 4, 196, 64, 74, 193, }, { 187, 165, 206, 222, 5, 221, 28, 248, 18, 222, 69, 97, 195, 223, 204, 43, }, { 247, 105, 108, 40, 132, 84, 119, 88, 173, 40, 87, 206, 202, 189, 133, 214, }, { 114, 45, 179, 122, 251, 146, 239, 56, 121, 122, 89, 171, 205, 34, 3, 60, }, { 74, 157, 178, 187, 199, 71, 127, 146, 161, 187, 227, 98, 144, 239, 26, 11, }, { 207, 217, 109, 233, 184, 129, 231, 242, 117, 233, 237, 7, 151, 112, 156, 225, }, { 131, 21, 207, 31, 57, 8, 140, 82, 202, 31, 255, 168, 158, 18, 213, 28, }, { 6, 81, 16, 77, 70, 206, 20, 50, 30, 77, 241, 205, 153, 141, 83, 246, }, { 27, 78, 72, 48, 248, 217, 90, 209, 119, 48, 219, 53, 140, 214, 71, 37, }, { 158, 10, 151, 98, 135, 31, 194, 177, 163, 98, 213, 80, 139, 73, 193, 207, }, { 210, 198, 53, 148, 6, 150, 169, 17, 28, 148, 199, 255, 130, 43, 136, 50, }, { 87, 130, 234, 198, 121, 80, 49, 113, 200, 198, 201, 154, 133, 180, 14, 216, }, { 232, 248, 133, 110, 185, 184, 53, 20, 206, 110, 147, 204, 168, 157, 160, 87, }, { 109, 188, 90, 60, 198, 126, 173, 116, 26, 60, 157, 169, 175, 2, 38, 189, }, { 33, 112, 248, 202, 71, 247, 198, 212, 165, 202, 143, 6, 166, 96, 111, 64, }, { 164, 52, 39, 152, 56, 49, 94, 180, 113, 152, 129, 99, 161, 255, 233, 170, }, { 185, 43, 127, 229, 134, 38, 16, 87, 24, 229, 171, 155, 180, 164, 253, 121, }, { 60, 111, 160, 183, 249, 224, 136, 55, 204, 183, 165, 254, 179, 59, 123, 147, }, { 112, 163, 2, 65, 120, 105, 227, 151, 115, 65, 183, 81, 186, 89, 50, 110, }, { 245, 231, 221, 19, 7, 175, 123, 247, 167, 19, 185, 52, 189, 198, 180, 132, }, { 89, 174, 123, 103, 118, 244, 21, 186, 254, 103, 6, 57, 3, 22, 153, 165, }, { 220, 234, 164, 53, 9, 50, 141, 218, 42, 53, 8, 92, 4, 137, 31, 79, }, { 144, 38, 6, 195, 136, 187, 230, 122, 149, 195, 26, 243, 13, 235, 86, 178, }, { 21, 98, 217, 145, 247, 125, 126, 26, 65, 145, 20, 150, 10, 116, 208, 88, }, { 8, 125, 129, 236, 73, 106, 48, 249, 40, 236, 62, 110, 31, 47, 196, 139, }, { 141, 57, 94, 190, 54, 172, 168, 153, 252, 190, 48, 11, 24, 176, 66, 97, }, { 193, 245, 252, 72, 183, 37, 195, 57, 67, 72, 34, 164, 17, 210, 11, 156, }, { 68, 177, 35, 26, 200, 227, 91, 89, 151, 26, 44, 193, 22, 77, 141, 118, }, { 251, 203, 76, 178, 8, 11, 95, 60, 145, 178, 118, 151, 59, 100, 35, 249, }, { 126, 143, 147, 224, 119, 205, 199, 92, 69, 224, 120, 242, 60, 251, 165, 19, }, { 50, 67, 49, 22, 246, 68, 172, 252, 250, 22, 106, 93, 53, 153, 236, 238, }, { 183, 7, 238, 68, 137, 130, 52, 156, 46, 68, 100, 56, 50, 6, 106, 4, }, { 170, 24, 182, 57, 55, 149, 122, 127, 71, 57, 78, 192, 39, 93, 126, 215, }, { 47, 92, 105, 107, 72, 83, 226, 31, 147, 107, 64, 165, 32, 194, 248, 61, }, { 99, 144, 203, 157, 201, 218, 137, 191, 44, 157, 82, 10, 41, 160, 177, 192, }, { 230, 212, 20, 207, 182, 28, 17, 223, 248, 207, 92, 111, 46, 63, 55, 42, }, { 222, 100, 21, 14, 138, 201, 129, 117, 32, 14, 230, 166, 115, 242, 46, 29, }, { 91, 32, 202, 92, 245, 15, 25, 21, 244, 92, 232, 195, 116, 109, 168, 247, }, { 23, 236, 104, 170, 116, 134, 114, 181, 75, 170, 250, 108, 125, 15, 225, 10, }, { 146, 168, 183, 248, 11, 64, 234, 213, 159, 248, 244, 9, 122, 144, 103, 224, }, { 143, 183, 239, 133, 181, 87, 164, 54, 246, 133, 222, 241, 111, 203, 115, 51, }, { 10, 243, 48, 215, 202, 145, 60, 86, 34, 215, 208, 148, 104, 84, 245, 217, }, { 70, 63, 146, 33, 75, 24, 87, 246, 157, 33, 194, 59, 97, 54, 188, 36, }, { 195, 123, 77, 115, 52, 222, 207, 150, 73, 115, 204, 94, 102, 169, 58, 206, }, { 124, 1, 34, 219, 244, 54, 203, 243, 79, 219, 150, 8, 75, 128, 148, 65, }, { 249, 69, 253, 137, 139, 240, 83, 147, 155, 137, 152, 109, 76, 31, 18, 171, }, { 181, 137, 95, 127, 10, 121, 56, 51, 36, 127, 138, 194, 69, 125, 91, 86, }, { 48, 205, 128, 45, 117, 191, 160, 83, 240, 45, 132, 167, 66, 226, 221, 188, }, { 45, 210, 216, 80, 203, 168, 238, 176, 153, 80, 174, 95, 87, 185, 201, 111, }, { 168, 150, 7, 2, 180, 110, 118, 208, 77, 2, 160, 58, 80, 38, 79, 133, }, { 228, 90, 165, 244, 53, 231, 29, 112, 242, 244, 178, 149, 89, 68, 6, 120, }, { 97, 30, 122, 166, 74, 33, 133, 16, 38, 166, 188, 240, 94, 219, 128, 146, }, { 148, 249, 167, 181, 77, 142, 254, 231, 129, 181, 5, 196, 227, 29, 52, 22, }, { 17, 189, 120, 231, 50, 72, 102, 135, 85, 231, 11, 161, 228, 130, 178, 252, }, { 93, 113, 218, 17, 179, 193, 13, 39, 234, 17, 25, 14, 237, 224, 251, 1, }, { 216, 53, 5, 67, 204, 7, 149, 71, 62, 67, 23, 107, 234, 127, 125, 235, }, { 197, 42, 93, 62, 114, 16, 219, 164, 87, 62, 61, 147, 255, 36, 105, 56, }, { 64, 110, 130, 108, 13, 214, 67, 196, 131, 108, 51, 246, 248, 187, 239, 210, }, { 12, 162, 32, 154, 140, 95, 40, 100, 60, 154, 33, 89, 241, 217, 166, 47, }, { 137, 230, 255, 200, 243, 153, 176, 4, 232, 200, 47, 60, 246, 70, 32, 197, }, { 54, 156, 144, 96, 51, 113, 180, 97, 238, 96, 117, 106, 219, 111, 142, 74, }, { 179, 216, 79, 50, 76, 183, 44, 1, 58, 50, 123, 15, 220, 240, 8, 160, }, { 255, 20, 237, 196, 205, 62, 71, 161, 133, 196, 105, 160, 213, 146, 65, 93, }, { 122, 80, 50, 150, 178, 248, 223, 193, 81, 150, 103, 197, 210, 13, 199, 183, }, { 103, 79, 106, 235, 12, 239, 145, 34, 56, 235, 77, 61, 199, 86, 211, 100, }, { 226, 11, 181, 185, 115, 41, 9, 66, 236, 185, 67, 88, 192, 201, 85, 142, }, { 174, 199, 23, 79, 242, 160, 98, 226, 83, 79, 81, 247, 201, 171, 28, 115, }, { 43, 131, 200, 29, 141, 102, 250, 130, 135, 29, 95, 146, 206, 52, 154, 153, }, { 19, 51, 201, 220, 177, 179, 106, 40, 95, 220, 229, 91, 147, 249, 131, 174, }, { 150, 119, 22, 142, 206, 117, 242, 72, 139, 142, 235, 62, 148, 102, 5, 68, }, { 218, 187, 180, 120, 79, 252, 153, 232, 52, 120, 249, 145, 157, 4, 76, 185, }, { 95, 255, 107, 42, 48, 58, 1, 136, 224, 42, 247, 244, 154, 155, 202, 83, }, { 66, 224, 51, 87, 142, 45, 79, 107, 137, 87, 221, 12, 143, 192, 222, 128, }, { 199, 164, 236, 5, 241, 235, 215, 11, 93, 5, 211, 105, 136, 95, 88, 106, }, { 139, 104, 78, 243, 112, 98, 188, 171, 226, 243, 193, 198, 129, 61, 17, 151, }, { 14, 44, 145, 161, 15, 164, 36, 203, 54, 161, 207, 163, 134, 162, 151, 125, }, { 177, 86, 254, 9, 207, 76, 32, 174, 48, 9, 149, 245, 171, 139, 57, 242, }, { 52, 18, 33, 91, 176, 138, 184, 206, 228, 91, 155, 144, 172, 20, 191, 24, }, { 120, 222, 131, 173, 49, 3, 211, 110, 91, 173, 137, 63, 165, 118, 246, 229, }, { 253, 154, 92, 255, 78, 197, 75, 14, 143, 255, 135, 90, 162, 233, 112, 15, }, { 224, 133, 4, 130, 240, 210, 5, 237, 230, 130, 173, 162, 183, 178, 100, 220, }, { 101, 193, 219, 208, 143, 20, 157, 141, 50, 208, 163, 199, 176, 45, 226, 54, }, { 41, 13, 121, 38, 14, 157, 246, 45, 141, 38, 177, 104, 185, 79, 171, 203, }, { 172, 73, 166, 116, 113, 91, 110, 77, 89, 116, 191, 13, 190, 208, 45, 33, }, { 178, 159, 246, 206, 236, 43, 42, 183, 63, 206, 12, 114, 6, 44, 241, 137, }, { 55, 219, 41, 156, 147, 237, 178, 215, 235, 156, 2, 23, 1, 179, 119, 99, }, { 123, 23, 139, 106, 18, 100, 217, 119, 84, 106, 16, 184, 8, 209, 62, 158, }, { 254, 83, 84, 56, 109, 162, 65, 23, 128, 56, 30, 221, 15, 78, 184, 116, }, { 227, 76, 12, 69, 211, 181, 15, 244, 233, 69, 52, 37, 26, 21, 172, 167, }, { 102, 8, 211, 23, 172, 115, 151, 148, 61, 23, 58, 64, 29, 138, 42, 77, }, { 42, 196, 113, 225, 45, 250, 252, 52, 130, 225, 40, 239, 20, 232, 99, 176, }, { 175, 128, 174, 179, 82, 60, 100, 84, 86, 179, 38, 138, 19, 119, 229, 90, }, { 16, 250, 193, 27, 146, 212, 96, 49, 80, 27, 124, 220, 62, 94, 75, 213, }, { 149, 190, 30, 73, 237, 18, 248, 81, 132, 73, 114, 185, 57, 193, 205, 63, }, { 217, 114, 188, 191, 108, 155, 147, 241, 59, 191, 96, 22, 48, 163, 132, 194, }, { 92, 54, 99, 237, 19, 93, 11, 145, 239, 237, 110, 115, 55, 60, 2, 40, }, { 65, 41, 59, 144, 173, 74, 69, 114, 134, 144, 68, 139, 34, 103, 22, 251, }, { 196, 109, 228, 194, 210, 140, 221, 18, 82, 194, 74, 238, 37, 248, 144, 17, }, { 136, 161, 70, 52, 83, 5, 182, 178, 237, 52, 88, 65, 44, 154, 217, 236, }, { 13, 229, 153, 102, 44, 195, 46, 210, 57, 102, 86, 36, 43, 5, 95, 6, }, { 53, 85, 152, 167, 16, 22, 190, 120, 225, 167, 236, 237, 118, 200, 70, 49, }, { 176, 17, 71, 245, 111, 208, 38, 24, 53, 245, 226, 136, 113, 87, 192, 219, }, { 252, 221, 229, 3, 238, 89, 77, 184, 138, 3, 240, 39, 120, 53, 137, 38, }, { 121, 153, 58, 81, 145, 159, 213, 216, 94, 81, 254, 66, 127, 170, 15, 204, }, { 100, 134, 98, 44, 47, 136, 155, 59, 55, 44, 212, 186, 106, 241, 27, 31, }, { 225, 194, 189, 126, 80, 78, 3, 91, 227, 126, 218, 223, 109, 110, 157, 245, }, { 173, 14, 31, 136, 209, 199, 104, 251, 92, 136, 200, 112, 100, 12, 212, 8, }, { 40, 74, 192, 218, 174, 1, 240, 155, 136, 218, 198, 21, 99, 147, 82, 226, }, { 151, 48, 175, 114, 110, 233, 244, 254, 142, 114, 156, 67, 78, 186, 252, 109, }, { 18, 116, 112, 32, 17, 47, 108, 158, 90, 32, 146, 38, 73, 37, 122, 135, }, { 94, 184, 210, 214, 144, 166, 7, 62, 229, 214, 128, 137, 64, 71, 51, 122, }, { 219, 252, 13, 132, 239, 96, 159, 94, 49, 132, 142, 236, 71, 216, 181, 144, }, { 198, 227, 85, 249, 81, 119, 209, 189, 88, 249, 164, 20, 82, 131, 161, 67, }, { 67, 167, 138, 171, 46, 177, 73, 221, 140, 171, 170, 113, 85, 28, 39, 169, }, { 15, 107, 40, 93, 175, 56, 34, 125, 51, 93, 184, 222, 92, 126, 110, 84, }, { 138, 47, 247, 15, 208, 254, 186, 29, 231, 15, 182, 187, 91, 225, 232, 190, }, { 127, 200, 42, 28, 215, 81, 193, 234, 64, 28, 15, 143, 230, 39, 92, 58, }, { 250, 140, 245, 78, 168, 151, 89, 138, 148, 78, 1, 234, 225, 184, 218, 208, }, { 182, 64, 87, 184, 41, 30, 50, 42, 43, 184, 19, 69, 232, 218, 147, 45, }, { 51, 4, 136, 234, 86, 216, 170, 74, 255, 234, 29, 32, 239, 69, 21, 199, }, { 46, 27, 208, 151, 232, 207, 228, 169, 150, 151, 55, 216, 250, 30, 1, 20, }, { 171, 95, 15, 197, 151, 9, 124, 201, 66, 197, 57, 189, 253, 129, 135, 254, }, { 231, 147, 173, 51, 22, 128, 23, 105, 253, 51, 43, 18, 244, 227, 206, 3, }, { 98, 215, 114, 97, 105, 70, 143, 9, 41, 97, 37, 119, 243, 124, 72, 233, }, { 221, 173, 29, 201, 169, 174, 139, 108, 47, 201, 127, 33, 222, 85, 230, 102, }, { 88, 233, 194, 155, 214, 104, 19, 12, 251, 155, 113, 68, 217, 202, 96, 140, }, { 20, 37, 96, 109, 87, 225, 120, 172, 68, 109, 99, 235, 208, 168, 41, 113, }, { 145, 97, 191, 63, 40, 39, 224, 204, 144, 63, 109, 142, 215, 55, 175, 155, }, { 140, 126, 231, 66, 150, 48, 174, 47, 249, 66, 71, 118, 194, 108, 187, 72, }, { 9, 58, 56, 16, 233, 246, 54, 79, 45, 16, 73, 19, 197, 243, 61, 162, }, { 69, 246, 154, 230, 104, 127, 93, 239, 146, 230, 91, 188, 204, 145, 116, 95, }, { 192, 178, 69, 180, 23, 185, 197, 143, 70, 180, 85, 217, 203, 14, 242, 181, }, { 248, 2, 68, 117, 43, 108, 85, 37, 158, 117, 239, 16, 150, 195, 235, 130, }, { 125, 70, 155, 39, 84, 170, 205, 69, 74, 39, 225, 117, 145, 92, 109, 104, }, { 49, 138, 57, 209, 213, 35, 166, 229, 245, 209, 243, 218, 152, 62, 36, 149, }, { 180, 206, 230, 131, 170, 229, 62, 133, 33, 131, 253, 191, 159, 161, 162, 127, }, { 169, 209, 190, 254, 20, 242, 112, 102, 72, 254, 215, 71, 138, 250, 182, 172, }, { 44, 149, 97, 172, 107, 52, 232, 6, 156, 172, 217, 34, 141, 101, 48, 70, }, { 96, 89, 195, 90, 234, 189, 131, 166, 35, 90, 203, 141, 132, 7, 121, 187, }, { 229, 29, 28, 8, 149, 123, 27, 198, 247, 8, 197, 232, 131, 152, 255, 81, }, { 90, 103, 115, 160, 85, 147, 31, 163, 241, 160, 159, 190, 174, 177, 81, 222, }, { 223, 35, 172, 242, 42, 85, 135, 195, 37, 242, 145, 219, 169, 46, 215, 52, }, { 147, 239, 14, 4, 171, 220, 236, 99, 154, 4, 131, 116, 160, 76, 158, 201, }, { 22, 171, 209, 86, 212, 26, 116, 3, 78, 86, 141, 17, 167, 211, 24, 35, }, { 11, 180, 137, 43, 106, 13, 58, 224, 39, 43, 167, 233, 178, 136, 12, 240, }, { 142, 240, 86, 121, 21, 203, 162, 128, 243, 121, 169, 140, 181, 23, 138, 26, }, { 194, 60, 244, 143, 148, 66, 201, 32, 76, 143, 187, 35, 188, 117, 195, 231, }, { 71, 120, 43, 221, 235, 132, 81, 64, 152, 221, 181, 70, 187, 234, 69, 13, }, { 235, 49, 141, 169, 154, 223, 63, 13, 193, 169, 10, 75, 5, 58, 104, 44, }, { 110, 117, 82, 251, 229, 25, 167, 109, 21, 251, 4, 46, 2, 165, 238, 198, }, { 34, 185, 240, 13, 100, 144, 204, 205, 170, 13, 22, 129, 11, 199, 167, 59, }, { 167, 253, 47, 95, 27, 86, 84, 173, 126, 95, 24, 228, 12, 88, 33, 209, }, { 186, 226, 119, 34, 165, 65, 26, 78, 23, 34, 50, 28, 25, 3, 53, 2, }, { 63, 166, 168, 112, 218, 135, 130, 46, 195, 112, 60, 121, 30, 156, 179, 232, }, { 115, 106, 10, 134, 91, 14, 233, 142, 124, 134, 46, 214, 23, 254, 250, 21, }, { 246, 46, 213, 212, 36, 200, 113, 238, 168, 212, 32, 179, 16, 97, 124, 255, }, { 73, 84, 186, 124, 228, 32, 117, 139, 174, 124, 122, 229, 61, 72, 210, 112, }, { 204, 16, 101, 46, 155, 230, 237, 235, 122, 46, 116, 128, 58, 215, 84, 154, }, { 128, 220, 199, 216, 26, 111, 134, 75, 197, 216, 102, 47, 51, 181, 29, 103, }, { 5, 152, 24, 138, 101, 169, 30, 43, 17, 138, 104, 74, 52, 42, 155, 141, }, { 24, 135, 64, 247, 219, 190, 80, 200, 120, 247, 66, 178, 33, 113, 143, 94, }, { 157, 195, 159, 165, 164, 120, 200, 168, 172, 165, 76, 215, 38, 238, 9, 180, }, { 209, 15, 61, 83, 37, 241, 163, 8, 19, 83, 94, 120, 47, 140, 64, 73, }, { 84, 75, 226, 1, 90, 55, 59, 104, 199, 1, 80, 29, 40, 19, 198, 163, }, { 108, 251, 227, 192, 102, 226, 171, 194, 31, 192, 234, 212, 117, 222, 223, 148, }, { 233, 191, 60, 146, 25, 36, 51, 162, 203, 146, 228, 177, 114, 65, 89, 126, }, { 165, 115, 158, 100, 152, 173, 88, 2, 116, 100, 246, 30, 123, 35, 16, 131, }, { 32, 55, 65, 54, 231, 107, 192, 98, 160, 54, 248, 123, 124, 188, 150, 105, }, { 61, 40, 25, 75, 89, 124, 142, 129, 201, 75, 210, 131, 105, 231, 130, 186, }, { 184, 108, 198, 25, 38, 186, 22, 225, 29, 25, 220, 230, 110, 120, 4, 80, }, { 244, 160, 100, 239, 167, 51, 125, 65, 162, 239, 206, 73, 103, 26, 77, 173, }, { 113, 228, 187, 189, 216, 245, 229, 33, 118, 189, 192, 44, 96, 133, 203, 71, }, { 206, 158, 212, 21, 24, 29, 225, 68, 112, 21, 154, 122, 77, 172, 101, 200, }, { 75, 218, 11, 71, 103, 219, 121, 36, 164, 71, 148, 31, 74, 51, 227, 34, }, { 7, 22, 169, 177, 230, 82, 18, 132, 27, 177, 134, 176, 67, 81, 170, 223, }, { 130, 82, 118, 227, 153, 148, 138, 228, 207, 227, 136, 213, 68, 206, 44, 53, }, { 159, 77, 46, 158, 39, 131, 196, 7, 166, 158, 162, 45, 81, 149, 56, 230, }, { 26, 9, 241, 204, 88, 69, 92, 103, 114, 204, 172, 72, 86, 10, 190, 12, }, { 86, 197, 83, 58, 217, 204, 55, 199, 205, 58, 190, 231, 95, 104, 247, 241, }, { 211, 129, 140, 104, 166, 10, 175, 167, 25, 104, 176, 130, 88, 247, 113, 27, }, { 38, 102, 81, 123, 161, 165, 212, 80, 190, 123, 9, 182, 229, 49, 197, 159, }, { 163, 34, 142, 41, 222, 99, 76, 48, 106, 41, 7, 211, 226, 174, 67, 117, }, { 239, 238, 44, 223, 95, 234, 39, 144, 213, 223, 21, 124, 235, 204, 10, 136, }, { 106, 170, 243, 141, 32, 44, 191, 240, 1, 141, 27, 25, 236, 83, 140, 98, }, { 119, 181, 171, 240, 158, 59, 241, 19, 104, 240, 49, 225, 249, 8, 152, 177, }, { 242, 241, 116, 162, 225, 253, 105, 115, 188, 162, 63, 132, 254, 151, 30, 91, }, { 190, 61, 214, 84, 96, 116, 2, 211, 3, 84, 45, 43, 247, 245, 87, 166, }, { 59, 121, 9, 6, 31, 178, 154, 179, 215, 6, 35, 78, 240, 106, 209, 76, }, { 132, 3, 102, 174, 223, 90, 158, 214, 209, 174, 121, 24, 221, 67, 127, 195, }, { 1, 71, 185, 252, 160, 156, 6, 182, 5, 252, 119, 125, 218, 220, 249, 41, }, { 77, 139, 27, 10, 33, 21, 109, 22, 186, 10, 101, 210, 211, 190, 176, 212, }, { 200, 207, 196, 88, 94, 211, 245, 118, 110, 88, 107, 183, 212, 33, 54, 62, }, { 213, 208, 156, 37, 224, 196, 187, 149, 7, 37, 65, 79, 193, 122, 34, 237, }, { 80, 148, 67, 119, 159, 2, 35, 245, 211, 119, 79, 42, 198, 229, 164, 7, }, { 28, 88, 225, 129, 30, 139, 72, 85, 108, 129, 93, 133, 207, 135, 237, 250, }, { 153, 28, 62, 211, 97, 77, 208, 53, 184, 211, 83, 224, 200, 24, 107, 16, }, { 161, 172, 63, 18, 93, 152, 64, 159, 96, 18, 233, 41, 149, 213, 114, 39, }, { 36, 232, 224, 64, 34, 94, 216, 255, 180, 64, 231, 76, 146, 74, 244, 205, }, { 104, 36, 66, 182, 163, 215, 179, 95, 11, 182, 245, 227, 155, 40, 189, 48, }, { 237, 96, 157, 228, 220, 17, 43, 63, 223, 228, 251, 134, 156, 183, 59, 218, }, { 240, 127, 197, 153, 98, 6, 101, 220, 182, 153, 209, 126, 137, 236, 47, 9, }, { 117, 59, 26, 203, 29, 192, 253, 188, 98, 203, 223, 27, 142, 115, 169, 227, }, { 57, 247, 184, 61, 156, 73, 150, 28, 221, 61, 205, 180, 135, 17, 224, 30, }, { 188, 179, 103, 111, 227, 143, 14, 124, 9, 111, 195, 209, 128, 142, 102, 244, }, { 3, 201, 8, 199, 35, 103, 10, 25, 15, 199, 153, 135, 173, 167, 200, 123, }, { 134, 141, 215, 149, 92, 161, 146, 121, 219, 149, 151, 226, 170, 56, 78, 145, }, { 202, 65, 117, 99, 221, 40, 249, 217, 100, 99, 133, 77, 163, 90, 7, 108, }, { 79, 5, 170, 49, 162, 238, 97, 185, 176, 49, 139, 40, 164, 197, 129, 134, }, { 82, 26, 242, 76, 28, 249, 47, 90, 217, 76, 161, 208, 177, 158, 149, 85, }, { 215, 94, 45, 30, 99, 63, 183, 58, 13, 30, 175, 181, 182, 1, 19, 191, }, { 155, 146, 143, 232, 226, 182, 220, 154, 178, 232, 189, 26, 191, 99, 90, 66, }, { 30, 214, 80, 186, 157, 112, 68, 250, 102, 186, 179, 127, 184, 252, 220, 168, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 16, 209, 211, 145, 145, 254, 243, 1, 177, 120, 88, 1, 73, 107, 45, 169, }, { 32, 97, 101, 225, 225, 63, 37, 2, 161, 240, 176, 2, 146, 214, 90, 145, }, { 48, 176, 182, 112, 112, 193, 214, 3, 16, 136, 232, 3, 219, 189, 119, 56, }, { 64, 194, 202, 1, 1, 126, 74, 4, 129, 35, 163, 4, 231, 111, 180, 225, }, { 80, 19, 25, 144, 144, 128, 185, 5, 48, 91, 251, 5, 174, 4, 153, 72, }, { 96, 163, 175, 224, 224, 65, 111, 6, 32, 211, 19, 6, 117, 185, 238, 112, }, { 112, 114, 124, 113, 113, 191, 156, 7, 145, 171, 75, 7, 60, 210, 195, 217, }, { 128, 71, 87, 2, 2, 252, 148, 8, 193, 70, 133, 8, 13, 222, 171, 1, }, { 144, 150, 132, 147, 147, 2, 103, 9, 112, 62, 221, 9, 68, 181, 134, 168, }, { 160, 38, 50, 227, 227, 195, 177, 10, 96, 182, 53, 10, 159, 8, 241, 144, }, { 176, 247, 225, 114, 114, 61, 66, 11, 209, 206, 109, 11, 214, 99, 220, 57, }, { 192, 133, 157, 3, 3, 130, 222, 12, 64, 101, 38, 12, 234, 177, 31, 224, }, { 208, 84, 78, 146, 146, 124, 45, 13, 241, 29, 126, 13, 163, 218, 50, 73, }, { 224, 228, 248, 226, 226, 189, 251, 14, 225, 149, 150, 14, 120, 103, 69, 113, }, { 240, 53, 43, 115, 115, 67, 8, 15, 80, 237, 206, 15, 49, 12, 104, 216, }, { 195, 142, 174, 4, 4, 59, 235, 16, 65, 140, 201, 16, 26, 127, 149, 2, }, { 211, 95, 125, 149, 149, 197, 24, 17, 240, 244, 145, 17, 83, 20, 184, 171, }, { 227, 239, 203, 229, 229, 4, 206, 18, 224, 124, 121, 18, 136, 169, 207, 147, }, { 243, 62, 24, 116, 116, 250, 61, 19, 81, 4, 33, 19, 193, 194, 226, 58, }, { 131, 76, 100, 5, 5, 69, 161, 20, 192, 175, 106, 20, 253, 16, 33, 227, }, { 147, 157, 183, 148, 148, 187, 82, 21, 113, 215, 50, 21, 180, 123, 12, 74, }, { 163, 45, 1, 228, 228, 122, 132, 22, 97, 95, 218, 22, 111, 198, 123, 114, }, { 179, 252, 210, 117, 117, 132, 119, 23, 208, 39, 130, 23, 38, 173, 86, 219, }, { 67, 201, 249, 6, 6, 199, 127, 24, 128, 202, 76, 24, 23, 161, 62, 3, }, { 83, 24, 42, 151, 151, 57, 140, 25, 49, 178, 20, 25, 94, 202, 19, 170, }, { 99, 168, 156, 231, 231, 248, 90, 26, 33, 58, 252, 26, 133, 119, 100, 146, }, { 115, 121, 79, 118, 118, 6, 169, 27, 144, 66, 164, 27, 204, 28, 73, 59, }, { 3, 11, 51, 7, 7, 185, 53, 28, 1, 233, 239, 28, 240, 206, 138, 226, }, { 19, 218, 224, 150, 150, 71, 198, 29, 176, 145, 183, 29, 185, 165, 167, 75, }, { 35, 106, 86, 230, 230, 134, 16, 30, 160, 25, 95, 30, 98, 24, 208, 115, }, { 51, 187, 133, 119, 119, 120, 227, 31, 17, 97, 7, 31, 43, 115, 253, 218, }, { 69, 223, 159, 8, 8, 118, 21, 32, 130, 219, 81, 32, 52, 254, 233, 4, }, { 85, 14, 76, 153, 153, 136, 230, 33, 51, 163, 9, 33, 125, 149, 196, 173, }, { 101, 190, 250, 233, 233, 73, 48, 34, 35, 43, 225, 34, 166, 40, 179, 149, }, { 117, 111, 41, 120, 120, 183, 195, 35, 146, 83, 185, 35, 239, 67, 158, 60, }, { 5, 29, 85, 9, 9, 8, 95, 36, 3, 248, 242, 36, 211, 145, 93, 229, }, { 21, 204, 134, 152, 152, 246, 172, 37, 178, 128, 170, 37, 154, 250, 112, 76, }, { 37, 124, 48, 232, 232, 55, 122, 38, 162, 8, 66, 38, 65, 71, 7, 116, }, { 53, 173, 227, 121, 121, 201, 137, 39, 19, 112, 26, 39, 8, 44, 42, 221, }, { 197, 152, 200, 10, 10, 138, 129, 40, 67, 157, 212, 40, 57, 32, 66, 5, }, { 213, 73, 27, 155, 155, 116, 114, 41, 242, 229, 140, 41, 112, 75, 111, 172, }, { 229, 249, 173, 235, 235, 181, 164, 42, 226, 109, 100, 42, 171, 246, 24, 148, }, { 245, 40, 126, 122, 122, 75, 87, 43, 83, 21, 60, 43, 226, 157, 53, 61, }, { 133, 90, 2, 11, 11, 244, 203, 44, 194, 190, 119, 44, 222, 79, 246, 228, }, { 149, 139, 209, 154, 154, 10, 56, 45, 115, 198, 47, 45, 151, 36, 219, 77, }, { 165, 59, 103, 234, 234, 203, 238, 46, 99, 78, 199, 46, 76, 153, 172, 117, }, { 181, 234, 180, 123, 123, 53, 29, 47, 210, 54, 159, 47, 5, 242, 129, 220, }, { 134, 81, 49, 12, 12, 77, 254, 48, 195, 87, 152, 48, 46, 129, 124, 6, }, { 150, 128, 226, 157, 157, 179, 13, 49, 114, 47, 192, 49, 103, 234, 81, 175, }, { 166, 48, 84, 237, 237, 114, 219, 50, 98, 167, 40, 50, 188, 87, 38, 151, }, { 182, 225, 135, 124, 124, 140, 40, 51, 211, 223, 112, 51, 245, 60, 11, 62, }, { 198, 147, 251, 13, 13, 51, 180, 52, 66, 116, 59, 52, 201, 238, 200, 231, }, { 214, 66, 40, 156, 156, 205, 71, 53, 243, 12, 99, 53, 128, 133, 229, 78, }, { 230, 242, 158, 236, 236, 12, 145, 54, 227, 132, 139, 54, 91, 56, 146, 118, }, { 246, 35, 77, 125, 125, 242, 98, 55, 82, 252, 211, 55, 18, 83, 191, 223, }, { 6, 22, 102, 14, 14, 177, 106, 56, 2, 17, 29, 56, 35, 95, 215, 7, }, { 22, 199, 181, 159, 159, 79, 153, 57, 179, 105, 69, 57, 106, 52, 250, 174, }, { 38, 119, 3, 239, 239, 142, 79, 58, 163, 225, 173, 58, 177, 137, 141, 150, }, { 54, 166, 208, 126, 126, 112, 188, 59, 18, 153, 245, 59, 248, 226, 160, 63, }, { 70, 212, 172, 15, 15, 207, 32, 60, 131, 50, 190, 60, 196, 48, 99, 230, }, { 86, 5, 127, 158, 158, 49, 211, 61, 50, 74, 230, 61, 141, 91, 78, 79, }, { 102, 181, 201, 238, 238, 240, 5, 62, 34, 194, 14, 62, 86, 230, 57, 119, }, { 118, 100, 26, 127, 127, 14, 246, 63, 147, 186, 86, 63, 31, 141, 20, 222, }, { 138, 125, 253, 16, 16, 236, 42, 64, 199, 117, 162, 64, 104, 63, 17, 8, }, { 154, 172, 46, 129, 129, 18, 217, 65, 118, 13, 250, 65, 33, 84, 60, 161, }, { 170, 28, 152, 241, 241, 211, 15, 66, 102, 133, 18, 66, 250, 233, 75, 153, }, { 186, 205, 75, 96, 96, 45, 252, 67, 215, 253, 74, 67, 179, 130, 102, 48, }, { 202, 191, 55, 17, 17, 146, 96, 68, 70, 86, 1, 68, 143, 80, 165, 233, }, { 218, 110, 228, 128, 128, 108, 147, 69, 247, 46, 89, 69, 198, 59, 136, 64, }, { 234, 222, 82, 240, 240, 173, 69, 70, 231, 166, 177, 70, 29, 134, 255, 120, }, { 250, 15, 129, 97, 97, 83, 182, 71, 86, 222, 233, 71, 84, 237, 210, 209, }, { 10, 58, 170, 18, 18, 16, 190, 72, 6, 51, 39, 72, 101, 225, 186, 9, }, { 26, 235, 121, 131, 131, 238, 77, 73, 183, 75, 127, 73, 44, 138, 151, 160, }, { 42, 91, 207, 243, 243, 47, 155, 74, 167, 195, 151, 74, 247, 55, 224, 152, }, { 58, 138, 28, 98, 98, 209, 104, 75, 22, 187, 207, 75, 190, 92, 205, 49, }, { 74, 248, 96, 19, 19, 110, 244, 76, 135, 16, 132, 76, 130, 142, 14, 232, }, { 90, 41, 179, 130, 130, 144, 7, 77, 54, 104, 220, 77, 203, 229, 35, 65, }, { 106, 153, 5, 242, 242, 81, 209, 78, 38, 224, 52, 78, 16, 88, 84, 121, }, { 122, 72, 214, 99, 99, 175, 34, 79, 151, 152, 108, 79, 89, 51, 121, 208, }, { 73, 243, 83, 20, 20, 215, 193, 80, 134, 249, 107, 80, 114, 64, 132, 10, }, { 89, 34, 128, 133, 133, 41, 50, 81, 55, 129, 51, 81, 59, 43, 169, 163, }, { 105, 146, 54, 245, 245, 232, 228, 82, 39, 9, 219, 82, 224, 150, 222, 155, }, { 121, 67, 229, 100, 100, 22, 23, 83, 150, 113, 131, 83, 169, 253, 243, 50, }, { 9, 49, 153, 21, 21, 169, 139, 84, 7, 218, 200, 84, 149, 47, 48, 235, }, { 25, 224, 74, 132, 132, 87, 120, 85, 182, 162, 144, 85, 220, 68, 29, 66, }, { 41, 80, 252, 244, 244, 150, 174, 86, 166, 42, 120, 86, 7, 249, 106, 122, }, { 57, 129, 47, 101, 101, 104, 93, 87, 23, 82, 32, 87, 78, 146, 71, 211, }, { 201, 180, 4, 22, 22, 43, 85, 88, 71, 191, 238, 88, 127, 158, 47, 11, }, { 217, 101, 215, 135, 135, 213, 166, 89, 246, 199, 182, 89, 54, 245, 2, 162, }, { 233, 213, 97, 247, 247, 20, 112, 90, 230, 79, 94, 90, 237, 72, 117, 154, }, { 249, 4, 178, 102, 102, 234, 131, 91, 87, 55, 6, 91, 164, 35, 88, 51, }, { 137, 118, 206, 23, 23, 85, 31, 92, 198, 156, 77, 92, 152, 241, 155, 234, }, { 153, 167, 29, 134, 134, 171, 236, 93, 119, 228, 21, 93, 209, 154, 182, 67, }, { 169, 23, 171, 246, 246, 106, 58, 94, 103, 108, 253, 94, 10, 39, 193, 123, }, { 185, 198, 120, 103, 103, 148, 201, 95, 214, 20, 165, 95, 67, 76, 236, 210, }, { 207, 162, 98, 24, 24, 154, 63, 96, 69, 174, 243, 96, 92, 193, 248, 12, }, { 223, 115, 177, 137, 137, 100, 204, 97, 244, 214, 171, 97, 21, 170, 213, 165, }, { 239, 195, 7, 249, 249, 165, 26, 98, 228, 94, 67, 98, 206, 23, 162, 157, }, { 255, 18, 212, 104, 104, 91, 233, 99, 85, 38, 27, 99, 135, 124, 143, 52, }, { 143, 96, 168, 25, 25, 228, 117, 100, 196, 141, 80, 100, 187, 174, 76, 237, }, { 159, 177, 123, 136, 136, 26, 134, 101, 117, 245, 8, 101, 242, 197, 97, 68, }, { 175, 1, 205, 248, 248, 219, 80, 102, 101, 125, 224, 102, 41, 120, 22, 124, }, { 191, 208, 30, 105, 105, 37, 163, 103, 212, 5, 184, 103, 96, 19, 59, 213, }, { 79, 229, 53, 26, 26, 102, 171, 104, 132, 232, 118, 104, 81, 31, 83, 13, }, { 95, 52, 230, 139, 139, 152, 88, 105, 53, 144, 46, 105, 24, 116, 126, 164, }, { 111, 132, 80, 251, 251, 89, 142, 106, 37, 24, 198, 106, 195, 201, 9, 156, }, { 127, 85, 131, 106, 106, 167, 125, 107, 148, 96, 158, 107, 138, 162, 36, 53, }, { 15, 39, 255, 27, 27, 24, 225, 108, 5, 203, 213, 108, 182, 112, 231, 236, }, { 31, 246, 44, 138, 138, 230, 18, 109, 180, 179, 141, 109, 255, 27, 202, 69, }, { 47, 70, 154, 250, 250, 39, 196, 110, 164, 59, 101, 110, 36, 166, 189, 125, }, { 63, 151, 73, 107, 107, 217, 55, 111, 21, 67, 61, 111, 109, 205, 144, 212, }, { 12, 44, 204, 28, 28, 161, 212, 112, 4, 34, 58, 112, 70, 190, 109, 14, }, { 28, 253, 31, 141, 141, 95, 39, 113, 181, 90, 98, 113, 15, 213, 64, 167, }, { 44, 77, 169, 253, 253, 158, 241, 114, 165, 210, 138, 114, 212, 104, 55, 159, }, { 60, 156, 122, 108, 108, 96, 2, 115, 20, 170, 210, 115, 157, 3, 26, 54, }, { 76, 238, 6, 29, 29, 223, 158, 116, 133, 1, 153, 116, 161, 209, 217, 239, }, { 92, 63, 213, 140, 140, 33, 109, 117, 52, 121, 193, 117, 232, 186, 244, 70, }, { 108, 143, 99, 252, 252, 224, 187, 118, 36, 241, 41, 118, 51, 7, 131, 126, }, { 124, 94, 176, 109, 109, 30, 72, 119, 149, 137, 113, 119, 122, 108, 174, 215, }, { 140, 107, 155, 30, 30, 93, 64, 120, 197, 100, 191, 120, 75, 96, 198, 15, }, { 156, 186, 72, 143, 143, 163, 179, 121, 116, 28, 231, 121, 2, 11, 235, 166, }, { 172, 10, 254, 255, 255, 98, 101, 122, 100, 148, 15, 122, 217, 182, 156, 158, }, { 188, 219, 45, 110, 110, 156, 150, 123, 213, 236, 87, 123, 144, 221, 177, 55, }, { 204, 169, 81, 31, 31, 35, 10, 124, 68, 71, 28, 124, 172, 15, 114, 238, }, { 220, 120, 130, 142, 142, 221, 249, 125, 245, 63, 68, 125, 229, 100, 95, 71, }, { 236, 200, 52, 254, 254, 28, 47, 126, 229, 183, 172, 126, 62, 217, 40, 127, }, { 252, 25, 231, 111, 111, 226, 220, 127, 84, 207, 244, 127, 119, 178, 5, 214, }, { 215, 250, 57, 32, 32, 27, 84, 128, 77, 234, 135, 128, 208, 126, 34, 16, }, { 199, 43, 234, 177, 177, 229, 167, 129, 252, 146, 223, 129, 153, 21, 15, 185, }, { 247, 155, 92, 193, 193, 36, 113, 130, 236, 26, 55, 130, 66, 168, 120, 129, }, { 231, 74, 143, 80, 80, 218, 130, 131, 93, 98, 111, 131, 11, 195, 85, 40, }, { 151, 56, 243, 33, 33, 101, 30, 132, 204, 201, 36, 132, 55, 17, 150, 241, }, { 135, 233, 32, 176, 176, 155, 237, 133, 125, 177, 124, 133, 126, 122, 187, 88, }, { 183, 89, 150, 192, 192, 90, 59, 134, 109, 57, 148, 134, 165, 199, 204, 96, }, { 167, 136, 69, 81, 81, 164, 200, 135, 220, 65, 204, 135, 236, 172, 225, 201, }, { 87, 189, 110, 34, 34, 231, 192, 136, 140, 172, 2, 136, 221, 160, 137, 17, }, { 71, 108, 189, 179, 179, 25, 51, 137, 61, 212, 90, 137, 148, 203, 164, 184, }, { 119, 220, 11, 195, 195, 216, 229, 138, 45, 92, 178, 138, 79, 118, 211, 128, }, { 103, 13, 216, 82, 82, 38, 22, 139, 156, 36, 234, 139, 6, 29, 254, 41, }, { 23, 127, 164, 35, 35, 153, 138, 140, 13, 143, 161, 140, 58, 207, 61, 240, }, { 7, 174, 119, 178, 178, 103, 121, 141, 188, 247, 249, 141, 115, 164, 16, 89, }, { 55, 30, 193, 194, 194, 166, 175, 142, 172, 127, 17, 142, 168, 25, 103, 97, }, { 39, 207, 18, 83, 83, 88, 92, 143, 29, 7, 73, 143, 225, 114, 74, 200, }, { 20, 116, 151, 36, 36, 32, 191, 144, 12, 102, 78, 144, 202, 1, 183, 18, }, { 4, 165, 68, 181, 181, 222, 76, 145, 189, 30, 22, 145, 131, 106, 154, 187, }, { 52, 21, 242, 197, 197, 31, 154, 146, 173, 150, 254, 146, 88, 215, 237, 131, }, { 36, 196, 33, 84, 84, 225, 105, 147, 28, 238, 166, 147, 17, 188, 192, 42, }, { 84, 182, 93, 37, 37, 94, 245, 148, 141, 69, 237, 148, 45, 110, 3, 243, }, { 68, 103, 142, 180, 180, 160, 6, 149, 60, 61, 181, 149, 100, 5, 46, 90, }, { 116, 215, 56, 196, 196, 97, 208, 150, 44, 181, 93, 150, 191, 184, 89, 98, }, { 100, 6, 235, 85, 85, 159, 35, 151, 157, 205, 5, 151, 246, 211, 116, 203, }, { 148, 51, 192, 38, 38, 220, 43, 152, 205, 32, 203, 152, 199, 223, 28, 19, }, { 132, 226, 19, 183, 183, 34, 216, 153, 124, 88, 147, 153, 142, 180, 49, 186, }, { 180, 82, 165, 199, 199, 227, 14, 154, 108, 208, 123, 154, 85, 9, 70, 130, }, { 164, 131, 118, 86, 86, 29, 253, 155, 221, 168, 35, 155, 28, 98, 107, 43, }, { 212, 241, 10, 39, 39, 162, 97, 156, 76, 3, 104, 156, 32, 176, 168, 242, }, { 196, 32, 217, 182, 182, 92, 146, 157, 253, 123, 48, 157, 105, 219, 133, 91, }, { 244, 144, 111, 198, 198, 157, 68, 158, 237, 243, 216, 158, 178, 102, 242, 99, }, { 228, 65, 188, 87, 87, 99, 183, 159, 92, 139, 128, 159, 251, 13, 223, 202, }, { 146, 37, 166, 40, 40, 109, 65, 160, 207, 49, 214, 160, 228, 128, 203, 20, }, { 130, 244, 117, 185, 185, 147, 178, 161, 126, 73, 142, 161, 173, 235, 230, 189, }, { 178, 68, 195, 201, 201, 82, 100, 162, 110, 193, 102, 162, 118, 86, 145, 133, }, { 162, 149, 16, 88, 88, 172, 151, 163, 223, 185, 62, 163, 63, 61, 188, 44, }, { 210, 231, 108, 41, 41, 19, 11, 164, 78, 18, 117, 164, 3, 239, 127, 245, }, { 194, 54, 191, 184, 184, 237, 248, 165, 255, 106, 45, 165, 74, 132, 82, 92, }, { 242, 134, 9, 200, 200, 44, 46, 166, 239, 226, 197, 166, 145, 57, 37, 100, }, { 226, 87, 218, 89, 89, 210, 221, 167, 94, 154, 157, 167, 216, 82, 8, 205, }, { 18, 98, 241, 42, 42, 145, 213, 168, 14, 119, 83, 168, 233, 94, 96, 21, }, { 2, 179, 34, 187, 187, 111, 38, 169, 191, 15, 11, 169, 160, 53, 77, 188, }, { 50, 3, 148, 203, 203, 174, 240, 170, 175, 135, 227, 170, 123, 136, 58, 132, }, { 34, 210, 71, 90, 90, 80, 3, 171, 30, 255, 187, 171, 50, 227, 23, 45, }, { 82, 160, 59, 43, 43, 239, 159, 172, 143, 84, 240, 172, 14, 49, 212, 244, }, { 66, 113, 232, 186, 186, 17, 108, 173, 62, 44, 168, 173, 71, 90, 249, 93, }, { 114, 193, 94, 202, 202, 208, 186, 174, 46, 164, 64, 174, 156, 231, 142, 101, }, { 98, 16, 141, 91, 91, 46, 73, 175, 159, 220, 24, 175, 213, 140, 163, 204, }, { 81, 171, 8, 44, 44, 86, 170, 176, 142, 189, 31, 176, 254, 255, 94, 22, }, { 65, 122, 219, 189, 189, 168, 89, 177, 63, 197, 71, 177, 183, 148, 115, 191, }, { 113, 202, 109, 205, 205, 105, 143, 178, 47, 77, 175, 178, 108, 41, 4, 135, }, { 97, 27, 190, 92, 92, 151, 124, 179, 158, 53, 247, 179, 37, 66, 41, 46, }, { 17, 105, 194, 45, 45, 40, 224, 180, 15, 158, 188, 180, 25, 144, 234, 247, }, { 1, 184, 17, 188, 188, 214, 19, 181, 190, 230, 228, 181, 80, 251, 199, 94, }, { 49, 8, 167, 204, 204, 23, 197, 182, 174, 110, 12, 182, 139, 70, 176, 102, }, { 33, 217, 116, 93, 93, 233, 54, 183, 31, 22, 84, 183, 194, 45, 157, 207, }, { 209, 236, 95, 46, 46, 170, 62, 184, 79, 251, 154, 184, 243, 33, 245, 23, }, { 193, 61, 140, 191, 191, 84, 205, 185, 254, 131, 194, 185, 186, 74, 216, 190, }, { 241, 141, 58, 207, 207, 149, 27, 186, 238, 11, 42, 186, 97, 247, 175, 134, }, { 225, 92, 233, 94, 94, 107, 232, 187, 95, 115, 114, 187, 40, 156, 130, 47, }, { 145, 46, 149, 47, 47, 212, 116, 188, 206, 216, 57, 188, 20, 78, 65, 246, }, { 129, 255, 70, 190, 190, 42, 135, 189, 127, 160, 97, 189, 93, 37, 108, 95, }, { 177, 79, 240, 206, 206, 235, 81, 190, 111, 40, 137, 190, 134, 152, 27, 103, }, { 161, 158, 35, 95, 95, 21, 162, 191, 222, 80, 209, 191, 207, 243, 54, 206, }, { 93, 135, 196, 48, 48, 247, 126, 192, 138, 159, 37, 192, 184, 65, 51, 24, }, { 77, 86, 23, 161, 161, 9, 141, 193, 59, 231, 125, 193, 241, 42, 30, 177, }, { 125, 230, 161, 209, 209, 200, 91, 194, 43, 111, 149, 194, 42, 151, 105, 137, }, { 109, 55, 114, 64, 64, 54, 168, 195, 154, 23, 205, 195, 99, 252, 68, 32, }, { 29, 69, 14, 49, 49, 137, 52, 196, 11, 188, 134, 196, 95, 46, 135, 249, }, { 13, 148, 221, 160, 160, 119, 199, 197, 186, 196, 222, 197, 22, 69, 170, 80, }, { 61, 36, 107, 208, 208, 182, 17, 198, 170, 76, 54, 198, 205, 248, 221, 104, }, { 45, 245, 184, 65, 65, 72, 226, 199, 27, 52, 110, 199, 132, 147, 240, 193, }, { 221, 192, 147, 50, 50, 11, 234, 200, 75, 217, 160, 200, 181, 159, 152, 25, }, { 205, 17, 64, 163, 163, 245, 25, 201, 250, 161, 248, 201, 252, 244, 181, 176, }, { 253, 161, 246, 211, 211, 52, 207, 202, 234, 41, 16, 202, 39, 73, 194, 136, }, { 237, 112, 37, 66, 66, 202, 60, 203, 91, 81, 72, 203, 110, 34, 239, 33, }, { 157, 2, 89, 51, 51, 117, 160, 204, 202, 250, 3, 204, 82, 240, 44, 248, }, { 141, 211, 138, 162, 162, 139, 83, 205, 123, 130, 91, 205, 27, 155, 1, 81, }, { 189, 99, 60, 210, 210, 74, 133, 206, 107, 10, 179, 206, 192, 38, 118, 105, }, { 173, 178, 239, 67, 67, 180, 118, 207, 218, 114, 235, 207, 137, 77, 91, 192, }, { 158, 9, 106, 52, 52, 204, 149, 208, 203, 19, 236, 208, 162, 62, 166, 26, }, { 142, 216, 185, 165, 165, 50, 102, 209, 122, 107, 180, 209, 235, 85, 139, 179, }, { 190, 104, 15, 213, 213, 243, 176, 210, 106, 227, 92, 210, 48, 232, 252, 139, }, { 174, 185, 220, 68, 68, 13, 67, 211, 219, 155, 4, 211, 121, 131, 209, 34, }, { 222, 203, 160, 53, 53, 178, 223, 212, 74, 48, 79, 212, 69, 81, 18, 251, }, { 206, 26, 115, 164, 164, 76, 44, 213, 251, 72, 23, 213, 12, 58, 63, 82, }, { 254, 170, 197, 212, 212, 141, 250, 214, 235, 192, 255, 214, 215, 135, 72, 106, }, { 238, 123, 22, 69, 69, 115, 9, 215, 90, 184, 167, 215, 158, 236, 101, 195, }, { 30, 78, 61, 54, 54, 48, 1, 216, 10, 85, 105, 216, 175, 224, 13, 27, }, { 14, 159, 238, 167, 167, 206, 242, 217, 187, 45, 49, 217, 230, 139, 32, 178, }, { 62, 47, 88, 215, 215, 15, 36, 218, 171, 165, 217, 218, 61, 54, 87, 138, }, { 46, 254, 139, 70, 70, 241, 215, 219, 26, 221, 129, 219, 116, 93, 122, 35, }, { 94, 140, 247, 55, 55, 78, 75, 220, 139, 118, 202, 220, 72, 143, 185, 250, }, { 78, 93, 36, 166, 166, 176, 184, 221, 58, 14, 146, 221, 1, 228, 148, 83, }, { 126, 237, 146, 214, 214, 113, 110, 222, 42, 134, 122, 222, 218, 89, 227, 107, }, { 110, 60, 65, 71, 71, 143, 157, 223, 155, 254, 34, 223, 147, 50, 206, 194, }, { 24, 88, 91, 56, 56, 129, 107, 224, 8, 68, 116, 224, 140, 191, 218, 28, }, { 8, 137, 136, 169, 169, 127, 152, 225, 185, 60, 44, 225, 197, 212, 247, 181, }, { 56, 57, 62, 217, 217, 190, 78, 226, 169, 180, 196, 226, 30, 105, 128, 141, }, { 40, 232, 237, 72, 72, 64, 189, 227, 24, 204, 156, 227, 87, 2, 173, 36, }, { 88, 154, 145, 57, 57, 255, 33, 228, 137, 103, 215, 228, 107, 208, 110, 253, }, { 72, 75, 66, 168, 168, 1, 210, 229, 56, 31, 143, 229, 34, 187, 67, 84, }, { 120, 251, 244, 216, 216, 192, 4, 230, 40, 151, 103, 230, 249, 6, 52, 108, }, { 104, 42, 39, 73, 73, 62, 247, 231, 153, 239, 63, 231, 176, 109, 25, 197, }, { 152, 31, 12, 58, 58, 125, 255, 232, 201, 2, 241, 232, 129, 97, 113, 29, }, { 136, 206, 223, 171, 171, 131, 12, 233, 120, 122, 169, 233, 200, 10, 92, 180, }, { 184, 126, 105, 219, 219, 66, 218, 234, 104, 242, 65, 234, 19, 183, 43, 140, }, { 168, 175, 186, 74, 74, 188, 41, 235, 217, 138, 25, 235, 90, 220, 6, 37, }, { 216, 221, 198, 59, 59, 3, 181, 236, 72, 33, 82, 236, 102, 14, 197, 252, }, { 200, 12, 21, 170, 170, 253, 70, 237, 249, 89, 10, 237, 47, 101, 232, 85, }, { 248, 188, 163, 218, 218, 60, 144, 238, 233, 209, 226, 238, 244, 216, 159, 109, }, { 232, 109, 112, 75, 75, 194, 99, 239, 88, 169, 186, 239, 189, 179, 178, 196, }, { 219, 214, 245, 60, 60, 186, 128, 240, 73, 200, 189, 240, 150, 192, 79, 30, }, { 203, 7, 38, 173, 173, 68, 115, 241, 248, 176, 229, 241, 223, 171, 98, 183, }, { 251, 183, 144, 221, 221, 133, 165, 242, 232, 56, 13, 242, 4, 22, 21, 143, }, { 235, 102, 67, 76, 76, 123, 86, 243, 89, 64, 85, 243, 77, 125, 56, 38, }, { 155, 20, 63, 61, 61, 196, 202, 244, 200, 235, 30, 244, 113, 175, 251, 255, }, { 139, 197, 236, 172, 172, 58, 57, 245, 121, 147, 70, 245, 56, 196, 214, 86, }, { 187, 117, 90, 220, 220, 251, 239, 246, 105, 27, 174, 246, 227, 121, 161, 110, }, { 171, 164, 137, 77, 77, 5, 28, 247, 216, 99, 246, 247, 170, 18, 140, 199, }, { 91, 145, 162, 62, 62, 70, 20, 248, 136, 142, 56, 248, 155, 30, 228, 31, }, { 75, 64, 113, 175, 175, 184, 231, 249, 57, 246, 96, 249, 210, 117, 201, 182, }, { 123, 240, 199, 223, 223, 121, 49, 250, 41, 126, 136, 250, 9, 200, 190, 142, }, { 107, 33, 20, 78, 78, 135, 194, 251, 152, 6, 208, 251, 64, 163, 147, 39, }, { 27, 83, 104, 63, 63, 56, 94, 252, 9, 173, 155, 252, 124, 113, 80, 254, }, { 11, 130, 187, 174, 174, 198, 173, 253, 184, 213, 195, 253, 53, 26, 125, 87, }, { 59, 50, 13, 222, 222, 7, 123, 254, 168, 93, 43, 254, 238, 167, 10, 111, }, { 43, 227, 222, 79, 79, 249, 136, 255, 25, 37, 115, 255, 167, 204, 39, 198, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 194, 141, 49, 100, 236, 235, 15, 42, 55, 153, 144, 196, 246, 48, 184, 246, }, { 71, 217, 98, 200, 27, 21, 30, 84, 110, 241, 227, 75, 47, 96, 179, 47, }, { 133, 84, 83, 172, 247, 254, 17, 126, 89, 104, 115, 143, 217, 80, 11, 217, }, { 142, 113, 196, 83, 54, 42, 60, 168, 220, 33, 5, 150, 94, 192, 165, 94, }, { 76, 252, 245, 55, 218, 193, 51, 130, 235, 184, 149, 82, 168, 240, 29, 168, }, { 201, 168, 166, 155, 45, 63, 34, 252, 178, 208, 230, 221, 113, 160, 22, 113, }, { 11, 37, 151, 255, 193, 212, 45, 214, 133, 73, 118, 25, 135, 144, 174, 135, }, { 223, 226, 75, 166, 108, 84, 120, 147, 123, 66, 10, 239, 188, 67, 137, 188, }, { 29, 111, 122, 194, 128, 191, 119, 185, 76, 219, 154, 43, 74, 115, 49, 74, }, { 152, 59, 41, 110, 119, 65, 102, 199, 21, 179, 233, 164, 147, 35, 58, 147, }, { 90, 182, 24, 10, 155, 170, 105, 237, 34, 42, 121, 96, 101, 19, 130, 101, }, { 81, 147, 143, 245, 90, 126, 68, 59, 167, 99, 15, 121, 226, 131, 44, 226, }, { 147, 30, 190, 145, 182, 149, 75, 17, 144, 250, 159, 189, 20, 179, 148, 20, }, { 22, 74, 237, 61, 65, 107, 90, 111, 201, 146, 236, 50, 205, 227, 159, 205, }, { 212, 199, 220, 89, 173, 128, 85, 69, 254, 11, 124, 246, 59, 211, 39, 59, }, { 125, 7, 150, 143, 216, 168, 240, 229, 246, 132, 20, 29, 187, 134, 209, 187, }, { 191, 138, 167, 235, 52, 67, 255, 207, 193, 29, 132, 217, 77, 182, 105, 77, }, { 58, 222, 244, 71, 195, 189, 238, 177, 152, 117, 247, 86, 148, 230, 98, 148, }, { 248, 83, 197, 35, 47, 86, 225, 155, 175, 236, 103, 146, 98, 214, 218, 98, }, { 243, 118, 82, 220, 238, 130, 204, 77, 42, 165, 17, 139, 229, 70, 116, 229, }, { 49, 251, 99, 184, 2, 105, 195, 103, 29, 60, 129, 79, 19, 118, 204, 19, }, { 180, 175, 48, 20, 245, 151, 210, 25, 68, 84, 242, 192, 202, 38, 199, 202, }, { 118, 34, 1, 112, 25, 124, 221, 51, 115, 205, 98, 4, 60, 22, 127, 60, }, { 162, 229, 221, 41, 180, 252, 136, 118, 141, 198, 30, 242, 7, 197, 88, 7, }, { 96, 104, 236, 77, 88, 23, 135, 92, 186, 95, 142, 54, 241, 245, 224, 241, }, { 229, 60, 191, 225, 175, 233, 150, 34, 227, 55, 253, 185, 40, 165, 235, 40, }, { 39, 177, 142, 133, 67, 2, 153, 8, 212, 174, 109, 125, 222, 149, 83, 222, }, { 44, 148, 25, 122, 130, 214, 180, 222, 81, 231, 27, 100, 89, 5, 253, 89, }, { 238, 25, 40, 30, 110, 61, 187, 244, 102, 126, 139, 160, 175, 53, 69, 175, }, { 107, 77, 123, 178, 153, 195, 170, 138, 63, 22, 248, 47, 118, 101, 78, 118, }, { 169, 192, 74, 214, 117, 40, 165, 160, 8, 143, 104, 235, 128, 85, 246, 128, }, { 250, 14, 239, 221, 115, 147, 35, 9, 47, 203, 40, 58, 181, 207, 97, 181, }, { 56, 131, 222, 185, 159, 120, 44, 35, 24, 82, 184, 254, 67, 255, 217, 67, }, { 189, 215, 141, 21, 104, 134, 61, 93, 65, 58, 203, 113, 154, 175, 210, 154, }, { 127, 90, 188, 113, 132, 109, 50, 119, 118, 163, 91, 181, 108, 159, 106, 108, }, { 116, 127, 43, 142, 69, 185, 31, 161, 243, 234, 45, 172, 235, 15, 196, 235, }, { 182, 242, 26, 234, 169, 82, 16, 139, 196, 115, 189, 104, 29, 63, 124, 29, }, { 51, 166, 73, 70, 94, 172, 1, 245, 157, 27, 206, 231, 196, 111, 119, 196, }, { 241, 43, 120, 34, 178, 71, 14, 223, 170, 130, 94, 35, 50, 95, 207, 50, }, { 37, 236, 164, 123, 31, 199, 91, 154, 84, 137, 34, 213, 9, 140, 232, 9, }, { 231, 97, 149, 31, 243, 44, 84, 176, 99, 16, 178, 17, 255, 188, 80, 255, }, { 98, 53, 198, 179, 4, 210, 69, 206, 58, 120, 193, 158, 38, 236, 91, 38, }, { 160, 184, 247, 215, 232, 57, 74, 228, 13, 225, 81, 90, 208, 220, 227, 208, }, { 171, 157, 96, 40, 41, 237, 103, 50, 136, 168, 39, 67, 87, 76, 77, 87, }, { 105, 16, 81, 76, 197, 6, 104, 24, 191, 49, 183, 135, 161, 124, 245, 161, }, { 236, 68, 2, 224, 50, 248, 121, 102, 230, 89, 196, 8, 120, 44, 254, 120, }, { 46, 201, 51, 132, 222, 19, 118, 76, 209, 192, 84, 204, 142, 28, 70, 142, }, { 135, 9, 121, 82, 171, 59, 211, 236, 217, 79, 60, 39, 14, 73, 176, 14, }, { 69, 132, 72, 54, 71, 208, 220, 198, 238, 214, 172, 227, 248, 121, 8, 248, }, { 192, 208, 27, 154, 176, 46, 205, 184, 183, 190, 223, 108, 33, 41, 3, 33, }, { 2, 93, 42, 254, 92, 197, 194, 146, 128, 39, 79, 168, 215, 25, 187, 215, }, { 9, 120, 189, 1, 157, 17, 239, 68, 5, 110, 57, 177, 80, 137, 21, 80, }, { 203, 245, 140, 101, 113, 250, 224, 110, 50, 247, 169, 117, 166, 185, 173, 166, }, { 78, 161, 223, 201, 134, 4, 241, 16, 107, 159, 218, 250, 127, 233, 166, 127, }, { 140, 44, 238, 173, 106, 239, 254, 58, 92, 6, 74, 62, 137, 217, 30, 137, }, { 88, 235, 50, 244, 199, 111, 171, 127, 162, 13, 54, 200, 178, 10, 57, 178, }, { 154, 102, 3, 144, 43, 132, 164, 85, 149, 148, 166, 12, 68, 58, 129, 68, }, { 31, 50, 80, 60, 220, 122, 181, 43, 204, 252, 213, 131, 157, 106, 138, 157, }, { 221, 191, 97, 88, 48, 145, 186, 1, 251, 101, 69, 71, 107, 90, 50, 107, }, { 214, 154, 246, 167, 241, 69, 151, 215, 126, 44, 51, 94, 236, 202, 156, 236, }, { 20, 23, 199, 195, 29, 174, 152, 253, 73, 181, 163, 154, 26, 250, 36, 26, }, { 145, 67, 148, 111, 234, 80, 137, 131, 16, 221, 208, 21, 195, 170, 47, 195, }, { 83, 206, 165, 11, 6, 187, 134, 169, 39, 68, 64, 209, 53, 154, 151, 53, }, { 55, 28, 29, 121, 230, 229, 70, 18, 94, 85, 80, 116, 169, 93, 194, 169, }, { 245, 145, 44, 29, 10, 14, 73, 56, 105, 204, 192, 176, 95, 109, 122, 95, }, { 112, 197, 127, 177, 253, 240, 88, 70, 48, 164, 179, 63, 134, 61, 113, 134, }, { 178, 72, 78, 213, 17, 27, 87, 108, 7, 61, 35, 251, 112, 13, 201, 112, }, { 185, 109, 217, 42, 208, 207, 122, 186, 130, 116, 85, 226, 247, 157, 103, 247, }, { 123, 224, 232, 78, 60, 36, 117, 144, 181, 237, 197, 38, 1, 173, 223, 1, }, { 254, 180, 187, 226, 203, 218, 100, 238, 236, 133, 182, 169, 216, 253, 212, 216, }, { 60, 57, 138, 134, 39, 49, 107, 196, 219, 28, 38, 109, 46, 205, 108, 46, }, { 232, 254, 86, 223, 138, 177, 62, 129, 37, 23, 90, 155, 21, 30, 75, 21, }, { 42, 115, 103, 187, 102, 90, 49, 171, 18, 142, 202, 95, 227, 46, 243, 227, }, { 175, 39, 52, 23, 145, 164, 32, 213, 75, 230, 185, 208, 58, 126, 248, 58, }, { 109, 170, 5, 115, 125, 79, 47, 255, 124, 127, 41, 20, 204, 78, 64, 204, }, { 102, 143, 146, 140, 188, 155, 2, 41, 249, 54, 95, 13, 75, 222, 238, 75, }, { 164, 2, 163, 232, 80, 112, 13, 3, 206, 175, 207, 201, 189, 238, 86, 189, }, { 33, 86, 240, 68, 167, 142, 28, 125, 151, 199, 188, 70, 100, 190, 93, 100, }, { 227, 219, 193, 32, 75, 101, 19, 87, 160, 94, 44, 130, 146, 142, 229, 146, }, { 74, 27, 139, 246, 62, 77, 182, 247, 168, 209, 68, 105, 18, 219, 19, 18, }, { 136, 150, 186, 146, 210, 166, 185, 221, 159, 72, 212, 173, 228, 235, 171, 228, }, { 13, 194, 233, 62, 37, 88, 168, 163, 198, 32, 167, 34, 61, 187, 160, 61, }, { 207, 79, 216, 90, 201, 179, 167, 137, 241, 185, 55, 230, 203, 139, 24, 203, }, { 196, 106, 79, 165, 8, 103, 138, 95, 116, 240, 65, 255, 76, 27, 182, 76, }, { 6, 231, 126, 193, 228, 140, 133, 117, 67, 105, 209, 59, 186, 43, 14, 186, }, { 131, 179, 45, 109, 19, 114, 148, 11, 26, 1, 162, 180, 99, 123, 5, 99, }, { 65, 62, 28, 9, 255, 153, 155, 33, 45, 152, 50, 112, 149, 75, 189, 149, }, { 149, 249, 192, 80, 82, 25, 206, 100, 211, 147, 78, 134, 174, 152, 154, 174, }, { 87, 116, 241, 52, 190, 242, 193, 78, 228, 10, 222, 66, 88, 168, 34, 88, }, { 210, 32, 162, 152, 73, 12, 208, 48, 189, 98, 173, 205, 129, 248, 41, 129, }, { 16, 173, 147, 252, 165, 231, 223, 26, 138, 251, 61, 9, 119, 200, 145, 119, }, { 27, 136, 4, 3, 100, 51, 242, 204, 15, 178, 75, 16, 240, 88, 63, 240, }, { 217, 5, 53, 103, 136, 216, 253, 230, 56, 43, 219, 212, 6, 104, 135, 6, }, { 92, 81, 102, 203, 127, 38, 236, 152, 97, 67, 168, 91, 223, 56, 140, 223, }, { 158, 220, 87, 175, 147, 205, 227, 178, 86, 218, 56, 159, 41, 8, 52, 41, }, { 205, 18, 242, 164, 149, 118, 101, 27, 113, 158, 120, 78, 28, 146, 163, 28, }, { 15, 159, 195, 192, 121, 157, 106, 49, 70, 7, 232, 138, 234, 162, 27, 234, }, { 138, 203, 144, 108, 142, 99, 123, 79, 31, 111, 155, 5, 51, 242, 16, 51, }, { 72, 70, 161, 8, 98, 136, 116, 101, 40, 246, 11, 193, 197, 194, 168, 197, }, { 67, 99, 54, 247, 163, 92, 89, 179, 173, 191, 125, 216, 66, 82, 6, 66, }, { 129, 238, 7, 147, 79, 183, 86, 153, 154, 38, 237, 28, 180, 98, 190, 180, }, { 4, 186, 84, 63, 184, 73, 71, 231, 195, 78, 158, 147, 109, 50, 181, 109, }, { 198, 55, 101, 91, 84, 162, 72, 205, 244, 215, 14, 87, 155, 2, 13, 155, }, { 18, 240, 185, 2, 249, 34, 29, 136, 10, 220, 114, 161, 160, 209, 42, 160, }, { 208, 125, 136, 102, 21, 201, 18, 162, 61, 69, 226, 101, 86, 225, 146, 86, }, { 85, 41, 219, 202, 226, 55, 3, 220, 100, 45, 145, 234, 143, 177, 153, 143, }, { 151, 164, 234, 174, 14, 220, 12, 246, 83, 180, 1, 46, 121, 129, 33, 121, }, { 156, 129, 125, 81, 207, 8, 33, 32, 214, 253, 119, 55, 254, 17, 143, 254, }, { 94, 12, 76, 53, 35, 227, 46, 10, 225, 100, 231, 243, 8, 33, 55, 8, }, { 219, 88, 31, 153, 212, 29, 63, 116, 184, 12, 148, 124, 209, 113, 60, 209, }, { 25, 213, 46, 253, 56, 246, 48, 94, 143, 149, 4, 184, 39, 65, 132, 39, }, { 176, 21, 100, 43, 77, 222, 149, 254, 135, 26, 108, 83, 167, 20, 114, 167, }, { 114, 152, 85, 79, 161, 53, 154, 212, 176, 131, 252, 151, 81, 36, 202, 81, }, { 247, 204, 6, 227, 86, 203, 139, 170, 233, 235, 143, 24, 136, 116, 193, 136, }, { 53, 65, 55, 135, 186, 32, 132, 128, 222, 114, 31, 220, 126, 68, 121, 126, }, { 62, 100, 160, 120, 123, 244, 169, 86, 91, 59, 105, 197, 249, 212, 215, 249, }, { 252, 233, 145, 28, 151, 31, 166, 124, 108, 162, 249, 1, 15, 228, 111, 15, }, { 121, 189, 194, 176, 96, 225, 183, 2, 53, 202, 138, 142, 214, 180, 100, 214, }, { 187, 48, 243, 212, 140, 10, 184, 40, 2, 83, 26, 74, 32, 132, 220, 32, }, { 111, 247, 47, 141, 33, 138, 237, 109, 252, 88, 102, 188, 27, 87, 251, 27, }, { 173, 122, 30, 233, 205, 97, 226, 71, 203, 193, 246, 120, 237, 103, 67, 237, }, { 40, 46, 77, 69, 58, 159, 243, 57, 146, 169, 133, 247, 52, 55, 72, 52, }, { 234, 163, 124, 33, 214, 116, 252, 19, 165, 48, 21, 51, 194, 7, 240, 194, }, { 225, 134, 235, 222, 23, 160, 209, 197, 32, 121, 99, 42, 69, 151, 94, 69, }, { 35, 11, 218, 186, 251, 75, 222, 239, 23, 224, 243, 238, 179, 167, 230, 179, }, { 166, 95, 137, 22, 12, 181, 207, 145, 78, 136, 128, 97, 106, 247, 237, 106, }, { 100, 210, 184, 114, 224, 94, 192, 187, 121, 17, 16, 165, 156, 199, 85, 156, }, { 110, 56, 58, 242, 15, 9, 140, 36, 188, 170, 160, 232, 145, 186, 71, 145, }, { 172, 181, 11, 150, 227, 226, 131, 14, 139, 51, 48, 44, 103, 138, 255, 103, }, { 41, 225, 88, 58, 20, 28, 146, 112, 210, 91, 67, 163, 190, 218, 244, 190, }, { 235, 108, 105, 94, 248, 247, 157, 90, 229, 194, 211, 103, 72, 234, 76, 72, }, { 224, 73, 254, 161, 57, 35, 176, 140, 96, 139, 165, 126, 207, 122, 226, 207, }, { 34, 196, 207, 197, 213, 200, 191, 166, 87, 18, 53, 186, 57, 74, 90, 57, }, { 167, 144, 156, 105, 34, 54, 174, 216, 14, 122, 70, 53, 224, 26, 81, 224, }, { 101, 29, 173, 13, 206, 221, 161, 242, 57, 227, 214, 241, 22, 42, 233, 22, }, { 177, 218, 113, 84, 99, 93, 244, 183, 199, 232, 170, 7, 45, 249, 206, 45, }, { 115, 87, 64, 48, 143, 182, 251, 157, 240, 113, 58, 195, 219, 201, 118, 219, }, { 246, 3, 19, 156, 120, 72, 234, 227, 169, 25, 73, 76, 2, 153, 125, 2, }, { 52, 142, 34, 248, 148, 163, 229, 201, 158, 128, 217, 136, 244, 169, 197, 244, }, { 63, 171, 181, 7, 85, 119, 200, 31, 27, 201, 175, 145, 115, 57, 107, 115, }, { 253, 38, 132, 99, 185, 156, 199, 53, 44, 80, 63, 85, 133, 9, 211, 133, }, { 120, 114, 215, 207, 78, 98, 214, 75, 117, 56, 76, 218, 92, 89, 216, 92, }, { 186, 255, 230, 171, 162, 137, 217, 97, 66, 161, 220, 30, 170, 105, 96, 170, }, { 19, 63, 172, 125, 215, 161, 124, 193, 74, 46, 180, 245, 42, 60, 150, 42, }, { 209, 178, 157, 25, 59, 74, 115, 235, 125, 183, 36, 49, 220, 12, 46, 220, }, { 84, 230, 206, 181, 204, 180, 98, 149, 36, 223, 87, 190, 5, 92, 37, 5, }, { 150, 107, 255, 209, 32, 95, 109, 191, 19, 70, 199, 122, 243, 108, 157, 243, }, { 157, 78, 104, 46, 225, 139, 64, 105, 150, 15, 177, 99, 116, 252, 51, 116, }, { 95, 195, 89, 74, 13, 96, 79, 67, 161, 150, 33, 167, 130, 204, 139, 130, }, { 218, 151, 10, 230, 250, 158, 94, 61, 248, 254, 82, 40, 91, 156, 128, 91, }, { 24, 26, 59, 130, 22, 117, 81, 23, 207, 103, 194, 236, 173, 172, 56, 173, }, { 204, 221, 231, 219, 187, 245, 4, 82, 49, 108, 190, 26, 150, 127, 31, 150, }, { 14, 80, 214, 191, 87, 30, 11, 120, 6, 245, 46, 222, 96, 79, 167, 96, }, { 139, 4, 133, 19, 160, 224, 26, 6, 95, 157, 93, 81, 185, 31, 172, 185, }, { 73, 137, 180, 119, 76, 11, 21, 44, 104, 4, 205, 149, 79, 47, 20, 79, }, { 66, 172, 35, 136, 141, 223, 56, 250, 237, 77, 187, 140, 200, 191, 186, 200, }, { 128, 33, 18, 236, 97, 52, 55, 208, 218, 212, 43, 72, 62, 143, 2, 62, }, { 5, 117, 65, 64, 150, 202, 38, 174, 131, 188, 88, 199, 231, 223, 9, 231, }, { 199, 248, 112, 36, 122, 33, 41, 132, 180, 37, 200, 3, 17, 239, 177, 17, }, { 148, 54, 213, 47, 124, 154, 175, 45, 147, 97, 136, 210, 36, 117, 38, 36, }, { 86, 187, 228, 75, 144, 113, 160, 7, 164, 248, 24, 22, 210, 69, 158, 210, }, { 211, 239, 183, 231, 103, 143, 177, 121, 253, 144, 107, 153, 11, 21, 149, 11, }, { 17, 98, 134, 131, 139, 100, 190, 83, 202, 9, 251, 93, 253, 37, 45, 253, }, { 26, 71, 17, 124, 74, 176, 147, 133, 79, 64, 141, 68, 122, 181, 131, 122, }, { 216, 202, 32, 24, 166, 91, 156, 175, 120, 217, 29, 128, 140, 133, 59, 140, }, { 93, 158, 115, 180, 81, 165, 141, 209, 33, 177, 110, 15, 85, 213, 48, 85, }, { 159, 19, 66, 208, 189, 78, 130, 251, 22, 40, 254, 203, 163, 229, 136, 163, }, { 75, 212, 158, 137, 16, 206, 215, 190, 232, 35, 130, 61, 152, 54, 175, 152, }, { 137, 89, 175, 237, 252, 37, 216, 148, 223, 186, 18, 249, 110, 6, 23, 110, }, { 12, 13, 252, 65, 11, 219, 201, 234, 134, 210, 97, 118, 183, 86, 28, 183, }, { 206, 128, 205, 37, 231, 48, 198, 192, 177, 75, 241, 178, 65, 102, 164, 65, }, { 197, 165, 90, 218, 38, 228, 235, 22, 52, 2, 135, 171, 198, 246, 10, 198, }, { 7, 40, 107, 190, 202, 15, 228, 60, 3, 155, 23, 111, 48, 198, 178, 48, }, { 130, 124, 56, 18, 61, 241, 245, 66, 90, 243, 100, 224, 233, 150, 185, 233, }, { 64, 241, 9, 118, 209, 26, 250, 104, 109, 106, 244, 36, 31, 166, 1, 31, }, { 233, 49, 67, 160, 164, 50, 95, 200, 101, 229, 156, 207, 159, 243, 247, 159, }, { 43, 188, 114, 196, 72, 217, 80, 226, 82, 124, 12, 11, 105, 195, 79, 105, }, { 174, 232, 33, 104, 191, 39, 65, 156, 11, 20, 127, 132, 176, 147, 68, 176, }, { 108, 101, 16, 12, 83, 204, 78, 182, 60, 141, 239, 64, 70, 163, 252, 70, }, { 103, 64, 135, 243, 146, 24, 99, 96, 185, 196, 153, 89, 193, 51, 82, 193, }, { 165, 205, 182, 151, 126, 243, 108, 74, 142, 93, 9, 157, 55, 3, 234, 55, }, { 32, 153, 229, 59, 137, 13, 125, 52, 215, 53, 122, 18, 238, 83, 225, 238, }, { 226, 20, 212, 95, 101, 230, 114, 30, 224, 172, 234, 214, 24, 99, 89, 24, }, { 54, 211, 8, 6, 200, 102, 39, 91, 30, 167, 150, 32, 35, 176, 126, 35, }, { 244, 94, 57, 98, 36, 141, 40, 113, 41, 62, 6, 228, 213, 128, 198, 213, }, { 113, 10, 106, 206, 211, 115, 57, 15, 112, 86, 117, 107, 12, 208, 205, 12, }, { 179, 135, 91, 170, 63, 152, 54, 37, 71, 207, 229, 175, 250, 224, 117, 250, }, { 184, 162, 204, 85, 254, 76, 27, 243, 194, 134, 147, 182, 125, 112, 219, 125, }, { 122, 47, 253, 49, 18, 167, 20, 217, 245, 31, 3, 114, 139, 64, 99, 139, }, { 255, 123, 174, 157, 229, 89, 5, 167, 172, 119, 112, 253, 82, 16, 104, 82, }, { 61, 246, 159, 249, 9, 178, 10, 141, 155, 238, 224, 57, 164, 32, 208, 164, }, { 89, 36, 39, 139, 233, 236, 202, 54, 226, 255, 240, 156, 56, 231, 133, 56, }, { 155, 169, 22, 239, 5, 7, 197, 28, 213, 102, 96, 88, 206, 215, 61, 206, }, { 30, 253, 69, 67, 242, 249, 212, 98, 140, 14, 19, 215, 23, 135, 54, 23, }, { 220, 112, 116, 39, 30, 18, 219, 72, 187, 151, 131, 19, 225, 183, 142, 225, }, { 215, 85, 227, 216, 223, 198, 246, 158, 62, 222, 245, 10, 102, 39, 32, 102, }, { 21, 216, 210, 188, 51, 45, 249, 180, 9, 71, 101, 206, 144, 23, 152, 144, }, { 144, 140, 129, 16, 196, 211, 232, 202, 80, 47, 22, 65, 73, 71, 147, 73, }, { 82, 1, 176, 116, 40, 56, 231, 224, 103, 182, 134, 133, 191, 119, 43, 191, }, { 134, 198, 108, 45, 133, 184, 178, 165, 153, 189, 250, 115, 132, 164, 12, 132, }, { 68, 75, 93, 73, 105, 83, 189, 143, 174, 36, 106, 183, 114, 148, 180, 114, }, { 193, 31, 14, 229, 158, 173, 172, 241, 247, 76, 25, 56, 171, 196, 191, 171, }, { 3, 146, 63, 129, 114, 70, 163, 219, 192, 213, 137, 252, 93, 244, 7, 93, }, { 8, 183, 168, 126, 179, 146, 142, 13, 69, 156, 255, 229, 218, 100, 169, 218, }, { 202, 58, 153, 26, 95, 121, 129, 39, 114, 5, 111, 33, 44, 84, 17, 44, }, { 79, 110, 202, 182, 168, 135, 144, 89, 43, 109, 28, 174, 245, 4, 26, 245, }, { 141, 227, 251, 210, 68, 108, 159, 115, 28, 244, 140, 106, 3, 52, 162, 3, }, { 36, 35, 177, 4, 49, 68, 58, 211, 20, 123, 228, 129, 131, 97, 84, 131, }, { 230, 174, 128, 96, 221, 175, 53, 249, 35, 226, 116, 69, 117, 81, 236, 117, }, { 99, 250, 211, 204, 42, 81, 36, 135, 122, 138, 7, 202, 172, 1, 231, 172, }, { 161, 119, 226, 168, 198, 186, 43, 173, 77, 19, 151, 14, 90, 49, 95, 90, }, { 170, 82, 117, 87, 7, 110, 6, 123, 200, 90, 225, 23, 221, 161, 241, 221, }, { 104, 223, 68, 51, 235, 133, 9, 81, 255, 195, 113, 211, 43, 145, 73, 43, }, { 237, 139, 23, 159, 28, 123, 24, 47, 166, 171, 2, 92, 242, 193, 66, 242, }, { 47, 6, 38, 251, 240, 144, 23, 5, 145, 50, 146, 152, 4, 241, 250, 4, }, { 251, 193, 250, 162, 93, 16, 66, 64, 111, 57, 238, 110, 63, 34, 221, 63, }, { 57, 76, 203, 198, 177, 251, 77, 106, 88, 160, 126, 170, 201, 18, 101, 201, }, { 188, 24, 152, 106, 70, 5, 92, 20, 1, 200, 13, 37, 16, 66, 110, 16, }, { 126, 149, 169, 14, 170, 238, 83, 62, 54, 81, 157, 225, 230, 114, 214, 230, }, { 117, 176, 62, 241, 107, 58, 126, 232, 179, 24, 235, 248, 97, 226, 120, 97, }, { 183, 61, 15, 149, 135, 209, 113, 194, 132, 129, 123, 60, 151, 210, 192, 151, }, { 50, 105, 92, 57, 112, 47, 96, 188, 221, 233, 8, 179, 78, 130, 203, 78, }, { 240, 228, 109, 93, 156, 196, 111, 150, 234, 112, 152, 119, 184, 178, 115, 184, }, { 163, 42, 200, 86, 154, 127, 233, 63, 205, 52, 216, 166, 141, 40, 228, 141, }, { 97, 167, 249, 50, 118, 148, 230, 21, 250, 173, 72, 98, 123, 24, 92, 123, }, { 228, 243, 170, 158, 129, 106, 247, 107, 163, 197, 59, 237, 162, 72, 87, 162, }, { 38, 126, 155, 250, 109, 129, 248, 65, 148, 92, 171, 41, 84, 120, 239, 84, }, { 45, 91, 12, 5, 172, 85, 213, 151, 17, 21, 221, 48, 211, 232, 65, 211, }, { 239, 214, 61, 97, 64, 190, 218, 189, 38, 140, 77, 244, 37, 216, 249, 37, }, { 106, 130, 110, 205, 183, 64, 203, 195, 127, 228, 62, 123, 252, 136, 242, 252, }, { 168, 15, 95, 169, 91, 171, 196, 233, 72, 125, 174, 191, 10, 184, 74, 10, }, { 124, 200, 131, 240, 246, 43, 145, 172, 182, 118, 210, 73, 49, 107, 109, 49, }, { 190, 69, 178, 148, 26, 192, 158, 134, 129, 239, 66, 141, 199, 91, 213, 199, }, { 59, 17, 225, 56, 237, 62, 143, 248, 216, 135, 49, 2, 30, 11, 222, 30, }, { 249, 156, 208, 92, 1, 213, 128, 210, 239, 30, 161, 198, 232, 59, 102, 232, }, { 242, 185, 71, 163, 192, 1, 173, 4, 106, 87, 215, 223, 111, 171, 200, 111, }, { 48, 52, 118, 199, 44, 234, 162, 46, 93, 206, 71, 27, 153, 155, 112, 153, }, { 181, 96, 37, 107, 219, 20, 179, 80, 4, 166, 52, 148, 64, 203, 123, 64, }, { 119, 237, 20, 15, 55, 255, 188, 122, 51, 63, 164, 80, 182, 251, 195, 182, }, { 222, 45, 94, 217, 66, 215, 25, 218, 59, 176, 204, 187, 54, 174, 53, 54, }, { 28, 160, 111, 189, 174, 60, 22, 240, 12, 41, 92, 127, 192, 158, 141, 192, }, { 153, 244, 60, 17, 89, 194, 7, 142, 85, 65, 47, 240, 25, 206, 134, 25, }, { 91, 121, 13, 117, 181, 41, 8, 164, 98, 216, 191, 52, 239, 254, 62, 239, }, { 80, 92, 154, 138, 116, 253, 37, 114, 231, 145, 201, 45, 104, 110, 144, 104, }, { 146, 209, 171, 238, 152, 22, 42, 88, 208, 8, 89, 233, 158, 94, 40, 158, }, { 23, 133, 248, 66, 111, 232, 59, 38, 137, 96, 42, 102, 71, 14, 35, 71, }, { 213, 8, 201, 38, 131, 3, 52, 12, 190, 249, 186, 162, 177, 62, 155, 177, }, { 1, 207, 21, 127, 46, 131, 97, 73, 64, 242, 198, 84, 138, 237, 188, 138, }, { 195, 66, 36, 27, 194, 104, 110, 99, 119, 107, 86, 144, 124, 221, 4, 124, }, { 70, 22, 119, 183, 53, 150, 127, 29, 46, 3, 37, 31, 165, 141, 15, 165, }, { 132, 155, 70, 211, 217, 125, 112, 55, 25, 154, 181, 219, 83, 189, 183, 83, }, { 143, 190, 209, 44, 24, 169, 93, 225, 156, 211, 195, 194, 212, 45, 25, 212, }, { 77, 51, 224, 72, 244, 66, 82, 203, 171, 74, 83, 6, 34, 29, 161, 34, }, { 200, 103, 179, 228, 3, 188, 67, 181, 242, 34, 32, 137, 251, 77, 170, 251, }, { 10, 234, 130, 128, 239, 87, 76, 159, 197, 187, 176, 77, 13, 125, 18, 13, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 192, 180, 166, 255, 57, 47, 84, 108, 175, 235, 225, 212, 215, 99, 100, 191, }, { 67, 171, 143, 61, 114, 94, 168, 216, 157, 21, 1, 107, 109, 198, 200, 189, }, { 131, 31, 41, 194, 75, 113, 252, 180, 50, 254, 224, 191, 186, 165, 172, 2, }, { 134, 149, 221, 122, 228, 188, 147, 115, 249, 42, 2, 214, 218, 79, 83, 185, }, { 70, 33, 123, 133, 221, 147, 199, 31, 86, 193, 227, 2, 13, 44, 55, 6, }, { 197, 62, 82, 71, 150, 226, 59, 171, 100, 63, 3, 189, 183, 137, 155, 4, }, { 5, 138, 244, 184, 175, 205, 111, 199, 203, 212, 226, 105, 96, 234, 255, 187, }, { 207, 233, 121, 244, 11, 187, 229, 230, 49, 84, 4, 111, 119, 158, 166, 177, }, { 15, 93, 223, 11, 50, 148, 177, 138, 158, 191, 229, 187, 160, 253, 194, 14, }, { 140, 66, 246, 201, 121, 229, 77, 62, 172, 65, 5, 4, 26, 88, 110, 12, }, { 76, 246, 80, 54, 64, 202, 25, 82, 3, 170, 228, 208, 205, 59, 10, 179, }, { 73, 124, 164, 142, 239, 7, 118, 149, 200, 126, 6, 185, 173, 209, 245, 8, }, { 137, 200, 2, 113, 214, 40, 34, 249, 103, 149, 231, 109, 122, 178, 145, 183, }, { 10, 215, 43, 179, 157, 89, 222, 77, 85, 107, 7, 210, 192, 23, 61, 181, }, { 202, 99, 141, 76, 164, 118, 138, 33, 250, 128, 230, 6, 23, 116, 89, 10, }, { 93, 17, 242, 43, 22, 181, 9, 15, 98, 168, 8, 222, 238, 255, 143, 161, }, { 157, 165, 84, 212, 47, 154, 93, 99, 205, 67, 233, 10, 57, 156, 235, 30, }, { 30, 186, 125, 22, 100, 235, 161, 215, 255, 189, 9, 181, 131, 57, 71, 28, }, { 222, 14, 219, 233, 93, 196, 245, 187, 80, 86, 232, 97, 84, 90, 35, 163, }, { 219, 132, 47, 81, 242, 9, 154, 124, 155, 130, 10, 8, 52, 176, 220, 24, }, { 27, 48, 137, 174, 203, 38, 206, 16, 52, 105, 235, 220, 227, 211, 184, 167, }, { 152, 47, 160, 108, 128, 87, 50, 164, 6, 151, 11, 99, 89, 118, 20, 165, }, { 88, 155, 6, 147, 185, 120, 102, 200, 169, 124, 234, 183, 142, 21, 112, 26, }, { 146, 248, 139, 223, 29, 14, 236, 233, 83, 252, 12, 177, 153, 97, 41, 16, }, { 82, 76, 45, 32, 36, 33, 184, 133, 252, 23, 237, 101, 78, 2, 77, 175, }, { 209, 83, 4, 226, 111, 80, 68, 49, 206, 233, 13, 218, 244, 167, 225, 173, }, { 17, 231, 162, 29, 86, 127, 16, 93, 97, 2, 236, 14, 35, 196, 133, 18, }, { 20, 109, 86, 165, 249, 178, 127, 154, 170, 214, 14, 103, 67, 46, 122, 169, }, { 212, 217, 240, 90, 192, 157, 43, 246, 5, 61, 239, 179, 148, 77, 30, 22, }, { 87, 198, 217, 152, 139, 236, 215, 66, 55, 195, 15, 12, 46, 232, 178, 20, }, { 151, 114, 127, 103, 178, 195, 131, 46, 152, 40, 238, 216, 249, 139, 214, 171, }, { 186, 34, 39, 86, 44, 169, 18, 30, 196, 147, 16, 127, 31, 61, 221, 129, }, { 122, 150, 129, 169, 21, 134, 70, 114, 107, 120, 241, 171, 200, 94, 185, 62, }, { 249, 137, 168, 107, 94, 247, 186, 198, 89, 134, 17, 20, 114, 251, 21, 60, }, { 57, 61, 14, 148, 103, 216, 238, 170, 246, 109, 240, 192, 165, 152, 113, 131, }, { 60, 183, 250, 44, 200, 21, 129, 109, 61, 185, 18, 169, 197, 114, 142, 56, }, { 252, 3, 92, 211, 241, 58, 213, 1, 146, 82, 243, 125, 18, 17, 234, 135, }, { 127, 28, 117, 17, 186, 75, 41, 181, 160, 172, 19, 194, 168, 180, 70, 133, }, { 191, 168, 211, 238, 131, 100, 125, 217, 15, 71, 242, 22, 127, 215, 34, 58, }, { 117, 203, 94, 162, 39, 18, 247, 248, 245, 199, 20, 16, 104, 163, 123, 48, }, { 181, 127, 248, 93, 30, 61, 163, 148, 90, 44, 245, 196, 191, 192, 31, 143, }, { 54, 96, 209, 159, 85, 76, 95, 32, 104, 210, 21, 123, 5, 101, 179, 141, }, { 246, 212, 119, 96, 108, 99, 11, 76, 199, 57, 244, 175, 210, 6, 215, 50, }, { 243, 94, 131, 216, 195, 174, 100, 139, 12, 237, 22, 198, 178, 236, 40, 137, }, { 51, 234, 37, 39, 250, 129, 48, 231, 163, 6, 247, 18, 101, 143, 76, 54, }, { 176, 245, 12, 229, 177, 240, 204, 83, 145, 248, 23, 173, 223, 42, 224, 52, }, { 112, 65, 170, 26, 136, 223, 152, 63, 62, 19, 246, 121, 8, 73, 132, 139, }, { 231, 51, 213, 125, 58, 28, 27, 17, 166, 59, 24, 161, 241, 194, 82, 32, }, { 39, 135, 115, 130, 3, 51, 79, 125, 9, 208, 249, 117, 38, 161, 54, 159, }, { 164, 152, 90, 64, 72, 66, 179, 201, 59, 46, 25, 202, 156, 4, 154, 157, }, { 100, 44, 252, 191, 113, 109, 231, 165, 148, 197, 248, 30, 75, 103, 254, 34, }, { 97, 166, 8, 7, 222, 160, 136, 98, 95, 17, 26, 119, 43, 141, 1, 153, }, { 161, 18, 174, 248, 231, 143, 220, 14, 240, 250, 251, 163, 252, 238, 101, 38, }, { 34, 13, 135, 58, 172, 254, 32, 186, 194, 4, 27, 28, 70, 75, 201, 36, }, { 226, 185, 33, 197, 149, 209, 116, 214, 109, 239, 250, 200, 145, 40, 173, 155, }, { 40, 218, 172, 137, 49, 167, 254, 247, 151, 111, 28, 206, 134, 92, 244, 145, }, { 232, 110, 10, 118, 8, 136, 170, 155, 56, 132, 253, 26, 81, 63, 144, 46, }, { 107, 113, 35, 180, 67, 249, 86, 47, 10, 122, 29, 165, 235, 154, 60, 44, }, { 171, 197, 133, 75, 122, 214, 2, 67, 165, 145, 252, 113, 60, 249, 88, 147, }, { 174, 79, 113, 243, 213, 27, 109, 132, 110, 69, 30, 24, 92, 19, 167, 40, }, { 110, 251, 215, 12, 236, 52, 57, 232, 193, 174, 255, 204, 139, 112, 195, 151, }, { 237, 228, 254, 206, 167, 69, 197, 92, 243, 80, 31, 115, 49, 213, 111, 149, }, { 45, 80, 88, 49, 158, 106, 145, 48, 92, 187, 254, 167, 230, 182, 11, 42, }, { 183, 68, 78, 172, 88, 145, 36, 60, 75, 229, 32, 254, 62, 122, 121, 193, }, { 119, 240, 232, 83, 97, 190, 112, 80, 228, 14, 193, 42, 233, 25, 29, 126, }, { 244, 239, 193, 145, 42, 207, 140, 228, 214, 240, 33, 149, 83, 188, 177, 124, }, { 52, 91, 103, 110, 19, 224, 216, 136, 121, 27, 192, 65, 132, 223, 213, 195, }, { 49, 209, 147, 214, 188, 45, 183, 79, 178, 207, 34, 40, 228, 53, 42, 120, }, { 241, 101, 53, 41, 133, 2, 227, 35, 29, 36, 195, 252, 51, 86, 78, 199, }, { 114, 122, 28, 235, 206, 115, 31, 151, 47, 218, 35, 67, 137, 243, 226, 197, }, { 178, 206, 186, 20, 247, 92, 75, 251, 128, 49, 194, 151, 94, 144, 134, 122, }, { 120, 173, 55, 88, 83, 42, 193, 218, 122, 177, 36, 145, 73, 228, 223, 112, }, { 184, 25, 145, 167, 106, 5, 149, 182, 213, 90, 197, 69, 158, 135, 187, 207, }, { 59, 6, 184, 101, 33, 116, 105, 2, 231, 164, 37, 250, 36, 34, 23, 205, }, { 251, 178, 30, 154, 24, 91, 61, 110, 72, 79, 196, 46, 243, 65, 115, 114, }, { 254, 56, 234, 34, 183, 150, 82, 169, 131, 155, 38, 71, 147, 171, 140, 201, }, { 62, 140, 76, 221, 142, 185, 6, 197, 44, 112, 199, 147, 68, 200, 232, 118, }, { 189, 147, 101, 31, 197, 200, 250, 113, 30, 142, 39, 44, 254, 109, 68, 116, }, { 125, 39, 195, 224, 252, 231, 174, 29, 177, 101, 198, 248, 41, 14, 32, 203, }, { 234, 85, 188, 135, 78, 36, 45, 51, 41, 77, 40, 32, 208, 133, 246, 96, }, { 42, 225, 26, 120, 119, 11, 121, 95, 134, 166, 201, 244, 7, 230, 146, 223, }, { 169, 254, 51, 186, 60, 122, 133, 235, 180, 88, 41, 75, 189, 67, 62, 221, }, { 105, 74, 149, 69, 5, 85, 209, 135, 27, 179, 200, 159, 106, 32, 90, 98, }, { 108, 192, 97, 253, 170, 152, 190, 64, 208, 103, 42, 246, 10, 202, 165, 217, }, { 172, 116, 199, 2, 147, 183, 234, 44, 127, 140, 203, 34, 221, 169, 193, 102, }, { 47, 107, 238, 192, 216, 198, 22, 152, 77, 114, 43, 157, 103, 12, 109, 100, }, { 239, 223, 72, 63, 225, 233, 66, 244, 226, 153, 202, 73, 176, 111, 9, 219, }, { 37, 188, 197, 115, 69, 159, 200, 213, 24, 25, 44, 79, 167, 27, 80, 209, }, { 229, 8, 99, 140, 124, 176, 156, 185, 183, 242, 205, 155, 112, 120, 52, 110, }, { 102, 23, 74, 78, 55, 193, 96, 13, 133, 12, 45, 36, 202, 221, 152, 108, }, { 166, 163, 236, 177, 14, 238, 52, 97, 42, 231, 204, 240, 29, 190, 252, 211, }, { 163, 41, 24, 9, 161, 35, 91, 166, 225, 51, 46, 153, 125, 84, 3, 104, }, { 99, 157, 190, 246, 152, 12, 15, 202, 78, 216, 207, 77, 170, 55, 103, 215, }, { 224, 130, 151, 52, 211, 125, 243, 126, 124, 38, 47, 242, 16, 146, 203, 213, }, { 32, 54, 49, 203, 234, 82, 167, 18, 211, 205, 206, 38, 199, 241, 175, 106, }, { 13, 102, 105, 250, 116, 56, 54, 34, 143, 118, 48, 129, 33, 71, 164, 64, }, { 205, 210, 207, 5, 77, 23, 98, 78, 32, 157, 209, 85, 246, 36, 192, 255, }, { 78, 205, 230, 199, 6, 102, 158, 250, 18, 99, 49, 234, 76, 129, 108, 253, }, { 142, 121, 64, 56, 63, 73, 202, 150, 189, 136, 208, 62, 155, 226, 8, 66, }, { 139, 243, 180, 128, 144, 132, 165, 81, 118, 92, 50, 87, 251, 8, 247, 249, }, { 75, 71, 18, 127, 169, 171, 241, 61, 217, 183, 211, 131, 44, 107, 147, 70, }, { 200, 88, 59, 189, 226, 218, 13, 137, 235, 73, 51, 60, 150, 206, 63, 68, }, { 8, 236, 157, 66, 219, 245, 89, 229, 68, 162, 210, 232, 65, 173, 91, 251, }, { 194, 143, 16, 14, 127, 131, 211, 196, 190, 34, 52, 238, 86, 217, 2, 241, }, { 2, 59, 182, 241, 70, 172, 135, 168, 17, 201, 213, 58, 129, 186, 102, 78, }, { 129, 36, 159, 51, 13, 221, 123, 28, 35, 55, 53, 133, 59, 31, 202, 76, }, { 65, 144, 57, 204, 52, 242, 47, 112, 140, 220, 212, 81, 236, 124, 174, 243, }, { 68, 26, 205, 116, 155, 63, 64, 183, 71, 8, 54, 56, 140, 150, 81, 72, }, { 132, 174, 107, 139, 162, 16, 20, 219, 232, 227, 215, 236, 91, 245, 53, 247, }, { 7, 177, 66, 73, 233, 97, 232, 111, 218, 29, 55, 83, 225, 80, 153, 245, }, { 199, 5, 228, 182, 208, 78, 188, 3, 117, 246, 214, 135, 54, 51, 253, 74, }, { 80, 119, 155, 209, 98, 141, 63, 45, 237, 222, 56, 95, 207, 184, 43, 225, }, { 144, 195, 61, 46, 91, 162, 107, 65, 66, 53, 217, 139, 24, 219, 79, 94, }, { 19, 220, 20, 236, 16, 211, 151, 245, 112, 203, 57, 52, 162, 126, 227, 92, }, { 211, 104, 178, 19, 41, 252, 195, 153, 223, 32, 216, 224, 117, 29, 135, 227, }, { 214, 226, 70, 171, 134, 49, 172, 94, 20, 244, 58, 137, 21, 247, 120, 88, }, { 22, 86, 224, 84, 191, 30, 248, 50, 187, 31, 219, 93, 194, 148, 28, 231, }, { 149, 73, 201, 150, 244, 111, 4, 134, 137, 225, 59, 226, 120, 49, 176, 229, }, { 85, 253, 111, 105, 205, 64, 80, 234, 38, 10, 218, 54, 175, 82, 212, 90, }, { 159, 158, 226, 37, 105, 54, 218, 203, 220, 138, 60, 48, 184, 38, 141, 80, }, { 95, 42, 68, 218, 80, 25, 142, 167, 115, 97, 221, 228, 111, 69, 233, 239, }, { 220, 53, 109, 24, 27, 104, 114, 19, 65, 159, 61, 91, 213, 224, 69, 237, }, { 28, 129, 203, 231, 34, 71, 38, 127, 238, 116, 220, 143, 2, 131, 33, 82, }, { 25, 11, 63, 95, 141, 138, 73, 184, 37, 160, 62, 230, 98, 105, 222, 233, }, { 217, 191, 153, 160, 180, 165, 29, 212, 138, 75, 223, 50, 181, 10, 186, 86, }, { 90, 160, 176, 98, 255, 212, 225, 96, 184, 181, 63, 141, 15, 175, 22, 84, }, { 154, 20, 22, 157, 198, 251, 181, 12, 23, 94, 222, 89, 216, 204, 114, 235, }, { 173, 136, 156, 155, 176, 225, 72, 120, 150, 9, 64, 63, 124, 244, 242, 65, }, { 109, 60, 58, 100, 137, 206, 28, 20, 57, 226, 161, 235, 171, 151, 150, 254, }, { 238, 35, 19, 166, 194, 191, 224, 160, 11, 28, 65, 84, 17, 50, 58, 252, }, { 46, 151, 181, 89, 251, 144, 180, 204, 164, 247, 160, 128, 198, 81, 94, 67, }, { 43, 29, 65, 225, 84, 93, 219, 11, 111, 35, 66, 233, 166, 187, 161, 248, }, { 235, 169, 231, 30, 109, 114, 143, 103, 192, 200, 163, 61, 113, 216, 197, 71, }, { 104, 182, 206, 220, 38, 3, 115, 211, 242, 54, 67, 130, 203, 125, 105, 69, }, { 168, 2, 104, 35, 31, 44, 39, 191, 93, 221, 162, 86, 28, 30, 13, 250, }, { 98, 97, 229, 111, 187, 90, 173, 158, 167, 93, 68, 80, 11, 106, 84, 240, }, { 162, 213, 67, 144, 130, 117, 249, 242, 8, 182, 165, 132, 220, 9, 48, 79, }, { 33, 202, 106, 82, 201, 4, 5, 70, 58, 72, 69, 59, 102, 172, 156, 77, }, { 225, 126, 204, 173, 240, 43, 81, 42, 149, 163, 164, 239, 177, 207, 248, 242, }, { 228, 244, 56, 21, 95, 230, 62, 237, 94, 119, 70, 134, 209, 37, 7, 73, }, { 36, 64, 158, 234, 102, 201, 106, 129, 241, 156, 167, 82, 6, 70, 99, 246, }, { 167, 95, 183, 40, 45, 184, 150, 53, 195, 98, 71, 237, 188, 227, 207, 244, }, { 103, 235, 17, 215, 20, 151, 194, 89, 108, 137, 166, 57, 107, 128, 171, 75, }, { 240, 153, 110, 176, 166, 84, 65, 119, 244, 161, 72, 225, 146, 11, 125, 224, }, { 48, 45, 200, 79, 159, 123, 21, 27, 91, 74, 169, 53, 69, 104, 25, 95, }, { 179, 50, 225, 141, 212, 10, 233, 175, 105, 180, 73, 138, 255, 205, 181, 93, }, { 115, 134, 71, 114, 237, 37, 189, 195, 198, 95, 168, 94, 40, 174, 209, 226, }, { 118, 12, 179, 202, 66, 232, 210, 4, 13, 139, 74, 55, 72, 68, 46, 89, }, { 182, 184, 21, 53, 123, 199, 134, 104, 162, 96, 171, 227, 159, 39, 74, 230, }, { 53, 167, 60, 247, 48, 182, 122, 220, 144, 158, 75, 92, 37, 130, 230, 228, }, { 245, 19, 154, 8, 9, 153, 46, 176, 63, 117, 170, 136, 242, 225, 130, 91, }, { 63, 112, 23, 68, 173, 239, 164, 145, 197, 245, 76, 142, 229, 149, 219, 81, }, { 255, 196, 177, 187, 148, 192, 240, 253, 106, 30, 173, 90, 50, 246, 191, 238, }, { 124, 219, 152, 121, 223, 177, 12, 73, 88, 224, 77, 229, 136, 83, 19, 236, }, { 188, 111, 62, 134, 230, 158, 88, 37, 247, 11, 172, 49, 95, 48, 119, 83, }, { 185, 229, 202, 62, 73, 83, 55, 226, 60, 223, 78, 88, 63, 218, 136, 232, }, { 121, 81, 108, 193, 112, 124, 99, 142, 147, 52, 175, 140, 232, 185, 236, 87, }, { 250, 78, 69, 3, 59, 13, 159, 58, 161, 202, 79, 51, 82, 28, 64, 85, }, { 58, 250, 227, 252, 2, 34, 203, 86, 14, 33, 174, 231, 133, 127, 36, 234, }, { 23, 170, 187, 205, 156, 72, 90, 102, 82, 154, 80, 64, 99, 201, 47, 192, }, { 215, 30, 29, 50, 165, 103, 14, 10, 253, 113, 177, 148, 180, 170, 75, 127, }, { 84, 1, 52, 240, 238, 22, 242, 190, 207, 143, 81, 43, 14, 15, 231, 125, }, { 148, 181, 146, 15, 215, 57, 166, 210, 96, 100, 176, 255, 217, 108, 131, 194, }, { 145, 63, 102, 183, 120, 244, 201, 21, 171, 176, 82, 150, 185, 134, 124, 121, }, { 81, 139, 192, 72, 65, 219, 157, 121, 4, 91, 179, 66, 110, 229, 24, 198, }, { 210, 148, 233, 138, 10, 170, 97, 205, 54, 165, 83, 253, 212, 64, 180, 196, }, { 18, 32, 79, 117, 51, 133, 53, 161, 153, 78, 178, 41, 3, 35, 208, 123, }, { 216, 67, 194, 57, 151, 243, 191, 128, 99, 206, 84, 47, 20, 87, 137, 113, }, { 24, 247, 100, 198, 174, 220, 235, 236, 204, 37, 181, 251, 195, 52, 237, 206, }, { 155, 232, 77, 4, 229, 173, 23, 88, 254, 219, 85, 68, 121, 145, 65, 204, }, { 91, 92, 235, 251, 220, 130, 67, 52, 81, 48, 180, 144, 174, 242, 37, 115, }, { 94, 214, 31, 67, 115, 79, 44, 243, 154, 228, 86, 249, 206, 24, 218, 200, }, { 158, 98, 185, 188, 74, 96, 120, 159, 53, 15, 183, 45, 25, 123, 190, 119, }, { 29, 125, 144, 126, 1, 17, 132, 43, 7, 241, 87, 146, 163, 222, 18, 117, }, { 221, 201, 54, 129, 56, 62, 208, 71, 168, 26, 182, 70, 116, 189, 118, 202, }, { 74, 187, 73, 230, 138, 253, 83, 105, 48, 50, 88, 158, 141, 54, 160, 97, }, { 138, 15, 239, 25, 179, 210, 7, 5, 159, 217, 185, 74, 90, 85, 196, 222, }, { 9, 16, 198, 219, 248, 163, 251, 177, 173, 39, 89, 245, 224, 240, 104, 220, }, { 201, 164, 96, 36, 193, 140, 175, 221, 2, 204, 184, 33, 55, 147, 12, 99, }, { 204, 46, 148, 156, 110, 65, 192, 26, 201, 24, 90, 72, 87, 121, 243, 216, }, { 12, 154, 50, 99, 87, 110, 148, 118, 102, 243, 187, 156, 128, 26, 151, 103, }, { 143, 133, 27, 161, 28, 31, 104, 194, 84, 13, 91, 35, 58, 191, 59, 101, }, { 79, 49, 189, 94, 37, 48, 60, 174, 251, 230, 186, 247, 237, 220, 95, 218, }, { 133, 82, 48, 18, 129, 70, 182, 143, 1, 102, 92, 241, 250, 168, 6, 208, }, { 69, 230, 150, 237, 184, 105, 226, 227, 174, 141, 189, 37, 45, 203, 98, 111, }, { 198, 249, 191, 47, 243, 24, 30, 87, 156, 115, 93, 154, 151, 110, 206, 109, }, { 6, 77, 25, 208, 202, 55, 74, 59, 51, 152, 188, 78, 64, 13, 170, 210, }, { 3, 199, 237, 104, 101, 250, 37, 252, 248, 76, 94, 39, 32, 231, 85, 105, }, { 195, 115, 75, 151, 92, 213, 113, 144, 87, 167, 191, 243, 247, 132, 49, 214, }, { 64, 108, 98, 85, 23, 164, 141, 36, 101, 89, 95, 76, 77, 33, 157, 212, }, { 128, 216, 196, 170, 46, 139, 217, 72, 202, 178, 190, 152, 154, 66, 249, 107, }, { 26, 204, 210, 55, 232, 112, 108, 68, 221, 236, 96, 193, 66, 142, 139, 128, }, { 218, 120, 116, 200, 209, 95, 56, 40, 114, 7, 129, 21, 149, 237, 239, 63, }, { 89, 103, 93, 10, 154, 46, 196, 156, 64, 249, 97, 170, 47, 72, 67, 61, }, { 153, 211, 251, 245, 163, 1, 144, 240, 239, 18, 128, 126, 248, 43, 39, 130, }, { 156, 89, 15, 77, 12, 204, 255, 55, 36, 198, 98, 23, 152, 193, 216, 57, }, { 92, 237, 169, 178, 53, 227, 171, 91, 139, 45, 131, 195, 79, 162, 188, 134, }, { 223, 242, 128, 112, 126, 146, 87, 239, 185, 211, 99, 124, 245, 7, 16, 132, }, { 31, 70, 38, 143, 71, 189, 3, 131, 22, 56, 130, 168, 34, 100, 116, 59, }, { 213, 37, 171, 195, 227, 203, 137, 162, 236, 184, 100, 174, 53, 16, 45, 49, }, { 21, 145, 13, 60, 218, 228, 221, 206, 67, 83, 133, 122, 226, 115, 73, 142, }, { 150, 142, 36, 254, 145, 149, 33, 122, 113, 173, 101, 197, 88, 214, 229, 140, }, { 86, 58, 130, 1, 168, 186, 117, 22, 222, 70, 132, 17, 143, 181, 129, 51, }, { 83, 176, 118, 185, 7, 119, 26, 209, 21, 146, 102, 120, 239, 95, 126, 136, }, { 147, 4, 208, 70, 62, 88, 78, 189, 186, 121, 135, 172, 56, 60, 26, 55, }, { 16, 27, 249, 132, 117, 41, 178, 9, 136, 135, 103, 19, 130, 153, 182, 53, }, { 208, 175, 95, 123, 76, 6, 230, 101, 39, 108, 134, 199, 85, 250, 210, 138, }, { 71, 221, 32, 28, 254, 197, 101, 75, 191, 68, 104, 31, 172, 113, 4, 33, }, { 135, 105, 134, 227, 199, 234, 49, 39, 16, 175, 137, 203, 123, 18, 96, 158, }, { 4, 118, 175, 33, 140, 155, 205, 147, 34, 81, 105, 116, 193, 183, 204, 156, }, { 196, 194, 9, 222, 181, 180, 153, 255, 141, 186, 136, 160, 22, 212, 168, 35, }, { 193, 72, 253, 102, 26, 121, 246, 56, 70, 110, 106, 201, 118, 62, 87, 152, }, { 1, 252, 91, 153, 35, 86, 162, 84, 233, 133, 139, 29, 161, 93, 51, 39, }, { 130, 227, 114, 91, 104, 39, 94, 224, 219, 123, 107, 162, 27, 248, 159, 37, }, { 66, 87, 212, 164, 81, 8, 10, 140, 116, 144, 138, 118, 204, 155, 251, 154, }, { 136, 52, 89, 232, 245, 126, 128, 173, 142, 16, 108, 112, 219, 239, 162, 144, }, { 72, 128, 255, 23, 204, 81, 212, 193, 33, 251, 141, 164, 12, 140, 198, 47, }, { 203, 159, 214, 213, 135, 32, 40, 117, 19, 5, 109, 27, 182, 41, 106, 45, }, { 11, 43, 112, 42, 190, 15, 124, 25, 188, 238, 140, 207, 97, 74, 14, 146, }, { 14, 161, 132, 146, 17, 194, 19, 222, 119, 58, 110, 166, 1, 160, 241, 41, }, { 206, 21, 34, 109, 40, 237, 71, 178, 216, 209, 143, 114, 214, 195, 149, 150, }, { 77, 10, 11, 175, 99, 156, 187, 6, 234, 47, 111, 205, 108, 102, 57, 148, }, { 141, 190, 173, 80, 90, 179, 239, 106, 69, 196, 142, 25, 187, 5, 93, 43, }, { 160, 238, 245, 97, 196, 217, 126, 90, 25, 127, 112, 190, 93, 179, 86, 1, }, { 96, 90, 83, 158, 253, 246, 42, 54, 182, 148, 145, 106, 138, 208, 50, 190, }, { 227, 69, 122, 92, 182, 135, 214, 130, 132, 106, 113, 213, 48, 117, 158, 188, }, { 35, 241, 220, 163, 143, 168, 130, 238, 43, 129, 144, 1, 231, 22, 250, 3, }, { 38, 123, 40, 27, 32, 101, 237, 41, 224, 85, 114, 104, 135, 252, 5, 184, }, { 230, 207, 142, 228, 25, 74, 185, 69, 79, 190, 147, 188, 80, 159, 97, 7, }, { 101, 208, 167, 38, 82, 59, 69, 241, 125, 64, 115, 3, 234, 58, 205, 5, }, { 165, 100, 1, 217, 107, 20, 17, 157, 210, 171, 146, 215, 61, 89, 169, 186, }, { 111, 7, 140, 149, 207, 98, 155, 188, 40, 43, 116, 209, 42, 45, 240, 176, }, { 175, 179, 42, 106, 246, 77, 207, 208, 135, 192, 149, 5, 253, 78, 148, 15, }, { 44, 172, 3, 168, 189, 60, 51, 100, 181, 62, 117, 186, 71, 235, 56, 13, }, { 236, 24, 165, 87, 132, 19, 103, 8, 26, 213, 148, 110, 144, 136, 92, 178, }, { 233, 146, 81, 239, 43, 222, 8, 207, 209, 1, 118, 7, 240, 98, 163, 9, }, { 41, 38, 247, 16, 18, 241, 92, 163, 126, 234, 151, 211, 39, 1, 199, 182, }, { 170, 57, 222, 210, 89, 128, 160, 23, 76, 20, 119, 108, 157, 164, 107, 180, }, { 106, 141, 120, 45, 96, 175, 244, 123, 227, 255, 150, 184, 74, 199, 15, 11, }, { 253, 255, 7, 74, 210, 108, 119, 85, 123, 215, 120, 96, 179, 76, 217, 160, }, { 61, 75, 161, 181, 235, 67, 35, 57, 212, 60, 153, 180, 100, 47, 189, 31, }, { 190, 84, 136, 119, 160, 50, 223, 141, 230, 194, 121, 11, 222, 138, 17, 29, }, { 126, 224, 46, 136, 153, 29, 139, 225, 73, 41, 152, 223, 9, 233, 117, 162, }, { 123, 106, 218, 48, 54, 208, 228, 38, 130, 253, 122, 182, 105, 3, 138, 25, }, { 187, 222, 124, 207, 15, 255, 176, 74, 45, 22, 155, 98, 190, 96, 238, 166, }, { 56, 193, 85, 13, 68, 142, 76, 254, 31, 232, 123, 221, 4, 197, 66, 164, }, { 248, 117, 243, 242, 125, 161, 24, 146, 176, 3, 154, 9, 211, 166, 38, 27, }, { 50, 22, 126, 190, 217, 215, 146, 179, 74, 131, 124, 15, 196, 210, 127, 17, }, { 242, 162, 216, 65, 224, 248, 198, 223, 229, 104, 157, 219, 19, 177, 27, 174, }, { 113, 189, 241, 131, 171, 137, 58, 107, 215, 150, 125, 100, 169, 20, 183, 172, }, { 177, 9, 87, 124, 146, 166, 110, 7, 120, 125, 156, 176, 126, 119, 211, 19, }, { 180, 131, 163, 196, 61, 107, 1, 192, 179, 169, 126, 217, 30, 157, 44, 168, }, { 116, 55, 5, 59, 4, 68, 85, 172, 28, 66, 159, 13, 201, 254, 72, 23, }, { 247, 40, 44, 249, 79, 53, 169, 24, 46, 188, 127, 178, 115, 91, 228, 21, }, { 55, 156, 138, 6, 118, 26, 253, 116, 129, 87, 158, 102, 164, 56, 128, 170, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 1, 84, 48, 123, 239, 132, 8, 9, 212, 213, 163, 141, 166, 161, 193, 10, }, { 2, 168, 96, 246, 29, 203, 16, 18, 107, 105, 133, 217, 143, 129, 65, 20, }, { 3, 252, 80, 141, 242, 79, 24, 27, 191, 188, 38, 84, 41, 32, 128, 30, }, { 4, 147, 192, 47, 58, 85, 32, 36, 214, 210, 201, 113, 221, 193, 130, 40, }, { 5, 199, 240, 84, 213, 209, 40, 45, 2, 7, 106, 252, 123, 96, 67, 34, }, { 6, 59, 160, 217, 39, 158, 48, 54, 189, 187, 76, 168, 82, 64, 195, 60, }, { 7, 111, 144, 162, 200, 26, 56, 63, 105, 110, 239, 37, 244, 225, 2, 54, }, { 8, 229, 67, 94, 116, 170, 64, 72, 111, 103, 81, 226, 121, 65, 199, 80, }, { 9, 177, 115, 37, 155, 46, 72, 65, 187, 178, 242, 111, 223, 224, 6, 90, }, { 10, 77, 35, 168, 105, 97, 80, 90, 4, 14, 212, 59, 246, 192, 134, 68, }, { 11, 25, 19, 211, 134, 229, 88, 83, 208, 219, 119, 182, 80, 97, 71, 78, }, { 12, 118, 131, 113, 78, 255, 96, 108, 185, 181, 152, 147, 164, 128, 69, 120, }, { 13, 34, 179, 10, 161, 123, 104, 101, 109, 96, 59, 30, 2, 33, 132, 114, }, { 14, 222, 227, 135, 83, 52, 112, 126, 210, 220, 29, 74, 43, 1, 4, 108, }, { 15, 138, 211, 252, 188, 176, 120, 119, 6, 9, 190, 199, 141, 160, 197, 102, }, { 16, 9, 134, 188, 232, 151, 128, 144, 222, 206, 162, 7, 242, 130, 77, 160, }, { 17, 93, 182, 199, 7, 19, 136, 153, 10, 27, 1, 138, 84, 35, 140, 170, }, { 18, 161, 230, 74, 245, 92, 144, 130, 181, 167, 39, 222, 125, 3, 12, 180, }, { 19, 245, 214, 49, 26, 216, 152, 139, 97, 114, 132, 83, 219, 162, 205, 190, }, { 20, 154, 70, 147, 210, 194, 160, 180, 8, 28, 107, 118, 47, 67, 207, 136, }, { 21, 206, 118, 232, 61, 70, 168, 189, 220, 201, 200, 251, 137, 226, 14, 130, }, { 22, 50, 38, 101, 207, 9, 176, 166, 99, 117, 238, 175, 160, 194, 142, 156, }, { 23, 102, 22, 30, 32, 141, 184, 175, 183, 160, 77, 34, 6, 99, 79, 150, }, { 24, 236, 197, 226, 156, 61, 192, 216, 177, 169, 243, 229, 139, 195, 138, 240, }, { 25, 184, 245, 153, 115, 185, 200, 209, 101, 124, 80, 104, 45, 98, 75, 250, }, { 26, 68, 165, 20, 129, 246, 208, 202, 218, 192, 118, 60, 4, 66, 203, 228, }, { 27, 16, 149, 111, 110, 114, 216, 195, 14, 21, 213, 177, 162, 227, 10, 238, }, { 28, 127, 5, 205, 166, 104, 224, 252, 103, 123, 58, 148, 86, 2, 8, 216, }, { 29, 43, 53, 182, 73, 236, 232, 245, 179, 174, 153, 25, 240, 163, 201, 210, }, { 30, 215, 101, 59, 187, 163, 240, 238, 12, 18, 191, 77, 217, 131, 73, 204, }, { 31, 131, 85, 64, 84, 39, 248, 231, 216, 199, 28, 192, 127, 34, 136, 198, }, { 32, 18, 207, 187, 19, 237, 195, 227, 127, 95, 135, 14, 39, 199, 154, 131, }, { 33, 70, 255, 192, 252, 105, 203, 234, 171, 138, 36, 131, 129, 102, 91, 137, }, { 34, 186, 175, 77, 14, 38, 211, 241, 20, 54, 2, 215, 168, 70, 219, 151, }, { 35, 238, 159, 54, 225, 162, 219, 248, 192, 227, 161, 90, 14, 231, 26, 157, }, { 36, 129, 15, 148, 41, 184, 227, 199, 169, 141, 78, 127, 250, 6, 24, 171, }, { 37, 213, 63, 239, 198, 60, 235, 206, 125, 88, 237, 242, 92, 167, 217, 161, }, { 38, 41, 111, 98, 52, 115, 243, 213, 194, 228, 203, 166, 117, 135, 89, 191, }, { 39, 125, 95, 25, 219, 247, 251, 220, 22, 49, 104, 43, 211, 38, 152, 181, }, { 40, 247, 140, 229, 103, 71, 131, 171, 16, 56, 214, 236, 94, 134, 93, 211, }, { 41, 163, 188, 158, 136, 195, 139, 162, 196, 237, 117, 97, 248, 39, 156, 217, }, { 42, 95, 236, 19, 122, 140, 147, 185, 123, 81, 83, 53, 209, 7, 28, 199, }, { 43, 11, 220, 104, 149, 8, 155, 176, 175, 132, 240, 184, 119, 166, 221, 205, }, { 44, 100, 76, 202, 93, 18, 163, 143, 198, 234, 31, 157, 131, 71, 223, 251, }, { 45, 48, 124, 177, 178, 150, 171, 134, 18, 63, 188, 16, 37, 230, 30, 241, }, { 46, 204, 44, 60, 64, 217, 179, 157, 173, 131, 154, 68, 12, 198, 158, 239, }, { 47, 152, 28, 71, 175, 93, 187, 148, 121, 86, 57, 201, 170, 103, 95, 229, }, { 48, 27, 73, 7, 251, 122, 67, 115, 161, 145, 37, 9, 213, 69, 215, 35, }, { 49, 79, 121, 124, 20, 254, 75, 122, 117, 68, 134, 132, 115, 228, 22, 41, }, { 50, 179, 41, 241, 230, 177, 83, 97, 202, 248, 160, 208, 90, 196, 150, 55, }, { 51, 231, 25, 138, 9, 53, 91, 104, 30, 45, 3, 93, 252, 101, 87, 61, }, { 52, 136, 137, 40, 193, 47, 99, 87, 119, 67, 236, 120, 8, 132, 85, 11, }, { 53, 220, 185, 83, 46, 171, 107, 94, 163, 150, 79, 245, 174, 37, 148, 1, }, { 54, 32, 233, 222, 220, 228, 115, 69, 28, 42, 105, 161, 135, 5, 20, 31, }, { 55, 116, 217, 165, 51, 96, 123, 76, 200, 255, 202, 44, 33, 164, 213, 21, }, { 56, 254, 10, 89, 143, 208, 3, 59, 206, 246, 116, 235, 172, 4, 16, 115, }, { 57, 170, 58, 34, 96, 84, 11, 50, 26, 35, 215, 102, 10, 165, 209, 121, }, { 58, 86, 106, 175, 146, 27, 19, 41, 165, 159, 241, 50, 35, 133, 81, 103, }, { 59, 2, 90, 212, 125, 159, 27, 32, 113, 74, 82, 191, 133, 36, 144, 109, }, { 60, 109, 202, 118, 181, 133, 35, 31, 24, 36, 189, 154, 113, 197, 146, 91, }, { 61, 57, 250, 13, 90, 1, 43, 22, 204, 241, 30, 23, 215, 100, 83, 81, }, { 62, 197, 170, 128, 168, 78, 51, 13, 115, 77, 56, 67, 254, 68, 211, 79, }, { 63, 145, 154, 251, 71, 202, 59, 4, 167, 152, 155, 206, 88, 229, 18, 69, }, { 64, 36, 93, 181, 38, 25, 69, 5, 254, 190, 205, 28, 78, 77, 247, 197, }, { 65, 112, 109, 206, 201, 157, 77, 12, 42, 107, 110, 145, 232, 236, 54, 207, }, { 66, 140, 61, 67, 59, 210, 85, 23, 149, 215, 72, 197, 193, 204, 182, 209, }, { 67, 216, 13, 56, 212, 86, 93, 30, 65, 2, 235, 72, 103, 109, 119, 219, }, { 68, 183, 157, 154, 28, 76, 101, 33, 40, 108, 4, 109, 147, 140, 117, 237, }, { 69, 227, 173, 225, 243, 200, 109, 40, 252, 185, 167, 224, 53, 45, 180, 231, }, { 70, 31, 253, 108, 1, 135, 117, 51, 67, 5, 129, 180, 28, 13, 52, 249, }, { 71, 75, 205, 23, 238, 3, 125, 58, 151, 208, 34, 57, 186, 172, 245, 243, }, { 72, 193, 30, 235, 82, 179, 5, 77, 145, 217, 156, 254, 55, 12, 48, 149, }, { 73, 149, 46, 144, 189, 55, 13, 68, 69, 12, 63, 115, 145, 173, 241, 159, }, { 74, 105, 126, 29, 79, 120, 21, 95, 250, 176, 25, 39, 184, 141, 113, 129, }, { 75, 61, 78, 102, 160, 252, 29, 86, 46, 101, 186, 170, 30, 44, 176, 139, }, { 76, 82, 222, 196, 104, 230, 37, 105, 71, 11, 85, 143, 234, 205, 178, 189, }, { 77, 6, 238, 191, 135, 98, 45, 96, 147, 222, 246, 2, 76, 108, 115, 183, }, { 78, 250, 190, 50, 117, 45, 53, 123, 44, 98, 208, 86, 101, 76, 243, 169, }, { 79, 174, 142, 73, 154, 169, 61, 114, 248, 183, 115, 219, 195, 237, 50, 163, }, { 80, 45, 219, 9, 206, 142, 197, 149, 32, 112, 111, 27, 188, 207, 186, 101, }, { 81, 121, 235, 114, 33, 10, 205, 156, 244, 165, 204, 150, 26, 110, 123, 111, }, { 82, 133, 187, 255, 211, 69, 213, 135, 75, 25, 234, 194, 51, 78, 251, 113, }, { 83, 209, 139, 132, 60, 193, 221, 142, 159, 204, 73, 79, 149, 239, 58, 123, }, { 84, 190, 27, 38, 244, 219, 229, 177, 246, 162, 166, 106, 97, 14, 56, 77, }, { 85, 234, 43, 93, 27, 95, 237, 184, 34, 119, 5, 231, 199, 175, 249, 71, }, { 86, 22, 123, 208, 233, 16, 245, 163, 157, 203, 35, 179, 238, 143, 121, 89, }, { 87, 66, 75, 171, 6, 148, 253, 170, 73, 30, 128, 62, 72, 46, 184, 83, }, { 88, 200, 152, 87, 186, 36, 133, 221, 79, 23, 62, 249, 197, 142, 125, 53, }, { 89, 156, 168, 44, 85, 160, 141, 212, 155, 194, 157, 116, 99, 47, 188, 63, }, { 90, 96, 248, 161, 167, 239, 149, 207, 36, 126, 187, 32, 74, 15, 60, 33, }, { 91, 52, 200, 218, 72, 107, 157, 198, 240, 171, 24, 173, 236, 174, 253, 43, }, { 92, 91, 88, 120, 128, 113, 165, 249, 153, 197, 247, 136, 24, 79, 255, 29, }, { 93, 15, 104, 3, 111, 245, 173, 240, 77, 16, 84, 5, 190, 238, 62, 23, }, { 94, 243, 56, 142, 157, 186, 181, 235, 242, 172, 114, 81, 151, 206, 190, 9, }, { 95, 167, 8, 245, 114, 62, 189, 226, 38, 121, 209, 220, 49, 111, 127, 3, }, { 96, 54, 146, 14, 53, 244, 134, 230, 129, 225, 74, 18, 105, 138, 109, 70, }, { 97, 98, 162, 117, 218, 112, 142, 239, 85, 52, 233, 159, 207, 43, 172, 76, }, { 98, 158, 242, 248, 40, 63, 150, 244, 234, 136, 207, 203, 230, 11, 44, 82, }, { 99, 202, 194, 131, 199, 187, 158, 253, 62, 93, 108, 70, 64, 170, 237, 88, }, { 100, 165, 82, 33, 15, 161, 166, 194, 87, 51, 131, 99, 180, 75, 239, 110, }, { 101, 241, 98, 90, 224, 37, 174, 203, 131, 230, 32, 238, 18, 234, 46, 100, }, { 102, 13, 50, 215, 18, 106, 182, 208, 60, 90, 6, 186, 59, 202, 174, 122, }, { 103, 89, 2, 172, 253, 238, 190, 217, 232, 143, 165, 55, 157, 107, 111, 112, }, { 104, 211, 209, 80, 65, 94, 198, 174, 238, 134, 27, 240, 16, 203, 170, 22, }, { 105, 135, 225, 43, 174, 218, 206, 167, 58, 83, 184, 125, 182, 106, 107, 28, }, { 106, 123, 177, 166, 92, 149, 214, 188, 133, 239, 158, 41, 159, 74, 235, 2, }, { 107, 47, 129, 221, 179, 17, 222, 181, 81, 58, 61, 164, 57, 235, 42, 8, }, { 108, 64, 17, 127, 123, 11, 230, 138, 56, 84, 210, 129, 205, 10, 40, 62, }, { 109, 20, 33, 4, 148, 143, 238, 131, 236, 129, 113, 12, 107, 171, 233, 52, }, { 110, 232, 113, 137, 102, 192, 246, 152, 83, 61, 87, 88, 66, 139, 105, 42, }, { 111, 188, 65, 242, 137, 68, 254, 145, 135, 232, 244, 213, 228, 42, 168, 32, }, { 112, 63, 20, 178, 221, 99, 6, 118, 95, 47, 232, 21, 155, 8, 32, 230, }, { 113, 107, 36, 201, 50, 231, 14, 127, 139, 250, 75, 152, 61, 169, 225, 236, }, { 114, 151, 116, 68, 192, 168, 22, 100, 52, 70, 109, 204, 20, 137, 97, 242, }, { 115, 195, 68, 63, 47, 44, 30, 109, 224, 147, 206, 65, 178, 40, 160, 248, }, { 116, 172, 212, 157, 231, 54, 38, 82, 137, 253, 33, 100, 70, 201, 162, 206, }, { 117, 248, 228, 230, 8, 178, 46, 91, 93, 40, 130, 233, 224, 104, 99, 196, }, { 118, 4, 180, 107, 250, 253, 54, 64, 226, 148, 164, 189, 201, 72, 227, 218, }, { 119, 80, 132, 16, 21, 121, 62, 73, 54, 65, 7, 48, 111, 233, 34, 208, }, { 120, 218, 87, 236, 169, 201, 70, 62, 48, 72, 185, 247, 226, 73, 231, 182, }, { 121, 142, 103, 151, 70, 77, 78, 55, 228, 157, 26, 122, 68, 232, 38, 188, }, { 122, 114, 55, 26, 180, 2, 86, 44, 91, 33, 60, 46, 109, 200, 166, 162, }, { 123, 38, 7, 97, 91, 134, 94, 37, 143, 244, 159, 163, 203, 105, 103, 168, }, { 124, 73, 151, 195, 147, 156, 102, 26, 230, 154, 112, 134, 63, 136, 101, 158, }, { 125, 29, 167, 184, 124, 24, 110, 19, 50, 79, 211, 11, 153, 41, 164, 148, }, { 126, 225, 247, 53, 142, 87, 118, 8, 141, 243, 245, 95, 176, 9, 36, 138, }, { 127, 181, 199, 78, 97, 211, 126, 1, 89, 38, 86, 210, 22, 168, 229, 128, }, { 128, 72, 186, 169, 76, 50, 138, 10, 63, 191, 89, 56, 156, 154, 45, 73, }, { 129, 28, 138, 210, 163, 182, 130, 3, 235, 106, 250, 181, 58, 59, 236, 67, }, { 130, 224, 218, 95, 81, 249, 154, 24, 84, 214, 220, 225, 19, 27, 108, 93, }, { 131, 180, 234, 36, 190, 125, 146, 17, 128, 3, 127, 108, 181, 186, 173, 87, }, { 132, 219, 122, 134, 118, 103, 170, 46, 233, 109, 144, 73, 65, 91, 175, 97, }, { 133, 143, 74, 253, 153, 227, 162, 39, 61, 184, 51, 196, 231, 250, 110, 107, }, { 134, 115, 26, 112, 107, 172, 186, 60, 130, 4, 21, 144, 206, 218, 238, 117, }, { 135, 39, 42, 11, 132, 40, 178, 53, 86, 209, 182, 29, 104, 123, 47, 127, }, { 136, 173, 249, 247, 56, 152, 202, 66, 80, 216, 8, 218, 229, 219, 234, 25, }, { 137, 249, 201, 140, 215, 28, 194, 75, 132, 13, 171, 87, 67, 122, 43, 19, }, { 138, 5, 153, 1, 37, 83, 218, 80, 59, 177, 141, 3, 106, 90, 171, 13, }, { 139, 81, 169, 122, 202, 215, 210, 89, 239, 100, 46, 142, 204, 251, 106, 7, }, { 140, 62, 57, 216, 2, 205, 234, 102, 134, 10, 193, 171, 56, 26, 104, 49, }, { 141, 106, 9, 163, 237, 73, 226, 111, 82, 223, 98, 38, 158, 187, 169, 59, }, { 142, 150, 89, 46, 31, 6, 250, 116, 237, 99, 68, 114, 183, 155, 41, 37, }, { 143, 194, 105, 85, 240, 130, 242, 125, 57, 182, 231, 255, 17, 58, 232, 47, }, { 144, 65, 60, 21, 164, 165, 10, 154, 225, 113, 251, 63, 110, 24, 96, 233, }, { 145, 21, 12, 110, 75, 33, 2, 147, 53, 164, 88, 178, 200, 185, 161, 227, }, { 146, 233, 92, 227, 185, 110, 26, 136, 138, 24, 126, 230, 225, 153, 33, 253, }, { 147, 189, 108, 152, 86, 234, 18, 129, 94, 205, 221, 107, 71, 56, 224, 247, }, { 148, 210, 252, 58, 158, 240, 42, 190, 55, 163, 50, 78, 179, 217, 226, 193, }, { 149, 134, 204, 65, 113, 116, 34, 183, 227, 118, 145, 195, 21, 120, 35, 203, }, { 150, 122, 156, 204, 131, 59, 58, 172, 92, 202, 183, 151, 60, 88, 163, 213, }, { 151, 46, 172, 183, 108, 191, 50, 165, 136, 31, 20, 26, 154, 249, 98, 223, }, { 152, 164, 127, 75, 208, 15, 74, 210, 142, 22, 170, 221, 23, 89, 167, 185, }, { 153, 240, 79, 48, 63, 139, 66, 219, 90, 195, 9, 80, 177, 248, 102, 179, }, { 154, 12, 31, 189, 205, 196, 90, 192, 229, 127, 47, 4, 152, 216, 230, 173, }, { 155, 88, 47, 198, 34, 64, 82, 201, 49, 170, 140, 137, 62, 121, 39, 167, }, { 156, 55, 191, 100, 234, 90, 106, 246, 88, 196, 99, 172, 202, 152, 37, 145, }, { 157, 99, 143, 31, 5, 222, 98, 255, 140, 17, 192, 33, 108, 57, 228, 155, }, { 158, 159, 223, 146, 247, 145, 122, 228, 51, 173, 230, 117, 69, 25, 100, 133, }, { 159, 203, 239, 233, 24, 21, 114, 237, 231, 120, 69, 248, 227, 184, 165, 143, }, { 160, 90, 117, 18, 95, 223, 73, 233, 64, 224, 222, 54, 187, 93, 183, 202, }, { 161, 14, 69, 105, 176, 91, 65, 224, 148, 53, 125, 187, 29, 252, 118, 192, }, { 162, 242, 21, 228, 66, 20, 89, 251, 43, 137, 91, 239, 52, 220, 246, 222, }, { 163, 166, 37, 159, 173, 144, 81, 242, 255, 92, 248, 98, 146, 125, 55, 212, }, { 164, 201, 181, 61, 101, 138, 105, 205, 150, 50, 23, 71, 102, 156, 53, 226, }, { 165, 157, 133, 70, 138, 14, 97, 196, 66, 231, 180, 202, 192, 61, 244, 232, }, { 166, 97, 213, 203, 120, 65, 121, 223, 253, 91, 146, 158, 233, 29, 116, 246, }, { 167, 53, 229, 176, 151, 197, 113, 214, 41, 142, 49, 19, 79, 188, 181, 252, }, { 168, 191, 54, 76, 43, 117, 9, 161, 47, 135, 143, 212, 194, 28, 112, 154, }, { 169, 235, 6, 55, 196, 241, 1, 168, 251, 82, 44, 89, 100, 189, 177, 144, }, { 170, 23, 86, 186, 54, 190, 25, 179, 68, 238, 10, 13, 77, 157, 49, 142, }, { 171, 67, 102, 193, 217, 58, 17, 186, 144, 59, 169, 128, 235, 60, 240, 132, }, { 172, 44, 246, 99, 17, 32, 41, 133, 249, 85, 70, 165, 31, 221, 242, 178, }, { 173, 120, 198, 24, 254, 164, 33, 140, 45, 128, 229, 40, 185, 124, 51, 184, }, { 174, 132, 150, 149, 12, 235, 57, 151, 146, 60, 195, 124, 144, 92, 179, 166, }, { 175, 208, 166, 238, 227, 111, 49, 158, 70, 233, 96, 241, 54, 253, 114, 172, }, { 176, 83, 243, 174, 183, 72, 201, 121, 158, 46, 124, 49, 73, 223, 250, 106, }, { 177, 7, 195, 213, 88, 204, 193, 112, 74, 251, 223, 188, 239, 126, 59, 96, }, { 178, 251, 147, 88, 170, 131, 217, 107, 245, 71, 249, 232, 198, 94, 187, 126, }, { 179, 175, 163, 35, 69, 7, 209, 98, 33, 146, 90, 101, 96, 255, 122, 116, }, { 180, 192, 51, 129, 141, 29, 233, 93, 72, 252, 181, 64, 148, 30, 120, 66, }, { 181, 148, 3, 250, 98, 153, 225, 84, 156, 41, 22, 205, 50, 191, 185, 72, }, { 182, 104, 83, 119, 144, 214, 249, 79, 35, 149, 48, 153, 27, 159, 57, 86, }, { 183, 60, 99, 12, 127, 82, 241, 70, 247, 64, 147, 20, 189, 62, 248, 92, }, { 184, 182, 176, 240, 195, 226, 137, 49, 241, 73, 45, 211, 48, 158, 61, 58, }, { 185, 226, 128, 139, 44, 102, 129, 56, 37, 156, 142, 94, 150, 63, 252, 48, }, { 186, 30, 208, 6, 222, 41, 153, 35, 154, 32, 168, 10, 191, 31, 124, 46, }, { 187, 74, 224, 125, 49, 173, 145, 42, 78, 245, 11, 135, 25, 190, 189, 36, }, { 188, 37, 112, 223, 249, 183, 169, 21, 39, 155, 228, 162, 237, 95, 191, 18, }, { 189, 113, 64, 164, 22, 51, 161, 28, 243, 78, 71, 47, 75, 254, 126, 24, }, { 190, 141, 16, 41, 228, 124, 185, 7, 76, 242, 97, 123, 98, 222, 254, 6, }, { 191, 217, 32, 82, 11, 248, 177, 14, 152, 39, 194, 246, 196, 127, 63, 12, }, { 192, 108, 231, 28, 106, 43, 207, 15, 193, 1, 148, 36, 210, 215, 218, 140, }, { 193, 56, 215, 103, 133, 175, 199, 6, 21, 212, 55, 169, 116, 118, 27, 134, }, { 194, 196, 135, 234, 119, 224, 223, 29, 170, 104, 17, 253, 93, 86, 155, 152, }, { 195, 144, 183, 145, 152, 100, 215, 20, 126, 189, 178, 112, 251, 247, 90, 146, }, { 196, 255, 39, 51, 80, 126, 239, 43, 23, 211, 93, 85, 15, 22, 88, 164, }, { 197, 171, 23, 72, 191, 250, 231, 34, 195, 6, 254, 216, 169, 183, 153, 174, }, { 198, 87, 71, 197, 77, 181, 255, 57, 124, 186, 216, 140, 128, 151, 25, 176, }, { 199, 3, 119, 190, 162, 49, 247, 48, 168, 111, 123, 1, 38, 54, 216, 186, }, { 200, 137, 164, 66, 30, 129, 143, 71, 174, 102, 197, 198, 171, 150, 29, 220, }, { 201, 221, 148, 57, 241, 5, 135, 78, 122, 179, 102, 75, 13, 55, 220, 214, }, { 202, 33, 196, 180, 3, 74, 159, 85, 197, 15, 64, 31, 36, 23, 92, 200, }, { 203, 117, 244, 207, 236, 206, 151, 92, 17, 218, 227, 146, 130, 182, 157, 194, }, { 204, 26, 100, 109, 36, 212, 175, 99, 120, 180, 12, 183, 118, 87, 159, 244, }, { 205, 78, 84, 22, 203, 80, 167, 106, 172, 97, 175, 58, 208, 246, 94, 254, }, { 206, 178, 4, 155, 57, 31, 191, 113, 19, 221, 137, 110, 249, 214, 222, 224, }, { 207, 230, 52, 224, 214, 155, 183, 120, 199, 8, 42, 227, 95, 119, 31, 234, }, { 208, 101, 97, 160, 130, 188, 79, 159, 31, 207, 54, 35, 32, 85, 151, 44, }, { 209, 49, 81, 219, 109, 56, 71, 150, 203, 26, 149, 174, 134, 244, 86, 38, }, { 210, 205, 1, 86, 159, 119, 95, 141, 116, 166, 179, 250, 175, 212, 214, 56, }, { 211, 153, 49, 45, 112, 243, 87, 132, 160, 115, 16, 119, 9, 117, 23, 50, }, { 212, 246, 161, 143, 184, 233, 111, 187, 201, 29, 255, 82, 253, 148, 21, 4, }, { 213, 162, 145, 244, 87, 109, 103, 178, 29, 200, 92, 223, 91, 53, 212, 14, }, { 214, 94, 193, 121, 165, 34, 127, 169, 162, 116, 122, 139, 114, 21, 84, 16, }, { 215, 10, 241, 2, 74, 166, 119, 160, 118, 161, 217, 6, 212, 180, 149, 26, }, { 216, 128, 34, 254, 246, 22, 15, 215, 112, 168, 103, 193, 89, 20, 80, 124, }, { 217, 212, 18, 133, 25, 146, 7, 222, 164, 125, 196, 76, 255, 181, 145, 118, }, { 218, 40, 66, 8, 235, 221, 31, 197, 27, 193, 226, 24, 214, 149, 17, 104, }, { 219, 124, 114, 115, 4, 89, 23, 204, 207, 20, 65, 149, 112, 52, 208, 98, }, { 220, 19, 226, 209, 204, 67, 47, 243, 166, 122, 174, 176, 132, 213, 210, 84, }, { 221, 71, 210, 170, 35, 199, 39, 250, 114, 175, 13, 61, 34, 116, 19, 94, }, { 222, 187, 130, 39, 209, 136, 63, 225, 205, 19, 43, 105, 11, 84, 147, 64, }, { 223, 239, 178, 92, 62, 12, 55, 232, 25, 198, 136, 228, 173, 245, 82, 74, }, { 224, 126, 40, 167, 121, 198, 12, 236, 190, 94, 19, 42, 245, 16, 64, 15, }, { 225, 42, 24, 220, 150, 66, 4, 229, 106, 139, 176, 167, 83, 177, 129, 5, }, { 226, 214, 72, 81, 100, 13, 28, 254, 213, 55, 150, 243, 122, 145, 1, 27, }, { 227, 130, 120, 42, 139, 137, 20, 247, 1, 226, 53, 126, 220, 48, 192, 17, }, { 228, 237, 232, 136, 67, 147, 44, 200, 104, 140, 218, 91, 40, 209, 194, 39, }, { 229, 185, 216, 243, 172, 23, 36, 193, 188, 89, 121, 214, 142, 112, 3, 45, }, { 230, 69, 136, 126, 94, 88, 60, 218, 3, 229, 95, 130, 167, 80, 131, 51, }, { 231, 17, 184, 5, 177, 220, 52, 211, 215, 48, 252, 15, 1, 241, 66, 57, }, { 232, 155, 107, 249, 13, 108, 76, 164, 209, 57, 66, 200, 140, 81, 135, 95, }, { 233, 207, 91, 130, 226, 232, 68, 173, 5, 236, 225, 69, 42, 240, 70, 85, }, { 234, 51, 11, 15, 16, 167, 92, 182, 186, 80, 199, 17, 3, 208, 198, 75, }, { 235, 103, 59, 116, 255, 35, 84, 191, 110, 133, 100, 156, 165, 113, 7, 65, }, { 236, 8, 171, 214, 55, 57, 108, 128, 7, 235, 139, 185, 81, 144, 5, 119, }, { 237, 92, 155, 173, 216, 189, 100, 137, 211, 62, 40, 52, 247, 49, 196, 125, }, { 238, 160, 203, 32, 42, 242, 124, 146, 108, 130, 14, 96, 222, 17, 68, 99, }, { 239, 244, 251, 91, 197, 118, 116, 155, 184, 87, 173, 237, 120, 176, 133, 105, }, { 240, 119, 174, 27, 145, 81, 140, 124, 96, 144, 177, 45, 7, 146, 13, 175, }, { 241, 35, 158, 96, 126, 213, 132, 117, 180, 69, 18, 160, 161, 51, 204, 165, }, { 242, 223, 206, 237, 140, 154, 156, 110, 11, 249, 52, 244, 136, 19, 76, 187, }, { 243, 139, 254, 150, 99, 30, 148, 103, 223, 44, 151, 121, 46, 178, 141, 177, }, { 244, 228, 110, 52, 171, 4, 172, 88, 182, 66, 120, 92, 218, 83, 143, 135, }, { 245, 176, 94, 79, 68, 128, 164, 81, 98, 151, 219, 209, 124, 242, 78, 141, }, { 246, 76, 14, 194, 182, 207, 188, 74, 221, 43, 253, 133, 85, 210, 206, 147, }, { 247, 24, 62, 185, 89, 75, 180, 67, 9, 254, 94, 8, 243, 115, 15, 153, }, { 248, 146, 237, 69, 229, 251, 204, 52, 15, 247, 224, 207, 126, 211, 202, 255, }, { 249, 198, 221, 62, 10, 127, 196, 61, 219, 34, 67, 66, 216, 114, 11, 245, }, { 250, 58, 141, 179, 248, 48, 220, 38, 100, 158, 101, 22, 241, 82, 139, 235, }, { 251, 110, 189, 200, 23, 180, 212, 47, 176, 75, 198, 155, 87, 243, 74, 225, }, { 252, 1, 45, 106, 223, 174, 236, 16, 217, 37, 41, 190, 163, 18, 72, 215, }, { 253, 85, 29, 17, 48, 42, 228, 25, 13, 240, 138, 51, 5, 179, 137, 221, }, { 254, 169, 77, 156, 194, 101, 252, 2, 178, 76, 172, 103, 44, 147, 9, 195, }, { 255, 253, 125, 231, 45, 225, 244, 11, 102, 153, 15, 234, 138, 50, 200, 201, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 251, 222, 224, 175, 16, 201, 246, 73, 190, 231, 110, 164, 106, 43, 156, 243, }, { 53, 127, 3, 157, 32, 81, 47, 146, 191, 13, 220, 139, 212, 86, 251, 37, }, { 206, 161, 227, 50, 48, 152, 217, 219, 1, 234, 178, 47, 190, 125, 103, 214, }, { 106, 254, 6, 249, 64, 162, 94, 231, 189, 26, 123, 213, 107, 172, 53, 74, }, { 145, 32, 230, 86, 80, 107, 168, 174, 3, 253, 21, 113, 1, 135, 169, 185, }, { 95, 129, 5, 100, 96, 243, 113, 117, 2, 23, 167, 94, 191, 250, 206, 111, }, { 164, 95, 229, 203, 112, 58, 135, 60, 188, 240, 201, 250, 213, 209, 82, 156, }, { 212, 63, 12, 49, 128, 135, 188, 13, 185, 52, 246, 105, 214, 155, 106, 148, }, { 47, 225, 236, 158, 144, 78, 74, 68, 7, 211, 152, 205, 188, 176, 246, 103, }, { 225, 64, 15, 172, 160, 214, 147, 159, 6, 57, 42, 226, 2, 205, 145, 177, }, { 26, 158, 239, 3, 176, 31, 101, 214, 184, 222, 68, 70, 104, 230, 13, 66, }, { 190, 193, 10, 200, 192, 37, 226, 234, 4, 46, 141, 188, 189, 55, 95, 222, }, { 69, 31, 234, 103, 208, 236, 20, 163, 186, 201, 227, 24, 215, 28, 195, 45, }, { 139, 190, 9, 85, 224, 116, 205, 120, 187, 35, 81, 55, 105, 97, 164, 251, }, { 112, 96, 233, 250, 240, 189, 59, 49, 5, 196, 63, 147, 3, 74, 56, 8, }, { 107, 126, 24, 98, 195, 205, 187, 26, 177, 104, 47, 210, 111, 245, 212, 235, }, { 144, 160, 248, 205, 211, 4, 77, 83, 15, 143, 65, 118, 5, 222, 72, 24, }, { 94, 1, 27, 255, 227, 156, 148, 136, 14, 101, 243, 89, 187, 163, 47, 206, }, { 165, 223, 251, 80, 243, 85, 98, 193, 176, 130, 157, 253, 209, 136, 179, 61, }, { 1, 128, 30, 155, 131, 111, 229, 253, 12, 114, 84, 7, 4, 89, 225, 161, }, { 250, 94, 254, 52, 147, 166, 19, 180, 178, 149, 58, 163, 110, 114, 125, 82, }, { 52, 255, 29, 6, 163, 62, 202, 111, 179, 127, 136, 140, 208, 15, 26, 132, }, { 207, 33, 253, 169, 179, 247, 60, 38, 13, 152, 230, 40, 186, 36, 134, 119, }, { 191, 65, 20, 83, 67, 74, 7, 23, 8, 92, 217, 187, 185, 110, 190, 127, }, { 68, 159, 244, 252, 83, 131, 241, 94, 182, 187, 183, 31, 211, 69, 34, 140, }, { 138, 62, 23, 206, 99, 27, 40, 133, 183, 81, 5, 48, 109, 56, 69, 90, }, { 113, 224, 247, 97, 115, 210, 222, 204, 9, 182, 107, 148, 7, 19, 217, 169, }, { 213, 191, 18, 170, 3, 232, 89, 240, 181, 70, 162, 110, 210, 194, 139, 53, }, { 46, 97, 242, 5, 19, 33, 175, 185, 11, 161, 204, 202, 184, 233, 23, 198, }, { 224, 192, 17, 55, 35, 185, 118, 98, 10, 75, 126, 229, 6, 148, 112, 16, }, { 27, 30, 241, 152, 51, 112, 128, 43, 180, 172, 16, 65, 108, 191, 236, 227, }, { 214, 252, 48, 196, 69, 89, 181, 52, 161, 208, 94, 103, 222, 41, 107, 21, }, { 45, 34, 208, 107, 85, 144, 67, 125, 31, 55, 48, 195, 180, 2, 247, 230, }, { 227, 131, 51, 89, 101, 8, 154, 166, 30, 221, 130, 236, 10, 127, 144, 48, }, { 24, 93, 211, 246, 117, 193, 108, 239, 160, 58, 236, 72, 96, 84, 12, 195, }, { 188, 2, 54, 61, 5, 251, 235, 211, 28, 202, 37, 178, 181, 133, 94, 95, }, { 71, 220, 214, 146, 21, 50, 29, 154, 162, 45, 75, 22, 223, 174, 194, 172, }, { 137, 125, 53, 160, 37, 170, 196, 65, 163, 199, 249, 57, 97, 211, 165, 122, }, { 114, 163, 213, 15, 53, 99, 50, 8, 29, 32, 151, 157, 11, 248, 57, 137, }, { 2, 195, 60, 245, 197, 222, 9, 57, 24, 228, 168, 14, 8, 178, 1, 129, }, { 249, 29, 220, 90, 213, 23, 255, 112, 166, 3, 198, 170, 98, 153, 157, 114, }, { 55, 188, 63, 104, 229, 143, 38, 171, 167, 233, 116, 133, 220, 228, 250, 164, }, { 204, 98, 223, 199, 245, 70, 208, 226, 25, 14, 26, 33, 182, 207, 102, 87, }, { 104, 61, 58, 12, 133, 124, 87, 222, 165, 254, 211, 219, 99, 30, 52, 203, }, { 147, 227, 218, 163, 149, 181, 161, 151, 27, 25, 189, 127, 9, 53, 168, 56, }, { 93, 66, 57, 145, 165, 45, 120, 76, 26, 243, 15, 80, 183, 72, 207, 238, }, { 166, 156, 217, 62, 181, 228, 142, 5, 164, 20, 97, 244, 221, 99, 83, 29, }, { 189, 130, 40, 166, 134, 148, 14, 46, 16, 184, 113, 181, 177, 220, 191, 254, }, { 70, 92, 200, 9, 150, 93, 248, 103, 174, 95, 31, 17, 219, 247, 35, 13, }, { 136, 253, 43, 59, 166, 197, 33, 188, 175, 181, 173, 62, 101, 138, 68, 219, }, { 115, 35, 203, 148, 182, 12, 215, 245, 17, 82, 195, 154, 15, 161, 216, 40, }, { 215, 124, 46, 95, 198, 54, 80, 201, 173, 162, 10, 96, 218, 112, 138, 180, }, { 44, 162, 206, 240, 214, 255, 166, 128, 19, 69, 100, 196, 176, 91, 22, 71, }, { 226, 3, 45, 194, 230, 103, 127, 91, 18, 175, 214, 235, 14, 38, 113, 145, }, { 25, 221, 205, 109, 246, 174, 137, 18, 172, 72, 184, 79, 100, 13, 237, 98, }, { 105, 189, 36, 151, 6, 19, 178, 35, 169, 140, 135, 220, 103, 71, 213, 106, }, { 146, 99, 196, 56, 22, 218, 68, 106, 23, 107, 233, 120, 13, 108, 73, 153, }, { 92, 194, 39, 10, 38, 66, 157, 177, 22, 129, 91, 87, 179, 17, 46, 79, }, { 167, 28, 199, 165, 54, 139, 107, 248, 168, 102, 53, 243, 217, 58, 178, 188, }, { 3, 67, 34, 110, 70, 177, 236, 196, 20, 150, 252, 9, 12, 235, 224, 32, }, { 248, 157, 194, 193, 86, 120, 26, 141, 170, 113, 146, 173, 102, 192, 124, 211, }, { 54, 60, 33, 243, 102, 224, 195, 86, 171, 155, 32, 130, 216, 189, 27, 5, }, { 205, 226, 193, 92, 118, 41, 53, 31, 21, 124, 78, 38, 178, 150, 135, 246, }, { 111, 59, 96, 75, 138, 178, 169, 104, 129, 99, 188, 206, 127, 82, 214, 42, }, { 148, 229, 128, 228, 154, 123, 95, 33, 63, 132, 210, 106, 21, 121, 74, 217, }, { 90, 68, 99, 214, 170, 227, 134, 250, 62, 110, 96, 69, 171, 4, 45, 15, }, { 161, 154, 131, 121, 186, 42, 112, 179, 128, 137, 14, 225, 193, 47, 177, 252, }, { 5, 197, 102, 178, 202, 16, 247, 143, 60, 121, 199, 27, 20, 254, 227, 96, }, { 254, 27, 134, 29, 218, 217, 1, 198, 130, 158, 169, 191, 126, 213, 127, 147, }, { 48, 186, 101, 47, 234, 65, 216, 29, 131, 116, 27, 144, 192, 168, 24, 69, }, { 203, 100, 133, 128, 250, 136, 46, 84, 61, 147, 117, 52, 170, 131, 132, 182, }, { 187, 4, 108, 122, 10, 53, 21, 101, 56, 87, 74, 167, 169, 201, 188, 190, }, { 64, 218, 140, 213, 26, 252, 227, 44, 134, 176, 36, 3, 195, 226, 32, 77, }, { 142, 123, 111, 231, 42, 100, 58, 247, 135, 90, 150, 44, 125, 159, 71, 155, }, { 117, 165, 143, 72, 58, 173, 204, 190, 57, 189, 248, 136, 23, 180, 219, 104, }, { 209, 250, 106, 131, 74, 151, 75, 130, 133, 77, 49, 114, 194, 101, 137, 244, }, { 42, 36, 138, 44, 90, 94, 189, 203, 59, 170, 95, 214, 168, 78, 21, 7, }, { 228, 133, 105, 30, 106, 198, 100, 16, 58, 64, 237, 249, 22, 51, 114, 209, }, { 31, 91, 137, 177, 122, 15, 146, 89, 132, 167, 131, 93, 124, 24, 238, 34, }, { 4, 69, 120, 41, 73, 127, 18, 114, 48, 11, 147, 28, 16, 167, 2, 193, }, { 255, 155, 152, 134, 89, 182, 228, 59, 142, 236, 253, 184, 122, 140, 158, 50, }, { 49, 58, 123, 180, 105, 46, 61, 224, 143, 6, 79, 151, 196, 241, 249, 228, }, { 202, 228, 155, 27, 121, 231, 203, 169, 49, 225, 33, 51, 174, 218, 101, 23, }, { 110, 187, 126, 208, 9, 221, 76, 149, 141, 17, 232, 201, 123, 11, 55, 139, }, { 149, 101, 158, 127, 25, 20, 186, 220, 51, 246, 134, 109, 17, 32, 171, 120, }, { 91, 196, 125, 77, 41, 140, 99, 7, 50, 28, 52, 66, 175, 93, 204, 174, }, { 160, 26, 157, 226, 57, 69, 149, 78, 140, 251, 90, 230, 197, 118, 80, 93, }, { 208, 122, 116, 24, 201, 248, 174, 127, 137, 63, 101, 117, 198, 60, 104, 85, }, { 43, 164, 148, 183, 217, 49, 88, 54, 55, 216, 11, 209, 172, 23, 244, 166, }, { 229, 5, 119, 133, 233, 169, 129, 237, 54, 50, 185, 254, 18, 106, 147, 112, }, { 30, 219, 151, 42, 249, 96, 119, 164, 136, 213, 215, 90, 120, 65, 15, 131, }, { 186, 132, 114, 225, 137, 90, 240, 152, 52, 37, 30, 160, 173, 144, 93, 31, }, { 65, 90, 146, 78, 153, 147, 6, 209, 138, 194, 112, 4, 199, 187, 193, 236, }, { 143, 251, 113, 124, 169, 11, 223, 10, 139, 40, 194, 43, 121, 198, 166, 58, }, { 116, 37, 145, 211, 185, 194, 41, 67, 53, 207, 172, 143, 19, 237, 58, 201, }, { 185, 199, 80, 143, 207, 235, 28, 92, 32, 179, 226, 169, 161, 123, 189, 63, }, { 66, 25, 176, 32, 223, 34, 234, 21, 158, 84, 140, 13, 203, 80, 33, 204, }, { 140, 184, 83, 18, 239, 186, 51, 206, 159, 190, 62, 34, 117, 45, 70, 26, }, { 119, 102, 179, 189, 255, 115, 197, 135, 33, 89, 80, 134, 31, 6, 218, 233, }, { 211, 57, 86, 118, 143, 73, 66, 187, 157, 169, 153, 124, 202, 215, 136, 117, }, { 40, 231, 182, 217, 159, 128, 180, 242, 35, 78, 247, 216, 160, 252, 20, 134, }, { 230, 70, 85, 235, 175, 24, 109, 41, 34, 164, 69, 247, 30, 129, 115, 80, }, { 29, 152, 181, 68, 191, 209, 155, 96, 156, 67, 43, 83, 116, 170, 239, 163, }, { 109, 248, 92, 190, 79, 108, 160, 81, 153, 135, 20, 192, 119, 224, 215, 171, }, { 150, 38, 188, 17, 95, 165, 86, 24, 39, 96, 122, 100, 29, 203, 75, 88, }, { 88, 135, 95, 35, 111, 61, 143, 195, 38, 138, 200, 75, 163, 182, 44, 142, }, { 163, 89, 191, 140, 127, 244, 121, 138, 152, 109, 166, 239, 201, 157, 176, 125, }, { 7, 6, 90, 71, 15, 206, 254, 182, 36, 157, 111, 21, 28, 76, 226, 225, }, { 252, 216, 186, 232, 31, 7, 8, 255, 154, 122, 1, 177, 118, 103, 126, 18, }, { 50, 121, 89, 218, 47, 159, 209, 36, 155, 144, 179, 158, 200, 26, 25, 196, }, { 201, 167, 185, 117, 63, 86, 39, 109, 37, 119, 221, 58, 162, 49, 133, 55, }, { 210, 185, 72, 237, 12, 38, 167, 70, 145, 219, 205, 123, 206, 142, 105, 212, }, { 41, 103, 168, 66, 28, 239, 81, 15, 47, 60, 163, 223, 164, 165, 245, 39, }, { 231, 198, 75, 112, 44, 119, 136, 212, 46, 214, 17, 240, 26, 216, 146, 241, }, { 28, 24, 171, 223, 60, 190, 126, 157, 144, 49, 127, 84, 112, 243, 14, 2, }, { 184, 71, 78, 20, 76, 132, 249, 161, 44, 193, 182, 174, 165, 34, 92, 158, }, { 67, 153, 174, 187, 92, 77, 15, 232, 146, 38, 216, 10, 207, 9, 192, 109, }, { 141, 56, 77, 137, 108, 213, 214, 51, 147, 204, 106, 37, 113, 116, 167, 187, }, { 118, 230, 173, 38, 124, 28, 32, 122, 45, 43, 4, 129, 27, 95, 59, 72, }, { 6, 134, 68, 220, 140, 161, 27, 75, 40, 239, 59, 18, 24, 21, 3, 64, }, { 253, 88, 164, 115, 156, 104, 237, 2, 150, 8, 85, 182, 114, 62, 159, 179, }, { 51, 249, 71, 65, 172, 240, 52, 217, 151, 226, 231, 153, 204, 67, 248, 101, }, { 200, 39, 167, 238, 188, 57, 194, 144, 41, 5, 137, 61, 166, 104, 100, 150, }, { 108, 120, 66, 37, 204, 3, 69, 172, 149, 245, 64, 199, 115, 185, 54, 10, }, { 151, 166, 162, 138, 220, 202, 179, 229, 43, 18, 46, 99, 25, 146, 170, 249, }, { 89, 7, 65, 184, 236, 82, 106, 62, 42, 248, 156, 76, 167, 239, 205, 47, }, { 162, 217, 161, 23, 252, 155, 156, 119, 148, 31, 242, 232, 205, 196, 81, 220, }, { 222, 118, 192, 150, 215, 167, 145, 208, 193, 198, 187, 95, 254, 164, 111, 84, }, { 37, 168, 32, 57, 199, 110, 103, 153, 127, 33, 213, 251, 148, 143, 243, 167, }, { 235, 9, 195, 11, 247, 246, 190, 66, 126, 203, 103, 212, 42, 242, 148, 113, }, { 16, 215, 35, 164, 231, 63, 72, 11, 192, 44, 9, 112, 64, 217, 8, 130, }, { 180, 136, 198, 111, 151, 5, 207, 55, 124, 220, 192, 138, 149, 8, 90, 30, }, { 79, 86, 38, 192, 135, 204, 57, 126, 194, 59, 174, 46, 255, 35, 198, 237, }, { 129, 247, 197, 242, 183, 84, 224, 165, 195, 209, 28, 1, 65, 94, 161, 59, }, { 122, 41, 37, 93, 167, 157, 22, 236, 125, 54, 114, 165, 43, 117, 61, 200, }, { 10, 73, 204, 167, 87, 32, 45, 221, 120, 242, 77, 54, 40, 63, 5, 192, }, { 241, 151, 44, 8, 71, 233, 219, 148, 198, 21, 35, 146, 66, 20, 153, 51, }, { 63, 54, 207, 58, 119, 113, 2, 79, 199, 255, 145, 189, 252, 105, 254, 229, }, { 196, 232, 47, 149, 103, 184, 244, 6, 121, 24, 255, 25, 150, 66, 98, 22, }, { 96, 183, 202, 94, 23, 130, 115, 58, 197, 232, 54, 227, 67, 147, 48, 138, }, { 155, 105, 42, 241, 7, 75, 133, 115, 123, 15, 88, 71, 41, 184, 172, 121, }, { 85, 200, 201, 195, 55, 211, 92, 168, 122, 229, 234, 104, 151, 197, 203, 175, }, { 174, 22, 41, 108, 39, 26, 170, 225, 196, 2, 132, 204, 253, 238, 87, 92, }, { 181, 8, 216, 244, 20, 106, 42, 202, 112, 174, 148, 141, 145, 81, 187, 191, }, { 78, 214, 56, 91, 4, 163, 220, 131, 206, 73, 250, 41, 251, 122, 39, 76, }, { 128, 119, 219, 105, 52, 59, 5, 88, 207, 163, 72, 6, 69, 7, 64, 154, }, { 123, 169, 59, 198, 36, 242, 243, 17, 113, 68, 38, 162, 47, 44, 220, 105, }, { 223, 246, 222, 13, 84, 200, 116, 45, 205, 180, 239, 88, 250, 253, 142, 245, }, { 36, 40, 62, 162, 68, 1, 130, 100, 115, 83, 129, 252, 144, 214, 18, 6, }, { 234, 137, 221, 144, 116, 153, 91, 191, 114, 185, 51, 211, 46, 171, 117, 208, }, { 17, 87, 61, 63, 100, 80, 173, 246, 204, 94, 93, 119, 68, 128, 233, 35, }, { 97, 55, 212, 197, 148, 237, 150, 199, 201, 154, 98, 228, 71, 202, 209, 43, }, { 154, 233, 52, 106, 132, 36, 96, 142, 119, 125, 12, 64, 45, 225, 77, 216, }, { 84, 72, 215, 88, 180, 188, 185, 85, 118, 151, 190, 111, 147, 156, 42, 14, }, { 175, 150, 55, 247, 164, 117, 79, 28, 200, 112, 208, 203, 249, 183, 182, 253, }, { 11, 201, 210, 60, 212, 79, 200, 32, 116, 128, 25, 49, 44, 102, 228, 97, }, { 240, 23, 50, 147, 196, 134, 62, 105, 202, 103, 119, 149, 70, 77, 120, 146, }, { 62, 182, 209, 161, 244, 30, 231, 178, 203, 141, 197, 186, 248, 48, 31, 68, }, { 197, 104, 49, 14, 228, 215, 17, 251, 117, 106, 171, 30, 146, 27, 131, 183, }, { 8, 138, 240, 82, 146, 254, 36, 228, 96, 22, 229, 56, 32, 141, 4, 65, }, { 243, 84, 16, 253, 130, 55, 210, 173, 222, 241, 139, 156, 74, 166, 152, 178, }, { 61, 245, 243, 207, 178, 175, 11, 118, 223, 27, 57, 179, 244, 219, 255, 100, }, { 198, 43, 19, 96, 162, 102, 253, 63, 97, 252, 87, 23, 158, 240, 99, 151, }, { 98, 116, 246, 171, 210, 92, 122, 3, 221, 12, 158, 237, 75, 33, 49, 11, }, { 153, 170, 22, 4, 194, 149, 140, 74, 99, 235, 240, 73, 33, 10, 173, 248, }, { 87, 11, 245, 54, 242, 13, 85, 145, 98, 1, 66, 102, 159, 119, 202, 46, }, { 172, 213, 21, 153, 226, 196, 163, 216, 220, 230, 44, 194, 245, 92, 86, 221, }, { 220, 181, 252, 99, 18, 121, 152, 233, 217, 34, 19, 81, 246, 22, 110, 213, }, { 39, 107, 28, 204, 2, 176, 110, 160, 103, 197, 125, 245, 156, 61, 242, 38, }, { 233, 202, 255, 254, 50, 40, 183, 123, 102, 47, 207, 218, 34, 64, 149, 240, }, { 18, 20, 31, 81, 34, 225, 65, 50, 216, 200, 161, 126, 72, 107, 9, 3, }, { 182, 75, 250, 154, 82, 219, 198, 14, 100, 56, 104, 132, 157, 186, 91, 159, }, { 77, 149, 26, 53, 66, 18, 48, 71, 218, 223, 6, 32, 247, 145, 199, 108, }, { 131, 52, 249, 7, 114, 138, 233, 156, 219, 53, 180, 15, 73, 236, 160, 186, }, { 120, 234, 25, 168, 98, 67, 31, 213, 101, 210, 218, 171, 35, 199, 60, 73, }, { 99, 244, 232, 48, 81, 51, 159, 254, 209, 126, 202, 234, 79, 120, 208, 170, }, { 152, 42, 8, 159, 65, 250, 105, 183, 111, 153, 164, 78, 37, 83, 76, 89, }, { 86, 139, 235, 173, 113, 98, 176, 108, 110, 115, 22, 97, 155, 46, 43, 143, }, { 173, 85, 11, 2, 97, 171, 70, 37, 208, 148, 120, 197, 241, 5, 183, 124, }, { 9, 10, 238, 201, 17, 145, 193, 25, 108, 100, 177, 63, 36, 212, 229, 224, }, { 242, 212, 14, 102, 1, 88, 55, 80, 210, 131, 223, 155, 78, 255, 121, 19, }, { 60, 117, 237, 84, 49, 192, 238, 139, 211, 105, 109, 180, 240, 130, 30, 197, }, { 199, 171, 13, 251, 33, 9, 24, 194, 109, 142, 3, 16, 154, 169, 130, 54, }, { 183, 203, 228, 1, 209, 180, 35, 243, 104, 74, 60, 131, 153, 227, 186, 62, }, { 76, 21, 4, 174, 193, 125, 213, 186, 214, 173, 82, 39, 243, 200, 38, 205, }, { 130, 180, 231, 156, 241, 229, 12, 97, 215, 71, 224, 8, 77, 181, 65, 27, }, { 121, 106, 7, 51, 225, 44, 250, 40, 105, 160, 142, 172, 39, 158, 221, 232, }, { 221, 53, 226, 248, 145, 22, 125, 20, 213, 80, 71, 86, 242, 79, 143, 116, }, { 38, 235, 2, 87, 129, 223, 139, 93, 107, 183, 41, 242, 152, 100, 19, 135, }, { 232, 74, 225, 101, 177, 71, 82, 134, 106, 93, 155, 221, 38, 25, 116, 81, }, { 19, 148, 1, 202, 161, 142, 164, 207, 212, 186, 245, 121, 76, 50, 232, 162, }, { 177, 77, 160, 221, 93, 21, 56, 184, 64, 165, 7, 145, 129, 246, 185, 126, }, { 74, 147, 64, 114, 77, 220, 206, 241, 254, 66, 105, 53, 235, 221, 37, 141, }, { 132, 50, 163, 64, 125, 68, 23, 42, 255, 168, 219, 26, 85, 160, 66, 91, }, { 127, 236, 67, 239, 109, 141, 225, 99, 65, 79, 181, 190, 63, 139, 222, 168, }, { 219, 179, 166, 36, 29, 183, 102, 95, 253, 191, 124, 68, 234, 90, 140, 52, }, { 32, 109, 70, 139, 13, 126, 144, 22, 67, 88, 18, 224, 128, 113, 16, 199, }, { 238, 204, 165, 185, 61, 230, 73, 205, 66, 178, 160, 207, 62, 12, 119, 17, }, { 21, 18, 69, 22, 45, 47, 191, 132, 252, 85, 206, 107, 84, 39, 235, 226, }, { 101, 114, 172, 236, 221, 146, 132, 181, 249, 145, 241, 248, 87, 109, 211, 234, }, { 158, 172, 76, 67, 205, 91, 114, 252, 71, 118, 159, 92, 61, 70, 79, 25, }, { 80, 13, 175, 113, 253, 195, 171, 39, 70, 156, 45, 115, 131, 59, 40, 207, }, { 171, 211, 79, 222, 237, 10, 93, 110, 248, 123, 67, 215, 233, 16, 180, 60, }, { 15, 140, 170, 21, 157, 48, 218, 82, 68, 139, 138, 45, 60, 193, 230, 160, }, { 244, 82, 74, 186, 141, 249, 44, 27, 250, 108, 228, 137, 86, 234, 122, 83, }, { 58, 243, 169, 136, 189, 97, 245, 192, 251, 134, 86, 166, 232, 151, 29, 133, }, { 193, 45, 73, 39, 173, 168, 3, 137, 69, 97, 56, 2, 130, 188, 129, 118, }, { 218, 51, 184, 191, 158, 216, 131, 162, 241, 205, 40, 67, 238, 3, 109, 149, }, { 33, 237, 88, 16, 142, 17, 117, 235, 79, 42, 70, 231, 132, 40, 241, 102, }, { 239, 76, 187, 34, 190, 137, 172, 48, 78, 192, 244, 200, 58, 85, 150, 176, }, { 20, 146, 91, 141, 174, 64, 90, 121, 240, 39, 154, 108, 80, 126, 10, 67, }, { 176, 205, 190, 70, 222, 122, 221, 69, 76, 215, 83, 150, 133, 175, 88, 223, }, { 75, 19, 94, 233, 206, 179, 43, 12, 242, 48, 61, 50, 239, 132, 196, 44, }, { 133, 178, 189, 219, 254, 43, 242, 215, 243, 218, 143, 29, 81, 249, 163, 250, }, { 126, 108, 93, 116, 238, 226, 4, 158, 77, 61, 225, 185, 59, 210, 63, 9, }, { 14, 12, 180, 142, 30, 95, 63, 175, 72, 249, 222, 42, 56, 152, 7, 1, }, { 245, 210, 84, 33, 14, 150, 201, 230, 246, 30, 176, 142, 82, 179, 155, 242, }, { 59, 115, 183, 19, 62, 14, 16, 61, 247, 244, 2, 161, 236, 206, 252, 36, }, { 192, 173, 87, 188, 46, 199, 230, 116, 73, 19, 108, 5, 134, 229, 96, 215, }, { 100, 242, 178, 119, 94, 253, 97, 72, 245, 227, 165, 255, 83, 52, 50, 75, }, { 159, 44, 82, 216, 78, 52, 151, 1, 75, 4, 203, 91, 57, 31, 174, 184, }, { 81, 141, 177, 234, 126, 172, 78, 218, 74, 238, 121, 116, 135, 98, 201, 110, }, { 170, 83, 81, 69, 110, 101, 184, 147, 244, 9, 23, 208, 237, 73, 85, 157, }, { 103, 177, 144, 25, 24, 76, 141, 140, 225, 117, 89, 246, 95, 223, 210, 107, }, { 156, 111, 112, 182, 8, 133, 123, 197, 95, 146, 55, 82, 53, 244, 78, 152, }, { 82, 206, 147, 132, 56, 29, 162, 30, 94, 120, 133, 125, 139, 137, 41, 78, }, { 169, 16, 115, 43, 40, 212, 84, 87, 224, 159, 235, 217, 225, 162, 181, 189, }, { 13, 79, 150, 224, 88, 238, 211, 107, 92, 111, 34, 35, 52, 115, 231, 33, }, { 246, 145, 118, 79, 72, 39, 37, 34, 226, 136, 76, 135, 94, 88, 123, 210, }, { 56, 48, 149, 125, 120, 191, 252, 249, 227, 98, 254, 168, 224, 37, 28, 4, }, { 195, 238, 117, 210, 104, 118, 10, 176, 93, 133, 144, 12, 138, 14, 128, 247, }, { 179, 142, 156, 40, 152, 203, 49, 129, 88, 65, 175, 159, 137, 68, 184, 255, }, { 72, 80, 124, 135, 136, 2, 199, 200, 230, 166, 193, 59, 227, 111, 36, 12, }, { 134, 241, 159, 181, 184, 154, 30, 19, 231, 76, 115, 20, 93, 18, 67, 218, }, { 125, 47, 127, 26, 168, 83, 232, 90, 89, 171, 29, 176, 55, 57, 223, 41, }, { 217, 112, 154, 209, 216, 105, 111, 102, 229, 91, 212, 74, 226, 232, 141, 181, }, { 34, 174, 122, 126, 200, 160, 153, 47, 91, 188, 186, 238, 136, 195, 17, 70, }, { 236, 15, 153, 76, 248, 56, 64, 244, 90, 86, 8, 193, 54, 190, 118, 144, }, { 23, 209, 121, 227, 232, 241, 182, 189, 228, 177, 102, 101, 92, 149, 234, 99, }, { 12, 207, 136, 123, 219, 129, 54, 150, 80, 29, 118, 36, 48, 42, 6, 128, }, { 247, 17, 104, 212, 203, 72, 192, 223, 238, 250, 24, 128, 90, 1, 154, 115, }, { 57, 176, 139, 230, 251, 208, 25, 4, 239, 16, 170, 175, 228, 124, 253, 165, }, { 194, 110, 107, 73, 235, 25, 239, 77, 81, 247, 196, 11, 142, 87, 97, 86, }, { 102, 49, 142, 130, 155, 35, 104, 113, 237, 7, 13, 241, 91, 134, 51, 202, }, { 157, 239, 110, 45, 139, 234, 158, 56, 83, 224, 99, 85, 49, 173, 175, 57, }, { 83, 78, 141, 31, 187, 114, 71, 227, 82, 10, 209, 122, 143, 208, 200, 239, }, { 168, 144, 109, 176, 171, 187, 177, 170, 236, 237, 191, 222, 229, 251, 84, 28, }, { 216, 240, 132, 74, 91, 6, 138, 155, 233, 41, 128, 77, 230, 177, 108, 20, }, { 35, 46, 100, 229, 75, 207, 124, 210, 87, 206, 238, 233, 140, 154, 240, 231, }, { 237, 143, 135, 215, 123, 87, 165, 9, 86, 36, 92, 198, 50, 231, 151, 49, }, { 22, 81, 103, 120, 107, 158, 83, 64, 232, 195, 50, 98, 88, 204, 11, 194, }, { 178, 14, 130, 179, 27, 164, 212, 124, 84, 51, 251, 152, 141, 29, 89, 94, }, { 73, 208, 98, 28, 11, 109, 34, 53, 234, 212, 149, 60, 231, 54, 197, 173, }, { 135, 113, 129, 46, 59, 245, 251, 238, 235, 62, 39, 19, 89, 75, 162, 123, }, { 124, 175, 97, 129, 43, 60, 13, 167, 85, 217, 73, 183, 51, 96, 62, 136, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 1, 111, 90, 61, 191, 173, 238, 171, 241, 196, 175, 2, 214, 28, 137, 242, }, { 2, 222, 180, 122, 189, 153, 31, 149, 33, 75, 157, 4, 111, 56, 209, 39, }, { 3, 177, 238, 71, 2, 52, 241, 62, 208, 143, 50, 6, 185, 36, 88, 213, }, { 4, 127, 171, 244, 185, 241, 62, 233, 66, 150, 249, 8, 222, 112, 97, 78, }, { 5, 16, 241, 201, 6, 92, 208, 66, 179, 82, 86, 10, 8, 108, 232, 188, }, { 6, 161, 31, 142, 4, 104, 33, 124, 99, 221, 100, 12, 177, 72, 176, 105, }, { 7, 206, 69, 179, 187, 197, 207, 215, 146, 25, 203, 14, 103, 84, 57, 155, }, { 8, 254, 149, 43, 177, 33, 124, 17, 132, 239, 49, 16, 127, 224, 194, 156, }, { 9, 145, 207, 22, 14, 140, 146, 186, 117, 43, 158, 18, 169, 252, 75, 110, }, { 10, 32, 33, 81, 12, 184, 99, 132, 165, 164, 172, 20, 16, 216, 19, 187, }, { 11, 79, 123, 108, 179, 21, 141, 47, 84, 96, 3, 22, 198, 196, 154, 73, }, { 12, 129, 62, 223, 8, 208, 66, 248, 198, 121, 200, 24, 161, 144, 163, 210, }, { 13, 238, 100, 226, 183, 125, 172, 83, 55, 189, 103, 26, 119, 140, 42, 32, }, { 14, 95, 138, 165, 181, 73, 93, 109, 231, 50, 85, 28, 206, 168, 114, 245, }, { 15, 48, 208, 152, 10, 228, 179, 198, 22, 246, 250, 30, 24, 180, 251, 7, }, { 16, 63, 233, 86, 161, 66, 248, 34, 203, 29, 98, 32, 254, 3, 71, 251, }, { 17, 80, 179, 107, 30, 239, 22, 137, 58, 217, 205, 34, 40, 31, 206, 9, }, { 18, 225, 93, 44, 28, 219, 231, 183, 234, 86, 255, 36, 145, 59, 150, 220, }, { 19, 142, 7, 17, 163, 118, 9, 28, 27, 146, 80, 38, 71, 39, 31, 46, }, { 20, 64, 66, 162, 24, 179, 198, 203, 137, 139, 155, 40, 32, 115, 38, 181, }, { 21, 47, 24, 159, 167, 30, 40, 96, 120, 79, 52, 42, 246, 111, 175, 71, }, { 22, 158, 246, 216, 165, 42, 217, 94, 168, 192, 6, 44, 79, 75, 247, 146, }, { 23, 241, 172, 229, 26, 135, 55, 245, 89, 4, 169, 46, 153, 87, 126, 96, }, { 24, 193, 124, 125, 16, 99, 132, 51, 79, 242, 83, 48, 129, 227, 133, 103, }, { 25, 174, 38, 64, 175, 206, 106, 152, 190, 54, 252, 50, 87, 255, 12, 149, }, { 26, 31, 200, 7, 173, 250, 155, 166, 110, 185, 206, 52, 238, 219, 84, 64, }, { 27, 112, 146, 58, 18, 87, 117, 13, 159, 125, 97, 54, 56, 199, 221, 178, }, { 28, 190, 215, 137, 169, 146, 186, 218, 13, 100, 170, 56, 95, 147, 228, 41, }, { 29, 209, 141, 180, 22, 63, 84, 113, 252, 160, 5, 58, 137, 143, 109, 219, }, { 30, 96, 99, 243, 20, 11, 165, 79, 44, 47, 55, 60, 48, 171, 53, 14, }, { 31, 15, 57, 206, 171, 166, 75, 228, 221, 235, 152, 62, 230, 183, 188, 252, }, { 32, 126, 17, 172, 129, 132, 51, 68, 85, 58, 196, 64, 63, 6, 142, 53, }, { 33, 17, 75, 145, 62, 41, 221, 239, 164, 254, 107, 66, 233, 26, 7, 199, }, { 34, 160, 165, 214, 60, 29, 44, 209, 116, 113, 89, 68, 80, 62, 95, 18, }, { 35, 207, 255, 235, 131, 176, 194, 122, 133, 181, 246, 70, 134, 34, 214, 224, }, { 36, 1, 186, 88, 56, 117, 13, 173, 23, 172, 61, 72, 225, 118, 239, 123, }, { 37, 110, 224, 101, 135, 216, 227, 6, 230, 104, 146, 74, 55, 106, 102, 137, }, { 38, 223, 14, 34, 133, 236, 18, 56, 54, 231, 160, 76, 142, 78, 62, 92, }, { 39, 176, 84, 31, 58, 65, 252, 147, 199, 35, 15, 78, 88, 82, 183, 174, }, { 40, 128, 132, 135, 48, 165, 79, 85, 209, 213, 245, 80, 64, 230, 76, 169, }, { 41, 239, 222, 186, 143, 8, 161, 254, 32, 17, 90, 82, 150, 250, 197, 91, }, { 42, 94, 48, 253, 141, 60, 80, 192, 240, 158, 104, 84, 47, 222, 157, 142, }, { 43, 49, 106, 192, 50, 145, 190, 107, 1, 90, 199, 86, 249, 194, 20, 124, }, { 44, 255, 47, 115, 137, 84, 113, 188, 147, 67, 12, 88, 158, 150, 45, 231, }, { 45, 144, 117, 78, 54, 249, 159, 23, 98, 135, 163, 90, 72, 138, 164, 21, }, { 46, 33, 155, 9, 52, 205, 110, 41, 178, 8, 145, 92, 241, 174, 252, 192, }, { 47, 78, 193, 52, 139, 96, 128, 130, 67, 204, 62, 94, 39, 178, 117, 50, }, { 48, 65, 248, 250, 32, 198, 203, 102, 158, 39, 166, 96, 193, 5, 201, 206, }, { 49, 46, 162, 199, 159, 107, 37, 205, 111, 227, 9, 98, 23, 25, 64, 60, }, { 50, 159, 76, 128, 157, 95, 212, 243, 191, 108, 59, 100, 174, 61, 24, 233, }, { 51, 240, 22, 189, 34, 242, 58, 88, 78, 168, 148, 102, 120, 33, 145, 27, }, { 52, 62, 83, 14, 153, 55, 245, 143, 220, 177, 95, 104, 31, 117, 168, 128, }, { 53, 81, 9, 51, 38, 154, 27, 36, 45, 117, 240, 106, 201, 105, 33, 114, }, { 54, 224, 231, 116, 36, 174, 234, 26, 253, 250, 194, 108, 112, 77, 121, 167, }, { 55, 143, 189, 73, 155, 3, 4, 177, 12, 62, 109, 110, 166, 81, 240, 85, }, { 56, 191, 109, 209, 145, 231, 183, 119, 26, 200, 151, 112, 190, 229, 11, 82, }, { 57, 208, 55, 236, 46, 74, 89, 220, 235, 12, 56, 114, 104, 249, 130, 160, }, { 58, 97, 217, 171, 44, 126, 168, 226, 59, 131, 10, 116, 209, 221, 218, 117, }, { 59, 14, 131, 150, 147, 211, 70, 73, 202, 71, 165, 118, 7, 193, 83, 135, }, { 60, 192, 198, 37, 40, 22, 137, 158, 88, 94, 110, 120, 96, 149, 106, 28, }, { 61, 175, 156, 24, 151, 187, 103, 53, 169, 154, 193, 122, 182, 137, 227, 238, }, { 62, 30, 114, 95, 149, 143, 150, 11, 121, 21, 243, 124, 15, 173, 187, 59, }, { 63, 113, 40, 98, 42, 34, 120, 160, 136, 209, 92, 126, 217, 177, 50, 201, }, { 64, 252, 34, 155, 193, 203, 102, 136, 170, 116, 75, 128, 126, 12, 223, 106, }, { 65, 147, 120, 166, 126, 102, 136, 35, 91, 176, 228, 130, 168, 16, 86, 152, }, { 66, 34, 150, 225, 124, 82, 121, 29, 139, 63, 214, 132, 17, 52, 14, 77, }, { 67, 77, 204, 220, 195, 255, 151, 182, 122, 251, 121, 134, 199, 40, 135, 191, }, { 68, 131, 137, 111, 120, 58, 88, 97, 232, 226, 178, 136, 160, 124, 190, 36, }, { 69, 236, 211, 82, 199, 151, 182, 202, 25, 38, 29, 138, 118, 96, 55, 214, }, { 70, 93, 61, 21, 197, 163, 71, 244, 201, 169, 47, 140, 207, 68, 111, 3, }, { 71, 50, 103, 40, 122, 14, 169, 95, 56, 109, 128, 142, 25, 88, 230, 241, }, { 72, 2, 183, 176, 112, 234, 26, 153, 46, 155, 122, 144, 1, 236, 29, 246, }, { 73, 109, 237, 141, 207, 71, 244, 50, 223, 95, 213, 146, 215, 240, 148, 4, }, { 74, 220, 3, 202, 205, 115, 5, 12, 15, 208, 231, 148, 110, 212, 204, 209, }, { 75, 179, 89, 247, 114, 222, 235, 167, 254, 20, 72, 150, 184, 200, 69, 35, }, { 76, 125, 28, 68, 201, 27, 36, 112, 108, 13, 131, 152, 223, 156, 124, 184, }, { 77, 18, 70, 121, 118, 182, 202, 219, 157, 201, 44, 154, 9, 128, 245, 74, }, { 78, 163, 168, 62, 116, 130, 59, 229, 77, 70, 30, 156, 176, 164, 173, 159, }, { 79, 204, 242, 3, 203, 47, 213, 78, 188, 130, 177, 158, 102, 184, 36, 109, }, { 80, 195, 203, 205, 96, 137, 158, 170, 97, 105, 41, 160, 128, 15, 152, 145, }, { 81, 172, 145, 240, 223, 36, 112, 1, 144, 173, 134, 162, 86, 19, 17, 99, }, { 82, 29, 127, 183, 221, 16, 129, 63, 64, 34, 180, 164, 239, 55, 73, 182, }, { 83, 114, 37, 138, 98, 189, 111, 148, 177, 230, 27, 166, 57, 43, 192, 68, }, { 84, 188, 96, 57, 217, 120, 160, 67, 35, 255, 208, 168, 94, 127, 249, 223, }, { 85, 211, 58, 4, 102, 213, 78, 232, 210, 59, 127, 170, 136, 99, 112, 45, }, { 86, 98, 212, 67, 100, 225, 191, 214, 2, 180, 77, 172, 49, 71, 40, 248, }, { 87, 13, 142, 126, 219, 76, 81, 125, 243, 112, 226, 174, 231, 91, 161, 10, }, { 88, 61, 94, 230, 209, 168, 226, 187, 229, 134, 24, 176, 255, 239, 90, 13, }, { 89, 82, 4, 219, 110, 5, 12, 16, 20, 66, 183, 178, 41, 243, 211, 255, }, { 90, 227, 234, 156, 108, 49, 253, 46, 196, 205, 133, 180, 144, 215, 139, 42, }, { 91, 140, 176, 161, 211, 156, 19, 133, 53, 9, 42, 182, 70, 203, 2, 216, }, { 92, 66, 245, 18, 104, 89, 220, 82, 167, 16, 225, 184, 33, 159, 59, 67, }, { 93, 45, 175, 47, 215, 244, 50, 249, 86, 212, 78, 186, 247, 131, 178, 177, }, { 94, 156, 65, 104, 213, 192, 195, 199, 134, 91, 124, 188, 78, 167, 234, 100, }, { 95, 243, 27, 85, 106, 109, 45, 108, 119, 159, 211, 190, 152, 187, 99, 150, }, { 96, 130, 51, 55, 64, 79, 85, 204, 255, 78, 143, 192, 65, 10, 81, 95, }, { 97, 237, 105, 10, 255, 226, 187, 103, 14, 138, 32, 194, 151, 22, 216, 173, }, { 98, 92, 135, 77, 253, 214, 74, 89, 222, 5, 18, 196, 46, 50, 128, 120, }, { 99, 51, 221, 112, 66, 123, 164, 242, 47, 193, 189, 198, 248, 46, 9, 138, }, { 100, 253, 152, 195, 249, 190, 107, 37, 189, 216, 118, 200, 159, 122, 48, 17, }, { 101, 146, 194, 254, 70, 19, 133, 142, 76, 28, 217, 202, 73, 102, 185, 227, }, { 102, 35, 44, 185, 68, 39, 116, 176, 156, 147, 235, 204, 240, 66, 225, 54, }, { 103, 76, 118, 132, 251, 138, 154, 27, 109, 87, 68, 206, 38, 94, 104, 196, }, { 104, 124, 166, 28, 241, 110, 41, 221, 123, 161, 190, 208, 62, 234, 147, 195, }, { 105, 19, 252, 33, 78, 195, 199, 118, 138, 101, 17, 210, 232, 246, 26, 49, }, { 106, 162, 18, 102, 76, 247, 54, 72, 90, 234, 35, 212, 81, 210, 66, 228, }, { 107, 205, 72, 91, 243, 90, 216, 227, 171, 46, 140, 214, 135, 206, 203, 22, }, { 108, 3, 13, 232, 72, 159, 23, 52, 57, 55, 71, 216, 224, 154, 242, 141, }, { 109, 108, 87, 213, 247, 50, 249, 159, 200, 243, 232, 218, 54, 134, 123, 127, }, { 110, 221, 185, 146, 245, 6, 8, 161, 24, 124, 218, 220, 143, 162, 35, 170, }, { 111, 178, 227, 175, 74, 171, 230, 10, 233, 184, 117, 222, 89, 190, 170, 88, }, { 112, 189, 218, 97, 225, 13, 173, 238, 52, 83, 237, 224, 191, 9, 22, 164, }, { 113, 210, 128, 92, 94, 160, 67, 69, 197, 151, 66, 226, 105, 21, 159, 86, }, { 114, 99, 110, 27, 92, 148, 178, 123, 21, 24, 112, 228, 208, 49, 199, 131, }, { 115, 12, 52, 38, 227, 57, 92, 208, 228, 220, 223, 230, 6, 45, 78, 113, }, { 116, 194, 113, 149, 88, 252, 147, 7, 118, 197, 20, 232, 97, 121, 119, 234, }, { 117, 173, 43, 168, 231, 81, 125, 172, 135, 1, 187, 234, 183, 101, 254, 24, }, { 118, 28, 197, 239, 229, 101, 140, 146, 87, 142, 137, 236, 14, 65, 166, 205, }, { 119, 115, 159, 210, 90, 200, 98, 57, 166, 74, 38, 238, 216, 93, 47, 63, }, { 120, 67, 79, 74, 80, 44, 209, 255, 176, 188, 220, 240, 192, 233, 212, 56, }, { 121, 44, 21, 119, 239, 129, 63, 84, 65, 120, 115, 242, 22, 245, 93, 202, }, { 122, 157, 251, 48, 237, 181, 206, 106, 145, 247, 65, 244, 175, 209, 5, 31, }, { 123, 242, 161, 13, 82, 24, 32, 193, 96, 51, 238, 246, 121, 205, 140, 237, }, { 124, 60, 228, 190, 233, 221, 239, 22, 242, 42, 37, 248, 30, 153, 181, 118, }, { 125, 83, 190, 131, 86, 112, 1, 189, 3, 238, 138, 250, 200, 133, 60, 132, }, { 126, 226, 80, 196, 84, 68, 240, 131, 211, 97, 184, 252, 113, 161, 100, 81, }, { 127, 141, 10, 249, 235, 233, 30, 40, 34, 165, 23, 254, 167, 189, 237, 163, }, { 128, 59, 68, 245, 65, 85, 204, 211, 151, 232, 150, 195, 252, 24, 125, 212, }, { 129, 84, 30, 200, 254, 248, 34, 120, 102, 44, 57, 193, 42, 4, 244, 38, }, { 130, 229, 240, 143, 252, 204, 211, 70, 182, 163, 11, 199, 147, 32, 172, 243, }, { 131, 138, 170, 178, 67, 97, 61, 237, 71, 103, 164, 197, 69, 60, 37, 1, }, { 132, 68, 239, 1, 248, 164, 242, 58, 213, 126, 111, 203, 34, 104, 28, 154, }, { 133, 43, 181, 60, 71, 9, 28, 145, 36, 186, 192, 201, 244, 116, 149, 104, }, { 134, 154, 91, 123, 69, 61, 237, 175, 244, 53, 242, 207, 77, 80, 205, 189, }, { 135, 245, 1, 70, 250, 144, 3, 4, 5, 241, 93, 205, 155, 76, 68, 79, }, { 136, 197, 209, 222, 240, 116, 176, 194, 19, 7, 167, 211, 131, 248, 191, 72, }, { 137, 170, 139, 227, 79, 217, 94, 105, 226, 195, 8, 209, 85, 228, 54, 186, }, { 138, 27, 101, 164, 77, 237, 175, 87, 50, 76, 58, 215, 236, 192, 110, 111, }, { 139, 116, 63, 153, 242, 64, 65, 252, 195, 136, 149, 213, 58, 220, 231, 157, }, { 140, 186, 122, 42, 73, 133, 142, 43, 81, 145, 94, 219, 93, 136, 222, 6, }, { 141, 213, 32, 23, 246, 40, 96, 128, 160, 85, 241, 217, 139, 148, 87, 244, }, { 142, 100, 206, 80, 244, 28, 145, 190, 112, 218, 195, 223, 50, 176, 15, 33, }, { 143, 11, 148, 109, 75, 177, 127, 21, 129, 30, 108, 221, 228, 172, 134, 211, }, { 144, 4, 173, 163, 224, 23, 52, 241, 92, 245, 244, 227, 2, 27, 58, 47, }, { 145, 107, 247, 158, 95, 186, 218, 90, 173, 49, 91, 225, 212, 7, 179, 221, }, { 146, 218, 25, 217, 93, 142, 43, 100, 125, 190, 105, 231, 109, 35, 235, 8, }, { 147, 181, 67, 228, 226, 35, 197, 207, 140, 122, 198, 229, 187, 63, 98, 250, }, { 148, 123, 6, 87, 89, 230, 10, 24, 30, 99, 13, 235, 220, 107, 91, 97, }, { 149, 20, 92, 106, 230, 75, 228, 179, 239, 167, 162, 233, 10, 119, 210, 147, }, { 150, 165, 178, 45, 228, 127, 21, 141, 63, 40, 144, 239, 179, 83, 138, 70, }, { 151, 202, 232, 16, 91, 210, 251, 38, 206, 236, 63, 237, 101, 79, 3, 180, }, { 152, 250, 56, 136, 81, 54, 72, 224, 216, 26, 197, 243, 125, 251, 248, 179, }, { 153, 149, 98, 181, 238, 155, 166, 75, 41, 222, 106, 241, 171, 231, 113, 65, }, { 154, 36, 140, 242, 236, 175, 87, 117, 249, 81, 88, 247, 18, 195, 41, 148, }, { 155, 75, 214, 207, 83, 2, 185, 222, 8, 149, 247, 245, 196, 223, 160, 102, }, { 156, 133, 147, 124, 232, 199, 118, 9, 154, 140, 60, 251, 163, 139, 153, 253, }, { 157, 234, 201, 65, 87, 106, 152, 162, 107, 72, 147, 249, 117, 151, 16, 15, }, { 158, 91, 39, 6, 85, 94, 105, 156, 187, 199, 161, 255, 204, 179, 72, 218, }, { 159, 52, 125, 59, 234, 243, 135, 55, 74, 3, 14, 253, 26, 175, 193, 40, }, { 160, 69, 85, 89, 192, 209, 255, 151, 194, 210, 82, 131, 195, 30, 243, 225, }, { 161, 42, 15, 100, 127, 124, 17, 60, 51, 22, 253, 129, 21, 2, 122, 19, }, { 162, 155, 225, 35, 125, 72, 224, 2, 227, 153, 207, 135, 172, 38, 34, 198, }, { 163, 244, 187, 30, 194, 229, 14, 169, 18, 93, 96, 133, 122, 58, 171, 52, }, { 164, 58, 254, 173, 121, 32, 193, 126, 128, 68, 171, 139, 29, 110, 146, 175, }, { 165, 85, 164, 144, 198, 141, 47, 213, 113, 128, 4, 137, 203, 114, 27, 93, }, { 166, 228, 74, 215, 196, 185, 222, 235, 161, 15, 54, 143, 114, 86, 67, 136, }, { 167, 139, 16, 234, 123, 20, 48, 64, 80, 203, 153, 141, 164, 74, 202, 122, }, { 168, 187, 192, 114, 113, 240, 131, 134, 70, 61, 99, 147, 188, 254, 49, 125, }, { 169, 212, 154, 79, 206, 93, 109, 45, 183, 249, 204, 145, 106, 226, 184, 143, }, { 170, 101, 116, 8, 204, 105, 156, 19, 103, 118, 254, 151, 211, 198, 224, 90, }, { 171, 10, 46, 53, 115, 196, 114, 184, 150, 178, 81, 149, 5, 218, 105, 168, }, { 172, 196, 107, 134, 200, 1, 189, 111, 4, 171, 154, 155, 98, 142, 80, 51, }, { 173, 171, 49, 187, 119, 172, 83, 196, 245, 111, 53, 153, 180, 146, 217, 193, }, { 174, 26, 223, 252, 117, 152, 162, 250, 37, 224, 7, 159, 13, 182, 129, 20, }, { 175, 117, 133, 193, 202, 53, 76, 81, 212, 36, 168, 157, 219, 170, 8, 230, }, { 176, 122, 188, 15, 97, 147, 7, 181, 9, 207, 48, 163, 61, 29, 180, 26, }, { 177, 21, 230, 50, 222, 62, 233, 30, 248, 11, 159, 161, 235, 1, 61, 232, }, { 178, 164, 8, 117, 220, 10, 24, 32, 40, 132, 173, 167, 82, 37, 101, 61, }, { 179, 203, 82, 72, 99, 167, 246, 139, 217, 64, 2, 165, 132, 57, 236, 207, }, { 180, 5, 23, 251, 216, 98, 57, 92, 75, 89, 201, 171, 227, 109, 213, 84, }, { 181, 106, 77, 198, 103, 207, 215, 247, 186, 157, 102, 169, 53, 113, 92, 166, }, { 182, 219, 163, 129, 101, 251, 38, 201, 106, 18, 84, 175, 140, 85, 4, 115, }, { 183, 180, 249, 188, 218, 86, 200, 98, 155, 214, 251, 173, 90, 73, 141, 129, }, { 184, 132, 41, 36, 208, 178, 123, 164, 141, 32, 1, 179, 66, 253, 118, 134, }, { 185, 235, 115, 25, 111, 31, 149, 15, 124, 228, 174, 177, 148, 225, 255, 116, }, { 186, 90, 157, 94, 109, 43, 100, 49, 172, 107, 156, 183, 45, 197, 167, 161, }, { 187, 53, 199, 99, 210, 134, 138, 154, 93, 175, 51, 181, 251, 217, 46, 83, }, { 188, 251, 130, 208, 105, 67, 69, 77, 207, 182, 248, 187, 156, 141, 23, 200, }, { 189, 148, 216, 237, 214, 238, 171, 230, 62, 114, 87, 185, 74, 145, 158, 58, }, { 190, 37, 54, 170, 212, 218, 90, 216, 238, 253, 101, 191, 243, 181, 198, 239, }, { 191, 74, 108, 151, 107, 119, 180, 115, 31, 57, 202, 189, 37, 169, 79, 29, }, { 192, 199, 102, 110, 128, 158, 170, 91, 61, 156, 221, 67, 130, 20, 162, 190, }, { 193, 168, 60, 83, 63, 51, 68, 240, 204, 88, 114, 65, 84, 8, 43, 76, }, { 194, 25, 210, 20, 61, 7, 181, 206, 28, 215, 64, 71, 237, 44, 115, 153, }, { 195, 118, 136, 41, 130, 170, 91, 101, 237, 19, 239, 69, 59, 48, 250, 107, }, { 196, 184, 205, 154, 57, 111, 148, 178, 127, 10, 36, 75, 92, 100, 195, 240, }, { 197, 215, 151, 167, 134, 194, 122, 25, 142, 206, 139, 73, 138, 120, 74, 2, }, { 198, 102, 121, 224, 132, 246, 139, 39, 94, 65, 185, 79, 51, 92, 18, 215, }, { 199, 9, 35, 221, 59, 91, 101, 140, 175, 133, 22, 77, 229, 64, 155, 37, }, { 200, 57, 243, 69, 49, 191, 214, 74, 185, 115, 236, 83, 253, 244, 96, 34, }, { 201, 86, 169, 120, 142, 18, 56, 225, 72, 183, 67, 81, 43, 232, 233, 208, }, { 202, 231, 71, 63, 140, 38, 201, 223, 152, 56, 113, 87, 146, 204, 177, 5, }, { 203, 136, 29, 2, 51, 139, 39, 116, 105, 252, 222, 85, 68, 208, 56, 247, }, { 204, 70, 88, 177, 136, 78, 232, 163, 251, 229, 21, 91, 35, 132, 1, 108, }, { 205, 41, 2, 140, 55, 227, 6, 8, 10, 33, 186, 89, 245, 152, 136, 158, }, { 206, 152, 236, 203, 53, 215, 247, 54, 218, 174, 136, 95, 76, 188, 208, 75, }, { 207, 247, 182, 246, 138, 122, 25, 157, 43, 106, 39, 93, 154, 160, 89, 185, }, { 208, 248, 143, 56, 33, 220, 82, 121, 246, 129, 191, 99, 124, 23, 229, 69, }, { 209, 151, 213, 5, 158, 113, 188, 210, 7, 69, 16, 97, 170, 11, 108, 183, }, { 210, 38, 59, 66, 156, 69, 77, 236, 215, 202, 34, 103, 19, 47, 52, 98, }, { 211, 73, 97, 127, 35, 232, 163, 71, 38, 14, 141, 101, 197, 51, 189, 144, }, { 212, 135, 36, 204, 152, 45, 108, 144, 180, 23, 70, 107, 162, 103, 132, 11, }, { 213, 232, 126, 241, 39, 128, 130, 59, 69, 211, 233, 105, 116, 123, 13, 249, }, { 214, 89, 144, 182, 37, 180, 115, 5, 149, 92, 219, 111, 205, 95, 85, 44, }, { 215, 54, 202, 139, 154, 25, 157, 174, 100, 152, 116, 109, 27, 67, 220, 222, }, { 216, 6, 26, 19, 144, 253, 46, 104, 114, 110, 142, 115, 3, 247, 39, 217, }, { 217, 105, 64, 46, 47, 80, 192, 195, 131, 170, 33, 113, 213, 235, 174, 43, }, { 218, 216, 174, 105, 45, 100, 49, 253, 83, 37, 19, 119, 108, 207, 246, 254, }, { 219, 183, 244, 84, 146, 201, 223, 86, 162, 225, 188, 117, 186, 211, 127, 12, }, { 220, 121, 177, 231, 41, 12, 16, 129, 48, 248, 119, 123, 221, 135, 70, 151, }, { 221, 22, 235, 218, 150, 161, 254, 42, 193, 60, 216, 121, 11, 155, 207, 101, }, { 222, 167, 5, 157, 148, 149, 15, 20, 17, 179, 234, 127, 178, 191, 151, 176, }, { 223, 200, 95, 160, 43, 56, 225, 191, 224, 119, 69, 125, 100, 163, 30, 66, }, { 224, 185, 119, 194, 1, 26, 153, 31, 104, 166, 25, 3, 189, 18, 44, 139, }, { 225, 214, 45, 255, 190, 183, 119, 180, 153, 98, 182, 1, 107, 14, 165, 121, }, { 226, 103, 195, 184, 188, 131, 134, 138, 73, 237, 132, 7, 210, 42, 253, 172, }, { 227, 8, 153, 133, 3, 46, 104, 33, 184, 41, 43, 5, 4, 54, 116, 94, }, { 228, 198, 220, 54, 184, 235, 167, 246, 42, 48, 224, 11, 99, 98, 77, 197, }, { 229, 169, 134, 11, 7, 70, 73, 93, 219, 244, 79, 9, 181, 126, 196, 55, }, { 230, 24, 104, 76, 5, 114, 184, 99, 11, 123, 125, 15, 12, 90, 156, 226, }, { 231, 119, 50, 113, 186, 223, 86, 200, 250, 191, 210, 13, 218, 70, 21, 16, }, { 232, 71, 226, 233, 176, 59, 229, 14, 236, 73, 40, 19, 194, 242, 238, 23, }, { 233, 40, 184, 212, 15, 150, 11, 165, 29, 141, 135, 17, 20, 238, 103, 229, }, { 234, 153, 86, 147, 13, 162, 250, 155, 205, 2, 181, 23, 173, 202, 63, 48, }, { 235, 246, 12, 174, 178, 15, 20, 48, 60, 198, 26, 21, 123, 214, 182, 194, }, { 236, 56, 73, 29, 9, 202, 219, 231, 174, 223, 209, 27, 28, 130, 143, 89, }, { 237, 87, 19, 32, 182, 103, 53, 76, 95, 27, 126, 25, 202, 158, 6, 171, }, { 238, 230, 253, 103, 180, 83, 196, 114, 143, 148, 76, 31, 115, 186, 94, 126, }, { 239, 137, 167, 90, 11, 254, 42, 217, 126, 80, 227, 29, 165, 166, 215, 140, }, { 240, 134, 158, 148, 160, 88, 97, 61, 163, 187, 123, 35, 67, 17, 107, 112, }, { 241, 233, 196, 169, 31, 245, 143, 150, 82, 127, 212, 33, 149, 13, 226, 130, }, { 242, 88, 42, 238, 29, 193, 126, 168, 130, 240, 230, 39, 44, 41, 186, 87, }, { 243, 55, 112, 211, 162, 108, 144, 3, 115, 52, 73, 37, 250, 53, 51, 165, }, { 244, 249, 53, 96, 25, 169, 95, 212, 225, 45, 130, 43, 157, 97, 10, 62, }, { 245, 150, 111, 93, 166, 4, 177, 127, 16, 233, 45, 41, 75, 125, 131, 204, }, { 246, 39, 129, 26, 164, 48, 64, 65, 192, 102, 31, 47, 242, 89, 219, 25, }, { 247, 72, 219, 39, 27, 157, 174, 234, 49, 162, 176, 45, 36, 69, 82, 235, }, { 248, 120, 11, 191, 17, 121, 29, 44, 39, 84, 74, 51, 60, 241, 169, 236, }, { 249, 23, 81, 130, 174, 212, 243, 135, 214, 144, 229, 49, 234, 237, 32, 30, }, { 250, 166, 191, 197, 172, 224, 2, 185, 6, 31, 215, 55, 83, 201, 120, 203, }, { 251, 201, 229, 248, 19, 77, 236, 18, 247, 219, 120, 53, 133, 213, 241, 57, }, { 252, 7, 160, 75, 168, 136, 35, 197, 101, 194, 179, 59, 226, 129, 200, 162, }, { 253, 104, 250, 118, 23, 37, 205, 110, 148, 6, 28, 57, 52, 157, 65, 80, }, { 254, 217, 20, 49, 21, 17, 60, 80, 68, 137, 46, 63, 141, 185, 25, 133, }, { 255, 182, 78, 12, 170, 188, 210, 251, 181, 77, 129, 61, 91, 165, 144, 119, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 192, 119, 68, 148, 96, 124, 18, 141, 46, 45, 188, 235, 17, 67, 72, 142, }, { 67, 238, 136, 235, 192, 248, 36, 217, 92, 90, 187, 21, 34, 134, 144, 223, }, { 131, 153, 204, 127, 160, 132, 54, 84, 114, 119, 7, 254, 51, 197, 216, 81, }, { 134, 31, 211, 21, 67, 51, 72, 113, 184, 180, 181, 42, 68, 207, 227, 125, }, { 70, 104, 151, 129, 35, 79, 90, 252, 150, 153, 9, 193, 85, 140, 171, 243, }, { 197, 241, 91, 254, 131, 203, 108, 168, 228, 238, 14, 63, 102, 73, 115, 162, }, { 5, 134, 31, 106, 227, 183, 126, 37, 202, 195, 178, 212, 119, 10, 59, 44, }, { 207, 62, 101, 42, 134, 102, 144, 226, 179, 171, 169, 84, 136, 93, 5, 250, }, { 15, 73, 33, 190, 230, 26, 130, 111, 157, 134, 21, 191, 153, 30, 77, 116, }, { 140, 208, 237, 193, 70, 158, 180, 59, 239, 241, 18, 65, 170, 219, 149, 37, }, { 76, 167, 169, 85, 38, 226, 166, 182, 193, 220, 174, 170, 187, 152, 221, 171, }, { 73, 33, 182, 63, 197, 85, 216, 147, 11, 31, 28, 126, 204, 146, 230, 135, }, { 137, 86, 242, 171, 165, 41, 202, 30, 37, 50, 160, 149, 221, 209, 174, 9, }, { 10, 207, 62, 212, 5, 173, 252, 74, 87, 69, 167, 107, 238, 20, 118, 88, }, { 202, 184, 122, 64, 101, 209, 238, 199, 121, 104, 27, 128, 255, 87, 62, 214, }, { 93, 124, 202, 84, 207, 204, 227, 7, 165, 149, 145, 168, 211, 186, 10, 55, }, { 157, 11, 142, 192, 175, 176, 241, 138, 139, 184, 45, 67, 194, 249, 66, 185, }, { 30, 146, 66, 191, 15, 52, 199, 222, 249, 207, 42, 189, 241, 60, 154, 232, }, { 222, 229, 6, 43, 111, 72, 213, 83, 215, 226, 150, 86, 224, 127, 210, 102, }, { 219, 99, 25, 65, 140, 255, 171, 118, 29, 33, 36, 130, 151, 117, 233, 74, }, { 27, 20, 93, 213, 236, 131, 185, 251, 51, 12, 152, 105, 134, 54, 161, 196, }, { 152, 141, 145, 170, 76, 7, 143, 175, 65, 123, 159, 151, 181, 243, 121, 149, }, { 88, 250, 213, 62, 44, 123, 157, 34, 111, 86, 35, 124, 164, 176, 49, 27, }, { 146, 66, 175, 126, 73, 170, 115, 229, 22, 62, 56, 252, 91, 231, 15, 205, }, { 82, 53, 235, 234, 41, 214, 97, 104, 56, 19, 132, 23, 74, 164, 71, 67, }, { 209, 172, 39, 149, 137, 82, 87, 60, 74, 100, 131, 233, 121, 97, 159, 18, }, { 17, 219, 99, 1, 233, 46, 69, 177, 100, 73, 63, 2, 104, 34, 215, 156, }, { 20, 93, 124, 107, 10, 153, 59, 148, 174, 138, 141, 214, 31, 40, 236, 176, }, { 212, 42, 56, 255, 106, 229, 41, 25, 128, 167, 49, 61, 14, 107, 164, 62, }, { 87, 179, 244, 128, 202, 97, 31, 77, 242, 208, 54, 195, 61, 174, 124, 111, }, { 151, 196, 176, 20, 170, 29, 13, 192, 220, 253, 138, 40, 44, 237, 52, 225, }, { 186, 248, 87, 168, 93, 91, 5, 14, 137, 233, 225, 147, 101, 183, 20, 110, }, { 122, 143, 19, 60, 61, 39, 23, 131, 167, 196, 93, 120, 116, 244, 92, 224, }, { 249, 22, 223, 67, 157, 163, 33, 215, 213, 179, 90, 134, 71, 49, 132, 177, }, { 57, 97, 155, 215, 253, 223, 51, 90, 251, 158, 230, 109, 86, 114, 204, 63, }, { 60, 231, 132, 189, 30, 104, 77, 127, 49, 93, 84, 185, 33, 120, 247, 19, }, { 252, 144, 192, 41, 126, 20, 95, 242, 31, 112, 232, 82, 48, 59, 191, 157, }, { 127, 9, 12, 86, 222, 144, 105, 166, 109, 7, 239, 172, 3, 254, 103, 204, }, { 191, 126, 72, 194, 190, 236, 123, 43, 67, 42, 83, 71, 18, 189, 47, 66, }, { 117, 198, 50, 130, 219, 61, 149, 236, 58, 66, 72, 199, 237, 234, 17, 148, }, { 181, 177, 118, 22, 187, 65, 135, 97, 20, 111, 244, 44, 252, 169, 89, 26, }, { 54, 40, 186, 105, 27, 197, 177, 53, 102, 24, 243, 210, 207, 108, 129, 75, }, { 246, 95, 254, 253, 123, 185, 163, 184, 72, 53, 79, 57, 222, 47, 201, 197, }, { 243, 217, 225, 151, 152, 14, 221, 157, 130, 246, 253, 237, 169, 37, 242, 233, }, { 51, 174, 165, 3, 248, 114, 207, 16, 172, 219, 65, 6, 184, 102, 186, 103, }, { 176, 55, 105, 124, 88, 246, 249, 68, 222, 172, 70, 248, 139, 163, 98, 54, }, { 112, 64, 45, 232, 56, 138, 235, 201, 240, 129, 250, 19, 154, 224, 42, 184, }, { 231, 132, 157, 252, 146, 151, 230, 9, 44, 124, 112, 59, 182, 13, 30, 89, }, { 39, 243, 217, 104, 242, 235, 244, 132, 2, 81, 204, 208, 167, 78, 86, 215, }, { 164, 106, 21, 23, 82, 111, 194, 208, 112, 38, 203, 46, 148, 139, 142, 134, }, { 100, 29, 81, 131, 50, 19, 208, 93, 94, 11, 119, 197, 133, 200, 198, 8, }, { 97, 155, 78, 233, 209, 164, 174, 120, 148, 200, 197, 17, 242, 194, 253, 36, }, { 161, 236, 10, 125, 177, 216, 188, 245, 186, 229, 121, 250, 227, 129, 181, 170, }, { 34, 117, 198, 2, 17, 92, 138, 161, 200, 146, 126, 4, 208, 68, 109, 251, }, { 226, 2, 130, 150, 113, 32, 152, 44, 230, 191, 194, 239, 193, 7, 37, 117, }, { 40, 186, 248, 214, 20, 241, 118, 235, 159, 215, 217, 111, 62, 80, 27, 163, }, { 232, 205, 188, 66, 116, 141, 100, 102, 177, 250, 101, 132, 47, 19, 83, 45, }, { 107, 84, 112, 61, 212, 9, 82, 50, 195, 141, 98, 122, 28, 214, 139, 124, }, { 171, 35, 52, 169, 180, 117, 64, 191, 237, 160, 222, 145, 13, 149, 195, 242, }, { 174, 165, 43, 195, 87, 194, 62, 154, 39, 99, 108, 69, 122, 159, 248, 222, }, { 110, 210, 111, 87, 55, 190, 44, 23, 9, 78, 208, 174, 107, 220, 176, 80, }, { 237, 75, 163, 40, 151, 58, 26, 67, 123, 57, 215, 80, 88, 25, 104, 1, }, { 45, 60, 231, 188, 247, 70, 8, 206, 85, 20, 107, 187, 73, 90, 32, 143, }, { 183, 51, 174, 147, 186, 182, 10, 28, 209, 17, 1, 229, 202, 173, 40, 220, }, { 119, 68, 234, 7, 218, 202, 24, 145, 255, 60, 189, 14, 219, 238, 96, 82, }, { 244, 221, 38, 120, 122, 78, 46, 197, 141, 75, 186, 240, 232, 43, 184, 3, }, { 52, 170, 98, 236, 26, 50, 60, 72, 163, 102, 6, 27, 249, 104, 240, 141, }, { 49, 44, 125, 134, 249, 133, 66, 109, 105, 165, 180, 207, 142, 98, 203, 161, }, { 241, 91, 57, 18, 153, 249, 80, 224, 71, 136, 8, 36, 159, 33, 131, 47, }, { 114, 194, 245, 109, 57, 125, 102, 180, 53, 255, 15, 218, 172, 228, 91, 126, }, { 178, 181, 177, 249, 89, 1, 116, 57, 27, 210, 179, 49, 189, 167, 19, 240, }, { 120, 13, 203, 185, 60, 208, 154, 254, 98, 186, 168, 177, 66, 240, 45, 38, }, { 184, 122, 143, 45, 92, 172, 136, 115, 76, 151, 20, 90, 83, 179, 101, 168, }, { 59, 227, 67, 82, 252, 40, 190, 39, 62, 224, 19, 164, 96, 118, 189, 249, }, { 251, 148, 7, 198, 156, 84, 172, 170, 16, 205, 175, 79, 113, 53, 245, 119, }, { 254, 18, 24, 172, 127, 227, 210, 143, 218, 14, 29, 155, 6, 63, 206, 91, }, { 62, 101, 92, 56, 31, 159, 192, 2, 244, 35, 161, 112, 23, 124, 134, 213, }, { 189, 252, 144, 71, 191, 27, 246, 86, 134, 84, 166, 142, 36, 185, 94, 132, }, { 125, 139, 212, 211, 223, 103, 228, 219, 168, 121, 26, 101, 53, 250, 22, 10, }, { 234, 79, 100, 199, 117, 122, 233, 27, 116, 132, 144, 77, 25, 23, 34, 235, }, { 42, 56, 32, 83, 21, 6, 251, 150, 90, 169, 44, 166, 8, 84, 106, 101, }, { 169, 161, 236, 44, 181, 130, 205, 194, 40, 222, 43, 88, 59, 145, 178, 52, }, { 105, 214, 168, 184, 213, 254, 223, 79, 6, 243, 151, 179, 42, 210, 250, 186, }, { 108, 80, 183, 210, 54, 73, 161, 106, 204, 48, 37, 103, 93, 216, 193, 150, }, { 172, 39, 243, 70, 86, 53, 179, 231, 226, 29, 153, 140, 76, 155, 137, 24, }, { 47, 190, 63, 57, 246, 177, 133, 179, 144, 106, 158, 114, 127, 94, 81, 73, }, { 239, 201, 123, 173, 150, 205, 151, 62, 190, 71, 34, 153, 110, 29, 25, 199, }, { 37, 113, 1, 237, 243, 28, 121, 249, 199, 47, 57, 25, 145, 74, 39, 17, }, { 229, 6, 69, 121, 147, 96, 107, 116, 233, 2, 133, 242, 128, 9, 111, 159, }, { 102, 159, 137, 6, 51, 228, 93, 32, 155, 117, 130, 12, 179, 204, 183, 206, }, { 166, 232, 205, 146, 83, 152, 79, 173, 181, 88, 62, 231, 162, 143, 255, 64, }, { 163, 110, 210, 248, 176, 47, 49, 136, 127, 155, 140, 51, 213, 133, 196, 108, }, { 99, 25, 150, 108, 208, 83, 35, 5, 81, 182, 48, 216, 196, 198, 140, 226, }, { 224, 128, 90, 19, 112, 215, 21, 81, 35, 193, 55, 38, 247, 3, 84, 179, }, { 32, 247, 30, 135, 16, 171, 7, 220, 13, 236, 139, 205, 230, 64, 28, 61, }, { 13, 203, 249, 59, 231, 237, 15, 18, 88, 248, 224, 118, 175, 26, 60, 178, }, { 205, 188, 189, 175, 135, 145, 29, 159, 118, 213, 92, 157, 190, 89, 116, 60, }, { 78, 37, 113, 208, 39, 21, 43, 203, 4, 162, 91, 99, 141, 156, 172, 109, }, { 142, 82, 53, 68, 71, 105, 57, 70, 42, 143, 231, 136, 156, 223, 228, 227, }, { 139, 212, 42, 46, 164, 222, 71, 99, 224, 76, 85, 92, 235, 213, 223, 207, }, { 75, 163, 110, 186, 196, 162, 85, 238, 206, 97, 233, 183, 250, 150, 151, 65, }, { 200, 58, 162, 197, 100, 38, 99, 186, 188, 22, 238, 73, 201, 83, 79, 16, }, { 8, 77, 230, 81, 4, 90, 113, 55, 146, 59, 82, 162, 216, 16, 7, 158, }, { 194, 245, 156, 17, 97, 139, 159, 240, 235, 83, 73, 34, 39, 71, 57, 72, }, { 2, 130, 216, 133, 1, 247, 141, 125, 197, 126, 245, 201, 54, 4, 113, 198, }, { 129, 27, 20, 250, 161, 115, 187, 41, 183, 9, 242, 55, 5, 193, 169, 151, }, { 65, 108, 80, 110, 193, 15, 169, 164, 153, 36, 78, 220, 20, 130, 225, 25, }, { 68, 234, 79, 4, 34, 184, 215, 129, 83, 231, 252, 8, 99, 136, 218, 53, }, { 132, 157, 11, 144, 66, 196, 197, 12, 125, 202, 64, 227, 114, 203, 146, 187, }, { 7, 4, 199, 239, 226, 64, 243, 88, 15, 189, 71, 29, 65, 14, 74, 234, }, { 199, 115, 131, 123, 130, 60, 225, 213, 33, 144, 251, 246, 80, 77, 2, 100, }, { 80, 183, 51, 111, 40, 33, 236, 21, 253, 109, 113, 222, 124, 160, 54, 133, }, { 144, 192, 119, 251, 72, 93, 254, 152, 211, 64, 205, 53, 109, 227, 126, 11, }, { 19, 89, 187, 132, 232, 217, 200, 204, 161, 55, 202, 203, 94, 38, 166, 90, }, { 211, 46, 255, 16, 136, 165, 218, 65, 143, 26, 118, 32, 79, 101, 238, 212, }, { 214, 168, 224, 122, 107, 18, 164, 100, 69, 217, 196, 244, 56, 111, 213, 248, }, { 22, 223, 164, 238, 11, 110, 182, 233, 107, 244, 120, 31, 41, 44, 157, 118, }, { 149, 70, 104, 145, 171, 234, 128, 189, 25, 131, 127, 225, 26, 233, 69, 39, }, { 85, 49, 44, 5, 203, 150, 146, 48, 55, 174, 195, 10, 11, 170, 13, 169, }, { 159, 137, 86, 69, 174, 71, 124, 247, 78, 198, 216, 138, 244, 253, 51, 127, }, { 95, 254, 18, 209, 206, 59, 110, 122, 96, 235, 100, 97, 229, 190, 123, 241, }, { 220, 103, 222, 174, 110, 191, 88, 46, 18, 156, 99, 159, 214, 123, 163, 160, }, { 28, 16, 154, 58, 14, 195, 74, 163, 60, 177, 223, 116, 199, 56, 235, 46, }, { 25, 150, 133, 80, 237, 116, 52, 134, 246, 114, 109, 160, 176, 50, 208, 2, }, { 217, 225, 193, 196, 141, 8, 38, 11, 216, 95, 209, 75, 161, 113, 152, 140, }, { 90, 120, 13, 187, 45, 140, 16, 95, 170, 40, 214, 181, 146, 180, 64, 221, }, { 154, 15, 73, 47, 77, 240, 2, 210, 132, 5, 106, 94, 131, 247, 8, 83, }, { 173, 102, 159, 229, 183, 175, 20, 56, 97, 34, 2, 9, 87, 153, 80, 123, }, { 109, 17, 219, 113, 215, 211, 6, 181, 79, 15, 190, 226, 70, 218, 24, 245, }, { 238, 136, 23, 14, 119, 87, 48, 225, 61, 120, 185, 28, 117, 31, 192, 164, }, { 46, 255, 83, 154, 23, 43, 34, 108, 19, 85, 5, 247, 100, 92, 136, 42, }, { 43, 121, 76, 240, 244, 156, 92, 73, 217, 150, 183, 35, 19, 86, 179, 6, }, { 235, 14, 8, 100, 148, 224, 78, 196, 247, 187, 11, 200, 2, 21, 251, 136, }, { 104, 151, 196, 27, 52, 100, 120, 144, 133, 204, 12, 54, 49, 208, 35, 217, }, { 168, 224, 128, 143, 84, 24, 106, 29, 171, 225, 176, 221, 32, 147, 107, 87, }, { 98, 88, 250, 207, 49, 201, 132, 218, 210, 137, 171, 93, 223, 196, 85, 129, }, { 162, 47, 190, 91, 81, 181, 150, 87, 252, 164, 23, 182, 206, 135, 29, 15, }, { 33, 182, 114, 36, 241, 49, 160, 3, 142, 211, 16, 72, 253, 66, 197, 94, }, { 225, 193, 54, 176, 145, 77, 178, 142, 160, 254, 172, 163, 236, 1, 141, 208, }, { 228, 71, 41, 218, 114, 250, 204, 171, 106, 61, 30, 119, 155, 11, 182, 252, }, { 36, 48, 109, 78, 18, 134, 222, 38, 68, 16, 162, 156, 138, 72, 254, 114, }, { 167, 169, 161, 49, 178, 2, 232, 114, 54, 103, 165, 98, 185, 141, 38, 35, }, { 103, 222, 229, 165, 210, 126, 250, 255, 24, 74, 25, 137, 168, 206, 110, 173, }, { 240, 26, 85, 177, 120, 99, 247, 63, 196, 183, 147, 161, 132, 35, 90, 76, }, { 48, 109, 17, 37, 24, 31, 229, 178, 234, 154, 47, 74, 149, 96, 18, 194, }, { 179, 244, 221, 90, 184, 155, 211, 230, 152, 237, 40, 180, 166, 165, 202, 147, }, { 115, 131, 153, 206, 216, 231, 193, 107, 182, 192, 148, 95, 183, 230, 130, 29, }, { 118, 5, 134, 164, 59, 80, 191, 78, 124, 3, 38, 139, 192, 236, 185, 49, }, { 182, 114, 194, 48, 91, 44, 173, 195, 82, 46, 154, 96, 209, 175, 241, 191, }, { 53, 235, 14, 79, 251, 168, 155, 151, 32, 89, 157, 158, 226, 106, 41, 238, }, { 245, 156, 74, 219, 155, 212, 137, 26, 14, 116, 33, 117, 243, 41, 97, 96, }, { 63, 36, 48, 155, 254, 5, 103, 221, 119, 28, 58, 245, 12, 126, 95, 182, }, { 255, 83, 116, 15, 158, 121, 117, 80, 89, 49, 134, 30, 29, 61, 23, 56, }, { 124, 202, 184, 112, 62, 253, 67, 4, 43, 70, 129, 224, 46, 248, 207, 105, }, { 188, 189, 252, 228, 94, 129, 81, 137, 5, 107, 61, 11, 63, 187, 135, 231, }, { 185, 59, 227, 142, 189, 54, 47, 172, 207, 168, 143, 223, 72, 177, 188, 203, }, { 121, 76, 167, 26, 221, 74, 61, 33, 225, 133, 51, 52, 89, 242, 244, 69, }, { 250, 213, 107, 101, 125, 206, 11, 117, 147, 242, 52, 202, 106, 55, 44, 20, }, { 58, 162, 47, 241, 29, 178, 25, 248, 189, 223, 136, 33, 123, 116, 100, 154, }, { 23, 158, 200, 77, 234, 244, 17, 54, 232, 203, 227, 154, 50, 46, 68, 21, }, { 215, 233, 140, 217, 138, 136, 3, 187, 198, 230, 95, 113, 35, 109, 12, 155, }, { 84, 112, 64, 166, 42, 12, 53, 239, 180, 145, 88, 143, 16, 168, 212, 202, }, { 148, 7, 4, 50, 74, 112, 39, 98, 154, 188, 228, 100, 1, 235, 156, 68, }, { 145, 129, 27, 88, 169, 199, 89, 71, 80, 127, 86, 176, 118, 225, 167, 104, }, { 81, 246, 95, 204, 201, 187, 75, 202, 126, 82, 234, 91, 103, 162, 239, 230, }, { 210, 111, 147, 179, 105, 63, 125, 158, 12, 37, 237, 165, 84, 103, 55, 183, }, { 18, 24, 215, 39, 9, 67, 111, 19, 34, 8, 81, 78, 69, 36, 127, 57, }, { 216, 160, 173, 103, 108, 146, 129, 212, 91, 96, 74, 206, 186, 115, 65, 239, }, { 24, 215, 233, 243, 12, 238, 147, 89, 117, 77, 246, 37, 171, 48, 9, 97, }, { 155, 78, 37, 140, 172, 106, 165, 13, 7, 58, 241, 219, 152, 245, 209, 48, }, { 91, 57, 97, 24, 204, 22, 183, 128, 41, 23, 77, 48, 137, 182, 153, 190, }, { 94, 191, 126, 114, 47, 161, 201, 165, 227, 212, 255, 228, 254, 188, 162, 146, }, { 158, 200, 58, 230, 79, 221, 219, 40, 205, 249, 67, 15, 239, 255, 234, 28, }, { 29, 81, 246, 153, 239, 89, 237, 124, 191, 142, 68, 241, 220, 58, 50, 77, }, { 221, 38, 178, 13, 143, 37, 255, 241, 145, 163, 248, 26, 205, 121, 122, 195, }, { 74, 226, 2, 25, 37, 56, 242, 49, 77, 94, 114, 50, 225, 148, 78, 34, }, { 138, 149, 70, 141, 69, 68, 224, 188, 99, 115, 206, 217, 240, 215, 6, 172, }, { 9, 12, 138, 242, 229, 192, 214, 232, 17, 4, 201, 39, 195, 18, 222, 253, }, { 201, 123, 206, 102, 133, 188, 196, 101, 63, 41, 117, 204, 210, 81, 150, 115, }, { 204, 253, 209, 12, 102, 11, 186, 64, 245, 234, 199, 24, 165, 91, 173, 95, }, { 12, 138, 149, 152, 6, 119, 168, 205, 219, 199, 123, 243, 180, 24, 229, 209, }, { 143, 19, 89, 231, 166, 243, 158, 153, 169, 176, 124, 13, 135, 221, 61, 128, }, { 79, 100, 29, 115, 198, 143, 140, 20, 135, 157, 192, 230, 150, 158, 117, 14, }, { 133, 220, 103, 51, 163, 94, 98, 211, 254, 245, 219, 102, 105, 201, 75, 216, }, { 69, 171, 35, 167, 195, 34, 112, 94, 208, 216, 103, 141, 120, 138, 3, 86, }, { 198, 50, 239, 216, 99, 166, 70, 10, 162, 175, 96, 115, 75, 79, 219, 7, }, { 6, 69, 171, 76, 3, 218, 84, 135, 140, 130, 220, 152, 90, 12, 147, 137, }, { 3, 195, 180, 38, 224, 109, 42, 162, 70, 65, 110, 76, 45, 6, 168, 165, }, { 195, 180, 240, 178, 128, 17, 56, 47, 104, 108, 210, 167, 60, 69, 224, 43, }, { 64, 45, 60, 205, 32, 149, 14, 123, 26, 27, 213, 89, 15, 128, 56, 122, }, { 128, 90, 120, 89, 64, 233, 28, 246, 52, 54, 105, 178, 30, 195, 112, 244, }, { 26, 85, 49, 118, 13, 25, 30, 36, 176, 51, 3, 236, 157, 52, 120, 167, }, { 218, 34, 117, 226, 109, 101, 12, 169, 158, 30, 191, 7, 140, 119, 48, 41, }, { 89, 187, 185, 157, 205, 225, 58, 253, 236, 105, 184, 249, 191, 178, 232, 120, }, { 153, 204, 253, 9, 173, 157, 40, 112, 194, 68, 4, 18, 174, 241, 160, 246, }, { 156, 74, 226, 99, 78, 42, 86, 85, 8, 135, 182, 198, 217, 251, 155, 218, }, { 92, 61, 166, 247, 46, 86, 68, 216, 38, 170, 10, 45, 200, 184, 211, 84, }, { 223, 164, 106, 136, 142, 210, 114, 140, 84, 221, 13, 211, 251, 125, 11, 5, }, { 31, 211, 46, 28, 238, 174, 96, 1, 122, 240, 177, 56, 234, 62, 67, 139, }, { 213, 107, 84, 92, 139, 127, 142, 198, 3, 152, 170, 184, 21, 105, 125, 93, }, { 21, 28, 16, 200, 235, 3, 156, 75, 45, 181, 22, 83, 4, 42, 53, 211, }, { 150, 133, 220, 183, 75, 135, 170, 31, 95, 194, 17, 173, 55, 239, 237, 130, }, { 86, 242, 152, 35, 43, 251, 184, 146, 113, 239, 173, 70, 38, 172, 165, 12, }, { 83, 116, 135, 73, 200, 76, 198, 183, 187, 44, 31, 146, 81, 166, 158, 32, }, { 147, 3, 195, 221, 168, 48, 212, 58, 149, 1, 163, 121, 64, 229, 214, 174, }, { 16, 154, 15, 162, 8, 180, 226, 110, 231, 118, 164, 135, 115, 32, 14, 255, }, { 208, 237, 75, 54, 104, 200, 240, 227, 201, 91, 24, 108, 98, 99, 70, 113, }, { 71, 41, 251, 34, 194, 213, 253, 35, 21, 166, 146, 68, 78, 142, 114, 144, }, { 135, 94, 191, 182, 162, 169, 239, 174, 59, 139, 46, 175, 95, 205, 58, 30, }, { 4, 199, 115, 201, 2, 45, 217, 250, 73, 252, 41, 81, 108, 8, 226, 79, }, { 196, 176, 55, 93, 98, 81, 203, 119, 103, 209, 149, 186, 125, 75, 170, 193, }, { 193, 54, 40, 55, 129, 230, 181, 82, 173, 18, 39, 110, 10, 65, 145, 237, }, { 1, 65, 108, 163, 225, 154, 167, 223, 131, 63, 155, 133, 27, 2, 217, 99, }, { 130, 216, 160, 220, 65, 30, 145, 139, 241, 72, 156, 123, 40, 199, 1, 50, }, { 66, 175, 228, 72, 33, 98, 131, 6, 223, 101, 32, 144, 57, 132, 73, 188, }, { 136, 23, 158, 8, 68, 179, 109, 193, 166, 13, 59, 16, 198, 211, 119, 106, }, { 72, 96, 218, 156, 36, 207, 127, 76, 136, 32, 135, 251, 215, 144, 63, 228, }, { 203, 249, 22, 227, 132, 75, 73, 24, 250, 87, 128, 5, 228, 85, 231, 181, }, { 11, 142, 82, 119, 228, 55, 91, 149, 212, 122, 60, 238, 245, 22, 175, 59, }, { 14, 8, 77, 29, 7, 128, 37, 176, 30, 185, 142, 58, 130, 28, 148, 23, }, { 206, 127, 9, 137, 103, 252, 55, 61, 48, 148, 50, 209, 147, 95, 220, 153, }, { 77, 230, 197, 246, 199, 120, 1, 105, 66, 227, 53, 47, 160, 154, 4, 200, }, { 141, 145, 129, 98, 167, 4, 19, 228, 108, 206, 137, 196, 177, 217, 76, 70, }, { 160, 173, 102, 222, 80, 66, 27, 42, 57, 218, 226, 127, 248, 131, 108, 201, }, { 96, 218, 34, 74, 48, 62, 9, 167, 23, 247, 94, 148, 233, 192, 36, 71, }, { 227, 67, 238, 53, 144, 186, 63, 243, 101, 128, 89, 106, 218, 5, 252, 22, }, { 35, 52, 170, 161, 240, 198, 45, 126, 75, 173, 229, 129, 203, 70, 180, 152, }, { 38, 178, 181, 203, 19, 113, 83, 91, 129, 110, 87, 85, 188, 76, 143, 180, }, { 230, 197, 241, 95, 115, 13, 65, 214, 175, 67, 235, 190, 173, 15, 199, 58, }, { 101, 92, 61, 32, 211, 137, 119, 130, 221, 52, 236, 64, 158, 202, 31, 107, }, { 165, 43, 121, 180, 179, 245, 101, 15, 243, 25, 80, 171, 143, 137, 87, 229, }, { 111, 147, 3, 244, 214, 36, 139, 200, 138, 113, 75, 43, 112, 222, 105, 51, }, { 175, 228, 71, 96, 182, 88, 153, 69, 164, 92, 247, 192, 97, 157, 33, 189, }, { 44, 125, 139, 31, 22, 220, 175, 17, 214, 43, 240, 62, 82, 88, 249, 236, }, { 236, 10, 207, 139, 118, 160, 189, 156, 248, 6, 76, 213, 67, 27, 177, 98, }, { 233, 140, 208, 225, 149, 23, 195, 185, 50, 197, 254, 1, 52, 17, 138, 78, }, { 41, 251, 148, 117, 245, 107, 209, 52, 28, 232, 66, 234, 37, 82, 194, 192, }, { 170, 98, 88, 10, 85, 239, 231, 96, 110, 159, 69, 20, 22, 151, 26, 145, }, { 106, 21, 28, 158, 53, 147, 245, 237, 64, 178, 249, 255, 7, 212, 82, 31, }, { 253, 209, 172, 138, 159, 142, 248, 45, 156, 79, 115, 215, 43, 57, 102, 254, }, { 61, 166, 232, 30, 255, 242, 234, 160, 178, 98, 207, 60, 58, 122, 46, 112, }, { 190, 63, 36, 97, 95, 118, 220, 244, 192, 21, 200, 194, 9, 191, 246, 33, }, { 126, 72, 96, 245, 63, 10, 206, 121, 238, 56, 116, 41, 24, 252, 190, 175, }, { 123, 206, 127, 159, 220, 189, 176, 92, 36, 251, 198, 253, 111, 246, 133, 131, }, { 187, 185, 59, 11, 188, 193, 162, 209, 10, 214, 122, 22, 126, 181, 205, 13, }, { 56, 32, 247, 116, 28, 69, 148, 133, 120, 161, 125, 232, 77, 112, 21, 92, }, { 248, 87, 179, 224, 124, 57, 134, 8, 86, 140, 193, 3, 92, 51, 93, 210, }, { 50, 239, 201, 160, 25, 232, 104, 207, 47, 228, 218, 131, 163, 100, 99, 4, }, { 242, 152, 141, 52, 121, 148, 122, 66, 1, 201, 102, 104, 178, 39, 43, 138, }, { 113, 1, 65, 75, 217, 16, 76, 22, 115, 190, 97, 150, 129, 226, 243, 219, }, { 177, 118, 5, 223, 185, 108, 94, 155, 93, 147, 221, 125, 144, 161, 187, 85, }, { 180, 240, 26, 181, 90, 219, 32, 190, 151, 80, 111, 169, 231, 171, 128, 121, }, { 116, 135, 94, 33, 58, 167, 50, 51, 185, 125, 211, 66, 246, 232, 200, 247, }, { 247, 30, 146, 94, 154, 35, 4, 103, 203, 10, 212, 188, 197, 45, 16, 166, }, { 55, 105, 214, 202, 250, 95, 22, 234, 229, 39, 104, 87, 212, 110, 88, 40, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 194, 93, 151, 243, 233, 26, 141, 203, 187, 6, 197, 32, 28, 104, 144, 147, }, { 71, 186, 237, 37, 17, 52, 217, 85, 181, 12, 73, 64, 56, 208, 227, 229, }, { 133, 231, 122, 214, 248, 46, 84, 158, 14, 10, 140, 96, 36, 184, 115, 118, }, { 142, 183, 25, 74, 34, 104, 113, 170, 169, 24, 146, 128, 112, 99, 5, 9, }, { 76, 234, 142, 185, 203, 114, 252, 97, 18, 30, 87, 160, 108, 11, 149, 154, }, { 201, 13, 244, 111, 51, 92, 168, 255, 28, 20, 219, 192, 72, 179, 230, 236, }, { 11, 80, 99, 156, 218, 70, 37, 52, 167, 18, 30, 224, 84, 219, 118, 127, }, { 223, 173, 50, 148, 68, 208, 226, 151, 145, 48, 231, 195, 224, 198, 10, 18, }, { 29, 240, 165, 103, 173, 202, 111, 92, 42, 54, 34, 227, 252, 174, 154, 129, }, { 152, 23, 223, 177, 85, 228, 59, 194, 36, 60, 174, 131, 216, 22, 233, 247, }, { 90, 74, 72, 66, 188, 254, 182, 9, 159, 58, 107, 163, 196, 126, 121, 100, }, { 81, 26, 43, 222, 102, 184, 147, 61, 56, 40, 117, 67, 144, 165, 15, 27, }, { 147, 71, 188, 45, 143, 162, 30, 246, 131, 46, 176, 99, 140, 205, 159, 136, }, { 22, 160, 198, 251, 119, 140, 74, 104, 141, 36, 60, 3, 168, 117, 236, 254, }, { 212, 253, 81, 8, 158, 150, 199, 163, 54, 34, 249, 35, 180, 29, 124, 109, }, { 125, 153, 100, 235, 136, 99, 7, 237, 225, 96, 13, 69, 3, 79, 20, 36, }, { 191, 196, 243, 24, 97, 121, 138, 38, 90, 102, 200, 101, 31, 39, 132, 183, }, { 58, 35, 137, 206, 153, 87, 222, 184, 84, 108, 68, 5, 59, 159, 247, 193, }, { 248, 126, 30, 61, 112, 77, 83, 115, 239, 106, 129, 37, 39, 247, 103, 82, }, { 243, 46, 125, 161, 170, 11, 118, 71, 72, 120, 159, 197, 115, 44, 17, 45, }, { 49, 115, 234, 82, 67, 17, 251, 140, 243, 126, 90, 229, 111, 68, 129, 190, }, { 180, 148, 144, 132, 187, 63, 175, 18, 253, 116, 214, 133, 75, 252, 242, 200, }, { 118, 201, 7, 119, 82, 37, 34, 217, 70, 114, 19, 165, 87, 148, 98, 91, }, { 162, 52, 86, 127, 204, 179, 229, 122, 112, 80, 234, 134, 227, 137, 30, 54, }, { 96, 105, 193, 140, 37, 169, 104, 177, 203, 86, 47, 166, 255, 225, 142, 165, }, { 229, 142, 187, 90, 221, 135, 60, 47, 197, 92, 163, 198, 219, 89, 253, 211, }, { 39, 211, 44, 169, 52, 157, 177, 228, 126, 90, 102, 230, 199, 49, 109, 64, }, { 44, 131, 79, 53, 238, 219, 148, 208, 217, 72, 120, 6, 147, 234, 27, 63, }, { 238, 222, 216, 198, 7, 193, 25, 27, 98, 78, 189, 38, 143, 130, 139, 172, }, { 107, 57, 162, 16, 255, 239, 77, 133, 108, 68, 49, 70, 171, 58, 248, 218, }, { 169, 100, 53, 227, 22, 245, 192, 78, 215, 66, 244, 102, 183, 82, 104, 73, }, { 250, 241, 200, 21, 211, 198, 14, 25, 1, 192, 26, 138, 6, 158, 40, 72, }, { 56, 172, 95, 230, 58, 220, 131, 210, 186, 198, 223, 170, 26, 246, 184, 219, }, { 189, 75, 37, 48, 194, 242, 215, 76, 180, 204, 83, 202, 62, 78, 203, 173, }, { 127, 22, 178, 195, 43, 232, 90, 135, 15, 202, 150, 234, 34, 38, 91, 62, }, { 116, 70, 209, 95, 241, 174, 127, 179, 168, 216, 136, 10, 118, 253, 45, 65, }, { 182, 27, 70, 172, 24, 180, 242, 120, 19, 222, 77, 42, 106, 149, 189, 210, }, { 51, 252, 60, 122, 224, 154, 166, 230, 29, 212, 193, 74, 78, 45, 206, 164, }, { 241, 161, 171, 137, 9, 128, 43, 45, 166, 210, 4, 106, 82, 69, 94, 55, }, { 37, 92, 250, 129, 151, 22, 236, 142, 144, 240, 253, 73, 230, 88, 34, 90, }, { 231, 1, 109, 114, 126, 12, 97, 69, 43, 246, 56, 105, 250, 48, 178, 201, }, { 98, 230, 23, 164, 134, 34, 53, 219, 37, 252, 180, 9, 222, 136, 193, 191, }, { 160, 187, 128, 87, 111, 56, 184, 16, 158, 250, 113, 41, 194, 224, 81, 44, }, { 171, 235, 227, 203, 181, 126, 157, 36, 57, 232, 111, 201, 150, 59, 39, 83, }, { 105, 182, 116, 56, 92, 100, 16, 239, 130, 238, 170, 233, 138, 83, 183, 192, }, { 236, 81, 14, 238, 164, 74, 68, 113, 140, 228, 38, 137, 174, 235, 196, 182, }, { 46, 12, 153, 29, 77, 80, 201, 186, 55, 226, 227, 169, 178, 131, 84, 37, }, { 135, 104, 172, 254, 91, 165, 9, 244, 224, 160, 23, 207, 5, 209, 60, 108, }, { 69, 53, 59, 13, 178, 191, 132, 63, 91, 166, 210, 239, 25, 185, 172, 255, }, { 192, 210, 65, 219, 74, 145, 208, 161, 85, 172, 94, 143, 61, 1, 223, 137, }, { 2, 143, 214, 40, 163, 139, 93, 106, 238, 170, 155, 175, 33, 105, 79, 26, }, { 9, 223, 181, 180, 121, 205, 120, 94, 73, 184, 133, 79, 117, 178, 57, 101, }, { 203, 130, 34, 71, 144, 215, 245, 149, 242, 190, 64, 111, 105, 218, 169, 246, }, { 78, 101, 88, 145, 104, 249, 161, 11, 252, 180, 204, 15, 77, 98, 218, 128, }, { 140, 56, 207, 98, 129, 227, 44, 192, 71, 178, 9, 47, 81, 10, 74, 19, }, { 88, 197, 158, 106, 31, 117, 235, 99, 113, 144, 240, 12, 229, 23, 54, 126, }, { 154, 152, 9, 153, 246, 111, 102, 168, 202, 150, 53, 44, 249, 127, 166, 237, }, { 31, 127, 115, 79, 14, 65, 50, 54, 196, 156, 185, 76, 221, 199, 213, 155, }, { 221, 34, 228, 188, 231, 91, 191, 253, 127, 154, 124, 108, 193, 175, 69, 8, }, { 214, 114, 135, 32, 61, 29, 154, 201, 216, 136, 98, 140, 149, 116, 51, 119, }, { 20, 47, 16, 211, 212, 7, 23, 2, 99, 142, 167, 172, 137, 28, 163, 228, }, { 145, 200, 106, 5, 44, 41, 67, 156, 109, 132, 43, 204, 173, 164, 208, 146, }, { 83, 149, 253, 246, 197, 51, 206, 87, 214, 130, 238, 236, 177, 204, 64, 1, }, { 55, 33, 83, 42, 101, 79, 28, 50, 2, 67, 52, 215, 12, 255, 80, 144, }, { 245, 124, 196, 217, 140, 85, 145, 249, 185, 69, 241, 247, 16, 151, 192, 3, }, { 112, 155, 190, 15, 116, 123, 197, 103, 183, 79, 125, 151, 52, 47, 179, 117, }, { 178, 198, 41, 252, 157, 97, 72, 172, 12, 73, 184, 183, 40, 71, 35, 230, }, { 185, 150, 74, 96, 71, 39, 109, 152, 171, 91, 166, 87, 124, 156, 85, 153, }, { 123, 203, 221, 147, 174, 61, 224, 83, 16, 93, 99, 119, 96, 244, 197, 10, }, { 254, 44, 167, 69, 86, 19, 180, 205, 30, 87, 239, 23, 68, 76, 182, 124, }, { 60, 113, 48, 182, 191, 9, 57, 6, 165, 81, 42, 55, 88, 36, 38, 239, }, { 232, 140, 97, 190, 33, 159, 254, 165, 147, 115, 211, 20, 236, 57, 90, 130, }, { 42, 209, 246, 77, 200, 133, 115, 110, 40, 117, 22, 52, 240, 81, 202, 17, }, { 175, 54, 140, 155, 48, 171, 39, 240, 38, 127, 154, 84, 212, 233, 185, 103, }, { 109, 107, 27, 104, 217, 177, 170, 59, 157, 121, 95, 116, 200, 129, 41, 244, }, { 102, 59, 120, 244, 3, 247, 143, 15, 58, 107, 65, 148, 156, 90, 95, 139, }, { 164, 102, 239, 7, 234, 237, 2, 196, 129, 109, 132, 180, 128, 50, 207, 24, }, { 33, 129, 149, 209, 18, 195, 86, 90, 143, 103, 8, 212, 164, 138, 188, 110, }, { 227, 220, 2, 34, 251, 217, 219, 145, 52, 97, 205, 244, 184, 226, 44, 253, }, { 74, 184, 55, 193, 237, 44, 27, 223, 227, 35, 57, 146, 15, 176, 68, 180, }, { 136, 229, 160, 50, 4, 54, 150, 20, 88, 37, 252, 178, 19, 216, 212, 39, }, { 13, 2, 218, 228, 252, 24, 194, 138, 86, 47, 112, 210, 55, 96, 167, 81, }, { 207, 95, 77, 23, 21, 2, 79, 65, 237, 41, 181, 242, 43, 8, 55, 194, }, { 196, 15, 46, 139, 207, 68, 106, 117, 74, 59, 171, 18, 127, 211, 65, 189, }, { 6, 82, 185, 120, 38, 94, 231, 190, 241, 61, 110, 50, 99, 187, 209, 46, }, { 131, 181, 195, 174, 222, 112, 179, 32, 255, 55, 226, 82, 71, 3, 162, 88, }, { 65, 232, 84, 93, 55, 106, 62, 235, 68, 49, 39, 114, 91, 107, 50, 203, }, { 149, 21, 5, 85, 169, 252, 249, 72, 114, 19, 222, 81, 239, 118, 78, 166, }, { 87, 72, 146, 166, 64, 230, 116, 131, 201, 21, 27, 113, 243, 30, 222, 53, }, { 210, 175, 232, 112, 184, 200, 32, 29, 199, 31, 151, 17, 215, 166, 173, 67, }, { 16, 242, 127, 131, 81, 210, 173, 214, 124, 25, 82, 49, 203, 206, 61, 208, }, { 27, 162, 28, 31, 139, 148, 136, 226, 219, 11, 76, 209, 159, 21, 75, 175, }, { 217, 255, 139, 236, 98, 142, 5, 41, 96, 13, 137, 241, 131, 125, 219, 60, }, { 92, 24, 241, 58, 154, 160, 81, 183, 110, 7, 5, 145, 167, 197, 168, 74, }, { 158, 69, 102, 201, 115, 186, 220, 124, 213, 1, 192, 177, 187, 173, 56, 217, }, { 205, 208, 155, 63, 182, 137, 18, 43, 3, 131, 46, 93, 10, 97, 120, 216, }, { 15, 141, 12, 204, 95, 147, 159, 224, 184, 133, 235, 125, 22, 9, 232, 75, }, { 138, 106, 118, 26, 167, 189, 203, 126, 182, 143, 103, 29, 50, 177, 155, 61, }, { 72, 55, 225, 233, 78, 167, 70, 181, 13, 137, 162, 61, 46, 217, 11, 174, }, { 67, 103, 130, 117, 148, 225, 99, 129, 170, 155, 188, 221, 122, 2, 125, 209, }, { 129, 58, 21, 134, 125, 251, 238, 74, 17, 157, 121, 253, 102, 106, 237, 66, }, { 4, 221, 111, 80, 133, 213, 186, 212, 31, 151, 245, 157, 66, 210, 158, 52, }, { 198, 128, 248, 163, 108, 207, 55, 31, 164, 145, 48, 189, 94, 186, 14, 167, }, { 18, 125, 169, 171, 242, 89, 240, 188, 146, 179, 201, 158, 234, 167, 114, 202, }, { 208, 32, 62, 88, 27, 67, 125, 119, 41, 181, 12, 190, 246, 207, 226, 89, }, { 85, 199, 68, 142, 227, 109, 41, 233, 39, 191, 128, 222, 210, 119, 145, 47, }, { 151, 154, 211, 125, 10, 119, 164, 34, 156, 185, 69, 254, 206, 31, 1, 188, }, { 156, 202, 176, 225, 208, 49, 129, 22, 59, 171, 91, 30, 154, 196, 119, 195, }, { 94, 151, 39, 18, 57, 43, 12, 221, 128, 173, 158, 62, 134, 172, 231, 80, }, { 219, 112, 93, 196, 193, 5, 88, 67, 142, 167, 18, 94, 162, 20, 148, 38, }, { 25, 45, 202, 55, 40, 31, 213, 136, 53, 161, 215, 126, 190, 124, 4, 181, }, { 176, 73, 255, 212, 62, 234, 21, 198, 226, 227, 35, 24, 9, 46, 108, 252, }, { 114, 20, 104, 39, 215, 240, 152, 13, 89, 229, 230, 56, 21, 70, 252, 111, }, { 247, 243, 18, 241, 47, 222, 204, 147, 87, 239, 106, 88, 49, 254, 143, 25, }, { 53, 174, 133, 2, 198, 196, 65, 88, 236, 233, 175, 120, 45, 150, 31, 138, }, { 62, 254, 230, 158, 28, 130, 100, 108, 75, 251, 177, 152, 121, 77, 105, 245, }, { 252, 163, 113, 109, 245, 152, 233, 167, 240, 253, 116, 184, 101, 37, 249, 102, }, { 121, 68, 11, 187, 13, 182, 189, 57, 254, 247, 248, 216, 65, 157, 138, 16, }, { 187, 25, 156, 72, 228, 172, 48, 242, 69, 241, 61, 248, 93, 245, 26, 131, }, { 111, 228, 205, 64, 122, 58, 247, 81, 115, 211, 196, 219, 233, 232, 102, 238, }, { 173, 185, 90, 179, 147, 32, 122, 154, 200, 213, 1, 251, 245, 128, 246, 125, }, { 40, 94, 32, 101, 107, 14, 46, 4, 198, 223, 141, 155, 209, 56, 133, 11, }, { 234, 3, 183, 150, 130, 20, 163, 207, 125, 217, 72, 187, 205, 80, 21, 152, }, { 225, 83, 212, 10, 88, 82, 134, 251, 218, 203, 86, 91, 153, 139, 99, 231, }, { 35, 14, 67, 249, 177, 72, 11, 48, 97, 205, 147, 123, 133, 227, 243, 116, }, { 166, 233, 57, 47, 73, 102, 95, 174, 111, 199, 31, 27, 161, 91, 128, 2, }, { 100, 180, 174, 220, 160, 124, 210, 101, 212, 193, 218, 59, 189, 51, 16, 145, }, { 110, 66, 166, 84, 202, 158, 56, 100, 4, 134, 104, 109, 24, 61, 160, 227, }, { 172, 31, 49, 167, 35, 132, 181, 175, 191, 128, 173, 77, 4, 85, 48, 112, }, { 41, 248, 75, 113, 219, 170, 225, 49, 177, 138, 33, 45, 32, 237, 67, 6, }, { 235, 165, 220, 130, 50, 176, 108, 250, 10, 140, 228, 13, 60, 133, 211, 149, }, { 224, 245, 191, 30, 232, 246, 73, 206, 173, 158, 250, 237, 104, 94, 165, 234, }, { 34, 168, 40, 237, 1, 236, 196, 5, 22, 152, 63, 205, 116, 54, 53, 121, }, { 167, 79, 82, 59, 249, 194, 144, 155, 24, 146, 179, 173, 80, 142, 70, 15, }, { 101, 18, 197, 200, 16, 216, 29, 80, 163, 148, 118, 141, 76, 230, 214, 156, }, { 177, 239, 148, 192, 142, 78, 218, 243, 149, 182, 143, 174, 248, 251, 170, 241, }, { 115, 178, 3, 51, 103, 84, 87, 56, 46, 176, 74, 142, 228, 147, 58, 98, }, { 246, 85, 121, 229, 159, 122, 3, 166, 32, 186, 198, 238, 192, 43, 73, 20, }, { 52, 8, 238, 22, 118, 96, 142, 109, 155, 188, 3, 206, 220, 67, 217, 135, }, { 63, 88, 141, 138, 172, 38, 171, 89, 60, 174, 29, 46, 136, 152, 175, 248, }, { 253, 5, 26, 121, 69, 60, 38, 146, 135, 168, 216, 14, 148, 240, 63, 107, }, { 120, 226, 96, 175, 189, 18, 114, 12, 137, 162, 84, 110, 176, 72, 76, 29, }, { 186, 191, 247, 92, 84, 8, 255, 199, 50, 164, 145, 78, 172, 32, 220, 142, }, { 19, 219, 194, 191, 66, 253, 63, 137, 229, 230, 101, 40, 27, 114, 180, 199, }, { 209, 134, 85, 76, 171, 231, 178, 66, 94, 224, 160, 8, 7, 26, 36, 84, }, { 84, 97, 47, 154, 83, 201, 230, 220, 80, 234, 44, 104, 35, 162, 87, 34, }, { 150, 60, 184, 105, 186, 211, 107, 23, 235, 236, 233, 72, 63, 202, 199, 177, }, { 157, 108, 219, 245, 96, 149, 78, 35, 76, 254, 247, 168, 107, 17, 177, 206, }, { 95, 49, 76, 6, 137, 143, 195, 232, 247, 248, 50, 136, 119, 121, 33, 93, }, { 218, 214, 54, 208, 113, 161, 151, 118, 249, 242, 190, 232, 83, 193, 82, 43, }, { 24, 139, 161, 35, 152, 187, 26, 189, 66, 244, 123, 200, 79, 169, 194, 184, }, { 204, 118, 240, 43, 6, 45, 221, 30, 116, 214, 130, 235, 251, 180, 190, 213, }, { 14, 43, 103, 216, 239, 55, 80, 213, 207, 208, 71, 203, 231, 220, 46, 70, }, { 139, 204, 29, 14, 23, 25, 4, 75, 193, 218, 203, 171, 195, 100, 93, 48, }, { 73, 145, 138, 253, 254, 3, 137, 128, 122, 220, 14, 139, 223, 12, 205, 163, }, { 66, 193, 233, 97, 36, 69, 172, 180, 221, 206, 16, 107, 139, 215, 187, 220, }, { 128, 156, 126, 146, 205, 95, 33, 127, 102, 200, 213, 75, 151, 191, 43, 79, }, { 5, 123, 4, 68, 53, 113, 117, 225, 104, 194, 89, 43, 179, 7, 88, 57, }, { 199, 38, 147, 183, 220, 107, 248, 42, 211, 196, 156, 11, 175, 111, 200, 170, }, { 148, 179, 110, 65, 25, 88, 54, 125, 5, 70, 114, 231, 30, 163, 136, 171, }, { 86, 238, 249, 178, 240, 66, 187, 182, 190, 64, 183, 199, 2, 203, 24, 56, }, { 211, 9, 131, 100, 8, 108, 239, 40, 176, 74, 59, 167, 38, 115, 107, 78, }, { 17, 84, 20, 151, 225, 118, 98, 227, 11, 76, 254, 135, 58, 27, 251, 221, }, { 26, 4, 119, 11, 59, 48, 71, 215, 172, 94, 224, 103, 110, 192, 141, 162, }, { 216, 89, 224, 248, 210, 42, 202, 28, 23, 88, 37, 71, 114, 168, 29, 49, }, { 93, 190, 154, 46, 42, 4, 158, 130, 25, 82, 169, 39, 86, 16, 110, 71, }, { 159, 227, 13, 221, 195, 30, 19, 73, 162, 84, 108, 7, 74, 120, 254, 212, }, { 75, 30, 92, 213, 93, 136, 212, 234, 148, 118, 149, 36, 254, 101, 130, 185, }, { 137, 67, 203, 38, 180, 146, 89, 33, 47, 112, 80, 4, 226, 13, 18, 42, }, { 12, 164, 177, 240, 76, 188, 13, 191, 33, 122, 220, 100, 198, 181, 97, 92, }, { 206, 249, 38, 3, 165, 166, 128, 116, 154, 124, 25, 68, 218, 221, 241, 207, }, { 197, 169, 69, 159, 127, 224, 165, 64, 61, 110, 7, 164, 142, 6, 135, 176, }, { 7, 244, 210, 108, 150, 250, 40, 139, 134, 104, 194, 132, 146, 110, 23, 35, }, { 130, 19, 168, 186, 110, 212, 124, 21, 136, 98, 78, 228, 182, 214, 100, 85, }, { 64, 78, 63, 73, 135, 206, 241, 222, 51, 100, 139, 196, 170, 190, 244, 198, }, { 233, 42, 10, 170, 145, 59, 49, 144, 228, 38, 127, 162, 29, 236, 156, 143, }, { 43, 119, 157, 89, 120, 33, 188, 91, 95, 32, 186, 130, 1, 132, 12, 28, }, { 174, 144, 231, 143, 128, 15, 232, 197, 81, 42, 54, 226, 37, 60, 127, 106, }, { 108, 205, 112, 124, 105, 21, 101, 14, 234, 44, 243, 194, 57, 84, 239, 249, }, { 103, 157, 19, 224, 179, 83, 64, 58, 77, 62, 237, 34, 109, 143, 153, 134, }, { 165, 192, 132, 19, 90, 73, 205, 241, 246, 56, 40, 2, 113, 231, 9, 21, }, { 32, 39, 254, 197, 162, 103, 153, 111, 248, 50, 164, 98, 85, 95, 122, 99, }, { 226, 122, 105, 54, 75, 125, 20, 164, 67, 52, 97, 66, 73, 55, 234, 240, }, { 54, 135, 56, 62, 213, 235, 211, 7, 117, 22, 152, 97, 253, 42, 150, 157, }, { 244, 218, 175, 205, 60, 241, 94, 204, 206, 16, 93, 65, 225, 66, 6, 14, }, { 113, 61, 213, 27, 196, 223, 10, 82, 192, 26, 209, 33, 197, 250, 117, 120, }, { 179, 96, 66, 232, 45, 197, 135, 153, 123, 28, 20, 1, 217, 146, 229, 235, }, { 184, 48, 33, 116, 247, 131, 162, 173, 220, 14, 10, 225, 141, 73, 147, 148, }, { 122, 109, 182, 135, 30, 153, 47, 102, 103, 8, 207, 193, 145, 33, 3, 7, }, { 255, 138, 204, 81, 230, 183, 123, 248, 105, 2, 67, 161, 181, 153, 112, 113, }, { 61, 215, 91, 162, 15, 173, 246, 51, 210, 4, 134, 129, 169, 241, 224, 226, }, { 89, 99, 245, 126, 175, 209, 36, 86, 6, 197, 92, 186, 20, 194, 240, 115, }, { 155, 62, 98, 141, 70, 203, 169, 157, 189, 195, 153, 154, 8, 170, 96, 224, }, { 30, 217, 24, 91, 190, 229, 253, 3, 179, 201, 21, 250, 44, 18, 19, 150, }, { 220, 132, 143, 168, 87, 255, 112, 200, 8, 207, 208, 218, 48, 122, 131, 5, }, { 215, 212, 236, 52, 141, 185, 85, 252, 175, 221, 206, 58, 100, 161, 245, 122, }, { 21, 137, 123, 199, 100, 163, 216, 55, 20, 219, 11, 26, 120, 201, 101, 233, }, { 144, 110, 1, 17, 156, 141, 140, 169, 26, 209, 135, 122, 92, 113, 22, 159, }, { 82, 51, 150, 226, 117, 151, 1, 98, 161, 215, 66, 90, 64, 25, 134, 12, }, { 134, 206, 199, 234, 235, 1, 198, 193, 151, 245, 187, 121, 244, 4, 250, 97, }, { 68, 147, 80, 25, 2, 27, 75, 10, 44, 243, 126, 89, 232, 108, 106, 242, }, { 193, 116, 42, 207, 250, 53, 31, 148, 34, 249, 242, 57, 204, 212, 25, 132, }, { 3, 41, 189, 60, 19, 47, 146, 95, 153, 255, 55, 25, 208, 188, 137, 23, }, { 8, 121, 222, 160, 201, 105, 183, 107, 62, 237, 41, 249, 132, 103, 255, 104, }, { 202, 36, 73, 83, 32, 115, 58, 160, 133, 235, 236, 217, 152, 15, 111, 251, }, { 79, 195, 51, 133, 216, 93, 110, 62, 139, 225, 96, 185, 188, 183, 28, 141, }, { 141, 158, 164, 118, 49, 71, 227, 245, 48, 231, 165, 153, 160, 223, 140, 30, }, { 36, 250, 145, 149, 39, 178, 35, 187, 231, 165, 81, 255, 23, 141, 228, 87, }, { 230, 167, 6, 102, 206, 168, 174, 112, 92, 163, 148, 223, 11, 229, 116, 196, }, { 99, 64, 124, 176, 54, 134, 250, 238, 82, 169, 24, 191, 47, 93, 7, 178, }, { 161, 29, 235, 67, 223, 156, 119, 37, 233, 175, 221, 159, 51, 53, 151, 33, }, { 170, 77, 136, 223, 5, 218, 82, 17, 78, 189, 195, 127, 103, 238, 225, 94, }, { 104, 16, 31, 44, 236, 192, 223, 218, 245, 187, 6, 95, 123, 134, 113, 205, }, { 237, 247, 101, 250, 20, 238, 139, 68, 251, 177, 138, 63, 95, 62, 2, 187, }, { 47, 170, 242, 9, 253, 244, 6, 143, 64, 183, 79, 31, 67, 86, 146, 40, }, { 251, 87, 163, 1, 99, 98, 193, 44, 118, 149, 182, 60, 247, 75, 238, 69, }, { 57, 10, 52, 242, 138, 120, 76, 231, 205, 147, 115, 28, 235, 35, 126, 214, }, { 188, 237, 78, 36, 114, 86, 24, 121, 195, 153, 255, 124, 207, 155, 13, 160, }, { 126, 176, 217, 215, 155, 76, 149, 178, 120, 159, 58, 92, 211, 243, 157, 51, }, { 117, 224, 186, 75, 65, 10, 176, 134, 223, 141, 36, 188, 135, 40, 235, 76, }, { 183, 189, 45, 184, 168, 16, 61, 77, 100, 139, 225, 156, 155, 64, 123, 223, }, { 50, 90, 87, 110, 80, 62, 105, 211, 106, 129, 109, 252, 191, 248, 8, 169, }, { 240, 7, 192, 157, 185, 36, 228, 24, 209, 135, 168, 220, 163, 144, 152, 58, }, { 163, 146, 61, 107, 124, 23, 42, 79, 7, 5, 70, 48, 18, 92, 216, 59, }, { 97, 207, 170, 152, 149, 13, 167, 132, 188, 3, 131, 16, 14, 52, 72, 168, }, { 228, 40, 208, 78, 109, 35, 243, 26, 178, 9, 15, 112, 42, 140, 59, 222, }, { 38, 117, 71, 189, 132, 57, 126, 209, 9, 15, 202, 80, 54, 228, 171, 77, }, { 45, 37, 36, 33, 94, 127, 91, 229, 174, 29, 212, 176, 98, 63, 221, 50, }, { 239, 120, 179, 210, 183, 101, 214, 46, 21, 27, 17, 144, 126, 87, 77, 161, }, { 106, 159, 201, 4, 79, 75, 130, 176, 27, 17, 157, 240, 90, 239, 62, 215, }, { 168, 194, 94, 247, 166, 81, 15, 123, 160, 23, 88, 208, 70, 135, 174, 68, }, { 124, 63, 15, 255, 56, 199, 200, 216, 150, 53, 161, 243, 242, 154, 210, 41, }, { 190, 98, 152, 12, 209, 221, 69, 19, 45, 51, 100, 211, 238, 242, 66, 186, }, { 59, 133, 226, 218, 41, 243, 17, 141, 35, 57, 232, 179, 202, 74, 49, 204, }, { 249, 216, 117, 41, 192, 233, 156, 70, 152, 63, 45, 147, 214, 34, 161, 95, }, { 242, 136, 22, 181, 26, 175, 185, 114, 63, 45, 51, 115, 130, 249, 215, 32, }, { 48, 213, 129, 70, 243, 181, 52, 185, 132, 43, 246, 83, 158, 145, 71, 179, }, { 181, 50, 251, 144, 11, 155, 96, 39, 138, 33, 122, 51, 186, 41, 52, 197, }, { 119, 111, 108, 99, 226, 129, 237, 236, 49, 39, 191, 19, 166, 65, 164, 86, }, { 222, 11, 89, 128, 244, 116, 45, 162, 230, 101, 75, 117, 17, 19, 204, 31, }, { 28, 86, 206, 115, 29, 110, 160, 105, 93, 99, 142, 85, 13, 123, 92, 140, }, { 153, 177, 180, 165, 229, 64, 244, 247, 83, 105, 2, 53, 41, 195, 47, 250, }, { 91, 236, 35, 86, 12, 90, 121, 60, 232, 111, 199, 21, 53, 171, 191, 105, }, { 80, 188, 64, 202, 214, 28, 92, 8, 79, 125, 217, 245, 97, 112, 201, 22, }, { 146, 225, 215, 57, 63, 6, 209, 195, 244, 123, 28, 213, 125, 24, 89, 133, }, { 23, 6, 173, 239, 199, 40, 133, 93, 250, 113, 144, 181, 89, 160, 42, 243, }, { 213, 91, 58, 28, 46, 50, 8, 150, 65, 119, 85, 149, 69, 200, 186, 96, }, { 1, 166, 107, 20, 176, 164, 207, 53, 119, 85, 172, 182, 241, 213, 198, 13, }, { 195, 251, 252, 231, 89, 190, 66, 254, 204, 83, 105, 150, 237, 189, 86, 158, }, { 70, 28, 134, 49, 161, 144, 22, 96, 194, 89, 229, 246, 201, 5, 37, 232, }, { 132, 65, 17, 194, 72, 138, 155, 171, 121, 95, 32, 214, 213, 109, 181, 123, }, { 143, 17, 114, 94, 146, 204, 190, 159, 222, 77, 62, 54, 129, 182, 195, 4, }, { 77, 76, 229, 173, 123, 214, 51, 84, 101, 75, 251, 22, 157, 222, 83, 151, }, { 200, 171, 159, 123, 131, 248, 103, 202, 107, 65, 119, 118, 185, 102, 32, 225, }, { 10, 246, 8, 136, 106, 226, 234, 1, 208, 71, 178, 86, 165, 14, 176, 114, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 16, 150, 202, 217, 48, 104, 47, 20, 26, 23, 12, 202, 12, 112, 218, 191, }, { 32, 239, 87, 113, 96, 208, 94, 40, 52, 46, 24, 87, 24, 224, 119, 189, }, { 48, 121, 157, 168, 80, 184, 113, 60, 46, 57, 20, 157, 20, 144, 173, 2, }, { 64, 29, 174, 226, 192, 99, 188, 80, 104, 92, 48, 174, 48, 3, 238, 185, }, { 80, 139, 100, 59, 240, 11, 147, 68, 114, 75, 60, 100, 60, 115, 52, 6, }, { 96, 242, 249, 147, 160, 179, 226, 120, 92, 114, 40, 249, 40, 227, 153, 4, }, { 112, 100, 51, 74, 144, 219, 205, 108, 70, 101, 36, 51, 36, 147, 67, 187, }, { 128, 58, 159, 7, 67, 198, 187, 160, 208, 184, 96, 159, 96, 6, 31, 177, }, { 144, 172, 85, 222, 115, 174, 148, 180, 202, 175, 108, 85, 108, 118, 197, 14, }, { 160, 213, 200, 118, 35, 22, 229, 136, 228, 150, 120, 200, 120, 230, 104, 12, }, { 176, 67, 2, 175, 19, 126, 202, 156, 254, 129, 116, 2, 116, 150, 178, 179, }, { 192, 39, 49, 229, 131, 165, 7, 240, 184, 228, 80, 49, 80, 5, 241, 8, }, { 208, 177, 251, 60, 179, 205, 40, 228, 162, 243, 92, 251, 92, 117, 43, 183, }, { 224, 200, 102, 148, 227, 117, 89, 216, 140, 202, 72, 102, 72, 229, 134, 181, }, { 240, 94, 172, 77, 211, 29, 118, 204, 150, 221, 68, 172, 68, 149, 92, 10, }, { 195, 116, 253, 14, 134, 79, 181, 131, 99, 179, 192, 253, 192, 12, 62, 161, }, { 211, 226, 55, 215, 182, 39, 154, 151, 121, 164, 204, 55, 204, 124, 228, 30, }, { 227, 155, 170, 127, 230, 159, 235, 171, 87, 157, 216, 170, 216, 236, 73, 28, }, { 243, 13, 96, 166, 214, 247, 196, 191, 77, 138, 212, 96, 212, 156, 147, 163, }, { 131, 105, 83, 236, 70, 44, 9, 211, 11, 239, 240, 83, 240, 15, 208, 24, }, { 147, 255, 153, 53, 118, 68, 38, 199, 17, 248, 252, 153, 252, 127, 10, 167, }, { 163, 134, 4, 157, 38, 252, 87, 251, 63, 193, 232, 4, 232, 239, 167, 165, }, { 179, 16, 206, 68, 22, 148, 120, 239, 37, 214, 228, 206, 228, 159, 125, 26, }, { 67, 78, 98, 9, 197, 137, 14, 35, 179, 11, 160, 98, 160, 10, 33, 16, }, { 83, 216, 168, 208, 245, 225, 33, 55, 169, 28, 172, 168, 172, 122, 251, 175, }, { 99, 161, 53, 120, 165, 89, 80, 11, 135, 37, 184, 53, 184, 234, 86, 173, }, { 115, 55, 255, 161, 149, 49, 127, 31, 157, 50, 180, 255, 180, 154, 140, 18, }, { 3, 83, 204, 235, 5, 234, 178, 115, 219, 87, 144, 204, 144, 9, 207, 169, }, { 19, 197, 6, 50, 53, 130, 157, 103, 193, 64, 156, 6, 156, 121, 21, 22, }, { 35, 188, 155, 154, 101, 58, 236, 91, 239, 121, 136, 155, 136, 233, 184, 20, }, { 51, 42, 81, 67, 85, 82, 195, 79, 245, 110, 132, 81, 132, 153, 98, 171, }, { 69, 232, 57, 28, 207, 158, 169, 197, 198, 165, 67, 57, 67, 24, 124, 129, }, { 85, 126, 243, 197, 255, 246, 134, 209, 220, 178, 79, 243, 79, 104, 166, 62, }, { 101, 7, 110, 109, 175, 78, 247, 237, 242, 139, 91, 110, 91, 248, 11, 60, }, { 117, 145, 164, 180, 159, 38, 216, 249, 232, 156, 87, 164, 87, 136, 209, 131, }, { 5, 245, 151, 254, 15, 253, 21, 149, 174, 249, 115, 151, 115, 27, 146, 56, }, { 21, 99, 93, 39, 63, 149, 58, 129, 180, 238, 127, 93, 127, 107, 72, 135, }, { 37, 26, 192, 143, 111, 45, 75, 189, 154, 215, 107, 192, 107, 251, 229, 133, }, { 53, 140, 10, 86, 95, 69, 100, 169, 128, 192, 103, 10, 103, 139, 63, 58, }, { 197, 210, 166, 27, 140, 88, 18, 101, 22, 29, 35, 166, 35, 30, 99, 48, }, { 213, 68, 108, 194, 188, 48, 61, 113, 12, 10, 47, 108, 47, 110, 185, 143, }, { 229, 61, 241, 106, 236, 136, 76, 77, 34, 51, 59, 241, 59, 254, 20, 141, }, { 245, 171, 59, 179, 220, 224, 99, 89, 56, 36, 55, 59, 55, 142, 206, 50, }, { 133, 207, 8, 249, 76, 59, 174, 53, 126, 65, 19, 8, 19, 29, 141, 137, }, { 149, 89, 194, 32, 124, 83, 129, 33, 100, 86, 31, 194, 31, 109, 87, 54, }, { 165, 32, 95, 136, 44, 235, 240, 29, 74, 111, 11, 95, 11, 253, 250, 52, }, { 181, 182, 149, 81, 28, 131, 223, 9, 80, 120, 7, 149, 7, 141, 32, 139, }, { 134, 156, 196, 18, 73, 209, 28, 70, 165, 22, 131, 196, 131, 20, 66, 32, }, { 150, 10, 14, 203, 121, 185, 51, 82, 191, 1, 143, 14, 143, 100, 152, 159, }, { 166, 115, 147, 99, 41, 1, 66, 110, 145, 56, 155, 147, 155, 244, 53, 157, }, { 182, 229, 89, 186, 25, 105, 109, 122, 139, 47, 151, 89, 151, 132, 239, 34, }, { 198, 129, 106, 240, 137, 178, 160, 22, 205, 74, 179, 106, 179, 23, 172, 153, }, { 214, 23, 160, 41, 185, 218, 143, 2, 215, 93, 191, 160, 191, 103, 118, 38, }, { 230, 110, 61, 129, 233, 98, 254, 62, 249, 100, 171, 61, 171, 247, 219, 36, }, { 246, 248, 247, 88, 217, 10, 209, 42, 227, 115, 167, 247, 167, 135, 1, 155, }, { 6, 166, 91, 21, 10, 23, 167, 230, 117, 174, 227, 91, 227, 18, 93, 145, }, { 22, 48, 145, 204, 58, 127, 136, 242, 111, 185, 239, 145, 239, 98, 135, 46, }, { 38, 73, 12, 100, 106, 199, 249, 206, 65, 128, 251, 12, 251, 242, 42, 44, }, { 54, 223, 198, 189, 90, 175, 214, 218, 91, 151, 247, 198, 247, 130, 240, 147, }, { 70, 187, 245, 247, 202, 116, 27, 182, 29, 242, 211, 245, 211, 17, 179, 40, }, { 86, 45, 63, 46, 250, 28, 52, 162, 7, 229, 223, 63, 223, 97, 105, 151, }, { 102, 84, 162, 134, 170, 164, 69, 158, 41, 220, 203, 162, 203, 241, 196, 149, }, { 118, 194, 104, 95, 154, 204, 106, 138, 51, 203, 199, 104, 199, 129, 30, 42, }, { 138, 19, 114, 56, 93, 255, 145, 73, 79, 137, 134, 114, 134, 48, 248, 193, }, { 154, 133, 184, 225, 109, 151, 190, 93, 85, 158, 138, 184, 138, 64, 34, 126, }, { 170, 252, 37, 73, 61, 47, 207, 97, 123, 167, 158, 37, 158, 208, 143, 124, }, { 186, 106, 239, 144, 13, 71, 224, 117, 97, 176, 146, 239, 146, 160, 85, 195, }, { 202, 14, 220, 218, 157, 156, 45, 25, 39, 213, 182, 220, 182, 51, 22, 120, }, { 218, 152, 22, 3, 173, 244, 2, 13, 61, 194, 186, 22, 186, 67, 204, 199, }, { 234, 225, 139, 171, 253, 76, 115, 49, 19, 251, 174, 139, 174, 211, 97, 197, }, { 250, 119, 65, 114, 205, 36, 92, 37, 9, 236, 162, 65, 162, 163, 187, 122, }, { 10, 41, 237, 63, 30, 57, 42, 233, 159, 49, 230, 237, 230, 54, 231, 112, }, { 26, 191, 39, 230, 46, 81, 5, 253, 133, 38, 234, 39, 234, 70, 61, 207, }, { 42, 198, 186, 78, 126, 233, 116, 193, 171, 31, 254, 186, 254, 214, 144, 205, }, { 58, 80, 112, 151, 78, 129, 91, 213, 177, 8, 242, 112, 242, 166, 74, 114, }, { 74, 52, 67, 221, 222, 90, 150, 185, 247, 109, 214, 67, 214, 53, 9, 201, }, { 90, 162, 137, 4, 238, 50, 185, 173, 237, 122, 218, 137, 218, 69, 211, 118, }, { 106, 219, 20, 172, 190, 138, 200, 145, 195, 67, 206, 20, 206, 213, 126, 116, }, { 122, 77, 222, 117, 142, 226, 231, 133, 217, 84, 194, 222, 194, 165, 164, 203, }, { 73, 103, 143, 54, 219, 176, 36, 202, 44, 58, 70, 143, 70, 60, 198, 96, }, { 89, 241, 69, 239, 235, 216, 11, 222, 54, 45, 74, 69, 74, 76, 28, 223, }, { 105, 136, 216, 71, 187, 96, 122, 226, 24, 20, 94, 216, 94, 220, 177, 221, }, { 121, 30, 18, 158, 139, 8, 85, 246, 2, 3, 82, 18, 82, 172, 107, 98, }, { 9, 122, 33, 212, 27, 211, 152, 154, 68, 102, 118, 33, 118, 63, 40, 217, }, { 25, 236, 235, 13, 43, 187, 183, 142, 94, 113, 122, 235, 122, 79, 242, 102, }, { 41, 149, 118, 165, 123, 3, 198, 178, 112, 72, 110, 118, 110, 223, 95, 100, }, { 57, 3, 188, 124, 75, 107, 233, 166, 106, 95, 98, 188, 98, 175, 133, 219, }, { 201, 93, 16, 49, 152, 118, 159, 106, 252, 130, 38, 16, 38, 58, 217, 209, }, { 217, 203, 218, 232, 168, 30, 176, 126, 230, 149, 42, 218, 42, 74, 3, 110, }, { 233, 178, 71, 64, 248, 166, 193, 66, 200, 172, 62, 71, 62, 218, 174, 108, }, { 249, 36, 141, 153, 200, 206, 238, 86, 210, 187, 50, 141, 50, 170, 116, 211, }, { 137, 64, 190, 211, 88, 21, 35, 58, 148, 222, 22, 190, 22, 57, 55, 104, }, { 153, 214, 116, 10, 104, 125, 12, 46, 142, 201, 26, 116, 26, 73, 237, 215, }, { 169, 175, 233, 162, 56, 197, 125, 18, 160, 240, 14, 233, 14, 217, 64, 213, }, { 185, 57, 35, 123, 8, 173, 82, 6, 186, 231, 2, 35, 2, 169, 154, 106, }, { 207, 251, 75, 36, 146, 97, 56, 140, 137, 44, 197, 75, 197, 40, 132, 64, }, { 223, 109, 129, 253, 162, 9, 23, 152, 147, 59, 201, 129, 201, 88, 94, 255, }, { 239, 20, 28, 85, 242, 177, 102, 164, 189, 2, 221, 28, 221, 200, 243, 253, }, { 255, 130, 214, 140, 194, 217, 73, 176, 167, 21, 209, 214, 209, 184, 41, 66, }, { 143, 230, 229, 198, 82, 2, 132, 220, 225, 112, 245, 229, 245, 43, 106, 249, }, { 159, 112, 47, 31, 98, 106, 171, 200, 251, 103, 249, 47, 249, 91, 176, 70, }, { 175, 9, 178, 183, 50, 210, 218, 244, 213, 94, 237, 178, 237, 203, 29, 68, }, { 191, 159, 120, 110, 2, 186, 245, 224, 207, 73, 225, 120, 225, 187, 199, 251, }, { 79, 193, 212, 35, 209, 167, 131, 44, 89, 148, 165, 212, 165, 46, 155, 241, }, { 95, 87, 30, 250, 225, 207, 172, 56, 67, 131, 169, 30, 169, 94, 65, 78, }, { 111, 46, 131, 82, 177, 119, 221, 4, 109, 186, 189, 131, 189, 206, 236, 76, }, { 127, 184, 73, 139, 129, 31, 242, 16, 119, 173, 177, 73, 177, 190, 54, 243, }, { 15, 220, 122, 193, 17, 196, 63, 124, 49, 200, 149, 122, 149, 45, 117, 72, }, { 31, 74, 176, 24, 33, 172, 16, 104, 43, 223, 153, 176, 153, 93, 175, 247, }, { 47, 51, 45, 176, 113, 20, 97, 84, 5, 230, 141, 45, 141, 205, 2, 245, }, { 63, 165, 231, 105, 65, 124, 78, 64, 31, 241, 129, 231, 129, 189, 216, 74, }, { 12, 143, 182, 42, 20, 46, 141, 15, 234, 159, 5, 182, 5, 36, 186, 225, }, { 28, 25, 124, 243, 36, 70, 162, 27, 240, 136, 9, 124, 9, 84, 96, 94, }, { 44, 96, 225, 91, 116, 254, 211, 39, 222, 177, 29, 225, 29, 196, 205, 92, }, { 60, 246, 43, 130, 68, 150, 252, 51, 196, 166, 17, 43, 17, 180, 23, 227, }, { 76, 146, 24, 200, 212, 77, 49, 95, 130, 195, 53, 24, 53, 39, 84, 88, }, { 92, 4, 210, 17, 228, 37, 30, 75, 152, 212, 57, 210, 57, 87, 142, 231, }, { 108, 125, 79, 185, 180, 157, 111, 119, 182, 237, 45, 79, 45, 199, 35, 229, }, { 124, 235, 133, 96, 132, 245, 64, 99, 172, 250, 33, 133, 33, 183, 249, 90, }, { 140, 181, 41, 45, 87, 232, 54, 175, 58, 39, 101, 41, 101, 34, 165, 80, }, { 156, 35, 227, 244, 103, 128, 25, 187, 32, 48, 105, 227, 105, 82, 127, 239, }, { 172, 90, 126, 92, 55, 56, 104, 135, 14, 9, 125, 126, 125, 194, 210, 237, }, { 188, 204, 180, 133, 7, 80, 71, 147, 20, 30, 113, 180, 113, 178, 8, 82, }, { 204, 168, 135, 207, 151, 139, 138, 255, 82, 123, 85, 135, 85, 33, 75, 233, }, { 220, 62, 77, 22, 167, 227, 165, 235, 72, 108, 89, 77, 89, 81, 145, 86, }, { 236, 71, 208, 190, 247, 91, 212, 215, 102, 85, 77, 208, 77, 193, 60, 84, }, { 252, 209, 26, 103, 199, 51, 251, 195, 124, 66, 65, 26, 65, 177, 230, 235, }, { 215, 38, 228, 112, 186, 61, 225, 146, 158, 209, 207, 228, 207, 96, 51, 65, }, { 199, 176, 46, 169, 138, 85, 206, 134, 132, 198, 195, 46, 195, 16, 233, 254, }, { 247, 201, 179, 1, 218, 237, 191, 186, 170, 255, 215, 179, 215, 128, 68, 252, }, { 231, 95, 121, 216, 234, 133, 144, 174, 176, 232, 219, 121, 219, 240, 158, 67, }, { 151, 59, 74, 146, 122, 94, 93, 194, 246, 141, 255, 74, 255, 99, 221, 248, }, { 135, 173, 128, 75, 74, 54, 114, 214, 236, 154, 243, 128, 243, 19, 7, 71, }, { 183, 212, 29, 227, 26, 142, 3, 234, 194, 163, 231, 29, 231, 131, 170, 69, }, { 167, 66, 215, 58, 42, 230, 44, 254, 216, 180, 235, 215, 235, 243, 112, 250, }, { 87, 28, 123, 119, 249, 251, 90, 50, 78, 105, 175, 123, 175, 102, 44, 240, }, { 71, 138, 177, 174, 201, 147, 117, 38, 84, 126, 163, 177, 163, 22, 246, 79, }, { 119, 243, 44, 6, 153, 43, 4, 26, 122, 71, 183, 44, 183, 134, 91, 77, }, { 103, 101, 230, 223, 169, 67, 43, 14, 96, 80, 187, 230, 187, 246, 129, 242, }, { 23, 1, 213, 149, 57, 152, 230, 98, 38, 53, 159, 213, 159, 101, 194, 73, }, { 7, 151, 31, 76, 9, 240, 201, 118, 60, 34, 147, 31, 147, 21, 24, 246, }, { 55, 238, 130, 228, 89, 72, 184, 74, 18, 27, 135, 130, 135, 133, 181, 244, }, { 39, 120, 72, 61, 105, 32, 151, 94, 8, 12, 139, 72, 139, 245, 111, 75, }, { 20, 82, 25, 126, 60, 114, 84, 17, 253, 98, 15, 25, 15, 108, 13, 224, }, { 4, 196, 211, 167, 12, 26, 123, 5, 231, 117, 3, 211, 3, 28, 215, 95, }, { 52, 189, 78, 15, 92, 162, 10, 57, 201, 76, 23, 78, 23, 140, 122, 93, }, { 36, 43, 132, 214, 108, 202, 37, 45, 211, 91, 27, 132, 27, 252, 160, 226, }, { 84, 79, 183, 156, 252, 17, 232, 65, 149, 62, 63, 183, 63, 111, 227, 89, }, { 68, 217, 125, 69, 204, 121, 199, 85, 143, 41, 51, 125, 51, 31, 57, 230, }, { 116, 160, 224, 237, 156, 193, 182, 105, 161, 16, 39, 224, 39, 143, 148, 228, }, { 100, 54, 42, 52, 172, 169, 153, 125, 187, 7, 43, 42, 43, 255, 78, 91, }, { 148, 104, 134, 121, 127, 180, 239, 177, 45, 218, 111, 134, 111, 106, 18, 81, }, { 132, 254, 76, 160, 79, 220, 192, 165, 55, 205, 99, 76, 99, 26, 200, 238, }, { 180, 135, 209, 8, 31, 100, 177, 153, 25, 244, 119, 209, 119, 138, 101, 236, }, { 164, 17, 27, 209, 47, 12, 158, 141, 3, 227, 123, 27, 123, 250, 191, 83, }, { 212, 117, 40, 155, 191, 215, 83, 225, 69, 134, 95, 40, 95, 105, 252, 232, }, { 196, 227, 226, 66, 143, 191, 124, 245, 95, 145, 83, 226, 83, 25, 38, 87, }, { 244, 154, 127, 234, 223, 7, 13, 201, 113, 168, 71, 127, 71, 137, 139, 85, }, { 228, 12, 181, 51, 239, 111, 34, 221, 107, 191, 75, 181, 75, 249, 81, 234, }, { 146, 206, 221, 108, 117, 163, 72, 87, 88, 116, 140, 221, 140, 120, 79, 192, }, { 130, 88, 23, 181, 69, 203, 103, 67, 66, 99, 128, 23, 128, 8, 149, 127, }, { 178, 33, 138, 29, 21, 115, 22, 127, 108, 90, 148, 138, 148, 152, 56, 125, }, { 162, 183, 64, 196, 37, 27, 57, 107, 118, 77, 152, 64, 152, 232, 226, 194, }, { 210, 211, 115, 142, 181, 192, 244, 7, 48, 40, 188, 115, 188, 123, 161, 121, }, { 194, 69, 185, 87, 133, 168, 219, 19, 42, 63, 176, 185, 176, 11, 123, 198, }, { 242, 60, 36, 255, 213, 16, 170, 47, 4, 6, 164, 36, 164, 155, 214, 196, }, { 226, 170, 238, 38, 229, 120, 133, 59, 30, 17, 168, 238, 168, 235, 12, 123, }, { 18, 244, 66, 107, 54, 101, 243, 247, 136, 204, 236, 66, 236, 126, 80, 113, }, { 2, 98, 136, 178, 6, 13, 220, 227, 146, 219, 224, 136, 224, 14, 138, 206, }, { 50, 27, 21, 26, 86, 181, 173, 223, 188, 226, 244, 21, 244, 158, 39, 204, }, { 34, 141, 223, 195, 102, 221, 130, 203, 166, 245, 248, 223, 248, 238, 253, 115, }, { 82, 233, 236, 137, 246, 6, 79, 167, 224, 144, 220, 236, 220, 125, 190, 200, }, { 66, 127, 38, 80, 198, 110, 96, 179, 250, 135, 208, 38, 208, 13, 100, 119, }, { 114, 6, 187, 248, 150, 214, 17, 143, 212, 190, 196, 187, 196, 157, 201, 117, }, { 98, 144, 113, 33, 166, 190, 62, 155, 206, 169, 200, 113, 200, 237, 19, 202, }, { 81, 186, 32, 98, 243, 236, 253, 212, 59, 199, 76, 32, 76, 116, 113, 97, }, { 65, 44, 234, 187, 195, 132, 210, 192, 33, 208, 64, 234, 64, 4, 171, 222, }, { 113, 85, 119, 19, 147, 60, 163, 252, 15, 233, 84, 119, 84, 148, 6, 220, }, { 97, 195, 189, 202, 163, 84, 140, 232, 21, 254, 88, 189, 88, 228, 220, 99, }, { 17, 167, 142, 128, 51, 143, 65, 132, 83, 155, 124, 142, 124, 119, 159, 216, }, { 1, 49, 68, 89, 3, 231, 110, 144, 73, 140, 112, 68, 112, 7, 69, 103, }, { 49, 72, 217, 241, 83, 95, 31, 172, 103, 181, 100, 217, 100, 151, 232, 101, }, { 33, 222, 19, 40, 99, 55, 48, 184, 125, 162, 104, 19, 104, 231, 50, 218, }, { 209, 128, 191, 101, 176, 42, 70, 116, 235, 127, 44, 191, 44, 114, 110, 208, }, { 193, 22, 117, 188, 128, 66, 105, 96, 241, 104, 32, 117, 32, 2, 180, 111, }, { 241, 111, 232, 20, 208, 250, 24, 92, 223, 81, 52, 232, 52, 146, 25, 109, }, { 225, 249, 34, 205, 224, 146, 55, 72, 197, 70, 56, 34, 56, 226, 195, 210, }, { 145, 157, 17, 135, 112, 73, 250, 36, 131, 35, 28, 17, 28, 113, 128, 105, }, { 129, 11, 219, 94, 64, 33, 213, 48, 153, 52, 16, 219, 16, 1, 90, 214, }, { 177, 114, 70, 246, 16, 153, 164, 12, 183, 13, 4, 70, 4, 145, 247, 212, }, { 161, 228, 140, 47, 32, 241, 139, 24, 173, 26, 8, 140, 8, 225, 45, 107, }, { 93, 53, 150, 72, 231, 194, 112, 219, 209, 88, 73, 150, 73, 80, 203, 128, }, { 77, 163, 92, 145, 215, 170, 95, 207, 203, 79, 69, 92, 69, 32, 17, 63, }, { 125, 218, 193, 57, 135, 18, 46, 243, 229, 118, 81, 193, 81, 176, 188, 61, }, { 109, 76, 11, 224, 183, 122, 1, 231, 255, 97, 93, 11, 93, 192, 102, 130, }, { 29, 40, 56, 170, 39, 161, 204, 139, 185, 4, 121, 56, 121, 83, 37, 57, }, { 13, 190, 242, 115, 23, 201, 227, 159, 163, 19, 117, 242, 117, 35, 255, 134, }, { 61, 199, 111, 219, 71, 113, 146, 163, 141, 42, 97, 111, 97, 179, 82, 132, }, { 45, 81, 165, 2, 119, 25, 189, 183, 151, 61, 109, 165, 109, 195, 136, 59, }, { 221, 15, 9, 79, 164, 4, 203, 123, 1, 224, 41, 9, 41, 86, 212, 49, }, { 205, 153, 195, 150, 148, 108, 228, 111, 27, 247, 37, 195, 37, 38, 14, 142, }, { 253, 224, 94, 62, 196, 212, 149, 83, 53, 206, 49, 94, 49, 182, 163, 140, }, { 237, 118, 148, 231, 244, 188, 186, 71, 47, 217, 61, 148, 61, 198, 121, 51, }, { 157, 18, 167, 173, 100, 103, 119, 43, 105, 188, 25, 167, 25, 85, 58, 136, }, { 141, 132, 109, 116, 84, 15, 88, 63, 115, 171, 21, 109, 21, 37, 224, 55, }, { 189, 253, 240, 220, 4, 183, 41, 3, 93, 146, 1, 240, 1, 181, 77, 53, }, { 173, 107, 58, 5, 52, 223, 6, 23, 71, 133, 13, 58, 13, 197, 151, 138, }, { 158, 65, 107, 70, 97, 141, 197, 88, 178, 235, 137, 107, 137, 92, 245, 33, }, { 142, 215, 161, 159, 81, 229, 234, 76, 168, 252, 133, 161, 133, 44, 47, 158, }, { 190, 174, 60, 55, 1, 93, 155, 112, 134, 197, 145, 60, 145, 188, 130, 156, }, { 174, 56, 246, 238, 49, 53, 180, 100, 156, 210, 157, 246, 157, 204, 88, 35, }, { 222, 92, 197, 164, 161, 238, 121, 8, 218, 183, 185, 197, 185, 95, 27, 152, }, { 206, 202, 15, 125, 145, 134, 86, 28, 192, 160, 181, 15, 181, 47, 193, 39, }, { 254, 179, 146, 213, 193, 62, 39, 32, 238, 153, 161, 146, 161, 191, 108, 37, }, { 238, 37, 88, 12, 241, 86, 8, 52, 244, 142, 173, 88, 173, 207, 182, 154, }, { 30, 123, 244, 65, 34, 75, 126, 248, 98, 83, 233, 244, 233, 90, 234, 144, }, { 14, 237, 62, 152, 18, 35, 81, 236, 120, 68, 229, 62, 229, 42, 48, 47, }, { 62, 148, 163, 48, 66, 155, 32, 208, 86, 125, 241, 163, 241, 186, 157, 45, }, { 46, 2, 105, 233, 114, 243, 15, 196, 76, 106, 253, 105, 253, 202, 71, 146, }, { 94, 102, 90, 163, 226, 40, 194, 168, 10, 15, 217, 90, 217, 89, 4, 41, }, { 78, 240, 144, 122, 210, 64, 237, 188, 16, 24, 213, 144, 213, 41, 222, 150, }, { 126, 137, 13, 210, 130, 248, 156, 128, 62, 33, 193, 13, 193, 185, 115, 148, }, { 110, 31, 199, 11, 178, 144, 179, 148, 36, 54, 205, 199, 205, 201, 169, 43, }, { 24, 221, 175, 84, 40, 92, 217, 30, 23, 253, 10, 175, 10, 72, 183, 1, }, { 8, 75, 101, 141, 24, 52, 246, 10, 13, 234, 6, 101, 6, 56, 109, 190, }, { 56, 50, 248, 37, 72, 140, 135, 54, 35, 211, 18, 248, 18, 168, 192, 188, }, { 40, 164, 50, 252, 120, 228, 168, 34, 57, 196, 30, 50, 30, 216, 26, 3, }, { 88, 192, 1, 182, 232, 63, 101, 78, 127, 161, 58, 1, 58, 75, 89, 184, }, { 72, 86, 203, 111, 216, 87, 74, 90, 101, 182, 54, 203, 54, 59, 131, 7, }, { 120, 47, 86, 199, 136, 239, 59, 102, 75, 143, 34, 86, 34, 171, 46, 5, }, { 104, 185, 156, 30, 184, 135, 20, 114, 81, 152, 46, 156, 46, 219, 244, 186, }, { 152, 231, 48, 83, 107, 154, 98, 190, 199, 69, 106, 48, 106, 78, 168, 176, }, { 136, 113, 250, 138, 91, 242, 77, 170, 221, 82, 102, 250, 102, 62, 114, 15, }, { 184, 8, 103, 34, 11, 74, 60, 150, 243, 107, 114, 103, 114, 174, 223, 13, }, { 168, 158, 173, 251, 59, 34, 19, 130, 233, 124, 126, 173, 126, 222, 5, 178, }, { 216, 250, 158, 177, 171, 249, 222, 238, 175, 25, 90, 158, 90, 77, 70, 9, }, { 200, 108, 84, 104, 155, 145, 241, 250, 181, 14, 86, 84, 86, 61, 156, 182, }, { 248, 21, 201, 192, 203, 41, 128, 198, 155, 55, 66, 201, 66, 173, 49, 180, }, { 232, 131, 3, 25, 251, 65, 175, 210, 129, 32, 78, 3, 78, 221, 235, 11, }, { 219, 169, 82, 90, 174, 19, 108, 157, 116, 78, 202, 82, 202, 68, 137, 160, }, { 203, 63, 152, 131, 158, 123, 67, 137, 110, 89, 198, 152, 198, 52, 83, 31, }, { 251, 70, 5, 43, 206, 195, 50, 181, 64, 96, 210, 5, 210, 164, 254, 29, }, { 235, 208, 207, 242, 254, 171, 29, 161, 90, 119, 222, 207, 222, 212, 36, 162, }, { 155, 180, 252, 184, 110, 112, 208, 205, 28, 18, 250, 252, 250, 71, 103, 25, }, { 139, 34, 54, 97, 94, 24, 255, 217, 6, 5, 246, 54, 246, 55, 189, 166, }, { 187, 91, 171, 201, 14, 160, 142, 229, 40, 60, 226, 171, 226, 167, 16, 164, }, { 171, 205, 97, 16, 62, 200, 161, 241, 50, 43, 238, 97, 238, 215, 202, 27, }, { 91, 147, 205, 93, 237, 213, 215, 61, 164, 246, 170, 205, 170, 66, 150, 17, }, { 75, 5, 7, 132, 221, 189, 248, 41, 190, 225, 166, 7, 166, 50, 76, 174, }, { 123, 124, 154, 44, 141, 5, 137, 21, 144, 216, 178, 154, 178, 162, 225, 172, }, { 107, 234, 80, 245, 189, 109, 166, 1, 138, 207, 190, 80, 190, 210, 59, 19, }, { 27, 142, 99, 191, 45, 182, 107, 109, 204, 170, 154, 99, 154, 65, 120, 168, }, { 11, 24, 169, 102, 29, 222, 68, 121, 214, 189, 150, 169, 150, 49, 162, 23, }, { 59, 97, 52, 206, 77, 102, 53, 69, 248, 132, 130, 52, 130, 161, 15, 21, }, { 43, 247, 254, 23, 125, 14, 26, 81, 226, 147, 142, 254, 142, 209, 213, 170, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 133, 116, 117, 208, 94, 190, 184, 135, 78, 98, 236, 107, 16, 135, 198, 116, }, { 201, 232, 234, 99, 188, 191, 179, 205, 156, 196, 27, 214, 32, 205, 79, 232, }, { 76, 156, 159, 179, 226, 1, 11, 74, 210, 166, 247, 189, 48, 74, 137, 156, }, { 81, 19, 23, 198, 187, 189, 165, 89, 251, 75, 54, 111, 64, 89, 158, 19, }, { 212, 103, 98, 22, 229, 3, 29, 222, 181, 41, 218, 4, 80, 222, 88, 103, }, { 152, 251, 253, 165, 7, 2, 22, 148, 103, 143, 45, 185, 96, 148, 209, 251, }, { 29, 143, 136, 117, 89, 188, 174, 19, 41, 237, 193, 210, 112, 19, 23, 143, }, { 162, 38, 46, 79, 181, 185, 137, 178, 53, 150, 108, 222, 128, 178, 255, 38, }, { 39, 82, 91, 159, 235, 7, 49, 53, 123, 244, 128, 181, 144, 53, 57, 82, }, { 107, 206, 196, 44, 9, 6, 58, 127, 169, 82, 119, 8, 160, 127, 176, 206, }, { 238, 186, 177, 252, 87, 184, 130, 248, 231, 48, 155, 99, 176, 248, 118, 186, }, { 243, 53, 57, 137, 14, 4, 44, 235, 206, 221, 90, 177, 192, 235, 97, 53, }, { 118, 65, 76, 89, 80, 186, 148, 108, 128, 191, 182, 218, 208, 108, 167, 65, }, { 58, 221, 211, 234, 178, 187, 159, 38, 82, 25, 65, 103, 224, 38, 46, 221, }, { 191, 169, 166, 58, 236, 5, 39, 161, 28, 123, 173, 12, 240, 161, 232, 169, }, { 135, 76, 92, 158, 169, 177, 209, 167, 106, 239, 216, 127, 195, 167, 61, 76, }, { 2, 56, 41, 78, 247, 15, 105, 32, 36, 141, 52, 20, 211, 32, 251, 56, }, { 78, 164, 182, 253, 21, 14, 98, 106, 246, 43, 195, 169, 227, 106, 114, 164, }, { 203, 208, 195, 45, 75, 176, 218, 237, 184, 73, 47, 194, 243, 237, 180, 208, }, { 214, 95, 75, 88, 18, 12, 116, 254, 145, 164, 238, 16, 131, 254, 163, 95, }, { 83, 43, 62, 136, 76, 178, 204, 121, 223, 198, 2, 123, 147, 121, 101, 43, }, { 31, 183, 161, 59, 174, 179, 199, 51, 13, 96, 245, 198, 163, 51, 236, 183, }, { 154, 195, 212, 235, 240, 13, 127, 180, 67, 2, 25, 173, 179, 180, 42, 195, }, { 37, 106, 114, 209, 28, 8, 88, 21, 95, 121, 180, 161, 67, 21, 194, 106, }, { 160, 30, 7, 1, 66, 182, 224, 146, 17, 27, 88, 202, 83, 146, 4, 30, }, { 236, 130, 152, 178, 160, 183, 235, 216, 195, 189, 175, 119, 99, 216, 141, 130, }, { 105, 246, 237, 98, 254, 9, 83, 95, 141, 223, 67, 28, 115, 95, 75, 246, }, { 116, 121, 101, 23, 167, 181, 253, 76, 164, 50, 130, 206, 3, 76, 92, 121, }, { 241, 13, 16, 199, 249, 11, 69, 203, 234, 80, 110, 165, 19, 203, 154, 13, }, { 189, 145, 143, 116, 27, 10, 78, 129, 56, 246, 153, 24, 35, 129, 19, 145, }, { 56, 229, 250, 164, 69, 180, 246, 6, 118, 148, 117, 115, 51, 6, 213, 229, }, { 205, 152, 184, 255, 145, 161, 97, 141, 212, 29, 115, 254, 69, 141, 122, 152, }, { 72, 236, 205, 47, 207, 31, 217, 10, 154, 127, 159, 149, 85, 10, 188, 236, }, { 4, 112, 82, 156, 45, 30, 210, 64, 72, 217, 104, 40, 101, 64, 53, 112, }, { 129, 4, 39, 76, 115, 160, 106, 199, 6, 187, 132, 67, 117, 199, 243, 4, }, { 156, 139, 175, 57, 42, 28, 196, 212, 47, 86, 69, 145, 5, 212, 228, 139, }, { 25, 255, 218, 233, 116, 162, 124, 83, 97, 52, 169, 250, 21, 83, 34, 255, }, { 85, 99, 69, 90, 150, 163, 119, 25, 179, 146, 94, 71, 37, 25, 171, 99, }, { 208, 23, 48, 138, 200, 29, 207, 158, 253, 240, 178, 44, 53, 158, 109, 23, }, { 111, 190, 150, 176, 36, 24, 232, 63, 225, 139, 31, 32, 197, 63, 133, 190, }, { 234, 202, 227, 96, 122, 166, 80, 184, 175, 233, 243, 75, 213, 184, 67, 202, }, { 166, 86, 124, 211, 152, 167, 91, 242, 125, 79, 4, 246, 229, 242, 202, 86, }, { 35, 34, 9, 3, 198, 25, 227, 117, 51, 45, 232, 157, 245, 117, 12, 34, }, { 62, 173, 129, 118, 159, 165, 77, 102, 26, 192, 41, 79, 133, 102, 27, 173, }, { 187, 217, 244, 166, 193, 27, 245, 225, 84, 162, 197, 36, 149, 225, 221, 217, }, { 247, 69, 107, 21, 35, 26, 254, 171, 134, 4, 50, 153, 165, 171, 84, 69, }, { 114, 49, 30, 197, 125, 164, 70, 44, 200, 102, 222, 242, 181, 44, 146, 49, }, { 74, 212, 228, 97, 56, 16, 176, 42, 190, 242, 171, 129, 134, 42, 71, 212, }, { 207, 160, 145, 177, 102, 174, 8, 173, 240, 144, 71, 234, 150, 173, 129, 160, }, { 131, 60, 14, 2, 132, 175, 3, 231, 34, 54, 176, 87, 166, 231, 8, 60, }, { 6, 72, 123, 210, 218, 17, 187, 96, 108, 84, 92, 60, 182, 96, 206, 72, }, { 27, 199, 243, 167, 131, 173, 21, 115, 69, 185, 157, 238, 198, 115, 217, 199, }, { 158, 179, 134, 119, 221, 19, 173, 244, 11, 219, 113, 133, 214, 244, 31, 179, }, { 210, 47, 25, 196, 63, 18, 166, 190, 217, 125, 134, 56, 230, 190, 150, 47, }, { 87, 91, 108, 20, 97, 172, 30, 57, 151, 31, 106, 83, 246, 57, 80, 91, }, { 232, 242, 202, 46, 141, 169, 57, 152, 139, 100, 199, 95, 6, 152, 184, 242, }, { 109, 134, 191, 254, 211, 23, 129, 31, 197, 6, 43, 52, 22, 31, 126, 134, }, { 33, 26, 32, 77, 49, 22, 138, 85, 23, 160, 220, 137, 38, 85, 247, 26, }, { 164, 110, 85, 157, 111, 168, 50, 210, 89, 194, 48, 226, 54, 210, 49, 110, }, { 185, 225, 221, 232, 54, 20, 156, 193, 112, 47, 241, 48, 70, 193, 38, 225, }, { 60, 149, 168, 56, 104, 170, 36, 70, 62, 77, 29, 91, 86, 70, 224, 149, }, { 112, 9, 55, 139, 138, 171, 47, 12, 236, 235, 234, 230, 102, 12, 105, 9, }, { 245, 125, 66, 91, 212, 21, 151, 139, 162, 137, 6, 141, 118, 139, 175, 125, }, { 89, 243, 179, 61, 225, 129, 194, 217, 107, 58, 230, 63, 138, 217, 244, 243, }, { 220, 135, 198, 237, 191, 63, 122, 94, 37, 88, 10, 84, 154, 94, 50, 135, }, { 144, 27, 89, 94, 93, 62, 113, 20, 247, 254, 253, 233, 170, 20, 187, 27, }, { 21, 111, 44, 142, 3, 128, 201, 147, 185, 156, 17, 130, 186, 147, 125, 111, }, { 8, 224, 164, 251, 90, 60, 103, 128, 144, 113, 208, 80, 202, 128, 106, 224, }, { 141, 148, 209, 43, 4, 130, 223, 7, 222, 19, 60, 59, 218, 7, 172, 148, }, { 193, 8, 78, 152, 230, 131, 212, 77, 12, 181, 203, 134, 234, 77, 37, 8, }, { 68, 124, 59, 72, 184, 61, 108, 202, 66, 215, 39, 237, 250, 202, 227, 124, }, { 251, 213, 157, 114, 84, 56, 75, 107, 94, 172, 138, 225, 10, 107, 11, 213, }, { 126, 161, 232, 162, 10, 134, 243, 236, 16, 206, 102, 138, 26, 236, 205, 161, }, { 50, 61, 119, 17, 232, 135, 248, 166, 194, 104, 145, 55, 42, 166, 68, 61, }, { 183, 73, 2, 193, 182, 57, 64, 33, 140, 10, 125, 92, 58, 33, 130, 73, }, { 170, 198, 138, 180, 239, 133, 238, 50, 165, 231, 188, 142, 74, 50, 149, 198, }, { 47, 178, 255, 100, 177, 59, 86, 181, 235, 133, 80, 229, 90, 181, 83, 178, }, { 99, 46, 96, 215, 83, 58, 93, 255, 57, 35, 167, 88, 106, 255, 218, 46, }, { 230, 90, 21, 7, 13, 132, 229, 120, 119, 65, 75, 51, 122, 120, 28, 90, }, { 222, 191, 239, 163, 72, 48, 19, 126, 1, 213, 62, 64, 73, 126, 201, 191, }, { 91, 203, 154, 115, 22, 142, 171, 249, 79, 183, 210, 43, 89, 249, 15, 203, }, { 23, 87, 5, 192, 244, 143, 160, 179, 157, 17, 37, 150, 105, 179, 134, 87, }, { 146, 35, 112, 16, 170, 49, 24, 52, 211, 115, 201, 253, 121, 52, 64, 35, }, { 143, 172, 248, 101, 243, 141, 182, 39, 250, 158, 8, 47, 9, 39, 87, 172, }, { 10, 216, 141, 181, 173, 51, 14, 160, 180, 252, 228, 68, 25, 160, 145, 216, }, { 70, 68, 18, 6, 79, 50, 5, 234, 102, 90, 19, 249, 41, 234, 24, 68, }, { 195, 48, 103, 214, 17, 140, 189, 109, 40, 56, 255, 146, 57, 109, 222, 48, }, { 124, 153, 193, 236, 253, 137, 154, 204, 52, 67, 82, 158, 201, 204, 54, 153, }, { 249, 237, 180, 60, 163, 55, 34, 75, 122, 33, 190, 245, 217, 75, 240, 237, }, { 181, 113, 43, 143, 65, 54, 41, 1, 168, 135, 73, 72, 233, 1, 121, 113, }, { 48, 5, 94, 95, 31, 136, 145, 134, 230, 229, 165, 35, 249, 134, 191, 5, }, { 45, 138, 214, 42, 70, 52, 63, 149, 207, 8, 100, 241, 137, 149, 168, 138, }, { 168, 254, 163, 250, 24, 138, 135, 18, 129, 106, 136, 154, 153, 18, 110, 254, }, { 228, 98, 60, 73, 250, 139, 140, 88, 83, 204, 127, 39, 169, 88, 231, 98, }, { 97, 22, 73, 153, 164, 53, 52, 223, 29, 174, 147, 76, 185, 223, 33, 22, }, { 148, 107, 11, 194, 112, 32, 163, 84, 191, 39, 149, 193, 207, 84, 142, 107, }, { 17, 31, 126, 18, 46, 158, 27, 211, 241, 69, 121, 170, 223, 211, 72, 31, }, { 93, 131, 225, 161, 204, 159, 16, 153, 35, 227, 142, 23, 239, 153, 193, 131, }, { 216, 247, 148, 113, 146, 33, 168, 30, 109, 129, 98, 124, 255, 30, 7, 247, }, { 197, 120, 28, 4, 203, 157, 6, 13, 68, 108, 163, 174, 143, 13, 16, 120, }, { 64, 12, 105, 212, 149, 35, 190, 138, 10, 14, 79, 197, 159, 138, 214, 12, }, { 12, 144, 246, 103, 119, 34, 181, 192, 216, 168, 184, 120, 175, 192, 95, 144, }, { 137, 228, 131, 183, 41, 156, 13, 71, 150, 202, 84, 19, 191, 71, 153, 228, }, { 54, 77, 37, 141, 197, 153, 42, 230, 138, 177, 249, 31, 79, 230, 113, 77, }, { 179, 57, 80, 93, 155, 39, 146, 97, 196, 211, 21, 116, 95, 97, 183, 57, }, { 255, 165, 207, 238, 121, 38, 153, 43, 22, 117, 226, 201, 111, 43, 62, 165, }, { 122, 209, 186, 62, 39, 152, 33, 172, 88, 23, 14, 162, 127, 172, 248, 209, }, { 103, 94, 50, 75, 126, 36, 143, 191, 113, 250, 207, 112, 15, 191, 239, 94, }, { 226, 42, 71, 155, 32, 154, 55, 56, 63, 152, 35, 27, 31, 56, 41, 42, }, { 174, 182, 216, 40, 194, 155, 60, 114, 237, 62, 212, 166, 47, 114, 160, 182, }, { 43, 194, 173, 248, 156, 37, 132, 245, 163, 92, 56, 205, 63, 245, 102, 194, }, { 19, 39, 87, 92, 217, 145, 114, 243, 213, 200, 77, 190, 12, 243, 179, 39, }, { 150, 83, 34, 140, 135, 47, 202, 116, 155, 170, 161, 213, 28, 116, 117, 83, }, { 218, 207, 189, 63, 101, 46, 193, 62, 73, 12, 86, 104, 44, 62, 252, 207, }, { 95, 187, 200, 239, 59, 144, 121, 185, 7, 110, 186, 3, 60, 185, 58, 187, }, { 66, 52, 64, 154, 98, 44, 215, 170, 46, 131, 123, 209, 76, 170, 45, 52, }, { 199, 64, 53, 74, 60, 146, 111, 45, 96, 225, 151, 186, 92, 45, 235, 64, }, { 139, 220, 170, 249, 222, 147, 100, 103, 178, 71, 96, 7, 108, 103, 98, 220, }, { 14, 168, 223, 41, 128, 45, 220, 224, 252, 37, 140, 108, 124, 224, 164, 168, }, { 177, 1, 121, 19, 108, 40, 251, 65, 224, 94, 33, 96, 140, 65, 76, 1, }, { 52, 117, 12, 195, 50, 150, 67, 198, 174, 60, 205, 11, 156, 198, 138, 117, }, { 120, 233, 147, 112, 208, 151, 72, 140, 124, 154, 58, 182, 172, 140, 3, 233, }, { 253, 157, 230, 160, 142, 41, 240, 11, 50, 248, 214, 221, 188, 11, 197, 157, }, { 224, 18, 110, 213, 215, 149, 94, 24, 27, 21, 23, 15, 204, 24, 210, 18, }, { 101, 102, 27, 5, 137, 43, 230, 159, 85, 119, 251, 100, 220, 159, 20, 102, }, { 41, 250, 132, 182, 107, 42, 237, 213, 135, 209, 12, 217, 236, 213, 157, 250, }, { 172, 142, 241, 102, 53, 148, 85, 82, 201, 179, 224, 178, 252, 82, 91, 142, }, { 178, 37, 165, 122, 1, 193, 71, 113, 214, 116, 15, 126, 215, 113, 43, 37, }, { 55, 81, 208, 170, 95, 127, 255, 246, 152, 22, 227, 21, 199, 246, 237, 81, }, { 123, 205, 79, 25, 189, 126, 244, 188, 74, 176, 20, 168, 247, 188, 100, 205, }, { 254, 185, 58, 201, 227, 192, 76, 59, 4, 210, 248, 195, 231, 59, 162, 185, }, { 227, 54, 178, 188, 186, 124, 226, 40, 45, 63, 57, 17, 151, 40, 181, 54, }, { 102, 66, 199, 108, 228, 194, 90, 175, 99, 93, 213, 122, 135, 175, 115, 66, }, { 42, 222, 88, 223, 6, 195, 81, 229, 177, 251, 34, 199, 183, 229, 250, 222, }, { 175, 170, 45, 15, 88, 125, 233, 98, 255, 153, 206, 172, 167, 98, 60, 170, }, { 16, 3, 139, 53, 180, 120, 206, 195, 227, 226, 99, 160, 87, 195, 212, 3, }, { 149, 119, 254, 229, 234, 198, 118, 68, 173, 128, 143, 203, 71, 68, 18, 119, }, { 217, 235, 97, 86, 8, 199, 125, 14, 127, 38, 120, 118, 119, 14, 155, 235, }, { 92, 159, 20, 134, 86, 121, 197, 137, 49, 68, 148, 29, 103, 137, 93, 159, }, { 65, 16, 156, 243, 15, 197, 107, 154, 24, 169, 85, 207, 23, 154, 74, 16, }, { 196, 100, 233, 35, 81, 123, 211, 29, 86, 203, 185, 164, 7, 29, 140, 100, }, { 136, 248, 118, 144, 179, 122, 216, 87, 132, 109, 78, 25, 55, 87, 5, 248, }, { 13, 140, 3, 64, 237, 196, 96, 208, 202, 15, 162, 114, 39, 208, 195, 140, }, { 53, 105, 249, 228, 168, 112, 150, 214, 188, 155, 215, 1, 20, 214, 22, 105, }, { 176, 29, 140, 52, 246, 206, 46, 81, 242, 249, 59, 106, 4, 81, 208, 29, }, { 252, 129, 19, 135, 20, 207, 37, 27, 32, 95, 204, 215, 52, 27, 89, 129, }, { 121, 245, 102, 87, 74, 113, 157, 156, 110, 61, 32, 188, 36, 156, 159, 245, }, { 100, 122, 238, 34, 19, 205, 51, 143, 71, 208, 225, 110, 84, 143, 136, 122, }, { 225, 14, 155, 242, 77, 115, 139, 8, 9, 178, 13, 5, 68, 8, 78, 14, }, { 173, 146, 4, 65, 175, 114, 128, 66, 219, 20, 250, 184, 116, 66, 199, 146, }, { 40, 230, 113, 145, 241, 204, 56, 197, 149, 118, 22, 211, 100, 197, 1, 230, }, { 151, 79, 215, 171, 29, 201, 31, 100, 137, 13, 187, 223, 148, 100, 233, 79, }, { 18, 59, 162, 123, 67, 119, 167, 227, 199, 111, 87, 180, 132, 227, 47, 59, }, { 94, 167, 61, 200, 161, 118, 172, 169, 21, 201, 160, 9, 180, 169, 166, 167, }, { 219, 211, 72, 24, 255, 200, 20, 46, 91, 171, 76, 98, 164, 46, 96, 211, }, { 198, 92, 192, 109, 166, 116, 186, 61, 114, 70, 141, 176, 212, 61, 119, 92, }, { 67, 40, 181, 189, 248, 202, 2, 186, 60, 36, 97, 219, 196, 186, 177, 40, }, { 15, 180, 42, 14, 26, 203, 9, 240, 238, 130, 150, 102, 244, 240, 56, 180, }, { 138, 192, 95, 222, 68, 117, 177, 119, 160, 224, 122, 13, 228, 119, 254, 192, }, { 127, 189, 29, 133, 144, 96, 38, 252, 2, 105, 124, 128, 146, 252, 81, 189, }, { 250, 201, 104, 85, 206, 222, 158, 123, 76, 11, 144, 235, 130, 123, 151, 201, }, { 182, 85, 247, 230, 44, 223, 149, 49, 158, 173, 103, 86, 178, 49, 30, 85, }, { 51, 33, 130, 54, 114, 97, 45, 182, 208, 207, 139, 61, 162, 182, 216, 33, }, { 46, 174, 10, 67, 43, 221, 131, 165, 249, 34, 74, 239, 210, 165, 207, 174, }, { 171, 218, 127, 147, 117, 99, 59, 34, 183, 64, 166, 132, 194, 34, 9, 218, }, { 231, 70, 224, 32, 151, 98, 48, 104, 101, 230, 81, 57, 242, 104, 128, 70, }, { 98, 50, 149, 240, 201, 220, 136, 239, 43, 132, 189, 82, 226, 239, 70, 50, }, { 221, 155, 51, 202, 37, 217, 175, 78, 55, 255, 16, 94, 18, 78, 174, 155, }, { 88, 239, 70, 26, 123, 103, 23, 201, 121, 157, 252, 53, 2, 201, 104, 239, }, { 20, 115, 217, 169, 153, 102, 28, 131, 171, 59, 11, 136, 50, 131, 225, 115, }, { 145, 7, 172, 121, 199, 216, 164, 4, 229, 89, 231, 227, 34, 4, 39, 7, }, { 140, 136, 36, 12, 158, 100, 10, 23, 204, 180, 38, 49, 82, 23, 48, 136, }, { 9, 252, 81, 220, 192, 218, 178, 144, 130, 214, 202, 90, 66, 144, 246, 252, }, { 69, 96, 206, 111, 34, 219, 185, 218, 80, 112, 61, 231, 114, 218, 127, 96, }, { 192, 20, 187, 191, 124, 101, 1, 93, 30, 18, 209, 140, 98, 93, 185, 20, }, { 248, 241, 65, 27, 57, 209, 247, 91, 104, 134, 164, 255, 81, 91, 108, 241, }, { 125, 133, 52, 203, 103, 111, 79, 220, 38, 228, 72, 148, 65, 220, 170, 133, }, { 49, 25, 171, 120, 133, 110, 68, 150, 244, 66, 191, 41, 113, 150, 35, 25, }, { 180, 109, 222, 168, 219, 208, 252, 17, 186, 32, 83, 66, 97, 17, 229, 109, }, { 169, 226, 86, 221, 130, 108, 82, 2, 147, 205, 146, 144, 17, 2, 242, 226, }, { 44, 150, 35, 13, 220, 210, 234, 133, 221, 175, 126, 251, 1, 133, 52, 150, }, { 96, 10, 188, 190, 62, 211, 225, 207, 15, 9, 137, 70, 49, 207, 189, 10, }, { 229, 126, 201, 110, 96, 109, 89, 72, 65, 107, 101, 45, 33, 72, 123, 126, }, { 90, 215, 111, 84, 140, 104, 126, 233, 93, 16, 200, 33, 209, 233, 147, 215, }, { 223, 163, 26, 132, 210, 214, 198, 110, 19, 114, 36, 74, 193, 110, 85, 163, }, { 147, 63, 133, 55, 48, 215, 205, 36, 193, 212, 211, 247, 241, 36, 220, 63, }, { 22, 75, 240, 231, 110, 105, 117, 163, 143, 182, 63, 156, 225, 163, 26, 75, }, { 11, 196, 120, 146, 55, 213, 219, 176, 166, 91, 254, 78, 145, 176, 13, 196, }, { 142, 176, 13, 66, 105, 107, 99, 55, 232, 57, 18, 37, 129, 55, 203, 176, }, { 194, 44, 146, 241, 139, 106, 104, 125, 58, 159, 229, 152, 177, 125, 66, 44, }, { 71, 88, 231, 33, 213, 212, 208, 250, 116, 253, 9, 243, 161, 250, 132, 88, }, { 235, 214, 22, 71, 224, 64, 133, 168, 189, 78, 233, 65, 93, 168, 223, 214, }, { 110, 162, 99, 151, 190, 254, 61, 47, 243, 44, 5, 42, 77, 47, 25, 162, }, { 34, 62, 252, 36, 92, 255, 54, 101, 33, 138, 242, 151, 125, 101, 144, 62, }, { 167, 74, 137, 244, 2, 65, 142, 226, 111, 232, 30, 252, 109, 226, 86, 74, }, { 186, 197, 1, 129, 91, 253, 32, 241, 70, 5, 223, 46, 29, 241, 65, 197, }, { 63, 177, 116, 81, 5, 67, 152, 118, 8, 103, 51, 69, 13, 118, 135, 177, }, { 115, 45, 235, 226, 231, 66, 147, 60, 218, 193, 196, 248, 61, 60, 14, 45, }, { 246, 89, 158, 50, 185, 252, 43, 187, 148, 163, 40, 147, 45, 187, 200, 89, }, { 73, 240, 56, 8, 85, 249, 12, 26, 136, 216, 133, 159, 221, 26, 32, 240, }, { 204, 132, 77, 216, 11, 71, 180, 157, 198, 186, 105, 244, 205, 157, 230, 132, }, { 128, 24, 210, 107, 233, 70, 191, 215, 20, 28, 158, 73, 253, 215, 111, 24, }, { 5, 108, 167, 187, 183, 248, 7, 80, 90, 126, 114, 34, 237, 80, 169, 108, }, { 24, 227, 47, 206, 238, 68, 169, 67, 115, 147, 179, 240, 157, 67, 190, 227, }, { 157, 151, 90, 30, 176, 250, 17, 196, 61, 241, 95, 155, 141, 196, 120, 151, }, { 209, 11, 197, 173, 82, 251, 26, 142, 239, 87, 168, 38, 189, 142, 241, 11, }, { 84, 127, 176, 125, 12, 69, 162, 9, 161, 53, 68, 77, 173, 9, 55, 127, }, { 108, 154, 74, 217, 73, 241, 84, 15, 215, 161, 49, 62, 158, 15, 226, 154, }, { 233, 238, 63, 9, 23, 79, 236, 136, 153, 195, 221, 85, 142, 136, 36, 238, }, { 165, 114, 160, 186, 245, 78, 231, 194, 75, 101, 42, 232, 190, 194, 173, 114, }, { 32, 6, 213, 106, 171, 240, 95, 69, 5, 7, 198, 131, 174, 69, 107, 6, }, { 61, 137, 93, 31, 242, 76, 241, 86, 44, 234, 7, 81, 222, 86, 124, 137, }, { 184, 253, 40, 207, 172, 242, 73, 209, 98, 136, 235, 58, 206, 209, 186, 253, }, { 244, 97, 183, 124, 78, 243, 66, 155, 176, 46, 28, 135, 254, 155, 51, 97, }, { 113, 21, 194, 172, 16, 77, 250, 28, 254, 76, 240, 236, 238, 28, 245, 21, }, { 206, 188, 100, 150, 252, 72, 221, 189, 226, 55, 93, 224, 30, 189, 29, 188, }, { 75, 200, 17, 70, 162, 246, 101, 58, 172, 85, 177, 139, 14, 58, 219, 200, }, { 7, 84, 142, 245, 64, 247, 110, 112, 126, 243, 70, 54, 62, 112, 82, 84, }, { 130, 32, 251, 37, 30, 73, 214, 247, 48, 145, 170, 93, 46, 247, 148, 32, }, { 159, 175, 115, 80, 71, 245, 120, 228, 25, 124, 107, 143, 94, 228, 131, 175, }, { 26, 219, 6, 128, 25, 75, 192, 99, 87, 30, 135, 228, 78, 99, 69, 219, }, { 86, 71, 153, 51, 251, 74, 203, 41, 133, 184, 112, 89, 126, 41, 204, 71, }, { 211, 51, 236, 227, 165, 244, 115, 174, 203, 218, 156, 50, 110, 174, 10, 51, }, { 38, 78, 174, 184, 113, 225, 228, 37, 105, 83, 154, 191, 24, 37, 165, 78, }, { 163, 58, 219, 104, 47, 95, 92, 162, 39, 49, 118, 212, 8, 162, 99, 58, }, { 239, 166, 68, 219, 205, 94, 87, 232, 245, 151, 129, 105, 56, 232, 234, 166, }, { 106, 210, 49, 11, 147, 224, 239, 111, 187, 245, 109, 2, 40, 111, 44, 210, }, { 119, 93, 185, 126, 202, 92, 65, 124, 146, 24, 172, 208, 88, 124, 59, 93, }, { 242, 41, 204, 174, 148, 226, 249, 251, 220, 122, 64, 187, 72, 251, 253, 41, }, { 190, 181, 83, 29, 118, 227, 242, 177, 14, 220, 183, 6, 120, 177, 116, 181, }, { 59, 193, 38, 205, 40, 93, 74, 54, 64, 190, 91, 109, 104, 54, 178, 193, }, { 132, 104, 128, 247, 196, 88, 109, 151, 92, 197, 246, 97, 152, 151, 90, 104, }, { 1, 28, 245, 39, 154, 230, 213, 16, 18, 167, 26, 10, 136, 16, 156, 28, }, { 77, 128, 106, 148, 120, 231, 222, 90, 192, 1, 237, 183, 184, 90, 21, 128, }, { 200, 244, 31, 68, 38, 89, 102, 221, 142, 99, 1, 220, 168, 221, 211, 244, }, { 213, 123, 151, 49, 127, 229, 200, 206, 167, 142, 192, 14, 216, 206, 196, 123, }, { 80, 15, 226, 225, 33, 91, 112, 73, 233, 236, 44, 101, 200, 73, 2, 15, }, { 28, 147, 125, 82, 195, 90, 123, 3, 59, 74, 219, 216, 248, 3, 139, 147, }, { 153, 231, 8, 130, 157, 228, 195, 132, 117, 40, 55, 179, 232, 132, 77, 231, }, { 161, 2, 242, 38, 216, 80, 53, 130, 3, 188, 66, 192, 219, 130, 152, 2, }, { 36, 118, 135, 246, 134, 238, 141, 5, 77, 222, 174, 171, 203, 5, 94, 118, }, { 104, 234, 24, 69, 100, 239, 134, 79, 159, 120, 89, 22, 251, 79, 215, 234, }, { 237, 158, 109, 149, 58, 81, 62, 200, 209, 26, 181, 125, 235, 200, 17, 158, }, { 240, 17, 229, 224, 99, 237, 144, 219, 248, 247, 116, 175, 155, 219, 6, 17, }, { 117, 101, 144, 48, 61, 83, 40, 92, 182, 149, 152, 196, 139, 92, 192, 101, }, { 57, 249, 15, 131, 223, 82, 35, 22, 100, 51, 111, 121, 187, 22, 73, 249, }, { 188, 141, 122, 83, 129, 236, 155, 145, 42, 81, 131, 18, 171, 145, 143, 141, }, { 3, 36, 220, 105, 109, 233, 188, 48, 54, 42, 46, 30, 91, 48, 103, 36, }, { 134, 80, 169, 185, 51, 87, 4, 183, 120, 72, 194, 117, 75, 183, 161, 80, }, { 202, 204, 54, 10, 209, 86, 15, 253, 170, 238, 53, 200, 123, 253, 40, 204, }, { 79, 184, 67, 218, 143, 232, 183, 122, 228, 140, 217, 163, 107, 122, 238, 184, }, { 82, 55, 203, 175, 214, 84, 25, 105, 205, 97, 24, 113, 27, 105, 249, 55, }, { 215, 67, 190, 127, 136, 234, 161, 238, 131, 3, 244, 26, 11, 238, 63, 67, }, { 155, 223, 33, 204, 106, 235, 170, 164, 81, 165, 3, 167, 59, 164, 182, 223, }, { 30, 171, 84, 28, 52, 85, 18, 35, 31, 199, 239, 204, 43, 35, 112, 171, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 32, 45, 153, 233, 149, 159, 212, 73, 230, 213, 118, 242, 51, 200, 32, 152, }, { 64, 90, 241, 17, 233, 253, 107, 146, 15, 105, 236, 39, 102, 83, 64, 243, }, { 96, 119, 104, 248, 124, 98, 191, 219, 233, 188, 154, 213, 85, 155, 96, 107, }, { 128, 180, 33, 34, 17, 57, 214, 231, 30, 210, 27, 78, 204, 166, 128, 37, }, { 160, 153, 184, 203, 132, 166, 2, 174, 248, 7, 109, 188, 255, 110, 160, 189, }, { 192, 238, 208, 51, 248, 196, 189, 117, 17, 187, 247, 105, 170, 245, 192, 214, }, { 224, 195, 73, 218, 109, 91, 105, 60, 247, 110, 129, 155, 153, 61, 224, 78, }, { 195, 171, 66, 68, 34, 114, 111, 13, 60, 103, 54, 156, 91, 143, 195, 74, }, { 227, 134, 219, 173, 183, 237, 187, 68, 218, 178, 64, 110, 104, 71, 227, 210, }, { 131, 241, 179, 85, 203, 143, 4, 159, 51, 14, 218, 187, 61, 220, 131, 185, }, { 163, 220, 42, 188, 94, 16, 208, 214, 213, 219, 172, 73, 14, 20, 163, 33, }, { 67, 31, 99, 102, 51, 75, 185, 234, 34, 181, 45, 210, 151, 41, 67, 111, }, { 99, 50, 250, 143, 166, 212, 109, 163, 196, 96, 91, 32, 164, 225, 99, 247, }, { 3, 69, 146, 119, 218, 182, 210, 120, 45, 220, 193, 245, 241, 122, 3, 156, }, { 35, 104, 11, 158, 79, 41, 6, 49, 203, 9, 183, 7, 194, 178, 35, 4, }, { 69, 149, 132, 136, 68, 228, 222, 26, 120, 206, 108, 251, 182, 221, 69, 148, }, { 101, 184, 29, 97, 209, 123, 10, 83, 158, 27, 26, 9, 133, 21, 101, 12, }, { 5, 207, 117, 153, 173, 25, 181, 136, 119, 167, 128, 220, 208, 142, 5, 103, }, { 37, 226, 236, 112, 56, 134, 97, 193, 145, 114, 246, 46, 227, 70, 37, 255, }, { 197, 33, 165, 170, 85, 221, 8, 253, 102, 28, 119, 181, 122, 123, 197, 177, }, { 229, 12, 60, 67, 192, 66, 220, 180, 128, 201, 1, 71, 73, 179, 229, 41, }, { 133, 123, 84, 187, 188, 32, 99, 111, 105, 117, 155, 146, 28, 40, 133, 66, }, { 165, 86, 205, 82, 41, 191, 183, 38, 143, 160, 237, 96, 47, 224, 165, 218, }, { 134, 62, 198, 204, 102, 150, 177, 23, 68, 169, 90, 103, 237, 82, 134, 222, }, { 166, 19, 95, 37, 243, 9, 101, 94, 162, 124, 44, 149, 222, 154, 166, 70, }, { 198, 100, 55, 221, 143, 107, 218, 133, 75, 192, 182, 64, 139, 1, 198, 45, }, { 230, 73, 174, 52, 26, 244, 14, 204, 173, 21, 192, 178, 184, 201, 230, 181, }, { 6, 138, 231, 238, 119, 175, 103, 240, 90, 123, 65, 41, 33, 244, 6, 251, }, { 38, 167, 126, 7, 226, 48, 179, 185, 188, 174, 55, 219, 18, 60, 38, 99, }, { 70, 208, 22, 255, 158, 82, 12, 98, 85, 18, 173, 14, 71, 167, 70, 8, }, { 102, 253, 143, 22, 11, 205, 216, 43, 179, 199, 219, 252, 116, 111, 102, 144, }, { 138, 233, 203, 211, 136, 11, 127, 52, 240, 95, 216, 53, 175, 121, 138, 235, }, { 170, 196, 82, 58, 29, 148, 171, 125, 22, 138, 174, 199, 156, 177, 170, 115, }, { 202, 179, 58, 194, 97, 246, 20, 166, 255, 54, 52, 18, 201, 42, 202, 24, }, { 234, 158, 163, 43, 244, 105, 192, 239, 25, 227, 66, 224, 250, 226, 234, 128, }, { 10, 93, 234, 241, 153, 50, 169, 211, 238, 141, 195, 123, 99, 223, 10, 206, }, { 42, 112, 115, 24, 12, 173, 125, 154, 8, 88, 181, 137, 80, 23, 42, 86, }, { 74, 7, 27, 224, 112, 207, 194, 65, 225, 228, 47, 92, 5, 140, 74, 61, }, { 106, 42, 130, 9, 229, 80, 22, 8, 7, 49, 89, 174, 54, 68, 106, 165, }, { 73, 66, 137, 151, 170, 121, 16, 57, 204, 56, 238, 169, 244, 246, 73, 161, }, { 105, 111, 16, 126, 63, 230, 196, 112, 42, 237, 152, 91, 199, 62, 105, 57, }, { 9, 24, 120, 134, 67, 132, 123, 171, 195, 81, 2, 142, 146, 165, 9, 82, }, { 41, 53, 225, 111, 214, 27, 175, 226, 37, 132, 116, 124, 161, 109, 41, 202, }, { 201, 246, 168, 181, 187, 64, 198, 222, 210, 234, 245, 231, 56, 80, 201, 132, }, { 233, 219, 49, 92, 46, 223, 18, 151, 52, 63, 131, 21, 11, 152, 233, 28, }, { 137, 172, 89, 164, 82, 189, 173, 76, 221, 131, 25, 192, 94, 3, 137, 119, }, { 169, 129, 192, 77, 199, 34, 121, 5, 59, 86, 111, 50, 109, 203, 169, 239, }, { 207, 124, 79, 91, 204, 239, 161, 46, 136, 145, 180, 206, 25, 164, 207, 127, }, { 239, 81, 214, 178, 89, 112, 117, 103, 110, 68, 194, 60, 42, 108, 239, 231, }, { 143, 38, 190, 74, 37, 18, 202, 188, 135, 248, 88, 233, 127, 247, 143, 140, }, { 175, 11, 39, 163, 176, 141, 30, 245, 97, 45, 46, 27, 76, 63, 175, 20, }, { 79, 200, 110, 121, 221, 214, 119, 201, 150, 67, 175, 128, 213, 2, 79, 90, }, { 111, 229, 247, 144, 72, 73, 163, 128, 112, 150, 217, 114, 230, 202, 111, 194, }, { 15, 146, 159, 104, 52, 43, 28, 91, 153, 42, 67, 167, 179, 81, 15, 169, }, { 47, 191, 6, 129, 161, 180, 200, 18, 127, 255, 53, 85, 128, 153, 47, 49, }, { 12, 215, 13, 31, 238, 157, 206, 35, 180, 246, 130, 82, 66, 43, 12, 53, }, { 44, 250, 148, 246, 123, 2, 26, 106, 82, 35, 244, 160, 113, 227, 44, 173, }, { 76, 141, 252, 14, 7, 96, 165, 177, 187, 159, 110, 117, 36, 120, 76, 198, }, { 108, 160, 101, 231, 146, 255, 113, 248, 93, 74, 24, 135, 23, 176, 108, 94, }, { 140, 99, 44, 61, 255, 164, 24, 196, 170, 36, 153, 28, 142, 141, 140, 16, }, { 172, 78, 181, 212, 106, 59, 204, 141, 76, 241, 239, 238, 189, 69, 172, 136, }, { 204, 57, 221, 44, 22, 89, 115, 86, 165, 77, 117, 59, 232, 222, 204, 227, }, { 236, 20, 68, 197, 131, 198, 167, 31, 67, 152, 3, 201, 219, 22, 236, 123, }, { 215, 17, 85, 101, 211, 22, 254, 104, 35, 190, 115, 106, 157, 242, 215, 21, }, { 247, 60, 204, 140, 70, 137, 42, 33, 197, 107, 5, 152, 174, 58, 247, 141, }, { 151, 75, 164, 116, 58, 235, 149, 250, 44, 215, 159, 77, 251, 161, 151, 230, }, { 183, 102, 61, 157, 175, 116, 65, 179, 202, 2, 233, 191, 200, 105, 183, 126, }, { 87, 165, 116, 71, 194, 47, 40, 143, 61, 108, 104, 36, 81, 84, 87, 48, }, { 119, 136, 237, 174, 87, 176, 252, 198, 219, 185, 30, 214, 98, 156, 119, 168, }, { 23, 255, 133, 86, 43, 210, 67, 29, 50, 5, 132, 3, 55, 7, 23, 195, }, { 55, 210, 28, 191, 190, 77, 151, 84, 212, 208, 242, 241, 4, 207, 55, 91, }, { 20, 186, 23, 33, 241, 100, 145, 101, 31, 217, 69, 246, 198, 125, 20, 95, }, { 52, 151, 142, 200, 100, 251, 69, 44, 249, 12, 51, 4, 245, 181, 52, 199, }, { 84, 224, 230, 48, 24, 153, 250, 247, 16, 176, 169, 209, 160, 46, 84, 172, }, { 116, 205, 127, 217, 141, 6, 46, 190, 246, 101, 223, 35, 147, 230, 116, 52, }, { 148, 14, 54, 3, 224, 93, 71, 130, 1, 11, 94, 184, 10, 219, 148, 122, }, { 180, 35, 175, 234, 117, 194, 147, 203, 231, 222, 40, 74, 57, 19, 180, 226, }, { 212, 84, 199, 18, 9, 160, 44, 16, 14, 98, 178, 159, 108, 136, 212, 137, }, { 244, 121, 94, 251, 156, 63, 248, 89, 232, 183, 196, 109, 95, 64, 244, 17, }, { 146, 132, 209, 237, 151, 242, 32, 114, 91, 112, 31, 145, 43, 47, 146, 129, }, { 178, 169, 72, 4, 2, 109, 244, 59, 189, 165, 105, 99, 24, 231, 178, 25, }, { 210, 222, 32, 252, 126, 15, 75, 224, 84, 25, 243, 182, 77, 124, 210, 114, }, { 242, 243, 185, 21, 235, 144, 159, 169, 178, 204, 133, 68, 126, 180, 242, 234, }, { 18, 48, 240, 207, 134, 203, 246, 149, 69, 162, 4, 223, 231, 137, 18, 164, }, { 50, 29, 105, 38, 19, 84, 34, 220, 163, 119, 114, 45, 212, 65, 50, 60, }, { 82, 106, 1, 222, 111, 54, 157, 7, 74, 203, 232, 248, 129, 218, 82, 87, }, { 114, 71, 152, 55, 250, 169, 73, 78, 172, 30, 158, 10, 178, 18, 114, 207, }, { 81, 47, 147, 169, 181, 128, 79, 127, 103, 23, 41, 13, 112, 160, 81, 203, }, { 113, 2, 10, 64, 32, 31, 155, 54, 129, 194, 95, 255, 67, 104, 113, 83, }, { 17, 117, 98, 184, 92, 125, 36, 237, 104, 126, 197, 42, 22, 243, 17, 56, }, { 49, 88, 251, 81, 201, 226, 240, 164, 142, 171, 179, 216, 37, 59, 49, 160, }, { 209, 155, 178, 139, 164, 185, 153, 152, 121, 197, 50, 67, 188, 6, 209, 238, }, { 241, 182, 43, 98, 49, 38, 77, 209, 159, 16, 68, 177, 143, 206, 241, 118, }, { 145, 193, 67, 154, 77, 68, 242, 10, 118, 172, 222, 100, 218, 85, 145, 29, }, { 177, 236, 218, 115, 216, 219, 38, 67, 144, 121, 168, 150, 233, 157, 177, 133, }, { 93, 248, 158, 182, 91, 29, 129, 92, 211, 225, 171, 95, 50, 139, 93, 254, }, { 125, 213, 7, 95, 206, 130, 85, 21, 53, 52, 221, 173, 1, 67, 125, 102, }, { 29, 162, 111, 167, 178, 224, 234, 206, 220, 136, 71, 120, 84, 216, 29, 13, }, { 61, 143, 246, 78, 39, 127, 62, 135, 58, 93, 49, 138, 103, 16, 61, 149, }, { 221, 76, 191, 148, 74, 36, 87, 187, 205, 51, 176, 17, 254, 45, 221, 219, }, { 253, 97, 38, 125, 223, 187, 131, 242, 43, 230, 198, 227, 205, 229, 253, 67, }, { 157, 22, 78, 133, 163, 217, 60, 41, 194, 90, 92, 54, 152, 126, 157, 40, }, { 189, 59, 215, 108, 54, 70, 232, 96, 36, 143, 42, 196, 171, 182, 189, 176, }, { 158, 83, 220, 242, 121, 111, 238, 81, 239, 134, 157, 195, 105, 4, 158, 180, }, { 190, 126, 69, 27, 236, 240, 58, 24, 9, 83, 235, 49, 90, 204, 190, 44, }, { 222, 9, 45, 227, 144, 146, 133, 195, 224, 239, 113, 228, 15, 87, 222, 71, }, { 254, 36, 180, 10, 5, 13, 81, 138, 6, 58, 7, 22, 60, 159, 254, 223, }, { 30, 231, 253, 208, 104, 86, 56, 182, 241, 84, 134, 141, 165, 162, 30, 145, }, { 62, 202, 100, 57, 253, 201, 236, 255, 23, 129, 240, 127, 150, 106, 62, 9, }, { 94, 189, 12, 193, 129, 171, 83, 36, 254, 61, 106, 170, 195, 241, 94, 98, }, { 126, 144, 149, 40, 20, 52, 135, 109, 24, 232, 28, 88, 240, 57, 126, 250, }, { 24, 109, 26, 62, 31, 249, 95, 70, 171, 47, 199, 164, 132, 86, 24, 106, }, { 56, 64, 131, 215, 138, 102, 139, 15, 77, 250, 177, 86, 183, 158, 56, 242, }, { 88, 55, 235, 47, 246, 4, 52, 212, 164, 70, 43, 131, 226, 5, 88, 153, }, { 120, 26, 114, 198, 99, 155, 224, 157, 66, 147, 93, 113, 209, 205, 120, 1, }, { 152, 217, 59, 28, 14, 192, 137, 161, 181, 253, 220, 234, 72, 240, 152, 79, }, { 184, 244, 162, 245, 155, 95, 93, 232, 83, 40, 170, 24, 123, 56, 184, 215, }, { 216, 131, 202, 13, 231, 61, 226, 51, 186, 148, 48, 205, 46, 163, 216, 188, }, { 248, 174, 83, 228, 114, 162, 54, 122, 92, 65, 70, 63, 29, 107, 248, 36, }, { 219, 198, 88, 122, 61, 139, 48, 75, 151, 72, 241, 56, 223, 217, 219, 32, }, { 251, 235, 193, 147, 168, 20, 228, 2, 113, 157, 135, 202, 236, 17, 251, 184, }, { 155, 156, 169, 107, 212, 118, 91, 217, 152, 33, 29, 31, 185, 138, 155, 211, }, { 187, 177, 48, 130, 65, 233, 143, 144, 126, 244, 107, 237, 138, 66, 187, 75, }, { 91, 114, 121, 88, 44, 178, 230, 172, 137, 154, 234, 118, 19, 127, 91, 5, }, { 123, 95, 224, 177, 185, 45, 50, 229, 111, 79, 156, 132, 32, 183, 123, 157, }, { 27, 40, 136, 73, 197, 79, 141, 62, 134, 243, 6, 81, 117, 44, 27, 246, }, { 59, 5, 17, 160, 80, 208, 89, 119, 96, 38, 112, 163, 70, 228, 59, 110, }, { 109, 34, 170, 202, 101, 44, 63, 208, 70, 191, 230, 212, 249, 39, 109, 42, }, { 77, 15, 51, 35, 240, 179, 235, 153, 160, 106, 144, 38, 202, 239, 77, 178, }, { 45, 120, 91, 219, 140, 209, 84, 66, 73, 214, 10, 243, 159, 116, 45, 217, }, { 13, 85, 194, 50, 25, 78, 128, 11, 175, 3, 124, 1, 172, 188, 13, 65, }, { 237, 150, 139, 232, 116, 21, 233, 55, 88, 109, 253, 154, 53, 129, 237, 15, }, { 205, 187, 18, 1, 225, 138, 61, 126, 190, 184, 139, 104, 6, 73, 205, 151, }, { 173, 204, 122, 249, 157, 232, 130, 165, 87, 4, 17, 189, 83, 210, 173, 252, }, { 141, 225, 227, 16, 8, 119, 86, 236, 177, 209, 103, 79, 96, 26, 141, 100, }, { 174, 137, 232, 142, 71, 94, 80, 221, 122, 216, 208, 72, 162, 168, 174, 96, }, { 142, 164, 113, 103, 210, 193, 132, 148, 156, 13, 166, 186, 145, 96, 142, 248, }, { 238, 211, 25, 159, 174, 163, 59, 79, 117, 177, 60, 111, 196, 251, 238, 147, }, { 206, 254, 128, 118, 59, 60, 239, 6, 147, 100, 74, 157, 247, 51, 206, 11, }, { 46, 61, 201, 172, 86, 103, 134, 58, 100, 10, 203, 6, 110, 14, 46, 69, }, { 14, 16, 80, 69, 195, 248, 82, 115, 130, 223, 189, 244, 93, 198, 14, 221, }, { 110, 103, 56, 189, 191, 154, 237, 168, 107, 99, 39, 33, 8, 93, 110, 182, }, { 78, 74, 161, 84, 42, 5, 57, 225, 141, 182, 81, 211, 59, 149, 78, 46, }, { 40, 183, 46, 66, 33, 200, 225, 202, 62, 113, 138, 47, 79, 250, 40, 190, }, { 8, 154, 183, 171, 180, 87, 53, 131, 216, 164, 252, 221, 124, 50, 8, 38, }, { 104, 237, 223, 83, 200, 53, 138, 88, 49, 24, 102, 8, 41, 169, 104, 77, }, { 72, 192, 70, 186, 93, 170, 94, 17, 215, 205, 16, 250, 26, 97, 72, 213, }, { 168, 3, 15, 96, 48, 241, 55, 45, 32, 163, 145, 97, 131, 92, 168, 155, }, { 136, 46, 150, 137, 165, 110, 227, 100, 198, 118, 231, 147, 176, 148, 136, 3, }, { 232, 89, 254, 113, 217, 12, 92, 191, 47, 202, 125, 70, 229, 15, 232, 104, }, { 200, 116, 103, 152, 76, 147, 136, 246, 201, 31, 11, 180, 214, 199, 200, 240, }, { 235, 28, 108, 6, 3, 186, 142, 199, 2, 22, 188, 179, 20, 117, 235, 244, }, { 203, 49, 245, 239, 150, 37, 90, 142, 228, 195, 202, 65, 39, 189, 203, 108, }, { 171, 70, 157, 23, 234, 71, 229, 85, 13, 127, 80, 148, 114, 38, 171, 7, }, { 139, 107, 4, 254, 127, 216, 49, 28, 235, 170, 38, 102, 65, 238, 139, 159, }, { 107, 168, 77, 36, 18, 131, 88, 32, 28, 196, 167, 253, 216, 211, 107, 209, }, { 75, 133, 212, 205, 135, 28, 140, 105, 250, 17, 209, 15, 235, 27, 75, 73, }, { 43, 242, 188, 53, 251, 126, 51, 178, 19, 173, 75, 218, 190, 128, 43, 34, }, { 11, 223, 37, 220, 110, 225, 231, 251, 245, 120, 61, 40, 141, 72, 11, 186, }, { 231, 203, 97, 25, 237, 39, 64, 228, 182, 224, 62, 225, 86, 94, 231, 193, }, { 199, 230, 248, 240, 120, 184, 148, 173, 80, 53, 72, 19, 101, 150, 199, 89, }, { 167, 145, 144, 8, 4, 218, 43, 118, 185, 137, 210, 198, 48, 13, 167, 50, }, { 135, 188, 9, 225, 145, 69, 255, 63, 95, 92, 164, 52, 3, 197, 135, 170, }, { 103, 127, 64, 59, 252, 30, 150, 3, 168, 50, 37, 175, 154, 248, 103, 228, }, { 71, 82, 217, 210, 105, 129, 66, 74, 78, 231, 83, 93, 169, 48, 71, 124, }, { 39, 37, 177, 42, 21, 227, 253, 145, 167, 91, 201, 136, 252, 171, 39, 23, }, { 7, 8, 40, 195, 128, 124, 41, 216, 65, 142, 191, 122, 207, 99, 7, 143, }, { 36, 96, 35, 93, 207, 85, 47, 233, 138, 135, 8, 125, 13, 209, 36, 139, }, { 4, 77, 186, 180, 90, 202, 251, 160, 108, 82, 126, 143, 62, 25, 4, 19, }, { 100, 58, 210, 76, 38, 168, 68, 123, 133, 238, 228, 90, 107, 130, 100, 120, }, { 68, 23, 75, 165, 179, 55, 144, 50, 99, 59, 146, 168, 88, 74, 68, 224, }, { 164, 212, 2, 127, 222, 108, 249, 14, 148, 85, 19, 51, 193, 119, 164, 174, }, { 132, 249, 155, 150, 75, 243, 45, 71, 114, 128, 101, 193, 242, 191, 132, 54, }, { 228, 142, 243, 110, 55, 145, 146, 156, 155, 60, 255, 20, 167, 36, 228, 93, }, { 196, 163, 106, 135, 162, 14, 70, 213, 125, 233, 137, 230, 148, 236, 196, 197, }, { 162, 94, 229, 145, 169, 195, 158, 254, 206, 46, 82, 26, 224, 131, 162, 85, }, { 130, 115, 124, 120, 60, 92, 74, 183, 40, 251, 36, 232, 211, 75, 130, 205, }, { 226, 4, 20, 128, 64, 62, 245, 108, 193, 71, 190, 61, 134, 208, 226, 166, }, { 194, 41, 141, 105, 213, 161, 33, 37, 39, 146, 200, 207, 181, 24, 194, 62, }, { 34, 234, 196, 179, 184, 250, 72, 25, 208, 252, 73, 84, 44, 37, 34, 112, }, { 2, 199, 93, 90, 45, 101, 156, 80, 54, 41, 63, 166, 31, 237, 2, 232, }, { 98, 176, 53, 162, 81, 7, 35, 139, 223, 149, 165, 115, 74, 118, 98, 131, }, { 66, 157, 172, 75, 196, 152, 247, 194, 57, 64, 211, 129, 121, 190, 66, 27, }, { 97, 245, 167, 213, 139, 177, 241, 243, 242, 73, 100, 134, 187, 12, 97, 31, }, { 65, 216, 62, 60, 30, 46, 37, 186, 20, 156, 18, 116, 136, 196, 65, 135, }, { 33, 175, 86, 196, 98, 76, 154, 97, 253, 32, 136, 161, 221, 95, 33, 236, }, { 1, 130, 207, 45, 247, 211, 78, 40, 27, 245, 254, 83, 238, 151, 1, 116, }, { 225, 65, 134, 247, 154, 136, 39, 20, 236, 155, 127, 200, 119, 170, 225, 58, }, { 193, 108, 31, 30, 15, 23, 243, 93, 10, 78, 9, 58, 68, 98, 193, 162, }, { 161, 27, 119, 230, 115, 117, 76, 134, 227, 242, 147, 239, 17, 249, 161, 201, }, { 129, 54, 238, 15, 230, 234, 152, 207, 5, 39, 229, 29, 34, 49, 129, 81, }, { 186, 51, 255, 175, 182, 58, 193, 184, 101, 1, 149, 190, 100, 213, 186, 63, }, { 154, 30, 102, 70, 35, 165, 21, 241, 131, 212, 227, 76, 87, 29, 154, 167, }, { 250, 105, 14, 190, 95, 199, 170, 42, 106, 104, 121, 153, 2, 134, 250, 204, }, { 218, 68, 151, 87, 202, 88, 126, 99, 140, 189, 15, 107, 49, 78, 218, 84, }, { 58, 135, 222, 141, 167, 3, 23, 95, 123, 211, 142, 240, 168, 115, 58, 26, }, { 26, 170, 71, 100, 50, 156, 195, 22, 157, 6, 248, 2, 155, 187, 26, 130, }, { 122, 221, 47, 156, 78, 254, 124, 205, 116, 186, 98, 215, 206, 32, 122, 233, }, { 90, 240, 182, 117, 219, 97, 168, 132, 146, 111, 20, 37, 253, 232, 90, 113, }, { 121, 152, 189, 235, 148, 72, 174, 181, 89, 102, 163, 34, 63, 90, 121, 117, }, { 89, 181, 36, 2, 1, 215, 122, 252, 191, 179, 213, 208, 12, 146, 89, 237, }, { 57, 194, 76, 250, 125, 181, 197, 39, 86, 15, 79, 5, 89, 9, 57, 134, }, { 25, 239, 213, 19, 232, 42, 17, 110, 176, 218, 57, 247, 106, 193, 25, 30, }, { 249, 44, 156, 201, 133, 113, 120, 82, 71, 180, 184, 108, 243, 252, 249, 80, }, { 217, 1, 5, 32, 16, 238, 172, 27, 161, 97, 206, 158, 192, 52, 217, 200, }, { 185, 118, 109, 216, 108, 140, 19, 192, 72, 221, 84, 75, 149, 175, 185, 163, }, { 153, 91, 244, 49, 249, 19, 199, 137, 174, 8, 34, 185, 166, 103, 153, 59, }, { 255, 166, 123, 39, 242, 222, 31, 162, 29, 207, 249, 69, 210, 8, 255, 171, }, { 223, 139, 226, 206, 103, 65, 203, 235, 251, 26, 143, 183, 225, 192, 223, 51, }, { 191, 252, 138, 54, 27, 35, 116, 48, 18, 166, 21, 98, 180, 91, 191, 88, }, { 159, 209, 19, 223, 142, 188, 160, 121, 244, 115, 99, 144, 135, 147, 159, 192, }, { 127, 18, 90, 5, 227, 231, 201, 69, 3, 29, 226, 11, 30, 174, 127, 142, }, { 95, 63, 195, 236, 118, 120, 29, 12, 229, 200, 148, 249, 45, 102, 95, 22, }, { 63, 72, 171, 20, 10, 26, 162, 215, 12, 116, 14, 44, 120, 253, 63, 125, }, { 31, 101, 50, 253, 159, 133, 118, 158, 234, 161, 120, 222, 75, 53, 31, 229, }, { 60, 13, 57, 99, 208, 172, 112, 175, 33, 168, 207, 217, 137, 135, 60, 225, }, { 28, 32, 160, 138, 69, 51, 164, 230, 199, 125, 185, 43, 186, 79, 28, 121, }, { 124, 87, 200, 114, 57, 81, 27, 61, 46, 193, 35, 254, 239, 212, 124, 18, }, { 92, 122, 81, 155, 172, 206, 207, 116, 200, 20, 85, 12, 220, 28, 92, 138, }, { 188, 185, 24, 65, 193, 149, 166, 72, 63, 122, 212, 151, 69, 33, 188, 196, }, { 156, 148, 129, 168, 84, 10, 114, 1, 217, 175, 162, 101, 118, 233, 156, 92, }, { 252, 227, 233, 80, 40, 104, 205, 218, 48, 19, 56, 176, 35, 114, 252, 55, }, { 220, 206, 112, 185, 189, 247, 25, 147, 214, 198, 78, 66, 16, 186, 220, 175, }, { 48, 218, 52, 124, 62, 49, 190, 140, 149, 94, 77, 139, 203, 172, 48, 212, }, { 16, 247, 173, 149, 171, 174, 106, 197, 115, 139, 59, 121, 248, 100, 16, 76, }, { 112, 128, 197, 109, 215, 204, 213, 30, 154, 55, 161, 172, 173, 255, 112, 39, }, { 80, 173, 92, 132, 66, 83, 1, 87, 124, 226, 215, 94, 158, 55, 80, 191, }, { 176, 110, 21, 94, 47, 8, 104, 107, 139, 140, 86, 197, 7, 10, 176, 241, }, { 144, 67, 140, 183, 186, 151, 188, 34, 109, 89, 32, 55, 52, 194, 144, 105, }, { 240, 52, 228, 79, 198, 245, 3, 249, 132, 229, 186, 226, 97, 89, 240, 2, }, { 208, 25, 125, 166, 83, 106, 215, 176, 98, 48, 204, 16, 82, 145, 208, 154, }, { 243, 113, 118, 56, 28, 67, 209, 129, 169, 57, 123, 23, 144, 35, 243, 158, }, { 211, 92, 239, 209, 137, 220, 5, 200, 79, 236, 13, 229, 163, 235, 211, 6, }, { 179, 43, 135, 41, 245, 190, 186, 19, 166, 80, 151, 48, 246, 112, 179, 109, }, { 147, 6, 30, 192, 96, 33, 110, 90, 64, 133, 225, 194, 197, 184, 147, 245, }, { 115, 197, 87, 26, 13, 122, 7, 102, 183, 235, 96, 89, 92, 133, 115, 187, }, { 83, 232, 206, 243, 152, 229, 211, 47, 81, 62, 22, 171, 111, 77, 83, 35, }, { 51, 159, 166, 11, 228, 135, 108, 244, 184, 130, 140, 126, 58, 214, 51, 72, }, { 19, 178, 63, 226, 113, 24, 184, 189, 94, 87, 250, 140, 9, 30, 19, 208, }, { 117, 79, 176, 244, 122, 213, 96, 150, 237, 144, 33, 112, 125, 113, 117, 64, }, { 85, 98, 41, 29, 239, 74, 180, 223, 11, 69, 87, 130, 78, 185, 85, 216, }, { 53, 21, 65, 229, 147, 40, 11, 4, 226, 249, 205, 87, 27, 34, 53, 179, }, { 21, 56, 216, 12, 6, 183, 223, 77, 4, 44, 187, 165, 40, 234, 21, 43, }, { 245, 251, 145, 214, 107, 236, 182, 113, 243, 66, 58, 62, 177, 215, 245, 101, }, { 213, 214, 8, 63, 254, 115, 98, 56, 21, 151, 76, 204, 130, 31, 213, 253, }, { 181, 161, 96, 199, 130, 17, 221, 227, 252, 43, 214, 25, 215, 132, 181, 150, }, { 149, 140, 249, 46, 23, 142, 9, 170, 26, 254, 160, 235, 228, 76, 149, 14, }, { 182, 228, 242, 176, 88, 167, 15, 155, 209, 247, 23, 236, 38, 254, 182, 10, }, { 150, 201, 107, 89, 205, 56, 219, 210, 55, 34, 97, 30, 21, 54, 150, 146, }, { 246, 190, 3, 161, 177, 90, 100, 9, 222, 158, 251, 203, 64, 173, 246, 249, }, { 214, 147, 154, 72, 36, 197, 176, 64, 56, 75, 141, 57, 115, 101, 214, 97, }, { 54, 80, 211, 146, 73, 158, 217, 124, 207, 37, 12, 162, 234, 88, 54, 47, }, { 22, 125, 74, 123, 220, 1, 13, 53, 41, 240, 122, 80, 217, 144, 22, 183, }, { 118, 10, 34, 131, 160, 99, 178, 238, 192, 76, 224, 133, 140, 11, 118, 220, }, { 86, 39, 187, 106, 53, 252, 102, 167, 38, 153, 150, 119, 191, 195, 86, 68, }, }, { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, }, { 148, 132, 221, 16, 189, 39, 93, 184, 122, 72, 108, 114, 118, 162, 110, 207, }, { 235, 203, 121, 32, 185, 78, 186, 179, 244, 144, 216, 228, 236, 135, 220, 93, }, { 127, 79, 164, 48, 4, 105, 231, 11, 142, 216, 180, 150, 154, 37, 178, 146, }, { 21, 85, 242, 64, 177, 156, 183, 165, 43, 227, 115, 11, 27, 205, 123, 186, }, { 129, 209, 47, 80, 12, 187, 234, 29, 81, 171, 31, 121, 109, 111, 21, 117, }, { 254, 158, 139, 96, 8, 210, 13, 22, 223, 115, 171, 239, 247, 74, 167, 231, }, { 106, 26, 86, 112, 181, 245, 80, 174, 165, 59, 199, 157, 129, 232, 201, 40, }, { 42, 170, 39, 128, 161, 251, 173, 137, 86, 5, 230, 22, 54, 89, 246, 183, }, { 190, 46, 250, 144, 28, 220, 240, 49, 44, 77, 138, 100, 64, 251, 152, 120, }, { 193, 97, 94, 160, 24, 181, 23, 58, 162, 149, 62, 242, 218, 222, 42, 234, }, { 85, 229, 131, 176, 165, 146, 74, 130, 216, 221, 82, 128, 172, 124, 68, 37, }, { 63, 255, 213, 192, 16, 103, 26, 44, 125, 230, 149, 29, 45, 148, 141, 13, }, { 171, 123, 8, 208, 173, 64, 71, 148, 7, 174, 249, 111, 91, 54, 227, 194, }, { 212, 52, 172, 224, 169, 41, 160, 159, 137, 118, 77, 249, 193, 19, 81, 80, }, { 64, 176, 113, 240, 20, 14, 253, 39, 243, 62, 33, 139, 183, 177, 63, 159, }, { 84, 151, 78, 195, 129, 53, 153, 209, 172, 10, 15, 44, 108, 178, 47, 173, }, { 192, 19, 147, 211, 60, 18, 196, 105, 214, 66, 99, 94, 26, 16, 65, 98, }, { 191, 92, 55, 227, 56, 123, 35, 98, 88, 154, 215, 200, 128, 53, 243, 240, }, { 43, 216, 234, 243, 133, 92, 126, 218, 34, 210, 187, 186, 246, 151, 157, 63, }, { 65, 194, 188, 131, 48, 169, 46, 116, 135, 233, 124, 39, 119, 127, 84, 23, }, { 213, 70, 97, 147, 141, 142, 115, 204, 253, 161, 16, 85, 1, 221, 58, 216, }, { 170, 9, 197, 163, 137, 231, 148, 199, 115, 121, 164, 195, 155, 248, 136, 74, }, { 62, 141, 24, 179, 52, 192, 201, 127, 9, 49, 200, 177, 237, 90, 230, 133, }, { 126, 61, 105, 67, 32, 206, 52, 88, 250, 15, 233, 58, 90, 235, 217, 26, }, { 234, 185, 180, 83, 157, 233, 105, 224, 128, 71, 133, 72, 44, 73, 183, 213, }, { 149, 246, 16, 99, 153, 128, 142, 235, 14, 159, 49, 222, 182, 108, 5, 71, }, { 1, 114, 205, 115, 36, 167, 211, 83, 116, 215, 93, 172, 192, 206, 107, 136, }, { 107, 104, 155, 3, 145, 82, 131, 253, 209, 236, 154, 49, 65, 38, 162, 160, }, { 255, 236, 70, 19, 44, 117, 222, 69, 171, 164, 246, 67, 55, 132, 204, 111, }, { 128, 163, 226, 35, 40, 28, 57, 78, 37, 124, 66, 213, 173, 161, 126, 253, }, { 20, 39, 63, 51, 149, 59, 100, 246, 95, 52, 46, 167, 219, 3, 16, 50, }, { 168, 237, 156, 69, 193, 106, 241, 97, 155, 20, 30, 88, 216, 167, 94, 153, }, { 60, 105, 65, 85, 124, 77, 172, 217, 225, 92, 114, 42, 174, 5, 48, 86, }, { 67, 38, 229, 101, 120, 36, 75, 210, 111, 132, 198, 188, 52, 32, 130, 196, }, { 215, 162, 56, 117, 197, 3, 22, 106, 21, 204, 170, 206, 66, 130, 236, 11, }, { 189, 184, 110, 5, 112, 246, 70, 196, 176, 247, 109, 83, 195, 106, 37, 35, }, { 41, 60, 179, 21, 205, 209, 27, 124, 202, 191, 1, 33, 181, 200, 75, 236, }, { 86, 115, 23, 37, 201, 184, 252, 119, 68, 103, 181, 183, 47, 237, 249, 126, }, { 194, 247, 202, 53, 116, 159, 161, 207, 62, 47, 217, 197, 89, 79, 151, 177, }, { 130, 71, 187, 197, 96, 145, 92, 232, 205, 17, 248, 78, 238, 254, 168, 46, }, { 22, 195, 102, 213, 221, 182, 1, 80, 183, 89, 148, 60, 152, 92, 198, 225, }, { 105, 140, 194, 229, 217, 223, 230, 91, 57, 129, 32, 170, 2, 121, 116, 115, }, { 253, 8, 31, 245, 100, 248, 187, 227, 67, 201, 76, 216, 116, 219, 26, 188, }, { 151, 18, 73, 133, 209, 13, 235, 77, 230, 242, 139, 69, 245, 51, 211, 148, }, { 3, 150, 148, 149, 108, 42, 182, 245, 156, 186, 231, 55, 131, 145, 189, 91, }, { 124, 217, 48, 165, 104, 67, 81, 254, 18, 98, 83, 161, 25, 180, 15, 201, }, { 232, 93, 237, 181, 213, 100, 12, 70, 104, 42, 63, 211, 111, 22, 97, 6, }, { 252, 122, 210, 134, 64, 95, 104, 176, 55, 30, 17, 116, 180, 21, 113, 52, }, { 104, 254, 15, 150, 253, 120, 53, 8, 77, 86, 125, 6, 194, 183, 31, 251, }, { 23, 177, 171, 166, 249, 17, 210, 3, 195, 142, 201, 144, 88, 146, 173, 105, }, { 131, 53, 118, 182, 68, 54, 143, 187, 185, 198, 165, 226, 46, 48, 195, 166, }, { 233, 47, 32, 198, 241, 195, 223, 21, 28, 253, 98, 127, 175, 216, 10, 142, }, { 125, 171, 253, 214, 76, 228, 130, 173, 102, 181, 14, 13, 217, 122, 100, 65, }, { 2, 228, 89, 230, 72, 141, 101, 166, 232, 109, 186, 155, 67, 95, 214, 211, }, { 150, 96, 132, 246, 245, 170, 56, 30, 146, 37, 214, 233, 53, 253, 184, 28, }, { 214, 208, 245, 6, 225, 164, 197, 57, 97, 27, 247, 98, 130, 76, 135, 131, }, { 66, 84, 40, 22, 92, 131, 152, 129, 27, 83, 155, 16, 244, 238, 233, 76, }, { 61, 27, 140, 38, 88, 234, 127, 138, 149, 139, 47, 134, 110, 203, 91, 222, }, { 169, 159, 81, 54, 229, 205, 34, 50, 239, 195, 67, 244, 24, 105, 53, 17, }, { 195, 133, 7, 70, 80, 56, 114, 156, 74, 248, 132, 105, 153, 129, 252, 57, }, { 87, 1, 218, 86, 237, 31, 47, 36, 48, 176, 232, 27, 239, 35, 146, 246, }, { 40, 78, 126, 102, 233, 118, 200, 47, 190, 104, 92, 141, 117, 6, 32, 100, }, { 188, 202, 163, 118, 84, 81, 149, 151, 196, 32, 48, 255, 3, 164, 78, 171, }, { 147, 25, 251, 138, 65, 212, 33, 194, 245, 40, 60, 176, 115, 141, 188, 241, }, { 7, 157, 38, 154, 252, 243, 124, 122, 143, 96, 80, 194, 5, 47, 210, 62, }, { 120, 210, 130, 170, 248, 154, 155, 113, 1, 184, 228, 84, 159, 10, 96, 172, }, { 236, 86, 95, 186, 69, 189, 198, 201, 123, 240, 136, 38, 233, 168, 14, 99, }, { 134, 76, 9, 202, 240, 72, 150, 103, 222, 203, 79, 187, 104, 64, 199, 75, }, { 18, 200, 212, 218, 77, 111, 203, 223, 164, 131, 35, 201, 30, 226, 169, 132, }, { 109, 135, 112, 234, 73, 6, 44, 212, 42, 91, 151, 95, 132, 199, 27, 22, }, { 249, 3, 173, 250, 244, 33, 113, 108, 80, 19, 251, 45, 242, 101, 117, 217, }, { 185, 179, 220, 10, 224, 47, 140, 75, 163, 45, 218, 166, 69, 212, 74, 70, }, { 45, 55, 1, 26, 93, 8, 209, 243, 217, 101, 182, 212, 51, 118, 36, 137, }, { 82, 120, 165, 42, 89, 97, 54, 248, 87, 189, 2, 66, 169, 83, 150, 27, }, { 198, 252, 120, 58, 228, 70, 107, 64, 45, 245, 110, 48, 223, 241, 248, 212, }, { 172, 230, 46, 74, 81, 179, 59, 238, 136, 206, 169, 173, 94, 25, 49, 252, }, { 56, 98, 243, 90, 236, 148, 102, 86, 242, 134, 197, 223, 40, 187, 95, 51, }, { 71, 45, 87, 106, 232, 253, 129, 93, 124, 94, 113, 73, 178, 158, 237, 161, }, { 211, 169, 138, 122, 85, 218, 220, 229, 6, 22, 29, 59, 196, 60, 131, 110, }, { 199, 142, 181, 73, 192, 225, 184, 19, 89, 34, 51, 156, 31, 63, 147, 92, }, { 83, 10, 104, 89, 125, 198, 229, 171, 35, 106, 95, 238, 105, 157, 253, 147, }, { 44, 69, 204, 105, 121, 175, 2, 160, 173, 178, 235, 120, 243, 184, 79, 1, }, { 184, 193, 17, 121, 196, 136, 95, 24, 215, 250, 135, 10, 133, 26, 33, 206, }, { 210, 219, 71, 9, 113, 125, 15, 182, 114, 193, 64, 151, 4, 242, 232, 230, }, { 70, 95, 154, 25, 204, 90, 82, 14, 8, 137, 44, 229, 114, 80, 134, 41, }, { 57, 16, 62, 41, 200, 51, 181, 5, 134, 81, 152, 115, 232, 117, 52, 187, }, { 173, 148, 227, 57, 117, 20, 232, 189, 252, 25, 244, 1, 158, 215, 90, 116, }, { 237, 36, 146, 201, 97, 26, 21, 154, 15, 39, 213, 138, 41, 102, 101, 235, }, { 121, 160, 79, 217, 220, 61, 72, 34, 117, 111, 185, 248, 95, 196, 11, 36, }, { 6, 239, 235, 233, 216, 84, 175, 41, 251, 183, 13, 110, 197, 225, 185, 182, }, { 146, 107, 54, 249, 101, 115, 242, 145, 129, 255, 97, 28, 179, 67, 215, 121, }, { 248, 113, 96, 137, 208, 134, 162, 63, 36, 196, 166, 129, 50, 171, 30, 81, }, { 108, 245, 189, 153, 109, 161, 255, 135, 94, 140, 202, 243, 68, 9, 112, 158, }, { 19, 186, 25, 169, 105, 200, 24, 140, 208, 84, 126, 101, 222, 44, 194, 12, }, { 135, 62, 196, 185, 212, 239, 69, 52, 170, 28, 18, 23, 168, 142, 172, 195, }, { 59, 244, 103, 207, 128, 190, 208, 163, 110, 60, 34, 232, 171, 42, 226, 104, }, { 175, 112, 186, 223, 61, 153, 141, 27, 20, 116, 78, 154, 221, 136, 140, 167, }, { 208, 63, 30, 239, 57, 240, 106, 16, 154, 172, 250, 12, 71, 173, 62, 53, }, { 68, 187, 195, 255, 132, 215, 55, 168, 224, 228, 150, 126, 49, 15, 80, 250, }, { 46, 161, 149, 143, 49, 34, 103, 6, 69, 223, 81, 227, 176, 231, 153, 210, }, { 186, 37, 72, 159, 140, 5, 58, 190, 63, 151, 61, 145, 198, 69, 247, 29, }, { 197, 106, 236, 175, 136, 108, 221, 181, 177, 79, 137, 7, 92, 96, 69, 143, }, { 81, 238, 49, 191, 53, 75, 128, 13, 203, 7, 229, 117, 42, 194, 43, 64, }, { 17, 94, 64, 79, 33, 69, 125, 42, 56, 57, 196, 254, 157, 115, 20, 223, }, { 133, 218, 157, 95, 156, 98, 32, 146, 66, 113, 168, 140, 235, 209, 122, 16, }, { 250, 149, 57, 111, 152, 11, 199, 153, 204, 169, 28, 26, 113, 244, 200, 130, }, { 110, 17, 228, 127, 37, 44, 154, 33, 182, 225, 112, 104, 7, 86, 166, 77, }, { 4, 11, 178, 15, 144, 217, 202, 143, 19, 218, 183, 245, 134, 190, 111, 101, }, { 144, 143, 111, 31, 45, 254, 151, 55, 105, 146, 219, 135, 240, 28, 1, 170, }, { 239, 192, 203, 47, 41, 151, 112, 60, 231, 74, 111, 17, 106, 57, 179, 56, }, { 123, 68, 22, 63, 148, 176, 45, 132, 157, 2, 3, 99, 28, 155, 221, 247, }, { 111, 99, 41, 12, 1, 139, 73, 114, 194, 54, 45, 196, 199, 152, 205, 197, }, { 251, 231, 244, 28, 188, 172, 20, 202, 184, 126, 65, 182, 177, 58, 163, 10, }, { 132, 168, 80, 44, 184, 197, 243, 193, 54, 166, 245, 32, 43, 31, 17, 152, }, { 16, 44, 141, 60, 5, 226, 174, 121, 76, 238, 153, 82, 93, 189, 127, 87, }, { 122, 54, 219, 76, 176, 23, 254, 215, 233, 213, 94, 207, 220, 85, 182, 127, }, { 238, 178, 6, 92, 13, 48, 163, 111, 147, 157, 50, 189, 170, 247, 216, 176, }, { 145, 253, 162, 108, 9, 89, 68, 100, 29, 69, 134, 43, 48, 210, 106, 34, }, { 5, 121, 127, 124, 180, 126, 25, 220, 103, 13, 234, 89, 70, 112, 4, 237, }, { 69, 201, 14, 140, 160, 112, 228, 251, 148, 51, 203, 210, 241, 193, 59, 114, }, { 209, 77, 211, 156, 29, 87, 185, 67, 238, 123, 167, 160, 135, 99, 85, 189, }, { 174, 2, 119, 172, 25, 62, 94, 72, 96, 163, 19, 54, 29, 70, 231, 47, }, { 58, 134, 170, 188, 164, 25, 3, 240, 26, 235, 127, 68, 107, 228, 137, 224, }, { 80, 156, 252, 204, 17, 236, 83, 94, 191, 208, 184, 217, 234, 12, 64, 200, }, { 196, 24, 33, 220, 172, 203, 14, 230, 197, 152, 212, 171, 156, 174, 46, 7, }, { 187, 87, 133, 236, 168, 162, 233, 237, 75, 64, 96, 61, 6, 139, 156, 149, }, { 47, 211, 88, 252, 21, 133, 180, 85, 49, 8, 12, 79, 112, 41, 242, 90, }, { 229, 50, 53, 215, 130, 107, 66, 71, 41, 80, 120, 163, 230, 217, 187, 33, }, { 113, 182, 232, 199, 63, 76, 31, 255, 83, 24, 20, 209, 144, 123, 213, 238, }, { 14, 249, 76, 247, 59, 37, 248, 244, 221, 192, 160, 71, 10, 94, 103, 124, }, { 154, 125, 145, 231, 134, 2, 165, 76, 167, 136, 204, 53, 124, 252, 9, 179, }, { 240, 103, 199, 151, 51, 247, 245, 226, 2, 179, 11, 168, 253, 20, 192, 155, }, { 100, 227, 26, 135, 142, 208, 168, 90, 120, 251, 103, 218, 139, 182, 174, 84, }, { 27, 172, 190, 183, 138, 185, 79, 81, 246, 35, 211, 76, 17, 147, 28, 198, }, { 143, 40, 99, 167, 55, 158, 18, 233, 140, 107, 191, 62, 103, 49, 114, 9, }, { 207, 152, 18, 87, 35, 144, 239, 206, 127, 85, 158, 181, 208, 128, 77, 150, }, { 91, 28, 207, 71, 158, 183, 178, 118, 5, 29, 242, 199, 166, 34, 35, 89, }, { 36, 83, 107, 119, 154, 222, 85, 125, 139, 197, 70, 81, 60, 7, 145, 203, }, { 176, 215, 182, 103, 39, 249, 8, 197, 241, 141, 42, 35, 74, 165, 255, 4, }, { 218, 205, 224, 23, 146, 12, 88, 107, 84, 182, 237, 190, 203, 77, 54, 44, }, { 78, 73, 61, 7, 47, 43, 5, 211, 46, 254, 129, 204, 189, 239, 88, 227, }, { 49, 6, 153, 55, 43, 66, 226, 216, 160, 38, 53, 90, 39, 202, 234, 113, }, { 165, 130, 68, 39, 150, 101, 191, 96, 218, 110, 89, 40, 81, 104, 132, 190, }, { 177, 165, 123, 20, 3, 94, 219, 150, 133, 90, 119, 143, 138, 107, 148, 140, }, { 37, 33, 166, 4, 190, 121, 134, 46, 255, 18, 27, 253, 252, 201, 250, 67, }, { 90, 110, 2, 52, 186, 16, 97, 37, 113, 202, 175, 107, 102, 236, 72, 209, }, { 206, 234, 223, 36, 7, 55, 60, 157, 11, 130, 195, 25, 16, 78, 38, 30, }, { 164, 240, 137, 84, 178, 194, 108, 51, 174, 185, 4, 132, 145, 166, 239, 54, }, { 48, 116, 84, 68, 15, 229, 49, 139, 212, 241, 104, 246, 231, 4, 129, 249, }, { 79, 59, 240, 116, 11, 140, 214, 128, 90, 41, 220, 96, 125, 33, 51, 107, }, { 219, 191, 45, 100, 182, 171, 139, 56, 32, 97, 176, 18, 11, 131, 93, 164, }, { 155, 15, 92, 148, 162, 165, 118, 31, 211, 95, 145, 153, 188, 50, 98, 59, }, { 15, 139, 129, 132, 31, 130, 43, 167, 169, 23, 253, 235, 202, 144, 12, 244, }, { 112, 196, 37, 180, 27, 235, 204, 172, 39, 207, 73, 125, 80, 181, 190, 102, }, { 228, 64, 248, 164, 166, 204, 145, 20, 93, 135, 37, 15, 38, 23, 208, 169, }, { 142, 90, 174, 212, 19, 57, 193, 186, 248, 188, 226, 146, 167, 255, 25, 129, }, { 26, 222, 115, 196, 174, 30, 156, 2, 130, 244, 142, 224, 209, 93, 119, 78, }, { 101, 145, 215, 244, 170, 119, 123, 9, 12, 44, 58, 118, 75, 120, 197, 220, }, { 241, 21, 10, 228, 23, 80, 38, 177, 118, 100, 86, 4, 61, 218, 171, 19, }, { 77, 223, 169, 146, 67, 1, 179, 38, 178, 68, 102, 251, 62, 126, 229, 184, }, { 217, 91, 116, 130, 254, 38, 238, 158, 200, 12, 10, 137, 72, 220, 139, 119, }, { 166, 20, 208, 178, 250, 79, 9, 149, 70, 212, 190, 31, 210, 249, 57, 229, }, { 50, 144, 13, 162, 71, 104, 84, 45, 60, 156, 210, 109, 164, 91, 87, 42, }, { 88, 138, 91, 210, 242, 157, 4, 131, 153, 167, 21, 240, 37, 179, 158, 2, }, { 204, 14, 134, 194, 79, 186, 89, 59, 227, 239, 121, 130, 83, 17, 240, 205, }, { 179, 65, 34, 242, 75, 211, 190, 48, 109, 55, 205, 20, 201, 52, 66, 95, }, { 39, 197, 255, 226, 246, 244, 227, 136, 23, 127, 161, 102, 191, 150, 44, 144, }, { 103, 117, 142, 18, 226, 250, 30, 175, 228, 65, 128, 237, 8, 39, 19, 15, }, { 243, 241, 83, 2, 95, 221, 67, 23, 158, 9, 236, 159, 126, 133, 125, 192, }, { 140, 190, 247, 50, 91, 180, 164, 28, 16, 209, 88, 9, 228, 160, 207, 82, }, { 24, 58, 42, 34, 230, 147, 249, 164, 106, 153, 52, 123, 146, 2, 161, 157, }, { 114, 32, 124, 82, 83, 102, 169, 10, 207, 162, 243, 230, 19, 234, 104, 181, }, { 230, 164, 161, 66, 238, 65, 244, 178, 181, 234, 159, 148, 101, 72, 6, 122, }, { 153, 235, 5, 114, 234, 40, 19, 185, 59, 50, 43, 2, 255, 109, 180, 232, }, { 13, 111, 216, 98, 87, 15, 78, 1, 65, 122, 71, 112, 137, 207, 218, 39, }, { 25, 72, 231, 81, 194, 52, 42, 247, 30, 78, 105, 215, 82, 204, 202, 21, }, { 141, 204, 58, 65, 127, 19, 119, 79, 100, 6, 5, 165, 36, 110, 164, 218, }, { 242, 131, 158, 113, 123, 122, 144, 68, 234, 222, 177, 51, 190, 75, 22, 72, }, { 102, 7, 67, 97, 198, 93, 205, 252, 144, 150, 221, 65, 200, 233, 120, 135, }, { 12, 29, 21, 17, 115, 168, 157, 82, 53, 173, 26, 220, 73, 1, 177, 175, }, { 152, 153, 200, 1, 206, 143, 192, 234, 79, 229, 118, 174, 63, 163, 223, 96, }, { 231, 214, 108, 49, 202, 230, 39, 225, 193, 61, 194, 56, 165, 134, 109, 242, }, { 115, 82, 177, 33, 119, 193, 122, 89, 187, 117, 174, 74, 211, 36, 3, 61, }, { 51, 226, 192, 209, 99, 207, 135, 126, 72, 75, 143, 193, 100, 149, 60, 162, }, { 167, 102, 29, 193, 222, 232, 218, 198, 50, 3, 227, 179, 18, 55, 82, 109, }, { 216, 41, 185, 241, 218, 129, 61, 205, 188, 219, 87, 37, 136, 18, 224, 255, }, { 76, 173, 100, 225, 103, 166, 96, 117, 198, 147, 59, 87, 254, 176, 142, 48, }, { 38, 183, 50, 145, 210, 83, 48, 219, 99, 168, 252, 202, 127, 88, 71, 24, }, { 178, 51, 239, 129, 111, 116, 109, 99, 25, 224, 144, 184, 9, 250, 41, 215, }, { 205, 124, 75, 177, 107, 29, 138, 104, 151, 56, 36, 46, 147, 223, 155, 69, }, { 89, 248, 150, 161, 214, 58, 215, 208, 237, 112, 72, 92, 229, 125, 245, 138, }, { 118, 43, 206, 93, 195, 191, 99, 133, 220, 120, 68, 19, 149, 84, 7, 208, }, { 226, 175, 19, 77, 126, 152, 62, 61, 166, 48, 40, 97, 227, 246, 105, 31, }, { 157, 224, 183, 125, 122, 241, 217, 54, 40, 232, 156, 247, 121, 211, 219, 141, }, { 9, 100, 106, 109, 199, 214, 132, 142, 82, 160, 240, 133, 15, 113, 181, 66, }, { 99, 126, 60, 29, 114, 35, 212, 32, 247, 155, 55, 24, 142, 153, 124, 106, }, { 247, 250, 225, 13, 207, 4, 137, 152, 141, 211, 91, 106, 248, 59, 18, 165, }, { 136, 181, 69, 61, 203, 109, 110, 147, 3, 11, 239, 252, 98, 30, 160, 55, }, { 28, 49, 152, 45, 118, 74, 51, 43, 121, 67, 131, 142, 20, 188, 206, 248, }, { 92, 129, 233, 221, 98, 68, 206, 12, 138, 125, 162, 5, 163, 13, 241, 103, }, { 200, 5, 52, 205, 223, 99, 147, 180, 240, 53, 206, 119, 213, 175, 159, 168, }, { 183, 74, 144, 253, 219, 10, 116, 191, 126, 237, 122, 225, 79, 138, 45, 58, }, { 35, 206, 77, 237, 102, 45, 41, 7, 4, 165, 22, 147, 57, 40, 67, 245, }, { 73, 212, 27, 157, 211, 216, 121, 169, 161, 158, 209, 14, 184, 192, 138, 221, }, { 221, 80, 198, 141, 110, 255, 36, 17, 219, 214, 189, 124, 206, 98, 228, 18, }, { 162, 31, 98, 189, 106, 150, 195, 26, 85, 14, 9, 234, 84, 71, 86, 128, }, { 54, 155, 191, 173, 215, 177, 158, 162, 47, 70, 101, 152, 34, 229, 56, 79, }, { 34, 188, 128, 158, 66, 138, 250, 84, 112, 114, 75, 63, 249, 230, 40, 125, }, { 182, 56, 93, 142, 255, 173, 167, 236, 10, 58, 39, 77, 143, 68, 70, 178, }, { 201, 119, 249, 190, 251, 196, 64, 231, 132, 226, 147, 219, 21, 97, 244, 32, }, { 93, 243, 36, 174, 70, 227, 29, 95, 254, 170, 255, 169, 99, 195, 154, 239, }, { 55, 233, 114, 222, 243, 22, 77, 241, 91, 145, 56, 52, 226, 43, 83, 199, }, { 163, 109, 175, 206, 78, 49, 16, 73, 33, 217, 84, 70, 148, 137, 61, 8, }, { 220, 34, 11, 254, 74, 88, 247, 66, 175, 1, 224, 208, 14, 172, 143, 154, }, { 72, 166, 214, 238, 247, 127, 170, 250, 213, 73, 140, 162, 120, 14, 225, 85, }, { 8, 22, 167, 30, 227, 113, 87, 221, 38, 119, 173, 41, 207, 191, 222, 202, }, { 156, 146, 122, 14, 94, 86, 10, 101, 92, 63, 193, 91, 185, 29, 176, 5, }, { 227, 221, 222, 62, 90, 63, 237, 110, 210, 231, 117, 205, 35, 56, 2, 151, }, { 119, 89, 3, 46, 231, 24, 176, 214, 168, 175, 25, 191, 85, 154, 108, 88, }, { 29, 67, 85, 94, 82, 237, 224, 120, 13, 148, 222, 34, 212, 114, 165, 112, }, { 137, 199, 136, 78, 239, 202, 189, 192, 119, 220, 178, 80, 162, 208, 203, 191, }, { 246, 136, 44, 126, 235, 163, 90, 203, 249, 4, 6, 198, 56, 245, 121, 45, }, { 98, 12, 241, 110, 86, 132, 7, 115, 131, 76, 106, 180, 78, 87, 23, 226, }, { 222, 198, 82, 24, 2, 213, 146, 228, 71, 108, 90, 75, 77, 243, 89, 73, }, { 74, 66, 143, 8, 191, 242, 207, 92, 61, 36, 54, 57, 59, 81, 55, 134, }, { 53, 13, 43, 56, 187, 155, 40, 87, 179, 252, 130, 175, 161, 116, 133, 20, }, { 161, 137, 246, 40, 6, 188, 117, 239, 201, 180, 238, 221, 215, 214, 235, 219, }, { 203, 147, 160, 88, 179, 73, 37, 65, 108, 143, 41, 64, 86, 62, 34, 243, }, { 95, 23, 125, 72, 14, 110, 120, 249, 22, 199, 69, 50, 32, 156, 76, 60, }, { 32, 88, 217, 120, 10, 7, 159, 242, 152, 31, 241, 164, 186, 185, 254, 174, }, { 180, 220, 4, 104, 183, 32, 194, 74, 226, 87, 157, 214, 204, 27, 144, 97, }, { 244, 108, 117, 152, 163, 46, 63, 109, 17, 105, 188, 93, 123, 170, 175, 254, }, { 96, 232, 168, 136, 30, 9, 98, 213, 107, 33, 208, 47, 13, 8, 193, 49, }, { 31, 167, 12, 184, 26, 96, 133, 222, 229, 249, 100, 185, 151, 45, 115, 163, }, { 139, 35, 209, 168, 167, 71, 216, 102, 159, 177, 8, 203, 225, 143, 29, 108, }, { 225, 57, 135, 216, 18, 178, 136, 200, 58, 138, 207, 86, 96, 103, 212, 68, }, { 117, 189, 90, 200, 175, 149, 213, 112, 64, 194, 163, 36, 22, 197, 186, 139, }, { 10, 242, 254, 248, 171, 252, 50, 123, 206, 26, 23, 178, 140, 224, 8, 25, }, { 158, 118, 35, 232, 22, 219, 111, 195, 180, 82, 123, 192, 250, 66, 102, 214, }, { 138, 81, 28, 219, 131, 224, 11, 53, 235, 102, 85, 103, 33, 65, 118, 228, }, { 30, 213, 193, 203, 62, 199, 86, 141, 145, 46, 57, 21, 87, 227, 24, 43, }, { 97, 154, 101, 251, 58, 174, 177, 134, 31, 246, 141, 131, 205, 198, 170, 185, }, { 245, 30, 184, 235, 135, 137, 236, 62, 101, 190, 225, 241, 187, 100, 196, 118, }, { 159, 4, 238, 155, 50, 124, 188, 144, 192, 133, 38, 108, 58, 140, 13, 94, }, { 11, 128, 51, 139, 143, 91, 225, 40, 186, 205, 74, 30, 76, 46, 99, 145, }, { 116, 207, 151, 187, 139, 50, 6, 35, 52, 21, 254, 136, 214, 11, 209, 3, }, { 224, 75, 74, 171, 54, 21, 91, 155, 78, 93, 146, 250, 160, 169, 191, 204, }, { 160, 251, 59, 91, 34, 27, 166, 188, 189, 99, 179, 113, 23, 24, 128, 83, }, { 52, 127, 230, 75, 159, 60, 251, 4, 199, 43, 223, 3, 97, 186, 238, 156, }, { 75, 48, 66, 123, 155, 85, 28, 15, 73, 243, 107, 149, 251, 159, 92, 14, }, { 223, 180, 159, 107, 38, 114, 65, 183, 51, 187, 7, 231, 141, 61, 50, 193, }, { 181, 174, 201, 27, 147, 135, 17, 25, 150, 128, 192, 122, 12, 213, 251, 233, }, { 33, 42, 20, 11, 46, 160, 76, 161, 236, 200, 172, 8, 122, 119, 149, 38, }, { 94, 101, 176, 59, 42, 201, 171, 170, 98, 16, 24, 158, 224, 82, 39, 180, }, { 202, 225, 109, 43, 151, 238, 246, 18, 24, 88, 116, 236, 150, 240, 73, 123, }, }, }; libengine-gost-openssl-3.0.2/gost_grasshopper_precompiled.h000066400000000000000000000010051446070765000242350ustar00rootroot00000000000000/* * Maxim Tishkov 2016 * This file is distributed under the same license as OpenSSL */ #ifndef GOST_GRASSHOPPER_PRECOMPILED_H #define GOST_GRASSHOPPER_PRECOMPILED_H #include "gost_grasshopper_defines.h" #include "gost_grasshopper_math.h" extern const grasshopper_w128_t grasshopper_pil_enc128[GRASSHOPPER_MAX_BIT_PARTS][256]; extern const grasshopper_w128_t grasshopper_l_dec128[GRASSHOPPER_MAX_BIT_PARTS][256]; extern const grasshopper_w128_t grasshopper_pil_dec128[GRASSHOPPER_MAX_BIT_PARTS][256]; #endif libengine-gost-openssl-3.0.2/gost_keyexpimp.c000066400000000000000000000323071446070765000213340ustar00rootroot00000000000000/* * Copyright (c) 2019 Dmitry Belyavskiy * Copyright (c) 2020 Vitaly Chikunov * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #include #include #include #include #include "gost_lcl.h" #include "e_gost_err.h" static uint32_t be32(uint32_t host) { #ifdef L_ENDIAN return (host & 0xff000000) >> 24 | (host & 0x00ff0000) >> 8 | (host & 0x0000ff00) << 8 | (host & 0x000000ff) << 24; #else return host; #endif } int omac_imit_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr); /* * Function expects that out is a preallocated buffer of length * defined as sum of shared_len and mac length defined by mac_nid * */ int gost_kexp15(const unsigned char *shared_key, const int shared_len, int cipher_nid, const unsigned char *cipher_key, int mac_nid, unsigned char *mac_key, const unsigned char *iv, const size_t ivlen, unsigned char *out, int *out_len) { unsigned char iv_full[16], mac_buf[16]; unsigned int mac_len; EVP_CIPHER_CTX *ciph = NULL; EVP_MD_CTX *mac = NULL; int ret = 0; int len; mac_len = (cipher_nid == NID_magma_ctr) ? 8 : (cipher_nid == NID_grasshopper_ctr) ? 16 : 0; if (mac_len == 0) { GOSTerr(GOST_F_GOST_KEXP15, GOST_R_INVALID_CIPHER); goto err; } if (shared_len + mac_len > (unsigned int)(*out_len)) { GOSTerr(GOST_F_GOST_KEXP15, ERR_R_INTERNAL_ERROR); goto err; } /* we expect IV of half length */ memset(iv_full, 0, 16); memcpy(iv_full, iv, ivlen); mac = EVP_MD_CTX_new(); if (mac == NULL) { GOSTerr(GOST_F_GOST_KEXP15, ERR_R_MALLOC_FAILURE); goto err; } if (EVP_DigestInit_ex(mac, EVP_get_digestbynid(mac_nid), NULL) <= 0 || omac_imit_ctrl(mac, EVP_MD_CTRL_SET_KEY, 32, mac_key) <= 0 || omac_imit_ctrl(mac, EVP_MD_CTRL_XOF_LEN, mac_len, NULL) <= 0 || EVP_DigestUpdate(mac, iv, ivlen) <= 0 || EVP_DigestUpdate(mac, shared_key, shared_len) <= 0 /* As we set MAC length directly, we should not allow overwriting it */ || EVP_DigestFinalXOF(mac, mac_buf, mac_len) <= 0) { GOSTerr(GOST_F_GOST_KEXP15, ERR_R_INTERNAL_ERROR); goto err; } ciph = EVP_CIPHER_CTX_new(); if (ciph == NULL) { GOSTerr(GOST_F_GOST_KEXP15, ERR_R_MALLOC_FAILURE); goto err; } if (EVP_CipherInit_ex (ciph, EVP_get_cipherbynid(cipher_nid), NULL, NULL, NULL, 1) <= 0 || EVP_CipherInit_ex(ciph, NULL, NULL, cipher_key, iv_full, 1) <= 0 || EVP_CipherUpdate(ciph, out, &len, shared_key, shared_len) <= 0 || EVP_CipherUpdate(ciph, out + shared_len, &len, mac_buf, mac_len) <= 0 || EVP_CipherFinal_ex(ciph, out + shared_len + len, out_len) <= 0) { GOSTerr(GOST_F_GOST_KEXP15, ERR_R_INTERNAL_ERROR); goto err; } *out_len = shared_len + mac_len; ret = 1; err: OPENSSL_cleanse(mac_buf, mac_len); EVP_MD_CTX_free(mac); EVP_CIPHER_CTX_free(ciph); return ret; } /* * Function expects that shared_key is a preallocated buffer * with length defined as expkeylen + mac_len defined by mac_nid * */ int gost_kimp15(const unsigned char *expkey, const size_t expkeylen, int cipher_nid, const unsigned char *cipher_key, int mac_nid, unsigned char *mac_key, const unsigned char *iv, const size_t ivlen, unsigned char *shared_key) { unsigned char iv_full[16], out[48], mac_buf[16]; unsigned int mac_len; const size_t shared_len = 32; EVP_CIPHER_CTX *ciph = NULL; EVP_MD_CTX *mac = NULL; int ret = 0; int len; mac_len = (cipher_nid == NID_magma_ctr) ? 8 : (cipher_nid == NID_grasshopper_ctr) ? 16 : 0; if (mac_len == 0) { GOSTerr(GOST_F_GOST_KIMP15, GOST_R_INVALID_CIPHER); goto err; } if (expkeylen > sizeof(out)) { GOSTerr(GOST_F_GOST_KIMP15, ERR_R_INTERNAL_ERROR); goto err; } if (ivlen > 16) { GOSTerr(GOST_F_GOST_KIMP15, ERR_R_INTERNAL_ERROR); goto err; } /* we expect IV of half length */ memset(iv_full, 0, 16); memcpy(iv_full, iv, ivlen); ciph = EVP_CIPHER_CTX_new(); if (ciph == NULL) { GOSTerr(GOST_F_GOST_KIMP15, ERR_R_MALLOC_FAILURE); goto err; } if (EVP_CipherInit_ex (ciph, EVP_get_cipherbynid(cipher_nid), NULL, NULL, NULL, 0) <= 0 || EVP_CipherInit_ex(ciph, NULL, NULL, cipher_key, iv_full, 0) <= 0 || EVP_CipherUpdate(ciph, out, &len, expkey, expkeylen) <= 0 || EVP_CipherFinal_ex(ciph, out + len, &len) <= 0) { GOSTerr(GOST_F_GOST_KIMP15, ERR_R_INTERNAL_ERROR); goto err; } /*Now we have shared key and mac in out[] */ mac = EVP_MD_CTX_new(); if (mac == NULL) { GOSTerr(GOST_F_GOST_KIMP15, ERR_R_MALLOC_FAILURE); goto err; } if (EVP_DigestInit_ex(mac, EVP_get_digestbynid(mac_nid), NULL) <= 0 || omac_imit_ctrl(mac, EVP_MD_CTRL_SET_KEY, 32, mac_key) <= 0 || omac_imit_ctrl(mac, EVP_MD_CTRL_XOF_LEN, mac_len, NULL) <= 0 || EVP_DigestUpdate(mac, iv, ivlen) <= 0 || EVP_DigestUpdate(mac, out, shared_len) <= 0 /* As we set MAC length directly, we should not allow overwriting it */ || EVP_DigestFinalXOF(mac, mac_buf, mac_len) <= 0) { GOSTerr(GOST_F_GOST_KIMP15, ERR_R_INTERNAL_ERROR); goto err; } if (CRYPTO_memcmp(mac_buf, out + shared_len, mac_len) != 0) { GOSTerr(GOST_F_GOST_KIMP15, GOST_R_BAD_MAC); goto err; } memcpy(shared_key, out, shared_len); ret = 1; err: OPENSSL_cleanse(out, sizeof(out)); EVP_MD_CTX_free(mac); EVP_CIPHER_CTX_free(ciph); return ret; } int gost_kdftree2012_256(unsigned char *keyout, size_t keyout_len, const unsigned char *key, size_t keylen, const unsigned char *label, size_t label_len, const unsigned char *seed, size_t seed_len, const size_t representation) { int iters, i = 0; unsigned char zero = 0; unsigned char *ptr = keyout; HMAC_CTX *ctx; unsigned char *len_ptr = NULL; uint32_t len_repr = be32(keyout_len * 8); size_t len_repr_len = 4; ctx = HMAC_CTX_new(); if (ctx == NULL) { GOSTerr(GOST_F_GOST_KDFTREE2012_256, ERR_R_MALLOC_FAILURE); return 0; } if ((keyout_len == 0) || (keyout_len % 32 != 0)) { GOSTerr(GOST_F_GOST_KDFTREE2012_256, ERR_R_INTERNAL_ERROR); return 0; } iters = keyout_len / 32; len_ptr = (unsigned char *)&len_repr; while (*len_ptr == 0) { len_ptr++; len_repr_len--; } for (i = 1; i <= iters; i++) { uint32_t iter_net = be32(i); unsigned char *rep_ptr = ((unsigned char *)&iter_net) + (4 - representation); if (HMAC_Init_ex(ctx, key, keylen, EVP_get_digestbynid(NID_id_GostR3411_2012_256), NULL) <= 0 || HMAC_Update(ctx, rep_ptr, representation) <= 0 || HMAC_Update(ctx, label, label_len) <= 0 || HMAC_Update(ctx, &zero, 1) <= 0 || HMAC_Update(ctx, seed, seed_len) <= 0 || HMAC_Update(ctx, len_ptr, len_repr_len) <= 0 || HMAC_Final(ctx, ptr, NULL) <= 0) { GOSTerr(GOST_F_GOST_KDFTREE2012_256, ERR_R_INTERNAL_ERROR); HMAC_CTX_free(ctx); return 0; } HMAC_CTX_reset(ctx); ptr += 32; } HMAC_CTX_free(ctx); return 1; } int gost_tlstree(int cipher_nid, const unsigned char *in, unsigned char *out, const unsigned char *tlsseq) { uint64_t gh_c1 = 0x00000000FFFFFFFF, gh_c2 = 0x0000F8FFFFFFFFFF, gh_c3 = 0xC0FFFFFFFFFFFFFF; uint64_t mg_c1 = 0x00000000C0FFFFFF, mg_c2 = 0x000000FEFFFFFFFF, mg_c3 = 0x00F0FFFFFFFFFFFF; uint64_t c1, c2, c3; uint64_t seed1, seed2, seed3; uint64_t seq; unsigned char ko1[32], ko2[32]; switch (cipher_nid) { case NID_magma_cbc: c1 = mg_c1; c2 = mg_c2; c3 = mg_c3; break; case NID_grasshopper_cbc: c1 = gh_c1; c2 = gh_c2; c3 = gh_c3; break; default: return 0; } #ifndef L_ENDIAN BUF_reverse((unsigned char *)&seq, tlsseq, 8); #else memcpy(&seq, tlsseq, 8); #endif seed1 = seq & c1; seed2 = seq & c2; seed3 = seq & c3; if (gost_kdftree2012_256(ko1, 32, in, 32, (const unsigned char *)"level1", 6, (const unsigned char *)&seed1, 8, 1) <= 0 || gost_kdftree2012_256(ko2, 32, ko1, 32, (const unsigned char *)"level2", 6, (const unsigned char *)&seed2, 8, 1) <= 0 || gost_kdftree2012_256(out, 32, ko2, 32, (const unsigned char *)"level3", 6, (const unsigned char *)&seed3, 8, 1) <= 0) return 0; return 1; } #define GOST_WRAP_FLAGS EVP_CIPH_CTRL_INIT | EVP_CIPH_WRAP_MODE | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER | EVP_CIPH_FLAG_DEFAULT_ASN1 #define MAGMA_MAC_WRAP_LEN 8 #define KUZNYECHIK_MAC_WRAP_LEN 16 #define MAX_MAC_WRAP_LEN KUZNYECHIK_MAC_WRAP_LEN #define GOSTKEYLEN 32 #define MAGMA_WRAPPED_KEY_LEN GOSTKEYLEN + MAGMA_MAC_WRAP_LEN #define KUZNYECHIK_WRAPPED_KEY_LEN GOSTKEYLEN + KUZNYECHIK_MAC_WRAP_LEN #define MAX_WRAPPED_KEY_LEN KUZNYECHIK_WRAPPED_KEY_LEN typedef struct { unsigned char iv[8]; /* Max IV size is half of base cipher block length */ unsigned char key[GOSTKEYLEN*2]; /* Combined cipher and mac keys */ unsigned char wrapped[MAX_WRAPPED_KEY_LEN]; /* Max size */ size_t wrap_count; } GOST_WRAP_CTX; static int magma_wrap_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { GOST_WRAP_CTX *cctx = EVP_CIPHER_CTX_get_cipher_data(ctx); memset(cctx->wrapped, 0, MAX_WRAPPED_KEY_LEN); cctx->wrap_count = 0; if (iv) { memset(cctx->iv, 0, 8); memcpy(cctx->iv, iv, 4); } if (key) { memcpy(cctx->key, key, GOSTKEYLEN*2); } return 1; } static int magma_wrap_do(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { GOST_WRAP_CTX *cctx = EVP_CIPHER_CTX_get_cipher_data(ctx); int enc = EVP_CIPHER_CTX_encrypting(ctx) ? 1 : 0; if (out == NULL) return GOSTKEYLEN; if (inl <= MAGMA_WRAPPED_KEY_LEN) { if (cctx->wrap_count + inl > MAGMA_WRAPPED_KEY_LEN) return -1; if (cctx->wrap_count + inl <= MAGMA_WRAPPED_KEY_LEN) { memcpy(cctx->wrapped+cctx->wrap_count, in, inl); cctx->wrap_count += inl; } } if (cctx->wrap_count < MAGMA_WRAPPED_KEY_LEN) return 0; if (enc) { #if 0 return gost_kexp15(cctx->key, 32, NID_magma_ctr, in, NID_magma_mac, cctx->key, /* FIXME mac_key, */ cctx->iv, 4, out, &outl); #endif return -1; } else { return gost_kimp15(cctx->wrapped, cctx->wrap_count, NID_magma_ctr, cctx->key+GOSTKEYLEN, NID_magma_mac, cctx->key, cctx->iv, 4, out) > 0 ? GOSTKEYLEN : 0; } } static int kuznyechik_wrap_init(EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc) { GOST_WRAP_CTX *cctx = EVP_CIPHER_CTX_get_cipher_data(ctx); memset(cctx->wrapped, 0, KUZNYECHIK_WRAPPED_KEY_LEN); cctx->wrap_count = 0; if (iv) { memset(cctx->iv, 0, 8); memcpy(cctx->iv, iv, 8); } if (key) { memcpy(cctx->key, key, GOSTKEYLEN*2); } return 1; } static int kuznyechik_wrap_do(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl) { GOST_WRAP_CTX *cctx = EVP_CIPHER_CTX_get_cipher_data(ctx); int enc = EVP_CIPHER_CTX_encrypting(ctx) ? 1 : 0; if (out == NULL) return GOSTKEYLEN; if (inl <= KUZNYECHIK_WRAPPED_KEY_LEN) { if (cctx->wrap_count + inl > KUZNYECHIK_WRAPPED_KEY_LEN) return -1; if (cctx->wrap_count + inl <= KUZNYECHIK_WRAPPED_KEY_LEN) { memcpy(cctx->wrapped+cctx->wrap_count, in, inl); cctx->wrap_count += inl; } } if (cctx->wrap_count < KUZNYECHIK_WRAPPED_KEY_LEN) return 0; if (enc) { #if 0 return gost_kexp15(cctx->key, 32, NID_magma_ctr, in, NID_magma_mac, cctx->key, /* FIXME mac_key, */ cctx->iv, 4, out, &outl); #endif return -1; } else { return gost_kimp15(cctx->wrapped, cctx->wrap_count, NID_kuznyechik_ctr, cctx->key+GOSTKEYLEN, NID_kuznyechik_mac, cctx->key, cctx->iv, 8, out) > 0 ? GOSTKEYLEN : 0; } } static int wrap_ctrl (EVP_CIPHER_CTX *ctx, int type, int arg, void *ptr) { switch(type) { case EVP_CTRL_INIT: EVP_CIPHER_CTX_set_flags(ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW); return 1; default: return -2; } } static GOST_cipher wrap_template_cipher = { .key_len = GOSTKEYLEN * 2, .flags = GOST_WRAP_FLAGS, .ctx_size = sizeof(GOST_WRAP_CTX), .ctrl = wrap_ctrl, }; GOST_cipher magma_kexp15_cipher = { .template = &wrap_template_cipher, .nid = NID_magma_kexp15, .block_size = 8, .iv_len = 4, .init = magma_wrap_init, .do_cipher = magma_wrap_do, }; GOST_cipher kuznyechik_kexp15_cipher = { .template = &wrap_template_cipher, .nid = NID_kuznyechik_kexp15, .block_size = 16, .iv_len = 8, .init = kuznyechik_wrap_init, .do_cipher = kuznyechik_wrap_do, }; /* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */ libengine-gost-openssl-3.0.2/gost_keywrap.c000066400000000000000000000076661446070765000210150ustar00rootroot00000000000000/********************************************************************** * keywrap.c * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Implementation of CryptoPro key wrap algorithm, as defined in * * RFC 4357 p 6.3 and 6.4 * * Doesn't need OpenSSL * **********************************************************************/ #include #include "gost89.h" #include "gost_keywrap.h" /*- * Diversifies key using random UserKey Material * Implements RFC 4357 p 6.5 key diversification algorithm * * inputKey - 32byte key to be diversified * ukm - 8byte user key material * outputKey - 32byte buffer to store diversified key * */ void keyDiversifyCryptoPro(gost_ctx * ctx, const unsigned char *inputKey, const unsigned char *ukm, unsigned char *outputKey) { int i; memcpy(outputKey, inputKey, 32); for (i = 0; i < 8; i++) { u4 s1 = 0; u4 s2 = 0; int j, mask; unsigned char S[8]; /* Make array of integers from key */ /* Compute IV S */ for (j = 0, mask = 1; j < 8; j++, mask <<= 1) { u4 k; k = ((u4) outputKey[4 * j]) | (outputKey[4 * j + 1] << 8) | (outputKey[4 * j + 2] << 16) | (outputKey[4 * j + 3] << 24); if (mask & ukm[i]) { s1 += k; } else { s2 += k; } } S[0] = (unsigned char)(s1 & 0xff); S[1] = (unsigned char)((s1 >> 8) & 0xff); S[2] = (unsigned char)((s1 >> 16) & 0xff); S[3] = (unsigned char)((s1 >> 24) & 0xff); S[4] = (unsigned char)(s2 & 0xff); S[5] = (unsigned char)((s2 >> 8) & 0xff); S[6] = (unsigned char)((s2 >> 16) & 0xff); S[7] = (unsigned char)((s2 >> 24) & 0xff); gost_key(ctx, outputKey); gost_enc_cfb(ctx, S, outputKey, outputKey, 4); } } /*- * Wraps key using RFC 4357 6.3 * ctx - gost encryption context, initialized with some S-boxes * keyExchangeKey (KEK) 32-byte (256-bit) shared key * ukm - 8 byte (64 bit) user key material, * sessionKey - 32-byte (256-bit) key to be wrapped * wrappedKey - 44-byte buffer to store wrapped key */ int keyWrapCryptoPro(gost_ctx * ctx, const unsigned char *keyExchangeKey, const unsigned char *ukm, const unsigned char *sessionKey, unsigned char *wrappedKey) { unsigned char kek_ukm[32]; keyDiversifyCryptoPro(ctx, keyExchangeKey, ukm, kek_ukm); gost_key(ctx, kek_ukm); memcpy(wrappedKey, ukm, 8); gost_enc(ctx, sessionKey, wrappedKey + 8, 4); gost_mac_iv(ctx, 32, ukm, sessionKey, 32, wrappedKey + 40); return 1; } /*- * Unwraps key using RFC 4357 6.4 * ctx - gost encryption context, initialized with some S-boxes * keyExchangeKey 32-byte shared key * wrappedKey 44 byte key to be unwrapped (concatenation of 8-byte UKM, * 32 byte encrypted key and 4 byte MAC * * sessionKEy - 32byte buffer to store sessionKey in * Returns 1 if key is decrypted successfully, and 0 if MAC doesn't match */ int keyUnwrapCryptoPro(gost_ctx * ctx, const unsigned char *keyExchangeKey, const unsigned char *wrappedKey, unsigned char *sessionKey) { unsigned char kek_ukm[32], cek_mac[4]; keyDiversifyCryptoPro(ctx, keyExchangeKey, wrappedKey /* First 8 bytes of wrapped Key is ukm */ , kek_ukm); gost_key(ctx, kek_ukm); gost_dec(ctx, wrappedKey + 8, sessionKey, 4); gost_mac_iv(ctx, 32, wrappedKey, sessionKey, 32, cek_mac); if (memcmp(cek_mac, wrappedKey + 40, 4)) { return 0; } return 1; } libengine-gost-openssl-3.0.2/gost_keywrap.h000066400000000000000000000044561446070765000210140ustar00rootroot00000000000000/********************************************************************** * gost_keywrap.h * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Implementation of CryptoPro key wrap algorithm, as defined in * * RFC 4357 p 6.3 and 6.4 * * Doesn't need OpenSSL * **********************************************************************/ #ifndef GOST_KEYWRAP_H # define GOST_KEYWRAP_H # include # include "gost89.h" /*- * Diversifies key using random UserKey Material * Implements RFC 4357 p 6.5 key diversification algorithm * * inputKey - 32byte key to be diversified * ukm - 8byte user key material * outputKey - 32byte buffer to store diversified key * */ void keyDiversifyCryptoPro(gost_ctx * ctx, const unsigned char *inputKey, const unsigned char *ukm, unsigned char *outputKey); /*- * Wraps key using RFC 4357 6.3 * ctx - gost encryption context, initialized with some S-boxes * keyExchangeKey (KEK) 32-byte (256-bit) shared key * ukm - 8 byte (64 bit) user key material, * sessionKey - 32-byte (256-bit) key to be wrapped * wrappedKey - 44-byte buffer to store wrapped key */ int keyWrapCryptoPro(gost_ctx * ctx, const unsigned char *keyExchangeKey, const unsigned char *ukm, const unsigned char *sessionKey, unsigned char *wrappedKey); /*- * Unwraps key using RFC 4357 6.4 * ctx - gost encryption context, initialized with some S-boxes * keyExchangeKey 32-byte shared key * wrappedKey 44 byte key to be unwrapped (concatenation of 8-byte UKM, * 32 byte encrypted key and 4 byte MAC * * sessionKEy - 32byte buffer to store sessionKey in * Returns 1 if key is decrypted successfully, and 0 if MAC doesn't match */ int keyUnwrapCryptoPro(gost_ctx * ctx, const unsigned char *keyExchangeKey, const unsigned char *wrappedKey, unsigned char *sessionKey); #endif libengine-gost-openssl-3.0.2/gost_lcl.h000066400000000000000000000346671446070765000201130ustar00rootroot00000000000000#ifndef GOST_TOOLS_H # define GOST_TOOLS_H /********************************************************************** * gost_lcl.h * * Copyright (c) 2006 Cryptocom LTD * * Copyright (c) 2020 Vitaly Chikunov * * This file is distributed under the same license as OpenSSL * * * * Internal declarations used in GOST engine * * OpenSSL 0.9.9 libraries required to compile and use * * this code * **********************************************************************/ # include # include # include # include # include # include # include # include # include "gost89.h" # include "gosthash.h" /* Control commands */ # define GOST_PARAM_CRYPT_PARAMS 0 # define GOST_PARAM_PBE_PARAMS 1 # define GOST_PARAM_PK_FORMAT 2 # define GOST_PARAM_MAX 3 # define GOST_CTRL_CRYPT_PARAMS (ENGINE_CMD_BASE+GOST_PARAM_CRYPT_PARAMS) # define GOST_CTRL_PBE_PARAMS (ENGINE_CMD_BASE+GOST_PARAM_PBE_PARAMS) # define GOST_CTRL_PK_FORMAT (ENGINE_CMD_BASE+GOST_PARAM_PK_FORMAT) typedef struct R3410_ec { int nid; char *a; char *b; char *p; char *q; char *x; char *y; char *cofactor; EC_GROUP *group; } R3410_ec_params; extern R3410_ec_params R3410_2001_paramset[], *R3410_2012_256_paramset, R3410_2012_512_paramset[]; void free_cached_groups(void); extern const ENGINE_CMD_DEFN gost_cmds[]; int gost_control_func(ENGINE *e, int cmd, long i, void *p, void (*f) (void)); const char *get_gost_engine_param(int param); int gost_set_default_param(int param, const char *value); void gost_param_free(void); /* method registration */ /* Provider implementation data */ extern const OSSL_ALGORITHM GOST_prov_macs[]; void GOST_prov_deinit_mac_digests(void); int register_ameth_gost(int nid, EVP_PKEY_ASN1_METHOD **ameth, const char *pemstr, const char *info); int register_pmeth_gost(int id, EVP_PKEY_METHOD **pmeth, int flags); /* Gost-specific pmeth control-function parameters */ /* For GOST R34.10 parameters */ # define param_ctrl_string "paramset" # define ukm_ctrl_string "ukmhex" # define vko_ctrl_string "vko" # define EVP_PKEY_CTRL_GOST_PARAMSET (EVP_PKEY_ALG_CTRL+1) /* For GOST 28147 MAC */ # define key_ctrl_string "key" # define hexkey_ctrl_string "hexkey" # define maclen_ctrl_string "size" # define EVP_PKEY_CTRL_GOST_MAC_HEXKEY (EVP_PKEY_ALG_CTRL+3) # define EVP_PKEY_CTRL_MAC_LEN (EVP_PKEY_ALG_CTRL+5) # define EVP_PKEY_CTRL_SET_VKO (EVP_PKEY_ALG_CTRL+11) /* Pmeth internal representation */ struct gost_pmeth_data { int sign_param_nid; /* Should be set whenever parameters are * filled */ EVP_MD *md; unsigned char shared_ukm[32]; size_t shared_ukm_size; int peer_key_used; int cipher_nid; /* KExp15/KImp15 algs */ int vko_dgst_nid; }; struct gost_mac_pmeth_data { short int key_set; short int mac_size; int mac_param_nid; EVP_MD *md; unsigned char key[32]; }; struct gost_mac_key { int mac_param_nid; unsigned char key[32]; short int mac_size; }; /* GOST-specific ASN1 structures */ typedef struct { ASN1_OCTET_STRING *encrypted_key; ASN1_OCTET_STRING *imit; } GOST_KEY_INFO; DECLARE_ASN1_FUNCTIONS(GOST_KEY_INFO) typedef struct { ASN1_OBJECT *cipher; X509_PUBKEY *ephem_key; ASN1_OCTET_STRING *eph_iv; } GOST_KEY_AGREEMENT_INFO; DECLARE_ASN1_FUNCTIONS(GOST_KEY_AGREEMENT_INFO) typedef struct { GOST_KEY_INFO *key_info; GOST_KEY_AGREEMENT_INFO *key_agreement_info; } GOST_KEY_TRANSPORT; DECLARE_ASN1_FUNCTIONS(GOST_KEY_TRANSPORT) typedef struct { /* FIXME incomplete */ GOST_KEY_TRANSPORT *gkt; } GOST_CLIENT_KEY_EXCHANGE_PARAMS; /* PSKeyTransport ::= SEQUENCE { PSEXP OCTET STRING, ephemeralPublicKey SubjectPublicKeyInfo } SubjectPublicKeyInfo ::= SEQUENCE { algorithm AlgorithmIdentifier, subjectPublicKey BITSTRING } AlgorithmIdentifier ::= SEQUENCE { algorithm OBJECT IDENTIFIER, parameters ANY OPTIONAL }*/ typedef struct PSKeyTransport_st { ASN1_OCTET_STRING *psexp; X509_PUBKEY *ephem_key; ASN1_OCTET_STRING *ukm; } PSKeyTransport_gost; DECLARE_ASN1_FUNCTIONS(PSKeyTransport_gost) /* * Hacks to shorten symbols to 31 characters or less, or OpenVMS. This mimics * what's done in symhacks.h, but since this is a very local header file, I * prefered to put this hack directly here. -- Richard Levitte */ # ifdef OPENSSL_SYS_VMS # undef GOST_CLIENT_KEY_EXCHANGE_PARAMS_it # define GOST_CLIENT_KEY_EXCHANGE_PARAMS_it GOST_CLIENT_KEY_EXC_PARAMS_it # undef GOST_CLIENT_KEY_EXCHANGE_PARAMS_new # define GOST_CLIENT_KEY_EXCHANGE_PARAMS_new GOST_CLIENT_KEY_EXC_PARAMS_new # undef GOST_CLIENT_KEY_EXCHANGE_PARAMS_free # define GOST_CLIENT_KEY_EXCHANGE_PARAMS_free GOST_CLIENT_KEY_EXC_PARAMS_free # undef d2i_GOST_CLIENT_KEY_EXCHANGE_PARAMS # define d2i_GOST_CLIENT_KEY_EXCHANGE_PARAMS d2i_GOST_CLIENT_KEY_EXC_PARAMS # undef i2d_GOST_CLIENT_KEY_EXCHANGE_PARAMS # define i2d_GOST_CLIENT_KEY_EXCHANGE_PARAMS i2d_GOST_CLIENT_KEY_EXC_PARAMS # endif /* End of hack */ DECLARE_ASN1_FUNCTIONS(GOST_CLIENT_KEY_EXCHANGE_PARAMS) typedef struct { ASN1_OBJECT *key_params; ASN1_OBJECT *hash_params; ASN1_OBJECT *cipher_params; } GOST_KEY_PARAMS; DECLARE_ASN1_FUNCTIONS(GOST_KEY_PARAMS) typedef struct { ASN1_OCTET_STRING *iv; ASN1_OBJECT *enc_param_set; } GOST_CIPHER_PARAMS; DECLARE_ASN1_FUNCTIONS(GOST_CIPHER_PARAMS) typedef struct { ASN1_OCTET_STRING *ukm; } GOST2015_CIPHER_PARAMS; DECLARE_ASN1_FUNCTIONS(GOST2015_CIPHER_PARAMS) typedef struct { ASN1_OCTET_STRING *masked_priv_key; ASN1_OCTET_STRING *public_key; } MASKED_GOST_KEY; DECLARE_ASN1_FUNCTIONS(MASKED_GOST_KEY) /*============== Message digest and cipher related structures ==========*/ /* * Structure used as EVP_MD_CTX-md_data. It allows to avoid storing * in the md-data pointers to dynamically allocated memory. I * cannot invent better way to avoid memory leaks, because openssl * insist on invoking Init on Final-ed digests, and there is no * reliable way to find out whether pointer in the passed md_data is * valid or not. */ struct ossl_gost_digest_ctx { gost_hash_ctx dctx; gost_ctx cctx; }; /* Cipher context used for EVP_CIPHER operation */ struct ossl_gost_cipher_ctx { int paramNID; unsigned int count; int key_meshing; unsigned char kdf_seed[8]; unsigned char tag[8]; gost_ctx cctx; EVP_MD_CTX *omac_ctx; }; /* Structure to map parameter NID to S-block */ struct gost_cipher_info { int nid; gost_subst_block *sblock; int key_meshing; }; /* Context for MAC */ struct ossl_gost_imit_ctx { gost_ctx cctx; unsigned char buffer[8]; unsigned char partial_block[8]; unsigned int count; int key_meshing; int bytes_left; int key_set; int dgst_size; }; /* Find encryption params from ASN1_OBJECT */ const struct gost_cipher_info *get_encryption_params(ASN1_OBJECT *obj); void inc_counter(unsigned char *counter, size_t counter_bytes); # define EVP_MD_CTRL_KEY_LEN (EVP_MD_CTRL_ALG_CTRL+3) # define EVP_MD_CTRL_SET_KEY (EVP_MD_CTRL_ALG_CTRL+4) /* EVP_PKEY_METHOD key encryption callbacks */ /* From gost_ec_keyx.c */ int pkey_gost_encrypt(EVP_PKEY_CTX *pctx, unsigned char *out, size_t *out_len, const unsigned char *key, size_t key_len); int pkey_gost_decrypt(EVP_PKEY_CTX *pctx, unsigned char *key, size_t *key_len, const unsigned char *in, size_t in_len); /* derive functions */ /* From gost_ec_keyx.c */ int pkey_gost_ec_derive(EVP_PKEY_CTX *ctx, unsigned char *key, size_t *keylen); int fill_GOST_EC_params(EC_KEY *eckey, int nid); int gost_ec_keygen(EC_KEY *ec); ECDSA_SIG *gost_ec_sign(const unsigned char *dgst, int dlen, EC_KEY *eckey); int gost_ec_verify(const unsigned char *dgst, int dgst_len, ECDSA_SIG *sig, EC_KEY *ec); int gost_ec_compute_public(EC_KEY *ec); int gost_ec_point_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); #define CURVEDEF(a) \ int point_mul_##a(const EC_GROUP *group, EC_POINT *r, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);\ int point_mul_g_##a(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, BN_CTX *ctx);\ int point_mul_two_##a(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx); CURVEDEF(id_GostR3410_2001_CryptoPro_A_ParamSet) CURVEDEF(id_GostR3410_2001_CryptoPro_B_ParamSet) CURVEDEF(id_GostR3410_2001_CryptoPro_C_ParamSet) CURVEDEF(id_GostR3410_2001_TestParamSet) CURVEDEF(id_tc26_gost_3410_2012_256_paramSetA) CURVEDEF(id_tc26_gost_3410_2012_512_paramSetA) CURVEDEF(id_tc26_gost_3410_2012_512_paramSetB) CURVEDEF(id_tc26_gost_3410_2012_512_paramSetC) /* VKO */ int VKO_compute_key(unsigned char *shared_key, const EC_POINT *pub_key, const EC_KEY *priv_key, const unsigned char *ukm, const size_t ukm_size, const int vko_dgst_nid); /* KDF TREE */ int gost_kdftree2012_256(unsigned char *keyout, size_t keyout_len, const unsigned char *key, size_t keylen, const unsigned char *label, size_t label_len, const unsigned char *seed, size_t seed_len, const size_t representation); int gost_tlstree(int cipher_nid, const unsigned char *in, unsigned char *out, const unsigned char *tlsseq); /* KExp/KImp */ int gost_kexp15(const unsigned char *shared_key, const int shared_len, int cipher_nid, const unsigned char *cipher_key, int mac_nid, unsigned char *mac_key, const unsigned char *iv, const size_t ivlen, unsigned char *out, int *out_len); int gost_kimp15(const unsigned char *expkey, const size_t expkeylen, int cipher_nid, const unsigned char *cipher_key, int mac_nid, unsigned char *mac_key, const unsigned char *iv, const size_t ivlen, unsigned char *shared_key); /*============== miscellaneous functions============================= */ /* * Store bignum in byte array of given length, prepending by zeros if * nesseccary */ int store_bignum(const BIGNUM *bn, unsigned char *buf, int len); /* Pack GOST R 34.10 signature according to CryptoPro rules */ int pack_sign_cp(ECDSA_SIG *s, int order, unsigned char *sig, size_t *siglen); /* from ameth.c */ /* Get private key as BIGNUM from both 34.10-2001 keys*/ /* Returns pointer into EVP_PKEY structure */ BIGNUM *gost_get0_priv_key(const EVP_PKEY *pkey); /* from gost_crypt.c */ /* Decrements 8-byte sequence */ int decrement_sequence(unsigned char *seq, int decrement); /* Struct describing cipher and used for init/deinit.*/ struct gost_cipher_st { struct gost_cipher_st *template; /* template struct */ int nid; EVP_CIPHER *cipher; int block_size; /* (bytes) */ int key_len; /* (bytes) */ int iv_len; int flags; int (*init) (EVP_CIPHER_CTX *ctx, const unsigned char *key, const unsigned char *iv, int enc); int (*do_cipher)(EVP_CIPHER_CTX *ctx, unsigned char *out, const unsigned char *in, size_t inl); int (*cleanup)(EVP_CIPHER_CTX *); int ctx_size; int (*set_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); int (*get_asn1_parameters)(EVP_CIPHER_CTX *, ASN1_TYPE *); int (*ctrl)(EVP_CIPHER_CTX *, int type, int arg, void *ptr); }; typedef struct gost_cipher_st GOST_cipher; EVP_CIPHER *GOST_init_cipher(GOST_cipher *c); void GOST_deinit_cipher(GOST_cipher *c); /* ENGINE implementation data */ extern GOST_cipher Gost28147_89_cipher; extern GOST_cipher Gost28147_89_cbc_cipher; extern GOST_cipher Gost28147_89_cnt_cipher; extern GOST_cipher Gost28147_89_cnt_12_cipher; extern GOST_cipher magma_ctr_cipher; extern GOST_cipher magma_ctr_acpkm_cipher; extern GOST_cipher magma_ctr_acpkm_omac_cipher; extern GOST_cipher magma_ecb_cipher; extern GOST_cipher magma_cbc_cipher; extern GOST_cipher magma_mgm_cipher; extern GOST_cipher grasshopper_ecb_cipher; extern GOST_cipher grasshopper_cbc_cipher; extern GOST_cipher grasshopper_cfb_cipher; extern GOST_cipher grasshopper_ofb_cipher; extern GOST_cipher grasshopper_ctr_cipher; extern GOST_cipher grasshopper_mgm_cipher; extern GOST_cipher grasshopper_ctr_acpkm_cipher; extern GOST_cipher grasshopper_ctr_acpkm_omac_cipher; extern GOST_cipher magma_kexp15_cipher; extern GOST_cipher kuznyechik_kexp15_cipher; /* Provider implementation data */ extern const OSSL_ALGORITHM GOST_prov_ciphers[]; void GOST_prov_deinit_ciphers(void); struct gost_digest_st { struct gost_digest_st *template; int nid; const char *alias; EVP_MD *digest; int result_size; int input_blocksize; int app_datasize; int flags; int (*init)(EVP_MD_CTX *ctx); int (*update)(EVP_MD_CTX *ctx, const void *data, size_t count); int (*final)(EVP_MD_CTX *ctx, unsigned char *md); int (*copy)(EVP_MD_CTX *to, const EVP_MD_CTX *from); int (*cleanup)(EVP_MD_CTX *ctx); int (*ctrl)(EVP_MD_CTX *ctx, int cmd, int p1, void *p2); }; typedef struct gost_digest_st GOST_digest; EVP_MD *GOST_init_digest(GOST_digest *d); void GOST_deinit_digest(GOST_digest *d); /* ENGINE implementation data */ extern GOST_digest GostR3411_94_digest; extern GOST_digest Gost28147_89_MAC_digest; extern GOST_digest Gost28147_89_mac_12_digest; extern GOST_digest GostR3411_2012_256_digest; extern GOST_digest GostR3411_2012_512_digest; extern GOST_digest magma_mac_digest; extern GOST_digest grasshopper_mac_digest; extern GOST_digest kuznyechik_ctracpkm_omac_digest; /* Provider implementation data */ extern const OSSL_ALGORITHM GOST_prov_digests[]; void GOST_prov_deinit_digests(void); /* job to initialize a missing NID */ struct gost_nid_job { const char *sn; const char *ln; void (*callback)(int nid); ASN1_OBJECT *asn1; }; typedef struct gost_nid_job GOST_NID_JOB; extern GOST_NID_JOB magma_mgm_NID; extern GOST_NID_JOB kuznyechik_mgm_NID; #endif /* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */ libengine-gost-openssl-3.0.2/gost_md.c000066400000000000000000000077131446070765000177240ustar00rootroot00000000000000/********************************************************************** * md_gost.c * * Copyright (c) 2005-2006 Cryptocom LTD * * Copyright (c) 2020 Vitaly Chikunov * * This file is distributed under the same license as OpenSSL * * * * OpenSSL interface to GOST R 34.11-94 hash functions * * Requires OpenSSL 0.9.9 for compilation * **********************************************************************/ #include #include "gost_lcl.h" #include "gosthash.h" #include "e_gost_err.h" /* implementation of GOST 34.11 hash function See gost_md.c*/ static int gost_digest_init(EVP_MD_CTX *ctx); static int gost_digest_update(EVP_MD_CTX *ctx, const void *data, size_t count); static int gost_digest_final(EVP_MD_CTX *ctx, unsigned char *md); static int gost_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from); static int gost_digest_cleanup(EVP_MD_CTX *ctx); GOST_digest GostR3411_94_digest = { .nid = NID_id_GostR3411_94, .result_size = 32, .input_blocksize = 32, .app_datasize = sizeof(struct ossl_gost_digest_ctx), .init = gost_digest_init, .update = gost_digest_update, .final = gost_digest_final, .copy = gost_digest_copy, .cleanup = gost_digest_cleanup, }; /* * Single level template accessor. * Note: that you cannot template 0 value. */ #define TPL(st,field) ( \ ((st)->field) ? ((st)->field) : TPL_VAL(st,field) \ ) #define TPL_VAL(st,field) ( \ ((st)->template ? (st)->template->field : 0) \ ) EVP_MD *GOST_init_digest(GOST_digest *d) { if (d->digest) return d->digest; EVP_MD *md; if (!(md = EVP_MD_meth_new(d->nid, NID_undef)) || !EVP_MD_meth_set_result_size(md, TPL(d, result_size)) || !EVP_MD_meth_set_input_blocksize(md, TPL(d, input_blocksize)) || !EVP_MD_meth_set_app_datasize(md, TPL(d, app_datasize)) || !EVP_MD_meth_set_flags(md, d->flags | TPL_VAL(d, flags)) || !EVP_MD_meth_set_init(md, TPL(d, init)) || !EVP_MD_meth_set_update(md, TPL(d, update)) || !EVP_MD_meth_set_final(md, TPL(d, final)) || !EVP_MD_meth_set_copy(md, TPL(d, copy)) || !EVP_MD_meth_set_cleanup(md, TPL(d, cleanup)) || !EVP_MD_meth_set_ctrl(md, TPL(d, ctrl))) { EVP_MD_meth_free(md); md = NULL; } if (md && d->alias) EVP_add_digest_alias(EVP_MD_name(md), d->alias); d->digest = md; return md; } void GOST_deinit_digest(GOST_digest *d) { if (d->alias) EVP_delete_digest_alias(d->alias); EVP_MD_meth_free(d->digest); d->digest = NULL; } static int gost_digest_init(EVP_MD_CTX *ctx) { struct ossl_gost_digest_ctx *c = EVP_MD_CTX_md_data(ctx); memset(&(c->dctx), 0, sizeof(gost_hash_ctx)); gost_init(&(c->cctx), &GostR3411_94_CryptoProParamSet); c->dctx.cipher_ctx = &(c->cctx); return 1; } static int gost_digest_update(EVP_MD_CTX *ctx, const void *data, size_t count) { return hash_block((gost_hash_ctx *) EVP_MD_CTX_md_data(ctx), data, count); } static int gost_digest_final(EVP_MD_CTX *ctx, unsigned char *md) { return finish_hash((gost_hash_ctx *) EVP_MD_CTX_md_data(ctx), md); } static int gost_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) { struct ossl_gost_digest_ctx *md_ctx = EVP_MD_CTX_md_data(to); if (EVP_MD_CTX_md_data(to) && EVP_MD_CTX_md_data(from)) { memcpy(EVP_MD_CTX_md_data(to), EVP_MD_CTX_md_data(from), sizeof(struct ossl_gost_digest_ctx)); md_ctx->dctx.cipher_ctx = &(md_ctx->cctx); } return 1; } static int gost_digest_cleanup(EVP_MD_CTX *ctx) { if (EVP_MD_CTX_md_data(ctx)) memset(EVP_MD_CTX_md_data(ctx), 0, sizeof(struct ossl_gost_digest_ctx)); return 1; } /* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */ libengine-gost-openssl-3.0.2/gost_md2012.c000066400000000000000000000103151446070765000202210ustar00rootroot00000000000000/********************************************************************** * gost_md2012.c * * Copyright (c) 2013 Cryptocom LTD. * * Copyright (c) 2020 Vitaly Chikunov * * This file is distributed under the same license as OpenSSL * * * * GOST R 34.11-2012 interface to OpenSSL engine. * * * * Author: Alexey Degtyarev * * * **********************************************************************/ #include #include "gosthash2012.h" #include "gost_lcl.h" static int gost_digest_init512(EVP_MD_CTX *ctx); static int gost_digest_init256(EVP_MD_CTX *ctx); static int gost_digest_update(EVP_MD_CTX *ctx, const void *data, size_t count); static int gost_digest_final(EVP_MD_CTX *ctx, unsigned char *md); static int gost_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from); static int gost_digest_cleanup(EVP_MD_CTX *ctx); static int gost_digest_ctrl_256(EVP_MD_CTX *ctx, int type, int arg, void *ptr); static int gost_digest_ctrl_512(EVP_MD_CTX *ctx, int type, int arg, void *ptr); const char micalg_256[] = "gostr3411-2012-256"; const char micalg_512[] = "gostr3411-2012-512"; GOST_digest GostR3411_2012_template_digest = { .input_blocksize = 64, .app_datasize = sizeof(gost2012_hash_ctx), .update = gost_digest_update, .final = gost_digest_final, .copy = gost_digest_copy, .cleanup = gost_digest_cleanup, }; GOST_digest GostR3411_2012_256_digest = { .nid = NID_id_GostR3411_2012_256, .alias = "streebog256", .template = &GostR3411_2012_template_digest, .result_size = 32, .init = gost_digest_init256, .ctrl = gost_digest_ctrl_256, }; GOST_digest GostR3411_2012_512_digest = { .nid = NID_id_GostR3411_2012_512, .alias = "streebog512", .template = &GostR3411_2012_template_digest, .result_size = 64, .init = gost_digest_init512, .ctrl = gost_digest_ctrl_512, }; static int gost_digest_init512(EVP_MD_CTX *ctx) { init_gost2012_hash_ctx((gost2012_hash_ctx *) EVP_MD_CTX_md_data(ctx), 512); return 1; } static int gost_digest_init256(EVP_MD_CTX *ctx) { init_gost2012_hash_ctx((gost2012_hash_ctx *) EVP_MD_CTX_md_data(ctx), 256); return 1; } static int gost_digest_update(EVP_MD_CTX *ctx, const void *data, size_t count) { gost2012_hash_block((gost2012_hash_ctx *) EVP_MD_CTX_md_data(ctx), data, count); return 1; } static int gost_digest_final(EVP_MD_CTX *ctx, unsigned char *md) { gost2012_finish_hash((gost2012_hash_ctx *) EVP_MD_CTX_md_data(ctx), md); return 1; } static int gost_digest_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) { if (EVP_MD_CTX_md_data(to) && EVP_MD_CTX_md_data(from)) memcpy(EVP_MD_CTX_md_data(to), EVP_MD_CTX_md_data(from), sizeof(gost2012_hash_ctx)); return 1; } static int gost_digest_cleanup(EVP_MD_CTX *ctx) { if (EVP_MD_CTX_md_data(ctx)) memset(EVP_MD_CTX_md_data(ctx), 0x00, sizeof(gost2012_hash_ctx)); return 1; } static int gost_digest_ctrl_256(EVP_MD_CTX *ctx, int type, int arg, void *ptr) { switch (type) { case EVP_MD_CTRL_MICALG: { *((char **)ptr) = OPENSSL_malloc(strlen(micalg_256) + 1); if (*((char **)ptr) != NULL) { strcpy(*((char **)ptr), micalg_256); return 1; } return 0; } default: return 0; } } static int gost_digest_ctrl_512(EVP_MD_CTX *ctx, int type, int arg, void *ptr) { switch (type) { case EVP_MD_CTRL_MICALG: { *((char **)ptr) = OPENSSL_malloc(strlen(micalg_512) + 1); if (*((char **)ptr) != NULL) { strcpy(*((char **)ptr), micalg_512); return 1; } } default: return 0; } } libengine-gost-openssl-3.0.2/gost_omac.c000066400000000000000000000200121446070765000202260ustar00rootroot00000000000000/* * Copyright (c) 2019 Dmitry Belyavskiy * Copyright (c) 2020 Vitaly Chikunov * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #include #include #include #include #include #include "e_gost_err.h" #include "gost_lcl.h" #define min(a,b) (((a) < (b)) ? (a) : (b)) typedef struct omac_ctx { CMAC_CTX *cmac_ctx; size_t dgst_size; const char *cipher_name; int key_set; /* * Here begins stuff related to TLSTREE processing * We MUST store the original key to derive TLSTREE keys from it * and TLS seq no. * */ unsigned char key[32]; /* * TODO * TLSTREE intermediate values should be recalculated only when * C_i & (seq_no+1) != C_i & (seq_no) * so somewhen we will store C_i & (seq_no) in this structure * to avoid redundant hash calculations. * */ } OMAC_CTX; #define MAX_GOST_OMAC_SIZE 16 static int omac_init(EVP_MD_CTX *ctx, const char *cipher_name) { OMAC_CTX *c = EVP_MD_CTX_md_data(ctx); memset(c, 0, sizeof(OMAC_CTX)); c->cipher_name = cipher_name; c->key_set = 0; switch (OBJ_txt2nid(cipher_name)) { case NID_magma_cbc: c->dgst_size = 8; break; case NID_grasshopper_cbc: c->dgst_size = 16; break; } return 1; } static int magma_imit_init(EVP_MD_CTX *ctx) { return omac_init(ctx, SN_magma_cbc); } static int grasshopper_imit_init(EVP_MD_CTX *ctx) { return omac_init(ctx, SN_grasshopper_cbc); } static int omac_imit_update(EVP_MD_CTX *ctx, const void *data, size_t count) { OMAC_CTX *c = EVP_MD_CTX_md_data(ctx); if (!c->key_set) { GOSTerr(GOST_F_OMAC_IMIT_UPDATE, GOST_R_MAC_KEY_NOT_SET); return 0; } return CMAC_Update(c->cmac_ctx, data, count); } static int omac_imit_final(EVP_MD_CTX *ctx, unsigned char *md) { OMAC_CTX *c = EVP_MD_CTX_md_data(ctx); unsigned char mac[MAX_GOST_OMAC_SIZE]; size_t mac_size = sizeof(mac); if (!c->key_set) { GOSTerr(GOST_F_OMAC_IMIT_FINAL, GOST_R_MAC_KEY_NOT_SET); return 0; } CMAC_Final(c->cmac_ctx, mac, &mac_size); memcpy(md, mac, c->dgst_size); return 1; } static int omac_imit_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) { OMAC_CTX *c_to = EVP_MD_CTX_md_data(to); const OMAC_CTX *c_from = EVP_MD_CTX_md_data(from); if (c_from && c_to) { c_to->dgst_size = c_from->dgst_size; c_to->cipher_name = c_from->cipher_name; c_to->key_set = c_from->key_set; memcpy(c_to->key, c_from->key, 32); } else { return 0; } if (!c_from->cmac_ctx) { if (c_to->cmac_ctx) { CMAC_CTX_free(c_to->cmac_ctx); c_to->cmac_ctx = NULL; } return 1; } if (c_to->cmac_ctx == c_from->cmac_ctx) { c_to->cmac_ctx = CMAC_CTX_new(); } return CMAC_CTX_copy(c_to->cmac_ctx, c_from->cmac_ctx); } /* Clean up imit ctx */ static int omac_imit_cleanup(EVP_MD_CTX *ctx) { OMAC_CTX *c = EVP_MD_CTX_md_data(ctx); if (c) { CMAC_CTX_free(c->cmac_ctx); memset(EVP_MD_CTX_md_data(ctx), 0, sizeof(OMAC_CTX)); } return 1; } static int omac_key(OMAC_CTX * c, const EVP_CIPHER *cipher, const unsigned char *key, size_t key_size) { int ret = 0; CMAC_CTX_free(c->cmac_ctx); c->cmac_ctx = CMAC_CTX_new(); if (c->cmac_ctx == NULL) { GOSTerr(GOST_F_OMAC_KEY, ERR_R_MALLOC_FAILURE); return 0; } ret = CMAC_Init(c->cmac_ctx, key, key_size, cipher, NULL); if (ret > 0) { c->key_set = 1; } return 1; } /* Called directly by gost_kexp15() */ int omac_imit_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr) { switch (type) { case EVP_MD_CTRL_KEY_LEN: *((unsigned int *)(ptr)) = 32; return 1; case EVP_MD_CTRL_SET_KEY: { OMAC_CTX *c = EVP_MD_CTX_md_data(ctx); const EVP_MD *md = EVP_MD_CTX_md(ctx); EVP_CIPHER *cipher = NULL; int ret = 0; if (c->cipher_name == NULL) { if (EVP_MD_is_a(md, SN_magma_mac)) c->cipher_name = SN_magma_cbc; else if (EVP_MD_is_a(md, SN_grasshopper_mac)) c->cipher_name = SN_grasshopper_cbc; } if ((cipher = (EVP_CIPHER *)EVP_get_cipherbyname(c->cipher_name)) == NULL && (cipher = EVP_CIPHER_fetch(NULL, c->cipher_name, NULL)) == NULL) { GOSTerr(GOST_F_OMAC_IMIT_CTRL, GOST_R_CIPHER_NOT_FOUND); goto set_key_end; } if (EVP_MD_meth_get_init(EVP_MD_CTX_md(ctx)) (ctx) <= 0) { GOSTerr(GOST_F_OMAC_IMIT_CTRL, GOST_R_MAC_KEY_NOT_SET); goto set_key_end; } EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_NO_INIT); if (c->key_set) { GOSTerr(GOST_F_OMAC_IMIT_CTRL, GOST_R_BAD_ORDER); goto set_key_end; } if (arg == 0) { struct gost_mac_key *key = (struct gost_mac_key *)ptr; ret = omac_key(c, cipher, key->key, 32); if (ret > 0) memcpy(c->key, key->key, 32); goto set_key_end; } else if (arg == 32) { ret = omac_key(c, cipher, ptr, 32); if (ret > 0) memcpy(c->key, ptr, 32); goto set_key_end; } GOSTerr(GOST_F_OMAC_IMIT_CTRL, GOST_R_INVALID_MAC_KEY_SIZE); set_key_end: EVP_CIPHER_free(cipher); if (ret > 0) return ret; return 0; } case EVP_MD_CTRL_XOF_LEN: /* Supported in OpenSSL */ { OMAC_CTX *c = EVP_MD_CTX_md_data(ctx); switch (OBJ_txt2nid(c->cipher_name)) { case NID_magma_cbc: if (arg < 1 || arg > 8) { GOSTerr(GOST_F_OMAC_IMIT_CTRL, GOST_R_INVALID_MAC_SIZE); return 0; } c->dgst_size = arg; break; case NID_grasshopper_cbc: if (arg < 1 || arg > 16) { GOSTerr(GOST_F_OMAC_IMIT_CTRL, GOST_R_INVALID_MAC_SIZE); return 0; } c->dgst_size = arg; break; default: return 0; } return 1; } #ifdef EVP_MD_CTRL_TLSTREE case EVP_MD_CTRL_TLSTREE: { OMAC_CTX *c = EVP_MD_CTX_md_data(ctx); if (c->key_set) { unsigned char diversed_key[32]; int ret = 0; if (gost_tlstree(OBJ_txt2nid(c->cipher_name), c->key, diversed_key, (const unsigned char *)ptr)) { EVP_CIPHER *cipher; if ((cipher = (EVP_CIPHER *)EVP_get_cipherbyname(c->cipher_name)) || (cipher = EVP_CIPHER_fetch(NULL, c->cipher_name, NULL))) ret = omac_key(c, cipher, diversed_key, 32); EVP_CIPHER_free(cipher); } return ret; } GOSTerr(GOST_F_OMAC_IMIT_CTRL, GOST_R_BAD_ORDER); return 0; } #endif default: return 0; } } static GOST_digest omac_template_digest = { .input_blocksize = 8, .app_datasize = sizeof(OMAC_CTX), .flags = EVP_MD_FLAG_XOF, .update = omac_imit_update, .final = omac_imit_final, .copy = omac_imit_copy, .cleanup = omac_imit_cleanup, .ctrl = omac_imit_ctrl, }; GOST_digest magma_mac_digest = { .nid = NID_magma_mac, .template = &omac_template_digest, .result_size = 8, .init = magma_imit_init, }; GOST_digest grasshopper_mac_digest = { .nid = NID_grasshopper_mac, .template = &omac_template_digest, .result_size = 16, .init = grasshopper_imit_init, }; libengine-gost-openssl-3.0.2/gost_omac_acpkm.c000066400000000000000000000401661446070765000214150ustar00rootroot00000000000000/* * Copyright (C) 2018,2020 Vitaly Chikunov . All Rights Reserved. * Copyright (c) 2010 The OpenSSL Project. All rights reserved. * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #include #include #include #include #include #include "e_gost_err.h" #include "gost_lcl.h" #include "gost_grasshopper_defines.h" #include "gost_grasshopper_cipher.h" #define ACPKM_T_MAX (GRASSHOPPER_KEY_SIZE + GRASSHOPPER_BLOCK_SIZE) /* * CMAC code from crypto/cmac/cmac.c with ACPKM tweaks */ struct CMAC_ACPKM_CTX_st { /* Cipher context to use */ EVP_CIPHER_CTX *cctx; /* CTR-ACPKM cipher */ EVP_CIPHER_CTX *actx; unsigned char km[ACPKM_T_MAX]; /* Key material */ /* Temporary block */ unsigned char tbl[EVP_MAX_BLOCK_LENGTH]; /* Last (possibly partial) block */ unsigned char last_block[EVP_MAX_BLOCK_LENGTH]; /* Number of bytes in last block: -1 means context not initialised */ int nlast_block; unsigned int section_size; /* N */ unsigned int num; /* processed bytes until section_size */ }; typedef struct CMAC_ACPKM_CTX_st CMAC_ACPKM_CTX; static unsigned char zero_iv[ACPKM_T_MAX]; /* Make temporary keys K1 and K2 */ static void make_kn(unsigned char *k1, unsigned char *l, int bl) { int i; /* Shift block to left, including carry */ for (i = 0; i < bl; i++) { k1[i] = l[i] << 1; if (i < bl - 1 && l[i + 1] & 0x80) k1[i] |= 1; } /* If MSB set fixup with R */ if (l[0] & 0x80) k1[bl - 1] ^= bl == 16 ? 0x87 : 0x1b; } static CMAC_ACPKM_CTX *CMAC_ACPKM_CTX_new(void) { CMAC_ACPKM_CTX *ctx; ctx = OPENSSL_zalloc(sizeof(CMAC_ACPKM_CTX)); if (!ctx) return NULL; ctx->cctx = EVP_CIPHER_CTX_new(); if (ctx->cctx == NULL) { OPENSSL_free(ctx); return NULL; } ctx->actx = EVP_CIPHER_CTX_new(); if (ctx->actx == NULL) { EVP_CIPHER_CTX_free(ctx->cctx); OPENSSL_free(ctx); return NULL; } ctx->nlast_block = -1; ctx->num = 0; ctx->section_size = 4096; /* recommended value for Kuznyechik */ return ctx; } static void CMAC_ACPKM_CTX_cleanup(CMAC_ACPKM_CTX *ctx) { EVP_CIPHER_CTX_cleanup(ctx->cctx); EVP_CIPHER_CTX_cleanup(ctx->actx); OPENSSL_cleanse(ctx->tbl, EVP_MAX_BLOCK_LENGTH); OPENSSL_cleanse(ctx->km, ACPKM_T_MAX); OPENSSL_cleanse(ctx->last_block, EVP_MAX_BLOCK_LENGTH); ctx->nlast_block = -1; } static void CMAC_ACPKM_CTX_free(CMAC_ACPKM_CTX *ctx) { if (!ctx) return; CMAC_ACPKM_CTX_cleanup(ctx); EVP_CIPHER_CTX_free(ctx->cctx); EVP_CIPHER_CTX_free(ctx->actx); OPENSSL_free(ctx); } static int CMAC_ACPKM_CTX_copy(CMAC_ACPKM_CTX *out, const CMAC_ACPKM_CTX *in) { int bl; if (in->nlast_block == -1) return 0; if (!EVP_CIPHER_CTX_copy(out->cctx, in->cctx)) return 0; if (!EVP_CIPHER_CTX_copy(out->actx, in->actx)) return 0; bl = EVP_CIPHER_CTX_block_size(in->cctx); memcpy(out->km, in->km, ACPKM_T_MAX); memcpy(out->tbl, in->tbl, bl); memcpy(out->last_block, in->last_block, bl); out->nlast_block = in->nlast_block; out->section_size = in->section_size; out->num = in->num; return 1; } static int CMAC_ACPKM_Init(CMAC_ACPKM_CTX *ctx, const void *key, size_t keylen, const EVP_CIPHER *cipher, ENGINE *impl) { /* All zeros means restart */ if (!key && !cipher && !impl && keylen == 0) { /* Not initialised */ if (ctx->nlast_block == -1) return 0; if (!EVP_EncryptInit_ex(ctx->cctx, NULL, NULL, NULL, zero_iv)) return 0; memset(ctx->tbl, 0, EVP_CIPHER_CTX_block_size(ctx->cctx)); ctx->nlast_block = 0; /* No restart for ACPKM */ return 1; } /* Initialise context */ if (cipher) { const EVP_CIPHER *acpkm; if (!EVP_EncryptInit_ex(ctx->cctx, cipher, impl, NULL, NULL)) return 0; if (!EVP_CIPHER_is_a(cipher, SN_grasshopper_cbc)) return 0; acpkm = cipher_gost_grasshopper_ctracpkm(); if (!EVP_EncryptInit_ex(ctx->actx, acpkm, impl, NULL, NULL)) return 0; } /* Non-NULL key means initialisation is complete */ if (key) { unsigned char acpkm_iv[EVP_MAX_BLOCK_LENGTH]; int block_size, key_len; /* Initialize CTR for ACPKM-Master */ if (!EVP_CIPHER_CTX_cipher(ctx->actx)) return 0; /* block size of ACPKM cipher could be 1, but, * cbc cipher is same with correct block_size */ block_size = EVP_CIPHER_CTX_block_size(ctx->cctx); /* Wide IV = 1^{n/2} || 0, * where a^r denotes the string that consists of r 'a' bits */ memset(acpkm_iv, 0xff, block_size / 2); memset(acpkm_iv + block_size / 2, 0, block_size / 2); if (!EVP_EncryptInit_ex(ctx->actx, NULL, NULL, key, acpkm_iv)) return 0; /* EVP_CIPHER key_len may be different from EVP_CIPHER_CTX key_len */ key_len = EVP_CIPHER_key_length(EVP_CIPHER_CTX_cipher(ctx->actx)); /* Generate first key material (K^1 || K^1_1) */ if (!EVP_Cipher(ctx->actx, ctx->km, zero_iv, key_len + block_size)) return 0; /* Initialize cbc for CMAC */ if (!EVP_CIPHER_CTX_cipher(ctx->cctx) || !EVP_CIPHER_CTX_set_key_length(ctx->cctx, key_len)) return 0; /* set CBC key to K^1 */ if (!EVP_EncryptInit_ex(ctx->cctx, NULL, NULL, ctx->km, zero_iv)) return 0; ctx->nlast_block = 0; } return 1; } /* Encrypt zeros with master key * to generate T*-sized key material */ static int CMAC_ACPKM_Master(CMAC_ACPKM_CTX *ctx) { return EVP_Cipher(ctx->actx, ctx->km, zero_iv, EVP_CIPHER_key_length(EVP_CIPHER_CTX_cipher(ctx->actx)) + EVP_CIPHER_CTX_block_size(ctx->cctx)); } static int CMAC_ACPKM_Mesh(CMAC_ACPKM_CTX *ctx) { if (ctx->num < ctx->section_size) return 1; ctx->num = 0; if (!CMAC_ACPKM_Master(ctx)) return 0; /* Restart cbc with new key */ if (!EVP_EncryptInit_ex(ctx->cctx, NULL, NULL, ctx->km, EVP_CIPHER_CTX_iv(ctx->cctx))) return 0; return 1; } static int CMAC_ACPKM_Update(CMAC_ACPKM_CTX *ctx, const void *in, size_t dlen) { const unsigned char *data = in; size_t bl; if (ctx->nlast_block == -1) return 0; if (dlen == 0) return 1; bl = EVP_CIPHER_CTX_block_size(ctx->cctx); /* Copy into partial block if we need to */ if (ctx->nlast_block > 0) { size_t nleft; nleft = bl - ctx->nlast_block; if (dlen < nleft) nleft = dlen; memcpy(ctx->last_block + ctx->nlast_block, data, nleft); dlen -= nleft; ctx->nlast_block += nleft; /* If no more to process return */ if (dlen == 0) return 1; data += nleft; /* Else not final block so encrypt it */ if (!CMAC_ACPKM_Mesh(ctx)) return 0; if (!EVP_Cipher(ctx->cctx, ctx->tbl, ctx->last_block, bl)) return 0; ctx->num += bl; } /* Encrypt all but one of the complete blocks left */ while (dlen > bl) { if (!CMAC_ACPKM_Mesh(ctx)) return 0; if (!EVP_Cipher(ctx->cctx, ctx->tbl, data, bl)) return 0; dlen -= bl; data += bl; ctx->num += bl; } /* Copy any data left to last block buffer */ memcpy(ctx->last_block, data, dlen); ctx->nlast_block = dlen; return 1; } /* Return value is propagated to EVP_DigestFinal_ex */ static int CMAC_ACPKM_Final(CMAC_ACPKM_CTX *ctx, unsigned char *out, size_t *poutlen) { int i, bl, lb, key_len; unsigned char *k1, k2[EVP_MAX_BLOCK_LENGTH]; if (ctx->nlast_block == -1) return 0; bl = EVP_CIPHER_CTX_block_size(ctx->cctx); if (bl != 8 && bl != 16) { GOSTerr(GOST_F_OMAC_ACPKM_IMIT_FINAL, GOST_R_INVALID_MAC_PARAMS); return 0; } *poutlen = (size_t) bl; if (!out) return 1; lb = ctx->nlast_block; if (!CMAC_ACPKM_Mesh(ctx)) return 0; key_len = EVP_CIPHER_key_length(EVP_CIPHER_CTX_cipher(ctx->actx)); /* Keys k1 and k2 */ k1 = ctx->km + key_len; make_kn(k2, ctx->km + key_len, bl); /* Is last block complete? */ if (lb == bl) { for (i = 0; i < bl; i++) out[i] = ctx->last_block[i] ^ k1[i]; } else { ctx->last_block[lb] = 0x80; if (bl - lb > 1) memset(ctx->last_block + lb + 1, 0, bl - lb - 1); for (i = 0; i < bl; i++) out[i] = ctx->last_block[i] ^ k2[i]; } OPENSSL_cleanse(k1, bl); OPENSSL_cleanse(k2, bl); OPENSSL_cleanse(ctx->km, ACPKM_T_MAX); if (!EVP_Cipher(ctx->cctx, out, out, bl)) { OPENSSL_cleanse(out, bl); return 0; } return 1; } /* * End of CMAC code from crypto/cmac/cmac.c with ACPKM tweaks */ typedef struct omac_acpkm_ctx { CMAC_ACPKM_CTX *cmac_ctx; size_t dgst_size; const char *cipher_name; int key_set; } OMAC_ACPKM_CTX; #define MAX_GOST_OMAC_ACPKM_SIZE 16 static int omac_acpkm_init(EVP_MD_CTX *ctx, const char *cipher_name) { OMAC_ACPKM_CTX *c = EVP_MD_CTX_md_data(ctx); memset(c, 0, sizeof(OMAC_ACPKM_CTX)); c->cipher_name = cipher_name; c->key_set = 0; switch (OBJ_txt2nid(cipher_name)) { case NID_grasshopper_cbc: c->dgst_size = 16; break; } return 1; } static int grasshopper_omac_acpkm_init(EVP_MD_CTX *ctx) { return omac_acpkm_init(ctx, SN_grasshopper_cbc); } static int omac_acpkm_imit_update(EVP_MD_CTX *ctx, const void *data, size_t count) { OMAC_ACPKM_CTX *c = EVP_MD_CTX_md_data(ctx); if (!c->key_set) { GOSTerr(GOST_F_OMAC_ACPKM_IMIT_UPDATE, GOST_R_MAC_KEY_NOT_SET); return 0; } return CMAC_ACPKM_Update(c->cmac_ctx, data, count); } int omac_acpkm_imit_final(EVP_MD_CTX *ctx, unsigned char *md) { OMAC_ACPKM_CTX *c = EVP_MD_CTX_md_data(ctx); unsigned char mac[MAX_GOST_OMAC_ACPKM_SIZE]; size_t mac_size = sizeof(mac); int ret; if (!c->key_set) { GOSTerr(GOST_F_OMAC_ACPKM_IMIT_FINAL, GOST_R_MAC_KEY_NOT_SET); return 0; } ret = CMAC_ACPKM_Final(c->cmac_ctx, mac, &mac_size); memcpy(md, mac, c->dgst_size); return ret; } static int omac_acpkm_imit_copy(EVP_MD_CTX *to, const EVP_MD_CTX *from) { OMAC_ACPKM_CTX *c_to = EVP_MD_CTX_md_data(to); const OMAC_ACPKM_CTX *c_from = EVP_MD_CTX_md_data(from); if (c_from && c_to) { c_to->dgst_size = c_from->dgst_size; c_to->cipher_name = c_from->cipher_name; c_to->key_set = c_from->key_set; } else { return 0; } if (!c_from->cmac_ctx) { if (c_to->cmac_ctx) { CMAC_ACPKM_CTX_free(c_to->cmac_ctx); c_to->cmac_ctx = NULL; } return 1; } if ((c_to->cmac_ctx == c_from->cmac_ctx) || (c_to->cmac_ctx == NULL)) { c_to->cmac_ctx = CMAC_ACPKM_CTX_new(); } return (c_to->cmac_ctx) ? CMAC_ACPKM_CTX_copy(c_to->cmac_ctx, c_from->cmac_ctx) : 0; } /* Clean up imit ctx */ static int omac_acpkm_imit_cleanup(EVP_MD_CTX *ctx) { OMAC_ACPKM_CTX *c = EVP_MD_CTX_md_data(ctx); if (c) { CMAC_ACPKM_CTX_free(c->cmac_ctx); memset(EVP_MD_CTX_md_data(ctx), 0, sizeof(OMAC_ACPKM_CTX)); } return 1; } static int omac_acpkm_key(OMAC_ACPKM_CTX *c, const EVP_CIPHER *cipher, const unsigned char *key, size_t key_size) { int ret = 0; c->cmac_ctx = CMAC_ACPKM_CTX_new(); if (c->cmac_ctx == NULL) { GOSTerr(GOST_F_OMAC_ACPKM_KEY, ERR_R_MALLOC_FAILURE); return 0; } ret = CMAC_ACPKM_Init(c->cmac_ctx, key, key_size, cipher, NULL); if (ret > 0) { c->key_set = 1; } return 1; } int omac_acpkm_imit_ctrl(EVP_MD_CTX *ctx, int type, int arg, void *ptr) { switch (type) { case EVP_MD_CTRL_KEY_LEN: *((unsigned int *)(ptr)) = 32; return 1; case EVP_MD_CTRL_SET_KEY: { OMAC_ACPKM_CTX *c = EVP_MD_CTX_md_data(ctx); const EVP_MD *md = EVP_MD_CTX_md(ctx); EVP_CIPHER *cipher = NULL; int ret = 0; if (c->cipher_name == NULL) { if (EVP_MD_is_a(md, SN_grasshopper_mac) || EVP_MD_is_a(md, SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac)) c->cipher_name = SN_grasshopper_cbc; } if ((cipher = (EVP_CIPHER *)EVP_get_cipherbyname(c->cipher_name)) == NULL && (cipher = EVP_CIPHER_fetch(NULL, c->cipher_name, NULL)) == NULL) { GOSTerr(GOST_F_OMAC_ACPKM_IMIT_CTRL, GOST_R_CIPHER_NOT_FOUND); } if (EVP_MD_meth_get_init(EVP_MD_CTX_md(ctx)) (ctx) <= 0) { GOSTerr(GOST_F_OMAC_ACPKM_IMIT_CTRL, GOST_R_MAC_KEY_NOT_SET); goto set_key_end; } EVP_MD_CTX_set_flags(ctx, EVP_MD_CTX_FLAG_NO_INIT); if (c->key_set) { GOSTerr(GOST_F_OMAC_ACPKM_IMIT_CTRL, GOST_R_BAD_ORDER); goto set_key_end; } if (arg == 0) { struct gost_mac_key *key = (struct gost_mac_key *)ptr; ret = omac_acpkm_key(c, cipher, key->key, 32); goto set_key_end; } else if (arg == 32) { ret = omac_acpkm_key(c, cipher, ptr, 32); goto set_key_end; } GOSTerr(GOST_F_OMAC_ACPKM_IMIT_CTRL, GOST_R_INVALID_MAC_KEY_SIZE); set_key_end: EVP_CIPHER_free(cipher); return ret; } case EVP_CTRL_KEY_MESH: { OMAC_ACPKM_CTX *c = EVP_MD_CTX_md_data(ctx); if (!arg || (arg % EVP_MD_block_size(EVP_MD_CTX_md(ctx)))) return -1; c->cmac_ctx->section_size = arg; if (ptr && *(int *)ptr) { /* Set parameter T */ if (EVP_CIPHER_get0_provider(EVP_CIPHER_CTX_cipher(c->cmac_ctx->actx)) == NULL) { if (!EVP_CIPHER_CTX_ctrl(c->cmac_ctx->actx, EVP_CTRL_KEY_MESH, *(int *)ptr, NULL)) return 0; } else { size_t cipher_key_mesh = (size_t)*(int *)ptr; OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END }; params[0] = OSSL_PARAM_construct_size_t("key-mesh", &cipher_key_mesh); if (!EVP_CIPHER_CTX_set_params(c->cmac_ctx->actx, params)) return 0; } } return 1; } case EVP_MD_CTRL_XOF_LEN: /* Supported in OpenSSL */ { OMAC_ACPKM_CTX *c = EVP_MD_CTX_md_data(ctx); switch (OBJ_txt2nid(c->cipher_name)) { case NID_grasshopper_cbc: if (arg < 1 || arg > 16) { GOSTerr(GOST_F_OMAC_ACPKM_IMIT_CTRL, GOST_R_INVALID_MAC_SIZE); return 0; } c->dgst_size = arg; break; case NID_magma_cbc: if (arg < 1 || arg > 8) { GOSTerr(GOST_F_OMAC_ACPKM_IMIT_CTRL, GOST_R_INVALID_MAC_SIZE); return 0; } c->dgst_size = arg; break; default: return 0; } return 1; } default: return 0; } } GOST_digest kuznyechik_ctracpkm_omac_digest = { .nid = NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac, .result_size = MAX_GOST_OMAC_ACPKM_SIZE, .input_blocksize = GRASSHOPPER_BLOCK_SIZE, .app_datasize = sizeof(OMAC_ACPKM_CTX), .flags = EVP_MD_FLAG_XOF, .init = grasshopper_omac_acpkm_init, .update = omac_acpkm_imit_update, .final = omac_acpkm_imit_final, .copy = omac_acpkm_imit_copy, .cleanup = omac_acpkm_imit_cleanup, .ctrl = omac_acpkm_imit_ctrl, }; libengine-gost-openssl-3.0.2/gost_params.c000066400000000000000000000174371446070765000206130ustar00rootroot00000000000000/********************************************************************** * params.c * * Copyright (c) 2005-2013 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Definitions of GOST R 34.10 parameter sets, defined in RFC 4357 * * OpenSSL 1.0.0+ libraries required to compile and use * * this code * **********************************************************************/ #include "gost_lcl.h" #include /* Parameters of GOST 34.10 */ R3410_ec_params R3410_2001_paramset[] = { /* 1.2.643.2.2.35.0 */ {NID_id_GostR3410_2001_TestParamSet, "7", "5FBFF498AA938CE739B8E022FBAFEF40563F6E6A3472FC2A514C0CE9DAE23B7E", "8000000000000000000000000000000000000000000000000000000000000431", "8000000000000000000000000000000150FE8A1892976154C59CFC193ACCF5B3", "2", "08E2A8A0E65147D4BD6316030E16D19C85C97F0A9CA267122B96ABBCEA7E8FC8", "1", NULL} , /* * 1.2.643.2.2.35.1 */ {NID_id_GostR3410_2001_CryptoPro_A_ParamSet, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD94", "a6", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C611070995AD10045841B09B761B893", "1", "8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14", "1", NULL} , /* * 1.2.643.2.2.35.2 */ {NID_id_GostR3410_2001_CryptoPro_B_ParamSet, "8000000000000000000000000000000000000000000000000000000000000C96", "3E1AF419A269A5F866A7D3C25C3DF80AE979259373FF2B182F49D4CE7E1BBC8B", "8000000000000000000000000000000000000000000000000000000000000C99", "800000000000000000000000000000015F700CFFF1A624E5E497161BCC8A198F", "1", "3FA8124359F96680B83D1C3EB2C070E5C545C9858D03ECFB744BF8D717717EFC", "1", NULL} , /* * 1.2.643.2.2.35.3 */ {NID_id_GostR3410_2001_CryptoPro_C_ParamSet, "9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D7598", "805a", "9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D759B", "9B9F605F5A858107AB1EC85E6B41C8AA582CA3511EDDFB74F02F3A6598980BB9", "0", "41ECE55743711A8C3CBF3783CD08C0EE4D4DC440D4641A8F366E550DFDB3BB67", "1", NULL} , /* * 1.2.643.2.2.36.0 */ {NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD94", "a6", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6C611070995AD10045841B09B761B893", "1", "8D91E471E0989CDA27DF505A453F2B7635294F2DDF23E3B122ACC99C9E9F1E14", "1", NULL} , /* * 1.2.643.2.2.36.1 */ {NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet, "9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D7598", "805a", "9B9F605F5A858107AB1EC85E6B41C8AACF846E86789051D37998F7B9022D759B", "9B9F605F5A858107AB1EC85E6B41C8AA582CA3511EDDFB74F02F3A6598980BB9", "0", "41ECE55743711A8C3CBF3783CD08C0EE4D4DC440D4641A8F366E550DFDB3BB67", "1", NULL} , /* * 1.2.643.7.1.2.1.1.1 Edvards */ {NID_id_tc26_gost_3410_2012_256_paramSetA, /* a */ "C2173F1513981673AF4892C23035A27CE25E2013BF95AA33B22C656F277E7335", /* b */ "295F9BAE7428ED9CCC20E7C359A9D41A22FCCD9108E17BF7BA9337A6F8AE9513", /* p */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD97", /* q */ "400000000000000000000000000000000FD8CDDFC87B6635C115AF556C360C67", /* x */ "91E38443A5E82C0D880923425712B2BB658B9196932E02C78B2582FE742DAA28", /* y */ "32879423AB1A0375895786C4BB46E9565FDE0B5344766740AF268ADB32322E5C", /* cofactor */ "4", NULL} , {NID_undef, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL} }; /* Parameters of GOST 34.10-2012 */ R3410_ec_params *R3410_2012_256_paramset = R3410_2001_paramset; R3410_ec_params R3410_2012_512_paramset[] = { {NID_id_tc26_gost_3410_2012_512_paramSetTest, /* a */ "7", /* b */ "1CFF0806A31116DA29D8CFA54E57EB748BC5F377E49400FDD788B649ECA1AC43" "61834013B2AD7322480A89CA58E0CF74BC9E540C2ADD6897FAD0A3084F302ADC", /* p */ "4531ACD1FE0023C7550D267B6B2FEE80922B14B2FFB90F04D4EB7C09B5D2D15D" "F1D852741AF4704A0458047E80E4546D35B8336FAC224DD81664BBF528BE6373", /* q */ "4531ACD1FE0023C7550D267B6B2FEE80922B14B2FFB90F04D4EB7C09B5D2D15D" "A82F2D7ECB1DBAC719905C5EECC423F1D86E25EDBE23C595D644AAF187E6E6DF", /* x */ "24D19CC64572EE30F396BF6EBBFD7A6C5213B3B3D7057CC825F91093A68CD762" "FD60611262CD838DC6B60AA7EEE804E28BC849977FAC33B4B530F1B120248A9A", /* y */ "2BB312A43BD2CE6E0D020613C857ACDDCFBF061E91E5F2C3F32447C259F39B2C" "83AB156D77F1496BF7EB3351E1EE4E43DC1A18B91B24640B6DBB92CB1ADD371E", "1", NULL} , {NID_id_tc26_gost_3410_2012_512_paramSetA, /* a */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC4", /* b */ "E8C2505DEDFC86DDC1BD0B2B6667F1DA34B82574761CB0E879BD081CFD0B6265" "EE3CB090F30D27614CB4574010DA90DD862EF9D4EBEE4761503190785A71C760", /* p */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC7", /* q */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "27E69532F48D89116FF22B8D4E0560609B4B38ABFAD2B85DCACDB1411F10B275", /* x */ "3", /* y */ "7503CFE87A836AE3A61B8816E25450E6CE5E1C93ACF1ABC1778064FDCBEFA921DF16" "26BE4FD036E93D75E6A50E3A41E98028FE5FC235F5B889A589CB5215F2A4", "1", NULL} , {NID_id_tc26_gost_3410_2012_512_paramSetB, /* a */ "8000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000006C", /* b */ "687D1B459DC841457E3E06CF6F5E2517B97C7D614AF138BCBF85DC806C4B289F" "3E965D2DB1416D217F8B276FAD1AB69C50F78BEE1FA3106EFB8CCBC7C5140116", /* p */ "8000000000000000000000000000000000000000000000000000000000000000" "000000000000000000000000000000000000000000000000000000000000006F", /* q */ "8000000000000000000000000000000000000000000000000000000000000001" "49A1EC142565A545ACFDB77BD9D40CFA8B996712101BEA0EC6346C54374F25BD", /* x */ "2", /* y */ "1A8F7EDA389B094C2C071E3647A8940F3C123B697578C213BE6DD9E6C8EC7335" "DCB228FD1EDF4A39152CBCAAF8C0398828041055F94CEEEC7E21340780FE41BD", "1", NULL} , {NID_id_tc26_gost_3410_2012_512_paramSetC, /* a */ "DC9203E514A721875485A529D2C722FB187BC8980EB866644DE41C68E1430645" "46E861C0E2C9EDD92ADE71F46FCF50FF2AD97F951FDA9F2A2EB6546F39689BD3", /* b */ "B4C4EE28CEBC6C2C8AC12952CF37F16AC7EFB6A9F69F4B57FFDA2E4F0DE5ADE0" "38CBC2FFF719D2C18DE0284B8BFEF3B52B8CC7A5F5BF0A3C8D2319A5312557E1", /* p */ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDC7", /* q */ "3FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" "C98CDBA46506AB004C33A9FF5147502CC8EDA9E7A769A12694623CEF47F023ED", /* x */ "E2E31EDFC23DE7BDEBE241CE593EF5DE2295B7A9CBAEF021D385F7074CEA043A" "A27272A7AE602BF2A7B9033DB9ED3610C6FB85487EAE97AAC5BC7928C1950148", /* y */ "F5CE40D95B5EB899ABBCCFF5911CB8577939804D6527378B8C108C3D2090FF9B" "E18E2D33E3021ED2EF32D85822423B6304F726AA854BAE07D0396E9A9ADDC40F", "4", NULL} , {NID_undef, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL} }; libengine-gost-openssl-3.0.2/gost_pmeth.c000066400000000000000000001106271446070765000204400ustar00rootroot00000000000000/********************************************************************** * gost_pmeth.c * * Copyright (c) 2005-2013 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Implementation of RFC 4357 (GOST R 34.10) Publick key method * * for OpenSSL * * Requires OpenSSL 1.0.0+ for compilation * **********************************************************************/ #include #include #include #include #include /* For string_to_hex */ #include /* For OPENSSL_VERSION_MAJOR */ #include #include #include #include "gost_lcl.h" #include "e_gost_err.h" #define ossl3_const #ifdef OPENSSL_VERSION_MAJOR #undef ossl3_const #define ossl3_const const #endif /* -----init, cleanup, copy - uniform for all algs --------------*/ /* Allocates new gost_pmeth_data structure and assigns it as data */ static int pkey_gost_init(EVP_PKEY_CTX *ctx) { struct gost_pmeth_data *data; EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx); data = OPENSSL_malloc(sizeof(*data)); if (!data) return 0; memset(data, 0, sizeof(*data)); if (pkey && EVP_PKEY_get0(pkey)) { switch (EVP_PKEY_base_id(pkey)) { case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: case NID_id_GostR3410_2012_256: case NID_id_GostR3410_2012_512: { const EC_GROUP *group = EC_KEY_get0_group(EVP_PKEY_get0((EVP_PKEY *)pkey)); if (group != NULL) { data->sign_param_nid = EC_GROUP_get_curve_name(group); break; } /* else */ } default: OPENSSL_free(data); return 0; } } EVP_PKEY_CTX_set_data(ctx, data); return 1; } /* Copies contents of gost_pmeth_data structure */ static int pkey_gost_copy(EVP_PKEY_CTX *dst, ossl3_const EVP_PKEY_CTX *src) { struct gost_pmeth_data *dst_data, *src_data; if (!pkey_gost_init(dst)) { return 0; } src_data = EVP_PKEY_CTX_get_data(src); dst_data = EVP_PKEY_CTX_get_data(dst); if (!src_data || !dst_data) return 0; *dst_data = *src_data; return 1; } /* Frees up gost_pmeth_data structure */ static void pkey_gost_cleanup(EVP_PKEY_CTX *ctx) { struct gost_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx); if (!data) return; OPENSSL_free(data); } /* --------------------- control functions ------------------------------*/ static int pkey_gost_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) { struct gost_pmeth_data *pctx = (struct gost_pmeth_data *)EVP_PKEY_CTX_get_data(ctx); if (pctx == NULL) return 0; switch (type) { case EVP_PKEY_CTRL_MD: { EVP_PKEY *key = EVP_PKEY_CTX_get0_pkey(ctx); int pkey_nid = (key == NULL) ? NID_undef : EVP_PKEY_base_id(key); OPENSSL_assert(p2 != NULL); switch (EVP_MD_type((const EVP_MD *)p2)) { case NID_id_GostR3411_94: if (pkey_nid == NID_id_GostR3410_2001 || pkey_nid == NID_id_GostR3410_2001DH || pkey_nid == NID_id_GostR3410_94) { pctx->md = (EVP_MD *)p2; return 1; } break; case NID_id_GostR3411_2012_256: if (pkey_nid == NID_id_GostR3410_2012_256) { pctx->md = (EVP_MD *)p2; return 1; } break; case NID_id_GostR3411_2012_512: if (pkey_nid == NID_id_GostR3410_2012_512) { pctx->md = (EVP_MD *)p2; return 1; } break; } GOSTerr(GOST_F_PKEY_GOST_CTRL, GOST_R_INVALID_DIGEST_TYPE); return 0; } case EVP_PKEY_CTRL_GET_MD: *(const EVP_MD **)p2 = pctx->md; return 1; case EVP_PKEY_CTRL_PKCS7_ENCRYPT: case EVP_PKEY_CTRL_PKCS7_DECRYPT: case EVP_PKEY_CTRL_PKCS7_SIGN: case EVP_PKEY_CTRL_DIGESTINIT: #ifndef OPENSSL_NO_CMS case EVP_PKEY_CTRL_CMS_ENCRYPT: case EVP_PKEY_CTRL_CMS_DECRYPT: case EVP_PKEY_CTRL_CMS_SIGN: #endif return 1; case EVP_PKEY_CTRL_GOST_PARAMSET: pctx->sign_param_nid = (int)p1; return 1; case EVP_PKEY_CTRL_SET_IV: if (p1 > sizeof(pctx->shared_ukm) || !p2) { GOSTerr(GOST_F_PKEY_GOST_CTRL, GOST_R_UKM_NOT_SET); return 0; } memcpy(pctx->shared_ukm, p2, (int)p1); pctx->shared_ukm_size = p1; return 1; case EVP_PKEY_CTRL_SET_VKO: switch (p1) { case 0: /* switch to KEG */ case NID_id_GostR3411_2012_256: case NID_id_GostR3411_2012_512: break; default: GOSTerr(GOST_F_PKEY_GOST_CTRL, GOST_R_INVALID_DIGEST_TYPE); return 0; } pctx->vko_dgst_nid = p1; return 1; case EVP_PKEY_CTRL_CIPHER: switch (p1) { case NID_magma_ctr_acpkm: case NID_magma_ctr_acpkm_omac: case NID_magma_ctr: pctx->cipher_nid = NID_magma_ctr; return 1; case NID_kuznyechik_ctr_acpkm: case NID_kuznyechik_ctr_acpkm_omac: case NID_kuznyechik_ctr: pctx->cipher_nid = NID_kuznyechik_ctr; return 1; default: pctx->cipher_nid = p1; return 1; } case EVP_PKEY_CTRL_PEER_KEY: if (p1 == 0 || p1 == 1) /* call from EVP_PKEY_derive_set_peer */ return 1; if (p1 == 2) /* TLS: peer key used? */ return pctx->peer_key_used; if (p1 == 3) /* TLS: peer key used! */ return (pctx->peer_key_used = 1); break; } GOSTerr(GOST_F_PKEY_GOST_CTRL, GOST_R_CTRL_CALL_FAILED); return -2; } static int pkey_gost_ec_ctrl_str_common(EVP_PKEY_CTX *ctx, const char *type, const char *value) { if (0 == strcmp(type, ukm_ctrl_string)) { unsigned char ukm_buf[32], *tmp = NULL; long len = 0; tmp = OPENSSL_hexstr2buf(value, &len); if (tmp == NULL) return 0; if (len > 32) { OPENSSL_free(tmp); GOSTerr(GOST_F_PKEY_GOST_EC_CTRL_STR_COMMON, GOST_R_CTRL_CALL_FAILED); return 0; } memcpy(ukm_buf, tmp, len); OPENSSL_free(tmp); return pkey_gost_ctrl(ctx, EVP_PKEY_CTRL_SET_IV, len, ukm_buf); } else if (strcmp(type, vko_ctrl_string) == 0) { int bits = atoi(value); int vko_dgst_nid = 0; if (bits == 256) vko_dgst_nid = NID_id_GostR3411_2012_256; else if (bits == 512) vko_dgst_nid = NID_id_GostR3411_2012_512; else if (bits != 0) { GOSTerr(GOST_F_PKEY_GOST_EC_CTRL_STR_COMMON, GOST_R_INVALID_DIGEST_TYPE); return 0; } return pkey_gost_ctrl(ctx, EVP_PKEY_CTRL_SET_VKO, vko_dgst_nid, NULL); } return -2; } static int pkey_gost_ec_ctrl_str_256(EVP_PKEY_CTX *ctx, const char *type, const char *value) { if (strcmp(type, param_ctrl_string) == 0) { int param_nid = 0; if (!value) { return 0; } if (strlen(value) == 1) { switch (toupper((unsigned char)value[0])) { case 'A': param_nid = NID_id_GostR3410_2001_CryptoPro_A_ParamSet; break; case 'B': param_nid = NID_id_GostR3410_2001_CryptoPro_B_ParamSet; break; case 'C': param_nid = NID_id_GostR3410_2001_CryptoPro_C_ParamSet; break; case '0': param_nid = NID_id_GostR3410_2001_TestParamSet; break; default: return 0; } } else if ((strlen(value) == 2) && (toupper((unsigned char)value[0]) == 'X')) { switch (toupper((unsigned char)value[1])) { case 'A': param_nid = NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet; break; case 'B': param_nid = NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet; break; default: return 0; } } else if ((strlen(value) == 3) && (toupper((unsigned char)value[0]) == 'T') && (toupper((unsigned char)value[1]) == 'C')) { switch (toupper((unsigned char)value[2])) { case 'A': param_nid = NID_id_tc26_gost_3410_2012_256_paramSetA; break; case 'B': param_nid = NID_id_tc26_gost_3410_2012_256_paramSetB; break; case 'C': param_nid = NID_id_tc26_gost_3410_2012_256_paramSetC; break; case 'D': param_nid = NID_id_tc26_gost_3410_2012_256_paramSetD; break; default: return 0; } } else { R3410_ec_params *p = R3410_2001_paramset; param_nid = OBJ_txt2nid(value); if (param_nid == NID_undef) { return 0; } for (; p->nid != NID_undef; p++) { if (p->nid == param_nid) break; } if (p->nid == NID_undef) { GOSTerr(GOST_F_PKEY_GOST_EC_CTRL_STR_256, GOST_R_INVALID_PARAMSET); return 0; } } return pkey_gost_ctrl(ctx, EVP_PKEY_CTRL_GOST_PARAMSET, param_nid, NULL); } return pkey_gost_ec_ctrl_str_common(ctx, type, value); } static int pkey_gost_ec_ctrl_str_512(EVP_PKEY_CTX *ctx, const char *type, const char *value) { int param_nid = NID_undef; if (strcmp(type, param_ctrl_string)) return pkey_gost_ec_ctrl_str_common(ctx, type, value); if (!value) return 0; if (strlen(value) == 1) { switch (toupper((unsigned char)value[0])) { case 'A': param_nid = NID_id_tc26_gost_3410_2012_512_paramSetA; break; case 'B': param_nid = NID_id_tc26_gost_3410_2012_512_paramSetB; break; case 'C': param_nid = NID_id_tc26_gost_3410_2012_512_paramSetC; break; default: return 0; } } else { R3410_ec_params *p = R3410_2012_512_paramset; param_nid = OBJ_txt2nid(value); if (param_nid == NID_undef) return 0; while (p->nid != NID_undef && p->nid != param_nid) p++; if (p->nid == NID_undef) { GOSTerr(GOST_F_PKEY_GOST_EC_CTRL_STR_512, GOST_R_INVALID_PARAMSET); return 0; } } return pkey_gost_ctrl(ctx, EVP_PKEY_CTRL_GOST_PARAMSET, param_nid, NULL); } /* --------------------- key generation --------------------------------*/ static int pkey_gost_paramgen_init(EVP_PKEY_CTX *ctx) { return 1; } static int pkey_gost2001_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { struct gost_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx); EC_KEY *ec = NULL; if (!data || data->sign_param_nid == NID_undef) { GOSTerr(GOST_F_PKEY_GOST2001_PARAMGEN, GOST_R_NO_PARAMETERS_SET); return 0; } ec = EC_KEY_new(); if (!fill_GOST_EC_params(ec, data->sign_param_nid) || !EVP_PKEY_assign(pkey, NID_id_GostR3410_2001, ec)) { EC_KEY_free(ec); return 0; } return 1; } static int pkey_gost2012_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { struct gost_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx); EC_KEY *ec; int result = 0; if (!data || data->sign_param_nid == NID_undef) { GOSTerr(GOST_F_PKEY_GOST2012_PARAMGEN, GOST_R_NO_PARAMETERS_SET); return 0; } ec = EC_KEY_new(); if (!fill_GOST_EC_params(ec, data->sign_param_nid)) { EC_KEY_free(ec); return 0; } switch (data->sign_param_nid) { case NID_id_tc26_gost_3410_2012_512_paramSetA: case NID_id_tc26_gost_3410_2012_512_paramSetB: case NID_id_tc26_gost_3410_2012_512_paramSetC: case NID_id_tc26_gost_3410_2012_512_paramSetTest: result = (EVP_PKEY_assign(pkey, NID_id_GostR3410_2012_512, ec)) ? 1 : 0; break; case NID_id_GostR3410_2001_CryptoPro_A_ParamSet: case NID_id_GostR3410_2001_CryptoPro_B_ParamSet: case NID_id_GostR3410_2001_CryptoPro_C_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet: case NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet: case NID_id_GostR3410_2001_TestParamSet: case NID_id_tc26_gost_3410_2012_256_paramSetA: case NID_id_tc26_gost_3410_2012_256_paramSetB: case NID_id_tc26_gost_3410_2012_256_paramSetC: case NID_id_tc26_gost_3410_2012_256_paramSetD: result = (EVP_PKEY_assign(pkey, NID_id_GostR3410_2012_256, ec)) ? 1 : 0; break; default: result = 0; break; } if (result == 0) EC_KEY_free(ec); return result; } /* ----------- keygen callbacks --------------------------------------*/ /* Generates GOST_R3410 2001 key and assigns it using specified type */ static int pkey_gost2001cp_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { EC_KEY *ec; if (!pkey_gost2001_paramgen(ctx, pkey)) return 0; ec = EVP_PKEY_get0(pkey); gost_ec_keygen(ec); return 1; } /* Generates GOST_R3410 2012 key and assigns it using specified type */ static int pkey_gost2012cp_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { if (!pkey_gost2012_paramgen(ctx, pkey)) return 0; gost_ec_keygen(EVP_PKEY_get0(pkey)); return 1; } /* ----------- sign callbacks --------------------------------------*/ /* * Packs signature according to Cryptopro rules * and frees up ECDSA_SIG structure */ int pack_sign_cp(ECDSA_SIG *s, int order, unsigned char *sig, size_t *siglen) { const BIGNUM *sig_r = NULL, *sig_s = NULL; ECDSA_SIG_get0(s, &sig_r, &sig_s); *siglen = 2 * order; memset(sig, 0, *siglen); store_bignum(sig_s, sig, order); store_bignum(sig_r, sig + order, order); ECDSA_SIG_free(s); return 1; } static int pkey_gost_ec_cp_sign(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbs_len) { ECDSA_SIG *unpacked_sig = NULL; EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx); int order = 0; if (!siglen) return 0; if (!pkey) return 0; switch (EVP_PKEY_base_id(pkey)) { case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: case NID_id_GostR3410_2012_256: order = 64; break; case NID_id_GostR3410_2012_512: order = 128; break; default: return 0; } if (!sig) { *siglen = order; return 1; } unpacked_sig = gost_ec_sign(tbs, tbs_len, EVP_PKEY_get0(pkey)); if (!unpacked_sig) { return 0; } return pack_sign_cp(unpacked_sig, order / 2, sig, siglen); } /* ------------------- verify callbacks ---------------------------*/ /* Unpack signature according to cryptopro rules */ ECDSA_SIG *unpack_cp_signature(const unsigned char *sigbuf, size_t siglen) { ECDSA_SIG *sig; BIGNUM *r = NULL, *s = NULL; sig = ECDSA_SIG_new(); if (sig == NULL) { GOSTerr(GOST_F_UNPACK_CP_SIGNATURE, ERR_R_MALLOC_FAILURE); return NULL; } s = BN_bin2bn(sigbuf, siglen / 2, NULL); r = BN_bin2bn(sigbuf + siglen / 2, siglen / 2, NULL); ECDSA_SIG_set0(sig, r, s); return sig; } static int pkey_gost_ec_cp_verify(EVP_PKEY_CTX *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs, size_t tbs_len) { int ok = 0; EVP_PKEY *pub_key = EVP_PKEY_CTX_get0_pkey(ctx); ECDSA_SIG *s = (sig) ? unpack_cp_signature(sig, siglen) : NULL; if (!s) return 0; #ifdef DEBUG_SIGN fprintf(stderr, "R="); BN_print_fp(stderr, ECDSA_SIG_get0_r(s)); fprintf(stderr, "\nS="); BN_print_fp(stderr, ECDSA_SIG_get0_s(s)); fprintf(stderr, "\n"); #endif if (pub_key) ok = gost_ec_verify(tbs, tbs_len, s, EVP_PKEY_get0(pub_key)); ECDSA_SIG_free(s); return ok; } /* ------------- encrypt init -------------------------------------*/ /* Generates ephermeral key */ static int pkey_gost_encrypt_init(EVP_PKEY_CTX *ctx) { return 1; } /* --------------- Derive init ------------------------------------*/ static int pkey_gost_derive_init(EVP_PKEY_CTX *ctx) { return 1; } /* -------- PKEY_METHOD for GOST MAC algorithm --------------------*/ static int pkey_gost_mac_init(EVP_PKEY_CTX *ctx) { struct gost_mac_pmeth_data *data = OPENSSL_malloc(sizeof(*data)); EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx); if (!data) return 0; memset(data, 0, sizeof(*data)); data->mac_size = 4; data->mac_param_nid = NID_undef; if (pkey) { struct gost_mac_key *key = EVP_PKEY_get0(pkey); if (key) { data->mac_param_nid = key->mac_param_nid; data->mac_size = key->mac_size; } } EVP_PKEY_CTX_set_data(ctx, data); return 1; } static int pkey_gost_omac_init(EVP_PKEY_CTX *ctx, size_t mac_size) { struct gost_mac_pmeth_data *data = OPENSSL_malloc(sizeof(*data)); EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx); if (!data) return 0; memset(data, 0, sizeof(*data)); data->mac_size = mac_size; data->mac_param_nid = NID_undef; if (pkey) { struct gost_mac_key *key = EVP_PKEY_get0(pkey); if (key) { data->mac_param_nid = key->mac_param_nid; data->mac_size = key->mac_size; } } EVP_PKEY_CTX_set_data(ctx, data); return 1; } static int pkey_gost_magma_mac_init(EVP_PKEY_CTX *ctx) { return pkey_gost_omac_init(ctx, 8); } static int pkey_gost_grasshopper_mac_init(EVP_PKEY_CTX *ctx) { return pkey_gost_omac_init(ctx, 16); } static void pkey_gost_mac_cleanup(EVP_PKEY_CTX *ctx) { struct gost_mac_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx); if (data) OPENSSL_free(data); } static int pkey_gost_mac_copy(EVP_PKEY_CTX *dst, ossl3_const EVP_PKEY_CTX *src) { struct gost_mac_pmeth_data *dst_data, *src_data; if (!pkey_gost_mac_init(dst)) { return 0; } src_data = EVP_PKEY_CTX_get_data(src); dst_data = EVP_PKEY_CTX_get_data(dst); if (!src_data || !dst_data) return 0; *dst_data = *src_data; return 1; } static int pkey_gost_mac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) { struct gost_mac_pmeth_data *data = (struct gost_mac_pmeth_data *)EVP_PKEY_CTX_get_data(ctx); switch (type) { case EVP_PKEY_CTRL_MD: { int nid = EVP_MD_type((const EVP_MD *)p2); if (nid != NID_id_Gost28147_89_MAC && nid != NID_gost_mac_12) { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL, GOST_R_INVALID_DIGEST_TYPE); return 0; } data->md = (EVP_MD *)p2; return 1; } case EVP_PKEY_CTRL_GET_MD: *(const EVP_MD **)p2 = data->md; return 1; case EVP_PKEY_CTRL_PKCS7_ENCRYPT: case EVP_PKEY_CTRL_PKCS7_DECRYPT: case EVP_PKEY_CTRL_PKCS7_SIGN: return 1; case EVP_PKEY_CTRL_SET_MAC_KEY: if (p1 != 32) { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL, GOST_R_INVALID_MAC_KEY_LENGTH); return 0; } memcpy(data->key, p2, 32); data->key_set = 1; return 1; case EVP_PKEY_CTRL_GOST_PARAMSET: { struct gost_cipher_info *param = p2; data->mac_param_nid = param->nid; return 1; } case EVP_PKEY_CTRL_DIGESTINIT: { EVP_MD_CTX *mctx = p2; if (!data->key_set) { struct gost_mac_key *key; EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx); if (!pkey) { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL, GOST_R_MAC_KEY_NOT_SET); return 0; } key = EVP_PKEY_get0(pkey); if (!key) { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL, GOST_R_MAC_KEY_NOT_SET); return 0; } return EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx)) (mctx, EVP_MD_CTRL_SET_KEY, 0, key); } else { return EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx)) (mctx, EVP_MD_CTRL_SET_KEY, 32, &(data->key)); } } case EVP_PKEY_CTRL_MAC_LEN: { if (p1 < 1 || p1 > 8) { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL, GOST_R_INVALID_MAC_SIZE); return 0; } data->mac_size = p1; return 1; } } return -2; } static int pkey_gost_mac_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value) { if (strcmp(type, key_ctrl_string) == 0) { if (strlen(value) != 32) { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL_STR, GOST_R_INVALID_MAC_KEY_LENGTH); return 0; } return pkey_gost_mac_ctrl(ctx, EVP_PKEY_CTRL_SET_MAC_KEY, 32, (char *)value); } if (strcmp(type, hexkey_ctrl_string) == 0) { long keylen; int ret; unsigned char *keybuf = string_to_hex(value, &keylen); if (!keybuf || keylen != 32) { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL_STR, GOST_R_INVALID_MAC_KEY_LENGTH); OPENSSL_free(keybuf); return 0; } ret = pkey_gost_mac_ctrl(ctx, EVP_PKEY_CTRL_SET_MAC_KEY, 32, keybuf); OPENSSL_free(keybuf); return ret; } if (!strcmp(type, maclen_ctrl_string)) { char *endptr; long size = strtol(value, &endptr, 10); if (*endptr != '\0') { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL_STR, GOST_R_INVALID_MAC_SIZE); return 0; } return pkey_gost_mac_ctrl(ctx, EVP_PKEY_CTRL_MAC_LEN, size, NULL); } if (strcmp(type, param_ctrl_string) == 0) { ASN1_OBJECT *obj = OBJ_txt2obj(value, 0); const struct gost_cipher_info *param = NULL; if (obj == NULL) { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL_STR, GOST_R_INVALID_MAC_PARAMS); return 0; } param = get_encryption_params(obj); ASN1_OBJECT_free(obj); if (param == NULL) { GOSTerr(GOST_F_PKEY_GOST_MAC_CTRL_STR, GOST_R_INVALID_MAC_PARAMS); return 0; } return pkey_gost_mac_ctrl(ctx, EVP_PKEY_CTRL_GOST_PARAMSET, 0, (void *)param); } return -2; } static int pkey_gost_omac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2, size_t max_size) { struct gost_mac_pmeth_data *data = (struct gost_mac_pmeth_data *)EVP_PKEY_CTX_get_data(ctx); switch (type) { case EVP_PKEY_CTRL_MD: { int nid = EVP_MD_type((const EVP_MD *)p2); if (nid != NID_magma_mac && nid != NID_grasshopper_mac && nid != NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac /* FIXME beldmit */ && nid != NID_id_tc26_cipher_gostr3412_2015_magma_ctracpkm_omac) { GOSTerr(GOST_F_PKEY_GOST_OMAC_CTRL, GOST_R_INVALID_DIGEST_TYPE); return 0; } data->md = (EVP_MD *)p2; return 1; } case EVP_PKEY_CTRL_GET_MD: *(const EVP_MD **)p2 = data->md; return 1; case EVP_PKEY_CTRL_PKCS7_ENCRYPT: case EVP_PKEY_CTRL_PKCS7_DECRYPT: case EVP_PKEY_CTRL_PKCS7_SIGN: return 1; case EVP_PKEY_CTRL_SET_MAC_KEY: if (p1 != 32) { GOSTerr(GOST_F_PKEY_GOST_OMAC_CTRL, GOST_R_INVALID_MAC_KEY_LENGTH); return 0; } memcpy(data->key, p2, 32); data->key_set = 1; return 1; case EVP_PKEY_CTRL_DIGESTINIT: { EVP_MD_CTX *mctx = p2; if (!data->key_set) { struct gost_mac_key *key; EVP_PKEY *pkey = EVP_PKEY_CTX_get0_pkey(ctx); if (!pkey) { GOSTerr(GOST_F_PKEY_GOST_OMAC_CTRL, GOST_R_MAC_KEY_NOT_SET); return 0; } key = EVP_PKEY_get0(pkey); if (!key) { GOSTerr(GOST_F_PKEY_GOST_OMAC_CTRL, GOST_R_MAC_KEY_NOT_SET); return 0; } return EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx)) (mctx, EVP_MD_CTRL_SET_KEY, 0, key); } else { return EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx)) (mctx, EVP_MD_CTRL_SET_KEY, 32, &(data->key)); } } case EVP_PKEY_CTRL_MAC_LEN: { if (p1 < 1 || p1 > max_size) { GOSTerr(GOST_F_PKEY_GOST_OMAC_CTRL, GOST_R_INVALID_MAC_SIZE); return 0; } data->mac_size = p1; return 1; } } return -2; } static int pkey_gost_magma_mac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) { return pkey_gost_omac_ctrl(ctx, type, p1, p2, 8); } static int pkey_gost_grasshopper_mac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2) { return pkey_gost_omac_ctrl(ctx, type, p1, p2, 16); } static int pkey_gost_omac_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value, size_t max_size) { if (strcmp(type, key_ctrl_string) == 0) { if (strlen(value) != 32) { GOSTerr(GOST_F_PKEY_GOST_OMAC_CTRL_STR, GOST_R_INVALID_MAC_KEY_LENGTH); return 0; } return pkey_gost_mac_ctrl(ctx, EVP_PKEY_CTRL_SET_MAC_KEY, 32, (char *)value); } if (strcmp(type, hexkey_ctrl_string) == 0) { long keylen; int ret; unsigned char *keybuf = string_to_hex(value, &keylen); if (!keybuf || keylen != 32) { GOSTerr(GOST_F_PKEY_GOST_OMAC_CTRL_STR, GOST_R_INVALID_MAC_KEY_LENGTH); OPENSSL_free(keybuf); return 0; } ret = pkey_gost_mac_ctrl(ctx, EVP_PKEY_CTRL_SET_MAC_KEY, 32, keybuf); OPENSSL_free(keybuf); return ret; } if (!strcmp(type, maclen_ctrl_string)) { char *endptr; long size = strtol(value, &endptr, 10); if (*endptr != '\0') { GOSTerr(GOST_F_PKEY_GOST_OMAC_CTRL_STR, GOST_R_INVALID_MAC_SIZE); return 0; } return pkey_gost_omac_ctrl(ctx, EVP_PKEY_CTRL_MAC_LEN, size, NULL, max_size); } return -2; } static int pkey_gost_magma_mac_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value) { return pkey_gost_omac_ctrl_str(ctx, type, value, 8); } static int pkey_gost_grasshopper_mac_ctrl_str(EVP_PKEY_CTX *ctx, const char *type, const char *value) { return pkey_gost_omac_ctrl_str(ctx, type, value, 8); } static int pkey_gost_mac_keygen_base(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey, int mac_nid) { struct gost_mac_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx); struct gost_mac_key *keydata; if (!data || !data->key_set) { GOSTerr(GOST_F_PKEY_GOST_MAC_KEYGEN_BASE, GOST_R_MAC_KEY_NOT_SET); return 0; } keydata = OPENSSL_malloc(sizeof(struct gost_mac_key)); if (keydata == NULL) return 0; memcpy(keydata->key, data->key, 32); keydata->mac_param_nid = data->mac_param_nid; keydata->mac_size = data->mac_size; EVP_PKEY_assign(pkey, mac_nid, keydata); return 1; } static int pkey_gost_mac_keygen_12(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { return pkey_gost_mac_keygen_base(ctx, pkey, NID_gost_mac_12); } static int pkey_gost_mac_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { return pkey_gost_mac_keygen_base(ctx, pkey, NID_id_Gost28147_89_MAC); } static int pkey_gost_magma_mac_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { return pkey_gost_mac_keygen_base(ctx, pkey, NID_magma_mac); } static int pkey_gost_grasshopper_mac_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey) { return pkey_gost_mac_keygen_base(ctx, pkey, NID_grasshopper_mac); } static int pkey_gost_mac_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx) { struct gost_mac_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx); if (data == NULL) { pkey_gost_mac_init(ctx); } data = EVP_PKEY_CTX_get_data(ctx); if (!data) { GOSTerr(GOST_F_PKEY_GOST_MAC_SIGNCTX_INIT, GOST_R_MAC_KEY_NOT_SET); return 0; } return 1; } static int pkey_gost_magma_mac_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx) { struct gost_mac_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx); if (data == NULL) { pkey_gost_omac_init(ctx, 4); } data = EVP_PKEY_CTX_get_data(ctx); if (!data) { GOSTerr(GOST_F_PKEY_GOST_MAGMA_MAC_SIGNCTX_INIT, GOST_R_MAC_KEY_NOT_SET); return 0; } return 1; } static int pkey_gost_grasshopper_mac_signctx_init(EVP_PKEY_CTX *ctx, EVP_MD_CTX *mctx) { struct gost_mac_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx); if (data == NULL) { pkey_gost_omac_init(ctx, 8); } data = EVP_PKEY_CTX_get_data(ctx); if (!data) { GOSTerr(GOST_F_PKEY_GOST_GRASSHOPPER_MAC_SIGNCTX_INIT, GOST_R_MAC_KEY_NOT_SET); return 0; } return 1; } static int pkey_gost_mac_signctx(EVP_PKEY_CTX *ctx, unsigned char *sig, size_t *siglen, EVP_MD_CTX *mctx) { unsigned int tmpsiglen; int ret; struct gost_mac_pmeth_data *data = EVP_PKEY_CTX_get_data(ctx); if (!siglen) return 0; tmpsiglen = *siglen; /* for platforms where sizeof(int) != * sizeof(size_t) */ if (!sig) { *siglen = data->mac_size; return 1; } EVP_MD_meth_get_ctrl(EVP_MD_CTX_md(mctx)) (mctx, EVP_MD_CTRL_XOF_LEN, data->mac_size, NULL); ret = EVP_DigestFinal_ex(mctx, sig, &tmpsiglen); *siglen = data->mac_size; return ret; } /* ----------- misc callbacks -------------------------------------*/ /* Callback for both EVP_PKEY_check() and EVP_PKEY_public_check. */ static int pkey_gost_check(EVP_PKEY *pkey) { return EC_KEY_check_key(EVP_PKEY_get0(pkey)); } /* ----------------------------------------------------------------*/ int register_pmeth_gost(int id, EVP_PKEY_METHOD **pmeth, int flags) { *pmeth = EVP_PKEY_meth_new(id, flags); if (!*pmeth) return 0; switch (id) { case NID_id_GostR3410_2001: case NID_id_GostR3410_2001DH: EVP_PKEY_meth_set_ctrl(*pmeth, pkey_gost_ctrl, pkey_gost_ec_ctrl_str_256); EVP_PKEY_meth_set_sign(*pmeth, NULL, pkey_gost_ec_cp_sign); EVP_PKEY_meth_set_verify(*pmeth, NULL, pkey_gost_ec_cp_verify); EVP_PKEY_meth_set_keygen(*pmeth, NULL, pkey_gost2001cp_keygen); EVP_PKEY_meth_set_encrypt(*pmeth, pkey_gost_encrypt_init, pkey_gost_encrypt); EVP_PKEY_meth_set_decrypt(*pmeth, NULL, pkey_gost_decrypt); EVP_PKEY_meth_set_derive(*pmeth, pkey_gost_derive_init, pkey_gost_ec_derive); EVP_PKEY_meth_set_paramgen(*pmeth, pkey_gost_paramgen_init, pkey_gost2001_paramgen); EVP_PKEY_meth_set_check(*pmeth, pkey_gost_check); EVP_PKEY_meth_set_public_check(*pmeth, pkey_gost_check); break; case NID_id_GostR3410_2012_256: EVP_PKEY_meth_set_ctrl(*pmeth, pkey_gost_ctrl, pkey_gost_ec_ctrl_str_256); EVP_PKEY_meth_set_sign(*pmeth, NULL, pkey_gost_ec_cp_sign); EVP_PKEY_meth_set_verify(*pmeth, NULL, pkey_gost_ec_cp_verify); EVP_PKEY_meth_set_keygen(*pmeth, NULL, pkey_gost2012cp_keygen); EVP_PKEY_meth_set_encrypt(*pmeth, pkey_gost_encrypt_init, pkey_gost_encrypt); EVP_PKEY_meth_set_decrypt(*pmeth, NULL, pkey_gost_decrypt); EVP_PKEY_meth_set_derive(*pmeth, pkey_gost_derive_init, pkey_gost_ec_derive); EVP_PKEY_meth_set_paramgen(*pmeth, pkey_gost_paramgen_init, pkey_gost2012_paramgen); EVP_PKEY_meth_set_check(*pmeth, pkey_gost_check); EVP_PKEY_meth_set_public_check(*pmeth, pkey_gost_check); break; case NID_id_GostR3410_2012_512: EVP_PKEY_meth_set_ctrl(*pmeth, pkey_gost_ctrl, pkey_gost_ec_ctrl_str_512); EVP_PKEY_meth_set_sign(*pmeth, NULL, pkey_gost_ec_cp_sign); EVP_PKEY_meth_set_verify(*pmeth, NULL, pkey_gost_ec_cp_verify); EVP_PKEY_meth_set_keygen(*pmeth, NULL, pkey_gost2012cp_keygen); EVP_PKEY_meth_set_encrypt(*pmeth, pkey_gost_encrypt_init, pkey_gost_encrypt); EVP_PKEY_meth_set_decrypt(*pmeth, NULL, pkey_gost_decrypt); EVP_PKEY_meth_set_derive(*pmeth, pkey_gost_derive_init, pkey_gost_ec_derive); EVP_PKEY_meth_set_paramgen(*pmeth, pkey_gost_paramgen_init, pkey_gost2012_paramgen); EVP_PKEY_meth_set_check(*pmeth, pkey_gost_check); EVP_PKEY_meth_set_public_check(*pmeth, pkey_gost_check); break; case NID_id_Gost28147_89_MAC: EVP_PKEY_meth_set_ctrl(*pmeth, pkey_gost_mac_ctrl, pkey_gost_mac_ctrl_str); EVP_PKEY_meth_set_signctx(*pmeth, pkey_gost_mac_signctx_init, pkey_gost_mac_signctx); EVP_PKEY_meth_set_keygen(*pmeth, NULL, pkey_gost_mac_keygen); EVP_PKEY_meth_set_init(*pmeth, pkey_gost_mac_init); EVP_PKEY_meth_set_cleanup(*pmeth, pkey_gost_mac_cleanup); EVP_PKEY_meth_set_copy(*pmeth, pkey_gost_mac_copy); return 1; case NID_gost_mac_12: EVP_PKEY_meth_set_ctrl(*pmeth, pkey_gost_mac_ctrl, pkey_gost_mac_ctrl_str); EVP_PKEY_meth_set_signctx(*pmeth, pkey_gost_mac_signctx_init, pkey_gost_mac_signctx); EVP_PKEY_meth_set_keygen(*pmeth, NULL, pkey_gost_mac_keygen_12); EVP_PKEY_meth_set_init(*pmeth, pkey_gost_mac_init); EVP_PKEY_meth_set_cleanup(*pmeth, pkey_gost_mac_cleanup); EVP_PKEY_meth_set_copy(*pmeth, pkey_gost_mac_copy); return 1; case NID_magma_mac: EVP_PKEY_meth_set_ctrl(*pmeth, pkey_gost_magma_mac_ctrl, pkey_gost_magma_mac_ctrl_str); EVP_PKEY_meth_set_signctx(*pmeth, pkey_gost_magma_mac_signctx_init, pkey_gost_mac_signctx); EVP_PKEY_meth_set_keygen(*pmeth, NULL, pkey_gost_magma_mac_keygen); EVP_PKEY_meth_set_init(*pmeth, pkey_gost_magma_mac_init); EVP_PKEY_meth_set_cleanup(*pmeth, pkey_gost_mac_cleanup); EVP_PKEY_meth_set_copy(*pmeth, pkey_gost_mac_copy); return 1; case NID_grasshopper_mac: case NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac: /* FIXME beldmit */ EVP_PKEY_meth_set_ctrl(*pmeth, pkey_gost_grasshopper_mac_ctrl, pkey_gost_grasshopper_mac_ctrl_str); EVP_PKEY_meth_set_signctx(*pmeth, pkey_gost_grasshopper_mac_signctx_init, pkey_gost_mac_signctx); EVP_PKEY_meth_set_keygen(*pmeth, NULL, pkey_gost_grasshopper_mac_keygen); EVP_PKEY_meth_set_init(*pmeth, pkey_gost_grasshopper_mac_init); EVP_PKEY_meth_set_cleanup(*pmeth, pkey_gost_mac_cleanup); EVP_PKEY_meth_set_copy(*pmeth, pkey_gost_mac_copy); return 1; default: /* Unsupported method */ return 0; } EVP_PKEY_meth_set_init(*pmeth, pkey_gost_init); EVP_PKEY_meth_set_cleanup(*pmeth, pkey_gost_cleanup); EVP_PKEY_meth_set_copy(*pmeth, pkey_gost_copy); /* * FIXME derive etc... */ return 1; } libengine-gost-openssl-3.0.2/gost_prov.c000066400000000000000000000115311446070765000203030ustar00rootroot00000000000000/********************************************************************** * gost_prov.c - The provider itself * * * * Copyright (c) 2021 Richard Levitte * * This file is distributed under the same license as OpenSSL * * * * Requires OpenSSL 3.0 for compilation * **********************************************************************/ #include #include #include "gost_prov.h" #include "gost_lcl.h" #include "prov/err.h" /* libprov err functions */ /********************************************************************* * * Errors * *****/ /* * Ugly hack, to get the errors generated by mkerr.pl. This should ideally * be replaced with a local OSSL_ITEM list of < number, string > pairs as * reason strings, but for now, we will simply use GOST_str_reasons. * Fortunately, the ERR_STRING_DATA structure is compatible with OSSL_ITEM, * so we can return it directly. */ static struct proverr_functions_st *err_handle; #define GOST_PROV #include "e_gost_err.c" void ERR_GOST_error(int function, int reason, char *file, int line) { proverr_new_error(err_handle); proverr_set_error_debug(err_handle, file, line, NULL); proverr_set_error(err_handle, reason, NULL); } /********************************************************************* * * Provider context * *****/ static void provider_ctx_free(PROV_CTX *ctx) { if (ctx != NULL) { ENGINE_free(ctx->e); proverr_free_handle(ctx->proverr_handle); OSSL_LIB_CTX_free(ctx->libctx); } OPENSSL_free(ctx); } extern int populate_gost_engine(ENGINE *e); static PROV_CTX *provider_ctx_new(const OSSL_CORE_HANDLE *core, const OSSL_DISPATCH *in) { PROV_CTX *ctx; if ((ctx = OPENSSL_zalloc(sizeof(*ctx))) != NULL && (ctx->proverr_handle = proverr_new_handle(core, in)) != NULL && (ctx->libctx = OSSL_LIB_CTX_new()) != NULL && (ctx->e = ENGINE_new()) != NULL && populate_gost_engine(ctx->e)) { ctx->core_handle = core; /* Ugly hack */ err_handle = ctx->proverr_handle; } else { provider_ctx_free(ctx); ctx = NULL; } return ctx; } /********************************************************************* * * Setup * *****/ typedef void (*fptr_t)(void); /* The function that returns the appropriate algorithm table per operation */ static const OSSL_ALGORITHM *gost_operation(void *vprovctx, int operation_id, const int *no_cache) { switch (operation_id) { case OSSL_OP_CIPHER: return GOST_prov_ciphers; case OSSL_OP_DIGEST: return GOST_prov_digests; case OSSL_OP_MAC: return GOST_prov_macs; } return NULL; } static int gost_get_params(void *provctx, OSSL_PARAM *params) { OSSL_PARAM *p; p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_NAME); if (p != NULL && !OSSL_PARAM_set_utf8_ptr(p, "OpenSSL GOST Provider")) return 0; p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_STATUS); if (p != NULL && !OSSL_PARAM_set_int(p, 1)) /* We never fail. */ return 0; return 1; } static const OSSL_ITEM *gost_get_reason_strings(void *provctx) { #if 0 return reason_strings; #endif return (OSSL_ITEM *)GOST_str_reasons; } /* The function that tears down this provider */ static void gost_teardown(void *vprovctx) { GOST_prov_deinit_ciphers(); GOST_prov_deinit_digests(); GOST_prov_deinit_mac_digests(); provider_ctx_free(vprovctx); } /* The base dispatch table */ static const OSSL_DISPATCH provider_functions[] = { { OSSL_FUNC_PROVIDER_QUERY_OPERATION, (fptr_t)gost_operation }, { OSSL_FUNC_PROVIDER_GET_REASON_STRINGS, (fptr_t)gost_get_reason_strings }, { OSSL_FUNC_PROVIDER_GET_PARAMS, (fptr_t)gost_get_params }, { OSSL_FUNC_PROVIDER_TEARDOWN, (fptr_t)gost_teardown }, { 0, NULL } }; struct prov_ctx_st { void *core_handle; struct proverr_functions_st *err_handle; }; #ifdef BUILDING_PROVIDER_AS_LIBRARY /* * This allows the provider to be built in library form. In this case, the * application must add it explicitly like this: * * OSSL_PROVIDER_add_builtin(NULL, "gost", GOST_provider_init); */ # define OSSL_provider_init GOST_provider_init #endif OPENSSL_EXPORT int OSSL_provider_init(const OSSL_CORE_HANDLE *core, const OSSL_DISPATCH *in, const OSSL_DISPATCH **out, void **vprovctx) { if ((*vprovctx = provider_ctx_new(core, in)) == NULL) return 0; *out = provider_functions; return 1; } libengine-gost-openssl-3.0.2/gost_prov.h000066400000000000000000000022061446070765000203070ustar00rootroot00000000000000/********************************************************************** * gost_prov.h - The provider itself * * * * Copyright (c) 2021 Richard Levitte * * This file is distributed under the same license as OpenSSL * * * * Requires OpenSSL 3.0 for compilation * **********************************************************************/ #include #include struct provider_ctx_st { OSSL_LIB_CTX *libctx; const OSSL_CORE_HANDLE *core_handle; struct proverr_functions_st *proverr_handle; /* * "internal" GOST engine, which is the implementation that all the * provider functions will use to access the crypto functionality. * This is pure hackery, but allows us to quickly wrap all the ENGINE * function with provider wrappers. There is no other supported way * to do this. */ ENGINE *e; }; typedef struct provider_ctx_st PROV_CTX; libengine-gost-openssl-3.0.2/gost_prov_cipher.c000066400000000000000000000357521446070765000216500ustar00rootroot00000000000000/********************************************************************** * gost_prov_crypt.c - Initialize all ciphers * * * * Copyright (c) 2021 Richard Levitte * * This file is distributed under the same license as OpenSSL * * * * OpenSSL provider interface to GOST cipher functions * * Requires OpenSSL 3.0 for compilation * **********************************************************************/ #include #include #include #include "gost_prov.h" #include "gost_lcl.h" /* * Forward declarations of all generic OSSL_DISPATCH functions, to make sure * they are correctly defined further down. For the algorithm specific ones * MAKE_FUNCTIONS() does it for us. */ static OSSL_FUNC_cipher_dupctx_fn cipher_dupctx; static OSSL_FUNC_cipher_freectx_fn cipher_freectx; static OSSL_FUNC_cipher_get_ctx_params_fn cipher_get_ctx_params; static OSSL_FUNC_cipher_set_ctx_params_fn cipher_set_ctx_params; static OSSL_FUNC_cipher_encrypt_init_fn cipher_encrypt_init; static OSSL_FUNC_cipher_decrypt_init_fn cipher_decrypt_init; static OSSL_FUNC_cipher_update_fn cipher_update; static OSSL_FUNC_cipher_final_fn cipher_final; struct gost_prov_crypt_ctx_st { /* Provider context */ PROV_CTX *provctx; /* OSSL_PARAM descriptors */ const OSSL_PARAM *known_params; /* GOST_cipher descriptor */ GOST_cipher *descriptor; /* * Since existing functionality is designed for ENGINEs, the functions * in this file are accomodated and are simply wrappers that use a local * EVP_CIPHER and EVP_CIPHER_CTX. * Future development should take a more direct approach and have the * appropriate cipher functions and cipher data directly in this context. */ /* The EVP_CIPHER created from |descriptor| */ EVP_CIPHER *cipher; /* The context for the EVP_CIPHER functions */ EVP_CIPHER_CTX *cctx; }; typedef struct gost_prov_crypt_ctx_st GOST_CTX; static void cipher_freectx(void *vgctx) { GOST_CTX *gctx = vgctx; /* * We don't free gctx->cipher here. * That will be done by the provider teardown, via * GOST_prov_deinit_ciphers() (defined at the bottom of this file). */ EVP_CIPHER_CTX_free(gctx->cctx); OPENSSL_free(gctx); } static GOST_CTX *cipher_newctx(void *provctx, GOST_cipher *descriptor, const OSSL_PARAM *known_params) { GOST_CTX *gctx = NULL; if ((gctx = OPENSSL_zalloc(sizeof(*gctx))) != NULL) { gctx->provctx = provctx; gctx->known_params = known_params; gctx->descriptor = descriptor; gctx->cipher = GOST_init_cipher(descriptor); gctx->cctx = EVP_CIPHER_CTX_new(); if (gctx->cipher == NULL || gctx->cctx == NULL) { cipher_freectx(gctx); gctx = NULL; } } return gctx; } static void *cipher_dupctx(void *vsrc) { GOST_CTX *src = vsrc; GOST_CTX *dst = cipher_newctx(src->provctx, src->descriptor, src->known_params); if (dst != NULL) EVP_CIPHER_CTX_copy(dst->cctx, src->cctx); return dst; } static int cipher_get_params(EVP_CIPHER *c, OSSL_PARAM params[]) { OSSL_PARAM *p; if (((p = OSSL_PARAM_locate(params, "blocksize")) != NULL && !OSSL_PARAM_set_size_t(p, EVP_CIPHER_block_size(c))) || ((p = OSSL_PARAM_locate(params, "ivlen")) != NULL && !OSSL_PARAM_set_size_t(p, EVP_CIPHER_iv_length(c))) || ((p = OSSL_PARAM_locate(params, "keylen")) != NULL && !OSSL_PARAM_set_size_t(p, EVP_CIPHER_key_length(c))) || ((p = OSSL_PARAM_locate(params, "mode")) != NULL && !OSSL_PARAM_set_size_t(p, EVP_CIPHER_flags(c)))) return 0; return 1; } static int cipher_get_ctx_params(void *vgctx, OSSL_PARAM params[]) { GOST_CTX *gctx = vgctx; OSSL_PARAM *p; if (!cipher_get_params(gctx->cipher, params)) return 0; if ((p = OSSL_PARAM_locate(params, "alg_id_param")) != NULL) { ASN1_TYPE *algidparam = NULL; unsigned char *der = NULL; int derlen = 0; int ret; ret = (algidparam = ASN1_TYPE_new()) != NULL && EVP_CIPHER_param_to_asn1(gctx->cctx, algidparam) > 0 && (derlen = i2d_ASN1_TYPE(algidparam, &der)) >= 0 && OSSL_PARAM_set_octet_string(p, &der, (size_t)derlen); OPENSSL_free(der); ASN1_TYPE_free(algidparam); return ret; } if ((p = OSSL_PARAM_locate(params, "updated-iv")) != NULL) { const void *iv = EVP_CIPHER_CTX_iv(gctx->cctx); size_t ivlen = EVP_CIPHER_CTX_iv_length(gctx->cctx); if (!OSSL_PARAM_set_octet_ptr(p, iv, ivlen) && !OSSL_PARAM_set_octet_string(p, iv, ivlen)) return 0; } if ((p = OSSL_PARAM_locate(params, OSSL_CIPHER_PARAM_AEAD_TAG)) != NULL) { void *tag = NULL; size_t taglen = 0; if (!OSSL_PARAM_get_octet_string_ptr(p, (const void**)&tag, &taglen) || EVP_CIPHER_CTX_ctrl(gctx->cctx, EVP_CTRL_AEAD_GET_TAG, taglen, tag) <= 0) return 0; } return 1; } static int cipher_set_ctx_params(void *vgctx, const OSSL_PARAM params[]) { GOST_CTX *gctx = vgctx; const OSSL_PARAM *p; if ((p = OSSL_PARAM_locate_const(params, "alg_id_param")) != NULL) { ASN1_TYPE *algidparam = NULL; const unsigned char *der = NULL; size_t derlen = 0; int ret; ret = OSSL_PARAM_get_octet_string_ptr(p, (const void **)&der, &derlen) && (algidparam = d2i_ASN1_TYPE(NULL, &der, (long)derlen)) != NULL && EVP_CIPHER_asn1_to_param(gctx->cctx, algidparam) > 0; ASN1_TYPE_free(algidparam); return ret; } if ((p = OSSL_PARAM_locate_const(params, "padding")) != NULL) { unsigned int pad = 0; if (!OSSL_PARAM_get_uint(p, &pad) || EVP_CIPHER_CTX_set_padding(gctx->cctx, pad) <= 0) return 0; } if ((p = OSSL_PARAM_locate_const(params, "key-mesh")) != NULL) { size_t key_mesh = 0; if (!OSSL_PARAM_get_size_t(p, &key_mesh) || EVP_CIPHER_CTX_ctrl(gctx->cctx, EVP_CTRL_KEY_MESH, key_mesh, NULL) <= 0) return 0; } if ((p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_IVLEN)) != NULL) { size_t ivlen = 0; if (!OSSL_PARAM_get_size_t(p, &ivlen) || EVP_CIPHER_CTX_ctrl(gctx->cctx, EVP_CTRL_AEAD_SET_IVLEN, ivlen, NULL) <= 0) return 0; } if ((p = OSSL_PARAM_locate_const(params, OSSL_CIPHER_PARAM_AEAD_TAG)) != NULL) { char tag[1024]; void *val = (void *) tag; size_t taglen = 0; if (!OSSL_PARAM_get_octet_string(p, &val, 1024, &taglen) || EVP_CIPHER_CTX_ctrl(gctx->cctx, EVP_CTRL_AEAD_SET_TAG, taglen, &tag) <= 0) return 0; } return 1; } static int cipher_encrypt_init(void *vgctx, const unsigned char *key, size_t keylen, const unsigned char *iv, size_t ivlen, const OSSL_PARAM params[]) { GOST_CTX *gctx = vgctx; if (!cipher_set_ctx_params(vgctx, params) || keylen > EVP_CIPHER_key_length(gctx->cipher) || ivlen > EVP_CIPHER_iv_length(gctx->cipher)) return 0; return EVP_CipherInit_ex(gctx->cctx, gctx->cipher, gctx->provctx->e, key, iv, 1); } static int cipher_decrypt_init(void *vgctx, const unsigned char *key, size_t keylen, const unsigned char *iv, size_t ivlen, const OSSL_PARAM params[]) { GOST_CTX *gctx = vgctx; if (!cipher_set_ctx_params(vgctx, params) || keylen > EVP_CIPHER_key_length(gctx->cipher) || ivlen > EVP_CIPHER_iv_length(gctx->cipher)) return 0; return EVP_CipherInit_ex(gctx->cctx, gctx->cipher, gctx->provctx->e, key, iv, 0) > 0; } static int cipher_update(void *vgctx, unsigned char *out, size_t *outl, size_t outsize, const unsigned char *in, size_t inl) { GOST_CTX *gctx = vgctx; int int_outl = outl != NULL ? *outl : 0; int res = EVP_CipherUpdate(gctx->cctx, out, &int_outl, in, (int)inl); if (res > 0 && outl != NULL) *outl = (size_t)int_outl; return res > 0; } static int cipher_final(void *vgctx, unsigned char *out, size_t *outl, size_t outsize) { GOST_CTX *gctx = vgctx; int int_outl = outl != NULL ? *outl : 0; int res = EVP_CipherFinal(gctx->cctx, out, &int_outl); if (res > 0 && outl != NULL) *outl = (size_t)int_outl; return res > 0; } static const OSSL_PARAM *known_Gost28147_89_cipher_params; static const OSSL_PARAM *known_Gost28147_89_cbc_cipher_params; static const OSSL_PARAM *known_Gost28147_89_cnt_cipher_params; static const OSSL_PARAM *known_Gost28147_89_cnt_12_cipher_params; static const OSSL_PARAM *known_grasshopper_ecb_cipher_params; static const OSSL_PARAM *known_grasshopper_cbc_cipher_params; static const OSSL_PARAM *known_grasshopper_cfb_cipher_params; static const OSSL_PARAM *known_grasshopper_ofb_cipher_params; static const OSSL_PARAM *known_grasshopper_ctr_cipher_params; static const OSSL_PARAM *known_magma_ctr_cipher_params; static const OSSL_PARAM *known_magma_ctr_acpkm_cipher_params; static const OSSL_PARAM *known_magma_ctr_acpkm_omac_cipher_params; static const OSSL_PARAM *known_magma_cbc_cipher_params; static const OSSL_PARAM *known_magma_mgm_cipher_params; static const OSSL_PARAM *known_grasshopper_ctr_acpkm_cipher_params; static const OSSL_PARAM *known_grasshopper_ctr_acpkm_omac_cipher_params; static const OSSL_PARAM *known_grasshopper_mgm_cipher_params; /* * These are named like the EVP_CIPHER templates in gost_crypt.c, with the * added suffix "_functions". Hopefully, that makes it easy to find the * actual implementation. */ typedef void (*fptr_t)(void); #define MAKE_FUNCTIONS(name) \ static OSSL_FUNC_cipher_get_params_fn name##_get_params; \ static int name##_get_params(OSSL_PARAM *params) \ { \ return cipher_get_params(GOST_init_cipher(&name), params); \ } \ static OSSL_FUNC_cipher_newctx_fn name##_newctx; \ static void *name##_newctx(void *provctx) \ { \ return cipher_newctx(provctx, &name, known_##name##_params); \ } \ static const OSSL_DISPATCH name##_functions[] = { \ { OSSL_FUNC_CIPHER_GET_PARAMS, (fptr_t)name##_get_params }, \ { OSSL_FUNC_CIPHER_NEWCTX, (fptr_t)name##_newctx }, \ { OSSL_FUNC_CIPHER_DUPCTX, (fptr_t)cipher_dupctx }, \ { OSSL_FUNC_CIPHER_FREECTX, (fptr_t)cipher_freectx }, \ { OSSL_FUNC_CIPHER_GET_CTX_PARAMS, (fptr_t)cipher_get_ctx_params }, \ { OSSL_FUNC_CIPHER_SET_CTX_PARAMS, (fptr_t)cipher_set_ctx_params }, \ { OSSL_FUNC_CIPHER_ENCRYPT_INIT, (fptr_t)cipher_encrypt_init }, \ { OSSL_FUNC_CIPHER_DECRYPT_INIT, (fptr_t)cipher_decrypt_init }, \ { OSSL_FUNC_CIPHER_UPDATE, (fptr_t)cipher_update }, \ { OSSL_FUNC_CIPHER_FINAL, (fptr_t)cipher_final }, \ { 0, NULL }, \ } MAKE_FUNCTIONS(Gost28147_89_cipher); MAKE_FUNCTIONS(Gost28147_89_cnt_cipher); MAKE_FUNCTIONS(Gost28147_89_cnt_12_cipher); MAKE_FUNCTIONS(Gost28147_89_cbc_cipher); MAKE_FUNCTIONS(grasshopper_ecb_cipher); MAKE_FUNCTIONS(grasshopper_cbc_cipher); MAKE_FUNCTIONS(grasshopper_cfb_cipher); MAKE_FUNCTIONS(grasshopper_ofb_cipher); MAKE_FUNCTIONS(grasshopper_ctr_cipher); MAKE_FUNCTIONS(magma_cbc_cipher); MAKE_FUNCTIONS(magma_ctr_cipher); MAKE_FUNCTIONS(magma_ctr_acpkm_cipher); MAKE_FUNCTIONS(magma_ctr_acpkm_omac_cipher); MAKE_FUNCTIONS(magma_mgm_cipher); MAKE_FUNCTIONS(grasshopper_ctr_acpkm_cipher); MAKE_FUNCTIONS(grasshopper_ctr_acpkm_omac_cipher); MAKE_FUNCTIONS(grasshopper_mgm_cipher); /* The OSSL_ALGORITHM for the provider's operation query function */ const OSSL_ALGORITHM GOST_prov_ciphers[] = { { SN_id_Gost28147_89 ":gost89:GOST 28147-89:1.2.643.2.2.21", NULL, Gost28147_89_cipher_functions }, { SN_gost89_cnt, NULL, Gost28147_89_cnt_cipher_functions }, { SN_gost89_cnt_12, NULL, Gost28147_89_cnt_12_cipher_functions }, { SN_gost89_cbc, NULL, Gost28147_89_cbc_cipher_functions }, { SN_grasshopper_ecb, NULL, grasshopper_ecb_cipher_functions }, { SN_grasshopper_cbc, NULL, grasshopper_cbc_cipher_functions }, { SN_grasshopper_cfb, NULL, grasshopper_cfb_cipher_functions }, { SN_grasshopper_ofb, NULL, grasshopper_ofb_cipher_functions }, { SN_grasshopper_ctr, NULL, grasshopper_ctr_cipher_functions }, { SN_magma_cbc, NULL, magma_cbc_cipher_functions }, { SN_magma_ctr, NULL, magma_ctr_cipher_functions }, { SN_magma_ctr_acpkm ":1.2.643.7.1.1.5.1.1", NULL, magma_ctr_acpkm_cipher_functions }, { SN_magma_ctr_acpkm_omac ":1.2.643.7.1.1.5.1.2", NULL, magma_ctr_acpkm_omac_cipher_functions }, { "magma-mgm", NULL, magma_mgm_cipher_functions }, { SN_kuznyechik_ctr_acpkm ":1.2.643.7.1.1.5.2.1", NULL, grasshopper_ctr_acpkm_cipher_functions }, { SN_kuznyechik_ctr_acpkm_omac ":1.2.643.7.1.1.5.2.2", NULL, grasshopper_ctr_acpkm_omac_cipher_functions }, { "kuznyechik-mgm", NULL, grasshopper_mgm_cipher_functions }, #if 0 /* Not yet implemented */ { SN_magma_kexp15 ":1.2.643.7.1.1.7.1.1", NULL, magma_kexp15_cipher_functions }, { SN_kuznyechik_kexp15 ":1.2.643.7.1.1.7.2.1", NULL, kuznyechik_kexp15_cipher_functions }, #endif { NULL , NULL, NULL } }; void GOST_prov_deinit_ciphers(void) { static GOST_cipher *list[] = { &Gost28147_89_cipher, &Gost28147_89_cnt_cipher, &Gost28147_89_cnt_12_cipher, &Gost28147_89_cbc_cipher, &grasshopper_ecb_cipher, &grasshopper_cbc_cipher, &grasshopper_cfb_cipher, &grasshopper_ofb_cipher, &grasshopper_ctr_cipher, &magma_cbc_cipher, &magma_ctr_cipher, &magma_ctr_acpkm_cipher, &magma_ctr_acpkm_omac_cipher, &magma_mgm_cipher, &grasshopper_ctr_acpkm_cipher, &grasshopper_ctr_acpkm_omac_cipher, &grasshopper_mgm_cipher, }; size_t i; #define elems(l) (sizeof(l) / sizeof(l[0])) for (i = 0; i < elems(list); i++) GOST_deinit_cipher(list[i]); } libengine-gost-openssl-3.0.2/gost_prov_digest.c000066400000000000000000000161711446070765000216470ustar00rootroot00000000000000/********************************************************************** * gost_prov_digest.c - Initialize all digests * * * * Copyright (c) 2021 Richard Levitte * * This file is distributed under the same license as OpenSSL * * * * OpenSSL provider interface to GOST digest functions * * Requires OpenSSL 3.0 for compilation * **********************************************************************/ #include #include #include "gost_prov.h" #include "gost_lcl.h" /* * Forward declarations of all OSSL_DISPATCH functions, to make sure they * are correctly defined further down. */ static OSSL_FUNC_digest_dupctx_fn digest_dupctx; static OSSL_FUNC_digest_freectx_fn digest_freectx; static OSSL_FUNC_digest_init_fn digest_init; static OSSL_FUNC_digest_update_fn digest_update; static OSSL_FUNC_digest_final_fn digest_final; struct gost_prov_crypt_ctx_st { /* Provider context */ PROV_CTX *provctx; /* OSSL_PARAM descriptors */ const OSSL_PARAM *known_params; /* GOST_digest descriptor */ GOST_digest *descriptor; /* * Since existing functionality is designed for ENGINEs, the functions * in this file are accomodated and are simply wrappers that use a local * EVP_MD and EVP_MD_CTX. * Future development should take a more direct approach and have the * appropriate digest functions and digest data directly in this context. */ /* The EVP_MD created from |descriptor| */ EVP_MD *digest; /* The context for the EVP_MD functions */ EVP_MD_CTX *dctx; }; typedef struct gost_prov_crypt_ctx_st GOST_CTX; static void digest_freectx(void *vgctx) { GOST_CTX *gctx = vgctx; /* * We don't free gctx->digest here. * That will be done by the provider teardown, via * GOST_prov_deinit_digests() (defined at the bottom of this file). */ EVP_MD_CTX_free(gctx->dctx); OPENSSL_free(gctx); } static GOST_CTX *digest_newctx(void *provctx, GOST_digest *descriptor, const OSSL_PARAM *known_params) { GOST_CTX *gctx = NULL; if ((gctx = OPENSSL_zalloc(sizeof(*gctx))) != NULL) { gctx->provctx = provctx; gctx->known_params = known_params; gctx->descriptor = descriptor; gctx->digest = GOST_init_digest(descriptor); gctx->dctx = EVP_MD_CTX_new(); if (gctx->digest == NULL || gctx->dctx == NULL) { digest_freectx(gctx); gctx = NULL; } } return gctx; } static void *digest_dupctx(void *vsrc) { GOST_CTX *src = vsrc; GOST_CTX *dst = digest_newctx(src->provctx, src->descriptor, src->known_params); if (dst != NULL) EVP_MD_CTX_copy(dst->dctx, src->dctx); return dst; } static int digest_get_params(EVP_MD *d, OSSL_PARAM params[]) { OSSL_PARAM *p; if (((p = OSSL_PARAM_locate(params, "blocksize")) != NULL && !OSSL_PARAM_set_size_t(p, EVP_MD_block_size(d))) || ((p = OSSL_PARAM_locate(params, "size")) != NULL && !OSSL_PARAM_set_size_t(p, EVP_MD_size(d))) || ((p = OSSL_PARAM_locate(params, "xof")) != NULL && !OSSL_PARAM_set_size_t(p, EVP_MD_flags(d) & EVP_MD_FLAG_XOF))) return 0; return 1; } static int digest_init(void *vgctx, const OSSL_PARAM unused_params[]) { GOST_CTX *gctx = vgctx; return EVP_DigestInit_ex(gctx->dctx, gctx->digest, gctx->provctx->e) > 0; } static int digest_update(void *vgctx, const unsigned char *in, size_t inl) { GOST_CTX *gctx = vgctx; return EVP_DigestUpdate(gctx->dctx, in, (int)inl) > 0; } static int digest_final(void *vgctx, unsigned char *out, size_t *outl, size_t outsize) { GOST_CTX *gctx = vgctx; unsigned int int_outl = outl != NULL ? *outl : 0; int res = EVP_DigestFinal(gctx->dctx, out, &int_outl); if (res > 0 && outl != NULL) *outl = (size_t)int_outl; return res > 0; } static const OSSL_PARAM *known_GostR3411_94_digest_params; static const OSSL_PARAM *known_GostR3411_2012_256_digest_params; static const OSSL_PARAM *known_GostR3411_2012_512_digest_params; /* * These are named like the EVP_MD templates in gost_md.c etc, with the * added suffix "_functions". Hopefully, that makes it easy to find the * actual implementation. */ typedef void (*fptr_t)(void); #define MAKE_FUNCTIONS(name) \ static OSSL_FUNC_digest_get_params_fn name##_get_params; \ static int name##_get_params(OSSL_PARAM *params) \ { \ return digest_get_params(GOST_init_digest(&name), params); \ } \ static OSSL_FUNC_digest_newctx_fn name##_newctx; \ static void *name##_newctx(void *provctx) \ { \ return digest_newctx(provctx, &name, known_##name##_params); \ } \ static const OSSL_DISPATCH name##_functions[] = { \ { OSSL_FUNC_DIGEST_GET_PARAMS, (fptr_t)name##_get_params }, \ { OSSL_FUNC_DIGEST_NEWCTX, (fptr_t)name##_newctx }, \ { OSSL_FUNC_DIGEST_DUPCTX, (fptr_t)digest_dupctx }, \ { OSSL_FUNC_DIGEST_FREECTX, (fptr_t)digest_freectx }, \ { OSSL_FUNC_DIGEST_INIT, (fptr_t)digest_init }, \ { OSSL_FUNC_DIGEST_UPDATE, (fptr_t)digest_update }, \ { OSSL_FUNC_DIGEST_FINAL, (fptr_t)digest_final }, \ } MAKE_FUNCTIONS(GostR3411_94_digest); MAKE_FUNCTIONS(GostR3411_2012_256_digest); MAKE_FUNCTIONS(GostR3411_2012_512_digest); /* The OSSL_ALGORITHM for the provider's operation query function */ const OSSL_ALGORITHM GOST_prov_digests[] = { /* * Described in RFC 6986, first name from * https://www.ietf.org/archive/id/draft-deremin-rfc4491-bis-06.txt * (is there not an RFC namming these?) */ { "id-tc26-gost3411-12-256:md_gost12_256:1.2.643.7.1.1.2.2", NULL, GostR3411_2012_256_digest_functions, "GOST R 34.11-2012 with 256 bit hash" }, { "id-tc26-gost3411-12-512:md_gost12_512:1.2.643.7.1.1.2.3", NULL, GostR3411_2012_512_digest_functions, "GOST R 34.11-2012 with 512 bit hash" }, /* Described in RFC 5831, first name from RFC 4357, section 10.4 */ { "id-GostR3411-94:md_gost94:1.2.643.2.2.9", NULL, GostR3411_94_digest_functions, "GOST R 34.11-94" }, { NULL , NULL, NULL } }; void GOST_prov_deinit_digests(void) { static GOST_digest *list[] = { &GostR3411_94_digest, &GostR3411_2012_256_digest, &GostR3411_2012_512_digest, }; size_t i; #define elems(l) (sizeof(l) / sizeof(l[0])) for (i = 0; i < elems(list); i++) GOST_deinit_digest(list[i]); } libengine-gost-openssl-3.0.2/gost_prov_mac.c000066400000000000000000000310471446070765000211270ustar00rootroot00000000000000/********************************************************************** * gost_prov_mac.c - Initialize all macs * * * * Copyright (c) 2021 Richard Levitte * * This file is distributed under the same license as OpenSSL * * * * OpenSSL provider interface to GOST mac functions * * Requires OpenSSL 3.0 for compilation * **********************************************************************/ #include #include #include "gost_prov.h" #include "gost_lcl.h" /* * Forward declarations of all generic OSSL_DISPATCH functions, to make sure * they are correctly defined further down. For the algorithm specific ones * MAKE_FUNCTIONS() does it for us. */ static OSSL_FUNC_mac_dupctx_fn mac_dupctx; static OSSL_FUNC_mac_freectx_fn mac_freectx; static OSSL_FUNC_mac_init_fn mac_init; static OSSL_FUNC_mac_update_fn mac_update; static OSSL_FUNC_mac_final_fn mac_final; static OSSL_FUNC_mac_get_ctx_params_fn mac_get_ctx_params; static OSSL_FUNC_mac_set_ctx_params_fn mac_set_ctx_params; struct gost_prov_mac_desc_st { /* * In the GOST engine, the MAC implementation bases itself heavily on * digests with the same name. We can re-use that part. */ GOST_digest *digest_desc; size_t initial_mac_size; }; typedef struct gost_prov_mac_desc_st GOST_DESC; struct gost_prov_mac_ctx_st { /* Provider context */ PROV_CTX *provctx; const GOST_DESC *descriptor; /* Output MAC size */ size_t mac_size; /* XOF mode, where applicable */ int xof_mode; /* * Since existing functionality is mainly designed as EVP_MDs for * ENGINEs, the functions in this file are accomodated and are simply * wrappers that use a local EVP_MD and EVP_MD_CTX. * Future development should take a more direct approach and have the * appropriate digest functions and digest data directly in this context. */ /* The EVP_MD created from |descriptor| */ EVP_MD *digest; /* The context for the EVP_MD functions */ EVP_MD_CTX *dctx; }; typedef struct gost_prov_mac_ctx_st GOST_CTX; static void mac_freectx(void *vgctx) { GOST_CTX *gctx = vgctx; /* * We don't free gctx->digest here. * That will be done by the provider teardown, via * GOST_prov_deinit_digests() (defined at the bottom of this file). */ EVP_MD_CTX_free(gctx->dctx); OPENSSL_free(gctx); } static GOST_CTX *mac_newctx(void *provctx, const GOST_DESC *descriptor) { GOST_CTX *gctx = NULL; if ((gctx = OPENSSL_zalloc(sizeof(*gctx))) != NULL) { gctx->provctx = provctx; gctx->descriptor = descriptor; gctx->mac_size = descriptor->initial_mac_size; gctx->digest = GOST_init_digest(descriptor->digest_desc); gctx->dctx = EVP_MD_CTX_new(); if (gctx->digest == NULL || gctx->dctx == NULL || EVP_DigestInit_ex(gctx->dctx, gctx->digest, gctx->provctx->e) <= 0) { mac_freectx(gctx); gctx = NULL; } } return gctx; } static void *mac_dupctx(void *vsrc) { GOST_CTX *src = vsrc; GOST_CTX *dst = mac_newctx(src->provctx, src->descriptor); if (dst != NULL) EVP_MD_CTX_copy(dst->dctx, src->dctx); return dst; } static int mac_init(void *mctx, const unsigned char *key, size_t keylen, const OSSL_PARAM params[]) { GOST_CTX *gctx = mctx; return mac_set_ctx_params(gctx, params) && (key == NULL || EVP_MD_CTX_ctrl(gctx->dctx, EVP_MD_CTRL_SET_KEY, (int)keylen, (void *)key) > 0); } static int mac_update(void *mctx, const unsigned char *in, size_t inl) { GOST_CTX *gctx = mctx; return EVP_DigestUpdate(gctx->dctx, in, inl) > 0; } static int mac_final(void *mctx, unsigned char *out, size_t *outl, size_t outsize) { GOST_CTX *gctx = mctx; unsigned int tmpoutl; int ret = 0; /* This is strange code... but it duplicates pkey_gost_mac_signctx() */ if (outl == NULL) return 0; /* for platforms where sizeof(int) != * sizeof(size_t) */ tmpoutl = *outl; if (out != NULL) { /* We ignore the error for GOST MDs that don't support setting the size */ EVP_MD_CTX_ctrl(gctx->dctx, EVP_MD_CTRL_XOF_LEN, gctx->mac_size, NULL); ret = EVP_DigestFinal_ex(gctx->dctx, out, &tmpoutl); } if (outl != NULL) *outl = (size_t)gctx->mac_size; return ret; } static const OSSL_PARAM *mac_gettable_params(void *provctx, const GOST_DESC * descriptor) { static const OSSL_PARAM params[] = { OSSL_PARAM_size_t("size", NULL), OSSL_PARAM_size_t("keylen", NULL), OSSL_PARAM_END }; return params; } static const OSSL_PARAM *mac_gettable_ctx_params(void *mctx, void *provctx) { static const OSSL_PARAM params[] = { OSSL_PARAM_size_t("size", NULL), OSSL_PARAM_size_t("keylen", NULL), OSSL_PARAM_END }; return params; } static const OSSL_PARAM *mac_settable_ctx_params(void *mctx, void *provctx) { static const OSSL_PARAM params[] = { OSSL_PARAM_size_t("size", NULL), OSSL_PARAM_octet_string("key", NULL, 0), OSSL_PARAM_END }; return params; } static int mac_get_params(const GOST_DESC * descriptor, OSSL_PARAM params[]) { OSSL_PARAM *p = NULL; if (((p = OSSL_PARAM_locate(params, "size")) != NULL && !OSSL_PARAM_set_size_t(p, descriptor->initial_mac_size)) || ((p = OSSL_PARAM_locate(params, "keylen")) != NULL && !OSSL_PARAM_set_size_t(p, 32))) return 0; return 1; } static int mac_get_ctx_params(void *mctx, OSSL_PARAM params[]) { GOST_CTX *gctx = mctx; OSSL_PARAM *p = NULL; if ((p = OSSL_PARAM_locate(params, "size")) != NULL && !OSSL_PARAM_set_size_t(p, gctx->mac_size)) return 0; if ((p = OSSL_PARAM_locate(params, "keylen")) != NULL) { unsigned int len = 0; if (EVP_MD_CTX_ctrl(gctx->dctx, EVP_MD_CTRL_KEY_LEN, 0, &len) <= 0 || !OSSL_PARAM_set_size_t(p, len)) return 0; } if ((p = OSSL_PARAM_locate(params, "xof")) != NULL && (!(EVP_MD_flags(EVP_MD_CTX_md(gctx->dctx)) & EVP_MD_FLAG_XOF) || !OSSL_PARAM_set_int(p, gctx->xof_mode))) return 0; return 1; } static int mac_set_ctx_params(void *mctx, const OSSL_PARAM params[]) { GOST_CTX *gctx = mctx; const OSSL_PARAM *p = NULL; if ((p = OSSL_PARAM_locate_const(params, "size")) != NULL && !OSSL_PARAM_get_size_t(p, &gctx->mac_size)) return 0; if ((p = OSSL_PARAM_locate_const(params, "key")) != NULL) { const unsigned char *key = NULL; size_t keylen = 0; int ret; if (!OSSL_PARAM_get_octet_string_ptr(p, (const void **)&key, &keylen)) return 0; ret = EVP_MD_CTX_ctrl(gctx->dctx, EVP_MD_CTRL_SET_KEY, (int)keylen, (void *)key); if (ret <= 0 && ret != -2) return 0; } if ((p = OSSL_PARAM_locate_const(params, "xof")) != NULL && (!(EVP_MD_flags(EVP_MD_CTX_md(gctx->dctx)) & EVP_MD_FLAG_XOF) || !OSSL_PARAM_get_int(p, &gctx->xof_mode))) return 0; if ((p = OSSL_PARAM_locate_const(params, "key-mesh")) != NULL) { size_t key_mesh = 0; int i_cipher_key_mesh = 0, *p_cipher_key_mesh = NULL; if (!OSSL_PARAM_get_size_t(p, &key_mesh)) return 0; if ((p = OSSL_PARAM_locate_const(params, "cipher-key-mesh")) != NULL) { size_t cipher_key_mesh = 0; if (!OSSL_PARAM_get_size_t(p, &cipher_key_mesh)) { return 0; } else { i_cipher_key_mesh = (int)cipher_key_mesh; p_cipher_key_mesh = &i_cipher_key_mesh; } } if (EVP_MD_CTX_ctrl(gctx->dctx, EVP_CTRL_KEY_MESH, key_mesh, p_cipher_key_mesh) <= 0) return 0; } return 1; } /* * Macros to map the MAC algorithms to their respective GOST_digest * implementation where necessary. Not needed for magma and grasshopper, as * they already have fitting names. */ #define id_Gost28147_89_MAC_digest Gost28147_89_MAC_digest #define gost_mac_12_digest Gost28147_89_mac_12_digest #define id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac_digest \ kuznyechik_ctracpkm_omac_digest typedef void (*fptr_t)(void); #define MAKE_FUNCTIONS(name, macsize) \ const GOST_DESC name##_desc = { \ &name##_digest, \ macsize, \ }; \ static OSSL_FUNC_mac_newctx_fn name##_newctx; \ static void *name##_newctx(void *provctx) \ { \ return mac_newctx(provctx, &name##_desc); \ } \ static OSSL_FUNC_mac_gettable_params_fn name##_gettable_params; \ static const OSSL_PARAM *name##_gettable_params(void *provctx) \ { \ return mac_gettable_params(provctx, &name##_desc); \ } \ static OSSL_FUNC_mac_get_params_fn name##_get_params; \ static int name##_get_params(OSSL_PARAM *params) \ { \ return mac_get_params(&name##_desc, params); \ } \ static const OSSL_DISPATCH name##_functions[] = { \ { OSSL_FUNC_MAC_GETTABLE_PARAMS, \ (fptr_t)name##_gettable_params }, \ { OSSL_FUNC_MAC_GET_PARAMS, (fptr_t)name##_get_params }, \ { OSSL_FUNC_MAC_NEWCTX, (fptr_t)name##_newctx }, \ { OSSL_FUNC_MAC_DUPCTX, (fptr_t)mac_dupctx }, \ { OSSL_FUNC_MAC_FREECTX, (fptr_t)mac_freectx }, \ { OSSL_FUNC_MAC_INIT, (fptr_t)mac_init }, \ { OSSL_FUNC_MAC_UPDATE, (fptr_t)mac_update }, \ { OSSL_FUNC_MAC_FINAL, (fptr_t)mac_final }, \ { OSSL_FUNC_MAC_GETTABLE_CTX_PARAMS, \ (fptr_t)mac_gettable_ctx_params }, \ { OSSL_FUNC_MAC_GET_CTX_PARAMS, (fptr_t)mac_get_ctx_params }, \ { OSSL_FUNC_MAC_SETTABLE_CTX_PARAMS, \ (fptr_t)mac_settable_ctx_params }, \ { OSSL_FUNC_MAC_SET_CTX_PARAMS, (fptr_t)mac_set_ctx_params }, \ } /* * The name used here is the same as the NID name. Some of the names are * horribly long, but that can't be helped... */ MAKE_FUNCTIONS(id_Gost28147_89_MAC, 4); MAKE_FUNCTIONS(gost_mac_12, 4); MAKE_FUNCTIONS(magma_mac, 8); MAKE_FUNCTIONS(grasshopper_mac, 16); MAKE_FUNCTIONS(id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac, 16); /* The OSSL_ALGORITHM for the provider's operation query function */ const OSSL_ALGORITHM GOST_prov_macs[] = { { SN_id_Gost28147_89_MAC ":1.2.643.2.2.22", NULL, id_Gost28147_89_MAC_functions, "GOST 28147-89 MAC" }, { SN_gost_mac_12, NULL, gost_mac_12_functions }, { SN_magma_mac, NULL, magma_mac_functions }, { SN_grasshopper_mac, NULL, grasshopper_mac_functions }, { SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac ":1.2.643.7.1.1.5.2.2", NULL, id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac_functions }, { NULL , NULL, NULL } }; void GOST_prov_deinit_mac_digests(void) { static GOST_digest *list[] = { &Gost28147_89_MAC_digest, &Gost28147_89_mac_12_digest, &magma_mac_digest, &grasshopper_mac_digest, &kuznyechik_ctracpkm_omac_digest }; size_t i; #define elems(l) (sizeof(l) / sizeof(l[0])) for (i = 0; i < elems(list); i++) GOST_deinit_digest(list[i]); } libengine-gost-openssl-3.0.2/gosthash.c000066400000000000000000000155121446070765000201040ustar00rootroot00000000000000/********************************************************************** * gosthash.c * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Implementation of GOST R 34.11-94 hash function * * uses on gost89.c and gost89.h Doesn't need OpenSSL * **********************************************************************/ #include #include "gost89.h" #include "gosthash.h" /* * Use OPENSSL_malloc for memory allocation if compiled with * -DOPENSSL_BUILD, and libc malloc otherwise */ #ifndef MYALLOC # ifdef OPENSSL_BUILD # include # define MYALLOC(size) OPENSSL_malloc(size) # define MYFREE(ptr) OPENSSL_free(ptr) # else # define MYALLOC(size) malloc(size) # define MYFREE(ptr) free(ptr) # endif #endif /* * Following functions are various bit meshing routines used in GOST R * 34.11-94 algorithms */ static void swap_bytes(byte * w, byte * k) { int i, j; for (i = 0; i < 4; i++) for (j = 0; j < 8; j++) k[i + 4 * j] = w[8 * i + j]; } /* was A_A */ static void circle_xor8(const byte * w, byte * k) { byte buf[8]; int i; memcpy(buf, w, 8); memmove(k, w + 8, 24); for (i = 0; i < 8; i++) k[i + 24] = buf[i] ^ k[i]; } /* was R_R */ static void transform_3(byte * data) { unsigned short int acc; acc = (data[0] ^ data[2] ^ data[4] ^ data[6] ^ data[24] ^ data[30]) | ((data[1] ^ data[3] ^ data[5] ^ data[7] ^ data[25] ^ data[31]) << 8); memmove(data, data + 2, 30); data[30] = acc & 0xff; data[31] = acc >> 8; } /* Adds blocks of N bytes modulo 2**(8*n). Returns carry*/ static int add_blocks(int n, byte * left, const byte * right) { int i; int carry = 0; for (i = 0; i < n; i++) { int sum = (int)left[i] + (int)right[i] + carry; left[i] = sum & 0xff; carry = sum >> 8; } return carry; } /* Xor two sequences of bytes */ static void xor_blocks(byte * result, const byte * a, const byte * b, size_t len) { size_t i; for (i = 0; i < len; i++) result[i] = a[i] ^ b[i]; } /* * Calculate H(i+1) = Hash(Hi,Mi) * Where H and M are 32 bytes long */ static int hash_step(gost_ctx * c, byte * H, const byte * M) { byte U[32], W[32], V[32], S[32], Key[32]; int i; /* Compute first key */ xor_blocks(W, H, M, 32); swap_bytes(W, Key); /* Encrypt first 8 bytes of H with first key */ gost_enc_with_key(c, Key, H, S); /* Compute second key */ circle_xor8(H, U); circle_xor8(M, V); circle_xor8(V, V); xor_blocks(W, U, V, 32); swap_bytes(W, Key); /* encrypt second 8 bytes of H with second key */ gost_enc_with_key(c, Key, H + 8, S + 8); /* compute third key */ circle_xor8(U, U); U[31] = ~U[31]; U[29] = ~U[29]; U[28] = ~U[28]; U[24] = ~U[24]; U[23] = ~U[23]; U[20] = ~U[20]; U[18] = ~U[18]; U[17] = ~U[17]; U[14] = ~U[14]; U[12] = ~U[12]; U[10] = ~U[10]; U[8] = ~U[8]; U[7] = ~U[7]; U[5] = ~U[5]; U[3] = ~U[3]; U[1] = ~U[1]; circle_xor8(V, V); circle_xor8(V, V); xor_blocks(W, U, V, 32); swap_bytes(W, Key); /* encrypt third 8 bytes of H with third key */ gost_enc_with_key(c, Key, H + 16, S + 16); /* Compute fourth key */ circle_xor8(U, U); circle_xor8(V, V); circle_xor8(V, V); xor_blocks(W, U, V, 32); swap_bytes(W, Key); /* Encrypt last 8 bytes with fourth key */ gost_enc_with_key(c, Key, H + 24, S + 24); for (i = 0; i < 12; i++) transform_3(S); xor_blocks(S, S, M, 32); transform_3(S); xor_blocks(S, S, H, 32); for (i = 0; i < 61; i++) transform_3(S); memcpy(H, S, 32); return 1; } /* * Initialize gost_hash ctx - cleans up temporary structures and set up * substitution blocks */ int init_gost_hash_ctx(gost_hash_ctx * ctx, const gost_subst_block * subst_block) { memset(ctx, 0, sizeof(*ctx)); ctx->cipher_ctx = (gost_ctx *) MYALLOC(sizeof(gost_ctx)); if (!ctx->cipher_ctx) { return 0; } gost_init(ctx->cipher_ctx, subst_block); return 1; } /* * Free cipher CTX if it is dynamically allocated. Do not use * if cipher ctx is statically allocated as in OpenSSL implementation of * GOST hash algroritm * */ void done_gost_hash_ctx(gost_hash_ctx * ctx) { /* * No need to use gost_destroy, because cipher keys are not really secret * when hashing */ MYFREE(ctx->cipher_ctx); } /* * reset state of hash context to begin hashing new message */ int start_hash(gost_hash_ctx * ctx) { if (!ctx->cipher_ctx) return 0; memset(&(ctx->H), 0, 32); memset(&(ctx->S), 0, 32); ctx->len = 0L; ctx->left = 0; return 1; } /* * Hash block of arbitrary length * * */ int hash_block(gost_hash_ctx * ctx, const byte * block, size_t length) { if (ctx->left) { /* * There are some bytes from previous step */ unsigned int add_bytes = 32 - ctx->left; if (add_bytes > length) { add_bytes = length; } memcpy(&(ctx->remainder[ctx->left]), block, add_bytes); ctx->left += add_bytes; if (ctx->left < 32) { return 1; } block += add_bytes; length -= add_bytes; hash_step(ctx->cipher_ctx, ctx->H, ctx->remainder); add_blocks(32, ctx->S, ctx->remainder); ctx->len += 32; ctx->left = 0; } while (length >= 32) { hash_step(ctx->cipher_ctx, ctx->H, block); add_blocks(32, ctx->S, block); ctx->len += 32; block += 32; length -= 32; } if (length) { memcpy(ctx->remainder, block, ctx->left = length); } return 1; } /* * Compute hash value from current state of ctx * state of hash ctx becomes invalid and cannot be used for further * hashing. */ int finish_hash(gost_hash_ctx * ctx, byte * hashval) { byte buf[32]; byte H[32]; byte S[32]; ghosthash_len fin_len = ctx->len; byte *bptr; memcpy(H, ctx->H, 32); memcpy(S, ctx->S, 32); if (ctx->left) { memset(buf, 0, 32); memcpy(buf, ctx->remainder, ctx->left); hash_step(ctx->cipher_ctx, H, buf); add_blocks(32, S, buf); fin_len += ctx->left; } memset(buf, 0, 32); if (fin_len == 0) hash_step(ctx->cipher_ctx, H, buf); bptr = buf; fin_len <<= 3; /* Hash length in BITS!! */ while (fin_len > 0) { *(bptr++) = (byte) (fin_len & 0xFF); fin_len >>= 8; }; hash_step(ctx->cipher_ctx, H, buf); hash_step(ctx->cipher_ctx, H, S); memcpy(hashval, H, 32); return 1; } libengine-gost-openssl-3.0.2/gosthash.h000066400000000000000000000032221446070765000201040ustar00rootroot00000000000000/********************************************************************** * gosthash.h * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Declaration of GOST R 34.11-94 hash functions * * uses and gost89.h Doesn't need OpenSSL * **********************************************************************/ #ifndef GOSTHASH_H # define GOSTHASH_H # include "gost89.h" # include # if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__) typedef __int64 ghosthash_len; # elif defined(__arch64__) typedef long ghosthash_len; # else typedef long long ghosthash_len; # endif typedef struct gost_hash_ctx { ghosthash_len len; gost_ctx *cipher_ctx; int left; byte H[32]; byte S[32]; byte remainder[32]; } gost_hash_ctx; /* Initalizes gost hash ctx, including creation of gost cipher ctx */ int init_gost_hash_ctx(gost_hash_ctx * ctx, const gost_subst_block * subst_block); void done_gost_hash_ctx(gost_hash_ctx * ctx); /* * Cleans up all fields, except cipher ctx preparing ctx for computing of new * hash value */ int start_hash(gost_hash_ctx * ctx); /* Hashes block of data */ int hash_block(gost_hash_ctx * ctx, const byte * block, size_t length); /* * Finalizes computation of hash and fills buffer (which should be at least * 32 bytes long) with value of computed hash. */ int finish_hash(gost_hash_ctx * ctx, byte * hashval); #endif libengine-gost-openssl-3.0.2/gosthash2012.c000066400000000000000000000145011446070765000204060ustar00rootroot00000000000000/* * GOST R 34.11-2012 core functions. * * Copyright (c) 2013 Cryptocom LTD. * This file is distributed under the same license as OpenSSL. * * Author: Alexey Degtyarev * */ #include "gosthash2012.h" #if defined(__x86_64__) || defined(__e2k__) # ifdef _MSC_VER # include # else # include # endif #endif #if defined(_WIN32) || defined(_WINDOWS) # define INLINE __inline #else # define INLINE inline #endif #define BSWAP64(x) \ (((x & 0xFF00000000000000ULL) >> 56) | \ ((x & 0x00FF000000000000ULL) >> 40) | \ ((x & 0x0000FF0000000000ULL) >> 24) | \ ((x & 0x000000FF00000000ULL) >> 8) | \ ((x & 0x00000000FF000000ULL) << 8) | \ ((x & 0x0000000000FF0000ULL) << 24) | \ ((x & 0x000000000000FF00ULL) << 40) | \ ((x & 0x00000000000000FFULL) << 56)) /* * Initialize gost2012 hash context structure */ void init_gost2012_hash_ctx(gost2012_hash_ctx * CTX, const unsigned int digest_size) { memset(CTX, 0, sizeof(gost2012_hash_ctx)); CTX->digest_size = digest_size; /* * IV for 512-bit hash should be 0^512 * IV for 256-bit hash should be (00000001)^64 * * It's already zeroed when CTX is cleared above, so we only * need to set it to 0x01-s for 256-bit hash. */ if (digest_size == 256) memset(&CTX->h, 0x01, sizeof(uint512_u)); } static INLINE void pad(gost2012_hash_ctx * CTX) { memset(&(CTX->buffer.B[CTX->bufsize]), 0, sizeof(CTX->buffer) - CTX->bufsize); CTX->buffer.B[CTX->bufsize] = 1; } static INLINE void add512(union uint512_u * RESTRICT x, const union uint512_u * RESTRICT y) { #ifndef __GOST3411_BIG_ENDIAN__ unsigned int CF = 0; unsigned int i; # ifdef HAVE_ADDCARRY_U64 for (i = 0; i < 8; i++) CF = _addcarry_u64(CF, x->QWORD[i] , y->QWORD[i], &(x->QWORD[i])); # else for (i = 0; i < 8; i++) { const unsigned long long left = x->QWORD[i]; unsigned long long sum; sum = left + y->QWORD[i] + CF; /* * (sum == left): is noop, because it's possible only * when `left' is added with `0 + 0' or with `ULLONG_MAX + 1', * in that case `CF' (carry) retain previous value, which is correct, * because when `left + 0 + 0' there was no overflow (thus no carry), * and when `left + ULLONG_MAX + 1' value is wrapped back to * itself with overflow, thus creating carry. * * (sum != left): * if `sum' is not wrapped (sum > left) there should not be carry, * if `sum' is wrapped (sum < left) there should be carry. */ if (sum != left) CF = (sum < left); x->QWORD[i] = sum; } # endif /* !__x86_64__ */ #else /* __GOST3411_BIG_ENDIAN__ */ const unsigned char *yp; unsigned char *xp; unsigned int i; int buf; xp = (unsigned char *)&x[0]; yp = (const unsigned char *)&y[0]; buf = 0; for (i = 0; i < 64; i++) { buf = xp[i] + yp[i] + (buf >> 8); xp[i] = (unsigned char)buf & 0xFF; } #endif /* __GOST3411_BIG_ENDIAN__ */ } static void g(union uint512_u *h, const union uint512_u * RESTRICT N, const union uint512_u * RESTRICT m) { #ifdef __GOST3411_HAS_SSE2__ __m128i xmm0, xmm2, xmm4, xmm6; /* XMMR0-quadruple */ __m128i xmm1, xmm3, xmm5, xmm7; /* XMMR1-quadruple */ unsigned int i; LOAD(N, xmm0, xmm2, xmm4, xmm6); XLPS128M(h, xmm0, xmm2, xmm4, xmm6); ULOAD(m, xmm1, xmm3, xmm5, xmm7); XLPS128R(xmm0, xmm2, xmm4, xmm6, xmm1, xmm3, xmm5, xmm7); for (i = 0; i < 11; i++) ROUND128(i, xmm0, xmm2, xmm4, xmm6, xmm1, xmm3, xmm5, xmm7); XLPS128M((&C[11]), xmm0, xmm2, xmm4, xmm6); X128R(xmm0, xmm2, xmm4, xmm6, xmm1, xmm3, xmm5, xmm7); X128M(h, xmm0, xmm2, xmm4, xmm6); ULOAD(m, xmm1, xmm3, xmm5, xmm7); X128R(xmm0, xmm2, xmm4, xmm6, xmm1, xmm3, xmm5, xmm7); STORE(h, xmm0, xmm2, xmm4, xmm6); # ifndef __i386__ /* Restore the Floating-point status on the CPU */ /* This is only required on MMX, but EXTRACT32 is using MMX */ _mm_empty(); # endif #else union uint512_u Ki, data; unsigned int i; XLPS(h, N, (&data)); /* Starting E() */ Ki = data; XLPS((&Ki), ((const union uint512_u *)&m[0]), (&data)); for (i = 0; i < 11; i++) ROUND(i, (&Ki), (&data)); XLPS((&Ki), (&C[11]), (&Ki)); X((&Ki), (&data), (&data)); /* E() done */ X((&data), h, (&data)); X((&data), m, h); #endif } static INLINE void stage2(gost2012_hash_ctx * CTX, const union uint512_u *data) { g(&(CTX->h), &(CTX->N), data); add512(&(CTX->N), &buffer512); add512(&(CTX->Sigma), data); } static INLINE void stage3(gost2012_hash_ctx * CTX) { pad(CTX); g(&(CTX->h), &(CTX->N), &(CTX->buffer)); add512(&(CTX->Sigma), &CTX->buffer); memset(&(CTX->buffer.B[0]), 0, sizeof(uint512_u)); #ifndef __GOST3411_BIG_ENDIAN__ CTX->buffer.QWORD[0] = CTX->bufsize << 3; #else CTX->buffer.QWORD[0] = BSWAP64(CTX->bufsize << 3); #endif add512(&(CTX->N), &(CTX->buffer)); g(&(CTX->h), &buffer0, &(CTX->N)); g(&(CTX->h), &buffer0, &(CTX->Sigma)); } /* * Hash block of arbitrary length * */ void gost2012_hash_block(gost2012_hash_ctx * CTX, const unsigned char *data, size_t len) { register size_t bufsize = CTX->bufsize; if (bufsize == 0) { while (len >= 64) { memcpy(&CTX->buffer.B[0], data, 64); stage2(CTX, &(CTX->buffer)); data += 64; len -= 64; } } while (len) { register size_t chunksize = 64 - bufsize; if (chunksize > len) chunksize = len; memcpy(&CTX->buffer.B[bufsize], data, chunksize); bufsize += chunksize; len -= chunksize; data += chunksize; if (bufsize == 64) { stage2(CTX, &(CTX->buffer) ); bufsize = 0; } } CTX->bufsize = bufsize; } /* * Compute hash value from current state of ctx * state of hash ctx becomes invalid and cannot be used for further * hashing. */ void gost2012_finish_hash(gost2012_hash_ctx * CTX, unsigned char *digest) { stage3(CTX); CTX->bufsize = 0; if (CTX->digest_size == 256) memcpy(digest, &(CTX->h.QWORD[4]), 32); else memcpy(digest, &(CTX->h.QWORD[0]), 64); } libengine-gost-openssl-3.0.2/gosthash2012.h000066400000000000000000000040021446070765000204060ustar00rootroot00000000000000/* * GOST R 34.11-2012 core functions definitions. * * Copyright (c) 2013 Cryptocom LTD. * This file is distributed under the same license as OpenSSL. * * Author: Alexey Degtyarev * */ #include #ifdef __SSE2__ # define __GOST3411_HAS_SSE2__ # if !defined(__x86_64__) && !defined(__e2k__) /* * x86-64 bit Linux and Windows ABIs provide malloc function that returns * 16-byte alignment memory buffers required by SSE load/store instructions. * Other platforms require special trick for proper gost2012_hash_ctx structure * allocation. It will be easier to switch to unaligned loadu/storeu memory * access instructions in this case. */ # define UNALIGNED_SIMD_ACCESS # pragma message "Use unaligned SIMD memory access" # endif #endif #ifdef __GOST3411_HAS_SSE2__ # if (__GNUC__ < 4) || (__GNUC__ == 4 && __GNUC_MINOR__ < 2) # undef __GOST3411_HAS_SSE2__ # endif #endif #ifndef L_ENDIAN # define __GOST3411_BIG_ENDIAN__ #endif #if defined __GOST3411_HAS_SSE2__ # include "gosthash2012_sse2.h" #else # include "gosthash2012_ref.h" #endif # if defined(__GNUC__) || defined(__clang__) # define RESTRICT __restrict__ # else # define RESTRICT # endif #ifdef _MSC_VER # define ALIGN(x) __declspec(align(x)) #else # define ALIGN(x) __attribute__ ((__aligned__(x))) #endif ALIGN(16) typedef union uint512_u { unsigned long long QWORD[8]; unsigned char B[64]; } uint512_u; #include "gosthash2012_const.h" #include "gosthash2012_precalc.h" /* GOST R 34.11-2012 hash context */ typedef struct gost2012_hash_ctx { union uint512_u buffer; union uint512_u h; union uint512_u N; union uint512_u Sigma; size_t bufsize; unsigned int digest_size; } gost2012_hash_ctx; void init_gost2012_hash_ctx(gost2012_hash_ctx * CTX, const unsigned int digest_size); void gost2012_hash_block(gost2012_hash_ctx * CTX, const unsigned char *data, size_t len); void gost2012_finish_hash(gost2012_hash_ctx * CTX, unsigned char *digest); libengine-gost-openssl-3.0.2/gosthash2012_const.h000066400000000000000000000147031446070765000216250ustar00rootroot00000000000000/* * GOST R 34.11-2012 constants. * * Copyright (c) 2013 Cryptocom LTD. * This file is distributed under the same license as OpenSSL. * * Author: Alexey Degtyarev * */ ALIGN(16) static const union uint512_u buffer0 = { {0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL} }; #ifndef __GOST3411_BIG_ENDIAN__ ALIGN(16) static const union uint512_u buffer512 = { {0x0000000000000200ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL} }; #else ALIGN(16) static const union uint512_u buffer512 = { {0x0002000000000000ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL, 0x0ULL} }; #endif #ifndef __GOST3411_BIG_ENDIAN__ ALIGN(16) static const union uint512_u C[12] = { {{ 0xdd806559f2a64507ULL, 0x05767436cc744d23ULL, 0xa2422a08a460d315ULL, 0x4b7ce09192676901ULL, 0x714eb88d7585c4fcULL, 0x2f6a76432e45d016ULL, 0xebcb2f81c0657c1fULL, 0xb1085bda1ecadae9ULL}}, {{ 0xe679047021b19bb7ULL, 0x55dda21bd7cbcd56ULL, 0x5cb561c2db0aa7caULL, 0x9ab5176b12d69958ULL, 0x61d55e0f16b50131ULL, 0xf3feea720a232b98ULL, 0x4fe39d460f70b5d7ULL, 0x6fa3b58aa99d2f1aULL}}, {{ 0x991e96f50aba0ab2ULL, 0xc2b6f443867adb31ULL, 0xc1c93a376062db09ULL, 0xd3e20fe490359eb1ULL, 0xf2ea7514b1297b7bULL, 0x06f15e5f529c1f8bULL, 0x0a39fc286a3d8435ULL, 0xf574dcac2bce2fc7ULL}}, {{ 0x220cbebc84e3d12eULL, 0x3453eaa193e837f1ULL, 0xd8b71333935203beULL, 0xa9d72c82ed03d675ULL, 0x9d721cad685e353fULL, 0x488e857e335c3c7dULL, 0xf948e1a05d71e4ddULL, 0xef1fdfb3e81566d2ULL}}, {{ 0x601758fd7c6cfe57ULL, 0x7a56a27ea9ea63f5ULL, 0xdfff00b723271a16ULL, 0xbfcd1747253af5a3ULL, 0x359e35d7800fffbdULL, 0x7f151c1f1686104aULL, 0x9a3f410c6ca92363ULL, 0x4bea6bacad474799ULL}}, {{ 0xfa68407a46647d6eULL, 0xbf71c57236904f35ULL, 0x0af21f66c2bec6b6ULL, 0xcffaa6b71c9ab7b4ULL, 0x187f9ab49af08ec6ULL, 0x2d66c4f95142a46cULL, 0x6fa4c33b7a3039c0ULL, 0xae4faeae1d3ad3d9ULL}}, {{ 0x8886564d3a14d493ULL, 0x3517454ca23c4af3ULL, 0x06476983284a0504ULL, 0x0992abc52d822c37ULL, 0xd3473e33197a93c9ULL, 0x399ec6c7e6bf87c9ULL, 0x51ac86febf240954ULL, 0xf4c70e16eeaac5ecULL}}, {{ 0xa47f0dd4bf02e71eULL, 0x36acc2355951a8d9ULL, 0x69d18d2bd1a5c42fULL, 0xf4892bcb929b0690ULL, 0x89b4443b4ddbc49aULL, 0x4eb7f8719c36de1eULL, 0x03e7aa020c6e4141ULL, 0x9b1f5b424d93c9a7ULL}}, {{ 0x7261445183235adbULL, 0x0e38dc92cb1f2a60ULL, 0x7b2b8a9aa6079c54ULL, 0x800a440bdbb2ceb1ULL, 0x3cd955b7e00d0984ULL, 0x3a7d3a1b25894224ULL, 0x944c9ad8ec165fdeULL, 0x378f5a541631229bULL}}, {{ 0x74b4c7fb98459cedULL, 0x3698fad1153bb6c3ULL, 0x7a1e6c303b7652f4ULL, 0x9fe76702af69334bULL, 0x1fffe18a1b336103ULL, 0x8941e71cff8a78dbULL, 0x382ae548b2e4f3f3ULL, 0xabbedea680056f52ULL}}, {{ 0x6bcaa4cd81f32d1bULL, 0xdea2594ac06fd85dULL, 0xefbacd1d7d476e98ULL, 0x8a1d71efea48b9caULL, 0x2001802114846679ULL, 0xd8fa6bbbebab0761ULL, 0x3002c6cd635afe94ULL, 0x7bcd9ed0efc889fbULL}}, {{ 0x48bc924af11bd720ULL, 0xfaf417d5d9b21b99ULL, 0xe71da4aa88e12852ULL, 0x5d80ef9d1891cc86ULL, 0xf82012d430219f9bULL, 0xcda43c32bcdf1d77ULL, 0xd21380b00449b17aULL, 0x378ee767f11631baULL}} }; #else ALIGN(16) static const union uint512_u C[12] = { {{ 0x0745a6f2596580ddULL, 0x234d74cc36747605ULL, 0x15d360a4082a42a2ULL, 0x0169679291e07c4bULL, 0xfcc485758db84e71ULL, 0x16d0452e43766a2fULL, 0x1f7c65c0812fcbebULL, 0xe9daca1eda5b08b1ULL}}, {{ 0xb79bb121700479e6ULL, 0x56cdcbd71ba2dd55ULL, 0xcaa70adbc261b55cULL, 0x5899d6126b17b59aULL, 0x3101b5160f5ed561ULL, 0x982b230a72eafef3ULL, 0xd7b5700f469de34fULL, 0x1a2f9da98ab5a36fULL}}, {{ 0xb20aba0af5961e99ULL, 0x31db7a8643f4b6c2ULL, 0x09db6260373ac9c1ULL, 0xb19e3590e40fe2d3ULL, 0x7b7b29b11475eaf2ULL, 0x8b1f9c525f5ef106ULL, 0x35843d6a28fc390aULL, 0xc72fce2bacdc74f5ULL}}, {{ 0x2ed1e384bcbe0c22ULL, 0xf137e893a1ea5334ULL, 0xbe0352933313b7d8ULL, 0x75d603ed822cd7a9ULL, 0x3f355e68ad1c729dULL, 0x7d3c5c337e858e48ULL, 0xdde4715da0e148f9ULL, 0xd26615e8b3df1fefULL}}, {{ 0x57fe6c7cfd581760ULL, 0xf563eaa97ea2567aULL, 0x161a2723b700ffdfULL, 0xa3f53a254717cdbfULL, 0xbdff0f80d7359e35ULL, 0x4a1086161f1c157fULL, 0x6323a96c0c413f9aULL, 0x994747adac6bea4bULL}}, {{ 0x6e7d64467a4068faULL, 0x354f903672c571bfULL, 0xb6c6bec2661ff20aULL, 0xb4b79a1cb7a6facfULL, 0xc68ef09ab49a7f18ULL, 0x6ca44251f9c4662dULL, 0xc039307a3bc3a46fULL, 0xd9d33a1daeae4faeULL}}, {{ 0x93d4143a4d568688ULL, 0xf34a3ca24c451735ULL, 0x04054a2883694706ULL, 0x372c822dc5ab9209ULL, 0xc9937a19333e47d3ULL, 0xc987bfe6c7c69e39ULL, 0x540924bffe86ac51ULL, 0xecc5aaee160ec7f4ULL}}, {{ 0x1ee702bfd40d7fa4ULL, 0xd9a8515935c2ac36ULL, 0x2fc4a5d12b8dd169ULL, 0x90069b92cb2b89f4ULL, 0x9ac4db4d3b44b489ULL, 0x1ede369c71f8b74eULL, 0x41416e0c02aae703ULL, 0xa7c9934d425b1f9bULL}}, {{ 0xdb5a238351446172ULL, 0x602a1fcb92dc380eULL, 0x549c07a69a8a2b7bULL, 0xb1ceb2db0b440a80ULL, 0x84090de0b755d93cULL, 0x244289251b3a7d3aULL, 0xde5f16ecd89a4c94ULL, 0x9b223116545a8f37ULL}}, {{ 0xed9c4598fbc7b474ULL, 0xc3b63b15d1fa9836ULL, 0xf452763b306c1e7aULL, 0x4b3369af0267e79fULL, 0x0361331b8ae1ff1fULL, 0xdb788aff1ce74189ULL, 0xf3f3e4b248e52a38ULL, 0x526f0580a6debeabULL}}, {{ 0x1b2df381cda4ca6bULL, 0x5dd86fc04a59a2deULL, 0x986e477d1dcdbaefULL, 0xcab948eaef711d8aULL, 0x7966841421800120ULL, 0x6107abebbb6bfad8ULL, 0x94fe5a63cdc60230ULL, 0xfb89c8efd09ecd7bULL}}, {{ 0x20d71bf14a92bc48ULL, 0x991bb2d9d517f4faULL, 0x5228e188aaa41de7ULL, 0x86cc91189def805dULL, 0x9b9f2130d41220f8ULL, 0x771ddfbc323ca4cdULL, 0x7ab14904b08013d2ULL, 0xba3116f167e78e37ULL}} }; #endif libengine-gost-openssl-3.0.2/gosthash2012_precalc.h000066400000000000000000003063151446070765000221130ustar00rootroot00000000000000/* * Precalculation of matrix A multiplication. * * Copyright (c) 2013 Cryptocom LTD. * This file is distributed under the same license as OpenSSL. * * Author: Alexey Degtyarev * */ #ifndef __GOST3411_BIG_ENDIAN__ ALIGN(16) static const unsigned long long Ax[8][256] = { { 0xd01f715b5c7ef8e6ULL, 0x16fa240980778325ULL, 0xa8a42e857ee049c8ULL, 0x6ac1068fa186465bULL, 0x6e417bd7a2e9320bULL, 0x665c8167a437daabULL, 0x7666681aa89617f6ULL, 0x4b959163700bdcf5ULL, 0xf14be6b78df36248ULL, 0xc585bd689a625cffULL, 0x9557d7fca67d82cbULL, 0x89f0b969af6dd366ULL, 0xb0833d48749f6c35ULL, 0xa1998c23b1ecbc7cULL, 0x8d70c431ac02a736ULL, 0xd6dfbc2fd0a8b69eULL, 0x37aeb3e551fa198bULL, 0x0b7d128a40b5cf9cULL, 0x5a8f2008b5780cbcULL, 0xedec882284e333e5ULL, 0xd25fc177d3c7c2ceULL, 0x5e0f5d50b61778ecULL, 0x1d873683c0c24cb9ULL, 0xad040bcbb45d208cULL, 0x2f89a0285b853c76ULL, 0x5732fff6791b8d58ULL, 0x3e9311439ef6ec3fULL, 0xc9183a809fd3c00fULL, 0x83adf3f5260a01eeULL, 0xa6791941f4e8ef10ULL, 0x103ae97d0ca1cd5dULL, 0x2ce948121dee1b4aULL, 0x39738421dbf2bf53ULL, 0x093da2a6cf0cf5b4ULL, 0xcd9847d89cbcb45fULL, 0xf9561c078b2d8ae8ULL, 0x9c6a755a6971777fULL, 0xbc1ebaa0712ef0c5ULL, 0x72e61542abf963a6ULL, 0x78bb5fde229eb12eULL, 0x14ba94250fceb90dULL, 0x844d6697630e5282ULL, 0x98ea08026a1e032fULL, 0xf06bbea144217f5cULL, 0xdb6263d11ccb377aULL, 0x641c314b2b8ee083ULL, 0x320e96ab9b4770cfULL, 0x1ee7deb986a96b85ULL, 0xe96cf57a878c47b5ULL, 0xfdd6615f8842feb8ULL, 0xc83862965601dd1bULL, 0x2ea9f83e92572162ULL, 0xf876441142ff97fcULL, 0xeb2c455608357d9dULL, 0x5612a7e0b0c9904cULL, 0x6c01cbfb2d500823ULL, 0x4548a6a7fa037a2dULL, 0xabc4c6bf388b6ef4ULL, 0xbade77d4fdf8bebdULL, 0x799b07c8eb4cac3aULL, 0x0c9d87e805b19cf0ULL, 0xcb588aac106afa27ULL, 0xea0c1d40c1e76089ULL, 0x2869354a1e816f1aULL, 0xff96d17307fbc490ULL, 0x9f0a9d602f1a5043ULL, 0x96373fc6e016a5f7ULL, 0x5292dab8b3a6e41cULL, 0x9b8ae0382c752413ULL, 0x4f15ec3b7364a8a5ULL, 0x3fb349555724f12bULL, 0xc7c50d4415db66d7ULL, 0x92b7429ee379d1a7ULL, 0xd37f99611a15dfdaULL, 0x231427c05e34a086ULL, 0xa439a96d7b51d538ULL, 0xb403401077f01865ULL, 0xdda2aea5901d7902ULL, 0x0a5d4a9c8967d288ULL, 0xc265280adf660f93ULL, 0x8bb0094520d4e94eULL, 0x2a29856691385532ULL, 0x42a833c5bf072941ULL, 0x73c64d54622b7eb2ULL, 0x07e095624504536cULL, 0x8a905153e906f45aULL, 0x6f6123c16b3b2f1fULL, 0xc6e55552dc097bc3ULL, 0x4468feb133d16739ULL, 0xe211e7f0c7398829ULL, 0xa2f96419f7879b40ULL, 0x19074bdbc3ad38e9ULL, 0xf4ebc3f9474e0b0cULL, 0x43886bd376d53455ULL, 0xd8028beb5aa01046ULL, 0x51f23282f5cdc320ULL, 0xe7b1c2be0d84e16dULL, 0x081dfab006dee8a0ULL, 0x3b33340d544b857bULL, 0x7f5bcabc679ae242ULL, 0x0edd37c48a08a6d8ULL, 0x81ed43d9a9b33bc6ULL, 0xb1a3655ebd4d7121ULL, 0x69a1eeb5e7ed6167ULL, 0xf6ab73d5c8f73124ULL, 0x1a67a3e185c61fd5ULL, 0x2dc91004d43c065eULL, 0x0240b02c8fb93a28ULL, 0x90f7f2b26cc0eb8fULL, 0x3cd3a16f114fd617ULL, 0xaae49ea9f15973e0ULL, 0x06c0cd748cd64e78ULL, 0xda423bc7d5192a6eULL, 0xc345701c16b41287ULL, 0x6d2193ede4821537ULL, 0xfcf639494190e3acULL, 0x7c3b228621f1c57eULL, 0xfb16ac2b0494b0c0ULL, 0xbf7e529a3745d7f9ULL, 0x6881b6a32e3f7c73ULL, 0xca78d2bad9b8e733ULL, 0xbbfe2fc2342aa3a9ULL, 0x0dbddffecc6381e4ULL, 0x70a6a56e2440598eULL, 0xe4d12a844befc651ULL, 0x8c509c2765d0ba22ULL, 0xee8c6018c28814d9ULL, 0x17da7c1f49a59e31ULL, 0x609c4c1328e194d3ULL, 0xb3e3d57232f44b09ULL, 0x91d7aaa4a512f69bULL, 0x0ffd6fd243dabbccULL, 0x50d26a943c1fde34ULL, 0x6be15e9968545b4fULL, 0x94778fea6faf9fdfULL, 0x2b09dd7058ea4826ULL, 0x677cd9716de5c7bfULL, 0x49d5214fffb2e6ddULL, 0x0360e83a466b273cULL, 0x1fc786af4f7b7691ULL, 0xa0b9d435783ea168ULL, 0xd49f0c035f118cb6ULL, 0x01205816c9d21d14ULL, 0xac2453dd7d8f3d98ULL, 0x545217cc3f70aa64ULL, 0x26b4028e9489c9c2ULL, 0xdec2469fd6765e3eULL, 0x04807d58036f7450ULL, 0xe5f17292823ddb45ULL, 0xf30b569b024a5860ULL, 0x62dcfc3fa758aefbULL, 0xe84cad6c4e5e5aa1ULL, 0xccb81fce556ea94bULL, 0x53b282ae7a74f908ULL, 0x1b47fbf74c1402c1ULL, 0x368eebf39828049fULL, 0x7afbeff2ad278b06ULL, 0xbe5e0a8cfe97caedULL, 0xcfd8f7f413058e77ULL, 0xf78b2bc301252c30ULL, 0x4d555c17fcdd928dULL, 0x5f2f05467fc565f8ULL, 0x24f4b2a21b30f3eaULL, 0x860dd6bbecb768aaULL, 0x4c750401350f8f99ULL, 0x0000000000000000ULL, 0xecccd0344d312ef1ULL, 0xb5231806be220571ULL, 0xc105c030990d28afULL, 0x653c695de25cfd97ULL, 0x159acc33c61ca419ULL, 0xb89ec7f872418495ULL, 0xa9847693b73254dcULL, 0x58cf90243ac13694ULL, 0x59efc832f3132b80ULL, 0x5c4fed7c39ae42c4ULL, 0x828dabe3efd81cfaULL, 0xd13f294d95ace5f2ULL, 0x7d1b7a90e823d86aULL, 0xb643f03cf849224dULL, 0x3df3f979d89dcb03ULL, 0x7426d836272f2ddeULL, 0xdfe21e891fa4432aULL, 0x3a136c1b9d99986fULL, 0xfa36f43dcd46add4ULL, 0xc025982650df35bbULL, 0x856d3e81aadc4f96ULL, 0xc4a5e57e53b041ebULL, 0x4708168b75ba4005ULL, 0xaf44bbe73be41aa4ULL, 0x971767d029c4b8e3ULL, 0xb9be9feebb939981ULL, 0x215497ecd18d9aaeULL, 0x316e7e91dd2c57f3ULL, 0xcef8afe2dad79363ULL, 0x3853dc371220a247ULL, 0x35ee03c9de4323a3ULL, 0xe6919aa8c456fc79ULL, 0xe05157dc4880b201ULL, 0x7bdbb7e464f59612ULL, 0x127a59518318f775ULL, 0x332ecebd52956ddbULL, 0x8f30741d23bb9d1eULL, 0xd922d3fd93720d52ULL, 0x7746300c61440ae2ULL, 0x25d4eab4d2e2eefeULL, 0x75068020eefd30caULL, 0x135a01474acaea61ULL, 0x304e268714fe4ae7ULL, 0xa519f17bb283c82cULL, 0xdc82f6b359cf6416ULL, 0x5baf781e7caa11a8ULL, 0xb2c38d64fb26561dULL, 0x34ce5bdf17913eb7ULL, 0x5d6fb56af07c5fd0ULL, 0x182713cd0a7f25fdULL, 0x9e2ac576e6c84d57ULL, 0x9aaab82ee5a73907ULL, 0xa3d93c0f3e558654ULL, 0x7e7b92aaae48ff56ULL, 0x872d8ead256575beULL, 0x41c8dbfff96c0e7dULL, 0x99ca5014a3cc1e3bULL, 0x40e883e930be1369ULL, 0x1ca76e95091051adULL, 0x4e35b42dbab6b5b1ULL, 0x05a0254ecabd6944ULL, 0xe1710fca8152af15ULL, 0xf22b0e8dcb984574ULL, 0xb763a82a319b3f59ULL, 0x63fca4296e8ab3efULL, 0x9d4a2d4ca0a36a6bULL, 0xe331bfe60eeb953dULL, 0xd5bf541596c391a2ULL, 0xf5cb9bef8e9c1618ULL, 0x46284e9dbc685d11ULL, 0x2074cffa185f87baULL, 0xbd3ee2b6b8fcedd1ULL, 0xae64e3f1f23607b0ULL, 0xfeb68965ce29d984ULL, 0x55724fdaf6a2b770ULL, 0x29496d5cd753720eULL, 0xa75941573d3af204ULL, 0x8e102c0bea69800aULL, 0x111ab16bc573d049ULL, 0xd7ffe439197aab8aULL, 0xefac380e0b5a09cdULL, 0x48f579593660fbc9ULL, 0x22347fd697e6bd92ULL, 0x61bc1405e13389c7ULL, 0x4ab5c975b9d9c1e1ULL, 0x80cd1bcf606126d2ULL, 0x7186fd78ed92449aULL, 0x93971a882aabccb3ULL, 0x88d0e17f66bfce72ULL, 0x27945a985d5bd4d6ULL}, { 0xde553f8c05a811c8ULL, 0x1906b59631b4f565ULL, 0x436e70d6b1964ff7ULL, 0x36d343cb8b1e9d85ULL, 0x843dfacc858aab5aULL, 0xfdfc95c299bfc7f9ULL, 0x0f634bdea1d51fa2ULL, 0x6d458b3b76efb3cdULL, 0x85c3f77cf8593f80ULL, 0x3c91315fbe737cb2ULL, 0x2148b03366ace398ULL, 0x18f8b8264c6761bfULL, 0xc830c1c495c9fb0fULL, 0x981a76102086a0aaULL, 0xaa16012142f35760ULL, 0x35cc54060c763cf6ULL, 0x42907d66cc45db2dULL, 0x8203d44b965af4bcULL, 0x3d6f3cefc3a0e868ULL, 0xbc73ff69d292bda7ULL, 0x8722ed0102e20a29ULL, 0x8f8185e8cd34deb7ULL, 0x9b0561dda7ee01d9ULL, 0x5335a0193227fad6ULL, 0xc9cecc74e81a6fd5ULL, 0x54f5832e5c2431eaULL, 0x99e47ba05d553470ULL, 0xf7bee756acd226ceULL, 0x384e05a5571816fdULL, 0xd1367452a47d0e6aULL, 0xf29fde1c386ad85bULL, 0x320c77316275f7caULL, 0xd0c879e2d9ae9ab0ULL, 0xdb7406c69110ef5dULL, 0x45505e51a2461011ULL, 0xfc029872e46c5323ULL, 0xfa3cb6f5f7bc0cc5ULL, 0x031f17cd8768a173ULL, 0xbd8df2d9af41297dULL, 0x9d3b4f5ab43e5e3fULL, 0x4071671b36feee84ULL, 0x716207e7d3e3b83dULL, 0x48d20ff2f9283a1aULL, 0x27769eb4757cbc7eULL, 0x5c56ebc793f2e574ULL, 0xa48b474f9ef5dc18ULL, 0x52cbada94ff46e0cULL, 0x60c7da982d8199c6ULL, 0x0e9d466edc068b78ULL, 0x4eec2175eaf865fcULL, 0x550b8e9e21f7a530ULL, 0x6b7ba5bc653fec2bULL, 0x5eb7f1ba6949d0ddULL, 0x57ea94e3db4c9099ULL, 0xf640eae6d101b214ULL, 0xdd4a284182c0b0bbULL, 0xff1d8fbf6304f250ULL, 0xb8accb933bf9d7e8ULL, 0xe8867c478eb68c4dULL, 0x3f8e2692391bddc1ULL, 0xcb2fd60912a15a7cULL, 0xaec935dbab983d2fULL, 0xf55ffd2b56691367ULL, 0x80e2ce366ce1c115ULL, 0x179bf3f8edb27e1dULL, 0x01fe0db07dd394daULL, 0xda8a0b76ecc37b87ULL, 0x44ae53e1df9584cbULL, 0xb310b4b77347a205ULL, 0xdfab323c787b8512ULL, 0x3b511268d070b78eULL, 0x65e6e3d2b9396753ULL, 0x6864b271e2574d58ULL, 0x259784c98fc789d7ULL, 0x02e11a7dfabb35a9ULL, 0x8841a6dfa337158bULL, 0x7ade78c39b5dcdd0ULL, 0xb7cf804d9a2cc84aULL, 0x20b6bd831b7f7742ULL, 0x75bd331d3a88d272ULL, 0x418f6aab4b2d7a5eULL, 0xd9951cbb6babdaf4ULL, 0xb6318dfde7ff5c90ULL, 0x1f389b112264aa83ULL, 0x492c024284fbaec0ULL, 0xe33a0363c608f9a0ULL, 0x2688930408af28a4ULL, 0xc7538a1a341ce4adULL, 0x5da8e677ee2171aeULL, 0x8c9e92254a5c7fc4ULL, 0x63d8cd55aae938b5ULL, 0x29ebd8daa97a3706ULL, 0x959827b37be88aa1ULL, 0x1484e4356adadf6eULL, 0xa7945082199d7d6bULL, 0xbf6ce8a455fa1cd4ULL, 0x9cc542eac9edcae5ULL, 0x79c16f0e1c356ca3ULL, 0x89bfab6fdee48151ULL, 0xd4174d1830c5f0ffULL, 0x9258048415eb419dULL, 0x6139d72850520d1cULL, 0x6a85a80c18ec78f1ULL, 0xcd11f88e0171059aULL, 0xcceff53e7ca29140ULL, 0xd229639f2315af19ULL, 0x90b91ef9ef507434ULL, 0x5977d28d074a1be1ULL, 0x311360fce51d56b9ULL, 0xc093a92d5a1f2f91ULL, 0x1a19a25bb6dc5416ULL, 0xeb996b8a09de2d3eULL, 0xfee3820f1ed7668aULL, 0xd7085ad5b7ad518cULL, 0x7fff41890fe53345ULL, 0xec5948bd67dde602ULL, 0x2fd5f65dbaaa68e0ULL, 0xa5754affe32648c2ULL, 0xf8ddac880d07396cULL, 0x6fa491468c548664ULL, 0x0c7c5c1326bdbed1ULL, 0x4a33158f03930fb3ULL, 0x699abfc19f84d982ULL, 0xe4fa2054a80b329cULL, 0x6707f9af438252faULL, 0x08a368e9cfd6d49eULL, 0x47b1442c58fd25b8ULL, 0xbbb3dc5ebc91769bULL, 0x1665fe489061eac7ULL, 0x33f27a811fa66310ULL, 0x93a609346838d547ULL, 0x30ed6d4c98cec263ULL, 0x1dd9816cd8df9f2aULL, 0x94662a03063b1e7bULL, 0x83fdd9fbeb896066ULL, 0x7b207573e68e590aULL, 0x5f49fc0a149a4407ULL, 0x343259b671a5a82cULL, 0xfbc2bb458a6f981fULL, 0xc272b350a0a41a38ULL, 0x3aaf1fd8ada32354ULL, 0x6cbb868b0b3c2717ULL, 0xa2b569c88d2583feULL, 0xf180c9d1bf027928ULL, 0xaf37386bd64ba9f5ULL, 0x12bacab2790a8088ULL, 0x4c0d3b0810435055ULL, 0xb2eeb9070e9436dfULL, 0xc5b29067cea7d104ULL, 0xdcb425f1ff132461ULL, 0x4f122cc5972bf126ULL, 0xac282fa651230886ULL, 0xe7e537992f6393efULL, 0xe61b3a2952b00735ULL, 0x709c0a57ae302ce7ULL, 0xe02514ae416058d3ULL, 0xc44c9dd7b37445deULL, 0x5a68c5408022ba92ULL, 0x1c278cdca50c0bf0ULL, 0x6e5a9cf6f18712beULL, 0x86dce0b17f319ef3ULL, 0x2d34ec2040115d49ULL, 0x4bcd183f7e409b69ULL, 0x2815d56ad4a9a3dcULL, 0x24698979f2141d0dULL, 0x0000000000000000ULL, 0x1ec696a15fb73e59ULL, 0xd86b110b16784e2eULL, 0x8e7f8858b0e74a6dULL, 0x063e2e8713d05fe6ULL, 0xe2c40ed3bbdb6d7aULL, 0xb1f1aeca89fc97acULL, 0xe1db191e3cb3cc09ULL, 0x6418ee62c4eaf389ULL, 0xc6ad87aa49cf7077ULL, 0xd6f65765ca7ec556ULL, 0x9afb6c6dda3d9503ULL, 0x7ce05644888d9236ULL, 0x8d609f95378feb1eULL, 0x23a9aa4e9c17d631ULL, 0x6226c0e5d73aac6fULL, 0x56149953a69f0443ULL, 0xeeb852c09d66d3abULL, 0x2b0ac2a753c102afULL, 0x07c023376e03cb3cULL, 0x2ccae1903dc2c993ULL, 0xd3d76e2f5ec63bc3ULL, 0x9e2458973356ff4cULL, 0xa66a5d32644ee9b1ULL, 0x0a427294356de137ULL, 0x783f62be61e6f879ULL, 0x1344c70204d91452ULL, 0x5b96c8f0fdf12e48ULL, 0xa90916ecc59bf613ULL, 0xbe92e5142829880eULL, 0x727d102a548b194eULL, 0x1be7afebcb0fc0ccULL, 0x3e702b2244c8491bULL, 0xd5e940a84d166425ULL, 0x66f9f41f3e51c620ULL, 0xabe80c913f20c3baULL, 0xf07ec461c2d1edf2ULL, 0xf361d3ac45b94c81ULL, 0x0521394a94b8fe95ULL, 0xadd622162cf09c5cULL, 0xe97871f7f3651897ULL, 0xf4a1f09b2bba87bdULL, 0x095d6559b2054044ULL, 0x0bbc7f2448be75edULL, 0x2af4cf172e129675ULL, 0x157ae98517094bb4ULL, 0x9fda55274e856b96ULL, 0x914713499283e0eeULL, 0xb952c623462a4332ULL, 0x74433ead475b46a8ULL, 0x8b5eb112245fb4f8ULL, 0xa34b6478f0f61724ULL, 0x11a5dd7ffe6221fbULL, 0xc16da49d27ccbb4bULL, 0x76a224d0bde07301ULL, 0x8aa0bca2598c2022ULL, 0x4df336b86d90c48fULL, 0xea67663a740db9e4ULL, 0xef465f70e0b54771ULL, 0x39b008152acb8227ULL, 0x7d1e5bf4f55e06ecULL, 0x105bd0cf83b1b521ULL, 0x775c2960c033e7dbULL, 0x7e014c397236a79fULL, 0x811cc386113255cfULL, 0xeda7450d1a0e72d8ULL, 0x5889df3d7a998f3bULL, 0x2e2bfbedc779fc3aULL, 0xce0eef438619a4e9ULL, 0x372d4e7bf6cd095fULL, 0x04df34fae96b6a4fULL, 0xf923a13870d4adb6ULL, 0xa1aa7e050a4d228dULL, 0xa8f71b5cb84862c9ULL, 0xb52e9a306097fde3ULL, 0x0d8251a35b6e2a0bULL, 0x2257a7fee1c442ebULL, 0x73831d9a29588d94ULL, 0x51d4ba64c89ccf7fULL, 0x502ab7d4b54f5ba5ULL, 0x97793dce8153bf08ULL, 0xe5042de4d5d8a646ULL, 0x9687307efc802bd2ULL, 0xa05473b5779eb657ULL, 0xb4d097801d446939ULL, 0xcff0e2f3fbca3033ULL, 0xc38cbee0dd778ee2ULL, 0x464f499c252eb162ULL, 0xcad1dbb96f72cea6ULL, 0xba4dd1eec142e241ULL, 0xb00fa37af42f0376ULL}, { 0xcce4cd3aa968b245ULL, 0x089d5484e80b7fafULL, 0x638246c1b3548304ULL, 0xd2fe0ec8c2355492ULL, 0xa7fbdf7ff2374eeeULL, 0x4df1600c92337a16ULL, 0x84e503ea523b12fbULL, 0x0790bbfd53ab0c4aULL, 0x198a780f38f6ea9dULL, 0x2ab30c8f55ec48cbULL, 0xe0f7fed6b2c49db5ULL, 0xb6ecf3f422cadbdcULL, 0x409c9a541358df11ULL, 0xd3ce8a56dfde3fe3ULL, 0xc3e9224312c8c1a0ULL, 0x0d6dfa58816ba507ULL, 0xddf3e1b179952777ULL, 0x04c02a42748bb1d9ULL, 0x94c2abff9f2decb8ULL, 0x4f91752da8f8acf4ULL, 0x78682befb169bf7bULL, 0xe1c77a48af2ff6c4ULL, 0x0c5d7ec69c80ce76ULL, 0x4cc1e4928fd81167ULL, 0xfeed3d24d9997b62ULL, 0x518bb6dfc3a54a23ULL, 0x6dbf2d26151f9b90ULL, 0xb5bc624b05ea664fULL, 0xe86aaa525acfe21aULL, 0x4801ced0fb53a0beULL, 0xc91463e6c00868edULL, 0x1027a815cd16fe43ULL, 0xf67069a0319204cdULL, 0xb04ccc976c8abce7ULL, 0xc0b9b3fc35e87c33ULL, 0xf380c77c58f2de65ULL, 0x50bb3241de4e2152ULL, 0xdf93f490435ef195ULL, 0xf1e0d25d62390887ULL, 0xaf668bfb1a3c3141ULL, 0xbc11b251f00a7291ULL, 0x73a5eed47e427d47ULL, 0x25bee3f6ee4c3b2eULL, 0x43cc0beb34786282ULL, 0xc824e778dde3039cULL, 0xf97d86d98a327728ULL, 0xf2b043e24519b514ULL, 0xe297ebf7880f4b57ULL, 0x3a94a49a98fab688ULL, 0x868516cb68f0c419ULL, 0xeffa11af0964ee50ULL, 0xa4ab4ec0d517f37dULL, 0xa9c6b498547c567aULL, 0x8e18424f80fbbbb6ULL, 0x0bcdc53bcf2bc23cULL, 0x137739aaea3643d0ULL, 0x2c1333ec1bac2ff0ULL, 0x8d48d3f0a7db0625ULL, 0x1e1ac3f26b5de6d7ULL, 0xf520f81f16b2b95eULL, 0x9f0f6ec450062e84ULL, 0x0130849e1deb6b71ULL, 0xd45e31ab8c7533a9ULL, 0x652279a2fd14e43fULL, 0x3209f01e70f1c927ULL, 0xbe71a770cac1a473ULL, 0x0e3d6be7a64b1894ULL, 0x7ec8148cff29d840ULL, 0xcb7476c7fac3be0fULL, 0x72956a4a63a91636ULL, 0x37f95ec21991138fULL, 0x9e3fea5a4ded45f5ULL, 0x7b38ba50964902e8ULL, 0x222e580bbde73764ULL, 0x61e253e0899f55e6ULL, 0xfc8d2805e352ad80ULL, 0x35994be3235ac56dULL, 0x09add01af5e014deULL, 0x5e8659a6780539c6ULL, 0xb17c48097161d796ULL, 0x026015213acbd6e2ULL, 0xd1ae9f77e515e901ULL, 0xb7dc776a3f21b0adULL, 0xaba6a1b96eb78098ULL, 0x9bcf4486248d9f5dULL, 0x582666c536455efdULL, 0xfdbdac9bfeb9c6f1ULL, 0xc47999be4163cdeaULL, 0x765540081722a7efULL, 0x3e548ed8ec710751ULL, 0x3d041f67cb51bac2ULL, 0x7958af71ac82d40aULL, 0x36c9da5c047a78feULL, 0xed9a048e33af38b2ULL, 0x26ee7249c96c86bdULL, 0x900281bdeba65d61ULL, 0x11172c8bd0fd9532ULL, 0xea0abf73600434f8ULL, 0x42fc8f75299309f3ULL, 0x34a9cf7d3eb1ae1cULL, 0x2b838811480723baULL, 0x5ce64c8742ceef24ULL, 0x1adae9b01fd6570eULL, 0x3c349bf9d6bad1b3ULL, 0x82453c891c7b75c0ULL, 0x97923a40b80d512bULL, 0x4a61dbf1c198765cULL, 0xb48ce6d518010d3eULL, 0xcfb45c858e480fd6ULL, 0xd933cbf30d1e96aeULL, 0xd70ea014ab558e3aULL, 0xc189376228031742ULL, 0x9262949cd16d8b83ULL, 0xeb3a3bed7def5f89ULL, 0x49314a4ee6b8cbcfULL, 0xdcc3652f647e4c06ULL, 0xda635a4c2a3e2b3dULL, 0x470c21a940f3d35bULL, 0x315961a157d174b4ULL, 0x6672e81dda3459acULL, 0x5b76f77a1165e36eULL, 0x445cb01667d36ec8ULL, 0xc5491d205c88a69bULL, 0x456c34887a3805b9ULL, 0xffddb9bac4721013ULL, 0x99af51a71e4649bfULL, 0xa15be01cbc7729d5ULL, 0x52db2760e485f7b0ULL, 0x8c78576eba306d54ULL, 0xae560f6507d75a30ULL, 0x95f22f6182c687c9ULL, 0x71c5fbf54489aba5ULL, 0xca44f259e728d57eULL, 0x88b87d2ccebbdc8dULL, 0xbab18d32be4a15aaULL, 0x8be8ec93e99b611eULL, 0x17b713e89ebdf209ULL, 0xb31c5d284baa0174ULL, 0xeeca9531148f8521ULL, 0xb8d198138481c348ULL, 0x8988f9b2d350b7fcULL, 0xb9e11c8d996aa839ULL, 0x5a4673e40c8e881fULL, 0x1687977683569978ULL, 0xbf4123eed72acf02ULL, 0x4ea1f1b3b513c785ULL, 0xe767452be16f91ffULL, 0x7505d1b730021a7cULL, 0xa59bca5ec8fc980cULL, 0xad069eda20f7e7a3ULL, 0x38f4b1bba231606aULL, 0x60d2d77e94743e97ULL, 0x9affc0183966f42cULL, 0x248e6768f3a7505fULL, 0xcdd449a4b483d934ULL, 0x87b59255751baf68ULL, 0x1bea6d2e023d3c7fULL, 0x6b1f12455b5ffcabULL, 0x743555292de9710dULL, 0xd8034f6d10f5fddfULL, 0xc6198c9f7ba81b08ULL, 0xbb8109aca3a17edbULL, 0xfa2d1766ad12cabbULL, 0xc729080166437079ULL, 0x9c5fff7b77269317ULL, 0x0000000000000000ULL, 0x15d706c9a47624ebULL, 0x6fdf38072fd44d72ULL, 0x5fb6dd3865ee52b7ULL, 0xa33bf53d86bcff37ULL, 0xe657c1b5fc84fa8eULL, 0xaa962527735cebe9ULL, 0x39c43525bfda0b1bULL, 0x204e4d2a872ce186ULL, 0x7a083ece8ba26999ULL, 0x554b9c9db72efbfaULL, 0xb22cd9b656416a05ULL, 0x96a2bedea5e63a5aULL, 0x802529a826b0a322ULL, 0x8115ad363b5bc853ULL, 0x8375b81701901eb1ULL, 0x3069e53f4a3a1fc5ULL, 0xbd2136cfede119e0ULL, 0x18bafc91251d81ecULL, 0x1d4a524d4c7d5b44ULL, 0x05f0aedc6960daa8ULL, 0x29e39d3072ccf558ULL, 0x70f57f6b5962c0d4ULL, 0x989fd53903ad22ceULL, 0xf84d024797d91c59ULL, 0x547b1803aac5908bULL, 0xf0d056c37fd263f6ULL, 0xd56eb535919e58d8ULL, 0x1c7ad6d351963035ULL, 0x2e7326cd2167f912ULL, 0xac361a443d1c8cd2ULL, 0x697f076461942a49ULL, 0x4b515f6fdc731d2dULL, 0x8ad8680df4700a6fULL, 0x41ac1eca0eb3b460ULL, 0x7d988533d80965d3ULL, 0xa8f6300649973d0bULL, 0x7765c4960ac9cc9eULL, 0x7ca801adc5e20ea2ULL, 0xdea3700e5eb59ae4ULL, 0xa06b6482a19c42a4ULL, 0x6a2f96db46b497daULL, 0x27def6d7d487edccULL, 0x463ca5375d18b82aULL, 0xa6cb5be1efdc259fULL, 0x53eba3fef96e9cc1ULL, 0xce84d81b93a364a7ULL, 0xf4107c810b59d22fULL, 0x333974806d1aa256ULL, 0x0f0def79bba073e5ULL, 0x231edc95a00c5c15ULL, 0xe437d494c64f2c6cULL, 0x91320523f64d3610ULL, 0x67426c83c7df32ddULL, 0x6eefbc99323f2603ULL, 0x9d6f7be56acdf866ULL, 0x5916e25b2bae358cULL, 0x7ff89012e2c2b331ULL, 0x035091bf2720bd93ULL, 0x561b0d22900e4669ULL, 0x28d319ae6f279e29ULL, 0x2f43a2533c8c9263ULL, 0xd09e1be9f8fe8270ULL, 0xf740ed3e2c796fbcULL, 0xdb53ded237d5404cULL, 0x62b2c25faebfe875ULL, 0x0afd41a5d2c0a94dULL, 0x6412fd3ce0ff8f4eULL, 0xe3a76f6995e42026ULL, 0x6c8fa9b808f4f0e1ULL, 0xc2d9a6dd0f23aad1ULL, 0x8f28c6d19d10d0c7ULL, 0x85d587744fd0798aULL, 0xa20b71a39b579446ULL, 0x684f83fa7c7f4138ULL, 0xe507500adba4471dULL, 0x3f640a46f19a6c20ULL, 0x1247bd34f7dd28a1ULL, 0x2d23b77206474481ULL, 0x93521002cc86e0f2ULL, 0x572b89bc8de52d18ULL, 0xfb1d93f8b0f9a1caULL, 0xe95a2ecc4724896bULL, 0x3ba420048511ddf9ULL, 0xd63e248ab6bee54bULL, 0x5dd6c8195f258455ULL, 0x06a03f634e40673bULL, 0x1f2a476c76b68da6ULL, 0x217ec9b49ac78af7ULL, 0xecaa80102e4453c3ULL, 0x14e78257b99d4f9aULL}, { 0x20329b2cc87bba05ULL, 0x4f5eb6f86546a531ULL, 0xd4f44775f751b6b1ULL, 0x8266a47b850dfa8bULL, 0xbb986aa15a6ca985ULL, 0xc979eb08f9ae0f99ULL, 0x2da6f447a2375ea1ULL, 0x1e74275dcd7d8576ULL, 0xbc20180a800bc5f8ULL, 0xb4a2f701b2dc65beULL, 0xe726946f981b6d66ULL, 0x48e6c453bf21c94cULL, 0x42cad9930f0a4195ULL, 0xefa47b64aacccd20ULL, 0x71180a8960409a42ULL, 0x8bb3329bf6a44e0cULL, 0xd34c35de2d36daccULL, 0xa92f5b7cbc23dc96ULL, 0xb31a85aa68bb09c3ULL, 0x13e04836a73161d2ULL, 0xb24dfc4129c51d02ULL, 0x8ae44b70b7da5acdULL, 0xe671ed84d96579a7ULL, 0xa4bb3417d66f3832ULL, 0x4572ab38d56d2de8ULL, 0xb1b47761ea47215cULL, 0xe81c09cf70aba15dULL, 0xffbdb872ce7f90acULL, 0xa8782297fd5dc857ULL, 0x0d946f6b6a4ce4a4ULL, 0xe4df1f4f5b995138ULL, 0x9ebc71edca8c5762ULL, 0x0a2c1dc0b02b88d9ULL, 0x3b503c115d9d7b91ULL, 0xc64376a8111ec3a2ULL, 0xcec199a323c963e4ULL, 0xdc76a87ec58616f7ULL, 0x09d596e073a9b487ULL, 0x14583a9d7d560dafULL, 0xf4c6dc593f2a0cb4ULL, 0xdd21d19584f80236ULL, 0x4a4836983ddde1d3ULL, 0xe58866a41ae745f9ULL, 0xf591a5b27e541875ULL, 0x891dc05074586693ULL, 0x5b068c651810a89eULL, 0xa30346bc0c08544fULL, 0x3dbf3751c684032dULL, 0x2a1e86ec785032dcULL, 0xf73f5779fca830eaULL, 0xb60c05ca30204d21ULL, 0x0cc316802b32f065ULL, 0x8770241bdd96be69ULL, 0xb861e18199ee95dbULL, 0xf805cad91418fcd1ULL, 0x29e70dccbbd20e82ULL, 0xc7140f435060d763ULL, 0x0f3a9da0e8b0cc3bULL, 0xa2543f574d76408eULL, 0xbd7761e1c175d139ULL, 0x4b1f4f737ca3f512ULL, 0x6dc2df1f2fc137abULL, 0xf1d05c3967b14856ULL, 0xa742bf3715ed046cULL, 0x654030141d1697edULL, 0x07b872abda676c7dULL, 0x3ce84eba87fa17ecULL, 0xc1fb0403cb79afdfULL, 0x3e46bc7105063f73ULL, 0x278ae987121cd678ULL, 0xa1adb4778ef47cd0ULL, 0x26dd906c5362c2b9ULL, 0x05168060589b44e2ULL, 0xfbfc41f9d79ac08fULL, 0x0e6de44ba9ced8faULL, 0x9feb08068bf243a3ULL, 0x7b341749d06b129bULL, 0x229c69e74a87929aULL, 0xe09ee6c4427c011bULL, 0x5692e30e725c4c3aULL, 0xda99a33e5e9f6e4bULL, 0x353dd85af453a36bULL, 0x25241b4c90e0fee7ULL, 0x5de987258309d022ULL, 0xe230140fc0802984ULL, 0x93281e86a0c0b3c6ULL, 0xf229d719a4337408ULL, 0x6f6c2dd4ad3d1f34ULL, 0x8ea5b2fbae3f0aeeULL, 0x8331dd90c473ee4aULL, 0x346aa1b1b52db7aaULL, 0xdf8f235e06042aa9ULL, 0xcc6f6b68a1354b7bULL, 0x6c95a6f46ebf236aULL, 0x52d31a856bb91c19ULL, 0x1a35ded6d498d555ULL, 0xf37eaef2e54d60c9ULL, 0x72e181a9a3c2a61cULL, 0x98537aad51952fdeULL, 0x16f6c856ffaa2530ULL, 0xd960281e9d1d5215ULL, 0x3a0745fa1ce36f50ULL, 0x0b7b642bf1559c18ULL, 0x59a87eae9aec8001ULL, 0x5e100c05408bec7cULL, 0x0441f98b19e55023ULL, 0xd70dcc5534d38aefULL, 0x927f676de1bea707ULL, 0x9769e70db925e3e5ULL, 0x7a636ea29115065aULL, 0x468b201816ef11b6ULL, 0xab81a9b73edff409ULL, 0xc0ac7de88a07bb1eULL, 0x1f235eb68c0391b7ULL, 0x6056b074458dd30fULL, 0xbe8eeac102f7ed67ULL, 0xcd381283e04b5fbaULL, 0x5cbefecec277c4e3ULL, 0xd21b4c356c48ce0dULL, 0x1019c31664b35d8cULL, 0x247362a7d19eea26ULL, 0xebe582efb3299d03ULL, 0x02aef2cb82fc289fULL, 0x86275df09ce8aaa8ULL, 0x28b07427faac1a43ULL, 0x38a9b7319e1f47cfULL, 0xc82e92e3b8d01b58ULL, 0x06ef0b409b1978bcULL, 0x62f842bfc771fb90ULL, 0x9904034610eb3b1fULL, 0xded85ab5477a3e68ULL, 0x90d195a663428f98ULL, 0x5384636e2ac708d8ULL, 0xcbd719c37b522706ULL, 0xae9729d76644b0ebULL, 0x7c8c65e20a0c7ee6ULL, 0x80c856b007f1d214ULL, 0x8c0b40302cc32271ULL, 0xdbcedad51fe17a8aULL, 0x740e8ae938dbdea0ULL, 0xa615c6dc549310adULL, 0x19cc55f6171ae90bULL, 0x49b1bdb8fe5fdd8dULL, 0xed0a89af2830e5bfULL, 0x6a7aadb4f5a65bd6ULL, 0x7e22972988f05679ULL, 0xf952b3325566e810ULL, 0x39fecedadf61530eULL, 0x6101c99f04f3c7ceULL, 0x2e5f7f6761b562ffULL, 0xf08725d226cf5c97ULL, 0x63af3b54860fef51ULL, 0x8ff2cb10ef411e2fULL, 0x884ab9bb35267252ULL, 0x4df04433e7ba8daeULL, 0x9afd8866d3690741ULL, 0x66b9bb34de94abb3ULL, 0x9baaf18d92171380ULL, 0x543c11c5f0a064a5ULL, 0x17a1b1bdbed431f1ULL, 0xb5f58eeaf3a2717fULL, 0xc355f6c849858740ULL, 0xec5df044694ef17eULL, 0xd83751f5dc6346d4ULL, 0xfc4433520dfdacf2ULL, 0x0000000000000000ULL, 0x5a51f58e596ebc5fULL, 0x3285aaf12e34cf16ULL, 0x8d5c39db6dbd36b0ULL, 0x12b731dde64f7513ULL, 0x94906c2d7aa7dfbbULL, 0x302b583aacc8e789ULL, 0x9d45facd090e6b3cULL, 0x2165e2c78905aec4ULL, 0x68d45f7f775a7349ULL, 0x189b2c1d5664fdcaULL, 0xe1c99f2f030215daULL, 0x6983269436246788ULL, 0x8489af3b1e148237ULL, 0xe94b702431d5b59cULL, 0x33d2d31a6f4adbd7ULL, 0xbfd9932a4389f9a6ULL, 0xb0e30e8aab39359dULL, 0xd1e2c715afcaf253ULL, 0x150f43763c28196eULL, 0xc4ed846393e2eb3dULL, 0x03f98b20c3823c5eULL, 0xfd134ab94c83b833ULL, 0x556b682eb1de7064ULL, 0x36c4537a37d19f35ULL, 0x7559f30279a5ca61ULL, 0x799ae58252973a04ULL, 0x9c12832648707ffdULL, 0x78cd9c6913e92ec5ULL, 0x1d8dac7d0effb928ULL, 0x439da0784e745554ULL, 0x413352b3cc887dcbULL, 0xbacf134a1b12bd44ULL, 0x114ebafd25cd494dULL, 0x2f08068c20cb763eULL, 0x76a07822ba27f63fULL, 0xeab2fb04f25789c2ULL, 0xe3676de481fe3d45ULL, 0x1b62a73d95e6c194ULL, 0x641749ff5c68832cULL, 0xa5ec4dfc97112cf3ULL, 0xf6682e92bdd6242bULL, 0x3f11c59a44782bb2ULL, 0x317c21d1edb6f348ULL, 0xd65ab5be75ad9e2eULL, 0x6b2dd45fb4d84f17ULL, 0xfaab381296e4d44eULL, 0xd0b5befeeeb4e692ULL, 0x0882ef0b32d7a046ULL, 0x512a91a5a83b2047ULL, 0x963e9ee6f85bf724ULL, 0x4e09cf132438b1f0ULL, 0x77f701c9fb59e2feULL, 0x7ddb1c094b726a27ULL, 0x5f4775ee01f5f8bdULL, 0x9186ec4d223c9b59ULL, 0xfeeac1998f01846dULL, 0xac39db1ce4b89874ULL, 0xb75b7c21715e59e0ULL, 0xafc0503c273aa42aULL, 0x6e3b543fec430bf5ULL, 0x704f7362213e8e83ULL, 0x58ff0745db9294c0ULL, 0x67eec2df9feabf72ULL, 0xa0facd9ccf8a6811ULL, 0xb936986ad890811aULL, 0x95c715c63bd9cb7aULL, 0xca8060283a2c33c7ULL, 0x507de84ee9453486ULL, 0x85ded6d05f6a96f6ULL, 0x1cdad5964f81ade9ULL, 0xd5a33e9eb62fa270ULL, 0x40642b588df6690aULL, 0x7f75eec2c98e42b8ULL, 0x2cf18dace3494a60ULL, 0x23cb100c0bf9865bULL, 0xeef3028febb2d9e1ULL, 0x4425d2d394133929ULL, 0xaad6d05c7fa1e0c8ULL, 0xad6ea2f7a5c68cb5ULL, 0xc2028f2308fb9381ULL, 0x819f2f5b468fc6d5ULL, 0xc5bafd88d29cfffcULL, 0x47dc59f357910577ULL, 0x2b49ff07392e261dULL, 0x57c59ae5332258fbULL, 0x73b6f842e2bcb2ddULL, 0xcf96e04862b77725ULL, 0x4ca73dd8a6c4996fULL, 0x015779eb417e14c1ULL, 0x37932a9176af8bf4ULL}, { 0x190a2c9b249df23eULL, 0x2f62f8b62263e1e9ULL, 0x7a7f754740993655ULL, 0x330b7ba4d5564d9fULL, 0x4c17a16a46672582ULL, 0xb22f08eb7d05f5b8ULL, 0x535f47f40bc148ccULL, 0x3aec5d27d4883037ULL, 0x10ed0a1825438f96ULL, 0x516101f72c233d17ULL, 0x13cc6f949fd04eaeULL, 0x739853c441474bfdULL, 0x653793d90d3f5b1bULL, 0x5240647b96b0fc2fULL, 0x0c84890ad27623e0ULL, 0xd7189b32703aaea3ULL, 0x2685de3523bd9c41ULL, 0x99317c5b11bffefaULL, 0x0d9baa854f079703ULL, 0x70b93648fbd48ac5ULL, 0xa80441fce30bc6beULL, 0x7287704bdc36ff1eULL, 0xb65384ed33dc1f13ULL, 0xd36417343ee34408ULL, 0x39cd38ab6e1bf10fULL, 0x5ab861770a1f3564ULL, 0x0ebacf09f594563bULL, 0xd04572b884708530ULL, 0x3cae9722bdb3af47ULL, 0x4a556b6f2f5cbaf2ULL, 0xe1704f1f76c4bd74ULL, 0x5ec4ed7144c6dfcfULL, 0x16afc01d4c7810e6ULL, 0x283f113cd629ca7aULL, 0xaf59a8761741ed2dULL, 0xeed5a3991e215facULL, 0x3bf37ea849f984d4ULL, 0xe413e096a56ce33cULL, 0x2c439d3a98f020d1ULL, 0x637559dc6404c46bULL, 0x9e6c95d1e5f5d569ULL, 0x24bb9836045fe99aULL, 0x44efa466dac8ecc9ULL, 0xc6eab2a5c80895d6ULL, 0x803b50c035220cc4ULL, 0x0321658cba93c138ULL, 0x8f9ebc465dc7ee1cULL, 0xd15a5137190131d3ULL, 0x0fa5ec8668e5e2d8ULL, 0x91c979578d1037b1ULL, 0x0642ca05693b9f70ULL, 0xefca80168350eb4fULL, 0x38d21b24f36a45ecULL, 0xbeab81e1af73d658ULL, 0x8cbfd9cae7542f24ULL, 0xfd19cc0d81f11102ULL, 0x0ac6430fbb4dbc90ULL, 0x1d76a09d6a441895ULL, 0x2a01573ff1cbbfa1ULL, 0xb572e161894fde2bULL, 0x8124734fa853b827ULL, 0x614b1fdf43e6b1b0ULL, 0x68ac395c4238cc18ULL, 0x21d837bfd7f7b7d2ULL, 0x20c714304a860331ULL, 0x5cfaab726324aa14ULL, 0x74c5ba4eb50d606eULL, 0xf3a3030474654739ULL, 0x23e671bcf015c209ULL, 0x45f087e947b9582aULL, 0xd8bd77b418df4c7bULL, 0xe06f6c90ebb50997ULL, 0x0bd96080263c0873ULL, 0x7e03f9410e40dcfeULL, 0xb8e94be4c6484928ULL, 0xfb5b0608e8ca8e72ULL, 0x1a2b49179e0e3306ULL, 0x4e29e76961855059ULL, 0x4f36c4e6fcf4e4baULL, 0x49740ee395cf7bcaULL, 0xc2963ea386d17f7dULL, 0x90d65ad810618352ULL, 0x12d34c1b02a1fa4dULL, 0xfa44258775bb3a91ULL, 0x18150f14b9ec46ddULL, 0x1491861e6b9a653dULL, 0x9a1019d7ab2c3fc2ULL, 0x3668d42d06fe13d7ULL, 0xdcc1fbb25606a6d0ULL, 0x969490dd795a1c22ULL, 0x3549b1a1bc6dd2efULL, 0xc94f5e23a0ed770eULL, 0xb9f6686b5b39fdcbULL, 0xc4d4f4a6efeae00dULL, 0xe732851a1fff2204ULL, 0x94aad6de5eb869f9ULL, 0x3f8ff2ae07206e7fULL, 0xfe38a9813b62d03aULL, 0xa7a1ad7a8bee2466ULL, 0x7b6056c8dde882b6ULL, 0x302a1e286fc58ca7ULL, 0x8da0fa457a259bc7ULL, 0xb3302b64e074415bULL, 0x5402ae7eff8b635fULL, 0x08f8050c9cafc94bULL, 0xae468bf98a3059ceULL, 0x88c355cca98dc58fULL, 0xb10e6d67c7963480ULL, 0xbad70de7e1aa3cf3ULL, 0xbfb4a26e320262bbULL, 0xcb711820870f02d5ULL, 0xce12b7a954a75c9dULL, 0x563ce87dd8691684ULL, 0x9f73b65e7884618aULL, 0x2b1e74b06cba0b42ULL, 0x47cec1ea605b2df1ULL, 0x1c698312f735ac76ULL, 0x5fdbcefed9b76b2cULL, 0x831a354c8fb1cdfcULL, 0x820516c312c0791fULL, 0xb74ca762aeadabf0ULL, 0xfc06ef821c80a5e1ULL, 0x5723cbf24518a267ULL, 0x9d4df05d5f661451ULL, 0x588627742dfd40bfULL, 0xda8331b73f3d39a0ULL, 0x17b0e392d109a405ULL, 0xf965400bcf28fba9ULL, 0x7c3dbf4229a2a925ULL, 0x023e460327e275dbULL, 0x6cd0b55a0ce126b3ULL, 0xe62da695828e96e7ULL, 0x42ad6e63b3f373b9ULL, 0xe50cc319381d57dfULL, 0xc5cbd729729b54eeULL, 0x46d1e265fd2a9912ULL, 0x6428b056904eeff8ULL, 0x8be23040131e04b7ULL, 0x6709d5da2add2ec0ULL, 0x075de98af44a2b93ULL, 0x8447dcc67bfbe66fULL, 0x6616f655b7ac9a23ULL, 0xd607b8bded4b1a40ULL, 0x0563af89d3a85e48ULL, 0x3db1b4ad20c21ba4ULL, 0x11f22997b8323b75ULL, 0x292032b34b587e99ULL, 0x7f1cdace9331681dULL, 0x8e819fc9c0b65affULL, 0xa1e3677fe2d5bb16ULL, 0xcd33d225ee349da5ULL, 0xd9a2543b85aef898ULL, 0x795e10cbfa0af76dULL, 0x25a4bbb9992e5d79ULL, 0x78413344677b438eULL, 0xf0826688cef68601ULL, 0xd27b34bba392f0ebULL, 0x551d8df162fad7bcULL, 0x1e57c511d0d7d9adULL, 0xdeffbdb171e4d30bULL, 0xf4feea8e802f6caaULL, 0xa480c8f6317de55eULL, 0xa0fc44f07fa40ff5ULL, 0x95b5f551c3c9dd1aULL, 0x22f952336d6476eaULL, 0x0000000000000000ULL, 0xa6be8ef5169f9085ULL, 0xcc2cf1aa73452946ULL, 0x2e7ddb39bf12550aULL, 0xd526dd3157d8db78ULL, 0x486b2d6c08becf29ULL, 0x9b0f3a58365d8b21ULL, 0xac78cdfaadd22c15ULL, 0xbc95c7e28891a383ULL, 0x6a927f5f65dab9c3ULL, 0xc3891d2c1ba0cb9eULL, 0xeaa92f9f50f8b507ULL, 0xcf0d9426c9d6e87eULL, 0xca6e3baf1a7eb636ULL, 0xab25247059980786ULL, 0x69b31ad3df4978fbULL, 0xe2512a93cc577c4cULL, 0xff278a0ea61364d9ULL, 0x71a615c766a53e26ULL, 0x89dc764334fc716cULL, 0xf87a638452594f4aULL, 0xf2bc208be914f3daULL, 0x8766b94ac1682757ULL, 0xbbc82e687cdb8810ULL, 0x626a7a53f9757088ULL, 0xa2c202f358467a2eULL, 0x4d0882e5db169161ULL, 0x09e7268301de7da8ULL, 0xe897699c771ac0dcULL, 0xc8507dac3d9cc3edULL, 0xc0a878a0a1330aa6ULL, 0x978bb352e42ba8c1ULL, 0xe9884a13ea6b743fULL, 0x279afdbabecc28a2ULL, 0x047c8c064ed9eaabULL, 0x507e2278b15289f4ULL, 0x599904fbb08cf45cULL, 0xbd8ae46d15e01760ULL, 0x31353da7f2b43844ULL, 0x8558ff49e68a528cULL, 0x76fbfc4d92ef15b5ULL, 0x3456922e211c660cULL, 0x86799ac55c1993b4ULL, 0x3e90d1219a51da9cULL, 0x2d5cbeb505819432ULL, 0x982e5fd48cce4a19ULL, 0xdb9c1238a24c8d43ULL, 0xd439febecaa96f9bULL, 0x418c0bef0960b281ULL, 0x158ea591f6ebd1deULL, 0x1f48e69e4da66d4eULL, 0x8afd13cf8e6fb054ULL, 0xf5e1c9011d5ed849ULL, 0xe34e091c5126c8afULL, 0xad67ee7530a398f6ULL, 0x43b24dec2e82c75aULL, 0x75da99c1287cd48dULL, 0x92e81cdb3783f689ULL, 0xa3dd217cc537cecdULL, 0x60543c50de970553ULL, 0x93f73f54aaf2426aULL, 0xa91b62737e7a725dULL, 0xf19d4507538732e2ULL, 0x77e4dfc20f9ea156ULL, 0x7d229ccdb4d31dc6ULL, 0x1b346a98037f87e5ULL, 0xedf4c615a4b29e94ULL, 0x4093286094110662ULL, 0xb0114ee85ae78063ULL, 0x6ff1d0d6b672e78bULL, 0x6dcf96d591909250ULL, 0xdfe09e3eec9567e8ULL, 0x3214582b4827f97cULL, 0xb46dc2ee143e6ac8ULL, 0xf6c0ac8da7cd1971ULL, 0xebb60c10cd8901e4ULL, 0xf7df8f023abcad92ULL, 0x9c52d3d2c217a0b2ULL, 0x6b8d5cd0f8ab0d20ULL, 0x3777f7a29b8fa734ULL, 0x011f238f9d71b4e3ULL, 0xc1b75b2f3c42be45ULL, 0x5de588fdfe551ef7ULL, 0x6eeef3592b035368ULL, 0xaa3a07ffc4e9b365ULL, 0xecebe59a39c32a77ULL, 0x5ba742f8976e8187ULL, 0x4b4a48e0b22d0e11ULL, 0xddded83dcb771233ULL, 0xa59feb79ac0c51bdULL, 0xc7f5912a55792135ULL}, { 0x6d6ae04668a9b08aULL, 0x3ab3f04b0be8c743ULL, 0xe51e166b54b3c908ULL, 0xbe90a9eb35c2f139ULL, 0xb2c7066637f2bec1ULL, 0xaa6945613392202cULL, 0x9a28c36f3b5201ebULL, 0xddce5a93ab536994ULL, 0x0e34133ef6382827ULL, 0x52a02ba1ec55048bULL, 0xa2f88f97c4b2a177ULL, 0x8640e513ca2251a5ULL, 0xcdf1d36258137622ULL, 0xfe6cb708dedf8ddbULL, 0x8a174a9ec8121e5dULL, 0x679896036b81560eULL, 0x59ed033395795feeULL, 0x1dd778ab8b74edafULL, 0xee533ef92d9f926dULL, 0x2a8c79baf8a8d8f5ULL, 0x6bcf398e69b119f6ULL, 0xe20491742fafdd95ULL, 0x276488e0809c2aecULL, 0xea955b82d88f5cceULL, 0x7102c63a99d9e0c4ULL, 0xf9763017a5c39946ULL, 0x429fa2501f151b3dULL, 0x4659c72bea05d59eULL, 0x984b7fdccf5a6634ULL, 0xf742232953fbb161ULL, 0x3041860e08c021c7ULL, 0x747bfd9616cd9386ULL, 0x4bb1367192312787ULL, 0x1b72a1638a6c44d3ULL, 0x4a0e68a6e8359a66ULL, 0x169a5039f258b6caULL, 0xb98a2ef44edee5a4ULL, 0xd9083fe85e43a737ULL, 0x967f6ce239624e13ULL, 0x8874f62d3c1a7982ULL, 0x3c1629830af06e3fULL, 0x9165ebfd427e5a8eULL, 0xb5dd81794ceeaa5cULL, 0x0de8f15a7834f219ULL, 0x70bd98ede3dd5d25ULL, 0xaccc9ca9328a8950ULL, 0x56664eda1945ca28ULL, 0x221db34c0f8859aeULL, 0x26dbd637fa98970dULL, 0x1acdffb4f068f932ULL, 0x4585254f64090fa0ULL, 0x72de245e17d53afaULL, 0x1546b25d7c546cf4ULL, 0x207e0ffffb803e71ULL, 0xfaaad2732bcf4378ULL, 0xb462dfae36ea17bdULL, 0xcf926fd1ac1b11fdULL, 0xe0672dc7dba7ba4aULL, 0xd3fa49ad5d6b41b3ULL, 0x8ba81449b216a3bcULL, 0x14f9ec8a0650d115ULL, 0x40fc1ee3eb1d7ce2ULL, 0x23a2ed9b758ce44fULL, 0x782c521b14fddc7eULL, 0x1c68267cf170504eULL, 0xbcf31558c1ca96e6ULL, 0xa781b43b4ba6d235ULL, 0xf6fd7dfe29ff0c80ULL, 0xb0a4bad5c3fad91eULL, 0xd199f51ea963266cULL, 0x414340349119c103ULL, 0x5405f269ed4dadf7ULL, 0xabd61bb649969dcdULL, 0x6813dbeae7bdc3c8ULL, 0x65fb2ab09f8931d1ULL, 0xf1e7fae152e3181dULL, 0xc1a67cef5a2339daULL, 0x7a4feea8e0f5bba1ULL, 0x1e0b9acf05783791ULL, 0x5b8ebf8061713831ULL, 0x80e53cdbcb3af8d9ULL, 0x7e898bd315e57502ULL, 0xc6bcfbf0213f2d47ULL, 0x95a38e86b76e942dULL, 0x092e94218d243cbaULL, 0x8339debf453622e7ULL, 0xb11be402b9fe64ffULL, 0x57d9100d634177c9ULL, 0xcc4e8db52217cbc3ULL, 0x3b0cae9c71ec7aa2ULL, 0xfb158ca451cbfe99ULL, 0x2b33276d82ac6514ULL, 0x01bf5ed77a04bde1ULL, 0xc5601994af33f779ULL, 0x75c4a3416cc92e67ULL, 0xf3844652a6eb7fc2ULL, 0x3487e375fdd0ef64ULL, 0x18ae430704609eedULL, 0x4d14efb993298efbULL, 0x815a620cb13e4538ULL, 0x125c354207487869ULL, 0x9eeea614ce42cf48ULL, 0xce2d3106d61fac1cULL, 0xbbe99247bad6827bULL, 0x071a871f7b1c149dULL, 0x2e4a1cc10db81656ULL, 0x77a71ff298c149b8ULL, 0x06a5d9c80118a97cULL, 0xad73c27e488e34b1ULL, 0x443a7b981e0db241ULL, 0xe3bbcfa355ab6074ULL, 0x0af276450328e684ULL, 0x73617a896dd1871bULL, 0x58525de4ef7de20fULL, 0xb7be3dcab8e6cd83ULL, 0x19111dd07e64230cULL, 0x842359a03e2a367aULL, 0x103f89f1f3401fb6ULL, 0xdc710444d157d475ULL, 0xb835702334da5845ULL, 0x4320fc876511a6dcULL, 0xd026abc9d3679b8dULL, 0x17250eee885c0b2bULL, 0x90dab52a387ae76fULL, 0x31fed8d972c49c26ULL, 0x89cba8fa461ec463ULL, 0x2ff5421677bcabb7ULL, 0x396f122f85e41d7dULL, 0xa09b332430bac6a8ULL, 0xc888e8ced7070560ULL, 0xaeaf201ac682ee8fULL, 0x1180d7268944a257ULL, 0xf058a43628e7a5fcULL, 0xbd4c4b8fbbce2b07ULL, 0xa1246df34abe7b49ULL, 0x7d5569b79be9af3cULL, 0xa9b5a705bd9efa12ULL, 0xdb6b835baa4bc0e8ULL, 0x05793bac8f147342ULL, 0x21c1512881848390ULL, 0xfdb0556c50d357e5ULL, 0x613d4fcb6a99ff72ULL, 0x03dce2648e0cda3eULL, 0xe949b9e6568386f0ULL, 0xfc0f0bbb2ad7ea04ULL, 0x6a70675913b5a417ULL, 0x7f36d5046fe1c8e3ULL, 0x0c57af8d02304ff8ULL, 0x32223abdfcc84618ULL, 0x0891caf6f720815bULL, 0xa63eeaec31a26fd4ULL, 0x2507345374944d33ULL, 0x49d28ac266394058ULL, 0xf5219f9aa7f3d6beULL, 0x2d96fea583b4cc68ULL, 0x5a31e1571b7585d0ULL, 0x8ed12fe53d02d0feULL, 0xdfade6205f5b0e4bULL, 0x4cabb16ee92d331aULL, 0x04c6657bf510cea3ULL, 0xd73c2cd6a87b8f10ULL, 0xe1d87310a1a307abULL, 0x6cd5be9112ad0d6bULL, 0x97c032354366f3f2ULL, 0xd4e0ceb22677552eULL, 0x0000000000000000ULL, 0x29509bde76a402cbULL, 0xc27a9e8bd42fe3e4ULL, 0x5ef7842cee654b73ULL, 0xaf107ecdbc86536eULL, 0x3fcacbe784fcb401ULL, 0xd55f90655c73e8cfULL, 0xe6c2f40fdabf1336ULL, 0xe8f6e7312c873b11ULL, 0xeb2a0555a28be12fULL, 0xe4a148bc2eb774e9ULL, 0x9b979db84156bc0aULL, 0x6eb60222e6a56ab4ULL, 0x87ffbbc4b026ec44ULL, 0xc703a5275b3b90a6ULL, 0x47e699fc9001687fULL, 0x9c8d1aa73a4aa897ULL, 0x7cea3760e1ed12ddULL, 0x4ec80ddd1d2554c5ULL, 0x13e36b957d4cc588ULL, 0x5d2b66486069914dULL, 0x92b90999cc7280b0ULL, 0x517cc9c56259deb5ULL, 0xc937b619ad03b881ULL, 0xec30824ad997f5b2ULL, 0xa45d565fc5aa080bULL, 0xd6837201d27f32f1ULL, 0x635ef3789e9198adULL, 0x531f75769651b96aULL, 0x4f77530a6721e924ULL, 0x486dd4151c3dfdb9ULL, 0x5f48dafb9461f692ULL, 0x375b011173dc355aULL, 0x3da9775470f4d3deULL, 0x8d0dcd81b30e0ac0ULL, 0x36e45fc609d888bbULL, 0x55baacbe97491016ULL, 0x8cb29356c90ab721ULL, 0x76184125e2c5f459ULL, 0x99f4210bb55edbd5ULL, 0x6f095cf59ca1d755ULL, 0x9f51f8c3b44672a9ULL, 0x3538bda287d45285ULL, 0x50c39712185d6354ULL, 0xf23b1885dcefc223ULL, 0x79930ccc6ef9619fULL, 0xed8fdc9da3934853ULL, 0xcb540aaa590bdf5eULL, 0x5c94389f1a6d2cacULL, 0xe77daad8a0bbaed7ULL, 0x28efc5090ca0bf2aULL, 0xbf2ff73c4fc64cd8ULL, 0xb37858b14df60320ULL, 0xf8c96ec0dfc724a7ULL, 0x828680683f329f06ULL, 0x941cd051cd6a29ccULL, 0xc3c5c05cae2b5e05ULL, 0xb601631dc2e27062ULL, 0xc01922382027843bULL, 0x24b86a840e90f0d2ULL, 0xd245177a276ffc52ULL, 0x0f8b4de98c3c95c6ULL, 0x3e759530fef809e0ULL, 0x0b4d2892792c5b65ULL, 0xc4df4743d5374a98ULL, 0xa5e20888bfaeb5eaULL, 0xba56cc90c0d23f9aULL, 0x38d04cf8ffe0a09cULL, 0x62e1adafe495254cULL, 0x0263bcb3f40867dfULL, 0xcaeb547d230f62bfULL, 0x6082111c109d4293ULL, 0xdad4dd8cd04f7d09ULL, 0xefec602e579b2f8cULL, 0x1fb4c4187f7c8a70ULL, 0xffd3e9dfa4db303aULL, 0x7bf0b07f9af10640ULL, 0xf49ec14dddf76b5fULL, 0x8f6e713247066d1fULL, 0x339d646a86ccfbf9ULL, 0x64447467e58d8c30ULL, 0x2c29a072f9b07189ULL, 0xd8b7613f24471ad6ULL, 0x6627c8d41185ebefULL, 0xa347d140beb61c96ULL, 0xde12b8f7255fb3aaULL, 0x9d324470404e1576ULL, 0x9306574eb6763d51ULL, 0xa80af9d2c79a47f3ULL, 0x859c0777442e8b9bULL, 0x69ac853d9db97e29ULL}, { 0xc3407dfc2de6377eULL, 0x5b9e93eea4256f77ULL, 0xadb58fdd50c845e0ULL, 0x5219ff11a75bed86ULL, 0x356b61cfd90b1de9ULL, 0xfb8f406e25abe037ULL, 0x7a5a0231c0f60796ULL, 0x9d3cd216e1f5020bULL, 0x0c6550fb6b48d8f3ULL, 0xf57508c427ff1c62ULL, 0x4ad35ffa71cb407dULL, 0x6290a2da1666aa6dULL, 0xe284ec2349355f9fULL, 0xb3c307c53d7c84ecULL, 0x05e23c0468365a02ULL, 0x190bac4d6c9ebfa8ULL, 0x94bbbee9e28b80faULL, 0xa34fc777529cb9b5ULL, 0xcc7b39f095bcd978ULL, 0x2426addb0ce532e3ULL, 0x7e79329312ce4fc7ULL, 0xab09a72eebec2917ULL, 0xf8d15499f6b9d6c2ULL, 0x1a55b8babf8c895dULL, 0xdb8add17fb769a85ULL, 0xb57f2f368658e81bULL, 0x8acd36f18f3f41f6ULL, 0x5ce3b7bba50f11d3ULL, 0x114dcc14d5ee2f0aULL, 0xb91a7fcded1030e8ULL, 0x81d5425fe55de7a1ULL, 0xb6213bc1554adeeeULL, 0x80144ef95f53f5f2ULL, 0x1e7688186db4c10cULL, 0x3b912965db5fe1bcULL, 0xc281715a97e8252dULL, 0x54a5d7e21c7f8171ULL, 0x4b12535ccbc5522eULL, 0x1d289cefbea6f7f9ULL, 0x6ef5f2217d2e729eULL, 0xe6a7dc819b0d17ceULL, 0x1b94b41c05829b0eULL, 0x33d7493c622f711eULL, 0xdcf7f942fa5ce421ULL, 0x600fba8b7f7a8ecbULL, 0x46b60f011a83988eULL, 0x235b898e0dcf4c47ULL, 0x957ab24f588592a9ULL, 0x4354330572b5c28cULL, 0xa5f3ef84e9b8d542ULL, 0x8c711e02341b2d01ULL, 0x0b1874ae6a62a657ULL, 0x1213d8e306fc19ffULL, 0xfe6d7c6a4d9dba35ULL, 0x65ed868f174cd4c9ULL, 0x88522ea0e6236550ULL, 0x899322065c2d7703ULL, 0xc01e690bfef4018bULL, 0x915982ed8abddaf8ULL, 0xbe675b98ec3a4e4cULL, 0xa996bf7f82f00db1ULL, 0xe1daf8d49a27696aULL, 0x2effd5d3dc8986e7ULL, 0xd153a51f2b1a2e81ULL, 0x18caa0ebd690adfbULL, 0x390e3134b243c51aULL, 0x2778b92cdff70416ULL, 0x029f1851691c24a6ULL, 0x5e7cafeacc133575ULL, 0xfa4e4cc89fa5f264ULL, 0x5a5f9f481e2b7d24ULL, 0x484c47ab18d764dbULL, 0x400a27f2a1a7f479ULL, 0xaeeb9b2a83da7315ULL, 0x721c626879869734ULL, 0x042330a2d2384851ULL, 0x85f672fd3765aff0ULL, 0xba446b3a3e02061dULL, 0x73dd6ecec3888567ULL, 0xffac70ccf793a866ULL, 0xdfa9edb5294ed2d4ULL, 0x6c6aea7014325638ULL, 0x834a5a0e8c41c307ULL, 0xcdba35562fb2cb2bULL, 0x0ad97808d06cb404ULL, 0x0f3b440cb85aee06ULL, 0xe5f9c876481f213bULL, 0x98deee1289c35809ULL, 0x59018bbfcd394bd1ULL, 0xe01bf47220297b39ULL, 0xde68e1139340c087ULL, 0x9fa3ca4788e926adULL, 0xbb85679c840c144eULL, 0x53d8f3b71d55ffd5ULL, 0x0da45c5dd146caa0ULL, 0x6f34fe87c72060cdULL, 0x57fbc315cf6db784ULL, 0xcee421a1fca0fddeULL, 0x3d2d0196607b8d4bULL, 0x642c8a29ad42c69aULL, 0x14aff010bdd87508ULL, 0xac74837beac657b3ULL, 0x3216459ad821634dULL, 0x3fb219c70967a9edULL, 0x06bc28f3bb246cf7ULL, 0xf2082c9126d562c6ULL, 0x66b39278c45ee23cULL, 0xbd394f6f3f2878b9ULL, 0xfd33689d9e8f8cc0ULL, 0x37f4799eb017394fULL, 0x108cc0b26fe03d59ULL, 0xda4bd1b1417888d6ULL, 0xb09d1332ee6eb219ULL, 0x2f3ed975668794b4ULL, 0x58c0871977375982ULL, 0x7561463d78ace990ULL, 0x09876cff037e82f1ULL, 0x7fb83e35a8c05d94ULL, 0x26b9b58a65f91645ULL, 0xef20b07e9873953fULL, 0x3148516d0b3355b8ULL, 0x41cb2b541ba9e62aULL, 0x790416c613e43163ULL, 0xa011d380818e8f40ULL, 0x3a5025c36151f3efULL, 0xd57095bdf92266d0ULL, 0x498d4b0da2d97688ULL, 0x8b0c3a57353153a5ULL, 0x21c491df64d368e1ULL, 0x8f2f0af5e7091bf4ULL, 0x2da1c1240f9bb012ULL, 0xc43d59a92ccc49daULL, 0xbfa6573e56345c1fULL, 0x828b56a8364fd154ULL, 0x9a41f643e0df7cafULL, 0xbcf843c985266aeaULL, 0x2b1de9d7b4bfdce5ULL, 0x20059d79dedd7ab2ULL, 0x6dabe6d6ae3c446bULL, 0x45e81bf6c991ae7bULL, 0x6351ae7cac68b83eULL, 0xa432e32253b6c711ULL, 0xd092a9b991143cd2ULL, 0xcac711032e98b58fULL, 0xd8d4c9e02864ac70ULL, 0xc5fc550f96c25b89ULL, 0xd7ef8dec903e4276ULL, 0x67729ede7e50f06fULL, 0xeac28c7af045cf3dULL, 0xb15c1f945460a04aULL, 0x9cfddeb05bfb1058ULL, 0x93c69abce3a1fe5eULL, 0xeb0380dc4a4bdd6eULL, 0xd20db1e8f8081874ULL, 0x229a8528b7c15e14ULL, 0x44291750739fbc28ULL, 0xd3ccbd4e42060a27ULL, 0xf62b1c33f4ed2a97ULL, 0x86a8660ae4779905ULL, 0xd62e814a2a305025ULL, 0x477703a7a08d8addULL, 0x7b9b0e977af815c5ULL, 0x78c51a60a9ea2330ULL, 0xa6adfb733aaae3b7ULL, 0x97e5aa1e3199b60fULL, 0x0000000000000000ULL, 0xf4b404629df10e31ULL, 0x5564db44a6719322ULL, 0x9207961a59afec0dULL, 0x9624a6b88b97a45cULL, 0x363575380a192b1cULL, 0x2c60cd82b595a241ULL, 0x7d272664c1dc7932ULL, 0x7142769faa94a1c1ULL, 0xa1d0df263b809d13ULL, 0x1630e841d4c451aeULL, 0xc1df65ad44fa13d8ULL, 0x13d2d445bcf20bacULL, 0xd915c546926abe23ULL, 0x38cf3d92084dd749ULL, 0xe766d0272103059dULL, 0xc7634d5effde7f2fULL, 0x077d2455012a7ea4ULL, 0xedbfa82ff16fb199ULL, 0xaf2a978c39d46146ULL, 0x42953fa3c8bbd0dfULL, 0xcb061da59496a7dcULL, 0x25e7a17db6eb20b0ULL, 0x34aa6d6963050fbaULL, 0xa76cf7d580a4f1e4ULL, 0xf7ea10954ee338c4ULL, 0xfcf2643b24819e93ULL, 0xcf252d0746aeef8dULL, 0x4ef06f58a3f3082cULL, 0x563acfb37563a5d7ULL, 0x5086e740ce47c920ULL, 0x2982f186dda3f843ULL, 0x87696aac5e798b56ULL, 0x5d22bb1d1f010380ULL, 0x035e14f7d31236f5ULL, 0x3cec0d30da759f18ULL, 0xf3c920379cdb7095ULL, 0xb8db736b571e22bbULL, 0xdd36f5e44052f672ULL, 0xaac8ab8851e23b44ULL, 0xa857b3d938fe1fe2ULL, 0x17f1e4e76eca43fdULL, 0xec7ea4894b61a3caULL, 0x9e62c6e132e734feULL, 0xd4b1991b432c7483ULL, 0x6ad6c283af163acfULL, 0x1ce9904904a8e5aaULL, 0x5fbda34c761d2726ULL, 0xf910583f4cb7c491ULL, 0xc6a241f845d06d7cULL, 0x4f3163fe19fd1a7fULL, 0xe99c988d2357f9c8ULL, 0x8eee06535d0709a7ULL, 0x0efa48aa0254fc55ULL, 0xb4be23903c56fa48ULL, 0x763f52caabbedf65ULL, 0xeee1bcd8227d876cULL, 0xe345e085f33b4dccULL, 0x3e731561b369bbbeULL, 0x2843fd2067adea10ULL, 0x2adce5710eb1ceb6ULL, 0xb7e03767ef44ccbdULL, 0x8db012a48e153f52ULL, 0x61ceb62dc5749c98ULL, 0xe85d942b9959eb9bULL, 0x4c6f7709caef2c8aULL, 0x84377e5b8d6bbda3ULL, 0x30895dcbb13d47ebULL, 0x74a04a9bc2a2fbc3ULL, 0x6b17ce251518289cULL, 0xe438c4d0f2113368ULL, 0x1fb784bed7bad35fULL, 0x9b80fae55ad16efcULL, 0x77fe5e6c11b0cd36ULL, 0xc858095247849129ULL, 0x08466059b97090a2ULL, 0x01c10ca6ba0e1253ULL, 0x6988d6747c040c3aULL, 0x6849dad2c60a1e69ULL, 0x5147ebe67449db73ULL, 0xc99905f4fd8a837aULL, 0x991fe2b433cd4a5aULL, 0xf09734c04fc94660ULL, 0xa28ecbd1e892abe6ULL, 0xf1563866f5c75433ULL, 0x4dae7baf70e13ed9ULL, 0x7ce62ac27bd26b61ULL, 0x70837a39109ab392ULL, 0x90988e4b30b3c8abULL, 0xb2020b63877296bfULL, 0x156efcb607d6675bULL}, { 0xe63f55ce97c331d0ULL, 0x25b506b0015bba16ULL, 0xc8706e29e6ad9ba8ULL, 0x5b43d3775d521f6aULL, 0x0bfa3d577035106eULL, 0xab95fc172afb0e66ULL, 0xf64b63979e7a3276ULL, 0xf58b4562649dad4bULL, 0x48f7c3dbae0c83f1ULL, 0xff31916642f5c8c5ULL, 0xcbb048dc1c4a0495ULL, 0x66b8f83cdf622989ULL, 0x35c130e908e2b9b0ULL, 0x7c761a61f0b34fa1ULL, 0x3601161cf205268dULL, 0x9e54ccfe2219b7d6ULL, 0x8b7d90a538940837ULL, 0x9cd403588ea35d0bULL, 0xbc3c6fea9ccc5b5aULL, 0xe5ff733b6d24aeedULL, 0xceed22de0f7eb8d2ULL, 0xec8581cab1ab545eULL, 0xb96105e88ff8e71dULL, 0x8ca03501871a5eadULL, 0x76ccce65d6db2a2fULL, 0x5883f582a7b58057ULL, 0x3f7be4ed2e8adc3eULL, 0x0fe7be06355cd9c9ULL, 0xee054e6c1d11be83ULL, 0x1074365909b903a6ULL, 0x5dde9f80b4813c10ULL, 0x4a770c7d02b6692cULL, 0x5379c8d5d7809039ULL, 0xb4067448161ed409ULL, 0x5f5e5026183bd6cdULL, 0xe898029bf4c29df9ULL, 0x7fb63c940a54d09cULL, 0xc5171f897f4ba8bcULL, 0xa6f28db7b31d3d72ULL, 0x2e4f3be7716eaa78ULL, 0x0d6771a099e63314ULL, 0x82076254e41bf284ULL, 0x2f0fd2b42733df98ULL, 0x5c9e76d3e2dc49f0ULL, 0x7aeb569619606cdbULL, 0x83478b07b2468764ULL, 0xcfadcb8d5923cd32ULL, 0x85dac7f05b95a41eULL, 0xb5469d1b4043a1e9ULL, 0xb821ecbbd9a592fdULL, 0x1b8e0b0e798c13c8ULL, 0x62a57b6d9a0be02eULL, 0xfcf1b793b81257f8ULL, 0x9d94ea0bd8fe28ebULL, 0x4cea408aeb654a56ULL, 0x23284a47e888996cULL, 0x2d8f1d128b893545ULL, 0xf4cbac3132c0d8abULL, 0xbd7c86b9ca912ebaULL, 0x3a268eef3dbe6079ULL, 0xf0d62f6077a9110cULL, 0x2735c916ade150cbULL, 0x89fd5f03942ee2eaULL, 0x1acee25d2fd16628ULL, 0x90f39bab41181bffULL, 0x430dfe8cde39939fULL, 0xf70b8ac4c8274796ULL, 0x1c53aeaac6024552ULL, 0x13b410acf35e9c9bULL, 0xa532ab4249faa24fULL, 0x2b1251e5625a163fULL, 0xd7e3e676da4841c7ULL, 0xa7b264e4e5404892ULL, 0xda8497d643ae72d3ULL, 0x861ae105a1723b23ULL, 0x38a6414991048aa4ULL, 0x6578dec92585b6b4ULL, 0x0280cfa6acbaeaddULL, 0x88bdb650c273970aULL, 0x9333bd5ebbff84c2ULL, 0x4e6a8f2c47dfa08bULL, 0x321c954db76cef2aULL, 0x418d312a72837942ULL, 0xb29b38bfffcdf773ULL, 0x6c022c38f90a4c07ULL, 0x5a033a240b0f6a8aULL, 0x1f93885f3ce5da6fULL, 0xc38a537e96988bc6ULL, 0x39e6a81ac759ff44ULL, 0x29929e43cee0fce2ULL, 0x40cdd87924de0ca2ULL, 0xe9d8ebc8a29fe819ULL, 0x0c2798f3cfbb46f4ULL, 0x55e484223e53b343ULL, 0x4650948ecd0d2fd8ULL, 0x20e86cb2126f0651ULL, 0x6d42c56baf5739e7ULL, 0xa06fc1405ace1e08ULL, 0x7babbfc54f3d193bULL, 0x424d17df8864e67fULL, 0xd8045870ef14980eULL, 0xc6d7397c85ac3781ULL, 0x21a885e1443273b1ULL, 0x67f8116f893f5c69ULL, 0x24f5efe35706cff6ULL, 0xd56329d076f2ab1aULL, 0x5e1eb9754e66a32dULL, 0x28d2771098bd8902ULL, 0x8f6013f47dfdc190ULL, 0x17a993fdb637553cULL, 0xe0a219397e1012aaULL, 0x786b9930b5da8606ULL, 0x6e82e39e55b0a6daULL, 0x875a0856f72f4ec3ULL, 0x3741ff4fa458536dULL, 0xac4859b3957558fcULL, 0x7ef6d5c75c09a57cULL, 0xc04a758b6c7f14fbULL, 0xf9acdd91ab26ebbfULL, 0x7391a467c5ef9668ULL, 0x335c7c1ee1319acaULL, 0xa91533b18641e4bbULL, 0xe4bf9a683b79db0dULL, 0x8e20faa72ba0b470ULL, 0x51f907737b3a7ae4ULL, 0x2268a314bed5ec8cULL, 0xd944b123b949edeeULL, 0x31dcb3b84d8b7017ULL, 0xd3fe65279f218860ULL, 0x097af2f1dc8ffab3ULL, 0x9b09a6fc312d0b91ULL, 0xcc6ded78a3c4520fULL, 0x3481d9ba5ebfcc50ULL, 0x4f2a667f1182d56bULL, 0xdfd9fdd4509ace94ULL, 0x26752045fbbc252bULL, 0xbffc491f662bc467ULL, 0xdd593272fc202449ULL, 0x3cbbc218d46d4303ULL, 0x91b372f817456e1fULL, 0x681faf69bc6385a0ULL, 0xb686bbeebaa43ed4ULL, 0x1469b5084cd0ca01ULL, 0x98c98009cbca94acULL, 0x6438379a73d8c354ULL, 0xc2caba2dc0c5fe26ULL, 0x3e3b0dbe78d7a9deULL, 0x50b9ee202d670f04ULL, 0x4590b27b37eab0e5ULL, 0x6025b4cb36b10af3ULL, 0xfb2c1237079c0162ULL, 0xa12f28130c936be8ULL, 0x4b37e52e54eb1cccULL, 0x083a1ba28ad28f53ULL, 0xc10a9cd83a22611bULL, 0x9f1425ad7444c236ULL, 0x069d4cf7e9d3237aULL, 0xedc56899e7f621beULL, 0x778c273680865fcfULL, 0x309c5aeb1bd605f7ULL, 0x8de0dc52d1472b4dULL, 0xf8ec34c2fd7b9e5fULL, 0xea18cd3d58787724ULL, 0xaad515447ca67b86ULL, 0x9989695a9d97e14cULL, 0x0000000000000000ULL, 0xf196c63321f464ecULL, 0x71116bc169557cb5ULL, 0xaf887f466f92c7c1ULL, 0x972e3e0ffe964d65ULL, 0x190ec4a8d536f915ULL, 0x95aef1a9522ca7b8ULL, 0xdc19db21aa7d51a9ULL, 0x94ee18fa0471d258ULL, 0x8087adf248a11859ULL, 0xc457f6da2916dd5cULL, 0xfa6cfb6451c17482ULL, 0xf256e0c6db13fbd1ULL, 0x6a9f60cf10d96f7dULL, 0x4daaa9d9bd383fb6ULL, 0x03c026f5fae79f3dULL, 0xde99148706c7bb74ULL, 0x2a52b8b6340763dfULL, 0x6fc20acd03edd33aULL, 0xd423c08320afdefaULL, 0xbbe1ca4e23420dc0ULL, 0x966ed75ca8cb3885ULL, 0xeb58246e0e2502c4ULL, 0x055d6a021334bc47ULL, 0xa47242111fa7d7afULL, 0xe3623fcc84f78d97ULL, 0x81c744a11efc6db9ULL, 0xaec8961539cfb221ULL, 0xf31609958d4e8e31ULL, 0x63e5923ecc5695ceULL, 0x47107ddd9b505a38ULL, 0xa3afe7b5a0298135ULL, 0x792b7063e387f3e6ULL, 0x0140e953565d75e0ULL, 0x12f4f9ffa503e97bULL, 0x750ce8902c3cb512ULL, 0xdbc47e8515f30733ULL, 0x1ed3610c6ab8af8fULL, 0x5239218681dde5d9ULL, 0xe222d69fd2aaf877ULL, 0xfe71783514a8bd25ULL, 0xcaf0a18f4a177175ULL, 0x61655d9860ec7f13ULL, 0xe77fbc9dc19e4430ULL, 0x2ccff441ddd440a5ULL, 0x16e97aaee06a20dcULL, 0xa855dae2d01c915bULL, 0x1d1347f9905f30b2ULL, 0xb7c652bdecf94b34ULL, 0xd03e43d265c6175dULL, 0xfdb15ec0ee4f2218ULL, 0x57644b8492e9599eULL, 0x07dda5a4bf8e569aULL, 0x54a46d71680ec6a3ULL, 0x5624a2d7c4b42c7eULL, 0xbebca04c3076b187ULL, 0x7d36f332a6ee3a41ULL, 0x3b6667bc6be31599ULL, 0x695f463aea3ef040ULL, 0xad08b0e0c3282d1cULL, 0xb15b1e4a052a684eULL, 0x44d05b2861b7c505ULL, 0x15295c5b1a8dbfe1ULL, 0x744c01c37a61c0f2ULL, 0x59c31cd1f1e8f5b7ULL, 0xef45a73f4b4ccb63ULL, 0x6bdf899c46841a9dULL, 0x3dfb2b4b823036e3ULL, 0xa2ef0ee6f674f4d5ULL, 0x184e2dfb836b8cf5ULL, 0x1134df0a5fe47646ULL, 0xbaa1231d751f7820ULL, 0xd17eaa81339b62bdULL, 0xb01bf71953771daeULL, 0x849a2ea30dc8d1feULL, 0x705182923f080955ULL, 0x0ea757556301ac29ULL, 0x041d83514569c9a7ULL, 0x0abad4042668658eULL, 0x49b72a88f851f611ULL, 0x8a3d79f66ec97dd7ULL, 0xcd2d042bf59927efULL, 0xc930877ab0f0ee48ULL, 0x9273540deda2f122ULL, 0xc797d02fd3f14261ULL, 0xe1e2f06a284d674aULL, 0xd2be8c74c97cfd80ULL, 0x9a494faf67707e71ULL, 0xb3dbd1eca9908293ULL, 0x72d14d3493b2e388ULL, 0xd6a30f258c153427ULL} }; #else ALIGN(16) static const unsigned long long Ax[8][256] = { { 0xe6f87e5c5b711fd0ULL, 0x258377800924fa16ULL, 0xc849e07e852ea4a8ULL, 0x5b4686a18f06c16aULL, 0x0b32e9a2d77b416eULL, 0xabda37a467815c66ULL, 0xf61796a81a686676ULL, 0xf5dc0b706391954bULL, 0x4862f38db7e64bf1ULL, 0xff5c629a68bd85c5ULL, 0xcb827da6fcd75795ULL, 0x66d36daf69b9f089ULL, 0x356c9f74483d83b0ULL, 0x7cbcecb1238c99a1ULL, 0x36a702ac31c4708dULL, 0x9eb6a8d02fbcdfd6ULL, 0x8b19fa51e5b3ae37ULL, 0x9ccfb5408a127d0bULL, 0xbc0c78b508208f5aULL, 0xe533e3842288ecedULL, 0xcec2c7d377c15fd2ULL, 0xec7817b6505d0f5eULL, 0xb94cc2c08336871dULL, 0x8c205db4cb0b04adULL, 0x763c855b28a0892fULL, 0x588d1b79f6ff3257ULL, 0x3fecf69e4311933eULL, 0x0fc0d39f803a18c9ULL, 0xee010a26f5f3ad83ULL, 0x10efe8f4411979a6ULL, 0x5dcda10c7de93a10ULL, 0x4a1bee1d1248e92cULL, 0x53bff2db21847339ULL, 0xb4f50ccfa6a23d09ULL, 0x5fb4bc9cd84798cdULL, 0xe88a2d8b071c56f9ULL, 0x7f7771695a756a9cULL, 0xc5f02e71a0ba1ebcULL, 0xa663f9ab4215e672ULL, 0x2eb19e22de5fbb78ULL, 0x0db9ce0f2594ba14ULL, 0x82520e6397664d84ULL, 0x2f031e6a0208ea98ULL, 0x5c7f2144a1be6bf0ULL, 0x7a37cb1cd16362dbULL, 0x83e08e2b4b311c64ULL, 0xcf70479bab960e32ULL, 0x856ba986b9dee71eULL, 0xb5478c877af56ce9ULL, 0xb8fe42885f61d6fdULL, 0x1bdd0156966238c8ULL, 0x622157923ef8a92eULL, 0xfc97ff42114476f8ULL, 0x9d7d350856452cebULL, 0x4c90c9b0e0a71256ULL, 0x2308502dfbcb016cULL, 0x2d7a03faa7a64845ULL, 0xf46e8b38bfc6c4abULL, 0xbdbef8fdd477debaULL, 0x3aac4cebc8079b79ULL, 0xf09cb105e8879d0cULL, 0x27fa6a10ac8a58cbULL, 0x8960e7c1401d0ceaULL, 0x1a6f811e4a356928ULL, 0x90c4fb0773d196ffULL, 0x43501a2f609d0a9fULL, 0xf7a516e0c63f3796ULL, 0x1ce4a6b3b8da9252ULL, 0x1324752c38e08a9bULL, 0xa5a864733bec154fULL, 0x2bf124575549b33fULL, 0xd766db15440dc5c7ULL, 0xa7d179e39e42b792ULL, 0xdadf151a61997fd3ULL, 0x86a0345ec0271423ULL, 0x38d5517b6da939a4ULL, 0x6518f077104003b4ULL, 0x02791d90a5aea2ddULL, 0x88d267899c4a5d0aULL, 0x930f66df0a2865c2ULL, 0x4ee9d4204509b08bULL, 0x325538916685292aULL, 0x412907bfc533a842ULL, 0xb27e2b62544dc673ULL, 0x6c5304456295e007ULL, 0x5af406e95351908aULL, 0x1f2f3b6bc123616fULL, 0xc37b09dc5255e5c6ULL, 0x3967d133b1fe6844ULL, 0x298839c7f0e711e2ULL, 0x409b87f71964f9a2ULL, 0xe938adc3db4b0719ULL, 0x0c0b4e47f9c3ebf4ULL, 0x5534d576d36b8843ULL, 0x4610a05aeb8b02d8ULL, 0x20c3cdf58232f251ULL, 0x6de1840dbec2b1e7ULL, 0xa0e8de06b0fa1d08ULL, 0x7b854b540d34333bULL, 0x42e29a67bcca5b7fULL, 0xd8a6088ac437dd0eULL, 0xc63bb3a9d943ed81ULL, 0x21714dbd5e65a3b1ULL, 0x6761ede7b5eea169ULL, 0x2431f7c8d573abf6ULL, 0xd51fc685e1a3671aULL, 0x5e063cd40410c92dULL, 0x283ab98f2cb04002ULL, 0x8febc06cb2f2f790ULL, 0x17d64f116fa1d33cULL, 0xe07359f1a99ee4aaULL, 0x784ed68c74cdc006ULL, 0x6e2a19d5c73b42daULL, 0x8712b4161c7045c3ULL, 0x371582e4ed93216dULL, 0xace390414939f6fcULL, 0x7ec5f12186223b7cULL, 0xc0b094042bac16fbULL, 0xf9d745379a527ebfULL, 0x737c3f2ea3b68168ULL, 0x33e7b8d9bad278caULL, 0xa9a32a34c22ffebbULL, 0xe48163ccfedfbd0dULL, 0x8e5940246ea5a670ULL, 0x51c6ef4b842ad1e4ULL, 0x22bad065279c508cULL, 0xd91488c218608ceeULL, 0x319ea5491f7cda17ULL, 0xd394e128134c9c60ULL, 0x094bf43272d5e3b3ULL, 0x9bf612a5a4aad791ULL, 0xccbbda43d26ffd0fULL, 0x34de1f3c946ad250ULL, 0x4f5b5468995ee16bULL, 0xdf9faf6fea8f7794ULL, 0x2648ea5870dd092bULL, 0xbfc7e56d71d97c67ULL, 0xdde6b2ff4f21d549ULL, 0x3c276b463ae86003ULL, 0x91767b4faf86c71fULL, 0x68a13e7835d4b9a0ULL, 0xb68c115f030c9fd4ULL, 0x141dd2c916582001ULL, 0x983d8f7ddd5324acULL, 0x64aa703fcc175254ULL, 0xc2c989948e02b426ULL, 0x3e5e76d69f46c2deULL, 0x50746f03587d8004ULL, 0x45db3d829272f1e5ULL, 0x60584a029b560bf3ULL, 0xfbae58a73ffcdc62ULL, 0xa15a5e4e6cad4ce8ULL, 0x4ba96e55ce1fb8ccULL, 0x08f9747aae82b253ULL, 0xc102144cf7fb471bULL, 0x9f042898f3eb8e36ULL, 0x068b27adf2effb7aULL, 0xedca97fe8c0a5ebeULL, 0x778e0513f4f7d8cfULL, 0x302c2501c32b8bf7ULL, 0x8d92ddfc175c554dULL, 0xf865c57f46052f5fULL, 0xeaf3301ba2b2f424ULL, 0xaa68b7ecbbd60d86ULL, 0x998f0f350104754cULL, 0x0000000000000000ULL, 0xf12e314d34d0ccecULL, 0x710522be061823b5ULL, 0xaf280d9930c005c1ULL, 0x97fd5ce25d693c65ULL, 0x19a41cc633cc9a15ULL, 0x95844172f8c79eb8ULL, 0xdc5432b7937684a9ULL, 0x9436c13a2490cf58ULL, 0x802b13f332c8ef59ULL, 0xc442ae397ced4f5cULL, 0xfa1cd8efe3ab8d82ULL, 0xf2e5ac954d293fd1ULL, 0x6ad823e8907a1b7dULL, 0x4d2249f83cf043b6ULL, 0x03cb9dd879f9f33dULL, 0xde2d2f2736d82674ULL, 0x2a43a41f891ee2dfULL, 0x6f98999d1b6c133aULL, 0xd4ad46cd3df436faULL, 0xbb35df50269825c0ULL, 0x964fdcaa813e6d85ULL, 0xeb41b0537ee5a5c4ULL, 0x0540ba758b160847ULL, 0xa41ae43be7bb44afULL, 0xe3b8c429d0671797ULL, 0x819993bbee9fbeb9ULL, 0xae9a8dd1ec975421ULL, 0xf3572cdd917e6e31ULL, 0x6393d7dae2aff8ceULL, 0x47a2201237dc5338ULL, 0xa32343dec903ee35ULL, 0x79fc56c4a89a91e6ULL, 0x01b28048dc5751e0ULL, 0x1296f564e4b7db7bULL, 0x75f7188351597a12ULL, 0xdb6d9552bdce2e33ULL, 0x1e9dbb231d74308fULL, 0x520d7293fdd322d9ULL, 0xe20a44610c304677ULL, 0xfeeee2d2b4ead425ULL, 0xca30fdee20800675ULL, 0x61eaca4a47015a13ULL, 0xe74afe1487264e30ULL, 0x2cc883b27bf119a5ULL, 0x1664cf59b3f682dcULL, 0xa811aa7c1e78af5bULL, 0x1d5626fb648dc3b2ULL, 0xb73e9117df5bce34ULL, 0xd05f7cf06ab56f5dULL, 0xfd257f0acd132718ULL, 0x574dc8e676c52a9eULL, 0x0739a7e52eb8aa9aULL, 0x5486553e0f3cd9a3ULL, 0x56ff48aeaa927b7eULL, 0xbe756525ad8e2d87ULL, 0x7d0e6cf9ffdbc841ULL, 0x3b1ecca31450ca99ULL, 0x6913be30e983e840ULL, 0xad511009956ea71cULL, 0xb1b5b6ba2db4354eULL, 0x4469bdca4e25a005ULL, 0x15af5281ca0f71e1ULL, 0x744598cb8d0e2bf2ULL, 0x593f9b312aa863b7ULL, 0xefb38a6e29a4fc63ULL, 0x6b6aa3a04c2d4a9dULL, 0x3d95eb0ee6bf31e3ULL, 0xa291c3961554bfd5ULL, 0x18169c8eef9bcbf5ULL, 0x115d68bc9d4e2846ULL, 0xba875f18facf7420ULL, 0xd1edfcb8b6e23ebdULL, 0xb00736f2f1e364aeULL, 0x84d929ce6589b6feULL, 0x70b7a2f6da4f7255ULL, 0x0e7253d75c6d4929ULL, 0x04f23a3d574159a7ULL, 0x0a8069ea0b2c108eULL, 0x49d073c56bb11a11ULL, 0x8aab7a1939e4ffd7ULL, 0xcd095a0b0e38acefULL, 0xc9fb60365979f548ULL, 0x92bde697d67f3422ULL, 0xc78933e10514bc61ULL, 0xe1c1d9b975c9b54aULL, 0xd2266160cf1bcd80ULL, 0x9a4492ed78fd8671ULL, 0xb3ccab2a881a9793ULL, 0x72cebf667fe1d088ULL, 0xd6d45b5d985a9427ULL}, { 0xc811a8058c3f55deULL, 0x65f5b43196b50619ULL, 0xf74f96b1d6706e43ULL, 0x859d1e8bcb43d336ULL, 0x5aab8a85ccfa3d84ULL, 0xf9c7bf99c295fcfdULL, 0xa21fd5a1de4b630fULL, 0xcdb3ef763b8b456dULL, 0x803f59f87cf7c385ULL, 0xb27c73be5f31913cULL, 0x98e3ac6633b04821ULL, 0xbf61674c26b8f818ULL, 0x0ffbc995c4c130c8ULL, 0xaaa0862010761a98ULL, 0x6057f342210116aaULL, 0xf63c760c0654cc35ULL, 0x2ddb45cc667d9042ULL, 0xbcf45a964bd40382ULL, 0x68e8a0c3ef3c6f3dULL, 0xa7bd92d269ff73bcULL, 0x290ae20201ed2287ULL, 0xb7de34cde885818fULL, 0xd901eea7dd61059bULL, 0xd6fa273219a03553ULL, 0xd56f1ae874cccec9ULL, 0xea31245c2e83f554ULL, 0x7034555da07be499ULL, 0xce26d2ac56e7bef7ULL, 0xfd161857a5054e38ULL, 0x6a0e7da4527436d1ULL, 0x5bd86a381cde9ff2ULL, 0xcaf7756231770c32ULL, 0xb09aaed9e279c8d0ULL, 0x5def1091c60674dbULL, 0x111046a2515e5045ULL, 0x23536ce4729802fcULL, 0xc50cbcf7f5b63cfaULL, 0x73a16887cd171f03ULL, 0x7d2941afd9f28dbdULL, 0x3f5e3eb45a4f3b9dULL, 0x84eefe361b677140ULL, 0x3db8e3d3e7076271ULL, 0x1a3a28f9f20fd248ULL, 0x7ebc7c75b49e7627ULL, 0x74e5f293c7eb565cULL, 0x18dcf59e4f478ba4ULL, 0x0c6ef44fa9adcb52ULL, 0xc699812d98dac760ULL, 0x788b06dc6e469d0eULL, 0xfc65f8ea7521ec4eULL, 0x30a5f7219e8e0b55ULL, 0x2bec3f65bca57b6bULL, 0xddd04969baf1b75eULL, 0x99904cdbe394ea57ULL, 0x14b201d1e6ea40f6ULL, 0xbbb0c08241284addULL, 0x50f20463bf8f1dffULL, 0xe8d7f93b93cbacb8ULL, 0x4d8cb68e477c86e8ULL, 0xc1dd1b3992268e3fULL, 0x7c5aa11209d62fcbULL, 0x2f3d98abdb35c9aeULL, 0x671369562bfd5ff5ULL, 0x15c1e16c36cee280ULL, 0x1d7eb2edf8f39b17ULL, 0xda94d37db00dfe01ULL, 0x877bc3ec760b8adaULL, 0xcb8495dfe153ae44ULL, 0x05a24773b7b410b3ULL, 0x12857b783c32abdfULL, 0x8eb770d06812513bULL, 0x536739b9d2e3e665ULL, 0x584d57e271b26468ULL, 0xd789c78fc9849725ULL, 0xa935bbfa7d1ae102ULL, 0x8b1537a3dfa64188ULL, 0xd0cd5d9bc378de7aULL, 0x4ac82c9a4d80cfb7ULL, 0x42777f1b83bdb620ULL, 0x72d2883a1d33bd75ULL, 0x5e7a2d4bab6a8f41ULL, 0xf4daab6bbb1c95d9ULL, 0x905cffe7fd8d31b6ULL, 0x83aa6422119b381fULL, 0xc0aefb8442022c49ULL, 0xa0f908c663033ae3ULL, 0xa428af0804938826ULL, 0xade41c341a8a53c7ULL, 0xae7121ee77e6a85dULL, 0xc47f5c4a25929e8cULL, 0xb538e9aa55cdd863ULL, 0x06377aa9dad8eb29ULL, 0xa18ae87bb3279895ULL, 0x6edfda6a35e48414ULL, 0x6b7d9d19825094a7ULL, 0xd41cfa55a4e86cbfULL, 0xe5caedc9ea42c59cULL, 0xa36c351c0e6fc179ULL, 0x5181e4de6fabbf89ULL, 0xfff0c530184d17d4ULL, 0x9d41eb1584045892ULL, 0x1c0d525028d73961ULL, 0xf178ec180ca8856aULL, 0x9a0571018ef811cdULL, 0x4091a27c3ef5efccULL, 0x19af15239f6329d2ULL, 0x347450eff91eb990ULL, 0xe11b4a078dd27759ULL, 0xb9561de5fc601331ULL, 0x912f1f5a2da993c0ULL, 0x1654dcb65ba2191aULL, 0x3e2dde098a6b99ebULL, 0x8a66d71e0f82e3feULL, 0x8c51adb7d55a08d7ULL, 0x4533e50f8941ff7fULL, 0x02e6dd67bd4859ecULL, 0xe068aaba5df6d52fULL, 0xc24826e3ff4a75a5ULL, 0x6c39070d88acddf8ULL, 0x6486548c4691a46fULL, 0xd1bebd26135c7c0cULL, 0xb30f93038f15334aULL, 0x82d9849fc1bf9a69ULL, 0x9c320ba85420fae4ULL, 0xfa528243aff90767ULL, 0x9ed4d6cfe968a308ULL, 0xb825fd582c44b147ULL, 0x9b7691bc5edcb3bbULL, 0xc7ea619048fe6516ULL, 0x1063a61f817af233ULL, 0x47d538683409a693ULL, 0x63c2ce984c6ded30ULL, 0x2a9fdfd86c81d91dULL, 0x7b1e3b06032a6694ULL, 0x666089ebfbd9fd83ULL, 0x0a598ee67375207bULL, 0x07449a140afc495fULL, 0x2ca8a571b6593234ULL, 0x1f986f8a45bbc2fbULL, 0x381aa4a050b372c2ULL, 0x5423a3add81faf3aULL, 0x17273c0b8b86bb6cULL, 0xfe83258dc869b5a2ULL, 0x287902bfd1c980f1ULL, 0xf5a94bd66b3837afULL, 0x88800a79b2caba12ULL, 0x55504310083b0d4cULL, 0xdf36940e07b9eeb2ULL, 0x04d1a7ce6790b2c5ULL, 0x612413fff125b4dcULL, 0x26f12b97c52c124fULL, 0x86082351a62f28acULL, 0xef93632f9937e5e7ULL, 0x3507b052293a1be6ULL, 0xe72c30ae570a9c70ULL, 0xd3586041ae1425e0ULL, 0xde4574b3d79d4cc4ULL, 0x92ba228040c5685aULL, 0xf00b0ca5dc8c271cULL, 0xbe1287f1f69c5a6eULL, 0xf39e317fb1e0dc86ULL, 0x495d114020ec342dULL, 0x699b407e3f18cd4bULL, 0xdca3a9d46ad51528ULL, 0x0d1d14f279896924ULL, 0x0000000000000000ULL, 0x593eb75fa196c61eULL, 0x2e4e78160b116bd8ULL, 0x6d4ae7b058887f8eULL, 0xe65fd013872e3e06ULL, 0x7a6ddbbbd30ec4e2ULL, 0xac97fc89caaef1b1ULL, 0x09ccb33c1e19dbe1ULL, 0x89f3eac462ee1864ULL, 0x7770cf49aa87adc6ULL, 0x56c57eca6557f6d6ULL, 0x03953dda6d6cfb9aULL, 0x36928d884456e07cULL, 0x1eeb8f37959f608dULL, 0x31d6179c4eaaa923ULL, 0x6fac3ad7e5c02662ULL, 0x43049fa653991456ULL, 0xabd3669dc052b8eeULL, 0xaf02c153a7c20a2bULL, 0x3ccb036e3723c007ULL, 0x93c9c23d90e1ca2cULL, 0xc33bc65e2f6ed7d3ULL, 0x4cff56339758249eULL, 0xb1e94e64325d6aa6ULL, 0x37e16d359472420aULL, 0x79f8e661be623f78ULL, 0x5214d90402c74413ULL, 0x482ef1fdf0c8965bULL, 0x13f69bc5ec1609a9ULL, 0x0e88292814e592beULL, 0x4e198b542a107d72ULL, 0xccc00fcbebafe71bULL, 0x1b49c844222b703eULL, 0x2564164da840e9d5ULL, 0x20c6513e1ff4f966ULL, 0xbac3203f910ce8abULL, 0xf2edd1c261c47ef0ULL, 0x814cb945acd361f3ULL, 0x95feb8944a392105ULL, 0x5c9cf02c1622d6adULL, 0x971865f3f77178e9ULL, 0xbd87ba2b9bf0a1f4ULL, 0x444005b259655d09ULL, 0xed75be48247fbc0bULL, 0x7596122e17cff42aULL, 0xb44b091785e97a15ULL, 0x966b854e2755da9fULL, 0xeee0839249134791ULL, 0x32432a4623c652b9ULL, 0xa8465b47ad3e4374ULL, 0xf8b45f2412b15e8bULL, 0x2417f6f078644ba3ULL, 0xfb2162fe7fdda511ULL, 0x4bbbcc279da46dc1ULL, 0x0173e0bdd024a276ULL, 0x22208c59a2bca08aULL, 0x8fc4906db836f34dULL, 0xe4b90d743a6667eaULL, 0x7147b5e0705f46efULL, 0x2782cb2a1508b039ULL, 0xec065ef5f45b1e7dULL, 0x21b5b183cfd05b10ULL, 0xdbe733c060295c77ULL, 0x9fa73672394c017eULL, 0xcf55321186c31c81ULL, 0xd8720e1a0d45a7edULL, 0x3b8f997a3ddf8958ULL, 0x3afc79c7edfb2b2eULL, 0xe9a4198643ef0eceULL, 0x5f09cdf67b4e2d37ULL, 0x4f6a6be9fa34df04ULL, 0xb6add47038a123f9ULL, 0x8d224d0a057eaaa1ULL, 0xc96248b85c1bf7a8ULL, 0xe3fd9760309a2eb5ULL, 0x0b2a6e5ba351820dULL, 0xeb42c4e1fea75722ULL, 0x948d58299a1d8373ULL, 0x7fcf9cc864bad451ULL, 0xa55b4fb5d4b72a50ULL, 0x08bf5381ce3d7997ULL, 0x46a6d8d5e42d04e5ULL, 0xd22b80fc7e308796ULL, 0x57b69e77b57354a0ULL, 0x3969441d8097d0b4ULL, 0x3330cafbf3e2f0cfULL, 0xe28e77dde0be8cc3ULL, 0x62b12e259c494f46ULL, 0xa6ce726fb9dbd1caULL, 0x41e242c1eed14dbaULL, 0x76032ff47aa30fb0ULL}, { 0x45b268a93acde4ccULL, 0xaf7f0be884549d08ULL, 0x048354b3c1468263ULL, 0x925435c2c80efed2ULL, 0xee4e37f27fdffba7ULL, 0x167a33920c60f14dULL, 0xfb123b52ea03e584ULL, 0x4a0cab53fdbb9007ULL, 0x9deaf6380f788a19ULL, 0xcb48ec558f0cb32aULL, 0xb59dc4b2d6fef7e0ULL, 0xdcdbca22f4f3ecb6ULL, 0x11df5813549a9c40ULL, 0xe33fdedf568aced3ULL, 0xa0c1c8124322e9c3ULL, 0x07a56b8158fa6d0dULL, 0x77279579b1e1f3ddULL, 0xd9b18b74422ac004ULL, 0xb8ec2d9fffabc294ULL, 0xf4acf8a82d75914fULL, 0x7bbf69b1ef2b6878ULL, 0xc4f62faf487ac7e1ULL, 0x76ce809cc67e5d0cULL, 0x6711d88f92e4c14cULL, 0x627b99d9243dedfeULL, 0x234aa5c3dfb68b51ULL, 0x909b1f15262dbf6dULL, 0x4f66ea054b62bcb5ULL, 0x1ae2cf5a52aa6ae8ULL, 0xbea053fbd0ce0148ULL, 0xed6808c0e66314c9ULL, 0x43fe16cd15a82710ULL, 0xcd049231a06970f6ULL, 0xe7bc8a6c97cc4cb0ULL, 0x337ce835fcb3b9c0ULL, 0x65def2587cc780f3ULL, 0x52214ede4132bb50ULL, 0x95f15e4390f493dfULL, 0x870839625dd2e0f1ULL, 0x41313c1afb8b66afULL, 0x91720af051b211bcULL, 0x477d427ed4eea573ULL, 0x2e3b4ceef6e3be25ULL, 0x82627834eb0bcc43ULL, 0x9c03e3dd78e724c8ULL, 0x2877328ad9867df9ULL, 0x14b51945e243b0f2ULL, 0x574b0f88f7eb97e2ULL, 0x88b6fa989aa4943aULL, 0x19c4f068cb168586ULL, 0x50ee6409af11faefULL, 0x7df317d5c04eaba4ULL, 0x7a567c5498b4c6a9ULL, 0xb6bbfb804f42188eULL, 0x3cc22bcf3bc5cd0bULL, 0xd04336eaaa397713ULL, 0xf02fac1bec33132cULL, 0x2506dba7f0d3488dULL, 0xd7e65d6bf2c31a1eULL, 0x5eb9b2161ff820f5ULL, 0x842e0650c46e0f9fULL, 0x716beb1d9e843001ULL, 0xa933758cab315ed4ULL, 0x3fe414fda2792265ULL, 0x27c9f1701ef00932ULL, 0x73a4c1ca70a771beULL, 0x94184ba6e76b3d0eULL, 0x40d829ff8c14c87eULL, 0x0fbec3fac77674cbULL, 0x3616a9634a6a9572ULL, 0x8f139119c25ef937ULL, 0xf545ed4d5aea3f9eULL, 0xe802499650ba387bULL, 0x6437e7bd0b582e22ULL, 0xe6559f89e053e261ULL, 0x80ad52e305288dfcULL, 0x6dc55a23e34b9935ULL, 0xde14e0f51ad0ad09ULL, 0xc6390578a659865eULL, 0x96d7617109487cb1ULL, 0xe2d6cb3a21156002ULL, 0x01e915e5779faed1ULL, 0xadb0213f6a77dcb7ULL, 0x9880b76eb9a1a6abULL, 0x5d9f8d248644cf9bULL, 0xfd5e4536c5662658ULL, 0xf1c6b9fe9bacbdfdULL, 0xeacd6341be9979c4ULL, 0xefa7221708405576ULL, 0x510771ecd88e543eULL, 0xc2ba51cb671f043dULL, 0x0ad482ac71af5879ULL, 0xfe787a045cdac936ULL, 0xb238af338e049aedULL, 0xbd866cc94972ee26ULL, 0x615da6ebbd810290ULL, 0x3295fdd08b2c1711ULL, 0xf834046073bf0aeaULL, 0xf3099329758ffc42ULL, 0x1caeb13e7dcfa934ULL, 0xba2307481188832bULL, 0x24efce42874ce65cULL, 0x0e57d61fb0e9da1aULL, 0xb3d1bad6f99b343cULL, 0xc0757b1c893c4582ULL, 0x2b510db8403a9297ULL, 0x5c7698c1f1db614aULL, 0x3e0d0118d5e68cb4ULL, 0xd60f488e855cb4cfULL, 0xae961e0df3cb33d9ULL, 0x3a8e55ab14a00ed7ULL, 0x42170328623789c1ULL, 0x838b6dd19c946292ULL, 0x895fef7ded3b3aebULL, 0xcfcbb8e64e4a3149ULL, 0x064c7e642f65c3dcULL, 0x3d2b3e2a4c5a63daULL, 0x5bd3f340a9210c47ULL, 0xb474d157a1615931ULL, 0xac5934da1de87266ULL, 0x6ee365117af7765bULL, 0xc86ed36716b05c44ULL, 0x9ba6885c201d49c5ULL, 0xb905387a88346c45ULL, 0x131072c4bab9ddffULL, 0xbf49461ea751af99ULL, 0xd52977bc1ce05ba1ULL, 0xb0f785e46027db52ULL, 0x546d30ba6e57788cULL, 0x305ad707650f56aeULL, 0xc987c682612ff295ULL, 0xa5ab8944f5fbc571ULL, 0x7ed528e759f244caULL, 0x8ddcbbce2c7db888ULL, 0xaa154abe328db1baULL, 0x1e619be993ece88bULL, 0x09f2bd9ee813b717ULL, 0x7401aa4b285d1cb3ULL, 0x21858f143195caeeULL, 0x48c381841398d1b8ULL, 0xfcb750d3b2f98889ULL, 0x39a86a998d1ce1b9ULL, 0x1f888e0ce473465aULL, 0x7899568376978716ULL, 0x02cf2ad7ee2341bfULL, 0x85c713b5b3f1a14eULL, 0xff916fe12b4567e7ULL, 0x7c1a0230b7d10575ULL, 0x0c98fcc85eca9ba5ULL, 0xa3e7f720da9e06adULL, 0x6a6031a2bbb1f438ULL, 0x973e74947ed7d260ULL, 0x2cf4663918c0ff9aULL, 0x5f50a7f368678e24ULL, 0x34d983b4a449d4cdULL, 0x68af1b755592b587ULL, 0x7f3c3d022e6dea1bULL, 0xabfc5f5b45121f6bULL, 0x0d71e92d29553574ULL, 0xdffdf5106d4f03d8ULL, 0x081ba87b9f8c19c6ULL, 0xdb7ea1a3ac0981bbULL, 0xbbca12ad66172dfaULL, 0x79704366010829c7ULL, 0x179326777bff5f9cULL, 0x0000000000000000ULL, 0xeb2476a4c906d715ULL, 0x724dd42f0738df6fULL, 0xb752ee6538ddb65fULL, 0x37ffbc863df53ba3ULL, 0x8efa84fcb5c157e6ULL, 0xe9eb5c73272596aaULL, 0x1b0bdabf2535c439ULL, 0x86e12c872a4d4e20ULL, 0x9969a28bce3e087aULL, 0xfafb2eb79d9c4b55ULL, 0x056a4156b6d92cb2ULL, 0x5a3ae6a5debea296ULL, 0x22a3b026a8292580ULL, 0x53c85b3b36ad1581ULL, 0xb11e900117b87583ULL, 0xc51f3a4a3fe56930ULL, 0xe019e1edcf3621bdULL, 0xec811d2591fcba18ULL, 0x445b7d4c4d524a1dULL, 0xa8da6069dcaef005ULL, 0x58f5cc72309de329ULL, 0xd4c062596b7ff570ULL, 0xce22ad0339d59f98ULL, 0x591cd99747024df8ULL, 0x8b90c5aa03187b54ULL, 0xf663d27fc356d0f0ULL, 0xd8589e9135b56ed5ULL, 0x35309651d3d67a1cULL, 0x12f96721cd26732eULL, 0xd28c1c3d441a36acULL, 0x492a946164077f69ULL, 0x2d1d73dc6f5f514bULL, 0x6f0a70f40d68d88aULL, 0x60b4b30eca1eac41ULL, 0xd36509d83385987dULL, 0x0b3d97490630f6a8ULL, 0x9eccc90a96c46577ULL, 0xa20ee2c5ad01a87cULL, 0xe49ab55e0e70a3deULL, 0xa4429ca182646ba0ULL, 0xda97b446db962f6aULL, 0xcced87d4d7f6de27ULL, 0x2ab8185d37a53c46ULL, 0x9f25dcefe15bcba6ULL, 0xc19c6ef9fea3eb53ULL, 0xa764a3931bd884ceULL, 0x2fd2590b817c10f4ULL, 0x56a21a6d80743933ULL, 0xe573a0bb79ef0d0fULL, 0x155c0ca095dc1e23ULL, 0x6c2c4fc694d437e4ULL, 0x10364df623053291ULL, 0xdd32dfc7836c4267ULL, 0x03263f3299bcef6eULL, 0x66f8cd6ae57b6f9dULL, 0x8c35ae2b5be21659ULL, 0x31b3c2e21290f87fULL, 0x93bd2027bf915003ULL, 0x69460e90220d1b56ULL, 0x299e276fae19d328ULL, 0x63928c3c53a2432fULL, 0x7082fef8e91b9ed0ULL, 0xbc6f792c3eed40f7ULL, 0x4c40d537d2de53dbULL, 0x75e8bfae5fc2b262ULL, 0x4da9c0d2a541fd0aULL, 0x4e8fffe03cfd1264ULL, 0x2620e495696fa7e3ULL, 0xe1f0f408b8a98f6cULL, 0xd1aa230fdda6d9c2ULL, 0xc7d0109dd1c6288fULL, 0x8a79d04f7487d585ULL, 0x4694579ba3710ba2ULL, 0x38417f7cfa834f68ULL, 0x1d47a4db0a5007e5ULL, 0x206c9af1460a643fULL, 0xa128ddf734bd4712ULL, 0x8144470672b7232dULL, 0xf2e086cc02105293ULL, 0x182de58dbc892b57ULL, 0xcaa1f9b0f8931dfbULL, 0x6b892447cc2e5ae9ULL, 0xf9dd11850420a43bULL, 0x4be5beb68a243ed6ULL, 0x5584255f19c8d65dULL, 0x3b67404e633fa006ULL, 0xa68db6766c472a1fULL, 0xf78ac79ab4c97e21ULL, 0xc353442e1080aaecULL, 0x9a4f9db95782e714ULL}, { 0x05ba7bc82c9b3220ULL, 0x31a54665f8b65e4fULL, 0xb1b651f77547f4d4ULL, 0x8bfa0d857ba46682ULL, 0x85a96c5aa16a98bbULL, 0x990faef908eb79c9ULL, 0xa15e37a247f4a62dULL, 0x76857dcd5d27741eULL, 0xf8c50b800a1820bcULL, 0xbe65dcb201f7a2b4ULL, 0x666d1b986f9426e7ULL, 0x4cc921bf53c4e648ULL, 0x95410a0f93d9ca42ULL, 0x20cdccaa647ba4efULL, 0x429a4060890a1871ULL, 0x0c4ea4f69b32b38bULL, 0xccda362dde354cd3ULL, 0x96dc23bc7c5b2fa9ULL, 0xc309bb68aa851ab3ULL, 0xd26131a73648e013ULL, 0x021dc52941fc4db2ULL, 0xcd5adab7704be48aULL, 0xa77965d984ed71e6ULL, 0x32386fd61734bba4ULL, 0xe82d6dd538ab7245ULL, 0x5c2147ea6177b4b1ULL, 0x5da1ab70cf091ce8ULL, 0xac907fce72b8bdffULL, 0x57c85dfd972278a8ULL, 0xa4e44c6a6b6f940dULL, 0x3851995b4f1fdfe4ULL, 0x62578ccaed71bc9eULL, 0xd9882bb0c01d2c0aULL, 0x917b9d5d113c503bULL, 0xa2c31e11a87643c6ULL, 0xe463c923a399c1ceULL, 0xf71686c57ea876dcULL, 0x87b4a973e096d509ULL, 0xaf0d567d9d3a5814ULL, 0xb40c2a3f59dcc6f4ULL, 0x3602f88495d121ddULL, 0xd3e1dd3d9836484aULL, 0xf945e71aa46688e5ULL, 0x7518547eb2a591f5ULL, 0x9366587450c01d89ULL, 0x9ea81018658c065bULL, 0x4f54080cbc4603a3ULL, 0x2d0384c65137bf3dULL, 0xdc325078ec861e2aULL, 0xea30a8fc79573ff7ULL, 0x214d2030ca050cb6ULL, 0x65f0322b8016c30cULL, 0x69be96dd1b247087ULL, 0xdb95ee9981e161b8ULL, 0xd1fc1814d9ca05f8ULL, 0x820ed2bbcc0de729ULL, 0x63d76050430f14c7ULL, 0x3bccb0e8a09d3a0fULL, 0x8e40764d573f54a2ULL, 0x39d175c1e16177bdULL, 0x12f5a37c734f1f4bULL, 0xab37c12f1fdfc26dULL, 0x5648b167395cd0f1ULL, 0x6c04ed1537bf42a7ULL, 0xed97161d14304065ULL, 0x7d6c67daab72b807ULL, 0xec17fa87ba4ee83cULL, 0xdfaf79cb0304fbc1ULL, 0x733f060571bc463eULL, 0x78d61c1287e98a27ULL, 0xd07cf48e77b4ada1ULL, 0xb9c262536c90dd26ULL, 0xe2449b5860801605ULL, 0x8fc09ad7f941fcfbULL, 0xfad8cea94be46d0eULL, 0xa343f28b0608eb9fULL, 0x9b126bd04917347bULL, 0x9a92874ae7699c22ULL, 0x1b017c42c4e69ee0ULL, 0x3a4c5c720ee39256ULL, 0x4b6e9f5e3ea399daULL, 0x6ba353f45ad83d35ULL, 0xe7fee0904c1b2425ULL, 0x22d009832587e95dULL, 0x842980c00f1430e2ULL, 0xc6b3c0a0861e2893ULL, 0x087433a419d729f2ULL, 0x341f3dadd42d6c6fULL, 0xee0a3faefbb2a58eULL, 0x4aee73c490dd3183ULL, 0xaab72db5b1a16a34ULL, 0xa92a04065e238fdfULL, 0x7b4b35a1686b6fccULL, 0x6a23bf6ef4a6956cULL, 0x191cb96b851ad352ULL, 0x55d598d4d6de351aULL, 0xc9604de5f2ae7ef3ULL, 0x1ca6c2a3a981e172ULL, 0xde2f9551ad7a5398ULL, 0x3025aaff56c8f616ULL, 0x15521d9d1e2860d9ULL, 0x506fe31cfa45073aULL, 0x189c55f12b647b0bULL, 0x0180ec9aae7ea859ULL, 0x7cec8b40050c105eULL, 0x2350e5198bf94104ULL, 0xef8ad33455cc0dd7ULL, 0x07a7bee16d677f92ULL, 0xe5e325b90de76997ULL, 0x5a061591a26e637aULL, 0xb611ef1618208b46ULL, 0x09f4df3eb7a981abULL, 0x1ebb078ae87dacc0ULL, 0xb791038cb65e231fULL, 0x0fd38d4574b05660ULL, 0x67edf702c1ea8ebeULL, 0xba5f4be0831238cdULL, 0xe3c477c2cefebe5cULL, 0x0dce486c354c1bd2ULL, 0x8c5db36416c31910ULL, 0x26ea9ed1a7627324ULL, 0x039d29b3ef82e5ebULL, 0x9f28fc82cbf2ae02ULL, 0xa8aae89cf05d2786ULL, 0x431aacfa2774b028ULL, 0xcf471f9e31b7a938ULL, 0x581bd0b8e3922ec8ULL, 0xbc78199b400bef06ULL, 0x90fb71c7bf42f862ULL, 0x1f3beb1046030499ULL, 0x683e7a47b55ad8deULL, 0x988f4263a695d190ULL, 0xd808c72a6e638453ULL, 0x0627527bc319d7cbULL, 0xebb04466d72997aeULL, 0xe67e0c0ae2658c7cULL, 0x14d2f107b056c880ULL, 0x7122c32c30400b8cULL, 0x8a7ae11fd5dacedbULL, 0xa0dedb38e98a0e74ULL, 0xad109354dcc615a6ULL, 0x0be91a17f655cc19ULL, 0x8ddd5ffeb8bdb149ULL, 0xbfe53028af890aedULL, 0xd65ba6f5b4ad7a6aULL, 0x7956f0882997227eULL, 0x10e8665532b352f9ULL, 0x0e5361dfdacefe39ULL, 0xcec7f3049fc90161ULL, 0xff62b561677f5f2eULL, 0x975ccf26d22587f0ULL, 0x51ef0f86543baf63ULL, 0x2f1e41ef10cbf28fULL, 0x52722635bbb94a88ULL, 0xae8dbae73344f04dULL, 0x410769d36688fd9aULL, 0xb3ab94de34bbb966ULL, 0x801317928df1aa9bULL, 0xa564a0f0c5113c54ULL, 0xf131d4bebdb1a117ULL, 0x7f71a2f3ea8ef5b5ULL, 0x40878549c8f655c3ULL, 0x7ef14e6944f05decULL, 0xd44663dcf55137d8ULL, 0xf2acfd0d523344fcULL, 0x0000000000000000ULL, 0x5fbc6e598ef5515aULL, 0x16cf342ef1aa8532ULL, 0xb036bd6ddb395c8dULL, 0x13754fe6dd31b712ULL, 0xbbdfa77a2d6c9094ULL, 0x89e7c8ac3a582b30ULL, 0x3c6b0e09cdfa459dULL, 0xc4ae0589c7e26521ULL, 0x49735a777f5fd468ULL, 0xcafd64561d2c9b18ULL, 0xda1502032f9fc9e1ULL, 0x8867243694268369ULL, 0x3782141e3baf8984ULL, 0x9cb5d53124704be9ULL, 0xd7db4a6f1ad3d233ULL, 0xa6f989432a93d9bfULL, 0x9d3539ab8a0ee3b0ULL, 0x53f2caaf15c7e2d1ULL, 0x6e19283c76430f15ULL, 0x3debe2936384edc4ULL, 0x5e3c82c3208bf903ULL, 0x33b8834cb94a13fdULL, 0x6470deb12e686b55ULL, 0x359fd1377a53c436ULL, 0x61caa57902f35975ULL, 0x043a975282e59a79ULL, 0xfd7f70482683129cULL, 0xc52ee913699ccd78ULL, 0x28b9ff0e7dac8d1dULL, 0x5455744e78a09d43ULL, 0xcb7d88ccb3523341ULL, 0x44bd121b4a13cfbaULL, 0x4d49cd25fdba4e11ULL, 0x3e76cb208c06082fULL, 0x3ff627ba2278a076ULL, 0xc28957f204fbb2eaULL, 0x453dfe81e46d67e3ULL, 0x94c1e6953da7621bULL, 0x2c83685cff491764ULL, 0xf32c1197fc4deca5ULL, 0x2b24d6bd922e68f6ULL, 0xb22b78449ac5113fULL, 0x48f3b6edd1217c31ULL, 0x2e9ead75beb55ad6ULL, 0x174fd8b45fd42d6bULL, 0x4ed4e4961238abfaULL, 0x92e6b4eefebeb5d0ULL, 0x46a0d7320bef8208ULL, 0x47203ba8a5912a51ULL, 0x24f75bf8e69e3e96ULL, 0xf0b1382413cf094eULL, 0xfee259fbc901f777ULL, 0x276a724b091cdb7dULL, 0xbdf8f501ee75475fULL, 0x599b3c224dec8691ULL, 0x6d84018f99c1eafeULL, 0x7498b8e41cdb39acULL, 0xe0595e71217c5bb7ULL, 0x2aa43a273c50c0afULL, 0xf50b43ec3f543b6eULL, 0x838e3e2162734f70ULL, 0xc09492db4507ff58ULL, 0x72bfea9fdfc2ee67ULL, 0x11688acf9ccdfaa0ULL, 0x1a8190d86a9836b9ULL, 0x7acbd93bc615c795ULL, 0xc7332c3a286080caULL, 0x863445e94ee87d50ULL, 0xf6966a5fd0d6de85ULL, 0xe9ad814f96d5da1cULL, 0x70a22fb69e3ea3d5ULL, 0x0a69f68d582b6440ULL, 0xb8428ec9c2ee757fULL, 0x604a49e3ac8df12cULL, 0x5b86f90b0c10cb23ULL, 0xe1d9b2eb8f02f3eeULL, 0x29391394d3d22544ULL, 0xc8e0a17f5cd0d6aaULL, 0xb58cc6a5f7a26eadULL, 0x8193fb08238f02c2ULL, 0xd5c68f465b2f9f81ULL, 0xfcff9cd288fdbac5ULL, 0x77059157f359dc47ULL, 0x1d262e3907ff492bULL, 0xfb582233e59ac557ULL, 0xddb2bce242f8b673ULL, 0x2577b76248e096cfULL, 0x6f99c4a6d83da74cULL, 0xc1147e41eb795701ULL, 0xf48baf76912a9337ULL}, { 0x3ef29d249b2c0a19ULL, 0xe9e16322b6f8622fULL, 0x5536994047757f7aULL, 0x9f4d56d5a47b0b33ULL, 0x822567466aa1174cULL, 0xb8f5057deb082fb2ULL, 0xcc48c10bf4475f53ULL, 0x373088d4275dec3aULL, 0x968f4325180aed10ULL, 0x173d232cf7016151ULL, 0xae4ed09f946fcc13ULL, 0xfd4b4741c4539873ULL, 0x1b5b3f0dd9933765ULL, 0x2ffcb0967b644052ULL, 0xe02376d20a89840cULL, 0xa3ae3a70329b18d7ULL, 0x419cbd2335de8526ULL, 0xfafebf115b7c3199ULL, 0x0397074f85aa9b0dULL, 0xc58ad4fb4836b970ULL, 0xbec60be3fc4104a8ULL, 0x1eff36dc4b708772ULL, 0x131fdc33ed8453b6ULL, 0x0844e33e341764d3ULL, 0x0ff11b6eab38cd39ULL, 0x64351f0a7761b85aULL, 0x3b5694f509cfba0eULL, 0x30857084b87245d0ULL, 0x47afb3bd2297ae3cULL, 0xf2ba5c2f6f6b554aULL, 0x74bdc4761f4f70e1ULL, 0xcfdfc64471edc45eULL, 0xe610784c1dc0af16ULL, 0x7aca29d63c113f28ULL, 0x2ded411776a859afULL, 0xac5f211e99a3d5eeULL, 0xd484f949a87ef33bULL, 0x3ce36ca596e013e4ULL, 0xd120f0983a9d432cULL, 0x6bc40464dc597563ULL, 0x69d5f5e5d1956c9eULL, 0x9ae95f043698bb24ULL, 0xc9ecc8da66a4ef44ULL, 0xd69508c8a5b2eac6ULL, 0xc40c2235c0503b80ULL, 0x38c193ba8c652103ULL, 0x1ceec75d46bc9e8fULL, 0xd331011937515ad1ULL, 0xd8e2e56886eca50fULL, 0xb137108d5779c991ULL, 0x709f3b6905ca4206ULL, 0x4feb50831680caefULL, 0xec456af3241bd238ULL, 0x58d673afe181abbeULL, 0x242f54e7cad9bf8cULL, 0x0211f1810dcc19fdULL, 0x90bc4dbb0f43c60aULL, 0x9518446a9da0761dULL, 0xa1bfcbf13f57012aULL, 0x2bde4f8961e172b5ULL, 0x27b853a84f732481ULL, 0xb0b1e643df1f4b61ULL, 0x18cc38425c39ac68ULL, 0xd2b7f7d7bf37d821ULL, 0x3103864a3014c720ULL, 0x14aa246372abfa5cULL, 0x6e600db54ebac574ULL, 0x394765740403a3f3ULL, 0x09c215f0bc71e623ULL, 0x2a58b947e987f045ULL, 0x7b4cdf18b477bdd8ULL, 0x9709b5eb906c6fe0ULL, 0x73083c268060d90bULL, 0xfedc400e41f9037eULL, 0x284948c6e44be9b8ULL, 0x728ecae808065bfbULL, 0x06330e9e17492b1aULL, 0x5950856169e7294eULL, 0xbae4f4fce6c4364fULL, 0xca7bcf95e30e7449ULL, 0x7d7fd186a33e96c2ULL, 0x52836110d85ad690ULL, 0x4dfaa1021b4cd312ULL, 0x913abb75872544faULL, 0xdd46ecb9140f1518ULL, 0x3d659a6b1e869114ULL, 0xc23f2cabd719109aULL, 0xd713fe062dd46836ULL, 0xd0a60656b2fbc1dcULL, 0x221c5a79dd909496ULL, 0xefd26dbca1b14935ULL, 0x0e77eda0235e4fc9ULL, 0xcbfd395b6b68f6b9ULL, 0x0de0eaefa6f4d4c4ULL, 0x0422ff1f1a8532e7ULL, 0xf969b85eded6aa94ULL, 0x7f6e2007aef28f3fULL, 0x3ad0623b81a938feULL, 0x6624ee8b7aada1a7ULL, 0xb682e8ddc856607bULL, 0xa78cc56f281e2a30ULL, 0xc79b257a45faa08dULL, 0x5b4174e0642b30b3ULL, 0x5f638bff7eae0254ULL, 0x4bc9af9c0c05f808ULL, 0xce59308af98b46aeULL, 0x8fc58da9cc55c388ULL, 0x803496c7676d0eb1ULL, 0xf33caae1e70dd7baULL, 0xbb6202326ea2b4bfULL, 0xd5020f87201871cbULL, 0x9d5ca754a9b712ceULL, 0x841669d87de83c56ULL, 0x8a6184785eb6739fULL, 0x420bba6cb0741e2bULL, 0xf12d5b60eac1ce47ULL, 0x76ac35f71283691cULL, 0x2c6bb7d9fecedb5fULL, 0xfccdb18f4c351a83ULL, 0x1f79c012c3160582ULL, 0xf0abadae62a74cb7ULL, 0xe1a5801c82ef06fcULL, 0x67a21845f2cb2357ULL, 0x5114665f5df04d9dULL, 0xbf40fd2d74278658ULL, 0xa0393d3fb73183daULL, 0x05a409d192e3b017ULL, 0xa9fb28cf0b4065f9ULL, 0x25a9a22942bf3d7cULL, 0xdb75e22703463e02ULL, 0xb326e10c5ab5d06cULL, 0xe7968e8295a62de6ULL, 0xb973f3b3636ead42ULL, 0xdf571d3819c30ce5ULL, 0xee549b7229d7cbc5ULL, 0x12992afd65e2d146ULL, 0xf8ef4e9056b02864ULL, 0xb7041e134030e28bULL, 0xc02edd2adad50967ULL, 0x932b4af48ae95d07ULL, 0x6fe6fb7bc6dc4784ULL, 0x239aacb755f61666ULL, 0x401a4bedbdb807d6ULL, 0x485ea8d389af6305ULL, 0xa41bc220adb4b13dULL, 0x753b32b89729f211ULL, 0x997e584bb3322029ULL, 0x1d683193ceda1c7fULL, 0xff5ab6c0c99f818eULL, 0x16bbd5e27f67e3a1ULL, 0xa59d34ee25d233cdULL, 0x98f8ae853b54a2d9ULL, 0x6df70afacb105e79ULL, 0x795d2e99b9bba425ULL, 0x8e437b6744334178ULL, 0x0186f6ce886682f0ULL, 0xebf092a3bb347bd2ULL, 0xbcd7fa62f18d1d55ULL, 0xadd9d7d011c5571eULL, 0x0bd3e471b1bdffdeULL, 0xaa6c2f808eeafef4ULL, 0x5ee57d31f6c880a4ULL, 0xf50fa47ff044fca0ULL, 0x1addc9c351f5b595ULL, 0xea76646d3352f922ULL, 0x0000000000000000ULL, 0x85909f16f58ebea6ULL, 0x46294573aaf12cccULL, 0x0a5512bf39db7d2eULL, 0x78dbd85731dd26d5ULL, 0x29cfbe086c2d6b48ULL, 0x218b5d36583a0f9bULL, 0x152cd2adfacd78acULL, 0x83a39188e2c795bcULL, 0xc3b9da655f7f926aULL, 0x9ecba01b2c1d89c3ULL, 0x07b5f8509f2fa9eaULL, 0x7ee8d6c926940dcfULL, 0x36b67e1aaf3b6ecaULL, 0x86079859702425abULL, 0xfb7849dfd31ab369ULL, 0x4c7c57cc932a51e2ULL, 0xd96413a60e8a27ffULL, 0x263ea566c715a671ULL, 0x6c71fc344376dc89ULL, 0x4a4f595284637af8ULL, 0xdaf314e98b20bcf2ULL, 0x572768c14ab96687ULL, 0x1088db7c682ec8bbULL, 0x887075f9537a6a62ULL, 0x2e7a4658f302c2a2ULL, 0x619116dbe582084dULL, 0xa87dde018326e709ULL, 0xdcc01a779c6997e8ULL, 0xedc39c3dac7d50c8ULL, 0xa60a33a1a078a8c0ULL, 0xc1a82be452b38b97ULL, 0x3f746bea134a88e9ULL, 0xa228ccbebafd9a27ULL, 0xabead94e068c7c04ULL, 0xf48952b178227e50ULL, 0x5cf48cb0fb049959ULL, 0x6017e0156de48abdULL, 0x4438b4f2a73d3531ULL, 0x8c528ae649ff5885ULL, 0xb515ef924dfcfb76ULL, 0x0c661c212e925634ULL, 0xb493195cc59a7986ULL, 0x9cda519a21d1903eULL, 0x32948105b5be5c2dULL, 0x194ace8cd45f2e98ULL, 0x438d4ca238129cdbULL, 0x9b6fa9cabefe39d4ULL, 0x81b26009ef0b8c41ULL, 0xded1ebf691a58e15ULL, 0x4e6da64d9ee6481fULL, 0x54b06f8ecf13fd8aULL, 0x49d85e1d01c9e1f5ULL, 0xafc826511c094ee3ULL, 0xf698a33075ee67adULL, 0x5ac7822eec4db243ULL, 0x8dd47c28c199da75ULL, 0x89f68337db1ce892ULL, 0xcdce37c57c21dda3ULL, 0x530597de503c5460ULL, 0x6a42f2aa543ff793ULL, 0x5d727a7e73621ba9ULL, 0xe232875307459df1ULL, 0x56a19e0fc2dfe477ULL, 0xc61dd3b4cd9c227dULL, 0xe5877f03986a341bULL, 0x949eb2a415c6f4edULL, 0x6206119460289340ULL, 0x6380e75ae84e11b0ULL, 0x8be772b6d6d0f16fULL, 0x50929091d596cf6dULL, 0xe86795ec3e9ee0dfULL, 0x7cf927482b581432ULL, 0xc86a3e14eec26db4ULL, 0x7119cda78dacc0f6ULL, 0xe40189cd100cb6ebULL, 0x92adbc3a028fdff7ULL, 0xb2a017c2d2d3529cULL, 0x200dabf8d05c8d6bULL, 0x34a78f9ba2f77737ULL, 0xe3b4719d8f231f01ULL, 0x45be423c2f5bb7c1ULL, 0xf71e55fefd88e55dULL, 0x6853032b59f3ee6eULL, 0x65b3e9c4ff073aaaULL, 0x772ac3399ae5ebecULL, 0x87816e97f842a75bULL, 0x110e2db2e0484a4bULL, 0x331277cb3dd8deddULL, 0xbd510cac79eb9fa5ULL, 0x352179552a91f5c7ULL}, { 0x8ab0a96846e06a6dULL, 0x43c7e80b4bf0b33aULL, 0x08c9b3546b161ee5ULL, 0x39f1c235eba990beULL, 0xc1bef2376606c7b2ULL, 0x2c209233614569aaULL, 0xeb01523b6fc3289aULL, 0x946953ab935aceddULL, 0x272838f63e13340eULL, 0x8b0455eca12ba052ULL, 0x77a1b2c4978ff8a2ULL, 0xa55122ca13e54086ULL, 0x2276135862d3f1cdULL, 0xdb8ddfde08b76cfeULL, 0x5d1e12c89e4a178aULL, 0x0e56816b03969867ULL, 0xee5f79953303ed59ULL, 0xafed748bab78d71dULL, 0x6d929f2df93e53eeULL, 0xf5d8a8f8ba798c2aULL, 0xf619b1698e39cf6bULL, 0x95ddaf2f749104e2ULL, 0xec2a9c80e0886427ULL, 0xce5c8fd8825b95eaULL, 0xc4e0d9993ac60271ULL, 0x4699c3a5173076f9ULL, 0x3d1b151f50a29f42ULL, 0x9ed505ea2bc75946ULL, 0x34665acfdc7f4b98ULL, 0x61b1fb53292342f7ULL, 0xc721c0080e864130ULL, 0x8693cd1696fd7b74ULL, 0x872731927136b14bULL, 0xd3446c8a63a1721bULL, 0x669a35e8a6680e4aULL, 0xcab658f239509a16ULL, 0xa4e5de4ef42e8ab9ULL, 0x37a7435ee83f08d9ULL, 0x134e6239e26c7f96ULL, 0x82791a3c2df67488ULL, 0x3f6ef00a8329163cULL, 0x8e5a7e42fdeb6591ULL, 0x5caaee4c7981ddb5ULL, 0x19f234785af1e80dULL, 0x255ddde3ed98bd70ULL, 0x50898a32a99cccacULL, 0x28ca4519da4e6656ULL, 0xae59880f4cb31d22ULL, 0x0d9798fa37d6db26ULL, 0x32f968f0b4ffcd1aULL, 0xa00f09644f258545ULL, 0xfa3ad5175e24de72ULL, 0xf46c547c5db24615ULL, 0x713e80fbff0f7e20ULL, 0x7843cf2b73d2aafaULL, 0xbd17ea36aedf62b4ULL, 0xfd111bacd16f92cfULL, 0x4abaa7dbc72d67e0ULL, 0xb3416b5dad49fad3ULL, 0xbca316b24914a88bULL, 0x15d150068aecf914ULL, 0xe27c1debe31efc40ULL, 0x4fe48c759beda223ULL, 0x7edcfd141b522c78ULL, 0x4e5070f17c26681cULL, 0xe696cac15815f3bcULL, 0x35d2a64b3bb481a7ULL, 0x800cff29fe7dfdf6ULL, 0x1ed9fac3d5baa4b0ULL, 0x6c2663a91ef599d1ULL, 0x03c1199134404341ULL, 0xf7ad4ded69f20554ULL, 0xcd9d9649b61bd6abULL, 0xc8c3bde7eadb1368ULL, 0xd131899fb02afb65ULL, 0x1d18e352e1fae7f1ULL, 0xda39235aef7ca6c1ULL, 0xa1bbf5e0a8ee4f7aULL, 0x91377805cf9a0b1eULL, 0x3138716180bf8e5bULL, 0xd9f83acbdb3ce580ULL, 0x0275e515d38b897eULL, 0x472d3f21f0fbbcc6ULL, 0x2d946eb7868ea395ULL, 0xba3c248d21942e09ULL, 0xe7223645bfde3983ULL, 0xff64feb902e41bb1ULL, 0xc97741630d10d957ULL, 0xc3cb1722b58d4eccULL, 0xa27aec719cae0c3bULL, 0x99fecb51a48c15fbULL, 0x1465ac826d27332bULL, 0xe1bd047ad75ebf01ULL, 0x79f733af941960c5ULL, 0x672ec96c41a3c475ULL, 0xc27feba6524684f3ULL, 0x64efd0fd75e38734ULL, 0xed9e60040743ae18ULL, 0xfb8e2993b9ef144dULL, 0x38453eb10c625a81ULL, 0x6978480742355c12ULL, 0x48cf42ce14a6ee9eULL, 0x1cac1fd606312dceULL, 0x7b82d6ba4792e9bbULL, 0x9d141c7b1f871a07ULL, 0x5616b80dc11c4a2eULL, 0xb849c198f21fa777ULL, 0x7ca91801c8d9a506ULL, 0xb1348e487ec273adULL, 0x41b20d1e987b3a44ULL, 0x7460ab55a3cfbbe3ULL, 0x84e628034576f20aULL, 0x1b87d16d897a6173ULL, 0x0fe27defe45d5258ULL, 0x83cde6b8ca3dbeb7ULL, 0x0c23647ed01d1119ULL, 0x7a362a3ea0592384ULL, 0xb61f40f3f1893f10ULL, 0x75d457d1440471dcULL, 0x4558da34237035b8ULL, 0xdca6116587fc2043ULL, 0x8d9b67d3c9ab26d0ULL, 0x2b0b5c88ee0e2517ULL, 0x6fe77a382ab5da90ULL, 0x269cc472d9d8fe31ULL, 0x63c41e46faa8cb89ULL, 0xb7abbc771642f52fULL, 0x7d1de4852f126f39ULL, 0xa8c6ba3024339ba0ULL, 0x600507d7cee888c8ULL, 0x8fee82c61a20afaeULL, 0x57a2448926d78011ULL, 0xfca5e72836a458f0ULL, 0x072bcebb8f4b4cbdULL, 0x497bbe4af36d24a1ULL, 0x3cafe99bb769557dULL, 0x12fa9ebd05a7b5a9ULL, 0xe8c04baa5b836bdbULL, 0x4273148fac3b7905ULL, 0x908384812851c121ULL, 0xe557d3506c55b0fdULL, 0x72ff996acb4f3d61ULL, 0x3eda0c8e64e2dc03ULL, 0xf0868356e6b949e9ULL, 0x04ead72abb0b0ffcULL, 0x17a4b5135967706aULL, 0xe3c8e16f04d5367fULL, 0xf84f30028daf570cULL, 0x1846c8fcbd3a2232ULL, 0x5b8120f7f6ca9108ULL, 0xd46fa231ecea3ea6ULL, 0x334d947453340725ULL, 0x58403966c28ad249ULL, 0xbed6f3a79a9f21f5ULL, 0x68ccb483a5fe962dULL, 0xd085751b57e1315aULL, 0xfed0023de52fd18eULL, 0x4b0e5b5f20e6addfULL, 0x1a332de96eb1ab4cULL, 0xa3ce10f57b65c604ULL, 0x108f7ba8d62c3cd7ULL, 0xab07a3a11073d8e1ULL, 0x6b0dad1291bed56cULL, 0xf2f366433532c097ULL, 0x2e557726b2cee0d4ULL, 0x0000000000000000ULL, 0xcb02a476de9b5029ULL, 0xe4e32fd48b9e7ac2ULL, 0x734b65ee2c84f75eULL, 0x6e5386bccd7e10afULL, 0x01b4fc84e7cbca3fULL, 0xcfe8735c65905fd5ULL, 0x3613bfda0ff4c2e6ULL, 0x113b872c31e7f6e8ULL, 0x2fe18ba255052aebULL, 0xe974b72ebc48a1e4ULL, 0x0abc5641b89d979bULL, 0xb46aa5e62202b66eULL, 0x44ec26b0c4bbff87ULL, 0xa6903b5b27a503c7ULL, 0x7f680190fc99e647ULL, 0x97a84a3aa71a8d9cULL, 0xdd12ede16037ea7cULL, 0xc554251ddd0dc84eULL, 0x88c54c7d956be313ULL, 0x4d91696048662b5dULL, 0xb08072cc9909b992ULL, 0xb5de5962c5c97c51ULL, 0x81b803ad19b637c9ULL, 0xb2f597d94a8230ecULL, 0x0b08aac55f565da4ULL, 0xf1327fd2017283d6ULL, 0xad98919e78f35e63ULL, 0x6ab9519676751f53ULL, 0x24e921670a53774fULL, 0xb9fd3d1c15d46d48ULL, 0x92f66194fbda485fULL, 0x5a35dc7311015b37ULL, 0xded3f4705477a93dULL, 0xc00a0eb381cd0d8dULL, 0xbb88d809c65fe436ULL, 0x16104997beacba55ULL, 0x21b70ac95693b28cULL, 0x59f4c5e225411876ULL, 0xd5db5eb50b21f499ULL, 0x55d7a19cf55c096fULL, 0xa97246b4c3f8519fULL, 0x8552d487a2bd3835ULL, 0x54635d181297c350ULL, 0x23c2efdc85183bf2ULL, 0x9f61f96ecc0c9379ULL, 0x534893a39ddc8fedULL, 0x5edf0b59aa0a54cbULL, 0xac2c6d1a9f38945cULL, 0xd7aebba0d8aa7de7ULL, 0x2abfa00c09c5ef28ULL, 0xd84cc64f3cf72fbfULL, 0x2003f64db15878b3ULL, 0xa724c7dfc06ec9f8ULL, 0x069f323f68808682ULL, 0xcc296acd51d01c94ULL, 0x055e2bae5cc0c5c3ULL, 0x6270e2c21d6301b6ULL, 0x3b842720382219c0ULL, 0xd2f0900e846ab824ULL, 0x52fc6f277a1745d2ULL, 0xc6953c8ce94d8b0fULL, 0xe009f8fe3095753eULL, 0x655b2c7992284d0bULL, 0x984a37d54347dfc4ULL, 0xeab5aebf8808e2a5ULL, 0x9a3fd2c090cc56baULL, 0x9ca0e0fff84cd038ULL, 0x4c2595e4afade162ULL, 0xdf6708f4b3bc6302ULL, 0xbf620f237d54ebcaULL, 0x93429d101c118260ULL, 0x097d4fd08cddd4daULL, 0x8c2f9b572e60ecefULL, 0x708a7c7f18c4b41fULL, 0x3a30dba4dfe9d3ffULL, 0x4006f19a7fb0f07bULL, 0x5f6bf7dd4dc19ef4ULL, 0x1f6d064732716e8fULL, 0xf9fbcc866a649d33ULL, 0x308c8de567744464ULL, 0x8971b0f972a0292cULL, 0xd61a47243f61b7d8ULL, 0xefeb8511d4c82766ULL, 0x961cb6be40d147a3ULL, 0xaab35f25f7b812deULL, 0x76154e407044329dULL, 0x513d76b64e570693ULL, 0xf3479ac7d2f90aa8ULL, 0x9b8b2e4477079c85ULL, 0x297eb99d3d85ac69ULL}, { 0x7e37e62dfc7d40c3ULL, 0x776f25a4ee939e5bULL, 0xe045c850dd8fb5adULL, 0x86ed5ba711ff1952ULL, 0xe91d0bd9cf616b35ULL, 0x37e0ab256e408ffbULL, 0x9607f6c031025a7aULL, 0x0b02f5e116d23c9dULL, 0xf3d8486bfb50650cULL, 0x621cff27c40875f5ULL, 0x7d40cb71fa5fd34aULL, 0x6daa6616daa29062ULL, 0x9f5f354923ec84e2ULL, 0xec847c3dc507c3b3ULL, 0x025a3668043ce205ULL, 0xa8bf9e6c4dac0b19ULL, 0xfa808be2e9bebb94ULL, 0xb5b99c5277c74fa3ULL, 0x78d9bc95f0397bccULL, 0xe332e50cdbad2624ULL, 0xc74fce129332797eULL, 0x1729eceb2ea709abULL, 0xc2d6b9f69954d1f8ULL, 0x5d898cbfbab8551aULL, 0x859a76fb17dd8adbULL, 0x1be85886362f7fb5ULL, 0xf6413f8ff136cd8aULL, 0xd3110fa5bbb7e35cULL, 0x0a2feed514cc4d11ULL, 0xe83010edcd7f1ab9ULL, 0xa1e75de55f42d581ULL, 0xeede4a55c13b21b6ULL, 0xf2f5535ff94e1480ULL, 0x0cc1b46d1888761eULL, 0xbce15fdb6529913bULL, 0x2d25e8975a7181c2ULL, 0x71817f1ce2d7a554ULL, 0x2e52c5cb5c53124bULL, 0xf9f7a6beef9c281dULL, 0x9e722e7d21f2f56eULL, 0xce170d9b81dca7e6ULL, 0x0e9b82051cb4941bULL, 0x1e712f623c49d733ULL, 0x21e45cfa42f9f7dcULL, 0xcb8e7a7f8bba0f60ULL, 0x8e98831a010fb646ULL, 0x474ccf0d8e895b23ULL, 0xa99285584fb27a95ULL, 0x8cc2b57205335443ULL, 0x42d5b8e984eff3a5ULL, 0x012d1b34021e718cULL, 0x57a6626aae74180bULL, 0xff19fc06e3d81312ULL, 0x35ba9d4d6a7c6dfeULL, 0xc9d44c178f86ed65ULL, 0x506523e6a02e5288ULL, 0x03772d5c06229389ULL, 0x8b01f4fe0b691ec0ULL, 0xf8dabd8aed825991ULL, 0x4c4e3aec985b67beULL, 0xb10df0827fbf96a9ULL, 0x6a69279ad4f8dae1ULL, 0xe78689dcd3d5ff2eULL, 0x812e1a2b1fa553d1ULL, 0xfbad90d6eba0ca18ULL, 0x1ac543b234310e39ULL, 0x1604f7df2cb97827ULL, 0xa6241c6951189f02ULL, 0x753513cceaaf7c5eULL, 0x64f2a59fc84c4efaULL, 0x247d2b1e489f5f5aULL, 0xdb64d718ab474c48ULL, 0x79f4a7a1f2270a40ULL, 0x1573da832a9bebaeULL, 0x3497867968621c72ULL, 0x514838d2a2302304ULL, 0xf0af6537fd72f685ULL, 0x1d06023e3a6b44baULL, 0x678588c3ce6edd73ULL, 0x66a893f7cc70acffULL, 0xd4d24e29b5eda9dfULL, 0x3856321470ea6a6cULL, 0x07c3418c0e5a4a83ULL, 0x2bcbb22f5635bacdULL, 0x04b46cd00878d90aULL, 0x06ee5ab80c443b0fULL, 0x3b211f4876c8f9e5ULL, 0x0958c38912eede98ULL, 0xd14b39cdbf8b0159ULL, 0x397b292072f41be0ULL, 0x87c0409313e168deULL, 0xad26e98847caa39fULL, 0x4e140c849c6785bbULL, 0xd5ff551db7f3d853ULL, 0xa0ca46d15d5ca40dULL, 0xcd6020c787fe346fULL, 0x84b76dcf15c3fb57ULL, 0xdefda0fca121e4ceULL, 0x4b8d7b6096012d3dULL, 0x9ac642ad298a2c64ULL, 0x0875d8bd10f0af14ULL, 0xb357c6ea7b8374acULL, 0x4d6321d89a451632ULL, 0xeda96709c719b23fULL, 0xf76c24bbf328bc06ULL, 0xc662d526912c08f2ULL, 0x3ce25ec47892b366ULL, 0xb978283f6f4f39bdULL, 0xc08c8f9e9d6833fdULL, 0x4f3917b09e79f437ULL, 0x593de06fb2c08c10ULL, 0xd6887841b1d14bdaULL, 0x19b26eee32139db0ULL, 0xb494876675d93e2fULL, 0x825937771987c058ULL, 0x90e9ac783d466175ULL, 0xf1827e03ff6c8709ULL, 0x945dc0a8353eb87fULL, 0x4516f9658ab5b926ULL, 0x3f9573987eb020efULL, 0xb855330b6d514831ULL, 0x2ae6a91b542bcb41ULL, 0x6331e413c6160479ULL, 0x408f8e8180d311a0ULL, 0xeff35161c325503aULL, 0xd06622f9bd9570d5ULL, 0x8876d9a20d4b8d49ULL, 0xa5533135573a0c8bULL, 0xe168d364df91c421ULL, 0xf41b09e7f50a2f8fULL, 0x12b09b0f24c1a12dULL, 0xda49cc2ca9593dc4ULL, 0x1f5c34563e57a6bfULL, 0x54d14f36a8568b82ULL, 0xaf7cdfe043f6419aULL, 0xea6a2685c943f8bcULL, 0xe5dcbfb4d7e91d2bULL, 0xb27addde799d0520ULL, 0x6b443caed6e6ab6dULL, 0x7bae91c9f61be845ULL, 0x3eb868ac7cae5163ULL, 0x11c7b65322e332a4ULL, 0xd23c1491b9a992d0ULL, 0x8fb5982e0311c7caULL, 0x70ac6428e0c9d4d8ULL, 0x895bc2960f55fcc5ULL, 0x76423e90ec8defd7ULL, 0x6ff0507ede9e7267ULL, 0x3dcf45f07a8cc2eaULL, 0x4aa06054941f5cb1ULL, 0x5810fb5bb0defd9cULL, 0x5efea1e3bc9ac693ULL, 0x6edd4b4adc8003ebULL, 0x741808f8e8b10dd2ULL, 0x145ec1b728859a22ULL, 0x28bc9f7350172944ULL, 0x270a06424ebdccd3ULL, 0x972aedf4331c2bf6ULL, 0x059977e40a66a886ULL, 0x2550302a4a812ed6ULL, 0xdd8a8da0a7037747ULL, 0xc515f87a970e9b7bULL, 0x3023eaa9601ac578ULL, 0xb7e3aa3a73fbada6ULL, 0x0fb699311eaae597ULL, 0x0000000000000000ULL, 0x310ef19d6204b4f4ULL, 0x229371a644db6455ULL, 0x0decaf591a960792ULL, 0x5ca4978bb8a62496ULL, 0x1c2b190a38753536ULL, 0x41a295b582cd602cULL, 0x3279dcc16426277dULL, 0xc1a194aa9f764271ULL, 0x139d803b26dfd0a1ULL, 0xae51c4d441e83016ULL, 0xd813fa44ad65dfc1ULL, 0xac0bf2bc45d4d213ULL, 0x23be6a9246c515d9ULL, 0x49d74d08923dcf38ULL, 0x9d05032127d066e7ULL, 0x2f7fdeff5e4d63c7ULL, 0xa47e2a0155247d07ULL, 0x99b16ff12fa8bfedULL, 0x4661d4398c972aafULL, 0xdfd0bbc8a33f9542ULL, 0xdca79694a51d06cbULL, 0xb020ebb67da1e725ULL, 0xba0f0563696daa34ULL, 0xe4f1a480d5f76ca7ULL, 0xc438e34e9510eaf7ULL, 0x939e81243b64f2fcULL, 0x8defae46072d25cfULL, 0x2c08f3a3586ff04eULL, 0xd7a56375b3cf3a56ULL, 0x20c947ce40e78650ULL, 0x43f8a3dd86f18229ULL, 0x568b795eac6a6987ULL, 0x8003011f1dbb225dULL, 0xf53612d3f7145e03ULL, 0x189f75da300dec3cULL, 0x9570db9c3720c9f3ULL, 0xbb221e576b73dbb8ULL, 0x72f65240e4f536ddULL, 0x443be25188abc8aaULL, 0xe21ffe38d9b357a8ULL, 0xfd43ca6ee7e4f117ULL, 0xcaa3614b89a47eecULL, 0xfe34e732e1c6629eULL, 0x83742c431b99b1d4ULL, 0xcf3a16af83c2d66aULL, 0xaae5a8044990e91cULL, 0x26271d764ca3bd5fULL, 0x91c4b74c3f5810f9ULL, 0x7c6dd045f841a2c6ULL, 0x7f1afd19fe63314fULL, 0xc8f957238d989ce9ULL, 0xa709075d5306ee8eULL, 0x55fc5402aa48fa0eULL, 0x48fa563c9023beb4ULL, 0x65dfbeabca523f76ULL, 0x6c877d22d8bce1eeULL, 0xcc4d3bf385e045e3ULL, 0xbebb69b36115733eULL, 0x10eaad6720fd4328ULL, 0xb6ceb10e71e5dc2aULL, 0xbdcc44ef6737e0b7ULL, 0x523f158ea412b08dULL, 0x989c74c52db6ce61ULL, 0x9beb59992b945de8ULL, 0x8a2cefca09776f4cULL, 0xa3bd6b8d5b7e3784ULL, 0xeb473db1cb5d8930ULL, 0xc3fba2c29b4aa074ULL, 0x9c28181525ce176bULL, 0x683311f2d0c438e4ULL, 0x5fd3bad7be84b71fULL, 0xfc6ed15ae5fa809bULL, 0x36cdb0116c5efe77ULL, 0x29918447520958c8ULL, 0xa29070b959604608ULL, 0x53120ebaa60cc101ULL, 0x3a0c047c74d68869ULL, 0x691e0ac6d2da4968ULL, 0x73db4974e6eb4751ULL, 0x7a838afdf40599c9ULL, 0x5a4acd33b4e21f99ULL, 0x6046c94fc03497f0ULL, 0xe6ab92e8d1cb8ea2ULL, 0x3354c7f5663856f1ULL, 0xd93ee170af7bae4dULL, 0x616bd27bc22ae67cULL, 0x92b39a10397a8370ULL, 0xabc8b3304b8e9890ULL, 0xbf967287630b02b2ULL, 0x5b67d607b6fc6e15ULL}, { 0xd031c397ce553fe6ULL, 0x16ba5b01b006b525ULL, 0xa89bade6296e70c8ULL, 0x6a1f525d77d3435bULL, 0x6e103570573dfa0bULL, 0x660efb2a17fc95abULL, 0x76327a9e97634bf6ULL, 0x4bad9d6462458bf5ULL, 0xf1830caedbc3f748ULL, 0xc5c8f542669131ffULL, 0x95044a1cdc48b0cbULL, 0x892962df3cf8b866ULL, 0xb0b9e208e930c135ULL, 0xa14fb3f0611a767cULL, 0x8d2605f21c160136ULL, 0xd6b71922fecc549eULL, 0x37089438a5907d8bULL, 0x0b5da38e5803d49cULL, 0x5a5bcc9cea6f3cbcULL, 0xedae246d3b73ffe5ULL, 0xd2b87e0fde22edceULL, 0x5e54abb1ca8185ecULL, 0x1de7f88fe80561b9ULL, 0xad5e1a870135a08cULL, 0x2f2adbd665cecc76ULL, 0x5780b5a782f58358ULL, 0x3edc8a2eede47b3fULL, 0xc9d95c3506bee70fULL, 0x83be111d6c4e05eeULL, 0xa603b90959367410ULL, 0x103c81b4809fde5dULL, 0x2c69b6027d0c774aULL, 0x399080d7d5c87953ULL, 0x09d41e16487406b4ULL, 0xcdd63b1826505e5fULL, 0xf99dc2f49b0298e8ULL, 0x9cd0540a943cb67fULL, 0xbca84b7f891f17c5ULL, 0x723d1db3b78df2a6ULL, 0x78aa6e71e73b4f2eULL, 0x1433e699a071670dULL, 0x84f21be454620782ULL, 0x98df3327b4d20f2fULL, 0xf049dce2d3769e5cULL, 0xdb6c60199656eb7aULL, 0x648746b2078b4783ULL, 0x32cd23598dcbadcfULL, 0x1ea4955bf0c7da85ULL, 0xe9a143401b9d46b5ULL, 0xfd92a5d9bbec21b8ULL, 0xc8138c790e0b8e1bULL, 0x2ee00b9a6d7ba562ULL, 0xf85712b893b7f1fcULL, 0xeb28fed80bea949dULL, 0x564a65eb8a40ea4cULL, 0x6c9988e8474a2823ULL, 0x4535898b121d8f2dULL, 0xabd8c03231accbf4ULL, 0xba2e91cab9867cbdULL, 0x7960be3def8e263aULL, 0x0c11a977602fd6f0ULL, 0xcb50e1ad16c93527ULL, 0xeae22e94035ffd89ULL, 0x2866d12f5de2ce1aULL, 0xff1b1841ab9bf390ULL, 0x9f9339de8cfe0d43ULL, 0x964727c8c48a0bf7ULL, 0x524502c6aaae531cULL, 0x9b9c5ef3ac10b413ULL, 0x4fa2fa4942ab32a5ULL, 0x3f165a62e551122bULL, 0xc74148da76e6e3d7ULL, 0x924840e5e464b2a7ULL, 0xd372ae43d69784daULL, 0x233b72a105e11a86ULL, 0xa48a04914941a638ULL, 0xb4b68525c9de7865ULL, 0xddeabaaca6cf8002ULL, 0x0a9773c250b6bd88ULL, 0xc284ffbb5ebd3393ULL, 0x8ba0df472c8f6a4eULL, 0x2aef6cb74d951c32ULL, 0x427983722a318d41ULL, 0x73f7cdffbf389bb2ULL, 0x074c0af9382c026cULL, 0x8a6a0f0b243a035aULL, 0x6fdae53c5f88931fULL, 0xc68b98967e538ac3ULL, 0x44ff59c71aa8e639ULL, 0xe2fce0ce439e9229ULL, 0xa20cde2479d8cd40ULL, 0x19e89fa2c8ebd8e9ULL, 0xf446bbcff398270cULL, 0x43b3533e2284e455ULL, 0xd82f0dcd8e945046ULL, 0x51066f12b26ce820ULL, 0xe73957af6bc5426dULL, 0x081ece5a40c16fa0ULL, 0x3b193d4fc5bfab7bULL, 0x7fe66488df174d42ULL, 0x0e9814ef705804d8ULL, 0x8137ac857c39d7c6ULL, 0xb1733244e185a821ULL, 0x695c3f896f11f867ULL, 0xf6cf0657e3eff524ULL, 0x1aabf276d02963d5ULL, 0x2da3664e75b91e5eULL, 0x0289bd981077d228ULL, 0x90c1fd7df413608fULL, 0x3c5537b6fd93a917ULL, 0xaa12107e3919a2e0ULL, 0x0686dab530996b78ULL, 0xdaa6b0559ee3826eULL, 0xc34e2ff756085a87ULL, 0x6d5358a44fff4137ULL, 0xfc587595b35948acULL, 0x7ca5095cc7d5f67eULL, 0xfb147f6c8b754ac0ULL, 0xbfeb26ab91ddacf9ULL, 0x6896efc567a49173ULL, 0xca9a31e11e7c5c33ULL, 0xbbe44186b13315a9ULL, 0x0ddb793b689abfe4ULL, 0x70b4a02ba7fa208eULL, 0xe47a3a7b7307f951ULL, 0x8cecd5be14a36822ULL, 0xeeed49b923b144d9ULL, 0x17708b4db8b3dc31ULL, 0x6088219f2765fed3ULL, 0xb3fa8fdcf1f27a09ULL, 0x910b2d31fca6099bULL, 0x0f52c4a378ed6dccULL, 0x50ccbf5ebad98134ULL, 0x6bd582117f662a4fULL, 0x94ce9a50d4fdd9dfULL, 0x2b25bcfb45207526ULL, 0x67c42b661f49fcbfULL, 0x492420fc723259ddULL, 0x03436dd418c2bb3cULL, 0x1f6e4517f872b391ULL, 0xa08563bc69af1f68ULL, 0xd43ea4baeebb86b6ULL, 0x01cad04c08b56914ULL, 0xac94cacb0980c998ULL, 0x54c3d8739a373864ULL, 0x26fec5c02dbacac2ULL, 0xdea9d778be0d3b3eULL, 0x040f672d20eeb950ULL, 0xe5b0ea377bb29045ULL, 0xf30ab136cbb42560ULL, 0x62019c0737122cfbULL, 0xe86b930c13282fa1ULL, 0xcc1ceb542ee5374bULL, 0x538fd28aa21b3a08ULL, 0x1b61223ad89c0ac1ULL, 0x36c24474ad25149fULL, 0x7a23d3e9f74c9d06ULL, 0xbe21f6e79968c5edULL, 0xcf5f868036278c77ULL, 0xf705d61beb5a9c30ULL, 0x4d2b47d152dce08dULL, 0x5f9e7bfdc234ecf8ULL, 0x247778583dcd18eaULL, 0x867ba67c4415d5aaULL, 0x4ce1979d5a698999ULL, 0x0000000000000000ULL, 0xec64f42133c696f1ULL, 0xb57c5569c16b1171ULL, 0xc1c7926f467f88afULL, 0x654d96fe0f3e2e97ULL, 0x15f936d5a8c40e19ULL, 0xb8a72c52a9f1ae95ULL, 0xa9517daa21db19dcULL, 0x58d27104fa18ee94ULL, 0x5918a148f2ad8780ULL, 0x5cdd1629daf657c4ULL, 0x8274c15164fb6cfaULL, 0xd1fb13dbc6e056f2ULL, 0x7d6fd910cf609f6aULL, 0xb63f38bdd9a9aa4dULL, 0x3d9fe7faf526c003ULL, 0x74bbc706871499deULL, 0xdf630734b6b8522aULL, 0x3ad3ed03cd0ac26fULL, 0xfadeaf2083c023d4ULL, 0xc00d42234ecae1bbULL, 0x8538cba85cd76e96ULL, 0xc402250e6e2458ebULL, 0x47bc3413026a5d05ULL, 0xafd7a71f114272a4ULL, 0x978df784cc3f62e3ULL, 0xb96dfc1ea144c781ULL, 0x21b2cf391596c8aeULL, 0x318e4e8d950916f3ULL, 0xce9556cc3e92e563ULL, 0x385a509bdd7d1047ULL, 0x358129a0b5e7afa3ULL, 0xe6f387e363702b79ULL, 0xe0755d5653e94001ULL, 0x7be903a5fff9f412ULL, 0x12b53c2c90e80c75ULL, 0x3307f315857ec4dbULL, 0x8fafb86a0c61d31eULL, 0xd9e5dd8186213952ULL, 0x77f8aad29fd622e2ULL, 0x25bda814357871feULL, 0x7571174a8fa1f0caULL, 0x137fec60985d6561ULL, 0x30449ec19dbc7fe7ULL, 0xa540d4dd41f4cf2cULL, 0xdc206ae0ae7ae916ULL, 0x5b911cd0e2da55a8ULL, 0xb2305f90f947131dULL, 0x344bf9ecbd52c6b7ULL, 0x5d17c665d2433ed0ULL, 0x18224feec05eb1fdULL, 0x9e59e992844b6457ULL, 0x9a568ebfa4a5dd07ULL, 0xa3c60e68716da454ULL, 0x7e2cb4c4d7a22456ULL, 0x87b176304ca0bcbeULL, 0x413aeea632f3367dULL, 0x9915e36bbc67663bULL, 0x40f03eea3a465f69ULL, 0x1c2d28c3e0b008adULL, 0x4e682a054a1e5bb1ULL, 0x05c5b761285bd044ULL, 0xe1bf8d1a5b5c2915ULL, 0xf2c0617ac3014c74ULL, 0xb7f5e8f1d11cc359ULL, 0x63cb4c4b3fa745efULL, 0x9d1a84469c89df6bULL, 0xe33630824b2bfb3dULL, 0xd5f474f6e60eefa2ULL, 0xf58c6b83fb2d4e18ULL, 0x4676e45f0adf3411ULL, 0x20781f751d23a1baULL, 0xbd629b3381aa7ed1ULL, 0xae1d775319f71bb0ULL, 0xfed1c80da32e9a84ULL, 0x5509083f92825170ULL, 0x29ac01635557a70eULL, 0xa7c9694551831d04ULL, 0x8e65682604d4ba0aULL, 0x11f651f8882ab749ULL, 0xd77dc96ef6793d8aULL, 0xef2799f52b042dcdULL, 0x48eef0b07a8730c9ULL, 0x22f1a2ed0d547392ULL, 0x6142f1d32fd097c7ULL, 0x4a674d286af0e2e1ULL, 0x80fd7cc9748cbed2ULL, 0x717e7067af4f499aULL, 0x938290a9ecd1dbb3ULL, 0x88e3b293344dd172ULL, 0x2734158c250fa3d6ULL} }; #endif libengine-gost-openssl-3.0.2/gosthash2012_ref.h000066400000000000000000000037261446070765000212560ustar00rootroot00000000000000/* * Portable implementation of core functions for GOST R 34.11-2012. * * Copyright (c) 2013 Cryptocom LTD. * This file is distributed under the same license as OpenSSL. * * Author: Alexey Degtyarev * */ #ifdef __GOST3411_HAS_SSE2__ # error "GOST R 34.11-2012: portable implementation disabled in config.h" #endif #define X(x, y, z) { \ z->QWORD[0] = x->QWORD[0] ^ y->QWORD[0]; \ z->QWORD[1] = x->QWORD[1] ^ y->QWORD[1]; \ z->QWORD[2] = x->QWORD[2] ^ y->QWORD[2]; \ z->QWORD[3] = x->QWORD[3] ^ y->QWORD[3]; \ z->QWORD[4] = x->QWORD[4] ^ y->QWORD[4]; \ z->QWORD[5] = x->QWORD[5] ^ y->QWORD[5]; \ z->QWORD[6] = x->QWORD[6] ^ y->QWORD[6]; \ z->QWORD[7] = x->QWORD[7] ^ y->QWORD[7]; \ } # define __XLPS_FOR for (_i = 0; _i <= 7; _i++) #ifndef __GOST3411_BIG_ENDIAN__ # define _datai _i #else # define _datai 7 - _i #endif #define XLPS(x, y, data) { \ register unsigned long long r0, r1, r2, r3, r4, r5, r6, r7; \ int _i; \ \ r0 = x->QWORD[0] ^ y->QWORD[0]; \ r1 = x->QWORD[1] ^ y->QWORD[1]; \ r2 = x->QWORD[2] ^ y->QWORD[2]; \ r3 = x->QWORD[3] ^ y->QWORD[3]; \ r4 = x->QWORD[4] ^ y->QWORD[4]; \ r5 = x->QWORD[5] ^ y->QWORD[5]; \ r6 = x->QWORD[6] ^ y->QWORD[6]; \ r7 = x->QWORD[7] ^ y->QWORD[7]; \ \ \ __XLPS_FOR {\ data->QWORD[_datai] = Ax[0][r0 & 0xFF]; \ data->QWORD[_datai] ^= Ax[1][r1 & 0xFF]; \ data->QWORD[_datai] ^= Ax[2][r2 & 0xFF]; \ data->QWORD[_datai] ^= Ax[3][r3 & 0xFF]; \ data->QWORD[_datai] ^= Ax[4][r4 & 0xFF]; \ data->QWORD[_datai] ^= Ax[5][r5 & 0xFF]; \ data->QWORD[_datai] ^= Ax[6][r6 & 0xFF]; \ data->QWORD[_datai] ^= Ax[7][r7 & 0xFF]; \ r0 >>= 8; \ r1 >>= 8; \ r2 >>= 8; \ r3 >>= 8; \ r4 >>= 8; \ r5 >>= 8; \ r6 >>= 8; \ r7 >>= 8; \ }\ } #define ROUND(i, Ki, data) { \ XLPS(Ki, (&C[i]), Ki); \ XLPS(Ki, data, data); \ } libengine-gost-openssl-3.0.2/gosthash2012_sse2.h000066400000000000000000000144521446070765000213540ustar00rootroot00000000000000/* * Implementation of core functions for GOST R 34.11-2012 using SSE2. * * Copyright (c) 2013 Cryptocom LTD. * This file is distributed under the same license as OpenSSL. * * Author: Alexey Degtyarev * */ #ifndef __GOST3411_HAS_SSE2__ # error "GOST R 34.11-2012: SSE2 not enabled" #endif #include #include #ifdef __SSE3__ # include #endif #define LO(v) ((unsigned char) (v)) #define HI(v) ((unsigned char) (((unsigned int) (v)) >> 8)) #ifdef __i386__ # define EXTRACT EXTRACT32 #else # define EXTRACT EXTRACT64 #endif #ifndef __ICC # define _mm_cvtsi64_m64(v) (__m64) v # define _mm_cvtm64_si64(v) (long long) v #endif #ifdef __SSE3__ /* * "This intrinsic may perform better than _mm_loadu_si128 when * the data crosses a cache line boundary." */ # define UMEM_READ_I128 _mm_lddqu_si128 #else /* SSE2 */ # define UMEM_READ_I128 _mm_loadu_si128 #endif /* load 512bit from unaligned memory */ #define ULOAD(P, xmm0, xmm1, xmm2, xmm3) { \ const __m128i *__m128p = (const __m128i *) P; \ xmm0 = UMEM_READ_I128(&__m128p[0]); \ xmm1 = UMEM_READ_I128(&__m128p[1]); \ xmm2 = UMEM_READ_I128(&__m128p[2]); \ xmm3 = UMEM_READ_I128(&__m128p[3]); \ } #ifdef UNALIGNED_SIMD_ACCESS # define MEM_WRITE_I128 _mm_storeu_si128 # define MEM_READ_I128 UMEM_READ_I128 # define LOAD ULOAD #else /* !UNALIGNED_SIMD_ACCESS */ # define MEM_WRITE_I128 _mm_store_si128 # define MEM_READ_I128 _mm_load_si128 #define LOAD(P, xmm0, xmm1, xmm2, xmm3) { \ const __m128i *__m128p = (const __m128i *) P; \ xmm0 = MEM_READ_I128(&__m128p[0]); \ xmm1 = MEM_READ_I128(&__m128p[1]); \ xmm2 = MEM_READ_I128(&__m128p[2]); \ xmm3 = MEM_READ_I128(&__m128p[3]); \ } #endif /* !UNALIGNED_SIMD_ACCESS */ #define STORE(P, xmm0, xmm1, xmm2, xmm3) { \ __m128i *__m128p = (__m128i *) &P[0]; \ MEM_WRITE_I128(&__m128p[0], xmm0); \ MEM_WRITE_I128(&__m128p[1], xmm1); \ MEM_WRITE_I128(&__m128p[2], xmm2); \ MEM_WRITE_I128(&__m128p[3], xmm3); \ } #define X128R(xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7) { \ xmm0 = _mm_xor_si128(xmm0, xmm4); \ xmm1 = _mm_xor_si128(xmm1, xmm5); \ xmm2 = _mm_xor_si128(xmm2, xmm6); \ xmm3 = _mm_xor_si128(xmm3, xmm7); \ } #define X128M(P, xmm0, xmm1, xmm2, xmm3) { \ const __m128i *__m128p = (const __m128i *) &P[0]; \ xmm0 = _mm_xor_si128(xmm0, MEM_READ_I128(&__m128p[0])); \ xmm1 = _mm_xor_si128(xmm1, MEM_READ_I128(&__m128p[1])); \ xmm2 = _mm_xor_si128(xmm2, MEM_READ_I128(&__m128p[2])); \ xmm3 = _mm_xor_si128(xmm3, MEM_READ_I128(&__m128p[3])); \ } #define _mm_xor_64(mm0, mm1) _mm_xor_si64(mm0, _mm_cvtsi64_m64(mm1)) #define EXTRACT32(row, xmm0, xmm1, xmm2, xmm3, xmm4) { \ register unsigned short ax; \ __m64 mm0, mm1; \ \ ax = (unsigned short) _mm_extract_epi16(xmm0, row + 0); \ mm0 = _mm_cvtsi64_m64(Ax[0][LO(ax)]); \ mm1 = _mm_cvtsi64_m64(Ax[0][HI(ax)]); \ \ ax = (unsigned short) _mm_extract_epi16(xmm0, row + 4); \ mm0 = _mm_xor_64(mm0, Ax[1][LO(ax)]); \ mm1 = _mm_xor_64(mm1, Ax[1][HI(ax)]); \ \ ax = (unsigned short) _mm_extract_epi16(xmm1, row + 0); \ mm0 = _mm_xor_64(mm0, Ax[2][LO(ax)]); \ mm1 = _mm_xor_64(mm1, Ax[2][HI(ax)]); \ \ ax = (unsigned short) _mm_extract_epi16(xmm1, row + 4); \ mm0 = _mm_xor_64(mm0, Ax[3][LO(ax)]); \ mm1 = _mm_xor_64(mm1, Ax[3][HI(ax)]); \ \ ax = (unsigned short) _mm_extract_epi16(xmm2, row + 0); \ mm0 = _mm_xor_64(mm0, Ax[4][LO(ax)]); \ mm1 = _mm_xor_64(mm1, Ax[4][HI(ax)]); \ \ ax = (unsigned short) _mm_extract_epi16(xmm2, row + 4); \ mm0 = _mm_xor_64(mm0, Ax[5][LO(ax)]); \ mm1 = _mm_xor_64(mm1, Ax[5][HI(ax)]); \ \ ax = (unsigned short) _mm_extract_epi16(xmm3, row + 0); \ mm0 = _mm_xor_64(mm0, Ax[6][LO(ax)]); \ mm1 = _mm_xor_64(mm1, Ax[6][HI(ax)]); \ \ ax = (unsigned short) _mm_extract_epi16(xmm3, row + 4); \ mm0 = _mm_xor_64(mm0, Ax[7][LO(ax)]); \ mm1 = _mm_xor_64(mm1, Ax[7][HI(ax)]); \ \ xmm4 = _mm_set_epi64(mm1, mm0); \ } #define EXTRACT64(row, xmm0, xmm1, xmm2, xmm3, xmm4) { \ __m128i tmm4; \ register unsigned short ax; \ register unsigned long long r0, r1; \ \ ax = (unsigned short) _mm_extract_epi16(xmm0, row + 0); \ r0 = Ax[0][LO(ax)]; \ r1 = Ax[0][HI(ax)]; \ \ ax = (unsigned short) _mm_extract_epi16(xmm0, row + 4); \ r0 ^= Ax[1][LO(ax)]; \ r1 ^= Ax[1][HI(ax)]; \ \ ax = (unsigned short) _mm_extract_epi16(xmm1, row + 0); \ r0 ^= Ax[2][LO(ax)]; \ r1 ^= Ax[2][HI(ax)]; \ \ ax = (unsigned short) _mm_extract_epi16(xmm1, row + 4); \ r0 ^= Ax[3][LO(ax)]; \ r1 ^= Ax[3][HI(ax)]; \ \ ax = (unsigned short) _mm_extract_epi16(xmm2, row + 0); \ r0 ^= Ax[4][LO(ax)]; \ r1 ^= Ax[4][HI(ax)]; \ \ ax = (unsigned short) _mm_extract_epi16(xmm2, row + 4); \ r0 ^= Ax[5][LO(ax)]; \ r1 ^= Ax[5][HI(ax)]; \ \ ax = (unsigned short) _mm_extract_epi16(xmm3, row + 0); \ r0 ^= Ax[6][LO(ax)]; \ r1 ^= Ax[6][HI(ax)]; \ \ ax = (unsigned short) _mm_extract_epi16(xmm3, row + 4); \ r0 ^= Ax[7][LO(ax)]; \ r1 ^= Ax[7][HI(ax)]; \ \ xmm4 = _mm_cvtsi64_si128((long long) r0); \ tmm4 = _mm_cvtsi64_si128((long long) r1); \ xmm4 = _mm_unpacklo_epi64(xmm4, tmm4); \ } #define XLPS128M(P, xmm0, xmm1, xmm2, xmm3) { \ __m128i tmm0, tmm1, tmm2, tmm3; \ X128M(P, xmm0, xmm1, xmm2, xmm3); \ \ EXTRACT(0, xmm0, xmm1, xmm2, xmm3, tmm0); \ EXTRACT(1, xmm0, xmm1, xmm2, xmm3, tmm1); \ EXTRACT(2, xmm0, xmm1, xmm2, xmm3, tmm2); \ EXTRACT(3, xmm0, xmm1, xmm2, xmm3, tmm3); \ \ xmm0 = tmm0; \ xmm1 = tmm1; \ xmm2 = tmm2; \ xmm3 = tmm3; \ } #define XLPS128R(xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7) { \ __m128i tmm0, tmm1, tmm2, tmm3; \ X128R(xmm4, xmm5, xmm6, xmm7, xmm0, xmm1, xmm2, xmm3); \ \ EXTRACT(0, xmm4, xmm5, xmm6, xmm7, tmm0); \ EXTRACT(1, xmm4, xmm5, xmm6, xmm7, tmm1); \ EXTRACT(2, xmm4, xmm5, xmm6, xmm7, tmm2); \ EXTRACT(3, xmm4, xmm5, xmm6, xmm7, tmm3); \ \ xmm4 = tmm0; \ xmm5 = tmm1; \ xmm6 = tmm2; \ xmm7 = tmm3; \ } #define ROUND128(i, xmm0, xmm2, xmm4, xmm6, xmm1, xmm3, xmm5, xmm7) { \ XLPS128M((&C[i]), xmm0, xmm2, xmm4, xmm6); \ XLPS128R(xmm0, xmm2, xmm4, xmm6, xmm1, xmm3, xmm5, xmm7); \ } libengine-gost-openssl-3.0.2/gostsum.1000066400000000000000000000044051446070765000177020ustar00rootroot00000000000000.\" Hey, Emacs! This is an -*- nroff -*- source file. .TH GOSTSUM 1 "02 Aug 2017" "Openssl" "Debian GNU/Linux" .SH NAME gostsum \- generates or checks GOST R34.11-94 message digests .SH SYNOPSIS .B gostsum [\-bvt] [\-c [file]] | [file...] .SH DESCRIPTION .B gostsum generates or checks GOST hash sums. The algorithm to generate the is reasonably fast and strong enough for most cases. Exact specification of the algorithm is in .I GOST R34.11-94. Normally .B gostsum generates checksums of all files given to it as a parameter and prints the checksums followed by the filenames. If, however, .B \-c is specified, only one filename parameter is allowed. This file should contain checksums and filenames to which these checksums refer to, and the files listed in that file are checked against the checksums listed there. See option .B \-c for more information. .SS OPTIONS .TP .B \-b Use binary mode. In unix environment, only difference between this and the normal mode is an asterisk preceding the filename in the output. .TP .B \-c Check gost hashes of all files listed in .I file against the checksum listed in the same file. The actual format of that file is the same as output of .B md5sum. That is, each line in the file describes a file. A line looks like: .B So, for example, if a file was created and its message digest calculated like so: .B echo foo > hash\-test\-file; gostsum hash\-test\-file .B gostsum would report: 1541e09d0aa5971f732991ae1bdfb63f2609edd7536b40f8c2ae7c1e2f99e072 hash-test-file .TP .B \-v Be more verbose. Print filenames when checking (with \-c). .TP .B -t Use test parameter set. .B gostsum supports two sets of parameters (which are really parameters of GOST 28147-89 block cipher) specified in the IETF draft .B draft-popov-cryptopro-cpalgs-02.txt By default, cryptopro paramset is used. This option enables use of test paramset as specified in appendices to the GOST. .SH CAVEATS The output of gost12sum has a reversed byte order compared to output of .B openssl dgst command because of the Russian GOST requrements. .SH BUGS This manpage is not quite accurate and has formatting inconsistent with other manpages. .B gostsum does not accept standard options like .BR \-\-help . .SH AUTHOR Victor Wagner libengine-gost-openssl-3.0.2/gostsum.c000066400000000000000000000140631446070765000177650ustar00rootroot00000000000000/********************************************************************** * gostsum.c * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Almost drop-in replacement for md5sum and sha1sum * * which computes GOST R 34.11-94 hashsum instead * * * **********************************************************************/ #include #include #ifdef _MSC_VER #include "getopt.h" # ifndef PATH_MAX # define PATH_MAX _MAX_PATH # endif #include typedef SSIZE_T ssize_t; #else #include #endif #include #include #ifdef _WIN32 # include #endif #include #include "gosthash.h" #define BUF_SIZE 262144 int hash_file(gost_hash_ctx * ctx, char *filename, char *sum, int mode); int hash_stream(gost_hash_ctx * ctx, int fd, char *sum); int get_line(FILE *f, char *hash, char *filename); void help() { fprintf(stderr, "gostsum [-bvt] [-c [file]]| [files]\n" "\t-c check message digests (default is generate)\n" "\t-v verbose, print file names when checking\n" "\t-b read files in binary mode\n" "\t-t use test GOST paramset (default is CryptoPro paramset)\n" "The input for -c should be the list of message digests and file names\n" "that is printed on stdout by this program when it generates digests.\n"); exit(3); } #ifndef O_BINARY # define O_BINARY 0 #endif int main(int argc, char **argv) { int c, i; int verbose = 0; int errors = 0; int open_mode = O_RDONLY; gost_subst_block *b = &GostR3411_94_CryptoProParamSet; FILE *check_file = NULL; gost_hash_ctx ctx; while ((c = getopt(argc, argv, "bc::tv")) != -1) { switch (c) { case 'v': verbose = 1; break; case 't': b = &GostR3411_94_TestParamSet; break; case 'b': open_mode |= O_BINARY; break; case 'c': if (optarg) { check_file = fopen(optarg, "r"); if (!check_file) { perror(optarg); exit(2); } } else { check_file = stdin; } break; default: fprintf(stderr, "invalid option %c", optopt); help(); } } init_gost_hash_ctx(&ctx, b); if (check_file) { char inhash[65], calcsum[65], filename[PATH_MAX]; int failcount = 0, count = 0; errors = 0; if (check_file == stdin && optind < argc) { check_file = fopen(argv[optind], "r"); if (!check_file) { perror(argv[optind]); exit(2); } } while (get_line(check_file, inhash, filename)) { count++; if (!hash_file(&ctx, filename, calcsum, open_mode)) { errors++; continue; } if (strncmp(calcsum, inhash, 65) == 0) { if (verbose) { fprintf(stderr, "%s\tOK\n", filename); } } else { if (verbose) { fprintf(stderr, "%s\tFAILED\n", filename); } else { fprintf(stderr, "%s: GOST hash sum check failed for '%s'\n", argv[0], filename); } failcount++; } } if (errors) { fprintf(stderr, "%s: WARNING %d of %d file(s) cannot be processed\n", argv[0], errors, count); } if (verbose && failcount) { fprintf(stderr, "%s: %d of %d file(f) failed GOST hash sum check\n", argv[0], failcount, count); } exit((failcount || errors) ? 1 : 0); } if (optind == argc) { char sum[65]; #ifdef _WIN32 if (open_mode & O_BINARY) { _setmode(fileno(stdin), O_BINARY); } #endif if (!hash_stream(&ctx, fileno(stdin), sum)) { perror("stdin"); exit(1); } printf("%s -\n", sum); exit(0); } for (i = optind; i < argc; i++) { char sum[65]; if (!hash_file(&ctx, argv[i], sum, open_mode)) { errors++; } else { printf("%s %s\n", sum, argv[i]); } } exit(errors ? 1 : 0); } int hash_file(gost_hash_ctx * ctx, char *filename, char *sum, int mode) { int fd; if ((fd = open(filename, mode)) < 0) { perror(filename); return 0; } if (!hash_stream(ctx, fd, sum)) { perror(filename); close(fd); return 0; } close(fd); return 1; } int hash_stream(gost_hash_ctx * ctx, int fd, char *sum) { unsigned char buffer[BUF_SIZE]; ssize_t bytes; int i; start_hash(ctx); while ((bytes = read(fd, buffer, BUF_SIZE)) > 0) { hash_block(ctx, buffer, bytes); } if (bytes < 0) { return 0; } finish_hash(ctx, buffer); for (i = 0; i < 32; i++) { sprintf(sum + 2 * i, "%02x", buffer[31 - i]); } return 1; } int get_line(FILE *f, char *hash, char *filename) { int i; if (fread(hash, 1, 64, f) < 64) return 0; hash[64] = 0; for (i = 0; i < 64; i++) { if (hash[i] < '0' || (hash[i] > '9' && hash[i] < 'A') || (hash[i] > 'F' && hash[i] < 'a') || hash[i] > 'f') { fprintf(stderr, "Not a hash value '%s'\n", hash); return 0; } } if (fgetc(f) != ' ') { fprintf(stderr, "Malformed input line\n"); return 0; } i = strlen(fgets(filename, PATH_MAX, f)); while (filename[--i] == '\n' || filename[i] == '\r') filename[i] = 0; return 1; } libengine-gost-openssl-3.0.2/libprov/000077500000000000000000000000001446070765000175715ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/openssl_wrap.sh000077500000000000000000000002141446070765000211640ustar00rootroot00000000000000#!/bin/bash OPENSSLDIR=`pwd`/../openssl export LD_LIBRARY_PATH=$OPENSSLDIR OPENSSL_CONF=`pwd`/engine.conf $GDB $OPENSSLDIR/apps/openssl $@ libengine-gost-openssl-3.0.2/tcl_tests/000077500000000000000000000000001446070765000201205ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/tcl_tests/097.ciphers000066400000000000000000000005441446070765000220210ustar00rootroot00000000000000rsa:1024 { DHE-RSA-AES256-SHA tls-ref-097.lan.cryptocom.ru:443 SSLv2:DES-CBC3-MD5 tls-ref-097.lan.cryptocom.ru:4402 SSLv3:DES-CBC-SHA tls-ref-097.lan.cryptocom.ru:4403 RC4-SHA tls-ref-097.lan.cryptocom.ru:4404 } dsa:dsaparams.pem { DHE-DSS-AES256-SHA tls-ref-097.lan.cryptocom.ru:444 SSLv3:EDH-DSS-DES-CBC3-SHA tls-ref-097.lan.cryptocom.ru:4401 } libengine-gost-openssl-3.0.2/tcl_tests/098.ciphers000066400000000000000000000005441446070765000220220ustar00rootroot00000000000000rsa:1024 { DHE-RSA-AES256-SHA tls-ref-098.lan.cryptocom.ru:443 SSLv2:DES-CBC3-MD5 tls-ref-098.lan.cryptocom.ru:4402 SSLv3:DES-CBC-SHA tls-ref-098.lan.cryptocom.ru:4403 RC4-SHA tls-ref-098.lan.cryptocom.ru:4404 } dsa:dsaparams.pem { DHE-DSS-AES256-SHA tls-ref-098.lan.cryptocom.ru:444 SSLv3:EDH-DSS-DES-CBC3-SHA tls-ref-098.lan.cryptocom.ru:4401 } libengine-gost-openssl-3.0.2/tcl_tests/_exists000066400000000000000000000000001446070765000215070ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/tcl_tests/aes0.enc000066400000000000000000000000601446070765000214330ustar00rootroot00000000000000Salted__HõŖęgųßČ{gVOb¸(ÉĨY1Ũå°ŧ úFūØĨKzÂKIˆlibengine-gost-openssl-3.0.2/tcl_tests/aes1.enc000066400000000000000000000000401446070765000214320ustar00rootroot00000000000000Č{gVOb¸(ÉĨY1Ũå°ŧ úFūØĨKzÂKIˆlibengine-gost-openssl-3.0.2/tcl_tests/apache.try000066400000000000000000000017451446070765000221100ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest set test_dir [file normalize [file dirname [info script]]] cd $::test::dir start_tests "ĐĸĐĩҁ҂ҋ ĐŊа API, Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧŅ‹Đš Ņ‚ĐžĐģҌĐēĐž в Apache" makeCA if {$tcl_platform(platform) eq "windows"} { # Add openssl dir to PATH set dlldir [file nativename [file normalize $test_dir/../../openssl]] set env(PATH) "$dlldir;$env(PATH)" } test "EVP_PKEY_copy_parameters gost94" { makeRegisteredUser "U_apache_94" gost94:A exec $test_dir/copy_param U_apache_94/seckey.pem U_apache_94/cert.pem } 0 "EVP_PKEY_missing_parameters before copy: 1 EVP_PKEY_missing_parameters after copy: 0 Check private key:Ok" test "EVP_PKEY_copy_parameters gost2001" { makeRegisteredUser "U_apache_94" gost2001:A exec $test_dir/copy_param U_apache_94/seckey.pem U_apache_94/cert.pem } 0 "EVP_PKEY_missing_parameters before copy: 1 EVP_PKEY_missing_parameters after copy: 0 Check private key:Ok" end_tests libengine-gost-openssl-3.0.2/tcl_tests/asn.tcl000066400000000000000000001362141446070765000214140ustar00rootroot00000000000000#----------------------------------------------------------------------------- # Copyright (C) 1999-2004 Jochen C. Loewer (loewerj@web.de) # Copyright (C) 2004-2006 Michael Schlenker (mic42@users.sourceforge.net) #----------------------------------------------------------------------------- # # A partial ASN decoder/encoder implementation in plain Tcl. # # See ASN.1 (X.680) and BER (X.690). # See 'asn_ber_intro.txt' in this directory. # # This software is copyrighted by Jochen C. Loewer (loewerj@web.de). The # following terms apply to all files associated with the software unless # explicitly disclaimed in individual files. # # The authors hereby grant permission to use, copy, modify, distribute, # and license this software and its documentation for any purpose, provided # that existing copyright notices are retained in all copies and that this # notice is included verbatim in any distributions. No written agreement, # license, or royalty fee is required for any of the authorized uses. # Modifications to this software may be copyrighted by their authors # and need not follow the licensing terms described here, provided that # the new terms are clearly indicated on the first page of each file where # they apply. # # IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY # FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES # ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY # DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. # # THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT. THIS SOFTWARE # IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE # NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR # MODIFICATIONS. # # written by Jochen Loewer # 3 June, 1999 # # $Id: asn.tcl,v 1.1 2012-04-04 10:50:38 igus Exp $ # #----------------------------------------------------------------------------- # needed for using wide() package require Tcl 8.4 namespace eval asn { # Encoder commands namespace export \ asnSequence \ asnSequenceFromList \ asnSet \ asnSetFromList \ asnApplicationConstr \ asnApplication \ asnContext\ asnContextConstr\ asnChoice \ asnChoiceConstr \ asnInteger \ asnEnumeration \ asnBoolean \ asnOctetString \ asnUTCTime \ asnNumericString \ asnPrintableString \ asnIA5String\ asnBMPString\ asnUTF8String\ asnBitString \ asnObjectIdentifer # Decoder commands namespace export \ asnGetResponse \ asnGetInteger \ asnGetEnumeration \ asnGetOctetString \ asnGetSequence \ asnGetSet \ asnGetApplication \ asnGetNumericString \ asnGetPrintableString \ asnGetIA5String \ asnGetBMPString \ asnGetUTF8String \ asnGetObjectIdentifier \ asnGetBoolean \ asnGetUTCTime \ asnGetBitString \ asnGetContext # general BER utility commands namespace export \ asnPeekByte \ asnGetLength \ asnRetag } #----------------------------------------------------------------------------- # Implementation notes: # # See the 'asn_ber_intro.txt' in this directory for an introduction # into BER/DER encoding of ASN.1 information. Bibliography information # # A Layman's Guide to a Subset of ASN.1, BER, and DER # # An RSA Laboratories Technical Note # Burton S. Kaliski Jr. # Revised November 1, 1993 # # Supersedes June 3, 1991 version, which was also published as # NIST/OSI Implementors' Workshop document SEC-SIG-91-17. # PKCS documents are available by electronic mail to # . # # Copyright (C) 1991-1993 RSA Laboratories, a division of RSA # Data Security, Inc. License to copy this document is granted # provided that it is identified as "RSA Data Security, Inc. # Public-Key Cryptography Standards (PKCS)" in all material # mentioning or referencing this document. # 003-903015-110-000-000 # #----------------------------------------------------------------------------- #----------------------------------------------------------------------------- # asnLength : Encode some length data. Helper command. #----------------------------------------------------------------------------- proc ::asn::asnLength {len} { if {$len < 0} { return -code error "Negative length octet requested" } if {$len < 128} { # short form: ISO X.690 8.1.3.4 return [binary format c $len] } # long form: ISO X.690 8.1.3.5 # try to use a minimal encoding, # even if not required by BER, but it is required by DER # take care for signed vs. unsigned issues if {$len < 256 } { return [binary format H2c 81 [expr {$len - 256}]] } if {$len < 32769} { # two octet signed value return [binary format H2S 82 $len] } if {$len < 65536} { return [binary format H2S 82 [expr {$len - 65536}]] } if {$len < 8388608} { # three octet signed value return [binary format H2cS 83 [expr {$len >> 16}] [expr {($len & 0xFFFF) - 65536}]] } if {$len < 16777216} { # three octet signed value return [binary format H2cS 83 [expr {($len >> 16) -256}] [expr {($len & 0xFFFF) -65536}]] } if {$len < 2147483649} { # four octet signed value return [binary format H2I 84 $len] } if {$len < 4294967296} { # four octet unsigned value return [binary format H2I 84 [expr {$len - 4294967296}]] } if {$len < 1099511627776} { # five octet unsigned value return [binary format H2 85][string range [binary format W $len] 3 end] } if {$len < 281474976710656} { # six octet unsigned value return [binary format H2 86][string range [binary format W $len] 2 end] } if {$len < 72057594037927936} { # seven octet value return [binary format H2 87][string range [binary format W $len] 1 end] } # must be a 64-bit wide signed value return [binary format H2W 88 $len] } #----------------------------------------------------------------------------- # asnSequence : Assumes that the arguments are already ASN encoded. #----------------------------------------------------------------------------- proc ::asn::asnSequence {args} { asnSequenceFromList $args } proc ::asn::asnSequenceFromList {lst} { # The sequence tag is 0x30. The length is arbitrary and thus full # length coding is required. The arguments have to be BER encoded # already. Constructed value, definite-length encoding. set out "" foreach part $lst { append out $part } set len [string length $out] return [binary format H2a*a$len 30 [asnLength $len] $out] } #----------------------------------------------------------------------------- # asnSet : Assumes that the arguments are already ASN encoded. #----------------------------------------------------------------------------- proc ::asn::asnSet {args} { asnSetFromList $args } proc ::asn::asnSetFromList {lst} { # The set tag is 0x31. The length is arbitrary and thus full # length coding is required. The arguments have to be BER encoded # already. set out "" foreach part $lst { append out $part } set len [string length $out] return [binary format H2a*a$len 31 [asnLength $len] $out] } #----------------------------------------------------------------------------- # asnApplicationConstr #----------------------------------------------------------------------------- proc ::asn::asnApplicationConstr {appNumber args} { # Packs the arguments into a constructed value with application tag. set out "" foreach part $args { append out $part } set code [expr {0x060 + $appNumber}] set len [string length $out] return [binary format ca*a$len $code [asnLength $len] $out] } #----------------------------------------------------------------------------- # asnApplication #----------------------------------------------------------------------------- proc ::asn::asnApplication {appNumber data} { # Packs the arguments into a constructed value with application tag. set code [expr {0x040 + $appNumber}] set len [string length $data] return [binary format ca*a$len $code [asnLength $len] $data] } #----------------------------------------------------------------------------- # asnContextConstr #----------------------------------------------------------------------------- proc ::asn::asnContextConstr {contextNumber args} { # Packs the arguments into a constructed value with application tag. set out "" foreach part $args { append out $part } set code [expr {0x0A0 + $contextNumber}] set len [string length $out] return [binary format ca*a$len $code [asnLength $len] $out] } #----------------------------------------------------------------------------- # asnContext #----------------------------------------------------------------------------- proc ::asn::asnContext {contextNumber data} { # Packs the arguments into a constructed value with application tag. set code [expr {0x080 + $contextNumber}] set len [string length $data] return [binary format ca*a$len $code [asnLength $len] $data] } #----------------------------------------------------------------------------- # asnChoice #----------------------------------------------------------------------------- proc ::asn::asnChoice {appNumber args} { # Packs the arguments into a choice construction. set out "" foreach part $args { append out $part } set code [expr {0x080 + $appNumber}] set len [string length $out] return [binary format ca*a$len $code [asnLength $len] $out] } #----------------------------------------------------------------------------- # asnChoiceConstr #----------------------------------------------------------------------------- proc ::asn::asnChoiceConstr {appNumber args} { # Packs the arguments into a choice construction. set out "" foreach part $args { append out $part } set code [expr {0x0A0 + $appNumber}] set len [string length $out] return [binary format ca*a$len $code [asnLength $len] $out] } #----------------------------------------------------------------------------- # asnInteger : Encode integer value. #----------------------------------------------------------------------------- proc ::asn::asnInteger {number} { asnIntegerOrEnum 02 $number } #----------------------------------------------------------------------------- # asnEnumeration : Encode enumeration value. #----------------------------------------------------------------------------- proc ::asn::asnEnumeration {number} { asnIntegerOrEnum 0a $number } #----------------------------------------------------------------------------- # asnIntegerOrEnum : Common code for Integers and Enumerations # No Bignum version, as we do not expect large Enums. #----------------------------------------------------------------------------- proc ::asn::asnIntegerOrEnum {tag number} { # The integer tag is 0x02 , the Enum Tag 0x0a otherwise identical. # The length is 1, 2, 3, or 4, coded in a # single byte. This can be done directly, no need to go through # asnLength. The value itself is written in big-endian. # Known bug/issue: The command cannot handle very wide integers, i.e. # anything above 8 bytes length. Use asnBignumInteger for those. # check if we really have an int set num $number incr num if {($number >= -128) && ($number < 128)} { return [binary format H2H2c $tag 01 $number] } if {($number >= -32768) && ($number < 32768)} { return [binary format H2H2S $tag 02 $number] } if {($number >= -8388608) && ($number < 8388608)} { set numberb [expr {$number & 0xFFFF}] set numbera [expr {($number >> 16) & 0xFF}] return [binary format H2H2cS $tag 03 $numbera $numberb] } if {($number >= -2147483648) && ($number < 2147483648)} { return [binary format H2H2I $tag 04 $number] } if {($number >= -549755813888) && ($number < 549755813888)} { set numberb [expr {$number & 0xFFFFFFFF}] set numbera [expr {($number >> 32) & 0xFF}] return [binary format H2H2cI $tag 05 $numbera $numberb] } if {($number >= -140737488355328) && ($number < 140737488355328)} { set numberb [expr {$number & 0xFFFFFFFF}] set numbera [expr {($number >> 32) & 0xFFFF}] return [binary format H2H2SI $tag 06 $numbera $numberb] } if {($number >= -36028797018963968) && ($number < 36028797018963968)} { set numberc [expr {$number & 0xFFFFFFFF}] set numberb [expr {($number >> 32) & 0xFFFF}] set numbera [expr {($number >> 48) & 0xFF}] return [binary format H2H2cSI $tag 07 $numbera $numberb $numberc] } if {($number >= -9223372036854775808) && ($number <= 9223372036854775807)} { return [binary format H2H2W $tag 08 $number] } return -code error "Integer value to large to encode, use asnBigInteger" } #----------------------------------------------------------------------------- # asnBigInteger : Encode a long integer value using math::bignum #----------------------------------------------------------------------------- proc ::asn::asnBigInteger {bignum} { # require math::bignum only if it is used package require math::bignum # this is a hack to check for bignum... if {[llength $bignum] < 2 || ([lindex $bignum 0] ne "bignum")} { return -code error "expected math::bignum value got \"$bignum\"" } if {[math::bignum::sign $bignum]} { # generate two's complement form set bits [math::bignum::bits $bignum] set padding [expr {$bits % 8}] set len [expr {int(ceil($bits / 8.0))}] if {$padding == 0} { # we need a complete extra byte for the sign # unless this is a base 2 multiple set test [math::bignum::fromstr 0] math::bignum::setbit test [expr {$bits-1}] if {[math::bignum::ne [math::bignum::abs $bignum] $test]} { incr len } } set exp [math::bignum::pow \ [math::bignum::fromstr 256] \ [math::bignum::fromstr $len]] set bignum [math::bignum::add $bignum $exp] set hex [math::bignum::tostr $bignum 16] } else { set bits [math::bignum::bits $bignum] if {($bits % 8) == 0 && $bits > 0} { set pad "00" } else { set pad "" } set hex $pad[math::bignum::tostr $bignum 16] } if {[string length $hex]%2} { set hex "0$hex" } set octets [expr {(([string length $hex]+1)/2)}] return [binary format H2a*H* 02 [asnLength $octets] $hex] } #----------------------------------------------------------------------------- # asnBoolean : Encode a boolean value. #----------------------------------------------------------------------------- proc ::asn::asnBoolean {bool} { # The boolean tag is 0x01. The length is always 1, coded in # a single byte. This can be done directly, no need to go through # asnLength. The value itself is written in big-endian. return [binary format H2H2c 01 01 [expr {$bool ? 0x0FF : 0x0}]] } #----------------------------------------------------------------------------- # asnOctetString : Encode a string of arbitrary bytes #----------------------------------------------------------------------------- proc ::asn::asnOctetString {string} { # The octet tag is 0x04. The length is arbitrary, so we need # 'asnLength' for full coding of the length. set len [string length $string] return [binary format H2a*a$len 04 [asnLength $len] $string] } #----------------------------------------------------------------------------- # asnNull : Encode a null value #----------------------------------------------------------------------------- proc ::asn::asnNull {} { # Null has only one valid encoding return \x05\x00 } #----------------------------------------------------------------------------- # asnBitstring : Encode a Bit String value #----------------------------------------------------------------------------- proc ::asn::asnBitString {bitstring} { # The bit string tag is 0x03. # Bit strings can be either simple or constructed # we always use simple encoding set bitlen [string length $bitstring] set padding [expr {(8 - ($bitlen % 8)) % 8}] set len [expr {($bitlen / 8) + 1}] if {$padding != 0} {incr len} return [binary format H2a*B* 03 [asnLength $len] $bitstring] } #----------------------------------------------------------------------------- # asnUTCTime : Encode an UTC time string #----------------------------------------------------------------------------- proc ::asn::asnUTCTime {UTCtimestring} { # the utc time tag is 0x17. # # BUG: we do not check the string for well formedness set ascii [encoding convertto ascii $UTCtimestring] set len [string length $ascii] return [binary format H2a*a* 17 [asnLength $len] $ascii] } #----------------------------------------------------------------------------- # asnPrintableString : Encode a printable string #----------------------------------------------------------------------------- namespace eval asn { variable nonPrintableChars {[^ A-Za-z0-9'()+,.:/?=-]} } proc ::asn::asnPrintableString {string} { # the printable string tag is 0x13 variable nonPrintableChars # it is basically a restricted ascii string if {[regexp $nonPrintableChars $string ]} { return -code error "Illegal character in PrintableString." } # check characters set ascii [encoding convertto ascii $string] return [asnEncodeString 13 $ascii] } #----------------------------------------------------------------------------- # asnIA5String : Encode an Ascii String #----------------------------------------------------------------------------- proc ::asn::asnIA5String {string} { # the IA5 string tag is 0x16 # check for extended charachers if {[string length $string]!=[string bytelength $string]} { return -code error "Illegal character in IA5String" } set ascii [encoding convertto ascii $string] return [asnEncodeString 16 $ascii] } #----------------------------------------------------------------------------- # asnNumericString : Encode a Numeric String type #----------------------------------------------------------------------------- namespace eval asn { variable nonNumericChars {[^0-9 ]} } proc ::asn::asnNumericString {string} { # the Numeric String type has tag 0x12 variable nonNumericChars if {[regexp $nonNumericChars $string]} { return -code error "Illegal character in Numeric String." } return [asnEncodeString 12 $string] } #---------------------------------------------------------------------- # asnBMPString: Encode a Tcl string as Basic Multinligval (UCS2) string #----------------------------------------------------------------------- proc asn::asnBMPString {string} { if {$::tcl_platform(byteOrder) eq "littleEndian"} { set bytes "" foreach {lo hi} [split [encoding convertto unicode $string] ""] { append bytes $hi $lo } } else { set bytes [encoding convertto unicode $string] } return [asnEncodeString 1e $bytes] } #--------------------------------------------------------------------------- # asnUTF8String: encode tcl string as UTF8 String #---------------------------------------------------------------------------- proc asn::asnUTF8String {string} { return [asnEncodeString 0c [encoding convertto utf-8 $string]] } #----------------------------------------------------------------------------- # asnEncodeString : Encode an RestrictedCharacter String #----------------------------------------------------------------------------- proc ::asn::asnEncodeString {tag string} { set len [string length $string] return [binary format H2a*a$len $tag [asnLength $len] $string] } #----------------------------------------------------------------------------- # asnObjectIdentifier : Encode an Object Identifier value #----------------------------------------------------------------------------- proc ::asn::asnObjectIdentifier {oid} { # the object identifier tag is 0x06 if {[llength $oid] < 2} { return -code error "OID must have at least two subidentifiers." } # basic check that it is valid foreach identifier $oid { if {$identifier < 0} { return -code error \ "Malformed OID. Identifiers must be positive Integers." } } if {[lindex $oid 0] > 2} { return -code error "First subidentifier must be 0,1 or 2" } if {[lindex $oid 1] > 39} { return -code error \ "Second subidentifier must be between 0 and 39" } # handle the special cases directly switch [llength $oid] { 2 { return [binary format H2H2c 06 01 \ [expr {[lindex $oid 0]*40+[lindex $oid 1]}]] } default { # This can probably be written much shorter. # Just a first try that works... # set octets [binary format c \ [expr {[lindex $oid 0]*40+[lindex $oid 1]}]] foreach identifier [lrange $oid 2 end] { set d 128 if {$identifier < 128} { set subidentifier [list $identifier] } else { set subidentifier [list] # find the largest divisor while {($identifier / $d) >= 128} { set d [expr {$d * 128}] } # and construct the subidentifiers set remainder $identifier while {$d >= 128} { set coefficient [expr {($remainder / $d) | 0x80}] set remainder [expr {$remainder % $d}] set d [expr {$d / 128}] lappend subidentifier $coefficient } lappend subidentifier $remainder } append octets [binary format c* $subidentifier] } return [binary format H2a*a* 06 \ [asnLength [string length $octets]] $octets] } } } #----------------------------------------------------------------------------- # asnGetResponse : Read a ASN response from a channel. #----------------------------------------------------------------------------- proc ::asn::asnGetResponse {sock data_var} { upvar $data_var data # We expect a sequence here (tag 0x30). The code below is an # inlined replica of 'asnGetSequence', modified for reading from a # channel instead of a string. set tag [read $sock 1] if {$tag == "\x30"} { # The following code is a replica of 'asnGetLength', modified # for reading the bytes from the channel instead of a string. set len1 [read $sock 1] binary scan $len1 c num set length [expr {($num + 0x100) % 0x100}] if {$length >= 0x080} { # The byte the read is not the length, but a prefix, and # the lower nibble tells us how many bytes follow. set len_length [expr {$length & 0x7f}] # BUG: We should not perform the value extraction for an # BUG: improper length. It wastes cycles, and here it can # BUG: cause us trouble, reading more data than there is # BUG: on the channel. Depending on the channel # BUG: configuration an attacker can induce us to block, # BUG: causing a denial of service. set lengthBytes [read $sock $len_length] switch $len_length { 1 { binary scan $lengthBytes c length set length [expr {($length + 0x100) % 0x100}] } 2 { binary scan $lengthBytes S length } 3 { binary scan \x00$lengthBytes I length } 4 { binary scan $lengthBytes I length } default { return -code error \ "length information too long ($len_length)" } } } # Now that the length is known we get the remainder, # i.e. payload, and construct proper in-memory BER encoded # sequence. set rest [read $sock $length] set data [binary format aa*a$length $tag [asnLength $length] $rest] } else { # Generate an error message if the data is not a sequence as # we expected. set tag_hex "" binary scan $tag H2 tag_hex return -code error "unknown start tag [string length $tag] $tag_hex" } } #----------------------------------------------------------------------------- # asnGetByte : Retrieve a single byte from the data (unsigned) #----------------------------------------------------------------------------- proc ::asn::asnGetByte {data_var byte_var} { upvar $data_var data $byte_var byte binary scan [string index $data 0] c byte set byte [expr {($byte + 0x100) % 0x100}] set data [string range $data 1 end] return } #----------------------------------------------------------------------------- # asnPeekByte : Retrieve a single byte from the data (unsigned) # without removing it. #----------------------------------------------------------------------------- proc ::asn::asnPeekByte {data_var byte_var} { upvar $data_var data $byte_var byte binary scan [string index $data 0] c byte set byte [expr {($byte + 0x100) % 0x100}] return } #----------------------------------------------------------------------------- # ansRetag: Remove an explicit tag with the real newTag # #----------------------------------------------------------------------------- proc ::asn::asnRetag {data_var newTag} { upvar 1 $data_var data asnGetByte data tag set data [binary format c $newTag]$data } #----------------------------------------------------------------------------- # asnGetBytes : Retrieve a block of 'length' bytes from the data. #----------------------------------------------------------------------------- proc ::asn::asnGetBytes {data_var length bytes_var} { upvar $data_var data $bytes_var bytes incr length -1 set bytes [string range $data 0 $length] incr length set data [string range $data $length end] return } #----------------------------------------------------------------------------- # asnGetLength : Decode an ASN length value (See notes) #----------------------------------------------------------------------------- proc ::asn::asnGetLength {data_var length_var} { upvar $data_var data $length_var length asnGetByte data length if {$length == 0x080} { return -code error "Indefinite length BER encoding not yet supported" } if {$length > 0x080} { # The retrieved byte is a prefix value, and the integer in the # lower nibble tells us how many bytes were used to encode the # length data following immediately after this prefix. set len_length [expr {$length & 0x7f}] if {[string length $data] < $len_length} { return -code error \ "length information invalid, not enough octets left" } asnGetBytes data $len_length lengthBytes switch $len_length { 1 { # Efficiently coded data will not go through this # path, as small length values can be coded directly, # without a prefix. binary scan $lengthBytes c length set length [expr {($length + 0x100) % 0x100}] } 2 { binary scan $lengthBytes S length set length [expr {($length + 0x10000) % 0x10000}] } 3 { binary scan \x00$lengthBytes I length set length [expr {($length + 0x1000000) % 0x1000000}] } 4 { binary scan $lengthBytes I length set length [expr {(wide($length) + 0x100000000) % 0x100000000}] } default { binary scan $lengthBytes H* hexstr # skip leading zeros which are allowed by BER set hexlen [string trimleft $hexstr 0] # check if it fits into a 64-bit signed integer if {[string length $hexlen] > 16} { return -code error -errorcode {ARITH IOVERFLOW {Length value too large for normal use, try asnGetBigLength}} \ "Length value to large" } elseif { [string length $hexlen] == 16 \ && ([string index $hexlen 0] & 0x8)} { # check most significant bit, if set we need bignum return -code error -errorcode {ARITH IOVERFLOW {Length value too large for normal use, try asnGetBigLength}} \ "Length value to large" } else { scan $hexstr "%lx" length } } } } return } #----------------------------------------------------------------------------- # asnGetBigLength : Retrieve a length that can not be represented in 63-bit #----------------------------------------------------------------------------- proc ::asn::asnGetBigLength {data_var biglength_var} { # Does any real world code really need this? # If we encounter this, we are doomed to fail anyway, # (there would be an Exabyte inside the data_var, ) # # So i implement it just for completness. # package require math::bignum upvar $data_var data $length_var length asnGetByte data length if {$length == 0x080} { return -code error "Indefinite length BER encoding not yet supported" } if {$length > 0x080} { # The retrieved byte is a prefix value, and the integer in the # lower nibble tells us how many bytes were used to encode the # length data following immediately after this prefix. set len_length [expr {$length & 0x7f}] if {[string length $data] < $len_length} { return -code error \ "length information invalid, not enough octets left" } asnGetBytes data $len_length lengthBytes binary scan $lengthBytes H* hexlen set length [math::bignum::fromstr $hexlen 16] } return } #----------------------------------------------------------------------------- # asnGetInteger : Retrieve integer. #----------------------------------------------------------------------------- proc ::asn::asnGetInteger {data_var int_var} { # Tag is 0x02. upvar $data_var data $int_var int asnGetByte data tag if {$tag != 0x02} { return -code error \ [format "Expected Integer (0x02), but got %02x" $tag] } asnGetLength data len asnGetBytes data $len integerBytes set int ? switch $len { 1 { binary scan $integerBytes c int } 2 { binary scan $integerBytes S int } 3 { # check for negative int and pad scan [string index $integerBytes 0] %c byte if {$byte & 128} { binary scan \xff$integerBytes I int } else { binary scan \x00$integerBytes I int } } 4 { binary scan $integerBytes I int } 5 - 6 - 7 - 8 { # check for negative int and pad scan [string index $integerBytes 0] %c byte if {$byte & 128} { set pad [string repeat \xff [expr {8-$len}]] } else { set pad [string repeat \x00 [expr {8-$len}]] } binary scan $pad$integerBytes W int } default { # Too long, or prefix coding was used. return -code error "length information too long" } } return } #----------------------------------------------------------------------------- # asnGetBigInteger : Retrieve a big integer. #----------------------------------------------------------------------------- proc ::asn::asnGetBigInteger {data_var bignum_var} { # require math::bignum only if it is used package require math::bignum # Tag is 0x02. We expect that the length of the integer is coded with # maximal efficiency, i.e. without a prefix 0x81 prefix. If a prefix # is used this decoder will fail. upvar $data_var data $bignum_var bignum asnGetByte data tag if {$tag != 0x02} { return -code error \ [format "Expected Integer (0x02), but got %02x" $tag] } asnGetLength data len asnGetBytes data $len integerBytes binary scan $integerBytes H* hex set bignum [math::bignum::fromstr $hex 16] set bits [math::bignum::bits $bignum] set exp [math::bignum::pow \ [math::bignum::fromstr 2] \ [math::bignum::fromstr $bits]] set big [math::bignum::sub $bignum $exp] set bignum $big return } #----------------------------------------------------------------------------- # asnGetEnumeration : Retrieve an enumeration id #----------------------------------------------------------------------------- proc ::asn::asnGetEnumeration {data_var enum_var} { # This is like 'asnGetInteger', except for a different tag. upvar $data_var data $enum_var enum asnGetByte data tag if {$tag != 0x0a} { return -code error \ [format "Expected Enumeration (0x0a), but got %02x" $tag] } asnGetLength data len asnGetBytes data $len integerBytes set enum ? switch $len { 1 { binary scan $integerBytes c enum } 2 { binary scan $integerBytes S enum } 3 { binary scan \x00$integerBytes I enum } 4 { binary scan $integerBytes I enum } default { return -code error "length information too long" } } return } #----------------------------------------------------------------------------- # asnGetOctetString : Retrieve arbitrary string. #----------------------------------------------------------------------------- proc ::asn::asnGetOctetString {data_var string_var} { # Here we need the full decoder for length data. upvar $data_var data $string_var string asnGetByte data tag if {$tag != 0x04} { return -code error \ [format "Expected Octet String (0x04), but got %02x" $tag] } asnGetLength data length asnGetBytes data $length temp set string $temp return } #----------------------------------------------------------------------------- # asnGetSequence : Retrieve Sequence data for further decoding. #----------------------------------------------------------------------------- proc ::asn::asnGetSequence {data_var sequence_var} { # Here we need the full decoder for length data. upvar $data_var data $sequence_var sequence asnGetByte data tag if {$tag != 0x030} { return -code error \ [format "Expected Sequence (0x30), but got %02x" $tag] } asnGetLength data length asnGetBytes data $length temp set sequence $temp return } #----------------------------------------------------------------------------- # asnGetSet : Retrieve Set data for further decoding. #----------------------------------------------------------------------------- proc ::asn::asnGetSet {data_var set_var} { # Here we need the full decoder for length data. upvar $data_var data $set_var set asnGetByte data tag if {$tag != 0x031} { return -code error \ [format "Expected Set (0x31), but got %02x" $tag] } asnGetLength data length asnGetBytes data $length temp set set $temp return } #----------------------------------------------------------------------------- # asnGetApplication #----------------------------------------------------------------------------- proc ::asn::asnGetApplication {data_var appNumber_var {content_var {}} {constructed_var {}}} { upvar $data_var data $appNumber_var appNumber asnGetByte data tag asnGetLength data length if {($tag & 0xC0) != 0x040} { return -code error \ [format "Expected Application (0x60 or 0x40), but got %02x" $tag] } set appNumber [expr {$tag & 0x1F}] if {[string length $constructed_var]} { upvar 1 $constructed_var constructed set constructed [expr {$tag & 0x20}] } if {[string length $content_var]} { upvar 1 $content_var content asnGetBytes data $length content } return } #----------------------------------------------------------------------------- # asnGetBoolean: decode a boolean value #----------------------------------------------------------------------------- proc asn::asnGetBoolean {data_var bool_var} { upvar $data_var data $bool_var bool asnGetByte data tag if {$tag != 0x01} { return -code error \ [format "Expected Boolean (0x01), but got %02x" $tag] } asnGetLength data length asnGetByte data byte set bool [expr {$byte == 0 ? 0 : 1}] return } #----------------------------------------------------------------------------- # asnGetUTCTime: Extract an UTC Time string from the data. Returns a string # representing an UTC Time. # #----------------------------------------------------------------------------- proc asn::asnGetUTCTime {data_var utc_var} { upvar $data_var data $utc_var utc asnGetByte data tag if {$tag != 0x17} { return -code error \ [format "Expected UTCTime (0x17), but got %02x" $tag] } asnGetLength data length asnGetBytes data $length bytes # this should be ascii, make it explicit set bytes [encoding convertfrom ascii $bytes] binary scan $bytes a* utc return } #----------------------------------------------------------------------------- # asnGetBitString: Extract a Bit String value (a string of 0/1s) from the # ASN.1 data. # #----------------------------------------------------------------------------- proc asn::asnGetBitString {data_var bitstring_var} { upvar $data_var data $bitstring_var bitstring asnGetByte data tag if {$tag != 0x03} { return -code error \ [format "Expected Bit String (0x03), but got %02x" $tag] } asnGetLength data length # get the number of padding bits used at the end asnGetByte data padding incr length -1 asnGetBytes data $length bytes binary scan $bytes B* bits # cut off the padding bits set bits [string range $bits 0 end-$padding] set bitstring $bits } #----------------------------------------------------------------------------- # asnGetObjectIdentifier: Decode an ASN.1 Object Identifier (OID) into # a Tcl list of integers. #----------------------------------------------------------------------------- proc asn::asnGetObjectIdentifier {data_var oid_var} { upvar $data_var data $oid_var oid asnGetByte data tag if {$tag != 0x06} { return -code error \ [format "Expected Object Identifier (0x06), but got %02x" $tag] } asnGetLength data length # the first byte encodes the OID parts in position 0 and 1 asnGetByte data val set oid [expr {$val / 40}] lappend oid [expr {$val % 40}] incr length -1 # the next bytes encode the remaining parts of the OID set bytes [list] set incomplete 0 while {$length} { asnGetByte data octet incr length -1 if {$octet < 128} { set oidval $octet set mult 128 foreach byte $bytes { if {$byte != {}} { incr oidval [expr {$mult*$byte}] set mult [expr {$mult*128}] } } lappend oid $oidval set bytes [list] set incomplete 0 } else { set byte [expr {$octet-128}] set bytes [concat [list $byte] $bytes] set incomplete 1 } } if {$incomplete} { return -code error "OID Data is incomplete, not enough octets." } return } #----------------------------------------------------------------------------- # asnGetContext: Decode an explicit context tag # #----------------------------------------------------------------------------- proc ::asn::asnGetContext {data_var contextNumber_var {content_var {}} {constructed_var {}}} { upvar 1 $data_var data $contextNumber_var contextNumber asnGetByte data tag asnGetLength data length if {($tag & 0xC0) != 0x080} { return -code error \ [format "Expected Context (0xa0 or 0x80), but got %02x" $tag] } set contextNumber [expr {$tag & 0x1F}] if {[string length $constructed_var]} { upvar 1 $constructed_var constructed set constructed [expr {$tag & 0x20}] } if {[string length $content_var]} { upvar 1 $content_var content asnGetBytes data $length content } return } #----------------------------------------------------------------------------- # asnGetNumericString: Decode a Numeric String from the data #----------------------------------------------------------------------------- proc ::asn::asnGetNumericString {data_var print_var} { upvar 1 $data_var data $print_var print asnGetByte data tag if {$tag != 0x12} { return -code error \ [format "Expected Numeric String (0x12), but got %02x" $tag] } asnGetLength data length asnGetBytes data $length string set print [encoding convertfrom ascii $string] return } #----------------------------------------------------------------------------- # asnGetPrintableString: Decode a Printable String from the data #----------------------------------------------------------------------------- proc ::asn::asnGetPrintableString {data_var print_var} { upvar $data_var data $print_var print asnGetByte data tag if {$tag != 0x13} { return -code error \ [format "Expected Printable String (0x13), but got %02x" $tag] } asnGetLength data length asnGetBytes data $length string set print [encoding convertfrom ascii $string] return } #----------------------------------------------------------------------------- # asnGetIA5String: Decode a IA5(ASCII) String from the data #----------------------------------------------------------------------------- proc ::asn::asnGetIA5String {data_var print_var} { upvar $data_var data $print_var print asnGetByte data tag if {$tag != 0x16} { return -code error \ [format "Expected IA5 String (0x16), but got %02x" $tag] } asnGetLength data length asnGetBytes data $length string set print [encoding convertfrom ascii $string] return } #------------------------------------------------------------------------ # asnGetBMPString: Decode Basic Multiningval (UCS2 string) from data #------------------------------------------------------------------------ proc asn::asnGetBMPString {data_var print_var} { upvar $data_var data $print_var print asnGetByte data tag if {$tag != 0x1e} { return -code error \ [format "Expected BMP String (0x1e), but got %02x" $tag] } asnGetLength data length asnGetBytes data $length string if {$::tcl_platform(byteOrder) eq "littleEndian"} { set str2 "" foreach {hi lo} [split $string ""] { append str2 $lo $hi } } else { set str2 $string } set print [encoding convertfrom unicode $str2] return } #------------------------------------------------------------------------ # asnGetUTF8String: Decode UTF8 string from data #------------------------------------------------------------------------ proc asn::asnGetUTF8String {data_var print_var} { upvar $data_var data $print_var print asnGetByte data tag if {$tag != 0x0c} { return -code error \ [format "Expected UTF8 String (0x0c), but got %02x" $tag] } asnGetLength data length asnGetBytes data $length string #there should be some error checking to see if input is #properly-formatted utf8 set print [encoding convertfrom utf-8 $string] return } #----------------------------------------------------------------------------- # asnGetNull: decode a NULL value #----------------------------------------------------------------------------- proc ::asn::asnGetNull {data_var} { upvar $data_var data asnGetByte data tag if {$tag != 0x05} { return -code error \ [format "Expected NULL (0x05), but got %02x" $tag] } asnGetLength data length asnGetBytes data $length bytes # we do not check the null data, all bytes must be 0x00 return } #---------------------------------------------------------------------------- # MultiType string routines #---------------------------------------------------------------------------- namespace eval asn { variable stringTypes array set stringTypes { 12 NumericString 13 PrintableString 16 IA5String 1e BMPString 0c UTF8String 14 T61String 15 VideotexString 1a VisibleString 1b GeneralString 1c UniversalString } variable defaultStringType UTF8 } #--------------------------------------------------------------------------- # asnGetString - get readable string automatically detecting its type #--------------------------------------------------------------------------- proc ::asn::asnGetString {data_var print_var {type_var {}}} { variable stringTypes upvar $data_var data $print_var print asnPeekByte data tag set tag [format %02x $tag] if {![info exists stringTypes($tag)]} { return -code error "Expected one of string types, but got $tag" } asnGet$stringTypes($tag) data print if {[string length $type_var]} { upvar $type_var type set type $stringTypes($tag) } } #--------------------------------------------------------------------- # defaultStringType - set or query default type for unrestricted strings #--------------------------------------------------------------------- proc ::asn::defaultStringType {{type {}}} { variable defaultStringType if {![string length $type]} { return $defaultStringType } if {$type ne "BMP" && $type ne "UTF8"} { return -code error "Invalid default string type. Should be one of BMP, UTF8" } set defaultStringType $type return } #--------------------------------------------------------------------------- # asnString - encode readable string into most restricted type possible #--------------------------------------------------------------------------- proc ::asn::asnString {string} { variable nonPrintableChars variable nonNumericChars if {[string length $string]!=[string bytelength $string]} { # There are non-ascii character variable defaultStringType return [asn${defaultStringType}String $string] } elseif {![regexp $nonNumericChars $string]} { return [asnNumericString $string] } elseif {![regexp $nonPrintableChars $string]} { return [asnPrintableString $string] } else { return [asnIA5String $string] } } #----------------------------------------------------------------------------- package provide asn 0.7.1 libengine-gost-openssl-3.0.2/tcl_tests/base64.tcl000066400000000000000000000222051446070765000217110ustar00rootroot00000000000000# base64.tcl -- # # Encode/Decode base64 for a string # Stephen Uhler / Brent Welch (c) 1997 Sun Microsystems # The decoder was done for exmh by Chris Garrigues # # Copyright (c) 1998-2000 by Ajuba Solutions. # See the file "license.terms" for information on usage and redistribution # of this file, and for a DISCLAIMER OF ALL WARRANTIES. # # RCS: @(#) $Id: base64.tcl,v 1.1 2012-04-04 10:50:38 igus Exp $ # Version 1.0 implemented Base64_Encode, Base64_Decode # Version 2.0 uses the base64 namespace # Version 2.1 fixes various decode bugs and adds options to encode # Version 2.2 is much faster, Tcl8.0 compatible # Version 2.2.1 bugfixes # Version 2.2.2 bugfixes # Version 2.3 bugfixes and extended to support Trf # @mdgen EXCLUDE: base64c.tcl package require Tcl 8.2 namespace eval ::base64 { namespace export encode decode } if {![catch {package require Trf 2.0}]} { # Trf is available, so implement the functionality provided here # in terms of calls to Trf for speed. # ::base64::encode -- # # Base64 encode a given string. # # Arguments: # args ?-maxlen maxlen? ?-wrapchar wrapchar? string # # If maxlen is 0, the output is not wrapped. # # Results: # A Base64 encoded version of $string, wrapped at $maxlen characters # by $wrapchar. proc ::base64::encode {args} { # Set the default wrapchar and maximum line length to match the output # of GNU uuencode 4.2. Various RFCs allow for different wrapping # characters and wraplengths, so these may be overridden by command line # options. set wrapchar "\n" set maxlen 60 if { [llength $args] == 0 } { error "wrong # args: should be \"[lindex [info level 0] 0]\ ?-maxlen maxlen? ?-wrapchar wrapchar? string\"" } set optionStrings [list "-maxlen" "-wrapchar"] for {set i 0} {$i < [llength $args] - 1} {incr i} { set arg [lindex $args $i] set index [lsearch -glob $optionStrings "${arg}*"] if { $index == -1 } { error "unknown option \"$arg\": must be -maxlen or -wrapchar" } incr i if { $i >= [llength $args] - 1 } { error "value for \"$arg\" missing" } set val [lindex $args $i] # The name of the variable to assign the value to is extracted # from the list of known options, all of which have an # associated variable of the same name as the option without # a leading "-". The [string range] command is used to strip # of the leading "-" from the name of the option. # # FRINK: nocheck set [string range [lindex $optionStrings $index] 1 end] $val } # [string is] requires Tcl8.2; this works with 8.0 too if {[catch {expr {$maxlen % 2}}]} { error "expected integer but got \"$maxlen\"" } set string [lindex $args end] set result [::base64 -mode encode -- $string] set result [string map [list \n ""] $result] if {$maxlen > 0} { set res "" set edge [expr {$maxlen - 1}] while {[string length $result] > $maxlen} { append res [string range $result 0 $edge]$wrapchar set result [string range $result $maxlen end] } if {[string length $result] > 0} { append res $result } set result $res } return $result } # ::base64::decode -- # # Base64 decode a given string. # # Arguments: # string The string to decode. Characters not in the base64 # alphabet are ignored (e.g., newlines) # # Results: # The decoded value. proc ::base64::decode {string} { regsub -all {\s} $string {} string ::base64 -mode decode -- $string } } else { # Without Trf use a pure tcl implementation namespace eval base64 { variable base64 {} variable base64_en {} # We create the auxiliary array base64_tmp, it will be unset later. set i 0 foreach char {A B C D E F G H I J K L M N O P Q R S T U V W X Y Z \ a b c d e f g h i j k l m n o p q r s t u v w x y z \ 0 1 2 3 4 5 6 7 8 9 + /} { set base64_tmp($char) $i lappend base64_en $char incr i } # # Create base64 as list: to code for instance C<->3, specify # that [lindex $base64 67] be 3 (C is 67 in ascii); non-coded # ascii chars get a {}. we later use the fact that lindex on a # non-existing index returns {}, and that [expr {} < 0] is true # # the last ascii char is 'z' scan z %c len for {set i 0} {$i <= $len} {incr i} { set char [format %c $i] set val {} if {[info exists base64_tmp($char)]} { set val $base64_tmp($char) } else { set val {} } lappend base64 $val } # code the character "=" as -1; used to signal end of message scan = %c i set base64 [lreplace $base64 $i $i -1] # remove unneeded variables unset base64_tmp i char len val namespace export encode decode } # ::base64::encode -- # # Base64 encode a given string. # # Arguments: # args ?-maxlen maxlen? ?-wrapchar wrapchar? string # # If maxlen is 0, the output is not wrapped. # # Results: # A Base64 encoded version of $string, wrapped at $maxlen characters # by $wrapchar. proc ::base64::encode {args} { set base64_en $::base64::base64_en # Set the default wrapchar and maximum line length to match the output # of GNU uuencode 4.2. Various RFCs allow for different wrapping # characters and wraplengths, so these may be overridden by command line # options. set wrapchar "\n" set maxlen 60 if { [llength $args] == 0 } { error "wrong # args: should be \"[lindex [info level 0] 0]\ ?-maxlen maxlen? ?-wrapchar wrapchar? string\"" } set optionStrings [list "-maxlen" "-wrapchar"] for {set i 0} {$i < [llength $args] - 1} {incr i} { set arg [lindex $args $i] set index [lsearch -glob $optionStrings "${arg}*"] if { $index == -1 } { error "unknown option \"$arg\": must be -maxlen or -wrapchar" } incr i if { $i >= [llength $args] - 1 } { error "value for \"$arg\" missing" } set val [lindex $args $i] # The name of the variable to assign the value to is extracted # from the list of known options, all of which have an # associated variable of the same name as the option without # a leading "-". The [string range] command is used to strip # of the leading "-" from the name of the option. # # FRINK: nocheck set [string range [lindex $optionStrings $index] 1 end] $val } # [string is] requires Tcl8.2; this works with 8.0 too if {[catch {expr {$maxlen % 2}}]} { error "expected integer but got \"$maxlen\"" } set string [lindex $args end] set result {} set state 0 set length 0 # Process the input bytes 3-by-3 binary scan $string c* X foreach {x y z} $X { # Do the line length check before appending so that we don't get an # extra newline if the output is a multiple of $maxlen chars long. if {$maxlen && $length >= $maxlen} { append result $wrapchar set length 0 } append result [lindex $base64_en [expr {($x >>2) & 0x3F}]] if {$y != {}} { append result [lindex $base64_en [expr {(($x << 4) & 0x30) | (($y >> 4) & 0xF)}]] if {$z != {}} { append result \ [lindex $base64_en [expr {(($y << 2) & 0x3C) | (($z >> 6) & 0x3)}]] append result [lindex $base64_en [expr {($z & 0x3F)}]] } else { set state 2 break } } else { set state 1 break } incr length 4 } if {$state == 1} { append result [lindex $base64_en [expr {(($x << 4) & 0x30)}]]== } elseif {$state == 2} { append result [lindex $base64_en [expr {(($y << 2) & 0x3C)}]]= } return $result } # ::base64::decode -- # # Base64 decode a given string. # # Arguments: # string The string to decode. Characters not in the base64 # alphabet are ignored (e.g., newlines) # # Results: # The decoded value. proc ::base64::decode {string} { if {[string length $string] == 0} {return ""} set base64 $::base64::base64 set output "" ; # Fix for [Bug 821126] binary scan $string c* X foreach x $X { set bits [lindex $base64 $x] if {$bits >= 0} { if {[llength [lappend nums $bits]] == 4} { foreach {v w z y} $nums break set a [expr {($v << 2) | ($w >> 4)}] set b [expr {(($w & 0xF) << 4) | ($z >> 2)}] set c [expr {(($z & 0x3) << 6) | $y}] append output [binary format ccc $a $b $c] set nums {} } } elseif {$bits == -1} { # = indicates end of data. Output whatever chars are left. # The encoding algorithm dictates that we can only have 1 or 2 # padding characters. If x=={}, we have 12 bits of input # (enough for 1 8-bit output). If x!={}, we have 18 bits of # input (enough for 2 8-bit outputs). foreach {v w z} $nums break set a [expr {($v << 2) | (($w & 0x30) >> 4)}] if {$z == {}} { append output [binary format c $a ] } else { set b [expr {(($w & 0xF) << 4) | (($z & 0x3C) >> 2)}] append output [binary format cc $a $b] } break } else { # RFC 2045 says that line breaks and other characters not part # of the Base64 alphabet must be ignored, and that the decoder # can optionally emit a warning or reject the message. We opt # not to do so, but to just ignore the character. continue } } return $output } } package provide base64 2.3.2 libengine-gost-openssl-3.0.2/tcl_tests/ca.try000066400000000000000000000120141446070765000212410ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ ca" if {[info exists env(ALG_LIST)]} { set alg_pair_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_pair_list {gost2001:A {gost2001:B} gost2012_256:A {gost2012_256:C} gost2012_512:B {gost2012_256:B gost2012_512:A}}} "open" { set alg_pair_list { gost2001:A {gost2001:B} gost2012_256:A {gost2012_256:B gost2012_512:B} gost2012_256:TCA {gost2012_256:A gost2012_512:A} gost2012_512:A {gost2012_256:A gost2012_256:TCA gost2012_512:A gost2012_512:C} gost2012_512:C {gost2012_256:B gost2012_256:TCB gost2012_512:B gost2012_512:C} } } } } foreach {ca_alg alg_list} $alg_pair_list { set ca_alg_fn [string map {":" "_"} $ca_alg] test "Creating CA ($ca_alg)" { makeCA ${testname}CA-$ca_alg_fn $ca_alg } 0 1 set serial_list "" foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set userdir U_ca_${alg_fn}_for_${ca_alg_fn} #Depends on previous test "Creating user request ($alg)" { makeUser $userdir $alg } 0 1 test -skip {![file exists $userdir/req.pem]} "Registering cert at CA" { grep Sign [openssl "ca -config $::test::ca/ca.conf -in $userdir/req.pem -out $userdir/cert.pem -batch -notext"] } 0 "Signature ok " if [file exists $userdir/req.pem] { set cert [getFile $userdir/req.pem] makeFile $userdir/broken.pem [hackPem "Cryptocom" $cert "Kriptokom"] } test -skip {![file exists $userdir/broken.pem]} "Registering broken request at ca" { grep Sign [openssl "ca -config $::test::ca/ca.conf -in $userdir/broken.pem -out $userdir/badcert.pem -batch"] } 0 "Signature did not match the certificate request " #test "Generating self-signed CA certificate" { # #} 0 "not written" test "Revoking certificate" { set revoking_cert $::test::ca/newcerts/[string trim [getFile $::test::ca/serial.old]].pem append serial_list [regsub "serial=" [openssl "x509 -in $revoking_cert -noout -serial"] " Serial Number: "] string map {"Data Base" Database Updated updated} [ grep "Data" [openssl "ca -crl_reason keyCompromize -crl_compromise [clock\ format [clock seconds] -format %Y%m%d%H%M%SZ] -revoke $revoking_cert -config $::test::ca/ca.conf"] ] } 0 "Database updated " test -createsfiles test.crl "Generating CRL" { openssl "ca -gencrl -config $::test::ca/ca.conf -out test.crl" file copy -force $::test::ca/cacert.pem test_crl_cacert.pem file exist test.crl } 0 1 test -skip {![file exists test.crl]} "Displaying CRL" { regsub -all " = " [grep "(Serial|Version|Signature Alg|Issuer)" [openssl "crl -text -noout -in test.crl"] ] "=" } 0 " Version 2 (0x1) Signature Algorithm: [hash_with_sign_long_name $ca_alg] Issuer: C=RU, L=Moscow, CN=Test CA $ca_alg, O=Cryptocom, OU=OpenSSL CA, emailAddress=openssl@cryptocom.ru $serial_list Signature Algorithm: [hash_with_sign_long_name $ca_alg] " test -skip {![file exists test.crl]} "Verifying CRL OK" { grep verify [openssl "crl -in test.crl -noout -CAfile $::test::ca/cacert.pem"] } 0 "verify OK " test -skip {![file exists test.crl]} "Verifying corrupted CRL" { makeFile "badcrl.pem" [hackPem "\01\x1E" [getFile test.crl] "\01\0"] grep verify [openssl "crl -in badcrl.pem -noout -CAfile $::test::ca/cacert.pem"] } 0 "verify failure " test "Verifying CA certificate" { grep "(cacert.pem|error|OK)" [openssl "verify -CAfile $::test::ca/cacert.pem $::test::ca/cacert.pem"] } 0 "$::test::ca/cacert.pem: OK " test "Verifying certificate" { grep "cert.pem" [openssl "verify -CAfile $::test::ca/cacert.pem $userdir/cert.pem"] } 0 "$userdir/cert.pem: OK " test "Verifying bad certificate" { makeFile "badcert.pem" [hackPem "Team" [getFile $userdir/cert.pem] "meat"] openssl "verify -CAfile $::test::ca/cacert.pem badcert.pem" } 1 "certificate signature failure" test "Verifying revoked certificate" { makeFile ca_crl.pem "[getFile $::test::ca/cacert.pem]\n[getFile test.crl]" openssl "verify -crl_check -CAfile ca_crl.pem $userdir/cert.pem" } 1 "certificate revoked" test "Create a PKCS#7 structure from a certificate and CRL" { openssl "crl2pkcs7 -in test.crl -certfile $userdir/cert.pem -out $userdir/p7.pem" extract_oids $userdir/p7.pem PEM } 0 [mkObjList [hash_with_sign_long_name $ca_alg] [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg] $alg] [hash_with_sign_long_name $ca_alg] [hash_with_sign_long_name $ca_alg] [hash_with_sign_long_name $ca_alg]] test "Creates a PKCS#7 structure without CRL" { openssl "crl2pkcs7 -nocrl -certfile $userdir/cert.pem -certfile $::test::ca/cacert.pem -out $userdir/p7_nocrl.pem" extract_oids $userdir/p7_nocrl.pem PEM } 0 [mkObjList [hash_with_sign_long_name $ca_alg] [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg] $alg] [hash_with_sign_long_name $ca_alg] [hash_with_sign_long_name $ca_alg] [alg_long_name $ca_alg] [pubkey_long_name $ca_alg] [param_hash_long_name [param_hash $ca_alg] $ca_alg] [hash_with_sign_long_name $ca_alg]] } } end_tests libengine-gost-openssl-3.0.2/tcl_tests/calchash.tcl000077500000000000000000000027141446070765000224010ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require test if {$::tcl_platform(platform) eq "windows"} { set prefix {//laputa/dist/magpro/FSB_CryptoPack_21.1/binaries} } else { set prefix {/net/laputa/pub/magpro/FSB_CryptoPack_21.1/binaries} } set PREFIX_ENV_NAME CALCHASH_PREFIX if {$argc != 1} { puts stderr "Usage $argv0 path" puts stderr "This script tests programms prefix/path/calchach and prefix/path/gostsum." puts stderr "Defauld prefix is $prefix" puts stderr "Prefix can be changes by envirament veriable $PREFIX_ENV_NAME" exit 1 } if {[info exist env($PREFIX_ENV_NAME)]} { set prefix $env($PREFIX_ENV_NAME) } set path [lindex $argv 0] set testdir [exec hostname]-hashes puts $testdir catch {file delete -force $testdir} file mkdir $testdir cd $testdir start_tests "ĐĸĐĩҁ҂ҋ Đ´ĐģŅ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧ calchash и gostsum" test -createsfiles dgst.dat "calchash" { makeFile dgst.dat [string repeat "Test data to digest.\n" 100] binary string match *DB9232D96CAE7AABA817350EF6CF4C25604D8FD36965F78CEB3CE59FD31CCB2A [exec $prefix/$path/calchash dgst.dat] } 0 1 test -platform unix "gostsum (paramset cryptopro-A)" { exec $prefix/$path/gostsum dgst.dat } 0 "5c8621c036f8636fa3ea711a78e5051f607c87b4b715482af74b2b1cce62e442 dgst.dat" test -platform unix "gostsum -t (paramset test)" { exec $prefix/$path/gostsum -t dgst.dat } 0 "db9232d96cae7aaba817350ef6cf4c25604d8fd36965f78ceb3ce59fd31ccb2a dgst.dat" end_tests libengine-gost-openssl-3.0.2/tcl_tests/calcstat000066400000000000000000000030151446070765000216400ustar00rootroot00000000000000#!/usr/bin/tclsh if {$tcl_platform(platform) == "unix"} { fconfigure stdout -translation lf } lappend auto_path [file dirname [info script]] proc rus {string} { return $string } proc compare_order {el1 el2} { global order return [expr {$order($el1)-$order($el2)}] } set statsfile stats if {$argc} {set statsfile [lindex $argv 0]} set f [open $statsfile] fconfigure $f -encoding utf-8 set ordno 0 while {[gets $f line] >=0} { set script [lindex $line 0] set a($script) [lrange $line 1 end] if {![info exists order($script)]} { set order($script) [incr ordno] } } close $f proc output {line} { global out puts $line if {[info exists out]} { puts $out $line } } if {$argc > 1} { set out [open [lindex $argv 1] w] fconfigure $out -encoding utf-8 } output [format "%-12s %-41s%5s %4s %4s %4s %4s" File "Test name" Total ok fail skip ign] output [string repeat "-" 79] array set gross {total 0 ok 0 fail 0 p_skip 0 c_skip 0} foreach script [lsort -command compare_order [array names a] ] { foreach {name total ok fail p_skip c_skip} $a($script) break output [format "%-12s %-41s%5d %4d %4d %4d %4d" [string range [file tail [file rootname $script]] 0 11] [string range $name 0 40] $total $ok $fail $p_skip $c_skip] incr gross(total) $total incr gross(ok) $ok incr gross(fail) $fail incr gross(p_skip) $p_skip incr gross(c_skip) $c_skip } output [string repeat "-" 79] output [format "%-54s%5d %4d %4d %4d %4d" Total $gross(total) $gross(ok) $gross(fail) $gross(p_skip) $gross(c_skip)] if {$gross(fail)} { exit 1 } libengine-gost-openssl-3.0.2/tcl_tests/cbc0.enc000066400000000000000000000000501446070765000214110ustar00rootroot00000000000000Salted__ģd°å„Ŋ1Ž‚ĐŪo‡tV‚ēŲ‹ "h;ķ›hú‡libengine-gost-openssl-3.0.2/tcl_tests/cbc1.enc000066400000000000000000000000301446070765000214100ustar00rootroot00000000000000‚ĐŪo‡tV‚ēŲ‹ "h;ķ›hú‡libengine-gost-openssl-3.0.2/tcl_tests/cfb0.enc000066400000000000000000000000451446070765000214200ustar00rootroot00000000000000Salted__Š„ˆĻ8>õ išĢĘS#Õ@ųÃđgu“ī$libengine-gost-openssl-3.0.2/tcl_tests/cfb1.enc000066400000000000000000000000251446070765000214170ustar00rootroot00000000000000õ išĢĘS#Õ@ųÃđgu“ī$libengine-gost-openssl-3.0.2/tcl_tests/ciphers.try000066400000000000000000000022531446070765000223170ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ ciphers" proc find_ciphers {openssl_args globpattern} { set found [lsort [lsearch -all -inline [split [string trim [grep $globpattern [openssl $openssl_args] ] "\n" ] : ] "$globpattern*"] ] return $found } test "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐŋОддĐĩŅ€ĐļĐē҃ Ņ€ĐžŅŅĐ¸ĐšŅĐēĐ¸Ņ… аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧОв в tls" { find_ciphers "ciphers" "GOST" } 0 {GOST2001-GOST89-GOST89 GOST2012-GOST8912-GOST8912} test "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐŋОддĐĩŅ€ĐļĐē҃ Ņ€ĐžŅŅĐ¸ĐšŅĐēĐ¸Ņ… аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧОв ĐąĐĩС ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐ¸Ņ в tls" { find_ciphers "ciphers NULL" "GOST" } 0 {GOST2001-NULL-GOST94 GOST2012-NULL-GOST12} #test "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐžŅ‚ŅŅƒŅ‚ŅŅ‚Đ˛Đ¸Đĩ Ņ€ĐžŅŅĐ¸ĐšŅĐēĐ¸Ņ… аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧОв в ssl2" { # find_ciphers "ciphers -ssl2" "GOST" #} 0 "" #test "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ Ņ€Đ°ĐąĐžŅ‚ĐžŅĐŋĐžŅĐžĐąĐŊĐžŅŅ‚ŅŒ ĐēĐžĐŧаĐŊĐ´Ņ‹ ciphers" { # find_ciphers "ciphers AES" "AES" #} 0 {"ADH-AES256-SHA" #"DHE-RSA-AES256-SHA" #"DHE-DSS-AES256-SHA" #"AES256-SHA" #"ADH-AES128-SHA" #"DHE-RSA-AES128-SHA" #"DHE-DSS-AES128-SHA" #"AES128-SHA" #} end_tests libengine-gost-openssl-3.0.2/tcl_tests/client.try000066400000000000000000000111231446070765000221340ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest if {$argc != 1} { puts stderr "Usage $argv0 cipher-list-file" exit 1 } array set protos { SSLv2 -ssl2 SSLv3 -ssl3 TLSv1 -tls1 TLSv1.1 -tls1_1 TLSv1.2 -tls1_2 "default" {} } get_hosts [lindex $argv 0] cd $::test::dir start_tests "TLS-ŅĐžĐĩдиĐŊĐĩĐŊиĐĩ ĐžŅ‚ ĐēĐģиĐĩĐŊŅ‚Đ° [lindex $argv 0]" set CAhost lynx.lan.cryptocom.ru set CAprefix /cgi-bin/autoca foreach alg [array names hosts] { set alg2 [regsub {(gost\d+)cp} $alg {\1}] set alg_fn [string map {":" "_"} $alg2] set alg_ca [regexp -inline {^[^:]+} $alg] log "alg_fn=$alg_fn" if {[string match gost2001* $alg]} { set alg_cli_list "gost2001_A gost2001_XA" } elseif {[string match gost2012* $alg]} { set alg_cli_list "gost2001_A gost2012_256_A gost2012_256_XA gost2012_512_A gost2012_512_B" } else { set alg_cli_list $alg_ca } test -skip {[file exist ca_$alg_ca.pem]} "ПоĐģŅƒŅ‡Đ¸Ņ‚ŅŒ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ $alg_ca CA" { getCAcert $CAhost $CAprefix $alg_ca } 0 "ca_$alg_ca.pem" test -skip {[file exist srv_$alg_fn/cert.pem]} "ПоĐģŅƒŅ‡Đ¸Ņ‚ŅŒ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ $alg Đ´ĐģŅ ҁĐĩŅ€Đ˛ĐĩŅ€Đ°" { getCAAlgParams $CAhost $CAprefix $alg_ca if {![makeUser srv_$alg_fn $alg2 CN [info hostname]]} { error "Request generation failed" } registerUserAtCA srv_$alg_fn $CAhost $CAprefix $alg_ca file exists srv_$alg_fn/cert.pem } 0 1 if {[array exists suites]} {array unset suites} array set suites $hosts($alg) foreach suite [array names suites] { if {![regexp {(.+):(.+)} $suite => proto cs]} { set cs $suite set proto "default" } if {[info exists suite_map($cs)]} { set mycs $suite_map($cs) } else { set mycs $cs } set host [lindex [split $suites($suite) :] 0] set host_short [lindex [split $host .] 0] # We assume that CA certificates are already copied into Apache # cert dir set ca_file "/etc/apache/ssl.crt/${alg_ca}-root.crt" test "ĐšĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊŅ‹Đš Ņ…ŅĐŊĐ´ŅˆĐĩĐšĐē $suite" { remote_client $host set list [client_server [list -connect [info hostname]:4433 \ -CAfile $ca_file -state -cipher $cs] \ [concat [list -www -cert srv_$alg_fn/cert.pem \ -key srv_$alg_fn/seckey.pem -cipher $mycs] $protos($proto)] {}] set cln_exit_code [lindex $list 2] set srv_error [string match "*error*" [lindex $list 4]] if {[regexp -lineanchor \ {^\s*Protocol\s*:\s*(\S*)\s*$.*^\s*Cipher\s*:\s*(\S*)\s*$} \ [lindex $list 0] -> result_proto result_cipher]} { if {$proto == "default"} {set result_proto "default"} list $cln_exit_code $srv_error $result_proto $result_cipher } else { lindex $list 1 } } 0 [list 0 0 $proto $cs] test "ĐĄĐĩŅ€Đ˛ĐĩŅ€ ҂ҀĐĩĐąŅƒĐĩŅ‚ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚, ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ° ĐŊĐĩŅ‚ $suite" { remote_client $host set list [client_server [list -connect [info hostname]:4433 \ -CAfile $ca_file -state -cipher $cs] \ [concat [list -www -cert srv_$alg_fn/cert.pem \ -key srv_$alg_fn/seckey.pem -cipher $mycs -Verify 3 \ -verify_return_error] $protos($proto)] {}] string match "*error*" [lindex $list 4] } 0 1 test "НĐĩĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊŅ‹Đš ĐēĐģиĐĩĐŊ҂ҁĐēиК ҁĐĩŅ€Ņ‚Ņ„Đ¸Đ¸ĐēĐ°Ņ‚ $suite" { remote_client $host set list [client_server [list -connect [info hostname]:4433 \ -cert /home/build/client-$alg_ca/cert.pem \ -key /home/build/client-$alg_ca/seckey.pem \ -CAfile $ca_file -state -cipher $cs] \ [concat [list -www -cert srv_$alg_fn/cert.pem \ -key srv_$alg_fn/seckey.pem -cipher $mycs -Verify 3 \ -verify_return_error] $protos($proto)] {}] string match "*error*" [lindex $list 4] } 0 1 foreach alg_cli $alg_cli_list { test "КĐģиĐĩĐŊ҂ҁĐēиК ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ $alg_cli $suite" { remote_client $host set list [client_server [list -connect [info hostname]:4433 \ -cert /home/build/client-$alg_cli/cert.pem \ -key /home/build/client-$alg_cli/seckey.pem \ -CAfile $ca_file -state -cipher $cs] \ [concat [list -www -cert srv_$alg_fn/cert.pem \ -key srv_$alg_fn/seckey.pem -CAfile ca_$alg_ca.pem \ -cipher $mycs -Verify 3 -verify_return_error] \ $protos($proto)] {}] set cln_exit_code [lindex $list 2] set srv_error [string match "*error*" [lindex $list 4]] if {[regexp -lineanchor \ {^\s*Protocol\s*:\s*(\S*)\s*$.*^\s*Cipher\s*:\s*(\S*)\s*$} \ [lindex $list 0] -> result_proto result_cipher]} { if {$proto == "default"} {set result_proto "default"} list $cln_exit_code $srv_error $result_proto $result_cipher } else { lindex $list 1 } } 0 [list 0 0 $proto $cs] } } } end_tests libengine-gost-openssl-3.0.2/tcl_tests/cms.try000066400000000000000000000204201446070765000214400ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ cms" test "Creating CA 2001" { makeCA ${testname}CA gost2001:A } 0 1 test "Creating CA 2012" { makeCA } 0 1 if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {gost2001:A gost2001:B gost2001:C gost2012_256:A gost2012_256:B gost2012_256:C gost2012_512:A gost2012_512:B}} "open" {set alg_list {gost2001:A gost2001:B gost2001:C gost2012_256:A gost2012_256:B gost2012_256:C gost2012_512:A gost2012_512:B}} } } foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username U_cms_$alg_fn switch -glob $alg { gost2012* {set ::test::ca ${testname}CA-2012 set ca_sign_alg hash_with_sign12_512 } * {set ::test::ca ${testname}CA set ca_sign_alg hash_with_sign01_cp } } test "Creating user with signing key $alg" { makeRegisteredUser $username $alg if {![file exists $username/req.pem]&&[file exists $username/cert.pem]} { file delete $username/cert.pem } file exists $username/cert.pem } 0 1 test -skip {![file exists $username/cert.pem]} -createsfiles [list cms_sign.dat cms_sign_$alg_fn.msg] "Signing a message without cert by $alg" { makeFile cms_sign.dat [string repeat "Test data to cms_sign.\n" 100] openssl "cms -sign -in cms_sign.dat -text -out cms_sign_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem -nocerts" file isfile cms_sign_$alg_fn.msg } 0 1 test -skip {![file exist cms_sign_$alg_fn.msg]} "Checking micalg param in signed without cert $alg message" { regexp -- micalg="[micalg [alg_hash $alg]]" [grep micalg [getFile cms_sign_$alg_fn.msg]] } 0 1 test -createsfiles cms_sign_$alg_fn.pem -skip {![file exist cms_sign_$alg_fn.msg]} "Extracting CMS from signed without cert $alg message" { openssl "cms -cmsout -out cms_sign_$alg_fn.pem -outform PEM -in cms_sign_$alg_fn.msg" file isfile cms_sign_$alg_fn.pem } 0 1 test -skip {![file exists cms_sign_$alg_fn.pem]} "Checking oids in cms struct" { extract_oids cms_sign_$alg_fn.pem PEM } 0 [mkObjList [hash_long_name $alg] [hash_long_name $alg] "GOST R 34.11-2012 with 256 bit hash" "GOST R 34.11-2012 with 512 bit hash" "GOST R 34.11-94" "GOST 28147-89" [alg_long_name $alg]] # hash_12_256 hash_12_512 hash_94 crypt89_cc are from sMIMECapabilities test -skip {![file exists cms_sign_$alg_fn.msg]} "Verifying a message signed with $alg without ca " { grep Veri [openssl "cms -verify -text -in cms_sign_$alg_fn.msg -out cms_verified.txt -noverify -certfile $username/cert.pem"] } 0 "CMS Verification successful " test -skip {![file exists cms_sign_$alg_fn.msg]} "Verifying a message signed with $alg with ca" { grep Veri [openssl "cms -verify -text -in cms_sign_$alg_fn.msg -out cms_verified.txt -certfile $username/cert.pem -CAfile $::test::ca/cacert.pem"] } 0 "CMS Verification successful " test -skip {![file exists cms_sign_$alg_fn.msg]} -createsfiles [list cms_bad_$alg_fn.msg cms_verified.txt] "Verifying corrupted messages signed with $alg" { set corrupted [getFile cms_sign_$alg_fn.msg] set index [string first "Test data" $corrupted ] makeFile cms_bad_$alg_fn.msg [string replace $corrupted $index [expr $index+9] "Bad data"] grep Verification [openssl "cms -verify -text -in cms_bad_$alg_fn.msg -out cms_verified.txt -noverify -certfile $username/cert.pem"] } 1 "Verification failure" test -skip {![file exists $username/cert.pem]} -createsfiles [list cms_sign.dat cms_sign_c_$alg_fn.msg] "Signing a message by $alg with cert" { makeFile cms_sign.dat [string repeat "Test data to sign.\n" 100] openssl "cms -sign -in cms_sign.dat -crlfeol -text -out cms_sign_c_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem" file isfile cms_sign_c_$alg_fn.msg } 0 1 test -skip {![file exist cms_sign_c_$alg_fn.msg]} "Checking micalg param in signed with cert $alg message" { regexp -- micalg="[micalg [alg_hash $alg]]" [grep micalg [getFile cms_sign_c_$alg_fn.msg]] } 0 1 test -skip {![file exists cms_sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert inside without ca" { grep Veri [openssl "cms -verify -text -in cms_sign_c_$alg_fn.msg -out cms_verified.txt -noverify"] } 0 "CMS Verification successful " test -skip {![file exists cms_sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert with ca" { grep Veri [openssl "cms -verify -text -in cms_sign_c_$alg_fn.msg -out cms_verified.txt -CAfile $::test::ca/cacert.pem"] } 0 "CMS Verification successful " test -skip {![file exists $username/cert.pem]} -createsfiles {cms_sign.dat cms_sign_op_$alg_fn.msg} "Signing a message by $alg with cert using opaque signing" { makeFile cms_sign.dat [string repeat "Test data to cms_sign.\n" 100] openssl "cms -sign -in cms_sign.dat -text -out cms_sign_op_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem -nodetach" file isfile cms_sign_op_$alg_fn.msg } 0 1 test -createsfiles cms_verified.txt -skip {![file exists cms_sign_op_$alg_fn.msg]} "Verifying a message signed by $alg having cert inside without ca" { grep Veri [openssl "cms -verify -text -in cms_sign_op_$alg_fn.msg -out cms_verified.txt -noverify"] } 0 "CMS Verification successful " test -createsfiles cms_verified.txt -skip {![file exists cms_sign_op_$alg_fn.msg]} "Verifying a $alg opaque message with ca" { grep Veri [openssl "cms -verify -text -in cms_sign_op_$alg_fn.msg -out cms_verified.txt -CAfile $::test::ca/cacert.pem"] } 0 "CMS Verification successful " test -createsfiles cms_broken_op_$alg_fn.msg -skip {![file exists cms_sign_op_$alg_fn.msg]} "Verifying broken $alg opaque message" { set data [getFile cms_sign_op_$alg_fn.msg] regexp "(.*)\n\r?\n(.+)" $data match header encoded set asnstruct [::base64::decode $encoded] makeFile cms_broken_op_$alg_fn.msg "$header\n\n[::base64::encode [regsub -all\ "Test data" $asnstruct "Best data"]]" grep Verification [openssl "cms -verify -text -in cms_broken_op_$alg_fn.msg -out cms_verified.txt -CAfile $::test::ca/cacert.pem"] } 1 "Verification failure" test -createsfiles "cms_sign_det_$alg_fn.msg" -skip {![file exists $username/cert.pem]||![file exists cms_sign.dat]} "Creating detached $alg signature" { openssl "cms -sign -binary -in cms_sign.dat -out cms_sign_det_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem" file exists cms_sign_det_$alg_fn.msg } 0 1 test -skip {![file exist cms_sign_det_$alg_fn.msg]} "Checking micalg param in detached $alg signature" { regexp -- micalg="[micalg [alg_hash $alg]]" [grep micalg [getFile cms_sign_det_$alg_fn.msg]] } 0 1 test -createsfiles cms_sign_det_$alg_fn.pem -skip {![file exist cms_sign_det_$alg_fn.msg]} "Extracting CMS from signed $alg message" { openssl "cms -cmsout -out cms_sign_det_$alg_fn.pem -outform PEM -in cms_sign_det_$alg_fn.msg" file isfile cms_sign_$alg_fn.pem } 0 1 #We expect cryptocom oids because of cert cms_signed by ca with Cryptocom algs # Result sequence # 1. digest # 2. algorithm of CA key # 3. algorithm of current key # 4. algorithm of CA key # 5. digest # 6. digests from sMIMECapabilities # 7. encryption from sMIMECapabilities # 8. algorithm of current key test -skip {![file exists cms_sign_$alg_fn.pem]} "Checking oids in cms struct" { extract_oids cms_sign_det_$alg_fn.pem PEM } 0 [mkObjList [hash_long_name $alg] [smime_hash_with_sign_long_name $ca_sign_alg] [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg]] [smime_hash_with_sign_long_name $ca_sign_alg] [hash_long_name $alg] "GOST R 34.11-2012 with 256 bit hash" "GOST R 34.11-2012 with 512 bit hash" "GOST R 34.11-94" "GOST 28147-89" [alg_long_name $alg]] test -skip {![file exists cms_sign_det_$alg_fn.pem]} "Verifying detached $alg cms_signature" { grep Veri [openssl "cms -verify -binary -content cms_sign.dat -inform PEM -in cms_sign_det_$alg_fn.pem -out cms_verified.txt -noverify"] } 0 "CMS Verification successful " test -skip {![file exists cms_sign_det_$alg_fn.msg]} -createsfiles {bad.dat} "Verifying corrupted $alg detached cms_signature" { makeFile bad.dat [regsub Test [getFile cms_sign.dat] Best] grep Verification [openssl "cms -verify -content bad.dat -in cms_sign_det_$alg_fn.msg -out cms_verified.txt -CAfile $::test::ca/cacert.pem"] } 1 "Verification failure" } end_tests libengine-gost-openssl-3.0.2/tcl_tests/cms2.try000066400000000000000000000223561446070765000215340ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ cms - Đ˛Ņ‚ĐžŅ€Đ°Ņ ĐŋОдĐŋĐ¸ŅŅŒ" test "Creating CA" { makeCA } 0 1 makeFile cms_signed2.dat "Test data for 2 signatures" foreach length {256 512} { test "Creating users $length" { makeRegisteredUser U_cms_1_$length gost2012_$length:A CN USER1_$length emailAddress test@cryptocom.ru makeRegisteredUser U_cms_2_$length gost2012_$length:A CN USER2_$length emailAddress test@cryptocom.ru } 0 1 test -createsfiles cms_signed2_1_$length.asn "Signing in DER format with 1st signature" { openssl "cms -sign -binary -outform der -inform der -nodetach -inkey U_cms_1_$length/seckey.pem -signer U_cms_1_$length/cert.pem -in cms_signed2.dat -out cms_signed2_1_$length.asn" file isfile cms_signed2_1_$length.asn } 0 1 test -createsfiles cms_signed2_2_$length.asn "Signing in DER format with 2nd signature" { openssl "cms -resign -binary -outform der -inform der -nodetach -inkey U_cms_2_$length/seckey.pem -signer U_cms_2_$length/cert.pem -in cms_signed2_1_$length.asn -out cms_signed2_2_$length.asn" file isfile cms_signed2_2_$length.asn } 0 1 test -createsfiles {was_signed.dat signer.certs} "Verifying signature in DER format" { grep "Verif" [openssl "cms -verify -inform der -in cms_signed2_2_$length.asn -noverify -signer signer.certs -out was_signed.dat"] } 0 {CMS Verification successful } test "Signed data is extracted correctly" { string eq [getFile cms_signed2.dat] [getFile was_signed.dat] } 0 1 ### Test extracted sertificates test "Extracting signer certificates" { set i 0 set subjs {} set certs [regexp -all -inline -- {-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----} [getFile signer.certs]] foreach cert $certs { makeFile cert[incr i].pem $cert lappend subjs [regsub -all " = " [grep subject [openssl "x509 -in cert$i.pem -subject -noout"]] "=" ] } lsort $subjs } 0 "{subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER1_$length, emailAddress=test@cryptocom.ru } {subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER2_$length, emailAddress=test@cryptocom.ru }" test -createsfiles cms_signed2_1_$length\_op.msg "Signing opaque in S/MIME format with 1st signature" { openssl "cms -sign -binary -inform der -nodetach -inkey U_cms_1_$length/seckey.pem -signer U_cms_1_$length/cert.pem -in cms_signed2.dat -out cms_signed2_1_$length\_op.msg" file isfile cms_signed2_1_$length\_op.msg } 0 1 test -createsfiles cms_signed2_2_$length\_op.msg "Signing opaque in S/MIME format with 2nd signature" { openssl "cms -resign -binary -nodetach -inkey U_cms_2_$length/seckey.pem -signer U_cms_2_$length/cert.pem -in cms_signed2_1_$length\_op.msg -out cms_signed2_2_$length\_op.msg" file isfile cms_signed2_2_$length\_op.msg } 0 1 test -createsfiles {was_signed.dat signer.certs} "Verifying opaque signature in S/MIME format" { grep "Verif" [openssl "cms -verify -in cms_signed2_2_$length\_op.msg -noverify -signer signer.certs -out was_signed.dat"] } 0 {CMS Verification successful } test "Signed data is extracted correctly" { string eq [getFile cms_signed2.dat] [getFile was_signed.dat] } 0 1 ### Test extracted sertificates test "Extracting signer certificates" { set i 0 set subjs {} set certs [regexp -all -inline -- {-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----} [getFile signer.certs]] foreach cert $certs { makeFile cert[incr i].pem $cert lappend subjs [regsub -all " = " [grep subject [openssl "x509 -in cert$i.pem -subject -noout"]] "=" ] } lsort $subjs } 0 "{subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER1_$length, emailAddress=test@cryptocom.ru } {subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER2_$length, emailAddress=test@cryptocom.ru }" test -createsfiles cms_signed2_1_$length\_det.asn "Signing detached in DER format with 1st signature" { openssl "cms -sign -binary -outform der -inkey U_cms_1_$length/seckey.pem -signer U_cms_1_$length/cert.pem -in cms_signed2.dat -out cms_signed2_1_$length\_det.asn" file isfile cms_signed2_1_$length\_det.asn } 0 1 test -createsfiles cms_signed2_2_$length\_det.asn "Signing detached in DER format with 2nd signature" { openssl "cms -resign -binary -inkey U_cms_2_$length/seckey.pem -signer U_cms_2_$length/cert.pem -in cms_signed2_1_$length\_det.asn -content cms_signed2.dat -inform der -outform der -out cms_signed2_2_$length\_det.asn" file isfile cms_signed2_2_$length\_det.asn } 0 1 test -createsfiles {was_signed.dat signer.certs} "Verifying detached signature in DER format" { grep "Verif" [openssl "cms -verify -in cms_signed2_2_$length\_det.asn -noverify -signer signer.certs -out was_signed.dat -content signed2.dat -inform der"] } 0 {CMS Verification successful } test "Signed data is extracted correctly" { string eq [getFile cms_signed2.dat] [getFile was_signed.dat] } 0 1 ### Test extracted sertificates test "Extracting signer certificates" { set i 0 set subjs {} set certs [regexp -all -inline -- {-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----} [getFile signer.certs]] foreach cert $certs { makeFile cert_asn[incr i].pem $cert lappend subjs [regsub -all " = " [grep subject [openssl "x509 -in cert$i.pem -subject -noout"]] "=" ] } lsort $subjs } 0 "{subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER1_$length, emailAddress=test@cryptocom.ru } {subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER2_$length, emailAddress=test@cryptocom.ru }" test -createsfiles cms_signed2_1_$length.msg "Signing in S/MIME format with 1st signature" { openssl "cms -sign -binary -inform der -inkey U_cms_1_$length/seckey.pem -signer U_cms_1_$length/cert.pem -in cms_signed2.dat -out cms_signed2_1_$length.msg" file isfile cms_signed2_1_$length.msg } 0 1 test -createsfiles cms_signed2_2_$length.msg "Signing in S/MIME format with 2nd signature" { grep "SMIME" [openssl "cms -resign -binary -inkey U_cms_2_$length/seckey.pem -signer U_cms_2_$length/cert.pem -in cms_signed2_1_$length.msg -inform smime -out cms_signed2_2_$length.msg"] } 0 "" test -createsfiles {was_signed.dat signer.certs} "Verifying signature in S/MIME format" { grep "Verif" [openssl "cms -verify -in cms_signed2_2_$length.msg -noverify -signer signer.certs -out was_signed.dat -inform smime"] } 0 {CMS Verification successful } test "Signed data is extracted correctly" { string eq [getFile cms_signed2.dat] [getFile was_signed.dat] } 0 1 ### Test extracted sertificates test "Extracting signer certificates" { set i 0 set subjs {} set certs [regexp -all -inline -- {-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----} [getFile signer.certs]] foreach cert $certs { makeFile cert_cms[incr i].pem $cert lappend subjs [regsub -all " = " [grep subject [openssl "x509 -in cert$i.pem -subject -noout"]] "=" ] } lsort $subjs } 0 "{subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER1_$length, emailAddress=test@cryptocom.ru } {subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER2_$length, emailAddress=test@cryptocom.ru }" } test "Resigning in DER format with a unsuitable key length 512" { openssl "cms -resign -binary -inform der -nodetach -inkey U_cms_2_512/seckey.pem -signer U_cms_2_512/cert.pem -in cms_signed2_1_256.asn" } 1 "no matching digest" test "Resigning in DER format with a unsuitable key length 256" { openssl "cms -resign -binary -inform der -nodetach -inkey U_cms_2_256/seckey.pem -signer U_cms_2_256/cert.pem -in cms_signed2_1_512.asn" } 1 "no matching digest" test "Resigning opaque in S/MIME format with a unsuitable key length 512" { openssl "cms -resign -binary -nodetach -inkey U_cms_2_512/seckey.pem -signer U_cms_2_512/cert.pem -in cms_signed2_1_256_op.msg" } 1 "no matching digest" test "Resigning opaque in S/MIME format with a unsuitable key length 256" { openssl "cms -resign -binary -nodetach -inkey U_cms_2_256/seckey.pem -signer U_cms_2_256/cert.pem -in cms_signed2_1_512_op.msg" } 1 "no matching digest" test "Resigning detached in DER format with a unsuitable key length 512" { openssl "cms -resign -binary -inform der -inkey U_cms_2_512/seckey.pem -signer U_cms_2_512/cert.pem -in cms_signed2_1_256_det.asn -content cms_signed2.dat" } 1 "no matching digest" test "Resigning detached in DER format with a unsuitable key length 256" { openssl "cms -resign -binary -inform der -inkey U_cms_2_256/seckey.pem -signer U_cms_2_256/cert.pem -in cms_signed2_1_512_det.asn -content cms_signed2.dat" } 1 "no matching digest" test "Resigning in S/MIME format with a unsuitable key length 512" { openssl "cms -resign -binary -inkey U_cms_2_512/seckey.pem -signer U_cms_2_512/cert.pem -in cms_signed2_1_256.msg" } 1 "no matching digest" test "Resigning in S/MIME format with a unsuitable key length 256" { openssl "cms -resign -binary -inkey U_cms_2_256/seckey.pem -signer U_cms_2_256/cert.pem -in cms_signed2_1_512.msg" } 1 "no matching digest" end_tests #./load_engine cms -sign -binary -outform der -inform der -nodetach -inkey certs/fstek.key -signer certs/fstek.crt -out cms_signed2 -in cms_signed1 #./load_engine cms -verify -inform der -in cms_signed2 -noverify #./load_engine cms -verify -inform der -in cms_signed2 -noverify -signer sss #cat sss #history #vim sss #./load_engine x509 -in sss sss2 #./load_engine x509 -in sss #./load_engine x509 -in sss -subject -noout #./load_engine x509 -in sss2 -subject -noout #./load_engine cms -verify -inform der -in cms_signed2 -noverify -signer sss -out qqq libengine-gost-openssl-3.0.2/tcl_tests/cms_cs.try000066400000000000000000000151071446070765000221330ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа иĐŊŅ‚ĐĩŅ€ĐžĐŋĐĩŅ€Đ°ĐąĐĩĐģҌĐŊĐžŅŅ‚ŅŒ Ņ€ĐĩĐˇŅƒĐģŅŒŅ‚Đ°Ņ‚ĐžĐ˛ ĐŋОдĐŋĐ¸ŅĐ¸ ĐēĐžĐŧаĐŊдОК cms ҁ smime-ĐŋŅ€ĐžĐ˛ĐĩŅ€ĐēаĐŧи ĐŊа ŅŅ‚Đ°ĐģĐžĐŊĐŊиĐēĐ°Ņ…" if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {gost2001:A gost2001:B gost2001:C}} "open" {set alg_list {gost2001:A gost2001:B gost2001:C}} } } foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username U_cms_$alg_fn switch -glob $alg { gost2012* {set ::test::ca cmsCA-2012 set ca_sign_alg hash_with_sign12_512 } * {set ::test::ca cmsCA set ca_sign_alg hash_with_sign01_cp } } set hosts [list tls-ref-cp21] foreach hstname $hosts { #test -skip {![file exists $username/cert.pem]} -createsfiles [list sign.dat sign_$alg_fn.msg] "Signing a message by smime without cert by $alg (verify by smime)" { # makeFile sign.dat [string repeat "Test data to sign.\n" 100] # openssl "cms -sign -in sign.dat -text -out sign_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem -nocerts" # file isfile sign_$alg_fn.msg #} 0 1 test -skip {![file exists sign_$alg_fn.msg]} "Verifying a message signed with $alg without ca via smime" { grep Veri [openssl_remote "$username sign_$alg_fn.msg" "$hstname" "smime -verify -text -in TESTPATH/sign_$alg_fn.msg -out TESTPATH/verified.txt -noverify -certfile TESTPATH/$username/cert.pem" "cms"] } 0 "Verification successful " test -skip {![file exists sign_$alg_fn.msg]} "Verifying a message signed with $alg with ca via smime" { grep Veri [openssl_remote "$::test::ca sign_$alg_fn.msg" "$hstname" "smime -verify -text -in TESTPATH/sign_$alg_fn.msg -out TESTPATH/verified.txt -certfile TESTPATH/$username/cert.pem -CAfile TESTPATH/$::test::ca/cacert.pem" "cms"] } 0 "Verification successful " test -skip {![file exists sign_$alg_fn.msg]} -createsfiles [list bad_$alg_fn.msg TESTPATH/verified.txt] "Verifying corrupted messages signed with $alg via smime" { set corrupted [getFile sign_$alg_fn.msg] set index [string first "Test data" $corrupted ] makeFile bad_$alg_fn.msg [string replace $corrupted $index [expr $index+9] "Bad data"] grep Verification [openssl_remote "bad_$alg_fn.msg" "$hstname" "smime -verify -text -in TESTPATH/bad_$alg_fn.msg -out TESTPATH/verified.txt -noverify -certfile TESTPATH/$username/cert.pem" "cms"] } 1 "Verification failure" #test -skip {![file exists $username/cert.pem]} -createsfiles [list sign.dat sign_c_$alg_fn.msg] "Signing a message by $alg with cert" { # makeFile sign.dat [string repeat "Test data to sign.\n" 100] # openssl "cms -sign -in sign.dat -crlfeol -text -out sign_c_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem" # file isfile sign_c_$alg_fn.msg #} 0 1 test -skip {![file exists sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert inside without ca via smime" { grep Veri [openssl_remote "sign_c_$alg_fn.msg" "$hstname" "smime -verify -text -in TESTPATH/sign_c_$alg_fn.msg -out TESTPATH/verified.txt -noverify" "cms"] } 0 "Verification successful " test -skip {![file exists sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert with ca via smime" { grep Veri [openssl_remote "sign_c_$alg_fn.msg" "$hstname" "smime -verify -text -in TESTPATH/sign_c_$alg_fn.msg -out TESTPATH/verified.txt -CAfile TESTPATH/$::test::ca/cacert.pem" "cms"] } 0 "Verification successful " #test -skip {![file exists $username/cert.pem]} -createsfiles {sign.dat sign_op_$alg_fn.msg} "Signing a message by $alg with cert using opaque signing" { # makeFile sign.dat [string repeat "Test data to sign.\n" 100] # openssl "cms -sign -in sign.dat -text -out sign_op_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem -nodetach" # file isfile sign_op_$alg_fn.msg #} 0 1 test -createsfiles TESTPATH/verified.txt -skip {![file exists sign_op_$alg_fn.msg]} "Verifying a message signed by $alg having cert inside without ca via smime" { grep Veri [openssl_remote "sign_op_$alg_fn.msg" "$hstname" "smime -verify -text -in TESTPATH/sign_op_$alg_fn.msg -out TESTPATH/verified.txt -noverify" "cms"] } 0 "Verification successful " test -createsfiles TESTPATH/verified.txt -skip {![file exists sign_op_$alg_fn.msg]} "Verifying a $alg opaque message with ca via smime" { grep Veri [openssl_remote "sign_op_$alg_fn.msg" "$hstname" "smime -verify -text -in TESTPATH/sign_op_$alg_fn.msg -out TESTPATH/verified.txt -CAfile TESTPATH/$::test::ca/cacert.pem" "cms"] } 0 "Verification successful " test -createsfiles broken_op_$alg_fn.msg -skip {![file exists sign_op_$alg_fn.msg]} "Verifying broken $alg opaque message" { set data [getFile sign_op_$alg_fn.msg] regexp "(.*)\n\r?\n(.+)" $data match header encoded set asnstruct [::base64::decode $encoded] makeFile broken_op_$alg_fn.msg "$header\n\n[::base64::encode [regsub -all\ "Test data" $asnstruct "Best data"]]" grep Verification [openssl_remote "broken_op_$alg_fn.msg" "$hstname" "smime -verify -text -in TESTPATH/broken_op_$alg_fn.msg -out TESTPATH/verified.txt -CAfile TESTPATH/$::test::ca/cacert.pem" "cms"] } 1 "Verification failure" #test -createsfiles "sign_det_$alg_fn.msg" -skip {![file exists $username/cert.pem]||![file exists sign.dat]} "Creating detached $alg signature" { # openssl "cms -sign -binary -in sign.dat -out sign_det_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem" # file exists sign_det_$alg_fn.msg #} 0 1 #We expect cryptocom oids because of cert signed by ca with Cryptocom algs # Result sequence # 1. digest # 2. algorithm of CA key # 3. algorithm of current key # 4. algorithm of CA key # 5. digest # 6. digests from sMIMECapabilities # 7. encryption from sMIMECapabilities # 8. algorithm of current key test -skip {![file exists pk7sign_$alg_fn.pem]} "Verifying detached $alg signature via smime" { grep Veri [openssl_remote "pk7sign_$alg_fn.pem sign.dat" "$hstname" "smime -verify -content TESTPATH/sign.dat -inform PEM -in TESTPATH/pk7sign_$alg_fn.pem -out TESTPATH/verified.txt -noverify" "cms"] } 0 "Verification successful " test -skip {![file exists pk7sign_$alg_fn.pem]} -createsfiles {bad.dat} "Verifying corrupted $alg detached signature" { makeFile bad.dat [regsub Test [getFile sign.dat] Best] grep Verification [openssl_remote "sign_det_$alg_fn.msg bad.dat" "$hstname" "smime -verify -content TESTPATH/bad.dat -in TESTPATH/sign_det_$alg_fn.msg -out TESTPATH/verified.txt -CAfile TESTPATH/$::test::ca/cacert.pem" "cms"] } 1 "Verification failure" } } end_tests libengine-gost-openssl-3.0.2/tcl_tests/cms_io.try000066400000000000000000000071761446070765000221440ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ŅĐžĐ˛ĐŧĐĩŅŅ‚Ņ‚Đ¸ĐŧĐžŅŅ‚ŅŒ cms и smime -sign" if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {gost2001:A gost2001:B gost2001:C gost2012_256:A gost2012_256:B gost2012_256:C gost2012_512:A gost2012_512:B}} "open" {set alg_list {gost2001:A gost2001:B gost2001:C gost2012_256:A gost2012_256:B gost2012_256:C gost2012_512:A gost2012_512:B}} } } foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username U_cms_$alg_fn switch -glob $alg { gost2012* {set ::test::ca cmsCA-2012 set ca_sign_alg hash_with_sign12_512 } * {set ::test::ca cmsCA set ca_sign_alg hash_with_sign01_cp } } test -skip {![file exists cms_sign_$alg_fn.msg]} "Verifying a message signed with $alg without ca " { grep Veri [openssl "smime -verify -text -in cms_sign_$alg_fn.msg -out cms_verified.txt -noverify -certfile $username/cert.pem"] } 0 "Verification successful " test -skip {![file exists cms_sign_$alg_fn.msg]} "Verifying a message signed with $alg with ca" { grep Veri [openssl "smime -verify -text -in cms_sign_$alg_fn.msg -out cms_verified.txt -certfile $username/cert.pem -CAfile $::test::ca/cacert.pem"] } 0 "Verification successful " test -skip {![file exists cms_bad_$alg_fn.msg]} -createsfiles cms_verified.txt "Verifying corrupted messages signed with $alg" { grep Verification [openssl "smime -verify -text -in cms_bad_$alg_fn.msg -out cms_verified.txt -noverify -certfile $username/cert.pem"] } 1 "Verification failure" test -skip {![file exists cms_sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert inside without ca" { grep Veri [openssl "smime -verify -text -in cms_sign_c_$alg_fn.msg -out cms_verified.txt -noverify"] } 0 "Verification successful " test -skip {![file exists cms_sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert with ca" { grep Veri [openssl "smime -verify -text -in cms_sign_c_$alg_fn.msg -out cms_verified.txt -CAfile $::test::ca/cacert.pem"] } 0 "Verification successful " test -createsfiles cms_verified.txt -skip {![file exists cms_sign_op_$alg_fn.msg]} "Verifying a message signed by $alg having cert inside without ca" { grep Veri [openssl "smime -verify -text -in cms_sign_op_$alg_fn.msg -out cms_verified.txt -noverify"] } 0 "Verification successful " test -createsfiles cms_verified.txt -skip {![file exists cms_sign_op_$alg_fn.msg]} "Verifying a $alg opaque message with ca" { grep Veri [openssl "smime -verify -text -in cms_sign_op_$alg_fn.msg -out cms_verified.txt -CAfile $::test::ca/cacert.pem"] } 0 "Verification successful " test -skip {![file exists cms_broken_op_$alg_fn.msg]} "Verifying broken $alg opaque message" { grep Verification [openssl "smime -verify -text -in cms_broken_op_$alg_fn.msg -out cms_verified.txt -CAfile $::test::ca/cacert.pem"] } 1 "Verification failure" test -skip {![file exists cms_sign_det_$alg_fn.msg]} "Verifying detached $alg signature" { grep Veri [openssl "smime -verify -content cms_sign.dat -in cms_sign_det_$alg_fn.msg -out cms_verified.txt -noverify"] } 0 "Verification successful " test -skip {![file exists cms_sign_det_$alg_fn.msg]} -createsfiles {bad.dat} "Verifying corrupted $alg detached signature" { makeFile bad.dat [regsub Test [getFile cms_sign.dat] Best] grep Verification [openssl "smime -verify -content bad.dat -in cms_sign_det_$alg_fn.msg -out cms_verified.txt -CAfile $::test::ca/cacert.pem"] } 1 "Verification failure" } end_tests libengine-gost-openssl-3.0.2/tcl_tests/cmsenc.try000066400000000000000000000155261446070765000221410ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа cms -encrypt" proc make_fn {alg} { return [string map {":" "_"} $alg] } proc map {str list} { set result {} foreach a $list { lappend result [subst $str] } return $result } if {![file exist encrypt.dat]} { makeFile encrypt.dat [string repeat "Test data to encrypt.\n" 100] } if {![info exist env(NO_RSA)]} { test "Creating RSA CA" { makeCA ${testname}CA-RSA rsa:512 } 0 1 foreach user {U_cms_enc_rsa_1 U_cms_enc_rsa_2} { test "Make registered user $user" { makeRegisteredUser $user rsa:512 CAname ${testname}CA-RSA } 0 1 } test -createsfiles cms_enc_rsa.msg "RSA User 1 encrypts message for RSA user 2" { openssl "cms -encrypt -in encrypt.dat -aes-128-cbc -out cms_enc_rsa.msg U_cms_enc_rsa_2/cert.pem" file isfile cms_enc_rsa.msg } 0 1 test "RSA User 1 cannot decrypt message for RSA user 2" { grep "Error" [openssl "cms -decrypt -in cms_enc_rsa.msg -recip U_cms_enc_rsa_1/cert.pem -inkey U_cms_enc_rsa_1/seckey.pem"] } 1 {Error decrypting CMS} test -createsfiles cms_decrypt.rsa "RSA User 2 (with cert) can decrypt message for RSA user 2" { set expected [getFile encrypt.dat] openssl "cms -decrypt -in cms_enc_rsa.msg -recip U_cms_enc_rsa_2/cert.pem -inkey U_cms_enc_rsa_2/seckey.pem -out cms_decrypt.rsa" set result [getFile cms_decrypt.rsa] string eq $expected $result } 0 1 test -createsfiles cms_decrypt_nocert.rsa "RSA User 2 (without cert) can decrypt message for RSA user 2" { set expected [getFile encrypt.dat] openssl "cms -decrypt -in cms_enc_rsa.msg -inkey U_cms_enc_rsa_2/seckey.pem -out cms_decrypt_nocert.rsa" set result [getFile cms_decrypt_nocert.rsa] string eq $expected $result } 0 1 } test "Creating CA 2001" { makeCA ${testname}CA gost2001:A } 0 1 test "Creating CA 2012" { makeCA } 0 1 if {[info exist env(ENC_LIST)]} { set enc_list $env(ENC_LIST) } else { switch -exact [engine_name] { "ccore" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 gost2001:XA: gost2012_256:XA:1.2.643.2.2.31.1 gost2012_256:XB:1.2.643.7.1.2.5.1.1 gost2012_256:XA: gost2012_512:A:1.2.643.2.2.31.3 gost2012_512:B:1.2.643.7.1.2.5.1.1 gost2012_512:A:}} "open" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 gost2001:XA: gost2012_256:XA:1.2.643.2.2.31.1 gost2012_256:XB:1.2.643.7.1.2.5.1.1 gost2012_256:XA: gost2012_512:A:1.2.643.2.2.31.3 gost2012_512:B:1.2.643.7.1.2.5.1.1 gost2012_512:A:}} } } save_env2 {OPENSSL_CONF CRYPT_PARAMS} makeFile cmsenc1.cnf [regsub -all "\n\\s*CRYPT_PARAMS\\s*=\[\^\n]*" [getConfig] ""] set ::env(OPENSSL_CONF) [file join [pwd] cmsenc1.cnf] foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_cms_enc_$alg_fn switch -glob $alg { gost2012* {set ::test::ca ${testname}CA-2012} * {set ::test::ca ${testname}CA} } test "Creating user $username with key $alg" { makeRegisteredUser $username $alg if {![file exists $username/req.pem]&&[file exists $username/cert.pem]} { file delete $username/cert.pem } file exists $username/cert.pem } 0 1 if {[string length $crypt_param]} { set env(CRYPT_PARAMS) $crypt_param } else { if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} } test -createsfiles cms_enc_$alg_fn.msg "Encrypting for $username" { grep "rror" [openssl "cms -encrypt -in encrypt.dat -gost89 -out cms_enc_$alg_fn.msg U_cms_enc_$alg_fn/cert.pem"] } 0 "" if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} test -createsfiles cms_enc_$alg_fn.pem "Extracting CMS from encrypted structure for $username" { openssl "cms -cmsout -out cms_enc_$alg_fn.pem -outform PEM -in cms_enc_$alg_fn.msg" file isfile cms_enc_$alg_fn.pem } 0 1 test -skip {![file exists cms_enc_$alg_fn.pem]} "Checking oids in pkcs7 structure for $username" { extract_oids cms_enc_$alg_fn.pem PEM } 0 [mkObjList [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg]] "GOST 28147-89" [encr_long_name $crypt_param]] test -createsfiles cms_decrypt.$alg_fn "Decrypting file encrypted for $username" { set expected [getFile encrypt.dat] openssl "cms -decrypt -debug_decrypt -in cms_enc_$alg_fn.msg -recip U_cms_enc_$alg_fn/cert.pem -inkey U_cms_enc_$alg_fn/seckey.pem -out cms_decrypt.$alg_fn" set result [getFile cms_decrypt.$alg_fn] string eq $expected $result } 0 1 if {[string length $crypt_param]} { set env(CRYPT_PARAMS) $crypt_param } else { if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} } test -createsfiles cms_enc_t_$alg_fn.msg "Encrypting for $username - text format" { grep "rror" [openssl "cms -encrypt -text -in encrypt.dat -gost89 -out cms_enc_t_$alg_fn.msg U_cms_enc_$alg_fn/cert.pem"] } 0 "" if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} test -createsfiles cms_decrypt_t.$alg_fn "Decrypting file text-encrypted for $username" { set expected [getFile encrypt.dat] openssl "cms -decrypt -debug_decrypt -text -in cms_enc_t_$alg_fn.msg -recip U_cms_enc_$alg_fn/cert.pem -inkey U_cms_enc_$alg_fn/seckey.pem -out cms_decrypt_t.$alg_fn" set result [getFile cms_decrypt_t.$alg_fn] string eq $expected $result } 0 1 test -createsfiles cms_decrypt_t_nocert.$alg_fn "Decrypting file text-encrypted for $username without cert" { set expected [getFile encrypt.dat] openssl "cms -decrypt -debug_decrypt -text -in cms_enc_t_$alg_fn.msg -inkey U_cms_enc_$alg_fn/seckey.pem -out cms_decrypt_t_nocert.$alg_fn" set result [getFile cms_decrypt_t_nocert.$alg_fn] string eq $expected $result } 0 1 } test -createfiles cms_enc_4all "Encrypt for all" { grep "rror" [openssl "cms -encrypt -in encrypt.dat -gost89 -out cms_enc_4all.msg [map {U_cms_enc_[make_fn $a]/cert.pem} $enc_list]"] } 0 "" foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_cms_enc_$alg_fn test -skip {![file exists cms_enc_4all.msg]} -createsfiles cms_decrypt_4all.$alg_fn "Decrypting gost-encrypted file, recipient $alg_fn" { set expected [getFile encrypt.dat] openssl "cms -decrypt -in cms_enc_4all.msg -recip $username/cert.pem -inkey $username/seckey.pem -out cms_decrypt_4all.$alg_fn" set result [getFile cms_decrypt_4all.$alg_fn] string eq $expected $result } 0 1 test -skip {![file exists cms_enc_4all.msg]} -createsfiles cms_decrypt_4all_nocert.$alg_fn "Decrypting gost-encrypted file without cert, recipient $alg_fn" { set expected [getFile encrypt.dat] openssl "cms -decrypt -debug_decrypt -in cms_enc_4all.msg -inkey $username/seckey.pem -out cms_decrypt_4all_nocert.$alg_fn" set result [getFile cms_decrypt_4all_nocert.$alg_fn] string eq $expected $result } 0 1 } restore_env2 {OPENSSL_CONF CRYPT_PARAMS} end_tests libengine-gost-openssl-3.0.2/tcl_tests/cmsenc_cs.try000066400000000000000000000174301446070765000226220ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest package require test cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа cms -encrypt ҁ ŅƒŅ‡Đ°ŅŅ‚Đ¸ĐĩĐŧ ŅŅ‚Đ°ĐģĐžĐŊĐŊҋ҅ ҁĐĩŅ€Đ˛ĐĩŅ€ĐžĐ˛" proc make_fn {alg} { return [string map {":" "_"} $alg] } proc map {str list} { set result {} foreach a $list { lappend result [subst $str] } return $result } if {![file exist encrypt.dat]} { makeFile encrypt.dat [string repeat "Test data to encrypt.\n" 100] } #if {![info exist env(/NO_RSA)]} { #test "Creating RSA CA" { # makeCA ${testname}CA-RSA rsa:512 #} 0 1 # set ::test::ca cmsencCA-RSA #foreach user {U_cms_enc_rsa_1 U_cms_enc_rsa_2} { #test "Make registered user $user" { # makeRegisteredUser $user rsa:512 CAname ${testname}CA-RSA #} 0 1 #} set hosts tls-ref-cp21 foreach hstname $hosts { #test -createsfiles cms_enc_rsa.msg "RSA User 1 encrypts message for RSA user 2" { # openssl "cms -encrypt -in encrypt.dat -des -out cms_enc_rsa.msg U_cms_enc_rsa_2/cert.pem" # file isfile cms_enc_rsa.msg #} 0 1 test "RSA User 1 cannot decrypt message for RSA user 2" { grep "Error" [openssl_remote "cms_enc_rsa.msg U_cms_enc_rsa_1" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_rsa.msg -recip TESTPATH/U_cms_enc_rsa_1/cert.pem -inkey TESTPATH/U_cms_enc_rsa_1/seckey.pem" "rsa"] } 1 {Error decrypting CMS} test -skip {![file exists cms_decrypt.rsa]} "RSA User 2 (with cert) can decrypt message for RSA user 2" { set expected [getFile encrypt.dat] openssl_remote "U_cms_enc_rsa_2" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_rsa.msg -recip TESTPATH/U_cms_enc_rsa_2/cert.pem -inkey TESTPATH/U_cms_enc_rsa_2/seckey.pem -out TESTPATH/cms_decrypt.rsa" "rsa" set result [getFile cms_decrypt.rsa] string eq $expected $result } 0 1 test -skip{![file exists cms_decrypt_nocert.rsa]} "RSA User 2 (without cert) can decrypt message for RSA user 2" { set expected [getFile encrypt.dat] openssl_remote "$hstname" "cms -decrypt -in TESTPATH/cms_enc_rsa.msg -inkey TESTPATH/U_cms_enc_rsa_2/seckey.pem -out TESTPATH/cms_decrypt_nocert.rsa" "rsa" set result [getFile cms_decrypt_nocert.rsa] string eq $expected $result } 0 1 } #test "Creating CA 2001" { # makeCA ${testname}CA gost2001:A #} 0 1 #test "Creating CA 2012" { # makeCA #} 0 1 # set hosts [list tls-ref-cp21 tls-ref-cp20] foreach hstname $hosts { if {[info exist env(ENC_LIST)]} { set enc_list $env(ENC_LIST) } else { switch -exact [engine_name] { "ccore" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 }} "open" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 }} } } save_env2 {OPENSSL_CONF CRYPT_PARAMS} makeFile cmsenc1.cnf [regsub -all "\n\\s*CRYPT_PARAMS\\s*=\[\^\n]*" [getConfig] ""] set ::env(OPENSSL_CONF) [file join [pwd] cmsenc1.cnf] foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_cms_enc_$alg_fn switch -glob $alg { gost2012* {set ::test::ca cmsCA-2012} * {set ::test::ca cmsCA} } #test "Creating user $username with key $alg" { # makeRegisteredUser $username $alg # if {![file exists $username/req.pem]&&[file exists $username/cert.pem]} { # file delete $username/cert.pem # } # file exists $username/cert.pem #} 0 1 if {[string length $crypt_param]} { set env(CRYPT_PARAMS) $crypt_param } else { if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} } #test -createsfiles cms_enc_$alg_fn.msg "Encrypting for $username" { # grep "rror" [openssl "cms -encrypt -in encrypt.dat -gost89 -out cms_enc_$alg_fn.msg U_cms_enc_$alg_fn/cert.pem"] #} 0 "" if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} #test -createsfiles cms_enc_$alg_fn.pem "Extracting CMS from encrypted structure for $username" { # openssl "cms -cmsout -out cms_enc_$alg_fn.pem -outform PEM -in cms_enc_$alg_fn.msg" # file isfile cms_enc_$alg_fn.pem #} 0 1 #test -skip {![file exists cms_enc_$alg_fn.pem]} "Checking oids in pkcs7 structure for $username" { # extract_oids cms_enc_$alg_fn.pem PEM #} 0 [mkObjList [alg_id $alg] [param_pubkey $alg] [param_hash $alg] crypt89_cc [param_encr $crypt_param]] #test "Decrypting file encrypted for $username" { # set expected [getFile encrypt.dat] # openssl_remote "$username U_cms_enc_$alg_fn cms_enc_$alg_fn.msg" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_$alg_fn.msg -recip TESTPATH/U_cms_enc_$alg_fn/cert.pem -inkey TESTPATH/U_cms_enc_$alg_fn/seckey.pem -out TESTPATH/cms_decrypt.$alg_fn" "$testname" # set result [getRemoteFile "$hstname" "TESTPATH/cms_decrypt.$alg_fn" "$testname"] # string eq $expected $result #} 0 1 test "Decrypting file encrypted for $username" { set expected [getFile encrypt.dat] set result [openssl_remote "$username U_cms_enc_$alg_fn cms_enc_$alg_fn.msg" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_$alg_fn.msg -recip TESTPATH/U_cms_enc_$alg_fn/cert.pem -inkey TESTPATH/U_cms_enc_$alg_fn/seckey.pem" "$testname"] string eq $expected $result } 0 1 if {[string length $crypt_param]} { set env(CRYPT_PARAMS) $crypt_param } else { if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} } #test -createsfiles cms_enc_t_$alg_fn.msg "Encrypting for $username - text format" { # grep "rror" [openssl "cms -encrypt -text -in encrypt.dat -gost89 -out cms_enc_t_$alg_fn.msg U_cms_enc_$alg_fn/cert.pem"] #} 0 "" if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} test -createsfiles cms_decrypt_t.$alg_fn "Decrypting file text-encrypted for $username" { set expected [getFile encrypt.dat] set result [openssl_remote "cms_enc_t_$alg_fn.msg U_cms_enc_$alg_fn" "$hstname" "cms -decrypt -text -in TESTPATH/cms_enc_t_$alg_fn.msg -recip TESTPATH/U_cms_enc_$alg_fn/cert.pem -inkey TESTPATH/U_cms_enc_$alg_fn/seckey.pem" "$testname"] string eq $expected $result } 0 1 test -createsfiles cms_decrypt_t_nocert.$alg_fn "Decrypting file text-encrypted for $username without cert" { set expected [getFile encrypt.dat] set result [openssl_remote "cms_enc_t_$alg_fn.msg U_cms_enc_$alg_fn" "$hstname" "cms -decrypt -text -in TESTPATH/cms_enc_t_$alg_fn.msg -inkey TESTPATH/U_cms_enc_$alg_fn/seckey.pem" "$testname"] string eq $expected $result } 0 1 } #test -createfiles cms_enc_4all_old "Encrypt for all" { # puts stdout $enc_list # grep "rror" [openssl "cms -encrypt -in encrypt.dat -gost89 -out cms_enc_4all_old.msg [map {U_cms_enc_[make_fn $a]/cert.pem} $enc_list]"] #} 0 "" foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_cms_enc_$alg_fn if {[string length $crypt_param]} { set env(CRYPT_PARAMS) $crypt_param } else { if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} } test -createfiles cms_enc_4all_old "Encrypt for all" { grep "rror" [openssl "cms -encrypt -in encrypt.dat -gost89 -out cms_enc_4all_old.msg [map {U_cms_enc_[make_fn $a]/cert.pem} $enc_list]"] } 0 "" test -skip {![file exists cms_enc_4all_old.msg]} "Decrypting gost-encrypted file, recipient $alg_fn" { set expected [getFile encrypt.dat] set result [openssl_remote "cms_enc_4all_old.msg $username" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_4all_old.msg -recip TESTPATH/$username/cert.pem -inkey TESTPATH/$username/seckey.pem" "$testname"] string eq $expected $result } 0 1 test -skip {![file exists cms_enc_4all_old.msg]} -createsfiles cms_decrypt_4all_nocert.$alg_fn "Decrypting gost-encrypted file without cert, recipient $alg_fn" { set expected [getFile encrypt.dat] set result [openssl_remote "cms_enc_4all_old.msg $username" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_4all_old.msg -inkey TESTPATH/$username/seckey.pem" "$testname"] string eq $expected $result } 0 1 } restore_env2 {OPENSSL_CONF CRYPT_PARAMS} } end_tests libengine-gost-openssl-3.0.2/tcl_tests/cmsenc_io.try000066400000000000000000000101701446070765000226160ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ŅĐžĐ˛ĐŧĐĩŅŅ‚Đ¸ĐŧĐžŅŅ‚ŅŒ cms и smime -encrypt" proc make_fn {alg} { return [string map {":" "_"} $alg] } proc map {str list} { set result {} foreach a $list { lappend result [subst $str] } return $result } if {![info exist env(NO_RSA)]} { test -createsfiles io_cms_decrypt.rsa "RSA User 2 (with cert) can decrypt message for RSA user 2" { set expected [getFile encrypt.dat] openssl "smime -decrypt -in cms_enc_rsa.msg -recip U_cms_enc_rsa_2/cert.pem -inkey U_cms_enc_rsa_2/seckey.pem -out io_cms_decrypt.rsa" set result [getFile io_cms_decrypt.rsa] string eq $expected $result } 0 1 test -createsfiles io_cms_decrypt_nocert.rsa "RSA User 2 (without cert) can decrypt message for RSA user 2" { set expected [getFile encrypt.dat] openssl "smime -decrypt -in cms_enc_rsa.msg -inkey U_cms_enc_rsa_2/seckey.pem -out io_cms_decrypt_nocert.rsa" set result [getFile io_cms_decrypt_nocert.rsa] string eq $expected $result } 0 1 } if {[info exist env(ENC_LIST)]} { set enc_list $env(ENC_LIST) } else { switch -exact [engine_name] { "ccore" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 gost2001:XA: gost2012_256:XA:1.2.643.2.2.31.1 gost2012_256:XB:1.2.643.7.1.2.5.1.1 gost2012_256:XA: gost2012_512:A:1.2.643.2.2.31.3 gost2012_512:B:1.2.643.7.1.2.5.1.1 gost2012_512:A:}} "open" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 gost2001:XA: gost2012_256:XA:1.2.643.2.2.31.1 gost2012_256:XB:1.2.643.7.1.2.5.1.1 gost2012_256:XA: gost2012_512:A:1.2.643.2.2.31.3 gost2012_512:B:1.2.643.7.1.2.5.1.1 gost2012_512:A:}} } } foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_cms_enc_$alg_fn switch -glob $alg { gost2012* {set ::test::ca ${testname}CA-2012} * {set ::test::ca ${testname}CA} } test -createsfiles io_cms_decrypt.$alg_fn "Decrypting file encrypted for $username" { set expected [getFile encrypt.dat] openssl "smime -decrypt -in cms_enc_$alg_fn.msg -recip U_cms_enc_$alg_fn/cert.pem -inkey U_cms_enc_$alg_fn/seckey.pem -out io_cms_decrypt.$alg_fn" set result [getFile io_cms_decrypt.$alg_fn] string eq $expected $result } 0 1 test -createsfiles io_cms_decrypt_t.$alg_fn "Decrypting file text-encrypted for $username" { set expected [getFile encrypt.dat] openssl "smime -decrypt -text -in cms_enc_t_$alg_fn.msg -recip U_cms_enc_$alg_fn/cert.pem -inkey U_cms_enc_$alg_fn/seckey.pem -out io_cms_decrypt_t.$alg_fn" set result [getFile io_cms_decrypt_t.$alg_fn] string eq $expected $result } 0 1 test -createsfiles io_cms_decrypt_t_nocert.$alg_fn "Decrypting file text-encrypted for $username without cert" { set expected [getFile encrypt.dat] openssl "smime -decrypt -text -in cms_enc_t_$alg_fn.msg -inkey U_cms_enc_$alg_fn/seckey.pem -out io_cms_decrypt_t_nocert.$alg_fn" set result [getFile io_cms_decrypt_t_nocert.$alg_fn] string eq $expected $result } 0 1 } foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_cms_enc_$alg_fn test -skip {![file exists cms_enc_4all.msg]} -createsfiles io_cms_decrypt_4all.$alg_fn "Decrypting gost-encrypted file, recipient $alg_fn" { set expected [getFile encrypt.dat] openssl "smime -decrypt -in cms_enc_4all.msg -recip $username/cert.pem -inkey $username/seckey.pem -out io_cms_decrypt_4all.$alg_fn" set result [getFile io_cms_decrypt_4all.$alg_fn] string eq $expected $result } 0 1 test -skip {![file exists cms_enc_4all.msg]} -createsfiles io_cms_decrypt_4all_nocert.$alg_fn "Decrypting gost-encrypted file without cert, recipient $alg_fn" { set expected [getFile encrypt.dat] openssl "smime -decrypt -in cms_enc_4all.msg -inkey $username/seckey.pem -out io_cms_decrypt_4all_nocert.$alg_fn" set result [getFile io_cms_decrypt_4all_nocert.$alg_fn] string eq $expected $result } 0 1 } end_tests libengine-gost-openssl-3.0.2/tcl_tests/cmsenc_sc.try000066400000000000000000000146101446070765000226170ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest package require test cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа cms -encrypt ҁ ŅƒŅ‡Đ°ŅŅ‚Đ¸ĐĩĐŧ ŅŅ‚Đ°ĐģĐžĐŊĐŊҋ҅ ҁĐĩŅ€Đ˛ĐĩŅ€ĐžĐ˛ (ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ĐŊа ŅŅ‚Đ°ĐģĐžĐŊĐŊиĐēĐ°Ņ…)" proc make_fn {alg} { return [string map {":" "_"} $alg] } proc map {str list} { set result {} foreach a $list { lappend result [subst $str] } return $result } if {![file exist encrypt.dat]} { makeFile encrypt.dat [string repeat "Test data to encrypt.\n" 100] } #if {![info exist env(/NO_RSA)]} { #test "Creating RSA CA" { # makeCA ${testname}CA-RSA rsa:512 #} 0 1 # #set ::test::ca cmsencCA-RSA #foreach user {U_cms_enc_rsa_1 U_cms_enc_rsa_2} { #test "Make registered user $user" { # makeRegisteredUser $user rsa:512 CAname ${testname}CA-RSA #} 0 1 #} #set hosts tls-ref-cp21 #foreach hstname $hosts { #test -createsfiles cms_enc_rsa.msg "RSA User 1 encrypts message for RSA user 2" { # openssl "cms -encrypt -in encrypt.dat -des -out cms_enc_rsa.msg U_cms_enc_rsa_2/cert.pem" # file isfile cms_enc_rsa.msg #} 0 1 #test "RSA User 1 cannot decrypt message for RSA user 2" { # grep "Error" [openssl_remote "cms_enc_rsa.msg U_cms_enc_rsa_1" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_rsa.msg -recip TESTPATH/U_cms_enc_rsa_1/cert.pem -inkey TESTPATH/U_cms_enc_rsa_1/seckey.pem" "rsa"] #} 1 {Error decrypting CMS} #test -skip {![file exists cms_decrypt.rsa]} "RSA User 2 (with cert) can decrypt message for RSA user 2" { # set expected [getFile encrypt.dat] # openssl_remote "U_cms_enc_rsa_2" "$hstname" "cms -decrypt -in TESTPATH/cms_enc_rsa.msg -recip TESTPATH/U_cms_enc_rsa_2/cert.pem -inkey TESTPATH/U_cms_enc_rsa_1/seckey.pem -out TESTPATH/cms_decrypt.rsa" "rsa" # set result [getFile cms_decrypt.rsa] # string eq $expected $result #} 0 1 #test -skip{![file exists cms_decrypt_nocert.rsa]} "RSA User 2 (without cert) can decrypt message for RSA user 2" { # set expected [getFile encrypt.dat] # openssl_remote "$hstname" "cms -decrypt -in TESTPATH/cms_enc_rsa.msg -inkey TESTPATH/U_cms_enc_rsa_2/seckey.pem -out TESTPATH/cms_decrypt_nocert.rsa" "rsa" # set result [getFile cms_decrypt_nocert.rsa] # string eq $expected $result #} 0 1 #} #test "Creating CA 2001" { # makeCA ${testname}CA gost2001:A #} 0 1 #test "Creating CA 2012" { # makeCA #} 0 1 # set hosts [list tls-ref-cp21 tls-ref-cp20] foreach hstname $hosts { if {[info exist env(ENC_LIST)]} { set enc_list $env(ENC_LIST) } else { switch -exact [engine_name] { "ccore" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 }} "open" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 }} } } save_env2 {OPENSSL_CONF CRYPT_PARAMS} makeFile cmsenc1.cnf [regsub -all "\n\\s*CRYPT_PARAMS\\s*=\[\^\n]*" [getConfig] ""] set ::env(OPENSSL_CONF) [file join [pwd] cmsenc1.cnf] foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_cms_enc_$alg_fn switch -glob $alg { gost2012* {set ::test::ca cmsencCA-2012} * {set ::test::ca cmsencCA} } if {[string length $crypt_param]} { set env(CRYPT_PARAMS) $crypt_param } else { if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} } test -createsfiles cms_enc_sc_$alg_fn.msg "Encrypting for $username" { file mkdir 1_$hstname/$alg_fn set res [open 1_$hstname/$alg_fn/cms_enc_sc_$alg_fn.msg w] puts $res [openssl_remote "encrypt.dat $username $::test::ca" "$hstname" "cms -encrypt -in TESTPATH/encrypt.dat -gost89 TESTPATH/$username/cert.pem" "$testname"] close $res } 0 "" #if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} test "Decrypting file encrypted for $username" { set expected [getFile encrypt.dat] set result [openssl "cms -decrypt -in 1_$hstname/$alg_fn/cms_enc_sc_$alg_fn.msg -recip $username/cert.pem -inkey $username/seckey.pem"] string eq $expected $result } 0 1 if {[string length $crypt_param]} { set env(CRYPT_PARAMS) $crypt_param } else { if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} } test -createsfiles cms_enc_t_$alg_fn.msg "Encrypting for $username - text format" { file mkdir 2_$hstname/$alg_fn set res [open 2_$hstname/$alg_fn/cms_enc_sc_t_$alg_fn.msg w] puts $res [openssl_remote "encrypt.dat $username $::test::ca" "$hstname" "cms -encrypt -text -in TESTPATH/encrypt.dat -gost89 TESTPATH/$username/cert.pem" "$testname"] close $res } 0 "" #if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} test "Decrypting file text-encrypted for $username" { set expected [getFile encrypt.dat] set result [openssl "cms -decrypt -text -in 2_$hstname/$alg_fn/cms_enc_sc_t_$alg_fn.msg -recip $username/cert.pem -inkey $username/seckey.pem"] string eq $expected $result } 0 1 test "Decrypting file text-encrypted for $username without cert" { set expected [getFile encrypt.dat] set result [openssl "cms -decrypt -text -in 2_$hstname/$alg_fn/cms_enc_sc_t_$alg_fn.msg -inkey $username/seckey.pem"] string eq $expected $result } 0 1 } foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_cms_enc_$alg_fn # НĐĩ ĐŧаĐŋĐ¸Ņ‚ŅŅ $a, ĐŋĐžŅ‚ĐžĐŧ҃ ĐžŅ‚Đ˛Đ°ĐģĐ¸Đ˛Đ°ŅŽŅ‚ŅŅ Ņ‚Đĩҁ҂ҋ. Đ’Ņ‹ŅŅĐŊĐ¸Ņ‚ŅŒ, ĐŋĐžŅ‡ĐĩĐŧ҃ test "Encrypt for all" { file mkdir 3_$hstname/$alg_fn set res [open 3_$hstname/$alg_fn/cms_enc_4all_old.msg w] puts $res [openssl_remote "encrypt.dat $username $::test::ca" "$hstname" "cms -encrypt -in TESTPATH/encrypt.dat -gost89 [map {TESTPATH/U_cms_enc_[make_fn $a]/cert.pem} $enc_list]" "$testname"] close $res } 0 "" test -skip {![file exists cms_enc_4all_old.msg]} "Decrypting gost-encrypted file, recipient $alg_fn" { set expected [getFile encrypt.dat] set result [openssl "cms -decrypt -in 3_$hstname/$alg_fn/cms_enc_4all_old.msg -recip $username/cert.pem -inkey $username/seckey.pem"] string eq $expected $result } 0 1 test -skip {![file exists cms_enc_4all_old.msg]} -createsfiles cms_decrypt_4all_nocert.$alg_fn "Decrypting gost-encrypted file without cert, recipient $alg_fn" { set expected [getFile encrypt.dat] set result [openssl "cms -decrypt -in 3_$hstname/$alg_fn/cms_enc_4all_old.msg -inkey $username/seckey.pem"] string eq $expected $result } 0 1 } restore_env2 {OPENSSL_CONF CRYPT_PARAMS} } end_tests libengine-gost-openssl-3.0.2/tcl_tests/cmstc262019.try000066400000000000000000000044451446070765000224640ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest file delete -force $::test::dir/tc26_cms file copy -force tc26_cms $::test::dir cd $::test::dir set plain_str [getFile ./tc26_cms/plain/text_decrypted.plain] start_tests "CMS tests, TC26 examples" #BUILD_AT=obj_mid.l64/ ./openssl_wrap.sh cms -verify -in ../standalone-test/tc26_cms/signed_a111.pem -inform PEM -noverify #BUILD_AT=obj_mid.l64/ ./openssl_wrap.sh cms -verify -in ../standalone-test/tc26_cms/signed_a121.pem -inform PEM -noverify test "Signed data, 512 bits, signed attributes" { grep "Verification successful" [openssl "cms -verify -in tc26_cms/signed_a111.pem -inform PEM -noverify"] } 0 "CMS Verification successful " test "Signed data, 256 bits, no signed attributes" { grep "Verification successful" [openssl "cms -verify -in tc26_cms/signed_a121.pem -inform PEM -noverify"] } 0 "CMS Verification successful " test "Digested data, 256 bits" { grep "Verification successful" [openssl "cms -digest_verify -in tc26_cms/hashed_a311.pem -inform PEM -out hashed_a311.out"] } 0 "Verification successful " test "Digested data, 512 bits" { grep "Verification successful" [openssl "cms -digest_verify -in tc26_cms/hashed_a321.pem -inform PEM -out hashed_a321.out"] } 0 "Verification successful " test "CMS decrypt, Kuznyechik ACPKM+OMAC, KeyAgreement" { grep "Enveloped" [openssl "cms -decrypt -debug_decrypt -in ./tc26_cms/encrypted_keyagree_a211.pem -inform PEM -inkey ./tc26_cms/recipient512_key.pem -recip ./tc26_cms/recipient512_cert.pem -originator ./tc26_cms/sender512_cert.pem"] } 0 $plain_str test "CMS decrypt, Magma ACPKM, KeyAgreement" { grep "Enveloped" [openssl "cms -decrypt -debug_decrypt -in ./tc26_cms/encrypted_keyagree_a221.pem -inform PEM -inkey ./tc26_cms/recipient256_key.pem -recip ./tc26_cms/recipient256_cert.pem -originator ./tc26_cms/sender256_cert.pem"] } 0 $plain_str test "CMS decrypt, Kuznyechik ACPKM, KeyTrans" { grep "Enveloped" [openssl "cms -decrypt -in ./tc26_cms/encrypted_keytrans_a231.pem -inform PEM -inkey ./tc26_cms/recipient256_key.pem"] } 0 $plain_str test "CMS decrypt, Magma ACPKM+OMAC, KeyTrans" { grep "Enveloped" [openssl "cms -decrypt -debug_decrypt -in ./tc26_cms/encrypted_keytrans_a241.pem -inform PEM -inkey ./tc26_cms/recipient512_key.pem "] } 0 $plain_str end_tests libengine-gost-openssl-3.0.2/tcl_tests/cnt0.enc000066400000000000000000000000451446070765000214520ustar00rootroot00000000000000Salted__h§Ž› 5UĪå,ž~jŗˆDą¤ugŧ]_'libengine-gost-openssl-3.0.2/tcl_tests/cnt1.enc000066400000000000000000000000251446070765000214510ustar00rootroot00000000000000å,ž~jŗˆDą¤ugŧ]_'libengine-gost-openssl-3.0.2/tcl_tests/cp10.ciphers000066400000000000000000000010171446070765000222410ustar00rootroot00000000000000# # ķÔŌÕËÔÕŌÁ ÆÁĘĖÁ # ÁĖĮĪŌÉÔÍ { # ciphersuite host:port[:servertype] # ciphersuite host:port # # } # Where servertype can be apache (default) or iis. #gost94:XA { # GOST94-GOST89-GOST89 tls-ref-cp10.lan.cryptocom.ru:4403 # GOST94-NULL-GOST94 tls-ref-cp10.lan.cryptocom.ru:4404 #} gost2001:XA { GOST2001-GOST89-GOST89 tls-ref-cp10.lan.cryptocom.ru:443 GOST2001-NULL-GOST94 tls-ref-cp10.lan.cryptocom.ru:4401 } rsa:1024 { DHE-RSA-AES256-SHA tls-ref-cp10.lan.cryptocom.ru:4407 RC4-SHA tls-ref-cp10.lan.cryptocom.ru:4408 } libengine-gost-openssl-3.0.2/tcl_tests/cp20.ciphers000066400000000000000000000003631446070765000222450ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 tls-ref-cp20.lan.cryptocom.ru:443 GOST2001-NULL-GOST94 tls-ref-cp20.lan.cryptocom.ru:4401 } rsa:1024 { DHE-RSA-AES256-SHA tls-ref-cp20.lan.cryptocom.ru:4407 RC4-SHA tls-ref-cp20.lan.cryptocom.ru:4408 } libengine-gost-openssl-3.0.2/tcl_tests/cp21.ciphers000066400000000000000000000006471446070765000222530ustar00rootroot00000000000000# # ķÔŌÕËÔÕŌÁ ÆÁĘĖÁ # ÁĖĮĪŌÉÔÍ { # ciphersuite host:port[:servertype] # ciphersuite host:port # # } # Where servertype can be apache (default) or iis. gost2001:XA { TLSv1:GOST2001-GOST89-GOST89 tls-ref-cp21.lan.cryptocom.ru:443 TLSv1:GOST2001-NULL-GOST94 tls-ref-cp21.lan.cryptocom.ru:4401 } rsa:1024 { TLSv1.2:DHE-RSA-AES256-SHA tls-ref-cp21.lan.cryptocom.ru:4407 TLSv1.2:RC4-SHA tls-ref-cp21.lan.cryptocom.ru:4408 } libengine-gost-openssl-3.0.2/tcl_tests/csp3.ciphers000066400000000000000000000001131446070765000223420ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-cp3-srv.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/csp36.ciphers000066400000000000000000000001141446070765000224310ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-cp36-srv.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/csp36r2.ciphers000066400000000000000000000001161446070765000226770ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-cp36r2-srv.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/csp36r3.ciphers000066400000000000000000000001161446070765000227000ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-cp36r3-srv.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/csp36r4.ciphers000066400000000000000000000001161446070765000227010ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-cp36r4-srv.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/csp39.ciphers000066400000000000000000000001141446070765000224340ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-cp39-srv.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/csp4.ciphers000066400000000000000000000004511446070765000223500ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-cp4-01.vm.cryptocom.ru:443:iis GOST2012-GOST8912-GOST8912 v-cp4-01.vm.cryptocom.ru:443:iis } gost2012_256:XA { GOST2012-GOST8912-GOST8912 v-cp4-12S.vm.cryptocom.ru:443:iis } gost2012_512:A { GOST2012-GOST8912-GOST8912 v-cp4-12L.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/csp4r2.ciphers000066400000000000000000000004611446070765000226150ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-cp4r2-01.vm.cryptocom.ru:443:iis GOST2012-GOST8912-GOST8912 v-cp4r2-01.vm.cryptocom.ru:443:iis } gost2012_256:XA { GOST2012-GOST8912-GOST8912 v-cp4r2-12S.vm.cryptocom.ru:443:iis } gost2012_512:A { GOST2012-GOST8912-GOST8912 v-cp4r2-12L.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/csp4r3.ciphers000066400000000000000000000011351446070765000226150ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-cp4r3-01.vm.cryptocom.ru:443:iis GOST2012-GOST8912-GOST8912 v-cp4r3-01.vm.cryptocom.ru:443:iis } gost2012_256:XA { TLSv1:GOST2012-GOST8912-GOST8912 v-cp4r3-12S.vm.cryptocom.ru:443:iis TLSv1.1:GOST2012-GOST8912-GOST8912 v-cp4r3-12S.vm.cryptocom.ru:443:iis TLSv1.2:GOST2012-GOST8912-GOST8912 v-cp4r3-12S.vm.cryptocom.ru:443:iis } gost2012_512:A { TLSv1:GOST2012-GOST8912-GOST8912 v-cp4r3-12L.vm.cryptocom.ru:443:iis TLSv1.1:GOST2012-GOST8912-GOST8912 v-cp4r3-12L.vm.cryptocom.ru:443:iis TLSv1.2:GOST2012-GOST8912-GOST8912 v-cp4r3-12L.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/csp5.ciphers000066400000000000000000000015611446070765000223540ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-cp5-01.vm.cryptocom.ru:443:iis GOST2012-GOST8912-GOST8912 v-cp5-01.vm.cryptocom.ru:443:iis } gost2012_256:XA { TLSv1:GOST2012-GOST8912-GOST8912 v-cp5-12S.vm.cryptocom.ru:443:iis TLSv1.1:GOST2012-GOST8912-GOST8912 v-cp5-12S.vm.cryptocom.ru:443:iis TLSv1.2:GOST2012-GOST8912-GOST8912 v-cp5-12S.vm.cryptocom.ru:443:iis TLSv1.2:GOST2012-KUZNYECHIK-KUZNYECHIKOMAC v-cp5-12S.vm.cryptocom.ru:443:iis TLSv1.2:GOST2012-MAGMA-MAGMAOMAC v-cp5-12S.vm.cryptocom.ru:443:iis } gost2012_512:A { TLSv1:GOST2012-GOST8912-GOST8912 v-cp5-12L.vm.cryptocom.ru:443:iis TLSv1.1:GOST2012-GOST8912-GOST8912 v-cp5-12L.vm.cryptocom.ru:443:iis TLSv1.2:GOST2012-GOST8912-GOST8912 v-cp5-12L.vm.cryptocom.ru:443:iis TLSv1.2:GOST2012-KUZNYECHIK-KUZNYECHIKOMAC v-cp5-12L.vm.cryptocom.ru:443:iis TLSv1.2:GOST2012-MAGMA-MAGMAOMAC v-cp5-12L.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/dgst.try000066400000000000000000000157251446070765000216330ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ dgst" switch -exact [engine_name] { "ccore" {set signalg { gost2001:A gost2012_256:A gost2012_512:A}} "open" {set signalg { gost2001:A gost2012_256:A gost2012_512:A}} } if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { set alg_list $signalg } set hash_alg_list { md5 hash_94 hash_12_256 hash_12_512 } # =============== # GOST 34.11-2012 # =============== test -createsfiles {dgst.dat dgst0.dat dgst2.dat dgst8.dat dgst63.dat dgst_CF.dat} "Đ¤ĐžŅ€ĐŧĐ¸Ņ€ĐžĐ˛Đ°ĐŊиĐĩ Ņ‚ĐĩŅŅ‚ĐžĐ˛Ņ‹Ņ… даĐŊĐŊҋ҅" { makeFile dgst.dat [string repeat "Test data to digest.\n" 100] binary makeFile dgst0.dat "" binary makeFile dgst63.dat "012345678901234567890123456789012345678901234567890123456789012" binary file copy -force $::test::src/dgst_CF.dat $::test::src/dgst_ex1.dat $::test::src/dgst_ex2.dat . } 0 "" test "Đ’Ņ‹Ņ‡Đ¸ŅĐģĐĩĐŊиĐĩ даКдĐļĐĩŅŅ‚Đ° аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_256" { grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst63.dat"] } 0 "md_gost12_256\(dgst63.dat)= 9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500\n" test "Два даКдĐļĐĩŅŅ‚Đ° аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_256" { grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst63.dat dgst63.dat"] } 0 "md_gost12_256\(dgst63.dat)= 9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500\nmd_gost12_256\(dgst63.dat)= 9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500\n" test "ДайдĐļĐĩҁ҂ ĐžŅ‚ даĐŊĐŊҋ҅ ĐŊ҃ĐģĐĩвОК Đ´ĐģиĐŊŅ‹ аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_256" { grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst0.dat"] } 0 "md_gost12_256\(dgst0.dat)= 3f539a213e97c802cc229d474c6aa32a825a360b2a933a949fd925208d9ce1bb\n" test "ДайдĐļĐĩҁ҂ ĐžŅ‚ ҁĐŋĐĩ҆.даĐŊĐŊҋ҅ аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_256" { grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst_CF.dat"] } 0 "md_gost12_256\(dgst_CF.dat)= 81bb632fa31fcc38b4c379a662dbc58b9bed83f50d3a1b2ce7271ab02d25babb\n" test "ДайдĐļĐĩҁ҂ ĐžŅ‚ ĐēĐžĐŊŅ‚Ņ€ĐžĐģҌĐŊĐžĐŗĐž ĐŋŅ€Đ¸ĐŧĐĩŅ€Đ° 1 аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_256" { grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst_ex1.dat"] } 0 "md_gost12_256\(dgst_ex1.dat)= 9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500\n" test "ДайдĐļĐĩҁ҂ ĐžŅ‚ ĐēĐžĐŊŅ‚Ņ€ĐžĐģҌĐŊĐžĐŗĐž ĐŋŅ€Đ¸ĐŧĐĩŅ€Đ° 2 аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_256" { grep "md_gost12_256\\(" [openssl "dgst -md_gost12_256 dgst_ex2.dat"] } 0 "md_gost12_256\(dgst_ex2.dat)= 9dd2fe4e90409e5da87f53976d7405b0c0cac628fc669a741d50063c557e8f50\n" test "Đ’Ņ‹Ņ‡Đ¸ŅĐģĐĩĐŊиĐĩ даКдĐļĐĩŅŅ‚Đ° аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_512" { grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst63.dat"] } 0 "md_gost12_512\(dgst63.dat)= 1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48\n" test "Два даКдĐļĐĩŅŅ‚Đ° аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_512" { grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst63.dat dgst63.dat"] } 0 "md_gost12_512\(dgst63.dat)= 1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48\nmd_gost12_512\(dgst63.dat)= 1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48\n" test "ДайдĐļĐĩҁ҂ ĐžŅ‚ даĐŊĐŊҋ҅ ĐŊ҃ĐģĐĩвОК Đ´ĐģиĐŊŅ‹ аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_512" { grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst0.dat"] } 0 "md_gost12_512\(dgst0.dat)= 8e945da209aa869f0455928529bcae4679e9873ab707b55315f56ceb98bef0a7362f715528356ee83cda5f2aac4c6ad2ba3a715c1bcd81cb8e9f90bf4c1c1a8a\n" test "ДайдĐļĐĩҁ҂ ĐžŅ‚ ҁĐŋĐĩ҆.даĐŊĐŊҋ҅ аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_512" { grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst_CF.dat"] } 0 "md_gost12_512\(dgst_CF.dat)= 8b06f41e59907d9636e892caf5942fcdfb71fa31169a5e70f0edb873664df41c2cce6e06dc6755d15a61cdeb92bd607cc4aaca6732bf3568a23a210dd520fd41\n" test "ДайдĐļĐĩҁ҂ ĐžŅ‚ ĐēĐžĐŊŅ‚Ņ€ĐžĐģҌĐŊĐžĐŗĐž ĐŋŅ€Đ¸ĐŧĐĩŅ€Đ° 1 аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_512" { grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst_ex1.dat"] } 0 "md_gost12_512\(dgst_ex1.dat)= 1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48\n" test "ДайдĐļĐĩҁ҂ ĐžŅ‚ ĐēĐžĐŊŅ‚Ņ€ĐžĐģҌĐŊĐžĐŗĐž ĐŋŅ€Đ¸ĐŧĐĩŅ€Đ° 2 аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost12_512" { grep "md_gost12_512\\(" [openssl "dgst -md_gost12_512 dgst_ex2.dat"] } 0 "md_gost12_512\(dgst_ex2.dat)= 1e88e62226bfca6f9994f1f2d51569e0daf8475a3b0fe61a5300eee46d961376035fe83549ada2b8620fcd7c496ce5b33f0cb9dddc2b6460143b03dabac9fb28\n" test "Đ’Ņ‹Ņ‡Đ¸ŅĐģĐĩĐŊиĐĩ даКдĐļĐĩŅŅ‚Đ° аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost94" { grep "md_gost94\\(" [openssl "dgst -md_gost94 dgst.dat"] } 0 "md_gost94\(dgst.dat)= 42e462ce1c2b4bf72a4815b7b4877c601f05e5781a71eaa36f63f836c021865c\n" test "Đ’Ņ‹Ņ‡Đ¸ŅĐģĐĩĐŊиĐĩ Đ´Đ˛ŅƒŅ… даКдĐļĐĩŅŅ‚ĐžĐ˛ аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost94" { grep "md_gost94\\(" [openssl "dgst -md_gost94 dgst.dat dgst.dat"] } 0 "md_gost94\(dgst.dat)= 42e462ce1c2b4bf72a4815b7b4877c601f05e5781a71eaa36f63f836c021865c\nmd_gost94\(dgst.dat)= 42e462ce1c2b4bf72a4815b7b4877c601f05e5781a71eaa36f63f836c021865c\n" test "Đ’Ņ‹Ņ‡Đ¸ŅĐģĐĩĐŊиĐĩ даКдĐļĐĩŅŅ‚Đ° ĐžŅ‚ даĐŊĐŊҋ҅ ĐŊ҃ĐģĐĩвОК Đ´ĐģиĐŊŅ‹ аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ md_gost94" { grep "md_gost94\\(" [openssl "dgst -md_gost94 dgst0.dat"] } 0 "md_gost94\(dgst0.dat)= 3f25bc1fbbce27ca10fb1958f319473ae7e17482c3b53ecf47a7e2de8aabe4c8\n" foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username dgst_$alg_fn test -createsfiles $username/seckey.pem "ĐĄĐĩĐēŅ€ĐĩŅ‚ĐŊŅ‹Đš ĐēĐģŅŽŅ‡, аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ $alg" { makeSecretKey $username $alg } 0 1 foreach hash_alg $hash_alg_list { if { ($alg eq "rsa:") || ($hash_alg eq [alg_hash $alg]) } { test -skip {![file exists $username/seckey.pem]||![file exists dgst.dat]} -createsfiles $username/sig.bin "ПодĐŋĐ¸ŅŅŒ даКдĐļĐĩŅŅ‚Đ° $hash_alg аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ $alg" { openssl "dgst -[hash_short_name $hash_alg] -sign $username/seckey.pem -out $username/sig.bin dgst.dat" expr {[file size $username/sig.bin] > 0} } 0 1 test -skip {![file exists $username/seckey.pem]||![file exists $username/sig.bin]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€Đēа ĐŋОдĐŋĐ¸ŅĐ¸ ĐŋОд даКдĐļĐĩŅŅ‚ĐžĐŧ $hash_alg ĐŊа аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐĩ $alg" { grep Verif [openssl "dgst -[hash_short_name $hash_alg] -prverify $username/seckey.pem -signature $username/sig.bin dgst.dat"] } 0 "Verified OK " } else { test -skip {![file exists $username/seckey.pem]||![file exists dgst.dat]} -createsfiles "testmd5.bin" "ПодĐŋĐ¸ŅŅŒ ĐŊĐĩŅĐžĐ˛ĐŧĐĩŅŅ‚Đ¸ĐŧĐžĐŗĐž даКдĐļĐĩŅŅ‚Đ° $hash_alg c ĐŋОдĐŋĐ¸ŅŅŒŅŽ $alg" { grep Error [openssl "dgst -[hash_short_name $hash_alg] -sign $username/seckey.pem -out testmd5.bin dgst.dat"] } 1 {invalid digest type} } } } end_tests libengine-gost-openssl-3.0.2/tcl_tests/dgst_CF.dat000066400000000000000000000002001446070765000221130ustar00rootroot00000000000000îîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîîlibengine-gost-openssl-3.0.2/tcl_tests/dgst_ex1.dat000066400000000000000000000000771446070765000223340ustar00rootroot00000000000000012345678901234567890123456789012345678901234567890123456789012libengine-gost-openssl-3.0.2/tcl_tests/dgst_ex2.dat000066400000000000000000000001101446070765000223210ustar00rootroot00000000000000Ņå âåōđč, Ņōđčáîæč âíķöč, âåūōú ņ ėîđ˙ ņōđåëāėč íā õđāáđû˙ īëúęû Čãîđåâûlibengine-gost-openssl-3.0.2/tcl_tests/enc.try000066400000000000000000000205631446070765000214330ustar00rootroot00000000000000#!/usr/bin/tclsh/ lappend auto_path [file dirname [info script]] package require ossltest set plain0 [getFile plain.enc] file copy -force $::test::src/cfb0.enc $::test::dir file copy -force $::test::src/cnt0.enc $::test::dir file copy -force $::test::src/cbc0.enc $::test::dir file copy -force $::test::src/aes0.enc $::test::dir file copy -force $::test::src/plain.enc $::test::dir file copy -force $::test::src/magma_plain.enc $::test::dir file copy -force $::test::src/magma_acpkm_plain.enc $::test::dir set cfb1 [getFile cfb1.enc] set cbc1 [getFile cbc1.enc] set cnt1 [getFile cnt1.enc] set aes1 [getFile aes1.enc] set magma1 [getFile magma1.enc] set macpkm1 [getFile macpkm1.enc] cd $::test::dir file delete cfb1.enc cbc1.enc cnt1.enc aes1.enc magma1.enc magma1.enc macpkm1.enc start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ enc" save_env2 {CRYPT_PARAMS} if [info exists env(CRYPT_PARAMS)] {unset env(CRYPT_PARAMS)} # Default CRYPT_PARAMS for the following tests. set env(CRYPT_PARAMS) "id-tc26-gost-28147-param-Z" test -createsfiles cfb0.dec "Decrypting etalon file with GOST89-(CFB)" { openssl "enc -gost89 -d -md md5 -in cfb0.enc -out cfb0.dec -k 1234567890 -p" getFile cfb0.dec } 0 $plain0 test -createsfiles cnt0.dec "Decrypting etalon file with GOST89-CNT" { openssl "enc -gost89-cnt -d -md md5 -in cnt0.enc -out cnt0.dec -k 1234567890 -p" getFile cnt0.dec } 0 $plain0 test -createsfiles cbc0.dec "Decrypting etalon file with GOST89-CBC" { openssl "enc -gost89-cbc -d -md md5 -in cbc0.enc -out cbc0.dec -k 1234567890 -p" getFile cbc0.dec } 0 $plain0 test -createsfiles aes0.dec "Decrypting etalon file encrypted with AES128-CBC" { openssl "enc -aes-128-cbc -d -md md5 -in aes0.enc -out aes0.dec -k 1234567890" getFile aes0.dec } 0 $plain0 test -createsfiles cfb1.enc "Encrypting etalon file with GOST89-(CFB)" { openssl "enc -gost89 -in plain.enc -out cfb1.enc -K 0D6F24152DB4B18CC4B0EE62F55FAD0BEADC26E7992C5EDF039114EC3F44EB08 -iv 8EE68900818CD1F9 -p" getFile cfb1.enc } 0 $cfb1 test -createsfiles cnt1.enc "Encrypting etalon file with GOST89-CNT mode" { openssl "enc -gost89-cnt -in plain.enc -out cnt1.enc -K EF164FDF5B1128DE44AFCC00A0323DC1090EC99DE9C6B085B0D2550AB9F1AF47 -iv 9AF32B4E2FB1DF3D -p" getFile cnt1.enc } 0 $cnt1 test -createsfiles cbc1.enc "Encrypting etalon file with GOST89-CBC mode" { openssl "enc -gost89-cbc -in plain.enc -out cbc1.enc -K F6AF8D0EDF555D164E3DDFA20615D7DF602B99A5ED4BD4103C4CA622D4544636 -iv 8264BBB5A072CDB5 -p" getFile cbc1.enc } 0 $cbc1 test -createsfiles aes1.enc "Encrypting etalon file with AES128-CBC" { openssl "enc -aes-128-cbc -in plain.enc -out aes1.enc -K D45358C3C6E711392E9F2AFF46C444B1 -iv 78E88EFC8F44B9C27C45C5FCC61DCD94 -p" getFile aes1.enc } 0 $aes1 set plain "Test data to encrypt " makeFile enc.dat $plain binary set plain2 [string repeat "Test data for encrypt of big string\n" 64] makeFile enc2.dat $plain2 binary test -createsfiles {cfb.enc} "Encrypting file with GOST89-(CFB)" { openssl "enc -gost89 -out cfb.enc -in enc.dat -k 1234567890 -p" file isfile cfb.enc } 0 1 test -createsfiles {cnt.enc} "Encrypting file with GOST89-CNT" { openssl "enc -gost89-cnt -out cnt.enc -in enc.dat -k 1234567890 -p" file isfile cnt.enc } 0 1 test -createsfiles {cbc.enc} "Encrypting file with GOST89-CBC" { openssl "enc -gost89-cbc -out cbc.enc -in enc.dat -k 1234567890 -p" file isfile cbc.enc } 0 1 test -createsfiles aes.enc "Encrypting file using AES128-CBC" { openssl "enc -aes-128-cbc -out aes.enc -in enc.dat -k 1234567890" file isfile aes.enc } 0 1 test "Ciphered text with GOST89-CFB differs from plain text" { set ciphered [getFile cfb.enc binary] string first $ciphered $plain } 0 -1 test "Ciphered text with GOST89-CNT differs from plain text" { set ciphered [getFile cnt.enc binary] string first $ciphered $plain } 0 -1 test "Ciphered text with GOST89-CBC differs from plain text" { set ciphered [getFile cbc.enc binary] string first $ciphered $plain } 0 -1 test "Ciphered with AES text differs from plain text" { set ciphered [getFile aes.enc binary] string first $ciphered $plain } 0 -1 test -createsfiles cfb.dec "Decrypting file, encrypted with GOST89-CFB" { openssl "enc -gost89 -d -in cfb.enc -out enc.dec -k 1234567890 -p" getFile enc.dec } 0 $plain test -createsfiles cnt.dec "Decrypting file, encrypted with GOST89-CNT" { openssl "enc -gost89-cnt -d -in cnt.enc -out cnt.dec -k 1234567890 -p" getFile cnt.dec } 0 $plain test -createsfiles cbc.dec "Decrypting file, encrypted with GOST89-CBC" { openssl "enc -gost89-cbc -d -in cbc.enc -out cbc.dec -k 1234567890 -p" getFile cbc.dec } 0 $plain test -createsfiles aes.dec "Decrypting file encrypted with AES" { openssl "enc -aes-128-cbc -d -in aes.enc -out aes.dec -k 1234567890" getFile aes.dec } 0 $plain test -createsfiles {cfb2.enc} "Encrypting GOST89 more than 1KB" { if [info exists env(CRYPT_PARAMS)] {unset env(CRYPT_PARAMS)} openssl "enc -gost89 -out cfb2.enc -in enc2.dat -k 1234567890 -p" file isfile cfb2.enc } 0 1 test -createsfiles {cfb2.dec} "Decrypting GOST89 more than 1Kb" { openssl "enc -d -gost89 -out cfb2.dec -in cfb2.enc -k 1234567890 -p" getFile cfb2.dec } 0 $plain2 test -createsfiles {cnt2.enc} "Encrypting more than 1KB with GOST89-CNT" { if [info exists env(CRYPT_PARAMS)] {unset env(CRYPT_PARAMS)} openssl "enc -gost89-cnt -out cnt2.enc -in enc2.dat -k 1234567890 -p" file isfile cnt2.enc } 0 1 test -createsfiles {cnt2.dec} "Decrypting more than 1Kb with GOST89-CNT" { openssl "enc -d -gost89-cnt -out cnt2.dec -in cnt2.enc -k 1234567890 -p" getFile cnt2.dec } 0 $plain2 test -createsfiles {cnc2.enc} "Encrypting more than 1KB with GOST89-CBC" { if [info exists env(CRYPT_PARAMS)] {unset env(CRYPT_PARAMS)} openssl "enc -gost89-cbc -out cbc2.enc -in enc2.dat -k 1234567890 -p" file isfile cbc2.enc } 0 1 test -createsfiles {cbc2.dec} "Decrypting more than 1Kb with GOST89-CBC" { openssl "enc -d -gost89-cbc -out cbc2.dec -in cbc2.enc -k 1234567890 -p" getFile cbc2.dec } 0 $plain2 test -skip {![file exists enc2.dat]} -createsfiles {cfb3.enc} "Encrypting GOST89 with paramset TC26 (symbolic)" { set env(CRYPT_PARAMS) "id-tc26-gost-28147-param-Z" openssl "enc -gost89 -out cfb3.enc -in enc2.dat -k 1234567890 -p" file isfile cfb3.enc } 0 1 test -skip {![file exists cfb3.enc]} -createsfiles {cfb3.dec1} "Decrypting GOST89 with paramset TC26 (OID)" { set env(CRYPT_PARAMS) "1.2.643.7.1.2.5.1.1" openssl "enc -gost89 -d -in cfb3.enc -out cfb3.dec1 -k 1234567890 -p" getFile cfb3.dec1 } 0 $plain2 if {0} { test -skip {![file exists enc2.dat]} -createsfiles {cbc3.enc} "Encrypting GOST89-CBC with paramset RIC 1 (symbolic)" { set env(CRYPT_PARAMS) "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" openssl "enc -gost89-cbc -out cbc3.enc -in enc2.dat -k 1234567890 -p" file isfile cbc3.enc } 0 1 test -skip {![file exists cbc3.enc]} -createsfiles {cbc3.dec1} "Decrypting GOST89-CBC with paramset RIC 1 (OID)" { set env(CRYPT_PARAMS) "1.2.643.2.2.31.7" openssl "enc -gost89-cbc -d -in cbc3.enc -out cbc3.dec1 -k 1234567890 -p" getFile cbc3.dec1 } 0 $plain2 } restore_env2 {CRYPT_PARAMS} save_env2 {CRYPT_PARAMS OPENSSL_CONF} test -skip {![file exists cfb3.enc]} -createsfiles {cfb3.dec2} "Decrypting GOST89 with default params" { if [info exists env(CRYPT_PARAMS)] {unset env(CRYPT_PARAMS)} makeFile enc1.cnf [regsub -all "\n\\s*CRYPT_PARAMS\\s*=\[\^\n]*" [getConfig] ""] set ::env(OPENSSL_CONF) [file join [pwd] enc1.cnf] openssl "enc -gost89 -d -in cfb3.enc -out cfb3.dec2 -k 1234567890 -p" getFile cfb3.dec2 } 0 $plain2 restore_env2 {CRYPT_PARAMS OPENSSL_CONF} save_env2 {CRYPT_PARAMS} test -skip {![file exists cfb3.enc]} -createsfiles {cfb3.dec3} "Decrypting GOST89 with wrong explicitely set" { set env(CRYPT_PARAMS) "id-Gost28147-89-CryptoPro-B-ParamSet" openssl "enc -gost89 -d -in cfb3.enc -out cfb3.dec3 -k 1234567890 -p" string equal [getFile cfb3.dec3] $plain2 } 0 0 restore_env2 {CRYPT_PARAMS} test -createsfiles magma1.enc "Encrypting etalon file (Magma-CTR)" { openssl "enc -magma-ctr -K ffeeddccbbaa99887766554433221100f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff -iv 1234567800000000 -in magma_plain.enc -out magma1.enc" getFile magma1.enc } 0 $magma1 if {0} { test -createsfiles macpkm1.enc "Encrypting etalon file (Magma-ACPKM)" { openssl "enc -id-tc26-cipher-gostr3412-2015-magma-ctracpkm -K F797256845F36CF075603445CD322BACC3834032BC425E4D3C8495236F7B6CAF -iv 00000FFF00000000 -in magma_acpkm_plain.enc -out macpkm1.enc" getFile macpkm1.enc } 0 $macpkm1 } end_tests libengine-gost-openssl-3.0.2/tcl_tests/engine.try000066400000000000000000000036471446070765000221370ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ engine" switch -exact [engine_name] { "ccore" {set list " \[RAND, gost89, gost89-cnt, gost89-cnt-12, gost89-cbc, id-tc26-cipher-gostr3412-2015-magma-ctracpkm, magma-ctr, magma-ofb, magma-ecb, magma-cbc, magma-cfb, grasshopper-ecb, grasshopper-cbc, grasshopper-ofb, grasshopper-cfb, grasshopper-ctr, id-tc26-cipher-gostr3412-2015-kuznyechik-ctracpkm, md_gost94, gost-mac, md_gost12_256, md_gost12_512, gost-mac-12, gost2001, id-GostR3410-2001DH, gost-mac, gost2012_256, gost2012_512, gost-mac-12\]\n"} "open" {set list "(gost) Reference implementation of GOST engine\n \[gost89, gost89-cnt, gost89-cnt-12, gost89-cbc, kuznyechik-ecb, kuznyechik-cbc, kuznyechik-cfb, kuznyechik-ofb, kuznyechik-ctr, magma-ecb, kuznyechik-mgm, magma-cbc, magma-ctr, magma-ctr-acpkm, magma-ctr-acpkm-omac, magma-mgm, kuznyechik-ctr-acpkm, kuznyechik-ctr-acpkm-omac, magma-kexp15, kuznyechik-kexp15, md_gost94, gost-mac, md_gost12_256, md_gost12_512, gost-mac-12, magma-mac, kuznyechik-mac, kuznyechik-ctr-acpkm-omac, gost2001, id-GostR3410-2001DH, gost-mac, gost2012_256, gost2012_512, gost-mac-12, magma-mac, kuznyechik-mac, magma-ctr-acpkm-omac, kuznyechik-ctr-acpkm-omac]\n"} } makeFile no_engine.cnf [regsub -all "\n\\s*engines\\s*=\\s*engines_section\[\^\n]*" [getConfig] ""] save_env2 {OPENSSL_CONF} set env(OPENSSL_CONF) [file join [pwd] no_engine.cnf] test "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐŋОддĐĩŅ€ĐļĐē҃ Ņ€ĐžŅŅĐ¸ĐšŅĐēĐ¸Ņ… аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧОв" { grep "gost" [openssl "engine -c $env(ENGINE_NAME)"] } 0 $list if {[engine_name] == "ccore"} { test "ПоĐģŅƒŅ‡ĐĩĐŊиĐĩ ҁĐŋĐ¸ŅĐēа ĐēĐžĐŊŅ„Đ¸ĐŗŅƒŅ€Đ°Ņ†Đ¸ĐžĐŊĐŊҋ҅ ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€ĐžĐ˛" { openssl "engine -v cryptocom" } 0 "(cryptocom) Cryptocom GOST engine RNG, RNG_PARAMS, CRYPT_PARAMS, CCENGINE_LICENSE, GOST_PBE_HMAC " } restore_env2 {OPENSSL_CONF} end_tests libengine-gost-openssl-3.0.2/tcl_tests/enums.tcl000066400000000000000000000010701446070765000217510ustar00rootroot00000000000000set f [open enums2tcl.c w] puts $f "#include \"../ccore/ccapi.h\"" puts $f "#include \"../ccore/ccrdscb.h\"" puts $f "#include " puts $f "int main (void) {" set inc [open ../ccore/ccapi.h r] while {[gets $inc line] >= 0} { if [regexp {\bcc_rc_\w+} $line code] { puts $f "printf(\"set $code %d\\n\", $code);" } } close $inc set inc [open ../ccore/ccrdscb.h r] while {[gets $inc line] >= 0} { if [regexp {\bcc_rds_cb_(rc|op|stage)_\w+} $line code] { puts $f "printf(\"set $code %d\\n\", $code);" } } close $inc puts $f "return 0;" puts $f "}" close $f libengine-gost-openssl-3.0.2/tcl_tests/getengine.tcl000066400000000000000000000016331446070765000225740ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path . package require ossltest proc getConfigLine {var {section ""}} { global config if {[string length $section]} { if {[regexp -indices "\n\\s*\\\[\\s*$section\\s*\\\]\\s*\n" $config start]} { set start [lindex $start 1] } else { return -code error "Section $section is not found" } } else { set start 0 } if {[regexp -indices "\n\\s*\\\[\[^\n\]+\\\]\\s*\n" [string range $config $start end] end]} { set end [expr $start+[lindex $end 0]] } else { set end end } if {![regexp "\n\\s*$var\\s*=\\s*(\\S\[^\n\]+?)\\s*\n" "\n[string range $config $start $end]" => value]} { return -code error "No variable $var in section $section" } return $value } set config [getConfig] set openssl_def [getConfigLine openssl_conf] set engine_section [getConfigLine {[^#]+} [getConfigLine engines $openssl_def ]] puts [getConfigLine engine_id $engine_section] libengine-gost-openssl-3.0.2/tcl_tests/http.tcl000066400000000000000000000014571446070765000216120ustar00rootroot00000000000000# # ПоĐģŅƒŅ‡Đ°ĐĩŅ‚ в ĐēĐžĐŧаĐŊĐ´ĐŊОК ŅŅ‚Ņ€ĐžĐēĐĩ URL и (ĐžĐŋŅ†Đ¸ĐžĐŊаĐģҌĐŊĐž) ŅŅ‚Ņ€ĐžĐē҃ Đ´ĐģŅ ĐŋĐžĐ¸ŅĐēа # ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ°. Đ’Ņ‹ĐŋĐžĐģĐŊŅĐĩŅ‚ HTTP-СаĐŋŅ€ĐžŅ и Đ˛ĐžĐˇŅ€Đ˛Ņ‰Đ°ĐĩŅ‚ Ņ€ĐĩĐˇŅƒĐģŅŒŅ‚Đ°Ņ‚ # В ŅŅ‚Ņ€ĐžĐēĐĩ Đ´ĐģŅ ĐŋĐžĐ¸ŅĐēа ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ° ĐŧĐžĐļĐŊĐž Đ¸ŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ ĐŋŅ€ŅĐŧŅ‹Đĩ ҁĐģŅŅˆĐ¸ вĐŧĐĩŅŅ‚Đž # ĐžĐąŅ€Đ°Ņ‚ĐŊҋ҅. if {!$argc || $argc>2} { puts stderr "Usage $argv0 url \[cert-spec\]" } set url [lindex $argv 0] if {$argc==2} { set certspec [string map {/ \\} [lindex $argv 1]] } puts Started package require tcom set hh [::tcom::ref createobject WinHttp.WinHttpRequest.5.1] $hh Open GET $url 0 if {[info exists certspec]} { puts "Setting Client Certificate $certspec" $hh SetClientCertificate $certspec } $hh Send puts [$hh ResponseText] libengine-gost-openssl-3.0.2/tcl_tests/hwkeys.tcl000066400000000000000000000202611446070765000221370ustar00rootroot00000000000000package require testlib start_tests "Đ Đ°ĐąĐžŅ‚Đ° ҁ аĐŋĐŋĐ°Ņ€Đ°Ņ‚ĐŊŅ‹Đŧи ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅĐŧи" if [info exists ::env(BASE_OPENSSL_CONF)] { set openssl_cnf [myfile openssl.cnf] set bf [open $::env(BASE_OPENSSL_CONF) r] set f [open $openssl_cnf w] set engines {} set in_engines 0 while {[gets $bf line] >= 0} { puts $f $line if {[regexp {^\[engine_section\]} $line]} { puts $f "ce_filecnt_keys = cefk_section" } } close $bf if {$tcl_platform(platform) eq "windows"} { set lib_prefix "" set lib_suffix ".dll" } else { set lib_prefix "lib" set lib_suffix ".so" } puts $f "\[cefk_section\] dynamic_path = \$ENV::TEST_ENGINE_DIR/${lib_prefix}ce_filecnt_keys$lib_suffix engine_id = ce_filecnt_keys default_algorithms = ALL \[req\] prompt=no distinguished_name = req_dn \[ req_dn \] OU=OpenSSL Team L=Moscow CN=Dummy user emailAddress=openssl@cryptocom.ru O=Cryptocom C=RU" close $f file copy [file dirname $env(BASE_OPENSSL_CONF)]/cryptocom.lic [file dirname $openssl_cnf]/cryptocom.lic set ::env(OPENSSL_CONF) $openssl_cnf puts [logchannel] "OPENSSL_CONF=$::env(OPENSSL_CONF)" set ::env(TEST_ENGINE_DIR) [regsub {(/[^/]+)$} $::env(ENGINE_DIR) {/t\1}] puts [logchannel] "TEST_ENGINE_DIR=$::env(TEST_ENGINE_DIR)" } set cnt_pln_file [myfile cnt_pln] set cnt_pln_dot_file [myfile cnt.pln.S] set cnt_pln FILECNT=$cnt_pln_file set cnt_enc_file [myfile cnt_enc] set cnt_enc FILECNT=$cnt_enc_file file copy -force ../cnt.pln $cnt_pln_file file copy -force ../cnt.pln $cnt_pln_dot_file file copy -force ../cnt.pln default_file_container file copy -force ../cnt.enc $cnt_enc_file set cntname "test keys" file delete $cnt_enc_file.cmd $cnt_pln_file.cmd eval [exec enums2tcl] foreach K {S X} { set cert$K [myfile cert$K.pem] set pubk$K [myfile pubk$K.pem] upvar 0 cert$K cert pubk$K pubk test -title "$K: ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ и ĐĩĐŗĐž ĐžŅ‚ĐēŅ€Ņ‹Ņ‚Ņ‹Đš ĐēĐģŅŽŅ‡" -id cert$K { run openssl req -new -x509 -key $cnt_pln.$K -keyform ENGINE -engine cryptocom -out $cert run openssl x509 -pubkey -noout -in $cert file rename _stdout $pubk } test -title "$K: ПодĐŋĐ¸ŅŅ‹Đ˛Đ°ĐĩĐŧ Ņ„Đ°ĐšĐģ СаĐēҀҋ҂ҋĐŧ ĐēĐģŅŽŅ‡ĐžĐŧ" -id sign$K -dep cert$K { run openssl dgst -md_gost94 -sign $cnt_pln.$K -keyform ENGINE -engine cryptocom -out $cert.sig $cert } test -title "$K: ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐŋОдĐŋĐ¸ŅŅŒ ĐŊа СаĐēŅ€Ņ‹Ņ‚ĐžĐŧ ĐēĐģŅŽŅ‡Đĩ" -dep sign$K { run openssl dgst -md_gost94 -prverify $cnt_pln.$K -keyform ENGINE -engine cryptocom -signature $cert.sig $cert } test -title "$K: ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐŋОдĐŋĐ¸ŅŅŒ ĐŊа ĐžŅ‚ĐēŅ€Ņ‹Ņ‚ĐžĐŧ ĐēĐģŅŽŅ‡Đĩ" -dep sign$K { run openssl dgst -md_gost94 -verify $pubk -signature $cert.sig $cert } test -title "$K: ПодĐŋĐ¸ŅŅ‹Đ˛Đ°ĐĩĐŧ Ņ„Đ°ĐšĐģ СаĐēҀҋ҂ҋĐŧ ĐēĐģŅŽŅ‡ĐžĐŧ, ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€ ҁ иĐŧĐĩĐŊĐĩĐŧ" -id sign$K -dep cert$K { run openssl dgst -md_gost94 -sign $cnt_pln:$cntname.$K -keyform ENGINE -engine cryptocom -out $cert.sig $cert } test -title "$K: ПодĐŋĐ¸ŅŅ‹Đ˛Đ°ĐĩĐŧ Ņ„Đ°ĐšĐģ СаĐŋĐ°Ņ€ĐžĐģĐĩĐŊĐŊŅ‹Đŧ СаĐēҀҋ҂ҋĐŧ ĐēĐģŅŽŅ‡ĐžĐŧ" -dep cert$K { run openssl dgst -md_gost94 -sign $cnt_enc.$K -keyform ENGINE -engine cryptocom -out $cert.sig -passin pass:abcdefghijklmnopqrstuvwxyz1234567890 $cert run openssl dgst -md_gost94 -verify $pubk -signature $cert.sig $cert } } test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ ĐŋĐž ĐŋĐžĐģĐŊОК ҁĐŋĐĩŅ†Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸Đ¸" { run hwkeys -load $cnt_pln:$cntname.S } test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ ĐąĐĩС иĐŧĐĩĐŊи ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€Đ°" { run hwkeys -load $cnt_pln.S } test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ ĐąĐĩС иĐŧĐĩĐŊи ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ" { run hwkeys -load FILECNT:$cntname.S } test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ ĐąĐĩС иĐŧĐĩĐŊ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€Đ° и ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ" { run hwkeys -load FILECNT.S } test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ ҁ иĐŧĐĩĐŊĐĩĐŧ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, ŅĐžĐ´ĐĩŅ€ĐļĐ°Ņ‰Đ¸Đŧ .S" { run hwkeys -load FILECNT=$cnt_pln_dot_file.S } end_tests proc write_cmd_file {filename args} { set f [open filename w] fconfigure $f -encoding binary puts -nonewline $f [binary format c* $args] close $f } test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐŊĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, ĐŊĐĩŅ‚ ĐēĐžĐģĐģĐąŅĐēа" { write_cmd_file $cnt_pln_file.cmd $cc_rc_no_contact run -fail -stderr {regex {cc_rds_read_key.*==cc_rc_no_contact.*load_key failed}} \ hwkeys -no-cb -load $cnt_pln.S } test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐŊĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, ĐĩŅŅ‚ŅŒ ĐēĐžĐģĐģĐąŅĐē, ĐŊĐžŅĐ¸Ņ‚ĐĩĐģҌ даĐģи" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐŊĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, ĐĩŅŅ‚ŅŒ ĐēĐžĐģĐģĐąŅĐē, СаĐŋŅ€ĐžŅ ĐžŅ‚ĐŧĐĩĐŊиĐģи" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐĩŅŅ‚ŅŒ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģҌ, ĐŊĐĩŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€Đ°" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐŊĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ĐŊĐĩŅ‚ ĐēĐžĐģĐģĐąŅĐēа" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐŊĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ĐĩŅŅ‚ŅŒ ĐēĐžĐģĐģĐąŅĐē, ĐŊĐžŅĐ¸Ņ‚ĐĩĐģҌ ĐŋĐžĐŧĐĩĐŊŅĐģи, ĐžĐŋŅŅ‚ŅŒ ĐŊĐĩ Ņ‚ĐžŅ‚, Đĩ҉Đĩ Ņ€Đ°Đˇ ĐŋĐžĐŧĐĩĐŊŅĐģи, Ņ‚ĐĩĐŋĐĩŅ€ŅŒ Ņ‚ĐžŅ‚" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐŊĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ĐĩŅŅ‚ŅŒ ĐēĐžĐģĐģĐąŅĐē, СаĐŋŅ€ĐžŅ ĐžŅ‚ĐŧĐĩĐŊиĐģи" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐŊĐĩŅ‚ ŅŅ‚ĐžĐŗĐž ĐēĐģŅŽŅ‡Đ° (Đ´Ņ€ŅƒĐŗĐžĐš ĐĩŅŅ‚ŅŒ)" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐžŅˆĐ¸ĐąĐēа ҇҂ĐĩĐŊĐ¸Ņ, ĐŊĐĩŅ‚ ĐēĐžĐģĐģĐąŅĐēа" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐžŅˆĐ¸ĐąĐēа ҇҂ĐĩĐŊĐ¸Ņ, ŅƒŅŅ‚Ņ€Đ°ĐŊĐĩĐŊа" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐžŅˆĐ¸ĐąĐēа ҇҂ĐĩĐŊĐ¸Ņ, Ņ‚Đ°ĐšĐŧĐ°ŅƒŅ‚" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐžŅˆĐ¸ĐąĐēа ҇҂ĐĩĐŊĐ¸Ņ, ĐžŅ‚ĐŧĐĩĐŊа" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ, ĐŊĐĩ ŅĐžŅˆĐģĐ°ŅŅŒ CRC ĐēĐģŅŽŅ‡Đ°" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ ĐŋĐ°Ņ€ĐžĐģҌĐŊŅ‹Đš, даĐĩĐŧ ĐŋĐ°Ņ€ĐžĐģҌ" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ ĐŋĐ°Ņ€ĐžĐģҌĐŊŅ‹Đš, даĐĩĐŧ ĐŋĐ°Ņ€ĐžĐģҌ ŅĐž Đ˛Ņ‚ĐžŅ€ĐžĐš ĐŋĐžĐŋҋ҂Đēи" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ ĐŋĐ°Ņ€ĐžĐģҌĐŊŅ‹Đš, ĐžŅˆĐ¸ĐąĐēа Đ˛ĐžĐˇĐ˛Ņ€Đ°Ņ‚Đ° ĐŋĐ°Ņ€ĐžĐģŅ" test -title "Đ§Đ¸Ņ‚Đ°ĐĩĐŧ ĐŋĐ°Ņ€ĐžĐģҌĐŊŅ‹Đš, ĐžŅ‚ĐŧĐĩĐŊа" test -title "ĐŸĐ¸ŅˆĐĩĐŧ в ŅĐ˛ĐĩĐļиК ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€" test -title "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐŋОдĐŋĐ¸ŅŅŒŅŽ, Ņ‡Ņ‚Đž ŅŅ‚Đž - Ņ‚ĐžŅ‚ ĐļĐĩ ŅĐ°ĐŧŅ‹Đš ĐēĐģŅŽŅ‡" test -title "ĐŸĐ¸ŅˆĐĩĐŧ в Ņ‚ĐžŅ‚ ĐļĐĩ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€ Đ˛Ņ‚ĐžŅ€ĐžĐš ĐēĐģŅŽŅ‡ ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đŧ" test -title "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐŋОдĐŋĐ¸ŅŅŒŅŽ, Ņ‡Ņ‚Đž ĐžĐŊĐž" test -title "ĐŸĐ¸ŅˆĐĩĐŧ ĐąĐĩĐˇŅ‹ĐŧŅĐŊĐŊŅ‹Đš" test -title "ĐŸĐ¸ŅˆĐĩĐŧ ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš, ĐŋĐ°Ņ€ĐžĐģи ŅĐžĐ˛ĐŋĐ°Đ´Đ°ŅŽŅ‚ ŅĐž Đ˛Ņ‚ĐžŅ€ĐžĐš ĐŋĐžĐŋҋ҂Đēи" test -title "ĐŸĐ¸ŅˆĐĩĐŧ ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš, ĐžŅˆĐ¸ĐąĐēа ĐŋĐžĐģŅƒŅ‡ĐĩĐŊĐ¸Ņ ĐŋĐ°Ņ€ĐžĐģŅ" test -title "ĐŸĐ¸ŅˆĐĩĐŧ ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš, ĐžŅ‚ĐŧĐĩĐŊа" test -title "ĐžŅˆĐ¸ĐąĐēа СаĐŋĐ¸ŅĐ¸, ĐŊĐĩŅ‚ ĐēĐžĐģĐģĐąŅĐēа" test -title "ĐžŅˆĐ¸ĐąĐēа СаĐŋĐ¸ŅĐ¸, вĐĩŅ€ĐŊ҃Đģи ĐŊĐžŅĐ¸Ņ‚ĐĩĐģҌ" test -title "ĐžŅˆĐ¸ĐąĐēа СаĐŋĐ¸ŅĐ¸, Ņ‚Đ°ĐšĐŧĐ°ŅƒŅ‚" test -title "ĐžŅˆĐ¸ĐąĐēа СаĐŋĐ¸ŅĐ¸, ĐžŅ‚ĐŧĐĩĐŊа" test -title "НĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, ĐŊĐĩŅ‚ ĐēĐžĐģĐģĐąŅĐēа" test -title "НĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, даĐģи" test -title "НĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, Ņ‚Đ°ĐšĐŧĐ°ŅƒŅ‚" test -title "НĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, ĐžŅ‚ĐŧĐĩĐŊа" test -title "НĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ĐŊĐĩŅ‚ ĐŋĐĩŅ€ĐĩСаĐŋĐ¸ŅĐ¸, ĐŊĐĩŅ‚ ĐēĐžĐģĐģĐąŅĐēа" test -title "НĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ĐŊĐĩŅ‚ ĐŋĐĩŅ€ĐĩСаĐŋĐ¸ŅĐ¸, ҁĐŧĐĩĐŊиĐģи ĐŊĐžŅĐ¸Ņ‚ĐĩĐģҌ" test -title "НĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ĐŊĐĩŅ‚ ĐŋĐĩŅ€ĐĩСаĐŋĐ¸ŅĐ¸, Ņ‚Đ°ĐšĐŧĐ°ŅƒŅ‚" test -title "НĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ĐŊĐĩŅ‚ ĐŋĐĩŅ€ĐĩСаĐŋĐ¸ŅĐ¸, ĐžŅ‚ĐŧĐĩĐŊа" test -title "НĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ĐĩŅŅ‚ŅŒ ĐŋĐĩŅ€ĐĩСаĐŋĐ¸ŅŅŒ" test -title "КĐģŅŽŅ‡ ĐĩŅŅ‚ŅŒ, ĐŋĐĩŅ€ĐĩСаĐŋĐ¸ŅŅŒ СаĐŋŅ€Đĩ҉ĐĩĐŊа" test -title "КĐģŅŽŅ‡ ĐĩŅŅ‚ŅŒ, ĐŋĐĩŅ€ĐĩСаĐŋĐ¸ŅŅŒ Ņ€Đ°ĐˇŅ€Đĩ҈ĐĩĐŊа" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ, ĐŊĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, ĐŊĐĩŅ‚ ĐēĐžĐģĐģĐąŅĐēа" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ, ĐŊĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, даĐģи ĐŊĐžŅĐ¸Ņ‚ĐĩĐģҌ" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ, ĐŊĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, Ņ‚Đ°ĐšĐŧĐ°ŅƒŅ‚" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ, ĐŊĐĩŅ‚ ĐŊĐžŅĐ¸Ņ‚ĐĩĐģŅ, ĐžŅ‚ĐŧĐĩĐŊа" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ, ĐŊĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ĐŊĐĩŅ‚ ĐēĐžĐģĐģĐąŅĐēа" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ, ĐŊĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ҁĐŧĐĩĐŊиĐģи ĐŊĐžŅĐ¸Ņ‚ĐĩĐģҌ" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ, ĐŊĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, Ņ‚Đ°ĐšĐŧĐ°ŅƒŅ‚" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ, ĐŊĐĩ Ņ‚ĐžŅ‚ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€, ĐžŅ‚ĐŧĐĩĐŊа" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€ ĐąĐĩС иĐŧĐĩĐŊи, даĐĩĐŧ ĐąĐĩС иĐŧĐĩĐŊи" test -title "Đ—Đ°Ņ‚Đ¸Ņ€Đ°ĐĩĐŧ ĐēĐžĐŊŅ‚ĐĩĐšĐŊĐĩŅ€ ĐąĐĩС иĐŧĐĩĐŊи, даĐĩĐŧ ҁ иĐŧĐĩĐŊĐĩĐŧ" libengine-gost-openssl-3.0.2/tcl_tests/interop.try000066400000000000000000000135131446070765000223430ustar00rootroot00000000000000#!/usr/bin/tclsh proc make_fn {alg} { return [string map {":" "_"} $alg] } if {[info exists env(PKG_PATH)]} { lappend auto_path $env(PKG_PATH) } else { lappend auto_path [file dirname [info script]] } if {![info exists env(OTHER_DIR)]} { puts stderr "Environment variable OTHER_DIR not set" exit 1 } else { set data_dir $env(OTHER_DIR) } if {[file normalize $data_dir] == "[pwd]"} { set suffix _bck } elseif {[file normalize $data_dir] == [file normalize [pwd]/../OtherVersion]} { set suffix _oth } else { set suffix _fwd } package require ossltest #cd z set ::test::suffix $suffix cd $::test::dir start_tests "ИĐŊŅ‚ĐĩŅ€ĐžĐŋĐĩŅ€Đ°ĐąĐĩĐģҌĐŊĐžŅŅ‚ŅŒ, ŅŅ€Đ°Đ˛ĐŊĐĩĐŊиĐĩ ҁ $data_dir" if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { set alg_list {gost2001:A gost2001:B gost2001:C gost2012_256:A gost2012_256:B gost2012_256:C gost2012_512:A gost2012_512:B} } if {[info exist env(ENC_LIST)]} { set enc_list $env(ENC_LIST) } else { set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 gost2001:XA: gost2012_256:XA:1.2.643.2.2.31.1 gost2012_256:XB:1.2.643.7.1.2.5.1.1 gost2012_256:XA: gost2012_512:A:1.2.643.2.2.31.3 gost2012_512:B:1.2.643.7.1.2.5.1.1 gost2012_512:A:} } test -createsfiles cfb2.$suffix\ "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ Ņ‚ĐĩĐēŅŅ‚Đ°, ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊĐžĐŗĐž ĐŊа ĐŋĐ°Ņ€ĐžĐģĐĩ в Ņ€ĐĩĐļиĐŧĐĩ CFB" { set plain [getFile $data_dir/enc2.dat] openssl "enc -gost89 -d -in $data_dir/cfb2.enc -out cfb2.$suffix -k 1234567890 -p" set result [getFile cfb2.$suffix] expr {[string equal $plain $result]?1:$result} } 0 1 test -createsfiles cnt2.$suffix\ "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ Ņ‚ĐĩĐēŅŅ‚Đ°, ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊĐžĐŗĐž ĐŊа ĐŋĐ°Ņ€ĐžĐģĐĩ в Ņ€ĐĩĐļиĐŧĐĩ CNT" { set plain [getFile $data_dir/enc2.dat] openssl "enc -gost89-cnt -d -in $data_dir/cnt2.enc -out cnt2.$suffix -k 1234567890 -p" set result [getFile cnt2.$suffix] expr {[string equal $plain $result]?1:$result} } 0 1 test -createsfiles cbc2.$suffix\ "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ Ņ‚ĐĩĐēŅŅ‚Đ°, ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊĐžĐŗĐž ĐŊа ĐŋĐ°Ņ€ĐžĐģĐĩ в Ņ€ĐĩĐļиĐŧĐĩ CBC" { set plain [getFile $data_dir/enc2.dat] openssl "enc -gost89-cbc -d -in $data_dir/cbc2.enc -out cbc2.$suffix -k 1234567890 -p" set result [getFile cbc2.$suffix] expr {[string equal $plain $result]?1:$result} } 0 1 save_env2 {CRYPT_PARAMS} test -createsfiles cbc3.$suffix\ "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ Ņ‚ĐĩĐēŅŅ‚Đ°, ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊĐžĐŗĐž в Ņ€ĐĩĐļиĐŧĐĩ CBC ҁ ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Đ°Đŧи РИК 1" { set plain [getFile $data_dir/enc2.dat] set env(CRYPT_PARAMS) "id-Gost28147-89-CryptoPro-RIC-1-ParamSet" openssl "enc -gost89-cbc -d -in $data_dir/cbc3.enc -out cbc3.$suffix -k 1234567890 -p" set result [getFile cbc3.$suffix] expr {[string equal $plain $result]?1:$result} } 0 1 restore_env2 {CRYPT_PARAMS} foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username $data_dir/U_smime_$alg_fn set userdir $data_dir/U_smime_${alg_fn} switch -glob $alg { gost2012* {set CA_dir_suffix CA-2012} * {set CA_dir_suffix CA} } test "ĐŸŅ€ĐžĐ˛ĐĩŅ€Đēа ĐˇĐ°ŅĐ˛Đēи $alg" { grep "verif" [openssl "req -verify -in $username/req.pem"] } 0 {verify OK } test "ĐŸŅ€ĐžĐ˛ĐĩŅ€Đēа ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ° $alg" { grep "cert.pem" [openssl "verify -CAfile $data_dir/smime$CA_dir_suffix/cacert.pem $userdir/cert.pem"] } 0 "$userdir/cert.pem: OK " test "ĐŸŅ€ĐžĐ˛ĐĩŅ€Đēа CRL" { grep verify [openssl "crl -in $data_dir/test.crl -noout -CAfile $data_dir/test_crl_cacert.pem"] } 0 "verify OK " test "ĐŸŅ€ĐžĐ˛ĐĩŅ€Đēа Đ´ĐžĐē҃ĐŧĐĩĐŊŅ‚Đ°, ĐŋОдĐŋĐ¸ŅĐ°ĐŊĐŊĐžĐŗĐž $alg, smime" { grep Veri [openssl "smime -verify -text -in $data_dir/sign_$alg_fn.msg -out verified.$suffix -CAfile $data_dir/smime$CA_dir_suffix/cacert.pem -certfile $username/cert.pem"] } 0 "Verification successful " set username $data_dir/U_cms_$alg_fn test "ĐŸŅ€ĐžĐ˛ĐĩŅ€Đēа Đ´ĐžĐē҃ĐŧĐĩĐŊŅ‚Đ°, ĐŋОдĐŋĐ¸ŅĐ°ĐŊĐŊĐžĐŗĐž $alg, cms" { grep Veri [openssl "cms -verify -text -in $data_dir/cms_sign_$alg_fn.msg -out cms_verified.$suffix -CAfile $data_dir/cms$CA_dir_suffix/cacert.pem -certfile $username/cert.pem"] } 0 "Verification successful " test -createsfiles [list extracted_cert.pem.$suffix extracted_key.pem.$suffix] "Đ Đ°ĐˇĐąĐ¸Ņ€Đ°ĐĩĐŧ pkcs12 c аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ $alg" { openssl "pkcs12 -in $data_dir/U_pkcs12_$alg_fn/pkcs12.p12 -nodes -out dump.pem.$suffix -password pass:12345" set dump [getFile dump.pem.$suffix] set lextr [regexp -all -inline "\n-----BEGIN .*?\n-----END \[^\n\]+-----\n" $dump] list [llength $lextr] [expr {[lindex $lextr 0] eq "\n[getFile $data_dir/U_pkcs12_$alg_fn/cert.pem]"}] [expr {[lindex $lextr 1] eq "\n[openssl "pkcs8 -nocrypt -topk8 -in $data_dir/U_pkcs12_$alg_fn/seckey.pem"]"}] } 0 {2 1 1} } save_env2 {CRYPT_PARAMS} foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } if {[string length $crypt_param]} { set env(CRYPT_PARAMS) $crypt_param } else { if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} } set alg_fn [make_fn $enc_tuple] set username U_enc_$alg_fn test "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ Đ´ĐžĐē҃ĐŧĐĩĐŊŅ‚Đ° ĐŊа keyexchange $alg, smime" { set expected [getFile $data_dir/encrypt.dat] openssl "smime -decrypt -in $data_dir/enc_${alg_fn}.msg -recip $data_dir/U_enc_${alg_fn}/cert.pem -inkey $data_dir/U_enc_${alg_fn}/seckey.pem -out decrypt1.$alg_fn.$suffix" set result [getFile decrypt1.$alg_fn.$suffix] string eq $expected $result } 0 1 test "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ Đ´ĐžĐē҃ĐŧĐĩĐŊŅ‚Đ° ĐŊа keyexchange $alg, cms" { set expected [getFile $data_dir/encrypt.dat] openssl "cms -decrypt -in $data_dir/cms_enc_${alg_fn}.msg -recip $data_dir/U_cms_enc_${alg_fn}/cert.pem -inkey $data_dir/U_cms_enc_${alg_fn}/seckey.pem -out cms_decrypt1.$alg_fn.$suffix" set result [getFile cms_decrypt1.$alg_fn.$suffix] string eq $expected $result } 0 1 } restore_env2 {CRYPT_PARAMS} end_tests libengine-gost-openssl-3.0.2/tcl_tests/kbstrike.exe000077500000000000000000001760001446070765000224500ustar00rootroot00000000000000MZ˙˙¸@Øē´ Í!¸LÍ!This program cannot be run in DOS mode. $÷V]ŗ7mŗ7mŗ7m¨ĒķŊ7m¨ĒĮŪ7mēOū°7mŗ7lü7m¨ĒƐ7m¨Ēđ˛7mRichŗ7mPELņÛLYā  ŽJ!Ā@@…Y@,â( ´08PÁØŨ@Ā.textŦŽ `.rdataJ(Ā*˛@@.dataŦ-đÜ@Ā.rsrc´ ė@@.relocĀ 0î@BU‹ėƒė@Ąđ@3ʼnEøĮEāhpÁ@htÁ@EāPčƒÄ ‰Eă}Äth˜Á@čœƒÄ¸éũƒ}thđÁ@‹MāQčīƒÄ¸éÜĮE܍UÜRhčÂ@‹E ‹HQč¤ƒÄ ƒøt"˙Ā@PhđÂ@‹UāRčŠƒÄ ¸é–ÆEËĮE؍EØPhLÃ@‹M ‹QRčZƒÄ ƒøt"˙Ā@PhXÃ@‹EāPč_ƒÄ ¸éLŠM؈MË˙Ā@…Āu"˙Ā@Ph¸Ã@‹UāRč-ƒÄ ¸é‹EÜP˙ Ā@…Āu"˙Ā@PhÄ@‹MāQčũƒÄ ¸éęj jUĖRčĶƒÄ ĮEĖ ĮEÔjjjEĖPjh@h|Ä@˙Ā@‰Eüƒ}ü˙u"˙Ā@PhÄ@‹MāQč˜ƒÄ ¸é…jjUäRčnƒÄ ¸f‰EäĮEčšf‰MėŠUˈUōĮEĀEĀPjMäQ‹UüR˙Ā@…Āu˙Ā@PhđÄ@‹EāPč(ƒÄ ¸ ë‹MüQ˙Ā@‹UāR考Ä3Ā‹Mø3Íč4‹å]Ë˙U‹ėV‹uWƒĪ˙…öuč ĮčĀ ĮëDöF ƒt8Vč“V‹øčZVč.PčdƒÄ…ĀyƒĪ˙ë‹F…Āt PčuƒfYƒf ‹Į_^]Ãj hŪ@čŋ ƒMä˙3Ā‹u…ö•Ā…ĀučŖ ĮčF ƒČ˙ë öF @t ƒf ‹EäčË ÃVčš YƒeüVč<˙˙˙Y‰EäĮEüū˙˙˙čëԋuVčį YÃĖĖĖĖĖĖĖ‹T$ ‹L$…Ōti3ŠD$„Āuú€rƒ=x AtéW‹ųƒúr1÷؃át +҈ƒĮƒéuö‹ČÁāÁ‹ČÁāÁ‹ĘƒâÁétķĢ…Ōt ˆƒĮƒęuö‹D$_ËD$Ë˙U‹ėƒė ƒeāWjY3Ā}äķĢ_…öuč° ĮčS ƒČ˙ÉÃ9E tæVčSYĮEėI‰uč‰uā=˙˙˙?v ĮEä˙˙˙ë‰Eä˙uEā˙u˙u P˙UƒÄÉË˙U‹ėV‹uEPj˙u hÅ#@čp˙˙˙ƒÄ^]Ãj h°Ū@č4 3Ā‹u3˙;÷•Ā;Įuč ĮčŊƒČ˙ëK3Ā9} •Ā;Įt߉uVč Y‰}üVč !‹ØEPW˙u Vča"‰EäVSč!ƒÄĮEüū˙˙˙č ‹Eäč Ã˙učD YÃj hĐŪ@č¨ 3Ā3ö9u•Ā;ÆučĮč3ƒČ˙ë_čÄj [ÃPjčĪ YY‰uüč­ÃPč| Y‹øE PV˙uč•ÃPčĘ!‰Eäč…ÃPWčī ƒÄĮEüū˙˙˙č ‹Eäčf Ãč_ƒĀ PjčÚ YYÃj hđŪ@č 3˙‰}ä3Ā‹];ß•Ā;ĮučäĮč‡3Āë{3Ā‹u ;÷•Ā;ĮtŪ3Āf9>•Ā;ĮtŌčŊ/‰E;Įu čĒĮëɉ}üf9;u č•ĮjūEđPhđ@čÄ0ƒÄ ëĄP˙uVSčŊ,ƒÄ‰EäĮEüū˙˙˙č ‹EäčŸ Ã˙učßYË˙U‹ėV‹u…öuč8j^‰0čÜ‹Æë$h€˙u˙u č˙˙˙ƒÄ ‰…Āt3Āëč‹^]Ã; đ@uķÃé‹1‹˙U‹ėƒ=Čū@tčŽ7˙uč×5h˙čį2YY]Ãjhß@čÄ3ö95¨Au VVjV˙Ā@¸MZf9@t‰uäë6Ą<@¸@PEuęš f9ˆ@u܃¸t@vĶ3É9°č@•Á‰MäčĖB…Āujč]˙˙˙Yč@A…ĀujčL˙˙˙Yčę=‰uüč;…Āyjčá4Y˙Ā@Ŗ¤Ač);ŖÄū@čq:…Āyjčģ4Yč.8…Āyj čĒ4Yjč2Y;ÆtPč—4YĄAŖ AP˙5A˙5Ač5ø˙˙ƒÄ ‰Eā9uäuPč4čF4ë.‹Eė‹‹ ‰MÜPQč}6YYËeč‹E܉Eāƒ}äuPč4č%4ĮEüū˙˙˙‹EāčĩÃčķAé•ū˙˙‹˙U‹ėƒ}t-˙uj˙5| A˙ Ā@…ĀuVč:‹đ˙Ā@PčęY‰^]Ë˙U‹ėV‹uWVčFCYƒø˙tPĄ` Aƒūu ö€„u ƒūuö@DtjčCj‹øčCYY;ĮtVčCYP˙Ā@…Āu ˙Ā@‹øë3˙VčbB‹ÆÁø‹…` AƒæÁæYÆD0…˙t WčŧYƒČ˙ë3Ā_^]Ãjh0ß@čƒ‹]ƒûūuč„ƒ čiĮ ƒČ˙鄅Ûx;H Arč]ƒ čBĮ čåëŌ‹ÃÁø<…` A‹ķƒæÁ拞D0ƒātÆSč¨BYƒeü‹öD0t SčÕū˙˙Y‰EäëčđĮ ƒMä˙ĮEüū˙˙˙č ‹EäčË]SčCYË˙U‹ė‹E…ĀučĩĮčXƒČ˙]Ë@]Ë˙U‹ėV‹u‹F ¨ƒt¨t˙vč$ū˙˙f ÷û˙˙3ĀY‰‰F‰F^]Ë˙U‹ėSV‹u‹F ‹Č€á3ۀųu@Št9‹FW‹>+ø…˙~,WPVču˙˙˙YPč)KƒÄ ;Įu‹F „Āyƒāũ‰F ëƒN ƒË˙_‹Fƒf‰^‹Ã[]Ë˙U‹ėV‹u…öu Vč5Yë/Vč|˙˙˙Y…ĀtƒČ˙ë÷F @tVč ˙˙˙Pč•KY÷ØYĀë3Ā^]ÃjhPß@č¸3˙‰}ä‰}ÜjčĀMY‰}ü3ö‰uā;5 AƒĄ€ A°98t^‹ö@ ƒtVPVčÕYY3ŌB‰UüĄ€ A‹°‹H öÁƒt/9UuPčJ˙˙˙Yƒø˙t˙Eäë9}uöÁtPč/˙˙˙Yƒø˙u E܉}üčFë„3˙‹uāĄ€ A˙4°VčŪYYÃĮEüū˙˙˙čƒ}‹Eät‹EÜč9Ãjč*LYÃjč˙˙˙YË˙U‹ė‹EŖĖū@]Ë˙U‹ėė(Ąđ@3ʼnEüS‹]Wƒû˙tSč÷LYƒĨāü˙˙jL…äü˙˙jPčE÷˙˙…āü˙˙‰…Øü˙˙…0ũ˙˙ƒÄ ‰…Üü˙˙‰…āũ˙˙‰Üũ˙˙‰•Øũ˙˙‰Ôũ˙˙‰ĩĐũ˙˙‰ŊĖũ˙˙fŒ•øũ˙˙fŒėũ˙˙fŒČũ˙˙fŒ…Äũ˙˙fŒĨĀũ˙˙fŒ­ŧũ˙˙œ…đũ˙˙‹EM‰ôũ˙˙Į…0ũ˙˙‰…čũ˙˙‹Iü‰äũ˙˙‹M ‰āü˙˙‹M‰äü˙˙‰…ėü˙˙˙,Ā@j‹ø˙(Ā@…Øü˙˙P˙$Ā@…Āu…˙u ƒû˙tSčLY‹Mü_3Í[čŖų˙˙ÉË˙VjžĀVjčÅū˙˙ƒÄ V˙<Ā@P˙8Ā@^Ë˙U‹ė˙5Ėū@˙4Ā@…Āt]˙ā˙u˙u˙u˙u ˙uč¯˙˙˙Ė3ĀPPPPPčĮ˙˙˙ƒÄË˙U‹ė‹E3É;Íđ@tAƒų-rņHíƒųwj X]ËÍđ@]ÃD˙˙˙jY;ČĀ#ÁƒĀ]Ãč.9…Āu¸xņ@ÃĀÃč9…Āu¸|ņ@ÃƒĀ Ã‹˙U‹ėVčâ˙˙˙‹MQ‰č‚˙˙˙Y‹đčŧ˙˙˙‰0^]ø€ņ@ÃĄ AVj^…Āu¸ë;Æ}‹ÆŖ AjPč&KYYŖ€ A…ĀujV‰5 Ač KYYŖ€ A…ĀujX^Ã3Ōš€ņ@륀 A‰ ƒÁ ƒÂųô@|ęjū^3Ōšņ@W‹ÂÁø‹…` A‹úƒįÁį‹ƒø˙t;Æt…Āu‰1ƒÁ Bųđņ@|Î_3Ā^Ãčũ˙˙€=,AtčuK˙5€ Ač‚ų˙˙YË˙U‹ėV‹u¸€ņ@;đr"ūāķ@w‹Î+ČÁųƒÁQčŌIN €Yë ƒÆ V˙@Ā@^]Ë˙U‹ė‹Eƒø}ƒĀPčĨI‹E H €Y]ËE ƒĀ P˙@Ā@]Ë˙U‹ė‹Eš€ņ@;Ár=āķ@w` ˙˙˙+ÁÁøƒĀPčƒHY]ÃƒĀ P˙DĀ@]Ë˙U‹ė‹M‹E ƒų}` ˙˙˙ƒÁQčTHY]ÃƒĀ P˙DĀ@]ÃĖĖĖĖĖĖĖhđ@d˙5‹D$‰l$l$+āSVWĄđ@1Eü3ÅP‰eč˙uø‹EüĮEüū˙˙˙‰EøEđdŖÃ‹Mđd‰ Y__^[‹å]QÃĖĖĖĖĖĖĖ‹˙U‹ėƒėS‹] V‹s35đ@W‹ÆE˙ĮEô{ƒøūt ‹NĪ3 8č_ö˙˙‹N ‹FĪ3 8čOö˙˙‹Eö@f…‹MUč‰Sü‹[ ‰Eč‰Mėƒûūt_I[‹L†D†‰Eđ‹‰Eø…Ét‹×čD'ÆE˙…Āx@G‹Eø‹Øƒøūu΀}˙t$‹ƒøūt ‹NĪ3 8čÜõ˙˙‹N ‹VĪ3 :čĖõ˙˙‹Eô_^[‹å]ÃĮEôëɋM9csmāu)ƒ=| At h| AčSJƒÄ…Āt‹UjR˙| AƒÄ‹M ‹Učä&‹E 9X thđ@W‹Ķ‹Ččæ&‹E ‹Mø‰H ‹ƒøūt ‹NĪ3 8čFõ˙˙‹N ‹VĪ3 :č6õ˙˙‹Eđ‹H‹×čz&ēū˙˙˙9S „O˙˙˙hđ@W‹Ëč‘&é˙˙˙fīĀQS‹Áƒā…Āu‹ÂƒâÁčt7¤$ffAfA fA0fA@fAPfA`fAp‰€HuЅŌt7‹ÂÁčtëIfIHuöƒât‹Â3ÛÁęt‰IJuøƒātˆAHuú[XËØ÷ۃÃ+Ķ3ĀR‹ĶƒâtˆAJuúÁët‰IKuøZéU˙˙˙j ˙HĀ@Ŗx A3ĀË˙U‹ė‹Ef‹ƒĀf…Éuõ+EŅøH]Ë˙U‹ė‹EV‹ņÆF …Āucčģ4‰F‹Hl‰‹Hh‰N‹; Đü@t‹ ˆú@…HpučüR‰‹F;ų@t‹F‹ ˆú@…Hpuč[K‰F‹Fö@puƒHpÆF ë ‹‰‹@‰F‹Æ^]‹˙U‹ė‹9EuI‹jP;M u.č!FYY‰…Āu3Ā]ËEĮ‹ĀP˙u ˙7čöRƒÄ ëQčŒFƒÄ …ĀtŌ‰Ņ&3Ā@]Ë˙U‹ė÷E˙Vuˇu‹Æ%˙PčmVY…Āt‹Æë ˇEƒā߃č^]Ë˙U‹ė¸˙˙f;Et]é X]Ë˙U‹ėW˙u˙čãVˇø¸˙˙Yf;øtjWč2ZYY…ĀuÚf‹Į_]Ë˙U‹ėėHĄđ@3ʼnEü‹M‹EV‹u W3˙‰Øü˙˙@ũ˙˙‰… ũ˙˙‰ĩüü˙˙‰ũ˙˙Į…äü˙˙^‰Ŋāü˙˙‰ŊÜü˙˙‰ŊĐü˙˙‰Ŋ0ũ˙˙‰ŊĖü˙˙;÷učUų˙˙Įčøø˙˙ƒČ˙éT;Įtä˙uŧü˙˙č ū˙˙ˇƅũ˙˙‰Ŋ8ũ˙˙‰Ŋėü˙˙f;Į„ SjPčhYYY…ĀtN˙ĩ ũ˙˙˙8ũ˙˙˙ĩ ũ˙˙ĩ8ũ˙˙číū˙˙ˇĀYPčËū˙˙‹ĩüü˙˙YYƒÆˇjPč%YYY…Āuė‰ĩüü˙˙鎋ĩüü˙˙ˇj%Yf;Č…>f;N„&3˙‰Ŋ ũ˙˙‰Ŋ¸ü˙˙‰Ŋũ˙˙‰Ŋôü˙˙‰Ŋ(ũ˙˙‰Ŋđü˙˙ƅũ˙˙ƅũ˙˙ƅ/ũ˙˙ƅ?ũ˙˙ƅũ˙˙ƅ7ũ˙˙ƅ'ũ˙˙‰Ŋũ˙˙ƒÆˇ÷Ã˙u,ļÃPčhTY…Āt‹…(ũ˙˙˙…ôü˙˙kĀ DЉ…(ũ˙˙éʃûN„„ģƒû*tqƒûF„­ƒûItƒûLuuū…'ũ˙˙é˜ˇNƒų6ufƒ~4uƒÆ˙…ũ˙˙‰Ŋũ˙˙‰Ŋũ˙˙ëqƒų3u fƒ~2uƒÆë`ƒųdt[ƒųitVƒųotQƒųxtLƒųXuëEū…/ũ˙˙ë=ƒûht,ƒûlt ƒûwtū…?ũ˙˙ë&fƒ~luƒÆë•ū…'ũ˙˙ū…7ũ˙˙ë ū'ũ˙˙ū7ũ˙˙€Ŋ?ũ˙˙„īū˙˙€Ŋ/ũ˙˙‰ĩüü˙˙u‹…Øü˙˙‹‰…Ôü˙˙ƒĀ‰…Øü˙˙ë3ۀŊ7ũ˙˙‰øü˙˙ƅ?ũ˙˙uˇƒøSt ƅ7ũ˙˙ƒøCuƅ7ũ˙˙˙ˇ>ƒĪ ‰Ŋčü˙˙ƒ˙ntRƒ˙ctƒ˙{t˙ĩ ũ˙˙ĩ8ũ˙˙č¨ü˙˙ë˙ĩ ũ˙˙˙…8ũ˙˙čˆSˇĀYš˙˙‰…0ũ˙˙f;Č„ō ‹øü˙˙‹ĩüü˙˙‹ôü˙˙…Ét ƒŊ(ũ˙˙„ŧ €Ŋ/ũ˙˙uAƒ˙ct ƒ˙stƒ˙{u2‹…Ôü˙˙‹ƒĀ‰…Ôü˙˙ƒĀ‰…Øü˙˙‹@ü‰øü˙˙‰…đü˙˙ƒø‚ ƒ˙o„_ ƒ˙c„ØjdX;ø„K Žƒ˙g~Lƒ˙it!ƒ˙n…ũ€Ŋ/ũ˙˙‹…8ũ˙˙„ é. ‰…čü˙˙‹ø‹0ũ˙˙j-Xf;Ã…Cƅũ˙˙é?j-X3Ûf;…0ũ˙˙u ‹ũ˙˙f‰Cë j+Xf;…0ũ˙˙u!˙(ũ˙˙˙ĩ ũ˙˙˙…8ũ˙˙čLRˇĀY‰…0ũ˙˙ƒŊôü˙˙uƒ(ũ˙˙˙÷…0ũ˙˙˙…Œļ…0ũ˙˙PčaQY…Ātz‹…(ũ˙˙˙(ũ˙˙…Ātjfž…0ũ˙˙‹ũ˙˙˙…ũ˙˙f‰Y…āü˙˙P…@ũ˙˙PCSŊũ˙˙ĩäü˙˙č,ú˙˙ƒÄ …Ā„> ˙ĩ ũ˙˙˙…8ũ˙˙čĢQˇĀY‰…0ũ˙˙Š˙„t˙˙˙‹…ŧü˙˙‹€ŧ‹@0ˇ0ž0ũ˙˙‹Æ;Á…˙‹…(ũ˙˙˙(ũ˙˙…Ā„ë˙ĩ ũ˙˙˙…8ũ˙˙čNQˇĀ‰…0ũ˙˙‹…ũ˙˙f‰4X…āü˙˙P…@ũ˙˙PCSŊũ˙˙ĩäü˙˙čų˙˙ƒÄ…Ā„‘ ÷…0ũ˙˙˙…‹ļ…0ũ˙˙Pč>PY…Āty‹…(ũ˙˙˙(ũ˙˙…Āti‹…ũ˙˙f‹0ũ˙˙˙…ũ˙˙f‰ X…āü˙˙P…@ũ˙˙PCSŊũ˙˙ĩäü˙˙č ų˙˙ƒÄ …Ā„ ˙ĩ ũ˙˙˙…8ũ˙˙č‰PˇĀY‰…0ũ˙˙Š˙„u˙˙˙ƒŊũ˙˙„”jeXf;…0ũ˙˙tjEXf;…0ũ˙˙…x‹…(ũ˙˙˙(ũ˙˙…Ā„d‹ũ˙˙jeXf‰Y…āü˙˙P…@ũ˙˙PCSŊũ˙˙ĩäü˙˙čnø˙˙ƒÄ …Ā„€ ˙ĩ ũ˙˙˙…8ũ˙˙číOYˇĀj-Y‰…0ũ˙˙f;Ču.Q‹ũ˙˙Xf‰Y…āü˙˙P…@ũ˙˙PCSčø˙˙ƒÄ …Ā„1 ë j+Xf;…0ũ˙˙u3‹…(ũ˙˙˙(ũ˙˙…Āu!…(ũ˙˙ë˙ĩ ũ˙˙˙…8ũ˙˙čxOˇĀY‰…0ũ˙˙÷…0ũ˙˙˙…‹ļ…0ũ˙˙PčNY…Āty‹…(ũ˙˙˙(ũ˙˙…Āti‹…ũ˙˙f‹0ũ˙˙˙…ũ˙˙f‰ X…āü˙˙P…@ũ˙˙PCSŊũ˙˙ĩäü˙˙či÷˙˙ƒÄ …Ā„{ ˙ĩ ũ˙˙˙…8ũ˙˙ččNˇĀY‰…0ũ˙˙Š˙„u˙˙˙˙ĩ ũ˙˙˙8ũ˙˙˙ĩ0ũ˙˙čą÷˙˙ƒŊũ˙˙YY„/ €Ŋ/ũ˙˙…‹ĩäü˙˙‹ũ˙˙˙…ėü˙˙3Āt6Vf‰YčÚ<‹øY…˙„õF˙P˙ĩũ˙˙VW3öVčĮVƒÄ;Ætƒø„|ƒø"„s…ŧü˙˙Pž…'ũ˙˙W˙ĩøü˙˙HP˙5üü@˙4Ā@˙ĐWčĀë˙˙ƒÄé’…Éu˙…(ũ˙˙Į…ôü˙˙€Ŋ7ũ˙˙~ƅũ˙˙˙ĩ ũ˙˙˙8ũ˙˙˙ĩ0ũ˙˙‹ķčËö˙˙YYƒ˙ct˙đü˙˙ƒŊôü˙˙t‹…(ũ˙˙˙(ũ˙˙…Ā„Å˙ĩ ũ˙˙˙…8ũ˙˙č›MˇĐ¸˙˙Y‰•0ũ˙˙f;„ˆƒ˙ctRƒ˙suƒú r ƒú †pƒú u:ƒ˙{…bˇÂ‹Č3˙ƒáGĶį‹Üü˙˙Áčžžũ˙˙3Á…ø‹Ŋčü˙˙„1€Ŋ/ũ˙˙…ƒŊđü˙˙„a€Ŋũ˙˙„ēf‰ƒÃ‰øü˙˙é%˙˙˙‹Įƒčp„Mƒč„áū˙˙HH„Cƒč„(ú˙˙ƒčt3‹…0ũ˙˙f9…ōūũ˙˙€Ŋ/ũ˙˙…'‹…Ôü˙˙‰…Øü˙˙é€Ŋ7ũ˙˙~ƅũ˙˙j^X~f;Fu ~ƅũ˙˙˙‹ĩÜü˙˙…öu%h čš:Y‰…Üü˙˙…Ā„ĐĮ…Đü˙˙‹đh jVčīä˙˙ƒÄ j]Xf;uPZƒĮÆF 隋•¸ü˙˙鏷Āj-YƒĮf;Čupf…Ōtkˇj][f;Ųt`‹ÁƒĮf;ĐsëˇĘ‹Đ‰ũ˙˙f;Ņs*‹Á+ÂˇĀˇÚ‰… ũ˙˙‹Ëƒá˛Ōâ‹ÃÁč0C˙ ũ˙˙uæˇũ˙˙‹Áƒá˛ŌâÁč03Ōë‹ČƒáŗŌã‹ĐÁč0ˇj]Yf;Č…b˙˙˙fƒ?„닝øü˙˙‰Ŋüü˙˙‹Ŋčü˙˙écũ˙˙j+Xf;Ãu0˙(ũ˙˙u …Ét ƅ?ũ˙˙ë˙ĩ ũ˙˙˙…8ũ˙˙č$KˇØY‰0ũ˙˙j0Xf;Ã…Č˙ĩ ũ˙˙˙…8ũ˙˙čũJYˇØjx^‰0ũ˙˙f;ķtUjXXf;ÃtMĮ…ũ˙˙;ūt#ƒŊôü˙˙t˙(ũ˙˙uū…?ũ˙˙Į…čü˙˙oë\˙ĩ ũ˙˙˙8ũ˙˙Sč•ķ˙˙YYj0[éJ˙ĩ ũ˙˙˙…8ũ˙˙č…JƒŊôü˙˙ˇØY‰0ũ˙˙tƒ­(ũ˙˙ƒŊ(ũ˙˙}ū…?ũ˙˙‰ĩčü˙˙‹Ŋčü˙˙éƒĨũ˙˙R˙ĩđü˙˙…ũ˙˙SPč?OƒÄƒø"„s‹…ũ˙˙…ĀŽMü˙˙Ø)…đü˙˙‰øü˙˙é:ü˙˙ƒÆé2ü˙˙˙ĩ ũ˙˙˙8ũ˙˙RčŪō˙˙YY;ķ„a€Ŋ/ũ˙˙…Q˙…ėü˙˙ƒ˙c„B€Ŋũ˙˙t‹øü˙˙3Āf‰é)‹…øü˙˙Æéƅ'ũ˙˙‹0ũ˙˙j-Xf;Ãu ƅũ˙˙ëj+Xf;Ãu0˙(ũ˙˙u …Ét ƅ?ũ˙˙ë˙ĩ ũ˙˙˙…8ũ˙˙čPIYˇØ‰0ũ˙˙ƒŊũ˙˙„b€Ŋ?ũ˙˙…$ƒ˙xtxƒ˙pts÷Ã˙…úļÃPčYHY…Ā„čƒ˙ou-j8Xf;Æ׋…ũ˙˙‹ũ˙˙¤ÁÁ≅ũ˙˙‰ũ˙˙ëljj ˙ĩũ˙˙˙ĩũ˙˙čGQ‰…ũ˙˙‰•ũ˙˙ëI÷Ã˙…‡ļÃPčjHY…Āty‹…ũ˙˙‹ũ˙˙¤ÁÁāS‰…ũ˙˙‰ũ˙˙č/ņ˙˙ˇØY‰0ũ˙˙˙…ũ˙˙ˇÃƒč0™…ũ˙˙•ũ˙˙ƒŊôü˙˙t˙(ũ˙˙t4˙ĩ ũ˙˙˙…8ũ˙˙č+HˇØY‰0ũ˙˙éđū˙˙˙ĩ ũ˙˙˙8ũ˙˙Sč˙đ˙˙YY€Ŋũ˙˙„‹…ũ˙˙‹ũ˙˙÷؃Ņ÷Ų‰…ũ˙˙‰ũ˙˙éö€Ŋ?ũ˙˙…Úƒ˙xtJƒ˙ptE÷Ã˙…°ļÃPč÷FY…Ā„žƒ˙ouj8Xf;ƍ‹… ũ˙˙Áāë>‹… ũ˙˙kĀ ë3÷Ã˙uoļÃPč:GY…ĀtaÁĨ ũ˙˙Sčđ˙˙ˇØ‹… ũ˙˙Y‰0ũ˙˙˙…ũ˙˙ƒŊôü˙˙ˇËDЉ… ũ˙˙t˙(ũ˙˙t4˙ĩ ũ˙˙˙…8ũ˙˙čGˇØY‰0ũ˙˙é:˙˙˙˙ĩ ũ˙˙˙8ũ˙˙Sčįī˙˙YY€Ŋũ˙˙t÷ ũ˙˙ƒ˙FuƒĨũ˙˙ƒŊũ˙˙„J€Ŋ/ũ˙˙u>˙…ėü˙˙‹øü˙˙‹… ũ˙˙ƒŊũ˙˙t‹…ũ˙˙‰‹…ũ˙˙‰Cë€Ŋ'ũ˙˙t‰ëf‰‹ĩüü˙˙ū…ũ˙˙ƒÆ‰ĩüü˙˙ë>f;Ču f;NuƒÆ˙ĩ ũ˙˙˙…8ũ˙˙čKFˇĀYf‹ƒÆ‰…0ũ˙˙‰ĩüü˙˙f;Č…›¸˙˙f;…0ũ˙˙ufƒ>%…–‹…üü˙˙fƒxn……‹đˇf…Ā…ęī˙˙ëu€Ŋ7ũ˙˙~3Āf‰ëÆčāč˙˙Į ëUVVVVVč*č˙˙˙ĩ ũ˙˙Pč˛î˙˙Į…Ėü˙˙ë1čąč˙˙€Ŋũ˙˙Į t3Āf‰ëÆë˙ĩ ũ˙˙˙ĩ0ũ˙˙čuî˙˙YYƒŊĐü˙˙[u ˙ĩÜü˙˙čã˙˙YƒŊāü˙˙u ˙ĩũ˙˙čųâ˙˙Y¸˙˙f;…0ũ˙˙u*‹…ėü˙˙…Āu 8…ũ˙˙uƒČ˙€ŊČü˙˙t>‹Äü˙˙ƒapũë2ƒŊĖü˙˙učč˙˙Įčĩį˙˙€ŊČü˙˙t ‹…Äü˙˙ƒ`pũ‹…ėü˙˙‹Mü_3Í^čßā˙˙ÉË˙U‹ėV‹uVč ä˙˙Pč„MYY…Āt|č č˙˙ƒĀ ;đu3Āëčųį˙˙ƒĀ@;đu`3Ā@˙Đū@÷F uNSW<…Ôū@ƒ?ģu SčÕ2Y‰…ĀuFj‰F‰X‰F‰Fë ‹?‰~‰>‰^‰^N 3Ā_@[ë3Ā^]Ë˙U‹ėƒ}t'V‹u ÷F tVčˇã˙˙f ˙î˙˙ƒfƒ&ƒfY^]Ë˙U‹ėö@ @tƒxtP˙učMYYš˙˙f;Áuƒ˙]Ã˙]Ë˙U‹ėQöC @V‹đ‹‰Eüt ƒ{u‹E ëCƒ'ƒ} ~5‹Eˇ˙M P‹Ãč–˙˙˙ƒEƒ>˙Yuƒ?*uj?‹Ãč~˙˙˙Yƒ} Ѓ?u‹Eü‰^ÉË˙U‹ėėxĄđ@3ʼnEü‹ESV‹u 3ÛW‹}˙u¨û˙˙‰…Üû˙˙‰Ŋāû˙˙‰ŧû˙˙‰øû˙˙‰Đû˙˙‰ôû˙˙‰Øû˙˙‰¸û˙˙‰Ôû˙˙čėę˙˙čæ˙˙‰…œû˙˙9Üû˙˙u*čûå˙˙Įčžå˙˙8´û˙˙t ‹…°û˙˙ƒ`pũƒČ˙éô ;ķtŌˇ3Ō‰čû˙˙‰ėû˙˙‰Äû˙˙‰äû˙˙f;Ë„ą j[ķƒŊčû˙˙‰ĩĀû˙˙Œ™ AāfƒøXwˇÁž€čĶ@ƒāë3Āž„ÂÔ@jÁøZ‰… û˙˙;‡ ˙$…šB@3ƒôû˙˙˙‰…˜û˙˙‰…¸û˙˙‰…Đû˙˙‰…Øû˙˙‰…øû˙˙‰…Ôû˙˙éį ˇÁƒč tJƒčt6ƒčt%+Ãtƒč…Č ƒøû˙˙éŧ ƒøû˙˙é° ƒøû˙˙é¤ øû˙˙€é• øû˙˙éŠ fƒų*u,ƒĮ‰Ŋāû˙˙‹ü‰ŊĐû˙˙…˙‰j ƒøû˙˙÷Đû˙˙éX ‹…Đû˙˙kĀ ˇÉDЉ…Đû˙˙é= ƒĨôû˙˙é1 fƒų*u&ƒĮ‰Ŋāû˙˙‹ü‰Ŋôû˙˙…˙‰ ƒôû˙˙˙é ‹…ôû˙˙kĀ ˇÉDЉ…ôû˙˙éęˇÁƒøItWƒøhtFƒøltƒøw…΁øû˙˙éĀfƒ>luķøû˙˙‰ĩĀû˙˙éŖƒøû˙˙é—ƒøû˙˙ 鋡ƒø6ufƒ~4uƒÆøû˙˙€‰ĩĀû˙˙édƒø3ufƒ~2uƒÆĨøû˙˙˙˙˙‰ĩĀû˙˙é@ƒød„7ƒøi„.ƒøo„%ƒøu„ƒøx„ƒøX„ ƒĨ û˙˙‹…Üû˙˙Qĩčû˙˙Į…Ôû˙˙čü˙˙éáˇÁƒød/„ĀƒøSt~ƒčAt+ÃtY+Ãt+Å߃Á Į…˜û˙˙‰äû˙˙ƒøû˙˙@ƒŊôû˙˙üû˙˙¸‰đû˙˙‰…ėû˙˙’Į…ôû˙˙éė÷…øû˙˙0…Čƒøû˙˙ éŧ÷…øû˙˙0uƒøû˙˙ ‹ôû˙˙ƒû˙uģ˙˙˙ƒĮö…øû˙˙ ‰Ŋāû˙˙‹ü‰Ŋđû˙˙„÷…˙u Ąũ@‰…đû˙˙ƒĨėû˙˙‹ĩđû˙˙…ÛŽŠ„Ā„¨û˙˙ļĀQPčuKYY…ĀtFF˙…ėû˙˙9ėû˙˙|ĐéÛƒčX„õ+Ä”+„öū˙˙+Ã…ēˇƒĮ3öFö…øû˙˙ ‰ĩÔû˙˙‰Ŋāû˙˙‰…¤û˙˙tBˆ…Čû˙˙…¨û˙˙P‹…¨û˙˙ƅÉû˙˙˙°Ŧ…Čû˙˙P…üû˙˙Pč˛IƒÄ…Āy‰ĩ¸û˙˙ëf‰…üû˙˙…üû˙˙‰…đû˙˙‰ĩėû˙˙é6‹ƒĮ‰Ŋāû˙˙…Āt:‹H…Ét3÷…øû˙˙ŋ‰đû˙˙t™+ÂĮ…Ôû˙˙éņƒĨÔû˙˙éįĄũ@‰…đû˙˙Pč HYéĐƒøpø„āƒøeŒžƒøgŽéũ˙˙ƒøitqƒønt(ƒøo…ĸö…øû˙˙€Į…äû˙˙taøû˙˙ëU‹7ƒĮ‰Ŋāû˙˙čH…Ā„cö…øû˙˙ t f‹…čû˙˙f‰ë‹…čû˙˙‰Į…¸û˙˙éôƒøû˙˙@Į…äû˙˙ ‹øû˙˙÷Á€„§‹‹WƒĮéĶufƒŊäû˙˙gu]Į…ôû˙˙ëQ9…ôû˙˙~‰…ôû˙˙Ŋôû˙˙Ŗ~7‹ĩôû˙˙Æ]Vč1+Y‰…Äû˙˙…Āt‰…đû˙˙‰ĩėû˙˙‹Øë Į…ôû˙˙Ŗ‹‹54Ā@ƒĮ‰…û˙˙‹Gü‰…”û˙˙…¨û˙˙P˙ĩ˜û˙˙ž…äû˙˙˙ĩôû˙˙‰Ŋāû˙˙P˙ĩėû˙˙…û˙˙SP˙5øü@˙Ö˙ЋŊøû˙˙ƒÄį€tƒŊôû˙˙u…¨û˙˙PS˙5ũ@˙Ö˙ĐYYfƒŊäû˙˙gu…˙u…¨û˙˙PS˙5ũ@˙Ö˙ĐYY€;-uøû˙˙C‰đû˙˙Séū˙˙Į…ôû˙˙‰•ŧû˙˙ë$ƒčs„iü˙˙+ÄŒū˙˙ƒč…ģĮ…ŧû˙˙'ö…øû˙˙€Į…äû˙˙„lū˙˙j0Xf‰…Ėû˙˙‹…ŧû˙˙ƒĀQf‰…Îû˙˙‰Øû˙˙éGū˙˙÷Á…Mū˙˙ƒĮöÁ t‰Ŋāû˙˙öÁ@tŋGüëˇGü™ë‹GüöÁ@t™ë3Ō‰Ŋāû˙˙öÁ@t…Ō|…Ās÷؃Ō÷ځøû˙˙÷…øû˙˙‹ú‹Øu3˙ƒŊôû˙˙} Į…ôû˙˙ëƒĨøû˙˙÷¸9…ôû˙˙~‰…ôû˙˙‹Ã Įu!…Øû˙˙ĩûũ˙˙‹…ôû˙˙˙ôû˙˙…Ā‹Ã Įt-‹…äû˙˙™RPWSčqGƒÁ0‰Œû˙˙‹Ø‹úƒų9~ŧû˙˙ˆNëŊ…ûũ˙˙+ÆF÷…øû˙˙‰…ėû˙˙‰ĩđû˙˙t_…Āt‹Æ€80tT˙đû˙˙‹…đû˙˙˙…ėû˙˙Æ0ë=…˙u Ąũ@‰…đû˙˙‹…đû˙˙Į…Ôû˙˙ë Kfƒ8tƒĀ…Ûuō+…đû˙˙Ņø‰…ėû˙˙ƒŊ¸û˙˙…¨‹…øû˙˙¨@t+Štj-ë¨tj+ë¨tj Yf‰Ėû˙˙Į…Øû˙˙‹ŊĐû˙˙+Ŋėû˙˙+ŊØû˙˙‰Ŋäû˙˙¨ u$ë‹…Üû˙˙j ĩčû˙˙Oč‹õ˙˙ƒŊčû˙˙˙Yt…˙Ū˙ĩØû˙˙‹Ŋœû˙˙‹Üû˙˙…Ėû˙˙P…čû˙˙čˆõ˙˙ö…øû˙˙YYt/ö…øû˙˙u&‹Ŋäû˙˙ëj0ĩčû˙˙‹ÃOč-õ˙˙ƒŊčû˙˙˙Yt…˙âƒŊÔû˙˙uk‹ėû˙˙…Û~a‹Ŋđû˙˙…¨û˙˙P‹…¨û˙˙˙°Ŧ…¤û˙˙WPKč5DƒÄ‰…Œû˙˙…Ā~$˙ĩ¤û˙˙‹…Üû˙˙ĩčû˙˙čÁô˙˙ŊŒû˙˙Y…Û°ë.ƒčû˙˙˙ë%˙ĩėû˙˙‹Ŋœû˙˙˙ĩđû˙˙‹Üû˙˙…čû˙˙čˇô˙˙YYƒŊčû˙˙|3ö…øû˙˙t*‹Ŋäû˙˙ë‹…Üû˙˙j ĩčû˙˙OčXô˙˙ƒŊčû˙˙˙Yt…˙ۃŊÄû˙˙t˙ĩÄû˙˙čæÕ˙˙ƒĨÄû˙˙Y‹ĩĀû˙˙ˇ‰…äû˙˙f…Āt/‹• û˙˙‹Ŋāû˙˙‹Čékõ˙˙čÛ˙˙ĮčĩÚ˙˙€Ŋ´û˙˙éõ˙˙€Ŋ´û˙˙t ‹…°û˙˙ƒ`pũ‹…čû˙˙‹Mü_^3Í[čŌĶ˙˙ÉÐJ:@48@f8@Ã8@9@9@c9@k:@‹˙U‹ėƒėĄô A3ŌSV‹u ‰Eü‰Uô‰Uø‰UđëƒÆfƒ> t÷ˇƒøat0ƒørt#ƒøwtčpÚ˙˙ĮčÚ˙˙3Āéaģë 3ۃMüë ģ ƒMüƒÆˇ3ÉAWf;„֍yē@…É„ˇĀƒøS“tƒč „öƒč tRHtCƒčt-ƒč t!ƒč…Ą9Eø…ĖĮEøƒËéà ßéŧöÃ@…­ƒË@éĢĮEđé™öÃ…‹EüƒãūƒāüƒË Į‰Eü逃}øutĮEøƒË ënƒčTtZƒčtEHt0ƒč tƒč…÷ÃĀuE ÚëGƒ}ôu;eü˙ŋ˙˙ĮEôë1ƒ}ôu% UüĮEôë÷ÃĀuË€ë¸…Øt3Éë ؃Æˇf…Ā…Üū˙˙ƒ}đ„ j _ëƒÆf9>tøjVh\Å@čŲLƒÄ …Ā…ˆƒÆëƒÆf9>tøfƒ>=uuƒÆf9>tøjhdÅ@VčLƒÄ …Āu ƒÆ ËëAjhpÅ@VčéKƒÄ …Āu ƒÆËë"jh„Å@VčĘKƒÄ …ĀuƒÆËëƒÆfƒ> t÷3˙f9>tčKØ˙˙Įčî×˙˙ëh€˙uE S˙uPč|JƒÄ…Āt3Āë ‹E˙Đū@‹Mü‰H ‹M ‰x‰8‰x‰x‰H_^[ÉÃjhxß@čōŲ˙˙3Û3˙‰}äjčû"Y‰]ü3ö‰uā;5 AĘĄ€ A°9t[‹‹@ ¨ƒuHŠ€uAFũƒøwFPč÷!Y…Ā„”Ą€ A˙4°VčįØ˙˙YYĄ€ A‹°ö@ ƒt PVč>Ų˙˙YYF둋ø‰}äëcj8čŗ"Y‹ € A‰ą;ÃtNh Ą€ A‹°ƒĀ P˙LĀ@…ĀĄ€ Au˙4°čÆŅ˙˙YĄ€ A‰°ë‹°ƒĀ P˙@Ā@Ą€ A‹<°‰}ä‰_ ;ûtg €‰_‰_‰‰_ƒO˙ĮEüū˙˙˙č ‹ĮčŲ˙˙Ë}äjč !YÃĖĖĖĖĖĖĖĖĖĖĖSVW‹T$‹D$‹L$URPQQh`G@d˙5Ąđ@3ĉD$d‰%‹D$0‹X‹L$,3‹p ƒūūt;‹T$4ƒúūt;ōv.4v\ŗ‹ ‰H ƒ{uĖh‹Cč’Kš‹Cč¤Kë°dƒÄ_^[ËL$÷A¸t3‹D$‹H3ČčĪ˙˙U‹h˙p ˙p˙pč>˙˙˙ƒÄ ]‹D$‹T$‰¸ÃU‹L$‹)˙q˙q˙q(č˙˙˙ƒÄ ]ÂUVWS‹ę3Ā3Û3Ō3ö3˙˙Ņ[_^]Ëę‹ņ‹ÁjčīJ3Ā3Û3É3Ō3˙˙æU‹ėSVWjRhH@Qč t_^[]ÃU‹l$RQ˙t$čĩū˙˙ƒÄ ]‹˙U‹ėė(Ŗč˙@‰ ä˙@‰ā˙@‰Ü˙@‰5Ø˙@‰=Ô˙@fŒAfŒ ô˙@fŒĐ˙@fŒĖ˙@fŒ%Č˙@fŒ-Ä˙@œø˙@‹EŖė˙@‹EŖđ˙@EŖü˙@‹…āü˙˙Į8˙@Ąđ˙@Ŗėū@Įāū@ ĀĮäū@Ąđ@‰…Øü˙˙Ąđ@‰…Üü˙˙˙,Ā@Ŗ0˙@jčëYj˙(Ā@h”Å@˙$Ā@ƒ=0˙@ujčĮYh Ā˙<Ā@P˙8Ā@ÉË˙U‹ė‹E‹8csmāu*ƒxu$‹@= “t=!“t="“t=@™uč“I3Ā]Âh(I@˙(Ā@3ĀË˙U‹ėhŦÅ@˙XĀ@…ĀthœÅ@P˙TĀ@…Āt˙u˙Đ]Ë˙U‹ė˙učČ˙˙˙Y˙u˙\Ā@ĖjčåYÃjčYË˙Vč˛ ‹đVč‡KVčĖŅ˙˙VčlKVčWKVčLIVč5IƒÄ^Ë˙U‹ėV‹u3Āë…Āu‹…Ét˙҃Æ;u rė^]Ë˙U‹ėƒ=p Athp Ač!Y…Āt ˙u˙p AYčb5h4Á@hÁ@čĄ˙˙˙YY…ĀuTVWhaU@čML¸Á@žÁ@Y‹ø;Æs‹…Āt˙ЃĮ;ūrņƒ=t A_^tht Ačš Y…Āt jjj˙t A3Ā]Ãj h˜ß@čÉÔ˙˙jčŲYƒeü3Ā@94A„ØŖ0AŠEĸ,Aƒ} … ˙5h A‹54Ā@˙֋؉]ЅÛth˙5d A˙֋ø‰}ԉ]܉}؃ī‰}Ô;ûrKčU 9tí;ûr>˙7˙֋ØčB ‰˙Ķ˙5h A˙֋Ø˙5d A˙Ö9]Üu9EØt‰]܉]ЉE؋ø‰}ԋ]ĐëĢĮEä8Á@}äDÁ@s‹E䋅Āt˙ЃEäëæĮEāHÁ@}āLÁ@s‹Eā‹…Āt˙ЃEāëæĮEüū˙˙˙č ƒ}u)Į4AjčņY˙učŊũ˙˙ƒ}tjčÛYÃčÛĶ˙˙Ë˙U‹ėjj˙uč¯ū˙˙ƒÄ ]Ë˙U‹ėjj˙uč™ū˙˙ƒÄ ]Ãjjjč‰ū˙˙ƒÄ Ãjjjčzū˙˙ƒÄ Ë˙U‹ėčé˙uč2Yh˙č¯˙˙˙Ė‹˙U‹ė3Ā‹M; ÅHÎ@t @ƒørî3Ā]ËÅLÎ@]Ë˙U‹ėėüĄđ@3ʼnEüSV‹uWVčš˙˙˙‹ø3ÛY‰Ŋū˙˙;û„ljč"MYƒø„jčMY…Āu ƒ=đ@„îūü„6h„Ī@hŋ8AWč{LƒÄ …Ā…¸hžjAVSfŖrA˙hĀ@ģû…ĀuhTĪ@SVčCLƒÄ …Āt 3ĀPPPPPč”Ī˙˙VčđÔ˙˙@Yƒø=Āu ĮFd†ë.=’Āu ĮFdŠë=ĩĀu ĮFdë=´ĀuĮFdŽ˙vdj˙ŌY‰~dëƒ`Q˙ŌY‰^`[ƒČ˙_^]ÃĖĖĖ‹˙V‹5Äū@W3˙…öuƒČ˙éfƒø=tGVčfŌ˙˙YtFˇf…ĀuæSjGWč-‹ØYY‰A…ÛuƒČ˙ëe‹5Äū@ë5Vč.Ō˙˙fƒ>=Yxt"jWčúYY‰…ĀtAVWPčFIƒÄ …ĀuIƒÃ4~fƒ>uÅ˙5Äū@čĐĮ˙˙ƒ%Äū@ƒ#Į` A3ĀY[_^Ã˙5AčĒĮ˙˙ƒ%AƒČ˙ëä3ĀPPPPPčNĖ˙˙Ė‹˙U‹ėQV3ŌW‹} ‰‹ņĮ9Ut ‹MƒE‰1fƒ8"u‹} 3ɅŌ”Áj"ƒĀ‹ŅYë˙…öt f‹f‰ƒÆˇƒĀf…Ét;…ŌuČfƒų tfƒų uŧ…öt3Éf‰Nūƒeü3Ōf9„Ŏƒų tƒų u ƒĀëîƒčëÚf9„Ĩ9Ut ‹MƒE‰1˙3˙G3ŌëƒĀBfƒ8\töfƒ8"u8öÂuƒ}üt fƒx"uƒĀë 3É3˙9Mü”Á‰MüŅęëJ…öt j\Yf‰ƒÆ˙…Ōuėˇf…Ét$9Uüu ƒų tƒų t…˙t …ötf‰ƒÆ˙ƒĀ끅öt3Éf‰ƒÆ˙‹} é0˙˙˙‹E;Ât‰˙_^ÉË˙U‹ėQQSVWhž`AV3Ā3ÛSfŖh A˙hĀ@Ą¤A‰5(A;Ãt‹øf9u‹ūEüPS]ø3ɋĮč[ū˙˙‹]üYYû˙˙˙?sJ‹Møų˙˙˙s?YĀÉ;Ár4Pčz‹đY…öt'EüP žV]ø‹Įčū˙˙‹EüHYŖAY‰5A3ĀëƒČ˙_^[ÉË˙V˙pĀ@‹đ3É;ņu3Ā^Ãf9tƒĀf9uøƒĀf9uđS+ƍXWSč ‹øY…˙u V˙lĀ@‹Į_[^ÃSVWč/#ƒÄ ëæ‹˙U‹ėƒėLVE´P˙|Ā@j@j ^VčYY3É;ÁuƒČ˙鍐Ŗ` A‰5H A;Âs6ƒĀƒHû˙fĮ@˙ ‰HfĮ@ Æ@! ‰H3ˆH/‹5` AƒĀ@PûÆ;ÖrÍSWf9Mæ„‹Eč;Á„‹ƒĀ‰EüÞ‰Eø;Ū|‹Ū9H A}kŋd Aj@j čsYY…ĀtQƒH A ˆ‰;Ás1ƒĀƒHû˙ƒ`€`€ƒ`3fĮ@˙ fĮ@ Æ@/‹ƒĀ@΍Pû;ŅrԃĮ9H A|ĸë‹H A3˙…Û~r‹Eø‹ƒø˙t\ƒøūtW‹MüŠ öÁtMöÁu P˙xĀ@…Āt=‹÷ƒæ‹ĮÁøÁæ4…` A‹Eø‹‰‹EüŠˆFh F P˙LĀ@…Ā„ŧ˙FƒEøG˙Eü;û|Ž3ۋķÁæ5` A‹ƒø˙t ƒøūt€N€ëqÆF…ÛujöXë C˙÷؃ĀõP˙dĀ@‹øƒ˙˙tB…˙t>W˙xĀ@…Āt3%˙‰>ƒøu€N@ë ƒøu€Nh F P˙LĀ@…Āt,˙Fë €N@Įū˙˙˙CƒûŒh˙˙˙˙5H A˙tĀ@3Ā_[^ÉÃČ˙ëö‹˙V¸€Ū@ž€Ū@W‹ø;Æs‹…Āt˙ЃĮ;ūrņ_^Ë˙V¸ˆŪ@žˆŪ@W‹ø;Æs‹…Āt˙ЃĮ;ūrņ_^Ãj˙0Ā@Ã˙„Ā@‹˙V˙5Dô@˙ˆĀ@‹đ…öu˙5p A˙4Ā@‹đV˙5Dô@˙ŒĀ@‹Æ^ÃĄ@ô@ƒø˙tP˙5x A˙4Ā@˙Ѓ @ô@˙ĄDô@ƒø˙tP˙Ā@ƒ Dô@˙émjh¸ß@čzÉ˙˙hXĐ@˙XĀ@‹uĮF\¸Ī@ƒf3˙G‰~‰~pƆČCƆKCĮFhhõ@j čSYƒeü˙vh˙”Ā@ĮEüū˙˙˙č>j č2Y‰}ü‹E ‰Fl…ĀuĄĐü@‰Fl˙vlčMYĮEüū˙˙˙čč0É˙˙Ã3˙G‹uj čYÃj čYË˙VW˙Ā@˙5@ô@‹øčÄū˙˙˙Ћđ…öuNhjč>‹đYY…öt:V˙5@ô@˙5t A˙4Ā@˙ЅĀtjVčøū˙˙YY˙œĀ@ƒN˙‰ë VčÁ˙˙Y3öW˙˜Ā@_‹Æ^Ë˙Vč˙˙˙‹đ…öujčųô˙˙Y‹Æ^Ãjhāß@č3Č˙˙‹u…ö„ø‹F$…ĀtPčļĀ˙˙Y‹F,…ĀtPč¨Ā˙˙Y‹F4…ĀtPčšĀ˙˙Y‹F<…ĀtPčŒĀ˙˙Y‹F@…ĀtPč~Ā˙˙Y‹FD…ĀtPčpĀ˙˙Y‹FH…ĀtPčbĀ˙˙Y‹F\=¸Ī@tPčQĀ˙˙Yj čÅYƒeü‹~h…˙tW˙ Ā@…Āu˙hõ@tWč$Ā˙˙YĮEüū˙˙˙čWj čŒYĮEü‹~l…˙t#Wč?Y;=Đü@t˙øû@t ƒ?uWčŧYĮEüū˙˙˙čVčĖŋ˙˙YčpĮ˙˙‹uj č\YËuj čPYË˙WhXĐ@˙XĀ@‹ø…˙u č4ũ˙˙3Ā_ÃV‹5TĀ@h”Đ@W˙ÖhˆĐ@WŖl A˙Öh|Đ@WŖp A˙ÖhtĐ@WŖt A˙փ=l A‹5ŒĀ@Ŗx Atƒ=p At ƒ=t At…Āu$ĄˆĀ@Ŗp AĄĀ@Įl AU@‰5t AŖx A˙„Ā@ŖDô@ƒø˙„Á˙5p AP˙օĀ„°č‚đ˙˙˙5l A‹50Ā@˙Ö˙5p AŖl A˙Ö˙5t AŖp A˙Ö˙5x AŖt A˙ÖŖx AčŖ …Ātc‹=4Ā@hQW@˙5l A˙×˙ĐŖ@ô@ƒø˙tDhjčn‹đYY…öt0V˙5@ô@˙5t A˙×˙ЅĀtjVč,ü˙˙YY˙œĀ@ƒN˙‰3Ā@ëč×û˙˙3Ā^_Ãjhj˙¤Ā@3ɅĀ•ÁŖ| A‹ÁË˙U‹ėƒėĄđ@ƒeøƒeüSWŋNæ@ģģ˙˙;Įt …Ãt ÷ĐŖđ@ëeVEøP˙´Ā@‹uü3uø˙°Ā@3đ˙œĀ@3đ˙ŦĀ@3đEđP˙¨Ā@‹Eô3Eđ3đ;÷užOæ@ģë…ķu ‹Æ GÁā đ‰5đ@÷։5đ@^_[ÉË˙U‹ė‹EVW…ĀxY;H AsQ‹ČÁų‹đƒæ<` A‹Áæƒ<˙u5ƒ=đ@S‹] uƒčtHtHuSjôëSjõëSjö˙¸Ā@‹‰3Ā[ëčkÂ˙˙Į čsÂ˙˙ƒ ƒČ˙_^]Ë˙U‹ė‹MS3ÛVW;Ë|[; H AsS‹ÁÁø‹ņƒæ<…` A‹ÁæöD0t6ƒ<0˙t0ƒ=đ@u+ËtItIuSjôëSjõëSjö˙¸Ā@‹ƒ ˙3ĀëčåÁ˙˙Į číÁ˙˙‰ƒČ˙_^[]Ë˙U‹ė‹EƒøūučŅÁ˙˙ƒ čļÁ˙˙Į ƒČ˙]ÅĀx;H Arč­Á˙˙ƒ č’Á˙˙Į č5Á˙˙ëՋČÁų‹ ` AƒāÁāöDt͋]Ãj hā@č`Ã˙˙‹}‹ĮÁø‹÷ƒæÁæ4…` AĮEä3Û9^u5j čK Y‰]ü9^uh F P˙LĀ@…Āu‰]ä˙FĮEüū˙˙˙č09]ät‹ĮÁøƒįÁį‹…` AD8 P˙@Ā@‹Eäč!Ã˙˙Ã3ۋ}j č YË˙U‹ė‹E‹ČƒāÁų‹ ` AÁāD P˙DĀ@]Ãjh(ā@čšÂ˙˙ƒMä˙3˙‰}Üj čß Y…ĀuƒČ˙éaj č Y‰}ü‰}؃˙@;‹4Ŋ` A…ö„š‰uā‹Ŋ` A;đƒ–öFu[ƒ~u8j čD Y3ÛC‰]üƒ~uh F P˙LĀ@…Āu‰]Üë˙Fƒeüč(ƒ}Üu^ S˙@Ā@öFtS˙DĀ@ƒÆ@냋}؋uāj č YÃ}ÜuæÆFƒ˙+4Ŋ` AÁū‹ĮÁāđ‰uäƒ}ä˙uyGé,˙˙˙j@j č, YY‰Eā…Āta Ŋ` A‰ƒH A ‹Â;ÂsÆ@ƒ˙Æ@ ƒ`ƒĀ@‰EāëŨÁį‰}ä‹ĮÁø‹ĪƒáÁá‹…` AÆDWčČũ˙˙Y…ĀuƒMä˙ĮEüū˙˙˙č ‹Eäč\Á˙˙Ãj čM YË˙U‹ė¸äčN=Ąđ@3ʼnEü‹E V‹uW3˙‰…4å˙˙‰Ŋ8å˙˙‰Ŋ0å˙˙9}u3ĀéŽ;ĮučŅž˙˙‰8衞˙˙ĮčZž˙˙ƒČ˙é‹‹ÆÁø‹ūS…` A‹ƒįÁįŠL8$ÉĐų‰$å˙˙ˆ?å˙˙€ųt€ųu'‹M÷ŅöÁučsž˙˙ƒ čXž˙˙ĮčûŊ˙˙éöD8 tjjjVč;ƒÄVčå#Y…Ā„™‹öD€„ŒčŊ÷˙˙‹@l3É9H… å˙˙”ÁP‹˙4‹ņ˙ÄĀ@3É;Á„`;ņt 8?å˙˙„P˙ĀĀ@‹4å˙˙‰… å˙˙3‰…,å˙˙9E†#‰…@å˙˙Š…?å˙˙„Ā…gŠ ‹ĩ$å˙˙3Ā€ų ”‰…å˙˙‹Įƒx8tŠP4ˆUôˆMõƒ`8jEôPëKžÁPč 'Y…Āt:‹4å˙˙+ËM3Ā@;ȆĨj…Då˙˙SPč&ƒÄ ƒø˙„’C˙…@å˙˙ëjS…Då˙˙Pčk&ƒÄ ƒø˙„n3ĀPPjMôQjDå˙˙QP˙ĩ å˙˙C˙…@å˙˙˙ŧĀ@‹đ…ö„=j…,å˙˙PVEôP‹…$å˙˙‹˙4˙`Ā@…Ā„ ‹…@å˙˙‹0å˙˙Á‰…8å˙˙9ĩ,å˙˙ŒöƒŊå˙˙„Íj…,å˙˙PjEôP‹…$å˙˙‹ÆEô ˙4˙`Ā@…Ā„ąƒŊ,å˙˙Œ°˙…0å˙˙˙…8å˙˙éƒ<t<u!ˇ33Ƀū ”ÁƒÃƒ…@å˙˙‰ĩDå˙˙‰å˙˙<t<uR˙ĩDå˙˙č˜8Yf;…Då˙˙…Iƒ…8å˙˙ƒŊå˙˙t)j XP‰…Då˙˙čk8Yf;…Då˙˙…˙…8å˙˙˙…0å˙˙‹E9…@å˙˙‚ųũ˙˙鋊˙…8å˙˙ˆT4‹‰D8éī3ɋöD8€„Ą€Ŋ?å˙˙‰Då˙˙…¨‹4å˙˙9M†ũ‹Ë3ö+4å˙˙…Hå˙˙;Ms&ŠCA‰ å˙˙€ú u ˙…0å˙˙Æ @Fˆ@Fū˙rՋđ…Hå˙˙+đj…(å˙˙PV…Hå˙˙P‹…$å˙˙‹˙4˙`Ā@…Ā„C‹…(å˙˙…8å˙˙;ÆŒ;‹Ã+…4å˙˙;E‚l˙˙˙é%€Ŋ?å˙˙…Í‹4å˙˙9M†HƒĨ@å˙˙‹Ë+4å˙˙j…Hå˙˙^;MsCˇŪΉ å˙˙ƒú uĩ0å˙˙j [f‰‹ å˙˙Æĩ@å˙˙ĩ@å˙˙f‰ƁŊ@å˙˙ūr¸‹đ…Hå˙˙+đj…(å˙˙PV…Hå˙˙P‹…$å˙˙‹˙4˙`Ā@…Ā„i‹…(å˙˙…8å˙˙;ÆŒa‹Ã+…4å˙˙;E‚G˙˙˙éK‹…4å˙˙‰…,å˙˙9M†u‹,å˙˙ƒĨ@å˙˙+4å˙˙j…Hų˙˙^;Ms;‹•,å˙˙ˇĩ,å˙˙΃ú uj [f‰Æĩ@å˙˙ĩ@å˙˙f‰ƁŊ@å˙˙¨rĀ3öVVhU đë˙˙QHų˙˙+Á™+ÂŅøP‹ÁPVhéũ˙ŧĀ@‹Ø;Ū„—j…(å˙˙P‹Ã+ÆP„5đë˙˙P‹…$å˙˙‹˙4˙`Ā@…Āt ĩ(å˙˙;ŪËë ˙Ā@‰…Då˙˙;Ū\‹…,å˙˙+…4å˙˙‰…8å˙˙;E‚ ˙˙˙ë?Q(å˙˙Q˙u˙ĩ4å˙˙˙48˙`Ā@…Āt‹…(å˙˙ƒĨDå˙˙‰…8å˙˙ë ˙Ā@‰…Då˙˙ƒŊ8å˙˙ulƒŊDå˙˙t-j^9ĩDå˙˙učy¸˙˙Į 聸˙˙‰0ë?˙ĩDå˙˙腸˙˙Yë1‹…$å˙˙‹öD@t‹…4å˙˙€8u3Āë$č9¸˙˙ĮčA¸˙˙ƒ ƒČ˙ë ‹…8å˙˙+…0å˙˙[‹Mü_3Í^č ą˙˙ÉÃjhPā@čē˙˙‹]ƒûūuč¸˙˙ƒ čęˇ˙˙Į ƒČ˙锅Ûx;H ArčŪˇ˙˙ƒ čÃˇ˙˙Į čfˇ˙˙ëŌ‹ÃÁø<…` A‹ķƒæÁ拞D0ƒātÆSč)ö˙˙Yƒeü‹öD0t˙u˙u Sčnø˙˙ƒÄ ‰Eäëčiˇ˙˙Į čqˇ˙˙ƒ ƒMä˙ĮEüū˙˙˙č ‹Eä荹˙˙Ë]Sčqö˙˙YÃjhpā@č0š˙˙‹]ƒûūučˇ˙˙Į ƒČ˙顅Ûx;H Arč˙ļ˙˙Į čĸļ˙˙ëڋÃÁø<…` A‹ķƒæÁ拞DƒātÎSčeõ˙˙Yƒeü‹öDt1Sččô˙˙YP˙ČĀ@…Āu ˙Ā@‰Eäëƒeäƒ}ätčĨļ˙˙‹Mä‰čˆļ˙˙Į ƒMä˙ĮEüū˙˙˙č ‹Eäč´¸˙˙Ë]Sč˜õ˙˙YË˙VW3öŋ€ Aƒ<õLô@uõHô@‰8h ˙0ƒĮ˙LĀ@…Āt Fƒū$|Ķ3Ā@_^Ã$õHô@3Āëņ‹˙S‹€Ā@VžHô@W‹>…˙tƒ~t W˙ĶW菰˙˙ƒ&YƒÆūhõ@|ÜžHô@_‹…Āt ƒ~uP˙̓Ɓūhõ@|æ^[Ë˙U‹ė‹E˙4ÅHô@˙DĀ@]Ãj hā@蟎˙˙3˙G‰}ä3Û9| Auč2æ˙˙jč|ä˙˙h˙čŒá˙˙YY‹u4õHô@9t‹Įëmjč°Y‹ø;ûučMĩ˙˙Į 3ĀëPj čXY‰]ü9u+h W˙LĀ@…ĀuWčž¯˙˙Yčĩ˙˙Į ‰]äë ‰>ëWčŖ¯˙˙YĮEüū˙˙˙č ‹Eäč8ˇ˙˙Ãj č)˙˙˙YË˙U‹ė‹EV4ÅHô@ƒ>uPč#˙˙˙Y…Āujčwã˙˙Y˙6˙@Ā@^]Ã%D AË˙U‹ėVW3ö˙uč3‹øY…˙u'9Đ AvV˙ĖĀ@†č;Đ AvƒČ˙‹đƒø˙uʋĮ_^]Ë˙U‹ėVW3öj˙u ˙učb3‹øƒÄ …˙u'9Đ AvV˙ĖĀ@†č;Đ AvƒČ˙‹đƒø˙uËĮ_^]Ë˙U‹ėVW3ö˙u ˙učš3‹øYY…˙u,9E t'9Đ AvV˙ĖĀ@†č;Đ AvƒČ˙‹đƒø˙uÁ‹Į_^]Ë˙U‹ėVW3ö˙u˙u ˙učö3‹øƒÄ …˙u,9Et'9Đ AvV˙ĖĀ@†č;Đ AvƒČ˙‹đƒø˙uŊ‹Į_^]Ãjh°ā@čqĩ˙˙3ۉ]äjč|ū˙˙Y‰]üj_‰}ā;= A}T‹÷Ą€ A9°tE‹°ö@ ƒtPčm¨˙˙Yƒø˙t˙Eäƒ˙|(Ą€ A‹°ƒĀ P˙€Ā@Ą€ A˙4°čĻ­˙˙YĄ€ A‰°GëĄĮEüū˙˙˙č ‹Eäč0ĩ˙˙Ãjč!ũ˙˙YÃĖ‹˙U‹ė‹M¸MZf9t3Ā]ËA<Á8PEuī3Ōš f9H”‹Â]ÃĖĖĖĖĖĖĖĖĖĖĖ‹˙U‹ė‹E‹H<ȡASVˇq3ŌWD…öt‹} ‹H ;ųr ‹XŲ;ûr BƒĀ(;Örč3Ā_^[]ÃĖĖĖĖĖĖĖĖĖĖĖĖ‹˙U‹ėjūhĐā@hđ@dĄPƒėSVWĄđ@1Eø3ÅPEđdŖ‰ečĮEüh@č*˙˙˙ƒÄ…ĀtT‹E-@Ph@čP˙˙˙ƒÄ…Āt:‹@$Áč÷ЃāĮEüū˙˙˙‹Mđd‰ Y_^[‹å]ËEė‹3ԁ9Ā”‹ÂËečĮEüū˙˙˙3Ā‹Mđd‰ Y_^[‹å]Ã-¤t"ƒčtƒč t Ht3ĀøøøøË˙VW‹đh3˙FWPčūĻ˙˙3ŽȋÁ‰~‰~‰~ Áá Á~ĢĢĢšhõ@ƒÄ F+ÎŋŠˆ@Ou÷†žŠˆ@Nu÷_^Ë˙U‹ėėĄđ@3ʼnEüSW…čú˙˙P˙v˙ĐĀ@ŋ…Ā„ü3ˆ„üū˙˙@;ĮrôŠ…îú˙˙ƅüū˙˙ „Āt0īú˙˙ļČļ;Čw+Á@P” üū˙˙j Rč;Ļ˙˙ƒÄ ŠCƒÃ„ĀuÖj˙v …üú˙˙˙vPW…üū˙˙Pjjč>43ÛS˙v…üũ˙˙WPW…üū˙˙PW˙v Sčņ2ƒÄDS˙v…üü˙˙WPW…üū˙˙Ph˙v SčĖ2ƒÄ$3ŽŒEüú˙˙öÁt€LŠŒüũ˙˙ëöÁt€L ŠŒüü˙˙ˆŒëˆœ@;ĮrŋëR†Į…äú˙˙Ÿ˙˙˙3É)…äú˙˙‹•äú˙˙„ЍZ ƒûw €LQ ë ƒúw €L QāˆëÆA;ĪrƋMü_3Í[čk¨˙˙ÉÃj hđā@čeą˙˙čé˙˙‹øĄˆú@…Gptƒlt‹wh…öuj čõŨ˙˙Y‹Æč}ą˙˙Ãj čGú˙˙Yƒeü‹wh‰uä;5ų@t6…ötV˙ Ā@…Āuūhõ@tV蛩˙˙YĄų@‰Gh‹5ų@‰uäV˙”Ā@ĮEüū˙˙˙č뎋uäj č ų˙˙YË˙U‹ėƒėS3ÛSMđčŗ˙˙‰Ô AƒūūuĮÔ A˙ØĀ@8]ütE‹Møƒapũë<ƒūũuĮÔ A˙ÔĀ@ëۃūüu‹Eđ‹@ĮÔ AëÄ8]üt‹Eøƒ`pũ‹Æ[ÉË˙U‹ėƒė Ąđ@3ʼnEüS‹] V‹uWčd˙˙˙‹ø3ö‰};ūu‹Ãčēü˙˙3Ā饉uä3Ā9¸˜ų@„‘˙EäƒĀ0=đrį˙čũ„t˙éũ„hˇĮP˙ÜĀ@…Ā„VEčPW˙ĐĀ@…Ā„7hCVPč^Ŗ˙˙3ŌBƒÄ ‰{‰s 9Uč†ü€}î„ĶuīŠ„É„ÆļF˙ļÉéŠhCVPčŖ˙˙‹MäƒÄ kÉ0‰uāą¨ų@‰uäë+ŠF„Āt)ļ>ļĀë‹EāŠ€”ų@D;ļFG;øvę‹}ƒÆ€>uЋuä˙E⃯ƒ}ā‰uäré‹Į‰{ĮCčiû˙˙j‰C C‰œų@Zf‹1f‰0ƒÁƒĀJuņ‹ķč×û˙˙é´ū˙˙€L@;ÁvöƒÆ€~˙…0˙˙˙Cšū€@Iuų‹Cčû˙˙‰C ‰Së‰s3ŽȋÁÁá Á{ĢĢĢë§95Ô A…Tū˙˙ƒČ˙‹Mü_^3Í[čbĨ˙˙ÉÃjhá@č\Ž˙˙ƒMā˙čúå˙˙‹ø‰}ÜčØü˙˙‹_h‹učqũ˙˙‰E;C„Wh čz÷˙˙Y‹Ø…Û„Fšˆ‹wh‹ûķĨƒ#S˙uč´ũ˙˙YY‰Eā…Ā…ü‹uÜ˙vh˙ Ā@…Āu‹Fh=hõ@tPčsĻ˙˙Y‰^hS‹=”Ā@˙×öFp…ęöˆú@…Ũj čÄö˙˙Yƒeü‹CŖä A‹CŖč A‹C Ŗė A3‰E䃸}f‹LCf‰ EØ A@ëč3‰Eä=} ŠLˆˆˆ÷@@ëé3‰Eä=}ŠŒˆˆø@@ëæ˙5ų@˙ Ā@…ĀuĄų@=hõ@tPčēĨ˙˙Y‰ų@S˙×ĮEüū˙˙˙čë0j č>õ˙˙YÃë%ƒø˙u ûhõ@tSč„Ĩ˙˙YčŪĒ˙˙Įëƒeā‹Eāč­˙˙Ã=l AujũčVū˙˙YĮl A3ĀË˙U‹ėSV‹5”Ā@W‹}W˙֋‡°…ĀtP˙֋‡¸…ĀtP˙֋‡´…ĀtP˙֋‡Ā…ĀtP˙֍_PĮE{øŒú@t ‹…ĀtP˙փ{üt ‹C…ĀtP˙փÃ˙Mu֋‡Ô´P˙Ö_^[]Ë˙U‹ėW‹}…˙„ƒSV‹5 Ā@W˙֋‡°…ĀtP˙֋‡¸…ĀtP˙֋‡´…ĀtP˙֋‡Ā…ĀtP˙֍_PĮE{øŒú@t ‹…ĀtP˙փ{üt ‹C…ĀtP˙փÃ˙Mu֋‡Ô´P˙Ö^[‹Į_]Ë˙U‹ėSV‹u‹†ŧ3ÛW;Ãto=8ũ@th‹†°;Ãt^9uZ‹†¸;Ãt9uPčãŖ˙˙˙ļŧč=1YY‹†´;Ãt9uPčÂŖ˙˙˙ļŧčŗ0YY˙ļ°čĒŖ˙˙˙ļŧ蟪˙˙YY‹†Ā;ÃtD9u@‹†Ä-ūPč~Ŗ˙˙‹†Ėŋ€+ĮPčkŖ˙˙‹†Đ+ĮPč]Ŗ˙˙˙ļĀčRŖ˙˙ƒÄ‹†Ô=ú@t9˜´uPčš,˙ļÔč)Ŗ˙˙YY~PĮEøŒú@t‹;Ãt 9uPčŖ˙˙Y9_üt‹G;Ãt 9uPčíĸ˙˙YƒĮ˙MuĮVčŪĸ˙˙Y_^[]Ë˙U‹ėW‹} …˙t;‹E…Āt4V‹0;÷t(W‰8čjũ˙˙Y…ötVčîũ˙˙ƒ>Yuūøû@tVčsū˙˙Y‹Į^ë3Ā_]Ãj h0á@čäŠ˙˙č†á˙˙‹đĄˆú@…Fpt"ƒ~ltčoá˙˙‹pl…öuj čoÖ˙˙Y‹Æč÷Š˙˙Ãj čÁō˙˙Yƒeü˙5Đü@ƒÆlVčY˙˙˙YY‰EäĮEüū˙˙˙čëžj čēņ˙˙Y‹uäÃĖĖĖĖĖĖĖU‹ėWV‹u ‹M‹}‹Á‹ŅÆ;ūv;ø‚ ų€rƒ=x AtWVƒįƒæ;ū^_ué*0÷ĮuÁéƒâƒųr)ķĨ˙$•w@‹Įēƒér ƒāČ˙$…¤v@˙$ w@˙$$w@´v@āv@w@#ҊˆŠFˆGŠFÁéˆGƒÆƒĮƒųrĖķĨ˙$•w@I#ҊˆŠFÁéˆGƒÆƒĮƒųrĻķĨ˙$•w@#ҊˆƒÆÁéƒĮƒųrˆķĨ˙$•w@I‡w@tw@lw@dw@\w@Tw@Lw@Dw@‹DŽä‰Dä‹DŽč‰Dč‹DŽė‰Dė‹DŽđ‰Dđ‹DŽô‰Dô‹DŽø‰Dø‹DŽü‰Düđø˙$•w@‹˙ w@¨w@´w@Čw@‹E^_ÉЊˆ‹E^_ÉЊˆŠFˆG‹E^_ÉÍIŠˆŠFˆGŠFˆG‹E^_ÉЍt1ü|9ü÷Įu$Áéƒâƒųr ũķĨü˙$•,y@‹˙÷Ų˙$Üx@I‹Įēƒųr ƒā+Č˙$…0x@˙$,y@@x@dx@Œx@ŠF#҈GƒîÁéƒīƒųr˛ũķĨü˙$•,y@IŠF#҈GŠFÁéˆGƒîƒīƒųrˆũķĨü˙$•,y@ŠF#҈GŠFˆGŠFÁéˆGƒîƒīƒų‚V˙˙˙ũķĨü˙$•,y@Iāx@čx@đx@øx@y@y@y@#y@‹DމD‹DމD‹DމD‹DމD‹DŽ ‰D ‹DމD‹DމDđø˙$•,y@‹˙WW˙6čĸ)ƒÄ ëšĮEäīģŋj[‹Ã+ĮPD=äP˙6č×˙˙ƒÄ ƒø˙„‡ũ˙˙ø;ßŨƒË˙‹‹ČÁų‹ ` AƒāÁāD$Š2Mū€á0‹‹ČÁų‹ ` AƒāÁāD$‹MŠÁéĀá€â ʀ}ũˆu!öEt‹‹ČƒāÁų‹ ` AÁāD€ ‹Mô¸Ā#Č;Ču~öEtx˙uā˙Ā@j˙uđEĖjP˙uė‹Eô%˙˙˙P˙u ˙Ā@;Ãu4˙Ā@PčéŽ˙˙‹‹ČƒāÁų‹ ` AÁāD€ ū˙6čKĖ˙˙YéĄû˙˙‹6‹ÎÁų‹ ` AƒæÁ手EøéUú˙˙SSSSSč΍˙˙ĖjhPá@čj˙˙3˙‰}ä3Ā‹u;÷•Ā;ĮučMŽ˙˙j^‰0čņ˙˙‹ÆëYƒ˙3Ā9}•Ā;ĮtŪ9}t‹E%ū˙˙÷ØĀ@tʉ}ü˙u˙u˙u ˙uEäP‹Æč\ø˙˙ƒÄ‰EāĮEüū˙˙˙č‹Eā;Įtƒ˙č+˙˙Ã3˙‹u9}ät(9}āt‹‹ČÁųƒāÁā‹ ` AD€ ū˙6čįĖ˙˙YË˙U‹ėj˙u˙u˙u˙u˙u č!˙˙˙ƒÄ]Ë˙U‹ėƒė3ĀSW9E„Ė‹]…Ûučl˙˙Įč˙˙¸˙˙˙éĢ‹} …˙tßV˙uMđč’˙˙‹EđƒxuA+ߡ;ƒøAr ƒøZwƒĀ ˇđë‹đˇƒøAr ƒøZwƒĀ ˇĀƒĮ˙MtDf…öt?f;đtÃë8EđPˇPč4(ˇđEđPˇPč$(ƒÄƒÃƒĮ˙MˇĀt f…ötf;đtȡȡÆ+Á€}ü^t‹Møƒapũ_[ÉË˙U‹ėƒ=8 AVuy3Ā9E„‹u…öu肌˙˙Įč%Œ˙˙¸˙˙˙ëc‹M …Étâ+ņˇƒøAr ƒøZwƒĀ ˇĐë‹ĐˇƒøAr ƒøZwƒĀ ˇĀƒÁ˙Mt f…Ōtf;ĐtÃˇČˇÂ+Áëj˙u˙u ˙učƒū˙˙ƒÄ^]Ë˙U‹ėƒ}u3Ā]ËU ‹M˙Mtˇf…Āt f;uƒÁƒÂëæˇˇ +Á]ÃĖĖĖĖĖĖU‹ėSVWUjjhؑ@˙uč:*]_^[‹å]ËL$÷A¸t2‹D$‹Hü3Č舄˙˙U‹h‹P(R‹P$RčƒÄ]‹D$‹T$‰¸ÃSVW‹D$UPjūhā‘@d˙5Ąđ@3ÄPD$dŖ‹D$(‹X‹p ƒū˙t:ƒ|$,˙t;t$,v-4v‹ ŗ‰L$ ‰H ƒ|ŗuh‹DŗčI‹Dŗč_뷋L$d‰ ƒÄ_^[Ã3Ād‹ yā‘@u‹Q ‹R 9Qu¸ÃSQģ ũ@ë SQģ ũ@‹L$ ‰K‰C‰k UQPXY]Y[Â˙ĐÃjhpá@荌˙˙č/Ä˙˙‹@x…Ātƒeü˙Đë3Ā@ËečĮEüū˙˙˙čH&čό˙˙Ãh÷’@˙0Ā@Ŗø AË˙U‹ė‹EŖü AŖ AŖ AŖ A]Ë˙U‹ė‹E‹ TĐ@V9Pt‹ņkö uƒĀ ;ÆrėkÉ M^;Ás9Pt3Ā]Ã˙5 A˙4Ā@Ãj há@čá‹˙˙3˙‰}ä‰}؋]ƒû Kt‹ÃjY+Át"+Át+ÁtY+ÁuCčãÂ˙˙‹ø‰}؅˙uƒČ˙éTžü AĄü AëU˙w\‹Ķč]˙˙˙Yp‹ëQ‹Ãƒčt2ƒčt!Htčm‰˙˙Įč‰˙˙ëšž AĄ Aëž AĄ Aë ž AĄ AĮEäP˙4Ā@‰Eā3ƒ}ā„Ö9Eāuj蛷˙˙9EätPč&Ô˙˙Y3‰Eüƒût ƒû tƒûu‹O`‰MԉG`ƒûu>‹Od‰MĐĮGdŒƒûu,‹ HĐ@‰M܋ LĐ@ HĐ@9MÜ}‹MÜkÉ ‹W\‰D˙EÜëŨč Ā˙˙‰ĮEüū˙˙˙čƒûu˙wdS˙UāYë‹]‹}؃}ätjčˇŌ˙˙YÃS˙UāYƒût ƒû tƒûu‹EԉG`ƒûu‹EЉGd3Ā萊˙˙Ë˙U‹ė‹EŖ A]Ë˙U‹ė‹EŖ A]Ë˙U‹ė‹EŖ A]Ë˙U‹ė˙5 A˙4Ā@…Āt˙u˙ĐY…Āt3Ā@]Ã3Ā]Ë˙U‹ėQSV‹54Ā@W˙5h A˙Ö˙5d A‹Ø‰]ü˙֋đ;킁‹ū+ûGƒøruSčĘ#‹ØGY;ØsH¸;Øs‹ÃÃ;ÃrP˙uüčtĶ˙˙YY…ĀuC;Ãr>P˙uüč^Ķ˙˙YY…Āt/Á˙P4¸˙0Ā@Ŗh A˙u‹=0Ā@˙׉ƒÆV˙×Ŗd A‹Eë3Ā_^[ÉË˙Vjj čĘŌ˙˙YY‹đV˙0Ā@Ŗh AŖd A…öujX^Ã&3Ā^Ãj h°á@č‰˙˙č(ŗ˙˙ƒeü˙učüū˙˙Y‰EäĮEüū˙˙˙č ‹Eäč‰˙˙Ãčŗ˙˙Ë˙U‹ė˙učˇ˙˙˙÷ØĀ÷ØYH]Ë˙U‹ėƒė$Ąđ@3ʼnEü‹ES‰Eā‹E VW‰Eä茾˙˙ƒeėƒ= A‰Eču}hČÔ@˙čĀ@‹Ø…Û„‹=TĀ@hŧÔ@S˙ׅĀ„ú‹50Ā@P˙ÖhŦÔ@SŖ A˙×P˙Öh˜Ô@SŖ A˙×P˙Öh|Ô@SŖ$ A˙×P˙ÖŖ, A…ĀthdÔ@S˙×P˙ÖŖ( AĄ( A‹Mč‹54Ā@;ÁtG9 , At?P˙Ö˙5, A‹ø˙֋؅˙t,…Ût(˙ׅĀtMÜQj MđQjP˙Ķ…ĀtöEøu M ë3Ą A;Ečt)P˙օĀt"˙ЉEė…ĀtĄ$ A;EčtP˙օĀt˙uė˙ЉEė˙5 A˙օĀt˙u˙uä˙uā˙uė˙Đë3Ā‹Mü_^3Í[čI~˙˙ÉË˙U‹ėV‹uW…öt‹} …˙uč0…˙˙j^‰0čԄ˙˙‹Æ_^]ËM…Éu3Āf‰ëŨ‹Öfƒ:tƒÂOuô…˙tį+Ҏf‰ ƒÁf…ĀtOuî3Ā…˙uÂf‰čŪ„˙˙j"Y‰‹ņëĒ‹˙U‹ė‹US‹]VW…Ûu…Ōu9U u3Ā_^[]ÅŌt‹} …˙učŖ„˙˙j^‰0čG„˙˙‹ÆëŨ…Ûu3Āf‰ëЋM…Éu3Āf‰ëԋƒû˙u‹ō+ņˇf‰ƒÁf…Āt'Ouîë"‹ņ+ōˇ f‰ƒĀf…ÉtOtKuë…Ûu3Éf‰…˙…y˙˙˙3ƒû˙u‹M jPf‰DJūXéd˙˙˙f‰č„˙˙j"Y‰‹ņéj˙˙˙‹˙U‹ėV‹uW…öt‹} …˙učîƒ˙˙j^‰0蒃˙˙‹Æ_^]ËE…Āuf‰ëߋÖ+Сf‰ ƒĀf…ÉtOuî3Ā…˙uÔf‰莃˙˙j"Y‰‹ņëŧ‹˙U‹ė‹M…Éxƒų~ ƒųuĄČū@]ÃĄČū@‰ Čū@]Ãčvƒ˙˙Įčƒ˙˙ƒČ˙]Ë˙U‹ėQƒ=œū@ūučŸĄœū@ƒø˙u¸˙˙ÉÃjMüQjMQP˙ėĀ@…Ātâf‹EÉË˙U‹ėQQ‹E V‹u‰Eø‹EWV‰Eüč6Á˙˙ƒĪ˙Y;Įučų‚˙˙Į ‹Į‹×ëJ˙uMüQ˙uøP˙đĀ@‰Eø;Įu˙Ā@…Āt Pčë‚˙˙YëĪ‹ÆÁø‹…` AƒæÁæD0€ ũ‹Eø‹Uü_^ÉÃjhĐá@蘄˙˙ƒË˙‰]܉]ā‹Eƒøūu萂˙˙ƒ ču‚˙˙Į ‹Ã‹Ķ顅Āx;H Arčh‚˙˙ƒ čM‚˙˙Į čđ˙˙ëŅ‹ČÁų<` A‹đƒæÁ拞L1ƒátÆPčŗĀ˙˙Yƒeü‹öD0t˙u˙u˙u ˙uč×ū˙˙ƒÄ‰E܉Uāëčë˙˙Į čķ˙˙ƒ ‰]܉]āĮEüū˙˙˙č ‹E܋Uāč „˙˙Ã˙učīĀ˙˙YÃĖĖĖĖĖĖĖĖĖĖQL$+ČĀ÷Đ#ȋÄ%đ˙˙;Čr ‹ÁY”‹‰$Ã-…ëé‹˙U‹ėS‹]ƒûāwoVWƒ=| Auč˛˙˙jčY°˙˙h˙či­˙˙YY…Ût‹Ãë3Ā@Pj˙5| A˙ôĀ@‹ø…˙u&j ^9< At Sčų˙˙Y…ĀuŠëč˙˙‰0č ˙˙‰0‹Į_^ëSčåø˙˙Yč÷€˙˙Į 3Ā[]Ë˙U‹ė‹M…Étjā3ŌX÷ņ;E sčĪ€˙˙Į 3Ā]ïM V‹ņ…öuF3ƒūāwVj˙5| A˙ôĀ@…Āu2ƒ=< AtVčxø˙˙Y…ĀuŌ‹E…ĀtĮ 3Āë ‹M…ÉtĮ ^]Ë˙U‹ėƒ}u ˙u č×ū˙˙Y]ÃV‹u …öu ˙učäz˙˙Y3ĀëMWë0…öuFV˙uj˙5| A˙øĀ@‹ø…˙u^9< At@Včų÷˙˙Y…ĀtƒūāvËVčé÷˙˙Yčû˙˙Į 3Ā_^]Ãčę˙˙‹đ˙Ā@Pčš˙˙Y‰ëâčŌ˙˙‹đ˙Ā@Pč‚˙˙Y‰‹Įëʋ˙U‹ė‹M S3Û;Ëvjā3ŌX÷ņ;Esč˙˙Į 3ĀëA¯MVW‹ņ9]t ˙uč˜Y‹ØV˙uč˙˙˙‹øYY…˙t;Ūs+ķVjßSču˙˙ƒÄ ‹Į_^[]Ë˙U‹ė‹E…Ātƒč8ŨŨuPčŌy˙˙Y]Ë˙U‹ėƒėĄđ@3ʼnEü‹US3ÛVW;Ķ~‹E‹ĘI8t@;ËuöƒÉ˙‹Â+ÁH;Â}@‰E‰]ø9]$u ‹E‹‹@‰E$‹5äĀ@3Ā9](SS˙u•Ā˙uÅP˙u$˙֋ø‰}đ;ûu3ĀéR~Cjā3ŌX÷÷ƒør7D?=wč‹Ä;ÃtĮĖĖëPčúü˙˙Y;Ãt ĮŨŨƒĀ‰Eôë‰]ô9]ôtŦW˙uô˙u˙uj˙u$˙օĀ„ā‹5üĀ@SSW˙uô˙u˙u ˙։Eø;ÄÁš…Mt)‹E ;ÄŦ9EøŖP˙uW˙uô˙u˙u ˙Ö鎋}ø;û~Bjā3ŌX÷÷ƒør6D?;ÁwčY‹ü;ûthĮĖ˃ĮëPč=ü˙˙Y;Ãt ĮŨŨƒĀ‹øë3˙;ût?˙uøW˙uđ˙uô˙u˙u ˙օĀt"SS9] uSSë˙u ˙u˙uøWS˙u$˙ŧĀ@‰EøWčū˙˙Y˙uôčū˙˙‹EøYeä_^[‹Mü3ÍčGv˙˙ÉË˙U‹ėƒė˙uMđč‚˙˙˙u(Eđ˙u$˙u ˙u˙u˙u˙u˙u Pčåũ˙˙ƒÄ$€}üt‹MøƒapũÉË˙U‹ėQQĄđ@3ʼnEüS3ÛVW‰]ø9]u ‹E‹‹@‰E‹5äĀ@3Ā9] SS˙u•Ā˙uÅP˙u˙֋ø;ûu3Āë~<˙đ˙˙w4D?=wč‹Ä;ÃtĮĖĖëPčūú˙˙Y;Ãt ĮŨŨƒĀ‹Ø…Ûtē?PjSčr˙˙ƒÄ WS˙u˙uj˙u˙օĀt˙uPS˙u ˙āĀ@‰EøSčâü˙˙‹EøYeė_^[‹Mü3Íču˙˙ÉË˙U‹ėƒė˙uMđčá€˙˙˙u$Eđ˙u˙u˙u˙u˙u Pčëū˙˙ƒÄ€}üt‹MøƒapũÉË˙U‹ėV‹u…ö„c˙včbv˙˙˙včZv˙˙˙v čRv˙˙˙včJv˙˙˙včBv˙˙˙vč:v˙˙˙6č3v˙˙˙v č+v˙˙˙v$č#v˙˙˙v(čv˙˙˙v,čv˙˙˙v0č v˙˙˙v4čv˙˙˙včûu˙˙˙v8čķu˙˙˙v<čëu˙˙ƒÄ@˙v@čāu˙˙˙vDčØu˙˙˙vHčĐu˙˙˙vLčČu˙˙˙vPčĀu˙˙˙vTč¸u˙˙˙vXč°u˙˙˙v\č¨u˙˙˙v`č u˙˙˙vdč˜u˙˙˙vhču˙˙˙vlčˆu˙˙˙vpč€u˙˙˙vtčxu˙˙˙vxčpu˙˙˙v|čhu˙˙ƒÄ@˙ļ€čZu˙˙˙ļ„čOu˙˙˙ļˆčDu˙˙˙ļŒč9u˙˙˙ļč.u˙˙˙ļ”č#u˙˙˙ļ˜ču˙˙˙ļœč u˙˙˙ļ ču˙˙˙ļ¤č÷t˙˙˙ļ¨čėt˙˙˙ļŧčát˙˙˙ļĀčÖt˙˙˙ļÄčËt˙˙˙ļČčĀt˙˙˙ļĖčĩt˙˙ƒÄ@˙ļĐč§t˙˙˙ļ¸čœt˙˙˙ļØč‘t˙˙˙ļÜč†t˙˙˙ļāč{t˙˙˙ļäčpt˙˙˙ļččet˙˙˙ļėčZt˙˙˙ļÔčOt˙˙˙ļđčDt˙˙˙ļôč9t˙˙˙ļøč.t˙˙˙ļüč#t˙˙˙ļčt˙˙˙ļč t˙˙˙ļčt˙˙ƒÄ@˙ļ čôs˙˙˙ļčés˙˙˙ļčŪs˙˙˙ļčĶs˙˙˙ļčČs˙˙˙ļ čŊs˙˙˙ļ$č˛s˙˙˙ļ(č§s˙˙˙ļ,čœs˙˙˙ļ0č‘s˙˙˙ļ4č†s˙˙˙ļ8č{s˙˙˙ļ<čps˙˙˙ļ@čes˙˙˙ļDčZs˙˙˙ļHčOs˙˙ƒÄ@˙ļLčAs˙˙˙ļPč6s˙˙˙ļTč+s˙˙˙ļXč s˙˙˙ļ\čs˙˙˙ļ`č s˙˙ƒÄ^]Ë˙U‹ėV‹u…ötY‹;8ũ@tPčįr˙˙Y‹F;<ũ@tPčÕr˙˙Y‹F;@ũ@tPčÃr˙˙Y‹F0;hũ@tPčąr˙˙Y‹v4;5lũ@tVčŸr˙˙Y^]Ë˙U‹ėV‹u…ö„ę‹F ;Dũ@tPčyr˙˙Y‹F;Hũ@tPčgr˙˙Y‹F;Lũ@tPčUr˙˙Y‹F;Pũ@tPčCr˙˙Y‹F;Tũ@tPč1r˙˙Y‹F ;Xũ@tPčr˙˙Y‹F$;\ũ@tPč r˙˙Y‹F8;pũ@tPčûq˙˙Y‹F<;tũ@tPčéq˙˙Y‹F@;xũ@tPč×q˙˙Y‹FD;|ũ@tPčÅq˙˙Y‹FH;€ũ@tPčŗq˙˙Y‹vL;5„ũ@tVčĄq˙˙Y^]ÃW‹Æƒā…Ā…Á‹ŅƒáÁęte덛fofoNfoV fo^0ffOfW f_0fof@fonPfov`fo~pfg@foPfw`fpļ€ŋ€JuŖ…ÉtI‹ŅÁę…Ōt›fofvJuīƒát$‹ÁÁét ‹‰vIuķ‹Čƒát ŠˆFGIu÷X^_]Ãē+Đ+ĘQ‹Â‹Čƒát ŠˆFGIu÷Áčt ‹‰vHuķYé ˙˙˙‹˙U‹ėƒėS˙uMččŋz˙˙‹]C=w‹E苀ȡXëu‰]Á}EčP‹E%˙Pč!ß˙˙YY…ĀtŠEjˆEøˆ]ųÆEúYë 3Ɉ]øÆEųA‹Ečj˙p˙pEüPQEøPEčjPčUų˙˙ƒÄ …Āu8Eôt‹Eđƒ`pũ3ĀëˇEü#E €}ôt‹Mđƒapũ[ÉË˙U‹ėV‹u…öuč0u˙˙ĮčĶt˙˙é‹F ¨ƒ„û¨@…ķ¨t ƒČ ‰F éäƒČ‰F Š u VčGYë‹F‰˙v˙vVčq˙˙YPčÄ ƒÄ ‰F…Ā„—ƒø„Žƒø˙„…öF ‚uQVčŪp˙˙Yƒø˙t0VčŌp˙˙Yƒøūt$WVčÅp˙˙ÁøV<…` Ačĩp˙˙ƒāYÁāY_ë¸ô@Š@$‚<‚uN ~u‹F ¨tŠuĮF‹ƒFūˇƒÁ‰ë÷؃āƒĀ F ƒf¸˙˙^]Ë˙U‹ėSV‹u WƒĪ˙öF @uoVč2p˙˙Yēô@;Įtƒøūt‹Čƒá‹ØÁûÁá ` Aë‹ĘöA$u%;Įtƒøūt‹ČƒāÁųÁā` Aë‹Âö@$€tčĄs˙˙ĮčDs˙˙‹Į_^[]Ë];ßtō‹F ¨u„Āyį¨uãƒ~uVčÉY‹;Fu ƒ~uÉ@‰˙öF @‹t 8t@‰ëŗˆ‹F ˙FƒāīƒČ‰F ‹Ã%˙ë›j hđá@č(u˙˙3Ā9E •Ā…Āučs˙˙Įčĩr˙˙ƒČ˙ë,˙u čt˙˙Yƒeü˙u ˙učØū˙˙YY‰EäĮEüū˙˙˙č ‹Eäču˙˙Ã˙u č[t˙˙YË˙U‹ėV‹u…öuč´r˙˙ĮčWr˙˙éú‹F ¨ƒ„ī¨@…į¨t ƒČ ‰F 騃ȉF Š u VčËYë‹F‰˙v˙vVč•n˙˙YPčH ƒÄ ‰F…Ā„‹ƒø˙„‚öF ‚uQVčkn˙˙Yƒø˙t0Vč_n˙˙Yƒøūt$WVčRn˙˙ÁøV<…` AčBn˙˙ƒāYÁāY_ë¸ô@Š@$‚<‚uN ~u‹F ¨tŠuĮF‹˙NļA‰ë÷؃āƒĀ F ƒfƒČ˙^]Ë˙U‹ė˙Đū@hčæŧ˙˙Y‹M‰A…Āt ƒI ĮAëƒI A‰AĮA‹Aƒa‰]Ãjč ˙˙YË˙U‹ėQV‹u Vč|m˙˙‰E ‹F Y¨‚uč2q˙˙Į ƒN ¸˙˙é=¨@t čq˙˙Į"ëá¨tƒf¨„‹Nƒāū‰‰F ‹F ƒfƒeüSjƒāī[ ÉF Š u,čq˙˙ƒĀ ;đt č q˙˙ƒĀ@;đu ˙u čmÖ˙˙Y…ĀuVč˙˙˙Y÷F W„ƒ‹F‹>H‰‹N+ø+ˉN…˙~WP˙u čm¸˙˙ƒÄ ‰EüëNƒČ ‰F é=˙˙˙‹M ƒų˙tƒųūt‹Áƒā‹ŅÁúÁā•` Aë¸ô@ö@ tSjjQčí˙˙#ƒÄƒø˙t-‹F‹]f‰ëjEüP˙u ‹û‹]f‰]üčõˇ˙˙ƒÄ ‰Eü9}üt ƒN ¸˙˙ë‹Ã%˙˙_[^ÉË˙U‹ėQV‹u Včl˙˙‰E ‹F Y¨‚učžo˙˙Į ƒN ƒČ˙é/¨@t čŖo˙˙Į"ëãS3Û¨t‰^¨„‡‹Nƒāū‰‰F ‹F ƒāīƒČ‰F ‰^‰]üŠ u,čŠo˙˙ƒĀ ;đt čo˙˙ƒĀ@;đu ˙u čūÔ˙˙Y…ĀuVč–ũ˙˙Y÷F W„€‹F‹>H‰‹N+øI‰N;û~WP˙u č˙ļ˙˙ƒÄ ‰EüëMƒČ ‰F ƒČ˙ëy‹M ƒų˙tƒųūt‹Áƒā‹ŅÁúÁā•` Aë¸ô@ö@ tjSSQč ė˙˙#ƒÄƒø˙t%‹FŠMˆë3˙GWEP˙u čļ˙˙ƒÄ ‰Eü9}üt ƒN ƒČ˙ë‹E%˙_[^ÉÃĖ‹˙U‹ėƒėSVW3ÛjSS˙u‰]đ‰]ôč6ë˙˙‰Eč#ƒÄ‰U냸˙tYjSS˙učë˙˙‹Č#ʃăų˙tA‹u ‹}+đúˆÆ;ķ†ŧģSj˙Á@P˙ôĀ@‰Eü…Āuč÷m˙˙Į čėm˙˙‹_^[ÉÃh€˙uč7YY‰Eø…˙| ;ķr‹Ãë‹ÆP˙uü˙uč¯Ž˙˙ƒÄ ƒø˙t6™+đúxĶ…öuĪ‹uđ˙uø˙učķYY˙uüj˙Á@P˙ Ā@3Ûé†č‡m˙˙ƒ8u čjm˙˙Į ƒÎ˙‰uôëŊ;ûq|;ķskS˙u˙u ˙učę˙˙#ƒÄƒø˙„D˙˙˙˙uč]Ģ˙˙YP˙Á@÷ØĀ÷ØH™‰Eđ#‰Uôƒø˙u)č m˙˙Į čm˙˙‹đ˙Ā@‰‹uđ#uôƒū˙„öū˙˙S˙uė˙uč˙uč´é˙˙#ƒÄƒø˙„Ųū˙˙3ĀéŲū˙˙‹˙U‹ėƒė‹UV‹ujūX‰Eė‰Uä;đučĩl˙˙ƒ čšl˙˙Į ƒČ˙é}S3Û;ķ|;5H Arč‹l˙˙‰čql˙˙Į čl˙˙ƒČ˙éN‹ÆÁøWƒæ<…` A‹ÁæŠL0öÁučNl˙˙‰č4l˙˙Į ëhú˙˙˙wN‰]ô;Ķ„öÁ…ũ9] t5ŠD0$ĀĐøˆEūžĀHjYtHu‹Â÷Шtƒâū‰U‹] ‰]đëz‹Â÷Шučäk˙˙‰čĘk˙˙Įčmk˙˙ë6‹ÂŅč‰M;Ár‰E˙učūļ˙˙‹ØY‰]đ…Ûuč˜k˙˙Į č k˙˙ĮƒČ˙énjjj˙učMč˙˙‹‰D(ƒÄ‰T,‹ÎöAH‹ÃtzŠI€ų trƒ}tl˙M€}ūˆ ‹CĮEôÆD tP‹ŠL%€ų tEƒ}t?ˆ‹@˙M€}ūĮEôÆD% u%‹ŠL&€ų tƒ}tˆ‹@˙MĮEôÆD& jMčQ˙uP‹˙4˙Á@…Ā„x‹Mč…Ɉm;M‡d‹MôDö€„ä€}ū„…Ét €; u€ë€ û‹]đ‹EôÉ]‰Eô;ØƒŅ‹MŠ<„¯< t ˆCA‰M鑋EôH;ČsA€8 u ƒÁ‰MÆ ëu‰Eëm˙EjEčPjE˙P‹˙4˙Á@…Āu ˙Ā@…ĀuEƒ}čt?‹öDHt€}˙ t像ŠM˙ˆLë%;]đu€}˙ t jj˙j˙˙učĨæ˙˙ƒÄ€}˙ tÆ C‹Eô9E‚F˙˙˙닍Dö@u€ëŠˆC‹Ã+Eđ€}ū‰Eô…Đ…Ā„ČKŠ „ÉxCé†3Ā@ļÉëƒø;]đrKļ @€š˜ũ@tčŠļĘž‰˜ũ@…Éu č=i˙˙Į*ëzA;ČuØë@‹öD1Ht%CˆT1ƒø| Š‹ˆT%Cƒøu Š‹ˆT&C+Øë÷ؙjRP˙učËå˙˙ƒÄ‹Eä+]đŅčP˙u S˙uđjhéũ˙äĀ@‰Eô…Āu4˙Ā@Pčâh˙˙YƒMė˙‹Eđ;E tPčIc˙˙Y‹E냸ū…‹‹Eô郋Eô‹3É;ÕÁ‰Eô‰L0ëÆ…Ét fƒ; u€ë€ û‹]đ‹EôÉ]‰Eô;؃‹Eˇƒų„Ųƒų tf‰ ƒÃƒĀ‰Eéĩ‹MôƒÁū;ÁsHfƒ9 u ƒĀ‰Ej 鎉M鄃EjEčPjEøP‹˙4˙Á@…Āu ˙Ā@…Āu[ƒ}čtU‹öDHt(fƒ}ø t˛j Xf‰‹ŠMøˆL‹ŠMųˆL%‹ÆD& ë*;]đufƒ}ø t…jj˙jū˙učjä˙˙ƒÄfƒ}ø t j Xf‰ƒÃ‹Eô9E‚˙˙˙닍tö@u€ë f‹f‰ƒÃ+]đ‰]ôé’ū˙˙˙Ā@j^;Æuč7g˙˙Į č?g˙˙‰0éjū˙˙ƒøm…Zū˙˙ƒeėé\ū˙˙3Ā_[^ÉÃjhâ@či˙˙‹]ƒûūučg˙˙ƒ čëf˙˙Į ƒČ˙éļ…Ûx;H Arčßf˙˙ƒ čÄf˙˙Į čgf˙˙ëŌ‹ÃÁø<…` A‹ķƒæÁ拞D0ƒātƸ˙˙˙;EĀ@uč˜f˙˙ƒ č}f˙˙ĮëˇSčĨ˙˙Yƒeü‹öD0t˙u˙u Sč’ų˙˙ƒÄ ‰EäëčHf˙˙Į čPf˙˙ƒ ƒMä˙ĮEüū˙˙˙č ‹Eäčlh˙˙Ë]SčPĨ˙˙YË˙U‹ėV‹uVč7¤˙˙Yƒø˙učüe˙˙Į ƒČ˙ëMW˙uj˙u P˙đĀ@‹øƒ˙˙u˙Ā@ë3Ā…Āt Pčėe˙˙YƒČ˙ë‹ÆÁø‹…` AƒæÁæD0€ ũ‹Į_^]Ë˙U‹ėS‹] V‹u‹ÆÁø…` A‹ ƒæÁæΊA$ĀWļyžĀį€Ņøû@tPû€tBût&ûtûu=€I€‹ L1$Š€â€Ęˆë'€I€‹ L1$Š€â‚€Ęëč€aë €I€‹ L1$€!€…˙_^[u¸€]Ã÷ØĀ%Ā@]Ë˙U‹ė‹E…ĀučÕd˙˙Įčxd˙˙jX]Ë @ A‰3Ā]Ë˙U‹ė¸˙˙ƒėf9E„‡SV˙u Mėčni˙˙‹uė‹N3Û;Ëu‹EHŋfƒųwfƒĀ ˇĀëK¸jf9Es˙učŋÄ˙˙Y…ŽEYt,‹ŽĖļë UüRjURPQč ƒÄ…ĀˇEtˇEü8]øt‹Môƒapũ^[ÉÃčÚ˙˙…Ātjč!Ú˙˙Yö˜ū@tjh@jč$b˙˙ƒÄ jčm’˙˙Ė‹˙U‹ėƒ}učÖc˙˙Įčyc˙˙ƒČ˙]Ã˙uj˙5| A˙ Á@]Ã3ĀPPjPjh@hÄŨ@˙Ā@Ŗœū@ÃĄœū@ƒø˙t ƒøūtP˙Ā@ÃĖĖQL$+ȃáÁÉ ÁYéēá˙˙QL$+ȃáÁÉ ÁYé¤á˙˙ĖĖĖĖU‹ėV3ĀPPPPPPPP‹U IŠ Āt ƒÂĢ$ëņ‹uƒÉ˙IƒÁŠ Āt ƒÆŖ$sî‹ÁƒÄ ^ÉÃĖĖĖĖĖĖĖĖĖĖ‹T$‹L$÷Âu<‹:u. Āt&:au% ätÁč:Au Āt:auƒÁƒÂ äuŌ‹˙3ĀÐĀŅāƒĀÃ÷ÂtŠƒÂ:uįƒÁ ĀtÜ÷Ât¤f‹ƒÂ:uÎ ĀtÆ:auÅ ätŊƒÁëˆĖĖĖĖĖĖĖĖU‹ėV3ĀPPPPPPPP‹U IŠ Āt ƒÂĢ$ëņ‹u‹˙Š Āt ƒÆŖ$sņF˙ƒÄ ^ÉË˙U‹ė‹E…Ā~ P˙učYY˙u˙uP˙u˙u ˙u˙üĀ@]Ë˙U‹ė3Ā9E v‹Mfƒ9t @ƒÁ;E rņ]ÃĖU‹ėWVS‹M ÉtM‹u‹} ˇAŗZļ IŠ& äŠt' Āt#ƒÆƒĮ:įr:ãwæ:Įr:ÃwÆ:āu ƒéuŅ3É:āt š˙˙˙˙r÷Ų‹Á[^_ÉÃĖ˙%PĀ@hãvãŒãšãĒã¸ãÖãčãūã ä&äDäXähäxäŒä ä¸äĐäėäå å2åFåTå`åpå†å åēåĖåÚåėåæææ,æ6æNæ^ætæŒæšæ´æÄæÚæôæįį*į<įPįXįdįnįzįŒįžį´įÄįÔįæįōįčč č2č>čÚ@9"@Âr@Q–@jI@÷š@‹@ņÛLYH Ū Đakbstrike.errorlogThe file 'kbstrike.errorlog' was opened. Usage: kbstrike <pid> <ascii char, hex> For example, to send spacebar to process with PID 1234, run: kbstrike 1234 0x20 %uswscanf_s failed (GetLastError return: %d). %xswscanf_s failed (GetLastError return: %d). FreeConsole failed (GetLastError return: %d). AttachConsole failed (GetLastError return: %d). CONIN$CreateFile failed (GetLastError return: %d). WriteConsoleInput failed (GetLastError return: %d). ccsUTF-8UTF-16LEUNICODEāū@8˙@CorExitProcessmscoree.dllruntime error TLOSS error SING error DOMAIN error R6033 - Attempt to use MSIL code from this assembly during native code initialization This indicates a bug in your application. It is most likely the result of calling an MSIL-compiled (/clr) function from a native constructor or from DllMain. R6032 - not enough space for locale information R6031 - Attempt to initialize the CRT more than once. This indicates a bug in your application. R6030 - CRT not initialized R6028 - unable to initialize heap R6027 - not enough space for lowio initialization R6026 - not enough space for stdio initialization R6025 - pure virtual function call R6024 - not enough space for _onexit/atexit table R6019 - unable to open console device R6018 - unexpected heap error R6017 - unexpected multithread lock error R6016 - not enough space for thread data R6010 - abort() has been called R6009 - not enough space for environment R6008 - not enough space for arguments R6002 - floating point support not loaded čÍ@Í@ 8Í@ đĖ@˜Ė@8Ė@đË@˜Ë@(Ë@ØĘ@hĘ@øÉ@¨É@hÉ@ Č@ 8Č@!HÆ@x$Æ@yÆ@zėÅ@üäÅ@˙ÄÅ@Microsoft Visual C++ Runtime Library ...<program name unknown>Runtime Error! Program: Ā Ā–ĀĀŽĀĀĀ‘Ā’Ā“Ā´ĀĩĀ  KERNEL32.DLLFlsFreeFlsSetValueFlsGetValueFlsAllocHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSunHH:mm:ssdddd, MMMM dd, yyyyMM/dd/yyPMAMDecemberNovemberOctoberSeptemberAugustJulyJuneAprilMarchFebruaryJanuaryDecNovOctSepAugJulJunMayAprMarFebJanSaturdayFridayThursdayWednesdayTuesdayMondaySundaySatFriThuWedTueMonSun(null)(null)EEE50P( 8PX700WP `h````xpxxxxGetProcessWindowStationGetUserObjectInformationWGetLastActivePopupGetActiveWindowMessageBoxWUSER32.DLL ((((( H„„„„„„„„„„‚‚‚‚‚‚ h(((( H„„„„„„„„„„‚‚‚‚‚‚ H€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙  !"#$%&'()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ĄĸŖ¤Ĩϧ¨ŠĒĢŦ­Ž¯°ą˛ŗ´ĩšēģŧŊžŋĀÁÂÃÄÅÆĮČÉĘËĖÍÎĪĐŅŌĶÔÕÖרŲÚÛÜŨŪßāáâãäåæįčéęëėíîīđņōķôõö÷øųúûüũū˙  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€€†€€†€†‚€EEE………00€P€ˆ('8PW€700PPˆ (€ˆ€€`h`hhhxppwppCONOUT$Hđ@pŪ@RSDS ´ÆČxAL§EoIŲ&0C:\projects\kbstrike\trunk\Release\kbstrike.pdbđ`Gā‘ū˙˙˙Ô˙˙˙ū˙˙˙.@ū˙˙˙Ô˙˙˙ū˙˙˙Ō@ū˙˙˙Ô˙˙˙ū˙˙˙p@ū˙˙˙Ô˙˙˙ū˙˙˙7@ū˙˙˙Ė˙˙˙ū˙˙˙ã@÷@ū˙˙˙Đ˙˙˙ū˙˙˙ē@ū˙˙˙Ė˙˙˙ū˙˙˙@i@ū˙˙˙Đ˙˙˙ū˙˙˙šF@ū˙˙˙Ā˙˙˙ū˙˙˙æK@ū˙˙˙Ø˙˙˙ū˙˙˙ĻV@ū˙˙˙ĩV@ū˙˙˙Ø˙˙˙ū˙˙˙hX@ū˙˙˙tX@ū˙˙˙Ô˙˙˙ū˙˙˙ĩ\@ū˙˙˙Č˙˙˙ū˙˙˙z^@ļ]@ū˙˙˙Đ˙˙˙ū˙˙˙If@ū˙˙˙Đ˙˙˙ū˙˙˙"g@ū˙˙˙Ô˙˙˙ū˙˙˙žh@ū˙˙˙Đ˙˙˙ū˙˙˙Ļj@ū˙˙˙Ø˙˙˙ū˙˙˙Ëk@Ūk@ū˙˙˙Ô˙˙˙ū˙˙˙ˇn@ū˙˙˙Ė˙˙˙ū˙˙˙‰r@ū˙˙˙Ô˙˙˙ū˙˙˙ v@ū˙˙˙Ė˙˙˙ū˙˙˙Ģ@ū˙˙˙Ø˙˙˙ū˙˙˙“@“@ū˙˙˙Ā˙˙˙ū˙˙˙•@ū˙˙˙Ô˙˙˙ū˙˙˙¸–@ū˙˙˙Ė˙˙˙ū˙˙˙Ė›@ū˙˙˙Ô˙˙˙ū˙˙˙ģĒ@ū˙˙˙Đ˙˙˙ū˙˙˙jˇ@TâČãĀhãvãŒãšãĒã¸ãÖãčãūã ä&äDäXähäxäŒä ä¸äĐäėäå å2åFåTå`åpå†å åēåĖåÚåėåæææ,æ6æNæ^ætæŒæšæ´æÄæÚæôæįį*į<įPįXįdįnįzįŒįžį´įÄįÔįæįōįčč č2č>čRCloseHandleWriteConsoleInputWCreateFileWAttachConsole_FreeConsoleGetLastErrorKERNEL32.dll‡GetCommandLineWĶHeapSetInformationĪHeapFreeĶUnhandledExceptionFilterĨSetUnhandledExceptionFilterIsDebuggerPresentęEncodePointerĘDecodePointerĀTerminateProcessĀGetCurrentProcessîEnterCriticalSection9LeaveCriticalSectionIsProcessorFeaturePresentãInitializeCriticalSectionAndSpinCountRtlUnwindEGetProcAddressGetModuleHandleWExitProcess%WriteFiledGetStdHandleGetModuleFileNameWaFreeEnvironmentStringsWÚGetEnvironmentStringsWoSetHandleCountķGetFileTypecGetStartupInfoWŅDeleteCriticalSectionÅTlsAllocĮTlsGetValueČTlsSetValueÆTlsFreeīInterlockedIncrementsSetLastErrorÅGetCurrentThreadIdëInterlockedDecrementÍHeapCreate§QueryPerformanceCounter“GetTickCountÁGetCurrentProcessIdyGetSystemTimeAsFileTime‡SetStdHandleWideCharToMultiBytešGetConsoleCPŦGetConsoleModeWFlushFileBuffers˛SleeprGetCPInfohGetACP7GetOEMCP IsValidCodePageiGetStringTypeWgMultiByteToWideChar?LoadLibraryW$WriteConsoleWfSetFilePointerËHeapAllocŌHeapReAlloc-LCMapStringWSSetEndOfFileJGetProcessHeapĀReadFileÔHeapSizeNæ@ģąŋD        ! 5A CPR S WY l m pr €  ‚ ƒ„ ‘)ž Ą¤ § ˇÎ×    A  A˙˙˙˙€ ˙˙˙˙˙˙˙˙ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZhõ@¤`‚y‚!ĻߥĨŸāü@~€ü¨ÁŖÚŖ ū@ūĩÁŖÚŖ ūAūļĪĸäĸåĸčĸ[ū@~ĄūQQÚ^Ú _ÚjÚ2ĶØŪāų1~ūū˙˙˙CėĶ@čĶ@äĶ@āĶ@ÜĶ@ØĶ@ÔĶ@ĖĶ@ÄĶ@ŧĶ@°Ķ@¤Ķ@œĶ@Ķ@ŒĶ@ˆĶ@„Ķ@€Ķ@|Ķ@xĶ@tĶ@pĶ@lĶ@hĶ@dĶ@`Ķ@XĶ@LĶ@DĶ@<Ķ@|Ķ@4Ķ@,Ķ@$Ķ@Ķ@Ķ@Ķ@øŌ@ôŌ@đŌ@äŌ@ĐŌ@ÄŌ@ ŧŌ@´Ō@ŦŌ@¤Ō@œŌ@”Ō@ŒŌ@|Ō@lŌ@\Ō@HŌ@4Ō@$Ō@Ō@Ō@Ō@øŅ@đŅ@čŅ@āŅ@ØŅ@ĐŅ@ČŅ@ĀŅ@¸Ņ@°Ņ@ Ņ@ŒŅ@€Ņ@tŅ@čŅ@hŅ@\Ņ@LŅ@8Ņ@(Ņ@Ņ@Ņ@øĐ@đĐ@ÜĐ@´Đ@ Đ@Œú@Œú@Œú@Œú@Œú@8ũ@āÕ@hÚ@čÛ@ú@øû@0Ŧ@0Ŧ@0Ŧ@0Ŧ@0Ŧ@0Ŧ@0Ŧ@0Ŧ@0Ŧ@0Ŧ@Ô@đĶ@ “..0ũ@0 A0 A0 A0 A0 A0 A0 A0 A0 A4ũ@4 A4 A4 A4 A4 A4 A4 A8ũ@āÕ@â×@ä×@ū˙˙˙.€0€ HX Zä PAPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADDINGPADDINGXXPADÔ00070T0z0”0š0Ä0Ū0ä011161@1F11–1Ĩ1Ģ1 22282Č2`3A4S4ß4†56Š6ž6Ã6Đ6Ũ6é6õ6û6 77 7g7l7v7°7ĩ7ŧ7Â7=8C8U8|8š8Ã8Û8969^9Ī:ō:ũ: ;o;¸;Ę;Ē<´<Á<˙<===V=r=•=¨=Õ=Û=õ=>>>->4>C>O>\>€>’> >ĩ>ŋ>å>?'?0?T?ƒ?‘?Ž? (0Ü0ä0ü01n1=2B2Ž2–2Ģ2ļ2Ņ3Y<_<0 į5ų578808M;<Ú=!>M>o>@čD0š2Ŋ2Á2Å2É2Í2Ņ2Õ2â2Ÿ4Ņ4đ45r5•5ˇ5Â5ø5626C6P6W6g6y6~6å6ņ6ü7.848:8@8F8L8S8Z8a8h8o8v8}8…88•8Ą8Ē8¯8ĩ8ŋ8Č8Ķ8ß8ä8ô8ų8˙899"9k9q9~9„99”9ļ9+:3:F:Q:V:h:r:w:“::ŗ:ž:Ø:ã:ë:û:;;K;U;{;‚;œ;Ŗ;Î;p<ƒ<•<Ü<ô<ū<=!='=5=i=v=‹=ŧ=Ų=%>S>Ã?P@00R0]0g0x0ƒ02 2222‡2Ž2Ŗ2ß23+313[3 3§3ŧ34 484P4n4’4Â4Ô45%5+5?5D5e5j5‹5’5ž5¤5°5ļ5ŋ5Å5Î5Ú5ā5č5î5ú56 666'6I6^6„6Ä6Ę6ô6ú677.7T7Î7ņ7û738;8„8Š8 8Ĩ8­8ŗ8ē8Ā8Į8Í8Õ8Ü8á8é8ō8ū8999999#9(979M9S9[9`9h9m9u9z999•9›9¤9Ä9Ę9â9::":E:R:^:f:n:z:Ŗ:Ģ:Ä:×:č: ;H;[;s;“;æ;<'>M>“>ō>•?ĩ?`°Ĩ0Î0'1•2o3?4p4†4Į4æ4ƒ5ĩ5Ũ5W66Ą6×6á647;7E7W7n7|7‚7Ĩ7Ŧ7Å7Ų7ß7č7û78_8ŗ8Ķ8Ü8ü899H9Q9]9–9Ÿ9Ģ9č9ņ9ũ9:7:@:g:t:y:‡:H;M;_;};‘;—;^<›<˛<">3>m>z>„>’>›>Ĩ>Ų>ä>î>??$?H??´?Į?pĐ70T00 1+1 1Ŧ1ŋ1Ņ1ė1ô1ü12,2H2Q2W2`2e2t2›2Ä2Õ2é253„3Ė3 4ã45‰5Ŗ5´5í5J6|6”6›6Ŗ6¨6Ŧ6°6Ų6˙67$7(7,7074787<7@7Š77”7˜7œ78 8(8/84888<8]8‡8š8Ā8Ä8Č8Ė8Đ8Ô8Ø8Ü8&9,9094989Ų9å9]:i:—:Æ:a;:<’<´<˙<>)>J?h?ē?Ā?Æ?Ū?€PÂ0ö01I12f3‰3Ŗ3Ä3æ3/4x4"5-5e6Ķ6‰9 :t:‡:Ļ:¸:Ë:Ũ:;=;>4>m>”>´>ž>Õ>ú>?Ę?Ėę0Ė112=2ĩ2Ī2Ø2ú21373<3J3O3T3Y3i3˜3ž3Ļ3í3ō3,41484=4D4I4W4¸4Á4Į4O5^5m5z5€5Ĩ5Ŧ5´5$6)626A6d6i6n6…6Ū67 77"7'787@7F7P7V7`7f7p7y7„7‰7’7œ7§7â7ü78ũ9: :-:::Y:Ģ:¸:Ņ:ī:+;S;Ž>G? T0‘0´0M185J5\5n5€5Ļ5¸5Ę5Ü5î566$666H6Z6l6~699•9˛9×9_:z;‘;î;C=J=ą>¸>}?„?°L00b00191ž2t3~324A4¸4Å4š5¤5D6‚6´6Ü6Ļ7ŗ7Ķ7˙7Č8…9Ė9Ō9į9í9ō9ø9 :‰;<ĀH 1$1(1,101<1@1”5˜5L>T>\>d>l>t>|>„>Œ>”>œ>¤>Ŧ>´>ŧ>Ä>Ė>Ô>Ü>ä>ė>ô>Đ(>>¨>Č>č>?$?(?H?h?t??°?Đ?Ü?ø?ā40 0@0L0h0ˆ0¨0Č0ä0č01(1H1h1„1ˆ1¨1Č1č12(2đ€1ˆ19:”:˜:œ: :¤:¨:Ŧ:°:´:¸:ŧ:Ā:Ä:Č:Ė:Đ:Ô:Ø:Ü:ā:ä:č:ė:đ:ô:ø:ü:;;; ;;;;; ;$;(;,;0;4;8;H;L;P;T;X;\;`;d;h;l;p;t;x;|;€;„;ˆ;Œ;;”;˜;œ; ;¤;¨;Ŧ;°;´;¸;ŧ;Ā;Ä;Č;Ė;Đ;Ô;Ø;Ü;ā;ä;č;ė;đ;P<`Llã }˛*UÆ HĄ ›kNĘũ}ŨrĖR9‚ÁĪ3"ų¯Œŧįq™…QYEYB_ĖŠĄė˜­Å¯b38xđ#k ˆ:•ŊǃĒe ĪK•Ķˆj›ôc¨%öb> nŠ‹oÁ|æū/?ëi\Z6JP ˆruÎsãē)Ē ķ˜q‚flßâ }ÆŊՖ}(ž!ę°E–&‡šåÎ=“/4)ąÛa:ņ#ŗŽxĶ”ˇ×úQ-|ŸTÔō]‚ĸaz÷:į=|N=Ģ]tXŽ+ {ĄōŒÚ=›œdMf7‰ķ’ ŽČ‘™2úõV ¯×FÉ(îBŪZEũg!Úú;^ÄYĢ[厭n “˙ķäØÛ]4Ļ\^  `ģ.´T÷ĩd\û"Ë īŲ’–a™ŧä'WŌä8!įpCĖá×ĩųCxūŌ^ęY,œô/BÔņ¯ā‹fú$4OVwą¯wŗū)ßķ#ŖZ/J(t.JE ë$ę´ß.ȀņaVPDZų– ŨÖN€Ą|d!¯ŧēé‰gá%–Áx–î“īh 9đ9ǐ >íGüæ'ąČ5;?Քq)UļįšāQkōÍ3Ŗr’§Ôĩû͑šé¸ßį0x„ŠÛk āÆ"īˇ0œ” ą*Iöę‚ āgųė…NĪÎĒŅŌJšöŌį6ĶBâZ-Nßǃq–šČ Sg%[`Õ ĘBQ’ÁŖø”ŧí“;P=z/×rąvũR¸ėŖæ‘ņØĖœR5u%á™0ĢHM›BB•ãd%×ũļlibengine-gost-openssl-3.0.2/tcl_tests/magma1.enc000066400000000000000000000000401446070765000217440ustar00rootroot00000000000000N˜ —ˇš<>% “Öč]im†ˆ˛ÛīVŽļ€ĢRĄ-libengine-gost-openssl-3.0.2/tcl_tests/magma_acpkm_plain.enc000066400000000000000000000020101446070765000242200ustar00rootroot00000000000000íîĨŒæ(ˇ|libengine-gost-openssl-3.0.2/tcl_tests/magma_enc000066400000000000000000000000401446070765000217440ustar00rootroot00000000000000N˜ —ˇš<>% “Öč]im†ˆ˛ÛīVŽļ€ĢRĄ-libengine-gost-openssl-3.0.2/tcl_tests/magma_plain000066400000000000000000000000401446070765000223020ustar00rootroot00000000000000’Ūđk< YÛTĮø J˜û.g¨L‰@›ĩ~Alibengine-gost-openssl-3.0.2/tcl_tests/magma_plain.enc000066400000000000000000000000401446070765000230460ustar00rootroot00000000000000’Ūđk< YÛTĮø J˜û.g¨L‰@›ĩ~Alibengine-gost-openssl-3.0.2/tcl_tests/make_other.sh000077500000000000000000000017241446070765000226010ustar00rootroot00000000000000#!/bin/sh # ХОСдаĐĩŅ‚ ĐŋОдĐēĐ°Ņ‚Đ°ĐģĐžĐŗ OtherVersion, ĐēĐžĐŋĐ¸Ņ€ŅƒĐĩŅ‚ в ĐŊĐĩĐŗĐž даĐŊĐŊŅ‹Đĩ Đ´ĐģŅ Ņ‚ĐĩŅŅ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐ¸Ņ # ŅĐžĐ˛ĐŧĐĩŅŅ‚Đ¸ĐŧĐžŅŅ‚Đ¸ ҁ Đ´Ņ€ŅƒĐŗĐ¸Đŧи вĐĩŅ€ŅĐ¸ŅĐŧи. # ДаĐŊĐŊŅ‹Đĩ ĐąĐĩŅ€ŅƒŅ‚ŅŅ иС Ņ€ĐĩĐˇŅƒĐģŅŒŅ‚Đ°Ņ‚ĐžĐ˛ ĐŋŅ€ĐžĐŗĐžĐŊа Ņ‚ĐĩŅŅ‚ĐžĐ˛ Đ´ĐģŅ ĐžŅ‚ĐēŅ€Ņ‹Ņ‚ĐžĐŗĐž ŅĐŊĐļиĐŊа # (ĐŋĐžŅĐēĐžĐģҌĐē҃ иĐŧĐĩĐŊĐŊĐž ĐžĐŊ ĐŗĐ°Ņ€Đ°ĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐŊĐž ҃ĐŧĐĩĐĩŅ‚ Đ˛ŅĐĩ ĐŊ҃ĐļĐŊŅ‹Đĩ аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧŅ‹, # вĐēĐģŅŽŅ‡Đ°Ņ ŅƒŅŅ‚Đ°Ņ€ĐĩĐ˛ŅˆĐ¸Đĩ). TESTDIR=`hostname`-gost SAVEDIR=OtherVersion if ! [ -d ${TESTDIR} ]; then echo $TESTDIR does not exist. exit 1 fi [ -d ${SAVEDIR} ] && rm -fr ${SAVEDIR} mkdir ${SAVEDIR} cd ${TESTDIR} cp -rp enc.enc enc.dat ../$SAVEDIR cp -rp smimeCA test.crl test_crl_cacert.pem ../$SAVEDIR cp -rp U_smime_* sign_*.msg ../$SAVEDIR cp -rp cmsCA U_cms_* cms_sign_*.msg ../$SAVEDIR cp -rp U_pkcs12_* ../$SAVEDIR cp -rp encrypt.dat U_enc_* enc_*.msg ../$SAVEDIR cp -rp U_cms_enc_* cms_enc_*.msg ../$SAVEDIR libengine-gost-openssl-3.0.2/tcl_tests/mkn2o.tcl000066400000000000000000000011401446070765000216460ustar00rootroot00000000000000proc oid {oid name types} { global new_name2oid set new_name2oid($name) $oid } source [lindex $argv 0] source name2oid.tcl set differ 0 foreach name [array names name2oid] { if {![info exists new_name2oid($name)] || $new_name2oid($name) != $name2oid($name)} {set differ 1} } if {!$differ} { foreach name [array names new_name2oid] { if {![info exists name2oid($name)]} {set differ 1} } } if {$differ} { set n2of [open name2oid.tcl w] puts $n2of "array set name2oid {" foreach name [lsort [array names new_name2oid]] { puts $n2of "$name $new_name2oid($name)" } puts $n2of "}" close $n2of } libengine-gost-openssl-3.0.2/tcl_tests/mkoidf.tcl000066400000000000000000000001321446070765000220710ustar00rootroot00000000000000proc oid {oid name types} { puts "$oid $name GOST $name $oid" } source [lindex $argv 0] libengine-gost-openssl-3.0.2/tcl_tests/name2oid.tcl000066400000000000000000000026651446070765000223330ustar00rootroot00000000000000array set name2oid { crypt89_cc 1.2.643.2.2.21 mac89 1.2.643.2.2.22 pk_sign94_cc 1.2.643.2.9.1.5.3 pk_sign94_cp 1.2.643.2.2.20 pk_sign01_cc 1.2.643.2.9.1.5.4 pk_sign01_cp 1.2.643.2.2.19 pk_sign12_256 1.2.643.7.1.1.1.1 pk_sign12_512 1.2.643.7.1.1.1.2 hash_94 1.2.643.2.2.9 hash_12_256 1.2.643.7.1.1.2.2 hash_12_512 1.2.643.7.1.1.2.3 hash_with_sign94_cc 1.2.643.2.9.1.3.3 hash_with_sign94_cp 1.2.643.2.2.4 hash_with_sign01_cc 1.2.643.2.9.1.3.4 hash_with_sign01_cp 1.2.643.2.2.3 hash_with_sign12_256 1.2.643.7.1.1.3.2 hash_with_sign12_512 1.2.643.7.1.1.3.3 param_encr_cc 1.2.643.2.9.1.6.1 param_encr_cpa 1.2.643.2.2.31.1 param_encr_cpb 1.2.643.2.2.31.2 param_encr_cpc 1.2.643.2.2.31.3 param_encr_cpd 1.2.643.2.2.31.4 param_encr_cptest 1.2.643.2.2.31.0 param_encr_tc 1.2.643.7.1.2.5.1.1 param_hash_94 1.2.643.2.2.30.1 param_pubkey94_cpa 1.2.643.2.2.32.2 param_pubkey94_cpb 1.2.643.2.2.32.3 param_pubkey94_cpc 1.2.643.2.2.32.4 param_pubkey94_cpd 1.2.643.2.2.32.5 param_pubkey94_cpxcha 1.2.643.2.2.33.1 param_pubkey94_cpxchb 1.2.643.2.2.33.2 param_pubkey94_cpxchc 1.2.643.2.2.33.3 param_pubkey01_cc 1.2.643.2.9.1.8.1 param_pubkey01_cpa 1.2.643.2.2.35.1 param_pubkey01_cpb 1.2.643.2.2.35.2 param_pubkey01_cpc 1.2.643.2.2.35.3 param_pubkey01_cptest 1.2.643.2.2.35.0 param_pubkey01_cpxcha 1.2.643.2.2.36.0 param_pubkey01_cpxchb 1.2.643.2.2.36.1 param_pubkey12_512_0 1.2.643.7.1.2.1.2.0 param_pubkey12_512_A 1.2.643.7.1.2.1.2.1 param_pubkey12_512_B 1.2.643.7.1.2.1.2.2 } libengine-gost-openssl-3.0.2/tcl_tests/name2oid.tst000066400000000000000000000000001446070765000223400ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/tcl_tests/nopath.try000066400000000000000000000055061446070765000221570ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "ĐŸĐžĐ´ĐŗŅ€ŅƒĐˇĐēа engine ĐąĐĩС ŅĐ˛ĐŊĐž ҃ĐēаСаĐŊĐŊĐžĐŗĐž dynamic_path" set config [getConfig] regexp {\ndynamic_path\s*=\s*(\S[^\n]+)} $config => path if [file exist [file join [file dirname $::OPENSSL_CONF] cryptocom.lic]] { file copy -force [file join [file dirname $::OPENSSL_CONF] cryptocom.lic] cryptocom.lic } if {[info exists path]} { set env(OPENSSL_ENGINES) [subst -nocommands -nobackslashes [regsub {\$ENV::(\w+)} [file dirname $path] {$env(\1)}]] puts $env(OPENSSL_ENGINES) makeFile nodp.conf [regsub {\ndynamic_path\s*=\s*([^\n]+)} $config {}] set env(OPENSSL_CONF) "[pwd]/nodp.conf" } test -platformex {[info exists path]} -createsfiles dgst.dat "Đ’Ņ‹Ņ‡Đ¸ŅĐģĐĩĐŊиĐĩ даКдĐļĐĩŅŅ‚Đ° md_gost94" { makeFile dgst.dat [string repeat "Test data to digest.\n" 100] binary grep "md_gost94\\(" [openssl "dgst -md_gost94 dgst.dat"] } 0 "md_gost94\(dgst.dat)= 42e462ce1c2b4bf72a4815b7b4877c601f05e5781a71eaa36f63f836c021865c\n" set plain "Test data to encrypt" test -platformex {[info exists path]} -createsfiles {enc.enc enc.dat} "Encrypting file in CFB mode" { makeFile enc.dat $plain binary openssl "enc -gost89 -out enc.enc -in enc.dat -k 1234567890 -p" file isfile enc.enc } 0 1 test -platformex {[info exists path]} -createsfiles {cnt.enc} "Encrypting file in CNT mode" { makeFile enc.dat $plain binary openssl "enc -gost89-cnt -out cnt.enc -in enc.dat -k 1234567890 -p" file isfile cnt.enc } 0 1 test -platformex {[info exists path]} -skip {![file exists enc.enc]} "Ciphered text in CFB mode differs from clear text" { set ciphered [getFile enc.enc binary] string first $ciphered $plain } 0 -1 test -platformex {[info exists path]} -skip {![file exists cnt.enc]} "Ciphered text in CNT mode differs from clear text" { set ciphered [getFile cnt.enc binary] string first $ciphered $plain } 0 -1 test -platformex {[info exists path]} -skip {![file exists enc.enc]} -createsfiles enc.dec "Decrypting file, encrypted in CFB mode" { openssl "enc -gost89 -d -in enc.enc -out enc.dec -k 1234567890 -p" getFile enc.dec } 0 $plain test -platformex {[info exists path]} -skip {![file exists cnt.enc]} -createsfiles cnt.dec "Decrypting file, encrypted in CNT mode" { openssl "enc -gost89-cnt -d -in cnt.enc -out cnt.dec -k 1234567890 -p" getFile cnt.dec } 0 $plain test -platformex {[info exists path]} "Đ’Ņ‹Ņ‡Đ¸ŅĐģĐĩĐŊиĐĩ MAC gost89" { grep gost-mac [openssl "dgst -mac gost-mac -macopt key:12345678901234567890123456789012 dgst.dat"] } 0 "GOST-MAC-gost-mac(dgst.dat)= 37f646d2\n" test -platformex {[info exists path]} -createsfiles nodp2001.key "ХОСдаĐŊиĐĩ ҁĐĩĐēŅ€ĐĩŅ‚ĐŊĐžĐŗĐž ĐēĐģŅŽŅ‡Đ° gost2001" { makeSecretKey nodp2001 gost2001:A file exists nodp2001/seckey.pem } 0 1 file delete cryptocom.lic end_tests libengine-gost-openssl-3.0.2/tcl_tests/ocsp.try000066400000000000000000000151541446070765000216320ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа OCSP-СаĐŋŅ€ĐžŅŅ‹ и ĐžŅ‚Đ˛Đĩ҂ҋ" if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {gost2001:A gost2012_256:A gost2012_512:B}} "open" {set alg_list {gost2001:A gost2012_256:A gost2012_512:B}} } } foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username U_smime_$alg_fn test "Creating CA" { makeCA ${testname}CA-$alg_fn $alg } 0 1 after 1000 set server_args "-index $::test::ca/index.txt -rsigner $::test::ca/cacert.pem -rkey $::test::ca/private/cakey.pem -CA $::test::ca/cacert.pem -noverify" set client_args "-issuer $::test::ca/cacert.pem -CAfile $::test::ca/cacert.pem" test "ХОСдаĐĩĐŧ ŅŽĐˇĐĩŅ€Đ°" { makeRegisteredUser U_ocsp_$alg_fn $alg makeRegisteredUser U_ocsp2_$alg_fn $alg file exists U_ocsp_$alg_fn/cert.pem } 0 1 after 1000 test -createsfiles {request1.der} "ХОСдаĐĩĐĩĐŧ ĐŊĐĩĐŋОдĐŋĐ¸ŅĐ°ĐŊĐŊŅ‹Đš СаĐŋŅ€ĐžŅ SHA1 Ņ…ŅŅˆ ĐŋĐž ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Ņƒ" { openssl "ocsp $client_args -cert U_ocsp_$alg_fn/cert.pem -reqout request1.der" file exists request1.der } 0 1 test -skip {![file exists request1.der]} "АĐŊаĐģĐ¸ĐˇĐ¸Ņ€ŅƒĐĩĐŧ OID-Ņ‹ в СаĐŋŅ€ĐžŅĐĩ" { extract_oids request1.der DER } 0 " OBJECT :sha1 " test -skip {![file exists request1.der]} -createsfiles {response1.der} "Đ¤ĐžŅ€ĐŧĐ¸Ņ€ŅƒĐĩĐŧ ГОСĐĸ-ĐŋОдĐŋĐ¸ŅĐ°ĐŊĐŊŅ‹Đš ĐžŅ‚Đ˛ĐĩŅ‚" { openssl "ocsp $server_args -reqin request1.der -respout response1.der" } 0 "" test -skip {![file exists request1.der]} "АĐŊаĐģĐ¸ĐˇĐ¸Ņ€ŅƒĐĩĐŧ OID-Ņ‹ в ĐžŅ‚Đ˛ĐĩŅ‚Đĩ" { extract_oids response1.der DER 30 } 0 " OBJECT :sha1\n[mkObjList [hash_with_sign_long_name $alg] [hash_with_sign_long_name $alg] [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg]] [hash_with_sign_long_name $alg]]" test -skip {![file exists response1.der]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ГОСĐĸ-ĐŋОдĐŋĐ¸ŅĐ°ĐŊĐŊŅ‹Đš ĐžŅ‚Đ˛ĐĩŅ‚" { openssl "ocsp $client_args -respin response1.der" } 0 "STDERR CONTENTS:\nResponse verify OK" test -skip {![file exists response1.der]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ŅŅ‚Đ°Ņ‚ŅƒŅ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ°" { grep "Cert Status" [openssl "ocsp -respin response1.der -text -CAfile $::test::ca/cacert.pem"] } 0 " Cert Status: good\n" test -createsfiles request2.der "Đ¤ĐžŅ€ĐŧĐ¸Ņ€ŅƒĐĩĐŧ ГОСĐĸ-ĐŋОдĐŋĐ¸ŅĐ°ĐŊĐŊŅ‹Đš СаĐŋŅ€ĐžŅ ҁ Ņ…ŅŅˆĐžĐŧ SHA1 ĐŋĐž ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Ņƒ" { openssl "ocsp $client_args -cert U_ocsp_$alg_fn/cert.pem -signer U_ocsp_$alg_fn/cert.pem -signkey U_ocsp_$alg_fn/seckey.pem -reqout request2.der" } 0 "" test -skip {![file exists request2.der]} "АĐŊаĐģĐ¸ĐˇĐ¸Ņ€ŅƒĐĩĐŧ OID-Ņ‹ в СаĐŋŅ€ĐžŅĐĩ" { extract_oids request2.der DER } 0 " OBJECT :sha1\n[mkObjList [hash_with_sign_long_name $alg] [hash_with_sign_long_name $alg] [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg]] [hash_with_sign_long_name $alg]]" test -createsfiles response2.der -skip {![file exists request2.der]} "Đ¤ĐžŅ€ĐŧĐ¸Ņ€ŅƒĐĩĐŧ ĐžŅ‚Đ˛ĐĩŅ‚ ĐŊа ĐŋОдĐŋĐ¸ŅĐ°ĐŊĐŊŅ‹Đš СаĐŋŅ€ĐžŅ" { openssl "ocsp $server_args -reqin request2.der -respout response2.der" file exists response2.der } 0 1 test -skip {![file exists response2.der]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐžŅ‚Đ˛ĐĩŅ‚ ĐŊа СаĐŋŅ€ĐžŅ 2" { grep "Response .erif" [openssl "ocsp $client_args -respin response2.der"] } 0 "Response verify OK\n" test -createsfiles request3.der "Đ¤ĐžŅ€ĐŧĐ¸Ņ€ŅƒĐĩĐŧ СаĐŋŅ€ĐžŅ ҁ ГОСĐĸ-ĐžĐ˛ŅĐēиĐŧ Ņ…ŅŅˆĐžĐŧ ĐŋĐž ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Ņƒ" { openssl "ocsp $client_args -[hash_short_name [alg_hash $alg]] -cert U_ocsp_$alg_fn/cert.pem -reqout request3.der" file exists request3.der } 0 1 test -skip {![file exists request3.der]} "АĐŊаĐģĐ¸ĐˇĐ¸Ņ€ŅƒĐĩĐŧ OID-Ņ‹ в СаĐŋŅ€ĐžŅĐĩ" { extract_oids request3.der DER } 0 [mkObjList [hash_long_name $alg]] test -skip {![file exists request3.der]} -createsfiles response3.der "Đ¤ĐžŅ€ĐŧĐ¸Ņ€ŅƒĐĩĐŧ ĐžŅ‚Đ˛ĐĩŅ‚ ĐŊа СаĐŋŅ€ĐžŅ ҁ ГОСĐĸ-ĐžĐ˛ŅĐēиĐŧ Ņ…ŅŅˆĐžĐŧ" { openssl "ocsp $server_args -reqin request3.der -respout response3.der" file exists response3.der } 0 1 test -skip {![file exists response3.der] } "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐžŅ‚Đ˛ĐĩŅ‚ ĐŊа СаĐŋŅ€ĐžŅ 3" { grep "Response .erif" [openssl "ocsp $client_args -respin response3.der"] } 0 "Response verify OK\n" test -skip {![file exists response3.der]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ŅŅ‚Đ°Ņ‚ŅƒŅ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ°" { grep "Cert Status" [openssl "ocsp -respin response3.der -text -CAfile $::test::ca/cacert.pem"] } 0 " Cert Status: good\n" test -createsfiles request4.der "Đ¤ĐžŅ€ĐŧĐ¸Ņ€ŅƒĐĩĐŧ СаĐŋŅ€ĐžŅ ҁ ГОСĐĸ-ĐžĐ˛ŅĐēиĐŧ Ņ…ŅŅˆĐžĐŧ ĐŋĐž serial" { openssl "ocsp $client_args -[hash_short_name [alg_hash $alg]] -serial 0x11E -reqout request4.der" } 0 "" test -skip {![file exists request4.der]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ OID-Ņ‹ в СаĐŋŅ€ĐžŅĐĩ 4" { extract_oids request4.der DER } 0 [mkObjList [hash_long_name $alg]] test -skip {![file exists request4.der]} -createsfiles response4.der "Đ¤ĐžŅ€ĐŧĐ¸Ņ€ŅƒĐĩĐŧ ĐžŅ‚Đ˛ĐĩŅ‚ ĐŊа СаĐŋŅ€ĐžŅ ҁ ГОСĐĸ-ĐžĐ˛ŅĐēиĐŧ Ņ…ŅŅˆĐžĐŧ" { openssl "ocsp $server_args -reqin request4.der -respout response4.der" file exists response4.der } 0 1 test -skip {![file exists response4.der] } "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐžŅ‚Đ˛ĐĩŅ‚ ĐŊа СаĐŋŅ€ĐžŅ 4" { grep "Response .erif" [openssl "ocsp $client_args -respin response4.der"] } 0 "Response verify OK\n" test -createsfiles request5.der "Đ¤ĐžŅ€ĐŧĐ¸Ņ€ŅƒĐĩĐŧ СаĐŋŅ€ĐžŅ ҁ Đ´Đ˛ŅƒĐŧŅ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ°Đŧи и Ņ€Đ°ĐˇĐŊŅ‹Đŧи Ņ…ŅŅˆĐ°Đŧи" { openssl "ocsp $client_args -[hash_short_name [alg_hash $alg]] -cert U_ocsp_$alg_fn/cert.pem -sha1 -cert U_ocsp2_$alg_fn/cert.pem -reqout request5.der" } 0 "" test -skip {![file exists request5.der]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ OID-Ņ‹ в СаĐŋŅ€ĐžŅĐĩ 5" { extract_oids request5.der DER } 0 "[mkObjList [hash_long_name $alg]] OBJECT :sha1\n" test -skip {![file exists request5.der]} -createsfiles response5.der "Đ¤ĐžŅ€ĐŧĐ¸Ņ€ŅƒĐĩĐŧ ĐžŅ‚Đ˛ĐĩŅ‚ ĐŊа СаĐŋŅ€ĐžŅ ҁ Đ´Đ˛ŅƒĐŧŅ Ņ…ŅŅˆĐ°Đŧи" { openssl "ocsp $server_args -reqin request5.der -respout response5.der" file exists response5.der } 0 1 test -skip {![file exists response5.der] } "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ĐžŅ‚Đ˛ĐĩŅ‚ ĐŊа СаĐŋŅ€ĐžŅ 5" { grep "Response .erif" [openssl "ocsp $client_args -respin response5.der"] } 0 "Response verify OK\n" test -skip {![file exists response5.der]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ ŅŅ‚Đ°Ņ‚ŅƒŅ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚oв" { grep "Cert Status" [openssl "ocsp -respin response5.der -text -CAfile $::test::ca/cacert.pem"] } 0 " Cert Status: good\n Cert Status: good\n" } end_tests libengine-gost-openssl-3.0.2/tcl_tests/oidfile000066400000000000000000000060171446070765000214620ustar00rootroot000000000000001.2.643.2.2.9 hash_94 GOST hash_94 1.2.643.2.2.9 1.2.643.7.1.1.2.2 hash_12_256 GOST hash_12_256 1.2.643.7.1.1.2.2 1.2.643.7.1.1.2.3 hash_12_512 GOST hash_12_512 1.2.643.7.1.1.2.3 1.2.643.2.2.30.1 param_hash_94 GOST param_hash_94 1.2.643.2.2.30.1 1.2.643.2.2.21 crypt89_cc GOST crypt89_cc 1.2.643.2.2.21 1.2.643.2.2.22 mac89 GOST mac89 1.2.643.2.2.22 1.2.643.2.9.1.6.1 param_encr_cc GOST param_encr_cc 1.2.643.2.9.1.6.1 1.2.643.2.2.31.0 param_encr_cptest GOST param_encr_cptest 1.2.643.2.2.31.0 1.2.643.2.2.31.1 param_encr_cpa GOST param_encr_cpa 1.2.643.2.2.31.1 1.2.643.2.2.31.2 param_encr_cpb GOST param_encr_cpb 1.2.643.2.2.31.2 1.2.643.2.2.31.3 param_encr_cpc GOST param_encr_cpc 1.2.643.2.2.31.3 1.2.643.2.2.31.4 param_encr_cpd GOST param_encr_cpd 1.2.643.2.2.31.4 1.2.643.7.1.2.5.1.1 param_encr_tc GOST param_encr_tc 1.2.643.7.1.2.5.1.1 1.2.643.2.2.4 hash_with_sign94_cp GOST hash_with_sign94_cp 1.2.643.2.2.4 1.2.643.2.9.1.3.3 hash_with_sign94_cc GOST hash_with_sign94_cc 1.2.643.2.9.1.3.3 1.2.643.2.2.3 hash_with_sign01_cp GOST hash_with_sign01_cp 1.2.643.2.2.3 1.2.643.2.9.1.3.4 hash_with_sign01_cc GOST hash_with_sign01_cc 1.2.643.2.9.1.3.4 1.2.643.7.1.1.3.2 hash_with_sign12_256 GOST hash_with_sign12_256 1.2.643.7.1.1.3.2 1.2.643.7.1.1.3.3 hash_with_sign12_512 GOST hash_with_sign12_512 1.2.643.7.1.1.3.3 1.2.643.2.2.20 pk_sign94_cp GOST pk_sign94_cp 1.2.643.2.2.20 1.2.643.2.9.1.5.3 pk_sign94_cc GOST pk_sign94_cc 1.2.643.2.9.1.5.3 1.2.643.2.2.19 pk_sign01_cp GOST pk_sign01_cp 1.2.643.2.2.19 1.2.643.2.9.1.5.4 pk_sign01_cc GOST pk_sign01_cc 1.2.643.2.9.1.5.4 1.2.643.7.1.1.1.1 pk_sign12_256 GOST pk_sign12_256 1.2.643.7.1.1.1.1 1.2.643.7.1.1.1.2 pk_sign12_512 GOST pk_sign12_512 1.2.643.7.1.1.1.2 1.2.643.2.2.32.2 param_pubkey94_cpa GOST param_pubkey94_cpa 1.2.643.2.2.32.2 1.2.643.2.2.32.3 param_pubkey94_cpb GOST param_pubkey94_cpb 1.2.643.2.2.32.3 1.2.643.2.2.32.4 param_pubkey94_cpc GOST param_pubkey94_cpc 1.2.643.2.2.32.4 1.2.643.2.2.32.5 param_pubkey94_cpd GOST param_pubkey94_cpd 1.2.643.2.2.32.5 1.2.643.2.2.33.1 param_pubkey94_cpxcha GOST param_pubkey94_cpxcha 1.2.643.2.2.33.1 1.2.643.2.2.33.2 param_pubkey94_cpxchb GOST param_pubkey94_cpxchb 1.2.643.2.2.33.2 1.2.643.2.2.33.3 param_pubkey94_cpxchc GOST param_pubkey94_cpxchc 1.2.643.2.2.33.3 1.2.643.2.2.35.0 param_pubkey01_cptest GOST param_pubkey01_cptest 1.2.643.2.2.35.0 1.2.643.2.2.35.1 param_pubkey01_cpa GOST param_pubkey01_cpa 1.2.643.2.2.35.1 1.2.643.2.2.35.2 param_pubkey01_cpb GOST param_pubkey01_cpb 1.2.643.2.2.35.2 1.2.643.2.2.35.3 param_pubkey01_cpc GOST param_pubkey01_cpc 1.2.643.2.2.35.3 1.2.643.2.2.36.0 param_pubkey01_cpxcha GOST param_pubkey01_cpxcha 1.2.643.2.2.36.0 1.2.643.2.2.36.1 param_pubkey01_cpxchb GOST param_pubkey01_cpxchb 1.2.643.2.2.36.1 1.2.643.2.9.1.8.1 param_pubkey01_cc GOST param_pubkey01_cc 1.2.643.2.9.1.8.1 1.2.643.7.1.2.1.2.0 param_pubkey12_512_0 GOST param_pubkey12_512_0 1.2.643.7.1.2.1.2.0 1.2.643.7.1.2.1.2.1 param_pubkey12_512_A GOST param_pubkey12_512_A 1.2.643.7.1.2.1.2.1 1.2.643.7.1.2.1.2.2 param_pubkey12_512_B GOST param_pubkey12_512_B 1.2.643.7.1.2.1.2.2 libengine-gost-openssl-3.0.2/tcl_tests/openssl-gost.cnf000066400000000000000000000002431446070765000232440ustar00rootroot00000000000000openssl_conf = openssl_def [openssl_def] engines = engine_section [engine_section] gost = gost_section [gost_section] engine_id = gost default_algorithms = ALL libengine-gost-openssl-3.0.2/tcl_tests/opnssl.sh000077500000000000000000000004171446070765000217770ustar00rootroot00000000000000#!/bin/bash export HSTNME=`hostname` if test $HSTNME = tls-ref-cp10; then ossl=/usr/bin/openssl; fi if test $HSTNME = tls-ref-cp20; then ossl=/opt/cryptopack2/bin/openssl; fi if test $HSTNME = tls-ref-cp21; then ossl=/opt/cryptopack2/bin/openssl; fi $ossl $* exit $? libengine-gost-openssl-3.0.2/tcl_tests/ossltest.tcl000066400000000000000000001032371446070765000225120ustar00rootroot00000000000000# # Đ Đ°ŅŅˆĐ¸Ņ€ĐĩĐŊиĐĩ ĐŋаĐēĐĩŅ‚Đ° test Đ´ĐģŅ OpenSSL # package require http # ĐŸŅƒŅ‚ŅŒ ĐŋĐžĐ¸ŅĐēа ĐŋаĐēĐĩŅ‚Đ° test if {[info exists env(TOOLDIR)]} { lappend auto_path $env(TOOLDIR) } { lappend auto_path "[file dirname [info script]]/../../maketool" } # outputs specified environment variables into log proc log_vars {args} { foreach var $args { if [info exists ::env($var)] { log $var=$::env($var) } else { log "$var is not set" } } } # ĐŸŅ€ĐžĐ˛ĐĩŅ€Đēа ĐŊаĐģĐ¸Ņ‡Đ¸Ņ ĐŊĐĩĐžĐąŅ…ĐžĐ´Đ¸Đŧҋ҅ ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊҋ҅ ĐžĐēŅ€ŅƒĐļĐĩĐŊĐ¸Ņ foreach var {OPENSSL_APP} { if {![info exists env($var)]} { puts stderr "Environment variable $var not defined" exit 100 } else { set $var [file normalize $env($var)] } } if {[info exists env(OPENSSL_CONF)]} { set OPENSSL_CONF $env(OPENSSL_CONF) } else { if {[regexp {OPENSSLDIR: "([^\"]+)"} [exec $OPENSSL_APP version -d] => openssl_dir]} { set OPENSSL_CONF $openssl_dir/openssl.cnf } else { puts stderr "Cannot find out default openssl config" exit 100 } } if {![file exists $OPENSSL_CONF]} { puts "Configuration file $OPENSSL_CONF doesn't exist" exit 100 } if {$::tcl_platform(platform) != "windows"} { proc kill {signal pid} { exec kill -$signal $pid } } else { proc kill {signal pid} { exec taskkill /pid $pid /f } } package require test set test::suffix "" package require base64 # # set up test::src variable # if {[info exists env(TESTSRC)]} { set ::test::src [file normalize $env(TESTSRC)] } else { set ::test::src [pwd] } # # set up test::dir variable # if {[info exists env(TESTDIR)]} { set ::test::dir [file normalize $env(TESTDIR)] } else { set ::test::dir [file join [pwd] z] } # # ФиĐģŅŒŅ‚Ņ€ŅƒĐĩŅ‚ Đ˛Ņ‹Đ˛ĐžĐ´ ĐŋĐžĐģŅƒŅ‡ĐĩĐŊĐŊŅ‹Đš в видĐĩ Đ´ĐģиĐŊĐŊОК ŅŅ‚Ņ€ĐžĐēи, Ņ€Đ°ĐˇĐąĐ¸Đ˛Đ°Ņ ĐŊа ŅŅ‚Ņ€ĐžĐēи # ĐŋĐž \n. Đ’ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ ŅŅ‚Ņ€ĐžĐēи, ŅƒĐ´ĐžĐ˛ĐģĐĩŅ‚Đ˛ĐžŅ€ŅŅŽŅ‰Đ¸Đĩ Ņ€ĐĩĐŗŅƒĐģŅŅ€ĐŊĐžĐŧ҃ Đ˛Ņ‹Ņ€Đ°ĐļĐĩĐŊĐ¸Ņƒ # pattern # proc grep {pattern data} { set out "" foreach line [split $data "\n"] { if {[regexp $pattern $line]} { append out $line "\n" } } return $out } proc check_builtin_engine {} { global OPENSSL_APP set found [regexp Cryptocom [exec $OPENSSL_APP engine 2> /dev/null]] if {$found} { puts "Using statically compiled engine" } else { puts "Using dynamically loaded engine" } return $found } # Đ’Ņ‹ĐˇŅ‹Đ˛Đ°ĐĩŅ‚ ĐēĐžĐŧаĐŊĐ´Ņƒ openssl. # ĐŸĐžŅŅ‹ĐģаĐĩŅ‚ в ĐģĐžĐŗ Đ˛Ņ‹Đ˛ĐžĐ´ ĐŊа stdout и ĐŊа stderr, Đ˛ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ ĐĩĐŗĐž ĐļĐĩ. proc openssl {cmdline} { global ENGINE_PATH OPENSSL_APP log_vars OPENSSL_CONF CRYPT_PARAMS RNG RNG_PARAMS CCENGINE_LICENSE if {[info exists ::test::engine]} { set cmdline [concat [lrange $cmdline 0 0] [list -engine $::test::engine] [lrange $cmdline 1 end]] } log "OpenSSL cmdline: $OPENSSL_APP $cmdline" set f [open "|$OPENSSL_APP $cmdline" r] set output [read $f] if {[catch {close $f} msg]} { append output "STDERR CONTENTS:\n$msg" log $output if {[lindex $::errorCode 0]!="NONE"} { return -code error -errorcode $::errorCode $output } } return $output } proc getConfig {args} { global OPENSSL_CONF if {![info exists OPENSSL_CONF]} { if {![regexp "OPENSSLDIR: \"\[^\"\]+\"" [openssl version -d] => openssl_dir]} { puts stderr "Cannot find out openssl directory" exit 1 } set OPENSSL_CONF "$openssl_dir/openssl.cnf" } set f [open $OPENSSL_CONF r] set out "" set mode copy while {[gets $f line]>=0} { if {[regexp "\\s*\\\[\\s*(\\S+)\\s*\\\]" $line => section]} { if {[lsearch -exact $args $section]!=-1} { set mode skip } else { set mode copy } } if {$mode eq "copy"} { append out $line \n } } return $out } # # ХОСдаĐĩŅ‚ Ņ‚ĐĩŅŅ‚ĐžĐ˛Ņ‹Đš CA # ДоĐŋŅƒŅŅ‚Đ¸ĐŧŅ‹Đĩ ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ: # CAname - Đ´Đ¸Ņ€ĐĩĐēŅ‚ĐžŅ€Đ¸Ņ, в ĐēĐžŅ‚ĐžŅ€ĐžĐš ŅĐžĐˇĐ´Đ°ĐĩŅ‚ŅŅ CA (testCA ĐŋĐž ҃ĐŧĐžĐģŅ‡Đ°ĐŊĐ¸ŅŽ) # аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ ҁ ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Đ°Đŧи в Ņ„ĐžŅ€ĐŧĐ°Ņ‚Đĩ ĐēĐžĐŧаĐŊĐ´Ņ‹ req # proc makeCA {{CAname {}} {algor_with_par gost2012_512:A}} { global OPENSSL_CONF if {![string length $CAname]} { set CAname [file rootname [file tail $::argv0]]CA-2012 } set test::ca $CAname file delete -force $CAname file mkdir $CAname makeFile $CAname/ca.conf " \[ ca \] default_ca = CA_default # The default ca section \[ CA_default \] dir = [file join [pwd] $CAname] # top dir database = \$dir/index.txt # index file. new_certs_dir = \$dir/newcerts # new certs dir certificate = \$dir/cacert.pem # The CA cert serial = \$dir/serial # serial no file private_key = \$dir/private/cakey.pem# CA private key RANDFILE = \$dir/private/.rand # random number file default_days = 3650 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = default # use digest corresponding the algorithm default_startdate = 060101000000Z policy = policy_any # default policy email_in_dn = yes # add the email into cert D nameopt = ca_default # Subject name display option certopt = ca_default # Certificate display option copy_extensions = copy # Copy extensions from requ \[ policy_any \] countryName = supplied stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = supplied " makeFile $CAname/req.conf " \[req\] prompt=no distinguished_name = req_dn \[ req_dn \] C = RU L = Moscow CN=Test CA $algor_with_par O=Cryptocom OU=OpenSSL CA emailAddress = openssl@cryptocom.ru \[ v3_ca \] # Extensions for a typical CA # PKIX recommendation. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = critical,CA:true # Key usage: this is typical for a CA certificate. However since it will # prevent it being used as an test self-signed certificate it is best # left out by default. # keyUsage = cRLSign, keyCertSign # Include email address in subject alt name: another PKIX recommendation # subjectAltName=email:copy # Copy issuer details # issuerAltName=issuer:copy # DER hex encoding of an extension: beware experts only! # obj=DER:02:03 # Where 'obj' is a standard or added object # You can even override a supported extension: # basicConstraints= critical, DER:30:03:01:01:FF " file mkdir $CAname/private file mkdir $CAname/newcerts generate_key [keygen_params $algor_with_par] $CAname/private/cakey.pem openssl "req -new -x509 -key $CAname/private/cakey.pem -nodes -out $CAname/cacert.pem -config $CAname/req.conf -reqexts v3_ca -set_serial 0x11E" makeFile ./$CAname/.rand 1234567890 makeFile ./$CAname/serial 011E makeFile ./$CAname/index.txt "" return [file isfile $CAname/cacert.pem] } proc extract_oids {filename {format PEM} {offset 0}} { set out "" if {$offset} { set miscargs "-offset $offset " } else { set miscargs "" } foreach line [split [openssl "asn1parse $miscargs-in $filename -inform $format -oid oidfile"] "\n"] { if {([regexp {Gost\d+} $line]||[regexp "GostR" $line]||[regexp "GOST" $line]||[regexp "sha1" $line]) && ![regexp ^Loaded: $line]} { regsub {[^:]+:[^:]+:} $line "" line append out $line "\n" } } return $out } # # Đ¤ĐžŅ€ĐŧĐ¸Ņ€ŅƒĐĩŅ‚ ҁĐŋĐ¸ŅĐžĐē ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€ĐžĐ˛ Đ´ĐģŅ openssl req ĐŊĐĩĐžĐąŅ…ĐžĐ´Đ¸ĐŧŅ‹Đš Đ´ĐģŅ Ņ„ĐžŅ€ĐŧĐ¸Ņ€ĐžĐ˛Đ°ĐŊĐ¸Ņ # ĐēĐģŅŽŅ‡Đ° c ҃ĐēаСаĐŊĐŊŅ‹Đŧ аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ и ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Đ°Đŧи # proc keygen_params {alg} { return [split $alg :] } proc generate_key {params filename} { set alg [lindex $params 0] set param [lindex $params 1] set keyname $alg set keyname [append keyname _ $param .pem] switch -glob $alg { rsa { if {![string length $param]} { set param 1024 set keyname "rsa_1024.pem" } set optname "-algorithm rsa -pkeyopt rsa_keygen_bits:$param" } ec {set optname "-paramfile $param"} dsa {set optname "-paramfile $param" } gost* { set optname "-algorithm $alg -pkeyopt paramset:$param" } } if {$::tcl_platform(platform) eq "windows"} { set exesuffix ".exe" } else { set exesuffix "" } log "Keyname is $keyname" # if {[engine_name] eq "open"} { log "Calling openssl cmd to create private key" openssl "genpkey $optname -out $filename" # } elseif {[info exists ::env(OBJ)] && [file executable ../$::env(OBJ)/keytest$exesuffix]&& $alg eq "gost2001"} { # log "keytest$exesuffix $alg $param $filename" # exec ../$::env(OBJ)/keytest$exesuffix $alg $param $filename >&@ stdout # } elseif {[info exists ::env(OBJ)] && [file executable ../$::env(OBJ)/keytest$exesuffix]&& $alg eq "gost2012_256"} { # log "keytest$exesuffix $alg $param $filename" # exec ../$::env(OBJ)/keytest$exesuffix $alg $param $filename >&@ stdout # } elseif {[info exists ::env(OBJ)] && [file executable ../$::env(OBJ)/keytest$exesuffix]&& $alg eq "gost2012_512"} { # log "keytest$exesuffix $alg $param $filename" # exec ../$::env(OBJ)/keytest$exesuffix $alg $param $filename >&@ stdout # } elseif {[info exists ::env(PRIVATEKEYSDIR)] && [file exists $::env(PRIVATEKEYSDIR)/$keyname]} { # log "Copying file $keyname" # file copy $::env(PRIVATEKEYSDIR)/$keyname $filename # } else { # log "Calling openssl cmd to create private key" # openssl "genpkey $optname -out $filename" # } } # # ХОСдаĐĩŅ‚ Ņ‚ĐĩŅŅ‚ĐžĐ˛ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ҁ ОдĐŊиĐŧ ĐēĐģŅŽŅ‡ĐžĐŧ ĐŋОдĐŋĐ¸ŅĐ¸ и ОдĐŊОК ĐˇĐ°ŅĐ˛ĐēОК # ĐŊа ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚. # ĐŸĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ # username ИĐŧŅ Đ´Đ¸Ņ€ĐĩĐēŅ‚ĐžŅ€Đ¸Đ¸, ĐēŅƒĐ´Đ° ҁĐēĐģĐ°Đ´Ņ‹Đ˛Đ°Ņ‚ŅŒ Ņ„Đ°ĐšĐģŅ‹ ŅŅ‚ĐžĐŗĐž ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ # alg ĐŸĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ Đ´ĐģŅ ĐžĐŋŅ†Đ¸Đ¸ -newkey ĐēĐžĐŧаĐŊĐ´Ņ‹ openssl req, ĐˇĐ°Đ´Đ°ŅŽŅ‰Đ¸Đš аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ # ĐēĐģŅŽŅ‡Đ° и ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ ŅŅ‚ĐžĐŗĐž аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧа # ĐŸĐžŅĐģĐĩĐ´ŅƒŅŽŅ‰Đ¸Đĩ ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ иĐŧĐĩŅŽŅ‚ вид ҁĐŋĐ¸ŅĐēа ĐēĐģŅŽŅ‡ СĐŊĐ°Ņ‡ĐĩĐŊиĐĩ и ĐˇĐ°Đ´Đ°ŅŽŅ‚ ĐŋĐžĐģŅ # Distinguished Name # FIXME ĐŸŅ€ĐžŅ†ĐĩĐ´ŅƒŅ€Ņƒ ĐŊадО ĐŋĐžĐŋŅ€Đ°Đ˛Đ¸Ņ‚ŅŒ, Ņ‡Ņ‚ĐžĐąŅ‹ Ņ€Đ°ĐąĐžŅ‚Đ°Đģа ҁ ĐŊОвОК вĐĩŅ€ŅĐ¸ĐĩĐš openssl proc makeUser {username alg args} { file delete -force $username file mkdir $username if {[lsearch $args CN]==-1} { lappend args CN $username } makeFile $username/req.conf [eval makeConf $args] log "req.conf --------\n[getFile $username/req.conf]-------------" generate_key [keygen_params $alg] $username/seckey.pem openssl "req -new -key $username/seckey.pem -nodes -out $username/req.pem -config $username/req.conf" return [expr {[file size $username/req.pem] > 0}] } proc makeSecretKey {username alg} { file delete -force $username file mkdir $username generate_key [keygen_params $alg] $username/seckey.pem return [expr {[file size $username/seckey.pem] > 0}] } # # ХОСдаĐĩŅ‚ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅ ҁ ĐŋĐžĐŧĐžŅ‰ŅŒŅŽ makeUser и ĐŋОдĐŋĐ¸ŅŅ‹Đ˛Đ°ĐĩŅ‚ ĐĩĐŗĐž ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ # ĐēĐģŅŽŅ‡ĐžĐŧ Ņ€Đ°ĐŊĐĩĐĩ ŅĐžĐˇĐ´Đ°ĐŊĐŊĐžĐŗĐž testCA. # ĐŸĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ CAname ĐžĐąŅ€Đ°ĐąĐ°Ņ‚Ņ‹Đ˛Đ°ĐĩŅ‚ŅŅ ҁĐŋĐĩŅ†Đ¸Đ°ĐģҌĐŊŅ‹Đŧ ĐžĐąŅ€Đ°ĐˇĐžĐŧ: ĐžĐŊ ĐŊĐĩ ĐŋĐžĐŋадаĐĩŅ‚ в DN # proc makeRegisteredUser {username alg args } { if {![info exists params(CAname)]&&![info exists ::test::ca]} { return -code error "Default CA name is not known. Have you called makeCA earlier in this script?" } set CAname $test::ca array set params $args if {[info exist params(CAname)]} { set CAname $params(CAname) unset params(CAname) } if {![file isdirectory $CAname]||![file exists $CAname/cacert.pem]} { return -code error "CA $CAname doesn't exists" } eval makeUser [list $username $alg] [array get params] openssl "ca -config $CAname/ca.conf -in $username/req.pem -out $username/cert.pem -batch -notext" return [file isfile $username/cert.pem] } proc makeConf {args} { global OPENSSL_CONF array set dn_attrs [list C RU\ L Moscow\ CN "Dummy user"\ O Cryptocom\ OU "OpenSSL Team"\ emailAddress "openssl@cryptocom.ru"\ ] array set dn_attrs $args if {[info exists dn_attrs(extensions)]} { set extensions $dn_attrs(extensions) unset dn_attrs(extensions) } set out "" append out {[req] prompt=no distinguished_name = req_dn } if {[info exists extensions]} { append out "req_extensions = req_exts\n\[ req_exts \]\n" $extensions "\n" } append out "\[ req_dn \]\n" foreach {key val} [array get dn_attrs] { append out "$key=$val\n" } return $out } # # Đ’Ņ‹ĐŋĐžĐģĐŊŅĐĩŅ‚ СаĐŧĐĩĐŊ҃ Ņ€ĐĩĐŗŅƒĐģŅŅ€ĐŊĐžĐŗĐž Đ˛Ņ‹Ņ€Đ°ĐļĐĩĐŊĐ¸Ņ re ĐŊа ŅŅ‚Ņ€ĐžĐē҃ s в ҃ĐēаСаĐŊĐŊĐžĐŧ # PEM-Đ´ĐžĐē҃ĐŧĐĩĐŊŅ‚Đĩ. # proc hackPem {re pem s} { set out "" foreach {whole_pem start_line coded_body end_line} [regexp -inline -all "(-----BEGIN \[^\n\]+-----\n)(.*?)(\n-----END \[^\n\]+-----\n)" $pem] { set der [::base64::decode $coded_body] set der [regsub -all $re $der $s] append out $start_line [::base64::encode $der] $end_line } return $out } # # Handling of OIDs # source [file dirname [info script]]/name2oid.tcl foreach {name oid} [array get name2oid] { set oid2name($oid) $name } proc long_name_by_id {id} { variable name2oid variable oid2name if {[regexp {^\d+(\.\d+)+$} $id]} { return "GOST $oid2name($id) $id" } return "GOST $id $name2oid($id)" } proc alg_id {alg} { switch -glob $alg { gost94cc {return pk_sign94_cc} gost94cc:* {return pk_sign94_cc} gost94:* {return pk_sign94_cp} gost2001cc:* {return pk_sign01_cc} gost2001cc {return pk_sign01_cc} gost2001:* {return pk_sign01_cp} gost2012_256:* {return pk_sign12_256} gost2012_512:* {return pk_sign12_512} } } proc alg_with_digest {alg} { variable name2oid switch -glob $alg { gost94cc {return hash_with_sign94_cc} gost94cc:* {return hash_with_sign94_cc} gost94:* {return hash_with_sign94_cp} gost2001cc:* {return hash_with_sign01_cc} gost2001cc {return hash_with_sign01_cc} gost2001:* {return hash_with_sign01_cp} gost2012_256:* {return hash_with_sign12_256} gost2012_512:* {return hash_with_sign12_512} } } proc alg_long_name {alg} { variable name2oid switch -glob $alg { #gost94cc {return hash_with_sign94_cc} #gost94cc:* {return hash_with_sign94_cc} #gost94:* {return hash_with_sign94_cp} #gost2001cc:* {return hash_with_sign01_cc} #gost2001cc {return hash_with_sign01_cc} gost2001:* {return "GOST R 34.10-2001"} gost2012_256:* {return "GOST R 34.10-2012 with 256 bit modulus"} gost2012_512:* {return "GOST R 34.10-2012 with 512 bit modulus"} } } # Returns hash algorithm corresponded to sign algorithm proc alg_hash {alg} { switch -glob $alg { gost2012_256:* {return hash_12_256} gost2012_512:* {return hash_12_512} * {return hash_94} } } # Returns short name of hash algorithm proc hash_short_name {hash_alg} { switch -glob $hash_alg { *hash_94 {return md_gost94} hash_12_256 {return md_gost12_256} hash_12_512 {return md_gost12_512} default {return $hash_alg} } } proc ts_hash_long_name {hash_alg} { switch -glob $hash_alg { *hash_94 {return md_gost94} hash_12_256 {return md_gost12_256} hash_12_512 {return md_gost12_512} default {return $hash_alg} } } # Returns long name of hash algorithm proc hash_long_name {hash_alg} { switch -glob $hash_alg { *hash_94* {return "GOST R 34.11-94"} gost2001* {return "GOST R 34.11-94"} *12_256* {return "GOST R 34.11-2012 with 256 bit hash"} *12_512* {return "GOST R 34.11-2012 with 512 bit hash"} default {return $hash_alg} } } # Returns long name of hash_with_sign algorithm proc hash_with_sign_long_name {alg} { switch -glob $alg { gost2001:* {return "GOST R 34.11-94 with GOST R 34.10-2001"} gost2012_256:* {return "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)"} gost2012_512:* {return "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)"} default {return $alg} } } proc smime_hash_with_sign_long_name {alg} { switch -glob $alg { hash_with_sign01_cp {return "GOST R 34.11-94 with GOST R 34.10-2001"} hash_with_sign12_256 {return "GOST R 34.10-2012 with GOST R 34.11-2012 (256 bit)"} hash_with_sign12_512 {return "GOST R 34.10-2012 with GOST R 34.11-2012 (512 bit)"} default {return $alg} } } proc micalg {hash_alg} { switch -exact $hash_alg { hash_94 {return "gostr3411-94"} hash_12_256 {return "gostr3411-2012-256"} hash_12_512 {return "gostr3411-2012-512"} } } proc param_pubkey {alg} { variable name2oid switch -exact $alg { gost94cc: {return param_pubkey94_cpa} gost94cc {return param_pubkey94_cpa} gost94:A {return param_pubkey94_cpa} gost94:B {return param_pubkey94_cpb} gost94:C {return param_pubkey94_cpc} gost94:D {return param_pubkey94_cpd} gost94:XA {return param_pubkey94_cpxcha} gost94:XB {return param_pubkey94_cpxchb} gost94:XC {return param_pubkey94_cpxchc} gost2001cc: {return param_pubkey01_cc} gost2001cc {return param_pubkey01_cc} gost2001:0 {return param_pubkey01_cptest} gost2001:A {return param_pubkey01_cpa} gost2001:B {return param_pubkey01_cpb} gost2001:C {return param_pubkey01_cpc} gost2001:XA {return param_pubkey01_cpxcha} gost2001:XB {return param_pubkey01_cpxchb} gost2012_256:0 {return param_pubkey01_cptest} gost2012_256:A {return param_pubkey01_cpa} gost2012_256:B {return param_pubkey01_cpb} gost2012_256:C {return param_pubkey01_cpc} gost2012_256:XA {return param_pubkey01_cpxcha} gost2012_256:XB {return param_pubkey01_cpxchb} gost2012_512:0 {return param_pubkey12_512_0} gost2012_512:A {return param_pubkey12_512_A} gost2012_512:B {return param_pubkey12_512_B} } } proc param_hash_long_name {hash_alg {pk_alg {}}} { # R 1323565.1.023-2018 (5.2.1.2) not recommends or forbids encoding # hash oid into TC26 (2012) parameters in AlgorithmIdentifier, so # this is removed. # Note: # Commit d47b346 reverts this behavior for 512-bit 0,A,B parameters switch -glob $pk_alg { gost2012_256:TC* {return} gost2012_512:C {return} } switch -glob $hash_alg { *hash_94 {return "id-GostR3411-94-CryptoProParamSet"} hash_12_256 {return "GOST R 34.11-2012 with 256 bit hash"} hash_12_512 {return "GOST R 34.11-2012 with 512 bit hash"} } } proc pubkey_long_name {alg} { variable name2oid switch -glob $alg { #gost2001cc: {return param_pubkey01_cc} #gost2001cc {return param_pubkey01_cc} #gost2001:0 {return param_pubkey01_cptest} gost2001:A {return "id-GostR3410-2001-CryptoPro-A-ParamSet"} gost2001:B {return "id-GostR3410-2001-CryptoPro-B-ParamSet"} gost2001:C {return "id-GostR3410-2001-CryptoPro-C-ParamSet"} gost2001:XA {return "id-GostR3410-2001-CryptoPro-XchA-ParamSet"} gost2001:XB {return "id-GostR3410-2001-CryptoPro-XchB-ParamSet"} gost2012_256:0 {return "id-GostR3410-2001-TestParamSet"} gost2012_256:A {return "id-GostR3410-2001-CryptoPro-A-ParamSet"} gost2012_256:B {return "id-GostR3410-2001-CryptoPro-B-ParamSet"} gost2012_256:C {return "id-GostR3410-2001-CryptoPro-C-ParamSet"} gost2012_256:XA {return "id-GostR3410-2001-CryptoPro-XchA-ParamSet"} gost2012_256:XB {return "id-GostR3410-2001-CryptoPro-XchB-ParamSet"} gost2012_256:TCA {return "GOST R 34.10-2012 (256 bit) ParamSet A"} gost2012_256:TCB {return "GOST R 34.10-2012 (256 bit) ParamSet B"} gost2012_256:TCC {return "GOST R 34.10-2012 (256 bit) ParamSet C"} gost2012_256:TCD {return "GOST R 34.10-2012 (256 bit) ParamSet D"} #gost2012_512:0 {return param_pubkey12_512_0} gost2012_512:A {return "GOST R 34.10-2012 (512 bit) ParamSet A"} gost2012_512:B {return "GOST R 34.10-2012 (512 bit) ParamSet B"} gost2012_512:C {return "GOST R 34.10-2012 (512 bit) ParamSet C"} } } proc mkObjList {args} { set out "" foreach name $args { if {$name eq {}} continue append out " OBJECT :$name\n" } return $out } proc structured_obj_list {args} { variable name2oid set out {} foreach {path name} $args { if {$name != {}} {set oid $name2oid($name)} {set oid {}} lappend out "$path=$oid" } return $out } proc param_hash {alg} { switch -glob $alg { gost2012_256:* {return hash_12_256} gost2012_512:* {return hash_12_512} * {return param_hash_94} } } proc param_encr {short_name} { variable name2oid if {[regexp {^\d+(\.\d+)+$} $short_name]} { return "$short_name" } switch -exact $short_name { cc_cipher_param {return param_encr_cc} {} {return param_encr_tc} cp_cipher_param_a {return param_encr_cpa} cp_cipher_param_b {return param_encr_cpb} cp_cipher_param_c {return param_encr_cpc} cp_cipher_param_d {return param_encr_cpd} } } proc encr_long_name {short_name} { variable name2oid switch -exact $short_name { "1.2.643.2.2.31.1" {return "id-Gost28147-89-CryptoPro-A-ParamSet"} "1.2.643.2.2.31.2" {return "id-Gost28147-89-CryptoPro-B-ParamSet"} "1.2.643.2.2.31.3" {return "id-Gost28147-89-CryptoPro-C-ParamSet"} "1.2.643.2.2.31.4" {return "id-Gost28147-89-CryptoPro-D-ParamSet"} "1.2.643.7.1.2.5.1.1" {return "GOST 28147-89 TC26 parameter set"} {} {return "GOST 28147-89 TC26 parameter set"} } } # # Đ¤ŅƒĐŊĐēŅ†Đ¸Đ¸ Đ´ĐģŅ ҃ĐŋŅ€Đ°Đ˛ĐģĐĩĐŊĐ¸Ņ ĐēĐģиĐĩĐŊŅ‚ĐžĐŧ и ҁĐĩŅ€Đ˛ĐĩŅ€ĐžĐŧ ĐŋŅ€Đ¸ Ņ‚ĐĩŅŅ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊии # SSL-ŅĐžĐĩдиĐŊĐĩĐŊĐ¸Ņ # # ĐŸĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ # ĐĄĐŋĐ¸ŅĐžĐē Đ°Ņ€ĐŗŅƒĐŧĐĩĐŊŅ‚ĐžĐ˛ ĐēĐžĐŧаĐŊĐ´ĐŊОК ŅŅ‚Ņ€ĐžĐēи ĐēĐģиĐĩĐŊŅ‚Đ° # ҁĐŋĐ¸ŅĐžĐē Đ°Ņ€ĐŗŅƒĐŧĐĩĐŊŅ‚ĐžĐ˛ ĐēĐžĐŧаĐŊĐ´ĐŊОК ŅŅ‚Ņ€ĐžĐēи ҁĐĩŅ€Đ˛ĐĩŅ€Đ° # ŅŅ‚Ņ€ĐžĐēа, ĐēĐžŅ‚ĐžŅ€ŅƒŅŽ ĐŊадО ĐŋĐĩŅ€ĐĩĐ´Đ°Ņ‚ŅŒ ĐŊа stdin ĐēĐģиĐĩĐŊŅ‚Ņƒ # # ЗаĐŋ҃ҁĐēаĐĩŅ‚ openssl s_server и ĐŋŅ‹Ņ‚Đ°ĐĩŅ‚ŅŅ ĐŋŅ€Đ¸ĐēĐžĐŊĐŊĐĩĐēŅ‚Đ¸Ņ‚ŅŒŅŅ Đē ĐŊĐĩĐŧ҃ openssl # s_client-ĐžĐŧ. Đ’ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ ҁĐŋĐ¸ŅĐžĐē stdout ĐēĐģиĐĩĐŊŅ‚Đ°, stderr ĐēĐģиĐĩĐŊŅ‚Đ°, ĐēОда # СавĐĩŅ€ŅˆĐĩĐŊĐ¸Ņ ĐēĐģиĐĩĐŊŅ‚Đ°, stdout # ҁĐĩŅ€Đ˛ĐĩŅ€Đ° stderr ҁĐĩŅ€Đ˛ĐĩŅ€Đ° и ĐēОда СавĐĩŅ€ŅˆĐĩĐŊĐ¸Ņ ҁĐĩŅ€Đ˛ĐĩŅ€Đ°. # # Đ•ŅĐģи ĐŋŅ€ĐžŅ†Đĩҁҁ ŅƒĐąĐ¸Ņ‚ ŅĐ¸ĐŗĐŊаĐģĐžĐŧ, Đ˛ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ в ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đĩ ĐēОда СавĐĩŅ€ŅˆĐĩĐŊĐ¸Ņ иĐŧŅ # ŅĐ¸ĐŗĐŊаĐģа, иĐŊĐ°Ņ‡Đĩ - Ņ‡Đ¸ŅĐģОвОĐĩ СĐŊĐ°Ņ‡ĐĩĐŊиĐĩ ĐēОда СавĐĩŅ€ŅˆĐĩĐŊĐ¸Ņ ОС # proc client_server {client_args server_args client_stdin} { log "CLIENT ARGS\n$client_args\n" log "SERVER ARGS\n$server_args\n" flush [test_log] set server [open_server $server_args] set client [open_client $client_args $client_stdin] log "server = $server client = $client" log "Both client and server started" flush [test_log] global finished log "Waitng for client to termintate" flush [test_log] # if {$::tcl_platform(platform) == "windows"} { # exec ../kbstrike [pid $client] 0x20 # } vwait finished($client) catch {stop_server $server} set list [concat [stop $client] [stop $server]] foreach channel {"CLIENT STDOUT" "CLIENT STDERR" "CLIENT EXIT CODE" "SERVER STDOUT" "SERVER STDERR" "SERVER EXIT CODE"} data $list { log "$channel\n$data\n" } return $list } # # ĐŖŅŅ‚Đ°ĐŊавĐģиваĐĩŅ‚ ĐēĐžĐŧаĐŊĐ´ĐŊŅƒŅŽ ŅŅ‚Ņ€ĐžĐē҃ Đ´ĐģŅ Đ˛Ņ‹ĐˇĐžĐ˛Đ° ĐēĐģиĐĩĐŊŅ‚Đ°, # в ŅĐ¸ŅŅ‚ĐĩĐŧĐŊŅ‹Đš openssl ĐŊа ҃ĐēаСаĐŊĐŊĐžĐŧ Ņ…ĐžŅŅ‚Đĩ # proc remote_client {host} { if {[info hostname] == "$host"} { set ::test::client_unset {OPENSSL_CONF} set ::test::client_app "openssl s_client" } else { set ::test::client_unset {LD_LIBRARY_PATH OPENSSL_CONF} set ::test::client_app "ssh build@$host openssl s_client" } } # # ĐŖŅŅ‚Đ°ĐŊавĐģиваĐĩŅ‚ ĐēĐžĐŧаĐŊĐ´ĐŊŅƒŅŽ ŅŅ‚Ņ€ĐžĐē҃ Đ´ĐģŅ Đ˛Ņ‹ĐˇĐžĐ˛Đ° ĐēĐģиĐĩĐŊŅ‚Đ° в ҃ĐēаСаĐŊĐŊŅƒŅŽ ĐēĐžĐŧаĐŊĐ´Ņƒ # НĐĩĐžĐąŅĐˇĐ°Ņ‚ĐĩĐģҌĐŊŅ‹Đš ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ ҃ĐēĐ°ĐˇŅ‹Đ˛Đ°ĐĩŅ‚ ҁĐŋĐ¸ŅĐžĐē ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊҋ҅ ĐžĐēŅ€ŅƒĐļĐĩĐŊĐ¸Ņ, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ # НЕ НАДО ĐŋĐĩŅ€ĐĩĐ´Đ°Đ˛Đ°Ņ‚ŅŒ в ŅŅ‚Ņƒ ĐēĐžĐŧаĐŊĐ´Ņƒ # proc custom_client {command {forbidden_vars {}}} { set ::test::client_app $command set ::test::client_unset $forbidden_vars } # # Đ’ĐžŅŅŅ‚Đ°ĐŊавĐģиваĐĩŅ‚ ŅŅ‚Đ°ĐŊĐ°Đ´Ņ€Ņ‚ŅƒŅŽ ĐēĐģиĐĩĐŊ҂ҁĐēŅƒŅŽ ĐēĐžĐŧаĐŊĐ´Ņƒ # proc our_client {} { catch {unset ::test::client_app} catch {unset ::test::client_unset} } # # ЗаĐēŅ€Ņ‹Đ˛Đ°ĐĩŅ‚ Ņ„Đ°ĐšĐģ, ҃ĐēаСаĐŊĐŊŅ‹Đš в ŅĐžĐžŅ‚Đ˛ĐĩŅ‚ŅŅ‚Đ˛ŅƒŅŽŅ‰ĐĩĐŧ file_id, Đ˛ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ # ŅĐģĐĩĐŧĐĩĐŊŅ‚ ĐŗĐģОйаĐģҌĐŊĐžĐŗĐž ĐŧĐ°ŅŅĐ¸Đ˛Đ° output, ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐĩ error message ĐžŅ‚ close # и ĐēОд СавĐĩŅ€ŅˆĐĩĐŊĐ¸Ņ ĐŋŅ€ĐžŅ†ĐĩŅŅĐ° (иĐŧŅ ŅĐ¸ĐŗĐŊаĐģа) proc stop {file_id} { global output fconfigure $file_id -blocking yes if {[catch {close $file_id} msg]} { if {[string match CHILD* [lindex $::errorCode 0]]} { set status [lindex $::errorCode 2] } else { set status 0 } } else { set status 0 } return [list $output($file_id) $msg $status] } # # ЗавĐĩŅ€ŅˆĐ°ĐĩŅ‚ Ņ€Đ°ĐąĐžŅ‚Ņƒ ҁĐĩŅ€Đ˛ĐĩŅ€Đ° # proc stop_server {file_id} { # puts $file_id "Q\n" # catch {set xx [socket localhost 4433]} log "Interrupting process [pid $file_id]" flush [test_log] kill INT [pid $file_id] #puts -nonewline stderr "Waiting for server termination.." vwait finished($file_id) if [info exists xx] {close $xx} # puts stderr "Ok" } # # ЗаĐŋ҃ҁĐēаĐĩŅ‚ ĐŋŅ€ĐžŅ†Đĩҁҁ ҁ ҃ĐēаСаĐŊĐŊОК ĐēĐžĐŧаĐŊĐ´ĐŊОК ŅŅ‚Ņ€ĐžĐēОК. Đ’ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ Đ´ĐĩҁĐēŅ€Đ¸ĐŋŅ‚ĐžŅ€ # Ņ„Đ°ĐšĐģа в nonblocking mode ҁ ĐŋОвĐĩ҈ĐĩĐŊĐŊŅ‹Đŧ Ņ‚ŅƒĐ´Đ° fileevent # ĐžŅ‡Đ¸Ņ‰Đ°ĐĩŅ‚ ŅĐžĐžŅ‚Đ˛ĐĩŅ‚ŅŅ‚Đ˛ŅƒŅŽŅ‰Đ¸Đĩ ŅĐģĐĩĐŧĐĩĐŊ҂ҋ ĐŧĐ°ŅŅĐ¸Đ˛ĐžĐ˛ output и finished proc start_process {cmd_line read_event {mode "r"}} { set f [open "|$cmd_line" $mode] global output finished catch {unset finished($f)} fconfigure $f -buffering none -blocking n set output($f) "" fileevent $f readable [list $read_event $f] return $f } # # ĐžĐąŅ€Đ°ĐąĐžŅ‚Ņ‡Đ¸Đē fileevent-Ов ĐŊа ҇҂ĐĩĐŊиĐĩ. ЗаĐŋĐ¸ŅŅ‹Đ˛Đ°ĐĩŅ‚ ŅŅ‡Đ¸Ņ‚Đ°ĐŊĐŊŅ‹Đĩ даĐŊĐŊŅ‹Đĩ в # ŅĐģĐĩĐŧĐĩĐŊŅ‚ ĐŧĐ°ŅŅĐ¸Đ˛Đ° output ŅĐžĐžŅ‚Đ˛ĐĩŅ‚ŅŅ‚Đ˛ŅƒŅ‰Đ¸Đš Ņ„Đ°ĐšĐģŅ…ĐĩĐŊĐ´Đģ҃. В ҁĐģŅƒŅ‡Đ°Đĩ ĐĩҁĐģи # Đ´ĐžŅŅ‚Đ¸ĐŗĐŊŅƒŅ‚ eof, Đ˛Ņ‹ŅŅ‚Đ°Đ˛ĐģŅĐĩŅ‚ ŅĐģĐĩĐŧĐĩĐŊŅ‚ ĐŧĐ°ŅŅĐ¸Đ˛Đ° finished. (ŅĐģĐĩĐŧĐĩĐŊŅ‚ output # ĐŋŅ€Đ¸ ŅŅ‚ĐžĐŧ Ņ‚ĐžĐļĐĩ Ņ‚Ņ€ĐžĐŗĐ°ĐĩŅ‚ŅŅ, Ņ‡Ņ‚ĐžĐąŅ‹ vwait СавĐĩŅ€ŅˆĐ¸ĐģŅŅ) # proc process_read {f} { global output if {[eof $f]} { global finished fconfigure $f -blocking y set finished($f) 1 append output($f) "" return } append output($f) [read $f] } # # ЗаĐŋ҃ҁĐēаĐĩŅ‚ openssl s_server ҁ ҃ĐēаСаĐŊĐŊŅ‹Đŧи Đ°Ņ€ĐŗŅƒĐŧĐĩĐŊŅ‚Đ°Đŧи и Đ´ĐžĐļидаĐĩŅ‚ŅŅ ĐŋĐžĐēа # ĐžĐŊ ҁĐēаĐļĐĩŅ‚ ĐŊа stdout ACCEPT. Đ’ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ filehandle, ĐžŅ‚ĐēŅ€Ņ‹Ņ‚Ņ‹Đš ĐŊа # ҇҂ĐĩĐŊиĐĩ/СаĐŋĐ¸ŅŅŒ # proc open_server {server_args} { global OPENSSL_APP global ENGINE_PATH if {[info exists ::test::server_conf]} { global env set save_conf $env(OPENSSL_CONF) set env(OPENSSL_CONF) $::test::server_conf } if {[info exists ::test::server_app]} { set server $::test::server_app } else { set server [list $OPENSSL_APP s_server] } if {[info exists ::test::server_unset]} { save_env $::test::server_unset } set server [start_process [concat $server $server_args] process_read "r+"] restore_env if {[info exists save_conf]} { set env(OPENSSL_CONF) $save_conf } global output finished #puts -nonewline stderr "Waiting for server startup..." while {![regexp "\nACCEPT\n" $output($server)]} { vwait output($server) if {[info exists finished($server)]} { #puts stderr "error" return -code error [lindex [stop $server] 1] } } #puts stderr "Ok" after 100 return $server } # # ĐĄĐžŅ…Ņ€Đ°ĐŊŅĐĩŅ‚ ҃ĐēаСаĐŊĐŊŅ‹Đĩ ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊŅ‹Đĩ ҁҀĐĩĐ´Ņ‹ Đ´ĐģŅ ĐŋĐžŅĐģĐĩĐ´ŅƒŅŽŅ‰ĐĩĐŗĐž Đ˛ĐžŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊĐ¸Ņ # restore_env # proc save_env {var_list} { catch {array unset ::test::save_env} foreach var $var_list { if {[info exist ::env($var)]} { set ::test::save_env($var) $::env($var) unset ::env($var) } } } proc restore_env {} { if {[array exists ::test::save_env]} { array set ::env [array get ::test::save_env] array unset ::test::save_env } } # # ĐĄĐžŅ…Ņ€Đ°ĐŊŅĐĩŅ‚ ҃ĐēаСаĐŊĐŊŅ‹Đĩ ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊŅ‹Đĩ ҁҀĐĩĐ´Ņ‹ Đ´ĐģŅ ĐŋĐžŅĐģĐĩĐ´ŅƒŅŽŅ‰ĐĩĐŗĐž Đ˛ĐžŅŅŅ‚Đ°ĐŊОвĐģĐĩĐŊĐ¸Ņ # restore_env2. В ĐžŅ‚ĐģĐ¸Ņ‡Đ¸Đĩ ĐžŅ‚ save_env, ĐŊĐĩ Đ´ĐĩĐģаĐĩŅ‚ unset ŅĐžŅ…Ņ€Đ°ĐŊĐĩĐŊĐŊОК ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊОК. # proc save_env2 {var_list} { catch {array unset ::test::save_env2} foreach var $var_list { if {[info exist ::env($var)]} { set ::test::save_env2($var) $::env($var) } } } # # Đ’ĐžŅŅŅ‚Đ°ĐŊавĐģиваĐĩŅ‚ ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊŅ‹Đĩ ҁҀĐĩĐ´Ņ‹, Ņ€Đ°ĐŊĐĩĐĩ ŅĐžŅ…Ņ€Đ°ĐŊĐĩĐŊĐŊŅ‹Đĩ Ņ„ŅƒĐŊĐēŅ†Đ¸ĐĩĐš save_env2 # В ĐžŅ‚ĐģĐ¸Ņ‡Đ¸Đĩ ĐžŅ‚ Ņ„ŅƒĐŊĐēŅ†Đ¸Đ¸ restore_env, ҂ҀĐĩĐąŅƒĐĩŅ‚ ҁĐŋĐ¸ŅĐēа ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊҋ҅ и # Đ˛ĐžŅŅŅ‚Đ°ĐŊавĐģиваĐĩŅ‚ Ņ‚ĐžĐģҌĐēĐž ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊŅ‹Đĩ иС даĐŊĐŊĐžĐŗĐž ҁĐŋĐ¸ŅĐēа. Đ’Ņ‚ĐžŅ€ĐžĐĩ ĐžŅ‚ĐģĐ¸Ņ‡Đ¸Đĩ - # ĐĩҁĐģи ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊĐ°Ņ иС ҁĐŋĐ¸ŅĐēа ĐŊĐĩ ĐąŅ‹Đģа ŅĐžŅ…Ņ€Đ°ĐŊĐĩĐŊа, Đ´ĐĩĐģаĐĩŅ‚ ĐĩĐš unset. # proc restore_env2 {var_list} { foreach var $var_list { if {[info exist ::test::save_env2($var)]} { set ::env($var) $::test::save_env2($var) } else { catch {unset ::env($var)} } } array unset ::test::save_env2 } # # ЗаĐŋ҃ҁĐēаĐĩŅ‚ s_client ҁ ҃ĐēаСаĐŊĐŊŅ‹Đŧи Đ°Ņ€ĐŗŅƒĐŧĐĩĐŊŅ‚Đ°Đŧи, ĐŋĐĩŅ€ĐĩĐ´Đ°Đ˛Đ°Ņ ĐŊа stdin # ҃ĐēаСаĐŊĐŊŅƒŅŽ ŅŅ‚Ņ€ĐžĐē҃ # proc open_client {client_args client_stdin} { global OPENSSL_APP if [info exists ::test::client_app] { set client $::test::client_app } else { set client [list $OPENSSL_APP s_client] } if {[info exists ::test::client_unset]} { save_env $::test::client_unset } if {[info exists ::test::client_conf]} { set save_env(OPENSSL_CONF) $::env(OPENSSL_CONF) set ::env(OPENSSL_CONF) $::test::client_conf } set client [start_process [concat $client $client_args [list << $client_stdin]] process_read] restore_env return $client } # # Đ—Đ°Ņ‡Đ¸Ņ‚Ņ‹Đ˛Đ°ĐĩŅ‚ ҁĐŋĐ¸ŅĐžĐē Ņ…ĐžŅŅ‚ĐžĐ˛ иС ../../ssl-ciphers # proc get_hosts {file} { set ::test::suffix "-$file" if [file readable $file.ciphers] { set f [open $file.ciphers] } else { set f [open ../../ssl-ciphers/$file.ciphers r] } while {[gets $f line]>=0} { if {[regexp {^\s*#} $line]} continue append data "$line\n" } close $f global hosts array set hosts $data } # # Đ ĐĩĐŗĐ¸ŅŅ‚Ņ€Đ¸Ņ€ŅƒĐĩŅ‚ ĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ĐĩĐģŅŅ (вОСĐŧĐžĐļĐŊĐž ŅƒĐ´Đ°ĐģĐĩĐŊĐŊĐžĐŧ) Ņ‚ĐĩŅŅ‚ĐžĐ˛ĐžĐŧ CA, Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒŅ # ҁĐēŅ€Đ¸ĐŋŅ‚ testca ŅƒŅŅ‚Đ°ĐŊОвĐģĐĩĐŊĐŊŅ‹Đš в PATH ĐŊа CAhost. # proc registerUserAtCA {userdir CAhost CAprefix CApath} { global OPENSSL_APP log "registerUserAtCA $userdir $CAhost $CAprefix $CApath" set f [open $userdir/req.pem] set request [read $f] close $f set token [::http::geturl http://$CAhost/$CAprefix/$CApath\ -query [::http::formatQuery request $request startdate [clock\ format [expr [clock seconds]-3600] -format "%y%m%d%H%M%SZ" -gmt y]]] if {[::http::ncode $token]!=200} { return -code error "Error certifying request [::http::data $token]" } log "Got a certificate. Saving" saveCertFromPKCS7 $userdir/cert.pem [::http::data $token] } proc saveCertFromPKCS7 {file pkcs7} { global OPENSSL_APP log saveCertFromPCS7 log "$OPENSSL_APP pkcs7 -print_certs $pkcs7" set f [open "|[list $OPENSSL_APP pkcs7 -print_certs << $pkcs7]" r] set out [open $file w] set mode 0 while {[gets $f line]>=0} { if {$mode==1} { puts $out $line if {$line eq "-----END CERTIFICATE-----"} { set mode 2 } } elseif {$mode==0 && $line eq "-----BEGIN CERTIFICATE-----"} { set mode 1 puts $out $line } } close $f close $out if {$mode !=2 } { return -code error "Cannot get certificate from PKCS7 output" } } # # Invokes scp and discards stderr output if exit code is 0 # proc scp {args} { if {[info exists env(SCP)]} { set scp $env(SCP) } else { set scp scp } if {[catch [concat exec $scp $args] msg]} { if {[string match CHIDLD* [lindex $::errorCode 0]]} { return -code error -errorcode $::errorCode $msg } } } proc getCAAlgParams {CAhost CAprefix alg} { if {$alg == "ec" || $alg == "dsa"} { set token [::http::geturl http://$CAhost/$CAprefix/$alg?algparams=1] if {[::http::ncode $token]!=200} { return -code error "Error getting algorithm parameters [::http::data $token]" } set f [open ${alg}params.pem w] puts $f [::http::data $token] close $f } } # # Copies CA certificate from specified CA into ca_$alg.pem # Returns name of the ca certificate or empty line if something goes # wrong and error wasn't properly detected # proc getCAcert {CAhost CApath alg} { set token [::http::geturl http://$CAhost$CApath/$alg?getroot=1] if {[::http::ncode $token]!=200} { return -code error "Error getting root cert for $alg: [::http::data $token]" } saveCertFromPKCS7 ca_$alg.pem [::http::data $token] return ca_$alg.pem } # # Returns decoded version of first pem object in the given file # proc readpem {filename} { set f [open $filename] fconfigure $f -translation binary set data [read $f] close $f if {[regexp -- "-----BEGIN \[^\n\]+-----\r?\n(.*\n)-----END" $data => b64]} { set data [::base64::decode $b64] } return $data } proc der_from_pem {pem} { if {[regexp -- {^-----BEGIN ([^\n]*)-----\r?\n(.*)\r?\n-----END \1-----} $pem => => base64]} { ::base64::decode $base64 } { error "Not a PEM:\n$pem" } } proc engine_name {} { global env if {[info exists env(ENGINE_NAME)]} { switch -exact $env(ENGINE_NAME) { "open" {return "open"} "gost" {return "open"} "cryptocom" {return "ccore"} "ccore" {return "ccore"} default {error "Unknown engine '$env(ENGINE_NAME)'"} } } else { return "ccore" } } proc openssl_remote {files host cmdlinex suffix} { set hostname [exec hostname] set workpath /tmp/$hostname/$suffix save_env {LD_LIBRARY_PATH OPENSSL_CONF ENGINE_DIR} exec ssh build@$host mkdir -p $workpath foreach file $files { exec scp -r $file build@$host:$workpath } exec scp ../opnssl.sh build@$host:$workpath exec ssh build@$host chmod +x $workpath/opnssl.sh set cmdline [string map "TESTPATH $workpath" $cmdlinex] log "hstname: $hostname OpenSSL cmdline: $host remote_openssl $cmdline" set f [open "| ssh build@$host $workpath/opnssl.sh $cmdline" r] set output [read $f] restore_env if {[catch {close $f} msg]} { append output "STDERR CONTENTS:\n$msg" log $output if {[lindex $::errorCode 0]!="NONE"} { return -code error -errorcode $::errorCode $output } } return $output } package provide ossltest 0.7 libengine-gost-openssl-3.0.2/tcl_tests/pkcs12.try000066400000000000000000000050051446070765000217630ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ pkcs12" if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {gost2001:A gost2001:B gost2001:C gost2001:XA gost2001:XB gost2012_256:A gost2012_256:B gost2012_256:C gost2012_256:XA gost2012_256:XB gost2012_512:A gost2012_512:B}} "open" { set alg_list { gost2001:A gost2001:B gost2001:C gost2001:XA gost2001:XB gost2012_256:A gost2012_256:B gost2012_256:C gost2012_256:XA gost2012_256:XB gost2012_256:TCA gost2012_256:TCB gost2012_256:TCC gost2012_256:TCD gost2012_512:A gost2012_512:B gost2012_512:C } } } } foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username U_pkcs12_$alg_fn switch -glob $alg { gost2012_512:* {set hash_alg md_gost12_512} gost2012_256:* {set hash_alg md_gost12_256} default {set hash_alg md_gost94} } test -createsfiles [list $username/sscert.pem $username/sskey.pem]\ "ГĐĩĐŊĐĩŅ€Đ¸Ņ€ŅƒĐĩĐŧ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ и ҁĐĩĐēŅ€ĐĩŅ‚ĐŊŅ‹Đš ĐēĐģŅŽŅ‡ $alg" { makeSecretKey $username $alg makeFile $username/req.conf [makeConf] openssl "req -new -x509 -config $username/req.conf -key $username/seckey.pem -out $username/cert.pem" expr {[file size $username/cert.pem] > 0} } 0 1 test -createsfiles {$username/pkcs12.p12} "ĐĄĐžĐąĐ¸Ņ€Đ°ĐĩĐŧ pkcs12 ҁ аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ $alg" { openssl "pkcs12 -export -inkey $username/seckey.pem -in $username/cert.pem -out $username/pkcs12.p12 -password pass:12345 -keypbe gost89 -certpbe gost89 -macalg $hash_alg" file exists $username/pkcs12.p12 } 0 1 test -skip {![file exists $username/pkcs12.p12]} -createsfiles [list $username/extracted_cert.pem $username/extracted_key.pem] "Đ Đ°ĐˇĐąĐ¸Ņ€Đ°ĐĩĐŧ pkcs12 c аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧĐžĐŧ $alg" { openssl "pkcs12 -in $username/pkcs12.p12 -nodes -out $username/dump.pem -password pass:12345" set dump [getFile $username/dump.pem] set lextr [regexp -all -inline "\n-----BEGIN .*?\n-----END \[^\n\]+-----\n" $dump] list [llength $lextr] [expr {[lindex $lextr 0] eq "\n[getFile $username/cert.pem]"}] [expr {[lindex $lextr 1] eq "\n[openssl "pkcs8 -nocrypt -topk8 -in $username/seckey.pem"]"}] } 0 {2 1 1} #./load_engine pkcs12 -export -in t/z/U_enc_gost94_/cert.pem -inkey t/z/U_enc_gost94_/seckey.pem -certfile t/z/testCA/cacert.pem -name "CERTIFICATE" -out mycert.p12 -password pass:12345 #./load_engine pkcs12 -in mycert.p12 -out mycert.pem } end_tests libengine-gost-openssl-3.0.2/tcl_tests/pkcs7.tcl000066400000000000000000000121661446070765000216610ustar00rootroot00000000000000package require base64 if {[info exists env(TOOLDIR)]} { lappend auto_path $env(TOOLDIR) } { lappend auto_path "[file dirname [info script]]/../../maketool" } package require asn 0.7.1 namespace eval pkcs7 { namespace import ::asn::* namespace export * proc asnTag {data_var} { upvar $data_var data asnPeekByte data b return $b } proc envelopedData {der} { asnGetSequence der seq0 asnGetObjectIdentifier seq0 id_envelopedData if {$id_envelopedData != {1 2 840 113549 1 7 3}} { error "Waited id-envelopedData, got $id_envelopedData" } asnGetContext seq0 n envelopedData if {$n != 0} { error "Waited context 0, got $n" } asnGetSequence envelopedData envelopedData asnGetInteger envelopedData version set originatorInfo {} if {[asnTag envelopedData] != 0x31} { asnGetContext envelopedData tag originatorInfo } asnGetSet envelopedData recipientInfos asnGetSequence envelopedData encryptedContentInfo set unprotectedAttrs {} if {[string length $envelopedData]} { asnGetContext envelopedData tag unprotectedAttrs } return [list $version $originatorInfo $recipientInfos $encryptedContentInfo $unprotectedAttrs $envelopedData] } proc recipientInfos {rIs} { set result {} while {[string length $rIs]} { asnGetSequence rIs inf asnGetInteger inf version set tag {} if {[asnTag inf] == 0x30} { asnGetSequence inf rid } { asnGetContext inf tag rid } asnGetSequence inf keyEncAlg asnGetOctetString inf encryptedKey lappend result [list $version [list $tag $rid] $keyEncAlg $encryptedKey] } return $result } proc subjectPublicKeyInfo {spki} { asnGetSequence spki algorithmIdentifier asnGetBitString spki subjectPublicKey list $algorithmIdentifier $subjectPublicKey $spki } proc algorithmIdentifier {ai} { asnGetObjectIdentifier ai oid set param {} if {[string length $ai]} { asnGetSequence ai param } return [list $oid $param $ai] } proc algorithmParamPKGOST {param} { asnGetObjectIdentifier param pubkey_param asnGetObjectIdentifier param digest_param set cipher_param {} if {[string length $param]} { asnGetObjectIdentifier param cipher_param } return [list $pubkey_param $digest_param $cipher_param $param] } proc keyTransportGOST {octet_string} { asnGetSequence octet_string inf asnGetSequence inf encryptedKey set transportParams {} if {[string length $inf]} { asnGetContext inf tag transportParams } return [list $encryptedKey $transportParams $inf] } proc encryptedKeyGOST {encryptedKeyAndMAC} { asnGetOctetString encryptedKeyAndMAC encryptedKey asnGetOctetString encryptedKeyAndMAC MAC list $encryptedKey $MAC $encryptedKeyAndMAC } proc transportParameters {transportParams} { asnGetObjectIdentifier transportParams encryptionParamSet set ephemeralPublicKey {} if {[asnTag transportParams] == 0xa0} { asnGetContext transportParams tag ephemeralPublicKey } asnGetOctetString transportParams ukm list $encryptionParamSet $ephemeralPublicKey $ukm $transportParams } proc encryptedContentInfo {eci} { asnGetObjectIdentifier eci oid asnGetSequence eci algorithmIdentifier set encryptedContent {} if {[string length $eci]} { asnGetContext eci tag encryptedContent } list $oid $algorithmIdentifier $encryptedContent $eci } proc algorithmParamEncGOST {param} { asnGetOctetString param ukm asnGetObjectIdentifier param encParam list $ukm $encParam $param } proc algorithm_oids_from_envelopedData {der} { set result {} foreach {v oI rIs eCI uAs t} [envelopedData $der] { # recipient infos set rin 0 foreach rI [recipientInfos $rIs] { foreach {v rid kEA eK} $rI { # export (pubkey) algorithm identifier foreach {pk_oid param t} [algorithmIdentifier $kEA] { lappend result ri${rin}:kea=[join $pk_oid .] foreach {pkp dp cp t} [algorithmParamPKGOST $param] { lappend result \ ri${rin}:kea:pkp=[join $pkp .] \ ri${rin}:kea:dp=[join $dp .] \ ri${rin}:kea:cp=[join $cp .] } } # encryptedKey encapsulated structure foreach {eK tPs t} [keyTransportGOST $eK] { # transport parameters foreach {ePS ePK ukm t} [transportParameters $tPs] { # encryption paramset lappend result ri${rin}:ktcp=[join $ePS .] # ephemeral public key if {[string length $ePK]} { foreach {aI sPK t} [subjectPublicKeyInfo $ePK] { # algorithm identifier foreach {pKI param t} [algorithmIdentifier $aI] { lappend result ri${rin}:ktepk=[join $pKI .] foreach {pkp dp cp t} [algorithmParamPKGOST $param] { lappend result \ ri${rin}:ktepk:pkp=[join $pkp .] \ ri${rin}:ktepk:dp=[join $dp .] \ ri${rin}:ktepk:cp=[join $cp .] } } } } } } } incr rin } foreach {oid aI eC t} [encryptedContentInfo $eCI] { # algorithm identifier foreach {oid param t} [algorithmIdentifier $aI] { lappend result ea=[join $oid .] foreach {ukm oid t} [algorithmParamEncGOST $param] { lappend result ea:cp=[join $oid .] } } } } return $result } } package provide pkcs7 0.1libengine-gost-openssl-3.0.2/tcl_tests/pkcs8.try000066400000000000000000000171151446070765000217150ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "Ņ‚Đĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ pkcs8" set key "-----BEGIN PRIVATE KEY----- MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgIgSZ82qYpu6RQj UeoKl5svrvYuMriHeAQvuSIvjAg5fnk= -----END PRIVATE KEY----- " test "ПĐĩŅ‡Đ°Ņ‚Đ°ĐĩĐŧ ŅŅ‚Đ°ĐģĐžĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2001" { set etalon [openssl [list pkey -text -noout << $key]] } 0 "Private key: 499F36A98A6EE9142351EA0A979B2FAEF62E32B88778042FB9222F8C08397E79 Public key: X:3A5EB29A20FAB84B58ADECB6F27EBAF2F21FE12122A5B1CF0ACEDD52756F238E Y:D2CB63A5699267CDA88FABA9E417C5931FA106B07D6853D9B70BACB4E592A6CC Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet " test "КоĐŊвĐĩŅ€Ņ‚Đ¸Ņ€ŅƒĐĩĐŧ в DER и ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ, Ņ‡Ņ‚Đž ĐēĐģŅŽŅ‡ Ņ‚ĐžŅ‚ ĐļĐĩ gost2001" { openssl [list pkcs8 -outform DER -out pkcs8-1.der -nocrypt << $key] openssl [list pkey -inform DER -text -noout -in pkcs8-1.der] } 0 $etalon save_env2 {CRYPT_PARAMS GOST_PBE_HMAC} test "Đ—Đ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ĐĩĐŧ ĐŊĐĩĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2001, ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ CryptoPro-A" { makeFile pkcs8-1A.key $key set env(CRYPT_PARAMS) "id-Gost28147-89-CryptoPro-A-ParamSet" set env(GOST_PBE_HMAC) "md_gost94" openssl [list pkcs8 -v2 gost89 -passout pass:qwertyu -in pkcs8-1A.key -topk8 -out encA.key << $key] file exists encA.key } 0 1 restore_env2 {CRYPT_PARAMS GOST_PBE_HMAC} test -skip {![file exists encA.key]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ OID-Ņ‹ PBE" { set res [extract_oids encA.key] regexp "HMAC GOST 34\.11-94" $res && regexp "GOST .*89" } 0 1 test "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ĐĩĐŧ ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2001" { set unencrypted [openssl [list pkcs8 -passin pass:qwertyu -topk8 -nocrypt -in encA.key]] openssl [list pkey -text -noout << $unencrypted] } 0 $etalon save_env2 {CRYPT_PARAMS GOST_PBE_HMAC} test "Đ—Đ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ĐĩĐŧ ĐŊĐĩĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2001, ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ CryptoPro-B" { makeFile pkcs8-1B.key $key set env(CRYPT_PARAMS) "id-Gost28147-89-CryptoPro-B-ParamSet" set env(GOST_PBE_HMAC) "md_gost94" openssl [list pkcs8 -v2 gost89 -passout pass:qwertyu -in pkcs8-1B.key -topk8 -out encB.key << $key] file exists encB.key } 0 1 restore_env2 {CRYPT_PARAMS GOST_PBE_HMAC} test -skip {![file exists encB.key]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ OID-Ņ‹ PBE" { set res [extract_oids encB.key] regexp "HMAC GOST 34\.11-94" $res && regexp "GOST .*89" } 0 1 test "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ĐĩĐŧ ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2001" { set unencrypted [openssl [list pkcs8 -passin pass:qwertyu -topk8 -nocrypt -in encB.key]] openssl [list pkey -text -noout << $unencrypted] } 0 $etalon test "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ĐĩĐŧ ĐēĐģŅŽŅ‡, ŅĐžĐˇĐ´Đ°ĐŊĐŊŅ‹Đš mkkey" { makeFile pkcs8-2.key "-----BEGIN ENCRYPTED PRIVATE KEY----- MIGvMFUGCSqGSIb3DQEFDTBIMCcGCSqGSIb3DQEFDDAaBAjIvbrnGmGbTAIC CAAwCgYGKoUDAgIKBQAwHQYGKoUDAgIVMBMECOtWtCMQo3dzBgcqhQMCAh8B BFZFPKP6qDKi57rmas1U2fUjyZwjmrk6Y+naeWG/BTVJNJklW3HaHP+wuIFb bxdi6rTNsYqxWm26qUHz6Op5SvCm0y+f8zE9cACQ5KQnFvNlojHvzmjO+Q== -----END ENCRYPTED PRIVATE KEY----- " set unencrypted [openssl [list pkcs8 -passin pass:qwertyu -nocrypt -topk8 -in pkcs8-2.key ]] openssl [list pkey -text -noout << $unencrypted] } 0 $etalon test "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ĐĩĐŧ ĐēĐģŅŽŅ‡, ŅĐžĐˇĐ´Đ°ĐŊĐŊŅ‹Đš mkkey, Ņ€ŅƒŅŅĐēиК ĐŋĐ°Ņ€ĐžĐģҌ" { set env(PASS) [encoding convertfrom [encoding convertto utf-8 [rus "ĐšŅ†ŅƒĐēĐĩĐŊĐŗ"]]] makeFile pkcs8-3.key "-----BEGIN ENCRYPTED PRIVATE KEY----- MIGvMFUGCSqGSIb3DQEFDTBIMCcGCSqGSIb3DQEFDDAaBAgSfbLQ+fNe0AIC CAAwCgYGKoUDAgIKBQAwHQYGKoUDAgIVMBMECJJ1Qd/rIBxqBgcqhQMCAh8B BFZWfyFs12456ECvzNyg7LkPNAJS7qPih78kY4DJP7ty4bMydfCkfg20fMNl O2zlJtg37z9vbhvqdWODCXc/XJ+Txmw3GLVDcvwQ/0woebcPlNUvMd9BzA== -----END ENCRYPTED PRIVATE KEY----- " set unencrypted [openssl [list pkcs8 -passin env:PASS -nocrypt -topk8 -in pkcs8-3.key ]] grep Private [openssl [list pkey -text -noout << $unencrypted]] } 0 "Private key: 894150BCD66A400C198154D68E5817A6EF3546983863B57F6D04F5C14FD766CC\n" set key256 "-----BEGIN PRIVATE KEY----- MEgCAQAwHwYIKoUDBwEBAQEwEwYHKoUDAgIjAQYIKoUDBwEBAgIEIgIgK/ezK4Z5 GCo/srftX/HPs2AmcFKffF3/RWokTAKxMcM= -----END PRIVATE KEY----- " test "ПĐĩŅ‡Đ°Ņ‚Đ°ĐĩĐŧ ŅŅ‚Đ°ĐģĐžĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2012_256" { set etalon256 [openssl [list pkey -text -noout << $key256]] } 0 "Private key: 2BF7B32B8679182A3FB2B7ED5FF1CFB3602670529F7C5DFF456A244C02B131C3 Public key: X:AEE47DB40193567F54626017CD98EC2FA1BD72CC2F73F7D0D517C61F1F83F3C8 Y:3AED4E504E0E470F0C1DEE399A440A791C45C42539E56F9AECCB63ABF3FC2F1F Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet " test "КоĐŊвĐĩŅ€Ņ‚Đ¸Ņ€ŅƒĐĩĐŧ в DER и ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ, Ņ‡Ņ‚Đž ĐēĐģŅŽŅ‡ Ņ‚ĐžŅ‚ ĐļĐĩ gost2012_256" { openssl [list pkcs8 -outform DER -out pkcs8-256.der -nocrypt << $key] openssl [list pkey -inform DER -text -noout -in pkcs8-256.der] } 0 $etalon save_env2 {CRYPT_PARAMS GOST_PBE_HMAC} test "Đ—Đ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ĐĩĐŧ ĐŊĐĩĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2012_256, ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ TK26 (҃ĐŧĐžĐģŅ‡Đ°Ņ‚ĐĩĐģҌĐŊŅ‹Đĩ)" { makeFile pkcs8-256.key $key256 catch {unset env(CRYPT_PARAMS)} catch {unset env(GOST_PBE_HMAC)} openssl [list pkcs8 -v2 gost89 -passout pass:qwertyu -in pkcs8-256.key -topk8 -out enc256.key << $key] file exists enc256.key } 0 1 restore_env2 {CRYPT_PARAMS GOST_PBE_HMAC} test -skip {![file exists enc256.key]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ OID-Ņ‹ PBE" { set res [extract_oids enc256.key] regexp "HMAC GOST 34\.11-2012" $res && regexp "GOST .*89" } 0 1 test "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ĐĩĐŧ ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2012_256" { set unencrypted [openssl [list pkcs8 -passin pass:qwertyu -topk8 -nocrypt -in enc256.key]] openssl [list pkey -text -noout << $unencrypted] } 0 $etalon256 set key512 "-----BEGIN PRIVATE KEY----- MGsCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRDAkEAiCjF 2rwOmb5YwNnyObveusCDO+kw33jBijSrPiye155EO4ABz2aG8SHOTObVv4dFgtfZ g7wCuOZN3D6RSByFJA== -----END PRIVATE KEY----- " save_env2 {CRYPT_PARAMS GOST_PBE_HMAC} test "ПĐĩŅ‡Đ°Ņ‚Đ°ĐĩĐŧ ŅŅ‚Đ°ĐģĐžĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2012_512" { set etalon512 [openssl [list pkey -text -noout << $key512]] } 0 "Private key: 8828C5DABC0E99BE58C0D9F239BBDEBAC0833BE930DF78C18A34AB3E2C9ED79E443B8001CF6686F121CE4CE6D5BF874582D7D983BC02B8E64DDC3E91481C8524 Public key: X:C9303D4DF7601366C35F1F79B735257FFBBABBBAF80AA89C52C385A4BF2FFBE922CDDD2C96842D3BFBB0BA06F00A3A92D5304386EEFA0F711C7AD9C360513DC Y:12A3A22F5C29640628DB2676FF922429D67D646F8D73EA2C9675B17E3183B300B9D726930CBBD45CF294242DAE07E54C25ED12D5A4D453CB82D4706B1CF2D7B8 Parameter set: GOST R 34.10-2012 (512 bit) ParamSet A " test "КоĐŊвĐĩŅ€Ņ‚Đ¸Ņ€ŅƒĐĩĐŧ в DER и ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ, Ņ‡Ņ‚Đž ĐēĐģŅŽŅ‡ Ņ‚ĐžŅ‚ ĐļĐĩ gost2012_512" { openssl [list pkcs8 -outform DER -out pkcs8-512.der -nocrypt << $key] openssl [list pkey -inform DER -text -noout -in pkcs8-512.der] } 0 $etalon test "Đ—Đ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ĐĩĐŧ ĐŊĐĩĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2012_512, ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ TK26 (҃ĐŧĐžĐģŅ‡Đ°Ņ‚ĐĩĐģҌĐŊŅ‹Đĩ)" { makeFile pkcs8-512.key $key512 catch {unset env(CRYPT_PARAMS)} set env(GOST_PBE_HMAC) "md_gost12_512" openssl [list pkcs8 -v2 gost89 -passout pass:qwertyu -in pkcs8-512.key -topk8 -out enc512.key << $key] file exists enc512.key } 0 1 restore_env2 {CRYPT_PARAMS GOST_PBE_HMAC} test -skip {![file exists enc512.key]} "ĐŸŅ€ĐžĐ˛ĐĩŅ€ŅĐĩĐŧ OID-Ņ‹ PBE" { set res [extract_oids enc512.key] regexp "HMAC GOST 34\.11-2012" $res && regexp "GOST .*89" } 0 1 test "Đ Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Ņ‹Đ˛Đ°ĐĩĐŧ ĐˇĐ°ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐŊŅ‹Đš ĐēĐģŅŽŅ‡ gost2012 512 bit" { set unencrypted [openssl [list pkcs8 -passin pass:qwertyu -topk8 -nocrypt -in enc512.key]] openssl [list pkey -text -noout << $unencrypted] } 0 $etalon512 end_tests libengine-gost-openssl-3.0.2/tcl_tests/pkgIndex.tcl000066400000000000000000000010061446070765000223720ustar00rootroot00000000000000package ifneeded test 0.2 [list source -encoding utf-8 [file join $dir test.tcl]] package ifneeded testlib 0.1 [list source -encoding utf-8 [file join $dir testlib.tcl]] package ifneeded fgetopt 0.1 [list source -encoding utf-8 [file join $dir fgetopt.tcl]] package ifneeded asn 0.7.1 [list source -encoding utf-8 [file join $dir asn.tcl]] package ifneeded base64 2.3.2 [list source -encoding utf-8 [file join $dir base64.tcl]] package ifneeded ossltest 0.7 [list source -encoding utf-8 [file join $dir ossltest.tcl]] libengine-gost-openssl-3.0.2/tcl_tests/plain.enc000066400000000000000000000000251446070765000217070ustar00rootroot00000000000000Test data to encrypt libengine-gost-openssl-3.0.2/tcl_tests/private/000077500000000000000000000000001446070765000215725ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/tcl_tests/private/gost2001_A.pem000066400000000000000000000003451446070765000240160ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MH8CAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgQgNsz+6JQm0UYw I90/psShKQrktCj3ehyKe3G7dVuo+ySgODA2BggqhQMCCQMIATEqBChCIIzvjjnM EjW957oYXmI1tlNIIEMFy50EOPk4d/akd8k9UEUfJQ31 -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2001_B.pem000066400000000000000000000003451446070765000240170ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MH8CAQAwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEIgQgvVb0e4AmOEIH jKiZj+29OgbFVwy+XHI48yKm8FJyjQygODA2BggqhQMCCQMIATEqBCh3mHOU3GbN IZuseCRP836vV2rBLOuQrVznWHPOb9VC0lB6eNOhY1GH -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2001_C.pem000066400000000000000000000003451446070765000240200ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MH8CAQAwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEEIgQgbIM6LxPe0Ave N+yRZBsb7jmIyZET+YiWpiN3T4sKGiOgODA2BggqhQMCCQMIATEqBCgftKdkhEXD VG50lrUkn9EbqriBTKRO8SK2Yu9VJfeVt9uDpYQ9dMu2 -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2001_XA.pem000066400000000000000000000003451446070765000241460ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MH8CAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIgQgSGtJ/s0X+5ld 2wilev1VMOVYAiYPqxJeBCovJlnsB3agODA2BggqhQMCCQMIATEqBChquxeySqNx XJ+zRfoydNB3ZnI7WHvyCdevrpnUXi43QfJ7Bofldn7G -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2001_XB.pem000066400000000000000000000003451446070765000241470ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MH8CAQAwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEEIgQgYAQQC17Sjt3F rg9m7PyzD9Pa2eAYTMr8ltX3IBOmukWgODA2BggqhQMCCQMIATEqBCgl8zuE43h4 78dfpVXoV7bD85G2SIY1/d7o+bAr8AiQBumvzlnQr2ka -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2012_256_A.pem000066400000000000000000000003551446070765000244150ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIGCAgEAMB8GCCqFAwcBAQEBMBMGByqFAwICIwEGCCqFAwcBAQICBCIEIOTjkLas e0/SvSH/hFRSfBopnkP9a6mqCqP/zEf6WwFsoDgwNgYIKoUDAgkDCAExKgQoXql/ cWe/7Tgh3csptrfiEgAaWgGS+VhzbJnZLvn9/STU1/46KWA+0A== -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2012_256_B.pem000066400000000000000000000003551446070765000244160ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIGCAgEAMB8GCCqFAwcBAQEBMBMGByqFAwICIwIGCCqFAwcBAQICBCIEIO6zQc6w YqWlSTp4BBlVa3q+6w96tRtpWlp+LZjb5ShyoDgwNgYIKoUDAgkDCAExKgQotOvO EGwCt0ZcyZA+Lq3RwctxfJMIImyY48X/UilpdLTbfuxNTrAP7Q== -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2012_256_C.pem000066400000000000000000000003551446070765000244170ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIGCAgEAMB8GCCqFAwcBAQEBMBMGByqFAwICIwMGCCqFAwcBAQICBCIEIAmU+PyI r/n63dlQoJhZu0NNJgay2KEFmtb2JvDsLDtzoDgwNgYIKoUDAgkDCAExKgQoTmXk 7VWKAP0WNGF3y26CldydpwA1llejlnI3eZ0IaIq6In4K3SzWjw== -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2012_256_XA.pem000066400000000000000000000003551446070765000245450ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIGCAgEAMB8GCCqFAwcBAQEBMBMGByqFAwICJAAGCCqFAwcBAQICBCIEIAlnokn7 Vw8a7IykYa4EYlv6zdit8QG5Fxs9wdWF/LuyoDgwNgYIKoUDAgkDCAExKgQopAxM Ymu/ufjc2DAxKwaMaeI1cQbNZGApKGrBgFr5/azc+wYpkV/tIg== -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2012_256_XB.pem000066400000000000000000000003551446070765000245460ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIGCAgEAMB8GCCqFAwcBAQEBMBMGByqFAwICJAEGCCqFAwcBAQICBCIEIB7ziMjS yZxVTj9kzt5nyHoz0BVpvWkb8dAxo5SjV9KBoDgwNgYIKoUDAgkDCAExKgQoM1Rx tOEXmeWQll3cuet7UDp0YEmVid1AMvvdx3MD4LVthAmrIYKUCg== -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2012_512_A.pem000066400000000000000000000004321446070765000244040ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIGkAgEAMCEGCCqFAwcBAQECMBUGCSqFAwcBAgECAQYIKoUDBwEBAgMEQgRAdBFk 9bJa60Rw9jvTNdtfZ3ImZuep2Klx5Fpap1bpBE4u/T4CI/R2nyjuWCBKPmbBHJO7 4Z/BTUYYe04l0gWWZaA4MDYGCCqFAwIJAwgBMSoEKCHK4j/oPjNmh1w4eH6Zx1cQ kzLi1QCYb8u45IFtpBx0jF4O0etcYKo= -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/gost2012_512_B.pem000066400000000000000000000004321446070765000244050ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIGkAgEAMCEGCCqFAwcBAQECMBUGCSqFAwcBAgECAgYIKoUDBwEBAgMEQgRAQ8Hd iGVmLyWQFF7lR2VnBIV/npcxJOTrsdhnSpNczZVT+ZWEvY66IQMsUPCVUcgZIYyp 44E3v8kD6x0EuCmPcqA4MDYGCCqFAwIJAwgBMSoEKG0+06BM69y0EvoCeE4fP8jB XPhDcF9daMRu299ZaXv2H9o/OO+nC5A= -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/private/rsa_1024.pem000066400000000000000000000016241446070765000235330ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANiP17PGKutiabuB HCtGk5sBn/4Sv/X7d2HQBDwpxKx0t8U7Z+hRtzLLCRCyNiY+vnbGHkQKfAi/HfaA awvG9mGBBOA5jdRU0c9aJUNEHH4I/EkYzEkWxZHTNTVbZM4CUHJvA7AM8kRXyI00 MTKirF0/clTXaiAryhprioSw0ulxAgMBAAECgYEAr5ch3D/neOdYt5Gd13DoKZyN ryJgxv/X8lUJugZb00Dn6GGchIANPH/nn8P/p87j+8XzsFOX8jeUAdRp9yihhzuN doY8EW0UEKXApHh5Y0UmlC1YqFrgtk8Y6k4bK6GewNXPekMjTLUhR+cECG6I8yAt Jtlwo+539uBld6pXEAECQQDuH6IrLZHXfxTYOeDnvYnncKrfk7szUTRV/2q8GAlw 1bqQPB1xuautWrgw90HRLAvD27KOFgZ0R9fNfULaEA3xAkEA6NHTsZNgZs7VF5Z8 krR6SkszIyR3UyurvPrusR44lT6ypSsulFV+SrjFOAwbuLjl+fap9oGLI1tsbFUA UeMTgQJAKrX71XjP/vIpX/tJruddU+jujTmnSzYWiBJPJ7u7/cQoOXS+50YhV++8 t/Oxl34qAhBm/3tN3w9/0rjUA977UQJAWLHvKvxRQnlTVvwekyksWXdSkPXIe6fs cj9KhbFUrw7GsgPEaAA177N6dsKuIO5XtqWQ1Hc/kYW3xYGQcKHIgQJBAIaEvBhO PkoT0apaZgriQnuWpqGCnFYTjAY7zSr+Y5kI1lnb3DPipIsZZ5X7VQ/c+64nR2M/ X1NAW+G8zHBxK6o= -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/req-genpkey.try000066400000000000000000000076601446070765000231200ustar00rootroot00000000000000#!/usr/bin/tclsh # ŅĐžĐˇĐ´Đ°ĐŊиĐĩ ҁĐĩĐēŅ€ĐĩŅ‚ĐŊĐžĐŗĐž ĐēĐģŅŽŅ‡Đ° # ŅĐžĐˇĐ´Đ°ĐŊиĐĩ ĐˇĐ°ŅĐ˛Đēи и ŅĐ°ĐŧĐžĐŋОдĐŋĐ¸ŅĐ°ĐŊĐŊĐžĐŗĐž ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ° ĐēĐžĐŧаĐŊдОК req # ĐŋŅ€ĐžĐ˛ĐĩŅ€Đēа OIDОв аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧа вО Đ˛ŅĐĩŅ… ŅŅ‚Ņ€ŅƒĐēŅ‚ŅƒŅ€Đ°Ņ… lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "ХОСдаĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐš и ĐˇĐ°ŅĐ˛ĐžĐē, ĐēĐžĐŧаĐŊда genpkey" if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {gost2001:A gost2001:B gost2001:C gost2001:XA gost2001:XB gost2012_256:A gost2012_256:B gost2012_256:C gost2012_256:XA gost2012_256:XB gost2012_512:A gost2012_512:B}} "open" {set alg_list {gost2001:A gost2001:B gost2001:C gost2001:XA gost2001:XB gost2012_256:0 gost2012_256:A gost2012_256:B gost2012_256:C gost2012_256:XA gost2012_256:XB gost2012_512:A gost2012_512:B}} } } foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username pkey_$alg_fn foreach {alg_only params} [split $alg :] break test -createsfiles $username/seckey.pem "ĐĄĐĩĐēŅ€ĐĩŅ‚ĐŊŅ‹Đš ĐēĐģŅŽŅ‡, аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ $alg" { file delete -force $username file mkdir $username openssl "genpkey -algorithm $alg_only -pkeyopt paramset:$params -out $username/seckey.pem" expr {[file size $username/seckey.pem] > 0} } 0 1 test -skip {![file exists $username/seckey.pem]} "OID в ҁĐĩĐēŅ€ĐĩŅ‚ĐŊĐžĐŧ ĐēĐģŅŽŅ‡Đĩ" { extract_oids $username/seckey.pem } 0 [mkObjList [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg]]] test -skip {![file exists $username/seckey.pem]} "АĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ $alg, ĐˇĐ°ŅĐ˛Đēа ĐŋĐž ҁĐĩĐēŅ€ĐĩŅ‚ĐŊĐžĐŧ҃ ĐēĐģŅŽŅ‡Ņƒ" { makeFile $username/req.conf [makeConf] openssl "req -new -config $username/req.conf -key $username/seckey.pem -out $username/req.pem" expr {[file size $username/req.pem] > 0} } 0 1 test -skip {![file exists $username/req.pem]} "ПодĐŋĐ¸ŅŅŒ ĐŋОд ĐˇĐ°ŅĐ˛ĐēОК ĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊа" { grep "verif" [openssl "req -verify -in $username/req.pem"] } 0 {Certificate request self-signature verify OK } test -skip {![file exists $username/req.pem]} "OID в ĐˇĐ°ŅĐ˛ĐēĐĩ, аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ $alg" { extract_oids $username/req.pem } 0 [mkObjList [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg]] [hash_with_sign_long_name $alg]] test -skip {![file exists $username/seckey.pem]} "АĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ $alg, ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ ĐŋĐž ҁĐĩĐēŅ€ĐĩŅ‚ĐŊĐžĐŧ҃ ĐēĐģŅŽŅ‡Ņƒ" { openssl "req -new -x509 -config $username/req.conf -key $username/seckey.pem -out $username/cert.pem" expr {[file size $username/cert.pem] > 0} } 0 1 test -skip {![file exists $username/cert.pem]} "OID в ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đĩ" { extract_oids $username/cert.pem } 0 [mkObjList [hash_with_sign_long_name $alg] [alg_long_name $alg] [pubkey_long_name $alg]\ [param_hash_long_name [param_hash $alg]] [hash_with_sign_long_name $alg]] test -createsfiles "$username/seckey.der" "АĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ $alg ŅĐžŅ…Ņ€Đ°ĐŊŅĐĩĐŧ ĐēĐģŅŽŅ‡ в DER-Ņ„ĐžŅ€ĐŧĐ°Ņ‚Đĩ" { openssl "genpkey -algorithm $alg_only -pkeyopt paramset:$params -out $username/seckey.der -outform DER" file exists $username/seckey.der } 0 1 test -skip {![file exists $username/seckey.der]} "OID в ҁĐĩĐēŅ€ĐĩŅ‚ĐŊĐžĐŧ ĐēĐģŅŽŅ‡Đĩ $alg DER" { extract_oids $username/seckey.der DER } 0 [mkObjList [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg]]] test -skip {![file exists $username/seckey.der]} -createsfiles $username/req2.pem "ХОСдаĐĩĐŧ ĐˇĐ°ŅĐ˛Đē҃ иС ĐēĐģŅŽŅ‡Đ° в Ņ„ĐžŅ€ĐŧĐ°Ņ‚Đĩ DER" { openssl "req -new -config $username/req.conf -key $username/seckey.der -keyform der -out $username/req2.pem" expr {[file size $username/req2.pem] > 0} } 0 1 test -skip {![file exists $username/req2.pem]} "ПодĐŋĐ¸ŅŅŒ ĐŋОд ĐˇĐ°ŅĐ˛ĐēОК ĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊа" { grep "verif" [openssl "req -verify -in $username/req2.pem"] } 0 {Certificate request self-signature verify OK } } end_tests libengine-gost-openssl-3.0.2/tcl_tests/req-newkey.try000066400000000000000000000112751446070765000227550ustar00rootroot00000000000000#!/usr/bin/tclsh if {[info exists env(PKG_PATH)]} { lappend auto_path $env(PKG_PATH) } else { lappend auto_path [file dirname [info script]] } package require ossltest package require asn 0.4.1 cd $::test::dir switch -exact [engine_name] { "ccore" { set no_param_set "no public key parameters set" set invalid_paramset "invalid pubic key paramset name" } "open" { set no_param_set "no parameters set" set invalid_paramset "parameter error" } } start_tests "ХОСдаĐŊиĐĩ ĐēĐģŅŽŅ‡ĐĩĐš и ĐˇĐ°ŅĐ˛ĐžĐē, ĐēĐžĐŧаĐŊда req -newkey" makeCA foreach {alg descr code result} { gost2001: "ГОСĐĸ 2001 ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž" 1 no_param_set gost2001:A "ГОСĐĸ 2001 ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž A" 0 1.2.643.2.2.35.1 gost2001:B "ГОСĐĸ 2001 ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž B" 0 1.2.643.2.2.35.2 gost2001:C "ГОСĐĸ 2001 ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž C" 0 1.2.643.2.2.35.3 gost2001:D "ГОСĐĸ 2001 ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž ĐŊĐĩвĐĩŅ€ĐŊŅ‹Đš ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ" 1 invalid_paramset gost2001:test "ГОСĐĸ 2001 ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž Ņ‚ĐĩŅŅ‚ĐžĐ˛Ņ‹Đš" 0 1.2.643.2.2.35.0 gost2001:XA "ГОСĐĸ 2001 ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž XA" 0 1.2.643.2.2.36.0 gost2001:XB "ГОСĐĸ 2001 ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž XB" 0 1.2.643.2.2.36.1 gost2001:id-GostR3410-2001-CryptoPro-XchB-ParamSet "ГОСĐĸ 2001 ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž XB ĐŋĐž иĐŧĐĩĐŊи" 0 1.2.643.2.2.36.1 gost2001:1.2.643.2.2.36.1 "ГОСĐĸ 2001 ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž XB ĐŋĐž OID" 0 1.2.643.2.2.36.1 gost2001:1.2.840.113549.1.1.1 "НĐĩĐ´ĐžĐŋŅƒŅŅ‚Đ¸ĐŧŅ‹Đš OID" 1 invalid_paramset gost2001:RSAencryption: "НĐĩĐ´ĐžĐŋŅƒŅŅ‚Đ¸ĐŧĐžĐĩ иĐŧŅ ĐžĐąŅŠĐĩĐēŅ‚Đ°" 1 invalid_paramset gost2012_256: "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚" 1 no_param_set gost2012_256:A "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž A" 0 1.2.643.2.2.35.1 gost2012_256:B "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž B" 0 1.2.643.2.2.35.2 gost2012_256:C "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž C" 0 1.2.643.2.2.35.3 gost2012_256:D "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž ĐŊĐĩвĐĩŅ€ĐŊŅ‹Đš ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ" 1 invalid_paramset gost2012_256:TCA "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐĸК26 A" 0 1.2.643.7.1.2.1.1.1 gost2012_256:TCB "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐĸК26 B" 0 1.2.643.7.1.2.1.1.2 gost2012_256:TCC "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐĸК26 C" 0 1.2.643.7.1.2.1.1.3 gost2012_256:TCD "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐĸК26 D" 0 1.2.643.7.1.2.1.1.4 gost2012_256:TCE "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐĸК26 ĐŊĐĩвĐĩŅ€ĐŊŅ‹Đš ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ" 1 invalid_paramset gost2012_256:id-GostR3410-2001-CryptoPro-B-ParamSet "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž B ĐŋĐž иĐŧĐĩĐŊи" 0 1.2.643.2.2.35.2 gost2012_256:1.2.643.2.2.35.1 "ГОСĐĸ 2012 256 ĐąĐ¸Ņ‚ ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŋŅ€Đž A ĐŋĐž OID" 0 1.2.643.2.2.35.1 gost2012_256:1.2.840.113549.1.1.1 "НĐĩĐ´ĐžĐŋŅƒŅŅ‚Đ¸ĐŧŅ‹Đš OID" 1 invalid_paramset gost2012_256:RSAencryption: "НĐĩĐ´ĐžĐŋŅƒŅŅ‚Đ¸ĐŧĐžĐĩ иĐŧŅ ĐžĐąŅŠĐĩĐēŅ‚Đ°" 1 invalid_paramset gost2012_512: "ГОСĐĸ 2012 512 ĐąĐ¸Ņ‚" 1 no_param_set gost2012_512:A "ГОСĐĸ 2012 512 ĐąĐ¸Ņ‚ ĐĸК26 A" 0 1.2.643.7.1.2.1.2.1 gost2012_512:B "ГОСĐĸ 2012 512 ĐąĐ¸Ņ‚ ĐĸК26 B" 0 1.2.643.7.1.2.1.2.2 gost2012_512:C "ГОСĐĸ 2012 512 ĐąĐ¸Ņ‚ ĐĸК26 C" 0 1.2.643.7.1.2.1.2.3 gost2012_512:D "ГОСĐĸ 2012 512 ĐąĐ¸Ņ‚ ĐŊĐĩвĐĩŅ€ĐŊŅ‹Đš ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ" 1 invalid_paramset gost2012_512:id-tc26-gost-3410-2012-512-paramSetB "ГОСĐĸ 2012 512 ĐąĐ¸Ņ‚ ĐŊĐ°ĐąĐžŅ€ ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€ĐžĐ˛ B ĐŋĐž иĐŧĐĩĐŊи" 0 1.2.643.7.1.2.1.2.2 gost2012_512:1.2.643.7.1.2.1.2.1 "ГОСĐĸ 2012 512 ĐąĐ¸Ņ‚ ĐŊĐ°ĐąĐžŅ€ ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€ĐžĐ˛ A ĐŋĐž OID" 0 1.2.643.7.1.2.1.2.1 gost2012_512:1.2.643.2.2.35.1 "НĐĩĐ´ĐžĐŋŅƒŅŅ‚Đ¸ĐŧŅ‹Đš OID" 1 invalid_paramset gost2012_512:RSAencryption: "НĐĩĐ´ĐžĐŋŅƒŅŅ‚Đ¸ĐŧĐžĐĩ иĐŧŅ ĐžĐąŅŠĐĩĐēŅ‚Đ°" 1 invalid_paramset } { switch -exact $result { "no_param_set" { set result $no_param_set } "invalid_paramset" { set result $invalid_paramset } } set index [string first ":" $alg] if {$index != -1} { set algname [string range $alg 0 [expr $index-1]] set algparam [string range $alg [expr $index+1] end] } else { set algname $alg set algparam "" } if {$algparam ne ""} { set algparamcmdline "-pkeyopt paramset:$algparam" } else { set algparamcmdline "" } test -skip {{[engine_name] eq "open" && $alg eq "gost2001:test"}} $descr { openssl "req -newkey $algname $algparamcmdline -keyout test.key -out test.req -batch -nodes -config $::test::ca/req.conf" set pkcs8 [readpem test.key] asn::asnGetSequence pkcs8 seq1 asn::asnGetInteger seq1 int0 asn::asnGetSequence seq1 seq2 asn::asnGetObjectIdentifier seq2 oid asn::asnGetSequence seq2 seq3 asn::asnGetObjectIdentifier seq3 oid join $oid . } $code $result log "errorInfo: $errorInfo" test -skip {![file exists test.req]} "Đ—Đ°ŅĐ˛Đēа ĐŋОдĐŋĐ¸ŅĐ°ĐŊа ĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊĐž" { grep "verif" [openssl "req -verify -in test.req"] } 0 "Certificate request self-signature verify OK\n" } end_tests libengine-gost-openssl-3.0.2/tcl_tests/runtest.bat000077500000000000000000000114071446070765000223220ustar00rootroot00000000000000@echo off rem ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧĐŧĐĩҀ҇ĐĩҁĐēиК ŅĐŊĐļиĐŊ Đ˛Ņ‹ĐŋĐžĐģĐŊŅŅŽŅ‚ŅŅ ҁ Ņ‚ĐĩĐŧ ДСЧ, ĐŊа Đ¸ŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊиĐĩ rem ĐēĐžŅ‚ĐžŅ€ĐžĐŗĐž ҁĐēĐžĐŊŅ„Đ¸ĐŗŅƒŅ€Đ¸Ņ€ĐžĐ˛Đ°ĐŊ ĐšŅ€Đ¸ĐŋŅ‚ĐžĐŸĐ°ĐēĐĩŅ‚ (Ņ‚Đž ĐĩŅŅ‚ŅŒ ĐēĐžŅ‚ĐžŅ€Ņ‹Đš ҃ĐēаСаĐŊ в Ņ„Đ°ĐšĐģĐĩ rem ĐēĐžĐŊŅ„Đ¸ĐŗŅƒŅ€Đ°Ņ†Đ¸Đ¸ иĐģи ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊОК ĐžĐēŅ€ŅƒĐļĐĩĐŊĐ¸Ņ RNG). Đ˜ŅĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ - ĐŊĐ°ĐąĐžŅ€Ņ‹ Ņ‚ĐĩŅŅ‚ĐžĐ˛ rem prng.try, rng.try, rng-seed.try (Đ˛ŅĐĩĐŗĐ´Đ° Ņ‚ĐĩŅŅ‚Đ¸Ņ€ŅƒŅŽŅ‚ ДСЧ PROGRAM) и rem rng2.try (Ņ‚ĐĩŅŅ‚Đ¸Ņ€ŅƒĐĩŅ‚ Đ˛ŅĐĩ ДСЧ, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ĐŊаКдĐĩŅ‚ ĐŊа ĐēĐžĐŧĐŋŅŒŅŽŅ‚ĐĩŅ€Đĩ). rem ĐĄĐžŅŅ‚Đ°Đ˛ ĐŊĐ°ĐąĐžŅ€Đ° Ņ‚ĐĩŅŅ‚ĐžĐ˛ rem 1. Đ­Ņ‚ĐžŅ‚ ҁĐēŅ€Đ¸ĐŋŅ‚ rem 2. ФаКĐģŅ‹ *.try rem 3. ФаКĐģŅ‹ *.tcl rem 4. ФаКĐģŅ‹ *.ciphers rem 5. calcstat rem 6. oidfile rem 7. name2oid.tst rem ĐŸŅ€ĐĩŅ€ĐĩĐēĐ˛Đ¸ĐˇĐ¸Ņ‚Ņ‹, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ Đ´ĐžĐģĐļĐŊŅ‹ ĐąŅ‹Ņ‚ŅŒ ŅƒŅŅ‚Đ°ĐŊОвĐģĐĩĐŊŅ‹ ĐŊа ĐŧĐ°ŅˆĐ¸ĐŊĐĩ: rem 1. tclsh. rem 2. ssh (Ņ‡Ņ‚Đž Ņ…Đ°Ņ€Đ°ĐēŅ‚ĐĩŅ€ĐŊĐž, ĐŊĐ°ĐˇŅ‹Đ˛Đ°Ņ‚ŅŒŅŅ Đ´ĐžĐģĐļĐĩĐŊ иĐŧĐĩĐŊĐŊĐž Ņ‚Đ°Đē и ĐŊĐĩ Đ´ĐžĐģĐļĐĩĐŊ Đ˛Ņ‹Đ˛ĐžĐ´Đ¸Ņ‚ŅŒ rem ĐģĐ¸ŅˆĐŊĐ¸Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК), ĐŧŅ‹ Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧ ssh.bat вОĐēŅ€ŅƒĐŗ putty: rem @plink -l build %* rem ДоĐģĐļĐĩĐŊ и ĐŊĐ°ŅŅ‚Ņ€ĐžĐĩĐŊ ĐˇĐ°Ņ…ĐžĐ´ ĐŋĐž ĐēĐģŅŽŅ‡Đ°Đŧ ĐąĐĩС ĐŋĐ°Ņ€ĐžĐģŅ ĐŊа lynx и Đ˛ŅĐĩ Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧŅ‹Đĩ rem ŅŅ‚Đ°ĐģĐžĐŊĐŊиĐēи. КĐģŅŽŅ‡Đ¸ ŅŅ‚Đ¸Ņ… ĐŧĐ°ŅˆĐ¸ĐŊ Đ´ĐžĐģĐļĐŊŅ‹ ĐąŅ‹Ņ‚ŅŒ в knownhosts ҁ ĐŋĐžĐģĐŊŅ‹Đŧи Đ´ĐžĐŧĐĩĐŊĐŊŅ‹Đŧи rem иĐŧĐĩĐŊаĐŧи ҁĐĩŅ€Đ˛ĐĩŅ€ĐžĐ˛, Ņ‚Đž ĐĩŅŅ‚ŅŒ lynx.lan.cryptocom.ru и Ņ‚.Đ´. (Đ´ĐģŅ putty rem knownhosts Ņ…Ņ€Đ°ĐŊŅŅ‚ŅŅ в Ņ€ĐĩĐĩҁ҂Đĩ). rem В Firewall Windows ĐŊĐĩĐžĐąŅ…ĐžĐ´Đ¸ĐŧĐž ĐŋŅ€ĐžĐŋĐ¸ŅĐ°Ņ‚ŅŒ Đ¸ŅĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ, Ņ€Đ°ĐˇŅ€ĐĩŅˆĐ°ŅŽŅ‰ĐĩĐĩ rem ŅĐžĐĩдиĐŊĐĩĐŊĐ¸Ņ Đ´ĐģŅ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹ openssl.exe. ВĐŊиĐŧаĐŊиĐĩ, Windows ĐŊĐĩĐŋŅ€Đ°Đ˛Đ¸ĐģҌĐŊĐž rem Ņ‚Ņ€Đ°ĐēŅ‚ŅƒĐĩŅ‚ ĐŋĐžĐŊŅŅ‚Đ¸Đĩ "ĐģĐžĐēаĐģҌĐŊĐ°Ņ ҁĐĩŅ‚ŅŒ" в ĐžĐŋĐ¸ŅĐ°ĐŊии Đ¸ŅĐēĐģŅŽŅ‡ĐĩĐŊĐ¸Ņ, ĐŊ҃ĐļĐŊĐž ĐģийО rem Đ˛Ņ‹ŅŅ‚Đ°Đ˛ĐģŅŅ‚ŅŒ "ĐģŅŽĐąĐžĐš ĐēĐžĐŧĐŋŅŒŅŽŅ‚ĐĩŅ€", ĐģийО ŅĐ˛ĐŊĐž ĐˇĐ°Đ´Đ°Đ˛Đ°Ņ‚ŅŒ ĐŧĐ°ŅĐē҃ 10.51.0.0/255.255.0.0 IF "%OPENSSL_APP%"=="" set OPENSSL_APP=c:\cryptopack3\bin\openssl.exe IF "%TCLSH%"=="" set TCLSH=c:\Tcl\bin\tclsh.exe %TCLSH% getengine.tcl > engine_name.txt set /p ENGINE_NAME= < engine_name.txt del engine_name.txt hostname > host_name.txt set /p HOST_NAME= < host_name.txt del host_name.txt set TESTDIR=%HOST_NAME%-bat-%ENGINE_NAME% rmdir /s /q %TESTDIR% mkdir %TESTDIR% copy oidfile %TESTDIR% set OTHER_VERSION=../OtherVersion IF %ENGINE_NAME%==cryptocom ( set BASE_TESTS=engine dgst pkcs8 enc req-genpkey req-newkey ca smime smime2 smimeenc cms cms2 cmsenc pkcs12 nopath ocsp ts ssl smime_io cms_io smimeenc_io cmsenc_io set OTHER_DIR=../%HOST_NAME%-bat-gost ) ELSE ( IF %ENGINE_NAME%==gost ( set BASE_TESTS=engine dgst pkcs8 enc req-genpkey req-newkey ca smime smime2 smimeenc cms cms2 cmsenc pkcs12 nopath ocsp ts ssl smime_io cms_io smimeenc_io cmsenc_io set OTHER_DIR=../%HOST_NAME%-bat-cryptocom ) ELSE ( echo No GOST providing engine found exit 1 ) ) set PKCS7_COMPATIBILITY_TESTS=smime_cs cmsenc_cs cmsenc_sc set CLIENT_TESTS=cp20 cp21 set WINCLIENT_TESTS=p1-1xa-tls1-v-cp36r4-srv p1-1xa-tls1-v-cp39-srv p1-1xa-tls1-v-cp4-01 p2-1xa-tls1-v-cp4-01 p2-2xa-tls1-v-cp4-12S p2-5xa-tls1-v-cp4-12L p1-1xa-tls1-v-cp4r3-01 p2-1xa-tls1-v-cp4r3-01 p2-2xa-tls1-v-cp4r3-01 p2-5xa-tls1-v-cp4r3-01 p1-1xa-tls1_1-v-cp4r3-01 p2-1xa-tls1_1-v-cp4r3-01 p2-2xa-tls1_1-v-cp4r3-01 p2-5xa-tls1_1-v-cp4r3-01 p1-1xa-tls1_2-v-cp4r3-01 p2-1xa-tls1_2-v-cp4r3-01 p2-2xa-tls1_2-v-cp4r3-01 p2-5xa-tls1_2-v-cp4r3-01 p1-1xa-tls1-v-cp5-01 p2-1xa-tls1-v-cp5-01 p2-2xa-tls1-v-cp5-01 p2-5xa-tls1-v-cp5-01 p1-1xa-tls1_1-v-cp5-01 p2-1xa-tls1_1-v-cp5-01 p2-2xa-tls1_1-v-cp5-01 p2-5xa-tls1_1-v-cp5-01 p1-1xa-tls1_2-v-cp5-01 p2-1xa-tls1_2-v-cp5-01 p2-2xa-tls1_2-v-cp5-01 p2-5xa-tls1_2-v-cp5-01 set SERVER_TESTS=cp20 cp21 csp36r4 csp39 csp4 csp4r3 csp5 set OPENSSL_DEBUG_MEMORY=on FOR %%t IN (%BASE_TESTS%) DO %TCLSH% %%t.try FOR %%t IN (%PKCS7_COMPATIBILITY_TESTS%) DO %TCLSH% %%t.try FOR %%t IN (%SERVER_TESTS%) DO %TCLSH% server.try %%t FOR %%t IN (%CLIENT_TESTS%) DO %TCLSH% client.try %%t set CVS_RSH=ssh FOR %%t IN (%WINCLIENT_TESTS%) DO %TCLSH% wcli.try %%t IF EXIST %TESTDIR%\%OTHER_DIR% %TCLSH% interop.try IF EXIST %TESTDIR%\%OTHER_VERSION% ( set OTHER_DIR=%OTHER_VERSION% IF %ENGINE_NAME%==cryptocom ( set ALG_LIST="gost2001:A gost2001:B gost2001:C" set ENC_LIST="gost2001:A:1.2.643.2.2.31.3 gost2001:B:1.2.643.2.2.31.4 gost2001:C:1.2.643.2.2.31.2 gost2001:A:" ) ELSE ( set ALG_LIST="gost2001:A gost2001:B gost2001:C" set ENC_LIST="gost2001:A:1.2.643.2.2.31.3 gost2001:B:1.2.643.2.2.31.4 gost2001:C:1.2.643.2.2.31.2 gost2001:A:" ) %TCLSH% interop.try ) %TCLSH% calcstat %TESTDIR%\stats %TESTDIR%\test.result libengine-gost-openssl-3.0.2/tcl_tests/runtest.sh000066400000000000000000000155251446070765000221700ustar00rootroot00000000000000#!/bin/sh # ĐĄĐžŅŅ‚Đ°Đ˛ ĐŊĐ°ĐąĐžŅ€Đ° Ņ‚ĐĩŅŅ‚ĐžĐ˛ # 1. Đ­Ņ‚ĐžŅ‚ ҁĐēŅ€Đ¸ĐŋŅ‚ # 2. ФаКĐģŅ‹ *.try # 3. ФаКĐģŅ‹ *.tcl # 4. ФаКĐģŅ‹ *.ciphers # 5. calcstat # 6. oidfile # 7. name2oid.tst # ĐŸŅ€ĐĩŅ€ĐĩĐēĐ˛Đ¸ĐˇĐ¸Ņ‚Ņ‹, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ Đ´ĐžĐģĐļĐŊŅ‹ ĐąŅ‹Ņ‚ŅŒ ŅƒŅŅ‚Đ°ĐŊОвĐģĐĩĐŊŅ‹ ĐŊа ĐŧĐ°ŅˆĐ¸ĐŊĐĩ: # 1. tclsh. МоĐļĐĩŅ‚ ĐŊĐ°ĐˇŅ‹Đ˛Đ°Ņ‚ŅŒŅŅ ҁ вĐĩŅ€ŅĐ¸ĐĩĐš (ҁĐŧ. ҁĐŋĐ¸ŅĐžĐē вĐĩŅ€ŅĐ¸Đš ĐŊиĐļĐĩ в Ņ†Đ¸ĐēĐģĐĩ # ĐŋĐĩŅ€ĐĩĐąĐžŅ€Đ°) # 2. ssh (Ņ‡Ņ‚Đž Ņ…Đ°Ņ€Đ°ĐēŅ‚ĐĩŅ€ĐŊĐž, ĐŊĐ°ĐˇŅ‹Đ˛Đ°Ņ‚ŅŒŅŅ Đ´ĐžĐģĐļĐĩĐŊ иĐŧĐĩĐŊĐŊĐž Ņ‚Đ°Đē). ДоĐģĐļĐĩĐŊ ĐąŅ‹Ņ‚ŅŒ # ĐŊĐ°ŅŅ‚Ņ€ĐžĐĩĐŊ ĐˇĐ°Ņ…ĐžĐ´ ĐŋĐž ĐēĐģŅŽŅ‡Đ°Đŧ ĐąĐĩС ĐŋĐ°Ņ€ĐžĐģŅ ĐŊа lynx и Đ˛ŅĐĩ Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧŅ‹Đĩ ŅŅ‚Đ°ĐģĐžĐŊĐŊиĐēи. # КĐģŅŽŅ‡Đ¸ ŅŅ‚Đ¸Ņ… ĐŧĐ°ŅˆĐ¸ĐŊ Đ´ĐžĐģĐļĐŊŅ‹ ĐąŅ‹Ņ‚ŅŒ в knownhosts (ҁ ĐŋĐžĐģĐŊŅ‹Đŧи Đ´ĐžĐŧĐĩĐŊĐŊŅ‹Đŧи иĐŧĐĩĐŊаĐŧи # ҁĐĩŅ€Đ˛ĐĩŅ€ĐžĐ˛, Ņ‚Đž ĐĩŅŅ‚ŅŒ lynx.lan.cryptocom.ru и Ņ‚.Đ´.) # 3. Под Windows ҁĐēŅ€Đ¸ĐŋŅ‚ Đ˛Ņ‹ĐŋĐžĐģĐŊŅĐĩŅ‚ŅŅ в ҁҀĐĩĐ´Đĩ MinGW, ĐŋŅ€Đ¸ ŅŅ‚ĐžĐŧ ĐŊ҃ĐļĐŊĐž "Đ´ĐžĐŊĐ°ŅŅ‚Ņ€ĐžĐ¸Ņ‚ŅŒ" # ssh, а иĐŧĐĩĐŊĐŊĐž ŅĐžĐˇĐ´Đ°Ņ‚ŅŒ в Ņ€Đ°ĐˇĐ´ĐĩĐģĐĩ Ņ€ĐĩĐĩŅŅ‚Ņ€Đ° # HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters # DWORD-ĐēĐģŅŽŅ‡ DisableUserTOSSetting=0 CRYPTOPACK_MAIN_VERSION=3 if [ -n "$OPENSSL_LIBCRYPTO" ]; then libdir=`dirname $OPENSSL_LIBCRYPTO` # Linux, ELF HP-UX LD_LIBRARY_PATH=${libdir}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} export LD_LIBRARY_PATH # MacOS X DYLD_LIBRARY_PATH=${libdir}${DYLD_LIBRARY_PATH:+:${DYLD_LIBRARY_PATH}} export DYLD_LIBRARY_PATH fi : ${OPENSSL_APP:=$(which openssl 2>/dev/null)} if [ -z "$OPENSSL_APP" ]; then if [ "$OS" != "Windows NT" -a "$OS" != "Windows_NT" ]; then if [ -x /opt/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl ]; then OPENSSL_APP=/opt/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl elif [ -x /usr/local/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl ];then OPENSSL_APP=/usr/local/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl fi else if [ -x c:/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl.exe ] ; then OPENSSL_APP=c:/cryptopack$CRYPTOPACK_MAIN_VERSION/bin/openssl.exe fi fi fi if [ -z "$OPENSSL_APP" ]; then echo "openssl not found" exit 1 else echo "Using $OPENSSL_APP as openssl" fi : ${TCLSH:=$(which tclsh)} if [ -z "$TCLSH" ]; then for version in "" 8.4 84 8.5 85 8.6 86; do for command in tclsh$version; do for dir in `echo "/opt/cryptopack/bin:$PATH" | sed -e 's/:/ /g'`; do echo "Checking $dir/$command" if [ -x $dir/$command ]; then TCLSH=$dir/$command break 3 fi done done done fi if [ -z "$TCLSH" ]; then echo "tclsh not found in PATH, neither with nor without version, exiting" exit 2 else echo "Using $TCLSH as tclsh" fi TCLSH="$TCLSH -encoding utf-8" echo "PWD: $PWD" : ${OPENSSL_CONF:=$PWD/openssl-gost.cnf} echo "OPENSSL_CONF: $OPENSSL_CONF" export OPENSSL_CONF echo "ENGINE_DIR: $ENGINE_DIR" : ${OPENSSL_ENGINES:=$ENGINE_DIR} echo "OPENSSL_ENGINES: $OPENSSL_ENGINES" export OPENSSL_ENGINES APP_SUFFIX=`basename $OPENSSL_APP .exe|sed s/openssl//` [ -n "$OPENSSL_APP" ]&& export OPENSSL_APP ENGINE_NAME=`$TCLSH getengine.tcl` export ENGINE_NAME [ -z "$TESTDIR" ] && TESTDIR=`pwd` TESTDIR=${TESTDIR}/`hostname`-$ENGINE_NAME [ -n "$APP_SUFFIX" ] && TESTDIR=${TESTDIR}-${APP_SUFFIX} [ -d ${TESTDIR} ] && rm -rf ${TESTDIR} mkdir -p ${TESTDIR} cp oidfile ${TESTDIR} export TESTDIR case "$ENGINE_NAME" in gostkc3) BASE_TEST="1" ;; cryptocom) BASE_TESTS="engine dgst mac pkcs8 enc req-genpkey req-newkey ca smime smime2 smimeenc cms cms2 cmsenc pkcs12 nopath ocsp ts ssl smime_io cms_io smimeenc_io cmsenc_io" OTHER_DIR=`echo $TESTDIR |sed 's/cryptocom/gost/'` ;; gost) BASE_TESTS="engine dgst mac pkcs8 enc req-genpkey req-newkey ca smime smime2 smimeenc cms cms2 cmstc262019 cmsenc pkcs12 nopath ocsp ts ssl smime_io cms_io smimeenc_io cmsenc_io" OTHER_DIR=`echo $TESTDIR |sed 's/gost/cryptocom/'` ;; *) echo "No GOST=providing engine found" 1>&2 exit 1; esac if [ -x copy_param ]; then BASE_TESTS="$BASE_TESTS apache" fi PKCS7_COMPATIBILITY_TESTS="smime_cs cmsenc_cs cmsenc_sc" SERVER_TESTS="cp20 cp21 csp36r4 csp39 csp4 csp4r3 csp5" CLIENT_TESTS="cp20 cp21" WINCLIENT_TESTS="p1-1xa-tls1-v-cp36r4-srv p1-1xa-tls1-v-cp39-srv p1-1xa-tls1-v-cp4-01 p2-1xa-tls1-v-cp4-01 p2-2xa-tls1-v-cp4-12S p2-5xa-tls1-v-cp4-12L p1-1xa-tls1-v-cp4r3-01 p2-1xa-tls1-v-cp4r3-01 p2-2xa-tls1-v-cp4r3-01 p2-5xa-tls1-v-cp4r3-01 p1-1xa-tls1_1-v-cp4r3-01 p2-1xa-tls1_1-v-cp4r3-01 p2-2xa-tls1_1-v-cp4r3-01 p2-5xa-tls1_1-v-cp4r3-01 p1-1xa-tls1_2-v-cp4r3-01 p2-1xa-tls1_2-v-cp4r3-01 p2-2xa-tls1_2-v-cp4r3-01 p2-5xa-tls1_2-v-cp4r3-01 p1-1xa-tls1-v-cp5-01 p2-1xa-tls1-v-cp5-01 p2-2xa-tls1-v-cp5-01 p2-5xa-tls1-v-cp5-01 p1-1xa-tls1_1-v-cp5-01 p2-1xa-tls1_1-v-cp5-01 p2-2xa-tls1_1-v-cp5-01 p2-5xa-tls1_1-v-cp5-01 p1-1xa-tls1_2-v-cp5-01 p2-1xa-tls1_2-v-cp5-01 p2-2xa-tls1_2-v-cp5-01 p2-5xa-tls1_2-v-cp5-01 p8k-5xa-tls1_2-v-cp5-01 p8k-2xa-tls1_2-v-cp5-01 p8m-5xa-tls1_2-v-cp5-01 p8m-2xa-tls1_2-v-cp5-01" OPENSSL_DEBUG_MEMORY=on export OPENSSL_DEBUG_MEMORY fail=0 if [ "$*" ]; then for t do $TCLSH $t.try || fail=1 done exit $fail fi for t in $BASE_TESTS; do if [ "$CI" ]; then if $TCLSH $t.try > $TESTDIR/$t.out 2>&1; then head -1 $TESTDIR/$t.out else fail=2 cat $TESTDIR/$t.out echo "=== Output failures of $TESTDIR/$t.log ===" awk "/ ends failed/" RS= ORS='\n\n' $TESTDIR/$t.log | sed 's/^/\t/' echo "=== End of $TESTDIR/$t.log ===" exit 1 fi else $TCLSH $t.try || fail=3 fi done if false; then # ignore some tests for a time ALG_LIST="rsa:1024 gost2001:XA gost2012_256:XA gost2012_512:A" $TCLSH ssl.try -clientconf $OPENSSL_CONF || fail=4 ALG_LIST="rsa:1024 gost2001:XA gost2012_256:XA gost2012_512:A" $TCLSH ssl.try -serverconf $OPENSSL_CONF || fail=5 for t in $PKCS7_COMPATIBILITY_TESTS; do $TCLSH $t.try || fail=6 done for t in $SERVER_TESTS; do $TCLSH server.try $t || fail=7 done for t in $CLIENT_TESTS; do $TCLSH client.try $t || fail=8 done if [ -n "WINCLIENT_TESTS" ]; then if [ -z "$CVS_RSH" ]; then CVS_RSH=ssh export CVS_RSH fi for t in $WINCLIENT_TESTS; do $TCLSH wcli.try $t || fail=9 done fi if [ -d $OTHER_DIR ]; then OTHER_DIR=../${OTHER_DIR} $TCLSH interop.try fi if [ -d OtherVersion ] ; then case "$ENGINE_NAME" in gostkc3) ;; cryptocom) OTHER_DIR=../OtherVersion ALG_LIST="gost2001:A gost2001:B gost2001:C" ENC_LIST="gost2001:A:1.2.643.2.2.31.3 gost2001:B:1.2.643.2.2.31.4 gost2001:C:1.2.643.2.2.31.2 gost2001:A:" $TCLSH interop.try ;; gost) OTHER_DIR=../OtherVersion ALG_LIST="gost2001:A gost2001:B gost2001:C" ENC_LIST="gost2001:A:1.2.643.2.2.31.3 gost2001:B:1.2.643.2.2.31.4 gost2001:C:1.2.643.2.2.31.2 gost2001:A:" $TCLSH interop.try ;; *) echo "No GOST=providing engine found" 1>&2 exit 1; esac fi fi # false $TCLSH calcstat ${TESTDIR}/stats ${TESTDIR}/test.result grep "leaked" ${TESTDIR}/*.log if [ $fail -ne 0 ]; then echo "Some tests FAILED, code $fail." fi exit $fail libengine-gost-openssl-3.0.2/tcl_tests/runtest1.bat000077500000000000000000000102761446070765000224060ustar00rootroot00000000000000@echo off rem ĐĄĐžŅŅ‚Đ°Đ˛ ĐŊĐ°ĐąĐžŅ€Đ° Ņ‚ĐĩŅŅ‚ĐžĐ˛ rem 1. Đ­Ņ‚ĐžŅ‚ ҁĐēŅ€Đ¸ĐŋŅ‚ rem 2. ФаКĐģŅ‹ *.try rem 3. ФаКĐģŅ‹ *.tcl rem 4. ФаКĐģŅ‹ *.ciphers rem 5. calcstat rem 6. oidfile rem 7. name2oid.tst rem ĐŸŅ€ĐĩŅ€ĐĩĐēĐ˛Đ¸ĐˇĐ¸Ņ‚Ņ‹, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ Đ´ĐžĐģĐļĐŊŅ‹ ĐąŅ‹Ņ‚ŅŒ ŅƒŅŅ‚Đ°ĐŊОвĐģĐĩĐŊŅ‹ ĐŊа ĐŧĐ°ŅˆĐ¸ĐŊĐĩ: rem 1. tclsh. rem 2. ssh (Ņ‡Ņ‚Đž Ņ…Đ°Ņ€Đ°ĐēŅ‚ĐĩŅ€ĐŊĐž, ĐŊĐ°ĐˇŅ‹Đ˛Đ°Ņ‚ŅŒŅŅ Đ´ĐžĐģĐļĐĩĐŊ иĐŧĐĩĐŊĐŊĐž Ņ‚Đ°Đē и ĐŊĐĩ Đ´ĐžĐģĐļĐĩĐŊ Đ˛Ņ‹Đ˛ĐžĐ´Đ¸Ņ‚ŅŒ rem ĐģĐ¸ŅˆĐŊĐ¸Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК), ĐŧŅ‹ Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧ ssh.bat вОĐēŅ€ŅƒĐŗ putty: rem @plink -l build %* rem ДоĐģĐļĐĩĐŊ и ĐŊĐ°ŅŅ‚Ņ€ĐžĐĩĐŊ ĐˇĐ°Ņ…ĐžĐ´ ĐŋĐž ĐēĐģŅŽŅ‡Đ°Đŧ ĐąĐĩС ĐŋĐ°Ņ€ĐžĐģŅ ĐŊа lynx и Đ˛ŅĐĩ Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧŅ‹Đĩ rem ŅŅ‚Đ°ĐģĐžĐŊĐŊиĐēи. КĐģŅŽŅ‡Đ¸ ŅŅ‚Đ¸Ņ… ĐŧĐ°ŅˆĐ¸ĐŊ Đ´ĐžĐģĐļĐŊŅ‹ ĐąŅ‹Ņ‚ŅŒ в knownhosts ҁ ĐŋĐžĐģĐŊŅ‹Đŧи Đ´ĐžĐŧĐĩĐŊĐŊŅ‹Đŧи rem иĐŧĐĩĐŊаĐŧи ҁĐĩŅ€Đ˛ĐĩŅ€ĐžĐ˛, Ņ‚Đž ĐĩŅŅ‚ŅŒ lynx.lan.cryptocom.ru и Ņ‚.Đ´. (Đ´ĐģŅ putty rem knownhosts Ņ…Ņ€Đ°ĐŊŅŅ‚ŅŅ в Ņ€ĐĩĐĩҁ҂Đĩ). rem В Firewall Windows ĐŊĐĩĐžĐąŅ…ĐžĐ´Đ¸ĐŧĐž ĐŋŅ€ĐžĐŋĐ¸ŅĐ°Ņ‚ŅŒ Đ¸ŅĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ, Ņ€Đ°ĐˇŅ€ĐĩŅˆĐ°ŅŽŅ‰ĐĩĐĩ rem ŅĐžĐĩдиĐŊĐĩĐŊĐ¸Ņ Đ´ĐģŅ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹ openssl.exe. ВĐŊиĐŧаĐŊиĐĩ, Windows ĐŊĐĩĐŋŅ€Đ°Đ˛Đ¸ĐģҌĐŊĐž rem Ņ‚Ņ€Đ°ĐēŅ‚ŅƒĐĩŅ‚ ĐŋĐžĐŊŅŅ‚Đ¸Đĩ "ĐģĐžĐēаĐģҌĐŊĐ°Ņ ҁĐĩŅ‚ŅŒ" в ĐžĐŋĐ¸ŅĐ°ĐŊии Đ¸ŅĐēĐģŅŽŅ‡ĐĩĐŊĐ¸Ņ, ĐŊ҃ĐļĐŊĐž ĐģийО rem Đ˛Ņ‹ŅŅ‚Đ°Đ˛ĐģŅŅ‚ŅŒ "ĐģŅŽĐąĐžĐš ĐēĐžĐŧĐŋŅŒŅŽŅ‚ĐĩŅ€", ĐģийО ŅĐ˛ĐŊĐž ĐˇĐ°Đ´Đ°Đ˛Đ°Ņ‚ŅŒ ĐŧĐ°ŅĐē҃ 10.51.0.0/255.255.0.0 IF "%OPENSSL_APP%"=="" set OPENSSL_APP=c:\cryptopack3\bin\openssl.exe IF "%TCLSH%"=="" set TCLSH=c:\Tcl\bin\tclsh.exe %TCLSH% getengine.tcl > engine_name.txt set /p ENGINE_NAME= < engine_name.txt del engine_name.txt hostname > host_name.txt set /p HOST_NAME= < host_name.txt del host_name.txt set TESTDIR=%HOST_NAME%-bat-%ENGINE_NAME% rmdir /s /q %TESTDIR% mkdir %TESTDIR% copy oidfile %TESTDIR% set OTHER_VERSION=../OtherVersion IF %ENGINE_NAME%==cryptocom ( set BASE_TESTS=engine ssl dgst pkcs8 enc req-genpkey req-newkey ca smime smime2 smimeenc cms cms2 cmsenc pkcs12 nopath ocsp ts smime_io cms_io smimeenc_io cmsenc_io set OTHER_DIR=../%HOST_NAME%-bat-gost ) ELSE ( IF %ENGINE_NAME%==gost ( set BASE_TESTS=engine dgst pkcs8 enc req-genpkey req-newkey ca smime smime2 smimeenc cms cms2 cmsenc pkcs12 nopath ocsp ts ssl smime_io cms_io smimeenc_io cmsenc_io set OTHER_DIR=../%HOST_NAME%-bat-cryptocom ) ELSE ( echo No GOST providing engine found exit 1 ) ) set PKCS7_COMPATIBILITY_TESTS=smime_cs cmsenc_cs cmsenc_sc set CLIENT_TESTS=cp20 cp21 set WINCLIENT_TESTS=p1-1xa-tls1-v-cp36r4-srv p1-1xa-tls1-v-cp39-srv p1-1xa-tls1-v-cp4-01 p2-1xa-tls1-v-cp4-01 p2-2xa-tls1-v-cp4-12S p2-5xa-tls1-v-cp4-12L p1-1xa-tls1-v-cp4r3-01 p2-1xa-tls1-v-cp4r3-01 p2-2xa-tls1-v-cp4r3-01 p2-5xa-tls1-v-cp4r3-01 p1-1xa-tls1_1-v-cp4r3-01 p2-1xa-tls1_1-v-cp4r3-01 p2-2xa-tls1_1-v-cp4r3-01 p2-5xa-tls1_1-v-cp4r3-01 p1-1xa-tls1_2-v-cp4r3-01 p2-1xa-tls1_2-v-cp4r3-01 p2-2xa-tls1_2-v-cp4r3-01 p2-5xa-tls1_2-v-cp4r3-01 p1-1xa-tls1-v-cp5-01 p2-1xa-tls1-v-cp5-01 p2-2xa-tls1-v-cp5-01 p2-5xa-tls1-v-cp5-01 p1-1xa-tls1_1-v-cp5-01 p2-1xa-tls1_1-v-cp5-01 p2-2xa-tls1_1-v-cp5-01 p2-5xa-tls1_1-v-cp5-01 p1-1xa-tls1_2-v-cp5-01 p2-1xa-tls1_2-v-cp5-01 p2-2xa-tls1_2-v-cp5-01 p2-5xa-tls1_2-v-cp5-01 set SERVER_TESTS=cp20 cp21 csp36r4 csp39 csp4 csp4r3 csp5 set OPENSSL_DEBUG_MEMORY=on FOR %%t IN (%BASE_TESTS%) DO %TCLSH% %%t.try FOR %%t IN (%PKCS7_COMPATIBILITY_TESTS%) DO %TCLSH% %%t.try rem FOR %%t IN (%SERVER_TESTS%) DO %TCLSH% server.try %%t rem FOR %%t IN (%CLIENT_TESTS%) DO %TCLSH% client.try %%t set CVS_RSH=ssh rem FOR %%t IN (%WINCLIENT_TESTS%) DO %TCLSH% wcli.try %%t IF EXIST %TESTDIR%\%OTHER_DIR% %TCLSH% interop.try IF EXIST %TESTDIR%\%OTHER_VERSION% ( set OTHER_DIR=%OTHER_VERSION% IF %ENGINE_NAME%==cryptocom ( set ALG_LIST="gost2001:A gost2001:B gost2001:C" set ENC_LIST="gost2001:A:1.2.643.2.2.31.3 gost2001:B:1.2.643.2.2.31.4 gost2001:C:1.2.643.2.2.31.2 gost2001:A:" ) ELSE ( set ALG_LIST="gost2001:A gost2001:B gost2001:C" set ENC_LIST="gost2001:A:1.2.643.2.2.31.3 gost2001:B:1.2.643.2.2.31.4 gost2001:C:1.2.643.2.2.31.2 gost2001:A:" ) %TCLSH% interop.try ) %TCLSH% calcstat %TESTDIR%\stats %TESTDIR%\test.result libengine-gost-openssl-3.0.2/tcl_tests/runtest2.bat000077500000000000000000000103061446070765000224010ustar00rootroot00000000000000@echo off rem ĐĄĐžŅŅ‚Đ°Đ˛ ĐŊĐ°ĐąĐžŅ€Đ° Ņ‚ĐĩŅŅ‚ĐžĐ˛ rem 1. Đ­Ņ‚ĐžŅ‚ ҁĐēŅ€Đ¸ĐŋŅ‚ rem 2. ФаКĐģŅ‹ *.try rem 3. ФаКĐģŅ‹ *.tcl rem 4. ФаКĐģŅ‹ *.ciphers rem 5. calcstat rem 6. oidfile rem 7. name2oid.tst rem ĐŸŅ€ĐĩŅ€ĐĩĐēĐ˛Đ¸ĐˇĐ¸Ņ‚Ņ‹, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ Đ´ĐžĐģĐļĐŊŅ‹ ĐąŅ‹Ņ‚ŅŒ ŅƒŅŅ‚Đ°ĐŊОвĐģĐĩĐŊŅ‹ ĐŊа ĐŧĐ°ŅˆĐ¸ĐŊĐĩ: rem 1. tclsh. rem 2. ssh (Ņ‡Ņ‚Đž Ņ…Đ°Ņ€Đ°ĐēŅ‚ĐĩŅ€ĐŊĐž, ĐŊĐ°ĐˇŅ‹Đ˛Đ°Ņ‚ŅŒŅŅ Đ´ĐžĐģĐļĐĩĐŊ иĐŧĐĩĐŊĐŊĐž Ņ‚Đ°Đē и ĐŊĐĩ Đ´ĐžĐģĐļĐĩĐŊ Đ˛Ņ‹Đ˛ĐžĐ´Đ¸Ņ‚ŅŒ rem ĐģĐ¸ŅˆĐŊĐ¸Ņ… ŅĐžĐžĐąŅ‰ĐĩĐŊиК), ĐŧŅ‹ Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧ ssh.bat вОĐēŅ€ŅƒĐŗ putty: rem @plink -l build %* rem ДоĐģĐļĐĩĐŊ и ĐŊĐ°ŅŅ‚Ņ€ĐžĐĩĐŊ ĐˇĐ°Ņ…ĐžĐ´ ĐŋĐž ĐēĐģŅŽŅ‡Đ°Đŧ ĐąĐĩС ĐŋĐ°Ņ€ĐžĐģŅ ĐŊа lynx и Đ˛ŅĐĩ Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧŅ‹Đĩ rem ŅŅ‚Đ°ĐģĐžĐŊĐŊиĐēи. КĐģŅŽŅ‡Đ¸ ŅŅ‚Đ¸Ņ… ĐŧĐ°ŅˆĐ¸ĐŊ Đ´ĐžĐģĐļĐŊŅ‹ ĐąŅ‹Ņ‚ŅŒ в knownhosts ҁ ĐŋĐžĐģĐŊŅ‹Đŧи Đ´ĐžĐŧĐĩĐŊĐŊŅ‹Đŧи rem иĐŧĐĩĐŊаĐŧи ҁĐĩŅ€Đ˛ĐĩŅ€ĐžĐ˛, Ņ‚Đž ĐĩŅŅ‚ŅŒ lynx.lan.cryptocom.ru и Ņ‚.Đ´. (Đ´ĐģŅ putty rem knownhosts Ņ…Ņ€Đ°ĐŊŅŅ‚ŅŅ в Ņ€ĐĩĐĩҁ҂Đĩ). rem В Firewall Windows ĐŊĐĩĐžĐąŅ…ĐžĐ´Đ¸ĐŧĐž ĐŋŅ€ĐžĐŋĐ¸ŅĐ°Ņ‚ŅŒ Đ¸ŅĐēĐģŅŽŅ‡ĐĩĐŊиĐĩ, Ņ€Đ°ĐˇŅ€ĐĩŅˆĐ°ŅŽŅ‰ĐĩĐĩ rem ŅĐžĐĩдиĐŊĐĩĐŊĐ¸Ņ Đ´ĐģŅ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧŅ‹ openssl.exe. ВĐŊиĐŧаĐŊиĐĩ, Windows ĐŊĐĩĐŋŅ€Đ°Đ˛Đ¸ĐģҌĐŊĐž rem Ņ‚Ņ€Đ°ĐēŅ‚ŅƒĐĩŅ‚ ĐŋĐžĐŊŅŅ‚Đ¸Đĩ "ĐģĐžĐēаĐģҌĐŊĐ°Ņ ҁĐĩŅ‚ŅŒ" в ĐžĐŋĐ¸ŅĐ°ĐŊии Đ¸ŅĐēĐģŅŽŅ‡ĐĩĐŊĐ¸Ņ, ĐŊ҃ĐļĐŊĐž ĐģийО rem Đ˛Ņ‹ŅŅ‚Đ°Đ˛ĐģŅŅ‚ŅŒ "ĐģŅŽĐąĐžĐš ĐēĐžĐŧĐŋŅŒŅŽŅ‚ĐĩŅ€", ĐģийО ŅĐ˛ĐŊĐž ĐˇĐ°Đ´Đ°Đ˛Đ°Ņ‚ŅŒ ĐŧĐ°ŅĐē҃ 10.51.0.0/255.255.0.0 IF "%OPENSSL_APP%"=="" set OPENSSL_APP=c:\cryptopack3\bin\openssl.exe IF "%TCLSH%"=="" set TCLSH=c:\Tcl\bin\tclsh.exe %TCLSH% getengine.tcl > engine_name.txt set /p ENGINE_NAME= < engine_name.txt del engine_name.txt hostname > host_name.txt set /p HOST_NAME= < host_name.txt del host_name.txt set TESTDIR=%HOST_NAME%-bat-%ENGINE_NAME% rem emdir /s /q %TESTDIR% rem mkdir %TESTDIR% rem copy oidfile %TESTDIR% set OTHER_VERSION=../OtherVersion IF %ENGINE_NAME%==cryptocom ( set BASE_TESTS=engine ssl dgst pkcs8 enc req-genpkey req-newkey ca smime smime2 smimeenc cms cms2 cmsenc pkcs12 nopath ocsp ts smime_io cms_io smimeenc_io cmsenc_io set OTHER_DIR=../%HOST_NAME%-bat-gost ) ELSE ( IF %ENGINE_NAME%==gost ( set BASE_TESTS=engine dgst pkcs8 enc req-genpkey req-newkey ca smime smime2 smimeenc cms cms2 cmsenc pkcs12 nopath ocsp ts ssl smime_io cms_io smimeenc_io cmsenc_io set OTHER_DIR=../%HOST_NAME%-bat-cryptocom ) ELSE ( echo No GOST providing engine found exit 1 ) ) set PKCS7_COMPATIBILITY_TESTS=smime_cs cmsenc_cs cmsenc_sc set CLIENT_TESTS=cp20 cp21 set WINCLIENT_TESTS=p1-1xa-tls1-v-cp36r4-srv p1-1xa-tls1-v-cp39-srv p1-1xa-tls1-v-cp4-01 p2-1xa-tls1-v-cp4-01 p2-2xa-tls1-v-cp4-12S p2-5xa-tls1-v-cp4-12L p1-1xa-tls1-v-cp4r3-01 p2-1xa-tls1-v-cp4r3-01 p2-2xa-tls1-v-cp4r3-01 p2-5xa-tls1-v-cp4r3-01 p1-1xa-tls1_1-v-cp4r3-01 p2-1xa-tls1_1-v-cp4r3-01 p2-2xa-tls1_1-v-cp4r3-01 p2-5xa-tls1_1-v-cp4r3-01 p1-1xa-tls1_2-v-cp4r3-01 p2-1xa-tls1_2-v-cp4r3-01 p2-2xa-tls1_2-v-cp4r3-01 p2-5xa-tls1_2-v-cp4r3-01 p1-1xa-tls1-v-cp5-01 p2-1xa-tls1-v-cp5-01 p2-2xa-tls1-v-cp5-01 p2-5xa-tls1-v-cp5-01 p1-1xa-tls1_1-v-cp5-01 p2-1xa-tls1_1-v-cp5-01 p2-2xa-tls1_1-v-cp5-01 p2-5xa-tls1_1-v-cp5-01 p1-1xa-tls1_2-v-cp5-01 p2-1xa-tls1_2-v-cp5-01 p2-2xa-tls1_2-v-cp5-01 p2-5xa-tls1_2-v-cp5-01 set SERVER_TESTS=cp20 cp21 csp36r4 csp39 csp4 csp4r3 csp5 set OPENSSL_DEBUG_MEMORY=on rem eOR %%t IN (%BASE_TESTS%) DO %TCLSH% %%t.try rem FOR %%t IN (%PKCS7_COMPATIBILITY_TESTS%) DO %TCLSH% %%t.try FOR %%t IN (%SERVER_TESTS%) DO %TCLSH% server.try %%t FOR %%t IN (%CLIENT_TESTS%) DO %TCLSH% client.try %%t set CVS_RSH=ssh FOR %%t IN (%WINCLIENT_TESTS%) DO %TCLSH% wcli.try %%t IF EXIST %TESTDIR%\%OTHER_DIR% %TCLSH% interop.try IF EXIST %TESTDIR%\%OTHER_VERSION% ( set OTHER_DIR=%OTHER_VERSION% IF %ENGINE_NAME%==cryptocom ( set ALG_LIST="gost2001:A gost2001:B gost2001:C" set ENC_LIST="gost2001:A:1.2.643.2.2.31.3 gost2001:B:1.2.643.2.2.31.4 gost2001:C:1.2.643.2.2.31.2 gost2001:A:" ) ELSE ( set ALG_LIST="gost2001:A gost2001:B gost2001:C" set ENC_LIST="gost2001:A:1.2.643.2.2.31.3 gost2001:B:1.2.643.2.2.31.4 gost2001:C:1.2.643.2.2.31.2 gost2001:A:" ) %TCLSH% interop.try ) %TCLSH% calcstat %TESTDIR%\stats %TESTDIR%\test.result libengine-gost-openssl-3.0.2/tcl_tests/server.try000066400000000000000000000160111446070765000221650ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest if {$argc != 1} { puts stderr "Usage $argv0 cipher-list-file" exit 1 } array set protos { SSLv2 -ssl2 SSLv3 -ssl3 TLSv1 -tls1 TLSv1.1 -tls1_1 TLSv1.2 -tls1_2 "default" {} } get_hosts [lindex $argv 0] cd $::test::dir start_tests "TLS-ŅĐžĐĩдиĐŊĐĩĐŊиĐĩ ҁ ҁĐĩŅ€Đ˛ĐĩŅ€ĐžĐŧ [lindex $argv 0]" if {[engine_name] eq "ccore"} { array unset hosts gost94* } array set suite_map { CRYPTOPRO-DHGOST94-DSS-GOST89-STREAMGOST89 GOST94-GOST89-GOST89 CRYPTOPRO-DHGOST94-DSS-NULL-GOST94 GOST94-NULL-GOST94 CRYPTOPRO-DHGOST-DSS-GOST89-STREAMGOST89 GOST2001-GOST89-GOST89 CRYPTOPRO-DHGOST-DSS-NULL-GOST94 GOST2001-NULL-GOST94 } set CAhost lynx.lan.cryptocom.ru set CAprefix /cgi-bin/autoca foreach alg [array names hosts] { set alg2 [regsub {(gost\d+)cp} $alg {\1}] set alg_fn [string map {":" "_"} $alg2] set alg_short [regexp -inline {^[^:]+} $alg2] set alg_ca [regexp -inline {^[^:]+} $alg] test -skip {[file exist ca_$alg_short.pem]} "ПоĐģŅƒŅ‡Đ¸Ņ‚ŅŒ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ $alg_ca CA" { getCAcert $CAhost $CAprefix $alg_ca } 0 "ca_$alg_ca.pem" if {[array exists suites]} {array unset suites} array set suites $hosts($alg) foreach suite [array names suites] { if {![regexp {(.+):(.+)} $suite => proto cs]} { set cs $suite set proto "default" } if {[info exists suite_map($cs)]} { set mycs $suite_map($cs) } else { set mycs $cs } if {![regexp {(.+:\d+):(.*)} $suites($suite) x url servertype]} { set servertype apache set url $suites($suite) } if {$servertype eq "iis"} { set failure "HTTP 403.7 - Forbidden: Client certificate required" set failure_exit_code 0 } else { set failure "ssl handshake failure" set failure_exit_code 1 } regexp {(.+):(\d+)} $url dummy get_hostname get_port test "$suite ŅŅ‚Đ°Ņ‚Đ¸Ņ‡ĐĩҁĐēĐ°Ņ ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ° " { grep "

" [openssl [concat s_client $protos($proto) \ [list -cipher $mycs -CAfile ca_$alg_ca.pem -connect $url \ -verify_return_error -verify 1 -ign_eof \ << "GET /ssl_test.html HTTP/1.1\nHost: $get_hostname\nConnection: close\n\n"]]] } 0 "

Test SSL static page

\n" test "$suite йОĐģŅŒŅˆĐ°Ņ ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ°" { grep "

" [openssl [concat s_client $protos($proto) \ [list -cipher $mycs -CAfile ca_$alg_ca.pem -connect $url \ -verify_return_error -verify 1 -ign_eof \ << "GET /ssl_test_big.html HTTP/1.1\nHost: $get_hostname\nConnection: close\n\n"]]] } 0 "

Big test SSL static page

\n" if {$servertype eq "iis"} { test "$suite ҁĐēŅ€Đ¸ĐŋŅ‚ printenv.asp" { grep "SERVER_PORT_SECURE:" [openssl \ [concat s_client $protos($proto) \ [list -cipher $mycs -CAfile ca_$alg_ca.pem\ -connect $url -verify_return_error -verify 1 -ign_eof \ << "GET /printenv.asp HTTP/1.1\nHost: $get_hostname\nConnection: close\n\n"]]] } 0 "SERVER_PORT_SECURE: 1\n" } else { test "$suite ҁĐēŅ€Đ¸ĐŋŅ‚ printenv" { grep "SSL_CIPHER=" [openssl \ [concat s_client $protos($proto) \ [list -cipher $mycs -CAfile ca_$alg_ca.pem \ -connect $url -verify_return_error -verify 1 -ign_eof \ << "GET /cgi-bin/printenv HTTP/1.1\nHost: $get_hostname\nConnection: close\n\n"]]] } 0 "SSL_CIPHER=\"$cs\"\n" } if {[string match *GOST2012* $suite]} { set alg_cli_list "$alg gost2001:B gost2012_256:B gost2012_512:B" } elseif {[string match *GOST2001* $suite]} { set alg_cli_list "$alg gost2001:B" } else { set alg_cli_list $alg } foreach alg_cli $alg_cli_list { set alg_cli_fn [string map {":" "_"} $alg_cli] set alg_cli_short [regexp -inline {^[^:]+} $alg_cli] test -skip {[file exist U_x_$alg_cli_fn/cert.pem]} "ПоĐģŅƒŅ‡ĐĩĐŊиĐĩ ĐēĐģиĐĩĐŊ҂ҁĐēĐžĐŗĐž ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ° $alg_cli" { getCAAlgParams $CAhost $CAprefix $alg_cli_short if {![makeUser U_x_$alg_cli_fn $alg_cli CN \ "Test engine on [info hostname]"]} { error "Request generation failed" } registerUserAtCA U_x_$alg_cli_fn $CAhost $CAprefix $alg_ca file exists U_x_$alg_cli_fn/cert.pem } 0 1 test "$suite ĐŊĐĩŅ‚ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ°, ŅŅ‚Đ°Ņ‚Đ¸Ņ‡ĐĩcĐēĐ°Ņ ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ°" { set out [openssl [concat s_client $protos($proto) \ [list -msg -cipher $mycs -CAfile ca_$alg_ca.pem \ -verify_return_error -verify 1 -connect $url -ign_eof \ << "GET /ssl_auth_test.html HTTP/1.1\nHost: $get_hostname\nConnection: close\n\n"]]] if {[regexp $failure $out match]} { set match } else { set out } } $failure_exit_code $failure test -skip {![file exists U_x_$alg_cli_fn/cert.pem]} \ "$suite, ĐĩŅŅ‚ŅŒ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚, ŅŅ‚Đ°Ņ‚Đ¸Ņ‡ĐĩҁĐēĐ°Ņ ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ†Đ°" { grep "

" [openssl [concat s_client $protos($proto) \ [list -msg -cipher $mycs -cert U_x_$alg_cli_fn/cert.pem \ -key U_x_$alg_cli_fn/seckey.pem -CAfile ca_$alg_ca.pem \ -verify_return_error -verify 1 -connect $url -ign_eof \ << "GET /ssl_auth_test.html HTTP/1.1\nHost: $get_hostname\nConnection: close\n\n"]]] } 0 "

Test SSL static page

\n" if {$servertype eq "iis"} { test "$suite, ĐŊĐĩŅ‚ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ°, ҁĐēŅ€Đ¸ĐŋŅ‚ printenv_auth.asp" { set out [openssl [concat s_client $protos($proto) \ [list -msg -cipher $mycs -CAfile ca_$alg_ca.pem \ -verify_return_error -verify 1 -connect $url -ign_eof \ << "GET /printenv_auth.asp HTTP/1.1\nHost: $get_hostname\nConnection: close\n\n"]]] if {[regexp $failure $out match]} { set match } else { set out } } 0 $failure test -skip {![file exists U_x_$alg_cli_fn/cert.pem]} \ "$suite, ĐĩŅŅ‚ŅŒ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚, ҁĐēŅ€Đ¸ĐŋŅ‚ printenv_auth.asp" { grep CERT_FLAGS [openssl [concat s_client $protos($proto) \ [list -msg -cipher $mycs -cert U_x_$alg_cli_fn/cert.pem\ -key U_x_$alg_cli_fn/seckey.pem -CAfile ca_$alg_ca.pem \ -verify_return_error -verify 1 -connect $url -ign_eof \ << "GET /printenv_auth.asp HTTP/1.1\nHost: $get_hostname\nConnection: close\n\n"]]] } 0 "CERT_FLAGS: 1\n" } else { test "$suite, ĐŊĐĩŅ‚ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ°, ҁĐēŅ€Đ¸ĐŋŅ‚ printenv" { set out [openssl [concat s_client $protos($proto) \ [list -cipher $mycs -CAfile ca_$alg_ca.pem \ -verify_return_error -verify 1 -connect $url -ign_eof \ << "GET /cgi-bin/printenv/auth HTTP/1.1\nHost: $get_hostname\nConnection: close\n\n"]]] if {[regexp "ssl handshake failure" $out match]} { set match } else { set out } } 1 "ssl handshake failure" test -skip {![file exists U_x_$alg_cli_fn/cert.pem]} \ "$suite, ĐĩŅŅ‚ŅŒ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚, ҁĐēŅ€Đ¸ĐŋŅ‚ printenv" { grep SSL_CLIENT_VERIFY [openssl \ [concat s_client $protos($proto) \ [list -cipher $mycs -cert U_x_$alg_cli_fn/cert.pem \ -key U_x_$alg_cli_fn/seckey.pem -CAfile ca_$alg_ca.pem \ -verify_return_error -verify 1 -connect $url -ign_eof \ << "GET /cgi-bin/printenv/auth HTTP/1.1\nHost: $get_hostname\nConnection: close\n\n"]]] } 0 "SSL_CLIENT_VERIFY=\"SUCCESS\"\n" } } } } end_tests libengine-gost-openssl-3.0.2/tcl_tests/smime.try000066400000000000000000000200111446070765000217640ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ smime" test "Creating CA 2001" { makeCA ${testname}CA gost2001:A } 0 1 test "Creating CA 2012" { makeCA } 0 1 if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {gost2001:A gost2001:B gost2001:C gost2012_256:A gost2012_256:B gost2012_256:C gost2012_512:A gost2012_512:B}} "open" {set alg_list {gost2001:A gost2001:B gost2001:C gost2012_256:A gost2012_256:B gost2012_256:C gost2012_512:A gost2012_512:B}} } } foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username U_smime_$alg_fn switch -glob $alg { gost2012* {set ::test::ca ${testname}CA-2012 set ca_sign_alg hash_with_sign12_512 } * {set ::test::ca ${testname}CA set ca_sign_alg hash_with_sign01_cp } } test "Creating user with signing key $alg" { makeRegisteredUser $username $alg if {![file exists $username/req.pem]&&[file exists $username/cert.pem]} { file delete $username/cert.pem } file exists $username/cert.pem } 0 1 test -skip {![file exists $username/cert.pem]} -createsfiles [list sign.dat sign_$alg_fn.msg] "Signing a message without cert by $alg" { makeFile sign.dat [string repeat "Test data to sign.\n" 100] openssl "smime -sign -in sign.dat -text -out sign_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem -nocerts" file isfile sign_$alg_fn.msg } 0 1 test -skip {![file exist sign_$alg_fn.msg]} "Checking micalg param in signed without cert $alg message" { regexp -- micalg="[micalg [alg_hash $alg]]" [grep micalg [getFile sign_$alg_fn.msg]] } 0 1 test -createsfiles sign_$alg_fn.pem -skip {![file exist sign_$alg_fn.msg]} "Extracting PKCS7 from signed without cert $alg message" { openssl "smime -pk7out -out sign_$alg_fn.pem -in sign_$alg_fn.msg" file isfile sign_$alg_fn.pem } 0 1 test -skip {![file exists sign_$alg_fn.pem]} "Checking oids in pkcs7 struct" { extract_oids sign_$alg_fn.pem PEM } 0 [mkObjList [hash_long_name $alg] [hash_long_name $alg] "GOST R 34.11-2012 with 256 bit hash" "GOST R 34.11-2012 with 512 bit hash" "GOST R 34.11-94" "GOST 28147-89" [alg_long_name $alg]] #[mkObjList [alg_hash $alg] [alg_hash $alg] hash_12_256 hash_12_512 hash_94 crypt89_cc [alg_id $alg]] # hash_12_256 hash_12_512 hash_94 crypt89_cc are from sMIMECapabilities test -skip {![file exists sign_$alg_fn.msg]} "Verifying a message signed with $alg without ca " { grep Veri [openssl "smime -verify -text -in sign_$alg_fn.msg -out verified.txt -noverify -certfile $username/cert.pem"] } 0 "Verification successful " test -skip {![file exists sign_$alg_fn.msg]} "Verifying a message signed with $alg with ca" { grep Veri [openssl "smime -verify -text -in sign_$alg_fn.msg -out verified.txt -certfile $username/cert.pem -CAfile $::test::ca/cacert.pem"] } 0 "Verification successful " test -skip {![file exists sign_$alg_fn.msg]} -createsfiles [list bad_$alg_fn.msg verified.txt] "Verifying corrupted messages signed with $alg" { set corrupted [getFile sign_$alg_fn.msg] set index [string first "Test data" $corrupted ] makeFile bad_$alg_fn.msg [string replace $corrupted $index [expr $index+9] "Bad data"] grep Verification [openssl "smime -verify -text -in bad_$alg_fn.msg -out verified.txt -noverify -certfile $username/cert.pem"] } 1 "Verification failure" test -skip {![file exists $username/cert.pem]} -createsfiles [list sign.dat sign_c_$alg_fn.msg] "Signing a message by $alg with cert" { makeFile sign.dat [string repeat "Test data to sign.\n" 100] openssl "smime -sign -in sign.dat -crlfeol -text -out sign_c_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem" file isfile sign_c_$alg_fn.msg } 0 1 test -skip {![file exist sign_c_$alg_fn.msg]} "Checking micalg param in signed with cert $alg message" { regexp -- micalg="[micalg [alg_hash $alg]]" [grep micalg [getFile sign_c_$alg_fn.msg]] } 0 1 test -skip {![file exists sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert inside without ca" { grep Veri [openssl "smime -verify -text -in sign_c_$alg_fn.msg -out verified.txt -noverify"] } 0 "Verification successful " test -skip {![file exists sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert with ca" { grep Veri [openssl "smime -verify -text -in sign_c_$alg_fn.msg -out verified.txt -CAfile $::test::ca/cacert.pem"] } 0 "Verification successful " test -skip {![file exists $username/cert.pem]} -createsfiles {sign.dat sign_op_$alg_fn.msg} "Signing a message by $alg with cert using opaque signing" { makeFile sign.dat [string repeat "Test data to sign.\n" 100] openssl "smime -sign -in sign.dat -text -out sign_op_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem -nodetach" file isfile sign_op_$alg_fn.msg } 0 1 test -createsfiles verified.txt -skip {![file exists sign_op_$alg_fn.msg]} "Verifying a message signed by $alg having cert inside without ca" { grep Veri [openssl "smime -verify -text -in sign_op_$alg_fn.msg -out verified.txt -noverify"] } 0 "Verification successful " test -createsfiles verified.txt -skip {![file exists sign_op_$alg_fn.msg]} "Verifying a $alg opaque message with ca" { grep Veri [openssl "smime -verify -text -in sign_op_$alg_fn.msg -out verified.txt -CAfile $::test::ca/cacert.pem"] } 0 "Verification successful " test -createsfiles broken_op_$alg_fn.msg -skip {![file exists sign_op_$alg_fn.msg]} "Verifying broken $alg opaque message" { set data [getFile sign_op_$alg_fn.msg] regexp "(.*)\n\r?\n(.+)" $data match header encoded set asnstruct [::base64::decode $encoded] makeFile broken_op_$alg_fn.msg "$header\n\n[::base64::encode [regsub -all\ "Test data" $asnstruct "Best data"]]" grep Verification [openssl "smime -verify -text -in broken_op_$alg_fn.msg -out verified.txt -CAfile $::test::ca/cacert.pem"] } 1 "Verification failure" test -createsfiles "sign_det_$alg_fn.msg" -skip {![file exists $username/cert.pem]||![file exists sign.dat]} "Creating detached $alg signature" { openssl "smime -sign -binary -in sign.dat -out sign_det_$alg_fn.msg -signer $username/cert.pem -inkey $username/seckey.pem" file exists sign_det_$alg_fn.msg } 0 1 test -skip {![file exist sign_det_$alg_fn.msg]} "Checking micalg param in detached $alg signature" { regexp -- micalg="[micalg [alg_hash $alg]]" [grep micalg [getFile sign_det_$alg_fn.msg]] } 0 1 test -createsfiles sign_det_$alg_fn.pem -skip {![file exist sign_det_$alg_fn.msg]} "Extracting PKCS7 from signed $alg message" { openssl "smime -pk7out -out sign_det_$alg_fn.pem -in sign_det_$alg_fn.msg" file isfile sign_det_$alg_fn.pem } 0 1 #We expect cryptocom oids because of cert signed by ca with Cryptocom algs # Result sequence # 1. digest # 2. algorithm of CA key # 3. algorithm of current key # 4. algorithm of CA key # 5. digest # 6. digests from sMIMECapabilities # 7. encryption from sMIMECapabilities # 8. algorithm of current key test -skip {![file exists sign_det_$alg_fn.pem]} "Checking oids in pkcs7 struct" { extract_oids sign_det_$alg_fn.pem PEM } 0 [mkObjList [hash_long_name $alg] [smime_hash_with_sign_long_name $ca_sign_alg] [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg]] [smime_hash_with_sign_long_name $ca_sign_alg] [hash_long_name $alg] "GOST R 34.11-2012 with 256 bit hash" "GOST R 34.11-2012 with 512 bit hash" "GOST R 34.11-94" "GOST 28147-89" [alg_long_name $alg]] test -skip {![file exists sign_det_$alg_fn.pem]} "Verifying detached $alg signature" { grep Veri [openssl "smime -verify -content sign.dat -inform PEM -in sign_det_$alg_fn.pem -out verified.txt -noverify"] } 0 "Verification successful " test -skip {![file exists sign_det_$alg_fn.msg]} -createsfiles {bad.dat} "Verifying corrupted $alg detached signature" { makeFile bad.dat [regsub Test [getFile sign.dat] Best] grep Verification [openssl "smime -verify -content bad.dat -in sign_det_$alg_fn.msg -out verified.txt -CAfile $::test::ca/cacert.pem"] } 1 "Verification failure" } end_tests libengine-gost-openssl-3.0.2/tcl_tests/smime2.try000066400000000000000000000221061446070765000220550ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ smime - Đ˛Ņ‚ĐžŅ€Đ°Ņ ĐŋОдĐŋĐ¸ŅŅŒ" test "Creating CA" { makeCA } 0 1 makeFile signed2.dat "Test data for 2 signatures" foreach length {256 512} { test "Creating users $length" { makeRegisteredUser U_smime_1_$length gost2012_$length:A CN USER1_$length emailAddress test@cryptocom.ru makeRegisteredUser U_smime_2_$length gost2012_$length:A CN USER2_$length emailAddress test@cryptocom.ru } 0 1 test -createsfiles signed2_1_$length.asn "Signing in DER format with 1st signature" { openssl "smime -sign -binary -outform der -inform der -nodetach -inkey U_smime_1_$length/seckey.pem -signer U_smime_1_$length/cert.pem -in signed2.dat -out signed2_1_$length.asn" file isfile signed2_1_$length.asn } 0 1 test -createsfiles signed2_2_$length.asn "Signing in DER format with 2nd signature" { openssl "smime -resign -binary -outform der -inform der -nodetach -inkey U_smime_2_$length/seckey.pem -signer U_smime_2_$length/cert.pem -in signed2_1_$length.asn -out signed2_2_$length.asn" file isfile signed2_2_$length.asn } 0 1 test -createsfiles {was_signed.dat signer.certs} "Verifying signature" { grep "Verif" [openssl "smime -verify -inform der -in signed2_2_$length.asn -noverify -signer signer.certs -out was_signed.dat"] } 0 {Verification successful } test "Signed data is extracted correctly" { string eq [getFile signed2.dat] [getFile was_signed.dat] } 0 1 ### Test extracted sertificates test "Extracting signer certificates" { set i 0 set subjs {} set certs [regexp -all -inline -- {-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----} [getFile signer.certs]] foreach cert $certs { makeFile cert[incr i].pem $cert lappend subjs [regsub -all " = " [grep subject [openssl "x509 -in cert$i.pem -subject -noout"]] "=" ] } lsort $subjs } 0 "{subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER1_$length, emailAddress=test@cryptocom.ru } {subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER2_$length, emailAddress=test@cryptocom.ru }" test -createsfiles signed2_1_$length\_op.msg "Signing opaque in S/MIME format with 1st signature" { openssl "smime -sign -binary -nodetach -inkey U_smime_1_$length/seckey.pem -signer U_smime_1_$length/cert.pem -in signed2.dat -out signed2_1_$length\_op.msg" file isfile signed2_1_$length\_op.msg } 0 1 test -createsfiles signed2_2_$length\_op.msg "Signing opaque in S/MIME format with 2nd signature" { openssl "smime -resign -binary -nodetach -inkey U_smime_2_$length/seckey.pem -signer U_smime_2_$length/cert.pem -in signed2_1_$length\_op.msg -out signed2_2_$length\_op.msg" file isfile signed2_2_$length\_op.msg } 0 1 test -createsfiles {was_signed.dat signer.certs} "Verifying opaque signature" { grep "Verif" [openssl "smime -verify -inform smime -in signed2_2_$length\_op.msg -noverify -signer signer.certs -out was_signed.dat"] } 0 {Verification successful } test "Signed data is extracted correctly" { string eq [getFile signed2.dat] [getFile was_signed.dat] } 0 1 ### Test extracted sertificates test "Extracting signer certificates" { set i 0 set subjs {} set certs [regexp -all -inline -- {-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----} [getFile signer.certs]] foreach cert $certs { makeFile cert[incr i].pem $cert lappend subjs [regsub -all " = " [grep subject [openssl "x509 -in cert$i.pem -subject -noout"]] "=" ] } lsort $subjs } 0 "{subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER1_$length, emailAddress=test@cryptocom.ru } {subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER2_$length, emailAddress=test@cryptocom.ru }" test -createsfiles signed2_1_$length\_det.asn "Signing detached in DER format with 1st signature" { openssl "smime -sign -binary -outform der -inkey U_smime_1_$length/seckey.pem -signer U_smime_1_$length/cert.pem -in signed2.dat -out signed2_1_$length\_det.asn" file isfile signed2_1_$length\_det.asn } 0 1 test -createsfiles signed2_2_$length\_det.asn "Signing detached in DER format with 2nd signature" { openssl "smime -resign -binary -inkey U_smime_2_$length/seckey.pem -signer U_smime_2_$length/cert.pem -in signed2_1_$length\_det.asn -content signed2.dat -inform der -outform der -out signed2_2_$length\_det.asn" file isfile signed2_2_$length\_det.asn } 0 1 test -createsfiles {was_signed.dat signer.certs} "Verifying detached signature in DER format" { grep "Verif" [openssl "smime -verify -in signed2_2_$length\_det.asn -noverify -signer signer.certs -out was_signed.dat -content signed2.dat -inform der"] } 0 {Verification successful } test "Signed data is extracted correctly" { string eq [getFile signed2.dat] [getFile was_signed.dat] } 0 1 ### Test extracted sertificates test "Extracting signer certificates" { set i 0 set subjs {} set certs [regexp -all -inline -- {-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----} [getFile signer.certs]] foreach cert $certs { makeFile cert_asn[incr i].pem $cert lappend subjs [regsub -all " = " [grep subject [openssl "x509 -in cert$i.pem -subject -noout"]] "=" ] } lsort $subjs } 0 "{subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER1_$length, emailAddress=test@cryptocom.ru } {subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER2_$length, emailAddress=test@cryptocom.ru }" test -createsfiles signed2_1_$length.msg "Signing in S/MIME format with 1st signature" { openssl "smime -sign -binary -inform der -inkey U_smime_1_$length/seckey.pem -signer U_smime_1_$length/cert.pem -in signed2.dat -out signed2_1_$length.msg" file isfile signed2_1_$length.msg } 0 1 test -createsfiles signed2_2_$length.msg "Signing in S/MIME format with 2nd signature" { grep "SMIME" [openssl "smime -resign -binary -inkey U_smime_2_$length/seckey.pem -signer U_smime_2_$length/cert.pem -in signed2_1_$length.msg -inform smime -out signed2_2_$length.msg"] } 0 "" test -createsfiles {was_signed.dat signer.certs} "Verifying signature" { grep "Verif" [openssl "smime -verify -in signed2_2_$length.msg -noverify -signer signer.certs -out was_signed.dat -inform smime"] } 0 {Verification successful } test "Signed data is extracted correctly" { string eq [getFile signed2.dat] [getFile was_signed.dat] } 0 1 ### Test extracted sertificates test "Extracting signer certificates" { set i 0 set subjs {} set certs [regexp -all -inline -- {-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----} [getFile signer.certs]] foreach cert $certs { makeFile cert_smime[incr i].pem $cert lappend subjs [regsub -all " = " [grep subject [openssl "x509 -in cert$i.pem -subject -noout"]] "=" ] } lsort $subjs } 0 "{subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER1_$length, emailAddress=test@cryptocom.ru } {subject=C=RU, O=Cryptocom, OU=OpenSSL Team, CN=USER2_$length, emailAddress=test@cryptocom.ru }" } test "Resigning in DER format with a unsuitable key length 512" { openssl "smime -resign -binary -inform der -nodetach -inkey U_smime_2_512/seckey.pem -signer U_smime_2_512/cert.pem -in signed2_1_256.asn" } 1 "no matching digest" test "Resigning in DER format with a unsuitable key length 256" { openssl "smime -resign -binary -inform der -nodetach -inkey U_smime_2_256/seckey.pem -signer U_smime_2_256/cert.pem -in signed2_1_512.asn" } 1 "no matching digest" test "Resigning opaque in S/MIME format with a unsuitable key length 512" { openssl "smime -resign -binary -nodetach -inkey U_smime_2_512/seckey.pem -signer U_smime_2_512/cert.pem -in signed2_1_256_op.msg" } 1 "no matching digest" test "Resigning opaque in S/MIME format with a unsuitable key length 256" { openssl "smime -resign -binary -nodetach -inkey U_smime_2_256/seckey.pem -signer U_smime_2_256/cert.pem -in signed2_1_512_op.msg" } 1 "no matching digest" test "Resigning detached in DER format with a unsuitable key length 512" { openssl "smime -resign -binary -inform der -inkey U_smime_2_512/seckey.pem -signer U_smime_2_512/cert.pem -in signed2_1_256_det.asn -content signed2.dat" } 1 "no matching digest" test "Resigning detached in DER format with a unsuitable key length 256" { openssl "smime -resign -binary -inform der -inkey U_smime_2_256/seckey.pem -signer U_smime_2_256/cert.pem -in signed2_1_512_det.asn -content signed2.dat" } 1 "no matching digest" test "Resigning in S/MIME format with a unsuitable key length 512" { openssl "smime -resign -binary -inkey U_smime_2_512/seckey.pem -signer U_smime_2_512/cert.pem -in signed2_1_256.msg" } 1 "no matching digest" test "Resigning in S/MIME format with a unsuitable key length 256" { openssl "smime -resign -binary -inkey U_smime_2_256/seckey.pem -signer U_smime_2_256/cert.pem -in signed2_1_512.msg" } 1 "no matching digest" end_tests #./load_engine smime -sign -binary -outform der -inform der -nodetach -inkey certs/fstek.key -signer certs/fstek.crt -out signed2 -in signed1 #./load_engine smime -verify -inform der -in signed2 -noverify #./load_engine smime -verify -inform der -in signed2 -noverify -signer sss #cat sss #history #vim sss #./load_engine x509 -in sss sss2 #./load_engine x509 -in sss #./load_engine x509 -in sss -subject -noout #./load_engine x509 -in sss2 -subject -noout #./load_engine smime -verify -inform der -in signed2 -noverify -signer sss -out qqq libengine-gost-openssl-3.0.2/tcl_tests/smime_cs.try000066400000000000000000000103561446070765000224640ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа Đ˛ĐžŅĐŧĐĩŅŅ‚Đ¸ĐŧĐžŅŅ‚ŅŒ ĐŋĐž ĐŋОдĐŋĐ¸ŅĐ¸ ҁ ŅŅ‚Đ°ĐģĐžĐŊĐŊŅ‹Đŧи ҁĐĩŅ€Đ˛ĐĩŅ€Đ°Đŧи" if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {gost2001:A gost2001:B gost2001:C}} "open" {set alg_list {gost2001:A gost2001:B gost2001:C}} } } foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username U_smime_$alg_fn switch -glob $alg { gost2012* {set ::test::ca smimeCA-2012 set ca_sign_alg hash_with_sign12_512 } * {set ::test::ca smimeCA set ca_sign_alg hash_with_sign01_cp } } set hosts [list tls-ref-cp21] foreach hstname $hosts { test -skip {![file exists sign_$alg_fn.msg]} "Verifying a message signed with $alg without ca via cms" { grep Veri [openssl_remote "$username sign_$alg_fn.msg" "$hstname" "cms -verify -text -in TESTPATH/sign_$alg_fn.msg -out TESTPATH/verified.txt -noverify -certfile TESTPATH/$username/cert.pem" "smime"] } 0 "Verification successful " test -skip {![file exists sign_$alg_fn.msg]} "Verifying a message signed with $alg with ca via cms" { grep Veri [openssl_remote "$::test::ca sign_$alg_fn.msg" "$hstname" "cms -verify -text -in TESTPATH/sign_$alg_fn.msg -out TESTPATH/verified.txt -certfile TESTPATH/$username/cert.pem -CAfile TESTPATH/$::test::ca/cacert.pem" "smime"] } 0 "Verification successful " test -skip {![file exists bad_$alg_fn.msg]} -createsfiles TESTPATH/verified.txt] "Verifying corrupted messages signed with $alg via cms" { grep Verification [openssl_remote "bad_$alg_fn.msg" "$hstname" "cms -verify -text -in TESTPATH/bad_$alg_fn.msg -out TESTPATH/verified.txt -noverify -certfile TESTPATH/$username/cert.pem" "smime"] } 1 "Verification failure" test -skip {![file exists sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert inside without ca via cms" { grep Veri [openssl_remote "sign_c_$alg_fn.msg" "$hstname" "cms -verify -text -in TESTPATH/sign_c_$alg_fn.msg -out TESTPATH/verified.txt -noverify" "smime"] } 0 "Verification successful " test -skip {![file exists sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert with ca via cms" { grep Veri [openssl_remote "sign_c_$alg_fn.msg" "$hstname" "cms -verify -text -in TESTPATH/sign_c_$alg_fn.msg -out TESTPATH/verified.txt -CAfile TESTPATH/$::test::ca/cacert.pem" "smime"] } 0 "Verification successful " test -createsfiles TESTPATH/verified.txt -skip {![file exists sign_op_$alg_fn.msg]} "Verifying a message signed by $alg having cert inside without ca via cms" { grep Veri [openssl_remote "sign_op_$alg_fn.msg" "$hstname" "cms -verify -text -in TESTPATH/sign_op_$alg_fn.msg -out TESTPATH/verified.txt -noverify" "smime"] } 0 "Verification successful " test -createsfiles TESTPATH/verified.txt -skip {![file exists sign_op_$alg_fn.msg]} "Verifying a $alg opaque message with ca via cms" { grep Veri [openssl_remote "sign_op_$alg_fn.msg" "$hstname" "cms -verify -text -in TESTPATH/sign_op_$alg_fn.msg -out TESTPATH/verified.txt -CAfile TESTPATH/$::test::ca/cacert.pem" "smime"] } 0 "Verification successful " test -skip {![file exists broken_op_$alg_fn.msg]} "Verifying broken $alg opaque message" { grep Verification [openssl_remote "broken_op_$alg_fn.msg" "$hstname" "cms -verify -text -in TESTPATH/broken_op_$alg_fn.msg -out TESTPATH/verified.txt -CAfile TESTPATH/$::test::ca/cacert.pem" "smime"] } 1 "Verification failure" test -skip {![file exists sign_det_$alg_fn.pem]} "Verifying detached $alg signature via cms" { grep Veri [openssl_remote "sign_det_$alg_fn.pem sign.dat" "$hstname" "cms -verify -content TESTPATH/sign.dat -inform PEM -in TESTPATH/sign_det_$alg_fn.pem -out TESTPATH/verified.txt -noverify" "smime"] } 0 "Verification successful " test -skip {![file exists sign_det_$alg_fn.msg] || ![file exists bad.dat]} "Verifying corrupted $alg detached signature" { grep Verification [openssl_remote "sign_det_$alg_fn.msg bad.dat" "$hstname" "cms -verify -content TESTPATH/bad.dat -in TESTPATH/sign_det_$alg_fn.msg -out TESTPATH/verified.txt -CAfile TESTPATH/$::test::ca/cacert.pem" "smime"] } 1 "Verification failure" } } end_tests libengine-gost-openssl-3.0.2/tcl_tests/smime_io.try000066400000000000000000000071211446070765000224620ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ŅĐžĐ˛ĐŧĐĩŅŅ‚Đ¸ĐŧĐžŅŅ‚ŅŒ smime и cms -sign" if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {gost2001:A gost2001:B gost2001:C gost2012_256:A gost2012_256:B gost2012_256:C gost2012_512:A gost2012_512:B}} "open" {set alg_list {gost2001:A gost2001:B gost2001:C gost2012_256:A gost2012_256:B gost2012_256:C gost2012_512:A gost2012_512:B}} } } foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username U_smime_$alg_fn switch -glob $alg { gost2012* {set ::test::ca smimeCA-2012 set ca_sign_alg hash_with_sign12_512 } * {set ::test::ca smimeCA set ca_sign_alg hash_with_sign01_cp } } test -skip {![file exists sign_$alg_fn.msg]} "Verifying a message signed with $alg without ca via cms" { grep Veri [openssl "cms -verify -text -in sign_$alg_fn.msg -out verified.txt -noverify -certfile $username/cert.pem"] } 0 "CMS Verification successful " test -skip {![file exists sign_$alg_fn.msg]} "Verifying a message signed with $alg with ca via cms" { grep Veri [openssl "cms -verify -text -in sign_$alg_fn.msg -out verified.txt -certfile $username/cert.pem -CAfile $::test::ca/cacert.pem"] } 0 "CMS Verification successful " test -skip {![file exists bad_$alg_fn.msg]} -createsfiles verified.txt "Verifying corrupted messages signed with $alg via smime" { grep Verification [openssl "cms -verify -text -in bad_$alg_fn.msg -out verified.txt -noverify -certfile $username/cert.pem"] } 1 "Verification failure" test -skip {![file exists sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert inside without ca via cms" { grep Veri [openssl "cms -verify -text -in sign_c_$alg_fn.msg -out verified.txt -noverify"] } 0 "CMS Verification successful " test -skip {![file exists sign_c_$alg_fn.msg]} "Verifying a message signed with $alg having cert with ca via cms" { grep Veri [openssl "cms -verify -text -in sign_c_$alg_fn.msg -out verified.txt -CAfile $::test::ca/cacert.pem"] } 0 "CMS Verification successful " test -createsfiles verified.txt -skip {![file exists sign_op_$alg_fn.msg]} "Verifying a message signed by $alg having cert inside without ca via cms" { grep Veri [openssl "cms -verify -text -in sign_op_$alg_fn.msg -out verified.txt -noverify"] } 0 "CMS Verification successful " test -createsfiles verified.txt -skip {![file exists sign_op_$alg_fn.msg]} "Verifying a $alg opaque message with ca via cms" { grep Veri [openssl "cms -verify -text -in sign_op_$alg_fn.msg -out verified.txt -CAfile $::test::ca/cacert.pem"] } 0 "CMS Verification successful " test -skip {![file exists broken_op_$alg_fn.msg]} "Verifying broken $alg opaque message" { grep Verification [openssl "cms -verify -text -in broken_op_$alg_fn.msg -out verified.txt -CAfile $::test::ca/cacert.pem"] } 1 "Verification failure" test -skip {![file exists sign_det_$alg_fn.pem]} "Verifying detached $alg signature via cms" { grep Veri [openssl "cms -verify -binary -content sign.dat -inform PEM -in sign_det_$alg_fn.pem -out verified.txt -noverify"] } 0 "CMS Verification successful " test -skip {![file exists sign_det_$alg_fn.msg]} -createsfiles {bad.dat} "Verifying corrupted $alg detached signature" { makeFile bad.dat [regsub Test [getFile sign.dat] Best] grep Verification [openssl "cms -verify -content bad.dat -in sign_det_$alg_fn.msg -out verified.txt -CAfile $::test::ca/cacert.pem"] } 1 "Verification failure" } end_tests libengine-gost-openssl-3.0.2/tcl_tests/smimeenc.try000066400000000000000000000150361446070765000224650ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа smime -encrypt" proc make_fn {alg} { return [string map {":" "_"} $alg] } proc map {str list} { set result {} foreach a $list { lappend result [subst $str] } return $result } if {![file exist encrypt.dat]} { makeFile encrypt.dat [string repeat "Test data to encrypt.\n" 100] } if {![info exist env(NO_RSA)]} { test "Creating RSA CA" { makeCA ${testname}CA-RSA rsa:512 } 0 1 foreach user {U_enc_rsa_1 U_enc_rsa_2} { test "Make registered user $user" { makeRegisteredUser $user rsa:512 CAname ${testname}CA-RSA } 0 1 } test "RSA User 1 encrypts message for RSA user 2" { openssl "smime -encrypt -in encrypt.dat -aes-128-cbc -out enc_rsa.msg U_enc_rsa_2/cert.pem" file isfile enc_rsa.msg } 0 1 test "RSA User 1 cannot decrypt message for RSA user 2" { grep "Error" [openssl "smime -decrypt -in enc_rsa.msg -recip U_enc_rsa_1/cert.pem -inkey U_enc_rsa_1/seckey.pem"] } 1 {Error decrypting PKCS#7 structure} test -createsfiles decrypt.rsa "RSA User 2 (with cert) can decrypt message for RSA user 2" { set expected [getFile encrypt.dat] openssl "smime -decrypt -in enc_rsa.msg -recip U_enc_rsa_2/cert.pem -inkey U_enc_rsa_2/seckey.pem -out decrypt.rsa" set result [getFile decrypt.rsa] string eq $expected $result } 0 1 test -createsfiles decrypt_nocert.rsa "RSA User 2 (without cert) can decrypt message for RSA user 2" { set expected [getFile encrypt.dat] openssl "smime -decrypt -in enc_rsa.msg -inkey U_enc_rsa_2/seckey.pem -out decrypt_nocert.rsa" set result [getFile decrypt_nocert.rsa] string eq $expected $result } 0 1 } test "Creating CA 2001" { makeCA ${testname}CA gost2001:A } 0 1 test "Creating CA 2012" { makeCA } 0 1 if {[info exist env(ENC_LIST)]} { set enc_list $env(ENC_LIST) } else { switch -exact [engine_name] { "ccore" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 gost2001:XA: gost2012_256:XA:1.2.643.2.2.31.1 gost2012_256:XB:1.2.643.7.1.2.5.1.1 gost2012_256:XA: gost2012_512:A:1.2.643.2.2.31.3 gost2012_512:B:1.2.643.7.1.2.5.1.1 gost2012_512:A:}} "open" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 gost2012_256:XA:1.2.643.2.2.31.1 gost2012_256:XB:1.2.643.7.1.2.5.1.1 gost2012_512:A:1.2.643.2.2.31.3 gost2012_512:B:1.2.643.7.1.2.5.1.1}} } } foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_enc_$alg_fn switch -glob $alg { gost2012* {set ::test::ca ${testname}CA-2012} * {set ::test::ca ${testname}CA} } test "Creating user $username with key $alg" { makeRegisteredUser $username $alg if {![file exists $username/req.pem]&&[file exists $username/cert.pem]} { file delete $username/cert.pem } file exists $username/cert.pem } 0 1 if {[string length $crypt_param]} { set env(CRYPT_PARAMS) $crypt_param } else { if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} } test -createsfiles enc_$alg_fn.msg "Encrypting for $username" { grep "rror" [openssl "smime -encrypt -in encrypt.dat -gost89 -out enc_$alg_fn.msg U_enc_$alg_fn/cert.pem"] } 0 "" if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} test -createsfiles enc_$alg_fn.pem "Extracting PKCS7 from encrypted structure for $username" { openssl "smime -pk7out -out enc_$alg_fn.pem -in enc_$alg_fn.msg" file isfile enc_$alg_fn.pem } 0 1 test -skip {![file exists enc_$alg_fn.pem]} "Checking oids in pkcs7 structure for $username" { extract_oids enc_$alg_fn.pem PEM } 0 [mkObjList [alg_long_name $alg] [pubkey_long_name $alg] [param_hash_long_name [param_hash $alg]] "GOST 28147-89" [encr_long_name $crypt_param]] test -createsfiles decrypt.$alg_fn "Decrypting file encrypted for $username" { set expected [getFile encrypt.dat] openssl "smime -decrypt -in enc_$alg_fn.msg -recip U_enc_$alg_fn/cert.pem -inkey U_enc_$alg_fn/seckey.pem -out decrypt.$alg_fn" set result [getFile decrypt.$alg_fn] string eq $expected $result } 0 1 if {[string length $crypt_param]} { set env(CRYPT_PARAMS) $crypt_param } else { if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} } test -createsfiles enc_t_$alg_fn.msg "Encrypting for $username - text format" { grep "rror" [openssl "smime -encrypt -text -in encrypt.dat -gost89 -out enc_t_$alg_fn.msg U_enc_$alg_fn/cert.pem"] } 0 "" if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} test -createsfiles decrypt_t.$alg_fn "Decrypting file text-encrypted for $username" { set expected [getFile encrypt.dat] openssl "smime -decrypt -text -in enc_t_$alg_fn.msg -recip U_enc_$alg_fn/cert.pem -inkey U_enc_$alg_fn/seckey.pem -out decrypt_t.$alg_fn" set result [getFile decrypt_t.$alg_fn] string eq $expected $result } 0 1 test -createsfiles decrypt_t_nocert.$alg_fn "Decrypting file text-encrypted for $username without cert" { set expected [getFile encrypt.dat] openssl "smime -decrypt -text -in enc_t_$alg_fn.msg -inkey U_enc_$alg_fn/seckey.pem -out decrypt_t_nocert.$alg_fn" set result [getFile decrypt_t_nocert.$alg_fn] string eq $expected $result } 0 1 } if {[info exists env(CRYPT_PARAMS)]} {unset env(CRYPT_PARAMS)} # FIXME ŅŅ‚ĐžŅ‚ Ņ‚Đĩҁ҂ и ĐŋĐ°Ņ€ĐŊĐžĐĩ Ņ€Đ°ŅŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊиĐĩ ĐŊадО ĐŋŅ€ĐžĐŗĐŊĐ°Ņ‚ŅŒ ҁ Ņ€Đ°ĐˇĐŊŅ‹Đŧи ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€Đ°Đŧи ŅˆĐ¸Ņ„Ņ€ĐžĐ˛Đ°ĐŊĐ¸Ņ test -createfiles enc_4all "Encrypt for all" { grep "rror" [openssl "smime -encrypt -in encrypt.dat -gost89 -out enc_4all.msg [map {U_enc_[make_fn $a]/cert.pem} $enc_list]"] } 0 "" foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_enc_$alg_fn test -skip {![file exists enc_4all.msg]} -createsfiles decrypt_4all.$alg_fn "Decrypting gost-encrypted file, recipient $alg_fn" { set expected [getFile encrypt.dat] openssl "smime -decrypt -in enc_4all.msg -recip $username/cert.pem -inkey $username/seckey.pem -out decrypt_4all.$alg_fn" set result [getFile decrypt_4all.$alg_fn] string eq $expected $result } 0 1 test -skip {![file exists enc_4all.msg]} -createsfiles decrypt_4all_nocert.$alg_fn "Decrypting gost-encrypted file without cert, recipient $alg_fn" { set expected [getFile encrypt.dat] openssl "smime -decrypt -in enc_4all.msg -inkey $username/seckey.pem -out decrypt_4all_nocert.$alg_fn" set result [getFile decrypt_4all_nocert.$alg_fn] string eq $expected $result } 0 1 } restore_env2 {OPENSSL_CONF CRYPT_PARAMS} end_tests libengine-gost-openssl-3.0.2/tcl_tests/smimeenc_io.try000066400000000000000000000076301446070765000231550ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set testname [file rootname [file tail $::argv0]] start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ŅĐžĐ˛ĐŧĐĩŅŅ‚Đ¸ĐŧĐžŅŅ‚ŅŒ smime и cms -encrypt" proc make_fn {alg} { return [string map {":" "_"} $alg] } proc map {str list} { set result {} foreach a $list { lappend result [subst $str] } return $result } if {![info exist env(NO_RSA)]} { test -createsfiles io_decrypt.rsa "RSA User 2 (with cert) can decrypt message for RSA user 2" { set expected [getFile encrypt.dat] openssl "cms -decrypt -in enc_rsa.msg -recip U_enc_rsa_2/cert.pem -inkey U_enc_rsa_2/seckey.pem -out io_decrypt.rsa" set result [getFile io_decrypt.rsa] string eq $expected $result } 0 1 test -createsfiles io_decrypt_nocert.rsa "RSA User 2 (without cert) can decrypt message for RSA user 2" { set expected [getFile encrypt.dat] openssl "cms -decrypt -in enc_rsa.msg -inkey U_enc_rsa_2/seckey.pem -out io_decrypt_nocert.rsa" set result [getFile io_decrypt_nocert.rsa] string eq $expected $result } 0 1 } if {[info exist env(ENC_LIST)]} { set enc_list $env(ENC_LIST) } else { switch -exact [engine_name] { "ccore" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 gost2001:XA: gost2012_256:XA:1.2.643.2.2.31.1 gost2012_256:XB:1.2.643.7.1.2.5.1.1 gost2012_256:XA: gost2012_512:A:1.2.643.2.2.31.3 gost2012_512:B:1.2.643.7.1.2.5.1.1 gost2012_512:A:}} "open" {set enc_list {gost2001:XA:1.2.643.2.2.31.3 gost2001:XB:1.2.643.2.2.31.4 gost2012_256:XA:1.2.643.2.2.31.1 gost2012_256:XB:1.2.643.7.1.2.5.1.1 gost2012_512:A:1.2.643.2.2.31.3 gost2012_512:B:1.2.643.7.1.2.5.1.1}} } } foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_enc_$alg_fn switch -glob $alg { gost2012* {set ::test::ca ${testname}CA-2012} * {set ::test::ca ${testname}CA} } test -createsfiles io_decrypt.$alg_fn "Decrypting file encrypted for $username" { set expected [getFile encrypt.dat] openssl "cms -decrypt -in enc_$alg_fn.msg -recip U_enc_$alg_fn/cert.pem -inkey U_enc_$alg_fn/seckey.pem -out io_decrypt.$alg_fn" set result [getFile io_decrypt.$alg_fn] string eq $expected $result } 0 1 test -createsfiles io_decrypt_t.$alg_fn "Decrypting file text-encrypted for $username" { set expected [getFile encrypt.dat] openssl "cms -decrypt -text -in enc_t_$alg_fn.msg -recip U_enc_$alg_fn/cert.pem -inkey U_enc_$alg_fn/seckey.pem -out io_decrypt_t.$alg_fn" set result [getFile io_decrypt_t.$alg_fn] string eq $expected $result } 0 1 test -createsfiles io_decrypt_t_nocert.$alg_fn "Decrypting file text-encrypted for $username without cert" { set expected [getFile encrypt.dat] openssl "cms -decrypt -text -in enc_t_$alg_fn.msg -inkey U_enc_$alg_fn/seckey.pem -out io_decrypt_t_nocert.$alg_fn" set result [getFile io_decrypt_t_nocert.$alg_fn] string eq $expected $result } 0 1 } foreach enc_tuple $enc_list { if {![regexp {^([^:]*:[^:]*):(.*)$} $enc_tuple -> alg crypt_param]} { set alg $enc_tuple set crypt_param {} } set alg_fn [make_fn $enc_tuple] set username U_enc_$alg_fn test -skip {![file exists enc_4all.msg]} -createsfiles io_decrypt_4all.$alg_fn "Decrypting gost-encrypted file, recipient $alg_fn" { set expected [getFile encrypt.dat] openssl "cms -decrypt -in enc_4all.msg -recip $username/cert.pem -inkey $username/seckey.pem -out io_decrypt_4all.$alg_fn" set result [getFile io_decrypt_4all.$alg_fn] string eq $expected $result } 0 1 test -skip {![file exists enc_4all.msg]} -createsfiles io_decrypt_4all_nocert.$alg_fn "Decrypting gost-encrypted file without cert, recipient $alg_fn" { set expected [getFile encrypt.dat] openssl "cms -decrypt -in enc_4all.msg -inkey $username/seckey.pem -out io_decrypt_4all_nocert.$alg_fn" set result [getFile io_decrypt_4all_nocert.$alg_fn] string eq $expected $result } 0 1 } end_tests libengine-gost-openssl-3.0.2/tcl_tests/ssl.try000066400000000000000000000255721446070765000214740ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest if {$argc==2} { switch -exact -- [lindex $argv 0] { -serverconf { set test::server_conf [lindex $argv 1] set test::suffix "-clt" } -clientconf { set test::client_conf [lindex $argv 1] set test::suffix "-srv" } default { puts stderr "invalid command line" exit 1; } } } elseif $argc { puts stderr "invalid command line" exit 1 } array set protos { TLSv1 -tls1 TLSv1.1 -tls1_1 TLSv1.2 -tls1_2 } cd $::test::dir start_tests "ĐĸĐĩҁ҂ҋ ĐŊа SSL-ŅĐžĐĩдиĐŊĐĩĐŊиĐĩ ĐŧĐĩĐļĐ´Ņƒ s_client и s_server" if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {rsa:1024 gost2001:XA gost2012_256:XA gost2012_512:A}} "open" {set alg_list {rsa:1024 gost2001:XA gost2012_256:XA gost2012_512:A}} } } array set suites { rsa:1024 {ECDHE-RSA-AES256-SHA@SECLEVEL=0} gost2001:XA {GOST2001-GOST89-GOST89@SECLEVEL=0 GOST2001-NULL-GOST94@SECLEVEL=0 LEGACY-GOST2012-GOST8912-GOST8912@SECLEVEL=0 IANA-GOST2012-GOST8912-GOST8912@SECLEVEL=0 GOST2012-NULL-GOST12@SECLEVEL=0} gost2012_256:XA {LEGACY-GOST2012-GOST8912-GOST8912@SECLEVEL=0 GOST2012-NULL-GOST12@SECLEVEL=0} gost2012_512:A {LEGACY-GOST2012-GOST8912-GOST8912@SECLEVEL=0 GOST2012-NULL-GOST12@SECLEVEL=0} } # # Incompatible cipher suites # array set badsuites { gost2012_256:XA {GOST2001-GOST89-GOST89@SECLEVEL=0 GOST2001-NULL-GOST94@SECLEVEL=0} gost2012_512:A {GOST2001-GOST89-GOST89@SECLEVEL=0 GOST2001-NULL-GOST94@SECLEVEL=0} } # # Default cipher suite negotiated for algorithm # array set defsuite { rsa:1024 ECDHE-RSA-AES256-SHA@SECLEVEL=0 #gost94:XA GOST94-GOST89-GOST89 gost2001:XA GOST2012-GOST8912-GOST8912@SECLEVEL=0 gost2012_256:XA LEGACY-GOST2012-GOST8912-GOST8912@SECLEVEL=0 gost2012_512:A LEGACY-GOST2012-GOST8912-GOST8912@SECLEVEL=0 } array set defsuite_12 { rsa:1024 ECDHE-RSA-AES256-GCM-SHA384@SECLEVEL=0 #gost94:XA GOST94-GOST89-GOST89 gost2001:XA LEGACY-GOST2012-GOST8912-GOST8912@SECLEVEL=0 gost2012_256:XA GOST2012-MAGMA-MAGMAOMAC@SECLEVEL=0 gost2012_512:A GOST2012-MAGMA-MAGMAOMAC@SECLEVEL=0 } set proto_list {"TLSv1" "TLSv1.1" "TLSv1.2"} if {![file exists sslCA/cacert.pem]} { makeCA sslCA rsa } else { set ::test::ca sslCA } test -skip {[file exist localhost_rsa/cert.pem]} \ "ХОСдаĐĩĐŧ ҁĐĩŅ€Đ˛ĐĩŅ€ĐŊŅ‹Đš ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ rsa" { makeRegisteredUser localhost_rsa rsa:1024 CN localhost } 0 1 foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] test -skip {[file exist localhost_$alg_fn/cert.pem]} \ "ХОСдаĐĩĐŧ ҁĐĩŅ€Đ˛ĐĩŅ€ĐŊŅ‹Đš ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ $alg" { makeRegisteredUser localhost_$alg_fn $alg CN localhost OU $alg_fn } 0 1 test -skip {[file exists ssl_user_$alg_fn/cert.pem]} \ "ХОСдаĐĩĐŧ ĐēĐģиĐĩĐŊ҂ҁĐēиК ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ $alg" { makeRegisteredUser ssl_user_$alg_fn $alg CN ssl_user OU $alg_fn } 0 1 } foreach alg {gost2001:B gost2012_256:B gost2012_512:B} { set alg_fn [string map {":" "_"} $alg] test -skip {[file exists ssl_user_$alg_fn/cert.pem]} \ "ХОСдаĐĩĐŧ ĐēĐģиĐĩĐŊ҂ҁĐēиК ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ $alg" { makeRegisteredUser ssl_user_$alg_fn $alg CN ssl_user OU $alg_fn } 0 1 } foreach proto $proto_list { foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] if {[string match *2012* $alg]} { foreach suite $badsuites($alg) { test "Incompatible suite $alg $suite $proto" { set list [client_server [list -connect localhost:4433 \ -CAfile $::test::ca/cacert.pem \ -verify_return_error -verify 1 -state -cipher $suite] \ [list -www -cert localhost_$alg_fn/cert.pem \ -key localhost_$alg_fn/seckey.pem -cipher $suite \ $protos($proto)] {}] list [lindex $list 2] [grep "^New," [lindex $list 0]] } 0 [list 1 "New, (NONE), Cipher is (NONE)\n"] } } foreach suite $suites($alg) { set raw_name [lindex [split $suite @] 0] if {![string equal $proto "TLSv1.2"] && [string match *OMAC* $suite]} { continue } if {[string equal $proto "TLSv1.2"] && [string match *OMAC* $suite]} { set expected_proto "TLSv1.2" } else { set expected_proto "TLSv1.0" } test "ЗаĐŋ҃ҁĐē ҁĐĩŅ€Đ˛ĐĩŅ€Đ° $suite $proto" { set f [open_server [list -cert localhost_$alg_fn/cert.pem \ -key localhost_$alg_fn/seckey.pem -cipher $suite \ $protos($proto)]] stop_server $f foreach {out err status} [stop $f] break log "SERVER OUTPUT:\n$out\n----" log "SERVER STDERR:\n$err\n----" log "SERVER EXIT CODE: $status" grep "ACCEPT" $out } 0 "ACCEPT\n" log $errorInfo flush [test_log] test "ĐšĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊŅ‹Đš Ņ…ŅĐŊĐ´ŅˆĐĩĐšĐē $suite $proto" { set list [client_server [list -connect localhost:4433 \ -CAfile $::test::ca/cacert.pem -verify_return_error \ -verify 1 -state -cipher $suite ] \ [list -www -cert localhost_$alg_fn/cert.pem \ -key localhost_$alg_fn/seckey.pem \ -cipher $suite $protos($proto)] {}] if {[regexp -lineanchor \ {^\s*Protocol\s*:\s*(\S*)\s*$.*^\s*Cipher\s*:\s*(\S*)\s*$} \ [lindex $list 0] -> result_proto result_cipher]} { list [lindex $list 2] $result_proto $result_cipher } else { lindex $list 1 } } 0 [list 0 $proto $raw_name] test "НĐĩŅĐžĐ˛ĐŋĐ°Đ´Đ°ŅŽŅ‰Đ¸Đš ŅˆĐ¸Ņ„ĐĩŅ€ŅŅŒŅŽŅ‚ DHE-RSA-AES256-SHA $proto" { set list [client_server [list -connect localhost:4433 \ -CAfile $::test::ca/cacert.pem -verify_return_error \ -verify 1 -state -cipher $suite] \ [list -www -cert localhost_$alg_fn/cert.pem \ -key localhost_$alg_fn/seckey.pem \ -cipher DHE-RSA-AES256-SHA@SECLEVEL=0 $protos($proto)] {}] list [lindex $list 2] [grep ":fatal:" [lindex $list 1]] } 0 [list 1 "SSL3 alert read:fatal:handshake failure "] test "ПоĐģŅƒŅ‡ĐĩĐŊиĐĩ ŅŅ‚Ņ€Đ°ĐŊĐ¸Ņ‡Đēи $suite $proto" { set list [client_server [list -connect localhost:4433 \ -CAfile $::test::ca/cacert.pem -verify_return_error \ -verify 1 -state -cipher $suite -ign_eof] \ [list -www -cert localhost_$alg_fn/cert.pem \ -key localhost_$alg_fn/seckey.pem -cipher $suite \ $protos($proto)] "GET /\n\n"] grep "^New," [lindex $list 0] } 0 "New, $expected_proto, Cipher is $raw_name\nNew, $expected_proto, Cipher is $raw_name\n" if {![string match "*-NULL-*" $suite]} { test "ĐĄĐĩŅ€Đ˛ĐĩŅ€ ĐŋОддĐĩŅ€ĐļĐ¸Đ˛Đ°ŅŽŅ‰Đ¸Đš ĐŧĐŊĐžĐŗĐž ŅˆĐ¸Ņ„ĐĩŅ€ŅŅŒŅŽŅ‚ĐžĐ˛ $proto" { set list [client_server [list -connect localhost:4433 \ -CAfile $::test::ca/cacert.pem -verify_return_error \ -verify 1 -state -cipher $suite] \ [list -www -cert localhost_$alg_fn/cert.pem \ -key localhost_$alg_fn/seckey.pem $protos($proto) -cipher ALL@SECLEVEL=0] {}] if {[regexp -lineanchor \ {^\s*Protocol\s*:\s*(\S*)\s*$.*^\s*Cipher\s*:\s*(\S*)\s*$} \ [lindex $list 0] -> result_proto result_cipher]} { list [lindex $list 2] $result_proto $result_cipher } else { lindex $list 1 } } 0 [list 0 $proto $raw_name] test "ĐĄĐĩŅ€Đ˛ĐĩŅ€ c ĐŊĐĩҁĐēĐžĐģҌĐēиĐŧи аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧаĐŧи, ĐēĐģиĐĩĐŊŅ‚ $suite $proto" { set list [client_server [list -connect localhost:4433 \ -CAfile $::test::ca/cacert.pem -verify_return_error \ -verify 1 -state -cipher $suite] \ [list -www -cert localhost_rsa/cert.pem \ -key localhost_rsa/seckey.pem \ -dcert localhost_$alg_fn/cert.pem \ -dkey localhost_$alg_fn/seckey.pem $protos($proto) -cipher ALL@SECLEVEL=0] {}] if {[regexp -lineanchor \ {^\s*Protocol\s*:\s*(\S*)\s*$.*^\s*Cipher\s*:\s*(\S*)\s*$} \ [lindex $list 0] -> result_proto result_cipher]} { list [lindex $list 2] $result_proto $result_cipher } else { lindex $list 1 } } 0 [list 0 $proto $raw_name] } test "ĐĄĐĩŅ€Đ˛ĐĩŅ€ c ĐŊĐĩҁĐēĐžĐģҌĐēиĐŧи аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧаĐŧи, ĐēĐģиĐĩĐŊŅ‚ AES256-SHA $proto" { set list [client_server [list -connect localhost:4433 \ -CAfile $::test::ca/cacert.pem -verify_return_error \ -verify 1 -state -cipher AES256-SHA@SECLEVEL=0] \ [list -www -cert localhost_rsa/cert.pem \ -key localhost_rsa/seckey.pem \ -dcert localhost_$alg_fn/cert.pem \ -dkey localhost_$alg_fn/seckey.pem $protos($proto) -cipher ALL@SECLEVEL=0] {}] if {[regexp -lineanchor \ {^\s*Protocol\s*:\s*(\S*)\s*$.*^\s*Cipher\s*:\s*(\S*)\s*$} \ [lindex $list 0] -> result_proto result_cipher]} { list [lindex $list 2] $result_proto $result_cipher } else { lindex $list 1 } } 0 [list 0 $proto AES256-SHA] if {[string match *gost* $alg]} { set alg_cli_list [list $alg gost2001:B gost2012_256:B gost2012_512:B] } else { set alg_cli_list $alg } foreach alg_cli $alg_cli_list { set alg_cli_fn [string map {":" "_"} $alg_cli] test "ĐĄĐĩŅ€Đ˛ĐĩŅ€ $alg, ĐēĐģиĐĩĐŊŅ‚ ҁ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ĐžĐŧ $alg_cli $proto" { set list [client_server [list -connect localhost:4433\ -CAfile $::test::ca/cacert.pem -verify_return_error \ -verify 1 -state -cert ssl_user_$alg_cli_fn/cert.pem \ -key ssl_user_$alg_cli_fn/seckey.pem -cipher $suite \ -ign_eof]\ [list -cert localhost_$alg_fn/cert.pem \ -key localhost_$alg_fn/seckey.pem -verify_return_error\ -Verify 3 -www -CAfile $::test::ca/cacert.pem \ -cipher $suite $protos($proto)] "GET /\n"] list [lindex $list 2] [grep "^New," [lindex $list 0]] } 0 [list 0 [string repeat "New, $expected_proto, Cipher is $raw_name\n" 2]] } } if {[string equal $proto "TLSv1.2"]} { set etalon $defsuite_12($alg) } else { set etalon $defsuite($alg) } if {[string equal $proto "TLSv1.2"] && ![string match *2001* $alg]} { set expected_proto "TLSv1.2" } else { set expected_proto "TLSv1.0" } if {0} { test "ĐŖĐŧĐžĐģŅ‡Đ°Ņ‚ĐĩĐģҌĐŊŅ‹Đš Ņ…ĐĩĐŊĐ´ŅˆĐĩĐšĐē ҁ ĐēĐģŅŽŅ‡Đ°Đŧи $alg $proto" { set list [client_server [list -connect localhost:4433\ -CAfile $::test::ca/cacert.pem -verify_return_error -verify 1\ -state -ign_eof]\ [list -www -cert localhost_$alg_fn/cert.pem\ -key localhost_$alg_fn/seckey.pem $protos($proto)] "GET /\n"] if {[regexp -lineanchor \ {^\s*Protocol\s*:\s*(\S*)\s*$.*^\s*Cipher\s*:\s*(\S*)\s*$} \ [lindex $list 0] -> result_proto result_cipher]} { list [lindex $list 2] $result_proto $result_cipher } else { lindex $list 1 } } 0 [list 0 $proto $etalon] test "ĐŖĐŧĐžĐģŅ‡Đ°Ņ‚ĐĩĐģҌĐŊŅ‹Đš Ņ…ĐĩĐŊĐ´ŅˆĐĩĐšĐē ҁ ĐēĐģиĐĩĐŊ҂ҁĐēОК Đ°ŅƒŅ‚ĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ†Đ¸ĐĩĐš $alg $proto" { set list [client_server [list -connect localhost:4433\ -CAfile $::test::ca/cacert.pem -verify_return_error \ -verify 1 -state -cert ssl_user_$alg_fn/cert.pem \ -key ssl_user_$alg_fn/seckey.pem -ign_eof]\ [list -cert localhost_$alg_fn/cert.pem \ -key localhost_$alg_fn/seckey.pem -verify_return_error\ -Verify 3 -www -CAfile $::test::ca/cacert.pem $protos($proto)] \ "GET /\n"] list [lindex $list 2] [grep "^New," [lindex $list 0]] } 0 [list 0 [string repeat "New, $expected_proto, Cipher is $etalon\n" 2]] }; # if {0} } } end_tests libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/000077500000000000000000000000001446070765000215405ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/encrypted_keyagree_a211.pem000066400000000000000000000013421446070765000266400ustar00rootroot00000000000000-----BEGIN CMS----- MIIB/gYJKoZIhvcNAQcDoIIB7zCCAesCAQIxggFioYIBXgIBA6CBo6GBoDAXBggq hQMHAQEBAjALBgkqhQMHAQIBAgEDgYQABIGAe+itJVNbHM35RHfzuwFJPYdPXqtW 8hNEF7Z/XFEE2T71SRkhFX7ozYKQNh/TkVY9D4vG0LnD9Znr/pJyOjpsNb+dPcKX Kbk/0JQxoPGHxFzASVAFq0ov/yBe2XGFWMeKUqtaAr7SvoYS0oEhT5EuT8BXmecd nRe7NqOzESpb15ahIgQgsqHxOcdOp03l11S7k3OH1k1HNa5F8m9ctrOzH2846FMw FwYJKoUDBwEBBwIBMAoGCCqFAwcBAQYCMHYwdDBAMDgxDTALBgNVBAoTBFRLMjYx JzAlBgNVBAMTHkNBIFRLMjY6IEdPU1QgMzQuMTAtMTIgMjU2LWJpdAIEAYy6hQQw SxLc18zMwzLwXbcKqYhV/VzsdBgVArOHsSBIbaThJWE7zI37VGPMQJM5VXJ7GVcL MF0GCSqGSIb3DQEHATAfBgkqhQMHAQEFAgIwEgQQ6EeVlADDCz2cdEWKy+tM94Av yIFl/Ie4VeFFuczTsMsIaOUEe3Jn9GeVp8hZSj3O2q4hslQ/u/+Gj4QkSHm/M0ih ITAfBgkqhQMHAQAGAQExEgQQs1t6D3J3WCEvxunnEE15NQ== -----END CMS----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/encrypted_keyagree_a221.pem000066400000000000000000000010321446070765000266350ustar00rootroot00000000000000-----BEGIN CMS----- MIIBawYJKoZIhvcNAQcDoIIBXDCCAVgCAQIxgfehgfQCAQOgQjBAMDgxDTALBgNV BAoTBFRLMjYxJzAlBgNVBAMTHkNBIFRLMjY6IEdPU1QgMzQuMTAtMTIgMjU2LWJp dAIEAYy6gqEiBCBvcfyuSF57y8vVyaw8Z0ch3wjC4lPKTrpVRXty4Rhk5DAXBgkq hQMHAQEHAQEwCgYIKoUDBwEBBgEwbjBsMEAwODENMAsGA1UEChMEVEsyNjEnMCUG A1UEAxMeQ0EgVEsyNjogR09TVCAzNC4xMC0xMiAyNTYtYml0AgQBjLqDBChPbi6B krXuLPexPAL2oUGCFWDGQHqINL5ExuMBG7/5XQRqriKARVa0MFkGCSqGSIb3DQEH ATAbBgkqhQMHAQEFAQEwDgQMdNdCKnYAAAAwqTEDgC9O2bYyTGQJ8WUQGq0zHwzX L0jFhWHTF1tcAxYmd9pX5i89UwIxhtYqyjX1QHju2g== -----END CMS----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/encrypted_keytrans_a231.pem000066400000000000000000000011231446070765000267030ustar00rootroot00000000000000-----BEGIN CMS----- MIIBlQYJKoZIhvcNAQcDoIIBhjCCAYICAQAxggEcMIIBGAIBADBAMDgxDTALBgNV BAoTBFRLMjYxJzAlBgNVBAMTHkNBIFRLMjY6IEdPU1QgMzQuMTAtMTIgMjU2LWJp dAIEAYy6gzAXBgkqhQMHAQEHAgEwCgYIKoUDBwEBBgEEgbcwgbQEMFiMredFR3Mv 3g2wqyVXRnrhYEBMNFaqqgBpHwPQh3bF98tt9HZPxRDCww0OPfxeuTBeMBcGCCqF AwcBAQEBMAsGCSqFAwcBAgEBAQNDAARAdFJ9ww+3ptvQiaQpizCldNYhl4DB1rl8 Fx/2FIgnwssCbYRQ+UuRsTk9dfLLTGJG3JIEXKFxXWBgOrK965A5pAQg9f2/EHxG DfetwCe1a6uUDCWD+wp5dYOpfkry8YRDEJgwXQYJKoZIhvcNAQcBMB8GCSqFAwcB AQUCATASBBDUHNxmVclO/v3OaY9P7jxOgC+sD9CHGlEMRUpfGn6yfFDMExmYeby8 LzdPJe1MkYV0qQgdC1zI3nQ7/4taf+4zRA== -----END CMS----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/encrypted_keytrans_a241.pem000066400000000000000000000013151446070765000267070ustar00rootroot00000000000000-----BEGIN CMS----- MIIB7wYJKoZIhvcNAQcDoIIB4DCCAdwCAQAxggFfMIIBWwIBADBAMDgxDTALBgNV BAoTBFRLMjYxJzAlBgNVBAMTHkNBIFRLMjY6IEdPU1QgMzQuMTAtMTIgMjU2LWJp dAIEAYy6hTAXBgkqhQMHAQEHAgEwCgYIKoUDBwEBBgIEgfowgfcEMPvAcitO3fYI 4spTrluMWJkMP0hYJKeHPXCd12Qusu5ajFvfG8qCLGFKFIJTeFoiUjCBoDAXBggq hQMHAQEBAjALBgkqhQMHAQIBAgEDgYQABIGAqPNz+Pd8mddju80lzoXb6ZFVfz8G 2ftc+4/az2BXxN9p7O8MgtIvklnXi1ugYYDxgJfGLTB2khPeIQkBOcozznG/eaN2 TnwUX3uy/EEsu3Oh1L0sPHBchMU86pa/Jc6CCXj9t/wuOuvWJexfdP/uZiygfqwS ZdgdJg8RWVLPGg4EIHiz9dVnb+GJiuxJzLDdQIi56+gNy3XkRNwMfRcpwZ+UMFkG CSqGSIb3DQEHATAbBgkqhQMHAQEFAQIwDgQMgzPtk7gv3Pk+NYEugC+PxP/HyOQt b8Ry/fcFIQzcjNHzH8JkfM9wEFBfpl/R1SyO5Qg55VcfAc4ETj0246EZMBcGCSqF AwcBAAYBATEKBAhVf+jhWVm0Jw== -----END CMS----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/encrypted_kuznyechik_a421.pem000066400000000000000000000003051446070765000272310ustar00rootroot00000000000000-----BEGIN CMS----- MHEGCSqGSIb3DQEHBqBkMGICAQAwXQYJKoZIhvcNAQcBMB8GCSqFAwcBAQUCATAS BBBSwX+zyOEPPuGyfpsRG4AigC/P8ftTdQMStfIThVkE/vpJlwaHgGv83m2bsPay eyuqpoTeEMOaqGcO0MxHWsC9hQ== -----END CMS----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/encrypted_magma_a411.pem000066400000000000000000000003451446070765000261320ustar00rootroot00000000000000-----BEGIN CMS----- MIGIBgkqhkiG9w0BBwagezB5AgEAMFkGCSqGSIb3DQEHATAbBgkqhQMHAQEFAQIw DgQMuncOu3uYPbI30vFCgC9Nsws4R09yLp6jUtadncWUPZGmCGpPKnXGgNHvEmUA rgKJvu4FPHtLkHuLeQXZg6EZMBcGCSqFAwcBAAYBATEKBAjCbQoH632oGA== -----END CMS----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/encryption_key.hex000066400000000000000000000001011446070765000253000ustar00rootroot000000000000008F5EEF8814D228FB2BBC5612323730CFA33DB7263CC2C0A01A6C6953F33D61D5 libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/hashed_a311.pem000066400000000000000000000003251446070765000242240ustar00rootroot00000000000000-----BEGIN CMS----- MH0GCSqGSIb3DQEHBaBwMG4CAQAwCgYIKoUDBwEBAgIwOwYJKoZIhvcNAQcBoC4E LMru7fLw7uv87fvpIO/w6Ozl8CDk6/8g8fLw8+ry8/D7IERpZ2VzdERhdGEuBCD/ esPQYsGkzxZV8uUMIAWt6SI8KtxBP8NyG8AGbJ8i/Q== -----END CMS----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/hashed_a321.pem000066400000000000000000000004021446070765000242210ustar00rootroot00000000000000-----BEGIN CMS----- MIGfBgkqhkiG9w0BBwWggZEwgY4CAQAwCgYIKoUDBwEBAgMwOwYJKoZIhvcNAQcB oC4ELMru7fLw7uv87fvpIO/w6Ozl8CDk6/8g8fLw8+ry8/D7IERpZ2VzdERhdGEu BEDe4VUvcKSRvU7RFVhFjajXY+nJSUkUsoi3oOeJBnru4PErt8RusPrCJs614ciH CM+ehrC4a+M1Nbq77F/Wsa/v -----END CMS----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/plain/000077500000000000000000000000001446070765000226435ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/plain/text_decrypted.plain000066400000000000000000000000601446070765000267130ustar00rootroot00000000000000Ęîíōđîëüíûé īđčėåđ äë˙ ņōđķęōķđû EnvelopedData. libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/recipient256_cert.pem000066400000000000000000000013411446070765000254760ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIB8jCCAZ+gAwIBAgIEAYy6gzAKBggqhQMHAQEDAjA4MQ0wCwYDVQQKEwRUSzI2 MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQwHhcNMDEw MTAxMDAwMDAwWhcNNDkxMjMxMDAwMDAwWjA6MQ0wCwYDVQQKEwRUSzI2MSkwJwYD VQQDEyBSRUNJUElFTlQ6IEdPU1QgMzQuMTAtMTIgMjU2LWJpdDBoMCEGCCqFAwcB AQEBMBUGCSqFAwcBAgEBAQYIKoUDBwEBAgIDQwAEQL8nghlzLGMKWHuWhNMPMN5u L6SkGqRiJ6qZxZb+4dPKbBT9LNVvNKtwUed+BeE5kfqOfolPgFusnL1rnO9yREOj gYUwgYIwYQYDVR0BBFowWIAUgNkM95n4Zk2TU4mOwJ5xLaenMRKhOjA4MQ0wCwYD VQQKEwRUSzI2MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1i aXSCBAGMuoEwHQYDVR0OBBYEFLue+PUb9Oe+pziBU+MvNejjgrzFMAoGCCqFAwcB AQMCA0EAPP9Oad1/5jwokSjPpccsQ0xCdVYM+mGQ0IbpiZxQj8gnkt8sq4jR6Ya+ I/BDkbZNDNE27TU1p3t5rE9NMEeViA== -----END CERTIFICATE----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/recipient256_key.pem000066400000000000000000000002341446070765000253310ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MEgCAQAwIQYIKoUDBwEBAQEwFQYJKoUDBwECAQEBBggqhQMHAQECAgQgzre/jOVK ur0vHHsZfkIQhvXkUYzK8cOrSxG88h/cyA0= -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/recipient512_cert.pem000066400000000000000000000014721446070765000254760ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIICNTCCAeKgAwIBAgIEAYy6hTAKBggqhQMHAQEDAjA4MQ0wCwYDVQQKEwRUSzI2 MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQwHhcNMDEw MTAxMDAwMDAwWhcNNDkxMjMxMDAwMDAwWjA6MQ0wCwYDVQQKEwRUSzI2MSkwJwYD VQQDEyBSRUNJUElFTlQ6IEdPU1QgMzQuMTAtMTIgNTEyLWJpdDCBqjAhBggqhQMH AQEBAjAVBgkqhQMHAQIBAgEGCCqFAwcBAQIDA4GEAASBgKauwGYvUkzz19g0LP/p zeRdmwy1m+QSy9W5ZrL/AGuJofm2ARjz40ozNbW6bp9hkHu8x66LX7u5zz+QeS2+ X5om18UXriComgO0+qhZbc+Hzu0eQ8FjOd8LpLk3TzzfBltfLOX5IiPLjeum+pSP 0QjoXAVcrop//B4yvZIukvROo4GFMIGCMGEGA1UdAQRaMFiAFIDZDPeZ+GZNk1OJ jsCecS2npzESoTowODENMAsGA1UEChMEVEsyNjEnMCUGA1UEAxMeQ0EgVEsyNjog R09TVCAzNC4xMC0xMiAyNTYtYml0ggQBjLqBMB0GA1UdDgQWBBSrXT5VKhm/5uff kwW0XpG19k6AajAKBggqhQMHAQEDAgNBAAJBpsHRrQKZGb22LOzaReEB8rl2MbIR ja64NaM5h+cAFoHm6t/k+ziLh2A11rTakR+5of4NQ3EjEhuPtomP2tc= -----END CERTIFICATE----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/recipient512_key.pem000066400000000000000000000003111446070765000253200ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MGgCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRA3HXF+fFK 6VIJkvHOEhfbcu8ZFQ/bzSS/jLOlrVbAV4fx0YjznHwK387PilH91kv4sWIaWblO W8B/fAofmBUDpQ== -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/root256_cert.pem000066400000000000000000000013351446070765000245020ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIB8DCCAZ2gAwIBAgIEAYy6gTAKBggqhQMHAQEDAjA4MQ0wCwYDVQQKEwRUSzI2 MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQwHhcNMDEw MTAxMDAwMDAwWhcNNDkxMjMxMDAwMDAwWjA4MQ0wCwYDVQQKEwRUSzI2MScwJQYD VQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQwaDAhBggqhQMHAQEB ATAVBgkqhQMHAQIBAQEGCCqFAwcBAQICA0MABEAaSoKcjw54UACci6svELNF0IYM RIW8urUsqamIpoG46XCqrVOuI6Q13N4dwcRsbZdqByf+GC2f5ZfO3baN5bTKo4GF MIGCMGEGA1UdAQRaMFiAFIDZDPeZ+GZNk1OJjsCecS2npzESoTowODENMAsGA1UE ChMEVEsyNjEnMCUGA1UEAxMeQ0EgVEsyNjogR09TVCAzNC4xMC0xMiAyNTYtYml0 ggQBjLqBMB0GA1UdDgQWBBSA2Qz3mfhmTZNTiY7AnnEtp6cxEjAKBggqhQMHAQED AgNBAAgv248F4OeNCkhlzJWec0evHYnMBlSzk1lDm0F875B7CqMrKh2MtJHXenbj Gc2uRn2IwgmSf/LZDrYsKKqZSxk= -----END CERTIFICATE----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/root256_key.pem000066400000000000000000000002341446070765000243320ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MEgCAQAwIQYIKoUDBwEBAQEwFQYJKoUDBwECAQEBBggqhQMHAQECAgQgzre/jOVK ur0vHHsZfkIQhvXkUYzK8cOrSxG88h/cyA0= -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/sender256_cert.pem000066400000000000000000000013411446070765000247740ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIIB8zCCAaCgAwIBAgIEAYy6gjAKBggqhQMHAQEDAjA4MQ0wCwYDVQQKEwRUSzI2 MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQwHhcNMDEw MTAxMDAwMDAwWhcNNDkxMjMxMDAwMDAwWjA7MQ0wCwYDVQQKEwRUSzI2MSowKAYD VQQDEyFPUklHSU5BVE9SOiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQwaDAhBggqhQMH AQEBATAVBgkqhQMHAQIBAQEGCCqFAwcBAQICA0MABECWKQ0TYllqg4GmY3tBJiyz pXUN+aOV9WbmTUinqrmEHP7KCNzoAzFg+04SSQpNNSHpQnm+jLAZhuJaJfqZ6VbT o4GFMIGCMGEGA1UdAQRaMFiAFIDZDPeZ+GZNk1OJjsCecS2npzESoTowODENMAsG A1UEChMEVEsyNjEnMCUGA1UEAxMeQ0EgVEsyNjogR09TVCAzNC4xMC0xMiAyNTYt Yml0ggQBjLqBMB0GA1UdDgQWBBTRnChHSWbQYwnJC62n2zu5Njd03zAKBggqhQMH AQEDAgNBAB41oijaXSEn58l78y2rhxY35/lKEq4XWZ70FtsNlVxWATyzgO5Wliwn t1O4GoZsxx8r6T/i7VG65UNmQlwdOKQ= -----END CERTIFICATE----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/sender256_key.pem000066400000000000000000000002341446070765000246270ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MEgCAQAwIQYIKoUDBwEBAQEwFQYJKoUDBwECAQEBBggqhQMHAQECAgQg6HfztrYQ Y/WOBUo0ORFCMsUWevdvbLfDx3iZRA6BIAs= -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/sender512_cert.pem000066400000000000000000000014721446070765000247740ustar00rootroot00000000000000-----BEGIN CERTIFICATE----- MIICNjCCAeOgAwIBAgIEAYy6hDAKBggqhQMHAQEDAjA4MQ0wCwYDVQQKEwRUSzI2 MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQwHhcNMDEw MTAxMDAwMDAwWhcNNDkxMjMxMDAwMDAwWjA7MQ0wCwYDVQQKEwRUSzI2MSowKAYD VQQDEyFPUklHSU5BVE9SOiBHT1NUIDM0LjEwLTEyIDUxMi1iaXQwgaowIQYIKoUD BwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwOBhAAEgYC0i7davCkOGGVcYqFP tS1fUIROzB0fYARIe0tclTRpare/qzRuVRapqzzO+K21LDpYVfDPs2Sqa13ZN+Ts /JUlv59qCFB2cYpFyB/0kh4+K79yvz7r8+4WE0EmZf8T3ae/J1Jo6xGunecH1/G4 hMts9HYLnxbwJDMNVGuIHV6gzqOBhTCBgjBhBgNVHQEEWjBYgBSA2Qz3mfhmTZNT iY7AnnEtp6cxEqE6MDgxDTALBgNVBAoTBFRLMjYxJzAlBgNVBAMTHkNBIFRLMjY6 IEdPU1QgMzQuMTAtMTIgMjU2LWJpdIIEAYy6gTAdBgNVHQ4EFgQUK+l9HAscONGx zCcRpxRAmFHvlXowCgYIKoUDBwEBAwIDQQAbjA0Q41/rIKOOvjHKsAsoEJM+WJf6 /PKXg2JaStthmw99bdtwwkU/qDbcje2tF6mt+XWyQBXwvfeES1GFY9fJ -----END CERTIFICATE----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/sender512_key.pem000066400000000000000000000003111446070765000246160ustar00rootroot00000000000000-----BEGIN PRIVATE KEY----- MGgCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRAEWkl+ebl sHWs86SNgRKqSxMOgGhbvR/uZ5/WWfdNG1axvUwVhpcXIxDZUmzQuNzqJBkseI7f 5/JjXyTFRF1a+Q== -----END PRIVATE KEY----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/signed_a111.pem000066400000000000000000000027411446070765000242430ustar00rootroot00000000000000-----BEGIN CMS----- MIIENwYJKoZIhvcNAQcCoIIEKDCCBCQCAQExDDAKBggqhQMHAQECAzA7BgkqhkiG 9w0BBwGgLgQsyu7t8vDu6/zt++kg7/Do7OXwIOTr/yDx8vDz6vLz8PsgU2lnbmVk RGF0YS6gggI6MIICNjCCAeOgAwIBAgIEAYy6hDAKBggqhQMHAQEDAjA4MQ0wCwYD VQQKEwRUSzI2MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1i aXQwHhcNMDEwMTAxMDAwMDAwWhcNNDkxMjMxMDAwMDAwWjA7MQ0wCwYDVQQKEwRU SzI2MSowKAYDVQQDEyFPUklHSU5BVE9SOiBHT1NUIDM0LjEwLTEyIDUxMi1iaXQw gaowIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwOBhAAEgYC0i7da vCkOGGVcYqFPtS1fUIROzB0fYARIe0tclTRpare/qzRuVRapqzzO+K21LDpYVfDP s2Sqa13ZN+Ts/JUlv59qCFB2cYpFyB/0kh4+K79yvz7r8+4WE0EmZf8T3ae/J1Jo 6xGunecH1/G4hMts9HYLnxbwJDMNVGuIHV6gzqOBhTCBgjBhBgNVHQEEWjBYgBSA 2Qz3mfhmTZNTiY7AnnEtp6cxEqE6MDgxDTALBgNVBAoTBFRLMjYxJzAlBgNVBAMT HkNBIFRLMjY6IEdPU1QgMzQuMTAtMTIgMjU2LWJpdIIEAYy6gTAdBgNVHQ4EFgQU K+l9HAscONGxzCcRpxRAmFHvlXowCgYIKoUDBwEBAwIDQQAbjA0Q41/rIKOOvjHK sAsoEJM+WJf6/PKXg2JaStthmw99bdtwwkU/qDbcje2tF6mt+XWyQBXwvfeES1GF Y9fJMYIBlDCCAZACAQEwQDA4MQ0wCwYDVQQKEwRUSzI2MScwJQYDVQQDEx5DQSBU SzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQCBAGMuoQwCgYIKoUDBwEBAgOgga0w GAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTkwMzIw MTk1NTIyWjAiBgkqhkiG9w0BCWIxFQQTU2lnbmVkIGF0dHIncyB2YWx1ZTBPBgkq hkiG9w0BCQQxQgRAUdPHEukF5BIfo9DoQIMdnB0ZLkzq0RueEUZSNv07A7C+GKWi G62fueArg8uPCHPTUN6d/42p33fgMkEwH7f7cDAKBggqhQMHAQEBAgSBgGUnVka8 FvTlClmOtj/FUUacBdE/nEBeMLOO/535VDYrXlftPE6zQf/4ghS7TQG2VRGQ3GWD +L3+W09A7d5uyyTEbvgtdllUG0OyqFwKmJEaYsMin87SFVs0cn1PGV1fOKeLluZa bLx5whxd+mzlpekL5i6ImRX+TpERxrA/xSe5 -----END CMS----- libengine-gost-openssl-3.0.2/tcl_tests/tc26_cms/signed_a121.pem000066400000000000000000000020771446070765000242460ustar00rootroot00000000000000-----BEGIN CMS----- MIIDAQYJKoZIhvcNAQcCoIIC8jCCAu4CAQExDDAKBggqhQMHAQECAjA7BgkqhkiG 9w0BBwGgLgQsyu7t8vDu6/zt++kg7/Do7OXwIOTr/yDx8vDz6vLz8PsgU2lnbmVk RGF0YS6gggH3MIIB8zCCAaCgAwIBAgIEAYy6gjAKBggqhQMHAQEDAjA4MQ0wCwYD VQQKEwRUSzI2MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1Ni1i aXQwHhcNMDEwMTAxMDAwMDAwWhcNNDkxMjMxMDAwMDAwWjA7MQ0wCwYDVQQKEwRU SzI2MSowKAYDVQQDEyFPUklHSU5BVE9SOiBHT1NUIDM0LjEwLTEyIDI1Ni1iaXQw aDAhBggqhQMHAQEBATAVBgkqhQMHAQIBAQEGCCqFAwcBAQICA0MABECWKQ0TYllq g4GmY3tBJiyzpXUN+aOV9WbmTUinqrmEHP7KCNzoAzFg+04SSQpNNSHpQnm+jLAZ huJaJfqZ6VbTo4GFMIGCMGEGA1UdAQRaMFiAFIDZDPeZ+GZNk1OJjsCecS2npzES oTowODENMAsGA1UEChMEVEsyNjEnMCUGA1UEAxMeQ0EgVEsyNjogR09TVCAzNC4x MC0xMiAyNTYtYml0ggQBjLqBMB0GA1UdDgQWBBTRnChHSWbQYwnJC62n2zu5Njd0 3zAKBggqhQMHAQEDAgNBAB41oijaXSEn58l78y2rhxY35/lKEq4XWZ70FtsNlVxW ATyzgO5Wliwnt1O4GoZsxx8r6T/i7VG65UNmQlwdOKQxgaIwgZ8CAQEwQDA4MQ0w CwYDVQQKEwRUSzI2MScwJQYDVQQDEx5DQSBUSzI2OiBHT1NUIDM0LjEwLTEyIDI1 Ni1iaXQCBAGMuoIwCgYIKoUDBwEBAgIwCgYIKoUDBwEBAQEEQC6jZPA59szL9FiA 0wC71EBE42ap6gKxklT800cu2FvbLu972GJYNSI7+UeanVU37OVWyenEXi2E5HkU 94kBe8Q= -----END CMS----- libengine-gost-openssl-3.0.2/tcl_tests/test.tcl000066400000000000000000000334051446070765000216100ustar00rootroot00000000000000# ĐŖŅŅ‚Đ°ĐŊОвĐēа ĐŊĐžĐŧĐĩŅ€Đ° Ņ‚ĐĩŅŅ‚ĐžĐ˛ĐžĐŗĐž ПРА namespace eval vizir { set regnumPRA 0000000000000001 } # # # ĐĄĐžĐąŅŅ‚Đ˛ĐĩĐŊĐŊĐž Ņ‚ĐĩŅŅ‚ĐžĐ˛Ņ‹Đš ҄ҀĐĩĐšĐŧĐ˛ĐžŅ€Đē namespace eval test { # ĐŖŅ€ĐžĐ˛ĐĩĐŊҌ ĐģĐžĐŗĐŗĐ¸ĐŊĐŗĐ° ĐŋĐž ҃ĐŧĐžĐģŅ‡Đ°ĐŊĐ¸ŅŽ. МоĐļĐĩŅ‚ ĐąŅ‹Ņ‚ŅŒ ĐŋĐĩŅ€ĐĩĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊ ŅĐ˛ĐŊŅ‹Đŧ # ĐŋŅ€Đ¸ŅĐ˛Đ°Đ¸Đ˛Đ°ĐŊиĐĩĐŧ ĐŋĐĩŅ€ĐĩĐ´ ŅĐžĐˇĐ´Đ°ĐŊиĐĩĐŧ ĐēĐžĐŊŅ‚ĐĩĐēŅŅ‚Đ°. ДĐĩĐšŅŅ‚Đ˛ŅƒĐĩŅ‚ ĐŊа ĐēĐžĐŊŅ‚ĐĩĐēҁ҂ҋ # ŅĐžĐˇĐ´Đ°ĐŊĐŊŅ‹Đĩ makeCtx, makeCtx2 и threecontexts. # ЗадаĐŊиĐĩ -logminpriority в test::ctxParams иĐŧĐĩĐĩŅ‚ ĐŋŅ€Đ¸ĐžŅ€Đ¸Ņ‚ĐĩŅ‚. set logLevel 3 # ПĐĩŅ€ĐĩĐŧĐĩĐŊĐŊĐ°Ņ Ņ…Ņ€Đ°ĐŊŅŅ‰Đ°Ņ иĐŧŅ диĐŊаĐŧĐ¸Ņ‡ĐĩҁĐēОК йийĐģĐ¸ĐžŅ‚ĐĩĐēи Đ´ĐģŅ userlib variable userlib {} # Đ§Ņ‚ĐžĐąŅ‹ timestamp ĐąŅ‹Đģа ĐžĐŋŅ€ĐĩĐ´ĐĩĐģĐĩĐŊа Đ˛ŅĐĩĐŗĐ´Đ° variable timestamp [clock seconds] proc findUserLib {} { variable userlib if {$::tcl_platform(platform)!="dos"} { set dirlist [list [file dirname [info script]]\ [file dirname [info nameofexecutable]]] if {$::tcl_platform(platform) == "windows"} { lappend dirlist\ [file normalize [file join [file dirname [info script]] .. obj_mid.w32]]\ [file normalize [file join [file dirname [info script]] .. obj_mid.w32]] } elseif {$::tcl_platform(os) == "Linux"} { lappend dirlist\ [file normalize [file join [file dirname [info script]] .. obj_sid.lnx]] } elseif {$::tcl_platform(os) == "SunOS"} { if {$::tcl_platform(wordSize) == 8} { set for s64 } elseif {$::tcl_platform(byteOrder) == "littleEndian"} { set for s86 } else { set for s32 } lappend dirlist\ [file normalize [file join [file dirname [info script]] .. obj_sid.$for]] } foreach dir $dirlist { set userlib_file [file join $dir usermci[info sharedlibextension]] if {[file exists $userlib_file]} { break } } if {![file exists $userlib_file]} { error "No usable userlib found in $dirlist" } set userlib [list -userlib $userlib_file] } else { set userlib {} } } # # # # Đ’Ņ‹ĐˇŅ‹Đ˛Đ°ĐĩŅ‚ŅŅ в ĐŊĐ°Ņ‡Đ°ĐģĐĩ Ņ‚ĐĩŅŅ‚ĐžĐ˛ĐžĐŗĐž ҁĐēŅ€Đ¸ĐŋŅ‚Đ°. ИĐŊĐ¸Ņ†Đ¸Đ°ĐģĐ¸ĐˇĐ¸Ņ€ŅƒĐĩŅ‚ ĐŊĐĩĐžĐąŅ…ĐžĐ´Đ¸ĐŧŅ‹Đĩ # ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊŅ‹Đĩ ĐŋаĐēĐĩŅ‚Đ°, ĐžŅ‚ĐēŅ€Ņ‹Đ˛Đ°ĐĩŅ‚ ĐģĐžĐŗ и ĐŋĐ¸ŅˆĐĩŅ‚ в ĐŊĐĩĐŗĐž ĐˇĐ°ĐŗĐžĐģОвОĐē # ĐŸĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ name - ĐˇĐ°ĐŗĐžĐģОвОĐē Ņ‚ĐĩŅŅ‚ĐžĐ˛ĐžĐŗĐž ҁĐēŅ€Đ¸ĐŋŅ‚Đ°. # # ĐŸĐžĐąĐžŅ‡ĐŊŅ‹Đĩ ŅŅ„Ņ„ĐĩĐē҂ҋ - ŅĐžĐˇĐ´Đ°ĐĩŅ‚ŅŅ <иĐŧŅ-ҁĐēŅ€Đ¸ĐŋŅ‚Đ°>.log # proc start_tests {name} { variable suffix if {![info exists suffix]} { set binary [file rootname [file tail [info nameofexecutable]]] if {$binary != "tclsh"} { set suffix "_[string range [file tail [info nameofexecutable]] 0 2]" } else { set suffix "" } } variable logname [file rootname [file tail [info script]]]$suffix.log variable no 0 ok 0 failed 0 p_skip 0 c_skip 0 t_name $name logchannel [open $logname w] tempfiles {} if {![catch {package present Vizir}]} { findUserLib } puts [format [rus "=========== Đ“Ņ€ŅƒĐŋĐŋа Ņ‚ĐĩŅŅ‚ĐžĐ˛: %s ================="] [rus $name]] puts $::test::logchannel [format [rus "Đ“Ņ€ŅƒĐŋĐŋа Ņ‚ĐĩŅŅ‚ĐžĐ˛ \"%s\""] $name] } # # ЗавĐĩŅ€ŅˆĐ°ĐĩŅ‚ Đ˛Ņ‹ĐŋĐžĐģĐŊĐĩĐŊиĐĩ Ņ‚ĐĩŅŅ‚Đ° и Đ˛Ņ‹Đ˛ĐžĐ´Đ¸Ņ‚ ĐžŅ‚Ņ‡ĐĩŅ‚ # Đ’Ņ‹ĐˇŅ‹Đ˛Đ°ĐĩŅ‚ exit # proc end_tests {} { variable no variable ok variable failed variable p_skip variable t_name variable c_skip variable logname variable tempfiles variable suffix puts "===================================================" puts [format [rus "Đ’ŅĐĩĐŗĐž %d Ņ‚ĐĩŅŅ‚ĐžĐ˛. Đ’Ņ‹ĐŋĐžĐģĐŊĐĩĐŊĐž %d ҃ҁĐŋĐĩ҈ĐŊĐž, %d ĐŊĐĩ҃ҁĐŋĐĩ҈ĐŊĐž"] $no $ok $failed] if {$p_skip || $c_skip} { puts [format [rus "ĐŸŅ€ĐžĐŋŅƒŅ‰ĐĩĐŊĐž: %d ĐŊа даĐŊĐŊОК ĐŋĐģĐ°Ņ‚Ņ„ĐžŅ€ĐŧĐĩ %d иС-Са ĐŊĐĩĐ˛Ņ‹ĐŋĐžĐģĐŊĐĩĐŊĐ¸Ņ Đ´Ņ€ŅƒĐŗĐ¸Ņ… Ņ‚ĐĩŅŅ‚ĐžĐ˛"] $p_skip $c_skip] } if {$failed} { puts [format [rus "ĐĄĐŧĐžŅ‚Ņ€Đ¸ йОĐģĐĩĐĩ ĐŋĐžĐ´Ņ€ĐžĐąĐŊŅƒŅŽ иĐŊŅ„ĐžŅ€ĐŧĐ°Ņ†Đ¸ŅŽ в %s"] $logname] } set test_id [file rootname [file tail [info script]]]$suffix set stat [open "stats" a] fconfigure $stat -encoding utf-8 puts $stat [list $test_id [rus $t_name] $no $ok $failed $p_skip $c_skip] close $stat if {!$failed} { foreach file $tempfiles { if [info exists $file] {puts [test_log] "Deleting $file" file delete $file} } } { # signal to a caller that we had failures exit 1 } } # # Đ’ĐžĐ˛ĐˇŅ€Đ°Ņ‰Đ°ĐĩŅ‚ идĐĩĐŊŅ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ĐžŅ€ ĐēаĐŊаĐģа, ĐēŅƒĐ´Đ° ĐŋĐ¸ŅˆĐĩŅ‚ŅŅ ĐģĐžĐŗ Ņ‚ĐĩŅŅ‚ĐžĐ˛. # Đ ĐĩĐēĐžĐŧĐĩĐŊĐ´ŅƒĐĩŅ‚ŅŅ ĐŊаСĐŊĐ°Ņ‡Đ°Ņ‚ŅŒ ĐĩĐŗĐž в ĐēĐ°Ņ‡ĐĩŅŅ‚Đ˛Đĩ -logchannel ŅĐžĐˇĐ´Đ°Đ˛Đ°ĐĩĐŧŅ‹Đŧ # ĐēĐžĐŊŅ‚ĐĩĐēŅŅ‚Đ°Đŧ Ņ‡Ņ‚ĐžĐąŅ‹ Đ˛ŅŅ Đ˛Ņ‹Đ´Đ°Ņ‡Đ° ĐąŅ‹Đģа в ОдĐŊĐžĐŧ ĐŧĐĩҁ҂Đĩ # proc test_log {} { variable logchannel return $logchannel } # # ĐĄĐžĐąŅŅ‚Đ˛ĐĩĐŊĐŊĐž Ņ‚Đĩҁ҂ # ĐŸĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ # 1. НазваĐŊиĐĩ Ņ‚ĐĩŅŅ‚Đ° # 2. Код (Ņ€ĐĩĐēĐžĐŧĐĩĐŊĐ´ŅƒĐĩŅ‚ŅŅ ĐŋĐ¸ŅĐ°Ņ‚ŅŒ { # ĐēОд # } # 3. ОĐļидаĐĩĐŧŅ‹Đš Ņ€ĐĩĐˇŅƒĐģŅŒŅ‚Đ°Ņ‚ Đ˛Ņ‹ĐŋĐžĐģĐŊĐĩĐŊĐ¸Ņ - 0 ҃ҁĐŋĐĩ҈ĐŊĐž 1 - ĐžŅˆĐ¸ĐąĐēа. Đ’Đ°Ņ€Đ¸Đ°ĐŊ҂ҋ # йОĐģҌ҈Đĩ 1 (TCL_BREAK, TCL_CONTINUE и TCL_RETURN) вОСĐŧĐžĐļĐŊŅ‹, ĐŊĐž Đ˛Ņ€ŅĐ´ # Đģи иĐŊŅ‚ĐĩŅ€ĐĩҁĐŊŅ‹ # 4. ОĐļидаĐĩĐŧŅ‹Đš Đ˛ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩĐŧŅ‹Đš Ņ€ĐĩĐˇŅƒĐģŅŒŅ‚Đ°Ņ‚ # Đ•ŅĐģи ĐŋŅ€ĐĩĐ´Ņ‹Đ´ŅƒŅ‰Đ¸Đš ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ 0, Ņ€ĐĩĐˇŅƒĐģŅŒŅ‚Đ°Ņ‚ ŅŅ€Đ°Đ˛ĐŊиваĐĩŅ‚ŅŅ ĐŊа Ņ‚ĐžŅ‡ĐŊĐžĐĩ # ŅĐžĐ˛ĐŋадĐĩĐŊиĐĩ, ĐĩҁĐģи 1 - Ņ€ĐĩĐˇŅƒĐģŅŒŅ‚Đ°Ņ‚ - Ņ€ĐĩĐŗĐĩĐēҁĐŋ, ĐēĐžŅ‚ĐžŅ€ĐžĐŧ҃ Đ´ĐžĐģĐļĐŊĐž # ŅƒĐ´ĐžĐ˛ĐģĐĩŅ‚Đ˛ĐžŅ€ŅŅ‚ŅŒ ŅĐžĐžĐąŅ‰ĐĩĐŊиĐĩ Ой ĐžŅˆĐ¸ĐąĐēĐĩ. proc test args { array set opts {} variable tempfiles variable timestamp while {[string match -* [lindex $args 0]]} { set key [lindex $args 0] set val [lindex $args 1] set args [lrange $args 2 end] set opts($key) $val } foreach {message code exitStatus expectedResult} $args break global errorInfo if {[info exists opts(-platform)] && [lsearch -exact $opts(-platform) $::tcl_platform(platform)]==-1} { logskip $message "platform" return } if {[info exists opts(-platformex)] && ![uplevel expr $opts(-platformex)]} { logskip $message "platform" return } if {[info exists opts(-skip)] && [uplevel expr $opts(-skip)]} { logskip $message "prereq" return } if {[info exists opts(-fixme)] && [uplevel expr $opts(-fixme)]} { logmiss $message "FIXME" return } if {[info exists opts(-createsfiles)]} { foreach file $opts(-createsfiles) { lappend tempfiles $file if {[file exists $file]} {file delete $file} } } if {[info exists opts(-createsvars)]} { foreach var $opts(-createsvars) { uplevel "if {\[info exists $var\]} {unset $var}" } } logbegin $message set teststart [clock seconds] set status [catch {uplevel $code} result] set testend [clock seconds] if {$teststart == $testend} { set timestamp $teststart } else { # Handle negative intervals correctly if {$teststart > $testend} { set timestamp "$testend+[expr $teststart-$testend]" } else { set timestamp "$teststart+[expr $testend-$teststart]" } } if {$status!=$exitStatus || ($status==1?![regexp --\ [rus $expectedResult] $result]:([info exists opts(-time)]?\ ![listcompare $result $expectedResult $opts(-time)]:\ [string compare "$result" "$expectedResult"]))} { logend "failed" if {$status == 1} { set expectedResult [rus $expectedResult] } log "Code:----$code---------------" log "Expected status $exitStatus got $status" log "Expected result: [list $expectedResult]" log " Got result: [list $result]" if {$status == 1} { log "errorCode = $::errorCode" } } else { logend "ok" } } # # ВĐŊŅƒŅ‚Ņ€ĐĩĐŊĐŊиĐĩ (ĐŊĐĩŅĐēҁĐŋĐžŅ€Ņ‚Đ¸Ņ€ŅƒĐĩĐŧŅ‹Đĩ)ĐŋŅ€ĐžŅ†ĐĩĐ´ŅƒŅ€Ņ‹ # # # # ĐĄŅ€Đ°Đ˛ĐŊĐĩĐŊиĐĩ ҁĐŋĐ¸ŅĐēОв ҁ ŅƒŅ‡ĐĩŅ‚ĐžĐŧ Ņ‚ĐžĐŗĐž Ņ‡Ņ‚Đž ĐŊĐĩĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ŅĐģĐĩĐŧĐĩĐŊ҂ҋ ĐŧĐžĐŗŅƒŅ‚ ĐąŅ‹Ņ‚ŅŒ # ĐŧĐĩŅ‚ĐēаĐŧи Đ˛Ņ€ĐĩĐŧĐĩĐŊи, ĐēĐžŅ‚ĐžŅ€Ņ‹Đĩ ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŅŽŅ‚ŅŅ ҁ Ņ‚ĐžŅ‡ĐŊĐžŅŅ‚ŅŒŅŽ +-ҁĐĩĐē҃ĐŊда # ĐŸĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ time - ҁĐŋĐ¸ŅĐžĐē, ĐēаĐļĐ´Ņ‹Đš ŅĐģĐĩĐŧĐĩĐŊŅ‚ ĐēĐžŅ‚ĐžŅ€ĐžĐŗĐž ŅĐ˛ĐģŅĐĩŅ‚ŅŅ иĐŊĐ´ĐĩĐēŅĐžĐŧ # ŅĐģĐĩĐŧĐĩĐŊŅ‚Đ° в ҁĐŋĐ¸ŅĐēĐĩ, ĐģийО ҁĐŋĐ¸ŅĐēĐžĐŧ иĐŊĐ´ĐĩĐēŅĐžĐ˛ вО вĐģĐžĐļĐĩĐŊĐŊҋ҅ ҁĐŋĐ¸ŅĐēĐ°Ņ… # proc listcompare {list1 list2 time} { foreach e $time { if {[llength $e]>1} { lappend a([lindex $e 0]) [lrange $e 1 end] } else { set a($e) {} } } if {[llength $list1] !=[llength $list2]} { return 0 } set i 0 foreach e1 $list1 e2 $list2 { if {![info exists a($i)]} { if {[string compare $e1 $e2]!=0} { return 0 } } elseif {[llength $a($i)]} { if {![listcompare $e1 $e2 $a($i)]} { return 0 } } else { if {$e2 == "::test::timestamp"} { set e2 $::test::timestamp } if {[regexp {^([[:digit:]]+)\+([[:digit:]]+)$} $e2 m start delta]} { if {$e1<$start || $e1 >$start+$delta} { return 0 } } elseif {abs($e1-$e2)>1} { return 0 } } incr i } return 1 } proc rus {string} { return $string } # # ĐŸĐ¸ŅˆĐĩŅ‚ ŅŅ‚Ņ€ĐžĐē҃ в ĐģĐžĐŗ # proc log {message} { variable logchannel puts $logchannel $message } # # Đ’Ņ‹ĐˇŅ‹Đ˛Đ°ĐĩŅ‚ŅŅ ĐŋŅ€Đ¸ ĐŊĐ°Ņ‡Đ°ĐģĐĩ Ņ‚ĐĩŅŅ‚Đ° # proc logbegin {testname} { variable no variable curtest incr no puts -nonewline [rus [format "ĐĸĐĩҁ҂%5d: %-60s:" $no [string range $testname 0 59]]] flush stdout set curtest $testname log [rus "\n\nĐĸĐĩҁ҂ $no: $testname start"] } # # Đ’Ņ‹ĐˇŅ‹Đ˛Đ°ĐĩŅ‚ŅŅ ĐŋŅ€Đ¸ ĐŋŅ€ĐžĐŋ҃ҁĐēĐĩ Ņ‚ĐĩŅŅ‚Đ° # proc logskip {testname reason} { variable no variable p_skip variable c_skip puts "[rus [format "ĐĸĐĩҁ҂%5d: %-60s:" $no [string rang $testname 0 59]]]skipped " log "[rus "ĐĸĐĩҁ҂ $no: skipped "][expr {$reason=="platform"?"on the platform $::tcl_platform(platform)":"due to failed prerequisites"}]:[rus $testname]" incr no if {$reason == "platform"} { incr p_skip } else { incr c_skip } } # # Đ’Ņ‹ĐˇŅ‹Đ˛Đ°ĐĩŅ‚ŅŅ ĐŋŅ€Đ¸ Đ¸ĐŗĐŊĐžŅ€Đ¸Ņ€ĐžĐ˛Đ°ĐŊии Ņ‚ĐĩŅŅ‚Đ° # proc logmiss {testname reason} { variable no variable c_skip puts "[rus [format "ĐĸĐĩҁ҂%5d: %-60s:" $no [string rang $testname 0 59]]]missed " log "[rus "ĐĸĐĩҁ҂ $no: missed "][expr {$reason=="platform"?"on the platform $::tcl_platform(platform)":"by reason: $reason"}]:[rus $testname]" incr no incr c_skip } # # Đ’Ņ‹ĐˇŅ‹Đ˛Đ°ĐĩŅ‚ŅŅ ĐēĐžĐŊ҆Đĩ Ņ‚ĐĩŅŅ‚Đ° и ҁ ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€ĐžĐŧ ok иĐģи failed # proc logend {status} { variable no variable curtest variable $status incr $status puts $status log [rus "ĐĸĐĩҁ҂ $no: $curtest ends $status"] } ##################################################################### # Đ’ŅĐŋĐžĐŧĐžĐŗĐ°Ņ‚ĐĩĐģҌĐŊŅ‹Đĩ ĐŋŅ€ĐžŅ†ĐĩĐ´ŅƒŅ€Ņ‹, ĐŊĐĩ ҁĐŋĐĩŅ†Đ¸Ņ„Đ¸Ņ‡ĐŊŅ‹Đĩ Đ´ĐģŅ Ņ‚ĐĩŅŅ‚Đ¸Ņ€ŅƒĐĩĐŧĐžĐŗĐž # ĐŋŅ€Đ¸ĐģĐžĐļĐĩĐŊĐ¸Ņ ##################################################################### # # ЗаĐŋĐ¸ŅŅ‹Đ˛Đ°ĐĩŅ‚ даĐŊĐŊŅ‹Đĩ иС data в Ņ„Đ°ĐšĐģ name. По ҃ĐŧĐžĐģŅ‡Đ°ĐŊĐ¸ŅŽ ĐŋĐ¸ŅˆĐĩŅ‚ в # Ņ‚ĐĩĐēŅƒŅ‰ĐĩĐš ŅĐ¸ŅŅ‚ĐĩĐŧĐŊОК ĐēĐžĐ´Đ¸Ņ€ĐžĐ˛ĐēĐĩ. МоĐļĐŊĐž ҃ĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐēĐžĐ´Đ¸Ņ€ĐžĐ˛Đē҃ ŅĐ˛ĐŊĐž ҂ҀĐĩŅ‚ŅŒĐ¸Đŧ # Đ°Ņ€ĐŗŅƒĐŧĐĩĐŊŅ‚ĐžĐŧ # proc makeFile {name data {encoding {}}} { set f [open $name w] setFileEncoding $f $encoding puts -nonewline $f $data close $f } proc setFileEncoding {f encoding} { if {[string length $encoding]} { if {"$encoding" == "binary"} { fconfigure $f -translation binary } else { fconfigure $f -encoding $encoding } } } # # Đ’ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ ŅĐžĐ´eŅ€ĐļиĐŧĐžĐĩ Ņ„Đ°ĐšĐģа # proc getFile {filename {encoding {}}} { set f [open $filename] setFileEncoding $f $encoding set data [read $f] close $f return $data } # # Đ’ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐĩ йиĐŊĐ°Ņ€ĐŊĐžĐŗĐž Ņ„Đ°ĐšĐģа. ДĐģŅ ŅĐžĐ˛ĐŧĐĩŅŅ‚Đ¸ĐŧĐžŅŅ‚Đ¸ ŅĐž ŅŅ‚Đ°Ņ€Ņ‹Đŧи # Ņ‚ĐĩŅŅ‚Đ°Đŧи # proc getfile {filename} { return [getFile $filename binary] } # # Đ—Đ°Ņ‡Đ¸Ņ‚Ņ‹Đ˛Đ°ĐĩŅ‚ ҃ĐēаСаĐŊĐŊŅ‹Đš Ņ„Đ°ĐšĐģ, ŅƒĐ´Đ°ĐģŅĐĩŅ‚ ĐĩĐŗĐž и Đ˛ĐžĐˇĐ˛Ņ€Đ°Ņ‰Đ°ĐĩŅ‚ ŅĐžĐ´ĐĩŅ€ĐļиĐŧĐžĐĩ. # По ҃ĐŧĐžĐģŅ‡Đ°ĐŊĐ¸ŅŽ Ņ‡Đ¸Ņ‚Đ°ĐĩŅ‚ Ņ„Đ°ĐšĐģ в Ņ‚ĐĩĐēŅƒŅ‰ĐĩĐš ŅĐ¸ŅŅ‚ĐĩĐŧĐŊОК ĐēĐžĐ´Đ¸Ņ€ĐžĐ˛ĐēĐĩ. МоĐļĐŊĐž # ҃ĐēĐ°ĐˇĐ°Ņ‚ŅŒ ĐēĐžĐ´Đ¸Ņ€ĐžĐ˛Đē҃ ŅĐ˛ĐŊĐž Đ˛Ņ‚ĐžŅ€Ņ‹Đŧ Đ°Ņ€ĐŗŅƒĐŧĐĩĐŊŅ‚ĐžĐŧ. # proc readAndDel {name {encoding {}}} { set f [open $name] setFileEncoding $f $encoding set data [read $f] close $f file delete $name return $data } # # Đ—Đ°Ņ‰Đ¸Ņ‰Đ°ĐĩŅ‚ Ņ„Đ°ĐšĐģ ĐžŅ‚ СаĐŋĐ¸ŅĐ¸ ҁҀĐĩĐ´ŅŅ‚Đ˛Đ°Đŧи ĐžĐŋĐĩŅ€Đ°Ņ†Đ¸ĐžĐŊĐŊОК ŅĐ¸ŅŅ‚ĐĩĐŧŅ‹ # denywrite filename ?boolean? # Đ•ŅĐģи boolean ĐŊĐĩ ҃ĐēаСаĐŊ, иĐģи ĐžĐŊ true, Ņ„Đ°ĐšĐģ ŅŅ‚Đ°ĐŊĐžĐ˛Đ¸Ņ‚ŅŅ read-only # Đ•ŅĐģи ҃ĐēаСаĐŊ - readwrite (Đ´ĐģŅ вĐģадĐĩĐģŅŒŅ†Đ°. ВĐŋŅ€ĐžŅ‡ĐĩĐŧ Đ´ĐģŅ ĐŊĐĩ-вĐģадĐĩĐģŅŒŅ†Đ° Đ˛ŅĐĩ # Ņ€Đ°Đ˛ĐŊĐž ĐŊĐĩ ŅŅ€Đ°ĐąĐžŅ‚Đ°ĐĩŅ‚) # proc denyWrite {filename {deny 1}} { global tcl_platform if {$tcl_platform(platform) == "unix"} { set cur_attr [file attributes $filename -permissions] if {$deny} { set new_attr [expr {$cur_attr &~ 0200}] } else { set new_attr [expr {$cur_attr | 0200}] } file attributes $filename -permissions $new_attr } else { file attributes $filename -readonly $deny } } # # ЗаĐŋĐ¸ŅŅ‹Đ˛Đ°ĐĩŅ‚ в ĐģĐžĐŗ 16-Ņ€Đ¸Ņ‡ĐŊŅ‹Đš даĐŧĐŋ ҃ĐēаСаĐŊĐŊОК ĐŋĐĩŅ€ĐĩĐŧĐĩĐŊĐŊОК # proc hexdump {data } { while {[string length $data]} { set block [string range $data 0 15] set data [string replace $data 0 15] binary scan [encoding convertto $block] c* list set line "" set i 0 foreach code $list { append line [format "%02x " [expr $code>=0?$code:$code +256]] if {[incr i]%4==0} { append line "| " } } append line [string repeat " " [expr 56-[string length $line]]] regsub -all "\[\0-\37\]" $block . printable append line [rus $printable] log $line } } namespace export test start_tests end_tests test_log rus log\ makeFile readAndDel hexdump denyWrite getFile getfile } namespace import ::test::* package provide test 0.2 libengine-gost-openssl-3.0.2/tcl_tests/tmpl.try000066400000000000000000000002461446070765000216360ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir start_tests "ĐĸĐĩҁ҂ҋ ĐŊа ĐēĐžĐŧаĐŊĐ´Ņƒ dgst" end_tests libengine-gost-openssl-3.0.2/tcl_tests/ts.try000066400000000000000000000230551446070765000213130ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest cd $::test::dir set env(LC_TIME) C if [file exists tsa.serial] { file delete tsa.serial } set testname [file rootname [file tail $::argv0]] # # Formats 64 hex digits into format # proc format_hash {hash} { # Split hash into list of two-digit hexadecimal numbers set list [regexp -all -inline {[[:xdigit:]]{2}} $hash] for {set i 0} {$i<[llength $list]} {incr i 16} { append out [format " %04x - " $i] set hex [join [lrange $list $i [expr $i+15]] " "] if {[string length $hex]>24} { set hex [string replace $hex 23 23 "-"] } append out $hex [string repeat " " [expr 50-[string length $hex]]] foreach char [lrange $list $i [expr $i+15]] { set n [scan $char "%x"] if {$n>=32 && $n <=126 } { append out [format %c $n] } else { append out "." } } append out "\n" } # Chop newline from last line return [string trim $out "\n"] } # # Replace Nonce with equvalent number of X-es because we cannot # predict nonce for comparing output, and chop out STDERR # If output contains timestamp, extract it, replace with word # "extracted" and return two-element list where element 0 is modified # output and element 1 is timestamp in unix time # proc cleanup_print {output} { set data [regsub {STDERR CONTENTS:.*$} [regsub {Nonce: 0x[[:xdigit:]]+} $output {Nonce: 0xXXXXXXXXXXXXXXXX}] {}] if {[regexp "\nTime stamp: (\[^\n\]+)\n" $data -> time]} { return [list [regsub "\nTime stamp: (\[^\n\]+)\n" $data "\nTime stamp: extracted\n"] [clock scan $time]] } else { return $data } } start_tests "ĐĸĐĩҁ҂ҋ ĐŊа timestamping protocol" test "Creating CA 2001" { makeCA ${testname}CA gost2001:A } 0 1 test "Creating CA 2012" { makeCA } 0 1 set serial_num 0 if {[info exists env(ALG_LIST)]} { set alg_list $env(ALG_LIST) } else { switch -exact [engine_name] { "ccore" {set alg_list {gost2001:A gost2012_256:A gost2012_512:A}} "open" {set alg_list {gost2001:A gost2012_256:A gost2012_512:A}} } } foreach alg $alg_list { set alg_fn [string map {":" "_"} $alg] set username U_tsa_$alg_fn set hash_alg [alg_hash $alg] switch -glob $alg { gost2012* {set ::test::ca ${testname}CA-2012} * {set ::test::ca ${testname}CA} } test "Creating Timestamping authority certificate" { makeRegisteredUser $username $alg CN "Timestamping authority $alg" \ extensions "keyUsage=digitalSignature,nonRepudiation\nextendedKeyUsage=critical,timeStamping" openssl "verify -CAfile $::test::ca/cacert.pem -purpose timestampsign $username/cert.pem" } 0 "$username/cert.pem: OK\n" test "creating TSA configuration file" { makeFile tsa.cnf "\[ tsa \] default_tsa = tsa_section \[ tsa_section \] serial = [pwd]/tsa.serial digests=[hash_short_name $hash_alg] default_policy = 1.2.3.4 other_policies = 1.2.3.4.5,1.2.3.4.6 signer_digest = md_gost94 " } 0 "" test "Creating request with [hash_short_name $hash_alg], no cert request, no policy" { makeFile testdata [string repeat "Test data for timestamp\n" 100] set hash1 [regsub {^[^=]+= } [openssl "dgst -[hash_short_name $hash_alg] testdata"] {}] set sha1hash1 [regsub {^[^=]+= } [openssl "dgst -sha1 testdata"] {}] openssl "ts -query -[hash_short_name $hash_alg] -data testdata -out req1.tsq" file exists req1.tsq } 0 1 test "Printing request 1" { cleanup_print [openssl "ts -query -text -in req1.tsq"] } 0 "Version: 1 Hash Algorithm: [hash_long_name $hash_alg] Message data: [format_hash $hash1] Policy OID: unspecified Nonce: 0xXXXXXXXXXXXXXXXX Certificate required: no Extensions: " test "Creating reply for request1" { incr serial_num openssl "ts -reply -config tsa.cnf -queryfile req1.tsq -signer $username/cert.pem -inkey $username/seckey.pem -out resp1.tsr -[hash_short_name $hash_alg]" file exists resp1.tsr } 0 1 set creation_time1 $::test::timestamp test -time 1 "printing reply 1" { cleanup_print [openssl "ts -reply -text -in resp1.tsr"] } 0 [list "Status info: Status: Granted. Status description: unspecified Failure info: unspecified TST info: Version: 1 Policy OID: 1.2.3.4 Hash Algorithm: [hash_long_name $hash_alg] Message data: [format_hash $hash1] Serial number: 0x[format "%02X" $serial_num] Time stamp: extracted Accuracy: unspecified Ordering: no Nonce: 0xXXXXXXXXXXXXXXXX TSA: unspecified Extensions: " $creation_time1] test "Verifying reply against query file" { grep "Verification" [openssl "ts -verify -in resp1.tsr -queryfile req1.tsq -untrusted $username/cert.pem -CAfile $::test::ca/cacert.pem"] } 0 "Verification: OK\n" test "Verifying reply against data file" { grep "Verification" [openssl "ts -verify -in resp1.tsr -data testdata -untrusted $username/cert.pem -CAfile $::test::ca/cacert.pem"] } 0 "Verification: OK\n" test "Verifying reply against other data file" { makeFile testdata2 [string repeat "Test data for timestamp 2\n" 100] set hash2 [regsub {^[^=]+= } [openssl "dgst -[hash_short_name $hash_alg] testdata2"] {}] openssl "ts -verify -in resp1.tsr -data testdata2 -untrusted $username/cert.pem -CAfile $::test::ca/cacert.pem" } 1 "message imprint mismatch" test "Verifying reply against explicit hash value" { grep "Verification" [openssl "ts -verify -in resp1.tsr -digest $hash1 -untrusted $username/cert.pem -CAfile $::test::ca/cacert.pem"] } 0 "Verification: OK\n" test "Creating request 2 with [hash_short_name $hash_alg], cert requested, no policy" { openssl "ts -query -[hash_short_name $hash_alg] -data testdata -cert -out req2.tsq" file exists req2.tsq } 0 1 test "Printing request 2" { cleanup_print [openssl "ts -query -text -in req2.tsq"] } 0 "Version: 1 Hash Algorithm: [hash_long_name $hash_alg] Message data: [format_hash $hash1] Policy OID: unspecified Nonce: 0xXXXXXXXXXXXXXXXX Certificate required: yes Extensions: " test "Replying to request 2" { incr serial_num openssl "ts -reply -config tsa.cnf -queryfile req2.tsq -signer $username/cert.pem -inkey $username/seckey.pem -out resp2.tsr -[hash_short_name $hash_alg]" file exists resp2.tsr } 0 1 set creation_time2 $::test::timestamp test -time 1 "Printing reply 2" { cleanup_print [openssl "ts -reply -text -in resp2.tsr"] } 0 [list "Status info: Status: Granted. Status description: unspecified Failure info: unspecified TST info: Version: 1 Policy OID: 1.2.3.4 Hash Algorithm: [hash_long_name $hash_alg] Message data: [format_hash $hash1] Serial number: 0x[format "%02X" $serial_num] Time stamp: extracted Accuracy: unspecified Ordering: no Nonce: 0xXXXXXXXXXXXXXXXX TSA: unspecified Extensions: " $creation_time2] test "Verifying reply2 against request file" { grep "Verification" [openssl "ts -verify -in resp2.tsr -queryfile req2.tsq -CAfile $::test::ca/cacert.pem"] } 0 "Verification: OK\n" test "Verifying reply2 against data file" { grep "Verification" [openssl "ts -verify -in resp2.tsr -data testdata -CAfile $::test::ca/cacert.pem"] } 0 "Verification: OK\n" test "Verifying reply2 against explicit digest" { grep "Verification" [openssl "ts -verify -in resp2.tsr -digest $hash1 -CAfile $::test::ca/cacert.pem"] } 0 "Verification: OK\n" test "Verifying reply2 against request 1" { grep "Verification" [openssl "ts -verify -in resp2.tsr -queryfile req1.tsq -CAfile $::test::ca/cacert.pem"] } 1 "nonce mismatch" test "Creating request 3 with sha1 digest" { openssl "ts -query -sha1 -data testdata -cert -out req3.tsq" file exists req3.tsq } 0 1 test "Printing request 3" { cleanup_print [openssl "ts -query -text -in req3.tsq"] } 0 "Version: 1 Hash Algorithm: sha1 Message data: [format_hash $sha1hash1] Policy OID: unspecified Nonce: 0xXXXXXXXXXXXXXXXX Certificate required: yes Extensions: " test "Replying to request 3 (with badAlg status)" { set creation_time3 [clock format [clock seconds] -gmt y -format "%B %d %H:%M:%S %Y GMT"] openssl "ts -reply -config tsa.cnf -queryfile req3.tsq -signer $username/cert.pem -inkey $username/seckey.pem -out resp3.tsr -[hash_short_name $hash_alg]" file exists resp3.tsr } 0 1 test "Printing reply 3" { cleanup_print [openssl "ts -reply -text -in resp3.tsr"] } 0 "Status info: Status: Rejected. Status description: Message digest algorithm is not supported. Failure info: unrecognized or unsupported algorithm identifier TST info: Not included. " test "Verifying response 3 against request file" { openssl "ts -verify -in resp3.tsr -queryfile req3.tsq -CAfile $::test::ca/cacert.pem" } 1 "status code: rejection, status text: Message digest algorithm is not supported., failure codes: badAlg" test "Creating request 4 with specific (valid) policy" { openssl "ts -query -[hash_short_name $hash_alg] -data testdata -tspolicy 1.2.3.4.5 -cert -out req4.tsq" file exists req4.tsq } 0 1 test "Replying to request 4" { incr serial_num openssl "ts -reply -config tsa.cnf -queryfile req4.tsq -signer $username/cert.pem -inkey $username/seckey.pem -out resp4.tsr -[hash_short_name $hash_alg]" file exists resp4.tsr } 0 1 test "Verifying reply 4 against request file" { grep "Verification" [openssl "ts -verify -in resp4.tsr -queryfile req4.tsq -CAfile $::test::ca/cacert.pem"] } 0 "Verification: OK\n" test "Creating request 5 with specific (invalid) policy" { openssl "ts -query -[hash_short_name $hash_alg] -data testdata -tspolicy 1.2.3.4.9 -cert -out req5.tsq" file exists req5.tsq } 0 1 test "Replying to request 5" { openssl "ts -reply -config tsa.cnf -queryfile req5.tsq -signer $username/cert.pem -inkey $username/seckey.pem -out resp5.tsr -[hash_short_name $hash_alg]" file exists resp5.tsr } 0 1 test "Verifying reply 5" { openssl "ts -verify -in resp5.tsr -queryfile req5.tsq -CAfile $::test::ca/cacert.pem" } 1 "status code: rejection, status text: Requested policy is not supported., failure codes: unacceptedPolicy" } end_tests libengine-gost-openssl-3.0.2/tcl_tests/vn4.ciphers000066400000000000000000000010141446070765000222020ustar00rootroot00000000000000gost2001:XA { GOST2001-GOST89-GOST89 v-vn4-01.vm.cryptocom.ru:443:iis GOST2012-GOST8912-GOST8912 v-vn4-01.vm.cryptocom.ru:443:iis # GOST2001-NULL-GOST94 v-vn4-01.vm.cryptocom.ru:443:iis # GOST2012-NULL-GOST12 v-vn4-01.vm.cryptocom.ru:443:iis } gost2012_256:XA { GOST2012-GOST8912-GOST8912 v-vn4-12S.vm.cryptocom.ru:443:iis # GOST2012-NULL-GOST12 v-vn4-12S.vm.cryptocom.ru:443:iis } gost2012_512:A { GOST2012-GOST8912-GOST8912 v-vn4-12L.vm.cryptocom.ru:443:iis # GOST2012-NULL-GOST12 v-vn4-12L.vm.cryptocom.ru:443:iis } libengine-gost-openssl-3.0.2/tcl_tests/wcli.try000066400000000000000000000124641446070765000216250ustar00rootroot00000000000000#!/usr/bin/tclsh lappend auto_path [file dirname [info script]] package require ossltest #ПĐĩŅ€Đ˛Ņ‹Đš ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ СадаĐĩŅ‚ Đ¸ŅĐŋĐžĐģŅŒĐˇŅƒĐĩĐŧŅ‹Đš ŅĐ°ĐšŅ„ĐĩŅ€ŅŅŒŅŽŅ‚. #Đ’Đ°Ņ€Đ¸Đ°ĐŊŅ‚ p0 ĐŊĐĩ ĐŋŅ€ĐĩĐ´ĐŊаСĐŊĐ°Ņ‡ĐĩĐŊа Đ´ĐģŅ Đ¸ŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊĐ¸Ņ в Đ°Đ˛Ņ‚ĐžĐŧĐ°Ņ‚Đ¸Ņ‡ĐĩҁĐēĐ¸Ņ… Ņ‚ĐĩŅŅ‚Đ°Ņ…, Ņ‚Đ°Đē ĐēаĐē #ĐŧŅ‹ ĐŊĐĩ ĐŧĐžĐļĐĩĐŧ ĐŋŅ€ĐžĐŗŅ€Đ°ĐŧĐŧĐŊĐž ĐžŅ†ĐĩĐŊĐ¸Ņ‚ŅŒ ĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊĐžŅŅ‚ŅŒ Ņ€ĐĩĐˇŅƒĐģŅŒŅ‚Đ°Ņ‚Đ°. ĐŸŅ€Đ¸ Đ¸ŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°ĐŊии #ŅŅ‚ĐžĐŗĐž Đ˛Đ°Ņ€Đ¸Đ°ĐŊŅ‚Đ° Ņ‚Đĩҁ҂ҋ ĐąŅƒĐ´ŅƒŅ‚ ĐŗĐ°Ņ€Đ°ĐŊŅ‚Đ¸Ņ€ĐžĐ˛Đ°ĐŊĐŊĐž Ņ„ĐĩĐšĐģĐ¸Ņ‚ŅŒŅŅ, ĐŋĐžŅŅ‚ĐžĐŧ҃ Đ¸ŅĐŋĐžĐģŅŒĐˇĐžĐ˛Đ°Ņ‚ŅŒ #ĐĩĐŗĐž ҁĐģĐĩĐ´ŅƒĐĩŅ‚ Ņ‚ĐžĐģҌĐēĐž Đ´ĐģŅ Ņ€ŅƒŅ‡ĐŊĐžĐŗĐž СаĐŋ҃ҁĐēа и вĐŊиĐŧĐ°Ņ‚ĐĩĐģҌĐŊĐž Ņ‡Đ¸Ņ‚Đ°Ņ‚ŅŒ ĐģĐžĐŗĐ¸. array set cipher_name { p8k GOST2012-KUZNYECHIK-KUZNYECHIKOMAC p8m GOST2012-MAGMA-MAGMAOMAC p2 GOST2012-GOST8912-GOST8912 p1 GOST2001-GOST89-GOST89 p20 GOST2012-NULL-GOST12 p10 GOST2001-NULL-GOST94 p0 {} } proc cipher_openssl {sn} {return $::cipher_name($sn)} proc cipher_command_line_option {sn} { if {$sn == "p0"} { return $::cipher_name($sn) } else { return "-cipher $::cipher_name($sn)" } } proc ciphers_usage {} { global cipher_name set res {} foreach name [array names cipher_name] { append res [format "\t%-3s - %s\n" $name $cipher_name($name)] } return $res } # Đ’Ņ‚ĐžŅ€ĐžĐš ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁ СадаĐĩŅ‚ ҇ĐĩŅ‚Đ˛Ņ‘Ņ€Đē҃ СĐŊĐ°Ņ‡ĐĩĐŊиК: #- аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ ĐēĐģŅŽŅ‡Đ° ҁĐĩŅ€Đ˛ĐĩŅ€Đ° #- ĐŋĐ°Ņ€Đ°ĐŧĐĩ҂Ҁҋ ĐēĐģŅŽŅ‡Đ° ҁĐĩŅ€Đ˛ĐĩŅ€Đ° #- ҁĐŋĐ¸ŅĐžĐē иĐŧĐĩĐŊ ĐēĐģиĐĩĐŊ҂ҁĐēĐ¸Ņ… ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ĐžĐ˛ #- аĐģĐŗĐžŅ€Đ¸Ņ‚Đŧ ĐēĐģŅŽŅ‡Đ° ĐŖĐĻ array set alg_name { 5xa {gost2012_512 A {Xchg512A Sign512A} gost2012_512} 2xa {gost2012_256 XA {Xchg256A Sign256A} gost2012_256} 1xa {gost2001 XA {XchgA SignA} gost2001} } proc alg_alg {sn} {return [lindex $::alg_name($sn) 0]} proc alg_crtdir {sn} {return [format "srv_%s_%s" [lindex $::alg_name($sn) 0] [lindex $::alg_name($sn) 1]]} proc alg_openssl {sn} {return [format "%s:%s" [lindex $::alg_name($sn) 0] [lindex $::alg_name($sn) 1]]} proc alg_certid_list {sn} {return [lindex $::alg_name($sn) 2]} proc alg_ca {sn} {return [lindex $::alg_name($sn) 3]} proc algs_usage {} { global alg_name set res {} foreach name [array names alg_name] { append res [format "\t%-3s - %s:%s\n" $name [lindex $alg_name($name) 0] [lindex $alg_name($name) 1]] } return $res } if {$argc < 1 || ![regexp {^([^-]+)-([^-]+)-([^-]+)-(.+)$} [lindex $argv 0] -> cipher alg tls host]} { puts stderr "Usage $argv0 cipher-alg-tlsver-hostname \[s_server-option\]" puts stderr "cipher:\n[ciphers_usage]" puts stderr "alg:\n[algs_usage]" puts stderr "tlsver: -tls* s_server option" exit 1 } set test::suffix "-$cipher-$alg-$tls-$host[lindex $argv 1]" if {![regexp @ $host]} { set host build@$host } set CAhost lynx.lan.cryptocom.ru set CAprefix /cgi-bin/autoca set mydir [file normalize [file dirname [info script]]] cd $::test::dir set http_tcl http.[info hostname].[clock seconds].[pid].tcl start_tests "CSP ĐēĐģиĐĩĐŊŅ‚ ($cipher, $alg, $host) [lindex $argv 1]" test "ДĐĩĐģаĐĩĐŧ ĐēĐžĐŋĐ¸ŅŽ http.tcl ĐŊа $host" { save_env2 {LD_LIBRARY_PATH OPENSSL_CONF} catch {unset env(LD_LIBRARY_PATH)} catch {unset env(OPENSSL_CONF)} exec $env(CVS_RSH) $host "cat >$http_tcl" < $mydir/http.tcl restore_env2 {LD_LIBRARY_PATH OPENSSL_CONF} set copied 1 } 0 1 set crtdir [alg_crtdir $alg] test -platformex {![file exists $crtdir/cert.pem]} "ПоĐģŅƒŅ‡Đ°ĐĩĐŧ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ HTTPS-ҁĐĩŅ€Đ˛ĐĩŅ€Đ°" { if {![makeUser $crtdir [alg_openssl $alg] CN [info hostname]]} { error "Request generation failed" } registerUserAtCA $crtdir $CAhost $CAprefix [alg_ca $alg] file exists $crtdir/cert.pem } 0 1 test -platformex {![file exists ca_[alg_ca $alg].pem]} "ПоĐģŅƒŅ‡Đ°ĐĩĐŧ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚ CA" { getCAcert $CAhost $CAprefix [alg_ca $alg] file exists ca_[alg_ca $alg].pem } 0 1 custom_client "$env(CVS_RSH) $host tclsh $http_tcl" \ {LD_LIBRARY_PATH OPENSSL_CONF} set server_args [concat [cipher_command_line_option $cipher] \ [list -bugs -msg -cert $crtdir/cert.pem -key $crtdir/seckey.pem \ -CAfile ca_[alg_ca $alg].pem -www] -$tls [lindex $argv 1]] test -skip {![info exists copied]} "ĐĄĐĩŅ€Đ˛ĐĩŅ€ ĐŊĐĩ ҂ҀĐĩĐąŅƒĐĩŅ‚ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ°" { set list [client_server https://[info hostname]:4433 $server_args {}] grep New, [lindex $list 0] } 0 "New, TLSv1/SSLv3, Cipher is [cipher_openssl $cipher]\n" test -skip {![info exists copied]} "ĐĄĐĩŅ€Đ˛ĐĩŅ€ ҂ҀĐĩĐąŅƒĐĩŅ‚ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚, ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚Đ° ĐŊĐĩŅ‚" { set list [client_server \ [list https://[info hostname]:4433 no-such-cert-at-all] \ [concat $server_args {-Verify 2}] {}] list [lindex $list 2] [lindex [split [lindex $list 1] " "] 0] } 0 [list 1 "0x80072f0c"] foreach alg_certid [alg_certid_list $alg] { test -skip {![info exists copied]} \ "ĐĄĐĩŅ€Đ˛ĐĩŅ€ ҂ҀĐĩĐąŅƒĐĩŅ‚ ҁĐĩŅ€Ņ‚Đ¸Ņ„Đ¸ĐēĐ°Ņ‚, ĐēĐģиĐĩĐŊŅ‚ $alg_certid" { set list [client_server \ [list https://[info hostname]:4433 $alg_certid] \ [ concat $server_args {-Verify 2}] {}] grep New, [lindex $list 0] } 0 "New, TLSv1/SSLv3, Cipher is [cipher_openssl $cipher]\n" } test "ĐŖĐ´Đ°ĐģŅĐĩĐŧ ĐēĐžĐŋĐ¸ŅŽ http.tcl ĐŊа $host" { save_env2 {LD_LIBRARY_PATH OPENSSL_CONF} catch {unset env(LD_LIBRARY_PATH)} catch {unset env(OPENSSL_CONF)} set rc [exec $env(CVS_RSH) $host rm -f $http_tcl] restore_env2 {LD_LIBRARY_PATH OPENSSL_CONF} set rc } 0 "" end_tests libengine-gost-openssl-3.0.2/tcl_tests/yarrowc.tcl000066400000000000000000000036471446070765000223240ustar00rootroot00000000000000set argport 7670 if {[lindex $argv 0] eq "-port"} { set argport [lindex $argv 1] set argv [lrange $argv 2 end] } set request [lindex $argv 0] set len [switch $request ping {expr -1} protocol {expr -2} version {expr -3} check {expr 1} default {expr $request}] set read_data {} proc get_port {} { if {[regexp {^\d+$} $::argport]} {return $::argport} set f [open $::argport r] set r [read -nonewline $f] close $f return $r } proc get_data {socket} { set read_data [read $socket] if {$read_data eq ""} { close $socket handle_data } else { append ::read_data $read_data } } proc handle_data {} { global len read_data if {$len > 0} { if {$::request eq "check" && $read_data ne ""} {exit 0} if {$read_data eq ""} { puts stderr "not ready" exit 1 } binary scan $read_data H* data set data [regsub -all ".{48}" [regsub -all ".." $data "& "] "&\n"] if {[string index $data end] eq "\n"} {set data [string replace $data end end]} puts $data } else { if {$len == -1 || $len == -3} { if {[string length $read_data] < 4} {error "Not enough data"} binary scan $read_data I rlen set read_data [string range $read_data 4 end] puts [encoding convertfrom utf-8 $read_data] if {[string length $read_data] != $rlen} { puts stderr "Real string length [string length $read_data] != claimed $rlen!" exit 2 } } elseif {$len == -2} { if {[string length $read_data] < 4} {error "Not enough data"} if {[string length $read_data] > 4} {error "Excess data"} binary scan $read_data I r puts $r } } exit 0 } set port [get_port] if {[info exists errmsg] && $errmsg ne ""} {error $errmsg} if {$port eq ""} {error "Cannot find port number"} set s [socket localhost $port] fconfigure $s -encoding binary -buffering none -blocking 0 fileevent $s readable [list get_data $s] puts -nonewline $s [binary format I $len] after 4000 {puts stderr "Timeout. Read for now: '$read_data'"; exit 2} vwait forever libengine-gost-openssl-3.0.2/test/000077500000000000000000000000001446070765000170735ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/test/00-engine.t000066400000000000000000000054671446070765000207560ustar00rootroot00000000000000#!/usr/bin/perl use Test2::V0; skip_all('This test is only suitable for the engine') unless $ARGV[0] eq 'engine'; plan(7); use Cwd 'abs_path'; # prepare data for open (my $F,">","testdata.dat"); print $F "12345670" x 128; close $F; my $key='0123456789abcdef' x 2; # # You can redefine engine to use using ENGINE_NAME environment variable # my $engine=$ENV{'ENGINE_NAME'}||"gost"; # Reopen STDERR to eliminate extra output open STDERR, ">>","tests.err"; if (exists $ENV{'OPENSSL_CONF'}) { delete $ENV{'OPENSSL_CONF'} } # # This test needs output of openssl engine -c command. # Default one is hardcoded below, but you can place file # ${ENGINE_NAME}.info into this directory if you use this test suite # to test other engine implementing GOST cryptography. # my $engine_info; if ( -f $engine . ".info") { diag("Reading $engine.info"); open F, "<", $engine . ".info"; read F,$engine_info,1024; } else { $engine_info= <","test.cnf"; print $F <","$provider.cnf"; print $F < { 'openssl-args' => "-engine $engine_name", }, 'standalone-provider-args' => { 'openssl-args' => "-provider $provider_name -provider default", }, 'standalone-engine-conf' => { 'openssl-conf' => < { 'openssl-conf' => <{'openssl-args'} // ''; my $module_conf = $configuration->{'openssl-conf'}; # This is a trick to make a locally modifiable environment variable and # retain it's current value as a default. local $ENV{OPENSSL_CONF} = $ENV{OPENSSL_CONF}; note("Running tests for test type $test_type"); if ($module_args) { $module_args = ' ' . $module_args; } if (defined $module_conf) { my $confname = "$test_type.cnf"; open my $F, '>', $confname; print $F $module_conf; close $F; $ENV{OPENSSL_CONF} = abs_path($confname); } # Reopen STDERR to eliminate extra output #open STDERR, ">>","tests.err"; my $F; my $cmd; my $name_re; open $F,">","testm1.dat"; print $F "012345678901234567890123456789012345678901234567890123456789012"; close $F; $cmd = "openssl dgst${module_args} -md_gost12_256 testm1.dat"; $name_re = qr/id-tc26-gost3411-12-256|md_gost12_256/; unless (like(`$cmd`, qr/^${name_re}\Q(testm1.dat)= 9d151eefd8590b89daa6ba6cb74af9275dd051026bb149a452fd84e5e57b5500\E\n$/ms, "GOST R 34.11-2012 256bit example 1 from standard")) { diag("Command was: $cmd"); } $cmd = "openssl dgst${module_args} -md_gost12_512 testm1.dat"; $name_re = qr/id-tc26-gost3411-12-512|md_gost12_512/; unless (like(`$cmd`, qr/^${name_re}\Q(testm1.dat)= 1b54d01a4af5b9d5cc3d86d68d285462b19abc2475222f35c085122be4ba1ffa00ad30f8767b3a82384c6574f024c311e2a481332b08ef7f41797891c1646f48\E\n$/ms, "GOST R 34.11-2012 512bit example 1 from standard")) { diag("Command was: $cmd"); } unlink("testm1.dat"); open $F,">","testm2.dat"; print $F pack("H*","d1e520e2e5f2f0e82c20d1f2f0e8e1eee6e820e2edf3f6e82c20e2e5fef2fa20f120eceef0ff20f1f2f0e5ebe0ece820ede020f5f0e0e1f0fbff20efebfaeafb20c8e3eef0e5e2fb"); close $F; $cmd = "openssl dgst${module_args} -md_gost12_256 testm2.dat"; $name_re = qr/id-tc26-gost3411-12-256|md_gost12_256/; unless (like(`$cmd`, qr/^${name_re}\Q(testm2.dat)= 9dd2fe4e90409e5da87f53976d7405b0c0cac628fc669a741d50063c557e8f50\E\n$/ms, "GOST R 34.11-2012 256bit example 2 from standard")) { diag("Command was: $cmd"); } $cmd = "openssl dgst${module_args} -md_gost12_512 testm2.dat"; $name_re = qr/id-tc26-gost3411-12-512|md_gost12_512/; unless (like(`$cmd`, qr/^${name_re}\Q(testm2.dat)= 1e88e62226bfca6f9994f1f2d51569e0daf8475a3b0fe61a5300eee46d961376035fe83549ada2b8620fcd7c496ce5b33f0cb9dddc2b6460143b03dabac9fb28\E\n$/ms, "GOST R 34.11-2012 512bit example 2 from standard")) { diag("Command was: $cmd"); } unlink("testm2.dat"); open $F,">","testdata.dat"; binmode $F; print $F "12345670" x 128; close $F; $cmd = "openssl dgst${module_args} -md_gost94 testdata.dat"; $name_re = qr/id-GostR3411-94|md_gost94/; unless (like(`$cmd`, qr/^${name_re}\Q(testdata.dat)= f7fc6d16a6a5c12ac4f7d320e0fd0d8354908699125e09727a4ef929122b1cae\E\n$/ms, "GOST R 34.11-94 1K ascii")) { diag("Command was: $cmd"); } $cmd = "openssl dgst${module_args} -md_gost12_256 testdata.dat"; $name_re = qr/id-tc26-gost3411-12-256|md_gost12_256/; unless (like(`$cmd`, qr/^${name_re}\Q(testdata.dat)= 1906512b86a1283c68cec8419e57113efc562a1d0e95d8f4809542900c416fe4\E\n$/ms, "GOST R 34.11-2012 256bit 1K ascii")) { diag("Command was: $cmd"); } $cmd = "openssl dgst${module_args} -md_gost12_512 testdata.dat"; $name_re = qr/id-tc26-gost3411-12-512|md_gost12_512/; unless (like(`$cmd`, qr/^${name_re}\Q(testdata.dat)= 283587e434864d0d4bea97c0fb10e2dd421572fc859304bdf6a94673d652c59049212bad7802b4fcf5eecc1f8fab569d60f2c20dbd789a7fe4efbd79d8137ee7\E\n$/ms, "GOST R 34.11-2012 512bit 1K ascii")) { diag("Command was: $cmd"); } unlink("testdata.dat"); open $F,">","testdata2.dat"; binmode $F; print $F "\x00\x01\x02\x15\x84\x67\x45\x31" x 128; close $F; $cmd = "openssl dgst${module_args} -md_gost94 testdata2.dat"; $name_re = qr/id-GostR3411-94|md_gost94/; unless (like(`$cmd`, qr/^${name_re}\Q(testdata2.dat)= 69f529aa82d9344ab0fa550cdf4a70ecfd92a38b5520b1906329763e09105196\E\n$/ms, "GOST R 34.11-94 1K binary")) { diag("Command was: $cmd"); } $cmd = "openssl dgst${module_args} -md_gost12_256 testdata2.dat"; $name_re = qr/id-tc26-gost3411-12-256|md_gost12_256/; unless (like(`$cmd`, qr/^${name_re}\Q(testdata2.dat)= 2eb1306be3e490f18ff0e2571a077b3831c815c46c7d4fdf9e0e26de4032b3f3\E\n$/ms, "GOST R 34.11-2012 256bit 1K binary")) { diag("Command was: $cmd"); } $cmd = "openssl dgst${module_args} -md_gost12_512 testdata2.dat"; $name_re = qr/id-tc26-gost3411-12-512|md_gost12_512/; unless (like(`$cmd`, qr/^${name_re}\Q(testdata2.dat)= 55656e5bcf795b499031a7833cd7dc18fe10d4a47e15be545c6ab3f304a4fe411c4c39de5b1fc6844880111441e0b92bf1ec2fb7840453fe39a2b70ced461968\E\n$/ms, "GOST R 34.11-2012 512bit 1K binary")) { diag("Command was: $cmd"); } unlink("testdata2.dat"); open $F, ">","testdata3.dat"; binmode $F; print $F substr("12345670" x 128,0,539); close $F; $cmd = "openssl dgst${module_args} -md_gost94 testdata3.dat"; $name_re = qr/id-GostR3411-94|md_gost94/; unless (like(`$cmd`, qr/^${name_re}\Q(testdata3.dat)= bd5f1e4b539c7b00f0866afdbc8ed452503a18436061747a343f43efe888aac9\E\n$/ms, "GOST R 34.11-94 539 bytes")) { diag("Command was: $cmd"); } $cmd = "openssl dgst${module_args} -md_gost12_256 testdata3.dat"; $name_re = qr/id-tc26-gost3411-12-256|md_gost12_256/; unless (like(`$cmd`, qr/^${name_re}\Q(testdata3.dat)= c98a17f9fadff78d08521e4179a7b2e6275f3b1da88339a3cb961a3514e5332e\E\n$/ms, "GOST R 34.11-2012 256bit 539 bytes")) { diag("Command was: $cmd"); } $cmd = "openssl dgst${module_args} -md_gost12_512 testdata3.dat"; $name_re = qr/id-tc26-gost3411-12-512|md_gost12_512/; unless (like(`$cmd`, qr/^${name_re}\Q(testdata3.dat)= d5ad93fbc9ed7abc1cf28d00827a052b40bea74b04c4fd753102c1bcf9f9dad5142887f8a4cceaa0d64a0a8291592413d6adb956b99138a0023e127ff37bdf08\E\n$/ms, "GOST R 34.11-2012 512bit 539 bytes")) { diag("Command was: $cmd"); } unlink "testdata3.dat"; open $F , ">","bigdata.dat"; binmode $F; print $F ("121345678" x 7 . "1234567\n") x 4096,"12345\n"; close $F; $cmd = "openssl dgst${module_args} -md_gost94 bigdata.dat"; $name_re = qr/id-GostR3411-94|md_gost94/; unless (like(`$cmd`, qr/^${name_re}\Q(bigdata.dat)= e5d3ac4ea3f67896c51ff919cedb9405ad771e39f0f2eab103624f9a758e506f\E\n$/ms, "GOST R 34.11-94 128K")) { diag("Command was: $cmd"); } $cmd = "openssl dgst${module_args} -md_gost12_256 bigdata.dat"; $name_re = qr/id-tc26-gost3411-12-256|md_gost12_256/; unless (like(`$cmd`, qr/^${name_re}\Q(bigdata.dat)= 50e935d725d9359e5991b6b7eba8b3539fca03584d26adf4c827c982ffd49367\E\n$/ms, "GOST R 34.11-2012 256bit 128K")) { diag("Command was: $cmd"); } $cmd = "openssl dgst${module_args} -md_gost12_512 bigdata.dat"; $name_re = qr/id-tc26-gost3411-12-512|md_gost12_512/; unless (like(`$cmd`, qr/^${name_re}\Q(bigdata.dat)= 1d93645ebfbb477660f98b7d1598e37fbf3bfc8234ead26e2246e1b979e590ac46138158a692f9a0c9ac2550758b4d0d4c9fb8af5e595a16d3760c6516443f82\E\n$/ms, "GOST R 34.11-2012 512bit 128K")) { diag("Command was: $cmd"); } unlink "bigdata.dat"; } libengine-gost-openssl-3.0.2/test/02-mac.t000066400000000000000000000171411446070765000202430ustar00rootroot00000000000000#!/usr/bin/perl use Test2::V0; my $engine_name = $ENV{ENGINE_NAME} || 'gost'; my $provider_name = $ENV{PROVIDER_NAME} || 'gostprov'; # Supported test types: # # conf Only if there's a command line argument. # For this test type, we rely entirely on the # caller to define the environment variable # OPENSSL_CONF appropriately. # standalone-engine-conf Tests the engine through a generated config # file. # This is done when there are no command line # arguments or when the environment variable # ENGINE_NAME is defined. # standalone-engine-args Tests the engine through openssl command args. # This is done when there are no command line # arguments or when the environment variable # ENGINE_NAME is defined. # standalone-provider-conf Tests the provider through a generated config # file. # This is done when there are no command line # arguments or when the environment variable # PROVIDER_NAME is defined. # standalone-provider-args Tests the provider through openssl command args. # This is done when there are no command line # arguments or when the environment variable # PROVIDER_NAME is defined. my @test_types = ( $ARGV[0] ? 'conf' : (), ( !$ARGV[0] || $ENV{ENGINE_NAME} ? ( 'standalone-engine-conf', 'standalone-engine-args' ) : () ), ( !$ARGV[0] || $ENV{PROVIDER_NAME} ? ( 'standalone-provider-conf', 'standalone-provider-args' ) : () ) ); plan(19 * scalar @test_types); # prepare data for my $F; open $F,">","testdata.dat"; print $F "12345670" x 128; close $F; open $F,">","testbig.dat"; print $F ("12345670" x 8 . "\n") x 4096; close $F; my $key='0123456789abcdef' x 2; note("\@ARGV = (", join(', ', @ARGV), ")"); my %configurations = ( 'conf' => { 'module-type' => $ARGV[0], }, 'standalone-engine-args' => { 'module-type' => 'engine', 'openssl-args' => "-engine $engine_name", }, 'standalone-provider-args' => { 'module-type' => 'provider', 'openssl-args' => "-provider $provider_name -provider default", }, 'standalone-engine-conf' => { 'module-type' => 'engine', 'openssl-conf' => < { 'module-type' => 'provider', 'openssl-conf' => < { mac_cmd => sub { my %opts = @_; my $cmd = "openssl dgst $opts{-args}" . " -mac $opts{-mac} -macopt key:$opts{-key}" . (defined $opts{-size} ? " -sigopt size:$opts{-size}" : "") . " $opts{-infile}"; return $cmd; }, check_expected => sub { my %opts = @_; return "$opts{-mac}($opts{-infile})= $opts{-result}\n"; }, }, provider => { mac_cmd => sub { my %opts = @_; my $cmd = "openssl mac $opts{-args} -macopt key:$opts{-key}" . (defined $opts{-size} ? " -macopt size:$opts{-size}" : "") . " -in $opts{-infile} $opts{-mac}"; return $cmd; }, check_expected => sub { my %opts = @_; return uc($opts{-result})."\n"; }, }, ); foreach my $test_type (@test_types) { my $configuration = $configurations{$test_type}; my $module_type = $configuration->{'module-type'}; my $module_args = $configuration->{'openssl-args'} // ''; my $module_conf = $configuration->{'openssl-conf'}; # This is a trick to make a locally modifiable environment variable and # retain it's current value as a default. local $ENV{OPENSSL_CONF} = $ENV{OPENSSL_CONF}; SKIP: { skip "No module type detected for test type '$test_type'", 19 unless $module_type; note("Running tests for test type $test_type"); if ($module_args) { $module_args = ' ' . $module_args; } if (defined $module_conf) { my $confname = "$test_type.cnf"; open my $F, '>', $confname; print $F $module_conf; close $F; $ENV{OPENSSL_CONF} = abs_path($confname); } # Reopen STDERR to eliminate extra output #open STDERR, ">>","tests.err"; my $mac_cmd = $executors{$module_type}->{mac_cmd}; my $mac_expected = $executors{$module_type}->{check_expected}; my $cmd; my $expected; $cmd = $mac_cmd->(-mac => 'gost-mac', -key => $key, -args => $module_args, -infile => 'testdata.dat'); $expected = $mac_expected->(-mac => 'GOST-MAC-gost-mac', -infile => 'testdata.dat', -result => '2ee8d13d'); unless (is(`$cmd`, $expected, "GOST MAC - default size")) { diag("Command was: $cmd"); } my $i; for ($i=1;$i<=8; $i++) { $cmd = $mac_cmd->(-mac => 'gost-mac', -key => $key, -size => $i, -args => $module_args, -infile => 'testdata.dat'); $expected = $mac_expected->(-mac => 'GOST-MAC-gost-mac', -infile => 'testdata.dat', -result => substr("2ee8d13dff7f037d",0,$i*2)); unless (is(`$cmd`, $expected, "GOST MAC - size $i bytes")) { diag("Command was: $cmd"); } } $cmd = $mac_cmd->(-mac => 'gost-mac', -key => $key, -args => $module_args, -infile => 'testbig.dat'); $expected = $mac_expected->(-mac => 'GOST-MAC-gost-mac', -infile => 'testbig.dat', -result => '5efab81f'); unless (is(`$cmd`, $expected, "GOST MAC - big data")) { diag("Command was: $cmd"); } $cmd = $mac_cmd->(-mac => 'gost-mac-12', -key => $key, -args => $module_args, -infile => 'testdata.dat'); $expected = $mac_expected->(-mac => 'GOST-MAC-12-gost-mac-12', -infile => 'testdata.dat', -result => 'be4453ec'); unless (is(`$cmd`, $expected, "GOST MAC parameters 2012 - default size")) { diag("Command was: $cmd"); } for ($i=1;$i<=8; $i++) { $cmd = $mac_cmd->(-mac => 'gost-mac-12', -key => $key, -size => $i, -args => $module_args, -infile => 'testdata.dat'); $expected = $mac_expected->(-mac => 'GOST-MAC-12-gost-mac-12', -infile => 'testdata.dat', -result => substr("be4453ec1ec327be",0,$i*2)); unless (is(`$cmd`, $expected, "GOST MAC parameters 2012 - size $i bytes")) { diag("Command was: $cmd"); } } } } unlink('testdata.dat'); unlink('testbig.dat'); libengine-gost-openssl-3.0.2/test/03-encrypt.t000066400000000000000000000223161446070765000211700ustar00rootroot00000000000000#!/usr/bin/perl use Test2::V0; use Cwd 'abs_path'; my $engine_name = $ENV{ENGINE_NAME} || 'gost'; my $provider_name = $ENV{PROVIDER_NAME} || 'gostprov'; # Supported test types: # # conf Only if there's a command line argument. # For this test type, we rely entirely on the # caller to define the environment variable # OPENSSL_CONF appropriately. # standalone-engine-conf Tests the engine through a generated config # file. # This is done when there are no command line # arguments or when the environment variable # ENGINE_NAME is defined. # standalone-engine-args Tests the engine through openssl command args. # This is done when there are no command line # arguments or when the environment variable # ENGINE_NAME is defined. # standalone-provider-conf Tests the provider through a generated config # file. # This is done when there are no command line # arguments or when the environment variable # PROVIDER_NAME is defined. # standalone-provider-args Tests the provider through openssl command args. # This is done when there are no command line # arguments or when the environment variable # PROVIDER_NAME is defined. my @test_types = ( $ARGV[0] ? 'conf' : (), ( !$ARGV[0] || $ENV{ENGINE_NAME} ? ( 'standalone-engine-conf', 'standalone-engine-args' ) : () ), ( !$ARGV[0] || $ENV{PROVIDER_NAME} ? ( 'standalone-provider-conf', 'standalone-provider-args' ) : () ) ); plan(48 * scalar @test_types); # prepare data for my $key='0123456789abcdef' x 2; my %configurations = ( 'standalone-engine-args' => { 'openssl-args' => "-engine $engine_name", }, 'standalone-provider-args' => { 'openssl-args' => "-provider $provider_name -provider default", }, 'standalone-engine-conf' => { 'openssl-conf' => < { 'openssl-conf' => <", "$result_name.clear"; print $f $p{-cleartext}; close $f; $ENV{'CRYPT_PARAMS'} = $p{-paramset} if exists $p{-paramset}; my $ccmd = "openssl enc${args} -e -$p{-alg} -K $p{-key} -iv $p{-iv} -in $result_name.clear"; my $ctext = `$ccmd`; unless (is($?,0,"$p{-name} - Trying to encrypt")) { diag("Command was: $ccmd"); } is(unpack("H*",$ctext),$p{-ciphertext},"$p{-name} - Checking that it encrypted correctly"); open $f, ">", "$result_name.enc"; print $f $ctext; close $f; my $ocmd = "openssl enc${args} -d -$p{-alg} -K $p{-key} -iv $p{-iv} -in $result_name.enc"; my $otext = `$ocmd`; unless(is($?,0,"$p{-name} - Trying to decrypt")) { diag("Command was: $ocmd"); } is($otext,$p{-cleartext},"$p{-name} - Checking that it decrypted correctly"); unlink "$result_name.enc"; unlink "$result_name.clear"; delete $ENV{'CRYPT_PARAMS'}; } foreach my $test_type (@test_types) { my $configuration = $configurations{$test_type}; my $module_args = $configuration->{'openssl-args'} // ''; my $module_conf = $configuration->{'openssl-conf'}; # This is a trick to make a locally modifiable environment variable and # retain it's current value as a default. local $ENV{OPENSSL_CONF} = $ENV{OPENSSL_CONF}; note("Running tests for test type $test_type"); if ($module_args) { $module_args = ' ' . $module_args; } if (defined $module_conf) { my $confname = "$test_type.cnf"; open my $F, '>', $confname; print $F $module_conf; close $F; $ENV{OPENSSL_CONF} = abs_path($confname); } # Reopen STDERR to eliminate extra output #open STDERR, ">>","tests.err"; my $count=0; # # parameters -paramset = oid of the parameters # -cleartext - data to encrypt # -ciphertext - expected ciphertext (hex-encoded) # -key - key (hex-encoded) # -iv - IV (hex-encoded) # $key = '0123456789ABCDEF' x 4; my $iv = '0000000000000000'; my $clear1 = "The quick brown fox jumps over the lazy dog\n"; my @common_args = ( -count => \$count, -args => $module_args, -key => $key, -iv => $iv, -cleartext => $clear1 ); crypt_test(-paramset => "1.2.643.2.2.31.1", -ciphertext => '07f4102c6185c4a09e676e269bfa4bc9c5df6575916b879bd13a893a2285ee6690107cdeef7a315d2eb54bfa', -alg => 'gost89', -name => 'CFB short text, paramset A', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.2", -ciphertext => '11465c1c9708033e784fbb5536f2719c38353cb488b01f195c20d4c027022e8300d98bb66c138afbe878c88b', -alg => 'gost89', -name => 'CFB short text, paramset B', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.3", -ciphertext => '2f213b390c9b6ceb18de479686d23f4f03c76644a0aab8894b50b71a3bbb3c027ec4c2d569ba0e6a873bd46e', -alg => 'gost89', -name => 'CFB short text, paramset C', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.4", -ciphertext => 'e835f59a7fdfd84764efe1e987660327f5d0de187afea72f9cd040983a5e5bbeb4fe1aa5ff85d623ebc4d435', -alg => 'gost89', -name => 'CFB short text, paramset D', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.1", -ciphertext => 'bcb821452e459f10f92019171e7c3b27b87f24b174306667f67704812c07b70b5e7420f74a9d54feb4897df8', -alg => 'gost89-cnt', -name => 'CNT short text', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.2", -ciphertext => 'bcb821452e459f10f92019171e7c3b27b87f24b174306667f67704812c07b70b5e7420f74a9d54feb4897df8', -alg => 'gost89-cnt', -name => 'CNT short text, paramset param doesnt affect cnt', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.1", -ciphertext => 'cf3f5f713b3d10abd0c6f7bafb6aaffe13dfc12ef5c844f84873aeaaf6eb443a9747c9311b86f97ba3cdb5c4', -alg => 'gost89-cnt-12', -name => 'CNT-12 short text', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.2", -ciphertext => 'cf3f5f713b3d10abd0c6f7bafb6aaffe13dfc12ef5c844f84873aeaaf6eb443a9747c9311b86f97ba3cdb5c4', -alg => 'gost89-cnt-12', -name => 'CNT-12 short text, paramset param doesnt affect cnt', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.1", -ciphertext => '3a3293e75089376572da44966cd1759c29d2f1e5e1c3fa9674909a63026da3dc51a4266bff37fb74a3a07155c9ca8fcf', -alg => 'gost89-cbc', -name => 'CBC short text, paramset A', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.2", -ciphertext => 'af2a2167b75852378af176ac9950e3c4bffc94d3d4355191707adbb16d6c8e3f3a07868c4702babef18393edfac60a6d', -alg => 'gost89-cbc', -name => 'CBC short text, paramset B', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.3", -ciphertext => '987c0fb3d84530467a1973791e0a25e33c5d14591976f8c1573bdb9d056eb7b353f66fef3ffe2e3524583b3997123c8a', -alg => 'gost89-cbc', -name => 'CBC short text, paramset C', @common_args); crypt_test(-paramset => "1.2.643.2.2.31.4", -ciphertext => 'e076b09822d4786a2863125d16594d765d8acd0f360e52df42e9d52c8e6c0e6595b5f6bbecb04a22c8ae5f4f87c1523b', -alg => 'gost89-cbc', -name => 'CBC short text, paramset D', @common_args); if (defined $module_conf) { unlink "$test_type.cnf"; } } libengine-gost-openssl-3.0.2/test/04-pkey.t000066400000000000000000000417611446070765000204620ustar00rootroot00000000000000#!/usr/bin/perl use Test2::V0; skip_all('TODO: add pkey support in provider') unless $ARGV[0] eq 'engine'; plan(2); use Cwd 'abs_path'; # # If this variable is set, engine would be loaded via configuration # file. Otherwise - via command line # my $use_config = 1; # prepare data for my $engine=$ENV{'ENGINE_NAME'}||"gost"; # Reopen STDERR to eliminate extra output open STDERR, ">>","tests.err"; my $F; my $eng_param; open $F,">","test.cnf"; if (defined($use_config) && $use_config) { $eng_param = ""; open $F,">","test.cnf"; print $F < sub { plan(15); my @keys=(['gost2001','A',"-----BEGIN PRIVATE KEY----- MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIgIgRhUDJ1WQASIf nx+aUM2eagzV9dCt6mQ5wdtenr2ZS/Y= -----END PRIVATE KEY----- ","Private key: 46150327559001221F9F1F9A50CD9E6A0CD5F5D0ADEA6439C1DB5E9EBD994BF6 ","Public key: X:789094AF6386A43AF191210FFED0AEA5D1D9750D8FF8BCD1B584BFAA966850E4 Y:25ED63EE42624403D08FC60E5F8130F121ECDC5E297D9E3C7B106C906E0855E9 Parameter set: id-GostR3410-2001-CryptoPro-A-ParamSet ","-----BEGIN PUBLIC KEY----- MGMwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEDQwAEQORQaJaqv4S10bz4 jw112dGlrtD+DyGR8TqkhmOvlJB46VUIbpBsEHs8nn0pXtzsIfEwgV8Oxo/QA0Ri Qu5j7SU= -----END PUBLIC KEY----- "], ['gost2001','B'=>'-----BEGIN PRIVATE KEY----- MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEIgIgImwnCcqcfuXK MVYg+UWQhiXYKz1yQ8kDSB7Ly515XH4= -----END PRIVATE KEY----- ','Private key: 226C2709CA9C7EE5CA315620F945908625D82B3D7243C903481ECBCB9D795C7E ','Public key: X:59C15439385CBE790274D6537D318A35B27413D265FFDC5FBE5354DF8C7AC591 Y:11B771AC016AA817542184D05F2C7DDD0F9A5A5C9F840A79B5B7A73658F3048A Parameter set: id-GostR3410-2001-CryptoPro-B-ParamSet ','-----BEGIN PUBLIC KEY----- MGMwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEDQwAEQJHFeozfVFO+X9z/ ZdITdLI1ijF9U9Z0Anm+XDg5VMFZigTzWDant7V5CoSfXFqaD919LF/QhCFUF6hq AaxxtxE= -----END PUBLIC KEY----- '], ['gost2001','C'=>'-----BEGIN PRIVATE KEY----- MEUCAQAwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEEIgIgKKUJVY2xlp24 mky1F9inWeq3mm0J/uza6HsDvspgSzY= -----END PRIVATE KEY----- ','Private key: 28A509558DB1969DB89A4CB517D8A759EAB79A6D09FEECDAE87B03BECA604B36 ','Public key: X:58154320380CCFD2A101D2B7844516984023CF5A38610C4F98220E017270B2D4 Y:14C6977A6E9C0412DF5B53E69CD48DAF2B5805F55F6ACBEB4E01BA7B2BF84FC8 Parameter set: id-GostR3410-2001-CryptoPro-C-ParamSet ','-----BEGIN PUBLIC KEY----- MGMwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEDQwAEQNSycHIBDiKYTwxh OFrPI0CYFkWEt9IBodLPDDggQxVYyE/4K3u6AU7ry2pf9QVYK6+N1JzmU1vfEgSc bnqXxhQ= -----END PUBLIC KEY----- '], ['gost2001','XA'=>,'-----BEGIN PRIVATE KEY----- MEUCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIgIgOFuMMveKUx/C BOSjl9XCepDCHWHv/1bcjdKexKGJkZw= -----END PRIVATE KEY----- ','Private key: 385B8C32F78A531FC204E4A397D5C27A90C21D61EFFF56DC8DD29EC4A189919C ','Public key: X:FA969CB29310E897978A1C9245107B46499D5C14A3975BF8E10EF5F613BE4EC6 Y:17FCFACCB0F838AE730E8B4021E880937824214DFF5365A61576AC5E72F92E35 Parameter set: id-GostR3410-2001-CryptoPro-XchA-ParamSet ','-----BEGIN PUBLIC KEY----- MGMwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEDQwAEQMZOvhP29Q7h+FuX oxRcnUlGexBFkhyKl5foEJOynJb6NS75cl6sdhWmZVP/TSEkeJOA6CFAiw5zrjj4 sMz6/Bc= -----END PUBLIC KEY----- '], ['gost2001','XB'=>,'-----BEGIN PRIVATE KEY----- MEUCAQAwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEEIgIgE7WWqiYWoKLs 7ezZ8L8Q9JcT73Jf5NYfFnlnoKRIQGg= -----END PRIVATE KEY----- ','Private key: 13B596AA2616A0A2ECEDECD9F0BF10F49713EF725FE4D61F167967A0A4484068 ','Public key: X:1D33A01774E501EFADD6C7A936728AF644749E98FEF5AE77A25E185955ED2E14 Y:FAD2D8101A99EDE8FBDF118B70A9894F4E6DE962B68D27E39B057624A51727 Parameter set: id-GostR3410-2001-CryptoPro-XchB-ParamSet ','-----BEGIN PUBLIC KEY----- MGMwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEDQwAEQBQu7VVZGF6id671 /piedET2inI2qcfWre8B5XQXoDMdJxelJHYFm+MnjbZi6W1OT4mpcIsR3/vo7Zka ENjS+gA= -----END PUBLIC KEY----- '] ); for my $keyinfo (@keys) { my ($alg,$paramset,$seckey,$sectext,$pubtext,$pubkey) = @$keyinfo; open $F,">",'tmp.pem'; print $F $seckey; close $F; #1. ĐŸŅ€ĐžŅ‡Đ¸Ņ‚Đ°Ņ‚ŅŒ ҁĐĩĐēŅ€ĐĩŅ‚ĐŊŅ‹Đš ĐēĐģŅŽŅ‡ и ĐŊаĐŋĐĩŅ‡Đ°Ņ‚Đ°Ņ‚ŅŒ ĐŋŅƒĐąĐģĐ¸Ņ‡ĐŊŅ‹Đš и ҁĐĩĐēŅ€ĐĩŅ‚ĐŊŅ‹Đš ĐēĐģŅŽŅ‡Đ¸ is(`openssl pkey -noout -text -in tmp.pem`,$sectext . $pubtext, "Print key pair $alg:$paramset"); #2. ĐŸŅ€ĐžŅ‡Đ¸Ņ‚Đ°Ņ‚ŅŒ ҁĐĩĐēŅ€ĐĩŅ‚ĐŊŅ‹Đš ĐēĐģŅŽŅ‡ и Đ˛Ņ‹Đ˛ĐĩŅŅ‚Đ¸ ĐŋŅƒĐąĐģĐ¸Ņ‡ĐŊŅ‹Đš (Đ˛ŅĐĩ аĐģĐŗĐžŅ€Đ¸Ņ‚ĐŧŅ‹) is(`openssl pkey -pubout -in tmp.pem`,$pubkey, "Compute public key $alg:$paramset"); open $F,">","tmp.pem"; print $F $pubkey; close $F; #3. ĐŸŅ€ĐžŅ‡Đ¸Ņ‚Đ°Ņ‚ŅŒ ĐŋŅƒĐąĐģĐ¸Ņ‡ĐŊŅ‹Đš и ĐŊаĐŋĐĩŅ‡Đ°Ņ‚ŅŒ ĐĩĐŗĐž в видĐĩ Ņ‚ĐĩĐēŅŅ‚Đ° is(`openssl pkey -pubin -noout -in tmp.pem -text_pub`,$pubtext, "Read and print public key $alg:$paramset"); } #unlink "tmp.pem"; }; #4. ĐĄĐŗĐĩĐŊĐĩŅ€Đ¸Ņ€ĐžĐ˛Đ°Ņ‚ŅŒ ĐēĐģŅŽŅ‡ два Ņ€Đ°ĐˇĐ° (Đ´ĐģŅ Đ˛ŅĐĩŅ… аĐģĐŗĐžŅ€Đ¸Ņ‚ĐžĐ˛ и ĐŋĐ°Ņ€Đ°ĐŧĐĩŅ‚Ņ€ĐžĐ˛). # ĐŸŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ Ņ‡Ņ‚Đž ĐŋĐžĐģŅƒŅ‡Đ¸ĐģĐ¸ŅŅŒ Ņ‡Đ¸ŅĐģа ҂ҀĐĩĐąŅƒĐĩĐŧОК Đ´ĐģиĐŊŅ‹ и ĐžĐŊи ĐŊĐĩ ŅĐžĐ˛ĐŋĐ°Đ´Đ°ŅŽŅ‚ #5. ĐŸŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ ŅŅ‚Đ°ĐģĐžĐŊĐŊŅƒŅŽ ĐŋОдĐŋĐ¸ŅŅŒ #6. Đ’Ņ‹Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ ĐŋОдĐŋĐ¸ŅŅŒ и ĐŋŅ€ĐžĐ˛ĐĩŅ€Đ¸Ņ‚ŅŒ ĐĩŅ‘ #7. Đ’Ņ‹Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ ĐŋОдĐŋĐ¸ŅŅŒ, ĐŋĐžĐŧĐĩĐŊŅŅ‚ŅŒ в ĐŊĐĩĐš ОдиĐŊ ĐąĐ¸Ņ‚ и ŅƒĐąĐĩĐ´Đ¸Ņ‚ŅŒŅŅ Ņ‡Ņ‚Đž ĐžĐŊа # ĐŋĐĩŅ€ĐĩŅŅ‚Đ°Đģа ĐŋŅ€ĐžĐ˛ĐĩŅ€ŅŅ‚ŅŒŅŅ # 8. Đ’Ņ‹Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ ĐŋОдĐŋĐ¸ŅŅŒ, ĐŋĐžĐŧĐĩĐŊŅŅ‚ŅŒ 1 ĐąĐ¸Ņ‚ в ĐŋОдĐŋĐ¸ŅŅ‹Đ˛Đ°ĐĩĐŧҋ҅ даĐŊĐŊҋ҅ и # ŅƒĐąĐĩĐ´Đ¸Ņ‚ŅŅŒŅ, Ņ‡Ņ‚Đž ĐŋОдĐŋĐ¸ŅŅŒ ĐŋĐĩŅ€ĐĩŅŅ‚Đ°Đģа ĐąŅ‹Ņ‚ŅŒ ĐēĐžŅ€Ņ€ĐĩĐēŅ‚ĐŊОК. # 9. Đ’Ņ‹Ņ€Đ°ĐąĐžŅ‚Đ°Ņ‚ŅŒ shared ĐēĐģŅŽŅ‡ ĐŋĐž vko # Generate a shared key by vko subtest 'derive' => sub { my %derives=( 'id-GostR3410-2001-TestParamSet'=> ['-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwAGByqFAwICHgEEIIOQ6j9mU+bDGvvpzF6ImLRUztRmxlftkGliGuICxnkT -----END PRIVATE KEY-----', 'e49ff6ce142a54da577de28c69140b8eaca21bbf97a3584b2a071b974ab62dd2', '-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwAGByqFAwICHgEEIA1EpaGE8PGO0erx6m4V+FYPbBSecBH8Fd4QUKvvfVdY -----END PRIVATE KEY-----', '13ff71a7787cf321d04e54fee29714008d81a1c972c871f374803ab96639d901', 'dc0e3c93b7c4e9186cf9d83ae23a8f080a7916e2d54a43e583e95795a486eaa6'], 'id-GostR3410-2001-CryptoPro-A-ParamSet'=> ['-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIABLD+ZfhzArC3nsOaCGkMZSPrMMbsATYnWq1udDphdu -----END PRIVATE KEY-----', '8f3aad4a05ecf47377eff12293c993e353bc218cfb0f9af0c407bcf044454950', '-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwEGByqFAwICHgEEIMu2SqK9cBcaJNkHSKBUt7i8rr2JqbHVTeC6jsg4ir3c -----END PRIVATE KEY-----', 'bcc1049e775dcaed60b00da185cd93dcc6fa705a14ed2add9f5af00d71e37f95', 'defbbd083692895d5c5c6a87e066b30964e5b527f56cf965a390096ba4bc9afb'], 'id-GostR3410-2001-CryptoPro-B-ParamSet'=> ['-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEIBTbapnHBIZDIjpvGGiwIP9qR4LrRjGHPlfa8w8GWWJ3 -----END PRIVATE KEY-----', 'c0306a860d36f0948dff7ae3b6b721a254f350f078a32062c5345365558e35e0', '-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwIGByqFAwICHgEEIC7D7cd3lNC00Q/yXLRtOhpPmBs71/twdNvDVXGnZdMP -----END PRIVATE KEY-----', 'f5cb24ceb3433fc580ffc8058336dc6254477fb24df178427423540db18dd1b5', '521cc034b603c21e26a3e47e38b56880bdd986089d14d6ffce4fbcad2d0f20bb'], 'id-GostR3410-2001-CryptoPro-C-ParamSet'=> ['-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEEIDUY0Tplswjvx42N9rmzUgl3owlFeCTJuuhixPsGFCUR -----END PRIVATE KEY-----', 'e882207141dc1a714002907d610ae5a7ba79a9c0c84bef13491038181f37d0f2', '-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICIwMGByqFAwICHgEEIGfgpqWECv1OpuZ3L4q4ZgpmGTS08NwPWgCIo61OalMg -----END PRIVATE KEY-----', '7f11fe4075a198c3afca5b4364afdc1cd45325cfa999a5b84fd510f90c3527c3', 'd61f1f55a1ad012884b969dbe2550f38f2356a029e5d8af07d50d10ca9812c58'], 'id-GostR3410-2001-CryptoPro-XchA-ParamSet'=> ['-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIJ9zd4rb9MMqu4HnAEkd9+IrwUNSjUje4ljQVY4THYjC -----END PRIVATE KEY-----', '947ba3299cdb129386808638514bc4a21262123cd7e47ade7579e51439c70dac', '-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIGwx1zcUdvsAyOr0jF+JR15DPN0hSTvy7f9ybA5OyiKN -----END PRIVATE KEY-----', '2cb9078a00f955aaa398d10c021dae9e954573c5d9f4d3190c4bce887731ea11', 'f4fb7e0f533a59cc40f17131f620be821e528f9cec2915b9f813159dc0e3a29e'], 'id-GostR3410-2001-CryptoPro-XchB-ParamSet'=> ['-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEEIIqSv5Q/By1VtTk1U+1+A1WMMQ25Q2Ml5hkAmYlUBqxi -----END PRIVATE KEY-----', '44f89a85bbf256836f77e765f6ee0222d8ffd1f8f85e5197b06931178aa081ca', '-----BEGIN PRIVATE KEY----- MEMCAQAwHAYGKoUDAgITMBIGByqFAwICJAEGByqFAwICHgEEIO+jfUUFM0d2WPxQF8gY4KcqCJk02tca3aYovZh1eowt -----END PRIVATE KEY-----', 'be866445486068067f0e479b83dde1b1b9a07fc8bc8fa5f5c60d15a39e3f3562', 'e8d30d98363b8b889464f4664c6a0403723484923e2db89039603c7ae294c504'], 'id-tc26-gost-3410-2012-256-paramSetA'=> ['-----BEGIN PRIVATE KEY----- MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEBBCD5+u2ebYwQ9iDYWHmif4XeGgj2OijJuq4YsbTNoH3+Bw== -----END PRIVATE KEY-----', 'a04b252bedc05f69fc92d8e985b52f0f984bccf3ef9f980ac7aca85f5ef11987', '-----BEGIN PRIVATE KEY----- MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEBBCDVwXdvq1zdBBmzVjG1WOBQR/dkwCzF6KSIiVkfQVCsKg== -----END PRIVATE KEY-----', 'c019d8939e12740a328625cea86efa3b39170412772b3c110536410bdd58a854', 'e9f7c57547fa0cd3c9942c62f9c74a553626d5f9810975a476825cd6f22a4e86', '-----BEGIN PUBLIC KEY----- MF4wFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEBA0MABEB3WS+MEcXnrMCdavPRgF28U5PDlV1atDh1ADUFxoB/f80OjqQ0T7cGQtk/2nWCGDX7uUrBGA8dql8Bnw9Sgn5+ -----END PUBLIC KEY-----'], 'id-tc26-gost-3410-2012-256-paramSetB'=> ['-----BEGIN PRIVATE KEY----- MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQECBCDQ6G51VK2+96rvFyG/dRqWOFNJA33jQajAnzra585aIA== -----END PRIVATE KEY-----', 'a13a84314a8d571b5218ca26194fe2f38b5f43eb3ac94203c448f9940df2fdb2', '-----BEGIN PRIVATE KEY----- MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQECBCCvvOUfoyljV0zfUrfEj1nOgBbelamj+eXgl0qxDJjDDA== -----END PRIVATE KEY-----', '6f7c5716c08fca79725beb4afaf2a48fd2fa547536d267f2b869b6ced5fddfa4', 'c9b2ad43f1aa70185f94dbc207ab4a147002f8aac5cf2fcec9d771a36f5f7a91'], 'id-tc26-gost-3410-2012-256-paramSetC'=> ['-----BEGIN PRIVATE KEY----- MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEDBCDq9XGURfLDPrDiMNPUcunrvUwI46FBO2EU+ok8a1DANw== -----END PRIVATE KEY-----', 'c352cf32ce4fd12a294ac62f3e44808cc7b21178093ba454b447a9ab4395d9be', '-----BEGIN PRIVATE KEY----- MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEDBCAWm69+rfnGTDZ24MR29IcjMsuPhjBQT6zxPvUYQBrGLg== -----END PRIVATE KEY-----', '27e3afdcb9f191b0465ae7d28245cee6ca44d537a7c67d938933cf2012ec71a6', '43c9f321b3659ee5108f0bcd5527f403d445f486c9e492768f46a82359ee0385'], 'id-tc26-gost-3410-2012-256-paramSetD'=> ['-----BEGIN PRIVATE KEY----- MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEEBCBnmzl1MutYiAXBmZa3GW5sK6Kznpt6V5i+xAl36RDhXQ== -----END PRIVATE KEY-----', 'ebfb18e801fe2d41462c52571b1805e34993910b29f75a7a5517d3190b5d9d1d', '-----BEGIN PRIVATE KEY----- MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEEBCBpp7anU1gMcaK/BzAQzAbUHXW2kuh6h9t67i67eIfAgQ== -----END PRIVATE KEY-----', '902a174ace21dc8ecf94e6a7e84cde115f902484e2c37d1d2652b1ef0a402dfc', '3af2a69e68cd444acc269e75edb90dfe01b8f3d9f97fe7c8b36841df9a2771a1'], 'id-tc26-gost-3410-2012-512-paramSetA'=> ['-----BEGIN PRIVATE KEY----- MGgCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRAVbz5k/8Zj8XbTEtlv9bK9i8FaIbm+NN9kCp2wCbiaw6AXvdBiQlMj7hSGv7AdW928VRszq9Elwc63VQcYzdnkw== -----END PRIVATE KEY-----', '8bb6886e74a3d04ec0cbbe799f2494fd577f3bd9b8c06d7ec4cfa7c597d2d0ae', '-----BEGIN PRIVATE KEY----- MGgCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQIBBggqhQMHAQECAwRASeoodGB639ETkSEfOLTFkTozKEpMVAlFPgvK6fOlD9u1/ITUXBoERea2R+HG3YNi81wTMqT0Njq9WnbQvgIx6g== -----END PRIVATE KEY-----', 'e88ba18821e6a86787cb225ea9b731821efb9e07bdcfb7b0b8f78c70d4e88c2b', '4d032ae84928991a48d83fc462da4d21173d8e832a3b30df71a6974f66e377a8'], 'id-tc26-gost-3410-2012-512-paramSetB'=> ['-----BEGIN PRIVATE KEY----- MGgCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQICBggqhQMHAQECAwRAvQKu1fl21NUXvdWlYtRs3Bs4ZW9vQlV1rf1D1rfRUdxjuC2A3xdD9RoUupzK6EeNFkhTMbZ+euQTXwPFN6ykbA== -----END PRIVATE KEY-----', '6c9f8cb350dcea5e673fe29950d9e5a041b005ca81d1236d19ba658dcbfdce01', '-----BEGIN PRIVATE KEY----- MGgCAQAwIQYIKoUDBwEBAQIwFQYJKoUDBwECAQICBggqhQMHAQECAwRA+I8I9E0Fz0cKG21QHn7VluHB9j348leFmeXLfGUS+jLqllemtCObR7KLW3bkzH+EiqXbLNMm+JLsmeGv4/nvYQ== -----END PRIVATE KEY-----', 'f7071ed951ac98570a5f9d299bf5a61d3dcb8082e8733b1571164ce6b54b2d8f', 'f37881bf843ecee4f0935c4f7653d4cb48b8db6a50394f89792dad899765d7d9'], 'id-tc26-gost-3410-2012-512-paramSetC'=> ['-----BEGIN PRIVATE KEY----- MF4CAQAwFwYIKoUDBwEBAQIwCwYJKoUDBwECAQIDBEA79FKW7MqF4pQJJvpAhKd9YkwsFXBzcaUhYt3N1KuJV6n5aJ4+kaJfuT3YbhtwWWzNIsIdXUZRaBEGO2cEwysa -----END PRIVATE KEY-----', 'fa92c3898642b419b320b15a8285d6d01ae3a22cadc791b9ba52d12919e7008d', '-----BEGIN PRIVATE KEY----- MF4CAQAwFwYIKoUDBwEBAQIwCwYJKoUDBwECAQIDBEAiCNNQAMnur4EG8eSDpr5WjJaoHquSsK3wydCrGM3Cdbaa0kiuj5m0Mx16Vow7AwvG2DvlKJL8HgwuBqWlDaYa -----END PRIVATE KEY-----', '6e1db0da8832660fbf761119e41d356a1599686a157c9a598b8e18b56cb09791', '2df0dfa8d437689d41fad965f13ea28ce27c29dd84514b376ea6ad9f0c7e3ece', '-----BEGIN PUBLIC KEY----- MIGgMBcGCCqFAwcBAQECMAsGCSqFAwcBAgECAwOBhAAEgYCPdAER26Ym73DSUXBamTLJcntdV3oZ7RRx/+Ijf13GnF36o36i8tEC13uJqOOmujEkAGPtui6yE4iJNVU0uM6yHmIEM5H0c81Sd/VQD8yXW1hyGAZvTMc+U/6oa30YU9YY7+t759d1CIVznPmq9C+VbAApyDCMFjuYnKD/nChsGA== -----END PUBLIC KEY-----'], 'id-tc26-gost-3410-2012-256-paramSetA-rangetest'=> ['-----BEGIN PRIVATE KEY----- MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEBBCD5+u2ebYwQ9iDYWHmif4XeGgj2OijJuq4YsbTNoH3+Bw== -----END PRIVATE KEY-----', 'a04b252bedc05f69fc92d8e985b52f0f984bccf3ef9f980ac7aca85f5ef11987', '-----BEGIN PRIVATE KEY----- MD4CAQAwFwYIKoUDBwEBAQEwCwYJKoUDBwECAQEBBCBmDDZsVa8VwTVme8jfzdgPAAAAAAAAAAAAAAAAAAAAQA== -----END PRIVATE KEY-----', '29132b8efb7b21a15133e51c70599031ea813cca86edb0985e86f331493b3d73', '7206480037eb130595c0ed350046af8c96b0fc5bfb4030be65dbf3e207a25de2'], 'id-tc26-gost-3410-2012-512-paramSetC-rangetest'=> ['-----BEGIN PRIVATE KEY----- MF4CAQAwFwYIKoUDBwEBAQIwCwYJKoUDBwECAQIDBEA79FKW7MqF4pQJJvpAhKd9YkwsFXBzcaUhYt3N1KuJV6n5aJ4+kaJfuT3YbhtwWWzNIsIdXUZRaBEGO2cEwysa -----END PRIVATE KEY-----', 'fa92c3898642b419b320b15a8285d6d01ae3a22cadc791b9ba52d12919e7008d', '-----BEGIN PRIVATE KEY----- MF4CAQAwFwYIKoUDBwEBAQIwCwYJKoUDBwECAQIDBEDsI/BH7zxilCahaafnqe3ILFBHUf+pM0wAqwZlpNuMyf////////////////////////////////////////8/ -----END PRIVATE KEY-----', 'fbcd6e72572335d291be497b7bfb264138ab7b2ecca00bc7a9fd90ad7557c0cc', '8e5b7bd8b3680d3dc33627c5bed85fdeb4e1ba67307714eb260412ddbb4bb87e'] ); plan(64); while(my($id, $v) = each %derives) { my ($alice,$alicehash,$bob,$bobhash,$secrethash,$malice) = @$v; # Alice: keygen open $F,">",'alice.prv'; print $F $alice; close $F; system("openssl pkey -in alice.prv -out alice.pub.der -pubout -outform DER"); like(`openssl dgst -sha256 -r alice.pub.der`, qr/^$alicehash/, "Compute public key:$id:Alice"); # Bob: keygen open $F,">",'bob.prv'; print $F $bob; close $F; system("openssl pkey -in bob.prv -out bob.pub.der -pubout -outform DER"); like(`openssl dgst -sha256 -r bob.pub.der`, qr/^$bobhash/, "Compute public key:$id:Bob"); # Alice: derive system("openssl pkeyutl -derive -inkey alice.prv -keyform PEM -peerkey bob.pub.der -peerform DER -pkeyopt ukmhex:0100000000000000 -out secret_a.bin"); like(`openssl dgst -sha256 -r secret_a.bin`, qr/^$secrethash/, "Compute shared key:$id:Alice:Bob"); # Bob: derive system("openssl pkeyutl -derive -inkey bob.prv -keyform PEM -peerkey alice.pub.der -peerform DER -pkeyopt ukmhex:0100000000000000 -out secret_b.bin"); like(`openssl dgst -sha256 -r secret_b.bin`, qr/^$secrethash/, "Compute shared key:$id:Bob:Alice"); if (defined $malice && $malice ne "") { # Malice: negative test -- this PEM is in the small subgroup open $F,">",'malice.pub'; print $F $malice; close $F; # NB system should return true on failure, so this is a negative test ok(system("openssl pkeyutl -derive -inkey alice.prv -keyform PEM -peerkey malice.pub -peerform PEM -pkeyopt ukmhex:0100000000000000 -out secret_m.bin"), "Compute shared key:$id:Alice:Malice"); ok(system("openssl pkeyutl -derive -inkey bob.prv -keyform PEM -peerkey malice.pub -peerform PEM -pkeyopt ukmhex:0100000000000000 -out secret_m.bin"), "Compute shared key:$id:Bob:Malice"); } } unlink "alice.prv"; unlink "alice.pub.der"; unlink "bob.prv"; unlink "bob.pub.der"; unlink "secret_a.bin"; unlink "secret_b.bin"; unlink "malice.pub"; unlink "secret_m.bin"; }; # 10. Đ Đ°ĐˇĐžĐąŅ€Đ°Ņ‚ŅŒ ŅŅ‚Đ°ĐŊĐ´Đ°Ņ€Ņ‚Ņ‹Đš encrypted key # 11. ĐĄĐŗĐĩĐŊĐĩŅ€Đ¸Ņ€Đ˛ĐžĐ°Ņ‚ŅŒ encrypted key и ĐĩĐŗĐž Ņ€Đ°ĐˇĐžĐąŅ€Đ°Ņ‚ŅŒ. unlink "test.cnf"; libengine-gost-openssl-3.0.2/test/Makefile.am000066400000000000000000000000511446070765000211230ustar00rootroot00000000000000PERL=@PERL@ test: $(PERL) ./run_tests libengine-gost-openssl-3.0.2/test/WrapOpenSSL.pm000066400000000000000000000037221446070765000215520ustar00rootroot00000000000000#! /usr/bin/env perl # # CC0 license applied, see LICENSE.md package WrapOpenSSL; use strict; use warnings; use File::Basename; use File::Spec::Functions; sub load { my ($class, $p) = @_; my $app = $p->{app_prove}; # turn on verbosity my $verbose = $ENV{CTEST_INTERACTIVE_DEBUG_MODE} || $app->verbose(); $app->verbose( $verbose ); my $openssl_libdir = dirname($ENV{OPENSSL_CRYPTO_LIBRARY}) if $ENV{OPENSSL_CRYPTO_LIBRARY}; my $openssl_bindir = dirname($ENV{OPENSSL_PROGRAM}) if $ENV{OPENSSL_PROGRAM}; my $openssl_rootdir = $ENV{OPENSSL_ROOT_DIR}; my $openssl_rootdir_is_buildtree = $openssl_rootdir && -d catdir($openssl_rootdir, 'configdata.pm'); unless ($openssl_libdir) { $openssl_libdir = $openssl_rootdir_is_buildtree ? $openssl_rootdir : catdir($openssl_rootdir, 'lib'); } unless ($openssl_bindir) { $openssl_bindir = $openssl_rootdir_is_buildtree ? catdir($openssl_rootdir, 'apps') : catdir($openssl_rootdir, 'bin'); } if ($openssl_libdir) { # Variants of library paths $ENV{$_} = join(':', $openssl_libdir, $ENV{$_} // ()) foreach ( 'LD_LIBRARY_PATH', # Linux, ELF HP-UX 'DYLD_LIBRARY_PATH', # MacOS X 'LIBPATH', # AIX, OS/2 ); if ($verbose) { print STDERR "Added $openssl_libdir to:\n"; print STDERR " LD_LIBRARY_PATH, DYLD_LIBRARY_PATH, LIBPATH\n"; } } if ($openssl_bindir) { # Binary path, works the same everywhere $ENV{PATH} = join(':', $openssl_bindir, $ENV{PATH}); if ($verbose) { print STDERR "Added $openssl_bindir to:\n"; print STDERR " PATH\n"; } } if ($verbose) { print STDERR "$_=", $ENV{$_} // '', "\n" foreach qw(LD_LIBRARY_PATH DYLD_LIBRARY_PATH LIBPATH PATH); } } 1; libengine-gost-openssl-3.0.2/test/engine.cnf000066400000000000000000000001731446070765000210310ustar00rootroot00000000000000openssl_conf = openssl_def [openssl_def] engines = engines [engines] gost = gost_conf [gost_conf] default_algorithms = ALL libengine-gost-openssl-3.0.2/test/provider.cnf000066400000000000000000000002311446070765000214110ustar00rootroot00000000000000openssl_conf = openssl_def [openssl_def] providers = providers [providers] gostprov = provider_conf default = provider_conf [provider_conf] activate = 1 libengine-gost-openssl-3.0.2/test_ciphers.c000066400000000000000000000463351446070765000207670ustar00rootroot00000000000000/* * Copyright (C) 2018,2020 Vitaly Chikunov . All Rights Reserved. * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif #include #include #include #include #include #include #include #if defined _MSC_VER # include # define alloca _alloca #elif defined __linux__ # include #endif #include #define T(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ OpenSSLDie(__FILE__, __LINE__, #e); \ } #define cRED "\033[1;31m" #define cDRED "\033[0;31m" #define cGREEN "\033[1;32m" #define cDGREEN "\033[0;32m" #define cBLUE "\033[1;34m" #define cMAGENT "\033[1;35m" #define cDBLUE "\033[0;34m" #define cNORM "\033[m" #define TEST_ASSERT(e) {if ((test = (e))) \ printf(cRED "Test FAILED" cNORM "\n"); \ else \ printf(cGREEN "Test passed" cNORM "\n");} #ifdef __GNUC__ /* Pragma to allow commenting out some tests. */ # pragma GCC diagnostic ignored "-Wunused-const-variable" #endif /* * Test keys from both GOST R 34.12-2015 and GOST R 34.13-2015, * for 128-bit cipher (A.1). */ static const unsigned char K[32] = { 0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff,0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77, 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef, }; /* * Key for 64-bit cipher (A.2). */ static const unsigned char Km[32] = { 0xff,0xee,0xdd,0xcc,0xbb,0xaa,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00, 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff, }; /* * Plaintext from GOST R 34.13-2015 A.1. * First 16 bytes is vector (a) from GOST R 34.12-2015 A.1. */ static const unsigned char P[] = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x00,0xff,0xee,0xdd,0xcc,0xbb,0xaa,0x99,0x88, 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xee,0xff,0x0a, 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xee,0xff,0x0a,0x00, 0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xee,0xff,0x0a,0x00,0x11, }; /* Plaintext for 64-bit cipher (A.2) */ static const unsigned char Pm[] = { 0x92,0xde,0xf0,0x6b,0x3c,0x13,0x0a,0x59,0xdb,0x54,0xc7,0x04,0xf8,0x18,0x9d,0x20, 0x4a,0x98,0xfb,0x2e,0x67,0xa8,0x02,0x4c,0x89,0x12,0x40,0x9b,0x17,0xb5,0x7e,0x41, }; /* Extended plaintext from tc26 acpkm Kuznyechik test vector */ static const unsigned char P_acpkm[] = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x00,0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88, 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xEE,0xFF,0x0A, 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xEE,0xFF,0x0A,0x00, 0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xEE,0xFF,0x0A,0x00,0x11, 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xEE,0xFF,0x0A,0x00,0x11,0x22, 0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xEE,0xFF,0x0A,0x00,0x11,0x22,0x33, 0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xEE,0xFF,0x0A,0x00,0x11,0x22,0x33,0x44, }; static const unsigned char E_ecb[] = { /* ECB test vectors from GOST R 34.13-2015 A.1.1 */ /* first 16 bytes is vector (b) from GOST R 34.12-2015 A.1 */ 0x7f,0x67,0x9d,0x90,0xbe,0xbc,0x24,0x30,0x5a,0x46,0x8d,0x42,0xb9,0xd4,0xed,0xcd, 0xb4,0x29,0x91,0x2c,0x6e,0x00,0x32,0xf9,0x28,0x54,0x52,0xd7,0x67,0x18,0xd0,0x8b, 0xf0,0xca,0x33,0x54,0x9d,0x24,0x7c,0xee,0xf3,0xf5,0xa5,0x31,0x3b,0xd4,0xb1,0x57, 0xd0,0xb0,0x9c,0xcd,0xe8,0x30,0xb9,0xeb,0x3a,0x02,0xc4,0xc5,0xaa,0x8a,0xda,0x98, }; static const unsigned char E_ctr[] = { /* CTR test vectors from GOST R 34.13-2015 A.1.2 */ 0xf1,0x95,0xd8,0xbe,0xc1,0x0e,0xd1,0xdb,0xd5,0x7b,0x5f,0xa2,0x40,0xbd,0xa1,0xb8, 0x85,0xee,0xe7,0x33,0xf6,0xa1,0x3e,0x5d,0xf3,0x3c,0xe4,0xb3,0x3c,0x45,0xde,0xe4, 0xa5,0xea,0xe8,0x8b,0xe6,0x35,0x6e,0xd3,0xd5,0xe8,0x77,0xf1,0x35,0x64,0xa3,0xa5, 0xcb,0x91,0xfa,0xb1,0xf2,0x0c,0xba,0xb6,0xd1,0xc6,0xd1,0x58,0x20,0xbd,0xba,0x73, }; static const unsigned char Em_ctr[] = { /* CTR test vectors from GOST R 34.13-2015 A.2.2 */ 0x4e,0x98,0x11,0x0c,0x97,0xb7,0xb9,0x3c,0x3e,0x25,0x0d,0x93,0xd6,0xe8,0x5d,0x69, 0x13,0x6d,0x86,0x88,0x07,0xb2,0xdb,0xef,0x56,0x8e,0xb6,0x80,0xab,0x52,0xa1,0x2d, }; static const unsigned char E_acpkm[] = { 0xF1,0x95,0xD8,0xBE,0xC1,0x0E,0xD1,0xDB,0xD5,0x7B,0x5F,0xA2,0x40,0xBD,0xA1,0xB8, 0x85,0xEE,0xE7,0x33,0xF6,0xA1,0x3E,0x5D,0xF3,0x3C,0xE4,0xB3,0x3C,0x45,0xDE,0xE4, 0x4B,0xCE,0xEB,0x8F,0x64,0x6F,0x4C,0x55,0x00,0x17,0x06,0x27,0x5E,0x85,0xE8,0x00, 0x58,0x7C,0x4D,0xF5,0x68,0xD0,0x94,0x39,0x3E,0x48,0x34,0xAF,0xD0,0x80,0x50,0x46, 0xCF,0x30,0xF5,0x76,0x86,0xAE,0xEC,0xE1,0x1C,0xFC,0x6C,0x31,0x6B,0x8A,0x89,0x6E, 0xDF,0xFD,0x07,0xEC,0x81,0x36,0x36,0x46,0x0C,0x4F,0x3B,0x74,0x34,0x23,0x16,0x3E, 0x64,0x09,0xA9,0xC2,0x82,0xFA,0xC8,0xD4,0x69,0xD2,0x21,0xE7,0xFB,0xD6,0xDE,0x5D, }; /* Test vector from R 23565.1.017-2018 A.4.2. * Key material from ACPKM-Master(K,768,3) for OMAC-ACPKM. */ static const unsigned char E_acpkm_master[] = { 0x0C,0xAB,0xF1,0xF2,0xEF,0xBC,0x4A,0xC1,0x60,0x48,0xDF,0x1A,0x24,0xC6,0x05,0xB2, 0xC0,0xD1,0x67,0x3D,0x75,0x86,0xA8,0xEC,0x0D,0xD4,0x2C,0x45,0xA4,0xF9,0x5B,0xAE, 0x0F,0x2E,0x26,0x17,0xE4,0x71,0x48,0x68,0x0F,0xC3,0xE6,0x17,0x8D,0xF2,0xC1,0x37, 0xC9,0xDD,0xA8,0x9C,0xFF,0xA4,0x91,0xFE,0xAD,0xD9,0xB3,0xEA,0xB7,0x03,0xBB,0x31, 0xBC,0x7E,0x92,0x7F,0x04,0x94,0x72,0x9F,0x51,0xB4,0x9D,0x3D,0xF9,0xC9,0x46,0x08, 0x00,0xFB,0xBC,0xF5,0xED,0xEE,0x61,0x0E,0xA0,0x2F,0x01,0x09,0x3C,0x7B,0xC7,0x42, 0xD7,0xD6,0x27,0x15,0x01,0xB1,0x77,0x77,0x52,0x63,0xC2,0xA3,0x49,0x5A,0x83,0x18, 0xA8,0x1C,0x79,0xA0,0x4F,0x29,0x66,0x0E,0xA3,0xFD,0xA8,0x74,0xC6,0x30,0x79,0x9E, 0x14,0x2C,0x57,0x79,0x14,0xFE,0xA9,0x0D,0x3B,0xC2,0x50,0x2E,0x83,0x36,0x85,0xD9, }; static const unsigned char P_acpkm_master[sizeof(E_acpkm_master)] = { 0 }; /* * Other modes (ofb, cbc, cfb) is impossible to test to match GOST R * 34.13-2015 test vectors exactly, due to these vectors having exceeding * IV length value (m) = 256 bits, while openssl have hard-coded limit * of maximum IV length of 128 bits (EVP_MAX_IV_LENGTH). * Also, current grasshopper code having fixed IV length of 128 bits. * * Thus, new test vectors are generated with truncated 128-bit IV using * canonical GOST implementation from TC26. */ static const unsigned char E_ofb[] = { /* OFB test vector generated from canonical implementation */ 0x81,0x80,0x0a,0x59,0xb1,0x84,0x2b,0x24,0xff,0x1f,0x79,0x5e,0x89,0x7a,0xbd,0x95, 0x77,0x91,0x46,0xdb,0x2d,0x93,0xa9,0x4e,0xd9,0x3c,0xf6,0x8b,0x32,0x39,0x7f,0x19, 0xe9,0x3c,0x9e,0x57,0x44,0x1d,0x87,0x05,0x45,0xf2,0x40,0x36,0xa5,0x8c,0xee,0xa3, 0xcf,0x3f,0x00,0x61,0xd5,0x64,0x23,0x54,0x5b,0x96,0x0d,0x86,0x4c,0xc8,0x68,0xda, }; static const unsigned char E_cbc[] = { /* CBC test vector generated from canonical implementation */ 0x68,0x99,0x72,0xd4,0xa0,0x85,0xfa,0x4d,0x90,0xe5,0x2e,0x3d,0x6d,0x7d,0xcc,0x27, 0xab,0xf1,0x70,0xb2,0xb2,0x26,0xc3,0x01,0x0c,0xcf,0xa1,0x36,0xd6,0x59,0xcd,0xaa, 0xca,0x71,0x92,0x72,0xab,0x1d,0x43,0x8e,0x15,0x50,0x7d,0x52,0x1e,0xcd,0x55,0x22, 0xe0,0x11,0x08,0xff,0x8d,0x9d,0x3a,0x6d,0x8c,0xa2,0xa5,0x33,0xfa,0x61,0x4e,0x71, }; static const unsigned char E_cfb[] = { /* CFB test vector generated from canonical implementation */ 0x81,0x80,0x0a,0x59,0xb1,0x84,0x2b,0x24,0xff,0x1f,0x79,0x5e,0x89,0x7a,0xbd,0x95, 0x68,0xc1,0xb9,0x9c,0x4d,0xf5,0x9c,0xc7,0x95,0x1e,0x37,0x39,0xb5,0xb3,0xcd,0xbf, 0x07,0x3f,0x4d,0xd2,0xd6,0xde,0xb3,0xcf,0xb0,0x26,0x54,0x5f,0x7a,0xf1,0xd8,0xe8, 0xe1,0xc8,0x52,0xe9,0xa8,0x56,0x71,0x62,0xdb,0xb5,0xda,0x7f,0x66,0xde,0xa9,0x26, }; static const unsigned char Em_cbc[] = { /* 28147-89 CBC test vector generated from canonical implementation */ 0x96,0xd1,0xb0,0x5e,0xea,0x68,0x39,0x19,0xf3,0x96,0xb7,0x8c,0x1d,0x47,0xbb,0x61, 0x61,0x83,0xe2,0xcc,0xa9,0x76,0xa4,0xba,0xbe,0x9c,0xe8,0x7d,0x6f,0xa7,0x3c,0xf2, }; /* IV is half CNT size. */ static const unsigned char iv_ctr[] = { 0x12,0x34,0x56,0x78,0x90,0xab,0xce,0xf0 }; /* Third of IV from GOST R 34.13-2015 А.2.4 (Impossible to use full 192-bit IV.) */ static const unsigned char iv_cbc[] = { 0x12,0x34,0x56,0x78,0x90,0xab,0xcd,0xef }; /* Truncated to 128-bits IV from GOST examples. */ static const unsigned char iv_128bit[] = { 0x12,0x34,0x56,0x78,0x90,0xab,0xce,0xf0, 0xa1,0xb2,0xc3,0xd4,0xe5,0xf0,0x01,0x12 }; /* Universal IV for ACPKM-Master. */ static const unsigned char iv_acpkm_m[] = { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }; static struct testcase { const char *algname; int block; /* Actual underlying block size (bytes). */ int stream; /* Stream cipher. */ const unsigned char *plaintext; const unsigned char *key; const unsigned char *expected; size_t size; const unsigned char *iv; size_t iv_size; int acpkm; } testcases[] = { { .algname = SN_grasshopper_ecb, .block = 16, .plaintext = P, .key = K, .expected = E_ecb, .size = sizeof(P), }, { .algname = SN_grasshopper_ctr, .block = 16, .stream = 1, .plaintext = P, .key = K, .expected = E_ctr, .size = sizeof(P), .iv = iv_ctr, .iv_size = sizeof(iv_ctr), }, { .algname = SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm, .block = 16, .stream = 1, .plaintext = P, .key = K, .expected = E_ctr, .size = sizeof(P), .iv = iv_ctr, .iv_size = sizeof(iv_ctr), /* no acpkm works same as ctr */ }, { .algname = SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm, .block = 16, .stream = 1, .plaintext = P_acpkm, .key = K, .expected = E_acpkm, .size = sizeof(P_acpkm), .iv = iv_ctr, .iv_size = sizeof(iv_ctr), .acpkm = 256 / 8, }, { .algname = SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm, .block = 16, .plaintext = P_acpkm_master, .key = K, .expected = E_acpkm_master, .size = sizeof(P_acpkm_master), .iv = iv_acpkm_m, .iv_size = sizeof(iv_acpkm_m), .acpkm = 768 / 8 }, { .algname = SN_grasshopper_ofb, .block = 16, .stream = 1, .plaintext = P, .key = K, .expected = E_ofb, .size = sizeof(P), .iv = iv_128bit, .iv_size = sizeof(iv_128bit), }, { .algname = SN_grasshopper_cbc, .block = 16, .plaintext = P, .key = K, .expected = E_cbc, .size = sizeof(P), .iv = iv_128bit, .iv_size = sizeof(iv_128bit), }, { .algname = SN_grasshopper_cfb, .block = 16, .plaintext = P, .key = K, .expected = E_cfb, .size = sizeof(P), .iv = iv_128bit, .iv_size = sizeof(iv_128bit), }, { .algname = SN_magma_ctr, .block = 8, .plaintext = Pm, .key = Km, .expected = Em_ctr, .size = sizeof(Pm), .iv = iv_ctr, .iv_size = sizeof(iv_ctr) / 2, }, { .algname = SN_magma_cbc, .block = 8, .plaintext = Pm, .key = Km, .expected = Em_cbc, .size = sizeof(Pm), .iv = iv_cbc, .iv_size = sizeof(iv_cbc), }, { 0 } }; static void hexdump(const void *ptr, size_t len) { const unsigned char *p = ptr; size_t i, j; for (i = 0; i < len; i += j) { for (j = 0; j < 16 && i + j < len; j++) printf("%s%02x", j? "" : " ", p[i + j]); } printf("\n"); } static int test_block(const EVP_CIPHER *type, const char *name, int block_size, const unsigned char *pt, const unsigned char *key, const unsigned char *exp, const size_t size, const unsigned char *iv, size_t iv_size, int acpkm, int inplace) { EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); const char *standard = acpkm? "R 23565.1.017-2018" : "GOST R 34.13-2015"; unsigned char *c = alloca(size); int outlen, tmplen; int ret = 0, test; OPENSSL_assert(ctx); printf("Encryption test from %s [%s] %s: ", standard, name, inplace ? "in-place" : "out-of-place"); T(EVP_CIPHER_iv_length(type) == iv_size); if (EVP_CIPHER_block_size(type) == 1) { /* Cannot test block size, but can report it's stream cipher. */ printf("stream: "); } else T(EVP_CIPHER_block_size(type) == block_size); /* test with single big chunk */ EVP_CIPHER_CTX_init(ctx); T(EVP_CipherInit_ex(ctx, type, NULL, key, iv, 1)); T(EVP_CIPHER_CTX_set_padding(ctx, 0)); if (inplace) memcpy(c, pt, size); else memset(c, 0, size); if (acpkm) { if (EVP_CIPHER_get0_provider(type) != NULL) { OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END }; size_t v = (size_t)acpkm; params[0] = OSSL_PARAM_construct_size_t("key-mesh", &v); T(EVP_CIPHER_CTX_set_params(ctx, params)); } else { T(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_KEY_MESH, acpkm, NULL)); } } T(EVP_CipherUpdate(ctx, c, &outlen, inplace? c : pt, size)); T(EVP_CipherFinal_ex(ctx, c + outlen, &tmplen)); EVP_CIPHER_CTX_cleanup(ctx); TEST_ASSERT(outlen != size || memcmp(c, exp, size)); if (test) { printf(" c[%d] = ", outlen); hexdump(c, outlen); } ret |= test; /* test with small chunks of block size */ printf("Chunked encryption test from %s [%s] %s: ", standard, name, inplace ? "in-place" : "out-of-place"); int blocks = size / block_size; int z; EVP_CIPHER_CTX_init(ctx); T(EVP_CipherInit_ex(ctx, type, NULL, key, iv, 1)); T(EVP_CIPHER_CTX_set_padding(ctx, 0)); if (inplace) memcpy(c, pt, size); else memset(c, 0, size); if (acpkm) { if (EVP_CIPHER_get0_provider(type) != NULL) { OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END }; size_t v = (size_t)acpkm; params[0] = OSSL_PARAM_construct_size_t("key-mesh", &v); T(EVP_CIPHER_CTX_set_params(ctx, params)); } else { T(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_KEY_MESH, acpkm, NULL)); } } for (z = 0; z < blocks; z++) { int offset = z * block_size; int sz = block_size; T(EVP_CipherUpdate(ctx, c + offset, &outlen, (inplace ? c : pt) + offset, sz)); } outlen = z * block_size; T(EVP_CipherFinal_ex(ctx, c + outlen, &tmplen)); EVP_CIPHER_CTX_cleanup(ctx); TEST_ASSERT(outlen != size || memcmp(c, exp, size)); if (test) { printf(" c[%d] = ", outlen); hexdump(c, outlen); } ret |= test; /* test with single big chunk */ printf("Decryption test from %s [%s] %s: ", standard, name, inplace ? "in-place" : "out-of-place"); EVP_CIPHER_CTX_init(ctx); T(EVP_CipherInit_ex(ctx, type, NULL, key, iv, 0)); T(EVP_CIPHER_CTX_set_padding(ctx, 0)); if (inplace) memcpy(c, exp, size); else memset(c, 0, size); if (acpkm) { if (EVP_CIPHER_get0_provider(type) != NULL) { OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END }; size_t v = (size_t)acpkm; params[0] = OSSL_PARAM_construct_size_t("key-mesh", &v); T(EVP_CIPHER_CTX_set_params(ctx, params)); } else { T(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_KEY_MESH, acpkm, NULL)); } } T(EVP_CipherUpdate(ctx, c, &outlen, inplace ? c : exp, size)); T(EVP_CipherFinal_ex(ctx, c + outlen, &tmplen)); EVP_CIPHER_CTX_cleanup(ctx); EVP_CIPHER_CTX_free(ctx); TEST_ASSERT(outlen != size || memcmp(c, pt, size)); if (test) { printf(" d[%d] = ", outlen); hexdump(c, outlen); } ret |= test; return ret; } static int test_stream(const EVP_CIPHER *type, const char *name, const unsigned char *pt, const unsigned char *key, const unsigned char *exp, const size_t size, const unsigned char *iv, size_t iv_size, int acpkm) { EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); const char *standard = acpkm? "R 23565.1.017-2018" : "GOST R 34.13-2015"; unsigned char *c = alloca(size); int ret = 0, test; int z; OPENSSL_assert(ctx); /* Cycle through all lengths from 1 upto maximum size */ printf("Stream encryption test from %s [%s] \n", standard, name); /* Block size for stream ciphers should be 1. */ T(EVP_CIPHER_block_size(type) == 1); for (z = 1; z <= size; z++) { int outlen, tmplen; int sz = 0; int i; EVP_CIPHER_CTX_init(ctx); T(EVP_CipherInit_ex(ctx, type, NULL, key, iv, 1)); T(EVP_CIPHER_CTX_set_padding(ctx, 0)); memset(c, 0xff, size); if (acpkm) { if (EVP_CIPHER_get0_provider(type) != NULL) { OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END }; size_t v = (size_t)acpkm; params[0] = OSSL_PARAM_construct_size_t("key-mesh", &v); T(EVP_CIPHER_CTX_set_params(ctx, params)); } else { T(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_KEY_MESH, acpkm, NULL)); } } for (i = 0; i < size; i += z) { if (i + z > size) sz = size - i; else sz = z; T(EVP_CipherUpdate(ctx, c + i, &outlen, pt + i, sz)); OPENSSL_assert(outlen == sz); } outlen = i - z + sz; T(EVP_CipherFinal_ex(ctx, c + outlen, &tmplen)); EVP_CIPHER_CTX_cleanup(ctx); test = outlen != size || memcmp(c, exp, size); printf("%c", test ? 'E' : '+'); ret |= test; } printf("\n"); TEST_ASSERT(ret); EVP_CIPHER_CTX_free(ctx); return ret; } int engine_is_available(const char *name) { ENGINE *e = ENGINE_get_first(); while (e != NULL) { if (strcmp(ENGINE_get_id(e), name) == 0) break; e = ENGINE_get_next(e); } ENGINE_free(e); return 0; } void warn_if_untested(const EVP_CIPHER *ciph, void *provider) { const struct testcase *t; /* ENGINE provided EVP_MDs have a NULL provider */ if (provider != EVP_CIPHER_get0_provider(ciph)) return; for (t = testcases; t->algname; t++) if (EVP_CIPHER_is_a(ciph, t->algname)) break; if (!t->algname) printf(cMAGENT "Cipher %s is untested!" cNORM "\n", EVP_CIPHER_name(ciph)); } void warn_all_untested(void) { if (engine_is_available("gost")) { ENGINE *eng; T(eng = ENGINE_by_id("gost")); T(ENGINE_init(eng)); ENGINE_CIPHERS_PTR fn_c; T(fn_c = ENGINE_get_ciphers(eng)); const int *nids; int n, k; n = fn_c(eng, NULL, &nids, 0); for (k = 0; k < n; ++k) warn_if_untested(ENGINE_get_cipher(eng, nids[k]), NULL); ENGINE_finish(eng); ENGINE_free(eng); } if (OSSL_PROVIDER_available(NULL, "gostprov")) { OSSL_PROVIDER *prov; T(prov = OSSL_PROVIDER_load(NULL, "gostprov")); EVP_CIPHER_do_all_provided(NULL, (void (*)(EVP_CIPHER *, void *))warn_if_untested, prov); OSSL_PROVIDER_unload(prov); } } int main(int argc, char **argv) { int ret = 0; const struct testcase *t; #if MIPSEL /* Trigger SIGBUS for unaligned access. */ sysmips(MIPS_FIXADE, 0); #endif OPENSSL_add_all_algorithms_conf(); for (t = testcases; t->algname; t++) { int inplace; const char *standard = t->acpkm? "R 23565.1.017-2018" : "GOST R 34.13-2015"; EVP_CIPHER *ciph; ERR_set_mark(); T((ciph = (EVP_CIPHER *)EVP_get_cipherbyname(t->algname)) || (ciph = EVP_CIPHER_fetch(NULL, t->algname, NULL))); ERR_pop_to_mark(); printf(cBLUE "# Tests for %s [%s]" cNORM "\n", t->algname, standard); for (inplace = 0; inplace <= 1; inplace++) ret |= test_block(ciph, t->algname, t->block, t->plaintext, t->key, t->expected, t->size, t->iv, t->iv_size, t->acpkm, inplace); if (t->stream) ret |= test_stream(ciph, t->algname, t->plaintext, t->key, t->expected, t->size, t->iv, t->iv_size, t->acpkm); EVP_CIPHER_free(ciph); } warn_all_untested(); if (ret) printf(cDRED "= Some tests FAILED!" cNORM "\n"); else printf(cDGREEN "= All tests passed!" cNORM "\n"); return ret; } libengine-gost-openssl-3.0.2/test_context.c000066400000000000000000000236411446070765000210110ustar00rootroot00000000000000/* * Copyright (C) 2018,2020 Vitaly Chikunov All Rights Reserved. * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif #include #include #include #include #include #include #ifndef EVP_MD_CTRL_SET_KEY # include "gost_lcl.h" #endif #define T(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ OpenSSLDie(__FILE__, __LINE__, #e); \ } #define cRED "\033[1;31m" #define cDRED "\033[0;31m" #define cGREEN "\033[1;32m" #define cDGREEN "\033[0;32m" #define cBLUE "\033[1;34m" #define cDBLUE "\033[0;34m" #define cNORM "\033[m" #define TEST_ASSERT(e) {if ((test = (e))) \ printf(cRED " Test FAILED" cNORM "\n"); \ else \ printf(cGREEN " Test passed" cNORM "\n");} static void hexdump(const void *ptr, size_t len) { const unsigned char *p = ptr; size_t i, j; for (i = 0; i < len; i += j) { for (j = 0; j < 16 && i + j < len; j++) printf("%s%02x", j? "" : " ", p[i + j]); } printf("\n"); } #define TEST_SIZE 256 #define STEP_SIZE 16 static int test_contexts_cipher(const char *name, const int enc, int acpkm) { EVP_CIPHER_CTX *ctx, *save; unsigned char pt[TEST_SIZE] = {1}; unsigned char b[TEST_SIZE]; /* base output */ unsigned char c[TEST_SIZE]; /* cloned output */ unsigned char K[32] = {1}; unsigned char iv[16] = {1}; int outlen, tmplen; int ret = 0, test = 0; EVP_CIPHER *type; ERR_set_mark(); T((type = (EVP_CIPHER *)EVP_get_cipherbyname(name)) || (type = EVP_CIPHER_fetch(NULL, name, NULL))); ERR_pop_to_mark(); printf(cBLUE "%s test for %s" cNORM "\n", enc ? "Encryption" : "Decryption", name); /* produce base encryption */ ctx = EVP_CIPHER_CTX_new(); T(ctx); T(EVP_CipherInit_ex(ctx, type, NULL, K, iv, enc)); if (acpkm) { if (EVP_CIPHER_get0_provider(type) != NULL) { OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END }; size_t v = (size_t)acpkm; params[0] = OSSL_PARAM_construct_size_t("key-mesh", &v); T(EVP_CIPHER_CTX_set_params(ctx, params)); } else { T(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_KEY_MESH, acpkm, NULL)); } } T(EVP_CIPHER_CTX_set_padding(ctx, 0)); T(EVP_CipherUpdate(ctx, b, &outlen, pt, sizeof(b))); T(EVP_CipherFinal_ex(ctx, b + outlen, &tmplen)); /* and now tests */ EVP_CIPHER_CTX_reset(ctx); EVP_CIPHER_CTX_reset(ctx); /* double call is intentional */ T(EVP_CipherInit_ex(ctx, type, NULL, K, iv, enc)); T(EVP_CIPHER_CTX_set_padding(ctx, 0)); if (acpkm) { if (EVP_CIPHER_get0_provider(type) != NULL) { OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END }; size_t v = (size_t)acpkm; params[0] = OSSL_PARAM_construct_size_t("key-mesh", &v); T(EVP_CIPHER_CTX_set_params(ctx, params)); } else { T(EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_KEY_MESH, acpkm, NULL)); } } save = ctx; printf(" cloned contexts: "); int i; memset(c, 0, sizeof(c)); for (i = 0; i < TEST_SIZE / STEP_SIZE; i++) { EVP_CIPHER_CTX *copy = EVP_CIPHER_CTX_new(); T(copy); T(EVP_CIPHER_CTX_copy(copy, ctx)); if (save != ctx) /* else original context */ EVP_CIPHER_CTX_free(ctx); ctx = copy; T(EVP_CipherUpdate(ctx, c + STEP_SIZE * i, &outlen, pt + STEP_SIZE * i, STEP_SIZE)); } outlen = i * STEP_SIZE; T(EVP_CipherFinal_ex(ctx, c + outlen, &tmplen)); TEST_ASSERT(outlen != TEST_SIZE || memcmp(c, b, TEST_SIZE)); EVP_CIPHER_CTX_free(ctx); if (test) { printf(" b[%d] = ", outlen); hexdump(b, outlen); printf(" c[%d] = ", outlen); hexdump(c, outlen); } ret |= test; /* resume original context */ printf(" base context: "); memset(c, 0, sizeof(c)); T(EVP_CipherUpdate(save, c, &outlen, pt, sizeof(c))); T(EVP_CipherFinal_ex(save, c + outlen, &tmplen)); TEST_ASSERT(outlen != TEST_SIZE || memcmp(c, b, TEST_SIZE)); EVP_CIPHER_CTX_cleanup(save); /* multiple calls are intentional */ EVP_CIPHER_CTX_cleanup(save); EVP_CIPHER_CTX_free(save); EVP_CIPHER_free(type); if (test) { printf(" b[%d] = ", outlen); hexdump(b, outlen); printf(" c[%d] = ", outlen); hexdump(c, outlen); } ret |= test; return ret; } static int test_contexts_digest_or_legacy_mac(const EVP_MD *type, int mac) { int ret = 0, test = 0; unsigned char K[32] = {1}; /* produce base digest */ EVP_MD_CTX *ctx, *save; unsigned char pt[TEST_SIZE] = {1}; unsigned char b[EVP_MAX_MD_SIZE] = {0}; unsigned char c[EVP_MAX_MD_SIZE]; unsigned int outlen, tmplen; /* Simply digest whole input. */ T(ctx = EVP_MD_CTX_new()); T(EVP_DigestInit_ex(ctx, type, NULL)); if (mac) T(EVP_MD_CTX_ctrl(ctx, EVP_MD_CTRL_SET_KEY, sizeof(K), (void *)K)); T(EVP_DigestUpdate(ctx, pt, sizeof(pt))); T(EVP_DigestFinal_ex(ctx, b, &tmplen)); save = ctx; /* will be not freed while cloning */ /* cloned digest */ EVP_MD_CTX_reset(ctx); /* test double reset */ EVP_MD_CTX_reset(ctx); T(EVP_DigestInit_ex(ctx, type, NULL)); if (mac) T(EVP_MD_CTX_ctrl(ctx, EVP_MD_CTRL_SET_KEY, sizeof(K), (void *)K)); printf(" cloned contexts: "); memset(c, 0, sizeof(c)); int i; for (i = 0; i < TEST_SIZE / STEP_SIZE; i++) { /* Clone and continue digesting next part of input. */ EVP_MD_CTX *copy; T(copy = EVP_MD_CTX_new()); T(EVP_MD_CTX_copy_ex(copy, ctx)); /* rolling */ if (save != ctx) EVP_MD_CTX_free(ctx); ctx = copy; T(EVP_DigestUpdate(ctx, pt + STEP_SIZE * i, STEP_SIZE)); } outlen = i * STEP_SIZE; T(EVP_DigestFinal_ex(ctx, c, &tmplen)); /* Should be same as the simple digest. */ TEST_ASSERT(outlen != TEST_SIZE || memcmp(c, b, EVP_MAX_MD_SIZE)); EVP_MD_CTX_free(ctx); if (test) { printf(" b[%d] = ", outlen); hexdump(b, outlen); printf(" c[%d] = ", outlen); hexdump(c, outlen); } ret |= test; /* Resume original context, what if it's damaged? */ printf(" base context: "); memset(c, 0, sizeof(c)); T(EVP_DigestUpdate(save, pt, sizeof(pt))); T(EVP_DigestFinal_ex(save, c, &tmplen)); TEST_ASSERT(outlen != TEST_SIZE || memcmp(c, b, EVP_MAX_MD_SIZE)); EVP_MD_CTX_free(save); if (test) { printf(" b[%d] = ", outlen); hexdump(b, outlen); printf(" c[%d] = ", outlen); hexdump(c, outlen); } ret |= test; return ret; } static int test_contexts_digest(const char *name) { EVP_MD *type; ERR_set_mark(); T((type = (EVP_MD *)EVP_get_digestbyname(name)) || (type = EVP_MD_fetch(NULL, name, NULL))); ERR_pop_to_mark(); printf(cBLUE "Digest test for %s" cNORM "\n", name); int ret = test_contexts_digest_or_legacy_mac(type, 0); EVP_MD_free(type); return ret; } static int test_contexts_mac(const char *name) { int ret = 0, test = 0; unsigned char K[32] = {1}; const EVP_MD *type = EVP_get_digestbyname(name); EVP_MAC *mac; if (type) { printf(cBLUE "Mac via EVP_MD test for %s" cNORM "\n", name); return test_contexts_digest_or_legacy_mac(type, 1); } T(mac = EVP_MAC_fetch(NULL, name, NULL)); printf(cBLUE "Mac test for %s" cNORM "\n", name); /* produce base mac */ EVP_MAC_CTX *ctx; unsigned char pt[TEST_SIZE] = {1}; unsigned char b[EVP_MAX_MD_SIZE] = {0}; unsigned char c[EVP_MAX_MD_SIZE] = {0}; size_t outlen, tmplen; /* Simply mac whole input. */ T(ctx = EVP_MAC_CTX_new(mac)); T(EVP_MAC_init(ctx, K, sizeof(K), NULL)); T(EVP_MAC_update(ctx, pt, sizeof(pt))); T(EVP_MAC_final(ctx, b, &tmplen, sizeof(b))); EVP_MAC_CTX_free(ctx); /* Mac with rolling input. */ printf(" cloned contexts: "); T(ctx = EVP_MAC_CTX_new(mac)); T(EVP_MAC_init(ctx, K, sizeof(K), NULL)); int i; for (i = 0; i < TEST_SIZE / STEP_SIZE; i++) { T(EVP_MAC_update(ctx, pt + STEP_SIZE * i, STEP_SIZE)); } outlen = i * STEP_SIZE; T(EVP_MAC_final(ctx, c, &tmplen, sizeof(c))); EVP_MAC_CTX_free(ctx); EVP_MAC_free(mac); /* Rolling mac should give the same result as the simple mac. */ TEST_ASSERT(outlen != TEST_SIZE || memcmp(c, b, EVP_MAX_MD_SIZE)); if (test) { printf(" b[%d] = ", (int)outlen); hexdump(b, outlen); printf(" c[%d] = ", (int)outlen); hexdump(c, outlen); } ret |= test; return ret; } static struct testcase_cipher { const char *name; int acpkm; } testcases_ciphers[] = { { SN_id_Gost28147_89, }, { SN_gost89_cnt, }, { SN_gost89_cnt_12, }, { SN_gost89_cbc, }, { SN_grasshopper_ecb, }, { SN_grasshopper_cbc, }, { SN_grasshopper_cfb, }, { SN_grasshopper_ofb, }, { SN_grasshopper_ctr, }, { SN_magma_cbc, }, { SN_magma_ctr, }, { SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm, 256 / 8 }, { 0 }, }; static struct testcase_digest { const char *name; int mac; } testcases_digests[] = { { SN_id_GostR3411_94, }, { SN_id_Gost28147_89_MAC, 1 }, { SN_id_GostR3411_2012_256, }, { SN_id_GostR3411_2012_512, }, { SN_gost_mac_12, 1 }, { SN_magma_mac, 1 }, { SN_grasshopper_mac, 1 }, { SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac, 1 }, { 0 }, }; int main(int argc, char **argv) { int ret = 0; OPENSSL_add_all_algorithms_conf(); const struct testcase_cipher *tc; for (tc = testcases_ciphers; tc->name; tc++) { ret |= test_contexts_cipher(tc->name, 1, tc->acpkm); ret |= test_contexts_cipher(tc->name, 0, tc->acpkm); } const struct testcase_digest *td; for (td = testcases_digests; td->name; td++) { if (td->mac) ret |= test_contexts_mac(td->name); else ret |= test_contexts_digest(td->name); } if (ret) printf(cDRED "= Some tests FAILED!" cNORM "\n"); else printf(cDGREEN "= All tests passed!" cNORM "\n"); return ret; } libengine-gost-openssl-3.0.2/test_curves.c000066400000000000000000000145131446070765000206320ustar00rootroot00000000000000/* * Copyright (C) 2018 vt@altlinux.org. All Rights Reserved. * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif #include "gost_lcl.h" #include #include #include #include #include #include #include #include #define T(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ OpenSSLDie(__FILE__, __LINE__, #e); \ } #define cRED "\033[1;31m" #define cDRED "\033[0;31m" #define cGREEN "\033[1;32m" #define cDGREEN "\033[0;32m" #define cBLUE "\033[1;34m" #define cDBLUE "\033[0;34m" #define cNORM "\033[m" #define TEST_ASSERT(e) { \ test = e; \ if (test) \ printf(cRED " Test FAILED" cNORM "\n"); \ else \ printf(cGREEN " Test passed" cNORM "\n"); \ } struct test_curve { int nid; const char *name; int listed; }; static struct test_curve test_curves[] = { #if 2001 { NID_id_GostR3410_2001_TestParamSet, }, #endif { NID_id_GostR3410_2001_CryptoPro_A_ParamSet }, { NID_id_GostR3410_2001_CryptoPro_B_ParamSet }, { NID_id_GostR3410_2001_CryptoPro_C_ParamSet }, { NID_id_GostR3410_2001_CryptoPro_XchA_ParamSet }, { NID_id_GostR3410_2001_CryptoPro_XchB_ParamSet }, { NID_id_tc26_gost_3410_2012_512_paramSetA, "id-tc26-gost-3410-2012-512-paramSetA", }, { NID_id_tc26_gost_3410_2012_512_paramSetB, "id-tc26-gost-3410-2012-512-paramSetB", }, { NID_id_tc26_gost_3410_2012_512_paramSetC, "id-tc26-gost-3410-2012-512-paramSetC", }, { NID_id_tc26_gost_3410_2012_256_paramSetA, "id-tc26-gost-3410-2012-256-paramSetA", }, { NID_id_tc26_gost_3410_2012_256_paramSetB, "id-tc26-gost-3410-2012-256-paramSetB", }, { NID_id_tc26_gost_3410_2012_256_paramSetC, "id-tc26-gost-3410-2012-256-paramSetC", }, { NID_id_tc26_gost_3410_2012_256_paramSetD, "id-tc26-gost-3410-2012-256-paramSetD", }, 0, }; static struct test_curve *get_test_curve(int nid) { int i; for (i = 0; test_curves[i].nid; i++) if (test_curves[i].nid == nid) return &test_curves[i]; return NULL; } static void print_bn(const char *name, const BIGNUM *n) { printf("%3s = ", name); BN_print_fp(stdout, n); printf("\n"); } // https://wiki.openssl.org/index.php/Elliptic_Curve_Cryptography static int parameter_test(struct test_curve *tc) { const int nid = tc->nid; int test; printf(cBLUE "Test curve NID %d" cNORM, nid); if (tc->name) printf(cBLUE ": %s" cNORM, tc->name); else if (OBJ_nid2sn(nid)) printf(cBLUE ": %s" cNORM, OBJ_nid2sn(nid)); printf("\n"); if (!OBJ_nid2obj(nid)) { printf(cRED "NID %d not found" cNORM "\n", nid); return 1; } /* nid resolves in both directions */ const char *sn, *ln; T(sn = OBJ_nid2sn(nid)); T(ln = OBJ_nid2ln(nid)); if (tc->name) T(!strcmp(tc->name, OBJ_nid2sn(nid))); T(nid == OBJ_sn2nid(sn)); T(nid == OBJ_ln2nid(ln)); EC_KEY *ec; T(ec = EC_KEY_new()); if (!fill_GOST_EC_params(ec, nid)) { printf(cRED "fill_GOST_EC_params FAIL" cNORM "\n"); ERR_print_errors_fp(stderr); return 1; } const EC_GROUP *group; T(group = EC_KEY_get0_group(ec)); BN_CTX *ctx; T(ctx = BN_CTX_new()); BIGNUM *p, *a, *b; T(p = BN_new()); T(a = BN_new()); T(b = BN_new()); EC_GROUP_get_curve(group, p, a, b, ctx); print_bn("p", p); print_bn("a", a); print_bn("b", b); T(!BN_is_zero(p)); T(BN_is_odd(p)); /* Should be odd for F_p */ T(!BN_is_zero(a)); T(!BN_is_zero(b)); /* Check generator */ const EC_POINT *generator; T(generator = EC_GROUP_get0_generator(group)); BIGNUM *x, *y; T(x = BN_new()); T(y = BN_new()); T(EC_POINT_get_affine_coordinates(group, generator, x, y, ctx)); print_bn("x", x); print_bn("y", y); T(!BN_is_zero(y)); /* Generator is not identity element 0 */ T(EC_POINT_is_at_infinity(group, generator) == 0); /* x and y is in range [1 .. p-1] */ T(!BN_is_negative(x)); T(!BN_is_negative(y)); T(BN_cmp(x, p) < 0); T(BN_cmp(y, p) < 0); /* Generator should be on curve */ T(EC_POINT_is_on_curve(group, generator, ctx) == 1); /* y^2 == (x^3 + ax + b) mod p * Should be same as EC_POINT_is_on_curve(generator), * but, let's calculate it manually. */ BIGNUM *yy = BN_new(); BIGNUM *r = BN_new(); BIGNUM *xxx = BN_new(); BIGNUM *ax = BN_new(); T(yy && r && xxx && ax); BN_set_word(r, 2); BN_mod_exp(yy, y, r, p, ctx); BN_set_word(r, 3); BN_mod_exp(xxx, x, r, p, ctx); BN_mod_mul(ax, a, x, p, ctx); BN_mod_add(xxx, xxx, ax, p, ctx); BN_mod_add(xxx, xxx, b, p, ctx); T(BN_cmp(yy, xxx) == 0); BN_free(yy); BN_free(r); BN_free(xxx); BN_free(ax); BN_free(p); BN_free(a); BN_free(b); BN_free(x); BN_free(y); /* Check order */ const BIGNUM *order; T(order = EC_GROUP_get0_order(group)); T(!BN_is_zero(order)); print_bn("q", order); T(BN_is_odd(order)); EC_POINT *point; T((point = EC_POINT_new(group))); T(EC_POINT_mul(group, point, NULL, generator, order, ctx)); /* generator * order is the point at infinity? */ T(EC_POINT_is_at_infinity(group, point) == 1); EC_POINT_free(point); /* Check if order is cyclic */ BIGNUM *k1 = BN_new(); BIGNUM *k2 = BN_new(); EC_POINT *p1 = EC_POINT_new(group); EC_POINT *p2 = EC_POINT_new(group); BN_set_word(k1, 3); BN_set_word(k2, 3); BN_add(k2, k2, order); T(EC_POINT_mul(group, p1, NULL, generator, k1, ctx)); T(EC_POINT_mul(group, p2, NULL, generator, k2, ctx)); T(EC_POINT_cmp(group, p1, p2, ctx) == 0); BN_free(k1); BN_free(k2); EC_POINT_free(p1); EC_POINT_free(p2); /* Cofactor is 1 or 4 */ const BIGNUM *c; T(c = EC_GROUP_get0_cofactor(group)); T(BN_is_word(c, 1) || BN_is_word(c, 4)); BN_CTX_free(ctx); EC_KEY_free(ec); TEST_ASSERT(0); return test; } int main(int argc, char **argv) { int ret = 0; struct test_curve *tc; for (tc = test_curves; tc->nid; tc++) { ret |= parameter_test(tc); } if (ret) printf(cDRED "= Some tests FAILED!" cNORM "\n"); else printf(cDGREEN "= All tests passed!" cNORM "\n"); return ret; } libengine-gost-openssl-3.0.2/test_derive.c000066400000000000000000000307011446070765000205760ustar00rootroot00000000000000/* * Test derive operations * * Copyright (C) 2020 Vitaly Chikunov . All Rights Reserved. * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif #include #include #include #include #include #include #include "gost_lcl.h" #define T(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ OpenSSLDie(__FILE__, __LINE__, #e); \ } #define cRED "\033[1;31m" #define cDRED "\033[0;31m" #define cGREEN "\033[1;32m" #define cDGREEN "\033[0;32m" #define cBLUE "\033[1;34m" #define cDBLUE "\033[0;34m" #define cCYAN "\033[1;36m" #define cNORM "\033[m" #define TEST_ASSERT(e) {if ((test = (e))) \ printf(cRED " Test FAILED" cNORM "\n"); \ else \ printf(cGREEN " Test passed" cNORM "\n");} #ifndef OSSL_NELEM # define OSSL_NELEM(x) (sizeof(x)/sizeof((x)[0])) #endif const char party_a_priv[] = "\xc9\x90\xec\xd9\x72\xfc\xe8\x4e\xc4\xdb\x02\x27\x78\xf5\x0f\xca" "\xc7\x26\xf4\x67\x08\x38\x4b\x8d\x45\x83\x04\x96\x2d\x71\x47\xf8" "\xc2\xdb\x41\xce\xf2\x2c\x90\xb1\x02\xf2\x96\x84\x04\xf9\xb9\xbe" "\x6d\x47\xc7\x96\x92\xd8\x18\x26\xb3\x2b\x8d\xac\xa4\x3c\xb6\x67"; const char party_a_pub[] = "\xaa\xb0\xed\xa4\xab\xff\x21\x20\x8d\x18\x79\x9f\xb9\xa8\x55\x66" "\x54\xba\x78\x30\x70\xeb\xa1\x0c\xb9\xab\xb2\x53\xec\x56\xdc\xf5" "\xd3\xcc\xba\x61\x92\xe4\x64\xe6\xe5\xbc\xb6\xde\xa1\x37\x79\x2f" "\x24\x31\xf6\xc8\x97\xeb\x1b\x3c\x0c\xc1\x43\x27\xb1\xad\xc0\xa7" "\x91\x46\x13\xa3\x07\x4e\x36\x3a\xed\xb2\x04\xd3\x8d\x35\x63\x97" "\x1b\xd8\x75\x8e\x87\x8c\x9d\xb1\x14\x03\x72\x1b\x48\x00\x2d\x38" "\x46\x1f\x92\x47\x2d\x40\xea\x92\xf9\x95\x8c\x0f\xfa\x4c\x93\x75" "\x64\x01\xb9\x7f\x89\xfd\xbe\x0b\x5e\x46\xe4\xa4\x63\x1c\xdb\x5a"; const char party_b_priv[] = "\x48\xc8\x59\xf7\xb6\xf1\x15\x85\x88\x7c\xc0\x5e\xc6\xef\x13\x90" "\xcf\xea\x73\x9b\x1a\x18\xc0\xd4\x66\x22\x93\xef\x63\xb7\x9e\x3b" "\x80\x14\x07\x0b\x44\x91\x85\x90\xb4\xb9\x96\xac\xfe\xa4\xed\xfb" "\xbb\xcc\xcc\x8c\x06\xed\xd8\xbf\x5b\xda\x92\xa5\x13\x92\xd0\xdb"; const char party_b_pub[] = "\x19\x2f\xe1\x83\xb9\x71\x3a\x07\x72\x53\xc7\x2c\x87\x35\xde\x2e" "\xa4\x2a\x3d\xbc\x66\xea\x31\x78\x38\xb6\x5f\xa3\x25\x23\xcd\x5e" "\xfc\xa9\x74\xed\xa7\xc8\x63\xf4\x95\x4d\x11\x47\xf1\xf2\xb2\x5c" "\x39\x5f\xce\x1c\x12\x91\x75\xe8\x76\xd1\x32\xe9\x4e\xd5\xa6\x51" "\x04\x88\x3b\x41\x4c\x9b\x59\x2e\xc4\xdc\x84\x82\x6f\x07\xd0\xb6" "\xd9\x00\x6d\xda\x17\x6c\xe4\x8c\x39\x1e\x3f\x97\xd1\x02\xe0\x3b" "\xb5\x98\xbf\x13\x2a\x22\x8a\x45\xf7\x20\x1a\xba\x08\xfc\x52\x4a" "\x2d\x77\xe4\x3a\x36\x2a\xb0\x22\xad\x40\x28\xf7\x5b\xde\x3b\x79"; struct test_derive { const char *descr; /* Source of test vector. */ int dgst_nid; /* VKO mode */ int key_nid; int param_nid; /* Curve id. */ const char *ukm; /* User Keying Material. */ int ukm_len; const char *key_a_priv; const char *key_a_pub; const char *key_b_priv; const char *key_b_pub; const char *kek; /* Key Encryption Key. Output. */ int kek_len; } derive_tests[] = { { .descr = "VKO_GOSTR3410_2012_256 from R 50.1.113-2016 A.9 (p.18)", .dgst_nid = NID_id_GostR3411_2012_256, .key_nid = NID_id_GostR3410_2012_512, .param_nid = NID_id_tc26_gost_3410_2012_512_paramSetA, .key_a_priv = party_a_priv, .key_a_pub = party_a_pub, .key_b_priv = party_b_priv, .key_b_pub = party_b_pub, .ukm = "\x1d\x80\x60\x3c\x85\x44\xc7\x27", .ukm_len = 8, .kek = "\xc9\xa9\xa7\x73\x20\xe2\xcc\x55\x9e\xd7\x2d\xce\x6f\x47\xe2\x19" "\x2c\xce\xa9\x5f\xa6\x48\x67\x05\x82\xc0\x54\xc0\xef\x36\xc2\x21", .kek_len = 32, }, { .descr = "VKO_GOSTR3410_2012_512 from R 50.1.113-2016 A.10 (p.19)", .dgst_nid = NID_id_GostR3411_2012_512, .key_nid = NID_id_GostR3410_2012_512, .param_nid = NID_id_tc26_gost_3410_2012_512_paramSetA, .key_a_priv = party_a_priv, .key_a_pub = party_a_pub, .key_b_priv = party_b_priv, .key_b_pub = party_b_pub, .ukm = "\x1d\x80\x60\x3c\x85\x44\xc7\x27", .ukm_len = 8, .kek = "\x79\xf0\x02\xa9\x69\x40\xce\x7b\xde\x32\x59\xa5\x2e\x01\x52\x97" "\xad\xaa\xd8\x45\x97\xa0\xd2\x05\xb5\x0e\x3e\x17\x19\xf9\x7b\xfa" "\x7e\xe1\xd2\x66\x1f\xa9\x97\x9a\x5a\xa2\x35\xb5\x58\xa7\xe6\xd9" "\xf8\x8f\x98\x2d\xd6\x3f\xc3\x5a\x8e\xc0\xdd\x5e\x24\x2d\x3b\xdf", .kek_len = 64, }, }; static EVP_PKEY *load_private_key(int key_nid, int param_nid, const char *pk, const char *pub) { EVP_PKEY_CTX *ctx; T(ctx = EVP_PKEY_CTX_new_id(key_nid, NULL)); T(EVP_PKEY_paramgen_init(ctx)); T(EVP_PKEY_CTX_ctrl(ctx, -1, -1, EVP_PKEY_CTRL_GOST_PARAMSET, param_nid, NULL)); EVP_PKEY *key = NULL; T((EVP_PKEY_paramgen(ctx, &key)) == 1); EVP_PKEY_CTX_free(ctx); EC_KEY *ec; T(ec = EVP_PKEY_get0(key)); const int len = EVP_PKEY_bits(key) / 8; BN_CTX *bc; T(bc = BN_CTX_secure_new()); BN_CTX_start(bc); const EC_GROUP *group = EC_KEY_get0_group(ec); EC_POINT *pkey = NULL; if (pk) { /* Read private key. */ BIGNUM *d = NULL; T(d = BN_lebin2bn((const unsigned char *)pk, len, NULL)); T(EC_KEY_set_private_key(ec, d)); /* Compute public key. */ T(pkey = EC_POINT_new(group)); T(EC_POINT_mul(group, pkey, d, NULL, NULL, bc)); BN_free(d); T(EC_KEY_set_public_key(ec, pkey)); } else { /* Read public key. */ BIGNUM *x, *y; T(x = BN_lebin2bn((const unsigned char *)pub, len, NULL)); T(y = BN_lebin2bn((const unsigned char *)pub + len, len, NULL)); EC_POINT *xy = EC_POINT_new(group); T(EC_POINT_set_affine_coordinates(group, xy, x, y, bc)); BN_free(x); BN_free(y); T(EC_KEY_set_public_key(ec, xy)); EC_POINT_free(xy); } #ifdef DEBUG BIO *bp = BIO_new_fd(1, BIO_NOCLOSE); if (pk) PEM_write_bio_PrivateKey(bp, key, NULL, NULL, 0, NULL, NULL); PEM_write_bio_PUBKEY(bp, key); BIO_free(bp); #endif /* Verify public key. */ if (pk && pub) { BIGNUM *x, *y; T(x = BN_lebin2bn((const unsigned char *)pub, len, NULL)); T(y = BN_lebin2bn((const unsigned char *)pub + len, len, NULL)); EC_POINT *xy = EC_POINT_new(group); T(EC_POINT_set_affine_coordinates(group, xy, x, y, bc)); BN_free(x); BN_free(y); if (EC_POINT_cmp(group, pkey, xy, bc) == 0) printf("Public key %08x matches private key %08x\n", *(int *)pub, *(int *)pk); else { printf(cRED "Public key mismatch!" cNORM "\n"); exit(1); } EC_POINT_free(xy); } EC_POINT_free(pkey); BN_CTX_end(bc); BN_CTX_free(bc); return key; } int test_derive(struct test_derive *t, const char *name) { int ret = 0; printf(cBLUE "Test %s" cNORM " for %s\n", t->descr, name); EVP_PKEY *keyA = load_private_key(t->key_nid, t->param_nid, t->key_a_priv, t->key_a_pub); EVP_PKEY *keyB = load_private_key(t->key_nid, t->param_nid, NULL, t->key_b_pub); EVP_PKEY_CTX *ctx; T(ctx = EVP_PKEY_CTX_new(keyA, NULL)); T(EVP_PKEY_derive_init(ctx)); T(EVP_PKEY_derive_set_peer(ctx, keyB)); if (t->dgst_nid) T(EVP_PKEY_CTX_ctrl(ctx, -1, -1, EVP_PKEY_CTRL_SET_VKO, t->dgst_nid, NULL)); T(EVP_PKEY_CTX_ctrl(ctx, -1, -1, EVP_PKEY_CTRL_SET_IV, t->ukm_len, (unsigned char *)t->ukm)); size_t skeylen; unsigned char *skey; T(EVP_PKEY_derive(ctx, NULL, &skeylen)); T(skey = OPENSSL_malloc(skeylen)); T(EVP_PKEY_derive(ctx, skey, &skeylen)); #ifdef DEBUG BIO_dump_fp(stdout, skey, skeylen); #endif EVP_PKEY_CTX_free(ctx); EVP_PKEY_free(keyA); EVP_PKEY_free(keyB); if (t->kek_len == skeylen && memcmp(t->kek, skey, skeylen) == 0) printf(cGREEN "KEK match etalon" cNORM "\n"); else { printf(cRED "KEK mismatch etalon" cNORM "\n"); ret = 1; } OPENSSL_free(skey); return ret; } int test_derive_pair(struct test_derive *t) { int ret = 0; struct test_derive tt = *t; tt.key_b_priv = NULL; ret |= test_derive(&tt, "A"); /* Test swapped keys. */ tt.key_a_priv = t->key_b_priv; tt.key_a_pub = t->key_b_pub; tt.key_b_priv = NULL; tt.key_b_pub = t->key_a_pub; ret |= test_derive(&tt, "B"); return ret; } static EVP_PKEY *keygen(const char *algo, const char *param) { EVP_PKEY *key = NULL; EVP_PKEY *tkey = EVP_PKEY_new(); T(EVP_PKEY_set_type_str(tkey, algo, -1)); int pkey_id = EVP_PKEY_id(tkey); EVP_PKEY_free(tkey); EVP_PKEY_CTX *ctx; T((ctx = EVP_PKEY_CTX_new_id(pkey_id, NULL))); T(EVP_PKEY_keygen_init(ctx)); T(EVP_PKEY_CTX_ctrl_str(ctx, "paramset", param)); T(EVP_PKEY_keygen(ctx, &key)); EVP_PKEY_CTX_free(ctx); return key; } unsigned char *derive(EVP_PKEY *keyA, EVP_PKEY *keyB, int dgst_nid, int ukm_len, size_t *len) { EVP_PKEY_CTX *ctx; T(ctx = EVP_PKEY_CTX_new(keyA, NULL)); T(EVP_PKEY_derive_init(ctx)); T(EVP_PKEY_derive_set_peer(ctx, keyB)); if (dgst_nid) T(EVP_PKEY_CTX_ctrl(ctx, -1, -1, EVP_PKEY_CTRL_SET_VKO, dgst_nid, NULL)); if (ukm_len) { unsigned char ukm[32] = { 1 }; OPENSSL_assert(ukm_len <= sizeof(ukm)); T(EVP_PKEY_CTX_ctrl(ctx, -1, -1, EVP_PKEY_CTRL_SET_IV, ukm_len, ukm)); } T(EVP_PKEY_derive(ctx, NULL, len)); unsigned char *skey; T(skey = OPENSSL_malloc(*len)); T(EVP_PKEY_derive(ctx, skey, len)); #ifdef DEBUG BIO_dump_fp(stdout, skey, *len); #endif EVP_PKEY_CTX_free(ctx); return skey; } int test_derive_alg(const char *algo, const char *param, int mode) { int ret = 0; char *name = NULL; int dgst_nid = 0; int ukm_len = 0; switch (mode) { case 0: dgst_nid = NID_id_GostR3411_2012_256; name = "VKO256"; ukm_len = 1; break; case 1: dgst_nid = NID_id_GostR3411_2012_512; name = "VKO512"; ukm_len = 1; break; case 2: name = "VKO"; ukm_len = 8; break; case 3: if (!strcmp(algo, "gost2001")) return 0; /* Skip. */ name = "KEG"; ukm_len = 32; break; #define NR_MODES 4 default: abort(); } printf(cBLUE "Test %s for %s %s" cNORM " - ", name, algo, param); EVP_PKEY *keyA = keygen(algo, param); EVP_PKEY *keyB = keygen(algo, param); size_t skeyA_len, skeyB_len; unsigned char *skeyA = derive(keyA, keyB, dgst_nid, ukm_len, &skeyA_len); unsigned char *skeyB = derive(keyB, keyA, dgst_nid, ukm_len, &skeyB_len); ret = memcmp(skeyA, skeyB, skeyA_len); if (!ret) printf(cGREEN "KEK match" cNORM "\n"); else printf(cRED "KEK mismatch" cNORM "\n"); EVP_PKEY_free(keyA); EVP_PKEY_free(keyB); OPENSSL_free(skeyA); OPENSSL_free(skeyB); return ret; } int main(int argc, char **argv) { int ret = 0; OPENSSL_add_all_algorithms_conf(); int i; for (i = 0; i < OSSL_NELEM(derive_tests); i++) ret |= test_derive_pair(&derive_tests[i]); for (i = 0; i < NR_MODES; i++) { ret |= test_derive_alg("gost2001", "A", i); ret |= test_derive_alg("gost2001", "B", i); ret |= test_derive_alg("gost2001", "C", i); ret |= test_derive_alg("gost2012_256", "A", i); ret |= test_derive_alg("gost2012_256", "B", i); ret |= test_derive_alg("gost2012_256", "C", i); ret |= test_derive_alg("gost2012_256", "TCA", i); ret |= test_derive_alg("gost2012_512", "A", i); ret |= test_derive_alg("gost2012_512", "B", i); ret |= test_derive_alg("gost2012_512", "C", i); } if (ret) printf(cDRED "= Some tests FAILED!" cNORM "\n"); else printf(cDGREEN "= All tests passed!" cNORM "\n"); return ret; } /* vim: set expandtab cinoptions=\:0,l1,t0,g0,(0 sw=4 : */ libengine-gost-openssl-3.0.2/test_digest.c000066400000000000000000000745601446070765000206120ustar00rootroot00000000000000/* * Test GOST 34.11 Digest operation * * Copyright (C) 2019-2020 Vitaly Chikunov . All Rights Reserved. * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif #include #include #include #include #include #include #include # include #if OPENSSL_VERSION_MAJOR >= 3 # include #endif #include #include #include #if MIPSEL # include #endif #ifndef EVP_MD_CTRL_SET_KEY # include "gost_lcl.h" #endif /* Helpers to test OpenSSL API calls. */ #define T(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ OpenSSLDie(__FILE__, __LINE__, #e); \ } #define TE(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ fprintf(stderr, "Error at %s:%d %s\n", __FILE__, __LINE__, #e); \ return -1; \ } #define cRED "\033[1;31m" #define cDRED "\033[0;31m" #define cGREEN "\033[1;32m" #define cDGREEN "\033[0;32m" #define cBLUE "\033[1;34m" #define cDBLUE "\033[0;34m" #define cMAGENT "\033[1;35m" #define cNORM "\033[m" #define TEST_ASSERT(e) {if ((test = (e))) \ printf(cRED " Test FAILED" cNORM "\n"); \ else \ printf(cGREEN " Test passed" cNORM "\n");} #ifdef __GNUC__ /* To test older APIs. */ # pragma GCC diagnostic ignored "-Wdeprecated-declarations" #endif /* * Test keys from both GOST R 34.12-2015 and GOST R 34.13-2015, * for 128-bit cipher (A.1). */ static const char K[32] = { 0x88,0x99,0xaa,0xbb,0xcc,0xdd,0xee,0xff,0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77, 0xfe,0xdc,0xba,0x98,0x76,0x54,0x32,0x10,0x01,0x23,0x45,0x67,0x89,0xab,0xcd,0xef, }; /* * Key for 64-bit cipher (A.2). */ static const char Km[32] = { 0xff,0xee,0xdd,0xcc,0xbb,0xaa,0x99,0x88,0x77,0x66,0x55,0x44,0x33,0x22,0x11,0x00, 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff, }; /* * Plaintext from GOST R 34.13-2015 A.1. * First 16 bytes is vector (a) from GOST R 34.12-2015 A.1. */ static const char P[] = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x00,0xff,0xee,0xdd,0xcc,0xbb,0xaa,0x99,0x88, 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xee,0xff,0x0a, 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xee,0xff,0x0a,0x00, 0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xaa,0xbb,0xcc,0xee,0xff,0x0a,0x00,0x11, }; /* Plaintext for 64-bit cipher (A.2) */ static const char Pm[] = { 0x92,0xde,0xf0,0x6b,0x3c,0x13,0x0a,0x59,0xdb,0x54,0xc7,0x04,0xf8,0x18,0x9d,0x20, 0x4a,0x98,0xfb,0x2e,0x67,0xa8,0x02,0x4c,0x89,0x12,0x40,0x9b,0x17,0xb5,0x7e,0x41, }; /* * Kuznyechik OMAC1/CMAC test vector from GOST R 34.13-2015 А.1.6 */ static const char MAC_omac[] = { 0x33,0x6f,0x4d,0x29,0x60,0x59,0xfb,0xe3 }; /* * Magma OMAC1/CMAC test vector from GOST R 34.13-2015 А.2.6 */ static const char MAC_magma_omac[] = { 0x15,0x4e,0x72,0x10 }; /* * OMAC-ACPKM test vector from R 1323565.1.017-2018 A.4.1 */ static const char P_omac_acpkm1[] = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x00,0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88, 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77, }; static const char MAC_omac_acpkm1[] = { 0xB5,0x36,0x7F,0x47,0xB6,0x2B,0x99,0x5E,0xEB,0x2A,0x64,0x8C,0x58,0x43,0x14,0x5E, }; /* * OMAC-ACPKM test vector from R 1323565.1.017-2018 A.4.2 */ static const char P_omac_acpkm2[] = { 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x00,0xFF,0xEE,0xDD,0xCC,0xBB,0xAA,0x99,0x88, 0x00,0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xEE,0xFF,0x0A, 0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xEE,0xFF,0x0A,0x00, 0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xEE,0xFF,0x0A,0x00,0x11, 0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA,0xBB,0xCC,0xEE,0xFF,0x0A,0x00,0x11,0x22, }; static const char MAC_omac_acpkm2[] = { 0xFB,0xB8,0xDC,0xEE,0x45,0xBE,0xA6,0x7C,0x35,0xF5,0x8C,0x57,0x00,0x89,0x8E,0x5D, }; /* Some other test vectors. */ static const char etalon_M4[64] = { 0 }; static const char etalon_M5[] = { 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36, 0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x20,0x0a, 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36, 0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x20,0x0a, }; static const char etalon_M6[] = { 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36, 0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x20,0x0a, 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36, 0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x20,0x0a, 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36, 0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x20,0x0a, 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36, 0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x20,0x0a, 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36, 0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x20,0x0a, 0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36, 0x37,0x38,0x39,0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x30,0x20,0x0a, }; static const char etalon_carry[] = { 0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee, 0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee, 0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee, 0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee,0xee, 0x16,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x16, }; /* This is another carry test. */ static const char ff[] = { 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff }; struct hash_testvec { const char *algname; /* Algorithm name */ const char *name; /* Test name and source. */ const char *plaintext; /* Input (of psize), NULL for synthetic test. */ const char *digest; /* Expected output (of EVP_MD_size or truncate). */ const char *hmac; /* Expected output for HMAC tests. */ const char *key; /* MAC key.*/ int psize; /* Input (plaintext) size. */ size_t outsize; /* Compare to EVP_MD_size() / EVP_MAC_size() if non-zero. */ int truncate; /* Truncated output (digest) size. */ int key_size; /* MAC key size. */ int block_size; /* Internal block size. */ int acpkm; /* The section size N (the number of bits that are processed with one section key before this key is transformed) (bytes) */ int acpkm_t; /* Master key (change) frequency T* (bytes) */ }; static const struct hash_testvec testvecs[] = { { /* Test vectors from standards. */ .algname = SN_id_GostR3411_2012_512, .name = "M1 from RFC 6986 (10.1.1) and GOST R 34.11-2012 (А.1.1)", .plaintext = "012345678901234567890123456789012345678901234567890123456789012", .psize = 63, .digest = "\x1b\x54\xd0\x1a\x4a\xf5\xb9\xd5\xcc\x3d\x86\xd6\x8d\x28\x54\x62" "\xb1\x9a\xbc\x24\x75\x22\x2f\x35\xc0\x85\x12\x2b\xe4\xba\x1f\xfa" "\x00\xad\x30\xf8\x76\x7b\x3a\x82\x38\x4c\x65\x74\xf0\x24\xc3\x11" "\xe2\xa4\x81\x33\x2b\x08\xef\x7f\x41\x79\x78\x91\xc1\x64\x6f\x48", .outsize = 512 / 8, .block_size = 512 / 8, }, { .algname = SN_id_GostR3411_2012_256, .name = "M1 from RFC 6986 (10.1.2) and GOST R 34.11-2012 (А.1.2)", .plaintext = "012345678901234567890123456789012345678901234567890123456789012", .psize = 63, .digest = "\x9d\x15\x1e\xef\xd8\x59\x0b\x89\xda\xa6\xba\x6c\xb7\x4a\xf9\x27" "\x5d\xd0\x51\x02\x6b\xb1\x49\xa4\x52\xfd\x84\xe5\xe5\x7b\x55\x00", .outsize = 256 / 8, .block_size = 512 / 8, }, { .algname = SN_id_GostR3411_2012_512, .name = "M2 from RFC 6986 (10.2.1) and GOST R 34.11-2012 (А.2.1)", .plaintext = "\xd1\xe5\x20\xe2\xe5\xf2\xf0\xe8\x2c\x20\xd1\xf2\xf0\xe8\xe1\xee" "\xe6\xe8\x20\xe2\xed\xf3\xf6\xe8\x2c\x20\xe2\xe5\xfe\xf2\xfa\x20" "\xf1\x20\xec\xee\xf0\xff\x20\xf1\xf2\xf0\xe5\xeb\xe0\xec\xe8\x20" "\xed\xe0\x20\xf5\xf0\xe0\xe1\xf0\xfb\xff\x20\xef\xeb\xfa\xea\xfb" "\x20\xc8\xe3\xee\xf0\xe5\xe2\xfb", .psize = 72, .digest = "\x1e\x88\xe6\x22\x26\xbf\xca\x6f\x99\x94\xf1\xf2\xd5\x15\x69\xe0" "\xda\xf8\x47\x5a\x3b\x0f\xe6\x1a\x53\x00\xee\xe4\x6d\x96\x13\x76" "\x03\x5f\xe8\x35\x49\xad\xa2\xb8\x62\x0f\xcd\x7c\x49\x6c\xe5\xb3" "\x3f\x0c\xb9\xdd\xdc\x2b\x64\x60\x14\x3b\x03\xda\xba\xc9\xfb\x28", }, { .algname = SN_id_GostR3411_2012_256, .name = "M2 from RFC 6986 (10.2.2) and GOST R 34.11-2012 (А.2.2)", .plaintext = "\xd1\xe5\x20\xe2\xe5\xf2\xf0\xe8\x2c\x20\xd1\xf2\xf0\xe8\xe1\xee" "\xe6\xe8\x20\xe2\xed\xf3\xf6\xe8\x2c\x20\xe2\xe5\xfe\xf2\xfa\x20" "\xf1\x20\xec\xee\xf0\xff\x20\xf1\xf2\xf0\xe5\xeb\xe0\xec\xe8\x20" "\xed\xe0\x20\xf5\xf0\xe0\xe1\xf0\xfb\xff\x20\xef\xeb\xfa\xea\xfb" "\x20\xc8\xe3\xee\xf0\xe5\xe2\xfb", .psize = 72, .digest = "\x9d\xd2\xfe\x4e\x90\x40\x9e\x5d\xa8\x7f\x53\x97\x6d\x74\x05\xb0" "\xc0\xca\xc6\x28\xfc\x66\x9a\x74\x1d\x50\x06\x3c\x55\x7e\x8f\x50", }, /* OMAC tests */ { .algname = SN_grasshopper_mac, .name = "P from GOST R 34.13-2015 (А.1.6)", .plaintext = P, .psize = sizeof(P), .key = K, .key_size = sizeof(K), .digest = MAC_omac, .outsize = 128 / 8, .truncate = sizeof(MAC_omac), }, { .algname = SN_magma_mac, .name = "P from GOST R 34.13-2015 (А.2.6)", .plaintext = Pm, .psize = sizeof(Pm), .key = Km, .key_size = sizeof(Km), .digest = MAC_magma_omac, .outsize = 64 / 8, .truncate = sizeof(MAC_magma_omac), }, { .algname = SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac, .name = "M from R 1323565.1.017-2018 (A.4.1)", .plaintext = P_omac_acpkm1, .psize = sizeof(P_omac_acpkm1), .key = K, .key_size = sizeof(K), .acpkm = 32, .acpkm_t = 768 / 8, .digest = MAC_omac_acpkm1, .outsize = sizeof(MAC_omac_acpkm1), }, { .algname = SN_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm_omac, .name = "M from R 1323565.1.017-2018 (A.4.2)", .plaintext = P_omac_acpkm2, .psize = sizeof(P_omac_acpkm2), .key = K, .key_size = sizeof(K), .acpkm = 32, .acpkm_t = 768 / 8, .digest = MAC_omac_acpkm2, .outsize = sizeof(MAC_omac_acpkm2), }, { /* HMAC tests. */ .algname = SN_id_GostR3411_2012_512, .name = "HMAC_GOSTR3411_2012_512 from RFC 7836 (B) and R 50.1.113-2016 (A)", .plaintext = "\x01\x26\xbd\xb8\x78\x00\xaf\x21\x43\x41\x45\x65\x63\x78\x01\x00", .psize = 16, .key = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f", .key_size = 32, .hmac = "\xa5\x9b\xab\x22\xec\xae\x19\xc6\x5f\xbd\xe6\xe5\xf4\xe9\xf5\xd8" "\x54\x9d\x31\xf0\x37\xf9\xdf\x9b\x90\x55\x00\xe1\x71\x92\x3a\x77" "\x3d\x5f\x15\x30\xf2\xed\x7e\x96\x4c\xb2\xee\xdc\x29\xe9\xad\x2f" "\x3a\xfe\x93\xb2\x81\x4f\x79\xf5\x00\x0f\xfc\x03\x66\xc2\x51\xe6", }, { .algname = SN_id_GostR3411_2012_256, .name = "HMAC_GOSTR3411_2012_256 from RFC 7836 (B) and R 50.1.113-2016 (A)", .plaintext = "\x01\x26\xbd\xb8\x78\x00\xaf\x21\x43\x41\x45\x65\x63\x78\x01\x00", .psize = 16, .key = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" "\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f", .key_size = 32, .hmac = "\xa1\xaa\x5f\x7d\xe4\x02\xd7\xb3\xd3\x23\xf2\x99\x1c\x8d\x45\x34" "\x01\x31\x37\x01\x0a\x83\x75\x4f\xd0\xaf\x6d\x7c\xd4\x92\x2e\xd9", }, /* Other KATs. */ { .algname = SN_id_GostR3411_2012_512, .name = "Zero length string (M3)", .plaintext = "", .psize = 0, .digest = "\x8e\x94\x5d\xa2\x09\xaa\x86\x9f\x04\x55\x92\x85\x29\xbc\xae\x46" "\x79\xe9\x87\x3a\xb7\x07\xb5\x53\x15\xf5\x6c\xeb\x98\xbe\xf0\xa7" "\x36\x2f\x71\x55\x28\x35\x6e\xe8\x3c\xda\x5f\x2a\xac\x4c\x6a\xd2" "\xba\x3a\x71\x5c\x1b\xcd\x81\xcb\x8e\x9f\x90\xbf\x4c\x1c\x1a\x8a", .outsize = 512 / 8, }, { .algname = SN_id_GostR3411_2012_256, .name = "Zero length string (M3)", .plaintext = "", .psize = 0, .digest = "\x3f\x53\x9a\x21\x3e\x97\xc8\x02\xcc\x22\x9d\x47\x4c\x6a\xa3\x2a" "\x82\x5a\x36\x0b\x2a\x93\x3a\x94\x9f\xd9\x25\x20\x8d\x9c\xe1\xbb", .outsize = 256 / 8, }, { /* M4 */ .algname = SN_id_GostR3411_2012_512, .name = "64 bytes of zero (M4)", .plaintext = etalon_M4, .psize = sizeof(etalon_M4), .digest = "\xb0\xfd\x29\xac\x1b\x0d\xf4\x41\x76\x9f\xf3\xfd\xb8\xdc\x56\x4d" "\xf6\x77\x21\xd6\xac\x06\xfb\x28\xce\xff\xb7\xbb\xaa\x79\x48\xc6" "\xc0\x14\xac\x99\x92\x35\xb5\x8c\xb2\x6f\xb6\x0f\xb1\x12\xa1\x45" "\xd7\xb4\xad\xe9\xae\x56\x6b\xf2\x61\x14\x02\xc5\x52\xd2\x0d\xb7" }, { .algname = SN_id_GostR3411_2012_256, .name = "64 bytes of zero (M4)", .plaintext = etalon_M4, .psize = sizeof(etalon_M4), .digest = "\xdf\x1f\xda\x9c\xe8\x31\x91\x39\x05\x37\x35\x80\x31\xdb\x2e\xca" "\xa6\xaa\x54\xcd\x0e\xda\x24\x1d\xc1\x07\x10\x5e\x13\x63\x6b\x95" }, { /* M5 */ .algname = SN_id_GostR3411_2012_512, .name = "64 bytes of (M5)", .plaintext = etalon_M5, .psize = sizeof(etalon_M5), .digest = "\x36\x3b\x44\x9e\xc8\x1a\xe4\x0b\x3a\x40\x7b\x12\x5c\x3b\x1c\x2b" "\x76\x8b\x50\x49\x6b\xcb\x5f\x69\x0b\x89\xe9\x00\x7b\x06\xe4\x08" "\x41\x82\xed\x45\xd4\x07\x2a\x67\xfe\xc9\xd3\x42\x1d\xab\x01\x3d" "\xa2\xaa\xbc\x1d\x65\x28\xe8\xe7\x75\xae\xc7\xb3\x45\x7a\xc6\x75" }, { .algname = SN_id_GostR3411_2012_256, .name = "64 bytes of (M5)", .plaintext = etalon_M5, .psize = sizeof(etalon_M5), .digest = "\xf0\xa5\x57\xf6\xa0\x4a\x90\xab\x18\x11\xc1\xb6\xe9\xb0\x78\xe4" "\x16\x3b\x74\x03\x7c\x6c\xf5\x9f\x52\x44\x4a\x37\xf4\x8e\x11\xd8" }, { /* M6 */ .algname = SN_id_GostR3411_2012_512, .name = "(M6)", .plaintext = etalon_M6, .psize = sizeof(etalon_M6), .digest = "\x87\x81\xdf\xc8\x1d\x2d\xb6\xa4\x1d\x18\x57\xf3\x23\x0b\x3f\xfe" "\x2b\xda\x57\x42\x73\xea\x19\x47\x18\x9a\xaa\x54\x68\x47\x0d\xf1" "\xc4\xb3\x74\xb1\xa2\xb5\x6e\x59\xd1\x1d\x21\x3f\xea\x57\xe3\x51" "\x45\x43\xb0\xce\xd9\xb2\x0e\x55\x3a\xe6\x64\x25\xec\x90\x9c\xfd" }, { .algname = SN_id_GostR3411_2012_256, .name = "(M6)", .plaintext = etalon_M6, .psize = sizeof(etalon_M6), .digest = "\x2f\x4f\x65\x1f\xe8\x8f\xea\x46\xec\x6f\x22\x23\x72\x8d\x8d\xff" "\x39\x68\x89\x35\x58\xef\x00\xa3\x10\xc2\x3e\x7d\x19\x23\xba\x0c" }, { /* Carry */ .algname = SN_id_GostR3411_2012_512, .name = "(carry)", .plaintext = etalon_carry, .psize = sizeof(etalon_carry), .digest = "\x8b\x06\xf4\x1e\x59\x90\x7d\x96\x36\xe8\x92\xca\xf5\x94\x2f\xcd" "\xfb\x71\xfa\x31\x16\x9a\x5e\x70\xf0\xed\xb8\x73\x66\x4d\xf4\x1c" "\x2c\xce\x6e\x06\xdc\x67\x55\xd1\x5a\x61\xcd\xeb\x92\xbd\x60\x7c" "\xc4\xaa\xca\x67\x32\xbf\x35\x68\xa2\x3a\x21\x0d\xd5\x20\xfd\x41" }, { .algname = SN_id_GostR3411_2012_256, .name = "(carry)", .plaintext = etalon_carry, .psize = sizeof(etalon_carry), .digest = "\x81\xbb\x63\x2f\xa3\x1f\xcc\x38\xb4\xc3\x79\xa6\x62\xdb\xc5\x8b" "\x9b\xed\x83\xf5\x0d\x3a\x1b\x2c\xe7\x27\x1a\xb0\x2d\x25\xba\xbb" }, { /* ff (Better carry test). */ .algname = SN_id_GostR3411_2012_512, .name = "64 bytes of FF", .plaintext = ff, .psize = sizeof(ff), .digest = "\x41\x62\x9d\xe6\x77\xd7\xe8\x09\x0c\x3c\xd7\x0a\xff\xe3\x30\x0d" "\x1e\x1c\xfb\xa2\xdb\x97\x94\x5e\xc3\x7f\xeb\x4e\x13\x75\xbc\x02" "\xa5\x3f\x00\x37\x0b\x7d\x71\x5b\x07\xf3\x7f\x93\xca\xc8\x44\xef" "\xad\xbf\xd1\xb8\x5f\x9d\xda\xe3\xde\x96\x56\xc0\xe9\x5a\xff\xc7" }, { .algname = SN_id_GostR3411_2012_256, .name = "64 bytes of FF", .plaintext = ff, .psize = sizeof(ff), .digest = "\x96\x4a\x5a\xb6\x02\x86\xf1\x06\x28\x87\x43\xe2\xfe\x1a\x42\x2d" "\x16\x08\x98\xca\x1b\xd5\x35\xe8\x31\xaa\x50\x0c\xfe\x34\xd7\xe8" }, { .algname = SN_id_GostR3411_94, .name = "64 bytes of FF", .plaintext = ff, .psize = sizeof(ff), .digest = "\x58\x50\x4d\x26\xb3\x67\x7e\x75\x6b\xa3\xf4\xa9\xfd\x2f\x14\xb3" "\xba\x54\x57\x06\x6a\x4a\xa1\xd7\x00\x65\x9b\x90\xdc\xdd\xd3\xc6" }, /* Synthetic tests. */ { .algname = SN_id_GostR3411_2012_256, .name = "streebog256 synthetic test", .outsize = 32, .block_size = 64, .digest = "\xa2\xf3\x6d\x9c\x42\xa1\x1e\xad\xe3\xc1\xfe\x99\xf9\x99\xc3\x84" "\xe7\x98\xae\x24\x50\x75\x73\xd7\xfc\x99\x81\xa0\x45\x85\x41\xf6" }, { .algname = SN_id_GostR3411_2012_512, .name = "streebog512 synthetic test", .outsize = 64, .block_size = 64, .digest = "\x1d\x14\x4d\xd8\xb8\x27\xfb\x55\x1a\x5a\x7d\x03\xbb\xdb\xfa\xcb" "\x43\x6b\x5b\xc5\x77\x59\xfd\x5f\xf2\x3b\x8e\xf9\xc4\xdd\x6f\x79" "\x45\xd8\x16\x59\x9e\xaa\xbc\xf2\xb1\x4f\xd0\xe4\xf6\xad\x46\x60" "\x90\x89\xf7\x2f\x93\xd8\x85\x0c\xb0\x43\xff\x5a\xb6\xe3\x69\xbd" }, { 0 } }; static void hexdump(const void *ptr, size_t len) { const unsigned char *p = ptr; size_t i, j; for (i = 0; i < len; i += j) { for (j = 0; j < 16 && i + j < len; j++) printf("%s%02x", j? "" : " ", p[i + j]); } printf("\n"); } static int do_hmac_old(int iter, const EVP_MD *type, const char *plaintext, const struct hash_testvec *t) { unsigned int len; unsigned char md[EVP_MAX_MD_SIZE]; if (!iter) printf("[HMAC] "); HMAC_CTX *ctx; T(ctx = HMAC_CTX_new()); T(HMAC_Init_ex(ctx, t->key, t->key_size, type, NULL)); T(HMAC_Update(ctx, (const unsigned char *)plaintext, t->psize)); T(HMAC_Final(ctx, md, &len)); HMAC_CTX_free(ctx); if (t->outsize) T(len == t->outsize); if (memcmp(md, t->hmac, len) != 0) { printf(cRED "hmac mismatch (iter %d)" cNORM "\n", iter); hexdump(t->hmac, len); hexdump(md, len); return 1; } return 0; } #if OPENSSL_VERSION_MAJOR >= 3 static int do_hmac_prov(int iter, const EVP_MD *md, const char *plaintext, const struct hash_testvec *t) { size_t len; unsigned char out[EVP_MAX_MD_SIZE]; if (!iter) printf("[HMAC by EVP_MAC] "); EVP_MAC *hmac; T(hmac = EVP_MAC_fetch(NULL, "HMAC", NULL)); EVP_MAC_CTX *ctx; T(ctx = EVP_MAC_CTX_new(hmac)); OSSL_PARAM params[] = { OSSL_PARAM_utf8_string(OSSL_MAC_PARAM_DIGEST, (char *)EVP_MD_name(md), 0), OSSL_PARAM_END }; T(EVP_MAC_init(ctx, (const unsigned char *)t->key, t->key_size, params)); T(EVP_MAC_update(ctx, (unsigned char *)plaintext, t->psize)); T(EVP_MAC_final(ctx, out, &len, sizeof(out))); EVP_MAC_CTX_free(ctx); EVP_MAC_free(hmac); if (t->outsize) T(len == t->outsize); if (memcmp(out, t->hmac, len) != 0) { printf(cRED "hmac mismatch (iter %d)" cNORM "\n", iter); hexdump(t->hmac, len); hexdump(out, len); return 1; } return 0; } #endif static int do_hmac(int iter, const EVP_MD *type, const char *plaintext, const struct hash_testvec *t) { int ret; /* Test old (deprecated) and (too) new APIs. */ ret = do_hmac_old(iter, type, plaintext, t); #if OPENSSL_VERSION_MAJOR >= 3 ret |= do_hmac_prov(iter, type, plaintext, t); #endif return ret; } /* * If we have OMAC1/CMAC test vector, * use CMAC provider to test it. */ static int do_cmac_prov(int iter, const char *plaintext, const struct hash_testvec *t) { #if OPENSSL_VERSION_MAJOR >= 3 char *ciphername = NULL; /* * CMAC needs CBC. * Convert 'mac' digest to the underlying CBC cipher. */ switch (OBJ_sn2nid(t->algname)) { case NID_grasshopper_mac: ciphername = "kuznyechik-cbc"; break; case NID_magma_mac: ciphername = "magma-cbc"; break; default: return 0; } if (!iter) printf("[CMAC(%s)] ", ciphername); size_t len; unsigned char out[EVP_MAX_MD_SIZE]; size_t outsize = t->outsize; if (t->truncate) outsize = t->truncate; EVP_MAC *cmac; T(cmac = EVP_MAC_fetch(NULL, "CMAC", NULL)); EVP_MAC_CTX *ctx; T(ctx = EVP_MAC_CTX_new(cmac)); OSSL_PARAM params[] = { OSSL_PARAM_utf8_string(OSSL_MAC_PARAM_CIPHER, ciphername, 0), OSSL_PARAM_END }; T(EVP_MAC_CTX_set_params(ctx, params)); T(EVP_MAC_init(ctx, (const unsigned char *)t->key, t->key_size, params)); T(EVP_MAC_update(ctx, (unsigned char *)plaintext, t->psize)); T(EVP_MAC_final(ctx, out, &len, sizeof(out))); EVP_MAC_CTX_free(ctx); EVP_MAC_free(cmac); /* CMAC provider will not respect outsize, and will output full block. * So, just compare until what we need. */ T(outsize <= len); if (memcmp(out, t->digest, outsize) != 0) { printf(cRED "cmac mismatch (iter %d)" cNORM "\n", iter); hexdump(t->digest, outsize); hexdump(out, len); return 1; } #endif return 0; } static int do_mac(int iter, EVP_MAC *mac, const char *plaintext, const struct hash_testvec *t) { if (!iter) printf("[MAC %zu] ", t->outsize); size_t acpkm = (size_t)t->acpkm; size_t acpkm_t = (size_t)t->acpkm_t; OSSL_PARAM params[] = { OSSL_PARAM_END, OSSL_PARAM_END, OSSL_PARAM_END, OSSL_PARAM_END }; OSSL_PARAM *p = params; if (acpkm) { *p++ = OSSL_PARAM_construct_size_t("key-mesh", &acpkm); if (acpkm_t) *p++ = OSSL_PARAM_construct_size_t("cipher-key-mesh", &acpkm_t); } EVP_MAC_CTX *ctx; T(ctx = EVP_MAC_CTX_new(mac)); if (t->outsize) T(EVP_MAC_CTX_get_mac_size(ctx) == t->outsize); size_t outsize; if (t->truncate) { outsize = t->truncate; *p++ = OSSL_PARAM_construct_size_t("size", &outsize); } else outsize = EVP_MAC_CTX_get_mac_size(ctx); T(EVP_MAC_init(ctx, (const unsigned char *)t->key, t->key_size, NULL)); T(EVP_MAC_CTX_set_params(ctx, params)); T(EVP_MAC_update(ctx, (unsigned char *)plaintext, t->psize)); size_t len = 0; unsigned char out[256]; if (t->truncate) { T(outsize <= sizeof(out)); T(EVP_MAC_finalXOF(ctx, out, outsize)); len = outsize; } else { T(EVP_MAC_CTX_get_mac_size(ctx) == outsize); T(EVP_MAC_final(ctx, out, &len, sizeof(out))); } EVP_MAC_CTX_free(ctx); T(len == outsize); if (memcmp(out, t->digest, outsize) != 0) { printf(cRED "mac mismatch (iter %d, outsize %d)" cNORM "\n", iter, (int)outsize); hexdump(t->digest, outsize); hexdump(out, outsize); return 1; } return 0; } static int do_digest(int iter, const EVP_MD *type, const char *plaintext, const struct hash_testvec *t) { if (!iter) printf("[MD %zu] ", t->outsize); if (t->outsize) T(EVP_MD_size(type) == t->outsize); size_t outsize; if (t->truncate) outsize = t->truncate; else outsize = EVP_MD_size(type); if (t->block_size) T(EVP_MD_block_size(type) == t->block_size); EVP_MD_CTX *ctx; T(ctx = EVP_MD_CTX_new()); T(EVP_MD_CTX_init(ctx)); T(EVP_DigestInit_ex(ctx, type, NULL)); if (t->key) T(EVP_MD_CTX_ctrl(ctx, EVP_MD_CTRL_SET_KEY, t->key_size, (void *)t->key)); if (t->acpkm) T(EVP_MD_CTX_ctrl(ctx, EVP_CTRL_KEY_MESH, t->acpkm, t->acpkm_t? (void *)&t->acpkm_t : NULL)); T(EVP_DigestUpdate(ctx, plaintext, t->psize)); unsigned int len; unsigned char out[EVP_MAX_MD_SIZE]; if (EVP_MD_flags(EVP_MD_CTX_md(ctx)) & EVP_MD_FLAG_XOF) { T(EVP_DigestFinalXOF(ctx, out, outsize)); len = outsize; } else { T(EVP_MD_CTX_size(ctx) == outsize); T(EVP_DigestFinal_ex(ctx, out, &len)); } EVP_MD_CTX_free(ctx); T(len == outsize); if (memcmp(out, t->digest, outsize) != 0) { printf(cRED "digest mismatch (iter %d, outsize %d)" cNORM "\n", iter, (int)outsize); hexdump(t->digest, outsize); hexdump(out, outsize); return 1; } return 0; } static int do_test(const struct hash_testvec *tv) { int ret = 0; EVP_MD *md = NULL; EVP_MAC *mac = NULL; ERR_set_mark(); T((md = (EVP_MD *)EVP_get_digestbyname(tv->algname)) || (md = EVP_MD_fetch(NULL, tv->algname, NULL)) || (mac = EVP_MAC_fetch(NULL, tv->algname, NULL))); ERR_pop_to_mark(); printf(cBLUE "Test %s: %s: " cNORM, tv->algname, tv->name); /* Test alignment problems. */ int shifts = 32; int i; char *buf; T(buf = OPENSSL_malloc(tv->psize + shifts)); for (i = 0; i < shifts; i++) { memcpy(buf + i, tv->plaintext, tv->psize); if (mac) { ret |= do_mac(i, mac, buf + i, tv); } if (md) { if (tv->hmac) ret |= do_hmac(i, md, buf + i, tv); else ret |= do_digest(i, md, buf + i, tv); } /* Test CMAC provider for applicable entries. */ ret |= do_cmac_prov(i, buf + i, tv); /* No need to continue loop on failure. */ if (ret) break; } OPENSSL_free(buf); EVP_MAC_free(mac); EVP_MD_free(md); if (!ret) printf(cGREEN "success" cNORM "\n"); else printf(cRED "fail" cNORM "\n"); return ret; } #define SUPER_SIZE 256 /* * For 256-byte buffer filled with 256 bytes from 0 to 255; * Digest them 256 times from the buffer end with lengths from 0 to 256, * and from beginning of the buffer with lengths from 0 to 256; * Each produced digest is digested again into final sum. */ static int do_synthetic_once(const struct hash_testvec *tv, unsigned int shifts) { unsigned char *ibuf, *md; T(ibuf = OPENSSL_zalloc(SUPER_SIZE + shifts)); /* fill with pattern */ unsigned int len; for (len = 0; len < SUPER_SIZE; len++) ibuf[shifts + len] = len & 0xff; EVP_MD *dgst; T((dgst = (EVP_MD *)EVP_get_digestbyname(tv->algname)) || (dgst = EVP_MD_fetch(NULL, tv->algname, NULL))); OPENSSL_assert(EVP_MD_is_a(dgst, tv->algname)); EVP_MD_CTX *ctx, *ctx2; T(ctx = EVP_MD_CTX_new()); T(ctx2 = EVP_MD_CTX_new()); T(EVP_DigestInit(ctx2, dgst)); OPENSSL_assert(EVP_MD_is_a(EVP_MD_CTX_md(ctx2), tv->algname)); OPENSSL_assert(EVP_MD_block_size(dgst) == tv->block_size); OPENSSL_assert(EVP_MD_CTX_size(ctx2) == tv->outsize); OPENSSL_assert(EVP_MD_CTX_block_size(ctx2) == tv->block_size); const unsigned int mdlen = EVP_MD_size(dgst); OPENSSL_assert(mdlen == tv->outsize); T(md = OPENSSL_zalloc(mdlen + shifts)); md += shifts; /* test for output digest alignment problems */ /* digest cycles */ for (len = 0; len < SUPER_SIZE; len++) { /* for each len digest len bytes from the end of buf */ T(EVP_DigestInit(ctx, dgst)); T(EVP_DigestUpdate(ctx, ibuf + shifts + SUPER_SIZE - len, len)); T(EVP_DigestFinal(ctx, md, NULL)); T(EVP_DigestUpdate(ctx2, md, mdlen)); } for (len = 0; len < SUPER_SIZE; len++) { /* for each len digest len bytes from the beginning of buf */ T(EVP_DigestInit(ctx, dgst)); T(EVP_DigestUpdate(ctx, ibuf + shifts, len)); T(EVP_DigestFinal(ctx, md, NULL)); T(EVP_DigestUpdate(ctx2, md, mdlen)); } OPENSSL_free(ibuf); EVP_MD_CTX_free(ctx); T(EVP_DigestFinal(ctx2, md, &len)); EVP_MD_CTX_free(ctx2); EVP_MD_free(dgst); if (len != mdlen) { printf(cRED "digest output len mismatch %u != %u (expected)" cNORM "\n", len, mdlen); goto err; } if (memcmp(md, tv->digest, mdlen) != 0) { printf(cRED "digest mismatch" cNORM "\n"); unsigned int i; printf(" Expected value is: "); for (i = 0; i < mdlen; i++) printf("\\x%02x", md[i]); printf("\n"); goto err; } OPENSSL_free(md - shifts); return 0; err: OPENSSL_free(md - shifts); EVP_MD_free(dgst); return 1; } /* do different block sizes and different memory offsets */ static int do_synthetic_test(const struct hash_testvec *tv) { int ret = 0; printf(cBLUE "Test %s: " cNORM, tv->name); fflush(stdout); unsigned int shifts; for (shifts = 0; shifts < 16 && !ret; shifts++) ret |= do_synthetic_once(tv, shifts); if (!ret) printf(cGREEN "success" cNORM "\n"); else printf(cRED "fail" cNORM "\n"); return 0; } int engine_is_available(const char *name) { ENGINE *e = ENGINE_get_first(); while (e != NULL) { if (strcmp(ENGINE_get_id(e), name) == 0) break; e = ENGINE_get_next(e); } ENGINE_free(e); return e != NULL; } void warn_if_untested(const EVP_MD *dgst, void *provider) { const struct hash_testvec *tv; /* ENGINE provided EVP_MDs have a NULL provider */ if (provider != EVP_MD_get0_provider(dgst)) return; for (tv = testvecs; tv->algname; tv++) if (EVP_MD_is_a(dgst, tv->algname)) break; if (!tv->algname) printf(cMAGENT "Digest %s is untested!" cNORM "\n", EVP_MD_name(dgst)); } void warn_all_untested(void) { if (engine_is_available("gost")) { ENGINE *eng; T(eng = ENGINE_by_id("gost")); T(ENGINE_init(eng)); ENGINE_DIGESTS_PTR fn_c; T(fn_c = ENGINE_get_digests(eng)); const int *nids; int n, k; n = fn_c(eng, NULL, &nids, 0); for (k = 0; k < n; ++k) warn_if_untested(ENGINE_get_digest(eng, nids[k]), NULL); ENGINE_finish(eng); ENGINE_free(eng); } if (OSSL_PROVIDER_available(NULL, "gostprov")) { OSSL_PROVIDER *prov; T(prov = OSSL_PROVIDER_load(NULL, "gostprov")); EVP_MD_do_all_provided(NULL, (void (*)(EVP_MD *, void *))warn_if_untested, prov); OSSL_PROVIDER_unload(prov); } } int main(int argc, char **argv) { int ret = 0; #if MIPSEL /* Trigger SIGBUS for unaligned access. */ sysmips(MIPS_FIXADE, 0); #endif OPENSSL_add_all_algorithms_conf(); const struct hash_testvec *tv; for (tv = testvecs; tv->algname; tv++) { if (tv->plaintext) ret |= do_test(tv); else ret |= do_synthetic_test(tv); } warn_all_untested(); if (ret) printf(cDRED "= Some tests FAILED!" cNORM "\n"); else printf(cDGREEN "= All tests passed!" cNORM "\n"); return ret; } libengine-gost-openssl-3.0.2/test_gost2814789.c000066400000000000000000001617061446070765000210750ustar00rootroot00000000000000/* vim: set fileencoding=ascii : Charset: ASCII */ /* test/gostr2814789t.c */ /* ==================================================================== * Copyright (c) 2012 Crypto-Pro, Ltd., Serguei E. Leontiev, * lse@cryptopro.ru * * This file is distributed under the same license as OpenSSL * ==================================================================== */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif #include #include #include #include #include #include #include #include #include #define CCGOST_ID "gost" #define CCGOST_DIR "." #include "gost89.h" #define G89_MAX_TC_LEN (2048) #define G89_BLOCK_LEN (8) typedef enum g89_mode_ { G89_ECB, G89_CFB, G89_CNT, G89_IMIT } g89_mode; typedef struct g89_tc_ { unsigned long long ullLen; // ullLen > G89_MAX_TC_LEN // Clear text ullLen // of zero bytes const byte bIn[G89_MAX_TC_LEN]; // Clear text, when // ullLen <= G89_MAX_TC_LEN const char *szParamSet; // S-Box ID const char *szDerive; // String for derive bRawKey const byte bRawKey[EVP_MAX_KEY_LENGTH]; g89_mode gMode; // Mode of encryption or MAC const byte bIV[EVP_MAX_IV_LENGTH]; // IV for CFB or CNT mode const byte bOut[G89_MAX_TC_LEN]; // Cipher text for ECB/CFB/CNT // mode, when ullLen <= G89_MAX_TC_LEN; // Last 16 byte of cipher text for // ECB/CFB/CNT, when ullLen > // G89_MAX_TC_LEN; // 4 byte MAC for imitovstavka } g89_tc; const g89_tc tcs[] = { /* * GOST R 34.11-94 Test cases */ { /* see p. A.3.1 [GOSTR341194], p. 7.3.1 [ENG-GOSTR341194] */ /* */ /* Iteration 1, K[1], see Errata for RFC 5831 */ 8, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, "id-GostR3410-94-TestParamSet", NULL, { 0x54, 0x6d, 0x20, 0x33, 0x68, 0x65, 0x6c, 0x32, 0x69, 0x73, 0x65, 0x20, 0x73, 0x73, 0x6e, 0x62, 0x20, 0x61, 0x67, 0x79, 0x69, 0x67, 0x74, 0x74, 0x73, 0x65, 0x68, 0x65, 0x20, 0x2c, 0x3d, 0x73 }, G89_ECB, { 0 }, { 0x1b, 0x0b, 0xbc, 0x32, 0xce, 0xbc, 0xab, 0x42 } }, { /* see p. A.3.1 [GOSTR341194], p. 7.3.1 [ENG-GOSTR341194] */ /* */ /* Iteration 1, K[4] */ 8, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, "id-GostR3410-94-TestParamSet", NULL, { 0xec, 0x0a, 0x8b, 0xa1, 0x5e, 0xc0, 0x04, 0xa8, 0xba, 0xc5, 0x0c, 0xac, 0x0c, 0x62, 0x1d, 0xee, 0xe1, 0xc7, 0xb8, 0xe7, 0x00, 0x7a, 0xe2, 0xec, 0xf2, 0x73, 0x1b, 0xff, 0x4e, 0x80, 0xe2, 0xa0 }, G89_ECB, { 0 }, { 0x2d, 0x56, 0x2a, 0x0d, 0x19, 0x04, 0x86, 0xe7 } }, { /* see p. A.3.1 [GOSTR341194], p. 7.3.1 [ENG-GOSTR341194] */ /* */ /* Iteration 2, K[1] */ 8, { 0x34, 0xc0, 0x15, 0x33, 0xe3, 0x7d, 0x1c, 0x56 }, "id-GostR3410-94-TestParamSet", NULL, { 0x34, 0x87, 0x24, 0xa4, 0xc1, 0xa6, 0x76, 0x67, 0x15, 0x3d, 0xde, 0x59, 0x33, 0x88, 0x42, 0x50, 0xe3, 0x24, 0x8c, 0x65, 0x7d, 0x41, 0x3b, 0x8c, 0x1c, 0x9c, 0xa0, 0x9a, 0x56, 0xd9, 0x68, 0xcf }, G89_ECB, { 0 }, { 0x86, 0x3e, 0x78, 0xdd, 0x2d, 0x60, 0xd1, 0x3c } }, /* * id-Gost28147-89-CryptoPro-A-ParamSet (1.2.643.2.2.31.1) * Test cases */ { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 16, { 0x74, 0x3d, 0x76, 0xf9, 0x1b, 0xee, 0x35, 0x3c, 0xa2, 0x5c, 0x3b, 0x10, 0xeb, 0x64, 0xcf, 0xf5 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "testecb1", { 0xbb, 0xf1, 0xed, 0xd3, 0x20, 0xaf, 0x8a, 0x62, 0x8e, 0x11, 0xc8, 0xa9, 0x51, 0xcc, 0xbe, 0x81, 0x47, 0x7b, 0x41, 0xa1, 0x6a, 0xf6, 0x7f, 0x05, 0xe8, 0x51, 0x2f, 0x9e, 0x01, 0xf8, 0xcf, 0x49 }, G89_ECB, { 0 }, { 0xc3, 0x73, 0x90, 0x95, 0x35, 0x58, 0x08, 0x63, 0xcb, 0x68, 0x85, 0x96, 0x77, 0xe8, 0xfb, 0xa9 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 16, { 0xd2, 0xfd, 0xf8, 0x3a, 0xc1, 0xb4, 0x39, 0x23, 0x2e, 0xaa, 0xcc, 0x98, 0x0a, 0x02, 0xda, 0x33 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "testcfb1", { 0x8d, 0x5a, 0x2c, 0x83, 0xa7, 0xc7, 0x0a, 0x61, 0xd6, 0x1b, 0x34, 0xb5, 0x1f, 0xdf, 0x42, 0x68, 0x66, 0x71, 0xa3, 0x5d, 0x87, 0x4c, 0xfd, 0x84, 0x99, 0x36, 0x63, 0xb6, 0x1e, 0xd6, 0x0d, 0xad }, G89_CFB, { 0x46, 0x60, 0x6f, 0x0d, 0x88, 0x34, 0x23, 0x5a }, { 0x88, 0xb7, 0x75, 0x16, 0x74, 0xa5, 0xee, 0x2d, 0x14, 0xfe, 0x91, 0x67, 0xd0, 0x5c, 0xcc, 0x40 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 16, { 0x90, 0xa2, 0x39, 0x66, 0xae, 0x01, 0xb9, 0xa3, 0x52, 0x4e, 0xc8, 0xed, 0x6c, 0xdd, 0x88, 0x30 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "testcnt1", { 0x59, 0x9f, 0x84, 0xba, 0xc3, 0xf3, 0xd2, 0xf1, 0x60, 0xe1, 0xe3, 0xf2, 0x6a, 0x96, 0x1a, 0xf9, 0x9c, 0x48, 0xb2, 0x4e, 0xbc, 0xbb, 0xbf, 0x7c, 0xd8, 0xf3, 0xac, 0xcd, 0x96, 0x8d, 0x28, 0x6a }, G89_CNT, { 0x8d, 0xaf, 0xa8, 0xd1, 0x58, 0xed, 0x05, 0x8d }, { 0x6e, 0x72, 0x62, 0xcc, 0xe3, 0x59, 0x36, 0x90, 0x83, 0x3a, 0xfe, 0xa9, 0x1b, 0xc9, 0xbe, 0xce } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 16, { 0xb5, 0xa1, 0xf0, 0xe3, 0xce, 0x2f, 0x02, 0x1d, 0x67, 0x61, 0x94, 0x34, 0x5c, 0x41, 0xe3, 0x6e }, "id-Gost28147-89-CryptoPro-A-ParamSet", "testimit1", { 0x9d, 0x05, 0xb7, 0x9e, 0x90, 0xca, 0xd0, 0x0a, 0x2c, 0xda, 0xd2, 0x2e, 0xf4, 0xe8, 0x6f, 0x5c, 0xf5, 0xdc, 0x37, 0x68, 0x19, 0x85, 0xb3, 0xbf, 0xaa, 0x18, 0xc1, 0xc3, 0x05, 0x0a, 0x91, 0xa2 }, G89_IMIT, { 0 }, { 0xf8, 0x1f, 0x08, 0xa3 } }, /* * Other paramsets and key meshing test cases. */ { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 1039, { 0x8c, 0x9c, 0x44, 0x35, 0xfb, 0xe9, 0xa5, 0xa3, 0xa0, 0xae, 0x28, 0x56, 0x91, 0x10, 0x8e, 0x1e , 0xd2, 0xbb, 0x18, 0x53, 0x81, 0x27, 0x0d, 0xa6, 0x68, 0x59, 0x36, 0xc5, 0x81, 0x62, 0x9a, 0x8e, 0x7d, 0x50, 0xf1, 0x6f, 0x97, 0x62, 0x29, 0xec, 0x80, 0x51, 0xe3, 0x7d, 0x6c, 0xc4, 0x07, 0x95, 0x28, 0x63, 0xdc, 0xb4, 0xb9, 0x2d, 0xb8, 0x13, 0xb1, 0x05, 0xb5, 0xf9, 0xeb, 0x75, 0x37, 0x4e, 0xf7, 0xbf, 0x51, 0xf1, 0x98, 0x86, 0x43, 0xc4, 0xe4, 0x3d, 0x3e, 0xa7, 0x62, 0xec, 0x41, 0x59, 0xe0, 0xbd, 0xfb, 0xb6, 0xfd, 0xec, 0xe0, 0x77, 0x13, 0xd2, 0x59, 0x90, 0xa1, 0xb8, 0x97, 0x6b, 0x3d, 0x8b, 0x7d, 0xfc, 0x9d, 0xca, 0x82, 0x73, 0x32, 0x70, 0x0a, 0x74, 0x03, 0xc6, 0x0c, 0x26, 0x7f, 0x56, 0xf0, 0x9d, 0xb2, 0xeb, 0x71, 0x40, 0xd7, 0xc3, 0xb1, 0xa7, 0xc5, 0x1e, 0x20, 0x17, 0xb3, 0x50, 0x1d, 0x8a, 0x6e, 0x19, 0xcb, 0xbe, 0x20, 0x86, 0x2b, 0xd6, 0x1c, 0xfd, 0xb4, 0xb7, 0x5d, 0x9a, 0xb3, 0xe3, 0x7d, 0x15, 0x7a, 0x35, 0x01, 0x9f, 0x5d, 0x65, 0x89, 0x4b, 0x34, 0xc6, 0xf4, 0x81, 0x3f, 0x78, 0x30, 0xcf, 0xe9, 0x15, 0x90, 0x9a, 0xf9, 0xde, 0xba, 0x63, 0xd0, 0x19, 0x14, 0x66, 0x3c, 0xb9, 0xa4, 0xb2, 0x84, 0x94, 0x02, 0xcf, 0xce, 0x20, 0xcf, 0x76, 0xe7, 0xc5, 0x48, 0xf7, 0x69, 0x3a, 0x5d, 0xec, 0xaf, 0x41, 0xa7, 0x12, 0x64, 0x83, 0xf5, 0x99, 0x1e, 0x9e, 0xb2, 0xab, 0x86, 0x16, 0x00, 0x23, 0x8e, 0xe6, 0xd9, 0x80, 0x0b, 0x6d, 0xc5, 0x93, 0xe2, 0x5c, 0x8c, 0xd8, 0x5e, 0x5a, 0xae, 0x4a, 0x85, 0xfd, 0x76, 0x01, 0xea, 0x30, 0xf3, 0x78, 0x34, 0x10, 0x72, 0x51, 0xbc, 0x9f, 0x76, 0xce, 0x1f, 0xd4, 0x8f, 0x33, 0x50, 0x34, 0xc7, 0x4d, 0x7b, 0xcf, 0x91, 0x63, 0x7d, 0x82, 0x9e, 0xa1, 0x23, 0x45, 0xf5, 0x45, 0xac, 0x98, 0x7a, 0x48, 0xff, 0x64, 0xd5, 0x59, 0x47, 0xde, 0x2b, 0x3f, 0xfa, 0xec, 0x50, 0xe0, 0x81, 0x60, 0x8b, 0xc3, 0xfc, 0x80, 0x98, 0x17, 0xc7, 0xa3, 0xc2, 0x57, 0x3d, 0xab, 0x91, 0x67, 0xf5, 0xc4, 0xab, 0x92, 0xc8, 0xd6, 0x3b, 0x6b, 0x3f, 0xff, 0x15, 0x6b, 0xcf, 0x53, 0x65, 0x02, 0xf1, 0x74, 0xca, 0xa9, 0xbe, 0x24, 0xd2, 0xf0, 0xb7, 0x26, 0xa8, 0xd7, 0x6d, 0xed, 0x90, 0x36, 0x7b, 0x3e, 0x41, 0xa9, 0x7f, 0xa3, 0x1b, 0xf4, 0x43, 0xc5, 0x51, 0xbe, 0x28, 0x59, 0xe9, 0x45, 0x26, 0x49, 0x38, 0x32, 0xf8, 0xf3, 0x92, 0x6e, 0x30, 0xcc, 0xb0, 0xa0, 0xf9, 0x01, 0x14, 0xc8, 0xba, 0xd9, 0xf0, 0x2a, 0x29, 0xe2, 0x52, 0x9a, 0x76, 0x95, 0x3a, 0x16, 0x32, 0xec, 0xf4, 0x10, 0xec, 0xee, 0x47, 0x00, 0x70, 0x19, 0xe4, 0x72, 0x35, 0x66, 0x44, 0x53, 0x2d, 0xa2, 0xf3, 0xaa, 0x7e, 0x8a, 0x33, 0x13, 0xcd, 0xc8, 0xbf, 0x0e, 0x40, 0x90, 0x00, 0xe4, 0x42, 0xc3, 0x09, 0x84, 0xe1, 0x66, 0x17, 0xa2, 0xaf, 0x03, 0xab, 0x6b, 0xa1, 0xec, 0xfb, 0x17, 0x72, 0x81, 0xfe, 0x9a, 0x9f, 0xf4, 0xb2, 0x33, 0x1f, 0xae, 0x0c, 0xd1, 0x6a, 0xae, 0x19, 0xb8, 0xaf, 0xec, 0xe3, 0xea, 0x00, 0xf8, 0xac, 0x87, 0x07, 0x5f, 0x6d, 0xb0, 0xac, 0x6b, 0x22, 0x48, 0x36, 0xbf, 0x22, 0x18, 0xb0, 0x03, 0x9f, 0x6c, 0x70, 0x45, 0x36, 0xf0, 0x6b, 0xc6, 0xc2, 0xa5, 0x72, 0x2c, 0xd8, 0xe0, 0x27, 0x3d, 0xec, 0x56, 0x07, 0x05, 0x7d, 0x83, 0xa1, 0x65, 0x7d, 0x41, 0x5b, 0xcd, 0x77, 0x24, 0xe5, 0xaa, 0x76, 0x47, 0xd0, 0x50, 0xf6, 0xe7, 0xb5, 0x59, 0x75, 0x31, 0x27, 0xef, 0xd8, 0xa6, 0x4e, 0x7f, 0xb8, 0x40, 0xb1, 0xdf, 0x53, 0x14, 0xed, 0xf1, 0x68, 0x5f, 0xfc, 0x3f, 0x02, 0xdb, 0x05, 0xeb, 0x31, 0xe4, 0x2c, 0x7f, 0x32, 0xb5, 0x70, 0x8e, 0x75, 0x85, 0xa4, 0x5c, 0x16, 0x23, 0x37, 0xf2, 0x10, 0x79, 0xcb, 0xdc, 0xf8, 0x1c, 0x25, 0xc2, 0xa1, 0x3d, 0x9c, 0x33, 0x6c, 0xed, 0xc3, 0xe7, 0xf3, 0x02, 0x87, 0x82, 0x4e, 0xfb, 0xac, 0xb3, 0x2d, 0xfc, 0xf8, 0x0d, 0x1d, 0x4a, 0x39, 0xd4, 0xb3, 0x09, 0xbb, 0xe9, 0x25, 0xc7, 0xec, 0x6a, 0x87, 0x72, 0x84, 0xed, 0x12, 0x60, 0x19, 0x64, 0xeb, 0x16, 0x2a, 0x5b, 0x10, 0x76, 0x27, 0xff, 0x7b, 0xe4, 0xae, 0xe5, 0xa4, 0x04, 0x02, 0x7f, 0xbb, 0x0a, 0xb5, 0xf4, 0x05, 0xa5, 0x56, 0x1c, 0x53, 0x31, 0x7a, 0x93, 0xba, 0x16, 0x15, 0xab, 0x62, 0x60, 0xfc, 0xde, 0x72, 0x36, 0x6e, 0x28, 0xaf, 0x98, 0x0d, 0xe6, 0xf4, 0xde, 0x60, 0xa7, 0x7e, 0x06, 0x07, 0x86, 0xf3, 0x94, 0xb6, 0x6d, 0x0d, 0x93, 0xa6, 0xbc, 0x60, 0x70, 0x33, 0xac, 0x3f, 0xa1, 0xa8, 0x4a, 0x20, 0x61, 0xb6, 0xb5, 0x43, 0xa3, 0x15, 0x5a, 0x00, 0xbe, 0x76, 0x98, 0x57, 0x72, 0xab, 0x7a, 0x0e, 0x18, 0x93, 0x82, 0x3a, 0x18, 0x78, 0x6e, 0x71, 0x7b, 0x78, 0x4f, 0x7e, 0x8c, 0xde, 0x7a, 0x62, 0xb5, 0x0a, 0x7c, 0x45, 0x1d, 0x16, 0xd5, 0xc3, 0x8c, 0x9b, 0x25, 0xb4, 0x50, 0x90, 0xcd, 0x96, 0x93, 0xad, 0x0f, 0xd4, 0x43, 0xcb, 0x49, 0x0f, 0xfc, 0x5a, 0x31, 0xf4, 0x19, 0xb7, 0xd4, 0xeb, 0x4d, 0x40, 0x58, 0xd0, 0x3b, 0xc8, 0xe0, 0x4a, 0x54, 0x2f, 0xdb, 0x22, 0xc3, 0x29, 0x7b, 0x40, 0x90, 0x61, 0x43, 0xd3, 0x7e, 0xe2, 0x30, 0x2b, 0x48, 0x3c, 0xce, 0x90, 0x93, 0xb1, 0x8b, 0x31, 0x96, 0x65, 0x6d, 0x57, 0x8b, 0x9d, 0x4d, 0x53, 0xf0, 0x83, 0x1c, 0xe5, 0xa1, 0x9d, 0x55, 0xe3, 0xbf, 0x7e, 0xca, 0x1a, 0x74, 0x66, 0x14, 0xcc, 0x47, 0x43, 0xd9, 0xbb, 0xef, 0x97, 0x7d, 0xb7, 0x6e, 0xff, 0xf1, 0x22, 0xf8, 0x10, 0x2d, 0x3f, 0xcd, 0x49, 0x96, 0xd9, 0x09, 0x11, 0xb8, 0x33, 0xd0, 0x23, 0x9a, 0xfa, 0x16, 0xcb, 0x50, 0x26, 0x57, 0x24, 0x5c, 0x0e, 0xba, 0xf0, 0x3f, 0x37, 0x2f, 0xa3, 0xf7, 0x18, 0x57, 0x48, 0x48, 0x95, 0xcf, 0xef, 0x87, 0x67, 0x2a, 0xe9, 0xb6, 0x8a, 0x21, 0x36, 0x7f, 0xff, 0x48, 0x6c, 0x46, 0x35, 0x57, 0xf2, 0xbc, 0x48, 0x67, 0x8f, 0x63, 0x23, 0x78, 0x11, 0x2b, 0xc2, 0x08, 0xde, 0x51, 0xe8, 0x8b, 0x92, 0x29, 0xf9, 0x9a, 0x9e, 0xad, 0xed, 0x0f, 0xeb, 0xa2, 0xd2, 0x40, 0x92, 0xd4, 0xde, 0x62, 0x95, 0x76, 0xfd, 0x6e, 0x3c, 0xbf, 0xc0, 0xd7, 0x0d, 0xe5, 0x1b, 0xa4, 0xc7, 0x18, 0xe1, 0x58, 0xa4, 0x56, 0xef, 0x2e, 0x17, 0x1b, 0x75, 0xcb, 0xbc, 0xf9, 0x2a, 0x95, 0x71, 0xa7, 0x1d, 0x7f, 0xe7, 0x73, 0x63, 0x05, 0x6b, 0x19, 0x4c, 0xf4, 0x22, 0x14, 0xc4, 0x59, 0x88, 0x66, 0x92, 0x86, 0x61, 0x5c, 0x6a, 0xae, 0xec, 0x58, 0xff, 0xc9, 0xf2, 0x44, 0xd4, 0xa2, 0xf5, 0x98, 0xeb, 0x5f, 0x09, 0xbc, 0x8a, 0xbf, 0x3c, 0xb4, 0x3e, 0xb1, 0x20, 0x05, 0x44, 0x96, 0x79, 0x0a, 0x40, 0x92, 0x7f, 0x9d, 0xd1, 0xaf, 0xbc, 0x90, 0x95, 0x0a, 0x81, 0xd4, 0xa7, 0xc6, 0xb8, 0xe0, 0xe4, 0x39, 0x30, 0x1d, 0x79, 0xc0, 0xe5, 0xfa, 0xb4, 0xe9, 0x63, 0xb4, 0x09, 0x72, 0x3b, 0x3e, 0xd9, 0xf6, 0xd9, 0x10, 0x21, 0x18, 0x7e, 0xe5, 0xad, 0x81, 0xd7, 0xd5, 0x82, 0xd0, 0x8c, 0x3b, 0x38, 0x95, 0xf8, 0x92, 0x01, 0xa9, 0x92, 0x00, 0x70, 0xd1, 0xa7, 0x88, 0x77, 0x1f, 0x3a, 0xeb, 0xb5, 0xe4, 0xf5, 0x9d, 0xc7, 0x37, 0x86, 0xb2, 0x12, 0x46, 0x34, 0x19, 0x72, 0x8c, 0xf5, 0x8c, 0xf6, 0x78, 0x98, 0xe0, 0x7c, 0xd3, 0xf4 }, "id-Gost28147-89-CryptoPro-B-ParamSet", "testcfb2", { 0x48, 0x0c, 0x74, 0x1b, 0x02, 0x6b, 0x55, 0xd5, 0xb6, 0x6d, 0xd7, 0x1d, 0x40, 0x48, 0x05, 0x6b, 0x6d, 0xeb, 0x3c, 0x29, 0x0f, 0x84, 0x80, 0x23, 0xee, 0x0d, 0x47, 0x77, 0xe3, 0xfe, 0x61, 0xc9 }, G89_CFB, { 0x1f, 0x3f, 0x82, 0x1e, 0x0d, 0xd8, 0x1e, 0x22 }, { 0x23, 0xc6, 0x7f, 0x20, 0xa1, 0x23, 0x58, 0xbc, 0x7b, 0x05, 0xdb, 0x21, 0x15, 0xcf, 0x96, 0x41, 0xc7, 0x88, 0xef, 0x76, 0x5c, 0x49, 0xdb, 0x42, 0xbf, 0xf3, 0xc0, 0xf5, 0xbd, 0x5d, 0xd9, 0x8e, 0xaf, 0x3d, 0xf4, 0xe4, 0xda, 0x88, 0xbd, 0xbc, 0x47, 0x5d, 0x76, 0x07, 0xc9, 0x5f, 0x54, 0x1d, 0x1d, 0x6a, 0xa1, 0x2e, 0x18, 0xd6, 0x60, 0x84, 0x02, 0x18, 0x37, 0x92, 0x92, 0x15, 0xab, 0x21, 0xee, 0x21, 0xcc, 0x71, 0x6e, 0x51, 0xd9, 0x2b, 0xcc, 0x81, 0x97, 0x3f, 0xeb, 0x45, 0x99, 0xb8, 0x1b, 0xda, 0xff, 0x90, 0xd3, 0x41, 0x06, 0x9c, 0x3f, 0xfb, 0xe4, 0xb2, 0xdc, 0xc9, 0x03, 0x0d, 0xa7, 0xae, 0xd7, 0x7d, 0x02, 0xb8, 0x32, 0xab, 0xf3, 0x65, 0xa3, 0x65, 0x6c, 0x4e, 0xe4, 0xa2, 0x5e, 0x9e, 0xee, 0xcd, 0xde, 0x79, 0x36, 0x6b, 0x1b, 0xe1, 0x3c, 0xdf, 0x10, 0xad, 0x4f, 0x02, 0xe1, 0x14, 0xaa, 0x09, 0xb4, 0x0b, 0x76, 0xeb, 0x69, 0x38, 0x20, 0x02, 0xcb, 0x8e, 0xc0, 0xdf, 0xca, 0x48, 0x74, 0xc3, 0x31, 0xad, 0x42, 0x2c, 0x51, 0x9b, 0xd0, 0x6a, 0xc1, 0x36, 0xd7, 0x21, 0xdf, 0xb0, 0x45, 0xba, 0xca, 0x7f, 0x35, 0x20, 0x28, 0xbb, 0xc1, 0x76, 0xfd, 0x43, 0x5d, 0x23, 0x7d, 0x31, 0x84, 0x1a, 0x97, 0x4d, 0x83, 0xaa, 0x7e, 0xf1, 0xc4, 0xe6, 0x83, 0xac, 0x0d, 0xef, 0xef, 0x3c, 0xa4, 0x7c, 0x48, 0xe4, 0xc8, 0xca, 0x0d, 0x7d, 0xea, 0x7c, 0x45, 0xd7, 0x73, 0x50, 0x25, 0x1d, 0x01, 0xc4, 0x02, 0x1a, 0xcd, 0xe0, 0x38, 0x5b, 0xa8, 0x5a, 0x16, 0x9a, 0x10, 0x59, 0x74, 0xd7, 0x19, 0xc6, 0xf3, 0xb5, 0x17, 0xf6, 0x59, 0x8d, 0x62, 0xaf, 0x44, 0xe8, 0xdc, 0xe9, 0xc1, 0x76, 0xf1, 0xd0, 0xbd, 0x29, 0xd7, 0xec, 0x1d, 0xac, 0x57, 0xdb, 0x1a, 0x3f, 0xd8, 0xf6, 0x6e, 0xb6, 0xe6, 0xdf, 0x36, 0xe7, 0x89, 0xce, 0x56, 0x35, 0x43, 0x1c, 0x7d, 0x57, 0x79, 0x0e, 0xd8, 0xf4, 0xd7, 0xa7, 0x0d, 0xc6, 0x8f, 0x91, 0x66, 0x67, 0x82, 0x0f, 0x49, 0xc9, 0xc5, 0x65, 0x81, 0xa1, 0x39, 0x5a, 0x53, 0x9f, 0x02, 0xa5, 0xd5, 0x36, 0x22, 0xa8, 0xa8, 0x1c, 0x37, 0x0e, 0x76, 0x46, 0xdf, 0xbd, 0x6a, 0xdb, 0xfc, 0x1b, 0xbd, 0x10, 0xb8, 0xb1, 0xbc, 0x72, 0x4c, 0x58, 0x4a, 0xda, 0x6d, 0x66, 0x00, 0xda, 0x7a, 0x66, 0xa0, 0xe7, 0x3b, 0x39, 0xa3, 0xf7, 0x05, 0x07, 0xfa, 0x21, 0x4b, 0xc7, 0x94, 0xc0, 0xd3, 0x7b, 0x19, 0x02, 0x5d, 0x4a, 0x10, 0xf1, 0xc2, 0x0f, 0x19, 0x68, 0x27, 0xc7, 0x7d, 0xbf, 0x55, 0x03, 0x57, 0x7d, 0xaf, 0x77, 0xae, 0x80, 0x2f, 0x7a, 0xe6, 0x1f, 0x4b, 0xdc, 0x15, 0x18, 0xc0, 0x62, 0xa1, 0xe8, 0xd9, 0x1c, 0x9e, 0x8c, 0x96, 0x39, 0xc1, 0xc4, 0x88, 0xf7, 0x0c, 0xe1, 0x04, 0x84, 0x68, 0x51, 0xce, 0xf1, 0x90, 0xda, 0x7f, 0x76, 0xc8, 0xc0, 0x88, 0xef, 0x8e, 0x15, 0x25, 0x3e, 0x7b, 0xe4, 0x79, 0xb5, 0x66, 0x2d, 0x9c, 0xd1, 0x13, 0xda, 0xd0, 0xd5, 0x46, 0xd5, 0x8d, 0x46, 0x18, 0x07, 0xee, 0xd8, 0xc9, 0x64, 0xe3, 0xbe, 0x0e, 0x68, 0x27, 0x09, 0x96, 0x26, 0xf6, 0xe2, 0x19, 0x61, 0x3f, 0xf4, 0x58, 0x27, 0x0a, 0xeb, 0xce, 0x7c, 0xb6, 0x68, 0x92, 0xe7, 0x12, 0x3b, 0x31, 0xd4, 0x48, 0xdf, 0x35, 0x8d, 0xf4, 0x86, 0x42, 0x2a, 0x15, 0x4b, 0xe8, 0x19, 0x1f, 0x26, 0x65, 0x9b, 0xa8, 0xda, 0x4b, 0x79, 0x1f, 0x8e, 0xe6, 0x13, 0x7e, 0x49, 0x8f, 0xc1, 0xce, 0xdc, 0x5e, 0x64, 0x74, 0xce, 0x02, 0x78, 0xe0, 0xcf, 0xa0, 0xed, 0x5e, 0x31, 0x74, 0xd1, 0xd0, 0xb4, 0xee, 0x70, 0x19, 0x14, 0x3c, 0x8f, 0x16, 0xa6, 0xcf, 0x12, 0x93, 0x15, 0x88, 0xeb, 0x91, 0x65, 0x76, 0x98, 0xfd, 0xa1, 0x94, 0x30, 0xba, 0x43, 0x62, 0x65, 0x40, 0x04, 0x77, 0x9e, 0xd6, 0xab, 0x8b, 0x0d, 0x93, 0x80, 0x50, 0x5f, 0xa2, 0x76, 0x20, 0xa7, 0xd6, 0x9c, 0x27, 0x15, 0x27, 0xbc, 0xa5, 0x5a, 0xbf, 0xe9, 0x92, 0x82, 0x05, 0xa8, 0x41, 0xe9, 0xb5, 0x60, 0xd5, 0xc0, 0xd7, 0x4b, 0xad, 0x38, 0xb2, 0xe9, 0xd1, 0xe5, 0x51, 0x5f, 0x24, 0x78, 0x24, 0x9a, 0x23, 0xd2, 0xc2, 0x48, 0xbd, 0x0e, 0xf1, 0x37, 0x72, 0x91, 0x87, 0xb0, 0x4e, 0xbd, 0x99, 0x6b, 0x2c, 0x01, 0xb6, 0x79, 0x69, 0xec, 0x0c, 0xed, 0xe5, 0x3f, 0x50, 0x64, 0x7c, 0xb9, 0xdd, 0xe1, 0x92, 0x81, 0xb5, 0xd0, 0xcb, 0x17, 0x83, 0x86, 0x8b, 0xea, 0x4f, 0x93, 0x08, 0xbc, 0x22, 0x0c, 0xef, 0xe8, 0x0d, 0xf5, 0x9e, 0x23, 0xe1, 0xf9, 0xb7, 0x6b, 0x45, 0x0b, 0xcb, 0xa9, 0xb6, 0x4d, 0x28, 0x25, 0xba, 0x3e, 0x86, 0xf2, 0x75, 0x47, 0x5d, 0x9d, 0x6b, 0xf6, 0x8a, 0x05, 0x58, 0x73, 0x3d, 0x00, 0xde, 0xfd, 0x69, 0xb1, 0x61, 0x16, 0xf5, 0x2e, 0xb0, 0x9f, 0x31, 0x6a, 0x00, 0xb9, 0xef, 0x71, 0x63, 0x47, 0xa3, 0xca, 0xe0, 0x40, 0xa8, 0x7e, 0x02, 0x04, 0xfe, 0xe5, 0xce, 0x48, 0x73, 0xe3, 0x94, 0xcf, 0xe2, 0xff, 0x29, 0x7e, 0xf6, 0x32, 0xbb, 0xb7, 0x55, 0x12, 0x21, 0x7a, 0x9c, 0x75, 0x04, 0x0c, 0xb4, 0x7c, 0xb0, 0x3d, 0x40, 0xb3, 0x11, 0x9a, 0x7a, 0x9a, 0x13, 0xfb, 0x77, 0xa7, 0x51, 0x68, 0xf7, 0x05, 0x47, 0x3b, 0x0f, 0x52, 0x5c, 0xe6, 0xc2, 0x99, 0x3a, 0x37, 0x54, 0x5c, 0x4f, 0x2b, 0xa7, 0x01, 0x08, 0x74, 0xbc, 0x91, 0xe3, 0xe2, 0xfe, 0x65, 0x94, 0xfd, 0x3d, 0x18, 0xe0, 0xf0, 0x62, 0xed, 0xc2, 0x10, 0x82, 0x9c, 0x58, 0x7f, 0xb2, 0xa3, 0x87, 0x8a, 0x74, 0xd9, 0xc1, 0xfb, 0x84, 0x28, 0x17, 0xc7, 0x2b, 0xcb, 0x53, 0x1f, 0x4e, 0x8a, 0x82, 0xfc, 0xb4, 0x3f, 0xc1, 0x47, 0x25, 0xf3, 0x21, 0xdc, 0x4c, 0x2d, 0x08, 0xfa, 0xe7, 0x0f, 0x03, 0xa9, 0x68, 0xde, 0x6b, 0x41, 0xa0, 0xf9, 0x41, 0x6c, 0x57, 0x4d, 0x3a, 0x0e, 0xea, 0x51, 0xca, 0x9f, 0x97, 0x11, 0x7d, 0xf6, 0x8e, 0x88, 0x63, 0x67, 0xc9, 0x65, 0x13, 0xca, 0x38, 0xed, 0x35, 0xbe, 0xf4, 0x27, 0xa9, 0xfc, 0xa9, 0xe6, 0xc3, 0x40, 0x86, 0x08, 0x39, 0x72, 0x37, 0xee, 0xb2, 0x87, 0x09, 0x96, 0xb7, 0x40, 0x87, 0x36, 0x92, 0xc1, 0x5d, 0x6a, 0x2c, 0x43, 0xca, 0x25, 0xc8, 0x35, 0x37, 0x2d, 0xb5, 0xa9, 0x27, 0x44, 0x50, 0xf2, 0x6d, 0x22, 0x75, 0x41, 0x77, 0x2a, 0xdb, 0xb1, 0x8c, 0x6d, 0x05, 0xe8, 0xc9, 0x99, 0xc7, 0x08, 0xf9, 0x14, 0x8f, 0x78, 0xa9, 0x8f, 0xc2, 0x5a, 0x7a, 0x65, 0xc5, 0xd8, 0x86, 0xbb, 0x72, 0x69, 0x6b, 0x6b, 0x45, 0x83, 0x5b, 0xb1, 0xf7, 0xcd, 0x16, 0x73, 0xee, 0xe9, 0x80, 0x85, 0xfe, 0x8e, 0xe1, 0xae, 0x53, 0x8f, 0xde, 0xbe, 0x48, 0x8b, 0x59, 0xef, 0xf6, 0x7e, 0xd8, 0xb5, 0xa8, 0x47, 0xc0, 0x4e, 0x15, 0x58, 0xca, 0xd3, 0x2f, 0xf8, 0x6c, 0xa6, 0x3d, 0x78, 0x4d, 0x7a, 0x54, 0xd6, 0x10, 0xe5, 0xcc, 0x05, 0xe2, 0x29, 0xb5, 0x86, 0x07, 0x39, 0x7d, 0x78, 0x8e, 0x5a, 0x8f, 0x83, 0x4c, 0xe7, 0x3d, 0x68, 0x3e, 0xe5, 0x02, 0xe6, 0x64, 0x4f, 0x5e, 0xb4, 0x49, 0x77, 0xf0, 0xc0, 0xfa, 0x6f, 0xc8, 0xfb, 0x9f, 0x84, 0x6f, 0x55, 0xfb, 0x30, 0x5e, 0x89, 0x93, 0xa9, 0xf3, 0xa6, 0xa3, 0xd7, 0x26, 0xbb, 0xd8, 0xa8, 0xd9, 0x95, 0x1d, 0xfe, 0xfc, 0xd7, 0xa8, 0x93, 0x66, 0x2f, 0x04, 0x53, 0x06, 0x64, 0x7f, 0x31, 0x29, 0xae, 0xb7, 0x9f, 0xba, 0xc4, 0x6d, 0x68, 0xd1, 0x24, 0x32, 0xf4, 0x11 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 4, { 0x07, 0x9c, 0x91, 0xbe }, "id-Gost28147-89-CryptoPro-C-ParamSet", "testcfb3", { 0x77, 0xc3, 0x45, 0x8e, 0xf6, 0x42, 0xe7, 0x04, 0x8e, 0xfc, 0x08, 0xe4, 0x70, 0x96, 0xd6, 0x05, 0x93, 0x59, 0x02, 0x6d, 0x6f, 0x97, 0xca, 0xe9, 0xcf, 0x89, 0x44, 0x4b, 0xde, 0x6c, 0x22, 0x1d }, G89_CFB, { 0x43, 0x7c, 0x3e, 0x8e, 0x2f, 0x2a, 0x00, 0x98 }, { 0x19, 0x35, 0x81, 0x34 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 9, { 0x2f, 0x31, 0xd8, 0x83, 0xb4, 0x20, 0xe8, 0x6e, 0xda }, "id-Gost28147-89-CryptoPro-D-ParamSet", "testcfb4", { 0x38, 0x9f, 0xe8, 0x37, 0xff, 0x9c, 0x5d, 0x29, 0xfc, 0x48, 0x55, 0xa0, 0x87, 0xea, 0xe8, 0x40, 0x20, 0x87, 0x5b, 0xb2, 0x01, 0x15, 0x55, 0xa7, 0xe3, 0x2d, 0xcb, 0x3d, 0xd6, 0x59, 0x04, 0x73 }, G89_CFB, { 0xc5, 0xa2, 0xd2, 0x1f, 0x2f, 0xdf, 0xb8, 0xeb }, { 0x6d, 0xa4, 0xed, 0x40, 0x08, 0x88, 0x71, 0xad, 0x16 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 5242880+8, { 0 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "test5Mcfb", { 0x61, 0x58, 0x44, 0x5a, 0x41, 0xf6, 0xc7, 0x0f, 0x6b, 0xdb, 0x51, 0x91, 0x6a, 0xf6, 0x81, 0x30, 0x8c, 0xa7, 0x98, 0xdd, 0x38, 0x35, 0x8a, 0x60, 0x85, 0xb4, 0xf0, 0xf9, 0x43, 0xa2, 0x7d, 0x9a }, G89_CFB, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x1c, 0x16, 0xa0, 0xe9, 0x63, 0x94, 0xfe, 0x38, 0x37, 0xa7, 0x9b, 0x70, 0x25, 0x2e, 0xd6, 0x00 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 4294967296ULL+16, { 0 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "test4Gcfb", { 0xae, 0x57, 0xa2, 0xdd, 0xa4, 0xef, 0x4f, 0x96, 0xb8, 0x94, 0xa5, 0xd1, 0x1b, 0xc8, 0x9b, 0x42, 0xa5, 0x24, 0xcc, 0x89, 0x5c, 0xb8, 0x92, 0x52, 0xc1, 0x12, 0x6a, 0xb0, 0x9a, 0x26, 0xe8, 0x06 }, G89_CFB, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x2e, 0x62, 0xb0, 0x2e, 0xc7, 0x87, 0x4b, 0x29, 0x33, 0x16, 0x6b, 0xb4, 0xd6, 0x61, 0x66, 0xd9 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 1037, { 0x3d, 0x0b, 0x69, 0xf7, 0xa8, 0xe4, 0xfc, 0x99, 0x22, 0x2e, 0xee, 0xd1, 0x63, 0x12, 0xfe, 0xa8, 0x9d, 0xcb, 0x6c, 0x4d, 0x48, 0x8c, 0xe8, 0xbd, 0x8b, 0x60, 0xf1, 0xbf, 0x7b, 0xe3, 0x79, 0xd5, 0x2b, 0x25, 0x97, 0x13, 0xef, 0x35, 0xda, 0xf4, 0xbc, 0x77, 0xce, 0xea, 0xe9, 0x3f, 0xa4, 0xb6, 0x01, 0xd5, 0x73, 0x29, 0x58, 0xda, 0xd7, 0x67, 0x17, 0xac, 0xe4, 0x75, 0x2f, 0x57, 0x23, 0xac, 0x96, 0x21, 0xc7, 0x62, 0x2d, 0xf7, 0x32, 0xb5, 0x44, 0x5f, 0x72, 0xb1, 0x5f, 0xba, 0x1b, 0x1e, 0xdb, 0x4a, 0x09, 0x8c, 0x92, 0x61, 0xa2, 0xb0, 0x49, 0x68, 0xe5, 0xb3, 0xa2, 0x8f, 0x13, 0x4b, 0xf5, 0x4d, 0x84, 0xda, 0xab, 0xa0, 0xb6, 0xd1, 0x5a, 0x63, 0x19, 0xe8, 0xa2, 0x09, 0xf6, 0x76, 0x6f, 0x9b, 0x48, 0x0a, 0x15, 0x5d, 0xb7, 0x20, 0x21, 0x9a, 0x2e, 0xb9, 0x6d, 0xfa, 0x1e, 0xc2, 0x0e, 0xef, 0x15, 0xab, 0x59, 0x01, 0xfe, 0x43, 0x90, 0xf2, 0x62, 0xca, 0x4a, 0x9a, 0x48, 0x38, 0xab, 0x6f, 0x9d, 0x21, 0xb3, 0xad, 0xa7, 0x60, 0x46, 0xe3, 0xef, 0xd0, 0xe3, 0x1d, 0xc5, 0xe1, 0xb8, 0xa1, 0xe2, 0x99, 0x20, 0xc5, 0x76, 0xcc, 0xaa, 0x8a, 0xa9, 0x45, 0x55, 0xa0, 0x78, 0x00, 0x64, 0xde, 0xcf, 0x5b, 0xdf, 0x26, 0x48, 0xcd, 0xba, 0x8a, 0xb5, 0xfb, 0xfd, 0x4a, 0xd5, 0xc4, 0xe0, 0x43, 0xa6, 0x71, 0x90, 0xa4, 0x8b, 0xca, 0x2e, 0x88, 0x7b, 0xac, 0xb2, 0xdc, 0xf2, 0x01, 0xcb, 0xda, 0x6e, 0x91, 0x27, 0x28, 0x44, 0x88, 0x9a, 0xd2, 0x12, 0xf1, 0xa6, 0xf5, 0xb7, 0x61, 0xce, 0x79, 0x62, 0x52, 0x3c, 0xe6, 0x14, 0x73, 0xd1, 0x41, 0x92, 0x50, 0xbd, 0xdc, 0x3b, 0xd0, 0xa7, 0x11, 0x8c, 0x3a, 0xe4, 0x2d, 0xf2, 0x52, 0xd3, 0x2f, 0x7c, 0x8e, 0x54, 0x90, 0x4e, 0x23, 0xae, 0xb3, 0xa0, 0xf3, 0x25, 0x7e, 0x66, 0xaa, 0x0f, 0x6f, 0x81, 0x72, 0x77, 0xbb, 0xd3, 0x47, 0xe8, 0x05, 0xff, 0xe1, 0x5b, 0xc9, 0x37, 0x50, 0x33, 0x49, 0x17, 0xaf, 0xab, 0x1d, 0xe1, 0x15, 0xf2, 0xe5, 0x98, 0x5e, 0x2d, 0x05, 0x1f, 0x0d, 0x55, 0x97, 0xed, 0xff, 0x5e, 0xe0, 0x0f, 0xc3, 0x9c, 0xbd, 0x82, 0xc2, 0x06, 0xbe, 0x45, 0x66, 0xae, 0x33, 0xbe, 0x28, 0x48, 0xe9, 0x2d, 0x1a, 0xe6, 0x65, 0x8e, 0xdf, 0x76, 0x03, 0x73, 0x4b, 0xc0, 0x80, 0x71, 0xf9, 0xac, 0xba, 0xa0, 0xb0, 0x19, 0x1a, 0x0a, 0xd4, 0x35, 0x12, 0x88, 0x76, 0x05, 0x75, 0x8f, 0x7c, 0xb5, 0xf0, 0x19, 0x75, 0x6d, 0x05, 0xcb, 0x0d, 0xbc, 0x8d, 0xe9, 0xf0, 0xd4, 0xdb, 0x3c, 0x3c, 0x29, 0x8e, 0x2c, 0x32, 0x1d, 0xf7, 0xb6, 0x49, 0xcf, 0xdb, 0x63, 0xee, 0x3c, 0xfa, 0x33, 0x73, 0x6f, 0xe4, 0x97, 0x4e, 0x2f, 0xc9, 0x4c, 0x5c, 0x65, 0xfe, 0xea, 0xfb, 0xc6, 0xdd, 0xc1, 0x1c, 0x47, 0x3f, 0xf4, 0x50, 0x2f, 0xde, 0x1b, 0x5b, 0x0b, 0x16, 0xca, 0xb6, 0x46, 0x44, 0xf2, 0xc1, 0x0d, 0xa1, 0x1d, 0xa6, 0xdb, 0xf0, 0x3d, 0xb1, 0x6c, 0x05, 0x31, 0x85, 0x8e, 0x74, 0xae, 0xf2, 0x39, 0x26, 0xf7, 0xc1, 0xe7, 0x4c, 0xdd, 0x9d, 0x40, 0xb8, 0xf3, 0xc5, 0xc2, 0x16, 0x64, 0x6b, 0xaa, 0xdb, 0x4b, 0x82, 0x5c, 0xd3, 0x02, 0xd3, 0x8f, 0x26, 0x79, 0x8d, 0xb0, 0x78, 0x70, 0x19, 0x58, 0x0c, 0xb4, 0x31, 0x88, 0x44, 0x1c, 0x91, 0x6f, 0xf4, 0x52, 0x39, 0xa8, 0xf5, 0xc0, 0x1b, 0xfe, 0xf2, 0x0e, 0x4b, 0xac, 0x0a, 0xc2, 0x7e, 0x9c, 0x9b, 0xeb, 0x5d, 0x4e, 0x4f, 0x42, 0xd8, 0x71, 0x0a, 0x97, 0x27, 0x03, 0x14, 0x96, 0xa6, 0x3d, 0x04, 0xea, 0x9f, 0x14, 0x14, 0x27, 0x4c, 0xd9, 0xa2, 0x89, 0x5f, 0x65, 0x4a, 0xe1, 0x9d, 0x2c, 0xb8, 0xf8, 0xd4, 0x8f, 0x2a, 0x57, 0x36, 0xcc, 0x06, 0x9c, 0x2c, 0xc5, 0x13, 0x16, 0xdf, 0xfc, 0xae, 0x22, 0x16, 0xa8, 0x2b, 0x71, 0x6f, 0x1d, 0xb3, 0x47, 0x54, 0x3f, 0x2d, 0x0a, 0x68, 0x9f, 0x2e, 0xf6, 0x90, 0xd8, 0xa1, 0x21, 0x09, 0xd4, 0x97, 0xb9, 0x7b, 0x7f, 0x9b, 0x6a, 0xed, 0xd1, 0xf0, 0xe3, 0xb6, 0x28, 0xc7, 0x62, 0x82, 0x00, 0xc9, 0x38, 0xa1, 0x82, 0x78, 0xce, 0x87, 0xc8, 0x53, 0xac, 0x4f, 0x2e, 0x31, 0xb9, 0x50, 0x7f, 0x36, 0x00, 0x4a, 0x32, 0xe6, 0xd8, 0xbb, 0x59, 0x45, 0x0e, 0x91, 0x1b, 0x38, 0xa9, 0xbc, 0xb9, 0x5e, 0x6c, 0x6a, 0x9c, 0x03, 0x01, 0x1c, 0xde, 0xe8, 0x1f, 0x1e, 0xe3, 0xde, 0x25, 0xa2, 0x56, 0x79, 0xe1, 0xbd, 0x58, 0xc4, 0x93, 0xe6, 0xd0, 0x8a, 0x4d, 0x08, 0xab, 0xf7, 0xaa, 0xc3, 0x7d, 0xc1, 0xee, 0x68, 0x37, 0xbc, 0x78, 0x0b, 0x19, 0x68, 0x2b, 0x2b, 0x2e, 0x6d, 0xc4, 0x6f, 0xaa, 0x3b, 0xc6, 0x19, 0xcb, 0xf1, 0x58, 0xb9, 0x60, 0x85, 0x45, 0xae, 0x52, 0x97, 0xba, 0x24, 0x32, 0x13, 0x72, 0x16, 0x6e, 0x7b, 0xc1, 0x98, 0xac, 0xb1, 0xed, 0xb4, 0xcc, 0x6c, 0xcf, 0x45, 0xfc, 0x50, 0x89, 0x80, 0x8e, 0x7a, 0xa4, 0xd3, 0x64, 0x50, 0x63, 0x37, 0xc9, 0x6c, 0xf1, 0xc4, 0x3d, 0xfb, 0xde, 0x5a, 0x5c, 0xa8, 0x21, 0x35, 0xe6, 0x2e, 0x8c, 0x2a, 0x3c, 0x12, 0x17, 0x79, 0x9a, 0x0d, 0x2e, 0x79, 0xeb, 0x67, 0x1f, 0x2b, 0xf8, 0x6e, 0xca, 0xc1, 0xfa, 0x45, 0x18, 0x9e, 0xdf, 0x6a, 0xe6, 0xcb, 0xe9, 0x5c, 0xc3, 0x09, 0xaf, 0x93, 0x58, 0x13, 0xbf, 0x90, 0x84, 0x87, 0x75, 0xd6, 0x82, 0x28, 0x8d, 0xe7, 0x2f, 0xa3, 0xfb, 0x97, 0x74, 0x2a, 0x73, 0x04, 0x82, 0x06, 0x76, 0x69, 0xb1, 0x0b, 0x19, 0xfc, 0xae, 0xb3, 0xdd, 0x2a, 0xe5, 0xc1, 0x05, 0xd8, 0x80, 0x95, 0x22, 0x90, 0x71, 0xfc, 0xc2, 0x92, 0x42, 0xfd, 0xf1, 0x70, 0xb4, 0x68, 0x88, 0xa4, 0x9e, 0x0a, 0x24, 0x40, 0x13, 0xc8, 0xa2, 0x56, 0x4f, 0x39, 0xe6, 0x06, 0xf1, 0xdc, 0xf5, 0x13, 0x0e, 0xad, 0x9c, 0x8b, 0xaf, 0xe9, 0xe3, 0x88, 0x72, 0xff, 0xa0, 0x6d, 0xda, 0x08, 0x70, 0xb9, 0x2e, 0x83, 0xc5, 0xbb, 0x32, 0xa5, 0x74, 0xc7, 0xfb, 0x7b, 0x76, 0xaf, 0x02, 0xbb, 0x2b, 0xb8, 0x5e, 0x65, 0x02, 0xfe, 0x0e, 0xa0, 0x99, 0xce, 0x01, 0x3b, 0x35, 0xe1, 0xb0, 0x22, 0xe5, 0x94, 0xbd, 0xdd, 0x8e, 0xbb, 0xf6, 0x75, 0xbf, 0xbf, 0xee, 0x7a, 0xb1, 0x58, 0xb4, 0x81, 0xb8, 0x39, 0x3e, 0xb6, 0x1e, 0xde, 0xda, 0x1b, 0xd5, 0xf7, 0xdd, 0x7d, 0x65, 0x9c, 0xaa, 0x56, 0x93, 0xb8, 0xaf, 0x48, 0x53, 0xc7, 0x22, 0xe4, 0x1c, 0xdf, 0xe9, 0x79, 0xb4, 0x20, 0x89, 0xcc, 0x2a, 0x79, 0x2c, 0x09, 0xbe, 0x78, 0xcf, 0xcc, 0xf2, 0x90, 0xd6, 0x65, 0xc5, 0x29, 0xfc, 0xda, 0x69, 0xfc, 0xc0, 0xd6, 0x70, 0x99, 0x61, 0x3f, 0x60, 0x02, 0xd8, 0x12, 0x22, 0xc8, 0x34, 0xc6, 0x3b, 0xb3, 0xc2, 0x33, 0xa1, 0x5c, 0x8f, 0x4c, 0xd1, 0x52, 0x72, 0xf2, 0x42, 0x05, 0x8e, 0x18, 0x1f, 0x16, 0xda, 0xb8, 0x53, 0xa1, 0x5f, 0x01, 0x32, 0x1b, 0x90, 0xb3, 0x53, 0x9b, 0xd0, 0x85, 0x61, 0x2d, 0x17, 0xed, 0x0a, 0xa4, 0xa5, 0x27, 0x09, 0x75, 0x7c, 0xbc, 0x30, 0xf7, 0x5e, 0x59, 0x9a, 0x07, 0x96, 0x84, 0x28, 0x86, 0x4b, 0xa7, 0x22, 0x35, 0x28, 0xc7, 0xed, 0x0d, 0xc3, 0xce, 0x98, 0xcc, 0x2d, 0xec, 0xd4, 0x98, 0x09, 0x8e, 0x52, 0x5f, 0x2b, 0x9a, 0x13, 0xbe, 0x99, 0x16, 0x73, 0xd1, 0x1f, 0x81, 0xe5, 0xa2, 0x08, 0x78, 0xcb, 0x0c, 0x20, 0xd4, 0xa5, 0xea, 0x4b, 0x5b, 0x95, 0x5a, 0x92, 0x9a, 0x52 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "testcnt2", { 0x1b, 0x5d, 0xdb, 0x77, 0xcf, 0xf9, 0xec, 0x95, 0x5e, 0xcc, 0x67, 0x9f, 0x5d, 0x28, 0xad, 0x4a, 0x27, 0xf4, 0x32, 0xc6, 0xb2, 0xcb, 0xb1, 0x45, 0x6a, 0x88, 0x14, 0x0c, 0x9b, 0x9b, 0x5f, 0x48 }, G89_CNT, { 0x71, 0x58, 0x8c, 0xe1, 0x55, 0xf4, 0xf6, 0xb3 }, { 0x8e, 0xcd, 0x8f, 0xc8, 0xac, 0xe1, 0x15, 0x48, 0x2d, 0xae, 0x24, 0x8a, 0xc7, 0xfb, 0xba, 0x0f, 0x1d, 0x8a, 0x95, 0xa2, 0x43, 0xef, 0xcb, 0xdc, 0x59, 0x57, 0xa7, 0xc7, 0x0e, 0xe3, 0xe2, 0xb9, 0x0d, 0x86, 0x29, 0x62, 0xcb, 0x83, 0x4d, 0x07, 0x0c, 0x40, 0xd4, 0x7b, 0x2e, 0xca, 0xba, 0xbf, 0x4a, 0x60, 0x3b, 0x31, 0x98, 0xc8, 0x88, 0x47, 0xd9, 0x82, 0xab, 0xfc, 0x8f, 0x48, 0xe2, 0x46, 0xab, 0xd3, 0xa1, 0xab, 0x8a, 0x05, 0x22, 0x8c, 0xf4, 0xec, 0x9a, 0x1e, 0x76, 0xab, 0x1a, 0x60, 0xd9, 0x25, 0x6b, 0xb8, 0x56, 0xe5, 0xb2, 0xea, 0x10, 0xf3, 0x62, 0x04, 0x32, 0x5e, 0xaa, 0x3b, 0x7b, 0x57, 0xbc, 0x3b, 0x8b, 0x43, 0x47, 0xf2, 0xd5, 0x03, 0x7e, 0x51, 0x01, 0xff, 0x77, 0x28, 0xca, 0x90, 0xa3, 0xfe, 0x7e, 0x2e, 0x70, 0x16, 0x75, 0x18, 0x44, 0xf0, 0x1b, 0x85, 0x05, 0xea, 0xe3, 0x21, 0xf7, 0x26, 0x86, 0x76, 0x3c, 0x67, 0x9d, 0xfc, 0xbc, 0x10, 0x7f, 0x77, 0xe4, 0xed, 0xd3, 0x12, 0xf8, 0x83, 0x00, 0x1f, 0x4b, 0x92, 0x95, 0x92, 0x5c, 0xf3, 0x5a, 0xf3, 0xb7, 0xd0, 0xa9, 0x5f, 0xf2, 0x18, 0xc4, 0x66, 0x62, 0xc1, 0x84, 0x0e, 0x66, 0xe8, 0x80, 0x7d, 0x1f, 0xf0, 0xba, 0x01, 0x9b, 0x71, 0xae, 0x93, 0xcc, 0x27, 0x54, 0x34, 0x9a, 0xbd, 0xca, 0xee, 0x52, 0x09, 0x92, 0x9d, 0xb0, 0xd5, 0xd9, 0xba, 0x2f, 0xb9, 0x96, 0xdc, 0xfa, 0xbd, 0xce, 0xea, 0x1a, 0x7b, 0x9a, 0x1d, 0x13, 0xa7, 0x11, 0xe2, 0x9a, 0x64, 0xf6, 0xd3, 0xee, 0xc6, 0x33, 0xb7, 0x6e, 0xef, 0x25, 0x9e, 0x1e, 0x7c, 0xe3, 0x1f, 0x2c, 0x6e, 0xa9, 0xc0, 0xf8, 0xc1, 0xbf, 0x3b, 0xf8, 0x34, 0x03, 0x9b, 0xa1, 0x40, 0x5b, 0x0c, 0x3c, 0x09, 0x66, 0x9d, 0x63, 0xe2, 0xe2, 0x04, 0x8f, 0x06, 0x84, 0x74, 0x68, 0xb2, 0x5c, 0x3b, 0x4c, 0xad, 0x0b, 0x3f, 0x03, 0xb3, 0x07, 0x8a, 0x64, 0xa7, 0x36, 0x56, 0x26, 0x39, 0x66, 0xda, 0xe9, 0x6d, 0x1b, 0xd5, 0x88, 0xe8, 0x5c, 0xaf, 0x5a, 0x4c, 0x49, 0xf7, 0xf5, 0xb7, 0x78, 0xf0, 0xde, 0xec, 0xcd, 0x16, 0x23, 0x9e, 0x8c, 0x13, 0xbe, 0x6b, 0x6f, 0x9b, 0x07, 0xe5, 0xbb, 0xcc, 0x3a, 0x1b, 0x6f, 0x43, 0xdf, 0xff, 0x46, 0x2a, 0xae, 0x47, 0x19, 0x18, 0x9a, 0x25, 0x09, 0xc9, 0x24, 0x40, 0x0c, 0x4b, 0xa7, 0xda, 0x5e, 0x0d, 0xee, 0xfa, 0x62, 0x45, 0x8e, 0xcc, 0x2f, 0x23, 0x08, 0x1d, 0x92, 0xf0, 0xfe, 0x82, 0x0f, 0xd7, 0x11, 0x60, 0x7e, 0x0b, 0x0b, 0x75, 0xf4, 0xf5, 0x3b, 0xc0, 0xa4, 0xe8, 0x72, 0xa5, 0xb6, 0xfa, 0x5a, 0xad, 0x5a, 0x4f, 0x39, 0xb5, 0xa2, 0x12, 0x96, 0x0a, 0x32, 0x84, 0xb2, 0xa1, 0x06, 0x68, 0x56, 0x57, 0x97, 0xa3, 0x7b, 0x22, 0x61, 0x76, 0x5d, 0x30, 0x1a, 0x31, 0xab, 0x99, 0x06, 0xc5, 0x1a, 0x96, 0xcf, 0xcf, 0x14, 0xff, 0xb2, 0xc4, 0xcc, 0x2b, 0xbf, 0x0c, 0x9d, 0x91, 0x8f, 0x79, 0x5b, 0xbc, 0xa9, 0x6b, 0x91, 0x6a, 0xb4, 0x93, 0x5c, 0x7b, 0x5d, 0xc2, 0x8a, 0x75, 0xc0, 0xc1, 0x08, 0xfa, 0x99, 0xf9, 0x4d, 0x5e, 0x0c, 0x06, 0x64, 0x60, 0xa9, 0x01, 0x4a, 0x34, 0x0f, 0x33, 0x84, 0x95, 0x69, 0x30, 0xc1, 0x1c, 0x36, 0xf8, 0xfc, 0x30, 0x23, 0xb2, 0x71, 0xe5, 0x52, 0x4d, 0x12, 0x1a, 0xc9, 0xbe, 0xee, 0xc9, 0xcb, 0x01, 0x85, 0xf3, 0xdb, 0x30, 0xf9, 0x41, 0xa9, 0x40, 0xb0, 0x06, 0x29, 0x77, 0xcd, 0xc5, 0xec, 0x58, 0x02, 0x48, 0x83, 0x53, 0x44, 0x6a, 0xd2, 0xca, 0x05, 0xd8, 0x5a, 0x08, 0xeb, 0xa9, 0xf4, 0xe6, 0xc7, 0x9d, 0xd5, 0x7b, 0x74, 0x0b, 0x31, 0xb7, 0xa5, 0x57, 0x7c, 0x7a, 0xfd, 0x1a, 0x0e, 0xd7, 0x97, 0x41, 0xbf, 0xdd, 0xc6, 0x19, 0x6c, 0x77, 0x8c, 0x18, 0x52, 0x57, 0x83, 0xba, 0x71, 0x25, 0xee, 0x39, 0xbb, 0xe2, 0x43, 0xa0, 0x14, 0xdc, 0x0e, 0x84, 0xb4, 0x2b, 0xde, 0x3e, 0xe5, 0x36, 0xb7, 0xa2, 0x92, 0x98, 0x05, 0xb8, 0x96, 0xe5, 0xd0, 0x8c, 0x08, 0x93, 0x35, 0xc2, 0x81, 0xe0, 0xfc, 0x59, 0x71, 0xe2, 0x44, 0x49, 0x5d, 0xda, 0xfb, 0x9c, 0xaa, 0x70, 0x9f, 0x43, 0xa8, 0xa5, 0xd9, 0x67, 0xd9, 0x8f, 0xa3, 0x1e, 0xbe, 0x0e, 0xec, 0xdf, 0x12, 0x2b, 0x6a, 0xe7, 0x1c, 0x12, 0x17, 0xe7, 0xc4, 0x6d, 0x50, 0xc9, 0x52, 0x7a, 0xd5, 0xe8, 0x7f, 0xbc, 0x07, 0x15, 0xac, 0xdb, 0x93, 0x66, 0xb1, 0xf0, 0xa7, 0x7b, 0x2f, 0xe9, 0xec, 0xd0, 0x47, 0x69, 0x59, 0x87, 0xf1, 0x4c, 0x3e, 0x4b, 0x9b, 0x11, 0x79, 0x13, 0xe4, 0x96, 0xf6, 0x56, 0x04, 0x6e, 0x0b, 0x33, 0xfc, 0x40, 0xf6, 0xc7, 0xc1, 0x43, 0xb1, 0xbf, 0x0e, 0xb3, 0x87, 0xfd, 0x0b, 0x1c, 0x63, 0x46, 0x3a, 0xd3, 0xa0, 0x17, 0x59, 0x25, 0x94, 0x6c, 0x9c, 0x3d, 0x0c, 0x81, 0xce, 0x82, 0x72, 0x42, 0x28, 0xf9, 0x37, 0x6a, 0x6d, 0xe4, 0x12, 0xf4, 0x21, 0xaa, 0xf7, 0xfe, 0x27, 0x55, 0x40, 0x1a, 0x14, 0xc3, 0x39, 0x5b, 0xbf, 0x63, 0xc2, 0x5f, 0x10, 0x1f, 0x14, 0x25, 0xd0, 0xce, 0xf3, 0x14, 0x48, 0x13, 0xa5, 0x0b, 0x4d, 0x38, 0xcf, 0x0d, 0x34, 0xc0, 0x0a, 0x11, 0xb4, 0xb5, 0x72, 0xc8, 0x4b, 0xc2, 0x6f, 0xe7, 0x9d, 0x93, 0xf7, 0xdf, 0xb8, 0x43, 0x72, 0x7e, 0xda, 0x3e, 0x20, 0x1f, 0xbc, 0x21, 0x2a, 0xce, 0x00, 0xfa, 0x96, 0x9f, 0x3d, 0xe5, 0x88, 0x96, 0xef, 0x29, 0x84, 0xdf, 0x6c, 0x1c, 0x96, 0xd8, 0x58, 0x47, 0xaa, 0x92, 0xf3, 0x07, 0xe5, 0xfb, 0xaf, 0xea, 0x95, 0x7e, 0x0b, 0x71, 0xcd, 0x81, 0x0f, 0xb7, 0x0a, 0x59, 0x8f, 0x31, 0x4d, 0xd1, 0xc3, 0xf3, 0x2f, 0x70, 0x5c, 0x59, 0x18, 0x97, 0xaf, 0x77, 0x95, 0x5e, 0xaf, 0x40, 0x06, 0x12, 0x81, 0x61, 0x86, 0x08, 0x4e, 0xbc, 0x89, 0x46, 0x07, 0x2e, 0x5b, 0x10, 0xaa, 0x12, 0xf0, 0xa7, 0x84, 0xe2, 0x9a, 0x08, 0xf1, 0xde, 0x59, 0xe3, 0x0e, 0x47, 0x4b, 0xff, 0xc3, 0xc9, 0x18, 0xaf, 0x95, 0x9c, 0x67, 0x2a, 0xde, 0x8a, 0x7a, 0x99, 0x04, 0xc4, 0xb8, 0x97, 0x4c, 0x04, 0x29, 0x71, 0x05, 0xda, 0xb3, 0xd6, 0xdb, 0x6c, 0x71, 0xe6, 0xe8, 0x03, 0xbf, 0x94, 0x7d, 0xde, 0x3d, 0xc8, 0x44, 0xfa, 0x7d, 0x62, 0xb4, 0x36, 0x03, 0xee, 0x36, 0x52, 0x64, 0xb4, 0x85, 0x6d, 0xd5, 0x78, 0xf0, 0x6f, 0x67, 0x2d, 0x0e, 0xe0, 0x2c, 0x88, 0x9b, 0x55, 0x19, 0x29, 0x40, 0xf6, 0x8c, 0x12, 0xbb, 0x2c, 0x83, 0x96, 0x40, 0xc0, 0x36, 0xf5, 0x77, 0xff, 0x70, 0x8c, 0x75, 0x92, 0x0b, 0xad, 0x05, 0x9b, 0x7e, 0xa2, 0xfc, 0xa9, 0xd1, 0x64, 0x76, 0x82, 0x13, 0xba, 0x22, 0x5e, 0x33, 0x0e, 0x26, 0x70, 0xa9, 0xbe, 0x74, 0x28, 0xf5, 0xe2, 0xc4, 0x96, 0xee, 0x3a, 0xbc, 0x97, 0xa6, 0x2c, 0x2a, 0xe0, 0x64, 0x8d, 0x35, 0xc6, 0x1a, 0xca, 0xf4, 0x92, 0xfa, 0xc3, 0xf1, 0x1f, 0x98, 0xe4, 0x43, 0x88, 0x69, 0x3a, 0x09, 0xbf, 0x63, 0xe5, 0x96, 0x29, 0x0b, 0x9b, 0x62, 0x23, 0x14, 0x8a, 0x95, 0xe4, 0x1c, 0x5c, 0x0a, 0xa9, 0xc5, 0xb9, 0x6f, 0x4f, 0x2b, 0x25, 0x6f, 0x74, 0x1e, 0x18, 0xd5, 0xfe, 0x27, 0x7d, 0x3f, 0x6e, 0x55, 0x2c, 0x67, 0xe6, 0xde, 0xb5, 0xcc, 0xc0, 0x2d, 0xff, 0xc4, 0xe4, 0x06, 0x21, 0xa5, 0xc8, 0xd3, 0xd6, 0x6c, 0xa1, 0xc3, 0xfb, 0x88, 0x92, 0xb1, 0x1d, 0x90, 0xe1, 0x35, 0x05, 0x9b, 0x29, 0x6d, 0xba, 0xf1, 0xf4, 0x1e, 0x23, 0x2e } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 5242880+8, { 0 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "test5Mcnt", { 0x07, 0x52, 0x65, 0xe7, 0xca, 0xa3, 0xca, 0x45, 0xcf, 0x3a, 0x05, 0x1d, 0x38, 0x03, 0x53, 0x0c, 0x22, 0x31, 0xba, 0x99, 0x4f, 0x9b, 0x6a, 0x1b, 0x7e, 0x09, 0x9d, 0x4e, 0xb5, 0xc9, 0x84, 0x2e }, G89_CNT, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0x3d, 0x05, 0x07, 0x57, 0xc0, 0x75, 0x89, 0x97, 0xd6, 0x94, 0x49, 0x11, 0x1d, 0xd0, 0x91, 0xee } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 4294967296ULL+16, { 0 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "test4Gcnt", { 0x75, 0xa3, 0x3c, 0xae, 0x03, 0x6b, 0x10, 0xdb, 0xc1, 0x56, 0x50, 0x89, 0x03, 0xd2, 0x9f, 0x91, 0xee, 0xe8, 0x64, 0x1d, 0x43, 0xf2, 0x4e, 0xf8, 0xf2, 0x6c, 0xed, 0xda, 0x8f, 0xe4, 0x88, 0xe9 }, G89_CNT, { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }, { 0xfa, 0x6c, 0x96, 0x78, 0xe2, 0xf8, 0xdd, 0xaa, 0x67, 0x5a, 0xc9, 0x5d, 0x57, 0xf1, 0xbd, 0x99 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 1035, { 0xd6, 0xcf, 0x31, 0x96, 0x9c, 0xa1, 0xfb, 0xd6, 0x8d, 0xa3, 0xdd, 0x01, 0xd9, 0x88, 0xc0, 0x2f, 0xbc, 0x46, 0xc7, 0x3a, 0xe4, 0x21, 0x86, 0x96, 0x8d, 0xe2, 0xca, 0xb6, 0x37, 0xa2, 0xe1, 0xa8, 0x7e, 0xa7, 0x79, 0x2e, 0xa4, 0x56, 0x75, 0x7f, 0x3e, 0x55, 0x8b, 0x43, 0xae, 0x65, 0xdf, 0xaa, 0x42, 0xb6, 0x00, 0xa6, 0x61, 0x03, 0x0d, 0xd3, 0x41, 0x02, 0x27, 0x23, 0x95, 0x79, 0x9b, 0x34, 0x81, 0xa9, 0x86, 0xb5, 0xa7, 0x90, 0xe2, 0xae, 0xc4, 0x2f, 0xc3, 0x8e, 0x32, 0x56, 0x13, 0xfa, 0x4d, 0x4e, 0x9f, 0x15, 0x75, 0x7e, 0x74, 0xdc, 0x32, 0x2d, 0xee, 0x4d, 0x67, 0x70, 0x9f, 0x62, 0xb9, 0xc4, 0xdb, 0x24, 0x84, 0xcc, 0x16, 0x7b, 0xda, 0x22, 0xf7, 0xc5, 0xf3, 0x93, 0x35, 0x73, 0xc6, 0x03, 0x1c, 0x77, 0xa5, 0xf2, 0x76, 0x56, 0xb4, 0x95, 0xd4, 0x7e, 0x0d, 0x20, 0xc6, 0x6e, 0xee, 0x8f, 0x25, 0x48, 0xff, 0x7e, 0x01, 0x3a, 0xb4, 0x1f, 0xaa, 0x35, 0xc0, 0x33, 0x58, 0x9c, 0xb5, 0xba, 0x65, 0x4b, 0xd3, 0x51, 0x14, 0xec, 0x61, 0xce, 0xe4, 0xba, 0x49, 0xba, 0x39, 0x32, 0xab, 0xce, 0x81, 0x72, 0xce, 0xab, 0xed, 0xd4, 0xd2, 0x19, 0x87, 0x85, 0x92, 0xfa, 0x64, 0x34, 0xd8, 0x86, 0xf4, 0x8a, 0x08, 0x3c, 0xde, 0xee, 0x97, 0x92, 0x92, 0x69, 0xba, 0x9b, 0x5f, 0x7a, 0x03, 0xc1, 0x5d, 0x43, 0x02, 0x8c, 0xbe, 0xd2, 0x46, 0x72, 0x81, 0x40, 0x7d, 0x68, 0x98, 0x45, 0x0b, 0x54, 0x27, 0x1c, 0xaf, 0x80, 0x42, 0xe4, 0xd5, 0xd4, 0xe4, 0xa2, 0x98, 0x07, 0x8f, 0x03, 0xf5, 0x2c, 0x8c, 0x88, 0xca, 0x5a, 0xde, 0xe4, 0x9f, 0xb1, 0x5f, 0x82, 0xff, 0x20, 0x67, 0x52, 0x85, 0x84, 0x4f, 0xc8, 0xfe, 0xa7, 0x9e, 0xae, 0x1c, 0xfa, 0xb8, 0x75, 0xd3, 0xf7, 0x9f, 0x0d, 0xda, 0x2d, 0xe6, 0xcc, 0x86, 0x6b, 0xa4, 0x14, 0x65, 0xc3, 0xf9, 0x15, 0xbc, 0x87, 0xf5, 0xae, 0x8c, 0x10, 0xd4, 0xce, 0x5b, 0x9c, 0xe2, 0xdd, 0x42, 0x03, 0x09, 0x87, 0x47, 0xed, 0x5d, 0xd0, 0x7a, 0x69, 0x4c, 0xfa, 0x43, 0x7d, 0xbf, 0x07, 0x85, 0x6a, 0xee, 0x68, 0xe6, 0x7a, 0x57, 0xb2, 0x20, 0x8d, 0x80, 0xf2, 0x91, 0x6f, 0x5c, 0x07, 0x8c, 0xe4, 0x6a, 0x49, 0x90, 0x85, 0x8b, 0x77, 0x29, 0x56, 0x1c, 0x5e, 0xa9, 0x3f, 0xab, 0x8b, 0x79, 0xa3, 0x6f, 0x6b, 0x34, 0xcb, 0x61, 0xf6, 0xe6, 0x92, 0xd1, 0x48, 0x9e, 0x11, 0xa2, 0x82, 0xc0, 0x4e, 0x23, 0xd2, 0x15, 0x0d, 0x8d, 0xff, 0xfa, 0x17, 0x9d, 0x81, 0xb8, 0xbc, 0xd7, 0x5b, 0x08, 0x81, 0x20, 0x40, 0xc0, 0x3c, 0x06, 0x8b, 0x1a, 0x88, 0x0b, 0x4b, 0x7b, 0x31, 0xf5, 0xd4, 0x4e, 0x09, 0xd1, 0x4d, 0x0d, 0x7f, 0x45, 0xd1, 0x09, 0x35, 0xba, 0xce, 0x65, 0xdd, 0xf2, 0xb8, 0xfb, 0x7a, 0xbc, 0xc4, 0x4b, 0xc8, 0x75, 0xda, 0x6b, 0xce, 0x3d, 0xe8, 0x94, 0xcc, 0x23, 0x6f, 0xb0, 0x3b, 0x4f, 0x7d, 0x07, 0xb9, 0x0f, 0x62, 0x92, 0x7e, 0xda, 0x70, 0x50, 0xce, 0xd3, 0x28, 0x12, 0x11, 0x00, 0xeb, 0x8d, 0x63, 0x70, 0x78, 0xa8, 0x7b, 0x76, 0xab, 0xc6, 0x40, 0xc0, 0x4e, 0x80, 0xdd, 0xf0, 0xfe, 0x83, 0x72, 0x56, 0x4c, 0x09, 0x4c, 0xf1, 0x72, 0x72, 0x86, 0x26, 0x31, 0xc3, 0xc2, 0xdc, 0x8e, 0xc7, 0xf4, 0x35, 0xec, 0x17, 0x06, 0x63, 0x47, 0x49, 0x88, 0x47, 0xaf, 0xb3, 0x38, 0x4f, 0x7e, 0x44, 0x95, 0xb5, 0xbb, 0x1d, 0xbd, 0x5a, 0x91, 0x5b, 0xd0, 0x1a, 0xdf, 0x0d, 0x0b, 0x50, 0xd8, 0xe2, 0x0e, 0xc5, 0x00, 0x2d, 0x5b, 0x29, 0x19, 0xaa, 0x2b, 0x64, 0xc5, 0x40, 0x31, 0x48, 0x11, 0xbc, 0x04, 0xd1, 0xcf, 0x6d, 0xf9, 0xa5, 0x2f, 0x4a, 0xc9, 0x82, 0xfa, 0x59, 0xe1, 0xfc, 0xab, 0x1c, 0x33, 0x26, 0x0a, 0x5f, 0xef, 0xf2, 0x06, 0xd8, 0xd3, 0x7e, 0x16, 0x58, 0x16, 0x78, 0x73, 0xae, 0xba, 0xeb, 0xe5, 0x3d, 0xb2, 0x0a, 0xb3, 0x32, 0x2d, 0x14, 0xa4, 0xfa, 0x3f, 0x1f, 0x43, 0xf9, 0x7b, 0xa9, 0x43, 0x98, 0x18, 0x94, 0x07, 0x07, 0xe5, 0x19, 0x34, 0xa8, 0x16, 0x5f, 0x71, 0x67, 0xaa, 0x29, 0xe5, 0xfa, 0xf0, 0x83, 0x06, 0x1d, 0x9d, 0xfc, 0xfe, 0xfe, 0x8c, 0xb5, 0xb2, 0xa9, 0xe7, 0xa0, 0x40, 0x60, 0xb6, 0x71, 0x9e, 0xab, 0x5b, 0x83, 0xb9, 0x0c, 0x2b, 0x58, 0x23, 0x80, 0x09, 0x9e, 0x5d, 0x94, 0x7d, 0x40, 0x76, 0xa9, 0x16, 0x96, 0x9e, 0x83, 0xe0, 0x0d, 0xec, 0xa0, 0xec, 0x76, 0x2a, 0xb7, 0xa0, 0xff, 0xb8, 0x50, 0x4c, 0x5b, 0xc6, 0x8b, 0x0a, 0x65, 0x2e, 0xfe, 0xb4, 0x40, 0x9a, 0x01, 0xd8, 0xc6, 0xa3, 0xab, 0x99, 0xa2, 0xc5, 0x0c, 0x08, 0xc4, 0xb7, 0xee, 0x4d, 0x1d, 0xc4, 0x08, 0x15, 0xd0, 0xdb, 0xaa, 0x63, 0x4f, 0x31, 0xeb, 0x14, 0x97, 0x43, 0xbd, 0xc1, 0x94, 0x08, 0xe6, 0xde, 0x43, 0x9f, 0x95, 0x0b, 0x96, 0x7e, 0x7f, 0x3c, 0x68, 0xba, 0x6f, 0xc4, 0xc9, 0x35, 0x2b, 0xc4, 0x0e, 0xda, 0x1f, 0x91, 0x68, 0x64, 0x63, 0x34, 0x73, 0xbe, 0x57, 0x75, 0xb9, 0xed, 0xf7, 0x2d, 0x3b, 0x05, 0x21, 0x93, 0x28, 0x48, 0x96, 0x95, 0x97, 0xa0, 0xd2, 0x7d, 0x78, 0xbb, 0x6a, 0x49, 0x8f, 0x76, 0x55, 0x74, 0x63, 0xb9, 0xc5, 0x36, 0x12, 0x25, 0xbf, 0x03, 0x82, 0x8f, 0xf0, 0xf6, 0x80, 0xbb, 0x33, 0xb4, 0xf4, 0x17, 0x27, 0x1c, 0xf3, 0x4c, 0x10, 0xa3, 0xe4, 0xd1, 0x55, 0xd9, 0x68, 0x21, 0x4e, 0x5a, 0x83, 0x67, 0xbf, 0xf8, 0x3c, 0x7d, 0x4e, 0x62, 0xd3, 0x28, 0xa7, 0x26, 0x6f, 0xe9, 0xee, 0xc2, 0x0b, 0x2d, 0x03, 0x84, 0xb1, 0xff, 0xd6, 0x68, 0x1f, 0xb6, 0xf2, 0xe4, 0x0f, 0xda, 0x2d, 0xee, 0x5f, 0x6e, 0x21, 0xc8, 0xe1, 0xfc, 0xad, 0x6b, 0x0e, 0x04, 0x7d, 0xaf, 0xc2, 0x3b, 0xa5, 0x68, 0x9b, 0x0c, 0xf3, 0x56, 0xf3, 0xda, 0x8d, 0xc8, 0x7d, 0x39, 0xdc, 0xd5, 0x99, 0xc6, 0x01, 0x10, 0xce, 0x42, 0x1b, 0xac, 0x48, 0xdc, 0x97, 0x78, 0x0a, 0xec, 0xb3, 0x8f, 0x47, 0x35, 0xa3, 0x6a, 0x64, 0xb2, 0x8e, 0x63, 0x69, 0x22, 0x66, 0xae, 0x2e, 0xe0, 0x88, 0xf9, 0x40, 0x3c, 0xc9, 0xa2, 0x57, 0x61, 0xf6, 0xad, 0xf0, 0xdc, 0x90, 0x56, 0x3f, 0x06, 0x9b, 0x7d, 0xbd, 0xc2, 0x81, 0x02, 0xab, 0xb8, 0x15, 0x09, 0x88, 0x4a, 0xff, 0x2f, 0x31, 0xbf, 0x5e, 0xfa, 0x6a, 0x7e, 0xf6, 0xc5, 0xa7, 0xf7, 0xd5, 0xab, 0x55, 0xac, 0xae, 0x0d, 0x8c, 0x8d, 0x7f, 0x4b, 0x25, 0xbb, 0x32, 0xff, 0x11, 0x33, 0x2e, 0x37, 0x37, 0x69, 0x96, 0x15, 0x17, 0xb1, 0x17, 0x49, 0xe0, 0x9a, 0x9c, 0xd9, 0x5b, 0x8d, 0x58, 0xa3, 0x1d, 0x92, 0x87, 0xf8, 0x80, 0xb9, 0xbd, 0x5a, 0xec, 0x40, 0xe1, 0x00, 0x33, 0x60, 0xe4, 0x86, 0x16, 0x6d, 0x61, 0x81, 0xf2, 0x28, 0x6a, 0xa7, 0xce, 0x3f, 0x95, 0xae, 0x43, 0xca, 0xe1, 0x3f, 0x81, 0x74, 0x7e, 0x1c, 0x47, 0x17, 0x95, 0xc6, 0x60, 0xda, 0x74, 0x77, 0xd9, 0x9f, 0xfa, 0x92, 0xb4, 0xbe, 0xe1, 0x23, 0x98, 0x18, 0x95, 0x63, 0x03, 0x13, 0x4c, 0x1a, 0x2d, 0x41, 0xcd, 0xe4, 0x84, 0xf7, 0xe6, 0x38, 0xef, 0xff, 0x95, 0xb2, 0xe8, 0x7c, 0x8f, 0x58, 0xb5, 0xb5, 0xed, 0x27, 0x7f, 0x3c, 0x18, 0xab, 0xbe, 0x7f, 0x4f, 0xe2, 0x35, 0x15, 0x71, 0xb7, 0x6f, 0x85, 0x38, 0x9b, 0x88, 0xf6, 0x9c, 0x8d, 0x43, 0xb5, 0x58, 0x9e, 0xf2, 0xd1, 0x96, 0xbe, 0xb7, 0xad, 0x1a, 0xa0, 0x98 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "testimit2", { 0x80, 0xd9, 0xa0, 0xdc, 0x21, 0xf9, 0x30, 0x40, 0x75, 0xfe, 0x49, 0x1b, 0x9e, 0x71, 0x90, 0x91, 0x78, 0x88, 0x21, 0x60, 0x39, 0xe7, 0xc9, 0x2b, 0xfb, 0x55, 0x1d, 0xf4, 0xdd, 0x2b, 0x0a, 0x01 }, G89_IMIT, { 0 }, { 0x90, 0xf2, 0x11, 0x9a } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 10, { 0x1d, 0xeb, 0xe6, 0x79, 0x0a, 0x59, 0x00, 0xe6, 0x8e, 0x5c }, "id-Gost28147-89-CryptoPro-A-ParamSet", "testimit3", { 0xa9, 0xb6, 0x37, 0xcc, 0x6d, 0x9b, 0x2f, 0x25, 0xb0, 0xdf, 0x47, 0x04, 0x50, 0x68, 0xb0, 0x27, 0x41, 0x27, 0x58, 0x6a, 0xbd, 0x0a, 0x6e, 0x50, 0x2f, 0xc6, 0xfc, 0xc0, 0x3e, 0x29, 0x42, 0xa5 }, G89_IMIT, { 0 }, { 0x31, 0x7c, 0x16, 0xe4 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 6, { 0xef, 0x06, 0x8f, 0x14, 0xc9, 0x04 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "testimit4", { 0xb0, 0x6c, 0x48, 0x23, 0x0a, 0x6e, 0xf4, 0xec, 0x27, 0x98, 0x01, 0x23, 0xa7, 0xd8, 0xbf, 0x60, 0x89, 0xef, 0xad, 0xe8, 0x8f, 0x79, 0x14, 0x8c, 0x18, 0x5c, 0x9a, 0xda, 0xef, 0x0b, 0xdd, 0xa0 }, G89_IMIT, { 0 }, { 0xe9, 0x72, 0xae, 0xbf } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 16, { 0x02, 0xf8, 0xec, 0x2b, 0x4d, 0x1f, 0xbc, 0x7c, 0x6e, 0x47, 0xe3, 0x87, 0x22, 0x75, 0x41, 0xa7 }, "id-Gost28147-89-CryptoPro-B-ParamSet", "testimit5", { 0x33, 0xd3, 0xef, 0x01, 0x19, 0x95, 0x0e, 0x15, 0xa1, 0x69, 0x75, 0xae, 0x56, 0x27, 0x17, 0x79, 0x63, 0x47, 0xab, 0x62, 0x9d, 0x4a, 0xf0, 0x34, 0xd3, 0x1e, 0x69, 0x74, 0xec, 0x31, 0x48, 0xfc }, G89_IMIT, { 0 }, { 0xf5, 0x55, 0x1f, 0x28 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 8, { 0xf3, 0xb2, 0x29, 0xd2, 0x7a, 0x37, 0x03, 0x12 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "testimit6", { 0x42, 0x35, 0x81, 0x91, 0x0b, 0xa9, 0x99, 0xff, 0xd9, 0x43, 0xf8, 0xc6, 0x19, 0x55, 0x1f, 0x2f, 0x2d, 0x45, 0x40, 0x20, 0x1e, 0x1d, 0x32, 0x7a, 0xb1, 0x07, 0x6b, 0x4f, 0x45, 0x90, 0xd9, 0x80 }, G89_IMIT, { 0 }, { 0x6e, 0x15, 0xfa, 0xe8 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 0, { 0 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "testimit7", { 0x26, 0xcb, 0xb9, 0xf0, 0x0c, 0x62, 0x9f, 0xaa, 0x4a, 0x1d, 0xb6, 0x30, 0x09, 0x01, 0x56, 0x89, 0x66, 0xd4, 0xe4, 0x0e, 0xfe, 0xf6, 0x10, 0x6b, 0x6c, 0xe8, 0x04, 0x3a, 0xe3, 0x61, 0x4b, 0x19 }, G89_IMIT, { 0 }, { 0x00, 0x00, 0x00, 0x00 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 5242880, { 0 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "test5Mimit", { 0xaa, 0x85, 0x84, 0xcd, 0x65, 0x28, 0xe1, 0xdb, 0xb8, 0x20, 0x19, 0x43, 0xe0, 0x36, 0x35, 0x10, 0x19, 0xc3, 0x70, 0x5b, 0x27, 0xc1, 0x9d, 0x84, 0x75, 0xa3, 0xc6, 0x49, 0x46, 0x8f, 0x7c, 0x4e }, G89_IMIT, { 0 }, { 0x2a, 0xe6, 0x23, 0xc6 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 3221225472ULL + 16, { 0 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "test3Gimit1", { 0xd5, 0xda, 0xfe, 0x06, 0x60, 0xdc, 0xf0, 0xb3, 0x49, 0x5a, 0x02, 0x59, 0xc8, 0x2e, 0x4a, 0x2b, 0xcc, 0x9b, 0x98, 0x04, 0xb7, 0xf2, 0x78, 0xb7, 0xce, 0xa3, 0xf2, 0xdb, 0x9e, 0xa8, 0x49, 0x1d }, G89_IMIT, { 0 }, { 0xcc, 0x46, 0x67, 0xe4 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 4ULL*1024*1024*1024ULL, { 0 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "test4Gimit3", { 0x0d, 0xf1, 0xa8, 0x7f, 0x57, 0x03, 0x44, 0xcc, 0xdb, 0x20, 0xde, 0xed, 0x85, 0x50, 0x38, 0xda, 0xc9, 0x44, 0xec, 0x2c, 0x0d, 0x66, 0xb7, 0xdc, 0x17, 0x14, 0x55, 0x95, 0x33, 0x6e, 0x43, 0x3e }, G89_IMIT, { 0 }, { 0xb7, 0x21, 0x2e, 0x48 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 4ULL*1024*1024*1024+4ULL, { 0 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "test4Gimit1", { 0x0c, 0xf3, 0xe9, 0xb0, 0x28, 0x3b, 0x9f, 0x8b, 0xe3, 0x82, 0xb9, 0xa2, 0xa6, 0xbd, 0x80, 0xd2, 0xcd, 0xfa, 0x3f, 0xf7, 0x90, 0xa7, 0x55, 0x06, 0x9b, 0x7a, 0x58, 0xee, 0xe7, 0xf1, 0x9d, 0xbe }, G89_IMIT, { 0 }, { 0xda, 0x15, 0x10, 0x73 } }, { /* Calculated by libcapi10, CryptoPro CSP 3.6R2, Mac OSX */ 4ULL*1024*1024*1024+10ULL, { 0 }, "id-Gost28147-89-CryptoPro-A-ParamSet", "test4Gimit2", { 0x97, 0x1a, 0x42, 0x22, 0xfa, 0x07, 0xb2, 0xca, 0xf9, 0xd2, 0x34, 0x5a, 0x92, 0xb1, 0x1f, 0x6b, 0x53, 0xf8, 0xaf, 0xed, 0x9a, 0x73, 0xc4, 0x38, 0xd7, 0x7d, 0x25, 0x81, 0x00, 0x0d, 0xd4, 0x29 }, G89_IMIT, { 0 }, { 0x52, 0xaa, 0x22, 0xb4 } } }; int main(int argc, char *argv[]) { int t; unsigned long long ullMaxLen = 6*1000*1000; int ignore = 0; ENGINE *impl = NULL; EVP_MD_CTX *mctx = NULL; EVP_CIPHER_CTX *ectx = NULL; EVP_PKEY *mac_key; byte bDerive[EVP_MAX_KEY_LENGTH]; byte bTest[G89_MAX_TC_LEN]; byte bTest1[G89_MAX_TC_LEN]; unsigned long long ullLeft; static const byte bZB[40*1024*1024] = { 0 }; static byte bTS[40*1024*1024] = { 0 }; unsigned int mdl = 0; int enlu = 0; int enlf = 0; size_t siglen; size_t l = 0; const EVP_MD *md_gost94 = NULL; const EVP_CIPHER *cp_g89cfb = NULL; const EVP_CIPHER *cp_g89cnt = NULL; const EVP_CIPHER *ctype = NULL; const EVP_MD *md_g89imit = NULL; long lErrLine; CONF *pConfig = NCONF_new(NULL); BIO *bpConf; char sConf[] = "openssl_conf = openssl_def\n" "\n" "[openssl_def]\n" "engines = engine_section\n" "\n" "[engine_section]\n" "gost = gost_section\n" "\n" "[gost_section]\n" "default_algorithms = ALL\n" "\n" ; printf("Testing GOST 28147-89 "); if(1 < argc) { if(1 != sscanf(argv[1], "%llu", &ullMaxLen) || ( 2 < argc ? 1 != sscanf(argv[2], "%d", &ignore) : 0)) { fflush(NULL); fprintf(stderr, "Usage: %s [maxlen [ignore-error]]\n", argv[0]); return 1; } } /* * Internal function test on GostR3411_94_TestParamSet */ #ifdef OPENSSL_NO_DYNAMIC_ENGINE { gost_ctx ctx; for(t = 0; t < sizeof(tcs)/sizeof(tcs[0]); t++) { const gost_subst_block *pSubst = NULL; if(1024 < tcs[t].ullLen) { /* Key meshing check by engine tests */ continue; } memset(bTest, 0xc3, sizeof(bTest)); if(0 == strcmp(tcs[t].szParamSet, "id-GostR3410-94-TestParamSet")) { pSubst = &GostR3411_94_TestParamSet; } else if(0 == strcmp(tcs[t].szParamSet, "id-Gost28147-89-CryptoPro-A-ParamSet")) { pSubst = &Gost28147_CryptoProParamSetA; } else if(0 == strcmp(tcs[t].szParamSet, "id-Gost28147-89-CryptoPro-B-ParamSet")) { pSubst = &Gost28147_CryptoProParamSetB; } else if(0 == strcmp(tcs[t].szParamSet, "id-Gost28147-89-CryptoPro-C-ParamSet")) { pSubst = &Gost28147_CryptoProParamSetC; } else if(0 == strcmp(tcs[t].szParamSet, "id-Gost28147-89-CryptoPro-D-ParamSet")) { pSubst = &Gost28147_CryptoProParamSetD; } gost_init(&ctx, pSubst); gost_key(&ctx, tcs[t].bRawKey); switch(tcs[t].gMode) { case G89_ECB: gost_enc(&ctx, tcs[t].bIn, bTest, (int)((tcs[t].ullLen + G89_BLOCK_LEN - 1)/ G89_BLOCK_LEN)); l = (size_t)tcs[t].ullLen; break; case G89_CFB: gost_enc_cfb(&ctx, tcs[t].bIV, tcs[t].bIn, bTest, (int)((tcs[t].ullLen + G89_BLOCK_LEN - 1)/ G89_BLOCK_LEN)); l = (size_t)tcs[t].ullLen; break; case G89_CNT: /* GOST 28147-89 cipher CNT mode check by engine * tests */ continue; case G89_IMIT: gost_mac(&ctx, 32, tcs[t].bIn, (unsigned int)tcs[t].ullLen, bTest); gost_mac_iv(&ctx, 32, tcs[t].bIV, tcs[t].bIn, (unsigned int)tcs[t].ullLen, bTest1); if(0 != memcmp(bTest, bTest1, 4)) { fflush(NULL); fprintf(stderr, "\nInternal test t=%d len=%llu " "failed (gost_mac_iv).\n", t, tcs[t].ullLen); if(!ignore) { return 2; } } l = 4; break; } gost_destroy(&ctx); if(0 != memcmp(tcs[t].bOut, bTest, l)) { fflush(NULL); fprintf(stderr, "\nInternal test t=%d len=%llu " "failed.\n", t, tcs[t].ullLen); if(!ignore) { return 3; } } else { printf(","); fflush(NULL); } } } #endif /* * ccgost engine test on GostR3411_94_CryptoProParamSet */ #ifndef OPENSSL_NO_DYNAMIC_ENGINE setenv("OPENSSL_ENGINES", CCGOST_DIR, 1); #endif ERR_load_crypto_strings(); ENGINE_load_builtin_engines(); OPENSSL_load_builtin_modules(); bpConf = BIO_new_mem_buf(sConf, -1); if(!NCONF_load_bio(pConfig, bpConf, &lErrLine)) { fflush(NULL); fprintf(stderr, "NCONF_load_bio: ErrLine=%ld: %s\n", lErrLine, ERR_error_string(ERR_get_error(), NULL)); return 4; } BIO_free(bpConf); if(!CONF_modules_load(pConfig, NULL, 0)) { fflush(NULL); fprintf(stderr, "CONF_modules_load: %s\n", ERR_error_string(ERR_get_error(), NULL)); return 5; } /* Test load engine */ if(NULL == (impl = ENGINE_by_id(CCGOST_ID))) { fflush(NULL); fprintf(stderr, "Can't load engine id \"" CCGOST_ID "\"\n"); if(!ignore) { return 6; } } if(NULL == (md_gost94 = EVP_get_digestbyname(SN_id_GostR3411_94))) { fflush(NULL); fprintf(stderr, "\"" SN_id_GostR3411_94 "\" - not found\n"); if(!ignore) { return 7; } } if(NULL == (cp_g89cfb = EVP_get_cipherbyname(SN_id_Gost28147_89))) { fflush(NULL); fprintf(stderr, "\"" SN_id_Gost28147_89 "\" - not found\n"); if(!ignore) { return 8; } } if(NULL == (cp_g89cnt = EVP_get_cipherbyname(SN_gost89_cnt))) { fflush(NULL); fprintf(stderr, "\"" SN_gost89_cnt "\" - not found\n"); if(!ignore) { return 9; } } if(NULL == (md_g89imit = EVP_get_digestbyname(SN_id_Gost28147_89_MAC))) { fflush(NULL); fprintf(stderr, "\"" SN_id_Gost28147_89_MAC "\" - not found\n"); if(!ignore) { return 10; } } /* Test cases */ for(t = 0; t < sizeof(tcs)/sizeof(tcs[0]); t++) { if(NULL == tcs[t].szDerive) { continue; } memset(bDerive, 0x3c, sizeof(bDerive)); mdl = sizeof(bDerive); EVP_Digest(tcs[t].szDerive, strlen(tcs[t].szDerive), bDerive, &mdl, md_gost94, impl); if(0 != memcmp(tcs[t].bRawKey, bDerive, mdl)) { fflush(NULL); fprintf(stderr, "Engine test t=%d " "derive key error.\n", t); if(!ignore) { return 12; } } if(ullMaxLen < tcs[t].ullLen) { continue; } memset(bTest, 0xa5, sizeof(bTest)); memset(bTest1, 0x5a, sizeof(bTest1)); if(!ENGINE_ctrl_cmd_string(impl, "CRYPT_PARAMS", tcs[t].szParamSet, 0)) { fflush(NULL); fprintf(stderr, "ENGINE_ctrl_cmd_string: %s\n", ERR_error_string(ERR_get_error(), NULL)); return 11; } switch(tcs[t].gMode) { case G89_ECB: /* OpenSSL/ccgost not implemented GOST 28147-89 ECB */ continue; case G89_CFB: ctype = cp_g89cfb; goto engine_cipher_check; case G89_CNT: if(0 != strcmp("id-Gost28147-89-CryptoPro-A-ParamSet", tcs[t].szParamSet)) { /* * ccgost engine can't change S-Box for gost-cnt */ continue; } ctype = cp_g89cnt; engine_cipher_check: EVP_CIPHER_CTX_init(ectx); EVP_EncryptInit_ex(ectx, ctype, impl, bDerive, tcs[t].bIV); if(G89_MAX_TC_LEN >= tcs[t].ullLen) { enlu = sizeof(bTest); EVP_EncryptUpdate(ectx, bTest, &enlu, tcs[t].bIn, (int)tcs[t].ullLen); l = (size_t)tcs[t].ullLen; } else { for(ullLeft = tcs[t].ullLen; ullLeft >= sizeof(bZB); ullLeft -= sizeof(bZB)) { printf("B"); fflush(NULL); enlu = sizeof(bTS); EVP_EncryptUpdate(ectx, bTS, &enlu, bZB, sizeof(bZB)); } printf("b%llu/%llu", ullLeft, tcs[t].ullLen); fflush(NULL); EVP_EncryptUpdate(ectx, bTS, &enlu, bZB, (int)ullLeft); memcpy(bTest, &bTS[enlu-16], 16); enlu = (int)tcs[t].ullLen; l = 16; } enlf = sizeof(bTest1); EVP_EncryptFinal_ex(ectx, bTest1, &enlf); EVP_CIPHER_CTX_cleanup(ectx); break; case G89_IMIT: if(0 != strcmp("id-Gost28147-89-CryptoPro-A-ParamSet", tcs[t].szParamSet)) { /* * ccgost engine can't change S-Box for gost-mac */ continue; } EVP_MD_CTX_init(mctx); mac_key = EVP_PKEY_new_mac_key( NID_id_Gost28147_89_MAC, NULL, bDerive, mdl); EVP_DigestSignInit(mctx, NULL, md_g89imit, impl, mac_key); if(G89_MAX_TC_LEN >= tcs[t].ullLen) { EVP_DigestSignUpdate(mctx, tcs[t].bIn, (unsigned int)tcs[t].ullLen); } else { for(ullLeft = tcs[t].ullLen; ullLeft >= sizeof(bZB); ullLeft -= sizeof(bZB)) { printf("B"); fflush(NULL); EVP_DigestSignUpdate(mctx, bZB, sizeof(bZB)); } printf("b%llu/%llu", ullLeft, tcs[t].ullLen); fflush(NULL); EVP_DigestSignUpdate(mctx, bZB, (unsigned int)ullLeft); } siglen = 4; EVP_DigestSignFinal(mctx, bTest, &siglen); EVP_MD_CTX_free(mctx); enlu = (int)tcs[t].ullLen; enlf = 0; l = siglen; break; } if((int)tcs[t].ullLen != enlu || 0 != enlf || 0 != memcmp(tcs[t].bOut, bTest, l)) { fflush(NULL); fprintf(stderr, "\nEngine test t=%d len=%llu " "failed.\n", t, tcs[t].ullLen); if(!ignore) { return 13; } } else { printf("."); fflush(NULL); } } printf(" passed\n"); fflush(NULL); return EXIT_SUCCESS; } libengine-gost-openssl-3.0.2/test_gost89.c000066400000000000000000000045021446070765000204550ustar00rootroot00000000000000/********************************************************************** * gost89.c * * Copyright (c) 2005-2006 Cryptocom LTD * * This file is distributed under the same license as OpenSSL * * * * Implementation of GOST 28147-89 encryption algorithm * * No OpenSSL libraries required to compile and use * * this code * **********************************************************************/ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif #include #include "gost89.h" #include #include static void hexdump(FILE *f, const char *title, const unsigned char *s, int l) { int n = 0; fprintf(f, "%s", title); for (; n < l; ++n) { if ((n % 16) == 0) fprintf(f, "\n%04x", n); fprintf(f, " %02x", s[n]); } fprintf(f, "\n"); } int main(void) { int ret = 0; const unsigned char initial_key[] = { 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }; const unsigned char meshed_key[] = { 0x86, 0x3E, 0xA0, 0x17, 0x84, 0x2C, 0x3D, 0x37, 0x2B, 0x18, 0xA8, 0x5A, 0x28, 0xE2, 0x31, 0x7D, 0x74, 0xBE, 0xFC, 0x10, 0x77, 0x20, 0xDE, 0x0C, 0x9E, 0x8A, 0xB9, 0x74, 0xAB, 0xD0, 0x0C, 0xA0, }; unsigned char buf[32]; gost_ctx ctx; kboxinit(&ctx, &Gost28147_TC26ParamSetZ); magma_key(&ctx, initial_key); magma_get_key(&ctx, buf); hexdump(stdout, "Initial key", buf, 32); acpkm_magma_key_meshing(&ctx); magma_get_key(&ctx, buf); hexdump(stdout, "Meshed key - K2", buf, 32); if (memcmp(meshed_key, buf, 32)) { fprintf(stderr, "Magma meshing failed"); ret = 1; } acpkm_magma_key_meshing(&ctx); magma_get_key(&ctx, buf); hexdump(stdout, "Meshed key - K3", buf, 32); acpkm_magma_key_meshing(&ctx); magma_get_key(&ctx, buf); hexdump(stdout, "Meshed key - K4", buf, 32); return ret; } libengine-gost-openssl-3.0.2/test_keyexpimp.c000066400000000000000000000132561446070765000213410ustar00rootroot00000000000000/* * Copyright (c) 2019-2020 Dmitry Belyavskiy * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) # include # include #else # include #endif #include #include #include #include #include #include #include "gost_lcl.h" #include "e_gost_err.h" #include "gost_grasshopper_cipher.h" #define T(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ OpenSSLDie(__FILE__, __LINE__, #e); \ } static void hexdump(FILE *f, const char *title, const unsigned char *s, int l) { int n = 0; fprintf(f, "%s", title); for (; n < l; ++n) { if ((n % 16) == 0) fprintf(f, "\n%04x", n); fprintf(f, " %02x", s[n]); } fprintf(f, "\n"); } int main(void) { const unsigned char shared_key[] = { 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }; const unsigned char magma_key[] = { 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F, 0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, }; unsigned char mac_magma_key[] = { 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, }; const unsigned char magma_iv[] = { 0x67, 0xBE, 0xD6, 0x54 }; const unsigned char magma_export[] = { 0xCF, 0xD5, 0xA1, 0x2D, 0x5B, 0x81, 0xB6, 0xE1, 0xE9, 0x9C, 0x91, 0x6D, 0x07, 0x90, 0x0C, 0x6A, 0xC1, 0x27, 0x03, 0xFB, 0x3A, 0xBD, 0xED, 0x55, 0x56, 0x7B, 0xF3, 0x74, 0x2C, 0x89, 0x9C, 0x75, 0x5D, 0xAF, 0xE7, 0xB4, 0x2E, 0x3A, 0x8B, 0xD9 }; unsigned char kdftree_key[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, }; unsigned char kdf_label[] = { 0x26, 0xBD, 0xB8, 0x78 }; unsigned char kdf_seed[] = { 0xAF, 0x21, 0x43, 0x41, 0x45, 0x65, 0x63, 0x78 }; const unsigned char kdf_etalon[] = { 0x22, 0xB6, 0x83, 0x78, 0x45, 0xC6, 0xBE, 0xF6, 0x5E, 0xA7, 0x16, 0x72, 0xB2, 0x65, 0x83, 0x10, 0x86, 0xD3, 0xC7, 0x6A, 0xEB, 0xE6, 0xDA, 0xE9, 0x1C, 0xAD, 0x51, 0xD8, 0x3F, 0x79, 0xD1, 0x6B, 0x07, 0x4C, 0x93, 0x30, 0x59, 0x9D, 0x7F, 0x8D, 0x71, 0x2F, 0xCA, 0x54, 0x39, 0x2F, 0x4D, 0xDD, 0xE9, 0x37, 0x51, 0x20, 0x6B, 0x35, 0x84, 0xC8, 0xF4, 0x3F, 0x9E, 0x6D, 0xC5, 0x15, 0x31, 0xF9 }; const unsigned char tlstree_gh_etalon[] = { 0x50, 0x76, 0x42, 0xd9, 0x58, 0xc5, 0x20, 0xc6, 0xd7, 0xee, 0xf5, 0xca, 0x8a, 0x53, 0x16, 0xd4, 0xf3, 0x4b, 0x85, 0x5d, 0x2d, 0xd4, 0xbc, 0xbf, 0x4e, 0x5b, 0xf0, 0xff, 0x64, 0x1a, 0x19, 0xff, }; unsigned char buf[32 + 16]; int ret = 0, err = 0; int outlen = 40; unsigned char kdf_result[64]; unsigned char kroot[32]; unsigned char tlsseq[8]; unsigned char out[32]; #ifdef _MSC_VER _putenv_s("OPENSSL_ENGINES", ENGINE_DIR); #else setenv("OPENSSL_ENGINES", ENGINE_DIR, 0); #endif OPENSSL_add_all_algorithms_conf(); ERR_load_crypto_strings(); ENGINE *eng; T(eng = ENGINE_by_id("gost")); T(ENGINE_init(eng)); T(ENGINE_set_default(eng, ENGINE_METHOD_ALL)); memset(buf, 0, sizeof(buf)); memset(kroot, 0xFF, 32); memset(tlsseq, 0, 8); tlsseq[7] = 63; memset(out, 0, 32); ret = gost_kexp15(shared_key, 32, NID_magma_ctr, magma_key, NID_magma_mac, mac_magma_key, magma_iv, 4, buf, &outlen); if (ret <= 0) { ERR_print_errors_fp(stderr); err = 1; } else { hexdump(stdout, "Magma key export", buf, 40); if (memcmp(buf, magma_export, 40) != 0) { fprintf(stdout, "ERROR! test failed\n"); err = 2; } } ret = gost_kimp15(magma_export, 40, NID_magma_ctr, magma_key, NID_magma_mac, mac_magma_key, magma_iv, 4, buf); if (ret <= 0) { ERR_print_errors_fp(stderr); err = 3; } else { hexdump(stdout, "Magma key import", buf, 32); if (memcmp(buf, shared_key, 32) != 0) { fprintf(stdout, "ERROR! test failed\n"); err = 4; } } ret = gost_kdftree2012_256(kdf_result, 64, kdftree_key, 32, kdf_label, 4, kdf_seed, 8, 1); if (ret <= 0) { ERR_print_errors_fp(stderr); err = 5; } else { hexdump(stdout, "KDF TREE", kdf_result, 64); if (memcmp(kdf_result, kdf_etalon, 64) != 0) { fprintf(stdout, "ERROR! test failed\n"); err = 6; } } ret = gost_tlstree(NID_grasshopper_cbc, kroot, out, tlsseq); if (ret <= 0) { ERR_print_errors_fp(stderr); err = 7; } else { hexdump(stdout, "Gost TLSTREE - grasshopper", out, 32); if (memcmp(out, tlstree_gh_etalon, 32) != 0) { fprintf(stdout, "ERROR! test failed\n"); err = 8; } } ENGINE_finish(eng); ENGINE_free(eng); return err; } libengine-gost-openssl-3.0.2/test_mgm.c000066400000000000000000000227501446070765000201050ustar00rootroot00000000000000/* * Test "Recommendations for standardization R 1323565.1.026 - 2019" * authentivated encryption block cipher operation modes * * Copyright (C) 2019-2020 Vitaly Chikunov . All Rights Reserved. * Copyright (c) 2020-2021 JSC "NPK "Kryptonite" . * Code based on test_ciphers.c from master branch. * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #include #include #include #include "gost_grasshopper_cipher.h" #include "gost_gost2015.h" #if defined _MSC_VER # include # define alloca _alloca #elif defined __linux__ # include #endif #define T(e) ({ \ if (!(e)) {\ ERR_print_errors_fp(stderr);\ OpenSSLDie(__FILE__, __LINE__, #e);\ } \ }) #define TEST_ASSERT(e) {if ((test = (e))) \ printf("Test FAILED\n"); \ else \ printf("Test passed\n");} /* MGM-Encrypt/MGM-decrypt test data from "R 1323565.1.026-2019" */ const unsigned char gh_key[32] = { 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0xFF, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0xFE, 0xDC, 0xBA, 0x98, 0x76, 0x54, 0x32, 0x10, 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, }; const unsigned char gh_nonce[16] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x00, 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88 }; const unsigned char gh_adata[41] = { 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0xEA, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05 }; const unsigned char gh_pdata[67] = { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x00, 0xFF, 0xEE, 0xDD, 0xCC, 0xBB, 0xAA, 0x99, 0x88, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xEE, 0xFF, 0x0A, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xEE, 0xFF, 0x0A, 0x00, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC, 0xEE, 0xFF, 0x0A, 0x00, 0x11, 0xAA, 0xBB, 0xCC }; const unsigned char gh_e_cdata[67] = { 0xA9, 0x75, 0x7B, 0x81, 0x47, 0x95, 0x6E, 0x90, 0x55, 0xB8, 0xA3, 0x3D, 0xE8, 0x9F, 0x42, 0xFC, 0x80, 0x75, 0xD2, 0x21, 0x2B, 0xF9, 0xFD, 0x5B, 0xD3, 0xF7, 0x06, 0x9A, 0xAD, 0xC1, 0x6B, 0x39, 0x49, 0x7A, 0xB1, 0x59, 0x15, 0xA6, 0xBA, 0x85, 0x93, 0x6B, 0x5D, 0x0E, 0xA9, 0xF6, 0x85, 0x1C, 0xC6, 0x0C, 0x14, 0xD4, 0xD3, 0xF8, 0x83, 0xD0, 0xAB, 0x94, 0x42, 0x06, 0x95, 0xC7, 0x6D, 0xEB, 0x2C, 0x75, 0x52 }; const unsigned char gh_e_tag[16] = { 0xCF, 0x5D, 0x65, 0x6F, 0x40, 0xC3, 0x4F, 0x5C, 0x46, 0xE8, 0xBB, 0x0E, 0x29, 0xFC, 0xDB, 0x4C }; const unsigned char mg_key[32] = { 0xFF, 0xee, 0xDD, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x77, 0x66, 0x55, 0x44, 0x33, 0x22, 0x11, 0x00, 0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xff }; const unsigned char mg_nonce[8] = { 0x12, 0xDE, 0xF0, 0x6B, 0x3C, 0x13, 0x0A, 0x59 }; const unsigned char mg_adata[41] = { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0xea }; const unsigned char mg_pdata[67] = { 0xFF, 0xee, 0xDD, 0xcc, 0xbb, 0xaa, 0x99, 0x88, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x00, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xee, 0xFF, 0x0A, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x99, 0xaa, 0xbb, 0xcc, 0xee, 0xFF, 0x0a, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0xaa, 0xbb, 0xcc, 0xee, 0xFF, 0x0a, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc }; const unsigned char mg_e_cdata[67] = { 0xc7, 0x95, 0x06, 0x6c, 0x5f, 0x9e, 0xa0, 0x3b, 0x85, 0x11, 0x33, 0x42, 0x45, 0x91, 0x85, 0xae, 0x1f, 0x2e, 0x00, 0xd6, 0xbf, 0x2b, 0x78, 0x5d, 0x94, 0x04, 0x70, 0xb8, 0xbb, 0x9c, 0x8e, 0x7d, 0x9a, 0x5d, 0xd3, 0x73, 0x1f, 0x7d, 0xdc, 0x70, 0xec, 0x27, 0xcb, 0x0a, 0xce, 0x6f, 0xa5, 0x76, 0x70, 0xf6, 0x5c, 0x64, 0x6a, 0xbb, 0x75, 0xd5, 0x47, 0xaa, 0x37, 0xc3, 0xbc, 0xb5, 0xc3, 0x4e, 0x03, 0xbb, 0x9c }; const unsigned char mg_e_tag[8] = { 0xa7, 0x92, 0x80, 0x69, 0xaa, 0x10, 0xfd, 0x10 }; static struct testcase { const char *sn; const unsigned char *key; const unsigned char *nonce; size_t nonce_len; const unsigned char *aad; size_t aad_len; const unsigned char *plaintext; size_t ptext_len; const unsigned char *expected; const unsigned char *expected_tag; } testcases[] = { { .sn = SN_kuznyechik_mgm, .key = gh_key, .nonce = gh_nonce, .nonce_len = sizeof(gh_nonce), .aad = gh_adata, .aad_len = sizeof(gh_adata), .plaintext = gh_pdata, .ptext_len = sizeof(gh_pdata), .expected = gh_e_cdata, .expected_tag = gh_e_tag }, { .sn = SN_magma_mgm, .key = mg_key, .nonce = mg_nonce, .nonce_len = sizeof(mg_nonce), .aad = mg_adata, .aad_len = sizeof(mg_adata), .plaintext = mg_pdata, .ptext_len = sizeof(mg_pdata), .expected = mg_e_cdata, .expected_tag = mg_e_tag }, { 0 } }; static int test_block(const EVP_CIPHER *ciph, const char *name, const unsigned char *nonce, size_t nlen, const unsigned char *aad, size_t alen, const unsigned char *ptext, size_t plen, const unsigned char *exp_ctext, const unsigned char *exp_tag, const unsigned char * key, int small) { EVP_CIPHER_CTX *ctx = EVP_CIPHER_CTX_new(); unsigned char *c = alloca(plen); int tag_len = nlen; unsigned char *t = alloca(tag_len); int outlen1, outlen2, tmplen; int ret = 0, rv, test, i; OPENSSL_assert(ctx); printf("Encryption test %s [%s]: ", name, small ? "small chunks" : "big chunks"); // test encrypt EVP_CIPHER_CTX_init(ctx); EVP_EncryptInit_ex(ctx, ciph, NULL, NULL, NULL); // Set cipher type and mode EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, nlen, NULL); // Set IV length EVP_EncryptInit_ex(ctx, NULL, NULL, key, nonce); // Initialise key and IV memset(c, 0, plen); if (!small) { // test big chunks EVP_EncryptUpdate(ctx, NULL, &outlen1, aad, alen); // Zero or more calls to specify any AAD EVP_EncryptUpdate(ctx, c, &outlen2, ptext, plen); // Encrypt plaintext } else { // test small chunks outlen1 = outlen2 = 0; unsigned char *p; for (i = 0; i < alen; i++) { EVP_EncryptUpdate(ctx, NULL, &tmplen, aad + i, 1); outlen1 += tmplen; } for (i = 0, p = c; i < plen; i++) { EVP_EncryptUpdate(ctx, p, &tmplen, ptext + i, 1); p += tmplen; outlen2 += tmplen; } } EVP_EncryptFinal_ex(ctx, c, &tmplen); EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_GET_TAG, tag_len, t); EVP_CIPHER_CTX_cleanup(ctx); TEST_ASSERT(outlen1 != alen || outlen2 != plen || memcmp(c, exp_ctext, plen) || memcmp(t, exp_tag, tag_len)); ret |= test; // test decrtypt printf("Decryption test %s [%s]: ", name, small ? "small chunks" : "big chunks"); EVP_CIPHER_CTX_init(ctx); EVP_DecryptInit_ex(ctx, ciph, NULL, NULL, NULL); EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_IVLEN, nlen, NULL); EVP_DecryptInit_ex(ctx, NULL, NULL, key, nonce); memset(c, 0, plen); if (!small) { // test big chunks EVP_DecryptUpdate(ctx, NULL, &outlen1, aad, alen); EVP_DecryptUpdate(ctx, c, &outlen2, exp_ctext, plen); } else { // test small chunks outlen1 = outlen2 = 0; unsigned char *p; for (i = 0; i < alen; i++) { EVP_DecryptUpdate(ctx, NULL, &tmplen, aad + i, 1); outlen1 += tmplen; } for (i = 0, p = c; i < plen; i++) { EVP_DecryptUpdate(ctx, p, &tmplen, exp_ctext + i, 1); p += tmplen; outlen2 += tmplen; } } EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_AEAD_SET_TAG, tag_len, (void *)exp_tag); rv = EVP_DecryptFinal_ex(ctx, c, &tmplen); EVP_CIPHER_CTX_cleanup(ctx); EVP_CIPHER_CTX_free(ctx); TEST_ASSERT(outlen1 != alen || outlen2 != plen || memcmp(c, ptext, plen) || rv != 1); ret |= test; return ret; } int main(void) { int ret = 0; const struct testcase *t; OPENSSL_add_all_algorithms_conf(); for (t = testcases; t->sn; t++) { int small; const EVP_CIPHER *ciph_eng = EVP_get_cipherbyname(t->sn); EVP_CIPHER *ciph_prov = EVP_CIPHER_fetch(NULL, t->sn, NULL); const EVP_CIPHER *ciph = ciph_eng ? ciph_eng : ciph_prov; const char *name; if (!ciph) { printf("failed to load %s\n", t->sn); return 1; } name = EVP_CIPHER_name(ciph); printf("Tests for %s\n", name); for (small = 0; small <= 1; small++) ret |= test_block(ciph, name, t->nonce, t->nonce_len, t->aad, t->aad_len, t->plaintext, t->ptext_len, t->expected, t->expected_tag, t->key, small); EVP_CIPHER_free(ciph_prov); } if (ret) { printf("Some tests FAILED!\n"); } else { printf("All tests passed!\n"); } return ret; } libengine-gost-openssl-3.0.2/test_params.c000066400000000000000000001473251446070765000206160ustar00rootroot00000000000000/* * Test GOST 34.10 Verify operation with every curve parameter * * Copyright (C) 2019 vt@altlinux.org. All Rights Reserved. * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif #include "e_gost_err.h" #include "gost_lcl.h" #include #include #include #include #include #include #include #include #include #define T(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ OpenSSLDie(__FILE__, __LINE__, #e); \ } #define TE(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ fprintf(stderr, "Error at %s:%d %s\n", __FILE__, __LINE__, #e); \ return -1; \ } #define cRED "\033[1;31m" #define cDRED "\033[0;31m" #define cGREEN "\033[1;32m" #define cDGREEN "\033[0;32m" #define cBLUE "\033[1;34m" #define cDBLUE "\033[0;34m" #define cNORM "\033[m" #define TEST_ASSERT(e) {if ((test = (e))) \ printf(cRED " Test FAILED" cNORM "\n"); \ else \ printf(cGREEN " Test passed" cNORM "\n");} struct test_param { unsigned int param; /* NID of EC parameters */ unsigned int len; /* length of a digest or a half of the key */ unsigned int data_len; /* length of @data */ const uint8_t *data; /* data to hash (optional) */ const uint8_t *hash; /* hash of data */ const uint8_t *signature; /* raw signature */ const uint8_t *pub_key; /* raw public key */ }; /* * Parameters provided by CryptoPro for Basealt SPO to test * interop with open-source software. */ /* 1.2.643.2.2.35.1 - szOID_GostR3410_2001_CryptoPro_A_ParamSet */ const uint8_t data_2001_256_setA[] = { 0xCB, 0x03, 0xB7, 0x57, 0xBC, 0xA7, 0xBC, 0xB6, 0xB0, 0x37, 0xC5, 0xD4, 0xBB, 0x51, 0x52, 0x9A, 0xEE, 0xF3, 0x28, 0x9B, 0x14, 0x11, 0xE2, 0xCB, 0xAB, 0x82, 0x1A, 0xDF, 0x1D, 0x2A, 0x70, 0xE6, 0x09, 0x1B, 0x7C, 0xE9, 0x6D, 0xAE, 0xAF, 0xF9, }; static uint8_t hash_2001_256_setA[] = { 0x4F, 0x49, 0xB3, 0x9E, 0xA0, 0x06, 0xD0, 0xDA, 0x4D, 0x81, 0x50, 0x61, 0x08, 0x66, 0xA1, 0x18, 0xA6, 0x04, 0x25, 0x98, 0xB9, 0x66, 0x00, 0x32, 0xC5, 0x40, 0xD6, 0xEB, 0x1A, 0x85, 0x70, 0xEE, }; static uint8_t signature_2001_256_setA[] = { 0x7E, 0xE2, 0x99, 0xB9, 0x50, 0x78, 0x1C, 0xE4, 0xDC, 0xA6, 0x68, 0xCF, 0x6E, 0x88, 0xDC, 0x29, 0x3F, 0x13, 0x8F, 0x12, 0x14, 0x1A, 0x03, 0x3A, 0x09, 0x01, 0x78, 0x52, 0x82, 0x7D, 0xDC, 0x7B, 0xF0, 0xE5, 0x49, 0x93, 0x9D, 0xBF, 0x95, 0x4B, 0xB4, 0xB1, 0x40, 0x72, 0xDE, 0x15, 0x86, 0x11, 0x1D, 0xF9, 0x63, 0xF2, 0xE7, 0xEF, 0xB7, 0xBD, 0x73, 0xF7, 0xB7, 0xD1, 0x95, 0x61, 0xBA, 0x1C, }; static uint8_t pubkey_2001_256_setA[] = { 0xF0, 0x69, 0xAF, 0x90, 0xEE, 0xE4, 0xA3, 0x33, 0x52, 0xA2, 0xE8, 0x0C, 0x72, 0xE6, 0x20, 0xAF, 0xB7, 0x66, 0x03, 0xE5, 0xFF, 0x85, 0xF3, 0xAA, 0x5F, 0x38, 0x2F, 0x8E, 0x44, 0xEF, 0x51, 0x0F, 0x82, 0x59, 0x4A, 0x99, 0x10, 0xB8, 0x89, 0xCD, 0x78, 0xD2, 0xBA, 0xF1, 0x97, 0xFE, 0xEB, 0xE6, 0x74, 0xC1, 0x96, 0x90, 0x97, 0x71, 0xAD, 0x16, 0x9F, 0x9B, 0x37, 0xDD, 0x2B, 0x44, 0xFF, 0x2D, }; /* 1.2.643.2.2.35.2 - szOID_GostR3410_2001_CryptoPro_B_ParamSet */ const uint8_t data_2001_256_setB[] = { 0x54, 0x7D, 0x31, 0xFE, 0x69, 0xD4, 0xB1, 0x58, 0x7E, 0x34, 0x2D, 0xC9, 0x3D, 0xBD, 0x67, 0xAF, 0xD8, 0x31, 0x90, 0xC4, 0xA9, 0x07, 0xCE, 0x34, 0x3F, 0x90, 0x3A, 0xC4, 0xFC, 0xE4, 0x4E, 0xEA, 0xF1, 0xE9, 0x04, 0xD0, 0x7E, 0x4B, 0xCF, 0x39 }; const uint8_t hash_2001_256_setB[] = { 0x10, 0xDE, 0x3D, 0x7A, 0xEE, 0x6E, 0xC0, 0x0D, 0x57, 0x9B, 0x4B, 0xB2, 0x92, 0xB8, 0xE5, 0x4E, 0x75, 0x19, 0x92, 0xFE, 0x71, 0x91, 0xF7, 0xF2, 0x72, 0xE7, 0x77, 0x47, 0x51, 0xF7, 0xEC, 0x26, }; const uint8_t signature_2001_256_setB[] = { 0x9C, 0x27, 0x76, 0x22, 0xB8, 0x4A, 0xB6, 0x2B, 0xBA, 0x2E, 0xE3, 0xD5, 0x89, 0x72, 0x89, 0x53, 0x7C, 0x2D, 0xB7, 0x70, 0x8A, 0xD5, 0x7B, 0x61, 0xDF, 0xD1, 0xD6, 0x7F, 0x77, 0xFF, 0xDB, 0x4E, 0xEE, 0x98, 0xFC, 0x2C, 0xDE, 0xAA, 0xC7, 0xDE, 0x42, 0xEE, 0x40, 0x12, 0x5E, 0xC8, 0xFE, 0x0E, 0x97, 0x80, 0xB9, 0x6A, 0xAC, 0x93, 0xAD, 0xEE, 0x96, 0xE1, 0xDB, 0xC6, 0xF2, 0xAC, 0xF4, 0x22 }; const uint8_t pubkey_2001_256_setB[] = { 0x6A, 0x8A, 0x5E, 0x32, 0x00, 0xED, 0xD3, 0xA7, 0x38, 0x83, 0x58, 0x7D, 0xBD, 0xE9, 0xFD, 0xA9, 0x00, 0xAE, 0xE8, 0x4F, 0xFF, 0x71, 0xD2, 0xA0, 0x79, 0x14, 0xD4, 0xB4, 0xB2, 0x00, 0x9A, 0x0A, 0x51, 0x21, 0xD5, 0x19, 0x05, 0xF1, 0xB7, 0x6C, 0x2E, 0x3A, 0x18, 0xDD, 0x82, 0x67, 0x7F, 0x96, 0x0B, 0x1A, 0x76, 0x93, 0xF7, 0x6A, 0xCA, 0x15, 0xCD, 0xEE, 0xA1, 0xD2, 0xDE, 0xD5, 0x56, 0x20 }; /* 1.2.643.2.2.35.3 - szOID_GostR3410_2001_CryptoPro_C_ParamSet */ const uint8_t data_2001_256_setC[] = { 0x30, 0x26, 0xBB, 0x7C, 0xEE, 0x71, 0x15, 0xF6, 0x01, 0x3B, 0x8E, 0xF9, 0x04, 0xA7, 0x02, 0x39, 0xC7, 0xF2, 0xDC, 0x15, 0x2C, 0xB4, 0x95, 0x74, 0x1B, 0x66, 0x78, 0x5A, 0x0F, 0xF1, 0x88, 0x5A, 0x68, 0x7F, 0xD2, 0xE8, 0xF3, 0x85, 0xE2, 0xD5 }; const uint8_t hash_2001_256_setC[] = { 0x8C, 0xFE, 0x45, 0xBD, 0x4F, 0x9D, 0xEB, 0x80, 0x78, 0xA7, 0xA3, 0xFB, 0xB3, 0x06, 0x2A, 0xE4, 0xD6, 0xF4, 0x1A, 0x0B, 0x31, 0xEB, 0x82, 0xB8, 0x13, 0x32, 0xD6, 0xA2, 0xAE, 0x80, 0xF1, 0xF7 }; const uint8_t signature_2001_256_setC[] = { 0xD3, 0x16, 0xBB, 0x65, 0x48, 0x6D, 0x2D, 0x55, 0x14, 0x13, 0xAE, 0x20, 0x31, 0x2B, 0xA5, 0x6B, 0x32, 0x56, 0x0C, 0xCF, 0xB3, 0x48, 0x59, 0x63, 0x3C, 0x8F, 0xD6, 0x98, 0x9D, 0x88, 0xB1, 0x34, 0xAB, 0xBD, 0x04, 0x39, 0x66, 0xE5, 0x9D, 0x63, 0xAA, 0xAB, 0x63, 0x98, 0x6C, 0x06, 0x54, 0xC2, 0xDB, 0xD0, 0x6A, 0x6E, 0x57, 0xB3, 0x23, 0x41, 0xAB, 0x22, 0xBB, 0x13, 0x37, 0x18, 0x3E, 0x08 }; const uint8_t pubkey_2001_256_setC[] = { 0xBA, 0x43, 0xE0, 0xF4, 0x0D, 0x3E, 0x50, 0x60, 0xCE, 0xC7, 0xE7, 0x0C, 0x34, 0x8F, 0x21, 0x22, 0xF4, 0x36, 0x7E, 0x0E, 0x35, 0x49, 0x92, 0x66, 0x89, 0x92, 0x0B, 0x62, 0x37, 0xF8, 0x69, 0x82, 0xB7, 0x0E, 0x32, 0x29, 0x5F, 0xD6, 0x44, 0x56, 0xBB, 0x16, 0xD0, 0x8D, 0x3B, 0xE5, 0xC2, 0xB5, 0xCE, 0x99, 0x4D, 0xDD, 0x41, 0xF9, 0xE7, 0x98, 0x14, 0xBD, 0xC5, 0x87, 0xAE, 0x8D, 0xF1, 0x25 }; /* 1.2.643.7.1.2.1.1.1 - szOID_tc26_gost_3410_12_256_paramSetA */ const uint8_t data_tc26_gost_3410_12_256_setA[] = { 0xBF, 0xA5, 0x7B, 0x70, 0x8F, 0x4D, 0xDE, 0x9A, 0x38, 0x5A, 0x4A, 0xA5, 0xD9, 0xDB, 0x84, 0x6A, 0x23, 0xD8, 0xB4, 0x73, 0x1E, 0x9A, 0x55, 0x42, 0x32, 0x85, 0x28, 0xE8, 0x2B, 0x0D, 0x83, 0x0E, 0x06, 0xBF, 0x46, 0x99, 0x38, 0xDF, 0xB4, 0xFA, 0x08, 0x0D, 0x5B, 0x20, 0xEC, 0x0D, 0xD9, 0x7F, 0x7C, 0x69, 0x51, 0xDA, 0xA5, 0x50, 0x2A, 0x65, 0xFD, 0xB1, 0x1F, 0x88, 0xCB, 0xA6, 0xE2, 0x61 }; const uint8_t hash_tc26_gost_3410_12_256_setA[] = { 0xFD, 0x39, 0xEA, 0x88, 0x90, 0x89, 0xD8, 0x1E, 0xE2, 0x49, 0x11, 0xDB, 0x51, 0x71, 0x48, 0x0A, 0xD7, 0x27, 0xCC, 0xBA, 0xD2, 0x19, 0xF4, 0x9E, 0x98, 0xC6, 0x3D, 0x1F, 0xB5, 0x7C, 0x24, 0x2F }; const uint8_t signature_tc26_gost_3410_12_256_setA[] = { 0x0D, 0xC4, 0xCA, 0x98, 0x2B, 0x15, 0x51, 0xD4, 0x74, 0x36, 0x24, 0x10, 0xEA, 0x21, 0x2D, 0x8E, 0xBB, 0x6C, 0xBB, 0x5E, 0xE5, 0x26, 0x76, 0x3D, 0x88, 0x62, 0xC5, 0x2B, 0x5F, 0x93, 0xF9, 0x01, 0x46, 0x49, 0xD6, 0x0F, 0x30, 0x44, 0x45, 0x55, 0x0B, 0xC6, 0x63, 0x60, 0x20, 0x26, 0x09, 0x08, 0x85, 0x2E, 0x16, 0xBE, 0x14, 0x46, 0x31, 0x89, 0xA6, 0xD3, 0x52, 0xBA, 0xD5, 0x51, 0x69, 0x24 }; const uint8_t pubkey_tc26_gost_3410_12_256_setA[] = { 0x3B, 0x8A, 0x6A, 0x5E, 0xFE, 0x62, 0x30, 0x31, 0x3A, 0x34, 0x9A, 0x6A, 0xF0, 0xC4, 0x92, 0x4E, 0xF4, 0xF8, 0x0E, 0xF6, 0xE1, 0xF2, 0x3F, 0xE1, 0x9A, 0xA9, 0x7A, 0x77, 0x97, 0x3A, 0x11, 0xE8, 0xD2, 0xA8, 0x5F, 0xD1, 0x49, 0xE0, 0xBD, 0xAB, 0x28, 0xD5, 0x2B, 0x02, 0x06, 0x99, 0x8E, 0x7E, 0xFF, 0xDB, 0x2A, 0xDE, 0x92, 0x11, 0x34, 0x5D, 0xCF, 0x40, 0xEE, 0x0B, 0xD0, 0x61, 0x89, 0x75 }; /* 1.2.643.7.1.2.1.2.1 - szOID_tc26_gost_3410_12_512_paramSetA */ const uint8_t data_tc26_gost_3410_12_512_setA[] = { 0xEF, 0x15, 0x1E, 0x5B, 0xE9, 0x52, 0x35, 0x84, 0x17, 0x07, 0x4B, 0xBD, 0x10, 0xEA, 0x7D, 0x77, 0x1E, 0xBF, 0x95, 0x55, 0xA4, 0x2A, 0x8F, 0xA7, 0xFF, 0x3F, 0xEC, 0x8F, 0xA2, 0x3C, 0x90, 0x65, 0x4A, 0xB8, 0x59, 0x31, 0xE1, 0x97, 0xD5, 0xC4, 0x26, 0x49, 0xCE, 0x81, 0x53, 0xBE, 0x79, 0xF7, 0xA1, 0xB2, 0xE0, 0x7D, 0x44, 0xA4, 0x74, 0x64, 0xB0, 0x09, 0x62, 0x35, 0xC5, 0x50, 0x7F, 0x36 }; const uint8_t hash_tc26_gost_3410_12_512_setA[] = { 0xE9, 0x25, 0x04, 0x72, 0x12, 0xC3, 0x82, 0x06, 0x00, 0xB6, 0x76, 0xF4, 0x4D, 0x71, 0xE4, 0x42, 0x49, 0x3E, 0x57, 0x23, 0xBF, 0xBD, 0xBF, 0x94, 0x7C, 0x0E, 0x2D, 0xAA, 0x48, 0x36, 0xF5, 0x9A, 0x4D, 0x66, 0x02, 0x42, 0x0E, 0xCC, 0x94, 0xDF, 0x7D, 0x21, 0xF8, 0x69, 0x1D, 0xFD, 0x45, 0x56, 0x42, 0x4C, 0x69, 0x17, 0x8E, 0x21, 0xBE, 0x4F, 0x2C, 0xC8, 0x61, 0xDB, 0xA7, 0x24, 0xEC, 0x48 }; const uint8_t signature_tc26_gost_3410_12_512_setA[] = { 0xC3, 0xE5, 0xFA, 0xE8, 0x5F, 0x35, 0x88, 0x13, 0x49, 0x22, 0xC2, 0x1D, 0x5F, 0x73, 0xD4, 0x37, 0x34, 0x1D, 0xEF, 0x56, 0x04, 0x6B, 0x17, 0x6D, 0x00, 0x71, 0xC9, 0x14, 0xF0, 0x03, 0x3F, 0x64, 0xCA, 0x67, 0x3A, 0x6E, 0xFE, 0x8B, 0x1D, 0x36, 0xDD, 0x57, 0xE3, 0x28, 0x74, 0x64, 0xF1, 0xD0, 0x89, 0x9A, 0x9B, 0xDD, 0xF6, 0xBB, 0x9B, 0x58, 0xA4, 0x8F, 0x56, 0xB5, 0xDE, 0xF9, 0x9E, 0x70, 0x62, 0xC8, 0xF3, 0x19, 0xE3, 0x4B, 0x73, 0x0F, 0x95, 0x5D, 0x20, 0x97, 0x74, 0x5C, 0xAA, 0x02, 0xB7, 0xFA, 0xFD, 0x33, 0xD5, 0xBC, 0xE4, 0xDD, 0x9A, 0x66, 0x98, 0xEB, 0xE9, 0x51, 0x03, 0x66, 0x25, 0x10, 0xF5, 0x8F, 0xB4, 0x45, 0x4F, 0xB5, 0x3A, 0x61, 0x56, 0xCF, 0x8C, 0x1E, 0xD8, 0xAF, 0x4B, 0xEC, 0x54, 0xDB, 0x43, 0x4E, 0xD6, 0x55, 0x3F, 0xA3, 0x45, 0x15, 0x06, 0x74, 0xFA, 0x6C }; const uint8_t pubkey_tc26_gost_3410_12_512_setA[] = { 0xB2, 0xBF, 0x45, 0x23, 0x00, 0x57, 0x70, 0xAE, 0xAB, 0x5B, 0x63, 0xEC, 0xA8, 0x5F, 0xCF, 0xD0, 0xBA, 0x88, 0x64, 0x79, 0x3D, 0xB6, 0x70, 0x88, 0xE8, 0xD8, 0xA4, 0x95, 0x9E, 0xB9, 0x78, 0x73, 0x9F, 0x0A, 0x34, 0x74, 0xED, 0xFF, 0xB9, 0x7E, 0x34, 0x1B, 0xE0, 0x2A, 0xE2, 0xD8, 0x07, 0xE9, 0xC2, 0xD2, 0x84, 0x39, 0x9E, 0x36, 0x0F, 0x7A, 0xE2, 0x56, 0x2A, 0x81, 0x6C, 0x94, 0x9D, 0x5E, 0x6E, 0x68, 0x94, 0xFD, 0x75, 0x14, 0xE5, 0x07, 0xED, 0x45, 0x2B, 0x07, 0xE1, 0xB2, 0x79, 0x2A, 0x21, 0x34, 0x21, 0x95, 0x02, 0xF2, 0xAF, 0xDC, 0x8A, 0xD7, 0xA3, 0x72, 0x4C, 0x02, 0xA2, 0xF8, 0x59, 0xE2, 0x91, 0x58, 0x01, 0x1D, 0x55, 0xC6, 0xEC, 0x73, 0xEA, 0x44, 0x5B, 0x35, 0x08, 0x5C, 0xAC, 0xA0, 0xB9, 0x4B, 0x28, 0xE7, 0xBD, 0x8B, 0xB2, 0x78, 0x9B, 0x4F, 0x46, 0xC9, 0xD6, 0x84 }; /* 1.2.643.7.1.2.1.2.2 - szOID_tc26_gost_3410_12_512_paramSetB */ const uint8_t data_tc26_gost_3410_12_512_setB[] = { 0x84, 0x66, 0x52, 0x16, 0xB7, 0x53, 0xC0, 0xBB, 0xAE, 0xED, 0x2F, 0x37, 0x78, 0x43, 0x03, 0xCF, 0x21, 0x5D, 0x36, 0x97, 0x55, 0x2B, 0x3B, 0xF3, 0xFB, 0x9C, 0x18, 0x04, 0x81, 0x9B, 0x50, 0x9E, 0xBE, 0xC1, 0x97, 0x53, 0xBC, 0xB1, 0x55, 0xDC, 0x0C, 0xAB, 0x7D, 0xB3, 0x88, 0xBC, 0xB2, 0x9C, 0x86, 0x16, 0x21, 0x0A, 0x95, 0x9F, 0x3D, 0xA6, 0x0C, 0xB4, 0x33, 0x1B, 0x7B, 0x29, 0xA3, 0x70, 0x1A, 0x67, 0xD1, 0xC7, 0x45, 0xE7, 0xF6, 0xC0, 0x66 }; const uint8_t hash_tc26_gost_3410_12_512_setB[] = { 0x6A, 0x55, 0x15, 0x81, 0x50, 0x2A, 0x14, 0x22, 0x6F, 0xD1, 0x4B, 0x50, 0xB1, 0xE2, 0x6C, 0x80, 0xC4, 0x84, 0x21, 0xF9, 0x63, 0x46, 0xAF, 0xE8, 0xE0, 0x2C, 0xFD, 0x41, 0x1E, 0x49, 0x01, 0x6B, 0x00, 0x3C, 0xEB, 0x5F, 0x6B, 0x34, 0xA9, 0x93, 0x2D, 0x86, 0x2F, 0xEA, 0x58, 0x83, 0x81, 0x51, 0xF7, 0xA2, 0xCC, 0x0F, 0xAE, 0xAD, 0x40, 0x65, 0x82, 0xC6, 0x53, 0x05, 0xAE, 0xEB, 0x22, 0xB8 }; const uint8_t signature_tc26_gost_3410_12_512_setB[] = { 0x15, 0xFD, 0xD4, 0x3B, 0x57, 0x5A, 0x97, 0x4E, 0x0D, 0xE6, 0xBC, 0xB5, 0x1F, 0x91, 0x3F, 0x8B, 0xEE, 0xE9, 0x88, 0xF3, 0x94, 0x3D, 0xB6, 0x09, 0x6B, 0xD6, 0xBA, 0x85, 0x42, 0xE8, 0xF4, 0xCE, 0x0D, 0xF5, 0x8D, 0xD1, 0xAF, 0xC9, 0xC4, 0xA7, 0x82, 0x3E, 0xBB, 0x7F, 0x72, 0x50, 0xF5, 0x36, 0x06, 0x54, 0x10, 0x31, 0x89, 0xA9, 0x80, 0x1A, 0x55, 0x48, 0xB7, 0xEA, 0xB3, 0xAE, 0x77, 0x4E, 0xC1, 0x45, 0x52, 0xDD, 0xBF, 0xA9, 0x8E, 0x02, 0x10, 0x80, 0x8F, 0x9C, 0xD1, 0x85, 0x36, 0xBA, 0x7C, 0x20, 0x86, 0x2E, 0xDB, 0x25, 0x0C, 0x1B, 0x53, 0xBA, 0x26, 0x39, 0xE0, 0xD4, 0xE6, 0xE7, 0x4B, 0xA1, 0x02, 0x7D, 0xD4, 0x74, 0x6B, 0x6E, 0x82, 0xDD, 0x92, 0xA2, 0xA4, 0xBA, 0xD4, 0xB6, 0xF9, 0x57, 0x57, 0x67, 0xB6, 0x5A, 0xA2, 0x72, 0x96, 0xEA, 0xE9, 0x2E, 0xA9, 0x11, 0x73, 0x27 }; const uint8_t pubkey_tc26_gost_3410_12_512_setB[] = { 0x86, 0x97, 0xE7, 0x19, 0x03, 0x5E, 0x54, 0xA6, 0xE8, 0x7A, 0xEE, 0xD5, 0x76, 0xC4, 0xC4, 0x72, 0x4A, 0x59, 0x55, 0xEB, 0x72, 0xF7, 0xE0, 0x62, 0xB1, 0x0D, 0x1B, 0x79, 0x32, 0x72, 0x83, 0x0D, 0x1F, 0x7B, 0x74, 0x12, 0x29, 0x20, 0xFD, 0x23, 0xAA, 0x8C, 0x77, 0xA1, 0x23, 0x38, 0x7F, 0x73, 0x07, 0x94, 0x8A, 0x34, 0x46, 0xDB, 0x7C, 0xFB, 0x46, 0xF0, 0x63, 0xE9, 0xD3, 0xAF, 0xC8, 0x4B, 0x78, 0x65, 0x99, 0xAE, 0x71, 0x7F, 0x45, 0xF8, 0x7C, 0xF3, 0x0A, 0x2F, 0x97, 0xEB, 0x85, 0x1A, 0x22, 0x67, 0x65, 0x78, 0xA5, 0xF8, 0xF2, 0x8C, 0xE8, 0xF5, 0x9B, 0x75, 0xA8, 0x3D, 0x81, 0xC1, 0x7F, 0x69, 0x23, 0x94, 0xDE, 0x89, 0xFC, 0x65, 0xB3, 0xFE, 0x18, 0x91, 0xC0, 0x03, 0xBE, 0xDA, 0xC8, 0x7D, 0x48, 0x12, 0x4F, 0x75, 0xC5, 0xAE, 0xB4, 0x50, 0xA0, 0xFC, 0x27, 0xC1, 0xE7, 0x00 }; /* 1.2.643.7.1.2.1.2.3 - szOID_tc26_gost_3410_12_512_paramSetC */ const uint8_t data_tc26_gost_3410_12_512_setC[] = { 0x40, 0xE2, 0xDD, 0x43, 0xF9, 0x59, 0x3C, 0xDC, 0x9C, 0x8F, 0x2E, 0xBF, 0xA8, 0x0B, 0x2D, 0xD4, 0xB5, 0x00, 0x56, 0x93, 0xFC, 0xCE, 0x73, 0x5B, 0x99, 0x66, 0x24, 0x0A, 0x76, 0x52, 0x2E, 0xBC, 0xBE, 0xEA, 0x8A, 0x52, 0xFC, 0x95, 0x02, 0x8F, 0xB9, 0x8E, 0x23, 0x00, 0x47, 0x40, 0x28, 0xE4, 0x92, 0x9C, 0x19, 0x99, 0xBD, 0x98, 0xF5, 0x3A, 0xA0, 0xBE, 0xFB, 0xC7, 0xC1, 0xE3, 0x98, 0x6B, 0x8D, 0x2F, 0x5A, 0x85, 0xB9, 0x46, 0x90, 0x83, 0x6D }; const uint8_t hash_tc26_gost_3410_12_512_setC[] = { 0xBD, 0x82, 0xF1, 0x34, 0x33, 0x74, 0x9C, 0xC2, 0x9E, 0x95, 0x67, 0x57, 0x2C, 0x6D, 0x83, 0x3D, 0xFD, 0xBD, 0x7C, 0xD7, 0xAA, 0xE7, 0x28, 0xF9, 0x81, 0xB9, 0xCF, 0xAE, 0x4A, 0xAA, 0x17, 0x7D, 0x84, 0x79, 0x25, 0xC5, 0x66, 0xAA, 0x9E, 0x28, 0x66, 0x41, 0x95, 0xC4, 0xFF, 0xF6, 0x72, 0xEF, 0x0E, 0x08, 0xC6, 0x0B, 0x2E, 0x0F, 0xCB, 0xC6, 0x96, 0x4A, 0x77, 0x0D, 0x14, 0xE5, 0x35, 0xC0 }; const uint8_t signature_tc26_gost_3410_12_512_setC[] = { 0x35, 0x1E, 0x65, 0xAE, 0x90, 0xB0, 0x05, 0x04, 0x02, 0xF5, 0x22, 0xAC, 0xE4, 0x5D, 0x8C, 0x35, 0x17, 0x2B, 0xFF, 0xD7, 0xCA, 0x95, 0x0E, 0xF9, 0x85, 0x2A, 0xD0, 0xA0, 0xE1, 0x04, 0x43, 0xCA, 0x70, 0x9A, 0xDF, 0x35, 0xD7, 0xD8, 0x8D, 0xC2, 0x78, 0x84, 0x4C, 0xCF, 0x58, 0x25, 0x9C, 0xD2, 0x40, 0x5A, 0xEC, 0xB3, 0x9A, 0x77, 0x6B, 0x4F, 0x63, 0x26, 0xDD, 0xB2, 0x19, 0x8E, 0x9C, 0x39, 0x09, 0x55, 0x72, 0xD6, 0xDD, 0x69, 0x90, 0x1E, 0xB6, 0x1D, 0x36, 0x97, 0x49, 0x98, 0x99, 0x67, 0x4A, 0x3B, 0xCD, 0x2D, 0xEB, 0x32, 0xCA, 0x44, 0x4F, 0xB6, 0xC0, 0x9C, 0x4B, 0xF9, 0x18, 0x2E, 0x42, 0xAF, 0x8B, 0xE4, 0x45, 0xE8, 0x45, 0xEF, 0xF4, 0x10, 0x96, 0xF4, 0x16, 0xCA, 0xEB, 0xD1, 0x72, 0xCC, 0x32, 0x28, 0xA8, 0x46, 0x03, 0x34, 0x65, 0x3E, 0x47, 0xB2, 0xC3, 0x99, 0xE2, 0x36 }; const uint8_t pubkey_tc26_gost_3410_12_512_setC[] = { 0xA9, 0x85, 0x17, 0xF7, 0xFE, 0x1C, 0x43, 0x8A, 0xBE, 0xDE, 0x79, 0xE8, 0x62, 0xFE, 0x51, 0x0E, 0xA7, 0xEA, 0x05, 0x46, 0x34, 0xD9, 0x54, 0x5B, 0xFD, 0xB4, 0xC5, 0xCB, 0xA6, 0x9C, 0xFC, 0x90, 0x4B, 0x59, 0x14, 0xA1, 0xE7, 0x2A, 0xDE, 0x2B, 0xB8, 0x86, 0x9E, 0xB5, 0xDB, 0xB3, 0xD3, 0xD7, 0x95, 0x88, 0xCB, 0xEE, 0x33, 0x20, 0x82, 0xB2, 0xAC, 0xBF, 0x79, 0xDF, 0x2E, 0x88, 0xF0, 0x5A, 0x62, 0x90, 0x26, 0x52, 0xAD, 0x64, 0x67, 0x36, 0x1B, 0xE6, 0xCA, 0x57, 0x09, 0xEF, 0xF5, 0x56, 0x0E, 0x32, 0xDF, 0xB4, 0x6C, 0xC8, 0xA8, 0xBB, 0xCB, 0x4C, 0xB4, 0xBA, 0x63, 0x41, 0xBA, 0x1D, 0xAB, 0xB0, 0x12, 0x82, 0xFD, 0x50, 0x37, 0xDB, 0x69, 0x08, 0xF2, 0x7D, 0x9E, 0xC0, 0xF7, 0xA6, 0xE9, 0x50, 0x26, 0x94, 0x88, 0x08, 0x5E, 0xDD, 0x34, 0xC5, 0xC1, 0x9D, 0x50, 0x50, 0x4A, 0xAE }; /* end */ static struct test_param cp_2001_256_a = { .param = NID_id_GostR3410_2001_CryptoPro_A_ParamSet, .len = 256 / 8, .data = data_2001_256_setA, .data_len = sizeof(data_2001_256_setA), .hash = hash_2001_256_setA, .signature = signature_2001_256_setA, .pub_key = pubkey_2001_256_setA, }; static struct test_param cp_2001_256_b = { .param = NID_id_GostR3410_2001_CryptoPro_B_ParamSet, .len = 256 / 8, .data = data_2001_256_setB, .data_len = sizeof(data_2001_256_setB), .hash = hash_2001_256_setB, .signature = signature_2001_256_setB, .pub_key = pubkey_2001_256_setB, }; static struct test_param cp_2001_256_c = { .param = NID_id_GostR3410_2001_CryptoPro_C_ParamSet, .len = 256 / 8, .data = data_2001_256_setC, .data_len = sizeof(data_2001_256_setC), .hash = hash_2001_256_setC, .signature = signature_2001_256_setC, .pub_key = pubkey_2001_256_setC, }; static struct test_param tc_2012_256_a = { .param = NID_id_tc26_gost_3410_2012_256_paramSetA, .len = 256 / 8, .data = data_tc26_gost_3410_12_256_setA, .data_len = sizeof(data_tc26_gost_3410_12_256_setA), .hash = hash_tc26_gost_3410_12_256_setA, .signature = signature_tc26_gost_3410_12_256_setA, .pub_key = pubkey_tc26_gost_3410_12_256_setA, }; static struct test_param tc_2012_512_a = { .param = NID_id_tc26_gost_3410_2012_512_paramSetA, .len = 512 / 8, .data = data_tc26_gost_3410_12_512_setA, .data_len = sizeof(data_tc26_gost_3410_12_512_setA), .hash = hash_tc26_gost_3410_12_512_setA, .signature = signature_tc26_gost_3410_12_512_setA, .pub_key = pubkey_tc26_gost_3410_12_512_setA, }; static struct test_param tc_2012_512_b = { .param = NID_id_tc26_gost_3410_2012_512_paramSetB, .len = 512 / 8, .data = data_tc26_gost_3410_12_512_setB, .data_len = sizeof(data_tc26_gost_3410_12_512_setB), .hash = hash_tc26_gost_3410_12_512_setB, .signature = signature_tc26_gost_3410_12_512_setB, .pub_key = pubkey_tc26_gost_3410_12_512_setB, }; static struct test_param tc_2012_512_c = { .param = NID_id_tc26_gost_3410_2012_512_paramSetC, .len = 512 / 8, .data = data_tc26_gost_3410_12_512_setC, .data_len = sizeof(data_tc26_gost_3410_12_512_setC), .hash = hash_tc26_gost_3410_12_512_setC, .signature = signature_tc26_gost_3410_12_512_setC, .pub_key = pubkey_tc26_gost_3410_12_512_setC, }; static struct test_param *test_params[] = { &cp_2001_256_a, &cp_2001_256_b, &cp_2001_256_c, &tc_2012_256_a, &tc_2012_512_a, &tc_2012_512_b, &tc_2012_512_c, 0, }; /* * Test certificates provided by Infotecs for Basealt SPO to test * interop with open-source software. */ unsigned char short_cp_a_cer[] = { 0x30, 0x82, 0x01, 0x57, 0x30, 0x82, 0x01, 0x04, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x63, 0x00, 0x70, 0x00, 0x5f, 0x00, 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x63, 0x00, 0x70, 0x00, 0x5f, 0x00, 0x61, 0x30, 0x66, 0x30, 0x1f, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x01, 0x01, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x23, 0x01, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02, 0x03, 0x43, 0x00, 0x04, 0x40, 0x89, 0xb1, 0x32, 0x31, 0xd0, 0x22, 0xe1, 0x04, 0xe3, 0x47, 0xaf, 0xea, 0x7e, 0x0c, 0x7d, 0x3b, 0xae, 0xad, 0xc9, 0xe7, 0x01, 0xb2, 0x91, 0x54, 0x17, 0x4b, 0x24, 0xb5, 0xf9, 0x79, 0xae, 0x43, 0x77, 0xc1, 0x8d, 0xf8, 0x78, 0x96, 0x76, 0x3c, 0xa3, 0x93, 0x6b, 0x21, 0x8e, 0x09, 0xf5, 0x92, 0x55, 0xdd, 0x89, 0x46, 0x9b, 0x9a, 0xb5, 0x98, 0xd6, 0x73, 0x03, 0x36, 0xa4, 0x4e, 0x35, 0x08, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x03, 0x41, 0x00, 0x85, 0x57, 0xfc, 0x0b, 0xc5, 0x57, 0x51, 0x41, 0xa9, 0xcd, 0xd0, 0x71, 0x92, 0x9b, 0x90, 0x57, 0x76, 0x9f, 0x7b, 0xb9, 0x01, 0xc0, 0x13, 0x07, 0xbe, 0x40, 0x86, 0x96, 0x05, 0xfe, 0x35, 0xc2, 0xe4, 0xa3, 0xb4, 0xe5, 0x3f, 0xff, 0x25, 0x95, 0x21, 0x97, 0x14, 0x94, 0x03, 0x3a, 0x93, 0xdb, 0xec, 0xf1, 0xd5, 0x8b, 0xf8, 0xcc, 0x85, 0xd4, 0xe3, 0x12, 0xea, 0x70, 0x38, 0xcf, 0x21, 0xd2 }; unsigned char short_cp_b_cer[] = { 0x30, 0x82, 0x01, 0x57, 0x30, 0x82, 0x01, 0x04, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x02, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x63, 0x00, 0x70, 0x00, 0x5f, 0x00, 0x62, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x63, 0x00, 0x70, 0x00, 0x5f, 0x00, 0x62, 0x30, 0x66, 0x30, 0x1f, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x01, 0x01, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x23, 0x02, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02, 0x03, 0x43, 0x00, 0x04, 0x40, 0x07, 0x6b, 0xce, 0x22, 0x95, 0x22, 0xa4, 0x6e, 0xdd, 0x7c, 0x23, 0x24, 0x37, 0xf5, 0x9c, 0x8c, 0x7b, 0xb0, 0x2b, 0x6f, 0xea, 0xa0, 0x2a, 0xe6, 0x1f, 0x3d, 0x42, 0x26, 0xaa, 0xee, 0x64, 0x08, 0xb5, 0x19, 0x2b, 0xf1, 0x70, 0xeb, 0x98, 0x98, 0x6d, 0xce, 0xcc, 0x8c, 0xc6, 0x2f, 0xfb, 0x6f, 0xc0, 0x5c, 0x59, 0xf3, 0xcd, 0x89, 0x32, 0x80, 0xd0, 0x32, 0xfc, 0xa7, 0x78, 0x80, 0xfd, 0x76, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x03, 0x41, 0x00, 0x1e, 0x42, 0xcb, 0x48, 0x23, 0x5b, 0x2b, 0xb0, 0x56, 0xd2, 0xd1, 0x58, 0xb0, 0x9c, 0xee, 0x6e, 0xb4, 0x5f, 0x5d, 0x48, 0x24, 0x07, 0x15, 0x8a, 0xf7, 0x0d, 0xb3, 0x97, 0x86, 0x55, 0xb3, 0xed, 0x57, 0x7b, 0xf2, 0x67, 0xef, 0x97, 0xd8, 0x8f, 0xc6, 0xb7, 0xcd, 0x98, 0x51, 0x48, 0xc5, 0x76, 0xf1, 0x48, 0x17, 0x1e, 0xcd, 0x48, 0x4f, 0xd8, 0xe8, 0x5d, 0x2c, 0xa8, 0xc0, 0x45, 0xdf, 0x2d }; unsigned char short_cp_c_cer[] = { 0x30, 0x82, 0x01, 0x57, 0x30, 0x82, 0x01, 0x04, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x03, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x63, 0x00, 0x70, 0x00, 0x5f, 0x00, 0x63, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x63, 0x00, 0x70, 0x00, 0x5f, 0x00, 0x63, 0x30, 0x66, 0x30, 0x1f, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x01, 0x01, 0x30, 0x13, 0x06, 0x07, 0x2a, 0x85, 0x03, 0x02, 0x02, 0x23, 0x03, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x02, 0x02, 0x03, 0x43, 0x00, 0x04, 0x40, 0xe0, 0x8c, 0xa8, 0x1b, 0x04, 0x4a, 0x49, 0x17, 0x41, 0x58, 0x26, 0x78, 0xf4, 0x0f, 0x6e, 0x1c, 0x9d, 0x7c, 0xf0, 0xc7, 0x2b, 0xcf, 0x94, 0xe4, 0xa8, 0x15, 0x5d, 0xb1, 0xaf, 0x7a, 0x8b, 0x2e, 0x10, 0x8c, 0xe8, 0x66, 0x8d, 0xa9, 0xc6, 0x9b, 0x74, 0xb4, 0xb6, 0x45, 0xd2, 0xaa, 0xab, 0x56, 0xb6, 0x04, 0x22, 0x90, 0x56, 0xdf, 0xbb, 0xc2, 0xc0, 0x8a, 0x91, 0x88, 0x4d, 0x36, 0x4e, 0x84, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x03, 0x41, 0x00, 0x34, 0x87, 0xfa, 0x75, 0x42, 0xbd, 0x0e, 0x1c, 0x37, 0x39, 0xef, 0x94, 0xaf, 0x6f, 0x47, 0xa9, 0x4e, 0x2b, 0x58, 0x4e, 0x5b, 0x65, 0x34, 0xcb, 0x64, 0xc9, 0x72, 0xaf, 0xb7, 0xbe, 0x63, 0x6a, 0x51, 0x9a, 0x0b, 0xac, 0x09, 0xc3, 0x9e, 0xb9, 0xbe, 0x06, 0x5f, 0xe5, 0x30, 0x66, 0x20, 0xa2, 0x61, 0xe7, 0x93, 0x13, 0x6e, 0xca, 0x0c, 0xbc, 0x3f, 0x49, 0x9f, 0x37, 0xef, 0x5d, 0xed, 0x80 }; unsigned char short_tc_a_cer[] = { 0x30, 0x82, 0x01, 0x4e, 0x30, 0x81, 0xfc, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x06, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x61, 0x30, 0x5e, 0x30, 0x17, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x01, 0x01, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x02, 0x01, 0x01, 0x01, 0x03, 0x43, 0x00, 0x04, 0x40, 0xe4, 0x63, 0xf2, 0xff, 0x74, 0x1c, 0x44, 0xb2, 0xc9, 0x3c, 0x9a, 0xc8, 0x04, 0xb6, 0xc4, 0x14, 0x43, 0x60, 0xf2, 0x42, 0x53, 0xd3, 0x1a, 0x29, 0xb1, 0xbd, 0x03, 0xf8, 0xbc, 0x5e, 0x14, 0x8d, 0x1a, 0x86, 0xc3, 0xb0, 0x9f, 0x4f, 0x05, 0x24, 0x20, 0xf0, 0x01, 0x9d, 0x86, 0xa1, 0x12, 0x93, 0x9d, 0xe8, 0xb1, 0x2a, 0xc4, 0x65, 0x9f, 0xc9, 0xb8, 0x07, 0x3a, 0x14, 0x88, 0xdc, 0xd7, 0x03, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x03, 0x41, 0x00, 0x30, 0x0f, 0x56, 0x22, 0x1f, 0x69, 0x43, 0x54, 0x6c, 0x7c, 0x11, 0x43, 0xf8, 0x5a, 0xa0, 0xf0, 0x33, 0x61, 0x07, 0x9b, 0x1c, 0xa5, 0xf1, 0xaa, 0x61, 0x4c, 0xe9, 0x8b, 0x3b, 0x82, 0x0c, 0xb2, 0x2f, 0x8b, 0xb5, 0xd6, 0x38, 0xb1, 0x92, 0xb1, 0xc3, 0x74, 0x9a, 0x7c, 0x55, 0xb9, 0x5c, 0xfb, 0x8d, 0x1b, 0x00, 0x85, 0xad, 0x70, 0x9b, 0x6f, 0xb3, 0x32, 0x53, 0xc1, 0x85, 0x4b, 0xd0, 0xe4 }; unsigned char short_tc_b_cer[] = { 0x30, 0x82, 0x01, 0x4e, 0x30, 0x81, 0xfc, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x07, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x62, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x62, 0x30, 0x5e, 0x30, 0x17, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x01, 0x01, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x02, 0x01, 0x01, 0x02, 0x03, 0x43, 0x00, 0x04, 0x40, 0x36, 0xda, 0xe1, 0x60, 0x8c, 0x63, 0x67, 0xe1, 0xa7, 0x36, 0x2f, 0x40, 0x1b, 0x38, 0x18, 0x59, 0xee, 0x40, 0x3b, 0xed, 0x2d, 0x21, 0x97, 0x28, 0xa1, 0x68, 0x4e, 0xc0, 0xf2, 0x0a, 0xae, 0x67, 0x63, 0xe2, 0x22, 0x17, 0x34, 0x44, 0xd0, 0x67, 0x3f, 0x67, 0x02, 0x61, 0x28, 0xcb, 0x6d, 0xb0, 0x92, 0x01, 0x39, 0xba, 0xa5, 0x90, 0x66, 0x39, 0x23, 0xcf, 0xb9, 0x37, 0x13, 0xcf, 0xfe, 0x3c, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x03, 0x41, 0x00, 0xff, 0x80, 0x61, 0xbf, 0x96, 0xef, 0x0e, 0x3d, 0x09, 0x15, 0xcf, 0xf3, 0x71, 0x03, 0x8d, 0x5d, 0xa3, 0x68, 0x45, 0x10, 0x19, 0x6f, 0x0e, 0x08, 0xa0, 0xc3, 0xc8, 0xc6, 0x97, 0x81, 0x40, 0x2f, 0xd8, 0xeb, 0xe3, 0xc0, 0x3d, 0xac, 0xbf, 0xb7, 0x8f, 0x27, 0xc3, 0xd0, 0x57, 0x49, 0x69, 0x35, 0x3c, 0xab, 0x49, 0xbc, 0xef, 0x3a, 0x0c, 0x0c, 0xc3, 0x92, 0xf8, 0x74, 0xba, 0xaf, 0xa8, 0x15 }; unsigned char short_tc_c_cer[] = { 0x30, 0x82, 0x01, 0x4e, 0x30, 0x81, 0xfc, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x08, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x63, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x63, 0x30, 0x5e, 0x30, 0x17, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x01, 0x01, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x02, 0x01, 0x01, 0x03, 0x03, 0x43, 0x00, 0x04, 0x40, 0xb7, 0x10, 0xef, 0x13, 0x4b, 0x97, 0x0e, 0x19, 0x9b, 0x20, 0x3d, 0xb6, 0x7a, 0x3f, 0xa6, 0x3b, 0x70, 0xe1, 0xc1, 0x97, 0x1c, 0xe2, 0x9f, 0xb8, 0x09, 0x1f, 0xb6, 0xd6, 0x69, 0x01, 0x4d, 0x18, 0xaf, 0xde, 0xb4, 0xe3, 0xda, 0xab, 0x7c, 0xc8, 0x74, 0xd0, 0x59, 0x8b, 0x19, 0xdc, 0x63, 0x04, 0x36, 0x64, 0x0f, 0xc2, 0x1e, 0xdb, 0x0f, 0xc6, 0x0b, 0x2e, 0x3c, 0xbf, 0x5a, 0x68, 0x71, 0x5b, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x03, 0x41, 0x00, 0x0c, 0xe1, 0xa3, 0x47, 0xe1, 0xa8, 0xfb, 0x21, 0xde, 0x98, 0x52, 0x69, 0x9e, 0x03, 0x5f, 0x0d, 0xbc, 0x37, 0xae, 0x86, 0xcb, 0x1c, 0x36, 0x6f, 0x97, 0x23, 0x37, 0x17, 0xac, 0x5f, 0x9a, 0x25, 0x56, 0x7c, 0xbd, 0x60, 0x60, 0xc1, 0xcd, 0xe1, 0x58, 0xf8, 0x49, 0x9e, 0x41, 0xab, 0xe5, 0x9e, 0xcd, 0xed, 0xf9, 0x74, 0x89, 0xc5, 0x1a, 0xc7, 0xa3, 0x88, 0x59, 0xcc, 0x79, 0x79, 0x9a, 0x7f }; unsigned char short_tc_d_cer[] = { 0x30, 0x82, 0x01, 0x4e, 0x30, 0x81, 0xfc, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x09, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x64, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x32, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1d, 0x30, 0x1b, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x14, 0x00, 0x73, 0x00, 0x68, 0x00, 0x6f, 0x00, 0x72, 0x00, 0x74, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x64, 0x30, 0x5e, 0x30, 0x17, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x01, 0x01, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x02, 0x01, 0x01, 0x04, 0x03, 0x43, 0x00, 0x04, 0x40, 0x15, 0x8e, 0xa3, 0x12, 0x7a, 0xb2, 0xaa, 0x91, 0x45, 0xd2, 0x85, 0xfe, 0xbb, 0xcd, 0x58, 0xce, 0xd0, 0x0a, 0x99, 0x2c, 0x5d, 0x85, 0x88, 0x70, 0xb9, 0x3e, 0x51, 0x20, 0xca, 0x17, 0x67, 0x03, 0xa0, 0xa6, 0x28, 0x71, 0x0d, 0xa7, 0x1f, 0x32, 0xce, 0x14, 0x56, 0xf2, 0x4e, 0xf7, 0x66, 0x67, 0x78, 0xaf, 0x41, 0x41, 0x66, 0xf2, 0xc0, 0x61, 0xda, 0x8a, 0x35, 0x52, 0xf0, 0x81, 0x8d, 0x4a, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x02, 0x03, 0x41, 0x00, 0x12, 0xf8, 0x5e, 0x95, 0x57, 0xce, 0xee, 0xb0, 0x32, 0xf6, 0x96, 0x3c, 0x44, 0x01, 0x86, 0x07, 0x1f, 0x31, 0x7c, 0xcc, 0xa0, 0x30, 0x25, 0xa6, 0x69, 0x89, 0x2c, 0xde, 0xd4, 0x32, 0x06, 0x81, 0x75, 0x43, 0xe7, 0xca, 0xce, 0x1c, 0x3b, 0xa5, 0x43, 0xde, 0x44, 0x3e, 0x54, 0x35, 0x39, 0x3a, 0x80, 0x4b, 0x4f, 0xdb, 0x90, 0x09, 0x31, 0xa5, 0x8f, 0xf6, 0x66, 0xb6, 0xf1, 0x84, 0x9c, 0x82 }; unsigned char long_tc_a_cer[] = { 0x30, 0x82, 0x01, 0xcf, 0x30, 0x82, 0x01, 0x3b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x0a, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x03, 0x30, 0x30, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x12, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x61, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x30, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x12, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x61, 0x30, 0x81, 0xa0, 0x30, 0x17, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x01, 0x02, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x02, 0x01, 0x02, 0x01, 0x03, 0x81, 0x84, 0x00, 0x04, 0x81, 0x80, 0x6b, 0xcb, 0x7e, 0xd5, 0x29, 0x12, 0x3b, 0xda, 0x9e, 0x97, 0x11, 0x66, 0x56, 0xab, 0x76, 0x1d, 0xd8, 0x4b, 0x88, 0x96, 0x10, 0xbf, 0x42, 0xae, 0x08, 0x9e, 0xcc, 0xcc, 0xdf, 0xc9, 0x17, 0xe8, 0x13, 0x70, 0x38, 0x31, 0x61, 0x3f, 0xde, 0xff, 0x9a, 0x64, 0x92, 0xe1, 0xc1, 0x80, 0xef, 0x65, 0xe8, 0xe4, 0xc2, 0xd8, 0xb1, 0xaa, 0x2a, 0xa8, 0x71, 0xaf, 0x56, 0x07, 0xd0, 0x71, 0x21, 0x3b, 0xb8, 0x57, 0x23, 0x90, 0x0d, 0x6d, 0x6c, 0x46, 0x1e, 0x2a, 0xa6, 0xc5, 0xb8, 0x9d, 0x49, 0xe2, 0x50, 0x2e, 0x8d, 0xaa, 0xb8, 0x68, 0x30, 0xbd, 0x78, 0x9c, 0xa3, 0x84, 0x9a, 0x7e, 0x77, 0xd7, 0xa9, 0xf9, 0x29, 0xd9, 0xe5, 0xc5, 0xb3, 0x10, 0xc6, 0x0b, 0x7b, 0x23, 0x7d, 0xa6, 0x9e, 0x2b, 0xa5, 0x33, 0x46, 0xe0, 0x75, 0x7b, 0x4b, 0xac, 0xca, 0x0f, 0x75, 0xe9, 0xc1, 0xd3, 0xff, 0xb4, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x03, 0x03, 0x81, 0x81, 0x00, 0x19, 0x47, 0x1c, 0xb7, 0x65, 0xff, 0x15, 0x60, 0x39, 0x8c, 0xfc, 0x8d, 0xfc, 0xaa, 0xef, 0x20, 0x0c, 0x7c, 0xf8, 0xb7, 0xfe, 0x17, 0xcf, 0xa0, 0x3a, 0x50, 0x47, 0x71, 0x5e, 0xa8, 0x54, 0xa2, 0xec, 0xbd, 0xc3, 0xbe, 0xdb, 0x42, 0x52, 0xe3, 0xb8, 0xb9, 0x91, 0x5d, 0x0b, 0xbc, 0xc7, 0x91, 0xe0, 0xab, 0x41, 0x7e, 0x6c, 0x6c, 0x87, 0x1f, 0x34, 0xb6, 0x96, 0xe2, 0xc2, 0xe3, 0x2b, 0x3b, 0xd8, 0x60, 0x82, 0x0d, 0x9b, 0x9d, 0xf8, 0x4a, 0x06, 0x4a, 0x99, 0xc5, 0x33, 0x87, 0x1e, 0x21, 0x82, 0xed, 0x34, 0x8e, 0xf5, 0xe7, 0x86, 0x7f, 0xec, 0x43, 0xff, 0x73, 0xd4, 0xc2, 0x67, 0xfe, 0xd8, 0x51, 0x99, 0x60, 0x76, 0x6f, 0xab, 0x85, 0x45, 0x92, 0xe9, 0x5c, 0xc5, 0x7d, 0x7f, 0x47, 0xf8, 0x46, 0xbe, 0x57, 0xdc, 0x16, 0x90, 0x50, 0x90, 0x4c, 0x88, 0x94, 0x69, 0x4e, 0x07, 0x9b }; unsigned char long_tc_b_cer[] = { 0x30, 0x82, 0x01, 0xcf, 0x30, 0x82, 0x01, 0x3b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x0b, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x03, 0x30, 0x30, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x12, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x62, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x30, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x12, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x62, 0x30, 0x81, 0xa0, 0x30, 0x17, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x01, 0x02, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x02, 0x01, 0x02, 0x02, 0x03, 0x81, 0x84, 0x00, 0x04, 0x81, 0x80, 0x9e, 0x7e, 0xa3, 0x49, 0x56, 0xbe, 0xe3, 0xf6, 0x43, 0x0d, 0x1d, 0xa0, 0xce, 0x43, 0x8b, 0x41, 0xec, 0x05, 0x0c, 0x06, 0x89, 0x19, 0xc0, 0x8d, 0xe8, 0xbc, 0xb1, 0xa1, 0x32, 0xe1, 0x68, 0x69, 0x0e, 0x1f, 0x2c, 0x77, 0x53, 0xc0, 0xc6, 0x9a, 0xca, 0x6a, 0xc5, 0x25, 0xa6, 0xf1, 0x15, 0xab, 0x6c, 0x1f, 0x38, 0xcd, 0xb0, 0x2b, 0xb9, 0x69, 0x67, 0x39, 0xb7, 0x90, 0x6b, 0xd6, 0x14, 0x38, 0x3e, 0x82, 0x7e, 0x53, 0xc1, 0x89, 0xd3, 0xea, 0x46, 0xe5, 0x5f, 0x72, 0x54, 0x70, 0x02, 0x26, 0x0c, 0x8c, 0xc9, 0xd1, 0x4c, 0xb9, 0xfd, 0xd2, 0x4d, 0x5e, 0x53, 0x6b, 0xa1, 0x56, 0xf9, 0xb7, 0xfd, 0x0f, 0x8f, 0x0c, 0x74, 0x66, 0xa4, 0x78, 0xf8, 0x0a, 0xcb, 0xe9, 0xc4, 0x5b, 0xf9, 0xd9, 0xb0, 0xdf, 0xc0, 0xc5, 0xa2, 0x2c, 0xd9, 0x27, 0x86, 0x99, 0xf1, 0x58, 0xaf, 0x46, 0xe1, 0x50, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x03, 0x03, 0x81, 0x81, 0x00, 0x05, 0x41, 0xea, 0x4e, 0x1d, 0x67, 0xc8, 0xe2, 0x91, 0xd2, 0x0c, 0xc6, 0xa5, 0x58, 0x32, 0xd6, 0xe5, 0x3f, 0x14, 0xe6, 0x97, 0x08, 0x7c, 0x99, 0x88, 0xf6, 0x10, 0xc7, 0xe8, 0x87, 0x83, 0x68, 0x24, 0xc7, 0x24, 0xc1, 0x69, 0x8c, 0x69, 0xe0, 0x40, 0x61, 0xd7, 0x64, 0xea, 0xa7, 0xa3, 0x0c, 0x18, 0x8d, 0xce, 0x48, 0x0e, 0x6e, 0x58, 0xa9, 0x9a, 0x57, 0xa7, 0x4e, 0xe9, 0x2c, 0x6b, 0x7a, 0x1a, 0xd6, 0x72, 0x56, 0x5a, 0x04, 0x0c, 0x57, 0xb6, 0x42, 0x72, 0x89, 0x03, 0x50, 0xd9, 0x63, 0xb7, 0x01, 0xc4, 0x07, 0x47, 0x80, 0xe1, 0xb1, 0xdd, 0x25, 0xf4, 0x2a, 0x93, 0xff, 0x5e, 0x07, 0x19, 0xc3, 0xe8, 0xb4, 0xd1, 0x6c, 0xad, 0x6c, 0xa3, 0x25, 0xd4, 0x3d, 0xcb, 0x9c, 0xc7, 0x87, 0x14, 0xe0, 0x7d, 0x31, 0x9d, 0xb6, 0x64, 0x94, 0xd1, 0x66, 0x3b, 0xb0, 0xe6, 0x3a, 0xa2, 0xa1 }; unsigned char long_tc_c_cer[] = { 0x30, 0x82, 0x01, 0xcf, 0x30, 0x82, 0x01, 0x3b, 0xa0, 0x03, 0x02, 0x01, 0x02, 0x02, 0x01, 0x0c, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x03, 0x30, 0x30, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x12, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x63, 0x30, 0x1e, 0x17, 0x0d, 0x30, 0x31, 0x30, 0x31, 0x30, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x17, 0x0d, 0x34, 0x39, 0x31, 0x32, 0x33, 0x31, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x5a, 0x30, 0x30, 0x31, 0x11, 0x30, 0x0f, 0x06, 0x03, 0x55, 0x04, 0x0a, 0x13, 0x08, 0x49, 0x6e, 0x66, 0x6f, 0x74, 0x65, 0x63, 0x73, 0x31, 0x1b, 0x30, 0x19, 0x06, 0x03, 0x55, 0x04, 0x03, 0x1e, 0x12, 0x00, 0x6c, 0x00, 0x6f, 0x00, 0x6e, 0x00, 0x67, 0x00, 0x5f, 0x00, 0x74, 0x00, 0x63, 0x00, 0x5f, 0x00, 0x63, 0x30, 0x81, 0xa0, 0x30, 0x17, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x01, 0x02, 0x30, 0x0b, 0x06, 0x09, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x02, 0x01, 0x02, 0x03, 0x03, 0x81, 0x84, 0x00, 0x04, 0x81, 0x80, 0x27, 0xb1, 0xd2, 0x0d, 0x5e, 0x13, 0x65, 0x25, 0x72, 0x48, 0xe2, 0x84, 0xc8, 0xbc, 0x49, 0xf9, 0x72, 0x97, 0x16, 0x72, 0xc1, 0xb1, 0x38, 0xf4, 0xae, 0x6c, 0xe6, 0xb5, 0xf4, 0xa9, 0x20, 0xc8, 0xdc, 0x7f, 0x42, 0x95, 0x45, 0xf2, 0x1c, 0xbd, 0x13, 0xcf, 0x3b, 0x46, 0xd7, 0x1e, 0x13, 0xd2, 0xa9, 0x59, 0x08, 0x4b, 0x24, 0xc6, 0x7b, 0xe2, 0x07, 0x66, 0x8f, 0x5b, 0xe2, 0x7e, 0x07, 0xda, 0x7e, 0xb9, 0x95, 0xfa, 0x65, 0xd9, 0x6b, 0x1f, 0x9d, 0x19, 0x93, 0xcc, 0xba, 0x8e, 0x85, 0xb7, 0x29, 0xd3, 0x59, 0x4e, 0x4d, 0x3e, 0xff, 0xbe, 0x48, 0x29, 0x30, 0x7b, 0x72, 0x9f, 0xb0, 0xf2, 0xf0, 0x0d, 0xaf, 0x6d, 0x91, 0xde, 0x10, 0xed, 0x89, 0x84, 0x2f, 0xd3, 0xce, 0x20, 0x49, 0xf8, 0x53, 0xce, 0x58, 0xe0, 0x53, 0xa4, 0x7e, 0x13, 0xa2, 0xac, 0xb2, 0x3c, 0x7b, 0x00, 0x45, 0xad, 0x30, 0x0a, 0x06, 0x08, 0x2a, 0x85, 0x03, 0x07, 0x01, 0x01, 0x03, 0x03, 0x03, 0x81, 0x81, 0x00, 0x2a, 0x74, 0x42, 0xd6, 0x03, 0x58, 0x49, 0x0a, 0x80, 0x4b, 0xaf, 0x0a, 0x1e, 0x59, 0x09, 0x00, 0x53, 0x5e, 0xba, 0x3a, 0x52, 0x06, 0x18, 0xaf, 0x17, 0x25, 0xb0, 0x5c, 0x45, 0x39, 0xea, 0xc2, 0xa0, 0x46, 0xb4, 0xbf, 0x20, 0xaf, 0xb2, 0xd4, 0x6c, 0x1d, 0x24, 0xd8, 0xcc, 0x7a, 0x10, 0x46, 0x69, 0xb2, 0xe6, 0x0f, 0x55, 0xc2, 0x56, 0x4b, 0x98, 0x65, 0xcc, 0xad, 0x81, 0x6d, 0x8f, 0x76, 0x3e, 0x7c, 0x05, 0x60, 0x4d, 0xce, 0xec, 0xb4, 0x9c, 0xfc, 0x4e, 0x2d, 0x03, 0xc0, 0x45, 0xff, 0x4e, 0x75, 0x12, 0x9a, 0x29, 0x3f, 0xe7, 0x5a, 0x90, 0xe6, 0x42, 0x82, 0x2a, 0xc2, 0xbf, 0x65, 0xf5, 0xe3, 0x10, 0xc6, 0x0b, 0xf3, 0x09, 0xaa, 0x66, 0xf9, 0xd7, 0x73, 0x8b, 0x28, 0x9c, 0x87, 0xd8, 0x35, 0x25, 0x8a, 0xd3, 0x27, 0x08, 0x8c, 0xa9, 0x94, 0xeb, 0x34, 0xb3, 0x9b, 0x5a, 0xbe }; /* end */ #define D(y) { .name = #y, .cert = y, .len = sizeof(y) } static struct test_cert { const char *name; const unsigned char *cert; int len; } test_certs[] = { D(short_cp_a_cer), D(short_cp_b_cer), D(short_cp_c_cer), D(short_tc_a_cer), D(short_tc_b_cer), D(short_tc_c_cer), D(short_tc_d_cer), D(long_tc_a_cer), D(long_tc_b_cer), D(long_tc_c_cer), {0} }; #undef D static void hexdump(const void *ptr, size_t len) { const unsigned char *p = ptr; size_t i, j; for (i = 0; i < len; i += j) { for (j = 0; j < 16 && i + j < len; j++) printf("%s %02x", j? "" : "\n", p[i + j]); } printf("\n"); } static void print_test_result(int err) { if (err == 1) printf(cGREEN "correct" cNORM "\n"); else if (err == 0) printf(cRED "incorrect" cNORM "\n"); else ERR_print_errors_fp(stderr); } /* copy-paste from crypto/crmf/crmf_lib.c */ static int X509_PUBKEY_cmp(X509_PUBKEY *a, X509_PUBKEY *b) { X509_ALGOR *algA = NULL, *algB = NULL; int res = 0; if (a == b) return 0; if (a == NULL || !X509_PUBKEY_get0_param(NULL, NULL, NULL, &algA, a) || algA == NULL) return -1; if (b == NULL || !X509_PUBKEY_get0_param(NULL, NULL, NULL, &algB, b) || algB == NULL) return 1; if ((res = X509_ALGOR_cmp(algA, algB)) != 0) return res; return !EVP_PKEY_cmp(X509_PUBKEY_get0(a), X509_PUBKEY_get0(b)); } static int test_cert(struct test_cert *tc) { int ret = 0, err; X509 *x; const unsigned char *p; printf(cBLUE "Test %s (it): " cNORM, tc->name); p = tc->cert; T(x = d2i_X509(NULL, &p, tc->len)); X509_PUBKEY *xk; TE(xk = X509_get_X509_PUBKEY(x)); /* Output algo and parameters. */ X509_ALGOR *palg; ASN1_OBJECT *ppkalg; T(X509_PUBKEY_get0_param(&ppkalg, NULL, 0, &palg, xk)); int algo_nid = OBJ_obj2nid(ppkalg); printf(" (algo %s)", OBJ_nid2sn(algo_nid)); int pptype; ASN1_STRING *pval = NULL; X509_ALGOR_get0(NULL, &pptype, (void *)&pval, palg); /* Low level access to parameters in case X509_get0_pubkey does not work. */ T(pptype == V_ASN1_SEQUENCE); STACK_OF(ASN1_TYPE) *seq; p = pval->data; T(seq = d2i_ASN1_SEQUENCE_ANY(NULL, &p, pval->length)); ASN1_TYPE *p1; /* First parameter is curve OID. */ T(p1 = sk_ASN1_TYPE_value(seq, 0)); int param_nid = OBJ_obj2nid((ASN1_OBJECT *)(p1->value.ptr)); printf(" (curve %s)\n", OBJ_nid2sn(param_nid)); sk_ASN1_TYPE_pop_free(seq, ASN1_TYPE_free); /* * Conversion tests. */ /* Convert cert to DER and back. */ BIO *bp; T(bp = BIO_new(BIO_s_mem())); T(i2d_X509_bio(bp, x)); X509 *y = NULL; T(d2i_X509_bio(bp, &y)); err = X509_cmp(x, y); printf(" d2i_X509_bio\t\t\t"); print_test_result(!err); ret |= err; X509_free(y); /* Convert cert to PEM and back. */ y = NULL; T(PEM_write_bio_X509(bp, x)); T(PEM_read_bio_X509(bp, &y, 0, NULL)); err = X509_cmp(x, y); printf(" PEM_read_bio_X509\t\t"); print_test_result(!err); ret |= err; X509_free(y); /* Convert public key to PEM and back. */ T(BIO_reset(bp)); T(PEM_write_bio_X509_PUBKEY(bp, xk)); X509_PUBKEY *tk = NULL; T(PEM_read_bio_X509_PUBKEY(bp, &tk, NULL, NULL)); err = X509_PUBKEY_cmp(xk, tk); X509_PUBKEY_free(tk); printf(" PEM_read_bio_X509_PUBKEY\t"); print_test_result(!err); ret |= err; /* Convert public key to DER and back. */ T(BIO_reset(bp)); T(i2d_X509_PUBKEY_bio(bp, xk)); tk = NULL; T(d2i_X509_PUBKEY_bio(bp, &tk)); err = X509_PUBKEY_cmp(xk, tk); X509_PUBKEY_free(tk); printf(" d2i_X509_PUBKEY_bio\t\t"); print_test_result(!err); ret |= err; BIO_free(bp); /* * Verify */ printf(" X509_verify API\t\t"); fflush(stdout); EVP_PKEY *pk; TE(pk = X509_get0_pubkey(x)); /* Similar to: openssl verify -partial_chain -check_ss_sig ... */ /* X509_verify uses EVP_DigestVerify internally */ err = X509_verify(x, pk); print_test_result(err); ret |= err != 1; /* Verify manually. */ const ASN1_BIT_STRING *signature; X509_get0_signature(&signature, NULL, x); unsigned char *tbs = NULL; /* signed part */ int tbs_len; T((tbs_len = i2d_re_X509_tbs(x, &tbs)) > 0); int algnid, hash_nid, pknid; T(algnid = X509_get_signature_nid(x)); T(OBJ_find_sigid_algs(algnid, &hash_nid, &pknid)); printf(" EVP_Verify API\t\t"); EVP_MD_CTX *md_ctx; T(md_ctx = EVP_MD_CTX_new()); const EVP_MD *mdtype; T(mdtype = EVP_get_digestbynid(hash_nid)); T(EVP_VerifyInit(md_ctx, mdtype)); T(EVP_VerifyUpdate(md_ctx, tbs, tbs_len)); err = EVP_VerifyFinal(md_ctx, signature->data, signature->length, pk); print_test_result(err); EVP_MD_CTX_free(md_ctx); ret |= err != 1; X509_free(x); OPENSSL_free(tbs); return ret; } /* Generate EC_KEY with proper parameters using temporary PKEYs. * This emulates fill_GOST_EC_params() call. */ static int EC_KEY_create(int type, int param_nid, EC_KEY *dst) { EVP_PKEY *pkey; T(pkey = EVP_PKEY_new()); T(EVP_PKEY_set_type(pkey, type)); EVP_PKEY_CTX *ctx; T(ctx = EVP_PKEY_CTX_new(pkey, NULL)); T(EVP_PKEY_paramgen_init(ctx)); T(EVP_PKEY_CTX_ctrl(ctx, type, -1, EVP_PKEY_CTRL_GOST_PARAMSET, param_nid, NULL)); EVP_PKEY *pkey2 = NULL; int err; TE((err = EVP_PKEY_paramgen(ctx, &pkey2)) == 1); T(EC_KEY_copy(dst, EVP_PKEY_get0(pkey2))); EVP_PKEY_CTX_free(ctx); EVP_PKEY_free(pkey); EVP_PKEY_free(pkey2); return err; } static int test_param(struct test_param *t) { int ret = 0, err = 0; int type = 0; int hash_nid = 0; const char *sn = OBJ_nid2sn(t->param); printf(cBLUE "Test %s (cp):" cNORM "\n", sn); switch (t->len) { case 256 / 8: type = NID_id_GostR3410_2012_256; break; case 512 / 8: type = NID_id_GostR3410_2012_512; break; default: OpenSSLDie(__FILE__, __LINE__, "invalid len"); } switch (type) { case NID_id_GostR3410_2012_256: hash_nid = NID_id_GostR3411_2012_256; break; case NID_id_GostR3410_2012_512: hash_nid = NID_id_GostR3411_2012_512; break; default: OpenSSLDie(__FILE__, __LINE__, "invalid type"); } /* Manually construct public key */ EC_KEY *ec; T(ec = EC_KEY_new()); T(EC_KEY_create(type, t->param, ec)); const EC_GROUP *group; T(group = EC_KEY_get0_group(ec)); unsigned char *pub_key; T(pub_key = OPENSSL_malloc(t->len * 2)); BUF_reverse(pub_key, t->pub_key, t->len * 2); BIGNUM *x, *y; T(y = BN_bin2bn(pub_key, t->len, NULL)); T(x = BN_bin2bn(pub_key + t->len, t->len, NULL)); OPENSSL_free(pub_key); EC_POINT *pk; T(pk = EC_POINT_new(group)); T(EC_POINT_set_affine_coordinates(group, pk, x, y, NULL)); BN_free(x); BN_free(y); T(EC_KEY_set_public_key(ec, pk)); EC_POINT_free(pk); EVP_PKEY *pkey; T(pkey = EVP_PKEY_new()); T(EVP_PKEY_assign(pkey, type, ec)); int siglen = EVP_PKEY_size(pkey); /* * Verify */ EVP_PKEY_CTX *ctx; T(ctx = EVP_PKEY_CTX_new(pkey, NULL)); unsigned char *sig; T(sig = OPENSSL_malloc(siglen)); /* Need to reverse provided signature for unknown reason, * contrary to how it goes into signature. */ BUF_reverse(sig, t->signature, siglen); /* Verify using EVP_PKEY_verify API */ printf(" EVP_PKEY_verify API\t\t"); T(EVP_PKEY_verify_init(ctx)); err = EVP_PKEY_verify(ctx, sig, siglen, t->hash, t->len); EVP_PKEY_CTX_free(ctx); print_test_result(err); ret |= err != 1; /* Verify using EVP_Verify API */ if (t->data) { printf(" EVP_Verify API\t\t"); EVP_MD_CTX *md_ctx; T(md_ctx = EVP_MD_CTX_new()); const EVP_MD *mdtype; T(mdtype = EVP_get_digestbynid(hash_nid)); T(EVP_VerifyInit(md_ctx, mdtype)); /* Feed byte-by-byte. */ size_t i; for (i = 0; i < t->data_len; i++) T(EVP_VerifyUpdate(md_ctx, &t->data[i], 1)); err = EVP_VerifyFinal(md_ctx, sig, siglen, pkey); print_test_result(err); EVP_MD_CTX_free(md_ctx); ret |= err != 1; } /* Verify using EVP_DigestVerifyInit API */ if (t->data) { printf(" EVP_DigestVerifyInit API\t"); EVP_MD_CTX *md_ctx; T(md_ctx = EVP_MD_CTX_new()); const EVP_MD *mdtype; T(mdtype = EVP_get_digestbynid(hash_nid)); T(EVP_DigestVerifyInit(md_ctx, NULL, mdtype, NULL, pkey)); /* Verify in one step. */ err = EVP_DigestVerify(md_ctx, sig, siglen, t->data, t->data_len); print_test_result(err); EVP_MD_CTX_free(md_ctx); ret |= err != 1; } OPENSSL_free(sig); EVP_PKEY_free(pkey); return ret; } int main(int argc, char **argv) { int ret = 0; OPENSSL_add_all_algorithms_conf(); struct test_param **tpp; for (tpp = test_params; *tpp; tpp++) ret |= test_param(*tpp); struct test_cert *tc; for (tc = test_certs; tc->cert; tc++) ret |= test_cert(tc); if (ret) printf(cDRED "= Some tests FAILED!" cNORM "\n"); else printf(cDGREEN "= All tests passed!" cNORM "\n"); return ret; } libengine-gost-openssl-3.0.2/test_sign.c000066400000000000000000000224111446070765000202570ustar00rootroot00000000000000/* * Test GOST 34.10 Sign/Verify operation for every curve parameter * * Copyright (C) 2019 vt@altlinux.org. All Rights Reserved. * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif #include "gost_lcl.h" #include #include #include #include #include #include #include #include #include #include #include #define T(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ OpenSSLDie(__FILE__, __LINE__, #e); \ } #define TE(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ fprintf(stderr, "Error at %s:%d %s\n", __FILE__, __LINE__, #e); \ return -1; \ } #define cRED "\033[1;31m" #define cDRED "\033[0;31m" #define cGREEN "\033[1;32m" #define cDGREEN "\033[0;32m" #define cBLUE "\033[1;34m" #define cDBLUE "\033[0;34m" #define cCYAN "\033[1;36m" #define cNORM "\033[m" #define TEST_ASSERT(e) {if ((test = (e))) \ printf(cRED " Test FAILED" cNORM "\n"); \ else \ printf(cGREEN " Test passed" cNORM "\n");} struct test_sign { const char *name; int nid; size_t bits; const char *paramset; }; #define D(x,y,z) { .name = #x, .nid = x, .bits = y, .paramset = z } static struct test_sign test_signs[] = { D(NID_id_GostR3410_2001_CryptoPro_A_ParamSet, 256, "A"), D(NID_id_GostR3410_2001_CryptoPro_B_ParamSet, 256, "B"), D(NID_id_GostR3410_2001_CryptoPro_C_ParamSet, 256, "C"), D(NID_id_tc26_gost_3410_2012_256_paramSetA, 256, "TCA"), D(NID_id_tc26_gost_3410_2012_256_paramSetB, 256, "TCB"), D(NID_id_tc26_gost_3410_2012_256_paramSetC, 256, "TCC"), D(NID_id_tc26_gost_3410_2012_256_paramSetD, 256, "TCD"), D(NID_id_tc26_gost_3410_2012_512_paramSetA, 512, "A"), D(NID_id_tc26_gost_3410_2012_512_paramSetB, 512, "B"), D(NID_id_tc26_gost_3410_2012_512_paramSetC, 512, "C"), 0 }; #undef D static void hexdump(const void *ptr, size_t len) { const unsigned char *p = ptr; size_t i, j; for (i = 0; i < len; i += j) { for (j = 0; j < 16 && i + j < len; j++) printf("%s %02x", j? "" : "\n", p[i + j]); } printf("\n"); } static void print_test_tf(int err, int val, const char *t, const char *f) { if (err == 1) printf(cGREEN "%s" cNORM "\n", t); else printf(cRED "%s [%d]" cNORM "\n", f, val); } static void print_test_result(int err) { if (err == 1) printf(cGREEN "success" cNORM "\n"); else if (err == 0) printf(cRED "failure" cNORM "\n"); else ERR_print_errors_fp(stderr); } static int test_sign(struct test_sign *t) { int ret = 0, err; size_t len = t->bits / 8; printf(cBLUE "Test %s:" cNORM "\n", t->name); /* Signature type from size. */ int type = 0; const char *algname = NULL; switch (t->bits) { case 256: type = NID_id_GostR3410_2012_256; algname = "gost2012_256"; break; case 512: type = NID_id_GostR3410_2012_512; algname = "gost2012_512"; break; default: return -1; } /* Keygen. */ EVP_PKEY *pkey; T(pkey = EVP_PKEY_new()); TE(EVP_PKEY_set_type(pkey, type)); EVP_PKEY_CTX *ctx; T(ctx = EVP_PKEY_CTX_new(pkey, NULL)); T(EVP_PKEY_keygen_init(ctx)); T(EVP_PKEY_CTX_ctrl(ctx, type, -1, EVP_PKEY_CTRL_GOST_PARAMSET, t->nid, NULL)); EVP_PKEY *priv_key = NULL; err = EVP_PKEY_keygen(ctx, &priv_key); printf("\tEVP_PKEY_keygen:\t"); print_test_result(err); EVP_PKEY_CTX_free(ctx); EVP_PKEY_free(pkey); if (err != 1) return -1; /* Convert to PEM and back. */ BIO *bp; T(bp = BIO_new(BIO_s_secmem())); T(PEM_write_bio_PrivateKey(bp, priv_key, NULL, NULL, 0, NULL, NULL)); pkey = NULL; T(PEM_read_bio_PrivateKey(bp, &pkey, NULL, NULL)); printf("\tPEM_read_bio_PrivateKey:"); /* Yes, it compares only public part. */ err = !EVP_PKEY_cmp(priv_key, pkey); print_test_result(!err); ret |= err; EVP_PKEY_free(pkey); /* Convert to DER and back, using _PrivateKey_bio API. */ T(BIO_reset(bp)); T(i2d_PrivateKey_bio(bp, priv_key)); T(d2i_PrivateKey_bio(bp, &pkey)); printf("\td2i_PrivateKey_bio:\t"); err = !EVP_PKEY_cmp(priv_key, pkey); print_test_result(!err); ret |= err; EVP_PKEY_free(pkey); #if OPENSSL_VERSION_MAJOR >= 3 /* Try d2i_PrivateKey_ex_bio, added in 3.0. */ T(BIO_reset(bp)); T(i2d_PrivateKey_bio(bp, priv_key)); T(d2i_PrivateKey_ex_bio(bp, &pkey, NULL, NULL)); printf("\td2i_PrivateKey_ex_bio:\t"); err = !EVP_PKEY_cmp(priv_key, pkey); print_test_result(!err); ret |= err; EVP_PKEY_free(pkey); #endif /* Convert to DER and back, using OSSL_STORE API. */ T(BIO_reset(bp)); T(i2d_PrivateKey_bio(bp, priv_key)); printf("\tOSSL_STORE_attach:\t"); fflush(stdout); pkey = NULL; OSSL_STORE_CTX *cts; T(cts = OSSL_STORE_attach(bp, "file", NULL, NULL, NULL, NULL, NULL, NULL, NULL)); for (;;) { OSSL_STORE_INFO *info = OSSL_STORE_load(cts); if (!info) { ERR_print_errors_fp(stderr); T(OSSL_STORE_eof(cts)); break; } if (OSSL_STORE_INFO_get_type(info) == OSSL_STORE_INFO_PKEY) { T((pkey = OSSL_STORE_INFO_get1_PKEY(info))); } OSSL_STORE_INFO_free(info); } OSSL_STORE_close(cts); if (pkey) { err = !EVP_PKEY_cmp(priv_key, pkey); print_test_result(!err); ret |= err; EVP_PKEY_free(pkey); } else printf(cCYAN "skipped" cNORM "\n"); BIO_free(bp); /* Convert to DER and back, using memory API. */ unsigned char *kptr = NULL; int klen; T(klen = i2d_PrivateKey(priv_key, &kptr)); const unsigned char *tptr = kptr; /* will be moved by d2i_PrivateKey */ pkey = NULL; T(d2i_PrivateKey(type, &pkey, &tptr, klen)); printf("\td2i_PrivateKey:\t\t"); err = !EVP_PKEY_cmp(priv_key, pkey); print_test_result(!err); ret |= err; EVP_PKEY_free(pkey); OPENSSL_free(kptr); /* Create another key using string interface. */ EVP_PKEY *key1; T(key1 = EVP_PKEY_new()); T(EVP_PKEY_set_type_str(key1, algname, strlen(algname))); EVP_PKEY_CTX *ctx1; T(ctx1 = EVP_PKEY_CTX_new(key1, NULL)); T(EVP_PKEY_keygen_init(ctx1)); T(EVP_PKEY_CTX_ctrl_str(ctx1, "paramset", t->paramset)); EVP_PKEY *key2 = NULL; err = EVP_PKEY_keygen(ctx1, &key2); printf("\tEVP_PKEY_*_str:\t\t"); print_test_result(err); ret |= !err; /* Check if key type and curve_name match expected values. */ int id = EVP_PKEY_id(key2); err = id == type; printf("\tEVP_PKEY_id (%d):\t", type); print_test_tf(err, id, "match", "mismatch"); ret |= !err; const EC_KEY *ec = EVP_PKEY_get0(key2); const EC_GROUP *group = EC_KEY_get0_group(ec); int curve_name = EC_GROUP_get_curve_name(group); err = curve_name == t->nid; printf("\tcurve_name (%d):\t", t->nid); print_test_tf(err, curve_name, "match", "mismatch"); ret |= !err; /* Compare both keys. * Parameters should match, public keys should mismatch. */ err = EVP_PKEY_cmp_parameters(priv_key, key2); printf("\tEVP_PKEY_cmp_parameters:"); print_test_tf(err, err, "success", "failure"); ret |= err != 1; err = EVP_PKEY_cmp(priv_key, key2); err = (err < 0) ? err : !err; printf("\tEVP_PKEY_cmp:\t\t"); print_test_tf(err, err, "differ (good)", "equal (error)"); ret |= err != 1; EVP_PKEY_CTX_free(ctx1); EVP_PKEY_free(key1); /* * Prepare for sign testing. */ size_t siglen = EVP_PKEY_size(priv_key); unsigned char *sig; T(sig = OPENSSL_malloc(siglen)); unsigned char *hash; T(hash = OPENSSL_zalloc(len)); T(ctx = EVP_PKEY_CTX_new(priv_key, NULL)); /* Sign. */ T(EVP_PKEY_sign_init(ctx)); err = EVP_PKEY_sign(ctx, sig, &siglen, hash, len); printf("\tEVP_PKEY_sign:\t\t"); print_test_result(err); ret |= err != 1; /* Non-determinism test. * Check that different signatures for the same data * are not equal. */ unsigned char *sig2; T(sig2 = OPENSSL_malloc(siglen)); TE(EVP_PKEY_sign(ctx, sig2, &siglen, hash, len) == 1); printf("\tNon-determinism:\t"); err = !!memcmp(sig, sig2, siglen); print_test_result(err); ret |= err != 1; OPENSSL_free(sig2); /* Verify. */ T(EVP_PKEY_verify_init(ctx)); hash[0]++; /* JFF */ err = EVP_PKEY_verify(ctx, sig, siglen, hash, len); printf("\tEVP_PKEY_verify:\t"); print_test_result(err); ret |= err != 1; /* False positive Verify. */ T(EVP_PKEY_verify_init(ctx)); hash[0]++; err = EVP_PKEY_verify(ctx, sig, siglen, hash, len); err = (err < 0) ? err : !err; printf("\tFalse positive test:\t"); print_test_result(err); ret |= err != 1; EVP_PKEY_CTX_free(ctx); OPENSSL_free(sig); OPENSSL_free(hash); EVP_PKEY_free(priv_key); EVP_PKEY_free(key2); return ret; } int main(int argc, char **argv) { int ret = 0; OPENSSL_add_all_algorithms_conf(); struct test_sign *sp; for (sp = test_signs; sp->name; sp++) ret |= test_sign(sp); if (ret) printf(cDRED "= Some tests FAILED!" cNORM "\n"); else printf(cDGREEN "= All tests passed!" cNORM "\n"); return ret; } libengine-gost-openssl-3.0.2/test_tls.c000066400000000000000000000212271446070765000201250ustar00rootroot00000000000000/* * Simple Client/Server connection test * * Based on OpenSSL example code. * Copyright (C) 2019 vt@altlinux.org. All Rights Reserved. * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif #include "e_gost_err.h" #include "gost_lcl.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #ifdef __GNUC__ /* For X509_NAME_add_entry_by_txt */ # pragma GCC diagnostic ignored "-Wpointer-sign" #endif #define T(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ OpenSSLDie(__FILE__, __LINE__, #e); \ } #define TE(e) \ if (!(e)) { \ ERR_print_errors_fp(stderr); \ fprintf(stderr, "Error at %s:%d %s\n", __FILE__, __LINE__, #e); \ return -1; \ } #define cRED "\033[1;31m" #define cDRED "\033[0;31m" #define cGREEN "\033[1;32m" #define cDGREEN "\033[0;32m" #define cBLUE "\033[1;34m" #define cDBLUE "\033[0;34m" #define cNORM "\033[m" #define TEST_ASSERT(e) {if ((test = (e))) \ printf(cRED " Test FAILED\n" cNORM); \ else \ printf(cGREEN " Test passed\n" cNORM);} struct certkey { EVP_PKEY *pkey; X509 *cert; }; static int verbose; static const char *cipher_list; static void err(int eval, const char *fmt, ...) { va_list ap; va_start(ap, fmt); vprintf(fmt, ap); va_end(ap); printf(": %s\n", strerror(errno)); exit(eval); } /* Generate simple cert+key pair. Based on req.c */ static struct certkey certgen(const char *algname, const char *paramset) { /* Keygen. */ EVP_PKEY *tkey; T(tkey = EVP_PKEY_new()); T(EVP_PKEY_set_type_str(tkey, algname, strlen(algname))); EVP_PKEY_CTX *ctx; T(ctx = EVP_PKEY_CTX_new(tkey, NULL)); T(EVP_PKEY_keygen_init(ctx)); if (paramset) T(EVP_PKEY_CTX_ctrl_str(ctx, "paramset", paramset)); EVP_PKEY *pkey = NULL; T((EVP_PKEY_keygen(ctx, &pkey)) == 1); EVP_PKEY_CTX_free(ctx); EVP_PKEY_free(tkey); /* REQ. */ X509_REQ *req = NULL; T(req = X509_REQ_new()); T(X509_REQ_set_version(req, 0L)); X509_NAME *name; T(name = X509_NAME_new()); T(X509_NAME_add_entry_by_txt(name, "O", MBSTRING_ASC, (unsigned char *)"Test CA", -1, -1, 0)); T(X509_NAME_add_entry_by_txt(name, "CN", MBSTRING_ASC, (unsigned char *)"Test Key", -1, -1, 0)); T(X509_REQ_set_subject_name(req, name)); T(X509_REQ_set_pubkey(req, pkey)); X509_NAME_free(name); /* Cert. */ X509 *x509ss = NULL; T(x509ss = X509_new()); T(X509_set_version(x509ss, 2)); BIGNUM *brnd = BN_new(); T(BN_rand(brnd, 20 * 8 - 1, -1, 0)); T(BN_to_ASN1_INTEGER(brnd, X509_get_serialNumber(x509ss))); T(X509_set_issuer_name(x509ss, X509_REQ_get_subject_name(req))); T(X509_gmtime_adj(X509_getm_notBefore(x509ss), 0)); T(X509_time_adj_ex(X509_getm_notAfter(x509ss), 1, 0, NULL)); T(X509_set_subject_name(x509ss, X509_REQ_get_subject_name(req))); T(X509_set_pubkey(x509ss, X509_REQ_get0_pubkey(req))); X509_REQ_free(req); BN_free(brnd); X509V3_CTX v3ctx; X509V3_set_ctx_nodb(&v3ctx); X509V3_set_ctx(&v3ctx, x509ss, x509ss, NULL, NULL, 0); X509_EXTENSION *ext; T(ext = X509V3_EXT_conf_nid(NULL, &v3ctx, NID_basic_constraints, "critical,CA:TRUE")); T(X509_add_ext(x509ss, ext, 0)); X509_EXTENSION_free(ext); T(ext = X509V3_EXT_conf_nid(NULL, &v3ctx, NID_subject_key_identifier, "hash")); T(X509_add_ext(x509ss, ext, 1)); X509_EXTENSION_free(ext); T(ext = X509V3_EXT_conf_nid(NULL, &v3ctx, NID_authority_key_identifier, "keyid:always,issuer")); T(X509_add_ext(x509ss, ext, 2)); X509_EXTENSION_free(ext); EVP_MD_CTX *mctx; T(mctx = EVP_MD_CTX_new()); T(EVP_DigestSignInit(mctx, NULL, NULL, NULL, pkey)); T(X509_sign_ctx(x509ss, mctx)); EVP_MD_CTX_free(mctx); #if 0 /* Print cert in text format. */ X509_print_fp(stdout, x509ss); #endif #if 0 /* Print cert in PEM format. */ BIO *out = BIO_new_fp(stdout, BIO_NOCLOSE | BIO_FP_TEXT); PEM_write_bio_X509(out, x509ss); BIO_free_all(out); #endif return (struct certkey){ .pkey = pkey, .cert = x509ss }; } /* Non-blocking BIO test mechanic is based on sslapitest.c */ int test(const char *algname, const char *paramset) { int ret = 0; printf(cBLUE "Test %s", algname); if (paramset) printf(cBLUE ":%s", paramset); printf(cNORM "\n"); struct certkey ck; ck = certgen(algname, paramset); SSL_CTX *cctx, *sctx; T(sctx = SSL_CTX_new(TLS_server_method())); T(SSL_CTX_use_certificate(sctx, ck.cert)); T(SSL_CTX_use_PrivateKey(sctx, ck.pkey)); T(SSL_CTX_check_private_key(sctx)); T(cctx = SSL_CTX_new(TLS_client_method())); /* create_ssl_objects */ SSL *serverssl, *clientssl; T(serverssl = SSL_new(sctx)); T(clientssl = SSL_new(cctx)); BIO *s_to_c_bio, *c_to_s_bio; T(s_to_c_bio = BIO_new(BIO_s_mem())); T(c_to_s_bio = BIO_new(BIO_s_mem())); /* Non-blocking IO. */ BIO_set_mem_eof_return(s_to_c_bio, -1); BIO_set_mem_eof_return(c_to_s_bio, -1); /* Transfer BIOs to SSL objects. */ SSL_set_bio(serverssl, c_to_s_bio, s_to_c_bio); BIO_up_ref(s_to_c_bio); BIO_up_ref(c_to_s_bio); SSL_set_bio(clientssl, s_to_c_bio, c_to_s_bio); c_to_s_bio = NULL; c_to_s_bio = NULL; /* create_ssl_connection */ int retc = -1, rets = -1, err; do { err = SSL_ERROR_WANT_WRITE; while (retc <= 0 && err == SSL_ERROR_WANT_WRITE) { retc = SSL_connect(clientssl); if (retc <= 0) err = SSL_get_error(clientssl, retc); if (verbose) printf("SSL_connect: %d %d\n", retc, err); } if (retc <= 0 && err != SSL_ERROR_WANT_READ) { ERR_print_errors_fp(stderr); OpenSSLDie(__FILE__, __LINE__, "SSL_connect"); } err = SSL_ERROR_WANT_WRITE; while (rets <= 0 && err == SSL_ERROR_WANT_WRITE) { rets = SSL_accept(serverssl); if (rets <= 0) err = SSL_get_error(serverssl, rets); if (verbose) printf("SSL_accept: %d %d\n", rets, err); } if (rets <= 0 && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_X509_LOOKUP) { ERR_print_errors_fp(stderr); OpenSSLDie(__FILE__, __LINE__, "SSL_accept"); } } while (retc <=0 || rets <= 0); /* Two SSL_read_ex should fail. */ unsigned char buf; size_t readbytes; T(!SSL_read_ex(clientssl, &buf, sizeof(buf), &readbytes)); T(!SSL_read_ex(clientssl, &buf, sizeof(buf), &readbytes)); /* Connect client to the server. */ T(SSL_do_handshake(clientssl) == 1); printf("Protocol: %s\n", SSL_get_version(clientssl)); printf("Cipher: %s\n", SSL_get_cipher_name(clientssl)); if (verbose) { SSL_SESSION *sess = SSL_get0_session(clientssl); SSL_SESSION_print_fp(stdout, sess); } /* Transfer some data. */ int i; for (i = 0; i < 16; i++) { char pbuf[512], lbuf[512]; memset(pbuf, 'c' + i, sizeof(pbuf)); T(SSL_write(serverssl, pbuf, sizeof(pbuf)) == sizeof(pbuf)); T(SSL_read(clientssl, lbuf, sizeof(lbuf)) == sizeof(lbuf)); T(memcmp(pbuf, lbuf, sizeof(pbuf)) == 0); memset(lbuf, 's' + i, sizeof(lbuf)); T(SSL_write(clientssl, lbuf, sizeof(lbuf)) == sizeof(lbuf)); T(SSL_read(serverssl, pbuf, sizeof(pbuf)) == sizeof(pbuf)); T(memcmp(pbuf, lbuf, sizeof(pbuf)) == 0); } SSL_shutdown(clientssl); SSL_shutdown(serverssl); SSL_free(serverssl); SSL_free(clientssl); SSL_CTX_free(sctx); SSL_CTX_free(cctx); /* Every responsible process should free this. */ X509_free(ck.cert); EVP_PKEY_free(ck.pkey); return ret; } int main(int argc, char **argv) { int ret = 0; OPENSSL_add_all_algorithms_conf(); char *p; if ((p = getenv("VERBOSE"))) verbose = atoi(p); ret |= test("rsa", NULL); cipher_list = "LEGACY-GOST2012-GOST8912-GOST8912"; ret |= test("gost2012_256", "A"); ret |= test("gost2012_256", "B"); ret |= test("gost2012_256", "C"); ret |= test("gost2012_256", "TCA"); ret |= test("gost2012_512", "A"); ret |= test("gost2012_512", "B"); ret |= test("gost2012_512", "C"); if (ret) printf(cDRED "= Some tests FAILED!\n" cNORM); else printf(cDGREEN "= All tests passed!\n" cNORM); return ret; } libengine-gost-openssl-3.0.2/test_tlstree.c000066400000000000000000000133361446070765000210070ustar00rootroot00000000000000/* * Copyright (c) 2019-2020 Dmitry Belyavskiy * * Contents licensed under the terms of the OpenSSL license * See https://www.openssl.org/source/license.html for details */ #ifdef _MSC_VER # pragma warning(push, 3) # include # pragma warning(pop) #endif # include # include # include # include static void hexdump(FILE *f, const char *title, const unsigned char *s, int l) { int n = 0; fprintf(f, "%s", title); for (; n < l; ++n) { if ((n % 16) == 0) fprintf(f, "\n%04x", n); fprintf(f, " %02x", s[n]); } fprintf(f, "\n"); } int main(void) { #ifdef EVP_MD_CTRL_TLSTREE const unsigned char mac_secret[] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, }; const unsigned char enc_key[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; const unsigned char full_iv[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; unsigned char seq0[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; const unsigned char rec0_header[] = { 0x17, 0x03, 0x03, 0x00, 0x0F }; const unsigned char data0[15] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; const unsigned char mac0_etl[16] = { 0x75, 0x53, 0x09, 0xCB, 0xC7, 0x3B, 0xB9, 0x49, 0xC5, 0x0E, 0xBB, 0x86, 0x16, 0x0A, 0x0F, 0xEE }; const unsigned char enc0_etl[31] = { 0xf3, 0x17, 0xa7, 0x1d, 0x3a, 0xce, 0x43, 0x3b, 0x01, 0xd4, 0xe7, 0xd4, 0xef, 0x61, 0xae, 0x00, 0xd5, 0x3b, 0x41, 0x52, 0x7a, 0x26, 0x1e, 0xdf, 0xc2, 0xba, 0x78, 0x57, 0xc1, 0x93, 0x2d }; unsigned char data0_processed[31]; unsigned char mac0[16]; unsigned char seq63[] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3F, }; const unsigned char rec63_header[] = { 0x17, 0x03, 0x03, 0x10, 0x00 }; unsigned char data63[4096]; const unsigned char mac63_etl[16] = { 0x0A, 0x3B, 0xFD, 0x43, 0x0F, 0xCD, 0xD8, 0xD8, 0x5C, 0x96, 0x46, 0x86, 0x81, 0x78, 0x4F, 0x7D }; const unsigned char enc63_etl_head[32] = { 0x6A, 0x18, 0x38, 0xB0, 0xA0, 0xD5, 0xA0, 0x4D, 0x1F, 0x29, 0x64, 0x89, 0x6D, 0x08, 0x5F, 0xB7, 0xDA, 0x84, 0xD7, 0x76, 0xC3, 0x9F, 0x5C, 0xDC, 0x37, 0x20, 0xB7, 0xB5, 0x59, 0xEF, 0x13, 0x9D }; const unsigned char enc63_etl_tail[48] = { 0x0A, 0x81, 0x29, 0x9B, 0x35, 0x98, 0x19, 0x5D, 0xD4, 0x51, 0x68, 0xA6, 0x38, 0x50, 0xA7, 0x6E, 0x1A, 0x4F, 0x1E, 0x6D, 0xD5, 0xEF, 0x72, 0x59, 0x3F, 0xAE, 0x76, 0x55, 0x71, 0xEC, 0x37, 0xE7, 0x17, 0xF5, 0xB8, 0x62, 0x85, 0xBB, 0x5B, 0xFD, 0x83, 0xB6, 0x6A, 0xB7, 0x63, 0x86, 0x52, 0x08 }; unsigned char data63_processed[4096+16]; unsigned char mac63[16]; EVP_MD_CTX *mdctx = EVP_MD_CTX_new(); EVP_CIPHER_CTX *enc = NULL; const EVP_MD *md; const EVP_CIPHER *ciph; EVP_PKEY *mac_key; size_t mac_len; int i; OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL); memset(data63, 0, 4096); md = EVP_get_digestbynid(NID_grasshopper_mac); EVP_DigestInit_ex(mdctx, md, NULL); mac_key = EVP_PKEY_new_mac_key(NID_grasshopper_mac, NULL, mac_secret, 32); EVP_DigestSignInit(mdctx, NULL, md, NULL, mac_key); EVP_PKEY_free(mac_key); EVP_MD_CTX_ctrl(mdctx, EVP_MD_CTRL_TLSTREE, 0, seq0); EVP_DigestSignUpdate(mdctx, seq0, 8); EVP_DigestSignUpdate(mdctx, rec0_header, 5); EVP_DigestSignUpdate(mdctx, data0, 15); EVP_DigestSignFinal(mdctx, mac0, &mac_len); EVP_MD_CTX_free(mdctx); hexdump(stderr, "MAC0 result", mac0, mac_len); if (memcmp(mac0, mac0_etl, 16) != 0) { fprintf(stderr, "MAC0 mismatch"); exit(1); } ciph = EVP_get_cipherbynid(NID_id_tc26_cipher_gostr3412_2015_kuznyechik_ctracpkm); enc = EVP_CIPHER_CTX_new(); if (EVP_EncryptInit_ex(enc, ciph, NULL, enc_key, full_iv) <= 0) { fprintf(stderr, "Internal error"); exit(1); } for (i = 7; i >= 0; i--) { ++seq0[i]; if (seq0[i] != 0) break; } EVP_CIPHER_CTX_ctrl(enc, EVP_CTRL_TLSTREE, 0, seq0); EVP_Cipher(enc, data0_processed, data0, sizeof(data0)); EVP_Cipher(enc, data0_processed+sizeof(data0), mac0, 16); hexdump(stderr, "ENC0 result", data0_processed, 31); if (memcmp(enc0_etl, data0_processed, sizeof(data0_processed)) != 0) { fprintf(stderr, "ENC0 mismatch"); exit(1); } mdctx = EVP_MD_CTX_new(); EVP_DigestInit_ex(mdctx, md, NULL); mac_key = EVP_PKEY_new_mac_key(NID_grasshopper_mac, NULL, mac_secret, 32); EVP_DigestSignInit(mdctx, NULL, md, NULL, mac_key); EVP_PKEY_free(mac_key); EVP_MD_CTX_ctrl(mdctx, EVP_MD_CTRL_TLSTREE, 0, seq63); EVP_DigestSignUpdate(mdctx, seq63, 8); EVP_DigestSignUpdate(mdctx, rec63_header, 5); EVP_DigestSignUpdate(mdctx, data63, 4096); EVP_DigestSignFinal(mdctx, mac63, &mac_len); EVP_MD_CTX_free(mdctx); hexdump(stderr, "MAC63 result", mac63, mac_len); if (memcmp(mac63, mac63_etl, 16) != 0) { fprintf(stderr, "MAC63 mismatch"); exit(1); } for (i = 7; i >= 0; i--) { ++seq63[i]; if (seq63[i] != 0) break; } EVP_CIPHER_CTX_ctrl(enc, EVP_CTRL_TLSTREE, 0, seq63); EVP_Cipher(enc, data63_processed, data63, sizeof(data63)); EVP_Cipher(enc, data63_processed+sizeof(data63), mac63, 16); hexdump(stderr, "ENC63 result: head", data63_processed, 32); if (memcmp(enc63_etl_head, data63_processed, sizeof(enc63_etl_head)) != 0) { fprintf(stderr, "ENC63 mismatch: head"); exit(1); } hexdump(stderr, "ENC63 result: tail", data63_processed+4096+16-48, 48); if (memcmp(enc63_etl_tail, data63_processed+4096+16-48, sizeof(enc63_etl_tail)) != 0) { fprintf(stderr, "ENC63 mismatch: tail"); exit(1); } #endif return 0; } pax_global_header00006660000000000000000000000064141131415770014516gustar00rootroot0000000000000052 comment=8a126e09547630ef900177625626b6156052f0ee libengine-gost-openssl-3.0.2/libprov/000077500000000000000000000000001411314157700175645ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/libprov/.gitignore000066400000000000000000000006561411314157700215630ustar00rootroot00000000000000# Prerequisites *.d # Object files *.o *.ko *.obj *.elf # Linker output *.ilk *.map *.exp # Precompiled Headers *.gch *.pch # Libraries *.lib *.a *.la *.lo # Shared objects (inc. Windows DLLs) *.dll *.so *.so.* *.dylib # Executables *.exe *.out *.app *.i*86 *.x86_64 *.hex # Debug files *.dSYM/ *.su *.idb *.pdb # Kernel Module Compile Results *.mod* *.cmd .tmp_versions/ modules.order Module.symvers Mkfile.old dkms.conf libengine-gost-openssl-3.0.2/libprov/CMakeLists.txt000066400000000000000000000006261411314157700223300ustar00rootroot00000000000000cmake_minimum_required(VERSION 3.0 FATAL_ERROR) project(libprov LANGUAGES C) set(CMAKE_C_STANDARD 99) if (NOT OPENSSL_FOUND) find_package(OpenSSL 3.0 REQUIRED) endif() add_library(libprov STATIC err.c) set_target_properties(libprov PROPERTIES POSITION_INDEPENDENT_CODE ON OUTPUT_NAME "prov") target_include_directories(libprov PUBLIC include) target_link_libraries(libprov PRIVATE OpenSSL::Crypto) libengine-gost-openssl-3.0.2/libprov/LICENSE000066400000000000000000000156101411314157700205740ustar00rootroot00000000000000Creative Commons Legal Code CC0 1.0 Universal CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED HEREUNDER. Statement of Purpose The laws of most jurisdictions throughout the world automatically confer exclusive Copyright and Related Rights (defined below) upon the creator and subsequent owner(s) (each and all, an "owner") of an original work of authorship and/or a database (each, a "Work"). Certain owners wish to permanently relinquish those rights to a Work for the purpose of contributing to a commons of creative, cultural and scientific works ("Commons") that the public can reliably and without fear of later claims of infringement build upon, modify, incorporate in other works, reuse and redistribute as freely as possible in any form whatsoever and for any purposes, including without limitation commercial purposes. These owners may contribute to the Commons to promote the ideal of a free culture and the further production of creative, cultural and scientific works, or to gain reputation or greater distribution for their Work in part through the use and efforts of others. For these and/or other purposes and motivations, and without any expectation of additional consideration or compensation, the person associating CC0 with a Work (the "Affirmer"), to the extent that he or she is an owner of Copyright and Related Rights in the Work, voluntarily elects to apply CC0 to the Work and publicly distribute the Work under its terms, with knowledge of his or her Copyright and Related Rights in the Work and the meaning and intended legal effect of CC0 on those rights. 1. Copyright and Related Rights. A Work made available under CC0 may be protected by copyright and related or neighboring rights ("Copyright and Related Rights"). Copyright and Related Rights include, but are not limited to, the following: i. the right to reproduce, adapt, distribute, perform, display, communicate, and translate a Work; ii. moral rights retained by the original author(s) and/or performer(s); iii. publicity and privacy rights pertaining to a person's image or likeness depicted in a Work; iv. rights protecting against unfair competition in regards to a Work, subject to the limitations in paragraph 4(a), below; v. rights protecting the extraction, dissemination, use and reuse of data in a Work; vi. database rights (such as those arising under Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, and under any national implementation thereof, including any amended or successor version of such directive); and vii. other similar, equivalent or corresponding rights throughout the world based on applicable law or treaty, and any national implementations thereof. 2. Waiver. To the greatest extent permitted by, but not in contravention of, applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and unconditionally waives, abandons, and surrenders all of Affirmer's Copyright and Related Rights and associated claims and causes of action, whether now known or unknown (including existing as well as future claims and causes of action), in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each member of the public at large and to the detriment of Affirmer's heirs and successors, fully intending that such Waiver shall not be subject to revocation, rescission, cancellation, termination, or any other legal or equitable action to disrupt the quiet enjoyment of the Work by the public as contemplated by Affirmer's express Statement of Purpose. 3. Public License Fallback. Should any part of the Waiver for any reason be judged legally invalid or ineffective under applicable law, then the Waiver shall be preserved to the maximum extent permitted taking into account Affirmer's express Statement of Purpose. In addition, to the extent the Waiver is so judged Affirmer hereby grants to each affected person a royalty-free, non transferable, non sublicensable, non exclusive, irrevocable and unconditional license to exercise Affirmer's Copyright and Related Rights in the Work (i) in all territories worldwide, (ii) for the maximum duration provided by applicable law or treaty (including future time extensions), (iii) in any current or future medium and for any number of copies, and (iv) for any purpose whatsoever, including without limitation commercial, advertising or promotional purposes (the "License"). The License shall be deemed effective as of the date CC0 was applied by Affirmer to the Work. Should any part of the License for any reason be judged legally invalid or ineffective under applicable law, such partial invalidity or ineffectiveness shall not invalidate the remainder of the License, and in such case Affirmer hereby affirms that he or she will not (i) exercise any of his or her remaining Copyright and Related Rights in the Work or (ii) assert any associated claims and causes of action with respect to the Work, in either case contrary to Affirmer's express Statement of Purpose. 4. Limitations and Disclaimers. a. No trademark or patent rights held by Affirmer are waived, abandoned, surrendered, licensed or otherwise affected by this document. b. Affirmer offers the Work as-is and makes no representations or warranties of any kind concerning the Work, express, implied, statutory or otherwise, including without limitation warranties of title, merchantability, fitness for a particular purpose, non infringement, or the absence of latent or other defects, accuracy, or the present or absence of errors, whether or not discoverable, all to the greatest extent permissible under applicable law. c. Affirmer disclaims responsibility for clearing rights of other persons that may apply to the Work or any use thereof, including without limitation any person's Copyright and Related Rights in the Work. Further, Affirmer disclaims responsibility for obtaining any necessary consents, permissions or other rights required for any use of the Work. d. Affirmer understands and acknowledges that Creative Commons is not a party to this document and has no duty or obligation with respect to this CC0 or use of the Work. libengine-gost-openssl-3.0.2/libprov/README.md000066400000000000000000000011731411314157700210450ustar00rootroot00000000000000# libprov - a small library of helpers for OpenSSL 3 providers Currently available routines: - ERR helpers OpenSSL's ERR functions do not lend themselves very well to provider's own error tables, because they can't pass the provider's handle to the error record building routines. This is due to certain limitations with the base C standard requirements for OpenSSL itself (C90). These helpers are replacements of OpenSSL's ERR_raise() and ERR_raise_data() that take better advantage of more modern C standards. C99 required. See the comments in include/prov/err.h for more information. libengine-gost-openssl-3.0.2/libprov/err.c000066400000000000000000000054421411314157700205250ustar00rootroot00000000000000/* CC0 license applied, see LICENCE.md */ #include #include #include "prov/err.h" struct proverr_functions_st { const OSSL_CORE_HANDLE *core; OSSL_FUNC_core_new_error_fn *core_new_error; OSSL_FUNC_core_set_error_debug_fn *core_set_error_debug; OSSL_FUNC_core_vset_error_fn *core_vset_error; }; struct proverr_functions_st * proverr_new_handle(const OSSL_CORE_HANDLE *core, const OSSL_DISPATCH *dispatch) { /* * libcrypto gives providers the tools to create error routines similar * to the ones defined in */ OSSL_FUNC_core_new_error_fn *c_new_error = NULL; OSSL_FUNC_core_set_error_debug_fn *c_set_error_debug = NULL; OSSL_FUNC_core_vset_error_fn *c_vset_error = NULL; struct proverr_functions_st *handle = NULL; assert(core != NULL); assert(dispatch != NULL); #ifndef DEBUG if (core == NULL || dispatch == NULL) return NULL; #endif for (; dispatch->function_id != 0; dispatch++) switch (dispatch->function_id) { case OSSL_FUNC_CORE_NEW_ERROR: c_new_error = OSSL_FUNC_core_new_error(dispatch); break; case OSSL_FUNC_CORE_SET_ERROR_DEBUG: c_set_error_debug = OSSL_FUNC_core_set_error_debug(dispatch); break; case OSSL_FUNC_CORE_VSET_ERROR: c_vset_error = OSSL_FUNC_core_vset_error(dispatch); break; } assert(c_new_error != NULL); assert(c_set_error_debug != NULL); assert(c_vset_error != NULL); #ifdef NDEBUG if (c_new_error == NULL || c_set_error_debug == NULL || c_vset_error == NULL) return NULL; #endif if ((handle = malloc(sizeof(*handle))) != NULL) { handle->core = core; handle->core_new_error = c_new_error; handle->core_set_error_debug = c_set_error_debug; handle->core_vset_error = c_vset_error; } return handle; } struct proverr_functions_st * proverr_dup_handle(struct proverr_functions_st *src) { struct proverr_functions_st *dst = NULL; if (src != NULL && (dst = malloc(sizeof(*dst))) != NULL) { dst->core = src->core; dst->core_new_error = src->core_new_error; dst->core_set_error_debug = src->core_set_error_debug; dst->core_vset_error = src->core_vset_error; } return dst; } void proverr_free_handle(struct proverr_functions_st *handle) { free(handle); } void proverr_new_error(const struct proverr_functions_st *handle) { handle->core_new_error(handle->core); } void proverr_set_error_debug(const struct proverr_functions_st *handle, const char *file, int line, const char *func) { handle->core_set_error_debug(handle->core, file, line, func); } void proverr_set_error(const struct proverr_functions_st *handle, uint32_t reason, const char *fmt, ...) { va_list ap; va_start(ap, fmt); handle->core_vset_error(handle->core, reason, fmt, ap); va_end(ap); } libengine-gost-openssl-3.0.2/libprov/include/000077500000000000000000000000001411314157700212075ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/libprov/include/prov/000077500000000000000000000000001411314157700221755ustar00rootroot00000000000000libengine-gost-openssl-3.0.2/libprov/include/prov/err.h000066400000000000000000000053361411314157700231450ustar00rootroot00000000000000/* CC0 license applied, see LICENCE.md */ #include #include #include /* * The idea with this library is to replace OpenSSL's ERR_raise() and * ERR_raise_data() with variants that are more suitable for providers that * have their own error reason table. * * This assumes variadic function-like macros, i.e. C99 or newer. * * A minimal amount of preparation is needed on provider initialization and * takedown: * * 1. The provider's outgoing OSSL_DISPATCH table must include an entry * got OSSL_FUNC_PROVIDER_GET_REASON_STRINGS, with a function that returns * the provider's table of reasons. * That table of reasons is a simple OSSL_ITEM array, where each element * contains a numeric reason identity for the reason, and the description * text string for that reason. * Each numeric reason identity MUST be unique within this array. * * 2. On provider initialization, an error handle must be created using * proverr_new_handle(). The returned pointer is passed as first argument * to ERR_raise() and ERR_raise_data(). * * 3. On provider takedown, the error handle must be freed, using * proverr_free_handle(). * * With this preparation, the provider code can use ERR_raise() and * ERR_raise_data() "as usual", with the exception that the first argument is * the error handle instead of one of the OpenSSL ERR_LIB_ macros. */ /* * In case was included, we throw away its error recording * macros. * Note that ERR_put_error() is NOT recreated. It's deprecated and should not * be used any more. */ #undef ERR_put_error #undef ERR_raise #undef ERR_raise_data #define ERR_raise(handle, reason) ERR_raise_data((handle),(reason),NULL) #define ERR_raise_data(handle, reason, ...) \ (proverr_new_error(handle), \ proverr_set_error_debug(handle, OPENSSL_FILE,OPENSSL_LINE,OPENSSL_FUNC), \ proverr_set_error(handle, reason, __VA_ARGS__)) /* * The structure where the libcrypto core handle and core functions are * captured. */ struct proverr_functions_st; struct proverr_functions_st * proverr_new_handle(const OSSL_CORE_HANDLE *core, const OSSL_DISPATCH *in); struct proverr_functions_st * proverr_dup_handle(struct proverr_functions_st *src); void proverr_free_handle(struct proverr_functions_st *handle); void proverr_new_error(const struct proverr_functions_st *handle); void proverr_set_error_debug(const struct proverr_functions_st *handle, const char *file, int line, const char *func); void proverr_set_error(const struct proverr_functions_st *handle, uint32_t reason, const char *fmt, ...);