I recently fuzzed a library called libmysofa which is used in ffmpeg and that got me thinking that there is still plenty of more “gold” to be found. The ffmpeg codebase is largely a mess and requires some work.
Looking through the codebase as of writing this blog post, there are fuzzers in ffmpeg, but there does not appear to be one for avfilter graphs which are used in a couple of places in the codebase.
Looking at the code we may need to use these functions here:
AVFilterGraph *avfilter_graph_alloc(void)
{
FFFilterGraph *graph = av_mallocz(sizeof(*graph));
AVFilterGraph *ret;
if (!graph)
return NULL;
ret = &graph->p;
ret->av_class = &filtergraph_class;
av_opt_set_defaults(ret);
ff_framequeue_global_init(&graph->frame_queues);
return ret;
}
void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter)
{
int i, j;
for (i = 0; i < graph->nb_filters; i++) {
if (graph->filters[i] == filter) {
FFSWAP(AVFilterContext*, graph->filters[i],
graph->filters[graph->nb_filters - 1]);
graph->nb_filters--;
filter->graph = NULL;
for (j = 0; j<filter->nb_outputs; j++)
if (filter->outputs[j])
ff_filter_link(filter->outputs[j])->graph = NULL;
return;
}
}
}
void avfilter_graph_free(AVFilterGraph **graphp)
{
AVFilterGraph *graph = *graphp;
FFFilterGraph *graphi = fffiltergraph(graph);
if (!graph)
return;
while (graph->nb_filters)
avfilter_free(graph->filters[0]);
ff_graph_thread_free(graphi);
av_freep(&graphi->sink_links);
av_opt_free(graph);
av_freep(&graph->filters);
av_freep(graphp);
}
to allocate and free the graphs during fuzzing…
Here is my fork which adds a fuzzer for the graphs: https://github.com/personnumber3377/FFmpeg
To build ffmpeg you can just follow the instructions here: https://trac.ffmpeg.org/wiki/CompilationGuide
sudo apt-get -y install \
autoconf \
automake \
build-essential \
cmake \
git-core \
libass-dev \
libfreetype6-dev \
libgnutls28-dev \
libmp3lame-dev \
libsdl2-dev \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
meson \
ninja-build \
pkg-config \
texinfo \
wget \
yasm \
zlib1g-dev
Actually fuck that. To compile fuzzers we need to follow the instructions in one of the fuzzing files for example target_dec_fuzzer has this:
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* Targeted fuzzer that targets specific codecs depending on two
compile-time flags.
INSTRUCTIONS:
* Get the very fresh clang, e.g. see http://libfuzzer.info#versions
* Get and build libFuzzer:
svn co http://llvm.org/svn/llvm-project/llvm/trunk/lib/Fuzzer
./Fuzzer/build.sh
* build ffmpeg for fuzzing:
FLAGS="-fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp -g" CC="clang $FLAGS" CXX="clang++ $FLAGS" ./configure --disable-x86asm
make clean && make -j
* build the fuzz target.
Choose the value of FFMPEG_CODEC (e.g. AV_CODEC_ID_DVD_SUBTITLE) and
choose one of FUZZ_FFMPEG_VIDEO, FUZZ_FFMPEG_AUDIO, FUZZ_FFMPEG_SUBTITLE.
clang -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp tools/target_dec_fuzzer.c -o target_dec_fuzzer -I. -DFFMPEG_CODEC=AV_CODEC_ID_MPEG1VIDEO -DFUZZ_FFMPEG_VIDEO ../../libfuzzer/libFuzzer.a -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--as-needed -Wl,-z,noexecstack -Wl,--warn-common -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -ldl -lxcb -lxcb-shm -lxcb -lxcb-xfixes -lxcb -lxcb-shape -lxcb -lX11 -lasound -lm -lbz2 -lz -pthread
* create a corpus directory and put some samples there (empty dir is ok too):
mkdir CORPUS && cp some-files CORPUS
* Run fuzzing:
./target_dec_fuzzer -max_len=100000 CORPUS
More info:
http://libfuzzer.info
http://tutorial.libfuzzer.info
https://github.com/google/oss-fuzz
http://lcamtuf.coredump.cx/afl/
https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html
*/
so I made this build_fuzz.sh script here:
#!/bin/sh
FLAGS="-fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -g" CC="clang $FLAGS" CXX="clang++ $FLAGS" ./configure --disable-x86asm
make clean && make -j$(nproc) # Build
and then to compile the fuzzer binary, we need to run this monstrosity:
clang -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp tools/target_dec_fuzzer.c -o target_dec_fuzzer -I. -DFFMPEG_CODEC=AV_CODEC_ID_MPEG1VIDEO -DFUZZ_FFMPEG_VIDEO ../../libfuzzer/libFuzzer.a -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--as-needed -Wl,-z,noexecstack -Wl,--warn-common -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -ldl -lxcb -lxcb-shm -lxcb -lxcb-xfixes -lxcb -lxcb-shape -lxcb -lX11 -lasound -lm -lbz2 -lz -pthread
but for my own tools/target_graph_fuzzer.c instead…
Actually I just modified it to this:
clang -fsanitize=address,undefined,fuzzer -fsanitize-coverage=trace-pc-guard,trace-cmp tools/target_graph_fuzzer.c -o target_graph_fuzzer -I. -DFFMPEG_CODEC=AV_CODEC_ID_MPEG1VIDEO -DFUZZ_FFMPEG_VIDEO -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--as-needed -Wl,-z,noexecstack -Wl,--warn-common -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -ldl -lxcb -lxcb-shm -lxcb -lxcb-xfixes -lxcb -lxcb-shape -lxcb -lX11 -lasound -lm -lbz2 -lz -pthread
let’s test it out…
so my final build script is this:
#!/bin/sh
FLAGS="-fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -g" CC="clang $FLAGS" CXX="clang++ $FLAGS" ./configure --disable-x86asm
make clean && make -j$(nproc) # Build
clang -fsanitize=address,undefined,fuzzer -fsanitize-coverage=trace-pc-guard,trace-cmp tools/target_graph_fuzzer.c -o target_graph_fuzzer -I. -DFFMPEG_CODEC=AV_CODEC_ID_MPEG1VIDEO -DFUZZ_FFMPEG_VIDEO -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--as-needed -Wl,-z,noexecstack -Wl,--warn-common -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -ldl -lxcb -lxcb-shm -lxcb -lxcb-xfixes -lxcb -lxcb-shape -lxcb -lX11 -lasound -lm -lbz2 -lz -pthread
Here is my final fuzzer:
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* Targeted fuzzer that targets specific codecs depending on two
compile-time flags.
INSTRUCTIONS:
* Get the very fresh clang, e.g. see http://libfuzzer.info#versions
* Get and build libFuzzer:
svn co http://llvm.org/svn/llvm-project/llvm/trunk/lib/Fuzzer
./Fuzzer/build.sh
* build ffmpeg for fuzzing:
FLAGS="-fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp -g" CC="clang $FLAGS" CXX="clang++ $FLAGS" ./configure --disable-x86asm
make clean && make -j
* build the fuzz target.
Choose the value of FFMPEG_CODEC (e.g. AV_CODEC_ID_DVD_SUBTITLE) and
choose one of FUZZ_FFMPEG_VIDEO, FUZZ_FFMPEG_AUDIO, FUZZ_FFMPEG_SUBTITLE.
clang -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp tools/target_dec_fuzzer.c -o target_dec_fuzzer -I. -DFFMPEG_CODEC=AV_CODEC_ID_MPEG1VIDEO -DFUZZ_FFMPEG_VIDEO ../../libfuzzer/libFuzzer.a -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--as-needed -Wl,-z,noexecstack -Wl,--warn-common -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -ldl -lxcb -lxcb-shm -lxcb -lxcb-xfixes -lxcb -lxcb-shape -lxcb -lX11 -lasound -lm -lbz2 -lz -pthread
* create a corpus directory and put some samples there (empty dir is ok too):
mkdir CORPUS && cp some-files CORPUS
* Run fuzzing:
./target_dec_fuzzer -max_len=100000 CORPUS
More info:
http://libfuzzer.info
http://tutorial.libfuzzer.info
https://github.com/google/oss-fuzz
http://lcamtuf.coredump.cx/afl/
https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html
*/
#include "config.h"
#include "libavutil/avassert.h"
#include "libavutil/avstring.h"
#include "libavutil/cpu.h"
#include "libavutil/imgutils.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mem.h"
#include "libavcodec/avcodec.h"
#include "libavcodec/bytestream.h"
#include "libavcodec/codec_internal.h"
#include "libavformat/avformat.h"
//For FF_SANE_NB_CHANNELS, so we dont waste energy testing things that will get instantly rejected
#include "libavcodec/internal.h"
// These next includes are taken from tools/uncoded_frame.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/mem.h"
#include "libavdevice/avdevice.h"
#include "libavfilter/avfilter.h"
#include "libavfilter/buffersink.h"
#include "libavformat/avformat.h"
#include "libavcodec/codec_id.h"
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
// This fuzzer is based on the source found in tools/uncoded_frame.c
int ret;
/*
char *in_graph_desc, **out_dev_name;
int nb_out_dev = 0, nb_streams = 0;
AVFilterGraph *in_graph = NULL;
Stream *streams = NULL, *st;
AVFrame *frame = NULL;
int i, j, run = 1, ret;
//av_log_set_level(AV_LOG_DEBUG);
if (argc < 3) {
av_log(NULL, AV_LOG_ERROR,
"Usage: %s filter_graph dev:out [dev2:out2...]\n\n"
"Examples:\n"
"%s movie=file.nut:s=v+a xv:- alsa:default\n"
"%s movie=file.nut:s=v+a uncodedframecrc:pipe:0\n",
argv[0], argv[0], argv[0]);
exit(1);
}
in_graph_desc = argv[1];
out_dev_name = argv + 2;
nb_out_dev = argc - 2;
avdevice_register_all();
if (!(in_graph = avfilter_graph_alloc())) {
ret = AVERROR(ENOMEM);
av_log(NULL, AV_LOG_ERROR, "Unable to alloc graph graph: %s\n",
av_err2str(ret));
goto fail;
}
ret = avfilter_graph_parse_ptr(in_graph, in_graph_desc, NULL, NULL, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Unable to parse graph: %s\n",
av_err2str(ret));
goto fail;
}
*/
AVFilterGraph *in_graph = NULL;
if (!(in_graph = avfilter_graph_alloc())) { // If allocation fails, just bail out here early.
return 0;
}
ret = avfilter_graph_parse_ptr(in_graph, data, NULL, NULL, NULL);
// Now free the graph object to avoid memory leaks...
avfilter_graph_free(&in_graph); // This is a bit weird that this expects a pointer but idk....
return 0;
}
after trying to compile I get a shit ton of linker errors here:
tools/target_graph_fuzzer.c:130:46: warning: passing 'const uint8_t *' (aka 'const unsigned char *') to parameter of type 'const char *' converts between pointers to integer types where one is of the unique plain 'char' type and the other is not [-Wpointer-sign]
130 | ret = avfilter_graph_parse_ptr(in_graph, data, NULL, NULL, NULL);
| ^~~~
./libavfilter/avfilter.h:996:64: note: passing argument to parameter 'filters' here
996 | int avfilter_graph_parse_ptr(AVFilterGraph *graph, const char *filters,
| ^
1 warning generated.
/usr/bin/ld: /usr/lib/llvm-18/lib/clang/18/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors_vfork.S.o): warning: common of `__interception::real_vfork' overridden by definition from /usr/lib/llvm-18/lib/clang/18/lib/linux/libclang_rt.asan-x86_64.a(asan_interceptors.cpp.o)
/usr/bin/ld: libavfilter/libavfilter.a(vf_deinterlace_vaapi.o): in function `deint_vaapi_build_filter_params':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_deinterlace_vaapi.c:88:(.text+0x4b): undefined reference to `vaQueryVideoProcFilterCaps'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_deinterlace_vaapi.c:132:(.text+0x11a): undefined reference to `vaQueryVideoProcPipelineCaps'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_deinterlace_vaapi.c:94:(.text+0x2b2): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_deinterlace_vaapi.c:137:(.text+0x358): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vf_deinterlace_vaapi.o): in function `deint_vaapi_filter_frame':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_deinterlace_vaapi.c:257:(.text+0xa05): undefined reference to `vaMapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_deinterlace_vaapi.c:274:(.text+0xa45): undefined reference to `vaUnmapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_deinterlace_vaapi.c:276:(.text+0xae3): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_deinterlace_vaapi.c:329:(.text+0xc05): undefined reference to `vaUnmapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_deinterlace_vaapi.c:260:(.text+0xc45): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vf_misc_vaapi.o): in function `denoise_vaapi_build_filter_params':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_misc_vaapi.c:72:(.text+0x48): undefined reference to `vaQueryVideoProcFilterCaps'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_misc_vaapi.c:76:(.text+0xdd): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vf_misc_vaapi.o): in function `sharpness_vaapi_build_filter_params':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_misc_vaapi.c:102:(.text+0x158): undefined reference to `vaQueryVideoProcFilterCaps'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_misc_vaapi.c:106:(.text+0x1ed): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vf_overlay_vaapi.o): in function `overlay_vaapi_build_filter_params':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_overlay_vaapi.c:136:(.text+0x55b): undefined reference to `vaQueryVideoProcPipelineCaps'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_overlay_vaapi.c:141:(.text+0x5db): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vf_procamp_vaapi.o): in function `procamp_vaapi_build_filter_params':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_procamp_vaapi.c:78:(.text+0x251): undefined reference to `vaQueryVideoProcFilterCaps'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_procamp_vaapi.c:82:(.text+0x406): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vf_tonemap_vaapi.o): in function `tonemap_vaapi_build_filter_params':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_tonemap_vaapi.c:276:(.text+0x83): undefined reference to `vaQueryVideoProcFilterCaps'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_tonemap_vaapi.c:281:(.text+0x1ee): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vf_tonemap_vaapi.o): in function `tonemap_vaapi_set_filter_params':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_tonemap_vaapi.c:241:(.text+0x439): undefined reference to `vaMapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_tonemap_vaapi.c:252:(.text+0x48a): undefined reference to `vaUnmapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_tonemap_vaapi.c:244:(.text+0xad4): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_tonemap_vaapi.c:254:(.text+0xb36): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vf_transpose_vaapi.o): in function `transpose_vaapi_build_filter_params':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_transpose_vaapi.c:47:(.text+0x354): undefined reference to `vaQueryVideoProcPipelineCaps'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_transpose_vaapi.c:52:(.text+0x4c9): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(tiff.o): in function `tiff_uncompress_lzma':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/tiff.c:574:(.text+0x1b0e): undefined reference to `lzma_stream_decoder'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/tiff.c:579:(.text+0x1b23): undefined reference to `lzma_code'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/tiff.c:580:(.text+0x1b2e): undefined reference to `lzma_end'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode_av1.o): in function `vaapi_encode_av1_init':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode_av1.c:900:(.text.unlikely+0x14a): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode_av1.c:917:(.text.unlikely+0x1b4): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode_av1.c:922:(.text.unlikely+0x1c3): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode_av1.c:935:(.text.unlikely+0x24d): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode_h264.o): in function `vaapi_encode_h264_configure':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode_h264.c:925:(.text.unlikely+0x36c): undefined reference to `vaQueryVendorString'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode_h265.o): in function `vaapi_encode_h265_get_encoder_caps':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode_h265.c:912:(.text.unlikely+0x268): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode_h265.c:926:(.text.unlikely+0x2db): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_free_output_buffer':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2060:(.text+0x80): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_alloc_output_buffer':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2077:(.text+0xf5): undefined reference to `vaCreateBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2082:(.text+0x12b): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_get_coded_buffer_size':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:665:(.text+0x191): undefined reference to `vaMapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:677:(.text+0x1c0): undefined reference to `vaUnmapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:668:(.text+0x1ea): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:679:(.text+0x213): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_make_packed_header':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:60:(.text+0x2e5): undefined reference to `vaCreateBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:71:(.text+0x33b): undefined reference to `vaCreateBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:64:(.text+0x3b7): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:75:(.text+0x3eb): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_make_param_buffer':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:101:(.text+0x49f): undefined reference to `vaCreateBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:104:(.text+0x503): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_get_coded_buffer_data':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:696:(.text+0x579): undefined reference to `vaMapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:713:(.text+0x5dc): undefined reference to `vaUnmapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:699:(.text+0x60c): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:715:(.text+0x635): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_wait':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:160:(.text+0x783): undefined reference to `vaSyncBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:171:(.text+0x7be): undefined reference to `vaSyncSurface'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:173:(.text+0x7cc): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:164:(.text+0x7f4): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_issue':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:642:(.text+0xb3f): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:590:(.text+0x10ec): undefined reference to `vaBeginPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:599:(.text+0x1113): undefined reference to `vaRenderPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:608:(.text+0x1133): undefined reference to `vaEndPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:625:(.text+0x1177): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:628:(.text+0x16c6): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:593:(.text+0x17b1): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:639:(.text+0x17e2): undefined reference to `vaEndPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:602:(.text+0x1924): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:610:(.text+0x199e): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_wait':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:160:(.text+0x1c75): undefined reference to `vaSyncBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:171:(.text+0x1d2f): undefined reference to `vaSyncSurface'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:173:(.text+0x1d41): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:164:(.text+0x1e18): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_profile_entrypoint':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:980:(.text.unlikely+0x18b): undefined reference to `vaMaxNumProfiles'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:986:(.text.unlikely+0x1d2): undefined reference to `vaQueryConfigProfiles'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:988:(.text.unlikely+0x1e1): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1010:(.text.unlikely+0x2a0): undefined reference to `vaProfileStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1040:(.text.unlikely+0x380): undefined reference to `vaMaxNumEntrypoints'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1046:(.text.unlikely+0x3bf): undefined reference to `vaQueryConfigEntrypoints'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1049:(.text.unlikely+0x3da): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1073:(.text.unlikely+0x478): undefined reference to `vaEntrypointStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1098:(.text.unlikely+0x547): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1102:(.text.unlikely+0x554): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_init_rate_control':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1235:(.text.unlikely+0x6c8): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1239:(.text.unlikely+0x6d6): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_init_gop_structure':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1643:(.text.unlikely+0x1048): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1648:(.text.unlikely+0x1057): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1667:(.text.unlikely+0x10e9): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1672:(.text.unlikely+0x10fa): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_init_slice_structure':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1854:(.text.unlikely+0x130e): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1859:(.text.unlikely+0x131b): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_init_roi':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2026:(.text.unlikely+0x16e5): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2031:(.text.unlikely+0x16f6): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_init_packed_headers':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1917:(.text.unlikely+0x1762): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1922:(.text.unlikely+0x1775): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_init_quality':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1979:(.text.unlikely+0x18b5): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1984:(.text.unlikely+0x18c2): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `vaapi_encode_init_max_frame_size':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1591:(.text.unlikely+0x19cc): undefined reference to `vaGetConfigAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:1597:(.text.unlikely+0x19e4): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `ff_vaapi_encode_init':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2226:(.text.unlikely+0x1abf): undefined reference to `vaCreateConfig'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2231:(.text.unlikely+0x1acc): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2242:(.text.unlikely+0x1bde): undefined reference to `vaCreateContext'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2249:(.text.unlikely+0x1bed): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2324:(.text.unlikely+0x1dc8): undefined reference to `vaSyncBuffer'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_encode.o): in function `ff_vaapi_encode_close':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2361:(.text.unlikely+0x1eed): undefined reference to `vaDestroyContext'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_encode.c:2367:(.text.unlikely+0x1f16): undefined reference to `vaDestroyConfig'
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o): in function `ff_vaapi_vpp_pipeline_uninit':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:51:(.text+0x7dd): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:51:(.text+0x800): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:51:(.text+0x823): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:58:(.text+0x86f): undefined reference to `vaDestroyContext'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:63:(.text+0x88a): undefined reference to `vaDestroyConfig'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:51:(.text+0x8b8): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:51:(.text+0x8d8): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:51:(.text+0x8f8): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:51:(.text+0x918): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:51:(.text+0x938): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o):/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:51: more undefined references to `vaDestroyBuffer' follow
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o): in function `ff_vaapi_vpp_config_output':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:140:(.text+0xb01): undefined reference to `vaCreateConfig'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:143:(.text+0xbe3): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:227:(.text+0xd7e): undefined reference to `vaCreateContext'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:233:(.text+0xeb8): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o): in function `vaapi_vpp_colour_properties':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:448:(.text+0xfd3): undefined reference to `vaQueryVideoProcPipelineCaps'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:452:(.text+0x133e): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o): in function `ff_vaapi_vpp_make_param_buffers':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:594:(.text+0x13f7): undefined reference to `vaCreateBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:597:(.text+0x1463): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o): in function `ff_vaapi_vpp_render_pictures':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:656:(.text+0x153a): undefined reference to `vaBeginPicture'
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o): in function `vaapi_vpp_render_single_pipeline_buffer':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:617:(.text+0x1592): undefined reference to `vaCreateBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:629:(.text+0x15cf): undefined reference to `vaRenderPicture'
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o): in function `ff_vaapi_vpp_render_pictures':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:671:(.text+0x160a): undefined reference to `vaEndPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:682:(.text+0x1644): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:684:(.text+0x1655): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:656:(.text+0x16c0): undefined reference to `vaBeginPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:659:(.text+0x16cd): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:671:(.text+0x1709): undefined reference to `vaEndPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:673:(.text+0x171a): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:701:(.text+0x174c): undefined reference to `vaEndPicture'
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o): in function `vaapi_vpp_render_single_pipeline_buffer':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:621:(.text+0x1759): undefined reference to `vaErrorStr'
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o): in function `ff_vaapi_vpp_render_pictures':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:699:(.text+0x1797): undefined reference to `vaRenderPicture'
/usr/bin/ld: libavfilter/libavfilter.a(vaapi_vpp.o): in function `vaapi_vpp_render_single_pipeline_buffer':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vaapi_vpp.c:631:(.text+0x17a4): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `ff_vaapi_decode_destroy_buffers':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:146:(.text+0x41): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:156:(.text+0x8f): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:159:(.text+0x9c): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:149:(.text+0xe3): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `vaapi_decode_make_config':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:500:(.text+0x198): undefined reference to `vaMaxNumProfiles'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:508:(.text+0x1c7): undefined reference to `vaQueryConfigProfiles'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:572:(.text+0x339): undefined reference to `vaCreateConfig'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `vaapi_decode_find_best_format':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:332:(.text+0x430): undefined reference to `vaQuerySurfaceAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:344:(.text+0x474): undefined reference to `vaQuerySurfaceAttributes'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `vaapi_decode_make_config':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:661:(.text+0x58c): undefined reference to `vaDestroyConfig'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:511:(.text+0x5f3): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:576:(.text+0x624): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `vaapi_decode_find_best_format':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:347:(.text+0x7ed): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:335:(.text+0x822): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `ff_vaapi_decode_make_param_buffer':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:57:(.text+0x8df): undefined reference to `vaCreateBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:61:(.text+0x9a4): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `ff_vaapi_decode_make_slice_buffer':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:103:(.text+0xa6b): undefined reference to `vaCreateBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:117:(.text+0xad1): undefined reference to `vaCreateBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:108:(.text+0xba3): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:122:(.text+0xbd4): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:125:(.text+0xc08): undefined reference to `vaDestroyBuffer'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `ff_vaapi_decode_issue':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:181:(.text+0xc8c): undefined reference to `vaBeginPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:190:(.text+0xcb0): undefined reference to `vaRenderPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:199:(.text+0xcd7): undefined reference to `vaRenderPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:208:(.text+0xcf4): undefined reference to `vaEndPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:210:(.text+0xd02): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:184:(.text+0xd83): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:228:(.text+0xdb1): undefined reference to `vaEndPicture'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:202:(.text+0xdd3): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:230:(.text+0xdfb): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:193:(.text+0xe23): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `ff_vaapi_common_frame_params':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:687:(.text+0xf05): undefined reference to `vaDestroyConfig'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `ff_vaapi_decode_uninit':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:744:(.text+0xf58): undefined reference to `vaDestroyContext'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:746:(.text+0xf66): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:752:(.text+0xfa0): undefined reference to `vaDestroyConfig'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:754:(.text+0xfae): undefined reference to `vaErrorStr'
/usr/bin/ld: libavcodec/libavcodec.a(vaapi_decode.o): in function `ff_vaapi_decode_init':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:715:(.text+0x1090): undefined reference to `vaCreateContext'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavcodec/vaapi_decode.c:722:(.text+0x10cb): undefined reference to `vaErrorStr'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_drm.o): in function `drm_device_create':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_drm.c:61:(.text+0x792): undefined reference to `drmGetVersion'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_drm.c:74:(.text+0x7ca): undefined reference to `drmFreeVersion'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_map_to_drm_esh':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1370:(.text+0xaf): undefined reference to `vaExportSurfaceHandle'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1376:(.text+0xfb): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1359:(.text+0x12c): undefined reference to `vaSyncSurface'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1361:(.text+0x5ef): undefined reference to `vaErrorStr'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_unmap_to_drm_abh':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1451:(.text+0x71a): undefined reference to `vaReleaseBufferHandle'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1459:(.text+0x72a): undefined reference to `vaDestroyImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1453:(.text+0x755): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1461:(.text+0x78b): undefined reference to `vaErrorStr'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_map_frame':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:842:(.text+0x8f0): undefined reference to `vaSyncSurface'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:876:(.text+0x92c): undefined reference to `vaCreateImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:906:(.text+0x951): undefined reference to `vaMapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:909:(.text+0xa53): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:939:(.text+0xa8c): undefined reference to `vaUnmapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:941:(.text+0xa9d): undefined reference to `vaDestroyImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:886:(.text+0xaca): undefined reference to `vaGetImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:859:(.text+0xafd): undefined reference to `vaDeriveImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:844:(.text+0xb37): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:879:(.text+0xb65): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:889:(.text+0xb91): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:861:(.text+0xbdf): undefined reference to `vaErrorStr'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_unmap_frame':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:774:(.text+0xc5f): undefined reference to `vaUnmapBuffer'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:791:(.text+0xc7d): undefined reference to `vaDestroyImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:776:(.text+0xca6): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:793:(.text+0xcd3): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:782:(.text+0xd2e): undefined reference to `vaPutImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:786:(.text+0xd53): undefined reference to `vaErrorStr'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_unmap_from_drm':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1088:(.text+0xeea): undefined reference to `vaDestroySurfaces'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_buffer_free':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:501:(.text+0xf45): undefined reference to `vaDestroySurfaces'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:503:(.text+0xf6d): undefined reference to `vaErrorStr'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_frames_init':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:672:(.text+0x127b): undefined reference to `vaDeriveImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:683:(.text+0x12ba): undefined reference to `vaDestroyImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:685:(.text+0x139b): undefined reference to `vaErrorStr'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_pool_alloc':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:522:(.text+0x1692): undefined reference to `vaCreateSurfaces'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:527:(.text+0x1724): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:537:(.text+0x175d): undefined reference to `vaDestroySurfaces'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_frames_get_constraints':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:249:(.text+0x18f3): undefined reference to `vaQuerySurfaceAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:264:(.text+0x1931): undefined reference to `vaQuerySurfaceAttributes'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:252:(.text+0x1adf): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:267:(.text+0x1b15): undefined reference to `vaErrorStr'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_device_init':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:406:(.text+0x1b4d): undefined reference to `vaMaxNumImageFormats'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:416:(.text+0x1b84): undefined reference to `vaQueryImageFormats'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:443:(.text+0x1ceb): undefined reference to `vaQueryVendorString'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_device_free':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1639:(.text+0x1e8d): undefined reference to `vaTerminate'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_device_connect':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1676:(.text+0x1f10): undefined reference to `vaSetErrorCallback'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1677:(.text+0x1f22): undefined reference to `vaSetInfoCallback'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1682:(.text+0x1f36): undefined reference to `vaInitialize'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1684:(.text+0x1f83): undefined reference to `vaErrorStr'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_device_derive':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1988:(.text+0x1fdc): undefined reference to `drmGetNodeTypeFromFd'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:2044:(.text+0x2025): undefined reference to `vaGetDisplayDRM'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1998:(.text+0x2053): undefined reference to `drmGetRenderDeviceNameFromFd'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_device_create':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1846:(.text+0x2221): undefined reference to `vaGetDisplayDRM'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1953:(.text+0x2254): undefined reference to `vaSetDriverName'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1864:(.text+0x22c7): undefined reference to `vaGetDisplay'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1776:(.text+0x2413): undefined reference to `drmGetVersion'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1798:(.text+0x2473): undefined reference to `drmFreeVersion'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1776:(.text+0x25a3): undefined reference to `drmGetVersion'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1811:(.text+0x25e0): undefined reference to `drmGetDevice'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1833:(.text+0x2667): undefined reference to `drmFreeDevice'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1789:(.text+0x26bc): undefined reference to `drmFreeVersion'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1955:(.text+0x2770): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1957:(.text+0x2798): undefined reference to `vaTerminate'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1804:(.text+0x27f4): undefined reference to `drmFreeVersion'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1824:(.text+0x281e): undefined reference to `drmFreeDevice'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1776:(.text+0x28ee): undefined reference to `drmGetVersion'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1836:(.text+0x291e): undefined reference to `drmFreeVersion'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1804:(.text+0x29c8): undefined reference to `drmFreeVersion'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_map_to_drm_abh':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1486:(.text+0x2b30): undefined reference to `vaDeriveImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1583:(.text+0x2c24): undefined reference to `vaDestroyImage'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1546:(.text+0x2d3a): undefined reference to `vaAcquireBufferHandle'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1489:(.text+0x2e88): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1549:(.text+0x2eb5): undefined reference to `vaErrorStr'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1581:(.text+0x2f13): undefined reference to `vaReleaseBufferHandle'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vaapi.o): in function `vaapi_map_from_drm':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1270:(.text+0x32df): undefined reference to `vaCreateSurfaces'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1219:(.text+0x3869): undefined reference to `vaCreateSurfaces'
/usr/bin/ld: /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vaapi.c:1307:(.text+0x3a2b): undefined reference to `vaErrorStr'
/usr/bin/ld: libavutil/libavutil.a(hwcontext_vdpau.o): in function `vdpau_device_create':
/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/hwcontext_vdpau.c:494:(.text+0x759): undefined reference to `vdp_device_create_x11'
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Let’s take a look at how oss-fuzz compiles the project: https://github.com/google/oss-fuzz/blob/3416b4bff87c5b6363738ce2b2524e04c687119f/projects/ffmpeg/build.sh
./configure \
--cc=$CC --cxx=$CXX --ld="$CXX $CXXFLAGS -std=c++11" \
--extra-cflags="-I$FFMPEG_DEPS_PATH/include" \
--extra-ldflags="-L$FFMPEG_DEPS_PATH/lib" \
--prefix="$FFMPEG_DEPS_PATH" \
--pkg-config-flags="--static" \
--enable-ossfuzz \
--libfuzzer=$LIB_FUZZING_ENGINE \
--optflags=-O1 \
--enable-gpl \
--enable-nonfree \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libopus \
--enable-libtheora \
--enable-libvorbis \
--enable-libvpx \
--enable-libxml2 \
--enable-nonfree \
--disable-libdrm \
--disable-muxers \
--disable-protocols \
--disable-demuxer=rtp,rtsp,sdp \
--disable-devices \
--disable-shared \
--disable-doc \
--disable-programs \
$FFMPEG_BUILD_ARGS
make clean
make -j$(nproc) install
Let’s add a couple of these to our build script…
Ok, so this build script seems to work:
FLAGS="-fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -g" CC="clang $FLAGS" CXX="clang++ $FLAGS" LD="clang" ./configure --disable-x86asm --pkg-config-flags="--static" --optflags=-O3 --enable-gpl --enable-nonfree --enable-libass --enable-libfdk-aac --enable-libfreetype --enable-libopus --enable-libtheora --enable-libvorbis --enable-libvpx --enable-libxml2 --enable-nonfree --disable-libdrm --disable-muxers --disable-protocols --disable-demuxer=rtp,rtsp,sdp --disable-devices --disable-shared --disable-doc --disable-programs
make clean && make -j$(nproc) # Build
and I had to modify the generated Makefile to include the graph fuzzer.
The fuzzer has a couple of bugs. First of all the parsers expect the string to end in a null byte so we need to add that probably.
Here is my current source code:
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* Targeted fuzzer that targets the graphs.
INSTRUCTIONS:
* Get the very fresh clang, e.g. see http://libfuzzer.info#versions
* Get and build libFuzzer:
svn co http://llvm.org/svn/llvm-project/llvm/trunk/lib/Fuzzer
./Fuzzer/build.sh
* build ffmpeg for fuzzing:
FLAGS="-fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp -g" CC="clang $FLAGS" CXX="clang++ $FLAGS" ./configure --disable-x86asm
make clean && make -j
* build the fuzz target.
Choose the value of FFMPEG_CODEC (e.g. AV_CODEC_ID_DVD_SUBTITLE) and
choose one of FUZZ_FFMPEG_VIDEO, FUZZ_FFMPEG_AUDIO, FUZZ_FFMPEG_SUBTITLE.
clang -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp tools/target_dec_fuzzer.c -o target_dec_fuzzer -I. -DFFMPEG_CODEC=AV_CODEC_ID_MPEG1VIDEO -DFUZZ_FFMPEG_VIDEO ../../libfuzzer/libFuzzer.a -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--as-needed -Wl,-z,noexecstack -Wl,--warn-common -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -ldl -lxcb -lxcb-shm -lxcb -lxcb-xfixes -lxcb -lxcb-shape -lxcb -lX11 -lasound -lm -lbz2 -lz -pthread
* create a corpus directory and put some samples there (empty dir is ok too):
mkdir CORPUS && cp some-files CORPUS
* Run fuzzing:
./target_dec_fuzzer -max_len=100000 CORPUS
More info:
http://libfuzzer.info
http://tutorial.libfuzzer.info
https://github.com/google/oss-fuzz
http://lcamtuf.coredump.cx/afl/
https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html
*/
// These next includes are taken from tools/uncoded_frame.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "libavutil/avassert.h"
#include "libavutil/mem.h"
#include "libavdevice/avdevice.h"
#include "libavfilter/avfilter.h"
#include "libavfilter/buffersink.h"
#include "libavformat/avformat.h"
#include "libavcodec/codec_id.h"
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
// This fuzzer is based on the source found in tools/uncoded_frame.c
int ret;
if (size < 3) { // Skip empty or nonsensical short inputs.
return 0;
}
// Now check for newline and space which are banned characters.
// Based on https://stackoverflow.com/a/9188556 thanks to stackoverflow user https://stackoverflow.com/users/65863/remy-lebeau
//unsigned char buffer[1500];
//bool allZeros = true;
for (int i = 0; i < size; ++i)
{
if (data[i] == 0x0a || data[i] == 0x20) // For newline or space character
{
//allZeros = false;
//break;
return 0;
}
}
// Now add a null byte at the end.
data[size-1] = 0x00; // Add null byte at the end.
AVFilterGraph *in_graph = NULL;
if (!(in_graph = avfilter_graph_alloc())) { // If allocation fails, just bail out here early.
return 0;
}
ret = avfilter_graph_parse_ptr(in_graph, data, NULL, NULL, NULL);
// Now free the graph object to avoid memory leaks...
avfilter_graph_free(&in_graph); // This is a bit weird that this expects a pointer but idk....
return 0;
}
The resulting binary is over 100mb in size which seems quite large but idk… I mean it makes sense because we statically link everything…
enabled ossfuzz && ! echo $CFLAGS | grep -q -- "-fsanitize=" && ! echo $CFLAGS | grep -q -- "-fcoverage-mapping" &&{
add_cflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp -fno-omit-frame-pointer
add_ldflags -fsanitize=address,undefined -fsanitize-coverage=trace-pc-guard,trace-cmp
I had to add the ` –toolchain=clang-asan ` flag to the thing to make it compile correctly….
After like half an hour of compiling I finally had the working binary with coverage and shit and look at that.
-fsanitize-coverage=trace-pc-guard is no longer supported by libFuzzer.
fuck!!!!
We need to remove that shit out of everywhere and then try compiling again……
Also sidenote: Taking a look at parsers.c in the ffmpeg source code there appears to be plenty of parsers which can be fuzzed individually. The fuzzers which exist seem to fuzz every format at the same exact time. I think this is bad practice since ideally you would add a fuzzer for each one of them and fuzz each format on their own.
Ok, so let’s generate a filter graph string. There is quite a lot of documentation on filter graphs and stuff: https://ffmpeg.org/ffmpeg-filters.html
Let’s try to generate a fuzzing dictionary based on that. Let’s try to generate an automatic script which just grabs the stuff from the webpage.
Looking at the webpage source, the interesting strings are encompassed in “var” and “samp” tags in the html, so we can maybe just do something like this:
Here is a botched example:
# This script basically scrapes the web page for samp var and class="example" strings...
def fix_string(input_string: str) -> str:
return input_string.replace(""", "\"")
def process_lines(lines):
output_strings = [] # All of the strings in the resulting dictionary.
for line in lines:
if line[-1] == "\n":
line = line[:-1] # Cut out newline.
# Now check for the shit...
if "class=\"example\">" in line:
line = line[line.index("class=\"example\">")+len("class=\"example\">"):]
if len(line) < 2:
continue
# print("Here is the line: "+str(line))
# Now check if it is just a segment or an actual command...
if " " in line and "ffmpeg " in line:
# Get the variables which have the "=" character in them
stuff = line.split(" ")
stuff = list(filter(lambda x: "=" in x, stuff))
assert isinstance(stuff, list)
assert all([isinstance(x, str) for x in stuff])
# Replace the shit
output_strings += stuff
# Fixup the strings for example """ should be a double quote etc etc..
output_strings = [fix_string(x) for x in output_strings]
print("output shit: ")
print("\n".join(output_strings))
def autodict():
fh = open("ffmpeg-filters.html", "r")
lines = fh.readlines()
fh.close()
process_lines(lines)
return
if __name__=="__main__":
autodict()
exit(0)
and it seems to work decently. Here is the output:
crop=iw:ih/2:0:0,
overlay=0:H/2"
scale=640:360
drawtext=/text=/tmp/some_text
acrossfade=d=10:c1=exp:c2=exp
acrossfade=d=10:o=0:c1=exp:c2=exp
'acrossover=split=1500[LOW][HIGH]'
'acrossover=split=1500:order=8th[LOW][HIGH]'
'acrossover=split=1500
8000:order=8th[LOW][MID][HIGH]'
amerge=inputs=6"
amix=inputs=3:duration=first:dropout_transition=3
amix=inputs=2:duration=longest:dropout_transition=0:weights="1
0.25":normalize=0
atrim=60:120
atrim=end_sample=1000
channelsplit,axcorrelate=size=1024:algo=fast
'channelmap=map=DL-FL|DR-FR'
'channelmap=1|2|0|5|3|4:5.1'
'channelsplit=channel_layout=5.1:channels=LFE[LFE]'
"amovie=minp.wav[hrirs];[0:a][hrirs]headphone=map=FL|FR|FC|LFE|BL|BR|SL|SR:hrir=multich"
join=inputs=3
"[1:a]asplit=2[sc][mix];[0:a][sc]sidechaincompress[compr];[compr][mix]amerge"
silencedetect=noise=0.0001
flite=text='So
am':voice=slt
chromakey=green
color=c=black:s=1280x720
"[1:v]chromakey=0x70de77:0.1:0.2[ckout];[0:v][ckout]overlay[out]"
cuda=cuda
colorkey=green
"[1:v]colorkey=0x3BBD1E:0.3:0.2[ckout];[0:v][ckout]overlay[out]"
nullsrc=s=100x100,coreimage=filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H
find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover
cropdetect,metadata=mode=print
mestimate,cropdetect=mode=mvedges,metadata=mode=print
cropdetect=mode=mvedges,metadata=mode=print
curves=cross_process:plot=/tmp/curves.plt
nullsrc=s=hd720,lutrgb=128:128:128
nullsrc=s=hd720,geq='r=128+30*sin(2*PI*X/400+T):g=128+30*sin(2*PI*X/400+T):b=128+30*sin(2*PI*X/400+T)'
nullsrc=hd720,geq='r=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T)):g=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T)):b=128+80*(sin(sqrt((X-W/2)*(X-W/2)+(Y-H/2)*(Y-H/2))/220*2*PI+T))'
format=rgb24,dnn_processing=dnn_backend=tensorflow:model=can.pb:input=x:output=y
format=yuv420p,scale=w=iw*2:h=ih*2,dnn_processing=dnn_backend=tensorflow:model=srcnn.pb:input=x:output=y
format=yuv420p,dnn_processing=dnn_backend=tensorflow:model=espcn.pb:input=x:output=y:backend_configs=sess_config=0x10022805320e09cdccccccccccec3f20012a01303801
'extractplanes=y+u+v[y][u][v]'
"fieldorder=bff"
find_rect=newref.pgm,cover_rect=cover.jpg:mode=cover
zscale=transfer=linear,grayworld,zscale=transfer=bt709,format=yuv420p
guided=guidance=on
href="#haldclutsrc">haldclutsrc</a>=8
"hue=H=2*PI*t:s=sin(2*PI*t)+1,
curves=cross_process"
href="#haldclutsrc">haldclutsrc</a>=8
idet,metadata=mode=print
lensfun=make=Canon:model="Canon
100D":lens_model="Canon
STM":focal_length=18:aperture=8
lensfun=make=Canon:model="Canon
100D":lens_model="Canon
STM":focal_length=18:aperture=8:enable='lte(t\,5)'
libplacebo=upscaler=none:downscaler=none:peak_detect=false
libplacebo=apply_filmgrain=true
libvmaf=log_path=output.xml
libvmaf='model=version=vmaf_v0.6.1\\:name=vmaf|version=vmaf_v0.6.1neg\\:name=vmaf_neg'
libvmaf='feature=name=psnr|name=ciede'
"[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]libvmaf=log_fmt=json:log_path=output.json"
'overlay=10:main_h-overlay_h-10'
'overlay=x=10:y=H-h-10,overlay=x=W-w-10:y=H-h-10'
"[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]psnr"
'readvitc,drawtext=fontfile=FreeMono.ttf:text=%{metadata\\:lavfi.readvitc.tc_str\\:--\\\\\\:--\\\\\\:--\\\\\\:--}:x=(w-tw)/2:y=400-ascent'
"shuffleframes=0
"shuffleframes=9
shuffleplanes=0:2:1:3
signature=filename=signature.bin
signature=nb_inputs=2:detectmode=full:format=xml:filename=signature%d.xml"
siti=print_summary=1
"[0:v]settb=AVTB,setpts=PTS-STARTPTS[main];[1:v]settb=AVTB,setpts=PTS-STARTPTS[ref];[main][ref]ssim"
color=gray
color=black
color=white
color=gray
color=white
color=black
color=gray
color=gray
color=gray
color=white
color=gray
color=white
thumbnail,scale=300:200
'scale=128:72,tile=8x8'
zscale=transfer=linear,tonemap=clip,zscale=transfer=bt709,format=yuv420p
trim=60:120
trim=duration=1
untile=1x25
v360=e:c3x2:cubic:out_pad=0.01
v360=eac:flat:yaw=180
vidstabdetect=shakiness=5:show=1
vidstabtransform,unsharp=5:5:0.8:3:3:0.4
xfade=transition=fade:duration=2:offset=5
coreimagesrc=s=100x100:filter=CIQRCodeGenerator@inputMessage=https\\\\\://FFmpeg.org/@inputCorrectionLevel=H
ddagrab=output_idx=1:framerate=60,hwdownload,format=bgra
aphasemeter=video=0:phasing=1:duration=1:tolerance=0.001
select='gt(scene\,0.4)',scale=160:120,tile
select=concatdec_select
aselect=concatdec_select
showspectrumpic=s=1024x1024
showwavespic=split_channels=1:s=1024x800
showspectrum=mode=separate:scale=log:overlap=0.875:color=channel:slide=fullframe:data=magnitude
asplit=5
which seems decent enough. Let’s program the other cases too.
Actually before we do that let’s address a crash which the fuzzer found.
oof@elskun-lppri:~/ffmpegfuzzerthing/myfork/FFmpeg/tools/fuzzingcampaign$ ./target_graph_fuzzer final.bin
INFO: Running with entropic power schedule (0xFF, 100).
INFO: Seed: 840731882
INFO: Loaded 1 modules (1514265 inline 8-bit counters): 1514265 [0x55786e892c38, 0x55786ea04751),
INFO: Loaded 1 PC tables (1514265 PCs): 1514265 [0x55786ea04758,0x55787011f8e8),
./target_graph_fuzzer: Running 1 inputs 1 time(s) each.
Running: final.bin
[Parsed_abuffersink_0 @ 0x511000000180] The "sample_fmts" option is deprecated: set the supported sample formats
[Parsed_abuffersink_0 @ 0x511000000180] The "sample_rates" option is deprecated: set the supported sample rates
[Parsed_abuffersink_0 @ 0x511000000180] The "ch_layouts" option is deprecated: set a '|'-separated list of supported channel layouts
libavfilter/buffersink.c:208:25: runtime error: applying zero offset to null pointer
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior libavfilter/buffersink.c:208:25
libavfilter/buffersink.c:208:24: runtime error: null pointer passed as argument 1, which is declared to never be null
/usr/include/string.h:61:62: note: nonnull attribute specified here
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior libavfilter/buffersink.c:208:24
AddressSanitizer:DEADLYSIGNAL
=================================================================
==422428==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x7f726ced6500 bp 0x7ffdfb649270 sp 0x7ffdfb648a38 T0)
==422428==The signal is caused by a WRITE memory access.
==422428==Hint: address points to the zero page.
#0 0x7f726ced6500 (/lib/x86_64-linux-gnu/libc.so.6+0x189500) (BuildId: 6d64b17fbac799e68da7ebd9985ddf9b5cb375e6)
#1 0x55786903e29e in __asan_memset (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/fuzzingcampaign/target_graph_fuzzer+0x41ee29e) (BuildId: c1e736a748ca18c0ca919e9db2eaf1561ad2f67a)
#2 0x557868d6c07d in common_init /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/buffersink.c:208:17
#3 0x55786925ba90 in avfilter_init_dict /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/avfilter.c:939:15
#4 0x5578690df2ab in avfilter_graph_segment_init /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/graphparser.c:634:19
#5 0x5578690e3abc in avfilter_graph_parse_ptr /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/graphparser.c:948:11
#6 0x55786907ebae in LLVMFuzzerTestOneInput /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/target_graph_fuzzer.c:104:11
#7 0x557868f8c174 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/fuzzingcampaign/target_graph_fuzzer+0x413c174) (BuildId: c1e736a748ca18c0ca919e9db2eaf1561ad2f67a)
#8 0x557868f752a6 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/fuzzingcampaign/target_graph_fuzzer+0x41252a6) (BuildId: c1e736a748ca18c0ca919e9db2eaf1561ad2f67a)
#9 0x557868f7ad5a in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/fuzzingcampaign/target_graph_fuzzer+0x412ad5a) (BuildId: c1e736a748ca18c0ca919e9db2eaf1561ad2f67a)
#10 0x557868fa5516 in main (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/fuzzingcampaign/target_graph_fuzzer+0x4155516) (BuildId: c1e736a748ca18c0ca919e9db2eaf1561ad2f67a)
#11 0x7f726cd771c9 (/lib/x86_64-linux-gnu/libc.so.6+0x2a1c9) (BuildId: 6d64b17fbac799e68da7ebd9985ddf9b5cb375e6)
#12 0x7f726cd7728a in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2a28a) (BuildId: 6d64b17fbac799e68da7ebd9985ddf9b5cb375e6)
#13 0x557868f6fe74 in _start (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/fuzzingcampaign/target_graph_fuzzer+0x411fe74) (BuildId: c1e736a748ca18c0ca919e9db2eaf1561ad2f67a)
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV (/lib/x86_64-linux-gnu/libc.so.6+0x189500) (BuildId: 6d64b17fbac799e68da7ebd9985ddf9b5cb375e6)
==422428==ABORTING
This actually seems like a legit null pointer dereference from what I can see. I think it is caused by this commit here: b8bf2f4e1758a9f7f34160245b5f663d53159c2d because when I compile a version which is before that it works as expected. This actually got fixed within two hours here: https://trac.ffmpeg.org/ticket/11392 . That seems like a good sign that we should fuzz this further. Let’s continue with our original task:
Now the dictionary format expects the strings to be enclosed with double quotes, but it also supports hex encoded strings like "\xFF\xFE"
and so on so I think the best way to encode these strings is to just do something like that…
Here is my final autodictionary script:
# This script basically scrapes the web page for samp var and class="example" strings...
def fix_string(input_string: str) -> str:
x = input_string.replace(""", "\"")
x = x.replace(" <em>(video only)</em>", "")
x = x.replace(" <em>(audio only)</em>", "")
return x
def process_lines(lines):
output_strings = [] # All of the strings in the resulting dictionary.
for line in lines:
if line[-1] == "\n":
line = line[:-1] # Cut out newline.
# Now check for the shit...
if "class=\"example\">" in line:
line = line[line.index("class=\"example\">")+len("class=\"example\">"):]
if len(line) < 2:
continue
# print("Here is the line: "+str(line))
# Now check if it is just a segment or an actual command...
if " " in line and "ffmpeg " in line:
# Get the variables which have the "=" character in them
stuff = line.split(" ")
stuff = list(filter(lambda x: "=" in x, stuff))
assert isinstance(stuff, list)
assert all([isinstance(x, str) for x in stuff])
# Replace the shit
output_strings += stuff
sep_thing = "<samp>"
if sep_thing in line:
print("<samp> line here: "+str(line))
assert sep_thing in line
line = line[line.index(sep_thing)+len(sep_thing):line.index("</samp>")]
print("linething: "+str(line))
output_strings.append(line)
sep_thing = "<var>"
if sep_thing in line:
print("<var> line here: "+str(line))
assert sep_thing in line
line = line[line.index(sep_thing)+len(sep_thing):line.index("</var>")]
print("linething: "+str(line))
output_strings.append(line)
# Fixup the strings for example """ should be a double quote etc etc..
output_strings = [fix_string(x) for x in output_strings]
# Get rid of duplicates
output_strings = list(set(output_strings))
#print("output shit: ")
#print("\n".join(output_strings))
return output_strings
def hex_thing(character): # This formats the character to the correct format...
char_as_hex = hex(ord(character))[2:] # Cut out the "0x"
# Now we need to check for values which are less than 0x10 here such that they take up two ascii spaces...
assert len(char_as_hex) == 1 or len(char_as_hex) == 2 # Sanity checking...
if len(char_as_hex) == 1:
char_as_hex = "0"+char_as_hex
return char_as_hex.upper()
def autodict():
fh = open("ffmpeg-filters.html", "r")
lines = fh.readlines()
fh.close()
strings = process_lines(lines)
# Now generate the dictionary.
fh = open("dictionary.dict", "w")
# kw3="\xF7\xF8"
for string in strings:
out = "\""
for char in string:
out += "\\x" + hex_thing(char)
out += "\"\n" # Close the quote and add newline.
fh.write(out) # Write to the dictionary file...
fh.close()
print("[+] Done!")
return
if __name__=="__main__":
autodict()
exit(0)
it converts the strings to hex represantion such that we don’t need to deal with the escaping bullshit…
Ok, so let’s add the examples from the documentation page to our corpus of stuff… this way we get a meaningful corpus too. (I think)
Here is my automation to generate the corpus of the good arguments and stuff:
# This script basically scrapes the web page for samp var and class="example" strings...
def fix_string(input_string: str) -> str:
x = input_string.replace(""", "\"")
x = x.replace(" <em>(video only)</em>", "")
x = x.replace(" <em>(audio only)</em>", "")
return x
def process_lines(lines):
output_strings = [] # All of the strings in the resulting dictionary.
for line in lines:
if line[-1] == "\n":
line = line[:-1] # Cut out newline.
# Now check for the shit...
if "ffmpeg " in line and "-vf " in line:
sep = "-vf "
restofline = line[line.index(sep)+len(sep):]
print("restofline:" +restofline)
# Now check for the easy case that if there are no quotes or there are only quotes at the ends...
if "\"" not in restofline and "'" not in restofline:
output_strings.append(restofline.split(" ")[0])
continue
if "\"" == restofline[-1] and "\"" == restofline[0] or "'" == restofline[-1] and "'" == restofline[0]:
# Just cut out the stuff
restofline = restofline[1:-1]
if "\"" not in restofline and "'" not in restofline:
output_strings.append(restofline.split(" ")[0])
continue
# Fuck there is some bullshit going on here. Just ignore these cases here...
continue
# There are quotes in the string so we need to do some stuff here.
separated = []
inquotes = False
for i, char in enumerate(restofline):
# Now check if character is a space and not inside quotes then just split on this index
if char == "\"" or char == "'":
if inquotes:
inquotes = False
else:
inquotes = True
else:
# Not a quote character.
# if not in quotes and character is space then split on this...
if char == " " and not inquotes:
break
actual_string = restofline[:i]
output_strings.append(actual_string)
# Now we have a potential command line thing here...
#print("output shit: ")
print("\n".join(output_strings))
return output_strings
def hex_thing(character): # This formats the character to the correct format...
char_as_hex = hex(ord(character))[2:] # Cut out the "0x"
# Now we need to check for values which are less than 0x10 here such that they take up two ascii spaces...
assert len(char_as_hex) == 1 or len(char_as_hex) == 2 # Sanity checking...
if len(char_as_hex) == 1:
char_as_hex = "0"+char_as_hex
return char_as_hex.upper()
def autodict():
fh = open("textstuff.txt", "r")
lines = fh.readlines()
fh.close()
strings = process_lines(lines)
for i, string in enumerate(strings):
fh = open("out/"+str(i), "w+")
fh.write(string)
fh.close()
print("[+] Done!")
return
if __name__=="__main__":
autodict()
exit(0)
Ok, so my final idea is to just go through the source code of libavfilter and search for the names of the filter straight from the source code.
I did this with a simple script called autocorp which I made here:
Ok, so the very first null pointer dereference wasn’t actually a null pointer deref, but instead it could be leveraged to leak memory: https://github.com/FFmpeg/FFmpeg/commit/041a6c36142f89addf2bc850f5bd27a089d900f5
Ok, so how do I get a coverage report for this shit?
Here is some documentation: https://clang.llvm.org/docs/SanitizerCoverage.html#default-implementation but I tried it on my thing and it doesn’t work for some fucking reason and does not generate the coverage files…
Here is the way with which I invoke this coverage stuff:
ASAN_OPTIONS=coverage=1 ./target_graph_fuzzer final.bin
But maybe for the fuzzer there is a custom exit procedure and because the files are created on exit: Every time you run an executable instrumented with SanitizerCoverage one *.sancov file is created during the process shutdown
this maybe means that we must compile a binary with a main function and then run it like that????
Nevermind we just maybe need to add the -fprofile-instr-generate -fcoverage-mapping
flags.
I added those and we still get fuck all sancov files???????????
Fuck this is infiruatiing, so no one tells me how to actually generate the coverage with libfuzzer?????
This is honestly such bullshit.
I get this output from the program:
-fsanitize-coverage=trace-pc-guard is no longer supported by libFuzzer.
Please either migrate to a compiler that supports -fsanitize=fuzzer
or use an older version of libFuzzer
so I think that we need to make a separate program which instead of having LLVMFuzzerTestOneInput it just has a normal main function???????????????????
Ok, so I managed to get the coverage bullshit to work and now we must convert the sancov files to the coverage bullshit??????
After a shitton of debugging this is now the coverage report I get:
Fuck!! It only shows the percentages of the files themselves, but does not show line by line coverage. This is honestly so bullshit…
Let’s use gcov and afl-cov which is supposed to be used with afl but I think I can hack it to work with any program and let’s just compile the bullshit with just gcov and shit like that..
Ok, so first up, let’s hack afl-cov to work without afl bullshit…
Here is my fork here: https://github.com/personnumber3377/afl-cov
Let’s also port it to python3 from python2 because reasons… let’s use 2to3
to achieve that….
Ok, so I had to fix the regular expressions and add the “r” before them aka: re.search("bla", bla) -> re.search(r"bla", bla)
Now the fuzz dir is the afl_fuzzing_dir variable in the code so we need to make it such that it works for any directory which has test files????
Now I am in the 532ce4b62a177ef99912129cdc1c8d3b354ee1d2 commit of my own fork and let’s test it out first before going further.
Here is the test program which I am going to use:
#include <unistd.h>
#include <string.h>
int main(int argc, char** argv) {
unsigned char data[10];
unsigned int size;
// Memset to zero to avoid using uninitialized memory...
memset(data, 0x00 , sizeof(data));
size = read(0, data, sizeof(data)-1); // Read the buffer...
if (size > 0 && data[0] == 'H')
if (size > 1 && data[1] == 'I')
if (size > 2 && data[2] == '!')
printf("%s", "Hello to you too!\n"); // This was originally: "__builtin_trap();"
return 0;
}
ok, so let’s see what happens with our tool…
Let’s first create a file called tests which will be our tests directory.
First of all there is a glob which checks for files which start with the string: “id:” in the code:
def import_test_cases(qdir):
return sorted(glob.glob(qdir + "/id:*"))
now let’s just get every file like so:
def import_test_cases(qdir):
return sorted(glob.glob(qdir + "/*"))
and check again…
Ok, so now the tool seems to work normally, let’s compile ffmpeg with the coverage flags and then analyze the resulting files…
Ok, so after compiling with gcov we now have it somewhat working maybe?????????
Now the running of these files is very fucking slow for some reason, let’s try to figure out why that is…
Ok, so let’s just create a program which loops through all of the coverage files in the same loop, because that way we can probably get the coverage without having to wait 2000 years for the program to complete maybe????
Here is my janky hack for this:
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* Targeted fuzzer that targets the graphs.
INSTRUCTIONS:
* Get the very fresh clang, e.g. see http://libfuzzer.info#versions
* Get and build libFuzzer:
svn co http://llvm.org/svn/llvm-project/llvm/trunk/lib/Fuzzer
./Fuzzer/build.sh
* build ffmpeg for fuzzing:
FLAGS="-fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp -g" CC="clang $FLAGS" CXX="clang++ $FLAGS" ./configure --disable-x86asm
make clean && make -j
* build the fuzz target.
Choose the value of FFMPEG_CODEC (e.g. AV_CODEC_ID_DVD_SUBTITLE) and
choose one of FUZZ_FFMPEG_VIDEO, FUZZ_FFMPEG_AUDIO, FUZZ_FFMPEG_SUBTITLE.
clang -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp tools/target_dec_fuzzer.c -o target_dec_fuzzer -I. -DFFMPEG_CODEC=AV_CODEC_ID_MPEG1VIDEO -DFUZZ_FFMPEG_VIDEO ../../libfuzzer/libFuzzer.a -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--as-needed -Wl,-z,noexecstack -Wl,--warn-common -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -ldl -lxcb -lxcb-shm -lxcb -lxcb-xfixes -lxcb -lxcb-shape -lxcb -lX11 -lasound -lm -lbz2 -lz -pthread
* create a corpus directory and put some samples there (empty dir is ok too):
mkdir CORPUS && cp some-files CORPUS
* Run fuzzing:
./target_dec_fuzzer -max_len=100000 CORPUS
More info:
http://libfuzzer.info
http://tutorial.libfuzzer.info
https://github.com/google/oss-fuzz
http://lcamtuf.coredump.cx/afl/
https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html
*/
// These next includes are taken from tools/uncoded_frame.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "libavutil/avassert.h"
#include "libavutil/mem.h"
#include "libavdevice/avdevice.h"
#include "libavfilter/avfilter.h"
#include "libavfilter/buffersink.h"
#include "libavformat/avformat.h"
#include "libavcodec/codec_id.h"
// ssize_t read(int fd, void buf[.count], size_t count);
// This loads all of the device shit:
/*
int LLVMFuzzerInitialize(int *argc, char ***argv);
int LLVMFuzzerInitialize(int *argc, char ***argv) {
return 0;
}
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
*/
int process_buffer(uint8_t* buf, int size);
int read_file_to_buffer(const char *filename, uint8_t* buf);
void process_directory(const char *directory);
int process_buffer(uint8_t* buf, int size) {
// This runs the buffer thing....
printf("Processing the buffer....\n");
avdevice_register_all(); // Register the device bullshit here...
if (size < 3 || size > (299)) { // Skip empty or nonsensical short inputs.
printf("Fuck oof....\n");
return 0;
}
// Read from stdin...
// Now check for newline and space which are banned characters.
// Based on https://stackoverflow.com/a/9188556 thanks to stackoverflow user https://stackoverflow.com/users/65863/remy-lebeau
//unsigned char buffer[1500];
//bool allZeros = true;
for (int i = 0; i < size; ++i)
{
if (buf[i] == 0x0a || buf[i] == 0x20) // For newline or space character
{
//allZeros = false;
//break;
return 0;
}
}
// Now add a null byte at the end.
// We can not do this because we get an error saying that the constant input data was changed: SUMMARY: libFuzzer: overwrites-const-input
//data[size-1] = 0x00; // Add null byte at the end.
// So we memcpy the data to a mutable buffer and add the thing.
// void *memcpy(void dest[restrict .n], const void src[restrict .n],
// size_t n);
// buf
// Check for abuffersink
//memcpy(buf, data, size);
//buf[size] = 0x00; // Add the null terminator
// uint8_t* buf = (uint8_t*) malloc(size+1);
//memcpy(buf, data, size);
buf[size] = 0x00;
// Check for "abuffersink"
if (strstr(buf, "abuffersink")) { // This is to avoid the crash in the thing
// free(buf);
return 0;
}
if (strstr(buf, "mix=")) { // This is to avoid the timeout
// free(buf);
return 0;
}
// xbr=
if (strstr(buf, "xbr=")) { // This is to avoid the timeout
// free(buf);
return 0;
}
printf("Parsing this thing: %s\n", buf);
AVFilterGraph *in_graph = NULL;
if (!(in_graph = avfilter_graph_alloc())) { // If allocation fails, just bail out here early.
// free(buf);
return 0;
}
int ret;
ret = avfilter_graph_parse_ptr(in_graph, buf, NULL, NULL, NULL);
// Now free the graph object to avoid memory leaks...
avfilter_graph_free(&in_graph); // This is a bit weird that this expects a pointer but idk....
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
#define BUFFER_SIZE 1024 // You can adjust this based on your needs
int read_file_to_buffer(const char *filename, uint8_t* buf) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("Failed to open file");
printf("FUUUCKKKKCKKCKCKCCKCKCKCKCKCKCKCCKCKCKCKCKCKCKC");
return -1;
}
// Create a buffer to hold file contents
//char buffer[BUFFER_SIZE];
size_t bytes_read;
printf("Reading file: %s\n", filename);
/* while ((bytes_read = fread(buf, 1, 300-1, file)) > 0) {
}
*/
bytes_read = fread(buf, 1, 300-1, file);
printf("Bytes read: %i\n", bytes_read);
fclose(file);
return bytes_read;
}
void process_directory(const char *directory) {
uint8_t buf[300];
DIR *dir = opendir(directory);
if (dir == NULL) {
perror("Failed to open directory");
return;
}
struct dirent *entry;
int bytes_read;
while ((entry = readdir(dir)) != NULL) {
// Skip directories (and hidden files)
/*
if (entry->d_type == DT_DIR || entry->d_name[0] == '.') {
continue;
}
*/
// Construct the full path to the file
char filepath[512];
snprintf(filepath, sizeof(filepath), "%s/%s", directory, entry->d_name);
// Call the function to read each file
memset(buf, 0x00, sizeof(buf)); // Zero out buffer
bytes_read = read_file_to_buffer(filepath, buf);
process_buffer(buf, bytes_read);
}
closedir(dir);
}
int main(int argc, char** argv) {
// This fuzzer is based on the source found in tools/uncoded_frame.c
int size;
int ret;
// void *memset(void s[.n], int c, size_t n);
process_directory("corpus_thing");
// Read from stdin..
// free(buf);
return 0;
}
Now I get this output from my afl-cov thing:
CMD: /usr/bin/readelf -a cat
Non-zero exit status '1' for CMD: /usr/bin/readelf -a cat
CMD: /usr/bin/readelf -a ./target_graph_fuzzer_coverage
poopoofefefpoopoofefefpoopoofefefpoopoofefefpoopoofefefpoopoofefefpoopoofefefpoopoofefefpoopoofefefpoopoofefef
CMD: /usr/bin/lcov --no-checksum --ignore-errors mismatch --zerocounters --directory .
CMD: /usr/bin/lcov --no-checksum --ignore-errors mismatch --capture --initial --directory . --output-file ./nothing//cov/lcov/trace.lcov_base
*** Imported 2 new test cases from: ./nothing/
[+] Test case: 1.txt (0 / 2), cycle: 0
CMD: cat ./nothing/1.txt | ./target_graph_fuzzer_coverage
Traceback (most recent call last):
File "/home/oof/ffmpegfuzzerthing/myfork/shit/FFmpeg/./afl-cov", line 1221, in <module>
sys.exit(main())
^^^^^^
File "/home/oof/ffmpegfuzzerthing/myfork/shit/FFmpeg/./afl-cov", line 91, in main
return not process_afl_test_cases(cargs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/oof/ffmpegfuzzerthing/myfork/shit/FFmpeg/./afl-cov", line 189, in process_afl_test_cases
out_lines = run_cmd(cargs.coverage_cmd.replace('AFL_FILE', f),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/oof/ffmpegfuzzerthing/myfork/shit/FFmpeg/./afl-cov", line 718, in run_cmd
for line in f:
File "<frozen codecs>", line 322, in decode
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 8129-8130: invalid continuation byte
I think I can just bypass this with --disable-cmd-redirection
It seems to run all of the files quite nicely. Let’s look at the results.
Ok, so let’s finally see how our fuzzer has done…
Ok, so it hasn’t really done all that well which is not surprising because we only call the parser but we do not actually exercise any of the filters because we never call the processing functions..
So I think the plan forward is the following:
Ok, so let’s take a look at encoded_frame.c again and see how it does stuff…
Here is an example program taken from the source code:
/*
* Copyright (c) 2010 Nicolas George
* Copyright (c) 2011 Stefano Sabatini
* Copyright (c) 2012 Clément Bœsch
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* @file audio decoding and filtering usage example
* @example decode_filter_audio.c
*
* Demux, decode and filter audio input file, generate a raw audio
* file to be played with ffplay.
*/
#include <unistd.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
#include <libavutil/channel_layout.h>
#include <libavutil/mem.h>
#include <libavutil/opt.h>
static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -";
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
static int open_input_file(const char *filename)
{
const AVCodec *dec;
int ret;
if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
return ret;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
return ret;
}
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find an audio stream in the input file\n");
return ret;
}
audio_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[audio_stream_index]->codecpar);
/* init the audio decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
return ret;
}
return 0;
}
static int init_filters(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
static const int out_sample_rate = 8000;
const AVFilterLink *outlink;
AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer audio source: the decoded frames from the decoder will be inserted here. */
if (dec_ctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&dec_ctx->ch_layout, dec_ctx->ch_layout.nb_channels);
ret = snprintf(args, sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=",
time_base.num, time_base.den, dec_ctx->sample_rate,
av_get_sample_fmt_name(dec_ctx->sample_fmt));
av_channel_layout_describe(&dec_ctx->ch_layout, args + ret, sizeof(args) - ret);
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
goto end;
}
/* buffer audio sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "sample_formats", "s16",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
goto end;
}
ret = av_opt_set(buffersink_ctx, "channel_layouts", "mono",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
goto end;
}
ret = av_opt_set_array(buffersink_ctx, "samplerates", AV_OPT_SEARCH_CHILDREN,
0, 1, AV_OPT_TYPE_INT, &out_sample_rate);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize audio buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
/* Print summary of the sink buffer
* Note: args buffer is reused to store channel layout string */
outlink = buffersink_ctx->inputs[0];
av_channel_layout_describe(&outlink->ch_layout, args, sizeof(args));
av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
(int)outlink->sample_rate,
(char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
args);
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
static void print_frame(const AVFrame *frame)
{
const int n = frame->nb_samples * frame->ch_layout.nb_channels;
const uint16_t *p = (uint16_t*)frame->data[0];
const uint16_t *p_end = p + n;
while (p < p_end) {
fputc(*p & 0xff, stdout);
fputc(*p>>8 & 0xff, stdout);
p++;
}
fflush(stdout);
}
int main(int argc, char **argv)
{
int ret;
AVPacket *packet = av_packet_alloc();
AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
if (!packet || !frame || !filt_frame) {
fprintf(stderr, "Could not allocate frame or packet\n");
exit(1);
}
if (argc != 2) {
fprintf(stderr, "Usage: %s file | %s\n", argv[0], player);
exit(1);
}
if ((ret = open_input_file(argv[1])) < 0)
goto end;
if ((ret = init_filters(filter_descr)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == audio_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
goto end;
}
if (ret >= 0) {
/* push the audio data from decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
break;
}
/* pull filtered audio from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
}
av_packet_unref(packet);
}
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
avformat_close_input(&fmt_ctx);
av_packet_free(&packet);
av_frame_free(&frame);
av_frame_free(&filt_frame);
if (ret < 0 && ret != AVERROR_EOF) {
fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
exit(1);
}
exit(0);
}
where we actually use the filter, now let’s code up a program which has a hardcoded input audio and input audio…
Here is a backup of my code:
/*
* This file is part of FFmpeg.
*
* FFmpeg is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* FFmpeg is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with FFmpeg; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
/* Targeted fuzzer that targets the graphs.
INSTRUCTIONS:
* Get the very fresh clang, e.g. see http://libfuzzer.info#versions
* Get and build libFuzzer:
svn co http://llvm.org/svn/llvm-project/llvm/trunk/lib/Fuzzer
./Fuzzer/build.sh
* build ffmpeg for fuzzing:
FLAGS="-fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp -g" CC="clang $FLAGS" CXX="clang++ $FLAGS" ./configure --disable-x86asm
make clean && make -j
* build the fuzz target.
Choose the value of FFMPEG_CODEC (e.g. AV_CODEC_ID_DVD_SUBTITLE) and
choose one of FUZZ_FFMPEG_VIDEO, FUZZ_FFMPEG_AUDIO, FUZZ_FFMPEG_SUBTITLE.
clang -fsanitize=address -fsanitize-coverage=trace-pc-guard,trace-cmp tools/target_dec_fuzzer.c -o target_dec_fuzzer -I. -DFFMPEG_CODEC=AV_CODEC_ID_MPEG1VIDEO -DFUZZ_FFMPEG_VIDEO ../../libfuzzer/libFuzzer.a -Llibavcodec -Llibavdevice -Llibavfilter -Llibavformat -Llibavutil -Llibpostproc -Llibswscale -Llibswresample -Wl,--as-needed -Wl,-z,noexecstack -Wl,--warn-common -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil -lavdevice -lavfilter -lavformat -lavcodec -lswresample -lswscale -lavutil -ldl -lxcb -lxcb-shm -lxcb -lxcb-xfixes -lxcb -lxcb-shape -lxcb -lX11 -lasound -lm -lbz2 -lz -pthread
* create a corpus directory and put some samples there (empty dir is ok too):
mkdir CORPUS && cp some-files CORPUS
* Run fuzzing:
./target_dec_fuzzer -max_len=100000 CORPUS
More info:
http://libfuzzer.info
http://tutorial.libfuzzer.info
https://github.com/google/oss-fuzz
http://lcamtuf.coredump.cx/afl/
https://security.googleblog.com/2016/08/guided-in-process-fuzzing-of-chrome.html
*/
// These next includes are taken from tools/uncoded_frame.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include "libavutil/avassert.h"
#include "libavutil/mem.h"
#include "libavdevice/avdevice.h"
#include "libavfilter/avfilter.h"
#include "libavfilter/buffersink.h"
#include "libavformat/avformat.h"
#include "libavcodec/codec_id.h"
// ssize_t read(int fd, void buf[.count], size_t count);
// This loads all of the device shit:
/*
int LLVMFuzzerInitialize(int *argc, char ***argv);
int LLVMFuzzerInitialize(int *argc, char ***argv) {
return 0;
}
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
*/
int process_buffer(uint8_t* buf, int size);
int read_file_to_buffer(const char *filename, uint8_t* buf);
void process_directory(const char *directory);
int process_buffer(uint8_t* buf, int size) {
// This runs the buffer thing....
printf("Processing the buffer....\n");
avdevice_register_all(); // Register the device bullshit here...
if (size < 3 || size > (299)) { // Skip empty or nonsensical short inputs.
printf("Fuck oof....\n");
return 0;
}
// Read from stdin...
// Now check for newline and space which are banned characters.
// Based on https://stackoverflow.com/a/9188556 thanks to stackoverflow user https://stackoverflow.com/users/65863/remy-lebeau
//unsigned char buffer[1500];
//bool allZeros = true;
for (int i = 0; i < size; ++i)
{
if (buf[i] == 0x0a || buf[i] == 0x20) // For newline or space character
{
//allZeros = false;
//break;
return 0;
}
}
// Now add a null byte at the end.
// We can not do this because we get an error saying that the constant input data was changed: SUMMARY: libFuzzer: overwrites-const-input
//data[size-1] = 0x00; // Add null byte at the end.
// So we memcpy the data to a mutable buffer and add the thing.
// void *memcpy(void dest[restrict .n], const void src[restrict .n],
// size_t n);
// buf
// Check for abuffersink
//memcpy(buf, data, size);
//buf[size] = 0x00; // Add the null terminator
// uint8_t* buf = (uint8_t*) malloc(size+1);
//memcpy(buf, data, size);
buf[size] = 0x00;
// Check for "abuffersink"
if (strstr(buf, "abuffersink")) { // This is to avoid the crash in the thing
// free(buf);
return 0;
}
if (strstr(buf, "mix=")) { // This is to avoid the timeout
// free(buf);
return 0;
}
// xbr=
if (strstr(buf, "xbr=")) { // This is to avoid the timeout
// free(buf);
return 0;
}
//printf("Parsing this thing: %s\n", buf);
AVFilterGraph *in_graph = NULL;
if (!(in_graph = avfilter_graph_alloc())) { // If allocation fails, just bail out here early.
// free(buf);
return 0;
}
int ret;
ret = avfilter_graph_parse_ptr(in_graph, buf, NULL, NULL, NULL);
// Now free the graph object to avoid memory leaks...
avfilter_graph_free(&in_graph); // This is a bit weird that this expects a pointer but idk....
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <dirent.h>
#include <string.h>
#define BUFFER_SIZE 1024 // You can adjust this based on your needs
int read_file_to_buffer(const char *filename, uint8_t* buf) {
FILE *file = fopen(filename, "r");
if (file == NULL) {
perror("Failed to open file");
printf("FUUUCKKKKCKKCKCKCCKCKCKCKCKCKCKCCKCKCKCKCKCKCKC");
return -1;
}
// Create a buffer to hold file contents
//char buffer[BUFFER_SIZE];
size_t bytes_read;
printf("Reading file: %s\n", filename);
/* while ((bytes_read = fread(buf, 1, 300-1, file)) > 0) {
}
*/
bytes_read = fread(buf, 1, 300-1, file);
printf("Bytes read: %i\n", bytes_read);
fclose(file);
return bytes_read;
}
void process_directory(const char *directory) {
uint8_t buf[300];
DIR *dir = opendir(directory);
if (dir == NULL) {
perror("Failed to open directory");
return;
}
struct dirent *entry;
int bytes_read;
while ((entry = readdir(dir)) != NULL) {
// Skip directories (and hidden files)
/*
if (entry->d_type == DT_DIR || entry->d_name[0] == '.') {
continue;
}
*/
// Construct the full path to the file
char filepath[512];
snprintf(filepath, sizeof(filepath), "%s/%s", directory, entry->d_name);
// Call the function to read each file
memset(buf, 0x00, sizeof(buf)); // Zero out buffer
bytes_read = read_file_to_buffer(filepath, buf);
process_buffer(buf, bytes_read);
}
closedir(dir);
}
/*
int main(int argc, char** argv) {
// This fuzzer is based on the source found in tools/uncoded_frame.c
int size;
int ret;
// void *memset(void s[.n], int c, size_t n);
process_directory("corpus_thing");
// Read from stdin..
// free(buf);
return 0;
}
*/
/*
* Copyright (c) 2010 Nicolas George
* Copyright (c) 2011 Stefano Sabatini
* Copyright (c) 2012 Clément Bœsch
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* @file audio decoding and filtering usage example
* @example decode_filter_audio.c
*
* Demux, decode and filter audio input file, generate a raw audio
* file to be played with ffplay.
*/
#include <unistd.h>
/*
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
#include <libavutil/channel_layout.h>
#include <libavutil/mem.h>
#include <libavutil/opt.h>
*/
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -";
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
static int open_input_file(const char *filename)
{
const AVCodec *dec;
int ret;
if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
return ret;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
return ret;
}
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find an audio stream in the input file\n");
return ret;
}
audio_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[audio_stream_index]->codecpar);
/* init the audio decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
return ret;
}
return 0;
}
static int init_filters(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
static const int out_sample_rate = 8000;
const AVFilterLink *outlink;
AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer audio source: the decoded frames from the decoder will be inserted here. */
if (dec_ctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&dec_ctx->ch_layout, dec_ctx->ch_layout.nb_channels);
ret = snprintf(args, sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=",
time_base.num, time_base.den, dec_ctx->sample_rate,
av_get_sample_fmt_name(dec_ctx->sample_fmt));
av_channel_layout_describe(&dec_ctx->ch_layout, args + ret, sizeof(args) - ret);
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
goto end;
}
/* buffer audio sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "sample_formats", "s16",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
goto end;
}
ret = av_opt_set(buffersink_ctx, "channel_layouts", "mono",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
goto end;
}
ret = av_opt_set_array(buffersink_ctx, "samplerates", AV_OPT_SEARCH_CHILDREN,
0, 1, AV_OPT_TYPE_INT, &out_sample_rate);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize audio buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
/* Print summary of the sink buffer
* Note: args buffer is reused to store channel layout string */
outlink = buffersink_ctx->inputs[0];
av_channel_layout_describe(&outlink->ch_layout, args, sizeof(args));
av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
(int)outlink->sample_rate,
(char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
args);
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
static void print_frame(const AVFrame *frame)
{
const int n = frame->nb_samples * frame->ch_layout.nb_channels;
const uint16_t *p = (uint16_t*)frame->data[0];
const uint16_t *p_end = p + n;
while (p < p_end) {
fputc(*p & 0xff, stdout);
fputc(*p>>8 & 0xff, stdout);
p++;
}
fflush(stdout);
}
int main(int argc, char **argv)
{
int ret;
AVPacket *packet = av_packet_alloc();
AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
if (!packet || !frame || !filt_frame) {
fprintf(stderr, "Could not allocate frame or packet\n");
exit(1);
}
if (argc != 2) {
fprintf(stderr, "Usage: %s file | %s\n", argv[0], player);
exit(1);
}
if ((ret = open_input_file(argv[1])) < 0)
goto end;
if ((ret = init_filters(filter_descr)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == audio_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
goto end;
}
if (ret >= 0) {
/* push the audio data from decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
break;
}
/* pull filtered audio from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
}
av_packet_unref(packet);
}
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
avformat_close_input(&fmt_ctx);
av_packet_free(&packet);
av_frame_free(&frame);
av_frame_free(&filt_frame);
if (ret < 0 && ret != AVERROR_EOF) {
fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
exit(1);
}
exit(0);
}
Now I am wondering if there is a way to read from a buffer instead of some file. This should cut down the latency because disk operations are relatively slow. I stumbled upon this: https://stackoverflow.com/questions/20635601/ffmpeg-avformat-open-input-with-memory-located-file but the answer is C++ which we don’t really want.
After going on a hunt, I edventually found this: https://github.com/leixiaohua1020/simplest_ffmpeg_mem_handler/blob/master/simplest_ffmpeg_mem_transcoder/simplest_ffmpeg_mem_transcoder.cpp
Let’s create a simple python script which takes the input file and then just outputs a .h file which has the hardcoded buffer as a byte buffer????+
Here is the generated file:
#include <stdint.h>
// Hardcoded mp3 file as bytebuffer such that we do not need to reload from disk on every fuzz iteration...
static uint8_t STATIC_MP3_INPUT[] = { 0xff, 0xfb, 0x90, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x69, 0x6e, 0x67, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x15, 0x99, 0x0, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x50, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x4, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x20, 0x24, 0x5, 0x47, 0x4d, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x15, 0x99, 0xf3, 0x91, 0xbd, 0x8a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfb, 0xc0, 0x64, 0x0, 0x0, 0x1, 0x4, 0x0, 0x4a, 0x6d, 0x0, 0x0, 0x8, 0x0, 0x0, 0xf, 0xf0, 0xa0, 0x0, 0x1, 0x17, 0x68, 0xfd, 0x2d, 0xb9, 0xbd, 0x80, 0x0, 0x0, 0x0, 0x3f, 0xc3, 0x0, 0x0, 0x0, 0xb6, 0xe6, 0xc0, 0x25, 0x25, 0x10, 0x60, 0x0, 0x8, 0x2, 0x0, 0x80, 0x20, 0x5c, 0xfc, 0x10, 0x70, 0x61, 0x60, 0xf9, 0xf2, 0xef, 0x44, 0xb8, 0x21, 0xca, 0x7c, 0x4e, 0x7f, 0xff, 0xc4, 0x1, 0x86, 0x44, 0x20, 0x0, 0x80, 0x20, 0x0, 0x0, 0x5a, 0xdb, 0x92, 0x8c, 0x0, 0x0, 0x5f, 0x46, 0x18, 0x2c, 0xd2, 0xc, 0x34, 0x75, 0xfe, 0x19, 0x5f, 0x32, 0x20, 0x7, 0xd8, 0x1c, 0xaa, 0x14, 0x1c, 0x34, 0x40, 0xa1, 0x19, 0x50, 0x5c, 0x1c, 0x4, 0x46, 0x14, 0x6, 0x37, 0x27, 0x20, 0x52, 0x61, 0xcd, 0xa3, 0x98, 0x30, 0x11, 0x84, 0x1, 0x1b, 0x38, 0xf8, 0x54, 0x3c, 0xf3, 0xc2, 0x58, 0x7b, 0xf0, 0xc7, 0xd7, 0x21, 0x76, 0x83, 0x80, 0x19, 0x41, 0x31, 0xfa, 0x13, 0x92, 0x81, 0xa6, 0x29, 0x9a, 0x83, 0xc0, 0xe9, 0x60, 0x32, 0x26, 0x10, 0x36, 0xdd, 0x44, 0x60, 0xcf, 0x29, 0x32, 0x20, 0x28, 0x39, 0x82, 0x47, 0x60, 0x77, 0x11, 0xfc, 0x5e, 0xaa, 0xa4, 0xb2, 0x99, 0x9d, 0x1b, 0x1f, 0x21, 0x1, 0x30, 0x50, 0x20, 0x31, 0x12, 0x0, 0x17, 0xa3, 0xaf, 0x95, 0x4a, 0x77, 0xdd, 0x2a, 0x54, 0x84, 0x37, 0x7a, 0x75, 0x60, 0x40, 0xc1, 0x70, 0xec, 0xcc, 0x5d, 0x68, 0x17, 0xa6, 0x2e, 0xd3, 0xdf, 0xbc, 0x6c, 0x7e, 0x6a, 0x6c, 0xd2, 0x13, 0xcd, 0x9b, 0xde, 0xd3, 0xf9, 0x8b, 0x21, 0x79, 0x68, 0xef, 0xf6, 0xa6, 0x7d, 0xff, 0xd7, 0x7b, 0xff, 0x8, 0x85, 0x7f, 0x6e, 0x4b, 0x2f, 0xe5, 0xc8, 0xa, 0x4d, 0x9e, 0x33, 0x6f, 0x4b, 0xd1, 0xe, 0x6d, 0xa4, 0x0, 0x42, 0x0, 0x0, 0x0, 0x0, 0x45, 0x6f, 0xc, 0x14, 0x61, 0x9, 0x4d, 0xdc, 0xb0, 0xa, 0xee, 0xa, 0x81, 0x83, 0x28, 0xc3, 0xb3, 0xc0, 0xca, 0x82, 0x21, 0x2, 0xcd, 0x98, 0x58, 0x22, 0xea, 0x36, 0x56, 0x50, 0x10, 0xda, 0xe5, 0x4, 0xb, 0x99, 0x60, 0x7a, 0x6b, 0x12, 0x1c, 0x74, 0xa6, 0xc1, 0xb1, 0xa1, 0x7f, 0x5a, 0xea, 0x32, 0x45, 0xa7, 0x79, 0x93, 0xa4, 0xb4, 0xa0, 0xbb, 0x5d, 0xf8, 0x52, 0xb3, 0xa2, 0x29, 0x9c, 0x61, 0x10, 0xf, 0x3d, 0x4c, 0xe1, 0x6e, 0x12, 0xcc, 0xe5, 0x5c, 0x61, 0xd4, 0x30, 0x4c, 0x3b, 0x11, 0x7c, 0x5f, 0x57, 0x16, 0xb3, 0xf9, 0xae, 0xe1, 0xcf, 0xd3, 0xef, 0x14, 0xa0, 0xb3, 0x6a, 0x95, 0x83, 0xd3, 0xc6, 0xa0, 0x99, 0xbe, 0x5d, 0xa7, 0xa0, 0xb9, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xca, 0xed, 0x64, 0xfa, 0x38, 0x12, 0x28, 0xae, 0x7b, 0xbd, 0x85, 0xc8, 0x84, 0x3f, 0x7e, 0x59, 0x7d, 0xb1, 0xc5, 0x93, 0x81, 0xad, 0xaf, 0xfa, 0x27, 0x8, 0x40, 0x2a, 0x45, 0x3, 0x57, 0x4c, 0xe1, 0x62, 0x18, 0xbb, 0xa6, 0x82, 0x78, 0xbe, 0xbe, 0xdd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x18, 0x5e, 0xe7, 0x6f, 0xd2, 0x5f, 0x93, 0x5d, 0xb5, 0xdd, 0x63, 0x76, 0xdd, 0x6a, 0x4b, 0x2e, 0x84, 0x8, 0xcd, 0xdd, 0x6, 0xf2, 0x96, 0x1e, 0x88, 0xde, 0x98, 0x3, 0x60, 0x7c, 0x38, 0x3, 0x20, 0x28, 0x41, 0xb0, 0x2b, 0x60, 0xce, 0x83, 0xa5, 0x92, 0x2e, 0x48, 0xb0, 0x53, 0xfa, 0x23, 0x0, 0x35, 0x8c, 0x60, 0x31, 0xd1, 0x8a, 0x4, 0x88, 0x84, 0x83, 0x80, 0x41, 0x22, 0x6b, 0x28, 0xd0, 0x94, 0x9e, 0x20, 0xa8, 0xb, 0x39, 0x1e, 0x5, 0x95, 0x38, 0x66, 0x93, 0x4b, 0xd5, 0x3a, 0xb5, 0x3b, 0xcc, 0xf5, 0xf6, 0x1a, 0x44, 0x57, 0x3f, 0xce, 0x56, 0xef, 0xf, 0x13, 0x4f, 0xff, 0x26, 0x5e, 0x13, 0x5b, 0xd8, 0xad, 0x6e, 0xe1, 0x76, 0x6a, 0xad, 0x7e, 0xe5, 0x85, 0x23, 0x8c, 0x4d, 0xc7, 0xe6, 0x1c, 0x88, 0xc7, 0xe4, 0xa9, 0x38, 0xf4, 0x55, 0xc7, 0xbf, 0xa9, 0x45, 0xeb, 0x97, 0xec, 0xcc, 0xa5, 0x5a, 0xb3, 0x63, 0x37, 0x3, 0xdd, 0xef, 0xc3, 0xbf, 0xff, 0xcc, 0x3c, 0x98, 0x48, 0x2a, 0x27, 0x2c, 0x7c, 0x77, 0x86, 0xf7, 0x90, 0x75, 0xb8, 0xb9, 0x64, 0x8, 0x50, 0x4b, 0x90, 0x17, 0x3, 0xe4, 0xe3, 0xe6, 0x83, 0xb0, 0x40, 0x13, 0x4d, 0x8d, 0x4d, 0x9, 0xda, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xaf, 0xb3, 0xf5, 0xa9, 0x33, 0x2b, 0xb3, 0x7b, 0x30, 0x48, 0x1d, 0x6, 0xaf, 0x86, 0xe, 0xf0, 0x47, 0x38, 0xe5, 0x56, 0x33, 0xfc, 0xe6, 0x7d, 0x8e, 0xb9, 0x30, 0x63, 0x6, 0x38, 0x64, 0xc, 0x2c, 0x1b, 0xc4, 0x41, 0xa2, 0x11, 0x0, 0xa8, 0xe9, 0x88, 0x8f, 0x24, 0xe8, 0xa8, 0xe0, 0x7, 0xc0, 0xe0, 0x87, 0x8a, 0x83, 0x29, 0x36, 0x61, 0x42, 0xd, 0x7d, 0x98, 0x2, 0x94, 0xc4, 0x87, 0x9, 0x45, 0x1, 0x1e, 0x84, 0xb7, 0x11, 0x6c, 0x82, 0xc1, 0x80, 0xb, 0xbd, 0x31, 0x4e, 0x9b, 0xc3, 0x2, 0x9c, 0x64, 0xcf, 0xe5, 0x4, 0xf7, 0xd8, 0x48, 0x39, 0x45, 0xe9, 0x2, 0x4a, 0xda, 0xdc, 0xf0, 0x38, 0x10, 0x50, 0x6e, 0xfe, 0x59, 0xc3, 0x15, 0x16, 0x19, 0x4b, 0x24, 0x14, 0xf1, 0xb9, 0x64, 0x0, 0x2, 0x34, 0xd, 0xbb, 0xf1, 0x2a, 0x8f, 0xc7, 0xff, 0xfb, 0x90, 0x64, 0xed, 0x80, 0xf6, 0x3d, 0x56, 0xce, 0x7f, 0x6f, 0x20, 0xa, 0x0, 0x0, 0xf, 0xf0, 0xe0, 0x0, 0x1, 0x16, 0x2d, 0x63, 0x43, 0xed, 0xe1, 0x6f, 0xe0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x4, 0x65, 0x6a, 0xf5, 0xfb, 0x81, 0x1e, 0xdc, 0xfe, 0x78, 0x2f, 0xf7, 0x16, 0x5a, 0x97, 0x91, 0x63, 0x51, 0xc6, 0xa6, 0xed, 0xff, 0xff, 0xff, 0xfd, 0xf5, 0x84, 0x81, 0x33, 0x32, 0xd4, 0xb, 0xa, 0xfc, 0xb8, 0xef, 0xf8, 0x14, 0xcb, 0xa5, 0xba, 0x42, 0xaa, 0x7c, 0xb3, 0x46, 0x10, 0x73, 0x21, 0x40, 0xad, 0x55, 0x1f, 0x7, 0x59, 0x4, 0x20, 0x84, 0xb1, 0x8b, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x96, 0x33, 0xcd, 0x6f, 0x37, 0x81, 0xfe, 0x33, 0x7e, 0xf1, 0xfc, 0x37, 0x90, 0x68, 0xc4, 0x89, 0x5c, 0x28, 0x26, 0x89, 0x45, 0x6a, 0x41, 0x4a, 0xab, 0x57, 0xb9, 0x7f, 0xef, 0x9f, 0x26, 0x6b, 0x6a, 0x42, 0x8, 0x19, 0x65, 0x9a, 0x11, 0x0, 0xb7, 0x30, 0xd0, 0xb2, 0xb0, 0x71, 0x50, 0xd0, 0x11, 0x98, 0x24, 0x2c, 0xc0, 0x40, 0xc7, 0x58, 0xe, 0x58, 0x8, 0x88, 0xf0, 0x8, 0x10, 0x20, 0x2, 0x7b, 0xf3, 0x20, 0x13, 0x22, 0x14, 0x40, 0xd3, 0x2c, 0x2, 0x16, 0xe2, 0xcc, 0x8e, 0x90, 0xc, 0xc1, 0x72, 0x5a, 0x94, 0x3b, 0xb7, 0x84, 0x47, 0x74, 0x31, 0xbb, 0xdf, 0xaa, 0xd6, 0x98, 0xe5, 0x34, 0x5, 0xc, 0xd2, 0x3d, 0xe1, 0x62, 0x3, 0x9f, 0x3f, 0xfa, 0xde, 0xe3, 0x55, 0x28, 0xa6, 0x69, 0x2a, 0x4d, 0xc, 0x60, 0xbd, 0xef, 0xc4, 0x76, 0xa6, 0xee, 0x6a, 0x19, 0xb1, 0xfb, 0x35, 0x4, 0xc3, 0xe6, 0x38, 0xe8, 0x94, 0x70, 0xa1, 0xff, 0xff, 0x5d, 0xcd, 0x20, 0x40, 0xf5, 0x3b, 0xd1, 0x92, 0x44, 0x1e, 0x88, 0xe2, 0x5b, 0x89, 0x88, 0x92, 0x1f, 0x1a, 0x1c, 0xc2, 0x29, 0x20, 0x48, 0x56, 0x3f, 0xff, 0xff, 0xb1, 0xb7, 0x77, 0x43, 0xfc, 0xc3, 0xd1, 0x4d, 0x1b, 0x8a, 0xc7, 0xe5, 0x84, 0xe3, 0xa3, 0x51, 0x91, 0xa2, 0x47, 0x2, 0x21, 0xb3, 0x7f, 0xeb, 0xaa, 0x40, 0x2, 0x3, 0x3c, 0x20, 0x0, 0x24, 0x7, 0xc0, 0xc0, 0xa0, 0x70, 0xbc, 0xc1, 0xc0, 0xa4, 0x41, 0x2, 0x1, 0x4, 0x62, 0xb1, 0x86, 0x71, 0xc0, 0x85, 0x25, 0xd0, 0x5d, 0x0, 0x25, 0x86, 0xa3, 0xc5, 0x78, 0x8f, 0xc2, 0xca, 0x10, 0xdd, 0xdc, 0x6a, 0x10, 0x5a, 0xfa, 0x6, 0x22, 0x64, 0x80, 0x3d, 0x4a, 0x7b, 0x11, 0x65, 0x49, 0xb6, 0xbb, 0xf5, 0x3f, 0x97, 0x74, 0x8b, 0xb1, 0x4a, 0x5a, 0x79, 0x99, 0x43, 0x2a, 0xb, 0x8d, 0xc, 0x5d, 0x35, 0x98, 0xc7, 0x68, 0x88, 0x48, 0x73, 0x92, 0xa5, 0x31, 0xf8, 0x10, 0xa1, 0xca, 0x5f, 0x66, 0x5a, 0x46, 0x68, 0xea, 0x76, 0x32, 0x2e, 0x8f, 0xa7, 0xe, 0xad, 0x6e, 0x3d, 0xff, 0xfe, 0x60, 0xe8, 0x97, 0xc, 0x92, 0x1f, 0x8b, 0x18, 0xff, 0x59, 0x75, 0x66, 0x37, 0x2f, 0xc, 0x0, 0x3d, 0xf, 0x54, 0xca, 0xff, 0xfb, 0x90, 0x64, 0xef, 0x80, 0xf6, 0x1e, 0x59, 0xd2, 0x7b, 0x79, 0x7b, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0xc9, 0x65, 0x53, 0xed, 0xe0, 0xed, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x96, 0x5e, 0x1d, 0xa3, 0x14, 0x97, 0x28, 0x26, 0x46, 0x3e, 0x55, 0xff, 0xff, 0xf5, 0x5f, 0xf4, 0xed, 0x65, 0x17, 0x48, 0xc5, 0x35, 0x29, 0x29, 0xe1, 0x8e, 0x60, 0x38, 0x56, 0x3b, 0x56, 0x5b, 0xff, 0xca, 0xe4, 0x28, 0x31, 0x81, 0x8c, 0x21, 0x4, 0xc6, 0x5d, 0xe2, 0x30, 0x43, 0x4, 0x51, 0x38, 0x70, 0x58, 0x5c, 0x40, 0xa2, 0x90, 0xbf, 0xa3, 0xe3, 0xc, 0x42, 0x90, 0x38, 0x28, 0x39, 0x39, 0x12, 0x2a, 0x58, 0x8, 0xb7, 0x6c, 0x1, 0xa2, 0x31, 0x7a, 0x7a, 0xf5, 0x92, 0x59, 0x97, 0xc0, 0x8a, 0xa4, 0xa4, 0x2f, 0xca, 0x22, 0x59, 0x56, 0xe6, 0x79, 0xed, 0x9f, 0xaf, 0x5c, 0x2f, 0x54, 0xa3, 0xc1, 0x90, 0x2a, 0xdb, 0x59, 0x65, 0xfb, 0xa9, 0xc8, 0xbb, 0xa1, 0x17, 0xa8, 0xcb, 0xc0, 0xa4, 0xa3, 0xee, 0x59, 0xbf, 0xfc, 0x3e, 0xf2, 0x2, 0x65, 0x89, 0xd8, 0x66, 0x27, 0x54, 0x61, 0xff, 0xff, 0x7e, 0xfb, 0xa6, 0xa3, 0x49, 0x41, 0x77, 0x5e, 0x25, 0x3f, 0xff, 0x9a, 0xfe, 0xf, 0x5d, 0x19, 0xc0, 0x11, 0xcc, 0x49, 0x60, 0x80, 0x1f, 0x84, 0xe1, 0x41, 0xa1, 0x21, 0xb1, 0x16, 0xff, 0xff, 0xd1, 0xff, 0xea, 0x7f, 0x71, 0xb0, 0xa8, 0xa3, 0xa2, 0x4d, 0x2a, 0x60, 0xd0, 0x1, 0xcb, 0x30, 0x20, 0x2, 0x5, 0x32, 0x2, 0x40, 0x1b, 0xc5, 0x80, 0x26, 0x1, 0x9, 0x97, 0x10, 0xc0, 0xe1, 0x18, 0x70, 0x64, 0x16, 0x30, 0x6e, 0x38, 0xc8, 0x60, 0x30, 0x3e, 0xd1, 0x50, 0xe2, 0xc7, 0xbf, 0xc3, 0x83, 0x4d, 0x6d, 0x85, 0x36, 0xaf, 0x5e, 0x1b, 0x81, 0xa2, 0xa1, 0x3b, 0x26, 0x8a, 0xe7, 0x3a, 0xb7, 0x58, 0xd4, 0xca, 0x71, 0x96, 0x4f, 0x98, 0x6e, 0xc6, 0xf8, 0xfc, 0x8, 0xe0, 0xff, 0x50, 0xda, 0x3d, 0xac, 0xac, 0xcd, 0x19, 0x61, 0x21, 0xed, 0x67, 0x1a, 0x82, 0x2d, 0xad, 0x3, 0x54, 0xc5, 0x77, 0xff, 0x99, 0x47, 0xe3, 0x5d, 0xad, 0x8d, 0x57, 0x27, 0x81, 0xb6, 0xfd, 0xaf, 0x43, 0x8c, 0x3c, 0xf1, 0xe9, 0x88, 0x9d, 0x7, 0xc5, 0xd3, 0xc5, 0x24, 0xc4, 0x61, 0x24, 0xd, 0x38, 0x3, 0xc1, 0x42, 0x87, 0x94, 0x7, 0x31, 0xa8, 0x22, 0x51, 0xbf, 0xff, 0xff, 0xfe, 0x79, 0xe6, 0x65, 0x23, 0x8e, 0x25, 0xb8, 0x78, 0xac, 0xd2, 0x5, 0x81, 0xca, 0x13, 0x7, 0x32, 0xf7, 0xa, 0x2, 0x40, 0x0, 0x86, 0x40, 0x4d, 0x83, 0xfb, 0x6c, 0x16, 0x11, 0x31, 0x91, 0x77, 0xd5, 0x60, 0x8c, 0x88, 0x40, 0xc1, 0x28, 0x8e, 0x6c, 0xc, 0x20, 0x19, 0xb, 0xcb, 0xc2, 0x5d, 0xc7, 0x71, 0x27, 0xb, 0x96, 0xad, 0xc1, 0x1, 0xd, 0x6d, 0x88, 0x4c, 0x39, 0x3f, 0x3e, 0xd0, 0xa0, 0x36, 0xdd, 0x60, 0x8a, 0x6f, 0xc9, 0x21, 0x5e, 0x68, 0x2e, 0xff, 0xfb, 0x70, 0x64, 0xfd, 0x0, 0xf4, 0xf9, 0x59, 0xd2, 0xfb, 0x99, 0x6a, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xd5, 0x5d, 0x51, 0xed, 0x24, 0xfa, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x51, 0xcf, 0x9f, 0xd0, 0x9, 0x1d, 0x46, 0xb0, 0xe9, 0x73, 0x15, 0xa7, 0x42, 0xd1, 0x21, 0x68, 0x7a, 0xd8, 0x93, 0xab, 0x2e, 0xdd, 0x3a, 0xf9, 0xb3, 0x97, 0x1e, 0x9b, 0x5c, 0xb6, 0xa2, 0x79, 0x61, 0x3c, 0x7d, 0x78, 0xca, 0x7f, 0xe2, 0x58, 0x8a, 0x28, 0x61, 0x43, 0x2, 0xa2, 0xea, 0x84, 0x5f, 0xf3, 0xb9, 0xbc, 0xc, 0x98, 0xe, 0x84, 0x82, 0x21, 0x4d, 0x3, 0xc7, 0x9a, 0x78, 0x12, 0x61, 0x19, 0x63, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xfe, 0xd, 0xff, 0x57, 0x15, 0xf1, 0xbd, 0x8b, 0x8, 0x46, 0x10, 0x49, 0x6a, 0xd8, 0xb8, 0x44, 0xc7, 0x42, 0xa7, 0x0, 0x2, 0x0, 0x2, 0x20, 0x4, 0x44, 0x1f, 0xf0, 0x30, 0x74, 0xa3, 0x38, 0xa, 0x32, 0x31, 0x64, 0xda, 0x30, 0x23, 0x3, 0xc4, 0xe, 0x33, 0x80, 0x43, 0x23, 0x2d, 0x28, 0xf, 0x8, 0x4, 0x7c, 0x17, 0x7b, 0xac, 0x18, 0x18, 0x30, 0x4, 0x9, 0x9, 0x4b, 0x0, 0x4, 0x64, 0x6c, 0x4d, 0x2c, 0xb8, 0x32, 0x4d, 0xd2, 0xe5, 0x88, 0x74, 0xa2, 0xe1, 0xd3, 0x23, 0x2, 0x36, 0xfd, 0x8a, 0x95, 0x64, 0xc4, 0x35, 0x26, 0x9c, 0x1c, 0x71, 0x4d, 0x41, 0x6c, 0x33, 0x48, 0xc1, 0xfa, 0x34, 0xb9, 0xc0, 0x82, 0xc3, 0xcf, 0xf0, 0x87, 0x86, 0x74, 0xad, 0x12, 0x89, 0x8f, 0x90, 0x59, 0xc0, 0xfa, 0x24, 0xff, 0xff, 0xfd, 0xb5, 0x33, 0xf6, 0xd2, 0x71, 0xd4, 0x18, 0x47, 0x3d, 0x6a, 0xe7, 0x3d, 0x97, 0xb4, 0xd, 0xdd, 0x8a, 0x9d, 0xd4, 0xed, 0x68, 0x9e, 0xd, 0x36, 0x2e, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x63, 0x94, 0x72, 0x9, 0x53, 0xe3, 0x37, 0xea, 0x2f, 0xd1, 0xef, 0xe8, 0x9c, 0xb2, 0xe9, 0x5d, 0x37, 0xd, 0xe6, 0xcc, 0xd6, 0x60, 0x4, 0x0, 0x4, 0x0, 0x40, 0x2, 0xf7, 0xf4, 0x94, 0x20, 0xc, 0x2f, 0x29, 0xb, 0x14, 0x18, 0x79, 0x98, 0x10, 0x50, 0xe8, 0x1, 0x8c, 0xd4, 0x48, 0x90, 0x15, 0x1f, 0xd0, 0xa9, 0xff, 0xfb, 0x70, 0x64, 0xf0, 0x80, 0xf4, 0x8b, 0x59, 0x53, 0x7b, 0x8f, 0x3b, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0x89, 0x65, 0x51, 0xed, 0xb1, 0x13, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x4c, 0x31, 0x21, 0x26, 0x5, 0x2, 0x87, 0xa, 0xa3, 0x1, 0x3f, 0x24, 0x5, 0xbd, 0xf3, 0x7c, 0x54, 0xb5, 0x9b, 0x9c, 0x1e, 0xca, 0xfa, 0xc7, 0x65, 0x19, 0x5a, 0xdb, 0x89, 0x73, 0x2, 0xbd, 0xaa, 0x1, 0x7f, 0x52, 0xc5, 0xba, 0xd5, 0x29, 0x67, 0x8f, 0xa5, 0xb, 0xf2, 0xe8, 0xca, 0x7d, 0xc5, 0x75, 0x16, 0x5a, 0xc3, 0x9d, 0xc7, 0x16, 0xb8, 0x33, 0xa9, 0x4d, 0xb, 0x98, 0x13, 0x27, 0xd, 0x5a, 0xbc, 0x3e, 0xf8, 0x64, 0x9, 0xfc, 0x3a, 0xe8, 0xb1, 0x35, 0x84, 0x66, 0xe3, 0x88, 0x49, 0x5a, 0x72, 0x71, 0x6c, 0x7d, 0x13, 0x1, 0x60, 0xb9, 0x2b, 0x72, 0x4d, 0xa2, 0x22, 0xd2, 0x72, 0x82, 0x62, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x3f, 0x1d, 0x86, 0x4e, 0x37, 0xd, 0xe9, 0xeb, 0x98, 0x6c, 0xa2, 0x22, 0x38, 0xce, 0x12, 0x64, 0x89, 0x13, 0x4c, 0x14, 0x15, 0x3e, 0xb0, 0x0, 0xc0, 0x5, 0x10, 0x0, 0x0, 0x3e, 0x5f, 0x33, 0xe, 0x4c, 0x2e, 0x20, 0xc2, 0xb, 0x6, 0xd2, 0x37, 0xbd, 0xf, 0xb4, 0x43, 0xc3, 0x60, 0xa0, 0x78, 0xc0, 0x31, 0x8, 0xc4, 0xea, 0x6b, 0xd4, 0xe2, 0x13, 0x86, 0x45, 0x38, 0x58, 0x1, 0x90, 0xe, 0x92, 0x4d, 0x21, 0x7b, 0x45, 0xe5, 0x91, 0x28, 0x16, 0x5a, 0x38, 0xfa, 0xf5, 0xeb, 0xd9, 0xf8, 0xc7, 0x97, 0xd0, 0xcf, 0x44, 0xc7, 0x1, 0xa9, 0xc, 0xe4, 0xbc, 0xd, 0x89, 0x8b, 0xa9, 0x8d, 0x7b, 0x42, 0x51, 0x70, 0x8, 0x8e, 0x96, 0x89, 0xc9, 0xda, 0xd3, 0xfa, 0xdf, 0x3f, 0x77, 0x29, 0xd1, 0xa6, 0x44, 0x7b, 0x56, 0xba, 0x62, 0x9d, 0xd8, 0xbd, 0xcb, 0xdb, 0xe3, 0x5e, 0x6b, 0x11, 0xda, 0xd3, 0xf3, 0x56, 0x8a, 0x4d, 0x1e, 0x38, 0x5f, 0x7b, 0x96, 0xaf, 0x4a, 0xc2, 0x99, 0x11, 0x80, 0x7, 0x5f, 0x7a, 0xa3, 0x84, 0xc5, 0x63, 0x88, 0x22, 0x85, 0x8b, 0xff, 0xff, 0xd2, 0xb7, 0x31, 0x99, 0x26, 0x4f, 0x56, 0xda, 0xe4, 0xc5, 0x88, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x0, 0xf4, 0xdd, 0x59, 0xd3, 0xfb, 0x6f, 0x4b, 0xd8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x14, 0x5, 0x65, 0x4d, 0xad, 0xbd, 0x2f, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xa6, 0x29, 0xa5, 0x47, 0x47, 0x86, 0x5, 0xa2, 0x51, 0x6f, 0xff, 0xa2, 0xd0, 0x4, 0x20, 0xa8, 0x0, 0x64, 0x3, 0x79, 0x8e, 0x44, 0x8f, 0x80, 0xd1, 0xa8, 0x1c, 0x16, 0x1c, 0x6b, 0xec, 0x9d, 0xa3, 0x26, 0x88, 0x28, 0x38, 0x73, 0x6c, 0xd3, 0x87, 0x41, 0x45, 0x16, 0xf2, 0xd1, 0xb, 0x3, 0x47, 0xb6, 0xb2, 0xdd, 0x9e, 0x99, 0x36, 0x56, 0x9d, 0xa9, 0x4d, 0x20, 0xf2, 0x55, 0x6c, 0xa6, 0xd5, 0xe0, 0x1e, 0x56, 0xc0, 0x49, 0x76, 0x35, 0x29, 0x4f, 0x79, 0x86, 0xcd, 0xcf, 0x9d, 0x63, 0x25, 0x31, 0xd3, 0x68, 0x42, 0x9, 0x28, 0xcd, 0xd8, 0x5e, 0xaa, 0xe8, 0xa2, 0x66, 0xfd, 0x95, 0xa3, 0xae, 0x1f, 0x9a, 0x1d, 0xa0, 0xbb, 0xe, 0x2d, 0xac, 0xec, 0xce, 0x64, 0x15, 0xa9, 0xc2, 0x1d, 0xa6, 0xb0, 0xac, 0x2, 0x8d, 0x2f, 0x61, 0x4a, 0xeb, 0x2f, 0xf8, 0x6b, 0x76, 0xef, 0x72, 0x48, 0xf4, 0xaa, 0x65, 0xa2, 0x65, 0x46, 0x1, 0xf0, 0x51, 0x8, 0xff, 0xff, 0xeb, 0xe5, 0x8, 0x92, 0x76, 0x38, 0xb9, 0x37, 0xe5, 0x2a, 0x60, 0x8c, 0x34, 0xd2, 0xa8, 0x2f, 0x59, 0x8f, 0xfe, 0xe, 0x29, 0xf5, 0xd4, 0x0, 0xc0, 0x26, 0x0, 0x20, 0x0, 0xce, 0x65, 0x22, 0xe3, 0x4, 0xa6, 0x42, 0x26, 0x16, 0x1d, 0x5, 0x23, 0x9a, 0x24, 0x68, 0x5, 0x14, 0xc4, 0xc7, 0xc, 0x38, 0xd, 0xd6, 0x52, 0xd, 0x81, 0x95, 0xa8, 0x23, 0x36, 0x12, 0x17, 0x7d, 0x5b, 0xb3, 0x20, 0xab, 0x5e, 0x43, 0x72, 0x6a, 0x7a, 0x6c, 0x7c, 0x2c, 0x18, 0xb0, 0xc3, 0xfe, 0xc9, 0xbb, 0x66, 0x9, 0xc9, 0xee, 0x15, 0xf9, 0x98, 0xeb, 0x89, 0x56, 0xbb, 0x9f, 0xbe, 0x88, 0x73, 0x2d, 0xe, 0xa5, 0xa8, 0xac, 0x87, 0x1d, 0xae, 0xc3, 0x36, 0x9f, 0xe5, 0xb8, 0xdb, 0xa2, 0xf3, 0x28, 0x79, 0xe9, 0xb7, 0xcf, 0x35, 0x2d, 0xc2, 0xbf, 0x56, 0xf6, 0xc3, 0x76, 0xcf, 0xbd, 0x54, 0xb6, 0x9a, 0x8e, 0xc2, 0x72, 0xdb, 0x54, 0xe5, 0x3a, 0xb4, 0xdc, 0xa4, 0xa9, 0xa7, 0xde, 0xf, 0x88, 0x5, 0x87, 0x46, 0x4, 0x44, 0x7, 0x7f, 0xff, 0xee, 0xcf, 0x28, 0xd0, 0xd, 0x8, 0x46, 0x24, 0xf9, 0x5c, 0x41, 0xc5, 0x8a, 0xac, 0xe7, 0x17, 0x65, 0x11, 0x15, 0x3d, 0xff, 0xc1, 0x40, 0x12, 0x80, 0x36, 0x1, 0x4c, 0x22, 0xc8, 0x3, 0xf1, 0xd2, 0xea, 0xe4, 0xcc, 0xff, 0xfb, 0x80, 0x64, 0xee, 0x80, 0xf4, 0xfe, 0x59, 0xd2, 0xeb, 0x4c, 0x3c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0xd5, 0x5d, 0x4f, 0xad, 0x30, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x86, 0x30, 0x23, 0xc7, 0x6d, 0x9c, 0xfd, 0x40, 0xab, 0x63, 0xcc, 0xca, 0x2, 0x8, 0x0, 0x3, 0x83, 0xa0, 0x36, 0x58, 0xc2, 0x94, 0x10, 0xc, 0x91, 0xaf, 0x36, 0x0, 0x1b, 0xae, 0x3a, 0x59, 0x20, 0x28, 0x32, 0x97, 0x74, 0xfe, 0x88, 0x67, 0x88, 0xfe, 0xa9, 0x40, 0xb2, 0xf2, 0xe1, 0x39, 0xe7, 0xe, 0x6a, 0x5a, 0x7a, 0x2b, 0x3b, 0x17, 0xb6, 0x5e, 0x24, 0x8, 0x2d, 0xad, 0x58, 0xb6, 0xdf, 0xd9, 0xee, 0xcc, 0xa1, 0xba, 0xd2, 0x66, 0x5e, 0x6b, 0xcc, 0xaa, 0xbd, 0xa8, 0xaf, 0x55, 0xb4, 0xd6, 0x96, 0xcb, 0xee, 0xf9, 0x93, 0xac, 0x68, 0xee, 0x0, 0xe5, 0x1c, 0x3b, 0x8f, 0xb2, 0x11, 0x53, 0x65, 0xc8, 0xf6, 0x79, 0xf6, 0xe7, 0x1b, 0x26, 0xaf, 0x35, 0x37, 0xff, 0xff, 0xff, 0xff, 0xb9, 0xca, 0x1e, 0x4c, 0xad, 0x32, 0x21, 0xf5, 0xa8, 0xe1, 0xeb, 0x79, 0xe2, 0xaf, 0x25, 0x15, 0x49, 0xd3, 0x14, 0x51, 0xa5, 0x8e, 0x58, 0x98, 0xdf, 0xff, 0xbc, 0xca, 0xb8, 0x16, 0xd1, 0xa4, 0x80, 0x51, 0x20, 0x6e, 0xd8, 0x4c, 0xeb, 0x36, 0x58, 0x2e, 0x31, 0xc8, 0x73, 0x43, 0x2f, 0x5, 0x8, 0xa2, 0xd1, 0x31, 0x60, 0x34, 0x20, 0xbb, 0xe9, 0xe2, 0xd6, 0x19, 0xe0, 0x8, 0xe8, 0x38, 0x51, 0xc5, 0x77, 0x16, 0x64, 0x8, 0xd6, 0xa0, 0x55, 0xc6, 0x86, 0x85, 0xd6, 0xdd, 0x82, 0x6a, 0xd, 0x82, 0x13, 0x62, 0x58, 0xb4, 0xc, 0x3e, 0xfb, 0x78, 0x1b, 0x3, 0x21, 0x6d, 0x8d, 0xa1, 0x5b, 0x48, 0xb5, 0x1c, 0x19, 0xcf, 0xe6, 0x85, 0x79, 0xe6, 0x4b, 0x10, 0x1a, 0x26, 0x18, 0xd, 0x91, 0xb1, 0x5, 0x3b, 0xfb, 0x53, 0xee, 0x13, 0xa9, 0x52, 0x59, 0x56, 0xa5, 0x88, 0xd1, 0x99, 0x13, 0x82, 0x1, 0x42, 0x33, 0x66, 0x99, 0x5a, 0x6d, 0x51, 0x84, 0xa6, 0xab, 0x47, 0x5b, 0xb6, 0xe4, 0x98, 0x16, 0xc3, 0x51, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbd, 0x73, 0x2f, 0x68, 0x48, 0x80, 0x51, 0x5, 0x61, 0x17, 0x2c, 0x93, 0xad, 0x41, 0x53, 0x6a, 0x43, 0x53, 0xd2, 0x1, 0x23, 0x48, 0x5a, 0x53, 0x7f, 0xfc, 0x2e, 0xb2, 0x8, 0x82, 0x60, 0x86, 0x8c, 0xa8, 0x49, 0x7f, 0x85, 0x89, 0xc6, 0x81, 0x45, 0xc, 0x72, 0x11, 0x5e, 0x20, 0x90, 0x5, 0xf5, 0x1, 0x11, 0x1e, 0x2, 0xf8, 0x31, 0xee, 0xd4, 0x6a, 0x48, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x80, 0xf4, 0xcd, 0x58, 0x53, 0x6b, 0x6c, 0x2c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0x21, 0x5d, 0x4d, 0xad, 0x31, 0x6f, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xdc, 0x3c, 0x16, 0xf5, 0xa7, 0x96, 0xc4, 0x83, 0xb6, 0x1f, 0xea, 0x68, 0x93, 0xa0, 0x4b, 0xc5, 0x20, 0xda, 0x82, 0xa6, 0x9e, 0x3c, 0x46, 0xaf, 0x8c, 0xeb, 0x17, 0x99, 0xd1, 0x40, 0x15, 0x3a, 0xe9, 0xc6, 0xcc, 0x9, 0x71, 0xb6, 0xf7, 0x17, 0x92, 0xd2, 0xcf, 0x9d, 0xf9, 0x19, 0x91, 0x11, 0xa1, 0x67, 0xe6, 0xee, 0xe6, 0x4e, 0x4b, 0x1b, 0xdf, 0x2b, 0xdd, 0x38, 0xad, 0x92, 0xaa, 0xa8, 0xb1, 0xbf, 0xb5, 0x14, 0xa7, 0x19, 0x72, 0x29, 0x2d, 0x5b, 0x5c, 0x4a, 0x2, 0x40, 0xe8, 0x90, 0xac, 0x81, 0xe6, 0x7f, 0xfb, 0x7c, 0xd2, 0xab, 0x2e, 0x6a, 0x18, 0x41, 0xdd, 0x67, 0xe5, 0x23, 0xab, 0x20, 0x5, 0x1e, 0x1a, 0x22, 0xff, 0xff, 0x33, 0xf0, 0x15, 0x40, 0xad, 0x2, 0x91, 0x21, 0x74, 0x5, 0x17, 0x1a, 0x2, 0x2e, 0x41, 0x86, 0x92, 0x88, 0xb7, 0x42, 0x4, 0xc9, 0x88, 0xcc, 0x5a, 0x0, 0x50, 0x2, 0x6e, 0x51, 0x5c, 0x9a, 0xd8, 0x35, 0x69, 0x9b, 0x4d, 0x84, 0x89, 0x77, 0xc6, 0xa1, 0xd2, 0x43, 0x61, 0xba, 0x69, 0x96, 0x91, 0x11, 0x2e, 0x1b, 0x10, 0xac, 0x96, 0xb6, 0xb, 0x8a, 0x9b, 0x74, 0x8e, 0x2e, 0xb9, 0x79, 0x1, 0x4d, 0xdc, 0x90, 0xb9, 0x52, 0x59, 0x37, 0x27, 0x66, 0x7a, 0x56, 0xbf, 0x8f, 0x9a, 0x38, 0xc9, 0xca, 0x9, 0x53, 0xab, 0xac, 0xa8, 0xea, 0x1b, 0x88, 0x68, 0xb2, 0xcb, 0xc6, 0x15, 0x3c, 0x40, 0x4a, 0x4c, 0x8, 0xb2, 0x58, 0xcc, 0x23, 0x13, 0xd9, 0x55, 0xd5, 0xd9, 0xda, 0x59, 0xc3, 0xe6, 0xca, 0x5b, 0x68, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x49, 0xa9, 0x23, 0x44, 0xd0, 0x65, 0x54, 0x26, 0x93, 0xde, 0x6d, 0x84, 0xbd, 0xad, 0xd8, 0xab, 0xa9, 0x26, 0xb7, 0x20, 0x76, 0xb1, 0x96, 0x35, 0x4d, 0x54, 0xca, 0xf0, 0xc6, 0x1b, 0x63, 0xcd, 0xc4, 0xaa, 0x58, 0xed, 0x4a, 0x1e, 0x34, 0x6d, 0x12, 0x2d, 0xe0, 0xb0, 0xd1, 0xa8, 0xcb, 0xa, 0x65, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x80, 0xf4, 0xdf, 0x59, 0x52, 0xeb, 0x1b, 0x48, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0x21, 0x49, 0x4f, 0xed, 0x24, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x8c, 0x47, 0xc1, 0xa3, 0x54, 0x81, 0x90, 0x6, 0xc0, 0xb, 0x40, 0x91, 0x52, 0xe8, 0xed, 0x2d, 0xd8, 0x6a, 0x2, 0x9e, 0x5d, 0x47, 0xcc, 0xd, 0x60, 0x35, 0x1d, 0x9f, 0xb1, 0x7c, 0xb8, 0x6e, 0x79, 0x68, 0xea, 0x9a, 0xf5, 0x43, 0x61, 0x5b, 0x4c, 0x59, 0x8d, 0xe5, 0x63, 0xe2, 0xd3, 0x20, 0xc2, 0xbd, 0x4b, 0x5e, 0xb5, 0xb7, 0x41, 0xb8, 0x71, 0x3a, 0xbb, 0x18, 0x83, 0x79, 0xdd, 0x79, 0xd8, 0x6b, 0x1, 0x2c, 0xd5, 0x54, 0xba, 0xe3, 0x4c, 0xb8, 0xe6, 0x72, 0x18, 0xfc, 0xd, 0x54, 0xb5, 0xf6, 0xdf, 0xff, 0xdc, 0xbd, 0x66, 0x73, 0xa3, 0x51, 0x20, 0x7a, 0xcd, 0xff, 0xff, 0x9e, 0x6d, 0x4b, 0xac, 0xc0, 0xf0, 0x74, 0x48, 0x76, 0xa9, 0x37, 0xf, 0x2c, 0x96, 0xe1, 0x75, 0x70, 0x7, 0x1a, 0x3, 0x52, 0x12, 0x53, 0x29, 0x5e, 0x10, 0x9e, 0x15, 0x18, 0xcc, 0xc4, 0x4d, 0x8f, 0x49, 0x55, 0x28, 0x11, 0x10, 0x19, 0x14, 0x30, 0xd, 0xee, 0x8, 0x20, 0x85, 0xaa, 0x36, 0x84, 0xd6, 0x5b, 0x20, 0x68, 0xac, 0xc9, 0xd9, 0x78, 0xe1, 0xf8, 0xa0, 0xc1, 0x8, 0xc0, 0x96, 0x32, 0xb8, 0x15, 0xc, 0x0, 0x62, 0x68, 0x90, 0x23, 0x32, 0xe8, 0x74, 0x30, 0xc8, 0x14, 0x6f, 0xa1, 0xb, 0x30, 0x5e, 0x67, 0x1f, 0x6, 0x9, 0x49, 0xc7, 0x25, 0xe5, 0xfe, 0x7a, 0xdf, 0x3, 0xe9, 0x34, 0x6c, 0x99, 0xac, 0x8b, 0x54, 0xeb, 0x9e, 0x2b, 0x88, 0xa6, 0xc6, 0x42, 0x5b, 0x33, 0xab, 0x1a, 0x24, 0x20, 0x44, 0x26, 0x83, 0x46, 0x83, 0xc3, 0x8b, 0x8d, 0x4b, 0xde, 0xb3, 0x26, 0xa2, 0x59, 0x2b, 0x1a, 0xd, 0xc5, 0xd6, 0x91, 0x3c, 0xea, 0x9f, 0xff, 0xff, 0xff, 0xfc, 0x43, 0x8e, 0xb3, 0x59, 0x26, 0x16, 0x9d, 0x56, 0x58, 0x95, 0xea, 0x4d, 0x57, 0xcc, 0xb4, 0xe2, 0x80, 0x2b, 0xc1, 0x22, 0x98, 0xa8, 0x63, 0x21, 0x16, 0x2, 0x2, 0xa1, 0x86, 0x3a, 0xc1, 0xcf, 0x28, 0xc8, 0x4c, 0x41, 0x43, 0x4, 0x88, 0xd3, 0x84, 0x46, 0x84, 0xae, 0x2, 0x8e, 0x95, 0x27, 0xbb, 0x5e, 0x65, 0xb, 0xd, 0x20, 0x11, 0x8e, 0x8f, 0x8, 0x88, 0x9b, 0xe1, 0xca, 0x96, 0xb8, 0xb9, 0x40, 0xb8, 0x5c, 0x56, 0xa2, 0x15, 0x41, 0x9e, 0xce, 0x62, 0x4b, 0x36, 0x81, 0x42, 0x8b, 0xb2, 0x2a, 0x39, 0x98, 0x2c, 0xe, 0xd0, 0x72, 0xda, 0xf2, 0x24, 0xff, 0xfb, 0x70, 0x64, 0xfa, 0x80, 0xf4, 0x6c, 0x55, 0xd1, 0xeb, 0x78, 0x49, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xa1, 0x39, 0x49, 0xed, 0x30, 0xf3, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xbe, 0x56, 0x8c, 0x49, 0x10, 0x92, 0x9, 0xba, 0x32, 0xcf, 0x3d, 0xa4, 0xb9, 0xcd, 0x2b, 0x7b, 0xe4, 0x34, 0x8e, 0x62, 0x63, 0x49, 0x8c, 0x84, 0x9e, 0x96, 0xb6, 0xfd, 0xfb, 0x63, 0x5, 0x8b, 0x0, 0xa4, 0x50, 0x4a, 0x39, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x6c, 0x69, 0x9f, 0xee, 0x64, 0xb2, 0x4b, 0xb4, 0x47, 0x7e, 0x3e, 0xac, 0x15, 0x80, 0x58, 0xcd, 0x7a, 0x96, 0x7b, 0xa5, 0xbf, 0x7e, 0x0, 0xf, 0x23, 0x2b, 0x73, 0x3a, 0xc4, 0x17, 0x9, 0xa7, 0x80, 0x66, 0x55, 0xe6, 0x64, 0x80, 0xe1, 0x43, 0x9e, 0xa, 0x8e, 0xe3, 0xa0, 0x4d, 0x64, 0x89, 0x12, 0xd7, 0x14, 0xd9, 0x41, 0x20, 0x8, 0xd4, 0xcc, 0x9b, 0xd4, 0x75, 0x7f, 0xf, 0x48, 0x4d, 0x98, 0x82, 0x5, 0x63, 0xf8, 0xd6, 0x83, 0x23, 0xe6, 0x48, 0xd9, 0xd8, 0xdf, 0xb1, 0x90, 0xc9, 0xa4, 0x27, 0x7a, 0xf0, 0x38, 0xfb, 0x65, 0x94, 0xef, 0xf8, 0xd5, 0xca, 0xdb, 0x49, 0xb2, 0x55, 0xc8, 0x5d, 0x19, 0x56, 0xc9, 0x1d, 0x22, 0x6d, 0x61, 0x51, 0x20, 0x5d, 0x3, 0x6c, 0x2b, 0x93, 0x8a, 0xab, 0xd4, 0x61, 0x32, 0x6, 0xc8, 0x91, 0x13, 0x74, 0x91, 0x17, 0xbf, 0x8d, 0x76, 0x71, 0x74, 0x46, 0x9a, 0xb8, 0xc5, 0x97, 0x7d, 0xbd, 0xdd, 0xe1, 0xef, 0xdf, 0x0, 0xd1, 0xb7, 0x33, 0xe, 0xae, 0xcf, 0xb5, 0xf8, 0x5, 0x78, 0x5b, 0x61, 0x8b, 0xb5, 0x70, 0x57, 0x47, 0x2c, 0x3, 0x39, 0x9e, 0x41, 0x5a, 0x3, 0x4a, 0x5c, 0x85, 0x54, 0x5c, 0x80, 0x52, 0x53, 0xa1, 0x44, 0x90, 0x7b, 0x1e, 0x8a, 0xc4, 0xe9, 0xca, 0xc, 0xa, 0x86, 0xc6, 0xe0, 0xc2, 0x24, 0x51, 0x11, 0x29, 0xdf, 0x4, 0x92, 0x35, 0x6d, 0x25, 0x35, 0x8d, 0x43, 0x43, 0xe3, 0xa2, 0x39, 0xea, 0xd2, 0xe0, 0xb8, 0x4, 0x6d, 0xa2, 0x64, 0x2a, 0x2c, 0xcb, 0x12, 0x94, 0x53, 0xe8, 0xa6, 0x44, 0x58, 0xe6, 0xad, 0xee, 0x93, 0xf1, 0xd9, 0x54, 0x48, 0x89, 0xd9, 0x5f, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x81, 0xf4, 0x75, 0x55, 0xd0, 0xfb, 0x49, 0x5c, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x10, 0x5d, 0x3b, 0x43, 0xed, 0x24, 0xcf, 0x28, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x29, 0xaf, 0xda, 0xa9, 0xd2, 0x4a, 0xf, 0xa, 0x95, 0x2c, 0x6f, 0x2b, 0x58, 0xc8, 0xcb, 0xb5, 0x28, 0xc4, 0xea, 0xa9, 0x47, 0x18, 0x5b, 0xef, 0x56, 0x6b, 0xdb, 0x1d, 0xcd, 0x52, 0x50, 0x26, 0xbb, 0x48, 0x75, 0x59, 0x17, 0xb6, 0x30, 0xc, 0x2c, 0x50, 0xe5, 0xc2, 0x4c, 0x20, 0xc8, 0x1c, 0x40, 0x10, 0x34, 0x81, 0x14, 0xf2, 0x2b, 0x24, 0xaa, 0xed, 0xa4, 0x12, 0x5a, 0x34, 0xab, 0x1a, 0x45, 0x35, 0x16, 0xbb, 0x10, 0xc9, 0xb1, 0x80, 0xb8, 0x94, 0x4, 0x45, 0xe4, 0xc9, 0x29, 0xc0, 0x3c, 0x4b, 0x14, 0x9a, 0x12, 0xba, 0xd9, 0x55, 0xb5, 0x9a, 0x92, 0x24, 0x4f, 0x46, 0xca, 0xab, 0x4a, 0x88, 0x81, 0xb1, 0x17, 0x61, 0x3c, 0xec, 0xdf, 0x6f, 0x72, 0x30, 0x50, 0xd0, 0x21, 0xe8, 0x63, 0x24, 0xcd, 0x9b, 0xe5, 0x90, 0x3e, 0x51, 0x36, 0x72, 0x9a, 0xe7, 0x71, 0xd0, 0x24, 0x7c, 0xb7, 0x7e, 0x5c, 0x3a, 0x34, 0x58, 0x3e, 0x44, 0x5e, 0x48, 0x6f, 0xe8, 0x20, 0x45, 0x79, 0x36, 0x66, 0x27, 0x5d, 0xae, 0x10, 0xc, 0x42, 0x86, 0x4b, 0xcc, 0x35, 0x24, 0x4a, 0x6, 0x8c, 0xc8, 0x55, 0x2d, 0x4c, 0x21, 0xc1, 0x96, 0x90, 0x2a, 0x36, 0x6, 0x89, 0x8e, 0x2a, 0x75, 0x3e, 0xca, 0x64, 0x10, 0x87, 0xc7, 0xa6, 0xc4, 0xe5, 0x8c, 0x8f, 0xb4, 0xd6, 0x79, 0x71, 0xf1, 0xfa, 0xd5, 0xab, 0x9d, 0x3a, 0x76, 0xc5, 0x92, 0xea, 0x3f, 0xfc, 0x5b, 0x4e, 0x76, 0x14, 0xf, 0xad, 0x86, 0x84, 0x66, 0x34, 0x6d, 0xdd, 0x79, 0x33, 0xb2, 0xe9, 0x4b, 0x39, 0x94, 0x86, 0x82, 0xa0, 0xcb, 0xe6, 0x9d, 0x3c, 0xda, 0xf4, 0x76, 0xdc, 0x7b, 0xa6, 0xf4, 0x83, 0xbd, 0x1e, 0x29, 0x26, 0xb5, 0x9a, 0xa6, 0x53, 0x41, 0x40, 0x68, 0x90, 0x83, 0x4d, 0xd8, 0xca, 0x58, 0x6b, 0xa6, 0xb5, 0xf5, 0xda, 0x0, 0xaa, 0x0, 0x5e, 0x6b, 0x41, 0x75, 0x82, 0x2, 0x85, 0x20, 0x32, 0xb0, 0x5a, 0xd4, 0x8b, 0xb1, 0x93, 0x97, 0xf5, 0xff, 0xfb, 0x60, 0x64, 0xf9, 0x0, 0xf3, 0xf7, 0x3f, 0x52, 0x7b, 0x2c, 0x4c, 0x28, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xf, 0x80, 0xff, 0x43, 0xec, 0x3d, 0x2c, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x38, 0x52, 0x19, 0x8b, 0x46, 0x59, 0x70, 0x7a, 0x78, 0x46, 0x3b, 0x15, 0x83, 0x12, 0xad, 0xa8, 0xca, 0xd3, 0x9b, 0xa9, 0x37, 0x2c, 0xab, 0x59, 0x48, 0xdb, 0x2a, 0xbb, 0x9, 0xcb, 0x96, 0x43, 0x5b, 0x4e, 0x4a, 0xb3, 0xa8, 0xf1, 0xec, 0x26, 0xf6, 0xa6, 0x3d, 0x48, 0x5e, 0x8f, 0xf2, 0x61, 0xaa, 0x95, 0x96, 0x58, 0xa2, 0x54, 0x9b, 0xd1, 0xc4, 0xd3, 0x10, 0x78, 0xd3, 0x22, 0xb7, 0x1e, 0xd1, 0x22, 0x41, 0x9d, 0x8f, 0x56, 0xf8, 0x25, 0x44, 0x50, 0xc6, 0xcc, 0x8b, 0xe5, 0xcb, 0x5b, 0x72, 0x48, 0xff, 0xa4, 0x1, 0xd1, 0x70, 0x0, 0xc6, 0xb, 0x1d, 0x7, 0x3, 0x85, 0xc, 0xc9, 0x4, 0x66, 0xd0, 0xa4, 0xe, 0x8e, 0x11, 0x0, 0x20, 0x48, 0xdb, 0xc1, 0x60, 0x29, 0x58, 0x8d, 0x1, 0xa0, 0xd7, 0xc9, 0x62, 0xd3, 0x21, 0x12, 0xa2, 0x82, 0x84, 0xd4, 0x78, 0xd4, 0xa1, 0x64, 0x6c, 0x89, 0xc9, 0x3, 0x1, 0x98, 0x95, 0x4f, 0x23, 0x38, 0xf1, 0x47, 0x42, 0x46, 0xa3, 0x89, 0x65, 0x73, 0x89, 0x3b, 0x5e, 0x39, 0xcf, 0xf9, 0xda, 0x73, 0xf0, 0xd3, 0x78, 0x33, 0x95, 0xa8, 0x4b, 0x7e, 0xff, 0xa3, 0xfd, 0x4f, 0xff, 0xdf, 0xff, 0x45, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xec, 0x0, 0xf3, 0x70, 0x38, 0xce, 0x7b, 0x9, 0x34, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xd, 0xd0, 0xef, 0x2f, 0xec, 0x30, 0xcf, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xee, 0x0, 0xf3, 0x41, 0x3b, 0x48, 0xe3, 0xc, 0x33, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xb, 0x88, 0xad, 0x17, 0x8c, 0x24, 0xc7, 0xc0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x10, 0x64, 0xdd, 0x8f, 0xf0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0xa4, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
that seems decent. Now let’s make the program use this instead of the input file.
Here is my initial draft of this code:
#include <unistd.h>
/*
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
#include <libavutil/channel_layout.h>
#include <libavutil/mem.h>
#include <libavutil/opt.h>
*/
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
// These are the hardcoded mp3 and mp4 files...
#include "hardcoded_inputs.h"
// This here is basically the buffer which we want to fuzz with this program.
static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -"; // Not needed...
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
#include <string.h>
unsigned int data_pointer = 0; // Where we are in the input data
int read_buffer(void *opaque, uint8_t *buf, int buf_size){
// Read from STATIC_MP3_INPUT instead...
if (data_pointer >= sizeof(STATIC_MP3_INPUT) - 1) {
// Tried to read past the file aka just return "EOF"
return -1;
} else {
// Not EOF...
if (data_pointer + buf_size < sizeof(STATIC_MP3_INPUT) - 1) {
// We can read the entire buffer.
// void *memcpy(void dest[restrict .n], const void src[restrict .n],
// size_t n);
// Just memcpy that shit to the buffer.
memcpy(buf, (char*)(STATIC_MP3_INPUT + data_pointer), buf_size);
return buf_size;
} else {
// Here we just read the rest of the buffer
// The size of rest of the buffer is just sizeof(STATIC_MP3_INPUT) - data_pointer
// This makes sense because if we are at the start aka data_pointer == 0 , then it should be just the size of the buffer.
memcpy(buf, (char*)(STATIC_MP3_INPUT + data_pointer), sizeof(STATIC_MP3_INPUT) - data_pointer);
if ((int)(sizeof(STATIC_MP3_INPUT) - data_pointer) < 0) {
// We fucked something up. Just crash here.
memcpy(0x00, (char*)(STATIC_MP3_INPUT + data_pointer), sizeof(STATIC_MP3_INPUT) - data_pointer);
return 0;
}
return (sizeof(STATIC_MP3_INPUT) - data_pointer);
}
}
/*
if( !feof(fp_open)) {
int true_size=fread(buf,1,buf_size,fp_open);
return true_size;
} else {
return -1;
}
*/
}
static int open_input_file(const char *filename)
{
const AVCodec *dec;
int ret;
// Instead of opening a file, just open a static buffer...
// STATIC_MP3_INPUT
// This stuff is taken straight from https://github.com/leixiaohua1020/simplest_ffmpeg_mem_handler/blob/master/simplest_ffmpeg_mem_transcoder/simplest_ffmpeg_mem_transcoder.cpp
unsigned char* inbuffer=NULL;
// unsigned char* outbuffer=NULL;
// outbuffer=(unsigned char*)av_malloc(32768);
AVIOContext *avio_in=NULL;
// AVIOContext *avio_out=NULL;
/*open input file*/
avio_in =avio_alloc_context(inbuffer, 32768,0,NULL,read_buffer,NULL,NULL);
if(avio_in==NULL)
goto end;
/*open output file*/
//avio_out =avio_alloc_context(outbuffer, 32768,1,NULL,NULL,write_buffer,NULL);
//if(avio_out==NULL)
// goto end;
fmt_ctx->pb=avio_in;
fmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
if ((ret = avformat_open_input(&fmt_ctx, "whatever", NULL, NULL)) < 0) { // was originally: if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
return ret;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
return ret;
}
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find an audio stream in the input file\n");
return ret;
}
audio_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[audio_stream_index]->codecpar);
/* init the audio decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
return ret;
}
return 0;
}
static int init_filters(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
static const int out_sample_rate = 8000;
const AVFilterLink *outlink;
AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer audio source: the decoded frames from the decoder will be inserted here. */
if (dec_ctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&dec_ctx->ch_layout, dec_ctx->ch_layout.nb_channels);
ret = snprintf(args, sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=",
time_base.num, time_base.den, dec_ctx->sample_rate,
av_get_sample_fmt_name(dec_ctx->sample_fmt));
av_channel_layout_describe(&dec_ctx->ch_layout, args + ret, sizeof(args) - ret);
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
goto end;
}
/* buffer audio sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "sample_formats", "s16",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
goto end;
}
ret = av_opt_set(buffersink_ctx, "channel_layouts", "mono",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
goto end;
}
ret = av_opt_set_array(buffersink_ctx, "samplerates", AV_OPT_SEARCH_CHILDREN,
0, 1, AV_OPT_TYPE_INT, &out_sample_rate);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize audio buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
/* Print summary of the sink buffer
* Note: args buffer is reused to store channel layout string */
outlink = buffersink_ctx->inputs[0];
av_channel_layout_describe(&outlink->ch_layout, args, sizeof(args));
av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
(int)outlink->sample_rate,
(char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
args);
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
static void print_frame(const AVFrame *frame)
{
const int n = frame->nb_samples * frame->ch_layout.nb_channels;
const uint16_t *p = (uint16_t*)frame->data[0];
const uint16_t *p_end = p + n;
while (p < p_end) {
fputc(*p & 0xff, stdout);
fputc(*p>>8 & 0xff, stdout);
p++;
}
fflush(stdout);
}
void try_fuzz_audio(char* inputfile);
void try_fuzz_audio(char* inputfile) {
int ret;
AVPacket *packet = av_packet_alloc();
AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
if (!packet || !frame || !filt_frame) {
fprintf(stderr, "Could not allocate frame or packet\n");
exit(1);
}
printf("Calling open_input_file...\n");
if ((ret = open_input_file(inputfile)) < 0)
goto end;
printf("Calling init filters...\n");
if ((ret = init_filters(filter_descr)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == audio_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
goto end;
}
if (ret >= 0) {
/* push the audio data from decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
break;
}
/* pull filtered audio from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
}
av_packet_unref(packet);
}
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
avformat_close_input(&fmt_ctx);
av_packet_free(&packet);
av_frame_free(&frame);
av_frame_free(&filt_frame);
if (ret < 0 && ret != AVERROR_EOF) {
fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
exit(1);
}
exit(0);
}
int main(int argc, char **argv)
{
if (argc != 2) {
fprintf(stderr, "Usage: %s file | %s\n", argv[0], player);
exit(1);
}
try_fuzz_audio(argv[1]); // First try with the audio
return 0;
}
let’s see what we can make of this….
Here is my current code:
#include <unistd.h>
/*
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
#include <libavutil/channel_layout.h>
#include <libavutil/mem.h>
#include <libavutil/opt.h>
*/
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
// These are the hardcoded mp3 and mp4 files...
#include "hardcoded_inputs.h"
// This here is basically the buffer which we want to fuzz with this program.
static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -"; // Not needed...
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
#include <string.h>
int read_buffer(void *opaque, uint8_t *buf, int buf_size);
unsigned int data_pointer = 0; // Where we are in the input data
FILE *fp_open;
int read_buffer(void *opaque, uint8_t *buf, int buf_size){
// Read from STATIC_MP3_INPUT instead...
/*
if (data_pointer >= sizeof(STATIC_MP3_INPUT) - 1) {
// Tried to read past the file aka just return "EOF"
return -1;
} else {
// Not EOF...
if (data_pointer + buf_size < sizeof(STATIC_MP3_INPUT) - 1) {
// We can read the entire buffer.
// void *memcpy(void dest[restrict .n], const void src[restrict .n],
// size_t n);
// Just memcpy that shit to the buffer.
memcpy(buf, (char*)(STATIC_MP3_INPUT + data_pointer), buf_size);
return buf_size;
} else {
// Here we just read the rest of the buffer
// The size of rest of the buffer is just sizeof(STATIC_MP3_INPUT) - data_pointer
// This makes sense because if we are at the start aka data_pointer == 0 , then it should be just the size of the buffer.
memcpy(buf, (char*)(STATIC_MP3_INPUT + data_pointer), sizeof(STATIC_MP3_INPUT) - data_pointer);
if ((int)(sizeof(STATIC_MP3_INPUT) - data_pointer) < 0) {
// We fucked something up. Just crash here.
memcpy(0x00, (char*)(STATIC_MP3_INPUT + data_pointer), sizeof(STATIC_MP3_INPUT) - data_pointer);
return 0;
}
return (sizeof(STATIC_MP3_INPUT) - data_pointer);
}
}
*/
if( !feof(fp_open)) {
int true_size=fread(buf,1,buf_size,fp_open);
return true_size;
} else {
return -1;
}
}
static int open_input_file(const char *filename)
{
data_pointer = 0; // Set to zero before starting to read...
const AVCodec *dec;
int ret = 0;
// Instead of opening a file, just open a static buffer...
// STATIC_MP3_INPUT
// This stuff is taken straight from https://github.com/leixiaohua1020/simplest_ffmpeg_mem_handler/blob/master/simplest_ffmpeg_mem_transcoder/simplest_ffmpeg_mem_transcoder.cpp
unsigned char* inbuffer=NULL;
// unsigned char* outbuffer=NULL;
fp_open = fopen("small.mp3", "rb");
inbuffer = (unsigned char*)av_malloc(sizeof(STATIC_MP3_INPUT));
AVIOContext *avio_in=NULL;
// AVIOContext *avio_out=NULL;
avio_in =avio_alloc_context(inbuffer, sizeof(STATIC_MP3_INPUT),0,NULL,read_buffer,NULL,NULL);
if(avio_in==NULL)
goto end;
//goto end;
//goto end;
//avio_out =avio_alloc_context(outbuffer, 32768,1,NULL,NULL,write_buffer,NULL);
//if(avio_out==NULL)
// goto end;
fmt_ctx->pb=avio_in;
// fmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) { // was originally: if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
goto end;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
goto end;
}
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find an audio stream in the input file\n");
goto end;
}
audio_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
goto end;
//return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[audio_stream_index]->codecpar);
/* init the audio decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
goto end;
}
printf("Succesfully went to the end of the thing function!!!\n");
end:
// Unallocate the thing and return
//av_free(avio_in);
//av_free(inbuffer);
return ret;
}
static int init_filters(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
static const int out_sample_rate = 8000;
const AVFilterLink *outlink;
AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer audio source: the decoded frames from the decoder will be inserted here. */
if (dec_ctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&dec_ctx->ch_layout, dec_ctx->ch_layout.nb_channels);
ret = snprintf(args, sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=",
time_base.num, time_base.den, dec_ctx->sample_rate,
av_get_sample_fmt_name(dec_ctx->sample_fmt));
av_channel_layout_describe(&dec_ctx->ch_layout, args + ret, sizeof(args) - ret);
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
goto end;
}
/* buffer audio sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "sample_formats", "s16",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
goto end;
}
ret = av_opt_set(buffersink_ctx, "channel_layouts", "mono",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
goto end;
}
ret = av_opt_set_array(buffersink_ctx, "samplerates", AV_OPT_SEARCH_CHILDREN,
0, 1, AV_OPT_TYPE_INT, &out_sample_rate);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize audio buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
/* Print summary of the sink buffer
* Note: args buffer is reused to store channel layout string */
outlink = buffersink_ctx->inputs[0];
av_channel_layout_describe(&outlink->ch_layout, args, sizeof(args));
av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
(int)outlink->sample_rate,
(char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
args);
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
static void print_frame(const AVFrame *frame)
{
const int n = frame->nb_samples * frame->ch_layout.nb_channels;
const uint16_t *p = (uint16_t*)frame->data[0];
const uint16_t *p_end = p + n;
while (p < p_end) {
fputc(*p & 0xff, stdout);
fputc(*p>>8 & 0xff, stdout);
p++;
}
fflush(stdout);
}
void try_fuzz_audio(char* inputfile);
void try_fuzz_audio(char* inputfile) {
int ret;
AVPacket *packet = av_packet_alloc();
AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
if (!packet || !frame || !filt_frame) {
fprintf(stderr, "Could not allocate frame or packet\n");
exit(1);
}
printf("Calling open_input_file...\n");
fmt_ctx = avformat_alloc_context();
if ((ret = open_input_file(inputfile)) < 0)
goto end;
printf("Calling init filters...\n");
if ((ret = init_filters(filter_descr)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == audio_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
goto end;
}
if (ret >= 0) {
/* push the audio data from decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
break;
}
/* pull filtered audio from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
}
av_packet_unref(packet);
}
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
printf("Pulling the rest of the bullshit here...\n");
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
avformat_close_input(&fmt_ctx);
av_packet_free(&packet);
av_frame_free(&frame);
av_frame_free(&filt_frame);
if (ret < 0 && ret != AVERROR_EOF) {
fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
exit(1);
}
exit(0);
}
int main(int argc, char **argv)
{
if (argc != 2) {
fprintf(stderr, "Usage: %s file | %s\n", argv[0], player);
exit(1);
}
try_fuzz_audio(argv[1]); // First try with the audio
return 0;
}
Ok, so I think I managed to narrow down the problem to three compiler flags: -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
these are the flags that cause the problem I think….
Soooo maybe just remove those flags and see what happens????
compile_bullshit.sh:# gcc -Wno-error=implicit-function-declaration -I. -I./ -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -Wno-error=implicit-function-declaration -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto -Wno-maybe-uninitialized -I/usr/include/SDL2 -D_REENTRANT -MMD -MF main_prog.d -MT main_prog.o -c -o main_prog.o main_prog.c -std=gnu11 --warn-implicit-function-declaration -Wno-error=implicit-function-declaration
compile_bullshit.sh:# gcc -Wno-error=implicit-function-declaration -I. -I./ -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -Wno-error=implicit-function-declaration -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto -Wno-maybe-uninitialized -I/usr/include/SDL2 -D_REENTRANT -MMD -MF main_prog.d -MT main_prog.o -c -o main_prog.o main_prog.c -std=gnu11 --warn-implicit-function-declaration -Wno-error=implicit-function-declaration
compile_bullshit.sh:gcc -Wno-error=implicit-function-declaration -I. -I./ -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -Wno-error=implicit-function-declaration -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto -Wno-maybe-uninitialized -I/usr/include/SDL2 -D_REENTRANT -MMD -MF main_prog.d -MT main_prog.o -c -o main_prog.o main_prog.c -std=gnu11 --warn-implicit-function-declaration -Wno-error=implicit-function-declaration
compile_bullshit.sh:# -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
compile_bullshit.sh:# So we basically want to get rid of these three fucking bullshit flags: -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600
compile_bullshit.sh:# So it is inside -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST
compile_bullshit.sh:# Ok so one of these -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST -std=c17 -fomit-frame-pointer -fPIC are fucking us up...
configure:check_cppflags -D_LARGEFILE_SOURCE
ffbuild/config.log:check_cppflags -D_LARGEFILE_SOURCE
ffbuild/config.log:test_cpp -D_LARGEFILE_SOURCE
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -std=c17 -D_LARGEFILE_SOURCE -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -std=c17 -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -std=c17 -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -std=c17 -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -std=c17 -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -std=c17 -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -std=c17 -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -std=c17 -fomit-frame-pointer -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -Wl,--as-needed -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -Wl,-z,noexecstack -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -D_BSD_SOURCE -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -D_BSD_SOURCE -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -D_DARWIN_C_SOURCE -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -D_BSD_SOURCE -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -D_WIN32_WINNT=0x0600 -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -framework VideoToolbox -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -framework VideoToolbox -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -framework VideoToolbox -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -Werror=missing-prototypes -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.m
ffbuild/config.log:gcc -Werror=missing-prototypes -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.m
ffbuild/config.log:gcc -Werror=missing-prototypes -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.m
ffbuild/config.log:gcc -Werror=missing-prototypes -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.m
ffbuild/config.log:gcc -Werror=missing-prototypes -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.m
ffbuild/config.log:gcc -Werror=missing-prototypes -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.m
ffbuild/config.log:gcc -Werror=missing-prototypes -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.m
ffbuild/config.log:gcc -Werror=missing-prototypes -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.m
ffbuild/config.log:gcc -Werror=missing-prototypes -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.m
ffbuild/config.log:gcc -Werror=missing-prototypes -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.m
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0 -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0 -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -DWINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP -D_CRT_BUILD_DESKTOP_APP=0 -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -D_WIN32_WINNT=0x0A00 -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -D_WIN32_WINNT=0x0602 -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/SDL2 -D_REENTRANT -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -framework CoreFoundation -framework Security -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -DSECURITY_WIN32 -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -I. -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -E -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Werror=unused-command-line-argument -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Werror=unknown-warning-option -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wparentheses -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wswitch -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wformat-zero-length -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wpointer-sign -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wunused-const-variable -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wbool-operation -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wchar-subscripts -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -Wimplicit-const-int-float-conversion -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -Wdeprecated-declarations -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -Wunused-variable -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -Wl,-rpath-link=:libpostproc:libswresample:libswscale:libavfilter:libavdevice:libavformat:libavcodec:libavutil -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -Wl,-Bsymbolic -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -Wl,--version-script,/tmp/ffconf.vW7DZnrd/test.ver -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -mno-red-zone -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto -Wmaybe-uninitialized -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.log:gcc -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -std=c17 -fomit-frame-pointer -fPIC -pthread -I/usr/include/libdrm -I/usr/include/libdrm -g -Wdeclaration-after-statement -Wall -Wdisabled-optimization -Wpointer-arith -Wredundant-decls -Wwrite-strings -Wtype-limits -Wundef -Wmissing-prototypes -Wstrict-prototypes -Wempty-body -Wno-parentheses -Wno-switch -Wno-format-zero-length -Wno-pointer-sign -Wno-unused-const-variable -Wno-bool-operation -Wno-char-subscripts -O3 -fno-math-errno -fno-signed-zeros -fno-tree-vectorize -Werror=format-security -Werror=implicit-function-declaration -Werror=missing-prototypes -Werror=return-type -Werror=vla -Wformat -fdiagnostics-color=auto -Wno-maybe-uninitialized -c -o /tmp/ffconf.vW7DZnrd/test.o /tmp/ffconf.vW7DZnrd/test.c
ffbuild/config.mak:CPPFLAGS= -D_ISOC11_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST
Fucking bullshit!!!!
Yeah, so this turned out to be a much bigger endeavour than I initially thought…
So now I think we are close to actually exercising the actual filter programs…
Here is my current code:
#include <unistd.h>
/*
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
#include <libavutil/channel_layout.h>
#include <libavutil/mem.h>
#include <libavutil/opt.h>
*/
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
// #include <stdio.h>
#include <stdio.h>
// These are the hardcoded mp3 and mp4 files...
// #include "hardcoded_inputs.h"
#include <stdint.h>
// Hardcoded mp3 file as bytebuffer such that we do not need to reload from disk on every fuzz iteration...
volatile static uint8_t STATIC_MP3_INPUT[] = { 0xff, 0xfb, 0x90, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x69, 0x6e, 0x67, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x15, 0x99, 0x0, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x50, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x4, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x20, 0x24, 0x5, 0x47, 0x4d, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x15, 0x99, 0xf3, 0x91, 0xbd, 0x8a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfb, 0xc0, 0x64, 0x0, 0x0, 0x1, 0x4, 0x0, 0x4a, 0x6d, 0x0, 0x0, 0x8, 0x0, 0x0, 0xf, 0xf0, 0xa0, 0x0, 0x1, 0x17, 0x68, 0xfd, 0x2d, 0xb9, 0xbd, 0x80, 0x0, 0x0, 0x0, 0x3f, 0xc3, 0x0, 0x0, 0x0, 0xb6, 0xe6, 0xc0, 0x25, 0x25, 0x10, 0x60, 0x0, 0x8, 0x2, 0x0, 0x80, 0x20, 0x5c, 0xfc, 0x10, 0x70, 0x61, 0x60, 0xf9, 0xf2, 0xef, 0x44, 0xb8, 0x21, 0xca, 0x7c, 0x4e, 0x7f, 0xff, 0xc4, 0x1, 0x86, 0x44, 0x20, 0x0, 0x80, 0x20, 0x0, 0x0, 0x5a, 0xdb, 0x92, 0x8c, 0x0, 0x0, 0x5f, 0x46, 0x18, 0x2c, 0xd2, 0xc, 0x34, 0x75, 0xfe, 0x19, 0x5f, 0x32, 0x20, 0x7, 0xd8, 0x1c, 0xaa, 0x14, 0x1c, 0x34, 0x40, 0xa1, 0x19, 0x50, 0x5c, 0x1c, 0x4, 0x46, 0x14, 0x6, 0x37, 0x27, 0x20, 0x52, 0x61, 0xcd, 0xa3, 0x98, 0x30, 0x11, 0x84, 0x1, 0x1b, 0x38, 0xf8, 0x54, 0x3c, 0xf3, 0xc2, 0x58, 0x7b, 0xf0, 0xc7, 0xd7, 0x21, 0x76, 0x83, 0x80, 0x19, 0x41, 0x31, 0xfa, 0x13, 0x92, 0x81, 0xa6, 0x29, 0x9a, 0x83, 0xc0, 0xe9, 0x60, 0x32, 0x26, 0x10, 0x36, 0xdd, 0x44, 0x60, 0xcf, 0x29, 0x32, 0x20, 0x28, 0x39, 0x82, 0x47, 0x60, 0x77, 0x11, 0xfc, 0x5e, 0xaa, 0xa4, 0xb2, 0x99, 0x9d, 0x1b, 0x1f, 0x21, 0x1, 0x30, 0x50, 0x20, 0x31, 0x12, 0x0, 0x17, 0xa3, 0xaf, 0x95, 0x4a, 0x77, 0xdd, 0x2a, 0x54, 0x84, 0x37, 0x7a, 0x75, 0x60, 0x40, 0xc1, 0x70, 0xec, 0xcc, 0x5d, 0x68, 0x17, 0xa6, 0x2e, 0xd3, 0xdf, 0xbc, 0x6c, 0x7e, 0x6a, 0x6c, 0xd2, 0x13, 0xcd, 0x9b, 0xde, 0xd3, 0xf9, 0x8b, 0x21, 0x79, 0x68, 0xef, 0xf6, 0xa6, 0x7d, 0xff, 0xd7, 0x7b, 0xff, 0x8, 0x85, 0x7f, 0x6e, 0x4b, 0x2f, 0xe5, 0xc8, 0xa, 0x4d, 0x9e, 0x33, 0x6f, 0x4b, 0xd1, 0xe, 0x6d, 0xa4, 0x0, 0x42, 0x0, 0x0, 0x0, 0x0, 0x45, 0x6f, 0xc, 0x14, 0x61, 0x9, 0x4d, 0xdc, 0xb0, 0xa, 0xee, 0xa, 0x81, 0x83, 0x28, 0xc3, 0xb3, 0xc0, 0xca, 0x82, 0x21, 0x2, 0xcd, 0x98, 0x58, 0x22, 0xea, 0x36, 0x56, 0x50, 0x10, 0xda, 0xe5, 0x4, 0xb, 0x99, 0x60, 0x7a, 0x6b, 0x12, 0x1c, 0x74, 0xa6, 0xc1, 0xb1, 0xa1, 0x7f, 0x5a, 0xea, 0x32, 0x45, 0xa7, 0x79, 0x93, 0xa4, 0xb4, 0xa0, 0xbb, 0x5d, 0xf8, 0x52, 0xb3, 0xa2, 0x29, 0x9c, 0x61, 0x10, 0xf, 0x3d, 0x4c, 0xe1, 0x6e, 0x12, 0xcc, 0xe5, 0x5c, 0x61, 0xd4, 0x30, 0x4c, 0x3b, 0x11, 0x7c, 0x5f, 0x57, 0x16, 0xb3, 0xf9, 0xae, 0xe1, 0xcf, 0xd3, 0xef, 0x14, 0xa0, 0xb3, 0x6a, 0x95, 0x83, 0xd3, 0xc6, 0xa0, 0x99, 0xbe, 0x5d, 0xa7, 0xa0, 0xb9, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xca, 0xed, 0x64, 0xfa, 0x38, 0x12, 0x28, 0xae, 0x7b, 0xbd, 0x85, 0xc8, 0x84, 0x3f, 0x7e, 0x59, 0x7d, 0xb1, 0xc5, 0x93, 0x81, 0xad, 0xaf, 0xfa, 0x27, 0x8, 0x40, 0x2a, 0x45, 0x3, 0x57, 0x4c, 0xe1, 0x62, 0x18, 0xbb, 0xa6, 0x82, 0x78, 0xbe, 0xbe, 0xdd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x18, 0x5e, 0xe7, 0x6f, 0xd2, 0x5f, 0x93, 0x5d, 0xb5, 0xdd, 0x63, 0x76, 0xdd, 0x6a, 0x4b, 0x2e, 0x84, 0x8, 0xcd, 0xdd, 0x6, 0xf2, 0x96, 0x1e, 0x88, 0xde, 0x98, 0x3, 0x60, 0x7c, 0x38, 0x3, 0x20, 0x28, 0x41, 0xb0, 0x2b, 0x60, 0xce, 0x83, 0xa5, 0x92, 0x2e, 0x48, 0xb0, 0x53, 0xfa, 0x23, 0x0, 0x35, 0x8c, 0x60, 0x31, 0xd1, 0x8a, 0x4, 0x88, 0x84, 0x83, 0x80, 0x41, 0x22, 0x6b, 0x28, 0xd0, 0x94, 0x9e, 0x20, 0xa8, 0xb, 0x39, 0x1e, 0x5, 0x95, 0x38, 0x66, 0x93, 0x4b, 0xd5, 0x3a, 0xb5, 0x3b, 0xcc, 0xf5, 0xf6, 0x1a, 0x44, 0x57, 0x3f, 0xce, 0x56, 0xef, 0xf, 0x13, 0x4f, 0xff, 0x26, 0x5e, 0x13, 0x5b, 0xd8, 0xad, 0x6e, 0xe1, 0x76, 0x6a, 0xad, 0x7e, 0xe5, 0x85, 0x23, 0x8c, 0x4d, 0xc7, 0xe6, 0x1c, 0x88, 0xc7, 0xe4, 0xa9, 0x38, 0xf4, 0x55, 0xc7, 0xbf, 0xa9, 0x45, 0xeb, 0x97, 0xec, 0xcc, 0xa5, 0x5a, 0xb3, 0x63, 0x37, 0x3, 0xdd, 0xef, 0xc3, 0xbf, 0xff, 0xcc, 0x3c, 0x98, 0x48, 0x2a, 0x27, 0x2c, 0x7c, 0x77, 0x86, 0xf7, 0x90, 0x75, 0xb8, 0xb9, 0x64, 0x8, 0x50, 0x4b, 0x90, 0x17, 0x3, 0xe4, 0xe3, 0xe6, 0x83, 0xb0, 0x40, 0x13, 0x4d, 0x8d, 0x4d, 0x9, 0xda, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xaf, 0xb3, 0xf5, 0xa9, 0x33, 0x2b, 0xb3, 0x7b, 0x30, 0x48, 0x1d, 0x6, 0xaf, 0x86, 0xe, 0xf0, 0x47, 0x38, 0xe5, 0x56, 0x33, 0xfc, 0xe6, 0x7d, 0x8e, 0xb9, 0x30, 0x63, 0x6, 0x38, 0x64, 0xc, 0x2c, 0x1b, 0xc4, 0x41, 0xa2, 0x11, 0x0, 0xa8, 0xe9, 0x88, 0x8f, 0x24, 0xe8, 0xa8, 0xe0, 0x7, 0xc0, 0xe0, 0x87, 0x8a, 0x83, 0x29, 0x36, 0x61, 0x42, 0xd, 0x7d, 0x98, 0x2, 0x94, 0xc4, 0x87, 0x9, 0x45, 0x1, 0x1e, 0x84, 0xb7, 0x11, 0x6c, 0x82, 0xc1, 0x80, 0xb, 0xbd, 0x31, 0x4e, 0x9b, 0xc3, 0x2, 0x9c, 0x64, 0xcf, 0xe5, 0x4, 0xf7, 0xd8, 0x48, 0x39, 0x45, 0xe9, 0x2, 0x4a, 0xda, 0xdc, 0xf0, 0x38, 0x10, 0x50, 0x6e, 0xfe, 0x59, 0xc3, 0x15, 0x16, 0x19, 0x4b, 0x24, 0x14, 0xf1, 0xb9, 0x64, 0x0, 0x2, 0x34, 0xd, 0xbb, 0xf1, 0x2a, 0x8f, 0xc7, 0xff, 0xfb, 0x90, 0x64, 0xed, 0x80, 0xf6, 0x3d, 0x56, 0xce, 0x7f, 0x6f, 0x20, 0xa, 0x0, 0x0, 0xf, 0xf0, 0xe0, 0x0, 0x1, 0x16, 0x2d, 0x63, 0x43, 0xed, 0xe1, 0x6f, 0xe0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x4, 0x65, 0x6a, 0xf5, 0xfb, 0x81, 0x1e, 0xdc, 0xfe, 0x78, 0x2f, 0xf7, 0x16, 0x5a, 0x97, 0x91, 0x63, 0x51, 0xc6, 0xa6, 0xed, 0xff, 0xff, 0xff, 0xfd, 0xf5, 0x84, 0x81, 0x33, 0x32, 0xd4, 0xb, 0xa, 0xfc, 0xb8, 0xef, 0xf8, 0x14, 0xcb, 0xa5, 0xba, 0x42, 0xaa, 0x7c, 0xb3, 0x46, 0x10, 0x73, 0x21, 0x40, 0xad, 0x55, 0x1f, 0x7, 0x59, 0x4, 0x20, 0x84, 0xb1, 0x8b, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x96, 0x33, 0xcd, 0x6f, 0x37, 0x81, 0xfe, 0x33, 0x7e, 0xf1, 0xfc, 0x37, 0x90, 0x68, 0xc4, 0x89, 0x5c, 0x28, 0x26, 0x89, 0x45, 0x6a, 0x41, 0x4a, 0xab, 0x57, 0xb9, 0x7f, 0xef, 0x9f, 0x26, 0x6b, 0x6a, 0x42, 0x8, 0x19, 0x65, 0x9a, 0x11, 0x0, 0xb7, 0x30, 0xd0, 0xb2, 0xb0, 0x71, 0x50, 0xd0, 0x11, 0x98, 0x24, 0x2c, 0xc0, 0x40, 0xc7, 0x58, 0xe, 0x58, 0x8, 0x88, 0xf0, 0x8, 0x10, 0x20, 0x2, 0x7b, 0xf3, 0x20, 0x13, 0x22, 0x14, 0x40, 0xd3, 0x2c, 0x2, 0x16, 0xe2, 0xcc, 0x8e, 0x90, 0xc, 0xc1, 0x72, 0x5a, 0x94, 0x3b, 0xb7, 0x84, 0x47, 0x74, 0x31, 0xbb, 0xdf, 0xaa, 0xd6, 0x98, 0xe5, 0x34, 0x5, 0xc, 0xd2, 0x3d, 0xe1, 0x62, 0x3, 0x9f, 0x3f, 0xfa, 0xde, 0xe3, 0x55, 0x28, 0xa6, 0x69, 0x2a, 0x4d, 0xc, 0x60, 0xbd, 0xef, 0xc4, 0x76, 0xa6, 0xee, 0x6a, 0x19, 0xb1, 0xfb, 0x35, 0x4, 0xc3, 0xe6, 0x38, 0xe8, 0x94, 0x70, 0xa1, 0xff, 0xff, 0x5d, 0xcd, 0x20, 0x40, 0xf5, 0x3b, 0xd1, 0x92, 0x44, 0x1e, 0x88, 0xe2, 0x5b, 0x89, 0x88, 0x92, 0x1f, 0x1a, 0x1c, 0xc2, 0x29, 0x20, 0x48, 0x56, 0x3f, 0xff, 0xff, 0xb1, 0xb7, 0x77, 0x43, 0xfc, 0xc3, 0xd1, 0x4d, 0x1b, 0x8a, 0xc7, 0xe5, 0x84, 0xe3, 0xa3, 0x51, 0x91, 0xa2, 0x47, 0x2, 0x21, 0xb3, 0x7f, 0xeb, 0xaa, 0x40, 0x2, 0x3, 0x3c, 0x20, 0x0, 0x24, 0x7, 0xc0, 0xc0, 0xa0, 0x70, 0xbc, 0xc1, 0xc0, 0xa4, 0x41, 0x2, 0x1, 0x4, 0x62, 0xb1, 0x86, 0x71, 0xc0, 0x85, 0x25, 0xd0, 0x5d, 0x0, 0x25, 0x86, 0xa3, 0xc5, 0x78, 0x8f, 0xc2, 0xca, 0x10, 0xdd, 0xdc, 0x6a, 0x10, 0x5a, 0xfa, 0x6, 0x22, 0x64, 0x80, 0x3d, 0x4a, 0x7b, 0x11, 0x65, 0x49, 0xb6, 0xbb, 0xf5, 0x3f, 0x97, 0x74, 0x8b, 0xb1, 0x4a, 0x5a, 0x79, 0x99, 0x43, 0x2a, 0xb, 0x8d, 0xc, 0x5d, 0x35, 0x98, 0xc7, 0x68, 0x88, 0x48, 0x73, 0x92, 0xa5, 0x31, 0xf8, 0x10, 0xa1, 0xca, 0x5f, 0x66, 0x5a, 0x46, 0x68, 0xea, 0x76, 0x32, 0x2e, 0x8f, 0xa7, 0xe, 0xad, 0x6e, 0x3d, 0xff, 0xfe, 0x60, 0xe8, 0x97, 0xc, 0x92, 0x1f, 0x8b, 0x18, 0xff, 0x59, 0x75, 0x66, 0x37, 0x2f, 0xc, 0x0, 0x3d, 0xf, 0x54, 0xca, 0xff, 0xfb, 0x90, 0x64, 0xef, 0x80, 0xf6, 0x1e, 0x59, 0xd2, 0x7b, 0x79, 0x7b, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0xc9, 0x65, 0x53, 0xed, 0xe0, 0xed, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x96, 0x5e, 0x1d, 0xa3, 0x14, 0x97, 0x28, 0x26, 0x46, 0x3e, 0x55, 0xff, 0xff, 0xf5, 0x5f, 0xf4, 0xed, 0x65, 0x17, 0x48, 0xc5, 0x35, 0x29, 0x29, 0xe1, 0x8e, 0x60, 0x38, 0x56, 0x3b, 0x56, 0x5b, 0xff, 0xca, 0xe4, 0x28, 0x31, 0x81, 0x8c, 0x21, 0x4, 0xc6, 0x5d, 0xe2, 0x30, 0x43, 0x4, 0x51, 0x38, 0x70, 0x58, 0x5c, 0x40, 0xa2, 0x90, 0xbf, 0xa3, 0xe3, 0xc, 0x42, 0x90, 0x38, 0x28, 0x39, 0x39, 0x12, 0x2a, 0x58, 0x8, 0xb7, 0x6c, 0x1, 0xa2, 0x31, 0x7a, 0x7a, 0xf5, 0x92, 0x59, 0x97, 0xc0, 0x8a, 0xa4, 0xa4, 0x2f, 0xca, 0x22, 0x59, 0x56, 0xe6, 0x79, 0xed, 0x9f, 0xaf, 0x5c, 0x2f, 0x54, 0xa3, 0xc1, 0x90, 0x2a, 0xdb, 0x59, 0x65, 0xfb, 0xa9, 0xc8, 0xbb, 0xa1, 0x17, 0xa8, 0xcb, 0xc0, 0xa4, 0xa3, 0xee, 0x59, 0xbf, 0xfc, 0x3e, 0xf2, 0x2, 0x65, 0x89, 0xd8, 0x66, 0x27, 0x54, 0x61, 0xff, 0xff, 0x7e, 0xfb, 0xa6, 0xa3, 0x49, 0x41, 0x77, 0x5e, 0x25, 0x3f, 0xff, 0x9a, 0xfe, 0xf, 0x5d, 0x19, 0xc0, 0x11, 0xcc, 0x49, 0x60, 0x80, 0x1f, 0x84, 0xe1, 0x41, 0xa1, 0x21, 0xb1, 0x16, 0xff, 0xff, 0xd1, 0xff, 0xea, 0x7f, 0x71, 0xb0, 0xa8, 0xa3, 0xa2, 0x4d, 0x2a, 0x60, 0xd0, 0x1, 0xcb, 0x30, 0x20, 0x2, 0x5, 0x32, 0x2, 0x40, 0x1b, 0xc5, 0x80, 0x26, 0x1, 0x9, 0x97, 0x10, 0xc0, 0xe1, 0x18, 0x70, 0x64, 0x16, 0x30, 0x6e, 0x38, 0xc8, 0x60, 0x30, 0x3e, 0xd1, 0x50, 0xe2, 0xc7, 0xbf, 0xc3, 0x83, 0x4d, 0x6d, 0x85, 0x36, 0xaf, 0x5e, 0x1b, 0x81, 0xa2, 0xa1, 0x3b, 0x26, 0x8a, 0xe7, 0x3a, 0xb7, 0x58, 0xd4, 0xca, 0x71, 0x96, 0x4f, 0x98, 0x6e, 0xc6, 0xf8, 0xfc, 0x8, 0xe0, 0xff, 0x50, 0xda, 0x3d, 0xac, 0xac, 0xcd, 0x19, 0x61, 0x21, 0xed, 0x67, 0x1a, 0x82, 0x2d, 0xad, 0x3, 0x54, 0xc5, 0x77, 0xff, 0x99, 0x47, 0xe3, 0x5d, 0xad, 0x8d, 0x57, 0x27, 0x81, 0xb6, 0xfd, 0xaf, 0x43, 0x8c, 0x3c, 0xf1, 0xe9, 0x88, 0x9d, 0x7, 0xc5, 0xd3, 0xc5, 0x24, 0xc4, 0x61, 0x24, 0xd, 0x38, 0x3, 0xc1, 0x42, 0x87, 0x94, 0x7, 0x31, 0xa8, 0x22, 0x51, 0xbf, 0xff, 0xff, 0xfe, 0x79, 0xe6, 0x65, 0x23, 0x8e, 0x25, 0xb8, 0x78, 0xac, 0xd2, 0x5, 0x81, 0xca, 0x13, 0x7, 0x32, 0xf7, 0xa, 0x2, 0x40, 0x0, 0x86, 0x40, 0x4d, 0x83, 0xfb, 0x6c, 0x16, 0x11, 0x31, 0x91, 0x77, 0xd5, 0x60, 0x8c, 0x88, 0x40, 0xc1, 0x28, 0x8e, 0x6c, 0xc, 0x20, 0x19, 0xb, 0xcb, 0xc2, 0x5d, 0xc7, 0x71, 0x27, 0xb, 0x96, 0xad, 0xc1, 0x1, 0xd, 0x6d, 0x88, 0x4c, 0x39, 0x3f, 0x3e, 0xd0, 0xa0, 0x36, 0xdd, 0x60, 0x8a, 0x6f, 0xc9, 0x21, 0x5e, 0x68, 0x2e, 0xff, 0xfb, 0x70, 0x64, 0xfd, 0x0, 0xf4, 0xf9, 0x59, 0xd2, 0xfb, 0x99, 0x6a, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xd5, 0x5d, 0x51, 0xed, 0x24, 0xfa, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x51, 0xcf, 0x9f, 0xd0, 0x9, 0x1d, 0x46, 0xb0, 0xe9, 0x73, 0x15, 0xa7, 0x42, 0xd1, 0x21, 0x68, 0x7a, 0xd8, 0x93, 0xab, 0x2e, 0xdd, 0x3a, 0xf9, 0xb3, 0x97, 0x1e, 0x9b, 0x5c, 0xb6, 0xa2, 0x79, 0x61, 0x3c, 0x7d, 0x78, 0xca, 0x7f, 0xe2, 0x58, 0x8a, 0x28, 0x61, 0x43, 0x2, 0xa2, 0xea, 0x84, 0x5f, 0xf3, 0xb9, 0xbc, 0xc, 0x98, 0xe, 0x84, 0x82, 0x21, 0x4d, 0x3, 0xc7, 0x9a, 0x78, 0x12, 0x61, 0x19, 0x63, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xfe, 0xd, 0xff, 0x57, 0x15, 0xf1, 0xbd, 0x8b, 0x8, 0x46, 0x10, 0x49, 0x6a, 0xd8, 0xb8, 0x44, 0xc7, 0x42, 0xa7, 0x0, 0x2, 0x0, 0x2, 0x20, 0x4, 0x44, 0x1f, 0xf0, 0x30, 0x74, 0xa3, 0x38, 0xa, 0x32, 0x31, 0x64, 0xda, 0x30, 0x23, 0x3, 0xc4, 0xe, 0x33, 0x80, 0x43, 0x23, 0x2d, 0x28, 0xf, 0x8, 0x4, 0x7c, 0x17, 0x7b, 0xac, 0x18, 0x18, 0x30, 0x4, 0x9, 0x9, 0x4b, 0x0, 0x4, 0x64, 0x6c, 0x4d, 0x2c, 0xb8, 0x32, 0x4d, 0xd2, 0xe5, 0x88, 0x74, 0xa2, 0xe1, 0xd3, 0x23, 0x2, 0x36, 0xfd, 0x8a, 0x95, 0x64, 0xc4, 0x35, 0x26, 0x9c, 0x1c, 0x71, 0x4d, 0x41, 0x6c, 0x33, 0x48, 0xc1, 0xfa, 0x34, 0xb9, 0xc0, 0x82, 0xc3, 0xcf, 0xf0, 0x87, 0x86, 0x74, 0xad, 0x12, 0x89, 0x8f, 0x90, 0x59, 0xc0, 0xfa, 0x24, 0xff, 0xff, 0xfd, 0xb5, 0x33, 0xf6, 0xd2, 0x71, 0xd4, 0x18, 0x47, 0x3d, 0x6a, 0xe7, 0x3d, 0x97, 0xb4, 0xd, 0xdd, 0x8a, 0x9d, 0xd4, 0xed, 0x68, 0x9e, 0xd, 0x36, 0x2e, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x63, 0x94, 0x72, 0x9, 0x53, 0xe3, 0x37, 0xea, 0x2f, 0xd1, 0xef, 0xe8, 0x9c, 0xb2, 0xe9, 0x5d, 0x37, 0xd, 0xe6, 0xcc, 0xd6, 0x60, 0x4, 0x0, 0x4, 0x0, 0x40, 0x2, 0xf7, 0xf4, 0x94, 0x20, 0xc, 0x2f, 0x29, 0xb, 0x14, 0x18, 0x79, 0x98, 0x10, 0x50, 0xe8, 0x1, 0x8c, 0xd4, 0x48, 0x90, 0x15, 0x1f, 0xd0, 0xa9, 0xff, 0xfb, 0x70, 0x64, 0xf0, 0x80, 0xf4, 0x8b, 0x59, 0x53, 0x7b, 0x8f, 0x3b, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0x89, 0x65, 0x51, 0xed, 0xb1, 0x13, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x4c, 0x31, 0x21, 0x26, 0x5, 0x2, 0x87, 0xa, 0xa3, 0x1, 0x3f, 0x24, 0x5, 0xbd, 0xf3, 0x7c, 0x54, 0xb5, 0x9b, 0x9c, 0x1e, 0xca, 0xfa, 0xc7, 0x65, 0x19, 0x5a, 0xdb, 0x89, 0x73, 0x2, 0xbd, 0xaa, 0x1, 0x7f, 0x52, 0xc5, 0xba, 0xd5, 0x29, 0x67, 0x8f, 0xa5, 0xb, 0xf2, 0xe8, 0xca, 0x7d, 0xc5, 0x75, 0x16, 0x5a, 0xc3, 0x9d, 0xc7, 0x16, 0xb8, 0x33, 0xa9, 0x4d, 0xb, 0x98, 0x13, 0x27, 0xd, 0x5a, 0xbc, 0x3e, 0xf8, 0x64, 0x9, 0xfc, 0x3a, 0xe8, 0xb1, 0x35, 0x84, 0x66, 0xe3, 0x88, 0x49, 0x5a, 0x72, 0x71, 0x6c, 0x7d, 0x13, 0x1, 0x60, 0xb9, 0x2b, 0x72, 0x4d, 0xa2, 0x22, 0xd2, 0x72, 0x82, 0x62, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x3f, 0x1d, 0x86, 0x4e, 0x37, 0xd, 0xe9, 0xeb, 0x98, 0x6c, 0xa2, 0x22, 0x38, 0xce, 0x12, 0x64, 0x89, 0x13, 0x4c, 0x14, 0x15, 0x3e, 0xb0, 0x0, 0xc0, 0x5, 0x10, 0x0, 0x0, 0x3e, 0x5f, 0x33, 0xe, 0x4c, 0x2e, 0x20, 0xc2, 0xb, 0x6, 0xd2, 0x37, 0xbd, 0xf, 0xb4, 0x43, 0xc3, 0x60, 0xa0, 0x78, 0xc0, 0x31, 0x8, 0xc4, 0xea, 0x6b, 0xd4, 0xe2, 0x13, 0x86, 0x45, 0x38, 0x58, 0x1, 0x90, 0xe, 0x92, 0x4d, 0x21, 0x7b, 0x45, 0xe5, 0x91, 0x28, 0x16, 0x5a, 0x38, 0xfa, 0xf5, 0xeb, 0xd9, 0xf8, 0xc7, 0x97, 0xd0, 0xcf, 0x44, 0xc7, 0x1, 0xa9, 0xc, 0xe4, 0xbc, 0xd, 0x89, 0x8b, 0xa9, 0x8d, 0x7b, 0x42, 0x51, 0x70, 0x8, 0x8e, 0x96, 0x89, 0xc9, 0xda, 0xd3, 0xfa, 0xdf, 0x3f, 0x77, 0x29, 0xd1, 0xa6, 0x44, 0x7b, 0x56, 0xba, 0x62, 0x9d, 0xd8, 0xbd, 0xcb, 0xdb, 0xe3, 0x5e, 0x6b, 0x11, 0xda, 0xd3, 0xf3, 0x56, 0x8a, 0x4d, 0x1e, 0x38, 0x5f, 0x7b, 0x96, 0xaf, 0x4a, 0xc2, 0x99, 0x11, 0x80, 0x7, 0x5f, 0x7a, 0xa3, 0x84, 0xc5, 0x63, 0x88, 0x22, 0x85, 0x8b, 0xff, 0xff, 0xd2, 0xb7, 0x31, 0x99, 0x26, 0x4f, 0x56, 0xda, 0xe4, 0xc5, 0x88, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x0, 0xf4, 0xdd, 0x59, 0xd3, 0xfb, 0x6f, 0x4b, 0xd8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x14, 0x5, 0x65, 0x4d, 0xad, 0xbd, 0x2f, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xa6, 0x29, 0xa5, 0x47, 0x47, 0x86, 0x5, 0xa2, 0x51, 0x6f, 0xff, 0xa2, 0xd0, 0x4, 0x20, 0xa8, 0x0, 0x64, 0x3, 0x79, 0x8e, 0x44, 0x8f, 0x80, 0xd1, 0xa8, 0x1c, 0x16, 0x1c, 0x6b, 0xec, 0x9d, 0xa3, 0x26, 0x88, 0x28, 0x38, 0x73, 0x6c, 0xd3, 0x87, 0x41, 0x45, 0x16, 0xf2, 0xd1, 0xb, 0x3, 0x47, 0xb6, 0xb2, 0xdd, 0x9e, 0x99, 0x36, 0x56, 0x9d, 0xa9, 0x4d, 0x20, 0xf2, 0x55, 0x6c, 0xa6, 0xd5, 0xe0, 0x1e, 0x56, 0xc0, 0x49, 0x76, 0x35, 0x29, 0x4f, 0x79, 0x86, 0xcd, 0xcf, 0x9d, 0x63, 0x25, 0x31, 0xd3, 0x68, 0x42, 0x9, 0x28, 0xcd, 0xd8, 0x5e, 0xaa, 0xe8, 0xa2, 0x66, 0xfd, 0x95, 0xa3, 0xae, 0x1f, 0x9a, 0x1d, 0xa0, 0xbb, 0xe, 0x2d, 0xac, 0xec, 0xce, 0x64, 0x15, 0xa9, 0xc2, 0x1d, 0xa6, 0xb0, 0xac, 0x2, 0x8d, 0x2f, 0x61, 0x4a, 0xeb, 0x2f, 0xf8, 0x6b, 0x76, 0xef, 0x72, 0x48, 0xf4, 0xaa, 0x65, 0xa2, 0x65, 0x46, 0x1, 0xf0, 0x51, 0x8, 0xff, 0xff, 0xeb, 0xe5, 0x8, 0x92, 0x76, 0x38, 0xb9, 0x37, 0xe5, 0x2a, 0x60, 0x8c, 0x34, 0xd2, 0xa8, 0x2f, 0x59, 0x8f, 0xfe, 0xe, 0x29, 0xf5, 0xd4, 0x0, 0xc0, 0x26, 0x0, 0x20, 0x0, 0xce, 0x65, 0x22, 0xe3, 0x4, 0xa6, 0x42, 0x26, 0x16, 0x1d, 0x5, 0x23, 0x9a, 0x24, 0x68, 0x5, 0x14, 0xc4, 0xc7, 0xc, 0x38, 0xd, 0xd6, 0x52, 0xd, 0x81, 0x95, 0xa8, 0x23, 0x36, 0x12, 0x17, 0x7d, 0x5b, 0xb3, 0x20, 0xab, 0x5e, 0x43, 0x72, 0x6a, 0x7a, 0x6c, 0x7c, 0x2c, 0x18, 0xb0, 0xc3, 0xfe, 0xc9, 0xbb, 0x66, 0x9, 0xc9, 0xee, 0x15, 0xf9, 0x98, 0xeb, 0x89, 0x56, 0xbb, 0x9f, 0xbe, 0x88, 0x73, 0x2d, 0xe, 0xa5, 0xa8, 0xac, 0x87, 0x1d, 0xae, 0xc3, 0x36, 0x9f, 0xe5, 0xb8, 0xdb, 0xa2, 0xf3, 0x28, 0x79, 0xe9, 0xb7, 0xcf, 0x35, 0x2d, 0xc2, 0xbf, 0x56, 0xf6, 0xc3, 0x76, 0xcf, 0xbd, 0x54, 0xb6, 0x9a, 0x8e, 0xc2, 0x72, 0xdb, 0x54, 0xe5, 0x3a, 0xb4, 0xdc, 0xa4, 0xa9, 0xa7, 0xde, 0xf, 0x88, 0x5, 0x87, 0x46, 0x4, 0x44, 0x7, 0x7f, 0xff, 0xee, 0xcf, 0x28, 0xd0, 0xd, 0x8, 0x46, 0x24, 0xf9, 0x5c, 0x41, 0xc5, 0x8a, 0xac, 0xe7, 0x17, 0x65, 0x11, 0x15, 0x3d, 0xff, 0xc1, 0x40, 0x12, 0x80, 0x36, 0x1, 0x4c, 0x22, 0xc8, 0x3, 0xf1, 0xd2, 0xea, 0xe4, 0xcc, 0xff, 0xfb, 0x80, 0x64, 0xee, 0x80, 0xf4, 0xfe, 0x59, 0xd2, 0xeb, 0x4c, 0x3c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0xd5, 0x5d, 0x4f, 0xad, 0x30, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x86, 0x30, 0x23, 0xc7, 0x6d, 0x9c, 0xfd, 0x40, 0xab, 0x63, 0xcc, 0xca, 0x2, 0x8, 0x0, 0x3, 0x83, 0xa0, 0x36, 0x58, 0xc2, 0x94, 0x10, 0xc, 0x91, 0xaf, 0x36, 0x0, 0x1b, 0xae, 0x3a, 0x59, 0x20, 0x28, 0x32, 0x97, 0x74, 0xfe, 0x88, 0x67, 0x88, 0xfe, 0xa9, 0x40, 0xb2, 0xf2, 0xe1, 0x39, 0xe7, 0xe, 0x6a, 0x5a, 0x7a, 0x2b, 0x3b, 0x17, 0xb6, 0x5e, 0x24, 0x8, 0x2d, 0xad, 0x58, 0xb6, 0xdf, 0xd9, 0xee, 0xcc, 0xa1, 0xba, 0xd2, 0x66, 0x5e, 0x6b, 0xcc, 0xaa, 0xbd, 0xa8, 0xaf, 0x55, 0xb4, 0xd6, 0x96, 0xcb, 0xee, 0xf9, 0x93, 0xac, 0x68, 0xee, 0x0, 0xe5, 0x1c, 0x3b, 0x8f, 0xb2, 0x11, 0x53, 0x65, 0xc8, 0xf6, 0x79, 0xf6, 0xe7, 0x1b, 0x26, 0xaf, 0x35, 0x37, 0xff, 0xff, 0xff, 0xff, 0xb9, 0xca, 0x1e, 0x4c, 0xad, 0x32, 0x21, 0xf5, 0xa8, 0xe1, 0xeb, 0x79, 0xe2, 0xaf, 0x25, 0x15, 0x49, 0xd3, 0x14, 0x51, 0xa5, 0x8e, 0x58, 0x98, 0xdf, 0xff, 0xbc, 0xca, 0xb8, 0x16, 0xd1, 0xa4, 0x80, 0x51, 0x20, 0x6e, 0xd8, 0x4c, 0xeb, 0x36, 0x58, 0x2e, 0x31, 0xc8, 0x73, 0x43, 0x2f, 0x5, 0x8, 0xa2, 0xd1, 0x31, 0x60, 0x34, 0x20, 0xbb, 0xe9, 0xe2, 0xd6, 0x19, 0xe0, 0x8, 0xe8, 0x38, 0x51, 0xc5, 0x77, 0x16, 0x64, 0x8, 0xd6, 0xa0, 0x55, 0xc6, 0x86, 0x85, 0xd6, 0xdd, 0x82, 0x6a, 0xd, 0x82, 0x13, 0x62, 0x58, 0xb4, 0xc, 0x3e, 0xfb, 0x78, 0x1b, 0x3, 0x21, 0x6d, 0x8d, 0xa1, 0x5b, 0x48, 0xb5, 0x1c, 0x19, 0xcf, 0xe6, 0x85, 0x79, 0xe6, 0x4b, 0x10, 0x1a, 0x26, 0x18, 0xd, 0x91, 0xb1, 0x5, 0x3b, 0xfb, 0x53, 0xee, 0x13, 0xa9, 0x52, 0x59, 0x56, 0xa5, 0x88, 0xd1, 0x99, 0x13, 0x82, 0x1, 0x42, 0x33, 0x66, 0x99, 0x5a, 0x6d, 0x51, 0x84, 0xa6, 0xab, 0x47, 0x5b, 0xb6, 0xe4, 0x98, 0x16, 0xc3, 0x51, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbd, 0x73, 0x2f, 0x68, 0x48, 0x80, 0x51, 0x5, 0x61, 0x17, 0x2c, 0x93, 0xad, 0x41, 0x53, 0x6a, 0x43, 0x53, 0xd2, 0x1, 0x23, 0x48, 0x5a, 0x53, 0x7f, 0xfc, 0x2e, 0xb2, 0x8, 0x82, 0x60, 0x86, 0x8c, 0xa8, 0x49, 0x7f, 0x85, 0x89, 0xc6, 0x81, 0x45, 0xc, 0x72, 0x11, 0x5e, 0x20, 0x90, 0x5, 0xf5, 0x1, 0x11, 0x1e, 0x2, 0xf8, 0x31, 0xee, 0xd4, 0x6a, 0x48, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x80, 0xf4, 0xcd, 0x58, 0x53, 0x6b, 0x6c, 0x2c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0x21, 0x5d, 0x4d, 0xad, 0x31, 0x6f, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xdc, 0x3c, 0x16, 0xf5, 0xa7, 0x96, 0xc4, 0x83, 0xb6, 0x1f, 0xea, 0x68, 0x93, 0xa0, 0x4b, 0xc5, 0x20, 0xda, 0x82, 0xa6, 0x9e, 0x3c, 0x46, 0xaf, 0x8c, 0xeb, 0x17, 0x99, 0xd1, 0x40, 0x15, 0x3a, 0xe9, 0xc6, 0xcc, 0x9, 0x71, 0xb6, 0xf7, 0x17, 0x92, 0xd2, 0xcf, 0x9d, 0xf9, 0x19, 0x91, 0x11, 0xa1, 0x67, 0xe6, 0xee, 0xe6, 0x4e, 0x4b, 0x1b, 0xdf, 0x2b, 0xdd, 0x38, 0xad, 0x92, 0xaa, 0xa8, 0xb1, 0xbf, 0xb5, 0x14, 0xa7, 0x19, 0x72, 0x29, 0x2d, 0x5b, 0x5c, 0x4a, 0x2, 0x40, 0xe8, 0x90, 0xac, 0x81, 0xe6, 0x7f, 0xfb, 0x7c, 0xd2, 0xab, 0x2e, 0x6a, 0x18, 0x41, 0xdd, 0x67, 0xe5, 0x23, 0xab, 0x20, 0x5, 0x1e, 0x1a, 0x22, 0xff, 0xff, 0x33, 0xf0, 0x15, 0x40, 0xad, 0x2, 0x91, 0x21, 0x74, 0x5, 0x17, 0x1a, 0x2, 0x2e, 0x41, 0x86, 0x92, 0x88, 0xb7, 0x42, 0x4, 0xc9, 0x88, 0xcc, 0x5a, 0x0, 0x50, 0x2, 0x6e, 0x51, 0x5c, 0x9a, 0xd8, 0x35, 0x69, 0x9b, 0x4d, 0x84, 0x89, 0x77, 0xc6, 0xa1, 0xd2, 0x43, 0x61, 0xba, 0x69, 0x96, 0x91, 0x11, 0x2e, 0x1b, 0x10, 0xac, 0x96, 0xb6, 0xb, 0x8a, 0x9b, 0x74, 0x8e, 0x2e, 0xb9, 0x79, 0x1, 0x4d, 0xdc, 0x90, 0xb9, 0x52, 0x59, 0x37, 0x27, 0x66, 0x7a, 0x56, 0xbf, 0x8f, 0x9a, 0x38, 0xc9, 0xca, 0x9, 0x53, 0xab, 0xac, 0xa8, 0xea, 0x1b, 0x88, 0x68, 0xb2, 0xcb, 0xc6, 0x15, 0x3c, 0x40, 0x4a, 0x4c, 0x8, 0xb2, 0x58, 0xcc, 0x23, 0x13, 0xd9, 0x55, 0xd5, 0xd9, 0xda, 0x59, 0xc3, 0xe6, 0xca, 0x5b, 0x68, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x49, 0xa9, 0x23, 0x44, 0xd0, 0x65, 0x54, 0x26, 0x93, 0xde, 0x6d, 0x84, 0xbd, 0xad, 0xd8, 0xab, 0xa9, 0x26, 0xb7, 0x20, 0x76, 0xb1, 0x96, 0x35, 0x4d, 0x54, 0xca, 0xf0, 0xc6, 0x1b, 0x63, 0xcd, 0xc4, 0xaa, 0x58, 0xed, 0x4a, 0x1e, 0x34, 0x6d, 0x12, 0x2d, 0xe0, 0xb0, 0xd1, 0xa8, 0xcb, 0xa, 0x65, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x80, 0xf4, 0xdf, 0x59, 0x52, 0xeb, 0x1b, 0x48, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0x21, 0x49, 0x4f, 0xed, 0x24, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x8c, 0x47, 0xc1, 0xa3, 0x54, 0x81, 0x90, 0x6, 0xc0, 0xb, 0x40, 0x91, 0x52, 0xe8, 0xed, 0x2d, 0xd8, 0x6a, 0x2, 0x9e, 0x5d, 0x47, 0xcc, 0xd, 0x60, 0x35, 0x1d, 0x9f, 0xb1, 0x7c, 0xb8, 0x6e, 0x79, 0x68, 0xea, 0x9a, 0xf5, 0x43, 0x61, 0x5b, 0x4c, 0x59, 0x8d, 0xe5, 0x63, 0xe2, 0xd3, 0x20, 0xc2, 0xbd, 0x4b, 0x5e, 0xb5, 0xb7, 0x41, 0xb8, 0x71, 0x3a, 0xbb, 0x18, 0x83, 0x79, 0xdd, 0x79, 0xd8, 0x6b, 0x1, 0x2c, 0xd5, 0x54, 0xba, 0xe3, 0x4c, 0xb8, 0xe6, 0x72, 0x18, 0xfc, 0xd, 0x54, 0xb5, 0xf6, 0xdf, 0xff, 0xdc, 0xbd, 0x66, 0x73, 0xa3, 0x51, 0x20, 0x7a, 0xcd, 0xff, 0xff, 0x9e, 0x6d, 0x4b, 0xac, 0xc0, 0xf0, 0x74, 0x48, 0x76, 0xa9, 0x37, 0xf, 0x2c, 0x96, 0xe1, 0x75, 0x70, 0x7, 0x1a, 0x3, 0x52, 0x12, 0x53, 0x29, 0x5e, 0x10, 0x9e, 0x15, 0x18, 0xcc, 0xc4, 0x4d, 0x8f, 0x49, 0x55, 0x28, 0x11, 0x10, 0x19, 0x14, 0x30, 0xd, 0xee, 0x8, 0x20, 0x85, 0xaa, 0x36, 0x84, 0xd6, 0x5b, 0x20, 0x68, 0xac, 0xc9, 0xd9, 0x78, 0xe1, 0xf8, 0xa0, 0xc1, 0x8, 0xc0, 0x96, 0x32, 0xb8, 0x15, 0xc, 0x0, 0x62, 0x68, 0x90, 0x23, 0x32, 0xe8, 0x74, 0x30, 0xc8, 0x14, 0x6f, 0xa1, 0xb, 0x30, 0x5e, 0x67, 0x1f, 0x6, 0x9, 0x49, 0xc7, 0x25, 0xe5, 0xfe, 0x7a, 0xdf, 0x3, 0xe9, 0x34, 0x6c, 0x99, 0xac, 0x8b, 0x54, 0xeb, 0x9e, 0x2b, 0x88, 0xa6, 0xc6, 0x42, 0x5b, 0x33, 0xab, 0x1a, 0x24, 0x20, 0x44, 0x26, 0x83, 0x46, 0x83, 0xc3, 0x8b, 0x8d, 0x4b, 0xde, 0xb3, 0x26, 0xa2, 0x59, 0x2b, 0x1a, 0xd, 0xc5, 0xd6, 0x91, 0x3c, 0xea, 0x9f, 0xff, 0xff, 0xff, 0xfc, 0x43, 0x8e, 0xb3, 0x59, 0x26, 0x16, 0x9d, 0x56, 0x58, 0x95, 0xea, 0x4d, 0x57, 0xcc, 0xb4, 0xe2, 0x80, 0x2b, 0xc1, 0x22, 0x98, 0xa8, 0x63, 0x21, 0x16, 0x2, 0x2, 0xa1, 0x86, 0x3a, 0xc1, 0xcf, 0x28, 0xc8, 0x4c, 0x41, 0x43, 0x4, 0x88, 0xd3, 0x84, 0x46, 0x84, 0xae, 0x2, 0x8e, 0x95, 0x27, 0xbb, 0x5e, 0x65, 0xb, 0xd, 0x20, 0x11, 0x8e, 0x8f, 0x8, 0x88, 0x9b, 0xe1, 0xca, 0x96, 0xb8, 0xb9, 0x40, 0xb8, 0x5c, 0x56, 0xa2, 0x15, 0x41, 0x9e, 0xce, 0x62, 0x4b, 0x36, 0x81, 0x42, 0x8b, 0xb2, 0x2a, 0x39, 0x98, 0x2c, 0xe, 0xd0, 0x72, 0xda, 0xf2, 0x24, 0xff, 0xfb, 0x70, 0x64, 0xfa, 0x80, 0xf4, 0x6c, 0x55, 0xd1, 0xeb, 0x78, 0x49, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xa1, 0x39, 0x49, 0xed, 0x30, 0xf3, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xbe, 0x56, 0x8c, 0x49, 0x10, 0x92, 0x9, 0xba, 0x32, 0xcf, 0x3d, 0xa4, 0xb9, 0xcd, 0x2b, 0x7b, 0xe4, 0x34, 0x8e, 0x62, 0x63, 0x49, 0x8c, 0x84, 0x9e, 0x96, 0xb6, 0xfd, 0xfb, 0x63, 0x5, 0x8b, 0x0, 0xa4, 0x50, 0x4a, 0x39, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x6c, 0x69, 0x9f, 0xee, 0x64, 0xb2, 0x4b, 0xb4, 0x47, 0x7e, 0x3e, 0xac, 0x15, 0x80, 0x58, 0xcd, 0x7a, 0x96, 0x7b, 0xa5, 0xbf, 0x7e, 0x0, 0xf, 0x23, 0x2b, 0x73, 0x3a, 0xc4, 0x17, 0x9, 0xa7, 0x80, 0x66, 0x55, 0xe6, 0x64, 0x80, 0xe1, 0x43, 0x9e, 0xa, 0x8e, 0xe3, 0xa0, 0x4d, 0x64, 0x89, 0x12, 0xd7, 0x14, 0xd9, 0x41, 0x20, 0x8, 0xd4, 0xcc, 0x9b, 0xd4, 0x75, 0x7f, 0xf, 0x48, 0x4d, 0x98, 0x82, 0x5, 0x63, 0xf8, 0xd6, 0x83, 0x23, 0xe6, 0x48, 0xd9, 0xd8, 0xdf, 0xb1, 0x90, 0xc9, 0xa4, 0x27, 0x7a, 0xf0, 0x38, 0xfb, 0x65, 0x94, 0xef, 0xf8, 0xd5, 0xca, 0xdb, 0x49, 0xb2, 0x55, 0xc8, 0x5d, 0x19, 0x56, 0xc9, 0x1d, 0x22, 0x6d, 0x61, 0x51, 0x20, 0x5d, 0x3, 0x6c, 0x2b, 0x93, 0x8a, 0xab, 0xd4, 0x61, 0x32, 0x6, 0xc8, 0x91, 0x13, 0x74, 0x91, 0x17, 0xbf, 0x8d, 0x76, 0x71, 0x74, 0x46, 0x9a, 0xb8, 0xc5, 0x97, 0x7d, 0xbd, 0xdd, 0xe1, 0xef, 0xdf, 0x0, 0xd1, 0xb7, 0x33, 0xe, 0xae, 0xcf, 0xb5, 0xf8, 0x5, 0x78, 0x5b, 0x61, 0x8b, 0xb5, 0x70, 0x57, 0x47, 0x2c, 0x3, 0x39, 0x9e, 0x41, 0x5a, 0x3, 0x4a, 0x5c, 0x85, 0x54, 0x5c, 0x80, 0x52, 0x53, 0xa1, 0x44, 0x90, 0x7b, 0x1e, 0x8a, 0xc4, 0xe9, 0xca, 0xc, 0xa, 0x86, 0xc6, 0xe0, 0xc2, 0x24, 0x51, 0x11, 0x29, 0xdf, 0x4, 0x92, 0x35, 0x6d, 0x25, 0x35, 0x8d, 0x43, 0x43, 0xe3, 0xa2, 0x39, 0xea, 0xd2, 0xe0, 0xb8, 0x4, 0x6d, 0xa2, 0x64, 0x2a, 0x2c, 0xcb, 0x12, 0x94, 0x53, 0xe8, 0xa6, 0x44, 0x58, 0xe6, 0xad, 0xee, 0x93, 0xf1, 0xd9, 0x54, 0x48, 0x89, 0xd9, 0x5f, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x81, 0xf4, 0x75, 0x55, 0xd0, 0xfb, 0x49, 0x5c, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x10, 0x5d, 0x3b, 0x43, 0xed, 0x24, 0xcf, 0x28, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x29, 0xaf, 0xda, 0xa9, 0xd2, 0x4a, 0xf, 0xa, 0x95, 0x2c, 0x6f, 0x2b, 0x58, 0xc8, 0xcb, 0xb5, 0x28, 0xc4, 0xea, 0xa9, 0x47, 0x18, 0x5b, 0xef, 0x56, 0x6b, 0xdb, 0x1d, 0xcd, 0x52, 0x50, 0x26, 0xbb, 0x48, 0x75, 0x59, 0x17, 0xb6, 0x30, 0xc, 0x2c, 0x50, 0xe5, 0xc2, 0x4c, 0x20, 0xc8, 0x1c, 0x40, 0x10, 0x34, 0x81, 0x14, 0xf2, 0x2b, 0x24, 0xaa, 0xed, 0xa4, 0x12, 0x5a, 0x34, 0xab, 0x1a, 0x45, 0x35, 0x16, 0xbb, 0x10, 0xc9, 0xb1, 0x80, 0xb8, 0x94, 0x4, 0x45, 0xe4, 0xc9, 0x29, 0xc0, 0x3c, 0x4b, 0x14, 0x9a, 0x12, 0xba, 0xd9, 0x55, 0xb5, 0x9a, 0x92, 0x24, 0x4f, 0x46, 0xca, 0xab, 0x4a, 0x88, 0x81, 0xb1, 0x17, 0x61, 0x3c, 0xec, 0xdf, 0x6f, 0x72, 0x30, 0x50, 0xd0, 0x21, 0xe8, 0x63, 0x24, 0xcd, 0x9b, 0xe5, 0x90, 0x3e, 0x51, 0x36, 0x72, 0x9a, 0xe7, 0x71, 0xd0, 0x24, 0x7c, 0xb7, 0x7e, 0x5c, 0x3a, 0x34, 0x58, 0x3e, 0x44, 0x5e, 0x48, 0x6f, 0xe8, 0x20, 0x45, 0x79, 0x36, 0x66, 0x27, 0x5d, 0xae, 0x10, 0xc, 0x42, 0x86, 0x4b, 0xcc, 0x35, 0x24, 0x4a, 0x6, 0x8c, 0xc8, 0x55, 0x2d, 0x4c, 0x21, 0xc1, 0x96, 0x90, 0x2a, 0x36, 0x6, 0x89, 0x8e, 0x2a, 0x75, 0x3e, 0xca, 0x64, 0x10, 0x87, 0xc7, 0xa6, 0xc4, 0xe5, 0x8c, 0x8f, 0xb4, 0xd6, 0x79, 0x71, 0xf1, 0xfa, 0xd5, 0xab, 0x9d, 0x3a, 0x76, 0xc5, 0x92, 0xea, 0x3f, 0xfc, 0x5b, 0x4e, 0x76, 0x14, 0xf, 0xad, 0x86, 0x84, 0x66, 0x34, 0x6d, 0xdd, 0x79, 0x33, 0xb2, 0xe9, 0x4b, 0x39, 0x94, 0x86, 0x82, 0xa0, 0xcb, 0xe6, 0x9d, 0x3c, 0xda, 0xf4, 0x76, 0xdc, 0x7b, 0xa6, 0xf4, 0x83, 0xbd, 0x1e, 0x29, 0x26, 0xb5, 0x9a, 0xa6, 0x53, 0x41, 0x40, 0x68, 0x90, 0x83, 0x4d, 0xd8, 0xca, 0x58, 0x6b, 0xa6, 0xb5, 0xf5, 0xda, 0x0, 0xaa, 0x0, 0x5e, 0x6b, 0x41, 0x75, 0x82, 0x2, 0x85, 0x20, 0x32, 0xb0, 0x5a, 0xd4, 0x8b, 0xb1, 0x93, 0x97, 0xf5, 0xff, 0xfb, 0x60, 0x64, 0xf9, 0x0, 0xf3, 0xf7, 0x3f, 0x52, 0x7b, 0x2c, 0x4c, 0x28, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xf, 0x80, 0xff, 0x43, 0xec, 0x3d, 0x2c, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x38, 0x52, 0x19, 0x8b, 0x46, 0x59, 0x70, 0x7a, 0x78, 0x46, 0x3b, 0x15, 0x83, 0x12, 0xad, 0xa8, 0xca, 0xd3, 0x9b, 0xa9, 0x37, 0x2c, 0xab, 0x59, 0x48, 0xdb, 0x2a, 0xbb, 0x9, 0xcb, 0x96, 0x43, 0x5b, 0x4e, 0x4a, 0xb3, 0xa8, 0xf1, 0xec, 0x26, 0xf6, 0xa6, 0x3d, 0x48, 0x5e, 0x8f, 0xf2, 0x61, 0xaa, 0x95, 0x96, 0x58, 0xa2, 0x54, 0x9b, 0xd1, 0xc4, 0xd3, 0x10, 0x78, 0xd3, 0x22, 0xb7, 0x1e, 0xd1, 0x22, 0x41, 0x9d, 0x8f, 0x56, 0xf8, 0x25, 0x44, 0x50, 0xc6, 0xcc, 0x8b, 0xe5, 0xcb, 0x5b, 0x72, 0x48, 0xff, 0xa4, 0x1, 0xd1, 0x70, 0x0, 0xc6, 0xb, 0x1d, 0x7, 0x3, 0x85, 0xc, 0xc9, 0x4, 0x66, 0xd0, 0xa4, 0xe, 0x8e, 0x11, 0x0, 0x20, 0x48, 0xdb, 0xc1, 0x60, 0x29, 0x58, 0x8d, 0x1, 0xa0, 0xd7, 0xc9, 0x62, 0xd3, 0x21, 0x12, 0xa2, 0x82, 0x84, 0xd4, 0x78, 0xd4, 0xa1, 0x64, 0x6c, 0x89, 0xc9, 0x3, 0x1, 0x98, 0x95, 0x4f, 0x23, 0x38, 0xf1, 0x47, 0x42, 0x46, 0xa3, 0x89, 0x65, 0x73, 0x89, 0x3b, 0x5e, 0x39, 0xcf, 0xf9, 0xda, 0x73, 0xf0, 0xd3, 0x78, 0x33, 0x95, 0xa8, 0x4b, 0x7e, 0xff, 0xa3, 0xfd, 0x4f, 0xff, 0xdf, 0xff, 0x45, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xec, 0x0, 0xf3, 0x70, 0x38, 0xce, 0x7b, 0x9, 0x34, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xd, 0xd0, 0xef, 0x2f, 0xec, 0x30, 0xcf, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xee, 0x0, 0xf3, 0x41, 0x3b, 0x48, 0xe3, 0xc, 0x33, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xb, 0x88, 0xad, 0x17, 0x8c, 0x24, 0xc7, 0xc0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x10, 0x64, 0xdd, 0x8f, 0xf0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0xa4, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
// This here is basically the buffer which we want to fuzz with this program.
// static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
// asegment=timestamps="60|150"
static const char *filter_descr = "aresample=8000,ebur128=audio=1:meter=18,aformat=sample_fmts=s16:channel_layouts=mono";
static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -"; // Not needed...
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
#include <string.h>
int read_buffer(void *opaque, uint8_t *buf, int buf_size);
unsigned int data_pointer = 0; // Where we are in the input data
FILE *fp_open;
int read_buffer(void *opaque, uint8_t *buf, int buf_size){
// Read from STATIC_MP3_INPUT instead...
/*
if (data_pointer >= sizeof(STATIC_MP3_INPUT) - 1) {
// Tried to read past the file aka just return "EOF"
return AVERROR_EOF; // -1;
} else {
// Not EOF...
if (data_pointer + buf_size < sizeof(STATIC_MP3_INPUT) - 1) {
// We can read the entire buffer.
// void *memcpy(void dest[restrict .n], const void src[restrict .n],
// size_t n);
// Just memcpy that shit to the buffer.
memcpy(buf, (char*)(STATIC_MP3_INPUT + data_pointer), buf_size);
data_pointer += buf_size;
return buf_size;
} else {
// Here we just read the rest of the buffer
// The size of rest of the buffer is just sizeof(STATIC_MP3_INPUT) - data_pointer
// This makes sense because if we are at the start aka data_pointer == 0 , then it should be just the size of the buffer.
memcpy(buf, (char*)(STATIC_MP3_INPUT + data_pointer), sizeof(STATIC_MP3_INPUT) - data_pointer);
if ((int)(sizeof(STATIC_MP3_INPUT) - data_pointer) < 0) {
// We fucked something up. Just crash here.
memcpy(0x00, 0x000, 10);
printf("BULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHIT");
return 0;
}
data_pointer += (sizeof(STATIC_MP3_INPUT) - data_pointer);
return (sizeof(STATIC_MP3_INPUT) - data_pointer);
}
}
*/
printf("Trying to read from the bullshit....\n");
// if( !feof(fp_open)) {
if (!feof(fp_open)) {
printf("Returned from the eof check...");
int true_size=fread(buf,1,buf_size,fp_open);
return true_size;
} else {
printf("fffffffffffffffffffffffffff from the eof check...");
return AVERROR_EOF; // return -1; // We actually need to return AVERROR_EOF instead of -1 here I think
}
}
#include <stdio.h>
static int open_input_file(const char *filename)
{
data_pointer = 0; // Set to zero before starting to read...
const AVCodec *dec;
int ret = 0;
unsigned char buf[5529+1];
// Instead of opening a file, just open a static buffer...
// STATIC_MP3_INPUT
// This stuff is taken straight from https://github.com/leixiaohua1020/simplest_ffmpeg_mem_handler/blob/master/simplest_ffmpeg_mem_transcoder/simplest_ffmpeg_mem_transcoder.cpp
unsigned char* inbuffer=NULL;
// unsigned char* outbuffer=NULL;
fp_open = fmemopen(STATIC_MP3_INPUT, sizeof(STATIC_MP3_INPUT), "r"); // fopen("small.mp3", "rb");
//printf("Trying to do the thing...\n");
//fread(buf,1,5529,fp_open);
printf("Trying to do rerrrrrrrrrrrrrrrrthe thing...\n");
if (fp_open == NULL) {
//perror("fmemopen failed");
fprintf(stderr, "FUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKF");
return 1;
}
inbuffer = (unsigned char*)av_malloc(sizeof(STATIC_MP3_INPUT));
AVIOContext *avio_in=NULL;
// AVIOContext *avio_out=NULL;
avio_in =avio_alloc_context(inbuffer, sizeof(STATIC_MP3_INPUT),0,NULL,read_buffer,NULL,NULL);
if(avio_in==NULL){
fprintf(stderr, "dddddddddddddddddddddddFUCKFUCKFUCFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKF");
goto end;
}
//goto end;
//goto end;
//goto end;
//avio_out =avio_alloc_context(outbuffer, 32768,1,NULL,NULL,write_buffer,NULL);
//if(avio_out==NULL)
// goto end;
fmt_ctx->pb=avio_in;
fmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
printf("Calling the thing oof.\n");
if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) { // was originally: if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
goto end;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
goto end;
}
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find an audio stream in the input file\n");
goto end;
}
audio_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
goto end;
//return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[audio_stream_index]->codecpar);
/* init the audio decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
goto end;
}
printf("Succesfully went to the end of the thing function!!!\n");
end:
// Unallocate the thing and return
//av_free(avio_in);
//av_free(inbuffer);
return ret;
}
static int init_filters(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
static const int out_sample_rate = 8000;
const AVFilterLink *outlink;
AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer audio source: the decoded frames from the decoder will be inserted here. */
if (dec_ctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&dec_ctx->ch_layout, dec_ctx->ch_layout.nb_channels);
ret = snprintf(args, sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=",
time_base.num, time_base.den, dec_ctx->sample_rate,
av_get_sample_fmt_name(dec_ctx->sample_fmt));
av_channel_layout_describe(&dec_ctx->ch_layout, args + ret, sizeof(args) - ret);
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
goto end;
}
/* buffer audio sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "sample_formats", "s16",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
goto end;
}
ret = av_opt_set(buffersink_ctx, "channel_layouts", "mono",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
goto end;
}
ret = av_opt_set_array(buffersink_ctx, "samplerates", AV_OPT_SEARCH_CHILDREN,
0, 1, AV_OPT_TYPE_INT, &out_sample_rate);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize audio buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
/* Print summary of the sink buffer
* Note: args buffer is reused to store channel layout string */
outlink = buffersink_ctx->inputs[0];
av_channel_layout_describe(&outlink->ch_layout, args, sizeof(args));
av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
(int)outlink->sample_rate,
(char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
args);
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
static void print_frame(const AVFrame *frame)
{
const int n = frame->nb_samples * frame->ch_layout.nb_channels;
const uint16_t *p = (uint16_t*)frame->data[0];
const uint16_t *p_end = p + n;
while (p < p_end) {
fputc(*p & 0xff, stdout);
fputc(*p>>8 & 0xff, stdout);
p++;
}
fflush(stdout);
}
void try_fuzz_audio(char* inputfile);
void try_fuzz_audio(char* inputfile) {
int ret;
AVPacket *packet = av_packet_alloc();
AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
if (!packet || !frame || !filt_frame) {
fprintf(stderr, "Could not allocate frame or packet\n");
exit(1);
}
printf("Calling open_input_file...\n");
fmt_ctx = avformat_alloc_context();
if ((ret = open_input_file(inputfile)) < 0)
goto end;
printf("Calling init filters...\n");
if ((ret = init_filters(filter_descr)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == audio_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
fprintf(stderr, "Ok, so we afefefeffefefefefew going to the thing...\n");
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
fprintf(stderr, "Okeeeeeeeeeeeeeeeing...\n");
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
fprintf(stderr, "Ok, sffffffffffffffo the thing...\n");
goto end;
}
if (ret >= 0) {
/* push the audio data from decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
fprintf(stderr, "Ok, so we ardddddddddddddng to the thing...\n");
break;
}
/* pull filtered audio from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
fprintf(stderr, "Ok, so we gggggggggggggggggggggggg to the thing...\n");
break;
}
if (ret < 0) {
fprintf(stderr, "Ok, so we ggggggggggggggggfffffffffffffffffffffffff to the thing...\n");
goto end;
}
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
}
av_packet_unref(packet);
}
fprintf(stderr, "Ok, so we are now going to the thing...\n");
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
fprintf(stderr, "Error while closing the filtergraph...\n");
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
printf("Pulling the rest of the bullshit here...\n");
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
fprintf(stderr, "Error FUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKF closing the filtergraph...\n");
printf("FUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKF the rest of the bullshit here...\n");
break;
}
if (ret < 0) {
fprintf(stderr, "Error fffffffffffffffffffffff closing the filtergraph...\n");
goto end;
}
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
avformat_close_input(&fmt_ctx);
av_packet_free(&packet);
av_frame_free(&frame);
av_frame_free(&filt_frame);
fprintf(stderr, "Return value here: %i\n", ret);
fprintf(stderr, "AVERROR_EOF == %i\n", AVERROR_EOF);
if (ret < 0 && ret != AVERROR_EOF) {
fprintf(stderr, "CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!");
fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
exit(1);
}
exit(0);
}
int main(int argc, char **argv)
{
///unsigned char buf[5529+1];
// Instead of opening a file, just open a static buffer...
// STATIC_MP3_INPUT
// This stuff is taken straight from https://github.com/leixiaohua1020/simplest_ffmpeg_mem_handler/blob/master/simplest_ffmpeg_mem_transcoder/simplest_ffmpeg_mem_transcoder.cpp
//unsigned char* inbuffer=NULL;
// unsigned char* outbuffer=NULL;
//fp_open = fmemopen(STATIC_MP3_INPUT, sizeof(STATIC_MP3_INPUT), "r"); // fopen("small.mp3", "rb");
//printf("Trying to do the thing...\n");
//fread(buf,1,5529,fp_open);
//printf("We did the thing succesfully!!!!\n");
if (argc != 2) {
fprintf(stderr, "Usage: %s file | %s\n", argv[0], player);
exit(1);
}
try_fuzz_audio(argv[1]); // First try with the audio
return 0;
}
Now we just need to basically just write the LLVMFuzzerTestOneInput function…
After a couple of modifications I now have this:
#include <unistd.h>
/*
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavfilter/buffersink.h>
#include <libavfilter/buffersrc.h>
#include <libavutil/channel_layout.h>
#include <libavutil/mem.h>
#include <libavutil/opt.h>
*/
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
// #include <stdio.h>
#include <stdio.h>
// These are the hardcoded mp3 and mp4 files...
// #include "hardcoded_inputs.h"
#include <stdint.h>
// Hardcoded mp3 file as bytebuffer such that we do not need to reload from disk on every fuzz iteration...
volatile static uint8_t STATIC_MP3_INPUT[] = { 0xff, 0xfb, 0x90, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x69, 0x6e, 0x67, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x15, 0x99, 0x0, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x50, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x4, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x20, 0x24, 0x5, 0x47, 0x4d, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x15, 0x99, 0xf3, 0x91, 0xbd, 0x8a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfb, 0xc0, 0x64, 0x0, 0x0, 0x1, 0x4, 0x0, 0x4a, 0x6d, 0x0, 0x0, 0x8, 0x0, 0x0, 0xf, 0xf0, 0xa0, 0x0, 0x1, 0x17, 0x68, 0xfd, 0x2d, 0xb9, 0xbd, 0x80, 0x0, 0x0, 0x0, 0x3f, 0xc3, 0x0, 0x0, 0x0, 0xb6, 0xe6, 0xc0, 0x25, 0x25, 0x10, 0x60, 0x0, 0x8, 0x2, 0x0, 0x80, 0x20, 0x5c, 0xfc, 0x10, 0x70, 0x61, 0x60, 0xf9, 0xf2, 0xef, 0x44, 0xb8, 0x21, 0xca, 0x7c, 0x4e, 0x7f, 0xff, 0xc4, 0x1, 0x86, 0x44, 0x20, 0x0, 0x80, 0x20, 0x0, 0x0, 0x5a, 0xdb, 0x92, 0x8c, 0x0, 0x0, 0x5f, 0x46, 0x18, 0x2c, 0xd2, 0xc, 0x34, 0x75, 0xfe, 0x19, 0x5f, 0x32, 0x20, 0x7, 0xd8, 0x1c, 0xaa, 0x14, 0x1c, 0x34, 0x40, 0xa1, 0x19, 0x50, 0x5c, 0x1c, 0x4, 0x46, 0x14, 0x6, 0x37, 0x27, 0x20, 0x52, 0x61, 0xcd, 0xa3, 0x98, 0x30, 0x11, 0x84, 0x1, 0x1b, 0x38, 0xf8, 0x54, 0x3c, 0xf3, 0xc2, 0x58, 0x7b, 0xf0, 0xc7, 0xd7, 0x21, 0x76, 0x83, 0x80, 0x19, 0x41, 0x31, 0xfa, 0x13, 0x92, 0x81, 0xa6, 0x29, 0x9a, 0x83, 0xc0, 0xe9, 0x60, 0x32, 0x26, 0x10, 0x36, 0xdd, 0x44, 0x60, 0xcf, 0x29, 0x32, 0x20, 0x28, 0x39, 0x82, 0x47, 0x60, 0x77, 0x11, 0xfc, 0x5e, 0xaa, 0xa4, 0xb2, 0x99, 0x9d, 0x1b, 0x1f, 0x21, 0x1, 0x30, 0x50, 0x20, 0x31, 0x12, 0x0, 0x17, 0xa3, 0xaf, 0x95, 0x4a, 0x77, 0xdd, 0x2a, 0x54, 0x84, 0x37, 0x7a, 0x75, 0x60, 0x40, 0xc1, 0x70, 0xec, 0xcc, 0x5d, 0x68, 0x17, 0xa6, 0x2e, 0xd3, 0xdf, 0xbc, 0x6c, 0x7e, 0x6a, 0x6c, 0xd2, 0x13, 0xcd, 0x9b, 0xde, 0xd3, 0xf9, 0x8b, 0x21, 0x79, 0x68, 0xef, 0xf6, 0xa6, 0x7d, 0xff, 0xd7, 0x7b, 0xff, 0x8, 0x85, 0x7f, 0x6e, 0x4b, 0x2f, 0xe5, 0xc8, 0xa, 0x4d, 0x9e, 0x33, 0x6f, 0x4b, 0xd1, 0xe, 0x6d, 0xa4, 0x0, 0x42, 0x0, 0x0, 0x0, 0x0, 0x45, 0x6f, 0xc, 0x14, 0x61, 0x9, 0x4d, 0xdc, 0xb0, 0xa, 0xee, 0xa, 0x81, 0x83, 0x28, 0xc3, 0xb3, 0xc0, 0xca, 0x82, 0x21, 0x2, 0xcd, 0x98, 0x58, 0x22, 0xea, 0x36, 0x56, 0x50, 0x10, 0xda, 0xe5, 0x4, 0xb, 0x99, 0x60, 0x7a, 0x6b, 0x12, 0x1c, 0x74, 0xa6, 0xc1, 0xb1, 0xa1, 0x7f, 0x5a, 0xea, 0x32, 0x45, 0xa7, 0x79, 0x93, 0xa4, 0xb4, 0xa0, 0xbb, 0x5d, 0xf8, 0x52, 0xb3, 0xa2, 0x29, 0x9c, 0x61, 0x10, 0xf, 0x3d, 0x4c, 0xe1, 0x6e, 0x12, 0xcc, 0xe5, 0x5c, 0x61, 0xd4, 0x30, 0x4c, 0x3b, 0x11, 0x7c, 0x5f, 0x57, 0x16, 0xb3, 0xf9, 0xae, 0xe1, 0xcf, 0xd3, 0xef, 0x14, 0xa0, 0xb3, 0x6a, 0x95, 0x83, 0xd3, 0xc6, 0xa0, 0x99, 0xbe, 0x5d, 0xa7, 0xa0, 0xb9, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xca, 0xed, 0x64, 0xfa, 0x38, 0x12, 0x28, 0xae, 0x7b, 0xbd, 0x85, 0xc8, 0x84, 0x3f, 0x7e, 0x59, 0x7d, 0xb1, 0xc5, 0x93, 0x81, 0xad, 0xaf, 0xfa, 0x27, 0x8, 0x40, 0x2a, 0x45, 0x3, 0x57, 0x4c, 0xe1, 0x62, 0x18, 0xbb, 0xa6, 0x82, 0x78, 0xbe, 0xbe, 0xdd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x18, 0x5e, 0xe7, 0x6f, 0xd2, 0x5f, 0x93, 0x5d, 0xb5, 0xdd, 0x63, 0x76, 0xdd, 0x6a, 0x4b, 0x2e, 0x84, 0x8, 0xcd, 0xdd, 0x6, 0xf2, 0x96, 0x1e, 0x88, 0xde, 0x98, 0x3, 0x60, 0x7c, 0x38, 0x3, 0x20, 0x28, 0x41, 0xb0, 0x2b, 0x60, 0xce, 0x83, 0xa5, 0x92, 0x2e, 0x48, 0xb0, 0x53, 0xfa, 0x23, 0x0, 0x35, 0x8c, 0x60, 0x31, 0xd1, 0x8a, 0x4, 0x88, 0x84, 0x83, 0x80, 0x41, 0x22, 0x6b, 0x28, 0xd0, 0x94, 0x9e, 0x20, 0xa8, 0xb, 0x39, 0x1e, 0x5, 0x95, 0x38, 0x66, 0x93, 0x4b, 0xd5, 0x3a, 0xb5, 0x3b, 0xcc, 0xf5, 0xf6, 0x1a, 0x44, 0x57, 0x3f, 0xce, 0x56, 0xef, 0xf, 0x13, 0x4f, 0xff, 0x26, 0x5e, 0x13, 0x5b, 0xd8, 0xad, 0x6e, 0xe1, 0x76, 0x6a, 0xad, 0x7e, 0xe5, 0x85, 0x23, 0x8c, 0x4d, 0xc7, 0xe6, 0x1c, 0x88, 0xc7, 0xe4, 0xa9, 0x38, 0xf4, 0x55, 0xc7, 0xbf, 0xa9, 0x45, 0xeb, 0x97, 0xec, 0xcc, 0xa5, 0x5a, 0xb3, 0x63, 0x37, 0x3, 0xdd, 0xef, 0xc3, 0xbf, 0xff, 0xcc, 0x3c, 0x98, 0x48, 0x2a, 0x27, 0x2c, 0x7c, 0x77, 0x86, 0xf7, 0x90, 0x75, 0xb8, 0xb9, 0x64, 0x8, 0x50, 0x4b, 0x90, 0x17, 0x3, 0xe4, 0xe3, 0xe6, 0x83, 0xb0, 0x40, 0x13, 0x4d, 0x8d, 0x4d, 0x9, 0xda, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xaf, 0xb3, 0xf5, 0xa9, 0x33, 0x2b, 0xb3, 0x7b, 0x30, 0x48, 0x1d, 0x6, 0xaf, 0x86, 0xe, 0xf0, 0x47, 0x38, 0xe5, 0x56, 0x33, 0xfc, 0xe6, 0x7d, 0x8e, 0xb9, 0x30, 0x63, 0x6, 0x38, 0x64, 0xc, 0x2c, 0x1b, 0xc4, 0x41, 0xa2, 0x11, 0x0, 0xa8, 0xe9, 0x88, 0x8f, 0x24, 0xe8, 0xa8, 0xe0, 0x7, 0xc0, 0xe0, 0x87, 0x8a, 0x83, 0x29, 0x36, 0x61, 0x42, 0xd, 0x7d, 0x98, 0x2, 0x94, 0xc4, 0x87, 0x9, 0x45, 0x1, 0x1e, 0x84, 0xb7, 0x11, 0x6c, 0x82, 0xc1, 0x80, 0xb, 0xbd, 0x31, 0x4e, 0x9b, 0xc3, 0x2, 0x9c, 0x64, 0xcf, 0xe5, 0x4, 0xf7, 0xd8, 0x48, 0x39, 0x45, 0xe9, 0x2, 0x4a, 0xda, 0xdc, 0xf0, 0x38, 0x10, 0x50, 0x6e, 0xfe, 0x59, 0xc3, 0x15, 0x16, 0x19, 0x4b, 0x24, 0x14, 0xf1, 0xb9, 0x64, 0x0, 0x2, 0x34, 0xd, 0xbb, 0xf1, 0x2a, 0x8f, 0xc7, 0xff, 0xfb, 0x90, 0x64, 0xed, 0x80, 0xf6, 0x3d, 0x56, 0xce, 0x7f, 0x6f, 0x20, 0xa, 0x0, 0x0, 0xf, 0xf0, 0xe0, 0x0, 0x1, 0x16, 0x2d, 0x63, 0x43, 0xed, 0xe1, 0x6f, 0xe0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x4, 0x65, 0x6a, 0xf5, 0xfb, 0x81, 0x1e, 0xdc, 0xfe, 0x78, 0x2f, 0xf7, 0x16, 0x5a, 0x97, 0x91, 0x63, 0x51, 0xc6, 0xa6, 0xed, 0xff, 0xff, 0xff, 0xfd, 0xf5, 0x84, 0x81, 0x33, 0x32, 0xd4, 0xb, 0xa, 0xfc, 0xb8, 0xef, 0xf8, 0x14, 0xcb, 0xa5, 0xba, 0x42, 0xaa, 0x7c, 0xb3, 0x46, 0x10, 0x73, 0x21, 0x40, 0xad, 0x55, 0x1f, 0x7, 0x59, 0x4, 0x20, 0x84, 0xb1, 0x8b, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x96, 0x33, 0xcd, 0x6f, 0x37, 0x81, 0xfe, 0x33, 0x7e, 0xf1, 0xfc, 0x37, 0x90, 0x68, 0xc4, 0x89, 0x5c, 0x28, 0x26, 0x89, 0x45, 0x6a, 0x41, 0x4a, 0xab, 0x57, 0xb9, 0x7f, 0xef, 0x9f, 0x26, 0x6b, 0x6a, 0x42, 0x8, 0x19, 0x65, 0x9a, 0x11, 0x0, 0xb7, 0x30, 0xd0, 0xb2, 0xb0, 0x71, 0x50, 0xd0, 0x11, 0x98, 0x24, 0x2c, 0xc0, 0x40, 0xc7, 0x58, 0xe, 0x58, 0x8, 0x88, 0xf0, 0x8, 0x10, 0x20, 0x2, 0x7b, 0xf3, 0x20, 0x13, 0x22, 0x14, 0x40, 0xd3, 0x2c, 0x2, 0x16, 0xe2, 0xcc, 0x8e, 0x90, 0xc, 0xc1, 0x72, 0x5a, 0x94, 0x3b, 0xb7, 0x84, 0x47, 0x74, 0x31, 0xbb, 0xdf, 0xaa, 0xd6, 0x98, 0xe5, 0x34, 0x5, 0xc, 0xd2, 0x3d, 0xe1, 0x62, 0x3, 0x9f, 0x3f, 0xfa, 0xde, 0xe3, 0x55, 0x28, 0xa6, 0x69, 0x2a, 0x4d, 0xc, 0x60, 0xbd, 0xef, 0xc4, 0x76, 0xa6, 0xee, 0x6a, 0x19, 0xb1, 0xfb, 0x35, 0x4, 0xc3, 0xe6, 0x38, 0xe8, 0x94, 0x70, 0xa1, 0xff, 0xff, 0x5d, 0xcd, 0x20, 0x40, 0xf5, 0x3b, 0xd1, 0x92, 0x44, 0x1e, 0x88, 0xe2, 0x5b, 0x89, 0x88, 0x92, 0x1f, 0x1a, 0x1c, 0xc2, 0x29, 0x20, 0x48, 0x56, 0x3f, 0xff, 0xff, 0xb1, 0xb7, 0x77, 0x43, 0xfc, 0xc3, 0xd1, 0x4d, 0x1b, 0x8a, 0xc7, 0xe5, 0x84, 0xe3, 0xa3, 0x51, 0x91, 0xa2, 0x47, 0x2, 0x21, 0xb3, 0x7f, 0xeb, 0xaa, 0x40, 0x2, 0x3, 0x3c, 0x20, 0x0, 0x24, 0x7, 0xc0, 0xc0, 0xa0, 0x70, 0xbc, 0xc1, 0xc0, 0xa4, 0x41, 0x2, 0x1, 0x4, 0x62, 0xb1, 0x86, 0x71, 0xc0, 0x85, 0x25, 0xd0, 0x5d, 0x0, 0x25, 0x86, 0xa3, 0xc5, 0x78, 0x8f, 0xc2, 0xca, 0x10, 0xdd, 0xdc, 0x6a, 0x10, 0x5a, 0xfa, 0x6, 0x22, 0x64, 0x80, 0x3d, 0x4a, 0x7b, 0x11, 0x65, 0x49, 0xb6, 0xbb, 0xf5, 0x3f, 0x97, 0x74, 0x8b, 0xb1, 0x4a, 0x5a, 0x79, 0x99, 0x43, 0x2a, 0xb, 0x8d, 0xc, 0x5d, 0x35, 0x98, 0xc7, 0x68, 0x88, 0x48, 0x73, 0x92, 0xa5, 0x31, 0xf8, 0x10, 0xa1, 0xca, 0x5f, 0x66, 0x5a, 0x46, 0x68, 0xea, 0x76, 0x32, 0x2e, 0x8f, 0xa7, 0xe, 0xad, 0x6e, 0x3d, 0xff, 0xfe, 0x60, 0xe8, 0x97, 0xc, 0x92, 0x1f, 0x8b, 0x18, 0xff, 0x59, 0x75, 0x66, 0x37, 0x2f, 0xc, 0x0, 0x3d, 0xf, 0x54, 0xca, 0xff, 0xfb, 0x90, 0x64, 0xef, 0x80, 0xf6, 0x1e, 0x59, 0xd2, 0x7b, 0x79, 0x7b, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0xc9, 0x65, 0x53, 0xed, 0xe0, 0xed, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x96, 0x5e, 0x1d, 0xa3, 0x14, 0x97, 0x28, 0x26, 0x46, 0x3e, 0x55, 0xff, 0xff, 0xf5, 0x5f, 0xf4, 0xed, 0x65, 0x17, 0x48, 0xc5, 0x35, 0x29, 0x29, 0xe1, 0x8e, 0x60, 0x38, 0x56, 0x3b, 0x56, 0x5b, 0xff, 0xca, 0xe4, 0x28, 0x31, 0x81, 0x8c, 0x21, 0x4, 0xc6, 0x5d, 0xe2, 0x30, 0x43, 0x4, 0x51, 0x38, 0x70, 0x58, 0x5c, 0x40, 0xa2, 0x90, 0xbf, 0xa3, 0xe3, 0xc, 0x42, 0x90, 0x38, 0x28, 0x39, 0x39, 0x12, 0x2a, 0x58, 0x8, 0xb7, 0x6c, 0x1, 0xa2, 0x31, 0x7a, 0x7a, 0xf5, 0x92, 0x59, 0x97, 0xc0, 0x8a, 0xa4, 0xa4, 0x2f, 0xca, 0x22, 0x59, 0x56, 0xe6, 0x79, 0xed, 0x9f, 0xaf, 0x5c, 0x2f, 0x54, 0xa3, 0xc1, 0x90, 0x2a, 0xdb, 0x59, 0x65, 0xfb, 0xa9, 0xc8, 0xbb, 0xa1, 0x17, 0xa8, 0xcb, 0xc0, 0xa4, 0xa3, 0xee, 0x59, 0xbf, 0xfc, 0x3e, 0xf2, 0x2, 0x65, 0x89, 0xd8, 0x66, 0x27, 0x54, 0x61, 0xff, 0xff, 0x7e, 0xfb, 0xa6, 0xa3, 0x49, 0x41, 0x77, 0x5e, 0x25, 0x3f, 0xff, 0x9a, 0xfe, 0xf, 0x5d, 0x19, 0xc0, 0x11, 0xcc, 0x49, 0x60, 0x80, 0x1f, 0x84, 0xe1, 0x41, 0xa1, 0x21, 0xb1, 0x16, 0xff, 0xff, 0xd1, 0xff, 0xea, 0x7f, 0x71, 0xb0, 0xa8, 0xa3, 0xa2, 0x4d, 0x2a, 0x60, 0xd0, 0x1, 0xcb, 0x30, 0x20, 0x2, 0x5, 0x32, 0x2, 0x40, 0x1b, 0xc5, 0x80, 0x26, 0x1, 0x9, 0x97, 0x10, 0xc0, 0xe1, 0x18, 0x70, 0x64, 0x16, 0x30, 0x6e, 0x38, 0xc8, 0x60, 0x30, 0x3e, 0xd1, 0x50, 0xe2, 0xc7, 0xbf, 0xc3, 0x83, 0x4d, 0x6d, 0x85, 0x36, 0xaf, 0x5e, 0x1b, 0x81, 0xa2, 0xa1, 0x3b, 0x26, 0x8a, 0xe7, 0x3a, 0xb7, 0x58, 0xd4, 0xca, 0x71, 0x96, 0x4f, 0x98, 0x6e, 0xc6, 0xf8, 0xfc, 0x8, 0xe0, 0xff, 0x50, 0xda, 0x3d, 0xac, 0xac, 0xcd, 0x19, 0x61, 0x21, 0xed, 0x67, 0x1a, 0x82, 0x2d, 0xad, 0x3, 0x54, 0xc5, 0x77, 0xff, 0x99, 0x47, 0xe3, 0x5d, 0xad, 0x8d, 0x57, 0x27, 0x81, 0xb6, 0xfd, 0xaf, 0x43, 0x8c, 0x3c, 0xf1, 0xe9, 0x88, 0x9d, 0x7, 0xc5, 0xd3, 0xc5, 0x24, 0xc4, 0x61, 0x24, 0xd, 0x38, 0x3, 0xc1, 0x42, 0x87, 0x94, 0x7, 0x31, 0xa8, 0x22, 0x51, 0xbf, 0xff, 0xff, 0xfe, 0x79, 0xe6, 0x65, 0x23, 0x8e, 0x25, 0xb8, 0x78, 0xac, 0xd2, 0x5, 0x81, 0xca, 0x13, 0x7, 0x32, 0xf7, 0xa, 0x2, 0x40, 0x0, 0x86, 0x40, 0x4d, 0x83, 0xfb, 0x6c, 0x16, 0x11, 0x31, 0x91, 0x77, 0xd5, 0x60, 0x8c, 0x88, 0x40, 0xc1, 0x28, 0x8e, 0x6c, 0xc, 0x20, 0x19, 0xb, 0xcb, 0xc2, 0x5d, 0xc7, 0x71, 0x27, 0xb, 0x96, 0xad, 0xc1, 0x1, 0xd, 0x6d, 0x88, 0x4c, 0x39, 0x3f, 0x3e, 0xd0, 0xa0, 0x36, 0xdd, 0x60, 0x8a, 0x6f, 0xc9, 0x21, 0x5e, 0x68, 0x2e, 0xff, 0xfb, 0x70, 0x64, 0xfd, 0x0, 0xf4, 0xf9, 0x59, 0xd2, 0xfb, 0x99, 0x6a, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xd5, 0x5d, 0x51, 0xed, 0x24, 0xfa, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x51, 0xcf, 0x9f, 0xd0, 0x9, 0x1d, 0x46, 0xb0, 0xe9, 0x73, 0x15, 0xa7, 0x42, 0xd1, 0x21, 0x68, 0x7a, 0xd8, 0x93, 0xab, 0x2e, 0xdd, 0x3a, 0xf9, 0xb3, 0x97, 0x1e, 0x9b, 0x5c, 0xb6, 0xa2, 0x79, 0x61, 0x3c, 0x7d, 0x78, 0xca, 0x7f, 0xe2, 0x58, 0x8a, 0x28, 0x61, 0x43, 0x2, 0xa2, 0xea, 0x84, 0x5f, 0xf3, 0xb9, 0xbc, 0xc, 0x98, 0xe, 0x84, 0x82, 0x21, 0x4d, 0x3, 0xc7, 0x9a, 0x78, 0x12, 0x61, 0x19, 0x63, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xfe, 0xd, 0xff, 0x57, 0x15, 0xf1, 0xbd, 0x8b, 0x8, 0x46, 0x10, 0x49, 0x6a, 0xd8, 0xb8, 0x44, 0xc7, 0x42, 0xa7, 0x0, 0x2, 0x0, 0x2, 0x20, 0x4, 0x44, 0x1f, 0xf0, 0x30, 0x74, 0xa3, 0x38, 0xa, 0x32, 0x31, 0x64, 0xda, 0x30, 0x23, 0x3, 0xc4, 0xe, 0x33, 0x80, 0x43, 0x23, 0x2d, 0x28, 0xf, 0x8, 0x4, 0x7c, 0x17, 0x7b, 0xac, 0x18, 0x18, 0x30, 0x4, 0x9, 0x9, 0x4b, 0x0, 0x4, 0x64, 0x6c, 0x4d, 0x2c, 0xb8, 0x32, 0x4d, 0xd2, 0xe5, 0x88, 0x74, 0xa2, 0xe1, 0xd3, 0x23, 0x2, 0x36, 0xfd, 0x8a, 0x95, 0x64, 0xc4, 0x35, 0x26, 0x9c, 0x1c, 0x71, 0x4d, 0x41, 0x6c, 0x33, 0x48, 0xc1, 0xfa, 0x34, 0xb9, 0xc0, 0x82, 0xc3, 0xcf, 0xf0, 0x87, 0x86, 0x74, 0xad, 0x12, 0x89, 0x8f, 0x90, 0x59, 0xc0, 0xfa, 0x24, 0xff, 0xff, 0xfd, 0xb5, 0x33, 0xf6, 0xd2, 0x71, 0xd4, 0x18, 0x47, 0x3d, 0x6a, 0xe7, 0x3d, 0x97, 0xb4, 0xd, 0xdd, 0x8a, 0x9d, 0xd4, 0xed, 0x68, 0x9e, 0xd, 0x36, 0x2e, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x63, 0x94, 0x72, 0x9, 0x53, 0xe3, 0x37, 0xea, 0x2f, 0xd1, 0xef, 0xe8, 0x9c, 0xb2, 0xe9, 0x5d, 0x37, 0xd, 0xe6, 0xcc, 0xd6, 0x60, 0x4, 0x0, 0x4, 0x0, 0x40, 0x2, 0xf7, 0xf4, 0x94, 0x20, 0xc, 0x2f, 0x29, 0xb, 0x14, 0x18, 0x79, 0x98, 0x10, 0x50, 0xe8, 0x1, 0x8c, 0xd4, 0x48, 0x90, 0x15, 0x1f, 0xd0, 0xa9, 0xff, 0xfb, 0x70, 0x64, 0xf0, 0x80, 0xf4, 0x8b, 0x59, 0x53, 0x7b, 0x8f, 0x3b, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0x89, 0x65, 0x51, 0xed, 0xb1, 0x13, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x4c, 0x31, 0x21, 0x26, 0x5, 0x2, 0x87, 0xa, 0xa3, 0x1, 0x3f, 0x24, 0x5, 0xbd, 0xf3, 0x7c, 0x54, 0xb5, 0x9b, 0x9c, 0x1e, 0xca, 0xfa, 0xc7, 0x65, 0x19, 0x5a, 0xdb, 0x89, 0x73, 0x2, 0xbd, 0xaa, 0x1, 0x7f, 0x52, 0xc5, 0xba, 0xd5, 0x29, 0x67, 0x8f, 0xa5, 0xb, 0xf2, 0xe8, 0xca, 0x7d, 0xc5, 0x75, 0x16, 0x5a, 0xc3, 0x9d, 0xc7, 0x16, 0xb8, 0x33, 0xa9, 0x4d, 0xb, 0x98, 0x13, 0x27, 0xd, 0x5a, 0xbc, 0x3e, 0xf8, 0x64, 0x9, 0xfc, 0x3a, 0xe8, 0xb1, 0x35, 0x84, 0x66, 0xe3, 0x88, 0x49, 0x5a, 0x72, 0x71, 0x6c, 0x7d, 0x13, 0x1, 0x60, 0xb9, 0x2b, 0x72, 0x4d, 0xa2, 0x22, 0xd2, 0x72, 0x82, 0x62, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x3f, 0x1d, 0x86, 0x4e, 0x37, 0xd, 0xe9, 0xeb, 0x98, 0x6c, 0xa2, 0x22, 0x38, 0xce, 0x12, 0x64, 0x89, 0x13, 0x4c, 0x14, 0x15, 0x3e, 0xb0, 0x0, 0xc0, 0x5, 0x10, 0x0, 0x0, 0x3e, 0x5f, 0x33, 0xe, 0x4c, 0x2e, 0x20, 0xc2, 0xb, 0x6, 0xd2, 0x37, 0xbd, 0xf, 0xb4, 0x43, 0xc3, 0x60, 0xa0, 0x78, 0xc0, 0x31, 0x8, 0xc4, 0xea, 0x6b, 0xd4, 0xe2, 0x13, 0x86, 0x45, 0x38, 0x58, 0x1, 0x90, 0xe, 0x92, 0x4d, 0x21, 0x7b, 0x45, 0xe5, 0x91, 0x28, 0x16, 0x5a, 0x38, 0xfa, 0xf5, 0xeb, 0xd9, 0xf8, 0xc7, 0x97, 0xd0, 0xcf, 0x44, 0xc7, 0x1, 0xa9, 0xc, 0xe4, 0xbc, 0xd, 0x89, 0x8b, 0xa9, 0x8d, 0x7b, 0x42, 0x51, 0x70, 0x8, 0x8e, 0x96, 0x89, 0xc9, 0xda, 0xd3, 0xfa, 0xdf, 0x3f, 0x77, 0x29, 0xd1, 0xa6, 0x44, 0x7b, 0x56, 0xba, 0x62, 0x9d, 0xd8, 0xbd, 0xcb, 0xdb, 0xe3, 0x5e, 0x6b, 0x11, 0xda, 0xd3, 0xf3, 0x56, 0x8a, 0x4d, 0x1e, 0x38, 0x5f, 0x7b, 0x96, 0xaf, 0x4a, 0xc2, 0x99, 0x11, 0x80, 0x7, 0x5f, 0x7a, 0xa3, 0x84, 0xc5, 0x63, 0x88, 0x22, 0x85, 0x8b, 0xff, 0xff, 0xd2, 0xb7, 0x31, 0x99, 0x26, 0x4f, 0x56, 0xda, 0xe4, 0xc5, 0x88, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x0, 0xf4, 0xdd, 0x59, 0xd3, 0xfb, 0x6f, 0x4b, 0xd8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x14, 0x5, 0x65, 0x4d, 0xad, 0xbd, 0x2f, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xa6, 0x29, 0xa5, 0x47, 0x47, 0x86, 0x5, 0xa2, 0x51, 0x6f, 0xff, 0xa2, 0xd0, 0x4, 0x20, 0xa8, 0x0, 0x64, 0x3, 0x79, 0x8e, 0x44, 0x8f, 0x80, 0xd1, 0xa8, 0x1c, 0x16, 0x1c, 0x6b, 0xec, 0x9d, 0xa3, 0x26, 0x88, 0x28, 0x38, 0x73, 0x6c, 0xd3, 0x87, 0x41, 0x45, 0x16, 0xf2, 0xd1, 0xb, 0x3, 0x47, 0xb6, 0xb2, 0xdd, 0x9e, 0x99, 0x36, 0x56, 0x9d, 0xa9, 0x4d, 0x20, 0xf2, 0x55, 0x6c, 0xa6, 0xd5, 0xe0, 0x1e, 0x56, 0xc0, 0x49, 0x76, 0x35, 0x29, 0x4f, 0x79, 0x86, 0xcd, 0xcf, 0x9d, 0x63, 0x25, 0x31, 0xd3, 0x68, 0x42, 0x9, 0x28, 0xcd, 0xd8, 0x5e, 0xaa, 0xe8, 0xa2, 0x66, 0xfd, 0x95, 0xa3, 0xae, 0x1f, 0x9a, 0x1d, 0xa0, 0xbb, 0xe, 0x2d, 0xac, 0xec, 0xce, 0x64, 0x15, 0xa9, 0xc2, 0x1d, 0xa6, 0xb0, 0xac, 0x2, 0x8d, 0x2f, 0x61, 0x4a, 0xeb, 0x2f, 0xf8, 0x6b, 0x76, 0xef, 0x72, 0x48, 0xf4, 0xaa, 0x65, 0xa2, 0x65, 0x46, 0x1, 0xf0, 0x51, 0x8, 0xff, 0xff, 0xeb, 0xe5, 0x8, 0x92, 0x76, 0x38, 0xb9, 0x37, 0xe5, 0x2a, 0x60, 0x8c, 0x34, 0xd2, 0xa8, 0x2f, 0x59, 0x8f, 0xfe, 0xe, 0x29, 0xf5, 0xd4, 0x0, 0xc0, 0x26, 0x0, 0x20, 0x0, 0xce, 0x65, 0x22, 0xe3, 0x4, 0xa6, 0x42, 0x26, 0x16, 0x1d, 0x5, 0x23, 0x9a, 0x24, 0x68, 0x5, 0x14, 0xc4, 0xc7, 0xc, 0x38, 0xd, 0xd6, 0x52, 0xd, 0x81, 0x95, 0xa8, 0x23, 0x36, 0x12, 0x17, 0x7d, 0x5b, 0xb3, 0x20, 0xab, 0x5e, 0x43, 0x72, 0x6a, 0x7a, 0x6c, 0x7c, 0x2c, 0x18, 0xb0, 0xc3, 0xfe, 0xc9, 0xbb, 0x66, 0x9, 0xc9, 0xee, 0x15, 0xf9, 0x98, 0xeb, 0x89, 0x56, 0xbb, 0x9f, 0xbe, 0x88, 0x73, 0x2d, 0xe, 0xa5, 0xa8, 0xac, 0x87, 0x1d, 0xae, 0xc3, 0x36, 0x9f, 0xe5, 0xb8, 0xdb, 0xa2, 0xf3, 0x28, 0x79, 0xe9, 0xb7, 0xcf, 0x35, 0x2d, 0xc2, 0xbf, 0x56, 0xf6, 0xc3, 0x76, 0xcf, 0xbd, 0x54, 0xb6, 0x9a, 0x8e, 0xc2, 0x72, 0xdb, 0x54, 0xe5, 0x3a, 0xb4, 0xdc, 0xa4, 0xa9, 0xa7, 0xde, 0xf, 0x88, 0x5, 0x87, 0x46, 0x4, 0x44, 0x7, 0x7f, 0xff, 0xee, 0xcf, 0x28, 0xd0, 0xd, 0x8, 0x46, 0x24, 0xf9, 0x5c, 0x41, 0xc5, 0x8a, 0xac, 0xe7, 0x17, 0x65, 0x11, 0x15, 0x3d, 0xff, 0xc1, 0x40, 0x12, 0x80, 0x36, 0x1, 0x4c, 0x22, 0xc8, 0x3, 0xf1, 0xd2, 0xea, 0xe4, 0xcc, 0xff, 0xfb, 0x80, 0x64, 0xee, 0x80, 0xf4, 0xfe, 0x59, 0xd2, 0xeb, 0x4c, 0x3c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0xd5, 0x5d, 0x4f, 0xad, 0x30, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x86, 0x30, 0x23, 0xc7, 0x6d, 0x9c, 0xfd, 0x40, 0xab, 0x63, 0xcc, 0xca, 0x2, 0x8, 0x0, 0x3, 0x83, 0xa0, 0x36, 0x58, 0xc2, 0x94, 0x10, 0xc, 0x91, 0xaf, 0x36, 0x0, 0x1b, 0xae, 0x3a, 0x59, 0x20, 0x28, 0x32, 0x97, 0x74, 0xfe, 0x88, 0x67, 0x88, 0xfe, 0xa9, 0x40, 0xb2, 0xf2, 0xe1, 0x39, 0xe7, 0xe, 0x6a, 0x5a, 0x7a, 0x2b, 0x3b, 0x17, 0xb6, 0x5e, 0x24, 0x8, 0x2d, 0xad, 0x58, 0xb6, 0xdf, 0xd9, 0xee, 0xcc, 0xa1, 0xba, 0xd2, 0x66, 0x5e, 0x6b, 0xcc, 0xaa, 0xbd, 0xa8, 0xaf, 0x55, 0xb4, 0xd6, 0x96, 0xcb, 0xee, 0xf9, 0x93, 0xac, 0x68, 0xee, 0x0, 0xe5, 0x1c, 0x3b, 0x8f, 0xb2, 0x11, 0x53, 0x65, 0xc8, 0xf6, 0x79, 0xf6, 0xe7, 0x1b, 0x26, 0xaf, 0x35, 0x37, 0xff, 0xff, 0xff, 0xff, 0xb9, 0xca, 0x1e, 0x4c, 0xad, 0x32, 0x21, 0xf5, 0xa8, 0xe1, 0xeb, 0x79, 0xe2, 0xaf, 0x25, 0x15, 0x49, 0xd3, 0x14, 0x51, 0xa5, 0x8e, 0x58, 0x98, 0xdf, 0xff, 0xbc, 0xca, 0xb8, 0x16, 0xd1, 0xa4, 0x80, 0x51, 0x20, 0x6e, 0xd8, 0x4c, 0xeb, 0x36, 0x58, 0x2e, 0x31, 0xc8, 0x73, 0x43, 0x2f, 0x5, 0x8, 0xa2, 0xd1, 0x31, 0x60, 0x34, 0x20, 0xbb, 0xe9, 0xe2, 0xd6, 0x19, 0xe0, 0x8, 0xe8, 0x38, 0x51, 0xc5, 0x77, 0x16, 0x64, 0x8, 0xd6, 0xa0, 0x55, 0xc6, 0x86, 0x85, 0xd6, 0xdd, 0x82, 0x6a, 0xd, 0x82, 0x13, 0x62, 0x58, 0xb4, 0xc, 0x3e, 0xfb, 0x78, 0x1b, 0x3, 0x21, 0x6d, 0x8d, 0xa1, 0x5b, 0x48, 0xb5, 0x1c, 0x19, 0xcf, 0xe6, 0x85, 0x79, 0xe6, 0x4b, 0x10, 0x1a, 0x26, 0x18, 0xd, 0x91, 0xb1, 0x5, 0x3b, 0xfb, 0x53, 0xee, 0x13, 0xa9, 0x52, 0x59, 0x56, 0xa5, 0x88, 0xd1, 0x99, 0x13, 0x82, 0x1, 0x42, 0x33, 0x66, 0x99, 0x5a, 0x6d, 0x51, 0x84, 0xa6, 0xab, 0x47, 0x5b, 0xb6, 0xe4, 0x98, 0x16, 0xc3, 0x51, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbd, 0x73, 0x2f, 0x68, 0x48, 0x80, 0x51, 0x5, 0x61, 0x17, 0x2c, 0x93, 0xad, 0x41, 0x53, 0x6a, 0x43, 0x53, 0xd2, 0x1, 0x23, 0x48, 0x5a, 0x53, 0x7f, 0xfc, 0x2e, 0xb2, 0x8, 0x82, 0x60, 0x86, 0x8c, 0xa8, 0x49, 0x7f, 0x85, 0x89, 0xc6, 0x81, 0x45, 0xc, 0x72, 0x11, 0x5e, 0x20, 0x90, 0x5, 0xf5, 0x1, 0x11, 0x1e, 0x2, 0xf8, 0x31, 0xee, 0xd4, 0x6a, 0x48, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x80, 0xf4, 0xcd, 0x58, 0x53, 0x6b, 0x6c, 0x2c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0x21, 0x5d, 0x4d, 0xad, 0x31, 0x6f, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xdc, 0x3c, 0x16, 0xf5, 0xa7, 0x96, 0xc4, 0x83, 0xb6, 0x1f, 0xea, 0x68, 0x93, 0xa0, 0x4b, 0xc5, 0x20, 0xda, 0x82, 0xa6, 0x9e, 0x3c, 0x46, 0xaf, 0x8c, 0xeb, 0x17, 0x99, 0xd1, 0x40, 0x15, 0x3a, 0xe9, 0xc6, 0xcc, 0x9, 0x71, 0xb6, 0xf7, 0x17, 0x92, 0xd2, 0xcf, 0x9d, 0xf9, 0x19, 0x91, 0x11, 0xa1, 0x67, 0xe6, 0xee, 0xe6, 0x4e, 0x4b, 0x1b, 0xdf, 0x2b, 0xdd, 0x38, 0xad, 0x92, 0xaa, 0xa8, 0xb1, 0xbf, 0xb5, 0x14, 0xa7, 0x19, 0x72, 0x29, 0x2d, 0x5b, 0x5c, 0x4a, 0x2, 0x40, 0xe8, 0x90, 0xac, 0x81, 0xe6, 0x7f, 0xfb, 0x7c, 0xd2, 0xab, 0x2e, 0x6a, 0x18, 0x41, 0xdd, 0x67, 0xe5, 0x23, 0xab, 0x20, 0x5, 0x1e, 0x1a, 0x22, 0xff, 0xff, 0x33, 0xf0, 0x15, 0x40, 0xad, 0x2, 0x91, 0x21, 0x74, 0x5, 0x17, 0x1a, 0x2, 0x2e, 0x41, 0x86, 0x92, 0x88, 0xb7, 0x42, 0x4, 0xc9, 0x88, 0xcc, 0x5a, 0x0, 0x50, 0x2, 0x6e, 0x51, 0x5c, 0x9a, 0xd8, 0x35, 0x69, 0x9b, 0x4d, 0x84, 0x89, 0x77, 0xc6, 0xa1, 0xd2, 0x43, 0x61, 0xba, 0x69, 0x96, 0x91, 0x11, 0x2e, 0x1b, 0x10, 0xac, 0x96, 0xb6, 0xb, 0x8a, 0x9b, 0x74, 0x8e, 0x2e, 0xb9, 0x79, 0x1, 0x4d, 0xdc, 0x90, 0xb9, 0x52, 0x59, 0x37, 0x27, 0x66, 0x7a, 0x56, 0xbf, 0x8f, 0x9a, 0x38, 0xc9, 0xca, 0x9, 0x53, 0xab, 0xac, 0xa8, 0xea, 0x1b, 0x88, 0x68, 0xb2, 0xcb, 0xc6, 0x15, 0x3c, 0x40, 0x4a, 0x4c, 0x8, 0xb2, 0x58, 0xcc, 0x23, 0x13, 0xd9, 0x55, 0xd5, 0xd9, 0xda, 0x59, 0xc3, 0xe6, 0xca, 0x5b, 0x68, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x49, 0xa9, 0x23, 0x44, 0xd0, 0x65, 0x54, 0x26, 0x93, 0xde, 0x6d, 0x84, 0xbd, 0xad, 0xd8, 0xab, 0xa9, 0x26, 0xb7, 0x20, 0x76, 0xb1, 0x96, 0x35, 0x4d, 0x54, 0xca, 0xf0, 0xc6, 0x1b, 0x63, 0xcd, 0xc4, 0xaa, 0x58, 0xed, 0x4a, 0x1e, 0x34, 0x6d, 0x12, 0x2d, 0xe0, 0xb0, 0xd1, 0xa8, 0xcb, 0xa, 0x65, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x80, 0xf4, 0xdf, 0x59, 0x52, 0xeb, 0x1b, 0x48, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0x21, 0x49, 0x4f, 0xed, 0x24, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x8c, 0x47, 0xc1, 0xa3, 0x54, 0x81, 0x90, 0x6, 0xc0, 0xb, 0x40, 0x91, 0x52, 0xe8, 0xed, 0x2d, 0xd8, 0x6a, 0x2, 0x9e, 0x5d, 0x47, 0xcc, 0xd, 0x60, 0x35, 0x1d, 0x9f, 0xb1, 0x7c, 0xb8, 0x6e, 0x79, 0x68, 0xea, 0x9a, 0xf5, 0x43, 0x61, 0x5b, 0x4c, 0x59, 0x8d, 0xe5, 0x63, 0xe2, 0xd3, 0x20, 0xc2, 0xbd, 0x4b, 0x5e, 0xb5, 0xb7, 0x41, 0xb8, 0x71, 0x3a, 0xbb, 0x18, 0x83, 0x79, 0xdd, 0x79, 0xd8, 0x6b, 0x1, 0x2c, 0xd5, 0x54, 0xba, 0xe3, 0x4c, 0xb8, 0xe6, 0x72, 0x18, 0xfc, 0xd, 0x54, 0xb5, 0xf6, 0xdf, 0xff, 0xdc, 0xbd, 0x66, 0x73, 0xa3, 0x51, 0x20, 0x7a, 0xcd, 0xff, 0xff, 0x9e, 0x6d, 0x4b, 0xac, 0xc0, 0xf0, 0x74, 0x48, 0x76, 0xa9, 0x37, 0xf, 0x2c, 0x96, 0xe1, 0x75, 0x70, 0x7, 0x1a, 0x3, 0x52, 0x12, 0x53, 0x29, 0x5e, 0x10, 0x9e, 0x15, 0x18, 0xcc, 0xc4, 0x4d, 0x8f, 0x49, 0x55, 0x28, 0x11, 0x10, 0x19, 0x14, 0x30, 0xd, 0xee, 0x8, 0x20, 0x85, 0xaa, 0x36, 0x84, 0xd6, 0x5b, 0x20, 0x68, 0xac, 0xc9, 0xd9, 0x78, 0xe1, 0xf8, 0xa0, 0xc1, 0x8, 0xc0, 0x96, 0x32, 0xb8, 0x15, 0xc, 0x0, 0x62, 0x68, 0x90, 0x23, 0x32, 0xe8, 0x74, 0x30, 0xc8, 0x14, 0x6f, 0xa1, 0xb, 0x30, 0x5e, 0x67, 0x1f, 0x6, 0x9, 0x49, 0xc7, 0x25, 0xe5, 0xfe, 0x7a, 0xdf, 0x3, 0xe9, 0x34, 0x6c, 0x99, 0xac, 0x8b, 0x54, 0xeb, 0x9e, 0x2b, 0x88, 0xa6, 0xc6, 0x42, 0x5b, 0x33, 0xab, 0x1a, 0x24, 0x20, 0x44, 0x26, 0x83, 0x46, 0x83, 0xc3, 0x8b, 0x8d, 0x4b, 0xde, 0xb3, 0x26, 0xa2, 0x59, 0x2b, 0x1a, 0xd, 0xc5, 0xd6, 0x91, 0x3c, 0xea, 0x9f, 0xff, 0xff, 0xff, 0xfc, 0x43, 0x8e, 0xb3, 0x59, 0x26, 0x16, 0x9d, 0x56, 0x58, 0x95, 0xea, 0x4d, 0x57, 0xcc, 0xb4, 0xe2, 0x80, 0x2b, 0xc1, 0x22, 0x98, 0xa8, 0x63, 0x21, 0x16, 0x2, 0x2, 0xa1, 0x86, 0x3a, 0xc1, 0xcf, 0x28, 0xc8, 0x4c, 0x41, 0x43, 0x4, 0x88, 0xd3, 0x84, 0x46, 0x84, 0xae, 0x2, 0x8e, 0x95, 0x27, 0xbb, 0x5e, 0x65, 0xb, 0xd, 0x20, 0x11, 0x8e, 0x8f, 0x8, 0x88, 0x9b, 0xe1, 0xca, 0x96, 0xb8, 0xb9, 0x40, 0xb8, 0x5c, 0x56, 0xa2, 0x15, 0x41, 0x9e, 0xce, 0x62, 0x4b, 0x36, 0x81, 0x42, 0x8b, 0xb2, 0x2a, 0x39, 0x98, 0x2c, 0xe, 0xd0, 0x72, 0xda, 0xf2, 0x24, 0xff, 0xfb, 0x70, 0x64, 0xfa, 0x80, 0xf4, 0x6c, 0x55, 0xd1, 0xeb, 0x78, 0x49, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xa1, 0x39, 0x49, 0xed, 0x30, 0xf3, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xbe, 0x56, 0x8c, 0x49, 0x10, 0x92, 0x9, 0xba, 0x32, 0xcf, 0x3d, 0xa4, 0xb9, 0xcd, 0x2b, 0x7b, 0xe4, 0x34, 0x8e, 0x62, 0x63, 0x49, 0x8c, 0x84, 0x9e, 0x96, 0xb6, 0xfd, 0xfb, 0x63, 0x5, 0x8b, 0x0, 0xa4, 0x50, 0x4a, 0x39, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x6c, 0x69, 0x9f, 0xee, 0x64, 0xb2, 0x4b, 0xb4, 0x47, 0x7e, 0x3e, 0xac, 0x15, 0x80, 0x58, 0xcd, 0x7a, 0x96, 0x7b, 0xa5, 0xbf, 0x7e, 0x0, 0xf, 0x23, 0x2b, 0x73, 0x3a, 0xc4, 0x17, 0x9, 0xa7, 0x80, 0x66, 0x55, 0xe6, 0x64, 0x80, 0xe1, 0x43, 0x9e, 0xa, 0x8e, 0xe3, 0xa0, 0x4d, 0x64, 0x89, 0x12, 0xd7, 0x14, 0xd9, 0x41, 0x20, 0x8, 0xd4, 0xcc, 0x9b, 0xd4, 0x75, 0x7f, 0xf, 0x48, 0x4d, 0x98, 0x82, 0x5, 0x63, 0xf8, 0xd6, 0x83, 0x23, 0xe6, 0x48, 0xd9, 0xd8, 0xdf, 0xb1, 0x90, 0xc9, 0xa4, 0x27, 0x7a, 0xf0, 0x38, 0xfb, 0x65, 0x94, 0xef, 0xf8, 0xd5, 0xca, 0xdb, 0x49, 0xb2, 0x55, 0xc8, 0x5d, 0x19, 0x56, 0xc9, 0x1d, 0x22, 0x6d, 0x61, 0x51, 0x20, 0x5d, 0x3, 0x6c, 0x2b, 0x93, 0x8a, 0xab, 0xd4, 0x61, 0x32, 0x6, 0xc8, 0x91, 0x13, 0x74, 0x91, 0x17, 0xbf, 0x8d, 0x76, 0x71, 0x74, 0x46, 0x9a, 0xb8, 0xc5, 0x97, 0x7d, 0xbd, 0xdd, 0xe1, 0xef, 0xdf, 0x0, 0xd1, 0xb7, 0x33, 0xe, 0xae, 0xcf, 0xb5, 0xf8, 0x5, 0x78, 0x5b, 0x61, 0x8b, 0xb5, 0x70, 0x57, 0x47, 0x2c, 0x3, 0x39, 0x9e, 0x41, 0x5a, 0x3, 0x4a, 0x5c, 0x85, 0x54, 0x5c, 0x80, 0x52, 0x53, 0xa1, 0x44, 0x90, 0x7b, 0x1e, 0x8a, 0xc4, 0xe9, 0xca, 0xc, 0xa, 0x86, 0xc6, 0xe0, 0xc2, 0x24, 0x51, 0x11, 0x29, 0xdf, 0x4, 0x92, 0x35, 0x6d, 0x25, 0x35, 0x8d, 0x43, 0x43, 0xe3, 0xa2, 0x39, 0xea, 0xd2, 0xe0, 0xb8, 0x4, 0x6d, 0xa2, 0x64, 0x2a, 0x2c, 0xcb, 0x12, 0x94, 0x53, 0xe8, 0xa6, 0x44, 0x58, 0xe6, 0xad, 0xee, 0x93, 0xf1, 0xd9, 0x54, 0x48, 0x89, 0xd9, 0x5f, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x81, 0xf4, 0x75, 0x55, 0xd0, 0xfb, 0x49, 0x5c, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x10, 0x5d, 0x3b, 0x43, 0xed, 0x24, 0xcf, 0x28, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x29, 0xaf, 0xda, 0xa9, 0xd2, 0x4a, 0xf, 0xa, 0x95, 0x2c, 0x6f, 0x2b, 0x58, 0xc8, 0xcb, 0xb5, 0x28, 0xc4, 0xea, 0xa9, 0x47, 0x18, 0x5b, 0xef, 0x56, 0x6b, 0xdb, 0x1d, 0xcd, 0x52, 0x50, 0x26, 0xbb, 0x48, 0x75, 0x59, 0x17, 0xb6, 0x30, 0xc, 0x2c, 0x50, 0xe5, 0xc2, 0x4c, 0x20, 0xc8, 0x1c, 0x40, 0x10, 0x34, 0x81, 0x14, 0xf2, 0x2b, 0x24, 0xaa, 0xed, 0xa4, 0x12, 0x5a, 0x34, 0xab, 0x1a, 0x45, 0x35, 0x16, 0xbb, 0x10, 0xc9, 0xb1, 0x80, 0xb8, 0x94, 0x4, 0x45, 0xe4, 0xc9, 0x29, 0xc0, 0x3c, 0x4b, 0x14, 0x9a, 0x12, 0xba, 0xd9, 0x55, 0xb5, 0x9a, 0x92, 0x24, 0x4f, 0x46, 0xca, 0xab, 0x4a, 0x88, 0x81, 0xb1, 0x17, 0x61, 0x3c, 0xec, 0xdf, 0x6f, 0x72, 0x30, 0x50, 0xd0, 0x21, 0xe8, 0x63, 0x24, 0xcd, 0x9b, 0xe5, 0x90, 0x3e, 0x51, 0x36, 0x72, 0x9a, 0xe7, 0x71, 0xd0, 0x24, 0x7c, 0xb7, 0x7e, 0x5c, 0x3a, 0x34, 0x58, 0x3e, 0x44, 0x5e, 0x48, 0x6f, 0xe8, 0x20, 0x45, 0x79, 0x36, 0x66, 0x27, 0x5d, 0xae, 0x10, 0xc, 0x42, 0x86, 0x4b, 0xcc, 0x35, 0x24, 0x4a, 0x6, 0x8c, 0xc8, 0x55, 0x2d, 0x4c, 0x21, 0xc1, 0x96, 0x90, 0x2a, 0x36, 0x6, 0x89, 0x8e, 0x2a, 0x75, 0x3e, 0xca, 0x64, 0x10, 0x87, 0xc7, 0xa6, 0xc4, 0xe5, 0x8c, 0x8f, 0xb4, 0xd6, 0x79, 0x71, 0xf1, 0xfa, 0xd5, 0xab, 0x9d, 0x3a, 0x76, 0xc5, 0x92, 0xea, 0x3f, 0xfc, 0x5b, 0x4e, 0x76, 0x14, 0xf, 0xad, 0x86, 0x84, 0x66, 0x34, 0x6d, 0xdd, 0x79, 0x33, 0xb2, 0xe9, 0x4b, 0x39, 0x94, 0x86, 0x82, 0xa0, 0xcb, 0xe6, 0x9d, 0x3c, 0xda, 0xf4, 0x76, 0xdc, 0x7b, 0xa6, 0xf4, 0x83, 0xbd, 0x1e, 0x29, 0x26, 0xb5, 0x9a, 0xa6, 0x53, 0x41, 0x40, 0x68, 0x90, 0x83, 0x4d, 0xd8, 0xca, 0x58, 0x6b, 0xa6, 0xb5, 0xf5, 0xda, 0x0, 0xaa, 0x0, 0x5e, 0x6b, 0x41, 0x75, 0x82, 0x2, 0x85, 0x20, 0x32, 0xb0, 0x5a, 0xd4, 0x8b, 0xb1, 0x93, 0x97, 0xf5, 0xff, 0xfb, 0x60, 0x64, 0xf9, 0x0, 0xf3, 0xf7, 0x3f, 0x52, 0x7b, 0x2c, 0x4c, 0x28, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xf, 0x80, 0xff, 0x43, 0xec, 0x3d, 0x2c, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x38, 0x52, 0x19, 0x8b, 0x46, 0x59, 0x70, 0x7a, 0x78, 0x46, 0x3b, 0x15, 0x83, 0x12, 0xad, 0xa8, 0xca, 0xd3, 0x9b, 0xa9, 0x37, 0x2c, 0xab, 0x59, 0x48, 0xdb, 0x2a, 0xbb, 0x9, 0xcb, 0x96, 0x43, 0x5b, 0x4e, 0x4a, 0xb3, 0xa8, 0xf1, 0xec, 0x26, 0xf6, 0xa6, 0x3d, 0x48, 0x5e, 0x8f, 0xf2, 0x61, 0xaa, 0x95, 0x96, 0x58, 0xa2, 0x54, 0x9b, 0xd1, 0xc4, 0xd3, 0x10, 0x78, 0xd3, 0x22, 0xb7, 0x1e, 0xd1, 0x22, 0x41, 0x9d, 0x8f, 0x56, 0xf8, 0x25, 0x44, 0x50, 0xc6, 0xcc, 0x8b, 0xe5, 0xcb, 0x5b, 0x72, 0x48, 0xff, 0xa4, 0x1, 0xd1, 0x70, 0x0, 0xc6, 0xb, 0x1d, 0x7, 0x3, 0x85, 0xc, 0xc9, 0x4, 0x66, 0xd0, 0xa4, 0xe, 0x8e, 0x11, 0x0, 0x20, 0x48, 0xdb, 0xc1, 0x60, 0x29, 0x58, 0x8d, 0x1, 0xa0, 0xd7, 0xc9, 0x62, 0xd3, 0x21, 0x12, 0xa2, 0x82, 0x84, 0xd4, 0x78, 0xd4, 0xa1, 0x64, 0x6c, 0x89, 0xc9, 0x3, 0x1, 0x98, 0x95, 0x4f, 0x23, 0x38, 0xf1, 0x47, 0x42, 0x46, 0xa3, 0x89, 0x65, 0x73, 0x89, 0x3b, 0x5e, 0x39, 0xcf, 0xf9, 0xda, 0x73, 0xf0, 0xd3, 0x78, 0x33, 0x95, 0xa8, 0x4b, 0x7e, 0xff, 0xa3, 0xfd, 0x4f, 0xff, 0xdf, 0xff, 0x45, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xec, 0x0, 0xf3, 0x70, 0x38, 0xce, 0x7b, 0x9, 0x34, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xd, 0xd0, 0xef, 0x2f, 0xec, 0x30, 0xcf, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xee, 0x0, 0xf3, 0x41, 0x3b, 0x48, 0xe3, 0xc, 0x33, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xb, 0x88, 0xad, 0x17, 0x8c, 0x24, 0xc7, 0xc0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x10, 0x64, 0xdd, 0x8f, 0xf0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0xa4, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
// This here is basically the buffer which we want to fuzz with this program.
// static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
// asegment=timestamps="60|150"
static const char *filter_descr = "aresample=8000,ebur128=audio=1:meter=18,aformat=sample_fmts=s16:channel_layouts=mono";
static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -"; // Not needed...
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
#include <string.h>
int read_buffer(void *opaque, uint8_t *buf, int buf_size);
unsigned int data_pointer = 0; // Where we are in the input data
FILE *fp_open;
int read_buffer(void *opaque, uint8_t *buf, int buf_size){
// Read from STATIC_MP3_INPUT instead...
/*
if (data_pointer >= sizeof(STATIC_MP3_INPUT) - 1) {
// Tried to read past the file aka just return "EOF"
return AVERROR_EOF; // -1;
} else {
// Not EOF...
if (data_pointer + buf_size < sizeof(STATIC_MP3_INPUT) - 1) {
// We can read the entire buffer.
// void *memcpy(void dest[restrict .n], const void src[restrict .n],
// size_t n);
// Just memcpy that shit to the buffer.
memcpy(buf, (char*)(STATIC_MP3_INPUT + data_pointer), buf_size);
data_pointer += buf_size;
return buf_size;
} else {
// Here we just read the rest of the buffer
// The size of rest of the buffer is just sizeof(STATIC_MP3_INPUT) - data_pointer
// This makes sense because if we are at the start aka data_pointer == 0 , then it should be just the size of the buffer.
memcpy(buf, (char*)(STATIC_MP3_INPUT + data_pointer), sizeof(STATIC_MP3_INPUT) - data_pointer);
if ((int)(sizeof(STATIC_MP3_INPUT) - data_pointer) < 0) {
// We fucked something up. Just crash here.
memcpy(0x00, 0x000, 10);
printf("BULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHITBULLSHIT");
return 0;
}
data_pointer += (sizeof(STATIC_MP3_INPUT) - data_pointer);
return (sizeof(STATIC_MP3_INPUT) - data_pointer);
}
}
*/
printf("Trying to read from the bullshit....\n");
// if( !feof(fp_open)) {
if (!feof(fp_open)) {
printf("Returned from the eof check...");
int true_size=fread(buf,1,buf_size,fp_open);
return true_size;
} else {
printf("fffffffffffffffffffffffffff from the eof check...");
return AVERROR_EOF; // return -1; // We actually need to return AVERROR_EOF instead of -1 here I think
}
}
#include <stdio.h>
static int open_input_file(const char *filename)
{
data_pointer = 0; // Set to zero before starting to read...
const AVCodec *dec;
int ret = 0;
unsigned char buf[5529+1];
// Instead of opening a file, just open a static buffer...
// STATIC_MP3_INPUT
// This stuff is taken straight from https://github.com/leixiaohua1020/simplest_ffmpeg_mem_handler/blob/master/simplest_ffmpeg_mem_transcoder/simplest_ffmpeg_mem_transcoder.cpp
unsigned char* inbuffer=NULL;
// unsigned char* outbuffer=NULL;
fp_open = fmemopen(STATIC_MP3_INPUT, sizeof(STATIC_MP3_INPUT), "r"); // fopen("small.mp3", "rb");
//printf("Trying to do the thing...\n");
//fread(buf,1,5529,fp_open);
printf("Trying to do rerrrrrrrrrrrrrrrrthe thing...\n");
if (fp_open == NULL) {
//perror("fmemopen failed");
fprintf(stderr, "FUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKF");
goto end;
//return 1;
}
inbuffer = (unsigned char*)av_malloc(sizeof(STATIC_MP3_INPUT));
AVIOContext *avio_in=NULL;
// AVIOContext *avio_out=NULL;
avio_in =avio_alloc_context(inbuffer, sizeof(STATIC_MP3_INPUT),0,NULL,read_buffer,NULL,NULL);
if(avio_in==NULL){
fprintf(stderr, "dddddddddddddddddddddddFUCKFUCKFUCFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKF");
goto end;
}
//goto end;
//goto end;
//goto end;
//avio_out =avio_alloc_context(outbuffer, 32768,1,NULL,NULL,write_buffer,NULL);
//if(avio_out==NULL)
// goto end;
fmt_ctx->pb=avio_in;
fmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
printf("Calling the thing oof.\n");
if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) { // was originally: if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
goto end;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
goto end;
}
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find an audio stream in the input file\n");
goto end;
}
audio_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
goto end;
//return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[audio_stream_index]->codecpar);
/* init the audio decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
goto end;
}
printf("Succesfully went to the end of the thing function!!!\n");
end:
// Unallocate the thing and return
if (avio_in) {
av_free(avio_in);
}
if (inbuffer) {
av_free(inbuffer);
}
//av_free(inbuffer);
return ret;
}
static int init_filters(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
static const int out_sample_rate = 8000;
const AVFilterLink *outlink;
AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer audio source: the decoded frames from the decoder will be inserted here. */
if (dec_ctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&dec_ctx->ch_layout, dec_ctx->ch_layout.nb_channels);
ret = snprintf(args, sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=",
time_base.num, time_base.den, dec_ctx->sample_rate,
av_get_sample_fmt_name(dec_ctx->sample_fmt));
av_channel_layout_describe(&dec_ctx->ch_layout, args + ret, sizeof(args) - ret);
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
goto end;
}
/* buffer audio sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "sample_formats", "s16",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
goto end;
}
ret = av_opt_set(buffersink_ctx, "channel_layouts", "mono",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
goto end;
}
ret = av_opt_set_array(buffersink_ctx, "samplerates", AV_OPT_SEARCH_CHILDREN,
0, 1, AV_OPT_TYPE_INT, &out_sample_rate);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize audio buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
/* Print summary of the sink buffer
* Note: args buffer is reused to store channel layout string */
outlink = buffersink_ctx->inputs[0];
av_channel_layout_describe(&outlink->ch_layout, args, sizeof(args));
av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
(int)outlink->sample_rate,
(char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
args);
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
static void print_frame(const AVFrame *frame)
{
const int n = frame->nb_samples * frame->ch_layout.nb_channels;
const uint16_t *p = (uint16_t*)frame->data[0];
const uint16_t *p_end = p + n;
while (p < p_end) {
fputc(*p & 0xff, stdout);
fputc(*p>>8 & 0xff, stdout);
p++;
}
fflush(stdout);
}
void try_fuzz_audio(char* inputfile);
void try_fuzz_audio(char* inputfile) {
int ret;
AVPacket *packet = av_packet_alloc();
AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
if (!packet || !frame || !filt_frame) {
fprintf(stderr, "Could not allocate frame or packet\n");
exit(1);
}
printf("Calling open_input_file...\n");
fmt_ctx = avformat_alloc_context();
if ((ret = open_input_file(inputfile)) < 0)
goto end;
printf("Calling init filters...\n");
if ((ret = init_filters(filter_descr)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == audio_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
fprintf(stderr, "Ok, so we afefefeffefefefefew going to the thing...\n");
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
fprintf(stderr, "Okeeeeeeeeeeeeeeeing...\n");
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
fprintf(stderr, "Ok, sffffffffffffffo the thing...\n");
goto end;
}
if (ret >= 0) {
/* push the audio data from decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
fprintf(stderr, "Ok, so we ardddddddddddddng to the thing...\n");
break;
}
/* pull filtered audio from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
fprintf(stderr, "Ok, so we gggggggggggggggggggggggg to the thing...\n");
break;
}
if (ret < 0) {
fprintf(stderr, "Ok, so we ggggggggggggggggfffffffffffffffffffffffff to the thing...\n");
goto end;
}
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
}
av_packet_unref(packet);
}
fprintf(stderr, "Ok, so we are now going to the thing...\n");
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
fprintf(stderr, "Error while closing the filtergraph...\n");
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
printf("Pulling the rest of the bullshit here...\n");
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
fprintf(stderr, "Error FUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKF closing the filtergraph...\n");
printf("FUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKFFUCKFUCKFUCKFUCKF the rest of the bullshit here...\n");
break;
}
if (ret < 0) {
fprintf(stderr, "Error fffffffffffffffffffffff closing the filtergraph...\n");
goto end;
}
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
avformat_close_input(&fmt_ctx);
av_packet_free(&packet);
av_frame_free(&frame);
av_frame_free(&filt_frame);
fprintf(stderr, "Return value here: %i\n", ret);
fprintf(stderr, "AVERROR_EOF == %i\n", AVERROR_EOF);
if (ret < 0 && ret != AVERROR_EOF) {
fprintf(stderr, "CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!CUCKOLD!!!!");
fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
exit(1);
}
exit(0);
}
int main(int argc, char **argv)
{
///unsigned char buf[5529+1];
// Instead of opening a file, just open a static buffer...
// STATIC_MP3_INPUT
// This stuff is taken straight from https://github.com/leixiaohua1020/simplest_ffmpeg_mem_handler/blob/master/simplest_ffmpeg_mem_transcoder/simplest_ffmpeg_mem_transcoder.cpp
//unsigned char* inbuffer=NULL;
// unsigned char* outbuffer=NULL;
//fp_open = fmemopen(STATIC_MP3_INPUT, sizeof(STATIC_MP3_INPUT), "r"); // fopen("small.mp3", "rb");
//printf("Trying to do the thing...\n");
//fread(buf,1,5529,fp_open);
//printf("We did the thing succesfully!!!!\n");
if (argc != 2) {
fprintf(stderr, "Usage: %s file | %s\n", argv[0], player);
exit(1);
}
try_fuzz_audio(argv[1]); // First try with the audio
return 0;
}
Here is the minimized file:
#include <unistd.h>
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include <stdio.h>
#include <stdint.h>
// Hardcoded mp3 file as bytebuffer such that we do not need to reload from disk on every fuzz iteration...
volatile static uint8_t STATIC_MP3_INPUT[] = { 0xff, 0xfb, 0x90, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x69, 0x6e, 0x67, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x15, 0x99, 0x0, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x50, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x4, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x20, 0x24, 0x5, 0x47, 0x4d, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x15, 0x99, 0xf3, 0x91, 0xbd, 0x8a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfb, 0xc0, 0x64, 0x0, 0x0, 0x1, 0x4, 0x0, 0x4a, 0x6d, 0x0, 0x0, 0x8, 0x0, 0x0, 0xf, 0xf0, 0xa0, 0x0, 0x1, 0x17, 0x68, 0xfd, 0x2d, 0xb9, 0xbd, 0x80, 0x0, 0x0, 0x0, 0x3f, 0xc3, 0x0, 0x0, 0x0, 0xb6, 0xe6, 0xc0, 0x25, 0x25, 0x10, 0x60, 0x0, 0x8, 0x2, 0x0, 0x80, 0x20, 0x5c, 0xfc, 0x10, 0x70, 0x61, 0x60, 0xf9, 0xf2, 0xef, 0x44, 0xb8, 0x21, 0xca, 0x7c, 0x4e, 0x7f, 0xff, 0xc4, 0x1, 0x86, 0x44, 0x20, 0x0, 0x80, 0x20, 0x0, 0x0, 0x5a, 0xdb, 0x92, 0x8c, 0x0, 0x0, 0x5f, 0x46, 0x18, 0x2c, 0xd2, 0xc, 0x34, 0x75, 0xfe, 0x19, 0x5f, 0x32, 0x20, 0x7, 0xd8, 0x1c, 0xaa, 0x14, 0x1c, 0x34, 0x40, 0xa1, 0x19, 0x50, 0x5c, 0x1c, 0x4, 0x46, 0x14, 0x6, 0x37, 0x27, 0x20, 0x52, 0x61, 0xcd, 0xa3, 0x98, 0x30, 0x11, 0x84, 0x1, 0x1b, 0x38, 0xf8, 0x54, 0x3c, 0xf3, 0xc2, 0x58, 0x7b, 0xf0, 0xc7, 0xd7, 0x21, 0x76, 0x83, 0x80, 0x19, 0x41, 0x31, 0xfa, 0x13, 0x92, 0x81, 0xa6, 0x29, 0x9a, 0x83, 0xc0, 0xe9, 0x60, 0x32, 0x26, 0x10, 0x36, 0xdd, 0x44, 0x60, 0xcf, 0x29, 0x32, 0x20, 0x28, 0x39, 0x82, 0x47, 0x60, 0x77, 0x11, 0xfc, 0x5e, 0xaa, 0xa4, 0xb2, 0x99, 0x9d, 0x1b, 0x1f, 0x21, 0x1, 0x30, 0x50, 0x20, 0x31, 0x12, 0x0, 0x17, 0xa3, 0xaf, 0x95, 0x4a, 0x77, 0xdd, 0x2a, 0x54, 0x84, 0x37, 0x7a, 0x75, 0x60, 0x40, 0xc1, 0x70, 0xec, 0xcc, 0x5d, 0x68, 0x17, 0xa6, 0x2e, 0xd3, 0xdf, 0xbc, 0x6c, 0x7e, 0x6a, 0x6c, 0xd2, 0x13, 0xcd, 0x9b, 0xde, 0xd3, 0xf9, 0x8b, 0x21, 0x79, 0x68, 0xef, 0xf6, 0xa6, 0x7d, 0xff, 0xd7, 0x7b, 0xff, 0x8, 0x85, 0x7f, 0x6e, 0x4b, 0x2f, 0xe5, 0xc8, 0xa, 0x4d, 0x9e, 0x33, 0x6f, 0x4b, 0xd1, 0xe, 0x6d, 0xa4, 0x0, 0x42, 0x0, 0x0, 0x0, 0x0, 0x45, 0x6f, 0xc, 0x14, 0x61, 0x9, 0x4d, 0xdc, 0xb0, 0xa, 0xee, 0xa, 0x81, 0x83, 0x28, 0xc3, 0xb3, 0xc0, 0xca, 0x82, 0x21, 0x2, 0xcd, 0x98, 0x58, 0x22, 0xea, 0x36, 0x56, 0x50, 0x10, 0xda, 0xe5, 0x4, 0xb, 0x99, 0x60, 0x7a, 0x6b, 0x12, 0x1c, 0x74, 0xa6, 0xc1, 0xb1, 0xa1, 0x7f, 0x5a, 0xea, 0x32, 0x45, 0xa7, 0x79, 0x93, 0xa4, 0xb4, 0xa0, 0xbb, 0x5d, 0xf8, 0x52, 0xb3, 0xa2, 0x29, 0x9c, 0x61, 0x10, 0xf, 0x3d, 0x4c, 0xe1, 0x6e, 0x12, 0xcc, 0xe5, 0x5c, 0x61, 0xd4, 0x30, 0x4c, 0x3b, 0x11, 0x7c, 0x5f, 0x57, 0x16, 0xb3, 0xf9, 0xae, 0xe1, 0xcf, 0xd3, 0xef, 0x14, 0xa0, 0xb3, 0x6a, 0x95, 0x83, 0xd3, 0xc6, 0xa0, 0x99, 0xbe, 0x5d, 0xa7, 0xa0, 0xb9, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xca, 0xed, 0x64, 0xfa, 0x38, 0x12, 0x28, 0xae, 0x7b, 0xbd, 0x85, 0xc8, 0x84, 0x3f, 0x7e, 0x59, 0x7d, 0xb1, 0xc5, 0x93, 0x81, 0xad, 0xaf, 0xfa, 0x27, 0x8, 0x40, 0x2a, 0x45, 0x3, 0x57, 0x4c, 0xe1, 0x62, 0x18, 0xbb, 0xa6, 0x82, 0x78, 0xbe, 0xbe, 0xdd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x18, 0x5e, 0xe7, 0x6f, 0xd2, 0x5f, 0x93, 0x5d, 0xb5, 0xdd, 0x63, 0x76, 0xdd, 0x6a, 0x4b, 0x2e, 0x84, 0x8, 0xcd, 0xdd, 0x6, 0xf2, 0x96, 0x1e, 0x88, 0xde, 0x98, 0x3, 0x60, 0x7c, 0x38, 0x3, 0x20, 0x28, 0x41, 0xb0, 0x2b, 0x60, 0xce, 0x83, 0xa5, 0x92, 0x2e, 0x48, 0xb0, 0x53, 0xfa, 0x23, 0x0, 0x35, 0x8c, 0x60, 0x31, 0xd1, 0x8a, 0x4, 0x88, 0x84, 0x83, 0x80, 0x41, 0x22, 0x6b, 0x28, 0xd0, 0x94, 0x9e, 0x20, 0xa8, 0xb, 0x39, 0x1e, 0x5, 0x95, 0x38, 0x66, 0x93, 0x4b, 0xd5, 0x3a, 0xb5, 0x3b, 0xcc, 0xf5, 0xf6, 0x1a, 0x44, 0x57, 0x3f, 0xce, 0x56, 0xef, 0xf, 0x13, 0x4f, 0xff, 0x26, 0x5e, 0x13, 0x5b, 0xd8, 0xad, 0x6e, 0xe1, 0x76, 0x6a, 0xad, 0x7e, 0xe5, 0x85, 0x23, 0x8c, 0x4d, 0xc7, 0xe6, 0x1c, 0x88, 0xc7, 0xe4, 0xa9, 0x38, 0xf4, 0x55, 0xc7, 0xbf, 0xa9, 0x45, 0xeb, 0x97, 0xec, 0xcc, 0xa5, 0x5a, 0xb3, 0x63, 0x37, 0x3, 0xdd, 0xef, 0xc3, 0xbf, 0xff, 0xcc, 0x3c, 0x98, 0x48, 0x2a, 0x27, 0x2c, 0x7c, 0x77, 0x86, 0xf7, 0x90, 0x75, 0xb8, 0xb9, 0x64, 0x8, 0x50, 0x4b, 0x90, 0x17, 0x3, 0xe4, 0xe3, 0xe6, 0x83, 0xb0, 0x40, 0x13, 0x4d, 0x8d, 0x4d, 0x9, 0xda, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xaf, 0xb3, 0xf5, 0xa9, 0x33, 0x2b, 0xb3, 0x7b, 0x30, 0x48, 0x1d, 0x6, 0xaf, 0x86, 0xe, 0xf0, 0x47, 0x38, 0xe5, 0x56, 0x33, 0xfc, 0xe6, 0x7d, 0x8e, 0xb9, 0x30, 0x63, 0x6, 0x38, 0x64, 0xc, 0x2c, 0x1b, 0xc4, 0x41, 0xa2, 0x11, 0x0, 0xa8, 0xe9, 0x88, 0x8f, 0x24, 0xe8, 0xa8, 0xe0, 0x7, 0xc0, 0xe0, 0x87, 0x8a, 0x83, 0x29, 0x36, 0x61, 0x42, 0xd, 0x7d, 0x98, 0x2, 0x94, 0xc4, 0x87, 0x9, 0x45, 0x1, 0x1e, 0x84, 0xb7, 0x11, 0x6c, 0x82, 0xc1, 0x80, 0xb, 0xbd, 0x31, 0x4e, 0x9b, 0xc3, 0x2, 0x9c, 0x64, 0xcf, 0xe5, 0x4, 0xf7, 0xd8, 0x48, 0x39, 0x45, 0xe9, 0x2, 0x4a, 0xda, 0xdc, 0xf0, 0x38, 0x10, 0x50, 0x6e, 0xfe, 0x59, 0xc3, 0x15, 0x16, 0x19, 0x4b, 0x24, 0x14, 0xf1, 0xb9, 0x64, 0x0, 0x2, 0x34, 0xd, 0xbb, 0xf1, 0x2a, 0x8f, 0xc7, 0xff, 0xfb, 0x90, 0x64, 0xed, 0x80, 0xf6, 0x3d, 0x56, 0xce, 0x7f, 0x6f, 0x20, 0xa, 0x0, 0x0, 0xf, 0xf0, 0xe0, 0x0, 0x1, 0x16, 0x2d, 0x63, 0x43, 0xed, 0xe1, 0x6f, 0xe0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x4, 0x65, 0x6a, 0xf5, 0xfb, 0x81, 0x1e, 0xdc, 0xfe, 0x78, 0x2f, 0xf7, 0x16, 0x5a, 0x97, 0x91, 0x63, 0x51, 0xc6, 0xa6, 0xed, 0xff, 0xff, 0xff, 0xfd, 0xf5, 0x84, 0x81, 0x33, 0x32, 0xd4, 0xb, 0xa, 0xfc, 0xb8, 0xef, 0xf8, 0x14, 0xcb, 0xa5, 0xba, 0x42, 0xaa, 0x7c, 0xb3, 0x46, 0x10, 0x73, 0x21, 0x40, 0xad, 0x55, 0x1f, 0x7, 0x59, 0x4, 0x20, 0x84, 0xb1, 0x8b, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x96, 0x33, 0xcd, 0x6f, 0x37, 0x81, 0xfe, 0x33, 0x7e, 0xf1, 0xfc, 0x37, 0x90, 0x68, 0xc4, 0x89, 0x5c, 0x28, 0x26, 0x89, 0x45, 0x6a, 0x41, 0x4a, 0xab, 0x57, 0xb9, 0x7f, 0xef, 0x9f, 0x26, 0x6b, 0x6a, 0x42, 0x8, 0x19, 0x65, 0x9a, 0x11, 0x0, 0xb7, 0x30, 0xd0, 0xb2, 0xb0, 0x71, 0x50, 0xd0, 0x11, 0x98, 0x24, 0x2c, 0xc0, 0x40, 0xc7, 0x58, 0xe, 0x58, 0x8, 0x88, 0xf0, 0x8, 0x10, 0x20, 0x2, 0x7b, 0xf3, 0x20, 0x13, 0x22, 0x14, 0x40, 0xd3, 0x2c, 0x2, 0x16, 0xe2, 0xcc, 0x8e, 0x90, 0xc, 0xc1, 0x72, 0x5a, 0x94, 0x3b, 0xb7, 0x84, 0x47, 0x74, 0x31, 0xbb, 0xdf, 0xaa, 0xd6, 0x98, 0xe5, 0x34, 0x5, 0xc, 0xd2, 0x3d, 0xe1, 0x62, 0x3, 0x9f, 0x3f, 0xfa, 0xde, 0xe3, 0x55, 0x28, 0xa6, 0x69, 0x2a, 0x4d, 0xc, 0x60, 0xbd, 0xef, 0xc4, 0x76, 0xa6, 0xee, 0x6a, 0x19, 0xb1, 0xfb, 0x35, 0x4, 0xc3, 0xe6, 0x38, 0xe8, 0x94, 0x70, 0xa1, 0xff, 0xff, 0x5d, 0xcd, 0x20, 0x40, 0xf5, 0x3b, 0xd1, 0x92, 0x44, 0x1e, 0x88, 0xe2, 0x5b, 0x89, 0x88, 0x92, 0x1f, 0x1a, 0x1c, 0xc2, 0x29, 0x20, 0x48, 0x56, 0x3f, 0xff, 0xff, 0xb1, 0xb7, 0x77, 0x43, 0xfc, 0xc3, 0xd1, 0x4d, 0x1b, 0x8a, 0xc7, 0xe5, 0x84, 0xe3, 0xa3, 0x51, 0x91, 0xa2, 0x47, 0x2, 0x21, 0xb3, 0x7f, 0xeb, 0xaa, 0x40, 0x2, 0x3, 0x3c, 0x20, 0x0, 0x24, 0x7, 0xc0, 0xc0, 0xa0, 0x70, 0xbc, 0xc1, 0xc0, 0xa4, 0x41, 0x2, 0x1, 0x4, 0x62, 0xb1, 0x86, 0x71, 0xc0, 0x85, 0x25, 0xd0, 0x5d, 0x0, 0x25, 0x86, 0xa3, 0xc5, 0x78, 0x8f, 0xc2, 0xca, 0x10, 0xdd, 0xdc, 0x6a, 0x10, 0x5a, 0xfa, 0x6, 0x22, 0x64, 0x80, 0x3d, 0x4a, 0x7b, 0x11, 0x65, 0x49, 0xb6, 0xbb, 0xf5, 0x3f, 0x97, 0x74, 0x8b, 0xb1, 0x4a, 0x5a, 0x79, 0x99, 0x43, 0x2a, 0xb, 0x8d, 0xc, 0x5d, 0x35, 0x98, 0xc7, 0x68, 0x88, 0x48, 0x73, 0x92, 0xa5, 0x31, 0xf8, 0x10, 0xa1, 0xca, 0x5f, 0x66, 0x5a, 0x46, 0x68, 0xea, 0x76, 0x32, 0x2e, 0x8f, 0xa7, 0xe, 0xad, 0x6e, 0x3d, 0xff, 0xfe, 0x60, 0xe8, 0x97, 0xc, 0x92, 0x1f, 0x8b, 0x18, 0xff, 0x59, 0x75, 0x66, 0x37, 0x2f, 0xc, 0x0, 0x3d, 0xf, 0x54, 0xca, 0xff, 0xfb, 0x90, 0x64, 0xef, 0x80, 0xf6, 0x1e, 0x59, 0xd2, 0x7b, 0x79, 0x7b, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0xc9, 0x65, 0x53, 0xed, 0xe0, 0xed, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x96, 0x5e, 0x1d, 0xa3, 0x14, 0x97, 0x28, 0x26, 0x46, 0x3e, 0x55, 0xff, 0xff, 0xf5, 0x5f, 0xf4, 0xed, 0x65, 0x17, 0x48, 0xc5, 0x35, 0x29, 0x29, 0xe1, 0x8e, 0x60, 0x38, 0x56, 0x3b, 0x56, 0x5b, 0xff, 0xca, 0xe4, 0x28, 0x31, 0x81, 0x8c, 0x21, 0x4, 0xc6, 0x5d, 0xe2, 0x30, 0x43, 0x4, 0x51, 0x38, 0x70, 0x58, 0x5c, 0x40, 0xa2, 0x90, 0xbf, 0xa3, 0xe3, 0xc, 0x42, 0x90, 0x38, 0x28, 0x39, 0x39, 0x12, 0x2a, 0x58, 0x8, 0xb7, 0x6c, 0x1, 0xa2, 0x31, 0x7a, 0x7a, 0xf5, 0x92, 0x59, 0x97, 0xc0, 0x8a, 0xa4, 0xa4, 0x2f, 0xca, 0x22, 0x59, 0x56, 0xe6, 0x79, 0xed, 0x9f, 0xaf, 0x5c, 0x2f, 0x54, 0xa3, 0xc1, 0x90, 0x2a, 0xdb, 0x59, 0x65, 0xfb, 0xa9, 0xc8, 0xbb, 0xa1, 0x17, 0xa8, 0xcb, 0xc0, 0xa4, 0xa3, 0xee, 0x59, 0xbf, 0xfc, 0x3e, 0xf2, 0x2, 0x65, 0x89, 0xd8, 0x66, 0x27, 0x54, 0x61, 0xff, 0xff, 0x7e, 0xfb, 0xa6, 0xa3, 0x49, 0x41, 0x77, 0x5e, 0x25, 0x3f, 0xff, 0x9a, 0xfe, 0xf, 0x5d, 0x19, 0xc0, 0x11, 0xcc, 0x49, 0x60, 0x80, 0x1f, 0x84, 0xe1, 0x41, 0xa1, 0x21, 0xb1, 0x16, 0xff, 0xff, 0xd1, 0xff, 0xea, 0x7f, 0x71, 0xb0, 0xa8, 0xa3, 0xa2, 0x4d, 0x2a, 0x60, 0xd0, 0x1, 0xcb, 0x30, 0x20, 0x2, 0x5, 0x32, 0x2, 0x40, 0x1b, 0xc5, 0x80, 0x26, 0x1, 0x9, 0x97, 0x10, 0xc0, 0xe1, 0x18, 0x70, 0x64, 0x16, 0x30, 0x6e, 0x38, 0xc8, 0x60, 0x30, 0x3e, 0xd1, 0x50, 0xe2, 0xc7, 0xbf, 0xc3, 0x83, 0x4d, 0x6d, 0x85, 0x36, 0xaf, 0x5e, 0x1b, 0x81, 0xa2, 0xa1, 0x3b, 0x26, 0x8a, 0xe7, 0x3a, 0xb7, 0x58, 0xd4, 0xca, 0x71, 0x96, 0x4f, 0x98, 0x6e, 0xc6, 0xf8, 0xfc, 0x8, 0xe0, 0xff, 0x50, 0xda, 0x3d, 0xac, 0xac, 0xcd, 0x19, 0x61, 0x21, 0xed, 0x67, 0x1a, 0x82, 0x2d, 0xad, 0x3, 0x54, 0xc5, 0x77, 0xff, 0x99, 0x47, 0xe3, 0x5d, 0xad, 0x8d, 0x57, 0x27, 0x81, 0xb6, 0xfd, 0xaf, 0x43, 0x8c, 0x3c, 0xf1, 0xe9, 0x88, 0x9d, 0x7, 0xc5, 0xd3, 0xc5, 0x24, 0xc4, 0x61, 0x24, 0xd, 0x38, 0x3, 0xc1, 0x42, 0x87, 0x94, 0x7, 0x31, 0xa8, 0x22, 0x51, 0xbf, 0xff, 0xff, 0xfe, 0x79, 0xe6, 0x65, 0x23, 0x8e, 0x25, 0xb8, 0x78, 0xac, 0xd2, 0x5, 0x81, 0xca, 0x13, 0x7, 0x32, 0xf7, 0xa, 0x2, 0x40, 0x0, 0x86, 0x40, 0x4d, 0x83, 0xfb, 0x6c, 0x16, 0x11, 0x31, 0x91, 0x77, 0xd5, 0x60, 0x8c, 0x88, 0x40, 0xc1, 0x28, 0x8e, 0x6c, 0xc, 0x20, 0x19, 0xb, 0xcb, 0xc2, 0x5d, 0xc7, 0x71, 0x27, 0xb, 0x96, 0xad, 0xc1, 0x1, 0xd, 0x6d, 0x88, 0x4c, 0x39, 0x3f, 0x3e, 0xd0, 0xa0, 0x36, 0xdd, 0x60, 0x8a, 0x6f, 0xc9, 0x21, 0x5e, 0x68, 0x2e, 0xff, 0xfb, 0x70, 0x64, 0xfd, 0x0, 0xf4, 0xf9, 0x59, 0xd2, 0xfb, 0x99, 0x6a, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xd5, 0x5d, 0x51, 0xed, 0x24, 0xfa, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x51, 0xcf, 0x9f, 0xd0, 0x9, 0x1d, 0x46, 0xb0, 0xe9, 0x73, 0x15, 0xa7, 0x42, 0xd1, 0x21, 0x68, 0x7a, 0xd8, 0x93, 0xab, 0x2e, 0xdd, 0x3a, 0xf9, 0xb3, 0x97, 0x1e, 0x9b, 0x5c, 0xb6, 0xa2, 0x79, 0x61, 0x3c, 0x7d, 0x78, 0xca, 0x7f, 0xe2, 0x58, 0x8a, 0x28, 0x61, 0x43, 0x2, 0xa2, 0xea, 0x84, 0x5f, 0xf3, 0xb9, 0xbc, 0xc, 0x98, 0xe, 0x84, 0x82, 0x21, 0x4d, 0x3, 0xc7, 0x9a, 0x78, 0x12, 0x61, 0x19, 0x63, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xfe, 0xd, 0xff, 0x57, 0x15, 0xf1, 0xbd, 0x8b, 0x8, 0x46, 0x10, 0x49, 0x6a, 0xd8, 0xb8, 0x44, 0xc7, 0x42, 0xa7, 0x0, 0x2, 0x0, 0x2, 0x20, 0x4, 0x44, 0x1f, 0xf0, 0x30, 0x74, 0xa3, 0x38, 0xa, 0x32, 0x31, 0x64, 0xda, 0x30, 0x23, 0x3, 0xc4, 0xe, 0x33, 0x80, 0x43, 0x23, 0x2d, 0x28, 0xf, 0x8, 0x4, 0x7c, 0x17, 0x7b, 0xac, 0x18, 0x18, 0x30, 0x4, 0x9, 0x9, 0x4b, 0x0, 0x4, 0x64, 0x6c, 0x4d, 0x2c, 0xb8, 0x32, 0x4d, 0xd2, 0xe5, 0x88, 0x74, 0xa2, 0xe1, 0xd3, 0x23, 0x2, 0x36, 0xfd, 0x8a, 0x95, 0x64, 0xc4, 0x35, 0x26, 0x9c, 0x1c, 0x71, 0x4d, 0x41, 0x6c, 0x33, 0x48, 0xc1, 0xfa, 0x34, 0xb9, 0xc0, 0x82, 0xc3, 0xcf, 0xf0, 0x87, 0x86, 0x74, 0xad, 0x12, 0x89, 0x8f, 0x90, 0x59, 0xc0, 0xfa, 0x24, 0xff, 0xff, 0xfd, 0xb5, 0x33, 0xf6, 0xd2, 0x71, 0xd4, 0x18, 0x47, 0x3d, 0x6a, 0xe7, 0x3d, 0x97, 0xb4, 0xd, 0xdd, 0x8a, 0x9d, 0xd4, 0xed, 0x68, 0x9e, 0xd, 0x36, 0x2e, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x63, 0x94, 0x72, 0x9, 0x53, 0xe3, 0x37, 0xea, 0x2f, 0xd1, 0xef, 0xe8, 0x9c, 0xb2, 0xe9, 0x5d, 0x37, 0xd, 0xe6, 0xcc, 0xd6, 0x60, 0x4, 0x0, 0x4, 0x0, 0x40, 0x2, 0xf7, 0xf4, 0x94, 0x20, 0xc, 0x2f, 0x29, 0xb, 0x14, 0x18, 0x79, 0x98, 0x10, 0x50, 0xe8, 0x1, 0x8c, 0xd4, 0x48, 0x90, 0x15, 0x1f, 0xd0, 0xa9, 0xff, 0xfb, 0x70, 0x64, 0xf0, 0x80, 0xf4, 0x8b, 0x59, 0x53, 0x7b, 0x8f, 0x3b, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0x89, 0x65, 0x51, 0xed, 0xb1, 0x13, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x4c, 0x31, 0x21, 0x26, 0x5, 0x2, 0x87, 0xa, 0xa3, 0x1, 0x3f, 0x24, 0x5, 0xbd, 0xf3, 0x7c, 0x54, 0xb5, 0x9b, 0x9c, 0x1e, 0xca, 0xfa, 0xc7, 0x65, 0x19, 0x5a, 0xdb, 0x89, 0x73, 0x2, 0xbd, 0xaa, 0x1, 0x7f, 0x52, 0xc5, 0xba, 0xd5, 0x29, 0x67, 0x8f, 0xa5, 0xb, 0xf2, 0xe8, 0xca, 0x7d, 0xc5, 0x75, 0x16, 0x5a, 0xc3, 0x9d, 0xc7, 0x16, 0xb8, 0x33, 0xa9, 0x4d, 0xb, 0x98, 0x13, 0x27, 0xd, 0x5a, 0xbc, 0x3e, 0xf8, 0x64, 0x9, 0xfc, 0x3a, 0xe8, 0xb1, 0x35, 0x84, 0x66, 0xe3, 0x88, 0x49, 0x5a, 0x72, 0x71, 0x6c, 0x7d, 0x13, 0x1, 0x60, 0xb9, 0x2b, 0x72, 0x4d, 0xa2, 0x22, 0xd2, 0x72, 0x82, 0x62, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x3f, 0x1d, 0x86, 0x4e, 0x37, 0xd, 0xe9, 0xeb, 0x98, 0x6c, 0xa2, 0x22, 0x38, 0xce, 0x12, 0x64, 0x89, 0x13, 0x4c, 0x14, 0x15, 0x3e, 0xb0, 0x0, 0xc0, 0x5, 0x10, 0x0, 0x0, 0x3e, 0x5f, 0x33, 0xe, 0x4c, 0x2e, 0x20, 0xc2, 0xb, 0x6, 0xd2, 0x37, 0xbd, 0xf, 0xb4, 0x43, 0xc3, 0x60, 0xa0, 0x78, 0xc0, 0x31, 0x8, 0xc4, 0xea, 0x6b, 0xd4, 0xe2, 0x13, 0x86, 0x45, 0x38, 0x58, 0x1, 0x90, 0xe, 0x92, 0x4d, 0x21, 0x7b, 0x45, 0xe5, 0x91, 0x28, 0x16, 0x5a, 0x38, 0xfa, 0xf5, 0xeb, 0xd9, 0xf8, 0xc7, 0x97, 0xd0, 0xcf, 0x44, 0xc7, 0x1, 0xa9, 0xc, 0xe4, 0xbc, 0xd, 0x89, 0x8b, 0xa9, 0x8d, 0x7b, 0x42, 0x51, 0x70, 0x8, 0x8e, 0x96, 0x89, 0xc9, 0xda, 0xd3, 0xfa, 0xdf, 0x3f, 0x77, 0x29, 0xd1, 0xa6, 0x44, 0x7b, 0x56, 0xba, 0x62, 0x9d, 0xd8, 0xbd, 0xcb, 0xdb, 0xe3, 0x5e, 0x6b, 0x11, 0xda, 0xd3, 0xf3, 0x56, 0x8a, 0x4d, 0x1e, 0x38, 0x5f, 0x7b, 0x96, 0xaf, 0x4a, 0xc2, 0x99, 0x11, 0x80, 0x7, 0x5f, 0x7a, 0xa3, 0x84, 0xc5, 0x63, 0x88, 0x22, 0x85, 0x8b, 0xff, 0xff, 0xd2, 0xb7, 0x31, 0x99, 0x26, 0x4f, 0x56, 0xda, 0xe4, 0xc5, 0x88, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x0, 0xf4, 0xdd, 0x59, 0xd3, 0xfb, 0x6f, 0x4b, 0xd8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x14, 0x5, 0x65, 0x4d, 0xad, 0xbd, 0x2f, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xa6, 0x29, 0xa5, 0x47, 0x47, 0x86, 0x5, 0xa2, 0x51, 0x6f, 0xff, 0xa2, 0xd0, 0x4, 0x20, 0xa8, 0x0, 0x64, 0x3, 0x79, 0x8e, 0x44, 0x8f, 0x80, 0xd1, 0xa8, 0x1c, 0x16, 0x1c, 0x6b, 0xec, 0x9d, 0xa3, 0x26, 0x88, 0x28, 0x38, 0x73, 0x6c, 0xd3, 0x87, 0x41, 0x45, 0x16, 0xf2, 0xd1, 0xb, 0x3, 0x47, 0xb6, 0xb2, 0xdd, 0x9e, 0x99, 0x36, 0x56, 0x9d, 0xa9, 0x4d, 0x20, 0xf2, 0x55, 0x6c, 0xa6, 0xd5, 0xe0, 0x1e, 0x56, 0xc0, 0x49, 0x76, 0x35, 0x29, 0x4f, 0x79, 0x86, 0xcd, 0xcf, 0x9d, 0x63, 0x25, 0x31, 0xd3, 0x68, 0x42, 0x9, 0x28, 0xcd, 0xd8, 0x5e, 0xaa, 0xe8, 0xa2, 0x66, 0xfd, 0x95, 0xa3, 0xae, 0x1f, 0x9a, 0x1d, 0xa0, 0xbb, 0xe, 0x2d, 0xac, 0xec, 0xce, 0x64, 0x15, 0xa9, 0xc2, 0x1d, 0xa6, 0xb0, 0xac, 0x2, 0x8d, 0x2f, 0x61, 0x4a, 0xeb, 0x2f, 0xf8, 0x6b, 0x76, 0xef, 0x72, 0x48, 0xf4, 0xaa, 0x65, 0xa2, 0x65, 0x46, 0x1, 0xf0, 0x51, 0x8, 0xff, 0xff, 0xeb, 0xe5, 0x8, 0x92, 0x76, 0x38, 0xb9, 0x37, 0xe5, 0x2a, 0x60, 0x8c, 0x34, 0xd2, 0xa8, 0x2f, 0x59, 0x8f, 0xfe, 0xe, 0x29, 0xf5, 0xd4, 0x0, 0xc0, 0x26, 0x0, 0x20, 0x0, 0xce, 0x65, 0x22, 0xe3, 0x4, 0xa6, 0x42, 0x26, 0x16, 0x1d, 0x5, 0x23, 0x9a, 0x24, 0x68, 0x5, 0x14, 0xc4, 0xc7, 0xc, 0x38, 0xd, 0xd6, 0x52, 0xd, 0x81, 0x95, 0xa8, 0x23, 0x36, 0x12, 0x17, 0x7d, 0x5b, 0xb3, 0x20, 0xab, 0x5e, 0x43, 0x72, 0x6a, 0x7a, 0x6c, 0x7c, 0x2c, 0x18, 0xb0, 0xc3, 0xfe, 0xc9, 0xbb, 0x66, 0x9, 0xc9, 0xee, 0x15, 0xf9, 0x98, 0xeb, 0x89, 0x56, 0xbb, 0x9f, 0xbe, 0x88, 0x73, 0x2d, 0xe, 0xa5, 0xa8, 0xac, 0x87, 0x1d, 0xae, 0xc3, 0x36, 0x9f, 0xe5, 0xb8, 0xdb, 0xa2, 0xf3, 0x28, 0x79, 0xe9, 0xb7, 0xcf, 0x35, 0x2d, 0xc2, 0xbf, 0x56, 0xf6, 0xc3, 0x76, 0xcf, 0xbd, 0x54, 0xb6, 0x9a, 0x8e, 0xc2, 0x72, 0xdb, 0x54, 0xe5, 0x3a, 0xb4, 0xdc, 0xa4, 0xa9, 0xa7, 0xde, 0xf, 0x88, 0x5, 0x87, 0x46, 0x4, 0x44, 0x7, 0x7f, 0xff, 0xee, 0xcf, 0x28, 0xd0, 0xd, 0x8, 0x46, 0x24, 0xf9, 0x5c, 0x41, 0xc5, 0x8a, 0xac, 0xe7, 0x17, 0x65, 0x11, 0x15, 0x3d, 0xff, 0xc1, 0x40, 0x12, 0x80, 0x36, 0x1, 0x4c, 0x22, 0xc8, 0x3, 0xf1, 0xd2, 0xea, 0xe4, 0xcc, 0xff, 0xfb, 0x80, 0x64, 0xee, 0x80, 0xf4, 0xfe, 0x59, 0xd2, 0xeb, 0x4c, 0x3c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0xd5, 0x5d, 0x4f, 0xad, 0x30, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x86, 0x30, 0x23, 0xc7, 0x6d, 0x9c, 0xfd, 0x40, 0xab, 0x63, 0xcc, 0xca, 0x2, 0x8, 0x0, 0x3, 0x83, 0xa0, 0x36, 0x58, 0xc2, 0x94, 0x10, 0xc, 0x91, 0xaf, 0x36, 0x0, 0x1b, 0xae, 0x3a, 0x59, 0x20, 0x28, 0x32, 0x97, 0x74, 0xfe, 0x88, 0x67, 0x88, 0xfe, 0xa9, 0x40, 0xb2, 0xf2, 0xe1, 0x39, 0xe7, 0xe, 0x6a, 0x5a, 0x7a, 0x2b, 0x3b, 0x17, 0xb6, 0x5e, 0x24, 0x8, 0x2d, 0xad, 0x58, 0xb6, 0xdf, 0xd9, 0xee, 0xcc, 0xa1, 0xba, 0xd2, 0x66, 0x5e, 0x6b, 0xcc, 0xaa, 0xbd, 0xa8, 0xaf, 0x55, 0xb4, 0xd6, 0x96, 0xcb, 0xee, 0xf9, 0x93, 0xac, 0x68, 0xee, 0x0, 0xe5, 0x1c, 0x3b, 0x8f, 0xb2, 0x11, 0x53, 0x65, 0xc8, 0xf6, 0x79, 0xf6, 0xe7, 0x1b, 0x26, 0xaf, 0x35, 0x37, 0xff, 0xff, 0xff, 0xff, 0xb9, 0xca, 0x1e, 0x4c, 0xad, 0x32, 0x21, 0xf5, 0xa8, 0xe1, 0xeb, 0x79, 0xe2, 0xaf, 0x25, 0x15, 0x49, 0xd3, 0x14, 0x51, 0xa5, 0x8e, 0x58, 0x98, 0xdf, 0xff, 0xbc, 0xca, 0xb8, 0x16, 0xd1, 0xa4, 0x80, 0x51, 0x20, 0x6e, 0xd8, 0x4c, 0xeb, 0x36, 0x58, 0x2e, 0x31, 0xc8, 0x73, 0x43, 0x2f, 0x5, 0x8, 0xa2, 0xd1, 0x31, 0x60, 0x34, 0x20, 0xbb, 0xe9, 0xe2, 0xd6, 0x19, 0xe0, 0x8, 0xe8, 0x38, 0x51, 0xc5, 0x77, 0x16, 0x64, 0x8, 0xd6, 0xa0, 0x55, 0xc6, 0x86, 0x85, 0xd6, 0xdd, 0x82, 0x6a, 0xd, 0x82, 0x13, 0x62, 0x58, 0xb4, 0xc, 0x3e, 0xfb, 0x78, 0x1b, 0x3, 0x21, 0x6d, 0x8d, 0xa1, 0x5b, 0x48, 0xb5, 0x1c, 0x19, 0xcf, 0xe6, 0x85, 0x79, 0xe6, 0x4b, 0x10, 0x1a, 0x26, 0x18, 0xd, 0x91, 0xb1, 0x5, 0x3b, 0xfb, 0x53, 0xee, 0x13, 0xa9, 0x52, 0x59, 0x56, 0xa5, 0x88, 0xd1, 0x99, 0x13, 0x82, 0x1, 0x42, 0x33, 0x66, 0x99, 0x5a, 0x6d, 0x51, 0x84, 0xa6, 0xab, 0x47, 0x5b, 0xb6, 0xe4, 0x98, 0x16, 0xc3, 0x51, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbd, 0x73, 0x2f, 0x68, 0x48, 0x80, 0x51, 0x5, 0x61, 0x17, 0x2c, 0x93, 0xad, 0x41, 0x53, 0x6a, 0x43, 0x53, 0xd2, 0x1, 0x23, 0x48, 0x5a, 0x53, 0x7f, 0xfc, 0x2e, 0xb2, 0x8, 0x82, 0x60, 0x86, 0x8c, 0xa8, 0x49, 0x7f, 0x85, 0x89, 0xc6, 0x81, 0x45, 0xc, 0x72, 0x11, 0x5e, 0x20, 0x90, 0x5, 0xf5, 0x1, 0x11, 0x1e, 0x2, 0xf8, 0x31, 0xee, 0xd4, 0x6a, 0x48, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x80, 0xf4, 0xcd, 0x58, 0x53, 0x6b, 0x6c, 0x2c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0x21, 0x5d, 0x4d, 0xad, 0x31, 0x6f, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xdc, 0x3c, 0x16, 0xf5, 0xa7, 0x96, 0xc4, 0x83, 0xb6, 0x1f, 0xea, 0x68, 0x93, 0xa0, 0x4b, 0xc5, 0x20, 0xda, 0x82, 0xa6, 0x9e, 0x3c, 0x46, 0xaf, 0x8c, 0xeb, 0x17, 0x99, 0xd1, 0x40, 0x15, 0x3a, 0xe9, 0xc6, 0xcc, 0x9, 0x71, 0xb6, 0xf7, 0x17, 0x92, 0xd2, 0xcf, 0x9d, 0xf9, 0x19, 0x91, 0x11, 0xa1, 0x67, 0xe6, 0xee, 0xe6, 0x4e, 0x4b, 0x1b, 0xdf, 0x2b, 0xdd, 0x38, 0xad, 0x92, 0xaa, 0xa8, 0xb1, 0xbf, 0xb5, 0x14, 0xa7, 0x19, 0x72, 0x29, 0x2d, 0x5b, 0x5c, 0x4a, 0x2, 0x40, 0xe8, 0x90, 0xac, 0x81, 0xe6, 0x7f, 0xfb, 0x7c, 0xd2, 0xab, 0x2e, 0x6a, 0x18, 0x41, 0xdd, 0x67, 0xe5, 0x23, 0xab, 0x20, 0x5, 0x1e, 0x1a, 0x22, 0xff, 0xff, 0x33, 0xf0, 0x15, 0x40, 0xad, 0x2, 0x91, 0x21, 0x74, 0x5, 0x17, 0x1a, 0x2, 0x2e, 0x41, 0x86, 0x92, 0x88, 0xb7, 0x42, 0x4, 0xc9, 0x88, 0xcc, 0x5a, 0x0, 0x50, 0x2, 0x6e, 0x51, 0x5c, 0x9a, 0xd8, 0x35, 0x69, 0x9b, 0x4d, 0x84, 0x89, 0x77, 0xc6, 0xa1, 0xd2, 0x43, 0x61, 0xba, 0x69, 0x96, 0x91, 0x11, 0x2e, 0x1b, 0x10, 0xac, 0x96, 0xb6, 0xb, 0x8a, 0x9b, 0x74, 0x8e, 0x2e, 0xb9, 0x79, 0x1, 0x4d, 0xdc, 0x90, 0xb9, 0x52, 0x59, 0x37, 0x27, 0x66, 0x7a, 0x56, 0xbf, 0x8f, 0x9a, 0x38, 0xc9, 0xca, 0x9, 0x53, 0xab, 0xac, 0xa8, 0xea, 0x1b, 0x88, 0x68, 0xb2, 0xcb, 0xc6, 0x15, 0x3c, 0x40, 0x4a, 0x4c, 0x8, 0xb2, 0x58, 0xcc, 0x23, 0x13, 0xd9, 0x55, 0xd5, 0xd9, 0xda, 0x59, 0xc3, 0xe6, 0xca, 0x5b, 0x68, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x49, 0xa9, 0x23, 0x44, 0xd0, 0x65, 0x54, 0x26, 0x93, 0xde, 0x6d, 0x84, 0xbd, 0xad, 0xd8, 0xab, 0xa9, 0x26, 0xb7, 0x20, 0x76, 0xb1, 0x96, 0x35, 0x4d, 0x54, 0xca, 0xf0, 0xc6, 0x1b, 0x63, 0xcd, 0xc4, 0xaa, 0x58, 0xed, 0x4a, 0x1e, 0x34, 0x6d, 0x12, 0x2d, 0xe0, 0xb0, 0xd1, 0xa8, 0xcb, 0xa, 0x65, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x80, 0xf4, 0xdf, 0x59, 0x52, 0xeb, 0x1b, 0x48, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0x21, 0x49, 0x4f, 0xed, 0x24, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x8c, 0x47, 0xc1, 0xa3, 0x54, 0x81, 0x90, 0x6, 0xc0, 0xb, 0x40, 0x91, 0x52, 0xe8, 0xed, 0x2d, 0xd8, 0x6a, 0x2, 0x9e, 0x5d, 0x47, 0xcc, 0xd, 0x60, 0x35, 0x1d, 0x9f, 0xb1, 0x7c, 0xb8, 0x6e, 0x79, 0x68, 0xea, 0x9a, 0xf5, 0x43, 0x61, 0x5b, 0x4c, 0x59, 0x8d, 0xe5, 0x63, 0xe2, 0xd3, 0x20, 0xc2, 0xbd, 0x4b, 0x5e, 0xb5, 0xb7, 0x41, 0xb8, 0x71, 0x3a, 0xbb, 0x18, 0x83, 0x79, 0xdd, 0x79, 0xd8, 0x6b, 0x1, 0x2c, 0xd5, 0x54, 0xba, 0xe3, 0x4c, 0xb8, 0xe6, 0x72, 0x18, 0xfc, 0xd, 0x54, 0xb5, 0xf6, 0xdf, 0xff, 0xdc, 0xbd, 0x66, 0x73, 0xa3, 0x51, 0x20, 0x7a, 0xcd, 0xff, 0xff, 0x9e, 0x6d, 0x4b, 0xac, 0xc0, 0xf0, 0x74, 0x48, 0x76, 0xa9, 0x37, 0xf, 0x2c, 0x96, 0xe1, 0x75, 0x70, 0x7, 0x1a, 0x3, 0x52, 0x12, 0x53, 0x29, 0x5e, 0x10, 0x9e, 0x15, 0x18, 0xcc, 0xc4, 0x4d, 0x8f, 0x49, 0x55, 0x28, 0x11, 0x10, 0x19, 0x14, 0x30, 0xd, 0xee, 0x8, 0x20, 0x85, 0xaa, 0x36, 0x84, 0xd6, 0x5b, 0x20, 0x68, 0xac, 0xc9, 0xd9, 0x78, 0xe1, 0xf8, 0xa0, 0xc1, 0x8, 0xc0, 0x96, 0x32, 0xb8, 0x15, 0xc, 0x0, 0x62, 0x68, 0x90, 0x23, 0x32, 0xe8, 0x74, 0x30, 0xc8, 0x14, 0x6f, 0xa1, 0xb, 0x30, 0x5e, 0x67, 0x1f, 0x6, 0x9, 0x49, 0xc7, 0x25, 0xe5, 0xfe, 0x7a, 0xdf, 0x3, 0xe9, 0x34, 0x6c, 0x99, 0xac, 0x8b, 0x54, 0xeb, 0x9e, 0x2b, 0x88, 0xa6, 0xc6, 0x42, 0x5b, 0x33, 0xab, 0x1a, 0x24, 0x20, 0x44, 0x26, 0x83, 0x46, 0x83, 0xc3, 0x8b, 0x8d, 0x4b, 0xde, 0xb3, 0x26, 0xa2, 0x59, 0x2b, 0x1a, 0xd, 0xc5, 0xd6, 0x91, 0x3c, 0xea, 0x9f, 0xff, 0xff, 0xff, 0xfc, 0x43, 0x8e, 0xb3, 0x59, 0x26, 0x16, 0x9d, 0x56, 0x58, 0x95, 0xea, 0x4d, 0x57, 0xcc, 0xb4, 0xe2, 0x80, 0x2b, 0xc1, 0x22, 0x98, 0xa8, 0x63, 0x21, 0x16, 0x2, 0x2, 0xa1, 0x86, 0x3a, 0xc1, 0xcf, 0x28, 0xc8, 0x4c, 0x41, 0x43, 0x4, 0x88, 0xd3, 0x84, 0x46, 0x84, 0xae, 0x2, 0x8e, 0x95, 0x27, 0xbb, 0x5e, 0x65, 0xb, 0xd, 0x20, 0x11, 0x8e, 0x8f, 0x8, 0x88, 0x9b, 0xe1, 0xca, 0x96, 0xb8, 0xb9, 0x40, 0xb8, 0x5c, 0x56, 0xa2, 0x15, 0x41, 0x9e, 0xce, 0x62, 0x4b, 0x36, 0x81, 0x42, 0x8b, 0xb2, 0x2a, 0x39, 0x98, 0x2c, 0xe, 0xd0, 0x72, 0xda, 0xf2, 0x24, 0xff, 0xfb, 0x70, 0x64, 0xfa, 0x80, 0xf4, 0x6c, 0x55, 0xd1, 0xeb, 0x78, 0x49, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xa1, 0x39, 0x49, 0xed, 0x30, 0xf3, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xbe, 0x56, 0x8c, 0x49, 0x10, 0x92, 0x9, 0xba, 0x32, 0xcf, 0x3d, 0xa4, 0xb9, 0xcd, 0x2b, 0x7b, 0xe4, 0x34, 0x8e, 0x62, 0x63, 0x49, 0x8c, 0x84, 0x9e, 0x96, 0xb6, 0xfd, 0xfb, 0x63, 0x5, 0x8b, 0x0, 0xa4, 0x50, 0x4a, 0x39, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x6c, 0x69, 0x9f, 0xee, 0x64, 0xb2, 0x4b, 0xb4, 0x47, 0x7e, 0x3e, 0xac, 0x15, 0x80, 0x58, 0xcd, 0x7a, 0x96, 0x7b, 0xa5, 0xbf, 0x7e, 0x0, 0xf, 0x23, 0x2b, 0x73, 0x3a, 0xc4, 0x17, 0x9, 0xa7, 0x80, 0x66, 0x55, 0xe6, 0x64, 0x80, 0xe1, 0x43, 0x9e, 0xa, 0x8e, 0xe3, 0xa0, 0x4d, 0x64, 0x89, 0x12, 0xd7, 0x14, 0xd9, 0x41, 0x20, 0x8, 0xd4, 0xcc, 0x9b, 0xd4, 0x75, 0x7f, 0xf, 0x48, 0x4d, 0x98, 0x82, 0x5, 0x63, 0xf8, 0xd6, 0x83, 0x23, 0xe6, 0x48, 0xd9, 0xd8, 0xdf, 0xb1, 0x90, 0xc9, 0xa4, 0x27, 0x7a, 0xf0, 0x38, 0xfb, 0x65, 0x94, 0xef, 0xf8, 0xd5, 0xca, 0xdb, 0x49, 0xb2, 0x55, 0xc8, 0x5d, 0x19, 0x56, 0xc9, 0x1d, 0x22, 0x6d, 0x61, 0x51, 0x20, 0x5d, 0x3, 0x6c, 0x2b, 0x93, 0x8a, 0xab, 0xd4, 0x61, 0x32, 0x6, 0xc8, 0x91, 0x13, 0x74, 0x91, 0x17, 0xbf, 0x8d, 0x76, 0x71, 0x74, 0x46, 0x9a, 0xb8, 0xc5, 0x97, 0x7d, 0xbd, 0xdd, 0xe1, 0xef, 0xdf, 0x0, 0xd1, 0xb7, 0x33, 0xe, 0xae, 0xcf, 0xb5, 0xf8, 0x5, 0x78, 0x5b, 0x61, 0x8b, 0xb5, 0x70, 0x57, 0x47, 0x2c, 0x3, 0x39, 0x9e, 0x41, 0x5a, 0x3, 0x4a, 0x5c, 0x85, 0x54, 0x5c, 0x80, 0x52, 0x53, 0xa1, 0x44, 0x90, 0x7b, 0x1e, 0x8a, 0xc4, 0xe9, 0xca, 0xc, 0xa, 0x86, 0xc6, 0xe0, 0xc2, 0x24, 0x51, 0x11, 0x29, 0xdf, 0x4, 0x92, 0x35, 0x6d, 0x25, 0x35, 0x8d, 0x43, 0x43, 0xe3, 0xa2, 0x39, 0xea, 0xd2, 0xe0, 0xb8, 0x4, 0x6d, 0xa2, 0x64, 0x2a, 0x2c, 0xcb, 0x12, 0x94, 0x53, 0xe8, 0xa6, 0x44, 0x58, 0xe6, 0xad, 0xee, 0x93, 0xf1, 0xd9, 0x54, 0x48, 0x89, 0xd9, 0x5f, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x81, 0xf4, 0x75, 0x55, 0xd0, 0xfb, 0x49, 0x5c, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x10, 0x5d, 0x3b, 0x43, 0xed, 0x24, 0xcf, 0x28, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x29, 0xaf, 0xda, 0xa9, 0xd2, 0x4a, 0xf, 0xa, 0x95, 0x2c, 0x6f, 0x2b, 0x58, 0xc8, 0xcb, 0xb5, 0x28, 0xc4, 0xea, 0xa9, 0x47, 0x18, 0x5b, 0xef, 0x56, 0x6b, 0xdb, 0x1d, 0xcd, 0x52, 0x50, 0x26, 0xbb, 0x48, 0x75, 0x59, 0x17, 0xb6, 0x30, 0xc, 0x2c, 0x50, 0xe5, 0xc2, 0x4c, 0x20, 0xc8, 0x1c, 0x40, 0x10, 0x34, 0x81, 0x14, 0xf2, 0x2b, 0x24, 0xaa, 0xed, 0xa4, 0x12, 0x5a, 0x34, 0xab, 0x1a, 0x45, 0x35, 0x16, 0xbb, 0x10, 0xc9, 0xb1, 0x80, 0xb8, 0x94, 0x4, 0x45, 0xe4, 0xc9, 0x29, 0xc0, 0x3c, 0x4b, 0x14, 0x9a, 0x12, 0xba, 0xd9, 0x55, 0xb5, 0x9a, 0x92, 0x24, 0x4f, 0x46, 0xca, 0xab, 0x4a, 0x88, 0x81, 0xb1, 0x17, 0x61, 0x3c, 0xec, 0xdf, 0x6f, 0x72, 0x30, 0x50, 0xd0, 0x21, 0xe8, 0x63, 0x24, 0xcd, 0x9b, 0xe5, 0x90, 0x3e, 0x51, 0x36, 0x72, 0x9a, 0xe7, 0x71, 0xd0, 0x24, 0x7c, 0xb7, 0x7e, 0x5c, 0x3a, 0x34, 0x58, 0x3e, 0x44, 0x5e, 0x48, 0x6f, 0xe8, 0x20, 0x45, 0x79, 0x36, 0x66, 0x27, 0x5d, 0xae, 0x10, 0xc, 0x42, 0x86, 0x4b, 0xcc, 0x35, 0x24, 0x4a, 0x6, 0x8c, 0xc8, 0x55, 0x2d, 0x4c, 0x21, 0xc1, 0x96, 0x90, 0x2a, 0x36, 0x6, 0x89, 0x8e, 0x2a, 0x75, 0x3e, 0xca, 0x64, 0x10, 0x87, 0xc7, 0xa6, 0xc4, 0xe5, 0x8c, 0x8f, 0xb4, 0xd6, 0x79, 0x71, 0xf1, 0xfa, 0xd5, 0xab, 0x9d, 0x3a, 0x76, 0xc5, 0x92, 0xea, 0x3f, 0xfc, 0x5b, 0x4e, 0x76, 0x14, 0xf, 0xad, 0x86, 0x84, 0x66, 0x34, 0x6d, 0xdd, 0x79, 0x33, 0xb2, 0xe9, 0x4b, 0x39, 0x94, 0x86, 0x82, 0xa0, 0xcb, 0xe6, 0x9d, 0x3c, 0xda, 0xf4, 0x76, 0xdc, 0x7b, 0xa6, 0xf4, 0x83, 0xbd, 0x1e, 0x29, 0x26, 0xb5, 0x9a, 0xa6, 0x53, 0x41, 0x40, 0x68, 0x90, 0x83, 0x4d, 0xd8, 0xca, 0x58, 0x6b, 0xa6, 0xb5, 0xf5, 0xda, 0x0, 0xaa, 0x0, 0x5e, 0x6b, 0x41, 0x75, 0x82, 0x2, 0x85, 0x20, 0x32, 0xb0, 0x5a, 0xd4, 0x8b, 0xb1, 0x93, 0x97, 0xf5, 0xff, 0xfb, 0x60, 0x64, 0xf9, 0x0, 0xf3, 0xf7, 0x3f, 0x52, 0x7b, 0x2c, 0x4c, 0x28, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xf, 0x80, 0xff, 0x43, 0xec, 0x3d, 0x2c, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x38, 0x52, 0x19, 0x8b, 0x46, 0x59, 0x70, 0x7a, 0x78, 0x46, 0x3b, 0x15, 0x83, 0x12, 0xad, 0xa8, 0xca, 0xd3, 0x9b, 0xa9, 0x37, 0x2c, 0xab, 0x59, 0x48, 0xdb, 0x2a, 0xbb, 0x9, 0xcb, 0x96, 0x43, 0x5b, 0x4e, 0x4a, 0xb3, 0xa8, 0xf1, 0xec, 0x26, 0xf6, 0xa6, 0x3d, 0x48, 0x5e, 0x8f, 0xf2, 0x61, 0xaa, 0x95, 0x96, 0x58, 0xa2, 0x54, 0x9b, 0xd1, 0xc4, 0xd3, 0x10, 0x78, 0xd3, 0x22, 0xb7, 0x1e, 0xd1, 0x22, 0x41, 0x9d, 0x8f, 0x56, 0xf8, 0x25, 0x44, 0x50, 0xc6, 0xcc, 0x8b, 0xe5, 0xcb, 0x5b, 0x72, 0x48, 0xff, 0xa4, 0x1, 0xd1, 0x70, 0x0, 0xc6, 0xb, 0x1d, 0x7, 0x3, 0x85, 0xc, 0xc9, 0x4, 0x66, 0xd0, 0xa4, 0xe, 0x8e, 0x11, 0x0, 0x20, 0x48, 0xdb, 0xc1, 0x60, 0x29, 0x58, 0x8d, 0x1, 0xa0, 0xd7, 0xc9, 0x62, 0xd3, 0x21, 0x12, 0xa2, 0x82, 0x84, 0xd4, 0x78, 0xd4, 0xa1, 0x64, 0x6c, 0x89, 0xc9, 0x3, 0x1, 0x98, 0x95, 0x4f, 0x23, 0x38, 0xf1, 0x47, 0x42, 0x46, 0xa3, 0x89, 0x65, 0x73, 0x89, 0x3b, 0x5e, 0x39, 0xcf, 0xf9, 0xda, 0x73, 0xf0, 0xd3, 0x78, 0x33, 0x95, 0xa8, 0x4b, 0x7e, 0xff, 0xa3, 0xfd, 0x4f, 0xff, 0xdf, 0xff, 0x45, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xec, 0x0, 0xf3, 0x70, 0x38, 0xce, 0x7b, 0x9, 0x34, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xd, 0xd0, 0xef, 0x2f, 0xec, 0x30, 0xcf, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xee, 0x0, 0xf3, 0x41, 0x3b, 0x48, 0xe3, 0xc, 0x33, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xb, 0x88, 0xad, 0x17, 0x8c, 0x24, 0xc7, 0xc0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x10, 0x64, 0xdd, 0x8f, 0xf0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0xa4, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
// This here is basically the buffer which we want to fuzz with this program.
// static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
// asegment=timestamps="60|150"
// static const char *filter_descr = "aresample=8000,ebur128=audio=1:meter=18,aformat=sample_fmts=s16:channel_layouts=mono";
char* fuzzbuf[300]; // Our fuzzer thing...
// static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -"; // Not needed...
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
#include <string.h>
int read_buffer(void *opaque, uint8_t *buf, int buf_size);
unsigned int data_pointer = 0; // Where we are in the input data
FILE *fp_open;
int read_buffer(void *opaque, uint8_t *buf, int buf_size){
if (!feof(fp_open)) {
int true_size=fread(buf,1,buf_size,fp_open);
return true_size;
} else {
return AVERROR_EOF; // return -1; // We actually need to return AVERROR_EOF instead of -1 here I think
}
}
#include <stdio.h>
unsigned char* inbuffer=NULL;
AVIOContext *avio_in=NULL;
static int open_input_file()
{
data_pointer = 0; // Set to zero before starting to read...
const AVCodec *dec;
int ret = 0;
fp_open = fmemopen(STATIC_MP3_INPUT, sizeof(STATIC_MP3_INPUT), "r"); // fopen("small.mp3", "rb");
if (fp_open == NULL) {
return 1;
}
inbuffer = (unsigned char*)av_malloc(sizeof(STATIC_MP3_INPUT));
avio_in =avio_alloc_context(inbuffer, sizeof(STATIC_MP3_INPUT),0,NULL,read_buffer,NULL,NULL);
if(avio_in==NULL){
goto end;
}
fmt_ctx->pb=avio_in;
fmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
if ((ret = avformat_open_input(&fmt_ctx, "small.mp3", NULL, NULL)) < 0) { // was originally: if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
goto end;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
goto end;
}
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find an audio stream in the input file\n");
goto end;
}
audio_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
goto end;
//return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[audio_stream_index]->codecpar);
/* init the audio decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
goto end;
}
end:
return ret;
}
static int init_filters(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
static const int out_sample_rate = 8000;
const AVFilterLink *outlink;
AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer audio source: the decoded frames from the decoder will be inserted here. */
if (dec_ctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&dec_ctx->ch_layout, dec_ctx->ch_layout.nb_channels);
ret = snprintf(args, sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=",
time_base.num, time_base.den, dec_ctx->sample_rate,
av_get_sample_fmt_name(dec_ctx->sample_fmt));
av_channel_layout_describe(&dec_ctx->ch_layout, args + ret, sizeof(args) - ret);
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
goto end;
}
/* buffer audio sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "sample_formats", "s16",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
goto end;
}
ret = av_opt_set(buffersink_ctx, "channel_layouts", "mono",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
goto end;
}
ret = av_opt_set_array(buffersink_ctx, "samplerates", AV_OPT_SEARCH_CHILDREN,
0, 1, AV_OPT_TYPE_INT, &out_sample_rate);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize audio buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
/* Print summary of the sink buffer
* Note: args buffer is reused to store channel layout string */
outlink = buffersink_ctx->inputs[0];
av_channel_layout_describe(&outlink->ch_layout, args, sizeof(args));
av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
(int)outlink->sample_rate,
(char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
args);
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
static void print_frame(const AVFrame *frame)
{
const int n = frame->nb_samples * frame->ch_layout.nb_channels;
const uint16_t *p = (uint16_t*)frame->data[0];
const uint16_t *p_end = p + n;
while (p < p_end) {
fputc(*p & 0xff, stdout);
fputc(*p>>8 & 0xff, stdout);
p++;
}
fflush(stdout);
}
void try_fuzz_audio();
void try_fuzz_audio() {
int ret;
AVPacket *packet = av_packet_alloc();
AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
if (!packet || !frame || !filt_frame) {
fprintf(stderr, "Could not allocate frame or packet\n");
exit(1);
}
fmt_ctx = avformat_alloc_context();
if ((ret = open_input_file()) < 0)
goto end;
if ((ret = init_filters(fuzzbuf)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == audio_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
fprintf(stderr, "Ok, so we afefefeffefefefefew going to the thing...\n");
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
goto end;
}
if (ret >= 0) {
/* push the audio data from decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
break;
}
/* pull filtered audio from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
}
if (ret < 0) {
goto end;
}
// print_frame(filt_frame);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
}
av_packet_unref(packet);
}
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
printf("Pulling the rest of the bullshit here...\n");
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
}
if (ret < 0) {
goto end;
}
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
avformat_close_input(&fmt_ctx);
av_packet_free(&packet);
av_frame_free(&frame);
av_frame_free(&filt_frame);
// Freeing the bullshit:::
//fprintf(stderr, "Freeing the bullshit...\n");
//av_free(avio_in);
//av_free(inbuffer);
if (ret < 0 && ret != AVERROR_EOF) {
return;
}
return;
}
int main(int argc, char **argv)
{
memset(fuzzbuf, 0x00, sizeof(fuzzbuf)); // Zero out the buffer.
// Now read from stdin into that buffer
read(0, fuzzbuf, sizeof(fuzzbuf));
try_fuzz_audio(); // First try with the audio
printf("Reached the end...\n");
return 0;
}
I think we need to close the file memory thing…
Ok, so here is my very final code of the fuzzer:
#include <unistd.h>
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include <stdio.h>
#include <stdint.h>
// Hardcoded mp3 file as bytebuffer such that we do not need to reload from disk on every fuzz iteration...
volatile static uint8_t STATIC_MP3_INPUT[] = { 0xff, 0xfb, 0x90, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x69, 0x6e, 0x67, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x15, 0x99, 0x0, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x50, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x4, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x20, 0x24, 0x5, 0x47, 0x4d, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x15, 0x99, 0xf3, 0x91, 0xbd, 0x8a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfb, 0xc0, 0x64, 0x0, 0x0, 0x1, 0x4, 0x0, 0x4a, 0x6d, 0x0, 0x0, 0x8, 0x0, 0x0, 0xf, 0xf0, 0xa0, 0x0, 0x1, 0x17, 0x68, 0xfd, 0x2d, 0xb9, 0xbd, 0x80, 0x0, 0x0, 0x0, 0x3f, 0xc3, 0x0, 0x0, 0x0, 0xb6, 0xe6, 0xc0, 0x25, 0x25, 0x10, 0x60, 0x0, 0x8, 0x2, 0x0, 0x80, 0x20, 0x5c, 0xfc, 0x10, 0x70, 0x61, 0x60, 0xf9, 0xf2, 0xef, 0x44, 0xb8, 0x21, 0xca, 0x7c, 0x4e, 0x7f, 0xff, 0xc4, 0x1, 0x86, 0x44, 0x20, 0x0, 0x80, 0x20, 0x0, 0x0, 0x5a, 0xdb, 0x92, 0x8c, 0x0, 0x0, 0x5f, 0x46, 0x18, 0x2c, 0xd2, 0xc, 0x34, 0x75, 0xfe, 0x19, 0x5f, 0x32, 0x20, 0x7, 0xd8, 0x1c, 0xaa, 0x14, 0x1c, 0x34, 0x40, 0xa1, 0x19, 0x50, 0x5c, 0x1c, 0x4, 0x46, 0x14, 0x6, 0x37, 0x27, 0x20, 0x52, 0x61, 0xcd, 0xa3, 0x98, 0x30, 0x11, 0x84, 0x1, 0x1b, 0x38, 0xf8, 0x54, 0x3c, 0xf3, 0xc2, 0x58, 0x7b, 0xf0, 0xc7, 0xd7, 0x21, 0x76, 0x83, 0x80, 0x19, 0x41, 0x31, 0xfa, 0x13, 0x92, 0x81, 0xa6, 0x29, 0x9a, 0x83, 0xc0, 0xe9, 0x60, 0x32, 0x26, 0x10, 0x36, 0xdd, 0x44, 0x60, 0xcf, 0x29, 0x32, 0x20, 0x28, 0x39, 0x82, 0x47, 0x60, 0x77, 0x11, 0xfc, 0x5e, 0xaa, 0xa4, 0xb2, 0x99, 0x9d, 0x1b, 0x1f, 0x21, 0x1, 0x30, 0x50, 0x20, 0x31, 0x12, 0x0, 0x17, 0xa3, 0xaf, 0x95, 0x4a, 0x77, 0xdd, 0x2a, 0x54, 0x84, 0x37, 0x7a, 0x75, 0x60, 0x40, 0xc1, 0x70, 0xec, 0xcc, 0x5d, 0x68, 0x17, 0xa6, 0x2e, 0xd3, 0xdf, 0xbc, 0x6c, 0x7e, 0x6a, 0x6c, 0xd2, 0x13, 0xcd, 0x9b, 0xde, 0xd3, 0xf9, 0x8b, 0x21, 0x79, 0x68, 0xef, 0xf6, 0xa6, 0x7d, 0xff, 0xd7, 0x7b, 0xff, 0x8, 0x85, 0x7f, 0x6e, 0x4b, 0x2f, 0xe5, 0xc8, 0xa, 0x4d, 0x9e, 0x33, 0x6f, 0x4b, 0xd1, 0xe, 0x6d, 0xa4, 0x0, 0x42, 0x0, 0x0, 0x0, 0x0, 0x45, 0x6f, 0xc, 0x14, 0x61, 0x9, 0x4d, 0xdc, 0xb0, 0xa, 0xee, 0xa, 0x81, 0x83, 0x28, 0xc3, 0xb3, 0xc0, 0xca, 0x82, 0x21, 0x2, 0xcd, 0x98, 0x58, 0x22, 0xea, 0x36, 0x56, 0x50, 0x10, 0xda, 0xe5, 0x4, 0xb, 0x99, 0x60, 0x7a, 0x6b, 0x12, 0x1c, 0x74, 0xa6, 0xc1, 0xb1, 0xa1, 0x7f, 0x5a, 0xea, 0x32, 0x45, 0xa7, 0x79, 0x93, 0xa4, 0xb4, 0xa0, 0xbb, 0x5d, 0xf8, 0x52, 0xb3, 0xa2, 0x29, 0x9c, 0x61, 0x10, 0xf, 0x3d, 0x4c, 0xe1, 0x6e, 0x12, 0xcc, 0xe5, 0x5c, 0x61, 0xd4, 0x30, 0x4c, 0x3b, 0x11, 0x7c, 0x5f, 0x57, 0x16, 0xb3, 0xf9, 0xae, 0xe1, 0xcf, 0xd3, 0xef, 0x14, 0xa0, 0xb3, 0x6a, 0x95, 0x83, 0xd3, 0xc6, 0xa0, 0x99, 0xbe, 0x5d, 0xa7, 0xa0, 0xb9, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xca, 0xed, 0x64, 0xfa, 0x38, 0x12, 0x28, 0xae, 0x7b, 0xbd, 0x85, 0xc8, 0x84, 0x3f, 0x7e, 0x59, 0x7d, 0xb1, 0xc5, 0x93, 0x81, 0xad, 0xaf, 0xfa, 0x27, 0x8, 0x40, 0x2a, 0x45, 0x3, 0x57, 0x4c, 0xe1, 0x62, 0x18, 0xbb, 0xa6, 0x82, 0x78, 0xbe, 0xbe, 0xdd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x18, 0x5e, 0xe7, 0x6f, 0xd2, 0x5f, 0x93, 0x5d, 0xb5, 0xdd, 0x63, 0x76, 0xdd, 0x6a, 0x4b, 0x2e, 0x84, 0x8, 0xcd, 0xdd, 0x6, 0xf2, 0x96, 0x1e, 0x88, 0xde, 0x98, 0x3, 0x60, 0x7c, 0x38, 0x3, 0x20, 0x28, 0x41, 0xb0, 0x2b, 0x60, 0xce, 0x83, 0xa5, 0x92, 0x2e, 0x48, 0xb0, 0x53, 0xfa, 0x23, 0x0, 0x35, 0x8c, 0x60, 0x31, 0xd1, 0x8a, 0x4, 0x88, 0x84, 0x83, 0x80, 0x41, 0x22, 0x6b, 0x28, 0xd0, 0x94, 0x9e, 0x20, 0xa8, 0xb, 0x39, 0x1e, 0x5, 0x95, 0x38, 0x66, 0x93, 0x4b, 0xd5, 0x3a, 0xb5, 0x3b, 0xcc, 0xf5, 0xf6, 0x1a, 0x44, 0x57, 0x3f, 0xce, 0x56, 0xef, 0xf, 0x13, 0x4f, 0xff, 0x26, 0x5e, 0x13, 0x5b, 0xd8, 0xad, 0x6e, 0xe1, 0x76, 0x6a, 0xad, 0x7e, 0xe5, 0x85, 0x23, 0x8c, 0x4d, 0xc7, 0xe6, 0x1c, 0x88, 0xc7, 0xe4, 0xa9, 0x38, 0xf4, 0x55, 0xc7, 0xbf, 0xa9, 0x45, 0xeb, 0x97, 0xec, 0xcc, 0xa5, 0x5a, 0xb3, 0x63, 0x37, 0x3, 0xdd, 0xef, 0xc3, 0xbf, 0xff, 0xcc, 0x3c, 0x98, 0x48, 0x2a, 0x27, 0x2c, 0x7c, 0x77, 0x86, 0xf7, 0x90, 0x75, 0xb8, 0xb9, 0x64, 0x8, 0x50, 0x4b, 0x90, 0x17, 0x3, 0xe4, 0xe3, 0xe6, 0x83, 0xb0, 0x40, 0x13, 0x4d, 0x8d, 0x4d, 0x9, 0xda, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xaf, 0xb3, 0xf5, 0xa9, 0x33, 0x2b, 0xb3, 0x7b, 0x30, 0x48, 0x1d, 0x6, 0xaf, 0x86, 0xe, 0xf0, 0x47, 0x38, 0xe5, 0x56, 0x33, 0xfc, 0xe6, 0x7d, 0x8e, 0xb9, 0x30, 0x63, 0x6, 0x38, 0x64, 0xc, 0x2c, 0x1b, 0xc4, 0x41, 0xa2, 0x11, 0x0, 0xa8, 0xe9, 0x88, 0x8f, 0x24, 0xe8, 0xa8, 0xe0, 0x7, 0xc0, 0xe0, 0x87, 0x8a, 0x83, 0x29, 0x36, 0x61, 0x42, 0xd, 0x7d, 0x98, 0x2, 0x94, 0xc4, 0x87, 0x9, 0x45, 0x1, 0x1e, 0x84, 0xb7, 0x11, 0x6c, 0x82, 0xc1, 0x80, 0xb, 0xbd, 0x31, 0x4e, 0x9b, 0xc3, 0x2, 0x9c, 0x64, 0xcf, 0xe5, 0x4, 0xf7, 0xd8, 0x48, 0x39, 0x45, 0xe9, 0x2, 0x4a, 0xda, 0xdc, 0xf0, 0x38, 0x10, 0x50, 0x6e, 0xfe, 0x59, 0xc3, 0x15, 0x16, 0x19, 0x4b, 0x24, 0x14, 0xf1, 0xb9, 0x64, 0x0, 0x2, 0x34, 0xd, 0xbb, 0xf1, 0x2a, 0x8f, 0xc7, 0xff, 0xfb, 0x90, 0x64, 0xed, 0x80, 0xf6, 0x3d, 0x56, 0xce, 0x7f, 0x6f, 0x20, 0xa, 0x0, 0x0, 0xf, 0xf0, 0xe0, 0x0, 0x1, 0x16, 0x2d, 0x63, 0x43, 0xed, 0xe1, 0x6f, 0xe0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x4, 0x65, 0x6a, 0xf5, 0xfb, 0x81, 0x1e, 0xdc, 0xfe, 0x78, 0x2f, 0xf7, 0x16, 0x5a, 0x97, 0x91, 0x63, 0x51, 0xc6, 0xa6, 0xed, 0xff, 0xff, 0xff, 0xfd, 0xf5, 0x84, 0x81, 0x33, 0x32, 0xd4, 0xb, 0xa, 0xfc, 0xb8, 0xef, 0xf8, 0x14, 0xcb, 0xa5, 0xba, 0x42, 0xaa, 0x7c, 0xb3, 0x46, 0x10, 0x73, 0x21, 0x40, 0xad, 0x55, 0x1f, 0x7, 0x59, 0x4, 0x20, 0x84, 0xb1, 0x8b, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x96, 0x33, 0xcd, 0x6f, 0x37, 0x81, 0xfe, 0x33, 0x7e, 0xf1, 0xfc, 0x37, 0x90, 0x68, 0xc4, 0x89, 0x5c, 0x28, 0x26, 0x89, 0x45, 0x6a, 0x41, 0x4a, 0xab, 0x57, 0xb9, 0x7f, 0xef, 0x9f, 0x26, 0x6b, 0x6a, 0x42, 0x8, 0x19, 0x65, 0x9a, 0x11, 0x0, 0xb7, 0x30, 0xd0, 0xb2, 0xb0, 0x71, 0x50, 0xd0, 0x11, 0x98, 0x24, 0x2c, 0xc0, 0x40, 0xc7, 0x58, 0xe, 0x58, 0x8, 0x88, 0xf0, 0x8, 0x10, 0x20, 0x2, 0x7b, 0xf3, 0x20, 0x13, 0x22, 0x14, 0x40, 0xd3, 0x2c, 0x2, 0x16, 0xe2, 0xcc, 0x8e, 0x90, 0xc, 0xc1, 0x72, 0x5a, 0x94, 0x3b, 0xb7, 0x84, 0x47, 0x74, 0x31, 0xbb, 0xdf, 0xaa, 0xd6, 0x98, 0xe5, 0x34, 0x5, 0xc, 0xd2, 0x3d, 0xe1, 0x62, 0x3, 0x9f, 0x3f, 0xfa, 0xde, 0xe3, 0x55, 0x28, 0xa6, 0x69, 0x2a, 0x4d, 0xc, 0x60, 0xbd, 0xef, 0xc4, 0x76, 0xa6, 0xee, 0x6a, 0x19, 0xb1, 0xfb, 0x35, 0x4, 0xc3, 0xe6, 0x38, 0xe8, 0x94, 0x70, 0xa1, 0xff, 0xff, 0x5d, 0xcd, 0x20, 0x40, 0xf5, 0x3b, 0xd1, 0x92, 0x44, 0x1e, 0x88, 0xe2, 0x5b, 0x89, 0x88, 0x92, 0x1f, 0x1a, 0x1c, 0xc2, 0x29, 0x20, 0x48, 0x56, 0x3f, 0xff, 0xff, 0xb1, 0xb7, 0x77, 0x43, 0xfc, 0xc3, 0xd1, 0x4d, 0x1b, 0x8a, 0xc7, 0xe5, 0x84, 0xe3, 0xa3, 0x51, 0x91, 0xa2, 0x47, 0x2, 0x21, 0xb3, 0x7f, 0xeb, 0xaa, 0x40, 0x2, 0x3, 0x3c, 0x20, 0x0, 0x24, 0x7, 0xc0, 0xc0, 0xa0, 0x70, 0xbc, 0xc1, 0xc0, 0xa4, 0x41, 0x2, 0x1, 0x4, 0x62, 0xb1, 0x86, 0x71, 0xc0, 0x85, 0x25, 0xd0, 0x5d, 0x0, 0x25, 0x86, 0xa3, 0xc5, 0x78, 0x8f, 0xc2, 0xca, 0x10, 0xdd, 0xdc, 0x6a, 0x10, 0x5a, 0xfa, 0x6, 0x22, 0x64, 0x80, 0x3d, 0x4a, 0x7b, 0x11, 0x65, 0x49, 0xb6, 0xbb, 0xf5, 0x3f, 0x97, 0x74, 0x8b, 0xb1, 0x4a, 0x5a, 0x79, 0x99, 0x43, 0x2a, 0xb, 0x8d, 0xc, 0x5d, 0x35, 0x98, 0xc7, 0x68, 0x88, 0x48, 0x73, 0x92, 0xa5, 0x31, 0xf8, 0x10, 0xa1, 0xca, 0x5f, 0x66, 0x5a, 0x46, 0x68, 0xea, 0x76, 0x32, 0x2e, 0x8f, 0xa7, 0xe, 0xad, 0x6e, 0x3d, 0xff, 0xfe, 0x60, 0xe8, 0x97, 0xc, 0x92, 0x1f, 0x8b, 0x18, 0xff, 0x59, 0x75, 0x66, 0x37, 0x2f, 0xc, 0x0, 0x3d, 0xf, 0x54, 0xca, 0xff, 0xfb, 0x90, 0x64, 0xef, 0x80, 0xf6, 0x1e, 0x59, 0xd2, 0x7b, 0x79, 0x7b, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0xc9, 0x65, 0x53, 0xed, 0xe0, 0xed, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x96, 0x5e, 0x1d, 0xa3, 0x14, 0x97, 0x28, 0x26, 0x46, 0x3e, 0x55, 0xff, 0xff, 0xf5, 0x5f, 0xf4, 0xed, 0x65, 0x17, 0x48, 0xc5, 0x35, 0x29, 0x29, 0xe1, 0x8e, 0x60, 0x38, 0x56, 0x3b, 0x56, 0x5b, 0xff, 0xca, 0xe4, 0x28, 0x31, 0x81, 0x8c, 0x21, 0x4, 0xc6, 0x5d, 0xe2, 0x30, 0x43, 0x4, 0x51, 0x38, 0x70, 0x58, 0x5c, 0x40, 0xa2, 0x90, 0xbf, 0xa3, 0xe3, 0xc, 0x42, 0x90, 0x38, 0x28, 0x39, 0x39, 0x12, 0x2a, 0x58, 0x8, 0xb7, 0x6c, 0x1, 0xa2, 0x31, 0x7a, 0x7a, 0xf5, 0x92, 0x59, 0x97, 0xc0, 0x8a, 0xa4, 0xa4, 0x2f, 0xca, 0x22, 0x59, 0x56, 0xe6, 0x79, 0xed, 0x9f, 0xaf, 0x5c, 0x2f, 0x54, 0xa3, 0xc1, 0x90, 0x2a, 0xdb, 0x59, 0x65, 0xfb, 0xa9, 0xc8, 0xbb, 0xa1, 0x17, 0xa8, 0xcb, 0xc0, 0xa4, 0xa3, 0xee, 0x59, 0xbf, 0xfc, 0x3e, 0xf2, 0x2, 0x65, 0x89, 0xd8, 0x66, 0x27, 0x54, 0x61, 0xff, 0xff, 0x7e, 0xfb, 0xa6, 0xa3, 0x49, 0x41, 0x77, 0x5e, 0x25, 0x3f, 0xff, 0x9a, 0xfe, 0xf, 0x5d, 0x19, 0xc0, 0x11, 0xcc, 0x49, 0x60, 0x80, 0x1f, 0x84, 0xe1, 0x41, 0xa1, 0x21, 0xb1, 0x16, 0xff, 0xff, 0xd1, 0xff, 0xea, 0x7f, 0x71, 0xb0, 0xa8, 0xa3, 0xa2, 0x4d, 0x2a, 0x60, 0xd0, 0x1, 0xcb, 0x30, 0x20, 0x2, 0x5, 0x32, 0x2, 0x40, 0x1b, 0xc5, 0x80, 0x26, 0x1, 0x9, 0x97, 0x10, 0xc0, 0xe1, 0x18, 0x70, 0x64, 0x16, 0x30, 0x6e, 0x38, 0xc8, 0x60, 0x30, 0x3e, 0xd1, 0x50, 0xe2, 0xc7, 0xbf, 0xc3, 0x83, 0x4d, 0x6d, 0x85, 0x36, 0xaf, 0x5e, 0x1b, 0x81, 0xa2, 0xa1, 0x3b, 0x26, 0x8a, 0xe7, 0x3a, 0xb7, 0x58, 0xd4, 0xca, 0x71, 0x96, 0x4f, 0x98, 0x6e, 0xc6, 0xf8, 0xfc, 0x8, 0xe0, 0xff, 0x50, 0xda, 0x3d, 0xac, 0xac, 0xcd, 0x19, 0x61, 0x21, 0xed, 0x67, 0x1a, 0x82, 0x2d, 0xad, 0x3, 0x54, 0xc5, 0x77, 0xff, 0x99, 0x47, 0xe3, 0x5d, 0xad, 0x8d, 0x57, 0x27, 0x81, 0xb6, 0xfd, 0xaf, 0x43, 0x8c, 0x3c, 0xf1, 0xe9, 0x88, 0x9d, 0x7, 0xc5, 0xd3, 0xc5, 0x24, 0xc4, 0x61, 0x24, 0xd, 0x38, 0x3, 0xc1, 0x42, 0x87, 0x94, 0x7, 0x31, 0xa8, 0x22, 0x51, 0xbf, 0xff, 0xff, 0xfe, 0x79, 0xe6, 0x65, 0x23, 0x8e, 0x25, 0xb8, 0x78, 0xac, 0xd2, 0x5, 0x81, 0xca, 0x13, 0x7, 0x32, 0xf7, 0xa, 0x2, 0x40, 0x0, 0x86, 0x40, 0x4d, 0x83, 0xfb, 0x6c, 0x16, 0x11, 0x31, 0x91, 0x77, 0xd5, 0x60, 0x8c, 0x88, 0x40, 0xc1, 0x28, 0x8e, 0x6c, 0xc, 0x20, 0x19, 0xb, 0xcb, 0xc2, 0x5d, 0xc7, 0x71, 0x27, 0xb, 0x96, 0xad, 0xc1, 0x1, 0xd, 0x6d, 0x88, 0x4c, 0x39, 0x3f, 0x3e, 0xd0, 0xa0, 0x36, 0xdd, 0x60, 0x8a, 0x6f, 0xc9, 0x21, 0x5e, 0x68, 0x2e, 0xff, 0xfb, 0x70, 0x64, 0xfd, 0x0, 0xf4, 0xf9, 0x59, 0xd2, 0xfb, 0x99, 0x6a, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xd5, 0x5d, 0x51, 0xed, 0x24, 0xfa, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x51, 0xcf, 0x9f, 0xd0, 0x9, 0x1d, 0x46, 0xb0, 0xe9, 0x73, 0x15, 0xa7, 0x42, 0xd1, 0x21, 0x68, 0x7a, 0xd8, 0x93, 0xab, 0x2e, 0xdd, 0x3a, 0xf9, 0xb3, 0x97, 0x1e, 0x9b, 0x5c, 0xb6, 0xa2, 0x79, 0x61, 0x3c, 0x7d, 0x78, 0xca, 0x7f, 0xe2, 0x58, 0x8a, 0x28, 0x61, 0x43, 0x2, 0xa2, 0xea, 0x84, 0x5f, 0xf3, 0xb9, 0xbc, 0xc, 0x98, 0xe, 0x84, 0x82, 0x21, 0x4d, 0x3, 0xc7, 0x9a, 0x78, 0x12, 0x61, 0x19, 0x63, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xfe, 0xd, 0xff, 0x57, 0x15, 0xf1, 0xbd, 0x8b, 0x8, 0x46, 0x10, 0x49, 0x6a, 0xd8, 0xb8, 0x44, 0xc7, 0x42, 0xa7, 0x0, 0x2, 0x0, 0x2, 0x20, 0x4, 0x44, 0x1f, 0xf0, 0x30, 0x74, 0xa3, 0x38, 0xa, 0x32, 0x31, 0x64, 0xda, 0x30, 0x23, 0x3, 0xc4, 0xe, 0x33, 0x80, 0x43, 0x23, 0x2d, 0x28, 0xf, 0x8, 0x4, 0x7c, 0x17, 0x7b, 0xac, 0x18, 0x18, 0x30, 0x4, 0x9, 0x9, 0x4b, 0x0, 0x4, 0x64, 0x6c, 0x4d, 0x2c, 0xb8, 0x32, 0x4d, 0xd2, 0xe5, 0x88, 0x74, 0xa2, 0xe1, 0xd3, 0x23, 0x2, 0x36, 0xfd, 0x8a, 0x95, 0x64, 0xc4, 0x35, 0x26, 0x9c, 0x1c, 0x71, 0x4d, 0x41, 0x6c, 0x33, 0x48, 0xc1, 0xfa, 0x34, 0xb9, 0xc0, 0x82, 0xc3, 0xcf, 0xf0, 0x87, 0x86, 0x74, 0xad, 0x12, 0x89, 0x8f, 0x90, 0x59, 0xc0, 0xfa, 0x24, 0xff, 0xff, 0xfd, 0xb5, 0x33, 0xf6, 0xd2, 0x71, 0xd4, 0x18, 0x47, 0x3d, 0x6a, 0xe7, 0x3d, 0x97, 0xb4, 0xd, 0xdd, 0x8a, 0x9d, 0xd4, 0xed, 0x68, 0x9e, 0xd, 0x36, 0x2e, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x63, 0x94, 0x72, 0x9, 0x53, 0xe3, 0x37, 0xea, 0x2f, 0xd1, 0xef, 0xe8, 0x9c, 0xb2, 0xe9, 0x5d, 0x37, 0xd, 0xe6, 0xcc, 0xd6, 0x60, 0x4, 0x0, 0x4, 0x0, 0x40, 0x2, 0xf7, 0xf4, 0x94, 0x20, 0xc, 0x2f, 0x29, 0xb, 0x14, 0x18, 0x79, 0x98, 0x10, 0x50, 0xe8, 0x1, 0x8c, 0xd4, 0x48, 0x90, 0x15, 0x1f, 0xd0, 0xa9, 0xff, 0xfb, 0x70, 0x64, 0xf0, 0x80, 0xf4, 0x8b, 0x59, 0x53, 0x7b, 0x8f, 0x3b, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0x89, 0x65, 0x51, 0xed, 0xb1, 0x13, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x4c, 0x31, 0x21, 0x26, 0x5, 0x2, 0x87, 0xa, 0xa3, 0x1, 0x3f, 0x24, 0x5, 0xbd, 0xf3, 0x7c, 0x54, 0xb5, 0x9b, 0x9c, 0x1e, 0xca, 0xfa, 0xc7, 0x65, 0x19, 0x5a, 0xdb, 0x89, 0x73, 0x2, 0xbd, 0xaa, 0x1, 0x7f, 0x52, 0xc5, 0xba, 0xd5, 0x29, 0x67, 0x8f, 0xa5, 0xb, 0xf2, 0xe8, 0xca, 0x7d, 0xc5, 0x75, 0x16, 0x5a, 0xc3, 0x9d, 0xc7, 0x16, 0xb8, 0x33, 0xa9, 0x4d, 0xb, 0x98, 0x13, 0x27, 0xd, 0x5a, 0xbc, 0x3e, 0xf8, 0x64, 0x9, 0xfc, 0x3a, 0xe8, 0xb1, 0x35, 0x84, 0x66, 0xe3, 0x88, 0x49, 0x5a, 0x72, 0x71, 0x6c, 0x7d, 0x13, 0x1, 0x60, 0xb9, 0x2b, 0x72, 0x4d, 0xa2, 0x22, 0xd2, 0x72, 0x82, 0x62, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x3f, 0x1d, 0x86, 0x4e, 0x37, 0xd, 0xe9, 0xeb, 0x98, 0x6c, 0xa2, 0x22, 0x38, 0xce, 0x12, 0x64, 0x89, 0x13, 0x4c, 0x14, 0x15, 0x3e, 0xb0, 0x0, 0xc0, 0x5, 0x10, 0x0, 0x0, 0x3e, 0x5f, 0x33, 0xe, 0x4c, 0x2e, 0x20, 0xc2, 0xb, 0x6, 0xd2, 0x37, 0xbd, 0xf, 0xb4, 0x43, 0xc3, 0x60, 0xa0, 0x78, 0xc0, 0x31, 0x8, 0xc4, 0xea, 0x6b, 0xd4, 0xe2, 0x13, 0x86, 0x45, 0x38, 0x58, 0x1, 0x90, 0xe, 0x92, 0x4d, 0x21, 0x7b, 0x45, 0xe5, 0x91, 0x28, 0x16, 0x5a, 0x38, 0xfa, 0xf5, 0xeb, 0xd9, 0xf8, 0xc7, 0x97, 0xd0, 0xcf, 0x44, 0xc7, 0x1, 0xa9, 0xc, 0xe4, 0xbc, 0xd, 0x89, 0x8b, 0xa9, 0x8d, 0x7b, 0x42, 0x51, 0x70, 0x8, 0x8e, 0x96, 0x89, 0xc9, 0xda, 0xd3, 0xfa, 0xdf, 0x3f, 0x77, 0x29, 0xd1, 0xa6, 0x44, 0x7b, 0x56, 0xba, 0x62, 0x9d, 0xd8, 0xbd, 0xcb, 0xdb, 0xe3, 0x5e, 0x6b, 0x11, 0xda, 0xd3, 0xf3, 0x56, 0x8a, 0x4d, 0x1e, 0x38, 0x5f, 0x7b, 0x96, 0xaf, 0x4a, 0xc2, 0x99, 0x11, 0x80, 0x7, 0x5f, 0x7a, 0xa3, 0x84, 0xc5, 0x63, 0x88, 0x22, 0x85, 0x8b, 0xff, 0xff, 0xd2, 0xb7, 0x31, 0x99, 0x26, 0x4f, 0x56, 0xda, 0xe4, 0xc5, 0x88, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x0, 0xf4, 0xdd, 0x59, 0xd3, 0xfb, 0x6f, 0x4b, 0xd8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x14, 0x5, 0x65, 0x4d, 0xad, 0xbd, 0x2f, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xa6, 0x29, 0xa5, 0x47, 0x47, 0x86, 0x5, 0xa2, 0x51, 0x6f, 0xff, 0xa2, 0xd0, 0x4, 0x20, 0xa8, 0x0, 0x64, 0x3, 0x79, 0x8e, 0x44, 0x8f, 0x80, 0xd1, 0xa8, 0x1c, 0x16, 0x1c, 0x6b, 0xec, 0x9d, 0xa3, 0x26, 0x88, 0x28, 0x38, 0x73, 0x6c, 0xd3, 0x87, 0x41, 0x45, 0x16, 0xf2, 0xd1, 0xb, 0x3, 0x47, 0xb6, 0xb2, 0xdd, 0x9e, 0x99, 0x36, 0x56, 0x9d, 0xa9, 0x4d, 0x20, 0xf2, 0x55, 0x6c, 0xa6, 0xd5, 0xe0, 0x1e, 0x56, 0xc0, 0x49, 0x76, 0x35, 0x29, 0x4f, 0x79, 0x86, 0xcd, 0xcf, 0x9d, 0x63, 0x25, 0x31, 0xd3, 0x68, 0x42, 0x9, 0x28, 0xcd, 0xd8, 0x5e, 0xaa, 0xe8, 0xa2, 0x66, 0xfd, 0x95, 0xa3, 0xae, 0x1f, 0x9a, 0x1d, 0xa0, 0xbb, 0xe, 0x2d, 0xac, 0xec, 0xce, 0x64, 0x15, 0xa9, 0xc2, 0x1d, 0xa6, 0xb0, 0xac, 0x2, 0x8d, 0x2f, 0x61, 0x4a, 0xeb, 0x2f, 0xf8, 0x6b, 0x76, 0xef, 0x72, 0x48, 0xf4, 0xaa, 0x65, 0xa2, 0x65, 0x46, 0x1, 0xf0, 0x51, 0x8, 0xff, 0xff, 0xeb, 0xe5, 0x8, 0x92, 0x76, 0x38, 0xb9, 0x37, 0xe5, 0x2a, 0x60, 0x8c, 0x34, 0xd2, 0xa8, 0x2f, 0x59, 0x8f, 0xfe, 0xe, 0x29, 0xf5, 0xd4, 0x0, 0xc0, 0x26, 0x0, 0x20, 0x0, 0xce, 0x65, 0x22, 0xe3, 0x4, 0xa6, 0x42, 0x26, 0x16, 0x1d, 0x5, 0x23, 0x9a, 0x24, 0x68, 0x5, 0x14, 0xc4, 0xc7, 0xc, 0x38, 0xd, 0xd6, 0x52, 0xd, 0x81, 0x95, 0xa8, 0x23, 0x36, 0x12, 0x17, 0x7d, 0x5b, 0xb3, 0x20, 0xab, 0x5e, 0x43, 0x72, 0x6a, 0x7a, 0x6c, 0x7c, 0x2c, 0x18, 0xb0, 0xc3, 0xfe, 0xc9, 0xbb, 0x66, 0x9, 0xc9, 0xee, 0x15, 0xf9, 0x98, 0xeb, 0x89, 0x56, 0xbb, 0x9f, 0xbe, 0x88, 0x73, 0x2d, 0xe, 0xa5, 0xa8, 0xac, 0x87, 0x1d, 0xae, 0xc3, 0x36, 0x9f, 0xe5, 0xb8, 0xdb, 0xa2, 0xf3, 0x28, 0x79, 0xe9, 0xb7, 0xcf, 0x35, 0x2d, 0xc2, 0xbf, 0x56, 0xf6, 0xc3, 0x76, 0xcf, 0xbd, 0x54, 0xb6, 0x9a, 0x8e, 0xc2, 0x72, 0xdb, 0x54, 0xe5, 0x3a, 0xb4, 0xdc, 0xa4, 0xa9, 0xa7, 0xde, 0xf, 0x88, 0x5, 0x87, 0x46, 0x4, 0x44, 0x7, 0x7f, 0xff, 0xee, 0xcf, 0x28, 0xd0, 0xd, 0x8, 0x46, 0x24, 0xf9, 0x5c, 0x41, 0xc5, 0x8a, 0xac, 0xe7, 0x17, 0x65, 0x11, 0x15, 0x3d, 0xff, 0xc1, 0x40, 0x12, 0x80, 0x36, 0x1, 0x4c, 0x22, 0xc8, 0x3, 0xf1, 0xd2, 0xea, 0xe4, 0xcc, 0xff, 0xfb, 0x80, 0x64, 0xee, 0x80, 0xf4, 0xfe, 0x59, 0xd2, 0xeb, 0x4c, 0x3c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0xd5, 0x5d, 0x4f, 0xad, 0x30, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x86, 0x30, 0x23, 0xc7, 0x6d, 0x9c, 0xfd, 0x40, 0xab, 0x63, 0xcc, 0xca, 0x2, 0x8, 0x0, 0x3, 0x83, 0xa0, 0x36, 0x58, 0xc2, 0x94, 0x10, 0xc, 0x91, 0xaf, 0x36, 0x0, 0x1b, 0xae, 0x3a, 0x59, 0x20, 0x28, 0x32, 0x97, 0x74, 0xfe, 0x88, 0x67, 0x88, 0xfe, 0xa9, 0x40, 0xb2, 0xf2, 0xe1, 0x39, 0xe7, 0xe, 0x6a, 0x5a, 0x7a, 0x2b, 0x3b, 0x17, 0xb6, 0x5e, 0x24, 0x8, 0x2d, 0xad, 0x58, 0xb6, 0xdf, 0xd9, 0xee, 0xcc, 0xa1, 0xba, 0xd2, 0x66, 0x5e, 0x6b, 0xcc, 0xaa, 0xbd, 0xa8, 0xaf, 0x55, 0xb4, 0xd6, 0x96, 0xcb, 0xee, 0xf9, 0x93, 0xac, 0x68, 0xee, 0x0, 0xe5, 0x1c, 0x3b, 0x8f, 0xb2, 0x11, 0x53, 0x65, 0xc8, 0xf6, 0x79, 0xf6, 0xe7, 0x1b, 0x26, 0xaf, 0x35, 0x37, 0xff, 0xff, 0xff, 0xff, 0xb9, 0xca, 0x1e, 0x4c, 0xad, 0x32, 0x21, 0xf5, 0xa8, 0xe1, 0xeb, 0x79, 0xe2, 0xaf, 0x25, 0x15, 0x49, 0xd3, 0x14, 0x51, 0xa5, 0x8e, 0x58, 0x98, 0xdf, 0xff, 0xbc, 0xca, 0xb8, 0x16, 0xd1, 0xa4, 0x80, 0x51, 0x20, 0x6e, 0xd8, 0x4c, 0xeb, 0x36, 0x58, 0x2e, 0x31, 0xc8, 0x73, 0x43, 0x2f, 0x5, 0x8, 0xa2, 0xd1, 0x31, 0x60, 0x34, 0x20, 0xbb, 0xe9, 0xe2, 0xd6, 0x19, 0xe0, 0x8, 0xe8, 0x38, 0x51, 0xc5, 0x77, 0x16, 0x64, 0x8, 0xd6, 0xa0, 0x55, 0xc6, 0x86, 0x85, 0xd6, 0xdd, 0x82, 0x6a, 0xd, 0x82, 0x13, 0x62, 0x58, 0xb4, 0xc, 0x3e, 0xfb, 0x78, 0x1b, 0x3, 0x21, 0x6d, 0x8d, 0xa1, 0x5b, 0x48, 0xb5, 0x1c, 0x19, 0xcf, 0xe6, 0x85, 0x79, 0xe6, 0x4b, 0x10, 0x1a, 0x26, 0x18, 0xd, 0x91, 0xb1, 0x5, 0x3b, 0xfb, 0x53, 0xee, 0x13, 0xa9, 0x52, 0x59, 0x56, 0xa5, 0x88, 0xd1, 0x99, 0x13, 0x82, 0x1, 0x42, 0x33, 0x66, 0x99, 0x5a, 0x6d, 0x51, 0x84, 0xa6, 0xab, 0x47, 0x5b, 0xb6, 0xe4, 0x98, 0x16, 0xc3, 0x51, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbd, 0x73, 0x2f, 0x68, 0x48, 0x80, 0x51, 0x5, 0x61, 0x17, 0x2c, 0x93, 0xad, 0x41, 0x53, 0x6a, 0x43, 0x53, 0xd2, 0x1, 0x23, 0x48, 0x5a, 0x53, 0x7f, 0xfc, 0x2e, 0xb2, 0x8, 0x82, 0x60, 0x86, 0x8c, 0xa8, 0x49, 0x7f, 0x85, 0x89, 0xc6, 0x81, 0x45, 0xc, 0x72, 0x11, 0x5e, 0x20, 0x90, 0x5, 0xf5, 0x1, 0x11, 0x1e, 0x2, 0xf8, 0x31, 0xee, 0xd4, 0x6a, 0x48, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x80, 0xf4, 0xcd, 0x58, 0x53, 0x6b, 0x6c, 0x2c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0x21, 0x5d, 0x4d, 0xad, 0x31, 0x6f, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xdc, 0x3c, 0x16, 0xf5, 0xa7, 0x96, 0xc4, 0x83, 0xb6, 0x1f, 0xea, 0x68, 0x93, 0xa0, 0x4b, 0xc5, 0x20, 0xda, 0x82, 0xa6, 0x9e, 0x3c, 0x46, 0xaf, 0x8c, 0xeb, 0x17, 0x99, 0xd1, 0x40, 0x15, 0x3a, 0xe9, 0xc6, 0xcc, 0x9, 0x71, 0xb6, 0xf7, 0x17, 0x92, 0xd2, 0xcf, 0x9d, 0xf9, 0x19, 0x91, 0x11, 0xa1, 0x67, 0xe6, 0xee, 0xe6, 0x4e, 0x4b, 0x1b, 0xdf, 0x2b, 0xdd, 0x38, 0xad, 0x92, 0xaa, 0xa8, 0xb1, 0xbf, 0xb5, 0x14, 0xa7, 0x19, 0x72, 0x29, 0x2d, 0x5b, 0x5c, 0x4a, 0x2, 0x40, 0xe8, 0x90, 0xac, 0x81, 0xe6, 0x7f, 0xfb, 0x7c, 0xd2, 0xab, 0x2e, 0x6a, 0x18, 0x41, 0xdd, 0x67, 0xe5, 0x23, 0xab, 0x20, 0x5, 0x1e, 0x1a, 0x22, 0xff, 0xff, 0x33, 0xf0, 0x15, 0x40, 0xad, 0x2, 0x91, 0x21, 0x74, 0x5, 0x17, 0x1a, 0x2, 0x2e, 0x41, 0x86, 0x92, 0x88, 0xb7, 0x42, 0x4, 0xc9, 0x88, 0xcc, 0x5a, 0x0, 0x50, 0x2, 0x6e, 0x51, 0x5c, 0x9a, 0xd8, 0x35, 0x69, 0x9b, 0x4d, 0x84, 0x89, 0x77, 0xc6, 0xa1, 0xd2, 0x43, 0x61, 0xba, 0x69, 0x96, 0x91, 0x11, 0x2e, 0x1b, 0x10, 0xac, 0x96, 0xb6, 0xb, 0x8a, 0x9b, 0x74, 0x8e, 0x2e, 0xb9, 0x79, 0x1, 0x4d, 0xdc, 0x90, 0xb9, 0x52, 0x59, 0x37, 0x27, 0x66, 0x7a, 0x56, 0xbf, 0x8f, 0x9a, 0x38, 0xc9, 0xca, 0x9, 0x53, 0xab, 0xac, 0xa8, 0xea, 0x1b, 0x88, 0x68, 0xb2, 0xcb, 0xc6, 0x15, 0x3c, 0x40, 0x4a, 0x4c, 0x8, 0xb2, 0x58, 0xcc, 0x23, 0x13, 0xd9, 0x55, 0xd5, 0xd9, 0xda, 0x59, 0xc3, 0xe6, 0xca, 0x5b, 0x68, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x49, 0xa9, 0x23, 0x44, 0xd0, 0x65, 0x54, 0x26, 0x93, 0xde, 0x6d, 0x84, 0xbd, 0xad, 0xd8, 0xab, 0xa9, 0x26, 0xb7, 0x20, 0x76, 0xb1, 0x96, 0x35, 0x4d, 0x54, 0xca, 0xf0, 0xc6, 0x1b, 0x63, 0xcd, 0xc4, 0xaa, 0x58, 0xed, 0x4a, 0x1e, 0x34, 0x6d, 0x12, 0x2d, 0xe0, 0xb0, 0xd1, 0xa8, 0xcb, 0xa, 0x65, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x80, 0xf4, 0xdf, 0x59, 0x52, 0xeb, 0x1b, 0x48, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0x21, 0x49, 0x4f, 0xed, 0x24, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x8c, 0x47, 0xc1, 0xa3, 0x54, 0x81, 0x90, 0x6, 0xc0, 0xb, 0x40, 0x91, 0x52, 0xe8, 0xed, 0x2d, 0xd8, 0x6a, 0x2, 0x9e, 0x5d, 0x47, 0xcc, 0xd, 0x60, 0x35, 0x1d, 0x9f, 0xb1, 0x7c, 0xb8, 0x6e, 0x79, 0x68, 0xea, 0x9a, 0xf5, 0x43, 0x61, 0x5b, 0x4c, 0x59, 0x8d, 0xe5, 0x63, 0xe2, 0xd3, 0x20, 0xc2, 0xbd, 0x4b, 0x5e, 0xb5, 0xb7, 0x41, 0xb8, 0x71, 0x3a, 0xbb, 0x18, 0x83, 0x79, 0xdd, 0x79, 0xd8, 0x6b, 0x1, 0x2c, 0xd5, 0x54, 0xba, 0xe3, 0x4c, 0xb8, 0xe6, 0x72, 0x18, 0xfc, 0xd, 0x54, 0xb5, 0xf6, 0xdf, 0xff, 0xdc, 0xbd, 0x66, 0x73, 0xa3, 0x51, 0x20, 0x7a, 0xcd, 0xff, 0xff, 0x9e, 0x6d, 0x4b, 0xac, 0xc0, 0xf0, 0x74, 0x48, 0x76, 0xa9, 0x37, 0xf, 0x2c, 0x96, 0xe1, 0x75, 0x70, 0x7, 0x1a, 0x3, 0x52, 0x12, 0x53, 0x29, 0x5e, 0x10, 0x9e, 0x15, 0x18, 0xcc, 0xc4, 0x4d, 0x8f, 0x49, 0x55, 0x28, 0x11, 0x10, 0x19, 0x14, 0x30, 0xd, 0xee, 0x8, 0x20, 0x85, 0xaa, 0x36, 0x84, 0xd6, 0x5b, 0x20, 0x68, 0xac, 0xc9, 0xd9, 0x78, 0xe1, 0xf8, 0xa0, 0xc1, 0x8, 0xc0, 0x96, 0x32, 0xb8, 0x15, 0xc, 0x0, 0x62, 0x68, 0x90, 0x23, 0x32, 0xe8, 0x74, 0x30, 0xc8, 0x14, 0x6f, 0xa1, 0xb, 0x30, 0x5e, 0x67, 0x1f, 0x6, 0x9, 0x49, 0xc7, 0x25, 0xe5, 0xfe, 0x7a, 0xdf, 0x3, 0xe9, 0x34, 0x6c, 0x99, 0xac, 0x8b, 0x54, 0xeb, 0x9e, 0x2b, 0x88, 0xa6, 0xc6, 0x42, 0x5b, 0x33, 0xab, 0x1a, 0x24, 0x20, 0x44, 0x26, 0x83, 0x46, 0x83, 0xc3, 0x8b, 0x8d, 0x4b, 0xde, 0xb3, 0x26, 0xa2, 0x59, 0x2b, 0x1a, 0xd, 0xc5, 0xd6, 0x91, 0x3c, 0xea, 0x9f, 0xff, 0xff, 0xff, 0xfc, 0x43, 0x8e, 0xb3, 0x59, 0x26, 0x16, 0x9d, 0x56, 0x58, 0x95, 0xea, 0x4d, 0x57, 0xcc, 0xb4, 0xe2, 0x80, 0x2b, 0xc1, 0x22, 0x98, 0xa8, 0x63, 0x21, 0x16, 0x2, 0x2, 0xa1, 0x86, 0x3a, 0xc1, 0xcf, 0x28, 0xc8, 0x4c, 0x41, 0x43, 0x4, 0x88, 0xd3, 0x84, 0x46, 0x84, 0xae, 0x2, 0x8e, 0x95, 0x27, 0xbb, 0x5e, 0x65, 0xb, 0xd, 0x20, 0x11, 0x8e, 0x8f, 0x8, 0x88, 0x9b, 0xe1, 0xca, 0x96, 0xb8, 0xb9, 0x40, 0xb8, 0x5c, 0x56, 0xa2, 0x15, 0x41, 0x9e, 0xce, 0x62, 0x4b, 0x36, 0x81, 0x42, 0x8b, 0xb2, 0x2a, 0x39, 0x98, 0x2c, 0xe, 0xd0, 0x72, 0xda, 0xf2, 0x24, 0xff, 0xfb, 0x70, 0x64, 0xfa, 0x80, 0xf4, 0x6c, 0x55, 0xd1, 0xeb, 0x78, 0x49, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xa1, 0x39, 0x49, 0xed, 0x30, 0xf3, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xbe, 0x56, 0x8c, 0x49, 0x10, 0x92, 0x9, 0xba, 0x32, 0xcf, 0x3d, 0xa4, 0xb9, 0xcd, 0x2b, 0x7b, 0xe4, 0x34, 0x8e, 0x62, 0x63, 0x49, 0x8c, 0x84, 0x9e, 0x96, 0xb6, 0xfd, 0xfb, 0x63, 0x5, 0x8b, 0x0, 0xa4, 0x50, 0x4a, 0x39, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x6c, 0x69, 0x9f, 0xee, 0x64, 0xb2, 0x4b, 0xb4, 0x47, 0x7e, 0x3e, 0xac, 0x15, 0x80, 0x58, 0xcd, 0x7a, 0x96, 0x7b, 0xa5, 0xbf, 0x7e, 0x0, 0xf, 0x23, 0x2b, 0x73, 0x3a, 0xc4, 0x17, 0x9, 0xa7, 0x80, 0x66, 0x55, 0xe6, 0x64, 0x80, 0xe1, 0x43, 0x9e, 0xa, 0x8e, 0xe3, 0xa0, 0x4d, 0x64, 0x89, 0x12, 0xd7, 0x14, 0xd9, 0x41, 0x20, 0x8, 0xd4, 0xcc, 0x9b, 0xd4, 0x75, 0x7f, 0xf, 0x48, 0x4d, 0x98, 0x82, 0x5, 0x63, 0xf8, 0xd6, 0x83, 0x23, 0xe6, 0x48, 0xd9, 0xd8, 0xdf, 0xb1, 0x90, 0xc9, 0xa4, 0x27, 0x7a, 0xf0, 0x38, 0xfb, 0x65, 0x94, 0xef, 0xf8, 0xd5, 0xca, 0xdb, 0x49, 0xb2, 0x55, 0xc8, 0x5d, 0x19, 0x56, 0xc9, 0x1d, 0x22, 0x6d, 0x61, 0x51, 0x20, 0x5d, 0x3, 0x6c, 0x2b, 0x93, 0x8a, 0xab, 0xd4, 0x61, 0x32, 0x6, 0xc8, 0x91, 0x13, 0x74, 0x91, 0x17, 0xbf, 0x8d, 0x76, 0x71, 0x74, 0x46, 0x9a, 0xb8, 0xc5, 0x97, 0x7d, 0xbd, 0xdd, 0xe1, 0xef, 0xdf, 0x0, 0xd1, 0xb7, 0x33, 0xe, 0xae, 0xcf, 0xb5, 0xf8, 0x5, 0x78, 0x5b, 0x61, 0x8b, 0xb5, 0x70, 0x57, 0x47, 0x2c, 0x3, 0x39, 0x9e, 0x41, 0x5a, 0x3, 0x4a, 0x5c, 0x85, 0x54, 0x5c, 0x80, 0x52, 0x53, 0xa1, 0x44, 0x90, 0x7b, 0x1e, 0x8a, 0xc4, 0xe9, 0xca, 0xc, 0xa, 0x86, 0xc6, 0xe0, 0xc2, 0x24, 0x51, 0x11, 0x29, 0xdf, 0x4, 0x92, 0x35, 0x6d, 0x25, 0x35, 0x8d, 0x43, 0x43, 0xe3, 0xa2, 0x39, 0xea, 0xd2, 0xe0, 0xb8, 0x4, 0x6d, 0xa2, 0x64, 0x2a, 0x2c, 0xcb, 0x12, 0x94, 0x53, 0xe8, 0xa6, 0x44, 0x58, 0xe6, 0xad, 0xee, 0x93, 0xf1, 0xd9, 0x54, 0x48, 0x89, 0xd9, 0x5f, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x81, 0xf4, 0x75, 0x55, 0xd0, 0xfb, 0x49, 0x5c, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x10, 0x5d, 0x3b, 0x43, 0xed, 0x24, 0xcf, 0x28, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x29, 0xaf, 0xda, 0xa9, 0xd2, 0x4a, 0xf, 0xa, 0x95, 0x2c, 0x6f, 0x2b, 0x58, 0xc8, 0xcb, 0xb5, 0x28, 0xc4, 0xea, 0xa9, 0x47, 0x18, 0x5b, 0xef, 0x56, 0x6b, 0xdb, 0x1d, 0xcd, 0x52, 0x50, 0x26, 0xbb, 0x48, 0x75, 0x59, 0x17, 0xb6, 0x30, 0xc, 0x2c, 0x50, 0xe5, 0xc2, 0x4c, 0x20, 0xc8, 0x1c, 0x40, 0x10, 0x34, 0x81, 0x14, 0xf2, 0x2b, 0x24, 0xaa, 0xed, 0xa4, 0x12, 0x5a, 0x34, 0xab, 0x1a, 0x45, 0x35, 0x16, 0xbb, 0x10, 0xc9, 0xb1, 0x80, 0xb8, 0x94, 0x4, 0x45, 0xe4, 0xc9, 0x29, 0xc0, 0x3c, 0x4b, 0x14, 0x9a, 0x12, 0xba, 0xd9, 0x55, 0xb5, 0x9a, 0x92, 0x24, 0x4f, 0x46, 0xca, 0xab, 0x4a, 0x88, 0x81, 0xb1, 0x17, 0x61, 0x3c, 0xec, 0xdf, 0x6f, 0x72, 0x30, 0x50, 0xd0, 0x21, 0xe8, 0x63, 0x24, 0xcd, 0x9b, 0xe5, 0x90, 0x3e, 0x51, 0x36, 0x72, 0x9a, 0xe7, 0x71, 0xd0, 0x24, 0x7c, 0xb7, 0x7e, 0x5c, 0x3a, 0x34, 0x58, 0x3e, 0x44, 0x5e, 0x48, 0x6f, 0xe8, 0x20, 0x45, 0x79, 0x36, 0x66, 0x27, 0x5d, 0xae, 0x10, 0xc, 0x42, 0x86, 0x4b, 0xcc, 0x35, 0x24, 0x4a, 0x6, 0x8c, 0xc8, 0x55, 0x2d, 0x4c, 0x21, 0xc1, 0x96, 0x90, 0x2a, 0x36, 0x6, 0x89, 0x8e, 0x2a, 0x75, 0x3e, 0xca, 0x64, 0x10, 0x87, 0xc7, 0xa6, 0xc4, 0xe5, 0x8c, 0x8f, 0xb4, 0xd6, 0x79, 0x71, 0xf1, 0xfa, 0xd5, 0xab, 0x9d, 0x3a, 0x76, 0xc5, 0x92, 0xea, 0x3f, 0xfc, 0x5b, 0x4e, 0x76, 0x14, 0xf, 0xad, 0x86, 0x84, 0x66, 0x34, 0x6d, 0xdd, 0x79, 0x33, 0xb2, 0xe9, 0x4b, 0x39, 0x94, 0x86, 0x82, 0xa0, 0xcb, 0xe6, 0x9d, 0x3c, 0xda, 0xf4, 0x76, 0xdc, 0x7b, 0xa6, 0xf4, 0x83, 0xbd, 0x1e, 0x29, 0x26, 0xb5, 0x9a, 0xa6, 0x53, 0x41, 0x40, 0x68, 0x90, 0x83, 0x4d, 0xd8, 0xca, 0x58, 0x6b, 0xa6, 0xb5, 0xf5, 0xda, 0x0, 0xaa, 0x0, 0x5e, 0x6b, 0x41, 0x75, 0x82, 0x2, 0x85, 0x20, 0x32, 0xb0, 0x5a, 0xd4, 0x8b, 0xb1, 0x93, 0x97, 0xf5, 0xff, 0xfb, 0x60, 0x64, 0xf9, 0x0, 0xf3, 0xf7, 0x3f, 0x52, 0x7b, 0x2c, 0x4c, 0x28, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xf, 0x80, 0xff, 0x43, 0xec, 0x3d, 0x2c, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x38, 0x52, 0x19, 0x8b, 0x46, 0x59, 0x70, 0x7a, 0x78, 0x46, 0x3b, 0x15, 0x83, 0x12, 0xad, 0xa8, 0xca, 0xd3, 0x9b, 0xa9, 0x37, 0x2c, 0xab, 0x59, 0x48, 0xdb, 0x2a, 0xbb, 0x9, 0xcb, 0x96, 0x43, 0x5b, 0x4e, 0x4a, 0xb3, 0xa8, 0xf1, 0xec, 0x26, 0xf6, 0xa6, 0x3d, 0x48, 0x5e, 0x8f, 0xf2, 0x61, 0xaa, 0x95, 0x96, 0x58, 0xa2, 0x54, 0x9b, 0xd1, 0xc4, 0xd3, 0x10, 0x78, 0xd3, 0x22, 0xb7, 0x1e, 0xd1, 0x22, 0x41, 0x9d, 0x8f, 0x56, 0xf8, 0x25, 0x44, 0x50, 0xc6, 0xcc, 0x8b, 0xe5, 0xcb, 0x5b, 0x72, 0x48, 0xff, 0xa4, 0x1, 0xd1, 0x70, 0x0, 0xc6, 0xb, 0x1d, 0x7, 0x3, 0x85, 0xc, 0xc9, 0x4, 0x66, 0xd0, 0xa4, 0xe, 0x8e, 0x11, 0x0, 0x20, 0x48, 0xdb, 0xc1, 0x60, 0x29, 0x58, 0x8d, 0x1, 0xa0, 0xd7, 0xc9, 0x62, 0xd3, 0x21, 0x12, 0xa2, 0x82, 0x84, 0xd4, 0x78, 0xd4, 0xa1, 0x64, 0x6c, 0x89, 0xc9, 0x3, 0x1, 0x98, 0x95, 0x4f, 0x23, 0x38, 0xf1, 0x47, 0x42, 0x46, 0xa3, 0x89, 0x65, 0x73, 0x89, 0x3b, 0x5e, 0x39, 0xcf, 0xf9, 0xda, 0x73, 0xf0, 0xd3, 0x78, 0x33, 0x95, 0xa8, 0x4b, 0x7e, 0xff, 0xa3, 0xfd, 0x4f, 0xff, 0xdf, 0xff, 0x45, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xec, 0x0, 0xf3, 0x70, 0x38, 0xce, 0x7b, 0x9, 0x34, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xd, 0xd0, 0xef, 0x2f, 0xec, 0x30, 0xcf, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xee, 0x0, 0xf3, 0x41, 0x3b, 0x48, 0xe3, 0xc, 0x33, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xb, 0x88, 0xad, 0x17, 0x8c, 0x24, 0xc7, 0xc0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x10, 0x64, 0xdd, 0x8f, 0xf0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0xa4, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
// This here is basically the buffer which we want to fuzz with this program.
// static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
// asegment=timestamps="60|150"
// static const char *filter_descr = "aresample=8000,ebur128=audio=1:meter=18,aformat=sample_fmts=s16:channel_layouts=mono";
char* fuzzbuf[300]; // Our fuzzer thing...
// static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -"; // Not needed...
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
#include <string.h>
int read_buffer(void *opaque, uint8_t *buf, int buf_size);
void try_fuzz_audio(void);
unsigned int data_pointer = 0; // Where we are in the input data
FILE *fp_open;
int read_buffer(void *opaque, uint8_t *buf, int buf_size){
if (!feof(fp_open)) {
int true_size=fread(buf,1,buf_size,fp_open);
return true_size;
} else {
return AVERROR_EOF; // return -1; // We actually need to return AVERROR_EOF instead of -1 here I think
}
}
#include <stdio.h>
unsigned char* inbuffer=NULL;
AVIOContext *avio_in=NULL;
static int open_input_file()
{
data_pointer = 0; // Set to zero before starting to read...
const AVCodec *dec;
int ret = 0;
fp_open = fmemopen(STATIC_MP3_INPUT, sizeof(STATIC_MP3_INPUT), "r"); // fopen("small.mp3", "rb");
if (fp_open == NULL) {
return 1;
}
inbuffer = (unsigned char*)av_malloc(sizeof(STATIC_MP3_INPUT));
avio_in =avio_alloc_context(inbuffer, sizeof(STATIC_MP3_INPUT),0,NULL,read_buffer,NULL,NULL);
if(avio_in==NULL){
goto end;
}
fmt_ctx->pb=avio_in;
fmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
if ((ret = avformat_open_input(&fmt_ctx, "small.mp3", NULL, NULL)) < 0) { // was originally: if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
goto end;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
goto end;
}
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find an audio stream in the input file\n");
goto end;
}
audio_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
goto end;
//return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[audio_stream_index]->codecpar);
/* init the audio decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
goto end;
}
end:
return ret;
}
static int init_filters(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
static const int out_sample_rate = 8000;
const AVFilterLink *outlink;
AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer audio source: the decoded frames from the decoder will be inserted here. */
if (dec_ctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&dec_ctx->ch_layout, dec_ctx->ch_layout.nb_channels);
ret = snprintf(args, sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=",
time_base.num, time_base.den, dec_ctx->sample_rate,
av_get_sample_fmt_name(dec_ctx->sample_fmt));
av_channel_layout_describe(&dec_ctx->ch_layout, args + ret, sizeof(args) - ret);
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
goto end;
}
/* buffer audio sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "sample_formats", "s16",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
goto end;
}
ret = av_opt_set(buffersink_ctx, "channel_layouts", "mono",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
goto end;
}
ret = av_opt_set_array(buffersink_ctx, "samplerates", AV_OPT_SEARCH_CHILDREN,
0, 1, AV_OPT_TYPE_INT, &out_sample_rate);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize audio buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
/* Print summary of the sink buffer
* Note: args buffer is reused to store channel layout string */
outlink = buffersink_ctx->inputs[0];
av_channel_layout_describe(&outlink->ch_layout, args, sizeof(args));
av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
(int)outlink->sample_rate,
(char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
args);
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
static void print_frame(const AVFrame *frame)
{
const int n = frame->nb_samples * frame->ch_layout.nb_channels;
const uint16_t *p = (uint16_t*)frame->data[0];
const uint16_t *p_end = p + n;
while (p < p_end) {
fputc(*p & 0xff, stdout);
fputc(*p>>8 & 0xff, stdout);
p++;
}
fflush(stdout);
}
void try_fuzz_audio() {
int ret;
AVPacket *packet = av_packet_alloc();
AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
if (!packet || !frame || !filt_frame) {
fprintf(stderr, "Could not allocate frame or packet\n");
exit(1);
}
fmt_ctx = avformat_alloc_context();
if ((ret = open_input_file()) < 0)
goto end;
if ((ret = init_filters(fuzzbuf)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == audio_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
fprintf(stderr, "Ok, so we afefefeffefefefefew going to the thing...\n");
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
goto end;
}
if (ret >= 0) {
/* push the audio data from decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
break;
}
/* pull filtered audio from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
}
if (ret < 0) {
goto end;
}
// print_frame(filt_frame);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
}
av_packet_unref(packet);
}
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
printf("Pulling the rest of the bullshit here...\n");
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
}
if (ret < 0) {
goto end;
}
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
//avformat_close_input(&fmt_ctx);
avformat_free_context(fmt_ctx);
// avformat_close_input
av_packet_free(&packet);
av_frame_free(&frame);
av_frame_free(&filt_frame);
if (fp_open) {
//printf("Closing file...\n");
fclose(fp_open);
}
// Freeing the bullshit:::
//fprintf(stderr, "Freeing the bullshit...\n");
//av_free(avio_in);
//av_free(inbuffer);
if (ret < 0 && ret != AVERROR_EOF) {
return;
}
return;
}
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
// Main fuzzing entrypoint.
// Just copy the entire thing.
if (size >= sizeof(fuzzbuf)-1) {
return 0; // Return early on inputs too big.
}
// memcpy that thing into the fuzz buffer.
// void *memcpy(void dest[restrict .n], const void src[restrict .n],
// size_t n);
memset(fuzzbuf, 0x00, sizeof(fuzzbuf));
memcpy(fuzzbuf, data, size);
// Now call the function
try_fuzz_audio();
return 0; // Now just exit...
}
/*
int main(int argc, char **argv)
{
memset(fuzzbuf, 0x00, sizeof(fuzzbuf)); // Zero out the buffer.
// Now read from stdin into that buffer
read(0, fuzzbuf, sizeof(fuzzbuf));
try_fuzz_audio(); // First try with the audio
printf("Reached the end...\n");
return 0;
}
*/
So let’s make it better by getting the video thing too maybe????
Ok, so here is the thing:
#include <unistd.h>
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include <stdio.h>
#include <stdint.h>
// Hardcoded mp3 file as bytebuffer such that we do not need to reload from disk on every fuzz iteration...
volatile static uint8_t STATIC_MP3_INPUT[] = { 0xff, 0xfb, 0x90, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x69, 0x6e, 0x67, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x15, 0x99, 0x0, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x50, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x4, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x20, 0x24, 0x5, 0x47, 0x4d, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x15, 0x99, 0xf3, 0x91, 0xbd, 0x8a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfb, 0xc0, 0x64, 0x0, 0x0, 0x1, 0x4, 0x0, 0x4a, 0x6d, 0x0, 0x0, 0x8, 0x0, 0x0, 0xf, 0xf0, 0xa0, 0x0, 0x1, 0x17, 0x68, 0xfd, 0x2d, 0xb9, 0xbd, 0x80, 0x0, 0x0, 0x0, 0x3f, 0xc3, 0x0, 0x0, 0x0, 0xb6, 0xe6, 0xc0, 0x25, 0x25, 0x10, 0x60, 0x0, 0x8, 0x2, 0x0, 0x80, 0x20, 0x5c, 0xfc, 0x10, 0x70, 0x61, 0x60, 0xf9, 0xf2, 0xef, 0x44, 0xb8, 0x21, 0xca, 0x7c, 0x4e, 0x7f, 0xff, 0xc4, 0x1, 0x86, 0x44, 0x20, 0x0, 0x80, 0x20, 0x0, 0x0, 0x5a, 0xdb, 0x92, 0x8c, 0x0, 0x0, 0x5f, 0x46, 0x18, 0x2c, 0xd2, 0xc, 0x34, 0x75, 0xfe, 0x19, 0x5f, 0x32, 0x20, 0x7, 0xd8, 0x1c, 0xaa, 0x14, 0x1c, 0x34, 0x40, 0xa1, 0x19, 0x50, 0x5c, 0x1c, 0x4, 0x46, 0x14, 0x6, 0x37, 0x27, 0x20, 0x52, 0x61, 0xcd, 0xa3, 0x98, 0x30, 0x11, 0x84, 0x1, 0x1b, 0x38, 0xf8, 0x54, 0x3c, 0xf3, 0xc2, 0x58, 0x7b, 0xf0, 0xc7, 0xd7, 0x21, 0x76, 0x83, 0x80, 0x19, 0x41, 0x31, 0xfa, 0x13, 0x92, 0x81, 0xa6, 0x29, 0x9a, 0x83, 0xc0, 0xe9, 0x60, 0x32, 0x26, 0x10, 0x36, 0xdd, 0x44, 0x60, 0xcf, 0x29, 0x32, 0x20, 0x28, 0x39, 0x82, 0x47, 0x60, 0x77, 0x11, 0xfc, 0x5e, 0xaa, 0xa4, 0xb2, 0x99, 0x9d, 0x1b, 0x1f, 0x21, 0x1, 0x30, 0x50, 0x20, 0x31, 0x12, 0x0, 0x17, 0xa3, 0xaf, 0x95, 0x4a, 0x77, 0xdd, 0x2a, 0x54, 0x84, 0x37, 0x7a, 0x75, 0x60, 0x40, 0xc1, 0x70, 0xec, 0xcc, 0x5d, 0x68, 0x17, 0xa6, 0x2e, 0xd3, 0xdf, 0xbc, 0x6c, 0x7e, 0x6a, 0x6c, 0xd2, 0x13, 0xcd, 0x9b, 0xde, 0xd3, 0xf9, 0x8b, 0x21, 0x79, 0x68, 0xef, 0xf6, 0xa6, 0x7d, 0xff, 0xd7, 0x7b, 0xff, 0x8, 0x85, 0x7f, 0x6e, 0x4b, 0x2f, 0xe5, 0xc8, 0xa, 0x4d, 0x9e, 0x33, 0x6f, 0x4b, 0xd1, 0xe, 0x6d, 0xa4, 0x0, 0x42, 0x0, 0x0, 0x0, 0x0, 0x45, 0x6f, 0xc, 0x14, 0x61, 0x9, 0x4d, 0xdc, 0xb0, 0xa, 0xee, 0xa, 0x81, 0x83, 0x28, 0xc3, 0xb3, 0xc0, 0xca, 0x82, 0x21, 0x2, 0xcd, 0x98, 0x58, 0x22, 0xea, 0x36, 0x56, 0x50, 0x10, 0xda, 0xe5, 0x4, 0xb, 0x99, 0x60, 0x7a, 0x6b, 0x12, 0x1c, 0x74, 0xa6, 0xc1, 0xb1, 0xa1, 0x7f, 0x5a, 0xea, 0x32, 0x45, 0xa7, 0x79, 0x93, 0xa4, 0xb4, 0xa0, 0xbb, 0x5d, 0xf8, 0x52, 0xb3, 0xa2, 0x29, 0x9c, 0x61, 0x10, 0xf, 0x3d, 0x4c, 0xe1, 0x6e, 0x12, 0xcc, 0xe5, 0x5c, 0x61, 0xd4, 0x30, 0x4c, 0x3b, 0x11, 0x7c, 0x5f, 0x57, 0x16, 0xb3, 0xf9, 0xae, 0xe1, 0xcf, 0xd3, 0xef, 0x14, 0xa0, 0xb3, 0x6a, 0x95, 0x83, 0xd3, 0xc6, 0xa0, 0x99, 0xbe, 0x5d, 0xa7, 0xa0, 0xb9, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xca, 0xed, 0x64, 0xfa, 0x38, 0x12, 0x28, 0xae, 0x7b, 0xbd, 0x85, 0xc8, 0x84, 0x3f, 0x7e, 0x59, 0x7d, 0xb1, 0xc5, 0x93, 0x81, 0xad, 0xaf, 0xfa, 0x27, 0x8, 0x40, 0x2a, 0x45, 0x3, 0x57, 0x4c, 0xe1, 0x62, 0x18, 0xbb, 0xa6, 0x82, 0x78, 0xbe, 0xbe, 0xdd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x18, 0x5e, 0xe7, 0x6f, 0xd2, 0x5f, 0x93, 0x5d, 0xb5, 0xdd, 0x63, 0x76, 0xdd, 0x6a, 0x4b, 0x2e, 0x84, 0x8, 0xcd, 0xdd, 0x6, 0xf2, 0x96, 0x1e, 0x88, 0xde, 0x98, 0x3, 0x60, 0x7c, 0x38, 0x3, 0x20, 0x28, 0x41, 0xb0, 0x2b, 0x60, 0xce, 0x83, 0xa5, 0x92, 0x2e, 0x48, 0xb0, 0x53, 0xfa, 0x23, 0x0, 0x35, 0x8c, 0x60, 0x31, 0xd1, 0x8a, 0x4, 0x88, 0x84, 0x83, 0x80, 0x41, 0x22, 0x6b, 0x28, 0xd0, 0x94, 0x9e, 0x20, 0xa8, 0xb, 0x39, 0x1e, 0x5, 0x95, 0x38, 0x66, 0x93, 0x4b, 0xd5, 0x3a, 0xb5, 0x3b, 0xcc, 0xf5, 0xf6, 0x1a, 0x44, 0x57, 0x3f, 0xce, 0x56, 0xef, 0xf, 0x13, 0x4f, 0xff, 0x26, 0x5e, 0x13, 0x5b, 0xd8, 0xad, 0x6e, 0xe1, 0x76, 0x6a, 0xad, 0x7e, 0xe5, 0x85, 0x23, 0x8c, 0x4d, 0xc7, 0xe6, 0x1c, 0x88, 0xc7, 0xe4, 0xa9, 0x38, 0xf4, 0x55, 0xc7, 0xbf, 0xa9, 0x45, 0xeb, 0x97, 0xec, 0xcc, 0xa5, 0x5a, 0xb3, 0x63, 0x37, 0x3, 0xdd, 0xef, 0xc3, 0xbf, 0xff, 0xcc, 0x3c, 0x98, 0x48, 0x2a, 0x27, 0x2c, 0x7c, 0x77, 0x86, 0xf7, 0x90, 0x75, 0xb8, 0xb9, 0x64, 0x8, 0x50, 0x4b, 0x90, 0x17, 0x3, 0xe4, 0xe3, 0xe6, 0x83, 0xb0, 0x40, 0x13, 0x4d, 0x8d, 0x4d, 0x9, 0xda, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xaf, 0xb3, 0xf5, 0xa9, 0x33, 0x2b, 0xb3, 0x7b, 0x30, 0x48, 0x1d, 0x6, 0xaf, 0x86, 0xe, 0xf0, 0x47, 0x38, 0xe5, 0x56, 0x33, 0xfc, 0xe6, 0x7d, 0x8e, 0xb9, 0x30, 0x63, 0x6, 0x38, 0x64, 0xc, 0x2c, 0x1b, 0xc4, 0x41, 0xa2, 0x11, 0x0, 0xa8, 0xe9, 0x88, 0x8f, 0x24, 0xe8, 0xa8, 0xe0, 0x7, 0xc0, 0xe0, 0x87, 0x8a, 0x83, 0x29, 0x36, 0x61, 0x42, 0xd, 0x7d, 0x98, 0x2, 0x94, 0xc4, 0x87, 0x9, 0x45, 0x1, 0x1e, 0x84, 0xb7, 0x11, 0x6c, 0x82, 0xc1, 0x80, 0xb, 0xbd, 0x31, 0x4e, 0x9b, 0xc3, 0x2, 0x9c, 0x64, 0xcf, 0xe5, 0x4, 0xf7, 0xd8, 0x48, 0x39, 0x45, 0xe9, 0x2, 0x4a, 0xda, 0xdc, 0xf0, 0x38, 0x10, 0x50, 0x6e, 0xfe, 0x59, 0xc3, 0x15, 0x16, 0x19, 0x4b, 0x24, 0x14, 0xf1, 0xb9, 0x64, 0x0, 0x2, 0x34, 0xd, 0xbb, 0xf1, 0x2a, 0x8f, 0xc7, 0xff, 0xfb, 0x90, 0x64, 0xed, 0x80, 0xf6, 0x3d, 0x56, 0xce, 0x7f, 0x6f, 0x20, 0xa, 0x0, 0x0, 0xf, 0xf0, 0xe0, 0x0, 0x1, 0x16, 0x2d, 0x63, 0x43, 0xed, 0xe1, 0x6f, 0xe0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x4, 0x65, 0x6a, 0xf5, 0xfb, 0x81, 0x1e, 0xdc, 0xfe, 0x78, 0x2f, 0xf7, 0x16, 0x5a, 0x97, 0x91, 0x63, 0x51, 0xc6, 0xa6, 0xed, 0xff, 0xff, 0xff, 0xfd, 0xf5, 0x84, 0x81, 0x33, 0x32, 0xd4, 0xb, 0xa, 0xfc, 0xb8, 0xef, 0xf8, 0x14, 0xcb, 0xa5, 0xba, 0x42, 0xaa, 0x7c, 0xb3, 0x46, 0x10, 0x73, 0x21, 0x40, 0xad, 0x55, 0x1f, 0x7, 0x59, 0x4, 0x20, 0x84, 0xb1, 0x8b, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x96, 0x33, 0xcd, 0x6f, 0x37, 0x81, 0xfe, 0x33, 0x7e, 0xf1, 0xfc, 0x37, 0x90, 0x68, 0xc4, 0x89, 0x5c, 0x28, 0x26, 0x89, 0x45, 0x6a, 0x41, 0x4a, 0xab, 0x57, 0xb9, 0x7f, 0xef, 0x9f, 0x26, 0x6b, 0x6a, 0x42, 0x8, 0x19, 0x65, 0x9a, 0x11, 0x0, 0xb7, 0x30, 0xd0, 0xb2, 0xb0, 0x71, 0x50, 0xd0, 0x11, 0x98, 0x24, 0x2c, 0xc0, 0x40, 0xc7, 0x58, 0xe, 0x58, 0x8, 0x88, 0xf0, 0x8, 0x10, 0x20, 0x2, 0x7b, 0xf3, 0x20, 0x13, 0x22, 0x14, 0x40, 0xd3, 0x2c, 0x2, 0x16, 0xe2, 0xcc, 0x8e, 0x90, 0xc, 0xc1, 0x72, 0x5a, 0x94, 0x3b, 0xb7, 0x84, 0x47, 0x74, 0x31, 0xbb, 0xdf, 0xaa, 0xd6, 0x98, 0xe5, 0x34, 0x5, 0xc, 0xd2, 0x3d, 0xe1, 0x62, 0x3, 0x9f, 0x3f, 0xfa, 0xde, 0xe3, 0x55, 0x28, 0xa6, 0x69, 0x2a, 0x4d, 0xc, 0x60, 0xbd, 0xef, 0xc4, 0x76, 0xa6, 0xee, 0x6a, 0x19, 0xb1, 0xfb, 0x35, 0x4, 0xc3, 0xe6, 0x38, 0xe8, 0x94, 0x70, 0xa1, 0xff, 0xff, 0x5d, 0xcd, 0x20, 0x40, 0xf5, 0x3b, 0xd1, 0x92, 0x44, 0x1e, 0x88, 0xe2, 0x5b, 0x89, 0x88, 0x92, 0x1f, 0x1a, 0x1c, 0xc2, 0x29, 0x20, 0x48, 0x56, 0x3f, 0xff, 0xff, 0xb1, 0xb7, 0x77, 0x43, 0xfc, 0xc3, 0xd1, 0x4d, 0x1b, 0x8a, 0xc7, 0xe5, 0x84, 0xe3, 0xa3, 0x51, 0x91, 0xa2, 0x47, 0x2, 0x21, 0xb3, 0x7f, 0xeb, 0xaa, 0x40, 0x2, 0x3, 0x3c, 0x20, 0x0, 0x24, 0x7, 0xc0, 0xc0, 0xa0, 0x70, 0xbc, 0xc1, 0xc0, 0xa4, 0x41, 0x2, 0x1, 0x4, 0x62, 0xb1, 0x86, 0x71, 0xc0, 0x85, 0x25, 0xd0, 0x5d, 0x0, 0x25, 0x86, 0xa3, 0xc5, 0x78, 0x8f, 0xc2, 0xca, 0x10, 0xdd, 0xdc, 0x6a, 0x10, 0x5a, 0xfa, 0x6, 0x22, 0x64, 0x80, 0x3d, 0x4a, 0x7b, 0x11, 0x65, 0x49, 0xb6, 0xbb, 0xf5, 0x3f, 0x97, 0x74, 0x8b, 0xb1, 0x4a, 0x5a, 0x79, 0x99, 0x43, 0x2a, 0xb, 0x8d, 0xc, 0x5d, 0x35, 0x98, 0xc7, 0x68, 0x88, 0x48, 0x73, 0x92, 0xa5, 0x31, 0xf8, 0x10, 0xa1, 0xca, 0x5f, 0x66, 0x5a, 0x46, 0x68, 0xea, 0x76, 0x32, 0x2e, 0x8f, 0xa7, 0xe, 0xad, 0x6e, 0x3d, 0xff, 0xfe, 0x60, 0xe8, 0x97, 0xc, 0x92, 0x1f, 0x8b, 0x18, 0xff, 0x59, 0x75, 0x66, 0x37, 0x2f, 0xc, 0x0, 0x3d, 0xf, 0x54, 0xca, 0xff, 0xfb, 0x90, 0x64, 0xef, 0x80, 0xf6, 0x1e, 0x59, 0xd2, 0x7b, 0x79, 0x7b, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0xc9, 0x65, 0x53, 0xed, 0xe0, 0xed, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x96, 0x5e, 0x1d, 0xa3, 0x14, 0x97, 0x28, 0x26, 0x46, 0x3e, 0x55, 0xff, 0xff, 0xf5, 0x5f, 0xf4, 0xed, 0x65, 0x17, 0x48, 0xc5, 0x35, 0x29, 0x29, 0xe1, 0x8e, 0x60, 0x38, 0x56, 0x3b, 0x56, 0x5b, 0xff, 0xca, 0xe4, 0x28, 0x31, 0x81, 0x8c, 0x21, 0x4, 0xc6, 0x5d, 0xe2, 0x30, 0x43, 0x4, 0x51, 0x38, 0x70, 0x58, 0x5c, 0x40, 0xa2, 0x90, 0xbf, 0xa3, 0xe3, 0xc, 0x42, 0x90, 0x38, 0x28, 0x39, 0x39, 0x12, 0x2a, 0x58, 0x8, 0xb7, 0x6c, 0x1, 0xa2, 0x31, 0x7a, 0x7a, 0xf5, 0x92, 0x59, 0x97, 0xc0, 0x8a, 0xa4, 0xa4, 0x2f, 0xca, 0x22, 0x59, 0x56, 0xe6, 0x79, 0xed, 0x9f, 0xaf, 0x5c, 0x2f, 0x54, 0xa3, 0xc1, 0x90, 0x2a, 0xdb, 0x59, 0x65, 0xfb, 0xa9, 0xc8, 0xbb, 0xa1, 0x17, 0xa8, 0xcb, 0xc0, 0xa4, 0xa3, 0xee, 0x59, 0xbf, 0xfc, 0x3e, 0xf2, 0x2, 0x65, 0x89, 0xd8, 0x66, 0x27, 0x54, 0x61, 0xff, 0xff, 0x7e, 0xfb, 0xa6, 0xa3, 0x49, 0x41, 0x77, 0x5e, 0x25, 0x3f, 0xff, 0x9a, 0xfe, 0xf, 0x5d, 0x19, 0xc0, 0x11, 0xcc, 0x49, 0x60, 0x80, 0x1f, 0x84, 0xe1, 0x41, 0xa1, 0x21, 0xb1, 0x16, 0xff, 0xff, 0xd1, 0xff, 0xea, 0x7f, 0x71, 0xb0, 0xa8, 0xa3, 0xa2, 0x4d, 0x2a, 0x60, 0xd0, 0x1, 0xcb, 0x30, 0x20, 0x2, 0x5, 0x32, 0x2, 0x40, 0x1b, 0xc5, 0x80, 0x26, 0x1, 0x9, 0x97, 0x10, 0xc0, 0xe1, 0x18, 0x70, 0x64, 0x16, 0x30, 0x6e, 0x38, 0xc8, 0x60, 0x30, 0x3e, 0xd1, 0x50, 0xe2, 0xc7, 0xbf, 0xc3, 0x83, 0x4d, 0x6d, 0x85, 0x36, 0xaf, 0x5e, 0x1b, 0x81, 0xa2, 0xa1, 0x3b, 0x26, 0x8a, 0xe7, 0x3a, 0xb7, 0x58, 0xd4, 0xca, 0x71, 0x96, 0x4f, 0x98, 0x6e, 0xc6, 0xf8, 0xfc, 0x8, 0xe0, 0xff, 0x50, 0xda, 0x3d, 0xac, 0xac, 0xcd, 0x19, 0x61, 0x21, 0xed, 0x67, 0x1a, 0x82, 0x2d, 0xad, 0x3, 0x54, 0xc5, 0x77, 0xff, 0x99, 0x47, 0xe3, 0x5d, 0xad, 0x8d, 0x57, 0x27, 0x81, 0xb6, 0xfd, 0xaf, 0x43, 0x8c, 0x3c, 0xf1, 0xe9, 0x88, 0x9d, 0x7, 0xc5, 0xd3, 0xc5, 0x24, 0xc4, 0x61, 0x24, 0xd, 0x38, 0x3, 0xc1, 0x42, 0x87, 0x94, 0x7, 0x31, 0xa8, 0x22, 0x51, 0xbf, 0xff, 0xff, 0xfe, 0x79, 0xe6, 0x65, 0x23, 0x8e, 0x25, 0xb8, 0x78, 0xac, 0xd2, 0x5, 0x81, 0xca, 0x13, 0x7, 0x32, 0xf7, 0xa, 0x2, 0x40, 0x0, 0x86, 0x40, 0x4d, 0x83, 0xfb, 0x6c, 0x16, 0x11, 0x31, 0x91, 0x77, 0xd5, 0x60, 0x8c, 0x88, 0x40, 0xc1, 0x28, 0x8e, 0x6c, 0xc, 0x20, 0x19, 0xb, 0xcb, 0xc2, 0x5d, 0xc7, 0x71, 0x27, 0xb, 0x96, 0xad, 0xc1, 0x1, 0xd, 0x6d, 0x88, 0x4c, 0x39, 0x3f, 0x3e, 0xd0, 0xa0, 0x36, 0xdd, 0x60, 0x8a, 0x6f, 0xc9, 0x21, 0x5e, 0x68, 0x2e, 0xff, 0xfb, 0x70, 0x64, 0xfd, 0x0, 0xf4, 0xf9, 0x59, 0xd2, 0xfb, 0x99, 0x6a, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xd5, 0x5d, 0x51, 0xed, 0x24, 0xfa, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x51, 0xcf, 0x9f, 0xd0, 0x9, 0x1d, 0x46, 0xb0, 0xe9, 0x73, 0x15, 0xa7, 0x42, 0xd1, 0x21, 0x68, 0x7a, 0xd8, 0x93, 0xab, 0x2e, 0xdd, 0x3a, 0xf9, 0xb3, 0x97, 0x1e, 0x9b, 0x5c, 0xb6, 0xa2, 0x79, 0x61, 0x3c, 0x7d, 0x78, 0xca, 0x7f, 0xe2, 0x58, 0x8a, 0x28, 0x61, 0x43, 0x2, 0xa2, 0xea, 0x84, 0x5f, 0xf3, 0xb9, 0xbc, 0xc, 0x98, 0xe, 0x84, 0x82, 0x21, 0x4d, 0x3, 0xc7, 0x9a, 0x78, 0x12, 0x61, 0x19, 0x63, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xfe, 0xd, 0xff, 0x57, 0x15, 0xf1, 0xbd, 0x8b, 0x8, 0x46, 0x10, 0x49, 0x6a, 0xd8, 0xb8, 0x44, 0xc7, 0x42, 0xa7, 0x0, 0x2, 0x0, 0x2, 0x20, 0x4, 0x44, 0x1f, 0xf0, 0x30, 0x74, 0xa3, 0x38, 0xa, 0x32, 0x31, 0x64, 0xda, 0x30, 0x23, 0x3, 0xc4, 0xe, 0x33, 0x80, 0x43, 0x23, 0x2d, 0x28, 0xf, 0x8, 0x4, 0x7c, 0x17, 0x7b, 0xac, 0x18, 0x18, 0x30, 0x4, 0x9, 0x9, 0x4b, 0x0, 0x4, 0x64, 0x6c, 0x4d, 0x2c, 0xb8, 0x32, 0x4d, 0xd2, 0xe5, 0x88, 0x74, 0xa2, 0xe1, 0xd3, 0x23, 0x2, 0x36, 0xfd, 0x8a, 0x95, 0x64, 0xc4, 0x35, 0x26, 0x9c, 0x1c, 0x71, 0x4d, 0x41, 0x6c, 0x33, 0x48, 0xc1, 0xfa, 0x34, 0xb9, 0xc0, 0x82, 0xc3, 0xcf, 0xf0, 0x87, 0x86, 0x74, 0xad, 0x12, 0x89, 0x8f, 0x90, 0x59, 0xc0, 0xfa, 0x24, 0xff, 0xff, 0xfd, 0xb5, 0x33, 0xf6, 0xd2, 0x71, 0xd4, 0x18, 0x47, 0x3d, 0x6a, 0xe7, 0x3d, 0x97, 0xb4, 0xd, 0xdd, 0x8a, 0x9d, 0xd4, 0xed, 0x68, 0x9e, 0xd, 0x36, 0x2e, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x63, 0x94, 0x72, 0x9, 0x53, 0xe3, 0x37, 0xea, 0x2f, 0xd1, 0xef, 0xe8, 0x9c, 0xb2, 0xe9, 0x5d, 0x37, 0xd, 0xe6, 0xcc, 0xd6, 0x60, 0x4, 0x0, 0x4, 0x0, 0x40, 0x2, 0xf7, 0xf4, 0x94, 0x20, 0xc, 0x2f, 0x29, 0xb, 0x14, 0x18, 0x79, 0x98, 0x10, 0x50, 0xe8, 0x1, 0x8c, 0xd4, 0x48, 0x90, 0x15, 0x1f, 0xd0, 0xa9, 0xff, 0xfb, 0x70, 0x64, 0xf0, 0x80, 0xf4, 0x8b, 0x59, 0x53, 0x7b, 0x8f, 0x3b, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0x89, 0x65, 0x51, 0xed, 0xb1, 0x13, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x4c, 0x31, 0x21, 0x26, 0x5, 0x2, 0x87, 0xa, 0xa3, 0x1, 0x3f, 0x24, 0x5, 0xbd, 0xf3, 0x7c, 0x54, 0xb5, 0x9b, 0x9c, 0x1e, 0xca, 0xfa, 0xc7, 0x65, 0x19, 0x5a, 0xdb, 0x89, 0x73, 0x2, 0xbd, 0xaa, 0x1, 0x7f, 0x52, 0xc5, 0xba, 0xd5, 0x29, 0x67, 0x8f, 0xa5, 0xb, 0xf2, 0xe8, 0xca, 0x7d, 0xc5, 0x75, 0x16, 0x5a, 0xc3, 0x9d, 0xc7, 0x16, 0xb8, 0x33, 0xa9, 0x4d, 0xb, 0x98, 0x13, 0x27, 0xd, 0x5a, 0xbc, 0x3e, 0xf8, 0x64, 0x9, 0xfc, 0x3a, 0xe8, 0xb1, 0x35, 0x84, 0x66, 0xe3, 0x88, 0x49, 0x5a, 0x72, 0x71, 0x6c, 0x7d, 0x13, 0x1, 0x60, 0xb9, 0x2b, 0x72, 0x4d, 0xa2, 0x22, 0xd2, 0x72, 0x82, 0x62, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x3f, 0x1d, 0x86, 0x4e, 0x37, 0xd, 0xe9, 0xeb, 0x98, 0x6c, 0xa2, 0x22, 0x38, 0xce, 0x12, 0x64, 0x89, 0x13, 0x4c, 0x14, 0x15, 0x3e, 0xb0, 0x0, 0xc0, 0x5, 0x10, 0x0, 0x0, 0x3e, 0x5f, 0x33, 0xe, 0x4c, 0x2e, 0x20, 0xc2, 0xb, 0x6, 0xd2, 0x37, 0xbd, 0xf, 0xb4, 0x43, 0xc3, 0x60, 0xa0, 0x78, 0xc0, 0x31, 0x8, 0xc4, 0xea, 0x6b, 0xd4, 0xe2, 0x13, 0x86, 0x45, 0x38, 0x58, 0x1, 0x90, 0xe, 0x92, 0x4d, 0x21, 0x7b, 0x45, 0xe5, 0x91, 0x28, 0x16, 0x5a, 0x38, 0xfa, 0xf5, 0xeb, 0xd9, 0xf8, 0xc7, 0x97, 0xd0, 0xcf, 0x44, 0xc7, 0x1, 0xa9, 0xc, 0xe4, 0xbc, 0xd, 0x89, 0x8b, 0xa9, 0x8d, 0x7b, 0x42, 0x51, 0x70, 0x8, 0x8e, 0x96, 0x89, 0xc9, 0xda, 0xd3, 0xfa, 0xdf, 0x3f, 0x77, 0x29, 0xd1, 0xa6, 0x44, 0x7b, 0x56, 0xba, 0x62, 0x9d, 0xd8, 0xbd, 0xcb, 0xdb, 0xe3, 0x5e, 0x6b, 0x11, 0xda, 0xd3, 0xf3, 0x56, 0x8a, 0x4d, 0x1e, 0x38, 0x5f, 0x7b, 0x96, 0xaf, 0x4a, 0xc2, 0x99, 0x11, 0x80, 0x7, 0x5f, 0x7a, 0xa3, 0x84, 0xc5, 0x63, 0x88, 0x22, 0x85, 0x8b, 0xff, 0xff, 0xd2, 0xb7, 0x31, 0x99, 0x26, 0x4f, 0x56, 0xda, 0xe4, 0xc5, 0x88, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x0, 0xf4, 0xdd, 0x59, 0xd3, 0xfb, 0x6f, 0x4b, 0xd8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x14, 0x5, 0x65, 0x4d, 0xad, 0xbd, 0x2f, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xa6, 0x29, 0xa5, 0x47, 0x47, 0x86, 0x5, 0xa2, 0x51, 0x6f, 0xff, 0xa2, 0xd0, 0x4, 0x20, 0xa8, 0x0, 0x64, 0x3, 0x79, 0x8e, 0x44, 0x8f, 0x80, 0xd1, 0xa8, 0x1c, 0x16, 0x1c, 0x6b, 0xec, 0x9d, 0xa3, 0x26, 0x88, 0x28, 0x38, 0x73, 0x6c, 0xd3, 0x87, 0x41, 0x45, 0x16, 0xf2, 0xd1, 0xb, 0x3, 0x47, 0xb6, 0xb2, 0xdd, 0x9e, 0x99, 0x36, 0x56, 0x9d, 0xa9, 0x4d, 0x20, 0xf2, 0x55, 0x6c, 0xa6, 0xd5, 0xe0, 0x1e, 0x56, 0xc0, 0x49, 0x76, 0x35, 0x29, 0x4f, 0x79, 0x86, 0xcd, 0xcf, 0x9d, 0x63, 0x25, 0x31, 0xd3, 0x68, 0x42, 0x9, 0x28, 0xcd, 0xd8, 0x5e, 0xaa, 0xe8, 0xa2, 0x66, 0xfd, 0x95, 0xa3, 0xae, 0x1f, 0x9a, 0x1d, 0xa0, 0xbb, 0xe, 0x2d, 0xac, 0xec, 0xce, 0x64, 0x15, 0xa9, 0xc2, 0x1d, 0xa6, 0xb0, 0xac, 0x2, 0x8d, 0x2f, 0x61, 0x4a, 0xeb, 0x2f, 0xf8, 0x6b, 0x76, 0xef, 0x72, 0x48, 0xf4, 0xaa, 0x65, 0xa2, 0x65, 0x46, 0x1, 0xf0, 0x51, 0x8, 0xff, 0xff, 0xeb, 0xe5, 0x8, 0x92, 0x76, 0x38, 0xb9, 0x37, 0xe5, 0x2a, 0x60, 0x8c, 0x34, 0xd2, 0xa8, 0x2f, 0x59, 0x8f, 0xfe, 0xe, 0x29, 0xf5, 0xd4, 0x0, 0xc0, 0x26, 0x0, 0x20, 0x0, 0xce, 0x65, 0x22, 0xe3, 0x4, 0xa6, 0x42, 0x26, 0x16, 0x1d, 0x5, 0x23, 0x9a, 0x24, 0x68, 0x5, 0x14, 0xc4, 0xc7, 0xc, 0x38, 0xd, 0xd6, 0x52, 0xd, 0x81, 0x95, 0xa8, 0x23, 0x36, 0x12, 0x17, 0x7d, 0x5b, 0xb3, 0x20, 0xab, 0x5e, 0x43, 0x72, 0x6a, 0x7a, 0x6c, 0x7c, 0x2c, 0x18, 0xb0, 0xc3, 0xfe, 0xc9, 0xbb, 0x66, 0x9, 0xc9, 0xee, 0x15, 0xf9, 0x98, 0xeb, 0x89, 0x56, 0xbb, 0x9f, 0xbe, 0x88, 0x73, 0x2d, 0xe, 0xa5, 0xa8, 0xac, 0x87, 0x1d, 0xae, 0xc3, 0x36, 0x9f, 0xe5, 0xb8, 0xdb, 0xa2, 0xf3, 0x28, 0x79, 0xe9, 0xb7, 0xcf, 0x35, 0x2d, 0xc2, 0xbf, 0x56, 0xf6, 0xc3, 0x76, 0xcf, 0xbd, 0x54, 0xb6, 0x9a, 0x8e, 0xc2, 0x72, 0xdb, 0x54, 0xe5, 0x3a, 0xb4, 0xdc, 0xa4, 0xa9, 0xa7, 0xde, 0xf, 0x88, 0x5, 0x87, 0x46, 0x4, 0x44, 0x7, 0x7f, 0xff, 0xee, 0xcf, 0x28, 0xd0, 0xd, 0x8, 0x46, 0x24, 0xf9, 0x5c, 0x41, 0xc5, 0x8a, 0xac, 0xe7, 0x17, 0x65, 0x11, 0x15, 0x3d, 0xff, 0xc1, 0x40, 0x12, 0x80, 0x36, 0x1, 0x4c, 0x22, 0xc8, 0x3, 0xf1, 0xd2, 0xea, 0xe4, 0xcc, 0xff, 0xfb, 0x80, 0x64, 0xee, 0x80, 0xf4, 0xfe, 0x59, 0xd2, 0xeb, 0x4c, 0x3c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0xd5, 0x5d, 0x4f, 0xad, 0x30, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x86, 0x30, 0x23, 0xc7, 0x6d, 0x9c, 0xfd, 0x40, 0xab, 0x63, 0xcc, 0xca, 0x2, 0x8, 0x0, 0x3, 0x83, 0xa0, 0x36, 0x58, 0xc2, 0x94, 0x10, 0xc, 0x91, 0xaf, 0x36, 0x0, 0x1b, 0xae, 0x3a, 0x59, 0x20, 0x28, 0x32, 0x97, 0x74, 0xfe, 0x88, 0x67, 0x88, 0xfe, 0xa9, 0x40, 0xb2, 0xf2, 0xe1, 0x39, 0xe7, 0xe, 0x6a, 0x5a, 0x7a, 0x2b, 0x3b, 0x17, 0xb6, 0x5e, 0x24, 0x8, 0x2d, 0xad, 0x58, 0xb6, 0xdf, 0xd9, 0xee, 0xcc, 0xa1, 0xba, 0xd2, 0x66, 0x5e, 0x6b, 0xcc, 0xaa, 0xbd, 0xa8, 0xaf, 0x55, 0xb4, 0xd6, 0x96, 0xcb, 0xee, 0xf9, 0x93, 0xac, 0x68, 0xee, 0x0, 0xe5, 0x1c, 0x3b, 0x8f, 0xb2, 0x11, 0x53, 0x65, 0xc8, 0xf6, 0x79, 0xf6, 0xe7, 0x1b, 0x26, 0xaf, 0x35, 0x37, 0xff, 0xff, 0xff, 0xff, 0xb9, 0xca, 0x1e, 0x4c, 0xad, 0x32, 0x21, 0xf5, 0xa8, 0xe1, 0xeb, 0x79, 0xe2, 0xaf, 0x25, 0x15, 0x49, 0xd3, 0x14, 0x51, 0xa5, 0x8e, 0x58, 0x98, 0xdf, 0xff, 0xbc, 0xca, 0xb8, 0x16, 0xd1, 0xa4, 0x80, 0x51, 0x20, 0x6e, 0xd8, 0x4c, 0xeb, 0x36, 0x58, 0x2e, 0x31, 0xc8, 0x73, 0x43, 0x2f, 0x5, 0x8, 0xa2, 0xd1, 0x31, 0x60, 0x34, 0x20, 0xbb, 0xe9, 0xe2, 0xd6, 0x19, 0xe0, 0x8, 0xe8, 0x38, 0x51, 0xc5, 0x77, 0x16, 0x64, 0x8, 0xd6, 0xa0, 0x55, 0xc6, 0x86, 0x85, 0xd6, 0xdd, 0x82, 0x6a, 0xd, 0x82, 0x13, 0x62, 0x58, 0xb4, 0xc, 0x3e, 0xfb, 0x78, 0x1b, 0x3, 0x21, 0x6d, 0x8d, 0xa1, 0x5b, 0x48, 0xb5, 0x1c, 0x19, 0xcf, 0xe6, 0x85, 0x79, 0xe6, 0x4b, 0x10, 0x1a, 0x26, 0x18, 0xd, 0x91, 0xb1, 0x5, 0x3b, 0xfb, 0x53, 0xee, 0x13, 0xa9, 0x52, 0x59, 0x56, 0xa5, 0x88, 0xd1, 0x99, 0x13, 0x82, 0x1, 0x42, 0x33, 0x66, 0x99, 0x5a, 0x6d, 0x51, 0x84, 0xa6, 0xab, 0x47, 0x5b, 0xb6, 0xe4, 0x98, 0x16, 0xc3, 0x51, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbd, 0x73, 0x2f, 0x68, 0x48, 0x80, 0x51, 0x5, 0x61, 0x17, 0x2c, 0x93, 0xad, 0x41, 0x53, 0x6a, 0x43, 0x53, 0xd2, 0x1, 0x23, 0x48, 0x5a, 0x53, 0x7f, 0xfc, 0x2e, 0xb2, 0x8, 0x82, 0x60, 0x86, 0x8c, 0xa8, 0x49, 0x7f, 0x85, 0x89, 0xc6, 0x81, 0x45, 0xc, 0x72, 0x11, 0x5e, 0x20, 0x90, 0x5, 0xf5, 0x1, 0x11, 0x1e, 0x2, 0xf8, 0x31, 0xee, 0xd4, 0x6a, 0x48, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x80, 0xf4, 0xcd, 0x58, 0x53, 0x6b, 0x6c, 0x2c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0x21, 0x5d, 0x4d, 0xad, 0x31, 0x6f, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xdc, 0x3c, 0x16, 0xf5, 0xa7, 0x96, 0xc4, 0x83, 0xb6, 0x1f, 0xea, 0x68, 0x93, 0xa0, 0x4b, 0xc5, 0x20, 0xda, 0x82, 0xa6, 0x9e, 0x3c, 0x46, 0xaf, 0x8c, 0xeb, 0x17, 0x99, 0xd1, 0x40, 0x15, 0x3a, 0xe9, 0xc6, 0xcc, 0x9, 0x71, 0xb6, 0xf7, 0x17, 0x92, 0xd2, 0xcf, 0x9d, 0xf9, 0x19, 0x91, 0x11, 0xa1, 0x67, 0xe6, 0xee, 0xe6, 0x4e, 0x4b, 0x1b, 0xdf, 0x2b, 0xdd, 0x38, 0xad, 0x92, 0xaa, 0xa8, 0xb1, 0xbf, 0xb5, 0x14, 0xa7, 0x19, 0x72, 0x29, 0x2d, 0x5b, 0x5c, 0x4a, 0x2, 0x40, 0xe8, 0x90, 0xac, 0x81, 0xe6, 0x7f, 0xfb, 0x7c, 0xd2, 0xab, 0x2e, 0x6a, 0x18, 0x41, 0xdd, 0x67, 0xe5, 0x23, 0xab, 0x20, 0x5, 0x1e, 0x1a, 0x22, 0xff, 0xff, 0x33, 0xf0, 0x15, 0x40, 0xad, 0x2, 0x91, 0x21, 0x74, 0x5, 0x17, 0x1a, 0x2, 0x2e, 0x41, 0x86, 0x92, 0x88, 0xb7, 0x42, 0x4, 0xc9, 0x88, 0xcc, 0x5a, 0x0, 0x50, 0x2, 0x6e, 0x51, 0x5c, 0x9a, 0xd8, 0x35, 0x69, 0x9b, 0x4d, 0x84, 0x89, 0x77, 0xc6, 0xa1, 0xd2, 0x43, 0x61, 0xba, 0x69, 0x96, 0x91, 0x11, 0x2e, 0x1b, 0x10, 0xac, 0x96, 0xb6, 0xb, 0x8a, 0x9b, 0x74, 0x8e, 0x2e, 0xb9, 0x79, 0x1, 0x4d, 0xdc, 0x90, 0xb9, 0x52, 0x59, 0x37, 0x27, 0x66, 0x7a, 0x56, 0xbf, 0x8f, 0x9a, 0x38, 0xc9, 0xca, 0x9, 0x53, 0xab, 0xac, 0xa8, 0xea, 0x1b, 0x88, 0x68, 0xb2, 0xcb, 0xc6, 0x15, 0x3c, 0x40, 0x4a, 0x4c, 0x8, 0xb2, 0x58, 0xcc, 0x23, 0x13, 0xd9, 0x55, 0xd5, 0xd9, 0xda, 0x59, 0xc3, 0xe6, 0xca, 0x5b, 0x68, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x49, 0xa9, 0x23, 0x44, 0xd0, 0x65, 0x54, 0x26, 0x93, 0xde, 0x6d, 0x84, 0xbd, 0xad, 0xd8, 0xab, 0xa9, 0x26, 0xb7, 0x20, 0x76, 0xb1, 0x96, 0x35, 0x4d, 0x54, 0xca, 0xf0, 0xc6, 0x1b, 0x63, 0xcd, 0xc4, 0xaa, 0x58, 0xed, 0x4a, 0x1e, 0x34, 0x6d, 0x12, 0x2d, 0xe0, 0xb0, 0xd1, 0xa8, 0xcb, 0xa, 0x65, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x80, 0xf4, 0xdf, 0x59, 0x52, 0xeb, 0x1b, 0x48, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0x21, 0x49, 0x4f, 0xed, 0x24, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x8c, 0x47, 0xc1, 0xa3, 0x54, 0x81, 0x90, 0x6, 0xc0, 0xb, 0x40, 0x91, 0x52, 0xe8, 0xed, 0x2d, 0xd8, 0x6a, 0x2, 0x9e, 0x5d, 0x47, 0xcc, 0xd, 0x60, 0x35, 0x1d, 0x9f, 0xb1, 0x7c, 0xb8, 0x6e, 0x79, 0x68, 0xea, 0x9a, 0xf5, 0x43, 0x61, 0x5b, 0x4c, 0x59, 0x8d, 0xe5, 0x63, 0xe2, 0xd3, 0x20, 0xc2, 0xbd, 0x4b, 0x5e, 0xb5, 0xb7, 0x41, 0xb8, 0x71, 0x3a, 0xbb, 0x18, 0x83, 0x79, 0xdd, 0x79, 0xd8, 0x6b, 0x1, 0x2c, 0xd5, 0x54, 0xba, 0xe3, 0x4c, 0xb8, 0xe6, 0x72, 0x18, 0xfc, 0xd, 0x54, 0xb5, 0xf6, 0xdf, 0xff, 0xdc, 0xbd, 0x66, 0x73, 0xa3, 0x51, 0x20, 0x7a, 0xcd, 0xff, 0xff, 0x9e, 0x6d, 0x4b, 0xac, 0xc0, 0xf0, 0x74, 0x48, 0x76, 0xa9, 0x37, 0xf, 0x2c, 0x96, 0xe1, 0x75, 0x70, 0x7, 0x1a, 0x3, 0x52, 0x12, 0x53, 0x29, 0x5e, 0x10, 0x9e, 0x15, 0x18, 0xcc, 0xc4, 0x4d, 0x8f, 0x49, 0x55, 0x28, 0x11, 0x10, 0x19, 0x14, 0x30, 0xd, 0xee, 0x8, 0x20, 0x85, 0xaa, 0x36, 0x84, 0xd6, 0x5b, 0x20, 0x68, 0xac, 0xc9, 0xd9, 0x78, 0xe1, 0xf8, 0xa0, 0xc1, 0x8, 0xc0, 0x96, 0x32, 0xb8, 0x15, 0xc, 0x0, 0x62, 0x68, 0x90, 0x23, 0x32, 0xe8, 0x74, 0x30, 0xc8, 0x14, 0x6f, 0xa1, 0xb, 0x30, 0x5e, 0x67, 0x1f, 0x6, 0x9, 0x49, 0xc7, 0x25, 0xe5, 0xfe, 0x7a, 0xdf, 0x3, 0xe9, 0x34, 0x6c, 0x99, 0xac, 0x8b, 0x54, 0xeb, 0x9e, 0x2b, 0x88, 0xa6, 0xc6, 0x42, 0x5b, 0x33, 0xab, 0x1a, 0x24, 0x20, 0x44, 0x26, 0x83, 0x46, 0x83, 0xc3, 0x8b, 0x8d, 0x4b, 0xde, 0xb3, 0x26, 0xa2, 0x59, 0x2b, 0x1a, 0xd, 0xc5, 0xd6, 0x91, 0x3c, 0xea, 0x9f, 0xff, 0xff, 0xff, 0xfc, 0x43, 0x8e, 0xb3, 0x59, 0x26, 0x16, 0x9d, 0x56, 0x58, 0x95, 0xea, 0x4d, 0x57, 0xcc, 0xb4, 0xe2, 0x80, 0x2b, 0xc1, 0x22, 0x98, 0xa8, 0x63, 0x21, 0x16, 0x2, 0x2, 0xa1, 0x86, 0x3a, 0xc1, 0xcf, 0x28, 0xc8, 0x4c, 0x41, 0x43, 0x4, 0x88, 0xd3, 0x84, 0x46, 0x84, 0xae, 0x2, 0x8e, 0x95, 0x27, 0xbb, 0x5e, 0x65, 0xb, 0xd, 0x20, 0x11, 0x8e, 0x8f, 0x8, 0x88, 0x9b, 0xe1, 0xca, 0x96, 0xb8, 0xb9, 0x40, 0xb8, 0x5c, 0x56, 0xa2, 0x15, 0x41, 0x9e, 0xce, 0x62, 0x4b, 0x36, 0x81, 0x42, 0x8b, 0xb2, 0x2a, 0x39, 0x98, 0x2c, 0xe, 0xd0, 0x72, 0xda, 0xf2, 0x24, 0xff, 0xfb, 0x70, 0x64, 0xfa, 0x80, 0xf4, 0x6c, 0x55, 0xd1, 0xeb, 0x78, 0x49, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xa1, 0x39, 0x49, 0xed, 0x30, 0xf3, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xbe, 0x56, 0x8c, 0x49, 0x10, 0x92, 0x9, 0xba, 0x32, 0xcf, 0x3d, 0xa4, 0xb9, 0xcd, 0x2b, 0x7b, 0xe4, 0x34, 0x8e, 0x62, 0x63, 0x49, 0x8c, 0x84, 0x9e, 0x96, 0xb6, 0xfd, 0xfb, 0x63, 0x5, 0x8b, 0x0, 0xa4, 0x50, 0x4a, 0x39, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x6c, 0x69, 0x9f, 0xee, 0x64, 0xb2, 0x4b, 0xb4, 0x47, 0x7e, 0x3e, 0xac, 0x15, 0x80, 0x58, 0xcd, 0x7a, 0x96, 0x7b, 0xa5, 0xbf, 0x7e, 0x0, 0xf, 0x23, 0x2b, 0x73, 0x3a, 0xc4, 0x17, 0x9, 0xa7, 0x80, 0x66, 0x55, 0xe6, 0x64, 0x80, 0xe1, 0x43, 0x9e, 0xa, 0x8e, 0xe3, 0xa0, 0x4d, 0x64, 0x89, 0x12, 0xd7, 0x14, 0xd9, 0x41, 0x20, 0x8, 0xd4, 0xcc, 0x9b, 0xd4, 0x75, 0x7f, 0xf, 0x48, 0x4d, 0x98, 0x82, 0x5, 0x63, 0xf8, 0xd6, 0x83, 0x23, 0xe6, 0x48, 0xd9, 0xd8, 0xdf, 0xb1, 0x90, 0xc9, 0xa4, 0x27, 0x7a, 0xf0, 0x38, 0xfb, 0x65, 0x94, 0xef, 0xf8, 0xd5, 0xca, 0xdb, 0x49, 0xb2, 0x55, 0xc8, 0x5d, 0x19, 0x56, 0xc9, 0x1d, 0x22, 0x6d, 0x61, 0x51, 0x20, 0x5d, 0x3, 0x6c, 0x2b, 0x93, 0x8a, 0xab, 0xd4, 0x61, 0x32, 0x6, 0xc8, 0x91, 0x13, 0x74, 0x91, 0x17, 0xbf, 0x8d, 0x76, 0x71, 0x74, 0x46, 0x9a, 0xb8, 0xc5, 0x97, 0x7d, 0xbd, 0xdd, 0xe1, 0xef, 0xdf, 0x0, 0xd1, 0xb7, 0x33, 0xe, 0xae, 0xcf, 0xb5, 0xf8, 0x5, 0x78, 0x5b, 0x61, 0x8b, 0xb5, 0x70, 0x57, 0x47, 0x2c, 0x3, 0x39, 0x9e, 0x41, 0x5a, 0x3, 0x4a, 0x5c, 0x85, 0x54, 0x5c, 0x80, 0x52, 0x53, 0xa1, 0x44, 0x90, 0x7b, 0x1e, 0x8a, 0xc4, 0xe9, 0xca, 0xc, 0xa, 0x86, 0xc6, 0xe0, 0xc2, 0x24, 0x51, 0x11, 0x29, 0xdf, 0x4, 0x92, 0x35, 0x6d, 0x25, 0x35, 0x8d, 0x43, 0x43, 0xe3, 0xa2, 0x39, 0xea, 0xd2, 0xe0, 0xb8, 0x4, 0x6d, 0xa2, 0x64, 0x2a, 0x2c, 0xcb, 0x12, 0x94, 0x53, 0xe8, 0xa6, 0x44, 0x58, 0xe6, 0xad, 0xee, 0x93, 0xf1, 0xd9, 0x54, 0x48, 0x89, 0xd9, 0x5f, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x81, 0xf4, 0x75, 0x55, 0xd0, 0xfb, 0x49, 0x5c, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x10, 0x5d, 0x3b, 0x43, 0xed, 0x24, 0xcf, 0x28, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x29, 0xaf, 0xda, 0xa9, 0xd2, 0x4a, 0xf, 0xa, 0x95, 0x2c, 0x6f, 0x2b, 0x58, 0xc8, 0xcb, 0xb5, 0x28, 0xc4, 0xea, 0xa9, 0x47, 0x18, 0x5b, 0xef, 0x56, 0x6b, 0xdb, 0x1d, 0xcd, 0x52, 0x50, 0x26, 0xbb, 0x48, 0x75, 0x59, 0x17, 0xb6, 0x30, 0xc, 0x2c, 0x50, 0xe5, 0xc2, 0x4c, 0x20, 0xc8, 0x1c, 0x40, 0x10, 0x34, 0x81, 0x14, 0xf2, 0x2b, 0x24, 0xaa, 0xed, 0xa4, 0x12, 0x5a, 0x34, 0xab, 0x1a, 0x45, 0x35, 0x16, 0xbb, 0x10, 0xc9, 0xb1, 0x80, 0xb8, 0x94, 0x4, 0x45, 0xe4, 0xc9, 0x29, 0xc0, 0x3c, 0x4b, 0x14, 0x9a, 0x12, 0xba, 0xd9, 0x55, 0xb5, 0x9a, 0x92, 0x24, 0x4f, 0x46, 0xca, 0xab, 0x4a, 0x88, 0x81, 0xb1, 0x17, 0x61, 0x3c, 0xec, 0xdf, 0x6f, 0x72, 0x30, 0x50, 0xd0, 0x21, 0xe8, 0x63, 0x24, 0xcd, 0x9b, 0xe5, 0x90, 0x3e, 0x51, 0x36, 0x72, 0x9a, 0xe7, 0x71, 0xd0, 0x24, 0x7c, 0xb7, 0x7e, 0x5c, 0x3a, 0x34, 0x58, 0x3e, 0x44, 0x5e, 0x48, 0x6f, 0xe8, 0x20, 0x45, 0x79, 0x36, 0x66, 0x27, 0x5d, 0xae, 0x10, 0xc, 0x42, 0x86, 0x4b, 0xcc, 0x35, 0x24, 0x4a, 0x6, 0x8c, 0xc8, 0x55, 0x2d, 0x4c, 0x21, 0xc1, 0x96, 0x90, 0x2a, 0x36, 0x6, 0x89, 0x8e, 0x2a, 0x75, 0x3e, 0xca, 0x64, 0x10, 0x87, 0xc7, 0xa6, 0xc4, 0xe5, 0x8c, 0x8f, 0xb4, 0xd6, 0x79, 0x71, 0xf1, 0xfa, 0xd5, 0xab, 0x9d, 0x3a, 0x76, 0xc5, 0x92, 0xea, 0x3f, 0xfc, 0x5b, 0x4e, 0x76, 0x14, 0xf, 0xad, 0x86, 0x84, 0x66, 0x34, 0x6d, 0xdd, 0x79, 0x33, 0xb2, 0xe9, 0x4b, 0x39, 0x94, 0x86, 0x82, 0xa0, 0xcb, 0xe6, 0x9d, 0x3c, 0xda, 0xf4, 0x76, 0xdc, 0x7b, 0xa6, 0xf4, 0x83, 0xbd, 0x1e, 0x29, 0x26, 0xb5, 0x9a, 0xa6, 0x53, 0x41, 0x40, 0x68, 0x90, 0x83, 0x4d, 0xd8, 0xca, 0x58, 0x6b, 0xa6, 0xb5, 0xf5, 0xda, 0x0, 0xaa, 0x0, 0x5e, 0x6b, 0x41, 0x75, 0x82, 0x2, 0x85, 0x20, 0x32, 0xb0, 0x5a, 0xd4, 0x8b, 0xb1, 0x93, 0x97, 0xf5, 0xff, 0xfb, 0x60, 0x64, 0xf9, 0x0, 0xf3, 0xf7, 0x3f, 0x52, 0x7b, 0x2c, 0x4c, 0x28, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xf, 0x80, 0xff, 0x43, 0xec, 0x3d, 0x2c, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x38, 0x52, 0x19, 0x8b, 0x46, 0x59, 0x70, 0x7a, 0x78, 0x46, 0x3b, 0x15, 0x83, 0x12, 0xad, 0xa8, 0xca, 0xd3, 0x9b, 0xa9, 0x37, 0x2c, 0xab, 0x59, 0x48, 0xdb, 0x2a, 0xbb, 0x9, 0xcb, 0x96, 0x43, 0x5b, 0x4e, 0x4a, 0xb3, 0xa8, 0xf1, 0xec, 0x26, 0xf6, 0xa6, 0x3d, 0x48, 0x5e, 0x8f, 0xf2, 0x61, 0xaa, 0x95, 0x96, 0x58, 0xa2, 0x54, 0x9b, 0xd1, 0xc4, 0xd3, 0x10, 0x78, 0xd3, 0x22, 0xb7, 0x1e, 0xd1, 0x22, 0x41, 0x9d, 0x8f, 0x56, 0xf8, 0x25, 0x44, 0x50, 0xc6, 0xcc, 0x8b, 0xe5, 0xcb, 0x5b, 0x72, 0x48, 0xff, 0xa4, 0x1, 0xd1, 0x70, 0x0, 0xc6, 0xb, 0x1d, 0x7, 0x3, 0x85, 0xc, 0xc9, 0x4, 0x66, 0xd0, 0xa4, 0xe, 0x8e, 0x11, 0x0, 0x20, 0x48, 0xdb, 0xc1, 0x60, 0x29, 0x58, 0x8d, 0x1, 0xa0, 0xd7, 0xc9, 0x62, 0xd3, 0x21, 0x12, 0xa2, 0x82, 0x84, 0xd4, 0x78, 0xd4, 0xa1, 0x64, 0x6c, 0x89, 0xc9, 0x3, 0x1, 0x98, 0x95, 0x4f, 0x23, 0x38, 0xf1, 0x47, 0x42, 0x46, 0xa3, 0x89, 0x65, 0x73, 0x89, 0x3b, 0x5e, 0x39, 0xcf, 0xf9, 0xda, 0x73, 0xf0, 0xd3, 0x78, 0x33, 0x95, 0xa8, 0x4b, 0x7e, 0xff, 0xa3, 0xfd, 0x4f, 0xff, 0xdf, 0xff, 0x45, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xec, 0x0, 0xf3, 0x70, 0x38, 0xce, 0x7b, 0x9, 0x34, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xd, 0xd0, 0xef, 0x2f, 0xec, 0x30, 0xcf, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xee, 0x0, 0xf3, 0x41, 0x3b, 0x48, 0xe3, 0xc, 0x33, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xb, 0x88, 0xad, 0x17, 0x8c, 0x24, 0xc7, 0xc0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x10, 0x64, 0xdd, 0x8f, 0xf0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0xa4, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
// Here is the static video thing....
volatile static uint8_t STATIC_MP4_INPUT[] = { 0x0, 0x0, 0x0, 0x20, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6f, 0x6d, 0x0, 0x0, 0x2, 0x0, 0x69, 0x73, 0x6f, 0x6d, 0x69, 0x73, 0x6f, 0x32, 0x61, 0x76, 0x63, 0x31, 0x6d, 0x70, 0x34, 0x31, 0x0, 0x0, 0x0, 0x8, 0x66, 0x72, 0x65, 0x65, 0x0, 0x0, 0xb, 0x8f, 0x6d, 0x64, 0x61, 0x74, 0x21, 0x11, 0x45, 0x0, 0x14, 0x50, 0x1, 0x46, 0xff, 0xf1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5d, 0xfb, 0x22, 0x14, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xbc, 0x21, 0x11, 0x45, 0x0, 0x14, 0x50, 0x1, 0x46, 0xff, 0xf1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5d, 0xfb, 0x22, 0x14, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xbc, 0x0, 0x0, 0x0, 0x2, 0x9, 0x10, 0x0, 0x0, 0x0, 0x21, 0x67, 0x4d, 0x4, 0x1f, 0xe8, 0xa0, 0x6c, 0x1e, 0xf3, 0xff, 0xf8, 0x0, 0x8, 0x0, 0xa, 0x10, 0x0, 0x0, 0x24, 0x0, 0x0, 0x3, 0x0, 0x4, 0x0, 0x0, 0x3, 0x0, 0xf2, 0x3c, 0x22, 0x11, 0x96, 0x0, 0x0, 0x0, 0x4, 0x68, 0xee, 0x3c, 0x80, 0x0, 0x0, 0x3, 0x50, 0x65, 0x88, 0x84, 0x0, 0x5f, 0xff, 0xf9, 0x18, 0xee, 0xff, 0xd6, 0x2b, 0xf0, 0x13, 0x2, 0x6a, 0x7f, 0xdf, 0xc, 0xfe, 0x40, 0xd0, 0xb4, 0xf6, 0x7c, 0x8a, 0xc7, 0xd0, 0x53, 0x1a, 0x63, 0xf1, 0xc4, 0xa0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x4, 0xef, 0xa5, 0x47, 0x3, 0xd2, 0xed, 0xea, 0xee, 0x38, 0x1c, 0x25, 0x37, 0x72, 0x53, 0x2b, 0xb8, 0x89, 0xfc, 0xc9, 0xeb, 0xa6, 0x1a, 0xe5, 0xbf, 0xde, 0x67, 0x3a, 0x76, 0xef, 0x8d, 0xd9, 0x64, 0xd1, 0x13, 0x84, 0x62, 0x1, 0x92, 0xf3, 0x84, 0x46, 0x34, 0x0, 0x50, 0x63, 0x88, 0xc8, 0x0, 0x0, 0x3, 0x0, 0xa, 0xe6, 0xe8, 0x0, 0xbb, 0x40, 0x23, 0xd0, 0x8, 0xf8, 0x2, 0x6d, 0x0, 0xc9, 0xc0, 0x5b, 0x0, 0x2a, 0x60, 0x13, 0x70, 0x9, 0xec, 0x5, 0x8, 0x3, 0xc4, 0x1, 0xe0, 0x1, 0x84, 0x1, 0x6, 0x0, 0xed, 0x0, 0xca, 0x0, 0xa2, 0x0, 0x82, 0x0, 0x70, 0x0, 0x69, 0x0, 0x6a, 0x0, 0x6b, 0x0, 0x6c, 0x0, 0x6d, 0x0, 0x6d, 0x0, 0xa1, 0x32, 0x3a, 0xc3, 0xec, 0xa0, 0x61, 0x7e, 0xb7, 0x20, 0xdf, 0x88, 0x78, 0xaa, 0x79, 0x8e, 0xe6, 0xf5, 0xa0, 0x33, 0x2c, 0xc9, 0x2b, 0x74, 0x80, 0x8d, 0xc5, 0xdc, 0x13, 0x6c, 0x4e, 0x44, 0x44, 0xe9, 0x19, 0x6f, 0x99, 0xb3, 0x36, 0x75, 0x12, 0xd3, 0x84, 0x80, 0xa1, 0xd8, 0xd4, 0x36, 0xe9, 0x59, 0x32, 0x2b, 0x5a, 0xab, 0xab, 0x23, 0xd5, 0xa0, 0x74, 0xa8, 0x88, 0x4d, 0x19, 0xf3, 0x5e, 0xe, 0x76, 0x5b, 0x2, 0x34, 0x70, 0xa8, 0xa7, 0x73, 0x38, 0xe8, 0xfb, 0x36, 0x8e, 0x5a, 0xe6, 0x65, 0x44, 0xb3, 0xf2, 0xfa, 0xec, 0x98, 0xa0, 0x3c, 0xb7, 0xbd, 0x11, 0x3, 0x15, 0x31, 0x84, 0x8e, 0x91, 0x2f, 0x7e, 0x5f, 0x1b, 0xc2, 0xd, 0x29, 0x0, 0x31, 0x1f, 0x5a, 0x8, 0xab, 0x88, 0x87, 0xc6, 0x28, 0x43, 0x75, 0x1f, 0x4a, 0x52, 0xf7, 0x40, 0xb, 0x5d, 0xdb, 0xf6, 0x64, 0xd8, 0x5d, 0x59, 0xa0, 0xf0, 0x83, 0x7b, 0x83, 0x88, 0x61, 0x1d, 0xe2, 0xad, 0x80, 0xb, 0xab, 0x56, 0x74, 0xcb, 0x74, 0x8e, 0x1e, 0x2b, 0xf8, 0x3e, 0x7, 0xa6, 0xbf, 0x1d, 0x23, 0xc1, 0x85, 0xce, 0xd2, 0xba, 0x9b, 0x34, 0xb5, 0xcf, 0xe8, 0xf0, 0x2a, 0x7b, 0x98, 0xb0, 0x2d, 0x2b, 0x8c, 0xce, 0x14, 0x73, 0x3a, 0xf2, 0xd0, 0xc5, 0x5c, 0xcc, 0xb9, 0xe0, 0x52, 0x11, 0x56, 0xaa, 0x39, 0xee, 0xb3, 0x88, 0x82, 0xed, 0xc1, 0xe7, 0x9d, 0xf3, 0xad, 0x9b, 0xd1, 0xd4, 0xdd, 0xaf, 0xb1, 0xc0, 0x86, 0xfe, 0x95, 0x36, 0x40, 0x2, 0x8b, 0x88, 0xc8, 0x99, 0x44, 0x8, 0xb8, 0xb2, 0x2f, 0x6a, 0x55, 0x52, 0x1e, 0xdc, 0x2d, 0x9e, 0x9f, 0xe1, 0x42, 0x7, 0x69, 0x97, 0x8f, 0xa1, 0xdc, 0x75, 0xf6, 0xeb, 0xdc, 0xfd, 0x60, 0xff, 0x37, 0xa9, 0x92, 0x1c, 0x5c, 0x35, 0xd6, 0xd2, 0x45, 0xfa, 0x8c, 0x7d, 0xca, 0x1c, 0xa9, 0xf7, 0x9a, 0x7f, 0x20, 0x2a, 0x48, 0xba, 0x97, 0xab, 0xe, 0x77, 0x7d, 0xb8, 0xff, 0x5e, 0x47, 0x91, 0xfc, 0x7a, 0x1e, 0x98, 0x93, 0x9c, 0x7e, 0xb7, 0xde, 0x74, 0xb7, 0x97, 0xe, 0x8b, 0x71, 0xe, 0x73, 0x70, 0xfc, 0x8c, 0x6c, 0x81, 0xd3, 0xee, 0x38, 0x12, 0x3, 0x68, 0x8a, 0x53, 0x91, 0xe, 0xeb, 0x81, 0x32, 0x63, 0x62, 0xcd, 0xed, 0xe5, 0x72, 0xe1, 0xc0, 0x5b, 0x10, 0x67, 0x63, 0x2e, 0x82, 0x39, 0x30, 0xf0, 0x6b, 0xee, 0xca, 0x55, 0x8, 0xc5, 0xb2, 0x21, 0x0, 0xbe, 0x4f, 0xce, 0x21, 0x2a, 0x6c, 0xc, 0x13, 0xa8, 0x5a, 0x42, 0xa3, 0x40, 0x2a, 0xf6, 0x51, 0x20, 0xec, 0xfc, 0x6b, 0xdd, 0xb8, 0x1f, 0x18, 0x1c, 0x25, 0x27, 0xc9, 0x55, 0x3f, 0xd8, 0x2f, 0x36, 0x39, 0xfb, 0xb6, 0xa2, 0xe1, 0xb4, 0x1, 0x17, 0xd2, 0x73, 0x22, 0x4a, 0xde, 0x5d, 0xe1, 0x66, 0x6c, 0x90, 0x64, 0x43, 0x24, 0xb4, 0xc7, 0x8f, 0x2e, 0x1d, 0xb4, 0x17, 0x21, 0x51, 0x79, 0xec, 0x5, 0xa3, 0x1d, 0xf7, 0x31, 0x60, 0xbf, 0x45, 0x9c, 0x4a, 0x9d, 0xc2, 0x60, 0xd0, 0xa4, 0x20, 0xf0, 0x7c, 0xe6, 0xef, 0xcc, 0x8e, 0x3c, 0xd5, 0x5e, 0x77, 0x9d, 0xd5, 0x12, 0x25, 0x9f, 0xc6, 0xa, 0x83, 0xf2, 0x8e, 0x6, 0x97, 0x46, 0xd2, 0x4e, 0x13, 0x6, 0xd4, 0x76, 0x12, 0x44, 0x36, 0x1b, 0xa5, 0xb9, 0x12, 0x1e, 0x4d, 0xf5, 0x44, 0xa0, 0xba, 0xe, 0x4b, 0x7b, 0xcc, 0x60, 0x75, 0xd, 0x74, 0xe3, 0xcb, 0xf, 0xc6, 0x31, 0x56, 0xce, 0x28, 0xd5, 0x86, 0x36, 0x73, 0x39, 0xf2, 0xc1, 0xa1, 0x88, 0x78, 0xf, 0xd3, 0x26, 0x83, 0xa6, 0xf4, 0x7c, 0xdd, 0x10, 0xb2, 0x40, 0x34, 0x68, 0x67, 0x83, 0x7c, 0x65, 0x38, 0x56, 0x9a, 0xdb, 0x5a, 0xa3, 0xdf, 0x34, 0x9d, 0x49, 0xe5, 0xa4, 0x3b, 0xe1, 0xc1, 0x59, 0x48, 0xbd, 0xd2, 0x9a, 0x3d, 0xcb, 0x45, 0x12, 0x98, 0x77, 0xed, 0xee, 0x17, 0x1d, 0xda, 0x85, 0xfd, 0x61, 0x16, 0xaa, 0xb8, 0x92, 0xf4, 0xca, 0xa7, 0x14, 0xff, 0x83, 0xcd, 0xf6, 0xb1, 0x3d, 0x16, 0x65, 0x60, 0xb4, 0xe7, 0xa2, 0x34, 0xde, 0xee, 0x7, 0x35, 0xd6, 0x30, 0x4c, 0xda, 0x7c, 0xa1, 0xe0, 0x35, 0x7c, 0x94, 0xde, 0xae, 0x52, 0xd4, 0x6f, 0x21, 0x38, 0xec, 0xd6, 0x23, 0x93, 0xcd, 0xf5, 0x50, 0x4f, 0x81, 0xe9, 0x5c, 0xf2, 0xc3, 0xfe, 0x4c, 0x72, 0x39, 0x14, 0x64, 0x3, 0x92, 0xff, 0xca, 0x24, 0x8, 0x6e, 0x13, 0x92, 0xbf, 0x1c, 0xd4, 0xad, 0x58, 0x35, 0x3d, 0x1d, 0xca, 0xca, 0xad, 0x92, 0x2, 0xa6, 0xc, 0x16, 0xdb, 0x96, 0xe2, 0x78, 0x80, 0xfa, 0x87, 0x3, 0x17, 0x31, 0x46, 0x2a, 0xe8, 0xa9, 0x70, 0x62, 0x8b, 0x5f, 0x88, 0xb4, 0x4a, 0xd7, 0x18, 0x60, 0x56, 0x82, 0xdb, 0x7, 0x1a, 0xf, 0x8c, 0x73, 0x8b, 0x24, 0xd8, 0x40, 0xf4, 0x33, 0x6b, 0xab, 0xed, 0xbe, 0xf5, 0x33, 0x7d, 0x4e, 0x4d, 0x91, 0xb2, 0xf3, 0x71, 0x65, 0x3a, 0x7e, 0xf4, 0x9c, 0xde, 0xa9, 0xd9, 0xda, 0xb3, 0x59, 0xab, 0x6f, 0xee, 0xa4, 0x0, 0x68, 0xa0, 0x21, 0x11, 0x45, 0x0, 0x14, 0x50, 0x1, 0x46, 0xff, 0xf1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5d, 0xfb, 0x22, 0x14, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xbc, 0x21, 0x11, 0x45, 0x0, 0x14, 0x50, 0x1, 0x46, 0xff, 0xf1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5d, 0xfb, 0x22, 0x14, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xbc, 0x0, 0x0, 0x5, 0xb2, 0x6d, 0x6f, 0x6f, 0x76, 0x0, 0x0, 0x0, 0x6c, 0x6d, 0x76, 0x68, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xe8, 0x0, 0x0, 0x0, 0x4c, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x2, 0x1f, 0x74, 0x72, 0x61, 0x6b, 0x0, 0x0, 0x0, 0x5c, 0x74, 0x6b, 0x68, 0x64, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x3, 0x54, 0x0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x65, 0x64, 0x74, 0x73, 0x0, 0x0, 0x0, 0x1c, 0x65, 0x6c, 0x73, 0x74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x97, 0x6d, 0x64, 0x69, 0x61, 0x0, 0x0, 0x0, 0x20, 0x6d, 0x64, 0x68, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x2, 0x0, 0x55, 0xc4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2d, 0x68, 0x64, 0x6c, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 0x69, 0x64, 0x65, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x0, 0x0, 0x0, 0x1, 0x42, 0x6d, 0x69, 0x6e, 0x66, 0x0, 0x0, 0x0, 0x14, 0x76, 0x6d, 0x68, 0x64, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x64, 0x69, 0x6e, 0x66, 0x0, 0x0, 0x0, 0x1c, 0x64, 0x72, 0x65, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xc, 0x75, 0x72, 0x6c, 0x20, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x2, 0x73, 0x74, 0x62, 0x6c, 0x0, 0x0, 0x0, 0x9e, 0x73, 0x74, 0x73, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x8e, 0x61, 0x76, 0x63, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x54, 0x1, 0xe0, 0x0, 0x48, 0x0, 0x0, 0x0, 0x48, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0xff, 0xff, 0x0, 0x0, 0x0, 0x38, 0x61, 0x76, 0x63, 0x43, 0x1, 0x4d, 0x4, 0x1f, 0xff, 0xe1, 0x0, 0x21, 0x67, 0x4d, 0x4, 0x1f, 0xe8, 0xa0, 0x6c, 0x1e, 0xf3, 0xff, 0xf8, 0x0, 0x8, 0x0, 0xa, 0x10, 0x0, 0x0, 0x24, 0x0, 0x0, 0x3, 0x0, 0x4, 0x0, 0x0, 0x3, 0x0, 0xf2, 0x3c, 0x22, 0x11, 0x96, 0x1, 0x0, 0x4, 0x68, 0xee, 0x3c, 0x80, 0x0, 0x0, 0x0, 0x18, 0x73, 0x74, 0x74, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x73, 0x74, 0x73, 0x63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x14, 0x73, 0x74, 0x73, 0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x87, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x14, 0x73, 0x74, 0x63, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x4, 0x30, 0x0, 0x0, 0x2, 0x26, 0x74, 0x72, 0x61, 0x6b, 0x0, 0x0, 0x0, 0x5c, 0x74, 0x6b, 0x68, 0x64, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x65, 0x64, 0x74, 0x73, 0x0, 0x0, 0x0, 0x1c, 0x65, 0x6c, 0x73, 0x74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x9e, 0x6d, 0x64, 0x69, 0x61, 0x0, 0x0, 0x0, 0x20, 0x6d, 0x64, 0x68, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x80, 0x0, 0x0, 0xe, 0x40, 0x55, 0xc4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2d, 0x68, 0x64, 0x6c, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x73, 0x6f, 0x75, 0x6e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x0, 0x0, 0x0, 0x1, 0x49, 0x6d, 0x69, 0x6e, 0x66, 0x0, 0x0, 0x0, 0x10, 0x73, 0x6d, 0x68, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x64, 0x69, 0x6e, 0x66, 0x0, 0x0, 0x0, 0x1c, 0x64, 0x72, 0x65, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xc, 0x75, 0x72, 0x6c, 0x20, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0xd, 0x73, 0x74, 0x62, 0x6c, 0x0, 0x0, 0x0, 0x67, 0x73, 0x74, 0x73, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x57, 0x6d, 0x70, 0x34, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x33, 0x65, 0x73, 0x64, 0x73, 0x0, 0x0, 0x0, 0x0, 0x3, 0x80, 0x80, 0x80, 0x22, 0x0, 0x2, 0x0, 0x4, 0x80, 0x80, 0x80, 0x14, 0x40, 0x15, 0x0, 0x0, 0x0, 0x0, 0x3, 0x4a, 0x1a, 0x0, 0x3, 0x4a, 0x1a, 0x5, 0x80, 0x80, 0x80, 0x2, 0x11, 0x90, 0x6, 0x80, 0x80, 0x80, 0x1, 0x2, 0x0, 0x0, 0x0, 0x20, 0x73, 0x74, 0x74, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x2, 0x40, 0x0, 0x0, 0x0, 0x1c, 0x73, 0x74, 0x73, 0x63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x14, 0x73, 0x74, 0x73, 0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x18, 0x73, 0x74, 0x63, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x7, 0xb7, 0x0, 0x0, 0x0, 0x1a, 0x73, 0x67, 0x70, 0x64, 0x1, 0x0, 0x0, 0x0, 0x72, 0x6f, 0x6c, 0x6c, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x1c, 0x73, 0x62, 0x67, 0x70, 0x0, 0x0, 0x0, 0x0, 0x72, 0x6f, 0x6c, 0x6c, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xf9, 0x75, 0x64, 0x74, 0x61, 0x0, 0x0, 0x0, 0xf1, 0x6d, 0x65, 0x74, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x21, 0x68, 0x64, 0x6c, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0x64, 0x69, 0x72, 0x61, 0x70, 0x70, 0x6c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc4, 0x69, 0x6c, 0x73, 0x74, 0x0, 0x0, 0x0, 0x2d, 0xa9, 0x74, 0x6f, 0x6f, 0x0, 0x0, 0x0, 0x25, 0x64, 0x61, 0x74, 0x61, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6c, 0x69, 0x70, 0x63, 0x68, 0x61, 0x6d, 0x70, 0x2e, 0x63, 0x6f, 0x6d, 0x0, 0x0, 0x0, 0x8f, 0xa9, 0x63, 0x6d, 0x74, 0x0, 0x0, 0x0, 0x87, 0x64, 0x61, 0x74, 0x61, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6c, 0x69, 0x70, 0x63, 0x68, 0x61, 0x6d, 0x70, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x6e, 0x2f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x2d, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x20, 0x2d, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x2e };
// This here is basically the buffer which we want to fuzz with this program.
// static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
// asegment=timestamps="60|150"
// static const char *filter_descr = "aresample=8000,ebur128=audio=1:meter=18,aformat=sample_fmts=s16:channel_layouts=mono";
char* fuzzbuf[300]; // Our fuzzer thing...
// static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -"; // Not needed...
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
#include <string.h>
int read_buffer(void *opaque, uint8_t *buf, int buf_size);
int read_buffer_video(void *opaque, uint8_t *buf, int buf_size);
void try_fuzz_audio(void);
unsigned int data_pointer = 0; // Where we are in the input data
FILE *fp_open;
FILE *fp_open_video;
int read_buffer(void *opaque, uint8_t *buf, int buf_size){
if (!feof(fp_open)) {
int true_size=fread(buf,1,buf_size,fp_open);
return true_size;
} else {
return AVERROR_EOF; // return -1; // We actually need to return AVERROR_EOF instead of -1 here I think
}
}
int read_buffer_video(void *opaque, uint8_t *buf, int buf_size){
if (!feof(fp_open_video)) {
int true_size=fread(buf,1,buf_size,fp_open_video);
return true_size;
} else {
return AVERROR_EOF; // return -1; // We actually need to return AVERROR_EOF instead of -1 here I think
}
}
#include <stdio.h>
unsigned char* inbuffer=NULL;
AVIOContext *avio_in=NULL;
static int open_input_file()
{
data_pointer = 0; // Set to zero before starting to read...
const AVCodec *dec;
int ret = 0;
fp_open = fmemopen(STATIC_MP3_INPUT, sizeof(STATIC_MP3_INPUT), "r"); // fopen("small.mp3", "rb");
if (fp_open == NULL) {
return 1;
}
inbuffer = (unsigned char*)av_malloc(sizeof(STATIC_MP3_INPUT));
avio_in =avio_alloc_context(inbuffer, sizeof(STATIC_MP3_INPUT),0,NULL,read_buffer,NULL,NULL);
if(avio_in==NULL){
goto end;
}
fmt_ctx->pb=avio_in;
fmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
if ((ret = avformat_open_input(&fmt_ctx, "small.mp3", NULL, NULL)) < 0) { // was originally: if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
goto end;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
goto end;
}
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find an audio stream in the input file\n");
goto end;
}
audio_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
goto end;
//return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[audio_stream_index]->codecpar);
/* init the audio decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
goto end;
}
end:
return ret;
}
static int init_filters(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
static const int out_sample_rate = 8000;
const AVFilterLink *outlink;
AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer audio source: the decoded frames from the decoder will be inserted here. */
if (dec_ctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&dec_ctx->ch_layout, dec_ctx->ch_layout.nb_channels);
ret = snprintf(args, sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=",
time_base.num, time_base.den, dec_ctx->sample_rate,
av_get_sample_fmt_name(dec_ctx->sample_fmt));
av_channel_layout_describe(&dec_ctx->ch_layout, args + ret, sizeof(args) - ret);
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
goto end;
}
/* buffer audio sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "sample_formats", "s16",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
goto end;
}
ret = av_opt_set(buffersink_ctx, "channel_layouts", "mono",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
goto end;
}
ret = av_opt_set_array(buffersink_ctx, "samplerates", AV_OPT_SEARCH_CHILDREN,
0, 1, AV_OPT_TYPE_INT, &out_sample_rate);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize audio buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
/* Print summary of the sink buffer
* Note: args buffer is reused to store channel layout string */
outlink = buffersink_ctx->inputs[0];
av_channel_layout_describe(&outlink->ch_layout, args, sizeof(args));
av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
(int)outlink->sample_rate,
(char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
args);
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
static void print_frame(const AVFrame *frame)
{
const int n = frame->nb_samples * frame->ch_layout.nb_channels;
const uint16_t *p = (uint16_t*)frame->data[0];
const uint16_t *p_end = p + n;
while (p < p_end) {
fputc(*p & 0xff, stdout);
fputc(*p>>8 & 0xff, stdout);
p++;
}
fflush(stdout);
}
void try_fuzz_audio() {
int ret;
AVPacket *packet = av_packet_alloc();
AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
if (!packet || !frame || !filt_frame) {
fprintf(stderr, "Could not allocate frame or packet\n");
exit(1);
}
fmt_ctx = avformat_alloc_context();
if ((ret = open_input_file()) < 0)
goto end;
if ((ret = init_filters(fuzzbuf)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == audio_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
fprintf(stderr, "Ok, so we afefefeffefefefefew going to the thing...\n");
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
goto end;
}
if (ret >= 0) {
/* push the audio data from decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
break;
}
/* pull filtered audio from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
}
if (ret < 0) {
goto end;
}
// print_frame(filt_frame);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
}
av_packet_unref(packet);
}
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
printf("Pulling the rest of the bullshit here...\n");
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
}
if (ret < 0) {
goto end;
}
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
//avformat_close_input(&fmt_ctx);
// avformat_free_context(fmt_ctx);
// avformat_close_input
av_packet_free(&packet);
av_frame_free(&frame);
av_frame_free(&filt_frame);
if (fp_open) {
//printf("Closing file...\n");
fclose(fp_open);
}
// Freeing the bullshit:::
//fprintf(stderr, "Freeing the bullshit...\n");
//av_free(avio_in);
//av_free(inbuffer);
if (ret < 0 && ret != AVERROR_EOF) {
return;
}
return;
}
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
// Main fuzzing entrypoint.
// Just copy the entire thing.
if (size >= sizeof(fuzzbuf)-1) {
return 0; // Return early on inputs too big.
}
// memcpy that thing into the fuzz buffer.
// void *memcpy(void dest[restrict .n], const void src[restrict .n],
// size_t n);
memset(fuzzbuf, 0x00, sizeof(fuzzbuf));
memcpy(fuzzbuf, data, size);
// Now call the function
try_fuzz_audio();
fprintf(stderr, "Now trying to fuzz the video processing part...\n");
try_fuzz_video(); // Call the video decoder thing...
fprintf(stderr, "Returned from the bullshit fuck.....\n");
return 0; // Now just exit...
}
/*
int main(int argc, char **argv)
{
memset(fuzzbuf, 0x00, sizeof(fuzzbuf)); // Zero out the buffer.
// Now read from stdin into that buffer
read(0, fuzzbuf, sizeof(fuzzbuf));
try_fuzz_audio(); // First try with the audio
printf("Reached the end...\n");
return 0;
}
*/
// Here is the source code of the video thing:
/*
* Copyright (c) 2010 Nicolas George
* Copyright (c) 2011 Stefano Sabatini
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* @file
* API example for decoding and filtering
* @example decode_filter_video.c
*/
//#define _XOPEN_SOURCE 600 /* for usleep */
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
//const char *filter_descr = "scale=78:24,transpose=cclock";
/* other way:
scale=78:24 [scl]; [scl] transpose=cclock // assumes "[in]" and "[out]" to be input output pads respectively
*/
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int video_stream_index = -1;
static int64_t last_pts = AV_NOPTS_VALUE;
static int open_input_file_video(void); // Here just declare the thing...
static int open_input_file_video()
{
const AVCodec *dec;
int ret;
data_pointer = 0; // Set to zero before starting to read...
//const AVCodec *dec;
//int ret = 0;
fp_open_video = fmemopen(STATIC_MP4_INPUT, sizeof(STATIC_MP4_INPUT), "r"); // fopen("small.mp3", "rb");
if (fp_open_video == NULL) {
return 1;
}
inbuffer = (unsigned char*)av_malloc(sizeof(STATIC_MP4_INPUT));
avio_in =avio_alloc_context(inbuffer, sizeof(STATIC_MP4_INPUT),0,NULL,read_buffer_video,NULL,NULL);
if(avio_in==NULL){
return 0;
//goto end;
}
fmt_ctx->pb=avio_in;
fmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
if ((ret = avformat_open_input(&fmt_ctx, "oofshit.mp4", NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
return ret;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
return ret;
}
/* select the video stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find a video stream in the input file\n");
return ret;
}
video_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[video_stream_index]->codecpar);
/* init the video decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open video decoder\n");
return ret;
}
return 0;
}
static int init_filters_video(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *buffersrc = avfilter_get_by_name("buffer");
const AVFilter *buffersink = avfilter_get_by_name("buffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
AVRational time_base = fmt_ctx->streams[video_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer video source: the decoded frames from the decoder will be inserted here. */
snprintf(args, sizeof(args),
"video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",
dec_ctx->width, dec_ctx->height, dec_ctx->pix_fmt,
time_base.num, time_base.den,
dec_ctx->sample_aspect_ratio.num, dec_ctx->sample_aspect_ratio.den);
ret = avfilter_graph_create_filter(&buffersrc_ctx, buffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create buffer source\n");
goto end;
}
/* buffer video sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, buffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "pixel_formats", "gray8",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output pixel format\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
// Show function...
static void display_frame(const AVFrame *frame, AVRational time_base)
{
int x, y;
uint8_t *p0, *p;
int64_t delay;
if (frame->pts != AV_NOPTS_VALUE) {
if (last_pts != AV_NOPTS_VALUE) {
/* sleep roughly the right amount of time;
* usleep is in microseconds, just like AV_TIME_BASE. */
delay = av_rescale_q(frame->pts - last_pts,
time_base, AV_TIME_BASE_Q);
if (delay > 0 && delay < 1000000)
usleep(delay);
}
last_pts = frame->pts;
}
/* Trivial ASCII grayscale display. */
p0 = frame->data[0];
puts("\033c");
for (y = 0; y < frame->height; y++) {
p = p0;
for (x = 0; x < frame->width; x++)
putchar(" .-+#"[*(p++) / 52]);
putchar('\n');
p0 += frame->linesize[0];
}
fflush(stdout);
}
int try_fuzz_video(void);
//int main(int argc, char **argv)
int try_fuzz_video() // This is based on the very original main function...
{
fprintf(stderr, "Now doing the bullshit fuck.....\n");
int ret;
AVPacket *packet;
AVFrame *frame;
AVFrame *filt_frame;
/*
if (argc != 2) {
fprintf(stderr, "Usage: %s file\n", argv[0]);
exit(1);
}
*/
if (fmt_ctx) {
// avformat_free_context(fmt_ctx);
avformat_free_context(fmt_ctx);
}
fmt_ctx = avformat_alloc_context();
frame = av_frame_alloc();
filt_frame = av_frame_alloc();
packet = av_packet_alloc();
if (!frame || !filt_frame || !packet) {
fprintf(stderr, "Could not allocate frame or packet\n");
return 1;
//exit(1);
}
if ((ret = open_input_file_video()) < 0)
goto end;
if ((ret = init_filters_video(fuzzbuf)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == video_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
goto end;
}
frame->pts = frame->best_effort_timestamp;
/* push the decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the filtergraph\n");
break;
}
/* pull filtered frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
display_frame(filt_frame, buffersink_ctx->inputs[0]->time_base);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
av_packet_unref(packet);
}
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
display_frame(filt_frame, buffersink_ctx->inputs[0]->time_base);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
avformat_close_input(&fmt_ctx);
av_frame_free(&frame);
av_frame_free(&filt_frame);
av_packet_free(&packet);
// We do not do this next part in the audio fuzzing, because we needed here in the video player.
avformat_free_context(fmt_ctx);
if (ret < 0 && ret != AVERROR_EOF) {
fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
//exit(1);
return 1;
}
return 0;
// exit(0);
}
Now, let’s see what happens:
Now trying to fuzz the video processing part...
Now doing the bullshit fuck.....
[in @ 0x511000009f00] Changing video frame properties on the fly is not supported by all filters.
[in @ 0x511000009f00] filter context - w: 852 h: 480 fmt: 0 csp: unknown range: unknown, incoming frame - w: 852 h: 480 fmt: 0 csp: unknown range: tv pts_time: 0
[swscaler @ 0x52f00002a400] Unsupported input (Operation not supported): fmt:yuv420p csp:unknown prim:reserved trc:reserved -> fmt:gray csp:unknown prim:unknown trc:reserved
Error occurred: Operation not supported
After a quick google search I found this here: https://stackoverflow.com/questions/9356960/ffmpeg-operation-not-permitted-error-while-conversion so we actually can not use MP4 format videos I think.
So I had to just use a VLF file instead as the static file????
Ok, so here is my fuzzer source code:
#include <unistd.h>
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavfilter/buffersink.h"
#include "libavfilter/buffersrc.h"
#include "libavutil/channel_layout.h"
#include "libavutil/mem.h"
#include "libavutil/opt.h"
#include <stdio.h>
#include <stdint.h>
// Hardcoded mp3 file as bytebuffer such that we do not need to reload from disk on every fuzz iteration...
volatile static uint8_t STATIC_MP3_INPUT[] = { 0xff, 0xfb, 0x90, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x58, 0x69, 0x6e, 0x67, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x0, 0xf, 0x0, 0x0, 0x15, 0x99, 0x0, 0x24, 0x24, 0x24, 0x24, 0x24, 0x24, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x39, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x4e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x5e, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x6d, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0x92, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xa1, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xc3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xd3, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xe0, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xed, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0, 0x0, 0x0, 0x50, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x4, 0xb9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x35, 0x20, 0x24, 0x5, 0x47, 0x4d, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x15, 0x99, 0xf3, 0x91, 0xbd, 0x8a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xff, 0xfb, 0xc0, 0x64, 0x0, 0x0, 0x1, 0x4, 0x0, 0x4a, 0x6d, 0x0, 0x0, 0x8, 0x0, 0x0, 0xf, 0xf0, 0xa0, 0x0, 0x1, 0x17, 0x68, 0xfd, 0x2d, 0xb9, 0xbd, 0x80, 0x0, 0x0, 0x0, 0x3f, 0xc3, 0x0, 0x0, 0x0, 0xb6, 0xe6, 0xc0, 0x25, 0x25, 0x10, 0x60, 0x0, 0x8, 0x2, 0x0, 0x80, 0x20, 0x5c, 0xfc, 0x10, 0x70, 0x61, 0x60, 0xf9, 0xf2, 0xef, 0x44, 0xb8, 0x21, 0xca, 0x7c, 0x4e, 0x7f, 0xff, 0xc4, 0x1, 0x86, 0x44, 0x20, 0x0, 0x80, 0x20, 0x0, 0x0, 0x5a, 0xdb, 0x92, 0x8c, 0x0, 0x0, 0x5f, 0x46, 0x18, 0x2c, 0xd2, 0xc, 0x34, 0x75, 0xfe, 0x19, 0x5f, 0x32, 0x20, 0x7, 0xd8, 0x1c, 0xaa, 0x14, 0x1c, 0x34, 0x40, 0xa1, 0x19, 0x50, 0x5c, 0x1c, 0x4, 0x46, 0x14, 0x6, 0x37, 0x27, 0x20, 0x52, 0x61, 0xcd, 0xa3, 0x98, 0x30, 0x11, 0x84, 0x1, 0x1b, 0x38, 0xf8, 0x54, 0x3c, 0xf3, 0xc2, 0x58, 0x7b, 0xf0, 0xc7, 0xd7, 0x21, 0x76, 0x83, 0x80, 0x19, 0x41, 0x31, 0xfa, 0x13, 0x92, 0x81, 0xa6, 0x29, 0x9a, 0x83, 0xc0, 0xe9, 0x60, 0x32, 0x26, 0x10, 0x36, 0xdd, 0x44, 0x60, 0xcf, 0x29, 0x32, 0x20, 0x28, 0x39, 0x82, 0x47, 0x60, 0x77, 0x11, 0xfc, 0x5e, 0xaa, 0xa4, 0xb2, 0x99, 0x9d, 0x1b, 0x1f, 0x21, 0x1, 0x30, 0x50, 0x20, 0x31, 0x12, 0x0, 0x17, 0xa3, 0xaf, 0x95, 0x4a, 0x77, 0xdd, 0x2a, 0x54, 0x84, 0x37, 0x7a, 0x75, 0x60, 0x40, 0xc1, 0x70, 0xec, 0xcc, 0x5d, 0x68, 0x17, 0xa6, 0x2e, 0xd3, 0xdf, 0xbc, 0x6c, 0x7e, 0x6a, 0x6c, 0xd2, 0x13, 0xcd, 0x9b, 0xde, 0xd3, 0xf9, 0x8b, 0x21, 0x79, 0x68, 0xef, 0xf6, 0xa6, 0x7d, 0xff, 0xd7, 0x7b, 0xff, 0x8, 0x85, 0x7f, 0x6e, 0x4b, 0x2f, 0xe5, 0xc8, 0xa, 0x4d, 0x9e, 0x33, 0x6f, 0x4b, 0xd1, 0xe, 0x6d, 0xa4, 0x0, 0x42, 0x0, 0x0, 0x0, 0x0, 0x45, 0x6f, 0xc, 0x14, 0x61, 0x9, 0x4d, 0xdc, 0xb0, 0xa, 0xee, 0xa, 0x81, 0x83, 0x28, 0xc3, 0xb3, 0xc0, 0xca, 0x82, 0x21, 0x2, 0xcd, 0x98, 0x58, 0x22, 0xea, 0x36, 0x56, 0x50, 0x10, 0xda, 0xe5, 0x4, 0xb, 0x99, 0x60, 0x7a, 0x6b, 0x12, 0x1c, 0x74, 0xa6, 0xc1, 0xb1, 0xa1, 0x7f, 0x5a, 0xea, 0x32, 0x45, 0xa7, 0x79, 0x93, 0xa4, 0xb4, 0xa0, 0xbb, 0x5d, 0xf8, 0x52, 0xb3, 0xa2, 0x29, 0x9c, 0x61, 0x10, 0xf, 0x3d, 0x4c, 0xe1, 0x6e, 0x12, 0xcc, 0xe5, 0x5c, 0x61, 0xd4, 0x30, 0x4c, 0x3b, 0x11, 0x7c, 0x5f, 0x57, 0x16, 0xb3, 0xf9, 0xae, 0xe1, 0xcf, 0xd3, 0xef, 0x14, 0xa0, 0xb3, 0x6a, 0x95, 0x83, 0xd3, 0xc6, 0xa0, 0x99, 0xbe, 0x5d, 0xa7, 0xa0, 0xb9, 0xdf, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xca, 0xed, 0x64, 0xfa, 0x38, 0x12, 0x28, 0xae, 0x7b, 0xbd, 0x85, 0xc8, 0x84, 0x3f, 0x7e, 0x59, 0x7d, 0xb1, 0xc5, 0x93, 0x81, 0xad, 0xaf, 0xfa, 0x27, 0x8, 0x40, 0x2a, 0x45, 0x3, 0x57, 0x4c, 0xe1, 0x62, 0x18, 0xbb, 0xa6, 0x82, 0x78, 0xbe, 0xbe, 0xdd, 0xef, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0x18, 0x5e, 0xe7, 0x6f, 0xd2, 0x5f, 0x93, 0x5d, 0xb5, 0xdd, 0x63, 0x76, 0xdd, 0x6a, 0x4b, 0x2e, 0x84, 0x8, 0xcd, 0xdd, 0x6, 0xf2, 0x96, 0x1e, 0x88, 0xde, 0x98, 0x3, 0x60, 0x7c, 0x38, 0x3, 0x20, 0x28, 0x41, 0xb0, 0x2b, 0x60, 0xce, 0x83, 0xa5, 0x92, 0x2e, 0x48, 0xb0, 0x53, 0xfa, 0x23, 0x0, 0x35, 0x8c, 0x60, 0x31, 0xd1, 0x8a, 0x4, 0x88, 0x84, 0x83, 0x80, 0x41, 0x22, 0x6b, 0x28, 0xd0, 0x94, 0x9e, 0x20, 0xa8, 0xb, 0x39, 0x1e, 0x5, 0x95, 0x38, 0x66, 0x93, 0x4b, 0xd5, 0x3a, 0xb5, 0x3b, 0xcc, 0xf5, 0xf6, 0x1a, 0x44, 0x57, 0x3f, 0xce, 0x56, 0xef, 0xf, 0x13, 0x4f, 0xff, 0x26, 0x5e, 0x13, 0x5b, 0xd8, 0xad, 0x6e, 0xe1, 0x76, 0x6a, 0xad, 0x7e, 0xe5, 0x85, 0x23, 0x8c, 0x4d, 0xc7, 0xe6, 0x1c, 0x88, 0xc7, 0xe4, 0xa9, 0x38, 0xf4, 0x55, 0xc7, 0xbf, 0xa9, 0x45, 0xeb, 0x97, 0xec, 0xcc, 0xa5, 0x5a, 0xb3, 0x63, 0x37, 0x3, 0xdd, 0xef, 0xc3, 0xbf, 0xff, 0xcc, 0x3c, 0x98, 0x48, 0x2a, 0x27, 0x2c, 0x7c, 0x77, 0x86, 0xf7, 0x90, 0x75, 0xb8, 0xb9, 0x64, 0x8, 0x50, 0x4b, 0x90, 0x17, 0x3, 0xe4, 0xe3, 0xe6, 0x83, 0xb0, 0x40, 0x13, 0x4d, 0x8d, 0x4d, 0x9, 0xda, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xff, 0xaf, 0xb3, 0xf5, 0xa9, 0x33, 0x2b, 0xb3, 0x7b, 0x30, 0x48, 0x1d, 0x6, 0xaf, 0x86, 0xe, 0xf0, 0x47, 0x38, 0xe5, 0x56, 0x33, 0xfc, 0xe6, 0x7d, 0x8e, 0xb9, 0x30, 0x63, 0x6, 0x38, 0x64, 0xc, 0x2c, 0x1b, 0xc4, 0x41, 0xa2, 0x11, 0x0, 0xa8, 0xe9, 0x88, 0x8f, 0x24, 0xe8, 0xa8, 0xe0, 0x7, 0xc0, 0xe0, 0x87, 0x8a, 0x83, 0x29, 0x36, 0x61, 0x42, 0xd, 0x7d, 0x98, 0x2, 0x94, 0xc4, 0x87, 0x9, 0x45, 0x1, 0x1e, 0x84, 0xb7, 0x11, 0x6c, 0x82, 0xc1, 0x80, 0xb, 0xbd, 0x31, 0x4e, 0x9b, 0xc3, 0x2, 0x9c, 0x64, 0xcf, 0xe5, 0x4, 0xf7, 0xd8, 0x48, 0x39, 0x45, 0xe9, 0x2, 0x4a, 0xda, 0xdc, 0xf0, 0x38, 0x10, 0x50, 0x6e, 0xfe, 0x59, 0xc3, 0x15, 0x16, 0x19, 0x4b, 0x24, 0x14, 0xf1, 0xb9, 0x64, 0x0, 0x2, 0x34, 0xd, 0xbb, 0xf1, 0x2a, 0x8f, 0xc7, 0xff, 0xfb, 0x90, 0x64, 0xed, 0x80, 0xf6, 0x3d, 0x56, 0xce, 0x7f, 0x6f, 0x20, 0xa, 0x0, 0x0, 0xf, 0xf0, 0xe0, 0x0, 0x1, 0x16, 0x2d, 0x63, 0x43, 0xed, 0xe1, 0x6f, 0xe0, 0x0, 0x0, 0x3f, 0xc0, 0x0, 0x0, 0x4, 0x65, 0x6a, 0xf5, 0xfb, 0x81, 0x1e, 0xdc, 0xfe, 0x78, 0x2f, 0xf7, 0x16, 0x5a, 0x97, 0x91, 0x63, 0x51, 0xc6, 0xa6, 0xed, 0xff, 0xff, 0xff, 0xfd, 0xf5, 0x84, 0x81, 0x33, 0x32, 0xd4, 0xb, 0xa, 0xfc, 0xb8, 0xef, 0xf8, 0x14, 0xcb, 0xa5, 0xba, 0x42, 0xaa, 0x7c, 0xb3, 0x46, 0x10, 0x73, 0x21, 0x40, 0xad, 0x55, 0x1f, 0x7, 0x59, 0x4, 0x20, 0x84, 0xb1, 0x8b, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf4, 0x96, 0x33, 0xcd, 0x6f, 0x37, 0x81, 0xfe, 0x33, 0x7e, 0xf1, 0xfc, 0x37, 0x90, 0x68, 0xc4, 0x89, 0x5c, 0x28, 0x26, 0x89, 0x45, 0x6a, 0x41, 0x4a, 0xab, 0x57, 0xb9, 0x7f, 0xef, 0x9f, 0x26, 0x6b, 0x6a, 0x42, 0x8, 0x19, 0x65, 0x9a, 0x11, 0x0, 0xb7, 0x30, 0xd0, 0xb2, 0xb0, 0x71, 0x50, 0xd0, 0x11, 0x98, 0x24, 0x2c, 0xc0, 0x40, 0xc7, 0x58, 0xe, 0x58, 0x8, 0x88, 0xf0, 0x8, 0x10, 0x20, 0x2, 0x7b, 0xf3, 0x20, 0x13, 0x22, 0x14, 0x40, 0xd3, 0x2c, 0x2, 0x16, 0xe2, 0xcc, 0x8e, 0x90, 0xc, 0xc1, 0x72, 0x5a, 0x94, 0x3b, 0xb7, 0x84, 0x47, 0x74, 0x31, 0xbb, 0xdf, 0xaa, 0xd6, 0x98, 0xe5, 0x34, 0x5, 0xc, 0xd2, 0x3d, 0xe1, 0x62, 0x3, 0x9f, 0x3f, 0xfa, 0xde, 0xe3, 0x55, 0x28, 0xa6, 0x69, 0x2a, 0x4d, 0xc, 0x60, 0xbd, 0xef, 0xc4, 0x76, 0xa6, 0xee, 0x6a, 0x19, 0xb1, 0xfb, 0x35, 0x4, 0xc3, 0xe6, 0x38, 0xe8, 0x94, 0x70, 0xa1, 0xff, 0xff, 0x5d, 0xcd, 0x20, 0x40, 0xf5, 0x3b, 0xd1, 0x92, 0x44, 0x1e, 0x88, 0xe2, 0x5b, 0x89, 0x88, 0x92, 0x1f, 0x1a, 0x1c, 0xc2, 0x29, 0x20, 0x48, 0x56, 0x3f, 0xff, 0xff, 0xb1, 0xb7, 0x77, 0x43, 0xfc, 0xc3, 0xd1, 0x4d, 0x1b, 0x8a, 0xc7, 0xe5, 0x84, 0xe3, 0xa3, 0x51, 0x91, 0xa2, 0x47, 0x2, 0x21, 0xb3, 0x7f, 0xeb, 0xaa, 0x40, 0x2, 0x3, 0x3c, 0x20, 0x0, 0x24, 0x7, 0xc0, 0xc0, 0xa0, 0x70, 0xbc, 0xc1, 0xc0, 0xa4, 0x41, 0x2, 0x1, 0x4, 0x62, 0xb1, 0x86, 0x71, 0xc0, 0x85, 0x25, 0xd0, 0x5d, 0x0, 0x25, 0x86, 0xa3, 0xc5, 0x78, 0x8f, 0xc2, 0xca, 0x10, 0xdd, 0xdc, 0x6a, 0x10, 0x5a, 0xfa, 0x6, 0x22, 0x64, 0x80, 0x3d, 0x4a, 0x7b, 0x11, 0x65, 0x49, 0xb6, 0xbb, 0xf5, 0x3f, 0x97, 0x74, 0x8b, 0xb1, 0x4a, 0x5a, 0x79, 0x99, 0x43, 0x2a, 0xb, 0x8d, 0xc, 0x5d, 0x35, 0x98, 0xc7, 0x68, 0x88, 0x48, 0x73, 0x92, 0xa5, 0x31, 0xf8, 0x10, 0xa1, 0xca, 0x5f, 0x66, 0x5a, 0x46, 0x68, 0xea, 0x76, 0x32, 0x2e, 0x8f, 0xa7, 0xe, 0xad, 0x6e, 0x3d, 0xff, 0xfe, 0x60, 0xe8, 0x97, 0xc, 0x92, 0x1f, 0x8b, 0x18, 0xff, 0x59, 0x75, 0x66, 0x37, 0x2f, 0xc, 0x0, 0x3d, 0xf, 0x54, 0xca, 0xff, 0xfb, 0x90, 0x64, 0xef, 0x80, 0xf6, 0x1e, 0x59, 0xd2, 0x7b, 0x79, 0x7b, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0xc9, 0x65, 0x53, 0xed, 0xe0, 0xed, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x96, 0x5e, 0x1d, 0xa3, 0x14, 0x97, 0x28, 0x26, 0x46, 0x3e, 0x55, 0xff, 0xff, 0xf5, 0x5f, 0xf4, 0xed, 0x65, 0x17, 0x48, 0xc5, 0x35, 0x29, 0x29, 0xe1, 0x8e, 0x60, 0x38, 0x56, 0x3b, 0x56, 0x5b, 0xff, 0xca, 0xe4, 0x28, 0x31, 0x81, 0x8c, 0x21, 0x4, 0xc6, 0x5d, 0xe2, 0x30, 0x43, 0x4, 0x51, 0x38, 0x70, 0x58, 0x5c, 0x40, 0xa2, 0x90, 0xbf, 0xa3, 0xe3, 0xc, 0x42, 0x90, 0x38, 0x28, 0x39, 0x39, 0x12, 0x2a, 0x58, 0x8, 0xb7, 0x6c, 0x1, 0xa2, 0x31, 0x7a, 0x7a, 0xf5, 0x92, 0x59, 0x97, 0xc0, 0x8a, 0xa4, 0xa4, 0x2f, 0xca, 0x22, 0x59, 0x56, 0xe6, 0x79, 0xed, 0x9f, 0xaf, 0x5c, 0x2f, 0x54, 0xa3, 0xc1, 0x90, 0x2a, 0xdb, 0x59, 0x65, 0xfb, 0xa9, 0xc8, 0xbb, 0xa1, 0x17, 0xa8, 0xcb, 0xc0, 0xa4, 0xa3, 0xee, 0x59, 0xbf, 0xfc, 0x3e, 0xf2, 0x2, 0x65, 0x89, 0xd8, 0x66, 0x27, 0x54, 0x61, 0xff, 0xff, 0x7e, 0xfb, 0xa6, 0xa3, 0x49, 0x41, 0x77, 0x5e, 0x25, 0x3f, 0xff, 0x9a, 0xfe, 0xf, 0x5d, 0x19, 0xc0, 0x11, 0xcc, 0x49, 0x60, 0x80, 0x1f, 0x84, 0xe1, 0x41, 0xa1, 0x21, 0xb1, 0x16, 0xff, 0xff, 0xd1, 0xff, 0xea, 0x7f, 0x71, 0xb0, 0xa8, 0xa3, 0xa2, 0x4d, 0x2a, 0x60, 0xd0, 0x1, 0xcb, 0x30, 0x20, 0x2, 0x5, 0x32, 0x2, 0x40, 0x1b, 0xc5, 0x80, 0x26, 0x1, 0x9, 0x97, 0x10, 0xc0, 0xe1, 0x18, 0x70, 0x64, 0x16, 0x30, 0x6e, 0x38, 0xc8, 0x60, 0x30, 0x3e, 0xd1, 0x50, 0xe2, 0xc7, 0xbf, 0xc3, 0x83, 0x4d, 0x6d, 0x85, 0x36, 0xaf, 0x5e, 0x1b, 0x81, 0xa2, 0xa1, 0x3b, 0x26, 0x8a, 0xe7, 0x3a, 0xb7, 0x58, 0xd4, 0xca, 0x71, 0x96, 0x4f, 0x98, 0x6e, 0xc6, 0xf8, 0xfc, 0x8, 0xe0, 0xff, 0x50, 0xda, 0x3d, 0xac, 0xac, 0xcd, 0x19, 0x61, 0x21, 0xed, 0x67, 0x1a, 0x82, 0x2d, 0xad, 0x3, 0x54, 0xc5, 0x77, 0xff, 0x99, 0x47, 0xe3, 0x5d, 0xad, 0x8d, 0x57, 0x27, 0x81, 0xb6, 0xfd, 0xaf, 0x43, 0x8c, 0x3c, 0xf1, 0xe9, 0x88, 0x9d, 0x7, 0xc5, 0xd3, 0xc5, 0x24, 0xc4, 0x61, 0x24, 0xd, 0x38, 0x3, 0xc1, 0x42, 0x87, 0x94, 0x7, 0x31, 0xa8, 0x22, 0x51, 0xbf, 0xff, 0xff, 0xfe, 0x79, 0xe6, 0x65, 0x23, 0x8e, 0x25, 0xb8, 0x78, 0xac, 0xd2, 0x5, 0x81, 0xca, 0x13, 0x7, 0x32, 0xf7, 0xa, 0x2, 0x40, 0x0, 0x86, 0x40, 0x4d, 0x83, 0xfb, 0x6c, 0x16, 0x11, 0x31, 0x91, 0x77, 0xd5, 0x60, 0x8c, 0x88, 0x40, 0xc1, 0x28, 0x8e, 0x6c, 0xc, 0x20, 0x19, 0xb, 0xcb, 0xc2, 0x5d, 0xc7, 0x71, 0x27, 0xb, 0x96, 0xad, 0xc1, 0x1, 0xd, 0x6d, 0x88, 0x4c, 0x39, 0x3f, 0x3e, 0xd0, 0xa0, 0x36, 0xdd, 0x60, 0x8a, 0x6f, 0xc9, 0x21, 0x5e, 0x68, 0x2e, 0xff, 0xfb, 0x70, 0x64, 0xfd, 0x0, 0xf4, 0xf9, 0x59, 0xd2, 0xfb, 0x99, 0x6a, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xd5, 0x5d, 0x51, 0xed, 0x24, 0xfa, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x51, 0xcf, 0x9f, 0xd0, 0x9, 0x1d, 0x46, 0xb0, 0xe9, 0x73, 0x15, 0xa7, 0x42, 0xd1, 0x21, 0x68, 0x7a, 0xd8, 0x93, 0xab, 0x2e, 0xdd, 0x3a, 0xf9, 0xb3, 0x97, 0x1e, 0x9b, 0x5c, 0xb6, 0xa2, 0x79, 0x61, 0x3c, 0x7d, 0x78, 0xca, 0x7f, 0xe2, 0x58, 0x8a, 0x28, 0x61, 0x43, 0x2, 0xa2, 0xea, 0x84, 0x5f, 0xf3, 0xb9, 0xbc, 0xc, 0x98, 0xe, 0x84, 0x82, 0x21, 0x4d, 0x3, 0xc7, 0x9a, 0x78, 0x12, 0x61, 0x19, 0x63, 0xff, 0xff, 0xff, 0xff, 0x4d, 0xfe, 0xd, 0xff, 0x57, 0x15, 0xf1, 0xbd, 0x8b, 0x8, 0x46, 0x10, 0x49, 0x6a, 0xd8, 0xb8, 0x44, 0xc7, 0x42, 0xa7, 0x0, 0x2, 0x0, 0x2, 0x20, 0x4, 0x44, 0x1f, 0xf0, 0x30, 0x74, 0xa3, 0x38, 0xa, 0x32, 0x31, 0x64, 0xda, 0x30, 0x23, 0x3, 0xc4, 0xe, 0x33, 0x80, 0x43, 0x23, 0x2d, 0x28, 0xf, 0x8, 0x4, 0x7c, 0x17, 0x7b, 0xac, 0x18, 0x18, 0x30, 0x4, 0x9, 0x9, 0x4b, 0x0, 0x4, 0x64, 0x6c, 0x4d, 0x2c, 0xb8, 0x32, 0x4d, 0xd2, 0xe5, 0x88, 0x74, 0xa2, 0xe1, 0xd3, 0x23, 0x2, 0x36, 0xfd, 0x8a, 0x95, 0x64, 0xc4, 0x35, 0x26, 0x9c, 0x1c, 0x71, 0x4d, 0x41, 0x6c, 0x33, 0x48, 0xc1, 0xfa, 0x34, 0xb9, 0xc0, 0x82, 0xc3, 0xcf, 0xf0, 0x87, 0x86, 0x74, 0xad, 0x12, 0x89, 0x8f, 0x90, 0x59, 0xc0, 0xfa, 0x24, 0xff, 0xff, 0xfd, 0xb5, 0x33, 0xf6, 0xd2, 0x71, 0xd4, 0x18, 0x47, 0x3d, 0x6a, 0xe7, 0x3d, 0x97, 0xb4, 0xd, 0xdd, 0x8a, 0x9d, 0xd4, 0xed, 0x68, 0x9e, 0xd, 0x36, 0x2e, 0x8b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0x63, 0x94, 0x72, 0x9, 0x53, 0xe3, 0x37, 0xea, 0x2f, 0xd1, 0xef, 0xe8, 0x9c, 0xb2, 0xe9, 0x5d, 0x37, 0xd, 0xe6, 0xcc, 0xd6, 0x60, 0x4, 0x0, 0x4, 0x0, 0x40, 0x2, 0xf7, 0xf4, 0x94, 0x20, 0xc, 0x2f, 0x29, 0xb, 0x14, 0x18, 0x79, 0x98, 0x10, 0x50, 0xe8, 0x1, 0x8c, 0xd4, 0x48, 0x90, 0x15, 0x1f, 0xd0, 0xa9, 0xff, 0xfb, 0x70, 0x64, 0xf0, 0x80, 0xf4, 0x8b, 0x59, 0x53, 0x7b, 0x8f, 0x3b, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0x89, 0x65, 0x51, 0xed, 0xb1, 0x13, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x4c, 0x31, 0x21, 0x26, 0x5, 0x2, 0x87, 0xa, 0xa3, 0x1, 0x3f, 0x24, 0x5, 0xbd, 0xf3, 0x7c, 0x54, 0xb5, 0x9b, 0x9c, 0x1e, 0xca, 0xfa, 0xc7, 0x65, 0x19, 0x5a, 0xdb, 0x89, 0x73, 0x2, 0xbd, 0xaa, 0x1, 0x7f, 0x52, 0xc5, 0xba, 0xd5, 0x29, 0x67, 0x8f, 0xa5, 0xb, 0xf2, 0xe8, 0xca, 0x7d, 0xc5, 0x75, 0x16, 0x5a, 0xc3, 0x9d, 0xc7, 0x16, 0xb8, 0x33, 0xa9, 0x4d, 0xb, 0x98, 0x13, 0x27, 0xd, 0x5a, 0xbc, 0x3e, 0xf8, 0x64, 0x9, 0xfc, 0x3a, 0xe8, 0xb1, 0x35, 0x84, 0x66, 0xe3, 0x88, 0x49, 0x5a, 0x72, 0x71, 0x6c, 0x7d, 0x13, 0x1, 0x60, 0xb9, 0x2b, 0x72, 0x4d, 0xa2, 0x22, 0xd2, 0x72, 0x82, 0x62, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xb7, 0x3f, 0x1d, 0x86, 0x4e, 0x37, 0xd, 0xe9, 0xeb, 0x98, 0x6c, 0xa2, 0x22, 0x38, 0xce, 0x12, 0x64, 0x89, 0x13, 0x4c, 0x14, 0x15, 0x3e, 0xb0, 0x0, 0xc0, 0x5, 0x10, 0x0, 0x0, 0x3e, 0x5f, 0x33, 0xe, 0x4c, 0x2e, 0x20, 0xc2, 0xb, 0x6, 0xd2, 0x37, 0xbd, 0xf, 0xb4, 0x43, 0xc3, 0x60, 0xa0, 0x78, 0xc0, 0x31, 0x8, 0xc4, 0xea, 0x6b, 0xd4, 0xe2, 0x13, 0x86, 0x45, 0x38, 0x58, 0x1, 0x90, 0xe, 0x92, 0x4d, 0x21, 0x7b, 0x45, 0xe5, 0x91, 0x28, 0x16, 0x5a, 0x38, 0xfa, 0xf5, 0xeb, 0xd9, 0xf8, 0xc7, 0x97, 0xd0, 0xcf, 0x44, 0xc7, 0x1, 0xa9, 0xc, 0xe4, 0xbc, 0xd, 0x89, 0x8b, 0xa9, 0x8d, 0x7b, 0x42, 0x51, 0x70, 0x8, 0x8e, 0x96, 0x89, 0xc9, 0xda, 0xd3, 0xfa, 0xdf, 0x3f, 0x77, 0x29, 0xd1, 0xa6, 0x44, 0x7b, 0x56, 0xba, 0x62, 0x9d, 0xd8, 0xbd, 0xcb, 0xdb, 0xe3, 0x5e, 0x6b, 0x11, 0xda, 0xd3, 0xf3, 0x56, 0x8a, 0x4d, 0x1e, 0x38, 0x5f, 0x7b, 0x96, 0xaf, 0x4a, 0xc2, 0x99, 0x11, 0x80, 0x7, 0x5f, 0x7a, 0xa3, 0x84, 0xc5, 0x63, 0x88, 0x22, 0x85, 0x8b, 0xff, 0xff, 0xd2, 0xb7, 0x31, 0x99, 0x26, 0x4f, 0x56, 0xda, 0xe4, 0xc5, 0x88, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x0, 0xf4, 0xdd, 0x59, 0xd3, 0xfb, 0x6f, 0x4b, 0xd8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x14, 0x5, 0x65, 0x4d, 0xad, 0xbd, 0x2f, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xa6, 0x29, 0xa5, 0x47, 0x47, 0x86, 0x5, 0xa2, 0x51, 0x6f, 0xff, 0xa2, 0xd0, 0x4, 0x20, 0xa8, 0x0, 0x64, 0x3, 0x79, 0x8e, 0x44, 0x8f, 0x80, 0xd1, 0xa8, 0x1c, 0x16, 0x1c, 0x6b, 0xec, 0x9d, 0xa3, 0x26, 0x88, 0x28, 0x38, 0x73, 0x6c, 0xd3, 0x87, 0x41, 0x45, 0x16, 0xf2, 0xd1, 0xb, 0x3, 0x47, 0xb6, 0xb2, 0xdd, 0x9e, 0x99, 0x36, 0x56, 0x9d, 0xa9, 0x4d, 0x20, 0xf2, 0x55, 0x6c, 0xa6, 0xd5, 0xe0, 0x1e, 0x56, 0xc0, 0x49, 0x76, 0x35, 0x29, 0x4f, 0x79, 0x86, 0xcd, 0xcf, 0x9d, 0x63, 0x25, 0x31, 0xd3, 0x68, 0x42, 0x9, 0x28, 0xcd, 0xd8, 0x5e, 0xaa, 0xe8, 0xa2, 0x66, 0xfd, 0x95, 0xa3, 0xae, 0x1f, 0x9a, 0x1d, 0xa0, 0xbb, 0xe, 0x2d, 0xac, 0xec, 0xce, 0x64, 0x15, 0xa9, 0xc2, 0x1d, 0xa6, 0xb0, 0xac, 0x2, 0x8d, 0x2f, 0x61, 0x4a, 0xeb, 0x2f, 0xf8, 0x6b, 0x76, 0xef, 0x72, 0x48, 0xf4, 0xaa, 0x65, 0xa2, 0x65, 0x46, 0x1, 0xf0, 0x51, 0x8, 0xff, 0xff, 0xeb, 0xe5, 0x8, 0x92, 0x76, 0x38, 0xb9, 0x37, 0xe5, 0x2a, 0x60, 0x8c, 0x34, 0xd2, 0xa8, 0x2f, 0x59, 0x8f, 0xfe, 0xe, 0x29, 0xf5, 0xd4, 0x0, 0xc0, 0x26, 0x0, 0x20, 0x0, 0xce, 0x65, 0x22, 0xe3, 0x4, 0xa6, 0x42, 0x26, 0x16, 0x1d, 0x5, 0x23, 0x9a, 0x24, 0x68, 0x5, 0x14, 0xc4, 0xc7, 0xc, 0x38, 0xd, 0xd6, 0x52, 0xd, 0x81, 0x95, 0xa8, 0x23, 0x36, 0x12, 0x17, 0x7d, 0x5b, 0xb3, 0x20, 0xab, 0x5e, 0x43, 0x72, 0x6a, 0x7a, 0x6c, 0x7c, 0x2c, 0x18, 0xb0, 0xc3, 0xfe, 0xc9, 0xbb, 0x66, 0x9, 0xc9, 0xee, 0x15, 0xf9, 0x98, 0xeb, 0x89, 0x56, 0xbb, 0x9f, 0xbe, 0x88, 0x73, 0x2d, 0xe, 0xa5, 0xa8, 0xac, 0x87, 0x1d, 0xae, 0xc3, 0x36, 0x9f, 0xe5, 0xb8, 0xdb, 0xa2, 0xf3, 0x28, 0x79, 0xe9, 0xb7, 0xcf, 0x35, 0x2d, 0xc2, 0xbf, 0x56, 0xf6, 0xc3, 0x76, 0xcf, 0xbd, 0x54, 0xb6, 0x9a, 0x8e, 0xc2, 0x72, 0xdb, 0x54, 0xe5, 0x3a, 0xb4, 0xdc, 0xa4, 0xa9, 0xa7, 0xde, 0xf, 0x88, 0x5, 0x87, 0x46, 0x4, 0x44, 0x7, 0x7f, 0xff, 0xee, 0xcf, 0x28, 0xd0, 0xd, 0x8, 0x46, 0x24, 0xf9, 0x5c, 0x41, 0xc5, 0x8a, 0xac, 0xe7, 0x17, 0x65, 0x11, 0x15, 0x3d, 0xff, 0xc1, 0x40, 0x12, 0x80, 0x36, 0x1, 0x4c, 0x22, 0xc8, 0x3, 0xf1, 0xd2, 0xea, 0xe4, 0xcc, 0xff, 0xfb, 0x80, 0x64, 0xee, 0x80, 0xf4, 0xfe, 0x59, 0xd2, 0xeb, 0x4c, 0x3c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x12, 0xd5, 0x5d, 0x4f, 0xad, 0x30, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x86, 0x30, 0x23, 0xc7, 0x6d, 0x9c, 0xfd, 0x40, 0xab, 0x63, 0xcc, 0xca, 0x2, 0x8, 0x0, 0x3, 0x83, 0xa0, 0x36, 0x58, 0xc2, 0x94, 0x10, 0xc, 0x91, 0xaf, 0x36, 0x0, 0x1b, 0xae, 0x3a, 0x59, 0x20, 0x28, 0x32, 0x97, 0x74, 0xfe, 0x88, 0x67, 0x88, 0xfe, 0xa9, 0x40, 0xb2, 0xf2, 0xe1, 0x39, 0xe7, 0xe, 0x6a, 0x5a, 0x7a, 0x2b, 0x3b, 0x17, 0xb6, 0x5e, 0x24, 0x8, 0x2d, 0xad, 0x58, 0xb6, 0xdf, 0xd9, 0xee, 0xcc, 0xa1, 0xba, 0xd2, 0x66, 0x5e, 0x6b, 0xcc, 0xaa, 0xbd, 0xa8, 0xaf, 0x55, 0xb4, 0xd6, 0x96, 0xcb, 0xee, 0xf9, 0x93, 0xac, 0x68, 0xee, 0x0, 0xe5, 0x1c, 0x3b, 0x8f, 0xb2, 0x11, 0x53, 0x65, 0xc8, 0xf6, 0x79, 0xf6, 0xe7, 0x1b, 0x26, 0xaf, 0x35, 0x37, 0xff, 0xff, 0xff, 0xff, 0xb9, 0xca, 0x1e, 0x4c, 0xad, 0x32, 0x21, 0xf5, 0xa8, 0xe1, 0xeb, 0x79, 0xe2, 0xaf, 0x25, 0x15, 0x49, 0xd3, 0x14, 0x51, 0xa5, 0x8e, 0x58, 0x98, 0xdf, 0xff, 0xbc, 0xca, 0xb8, 0x16, 0xd1, 0xa4, 0x80, 0x51, 0x20, 0x6e, 0xd8, 0x4c, 0xeb, 0x36, 0x58, 0x2e, 0x31, 0xc8, 0x73, 0x43, 0x2f, 0x5, 0x8, 0xa2, 0xd1, 0x31, 0x60, 0x34, 0x20, 0xbb, 0xe9, 0xe2, 0xd6, 0x19, 0xe0, 0x8, 0xe8, 0x38, 0x51, 0xc5, 0x77, 0x16, 0x64, 0x8, 0xd6, 0xa0, 0x55, 0xc6, 0x86, 0x85, 0xd6, 0xdd, 0x82, 0x6a, 0xd, 0x82, 0x13, 0x62, 0x58, 0xb4, 0xc, 0x3e, 0xfb, 0x78, 0x1b, 0x3, 0x21, 0x6d, 0x8d, 0xa1, 0x5b, 0x48, 0xb5, 0x1c, 0x19, 0xcf, 0xe6, 0x85, 0x79, 0xe6, 0x4b, 0x10, 0x1a, 0x26, 0x18, 0xd, 0x91, 0xb1, 0x5, 0x3b, 0xfb, 0x53, 0xee, 0x13, 0xa9, 0x52, 0x59, 0x56, 0xa5, 0x88, 0xd1, 0x99, 0x13, 0x82, 0x1, 0x42, 0x33, 0x66, 0x99, 0x5a, 0x6d, 0x51, 0x84, 0xa6, 0xab, 0x47, 0x5b, 0xb6, 0xe4, 0x98, 0x16, 0xc3, 0x51, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xbd, 0x73, 0x2f, 0x68, 0x48, 0x80, 0x51, 0x5, 0x61, 0x17, 0x2c, 0x93, 0xad, 0x41, 0x53, 0x6a, 0x43, 0x53, 0xd2, 0x1, 0x23, 0x48, 0x5a, 0x53, 0x7f, 0xfc, 0x2e, 0xb2, 0x8, 0x82, 0x60, 0x86, 0x8c, 0xa8, 0x49, 0x7f, 0x85, 0x89, 0xc6, 0x81, 0x45, 0xc, 0x72, 0x11, 0x5e, 0x20, 0x90, 0x5, 0xf5, 0x1, 0x11, 0x1e, 0x2, 0xf8, 0x31, 0xee, 0xd4, 0x6a, 0x48, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x80, 0xf4, 0xcd, 0x58, 0x53, 0x6b, 0x6c, 0x2c, 0xf8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x13, 0x21, 0x5d, 0x4d, 0xad, 0x31, 0x6f, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xdc, 0x3c, 0x16, 0xf5, 0xa7, 0x96, 0xc4, 0x83, 0xb6, 0x1f, 0xea, 0x68, 0x93, 0xa0, 0x4b, 0xc5, 0x20, 0xda, 0x82, 0xa6, 0x9e, 0x3c, 0x46, 0xaf, 0x8c, 0xeb, 0x17, 0x99, 0xd1, 0x40, 0x15, 0x3a, 0xe9, 0xc6, 0xcc, 0x9, 0x71, 0xb6, 0xf7, 0x17, 0x92, 0xd2, 0xcf, 0x9d, 0xf9, 0x19, 0x91, 0x11, 0xa1, 0x67, 0xe6, 0xee, 0xe6, 0x4e, 0x4b, 0x1b, 0xdf, 0x2b, 0xdd, 0x38, 0xad, 0x92, 0xaa, 0xa8, 0xb1, 0xbf, 0xb5, 0x14, 0xa7, 0x19, 0x72, 0x29, 0x2d, 0x5b, 0x5c, 0x4a, 0x2, 0x40, 0xe8, 0x90, 0xac, 0x81, 0xe6, 0x7f, 0xfb, 0x7c, 0xd2, 0xab, 0x2e, 0x6a, 0x18, 0x41, 0xdd, 0x67, 0xe5, 0x23, 0xab, 0x20, 0x5, 0x1e, 0x1a, 0x22, 0xff, 0xff, 0x33, 0xf0, 0x15, 0x40, 0xad, 0x2, 0x91, 0x21, 0x74, 0x5, 0x17, 0x1a, 0x2, 0x2e, 0x41, 0x86, 0x92, 0x88, 0xb7, 0x42, 0x4, 0xc9, 0x88, 0xcc, 0x5a, 0x0, 0x50, 0x2, 0x6e, 0x51, 0x5c, 0x9a, 0xd8, 0x35, 0x69, 0x9b, 0x4d, 0x84, 0x89, 0x77, 0xc6, 0xa1, 0xd2, 0x43, 0x61, 0xba, 0x69, 0x96, 0x91, 0x11, 0x2e, 0x1b, 0x10, 0xac, 0x96, 0xb6, 0xb, 0x8a, 0x9b, 0x74, 0x8e, 0x2e, 0xb9, 0x79, 0x1, 0x4d, 0xdc, 0x90, 0xb9, 0x52, 0x59, 0x37, 0x27, 0x66, 0x7a, 0x56, 0xbf, 0x8f, 0x9a, 0x38, 0xc9, 0xca, 0x9, 0x53, 0xab, 0xac, 0xa8, 0xea, 0x1b, 0x88, 0x68, 0xb2, 0xcb, 0xc6, 0x15, 0x3c, 0x40, 0x4a, 0x4c, 0x8, 0xb2, 0x58, 0xcc, 0x23, 0x13, 0xd9, 0x55, 0xd5, 0xd9, 0xda, 0x59, 0xc3, 0xe6, 0xca, 0x5b, 0x68, 0xab, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0x49, 0xa9, 0x23, 0x44, 0xd0, 0x65, 0x54, 0x26, 0x93, 0xde, 0x6d, 0x84, 0xbd, 0xad, 0xd8, 0xab, 0xa9, 0x26, 0xb7, 0x20, 0x76, 0xb1, 0x96, 0x35, 0x4d, 0x54, 0xca, 0xf0, 0xc6, 0x1b, 0x63, 0xcd, 0xc4, 0xaa, 0x58, 0xed, 0x4a, 0x1e, 0x34, 0x6d, 0x12, 0x2d, 0xe0, 0xb0, 0xd1, 0xa8, 0xcb, 0xa, 0x65, 0xff, 0xfb, 0x80, 0x64, 0xe8, 0x80, 0xf4, 0xdf, 0x59, 0x52, 0xeb, 0x1b, 0x48, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0x21, 0x49, 0x4f, 0xed, 0x24, 0xf3, 0xe0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x8c, 0x47, 0xc1, 0xa3, 0x54, 0x81, 0x90, 0x6, 0xc0, 0xb, 0x40, 0x91, 0x52, 0xe8, 0xed, 0x2d, 0xd8, 0x6a, 0x2, 0x9e, 0x5d, 0x47, 0xcc, 0xd, 0x60, 0x35, 0x1d, 0x9f, 0xb1, 0x7c, 0xb8, 0x6e, 0x79, 0x68, 0xea, 0x9a, 0xf5, 0x43, 0x61, 0x5b, 0x4c, 0x59, 0x8d, 0xe5, 0x63, 0xe2, 0xd3, 0x20, 0xc2, 0xbd, 0x4b, 0x5e, 0xb5, 0xb7, 0x41, 0xb8, 0x71, 0x3a, 0xbb, 0x18, 0x83, 0x79, 0xdd, 0x79, 0xd8, 0x6b, 0x1, 0x2c, 0xd5, 0x54, 0xba, 0xe3, 0x4c, 0xb8, 0xe6, 0x72, 0x18, 0xfc, 0xd, 0x54, 0xb5, 0xf6, 0xdf, 0xff, 0xdc, 0xbd, 0x66, 0x73, 0xa3, 0x51, 0x20, 0x7a, 0xcd, 0xff, 0xff, 0x9e, 0x6d, 0x4b, 0xac, 0xc0, 0xf0, 0x74, 0x48, 0x76, 0xa9, 0x37, 0xf, 0x2c, 0x96, 0xe1, 0x75, 0x70, 0x7, 0x1a, 0x3, 0x52, 0x12, 0x53, 0x29, 0x5e, 0x10, 0x9e, 0x15, 0x18, 0xcc, 0xc4, 0x4d, 0x8f, 0x49, 0x55, 0x28, 0x11, 0x10, 0x19, 0x14, 0x30, 0xd, 0xee, 0x8, 0x20, 0x85, 0xaa, 0x36, 0x84, 0xd6, 0x5b, 0x20, 0x68, 0xac, 0xc9, 0xd9, 0x78, 0xe1, 0xf8, 0xa0, 0xc1, 0x8, 0xc0, 0x96, 0x32, 0xb8, 0x15, 0xc, 0x0, 0x62, 0x68, 0x90, 0x23, 0x32, 0xe8, 0x74, 0x30, 0xc8, 0x14, 0x6f, 0xa1, 0xb, 0x30, 0x5e, 0x67, 0x1f, 0x6, 0x9, 0x49, 0xc7, 0x25, 0xe5, 0xfe, 0x7a, 0xdf, 0x3, 0xe9, 0x34, 0x6c, 0x99, 0xac, 0x8b, 0x54, 0xeb, 0x9e, 0x2b, 0x88, 0xa6, 0xc6, 0x42, 0x5b, 0x33, 0xab, 0x1a, 0x24, 0x20, 0x44, 0x26, 0x83, 0x46, 0x83, 0xc3, 0x8b, 0x8d, 0x4b, 0xde, 0xb3, 0x26, 0xa2, 0x59, 0x2b, 0x1a, 0xd, 0xc5, 0xd6, 0x91, 0x3c, 0xea, 0x9f, 0xff, 0xff, 0xff, 0xfc, 0x43, 0x8e, 0xb3, 0x59, 0x26, 0x16, 0x9d, 0x56, 0x58, 0x95, 0xea, 0x4d, 0x57, 0xcc, 0xb4, 0xe2, 0x80, 0x2b, 0xc1, 0x22, 0x98, 0xa8, 0x63, 0x21, 0x16, 0x2, 0x2, 0xa1, 0x86, 0x3a, 0xc1, 0xcf, 0x28, 0xc8, 0x4c, 0x41, 0x43, 0x4, 0x88, 0xd3, 0x84, 0x46, 0x84, 0xae, 0x2, 0x8e, 0x95, 0x27, 0xbb, 0x5e, 0x65, 0xb, 0xd, 0x20, 0x11, 0x8e, 0x8f, 0x8, 0x88, 0x9b, 0xe1, 0xca, 0x96, 0xb8, 0xb9, 0x40, 0xb8, 0x5c, 0x56, 0xa2, 0x15, 0x41, 0x9e, 0xce, 0x62, 0x4b, 0x36, 0x81, 0x42, 0x8b, 0xb2, 0x2a, 0x39, 0x98, 0x2c, 0xe, 0xd0, 0x72, 0xda, 0xf2, 0x24, 0xff, 0xfb, 0x70, 0x64, 0xfa, 0x80, 0xf4, 0x6c, 0x55, 0xd1, 0xeb, 0x78, 0x49, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x11, 0xa1, 0x39, 0x49, 0xed, 0x30, 0xf3, 0xe8, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0xbe, 0x56, 0x8c, 0x49, 0x10, 0x92, 0x9, 0xba, 0x32, 0xcf, 0x3d, 0xa4, 0xb9, 0xcd, 0x2b, 0x7b, 0xe4, 0x34, 0x8e, 0x62, 0x63, 0x49, 0x8c, 0x84, 0x9e, 0x96, 0xb6, 0xfd, 0xfb, 0x63, 0x5, 0x8b, 0x0, 0xa4, 0x50, 0x4a, 0x39, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0x6c, 0x69, 0x9f, 0xee, 0x64, 0xb2, 0x4b, 0xb4, 0x47, 0x7e, 0x3e, 0xac, 0x15, 0x80, 0x58, 0xcd, 0x7a, 0x96, 0x7b, 0xa5, 0xbf, 0x7e, 0x0, 0xf, 0x23, 0x2b, 0x73, 0x3a, 0xc4, 0x17, 0x9, 0xa7, 0x80, 0x66, 0x55, 0xe6, 0x64, 0x80, 0xe1, 0x43, 0x9e, 0xa, 0x8e, 0xe3, 0xa0, 0x4d, 0x64, 0x89, 0x12, 0xd7, 0x14, 0xd9, 0x41, 0x20, 0x8, 0xd4, 0xcc, 0x9b, 0xd4, 0x75, 0x7f, 0xf, 0x48, 0x4d, 0x98, 0x82, 0x5, 0x63, 0xf8, 0xd6, 0x83, 0x23, 0xe6, 0x48, 0xd9, 0xd8, 0xdf, 0xb1, 0x90, 0xc9, 0xa4, 0x27, 0x7a, 0xf0, 0x38, 0xfb, 0x65, 0x94, 0xef, 0xf8, 0xd5, 0xca, 0xdb, 0x49, 0xb2, 0x55, 0xc8, 0x5d, 0x19, 0x56, 0xc9, 0x1d, 0x22, 0x6d, 0x61, 0x51, 0x20, 0x5d, 0x3, 0x6c, 0x2b, 0x93, 0x8a, 0xab, 0xd4, 0x61, 0x32, 0x6, 0xc8, 0x91, 0x13, 0x74, 0x91, 0x17, 0xbf, 0x8d, 0x76, 0x71, 0x74, 0x46, 0x9a, 0xb8, 0xc5, 0x97, 0x7d, 0xbd, 0xdd, 0xe1, 0xef, 0xdf, 0x0, 0xd1, 0xb7, 0x33, 0xe, 0xae, 0xcf, 0xb5, 0xf8, 0x5, 0x78, 0x5b, 0x61, 0x8b, 0xb5, 0x70, 0x57, 0x47, 0x2c, 0x3, 0x39, 0x9e, 0x41, 0x5a, 0x3, 0x4a, 0x5c, 0x85, 0x54, 0x5c, 0x80, 0x52, 0x53, 0xa1, 0x44, 0x90, 0x7b, 0x1e, 0x8a, 0xc4, 0xe9, 0xca, 0xc, 0xa, 0x86, 0xc6, 0xe0, 0xc2, 0x24, 0x51, 0x11, 0x29, 0xdf, 0x4, 0x92, 0x35, 0x6d, 0x25, 0x35, 0x8d, 0x43, 0x43, 0xe3, 0xa2, 0x39, 0xea, 0xd2, 0xe0, 0xb8, 0x4, 0x6d, 0xa2, 0x64, 0x2a, 0x2c, 0xcb, 0x12, 0x94, 0x53, 0xe8, 0xa6, 0x44, 0x58, 0xe6, 0xad, 0xee, 0x93, 0xf1, 0xd9, 0x54, 0x48, 0x89, 0xd9, 0x5f, 0xff, 0xfb, 0x70, 0x64, 0xf7, 0x81, 0xf4, 0x75, 0x55, 0xd0, 0xfb, 0x49, 0x5c, 0x78, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x10, 0x5d, 0x3b, 0x43, 0xed, 0x24, 0xcf, 0x28, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x29, 0xaf, 0xda, 0xa9, 0xd2, 0x4a, 0xf, 0xa, 0x95, 0x2c, 0x6f, 0x2b, 0x58, 0xc8, 0xcb, 0xb5, 0x28, 0xc4, 0xea, 0xa9, 0x47, 0x18, 0x5b, 0xef, 0x56, 0x6b, 0xdb, 0x1d, 0xcd, 0x52, 0x50, 0x26, 0xbb, 0x48, 0x75, 0x59, 0x17, 0xb6, 0x30, 0xc, 0x2c, 0x50, 0xe5, 0xc2, 0x4c, 0x20, 0xc8, 0x1c, 0x40, 0x10, 0x34, 0x81, 0x14, 0xf2, 0x2b, 0x24, 0xaa, 0xed, 0xa4, 0x12, 0x5a, 0x34, 0xab, 0x1a, 0x45, 0x35, 0x16, 0xbb, 0x10, 0xc9, 0xb1, 0x80, 0xb8, 0x94, 0x4, 0x45, 0xe4, 0xc9, 0x29, 0xc0, 0x3c, 0x4b, 0x14, 0x9a, 0x12, 0xba, 0xd9, 0x55, 0xb5, 0x9a, 0x92, 0x24, 0x4f, 0x46, 0xca, 0xab, 0x4a, 0x88, 0x81, 0xb1, 0x17, 0x61, 0x3c, 0xec, 0xdf, 0x6f, 0x72, 0x30, 0x50, 0xd0, 0x21, 0xe8, 0x63, 0x24, 0xcd, 0x9b, 0xe5, 0x90, 0x3e, 0x51, 0x36, 0x72, 0x9a, 0xe7, 0x71, 0xd0, 0x24, 0x7c, 0xb7, 0x7e, 0x5c, 0x3a, 0x34, 0x58, 0x3e, 0x44, 0x5e, 0x48, 0x6f, 0xe8, 0x20, 0x45, 0x79, 0x36, 0x66, 0x27, 0x5d, 0xae, 0x10, 0xc, 0x42, 0x86, 0x4b, 0xcc, 0x35, 0x24, 0x4a, 0x6, 0x8c, 0xc8, 0x55, 0x2d, 0x4c, 0x21, 0xc1, 0x96, 0x90, 0x2a, 0x36, 0x6, 0x89, 0x8e, 0x2a, 0x75, 0x3e, 0xca, 0x64, 0x10, 0x87, 0xc7, 0xa6, 0xc4, 0xe5, 0x8c, 0x8f, 0xb4, 0xd6, 0x79, 0x71, 0xf1, 0xfa, 0xd5, 0xab, 0x9d, 0x3a, 0x76, 0xc5, 0x92, 0xea, 0x3f, 0xfc, 0x5b, 0x4e, 0x76, 0x14, 0xf, 0xad, 0x86, 0x84, 0x66, 0x34, 0x6d, 0xdd, 0x79, 0x33, 0xb2, 0xe9, 0x4b, 0x39, 0x94, 0x86, 0x82, 0xa0, 0xcb, 0xe6, 0x9d, 0x3c, 0xda, 0xf4, 0x76, 0xdc, 0x7b, 0xa6, 0xf4, 0x83, 0xbd, 0x1e, 0x29, 0x26, 0xb5, 0x9a, 0xa6, 0x53, 0x41, 0x40, 0x68, 0x90, 0x83, 0x4d, 0xd8, 0xca, 0x58, 0x6b, 0xa6, 0xb5, 0xf5, 0xda, 0x0, 0xaa, 0x0, 0x5e, 0x6b, 0x41, 0x75, 0x82, 0x2, 0x85, 0x20, 0x32, 0xb0, 0x5a, 0xd4, 0x8b, 0xb1, 0x93, 0x97, 0xf5, 0xff, 0xfb, 0x60, 0x64, 0xf9, 0x0, 0xf3, 0xf7, 0x3f, 0x52, 0x7b, 0x2c, 0x4c, 0x28, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xf, 0x80, 0xff, 0x43, 0xec, 0x3d, 0x2c, 0x60, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x38, 0x52, 0x19, 0x8b, 0x46, 0x59, 0x70, 0x7a, 0x78, 0x46, 0x3b, 0x15, 0x83, 0x12, 0xad, 0xa8, 0xca, 0xd3, 0x9b, 0xa9, 0x37, 0x2c, 0xab, 0x59, 0x48, 0xdb, 0x2a, 0xbb, 0x9, 0xcb, 0x96, 0x43, 0x5b, 0x4e, 0x4a, 0xb3, 0xa8, 0xf1, 0xec, 0x26, 0xf6, 0xa6, 0x3d, 0x48, 0x5e, 0x8f, 0xf2, 0x61, 0xaa, 0x95, 0x96, 0x58, 0xa2, 0x54, 0x9b, 0xd1, 0xc4, 0xd3, 0x10, 0x78, 0xd3, 0x22, 0xb7, 0x1e, 0xd1, 0x22, 0x41, 0x9d, 0x8f, 0x56, 0xf8, 0x25, 0x44, 0x50, 0xc6, 0xcc, 0x8b, 0xe5, 0xcb, 0x5b, 0x72, 0x48, 0xff, 0xa4, 0x1, 0xd1, 0x70, 0x0, 0xc6, 0xb, 0x1d, 0x7, 0x3, 0x85, 0xc, 0xc9, 0x4, 0x66, 0xd0, 0xa4, 0xe, 0x8e, 0x11, 0x0, 0x20, 0x48, 0xdb, 0xc1, 0x60, 0x29, 0x58, 0x8d, 0x1, 0xa0, 0xd7, 0xc9, 0x62, 0xd3, 0x21, 0x12, 0xa2, 0x82, 0x84, 0xd4, 0x78, 0xd4, 0xa1, 0x64, 0x6c, 0x89, 0xc9, 0x3, 0x1, 0x98, 0x95, 0x4f, 0x23, 0x38, 0xf1, 0x47, 0x42, 0x46, 0xa3, 0x89, 0x65, 0x73, 0x89, 0x3b, 0x5e, 0x39, 0xcf, 0xf9, 0xda, 0x73, 0xf0, 0xd3, 0x78, 0x33, 0x95, 0xa8, 0x4b, 0x7e, 0xff, 0xa3, 0xfd, 0x4f, 0xff, 0xdf, 0xff, 0x45, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xec, 0x0, 0xf3, 0x70, 0x38, 0xce, 0x7b, 0x9, 0x34, 0x58, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xd, 0xd0, 0xef, 0x2f, 0xec, 0x30, 0xcf, 0xa0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x4c, 0x41, 0x4d, 0x45, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x60, 0x64, 0xee, 0x0, 0xf3, 0x41, 0x3b, 0x48, 0xe3, 0xc, 0x33, 0xe8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0xb, 0x88, 0xad, 0x17, 0x8c, 0x24, 0xc7, 0xc0, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0xff, 0xfb, 0x10, 0x64, 0xdd, 0x8f, 0xf0, 0x0, 0x0, 0x7f, 0x80, 0x0, 0x0, 0x8, 0x0, 0x0, 0xd, 0x20, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0xa4, 0x0, 0x0, 0x0, 0x20, 0x0, 0x0, 0x34, 0x80, 0x0, 0x0, 0x4, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55 };
// Here is the static video thing....
// volatile static uint8_t STATIC_FLV_INPUT[] = { 0x0, 0x0, 0x0, 0x20, 0x66, 0x74, 0x79, 0x70, 0x69, 0x73, 0x6f, 0x6d, 0x0, 0x0, 0x2, 0x0, 0x69, 0x73, 0x6f, 0x6d, 0x69, 0x73, 0x6f, 0x32, 0x61, 0x76, 0x63, 0x31, 0x6d, 0x70, 0x34, 0x31, 0x0, 0x0, 0x0, 0x8, 0x66, 0x72, 0x65, 0x65, 0x0, 0x0, 0xb, 0x8f, 0x6d, 0x64, 0x61, 0x74, 0x21, 0x11, 0x45, 0x0, 0x14, 0x50, 0x1, 0x46, 0xff, 0xf1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5d, 0xfb, 0x22, 0x14, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xbc, 0x21, 0x11, 0x45, 0x0, 0x14, 0x50, 0x1, 0x46, 0xff, 0xf1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5d, 0xfb, 0x22, 0x14, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xbc, 0x0, 0x0, 0x0, 0x2, 0x9, 0x10, 0x0, 0x0, 0x0, 0x21, 0x67, 0x4d, 0x4, 0x1f, 0xe8, 0xa0, 0x6c, 0x1e, 0xf3, 0xff, 0xf8, 0x0, 0x8, 0x0, 0xa, 0x10, 0x0, 0x0, 0x24, 0x0, 0x0, 0x3, 0x0, 0x4, 0x0, 0x0, 0x3, 0x0, 0xf2, 0x3c, 0x22, 0x11, 0x96, 0x0, 0x0, 0x0, 0x4, 0x68, 0xee, 0x3c, 0x80, 0x0, 0x0, 0x3, 0x50, 0x65, 0x88, 0x84, 0x0, 0x5f, 0xff, 0xf9, 0x18, 0xee, 0xff, 0xd6, 0x2b, 0xf0, 0x13, 0x2, 0x6a, 0x7f, 0xdf, 0xc, 0xfe, 0x40, 0xd0, 0xb4, 0xf6, 0x7c, 0x8a, 0xc7, 0xd0, 0x53, 0x1a, 0x63, 0xf1, 0xc4, 0xa0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x4, 0xef, 0xa5, 0x47, 0x3, 0xd2, 0xed, 0xea, 0xee, 0x38, 0x1c, 0x25, 0x37, 0x72, 0x53, 0x2b, 0xb8, 0x89, 0xfc, 0xc9, 0xeb, 0xa6, 0x1a, 0xe5, 0xbf, 0xde, 0x67, 0x3a, 0x76, 0xef, 0x8d, 0xd9, 0x64, 0xd1, 0x13, 0x84, 0x62, 0x1, 0x92, 0xf3, 0x84, 0x46, 0x34, 0x0, 0x50, 0x63, 0x88, 0xc8, 0x0, 0x0, 0x3, 0x0, 0xa, 0xe6, 0xe8, 0x0, 0xbb, 0x40, 0x23, 0xd0, 0x8, 0xf8, 0x2, 0x6d, 0x0, 0xc9, 0xc0, 0x5b, 0x0, 0x2a, 0x60, 0x13, 0x70, 0x9, 0xec, 0x5, 0x8, 0x3, 0xc4, 0x1, 0xe0, 0x1, 0x84, 0x1, 0x6, 0x0, 0xed, 0x0, 0xca, 0x0, 0xa2, 0x0, 0x82, 0x0, 0x70, 0x0, 0x69, 0x0, 0x6a, 0x0, 0x6b, 0x0, 0x6c, 0x0, 0x6d, 0x0, 0x6d, 0x0, 0xa1, 0x32, 0x3a, 0xc3, 0xec, 0xa0, 0x61, 0x7e, 0xb7, 0x20, 0xdf, 0x88, 0x78, 0xaa, 0x79, 0x8e, 0xe6, 0xf5, 0xa0, 0x33, 0x2c, 0xc9, 0x2b, 0x74, 0x80, 0x8d, 0xc5, 0xdc, 0x13, 0x6c, 0x4e, 0x44, 0x44, 0xe9, 0x19, 0x6f, 0x99, 0xb3, 0x36, 0x75, 0x12, 0xd3, 0x84, 0x80, 0xa1, 0xd8, 0xd4, 0x36, 0xe9, 0x59, 0x32, 0x2b, 0x5a, 0xab, 0xab, 0x23, 0xd5, 0xa0, 0x74, 0xa8, 0x88, 0x4d, 0x19, 0xf3, 0x5e, 0xe, 0x76, 0x5b, 0x2, 0x34, 0x70, 0xa8, 0xa7, 0x73, 0x38, 0xe8, 0xfb, 0x36, 0x8e, 0x5a, 0xe6, 0x65, 0x44, 0xb3, 0xf2, 0xfa, 0xec, 0x98, 0xa0, 0x3c, 0xb7, 0xbd, 0x11, 0x3, 0x15, 0x31, 0x84, 0x8e, 0x91, 0x2f, 0x7e, 0x5f, 0x1b, 0xc2, 0xd, 0x29, 0x0, 0x31, 0x1f, 0x5a, 0x8, 0xab, 0x88, 0x87, 0xc6, 0x28, 0x43, 0x75, 0x1f, 0x4a, 0x52, 0xf7, 0x40, 0xb, 0x5d, 0xdb, 0xf6, 0x64, 0xd8, 0x5d, 0x59, 0xa0, 0xf0, 0x83, 0x7b, 0x83, 0x88, 0x61, 0x1d, 0xe2, 0xad, 0x80, 0xb, 0xab, 0x56, 0x74, 0xcb, 0x74, 0x8e, 0x1e, 0x2b, 0xf8, 0x3e, 0x7, 0xa6, 0xbf, 0x1d, 0x23, 0xc1, 0x85, 0xce, 0xd2, 0xba, 0x9b, 0x34, 0xb5, 0xcf, 0xe8, 0xf0, 0x2a, 0x7b, 0x98, 0xb0, 0x2d, 0x2b, 0x8c, 0xce, 0x14, 0x73, 0x3a, 0xf2, 0xd0, 0xc5, 0x5c, 0xcc, 0xb9, 0xe0, 0x52, 0x11, 0x56, 0xaa, 0x39, 0xee, 0xb3, 0x88, 0x82, 0xed, 0xc1, 0xe7, 0x9d, 0xf3, 0xad, 0x9b, 0xd1, 0xd4, 0xdd, 0xaf, 0xb1, 0xc0, 0x86, 0xfe, 0x95, 0x36, 0x40, 0x2, 0x8b, 0x88, 0xc8, 0x99, 0x44, 0x8, 0xb8, 0xb2, 0x2f, 0x6a, 0x55, 0x52, 0x1e, 0xdc, 0x2d, 0x9e, 0x9f, 0xe1, 0x42, 0x7, 0x69, 0x97, 0x8f, 0xa1, 0xdc, 0x75, 0xf6, 0xeb, 0xdc, 0xfd, 0x60, 0xff, 0x37, 0xa9, 0x92, 0x1c, 0x5c, 0x35, 0xd6, 0xd2, 0x45, 0xfa, 0x8c, 0x7d, 0xca, 0x1c, 0xa9, 0xf7, 0x9a, 0x7f, 0x20, 0x2a, 0x48, 0xba, 0x97, 0xab, 0xe, 0x77, 0x7d, 0xb8, 0xff, 0x5e, 0x47, 0x91, 0xfc, 0x7a, 0x1e, 0x98, 0x93, 0x9c, 0x7e, 0xb7, 0xde, 0x74, 0xb7, 0x97, 0xe, 0x8b, 0x71, 0xe, 0x73, 0x70, 0xfc, 0x8c, 0x6c, 0x81, 0xd3, 0xee, 0x38, 0x12, 0x3, 0x68, 0x8a, 0x53, 0x91, 0xe, 0xeb, 0x81, 0x32, 0x63, 0x62, 0xcd, 0xed, 0xe5, 0x72, 0xe1, 0xc0, 0x5b, 0x10, 0x67, 0x63, 0x2e, 0x82, 0x39, 0x30, 0xf0, 0x6b, 0xee, 0xca, 0x55, 0x8, 0xc5, 0xb2, 0x21, 0x0, 0xbe, 0x4f, 0xce, 0x21, 0x2a, 0x6c, 0xc, 0x13, 0xa8, 0x5a, 0x42, 0xa3, 0x40, 0x2a, 0xf6, 0x51, 0x20, 0xec, 0xfc, 0x6b, 0xdd, 0xb8, 0x1f, 0x18, 0x1c, 0x25, 0x27, 0xc9, 0x55, 0x3f, 0xd8, 0x2f, 0x36, 0x39, 0xfb, 0xb6, 0xa2, 0xe1, 0xb4, 0x1, 0x17, 0xd2, 0x73, 0x22, 0x4a, 0xde, 0x5d, 0xe1, 0x66, 0x6c, 0x90, 0x64, 0x43, 0x24, 0xb4, 0xc7, 0x8f, 0x2e, 0x1d, 0xb4, 0x17, 0x21, 0x51, 0x79, 0xec, 0x5, 0xa3, 0x1d, 0xf7, 0x31, 0x60, 0xbf, 0x45, 0x9c, 0x4a, 0x9d, 0xc2, 0x60, 0xd0, 0xa4, 0x20, 0xf0, 0x7c, 0xe6, 0xef, 0xcc, 0x8e, 0x3c, 0xd5, 0x5e, 0x77, 0x9d, 0xd5, 0x12, 0x25, 0x9f, 0xc6, 0xa, 0x83, 0xf2, 0x8e, 0x6, 0x97, 0x46, 0xd2, 0x4e, 0x13, 0x6, 0xd4, 0x76, 0x12, 0x44, 0x36, 0x1b, 0xa5, 0xb9, 0x12, 0x1e, 0x4d, 0xf5, 0x44, 0xa0, 0xba, 0xe, 0x4b, 0x7b, 0xcc, 0x60, 0x75, 0xd, 0x74, 0xe3, 0xcb, 0xf, 0xc6, 0x31, 0x56, 0xce, 0x28, 0xd5, 0x86, 0x36, 0x73, 0x39, 0xf2, 0xc1, 0xa1, 0x88, 0x78, 0xf, 0xd3, 0x26, 0x83, 0xa6, 0xf4, 0x7c, 0xdd, 0x10, 0xb2, 0x40, 0x34, 0x68, 0x67, 0x83, 0x7c, 0x65, 0x38, 0x56, 0x9a, 0xdb, 0x5a, 0xa3, 0xdf, 0x34, 0x9d, 0x49, 0xe5, 0xa4, 0x3b, 0xe1, 0xc1, 0x59, 0x48, 0xbd, 0xd2, 0x9a, 0x3d, 0xcb, 0x45, 0x12, 0x98, 0x77, 0xed, 0xee, 0x17, 0x1d, 0xda, 0x85, 0xfd, 0x61, 0x16, 0xaa, 0xb8, 0x92, 0xf4, 0xca, 0xa7, 0x14, 0xff, 0x83, 0xcd, 0xf6, 0xb1, 0x3d, 0x16, 0x65, 0x60, 0xb4, 0xe7, 0xa2, 0x34, 0xde, 0xee, 0x7, 0x35, 0xd6, 0x30, 0x4c, 0xda, 0x7c, 0xa1, 0xe0, 0x35, 0x7c, 0x94, 0xde, 0xae, 0x52, 0xd4, 0x6f, 0x21, 0x38, 0xec, 0xd6, 0x23, 0x93, 0xcd, 0xf5, 0x50, 0x4f, 0x81, 0xe9, 0x5c, 0xf2, 0xc3, 0xfe, 0x4c, 0x72, 0x39, 0x14, 0x64, 0x3, 0x92, 0xff, 0xca, 0x24, 0x8, 0x6e, 0x13, 0x92, 0xbf, 0x1c, 0xd4, 0xad, 0x58, 0x35, 0x3d, 0x1d, 0xca, 0xca, 0xad, 0x92, 0x2, 0xa6, 0xc, 0x16, 0xdb, 0x96, 0xe2, 0x78, 0x80, 0xfa, 0x87, 0x3, 0x17, 0x31, 0x46, 0x2a, 0xe8, 0xa9, 0x70, 0x62, 0x8b, 0x5f, 0x88, 0xb4, 0x4a, 0xd7, 0x18, 0x60, 0x56, 0x82, 0xdb, 0x7, 0x1a, 0xf, 0x8c, 0x73, 0x8b, 0x24, 0xd8, 0x40, 0xf4, 0x33, 0x6b, 0xab, 0xed, 0xbe, 0xf5, 0x33, 0x7d, 0x4e, 0x4d, 0x91, 0xb2, 0xf3, 0x71, 0x65, 0x3a, 0x7e, 0xf4, 0x9c, 0xde, 0xa9, 0xd9, 0xda, 0xb3, 0x59, 0xab, 0x6f, 0xee, 0xa4, 0x0, 0x68, 0xa0, 0x21, 0x11, 0x45, 0x0, 0x14, 0x50, 0x1, 0x46, 0xff, 0xf1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5d, 0xfb, 0x22, 0x14, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xbc, 0x21, 0x11, 0x45, 0x0, 0x14, 0x50, 0x1, 0x46, 0xff, 0xf1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5d, 0xfb, 0x22, 0x14, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xb4, 0xbc, 0x0, 0x0, 0x5, 0xb2, 0x6d, 0x6f, 0x6f, 0x76, 0x0, 0x0, 0x0, 0x6c, 0x6d, 0x76, 0x68, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0xe8, 0x0, 0x0, 0x0, 0x4c, 0x0, 0x1, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x2, 0x1f, 0x74, 0x72, 0x61, 0x6b, 0x0, 0x0, 0x0, 0x5c, 0x74, 0x6b, 0x68, 0x64, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x3, 0x54, 0x0, 0x0, 0x1, 0xe0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x65, 0x64, 0x74, 0x73, 0x0, 0x0, 0x0, 0x1c, 0x65, 0x6c, 0x73, 0x74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x97, 0x6d, 0x64, 0x69, 0x61, 0x0, 0x0, 0x0, 0x20, 0x6d, 0x64, 0x68, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3c, 0x0, 0x0, 0x0, 0x2, 0x0, 0x55, 0xc4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2d, 0x68, 0x64, 0x6c, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x76, 0x69, 0x64, 0x65, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x0, 0x0, 0x0, 0x1, 0x42, 0x6d, 0x69, 0x6e, 0x66, 0x0, 0x0, 0x0, 0x14, 0x76, 0x6d, 0x68, 0x64, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x64, 0x69, 0x6e, 0x66, 0x0, 0x0, 0x0, 0x1c, 0x64, 0x72, 0x65, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xc, 0x75, 0x72, 0x6c, 0x20, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0x2, 0x73, 0x74, 0x62, 0x6c, 0x0, 0x0, 0x0, 0x9e, 0x73, 0x74, 0x73, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x8e, 0x61, 0x76, 0x63, 0x31, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x54, 0x1, 0xe0, 0x0, 0x48, 0x0, 0x0, 0x0, 0x48, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x18, 0xff, 0xff, 0x0, 0x0, 0x0, 0x38, 0x61, 0x76, 0x63, 0x43, 0x1, 0x4d, 0x4, 0x1f, 0xff, 0xe1, 0x0, 0x21, 0x67, 0x4d, 0x4, 0x1f, 0xe8, 0xa0, 0x6c, 0x1e, 0xf3, 0xff, 0xf8, 0x0, 0x8, 0x0, 0xa, 0x10, 0x0, 0x0, 0x24, 0x0, 0x0, 0x3, 0x0, 0x4, 0x0, 0x0, 0x3, 0x0, 0xf2, 0x3c, 0x22, 0x11, 0x96, 0x1, 0x0, 0x4, 0x68, 0xee, 0x3c, 0x80, 0x0, 0x0, 0x0, 0x18, 0x73, 0x74, 0x74, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x1c, 0x73, 0x74, 0x73, 0x63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x14, 0x73, 0x74, 0x73, 0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x3, 0x87, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x14, 0x73, 0x74, 0x63, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x4, 0x30, 0x0, 0x0, 0x2, 0x26, 0x74, 0x72, 0x61, 0x6b, 0x0, 0x0, 0x0, 0x5c, 0x74, 0x6b, 0x68, 0x64, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x4c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x40, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x65, 0x64, 0x74, 0x73, 0x0, 0x0, 0x0, 0x1c, 0x65, 0x6c, 0x73, 0x74, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x21, 0x0, 0x0, 0x8, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x1, 0x9e, 0x6d, 0x64, 0x69, 0x61, 0x0, 0x0, 0x0, 0x20, 0x6d, 0x64, 0x68, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x80, 0x0, 0x0, 0xe, 0x40, 0x55, 0xc4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2d, 0x68, 0x64, 0x6c, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x73, 0x6f, 0x75, 0x6e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x0, 0x0, 0x0, 0x1, 0x49, 0x6d, 0x69, 0x6e, 0x66, 0x0, 0x0, 0x0, 0x10, 0x73, 0x6d, 0x68, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x24, 0x64, 0x69, 0x6e, 0x66, 0x0, 0x0, 0x0, 0x1c, 0x64, 0x72, 0x65, 0x66, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xc, 0x75, 0x72, 0x6c, 0x20, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x1, 0xd, 0x73, 0x74, 0x62, 0x6c, 0x0, 0x0, 0x0, 0x67, 0x73, 0x74, 0x73, 0x64, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x57, 0x6d, 0x70, 0x34, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0xbb, 0x80, 0x0, 0x0, 0x0, 0x0, 0x0, 0x33, 0x65, 0x73, 0x64, 0x73, 0x0, 0x0, 0x0, 0x0, 0x3, 0x80, 0x80, 0x80, 0x22, 0x0, 0x2, 0x0, 0x4, 0x80, 0x80, 0x80, 0x14, 0x40, 0x15, 0x0, 0x0, 0x0, 0x0, 0x3, 0x4a, 0x1a, 0x0, 0x3, 0x4a, 0x1a, 0x5, 0x80, 0x80, 0x80, 0x2, 0x11, 0x90, 0x6, 0x80, 0x80, 0x80, 0x1, 0x2, 0x0, 0x0, 0x0, 0x20, 0x73, 0x74, 0x74, 0x73, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x2, 0x40, 0x0, 0x0, 0x0, 0x1c, 0x73, 0x74, 0x73, 0x63, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x14, 0x73, 0x74, 0x73, 0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x18, 0x73, 0x74, 0x63, 0x6f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x30, 0x0, 0x0, 0x7, 0xb7, 0x0, 0x0, 0x0, 0x1a, 0x73, 0x67, 0x70, 0x64, 0x1, 0x0, 0x0, 0x0, 0x72, 0x6f, 0x6c, 0x6c, 0x0, 0x0, 0x0, 0x2, 0x0, 0x0, 0x0, 0x1, 0xff, 0xff, 0x0, 0x0, 0x0, 0x1c, 0x73, 0x62, 0x67, 0x70, 0x0, 0x0, 0x0, 0x0, 0x72, 0x6f, 0x6c, 0x6c, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x4, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0xf9, 0x75, 0x64, 0x74, 0x61, 0x0, 0x0, 0x0, 0xf1, 0x6d, 0x65, 0x74, 0x61, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x21, 0x68, 0x64, 0x6c, 0x72, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6d, 0x64, 0x69, 0x72, 0x61, 0x70, 0x70, 0x6c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc4, 0x69, 0x6c, 0x73, 0x74, 0x0, 0x0, 0x0, 0x2d, 0xa9, 0x74, 0x6f, 0x6f, 0x0, 0x0, 0x0, 0x25, 0x64, 0x61, 0x74, 0x61, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6c, 0x69, 0x70, 0x63, 0x68, 0x61, 0x6d, 0x70, 0x2e, 0x63, 0x6f, 0x6d, 0x0, 0x0, 0x0, 0x8f, 0xa9, 0x63, 0x6d, 0x74, 0x0, 0x0, 0x0, 0x87, 0x64, 0x61, 0x74, 0x61, 0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6c, 0x69, 0x70, 0x63, 0x68, 0x61, 0x6d, 0x70, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x6e, 0x2f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x2d, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x20, 0x2d, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x2e };
// We can not use mp4 because reasons, so just do this here:
volatile static uint8_t STATIC_FLV_INPUT[] = { 0x46, 0x4c, 0x56, 0x1, 0x1, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x0, 0x0, 0x12, 0x0, 0x1, 0x89, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x2, 0x0, 0xa, 0x6f, 0x6e, 0x4d, 0x65, 0x74, 0x61, 0x44, 0x61, 0x74, 0x61, 0x8, 0x0, 0x0, 0x0, 0xc, 0x0, 0x8, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x0, 0x3f, 0xc9, 0x99, 0x99, 0x99, 0x99, 0x99, 0x9a, 0x0, 0x5, 0x77, 0x69, 0x64, 0x74, 0x68, 0x0, 0x40, 0x8a, 0xa0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x6, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x0, 0x40, 0x7e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x64, 0x61, 0x74, 0x61, 0x72, 0x61, 0x74, 0x65, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x72, 0x61, 0x74, 0x65, 0x0, 0x40, 0x3e, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xc, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x69, 0x64, 0x0, 0x40, 0x1c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xb, 0x6d, 0x61, 0x6a, 0x6f, 0x72, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x2, 0x0, 0x4, 0x69, 0x73, 0x6f, 0x6d, 0x0, 0xd, 0x6d, 0x69, 0x6e, 0x6f, 0x72, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x2, 0x0, 0x3, 0x35, 0x31, 0x32, 0x0, 0x11, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x72, 0x61, 0x6e, 0x64, 0x73, 0x2, 0x0, 0x10, 0x69, 0x73, 0x6f, 0x6d, 0x69, 0x73, 0x6f, 0x32, 0x61, 0x76, 0x63, 0x31, 0x6d, 0x70, 0x34, 0x31, 0x0, 0x7, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x2, 0x0, 0x77, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x73, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x63, 0x6c, 0x69, 0x70, 0x63, 0x68, 0x61, 0x6d, 0x70, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x65, 0x6e, 0x2f, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x2d, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x20, 0x2d, 0x20, 0x66, 0x72, 0x65, 0x65, 0x20, 0x6f, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x65, 0x64, 0x69, 0x74, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x63, 0x6f, 0x6d, 0x70, 0x72, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x2c, 0x20, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x20, 0x63, 0x6f, 0x6e, 0x76, 0x65, 0x72, 0x74, 0x65, 0x72, 0x2e, 0x0, 0x7, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x65, 0x72, 0x2, 0x0, 0xc, 0x4c, 0x61, 0x76, 0x66, 0x36, 0x30, 0x2e, 0x33, 0x2e, 0x31, 0x30, 0x30, 0x0, 0x8, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x0, 0x40, 0x99, 0x84, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x9, 0x0, 0x0, 0x1, 0x94, 0x9, 0x0, 0x0, 0x37, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17, 0x0, 0x0, 0x0, 0x0, 0x1, 0x64, 0x0, 0x1f, 0xff, 0xe1, 0x0, 0x1d, 0x67, 0x64, 0x0, 0x1f, 0xac, 0xd9, 0x40, 0xd8, 0x3d, 0xe7, 0xe6, 0xa0, 0x20, 0x20, 0x28, 0x0, 0x0, 0x3, 0x0, 0x8, 0x0, 0x0, 0x3, 0x1, 0xe0, 0x78, 0xc1, 0x8c, 0xb0, 0x1, 0x0, 0x6, 0x68, 0xeb, 0xe3, 0xcb, 0x22, 0xc0, 0xfd, 0xf8, 0xf8, 0x0, 0x0, 0x0, 0x0, 0x42, 0x9, 0x0, 0x3, 0xc1, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x17, 0x1, 0x0, 0x0, 0x43, 0x0, 0x0, 0x2, 0xa1, 0x6, 0x5, 0xff, 0xff, 0x9d, 0xdc, 0x45, 0xe9, 0xbd, 0xe6, 0xd9, 0x48, 0xb7, 0x96, 0x2c, 0xd8, 0x20, 0xd9, 0x23, 0xee, 0xef, 0x78, 0x32, 0x36, 0x34, 0x20, 0x2d, 0x20, 0x63, 0x6f, 0x72, 0x65, 0x20, 0x31, 0x36, 0x34, 0x20, 0x2d, 0x20, 0x48, 0x2e, 0x32, 0x36, 0x34, 0x2f, 0x4d, 0x50, 0x45, 0x47, 0x2d, 0x34, 0x20, 0x41, 0x56, 0x43, 0x20, 0x63, 0x6f, 0x64, 0x65, 0x63, 0x20, 0x2d, 0x20, 0x43, 0x6f, 0x70, 0x79, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x32, 0x30, 0x30, 0x33, 0x2d, 0x32, 0x30, 0x32, 0x33, 0x20, 0x2d, 0x20, 0x68, 0x74, 0x74, 0x70, 0x3a, 0x2f, 0x2f, 0x77, 0x77, 0x77, 0x2e, 0x76, 0x69, 0x64, 0x65, 0x6f, 0x6c, 0x61, 0x6e, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x78, 0x32, 0x36, 0x34, 0x2e, 0x68, 0x74, 0x6d, 0x6c, 0x20, 0x2d, 0x20, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x20, 0x63, 0x61, 0x62, 0x61, 0x63, 0x3d, 0x31, 0x20, 0x72, 0x65, 0x66, 0x3d, 0x33, 0x20, 0x64, 0x65, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x3d, 0x31, 0x3a, 0x30, 0x3a, 0x30, 0x20, 0x61, 0x6e, 0x61, 0x6c, 0x79, 0x73, 0x65, 0x3d, 0x30, 0x78, 0x33, 0x3a, 0x30, 0x78, 0x31, 0x31, 0x33, 0x20, 0x6d, 0x65, 0x3d, 0x68, 0x65, 0x78, 0x20, 0x73, 0x75, 0x62, 0x6d, 0x65, 0x3d, 0x37, 0x20, 0x70, 0x73, 0x79, 0x3d, 0x31, 0x20, 0x70, 0x73, 0x79, 0x5f, 0x72, 0x64, 0x3d, 0x31, 0x2e, 0x30, 0x30, 0x3a, 0x30, 0x2e, 0x30, 0x30, 0x20, 0x6d, 0x69, 0x78, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x66, 0x3d, 0x31, 0x20, 0x6d, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x3d, 0x31, 0x36, 0x20, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x5f, 0x6d, 0x65, 0x3d, 0x31, 0x20, 0x74, 0x72, 0x65, 0x6c, 0x6c, 0x69, 0x73, 0x3d, 0x31, 0x20, 0x38, 0x78, 0x38, 0x64, 0x63, 0x74, 0x3d, 0x31, 0x20, 0x63, 0x71, 0x6d, 0x3d, 0x30, 0x20, 0x64, 0x65, 0x61, 0x64, 0x7a, 0x6f, 0x6e, 0x65, 0x3d, 0x32, 0x31, 0x2c, 0x31, 0x31, 0x20, 0x66, 0x61, 0x73, 0x74, 0x5f, 0x70, 0x73, 0x6b, 0x69, 0x70, 0x3d, 0x31, 0x20, 0x63, 0x68, 0x72, 0x6f, 0x6d, 0x61, 0x5f, 0x71, 0x70, 0x5f, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x3d, 0x2d, 0x32, 0x20, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x3d, 0x31, 0x35, 0x20, 0x6c, 0x6f, 0x6f, 0x6b, 0x61, 0x68, 0x65, 0x61, 0x64, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x3d, 0x32, 0x20, 0x73, 0x6c, 0x69, 0x63, 0x65, 0x64, 0x5f, 0x74, 0x68, 0x72, 0x65, 0x61, 0x64, 0x73, 0x3d, 0x30, 0x20, 0x6e, 0x72, 0x3d, 0x30, 0x20, 0x64, 0x65, 0x63, 0x69, 0x6d, 0x61, 0x74, 0x65, 0x3d, 0x31, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6c, 0x61, 0x63, 0x65, 0x64, 0x3d, 0x30, 0x20, 0x62, 0x6c, 0x75, 0x72, 0x61, 0x79, 0x5f, 0x63, 0x6f, 0x6d, 0x70, 0x61, 0x74, 0x3d, 0x30, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x72, 0x61, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x72, 0x61, 0x3d, 0x30, 0x20, 0x62, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x3d, 0x33, 0x20, 0x62, 0x5f, 0x70, 0x79, 0x72, 0x61, 0x6d, 0x69, 0x64, 0x3d, 0x32, 0x20, 0x62, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x3d, 0x31, 0x20, 0x62, 0x5f, 0x62, 0x69, 0x61, 0x73, 0x3d, 0x30, 0x20, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x3d, 0x31, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x62, 0x3d, 0x31, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x5f, 0x67, 0x6f, 0x70, 0x3d, 0x30, 0x20, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x70, 0x3d, 0x32, 0x20, 0x6b, 0x65, 0x79, 0x69, 0x6e, 0x74, 0x3d, 0x32, 0x35, 0x30, 0x20, 0x6b, 0x65, 0x79, 0x69, 0x6e, 0x74, 0x5f, 0x6d, 0x69, 0x6e, 0x3d, 0x32, 0x35, 0x20, 0x73, 0x63, 0x65, 0x6e, 0x65, 0x63, 0x75, 0x74, 0x3d, 0x34, 0x30, 0x20, 0x69, 0x6e, 0x74, 0x72, 0x61, 0x5f, 0x72, 0x65, 0x66, 0x72, 0x65, 0x73, 0x68, 0x3d, 0x30, 0x20, 0x72, 0x63, 0x5f, 0x6c, 0x6f, 0x6f, 0x6b, 0x61, 0x68, 0x65, 0x61, 0x64, 0x3d, 0x34, 0x30, 0x20, 0x72, 0x63, 0x3d, 0x63, 0x72, 0x66, 0x20, 0x6d, 0x62, 0x74, 0x72, 0x65, 0x65, 0x3d, 0x31, 0x20, 0x63, 0x72, 0x66, 0x3d, 0x32, 0x33, 0x2e, 0x30, 0x20, 0x71, 0x63, 0x6f, 0x6d, 0x70, 0x3d, 0x30, 0x2e, 0x36, 0x30, 0x20, 0x71, 0x70, 0x6d, 0x69, 0x6e, 0x3d, 0x30, 0x20, 0x71, 0x70, 0x6d, 0x61, 0x78, 0x3d, 0x36, 0x39, 0x20, 0x71, 0x70, 0x73, 0x74, 0x65, 0x70, 0x3d, 0x34, 0x20, 0x69, 0x70, 0x5f, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x3d, 0x31, 0x2e, 0x34, 0x30, 0x20, 0x61, 0x71, 0x3d, 0x31, 0x3a, 0x31, 0x2e, 0x30, 0x30, 0x0, 0x80, 0x0, 0x0, 0x1, 0x13, 0x65, 0x88, 0x84, 0x0, 0x7f, 0xfe, 0xf4, 0xa3, 0xf8, 0x14, 0xd2, 0x18, 0xc4, 0x0, 0xf7, 0xa7, 0xff, 0xed, 0xff, 0x6e, 0xff, 0xf9, 0xfd, 0xa, 0x37, 0x16, 0xf6, 0x55, 0xa0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x97, 0xd9, 0x31, 0x88, 0x0, 0x0, 0x44, 0x0, 0x0, 0x1a, 0x78, 0x0, 0x37, 0xc0, 0x0, 0xe3, 0xc0, 0x4, 0x68, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x5d, 0xaa, 0xbd, 0x2c, 0x20, 0x0, 0xc, 0xa8, 0xe4, 0xa0, 0x0, 0x0, 0x23, 0xc0, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x0, 0x0, 0x3, 0x1, 0x9f, 0x6a, 0xbd, 0xf8, 0xf0, 0x3, 0xa4, 0xb5, 0x6a, 0xbd, 0x58, 0xde, 0xc4, 0x37, 0xb4, 0xd0, 0xee, 0x6d, 0xf8, 0x8d, 0x42, 0xaa, 0x6c, 0xea, 0x2c, 0x3a, 0xb5, 0x68, 0xd7, 0x56, 0xe6, 0x65, 0xe1, 0x9e, 0xf4, 0xd8, 0x7, 0x83, 0x1a, 0x1e, 0xf3, 0x44, 0x7, 0xc3, 0x68, 0x90, 0x4f, 0x83, 0x90, 0xd8, 0xbf, 0x41, 0x1c, 0x2a, 0x0, 0x0, 0x60, 0xa8, 0x3a, 0x5b, 0xf3, 0x6, 0x28, 0x71, 0xd7, 0x8d, 0x56, 0x1e, 0x20, 0x50, 0xbd, 0x76, 0xce, 0xee, 0x90, 0xa2, 0x92, 0xeb, 0xf6, 0xfd, 0xef, 0xcb, 0x85, 0x1a, 0xbe, 0x75, 0x93, 0x23, 0xe1, 0x9c, 0xba, 0x1, 0x4, 0x30, 0x63, 0xa5, 0x7e, 0x20, 0x2, 0xff, 0x1f, 0xa3, 0xa9, 0x51, 0xe6, 0x33, 0xe7, 0xad, 0x7f, 0x47, 0xa0, 0x71, 0x1e, 0x4e, 0x2c, 0xac, 0xe3, 0xc9, 0xe5, 0xa6, 0x82, 0x9b, 0x5c, 0x56, 0x32, 0x23, 0x46, 0xfe, 0xd3, 0xe5, 0xe, 0x54, 0x0, 0x0, 0xe5, 0x81, 0x0, 0x0, 0x3, 0xcc, 0x9, 0x0, 0x0, 0x28, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x0, 0x27, 0x1, 0x0, 0x0, 0x85, 0x0, 0x0, 0x0, 0x1f, 0x41, 0x9a, 0x23, 0x6c, 0x45, 0xff, 0xfa, 0x58, 0x0, 0x0, 0x3, 0x0, 0x0, 0x35, 0x5b, 0xff, 0xb9, 0xd4, 0x0, 0x0, 0x11, 0xca, 0x2f, 0x12, 0x54, 0xc9, 0x40, 0x2a, 0x21, 0x93, 0x80, 0x0, 0x0, 0x0, 0x33, 0x9, 0x0, 0x0, 0x21, 0x0, 0x0, 0x43, 0x0, 0x0, 0x0, 0x0, 0x27, 0x1, 0x0, 0x0, 0x21, 0x0, 0x0, 0x0, 0x18, 0x41, 0x9e, 0x41, 0x78, 0x8d, 0xff, 0xf6, 0x4b, 0x89, 0xea, 0x0, 0x0, 0x3, 0x1, 0x6c, 0x33, 0x10, 0x98, 0x78, 0x93, 0x80, 0x0, 0x12, 0x31, 0x0, 0x0, 0x0, 0x2c, 0x9, 0x0, 0x0, 0x1c, 0x0, 0x0, 0x64, 0x0, 0x0, 0x0, 0x0, 0x27, 0x1, 0x0, 0x0, 0x22, 0x0, 0x0, 0x0, 0x13, 0x1, 0x9e, 0x62, 0x6a, 0x45, 0xff, 0x0, 0x0, 0x3, 0x0, 0x0, 0x5f, 0xa9, 0xb9, 0x8c, 0x0, 0x0, 0x22, 0xe0, 0x0, 0x0, 0x0, 0x27, 0x9, 0x0, 0x0, 0x5, 0x0, 0x0, 0x64, 0x0, 0x0, 0x0, 0x0, 0x17, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10 };
// This here is basically the buffer which we want to fuzz with this program.
// static const char *filter_descr = "aresample=8000,aformat=sample_fmts=s16:channel_layouts=mono";
// asegment=timestamps="60|150"
// static const char *filter_descr = "aresample=8000,ebur128=audio=1:meter=18,aformat=sample_fmts=s16:channel_layouts=mono";
char* fuzzbuf[300]; // Our fuzzer thing...
// static const char *player = "ffplay -f s16le -ar 8000 -ac 1 -"; // Not needed...
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int audio_stream_index = -1;
#include <string.h>
int read_buffer(void *opaque, uint8_t *buf, int buf_size);
int read_buffer_video(void *opaque, uint8_t *buf, int buf_size);
void try_fuzz_audio(void);
unsigned int data_pointer = 0; // Where we are in the input data
FILE *fp_open;
FILE *fp_open_video;
int read_buffer(void *opaque, uint8_t *buf, int buf_size){
if (!feof(fp_open)) {
int true_size=fread(buf,1,buf_size,fp_open);
return true_size;
} else {
return AVERROR_EOF; // return -1; // We actually need to return AVERROR_EOF instead of -1 here I think
}
}
int read_buffer_video(void *opaque, uint8_t *buf, int buf_size){
if (!feof(fp_open_video)) {
int true_size=fread(buf,1,buf_size,fp_open_video);
return true_size;
} else {
return AVERROR_EOF; // return -1; // We actually need to return AVERROR_EOF instead of -1 here I think
}
}
#include <stdio.h>
unsigned char* inbuffer=NULL;
AVIOContext *avio_in=NULL;
static int open_input_file()
{
data_pointer = 0; // Set to zero before starting to read...
const AVCodec *dec;
int ret = 0;
fp_open = fmemopen(STATIC_MP3_INPUT, sizeof(STATIC_MP3_INPUT), "r"); // fopen("small.mp3", "rb");
if (fp_open == NULL) {
return 1;
}
inbuffer = (unsigned char*)av_malloc(sizeof(STATIC_MP3_INPUT));
avio_in =avio_alloc_context(inbuffer, sizeof(STATIC_MP3_INPUT),0,NULL,read_buffer,NULL,NULL);
if(avio_in==NULL){
goto end;
}
fmt_ctx->pb=avio_in;
fmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
if ((ret = avformat_open_input(&fmt_ctx, "small.mp3", NULL, NULL)) < 0) { // was originally: if ((ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
goto end;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
goto end;
}
/* select the audio stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_AUDIO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find an audio stream in the input file\n");
goto end;
}
audio_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
goto end;
//return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[audio_stream_index]->codecpar);
/* init the audio decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open audio decoder\n");
goto end;
}
end:
return ret;
}
static int init_filters(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *abuffersrc = avfilter_get_by_name("abuffer");
const AVFilter *abuffersink = avfilter_get_by_name("abuffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
static const int out_sample_rate = 8000;
const AVFilterLink *outlink;
AVRational time_base = fmt_ctx->streams[audio_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer audio source: the decoded frames from the decoder will be inserted here. */
if (dec_ctx->ch_layout.order == AV_CHANNEL_ORDER_UNSPEC)
av_channel_layout_default(&dec_ctx->ch_layout, dec_ctx->ch_layout.nb_channels);
ret = snprintf(args, sizeof(args),
"time_base=%d/%d:sample_rate=%d:sample_fmt=%s:channel_layout=",
time_base.num, time_base.den, dec_ctx->sample_rate,
av_get_sample_fmt_name(dec_ctx->sample_fmt));
av_channel_layout_describe(&dec_ctx->ch_layout, args + ret, sizeof(args) - ret);
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer source\n");
goto end;
}
/* buffer audio sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, abuffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create audio buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "sample_formats", "s16",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample format\n");
goto end;
}
ret = av_opt_set(buffersink_ctx, "channel_layouts", "mono",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output channel layout\n");
goto end;
}
ret = av_opt_set_array(buffersink_ctx, "samplerates", AV_OPT_SEARCH_CHILDREN,
0, 1, AV_OPT_TYPE_INT, &out_sample_rate);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output sample rate\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize audio buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
/* Print summary of the sink buffer
* Note: args buffer is reused to store channel layout string */
outlink = buffersink_ctx->inputs[0];
av_channel_layout_describe(&outlink->ch_layout, args, sizeof(args));
av_log(NULL, AV_LOG_INFO, "Output: srate:%dHz fmt:%s chlayout:%s\n",
(int)outlink->sample_rate,
(char *)av_x_if_null(av_get_sample_fmt_name(outlink->format), "?"),
args);
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
static void print_frame(const AVFrame *frame)
{
const int n = frame->nb_samples * frame->ch_layout.nb_channels;
const uint16_t *p = (uint16_t*)frame->data[0];
const uint16_t *p_end = p + n;
while (p < p_end) {
fputc(*p & 0xff, stdout);
fputc(*p>>8 & 0xff, stdout);
p++;
}
fflush(stdout);
}
void try_fuzz_audio() {
int ret;
AVPacket *packet = av_packet_alloc();
AVFrame *frame = av_frame_alloc();
AVFrame *filt_frame = av_frame_alloc();
if (!packet || !frame || !filt_frame) {
fprintf(stderr, "Could not allocate frame or packet\n");
exit(1);
}
fmt_ctx = avformat_alloc_context();
if ((ret = open_input_file()) < 0)
goto end;
if ((ret = init_filters(fuzzbuf)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == audio_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
fprintf(stderr, "Ok, so we afefefeffefefefefew going to the thing...\n");
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
goto end;
}
if (ret >= 0) {
/* push the audio data from decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the audio filtergraph\n");
break;
}
/* pull filtered audio from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
}
if (ret < 0) {
goto end;
}
// print_frame(filt_frame);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
}
av_packet_unref(packet);
}
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
printf("Pulling the rest of the bullshit here...\n");
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
}
if (ret < 0) {
goto end;
}
print_frame(filt_frame);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
//avformat_close_input(&fmt_ctx);
// avformat_free_context(fmt_ctx);
// avformat_close_input
av_packet_free(&packet);
av_frame_free(&frame);
av_frame_free(&filt_frame);
if (fp_open) {
//printf("Closing file...\n");
fclose(fp_open);
}
// Freeing the bullshit:::
//fprintf(stderr, "Freeing the bullshit...\n");
//av_free(avio_in);
//av_free(inbuffer);
if (ret < 0 && ret != AVERROR_EOF) {
return;
}
return;
}
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size);
int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) {
// Main fuzzing entrypoint.
// Just copy the entire thing.
if (size >= sizeof(fuzzbuf)-1) {
return 0; // Return early on inputs too big.
}
// memcpy that thing into the fuzz buffer.
// void *memcpy(void dest[restrict .n], const void src[restrict .n],
// size_t n);
memset(fuzzbuf, 0x00, sizeof(fuzzbuf));
memcpy(fuzzbuf, data, size);
// Now call the function
try_fuzz_audio();
fprintf(stderr, "Now trying to fuzz the video processing part...\n");
try_fuzz_video(); // Call the video decoder thing...
fprintf(stderr, "Returned from the bullshit fuck.....\n");
return 0; // Now just exit...
}
/*
int main(int argc, char **argv)
{
memset(fuzzbuf, 0x00, sizeof(fuzzbuf)); // Zero out the buffer.
// Now read from stdin into that buffer
read(0, fuzzbuf, sizeof(fuzzbuf));
try_fuzz_audio(); // First try with the audio
printf("Reached the end...\n");
return 0;
}
*/
// Here is the source code of the video thing:
/*
* Copyright (c) 2010 Nicolas George
* Copyright (c) 2011 Stefano Sabatini
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
/**
* @file
* API example for decoding and filtering
* @example decode_filter_video.c
*/
//#define _XOPEN_SOURCE 600 /* for usleep */
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
//const char *filter_descr = "scale=78:24,transpose=cclock";
/* other way:
scale=78:24 [scl]; [scl] transpose=cclock // assumes "[in]" and "[out]" to be input output pads respectively
*/
static AVFormatContext *fmt_ctx;
static AVCodecContext *dec_ctx;
AVFilterContext *buffersink_ctx;
AVFilterContext *buffersrc_ctx;
AVFilterGraph *filter_graph;
static int video_stream_index = -1;
static int64_t last_pts = AV_NOPTS_VALUE;
static int open_input_file_video(void); // Here just declare the thing...
static int open_input_file_video()
{
const AVCodec *dec;
int ret;
data_pointer = 0; // Set to zero before starting to read...
//const AVCodec *dec;
//int ret = 0;
fp_open_video = fmemopen(STATIC_FLV_INPUT, sizeof(STATIC_FLV_INPUT), "r"); // fopen("small.mp3", "rb");
if (fp_open_video == NULL) {
return 1;
}
inbuffer = (unsigned char*)av_malloc(sizeof(STATIC_FLV_INPUT));
avio_in =avio_alloc_context(inbuffer, sizeof(STATIC_FLV_INPUT),0,NULL,read_buffer_video,NULL,NULL);
if(avio_in==NULL){
return 0;
//goto end;
}
fmt_ctx->pb=avio_in;
fmt_ctx->flags=AVFMT_FLAG_CUSTOM_IO;
if ((ret = avformat_open_input(&fmt_ctx, "oofshit.mp4", NULL, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open input file\n");
return ret;
}
if ((ret = avformat_find_stream_info(fmt_ctx, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find stream information\n");
return ret;
}
/* select the video stream */
ret = av_find_best_stream(fmt_ctx, AVMEDIA_TYPE_VIDEO, -1, -1, &dec, 0);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot find a video stream in the input file\n");
return ret;
}
video_stream_index = ret;
/* create decoding context */
dec_ctx = avcodec_alloc_context3(dec);
if (!dec_ctx)
return AVERROR(ENOMEM);
avcodec_parameters_to_context(dec_ctx, fmt_ctx->streams[video_stream_index]->codecpar);
/* init the video decoder */
if ((ret = avcodec_open2(dec_ctx, dec, NULL)) < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot open video decoder\n");
return ret;
}
return 0;
}
static int init_filters_video(const char *filters_descr)
{
char args[512];
int ret = 0;
const AVFilter *buffersrc = avfilter_get_by_name("buffer");
const AVFilter *buffersink = avfilter_get_by_name("buffersink");
AVFilterInOut *outputs = avfilter_inout_alloc();
AVFilterInOut *inputs = avfilter_inout_alloc();
AVRational time_base = fmt_ctx->streams[video_stream_index]->time_base;
filter_graph = avfilter_graph_alloc();
if (!outputs || !inputs || !filter_graph) {
ret = AVERROR(ENOMEM);
goto end;
}
/* buffer video source: the decoded frames from the decoder will be inserted here. */
snprintf(args, sizeof(args),
"video_size=%dx%d:pix_fmt=%d:time_base=%d/%d:pixel_aspect=%d/%d",
dec_ctx->width, dec_ctx->height, dec_ctx->pix_fmt,
time_base.num, time_base.den,
dec_ctx->sample_aspect_ratio.num, dec_ctx->sample_aspect_ratio.den);
ret = avfilter_graph_create_filter(&buffersrc_ctx, buffersrc, "in",
args, NULL, filter_graph);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot create buffer source\n");
goto end;
}
/* buffer video sink: to terminate the filter chain. */
buffersink_ctx = avfilter_graph_alloc_filter(filter_graph, buffersink, "out");
if (!buffersink_ctx) {
av_log(NULL, AV_LOG_ERROR, "Cannot create buffer sink\n");
ret = AVERROR(ENOMEM);
goto end;
}
ret = av_opt_set(buffersink_ctx, "pixel_formats", "gray8",
AV_OPT_SEARCH_CHILDREN);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot set output pixel format\n");
goto end;
}
ret = avfilter_init_dict(buffersink_ctx, NULL);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Cannot initialize buffer sink\n");
goto end;
}
/*
* Set the endpoints for the filter graph. The filter_graph will
* be linked to the graph described by filters_descr.
*/
/*
* The buffer source output must be connected to the input pad of
* the first filter described by filters_descr; since the first
* filter input label is not specified, it is set to "in" by
* default.
*/
outputs->name = av_strdup("in");
outputs->filter_ctx = buffersrc_ctx;
outputs->pad_idx = 0;
outputs->next = NULL;
/*
* The buffer sink input must be connected to the output pad of
* the last filter described by filters_descr; since the last
* filter output label is not specified, it is set to "out" by
* default.
*/
inputs->name = av_strdup("out");
inputs->filter_ctx = buffersink_ctx;
inputs->pad_idx = 0;
inputs->next = NULL;
if ((ret = avfilter_graph_parse_ptr(filter_graph, filters_descr,
&inputs, &outputs, NULL)) < 0)
goto end;
if ((ret = avfilter_graph_config(filter_graph, NULL)) < 0)
goto end;
end:
avfilter_inout_free(&inputs);
avfilter_inout_free(&outputs);
return ret;
}
// Show function...
static void display_frame(const AVFrame *frame, AVRational time_base)
{
int x, y;
uint8_t *p0, *p;
int64_t delay;
if (frame->pts != AV_NOPTS_VALUE) {
if (last_pts != AV_NOPTS_VALUE) {
/* sleep roughly the right amount of time;
* usleep is in microseconds, just like AV_TIME_BASE. */
delay = av_rescale_q(frame->pts - last_pts,
time_base, AV_TIME_BASE_Q);
if (delay > 0 && delay < 1000000)
usleep(delay);
}
last_pts = frame->pts;
}
/* Trivial ASCII grayscale display. */
p0 = frame->data[0];
puts("\033c");
for (y = 0; y < frame->height; y++) {
p = p0;
for (x = 0; x < frame->width; x++)
putchar(" .-+#"[*(p++) / 52]);
putchar('\n');
p0 += frame->linesize[0];
}
fflush(stdout);
}
int try_fuzz_video(void);
//int main(int argc, char **argv)
int try_fuzz_video() // This is based on the very original main function...
{
fprintf(stderr, "Now doing the bullshit fuck.....\n");
int ret;
AVPacket *packet;
AVFrame *frame;
AVFrame *filt_frame;
/*
if (argc != 2) {
fprintf(stderr, "Usage: %s file\n", argv[0]);
exit(1);
}
*/
if (fmt_ctx) {
// avformat_free_context(fmt_ctx);
avformat_free_context(fmt_ctx);
}
fmt_ctx = avformat_alloc_context();
frame = av_frame_alloc();
filt_frame = av_frame_alloc();
packet = av_packet_alloc();
if (!frame || !filt_frame || !packet) {
fprintf(stderr, "Could not allocate frame or packet\n");
return 1;
//exit(1);
}
if ((ret = open_input_file_video()) < 0)
goto end;
if ((ret = init_filters_video(fuzzbuf)) < 0)
goto end;
/* read all packets */
while (1) {
if ((ret = av_read_frame(fmt_ctx, packet)) < 0)
break;
if (packet->stream_index == video_stream_index) {
ret = avcodec_send_packet(dec_ctx, packet);
if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while sending a packet to the decoder\n");
break;
}
while (ret >= 0) {
ret = avcodec_receive_frame(dec_ctx, frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {
break;
} else if (ret < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while receiving a frame from the decoder\n");
goto end;
}
frame->pts = frame->best_effort_timestamp;
/* push the decoded frame into the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, frame, AV_BUFFERSRC_FLAG_KEEP_REF) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while feeding the filtergraph\n");
break;
}
/* pull filtered frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
display_frame(filt_frame, buffersink_ctx->inputs[0]->time_base);
av_frame_unref(filt_frame);
}
av_frame_unref(frame);
}
}
av_packet_unref(packet);
}
if (ret == AVERROR_EOF) {
/* signal EOF to the filtergraph */
if (av_buffersrc_add_frame_flags(buffersrc_ctx, NULL, 0) < 0) {
av_log(NULL, AV_LOG_ERROR, "Error while closing the filtergraph\n");
goto end;
}
/* pull remaining frames from the filtergraph */
while (1) {
ret = av_buffersink_get_frame(buffersink_ctx, filt_frame);
if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF)
break;
if (ret < 0)
goto end;
display_frame(filt_frame, buffersink_ctx->inputs[0]->time_base);
av_frame_unref(filt_frame);
}
}
end:
avfilter_graph_free(&filter_graph);
avcodec_free_context(&dec_ctx);
avformat_close_input(&fmt_ctx);
av_frame_free(&frame);
av_frame_free(&filt_frame);
av_packet_free(&packet);
// We do not do this next part in the audio fuzzing, because we needed here in the video player.
avformat_free_context(fmt_ctx);
if (ret < 0 && ret != AVERROR_EOF) {
fprintf(stderr, "Error occurred: %s\n", av_err2str(ret));
//exit(1);
return 1;
}
return 0;
// exit(0);
}
Does it work as intended????
Yeah, I think it does.
First of all let’s optimize the fuzzer a bit. For example we can just get rid of all of the logging functions..
Now let’s take a look at the log function in /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/log.c
and let’s just patch that shit out.
There you go. no more needless error messages etc.
Next up, let’s just get rid of the printing of the frames…
There you go, now I think the next best step is to verify the syntax of the filtergraph before continuing further. So just copy the old fuzzer and then continue if the syntax is valid…
Ok, so the performance is complete ass, since I get only a couple of execs a second. We may have to make the inbuild video file even smaller.
Ok, so adding a more minimal video file we now get roughly 60 execs a second. Quite impressive in my opinion…
I think there are more optimizations to be done, but idk.
Ok, so let’s start making the custom mutator for filtergraphs. This is going to take quite a while, but I think it will be worth it in the end and even if it isn’t atleast it is good programming practice at least.
Let’s create a binary which checks if a filtergraph is actually valid or not. This is just to check for the syntactic validity of the filter graph.
Maybe get rid of these???
INFO: Loaded 1 PC tables (2964151 PCs): 2964151 [0x55f9850cffa0,0x55f987e0ab10),
./betterfuzzer: Running 1 inputs 1 time(s) each.
Running: timeout-0bd7fbdc560fdd9644ee10e9f652a6db9c3e4d31
Jumping to the loop...
The thing s->nb_outputs: 2
i == 0
i == 1
Exited the loop...
Jumping to the loop...
The thing s->nb_outputs: 2
i == 0
i == 1
Exited the loop...
^C==3734432== libFuzzer: run interrupted; exiting
Ok, so when I run with bm3d I get a crash for some reason…
./testing/betterfuzzer: Running 1 inputs 1 time(s) each.
Running: ./testing/bm3d.txt
=================================================================
==2037988==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x50e000003c20 at pc 0x559a73462bcf bp 0x7ffd073eb3f0 sp 0x7ffd073eb3e8
READ of size 1 at 0x50e000003c20 thread T0
#0 0x559a73462bce in get_block_row /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_bm3d.c:372:18
#1 0x559a734506c1 in basic_block_filtering /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_bm3d.c:410:13
#2 0x559a7344db84 in filter_slice /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_bm3d.c:717:13
#3 0x559a732be8bf in worker_func /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/pthread.c:48:15
#4 0x559a7ad02d4c in run_jobs /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/slicethread.c:65:9
#5 0x559a7ad021b6 in avpriv_slicethread_execute /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/slicethread.c:214:19
#6 0x559a732be2f2 in thread_execute /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/pthread.c:70:5
#7 0x559a734492c3 in filter_frame /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_bm3d.c:752:9
#8 0x559a73445063 in activate /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_bm3d.c:858:19
#9 0x559a731b8175 in ff_filter_activate /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/avfilter.c:1430:38
#10 0x559a731f184f in get_frame_internal /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/buffersink.c:133:19
#11 0x559a73045db2 in try_fuzz_video /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/betterfuzzer.c:842:27
#12 0x559a730449f0 in LLVMFuzzerTestOneInput /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/betterfuzzer.c:478:2
#13 0x559a72f4ff24 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7dc7f24) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
#14 0x559a72f39056 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7db1056) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
#15 0x559a72f3eb0a in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7db6b0a) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
#16 0x559a72f692c6 in main (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7de12c6) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
#17 0x7f1a030be1c9 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#18 0x7f1a030be28a in __libc_start_main csu/../csu/libc-start.c:360:3
#19 0x559a72f33c24 in _start (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7dabc24) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
0x50e000003c20 is located 0 bytes after 96-byte region [0x50e000003bc0,0x50e000003c20)
allocated by thread T0 here:
#0 0x559a73004b3b in posix_memalign (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7e7cb3b) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
#1 0x559a7abfde61 in av_malloc /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/mem.c:107:9
#2 0x559a7ab0f812 in av_buffer_alloc /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/buffer.c:82:12
#3 0x559a7ab0f812 in av_buffer_allocz /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/buffer.c:95:24
#4 0x559a7ab141ca in pool_alloc_buffer /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/buffer.c:369:26
#5 0x559a7ab141ca in av_buffer_pool_get /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavutil/buffer.c:407:15
#6 0x559a7329696b in ff_frame_pool_get /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/framepool.c:220:29
#7 0x559a743b8b56 in ff_default_get_video_buffer2 /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/video.c:100:13
#8 0x559a73e912d5 in scale_frame /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_scale.c:837:11
#9 0x559a73e8d7c6 in do_scale /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_scale.c:967:11
#10 0x559a732a23bc in ff_framesync_activate /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/framesync.c:364:11
#11 0x559a731b8175 in ff_filter_activate /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/avfilter.c:1430:38
#12 0x559a731f184f in get_frame_internal /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/buffersink.c:133:19
#13 0x559a73045db2 in try_fuzz_video /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/betterfuzzer.c:842:27
#14 0x559a730449f0 in LLVMFuzzerTestOneInput /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/tools/betterfuzzer.c:478:2
#15 0x559a72f4ff24 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7dc7f24) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
#16 0x559a72f39056 in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*, unsigned long) (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7db1056) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
#17 0x559a72f3eb0a in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7db6b0a) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
#18 0x559a72f692c6 in main (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7de12c6) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
#19 0x7f1a030be1c9 in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#20 0x7f1a030be28a in __libc_start_main csu/../csu/libc-start.c:360:3
#21 0x559a72f33c24 in _start (/home/oof/ffmpegfuzzerthing/myfork/FFmpeg/testing/betterfuzzer+0x7dabc24) (BuildId: 535b98fac88d7241adccc33b500708b19355dea5)
SUMMARY: AddressSanitizer: heap-buffer-overflow /home/oof/ffmpegfuzzerthing/myfork/FFmpeg/libavfilter/vf_bm3d.c:372:18 in get_block_row
Shadow bytes around the buggy address:
0x50e000003980: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x50e000003a00: 00 00 00 00 00 00 00 00 00 00 fa fa fa fa fa fa
0x50e000003a80: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
0x50e000003b00: 00 00 00 00 fa fa fa fa fa fa fa fa fa fa fa fa
0x50e000003b80: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
=>0x50e000003c00: 00 00 00 00[fa]fa fa fa fa fa fa fa fa fa fa fa
0x50e000003c80: 00 00 00 00 00 00 00 00 00 00 00 fa fa fa fa fa
0x50e000003d00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x50e000003d80: 00 00 00 00 00 00 00 00 00 00 fa fa fa fa fa fa
0x50e000003e00: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
0x50e000003e80: 00 00 00 00 fa fa fa fa fa fa fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
Addressable: 00
Partially addressable: 01 02 03 04 05 06 07
Heap left redzone: fa
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Container overflow: fc
Array cookie: ac
Intra object redzone: bb
ASan internal: fe
Left alloca redzone: ca
Right alloca redzone: cb
==2037988==ABORTING
the contents of the input file are just “bm3d” . When running with the in-memory file it runs normally. I think we can just banlist bm3d from the input and continue, but I think that we should later on actually fix this properly.