From dd7669a8e0fdeea43ada53dbb31759db1dff5207 Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Wed, 7 Apr 2021 17:09:32 -0700 Subject: [PATCH 01/12] Start of building cryptofuzz docker file --- tests/ci/docker_images/linux-x86/build_images.sh | 1 + .../linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile | 15 +++++++++++++++ .../build_cryptofuzz_modules.sh | 4 ++++ 3 files changed, 20 insertions(+) create mode 100644 tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile create mode 100755 tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh diff --git a/tests/ci/docker_images/linux-x86/build_images.sh b/tests/ci/docker_images/linux-x86/build_images.sh index 0764596680..83c15894a9 100755 --- a/tests/ci/docker_images/linux-x86/build_images.sh +++ b/tests/ci/docker_images/linux-x86/build_images.sh @@ -16,6 +16,7 @@ docker build -t ubuntu-20.04:clang-7x ubuntu-20.04_clang-7x docker build -t ubuntu-20.04:clang-8x ubuntu-20.04_clang-8x docker build -t ubuntu-20.04:clang-9x ubuntu-20.04_clang-9x docker build -t ubuntu-20.04:clang-10x ubuntu-20.04_clang-10x +docker build -t ubuntu-20.04:cryptofuzz ubuntu-20.04_cryptofuzz docker build -t centos-7:gcc-4x centos-7_gcc-4x docker build -t amazonlinux-2:base amazonlinux-2_base docker build -t amazonlinux-2:gcc-7x amazonlinux-2_gcc-7x diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile new file mode 100644 index 0000000000..e339f64094 --- /dev/null +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile @@ -0,0 +1,15 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 + +FROM ubuntu-20.04:clang-10x + +SHELL ["/bin/bash", "-c"] + +ENV CRYPTOFUZZ_ROOT=${DEPENDENCIES_DIR}/cryptofuzz + + +RUN set -ex && mkdir $CRYPTOFUZZ_ROOT +COPY build_cryptofuzz_modules.sh $CRYPTOFUZZ_ROOT/. +RUN set -ex && cd $CRYPTOFUZZ_ROOT && ./build_cryptofuzz_modules.sh +ENV CC=clang-10 +ENV CXX=clang++-10 \ No newline at end of file diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh new file mode 100755 index 0000000000..3feaee4600 --- /dev/null +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh @@ -0,0 +1,4 @@ +#!/bin/bash +set -exo pipefail + +echo "Running" \ No newline at end of file From 72b7cad7d2b75c665ba0efbbb823f1846e09dbdd Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Thu, 8 Apr 2021 01:20:10 -0700 Subject: [PATCH 02/12] Build botan and crypto++ --- .../ubuntu-20.04_cryptofuzz/Dockerfile | 39 +++++++++++++--- .../build_cryptofuzz_modules.sh | 46 ++++++++++++++++++- 2 files changed, 78 insertions(+), 7 deletions(-) diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile index e339f64094..22ed1b019c 100644 --- a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile @@ -5,11 +5,38 @@ FROM ubuntu-20.04:clang-10x SHELL ["/bin/bash", "-c"] -ENV CRYPTOFUZZ_ROOT=${DEPENDENCIES_DIR}/cryptofuzz +RUN set -ex && \ + apt-get update && \ + apt-get -y --no-install-recommends upgrade && \ + apt-get -y --no-install-recommends install \ + make \ + libboost-all-dev && \ + apt-get autoremove --purge -y && \ + apt-get clean && \ + apt-get autoclean && \ + rm -rf /var/lib/apt/lists/* && \ + rm -rf /tmp/* +ENV FUZZ_ROOT=${DEPENDENCIES_DIR} +ENV MODULE_ROOT="${FUZZ_ROOT}/modules" +# +# # Recommended flags from https://github.com/guidovranken/cryptofuzz/blob/master/docs/building.md +# ENV CFLAGS="-fsanitize=address,undefined,fuzzer-no-link -O2 -g" +# ENV CXXFLAGS="-fsanitize=address,undefined,fuzzer-no-link -D_GLIBCXX_DEBUG -O2 -g" +# +# # Add address sanitizer flags +# ENV CFLAGS="${CFLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer" +# ENV CXXFLAGS="${CXXFLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer" +# +# # Configure base CryptoFuzz +# RUN git clone --depth 1 https://github.com/guidovranken/cryptofuzz.git && cd cryptofuzz +# ENV CRYPTOFUZZ_ROOT=$(pwd) +# RUN python3 gen_repository.py +# +# RUN mkdir -p $MODULE_ROOT && cd $MODULE_ROOT +# +# # Botan https://github.com/guidovranken/cryptofuzz/blob/master/docs/botan.md +# RUN git clone --depth 1 https://github.com/randombit/botan.git && cd botan -RUN set -ex && mkdir $CRYPTOFUZZ_ROOT -COPY build_cryptofuzz_modules.sh $CRYPTOFUZZ_ROOT/. -RUN set -ex && cd $CRYPTOFUZZ_ROOT && ./build_cryptofuzz_modules.sh -ENV CC=clang-10 -ENV CXX=clang++-10 \ No newline at end of file +COPY build_cryptofuzz_modules.sh $FUZZ_ROOT/. +RUN set -ex && cd $CRYPTOFUZZ_ROOT && "${FUZZ_ROOT}/build_cryptofuzz_modules.sh" diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh index 3feaee4600..a30ebf7c36 100755 --- a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh @@ -1,4 +1,48 @@ #!/bin/bash set -exo pipefail -echo "Running" \ No newline at end of file +function env { + export "$1"="$2" + echo "export ${1}=\"${2}\"" >> "${FUZZ_ROOT}/fuzz_env.sh" +} +# Recommended flags from https://github.com/guidovranken/cryptofuzz/blob/master/docs/building.md +export CFLAGS="-fsanitize=address,undefined,fuzzer-no-link -O2 -g" +export CXXFLAGS="-fsanitize=address,undefined,fuzzer-no-link -D_GLIBCXX_DEBUG -O2 -g" + +# Setup base of Cryptofuzz +MODULES_ROOT="${FUZZ_ROOT}/modules" +git clone --depth 1 https://github.com/guidovranken/cryptofuzz.git +cd cryptofuzz +CRYPTOFUZZ_SRC=$(pwd) +python3 gen_repository.py + +mkdir "$MODULES_ROOT" +cd "$MODULES_ROOT" + +# Botan https://github.com/guidovranken/cryptofuzz/blob/master/docs/botan.md +git clone --depth 1 https://github.com/randombit/botan.git +cd botan +python3 configure.py --cc-bin=$CXX --cc-abi-flags="$CXXFLAGS" --disable-shared --disable-modules=locking_allocator,x509,tls --build-targets=static --without-documentation +make -j$(nproc) +export CXXFLAGS="$CXXFLAGS -DCRYPTOFUZZ_BOTAN" +env LIBBOTAN_A_PATH `realpath libbotan-3.a` +env BOTAN_INCLUDE_PATH `realpath build/include` +cd "${CRYPTOFUZZ_SRC}/modules/botan/" +make -j$(nproc) + +# Crypto++ https://github.com/guidovranken/cryptofuzz/blob/master/docs/cryptopp.md +cd "$MODULES_ROOT" +git clone --depth 1 https://github.com/weidai11/cryptopp.git +cd cryptopp/ +make libcryptopp.a -j$(nproc) +export CXXFLAGS="$CXXFLAGS -DCRYPTOFUZZ_CRYPTOPP" +env LIBCRYPTOPP_A_PATH `realpath libcryptopp.a` +env CRYPTOPP_INCLUDE_PATH `realpath .` +cd "${CRYPTOFUZZ_SRC}/modules/cryptopp/" +make + + +# Save final common flags +env CFLAGS "$CFLAGS" +env CXXFLAGS "$CXXFLAGS" +env CRYPTOFUZZ_SRC "$CRYPTOFUZZ_SRC" From 9c2ebc5fc99c2c7e280c345962363f62cba394d3 Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Thu, 8 Apr 2021 17:01:11 -0700 Subject: [PATCH 03/12] Run cryptofuzz with 2 additional modules --- .../ubuntu-20.04_cryptofuzz/Dockerfile | 25 +- .../build_cryptofuzz_modules.sh | 7 + .../cryptofuzz-dict.txt | 716 ++++++++++++++++++ .../cryptofuzz_seed_corpus.zip | Bin 0 -> 5854 bytes tests/ci/run_cryptofuzz.sh | 40 + 5 files changed, 767 insertions(+), 21 deletions(-) create mode 100644 tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz-dict.txt create mode 100644 tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_seed_corpus.zip create mode 100644 tests/ci/run_cryptofuzz.sh diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile index 22ed1b019c..c735a8dd62 100644 --- a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile @@ -10,7 +10,8 @@ RUN set -ex && \ apt-get -y --no-install-recommends upgrade && \ apt-get -y --no-install-recommends install \ make \ - libboost-all-dev && \ + libboost-all-dev \ + unzip && \ apt-get autoremove --purge -y && \ apt-get clean && \ apt-get autoclean && \ @@ -19,24 +20,6 @@ RUN set -ex && \ ENV FUZZ_ROOT=${DEPENDENCIES_DIR} ENV MODULE_ROOT="${FUZZ_ROOT}/modules" -# -# # Recommended flags from https://github.com/guidovranken/cryptofuzz/blob/master/docs/building.md -# ENV CFLAGS="-fsanitize=address,undefined,fuzzer-no-link -O2 -g" -# ENV CXXFLAGS="-fsanitize=address,undefined,fuzzer-no-link -D_GLIBCXX_DEBUG -O2 -g" -# -# # Add address sanitizer flags -# ENV CFLAGS="${CFLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer" -# ENV CXXFLAGS="${CXXFLAGS} -fsanitize=address -fsanitize-address-use-after-scope -fno-omit-frame-pointer" -# -# # Configure base CryptoFuzz -# RUN git clone --depth 1 https://github.com/guidovranken/cryptofuzz.git && cd cryptofuzz -# ENV CRYPTOFUZZ_ROOT=$(pwd) -# RUN python3 gen_repository.py -# -# RUN mkdir -p $MODULE_ROOT && cd $MODULE_ROOT -# -# # Botan https://github.com/guidovranken/cryptofuzz/blob/master/docs/botan.md -# RUN git clone --depth 1 https://github.com/randombit/botan.git && cd botan -COPY build_cryptofuzz_modules.sh $FUZZ_ROOT/. -RUN set -ex && cd $CRYPTOFUZZ_ROOT && "${FUZZ_ROOT}/build_cryptofuzz_modules.sh" +COPY build_cryptofuzz_modules.sh cryptofuzz_seed_corpus.zip cryptofuzz-dict.txt $FUZZ_ROOT/ +RUN set -ex && cd $FUZZ_ROOT && "./build_cryptofuzz_modules.sh" diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh index a30ebf7c36..73bc87c38c 100755 --- a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh @@ -10,6 +10,7 @@ export CFLAGS="-fsanitize=address,undefined,fuzzer-no-link -O2 -g" export CXXFLAGS="-fsanitize=address,undefined,fuzzer-no-link -D_GLIBCXX_DEBUG -O2 -g" # Setup base of Cryptofuzz +cd "$FUZZ_ROOT" MODULES_ROOT="${FUZZ_ROOT}/modules" git clone --depth 1 https://github.com/guidovranken/cryptofuzz.git cd cryptofuzz @@ -41,6 +42,12 @@ env CRYPTOPP_INCLUDE_PATH `realpath .` cd "${CRYPTOFUZZ_SRC}/modules/cryptopp/" make +# Copy over the seed corpus +cd "$FUZZ_ROOT" +unzip cryptofuzz_seed_corpus.zip +rm cryptofuzz_seed_corpus.zip +env CRYPTOFUZZ_SEED_CORPUS `realpath cryptofuzz_seed_corpus` +env CRYPTOFUZZ_DICT `realpath cryptofuzz-dict.txt` # Save final common flags env CFLAGS "$CFLAGS" diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz-dict.txt b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz-dict.txt new file mode 100644 index 0000000000..ec087630b1 --- /dev/null +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz-dict.txt @@ -0,0 +1,716 @@ +"\xB9\x42\x19\x24\x83\x1C\x0C\x01" +"\x0E\xB1\x89\x7F\xD7\xDC\x3C\x03" +"\xFF\x66\x18\x6D\xE5\x89\x4E\x03" +"\x61\x8D\xD4\xDA\x71\x3B\x98\x0A" +"\x67\xB3\xDE\x89\xBA\x21\x82\x11" +"\xB9\x97\x3B\xB7\xE8\xCB\x05\x1D" +"\x7E\x00\xD7\x97\x52\x25\xA3\x22" +"\x43\x32\xCF\xF1\x6C\x33\xC7\x44" +"\xB6\xF0\x58\xAC\x1E\x09\x1C\x50" +"\x9F\x80\xF4\x72\xBB\x30\xC0\x50" +"\x95\x96\x63\xFC\xC3\x98\x56\x52" +"\x9F\x1A\xD4\x96\x9A\x68\x8A\x53" +"\x41\x31\x35\x09\x9C\xD8\xC7\x54" +"\x84\xB7\x7C\xED\xE9\x58\x18\x57" +"\x71\x99\x2B\x85\x15\xB9\xD3\x59" +"\xD9\x2A\xA6\x5F\xE1\xD0\xFB\x59" +"\x22\xFC\xA7\xE2\x20\x0C\xE3\x60" +"\xBD\xE6\x5B\x76\x1A\x0F\xEC\x60" +"\x15\x4F\xEB\xBC\xB9\x97\x45\x68" +"\x91\x21\xD6\xFD\x3C\xA5\xD1\x6F" +"\x19\x2F\x8C\x6D\xFD\x13\x74\x71" +"\xDD\xB8\x12\x2E\x3E\xF4\xD2\x73" +"\x44\xCB\xC0\xE1\x86\x75\xBE\x75" +"\x33\x30\x4F\x7D\xE5\x15\xDF\x76" +"\x6E\xBC\x64\x4D\xF2\x50\xC5\x85" +"\x6A\xF4\x50\x8A\x7C\xE1\x2D\x87" +"\xC3\x69\x9F\x42\xC4\xC4\x81\x88" +"\x7D\x13\xF1\x50\xC4\x02\xDA\x90" +"\xFC\x88\x8F\x8A\x07\xA7\xDF\x90" +"\xB1\xCD\x42\xDD\x27\x0D\xF9\x99" +"\xC6\x6C\x9E\x13\xAB\x2A\x88\x9D" +"\x6D\xBD\x4A\x4B\xF8\xB2\x3C\x9F" +"\x2F\xB6\xCC\x47\xAC\x48\x9E\xA3" +"\x25\x1A\x58\x8D\xEE\xD8\xCE\xAD" +"\x09\xC4\x89\x84\x09\x18\xB0\xB9" +"\x2F\x40\x1D\xB3\xD0\x19\xBC\xBA" +"\x72\x9E\x36\xA5\xB0\x8E\xC4\xBB" +"\x02\xC9\x2F\x17\xE5\xC0\x08\xC2" +"\xA8\xC4\xAB\xC9\xB3\x0D\x95\xDB" +"\x6F\xC5\x88\x4A\x33\x16\xC2\xED" +"\x75\xEF\x03\xB1\x03\x78\xEF\xFE" +"\x4E\xE8\x72\x7F\xBA\xB8\x77\xFF" +"\x37\x33\x7B\x8B\xF3\x03\x86\x1E" +"\x2D\xCB\x27\x27\x5D\xE3\xE6\x27" +"\xDC\x4D\xAD\x6B\x06\x93\x4F\x29" +"\x5C\xBB\x8D\x3D\xBE\x1F\xE2\x2F" +"\x75\xC0\x8D\x3D\xBE\x22\xE2\x2F" +"\x05\x91\x8D\xFF\xC4\x6F\xA1\x30" +"\x88\xFB\x2E\xF0\x2D\x2D\x1B\x3E" +"\x0A\x24\xFE\x05\xCB\x20\x09\x46" +"\x61\xA3\xA2\x61\x44\x1F\xE1\x4C" +"\x85\xCD\x2D\xEC\xF9\x7F\x2C\x4D" +"\x4C\x8D\xD0\x02\xC1\x75\x9F\x50" +"\x0F\x95\x49\x86\xBF\xCE\x6A\x51" +"\x86\xE7\x3F\x43\xFD\xEA\x20\x5F" +"\xD5\x7C\xAA\x59\xFD\xAF\x49\x7C" +"\x4D\x96\x67\xED\x32\x4D\xC1\x7C" +"\x8C\x81\xF8\x89\x02\x2D\x6E\x81" +"\x6B\xF2\xB6\x92\x14\xB8\x36\x82" +"\x2B\xD7\x00\xCA\x57\x45\x19\x84" +"\x1B\x25\xC5\xA5\xB6\xB0\xDA\x8A" +"\x61\xC0\xDD\x9D\x9E\x33\x36\x8B" +"\xD0\x1D\x26\x4A\x84\x7D\x25\xAB" +"\x38\xE1\xB3\xA3\x7E\x6E\x68\xBC" +"\xF0\x14\xEA\x48\x66\x7C\x7A\xC5" +"\x4A\x80\xC3\x52\x75\x25\x55\xC6" +"\xA8\x11\x65\x72\x22\xB1\xE2\xC6" +"\x5B\x86\xC3\xD0\x85\xEC\x3C\xC7" +"\x6D\xB4\xA6\x52\xA8\x61\x6F\xD4" +"\xBA\x6B\x51\x41\x9D\x3F\x61\xDD" +"\xBC\x9A\x2F\x02\x17\x1D\x60\xE3" +"\xD5\x9F\x2F\x02\x17\x20\x60\xE3" +"\xD6\xF4\x96\x82\x5A\x33\x53\xE4" +"\xF8\x04\x15\xD4\xC9\xFB\x06\xEF" +"\x08\xBE\x97\xD0\xCE\x9F\x86\xEF" +"\xD2\x2A\x2C\xD4\xC0\xE3\x8F\x04" +"\x9C\x5A\x5A\x2B\x2E\x83\x81\x07" +"\xBE\xAF\xDF\x78\x53\xEE\xF3\x0A" +"\x59\x15\xEE\x78\x53\xE6\x04\x0B" +"\x21\x79\x53\x2D\x57\xF8\xA2\x0F" +"\xC5\x14\xA6\xB1\xDD\x2C\x9E\x14" +"\xDF\xB6\xE9\xB4\x5F\x01\x03\x18" +"\xD4\xA7\x24\xDC\xB5\x93\x20\x23" +"\x2F\x1E\x65\x78\x2A\x0D\xBB\x25" +"\x05\x71\xAD\xD6\x4D\x29\x34\x27" +"\xE9\xA6\xF3\x43\x2E\x4E\xE5\x32" +"\x5B\xF3\x30\x40\xAF\x59\xA6\x33" +"\x63\x3C\x80\x71\x6E\x73\x41\x35" +"\xD7\x43\xD2\x31\x54\x04\x5C\x37" +"\xCD\x94\x9E\xD8\x4D\xEE\x9B\x37" +"\xD8\xC3\xA0\xD8\x4D\xEA\x9E\x37" +"\x05\x4F\xD4\xDD\x4D\x09\xA1\x40" +"\x6E\xFF\xC4\x80\x5A\x9C\xDB\x40" +"\xEE\x6C\x42\x8C\xBD\xAA\x8A\x41" +"\x02\x5C\xF8\x62\x36\x6C\xA5\x49" +"\x5E\xF4\xDD\x10\x6D\x32\x70\x4B" +"\x68\xE4\xFF\xE6\x4D\x63\x32\x51" +"\x17\x25\x1C\x16\x6D\x61\x7F\x54" +"\x4A\x98\x2A\x16\x6D\x61\x90\x54" +"\xC1\xC0\x21\xE7\x7F\x37\xA9\x55" +"\x03\xB2\x52\x1B\x6D\xF8\x84\x5D" +"\xB7\xA0\xFC\x8F\x51\x9D\xD3\x63" +"\x96\x0E\xF0\xF9\xA3\xAE\xBE\x64" +"\xFD\x78\x3F\xAE\xC5\xEB\x15\x67" +"\x4C\x4B\xC0\x15\xE7\xD9\x99\x69" +"\xC1\xDE\xDD\xA9\x36\x05\xA0\x71" +"\xA6\xC9\xCF\x0F\x9F\x65\x93\x72" +"\xDB\x12\xD9\x0F\x9F\xF5\x9D\x72" +"\x2C\x1F\xBA\x2D\x3F\x66\x7C\x77" +"\x7F\xF9\xB3\x13\x9F\x0C\x0B\x7A" +"\xF4\x3F\x58\x42\xF9\xE4\xB6\x7C" +"\xCD\x77\x9E\x31\x3F\x25\xF4\x7E" +"\x34\xE4\xAC\x31\x3F\x21\x05\x7F" +"\x39\x38\x74\xEF\x64\x12\x88\x7F" +"\x45\xB7\x7F\xEF\x64\xA2\x95\x7F" +"\xA8\x36\x10\x3D\x0E\x97\x11\x88" +"\xC9\x76\x18\x3D\x0E\x8B\x1B\x88" +"\xC1\x91\xD8\xF4\x64\xCD\xC3\x88" +"\xF4\x48\x86\x00\x9B\xF0\x91\x8B" +"\x21\x08\x9A\x00\x9B\x74\xA9\x8B" +"\xA8\xC6\x9A\x63\xE2\x4F\x6A\x8C" +"\xDA\xD0\x9A\x63\xE2\x55\x6A\x8C" +"\x8D\xD2\x9A\x63\xE2\x56\x6A\x8C" +"\xD7\x17\xA2\xF8\x64\x78\x1C\x90" +"\x38\xC0\x00\x42\x0E\x32\xC5\x90" +"\x44\x3F\x0C\x42\x0E\xC2\xD2\x90" +"\x1D\x28\x85\xBA\xC2\x69\x83\x96" +"\xC7\x5C\xDF\x40\x53\x3E\xB1\x96" +"\xFE\x89\x27\xA5\xA7\xFF\xE7\x98" +"\xFD\x03\x36\xA5\xA7\x03\xF9\x98" +"\x7C\xBD\x12\x6C\xE2\x9A\x28\x9C" +"\xEB\x23\xF6\x07\x95\x92\xA1\xA3" +"\xA3\x6E\x8F\x49\xB8\x02\x84\xA7" +"\xC0\x49\xC5\xC4\xC2\xA3\x5A\xA8" +"\x19\x74\x2E\x4A\x3F\x5C\x4D\xAA" +"\xC1\x45\xC8\x52\xDE\x96\xEE\xAB" +"\xCA\x56\x66\x31\x9F\x16\x52\xAE" +"\xF0\xC2\x72\xC8\xC2\xCE\x91\xAF" +"\x71\x39\x7B\xC8\xC2\xE2\x9B\xAF" +"\xB4\x15\x3D\xD5\x40\x46\xE4\xB3" +"\x6C\x9A\xE9\x43\x7F\xEB\x97\xB4" +"\x8E\xB9\x60\x6E\xA0\xDB\xE1\xBF" +"\x43\x60\x86\x57\xB8\xFF\x9C\xC0" +"\xBB\x9C\x72\xE4\x55\x1D\x92\xC1" +"\xF1\xBB\x7A\x57\x7F\x9B\x2C\xD7" +"\xB9\xE6\x82\x5C\x7F\xB6\xFB\xDF" +"\xDC\xB2\xD1\x14\x57\x9D\x5A\xE4" +"\xD9\x83\xCF\x61\x7F\xE1\x1B\xE9" +"\x70\xAB\x9A\xBC\x99\xFA\x24\xEB" +"\x4C\x6E\x89\xA3\x8B\x22\x6A\xED" +"\x39\xAE\xDD\xDA\xA5\xB9\x98\xEE" +"\x10\x22\xE8\xC1\x99\xA5\x45\xF4" +"\xA1\x22\xE0\xB0\x7E\x29\x41\x00" +"\xFF\x8D\xE0\x32\xCA\x62\x1F\x01" +"\x70\xF2\xEC\x32\xCA\x79\x2D\x01" +"\xCA\x70\x14\x33\xCA\x81\x5C\x01" +"\xC6\x1C\xF6\x75\xDE\xB4\x55\x02" +"\xC4\x44\x3E\xA4\x5C\xD5\x0A\x03" +"\xC9\x2C\x6F\x4D\xAE\x77\x2A\x03" +"\x72\x8B\xC7\xC5\x63\xC1\x27\x04" +"\x0A\xD7\xAA\xCF\x24\x1A\x01\x05" +"\x90\x45\xF5\x99\x55\xA9\x25\x08" +"\x67\xAD\x01\x9A\x55\xC2\x33\x08" +"\x65\xB8\x34\x9A\x55\x62\x70\x08" +"\x49\x3F\xBD\xE1\xAF\x17\x8F\x0B" +"\x40\xE5\xCD\xF0\x36\xEE\xB8\x0C" +"\x8B\xF4\xCD\xF0\x36\xF7\xB8\x0C" +"\x7F\x94\x2B\x1C\xEB\x87\xBA\x0C" +"\x3C\xF7\x62\xD0\xD5\x6C\xFA\x0D" +"\x56\x8F\xFB\xBB\x8C\x05\xE6\x10" +"\x03\xF2\x92\x5C\x46\x9F\x2E\x11" +"\x74\xA3\x9D\x5C\x46\xB6\x3B\x11" +"\x61\x33\xC6\x5C\x46\x5F\x6B\x11" +"\xA2\xE4\xE2\x9C\xAB\xB6\x97\x11" +"\xED\xF3\xE2\x9C\xAB\xBF\x97\x11" +"\x3F\x29\x08\x84\xC5\x84\x4A\x12" +"\xA9\x90\xD1\x7F\xDE\x35\xB6\x13" +"\x5F\xC3\xE0\xAD\x5D\x8B\x0D\x14" +"\xD0\x27\xED\xAD\x5D\xA2\x1B\x14" +"\x2A\xA6\x14\xAE\x5D\xAA\x4A\x14" +"\x82\xA8\x58\x77\xBD\xD8\xA8\x14" +"\xCC\xB9\xCD\x11\x71\xA4\xE5\x15" +"\x3C\xDA\x98\xD5\xD5\x9F\xFF\x16" +"\x5C\x34\xD2\xCA\xFA\xAB\x3C\x1C" +"\x93\x46\x4D\xD1\xBF\x90\x39\x1D" +"\x78\x52\x4D\xD1\xBF\x97\x39\x1D" +"\xC8\xD9\x57\x3A\x70\x63\x4C\x1D" +"\xD7\xCA\xF6\x09\x42\x3B\xA3\x20" +"\xFC\x11\x1A\x3D\x8B\xDA\xCA\x22" +"\xC0\xA0\x41\xF8\x8F\xE8\x74\x23" +"\xDC\x82\x96\xCE\xFA\xDE\x8E\x23" +"\x7D\xB3\xB5\xCE\xFA\xEA\xB3\x23" +"\x37\xB0\xD4\xC5\x7E\x05\x78\x24" +"\xBE\x3C\xFD\xC5\x7E\xAC\xA7\x24" +"\x95\xF1\x07\xC6\x7E\xC5\xB4\x24" +"\xEE\x23\xC2\xE1\x24\xD6\xD8\x25" +"\xC5\xD8\xCC\xE1\x24\xEF\xE5\x25" +"\x6E\x95\xD0\xE1\x24\xD5\xE9\x25" +"\x34\x31\xF6\xE1\x24\x0E\x16\x26" +"\xB3\x0D\x44\x62\xAE\xFE\x3B\x27" +"\x91\x28\x78\x62\xAE\x3E\x79\x27" +"\x37\x82\x13\x17\xB0\xCC\x7D\x27" +"\x3D\xBE\x81\x62\xAE\xFB\x83\x27" +"\x02\x8D\x84\x62\xAE\x55\x87\x27" +"\x89\x0D\xD8\xC8\x9D\x53\xBD\x27" +"\xEF\xA2\x55\x46\x5F\xDA\x61\x28" +"\xDA\x6E\x21\x7B\xE8\x5B\x7A\x28" +"\xCF\x42\x33\xC9\xE3\xB3\x70\x29" +"\x6C\xE8\xD1\x88\x51\x41\x5A\x2A" +"\xAC\x7C\x90\x56\x08\xDD\x06\x2B" +"\xA0\x18\xA9\x03\xC1\x03\x47\x2B" +"\xE9\x1B\xC6\x03\xC1\x14\x69\x2B" +"\x5A\xCD\xD0\x03\xC1\x2B\x76\x2B" +"\xA2\xD2\xC0\x4E\x6B\x99\x00\x2F" +"\xC4\x16\x24\x87\x59\xEE\x49\x2F" +"\x77\x18\x24\x87\x59\xEF\x49\x2F" +"\x95\x89\x2A\x0B\x92\xE7\xF1\x2F" +"\x80\x45\x47\x0B\x92\xCE\x13\x30" +"\x57\xAD\x53\x0B\x92\xE7\x21\x30" +"\x09\xF6\x7E\xF1\xBA\x02\xCF\x31" +"\xFA\x5D\x4C\xCE\x7E\x25\x36\x34" +"\x1A\xFA\x15\xD4\x5A\xE5\x9C\x35" +"\x8F\x6C\x3D\xD4\x5A\xE6\xCB\x35" +"\x80\xF7\x48\xD4\x5A\x7D\xD9\x35" +"\xD3\x48\xBA\x51\xCA\x91\xC1\x36" +"\x64\x54\x81\x59\x2B\xEE\x84\x37" +"\x93\x71\xA6\x94\xDE\xBC\xC7\x37" +"\x58\x53\x4D\xDB\x71\xA8\xD2\x37" +"\xF1\x65\xDB\x94\xDE\x7C\x05\x38" +"\x1D\x22\xE4\x94\xDE\xB9\x0F\x38" +"\x62\x17\xE6\x94\xDE\x93\x12\x38" +"\x35\xB2\x1D\xED\x24\x62\xFD\x38" +"\x9E\x23\x1E\x22\xB0\x24\x43\x3A" +"\x64\x57\x51\x22\xB0\xDC\x7F\x3A" +"\x3B\xBF\x5D\x22\xB0\xF5\x8D\x3A" +"\xFC\xF4\x0D\xD3\xE3\xC2\xD0\x3A" +"\x40\xC2\x6E\xB7\x55\x3E\x29\x3C" +"\x30\x89\x2A\x27\xF1\xB0\x9C\x3C" +"\x07\xF1\x36\x27\xF1\xC9\xAA\x3C" +"\x85\xD5\x6A\x27\xF1\xE9\xE7\x3C" +"\x66\x22\x7A\xEB\x88\x47\xD6\x3E" +"\xF9\x35\x9E\x79\x24\x54\x89\x3F" +"\x0D\x6E\x29\x75\xD5\xCA\x81\x41" +"\x36\xCD\x80\x40\x1D\xD2\xB9\x42" +"\x0D\x82\x8B\x40\x1D\xEB\xC6\x42" +"\xB5\x74\xC9\x70\xAF\x9F\x33\x44" +"\xC9\x3E\xF6\xDA\x8C\xFD\xAF\x46" +"\x33\x10\x48\xCB\x5D\x3A\xFC\x47" +"\x32\xE1\x53\x96\x7D\x41\x54\x48" +"\x11\xA7\x2F\xDB\xE3\x4E\x29\x4A" +"\x6C\x9F\x21\x76\xAE\xD8\x29\x4A" +"\x05\x16\x30\x76\xAE\xDA\x3A\x4A" +"\x02\x17\xE2\xF6\x24\xB9\x42\x4A" +"\xB3\x27\x58\xDB\xE3\xEE\x58\x4A" +"\xE3\xC1\x60\xDB\xE3\x17\x63\x4A" +"\x24\x8C\x64\xDB\xE3\x05\x67\x4A" +"\x97\xD7\x40\x6D\xC6\xF5\x80\x4B" +"\x90\x9F\x43\x6D\xC6\x4B\x84\x4B" +"\x51\x01\x96\x8A\xAE\x9E\x86\x4B" +"\x67\x07\x50\x6D\xC6\x64\x92\x4B" +"\x65\x12\x83\x6D\xC6\x04\xCF\x4B" +"\xBA\x6C\xD1\x93\xFC\x6C\xC3\x4D" +"\xBE\x1C\xCC\x18\xC1\x67\xB4\x4F" +"\xB4\xD1\x03\xF4\x01\x18\xE2\x50" +"\xD0\x35\x51\x0C\xAA\xE3\x15\x54" +"\xFD\x81\xDB\x4B\x1D\xDE\xDD\x55" +"\x4C\x95\x11\xA7\xDE\x16\x02\x59" +"\xE5\x0B\x20\xA7\xDE\x18\x13\x59" +"\xE7\xB6\x2D\x6D\x2B\xF3\x38\x5A" +"\xD8\x41\x39\x6D\x2B\x8A\x46\x5A" +"\x32\xC0\x60\x6D\x2B\x92\x75\x5A" +"\x1A\x02\xBB\x0A\xBC\x56\x91\x5A" +"\xDC\xFD\xB7\x4A\x9B\x1B\x9F\x5B" +"\x36\x2F\xE1\x4A\x9B\x23\xCF\x5B" +"\x0D\xE4\xEB\x4A\x9B\x3C\xDC\x5B" +"\x0F\x88\x0B\x70\x4F\x24\x2E\x5C" +"\x08\x5F\x8E\xE7\x9D\x47\x36\x5D" +"\xD8\x44\x09\x36\xB0\x78\x41\x5D" +"\xF1\x2B\xAB\xE7\x9D\x38\x58\x5D" +"\x62\xDD\xB5\xE7\x9D\x4F\x65\x5D" +"\xB9\x8F\x61\x20\xCB\x2A\xC2\x5D" +"\x9E\x9B\x61\x20\xCB\x31\xC2\x5D" +"\x2F\x1C\x2B\x15\xF5\xBE\x19\x5F" +"\xB1\x73\xFD\xEC\x96\x40\x1F\x5F" +"\x07\x47\x50\x40\xBB\x49\x23\x60" +"\x9A\x8F\x76\x19\x89\x7E\xD1\x61" +"\x0F\xE1\x81\x94\x57\xED\xD2\x61" +"\xEA\x4E\x99\x9C\x25\xB0\xFF\x61" +"\x9B\xC0\x9B\xCA\xB9\x49\x27\x62" +"\xA2\xAD\xB7\xFD\x4D\x9B\x65\x62" +"\xED\xBC\xB7\xFD\x4D\xA4\x65\x62" +"\x30\x7D\x31\x2A\x92\xE3\xC9\x65" +"\x22\xD6\xEC\x3E\x07\x91\xFB\x67" +"\x11\x89\x59\x14\xC0\x0A\xF9\x68" +"\xAC\xEF\xB4\x6D\xCA\x8D\x03\x69" +"\xE3\x4D\x16\xF3\x5A\x95\x6D\x6B" +"\x2B\x30\x6F\x7F\xC6\xD9\x73\x6C" +"\xF4\x29\x89\xB1\x77\x5E\x13\x6D" +"\xF4\xB7\xFA\x53\x67\x0B\x8A\x6D" +"\x9D\xD9\x6C\x99\x1A\x61\xC0\x6D" +"\xEE\x86\x41\x9E\xAE\x21\x3A\x6E" +"\xC5\x3B\x4C\x9E\xAE\x3A\x47\x6E" +"\xA3\xEF\x58\xD3\x55\x56\x57\x6E" +"\xE7\x95\x75\x9E\xAE\x5A\x77\x6E" +"\xE0\x97\x31\x43\xF1\xC5\xEC\x6E" +"\xFD\xE3\x3B\x56\x9B\x2F\xF3\x6E" +"\xB4\xC2\x76\x41\x80\x86\xEB\x6F" +"\xCB\xAB\x4A\x3F\x28\x08\x17\x71" +"\x59\xF0\x04\x09\x89\x3F\xEE\x72" +"\xC1\x14\x10\x78\x9E\x0D\xB8\x73" +"\xC9\x42\x19\xB1\xA6\xB7\x59\x74" +"\x1E\x43\x80\x92\xD5\x96\x5C\x75" +"\xDC\x00\x03\x3B\x42\x23\x3E\x77" +"\x7E\x14\x46\x15\x52\xE0\xB3\x77" +"\xB6\xA9\xE0\x08\xB2\x54\xA8\x78" +"\xF8\x83\xB7\x2E\x45\xC1\xC2\x78" +"\x48\x67\xC9\xF6\x8C\xF1\xC2\x78" +"\x31\x34\xE6\xF6\x8C\xE2\xE4\x78" +"\xA2\x98\xF2\xF6\x8C\xF9\xF2\x78" +"\x91\x3B\x43\x98\xEA\x25\x19\x79" +"\x23\x52\xB2\xD0\x3C\x03\xE8\x7A" +"\xA7\x17\x27\xD8\x4F\x95\x15\x7B" +"\x0C\x93\x27\xEA\x5D\x36\xA5\x7D" +"\x81\x82\x1C\x8C\xBA\x06\xD8\x7D" +"\x72\x0D\x28\x8C\xBA\x9D\xE5\x7D" +"\x23\x03\x45\x8C\xBA\xA6\x07\x7E" +"\x40\x1C\xBD\x8A\xC6\xE0\x87\x7F" +"\x6A\x9F\xC9\x26\x3E\x03\x08\x80" +"\xAB\x13\x28\x5F\x67\x37\x78\x80" +"\x1C\x78\x34\x5F\x67\x4E\x86\x80" +"\x09\x08\x5D\x5F\x67\xF7\xB5\x80" +"\x2A\xD1\x73\xA9\xAE\x9A\x2E\x81" +"\xC4\x74\x64\x2B\x89\x12\x79\x82" +"\xFE\x02\x8D\x2B\x89\xBA\xA8\x82" +"\xD5\x6A\x99\x2B\x89\xD3\xB6\x82" +"\xB8\xB1\xD5\xDC\xB9\xCC\x27\x83" +"\xED\x5A\x15\xDD\xB9\xA5\x72\x83" +"\x4E\x67\x1B\x02\x97\x43\x86\x83" +"\xA5\xF5\x26\x02\x97\xDC\x93\x83" +"\xA4\xE9\x19\x37\x7B\xD7\xAD\x83" +"\xC7\x9C\x4E\x02\x97\xFC\xC2\x83" +"\x0D\xFB\x91\xCB\x0D\xBA\x67\x84" +"\xCC\x07\x2F\xA9\xFE\x04\x06\x85" +"\xCE\xC4\x93\xB1\x25\x6C\x3D\x86" +"\x25\x53\x9F\xB1\x25\x05\x4B\x86" +"\x94\xF8\xC6\xB1\x25\x24\x7A\x86" +"\x00\xB1\xBF\xEE\xB6\x9C\xAF\x87" +"\xF1\x20\x97\x44\x42\x2F\x4A\x88" +"\x13\xC8\xBE\x44\x42\x4F\x79\x88" +"\x84\x2C\xCB\x44\x42\x66\x87\x88" +"\x24\xCD\x91\xE0\x4F\x94\xC3\x8A" +"\xE0\x07\x2D\x52\x51\x22\x2E\x8B" +"\x2B\x17\x2D\x52\x51\x2B\x2E\x8B" +"\xCC\xD9\x6F\x94\x3B\x4B\x3F\x8B" +"\x17\xE9\x6F\x94\x3B\x54\x3F\x8B" +"\x24\xDE\x2E\x55\xA8\xA5\x88\x8B" +"\x3A\x07\xDB\xB1\xFB\x6F\xA8\x8B" +"\x4C\xE1\xBA\x39\x94\xA6\x82\x8D" +"\xBB\x03\x95\x8A\x2B\xA2\x27\x8E" +"\x6D\x7F\xA3\x8A\x2B\xA7\x38\x8E" +"\x0A\x6A\xE4\x54\x65\x47\x5B\x8F" +"\x73\x3C\x7C\xC5\x6A\xDA\x3D\x90" +"\x37\xB7\xB0\x53\x80\x0B\xEC\x90" +"\xA8\x68\xBB\x53\x80\x22\xF9\x90" +"\x75\x99\xA5\x57\xCB\x01\x24\x91" +"\x30\xC8\xB3\xE7\x6C\x1D\x2B\x91" +"\x07\x30\xC0\xE7\x6C\x36\x39\x91" +"\x60\x55\xC2\x57\xCB\xE8\x45\x91" +"\x02\xD5\x7E\xC6\x77\xE2\x4A\x91" +"\x37\xBD\xCE\x57\xCB\x01\x54\x91" +"\x85\x14\xF4\xE7\x6C\x56\x76\x91" +"\x77\x47\xA6\xC6\x77\xE3\x79\x91" +"\xE8\xAB\xB2\xC6\x77\xFA\x87\x91" +"\x72\xB6\x9B\x00\x15\xBD\xB7\x91" +"\x1A\xD6\xEE\x8D\x01\xD0\x02\x92" +"\xC5\xFC\x76\x35\x89\x46\x1A\x94" +"\x8A\xF6\xDC\x0B\x97\x3C\xC8\x94" +"\x54\x33\x62\x71\x9C\xCE\x58\x95" +"\xEF\xD3\xA4\x08\xE7\x35\x72\x97" +"\xCE\xC9\xEE\xA8\xCE\x06\x93\x97" +"\x15\xE5\x7C\xBB\x25\x78\xAE\x97" +"\xD7\x7B\x05\x8D\x9E\x69\xEF\x97" +"\x93\xAA\x1B\x46\x92\xFB\xF7\x97" +"\xDE\x2E\x2D\x8D\x9E\x90\x1E\x98" +"\x54\x1E\xA6\x5B\x71\x2C\x1F\x98" +"\xB5\x96\x39\x8D\x9E\xA9\x2C\x98" +"\x4A\x91\x51\xEE\xEE\x03\x08\x9B" +"\x98\xA7\x74\x3E\x83\x15\x60\x9B" +"\xB9\x13\x25\xEA\x4F\x20\xCF\x9B" +"\xDB\xBA\x4C\xEA\x4F\x40\xFE\x9B" +"\xBB\x49\x56\xEA\x4F\xF9\x08\x9C" +"\xCC\x45\x58\xEA\x4F\xD7\x0B\x9C" +"\x33\x60\xDA\xB8\x63\xB6\x90\x9C" +"\xF0\x19\x94\x49\x28\x3A\x4E\x9D" +"\xA2\x19\xD0\x01\x61\x8C\x8D\x9D" +"\xBC\xA7\x12\x0F\x5B\x91\xB0\x9D" +"\x75\x28\x61\x9E\xBA\xA2\xE5\x9E" +"\xA0\xEF\x4A\x98\xCA\xA7\x1E\x9F" +"\xEB\xFE\x4A\x98\xCA\xB0\x1E\x9F" +"\xCB\x9D\xC6\x4A\xBC\xAE\x54\x9F" +"\x34\x45\x44\xFE\x2F\x32\x06\xA0" +"\xF4\x86\x42\xF3\x8A\xD2\x91\xA0" +"\x9F\x6C\x6E\x71\x67\xD3\x86\xA1" +"\x36\x1F\x78\xA5\xAF\x6A\xF8\xA1" +"\x0D\xD4\x82\xA5\xAF\x83\x05\xA2" +"\x87\x2A\xF5\x9B\x94\xD0\x0F\xA2" +"\xAF\x54\xAB\xA5\xAF\x23\x35\xA2" +"\x5C\x2D\x17\x00\x03\x20\x2A\xA3" +"\x20\xEB\x11\x5B\xAA\xDC\x9C\xA3" +"\x43\xEE\xFE\x61\xF1\xDD\x80\xA4" +"\x41\x0C\xF4\x24\x89\xA4\x22\xA5" +"\x32\x97\xFF\x24\x89\x3B\x30\xA5" +"\x18\x6E\x33\x25\x89\x53\x6D\xA5" +"\x8B\xFA\x1D\x7B\x9C\xFA\x93\xA6" +"\xFC\xAB\x28\x7B\x9C\x11\xA1\xA6" +"\x6A\xB7\x95\xCD\x7D\x65\x20\xA9" +"\xC7\x41\xC9\x21\x46\x8B\x57\xA9" +"\x9A\x97\xEF\x96\x9E\x09\x61\xA9" +"\x79\xBC\x16\xDA\x37\xD1\x8D\xA9" +"\x49\xD9\x63\xB1\xD5\x5E\x0B\xAB" +"\xBA\x3D\x70\xB1\xD5\x75\x19\xAB" +"\x0B\xFD\x8C\xB1\xD5\x5E\x3B\xAB" +"\x48\xC3\x8C\x62\xE6\xDD\x05\xAC" +"\x5F\xAD\xBD\x3E\xAA\x67\x4F\xAC" +"\x64\xEC\xC8\xC3\xFB\x03\x50\xAC" +"\x02\x6B\xE9\x7C\x1D\xC6\x79\xAC" +"\x1E\x54\xF2\xC3\xFB\x2B\x80\xAC" +"\xF5\x08\xFD\xC3\xFB\x44\x8D\xAC" +"\xE6\x21\xCB\xB6\x2D\x6F\x45\xAD" +"\x31\x31\xCB\xB6\x2D\x78\x45\xAD" +"\x3F\xA3\xD8\x1E\xC9\x06\xD3\xAD" +"\x29\x59\xDB\x27\xB2\x4C\x72\xAE" +"\x8B\xF0\xD9\xE7\xEA\xDB\x62\xAF" +"\xEB\x77\x8E\x06\x30\x5E\x8E\xAF" +"\x5C\x29\x99\x06\x30\x75\x9B\xAF" +"\x1F\xC6\x6B\xD8\x70\xF9\xB4\xAF" +"\xFC\xC8\x6D\xD8\x70\xDB\xB7\xAF" +"\x90\x77\x76\xD8\x70\x10\xC2\xAF" +"\x49\xB9\xC1\x06\x30\x1E\xCB\xAF" +"\xEA\xA8\x9F\xD8\x70\x18\xF2\xAF" +"\xEE\xB6\xFB\x66\x65\x03\x33\xB0" +"\xC5\x6B\x06\x67\x65\x1C\x40\xB0" +"\x6E\x28\x0A\x67\x65\x02\x44\xB0" +"\x34\xC4\x2F\x67\x65\x3B\x70\xB0" +"\xA3\x49\xA7\xA6\xC6\xF8\xB5\xB1" +"\x0E\xDF\x1F\x17\x89\xFD\x26\xB2" +"\x44\xBB\xDC\x9F\x01\x64\xAA\xB2" +"\x7E\x49\x05\xA0\x01\x0C\xDA\xB2" +"\x70\x89\xCB\x72\x7A\xA8\xE5\xB2" +"\x55\xB1\x11\xA0\x01\x25\xE8\xB2" +"\xFE\xBA\x13\xA0\x01\x0B\xEB\xB2" +"\xD8\xA1\x7A\x77\xAB\xFE\x30\xB3" +"\xF2\x42\xAB\xB0\xAF\x63\xED\xB4" +"\xCC\x98\x1A\x17\xF7\x7B\x4D\xB9" +"\x22\x77\xFC\xBE\x2B\x93\xC8\xB9" +"\x6D\x86\xFC\xBE\x2B\x9C\xC8\xB9" +"\xB6\x5A\xFF\x79\x50\x7B\x59\xBA" +"\x0C\xA1\x8B\x48\xAA\x77\x9F\xBD" +"\xE3\x55\x96\x48\xAA\x90\xAC\xBD" +"\x66\x1F\xB3\x48\xAA\x7F\xCE\xBD" +"\x65\x74\xDB\xCD\xFB\x37\xF1\xBD" +"\x98\xFD\x21\x62\x54\x12\x97\xBE" +"\xCF\x3C\x76\xFF\x4F\xDC\x72\xC0" +"\x47\xAB\x31\x15\xA7\xCB\x45\xC1" +"\x03\xCC\xE6\x10\xA5\xF0\x50\xC2" +"\x35\x45\x57\x72\x65\x8F\x57\xC3" +"\xE0\xD6\xBA\x03\x6D\x32\x7B\xC3" +"\x1D\x9F\xC7\x5F\xBC\xAA\x99\xC3" +"\xCB\xFF\x9B\xE2\x77\x92\xB5\xC3" +"\x68\x91\xE4\x5F\xBC\xB1\xBB\xC3" +"\xBF\x1F\xF0\x5F\xBC\x4A\xC9\xC3" +"\x45\x43\xEF\xA9\x01\x98\x4B\xC4" +"\x02\x32\x38\x08\x8B\x56\xC9\xC4" +"\x77\xA4\x5F\x08\x8B\x57\xF8\xC4" +"\xE8\x08\x6C\x08\x8B\x6E\x06\xC5" +"\x02\xCD\x49\x87\x9B\x17\x8F\xC5" +"\xC3\x1D\xAB\xB8\xBF\x92\x33\xC6" +"\x8B\x98\x89\x72\x80\xBA\x8D\xC6" +"\x10\x8D\xAC\x76\xCB\xFD\xFB\xC6" +"\x7F\xA0\x62\x8D\x9C\x96\xA1\xC7" +"\xF9\x89\xA8\x2C\xAE\x7A\x60\xC8" +"\x4A\x71\x16\xDD\xBD\xF4\x0B\xC9" +"\x02\xB8\x93\x75\xFA\xFB\x31\xC9" +"\x7A\x36\x68\x21\xA0\xFD\x9B\xCE" +"\x90\x21\x9C\xEA\x70\xBF\xAA\xD0" +"\xEF\x5F\x3B\x0A\xBA\x05\x93\xD2" +"\x74\xC5\xFE\x1E\xA7\x5B\x95\xD2" +"\xCB\x53\x0A\x1F\xA7\xF4\xA2\xD2" +"\xAE\x53\x27\x1F\xA7\x03\xC5\xD2" +"\xDF\x46\xB6\x1B\x30\xFA\x01\xD4" +"\x02\xAA\x1B\x7C\x65\xE6\x9C\xD4" +"\x64\xCC\xEC\x13\xEF\x54\xC0\xD4" +"\x17\xCE\xEC\x13\xEF\x55\xC0\xD4" +"\xD9\x32\x9A\x5D\xDE\xB8\x39\xD7" +"\x92\x3C\x25\xB5\x01\xEF\x43\xD7" +"\x54\x27\x2B\x00\xEB\xBF\x71\xDA" +"\x77\xCC\xB6\x1F\x62\xDA\x80\xDB" +"\x8F\x6D\xBB\x1F\xB7\xA0\x36\xDE" +"\x66\x6C\xCE\x5C\x7D\x4D\xFA\xE1" +"\x3D\xD4\xDA\x5C\x7D\x66\x08\xE2" +"\x4C\x43\x02\x5D\x7D\x65\x37\xE2" +"\x28\x16\x20\x45\xB2\x40\x38\xE2" +"\xFE\x33\x95\x83\xFA\xF8\x57\xE2" +"\x11\xE3\x3C\x45\xB2\x31\x5A\xE2" +"\x82\x47\x49\x45\xB2\x48\x68\xE2" +"\x2C\x7C\x12\xF9\x2F\x68\x2E\xE3" +"\xF3\x12\xD3\xF5\x70\xA8\xA3\xE3" +"\x77\xE5\x00\xA2\xE3\x5A\x35\xE4" +"\x02\xAD\x27\x3D\x28\xF5\xED\xE4" +"\xC3\x36\xBD\xB4\x98\xE7\x4F\xE6" +"\x6C\xF2\xB2\x5A\xBD\x3F\xFA\xE8" +"\x34\x54\x8D\xB7\xCA\x15\x3D\xEB" +"\x8B\xEE\xE6\x09\xEB\xEB\xAC\xEB" +"\xFC\x9F\xF1\x09\xEB\x02\xBA\xEB" +"\x69\x09\x1B\x0A\xEB\x2B\xEA\xEB" +"\x2E\xE7\x10\xF2\xBD\xB0\x49\xED" +"\x05\x4F\x1D\xF2\xBD\xC9\x57\xED" +"\x74\xF4\x44\xF2\xBD\xE8\x86\xED" +"\xF2\x81\xFB\xE8\xC2\xAC\xCB\xED" +"\x3D\x91\xFB\xE8\xC2\xB5\xCB\xED" +"\x3C\x61\x89\x29\xB7\xB0\x86\xEF" +"\x13\x16\x94\x29\xB7\xC9\x93\xEF" +"\xAD\xD1\x46\x65\x7D\xD9\xB8\xF1" +"\x66\x4D\x05\x45\xAE\xF6\x7C\xF3" +"\x9A\x12\x0C\x45\xAE\x58\x84\xF3" +"\x92\xE0\xAA\x27\x26\x83\x7D\xF4" +"\x16\xD4\xBE\xAC\x9D\x5B\x58\xF5" +"\x98\xC6\xEA\x7B\xBC\x46\x0B\xF6" +"\x68\x47\x28\x34\xA7\xF7\x09\xF7" +"\x43\x2D\x88\x22\x6D\x4A\x0F\xF9" +"\x81\x26\xD6\xE7\xC0\x2F\x34\xF9" +"\x73\x28\x09\x94\xCB\x95\xDD\xFA" +"\x75\x4C\x89\xFA\xBD\x3C\x08\xFD" +"\x57\x5B\x9F\x04\xF1\x99\xBD\xFF" +"\x4C\x51\xD6\x52\x46\xF3\xF2\xFF" +"\x96\xD3\xBA\x14\x87\xE0\x30\x01" +"\xF6\x7A\xCA\x81\x14\x0F\x4C\x01" +"\xCC\x2A\xDB\x81\x14\x13\x60\x01" +"\x21\x9D\x08\x43\x8F\x47\x10\x02" +"\x98\xD6\xDD\x32\x07\xDD\x23\x09" +"\xCF\x32\xBB\x48\x82\xB0\x26\x09" +"\xAA\x09\xE4\x32\x07\xE9\x2A\x09" +"\x44\xC0\x73\x35\xEB\xCA\x14\x0C" +"\x6F\xDB\xD9\xBE\xD1\x22\x4D\x0D" +"\x4C\xE3\x98\xE4\x12\x42\x9E\x10" +"\xB2\xE6\x98\xE4\x12\x44\x9E\x10" +"\x65\xE8\x98\xE4\x12\x45\x9E\x10" +"\xD3\x85\x9D\x9C\xE2\x21\x13\x1A" +"\x4A\xC7\x52\xD5\xE5\x13\x82\x1C" +"\x1F\xA0\x95\xD5\xE5\x7F\xD0\x1C" +"\x07\x4F\x8A\x13\xB7\x29\xD6\x21" +"\xBA\x50\x8A\x13\xB7\x2A\xD6\x21" +"\x58\x4C\xEF\x7F\xF9\xA8\xC1\x23" +"\x0B\x4E\xEF\x7F\xF9\xA9\xC1\x23" +"\xBE\x4F\xEF\x7F\xF9\xAA\xC1\x23" +"\x04\x4F\x32\x36\x0E\x55\xC0\x26" +"\x7A\x93\xEF\xBA\x16\xC5\xD5\x2E" +"\x99\x27\x35\x03\xD2\xAF\xD5\x37" +"\x22\x98\xEB\x91\xFF\x79\x06\x39" +"\x7B\x53\xAB\xEA\x30\xDD\x1C\x39" +"\xD1\xDC\xBC\xEA\x30\x61\x31\x39" +"\xB4\x08\x89\x2F\xC0\x8C\xE6\x48" +"\xFF\x43\x38\x9C\x75\x29\xCC\x4C" +"\xB2\x45\x38\x9C\x75\x2A\xCC\x4C" +"\xE8\x14\x05\x57\xE1\x46\x84\x52" +"\xC0\xC0\x6C\x25\xC7\xB7\x5B\x5A" +"\xEC\x61\x81\x25\xC7\xC0\x73\x5A" +"\x05\x67\x81\x25\xC7\xC3\x73\x5A" +"\x86\xD4\x15\x8E\xBB\xCD\x9B\x60" +"\x3B\x0A\x58\x8E\xBB\xD9\xE9\x60" +"\x9B\x99\xA8\x97\xC2\xC3\xDA\x63" +"\x1A\xA2\xA8\x97\xC2\xC8\xDA\x63" +"\x9D\xD9\xD0\xD3\xE3\xD2\xC0\x65" +"\x4F\xD6\xD6\xD3\xE3\xBE\xC7\x65" +"\x46\xEE\xF6\x5C\x19\x0B\x19\x66" +"\xC3\xA5\x30\x94\xEF\xEE\x20\x6B" +"\x99\x55\x41\x94\xEF\xF2\x34\x6B" +"\x12\xE4\xE0\xC0\xF7\x07\xBB\x6F" +"\xDC\xBF\x95\x79\x1B\xD0\x6D\x70" +"\x8F\xC1\x95\x79\x1B\xD1\x6D\x70" +"\xA8\xC6\x95\x79\x1B\xD4\x6D\x70" +"\x5B\xC8\x95\x79\x1B\xD5\x6D\x70" +"\x0E\xCA\x95\x79\x1B\xD6\x6D\x70" +"\xC1\xCB\x95\x79\x1B\xD7\x6D\x70" +"\x27\xCF\x95\x79\x1B\xD9\x6D\x70" +"\x8D\xD2\x95\x79\x1B\xDB\x6D\x70" +"\x5D\xF8\x93\x39\x36\xD4\x73\x72" +"\x01\x55\x22\x48\xC0\x57\x4A\x74" +"\x47\xB7\x0E\x88\x61\xC7\x5E\x79" +"\xB1\xF4\xCE\x4B\xC0\x02\x81\x7B" +"\x58\xC2\xB1\x45\x04\xB7\xDE\x91" +"\x18\xF2\x17\x57\xE8\x58\x12\x95" +"\x31\xF7\x17\x57\xE8\x5B\x12\x95" +"\xA0\xA7\x63\xDA\x70\x28\x9D\x9B" +"\x53\xA9\x63\xDA\x70\x29\x9D\x9B" +"\xB9\xAC\x63\xDA\x70\x2B\x9D\x9B" +"\xAC\x49\x58\x4F\x00\xAC\x8F\x9F" +"\xC5\x4E\x58\x4F\x00\xAF\x8F\x9F" +"\xAF\xE0\x8E\x99\xAF\xFE\x76\xA0" +"\x62\xE2\x8E\x99\xAF\xFF\x76\xA0" +"\x15\xE4\x8E\x99\xAF\x00\x77\xA0" +"\x96\x63\xEE\xC2\x44\x57\x63\xA3" +"\xEC\xEC\xFF\xC2\x44\xDB\x77\xA3" +"\x8F\x1F\x8E\xC6\x3A\xD7\x4C\xA4" +"\x9A\x18\xA8\xC6\x3A\x6B\x6B\xA4" +"\x51\xD1\x24\xA4\x0A\x19\x29\xAF" +"\x04\xD3\x24\xA4\x0A\x1A\x29\xAF" +"\xB7\xD4\x24\xA4\x0A\x1B\x29\xAF" +"\x6A\xD6\x24\xA4\x0A\x1C\x29\xAF" +"\x10\x7C\x16\x81\xEC\xE3\x7C\xAF" +"\xC3\x7D\x16\x81\xEC\xE4\x7C\xAF" +"\x76\x7F\x16\x81\xEC\xE5\x7C\xAF" +"\xA0\x9D\x34\xB7\x14\x4F\x14\xB0" +"\xB9\xA2\x34\xB7\x14\x52\x14\xB0" +"\xFF\x5E\x4E\xE7\x0D\x31\x2A\xB0" +"\x6F\xA4\x24\xBE\xA5\xFB\xD1\xB8" +"\x22\xA6\x24\xBE\xA5\xFC\xD1\xB8" +"\xD7\x1D\x08\x05\x28\xEE\xFC\xB9" +"\x8A\x1F\x08\x05\x28\xEF\xFC\xB9" +"\x3D\x21\x08\x05\x28\xF0\xFC\xB9" +"\xBF\xDD\x80\x41\xE5\x2B\x65\xBF" +"\xD6\x2C\x6B\x00\x8E\xA8\xB4\xC1" +"\xD2\xD7\xB3\xAF\x3C\x68\x67\xC2" +"\x50\x08\x8C\x39\x7A\x72\x93\xCE" +"\x03\x0A\x8C\x39\x7A\x73\x93\xCE" +"\x69\x0D\x8C\x39\x7A\x75\x93\xCE" +"\xF6\x82\x08\x80\x0A\x41\xAF\xCE" +"\x4E\xD9\x7C\x1F\xA5\x4A\x2D\xCF" +"\x24\x89\x8D\x1F\xA5\x4E\x41\xCF" +"\xF9\x6C\x2A\xB9\x61\x4D\x0B\xD0" +"\xF4\xCE\x72\xB9\x61\x61\x60\xD0" +"\xE9\xBC\xB0\x53\x60\x6E\x5F\xDF" +"\xF9\x4C\x76\xD8\x44\xB8\x77\xDF" +"\xF4\xAE\xBE\xD8\x44\xCC\xCC\xDF" +"\x84\x8A\xC6\xE0\xCE\xA9\x93\xE2" +"\xA1\xD3\xDD\x10\xC0\xED\xAE\xE8" +"\x4C\x96\xF7\x10\xC0\x61\xCD\xE8" +"\x65\x9B\xF7\x10\xC0\x64\xCD\xE8" +"\x61\x5A\x1E\x4D\xB3\xC5\x07\xF0" +"\xBC\x49\xB5\x0F\x72\xAE\x13\xF0" +"\x0C\x1D\x38\x4D\xB3\x39\x26\xF0" +"\xFB\xE3\x50\x34\xDE\x99\xA7\xF4" +"\xAE\xE5\x50\x34\xDE\x9A\xA7\xF4" +"\x61\xE7\x50\x34\xDE\x9B\xA7\xF4" +"\x7C\x66\xEB\xF2\xDC\x15\x44\xFF" +"\xB6\x8E\x65\xAD\x36\xE3\x5B\xFF" +"\x31\x9C\x2D\xF3\xDC\x21\x92\xFF" +"\x91\xC0\xC0\x0C\xA8\x70\xDD\x03" +"\x11\xE4\x6D\xE7\x99\xDC\x8E\x04" +"\x69\x1D\x5B\xC3\xCE\x8D\xE8\x06" +"\xF5\x98\x7A\xE2\x7B\x83\x71\x0A" +"\x31\x64\xF9\xC8\xA6\x23\xAA\x0B" +"\x99\xB2\xDA\xFA\x4A\x80\xC3\x0F" +"\x0B\x99\xF8\x2F\x44\x77\x4A\x12" +"\x36\x92\x2B\x87\xC6\x46\xDE\x13" +"\x13\xFD\x27\x1E\x6A\x30\x25\x20" +"\x79\x3E\xDF\x16\x7E\xBD\x35\x20" +"\x02\x3E\xA3\x1D\x07\x3A\x27\x23" +"\xCC\xDC\xA4\xF3\x3B\x7D\xCE\x24" +"\xE5\x4D\x60\x15\x33\xFD\x63\x28" +"\x1B\x5A\xE7\x8D\x01\x7C\x0C\x2D" +"\xAF\xDD\x3E\x7A\xEE\xB9\x99\x32" +"\x31\xB6\x4C\x8F\xDD\x20\x54\x36" +"\x49\x2F\x82\xAD\xE9\x91\x4D\x37" +"\xB7\x5A\x32\x10\x4B\x80\x24\x43" +"\x04\x10\x33\x6C\x5B\x84\x9F\x44" +"\xBA\xC1\xC3\xAD\x37\xEE\xC7\x45" +"\xF3\x86\xAB\x33\x6B\x46\xC5\x48" +"\x9B\x50\xCE\x89\x73\x8C\xDA\x49" +"\x12\x54\x1B\x07\x09\xAA\x02\x4C" +"\xD7\x3C\xAC\xAE\x2B\x0F\x60\x4D" +"\xDA\x17\xA4\x23\x5C\x4E\x61\x4D" +"\xF3\xF3\xF5\xEB\x5A\x2B\x4A\x50" +"\x2F\xDA\x62\x0A\x14\x2B\x71\x52" +"\xAE\x97\x2E\xBD\x60\xF7\xBB\x62" +"\x5F\xDE\xEA\x73\x3C\xCB\x8E\x64" +"\xC7\xD7\x0A\x36\x5B\x5A\x40\x66" +"\x93\x8D\x5B\x2C\x37\xCF\x8A\x66" +"\x06\xDA\x95\x27\x7D\x1B\x33\x68" +"\x9F\x13\x28\xD3\x92\xF6\xFD\x68" +"\xA7\xDB\xB8\xAB\xE3\x6B\xA6\x6C" +"\x6F\x4E\x52\x2A\x34\x84\x60\x73" +"\xEB\x8A\x4A\xE8\x8C\x70\x0E\x75" +"\xBA\xBE\xE6\x6E\xD5\xF6\x47\x76" +"\x92\x9E\x7F\xDA\x3F\x29\xB7\x7F" +"\x3F\x27\x4E\x07\x8A\xA0\xC9\x87" +"\xB8\x5D\xE8\xC7\xB0\x5D\xA9\x8D" +"\x1C\x0D\xC8\xB8\x28\xF7\x92\x93" +"\x95\x6F\xCE\x1C\xE0\xD4\xC3\x97" +"\xF5\x5F\x6F\xC1\xFA\x51\xA3\x98" +"\x20\x37\x29\xD0\x5B\x50\x75\xA3" +"\x2D\x63\xB5\x71\x0A\xC1\x10\xA8" +"\x4E\x6A\xD4\x92\x3F\x71\xDD\xA8" +"\xEB\x45\x33\xDF\xF4\x78\x78\xA9" +"\x21\x52\x8E\x40\x78\x4D\xCA\xA9" +"\xD0\x72\x55\x89\xCA\xAB\x60\xBD" +"\x7A\x55\x87\x90\xA3\x40\x10\xC5" +"\xB6\x5F\x84\x12\x63\x4B\xD9\xC6" +"\x7C\x73\x3C\xB3\x77\xEA\xBF\xC8" +"\x44\xA9\xC7\x11\xBC\xAE\x72\xD1" +"\x4E\x8E\x05\x11\x15\x5A\xC9\xD6" +"\x31\xFD\xE6\x93\x6B\xB6\x68\xE2" +"\x32\x87\xF4\xBF\xC9\x2D\x3B\xE4" +"\x29\xC8\xDF\xD9\xEB\xAE\x40\xEB" +"\xD3\xE6\xBD\xCF\xD8\x40\x09\xF1" +"\x81\x4D\x6D\x70\x56\xCB\x52\xF1" +"\xD9\xDF\x3F\xB9\xD4\x33\x68\xF1" +"\xD8\x0B\xFF\xE4\xBB\xFA\xA1\xF9" +"\x0B\x6C\x6A\x8A\x7C\xB4\x06\xFC" +"\x01\x00\x00\x00\x00" +"\x02\x00\x00\x00\x00\x00" +"\x04\x00\x00\x00\x00\x00\x00\x00" +"\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" +"\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_seed_corpus.zip b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_seed_corpus.zip new file mode 100644 index 0000000000000000000000000000000000000000..51bf4be9312954261d0e9564aa905726b9af375b GIT binary patch literal 5854 zcmb7{eQcH09mk*RZSm4J&Nxhqkj((fOWAtf&vP7%E=&<2Qmdk(g`QVkHrGyCtpu>> zUPxM%;S3thkTKctr5W2Yv5m8IY$CBE!XMk1iOXP9R-6N}30ZVIw`@1h)9tzU*qh$m zd;d7kC*Sk?eShCy%d&h`O;r4we&6QS@elubtB!nHe|>F<*PcQ zQ!m#3Wb3ED;r1|Wn z_Dw*%>#aGrB9HgQ@`zqIfGI=FDTlFQiW=>pC72luu`^T&fUV}05CI?f>ql?Ab>$C6 zqTKZ6r}5acYd;)2aeKp-{bXjx^Bt$>uDbBpp>2cc?v>Zv0w$pD?)o_c9`l;=s7@j+ zu$4q`g@HyqrW7*69OIaBNti*734$u2?mafdp1S+TukM<+W%NLARor{_n>+2mz1wb| zvUwEbW{egdd%CIH9(|#IpnU=;d2-$R#cQunmqH+JBml;F?X;0f$4&_h6q1BGNfZP^ z11>9pmg@5IEu)3~b<>;I51)DW+l%{lt{gsl=GlSePd)zTrF9b!AH8;Ip@{go@>*hp z2}6n!VHlFaaLNUZ1(VQW1O*haF;#8K+_*D8^J9252S3Qbk_o zD>9nd+?(G#^uX&Y51pg;PaUtxUuM_jvFd@V1NxjpgrL+EnV2{LnT`ST79?VCqH)Z) zbeKsgK4zcKfBwzEu@-lROq#Xl;6nA%8%_Th`1+}LGFHR3Pu6l`W}s@#k$lcWCF5i$3$ns$8ZI-MRYch9X~FflqSb zpy7&I=~T=tL+)~bKmyw z9+~UeM0q}qoFzn3!M#$*t7#328BknGi+$U8X75C>;#e&4ZLKQ|7iM^$%ng0D<(aLk zdH}{?Ye#bjvw}-MAB$8xwnq4bp@0|HRqX4Mg0025-5=#H zx_sl%o&Q|(_7%IAf{)hkZam^_S9N}Z`8?_h-Ax|w>hh2XLO%i}^CQnushGw9s@VAc zK#V&-)s51O8&RnYOXgFPpZAC8k8PrU_P<^iCuZxJ zgpgiJfQhqMNa?-NvstU1w2)|G2`BpF>8KX};>hp28t?ecgTJl&WWx=|vxZ^AwL`B4 z*mtZgM%2$jteuFdQ+{GQA276zF*HySYq__{xDsSKrhVnKd3eVwGrqhqzx9dMbK5r@ zeQd?aZ2O-4OwarfJq4p03rZ>C)K3nL%zM)woVNGv z<y7)@l!+y$S?*Z7P6f7?jI`0r74arE97iXSs~lj`%k$%OTwWm)m?tj*-V zhey%(H{FnZc=((gGlH8Bt(BcQ;F~`APgd%?2`~pRhbasIX?^{o!yfVhqEEVlYAIN zI+Z6OHdJRS5uVY*Akuj|2{C6LkR0G7!NLI}9S7oRbiDU6`pvc#aN( zNQdJjL`@+RB0MUGL8KFK65_dRi10id29ZvyI~ON_?m?HAR8h)%!Wav zGinlIn@=RC^POqAC8hzzg1A HSN!&GG&1 | tee "$SUMMARY_LOG" \ No newline at end of file From 9f90a549d52415e2b6f2120a0212dd4cf7f79488 Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Thu, 8 Apr 2021 17:15:03 -0700 Subject: [PATCH 04/12] Move dicitionary into seed data zip --- .../ubuntu-20.04_cryptofuzz/Dockerfile | 2 +- .../build_cryptofuzz_modules.sh | 4 +- .../cryptofuzz-dict.txt | 716 ------------------ .../cryptofuzz_data.zip | Bin 0 -> 14957 bytes .../cryptofuzz_seed_corpus.zip | Bin 5854 -> 0 bytes tests/ci/run_cryptofuzz.sh | 0 6 files changed, 4 insertions(+), 718 deletions(-) delete mode 100644 tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz-dict.txt create mode 100644 tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_data.zip delete mode 100644 tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_seed_corpus.zip mode change 100644 => 100755 tests/ci/run_cryptofuzz.sh diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile index c735a8dd62..6811e428f2 100644 --- a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile @@ -21,5 +21,5 @@ RUN set -ex && \ ENV FUZZ_ROOT=${DEPENDENCIES_DIR} ENV MODULE_ROOT="${FUZZ_ROOT}/modules" -COPY build_cryptofuzz_modules.sh cryptofuzz_seed_corpus.zip cryptofuzz-dict.txt $FUZZ_ROOT/ +COPY build_cryptofuzz_modules.sh cryptofuzz_seed_data.zip $FUZZ_ROOT/ RUN set -ex && cd $FUZZ_ROOT && "./build_cryptofuzz_modules.sh" diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh index 73bc87c38c..da4a9a2524 100755 --- a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh @@ -12,8 +12,10 @@ export CXXFLAGS="-fsanitize=address,undefined,fuzzer-no-link -D_GLIBCXX_DEBUG -O # Setup base of Cryptofuzz cd "$FUZZ_ROOT" MODULES_ROOT="${FUZZ_ROOT}/modules" -git clone --depth 1 https://github.com/guidovranken/cryptofuzz.git +#git clone --depth 1 https://github.com/guidovranken/cryptofuzz.git +git clone https://github.com/guidovranken/cryptofuzz.git cd cryptofuzz +git checkout 76ffeff944403cdd840f06b8fc42e131e6258f36 CRYPTOFUZZ_SRC=$(pwd) python3 gen_repository.py diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz-dict.txt b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz-dict.txt deleted file mode 100644 index ec087630b1..0000000000 --- a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz-dict.txt +++ /dev/null @@ -1,716 +0,0 @@ -"\xB9\x42\x19\x24\x83\x1C\x0C\x01" -"\x0E\xB1\x89\x7F\xD7\xDC\x3C\x03" -"\xFF\x66\x18\x6D\xE5\x89\x4E\x03" -"\x61\x8D\xD4\xDA\x71\x3B\x98\x0A" -"\x67\xB3\xDE\x89\xBA\x21\x82\x11" -"\xB9\x97\x3B\xB7\xE8\xCB\x05\x1D" -"\x7E\x00\xD7\x97\x52\x25\xA3\x22" -"\x43\x32\xCF\xF1\x6C\x33\xC7\x44" -"\xB6\xF0\x58\xAC\x1E\x09\x1C\x50" -"\x9F\x80\xF4\x72\xBB\x30\xC0\x50" -"\x95\x96\x63\xFC\xC3\x98\x56\x52" -"\x9F\x1A\xD4\x96\x9A\x68\x8A\x53" -"\x41\x31\x35\x09\x9C\xD8\xC7\x54" -"\x84\xB7\x7C\xED\xE9\x58\x18\x57" -"\x71\x99\x2B\x85\x15\xB9\xD3\x59" -"\xD9\x2A\xA6\x5F\xE1\xD0\xFB\x59" -"\x22\xFC\xA7\xE2\x20\x0C\xE3\x60" -"\xBD\xE6\x5B\x76\x1A\x0F\xEC\x60" -"\x15\x4F\xEB\xBC\xB9\x97\x45\x68" -"\x91\x21\xD6\xFD\x3C\xA5\xD1\x6F" -"\x19\x2F\x8C\x6D\xFD\x13\x74\x71" -"\xDD\xB8\x12\x2E\x3E\xF4\xD2\x73" -"\x44\xCB\xC0\xE1\x86\x75\xBE\x75" -"\x33\x30\x4F\x7D\xE5\x15\xDF\x76" -"\x6E\xBC\x64\x4D\xF2\x50\xC5\x85" -"\x6A\xF4\x50\x8A\x7C\xE1\x2D\x87" -"\xC3\x69\x9F\x42\xC4\xC4\x81\x88" -"\x7D\x13\xF1\x50\xC4\x02\xDA\x90" -"\xFC\x88\x8F\x8A\x07\xA7\xDF\x90" -"\xB1\xCD\x42\xDD\x27\x0D\xF9\x99" -"\xC6\x6C\x9E\x13\xAB\x2A\x88\x9D" -"\x6D\xBD\x4A\x4B\xF8\xB2\x3C\x9F" -"\x2F\xB6\xCC\x47\xAC\x48\x9E\xA3" -"\x25\x1A\x58\x8D\xEE\xD8\xCE\xAD" -"\x09\xC4\x89\x84\x09\x18\xB0\xB9" -"\x2F\x40\x1D\xB3\xD0\x19\xBC\xBA" -"\x72\x9E\x36\xA5\xB0\x8E\xC4\xBB" -"\x02\xC9\x2F\x17\xE5\xC0\x08\xC2" -"\xA8\xC4\xAB\xC9\xB3\x0D\x95\xDB" -"\x6F\xC5\x88\x4A\x33\x16\xC2\xED" -"\x75\xEF\x03\xB1\x03\x78\xEF\xFE" -"\x4E\xE8\x72\x7F\xBA\xB8\x77\xFF" -"\x37\x33\x7B\x8B\xF3\x03\x86\x1E" -"\x2D\xCB\x27\x27\x5D\xE3\xE6\x27" -"\xDC\x4D\xAD\x6B\x06\x93\x4F\x29" -"\x5C\xBB\x8D\x3D\xBE\x1F\xE2\x2F" -"\x75\xC0\x8D\x3D\xBE\x22\xE2\x2F" -"\x05\x91\x8D\xFF\xC4\x6F\xA1\x30" -"\x88\xFB\x2E\xF0\x2D\x2D\x1B\x3E" -"\x0A\x24\xFE\x05\xCB\x20\x09\x46" -"\x61\xA3\xA2\x61\x44\x1F\xE1\x4C" -"\x85\xCD\x2D\xEC\xF9\x7F\x2C\x4D" -"\x4C\x8D\xD0\x02\xC1\x75\x9F\x50" -"\x0F\x95\x49\x86\xBF\xCE\x6A\x51" -"\x86\xE7\x3F\x43\xFD\xEA\x20\x5F" -"\xD5\x7C\xAA\x59\xFD\xAF\x49\x7C" -"\x4D\x96\x67\xED\x32\x4D\xC1\x7C" -"\x8C\x81\xF8\x89\x02\x2D\x6E\x81" -"\x6B\xF2\xB6\x92\x14\xB8\x36\x82" -"\x2B\xD7\x00\xCA\x57\x45\x19\x84" -"\x1B\x25\xC5\xA5\xB6\xB0\xDA\x8A" -"\x61\xC0\xDD\x9D\x9E\x33\x36\x8B" -"\xD0\x1D\x26\x4A\x84\x7D\x25\xAB" -"\x38\xE1\xB3\xA3\x7E\x6E\x68\xBC" -"\xF0\x14\xEA\x48\x66\x7C\x7A\xC5" -"\x4A\x80\xC3\x52\x75\x25\x55\xC6" -"\xA8\x11\x65\x72\x22\xB1\xE2\xC6" -"\x5B\x86\xC3\xD0\x85\xEC\x3C\xC7" -"\x6D\xB4\xA6\x52\xA8\x61\x6F\xD4" -"\xBA\x6B\x51\x41\x9D\x3F\x61\xDD" -"\xBC\x9A\x2F\x02\x17\x1D\x60\xE3" -"\xD5\x9F\x2F\x02\x17\x20\x60\xE3" -"\xD6\xF4\x96\x82\x5A\x33\x53\xE4" -"\xF8\x04\x15\xD4\xC9\xFB\x06\xEF" -"\x08\xBE\x97\xD0\xCE\x9F\x86\xEF" -"\xD2\x2A\x2C\xD4\xC0\xE3\x8F\x04" -"\x9C\x5A\x5A\x2B\x2E\x83\x81\x07" -"\xBE\xAF\xDF\x78\x53\xEE\xF3\x0A" -"\x59\x15\xEE\x78\x53\xE6\x04\x0B" -"\x21\x79\x53\x2D\x57\xF8\xA2\x0F" -"\xC5\x14\xA6\xB1\xDD\x2C\x9E\x14" -"\xDF\xB6\xE9\xB4\x5F\x01\x03\x18" -"\xD4\xA7\x24\xDC\xB5\x93\x20\x23" -"\x2F\x1E\x65\x78\x2A\x0D\xBB\x25" -"\x05\x71\xAD\xD6\x4D\x29\x34\x27" -"\xE9\xA6\xF3\x43\x2E\x4E\xE5\x32" -"\x5B\xF3\x30\x40\xAF\x59\xA6\x33" -"\x63\x3C\x80\x71\x6E\x73\x41\x35" -"\xD7\x43\xD2\x31\x54\x04\x5C\x37" -"\xCD\x94\x9E\xD8\x4D\xEE\x9B\x37" -"\xD8\xC3\xA0\xD8\x4D\xEA\x9E\x37" -"\x05\x4F\xD4\xDD\x4D\x09\xA1\x40" -"\x6E\xFF\xC4\x80\x5A\x9C\xDB\x40" -"\xEE\x6C\x42\x8C\xBD\xAA\x8A\x41" -"\x02\x5C\xF8\x62\x36\x6C\xA5\x49" -"\x5E\xF4\xDD\x10\x6D\x32\x70\x4B" -"\x68\xE4\xFF\xE6\x4D\x63\x32\x51" -"\x17\x25\x1C\x16\x6D\x61\x7F\x54" -"\x4A\x98\x2A\x16\x6D\x61\x90\x54" -"\xC1\xC0\x21\xE7\x7F\x37\xA9\x55" -"\x03\xB2\x52\x1B\x6D\xF8\x84\x5D" -"\xB7\xA0\xFC\x8F\x51\x9D\xD3\x63" -"\x96\x0E\xF0\xF9\xA3\xAE\xBE\x64" -"\xFD\x78\x3F\xAE\xC5\xEB\x15\x67" -"\x4C\x4B\xC0\x15\xE7\xD9\x99\x69" -"\xC1\xDE\xDD\xA9\x36\x05\xA0\x71" -"\xA6\xC9\xCF\x0F\x9F\x65\x93\x72" -"\xDB\x12\xD9\x0F\x9F\xF5\x9D\x72" -"\x2C\x1F\xBA\x2D\x3F\x66\x7C\x77" -"\x7F\xF9\xB3\x13\x9F\x0C\x0B\x7A" -"\xF4\x3F\x58\x42\xF9\xE4\xB6\x7C" -"\xCD\x77\x9E\x31\x3F\x25\xF4\x7E" -"\x34\xE4\xAC\x31\x3F\x21\x05\x7F" -"\x39\x38\x74\xEF\x64\x12\x88\x7F" -"\x45\xB7\x7F\xEF\x64\xA2\x95\x7F" -"\xA8\x36\x10\x3D\x0E\x97\x11\x88" -"\xC9\x76\x18\x3D\x0E\x8B\x1B\x88" -"\xC1\x91\xD8\xF4\x64\xCD\xC3\x88" -"\xF4\x48\x86\x00\x9B\xF0\x91\x8B" -"\x21\x08\x9A\x00\x9B\x74\xA9\x8B" -"\xA8\xC6\x9A\x63\xE2\x4F\x6A\x8C" -"\xDA\xD0\x9A\x63\xE2\x55\x6A\x8C" -"\x8D\xD2\x9A\x63\xE2\x56\x6A\x8C" -"\xD7\x17\xA2\xF8\x64\x78\x1C\x90" -"\x38\xC0\x00\x42\x0E\x32\xC5\x90" -"\x44\x3F\x0C\x42\x0E\xC2\xD2\x90" -"\x1D\x28\x85\xBA\xC2\x69\x83\x96" -"\xC7\x5C\xDF\x40\x53\x3E\xB1\x96" -"\xFE\x89\x27\xA5\xA7\xFF\xE7\x98" -"\xFD\x03\x36\xA5\xA7\x03\xF9\x98" -"\x7C\xBD\x12\x6C\xE2\x9A\x28\x9C" -"\xEB\x23\xF6\x07\x95\x92\xA1\xA3" -"\xA3\x6E\x8F\x49\xB8\x02\x84\xA7" -"\xC0\x49\xC5\xC4\xC2\xA3\x5A\xA8" -"\x19\x74\x2E\x4A\x3F\x5C\x4D\xAA" -"\xC1\x45\xC8\x52\xDE\x96\xEE\xAB" -"\xCA\x56\x66\x31\x9F\x16\x52\xAE" -"\xF0\xC2\x72\xC8\xC2\xCE\x91\xAF" -"\x71\x39\x7B\xC8\xC2\xE2\x9B\xAF" -"\xB4\x15\x3D\xD5\x40\x46\xE4\xB3" -"\x6C\x9A\xE9\x43\x7F\xEB\x97\xB4" -"\x8E\xB9\x60\x6E\xA0\xDB\xE1\xBF" -"\x43\x60\x86\x57\xB8\xFF\x9C\xC0" -"\xBB\x9C\x72\xE4\x55\x1D\x92\xC1" -"\xF1\xBB\x7A\x57\x7F\x9B\x2C\xD7" -"\xB9\xE6\x82\x5C\x7F\xB6\xFB\xDF" -"\xDC\xB2\xD1\x14\x57\x9D\x5A\xE4" -"\xD9\x83\xCF\x61\x7F\xE1\x1B\xE9" -"\x70\xAB\x9A\xBC\x99\xFA\x24\xEB" -"\x4C\x6E\x89\xA3\x8B\x22\x6A\xED" -"\x39\xAE\xDD\xDA\xA5\xB9\x98\xEE" -"\x10\x22\xE8\xC1\x99\xA5\x45\xF4" -"\xA1\x22\xE0\xB0\x7E\x29\x41\x00" -"\xFF\x8D\xE0\x32\xCA\x62\x1F\x01" -"\x70\xF2\xEC\x32\xCA\x79\x2D\x01" -"\xCA\x70\x14\x33\xCA\x81\x5C\x01" -"\xC6\x1C\xF6\x75\xDE\xB4\x55\x02" -"\xC4\x44\x3E\xA4\x5C\xD5\x0A\x03" -"\xC9\x2C\x6F\x4D\xAE\x77\x2A\x03" -"\x72\x8B\xC7\xC5\x63\xC1\x27\x04" -"\x0A\xD7\xAA\xCF\x24\x1A\x01\x05" -"\x90\x45\xF5\x99\x55\xA9\x25\x08" -"\x67\xAD\x01\x9A\x55\xC2\x33\x08" -"\x65\xB8\x34\x9A\x55\x62\x70\x08" -"\x49\x3F\xBD\xE1\xAF\x17\x8F\x0B" -"\x40\xE5\xCD\xF0\x36\xEE\xB8\x0C" -"\x8B\xF4\xCD\xF0\x36\xF7\xB8\x0C" -"\x7F\x94\x2B\x1C\xEB\x87\xBA\x0C" -"\x3C\xF7\x62\xD0\xD5\x6C\xFA\x0D" -"\x56\x8F\xFB\xBB\x8C\x05\xE6\x10" -"\x03\xF2\x92\x5C\x46\x9F\x2E\x11" -"\x74\xA3\x9D\x5C\x46\xB6\x3B\x11" -"\x61\x33\xC6\x5C\x46\x5F\x6B\x11" -"\xA2\xE4\xE2\x9C\xAB\xB6\x97\x11" -"\xED\xF3\xE2\x9C\xAB\xBF\x97\x11" -"\x3F\x29\x08\x84\xC5\x84\x4A\x12" -"\xA9\x90\xD1\x7F\xDE\x35\xB6\x13" -"\x5F\xC3\xE0\xAD\x5D\x8B\x0D\x14" -"\xD0\x27\xED\xAD\x5D\xA2\x1B\x14" -"\x2A\xA6\x14\xAE\x5D\xAA\x4A\x14" -"\x82\xA8\x58\x77\xBD\xD8\xA8\x14" -"\xCC\xB9\xCD\x11\x71\xA4\xE5\x15" -"\x3C\xDA\x98\xD5\xD5\x9F\xFF\x16" -"\x5C\x34\xD2\xCA\xFA\xAB\x3C\x1C" -"\x93\x46\x4D\xD1\xBF\x90\x39\x1D" -"\x78\x52\x4D\xD1\xBF\x97\x39\x1D" -"\xC8\xD9\x57\x3A\x70\x63\x4C\x1D" -"\xD7\xCA\xF6\x09\x42\x3B\xA3\x20" -"\xFC\x11\x1A\x3D\x8B\xDA\xCA\x22" -"\xC0\xA0\x41\xF8\x8F\xE8\x74\x23" -"\xDC\x82\x96\xCE\xFA\xDE\x8E\x23" -"\x7D\xB3\xB5\xCE\xFA\xEA\xB3\x23" -"\x37\xB0\xD4\xC5\x7E\x05\x78\x24" -"\xBE\x3C\xFD\xC5\x7E\xAC\xA7\x24" -"\x95\xF1\x07\xC6\x7E\xC5\xB4\x24" -"\xEE\x23\xC2\xE1\x24\xD6\xD8\x25" -"\xC5\xD8\xCC\xE1\x24\xEF\xE5\x25" -"\x6E\x95\xD0\xE1\x24\xD5\xE9\x25" -"\x34\x31\xF6\xE1\x24\x0E\x16\x26" -"\xB3\x0D\x44\x62\xAE\xFE\x3B\x27" -"\x91\x28\x78\x62\xAE\x3E\x79\x27" -"\x37\x82\x13\x17\xB0\xCC\x7D\x27" -"\x3D\xBE\x81\x62\xAE\xFB\x83\x27" -"\x02\x8D\x84\x62\xAE\x55\x87\x27" -"\x89\x0D\xD8\xC8\x9D\x53\xBD\x27" -"\xEF\xA2\x55\x46\x5F\xDA\x61\x28" -"\xDA\x6E\x21\x7B\xE8\x5B\x7A\x28" -"\xCF\x42\x33\xC9\xE3\xB3\x70\x29" -"\x6C\xE8\xD1\x88\x51\x41\x5A\x2A" -"\xAC\x7C\x90\x56\x08\xDD\x06\x2B" -"\xA0\x18\xA9\x03\xC1\x03\x47\x2B" -"\xE9\x1B\xC6\x03\xC1\x14\x69\x2B" -"\x5A\xCD\xD0\x03\xC1\x2B\x76\x2B" -"\xA2\xD2\xC0\x4E\x6B\x99\x00\x2F" -"\xC4\x16\x24\x87\x59\xEE\x49\x2F" -"\x77\x18\x24\x87\x59\xEF\x49\x2F" -"\x95\x89\x2A\x0B\x92\xE7\xF1\x2F" -"\x80\x45\x47\x0B\x92\xCE\x13\x30" -"\x57\xAD\x53\x0B\x92\xE7\x21\x30" -"\x09\xF6\x7E\xF1\xBA\x02\xCF\x31" -"\xFA\x5D\x4C\xCE\x7E\x25\x36\x34" -"\x1A\xFA\x15\xD4\x5A\xE5\x9C\x35" -"\x8F\x6C\x3D\xD4\x5A\xE6\xCB\x35" -"\x80\xF7\x48\xD4\x5A\x7D\xD9\x35" -"\xD3\x48\xBA\x51\xCA\x91\xC1\x36" -"\x64\x54\x81\x59\x2B\xEE\x84\x37" -"\x93\x71\xA6\x94\xDE\xBC\xC7\x37" -"\x58\x53\x4D\xDB\x71\xA8\xD2\x37" -"\xF1\x65\xDB\x94\xDE\x7C\x05\x38" -"\x1D\x22\xE4\x94\xDE\xB9\x0F\x38" -"\x62\x17\xE6\x94\xDE\x93\x12\x38" -"\x35\xB2\x1D\xED\x24\x62\xFD\x38" -"\x9E\x23\x1E\x22\xB0\x24\x43\x3A" -"\x64\x57\x51\x22\xB0\xDC\x7F\x3A" -"\x3B\xBF\x5D\x22\xB0\xF5\x8D\x3A" -"\xFC\xF4\x0D\xD3\xE3\xC2\xD0\x3A" -"\x40\xC2\x6E\xB7\x55\x3E\x29\x3C" -"\x30\x89\x2A\x27\xF1\xB0\x9C\x3C" -"\x07\xF1\x36\x27\xF1\xC9\xAA\x3C" -"\x85\xD5\x6A\x27\xF1\xE9\xE7\x3C" -"\x66\x22\x7A\xEB\x88\x47\xD6\x3E" -"\xF9\x35\x9E\x79\x24\x54\x89\x3F" -"\x0D\x6E\x29\x75\xD5\xCA\x81\x41" -"\x36\xCD\x80\x40\x1D\xD2\xB9\x42" -"\x0D\x82\x8B\x40\x1D\xEB\xC6\x42" -"\xB5\x74\xC9\x70\xAF\x9F\x33\x44" -"\xC9\x3E\xF6\xDA\x8C\xFD\xAF\x46" -"\x33\x10\x48\xCB\x5D\x3A\xFC\x47" -"\x32\xE1\x53\x96\x7D\x41\x54\x48" -"\x11\xA7\x2F\xDB\xE3\x4E\x29\x4A" -"\x6C\x9F\x21\x76\xAE\xD8\x29\x4A" -"\x05\x16\x30\x76\xAE\xDA\x3A\x4A" -"\x02\x17\xE2\xF6\x24\xB9\x42\x4A" -"\xB3\x27\x58\xDB\xE3\xEE\x58\x4A" -"\xE3\xC1\x60\xDB\xE3\x17\x63\x4A" -"\x24\x8C\x64\xDB\xE3\x05\x67\x4A" -"\x97\xD7\x40\x6D\xC6\xF5\x80\x4B" -"\x90\x9F\x43\x6D\xC6\x4B\x84\x4B" -"\x51\x01\x96\x8A\xAE\x9E\x86\x4B" -"\x67\x07\x50\x6D\xC6\x64\x92\x4B" -"\x65\x12\x83\x6D\xC6\x04\xCF\x4B" -"\xBA\x6C\xD1\x93\xFC\x6C\xC3\x4D" -"\xBE\x1C\xCC\x18\xC1\x67\xB4\x4F" -"\xB4\xD1\x03\xF4\x01\x18\xE2\x50" -"\xD0\x35\x51\x0C\xAA\xE3\x15\x54" -"\xFD\x81\xDB\x4B\x1D\xDE\xDD\x55" -"\x4C\x95\x11\xA7\xDE\x16\x02\x59" -"\xE5\x0B\x20\xA7\xDE\x18\x13\x59" -"\xE7\xB6\x2D\x6D\x2B\xF3\x38\x5A" -"\xD8\x41\x39\x6D\x2B\x8A\x46\x5A" -"\x32\xC0\x60\x6D\x2B\x92\x75\x5A" -"\x1A\x02\xBB\x0A\xBC\x56\x91\x5A" -"\xDC\xFD\xB7\x4A\x9B\x1B\x9F\x5B" -"\x36\x2F\xE1\x4A\x9B\x23\xCF\x5B" -"\x0D\xE4\xEB\x4A\x9B\x3C\xDC\x5B" -"\x0F\x88\x0B\x70\x4F\x24\x2E\x5C" -"\x08\x5F\x8E\xE7\x9D\x47\x36\x5D" -"\xD8\x44\x09\x36\xB0\x78\x41\x5D" -"\xF1\x2B\xAB\xE7\x9D\x38\x58\x5D" -"\x62\xDD\xB5\xE7\x9D\x4F\x65\x5D" -"\xB9\x8F\x61\x20\xCB\x2A\xC2\x5D" -"\x9E\x9B\x61\x20\xCB\x31\xC2\x5D" -"\x2F\x1C\x2B\x15\xF5\xBE\x19\x5F" -"\xB1\x73\xFD\xEC\x96\x40\x1F\x5F" -"\x07\x47\x50\x40\xBB\x49\x23\x60" -"\x9A\x8F\x76\x19\x89\x7E\xD1\x61" -"\x0F\xE1\x81\x94\x57\xED\xD2\x61" -"\xEA\x4E\x99\x9C\x25\xB0\xFF\x61" -"\x9B\xC0\x9B\xCA\xB9\x49\x27\x62" -"\xA2\xAD\xB7\xFD\x4D\x9B\x65\x62" -"\xED\xBC\xB7\xFD\x4D\xA4\x65\x62" -"\x30\x7D\x31\x2A\x92\xE3\xC9\x65" -"\x22\xD6\xEC\x3E\x07\x91\xFB\x67" -"\x11\x89\x59\x14\xC0\x0A\xF9\x68" -"\xAC\xEF\xB4\x6D\xCA\x8D\x03\x69" -"\xE3\x4D\x16\xF3\x5A\x95\x6D\x6B" -"\x2B\x30\x6F\x7F\xC6\xD9\x73\x6C" -"\xF4\x29\x89\xB1\x77\x5E\x13\x6D" -"\xF4\xB7\xFA\x53\x67\x0B\x8A\x6D" -"\x9D\xD9\x6C\x99\x1A\x61\xC0\x6D" -"\xEE\x86\x41\x9E\xAE\x21\x3A\x6E" -"\xC5\x3B\x4C\x9E\xAE\x3A\x47\x6E" -"\xA3\xEF\x58\xD3\x55\x56\x57\x6E" -"\xE7\x95\x75\x9E\xAE\x5A\x77\x6E" -"\xE0\x97\x31\x43\xF1\xC5\xEC\x6E" -"\xFD\xE3\x3B\x56\x9B\x2F\xF3\x6E" -"\xB4\xC2\x76\x41\x80\x86\xEB\x6F" -"\xCB\xAB\x4A\x3F\x28\x08\x17\x71" -"\x59\xF0\x04\x09\x89\x3F\xEE\x72" -"\xC1\x14\x10\x78\x9E\x0D\xB8\x73" -"\xC9\x42\x19\xB1\xA6\xB7\x59\x74" -"\x1E\x43\x80\x92\xD5\x96\x5C\x75" -"\xDC\x00\x03\x3B\x42\x23\x3E\x77" -"\x7E\x14\x46\x15\x52\xE0\xB3\x77" -"\xB6\xA9\xE0\x08\xB2\x54\xA8\x78" -"\xF8\x83\xB7\x2E\x45\xC1\xC2\x78" -"\x48\x67\xC9\xF6\x8C\xF1\xC2\x78" -"\x31\x34\xE6\xF6\x8C\xE2\xE4\x78" -"\xA2\x98\xF2\xF6\x8C\xF9\xF2\x78" -"\x91\x3B\x43\x98\xEA\x25\x19\x79" -"\x23\x52\xB2\xD0\x3C\x03\xE8\x7A" -"\xA7\x17\x27\xD8\x4F\x95\x15\x7B" -"\x0C\x93\x27\xEA\x5D\x36\xA5\x7D" -"\x81\x82\x1C\x8C\xBA\x06\xD8\x7D" -"\x72\x0D\x28\x8C\xBA\x9D\xE5\x7D" -"\x23\x03\x45\x8C\xBA\xA6\x07\x7E" -"\x40\x1C\xBD\x8A\xC6\xE0\x87\x7F" -"\x6A\x9F\xC9\x26\x3E\x03\x08\x80" -"\xAB\x13\x28\x5F\x67\x37\x78\x80" -"\x1C\x78\x34\x5F\x67\x4E\x86\x80" -"\x09\x08\x5D\x5F\x67\xF7\xB5\x80" -"\x2A\xD1\x73\xA9\xAE\x9A\x2E\x81" -"\xC4\x74\x64\x2B\x89\x12\x79\x82" -"\xFE\x02\x8D\x2B\x89\xBA\xA8\x82" -"\xD5\x6A\x99\x2B\x89\xD3\xB6\x82" -"\xB8\xB1\xD5\xDC\xB9\xCC\x27\x83" -"\xED\x5A\x15\xDD\xB9\xA5\x72\x83" -"\x4E\x67\x1B\x02\x97\x43\x86\x83" -"\xA5\xF5\x26\x02\x97\xDC\x93\x83" -"\xA4\xE9\x19\x37\x7B\xD7\xAD\x83" -"\xC7\x9C\x4E\x02\x97\xFC\xC2\x83" -"\x0D\xFB\x91\xCB\x0D\xBA\x67\x84" -"\xCC\x07\x2F\xA9\xFE\x04\x06\x85" -"\xCE\xC4\x93\xB1\x25\x6C\x3D\x86" -"\x25\x53\x9F\xB1\x25\x05\x4B\x86" -"\x94\xF8\xC6\xB1\x25\x24\x7A\x86" -"\x00\xB1\xBF\xEE\xB6\x9C\xAF\x87" -"\xF1\x20\x97\x44\x42\x2F\x4A\x88" -"\x13\xC8\xBE\x44\x42\x4F\x79\x88" -"\x84\x2C\xCB\x44\x42\x66\x87\x88" -"\x24\xCD\x91\xE0\x4F\x94\xC3\x8A" -"\xE0\x07\x2D\x52\x51\x22\x2E\x8B" -"\x2B\x17\x2D\x52\x51\x2B\x2E\x8B" -"\xCC\xD9\x6F\x94\x3B\x4B\x3F\x8B" -"\x17\xE9\x6F\x94\x3B\x54\x3F\x8B" -"\x24\xDE\x2E\x55\xA8\xA5\x88\x8B" -"\x3A\x07\xDB\xB1\xFB\x6F\xA8\x8B" -"\x4C\xE1\xBA\x39\x94\xA6\x82\x8D" -"\xBB\x03\x95\x8A\x2B\xA2\x27\x8E" -"\x6D\x7F\xA3\x8A\x2B\xA7\x38\x8E" -"\x0A\x6A\xE4\x54\x65\x47\x5B\x8F" -"\x73\x3C\x7C\xC5\x6A\xDA\x3D\x90" -"\x37\xB7\xB0\x53\x80\x0B\xEC\x90" -"\xA8\x68\xBB\x53\x80\x22\xF9\x90" -"\x75\x99\xA5\x57\xCB\x01\x24\x91" -"\x30\xC8\xB3\xE7\x6C\x1D\x2B\x91" -"\x07\x30\xC0\xE7\x6C\x36\x39\x91" -"\x60\x55\xC2\x57\xCB\xE8\x45\x91" -"\x02\xD5\x7E\xC6\x77\xE2\x4A\x91" -"\x37\xBD\xCE\x57\xCB\x01\x54\x91" -"\x85\x14\xF4\xE7\x6C\x56\x76\x91" -"\x77\x47\xA6\xC6\x77\xE3\x79\x91" -"\xE8\xAB\xB2\xC6\x77\xFA\x87\x91" -"\x72\xB6\x9B\x00\x15\xBD\xB7\x91" -"\x1A\xD6\xEE\x8D\x01\xD0\x02\x92" -"\xC5\xFC\x76\x35\x89\x46\x1A\x94" -"\x8A\xF6\xDC\x0B\x97\x3C\xC8\x94" -"\x54\x33\x62\x71\x9C\xCE\x58\x95" -"\xEF\xD3\xA4\x08\xE7\x35\x72\x97" -"\xCE\xC9\xEE\xA8\xCE\x06\x93\x97" -"\x15\xE5\x7C\xBB\x25\x78\xAE\x97" -"\xD7\x7B\x05\x8D\x9E\x69\xEF\x97" -"\x93\xAA\x1B\x46\x92\xFB\xF7\x97" -"\xDE\x2E\x2D\x8D\x9E\x90\x1E\x98" -"\x54\x1E\xA6\x5B\x71\x2C\x1F\x98" -"\xB5\x96\x39\x8D\x9E\xA9\x2C\x98" -"\x4A\x91\x51\xEE\xEE\x03\x08\x9B" -"\x98\xA7\x74\x3E\x83\x15\x60\x9B" -"\xB9\x13\x25\xEA\x4F\x20\xCF\x9B" -"\xDB\xBA\x4C\xEA\x4F\x40\xFE\x9B" -"\xBB\x49\x56\xEA\x4F\xF9\x08\x9C" -"\xCC\x45\x58\xEA\x4F\xD7\x0B\x9C" -"\x33\x60\xDA\xB8\x63\xB6\x90\x9C" -"\xF0\x19\x94\x49\x28\x3A\x4E\x9D" -"\xA2\x19\xD0\x01\x61\x8C\x8D\x9D" -"\xBC\xA7\x12\x0F\x5B\x91\xB0\x9D" -"\x75\x28\x61\x9E\xBA\xA2\xE5\x9E" -"\xA0\xEF\x4A\x98\xCA\xA7\x1E\x9F" -"\xEB\xFE\x4A\x98\xCA\xB0\x1E\x9F" -"\xCB\x9D\xC6\x4A\xBC\xAE\x54\x9F" -"\x34\x45\x44\xFE\x2F\x32\x06\xA0" -"\xF4\x86\x42\xF3\x8A\xD2\x91\xA0" -"\x9F\x6C\x6E\x71\x67\xD3\x86\xA1" -"\x36\x1F\x78\xA5\xAF\x6A\xF8\xA1" -"\x0D\xD4\x82\xA5\xAF\x83\x05\xA2" -"\x87\x2A\xF5\x9B\x94\xD0\x0F\xA2" -"\xAF\x54\xAB\xA5\xAF\x23\x35\xA2" -"\x5C\x2D\x17\x00\x03\x20\x2A\xA3" -"\x20\xEB\x11\x5B\xAA\xDC\x9C\xA3" -"\x43\xEE\xFE\x61\xF1\xDD\x80\xA4" -"\x41\x0C\xF4\x24\x89\xA4\x22\xA5" -"\x32\x97\xFF\x24\x89\x3B\x30\xA5" -"\x18\x6E\x33\x25\x89\x53\x6D\xA5" -"\x8B\xFA\x1D\x7B\x9C\xFA\x93\xA6" -"\xFC\xAB\x28\x7B\x9C\x11\xA1\xA6" -"\x6A\xB7\x95\xCD\x7D\x65\x20\xA9" -"\xC7\x41\xC9\x21\x46\x8B\x57\xA9" -"\x9A\x97\xEF\x96\x9E\x09\x61\xA9" -"\x79\xBC\x16\xDA\x37\xD1\x8D\xA9" -"\x49\xD9\x63\xB1\xD5\x5E\x0B\xAB" -"\xBA\x3D\x70\xB1\xD5\x75\x19\xAB" -"\x0B\xFD\x8C\xB1\xD5\x5E\x3B\xAB" -"\x48\xC3\x8C\x62\xE6\xDD\x05\xAC" -"\x5F\xAD\xBD\x3E\xAA\x67\x4F\xAC" -"\x64\xEC\xC8\xC3\xFB\x03\x50\xAC" -"\x02\x6B\xE9\x7C\x1D\xC6\x79\xAC" -"\x1E\x54\xF2\xC3\xFB\x2B\x80\xAC" -"\xF5\x08\xFD\xC3\xFB\x44\x8D\xAC" -"\xE6\x21\xCB\xB6\x2D\x6F\x45\xAD" -"\x31\x31\xCB\xB6\x2D\x78\x45\xAD" -"\x3F\xA3\xD8\x1E\xC9\x06\xD3\xAD" -"\x29\x59\xDB\x27\xB2\x4C\x72\xAE" -"\x8B\xF0\xD9\xE7\xEA\xDB\x62\xAF" -"\xEB\x77\x8E\x06\x30\x5E\x8E\xAF" -"\x5C\x29\x99\x06\x30\x75\x9B\xAF" -"\x1F\xC6\x6B\xD8\x70\xF9\xB4\xAF" -"\xFC\xC8\x6D\xD8\x70\xDB\xB7\xAF" -"\x90\x77\x76\xD8\x70\x10\xC2\xAF" -"\x49\xB9\xC1\x06\x30\x1E\xCB\xAF" -"\xEA\xA8\x9F\xD8\x70\x18\xF2\xAF" -"\xEE\xB6\xFB\x66\x65\x03\x33\xB0" -"\xC5\x6B\x06\x67\x65\x1C\x40\xB0" -"\x6E\x28\x0A\x67\x65\x02\x44\xB0" -"\x34\xC4\x2F\x67\x65\x3B\x70\xB0" -"\xA3\x49\xA7\xA6\xC6\xF8\xB5\xB1" -"\x0E\xDF\x1F\x17\x89\xFD\x26\xB2" -"\x44\xBB\xDC\x9F\x01\x64\xAA\xB2" -"\x7E\x49\x05\xA0\x01\x0C\xDA\xB2" -"\x70\x89\xCB\x72\x7A\xA8\xE5\xB2" -"\x55\xB1\x11\xA0\x01\x25\xE8\xB2" -"\xFE\xBA\x13\xA0\x01\x0B\xEB\xB2" -"\xD8\xA1\x7A\x77\xAB\xFE\x30\xB3" -"\xF2\x42\xAB\xB0\xAF\x63\xED\xB4" -"\xCC\x98\x1A\x17\xF7\x7B\x4D\xB9" -"\x22\x77\xFC\xBE\x2B\x93\xC8\xB9" -"\x6D\x86\xFC\xBE\x2B\x9C\xC8\xB9" -"\xB6\x5A\xFF\x79\x50\x7B\x59\xBA" -"\x0C\xA1\x8B\x48\xAA\x77\x9F\xBD" -"\xE3\x55\x96\x48\xAA\x90\xAC\xBD" -"\x66\x1F\xB3\x48\xAA\x7F\xCE\xBD" -"\x65\x74\xDB\xCD\xFB\x37\xF1\xBD" -"\x98\xFD\x21\x62\x54\x12\x97\xBE" -"\xCF\x3C\x76\xFF\x4F\xDC\x72\xC0" -"\x47\xAB\x31\x15\xA7\xCB\x45\xC1" -"\x03\xCC\xE6\x10\xA5\xF0\x50\xC2" -"\x35\x45\x57\x72\x65\x8F\x57\xC3" -"\xE0\xD6\xBA\x03\x6D\x32\x7B\xC3" -"\x1D\x9F\xC7\x5F\xBC\xAA\x99\xC3" -"\xCB\xFF\x9B\xE2\x77\x92\xB5\xC3" -"\x68\x91\xE4\x5F\xBC\xB1\xBB\xC3" -"\xBF\x1F\xF0\x5F\xBC\x4A\xC9\xC3" -"\x45\x43\xEF\xA9\x01\x98\x4B\xC4" -"\x02\x32\x38\x08\x8B\x56\xC9\xC4" -"\x77\xA4\x5F\x08\x8B\x57\xF8\xC4" -"\xE8\x08\x6C\x08\x8B\x6E\x06\xC5" -"\x02\xCD\x49\x87\x9B\x17\x8F\xC5" -"\xC3\x1D\xAB\xB8\xBF\x92\x33\xC6" -"\x8B\x98\x89\x72\x80\xBA\x8D\xC6" -"\x10\x8D\xAC\x76\xCB\xFD\xFB\xC6" -"\x7F\xA0\x62\x8D\x9C\x96\xA1\xC7" -"\xF9\x89\xA8\x2C\xAE\x7A\x60\xC8" -"\x4A\x71\x16\xDD\xBD\xF4\x0B\xC9" -"\x02\xB8\x93\x75\xFA\xFB\x31\xC9" -"\x7A\x36\x68\x21\xA0\xFD\x9B\xCE" -"\x90\x21\x9C\xEA\x70\xBF\xAA\xD0" -"\xEF\x5F\x3B\x0A\xBA\x05\x93\xD2" -"\x74\xC5\xFE\x1E\xA7\x5B\x95\xD2" -"\xCB\x53\x0A\x1F\xA7\xF4\xA2\xD2" -"\xAE\x53\x27\x1F\xA7\x03\xC5\xD2" -"\xDF\x46\xB6\x1B\x30\xFA\x01\xD4" -"\x02\xAA\x1B\x7C\x65\xE6\x9C\xD4" -"\x64\xCC\xEC\x13\xEF\x54\xC0\xD4" -"\x17\xCE\xEC\x13\xEF\x55\xC0\xD4" -"\xD9\x32\x9A\x5D\xDE\xB8\x39\xD7" -"\x92\x3C\x25\xB5\x01\xEF\x43\xD7" -"\x54\x27\x2B\x00\xEB\xBF\x71\xDA" -"\x77\xCC\xB6\x1F\x62\xDA\x80\xDB" -"\x8F\x6D\xBB\x1F\xB7\xA0\x36\xDE" -"\x66\x6C\xCE\x5C\x7D\x4D\xFA\xE1" -"\x3D\xD4\xDA\x5C\x7D\x66\x08\xE2" -"\x4C\x43\x02\x5D\x7D\x65\x37\xE2" -"\x28\x16\x20\x45\xB2\x40\x38\xE2" -"\xFE\x33\x95\x83\xFA\xF8\x57\xE2" -"\x11\xE3\x3C\x45\xB2\x31\x5A\xE2" -"\x82\x47\x49\x45\xB2\x48\x68\xE2" -"\x2C\x7C\x12\xF9\x2F\x68\x2E\xE3" -"\xF3\x12\xD3\xF5\x70\xA8\xA3\xE3" -"\x77\xE5\x00\xA2\xE3\x5A\x35\xE4" -"\x02\xAD\x27\x3D\x28\xF5\xED\xE4" -"\xC3\x36\xBD\xB4\x98\xE7\x4F\xE6" -"\x6C\xF2\xB2\x5A\xBD\x3F\xFA\xE8" -"\x34\x54\x8D\xB7\xCA\x15\x3D\xEB" -"\x8B\xEE\xE6\x09\xEB\xEB\xAC\xEB" -"\xFC\x9F\xF1\x09\xEB\x02\xBA\xEB" -"\x69\x09\x1B\x0A\xEB\x2B\xEA\xEB" -"\x2E\xE7\x10\xF2\xBD\xB0\x49\xED" -"\x05\x4F\x1D\xF2\xBD\xC9\x57\xED" -"\x74\xF4\x44\xF2\xBD\xE8\x86\xED" -"\xF2\x81\xFB\xE8\xC2\xAC\xCB\xED" -"\x3D\x91\xFB\xE8\xC2\xB5\xCB\xED" -"\x3C\x61\x89\x29\xB7\xB0\x86\xEF" -"\x13\x16\x94\x29\xB7\xC9\x93\xEF" -"\xAD\xD1\x46\x65\x7D\xD9\xB8\xF1" -"\x66\x4D\x05\x45\xAE\xF6\x7C\xF3" -"\x9A\x12\x0C\x45\xAE\x58\x84\xF3" -"\x92\xE0\xAA\x27\x26\x83\x7D\xF4" -"\x16\xD4\xBE\xAC\x9D\x5B\x58\xF5" -"\x98\xC6\xEA\x7B\xBC\x46\x0B\xF6" -"\x68\x47\x28\x34\xA7\xF7\x09\xF7" -"\x43\x2D\x88\x22\x6D\x4A\x0F\xF9" -"\x81\x26\xD6\xE7\xC0\x2F\x34\xF9" -"\x73\x28\x09\x94\xCB\x95\xDD\xFA" -"\x75\x4C\x89\xFA\xBD\x3C\x08\xFD" -"\x57\x5B\x9F\x04\xF1\x99\xBD\xFF" -"\x4C\x51\xD6\x52\x46\xF3\xF2\xFF" -"\x96\xD3\xBA\x14\x87\xE0\x30\x01" -"\xF6\x7A\xCA\x81\x14\x0F\x4C\x01" -"\xCC\x2A\xDB\x81\x14\x13\x60\x01" -"\x21\x9D\x08\x43\x8F\x47\x10\x02" -"\x98\xD6\xDD\x32\x07\xDD\x23\x09" -"\xCF\x32\xBB\x48\x82\xB0\x26\x09" -"\xAA\x09\xE4\x32\x07\xE9\x2A\x09" -"\x44\xC0\x73\x35\xEB\xCA\x14\x0C" -"\x6F\xDB\xD9\xBE\xD1\x22\x4D\x0D" -"\x4C\xE3\x98\xE4\x12\x42\x9E\x10" -"\xB2\xE6\x98\xE4\x12\x44\x9E\x10" -"\x65\xE8\x98\xE4\x12\x45\x9E\x10" -"\xD3\x85\x9D\x9C\xE2\x21\x13\x1A" -"\x4A\xC7\x52\xD5\xE5\x13\x82\x1C" -"\x1F\xA0\x95\xD5\xE5\x7F\xD0\x1C" -"\x07\x4F\x8A\x13\xB7\x29\xD6\x21" -"\xBA\x50\x8A\x13\xB7\x2A\xD6\x21" -"\x58\x4C\xEF\x7F\xF9\xA8\xC1\x23" -"\x0B\x4E\xEF\x7F\xF9\xA9\xC1\x23" -"\xBE\x4F\xEF\x7F\xF9\xAA\xC1\x23" -"\x04\x4F\x32\x36\x0E\x55\xC0\x26" -"\x7A\x93\xEF\xBA\x16\xC5\xD5\x2E" -"\x99\x27\x35\x03\xD2\xAF\xD5\x37" -"\x22\x98\xEB\x91\xFF\x79\x06\x39" -"\x7B\x53\xAB\xEA\x30\xDD\x1C\x39" -"\xD1\xDC\xBC\xEA\x30\x61\x31\x39" -"\xB4\x08\x89\x2F\xC0\x8C\xE6\x48" -"\xFF\x43\x38\x9C\x75\x29\xCC\x4C" -"\xB2\x45\x38\x9C\x75\x2A\xCC\x4C" -"\xE8\x14\x05\x57\xE1\x46\x84\x52" -"\xC0\xC0\x6C\x25\xC7\xB7\x5B\x5A" -"\xEC\x61\x81\x25\xC7\xC0\x73\x5A" -"\x05\x67\x81\x25\xC7\xC3\x73\x5A" -"\x86\xD4\x15\x8E\xBB\xCD\x9B\x60" -"\x3B\x0A\x58\x8E\xBB\xD9\xE9\x60" -"\x9B\x99\xA8\x97\xC2\xC3\xDA\x63" -"\x1A\xA2\xA8\x97\xC2\xC8\xDA\x63" -"\x9D\xD9\xD0\xD3\xE3\xD2\xC0\x65" -"\x4F\xD6\xD6\xD3\xE3\xBE\xC7\x65" -"\x46\xEE\xF6\x5C\x19\x0B\x19\x66" -"\xC3\xA5\x30\x94\xEF\xEE\x20\x6B" -"\x99\x55\x41\x94\xEF\xF2\x34\x6B" -"\x12\xE4\xE0\xC0\xF7\x07\xBB\x6F" -"\xDC\xBF\x95\x79\x1B\xD0\x6D\x70" -"\x8F\xC1\x95\x79\x1B\xD1\x6D\x70" -"\xA8\xC6\x95\x79\x1B\xD4\x6D\x70" -"\x5B\xC8\x95\x79\x1B\xD5\x6D\x70" -"\x0E\xCA\x95\x79\x1B\xD6\x6D\x70" -"\xC1\xCB\x95\x79\x1B\xD7\x6D\x70" -"\x27\xCF\x95\x79\x1B\xD9\x6D\x70" -"\x8D\xD2\x95\x79\x1B\xDB\x6D\x70" -"\x5D\xF8\x93\x39\x36\xD4\x73\x72" -"\x01\x55\x22\x48\xC0\x57\x4A\x74" -"\x47\xB7\x0E\x88\x61\xC7\x5E\x79" -"\xB1\xF4\xCE\x4B\xC0\x02\x81\x7B" -"\x58\xC2\xB1\x45\x04\xB7\xDE\x91" -"\x18\xF2\x17\x57\xE8\x58\x12\x95" -"\x31\xF7\x17\x57\xE8\x5B\x12\x95" -"\xA0\xA7\x63\xDA\x70\x28\x9D\x9B" -"\x53\xA9\x63\xDA\x70\x29\x9D\x9B" -"\xB9\xAC\x63\xDA\x70\x2B\x9D\x9B" -"\xAC\x49\x58\x4F\x00\xAC\x8F\x9F" -"\xC5\x4E\x58\x4F\x00\xAF\x8F\x9F" -"\xAF\xE0\x8E\x99\xAF\xFE\x76\xA0" -"\x62\xE2\x8E\x99\xAF\xFF\x76\xA0" -"\x15\xE4\x8E\x99\xAF\x00\x77\xA0" -"\x96\x63\xEE\xC2\x44\x57\x63\xA3" -"\xEC\xEC\xFF\xC2\x44\xDB\x77\xA3" -"\x8F\x1F\x8E\xC6\x3A\xD7\x4C\xA4" -"\x9A\x18\xA8\xC6\x3A\x6B\x6B\xA4" -"\x51\xD1\x24\xA4\x0A\x19\x29\xAF" -"\x04\xD3\x24\xA4\x0A\x1A\x29\xAF" -"\xB7\xD4\x24\xA4\x0A\x1B\x29\xAF" -"\x6A\xD6\x24\xA4\x0A\x1C\x29\xAF" -"\x10\x7C\x16\x81\xEC\xE3\x7C\xAF" -"\xC3\x7D\x16\x81\xEC\xE4\x7C\xAF" -"\x76\x7F\x16\x81\xEC\xE5\x7C\xAF" -"\xA0\x9D\x34\xB7\x14\x4F\x14\xB0" -"\xB9\xA2\x34\xB7\x14\x52\x14\xB0" -"\xFF\x5E\x4E\xE7\x0D\x31\x2A\xB0" -"\x6F\xA4\x24\xBE\xA5\xFB\xD1\xB8" -"\x22\xA6\x24\xBE\xA5\xFC\xD1\xB8" -"\xD7\x1D\x08\x05\x28\xEE\xFC\xB9" -"\x8A\x1F\x08\x05\x28\xEF\xFC\xB9" -"\x3D\x21\x08\x05\x28\xF0\xFC\xB9" -"\xBF\xDD\x80\x41\xE5\x2B\x65\xBF" -"\xD6\x2C\x6B\x00\x8E\xA8\xB4\xC1" -"\xD2\xD7\xB3\xAF\x3C\x68\x67\xC2" -"\x50\x08\x8C\x39\x7A\x72\x93\xCE" -"\x03\x0A\x8C\x39\x7A\x73\x93\xCE" -"\x69\x0D\x8C\x39\x7A\x75\x93\xCE" -"\xF6\x82\x08\x80\x0A\x41\xAF\xCE" -"\x4E\xD9\x7C\x1F\xA5\x4A\x2D\xCF" -"\x24\x89\x8D\x1F\xA5\x4E\x41\xCF" -"\xF9\x6C\x2A\xB9\x61\x4D\x0B\xD0" -"\xF4\xCE\x72\xB9\x61\x61\x60\xD0" -"\xE9\xBC\xB0\x53\x60\x6E\x5F\xDF" -"\xF9\x4C\x76\xD8\x44\xB8\x77\xDF" -"\xF4\xAE\xBE\xD8\x44\xCC\xCC\xDF" -"\x84\x8A\xC6\xE0\xCE\xA9\x93\xE2" -"\xA1\xD3\xDD\x10\xC0\xED\xAE\xE8" -"\x4C\x96\xF7\x10\xC0\x61\xCD\xE8" -"\x65\x9B\xF7\x10\xC0\x64\xCD\xE8" -"\x61\x5A\x1E\x4D\xB3\xC5\x07\xF0" -"\xBC\x49\xB5\x0F\x72\xAE\x13\xF0" -"\x0C\x1D\x38\x4D\xB3\x39\x26\xF0" -"\xFB\xE3\x50\x34\xDE\x99\xA7\xF4" -"\xAE\xE5\x50\x34\xDE\x9A\xA7\xF4" -"\x61\xE7\x50\x34\xDE\x9B\xA7\xF4" -"\x7C\x66\xEB\xF2\xDC\x15\x44\xFF" -"\xB6\x8E\x65\xAD\x36\xE3\x5B\xFF" -"\x31\x9C\x2D\xF3\xDC\x21\x92\xFF" -"\x91\xC0\xC0\x0C\xA8\x70\xDD\x03" -"\x11\xE4\x6D\xE7\x99\xDC\x8E\x04" -"\x69\x1D\x5B\xC3\xCE\x8D\xE8\x06" -"\xF5\x98\x7A\xE2\x7B\x83\x71\x0A" -"\x31\x64\xF9\xC8\xA6\x23\xAA\x0B" -"\x99\xB2\xDA\xFA\x4A\x80\xC3\x0F" -"\x0B\x99\xF8\x2F\x44\x77\x4A\x12" -"\x36\x92\x2B\x87\xC6\x46\xDE\x13" -"\x13\xFD\x27\x1E\x6A\x30\x25\x20" -"\x79\x3E\xDF\x16\x7E\xBD\x35\x20" -"\x02\x3E\xA3\x1D\x07\x3A\x27\x23" -"\xCC\xDC\xA4\xF3\x3B\x7D\xCE\x24" -"\xE5\x4D\x60\x15\x33\xFD\x63\x28" -"\x1B\x5A\xE7\x8D\x01\x7C\x0C\x2D" -"\xAF\xDD\x3E\x7A\xEE\xB9\x99\x32" -"\x31\xB6\x4C\x8F\xDD\x20\x54\x36" -"\x49\x2F\x82\xAD\xE9\x91\x4D\x37" -"\xB7\x5A\x32\x10\x4B\x80\x24\x43" -"\x04\x10\x33\x6C\x5B\x84\x9F\x44" -"\xBA\xC1\xC3\xAD\x37\xEE\xC7\x45" -"\xF3\x86\xAB\x33\x6B\x46\xC5\x48" -"\x9B\x50\xCE\x89\x73\x8C\xDA\x49" -"\x12\x54\x1B\x07\x09\xAA\x02\x4C" -"\xD7\x3C\xAC\xAE\x2B\x0F\x60\x4D" -"\xDA\x17\xA4\x23\x5C\x4E\x61\x4D" -"\xF3\xF3\xF5\xEB\x5A\x2B\x4A\x50" -"\x2F\xDA\x62\x0A\x14\x2B\x71\x52" -"\xAE\x97\x2E\xBD\x60\xF7\xBB\x62" -"\x5F\xDE\xEA\x73\x3C\xCB\x8E\x64" -"\xC7\xD7\x0A\x36\x5B\x5A\x40\x66" -"\x93\x8D\x5B\x2C\x37\xCF\x8A\x66" -"\x06\xDA\x95\x27\x7D\x1B\x33\x68" -"\x9F\x13\x28\xD3\x92\xF6\xFD\x68" -"\xA7\xDB\xB8\xAB\xE3\x6B\xA6\x6C" -"\x6F\x4E\x52\x2A\x34\x84\x60\x73" -"\xEB\x8A\x4A\xE8\x8C\x70\x0E\x75" -"\xBA\xBE\xE6\x6E\xD5\xF6\x47\x76" -"\x92\x9E\x7F\xDA\x3F\x29\xB7\x7F" -"\x3F\x27\x4E\x07\x8A\xA0\xC9\x87" -"\xB8\x5D\xE8\xC7\xB0\x5D\xA9\x8D" -"\x1C\x0D\xC8\xB8\x28\xF7\x92\x93" -"\x95\x6F\xCE\x1C\xE0\xD4\xC3\x97" -"\xF5\x5F\x6F\xC1\xFA\x51\xA3\x98" -"\x20\x37\x29\xD0\x5B\x50\x75\xA3" -"\x2D\x63\xB5\x71\x0A\xC1\x10\xA8" -"\x4E\x6A\xD4\x92\x3F\x71\xDD\xA8" -"\xEB\x45\x33\xDF\xF4\x78\x78\xA9" -"\x21\x52\x8E\x40\x78\x4D\xCA\xA9" -"\xD0\x72\x55\x89\xCA\xAB\x60\xBD" -"\x7A\x55\x87\x90\xA3\x40\x10\xC5" -"\xB6\x5F\x84\x12\x63\x4B\xD9\xC6" -"\x7C\x73\x3C\xB3\x77\xEA\xBF\xC8" -"\x44\xA9\xC7\x11\xBC\xAE\x72\xD1" -"\x4E\x8E\x05\x11\x15\x5A\xC9\xD6" -"\x31\xFD\xE6\x93\x6B\xB6\x68\xE2" -"\x32\x87\xF4\xBF\xC9\x2D\x3B\xE4" -"\x29\xC8\xDF\xD9\xEB\xAE\x40\xEB" -"\xD3\xE6\xBD\xCF\xD8\x40\x09\xF1" -"\x81\x4D\x6D\x70\x56\xCB\x52\xF1" -"\xD9\xDF\x3F\xB9\xD4\x33\x68\xF1" -"\xD8\x0B\xFF\xE4\xBB\xFA\xA1\xF9" -"\x0B\x6C\x6A\x8A\x7C\xB4\x06\xFC" -"\x01\x00\x00\x00\x00" -"\x02\x00\x00\x00\x00\x00" -"\x04\x00\x00\x00\x00\x00\x00\x00" -"\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" -"\x0c\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" -"\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" -"\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00" diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_data.zip b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_data.zip new file mode 100644 index 0000000000000000000000000000000000000000..511d6be1007d216c6db3e8893f01359a12d4bbdc GIT binary patch literal 14957 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 literal 0 HcmV?d00001 diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_seed_corpus.zip b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_seed_corpus.zip deleted file mode 100644 index 51bf4be9312954261d0e9564aa905726b9af375b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5854 zcmb7{eQcH09mk*RZSm4J&Nxhqkj((fOWAtf&vP7%E=&<2Qmdk(g`QVkHrGyCtpu>> zUPxM%;S3thkTKctr5W2Yv5m8IY$CBE!XMk1iOXP9R-6N}30ZVIw`@1h)9tzU*qh$m zd;d7kC*Sk?eShCy%d&h`O;r4we&6QS@elubtB!nHe|>F<*PcQ zQ!m#3Wb3ED;r1|Wn z_Dw*%>#aGrB9HgQ@`zqIfGI=FDTlFQiW=>pC72luu`^T&fUV}05CI?f>ql?Ab>$C6 zqTKZ6r}5acYd;)2aeKp-{bXjx^Bt$>uDbBpp>2cc?v>Zv0w$pD?)o_c9`l;=s7@j+ zu$4q`g@HyqrW7*69OIaBNti*734$u2?mafdp1S+TukM<+W%NLARor{_n>+2mz1wb| zvUwEbW{egdd%CIH9(|#IpnU=;d2-$R#cQunmqH+JBml;F?X;0f$4&_h6q1BGNfZP^ z11>9pmg@5IEu)3~b<>;I51)DW+l%{lt{gsl=GlSePd)zTrF9b!AH8;Ip@{go@>*hp z2}6n!VHlFaaLNUZ1(VQW1O*haF;#8K+_*D8^J9252S3Qbk_o zD>9nd+?(G#^uX&Y51pg;PaUtxUuM_jvFd@V1NxjpgrL+EnV2{LnT`ST79?VCqH)Z) zbeKsgK4zcKfBwzEu@-lROq#Xl;6nA%8%_Th`1+}LGFHR3Pu6l`W}s@#k$lcWCF5i$3$ns$8ZI-MRYch9X~FflqSb zpy7&I=~T=tL+)~bKmyw z9+~UeM0q}qoFzn3!M#$*t7#328BknGi+$U8X75C>;#e&4ZLKQ|7iM^$%ng0D<(aLk zdH}{?Ye#bjvw}-MAB$8xwnq4bp@0|HRqX4Mg0025-5=#H zx_sl%o&Q|(_7%IAf{)hkZam^_S9N}Z`8?_h-Ax|w>hh2XLO%i}^CQnushGw9s@VAc zK#V&-)s51O8&RnYOXgFPpZAC8k8PrU_P<^iCuZxJ zgpgiJfQhqMNa?-NvstU1w2)|G2`BpF>8KX};>hp28t?ecgTJl&WWx=|vxZ^AwL`B4 z*mtZgM%2$jteuFdQ+{GQA276zF*HySYq__{xDsSKrhVnKd3eVwGrqhqzx9dMbK5r@ zeQd?aZ2O-4OwarfJq4p03rZ>C)K3nL%zM)woVNGv z<y7)@l!+y$S?*Z7P6f7?jI`0r74arE97iXSs~lj`%k$%OTwWm)m?tj*-V zhey%(H{FnZc=((gGlH8Bt(BcQ;F~`APgd%?2`~pRhbasIX?^{o!yfVhqEEVlYAIN zI+Z6OHdJRS5uVY*Akuj|2{C6LkR0G7!NLI}9S7oRbiDU6`pvc#aN( zNQdJjL`@+RB0MUGL8KFK65_dRi10id29ZvyI~ON_?m?HAR8h)%!Wav zGinlIn@=RC^POqAC8hzzg1A HSN!&GG Date: Thu, 8 Apr 2021 22:16:53 -0700 Subject: [PATCH 05/12] Add config to build docker images and shared fuzz logic --- .../codebuild/github_ci_fuzzing_omnibus.yaml | 16 ++++ .../ci/codebuild/linux-x86/run_cryptofuzz.yml | 14 +++ tests/ci/common_fuzz.sh | 86 ++++++++++++++++- .../build_cryptofuzz_modules.sh | 10 +- .../cryptofuzz_data.zip | Bin .../docker_images/linux-aarch/build_images.sh | 1 + .../ubuntu-20.04_cryptofuzz/Dockerfile | 25 +++++ .../ubuntu-20.04_cryptofuzz/Dockerfile | 2 +- tests/ci/run_cryptofuzz.sh | 39 +++++--- tests/ci/run_fuzz_tests.sh | 87 +----------------- 10 files changed, 178 insertions(+), 102 deletions(-) create mode 100644 tests/ci/codebuild/linux-x86/run_cryptofuzz.yml rename tests/ci/docker_images/{linux-x86/ubuntu-20.04_cryptofuzz => }/build_cryptofuzz_modules.sh (86%) rename tests/ci/docker_images/{linux-x86/ubuntu-20.04_cryptofuzz => }/cryptofuzz_data.zip (100%) create mode 100644 tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile diff --git a/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml b/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml index 2e7784499a..39ebced766 100644 --- a/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml +++ b/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml @@ -22,3 +22,19 @@ batch: privileged-mode: true compute-type: BUILD_GENERAL1_LARGE image: ARM_ECR_REPO_PLACEHOLDER:ubuntu-20.04_clang-10x_latest + + - identifier: ubuntu2004_clang10_x86_64_cryptofuzz + buildspec: ./tests/ci/codebuild/linux-x86/run_cryptofuzz.yml + env: + type: LINUX_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_LARGE + image: X86_ECR_REPO_PLACEHOLDER:ubuntu-20.04_clang-10x_latest + + - identifier: ubuntu2004_clang10_arm_cryptofuzz + buildspec: ./tests/ci/codebuild/linux-x86/run_cryptofuzz.yml + env: + type: ARM_CONTAINER + privileged-mode: true + compute-type: BUILD_GENERAL1_LARGE + image: ARM_ECR_REPO_PLACEHOLDER:ubuntu-20.04_clang-10x_latest \ No newline at end of file diff --git a/tests/ci/codebuild/linux-x86/run_cryptofuzz.yml b/tests/ci/codebuild/linux-x86/run_cryptofuzz.yml new file mode 100644 index 0000000000..f555e4e6eb --- /dev/null +++ b/tests/ci/codebuild/linux-x86/run_cryptofuzz.yml @@ -0,0 +1,14 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 + +version: 0.2 + +phases: + pre_build: + commands: + # To use this build spec file, CMake environment variable CC and CXX compiler should be defined before build. + - if [[ -z "${CC+x}" || -z "${CC}" ]]; then echo "CC is not defined." && exit 1; else ${CC} --version && echo "Found correct CC."; fi + - if [[ -z "${CXX+x}" || -z "${CXX}" ]]; then echo "CXX is not defined." && exit 1; else ${CXX} --version && echo "Found correct CXX."; fi + build: + commands: + - ./tests/ci/run_cryptofuzz.sh diff --git a/tests/ci/common_fuzz.sh b/tests/ci/common_fuzz.sh index 816e7edd65..ec7e33cde3 100644 --- a/tests/ci/common_fuzz.sh +++ b/tests/ci/common_fuzz.sh @@ -18,6 +18,12 @@ else fi echo "$BUILD_ID" +PLATFORM=$(uname -m) +DATE_NOW="$(date +%Y-%m-%d)" +FAILURE_ROOT="${CORPUS_ROOT}/runs/${DATE_NOW}/${BUILD_ID}" +ALL_RUN_ROOT="${BUILD_ROOT}/fuzz_run_root" +rm -rf "$ALL_RUN_ROOT" + function put_metric_count { put_metric --unit Count "$@" } @@ -25,9 +31,87 @@ function put_metric_count { function put_metric { # This call to publish the metric could fail but we don't want to fail the build +e turns off exit on error set +e - aws cloudwatch put-metric-data \ + echo aws cloudwatch put-metric-data \ --namespace AWS-LC-Fuzz \ "$@" || echo "Publishing metric failed, continuing with the rest of the build" # Turn it back on for the rest of the build set -e } + +function run_fuzz_test { + SHARED_CORPUS="${CORPUS_ROOT}/shared_corpus/${FUZZ_NAME}/shared_corpus" + FUZZ_TEST_ROOT="${ALL_RUN_ROOT}/${FUZZ_NAME}" + FUZZ_TEST_CORPUS="${FUZZ_TEST_ROOT}/run_corpus" + ARTIFACTS_FOLDER="${FUZZ_TEST_ROOT}/artifacts" + FUZZ_RUN_LOGS="${FUZZ_TEST_ROOT}/logs" + SUMMARY_LOG="${FUZZ_RUN_LOGS}/summary.log" + mkdir -p "$SHARED_CORPUS" "$FUZZ_TEST_ROOT" "$FUZZ_TEST_CORPUS" "$ARTIFACTS_FOLDER" "$FUZZ_RUN_LOGS" + + + # Calculate starting metrics and post to CloudWatch + ORIGINAL_SHARED_CORPUS_FILE_COUNT=$(find "$SHARED_CORPUS" -type f | wc -l) + put_metric_count --metric-name SharedCorpusFileCount --value "$ORIGINAL_SHARED_CORPUS_FILE_COUNT" --dimensions "FuzzTest=$FUZZ_NAME" + + # Perform the actual fuzzing! + # Step 1 run each fuzz test for the determined time. This will use the existing shared corpus (in EFS) and any files + # checked into the GitHub corpus. This runs the fuzzer with three folders: the first folder is where new inputs will + # go (FUZZ_TEST_CORPUS), all other folders will be used as input (SHARED_CORPUS and SRC_CORPUS). It will write new + # files to the temporary run corpus. + # https://llvm.org/docs/LibFuzzer.html#options + # + # Run with NUM_CPU_THREADS which will be physical cores on ARM and virtualized cores on x86 with hyper threading. + # Looking at the overall system fuzz rate running 1:1 with virtualized cores provides a noticeable speed up. This + # is slightly different than libfuzzer's recommendation of #cores/2. + # This could fail and we want to capture that (+e) + set +e + FUZZ_RUN_FAILURE=0 + time "./${FUZZ_TEST_PATH}" -print_final_stats=1 -timeout=5 -max_total_time="$TIME_FOR_EACH_FUZZ" \ + -jobs="$NUM_CPU_THREADS" -workers="$NUM_CPU_THREADS" \ + -artifact_prefix="$ARTIFACTS_FOLDER/" \ + "$FUZZ_TEST_CORPUS" "$SHARED_CORPUS" "$SRC_CORPUS" 2>&1 | tee "$SUMMARY_LOG" + # This gets the status of the fuzz run which determines if we want to fail the build or not, otherwise we'd get the results of tee + if [ "${PIPESTATUS[0]}" == 1 ]; then + FUZZ_RUN_FAILURE=1 + fi + set -e + + # The libfuzzer logs are written to the current working directory and need to be moved after the test is done + mv ./*.log "${FUZZ_RUN_LOGS}/." + + if [ "$FUZZ_RUN_FAILURE" == 1 ]; then + FUZZ_TEST_FAILURE_ROOT="${FAILURE_ROOT}/${FUZZ_NAME}" + mkdir -p "$FUZZ_TEST_FAILURE_ROOT" + + cp -r "$FUZZ_TEST_ROOT" "$FAILURE_ROOT" + + # If this fuzz run has failed the below metrics wont make a lot of sense, it could fail on the first input and publish a TestCount of 1 which makes all the metrics look weird + echo "${FUZZ_NAME} failed, see the above output for details. For all the logs see ${FAILURE_ROOT} in EFS" + exit 1 + else + echo "Fuzz test ${FUZZ_NAME} finished successfully, not copying run logs and run corpus" + fi + + # Step 2 merge any new files from the run corpus and GitHub src corpus into the shared corpus (EFS) + time "./${FUZZ_TEST_PATH}" -merge=1 "$SHARED_CORPUS" "$FUZZ_TEST_CORPUS" "$SRC_CORPUS" + + # Calculate interesting metrics and post results to CloudWatch + FINAL_SHARED_CORPUS_FILE_COUNT=$(find "$SHARED_CORPUS" -type f | wc -l) + put_metric_count --metric-name SharedCorpusFileCount --value "$FINAL_SHARED_CORPUS_FILE_COUNT" --dimensions "FuzzTest=$FUZZ_NAME" + + NEW_FUZZ_FILES=$(find "$FUZZ_TEST_CORPUS" -type f | wc -l) + put_metric_count --metric-name RunCorpusFileCount --value "$NEW_FUZZ_FILES" --dimensions "FuzzTest=$FUZZ_NAME,Platform=$PLATFORM" + + TEST_COUNT=$(grep -o "stat::number_of_executed_units: [0-9]*" "$SUMMARY_LOG" | awk '{test_count += $2} END {print test_count}') + put_metric_count --metric-name TestCount --value "$TEST_COUNT" --dimensions "FuzzTest=$FUZZ_NAME,Platform=$PLATFORM" + + TESTS_PER_SECOND=$((TEST_COUNT/TIME_FOR_EACH_FUZZ)) + put_metric --metric-name TestRate --value "$TESTS_PER_SECOND" --unit Count/Second --dimensions "FuzzTest=$FUZZ_NAME,Platform=$PLATFORM" + + FEATURE_COVERAGE=$(grep -o "ft: [0-9]*" "$SUMMARY_LOG" | awk '{print $2}' | sort | tail -1) + put_metric_count --metric-name FeatureCoverage --value "$FEATURE_COVERAGE" --dimensions "FuzzTest=$FUZZ_NAME,Platform=$PLATFORM" + + BLOCK_COVERAGE=$(grep -o "cov: [0-9]*" "$SUMMARY_LOG" | awk '{print $2}' | sort | tail -1) + put_metric_count --metric-name BlockCoverage --value "$BLOCK_COVERAGE" --dimensions "FuzzTest=$FUZZ_NAME,Platform=$PLATFORM" + + echo "${FUZZ_NAME} starting shared ${ORIGINAL_SHARED_CORPUS_FILE_COUNT} final shared ${FINAL_SHARED_CORPUS_FILE_COUNT} new files ${NEW_FUZZ_FILES} total test count ${TEST_COUNT} test rate ${TESTS_PER_SECOND} code coverage ${BLOCK_COVERAGE} feature coverage ${FEATURE_COVERAGE}" +} diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh b/tests/ci/docker_images/build_cryptofuzz_modules.sh similarity index 86% rename from tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh rename to tests/ci/docker_images/build_cryptofuzz_modules.sh index da4a9a2524..6ca2ce8bc9 100755 --- a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/build_cryptofuzz_modules.sh +++ b/tests/ci/docker_images/build_cryptofuzz_modules.sh @@ -16,15 +16,18 @@ MODULES_ROOT="${FUZZ_ROOT}/modules" git clone https://github.com/guidovranken/cryptofuzz.git cd cryptofuzz git checkout 76ffeff944403cdd840f06b8fc42e131e6258f36 +git rev-parse HEAD CRYPTOFUZZ_SRC=$(pwd) python3 gen_repository.py mkdir "$MODULES_ROOT" cd "$MODULES_ROOT" +# Setup the other crypto libraries for differential fuzzing # Botan https://github.com/guidovranken/cryptofuzz/blob/master/docs/botan.md git clone --depth 1 https://github.com/randombit/botan.git cd botan +git rev-parse HEAD python3 configure.py --cc-bin=$CXX --cc-abi-flags="$CXXFLAGS" --disable-shared --disable-modules=locking_allocator,x509,tls --build-targets=static --without-documentation make -j$(nproc) export CXXFLAGS="$CXXFLAGS -DCRYPTOFUZZ_BOTAN" @@ -37,6 +40,7 @@ make -j$(nproc) cd "$MODULES_ROOT" git clone --depth 1 https://github.com/weidai11/cryptopp.git cd cryptopp/ +git rev-parse HEAD make libcryptopp.a -j$(nproc) export CXXFLAGS="$CXXFLAGS -DCRYPTOFUZZ_CRYPTOPP" env LIBCRYPTOPP_A_PATH `realpath libcryptopp.a` @@ -44,10 +48,10 @@ env CRYPTOPP_INCLUDE_PATH `realpath .` cd "${CRYPTOFUZZ_SRC}/modules/cryptopp/" make -# Copy over the seed corpus +# Extract the seed corpus, docker layers are already compressed so this won't use any more space and save time when running cd "$FUZZ_ROOT" -unzip cryptofuzz_seed_corpus.zip -rm cryptofuzz_seed_corpus.zip +unzip cryptofuzz_data.zip +rm cryptofuzz_data.zip env CRYPTOFUZZ_SEED_CORPUS `realpath cryptofuzz_seed_corpus` env CRYPTOFUZZ_DICT `realpath cryptofuzz-dict.txt` diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_data.zip b/tests/ci/docker_images/cryptofuzz_data.zip similarity index 100% rename from tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/cryptofuzz_data.zip rename to tests/ci/docker_images/cryptofuzz_data.zip diff --git a/tests/ci/docker_images/linux-aarch/build_images.sh b/tests/ci/docker_images/linux-aarch/build_images.sh index 7b19a17335..a8d2da4313 100755 --- a/tests/ci/docker_images/linux-aarch/build_images.sh +++ b/tests/ci/docker_images/linux-aarch/build_images.sh @@ -12,3 +12,4 @@ docker build -t ubuntu-20.04-aarch:clang-7x ubuntu-20.04_clang-7x docker build -t ubuntu-20.04-aarch:clang-8x ubuntu-20.04_clang-8x docker build -t ubuntu-20.04-aarch:clang-9x ubuntu-20.04_clang-9x docker build -t ubuntu-20.04-aarch:clang-10x ubuntu-20.04_clang-10x +docker build -t ubuntu-20.04:cryptofuzz ubuntu-20.04_cryptofuzz diff --git a/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile b/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile new file mode 100644 index 0000000000..7e46d083e6 --- /dev/null +++ b/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile @@ -0,0 +1,25 @@ +# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. +# SPDX-License-Identifier: Apache-2.0 + +FROM ubuntu-20.04:clang-10x + +SHELL ["/bin/bash", "-c"] + +RUN set -ex && \ + apt-get update && \ + apt-get -y --no-install-recommends upgrade && \ + apt-get -y --no-install-recommends install \ + make \ + libboost-all-dev \ + unzip && \ + apt-get autoremove --purge -y && \ + apt-get clean && \ + apt-get autoclean && \ + rm -rf /var/lib/apt/lists/* && \ + rm -rf /tmp/* + +ENV FUZZ_ROOT=${DEPENDENCIES_DIR} +ENV MODULE_ROOT="${FUZZ_ROOT}/modules" + +COPY ../build_cryptofuzz_modules.sh ../cryptofuzz_data.zip $FUZZ_ROOT/ +RUN set -ex && cd $FUZZ_ROOT && "./build_cryptofuzz_modules.sh" diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile index 6811e428f2..7e46d083e6 100644 --- a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile @@ -21,5 +21,5 @@ RUN set -ex && \ ENV FUZZ_ROOT=${DEPENDENCIES_DIR} ENV MODULE_ROOT="${FUZZ_ROOT}/modules" -COPY build_cryptofuzz_modules.sh cryptofuzz_seed_data.zip $FUZZ_ROOT/ +COPY ../build_cryptofuzz_modules.sh ../cryptofuzz_data.zip $FUZZ_ROOT/ RUN set -ex && cd $FUZZ_ROOT && "./build_cryptofuzz_modules.sh" diff --git a/tests/ci/run_cryptofuzz.sh b/tests/ci/run_cryptofuzz.sh index 3bf4a77eca..edd660ba63 100755 --- a/tests/ci/run_cryptofuzz.sh +++ b/tests/ci/run_cryptofuzz.sh @@ -3,38 +3,47 @@ set -exo pipefail # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 +# Sourcing these files check for environment variables which may be unset so wait to enable -u source tests/ci/common_fuzz.sh source "${FUZZ_ROOT}/fuzz_env.sh" +# After loading everything any undefined variables should fail the build +set -u +rm -rf "$BUILD_ROOT" mkdir -p "$BUILD_ROOT" cd "$BUILD_ROOT" # Build AWS-LC based on https://github.com/guidovranken/cryptofuzz/blob/master/docs/openssl.md -cmake -DCMAKE_CXX_FLAGS="$CXXFLAGS" -DCMAKE_C_FLAGS="$CFLAGS" -DBORINGSSL_ALLOW_CXX_RUNTIME=1 -GNinja ../ +cmake -DCMAKE_CXX_FLAGS="$CXXFLAGS" -DCMAKE_C_FLAGS="$CFLAGS" -DBORINGSSL_ALLOW_CXX_RUNTIME=1 \ + -GNinja -DBUILD_TESTING=OFF -DBUILD_LIBSSL=OFF ../ ninja cd ../ export CXXFLAGS="$CXXFLAGS -DCRYPTOFUZZ_BORINGSSL" export OPENSSL_INCLUDE_PATH=`realpath include/` -export OPENSSL_LIBCRYPTO_A_PATH=`realpath build/crypto/libcrypto.a` +export OPENSSL_LIBCRYPTO_A_PATH=`realpath ${BUILD_ROOT}/crypto/libcrypto.a` +# Build the common OpenSSL module with AWS-LC cd "${CRYPTOFUZZ_SRC}/modules/openssl" make "-j${NUM_CPU_THREADS}" export CFLAGS="${CFLAGS} -I $OPENSSL_INCLUDE_PATH" export CXXFLAGS="${CXXFLAGS} -I $OPENSSL_INCLUDE_PATH" +export LIBFUZZER_LINK="-fsanitize=fuzzer" +# Build the overall cryptofuzz binary cd "$CRYPTOFUZZ_SRC" -make - -FUZZ_TEST_ROOT="${BUILD_ROOT}/fuzz_run_root" -FUZZ_TEST_CORPUS="${FUZZ_TEST_ROOT}/run_corpus" -SHARED_CORPUS="${CORPUS_ROOT}/shared_corpus/${FUZZ_NAME}/shared_corpus" -ARTIFACTS_FOLDER="${FUZZ_TEST_ROOT}/artifacts" -FUZZ_RUN_LOGS="${FUZZ_TEST_ROOT}/logs" -SUMMARY_LOG="${FUZZ_RUN_LOGS}/summary.log" -FAILURE_ROOT="${CORPUS_ROOT}/runs/${DATE_NOW}/${BUILD_ID}" - -mkdir -p "$SHARED_CORPUS" "$FUZZ_TEST_ROOT" "$FUZZ_TEST_CORPUS" "$ARTIFACTS_FOLDER" "$FUZZ_RUN_LOGS" +make "-j${NUM_CPU_THREADS}" -./cryptofuzz -print_final_stats=1 -timeout=5 -max_total_time=60 -dict "$CRYPTOFUZZ_DICT" \ - "$FUZZ_TEST_CORPUS" "$SHARED_CORPUS" "$CRYPTOFUZZ_SEED_CORPUS" 2>&1 | tee "$SUMMARY_LOG" \ No newline at end of file +# Common AWS-LC fuzzing setup, the cryptofuzz binary is in this folder so FUZZ_TEST_PATH=FUZZ_NAME +FUZZ_NAME="cryptofuzz" +FUZZ_TEST_PATH="$FUZZ_NAME" +SRC_CORPUS="$CRYPTOFUZZ_SEED_CORPUS" +# Perform the actual fuzzing. We want the total build time to be about an hour: +# 4 minutes for building AWS-LC and Cryptofuzz +# 55 minutes of fuzzing +# 1 minutes of cleanup +#TIME_FOR_EACH_FUZZ=3300 +TIME_FOR_EACH_FUZZ=60 + +# Call the common fuzzing logic +run_fuzz_test \ No newline at end of file diff --git a/tests/ci/run_fuzz_tests.sh b/tests/ci/run_fuzz_tests.sh index f3c3de7c1d..3939e00a77 100755 --- a/tests/ci/run_fuzz_tests.sh +++ b/tests/ci/run_fuzz_tests.sh @@ -3,17 +3,14 @@ set -exo pipefail # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 +# Sourcing these files check for environment variables which may be unset so wait to enable -u source tests/ci/common_fuzz.sh +# After loading everything any undefined variables should fail the build +set -u echo "Building fuzz tests." run_build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DFUZZ=1 -DASAN=1 -PLATFORM=$(uname -m) -DATE_NOW="$(date +%Y-%m-%d)" -FAILURE_ROOT="${CORPUS_ROOT}/runs/${DATE_NOW}/${BUILD_ID}" -ALL_RUN_ROOT="${BUILD_ROOT}/fuzz_run_root" -rm -rf "$ALL_RUN_ROOT" - # We want our CI to take about an hour: # ~2 minutes to build AWS-LC # ~50 minutes (3000 seconds) for all fuzzing @@ -24,83 +21,9 @@ FUZZ_TESTS=$(find test_build_dir/fuzz -type f -executable) NUM_FUZZ_TESTS=$(echo "$FUZZ_TESTS" | wc -l) TIME_FOR_EACH_FUZZ=$((TOTAL_FUZZ_TEST_TIME/NUM_FUZZ_TESTS)) -for FUZZ_TEST in $FUZZ_TESTS;do - FUZZ_RUN_FAILURE=0 +for FUZZ_TEST_PATH in $FUZZ_TESTS;do FUZZ_NAME=$(basename "$FUZZ_TEST") - SRC_CORPUS="${SRC_ROOT}/fuzz/${FUZZ_NAME}_corpus" - SHARED_CORPUS="${CORPUS_ROOT}/shared_corpus/${FUZZ_NAME}/shared_corpus" - - FUZZ_TEST_ROOT="${ALL_RUN_ROOT}/${FUZZ_NAME}" - FUZZ_TEST_CORPUS="${FUZZ_TEST_ROOT}/run_corpus" - ARTIFACTS_FOLDER="${FUZZ_TEST_ROOT}/artifacts" - FUZZ_RUN_LOGS="${FUZZ_TEST_ROOT}/logs" - SUMMARY_LOG="${FUZZ_RUN_LOGS}/summary.log" - mkdir -p "$SHARED_CORPUS" "$FUZZ_TEST_ROOT" "$FUZZ_TEST_CORPUS" "$ARTIFACTS_FOLDER" "$FUZZ_RUN_LOGS" - - # Calculate starting metrics and post to CloudWatch - ORIGINAL_SHARED_CORPUS_FILE_COUNT=$(find "$SHARED_CORPUS" -type f | wc -l) - put_metric_count --metric-name SharedCorpusFileCount --value "$ORIGINAL_SHARED_CORPUS_FILE_COUNT" --dimensions "FuzzTest=$FUZZ_NAME" - - # Perform the actual fuzzing! - # Step 1 run each fuzz test for the determined time. This will use the existing shared corpus (in EFS) and any files - # checked into the GitHub corpus. This runs the fuzzer with three folders: the first folder is where new inputs will - # go (FUZZ_TEST_CORPUS), all other folders will be used as input (SHARED_CORPUS and SRC_CORPUS). It will write new - # files to the temporary run corpus. - # https://llvm.org/docs/LibFuzzer.html#options - # - # Run with NUM_CPU_THREADS which will be physical cores on ARM and virtualized cores on x86 with hyper threading. - # Looking at the overall system fuzz rate running 1:1 with virtualized cores provides a noticeable speed up. This - # is slightly different than libfuzzer's recommendation of #cores/2. - # This could fail and we want to capture that (+e) - set +e - time ${FUZZ_TEST} -print_final_stats=1 -timeout=5 -max_total_time="$TIME_FOR_EACH_FUZZ" \ - -jobs="$NUM_CPU_THREADS" -workers="$NUM_CPU_THREADS" \ - -artifact_prefix="$ARTIFACTS_FOLDER/" \ - "$FUZZ_TEST_CORPUS" "$SHARED_CORPUS" "$SRC_CORPUS" 2>&1 | tee "$SUMMARY_LOG" - # This gets the status of the fuzz run which determines if we want to fail the build or not, otherwise we'd get the results of tee - if [ "${PIPESTATUS[0]}" == 1 ]; then - FUZZ_RUN_FAILURE=1 - fi - set -e - - # The libfuzzer logs are written to the current working directory and need to be moved after the test is done - mv ./*.log "${FUZZ_RUN_LOGS}/." - - if [ "$FUZZ_RUN_FAILURE" == 1 ]; then - FUZZ_TEST_FAILURE_ROOT="${FAILURE_ROOT}/${FUZZ_NAME}" - mkdir -p "$FUZZ_TEST_FAILURE_ROOT" - - cp -r "$FUZZ_TEST_ROOT" "$FAILURE_ROOT" - - # If this fuzz run has failed the below metrics wont make a lot of sense, it could fail on the first input and publish a TestCount of 1 which makes all the metrics look weird - echo "${FUZZ_NAME} failed, see the above output for details. For all the logs see ${FAILURE_ROOT} in EFS" - exit 1 - else - echo "Fuzz test ${FUZZ_NAME} finished successfully, not copying run logs and run corpus" - fi - - # Step 2 merge any new files from the run corpus and GitHub src corpus into the shared corpus (EFS) - time ${FUZZ_TEST} -merge=1 "$SHARED_CORPUS" "$FUZZ_TEST_CORPUS" "$SRC_CORPUS" - - # Calculate interesting metrics and post results to CloudWatch - FINAL_SHARED_CORPUS_FILE_COUNT=$(find "$SHARED_CORPUS" -type f | wc -l) - put_metric_count --metric-name SharedCorpusFileCount --value "$FINAL_SHARED_CORPUS_FILE_COUNT" --dimensions "FuzzTest=$FUZZ_NAME" - - NEW_FUZZ_FILES=$(find "$FUZZ_TEST_CORPUS" -type f | wc -l) - put_metric_count --metric-name RunCorpusFileCount --value "$NEW_FUZZ_FILES" --dimensions "FuzzTest=$FUZZ_NAME,Platform=$PLATFORM" - - TEST_COUNT=$(grep -o "stat::number_of_executed_units: [0-9]*" "$SUMMARY_LOG" | awk '{test_count += $2} END {print test_count}') - put_metric_count --metric-name TestCount --value "$TEST_COUNT" --dimensions "FuzzTest=$FUZZ_NAME,Platform=$PLATFORM" - - TESTS_PER_SECOND=$((TEST_COUNT/TOTAL_FUZZ_TEST_TIME)) - put_metric --metric-name TestRate --value "$TESTS_PER_SECOND" --unit Count/Second --dimensions "FuzzTest=$FUZZ_NAME,Platform=$PLATFORM" - - FEATURE_COVERAGE=$(grep -o "ft: [0-9]*" "$SUMMARY_LOG" | awk '{print $2}' | sort | tail -1) - put_metric_count --metric-name FeatureCoverage --value "$FEATURE_COVERAGE" --dimensions "FuzzTest=$FUZZ_NAME,Platform=$PLATFORM" - - BLOCK_COVERAGE=$(grep -o "cov: [0-9]*" "$SUMMARY_LOG" | awk '{print $2}' | sort | tail -1) - put_metric_count --metric-name BlockCoverage --value "$BLOCK_COVERAGE" --dimensions "FuzzTest=$FUZZ_NAME,Platform=$PLATFORM" - echo "${FUZZ_NAME} starting shared ${ORIGINAL_SHARED_CORPUS_FILE_COUNT} final shared ${FINAL_SHARED_CORPUS_FILE_COUNT} new files ${NEW_FUZZ_FILES} total test count ${TEST_COUNT} test rate ${TESTS_PER_SECOND} code coverage ${BLOCK_COVERAGE} feature coverage ${FEATURE_COVERAGE}" + run_fuzz_tes done From 47fe92ce092202e71c97f15326649ec38da3138b Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Thu, 8 Apr 2021 22:37:03 -0700 Subject: [PATCH 06/12] Final cleanup --- tests/ci/run_cryptofuzz.sh | 5 ++--- tests/ci/run_fuzz_tests.sh | 10 ++++------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/tests/ci/run_cryptofuzz.sh b/tests/ci/run_cryptofuzz.sh index edd660ba63..50271e67e4 100755 --- a/tests/ci/run_cryptofuzz.sh +++ b/tests/ci/run_cryptofuzz.sh @@ -15,7 +15,7 @@ cd "$BUILD_ROOT" # Build AWS-LC based on https://github.com/guidovranken/cryptofuzz/blob/master/docs/openssl.md cmake -DCMAKE_CXX_FLAGS="$CXXFLAGS" -DCMAKE_C_FLAGS="$CFLAGS" -DBORINGSSL_ALLOW_CXX_RUNTIME=1 \ - -GNinja -DBUILD_TESTING=OFF -DBUILD_LIBSSL=OFF ../ + -GNinja -DBUILD_TESTING=OFF -DBUILD_LIBSSL=OFF -DCMAKE_BUILD_TYPE=RelWithDebInfo ../ ninja cd ../ export CXXFLAGS="$CXXFLAGS -DCRYPTOFUZZ_BORINGSSL" @@ -42,8 +42,7 @@ SRC_CORPUS="$CRYPTOFUZZ_SEED_CORPUS" # 4 minutes for building AWS-LC and Cryptofuzz # 55 minutes of fuzzing # 1 minutes of cleanup -#TIME_FOR_EACH_FUZZ=3300 -TIME_FOR_EACH_FUZZ=60 +TIME_FOR_EACH_FUZZ=3300 # Call the common fuzzing logic run_fuzz_test \ No newline at end of file diff --git a/tests/ci/run_fuzz_tests.sh b/tests/ci/run_fuzz_tests.sh index 3939e00a77..5495ed6588 100755 --- a/tests/ci/run_fuzz_tests.sh +++ b/tests/ci/run_fuzz_tests.sh @@ -5,12 +5,10 @@ set -exo pipefail # Sourcing these files check for environment variables which may be unset so wait to enable -u source tests/ci/common_fuzz.sh +# Running the build also checks for unset variables +run_build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DFUZZ=1 -DASAN=1 -DBUILD_TESTING=OFF # After loading everything any undefined variables should fail the build set -u - -echo "Building fuzz tests." -run_build -DCMAKE_BUILD_TYPE=RelWithDebInfo -DFUZZ=1 -DASAN=1 - # We want our CI to take about an hour: # ~2 minutes to build AWS-LC # ~50 minutes (3000 seconds) for all fuzzing @@ -22,8 +20,8 @@ NUM_FUZZ_TESTS=$(echo "$FUZZ_TESTS" | wc -l) TIME_FOR_EACH_FUZZ=$((TOTAL_FUZZ_TEST_TIME/NUM_FUZZ_TESTS)) for FUZZ_TEST_PATH in $FUZZ_TESTS;do - FUZZ_NAME=$(basename "$FUZZ_TEST") + FUZZ_NAME=$(basename "$FUZZ_TEST_PATH") SRC_CORPUS="${SRC_ROOT}/fuzz/${FUZZ_NAME}_corpus" - run_fuzz_tes + run_fuzz_test done From 3aebcc7cbe7268d858df763dc218c9ac380be7c5 Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Thu, 8 Apr 2021 22:41:14 -0700 Subject: [PATCH 07/12] Add cryptofuzz to build and push step --- tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml | 2 +- tests/ci/common_fuzz.sh | 2 +- tests/ci/docker_images/linux-aarch/build_images.sh | 2 +- tests/ci/docker_images/linux-aarch/push_images.sh | 1 + tests/ci/docker_images/linux-x86/push_images.sh | 1 + 5 files changed, 5 insertions(+), 3 deletions(-) diff --git a/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml b/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml index 39ebced766..c72d247621 100644 --- a/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml +++ b/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml @@ -37,4 +37,4 @@ batch: type: ARM_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_LARGE - image: ARM_ECR_REPO_PLACEHOLDER:ubuntu-20.04_clang-10x_latest \ No newline at end of file + image: ARM_ECR_REPO_PLACEHOLDER:ubuntu-20.04_clang-10x_latest diff --git a/tests/ci/common_fuzz.sh b/tests/ci/common_fuzz.sh index ec7e33cde3..2cf47f7caf 100644 --- a/tests/ci/common_fuzz.sh +++ b/tests/ci/common_fuzz.sh @@ -31,7 +31,7 @@ function put_metric_count { function put_metric { # This call to publish the metric could fail but we don't want to fail the build +e turns off exit on error set +e - echo aws cloudwatch put-metric-data \ + aws cloudwatch put-metric-data \ --namespace AWS-LC-Fuzz \ "$@" || echo "Publishing metric failed, continuing with the rest of the build" # Turn it back on for the rest of the build diff --git a/tests/ci/docker_images/linux-aarch/build_images.sh b/tests/ci/docker_images/linux-aarch/build_images.sh index a8d2da4313..7ec1e74ca9 100755 --- a/tests/ci/docker_images/linux-aarch/build_images.sh +++ b/tests/ci/docker_images/linux-aarch/build_images.sh @@ -12,4 +12,4 @@ docker build -t ubuntu-20.04-aarch:clang-7x ubuntu-20.04_clang-7x docker build -t ubuntu-20.04-aarch:clang-8x ubuntu-20.04_clang-8x docker build -t ubuntu-20.04-aarch:clang-9x ubuntu-20.04_clang-9x docker build -t ubuntu-20.04-aarch:clang-10x ubuntu-20.04_clang-10x -docker build -t ubuntu-20.04:cryptofuzz ubuntu-20.04_cryptofuzz +docker build -t ubuntu-20.04-aarch:cryptofuzz ubuntu-20.04_cryptofuzz diff --git a/tests/ci/docker_images/linux-aarch/push_images.sh b/tests/ci/docker_images/linux-aarch/push_images.sh index 20745a3547..09658522b4 100755 --- a/tests/ci/docker_images/linux-aarch/push_images.sh +++ b/tests/ci/docker_images/linux-aarch/push_images.sh @@ -23,3 +23,4 @@ tag_and_push_img 'ubuntu-20.04-aarch:clang-7x' "${ECS_REPO}:ubuntu-20.04_clang-7 tag_and_push_img 'ubuntu-20.04-aarch:clang-8x' "${ECS_REPO}:ubuntu-20.04_clang-8x" tag_and_push_img 'ubuntu-20.04-aarch:clang-9x' "${ECS_REPO}:ubuntu-20.04_clang-9x" tag_and_push_img 'ubuntu-20.04-aarch:clang-10x' "${ECS_REPO}:ubuntu-20.04_clang-10x" +tag_and_push_img 'ubuntu-20.04-aarch:cryptofuzz' "${ECS_REPO}:ubuntu-20.04_cryptofuzz" diff --git a/tests/ci/docker_images/linux-x86/push_images.sh b/tests/ci/docker_images/linux-x86/push_images.sh index 8c5413552e..94815f992a 100755 --- a/tests/ci/docker_images/linux-x86/push_images.sh +++ b/tests/ci/docker_images/linux-x86/push_images.sh @@ -22,6 +22,7 @@ tag_and_push_img 'ubuntu-20.04:clang-7x' "${ECS_REPO}:ubuntu-20.04_clang-7x" tag_and_push_img 'ubuntu-20.04:clang-8x' "${ECS_REPO}:ubuntu-20.04_clang-8x" tag_and_push_img 'ubuntu-20.04:clang-9x' "${ECS_REPO}:ubuntu-20.04_clang-9x" tag_and_push_img 'ubuntu-20.04:clang-10x' "${ECS_REPO}:ubuntu-20.04_clang-10x" +tag_and_push_img 'ubuntu-20.04:cryptofuzz' "${ECS_REPO}:ubuntu-20.04:cryptofuzz" tag_and_push_img 'ubuntu-20.04:clang-10x_formal-verification' "${ECS_REPO}:ubuntu-20.04_clang-10x_formal-verification" tag_and_push_img 'ubuntu-20.04:gcc-7x' "${ECS_REPO}:ubuntu-20.04_gcc-7x" tag_and_push_img 'ubuntu-20.04:gcc-8x' "${ECS_REPO}:ubuntu-20.04_gcc-8x" From 56befffcb6e98811e55522657ae1a4a31a79ab44 Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Thu, 8 Apr 2021 22:48:13 -0700 Subject: [PATCH 08/12] fix ARM docker tag --- tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml | 4 ++-- tests/ci/docker_images/linux-x86/push_images.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml b/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml index c72d247621..7336d47ab4 100644 --- a/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml +++ b/tests/ci/cdk/cdk/codebuild/github_ci_fuzzing_omnibus.yaml @@ -29,7 +29,7 @@ batch: type: LINUX_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_LARGE - image: X86_ECR_REPO_PLACEHOLDER:ubuntu-20.04_clang-10x_latest + image: X86_ECR_REPO_PLACEHOLDER:ubuntu-20.04_cryptofuzz_latest - identifier: ubuntu2004_clang10_arm_cryptofuzz buildspec: ./tests/ci/codebuild/linux-x86/run_cryptofuzz.yml @@ -37,4 +37,4 @@ batch: type: ARM_CONTAINER privileged-mode: true compute-type: BUILD_GENERAL1_LARGE - image: ARM_ECR_REPO_PLACEHOLDER:ubuntu-20.04_clang-10x_latest + image: ARM_ECR_REPO_PLACEHOLDER:ubuntu-20.04_cryptofuzz_latest diff --git a/tests/ci/docker_images/linux-x86/push_images.sh b/tests/ci/docker_images/linux-x86/push_images.sh index 94815f992a..bf6b10a642 100755 --- a/tests/ci/docker_images/linux-x86/push_images.sh +++ b/tests/ci/docker_images/linux-x86/push_images.sh @@ -22,7 +22,7 @@ tag_and_push_img 'ubuntu-20.04:clang-7x' "${ECS_REPO}:ubuntu-20.04_clang-7x" tag_and_push_img 'ubuntu-20.04:clang-8x' "${ECS_REPO}:ubuntu-20.04_clang-8x" tag_and_push_img 'ubuntu-20.04:clang-9x' "${ECS_REPO}:ubuntu-20.04_clang-9x" tag_and_push_img 'ubuntu-20.04:clang-10x' "${ECS_REPO}:ubuntu-20.04_clang-10x" -tag_and_push_img 'ubuntu-20.04:cryptofuzz' "${ECS_REPO}:ubuntu-20.04:cryptofuzz" +tag_and_push_img 'ubuntu-20.04:cryptofuzz' "${ECS_REPO}:ubuntu-20.04_cryptofuzz" tag_and_push_img 'ubuntu-20.04:clang-10x_formal-verification' "${ECS_REPO}:ubuntu-20.04_clang-10x_formal-verification" tag_and_push_img 'ubuntu-20.04:gcc-7x' "${ECS_REPO}:ubuntu-20.04_gcc-7x" tag_and_push_img 'ubuntu-20.04:gcc-8x' "${ECS_REPO}:ubuntu-20.04_gcc-8x" From 7591c86307101a3e02bf7e03ddf061150f3afaaf Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Thu, 8 Apr 2021 23:32:34 -0700 Subject: [PATCH 09/12] Update CDK version --- tests/ci/cdk/setup.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/ci/cdk/setup.py b/tests/ci/cdk/setup.py index 8bbfa7ad04..4ee0ab5037 100644 --- a/tests/ci/cdk/setup.py +++ b/tests/ci/cdk/setup.py @@ -20,10 +20,10 @@ install_requires=[ # CDK dependencies. - "aws-cdk.core==1.64.0", - "aws-cdk.aws-codebuild==1.64.0", - "aws-cdk.aws-ecr==1.64.0", - "aws-cdk.aws-iam==1.64.0", + "aws-cdk.core==1.97.0", + "aws-cdk.aws-codebuild==1.97.0", + "aws-cdk.aws-ecr==1.97.0", + "aws-cdk.aws-iam==1.97.0", # PyYAML is a YAML parser and emitter for Python. Used to read build_spec.yaml. "pyyaml==5.3.1", # A formatter for Python code. From 5426d5d5ba19f4e27ff17b4087e5e9dd8e5ad40b Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Fri, 9 Apr 2021 00:12:50 -0700 Subject: [PATCH 10/12] Build cryptofuzz docker file with parent folder as context so it has access to seed data --- tests/ci/docker_images/linux-aarch/build_images.sh | 3 ++- .../linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile | 2 +- tests/ci/docker_images/linux-x86/build_images.sh | 3 ++- .../docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/tests/ci/docker_images/linux-aarch/build_images.sh b/tests/ci/docker_images/linux-aarch/build_images.sh index 7ec1e74ca9..22d9cbd746 100755 --- a/tests/ci/docker_images/linux-aarch/build_images.sh +++ b/tests/ci/docker_images/linux-aarch/build_images.sh @@ -12,4 +12,5 @@ docker build -t ubuntu-20.04-aarch:clang-7x ubuntu-20.04_clang-7x docker build -t ubuntu-20.04-aarch:clang-8x ubuntu-20.04_clang-8x docker build -t ubuntu-20.04-aarch:clang-9x ubuntu-20.04_clang-9x docker build -t ubuntu-20.04-aarch:clang-10x ubuntu-20.04_clang-10x -docker build -t ubuntu-20.04-aarch:cryptofuzz ubuntu-20.04_cryptofuzz +# This passes in the Dockerfile in the folder but uses the parent directory for the context so it has access to cryptofuzz_data.zip +docker build -t ubuntu-20.04-aarch:cryptofuzz -f ubuntu-20.04_cryptofuzz/Dockerfile ../ diff --git a/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile b/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile index 7e46d083e6..6ebb01f200 100644 --- a/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile +++ b/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile @@ -21,5 +21,5 @@ RUN set -ex && \ ENV FUZZ_ROOT=${DEPENDENCIES_DIR} ENV MODULE_ROOT="${FUZZ_ROOT}/modules" -COPY ../build_cryptofuzz_modules.sh ../cryptofuzz_data.zip $FUZZ_ROOT/ +COPY build_cryptofuzz_modules.sh cryptofuzz_data.zip $FUZZ_ROOT/ RUN set -ex && cd $FUZZ_ROOT && "./build_cryptofuzz_modules.sh" diff --git a/tests/ci/docker_images/linux-x86/build_images.sh b/tests/ci/docker_images/linux-x86/build_images.sh index 83c15894a9..f12ba75250 100755 --- a/tests/ci/docker_images/linux-x86/build_images.sh +++ b/tests/ci/docker_images/linux-x86/build_images.sh @@ -16,7 +16,8 @@ docker build -t ubuntu-20.04:clang-7x ubuntu-20.04_clang-7x docker build -t ubuntu-20.04:clang-8x ubuntu-20.04_clang-8x docker build -t ubuntu-20.04:clang-9x ubuntu-20.04_clang-9x docker build -t ubuntu-20.04:clang-10x ubuntu-20.04_clang-10x -docker build -t ubuntu-20.04:cryptofuzz ubuntu-20.04_cryptofuzz +# This passes in the Dockerfile in the folder but uses the parent directory for the context so it has access to cryptofuzz_data.zip +docker build -t ubuntu-20.04:cryptofuzz -f ubuntu-20.04_cryptofuzz/Dockerfile ../ docker build -t centos-7:gcc-4x centos-7_gcc-4x docker build -t amazonlinux-2:base amazonlinux-2_base docker build -t amazonlinux-2:gcc-7x amazonlinux-2_gcc-7x diff --git a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile index 7e46d083e6..6ebb01f200 100644 --- a/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile +++ b/tests/ci/docker_images/linux-x86/ubuntu-20.04_cryptofuzz/Dockerfile @@ -21,5 +21,5 @@ RUN set -ex && \ ENV FUZZ_ROOT=${DEPENDENCIES_DIR} ENV MODULE_ROOT="${FUZZ_ROOT}/modules" -COPY ../build_cryptofuzz_modules.sh ../cryptofuzz_data.zip $FUZZ_ROOT/ +COPY build_cryptofuzz_modules.sh cryptofuzz_data.zip $FUZZ_ROOT/ RUN set -ex && cd $FUZZ_ROOT && "./build_cryptofuzz_modules.sh" From 9892daa79e7eef1da4baac388d6b98aae6806c92 Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Fri, 9 Apr 2021 12:25:41 -0700 Subject: [PATCH 11/12] Save fuzz failure binary along with corpus, fix arm cryptofuzz base image --- tests/ci/common_fuzz.sh | 3 ++- .../linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/ci/common_fuzz.sh b/tests/ci/common_fuzz.sh index 2cf47f7caf..2a03bd29a1 100644 --- a/tests/ci/common_fuzz.sh +++ b/tests/ci/common_fuzz.sh @@ -65,7 +65,7 @@ function run_fuzz_test { # This could fail and we want to capture that (+e) set +e FUZZ_RUN_FAILURE=0 - time "./${FUZZ_TEST_PATH}" -print_final_stats=1 -timeout=5 -max_total_time="$TIME_FOR_EACH_FUZZ" \ + time "./${FUZZ_TEST_PATH}" -print_final_stats=1 -timeout=10 -max_total_time="$TIME_FOR_EACH_FUZZ" \ -jobs="$NUM_CPU_THREADS" -workers="$NUM_CPU_THREADS" \ -artifact_prefix="$ARTIFACTS_FOLDER/" \ "$FUZZ_TEST_CORPUS" "$SHARED_CORPUS" "$SRC_CORPUS" 2>&1 | tee "$SUMMARY_LOG" @@ -83,6 +83,7 @@ function run_fuzz_test { mkdir -p "$FUZZ_TEST_FAILURE_ROOT" cp -r "$FUZZ_TEST_ROOT" "$FAILURE_ROOT" + cp "$FUZZ_TEST_PATH" "${FUZZ_TEST_FAILURE_ROOT}/${FUZZ_NAME}" # If this fuzz run has failed the below metrics wont make a lot of sense, it could fail on the first input and publish a TestCount of 1 which makes all the metrics look weird echo "${FUZZ_NAME} failed, see the above output for details. For all the logs see ${FAILURE_ROOT} in EFS" diff --git a/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile b/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile index 6ebb01f200..a043053386 100644 --- a/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile +++ b/tests/ci/docker_images/linux-aarch/ubuntu-20.04_cryptofuzz/Dockerfile @@ -1,7 +1,7 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 -FROM ubuntu-20.04:clang-10x +FROM ubuntu-20.04-aarch:clang-10x SHELL ["/bin/bash", "-c"] From 403527a4c6d48658e605ba7cc650af41f08f05ff Mon Sep 17 00:00:00 2001 From: Andrew Hopkins Date: Fri, 9 Apr 2021 19:52:09 -0700 Subject: [PATCH 12/12] Increase cryptofuzz's timeout and print debug information for any failures --- tests/ci/common_fuzz.sh | 14 ++++++++++++-- tests/ci/run_cryptofuzz.sh | 6 ++++++ tests/ci/run_fuzz_tests.sh | 2 ++ 3 files changed, 20 insertions(+), 2 deletions(-) diff --git a/tests/ci/common_fuzz.sh b/tests/ci/common_fuzz.sh index 2a03bd29a1..6721be6d83 100644 --- a/tests/ci/common_fuzz.sh +++ b/tests/ci/common_fuzz.sh @@ -24,6 +24,8 @@ FAILURE_ROOT="${CORPUS_ROOT}/runs/${DATE_NOW}/${BUILD_ID}" ALL_RUN_ROOT="${BUILD_ROOT}/fuzz_run_root" rm -rf "$ALL_RUN_ROOT" + + function put_metric_count { put_metric --unit Count "$@" } @@ -65,7 +67,7 @@ function run_fuzz_test { # This could fail and we want to capture that (+e) set +e FUZZ_RUN_FAILURE=0 - time "./${FUZZ_TEST_PATH}" -print_final_stats=1 -timeout=10 -max_total_time="$TIME_FOR_EACH_FUZZ" \ + time "./${FUZZ_TEST_PATH}" -print_final_stats=1 -timeout="$FUZZ_TEST_TIMEOUT" -max_total_time="$TIME_FOR_EACH_FUZZ" \ -jobs="$NUM_CPU_THREADS" -workers="$NUM_CPU_THREADS" \ -artifact_prefix="$ARTIFACTS_FOLDER/" \ "$FUZZ_TEST_CORPUS" "$SHARED_CORPUS" "$SRC_CORPUS" 2>&1 | tee "$SUMMARY_LOG" @@ -73,7 +75,6 @@ function run_fuzz_test { if [ "${PIPESTATUS[0]}" == 1 ]; then FUZZ_RUN_FAILURE=1 fi - set -e # The libfuzzer logs are written to the current working directory and need to be moved after the test is done mv ./*.log "${FUZZ_RUN_LOGS}/." @@ -82,6 +83,13 @@ function run_fuzz_test { FUZZ_TEST_FAILURE_ROOT="${FAILURE_ROOT}/${FUZZ_NAME}" mkdir -p "$FUZZ_TEST_FAILURE_ROOT" + if [[ "$FUZZ_NAME" == "cryptofuzz" ]]; then + for ARTIFACT in "$ARTIFACTS_FOLDER"/*; do + ARTIFACT_NAME=$(basename "$ARTIFACT") + "./${FUZZ_TEST_PATH}" --debug "$ARTIFACT" | tee "${FUZZ_RUN_LOGS}/${ARTIFACT_NAME}.log" + done + fi + cp -r "$FUZZ_TEST_ROOT" "$FAILURE_ROOT" cp "$FUZZ_TEST_PATH" "${FUZZ_TEST_FAILURE_ROOT}/${FUZZ_NAME}" @@ -92,6 +100,8 @@ function run_fuzz_test { echo "Fuzz test ${FUZZ_NAME} finished successfully, not copying run logs and run corpus" fi + set -e + # Step 2 merge any new files from the run corpus and GitHub src corpus into the shared corpus (EFS) time "./${FUZZ_TEST_PATH}" -merge=1 "$SHARED_CORPUS" "$FUZZ_TEST_CORPUS" "$SRC_CORPUS" diff --git a/tests/ci/run_cryptofuzz.sh b/tests/ci/run_cryptofuzz.sh index 50271e67e4..c29f70e632 100755 --- a/tests/ci/run_cryptofuzz.sh +++ b/tests/ci/run_cryptofuzz.sh @@ -38,11 +38,17 @@ make "-j${NUM_CPU_THREADS}" FUZZ_NAME="cryptofuzz" FUZZ_TEST_PATH="$FUZZ_NAME" SRC_CORPUS="$CRYPTOFUZZ_SEED_CORPUS" + # Perform the actual fuzzing. We want the total build time to be about an hour: # 4 minutes for building AWS-LC and Cryptofuzz # 55 minutes of fuzzing # 1 minutes of cleanup TIME_FOR_EACH_FUZZ=3300 +# Some fuzz tests can take a while but still pass. This is a tradeoff: less false positive noise, but some inputs that take +# a long time could lead to a denial of service avenue. We're mostly interested in correctness and memory safety at this +# time so we're willing to take the fit on fuzz speed +FUZZ_TEST_TIMEOUT=30 + # Call the common fuzzing logic run_fuzz_test \ No newline at end of file diff --git a/tests/ci/run_fuzz_tests.sh b/tests/ci/run_fuzz_tests.sh index 5495ed6588..d040e94e65 100755 --- a/tests/ci/run_fuzz_tests.sh +++ b/tests/ci/run_fuzz_tests.sh @@ -15,6 +15,8 @@ set -u # ~2 minutes for merging files # ~3 minutes for cleanup TOTAL_FUZZ_TEST_TIME=3000 +FUZZ_TEST_TIMEOUT=5 + FUZZ_TESTS=$(find test_build_dir/fuzz -type f -executable) NUM_FUZZ_TESTS=$(echo "$FUZZ_TESTS" | wc -l) TIME_FOR_EACH_FUZZ=$((TOTAL_FUZZ_TEST_TIME/NUM_FUZZ_TESTS))