From 30a8f67514ac961e9e90c31bfae1937dd649b4cd Mon Sep 17 00:00:00 2001 From: Max Moroz Date: Wed, 15 Mar 2017 09:42:57 +0100 Subject: [PATCH] [expat] Build 6 fuzz targets for different encoding types. (#431) * [expat] Build 6 fuzz targets for different encoding types. It obviously makes fuzzing faster and corpus should become more precise. * [expat] Add dictionaries in different encodings. --- projects/expat/Dockerfile | 2 +- projects/expat/build.sh | 26 ++++++-- projects/expat/parse_fuzzer.cc | 37 +++++++---- projects/expat/xml_UTF_16.dict | 103 +++++++++++++++++++++++++++++++ projects/expat/xml_UTF_16BE.dict | 103 +++++++++++++++++++++++++++++++ projects/expat/xml_UTF_16LE.dict | 103 +++++++++++++++++++++++++++++++ 6 files changed, 358 insertions(+), 16 deletions(-) create mode 100644 projects/expat/xml_UTF_16.dict create mode 100644 projects/expat/xml_UTF_16BE.dict create mode 100644 projects/expat/xml_UTF_16LE.dict diff --git a/projects/expat/Dockerfile b/projects/expat/Dockerfile index 5aaa09ea5..f30374968 100644 --- a/projects/expat/Dockerfile +++ b/projects/expat/Dockerfile @@ -20,4 +20,4 @@ RUN apt-get install -y make autoconf automake libtool docbook2x RUN git clone --depth 1 https://github.com/libexpat/libexpat expat WORKDIR expat -COPY build.sh parse_fuzzer.* xml.dict $SRC/ +COPY build.sh parse_fuzzer.* *.dict $SRC/ diff --git a/projects/expat/build.sh b/projects/expat/build.sh index 5bddadd6d..9e7974136 100755 --- a/projects/expat/build.sh +++ b/projects/expat/build.sh @@ -22,8 +22,26 @@ cd expat make clean make -j$(nproc) all -$CXX $CXXFLAGS -std=c++11 -Ilib/ \ - $SRC/parse_fuzzer.cc -o $OUT/parse_fuzzer \ - -lFuzzingEngine .libs/libexpat.a +ENCODING_TYPES="UTF_16 \ + UTF_8 \ + ISO_8859_1 \ + US_ASCII \ + UTF_16BE \ + UTF_16LE" -cp $SRC/*.dict $SRC/*.options $OUT/ +for encoding in $ENCODING_TYPES; do + fuzz_target_name=parse_${encoding}_fuzzer + + $CXX $CXXFLAGS -std=c++11 -Ilib/ -DENCODING_${encoding} \ + $SRC/parse_fuzzer.cc -o $OUT/${fuzz_target_name} \ + -lFuzzingEngine .libs/libexpat.a + + # Use dictionaries in proper encoding for 16-bit encoding types. + if [[ $encoding == *"UTF_16"* ]]; then + cp $SRC/xml_${encoding}.dict $OUT/${fuzz_target_name}.dict + else + cp $SRC/xml.dict $OUT/${fuzz_target_name}.dict + fi + + cp $SRC/parse_fuzzer.options $OUT/${fuzz_target_name}.options +done diff --git a/projects/expat/parse_fuzzer.cc b/projects/expat/parse_fuzzer.cc index da4640956..aa7c73e2f 100644 --- a/projects/expat/parse_fuzzer.cc +++ b/projects/expat/parse_fuzzer.cc @@ -2,22 +2,37 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -#include +#include +#include + #include "expat.h" -std::vector kEncodings = {{"UTF-16", "UTF-8", "ISO-8859-1", - "US-ASCII", "UTF-16BE", "UTF-16LE", - "INVALIDENCODING"}}; +const char* kEncoding = +#if defined(ENCODING_UTF_16) +"UTF-16" +#elif defined(ENCODING_UTF_8) +"UTF-8" +#elif defined(ENCODING_ISO_8859_1) +"ISO-8859-1" +#elif defined(ENCODING_US_ASCII) +"US-ASCII" +#elif defined(ENCODING_UTF_16BE) +"UTF-16BE" +#elif defined(ENCODING_UTF_16LE) +"UTF-16LE" +#else +#error Encoding type is not specified. +#endif +; + // Entry point for LibFuzzer. extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) { - const char* dataPtr = reinterpret_cast(data); for (int use_ns = 0; use_ns <= 1; ++use_ns) { - for (auto enc : kEncodings) { - XML_Parser parser = - use_ns ? XML_ParserCreateNS(enc, '\n') : XML_ParserCreate(enc); - XML_Parse(parser, dataPtr, size, true); - XML_ParserFree(parser); - } + XML_Parser parser = + use_ns ? XML_ParserCreateNS(kEncoding, '\n') : + XML_ParserCreate(kEncoding); + XML_Parse(parser, reinterpret_cast(data), size, true); + XML_ParserFree(parser); } return 0; } diff --git a/projects/expat/xml_UTF_16.dict b/projects/expat/xml_UTF_16.dict new file mode 100644 index 000000000..404d327b8 --- /dev/null +++ b/projects/expat/xml_UTF_16.dict @@ -0,0 +1,103 @@ +# xml.dict converted to UTF-16 encoding. +"\xff\xfe \x00e\x00n\x00c\x00o\x00d\x00i\x00n\x00g\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +"\xff\xfe \x00a\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +"\xff\xfe \x00h\x00r\x00e\x00f\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +"\xff\xfe \x00s\x00t\x00a\x00n\x00d\x00a\x00l\x00o\x00n\x00e\x00=\x00\\\x00"\x00n\x00o\x00\\\x00"\x00" +"\xff\xfe \x00v\x00e\x00r\x00s\x00i\x00o\x00n\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +"\xff\xfe \x00x\x00m\x00l\x00:\x00b\x00a\x00s\x00e\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +"\xff\xfe \x00x\x00m\x00l\x00:\x00i\x00d\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +"\xff\xfe \x00x\x00m\x00l\x00:\x00l\x00a\x00n\x00g\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +"\xff\xfe \x00x\x00m\x00l\x00:\x00s\x00p\x00a\x00c\x00e\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +"\xff\xfe \x00x\x00m\x00l\x00n\x00s\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +"\xff\xfe&\x00l\x00t\x00;\x00" +"\xff\xfe&\x00#\x001\x00;\x00" +"\xff\xfe&\x00a\x00;\x00" +"\xff\xfe&\x00#\x00x\x001\x00;\x00" +"\xff\xfeA\x00N\x00Y\x00" +"\xff\xfeA\x00T\x00T\x00L\x00I\x00S\x00T\x00" +"\xff\xfeC\x00D\x00A\x00T\x00A\x00" +"\xff\xfeD\x00O\x00C\x00T\x00Y\x00P\x00E\x00" +"\xff\xfeE\x00L\x00E\x00M\x00E\x00N\x00T\x00" +"\xff\xfeE\x00M\x00P\x00T\x00Y\x00" +"\xff\xfeE\x00N\x00T\x00I\x00T\x00I\x00E\x00S\x00" +"\xff\xfeE\x00N\x00T\x00I\x00T\x00Y\x00" +"\xff\xfeF\x00I\x00X\x00E\x00D\x00" +"\xff\xfeI\x00D\x00" +"\xff\xfeI\x00D\x00R\x00E\x00F\x00" +"\xff\xfeI\x00D\x00R\x00E\x00F\x00S\x00" +"\xff\xfeI\x00G\x00N\x00O\x00R\x00E\x00" +"\xff\xfeI\x00M\x00P\x00L\x00I\x00E\x00D\x00" +"\xff\xfeI\x00N\x00C\x00L\x00U\x00D\x00E\x00" +"\xff\xfeN\x00D\x00A\x00T\x00A\x00" +"\xff\xfeN\x00M\x00T\x00O\x00K\x00E\x00N\x00" +"\xff\xfeN\x00M\x00T\x00O\x00K\x00E\x00N\x00S\x00" +"\xff\xfeN\x00O\x00T\x00A\x00T\x00I\x00O\x00N\x00" +"\xff\xfeP\x00C\x00D\x00A\x00T\x00A\x00" +"\xff\xfeP\x00U\x00B\x00L\x00I\x00C\x00" +"\xff\xfeR\x00E\x00Q\x00U\x00I\x00R\x00E\x00D\x00" +"\xff\xfeS\x00Y\x00S\x00T\x00E\x00M\x00" +"\xff\xfe<\x00" +"\xff\xfe>\x00" +"\xff\xfe/\x00>\x00" +"\xff\xfe<\x00/\x00" +"\xff\xfe<\x00?\x00" +"\xff\xfe?\x00>\x00" +"\xff\xfe<\x00!\x00" +"\xff\xfe!\x00>\x00" +"\xff\xfe[\x00]\x00" +"\xff\xfe]\x00]\x00" +"\xff\xfe<\x00!\x00[\x00C\x00D\x00A\x00T\x00A\x00[\x00" +"\xff\xfe<\x00!\x00[\x00C\x00D\x00A\x00T\x00A\x00[\x00]\x00]\x00>\x00" +"\xff\xfe\\\x00"\x00\\\x00"\x00" +"\xff\xfe'\x00'\x00" +"\xff\xfe=\x00\\\x00"\x00\\\x00"\x00" +"\xff\xfe=\x00'\x00'\x00" +"\xff\xfe<\x00!\x00A\x00T\x00T\x00L\x00I\x00S\x00T\x00" +"\xff\xfe<\x00!\x00D\x00O\x00C\x00T\x00Y\x00P\x00E\x00" +"\xff\xfe<\x00!\x00E\x00L\x00E\x00M\x00E\x00N\x00T\x00" +"\xff\xfe<\x00!\x00E\x00N\x00T\x00I\x00T\x00Y\x00" +"\xff\xfe<\x00!\x00[\x00I\x00G\x00N\x00O\x00R\x00E\x00[\x00" +"\xff\xfe<\x00!\x00[\x00I\x00N\x00C\x00L\x00U\x00D\x00E\x00[\x00" +"\xff\xfe<\x00!\x00N\x00O\x00T\x00A\x00T\x00I\x00O\x00N\x00" +"\xff\xfe#\x00C\x00D\x00A\x00T\x00A\x00" +"\xff\xfe#\x00F\x00I\x00X\x00E\x00D\x00" +"\xff\xfe#\x00I\x00M\x00P\x00L\x00I\x00E\x00D\x00" +"\xff\xfe#\x00P\x00C\x00D\x00A\x00T\x00A\x00" +"\xff\xfe#\x00R\x00E\x00Q\x00U\x00I\x00R\x00E\x00D\x00" +"\xff\xfeI\x00S\x00O\x00-\x008\x008\x005\x009\x00-\x001\x00" +"\xff\xfeU\x00S\x00-\x00A\x00S\x00C\x00I\x00I\x00" +"\xff\xfeU\x00T\x00F\x00-\x008\x00" +"\xff\xfeU\x00T\x00F\x00-\x001\x006\x00" +"\xff\xfeU\x00T\x00F\x00-\x001\x006\x00B\x00E\x00" +"\xff\xfeU\x00T\x00F\x00-\x001\x006\x00L\x00E\x00" +"\xff\xfex\x00m\x00l\x00n\x00s\x00" +"\xff\xfex\x00m\x00l\x00n\x00s\x00:\x00" +"\xff\xfex\x00m\x00l\x00n\x00s\x00:\x00x\x00h\x00t\x00m\x00l\x00=\x00\\\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x003\x00.\x00o\x00r\x00g\x00/\x001\x009\x009\x009\x00/\x00x\x00h\x00t\x00m\x00l\x00\\\x00"\x00" +"\xff\xfex\x00m\x00l\x00n\x00s\x00:\x00x\x00m\x00l\x00=\x00\\\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x003\x00.\x00o\x00r\x00g\x00/\x00X\x00M\x00L\x00/\x001\x009\x009\x008\x00/\x00n\x00a\x00m\x00e\x00s\x00p\x00a\x00c\x00e\x00\\\x00"\x00" +"\xff\xfex\x00m\x00l\x00n\x00s\x00:\x00x\x00m\x00l\x00n\x00s\x00=\x00\\\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x003\x00.\x00o\x00r\x00g\x00/\x002\x000\x000\x000\x00/\x00x\x00m\x00l\x00n\x00s\x00\\\x00"\x00" +"\xff\xfe:\x00f\x00a\x00l\x00l\x00b\x00a\x00c\x00k\x00" +"\xff\xfe:\x00a\x00" +"\xff\xfe:\x00i\x00n\x00c\x00l\x00u\x00d\x00e\x00" +"\xff\xfe-\x00-\x00" +"\xff\xfe(\x00)\x00" +"\xff\xfe%\x00a\x00" +"\xff\xfe:\x00s\x00c\x00h\x00e\x00m\x00a\x00" +"\xff\xfeU\x00C\x00S\x00-\x004\x00" +"\xff\xfe<\x00/\x00a\x00>\x00" +"\xff\xfe<\x00a\x00>\x00" +"\xff\xfe<\x00a\x00 \x00/\x00>\x00" +"\xff\xfe<\x00?\x00x\x00m\x00l\x00?\x00>\x00" +"\xff\xfeh\x00t\x00t\x00p\x00:\x00/\x00/\x00d\x00o\x00c\x00b\x00o\x00o\x00" +"\xff\xfeh\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x00" +"\xff\xfeh\x00e\x003\x000\x00" +"\xff\xfeh\x00e\x002\x00" +"\xff\xfeI\x00E\x00T\x00" +"\xff\xfeF\x00D\x00F\x00-\x001\x000\x00" +"\xff\xfea\x00D\x00U\x00C\x00S\x00-\x004\x00O\x00P\x00v\x00e\x00b\x00:\x00" +"\xff\xfea\x00>\x00" +"\xff\xfeU\x00T\x00" +"\xff\xfex\x00M\x00l\x00" +"\xff\xfe/\x00u\x00s\x00r\x00/\x00s\x00h\x00a\x00r\x00e\x00/\x00s\x00g\x00" +"\xff\xfeh\x00a\x000\x007\x00" +"\xff\xfeh\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00o\x00a\x00" +"\xff\xfec\x00l\x00e\x00" diff --git a/projects/expat/xml_UTF_16BE.dict b/projects/expat/xml_UTF_16BE.dict new file mode 100644 index 000000000..c1bdbcf97 --- /dev/null +++ b/projects/expat/xml_UTF_16BE.dict @@ -0,0 +1,103 @@ +# xml.dict converted to UTF-16BE encoding. +"\x00 \x00e\x00n\x00c\x00o\x00d\x00i\x00n\x00g\x00=\x00\\\x00"\x001\x00\\\x00"" +"\x00 \x00a\x00=\x00\\\x00"\x001\x00\\\x00"" +"\x00 \x00h\x00r\x00e\x00f\x00=\x00\\\x00"\x001\x00\\\x00"" +"\x00 \x00s\x00t\x00a\x00n\x00d\x00a\x00l\x00o\x00n\x00e\x00=\x00\\\x00"\x00n\x00o\x00\\\x00"" +"\x00 \x00v\x00e\x00r\x00s\x00i\x00o\x00n\x00=\x00\\\x00"\x001\x00\\\x00"" +"\x00 \x00x\x00m\x00l\x00:\x00b\x00a\x00s\x00e\x00=\x00\\\x00"\x001\x00\\\x00"" +"\x00 \x00x\x00m\x00l\x00:\x00i\x00d\x00=\x00\\\x00"\x001\x00\\\x00"" +"\x00 \x00x\x00m\x00l\x00:\x00l\x00a\x00n\x00g\x00=\x00\\\x00"\x001\x00\\\x00"" +"\x00 \x00x\x00m\x00l\x00:\x00s\x00p\x00a\x00c\x00e\x00=\x00\\\x00"\x001\x00\\\x00"" +"\x00 \x00x\x00m\x00l\x00n\x00s\x00=\x00\\\x00"\x001\x00\\\x00"" +"\x00&\x00l\x00t\x00;" +"\x00&\x00#\x001\x00;" +"\x00&\x00a\x00;" +"\x00&\x00#\x00x\x001\x00;" +"\x00A\x00N\x00Y" +"\x00A\x00T\x00T\x00L\x00I\x00S\x00T" +"\x00C\x00D\x00A\x00T\x00A" +"\x00D\x00O\x00C\x00T\x00Y\x00P\x00E" +"\x00E\x00L\x00E\x00M\x00E\x00N\x00T" +"\x00E\x00M\x00P\x00T\x00Y" +"\x00E\x00N\x00T\x00I\x00T\x00I\x00E\x00S" +"\x00E\x00N\x00T\x00I\x00T\x00Y" +"\x00F\x00I\x00X\x00E\x00D" +"\x00I\x00D" +"\x00I\x00D\x00R\x00E\x00F" +"\x00I\x00D\x00R\x00E\x00F\x00S" +"\x00I\x00G\x00N\x00O\x00R\x00E" +"\x00I\x00M\x00P\x00L\x00I\x00E\x00D" +"\x00I\x00N\x00C\x00L\x00U\x00D\x00E" +"\x00N\x00D\x00A\x00T\x00A" +"\x00N\x00M\x00T\x00O\x00K\x00E\x00N" +"\x00N\x00M\x00T\x00O\x00K\x00E\x00N\x00S" +"\x00N\x00O\x00T\x00A\x00T\x00I\x00O\x00N" +"\x00P\x00C\x00D\x00A\x00T\x00A" +"\x00P\x00U\x00B\x00L\x00I\x00C" +"\x00R\x00E\x00Q\x00U\x00I\x00R\x00E\x00D" +"\x00S\x00Y\x00S\x00T\x00E\x00M" +"\x00<" +"\x00>" +"\x00/\x00>" +"\x00<\x00/" +"\x00<\x00?" +"\x00?\x00>" +"\x00<\x00!" +"\x00!\x00>" +"\x00[\x00]" +"\x00]\x00]" +"\x00<\x00!\x00[\x00C\x00D\x00A\x00T\x00A\x00[" +"\x00<\x00!\x00[\x00C\x00D\x00A\x00T\x00A\x00[\x00]\x00]\x00>" +"\x00\\\x00"\x00\\\x00"" +"\x00'\x00'" +"\x00=\x00\\\x00"\x00\\\x00"" +"\x00=\x00'\x00'" +"\x00<\x00!\x00A\x00T\x00T\x00L\x00I\x00S\x00T" +"\x00<\x00!\x00D\x00O\x00C\x00T\x00Y\x00P\x00E" +"\x00<\x00!\x00E\x00L\x00E\x00M\x00E\x00N\x00T" +"\x00<\x00!\x00E\x00N\x00T\x00I\x00T\x00Y" +"\x00<\x00!\x00[\x00I\x00G\x00N\x00O\x00R\x00E\x00[" +"\x00<\x00!\x00[\x00I\x00N\x00C\x00L\x00U\x00D\x00E\x00[" +"\x00<\x00!\x00N\x00O\x00T\x00A\x00T\x00I\x00O\x00N" +"\x00#\x00C\x00D\x00A\x00T\x00A" +"\x00#\x00F\x00I\x00X\x00E\x00D" +"\x00#\x00I\x00M\x00P\x00L\x00I\x00E\x00D" +"\x00#\x00P\x00C\x00D\x00A\x00T\x00A" +"\x00#\x00R\x00E\x00Q\x00U\x00I\x00R\x00E\x00D" +"\x00I\x00S\x00O\x00-\x008\x008\x005\x009\x00-\x001" +"\x00U\x00S\x00-\x00A\x00S\x00C\x00I\x00I" +"\x00U\x00T\x00F\x00-\x008" +"\x00U\x00T\x00F\x00-\x001\x006" +"\x00U\x00T\x00F\x00-\x001\x006\x00B\x00E" +"\x00U\x00T\x00F\x00-\x001\x006\x00L\x00E" +"\x00x\x00m\x00l\x00n\x00s" +"\x00x\x00m\x00l\x00n\x00s\x00:" +"\x00x\x00m\x00l\x00n\x00s\x00:\x00x\x00h\x00t\x00m\x00l\x00=\x00\\\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x003\x00.\x00o\x00r\x00g\x00/\x001\x009\x009\x009\x00/\x00x\x00h\x00t\x00m\x00l\x00\\\x00"" +"\x00x\x00m\x00l\x00n\x00s\x00:\x00x\x00m\x00l\x00=\x00\\\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x003\x00.\x00o\x00r\x00g\x00/\x00X\x00M\x00L\x00/\x001\x009\x009\x008\x00/\x00n\x00a\x00m\x00e\x00s\x00p\x00a\x00c\x00e\x00\\\x00"" +"\x00x\x00m\x00l\x00n\x00s\x00:\x00x\x00m\x00l\x00n\x00s\x00=\x00\\\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x003\x00.\x00o\x00r\x00g\x00/\x002\x000\x000\x000\x00/\x00x\x00m\x00l\x00n\x00s\x00\\\x00"" +"\x00:\x00f\x00a\x00l\x00l\x00b\x00a\x00c\x00k" +"\x00:\x00a" +"\x00:\x00i\x00n\x00c\x00l\x00u\x00d\x00e" +"\x00-\x00-" +"\x00(\x00)" +"\x00%\x00a" +"\x00:\x00s\x00c\x00h\x00e\x00m\x00a" +"\x00U\x00C\x00S\x00-\x004" +"\x00<\x00/\x00a\x00>" +"\x00<\x00a\x00>" +"\x00<\x00a\x00 \x00/\x00>" +"\x00<\x00?\x00x\x00m\x00l\x00?\x00>" +"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00d\x00o\x00c\x00b\x00o\x00o" +"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w" +"\x00h\x00e\x003\x000" +"\x00h\x00e\x002" +"\x00I\x00E\x00T" +"\x00F\x00D\x00F\x00-\x001\x000" +"\x00a\x00D\x00U\x00C\x00S\x00-\x004\x00O\x00P\x00v\x00e\x00b\x00:" +"\x00a\x00>" +"\x00U\x00T" +"\x00x\x00M\x00l" +"\x00/\x00u\x00s\x00r\x00/\x00s\x00h\x00a\x00r\x00e\x00/\x00s\x00g" +"\x00h\x00a\x000\x007" +"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00o\x00a" +"\x00c\x00l\x00e" diff --git a/projects/expat/xml_UTF_16LE.dict b/projects/expat/xml_UTF_16LE.dict new file mode 100644 index 000000000..02619db5b --- /dev/null +++ b/projects/expat/xml_UTF_16LE.dict @@ -0,0 +1,103 @@ +# xml.dict converted to UTF-16LE encoding. +" \x00e\x00n\x00c\x00o\x00d\x00i\x00n\x00g\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +" \x00a\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +" \x00h\x00r\x00e\x00f\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +" \x00s\x00t\x00a\x00n\x00d\x00a\x00l\x00o\x00n\x00e\x00=\x00\\\x00"\x00n\x00o\x00\\\x00"\x00" +" \x00v\x00e\x00r\x00s\x00i\x00o\x00n\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +" \x00x\x00m\x00l\x00:\x00b\x00a\x00s\x00e\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +" \x00x\x00m\x00l\x00:\x00i\x00d\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +" \x00x\x00m\x00l\x00:\x00l\x00a\x00n\x00g\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +" \x00x\x00m\x00l\x00:\x00s\x00p\x00a\x00c\x00e\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +" \x00x\x00m\x00l\x00n\x00s\x00=\x00\\\x00"\x001\x00\\\x00"\x00" +"&\x00l\x00t\x00;\x00" +"&\x00#\x001\x00;\x00" +"&\x00a\x00;\x00" +"&\x00#\x00x\x001\x00;\x00" +"A\x00N\x00Y\x00" +"A\x00T\x00T\x00L\x00I\x00S\x00T\x00" +"C\x00D\x00A\x00T\x00A\x00" +"D\x00O\x00C\x00T\x00Y\x00P\x00E\x00" +"E\x00L\x00E\x00M\x00E\x00N\x00T\x00" +"E\x00M\x00P\x00T\x00Y\x00" +"E\x00N\x00T\x00I\x00T\x00I\x00E\x00S\x00" +"E\x00N\x00T\x00I\x00T\x00Y\x00" +"F\x00I\x00X\x00E\x00D\x00" +"I\x00D\x00" +"I\x00D\x00R\x00E\x00F\x00" +"I\x00D\x00R\x00E\x00F\x00S\x00" +"I\x00G\x00N\x00O\x00R\x00E\x00" +"I\x00M\x00P\x00L\x00I\x00E\x00D\x00" +"I\x00N\x00C\x00L\x00U\x00D\x00E\x00" +"N\x00D\x00A\x00T\x00A\x00" +"N\x00M\x00T\x00O\x00K\x00E\x00N\x00" +"N\x00M\x00T\x00O\x00K\x00E\x00N\x00S\x00" +"N\x00O\x00T\x00A\x00T\x00I\x00O\x00N\x00" +"P\x00C\x00D\x00A\x00T\x00A\x00" +"P\x00U\x00B\x00L\x00I\x00C\x00" +"R\x00E\x00Q\x00U\x00I\x00R\x00E\x00D\x00" +"S\x00Y\x00S\x00T\x00E\x00M\x00" +"<\x00" +">\x00" +"/\x00>\x00" +"<\x00/\x00" +"<\x00?\x00" +"?\x00>\x00" +"<\x00!\x00" +"!\x00>\x00" +"[\x00]\x00" +"]\x00]\x00" +"<\x00!\x00[\x00C\x00D\x00A\x00T\x00A\x00[\x00" +"<\x00!\x00[\x00C\x00D\x00A\x00T\x00A\x00[\x00]\x00]\x00>\x00" +"\\\x00"\x00\\\x00"\x00" +"'\x00'\x00" +"=\x00\\\x00"\x00\\\x00"\x00" +"=\x00'\x00'\x00" +"<\x00!\x00A\x00T\x00T\x00L\x00I\x00S\x00T\x00" +"<\x00!\x00D\x00O\x00C\x00T\x00Y\x00P\x00E\x00" +"<\x00!\x00E\x00L\x00E\x00M\x00E\x00N\x00T\x00" +"<\x00!\x00E\x00N\x00T\x00I\x00T\x00Y\x00" +"<\x00!\x00[\x00I\x00G\x00N\x00O\x00R\x00E\x00[\x00" +"<\x00!\x00[\x00I\x00N\x00C\x00L\x00U\x00D\x00E\x00[\x00" +"<\x00!\x00N\x00O\x00T\x00A\x00T\x00I\x00O\x00N\x00" +"#\x00C\x00D\x00A\x00T\x00A\x00" +"#\x00F\x00I\x00X\x00E\x00D\x00" +"#\x00I\x00M\x00P\x00L\x00I\x00E\x00D\x00" +"#\x00P\x00C\x00D\x00A\x00T\x00A\x00" +"#\x00R\x00E\x00Q\x00U\x00I\x00R\x00E\x00D\x00" +"I\x00S\x00O\x00-\x008\x008\x005\x009\x00-\x001\x00" +"U\x00S\x00-\x00A\x00S\x00C\x00I\x00I\x00" +"U\x00T\x00F\x00-\x008\x00" +"U\x00T\x00F\x00-\x001\x006\x00" +"U\x00T\x00F\x00-\x001\x006\x00B\x00E\x00" +"U\x00T\x00F\x00-\x001\x006\x00L\x00E\x00" +"x\x00m\x00l\x00n\x00s\x00" +"x\x00m\x00l\x00n\x00s\x00:\x00" +"x\x00m\x00l\x00n\x00s\x00:\x00x\x00h\x00t\x00m\x00l\x00=\x00\\\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x003\x00.\x00o\x00r\x00g\x00/\x001\x009\x009\x009\x00/\x00x\x00h\x00t\x00m\x00l\x00\\\x00"\x00" +"x\x00m\x00l\x00n\x00s\x00:\x00x\x00m\x00l\x00=\x00\\\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x003\x00.\x00o\x00r\x00g\x00/\x00X\x00M\x00L\x00/\x001\x009\x009\x008\x00/\x00n\x00a\x00m\x00e\x00s\x00p\x00a\x00c\x00e\x00\\\x00"\x00" +"x\x00m\x00l\x00n\x00s\x00:\x00x\x00m\x00l\x00n\x00s\x00=\x00\\\x00"\x00h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x003\x00.\x00o\x00r\x00g\x00/\x002\x000\x000\x000\x00/\x00x\x00m\x00l\x00n\x00s\x00\\\x00"\x00" +":\x00f\x00a\x00l\x00l\x00b\x00a\x00c\x00k\x00" +":\x00a\x00" +":\x00i\x00n\x00c\x00l\x00u\x00d\x00e\x00" +"-\x00-\x00" +"(\x00)\x00" +"%\x00a\x00" +":\x00s\x00c\x00h\x00e\x00m\x00a\x00" +"U\x00C\x00S\x00-\x004\x00" +"<\x00/\x00a\x00>\x00" +"<\x00a\x00>\x00" +"<\x00a\x00 \x00/\x00>\x00" +"<\x00?\x00x\x00m\x00l\x00?\x00>\x00" +"h\x00t\x00t\x00p\x00:\x00/\x00/\x00d\x00o\x00c\x00b\x00o\x00o\x00" +"h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00w\x00" +"h\x00e\x003\x000\x00" +"h\x00e\x002\x00" +"I\x00E\x00T\x00" +"F\x00D\x00F\x00-\x001\x000\x00" +"a\x00D\x00U\x00C\x00S\x00-\x004\x00O\x00P\x00v\x00e\x00b\x00:\x00" +"a\x00>\x00" +"U\x00T\x00" +"x\x00M\x00l\x00" +"/\x00u\x00s\x00r\x00/\x00s\x00h\x00a\x00r\x00e\x00/\x00s\x00g\x00" +"h\x00a\x000\x007\x00" +"h\x00t\x00t\x00p\x00:\x00/\x00/\x00w\x00w\x00w\x00.\x00o\x00a\x00" +"c\x00l\x00e\x00"